Version Description
Download this release
Release Info
Developer | pross |
Plugin | WordPress Page Builder – Beaver Builder |
Version | 2.2.4.3 |
Comparing to | |
See all releases |
Code changes from version 2.2.2.5 to 2.2.4.3
- changelog.txt +143 -0
- classes/class-fl-builder-admin-posts.php +1 -1
- classes/class-fl-builder-admin-settings.php +3 -3
- classes/class-fl-builder-admin.php +31 -5
- classes/class-fl-builder-ajax.php +8 -1
- classes/class-fl-builder-auto-suggest.php +1 -5
- classes/class-fl-builder-debug.php +5 -3
- classes/class-fl-builder-export.php +1 -1
- classes/class-fl-builder-fonts.php +4 -2
- classes/class-fl-builder-importer.php +88 -23
- classes/class-fl-builder-loader.php +1 -1
- classes/class-fl-builder-loop.php +32 -17
- classes/class-fl-builder-model.php +12 -9
- classes/class-fl-builder-service-infusionsoft.php +1 -1
- classes/class-fl-builder-shortcodes.php +1 -1
- classes/class-fl-builder-ui-settings-forms.php +11 -4
- classes/class-fl-builder-update.php +14 -0
- classes/class-fl-builder-utils.php +12 -0
- classes/class-fl-builder-wpcli-command.php +3 -7
- classes/class-fl-builder.php +95 -5
- css/fl-builder-admin-settings.css +12 -0
- css/fl-builder.css +3 -2
- css/fl-builder.min.css +1 -1
- extensions/fl-builder-cache-helper/includes/admin-settings-cache-plugins.php +2 -1
- extensions/fl-builder-cache-helper/plugins/acf.php +19 -0
- extensions/fl-builder-cache-helper/plugins/hummingbird.php +1 -1
- extensions/fl-builder-cache-helper/plugins/pantheon.php +13 -0
- extensions/fl-builder-cache-helper/plugins/supercache.php +5 -1
- extensions/fl-builder-multisite/classes/class-fl-builder-multisite.php +1 -5
- extensions/fl-builder-seo-plugins/classes/class-fl-builder-seo-plugins.php +151 -0
- extensions/fl-builder-seo-plugins/fl-builder-seo-plugins.php +8 -0
- extensions/fl-builder-seo-plugins/js/plugin-rankmath.js +20 -0
- extensions/fl-builder-seo-plugins/js/plugin-yoast.js +13 -0
- fl-builder.php +1 -1
- fonts/fontawesome/css/all.min.css +2 -2
- fonts/fontawesome/css/v4-shims.min.css +1 -1
- fonts/fontawesome/webfonts/fa-brands-400.eot +0 -0
- fonts/fontawesome/webfonts/fa-brands-400.svg +71 -88
- fonts/fontawesome/webfonts/fa-brands-400.ttf +0 -0
- fonts/fontawesome/webfonts/fa-brands-400.woff +0 -0
- fonts/fontawesome/webfonts/fa-brands-400.woff2 +0 -0
- fonts/fontawesome/webfonts/fa-regular-400.eot +0 -0
- fonts/fontawesome/webfonts/fa-regular-400.svg +2 -2
- fonts/fontawesome/webfonts/fa-regular-400.ttf +0 -0
- fonts/fontawesome/webfonts/fa-regular-400.woff +0 -0
- fonts/fontawesome/webfonts/fa-regular-400.woff2 +0 -0
- fonts/fontawesome/webfonts/fa-solid-900.eot +0 -0
- fonts/fontawesome/webfonts/fa-solid-900.svg +304 -182
- fonts/fontawesome/webfonts/fa-solid-900.ttf +0 -0
- fonts/fontawesome/webfonts/fa-solid-900.woff +0 -0
- fonts/fontawesome/webfonts/fa-solid-900.woff2 +0 -0
- includes/admin-settings-tools.php +8 -2
- includes/column-settings.php +4 -0
- includes/compatibility.php +201 -0
- includes/global-settings.php +1 -1
- includes/module-settings.php +4 -0
- includes/row-settings.php +5 -1
- includes/ui-bar.php +19 -5
- includes/ui-js-config.php +3 -2
- includes/ui-js-templates.php +6 -2
- includes/ui-settings-config.php +1 -1
- includes/updater-config.php +1 -1
- includes/updater/includes/form.php +1 -1
- includes/vendor/infusionsoft/isdk.php +2 -2
- includes/vendor/infusionsoft/xmlrpc-3.0/Changelog +0 -1573
- includes/vendor/infusionsoft/xmlrpc-3.0/Makefile +0 -123
- includes/vendor/infusionsoft/xmlrpc-3.0/NEWS +0 -333
- includes/vendor/infusionsoft/xmlrpc-3.0/README +0 -13
- includes/vendor/infusionsoft/xmlrpc-3.0/lib/xmlrpc.inc +0 -3840
- includes/vendor/infusionsoft/xmlrpc-3.0/lib/xmlrpc_wrappers.inc +0 -955
- includes/vendor/infusionsoft/xmlrpc-3.0/lib/xmlrpcs.inc +0 -1246
- includes/vendor/infusionsoft/xmlrpc/lib/xmlrpc.inc +214 -0
- js/build/builder.bundle.js +14 -2
- js/build/builder.bundle.min.js +1 -2
changelog.txt
CHANGED
@@ -1,3 +1,146 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
<h4>2.2.2.5 - 04/16/2019</h4>
|
2 |
<p><strong>Hot Fix</strong></p>
|
3 |
<ul>
|
1 |
+
<h4>2.2.4.3 - 07/31/2019</h4>
|
2 |
+
<p><strong>Bug Fixes</strong></p>
|
3 |
+
<ul>
|
4 |
+
<li>Fixed issue when json_encode returns no output stopping module settings from displaying.</li>
|
5 |
+
<li>Fixed possible JS issue and PHP buffer issue when editing pages when SEO plugins are enabled.</li>
|
6 |
+
</ul>
|
7 |
+
|
8 |
+
<h4>2.2.4.2 - 07/24/2019</h4>
|
9 |
+
<p><strong>Enhancements</strong></p>
|
10 |
+
<ul>
|
11 |
+
<li>Added support for Yoast and RankMath to analyse layout contents for SEO in post edit screen.</li>
|
12 |
+
<li>Removed template post-type from Yoast and RankMath sitemaps.</li>
|
13 |
+
</ul>
|
14 |
+
<p><strong>Bug Fixes</strong></p>
|
15 |
+
<ul>
|
16 |
+
<li>Fixed database query issue when duplicating layouts on MariaDB 10.3+</li>
|
17 |
+
<li>Fixed issue with ThirstyAffiliates plugin.</li>
|
18 |
+
</ul>
|
19 |
+
|
20 |
+
<h4>2.2.4.1 - 07/20/2019</h4>
|
21 |
+
<p><strong>Hot Fix</strong></p>
|
22 |
+
<ul>
|
23 |
+
<li>Fixed AJAX response 0 error popup for 3rd party extensions.</li>
|
24 |
+
</ul>
|
25 |
+
|
26 |
+
<h4>2.2.4 - 07/19/2019</h4>
|
27 |
+
<p><strong>Enhancements</strong></p>
|
28 |
+
<ul>
|
29 |
+
<li>Added support for ACF to clear cache when ACF fields are updated.</li>
|
30 |
+
<li>Added detection for 403 errors in ajax with link to KB.</li>
|
31 |
+
<li>Removed deprecated functions like_escape and wp_get_sites.</li>
|
32 |
+
<li>Added Themer connection for max number in Number Module.</li>
|
33 |
+
<li>New filter <code>fl_builder_after_render_shortcodes</code>.</li>
|
34 |
+
<li>New action <code>fl_builder_hidden_node</code>.</li>
|
35 |
+
<li>Added responsive support for match height option in the posts module.</li>
|
36 |
+
</ul>
|
37 |
+
|
38 |
+
<p><strong>Bug Fixes</strong></p>
|
39 |
+
<ul>
|
40 |
+
<li>Fixed relative url issues in text editor and inline editor for links and images.</li>
|
41 |
+
<li>Fixed issue with Pipedrive Chat plugin.</li>
|
42 |
+
<li>Fixed issue with Post Type Switcher plugin.</li>
|
43 |
+
<li>Fixed issue with Google Reviews Business Plugin.</li>
|
44 |
+
<li>Fixed PHP notice in posts grid module.</li>
|
45 |
+
<li>Fixed multisite issue with wp-super-cache, only active site cache is cleared not entire cache.</li>
|
46 |
+
<li>Fixed branding on Tools settings page.</li>
|
47 |
+
<li>Fixed icon-group CSS issues and removed empty element when there is no text.</li>
|
48 |
+
<li>Fixed Gallery collage impacting animations in other modules.</li>
|
49 |
+
<li>Fixed background/border CSS issue in Accordion module.</li>
|
50 |
+
<li>Fixed mobile menu icon missing at 993px in Menu module.</li>
|
51 |
+
<li>Fixed expanded mobile menu not closing when clicked outside of the module.</li>
|
52 |
+
<li>Fixed missing quotes in Accordian module markup.</li>
|
53 |
+
<li>Removed flpaging query string in pagination.</li>
|
54 |
+
<li>Keep initial $post object and reset globals after loop.</li>
|
55 |
+
<li>Various branding updates to error messages.</li>
|
56 |
+
<li>Updated Infusionsoft xmlrpc library for PHP7.2 support.</li>
|
57 |
+
</ul>
|
58 |
+
|
59 |
+
<h4>2.2.3.3 - 06/19/2019</h4>
|
60 |
+
<p><strong>Hot Fix</strong></p>
|
61 |
+
<ul>
|
62 |
+
<li>Fix unclosed element in icon markup.</li>
|
63 |
+
</ul>
|
64 |
+
|
65 |
+
<h4>2.2.3.2 - 06/19/2019</h4>
|
66 |
+
<p><strong>Bug Fixes</strong></p>
|
67 |
+
<ul>
|
68 |
+
<li>Fixed wrong CSS when in preview mode and typography is set to vw.</li>
|
69 |
+
<li>Fixed Featured Image size missing in List layout.</li>
|
70 |
+
<li>Fixed text field not working on Icon module when using render_module_html function.</li>
|
71 |
+
</ul>
|
72 |
+
|
73 |
+
<h4>2.2.3.1 - 06/13/2019</h4>
|
74 |
+
<p><strong>Enhancements</strong></p>
|
75 |
+
<ul>
|
76 |
+
<li>Updated Font Awesome to 5.9.0</li>
|
77 |
+
<li>Added comments to layout.js when in debug mode to show user/global JS.</li>
|
78 |
+
<li>New filter <code>fl_builder_google_font_args</code> to pass args to google font url See: <code>https://developers.google.com/fonts/docs/getting_started#enabling_font_effects_beta</code> for examples.</li>
|
79 |
+
<li>Updated language files.</li>
|
80 |
+
</ul>
|
81 |
+
<p><strong>Bug Fixes</strong></p>
|
82 |
+
<ul>
|
83 |
+
<li>Fixed JS error caused by um-switcher plugin.</li>
|
84 |
+
<li>Fixed user level issue when adding global modules and user does not have edit permissions.</li>
|
85 |
+
<li>Fixed typos in global settings and contact form help texts.</li>
|
86 |
+
<li>Fixed relative urls issue in rich-text module.</li>
|
87 |
+
<li>Fixed PHP warning in font system if font is still being used but is no longer registered in the system.</li>
|
88 |
+
<li>Fixed fatal error when clearing cache if Hummingbird cache is still installed but not active.</li>
|
89 |
+
</ul>
|
90 |
+
|
91 |
+
<h4>2.2.3 - 05/08/2019</h4>
|
92 |
+
<p><strong>Enhancements</strong></p>
|
93 |
+
<ul>
|
94 |
+
<li>New option for post grid, featured image fallback image.</li>
|
95 |
+
<li>Added ability to disable ALL schema via <code>fl_builder_disable_schema</code> filter.</li>
|
96 |
+
<li>Added support for Pantheon cache.</li>
|
97 |
+
<li>Crash message now uses white label product name.</li>
|
98 |
+
<li>New filter <code>fl_builder_crash_white_label_text</code> to change info text.</li>
|
99 |
+
<li>Added url field connection to pricing table button.</li>
|
100 |
+
<li>New filter <code>fl_builder_photo_attributes</code> added to Photo module.</li>
|
101 |
+
</ul>
|
102 |
+
<p><strong>Bug Fixes</strong></p>
|
103 |
+
<ul>
|
104 |
+
<li>Show warning popup if Max Input Vars is exceeded during save action.</li>
|
105 |
+
<li>Fixed the missing bottom border at certain screen sizes for post carousel.</li>
|
106 |
+
<li>Fixed layout CSS for layouts other than the one being actively edited not rendering in the builder.</li>
|
107 |
+
<li>Fixed global settings not refreshing for nodes after saving.</li>
|
108 |
+
<li>Fixed importer issue.</li>
|
109 |
+
<li>Removed HTML added by a chrome extension in template dat files.</li>
|
110 |
+
<li>Fix icon issues with Frontend Dashboard version 1.3.4+</li>
|
111 |
+
<li>Fixed date dropdown being hidden when adding media.</li>
|
112 |
+
<li>Fixed no follow not being used in icon group module.</li>
|
113 |
+
<li>Fixed duplicate posts when paginating random order with scroll or load more pagination.</li>
|
114 |
+
<li>Fixed TinyMCE colors not overriding style tab colors in the Text Editor module.</li>
|
115 |
+
<li>Fixed strong tags not showing as bold when a weight is set in the Text Editor module.</li>
|
116 |
+
<li>Fixed gallery lightbox pagination issue when an image caption contain links.</li>
|
117 |
+
<li>Make sure global column is clickable when restrict editing is enabled.</li>
|
118 |
+
<li>Added width to photo container so it works with shrink header in Themer.</li>
|
119 |
+
<li>Fixed saved columns categories not showing in the builder panel.</li>
|
120 |
+
<li>Fixed flashing behaviour when using insert layout shortcode</li>
|
121 |
+
<li>Fixed WP-Rocket lazyload issue on Themer layouts</li>
|
122 |
+
<li>Fixed issue on multisite if the old fa4 set was enabled on main site you could not use any other sets.</li>
|
123 |
+
</ul>
|
124 |
+
|
125 |
+
<h4>2.2.2.6 - 04/25/2019</h4>
|
126 |
+
<p><strong>Hot Fix</strong></p>
|
127 |
+
<ul>
|
128 |
+
<li>Fixed issue with Grammerly, LastPass and Keeper browser extensions all breaking AJAX save actions.</li>
|
129 |
+
<li>Fixed schema output in post-grid module.</li>
|
130 |
+
<li>Dont show Beaver Builder enabled post count on our own post type pages.</li>
|
131 |
+
<li>Show warning on license settings page if Curl is not installed.</li>
|
132 |
+
<li>Debug mode will now auto turn off after 48 hours.</li>
|
133 |
+
<li>New filter <code>fl_render_content_by_id_attrs</code> in render_content_by_id function to filter the html attributes for the container.</li>
|
134 |
+
<li>New filters added for the UI Bar buttons text:</li>
|
135 |
+
<ul>
|
136 |
+
<li><code>fl_builder_ui_bar_discard</code></li>
|
137 |
+
<li><code>fl_builder_ui_bar_draft</code></li>
|
138 |
+
<li><code>fl_builder_ui_bar_review</code></li>
|
139 |
+
<li><code>fl_builder_ui_bar_publish</code></li>
|
140 |
+
<li><code>fl_builder_ui_bar_cancel</code></li>
|
141 |
+
</ul>
|
142 |
+
</ul>
|
143 |
+
|
144 |
<h4>2.2.2.5 - 04/16/2019</h4>
|
145 |
<p><strong>Hot Fix</strong></p>
|
146 |
<ul>
|
classes/class-fl-builder-admin-posts.php
CHANGED
@@ -106,7 +106,7 @@ final class FLBuilderAdminPosts {
|
|
106 |
if ( 'edit.php' == $pagenow && true === apply_filters( 'fl_builder_admin_edit_sort_bb_enabled', true ) ) {
|
107 |
$post_types = FLBuilderModel::get_post_types();
|
108 |
$post_type = self::get_post_type();
|
109 |
-
if ( in_array( $post_type, $post_types ) ) {
|
110 |
wp_enqueue_script( 'fl-builder-admin-posts-list', FL_BUILDER_URL . 'js/fl-builder-admin-posts-list.js', array( 'jquery' ), FL_BUILDER_VERSION );
|
111 |
$args = array(
|
112 |
'post_type' => $post_type,
|
106 |
if ( 'edit.php' == $pagenow && true === apply_filters( 'fl_builder_admin_edit_sort_bb_enabled', true ) ) {
|
107 |
$post_types = FLBuilderModel::get_post_types();
|
108 |
$post_type = self::get_post_type();
|
109 |
+
if ( 'fl-builder-template' !== $post_type && 'fl-theme-layout' !== $post_type && in_array( $post_type, $post_types ) ) {
|
110 |
wp_enqueue_script( 'fl-builder-admin-posts-list', FL_BUILDER_URL . 'js/fl-builder-admin-posts-list.js', array( 'jquery' ), FL_BUILDER_VERSION );
|
111 |
$args = array(
|
112 |
'post_type' => $post_type,
|
classes/class-fl-builder-admin-settings.php
CHANGED
@@ -650,12 +650,12 @@ final class FLBuilderAdminSettings {
|
|
650 |
if ( ! FLBuilderAdmin::current_user_can_access_settings() ) {
|
651 |
return;
|
652 |
} elseif ( isset( $_POST['fl-debug-nonce'] ) && wp_verify_nonce( $_POST['fl-debug-nonce'], 'debug' ) ) {
|
653 |
-
$debugmode =
|
654 |
|
655 |
if ( ! $debugmode ) {
|
656 |
-
|
657 |
} else {
|
658 |
-
|
659 |
}
|
660 |
}
|
661 |
}
|
650 |
if ( ! FLBuilderAdmin::current_user_can_access_settings() ) {
|
651 |
return;
|
652 |
} elseif ( isset( $_POST['fl-debug-nonce'] ) && wp_verify_nonce( $_POST['fl-debug-nonce'], 'debug' ) ) {
|
653 |
+
$debugmode = get_transient( 'fl_debug_mode' );
|
654 |
|
655 |
if ( ! $debugmode ) {
|
656 |
+
set_transient( 'fl_debug_mode', md5( rand() ), 172800 ); // 48 hours 172800
|
657 |
} else {
|
658 |
+
delete_transient( 'fl_debug_mode' );
|
659 |
}
|
660 |
}
|
661 |
}
|
classes/class-fl-builder-admin.php
CHANGED
@@ -22,9 +22,11 @@ final class FLBuilderAdmin {
|
|
22 |
// Actions
|
23 |
add_action( 'admin_init', __CLASS__ . '::show_activate_notice' );
|
24 |
add_action( 'admin_init', __CLASS__ . '::sanity_checks' );
|
|
|
25 |
|
26 |
// Filters
|
27 |
add_filter( 'plugin_action_links_' . $basename, __CLASS__ . '::render_plugin_action_links' );
|
|
|
28 |
}
|
29 |
|
30 |
/**
|
@@ -39,8 +41,8 @@ final class FLBuilderAdmin {
|
|
39 |
global $wp_version;
|
40 |
|
41 |
// Check for WordPress 3.5 and above.
|
42 |
-
if ( ! version_compare( $wp_version, '
|
43 |
-
self::show_activate_error( __( 'The <strong>
|
44 |
}
|
45 |
|
46 |
/**
|
@@ -60,7 +62,7 @@ final class FLBuilderAdmin {
|
|
60 |
'utm_campaign' => 'no-multisite-support',
|
61 |
) );
|
62 |
/* translators: %s: upgrade url */
|
63 |
-
self::show_activate_error( sprintf( __( 'This version of the <strong>
|
64 |
}
|
65 |
|
66 |
// Success! Run the install.
|
@@ -183,11 +185,11 @@ final class FLBuilderAdmin {
|
|
183 |
if ( FL_BUILDER_LITE !== true ) {
|
184 |
$hash = '#license';
|
185 |
/* translators: %s: link to licence page */
|
186 |
-
$message = __( '
|
187 |
} else {
|
188 |
$hash = '#welcome';
|
189 |
/* translators: %s: link to welcome page */
|
190 |
-
$message = __( '
|
191 |
}
|
192 |
|
193 |
$url = apply_filters( 'fl_builder_activate_redirect_url', admin_url( '/options-general.php?page=fl-builder-settings' . $hash ) );
|
@@ -224,6 +226,14 @@ final class FLBuilderAdmin {
|
|
224 |
* @return array
|
225 |
*/
|
226 |
static public function render_plugin_action_links( $actions ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
227 |
if ( FL_BUILDER_LITE === true ) {
|
228 |
$url = FLBuilderModel::get_upgrade_url( array(
|
229 |
'utm_medium' => 'bb-lite',
|
@@ -245,6 +255,22 @@ final class FLBuilderAdmin {
|
|
245 |
return $actions;
|
246 |
}
|
247 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
248 |
/**
|
249 |
* @since 1.0
|
250 |
* @deprecated 1.8
|
22 |
// Actions
|
23 |
add_action( 'admin_init', __CLASS__ . '::show_activate_notice' );
|
24 |
add_action( 'admin_init', __CLASS__ . '::sanity_checks' );
|
25 |
+
add_action( 'fl_after_license_form', __CLASS__ . '::check_curl', 11 );
|
26 |
|
27 |
// Filters
|
28 |
add_filter( 'plugin_action_links_' . $basename, __CLASS__ . '::render_plugin_action_links' );
|
29 |
+
|
30 |
}
|
31 |
|
32 |
/**
|
41 |
global $wp_version;
|
42 |
|
43 |
// Check for WordPress 3.5 and above.
|
44 |
+
if ( ! version_compare( $wp_version, '4.6', '>=' ) ) {
|
45 |
+
self::show_activate_error( __( 'The <strong>Beaver Builder</strong> plugin requires WordPress version 4.6 or greater. Please update WordPress before activating the plugin.', 'fl-builder' ) );
|
46 |
}
|
47 |
|
48 |
/**
|
62 |
'utm_campaign' => 'no-multisite-support',
|
63 |
) );
|
64 |
/* translators: %s: upgrade url */
|
65 |
+
self::show_activate_error( sprintf( __( 'This version of the <strong>Beaver Builder</strong> plugin is not compatible with WordPress Multisite. <a%s>Please upgrade</a> to the Multisite version of this plugin.', 'fl-builder' ), ' href="' . $url . '" target="_blank"' ) );
|
66 |
}
|
67 |
|
68 |
// Success! Run the install.
|
185 |
if ( FL_BUILDER_LITE !== true ) {
|
186 |
$hash = '#license';
|
187 |
/* translators: %s: link to licence page */
|
188 |
+
$message = __( 'Beaver Builder activated! <a%s>Click here</a> to enable remote updates.', 'fl-builder' );
|
189 |
} else {
|
190 |
$hash = '#welcome';
|
191 |
/* translators: %s: link to welcome page */
|
192 |
+
$message = __( 'Beaver Builder activated! <a%s>Click here</a> to get started.', 'fl-builder' );
|
193 |
}
|
194 |
|
195 |
$url = apply_filters( 'fl_builder_activate_redirect_url', admin_url( '/options-general.php?page=fl-builder-settings' . $hash ) );
|
226 |
* @return array
|
227 |
*/
|
228 |
static public function render_plugin_action_links( $actions ) {
|
229 |
+
|
230 |
+
/**
|
231 |
+
* Some bad plugins set $actions to '' or false to remove all plugin actions
|
232 |
+
* when it should be an empty array, in later PHP versions this results in a fatal error.
|
233 |
+
*/
|
234 |
+
if ( ! is_array( $actions ) ) {
|
235 |
+
$actions = array();
|
236 |
+
}
|
237 |
if ( FL_BUILDER_LITE === true ) {
|
238 |
$url = FLBuilderModel::get_upgrade_url( array(
|
239 |
'utm_medium' => 'bb-lite',
|
255 |
return $actions;
|
256 |
}
|
257 |
|
258 |
+
/**
|
259 |
+
* If Curl module is not installed, inform user on license page as updates are likely to not work.
|
260 |
+
* @since 2.2.2
|
261 |
+
*/
|
262 |
+
static public function check_curl() {
|
263 |
+
|
264 |
+
$curl = ( function_exists( 'curl_version' ) ) ? true : false;
|
265 |
+
|
266 |
+
if ( ! $curl ) {
|
267 |
+
$text = __( 'We’ve detected that your server does not have the PHP cURL extension installed. Ask your hosting provider to install it so you’ll be able to perform automatic updates without error.', 'fl-builder' );
|
268 |
+
$link = 'https://kb.wpbeaverbuilder.com/article/740-troubleshooting-error-when-trying-to-install-update';
|
269 |
+
$link_txt = __( 'See our Knowledge Base for more info.', 'fl-builder' );
|
270 |
+
printf( '<div class="curl-alert"><p>%s</p><p><a target="_blank" href="%s">%s</a></p></div>', $text, $link, $link_txt );
|
271 |
+
}
|
272 |
+
}
|
273 |
+
|
274 |
/**
|
275 |
* @since 1.0
|
276 |
* @deprecated 1.8
|
classes/class-fl-builder-ajax.php
CHANGED
@@ -233,8 +233,15 @@ final class FLBuilderAJAX {
|
|
233 |
*/
|
234 |
do_action( 'fl_ajax_after_' . $action['action'], $keys_args );
|
235 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
236 |
// JSON encode the result.
|
237 |
-
echo json_encode( $result );
|
238 |
|
239 |
// Complete the request.
|
240 |
die();
|
233 |
*/
|
234 |
do_action( 'fl_ajax_after_' . $action['action'], $keys_args );
|
235 |
|
236 |
+
/**
|
237 |
+
* Set header for JSON if headers have not been sent.
|
238 |
+
*/
|
239 |
+
if ( ! headers_sent() ) {
|
240 |
+
header( 'Content-Type:text/plain' );
|
241 |
+
}
|
242 |
+
|
243 |
// JSON encode the result.
|
244 |
+
echo FLBuilderUtils::json_encode( $result );
|
245 |
|
246 |
// Complete the request.
|
247 |
die();
|
classes/class-fl-builder-auto-suggest.php
CHANGED
@@ -105,11 +105,7 @@ final class FLBuilderAutoSuggest {
|
|
105 |
|
106 |
$like = stripslashes( urldecode( $_REQUEST['fl_as_query'] ) );
|
107 |
|
108 |
-
|
109 |
-
$like = esc_sql( $wpdb->esc_like( $like ) );
|
110 |
-
} else {
|
111 |
-
$like = like_escape( esc_sql( $like ) );
|
112 |
-
}
|
113 |
|
114 |
return $like;
|
115 |
}
|
105 |
|
106 |
$like = stripslashes( urldecode( $_REQUEST['fl_as_query'] ) );
|
107 |
|
108 |
+
$like = esc_sql( $wpdb->esc_like( $like ) );
|
|
|
|
|
|
|
|
|
109 |
|
110 |
return $like;
|
111 |
}
|
classes/class-fl-builder-debug.php
CHANGED
@@ -5,15 +5,17 @@ final class FL_Debug {
|
|
5 |
static private $tests = array();
|
6 |
|
7 |
public static function init() {
|
8 |
-
if ( isset( $_GET['fldebug'] ) &&
|
9 |
add_action( 'init', array( 'FL_Debug', 'display_tests' ) );
|
10 |
}
|
11 |
|
12 |
-
if (
|
13 |
self::enable_logging();
|
|
|
14 |
}
|
15 |
}
|
16 |
|
|
|
17 |
public static function enable_logging() {
|
18 |
@ini_set( 'display_errors', 1 ); // @codingStandardsIgnoreLine
|
19 |
@ini_set( 'display_startup_errors', 1 ); // @codingStandardsIgnoreLine
|
@@ -79,7 +81,7 @@ final class FL_Debug {
|
|
79 |
return $plugins;
|
80 |
}
|
81 |
|
82 |
-
|
83 |
return @ini_get( $ini ); // @codingStandardsIgnoreLine
|
84 |
}
|
85 |
|
5 |
static private $tests = array();
|
6 |
|
7 |
public static function init() {
|
8 |
+
if ( isset( $_GET['fldebug'] ) && get_transient( 'fl_debug_mode', false ) === $_GET['fldebug'] ) {
|
9 |
add_action( 'init', array( 'FL_Debug', 'display_tests' ) );
|
10 |
}
|
11 |
|
12 |
+
if ( get_transient( 'fl_debug_mode' ) ) {
|
13 |
self::enable_logging();
|
14 |
+
add_filter( 'fl_is_debug', '__return_true' );
|
15 |
}
|
16 |
}
|
17 |
|
18 |
+
|
19 |
public static function enable_logging() {
|
20 |
@ini_set( 'display_errors', 1 ); // @codingStandardsIgnoreLine
|
21 |
@ini_set( 'display_startup_errors', 1 ); // @codingStandardsIgnoreLine
|
81 |
return $plugins;
|
82 |
}
|
83 |
|
84 |
+
public static function safe_ini_get( $ini ) {
|
85 |
return @ini_get( $ini ); // @codingStandardsIgnoreLine
|
86 |
}
|
87 |
|
classes/class-fl-builder-export.php
CHANGED
@@ -74,7 +74,7 @@ final class FLBuilderExport {
|
|
74 |
);
|
75 |
}
|
76 |
|
77 |
-
echo json_encode( $data );
|
78 |
|
79 |
die();
|
80 |
}
|
74 |
);
|
75 |
}
|
76 |
|
77 |
+
echo FLBuilderUtils::json_encode( $data );
|
78 |
|
79 |
die();
|
80 |
}
|
classes/class-fl-builder-fonts.php
CHANGED
@@ -224,7 +224,7 @@ final class FLBuilderFonts {
|
|
224 |
foreach ( $fields as $name => $field ) {
|
225 |
if ( 'font' == $field['type'] && isset( $module->settings->$name ) ) {
|
226 |
self::add_font( $module->settings->$name );
|
227 |
-
} elseif ( 'typography' == $field['type'] && ! empty( $module->settings->$name ) && isset( $module->settings->{ $name }['font_family'] ) ) {
|
228 |
$fname = $module->settings->{ $name }['font_family'];
|
229 |
$weight = $module->settings->{ $name }['font_weight'];
|
230 |
|
@@ -372,7 +372,7 @@ final class FLBuilderFonts {
|
|
372 |
// Check for any enqueued `fonts.googleapis.com` from BB theme or plugin
|
373 |
if ( isset( $wp_styles->queue ) ) {
|
374 |
|
375 |
-
$google_fonts_domain = '
|
376 |
$enqueued_google_fonts = array();
|
377 |
$families = array();
|
378 |
$subsets = array();
|
@@ -450,6 +450,8 @@ final class FLBuilderFonts {
|
|
450 |
$font_args['subset'] = implode( ',', $subsets );
|
451 |
}
|
452 |
|
|
|
|
|
453 |
$src = add_query_arg( $font_args, $google_fonts_domain );
|
454 |
|
455 |
// Enqueue google fonts into one URL request
|
224 |
foreach ( $fields as $name => $field ) {
|
225 |
if ( 'font' == $field['type'] && isset( $module->settings->$name ) ) {
|
226 |
self::add_font( $module->settings->$name );
|
227 |
+
} elseif ( 'typography' == $field['type'] && ! empty( $module->settings->$name ) && isset( $module->settings->{ $name }['font_family'] ) && isset( $module->settings->{ $name }['font_weight'] ) ) {
|
228 |
$fname = $module->settings->{ $name }['font_family'];
|
229 |
$weight = $module->settings->{ $name }['font_weight'];
|
230 |
|
372 |
// Check for any enqueued `fonts.googleapis.com` from BB theme or plugin
|
373 |
if ( isset( $wp_styles->queue ) ) {
|
374 |
|
375 |
+
$google_fonts_domain = apply_filters( 'fl_builder_google_fonts_domain', '//fonts.googleapis.com/css' );
|
376 |
$enqueued_google_fonts = array();
|
377 |
$families = array();
|
378 |
$subsets = array();
|
450 |
$font_args['subset'] = implode( ',', $subsets );
|
451 |
}
|
452 |
|
453 |
+
$font_args = apply_filters( 'fl_builder_google_font_args', $font_args );
|
454 |
+
|
455 |
$src = add_query_arg( $font_args, $google_fonts_domain );
|
456 |
|
457 |
// Enqueue google fonts into one URL request
|
classes/class-fl-builder-importer.php
CHANGED
@@ -14,11 +14,93 @@ class FLBuilderImporter extends WP_Import {
|
|
14 |
* @return array
|
15 |
*/
|
16 |
function parse( $file ) {
|
17 |
-
|
18 |
-
|
|
|
|
|
|
|
|
|
|
|
19 |
}
|
20 |
}
|
21 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
22 |
/**
|
23 |
* The Regex parser is the only parser we have found that
|
24 |
* doesn't break serialized data. It does have two bugs
|
@@ -35,6 +117,7 @@ class FLBuilderImportParserRegex extends WXR_Parser_Regex {
|
|
35 |
* @return array
|
36 |
*/
|
37 |
function parse( $file ) {
|
|
|
38 |
// @codingStandardsIgnoreLine
|
39 |
$wxr_version = $in_post = false;
|
40 |
|
@@ -91,8 +174,6 @@ class FLBuilderImportParserRegex extends WXR_Parser_Regex {
|
|
91 |
|
92 |
$this->set_pcre_limit( apply_filters( 'fl_builder_importer_pcre', '23001337' ) );
|
93 |
$this->posts[] = $this->process_post( $post );
|
94 |
-
$this->set_pcre_limit( 'default' );
|
95 |
-
|
96 |
continue;
|
97 |
}
|
98 |
if ( $in_post ) {
|
@@ -130,6 +211,7 @@ class FLBuilderImportParserRegex extends WXR_Parser_Regex {
|
|
130 |
);
|
131 |
}
|
132 |
|
|
|
133 |
/**
|
134 |
* Try increasing PCRE limit to avoid failing of importing huge postmeta data.
|
135 |
*
|
@@ -137,25 +219,8 @@ class FLBuilderImportParserRegex extends WXR_Parser_Regex {
|
|
137 |
* @param string $value
|
138 |
*/
|
139 |
function set_pcre_limit( $value ) {
|
140 |
-
|
141 |
-
|
142 |
-
$this->default_backtrack_limit = @ini_get( 'pcre.backtrack_limit' ); // @codingStandardsIgnoreLine
|
143 |
-
$this->default_recursion_limit = @ini_get( 'pcre.recursion_limit' ); // @codingStandardsIgnoreLine
|
144 |
-
}
|
145 |
-
|
146 |
-
if ( 'default' != $value ) {
|
147 |
-
@ini_set( 'pcre.backtrack_limit', $value ); // @codingStandardsIgnoreLine
|
148 |
-
@ini_set( 'pcre.recursion_limit', $value ); // @codingStandardsIgnoreLine
|
149 |
-
} else {
|
150 |
-
// Reset limit back to default.
|
151 |
-
if ( is_numeric( $this->default_backtrack_limit ) ) {
|
152 |
-
@ini_set( 'pcre.backtrack_limit', $this->default_backtrack_limit ); // @codingStandardsIgnoreLine
|
153 |
-
}
|
154 |
-
|
155 |
-
if ( is_numeric( $this->default_recursion_limit ) ) {
|
156 |
-
@ini_set( 'pcre.recursion_limit', $this->default_recursion_limit ); // @codingStandardsIgnoreLine
|
157 |
-
}
|
158 |
-
}
|
159 |
}
|
160 |
}
|
161 |
|
14 |
* @return array
|
15 |
*/
|
16 |
function parse( $file ) {
|
17 |
+
if ( extension_loaded( 'xml' ) ) {
|
18 |
+
$parser = new FLBuilderImportParserXML();
|
19 |
+
return $parser->parse( $file );
|
20 |
+
} else {
|
21 |
+
$parser = new FLBuilderImportParserRegex();
|
22 |
+
return $parser->parse( $file );
|
23 |
+
}
|
24 |
}
|
25 |
}
|
26 |
|
27 |
+
class FLBuilderImportParserXML extends WXR_Parser_XML {
|
28 |
+
|
29 |
+
function tag_close( $parser, $tag ) {
|
30 |
+
switch ( $tag ) {
|
31 |
+
case 'wp:comment':
|
32 |
+
unset( $this->sub_data['key'], $this->sub_data['value'] ); // remove meta sub_data
|
33 |
+
if ( ! empty( $this->sub_data ) ) {
|
34 |
+
$this->data['comments'][] = $this->sub_data;
|
35 |
+
}
|
36 |
+
$this->sub_data = false;
|
37 |
+
break;
|
38 |
+
case 'wp:commentmeta':
|
39 |
+
$this->sub_data['commentmeta'][] = array(
|
40 |
+
'key' => $this->sub_data['key'],
|
41 |
+
'value' => $this->sub_data['value'],
|
42 |
+
);
|
43 |
+
break;
|
44 |
+
case 'category':
|
45 |
+
if ( ! empty( $this->sub_data ) ) {
|
46 |
+
$this->sub_data['name'] = $this->cdata;
|
47 |
+
$this->data['terms'][] = $this->sub_data;
|
48 |
+
}
|
49 |
+
$this->sub_data = false;
|
50 |
+
break;
|
51 |
+
case 'wp:postmeta':
|
52 |
+
if ( ! empty( $this->sub_data ) ) {
|
53 |
+
if ( stristr( $this->sub_data['key'], '_fl_builder_' ) ) {
|
54 |
+
$this->set_pcre_limit( apply_filters( 'fl_builder_importer_pcre', '23001337' ) );
|
55 |
+
$this->sub_data['value'] = FLBuilderImporterDataFix::run( serialize( $this->sub_data['value'] ) );
|
56 |
+
}
|
57 |
+
$this->data['postmeta'][] = $this->sub_data;
|
58 |
+
}
|
59 |
+
$this->sub_data = false;
|
60 |
+
break;
|
61 |
+
case 'item':
|
62 |
+
$this->posts[] = $this->data;
|
63 |
+
$this->data = false;
|
64 |
+
break;
|
65 |
+
case 'wp:category':
|
66 |
+
case 'wp:tag':
|
67 |
+
case 'wp:term':
|
68 |
+
$n = substr( $tag, 3 );
|
69 |
+
array_push( $this->$n, $this->data );
|
70 |
+
$this->data = false;
|
71 |
+
break;
|
72 |
+
case 'wp:author':
|
73 |
+
if ( ! empty( $this->data['author_login'] ) ) {
|
74 |
+
$this->authors[ $this->data['author_login'] ] = $this->data;
|
75 |
+
}
|
76 |
+
$this->data = false;
|
77 |
+
break;
|
78 |
+
case 'wp:base_site_url':
|
79 |
+
$this->base_url = $this->cdata;
|
80 |
+
break;
|
81 |
+
case 'wp:wxr_version':
|
82 |
+
$this->wxr_version = $this->cdata;
|
83 |
+
break;
|
84 |
+
default:
|
85 |
+
if ( $this->in_sub_tag ) {
|
86 |
+
$this->sub_data[ $this->in_sub_tag ] = ! empty( $this->cdata ) ? $this->cdata : '';
|
87 |
+
$this->in_sub_tag = false;
|
88 |
+
} elseif ( $this->in_tag ) {
|
89 |
+
$this->data[ $this->in_tag ] = ! empty( $this->cdata ) ? $this->cdata : '';
|
90 |
+
$this->in_tag = false;
|
91 |
+
}
|
92 |
+
}
|
93 |
+
$this->cdata = false;
|
94 |
+
}
|
95 |
+
|
96 |
+
function set_pcre_limit( $value ) {
|
97 |
+
|
98 |
+
@ini_set( 'pcre.backtrack_limit', $value ); // @codingStandardsIgnoreLine
|
99 |
+
@ini_set( 'pcre.recursion_limit', $value ); // @codingStandardsIgnoreLine
|
100 |
+
}
|
101 |
+
}
|
102 |
+
|
103 |
+
|
104 |
/**
|
105 |
* The Regex parser is the only parser we have found that
|
106 |
* doesn't break serialized data. It does have two bugs
|
117 |
* @return array
|
118 |
*/
|
119 |
function parse( $file ) {
|
120 |
+
|
121 |
// @codingStandardsIgnoreLine
|
122 |
$wxr_version = $in_post = false;
|
123 |
|
174 |
|
175 |
$this->set_pcre_limit( apply_filters( 'fl_builder_importer_pcre', '23001337' ) );
|
176 |
$this->posts[] = $this->process_post( $post );
|
|
|
|
|
177 |
continue;
|
178 |
}
|
179 |
if ( $in_post ) {
|
211 |
);
|
212 |
}
|
213 |
|
214 |
+
|
215 |
/**
|
216 |
* Try increasing PCRE limit to avoid failing of importing huge postmeta data.
|
217 |
*
|
219 |
* @param string $value
|
220 |
*/
|
221 |
function set_pcre_limit( $value ) {
|
222 |
+
@ini_set( 'pcre.backtrack_limit', $value ); // @codingStandardsIgnoreLine
|
223 |
+
@ini_set( 'pcre.recursion_limit', $value ); // @codingStandardsIgnoreLine
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
224 |
}
|
225 |
}
|
226 |
|
classes/class-fl-builder-loader.php
CHANGED
@@ -46,7 +46,7 @@ if ( ! class_exists( 'FLBuilderLoader' ) ) {
|
|
46 |
* @return void
|
47 |
*/
|
48 |
static private function define_constants() {
|
49 |
-
define( 'FL_BUILDER_VERSION', '2.2.
|
50 |
define( 'FL_BUILDER_FILE', trailingslashit( dirname( dirname( __FILE__ ) ) ) . 'fl-builder.php' );
|
51 |
define( 'FL_BUILDER_DIR', plugin_dir_path( FL_BUILDER_FILE ) );
|
52 |
define( 'FL_BUILDER_URL', plugins_url( '/', FL_BUILDER_FILE ) );
|
46 |
* @return void
|
47 |
*/
|
48 |
static private function define_constants() {
|
49 |
+
define( 'FL_BUILDER_VERSION', '2.2.4.3' );
|
50 |
define( 'FL_BUILDER_FILE', trailingslashit( dirname( dirname( __FILE__ ) ) ) . 'fl-builder.php' );
|
51 |
define( 'FL_BUILDER_DIR', plugin_dir_path( FL_BUILDER_FILE ) );
|
52 |
define( 'FL_BUILDER_URL', plugins_url( '/', FL_BUILDER_FILE ) );
|
classes/class-fl-builder-loop.php
CHANGED
@@ -53,6 +53,14 @@ final class FLBuilderLoop {
|
|
53 |
*/
|
54 |
static private $_rewrote_taxonomy = false;
|
55 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
56 |
/**
|
57 |
* Initializes hooks.
|
58 |
*
|
@@ -99,6 +107,17 @@ final class FLBuilderLoop {
|
|
99 |
// Count how many times this method has been called
|
100 |
self::$loop_counter++;
|
101 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
102 |
if ( isset( $settings->data_source ) && 'main_query' == $settings->data_source ) {
|
103 |
$query = self::main_query();
|
104 |
} else {
|
@@ -164,7 +183,7 @@ final class FLBuilderLoop {
|
|
164 |
$users = empty( $settings->users ) ? '' : $settings->users;
|
165 |
$fields = empty( $settings->fields ) ? '' : $settings->fields;
|
166 |
$exclude_self = '';
|
167 |
-
if ( isset( $settings->exclude_self ) && 'yes' == $settings->exclude_self ) {
|
168 |
$exclude_self = $post->ID;
|
169 |
}
|
170 |
|
@@ -207,6 +226,11 @@ final class FLBuilderLoop {
|
|
207 |
$args['meta_key'] = $settings->order_by_meta_key;
|
208 |
}
|
209 |
|
|
|
|
|
|
|
|
|
|
|
210 |
// Order by author
|
211 |
if ( 'author' == $order_by ) {
|
212 |
$args['orderby'] = array(
|
@@ -684,8 +708,10 @@ final class FLBuilderLoop {
|
|
684 |
return false;
|
685 |
}
|
686 |
|
687 |
-
if ( $query->is_archive && $query->is_category ) {
|
688 |
-
|
|
|
|
|
689 |
return false;
|
690 |
}
|
691 |
}
|
@@ -747,14 +773,9 @@ final class FLBuilderLoop {
|
|
747 |
$base = self::build_base_url( $permalink_structure, $base );
|
748 |
$format = self::paged_format( $permalink_structure, $base );
|
749 |
|
750 |
-
//
|
751 |
-
|
752 |
-
|
753 |
-
if ( isset( $query->query['settings']->data_source ) && 'custom_query' == $query->query['settings']->data_source ) {
|
754 |
-
$add_args = array(
|
755 |
-
'flpaging' => 1,
|
756 |
-
);
|
757 |
-
}
|
758 |
}
|
759 |
|
760 |
echo paginate_links(array(
|
@@ -798,12 +819,6 @@ final class FLBuilderLoop {
|
|
798 |
$link = strtok( $link, '?' );
|
799 |
$link = add_query_arg( $link_args, $link );
|
800 |
}
|
801 |
-
} elseif ( false !== strpos( $link, 'flpaging' ) && self::$loop_counter > 1 ) {
|
802 |
-
$link_params = str_replace( 'flpaging=1', '', $link_params );
|
803 |
-
wp_parse_str( $link_params, $link_args );
|
804 |
-
|
805 |
-
$link = strtok( $link, '?' );
|
806 |
-
$link = add_query_arg( $link_args, $link );
|
807 |
}
|
808 |
|
809 |
return $link;
|
53 |
*/
|
54 |
static private $_rewrote_taxonomy = false;
|
55 |
|
56 |
+
/**
|
57 |
+
* Set random seed to avoid duplicate posts in pagination.
|
58 |
+
*
|
59 |
+
* @since 2.2.3
|
60 |
+
* @var int
|
61 |
+
*/
|
62 |
+
static private $rand_seed = 0;
|
63 |
+
|
64 |
/**
|
65 |
* Initializes hooks.
|
66 |
*
|
107 |
// Count how many times this method has been called
|
108 |
self::$loop_counter++;
|
109 |
|
110 |
+
// Set random order seed for load_more and scroll paginations.
|
111 |
+
if ( isset( $settings->order_by ) && 'rand' == $settings->order_by ) {
|
112 |
+
if ( isset( $settings->pagination ) && in_array( $settings->pagination, array( 'scroll', 'load_more' ) ) ) {
|
113 |
+
if ( ! isset( $_GET['fl_rand_seed'] ) ) {
|
114 |
+
self::$rand_seed = rand();
|
115 |
+
} else {
|
116 |
+
self::$rand_seed = $_GET['fl_rand_seed'];
|
117 |
+
}
|
118 |
+
}
|
119 |
+
}
|
120 |
+
|
121 |
if ( isset( $settings->data_source ) && 'main_query' == $settings->data_source ) {
|
122 |
$query = self::main_query();
|
123 |
} else {
|
183 |
$users = empty( $settings->users ) ? '' : $settings->users;
|
184 |
$fields = empty( $settings->fields ) ? '' : $settings->fields;
|
185 |
$exclude_self = '';
|
186 |
+
if ( $post && isset( $settings->exclude_self ) && 'yes' == $settings->exclude_self ) {
|
187 |
$exclude_self = $post->ID;
|
188 |
}
|
189 |
|
226 |
$args['meta_key'] = $settings->order_by_meta_key;
|
227 |
}
|
228 |
|
229 |
+
// Random order seed.
|
230 |
+
if ( 'rand' == $order_by && self::$rand_seed > 0 ) {
|
231 |
+
$args['orderby'] = 'RAND(' . self::$rand_seed . ')';
|
232 |
+
}
|
233 |
+
|
234 |
// Order by author
|
235 |
if ( 'author' == $order_by ) {
|
236 |
$args['orderby'] = array(
|
708 |
return false;
|
709 |
}
|
710 |
|
711 |
+
if ( $query->is_archive && $query->is_category && $query->post_count < 1 ) {
|
712 |
+
|
713 |
+
$post_grid_posts = fl_theme_builder_cat_archive_post_grid( $query );
|
714 |
+
if ( ! $post_grid_posts || $post_grid_posts->post_count < 1 ) {
|
715 |
return false;
|
716 |
}
|
717 |
}
|
773 |
$base = self::build_base_url( $permalink_structure, $base );
|
774 |
$format = self::paged_format( $permalink_structure, $base );
|
775 |
|
776 |
+
// Add random order seed for scroll and load more.
|
777 |
+
if ( self::$rand_seed > 0 ) {
|
778 |
+
$add_args['fl_rand_seed'] = self::$rand_seed;
|
|
|
|
|
|
|
|
|
|
|
779 |
}
|
780 |
|
781 |
echo paginate_links(array(
|
819 |
$link = strtok( $link, '?' );
|
820 |
$link = add_query_arg( $link_args, $link );
|
821 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
822 |
}
|
823 |
|
824 |
return $link;
|
classes/class-fl-builder-model.php
CHANGED
@@ -4118,8 +4118,6 @@ final class FLBuilderModel {
|
|
4118 |
|
4119 |
if ( count( $post_meta ) !== 0 ) {
|
4120 |
|
4121 |
-
$sql = "INSERT INTO {$wpdb->postmeta} (post_id, meta_key, meta_value) ";
|
4122 |
-
|
4123 |
foreach ( $post_meta as $meta_info ) {
|
4124 |
$meta_key = $meta_info->meta_key;
|
4125 |
|
@@ -4128,14 +4126,10 @@ final class FLBuilderModel {
|
|
4128 |
} else {
|
4129 |
$meta_value = addslashes( $meta_info->meta_value );
|
4130 |
}
|
4131 |
-
|
4132 |
-
$
|
|
|
4133 |
}
|
4134 |
-
|
4135 |
-
$sql .= implode( ' UNION ALL ', $sql_select );
|
4136 |
-
// @codingStandardsIgnoreStart
|
4137 |
-
$wpdb->query($sql);
|
4138 |
-
// @codingStandardsIgnoreEnd
|
4139 |
}
|
4140 |
|
4141 |
// Duplicate post terms.
|
@@ -6333,6 +6327,15 @@ final class FLBuilderModel {
|
|
6333 |
static public function get_enabled_icons() {
|
6334 |
$value = self::get_admin_settings_option( '_fl_builder_enabled_icons', true );
|
6335 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6336 |
return ! $value ? array( 'font-awesome-5-regular', 'font-awesome-5-solid', 'font-awesome-5-brands', 'foundation-icons', 'dashicons' ) : $value;
|
6337 |
}
|
6338 |
|
4118 |
|
4119 |
if ( count( $post_meta ) !== 0 ) {
|
4120 |
|
|
|
|
|
4121 |
foreach ( $post_meta as $meta_info ) {
|
4122 |
$meta_key = $meta_info->meta_key;
|
4123 |
|
4126 |
} else {
|
4127 |
$meta_value = addslashes( $meta_info->meta_value );
|
4128 |
}
|
4129 |
+
// @codingStandardsIgnoreStart
|
4130 |
+
$wpdb->query( "INSERT INTO {$wpdb->postmeta} (post_id, meta_key, meta_value) values ({$new_post_id}, '{$meta_key}', '{$meta_value}')" );
|
4131 |
+
// @codingStandardsIgnoreEnd
|
4132 |
}
|
|
|
|
|
|
|
|
|
|
|
4133 |
}
|
4134 |
|
4135 |
// Duplicate post terms.
|
6327 |
static public function get_enabled_icons() {
|
6328 |
$value = self::get_admin_settings_option( '_fl_builder_enabled_icons', true );
|
6329 |
|
6330 |
+
/**
|
6331 |
+
* font-awesome should not be a key in this array, if it is it can cause issues.
|
6332 |
+
*/
|
6333 |
+
if ( is_array( $value ) ) {
|
6334 |
+
$key = array_search( 'font-awesome', $value, true );
|
6335 |
+
if ( false !== $key ) {
|
6336 |
+
unset( $value[ $key ] );
|
6337 |
+
}
|
6338 |
+
}
|
6339 |
return ! $value ? array( 'font-awesome-5-regular', 'font-awesome-5-solid', 'font-awesome-5-brands', 'foundation-icons', 'dashicons' ) : $value;
|
6340 |
}
|
6341 |
|
classes/class-fl-builder-service-infusionsoft.php
CHANGED
@@ -208,7 +208,7 @@ final class FLBuilderServiceInfusionsoft extends FLBuilderService {
|
|
208 |
'row_class' => 'fl-builder-service-field-row',
|
209 |
'class' => 'fl-builder-service-list-select',
|
210 |
'type' => 'select',
|
211 |
-
'label' => _x( '
|
212 |
'options' => $options,
|
213 |
'preview' => array(
|
214 |
'type' => 'none',
|
208 |
'row_class' => 'fl-builder-service-field-row',
|
209 |
'class' => 'fl-builder-service-list-select',
|
210 |
'type' => 'select',
|
211 |
+
'label' => _x( 'Select Tag', 'An email list from a third party provider.', 'fl-builder' ),
|
212 |
'options' => $options,
|
213 |
'preview' => array(
|
214 |
'type' => 'none',
|
classes/class-fl-builder-shortcodes.php
CHANGED
@@ -26,7 +26,7 @@ final class FLBuilderShortcodes {
|
|
26 |
* @return string
|
27 |
*/
|
28 |
static public function insert_layout( $attrs ) {
|
29 |
-
$builder_active =
|
30 |
$post_type = isset( $attrs['type'] ) ? $attrs['type'] : get_post_types();
|
31 |
$site_id = isset( $attrs['site'] ) ? absint( $attrs['site'] ) : null;
|
32 |
$args = array(
|
26 |
* @return string
|
27 |
*/
|
28 |
static public function insert_layout( $attrs ) {
|
29 |
+
$builder_active = FLBuilderModel::is_builder_active();
|
30 |
$post_type = isset( $attrs['type'] ) ? $attrs['type'] : get_post_types();
|
31 |
$site_id = isset( $attrs['site'] ) ? absint( $attrs['site'] ) : null;
|
32 |
$args = array(
|
classes/class-fl-builder-ui-settings-forms.php
CHANGED
@@ -40,10 +40,17 @@ class FLBuilderUISettingsForms {
|
|
40 |
|
41 |
if ( FLBuilderModel::is_builder_active() ) {
|
42 |
|
43 |
-
$
|
44 |
-
|
45 |
-
|
46 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
47 |
|
48 |
wp_add_inline_script( 'fl-builder', $config );
|
49 |
wp_add_inline_script( 'fl-builder-min', $config );
|
40 |
|
41 |
if ( FLBuilderModel::is_builder_active() ) {
|
42 |
|
43 |
+
$script_url = add_query_arg( array(
|
44 |
+
'fl_builder_load_settings_config' => true,
|
45 |
+
'ver' => rand(),
|
46 |
+
), FLBuilderModel::get_edit_url( $wp_the_query->post->ID ) );
|
47 |
+
$modules_url = add_query_arg( array(
|
48 |
+
'fl_builder_load_settings_config' => 'modules',
|
49 |
+
'ver' => rand(),
|
50 |
+
), FLBuilderModel::get_edit_url( $wp_the_query->post->ID ) );
|
51 |
+
$script = 'var s = document.createElement("script");s.type = "text/javascript";s.src = "%s";document.head.appendChild(s);';
|
52 |
+
$config = sprintf( $script, $script_url );
|
53 |
+
$modules = sprintf( $script, $modules_url );
|
54 |
|
55 |
wp_add_inline_script( 'fl-builder', $config );
|
56 |
wp_add_inline_script( 'fl-builder-min', $config );
|
classes/class-fl-builder-update.php
CHANGED
@@ -90,6 +90,11 @@ final class FLBuilderUpdate {
|
|
90 |
self::v_1_10();
|
91 |
}
|
92 |
|
|
|
|
|
|
|
|
|
|
|
93 |
// Clear all asset cache.
|
94 |
FLBuilderModel::delete_asset_cache_for_all_posts();
|
95 |
|
@@ -562,6 +567,15 @@ final class FLBuilderUpdate {
|
|
562 |
|
563 |
return $data;
|
564 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
565 |
}
|
566 |
|
567 |
FLBuilderUpdate::init();
|
90 |
self::v_1_10();
|
91 |
}
|
92 |
|
93 |
+
// Update to 1.10 or greater.
|
94 |
+
if ( version_compare( $saved_version, '2.2.2.6', '<' ) ) {
|
95 |
+
self::v_2226();
|
96 |
+
}
|
97 |
+
|
98 |
// Clear all asset cache.
|
99 |
FLBuilderModel::delete_asset_cache_for_all_posts();
|
100 |
|
567 |
|
568 |
return $data;
|
569 |
}
|
570 |
+
|
571 |
+
static private function v_2226() {
|
572 |
+
|
573 |
+
if ( false !== get_option( 'fl_debug_mode', false ) ) {
|
574 |
+
$current = get_option( 'fl_debug_mode' );
|
575 |
+
set_transient( 'fl_debug_mode', $current, 172800 ); // 48 hours
|
576 |
+
delete_option( 'fl_debug_mode' );
|
577 |
+
}
|
578 |
+
}
|
579 |
}
|
580 |
|
581 |
FLBuilderUpdate::init();
|
classes/class-fl-builder-utils.php
CHANGED
@@ -267,4 +267,16 @@ final class FLBuilderUtils {
|
|
267 |
return 0;
|
268 |
}
|
269 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
270 |
}
|
267 |
return 0;
|
268 |
}
|
269 |
|
270 |
+
/**
|
271 |
+
* Version safe json_encode
|
272 |
+
* @since 2.2.4
|
273 |
+
*/
|
274 |
+
static public function json_encode( $data ) {
|
275 |
+
if ( version_compare( PHP_VERSION, '5.5', '<' ) ) {
|
276 |
+
return json_encode( $data );
|
277 |
+
} else {
|
278 |
+
return json_encode( $data, JSON_PARTIAL_OUTPUT_ON_ERROR );
|
279 |
+
}
|
280 |
+
}
|
281 |
+
|
282 |
}
|
classes/class-fl-builder-wpcli-command.php
CHANGED
@@ -46,11 +46,7 @@ class FLbuilder_WPCLI_Command extends WP_CLI_Command {
|
|
46 |
|
47 |
if ( true == $network ) {
|
48 |
|
49 |
-
|
50 |
-
$blogs = get_sites();
|
51 |
-
} else {
|
52 |
-
$blogs = wp_get_sites();
|
53 |
-
}
|
54 |
|
55 |
foreach ( $blogs as $keys => $blog ) {
|
56 |
|
@@ -63,7 +59,7 @@ class FLbuilder_WPCLI_Command extends WP_CLI_Command {
|
|
63 |
switch_to_blog( $blog_id );
|
64 |
FLBuilderModel::delete_asset_cache_for_all_posts();
|
65 |
/* translators: %s: current blog name */
|
66 |
-
WP_CLI::success( sprintf( _x( 'Cleared the
|
67 |
if ( $all ) {
|
68 |
FLCustomizer::refresh_css();
|
69 |
/* translators: %s: current blog name */
|
@@ -73,7 +69,7 @@ class FLbuilder_WPCLI_Command extends WP_CLI_Command {
|
|
73 |
}
|
74 |
} else {
|
75 |
FLBuilderModel::delete_asset_cache_for_all_posts();
|
76 |
-
WP_CLI::success( __( 'Cleared the
|
77 |
if ( $all ) {
|
78 |
FLCustomizer::refresh_css();
|
79 |
WP_CLI::success( __( 'Rebuilt the theme cache', 'fl-builder' ) );
|
46 |
|
47 |
if ( true == $network ) {
|
48 |
|
49 |
+
$blogs = get_sites();
|
|
|
|
|
|
|
|
|
50 |
|
51 |
foreach ( $blogs as $keys => $blog ) {
|
52 |
|
59 |
switch_to_blog( $blog_id );
|
60 |
FLBuilderModel::delete_asset_cache_for_all_posts();
|
61 |
/* translators: %s: current blog name */
|
62 |
+
WP_CLI::success( sprintf( _x( 'Cleared the Beaver Builder cache for blog %s', 'current blog name', 'fl-builder' ), get_option( 'home' ) ) );
|
63 |
if ( $all ) {
|
64 |
FLCustomizer::refresh_css();
|
65 |
/* translators: %s: current blog name */
|
69 |
}
|
70 |
} else {
|
71 |
FLBuilderModel::delete_asset_cache_for_all_posts();
|
72 |
+
WP_CLI::success( __( 'Cleared the Beaver Builder cache', 'fl-builder' ) );
|
73 |
if ( $all ) {
|
74 |
FLCustomizer::refresh_css();
|
75 |
WP_CLI::success( __( 'Rebuilt the theme cache', 'fl-builder' ) );
|
classes/class-fl-builder.php
CHANGED
@@ -68,7 +68,7 @@ final class FLBuilder {
|
|
68 |
* @since 2.1
|
69 |
*/
|
70 |
static public $fa4_url = '';
|
71 |
-
static public $fa5_pro_url = 'https://pro.fontawesome.com/releases/v5.
|
72 |
|
73 |
/**
|
74 |
* Initializes hooks.
|
@@ -121,6 +121,13 @@ final class FLBuilder {
|
|
121 |
$locale = apply_filters( 'plugin_locale', get_locale(), 'fl-builder' );
|
122 |
}
|
123 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
124 |
//Setup paths to current locale file
|
125 |
$mofile_global = trailingslashit( WP_LANG_DIR ) . 'plugins/bb-plugin/' . $locale . '.mo';
|
126 |
$mofile_local = trailingslashit( FL_BUILDER_DIR ) . 'languages/' . $locale . '.mo';
|
@@ -771,6 +778,23 @@ final class FLBuilder {
|
|
771 |
}
|
772 |
}
|
773 |
wp_add_inline_style( 'admin-bar', '#wp-admin-bar-fl-builder-frontend-edit-link .ab-icon:before { content: "\f116" !important; top: 2px; margin-right: 3px; }' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
774 |
}
|
775 |
|
776 |
/**
|
@@ -1516,6 +1540,11 @@ final class FLBuilder {
|
|
1516 |
|
1517 |
// Build the attributes string.
|
1518 |
$attr_string = '';
|
|
|
|
|
|
|
|
|
|
|
1519 |
|
1520 |
foreach ( $attrs as $attr_key => $attr_value ) {
|
1521 |
$attr_string .= ' ' . $attr_key . '="' . $attr_value . '"';
|
@@ -1558,6 +1587,12 @@ final class FLBuilder {
|
|
1558 |
$content = preg_replace_callback( "/$pattern/s", 'FLBuilder::double_escape_shortcodes', $content );
|
1559 |
$content = $wp_embed->run_shortcode( $content );
|
1560 |
$content = do_shortcode( $content );
|
|
|
|
|
|
|
|
|
|
|
|
|
1561 |
}
|
1562 |
|
1563 |
// Add srcset attrs to images with the class wp-image-<ID>.
|
@@ -1923,6 +1958,12 @@ final class FLBuilder {
|
|
1923 |
* @see fl_builder_after_render_row
|
1924 |
*/
|
1925 |
do_action( 'fl_builder_after_render_row', $row, $groups );
|
|
|
|
|
|
|
|
|
|
|
|
|
1926 |
}
|
1927 |
}
|
1928 |
|
@@ -2160,6 +2201,12 @@ final class FLBuilder {
|
|
2160 |
|
2161 |
if ( $active || $visible ) {
|
2162 |
include FL_BUILDER_DIR . 'includes/column.php';
|
|
|
|
|
|
|
|
|
|
|
|
|
2163 |
}
|
2164 |
}
|
2165 |
|
@@ -2308,6 +2355,12 @@ final class FLBuilder {
|
|
2308 |
* @see fl_builder_after_render_module
|
2309 |
*/
|
2310 |
do_action( 'fl_builder_after_render_module', $module );
|
|
|
|
|
|
|
|
|
|
|
|
|
2311 |
}
|
2312 |
}
|
2313 |
|
@@ -2500,6 +2553,8 @@ final class FLBuilder {
|
|
2500 |
*/
|
2501 |
|
2502 |
static public function render_css( $include_global = true ) {
|
|
|
|
|
2503 |
$active = FLBuilderModel::is_builder_active();
|
2504 |
$nodes = FLBuilderModel::get_categorized_nodes();
|
2505 |
$node_status = FLBuilderModel::get_node_status();
|
@@ -2622,7 +2677,7 @@ final class FLBuilder {
|
|
2622 |
$css .= self::render_global_nodes_custom_code( 'css' );
|
2623 |
|
2624 |
// Custom Layout CSS
|
2625 |
-
if ( 'published' == $node_status ) {
|
2626 |
$css .= FLBuilderModel::get_layout_settings()->css;
|
2627 |
}
|
2628 |
|
@@ -3092,8 +3147,8 @@ final class FLBuilder {
|
|
3092 |
|
3093 |
// Add the layout settings JS.
|
3094 |
if ( ! isset( $_GET['safemode'] ) ) {
|
3095 |
-
$js .= self::render_global_nodes_custom_code( 'js' );
|
3096 |
-
$js .= ( is_array( $layout_settings->js ) || is_object( $layout_settings->js ) ) ? json_encode( $layout_settings->js ) : $layout_settings->js;
|
3097 |
}
|
3098 |
|
3099 |
// Call the FLBuilder._renderLayoutComplete method if we're currently editing.
|
@@ -3166,8 +3221,14 @@ final class FLBuilder {
|
|
3166 |
$js .= fl_builder_filesystem()->file_get_contents( FL_BUILDER_DIR . 'js/fl-builder-layout.js' );
|
3167 |
|
3168 |
// Add the global settings JS.
|
3169 |
-
$js .= $global_settings->js;
|
|
|
|
|
|
|
|
|
|
|
3170 |
|
|
|
3171 |
return $js;
|
3172 |
}
|
3173 |
|
@@ -3459,6 +3520,35 @@ final class FLBuilder {
|
|
3459 |
return $query;
|
3460 |
}
|
3461 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3462 |
/**
|
3463 |
* @since 1.0
|
3464 |
* @deprecated 1.7.4
|
68 |
* @since 2.1
|
69 |
*/
|
70 |
static public $fa4_url = '';
|
71 |
+
static public $fa5_pro_url = 'https://pro.fontawesome.com/releases/v5.9.0/css/all.css';
|
72 |
|
73 |
/**
|
74 |
* Initializes hooks.
|
121 |
$locale = apply_filters( 'plugin_locale', get_locale(), 'fl-builder' );
|
122 |
}
|
123 |
|
124 |
+
/**
|
125 |
+
* Allow users to overide the locale.
|
126 |
+
* @see fl_set_ui_locale
|
127 |
+
* @since 2.2.4
|
128 |
+
*/
|
129 |
+
$locale = apply_filters( 'fl_set_ui_locale', $locale );
|
130 |
+
|
131 |
//Setup paths to current locale file
|
132 |
$mofile_global = trailingslashit( WP_LANG_DIR ) . 'plugins/bb-plugin/' . $locale . '.mo';
|
133 |
$mofile_local = trailingslashit( FL_BUILDER_DIR ) . 'languages/' . $locale . '.mo';
|
778 |
}
|
779 |
}
|
780 |
wp_add_inline_style( 'admin-bar', '#wp-admin-bar-fl-builder-frontend-edit-link .ab-icon:before { content: "\f116" !important; top: 2px; margin-right: 3px; }' );
|
781 |
+
$args = array(
|
782 |
+
'product' => FLBuilderModel::get_branding(),
|
783 |
+
'white_label' => FLBuilderModel::is_white_labeled(),
|
784 |
+
/**
|
785 |
+
* Custom info text for crash popup.
|
786 |
+
* @see fl_builder_crash_white_label_text
|
787 |
+
*/
|
788 |
+
'labeled_txt' => apply_filters( 'fl_builder_crash_white_label_text', '' ),
|
789 |
+
'vars' => array(
|
790 |
+
'PHP Version' => phpversion(),
|
791 |
+
'Memory Limit' => FL_Debug::safe_ini_get( 'memory_limit' ),
|
792 |
+
'max_input_vars' => FL_Debug::safe_ini_get( 'max_input_vars' ),
|
793 |
+
'modsecfix' => ( defined( 'FL_BUILDER_MODSEC_FIX' ) && FL_BUILDER_MODSEC_FIX ) ? 'Enabled' : 'Disabled',
|
794 |
+
),
|
795 |
+
);
|
796 |
+
wp_localize_script( 'fl-builder-min', 'crash_vars', $args );
|
797 |
+
wp_localize_script( 'fl-builder', 'crash_vars', $args );
|
798 |
}
|
799 |
|
800 |
/**
|
1540 |
|
1541 |
// Build the attributes string.
|
1542 |
$attr_string = '';
|
1543 |
+
/**
|
1544 |
+
* Change attributes for container.
|
1545 |
+
* @see fl_render_content_by_id_attrs
|
1546 |
+
*/
|
1547 |
+
$attrs = apply_filters( 'fl_render_content_by_id_attrs', $attrs, $post_id );
|
1548 |
|
1549 |
foreach ( $attrs as $attr_key => $attr_value ) {
|
1550 |
$attr_string .= ' ' . $attr_key . '="' . $attr_value . '"';
|
1587 |
$content = preg_replace_callback( "/$pattern/s", 'FLBuilder::double_escape_shortcodes', $content );
|
1588 |
$content = $wp_embed->run_shortcode( $content );
|
1589 |
$content = do_shortcode( $content );
|
1590 |
+
/**
|
1591 |
+
* Allow content to be filtered after shortcodes are processed.
|
1592 |
+
* @see fl_builder_after_render_shortcodes
|
1593 |
+
* @since 2.2.4
|
1594 |
+
*/
|
1595 |
+
$content = apply_filters( 'fl_builder_after_render_shortcodes', $content );
|
1596 |
}
|
1597 |
|
1598 |
// Add srcset attrs to images with the class wp-image-<ID>.
|
1958 |
* @see fl_builder_after_render_row
|
1959 |
*/
|
1960 |
do_action( 'fl_builder_after_render_row', $row, $groups );
|
1961 |
+
} else {
|
1962 |
+
/**
|
1963 |
+
* Fires in place of a hidden row.
|
1964 |
+
* @see fl_builder_hidden_node
|
1965 |
+
*/
|
1966 |
+
do_action( 'fl_builder_hidden_node', $row );
|
1967 |
}
|
1968 |
}
|
1969 |
|
2201 |
|
2202 |
if ( $active || $visible ) {
|
2203 |
include FL_BUILDER_DIR . 'includes/column.php';
|
2204 |
+
} else {
|
2205 |
+
/**
|
2206 |
+
* Fires in place of a hidden column.
|
2207 |
+
* @see fl_builder_hidden_node
|
2208 |
+
*/
|
2209 |
+
do_action( 'fl_builder_hidden_node', $col );
|
2210 |
}
|
2211 |
}
|
2212 |
|
2355 |
* @see fl_builder_after_render_module
|
2356 |
*/
|
2357 |
do_action( 'fl_builder_after_render_module', $module );
|
2358 |
+
} else {
|
2359 |
+
/**
|
2360 |
+
* Fires in place of a hidden module.
|
2361 |
+
* @see fl_builder_hidden_node
|
2362 |
+
*/
|
2363 |
+
do_action( 'fl_builder_hidden_node', $module );
|
2364 |
}
|
2365 |
}
|
2366 |
|
2553 |
*/
|
2554 |
|
2555 |
static public function render_css( $include_global = true ) {
|
2556 |
+
global $wp_the_query;
|
2557 |
+
|
2558 |
$active = FLBuilderModel::is_builder_active();
|
2559 |
$nodes = FLBuilderModel::get_categorized_nodes();
|
2560 |
$node_status = FLBuilderModel::get_node_status();
|
2677 |
$css .= self::render_global_nodes_custom_code( 'css' );
|
2678 |
|
2679 |
// Custom Layout CSS
|
2680 |
+
if ( 'published' == $node_status || $post_id !== $wp_the_query->post->ID ) {
|
2681 |
$css .= FLBuilderModel::get_layout_settings()->css;
|
2682 |
}
|
2683 |
|
3147 |
|
3148 |
// Add the layout settings JS.
|
3149 |
if ( ! isset( $_GET['safemode'] ) ) {
|
3150 |
+
$js .= self::js_comment( 'Global Node Custom JS', self::render_global_nodes_custom_code( 'js' ) );
|
3151 |
+
$js .= ( is_array( $layout_settings->js ) || is_object( $layout_settings->js ) ) ? self::js_comment( 'Layout Custom JS', json_encode( $layout_settings->js ) ) : self::js_comment( 'Layout Custom JS', $layout_settings->js );
|
3152 |
}
|
3153 |
|
3154 |
// Call the FLBuilder._renderLayoutComplete method if we're currently editing.
|
3221 |
$js .= fl_builder_filesystem()->file_get_contents( FL_BUILDER_DIR . 'js/fl-builder-layout.js' );
|
3222 |
|
3223 |
// Add the global settings JS.
|
3224 |
+
$js .= self::js_comment( 'Global JS', $global_settings->js );
|
3225 |
+
|
3226 |
+
return $js;
|
3227 |
+
}
|
3228 |
+
|
3229 |
+
static public function js_comment( $comment, $js ) {
|
3230 |
|
3231 |
+
$js = sprintf( "\n/* Start %s */\n%s\n/* End %s */\n\n", $comment, $js, $comment );
|
3232 |
return $js;
|
3233 |
}
|
3234 |
|
3520 |
return $query;
|
3521 |
}
|
3522 |
|
3523 |
+
/**
|
3524 |
+
* @since 2.2.3
|
3525 |
+
*/
|
3526 |
+
static public function is_schema_enabled() {
|
3527 |
+
|
3528 |
+
/**
|
3529 |
+
* Disable all schema.
|
3530 |
+
* @see fl_builder_disable_schema
|
3531 |
+
*/
|
3532 |
+
if ( false !== apply_filters( 'fl_builder_disable_schema', false ) ) {
|
3533 |
+
return false;
|
3534 |
+
} else {
|
3535 |
+
return true;
|
3536 |
+
}
|
3537 |
+
}
|
3538 |
+
|
3539 |
+
/**
|
3540 |
+
* @since 2.2.3
|
3541 |
+
*/
|
3542 |
+
static public function print_schema( $schema, $echo = true ) {
|
3543 |
+
if ( self::is_schema_enabled() ) {
|
3544 |
+
if ( $echo ) {
|
3545 |
+
echo $schema;
|
3546 |
+
} else {
|
3547 |
+
return $schema;
|
3548 |
+
}
|
3549 |
+
}
|
3550 |
+
}
|
3551 |
+
|
3552 |
/**
|
3553 |
* @since 1.0
|
3554 |
* @deprecated 1.7.4
|
css/fl-builder-admin-settings.css
CHANGED
@@ -191,6 +191,18 @@ body .ms-options-wrap > .ms-options > ul input[type="checkbox"] {
|
|
191 |
display: inline-block;
|
192 |
}
|
193 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
194 |
/* Templates
|
195 |
----------------------------------------------------------- */
|
196 |
|
191 |
display: inline-block;
|
192 |
}
|
193 |
|
194 |
+
.curl-alert {
|
195 |
+
padding: 16px 25px 16px 20px;
|
196 |
+
background-color: #fde8e8;
|
197 |
+
border-left: 5px solid #e7aaaa;
|
198 |
+
margin-bottom: 2em;
|
199 |
+
}
|
200 |
+
.curl-alert p {
|
201 |
+
font-size: 1rem;
|
202 |
+
color: #333;
|
203 |
+
}
|
204 |
+
|
205 |
+
|
206 |
/* Templates
|
207 |
----------------------------------------------------------- */
|
208 |
|
css/fl-builder.css
CHANGED
@@ -612,7 +612,7 @@ body .fl-builder-bar .fl-builder-bar-content.is-muted > *:not(.fl-builder-publis
|
|
612 |
padding:0;
|
613 |
z-index: -1;
|
614 |
font-size: 16px;
|
615 |
-
overflow:
|
616 |
height: auto !important;
|
617 |
max-height: calc(100vh - 66px);
|
618 |
min-height: 300px;
|
@@ -3895,7 +3895,7 @@ body .fl-lightbox-has-tab-overflow .fl-builder-settings-tabs-more {
|
|
3895 |
}
|
3896 |
|
3897 |
.wp-core-ui #media-attachment-date-filters {
|
3898 |
-
width:
|
3899 |
}
|
3900 |
|
3901 |
.wp-core-ui input[type=search]::placeholder{
|
@@ -5371,6 +5371,7 @@ body > .fl-builder-tour-dimmed {
|
|
5371 |
|
5372 |
.fl-builder-shortcode-mask-wrap {
|
5373 |
position: relative;
|
|
|
5374 |
}
|
5375 |
.fl-builder-shortcode-mask {
|
5376 |
bottom: -1px;
|
612 |
padding:0;
|
613 |
z-index: -1;
|
614 |
font-size: 16px;
|
615 |
+
overflow-y: scroll;
|
616 |
height: auto !important;
|
617 |
max-height: calc(100vh - 66px);
|
618 |
min-height: 300px;
|
3895 |
}
|
3896 |
|
3897 |
.wp-core-ui #media-attachment-date-filters {
|
3898 |
+
width: auto;
|
3899 |
}
|
3900 |
|
3901 |
.wp-core-ui input[type=search]::placeholder{
|
5371 |
|
5372 |
.fl-builder-shortcode-mask-wrap {
|
5373 |
position: relative;
|
5374 |
+
pointer-events: none;
|
5375 |
}
|
5376 |
.fl-builder-shortcode-mask {
|
5377 |
bottom: -1px;
|
css/fl-builder.min.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.fl-color-picker-ui{width:300px}.fl-color-picker-ui.fl-color-alpha-enabled{width:334px}.fl-color-picker-ui .iris-picker{float:left;width:100%;height:224px;display:block;position:relative;border-top:1px solid rgba(0,0,0,.1)}.fl-color-picker-ui .iris-picker .iris-square-inner,.fl-color-picker-ui .iris-picker-inner{position:absolute;left:0;top:0;bottom:0;right:0}.fl-color-picker-ui .iris-picker,.iris-picker *{box-sizing:content-box}.fl-color-picker-ui .iris-error{background-color:#ffafaf}.fl-color-picker-ui .iris-picker .iris-square{width:300px;height:200px}.fl-color-picker-ui .iris-picker .iris-palette,.fl-color-picker-ui .iris-picker .iris-slider,.fl-color-picker-ui .iris-picker .iris-square-inner{height:100%;width:12.5%}.fl-color-picker-ui .iris-picker .iris-placeholder,.fl-color-picker-ui .iris-picker .iris-square{position:relative}.fl-color-picker-ui .iris-picker .iris-square-inner{width:auto;margin:0}.fl-color-picker-ui .iris-ie-9 .iris-palette,.fl-color-picker-ui .iris-ie-9 .iris-slider,.fl-color-picker-ui .iris-ie-9 .iris-square,.fl-color-picker-ui .iris-ie-9 .iris-square-inner{box-shadow:none;border-radius:0}.fl-color-picker-ui .iris-ie-9 .iris-palette,.fl-color-picker-ui .iris-ie-9 .iris-slider,.fl-color-picker-ui .iris-ie-9 .iris-square{outline:rgba(0,0,0,.1) solid 1px}.fl-color-picker-ui .iris-ie-lt9 .iris-palette,.fl-color-picker-ui .iris-ie-lt9 .iris-slider,.fl-color-picker-ui .iris-ie-lt9 .iris-square,.fl-color-picker-ui .iris-ie-lt9 .iris-square-inner{outline:#999 solid 1px}.fl-color-picker-ui .iris-ie-lt9 .iris-square .ui-slider-handle{outline:#999 solid 1px;background-color:#fff;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=30)"}.fl-color-picker-ui .iris-ie-lt9 .iris-square .iris-square-handle{background:0 0;border:3px solid #fff;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"}.fl-color-picker-ui .iris-picker .iris-strip{box-sizing:border-box;width:calc(300px - 12px);margin:5px 6px 6px;border-radius:4px;position:relative;height:22px;transform:rotate(180deg)}.fl-color-picker-ui .iris-picker .iris-strip .ui-slider-handle{width:6px;position:absolute;right:0;top:-2px;bottom:-2px;margin:0;border-radius:3px;background:#fff;box-shadow:0 0 2px rgba(0,0,0,.5);z-index:5;cursor:ew-resize}.fl-color-picker-ui .iris-picker .iris-strip .ui-slider-handle:focus{outline:#00a0d2 solid 2px}.fl-color-picker-ui .iris-picker .iris-slider-offset{position:absolute;top:0;left:6px;right:0;bottom:0;width:auto;height:auto;background:0 0;border:none;border-radius:0;transform:rotate(180deg)}.fl-color-picker-ui .iris-picker .iris-square-handle{background:0 0;border:5px solid #999;border-radius:50%;border-color:rgba(128,128,128,.5);box-shadow:none;width:12px;height:12px;position:absolute;left:-10px;top:-10px;cursor:move;opacity:1;z-index:10}.fl-color-picker-ui .iris-picker .ui-state-focus .iris-square-handle{opacity:.8}.fl-color-picker-ui .iris-picker .iris-square-handle:hover{border-color:#999}.fl-color-picker-ui .iris-picker .iris-square-value:focus .iris-square-handle{box-shadow:0 0 2px rgba(0,0,0,.75);opacity:.8}.fl-color-picker-ui .iris-picker .iris-square-handle:hover::after{border-color:#fff}.fl-color-picker-ui .iris-picker .iris-square-handle::after{position:absolute;bottom:-4px;right:-4px;left:-4px;top:-4px;border:3px solid #f9f9f9;border-color:rgba(255,255,255,.8);border-radius:50%;content:" "}.fl-color-picker-ui .iris-picker .iris-square-value{width:0;height:0;position:absolute}.iris-ie-lt9 .iris-square-value,.iris-mozilla .iris-square-value{width:1px;height:1px}.fl-color-picker-wrapper{position:relative;width:48px;height:32px}.fl-color-picker{box-shadow:0 2px 4px 0 rgba(0,0,0,.12);background:url(../img/transp_bg.png) #fff;border-radius:4px;width:120px;height:36px;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.fl-color-picker-color{-ms-flex:1 1 100%;flex:1 1 100%;box-sizing:border-box!important;position:relative;border-radius:4px;background-color:transparent;cursor:pointer;border:2px solid transparent;padding:0;-ms-flex-pack:center;justify-content:center;display:-ms-flexbox;display:flex}.fl-color-picker-clear:hover,.fl-color-picker-color:hover{background:0 0;border:2px solid transparent}.fl-color-picker-clear:focus,.fl-color-picker-color.fl-color-picker-empty:focus,.fl-color-picker-color:focus{outline:0;top:0;border:2px solid #00a0d2;background:0 0}.fl-color-picker.fl-color-picker-has-reset .fl-color-picker-color:not(.fl-color-picker-empty){border-top-right-radius:0;border-bottom-right-radius:0}.fl-color-picker-icon{display:none;margin:auto}.fl-color-picker-color.fl-color-picker-empty{border-color:transparent}.fl-color-picker-color.fl-color-picker-empty svg.fl-color-picker-icon{display:block}.fl-color-picker-color.fl-color-picker-empty svg.fl-color-picker-icon path{fill:inherit}.fl-color-picker-clear{box-sizing:border-box;position:relative;display:-ms-flexbox;display:flex;-ms-flex:0 0 36px;flex:0 0 36px;-ms-flex-pack:center;justify-content:center;padding:0;border:2px solid transparent;fill:#A2AABE;background-color:#E7EBEF;cursor:pointer;border-radius:0 4px 4px 0}.fl-color-picker-clear:hover{fill:#6B6E75;background-color:#E7EBEF}.fl-color-picker-color.fl-color-picker-empty+.fl-color-picker-clear{display:none}.fl-color-picker-ui{display:inline-block;font-family:Helvetica,Verdana,sans-serif;z-index:1;position:fixed;overflow:hidden;padding-bottom:45px;border:1px solid rgba(0,0,0,.1);color:#999;background-color:#FAFAFA;border-radius:3px;box-shadow:0 9px 20px rgba(0,0,0,.17);transition:opacity .2s,visibility .2s;visibility:hidden;opacity:0;-webkit-transform:translate3d(0,0,0)}.fl-color-picker-ui.fl-color-picker-active{visibility:visible;opacity:1;z-index:999999}.fl-color-picker-ui .fl-color-picker-input,.fl-color-picker-ui .fl-color-picker-input:focus{width:100%;height:30px;border:none!important;font-size:14px!important;padding:0 8px;vertical-align:middle;color:#656c6e;background-color:#fff;border-radius:0;box-shadow:none}.fl-color-picker-ui .iris-square-value{transition:none}.fl-color-picker-preset-add{position:absolute;top:8px;right:8px;width:14px;height:14px;background-color:#656c6e;border-radius:50%;cursor:pointer;transition:all .2s}.fl-color-picker-preset-add:hover{background-color:#333}.fl-color-picker-preset-add:after,.fl-color-picker-preset-add:before{content:'';display:block;position:relative;background-color:#fff}.fl-color-picker-preset-add:before{top:6px;left:3px;width:8px;height:2px}.fl-color-picker-preset-add:after{left:6px;top:1px;width:2px;height:8px}.fl-color-picker-presets{position:absolute;left:0;bottom:0;width:100%;z-index:15;overflow:auto;border-top:1px solid rgba(0,0,0,.1);background-color:#FAFAFA}.fl-color-picker-presets-list .fl-color-picker-preset:hover,.fl-color-picker-presets-toggle:hover{background-color:#EDEDED}.fl-color-picker-presets-toggle{position:relative;overflow:hidden;width:100%;height:35px;text-align:center;line-height:35px;font-size:12px;font-weight:700;cursor:pointer;transition:all .1s}.fl-color-picker-presets-close-label,.fl-color-picker-presets-open-label{position:absolute;top:50%;left:50%;visibility:hidden;color:#999;transition:all .5s;transform:translate(-50%,-50%);opacity:0;width:100%}.fl-color-picker-presets-close-label.fl-color-picker-active,.fl-color-picker-presets-open-label.fl-color-picker-active{color:#656c6e;visibility:visible;opacity:1;z-index:999999}.fl-color-picker-presets-list{width:100%;list-style:none;margin:0;padding:0;overflow:auto}.fl-color-picker-presets-list .fl-color-picker-no-preset,.fl-color-picker-presets-list .fl-color-picker-preset{position:relative;padding:5px;font-size:12px;border-top:1px solid rgba(0,0,0,.1);transition:all .1s}.fl-color-picker-presets-list .fl-color-picker-no-preset{padding:18px 5px;text-align:center}.fl-color-picker-presets-list .fl-color-picker-preset-color{display:inline-block;width:40px;height:20px;margin-right:3px;vertical-align:middle;border:1px solid rgba(0,0,0,.1);border-radius:2px;cursor:pointer}.fl-color-picker-presets-list .fl-color-picker-preset-label{vertical-align:middle;color:#333;cursor:pointer}.fl-color-picker-presets-list .fl-color-picker-preset-remove{position:absolute;top:50%;cursor:pointer;transform:translateY(-50%)}.fl-color-picker-clear .fl-color-picker-icon-remove{right:auto;top:auto;margin:auto}.fl-color-picker-presets-list .fl-color-picker-preset-remove{right:5px}.fl-color-picker-presets-list .fl-color-picker-preset-remove:hover:after,.fl-color-picker-presets-list .fl-color-picker-preset-remove:hover:before{background-color:#333}.fl-color-picker-added{position:absolute;width:100%;top:0;left:0;right:0;bottom:35px;z-index:10;color:#fff;text-align:center;background-color:rgba(0,0,0,.8)}.fl-color-picker-added-text{position:absolute;top:50%;left:50%;width:80%;font-size:14px;color:#fff!important;transform:translate(-50%,-50%)}.fl-color-picker-icon-check{position:relative;width:50px;height:50px;margin:5px auto}.fl-color-picker-icon-check:before{content:'';display:block;position:relative;width:15px;height:30px;margin-left:14px;border:7px solid #fff;border-left:none;border-top:none;transform:rotate(45deg)}.fl-color-picker-icon-arrow-down,.fl-color-picker-icon-arrow-up{display:inline-block;position:relative;width:10px;height:10px;margin-left:5px}.fl-color-picker-icon-arrow-down:before,.fl-color-picker-icon-arrow-up:before{content:'';display:block;position:relative;width:6px;height:6px;border:2px solid #999;border-left:none;border-top:none;transform:rotate(45deg)}.fl-color-picker-icon-arrow-up{top:2px;transform:rotate(180deg)}.fl-color-picker-icon-remove{width:15px;height:15px}.fl-color-picker-icon-remove:after,.fl-color-picker-icon-remove:before{content:'';display:block;position:relative;background-color:#6f7881}.fl-color-picker-icon-remove:before{left:6px;width:2px;height:10px;margin-top:3px;transform:rotate(-45deg)}.fl-color-picker-icon-remove:after{left:6px;width:2px;height:10px;margin-top:-10px;transform:rotate(45deg)}.fl-alpha-wrap{position:absolute;width:32px;height:215px;padding:0 5px;right:4px;border-top:none}.fl-alpha-slider{height:190px;position:absolute;top:12px;width:28px}.fl-alpha-slider .ui-slider-handle{background:rgba(0,0,0,0);border-color:#aaa;border-radius:4px;border-style:solid;border-width:4px;box-shadow:0 1px 2px rgba(0,0,0,.2);-moz-box-shadow:0 1px 2px rgba(0,0,0,.2);-webkit-box-shadow:0 1px 2px rgba(0,0,0,.2);cursor:ns-resize;height:12px;left:0;opacity:.9;position:absolute;right:0;width:30px;z-index:14}.fl-alpha-slider .ui-slider-handle:before{content:" ";position:absolute;left:-2px;right:-2px;top:-3px;bottom:-3px;border:2px solid #fff;border-radius:3px}.fl-theme-builder-preview-select-title i:before,body .fl-theme-builder-preview-select .fa-caret-down i:before,body .fl-theme-builder-preview-select-item-title i:before{content:"\f078"}.fl-alpha-slider-offset{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAAASCAYAAAAe/ZHXAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NkNEQUQ0ODM4RUE0MTFFNEExOEJFN0E5M0VFOTg0QUQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NkNEQUQ0ODQ4RUE0MTFFNEExOEJFN0E5M0VFOTg0QUQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo2Q0RBRDQ4MThFQTQxMUU0QTE4QkU3QTkzRUU5ODRBRCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo2Q0RBRDQ4MjhFQTQxMUU0QTE4QkU3QTkzRUU5ODRBRCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pv/r/N8AAAWYSURBVHjarFvvR3VBEN45JZGIPkREHyIiIhJJf3qUSERE9CGiDxERkcg9z9u92uucvTszz5z7xnHPj93Z2d359cxscn5+jpTS+EoiMr3/+51cZ2dn4+e29i2/u7y8RKf/pO3vc+o+n5ycoNK31+f6+jrfZ37yuG2mf3R01H3fa5N/b29vU6dP5qft0G4PDg5MGuPr/v4+jz1t27mfvN/b21P75+fHx8eZfiV/Ozs7rUJnSu/5+RlFv+m6ZJpbW1s1PnrvXl9fZ/qX89zY2LB4mfy+v7/nsdV1XltbK/dr5vnz87OcV5bJabuVlRVLBifjfX9/l/xkGtM+S0tLNXnu0szfU/P3IMn/k0678h6ddqjQFGccVL6hoCsVfsq+NZ5QtCv5rfFS41sq37W+UPhMyhxEWTetvce3NR8oewqD39qalXuGAK/WPltjajIC4x2c9Ye1f43SGcqGwRBeTZjhMNntL4pCWZMQYhE05RVl02EovRgC4RkCbUNSQAGhGB/GsKG4h6FQoigDa2i8fRBy3uLMXYIG3Vr3aZvRaCRdBYlYIMZywhBGCVhgzzOlgRuUSOvC0GMEWxOM/+EtQFh1OIIXtfwg1tRaayGjg5px0jyZKEaTle3e+AsLCygVRAh3FlEgKbReE3oYGj9EgIR00QiEgKw3ZBQbRGjBeAMtDETQmHiKDsezJNLgCTFGItZXlAgCSiQggblP+9c8SDI0lXWlFv5g3K63KZ51FOcZzthQ3LomoNHwJmKIQISI3vqzSpwIQ8liSjGMFQjDpoVgaQ6cWgvLhOC7qiAwiHrWbEg4JMSmeUrBuHoYwioOQNXmhmAcrs096s1gJCGi3hSEVU8DQxYElYHhKwUUGAa+NqOBMsSSAQJuhQhCAH4vxozExsxiihPuaIrjCVYKWlYEsjSM52G8Kxxryngl5j0j+EyGTIiED4s1Itm0ZGWxMFCLJaBAcEI6OBkmFgNBoc8Cait2ZnENE/6wQN8LJSJeSMNAjKVm+LUMAIt3PR5AQgIGp1Z5zxhE8PtXUYReYeXi4mKmOPNXBMzt2tPT07LIUtJqr66uusXEbkFnWiQ6Pj72ikrtzc1NKopuvbbj58PDwxqNHp27u7tuYWumUDV+v7+/Xyu6pc59+/DwUCsC9ujt7u6qRbt8//T01C3elbyN70fb29uZ/1FSincvLy/lPGb42tzc9IqJeHt7q61Pr2C6vr7u7tfHx8fMPhV0sLq6WhZtU0n36+uru8elPE7aLi8v1wqJPXn++fmZKYgX8ozFxcXJb0NaQTHClZT8+gBjsYdaFc+zWcUkGTCWENY66ta92oSVzo3WI6IZKGtukeyfBLFKBNAj6bUOBgaoe9wE4n04IBNkLMoC7+Skj630ZlTJMYdyMsU2T8AwpzALkVFilZgJcT2l9PCWDDSAMBSjVlJgZNk0lE1AIby0qCiCnBQNj6aBGQslZIZJ5hB6D/AzQHto5Z9Nk8tARdN4q2ExBnsyIJ311EymShyjan2rKk0zh1Ay1oQVWAZQRnkUA8RFw7TahjBnmNgMVMQrsCGZJezRtGlU0cUZ1zuaxGZPpbhApM+ZpFQqQ6xadoMtBrEKpBVo4GRXvNSxpaRixKiR+TChCYhsDwZkfFj8IkErjAHejcUI0XQrgwehhNSMHAz21E0wZ23FcCAmj8Sd/PXy2xLYLAuwRw4IMsqjFaWYOpMEhDySAPFCWyFkgAHrEcA+BNeJ4UE8HCzJPpCrerUmQIx1pWJkjqxJD8EikUo2c5aI8ZYgsAkM4WQtnHd0ns0ORgVTBghy5ISy928SGsbTMqYg523RUY8oNYG4FIYiyRyZCnFCJC87IoRAIMVOqQ7BKexxCS2hYVl9JhvlpYjnAe4MhmRPMWhhvLfXINaI9WKM0Zu0+SfAAFLE1EgfVSv7AAAAAElFTkSuQmCC) center;box-shadow:0 0 5px rgba(0,0,0,.4) inset;-moz-box-shadow:0 0 5px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 5px rgba(0,0,0,.4) inset;width:200px;height:22px;transform:rotate(-90deg);bottom:48%;left:-80px;position:absolute}.fl-alpha-text{width:30px;font-size:12px;text-align:center;color:#999;position:absolute;bottom:-5px}.fl-lightbox-mask,.fl-lightbox-wrap{bottom:0;left:0;position:fixed;right:0;z-index:100010}@keyframes fl-lightbox-zoom{from{transform:scale(.4)}to{transform:scale(1)}}.fl-lightbox-wrap{display:none;overflow:auto;padding:0;top:43px;-webkit-backface-visibility:hidden;-webkit-transform:translateZ(0);pointer-events:none}.fl-builder-draggable-is-dragging .fl-lightbox-wrap,.fl-builder-resizable-is-resizing .fl-lightbox-wrap,.fl-lightbox,.fl-lightbox-mask{pointer-events:auto}.fl-lightbox-mask{background:#000;opacity:.7;filter:alpha(opacity=70);top:0}.fl-lightbox{background:#F5F7F9;border-radius:4px;box-shadow:rgba(0,0,0,1) 0 4px 30px;-moz-box-shadow:rgba(0,0,0,1) 0 4px 30px;-webkit-box-shadow:rgba(0,0,0,1) 0 4px 30px;position:relative;display:-ms-flexbox;display:flex;z-index:100011;transform-origin:center;animation-name:fl-lightbox-zoom;animation-duration:.25s}.fl-lightbox.fl-lightbox-prevent-animation{animation-duration:0s;-moz-animation-duration:0s;-webkit-animation-duration:0s;-o-animation-duration:0s}.fl-lightbox :not(i){color:#333;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:12px;line-height:14px;text-decoration:none;text-transform:none}.fl-lightbox *,.fl-lightbox :after,.fl-lightbox :before{box-sizing:content-box}#fl-ui-root .fl-nanoscroller-pane,.fl-builder--content-library-panel .fl-nanoscroller-pane,.fl-lightbox .fl-nanoscroller-pane{bottom:2px;right:2px;width:6px}.fl-nanoscroller>.fl-nanoscroller-pane>.fl-nanoscroller-slider{background-color:#bac0ca;transition-property:height,background-color;transition-duration:.25s}#wpadminbar,html{transition-duration:.35s}.fl-nanoscroller>.fl-nanoscroller-pane>.fl-nanoscroller-slider:hover{background-color:#c8cdd4}.fl-nanoscroller>.fl-nanoscroller-pane.active>.fl-nanoscroller-slider{background-color:#029fd2}.fl-lightbox .dashicons{font-family:dashicons}.fl-lightbox.ui-draggable{box-shadow:rgba(0,0,0,.2) 0 7px 30px;-moz-box-shadow:rgba(0,0,0,.2) 0 7px 30px;-webkit-box-shadow:rgba(0,0,0,.2) 0 7px 30px}#wpadminbar,.fl-builder-bar.is-hidden{pointer-events:none}.fl-lightbox-resizable{height:500px;width:380px}@media (max-width:500px){.fl-lightbox-resizable{left:0!important;right:0!important;top:0!important;height:100%!important;width:100%!important}.fl-lightbox-resizable .ui-resizable-handle{display:none!important}.fl-lightbox.ui-draggable .fl-lightbox-header{cursor:default!important}.fl-lightbox-controls{display:none}}.fl-lightbox-width-full{left:0!important;right:0!important;top:0!important;height:100%!important;width:100%!important}.fl-lightbox-width-full .fl-lightbox-header{cursor:inherit!important}.fl-lightbox-controls{position:absolute;right:10px;top:10px;z-index:5}.fl-lightbox-controls .fa{color:#bdbdbd;font-size:14px;padding:5px}.fl-lightbox-controls .fa:hover{color:#aaa;cursor:pointer}.fl-lightbox-header-wrap{border-top-left-radius:4px;border-top-right-radius:4px}.fl-lightbox-header{position:relative}.fl-lightbox-header h1{color:#333!important;font-size:16px!important;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif!important;font-weight:400!important;margin:0!important;padding:14px 34px 15px 28px!important;text-align:left!important;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center;line-height:1}.fl-lightbox.ui-draggable .fl-lightbox-header{cursor:move}.fl-lightbox-header h1 .fl-builder-badge{margin-left:10px;color:#fff;background-color:#F7A408}.fl-lightbox-content,.fl-lightbox-content-wrap{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex:1 100%;flex:1 100%;max-width:100%}.fl-lightbox-footer{box-sizing:border-box;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:end;justify-content:flex-end;-ms-flex:0 0;flex:0 0;-ms-flex-preferred-size:44px;flex-basis:44px;padding:4px;text-align:right}.fl-lightbox-footer .fl-builder-button{height:36px;margin-left:5px!important;-ms-flex:0 0 0%;flex:0 0 0%;-ms-flex-pack:center;justify-content:center}.fl-lightbox-width-slim .fl-lightbox-footer{-ms-flex-pack:stretch;justify-content:stretch;padding:4px 5px}.fl-lightbox-width-slim .fl-lightbox-footer .fl-builder-button{-ms-flex:1 1 100%;flex:1 1 100%;display:block;text-align:center}.fl-lightbox-width-slim .fl-lightbox-footer .fl-builder-button:first-child{margin-left:0!important}.fl-lightbox table,.fl-lightbox td,.fl-lightbox th,.fl-lightbox tr{border:none}.fl-lightbox-wrap.fl-icon-selector{z-index:1000111}.fl-icon-selector .fl-lightbox{height:100%}.fl-icons-filter{height:auto!important;margin:0!important;position:absolute!important;right:0;top:0;padding:10px 16px;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.fl-icons-filter select{vertical-align:middle;width:195px;-webkit-appearance:none;-moz-appearance:none;appearance:none;box-sizing:border-box;color:#000;border:2px solid #e4e7ea!important;border-right:none!important;margin:0;padding:2px 10px;background:url(../img/svg/select-arrow-down-alt2.svg) center right 10px no-repeat #fff!important;-ms-flex:1 1 195px;flex:1 1 195px;border-radius:0}.fl-icons-filter input[type=text]{line-height:18px;vertical-align:middle;width:160px;-ms-flex:1 1 160px;flex:1 1 160px;border:2px solid #e4e7ea!important;border-radius:0!important;padding:2px 10px!important}.fl-icons-filter input[type=text]:focus,.fl-icons-filter select:focus{border:2px solid #00A0D2!important}.fl-icons-list{bottom:52px;left:0;overflow:auto;padding:20px;position:absolute;right:0;top:48px}.fl-icons-list::-webkit-scrollbar{background-color:#ccc;-webkit-appearance:none;width:10px}.fl-icons-list::-webkit-scrollbar-thumb{background-color:#666;border:1px solid #ccc}.fl-icons-section{text-align:center}.fl-icons-section h2{border-bottom:1px solid #dfdfdf;color:#333!important;font-family:Helvetica,Verdana,sans-serif!important;font-size:16px!important;font-weight:700!important;margin:0 0 20px!important;padding:0 0 10px!important;text-align:left}.fl-icons-list i,.fl-icons-list i:before{cursor:pointer;display:inline-block;font-size:40px;height:100px;line-height:100px;width:100px;background:0 0}.fl-icons-list i:hover{background:#fff;box-shadow:0 10px 20px rgba(0,0,0,.15);border-radius:4px}.fl-icon-selector-footer{bottom:0;left:0;position:absolute;right:0}html{transition-property:margin}html.fl-builder-is-showing-toolbar{margin-top:calc(44px + 1px)!important}.fl-builder-edit body{position:static!important}.fl-builder-edit:after,.fl-builder-edit:before{z-index:0!important}.fl-builder-edit .fl-builder-content{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-touch-callout:none}#wpadminbar{transition-property:transform,opacity;transform-origin:bottom;transform-style:preserve-3d;transform:rotateX(89deg) translateY(46px);opacity:0;will-change:transform}html.fl-builder-show-admin-bar{margin-top:32px}html.fl-builder-show-admin-bar #wpadminbar{transform:rotateX(0) translateY(0);pointer-events:auto;opacity:1}@media screen and (max-width:782px){html.fl-builder-show-admin-bar{margin-top:46px}}.fl-clear{clear:both}.screen-reader-text{position:absolute;left:-1000em;top:-1000em;height:1px;width:1px;overflow:hidden}.fl-builder-loading{background:url(../img/ajax-loader.svg) center center no-repeat rgba(240,240,240,.8);bottom:0;display:none;left:0;position:fixed;right:0;text-align:center;top:0;z-index:12000000}.fl-builder-settings .fl-builder-loading{background:url(../img/ajax-loader.svg) center center no-repeat rgba(255,255,255,.8);display:block;position:absolute}.fl-field-loader{color:#B3B3B3!important;font-style:italic}.fl-builder-node-loading{opacity:.35!important}.fl-builder-node-loading-placeholder{background:url(../img/ajax-loader.svg) center center no-repeat;height:50px}.fl-col-group-has-child-loading{display:-ms-flexbox;display:flex}.fl-col-group-has-child-loading>.fl-builder-node-loading-placeholder{width:50px}.fl-node-hidden{display:none}.fl-builder-edit .fl-node-hidden{display:block}html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-visible-desktop,html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-visible-desktop-medium,html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-visible-medium,html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-visible-medium-mobile,html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-visible-mobile{display:block!important}html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-col-group-equal-height .fl-col.fl-visible-desktop,html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-col-group-equal-height .fl-col.fl-visible-desktop-medium,html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-col-group-equal-height .fl-col.fl-visible-medium,html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-col-group-equal-height .fl-col.fl-visible-medium-mobile,html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-col-group-equal-height .fl-col.fl-visible-mobile{display:-ms-flexbox!important;display:flex!important}.fl-responsive-preview-enabled body{overflow:hidden!important}.fl-responsive-preview-mask{background:#F7F7F7;bottom:0;left:0;position:fixed;right:0;top:0;z-index:99999}.fl-responsive-preview{bottom:0;left:0;position:fixed;right:0;top:0;margin-top:50px;z-index:100000}.fl-builder-preview .fl-responsive-preview{margin:0!important}.fl-responsive-preview-content{background:#F5F7F9;padding:20px 20px 45px;overflow:scroll;position:absolute;top:45px;right:0;bottom:0;left:0}.fl-responsive-preview-content .fl-builder-content-editing{overflow:visible!important}.fl-responsive-preview-message{background:#F5F7F9;color:#b3b3b3;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif!important;font-size:14px;font-weight:400;padding:15px;text-align:center;position:absolute;top:0;left:0;right:0;z-index:999999}.fl-responsive-preview-message span{display:inline-block;margin-right:8px}.fl-responsive-preview-message .fl-builder-button{display:inline-block;margin-left:2px;padding:0 10px}.fl-responsive-preview-message .fl-builder-button i{font-size:14px;height:14px;width:14px}.fl-responsive-preview .fl-builder-content{box-shadow:0 0 8px rgba(0,0,0,.2);margin-left:auto;margin-right:auto;max-width:100%;overflow:visible;position:relative}#fl-builder-preview-frame,#fl-builder-preview-mask{bottom:0;height:100%;position:fixed;top:0;width:100%;right:0}.fl-responsive-preview .fl-block-col-resize{display:none}.fl-builder-button,body .fl-builder-bar .fl-builder-bar-content{display:-ms-flexbox;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif!important}#fl-builder-preview-mask{background:url(../img/ajax-loader.svg) center center no-repeat #F7F7F7;left:0;z-index:999999}#fl-builder-preview-frame{left:50%;transform:translateX(-50%);-moz-transform:translateX(-50%);-webkit-transform:translateX(-50%);z-index:1000000}body button[class*=fl-builder],body button[class*=fl-builder]:focus,body button[class*=fl-builder]:hover{box-shadow:none;max-height:none;max-width:none;text-decoration:none;text-indent:0;text-shadow:none;text-transform:none}.fl-builder-button{-webkit-appearance:none;-ms-flex-align:center;align-items:center;background:#e7ebef;border:2px solid transparent;border-radius:3px;-webkit-border-radius:3px;box-sizing:border-box!important;-webkit-box-sizing:border-box!important;-moz-box-sizing:border-box!important;color:#676F7A!important;cursor:pointer;display:flex;fill:#676F7A!important;font-size:14px!important;font-style:normal!important;font-weight:500!important;height:33px;letter-spacing:normal!important;line-height:1!important;margin:0;padding:0 12px;text-align:center;transition-property:background-color,width;transition-duration:.2s;white-space:nowrap;width:auto;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fl-builder--search-results-panel,.fl-builder-bar,.fl-builder-panel{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-touch-callout:none}.fl-builder-button:hover{background:#dadfe5;color:#222;border:2px solid transparent!important}.fl-builder-button:active{background:#DCDCDC}button.fl-builder-button:focus{position:static;top:auto;outline:0;background:#E4E7EA;border:2px solid #00A0D0!important}.fl-builder-bar .fl-builder-button{height:auto}.fl-builder-button-primary,body.fl-builder--layout-has-drafted-changes .fl-builder-done-button{background:#00A0D2;color:#fff!important;text-decoration:none;border:2px solid transparent!important}.fl-builder-button.fl-builder-button-primary:focus,body.fl-builder--layout-has-drafted-changes .fl-builder-button.fl-builder-done-button:focus{background:#00A0D2;border:2px solid #ffc217!important}.fl-builder-button-primary:hover,body.fl-builder--layout-has-drafted-changes .fl-builder-done-button:hover{background:#0197C6;color:#fff!important}.fl-builder-button-primary:active,body.fl-builder--layout-has-drafted-changes .fl-builder-done-button:active{background:#0484AC}.fl-builder-button-large{height:30px}.fl-builder-button-small{font-size:11px!important;line-height:1!important}.fl-builder-help-button{color:#b3b3b3;font-size:16px!important}.fl-builder-help-button i{position:relative;top:-1px}.fl-builder-help-button:hover{color:#666}.fl-builder-publish-button{line-height:45px!important}.fl-builder-content-panel-button,.fl-builder-content-panel-button:hover{fill:#00A0D2!important;font-size:30px!important;padding-bottom:4px}.fl-builder-button-silent,.fl-builder-button-silent:hover{padding:0 12px;background:0 0!important;border:2px solid transparent!important;box-shadow:none!important}.fl-builder-done-button,.fl-builder-done-button:hover{font-weight:600}.fl-field .fl-builder-button{display:inline-block;height:auto;padding:11px 12px;vertical-align:middle;box-shadow:0 2px 4px 0 rgba(0,0,0,.12)}.fl-builder-badge{background:#333;border-radius:2px;color:#fff!important;display:inline;font-size:11px!important;font-weight:400;letter-spacing:1px;margin-left:2px;padding:2px 4px;vertical-align:middle}.fl-builder-badge-global{background:#ff9600;transform:translateY(0);transition-duration:.25s;transition-property:transform}.fl-builder-blocks-node-template .fl-builder-badge-global{position:absolute;right:0;top:0}.fl-builder-block:hover .fl-builder-badge-global{display:none}.fl-builder-bar{left:0;position:fixed;right:0;top:0;z-index:999999;user-select:none;transition-property:transform opacity;transition-duration:.35s;transform-style:preserve-3d;perspective:1100px}.fl-builder-bar.is-hidden .fl-builder-bar-content{transform:translateY(-100%) rotateX(90deg)}body .fl-builder-bar .fl-builder-bar-content{display:flex;box-sizing:border-box;background:#fff;border-bottom:1px solid #eceef1;color:#999;font-size:14px!important;height:calc(44px + 1px);transition-property:background-color,opacity,transform;transition-duration:.35s;pointer-events:auto}.fl-builder-draggable-is-dragging .fl-builder-content,.fl-builder-draggable-is-dragging .fl-builder-panel .fl-lightbox,.fl-builder-resizable-is-resizing .fl-builder-content,.fl-builder-resizable-is-resizing .fl-builder-panel .fl-lightbox,body .fl-builder-bar .fl-builder-bar-content.is-muted{pointer-events:none}body .fl-builder-bar .fl-builder-bar-content.is-muted>:not(.fl-builder-publish-actions){-webkit-filter:saturate(20%) blur(1px);filter:saturate(20%) blur(1px);opacity:.4}.fl-builder-bar-title{box-sizing:border-box;color:#333;display:-ms-flexbox;display:flex;-ms-flex:0 0 380px;flex:0 0 380px;max-width:380px;border-right:1px solid #eceef1;cursor:pointer}.fl-builder-bar-title:hover{background:#fff}.fl-builder-bar-title.is-showing-menu .fl-builder-bar-title-caret>svg{transform:rotate(180deg)}.fl-builder-simple .fl-builder-bar-title{cursor:auto}.fl-builder-simple .fl-builder-bar-title:hover{cursor:auto;background:0 0}.fl-builder-bar-title span{vertical-align:middle}.fl-builder-bar-title-icon{box-sizing:border-box;background:0 0;-ms-flex:0 0 46px;flex:0 0 46px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:4px}.fl-builder-bar-title-icon img{max-width:100%!important;height:auto!important}.fl-builder-bar-title.fl-builder-bar-title-no-icon{padding-left:12px}.fl-builder-bar-title-area{box-sizing:border-box;-ms-flex:1 1 100%;flex:1 1 100%;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;overflow:hidden;padding:4px}.fl-builder-layout-title,.fl-theme-builder-preview-select .fl-theme-builder-preview-select-title span{font-size:16px;font-weight:400;line-height:1.3;color:#161B20;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.fl-builder-bar-title-caret,.fl-builder-layout-pretitle,.fl-theme-builder-preview-select .fl-theme-builder-preview-select-title{font-size:12px;font-weight:500;line-height:1.3;color:#656d77;text-align:left;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.fl-builder-bar-title-caret i,.fl-theme-builder-preview-select-title i{color:inherit!important;font-size:14px}.fl-builder-bar-title-caret{margin-left:auto!important;-ms-flex:0 0 46px;flex:0 0 46px}.fl-theme-builder-preview-select-title i{padding:12px}.fl-theme-builder-preview-select.fl-builder-button{position:relative;border-radius:0;background:0 0;min-width:0;display:-ms-flexbox;display:flex;-ms-flex:0 0 360px;flex:0 0 360px;max-width:360px;margin:0!important;padding:4px 10px;border:none!important;border-right:2px solid #d5dadd!important;box-shadow:none}.fl-theme-builder-preview-select.fl-builder-button:hover{border:none!important;border-right:2px solid #d5dadd!important}.fl-theme-builder-preview-select .fl-theme-builder-preview-select-title{display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-pack:end;justify-content:flex-end;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.fl-theme-builder-preview-select-title div{-ms-flex:1;flex:1}.fl-theme-builder-preview-select .fl-theme-builder-preview-select-title span{display:block}.fl-theme-builder-preview-select-open .fl-theme-builder-preview-select-items{position:absolute;top:calc(48px + 10px);left:10px;width:calc(100% - 20px)!important;background:#fff;border-radius:4px;border:2px solid #D5DADD;border-top:3px solid #00a0d2;box-shadow:0 15px 45px 8px rgba(0,0,0,.04);margin:0!important;padding:0;z-index:-1;font-size:16px;overflow:visible;height:auto!important;max-height:calc(100vh - 66px);min-height:300px;display:-ms-flexbox!important;display:flex!important;-ms-flex-direction:column;flex-direction:column}.fl-theme-builder-preview-select-item{padding:4px 0!important;border-bottom:none!important;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;text-align:initial}.fl-theme-builder-preview-select-item:hover{text-decoration:none;color:#111;background:0 0!important}body .fl-theme-builder-preview-select .fa-caret-down{float:none}body .fl-theme-builder-preview-select-item-title{padding:10px 15px;color:#222;font-size:14px}body .fl-theme-builder-preview-select-item-children{overflow:auto}body .fl-theme-builder-preview-select-item-child{overflow:hidden;text-overflow:ellipsis;line-height:1.1;margin:0 10px;border:2px solid transparent;border-radius:4px;padding:8px 10px 10px;font-size:14px;font-weight:400;color:#222}body .fl-theme-builder-preview-select-item-child:hover{background:#e6eaed!important}.fl-theme-builder-preview-select-item .fa-caret-down{color:#606D77}.fl-builder-bar-actions{display:-ms-flexbox;display:flex;-ms-flex-direction:row-reverse;flex-direction:row-reverse;-ms-flex:1 1 100%;flex:1 1 100%;padding:4px}.fl-builder-bar .fl-builder-button{margin:0 0 0 4px}.fl-builder-bar-actions .fl-builder-button:last-child{margin:0}.fl-builder-bar-actions:after{clear:both}.fl-builder-bar .fl-builder-content-panel-button{-ms-flex-align:baseline!important;align-items:baseline!important;padding-top:1px;font-weight:400}.fl-builder-content-panel-button svg{transition-property:transform;transition-duration:.25s;transform:rotate(0) scale(1);transform-origin:center}.fl-builder-content-panel-is-showing .fl-builder-content-panel-button svg{transform:rotate(135deg) scale(1.1) translate(.5px,-.5px)}.fl-builder--saving-indicator{cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-item-align:center;align-self:center;padding:0 10px;font-size:12px;font-style:italic;color:#676f7a;-ms-flex-align:center;align-items:center;line-height:1.2;min-width:180px;-ms-flex-pack:end;justify-content:flex-end}.fl-builder--saving-indicator:hover{color:#676f7a}.fl-builder--saving-indicator .fa-question-circle{font-size:13px;margin:3px 0 3px 5px}.fl-builder-buy-button,.fl-builder-feedback-button,.fl-builder-upgrade-button{background:#F7A407;color:#fff!important;text-decoration:none}.fl-builder-buy-button i.fa-external-link-alt,.fl-builder-feedback-button i.fa-external-link-alt,.fl-builder-upgrade-button i.fa-external-link-alt{color:#FFC733;margin:0 0 0 6px}.fl-builder-buy-button:hover,.fl-builder-feedback-button:hover,.fl-builder-upgrade-button:hover{background:#EE8E0D;color:#fff!important}@media (max-width:980px){.fl-builder--main-menu-panel{width:calc(100% - 20px)!important}.fl-builder--main-menu-panel:before{right:auto;left:20px}.fl-builder-bar-title,.fl-theme-builder-preview-select{-ms-flex:1 .5 380px!important;flex:1 .5 380px!important}}@media (max-width:620px){.fl-theme-builder-preview-select.fl-builder-button{display:none}}@media (max-width:500px){#fl-builder-toggle-notifications,.fl-builder--main-menu-panel:before,.fl-builder--panel-arrow,.fl-builder-bar-title-area,.fl-builder-panel-drag-handle,.fl-builder-panel:before{display:none}.fl-builder--main-menu-panel,.fl-builder-panel{width:auto!important;top:44px!important;left:0!important;right:0!important;bottom:0!important;border-radius:0!important;box-shadow:none!important}.fl-builder--main-menu-panel{border-left:transparent!important;border-right:transparent!important;border-bottom:transparent!important;max-height:calc(100% - 44px)!important}.fl-builder-bar-title{-ms-flex:0 0 80px!important;flex:0 0 80px!important}.fl-builder-bar-title-caret{padding-left:0;padding-right:0;max-width:24px}.fl-builder-bar-actions{max-width:calc(100% - 80px);overflow:hidden}.fl-builder--panel-header{border-radius:0!important;cursor:default!important}.fl-builder--panel-header .fl-builder--tabs{cursor:default!important}.fl-builder-publish-actions{width:100%!important;padding-left:4px!important}.fl-builder-bar-actions .fl-builder-button{padding:0 8px!important}}.fl-builder--preview-actions{display:none;position:fixed;top:4px;left:4px;z-index:10000001;padding:4px;-ms-flex-pack:center;justify-content:center;background:#fff;border-radius:4px}.fl-builder-preview .fl-builder--preview-actions{display:-ms-flexbox;display:flex}.fl-builder--preview-actions .device-icons{color:#555;background:#e4e4e4;border:none!important;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;text-decoration:none;font-size:14px!important;line-height:1!important;margin:0 4px 0 0;padding:0 6px;cursor:pointer;-webkit-border-radius:3px;-webkit-appearance:none;border-radius:3px}.fl-builder--preview-actions .device-icons i{margin:0 6px}@keyframes fl-builder-ui-pin-zone-pulse{0%,100%{opacity:1;filter:alpha( opacity=1 )}50%{opacity:.5;filter:alpha( opacity=35 )}}.fl-builder-ui-pin-zone{animation:fl-builder-ui-pin-zone-pulse 2s infinite;transition:width .3s ease;background:rgba(0,160,210,.5);bottom:0;top:0;position:fixed;width:35px;z-index:100001}.fl-builder-ui-show-pin-zone-left .fl-builder-ui-pin-zone-left,.fl-builder-ui-show-pin-zone-right .fl-builder-ui-pin-zone-right{width:75px}.fl-builder-ui-pin-zone-left{left:0}.fl-builder-ui-pin-zone-right{right:0}.fl-builder-content-panel-pin-zone .fl-builder-content-panel-button{display:-ms-flexbox!important;display:flex!important;background:rgba(0,160,210,.5)!important;padding:2px 4px;width:80px;animation:fl-builder-ui-pin-zone-pulse 2s infinite}.fl-builder-content-panel-pin-zone .fl-builder-content-panel-button svg{display:none}.fl-builder-content-panel-pin-zone-hover .fl-builder-content-panel-button{width:120px}.fl-builder-content-panel-pin-zone-hover .fl-builder-content-panel-button svg{display:none!important;width:100%;transform:none!important;fill:#00A0D2!important;border-radius:3px}.fl-builder-ui-is-pinned .fl-builder-content-panel-button,.fl-builder-ui-pinned-container .fl-lightbox-controls{display:none}.fl-builder-content-panel-pin-zone .fl-builder-done-button{-webkit-filter:grayscale(100%);filter:grayscale(100%)}.fl-builder-panel.fl-builder-ui-pinned{top:45px!important;bottom:0!important;height:auto!important;border-radius:0;border:none;box-shadow:none;animation-duration:0s;-moz-animation-duration:0s;-webkit-animation-duration:0s;-o-animation-duration:0s;z-index:11}.fl-builder-panel.fl-builder-ui-pinned-right{left:auto!important;right:0;border-left:1px solid #eceef1}.fl-builder-panel.fl-builder-ui-pinned-left{left:0;right:auto;border-right:1px solid #eceef1}.fl-builder-panel.fl-builder-ui-pinned .fl-builder--panel-header{border-radius:0!important}.fl-builder-ui-pinned-container .fl-lightbox-wrap{position:absolute;z-index:11}.fl-builder-ui-pinned-container .fl-lightbox{position:absolute;top:0;bottom:0;left:0;right:0;width:auto!important;height:auto;border-radius:0;box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none;animation-duration:0s;-moz-animation-duration:0s;-webkit-animation-duration:0s;-o-animation-duration:0s}.fl-builder-ui-pinned-container .fl-lightbox-header-wrap{border-radius:0}.fl-builder-ui-pinned-container .fl-lightbox.ui-draggable .fl-lightbox-header{cursor:auto}.fl-builder-ui-pinned-container .fl-lightbox-header h1{padding:12px 20px 10px!important}.fl-builder-ui-pinned-content-transform{transform:scale(1);transform-origin:center top 0}.fl-builder-ui-pinned-collapse{cursor:pointer;display:none;position:absolute!important;bottom:2px;padding:5px;border:2px solid transparent;background:0 0;width:36px;height:36px;border-radius:4px;fill:#778794;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:center;justify-content:center}.fl-builder-ui-pinned-collapse:focus,.fl-builder-ui-pinned-collapse:hover{top:auto!important;background:0 0;border:2px solid transparent;outline:0;fill:#00A0D2}.fl-builder-ui-pinned-collapse:focus{background:#E4E7EA}.fl-builder-ui-pinned-collapse>*{margin:auto;line-height:1}.fl-builder-ui-pinned-collapse svg g{fill:inherit}.fl-builder-ui-is-pinned-right .fl-builder-ui-pinned-right-collapse{display:-ms-flexbox;display:flex;left:-40px}.fl-builder-ui-is-pinned-left .fl-builder-ui-pinned-left-collapse{display:-ms-flexbox;display:flex;right:-40px}.fl-builder-ui-pinned-collapse i[data-toggle=show],.fl-builder-ui-pinned-is-collapsed i[data-toggle=hide]{display:none}.fl-builder-ui-pinned-is-collapsed i[data-toggle=show]{display:block}.fl-builder--panel-no-settings,.fl-builder-simple-pinned .fl-builder--content-library-panel .fl-builder--panel-content,.fl-builder-simple-pinned .fl-builder--content-library-panel .fl-builder--panel-controls,.fl-builder-simple-pinned .fl-builder--content-library-panel .fl-builder--tab-wrap,.fl-builder-ui-pinned-is-collapsed .fl-builder--panel-header{display:none}.fl-builder-ui-is-pinned-left [data-toggle=hide],.fl-builder-ui-is-pinned-right [data-toggle=show]{transform:rotateY(180deg)}.fl-builder-ui-pinned-is-collapsed .fl-lightbox{box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none}.fl-builder-simple-pinned .fl-builder--content-library-panel .fl-builder--panel-header{background:0 0;border:none;z-index:10}.fl-builder-simple-pinned .fl-builder--content-library-panel .fl-lightbox-wrap{top:0}.fl-builder-simple-pinned .fl-builder--content-library-panel .fl-lightbox-header h1{padding:14px 28px 15px!important}.fl-builder-simple-pinned .fl-builder--panel-no-settings{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;position:absolute;top:0;left:0;right:0;bottom:0}@keyframes fl-builder-show-panel{from{transform:scale(.8)}to{transform:scale(1)}}.fl-builder--search-results-panel,.fl-builder-panel{box-sizing:border-box;position:fixed!important;right:20px;top:calc(43px + 10px);width:380px;bottom:20px;background:#F5F7F9;color:#676F7A;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:14px;border-radius:4px;box-shadow:0 8px 40px 4px rgba(0,0,0,.3);z-index:10000007;will-change:transform;user-select:none}.fl-builder-panel{transform-origin:top right;animation-name:fl-builder-show-panel;animation-duration:.15s;animation-fill-mode:both;-ms-flex:1;flex:1;display:none}.fl-builder--search-results-panel{display:none;position:absolute;right:0;top:93px;left:0;bottom:0;width:auto!important;border:none;border-radius:0;box-shadow:none;min-height:100px;max-height:calc(100vh - 54px);overflow:auto;z-index:1}.fl-builder-content-panel-is-showing .fl-builder-panel,.fl-builder-search-results-panel-is-showing .fl-builder--search-results-panel{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.fl-builder-panel .fl-lightbox .fl-builder-panel-drag-handle,.fl-builder-ui-is-pinned .fl-builder--panel-arrow,.fl-lightbox-width-full .fl-builder-panel-drag-handle,body.fl-builder-draggable-is-dragging .fl-builder--panel-arrow{display:none}.fl-builder--search-results-panel .fl-builder--no-results{text-align:center;padding:50px 20px}.fl-builder--panel-arrow{position:absolute;top:-13px;right:10px}.fl-builder--panel-arrow polygon{fill:#00a0d2}.fl-builder--panel-header{border-top:3px solid #00a0d2;border-top-right-radius:4px;border-top-left-radius:4px}.fl-builder-ui-is-pinned .fl-builder--panel-header{border-top:none}.fl-builder-panel-drag-handle{position:absolute;top:7px;left:10px;fill:#ccd4da;width:6px}.fl-builder-ui-is-pinned-left .fl-builder-panel-drag-handle{left:auto;right:10px}.fl-builder--panel-header .fl-builder--panel-controls{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;position:relative}.fl-builder--panel-header .fl-builder--panel-controls .fl-builder-content-group-select{-ms-flex:1 1;flex:1 1}.fl-builder--panel-header .fl-builder--panel-controls .fl-builder-panel-search{-ms-flex:0 0;flex:0 0;padding:0 10px 6px 0;margin-left:-4px}.fl-builder--panel-controls .fl-builder-panel-search button{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:30px;background:0 0!important;border:2px solid transparent!important;font-size:inherit;height:36px;margin:0;padding:0}.fl-builder--panel-controls .fl-builder-panel-search button:active,.fl-builder--panel-controls .fl-builder-panel-search button:focus{top:0;outline:0}.fl-builder-panel-search button svg{height:auto;width:20px}.fl-builder-panel-search button.fl-builder-dismiss-panel-search svg{width:16px}.fl-builder-panel-search button svg .filled-shape{fill:#000}.fl-builder--panel-controls .fl-builder-panel-search button:active svg .filled-shape,.fl-builder--panel-controls .fl-builder-panel-search button:focus svg .filled-shape{fill:#00A0D2}.fl-builder-panel-search .fl-builder-panel-search-input{display:none;position:absolute;top:0;left:0;right:0;bottom:0;background:#f5f7f9}.fl-builder-panel-search.is-showing-input .fl-builder-panel-search-input{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;padding:0 10px 6px}.fl-builder-panel-search-input input{-ms-flex:1 1 100%;flex:1 1 100%;border:2px solid #e6eaed;background:#fff;border-radius:4px;margin:0 4px 0 0;padding:10px;color:#333}.fl-builder-panel-search-input input:focus{border-color:#0197C6;outline:0}.fl-builder-panel-content-wrap{bottom:0;height:auto;left:0;overflow:hidden;position:absolute;right:0;top:43px}.fl-builder-panel-content{padding-bottom:60px}.fl-builder--panel-view .fl-builder-blocks-section:first-child{border-top:none}.fl-builder-blocks-group:first-child{padding:20px 0 0}.fl-builder-blocks-group .fl-builder-blocks-section-group-name{display:block;padding:0 30px 15px;color:#000;font-size:20px;font-weight:600;line-height:1.4}.fl-builder-blocks-section .fl-builder-block{display:block;line-height:1.1;padding:15px 20px}.fl-builder--template-collection-section-header,.fl-builder-blocks-section .fl-builder-blocks-section-header{line-height:1.2;color:#333;margin:0!important;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#e7ebef;border-top:4px solid #e7ebef;height:30px;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.fl-builder-blocks-section .fl-builder-blocks-section-title{background:#F5F7F9;color:#353535;padding:2px 16px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.fl-builder-blocks-section .fl-builder-blocks-section-title i{color:#bfbfbf;float:right}.fl-builder-blocks-section-content{overflow:auto;padding:10px 10px 20px}.fl-builder-blocks-section-content:before{content:none}.fl-builder-blocks-section-content:after{float:none;clear:both}.fl-builder-blocks-section-content.fl-builder-modules,.fl-builder-blocks-section-content.fl-builder-rows,.fl-builder-blocks-section-content.fl-builder-widgets{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}@supports (display:grid){.fl-builder--template-collection-section-content,.fl-builder-blocks-section-content.fl-builder-modules,.fl-builder-blocks-section-content.fl-builder-rows,.fl-builder-blocks-section-content.fl-builder-widgets{display:grid;grid-template-columns:repeat(auto-fit,minmax(148px,1fr))}.fl-builder--template-collection-section-content>*,.fl-builder-blocks-section-content.fl-builder-modules>*,.fl-builder-blocks-section-content.fl-builder-rows>*,.fl-builder-blocks-section-content.fl-builder-widgets>*{width:auto!important}}.fl-builder-blocks-section-content .fl-builder-block-module,.fl-builder-blocks-section-content .fl-builder-block-row{-ms-flex:1 1 50%;flex:1 1 50%;width:50%;box-sizing:border-box}.fl-builder--search-results-panel .fl-builder-blocks-section-content .fl-builder-block-module{-ms-flex:1 1 100%;flex:1 1 100%;width:100%}.fl-builder-blocks-section.fl-active .fl-builder-blocks-section-content{display:block}.fl-builder-blocks-section-content .fl-builder-block{box-sizing:border-box;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-radius:4px;font-size:13px;line-height:1.1;font-weight:400;color:#38404a}.fl-builder-block{position:relative;height:47px}.fl-builder-block.fl-builder-block-col-group{height:84px}.fl-builder-block.fl-builder-block-has-thumbnail{height:auto!important;padding:10px!important}.fl-builder-block.fl-builder-block-has-thumbnail:hover{padding:0!important}.fl-builder-block.fl-builder-block-has-thumbnail .fl-builder-block-content{position:relative!important}.fl-builder-block.fl-builder-block-has-thumbnail:hover .fl-builder-block-content{padding:10px!important}.fl-builder-block.fl-builder-block-has-thumbnail .fl-builder-block-details{margin:0 10px 4px!important}.fl-builder-block:hover{overflow:visible;z-index:1}.fl-builder-block:hover .fl-builder-block-content{display:block;box-sizing:border-box;position:absolute;top:0;left:0;width:100%;padding:15px 20px;border-radius:4px;background:#fff;box-shadow:0 2px 4px 0 rgba(0,0,0,.12);text-decoration:none;color:#111;cursor:move;overflow:hidden}.fl-builder-blocks-node-template .fl-builder-block,.fl-builder-blocks-section-content .fl-builder-block .fl-builder-block-details{position:relative}.fl-builder-block-module:hover .fl-builder-block-content{width:auto;min-width:100%}.fl-builder-block .fl-builder-block-content .fl-builder-block-visual{display:block;margin-bottom:7px}.fl-builder-block-drag-helper .fl-builder-block-content .fl-builder-block-visual{display:none!important}.fl-builder-block .fl-builder-block-content .fl-builder-block-visual.fl-cols-visual{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;height:30px}.fl-builder-block-visual.fl-cols-visual .fl-cols-visual-col{-ms-flex:1 100%;flex:1 100%;background:#464a4c;height:30px;margin:0 2px;border-radius:2px}.fl-builder-block:hover .fl-builder-block-visual.fl-cols-visual .fl-cols-visual-col{background:#000}.fl-builder-block-visual.fl-cols-visual .fl-cols-visual-col:first-child{margin-left:0!important}.fl-builder-block-visual.fl-cols-visual .fl-cols-visual-col:last-child{margin-right:0!important}.fl-cols-visual.left-right-sidebar .fl-cols-visual-col:first-child,.fl-cols-visual.left-right-sidebar .fl-cols-visual-col:last-child,.fl-cols-visual.left-sidebar .fl-cols-visual-col:first-child,.fl-cols-visual.right-sidebar .fl-cols-visual-col:last-child{-ms-flex-preferred-size:60px;flex-basis:60px}.fl-builder-block-saved-column.fl-builder-block-global .fl-builder-block-title,.fl-builder-block-saved-column:hover .fl-builder-block-title,.fl-builder-block-saved-module.fl-builder-block-global .fl-builder-block-title,.fl-builder-block-saved-module:hover .fl-builder-block-title,.fl-builder-block-saved-row.fl-builder-block-global .fl-builder-block-title,.fl-builder-block-saved-row:hover .fl-builder-block-title{margin-right:70px}.fl-builder-block-module:nth-child(even):hover .fl-builder-block-content{left:auto;right:0}.fl-builder-block-thumbnail{border-radius:4px;background-size:contain;background-repeat:no-repeat;background-position:center;background-color:rgba(0,0,0,.06);margin-bottom:10px;transform-origin:bottom;transition-property:transform,box-shadow;transition-duration:.15s}.fl-builder-block:hover .fl-builder-block-thumbnail{transform:scale(1.05);box-shadow:0 20px 40px rgba(0,0,0,.08)}.fl-builder-block .fl-builder-block-icon{margin-right:7px;fill:#000;display:inline-block;width:20px;height:20px;vertical-align:middle}.fl-builder-block-thumbnail:before{content:"";display:block;padding-top:50%}.fl-builder-block-thumbnail img{max-width:100%;max-height:160px;margin:0;-o-object-fit:cover;object-fit:cover}.fl-builder-blocks-section-content .fl-builder-block{box-shadow:0 0 0 transparent;transition-property:box-shadow;transition-duration:.15s}.fl-builder-blocks-section-content .fl-builder-block i,.fl-user-template-actions i{color:#000;margin-right:10px}.fl-builder-blocks-separator{background:#f1f1f1;height:6px}.fl-builder-block:hover .fl-builder-badge{background:#2ea2cc}.ui-sortable-helper .fl-builder-badge{display:none!important}.fl-builder-modules-cta a{color:#999!important;display:block!important;font-size:12px!important;font-style:italic!important;padding:15px 20px!important;line-height:16px!important}.fl-builder-modules-cta a:hover{background:#e5e5e5!important;color:#666!important;text-decoration:none!important}.fl-builder-modules-cta a:focus{text-decoration:none!important}.fl-builder-modules-cta .fa{float:right!important;font-size:14px!important;margin:3px 0 0 9px!important}.fl-builder--panel-message{text-align:center;padding:40px 20px;font-size:16px}.fl-builder--panel-message .fl-builder-button{display:inline-block;padding:10px}.fl-builder--panel-cta{padding:20px 30px;font-size:16px;text-align:center}.fl-builder--panel-cta a{color:inherit;text-decoration:none}.fl-builder--panel-cta a:hover{text-decoration:none}.fl-builder-block-template-image{margin:5px 0 10px;max-width:100%;border:1px solid #dfdfdf}.fl-builder-block .fl-builder-block-title{overflow:hidden;text-overflow:ellipsis;vertical-align:middle;line-height:1.3}.ui-sortable-helper .fl-builder-block-template-image{display:none!important}@keyframes fl-builder-template-item-enter{from{transform:translateY(100px) scale(.3);opacity:0}to{transform:scale(1);opacity:1}}.fl-builder--template-collection{clear:both;padding:10px 0}.fl-builder--template-collection-section-content{padding:0 10px}.fl-builder--template-collection-item{box-sizing:border-box;width:50%;float:left;padding:10px;cursor:pointer;font-size:13px;transform-origin:center;opacity:1}.fl-builder--template-thumbnail{background-size:cover;background-clip:content-box;background-position:center top;background-color:#fff;border:2px solid transparent;transform-origin:bottom;transition-property:transform,box-shadow;transition-duration:.15s}.fl-builder--template-collection-item[data-id="0"] .fl-builder--template-thumbnail,.fl-user-template .fl-builder--template-thumbnail{border-color:#e4e7ea}.fl-builder--template-thumbnail:before{display:block;content:"";padding-top:120%}.fl-builder--template-thumbnail:hover{transform:scale(1.05);box-shadow:0 20px 40px rgba(0,0,0,.08)}.fl-builder--template-name{text-align:center;padding:4px 0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.fl-builder--template-collection-section{padding-bottom:10px;border-bottom:1px solid #dfdfdf}.fl-builder--template-collection-section:last-child{border-bottom:none}.fl-builder--template-collection-section:after,.fl-builder--template-collection-section:before{content:"";display:block;clear:both}.fl-builder--template-collection-section-name{padding:15px 10px 10px}span.fl-builder-block-no-node-templates{display:block;padding:15px 20px;text-align:center}span.fl-builder-block-no-node-templates:hover{cursor:default}.fl-builder-blocks-section-content .fl-builder-node-template-actions{bottom:0;cursor:default;display:none;position:absolute;right:0;top:0}.fl-builder-blocks-section-content .fl-builder-node-template-delete,.fl-builder-blocks-section-content .fl-builder-node-template-edit{display:inline;cursor:pointer;margin:0;padding:15px 10px;text-align:center;width:30px}.fl-builder-block-details .fl-builder-node-template-delete,.fl-builder-block-details .fl-builder-node-template-edit{padding-top:0!important}.fl-builder-blocks-section-content .fl-builder-node-template-delete i,.fl-builder-blocks-section-content .fl-builder-node-template-edit i{margin:0}.fl-builder-blocks-section-content .fl-builder-node-template-delete:hover i,.fl-builder-blocks-section-content .fl-builder-node-template-edit:hover i{color:#444}.fl-builder-blocks-node-template .fl-builder-block:hover .fl-builder-node-template-actions{display:block}.ui-sortable-helper .fl-builder-node-template-delete,.ui-sortable-helper .fl-builder-node-template-edit{display:none!important}.fl-builder--tabs{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;position:relative;-ms-flex-pack:start;justify-content:flex-start;-ms-flex-align:center;align-items:center}.fl-builder-panel .fl-builder--panel-header{cursor:move}.fl-builder-panel .fl-builder--tabs{-ms-flex-pack:distribute;justify-content:space-around;padding:4px 24px;cursor:pointer}.fl-builder--tab-wrap{-ms-flex:1 1 100%;flex:1 1 100%;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:stretch;align-items:stretch;-ms-flex-pack:justify;justify-content:space-between;margin:auto;max-width:400px}.fl-builder--tabs button,.fl-builder--tabs button:active,.fl-builder--tabs button:focus,.fl-builder--tabs button:hover{-ms-flex:1 1 100%;flex:1 1 100%;display:inline-block;text-decoration:none;text-transform:none;color:inherit;text-align:center;letter-spacing:normal!important;margin:0;padding:5px;cursor:pointer;font-size:13px!important;font-weight:500!important;line-height:1.3!important;background:0 0!important;outline:0!important;border:2px solid transparent;border-radius:4px;min-height:36px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif!important;top:0;transition-property:background,color;transition-duration:.25s}.fl-builder--tabs button:focus{background:#e6eaed!important}.fl-builder--tabs button.is-showing{color:#0086b0}.fl-builder--panel-content{-ms-flex:1;flex:1}.fl-builder--panel-view{display:none;overflow:hidden}.fl-builder--panel-view.is-showing{display:block}.fl-builder--content-library-panel.ui-draggable-dragging{height:500px!important}.fl-builder--content-library-panel .fl-builder-drop-zone{display:none!important}.fl-builder--panel-header .fl-builder--tabs{cursor:move}.fl-builder--category-select{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;position:relative}.fl-builder--selector-display{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;position:relative;-ms-flex-pack:justify;justify-content:space-between;color:#161B20;background:url(../img/svg/select-arrow-down-alt2.svg) center right 10px no-repeat #fff!important;cursor:pointer;font-size:13px;font-weight:700;line-height:16px;border-radius:4px;-ms-flex-align:stretch;align-items:stretch}.fl-builder--selector-display-label{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:stretch;align-items:stretch;font-size:inherit;line-height:inherit;width:100%;margin:0!important;padding:0!important;color:#6D6D6D;background:0 0;border:2px solid transparent;box-shadow:0 1px 2px 0 rgba(0,0,0,.12)!important;border-radius:4px;font-family:inherit;text-transform:none}.fl-builder--selector-display-label:hover{top:0;color:inherit;background:0 0;border:2px solid transparent;border-radius:4px}.fl-builder--selector-display-label:active{top:0;color:inherit;background:0 0;border:2px solid #e4e7ea;border-radius:4px}.fl-builder--selector-display-label:focus{top:0;color:inherit;background:0 0;border:2px solid #00A0D2;outline:0}.fl-builder--group-label{color:inherit;-ms-flex:0 0 0%;flex:0 0 0%;padding:4px 12px 4px 10px;background:#e7ebef;border-radius:3px;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center}.fl-builder--current-view-name{-ms-flex:1 1 100%;flex:1 1 100%;color:inherit;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:600;padding:8px 10px;text-align:left}.fl-builder--selector-menu{display:none;color:#293138;position:absolute;top:46px;left:0;width:100%;background:#fff;border-radius:4px;box-shadow:0 0 20px 2px rgba(0,0,0,.2);overflow:visible;z-index:2}.fl-builder--selector-menu:before{bottom:100%;right:8px;content:" ";height:0;width:0;position:absolute;pointer-events:none;border:solid;border-color:rgba(255,255,255,0);border-bottom-color:#fff;border-width:10px;margin-left:-10px}.fl-builder--category-select.is-showing .fl-builder--selector-menu{display:-ms-flexbox;display:flex;max-height:calc(100vh - 150px)}.fl-builder--category-select.is-showing .fl-builder--selector-menu .fl-builder--menu{margin:10px 0;-ms-flex:1 100%;flex:1 100%;overflow:auto}button.fl-builder-button.fl-builder-bar-title-caret{margin:4px}button.fl-builder-button.fl-builder-bar-title-caret:focus{background-color:#e6eaed!important;border-color:transparent!important}.fl-builder--category-select.is-showing .fl-builder-bar-title-caret i{transform:rotate(180deg)}.fl-builder--menu{margin-bottom:2px}.fl-builder--menu>a,.fl-builder--menu>button,.fl-builder--menu>span{display:block;padding:8px 10px 10px;border-radius:4px;color:inherit;text-decoration:none;background:0 0!important;border:2px solid transparent!important;font-weight:400;font-family:inherit}.fl-builder--menu>a:active,.fl-builder--menu>a:focus,.fl-builder--menu>a:hover,.fl-builder--menu>button:active,.fl-builder--menu>button:focus,.fl-builder--menu>button:hover{background:#e6eaed!important;border:2px solid transparent!important;top:0}.fl-builder-block-drag-helper,.fl-builder-block.ui-draggable-dragging,.fl-builder-drop-zone,.fl-builder-empty{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif}.fl-builder--menu>a:focus,.fl-builder--menu>button:focus{outline:0;color:inherit;text-decoration:none}.fl-builder--menu .fl-has-children>svg{float:right;margin:0 7px 0 0;height:16px;width:9px;transition-property:transform;transition-duration:.15s;transform:rotate(-90deg)}.fl-builder--menu .fl-has-children.fl-has-children-showing>svg{transform:rotate(0)}.fl-builder--menu .fl-inset{display:none;padding-left:35px;font-size:14px;line-height:1.25}.fl-builder--menu a.fl-template-collection{color:#161B20}.fl-builder--menu>:after{clear:both}.fl-builder--menu * .fl-builder--menu-item-accessory{float:right;color:#000;text-transform:uppercase;text-align:center;min-width:20px;letter-spacing:2px}.fl-builder--menu * .fl-builder--menu-item-accessory i{font-size:1em;margin-top:2px}.fl-builder--menu .fl-builder-video-wrap iframe{display:block;margin:4px 0;width:100%}.fl-builder-publish-actions{display:-ms-flexbox;display:flex;box-sizing:border-box;position:absolute;top:0;right:0;width:380px;max-width:100%;height:44px;padding:4px 4px 4px 0;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:end;justify-content:flex-end;opacity:1;pointer-events:auto;transform:scaleX(1) translateX(0);transform-origin:right;transition-property:transform,opacity;transition-duration:.15s}.fl-builder-publish-actions.is-hidden{transform:scaleX(.23) translateX(68px);opacity:0;pointer-events:none}.fl-builder-bar .fl-builder-button-group{display:-ms-flexbox;display:flex;-ms-flex-preferred-size:100%;flex-basis:100%}.fl-builder-bar .fl-builder-button-group>.fl-builder-button{border-radius:0;margin-left:0;-ms-flex-preferred-size:100%;flex-basis:100%;text-align:center;-ms-flex-pack:distribute;justify-content:space-around;box-shadow:none}.fl-builder-bar .fl-builder-button-group>.fl-builder-button:first-child{margin-left:0;border-top-left-radius:3px;border-bottom-left-radius:3px}.fl-builder-bar .fl-builder-button-group>.fl-builder-button:last-child{border-top-right-radius:3px;border-bottom-right-radius:3px}.fl-builder-publish-actions-click-away-mask{display:none;position:fixed;top:0;left:0;right:0;height:100vh;background:0 0}.fl-builder-dragging .fl-builder-content:not(.fl-builder-empty){padding:16px 0}.fl-builder-empty{display:none;border:2px dashed #969696;border-radius:8px;color:#909090;font-size:20px;font-weight:700;margin:10px;padding:250px 20px;position:relative;text-align:center;text-transform:uppercase}.fl-builder-drop-zone,.fl-builder-has-submenu>ul.fl-builder-submenu li a{font-weight:400;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fl-builder-edit .fl-builder-empty{display:block}.fl-builder-block-drag-helper,.fl-builder-block.ui-draggable-dragging{background:rgba(255,255,255,.95)!important;border:2px solid #000;border-radius:4px;box-shadow:0 0 8px rgba(0,0,0,.2);-moz-box-shadow:0 0 8px rgba(0,0,0,.2);-webkit-box-shadow:0 0 8px rgba(0,0,0,.2);color:#333!important;font-size:13px!important;height:47px!important;line-height:40px!important;overflow:hidden;padding:0 20px;position:fixed!important;text-overflow:ellipsis;white-space:nowrap;width:180px!important;z-index:100010!important;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-line-pack:center;align-content:center;-ms-flex-pack:start;justify-content:flex-start}.fl-builder-block.fl-builder-block-drag-helper:hover{padding:0;box-shadow:none}.fl-builder-block-drag-helper:hover .fl-builder-block-content{position:static;padding:0 20px}.fl-col-has-highlight-guide .fl-col-content,.fl-col-highlight,.fl-row-highlight .fl-col-group{position:relative}.fl-builder-block-saved-column.fl-builder-block-drag-helper:hover .fl-builder-block-content,.fl-builder-block-saved-module.fl-builder-block-drag-helper:hover .fl-builder-block-content,.fl-builder-block-saved-row.fl-builder-block-drag-helper:hover .fl-builder-block-content{padding:14px 20px}.fl-builder-block-drag-helper .fl-builder-block-icon{fill:#000;margin-top:-10px}.fl-builder-drop-zone{animation:fl-builder-drop-zone-pulse 2s infinite;background:#00A2D7;border-radius:4px;color:#fff!important;display:block;font-size:12px;letter-spacing:1px;line-height:14px;margin:10px;padding:6px 8px 5px;position:relative;text-align:left;text-shadow:none;text-transform:none;z-index:10}@keyframes fl-builder-drop-zone-pulse{0%,100%{background-color:#00A2D7}50%{background-color:#79DEFF}}.fl-builder-drop-zone-global{animation:fl-builder-drop-zone-global-pulse 2s infinite;background:#ff9600}@keyframes fl-builder-drop-zone-global-pulse{0%,100%{background-color:#FFBC5C}50%{background-color:#ff9600}}.fl-builder-content>.fl-builder-drop-zone{margin:10px 20px}.fl-row-content>.fl-builder-drop-zone{margin:3px 7px}.fl-col-has-cols>.fl-col-content>.fl-builder-drop-zone{margin:3px 10px}.fl-sortable-disabled>.fl-builder-drop-zone{display:none!important}.fl-col-group-equal-height.fl-col-group-align-center .fl-col-content>.fl-builder-drop-zone{width:100%}.fl-row-highlight{padding:16px 0}.fl-row-highlight .fl-row-content{border:2px dashed rgba(203,205,206,.5);padding:8px;border-radius:6px}.fl-row-highlight.fl-node-global .fl-row-content{border-color:#ff9600}.fl-col-highlight{padding:8px}.fl-col-highlight .fl-col-content{border-style:dashed!important;border-color:#00a0d2!important;border-radius:4px;min-height:100px;overflow-x:hidden;border-width:2px!important}.fl-col-has-cols.fl-col-highlight>.fl-col-content{padding:8px}.fl-col-highlight.fl-node-global .fl-col-content{border-color:#ff9600!important}.fl-builder-simple .fl-col-highlight .fl-col-content{border:none!important}.fl-col-highlight-guide{background:rgba(0,160,210,.05);border:2px solid #00A0D2;border-radius:4px;bottom:4px;left:4px;position:absolute;right:4px;top:4px;z-index:1}.fl-node-global .fl-col-highlight-guide{border-color:#ff9600!important;background-color:rgba(255,150,0,.06)!important}.fl-col-has-highlight-guide .fl-block-overlay{background:0 0;border-color:transparent}.fl-col-has-highlight-guide .fl-block-col-resize{display:none}.fl-col-has-highlight-guide .fl-col-highlight .fl-col-content{border-color:transparent!important}.fl-col-drop-target{bottom:8px;display:none;left:-9px;position:absolute;top:8px;width:18px;z-index:1}.fl-col-highlight .fl-col-drop-target{display:block}.fl-col-drop-target-last{left:auto;right:-9px}.fl-col-drop-target .fl-builder-drop-zone{bottom:0;left:2px;margin:0;padding:0;position:absolute;right:2px;top:0}.fl-col-group-drop-target{display:none;left:8px;height:18px;position:absolute;right:8px;top:-9px;z-index:1}.fl-row-highlight .fl-col-group-drop-target{display:block}.fl-col-group-drop-target-last{top:auto;bottom:-9px}.fl-col-group-drop-target .fl-builder-drop-zone{bottom:2px;left:0;margin:0;padding:0;position:absolute;right:0;top:2px}.fl-row-content>.fl-col-group-drop-target{position:static}.fl-row-content>.fl-col-group-drop-target .fl-builder-drop-zone{height:18px;position:static}.fl-row-drop-target{display:none;left:0;height:24px;margin-top:-28px;position:absolute;right:0;z-index:1}.fl-row-highlight .fl-row-drop-target{display:block}.fl-row-drop-target-last{margin-top:4px}.fl-row .fl-row-drop-target .fl-builder-drop-zone{bottom:0;left:4px;margin:0;position:absolute;right:4px;top:0}.fl-builder-content>.fl-row-drop-target{margin:0;position:static}.fl-builder-dragging .fl-builder-content.fl-builder-empty>.fl-row-drop-target{bottom:10px;display:block;height:auto;left:0;position:absolute;right:0;top:10px}.fl-builder-content .fl-row-drop-target .fl-builder-drop-zone{margin-bottom:0;margin-top:0}.fl-col-group:focus,.fl-col:focus,.fl-module:focus,.fl-row:focus{outline:0}.fl-sortable-proxy{display:none}.fl-block-overlay,.fl-block-overlay *{text-shadow:none;-webkit-touch-callout:none;transition-property:border-color;transition-duration:.3s}.fl-block-overlay-active{position:relative}.fl-block-overlay-actions{background:#00A0D2;float:left;height:30px;margin:-1px -1px 0;padding:0 4px;text-shadow:none;border-bottom-right-radius:5px;border-top-left-radius:3px;transition-property:background-color;transition-duration:.3s}.fl-row-overlay-header-bottom .fl-block-overlay-actions{border-radius:0 5px 0 3px}.fl-builder-col-resizing .fl-block-overlay-actions,.fl-builder-row-resizing .fl-block-overlay-actions{overflow:hidden}.fl-block-overlay-actions>span{display:block;float:left}.fl-block-overlay-actions i{color:#fff!important;cursor:pointer;display:block!important;float:left;font-size:16px!important;height:28px!important;line-height:28px!important;opacity:.8;filter:alpha(opacity=80);text-align:center;width:32px!important}.fl-block-overlay-actions i:hover{opacity:1;filter:alpha(opacity=100)}.fl-block-overlay-actions>i:first-child{padding-left:4px}.fl-block-overlay-actions>i:last-child{padding-right:2px}.fl-block-overlay-actions .fl-block-move{cursor:move}.fl-block-has-rules{color:#00A0D2!important;cursor:pointer;padding:7px;position:absolute;right:0;top:0}.fl-block-overlay-title,.fl-builder-has-submenu>ul.fl-builder-submenu li a{color:#fff!important;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif}.fl-block-overlay-title{float:left;font-size:14px;height:30px;line-height:29px;margin-right:2px;padding:0 12px 0 8px}.fl-col-overlay,.fl-module-overlay,.fl-row-overlay{background:rgba(190,239,255,0);color:#fff}.fl-row-overlay{border:2px solid #00A0D2;border-radius:4px;bottom:0;box-sizing:border-box!important;-moz-box-sizing:border-box!important;-webkit-box-sizing:border-box!important;left:0;position:absolute;top:-33px;right:0;z-index:100006}.fl-row-overlay.fl-row-menu-active,.fl-row-overlay.fl-row-menu-active.fl-block-overlay.fl-block-overlay-global{z-index:100007}.fl-row-full-width .fl-row-overlay{left:2px;right:2px;bottom:2px}.fl-row-overlay-header-bottom{bottom:-32px!important;top:0}.fl-row-overlay-header-bottom .fl-block-overlay-header{position:absolute;bottom:0}.fl-block-overlay-active .fl-row-content-wrap{position:relative}.fl-block-overlay-active .fl-row-content{position:relative;z-index:100007!important}.fl-builder-row-resizing .fl-col.fl-block-overlay-active,.fl-builder-row-resizing .fl-module.fl-block-overlay-active{position:static}.fl-col-overlay{border:2px solid #00A0D2;border-radius:4px;bottom:8px;cursor:pointer;left:8px;position:absolute;right:8px;top:8px;z-index:100008}.fl-module-overlay{border:2px solid #00A0D2;border-radius:4px;bottom:4px;cursor:pointer;left:4px;min-height:32px;position:absolute;right:4px;top:4px;z-index:100007}.fl-builder-global-templates-locked .fl-block-overlay-global.fl-module-overlay{cursor:default}.fl-module-adjust-height{padding-bottom:15px;padding-top:15px}.fl-col-bg-overlay .fl-block-overlay-active.fl-module{z-index:100008}.fl-block-overlay-global{background:rgba(255,150,0,0);border:2px solid #F7A407;border-radius:4px}.fl-block-overlay-global .fl-block-overlay-actions{background:#F7A407}.fl-block-overlay-title-global{background:#fff;color:#ff9600!important;font-size:11px;letter-spacing:1px;margin-left:4px;padding:2px 4px;vertical-align:top}.fl-block-overlay-global.fl-row-overlay{background:rgba(255,150,0,0);cursor:pointer;z-index:100007}.fl-builder-global-templates-locked .fl-block-overlay-global.fl-row-overlay{cursor:default}.fl-builder-row-template .fl-block-overlay-global.fl-row-overlay{background:rgba(255,150,0,0);cursor:default;z-index:100006}.fl-block-overlay-global.fl-row-overlay .fl-block-col-resize{display:none}.fl-block-overlay-muted .fl-row-overlay{background:rgba(85,93,102,0);border:2px solid #555D66}.fl-block-overlay-muted .fl-row-overlay .fl-block-overlay-actions{background:#555D66}.fl-block-overlay-muted .fl-row-overlay .fl-block-has-rules{color:#555D66!important}.fl-block-overlay-muted .fl-row-overlay .fl-block-col-resize{display:none}.fl-node-disabled .fl-row-content-wrap,.fl-node-disabled>.fl-col-content{opacity:.3}.fl-block-col-resize{bottom:0!important;position:absolute;top:0!important;width:6px}.fl-block-col-resize-e{cursor:ew-resize;left:auto!important;right:-2px!important}.fl-block-col-resize-w{cursor:ew-resize;left:-7px!important}.fl-block-col-resize-handle-wrap{margin:-4px 0 0 -5px;padding:0 5px;position:absolute;top:50%!important}.fl-block-col-resize-e .fl-block-col-resize-handle-wrap{margin-left:-6px}.fl-block-col-resize-handle{background:#fff;border:2px solid #00A0D2;border-radius:50%;height:12px;width:12px}.fl-node-global .fl-block-col-resize-handle{border-color:#ff9600}.fl-block-col-resize-feedback{color:#333!important;display:none;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:11px!important;position:absolute}.fl-block-col-resize-feedback-left,.fl-block-col-resize-feedback-right{background:#fff;border:1px solid #3ba0ff;padding:2px 4px}.fl-block-col-resize-feedback-left{right:20px;top:-7px}.fl-block-col-resize-feedback-right{left:20px;top:-7px}.fl-builder-has-submenu{position:relative}.fl-builder-has-submenu>ul.fl-builder-submenu{background:#00A0D2;box-shadow:0 0 20px rgba(0,0,0,.2);border-radius:0 4px 4px;display:none;left:0;list-style:none;margin:0;padding:6px 0;position:absolute;text-align:left;top:100%;width:165px;z-index:100008}.fl-builder-has-submenu>ul.fl-builder-submenu li{list-style:none;margin:0;padding:0}.fl-builder-submenu-right ul.fl-builder-submenu{left:auto;right:0}.fl-builder-has-submenu.fl-builder-submenu-open>ul.fl-builder-submenu{display:block}.fl-builder-has-submenu>ul.fl-builder-submenu li a{border-bottom:0 none;box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none;display:block;line-height:13px;font-size:13px;opacity:.8;filter:alpha(opacity=80);padding:6px 12px;text-decoration:none}.fl-builder-has-submenu>ul.fl-builder-submenu li a:hover{background:#0197C6;color:#fff;opacity:1;filter:alpha(opacity=100);text-decoration:none}.fl-builder-actions-title,.fl-builder-alert-lightbox .fl-lightbox-message,.fl-builder-alert-lightbox .fl-lightbox-message-info{color:#333!important;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px!important}.fl-builder-has-submenu .fl-builder-submenu .fa,.fl-builder-has-submenu .fl-builder-submenu .far,.fl-builder-has-submenu .fl-builder-submenu .fas{float:right;height:12px!important;line-height:12px!important;position:relative;right:-5px;width:14px!important}.fl-builder-has-submenu .fl-builder-has-submenu .fl-builder-submenu{display:none;left:100%;top:0}.fl-builder-has-submenu .fl-builder-submenu-right.fl-builder-has-submenu .fl-builder-submenu{left:auto;right:100%}.fl-builder-has-submenu .fl-builder-has-submenu:hover .fl-builder-submenu{display:block}.fl-builder-submenu-sep{padding:7px 0!important}.fl-builder-submenu-sep div{border-bottom:1px solid rgba(255,255,255,.4)}.fl-block-col-move,.fl-block-col-move-parent{cursor:move;position:relative}.fl-builder-submenu .fa-arrows-alt{cursor:move;display:none!important}.fl-builder-submenu a:hover .fa-arrows-alt{display:block!important;float:right;line-height:12px!important;height:12px!important}.fl-block-overlay-global ul.fl-builder-submenu{background:#ff9600!important}.fl-block-overlay-global ul.fl-builder-submenu li a:hover{background:#fa3}.fl-builder-actions-lightbox .fl-lightbox{display:block;width:300px;border-radius:4px}.fl-builder-actions-lightbox .fl-lightbox-content-wrap{display:block}.fl-builder-actions-lightbox .fl-builder-actions{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding:25px;text-align:center}.fl-builder-actions-title{display:block;margin-bottom:20px}.fl-builder-actions .fl-builder-button{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:7px;min-height:36px}.fl-builder-alert-lightbox{padding:20px;z-index:30000000;top:0;pointer-events:auto}.fl-builder-alert-lightbox .fl-lightbox{max-width:440px;width:auto}.fl-builder-alert-lightbox .fl-lightbox-content-wrap{display:block}.fl-builder-alert-lightbox .fl-lightbox-message,.fl-builder-alert-lightbox .fl-lightbox-message-info{line-height:24px;padding:30px}.fl-builder-alert-lightbox.fl-builder-crash-lightbox .fl-lightbox{max-width:60%}.fl-lightbox-width-slim .fl-compound-field,.fl-lightbox-width-slim .fl-dimension-field-units{max-width:none}.fl-builder-alert-lightbox.fl-builder-crash-lightbox .fl-lightbox-content{padding:20px}.fl-builder-alert-lightbox.fl-builder-crash-lightbox .fl-lightbox-message{padding:10px 20px}.fl-builder-alert-lightbox.fl-builder-crash-lightbox .fl-lightbox-message h1{font-size:20px}.fl-builder-alert-lightbox.fl-builder-crash-lightbox .fl-lightbox-message p{font-size:14px;padding-top:5px}.fl-builder-alert-lightbox.fl-builder-crash-lightbox .link{color:#428bca;text-decoration:underline}.fl-builder-alert-lightbox .fl-lightbox-message-info{padding:0 20px;font-size:14px!important}.fl-builder-alert-lightbox .fl-lightbox-message-info p{line-height:20px;padding:10px 0 0 10px}.fl-builder-alert-lightbox .fl-lightbox-message-info a{font-size:14px}@keyframes fl-builder-content-section-entry{from{transform:translateY(150px) translateX(100px) scale(.3);opacity:0}to{transform:translateY(0) translateX(0) scale(1);opacity:1}}.fl-template-category-select{width:180px!important}.fl-template-selector .fl-builder-settings-section{margin:0 0 10px}.fl-template-selector .fl-builder-settings-fields{height:470px}.fl-template-selector .fl-builder-settings-tab{width:560px}.fl-template-selector .fl-builder-settings-tab-description{font-size:15px!important;margin:0!important;padding:10px 0 25px;text-align:center}.fl-template-preview{float:left;margin:0 25px 30px 0;position:relative;text-align:center;width:170px}.fl-template-preview.fl-last{margin-right:0}.fl-template-image{border:1px solid #d9d9d9;cursor:pointer;margin-bottom:12px;height:164px;overflow:hidden}.fl-template-image:hover{border-color:red}.fl-template-image img{max-height:none;width:100%}.fl-template-preview span{display:block;text-align:center}.fl-user-template-category-name{background:#f2f2f2;border-bottom:3px solid #dfdfdf;border-top:2px solid #dfdfdf;font-weight:700;padding:8px 15px}.fl-user-templates{border-bottom:1px solid #dfdfdf;padding:10px 0 20px}.fl-builder--user-templates-section-content{border-bottom:2px solid #e6eaed;padding:10px}.fl-builder--user-templates-section-content:first-child{padding-top:0}.fl-builder--user-templates-section-content:last-child,.fl-user-templates:last-child{border-bottom:none}.fl-builder--user-templates-section-name{font-weight:700;font-size:16px;color:#333;z-index:9999;padding:15px 10px;margin:0 10px}@keyframes fl-list-item-entry{from{opacity:0;transform:scale(.5) translateY(100px)}to{opacity:1;transform:scale(1) translateY(0)}}.fl-builder--save-new-user-template,.fl-user-template{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-radius:4px;font-size:16px;font-weight:200;line-height:1.1;padding:10px 20px;color:#6d6d6d}.fl-user-template:hover{cursor:pointer;background:#fff;box-shadow:0 6px 20px rgba(0,0,0,.08);text-decoration:none;color:#111;padding-right:68px}.fl-user-template-name{overflow:hidden;text-overflow:ellipsis;-ms-flex:1;flex:1}.fl-user-template-actions{display:none;bottom:0;position:absolute;right:0;top:0}.fl-user-template:hover .fl-user-template-actions{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center}.fl-user-template-actions a{display:inline-block;padding:15px 0;width:30px}.fl-user-template:hover a:hover i{color:#444!important}.fl-user-templates-message{display:none}.fl-user-template-thumbnail{-ms-flex:0;flex:0;margin-right:20px}.fl-user-template-thumbnail .fl-builder--template-thumbnail{background-size:cover;background-position:center top;width:45px}.fl-user-template-thumbnail .fl-builder--template-thumbnail:hover{box-shadow:none;transform:scale(1);transition-property:none}.fl-builder--save-new-user-template .fl-user-template-thumbnail .fl-builder--template-thumbnail{border-style:dashed;border-width:2px;border-color:#ccd4da}.fl-builder--save-new-user-template .fl-save-control{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex:1;flex:1}.fl-builder--save-new-user-template .fl-save-control input{background:0 0;border:none!important;-ms-flex:1;flex:1;font-size:16px;margin-right:10px;margin-left:-12px;color:#000}.fl-builder--save-new-user-template .fl-save-control input::-webkit-input-placeholder{color:#777}.fl-builder--save-new-user-template .fl-save-control input::-moz-placeholder{color:#777}.fl-builder--save-new-user-template .fl-save-control input:-ms-input-placeholder{color:#777}.fl-builder--save-new-user-template .fl-save-control input:-moz-placeholder{color:#777}@keyframes fl-slide-in-right{from{transform:translateX(50px)}to{transform:translateX(0)}}.fl-builder--save-new-user-template .fl-save-control button{display:none;animation-name:fl-slide-in-right;animation-duration:.25s;background-color:#00a0d2;border:none;padding:0 15px}.fl-save-control-mask{display:none;background:0 0;position:absolute;top:-50px;left:0;bottom:0;right:0;z-index:-1;min-height:80vh}.fl-builder-templates-cta{margin-bottom:20px}.fl-builder-templates-cta p{display:inline-block!important;width:75%!important;font-size:14px!important;line-height:1.5!important;margin-bottom:0!important}.fl-builder-templates-cta .fl-builder-upgrade-button{font-size:13px!important;line-height:13px!important;position:relative;top:8px;left:15px;padding:1px 12px}.fl-builder-settings-message,.fl-builder-settings-message *{font-size:15px!important;line-height:23px!important}.single-fl-builder-template .fl-content{width:100%!important}form.fl-builder-settings{height:100%;margin:0;padding:0;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.fl-builder-settings-message{padding:20px 25px!important;background:#f2f2f2!important}.fl-builder-preview-loader{position:relative;top:-2px;margin-left:3px}.fl-lightbox-header .fl-builder-preview-loader{margin:0;position:absolute;right:40px;top:15px}@keyframes fl-grab-attention{0%,100%{transform:scale(1)}50%{transform:scale(1.05)}}.fl-lightbox-width-slim .fl-form-table{margin:10px 12px 10px 10px!important;width:calc(100% - 40px)}.fl-lightbox-width-slim .fl-form-table th{display:block;position:relative;padding:10px 0 0 12px!important;width:auto!important}.fl-lightbox-width-slim .fl-form-table td{display:block}.fl-lightbox-width-slim .fl-form-table .fl-field[data-type=editor] td:first-child,.fl-lightbox-width-slim .fl-form-table td:first-child{padding-left:0!important}.fl-field-label .fl-field-responsive-toggle,.fl-lightbox-width-slim .fl-field-control-wrapper .fl-field-responsive-toggle{display:none}.fl-lightbox-width-slim .fl-field-label .fl-field-responsive-toggle{display:inline-block;padding:0 5px!important}.fl-lightbox-width-slim input.text-full+.fl-field-description,.fl-lightbox-width-slim select+.fl-field-description{display:block;padding:8px 10px;margin:0}.fl-lightbox-width-slim .fl-builder-settings-fields select{width:100%}.fl-lightbox-width-slim .fl-color-picker{display:-ms-flexbox;display:flex;width:auto}.fl-lightbox-width-slim .fl-color-picker-clear{-ms-flex:0 0 40px;flex:0 0 40px}.fl-lightbox-width-slim .fl-field[data-type=dimension] .fl-field-responsive-setting{width:100%}.fl-lightbox-width-slim .fl-dimension-field-unit-select select{width:auto!important}.fl-lightbox-width-slim .fl-gradient-picker-color-row{width:50%}.fl-lightbox-width-slim .fl-color-picker.fl-gradient-picker-color,.fl-lightbox-width-slim .fl-typography-field-align .fl-button-group-field-option{width:100%}.fl-lightbox-width-slim .fl-typography-field-align .fl-button-group-field-options{float:none}.fl-lightbox-width-slim .mce-menubtn.mce-fixed-width button{width:72px!important}.fl-lightbox-width-slim .fl-builder-settings-tab-description{margin:20px 10px}.fl-lightbox-width-micro .mce-menubtn.mce-fixed-width button{width:38px!important}.fl-lightbox-width-micro .mce-btn[aria-label=Fullscreen],.fl-lightbox-width-micro .mce-btn[aria-label=Blockquote]{display:none}.fl-lightbox-width-micro .mce-toolbar i.mce-ico{width:18px}.fl-lightbox-width-slim .fl-field[data-type=editor] .fl-field-control-wrapper,.fl-lightbox-width-slim .fl-field[data-type=code] .fl-field-control-wrapper{margin-left:-10px;margin-right:-30px}.fl-lightbox .wp-editor-tools{padding-left:6px;padding-right:28px}.fl-lightbox .mce-top-part::before{box-shadow:none!important}.mce-container .mce-stack-layout span{color:initial}.fl-lightbox div.mce-toolbar-grp{background:0 0;border:none}.fl-lightbox div.mce-toolbar-grp>div{padding:0 3px}.fl-lightbox .fl-builder-settings .wp-switch-editor{background:#e7ebef;border:1px solid transparent}.fl-lightbox .html-active .switch-html,.fl-lightbox .quicktags-toolbar,.fl-lightbox .tmce-active .switch-tmce{background:#fff}.fl-lightbox .quicktags-toolbar,.fl-lightbox .wp-editor-container{border:none}.fl-lightbox .mce-toolbar .mce-container-body{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.fl-lightbox-width-slim .mce-toolbar .mce-container-body{-ms-flex-pack:center;justify-content:center}.fl-lightbox textarea.wp-editor-area{line-height:1.5;padding:20px;width:calc(100% - 10px)}.fl-lightbox .wp-core-ui .button,.fl-lightbox .wp-core-ui .button-secondary{border:none;box-shadow:none;background:#e7ebef}.fl-lightbox-width-slim .fl-shadow-field .fl-dimension-field-units{width:auto}.fl-lightbox-width-slim .fl-shadow-field .fl-dimension-field-units input{max-width:none;width:100%!important}.fl-lightbox-width-slim .fl-builder-field-multiple{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;position:relative}.fl-lightbox-width-slim .fl-builder-field-multiple .fl-field-control,.fl-lightbox-width-slim .fl-builder-field-multiple .fl-field-label{width:100%!important}.fl-lightbox-width-slim .fl-builder-field-multiple .fl-form-field-preview-text{max-width:225px}.fl-lightbox-width-slim .fl-builder-field-multiple .fl-builder-field-actions{position:absolute!important;top:0;right:0;width:70px;z-index:1}.fl-lightbox-width-slim .fl-builder-field-actions-single .fl-builder-field-copy{float:right!important;margin-right:5px}.fl-lightbox-width-slim .fl-field[data-type=time] select{width:auto}.fl-builder-settings-tabs{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:stretch;align-items:stretch;overflow:hidden;height:32px;background:#e7ebef}.fl-builder-content-group-select{padding:0 10px 6px;display:none}.fl-builder-content-group-select select{display:block;width:100%;-webkit-appearance:none;-moz-appearance:none;box-sizing:border-box;padding:8px 10px;background:url(../img/svg/select-arrow-down-alt2.svg) center right 10px no-repeat #fff!important;border:2px solid #e4e7ea;color:#161B20}select:focus{border-width:2px!important;border-style:solid!important;border-color:#00a0d2!important;outline:0!important}.fl-legacy-settings-tab{background:url(../img/ajax-loader.svg) center center no-repeat;height:100px}.fl-builder-settings-tab:first-child .fl-legacy-settings-tab{background:0 0;height:auto}body .fl-builder-settings-tabs>*{box-sizing:border-box;color:#676F7A!important;fill:#676F7A!important;background:0 0;border:2px solid transparent;border-radius:0;margin:0;outline:0;padding:1px 16px;text-decoration:none!important;font-size:13px;font-weight:400!important;-ms-flex:0 0 auto;flex:0 0 auto;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}body .fl-lightbox-width-slim .fl-builder-settings-tabs>*{-ms-flex:1 1 auto;flex:1 1 auto}body .fl-builder-settings-tabs>.fl-builder-settings-tabs-more{-ms-flex:0 0 60px;flex:0 0 60px;display:none;margin-left:auto;-ms-flex-pack:center;justify-content:center}.fl-builder-settings-tabs-more svg{width:16px;height:auto;margin:auto}.fl-builder-settings-tabs-more g,.fl-builder-settings-tabs-more path,.fl-builder-settings-tabs-more svg{fill:inherit}body .fl-lightbox-has-tab-overflow .fl-builder-settings-tabs-more{display:-ms-flexbox;display:flex}.fl-builder-settings-tabs>:active,.fl-builder-settings-tabs>:hover{top:0;color:#333;background:0 0;border:2px solid transparent}.fl-builder-settings-tabs>:focus{top:0;outline:0;border:2px solid transparent;background:0 0;color:#0086b0;fill:#0086b0}.fl-builder-settings-tabs .fl-active,.fl-builder-settings-tabs-more.fl-contains-active,.fl-builder-settings-tabs-overflow-menu .fl-active{color:#0086b0!important;fill:#0086b0!important;position:relative;background:#fff}.fl-builder-settings-tabs .fl-active.fl-overflowed,.fl-builder-settings-tabs .fl-overflowed{display:none!important}.fl-builder-settings-tabs .error{color:#d03436;padding-right:10px}.fl-builder-settings-tabs .error .fl-error-icon,.fl-builder-settings-tabs-overflow-menu .error .fl-error-icon{background:url(../img/sprite.png) -148px -5px no-repeat;display:inline-block;height:16px;margin-left:7px;position:relative;top:3px;width:16px}.fl-builder-settings-tabs-more.fl-contains-errors{fill:#d03436!important}.fl-builder-settings-tab{display:none;width:auto!important}.fl-builder-settings-tab.fl-active{display:block}.fl-builder-settings-tab-description{background:#e4e7ea;padding:10px 15px;border-radius:4px;margin:20px}.fl-builder-settings-tab-description a{text-decoration:underline!important}.fl-builder-settings-tab-description a:hover{color:#333}.fl-builder-settings-tabs-overflow-menu{display:none;position:absolute;left:0;right:0;border:2px solid #e6eaed;border-top:3px solid #00a0d2;border-radius:4px;background:#fff;z-index:9999;margin:0 6px;padding:10px;-ms-flex-direction:column;flex-direction:column;box-shadow:0 0 20px 2px rgba(0,0,0,.2)}.fl-builder-settings-tabs-overflow-menu:before{bottom:100%;right:20px;content:" ";height:0;width:0;position:absolute;pointer-events:none;border:solid;border-color:rgba(255,255,255,0);border-bottom-color:#00a0d2;border-width:10px;margin-left:-10px}.fl-builder-settings-tabs-overflow-menu>a{display:block;padding:10px 15px;font-size:14px;font-weight:600!important;border:2px solid transparent;border-radius:4px;outline:0}.fl-builder-settings-tabs-overflow-menu>a:hover{background:#e6eaed;text-decoration:none}.fl-builder-settings-tabs-overflow-click-mask{display:none;position:fixed;top:0;bottom:0;left:0;right:0;background:0 0;z-index:11}.fl-form-table{background:none;border:none;width:calc(100% - 35px)}.fl-form-table tbody{border:none}.fl-form-table tr,.fl-form-table tr:nth-child(even){background:0 0}.fl-form-table td,.fl-form-table th{background:0 0!important;border:none!important;font-weight:400!important;text-align:left!important}.fl-form-table th{padding:10px 15px 10px 30px!important;vertical-align:top!important;width:200px!important}.fl-form-table td:first-child{padding-left:30px!important}.fl-form-table th label{color:#333;width:auto;max-width:100%}.fl-form-table th label i{color:grey}.fl-form-table th label i:hover{color:#555}.fl-form-table td{padding:8px 10px}.fl-lightbox-width-slim .fl-form-table td{padding:4px 0 5px}.fl-builder-settings-fields{margin:0;overflow:hidden;position:relative;-ms-flex:1 100%;flex:1 100%;visibility:hidden}.fl-lightbox-header .fl-builder-settings-fields{height:auto;margin:0;position:absolute;right:10px;top:10px}.fl-builder-settings-fields .fl-nanoscroller-content{padding:4px 0 0}.fl-builder-settings-fields .fl-field-control-wrapper{position:relative}.fl-field{animation-duration:.25s;animation-delay:.1s}.fl-builder-settings-fields input[type=date],.fl-builder-settings-fields input[type=email],.fl-builder-settings-fields input[type=file],.fl-builder-settings-fields input[type=number],.fl-builder-settings-fields input[type=password],.fl-builder-settings-fields input[type=search],.fl-builder-settings-fields input[type=tel],.fl-builder-settings-fields input[type=text],.fl-builder-settings-fields input[type=url],.fl-builder-settings-fields select,.fl-builder-settings-fields textarea{background:#fff!important;border-color:transparent!important;border-style:solid;border-width:2px;border-radius:4px!important;box-shadow:0 2px 4px 0 rgba(0,0,0,.12);color:#333!important;display:inline;font-size:13px;height:auto;line-height:15px;margin:1px;outline:0;padding:3px 6px;width:auto;box-sizing:border-box}i.fl-dimension-field-link,i.fl-field-responsive-toggle{line-height:18px!important;cursor:pointer;vertical-align:middle}.fl-builder-settings-fields input[type=date],.fl-builder-settings-fields input[type=email],.fl-builder-settings-fields input[type=file],.fl-builder-settings-fields input[type=number],.fl-builder-settings-fields input[type=password],.fl-builder-settings-fields input[type=search],.fl-builder-settings-fields input[type=tel],.fl-builder-settings-fields input[type=text],.fl-builder-settings-fields input[type=url],.fl-builder-settings-fields select:not(multiple){height:36px!important}.fl-builder-settings-fields select,.fl-builder-settings-fields select[multiple]{height:auto!important}.fl-builder-settings-fields input[type=number]{width:70px}.fl-builder-lightbox .fl-builder-settings-fields input[type=date]:focus,.fl-builder-lightbox .fl-builder-settings-fields input[type=email]:focus,.fl-builder-lightbox .fl-builder-settings-fields input[type=file]:focus,.fl-builder-lightbox .fl-builder-settings-fields input[type=number]:focus,.fl-builder-lightbox .fl-builder-settings-fields input[type=password]:focus,.fl-builder-lightbox .fl-builder-settings-fields input[type=search]:focus,.fl-builder-lightbox .fl-builder-settings-fields input[type=tel]:focus,.fl-builder-lightbox .fl-builder-settings-fields input[type=text]:focus,.fl-builder-lightbox .fl-builder-settings-fields input[type=url]:focus,.fl-builder-lightbox .fl-builder-settings-fields select:focus,.fl-builder-lightbox .fl-builder-settings-fields textarea:not(.wp-editor-area):focus{border-width:2px!important;border-style:solid!important;border-color:#00a0d2!important;box-shadow:0 2px 4px 0 rgba(0,0,0,.12)!important}.fl-builder-settings-fields ::-webkit-input-placeholder{color:#999!important;font-size:13px}.fl-builder-settings-fields input:-moz-placeholder{color:#999;font-size:13px}.fl-builder-settings-fields ::-moz-placeholder{color:#999!important;font-size:13px}.fl-builder-settings-fields input:-ms-input-placeholder{color:#999;font-size:13px}.fl-builder-settings-fields label{display:inline-block;font-weight:400;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;margin-bottom:3px;font-size:12px}.fl-builder-settings-fields select{-webkit-appearance:none;-moz-appearance:none;box-sizing:border-box;color:#000;margin:0 0 2px;padding:2px 10px;padding-right:30px!important;background:url(../img/svg/select-arrow-down-alt2.svg) center right 10px no-repeat #fff!important}.fl-dimension-field-unit input[type=number],.fl-unit-field-inputs input[type=number]{-moz-appearance:textfield}.fl-builder-settings-fields select[multiple]{height:60px;background-image:none!important}.fl-builder-custom-field select,.fl-photo-field select{box-shadow:none;border-color:#e6eaed!important}.fl-builder-settings-section:first-child{border-top:none!important}.fl-builder-settings-section-header{background-color:#e7ebef;border-top:4px solid #e7ebef;cursor:pointer;height:30px;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.fl-builder-settings-description{padding:0 10px 10px;margin:0;font-style:italic;opacity:.75}.fl-builder-settings-fields table{margin:20px 0}.fl-builder-settings-fields .fl-builder-settings-title{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;background:#F5F7F9;color:#353535;padding:2px 10px;margin:0;font-size:13px!important;font-weight:400;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:2px solid transparent;border-radius:0}.fl-builder-settings-fields .fl-builder-settings-title:active,.fl-builder-settings-fields .fl-builder-settings-title:hover{top:0}.fl-builder-settings-fields .fl-builder-settings-title:focus{top:0;border-color:#e0e4ea}.fl-builder-settings-fields .fl-builder-settings-title>svg{height:6px;width:9px;margin-right:7px;transition-property:transform;transition-duration:.15s}.fl-builder-settings-section-collapsed{margin-bottom:4px}.fl-builder-settings-section-collapsed .fl-builder-settings-section-content{display:none}.fl-builder-settings-section-collapsed .fl-builder-settings-title{background:0 0;-ms-flex:1 1 100%;flex:1 1 100%}.fl-builder-settings-section-collapsed .fl-builder-settings-title>svg{transform:rotate(-90deg)}.wp-core-ui h1,.wp-core-ui h2,.wp-core-ui h3,.wp-core-ui h4,.wp-core-ui h5,.wp-core-ui h6,.wp-core-ui p{color:#333;font-family:inherit}.wp-core-ui #media-attachment-date-filters{width:275px}.wp-core-ui input[type=search]::-webkit-input-placeholder{color:#333}.wp-core-ui input[type=search]:-ms-input-placeholder{color:#333}.wp-core-ui input[type=search]::-ms-input-placeholder{color:#333}.wp-core-ui input[type=search]::placeholder{color:#333}.wp-core-ui .submitbox .submitdelete{color:#a00}.wp-core-ui button{font-weight:400}.wp-core-ui input[type=date],.wp-core-ui input[type=email],.wp-core-ui input[type=file],.wp-core-ui input[type=number],.wp-core-ui input[type=password],.wp-core-ui input[type=search],.wp-core-ui input[type=tel],.wp-core-ui input[type=text],.wp-core-ui input[type=url],.wp-core-ui select,.wp-core-ui textarea{background-color:#fff;border-color:#dfdfdf;border-style:solid;border-width:1px;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none;color:#333;font-weight:400}.wp-core-ui input[type=date]:focus,.wp-core-ui input[type=email]:focus,.wp-core-ui input[type=file]:focus,.wp-core-ui input[type=number]:focus,.wp-core-ui input[type=password]:focus,.wp-core-ui input[type=search]:focus,.wp-core-ui input[type=tel]:focus,.wp-core-ui input[type=text]:focus,.wp-core-ui input[type=url]:focus,.wp-core-ui select:focus,.wp-core-ui textarea:focus{background:0 0;border-color:#aaa}.wp-core-ui input[type=search]{background-image:none;padding:6px}.fl-field-responsive-setting{display:inline-block;width:100%}.fl-field-responsive-setting-medium,.fl-field-responsive-setting-responsive{display:none}.fl-field-control-wrapper i.fl-field-responsive-toggle{padding:9px 0 0;position:absolute;left:-25px}i.fl-field-responsive-toggle{color:grey;display:inline-block;font-size:15px!important;height:auto;text-align:left;width:20px}.fl-builder-settings-fields input.text-full,.fl-builder-settings-fields textarea{width:100%}i.fl-field-responsive-toggle:hover{color:#000}.fl-builder-settings-fields .fl-text-field-add-value{min-width:50%;margin-top:.62em}.fl-field[data-type=shadow] .fl-field-control-wrapper{display:-ms-flexbox;display:flex}.fl-shadow-field .fl-color-picker{margin-bottom:15px;width:100%}.fl-color-picker{cursor:pointer}.fl-color-picker .fl-color-picker-clear{box-sizing:border-box;display:inline-block}.fl-color-picker .fl-color-picker-clear:hover{background-color:#ededed}.colorpicker input{padding:0!important;font-size:11px!important;color:#fff!important;width:29px!important;height:auto!important;background:0 0!important;border:none!important}.colorpicker .colorpicker_hex input{width:45px!important}.fl-gradient-picker-type{display:-ms-flexbox;display:flex;margin-bottom:15px}.fl-gradient-picker-type input{margin:0!important}.fl-gradient-picker-type select{margin-bottom:0!important}.fl-gradient-picker-type-select{margin-right:10px!important}.fl-gradient-picker-colors{display:-ms-flexbox;display:flex}.fl-gradient-picker-color-row{display:-ms-flexbox;display:flex;margin-right:15px}.fl-color-picker.fl-gradient-picker-color,.fl-gradient-picker-color-row:last-child{margin-right:0}.fl-color-picker.fl-gradient-picker-color .fl-color-picker-color{border-top-right-radius:0!important;border-bottom-right-radius:0!important}.fl-gradient-picker .fl-gradient-picker-stop input{border-top-left-radius:0!important;border-bottom-left-radius:0!important;margin:0!important}.fl-field[data-type=dimension] .fl-field-label label{padding-right:35px}.fl-field[data-type=dimension] .fl-field-control-wrapper{display:-ms-flexbox;display:flex}.fl-field[data-type=dimension] .fl-field-description{padding:9px 0 0 5px}.fl-field[data-type=dimension] .fl-field-responsive-setting{width:auto}.fl-dimension-field-units{border-radius:4px;box-shadow:0 2px 4px 0 rgba(0,0,0,.12);display:-ms-flexbox;display:flex;height:36px;margin:1px 1px 20px;position:relative;max-width:350px}.fl-dimension-field-units>*{border-right:1px solid #e6eaed;width:100%}body .fl-dimension-field-units>:last-child{border-right:none!important}body .fl-dimension-field-units>:first-child>input[type]{border-top-left-radius:4px!important;border-bottom-left-radius:4px!important}body .fl-dimension-field-units>:last-child>*{border-top-right-radius:4px!important;border-bottom-right-radius:4px!important}.fl-dimension-field-unit input[type],.fl-dimension-field-units .fl-field-unit-select{box-shadow:none!important;margin:0!important;border-radius:0!important}.fl-dimension-field-unit input{width:100%!important}.fl-dimension-field-unit input::-webkit-inner-spin-button,.fl-dimension-field-unit input::-webkit-outer-spin-button{-webkit-appearance:none}.fl-dimension-field-unit label{padding:5px 0 0;font-size:11px;font-weight:700;color:inherit!important;display:block;text-align:center;opacity:.5}.fl-dimension-field-unit .fl-field-popup-slider{margin-top:27px}i.fl-dimension-field-link{color:grey;font-size:15px!important;height:auto;text-align:left;width:20px}i.fl-dimension-field-link:hover{color:#000}i.fl-dimension-field-link.dashicons-editor-unlink,i.fl-dimension-field-link.dashicons-editor-unlink:hover{color:#0086b0}.fl-field-label .fl-dimension-field-link,.fl-lightbox-width-slim .fl-dimension-field-link{display:none}.fl-lightbox-width-slim .fl-field-label .fl-dimension-field-link{display:inline-block}.fl-field-control-wrapper .fl-dimension-field-link{padding:9px 0 0;left:-50px;position:absolute}.fl-dimension-field-unit-select{display:-ms-flexbox;display:flex;width:auto!important}.fl-field[data-type=unit] .fl-field-control-wrapper{display:-ms-flexbox;display:flex}.fl-field[data-type=unit] .fl-field-description{margin-left:7px!important;padding-top:9px}.fl-field[data-type=unit] .fl-field-responsive-setting{width:auto}.fl-unit-field-inputs{background:0 0;border-radius:4px;box-shadow:0 2px 4px 0 rgba(0,0,0,.12);display:-ms-flexbox;display:flex}.fl-unit-field-inputs .fl-field-unit-select,.fl-unit-field-inputs input[type]{box-shadow:none!important;margin:0!important;border-top-right-radius:0!important;border-bottom-right-radius:0!important}.fl-unit-field-inputs .fl-field-unit-select{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center}.fl-unit-field-inputs input::-webkit-inner-spin-button,.fl-unit-field-inputs input::-webkit-outer-spin-button{-webkit-appearance:none}.fl-unit-field-input{border-right:1px solid #e6eaed!important}body .fl-unit-field-input:last-child{border-right:none!important}body .fl-unit-field-input:last-child>*{border-top-right-radius:4px!important;border-bottom-right-radius:4px!important}.fl-unit-field-unit-select{display:-ms-flexbox;display:flex;width:auto!important}select.fl-field-unit-select{background-color:#E7EBEF!important;border-top-left-radius:0!important;border-bottom-left-radius:0!important}div.fl-field-unit-select{background-color:#E7EBEF!important;padding:9px 7px!important;width:100%}.fl-field-popup-slider{background:#fff;border-radius:4px;box-shadow:0 4px 25px 0 rgba(0,0,0,.18);display:none;margin-top:10px;padding:15px;position:absolute;left:0;right:0;z-index:9999}.fl-field-popup-slider-top{margin-top:0!important;top:-100%;transform:translateY(-10px)}.fl-field-popup-slider-input{background:#E7EBEF;cursor:pointer;height:4px;text-align:left;position:relative;border-radius:3px}.fl-field-popup-slider-input .ui-slider-handle{background:#fff;border:2px solid #3AA4CC;border-radius:100%;cursor:pointer;height:12px;width:12px;position:absolute;top:-6px;margin-left:-7px}.fl-field-popup-slider-input .ui-slider-handle:focus{outline:0}.fl-field-popup-slider-arrow{position:absolute;top:-22px}.fl-field-popup-slider-arrow:after{content:' ';border-color:transparent transparent #fff;border-style:solid;border-width:0 8px 8px;width:0;height:0}.fl-field-popup-slider-top .fl-field-popup-slider-arrow{top:auto;bottom:-24px}.fl-field-popup-slider-top .fl-field-popup-slider-arrow:after{border-bottom-width:0;border-top-width:8px;border-top-color:#fff}input[type=number].fl-field-popup-slider-focus{border:2px solid #00a0d2!important}.fl-font-field{display:-ms-flexbox;display:flex}.fl-font-field label{display:block!important;margin:0!important;padding:0 0 6px 12px}.fl-font-field .fl-font-field-font-wrapper{margin-right:8px;width:70%!important}.fl-font-field .fl-font-field-weight-wrapper{width:30%!important}.fl-compound-field{max-width:350px}.fl-compound-field-section-toggle{background:#E7EAEF;border-radius:4px;border-top:2px solid transparent;border-bottom:2px solid transparent;cursor:pointer;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;height:32px;margin-bottom:8px;padding:0 12px}.fl-compound-field-section-toggle:hover{background:#dadfe5}.fl-compound-field-section-toggle .dashicons{font-size:15px;height:15px;margin-right:5px;width:15px}.fl-compound-field-section:last-child .fl-compound-field-section-toggle{margin-bottom:0}.fl-compound-field-section.fl-compound-field-section-visible{padding-bottom:12px}.fl-compound-field-section.fl-compound-field-section-visible:last-child{padding-bottom:0}.fl-compound-field-section-visible .fl-compound-field-section-toggle{background:0 0;border-top:2px solid #E7EBEF;border-radius:0}.fl-compound-field-section-visible .fl-compound-field-section-toggle:hover{background:0 0}.fl-compound-field-section-visible .fl-compound-field-section-toggle .dashicons:before{content:'\f347'}.fl-compound-field-row{display:none;padding-bottom:12px}.fl-compound-field-section-visible .fl-compound-field-row{display:-ms-flexbox;display:flex}.fl-compound-field-label{display:block!important;margin:0!important;padding:0 0 6px 12px}.fl-compound-field-label-bottom{padding:6px 0 0 12px}.fl-compound-field-label .fl-dimension-field-link{display:inline-block;padding:0 0 0 2px;position:relative;left:auto;top:-1px}.fl-compound-field-setting{padding-right:8px;width:100%}.fl-compound-field-setting:last-child{padding-right:0}.fl-compound-field-setting select{margin:0!important;width:100%}.fl-compound-field-setting .fl-unit-field-input input{width:100%!important;border-top-right-radius:0!important;border-bottom-right-radius:0!important}.fl-compound-field-setting .fl-unit-field-input{width:50%!important}.fl-compound-field-setting .fl-unit-field-input select.fl-field-unit-select{background-position:center right 2px!important;padding:2px 5px!important;width:100%;font-size:11px}.fl-typography-field .fl-font-field-font-wrapper{margin-right:8px!important}.fl-typography-field-spacing{width:calc(33.33% - 8px)}.fl-typography-field-transform{width:66.66%}.fl-typography-field-transform .fl-button-group-field-options{float:none}.fl-typography-field-transform .fl-button-group-field-option{width:100%;padding:0 7px}.fl-typography-field .fl-shadow-field{display:-ms-flexbox;display:flex}.fl-typography-field .fl-shadow-field .fl-color-picker{margin:0 8px 0 0;width:calc(33.33% - 8px)}.fl-typography-field .fl-shadow-field .fl-dimension-field-units{margin-left:0;margin-top:0;margin-right:0;width:66.66%}.fl-button-group-field-options{background:#E7EBEF;border-radius:4px;box-shadow:0 2px 4px 0 rgba(0,0,0,.12);display:-ms-flexbox;display:flex;float:left;height:36px;overflow:hidden}.fl-button-group-field-option{cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;padding:0 5px;border-radius:0;border:2px solid transparent;background:0 0}.fl-button-group-field-option:hover{top:0;background-color:transparent;color:#000;border:2px solid transparent}.fl-button-group-field-option:focus{top:0;background-color:transparent;border:2px solid #00a0d2;color:#333}.fl-button-group-field-option:first-child{border-top-left-radius:3px;border-bottom-left-radius:3px}.fl-button-group-field-option:last-child{border-top-right-radius:3px;border-bottom-right-radius:3px}.fl-button-group-field-option[data-selected="1"]{background-color:#fff;color:#000}.fl-button-group-field-option i{color:#6B6E75}.fl-button-group-field-option:hover i{color:#333}.fl-compound-field-cell{width:50%;display:block;float:left;padding-top:13px}.fl-compound-field-cell:first-child{padding-right:4px}.fl-compound-field-cell:last-child{padding-left:4px}.fl-compound-field-cell label{padding:5px 0 0;font-size:11px;font-weight:700;color:inherit!important;display:block;text-align:center;opacity:.5}.fl-shape-transform-field .fl-compound-field-row{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.fl-shape-transform-field .fl-compound-field-row>*{width:auto;-ms-flex:1 1 auto;flex:1 1 auto}.fl-shape-transform-field .fl-compound-field-row>:first-child{-ms-flex:0 0 auto;flex:0 0 auto}.fl-shape-transform-field .fl-shape-orientation-controls{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.fl-shape-transform-field .fl-shape-orientation-controls>*{-ms-flex:0 0 auto;flex:0 0 auto}.fl-shape-transform-field .fl-shape-orientation-controls .fl-button-group-field>*,.fl-shape-transform-field .fl-shape-orientation-controls .fl-button-group-field>* button{border-radius:0}.fl-shape-orientation-controls .fl-button-group-field:first-child>*,.fl-shape-orientation-controls .fl-button-group-field:first-child>* button{border-top-left-radius:4px;border-bottom-left-radius:4px}.fl-shape-orientation-controls .fl-button-group-field:last-child>*,.fl-shape-orientation-controls .fl-button-group-field:last-child>* button{border-top-right-radius:4px;border-bottom-right-radius:4px}.fl-builder-custom-field{background:#fff;border:2px solid transparent;border-radius:4px;padding:7px 10px;box-shadow:0 2px 4px 0 rgba(0,0,0,.12);min-height:36px;box-sizing:border-box}.fl-builder-field-multiple .fl-builder-custom-field{cursor:move}.fl-builder-custom-field a{color:#21759b!important;text-decoration:underline!important}.fl-builder-custom-field a:hover{color:#d54e21!important}.fl-builder-custom-field label.error{margin-top:5px}.fl-photo-field .fl-photo-preview{display:-ms-flexbox;display:flex}.fl-photo-field .fl-photo-select,.fl-photo-field.fl-photo-empty .fl-photo-preview{display:none}.fl-photo-field.fl-photo-empty .fl-photo-select{display:block}.fl-photo-field .fl-photo-preview-img{line-height:0;margin:5px 0}.fl-photo-field .fl-photo-preview-img img{max-width:60px}.fl-photo-field .fl-photo-preview select{margin:8px 0 8px 10px;width:calc(100% - 10px)}.fl-photo-field.fl-photo-no-attachment .fl-photo-preview select{display:none}.fl-photo-field .fl-photo-preview-filename{display:none;font-size:13px;font-weight:700;margin:5px 0 9px 11px}.fl-photo-field.fl-photo-no-attachment .fl-photo-preview-filename{display:inline-block;word-break:break-all}.fl-multiple-photos-field .fl-multiple-photos-select,.fl-multiple-photos-field.fl-multiple-photos-empty .fl-multiple-photos-add,.fl-multiple-photos-field.fl-multiple-photos-empty .fl-multiple-photos-count,.fl-multiple-photos-field.fl-multiple-photos-empty .fl-multiple-photos-edit,.fl-multiple-photos-lightbox .gallery-settings,.fl-photo-field.fl-photo-no-attachment .fl-photo-edit{display:none}.fl-photo-field .fl-photo-edit{margin:0 0 0 11px}.fl-photo-field .fl-photo-remove,.fl-photo-field .fl-photo-replace{margin:0 0 0 8px}.fl-builder-edit .media-modal{z-index:9999991}.fl-builder-edit .media-modal-backdrop{z-index:999999}.fl-builder-edit .media-frame{-webkit-backface-visibility:hidden;backface-visibility:hidden}.fl-builder-edit .media-modal-content h1{font-family:inherit}.fl-builder-edit form#wp-link,.popover[class*=tour-],ul.as-list{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif}.fl-builder-edit .media-modal-content .thumbnail{padding:0;border:none;border-radius:0}.fl-builder-edit .media-modal-content .attachment-preview .thumbnail{margin-bottom:0}.fl-builder-edit .media-modal-content .attachment-preview .thumbnail img{max-width:none}.fl-builder-edit button.media-modal-close{position:absolute;box-shadow:none;-webkit-box-shadow:none}.fl-builder-edit .media-frame.hide-menu{visibility:visible}span.select2-container.select2-container--open{z-index:9999999}.fl-multiple-photos-field .fl-multiple-photos-add{margin:0 0 0 8px}.fl-multiple-photos-field.fl-multiple-photos-empty .fl-multiple-photos-select{display:inline}.fl-multiple-photos-count{font-weight:700;margin-bottom:3px}.fl-video-field .fl-video-select,.fl-video-field.fl-video-empty .fl-video-preview{display:none}.fl-video-field.fl-video-empty .fl-video-select{display:block}.fl-video-field .fl-video-preview-img{float:left;line-height:0;margin:5px 0}.fl-video-field .fl-video-preview-img img{max-width:60px}.fl-video-field .fl-video-preview-img .dashicons.dashicons-media-video{display:block;font-size:60px;height:60px;line-height:60px;width:60px}.fl-video-field .fl-video-preview-filename{display:inline-block;font-size:14px;font-weight:700;margin:7px 0 5px 11px}.fl-video-field .fl-video-remove,.fl-video-field .fl-video-replace{margin:0 0 0 11px}.fl-multiple-audios-field .fl-multiple-audios-select,.fl-multiple-audios-field.fl-multiple-audios-empty .fl-multiple-audios-add,.fl-multiple-audios-field.fl-multiple-audios-empty .fl-multiple-audios-edit{display:none}.fl-multiple-audios-field.fl-multiple-audios-empty .fl-multiple-audios-select{display:block}.fl-multiple-audios-field .fl-multiple-audios-add{margin:0 0 0 8px}.fl-icon-field .fl-icon-select,.fl-icon-field.fl-icon-empty .fl-icon-preview{display:none}.fl-icon-field.fl-icon-empty .fl-icon-select{display:block}.fl-icon-field .fl-icon-preview i{display:inline-block;font-size:28px;margin:10px 10px 9px;vertical-align:middle}.fl-icon-field .fl-icon-remove{margin:0 0 0 8px}.fl-builder-hidden-editor{display:none}.fl-builder-settings .wp-switch-editor{border-radius:0;color:#333;margin-top:2px}.fl-builder-settings .mce-toolbar .mce-btn-group .mce-btn{margin:2px 0}.fl-builder-settings .mce-menubtn.mce-fixed-width button{width:100px}.fl-builder-settings .mce-menubtn.mce-fixed-width span{width:100%}.mce-close:active,.mce-close:hover,.mce-toolbar .mce-btn button:active,.mce-toolbar .mce-btn button:hover,.mce-window .mce-btn button:active,.mce-window .mce-btn button:hover{background:0 0;border:none}.wp-core-ui .quicktags-toolbar input.button.button-small{margin:1px!important}.wp-editor-container textarea.wp-editor-area{background:0 0;border:none;padding:10px;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.fl-builder-edit form#wp-link{color:#000;font-size:13px}.fl-builder-edit form#wp-link #link-options label{display:block;margin-bottom:2px}.fl-builder-edit form#wp-link #link-options label span{padding-right:10px;vertical-align:middle}.fl-builder-edit form#wp-link #link-options input[type=text]{display:inline-block;height:auto;margin:5px 0 0;padding:3px 5px;width:80%}.fl-builder-edit form#wp-link .query-results{top:225px}.fl-code-field{border:1px solid #E6E6E6;border-left:none}.ace_editor,.ace_editor *{font-family:Monaco,Menlo,"Ubuntu Mono","Droid Sans Mono",Consolas,monospace!important;font-size:12px!important;font-weight:400!important;letter-spacing:0!important}.fl-layout-field-option{border:2px solid #d9d9d9;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;box-sizing:border-box!important;-moz-box-sizing:border-box!important;-webkit-box-sizing:border-box!important;cursor:pointer;float:left;line-height:0;max-width:23%;margin:0 1% 2%;padding:5px}.fl-layout-field-option-selected,.fl-layout-field-option:hover{border-color:red}.fl-layout-field-option img{max-width:100%}.fl-link-field .fl-link-field-input-wrap{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.fl-link-field-input{width:auto!important;-ms-flex:1 1 100%;flex:1 1 100%}.fl-link-field .fl-link-field-input-wrap button{-ms-flex:0 0 0%;flex:0 0 0%;height:36px;margin:1px 1px 1px 5px}.fl-link-field-options-wrap{padding:7px 0 0 12px}.fl-link-field-options-wrap label{margin-right:7px}.fl-link-field-options-wrap span{font-size:11px;font-weight:700;color:inherit!important;text-align:center;opacity:.5}.fl-link-field-search{display:none;border:2px solid #e6eaed;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;margin:4px 0 0;padding:10px}.fl-link-field-search-title{display:block;margin:0 0 3px 2px}.fl-link-field-search-cancel{margin-top:6px}.fl-link-field-search input{box-shadow:none!important;width:100%!important;padding:3px 9px!important}.fl-link-field-search #as-original-link-search{width:100%}.fl-field-connections-toggle{padding:10px 0}.fl-field[data-type=editor] .fl-field-connections-toggle{-ms-flex-align:start;align-items:flex-start}.fl-field[data-type=link] .fl-field-connections-toggle{height:24px;margin-top:1px;-ms-flex-align:start;align-items:flex-start}.fl-field[data-type=link] .fl-field-connection{bottom:25px}.fl-field-connections-menu[data-field=fl-field-text]{margin-top:30px}.fl-help-tooltip{display:inline-block;position:relative}.fl-lightbox-width-slim .fl-help-tooltip{position:static}.fl-help-tooltip-icon{color:#999!important;cursor:pointer;font-size:15px!important;padding:5px;vertical-align:middle}.fl-help-tooltip-text{box-sizing:border-box;background:#fff;border:1px solid #ccc;box-shadow:0 0 5px #ccc;-moz-box-shadow:0 0 5px #ccc;-webkit-box-shadow:0 0 5px #ccc;display:none;font-weight:400;left:23px;padding:10px 13px;position:absolute;top:-6px;width:250px;z-index:1000;border-radius:4px}.fl-lightbox-width-slim .fl-help-tooltip-text{top:30px;left:0;width:100%}.fl-field-control .fl-form-field{margin-bottom:0}.fl-form-field[data-preview-text=icon]{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.fl-form-field-preview-text i{display:inline-block;font-size:18px;line-height:22px;margin-right:10px}.fl-builder-field-actions{padding-left:0!important;padding-right:0!important;text-align:center;width:85px}.fl-builder-field-actions i{color:#999!important;cursor:pointer;font-size:13px!important;line-height:29px!important;width:16px}.fl-builder-field-actions i:hover{color:#000!important}.fl-builder-field-actions i.fl-builder-field-copy,.fl-builder-field-actions i.fl-builder-field-delete{margin-left:5px}.fl-builder-field-actions i.fl-builder-field-move{cursor:move}.fl-builder-field-dd-helper{background:#ccc;height:30px!important;float:left;width:130px!important}.fl-builder-field-dd-zone{border:1px dashed #ccc;height:30px}.fl-builder-field-actions-single .fl-builder-field-delete,.fl-builder-field-actions-single .fl-builder-field-move{display:none!important}.fl-builder-field-multiple .fl-builder-field-actions,.fl-builder-field-multiple .fl-field-control,.fl-builder-field-multiple .fl-field-label{padding-top:2px!important;padding-bottom:2px!important}.fl-builder-field-multiple .fl-builder-field-actions{min-width:70px!important}.fl-builder-field-multiple[data-field=icons] .fl-builder-field-actions{width:70px!important}.fl-builder-field-multiple.ui-sortable-helper .fl-field-control{width:60%}.fl-builder-field-multiple.ui-sortable-helper .fl-builder-field-actions{display:none}.fl-builder-widget-settings input{display:inline-block!important;margin:5px 10px 8px!important}.fl-builder-lightbox-loading{background:url(../img/ajax-loader.svg) center center no-repeat;height:100px}.fl-builder-settings .error,.fl-builder-settings input.error{color:#d03436!important}.fl-builder-settings label.error,.fl-builder-settings p.error{color:#d03436;display:block;margin-top:5px}.fl-builder-settings .fl-form-table .fl-field-description{color:#464646;font-style:normal;margin-left:2px}.fl-lightbox .fl-field-connection{right:-1px}.fl-lightbox .fl-field-connection-content{border:2px solid transparent!important;background:#e7ebef!important}.fl-field-connection-content .fl-field-connection-label{color:#676f7a!important}.fl-field-connections-toggle{pointer-events:none;width:20px;right:-25px}.has-scrollbar .fl-field-connections-toggle{right:-22px}.fl-lightbox-width-slim tr[data-type=code] .fl-field-connections-toggle{right:10px}.fl-lightbox-width-slim .fl-code-field{width:90%}.fl-field-connections-toggle-open{transform:none!important}.fl-field-connections-toggle i{pointer-events:auto;color:#abb1ba;font-size:13px!important;transition-property:transform;transition-duration:.15s}.fl-field-connections-toggle-open i{transform:rotate(-45deg)}ul.as-selections{background-color:#fff;border:none;border-radius:4px;box-shadow:none;color:#333;font-size:12px;height:auto;line-height:15px;margin:1px;outline:0;padding:3px;width:auto}ul.as-selections.loading{background:url(../img/ajax-loader-small.svg) 98% center no-repeat}ul.as-selections li.as-selection-item{background:#d4eaf6;border:none;font-size:11px;line-height:14px;padding:8px 15px;border-radius:4px;margin:2px}ul.as-selections li.as-selection-item.blur{background:#f4f4f4}ul.as-selections li.as-selection-item a.as-close{line-height:12px}ul.as-selections li.as-original{margin:0}ul.as-selections li.as-original input{height:auto;font-size:12px;margin:0;padding:0;box-shadow:none}ul.as-list{margin:0;font-size:13px;color:#000;background-color:#fff;background-color:rgba(255,255,255,.95);z-index:2;box-shadow:0 0 10px rgba(0,0,0,.1);border:none;border:1px solid #dfdfdf;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px}li.as-message,li.as-result-item{border:none}li.as-result-item.active{background:#e5e5e5;border-radius:0;color:#333;text-shadow:none}li.as-result-item em{background:0 0!important;color:#333!important;font-size:12px;padding:0!important;font-weight:700}.fl-custom-query-filter{display:none}.fl-custom-query .fl-field[data-type=suggest] select{margin-bottom:5px;width:100%}.fl-builder-service-settings{position:relative}.fl-builder-service-error{color:red!important;padding:15px 0 0}.fl-builder-service-account-delete{color:red!important;margin-left:10px;position:relative;top:2px}.fl-lightbox-width-slim .fl-builder-service-account-delete{display:block;padding-top:7px}#fl-field-visibility_user_capability .fl-field-description,.fl-builder-service-connect-row .fl-field-description{background:#f0f0f0;color:#333!important;display:block;float:none;margin:10px 0 0;padding:10px}#fl-field-visibility_user_capability .fl-field-description a,.fl-builder-service-connect-row .fl-field-description a{color:#21759b!important;text-decoration:underline!important}.fl-ordering-field-option{background:#fff;border:1px solid #dfdfdf;border-radius:3px;cursor:move;margin-bottom:5px;padding:5px 10px}.fl-ordering-field-option .fa{color:#ccc;float:right;line-height:16px}#tiptip_holder{z-index:1000000}#tiptip_holder.tip_top #tiptip_arrow_inner{border-top-color:#333}#tiptip_holder.tip_bottom #tiptip_arrow_inner{border-bottom-color:#333}#tiptip_holder.tip_right #tiptip_arrow_inner{border-right-color:#333}#tiptip_holder.tip_left #tiptip_arrow_inner{border-left-color:#333}#tiptip_content{background:#333;box-shadow:none}.fl-builder-getting-started-video{line-height:0!important;padding:10px}.fl-builder-getting-started-video iframe{border:none;height:326px;width:100%}.fl-builder-tour-actions .fl-builder-actions-title{font-size:14px!important;line-height:19px}.fl-builder-tour-mask{bottom:0;left:0;position:fixed;right:0;top:0;z-index:100000000}.fl-builder-tour-dimmed{background:rgba(0,0,0,.7);bottom:0;left:0;position:absolute;right:0;top:0}body>.fl-builder-tour-dimmed{position:fixed}.tour-backdrop{z-index:110000}.popover[class*=tour-]{border:1px solid #ccc;border-radius:0;box-shadow:0 0 40px rgba(0,0,0,.3);color:#666;font-size:13px;font-weight:400;line-height:18px;max-width:none;padding:0;width:300px;z-index:100000001}.popover[class*=tour-].bottom>.arrow{border-bottom-color:#ccc}.popover[class*=tour-].bottom>.arrow:after{border-bottom-color:#f7f7f7}.popover[class*=tour-] .popover-title{border-radius:0;color:#333;letter-spacing:normal;text-transform:none}.popover[class*=tour-] .fa-times{color:#b3b3b3;cursor:pointer;font-size:16px;padding:5px;position:absolute;right:3px;top:2px}.popover[class*=tour-] .fa-times:hover{color:#666}.popover[class*=tour-] .popover-content{border-bottom:1px solid #d9d9d9;padding:13px 15px}.popover[class*=tour-] .fl-builder-tour-next{display:block;float:none;width:100%}.popover-navigation button{min-height:36px}.fl-builder-shortcode-mask-wrap{position:relative}.fl-builder-shortcode-mask{bottom:-1px;left:-1px;position:absolute;right:-1px;top:-1px;z-index:1}.fl-builder--search{border:2px solid transparent;position:relative;padding:0;width:54px;transition-property:width;transition-delay:.1s;transition-duration:.15s}.fl-builder--search.is-expanded{border:2px solid #00A0D0}.fl-builder--search input[type=text],.fl-builder--search input[type=text]:focus{background-color:transparent;border:none!important;box-sizing:border-box;width:100%;font-size:16px;text-align:center}.fl-builder--search:before{display:-ms-flexbox;display:flex;top:0;left:0;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;content:"\f002";font:normal normal normal 14px/1 Font Awesome\ 5 Free;text-align:center;width:100%;height:100%;position:absolute;pointer-events:none;color:rgba(128,128,128,.6);font-size:17px;opacity:1;transition-property:opacity;transition-duration:.15s}.fl-builder--main-menu-panel,.fl-builder-ui-keyboard-shortcuts{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif!important}.fl-builder--search.has-text:before,.fl-builder--search.is-expanded:before{opacity:0}.fl-builder--search input::-webkit-input-placeholder{color:rgba(128,128,128,0)!important;transition:color .25s}.fl-builder--search input:focus::-webkit-input-placeholder{color:rgba(128,128,128,.4)!important}.fl-builder--search .search-label{cursor:text}.fl-builder--search .search-clear{display:none;padding:10px 10px 10px 30px;color:#a7a7a7;font-size:12px;position:absolute;right:0;top:0;background-color:#eff1f2;background:linear-gradient(to left,#e4e7ea,#e4e7ea 75%,rgba(228,231,234,0))}.fl-builder--search.has-text .search-clear,.fl-builder--search.is-expanded input{display:inline-block}.fl-builder--search:hover .search-clear{color:#888;background-color:#eff1f2;background:linear-gradient(to left,#dadfe5,#dadfe5 75%,rgba(218,223,229,0))}.fl-builder--search.is-expanded{width:246px}@keyframes fl-builder-show-menu-item{from{transform:translateY(10px) scale(.8);opacity:0}to{transform:translateX(0) translateY(0) scale(1);opacity:1}}.fl-builder--main-menu-panel{display:none;box-sizing:border-box;position:fixed;top:calc(45px + 10px);left:10px;width:360px;color:#222;max-height:calc(100% - 66px);border-radius:4px;background:#fff;border:none;border-top:3px solid #00a0d2;box-shadow:0 11px 45px 8px rgba(0,0,0,.1);font-size:14px!important;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:10000009;pointer-events:auto}.fl-builder--main-menu-panel.is-showing{display:-ms-flexbox;display:flex}.fl-builder--main-menu-panel:before,.fl-theme-builder-preview-select-open .fl-theme-builder-preview-select-items:before{bottom:100%;right:6px;content:" ";height:0;width:0;position:absolute;pointer-events:none;border:solid;border-color:rgba(255,255,255,0);border-bottom-color:#00a0d2;border-width:13px;margin-left:-13px}.fl-builder--main-menu-panel-views{-ms-flex:1 1 100%;flex:1 1 100%;overflow:auto}.fl-builder--main-menu-panel-mask{display:none;position:fixed;top:0;left:0;right:0;bottom:0;z-index:1000119}.fl-builder--main-menu-panel .fl-builder--tabs{padding-left:20px;padding-top:15px}.fl-builder--main-menu-panel-view{display:none}.fl-builder--main-menu-panel-view.is-showing{display:block}.fl-builder--main-menu-panel-view-title{font-size:24px;font-weight:600;padding:25px 22px 0;line-height:1;white-space:nowrap}.fl-builder--main-menu-panel-view-title .title-accessory{float:right;color:#b1b1b1}.fl-builder--main-menu-panel-view-title .title-accessory>i{font-size:20px!important;width:25px!important}.fl-builder--main-menu-panel-view-title .title-accessory>i:hover{color:#222}.fl-builder--main-menu-panel-view-title .pop-view{padding:10px;margin-left:-10px;opacity:.5;font-size:25px;font-weight:400;cursor:pointer;background:0 0;outline:0;border:none;color:inherit}.fl-builder--main-menu-panel-view-title .pop-view:focus{outline:0;top:0;background:#E5EAED!important}.fl-builder--menu-item:before{display:block;content:"";float:none;clear:both}.fl-builder--menu-item{color:inherit;text-align:left;box-sizing:border-box;display:block;padding:10px 15px;margin:0 10px;width:calc(100% - 20px);background:0 0;border:none;border-radius:4px;font-size:14px;line-height:1.1;cursor:pointer;opacity:1;text-transform:none}.fl-builder--menu-item .menu-view.view-revisions{opacity:.5;padding-left:5px}.fl-builder--menu-item .menu-event.event-showGlobalSettings,.fl-builder--menu-item .menu-event.event-showLayoutSettings{color:#6bc373;padding-left:5px}.fl-builder--menu-item:hover{background:#eaf1f8;border:none;text-decoration:none;color:#000}.fl-builder--selector-menu .fl-builder--menu-item:hover{background:#fff}.fl-builder--menu-item-accessory{float:right;text-align:center;display:inline-block;min-width:40px;font-size:14px}.fl-builder--menu-item-accessory.view-arrow{font-size:18px}.fl-builder--menu{padding:0;margin:20px 0}.fl-builder--menu hr{margin:8px 0;background:#e6eaed!important;height:1px;border:none}.fl-builder--menu .fl-builder-video-wrap{padding:0 10px 10px}.fl-revision-list-item{display:-ms-flexbox;display:flex}.fl-revision-list-item-text{padding-left:15px}.fl-revision-list-item-date{padding-bottom:5px}.fl-builder--revision-actions{display:none;position:fixed;top:4px;left:4px;z-index:100008;padding:4px 4px 6px;-ms-flex-pack:center;justify-content:center;background:#fff;border-radius:4px}.fl-builder--revision-actions *{margin-right:5px}.fl-builder--revision-actions :last-child{margin:0}.fl-builder--menu-item[data-event=noRevisionsMessage]:hover{background:0 0;box-shadow:none;cursor:default}.fl-no-revisions-message-title{font-weight:700;margin-bottom:10px}.fl-no-revisions-message-text{line-height:22px}.fl-builder-module-placeholder-message{border:1px dashed #ccc;overflow:hidden;padding:20px;text-align:center;text-overflow:ellipsis;white-space:nowrap}.fl-field-connections-menu{z-index:999999}.fl-field[data-type=editor] .fl-field-connections-toggle{right:5px!important}.fl-field-connections-inline-toggle{display:inline;color:#9a9b9c;margin-left:6px}.fl-field-connections-inline-toggle i{transition-property:transform;transition-duration:.15s}.fl-field-connections-inline-toggle.fl-field-connections-toggle-open i{transform:rotate(45deg)}.fl-builder-add-ultimate-presets-button,.fl-builder-add-ultimate-rows-button,.fl-builder-pp-add-template-button,.pp-preview-button,.uabb-live-preview-button{display:none!important}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;display:block;-ms-touch-action:none;touch-action:none;background:0 0;transition-property:background;transition-duration:.15s}.ui-resizable-autohide .ui-resizable-handle,.ui-resizable-disabled .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-ne,.ui-resizable-nw,.ui-resizable-se,.ui-resizable-sw{width:12px;height:12px}.ui-resizable-se{cursor:se-resize;right:-4px;bottom:-4px}.ui-resizable-sw{cursor:sw-resize;left:-4px;bottom:-4px}.ui-resizable-nw{cursor:nw-resize;left:-4px;top:-4px}.ui-resizable-ne{cursor:ne-resize;right:-4px;top:-4px}.fl-builder-resizable-iframe-fix{position:absolute;top:0;right:0;bottom:0;left:0;z-index:100000000}.fl-builder-panel .ui-resizable-handle:active,.fl-builder-panel .ui-resizable-handle:hover,.fl-lightbox .ui-resizable-handle:active,.fl-lightbox .ui-resizable-handle:hover{background:#00a0d2}.fl-builder-panel .ui-resizable-n,.fl-builder-panel .ui-resizable-s,.fl-lightbox .ui-resizable-n,.fl-lightbox .ui-resizable-s{height:6px}.fl-builder-panel .ui-resizable-n,.fl-lightbox .ui-resizable-n{top:-3px}.fl-builder-panel .ui-resizable-s,.fl-lightbox .ui-resizable-s{bottom:-3px}.fl-builder-panel .ui-resizable-e,.fl-builder-panel .ui-resizable-w,.fl-lightbox .ui-resizable-e,.fl-lightbox .ui-resizable-w{width:6px}.fl-builder-panel .ui-resizable-e,.fl-lightbox .ui-resizable-e{right:-3px}.fl-builder-panel .ui-resizable-w,.fl-lightbox .ui-resizable-w{left:-3px}.fl-lightbox .ui-resizable-ne,.fl-lightbox .ui-resizable-nw,.fl-lightbox .ui-resizable-se,.fl-lightbox .ui-resizable-sw{background:0 0;border:6px solid transparent}.fl-lightbox .ui-resizable-ne:active,.fl-lightbox .ui-resizable-ne:hover,.fl-lightbox .ui-resizable-nw:active,.fl-lightbox .ui-resizable-nw:hover,.fl-lightbox .ui-resizable-se:active,.fl-lightbox .ui-resizable-se:hover,.fl-lightbox .ui-resizable-sw:active,.fl-lightbox .ui-resizable-sw:hover{background:0 0;border-color:#00a0d2}.fl-lightbox .ui-resizable-ne{border-bottom:none;border-left:none;border-top-right-radius:4px}.fl-lightbox .ui-resizable-nw{border-bottom:none;border-right:none;border-top-left-radius:4px}.fl-lightbox .ui-resizable-se{border-top:none;border-left:none;border-bottom-right-radius:4px}.fl-lightbox .ui-resizable-sw{border-top:none;border-right:none;border-bottom-left-radius:4px}.fl-builder-ui-keyboard-shortcuts{display:none;position:fixed;top:0;left:0;bottom:0;right:0;z-index:999999;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;background:rgba(50,50,50,.88);font-size:15px;line-height:1.3;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fl-builder-ui-keyboard-shortcuts.is-showing{display:-ms-flexbox;display:flex}.fl-builder-ui-keyboard-shortcuts-content{box-sizing:border-box;width:500px;background:#f5f7f9;border-radius:4px;padding:30px 0 0;box-shadow:0 10px 30px rgba(0,0,0,.15)}.fl-builder-ui-keyboard-shortcut-item{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center;padding:12px 40px}.fl-builder-ui-keyboard-shortcut-item:nth-child(even){background:#eef2f5}.fl-builder-ui-shortcut-keycode{margin-left:auto;text-transform:uppercase;letter-spacing:2px}.fl-builder-ui-keyboard-shortcust-footer{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:center;justify-content:center;padding:10px}.dismiss-shortcut-ui{padding:10px;border-radius:4px;background:#fff;color:#000;font-size:14px;border:2px solid #fff}.dismiss-shortcut-ui:focus,.dismiss-shortcut-ui:hover{top:0;color:#000;background:#eef2f5;border:2px solid #eef2f5}.fl-builder-ui-skin--dark .fl-builder--main-menu-panel,.fl-builder-ui-skin--dark .fl-builder--preview-actions,.fl-builder-ui-skin--dark .fl-builder--search-results-panel,.fl-builder-ui-skin--dark .fl-builder-panel,.fl-builder-ui-skin--dark .fl-lightbox,body.fl-builder-ui-skin--dark .fl-builder-bar .fl-builder-bar-content{background:#23282d;color:#b4b9be;border-color:#1d1d1d}.fl-builder-ui-skin--dark .fl-builder--panel-header{color:#b4b9be;border-bottom-color:#1d1d1d;border-top-color:#1d1d1d}.fl-builder-ui-skin--dark .fl-builder-panel.fl-builder-ui-pinned .fl-builder--panel-header{border-top-color:#1d2227}.fl-builder-ui-skin--dark .fl-builder--main-menu-panel:before{border-bottom-color:#1d1d1d}.fl-builder-ui-skin--dark .fl-builder--panel-arrow polygon{fill:#1d1d1d}.fl-builder-ui-skin--dark .fl-builder-panel-search .fl-builder-panel-search-input{background:#24282e}.fl-builder-ui-skin--dark .fl-responsive-preview-content{background:#131619}.fl-builder-ui-skin--dark .fl-form-table th{background:#23282d!important;color:#7d8690}.fl-builder-ui-skin--dark .fl-builder--preview-actions .device-icons,.fl-builder-ui-skin--dark .fl-builder-button{background:#2c333a}.fl-builder-ui-skin--dark .fl-builder-button:focus{background:#131a22}.fl-builder-ui-skin--dark .fl-builder-button.fl-builder-button-primary{color:#fff!important;fill:#fff!important;background:#00A0D2}.fl-builder-ui-skin--dark .fl-builder-button.fl-builder-buy-button,.fl-builder-ui-skin--dark .fl-builder-button.fl-builder-feedback-button,.fl-builder-ui-skin--dark .fl-builder-button.fl-builder-upgrade-button{background-color:#F7A407;color:#fff!important}.fl-builder-ui-skin--dark .fl-builder-button.fl-builder-button-silent:focus{border:2px solid #00a0d2!important}.fl-builder-ui-skin--dark .fl-builder-content-panel--button:hover,.fl-builder-ui-skin--dark .fl-builder-content-panel-button{color:#00A0D2!important}.fl-builder-ui-skin--dark .fl-builder--menu>a:hover,.fl-builder-ui-skin--dark .fl-builder--menu>button:hover{background:#101215!important}.fl-builder-ui-skin--dark .fl-builder--menu>a:focus,.fl-builder-ui-skin--dark .fl-builder--menu>button:focus{background:#101215!important;color:#fff!important}.fl-builder-ui-skin--dark .fl-builder-bar-title{border-color:#101215}.fl-builder-ui-skin--dark .fl-builder-bar-title:hover{background-color:#181b1f}.fl-builder-simple.fl-builder-ui-skin--dark .fl-builder-bar-title:hover{background-color:transparent}.fl-builder-ui-skin--dark .fl-builder-layout-title{color:#c6cdd6}.fl-builder-ui-skin--dark .fl-builder-bar-title-caret i,.fl-builder-ui-skin--dark .fl-builder-layout-pretitle,.fl-builder-ui-skin--dark .fl-theme-builder-preview-select .fl-theme-builder-preview-select-title{color:#7d8690}.fl-builder-ui-skin--dark button.fl-builder-button.fl-builder-bar-title-caret:focus{background-color:#101215!important}.fl-builder-ui-skin--dark .fl-builder--search:before{color:rgba(162,173,184,.73)}.fl-builder-ui-skin--dark .fl-builder--search input:focus::-webkit-input-placeholder{color:rgba(162,173,184,.73)!important}.fl-builder-ui-skin--dark .fl-builder--search .search-clear{color:rgba(162,173,184,.5);background-color:#e4e4e4;background:linear-gradient(to left,#383f46,#383f46 75%,rgba(56,63,70,0))}.fl-builder-ui-skin--dark .fl-builder--menu hr{background-color:#23282d!important;border:none}.fl-builder-ui-skin--dark .fl-builder--tabs{border-color:#383f46!important}.fl-builder-ui-skin--dark .fl-builder--tabs .is-showing,.fl-builder-ui-skin--dark .fl-builder-settings-tabs a.fl-active,.fl-builder-ui-skin--dark .fl-builder-settings-tabs-more.fl-contains-active{color:#fff!important;fill:#fff!important;background:#181b20!important}.fl-builder-ui-skin--dark .fl-builder--tabs :focus{background-color:#101215!important;color:#fff!important}.fl-builder-ui-skin--dark .fl-builder--tabs .is-showing:focus{color:#00a0d2!important}.fl-builder-ui-skin--dark .fl-builder--menu-item:hover{background:#383f46;color:#a8b3bf}.fl-builder-ui-skin--dark .fl-builder--menu * .fl-builder--menu-item-accessory,.fl-builder-ui-skin--dark .fl-builder-blocks-section-group-name{color:#7d8690}.fl-builder-ui-skin--dark .fl-builder--selector-display{color:#c6cdd6;background:url(../img/svg/select-arrow-down-alt2-light.svg) center right 10px no-repeat #1a1b22!important}.fl-builder-ui-skin--dark .fl-builder--selector-display-label{color:#b5becb}.fl-builder-ui-skin--dark .fl-builder-panel-search-input input{border-color:#5b656f;color:#b8c2ce;background:#171b1f!important}.fl-builder-ui-skin--dark .fl-builder--selector-display-label:focus,.fl-builder-ui-skin--dark .fl-builder-panel-search-input input:focus{border-color:#00a0d2}.fl-builder-ui-skin--dark .fl-builder--group-label{color:#aaafb5!important;background:#24282e}.fl-builder-ui-skin--dark .fl-builder--category-select .fl-builder--selector-menu{border-color:#101215!important;color:#7c858e;background-color:#101215}.fl-builder-ui-skin--dark .fl-builder--category-select .fl-builder--selector-menu:before{border-bottom-color:#101215}.fl-builder-ui-skin--dark .fl-builder--menu>a,.fl-builder-ui-skin--dark .fl-builder--menu>button,.fl-builder-ui-skin--dark .fl-builder--menu>span{color:#a1adb9}.fl-builder-ui-skin--dark .fl-builder--category-select .fl-builder--selector-menu .fl-builder--menu-item:hover{background:#23282d!important;color:#a1adb9}.fl-builder-ui-skin--dark .fl-builder--category-select .fl-builder--selector-menu .fl-builder--menu-item:focus{background:#23282d!important;color:#00a0d2!important}.fl-builder-ui-skin--dark .fl-builder-panel-drag-handle{fill:#5b656f}.fl-builder-ui-skin--dark .fl-builder--template-collection-section-header,.fl-builder-ui-skin--dark .fl-builder-blocks-section .fl-builder-blocks-section-header,.fl-builder-ui-skin--dark .fl-builder-settings-section-header{background-color:#191b21;border-color:#191b21}.fl-builder-ui-skin--dark .fl-builder--template-collection-section-name,.fl-builder-ui-skin--dark .fl-builder--user-templates-section-name,.fl-builder-ui-skin--dark .fl-builder-blocks-section .fl-builder-blocks-section-title,.fl-builder-ui-skin--dark .fl-builder-settings-fields .fl-builder-settings-title{color:#7d8690!important;fill:#7d8690;background:#24282e}.fl-builder-ui-skin--dark .fl-builder-settings-fields .fl-builder-settings-title:focus{border-color:#7d8690}.fl-builder-ui-skin--dark .fl-builder-blocks-section-content .fl-builder-block,.fl-builder-ui-skin--dark .fl-user-template{color:#b8c2ce}.fl-builder-ui-skin--dark .fl-builder-block:hover .fl-builder-block-content,.fl-builder-ui-skin--dark .fl-user-template:hover{background:#171b1f;color:#fff}.fl-builder-ui-skin--dark .fl-builder-block:hover i,.fl-builder-ui-skin--dark .fl-user-template:hover i{color:#6d7782!important}.fl-builder-ui-skin--dark .fl-builder-block:hover a:hover i,.fl-builder-ui-skin--dark .fl-user-template:hover a:hover i{color:#9eacbb!important}.fl-builder-ui-skin--dark .fl-builder-block .fl-builder-block-icon{fill:#b5becb}.fl-builder-ui-skin--dark .fl-builder-block-visual.fl-cols-visual .fl-cols-visual-col,.fl-builder-ui-skin--dark .fl-builder-block:hover .fl-builder-block-visual.fl-cols-visual .fl-cols-visual-col{background:#7d8690}.fl-builder-ui-skin--dark .fl-user-templates{border-color:#101215}.fl-builder-ui-skin--dark .fl-builder--template-thumbnail{border-color:#393f44}.fl-builder-ui-skin--dark .fl-builder--menu a.fl-template-collection{color:#a8b3bf}.fl-builder-ui-skin--dark .fl-lightbox .fl-lightbox-header h1{color:#fff!important}.fl-builder-ui-skin--dark .fl-form-table th label{color:#a8b3bf!important}.fl-builder-ui-skin--dark .fl-builder-settings-tabs{background-color:#2c333a!important}.fl-builder-ui-skin--dark .fl-builder-settings-fields h3.fl-builder-settings-title{background:#24282e}.fl-builder-ui-skin--dark h3.fl-builder-settings-title .fl-builder-settings-title-text-wrap{color:#a8b3bf;background-color:#1b2025}.fl-builder-ui-skin--dark .fl-lightbox :not(i){color:#a7b1bb!important}.fl-builder-ui-skin--dark .fl-builder-button{color:#c6cdd6!important;fill:#c6cdd6!important}.fl-builder-ui-skin--dark .fl-builder-content-panel--button:hover,.fl-builder-ui-skin--dark .fl-builder-content-panel-button{fill:#00A0D2!important}.fl-builder-ui-skin--dark .fl-lightbox .fl-builder-button.fl-builder-button-primary{color:#fff!important}.fl-builder-ui-skin--dark .fl-color-picker-color.fl-color-picker-empty{background:#1a1b22}.fl-color-picker-color.fl-color-picker-empty .fl-color-picker-icon{fill:#6f7881}.fl-builder-ui-skin--dark .fl-color-picker-clear{background-color:#121a23}.fl-builder-ui-skin--dark .fl-color-picker-clear:hover{background-color:#373f46}.fl-builder-ui-skin--dark span.fl-builder-block-no-node-templates:hover{background:#1d2025}.fl-builder-ui-skin--dark .fl-builder-settings-tab-description{background:#1d2227}.fl-builder-ui-skin--dark .fl-builder-panel-search button svg .filled-shape{fill:#b5becb}.fl-builder-ui-skin--dark .fl-builder-custom-field,.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=email],.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=file],.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=number],.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=password],.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=search],.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=tel],.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=text],.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=url],.fl-builder-ui-skin--dark .fl-builder-settings-fields select,.fl-builder-ui-skin--dark .fl-builder-settings-fields textarea{background-color:#181b20!important}.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=email]:focus,.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=file]:focus,.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=number]:focus,.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=password]:focus,.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=search]:focus,.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=tel]:focus,.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=text]:focus,.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=url]:focus,.fl-builder-ui-skin--dark .fl-builder-settings-fields select:focus,.fl-builder-ui-skin--dark .fl-builder-settings-fields textarea:focus{border-color:#00a0d2!important;color:#fff!important}.fl-builder-ui-skin--dark .fl-builder-settings-fields select{background-image:url(../img/svg/select-arrow-down-alt2-light.svg)!important}.fl-builder-ui-skin--dark .fl-builder-custom-field select,.fl-builder-ui-skin--dark .fl-photo-field select{border-color:#7d8690!important}.fl-builder-ui-skin--dark .fl-field i.fl-field-responsive-toggle{color:#6b747d}.fl-builder-ui-skin--dark .fl-builder--main-menu-panel-view-title,.fl-builder-ui-skin--dark .fl-field i.fl-field-responsive-toggle:hover{color:#a8b3bf}.fl-builder-ui-skin--dark .fl-builder--saving-indicator{color:#858f99}.fl-builder-ui-skin--dark .fl-icons-list i:hover{background-color:#16191d;color:#fff}.fl-builder-ui-skin--dark .fl-color-picker-clear .fl-color-picker-icon-remove:after,.fl-builder-ui-skin--dark .fl-color-picker-clear .fl-color-picker-icon-remove:before{background:#6f7881}.fl-builder-ui-skin--dark .fl-builder--user-templates-section-content{border-color:#1d1d1d}.fl-builder-ui-skin--dark .fl-theme-builder-preview-select.fl-builder-button{background:0 0;border-right-color:#101215!important}.fl-builder-ui-skin--dark .fl-theme-builder-preview-select.fl-builder-button:hover{background:#181b1f}.fl-builder-ui-skin--dark .fl-theme-builder-preview-select .fl-theme-builder-preview-select-title span{color:#c6cdd6}.fl-builder-ui-skin--dark .fl-builder-settings-tabs-overflow-menu{background:#131a22;border-color:#353c43 #131a22 #131a22}.fl-builder-ui-skin--dark .fl-builder-settings-tabs-overflow-menu:before{border-bottom-color:#353c43}.fl-builder-ui-skin--dark .fl-builder-settings-tabs-overflow-menu>a:active,.fl-builder-ui-skin--dark .fl-builder-settings-tabs-overflow-menu>a:focus,.fl-builder-ui-skin--dark .fl-builder-settings-tabs-overflow-menu>a:hover{background:#383f46}.fl-builder-ui-skin--dark .fl-builder-settings-tabs-overflow-menu>a.fl-active,.fl-builder-ui-skin--dark .fl-builder-settings-tabs-overflow-menu>a:hover.fl-active{color:#fff!important;background:#383f46}.fl-builder-ui-skin--dark ul.as-selections{background-color:#121a23}.fl-builder-ui-skin--dark .fl-custom-query .fl-builder-settings-section{border-top:2px solid #1b2026!important}.fl-builder-ui-skin--dark div.fl-field-unit-select{background-color:#181b20!important}.fl-builder-ui-skin--dark .fl-dimension-field-units>*{border-right:1px solid #383f46}.fl-builder-ui-skin--dark .fl-field-popup-slider,.fl-builder-ui-skin--dark .fl-field-popup-slider-input .ui-slider-handle{background:#383f46}.fl-builder-ui-skin--dark .fl-field-popup-slider-arrow:after{border-bottom-color:#383f46}.fl-builder-ui-skin--dark .fl-field-popup-slider-input{background-color:#121a23}.fl-builder-ui-skin--dark .fl-unit-field-input{border-right:1px solid #383f46!important}.fl-builder-ui-skin--dark .fl-button-group-field-option[data-selected="1"]{background-color:#383f46;color:#fff}.fl-builder-ui-skin--dark .fl-button-group-field-option[data-selected="1"] i{color:#fff!important}.fl-builder-ui-skin--dark .fl-button-group-field-options{background:#181b20}.fl-builder-ui-skin--dark .fl-compound-field-section-toggle{background-color:#181b20}.fl-builder-ui-skin--dark .fl-compound-field-section-toggle:hover{background-color:#383f46}.fl-builder-ui-skin--dark .fl-compound-field-section-visible .fl-compound-field-section-toggle{border-top-color:#121a23!important;background-color:transparent}.fl-builder-ui-skin--dark .fl-field-connections-toggle i{color:#7c8590}.fl-builder-ui-skin--dark .fl-lightbox .fl-field-connection-content{background-color:#191b20!important}.fl-builder-ui-skin--dark .fl-nanoscroller>.fl-nanoscroller-pane>.fl-nanoscroller-slider{background-color:#181b20}.fl-builder-ui-skin--dark .fl-nanoscroller>.fl-nanoscroller-pane:hover>.fl-nanoscroller-slider{background-color:#5a646f}.fl-builder-ui-skin--dark .fl-nanoscroller>.fl-nanoscroller-pane.active>.fl-nanoscroller-slider{background-color:#00A0D2}.fl-builder-ui-skin--dark .fl-lightbox div.mce-panel{background:#383f46}.fl-builder-ui-skin--dark .fl-lightbox .mce-toolbar .mce-ico{color:#a7b1bb}.fl-builder-ui-skin--dark .fl-lightbox .wp-core-ui .button,.fl-builder-ui-skin--dark .fl-lightbox .wp-core-ui .button-secondary{background:#383f46;border:none;box-shadow:none}.fl-builder-ui-skin--dark .fl-lightbox .fl-builder-settings .wp-switch-editor{background:#23282d}.fl-builder-ui-skin--dark .fl-lightbox .html-active .switch-html,.fl-builder-ui-skin--dark .fl-lightbox .quicktags-toolbar,.fl-builder-ui-skin--dark .fl-lightbox .tmce-active .switch-tmce{background:#383f46}.fl-builder-ui-skin--dark .fl-lightbox textarea.wp-editor-area{background:0 0!important}.fl-builder-ui-skin--dark .fl-lightbox .wp-core-ui .button-secondary:focus,.fl-builder-ui-skin--dark .fl-lightbox .wp-core-ui .button-secondary:hover,.fl-builder-ui-skin--dark .fl-lightbox .wp-core-ui .button.focus,.fl-builder-ui-skin--dark .fl-lightbox .wp-core-ui .button.hover,.fl-builder-ui-skin--dark .fl-lightbox .wp-core-ui .button:focus,.fl-builder-ui-skin--dark .fl-lightbox .wp-core-ui .button:hover{background:#191b20}
|
1 |
+
.fl-color-picker-ui{width:300px}.fl-color-picker-ui.fl-color-alpha-enabled{width:334px}.fl-color-picker-ui .iris-picker{float:left;width:100%;height:224px;display:block;position:relative;border-top:1px solid rgba(0,0,0,.1)}.fl-color-picker-ui .iris-picker .iris-square-inner,.fl-color-picker-ui .iris-picker-inner{position:absolute;left:0;top:0;bottom:0;right:0}.fl-color-picker-ui .iris-picker,.iris-picker *{box-sizing:content-box}.fl-color-picker-ui .iris-error{background-color:#ffafaf}.fl-color-picker-ui .iris-picker .iris-square{width:300px;height:200px}.fl-color-picker-ui .iris-picker .iris-palette,.fl-color-picker-ui .iris-picker .iris-slider,.fl-color-picker-ui .iris-picker .iris-square-inner{height:100%;width:12.5%}.fl-color-picker-ui .iris-picker .iris-placeholder,.fl-color-picker-ui .iris-picker .iris-square{position:relative}.fl-color-picker-ui .iris-picker .iris-square-inner{width:auto;margin:0}.fl-color-picker-ui .iris-ie-9 .iris-palette,.fl-color-picker-ui .iris-ie-9 .iris-slider,.fl-color-picker-ui .iris-ie-9 .iris-square,.fl-color-picker-ui .iris-ie-9 .iris-square-inner{box-shadow:none;border-radius:0}.fl-color-picker-ui .iris-ie-9 .iris-palette,.fl-color-picker-ui .iris-ie-9 .iris-slider,.fl-color-picker-ui .iris-ie-9 .iris-square{outline:rgba(0,0,0,.1) solid 1px}.fl-color-picker-ui .iris-ie-lt9 .iris-palette,.fl-color-picker-ui .iris-ie-lt9 .iris-slider,.fl-color-picker-ui .iris-ie-lt9 .iris-square,.fl-color-picker-ui .iris-ie-lt9 .iris-square-inner{outline:#999 solid 1px}.fl-color-picker-ui .iris-ie-lt9 .iris-square .ui-slider-handle{outline:#999 solid 1px;background-color:#fff;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=30)"}.fl-color-picker-ui .iris-ie-lt9 .iris-square .iris-square-handle{background:0 0;border:3px solid #fff;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"}.fl-color-picker-ui .iris-picker .iris-strip{box-sizing:border-box;width:calc(300px - 12px);margin:5px 6px 6px;border-radius:4px;position:relative;height:22px;transform:rotate(180deg)}.fl-color-picker-ui .iris-picker .iris-strip .ui-slider-handle{width:6px;position:absolute;right:0;top:-2px;bottom:-2px;margin:0;border-radius:3px;background:#fff;box-shadow:0 0 2px rgba(0,0,0,.5);z-index:5;cursor:ew-resize}.fl-color-picker-ui .iris-picker .iris-strip .ui-slider-handle:focus{outline:#00a0d2 solid 2px}.fl-color-picker-ui .iris-picker .iris-slider-offset{position:absolute;top:0;left:6px;right:0;bottom:0;width:auto;height:auto;background:0 0;border:none;border-radius:0;transform:rotate(180deg)}.fl-color-picker-ui .iris-picker .iris-square-handle{background:0 0;border:5px solid #999;border-radius:50%;border-color:rgba(128,128,128,.5);box-shadow:none;width:12px;height:12px;position:absolute;left:-10px;top:-10px;cursor:move;opacity:1;z-index:10}.fl-color-picker-ui .iris-picker .ui-state-focus .iris-square-handle{opacity:.8}.fl-color-picker-ui .iris-picker .iris-square-handle:hover{border-color:#999}.fl-color-picker-ui .iris-picker .iris-square-value:focus .iris-square-handle{box-shadow:0 0 2px rgba(0,0,0,.75);opacity:.8}.fl-color-picker-ui .iris-picker .iris-square-handle:hover::after{border-color:#fff}.fl-color-picker-ui .iris-picker .iris-square-handle::after{position:absolute;bottom:-4px;right:-4px;left:-4px;top:-4px;border:3px solid #f9f9f9;border-color:rgba(255,255,255,.8);border-radius:50%;content:" "}.fl-color-picker-ui .iris-picker .iris-square-value{width:0;height:0;position:absolute}.iris-ie-lt9 .iris-square-value,.iris-mozilla .iris-square-value{width:1px;height:1px}.fl-color-picker-wrapper{position:relative;width:48px;height:32px}.fl-color-picker{box-shadow:0 2px 4px 0 rgba(0,0,0,.12);background:url(../img/transp_bg.png) #fff;border-radius:4px;width:120px;height:36px;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.fl-color-picker-color{-ms-flex:1 1 100%;flex:1 1 100%;box-sizing:border-box!important;position:relative;border-radius:4px;background-color:transparent;cursor:pointer;border:2px solid transparent;padding:0;-ms-flex-pack:center;justify-content:center;display:-ms-flexbox;display:flex}.fl-color-picker-clear:hover,.fl-color-picker-color:hover{background:0 0;border:2px solid transparent}.fl-color-picker-clear:focus,.fl-color-picker-color.fl-color-picker-empty:focus,.fl-color-picker-color:focus{outline:0;top:0;border:2px solid #00a0d2;background:0 0}.fl-color-picker.fl-color-picker-has-reset .fl-color-picker-color:not(.fl-color-picker-empty){border-top-right-radius:0;border-bottom-right-radius:0}.fl-color-picker-icon{display:none;margin:auto}.fl-color-picker-color.fl-color-picker-empty{border-color:transparent}.fl-color-picker-color.fl-color-picker-empty svg.fl-color-picker-icon{display:block}.fl-color-picker-color.fl-color-picker-empty svg.fl-color-picker-icon path{fill:inherit}.fl-color-picker-clear{box-sizing:border-box;position:relative;display:-ms-flexbox;display:flex;-ms-flex:0 0 36px;flex:0 0 36px;-ms-flex-pack:center;justify-content:center;padding:0;border:2px solid transparent;fill:#A2AABE;background-color:#E7EBEF;cursor:pointer;border-radius:0 4px 4px 0}.fl-color-picker-clear:hover{fill:#6B6E75;background-color:#E7EBEF}.fl-color-picker-color.fl-color-picker-empty+.fl-color-picker-clear{display:none}.fl-color-picker-ui{display:inline-block;font-family:Helvetica,Verdana,sans-serif;z-index:1;position:fixed;overflow:hidden;padding-bottom:45px;border:1px solid rgba(0,0,0,.1);color:#999;background-color:#FAFAFA;border-radius:3px;box-shadow:0 9px 20px rgba(0,0,0,.17);transition:opacity .2s,visibility .2s;visibility:hidden;opacity:0;-webkit-transform:translate3d(0,0,0)}.fl-color-picker-ui.fl-color-picker-active{visibility:visible;opacity:1;z-index:999999}.fl-color-picker-ui .fl-color-picker-input,.fl-color-picker-ui .fl-color-picker-input:focus{width:100%;height:30px;border:none!important;font-size:14px!important;padding:0 8px;vertical-align:middle;color:#656c6e;background-color:#fff;border-radius:0;box-shadow:none}.fl-color-picker-ui .iris-square-value{transition:none}.fl-color-picker-preset-add{position:absolute;top:8px;right:8px;width:14px;height:14px;background-color:#656c6e;border-radius:50%;cursor:pointer;transition:all .2s}.fl-color-picker-preset-add:hover{background-color:#333}.fl-color-picker-preset-add:after,.fl-color-picker-preset-add:before{content:'';display:block;position:relative;background-color:#fff}.fl-color-picker-preset-add:before{top:6px;left:3px;width:8px;height:2px}.fl-color-picker-preset-add:after{left:6px;top:1px;width:2px;height:8px}.fl-color-picker-presets{position:absolute;left:0;bottom:0;width:100%;z-index:15;overflow:auto;border-top:1px solid rgba(0,0,0,.1);background-color:#FAFAFA}.fl-color-picker-presets-list .fl-color-picker-preset:hover,.fl-color-picker-presets-toggle:hover{background-color:#EDEDED}.fl-color-picker-presets-toggle{position:relative;overflow:hidden;width:100%;height:35px;text-align:center;line-height:35px;font-size:12px;font-weight:700;cursor:pointer;transition:all .1s}.fl-color-picker-presets-close-label,.fl-color-picker-presets-open-label{position:absolute;top:50%;left:50%;visibility:hidden;color:#999;transition:all .5s;transform:translate(-50%,-50%);opacity:0;width:100%}.fl-color-picker-presets-close-label.fl-color-picker-active,.fl-color-picker-presets-open-label.fl-color-picker-active{color:#656c6e;visibility:visible;opacity:1;z-index:999999}.fl-color-picker-presets-list{width:100%;list-style:none;margin:0;padding:0;overflow:auto}.fl-color-picker-presets-list .fl-color-picker-no-preset,.fl-color-picker-presets-list .fl-color-picker-preset{position:relative;padding:5px;font-size:12px;border-top:1px solid rgba(0,0,0,.1);transition:all .1s}.fl-color-picker-presets-list .fl-color-picker-no-preset{padding:18px 5px;text-align:center}.fl-color-picker-presets-list .fl-color-picker-preset-color{display:inline-block;width:40px;height:20px;margin-right:3px;vertical-align:middle;border:1px solid rgba(0,0,0,.1);border-radius:2px;cursor:pointer}.fl-color-picker-presets-list .fl-color-picker-preset-label{vertical-align:middle;color:#333;cursor:pointer}.fl-color-picker-presets-list .fl-color-picker-preset-remove{position:absolute;top:50%;cursor:pointer;transform:translateY(-50%)}.fl-color-picker-clear .fl-color-picker-icon-remove{right:auto;top:auto;margin:auto}.fl-color-picker-presets-list .fl-color-picker-preset-remove{right:5px}.fl-color-picker-presets-list .fl-color-picker-preset-remove:hover:after,.fl-color-picker-presets-list .fl-color-picker-preset-remove:hover:before{background-color:#333}.fl-color-picker-added{position:absolute;width:100%;top:0;left:0;right:0;bottom:35px;z-index:10;color:#fff;text-align:center;background-color:rgba(0,0,0,.8)}.fl-color-picker-added-text{position:absolute;top:50%;left:50%;width:80%;font-size:14px;color:#fff!important;transform:translate(-50%,-50%)}.fl-color-picker-icon-check{position:relative;width:50px;height:50px;margin:5px auto}.fl-color-picker-icon-check:before{content:'';display:block;position:relative;width:15px;height:30px;margin-left:14px;border:7px solid #fff;border-left:none;border-top:none;transform:rotate(45deg)}.fl-color-picker-icon-arrow-down,.fl-color-picker-icon-arrow-up{display:inline-block;position:relative;width:10px;height:10px;margin-left:5px}.fl-color-picker-icon-arrow-down:before,.fl-color-picker-icon-arrow-up:before{content:'';display:block;position:relative;width:6px;height:6px;border:2px solid #999;border-left:none;border-top:none;transform:rotate(45deg)}.fl-color-picker-icon-arrow-up{top:2px;transform:rotate(180deg)}.fl-color-picker-icon-remove{width:15px;height:15px}.fl-color-picker-icon-remove:after,.fl-color-picker-icon-remove:before{content:'';display:block;position:relative;background-color:#6f7881}.fl-color-picker-icon-remove:before{left:6px;width:2px;height:10px;margin-top:3px;transform:rotate(-45deg)}.fl-color-picker-icon-remove:after{left:6px;width:2px;height:10px;margin-top:-10px;transform:rotate(45deg)}.fl-alpha-wrap{position:absolute;width:32px;height:215px;padding:0 5px;right:4px;border-top:none}.fl-alpha-slider{height:190px;position:absolute;top:12px;width:28px}.fl-alpha-slider .ui-slider-handle{background:rgba(0,0,0,0);border-color:#aaa;border-radius:4px;border-style:solid;border-width:4px;box-shadow:0 1px 2px rgba(0,0,0,.2);-moz-box-shadow:0 1px 2px rgba(0,0,0,.2);-webkit-box-shadow:0 1px 2px rgba(0,0,0,.2);cursor:ns-resize;height:12px;left:0;opacity:.9;position:absolute;right:0;width:30px;z-index:14}.fl-alpha-slider .ui-slider-handle:before{content:" ";position:absolute;left:-2px;right:-2px;top:-3px;bottom:-3px;border:2px solid #fff;border-radius:3px}.fl-theme-builder-preview-select-title i:before,body .fl-theme-builder-preview-select .fa-caret-down i:before,body .fl-theme-builder-preview-select-item-title i:before{content:"\f078"}.fl-alpha-slider-offset{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAAASCAYAAAAe/ZHXAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NkNEQUQ0ODM4RUE0MTFFNEExOEJFN0E5M0VFOTg0QUQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NkNEQUQ0ODQ4RUE0MTFFNEExOEJFN0E5M0VFOTg0QUQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo2Q0RBRDQ4MThFQTQxMUU0QTE4QkU3QTkzRUU5ODRBRCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo2Q0RBRDQ4MjhFQTQxMUU0QTE4QkU3QTkzRUU5ODRBRCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pv/r/N8AAAWYSURBVHjarFvvR3VBEN45JZGIPkREHyIiIhJJf3qUSERE9CGiDxERkcg9z9u92uucvTszz5z7xnHPj93Z2d359cxscn5+jpTS+EoiMr3/+51cZ2dn4+e29i2/u7y8RKf/pO3vc+o+n5ycoNK31+f6+jrfZ37yuG2mf3R01H3fa5N/b29vU6dP5qft0G4PDg5MGuPr/v4+jz1t27mfvN/b21P75+fHx8eZfiV/Ozs7rUJnSu/5+RlFv+m6ZJpbW1s1PnrvXl9fZ/qX89zY2LB4mfy+v7/nsdV1XltbK/dr5vnz87OcV5bJabuVlRVLBifjfX9/l/xkGtM+S0tLNXnu0szfU/P3IMn/k0678h6ddqjQFGccVL6hoCsVfsq+NZ5QtCv5rfFS41sq37W+UPhMyhxEWTetvce3NR8oewqD39qalXuGAK/WPltjajIC4x2c9Ye1f43SGcqGwRBeTZjhMNntL4pCWZMQYhE05RVl02EovRgC4RkCbUNSQAGhGB/GsKG4h6FQoigDa2i8fRBy3uLMXYIG3Vr3aZvRaCRdBYlYIMZywhBGCVhgzzOlgRuUSOvC0GMEWxOM/+EtQFh1OIIXtfwg1tRaayGjg5px0jyZKEaTle3e+AsLCygVRAh3FlEgKbReE3oYGj9EgIR00QiEgKw3ZBQbRGjBeAMtDETQmHiKDsezJNLgCTFGItZXlAgCSiQggblP+9c8SDI0lXWlFv5g3K63KZ51FOcZzthQ3LomoNHwJmKIQISI3vqzSpwIQ8liSjGMFQjDpoVgaQ6cWgvLhOC7qiAwiHrWbEg4JMSmeUrBuHoYwioOQNXmhmAcrs096s1gJCGi3hSEVU8DQxYElYHhKwUUGAa+NqOBMsSSAQJuhQhCAH4vxozExsxiihPuaIrjCVYKWlYEsjSM52G8Kxxryngl5j0j+EyGTIiED4s1Itm0ZGWxMFCLJaBAcEI6OBkmFgNBoc8Cait2ZnENE/6wQN8LJSJeSMNAjKVm+LUMAIt3PR5AQgIGp1Z5zxhE8PtXUYReYeXi4mKmOPNXBMzt2tPT07LIUtJqr66uusXEbkFnWiQ6Pj72ikrtzc1NKopuvbbj58PDwxqNHp27u7tuYWumUDV+v7+/Xyu6pc59+/DwUCsC9ujt7u6qRbt8//T01C3elbyN70fb29uZ/1FSincvLy/lPGb42tzc9IqJeHt7q61Pr2C6vr7u7tfHx8fMPhV0sLq6WhZtU0n36+uru8elPE7aLi8v1wqJPXn++fmZKYgX8ozFxcXJb0NaQTHClZT8+gBjsYdaFc+zWcUkGTCWENY66ta92oSVzo3WI6IZKGtukeyfBLFKBNAj6bUOBgaoe9wE4n04IBNkLMoC7+Skj630ZlTJMYdyMsU2T8AwpzALkVFilZgJcT2l9PCWDDSAMBSjVlJgZNk0lE1AIby0qCiCnBQNj6aBGQslZIZJ5hB6D/AzQHto5Z9Nk8tARdN4q2ExBnsyIJ311EymShyjan2rKk0zh1Ay1oQVWAZQRnkUA8RFw7TahjBnmNgMVMQrsCGZJezRtGlU0cUZ1zuaxGZPpbhApM+ZpFQqQ6xadoMtBrEKpBVo4GRXvNSxpaRixKiR+TChCYhsDwZkfFj8IkErjAHejcUI0XQrgwehhNSMHAz21E0wZ23FcCAmj8Sd/PXy2xLYLAuwRw4IMsqjFaWYOpMEhDySAPFCWyFkgAHrEcA+BNeJ4UE8HCzJPpCrerUmQIx1pWJkjqxJD8EikUo2c5aI8ZYgsAkM4WQtnHd0ns0ORgVTBghy5ISy928SGsbTMqYg523RUY8oNYG4FIYiyRyZCnFCJC87IoRAIMVOqQ7BKexxCS2hYVl9JhvlpYjnAe4MhmRPMWhhvLfXINaI9WKM0Zu0+SfAAFLE1EgfVSv7AAAAAElFTkSuQmCC) center;box-shadow:0 0 5px rgba(0,0,0,.4) inset;-moz-box-shadow:0 0 5px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 5px rgba(0,0,0,.4) inset;width:200px;height:22px;transform:rotate(-90deg);bottom:48%;left:-80px;position:absolute}.fl-alpha-text{width:30px;font-size:12px;text-align:center;color:#999;position:absolute;bottom:-5px}.fl-lightbox-mask,.fl-lightbox-wrap{bottom:0;left:0;position:fixed;right:0;z-index:100010}@keyframes fl-lightbox-zoom{from{transform:scale(.4)}to{transform:scale(1)}}.fl-lightbox-wrap{display:none;overflow:auto;padding:0;top:43px;-webkit-backface-visibility:hidden;-webkit-transform:translateZ(0);pointer-events:none}.fl-builder-draggable-is-dragging .fl-lightbox-wrap,.fl-builder-resizable-is-resizing .fl-lightbox-wrap,.fl-lightbox,.fl-lightbox-mask{pointer-events:auto}.fl-lightbox-mask{background:#000;opacity:.7;filter:alpha(opacity=70);top:0}.fl-lightbox{background:#F5F7F9;border-radius:4px;box-shadow:rgba(0,0,0,1) 0 4px 30px;-moz-box-shadow:rgba(0,0,0,1) 0 4px 30px;-webkit-box-shadow:rgba(0,0,0,1) 0 4px 30px;position:relative;display:-ms-flexbox;display:flex;z-index:100011;transform-origin:center;animation-name:fl-lightbox-zoom;animation-duration:.25s}.fl-lightbox.fl-lightbox-prevent-animation{animation-duration:0s;-moz-animation-duration:0s;-webkit-animation-duration:0s;-o-animation-duration:0s}.fl-lightbox :not(i){color:#333;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:12px;line-height:14px;text-decoration:none;text-transform:none}.fl-lightbox *,.fl-lightbox :after,.fl-lightbox :before{box-sizing:content-box}#fl-ui-root .fl-nanoscroller-pane,.fl-builder--content-library-panel .fl-nanoscroller-pane,.fl-lightbox .fl-nanoscroller-pane{bottom:2px;right:2px;width:6px}.fl-nanoscroller>.fl-nanoscroller-pane>.fl-nanoscroller-slider{background-color:#bac0ca;transition-property:height,background-color;transition-duration:.25s}#wpadminbar,html{transition-duration:.35s}.fl-nanoscroller>.fl-nanoscroller-pane>.fl-nanoscroller-slider:hover{background-color:#c8cdd4}.fl-nanoscroller>.fl-nanoscroller-pane.active>.fl-nanoscroller-slider{background-color:#029fd2}.fl-lightbox .dashicons{font-family:dashicons}.fl-lightbox.ui-draggable{box-shadow:rgba(0,0,0,.2) 0 7px 30px;-moz-box-shadow:rgba(0,0,0,.2) 0 7px 30px;-webkit-box-shadow:rgba(0,0,0,.2) 0 7px 30px}#wpadminbar,.fl-builder-bar.is-hidden{pointer-events:none}.fl-lightbox-resizable{height:500px;width:380px}@media (max-width:500px){.fl-lightbox-resizable{left:0!important;right:0!important;top:0!important;height:100%!important;width:100%!important}.fl-lightbox-resizable .ui-resizable-handle{display:none!important}.fl-lightbox.ui-draggable .fl-lightbox-header{cursor:default!important}.fl-lightbox-controls{display:none}}.fl-lightbox-width-full{left:0!important;right:0!important;top:0!important;height:100%!important;width:100%!important}.fl-lightbox-width-full .fl-lightbox-header{cursor:inherit!important}.fl-lightbox-controls{position:absolute;right:10px;top:10px;z-index:5}.fl-lightbox-controls .fa{color:#bdbdbd;font-size:14px;padding:5px}.fl-lightbox-controls .fa:hover{color:#aaa;cursor:pointer}.fl-lightbox-header-wrap{border-top-left-radius:4px;border-top-right-radius:4px}.fl-lightbox-header{position:relative}.fl-lightbox-header h1{color:#333!important;font-size:16px!important;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif!important;font-weight:400!important;margin:0!important;padding:14px 34px 15px 28px!important;text-align:left!important;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center;line-height:1}.fl-lightbox.ui-draggable .fl-lightbox-header{cursor:move}.fl-lightbox-header h1 .fl-builder-badge{margin-left:10px;color:#fff;background-color:#F7A408}.fl-lightbox-content,.fl-lightbox-content-wrap{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex:1 100%;flex:1 100%;max-width:100%}.fl-lightbox-footer{box-sizing:border-box;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:end;justify-content:flex-end;-ms-flex:0 0;flex:0 0;-ms-flex-preferred-size:44px;flex-basis:44px;padding:4px;text-align:right}.fl-lightbox-footer .fl-builder-button{height:36px;margin-left:5px!important;-ms-flex:0 0 0%;flex:0 0 0%;-ms-flex-pack:center;justify-content:center}.fl-lightbox-width-slim .fl-lightbox-footer{-ms-flex-pack:stretch;justify-content:stretch;padding:4px 5px}.fl-lightbox-width-slim .fl-lightbox-footer .fl-builder-button{-ms-flex:1 1 100%;flex:1 1 100%;display:block;text-align:center}.fl-lightbox-width-slim .fl-lightbox-footer .fl-builder-button:first-child{margin-left:0!important}.fl-lightbox table,.fl-lightbox td,.fl-lightbox th,.fl-lightbox tr{border:none}.fl-lightbox-wrap.fl-icon-selector{z-index:1000111}.fl-icon-selector .fl-lightbox{height:100%}.fl-icons-filter{height:auto!important;margin:0!important;position:absolute!important;right:0;top:0;padding:10px 16px;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.fl-icons-filter select{vertical-align:middle;width:195px;-webkit-appearance:none;-moz-appearance:none;appearance:none;box-sizing:border-box;color:#000;border:2px solid #e4e7ea!important;border-right:none!important;margin:0;padding:2px 10px;background:url(../img/svg/select-arrow-down-alt2.svg) center right 10px no-repeat #fff!important;-ms-flex:1 1 195px;flex:1 1 195px;border-radius:0}.fl-icons-filter input[type=text]{line-height:18px;vertical-align:middle;width:160px;-ms-flex:1 1 160px;flex:1 1 160px;border:2px solid #e4e7ea!important;border-radius:0!important;padding:2px 10px!important}.fl-icons-filter input[type=text]:focus,.fl-icons-filter select:focus{border:2px solid #00A0D2!important}.fl-icons-list{bottom:52px;left:0;overflow:auto;padding:20px;position:absolute;right:0;top:48px}.fl-icons-list::-webkit-scrollbar{background-color:#ccc;-webkit-appearance:none;width:10px}.fl-icons-list::-webkit-scrollbar-thumb{background-color:#666;border:1px solid #ccc}.fl-icons-section{text-align:center}.fl-icons-section h2{border-bottom:1px solid #dfdfdf;color:#333!important;font-family:Helvetica,Verdana,sans-serif!important;font-size:16px!important;font-weight:700!important;margin:0 0 20px!important;padding:0 0 10px!important;text-align:left}.fl-icons-list i,.fl-icons-list i:before{cursor:pointer;display:inline-block;font-size:40px;height:100px;line-height:100px;width:100px;background:0 0}.fl-icons-list i:hover{background:#fff;box-shadow:0 10px 20px rgba(0,0,0,.15);border-radius:4px}.fl-icon-selector-footer{bottom:0;left:0;position:absolute;right:0}html{transition-property:margin}html.fl-builder-is-showing-toolbar{margin-top:calc(44px + 1px)!important}.fl-builder-edit body{position:static!important}.fl-builder-edit:after,.fl-builder-edit:before{z-index:0!important}.fl-builder-edit .fl-builder-content{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-touch-callout:none}#wpadminbar{transition-property:transform,opacity;transform-origin:bottom;transform-style:preserve-3d;transform:rotateX(89deg) translateY(46px);opacity:0;will-change:transform}html.fl-builder-show-admin-bar{margin-top:32px}html.fl-builder-show-admin-bar #wpadminbar{transform:rotateX(0) translateY(0);pointer-events:auto;opacity:1}@media screen and (max-width:782px){html.fl-builder-show-admin-bar{margin-top:46px}}.fl-clear{clear:both}.screen-reader-text{position:absolute;left:-1000em;top:-1000em;height:1px;width:1px;overflow:hidden}.fl-builder-loading{background:url(../img/ajax-loader.svg) center center no-repeat rgba(240,240,240,.8);bottom:0;display:none;left:0;position:fixed;right:0;text-align:center;top:0;z-index:12000000}.fl-builder-settings .fl-builder-loading{background:url(../img/ajax-loader.svg) center center no-repeat rgba(255,255,255,.8);display:block;position:absolute}.fl-field-loader{color:#B3B3B3!important;font-style:italic}.fl-builder-node-loading{opacity:.35!important}.fl-builder-node-loading-placeholder{background:url(../img/ajax-loader.svg) center center no-repeat;height:50px}.fl-col-group-has-child-loading{display:-ms-flexbox;display:flex}.fl-col-group-has-child-loading>.fl-builder-node-loading-placeholder{width:50px}.fl-node-hidden{display:none}.fl-builder-edit .fl-node-hidden{display:block}html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-visible-desktop,html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-visible-desktop-medium,html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-visible-medium,html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-visible-medium-mobile,html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-visible-mobile{display:block!important}html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-col-group-equal-height .fl-col.fl-visible-desktop,html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-col-group-equal-height .fl-col.fl-visible-desktop-medium,html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-col-group-equal-height .fl-col.fl-visible-medium,html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-col-group-equal-height .fl-col.fl-visible-medium-mobile,html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-col-group-equal-height .fl-col.fl-visible-mobile{display:-ms-flexbox!important;display:flex!important}.fl-responsive-preview-enabled body{overflow:hidden!important}.fl-responsive-preview-mask{background:#F7F7F7;bottom:0;left:0;position:fixed;right:0;top:0;z-index:99999}.fl-responsive-preview{bottom:0;left:0;position:fixed;right:0;top:0;margin-top:50px;z-index:100000}.fl-builder-preview .fl-responsive-preview{margin:0!important}.fl-responsive-preview-content{background:#F5F7F9;padding:20px 20px 45px;overflow:scroll;position:absolute;top:45px;right:0;bottom:0;left:0}.fl-responsive-preview-content .fl-builder-content-editing{overflow:visible!important}.fl-responsive-preview-message{background:#F5F7F9;color:#b3b3b3;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif!important;font-size:14px;font-weight:400;padding:15px;text-align:center;position:absolute;top:0;left:0;right:0;z-index:999999}.fl-responsive-preview-message span{display:inline-block;margin-right:8px}.fl-responsive-preview-message .fl-builder-button{display:inline-block;margin-left:2px;padding:0 10px}.fl-responsive-preview-message .fl-builder-button i{font-size:14px;height:14px;width:14px}.fl-responsive-preview .fl-builder-content{box-shadow:0 0 8px rgba(0,0,0,.2);margin-left:auto;margin-right:auto;max-width:100%;overflow:visible;position:relative}#fl-builder-preview-frame,#fl-builder-preview-mask{bottom:0;height:100%;position:fixed;top:0;width:100%;right:0}.fl-responsive-preview .fl-block-col-resize{display:none}.fl-builder-button,body .fl-builder-bar .fl-builder-bar-content{display:-ms-flexbox;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif!important}#fl-builder-preview-mask{background:url(../img/ajax-loader.svg) center center no-repeat #F7F7F7;left:0;z-index:999999}#fl-builder-preview-frame{left:50%;transform:translateX(-50%);-moz-transform:translateX(-50%);-webkit-transform:translateX(-50%);z-index:1000000}body button[class*=fl-builder],body button[class*=fl-builder]:focus,body button[class*=fl-builder]:hover{box-shadow:none;max-height:none;max-width:none;text-decoration:none;text-indent:0;text-shadow:none;text-transform:none}.fl-builder-button{-webkit-appearance:none;-ms-flex-align:center;align-items:center;background:#e7ebef;border:2px solid transparent;border-radius:3px;-webkit-border-radius:3px;box-sizing:border-box!important;-webkit-box-sizing:border-box!important;-moz-box-sizing:border-box!important;color:#676F7A!important;cursor:pointer;display:flex;fill:#676F7A!important;font-size:14px!important;font-style:normal!important;font-weight:500!important;height:33px;letter-spacing:normal!important;line-height:1!important;margin:0;padding:0 12px;text-align:center;transition-property:background-color,width;transition-duration:.2s;white-space:nowrap;width:auto;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fl-builder--search-results-panel,.fl-builder-bar,.fl-builder-panel{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-touch-callout:none}.fl-builder-button:hover{background:#dadfe5;color:#222;border:2px solid transparent!important}.fl-builder-button:active{background:#DCDCDC}button.fl-builder-button:focus{position:static;top:auto;outline:0;background:#E4E7EA;border:2px solid #00A0D0!important}.fl-builder-bar .fl-builder-button{height:auto}.fl-builder-button-primary,body.fl-builder--layout-has-drafted-changes .fl-builder-done-button{background:#00A0D2;color:#fff!important;text-decoration:none;border:2px solid transparent!important}.fl-builder-button.fl-builder-button-primary:focus,body.fl-builder--layout-has-drafted-changes .fl-builder-button.fl-builder-done-button:focus{background:#00A0D2;border:2px solid #ffc217!important}.fl-builder-button-primary:hover,body.fl-builder--layout-has-drafted-changes .fl-builder-done-button:hover{background:#0197C6;color:#fff!important}.fl-builder-button-primary:active,body.fl-builder--layout-has-drafted-changes .fl-builder-done-button:active{background:#0484AC}.fl-builder-button-large{height:30px}.fl-builder-button-small{font-size:11px!important;line-height:1!important}.fl-builder-help-button{color:#b3b3b3;font-size:16px!important}.fl-builder-help-button i{position:relative;top:-1px}.fl-builder-help-button:hover{color:#666}.fl-builder-publish-button{line-height:45px!important}.fl-builder-content-panel-button,.fl-builder-content-panel-button:hover{fill:#00A0D2!important;font-size:30px!important;padding-bottom:4px}.fl-builder-button-silent,.fl-builder-button-silent:hover{padding:0 12px;background:0 0!important;border:2px solid transparent!important;box-shadow:none!important}.fl-builder-done-button,.fl-builder-done-button:hover{font-weight:600}.fl-field .fl-builder-button{display:inline-block;height:auto;padding:11px 12px;vertical-align:middle;box-shadow:0 2px 4px 0 rgba(0,0,0,.12)}.fl-builder-badge{background:#333;border-radius:2px;color:#fff!important;display:inline;font-size:11px!important;font-weight:400;letter-spacing:1px;margin-left:2px;padding:2px 4px;vertical-align:middle}.fl-builder-badge-global{background:#ff9600;transform:translateY(0);transition-duration:.25s;transition-property:transform}.fl-builder-blocks-node-template .fl-builder-badge-global{position:absolute;right:0;top:0}.fl-builder-block:hover .fl-builder-badge-global{display:none}.fl-builder-bar{left:0;position:fixed;right:0;top:0;z-index:999999;user-select:none;transition-property:transform opacity;transition-duration:.35s;transform-style:preserve-3d;perspective:1100px}.fl-builder-bar.is-hidden .fl-builder-bar-content{transform:translateY(-100%) rotateX(90deg)}body .fl-builder-bar .fl-builder-bar-content{display:flex;box-sizing:border-box;background:#fff;border-bottom:1px solid #eceef1;color:#999;font-size:14px!important;height:calc(44px + 1px);transition-property:background-color,opacity,transform;transition-duration:.35s;pointer-events:auto}.fl-builder-draggable-is-dragging .fl-builder-content,.fl-builder-draggable-is-dragging .fl-builder-panel .fl-lightbox,.fl-builder-resizable-is-resizing .fl-builder-content,.fl-builder-resizable-is-resizing .fl-builder-panel .fl-lightbox,body .fl-builder-bar .fl-builder-bar-content.is-muted{pointer-events:none}body .fl-builder-bar .fl-builder-bar-content.is-muted>:not(.fl-builder-publish-actions){-webkit-filter:saturate(20%) blur(1px);filter:saturate(20%) blur(1px);opacity:.4}.fl-builder-bar-title{box-sizing:border-box;color:#333;display:-ms-flexbox;display:flex;-ms-flex:0 0 380px;flex:0 0 380px;max-width:380px;border-right:1px solid #eceef1;cursor:pointer}.fl-builder-bar-title:hover{background:#fff}.fl-builder-bar-title.is-showing-menu .fl-builder-bar-title-caret>svg{transform:rotate(180deg)}.fl-builder-simple .fl-builder-bar-title{cursor:auto}.fl-builder-simple .fl-builder-bar-title:hover{cursor:auto;background:0 0}.fl-builder-bar-title span{vertical-align:middle}.fl-builder-bar-title-icon{box-sizing:border-box;background:0 0;-ms-flex:0 0 46px;flex:0 0 46px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:4px}.fl-builder-bar-title-icon img{max-width:100%!important;height:auto!important}.fl-builder-bar-title.fl-builder-bar-title-no-icon{padding-left:12px}.fl-builder-bar-title-area{box-sizing:border-box;-ms-flex:1 1 100%;flex:1 1 100%;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;overflow:hidden;padding:4px}.fl-builder-layout-title,.fl-theme-builder-preview-select .fl-theme-builder-preview-select-title span{font-size:16px;font-weight:400;line-height:1.3;color:#161B20;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.fl-builder-bar-title-caret,.fl-builder-layout-pretitle,.fl-theme-builder-preview-select .fl-theme-builder-preview-select-title{font-size:12px;font-weight:500;line-height:1.3;color:#656d77;text-align:left;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.fl-builder-bar-title-caret i,.fl-theme-builder-preview-select-title i{color:inherit!important;font-size:14px}.fl-builder-bar-title-caret{margin-left:auto!important;-ms-flex:0 0 46px;flex:0 0 46px}.fl-theme-builder-preview-select-title i{padding:12px}.fl-theme-builder-preview-select.fl-builder-button{position:relative;border-radius:0;background:0 0;min-width:0;display:-ms-flexbox;display:flex;-ms-flex:0 0 360px;flex:0 0 360px;max-width:360px;margin:0!important;padding:4px 10px;border:none!important;border-right:2px solid #d5dadd!important;box-shadow:none}.fl-theme-builder-preview-select.fl-builder-button:hover{border:none!important;border-right:2px solid #d5dadd!important}.fl-theme-builder-preview-select .fl-theme-builder-preview-select-title{display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-pack:end;justify-content:flex-end;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.fl-theme-builder-preview-select-title div{-ms-flex:1;flex:1}.fl-theme-builder-preview-select .fl-theme-builder-preview-select-title span{display:block}.fl-theme-builder-preview-select-open .fl-theme-builder-preview-select-items{position:absolute;top:calc(48px + 10px);left:10px;width:calc(100% - 20px)!important;background:#fff;border-radius:4px;border:2px solid #D5DADD;border-top:3px solid #00a0d2;box-shadow:0 15px 45px 8px rgba(0,0,0,.04);margin:0!important;padding:0;z-index:-1;font-size:16px;overflow-y:scroll;height:auto!important;max-height:calc(100vh - 66px);min-height:300px;display:-ms-flexbox!important;display:flex!important;-ms-flex-direction:column;flex-direction:column}.fl-theme-builder-preview-select-item{padding:4px 0!important;border-bottom:none!important;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;text-align:initial}.fl-theme-builder-preview-select-item:hover{text-decoration:none;color:#111;background:0 0!important}body .fl-theme-builder-preview-select .fa-caret-down{float:none}body .fl-theme-builder-preview-select-item-title{padding:10px 15px;color:#222;font-size:14px}body .fl-theme-builder-preview-select-item-children{overflow:auto}body .fl-theme-builder-preview-select-item-child{overflow:hidden;text-overflow:ellipsis;line-height:1.1;margin:0 10px;border:2px solid transparent;border-radius:4px;padding:8px 10px 10px;font-size:14px;font-weight:400;color:#222}body .fl-theme-builder-preview-select-item-child:hover{background:#e6eaed!important}.fl-theme-builder-preview-select-item .fa-caret-down{color:#606D77}.fl-builder-bar-actions{display:-ms-flexbox;display:flex;-ms-flex-direction:row-reverse;flex-direction:row-reverse;-ms-flex:1 1 100%;flex:1 1 100%;padding:4px}.fl-builder-bar .fl-builder-button{margin:0 0 0 4px}.fl-builder-bar-actions .fl-builder-button:last-child{margin:0}.fl-builder-bar-actions:after{clear:both}.fl-builder-bar .fl-builder-content-panel-button{-ms-flex-align:baseline!important;align-items:baseline!important;padding-top:1px;font-weight:400}.fl-builder-content-panel-button svg{transition-property:transform;transition-duration:.25s;transform:rotate(0) scale(1);transform-origin:center}.fl-builder-content-panel-is-showing .fl-builder-content-panel-button svg{transform:rotate(135deg) scale(1.1) translate(.5px,-.5px)}.fl-builder--saving-indicator{cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-item-align:center;align-self:center;padding:0 10px;font-size:12px;font-style:italic;color:#676f7a;-ms-flex-align:center;align-items:center;line-height:1.2;min-width:180px;-ms-flex-pack:end;justify-content:flex-end}.fl-builder--saving-indicator:hover{color:#676f7a}.fl-builder--saving-indicator .fa-question-circle{font-size:13px;margin:3px 0 3px 5px}.fl-builder-buy-button,.fl-builder-feedback-button,.fl-builder-upgrade-button{background:#F7A407;color:#fff!important;text-decoration:none}.fl-builder-buy-button i.fa-external-link-alt,.fl-builder-feedback-button i.fa-external-link-alt,.fl-builder-upgrade-button i.fa-external-link-alt{color:#FFC733;margin:0 0 0 6px}.fl-builder-buy-button:hover,.fl-builder-feedback-button:hover,.fl-builder-upgrade-button:hover{background:#EE8E0D;color:#fff!important}@media (max-width:980px){.fl-builder--main-menu-panel{width:calc(100% - 20px)!important}.fl-builder--main-menu-panel:before{right:auto;left:20px}.fl-builder-bar-title,.fl-theme-builder-preview-select{-ms-flex:1 .5 380px!important;flex:1 .5 380px!important}}@media (max-width:620px){.fl-theme-builder-preview-select.fl-builder-button{display:none}}@media (max-width:500px){#fl-builder-toggle-notifications,.fl-builder--main-menu-panel:before,.fl-builder--panel-arrow,.fl-builder-bar-title-area,.fl-builder-panel-drag-handle,.fl-builder-panel:before{display:none}.fl-builder--main-menu-panel,.fl-builder-panel{width:auto!important;top:44px!important;left:0!important;right:0!important;bottom:0!important;border-radius:0!important;box-shadow:none!important}.fl-builder--main-menu-panel{border-left:transparent!important;border-right:transparent!important;border-bottom:transparent!important;max-height:calc(100% - 44px)!important}.fl-builder-bar-title{-ms-flex:0 0 80px!important;flex:0 0 80px!important}.fl-builder-bar-title-caret{padding-left:0;padding-right:0;max-width:24px}.fl-builder-bar-actions{max-width:calc(100% - 80px);overflow:hidden}.fl-builder--panel-header{border-radius:0!important;cursor:default!important}.fl-builder--panel-header .fl-builder--tabs{cursor:default!important}.fl-builder-publish-actions{width:100%!important;padding-left:4px!important}.fl-builder-bar-actions .fl-builder-button{padding:0 8px!important}}.fl-builder--preview-actions{display:none;position:fixed;top:4px;left:4px;z-index:10000001;padding:4px;-ms-flex-pack:center;justify-content:center;background:#fff;border-radius:4px}.fl-builder-preview .fl-builder--preview-actions{display:-ms-flexbox;display:flex}.fl-builder--preview-actions .device-icons{color:#555;background:#e4e4e4;border:none!important;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;text-decoration:none;font-size:14px!important;line-height:1!important;margin:0 4px 0 0;padding:0 6px;cursor:pointer;-webkit-border-radius:3px;-webkit-appearance:none;border-radius:3px}.fl-builder--preview-actions .device-icons i{margin:0 6px}@keyframes fl-builder-ui-pin-zone-pulse{0%,100%{opacity:1;filter:alpha( opacity=1 )}50%{opacity:.5;filter:alpha( opacity=35 )}}.fl-builder-ui-pin-zone{animation:fl-builder-ui-pin-zone-pulse 2s infinite;transition:width .3s ease;background:rgba(0,160,210,.5);bottom:0;top:0;position:fixed;width:35px;z-index:100001}.fl-builder-ui-show-pin-zone-left .fl-builder-ui-pin-zone-left,.fl-builder-ui-show-pin-zone-right .fl-builder-ui-pin-zone-right{width:75px}.fl-builder-ui-pin-zone-left{left:0}.fl-builder-ui-pin-zone-right{right:0}.fl-builder-content-panel-pin-zone .fl-builder-content-panel-button{display:-ms-flexbox!important;display:flex!important;background:rgba(0,160,210,.5)!important;padding:2px 4px;width:80px;animation:fl-builder-ui-pin-zone-pulse 2s infinite}.fl-builder-content-panel-pin-zone .fl-builder-content-panel-button svg{display:none}.fl-builder-content-panel-pin-zone-hover .fl-builder-content-panel-button{width:120px}.fl-builder-content-panel-pin-zone-hover .fl-builder-content-panel-button svg{display:none!important;width:100%;transform:none!important;fill:#00A0D2!important;border-radius:3px}.fl-builder-ui-is-pinned .fl-builder-content-panel-button,.fl-builder-ui-pinned-container .fl-lightbox-controls{display:none}.fl-builder-content-panel-pin-zone .fl-builder-done-button{-webkit-filter:grayscale(100%);filter:grayscale(100%)}.fl-builder-panel.fl-builder-ui-pinned{top:45px!important;bottom:0!important;height:auto!important;border-radius:0;border:none;box-shadow:none;animation-duration:0s;-moz-animation-duration:0s;-webkit-animation-duration:0s;-o-animation-duration:0s;z-index:11}.fl-builder-panel.fl-builder-ui-pinned-right{left:auto!important;right:0;border-left:1px solid #eceef1}.fl-builder-panel.fl-builder-ui-pinned-left{left:0;right:auto;border-right:1px solid #eceef1}.fl-builder-panel.fl-builder-ui-pinned .fl-builder--panel-header{border-radius:0!important}.fl-builder-ui-pinned-container .fl-lightbox-wrap{position:absolute;z-index:11}.fl-builder-ui-pinned-container .fl-lightbox{position:absolute;top:0;bottom:0;left:0;right:0;width:auto!important;height:auto;border-radius:0;box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none;animation-duration:0s;-moz-animation-duration:0s;-webkit-animation-duration:0s;-o-animation-duration:0s}.fl-builder-ui-pinned-container .fl-lightbox-header-wrap{border-radius:0}.fl-builder-ui-pinned-container .fl-lightbox.ui-draggable .fl-lightbox-header{cursor:auto}.fl-builder-ui-pinned-container .fl-lightbox-header h1{padding:12px 20px 10px!important}.fl-builder-ui-pinned-content-transform{transform:scale(1);transform-origin:center top 0}.fl-builder-ui-pinned-collapse{cursor:pointer;display:none;position:absolute!important;bottom:2px;padding:5px;border:2px solid transparent;background:0 0;width:36px;height:36px;border-radius:4px;fill:#778794;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:center;justify-content:center}.fl-builder-ui-pinned-collapse:focus,.fl-builder-ui-pinned-collapse:hover{top:auto!important;background:0 0;border:2px solid transparent;outline:0;fill:#00A0D2}.fl-builder-ui-pinned-collapse:focus{background:#E4E7EA}.fl-builder-ui-pinned-collapse>*{margin:auto;line-height:1}.fl-builder-ui-pinned-collapse svg g{fill:inherit}.fl-builder-ui-is-pinned-right .fl-builder-ui-pinned-right-collapse{display:-ms-flexbox;display:flex;left:-40px}.fl-builder-ui-is-pinned-left .fl-builder-ui-pinned-left-collapse{display:-ms-flexbox;display:flex;right:-40px}.fl-builder-ui-pinned-collapse i[data-toggle=show],.fl-builder-ui-pinned-is-collapsed i[data-toggle=hide]{display:none}.fl-builder-ui-pinned-is-collapsed i[data-toggle=show]{display:block}.fl-builder--panel-no-settings,.fl-builder-simple-pinned .fl-builder--content-library-panel .fl-builder--panel-content,.fl-builder-simple-pinned .fl-builder--content-library-panel .fl-builder--panel-controls,.fl-builder-simple-pinned .fl-builder--content-library-panel .fl-builder--tab-wrap,.fl-builder-ui-pinned-is-collapsed .fl-builder--panel-header{display:none}.fl-builder-ui-is-pinned-left [data-toggle=hide],.fl-builder-ui-is-pinned-right [data-toggle=show]{transform:rotateY(180deg)}.fl-builder-ui-pinned-is-collapsed .fl-lightbox{box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none}.fl-builder-simple-pinned .fl-builder--content-library-panel .fl-builder--panel-header{background:0 0;border:none;z-index:10}.fl-builder-simple-pinned .fl-builder--content-library-panel .fl-lightbox-wrap{top:0}.fl-builder-simple-pinned .fl-builder--content-library-panel .fl-lightbox-header h1{padding:14px 28px 15px!important}.fl-builder-simple-pinned .fl-builder--panel-no-settings{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;position:absolute;top:0;left:0;right:0;bottom:0}@keyframes fl-builder-show-panel{from{transform:scale(.8)}to{transform:scale(1)}}.fl-builder--search-results-panel,.fl-builder-panel{box-sizing:border-box;position:fixed!important;right:20px;top:calc(43px + 10px);width:380px;bottom:20px;background:#F5F7F9;color:#676F7A;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:14px;border-radius:4px;box-shadow:0 8px 40px 4px rgba(0,0,0,.3);z-index:10000007;will-change:transform;user-select:none}.fl-builder-panel{transform-origin:top right;animation-name:fl-builder-show-panel;animation-duration:.15s;animation-fill-mode:both;-ms-flex:1;flex:1;display:none}.fl-builder--search-results-panel{display:none;position:absolute;right:0;top:93px;left:0;bottom:0;width:auto!important;border:none;border-radius:0;box-shadow:none;min-height:100px;max-height:calc(100vh - 54px);overflow:auto;z-index:1}.fl-builder-content-panel-is-showing .fl-builder-panel,.fl-builder-search-results-panel-is-showing .fl-builder--search-results-panel{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.fl-builder-panel .fl-lightbox .fl-builder-panel-drag-handle,.fl-builder-ui-is-pinned .fl-builder--panel-arrow,.fl-lightbox-width-full .fl-builder-panel-drag-handle,body.fl-builder-draggable-is-dragging .fl-builder--panel-arrow{display:none}.fl-builder--search-results-panel .fl-builder--no-results{text-align:center;padding:50px 20px}.fl-builder--panel-arrow{position:absolute;top:-13px;right:10px}.fl-builder--panel-arrow polygon{fill:#00a0d2}.fl-builder--panel-header{border-top:3px solid #00a0d2;border-top-right-radius:4px;border-top-left-radius:4px}.fl-builder-ui-is-pinned .fl-builder--panel-header{border-top:none}.fl-builder-panel-drag-handle{position:absolute;top:7px;left:10px;fill:#ccd4da;width:6px}.fl-builder-ui-is-pinned-left .fl-builder-panel-drag-handle{left:auto;right:10px}.fl-builder--panel-header .fl-builder--panel-controls{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;position:relative}.fl-builder--panel-header .fl-builder--panel-controls .fl-builder-content-group-select{-ms-flex:1 1;flex:1 1}.fl-builder--panel-header .fl-builder--panel-controls .fl-builder-panel-search{-ms-flex:0 0;flex:0 0;padding:0 10px 6px 0;margin-left:-4px}.fl-builder--panel-controls .fl-builder-panel-search button{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:30px;background:0 0!important;border:2px solid transparent!important;font-size:inherit;height:36px;margin:0;padding:0}.fl-builder--panel-controls .fl-builder-panel-search button:active,.fl-builder--panel-controls .fl-builder-panel-search button:focus{top:0;outline:0}.fl-builder-panel-search button svg{height:auto;width:20px}.fl-builder-panel-search button.fl-builder-dismiss-panel-search svg{width:16px}.fl-builder-panel-search button svg .filled-shape{fill:#000}.fl-builder--panel-controls .fl-builder-panel-search button:active svg .filled-shape,.fl-builder--panel-controls .fl-builder-panel-search button:focus svg .filled-shape{fill:#00A0D2}.fl-builder-panel-search .fl-builder-panel-search-input{display:none;position:absolute;top:0;left:0;right:0;bottom:0;background:#f5f7f9}.fl-builder-panel-search.is-showing-input .fl-builder-panel-search-input{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;padding:0 10px 6px}.fl-builder-panel-search-input input{-ms-flex:1 1 100%;flex:1 1 100%;border:2px solid #e6eaed;background:#fff;border-radius:4px;margin:0 4px 0 0;padding:10px;color:#333}.fl-builder-panel-search-input input:focus{border-color:#0197C6;outline:0}.fl-builder-panel-content-wrap{bottom:0;height:auto;left:0;overflow:hidden;position:absolute;right:0;top:43px}.fl-builder-panel-content{padding-bottom:60px}.fl-builder--panel-view .fl-builder-blocks-section:first-child{border-top:none}.fl-builder-blocks-group:first-child{padding:20px 0 0}.fl-builder-blocks-group .fl-builder-blocks-section-group-name{display:block;padding:0 30px 15px;color:#000;font-size:20px;font-weight:600;line-height:1.4}.fl-builder-blocks-section .fl-builder-block{display:block;line-height:1.1;padding:15px 20px}.fl-builder--template-collection-section-header,.fl-builder-blocks-section .fl-builder-blocks-section-header{line-height:1.2;color:#333;margin:0!important;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#e7ebef;border-top:4px solid #e7ebef;height:30px;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.fl-builder-blocks-section .fl-builder-blocks-section-title{background:#F5F7F9;color:#353535;padding:2px 16px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.fl-builder-blocks-section .fl-builder-blocks-section-title i{color:#bfbfbf;float:right}.fl-builder-blocks-section-content{overflow:auto;padding:10px 10px 20px}.fl-builder-blocks-section-content:before{content:none}.fl-builder-blocks-section-content:after{float:none;clear:both}.fl-builder-blocks-section-content.fl-builder-modules,.fl-builder-blocks-section-content.fl-builder-rows,.fl-builder-blocks-section-content.fl-builder-widgets{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}@supports (display:grid){.fl-builder--template-collection-section-content,.fl-builder-blocks-section-content.fl-builder-modules,.fl-builder-blocks-section-content.fl-builder-rows,.fl-builder-blocks-section-content.fl-builder-widgets{display:grid;grid-template-columns:repeat(auto-fit,minmax(148px,1fr))}.fl-builder--template-collection-section-content>*,.fl-builder-blocks-section-content.fl-builder-modules>*,.fl-builder-blocks-section-content.fl-builder-rows>*,.fl-builder-blocks-section-content.fl-builder-widgets>*{width:auto!important}}.fl-builder-blocks-section-content .fl-builder-block-module,.fl-builder-blocks-section-content .fl-builder-block-row{-ms-flex:1 1 50%;flex:1 1 50%;width:50%;box-sizing:border-box}.fl-builder--search-results-panel .fl-builder-blocks-section-content .fl-builder-block-module{-ms-flex:1 1 100%;flex:1 1 100%;width:100%}.fl-builder-blocks-section.fl-active .fl-builder-blocks-section-content{display:block}.fl-builder-blocks-section-content .fl-builder-block{box-sizing:border-box;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-radius:4px;font-size:13px;line-height:1.1;font-weight:400;color:#38404a}.fl-builder-block{position:relative;height:47px}.fl-builder-block.fl-builder-block-col-group{height:84px}.fl-builder-block.fl-builder-block-has-thumbnail{height:auto!important;padding:10px!important}.fl-builder-block.fl-builder-block-has-thumbnail:hover{padding:0!important}.fl-builder-block.fl-builder-block-has-thumbnail .fl-builder-block-content{position:relative!important}.fl-builder-block.fl-builder-block-has-thumbnail:hover .fl-builder-block-content{padding:10px!important}.fl-builder-block.fl-builder-block-has-thumbnail .fl-builder-block-details{margin:0 10px 4px!important}.fl-builder-block:hover{overflow:visible;z-index:1}.fl-builder-block:hover .fl-builder-block-content{display:block;box-sizing:border-box;position:absolute;top:0;left:0;width:100%;padding:15px 20px;border-radius:4px;background:#fff;box-shadow:0 2px 4px 0 rgba(0,0,0,.12);text-decoration:none;color:#111;cursor:move;overflow:hidden}.fl-builder-blocks-node-template .fl-builder-block,.fl-builder-blocks-section-content .fl-builder-block .fl-builder-block-details{position:relative}.fl-builder-block-module:hover .fl-builder-block-content{width:auto;min-width:100%}.fl-builder-block .fl-builder-block-content .fl-builder-block-visual{display:block;margin-bottom:7px}.fl-builder-block-drag-helper .fl-builder-block-content .fl-builder-block-visual{display:none!important}.fl-builder-block .fl-builder-block-content .fl-builder-block-visual.fl-cols-visual{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;height:30px}.fl-builder-block-visual.fl-cols-visual .fl-cols-visual-col{-ms-flex:1 100%;flex:1 100%;background:#464a4c;height:30px;margin:0 2px;border-radius:2px}.fl-builder-block:hover .fl-builder-block-visual.fl-cols-visual .fl-cols-visual-col{background:#000}.fl-builder-block-visual.fl-cols-visual .fl-cols-visual-col:first-child{margin-left:0!important}.fl-builder-block-visual.fl-cols-visual .fl-cols-visual-col:last-child{margin-right:0!important}.fl-cols-visual.left-right-sidebar .fl-cols-visual-col:first-child,.fl-cols-visual.left-right-sidebar .fl-cols-visual-col:last-child,.fl-cols-visual.left-sidebar .fl-cols-visual-col:first-child,.fl-cols-visual.right-sidebar .fl-cols-visual-col:last-child{-ms-flex-preferred-size:60px;flex-basis:60px}.fl-builder-block-saved-column.fl-builder-block-global .fl-builder-block-title,.fl-builder-block-saved-column:hover .fl-builder-block-title,.fl-builder-block-saved-module.fl-builder-block-global .fl-builder-block-title,.fl-builder-block-saved-module:hover .fl-builder-block-title,.fl-builder-block-saved-row.fl-builder-block-global .fl-builder-block-title,.fl-builder-block-saved-row:hover .fl-builder-block-title{margin-right:70px}.fl-builder-block-module:nth-child(even):hover .fl-builder-block-content{left:auto;right:0}.fl-builder-block-thumbnail{border-radius:4px;background-size:contain;background-repeat:no-repeat;background-position:center;background-color:rgba(0,0,0,.06);margin-bottom:10px;transform-origin:bottom;transition-property:transform,box-shadow;transition-duration:.15s}.fl-builder-block:hover .fl-builder-block-thumbnail{transform:scale(1.05);box-shadow:0 20px 40px rgba(0,0,0,.08)}.fl-builder-block .fl-builder-block-icon{margin-right:7px;fill:#000;display:inline-block;width:20px;height:20px;vertical-align:middle}.fl-builder-block-thumbnail:before{content:"";display:block;padding-top:50%}.fl-builder-block-thumbnail img{max-width:100%;max-height:160px;margin:0;-o-object-fit:cover;object-fit:cover}.fl-builder-blocks-section-content .fl-builder-block{box-shadow:0 0 0 transparent;transition-property:box-shadow;transition-duration:.15s}.fl-builder-blocks-section-content .fl-builder-block i,.fl-user-template-actions i{color:#000;margin-right:10px}.fl-builder-blocks-separator{background:#f1f1f1;height:6px}.fl-builder-block:hover .fl-builder-badge{background:#2ea2cc}.ui-sortable-helper .fl-builder-badge{display:none!important}.fl-builder-modules-cta a{color:#999!important;display:block!important;font-size:12px!important;font-style:italic!important;padding:15px 20px!important;line-height:16px!important}.fl-builder-modules-cta a:hover{background:#e5e5e5!important;color:#666!important;text-decoration:none!important}.fl-builder-modules-cta a:focus{text-decoration:none!important}.fl-builder-modules-cta .fa{float:right!important;font-size:14px!important;margin:3px 0 0 9px!important}.fl-builder--panel-message{text-align:center;padding:40px 20px;font-size:16px}.fl-builder--panel-message .fl-builder-button{display:inline-block;padding:10px}.fl-builder--panel-cta{padding:20px 30px;font-size:16px;text-align:center}.fl-builder--panel-cta a{color:inherit;text-decoration:none}.fl-builder--panel-cta a:hover{text-decoration:none}.fl-builder-block-template-image{margin:5px 0 10px;max-width:100%;border:1px solid #dfdfdf}.fl-builder-block .fl-builder-block-title{overflow:hidden;text-overflow:ellipsis;vertical-align:middle;line-height:1.3}.ui-sortable-helper .fl-builder-block-template-image{display:none!important}@keyframes fl-builder-template-item-enter{from{transform:translateY(100px) scale(.3);opacity:0}to{transform:scale(1);opacity:1}}.fl-builder--template-collection{clear:both;padding:10px 0}.fl-builder--template-collection-section-content{padding:0 10px}.fl-builder--template-collection-item{box-sizing:border-box;width:50%;float:left;padding:10px;cursor:pointer;font-size:13px;transform-origin:center;opacity:1}.fl-builder--template-thumbnail{background-size:cover;background-clip:content-box;background-position:center top;background-color:#fff;border:2px solid transparent;transform-origin:bottom;transition-property:transform,box-shadow;transition-duration:.15s}.fl-builder--template-collection-item[data-id="0"] .fl-builder--template-thumbnail,.fl-user-template .fl-builder--template-thumbnail{border-color:#e4e7ea}.fl-builder--template-thumbnail:before{display:block;content:"";padding-top:120%}.fl-builder--template-thumbnail:hover{transform:scale(1.05);box-shadow:0 20px 40px rgba(0,0,0,.08)}.fl-builder--template-name{text-align:center;padding:4px 0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.fl-builder--template-collection-section{padding-bottom:10px;border-bottom:1px solid #dfdfdf}.fl-builder--template-collection-section:last-child{border-bottom:none}.fl-builder--template-collection-section:after,.fl-builder--template-collection-section:before{content:"";display:block;clear:both}.fl-builder--template-collection-section-name{padding:15px 10px 10px}span.fl-builder-block-no-node-templates{display:block;padding:15px 20px;text-align:center}span.fl-builder-block-no-node-templates:hover{cursor:default}.fl-builder-blocks-section-content .fl-builder-node-template-actions{bottom:0;cursor:default;display:none;position:absolute;right:0;top:0}.fl-builder-blocks-section-content .fl-builder-node-template-delete,.fl-builder-blocks-section-content .fl-builder-node-template-edit{display:inline;cursor:pointer;margin:0;padding:15px 10px;text-align:center;width:30px}.fl-builder-block-details .fl-builder-node-template-delete,.fl-builder-block-details .fl-builder-node-template-edit{padding-top:0!important}.fl-builder-blocks-section-content .fl-builder-node-template-delete i,.fl-builder-blocks-section-content .fl-builder-node-template-edit i{margin:0}.fl-builder-blocks-section-content .fl-builder-node-template-delete:hover i,.fl-builder-blocks-section-content .fl-builder-node-template-edit:hover i{color:#444}.fl-builder-blocks-node-template .fl-builder-block:hover .fl-builder-node-template-actions{display:block}.ui-sortable-helper .fl-builder-node-template-delete,.ui-sortable-helper .fl-builder-node-template-edit{display:none!important}.fl-builder--tabs{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;position:relative;-ms-flex-pack:start;justify-content:flex-start;-ms-flex-align:center;align-items:center}.fl-builder-panel .fl-builder--panel-header{cursor:move}.fl-builder-panel .fl-builder--tabs{-ms-flex-pack:distribute;justify-content:space-around;padding:4px 24px;cursor:pointer}.fl-builder--tab-wrap{-ms-flex:1 1 100%;flex:1 1 100%;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:stretch;align-items:stretch;-ms-flex-pack:justify;justify-content:space-between;margin:auto;max-width:400px}.fl-builder--tabs button,.fl-builder--tabs button:active,.fl-builder--tabs button:focus,.fl-builder--tabs button:hover{-ms-flex:1 1 100%;flex:1 1 100%;display:inline-block;text-decoration:none;text-transform:none;color:inherit;text-align:center;letter-spacing:normal!important;margin:0;padding:5px;cursor:pointer;font-size:13px!important;font-weight:500!important;line-height:1.3!important;background:0 0!important;outline:0!important;border:2px solid transparent;border-radius:4px;min-height:36px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif!important;top:0;transition-property:background,color;transition-duration:.25s}.fl-builder--tabs button:focus{background:#e6eaed!important}.fl-builder--tabs button.is-showing{color:#0086b0}.fl-builder--panel-content{-ms-flex:1;flex:1}.fl-builder--panel-view{display:none;overflow:hidden}.fl-builder--panel-view.is-showing{display:block}.fl-builder--content-library-panel.ui-draggable-dragging{height:500px!important}.fl-builder--content-library-panel .fl-builder-drop-zone{display:none!important}.fl-builder--panel-header .fl-builder--tabs{cursor:move}.fl-builder--category-select{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;position:relative}.fl-builder--selector-display{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;position:relative;-ms-flex-pack:justify;justify-content:space-between;color:#161B20;background:url(../img/svg/select-arrow-down-alt2.svg) center right 10px no-repeat #fff!important;cursor:pointer;font-size:13px;font-weight:700;line-height:16px;border-radius:4px;-ms-flex-align:stretch;align-items:stretch}.fl-builder--selector-display-label{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:stretch;align-items:stretch;font-size:inherit;line-height:inherit;width:100%;margin:0!important;padding:0!important;color:#6D6D6D;background:0 0;border:2px solid transparent;box-shadow:0 1px 2px 0 rgba(0,0,0,.12)!important;border-radius:4px;font-family:inherit;text-transform:none}.fl-builder--selector-display-label:hover{top:0;color:inherit;background:0 0;border:2px solid transparent;border-radius:4px}.fl-builder--selector-display-label:active{top:0;color:inherit;background:0 0;border:2px solid #e4e7ea;border-radius:4px}.fl-builder--selector-display-label:focus{top:0;color:inherit;background:0 0;border:2px solid #00A0D2;outline:0}.fl-builder--group-label{color:inherit;-ms-flex:0 0 0%;flex:0 0 0%;padding:4px 12px 4px 10px;background:#e7ebef;border-radius:3px;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center}.fl-builder--current-view-name{-ms-flex:1 1 100%;flex:1 1 100%;color:inherit;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:600;padding:8px 10px;text-align:left}.fl-builder--selector-menu{display:none;color:#293138;position:absolute;top:46px;left:0;width:100%;background:#fff;border-radius:4px;box-shadow:0 0 20px 2px rgba(0,0,0,.2);overflow:visible;z-index:2}.fl-builder--selector-menu:before{bottom:100%;right:8px;content:" ";height:0;width:0;position:absolute;pointer-events:none;border:solid;border-color:rgba(255,255,255,0);border-bottom-color:#fff;border-width:10px;margin-left:-10px}.fl-builder--category-select.is-showing .fl-builder--selector-menu{display:-ms-flexbox;display:flex;max-height:calc(100vh - 150px)}.fl-builder--category-select.is-showing .fl-builder--selector-menu .fl-builder--menu{margin:10px 0;-ms-flex:1 100%;flex:1 100%;overflow:auto}button.fl-builder-button.fl-builder-bar-title-caret{margin:4px}button.fl-builder-button.fl-builder-bar-title-caret:focus{background-color:#e6eaed!important;border-color:transparent!important}.fl-builder--category-select.is-showing .fl-builder-bar-title-caret i{transform:rotate(180deg)}.fl-builder--menu{margin-bottom:2px}.fl-builder--menu>a,.fl-builder--menu>button,.fl-builder--menu>span{display:block;padding:8px 10px 10px;border-radius:4px;color:inherit;text-decoration:none;background:0 0!important;border:2px solid transparent!important;font-weight:400;font-family:inherit}.fl-builder--menu>a:active,.fl-builder--menu>a:focus,.fl-builder--menu>a:hover,.fl-builder--menu>button:active,.fl-builder--menu>button:focus,.fl-builder--menu>button:hover{background:#e6eaed!important;border:2px solid transparent!important;top:0}.fl-builder-block-drag-helper,.fl-builder-block.ui-draggable-dragging,.fl-builder-drop-zone,.fl-builder-empty{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif}.fl-builder--menu>a:focus,.fl-builder--menu>button:focus{outline:0;color:inherit;text-decoration:none}.fl-builder--menu .fl-has-children>svg{float:right;margin:0 7px 0 0;height:16px;width:9px;transition-property:transform;transition-duration:.15s;transform:rotate(-90deg)}.fl-builder--menu .fl-has-children.fl-has-children-showing>svg{transform:rotate(0)}.fl-builder--menu .fl-inset{display:none;padding-left:35px;font-size:14px;line-height:1.25}.fl-builder--menu a.fl-template-collection{color:#161B20}.fl-builder--menu>:after{clear:both}.fl-builder--menu * .fl-builder--menu-item-accessory{float:right;color:#000;text-transform:uppercase;text-align:center;min-width:20px;letter-spacing:2px}.fl-builder--menu * .fl-builder--menu-item-accessory i{font-size:1em;margin-top:2px}.fl-builder--menu .fl-builder-video-wrap iframe{display:block;margin:4px 0;width:100%}.fl-builder-publish-actions{display:-ms-flexbox;display:flex;box-sizing:border-box;position:absolute;top:0;right:0;width:380px;max-width:100%;height:44px;padding:4px 4px 4px 0;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:end;justify-content:flex-end;opacity:1;pointer-events:auto;transform:scaleX(1) translateX(0);transform-origin:right;transition-property:transform,opacity;transition-duration:.15s}.fl-builder-publish-actions.is-hidden{transform:scaleX(.23) translateX(68px);opacity:0;pointer-events:none}.fl-builder-bar .fl-builder-button-group{display:-ms-flexbox;display:flex;-ms-flex-preferred-size:100%;flex-basis:100%}.fl-builder-bar .fl-builder-button-group>.fl-builder-button{border-radius:0;margin-left:0;-ms-flex-preferred-size:100%;flex-basis:100%;text-align:center;-ms-flex-pack:distribute;justify-content:space-around;box-shadow:none}.fl-builder-bar .fl-builder-button-group>.fl-builder-button:first-child{margin-left:0;border-top-left-radius:3px;border-bottom-left-radius:3px}.fl-builder-bar .fl-builder-button-group>.fl-builder-button:last-child{border-top-right-radius:3px;border-bottom-right-radius:3px}.fl-builder-publish-actions-click-away-mask{display:none;position:fixed;top:0;left:0;right:0;height:100vh;background:0 0}.fl-builder-dragging .fl-builder-content:not(.fl-builder-empty){padding:16px 0}.fl-builder-empty{display:none;border:2px dashed #969696;border-radius:8px;color:#909090;font-size:20px;font-weight:700;margin:10px;padding:250px 20px;position:relative;text-align:center;text-transform:uppercase}.fl-builder-drop-zone,.fl-builder-has-submenu>ul.fl-builder-submenu li a{font-weight:400;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fl-builder-edit .fl-builder-empty{display:block}.fl-builder-block-drag-helper,.fl-builder-block.ui-draggable-dragging{background:rgba(255,255,255,.95)!important;border:2px solid #000;border-radius:4px;box-shadow:0 0 8px rgba(0,0,0,.2);-moz-box-shadow:0 0 8px rgba(0,0,0,.2);-webkit-box-shadow:0 0 8px rgba(0,0,0,.2);color:#333!important;font-size:13px!important;height:47px!important;line-height:40px!important;overflow:hidden;padding:0 20px;position:fixed!important;text-overflow:ellipsis;white-space:nowrap;width:180px!important;z-index:100010!important;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-line-pack:center;align-content:center;-ms-flex-pack:start;justify-content:flex-start}.fl-builder-block.fl-builder-block-drag-helper:hover{padding:0;box-shadow:none}.fl-builder-block-drag-helper:hover .fl-builder-block-content{position:static;padding:0 20px}.fl-col-has-highlight-guide .fl-col-content,.fl-col-highlight,.fl-row-highlight .fl-col-group{position:relative}.fl-builder-block-saved-column.fl-builder-block-drag-helper:hover .fl-builder-block-content,.fl-builder-block-saved-module.fl-builder-block-drag-helper:hover .fl-builder-block-content,.fl-builder-block-saved-row.fl-builder-block-drag-helper:hover .fl-builder-block-content{padding:14px 20px}.fl-builder-block-drag-helper .fl-builder-block-icon{fill:#000;margin-top:-10px}.fl-builder-drop-zone{animation:fl-builder-drop-zone-pulse 2s infinite;background:#00A2D7;border-radius:4px;color:#fff!important;display:block;font-size:12px;letter-spacing:1px;line-height:14px;margin:10px;padding:6px 8px 5px;position:relative;text-align:left;text-shadow:none;text-transform:none;z-index:10}@keyframes fl-builder-drop-zone-pulse{0%,100%{background-color:#00A2D7}50%{background-color:#79DEFF}}.fl-builder-drop-zone-global{animation:fl-builder-drop-zone-global-pulse 2s infinite;background:#ff9600}@keyframes fl-builder-drop-zone-global-pulse{0%,100%{background-color:#FFBC5C}50%{background-color:#ff9600}}.fl-builder-content>.fl-builder-drop-zone{margin:10px 20px}.fl-row-content>.fl-builder-drop-zone{margin:3px 7px}.fl-col-has-cols>.fl-col-content>.fl-builder-drop-zone{margin:3px 10px}.fl-sortable-disabled>.fl-builder-drop-zone{display:none!important}.fl-col-group-equal-height.fl-col-group-align-center .fl-col-content>.fl-builder-drop-zone{width:100%}.fl-row-highlight{padding:16px 0}.fl-row-highlight .fl-row-content{border:2px dashed rgba(203,205,206,.5);padding:8px;border-radius:6px}.fl-row-highlight.fl-node-global .fl-row-content{border-color:#ff9600}.fl-col-highlight{padding:8px}.fl-col-highlight .fl-col-content{border-style:dashed!important;border-color:#00a0d2!important;border-radius:4px;min-height:100px;overflow-x:hidden;border-width:2px!important}.fl-col-has-cols.fl-col-highlight>.fl-col-content{padding:8px}.fl-col-highlight.fl-node-global .fl-col-content{border-color:#ff9600!important}.fl-builder-simple .fl-col-highlight .fl-col-content{border:none!important}.fl-col-highlight-guide{background:rgba(0,160,210,.05);border:2px solid #00A0D2;border-radius:4px;bottom:4px;left:4px;position:absolute;right:4px;top:4px;z-index:1}.fl-node-global .fl-col-highlight-guide{border-color:#ff9600!important;background-color:rgba(255,150,0,.06)!important}.fl-col-has-highlight-guide .fl-block-overlay{background:0 0;border-color:transparent}.fl-col-has-highlight-guide .fl-block-col-resize{display:none}.fl-col-has-highlight-guide .fl-col-highlight .fl-col-content{border-color:transparent!important}.fl-col-drop-target{bottom:8px;display:none;left:-9px;position:absolute;top:8px;width:18px;z-index:1}.fl-col-highlight .fl-col-drop-target{display:block}.fl-col-drop-target-last{left:auto;right:-9px}.fl-col-drop-target .fl-builder-drop-zone{bottom:0;left:2px;margin:0;padding:0;position:absolute;right:2px;top:0}.fl-col-group-drop-target{display:none;left:8px;height:18px;position:absolute;right:8px;top:-9px;z-index:1}.fl-row-highlight .fl-col-group-drop-target{display:block}.fl-col-group-drop-target-last{top:auto;bottom:-9px}.fl-col-group-drop-target .fl-builder-drop-zone{bottom:2px;left:0;margin:0;padding:0;position:absolute;right:0;top:2px}.fl-row-content>.fl-col-group-drop-target{position:static}.fl-row-content>.fl-col-group-drop-target .fl-builder-drop-zone{height:18px;position:static}.fl-row-drop-target{display:none;left:0;height:24px;margin-top:-28px;position:absolute;right:0;z-index:1}.fl-row-highlight .fl-row-drop-target{display:block}.fl-row-drop-target-last{margin-top:4px}.fl-row .fl-row-drop-target .fl-builder-drop-zone{bottom:0;left:4px;margin:0;position:absolute;right:4px;top:0}.fl-builder-content>.fl-row-drop-target{margin:0;position:static}.fl-builder-dragging .fl-builder-content.fl-builder-empty>.fl-row-drop-target{bottom:10px;display:block;height:auto;left:0;position:absolute;right:0;top:10px}.fl-builder-content .fl-row-drop-target .fl-builder-drop-zone{margin-bottom:0;margin-top:0}.fl-col-group:focus,.fl-col:focus,.fl-module:focus,.fl-row:focus{outline:0}.fl-sortable-proxy{display:none}.fl-block-overlay,.fl-block-overlay *{text-shadow:none;-webkit-touch-callout:none;transition-property:border-color;transition-duration:.3s}.fl-block-overlay-active{position:relative}.fl-block-overlay-actions{background:#00A0D2;float:left;height:30px;margin:-1px -1px 0;padding:0 4px;text-shadow:none;border-bottom-right-radius:5px;border-top-left-radius:3px;transition-property:background-color;transition-duration:.3s}.fl-row-overlay-header-bottom .fl-block-overlay-actions{border-radius:0 5px 0 3px}.fl-builder-col-resizing .fl-block-overlay-actions,.fl-builder-row-resizing .fl-block-overlay-actions{overflow:hidden}.fl-block-overlay-actions>span{display:block;float:left}.fl-block-overlay-actions i{color:#fff!important;cursor:pointer;display:block!important;float:left;font-size:16px!important;height:28px!important;line-height:28px!important;opacity:.8;filter:alpha(opacity=80);text-align:center;width:32px!important}.fl-block-overlay-actions i:hover{opacity:1;filter:alpha(opacity=100)}.fl-block-overlay-actions>i:first-child{padding-left:4px}.fl-block-overlay-actions>i:last-child{padding-right:2px}.fl-block-overlay-actions .fl-block-move{cursor:move}.fl-block-has-rules{color:#00A0D2!important;cursor:pointer;padding:7px;position:absolute;right:0;top:0}.fl-block-overlay-title,.fl-builder-has-submenu>ul.fl-builder-submenu li a{color:#fff!important;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif}.fl-block-overlay-title{float:left;font-size:14px;height:30px;line-height:29px;margin-right:2px;padding:0 12px 0 8px}.fl-col-overlay,.fl-module-overlay,.fl-row-overlay{background:rgba(190,239,255,0);color:#fff}.fl-row-overlay{border:2px solid #00A0D2;border-radius:4px;bottom:0;box-sizing:border-box!important;-moz-box-sizing:border-box!important;-webkit-box-sizing:border-box!important;left:0;position:absolute;top:-33px;right:0;z-index:100006}.fl-row-overlay.fl-row-menu-active,.fl-row-overlay.fl-row-menu-active.fl-block-overlay.fl-block-overlay-global{z-index:100007}.fl-row-full-width .fl-row-overlay{left:2px;right:2px;bottom:2px}.fl-row-overlay-header-bottom{bottom:-32px!important;top:0}.fl-row-overlay-header-bottom .fl-block-overlay-header{position:absolute;bottom:0}.fl-block-overlay-active .fl-row-content-wrap{position:relative}.fl-block-overlay-active .fl-row-content{position:relative;z-index:100007!important}.fl-builder-row-resizing .fl-col.fl-block-overlay-active,.fl-builder-row-resizing .fl-module.fl-block-overlay-active{position:static}.fl-col-overlay{border:2px solid #00A0D2;border-radius:4px;bottom:8px;cursor:pointer;left:8px;position:absolute;right:8px;top:8px;z-index:100008}.fl-module-overlay{border:2px solid #00A0D2;border-radius:4px;bottom:4px;cursor:pointer;left:4px;min-height:32px;position:absolute;right:4px;top:4px;z-index:100007}.fl-builder-global-templates-locked .fl-block-overlay-global.fl-module-overlay{cursor:default}.fl-module-adjust-height{padding-bottom:15px;padding-top:15px}.fl-col-bg-overlay .fl-block-overlay-active.fl-module{z-index:100008}.fl-block-overlay-global{background:rgba(255,150,0,0);border:2px solid #F7A407;border-radius:4px}.fl-block-overlay-global .fl-block-overlay-actions{background:#F7A407}.fl-block-overlay-title-global{background:#fff;color:#ff9600!important;font-size:11px;letter-spacing:1px;margin-left:4px;padding:2px 4px;vertical-align:top}.fl-block-overlay-global.fl-row-overlay{background:rgba(255,150,0,0);cursor:pointer;z-index:100007}.fl-builder-global-templates-locked .fl-block-overlay-global.fl-row-overlay{cursor:default}.fl-builder-row-template .fl-block-overlay-global.fl-row-overlay{background:rgba(255,150,0,0);cursor:default;z-index:100006}.fl-block-overlay-global.fl-row-overlay .fl-block-col-resize{display:none}.fl-block-overlay-muted .fl-row-overlay{background:rgba(85,93,102,0);border:2px solid #555D66}.fl-block-overlay-muted .fl-row-overlay .fl-block-overlay-actions{background:#555D66}.fl-block-overlay-muted .fl-row-overlay .fl-block-has-rules{color:#555D66!important}.fl-block-overlay-muted .fl-row-overlay .fl-block-col-resize{display:none}.fl-node-disabled .fl-row-content-wrap,.fl-node-disabled>.fl-col-content{opacity:.3}.fl-block-col-resize{bottom:0!important;position:absolute;top:0!important;width:6px}.fl-block-col-resize-e{cursor:ew-resize;left:auto!important;right:-2px!important}.fl-block-col-resize-w{cursor:ew-resize;left:-7px!important}.fl-block-col-resize-handle-wrap{margin:-4px 0 0 -5px;padding:0 5px;position:absolute;top:50%!important}.fl-block-col-resize-e .fl-block-col-resize-handle-wrap{margin-left:-6px}.fl-block-col-resize-handle{background:#fff;border:2px solid #00A0D2;border-radius:50%;height:12px;width:12px}.fl-node-global .fl-block-col-resize-handle{border-color:#ff9600}.fl-block-col-resize-feedback{color:#333!important;display:none;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:11px!important;position:absolute}.fl-block-col-resize-feedback-left,.fl-block-col-resize-feedback-right{background:#fff;border:1px solid #3ba0ff;padding:2px 4px}.fl-block-col-resize-feedback-left{right:20px;top:-7px}.fl-block-col-resize-feedback-right{left:20px;top:-7px}.fl-builder-has-submenu{position:relative}.fl-builder-has-submenu>ul.fl-builder-submenu{background:#00A0D2;box-shadow:0 0 20px rgba(0,0,0,.2);border-radius:0 4px 4px;display:none;left:0;list-style:none;margin:0;padding:6px 0;position:absolute;text-align:left;top:100%;width:165px;z-index:100008}.fl-builder-has-submenu>ul.fl-builder-submenu li{list-style:none;margin:0;padding:0}.fl-builder-submenu-right ul.fl-builder-submenu{left:auto;right:0}.fl-builder-has-submenu.fl-builder-submenu-open>ul.fl-builder-submenu{display:block}.fl-builder-has-submenu>ul.fl-builder-submenu li a{border-bottom:0 none;box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none;display:block;line-height:13px;font-size:13px;opacity:.8;filter:alpha(opacity=80);padding:6px 12px;text-decoration:none}.fl-builder-has-submenu>ul.fl-builder-submenu li a:hover{background:#0197C6;color:#fff;opacity:1;filter:alpha(opacity=100);text-decoration:none}.fl-builder-actions-title,.fl-builder-alert-lightbox .fl-lightbox-message,.fl-builder-alert-lightbox .fl-lightbox-message-info{color:#333!important;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px!important}.fl-builder-has-submenu .fl-builder-submenu .fa,.fl-builder-has-submenu .fl-builder-submenu .far,.fl-builder-has-submenu .fl-builder-submenu .fas{float:right;height:12px!important;line-height:12px!important;position:relative;right:-5px;width:14px!important}.fl-builder-has-submenu .fl-builder-has-submenu .fl-builder-submenu{display:none;left:100%;top:0}.fl-builder-has-submenu .fl-builder-submenu-right.fl-builder-has-submenu .fl-builder-submenu{left:auto;right:100%}.fl-builder-has-submenu .fl-builder-has-submenu:hover .fl-builder-submenu{display:block}.fl-builder-submenu-sep{padding:7px 0!important}.fl-builder-submenu-sep div{border-bottom:1px solid rgba(255,255,255,.4)}.fl-block-col-move,.fl-block-col-move-parent{cursor:move;position:relative}.fl-builder-submenu .fa-arrows-alt{cursor:move;display:none!important}.fl-builder-submenu a:hover .fa-arrows-alt{display:block!important;float:right;line-height:12px!important;height:12px!important}.fl-block-overlay-global ul.fl-builder-submenu{background:#ff9600!important}.fl-block-overlay-global ul.fl-builder-submenu li a:hover{background:#fa3}.fl-builder-actions-lightbox .fl-lightbox{display:block;width:300px;border-radius:4px}.fl-builder-actions-lightbox .fl-lightbox-content-wrap{display:block}.fl-builder-actions-lightbox .fl-builder-actions{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding:25px;text-align:center}.fl-builder-actions-title{display:block;margin-bottom:20px}.fl-builder-actions .fl-builder-button{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:7px;min-height:36px}.fl-builder-alert-lightbox{padding:20px;z-index:30000000;top:0;pointer-events:auto}.fl-builder-alert-lightbox .fl-lightbox{max-width:440px;width:auto}.fl-builder-alert-lightbox .fl-lightbox-content-wrap{display:block}.fl-builder-alert-lightbox .fl-lightbox-message,.fl-builder-alert-lightbox .fl-lightbox-message-info{line-height:24px;padding:30px}.fl-builder-alert-lightbox.fl-builder-crash-lightbox .fl-lightbox{max-width:60%}.fl-lightbox-width-slim .fl-compound-field,.fl-lightbox-width-slim .fl-dimension-field-units{max-width:none}.fl-builder-alert-lightbox.fl-builder-crash-lightbox .fl-lightbox-content{padding:20px}.fl-builder-alert-lightbox.fl-builder-crash-lightbox .fl-lightbox-message{padding:10px 20px}.fl-builder-alert-lightbox.fl-builder-crash-lightbox .fl-lightbox-message h1{font-size:20px}.fl-builder-alert-lightbox.fl-builder-crash-lightbox .fl-lightbox-message p{font-size:14px;padding-top:5px}.fl-builder-alert-lightbox.fl-builder-crash-lightbox .link{color:#428bca;text-decoration:underline}.fl-builder-alert-lightbox .fl-lightbox-message-info{padding:0 20px;font-size:14px!important}.fl-builder-alert-lightbox .fl-lightbox-message-info p{line-height:20px;padding:10px 0 0 10px}.fl-builder-alert-lightbox .fl-lightbox-message-info a{font-size:14px}@keyframes fl-builder-content-section-entry{from{transform:translateY(150px) translateX(100px) scale(.3);opacity:0}to{transform:translateY(0) translateX(0) scale(1);opacity:1}}.fl-template-category-select{width:180px!important}.fl-template-selector .fl-builder-settings-section{margin:0 0 10px}.fl-template-selector .fl-builder-settings-fields{height:470px}.fl-template-selector .fl-builder-settings-tab{width:560px}.fl-template-selector .fl-builder-settings-tab-description{font-size:15px!important;margin:0!important;padding:10px 0 25px;text-align:center}.fl-template-preview{float:left;margin:0 25px 30px 0;position:relative;text-align:center;width:170px}.fl-template-preview.fl-last{margin-right:0}.fl-template-image{border:1px solid #d9d9d9;cursor:pointer;margin-bottom:12px;height:164px;overflow:hidden}.fl-template-image:hover{border-color:red}.fl-template-image img{max-height:none;width:100%}.fl-template-preview span{display:block;text-align:center}.fl-user-template-category-name{background:#f2f2f2;border-bottom:3px solid #dfdfdf;border-top:2px solid #dfdfdf;font-weight:700;padding:8px 15px}.fl-user-templates{border-bottom:1px solid #dfdfdf;padding:10px 0 20px}.fl-builder--user-templates-section-content{border-bottom:2px solid #e6eaed;padding:10px}.fl-builder--user-templates-section-content:first-child{padding-top:0}.fl-builder--user-templates-section-content:last-child,.fl-user-templates:last-child{border-bottom:none}.fl-builder--user-templates-section-name{font-weight:700;font-size:16px;color:#333;z-index:9999;padding:15px 10px;margin:0 10px}@keyframes fl-list-item-entry{from{opacity:0;transform:scale(.5) translateY(100px)}to{opacity:1;transform:scale(1) translateY(0)}}.fl-builder--save-new-user-template,.fl-user-template{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-radius:4px;font-size:16px;font-weight:200;line-height:1.1;padding:10px 20px;color:#6d6d6d}.fl-user-template:hover{cursor:pointer;background:#fff;box-shadow:0 6px 20px rgba(0,0,0,.08);text-decoration:none;color:#111;padding-right:68px}.fl-user-template-name{overflow:hidden;text-overflow:ellipsis;-ms-flex:1;flex:1}.fl-user-template-actions{display:none;bottom:0;position:absolute;right:0;top:0}.fl-user-template:hover .fl-user-template-actions{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center}.fl-user-template-actions a{display:inline-block;padding:15px 0;width:30px}.fl-user-template:hover a:hover i{color:#444!important}.fl-user-templates-message{display:none}.fl-user-template-thumbnail{-ms-flex:0;flex:0;margin-right:20px}.fl-user-template-thumbnail .fl-builder--template-thumbnail{background-size:cover;background-position:center top;width:45px}.fl-user-template-thumbnail .fl-builder--template-thumbnail:hover{box-shadow:none;transform:scale(1);transition-property:none}.fl-builder--save-new-user-template .fl-user-template-thumbnail .fl-builder--template-thumbnail{border-style:dashed;border-width:2px;border-color:#ccd4da}.fl-builder--save-new-user-template .fl-save-control{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex:1;flex:1}.fl-builder--save-new-user-template .fl-save-control input{background:0 0;border:none!important;-ms-flex:1;flex:1;font-size:16px;margin-right:10px;margin-left:-12px;color:#000}.fl-builder--save-new-user-template .fl-save-control input::-webkit-input-placeholder{color:#777}.fl-builder--save-new-user-template .fl-save-control input::-moz-placeholder{color:#777}.fl-builder--save-new-user-template .fl-save-control input:-ms-input-placeholder{color:#777}.fl-builder--save-new-user-template .fl-save-control input:-moz-placeholder{color:#777}@keyframes fl-slide-in-right{from{transform:translateX(50px)}to{transform:translateX(0)}}.fl-builder--save-new-user-template .fl-save-control button{display:none;animation-name:fl-slide-in-right;animation-duration:.25s;background-color:#00a0d2;border:none;padding:0 15px}.fl-save-control-mask{display:none;background:0 0;position:absolute;top:-50px;left:0;bottom:0;right:0;z-index:-1;min-height:80vh}.fl-builder-templates-cta{margin-bottom:20px}.fl-builder-templates-cta p{display:inline-block!important;width:75%!important;font-size:14px!important;line-height:1.5!important;margin-bottom:0!important}.fl-builder-templates-cta .fl-builder-upgrade-button{font-size:13px!important;line-height:13px!important;position:relative;top:8px;left:15px;padding:1px 12px}.fl-builder-settings-message,.fl-builder-settings-message *{font-size:15px!important;line-height:23px!important}.single-fl-builder-template .fl-content{width:100%!important}form.fl-builder-settings{height:100%;margin:0;padding:0;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.fl-builder-settings-message{padding:20px 25px!important;background:#f2f2f2!important}.fl-builder-preview-loader{position:relative;top:-2px;margin-left:3px}.fl-lightbox-header .fl-builder-preview-loader{margin:0;position:absolute;right:40px;top:15px}@keyframes fl-grab-attention{0%,100%{transform:scale(1)}50%{transform:scale(1.05)}}.fl-lightbox-width-slim .fl-form-table{margin:10px 12px 10px 10px!important;width:calc(100% - 40px)}.fl-lightbox-width-slim .fl-form-table th{display:block;position:relative;padding:10px 0 0 12px!important;width:auto!important}.fl-lightbox-width-slim .fl-form-table td{display:block}.fl-lightbox-width-slim .fl-form-table .fl-field[data-type=editor] td:first-child,.fl-lightbox-width-slim .fl-form-table td:first-child{padding-left:0!important}.fl-field-label .fl-field-responsive-toggle,.fl-lightbox-width-slim .fl-field-control-wrapper .fl-field-responsive-toggle{display:none}.fl-lightbox-width-slim .fl-field-label .fl-field-responsive-toggle{display:inline-block;padding:0 5px!important}.fl-lightbox-width-slim input.text-full+.fl-field-description,.fl-lightbox-width-slim select+.fl-field-description{display:block;padding:8px 10px;margin:0}.fl-lightbox-width-slim .fl-builder-settings-fields select{width:100%}.fl-lightbox-width-slim .fl-color-picker{display:-ms-flexbox;display:flex;width:auto}.fl-lightbox-width-slim .fl-color-picker-clear{-ms-flex:0 0 40px;flex:0 0 40px}.fl-lightbox-width-slim .fl-field[data-type=dimension] .fl-field-responsive-setting{width:100%}.fl-lightbox-width-slim .fl-dimension-field-unit-select select{width:auto!important}.fl-lightbox-width-slim .fl-gradient-picker-color-row{width:50%}.fl-lightbox-width-slim .fl-color-picker.fl-gradient-picker-color,.fl-lightbox-width-slim .fl-typography-field-align .fl-button-group-field-option{width:100%}.fl-lightbox-width-slim .fl-typography-field-align .fl-button-group-field-options{float:none}.fl-lightbox-width-slim .mce-menubtn.mce-fixed-width button{width:72px!important}.fl-lightbox-width-slim .fl-builder-settings-tab-description{margin:20px 10px}.fl-lightbox-width-micro .mce-menubtn.mce-fixed-width button{width:38px!important}.fl-lightbox-width-micro .mce-btn[aria-label=Fullscreen],.fl-lightbox-width-micro .mce-btn[aria-label=Blockquote]{display:none}.fl-lightbox-width-micro .mce-toolbar i.mce-ico{width:18px}.fl-lightbox-width-slim .fl-field[data-type=editor] .fl-field-control-wrapper,.fl-lightbox-width-slim .fl-field[data-type=code] .fl-field-control-wrapper{margin-left:-10px;margin-right:-30px}.fl-lightbox .wp-editor-tools{padding-left:6px;padding-right:28px}.fl-lightbox .mce-top-part::before{box-shadow:none!important}.mce-container .mce-stack-layout span{color:initial}.fl-lightbox div.mce-toolbar-grp{background:0 0;border:none}.fl-lightbox div.mce-toolbar-grp>div{padding:0 3px}.fl-lightbox .fl-builder-settings .wp-switch-editor{background:#e7ebef;border:1px solid transparent}.fl-lightbox .html-active .switch-html,.fl-lightbox .quicktags-toolbar,.fl-lightbox .tmce-active .switch-tmce{background:#fff}.fl-lightbox .quicktags-toolbar,.fl-lightbox .wp-editor-container{border:none}.fl-lightbox .mce-toolbar .mce-container-body{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.fl-lightbox-width-slim .mce-toolbar .mce-container-body{-ms-flex-pack:center;justify-content:center}.fl-lightbox textarea.wp-editor-area{line-height:1.5;padding:20px;width:calc(100% - 10px)}.fl-lightbox .wp-core-ui .button,.fl-lightbox .wp-core-ui .button-secondary{border:none;box-shadow:none;background:#e7ebef}.fl-lightbox-width-slim .fl-shadow-field .fl-dimension-field-units{width:auto}.fl-lightbox-width-slim .fl-shadow-field .fl-dimension-field-units input{max-width:none;width:100%!important}.fl-lightbox-width-slim .fl-builder-field-multiple{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;position:relative}.fl-lightbox-width-slim .fl-builder-field-multiple .fl-field-control,.fl-lightbox-width-slim .fl-builder-field-multiple .fl-field-label{width:100%!important}.fl-lightbox-width-slim .fl-builder-field-multiple .fl-form-field-preview-text{max-width:225px}.fl-lightbox-width-slim .fl-builder-field-multiple .fl-builder-field-actions{position:absolute!important;top:0;right:0;width:70px;z-index:1}.fl-lightbox-width-slim .fl-builder-field-actions-single .fl-builder-field-copy{float:right!important;margin-right:5px}.fl-lightbox-width-slim .fl-field[data-type=time] select{width:auto}.fl-builder-settings-tabs{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:stretch;align-items:stretch;overflow:hidden;height:32px;background:#e7ebef}.fl-builder-content-group-select{padding:0 10px 6px;display:none}.fl-builder-content-group-select select{display:block;width:100%;-webkit-appearance:none;-moz-appearance:none;box-sizing:border-box;padding:8px 10px;background:url(../img/svg/select-arrow-down-alt2.svg) center right 10px no-repeat #fff!important;border:2px solid #e4e7ea;color:#161B20}select:focus{border-width:2px!important;border-style:solid!important;border-color:#00a0d2!important;outline:0!important}.fl-legacy-settings-tab{background:url(../img/ajax-loader.svg) center center no-repeat;height:100px}.fl-builder-settings-tab:first-child .fl-legacy-settings-tab{background:0 0;height:auto}body .fl-builder-settings-tabs>*{box-sizing:border-box;color:#676F7A!important;fill:#676F7A!important;background:0 0;border:2px solid transparent;border-radius:0;margin:0;outline:0;padding:1px 16px;text-decoration:none!important;font-size:13px;font-weight:400!important;-ms-flex:0 0 auto;flex:0 0 auto;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}body .fl-lightbox-width-slim .fl-builder-settings-tabs>*{-ms-flex:1 1 auto;flex:1 1 auto}body .fl-builder-settings-tabs>.fl-builder-settings-tabs-more{-ms-flex:0 0 60px;flex:0 0 60px;display:none;margin-left:auto;-ms-flex-pack:center;justify-content:center}.fl-builder-settings-tabs-more svg{width:16px;height:auto;margin:auto}.fl-builder-settings-tabs-more g,.fl-builder-settings-tabs-more path,.fl-builder-settings-tabs-more svg{fill:inherit}body .fl-lightbox-has-tab-overflow .fl-builder-settings-tabs-more{display:-ms-flexbox;display:flex}.fl-builder-settings-tabs>:active,.fl-builder-settings-tabs>:hover{top:0;color:#333;background:0 0;border:2px solid transparent}.fl-builder-settings-tabs>:focus{top:0;outline:0;border:2px solid transparent;background:0 0;color:#0086b0;fill:#0086b0}.fl-builder-settings-tabs .fl-active,.fl-builder-settings-tabs-more.fl-contains-active,.fl-builder-settings-tabs-overflow-menu .fl-active{color:#0086b0!important;fill:#0086b0!important;position:relative;background:#fff}.fl-builder-settings-tabs .fl-active.fl-overflowed,.fl-builder-settings-tabs .fl-overflowed{display:none!important}.fl-builder-settings-tabs .error{color:#d03436;padding-right:10px}.fl-builder-settings-tabs .error .fl-error-icon,.fl-builder-settings-tabs-overflow-menu .error .fl-error-icon{background:url(../img/sprite.png) -148px -5px no-repeat;display:inline-block;height:16px;margin-left:7px;position:relative;top:3px;width:16px}.fl-builder-settings-tabs-more.fl-contains-errors{fill:#d03436!important}.fl-builder-settings-tab{display:none;width:auto!important}.fl-builder-settings-tab.fl-active{display:block}.fl-builder-settings-tab-description{background:#e4e7ea;padding:10px 15px;border-radius:4px;margin:20px}.fl-builder-settings-tab-description a{text-decoration:underline!important}.fl-builder-settings-tab-description a:hover{color:#333}.fl-builder-settings-tabs-overflow-menu{display:none;position:absolute;left:0;right:0;border:2px solid #e6eaed;border-top:3px solid #00a0d2;border-radius:4px;background:#fff;z-index:9999;margin:0 6px;padding:10px;-ms-flex-direction:column;flex-direction:column;box-shadow:0 0 20px 2px rgba(0,0,0,.2)}.fl-builder-settings-tabs-overflow-menu:before{bottom:100%;right:20px;content:" ";height:0;width:0;position:absolute;pointer-events:none;border:solid;border-color:rgba(255,255,255,0);border-bottom-color:#00a0d2;border-width:10px;margin-left:-10px}.fl-builder-settings-tabs-overflow-menu>a{display:block;padding:10px 15px;font-size:14px;font-weight:600!important;border:2px solid transparent;border-radius:4px;outline:0}.fl-builder-settings-tabs-overflow-menu>a:hover{background:#e6eaed;text-decoration:none}.fl-builder-settings-tabs-overflow-click-mask{display:none;position:fixed;top:0;bottom:0;left:0;right:0;background:0 0;z-index:11}.fl-form-table{background:none;border:none;width:calc(100% - 35px)}.fl-form-table tbody{border:none}.fl-form-table tr,.fl-form-table tr:nth-child(even){background:0 0}.fl-form-table td,.fl-form-table th{background:0 0!important;border:none!important;font-weight:400!important;text-align:left!important}.fl-form-table th{padding:10px 15px 10px 30px!important;vertical-align:top!important;width:200px!important}.fl-form-table td:first-child{padding-left:30px!important}.fl-form-table th label{color:#333;width:auto;max-width:100%}.fl-form-table th label i{color:grey}.fl-form-table th label i:hover{color:#555}.fl-form-table td{padding:8px 10px}.fl-lightbox-width-slim .fl-form-table td{padding:4px 0 5px}.fl-builder-settings-fields{margin:0;overflow:hidden;position:relative;-ms-flex:1 100%;flex:1 100%;visibility:hidden}.fl-lightbox-header .fl-builder-settings-fields{height:auto;margin:0;position:absolute;right:10px;top:10px}.fl-builder-settings-fields .fl-nanoscroller-content{padding:4px 0 0}.fl-builder-settings-fields .fl-field-control-wrapper{position:relative}.fl-field{animation-duration:.25s;animation-delay:.1s}.fl-builder-settings-fields input[type=date],.fl-builder-settings-fields input[type=email],.fl-builder-settings-fields input[type=file],.fl-builder-settings-fields input[type=number],.fl-builder-settings-fields input[type=password],.fl-builder-settings-fields input[type=search],.fl-builder-settings-fields input[type=tel],.fl-builder-settings-fields input[type=text],.fl-builder-settings-fields input[type=url],.fl-builder-settings-fields select,.fl-builder-settings-fields textarea{background:#fff!important;border-color:transparent!important;border-style:solid;border-width:2px;border-radius:4px!important;box-shadow:0 2px 4px 0 rgba(0,0,0,.12);color:#333!important;display:inline;font-size:13px;height:auto;line-height:15px;margin:1px;outline:0;padding:3px 6px;width:auto;box-sizing:border-box}i.fl-dimension-field-link,i.fl-field-responsive-toggle{line-height:18px!important;cursor:pointer;vertical-align:middle}.fl-builder-settings-fields input[type=date],.fl-builder-settings-fields input[type=email],.fl-builder-settings-fields input[type=file],.fl-builder-settings-fields input[type=number],.fl-builder-settings-fields input[type=password],.fl-builder-settings-fields input[type=search],.fl-builder-settings-fields input[type=tel],.fl-builder-settings-fields input[type=text],.fl-builder-settings-fields input[type=url],.fl-builder-settings-fields select:not(multiple){height:36px!important}.fl-builder-settings-fields select,.fl-builder-settings-fields select[multiple]{height:auto!important}.fl-builder-settings-fields input[type=number]{width:70px}.fl-builder-lightbox .fl-builder-settings-fields input[type=date]:focus,.fl-builder-lightbox .fl-builder-settings-fields input[type=email]:focus,.fl-builder-lightbox .fl-builder-settings-fields input[type=file]:focus,.fl-builder-lightbox .fl-builder-settings-fields input[type=number]:focus,.fl-builder-lightbox .fl-builder-settings-fields input[type=password]:focus,.fl-builder-lightbox .fl-builder-settings-fields input[type=search]:focus,.fl-builder-lightbox .fl-builder-settings-fields input[type=tel]:focus,.fl-builder-lightbox .fl-builder-settings-fields input[type=text]:focus,.fl-builder-lightbox .fl-builder-settings-fields input[type=url]:focus,.fl-builder-lightbox .fl-builder-settings-fields select:focus,.fl-builder-lightbox .fl-builder-settings-fields textarea:not(.wp-editor-area):focus{border-width:2px!important;border-style:solid!important;border-color:#00a0d2!important;box-shadow:0 2px 4px 0 rgba(0,0,0,.12)!important}.fl-builder-settings-fields ::-webkit-input-placeholder{color:#999!important;font-size:13px}.fl-builder-settings-fields input:-moz-placeholder{color:#999;font-size:13px}.fl-builder-settings-fields ::-moz-placeholder{color:#999!important;font-size:13px}.fl-builder-settings-fields input:-ms-input-placeholder{color:#999;font-size:13px}.fl-builder-settings-fields label{display:inline-block;font-weight:400;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;margin-bottom:3px;font-size:12px}.fl-builder-settings-fields select{-webkit-appearance:none;-moz-appearance:none;box-sizing:border-box;color:#000;margin:0 0 2px;padding:2px 10px;padding-right:30px!important;background:url(../img/svg/select-arrow-down-alt2.svg) center right 10px no-repeat #fff!important}.fl-dimension-field-unit input[type=number],.fl-unit-field-inputs input[type=number]{-moz-appearance:textfield}.fl-builder-settings-fields select[multiple]{height:60px;background-image:none!important}.fl-builder-custom-field select,.fl-photo-field select{box-shadow:none;border-color:#e6eaed!important}.fl-builder-settings-section:first-child{border-top:none!important}.fl-builder-settings-section-header{background-color:#e7ebef;border-top:4px solid #e7ebef;cursor:pointer;height:30px;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.fl-builder-settings-description{padding:0 10px 10px;margin:0;font-style:italic;opacity:.75}.fl-builder-settings-fields table{margin:20px 0}.fl-builder-settings-fields .fl-builder-settings-title{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;background:#F5F7F9;color:#353535;padding:2px 10px;margin:0;font-size:13px!important;font-weight:400;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:2px solid transparent;border-radius:0}.fl-builder-settings-fields .fl-builder-settings-title:active,.fl-builder-settings-fields .fl-builder-settings-title:hover{top:0}.fl-builder-settings-fields .fl-builder-settings-title:focus{top:0;border-color:#e0e4ea}.fl-builder-settings-fields .fl-builder-settings-title>svg{height:6px;width:9px;margin-right:7px;transition-property:transform;transition-duration:.15s}.fl-builder-settings-section-collapsed{margin-bottom:4px}.fl-builder-settings-section-collapsed .fl-builder-settings-section-content{display:none}.fl-builder-settings-section-collapsed .fl-builder-settings-title{background:0 0;-ms-flex:1 1 100%;flex:1 1 100%}.fl-builder-settings-section-collapsed .fl-builder-settings-title>svg{transform:rotate(-90deg)}.wp-core-ui h1,.wp-core-ui h2,.wp-core-ui h3,.wp-core-ui h4,.wp-core-ui h5,.wp-core-ui h6,.wp-core-ui p{color:#333;font-family:inherit}.wp-core-ui #media-attachment-date-filters{width:auto}.wp-core-ui input[type=search]::-webkit-input-placeholder{color:#333}.wp-core-ui input[type=search]:-ms-input-placeholder{color:#333}.wp-core-ui input[type=search]::-ms-input-placeholder{color:#333}.wp-core-ui input[type=search]::placeholder{color:#333}.wp-core-ui .submitbox .submitdelete{color:#a00}.wp-core-ui button{font-weight:400}.wp-core-ui input[type=date],.wp-core-ui input[type=email],.wp-core-ui input[type=file],.wp-core-ui input[type=number],.wp-core-ui input[type=password],.wp-core-ui input[type=search],.wp-core-ui input[type=tel],.wp-core-ui input[type=text],.wp-core-ui input[type=url],.wp-core-ui select,.wp-core-ui textarea{background-color:#fff;border-color:#dfdfdf;border-style:solid;border-width:1px;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none;color:#333;font-weight:400}.wp-core-ui input[type=date]:focus,.wp-core-ui input[type=email]:focus,.wp-core-ui input[type=file]:focus,.wp-core-ui input[type=number]:focus,.wp-core-ui input[type=password]:focus,.wp-core-ui input[type=search]:focus,.wp-core-ui input[type=tel]:focus,.wp-core-ui input[type=text]:focus,.wp-core-ui input[type=url]:focus,.wp-core-ui select:focus,.wp-core-ui textarea:focus{background:0 0;border-color:#aaa}.wp-core-ui input[type=search]{background-image:none;padding:6px}.fl-field-responsive-setting{display:inline-block;width:100%}.fl-field-responsive-setting-medium,.fl-field-responsive-setting-responsive{display:none}.fl-field-control-wrapper i.fl-field-responsive-toggle{padding:9px 0 0;position:absolute;left:-25px}i.fl-field-responsive-toggle{color:grey;display:inline-block;font-size:15px!important;height:auto;text-align:left;width:20px}.fl-builder-settings-fields input.text-full,.fl-builder-settings-fields textarea{width:100%}i.fl-field-responsive-toggle:hover{color:#000}.fl-builder-settings-fields .fl-text-field-add-value{min-width:50%;margin-top:.62em}.fl-field[data-type=shadow] .fl-field-control-wrapper{display:-ms-flexbox;display:flex}.fl-shadow-field .fl-color-picker{margin-bottom:15px;width:100%}.fl-color-picker{cursor:pointer}.fl-color-picker .fl-color-picker-clear{box-sizing:border-box;display:inline-block}.fl-color-picker .fl-color-picker-clear:hover{background-color:#ededed}.colorpicker input{padding:0!important;font-size:11px!important;color:#fff!important;width:29px!important;height:auto!important;background:0 0!important;border:none!important}.colorpicker .colorpicker_hex input{width:45px!important}.fl-gradient-picker-type{display:-ms-flexbox;display:flex;margin-bottom:15px}.fl-gradient-picker-type input{margin:0!important}.fl-gradient-picker-type select{margin-bottom:0!important}.fl-gradient-picker-type-select{margin-right:10px!important}.fl-gradient-picker-colors{display:-ms-flexbox;display:flex}.fl-gradient-picker-color-row{display:-ms-flexbox;display:flex;margin-right:15px}.fl-color-picker.fl-gradient-picker-color,.fl-gradient-picker-color-row:last-child{margin-right:0}.fl-color-picker.fl-gradient-picker-color .fl-color-picker-color{border-top-right-radius:0!important;border-bottom-right-radius:0!important}.fl-gradient-picker .fl-gradient-picker-stop input{border-top-left-radius:0!important;border-bottom-left-radius:0!important;margin:0!important}.fl-field[data-type=dimension] .fl-field-label label{padding-right:35px}.fl-field[data-type=dimension] .fl-field-control-wrapper{display:-ms-flexbox;display:flex}.fl-field[data-type=dimension] .fl-field-description{padding:9px 0 0 5px}.fl-field[data-type=dimension] .fl-field-responsive-setting{width:auto}.fl-dimension-field-units{border-radius:4px;box-shadow:0 2px 4px 0 rgba(0,0,0,.12);display:-ms-flexbox;display:flex;height:36px;margin:1px 1px 20px;position:relative;max-width:350px}.fl-dimension-field-units>*{border-right:1px solid #e6eaed;width:100%}body .fl-dimension-field-units>:last-child{border-right:none!important}body .fl-dimension-field-units>:first-child>input[type]{border-top-left-radius:4px!important;border-bottom-left-radius:4px!important}body .fl-dimension-field-units>:last-child>*{border-top-right-radius:4px!important;border-bottom-right-radius:4px!important}.fl-dimension-field-unit input[type],.fl-dimension-field-units .fl-field-unit-select{box-shadow:none!important;margin:0!important;border-radius:0!important}.fl-dimension-field-unit input{width:100%!important}.fl-dimension-field-unit input::-webkit-inner-spin-button,.fl-dimension-field-unit input::-webkit-outer-spin-button{-webkit-appearance:none}.fl-dimension-field-unit label{padding:5px 0 0;font-size:11px;font-weight:700;color:inherit!important;display:block;text-align:center;opacity:.5}.fl-dimension-field-unit .fl-field-popup-slider{margin-top:27px}i.fl-dimension-field-link{color:grey;font-size:15px!important;height:auto;text-align:left;width:20px}i.fl-dimension-field-link:hover{color:#000}i.fl-dimension-field-link.dashicons-editor-unlink,i.fl-dimension-field-link.dashicons-editor-unlink:hover{color:#0086b0}.fl-field-label .fl-dimension-field-link,.fl-lightbox-width-slim .fl-dimension-field-link{display:none}.fl-lightbox-width-slim .fl-field-label .fl-dimension-field-link{display:inline-block}.fl-field-control-wrapper .fl-dimension-field-link{padding:9px 0 0;left:-50px;position:absolute}.fl-dimension-field-unit-select{display:-ms-flexbox;display:flex;width:auto!important}.fl-field[data-type=unit] .fl-field-control-wrapper{display:-ms-flexbox;display:flex}.fl-field[data-type=unit] .fl-field-description{margin-left:7px!important;padding-top:9px}.fl-field[data-type=unit] .fl-field-responsive-setting{width:auto}.fl-unit-field-inputs{background:0 0;border-radius:4px;box-shadow:0 2px 4px 0 rgba(0,0,0,.12);display:-ms-flexbox;display:flex}.fl-unit-field-inputs .fl-field-unit-select,.fl-unit-field-inputs input[type]{box-shadow:none!important;margin:0!important;border-top-right-radius:0!important;border-bottom-right-radius:0!important}.fl-unit-field-inputs .fl-field-unit-select{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center}.fl-unit-field-inputs input::-webkit-inner-spin-button,.fl-unit-field-inputs input::-webkit-outer-spin-button{-webkit-appearance:none}.fl-unit-field-input{border-right:1px solid #e6eaed!important}body .fl-unit-field-input:last-child{border-right:none!important}body .fl-unit-field-input:last-child>*{border-top-right-radius:4px!important;border-bottom-right-radius:4px!important}.fl-unit-field-unit-select{display:-ms-flexbox;display:flex;width:auto!important}select.fl-field-unit-select{background-color:#E7EBEF!important;border-top-left-radius:0!important;border-bottom-left-radius:0!important}div.fl-field-unit-select{background-color:#E7EBEF!important;padding:9px 7px!important;width:100%}.fl-field-popup-slider{background:#fff;border-radius:4px;box-shadow:0 4px 25px 0 rgba(0,0,0,.18);display:none;margin-top:10px;padding:15px;position:absolute;left:0;right:0;z-index:9999}.fl-field-popup-slider-top{margin-top:0!important;top:-100%;transform:translateY(-10px)}.fl-field-popup-slider-input{background:#E7EBEF;cursor:pointer;height:4px;text-align:left;position:relative;border-radius:3px}.fl-field-popup-slider-input .ui-slider-handle{background:#fff;border:2px solid #3AA4CC;border-radius:100%;cursor:pointer;height:12px;width:12px;position:absolute;top:-6px;margin-left:-7px}.fl-field-popup-slider-input .ui-slider-handle:focus{outline:0}.fl-field-popup-slider-arrow{position:absolute;top:-22px}.fl-field-popup-slider-arrow:after{content:' ';border-color:transparent transparent #fff;border-style:solid;border-width:0 8px 8px;width:0;height:0}.fl-field-popup-slider-top .fl-field-popup-slider-arrow{top:auto;bottom:-24px}.fl-field-popup-slider-top .fl-field-popup-slider-arrow:after{border-bottom-width:0;border-top-width:8px;border-top-color:#fff}input[type=number].fl-field-popup-slider-focus{border:2px solid #00a0d2!important}.fl-font-field{display:-ms-flexbox;display:flex}.fl-font-field label{display:block!important;margin:0!important;padding:0 0 6px 12px}.fl-font-field .fl-font-field-font-wrapper{margin-right:8px;width:70%!important}.fl-font-field .fl-font-field-weight-wrapper{width:30%!important}.fl-compound-field{max-width:350px}.fl-compound-field-section-toggle{background:#E7EAEF;border-radius:4px;border-top:2px solid transparent;border-bottom:2px solid transparent;cursor:pointer;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;height:32px;margin-bottom:8px;padding:0 12px}.fl-compound-field-section-toggle:hover{background:#dadfe5}.fl-compound-field-section-toggle .dashicons{font-size:15px;height:15px;margin-right:5px;width:15px}.fl-compound-field-section:last-child .fl-compound-field-section-toggle{margin-bottom:0}.fl-compound-field-section.fl-compound-field-section-visible{padding-bottom:12px}.fl-compound-field-section.fl-compound-field-section-visible:last-child{padding-bottom:0}.fl-compound-field-section-visible .fl-compound-field-section-toggle{background:0 0;border-top:2px solid #E7EBEF;border-radius:0}.fl-compound-field-section-visible .fl-compound-field-section-toggle:hover{background:0 0}.fl-compound-field-section-visible .fl-compound-field-section-toggle .dashicons:before{content:'\f347'}.fl-compound-field-row{display:none;padding-bottom:12px}.fl-compound-field-section-visible .fl-compound-field-row{display:-ms-flexbox;display:flex}.fl-compound-field-label{display:block!important;margin:0!important;padding:0 0 6px 12px}.fl-compound-field-label-bottom{padding:6px 0 0 12px}.fl-compound-field-label .fl-dimension-field-link{display:inline-block;padding:0 0 0 2px;position:relative;left:auto;top:-1px}.fl-compound-field-setting{padding-right:8px;width:100%}.fl-compound-field-setting:last-child{padding-right:0}.fl-compound-field-setting select{margin:0!important;width:100%}.fl-compound-field-setting .fl-unit-field-input input{width:100%!important;border-top-right-radius:0!important;border-bottom-right-radius:0!important}.fl-compound-field-setting .fl-unit-field-input{width:50%!important}.fl-compound-field-setting .fl-unit-field-input select.fl-field-unit-select{background-position:center right 2px!important;padding:2px 5px!important;width:100%;font-size:11px}.fl-typography-field .fl-font-field-font-wrapper{margin-right:8px!important}.fl-typography-field-spacing{width:calc(33.33% - 8px)}.fl-typography-field-transform{width:66.66%}.fl-typography-field-transform .fl-button-group-field-options{float:none}.fl-typography-field-transform .fl-button-group-field-option{width:100%;padding:0 7px}.fl-typography-field .fl-shadow-field{display:-ms-flexbox;display:flex}.fl-typography-field .fl-shadow-field .fl-color-picker{margin:0 8px 0 0;width:calc(33.33% - 8px)}.fl-typography-field .fl-shadow-field .fl-dimension-field-units{margin-left:0;margin-top:0;margin-right:0;width:66.66%}.fl-button-group-field-options{background:#E7EBEF;border-radius:4px;box-shadow:0 2px 4px 0 rgba(0,0,0,.12);display:-ms-flexbox;display:flex;float:left;height:36px;overflow:hidden}.fl-button-group-field-option{cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;padding:0 5px;border-radius:0;border:2px solid transparent;background:0 0}.fl-button-group-field-option:hover{top:0;background-color:transparent;color:#000;border:2px solid transparent}.fl-button-group-field-option:focus{top:0;background-color:transparent;border:2px solid #00a0d2;color:#333}.fl-button-group-field-option:first-child{border-top-left-radius:3px;border-bottom-left-radius:3px}.fl-button-group-field-option:last-child{border-top-right-radius:3px;border-bottom-right-radius:3px}.fl-button-group-field-option[data-selected="1"]{background-color:#fff;color:#000}.fl-button-group-field-option i{color:#6B6E75}.fl-button-group-field-option:hover i{color:#333}.fl-compound-field-cell{width:50%;display:block;float:left;padding-top:13px}.fl-compound-field-cell:first-child{padding-right:4px}.fl-compound-field-cell:last-child{padding-left:4px}.fl-compound-field-cell label{padding:5px 0 0;font-size:11px;font-weight:700;color:inherit!important;display:block;text-align:center;opacity:.5}.fl-shape-transform-field .fl-compound-field-row{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.fl-shape-transform-field .fl-compound-field-row>*{width:auto;-ms-flex:1 1 auto;flex:1 1 auto}.fl-shape-transform-field .fl-compound-field-row>:first-child{-ms-flex:0 0 auto;flex:0 0 auto}.fl-shape-transform-field .fl-shape-orientation-controls{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.fl-shape-transform-field .fl-shape-orientation-controls>*{-ms-flex:0 0 auto;flex:0 0 auto}.fl-shape-transform-field .fl-shape-orientation-controls .fl-button-group-field>*,.fl-shape-transform-field .fl-shape-orientation-controls .fl-button-group-field>* button{border-radius:0}.fl-shape-orientation-controls .fl-button-group-field:first-child>*,.fl-shape-orientation-controls .fl-button-group-field:first-child>* button{border-top-left-radius:4px;border-bottom-left-radius:4px}.fl-shape-orientation-controls .fl-button-group-field:last-child>*,.fl-shape-orientation-controls .fl-button-group-field:last-child>* button{border-top-right-radius:4px;border-bottom-right-radius:4px}.fl-builder-custom-field{background:#fff;border:2px solid transparent;border-radius:4px;padding:7px 10px;box-shadow:0 2px 4px 0 rgba(0,0,0,.12);min-height:36px;box-sizing:border-box}.fl-builder-field-multiple .fl-builder-custom-field{cursor:move}.fl-builder-custom-field a{color:#21759b!important;text-decoration:underline!important}.fl-builder-custom-field a:hover{color:#d54e21!important}.fl-builder-custom-field label.error{margin-top:5px}.fl-photo-field .fl-photo-preview{display:-ms-flexbox;display:flex}.fl-photo-field .fl-photo-select,.fl-photo-field.fl-photo-empty .fl-photo-preview{display:none}.fl-photo-field.fl-photo-empty .fl-photo-select{display:block}.fl-photo-field .fl-photo-preview-img{line-height:0;margin:5px 0}.fl-photo-field .fl-photo-preview-img img{max-width:60px}.fl-photo-field .fl-photo-preview select{margin:8px 0 8px 10px;width:calc(100% - 10px)}.fl-photo-field.fl-photo-no-attachment .fl-photo-preview select{display:none}.fl-photo-field .fl-photo-preview-filename{display:none;font-size:13px;font-weight:700;margin:5px 0 9px 11px}.fl-photo-field.fl-photo-no-attachment .fl-photo-preview-filename{display:inline-block;word-break:break-all}.fl-multiple-photos-field .fl-multiple-photos-select,.fl-multiple-photos-field.fl-multiple-photos-empty .fl-multiple-photos-add,.fl-multiple-photos-field.fl-multiple-photos-empty .fl-multiple-photos-count,.fl-multiple-photos-field.fl-multiple-photos-empty .fl-multiple-photos-edit,.fl-multiple-photos-lightbox .gallery-settings,.fl-photo-field.fl-photo-no-attachment .fl-photo-edit{display:none}.fl-photo-field .fl-photo-edit{margin:0 0 0 11px}.fl-photo-field .fl-photo-remove,.fl-photo-field .fl-photo-replace{margin:0 0 0 8px}.fl-builder-edit .media-modal{z-index:9999991}.fl-builder-edit .media-modal-backdrop{z-index:999999}.fl-builder-edit .media-frame{-webkit-backface-visibility:hidden;backface-visibility:hidden}.fl-builder-edit .media-modal-content h1{font-family:inherit}.fl-builder-edit form#wp-link,.popover[class*=tour-],ul.as-list{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif}.fl-builder-edit .media-modal-content .thumbnail{padding:0;border:none;border-radius:0}.fl-builder-edit .media-modal-content .attachment-preview .thumbnail{margin-bottom:0}.fl-builder-edit .media-modal-content .attachment-preview .thumbnail img{max-width:none}.fl-builder-edit button.media-modal-close{position:absolute;box-shadow:none;-webkit-box-shadow:none}.fl-builder-edit .media-frame.hide-menu{visibility:visible}span.select2-container.select2-container--open{z-index:9999999}.fl-multiple-photos-field .fl-multiple-photos-add{margin:0 0 0 8px}.fl-multiple-photos-field.fl-multiple-photos-empty .fl-multiple-photos-select{display:inline}.fl-multiple-photos-count{font-weight:700;margin-bottom:3px}.fl-video-field .fl-video-select,.fl-video-field.fl-video-empty .fl-video-preview{display:none}.fl-video-field.fl-video-empty .fl-video-select{display:block}.fl-video-field .fl-video-preview-img{float:left;line-height:0;margin:5px 0}.fl-video-field .fl-video-preview-img img{max-width:60px}.fl-video-field .fl-video-preview-img .dashicons.dashicons-media-video{display:block;font-size:60px;height:60px;line-height:60px;width:60px}.fl-video-field .fl-video-preview-filename{display:inline-block;font-size:14px;font-weight:700;margin:7px 0 5px 11px}.fl-video-field .fl-video-remove,.fl-video-field .fl-video-replace{margin:0 0 0 11px}.fl-multiple-audios-field .fl-multiple-audios-select,.fl-multiple-audios-field.fl-multiple-audios-empty .fl-multiple-audios-add,.fl-multiple-audios-field.fl-multiple-audios-empty .fl-multiple-audios-edit{display:none}.fl-multiple-audios-field.fl-multiple-audios-empty .fl-multiple-audios-select{display:block}.fl-multiple-audios-field .fl-multiple-audios-add{margin:0 0 0 8px}.fl-icon-field .fl-icon-select,.fl-icon-field.fl-icon-empty .fl-icon-preview{display:none}.fl-icon-field.fl-icon-empty .fl-icon-select{display:block}.fl-icon-field .fl-icon-preview i{display:inline-block;font-size:28px;margin:10px 10px 9px;vertical-align:middle}.fl-icon-field .fl-icon-remove{margin:0 0 0 8px}.fl-builder-hidden-editor{display:none}.fl-builder-settings .wp-switch-editor{border-radius:0;color:#333;margin-top:2px}.fl-builder-settings .mce-toolbar .mce-btn-group .mce-btn{margin:2px 0}.fl-builder-settings .mce-menubtn.mce-fixed-width button{width:100px}.fl-builder-settings .mce-menubtn.mce-fixed-width span{width:100%}.mce-close:active,.mce-close:hover,.mce-toolbar .mce-btn button:active,.mce-toolbar .mce-btn button:hover,.mce-window .mce-btn button:active,.mce-window .mce-btn button:hover{background:0 0;border:none}.wp-core-ui .quicktags-toolbar input.button.button-small{margin:1px!important}.wp-editor-container textarea.wp-editor-area{background:0 0;border:none;padding:10px;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.fl-builder-edit form#wp-link{color:#000;font-size:13px}.fl-builder-edit form#wp-link #link-options label{display:block;margin-bottom:2px}.fl-builder-edit form#wp-link #link-options label span{padding-right:10px;vertical-align:middle}.fl-builder-edit form#wp-link #link-options input[type=text]{display:inline-block;height:auto;margin:5px 0 0;padding:3px 5px;width:80%}.fl-builder-edit form#wp-link .query-results{top:225px}.fl-code-field{border:1px solid #E6E6E6;border-left:none}.ace_editor,.ace_editor *{font-family:Monaco,Menlo,"Ubuntu Mono","Droid Sans Mono",Consolas,monospace!important;font-size:12px!important;font-weight:400!important;letter-spacing:0!important}.fl-layout-field-option{border:2px solid #d9d9d9;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;box-sizing:border-box!important;-moz-box-sizing:border-box!important;-webkit-box-sizing:border-box!important;cursor:pointer;float:left;line-height:0;max-width:23%;margin:0 1% 2%;padding:5px}.fl-layout-field-option-selected,.fl-layout-field-option:hover{border-color:red}.fl-layout-field-option img{max-width:100%}.fl-link-field .fl-link-field-input-wrap{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.fl-link-field-input{width:auto!important;-ms-flex:1 1 100%;flex:1 1 100%}.fl-link-field .fl-link-field-input-wrap button{-ms-flex:0 0 0%;flex:0 0 0%;height:36px;margin:1px 1px 1px 5px}.fl-link-field-options-wrap{padding:7px 0 0 12px}.fl-link-field-options-wrap label{margin-right:7px}.fl-link-field-options-wrap span{font-size:11px;font-weight:700;color:inherit!important;text-align:center;opacity:.5}.fl-link-field-search{display:none;border:2px solid #e6eaed;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;margin:4px 0 0;padding:10px}.fl-link-field-search-title{display:block;margin:0 0 3px 2px}.fl-link-field-search-cancel{margin-top:6px}.fl-link-field-search input{box-shadow:none!important;width:100%!important;padding:3px 9px!important}.fl-link-field-search #as-original-link-search{width:100%}.fl-field-connections-toggle{padding:10px 0}.fl-field[data-type=editor] .fl-field-connections-toggle{-ms-flex-align:start;align-items:flex-start}.fl-field[data-type=link] .fl-field-connections-toggle{height:24px;margin-top:1px;-ms-flex-align:start;align-items:flex-start}.fl-field[data-type=link] .fl-field-connection{bottom:25px}.fl-field-connections-menu[data-field=fl-field-text]{margin-top:30px}.fl-help-tooltip{display:inline-block;position:relative}.fl-lightbox-width-slim .fl-help-tooltip{position:static}.fl-help-tooltip-icon{color:#999!important;cursor:pointer;font-size:15px!important;padding:5px;vertical-align:middle}.fl-help-tooltip-text{box-sizing:border-box;background:#fff;border:1px solid #ccc;box-shadow:0 0 5px #ccc;-moz-box-shadow:0 0 5px #ccc;-webkit-box-shadow:0 0 5px #ccc;display:none;font-weight:400;left:23px;padding:10px 13px;position:absolute;top:-6px;width:250px;z-index:1000;border-radius:4px}.fl-lightbox-width-slim .fl-help-tooltip-text{top:30px;left:0;width:100%}.fl-field-control .fl-form-field{margin-bottom:0}.fl-form-field[data-preview-text=icon]{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.fl-form-field-preview-text i{display:inline-block;font-size:18px;line-height:22px;margin-right:10px}.fl-builder-field-actions{padding-left:0!important;padding-right:0!important;text-align:center;width:85px}.fl-builder-field-actions i{color:#999!important;cursor:pointer;font-size:13px!important;line-height:29px!important;width:16px}.fl-builder-field-actions i:hover{color:#000!important}.fl-builder-field-actions i.fl-builder-field-copy,.fl-builder-field-actions i.fl-builder-field-delete{margin-left:5px}.fl-builder-field-actions i.fl-builder-field-move{cursor:move}.fl-builder-field-dd-helper{background:#ccc;height:30px!important;float:left;width:130px!important}.fl-builder-field-dd-zone{border:1px dashed #ccc;height:30px}.fl-builder-field-actions-single .fl-builder-field-delete,.fl-builder-field-actions-single .fl-builder-field-move{display:none!important}.fl-builder-field-multiple .fl-builder-field-actions,.fl-builder-field-multiple .fl-field-control,.fl-builder-field-multiple .fl-field-label{padding-top:2px!important;padding-bottom:2px!important}.fl-builder-field-multiple .fl-builder-field-actions{min-width:70px!important}.fl-builder-field-multiple[data-field=icons] .fl-builder-field-actions{width:70px!important}.fl-builder-field-multiple.ui-sortable-helper .fl-field-control{width:60%}.fl-builder-field-multiple.ui-sortable-helper .fl-builder-field-actions{display:none}.fl-builder-widget-settings input{display:inline-block!important;margin:5px 10px 8px!important}.fl-builder-lightbox-loading{background:url(../img/ajax-loader.svg) center center no-repeat;height:100px}.fl-builder-settings .error,.fl-builder-settings input.error{color:#d03436!important}.fl-builder-settings label.error,.fl-builder-settings p.error{color:#d03436;display:block;margin-top:5px}.fl-builder-settings .fl-form-table .fl-field-description{color:#464646;font-style:normal;margin-left:2px}.fl-lightbox .fl-field-connection{right:-1px}.fl-lightbox .fl-field-connection-content{border:2px solid transparent!important;background:#e7ebef!important}.fl-field-connection-content .fl-field-connection-label{color:#676f7a!important}.fl-field-connections-toggle{pointer-events:none;width:20px;right:-25px}.has-scrollbar .fl-field-connections-toggle{right:-22px}.fl-lightbox-width-slim tr[data-type=code] .fl-field-connections-toggle{right:10px}.fl-lightbox-width-slim .fl-code-field{width:90%}.fl-field-connections-toggle-open{transform:none!important}.fl-field-connections-toggle i{pointer-events:auto;color:#abb1ba;font-size:13px!important;transition-property:transform;transition-duration:.15s}.fl-field-connections-toggle-open i{transform:rotate(-45deg)}ul.as-selections{background-color:#fff;border:none;border-radius:4px;box-shadow:none;color:#333;font-size:12px;height:auto;line-height:15px;margin:1px;outline:0;padding:3px;width:auto}ul.as-selections.loading{background:url(../img/ajax-loader-small.svg) 98% center no-repeat}ul.as-selections li.as-selection-item{background:#d4eaf6;border:none;font-size:11px;line-height:14px;padding:8px 15px;border-radius:4px;margin:2px}ul.as-selections li.as-selection-item.blur{background:#f4f4f4}ul.as-selections li.as-selection-item a.as-close{line-height:12px}ul.as-selections li.as-original{margin:0}ul.as-selections li.as-original input{height:auto;font-size:12px;margin:0;padding:0;box-shadow:none}ul.as-list{margin:0;font-size:13px;color:#000;background-color:#fff;background-color:rgba(255,255,255,.95);z-index:2;box-shadow:0 0 10px rgba(0,0,0,.1);border:none;border:1px solid #dfdfdf;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px}li.as-message,li.as-result-item{border:none}li.as-result-item.active{background:#e5e5e5;border-radius:0;color:#333;text-shadow:none}li.as-result-item em{background:0 0!important;color:#333!important;font-size:12px;padding:0!important;font-weight:700}.fl-custom-query-filter{display:none}.fl-custom-query .fl-field[data-type=suggest] select{margin-bottom:5px;width:100%}.fl-builder-service-settings{position:relative}.fl-builder-service-error{color:red!important;padding:15px 0 0}.fl-builder-service-account-delete{color:red!important;margin-left:10px;position:relative;top:2px}.fl-lightbox-width-slim .fl-builder-service-account-delete{display:block;padding-top:7px}#fl-field-visibility_user_capability .fl-field-description,.fl-builder-service-connect-row .fl-field-description{background:#f0f0f0;color:#333!important;display:block;float:none;margin:10px 0 0;padding:10px}#fl-field-visibility_user_capability .fl-field-description a,.fl-builder-service-connect-row .fl-field-description a{color:#21759b!important;text-decoration:underline!important}.fl-ordering-field-option{background:#fff;border:1px solid #dfdfdf;border-radius:3px;cursor:move;margin-bottom:5px;padding:5px 10px}.fl-ordering-field-option .fa{color:#ccc;float:right;line-height:16px}#tiptip_holder{z-index:1000000}#tiptip_holder.tip_top #tiptip_arrow_inner{border-top-color:#333}#tiptip_holder.tip_bottom #tiptip_arrow_inner{border-bottom-color:#333}#tiptip_holder.tip_right #tiptip_arrow_inner{border-right-color:#333}#tiptip_holder.tip_left #tiptip_arrow_inner{border-left-color:#333}#tiptip_content{background:#333;box-shadow:none}.fl-builder-getting-started-video{line-height:0!important;padding:10px}.fl-builder-getting-started-video iframe{border:none;height:326px;width:100%}.fl-builder-tour-actions .fl-builder-actions-title{font-size:14px!important;line-height:19px}.fl-builder-tour-mask{bottom:0;left:0;position:fixed;right:0;top:0;z-index:100000000}.fl-builder-tour-dimmed{background:rgba(0,0,0,.7);bottom:0;left:0;position:absolute;right:0;top:0}body>.fl-builder-tour-dimmed{position:fixed}.tour-backdrop{z-index:110000}.popover[class*=tour-]{border:1px solid #ccc;border-radius:0;box-shadow:0 0 40px rgba(0,0,0,.3);color:#666;font-size:13px;font-weight:400;line-height:18px;max-width:none;padding:0;width:300px;z-index:100000001}.popover[class*=tour-].bottom>.arrow{border-bottom-color:#ccc}.popover[class*=tour-].bottom>.arrow:after{border-bottom-color:#f7f7f7}.popover[class*=tour-] .popover-title{border-radius:0;color:#333;letter-spacing:normal;text-transform:none}.popover[class*=tour-] .fa-times{color:#b3b3b3;cursor:pointer;font-size:16px;padding:5px;position:absolute;right:3px;top:2px}.popover[class*=tour-] .fa-times:hover{color:#666}.popover[class*=tour-] .popover-content{border-bottom:1px solid #d9d9d9;padding:13px 15px}.popover[class*=tour-] .fl-builder-tour-next{display:block;float:none;width:100%}.popover-navigation button{min-height:36px}.fl-builder-shortcode-mask-wrap{position:relative;pointer-events:none}.fl-builder-shortcode-mask{bottom:-1px;left:-1px;position:absolute;right:-1px;top:-1px;z-index:1}.fl-builder--search{border:2px solid transparent;position:relative;padding:0;width:54px;transition-property:width;transition-delay:.1s;transition-duration:.15s}.fl-builder--search.is-expanded{border:2px solid #00A0D0}.fl-builder--search input[type=text],.fl-builder--search input[type=text]:focus{background-color:transparent;border:none!important;box-sizing:border-box;width:100%;font-size:16px;text-align:center}.fl-builder--search:before{display:-ms-flexbox;display:flex;top:0;left:0;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;content:"\f002";font:normal normal normal 14px/1 Font Awesome\ 5 Free;text-align:center;width:100%;height:100%;position:absolute;pointer-events:none;color:rgba(128,128,128,.6);font-size:17px;opacity:1;transition-property:opacity;transition-duration:.15s}.fl-builder--main-menu-panel,.fl-builder-ui-keyboard-shortcuts{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif!important}.fl-builder--search.has-text:before,.fl-builder--search.is-expanded:before{opacity:0}.fl-builder--search input::-webkit-input-placeholder{color:rgba(128,128,128,0)!important;transition:color .25s}.fl-builder--search input:focus::-webkit-input-placeholder{color:rgba(128,128,128,.4)!important}.fl-builder--search .search-label{cursor:text}.fl-builder--search .search-clear{display:none;padding:10px 10px 10px 30px;color:#a7a7a7;font-size:12px;position:absolute;right:0;top:0;background-color:#eff1f2;background:linear-gradient(to left,#e4e7ea,#e4e7ea 75%,rgba(228,231,234,0))}.fl-builder--search.has-text .search-clear,.fl-builder--search.is-expanded input{display:inline-block}.fl-builder--search:hover .search-clear{color:#888;background-color:#eff1f2;background:linear-gradient(to left,#dadfe5,#dadfe5 75%,rgba(218,223,229,0))}.fl-builder--search.is-expanded{width:246px}@keyframes fl-builder-show-menu-item{from{transform:translateY(10px) scale(.8);opacity:0}to{transform:translateX(0) translateY(0) scale(1);opacity:1}}.fl-builder--main-menu-panel{display:none;box-sizing:border-box;position:fixed;top:calc(45px + 10px);left:10px;width:360px;color:#222;max-height:calc(100% - 66px);border-radius:4px;background:#fff;border:none;border-top:3px solid #00a0d2;box-shadow:0 11px 45px 8px rgba(0,0,0,.1);font-size:14px!important;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:10000009;pointer-events:auto}.fl-builder--main-menu-panel.is-showing{display:-ms-flexbox;display:flex}.fl-builder--main-menu-panel:before,.fl-theme-builder-preview-select-open .fl-theme-builder-preview-select-items:before{bottom:100%;right:6px;content:" ";height:0;width:0;position:absolute;pointer-events:none;border:solid;border-color:rgba(255,255,255,0);border-bottom-color:#00a0d2;border-width:13px;margin-left:-13px}.fl-builder--main-menu-panel-views{-ms-flex:1 1 100%;flex:1 1 100%;overflow:auto}.fl-builder--main-menu-panel-mask{display:none;position:fixed;top:0;left:0;right:0;bottom:0;z-index:1000119}.fl-builder--main-menu-panel .fl-builder--tabs{padding-left:20px;padding-top:15px}.fl-builder--main-menu-panel-view{display:none}.fl-builder--main-menu-panel-view.is-showing{display:block}.fl-builder--main-menu-panel-view-title{font-size:24px;font-weight:600;padding:25px 22px 0;line-height:1;white-space:nowrap}.fl-builder--main-menu-panel-view-title .title-accessory{float:right;color:#b1b1b1}.fl-builder--main-menu-panel-view-title .title-accessory>i{font-size:20px!important;width:25px!important}.fl-builder--main-menu-panel-view-title .title-accessory>i:hover{color:#222}.fl-builder--main-menu-panel-view-title .pop-view{padding:10px;margin-left:-10px;opacity:.5;font-size:25px;font-weight:400;cursor:pointer;background:0 0;outline:0;border:none;color:inherit}.fl-builder--main-menu-panel-view-title .pop-view:focus{outline:0;top:0;background:#E5EAED!important}.fl-builder--menu-item:before{display:block;content:"";float:none;clear:both}.fl-builder--menu-item{color:inherit;text-align:left;box-sizing:border-box;display:block;padding:10px 15px;margin:0 10px;width:calc(100% - 20px);background:0 0;border:none;border-radius:4px;font-size:14px;line-height:1.1;cursor:pointer;opacity:1;text-transform:none}.fl-builder--menu-item .menu-view.view-revisions{opacity:.5;padding-left:5px}.fl-builder--menu-item .menu-event.event-showGlobalSettings,.fl-builder--menu-item .menu-event.event-showLayoutSettings{color:#6bc373;padding-left:5px}.fl-builder--menu-item:hover{background:#eaf1f8;border:none;text-decoration:none;color:#000}.fl-builder--selector-menu .fl-builder--menu-item:hover{background:#fff}.fl-builder--menu-item-accessory{float:right;text-align:center;display:inline-block;min-width:40px;font-size:14px}.fl-builder--menu-item-accessory.view-arrow{font-size:18px}.fl-builder--menu{padding:0;margin:20px 0}.fl-builder--menu hr{margin:8px 0;background:#e6eaed!important;height:1px;border:none}.fl-builder--menu .fl-builder-video-wrap{padding:0 10px 10px}.fl-revision-list-item{display:-ms-flexbox;display:flex}.fl-revision-list-item-text{padding-left:15px}.fl-revision-list-item-date{padding-bottom:5px}.fl-builder--revision-actions{display:none;position:fixed;top:4px;left:4px;z-index:100008;padding:4px 4px 6px;-ms-flex-pack:center;justify-content:center;background:#fff;border-radius:4px}.fl-builder--revision-actions *{margin-right:5px}.fl-builder--revision-actions :last-child{margin:0}.fl-builder--menu-item[data-event=noRevisionsMessage]:hover{background:0 0;box-shadow:none;cursor:default}.fl-no-revisions-message-title{font-weight:700;margin-bottom:10px}.fl-no-revisions-message-text{line-height:22px}.fl-builder-module-placeholder-message{border:1px dashed #ccc;overflow:hidden;padding:20px;text-align:center;text-overflow:ellipsis;white-space:nowrap}.fl-field-connections-menu{z-index:999999}.fl-field[data-type=editor] .fl-field-connections-toggle{right:5px!important}.fl-field-connections-inline-toggle{display:inline;color:#9a9b9c;margin-left:6px}.fl-field-connections-inline-toggle i{transition-property:transform;transition-duration:.15s}.fl-field-connections-inline-toggle.fl-field-connections-toggle-open i{transform:rotate(45deg)}.fl-builder-add-ultimate-presets-button,.fl-builder-add-ultimate-rows-button,.fl-builder-pp-add-template-button,.pp-preview-button,.uabb-live-preview-button{display:none!important}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;display:block;-ms-touch-action:none;touch-action:none;background:0 0;transition-property:background;transition-duration:.15s}.ui-resizable-autohide .ui-resizable-handle,.ui-resizable-disabled .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-ne,.ui-resizable-nw,.ui-resizable-se,.ui-resizable-sw{width:12px;height:12px}.ui-resizable-se{cursor:se-resize;right:-4px;bottom:-4px}.ui-resizable-sw{cursor:sw-resize;left:-4px;bottom:-4px}.ui-resizable-nw{cursor:nw-resize;left:-4px;top:-4px}.ui-resizable-ne{cursor:ne-resize;right:-4px;top:-4px}.fl-builder-resizable-iframe-fix{position:absolute;top:0;right:0;bottom:0;left:0;z-index:100000000}.fl-builder-panel .ui-resizable-handle:active,.fl-builder-panel .ui-resizable-handle:hover,.fl-lightbox .ui-resizable-handle:active,.fl-lightbox .ui-resizable-handle:hover{background:#00a0d2}.fl-builder-panel .ui-resizable-n,.fl-builder-panel .ui-resizable-s,.fl-lightbox .ui-resizable-n,.fl-lightbox .ui-resizable-s{height:6px}.fl-builder-panel .ui-resizable-n,.fl-lightbox .ui-resizable-n{top:-3px}.fl-builder-panel .ui-resizable-s,.fl-lightbox .ui-resizable-s{bottom:-3px}.fl-builder-panel .ui-resizable-e,.fl-builder-panel .ui-resizable-w,.fl-lightbox .ui-resizable-e,.fl-lightbox .ui-resizable-w{width:6px}.fl-builder-panel .ui-resizable-e,.fl-lightbox .ui-resizable-e{right:-3px}.fl-builder-panel .ui-resizable-w,.fl-lightbox .ui-resizable-w{left:-3px}.fl-lightbox .ui-resizable-ne,.fl-lightbox .ui-resizable-nw,.fl-lightbox .ui-resizable-se,.fl-lightbox .ui-resizable-sw{background:0 0;border:6px solid transparent}.fl-lightbox .ui-resizable-ne:active,.fl-lightbox .ui-resizable-ne:hover,.fl-lightbox .ui-resizable-nw:active,.fl-lightbox .ui-resizable-nw:hover,.fl-lightbox .ui-resizable-se:active,.fl-lightbox .ui-resizable-se:hover,.fl-lightbox .ui-resizable-sw:active,.fl-lightbox .ui-resizable-sw:hover{background:0 0;border-color:#00a0d2}.fl-lightbox .ui-resizable-ne{border-bottom:none;border-left:none;border-top-right-radius:4px}.fl-lightbox .ui-resizable-nw{border-bottom:none;border-right:none;border-top-left-radius:4px}.fl-lightbox .ui-resizable-se{border-top:none;border-left:none;border-bottom-right-radius:4px}.fl-lightbox .ui-resizable-sw{border-top:none;border-right:none;border-bottom-left-radius:4px}.fl-builder-ui-keyboard-shortcuts{display:none;position:fixed;top:0;left:0;bottom:0;right:0;z-index:999999;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;background:rgba(50,50,50,.88);font-size:15px;line-height:1.3;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fl-builder-ui-keyboard-shortcuts.is-showing{display:-ms-flexbox;display:flex}.fl-builder-ui-keyboard-shortcuts-content{box-sizing:border-box;width:500px;background:#f5f7f9;border-radius:4px;padding:30px 0 0;box-shadow:0 10px 30px rgba(0,0,0,.15)}.fl-builder-ui-keyboard-shortcut-item{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center;padding:12px 40px}.fl-builder-ui-keyboard-shortcut-item:nth-child(even){background:#eef2f5}.fl-builder-ui-shortcut-keycode{margin-left:auto;text-transform:uppercase;letter-spacing:2px}.fl-builder-ui-keyboard-shortcust-footer{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:center;justify-content:center;padding:10px}.dismiss-shortcut-ui{padding:10px;border-radius:4px;background:#fff;color:#000;font-size:14px;border:2px solid #fff}.dismiss-shortcut-ui:focus,.dismiss-shortcut-ui:hover{top:0;color:#000;background:#eef2f5;border:2px solid #eef2f5}.fl-builder-ui-skin--dark .fl-builder--main-menu-panel,.fl-builder-ui-skin--dark .fl-builder--preview-actions,.fl-builder-ui-skin--dark .fl-builder--search-results-panel,.fl-builder-ui-skin--dark .fl-builder-panel,.fl-builder-ui-skin--dark .fl-lightbox,body.fl-builder-ui-skin--dark .fl-builder-bar .fl-builder-bar-content{background:#23282d;color:#b4b9be;border-color:#1d1d1d}.fl-builder-ui-skin--dark .fl-builder--panel-header{color:#b4b9be;border-bottom-color:#1d1d1d;border-top-color:#1d1d1d}.fl-builder-ui-skin--dark .fl-builder-panel.fl-builder-ui-pinned .fl-builder--panel-header{border-top-color:#1d2227}.fl-builder-ui-skin--dark .fl-builder--main-menu-panel:before{border-bottom-color:#1d1d1d}.fl-builder-ui-skin--dark .fl-builder--panel-arrow polygon{fill:#1d1d1d}.fl-builder-ui-skin--dark .fl-builder-panel-search .fl-builder-panel-search-input{background:#24282e}.fl-builder-ui-skin--dark .fl-responsive-preview-content{background:#131619}.fl-builder-ui-skin--dark .fl-form-table th{background:#23282d!important;color:#7d8690}.fl-builder-ui-skin--dark .fl-builder--preview-actions .device-icons,.fl-builder-ui-skin--dark .fl-builder-button{background:#2c333a}.fl-builder-ui-skin--dark .fl-builder-button:focus{background:#131a22}.fl-builder-ui-skin--dark .fl-builder-button.fl-builder-button-primary{color:#fff!important;fill:#fff!important;background:#00A0D2}.fl-builder-ui-skin--dark .fl-builder-button.fl-builder-buy-button,.fl-builder-ui-skin--dark .fl-builder-button.fl-builder-feedback-button,.fl-builder-ui-skin--dark .fl-builder-button.fl-builder-upgrade-button{background-color:#F7A407;color:#fff!important}.fl-builder-ui-skin--dark .fl-builder-button.fl-builder-button-silent:focus{border:2px solid #00a0d2!important}.fl-builder-ui-skin--dark .fl-builder-content-panel--button:hover,.fl-builder-ui-skin--dark .fl-builder-content-panel-button{color:#00A0D2!important}.fl-builder-ui-skin--dark .fl-builder--menu>a:hover,.fl-builder-ui-skin--dark .fl-builder--menu>button:hover{background:#101215!important}.fl-builder-ui-skin--dark .fl-builder--menu>a:focus,.fl-builder-ui-skin--dark .fl-builder--menu>button:focus{background:#101215!important;color:#fff!important}.fl-builder-ui-skin--dark .fl-builder-bar-title{border-color:#101215}.fl-builder-ui-skin--dark .fl-builder-bar-title:hover{background-color:#181b1f}.fl-builder-simple.fl-builder-ui-skin--dark .fl-builder-bar-title:hover{background-color:transparent}.fl-builder-ui-skin--dark .fl-builder-layout-title{color:#c6cdd6}.fl-builder-ui-skin--dark .fl-builder-bar-title-caret i,.fl-builder-ui-skin--dark .fl-builder-layout-pretitle,.fl-builder-ui-skin--dark .fl-theme-builder-preview-select .fl-theme-builder-preview-select-title{color:#7d8690}.fl-builder-ui-skin--dark button.fl-builder-button.fl-builder-bar-title-caret:focus{background-color:#101215!important}.fl-builder-ui-skin--dark .fl-builder--search:before{color:rgba(162,173,184,.73)}.fl-builder-ui-skin--dark .fl-builder--search input:focus::-webkit-input-placeholder{color:rgba(162,173,184,.73)!important}.fl-builder-ui-skin--dark .fl-builder--search .search-clear{color:rgba(162,173,184,.5);background-color:#e4e4e4;background:linear-gradient(to left,#383f46,#383f46 75%,rgba(56,63,70,0))}.fl-builder-ui-skin--dark .fl-builder--menu hr{background-color:#23282d!important;border:none}.fl-builder-ui-skin--dark .fl-builder--tabs{border-color:#383f46!important}.fl-builder-ui-skin--dark .fl-builder--tabs .is-showing,.fl-builder-ui-skin--dark .fl-builder-settings-tabs a.fl-active,.fl-builder-ui-skin--dark .fl-builder-settings-tabs-more.fl-contains-active{color:#fff!important;fill:#fff!important;background:#181b20!important}.fl-builder-ui-skin--dark .fl-builder--tabs :focus{background-color:#101215!important;color:#fff!important}.fl-builder-ui-skin--dark .fl-builder--tabs .is-showing:focus{color:#00a0d2!important}.fl-builder-ui-skin--dark .fl-builder--menu-item:hover{background:#383f46;color:#a8b3bf}.fl-builder-ui-skin--dark .fl-builder--menu * .fl-builder--menu-item-accessory,.fl-builder-ui-skin--dark .fl-builder-blocks-section-group-name{color:#7d8690}.fl-builder-ui-skin--dark .fl-builder--selector-display{color:#c6cdd6;background:url(../img/svg/select-arrow-down-alt2-light.svg) center right 10px no-repeat #1a1b22!important}.fl-builder-ui-skin--dark .fl-builder--selector-display-label{color:#b5becb}.fl-builder-ui-skin--dark .fl-builder-panel-search-input input{border-color:#5b656f;color:#b8c2ce;background:#171b1f!important}.fl-builder-ui-skin--dark .fl-builder--selector-display-label:focus,.fl-builder-ui-skin--dark .fl-builder-panel-search-input input:focus{border-color:#00a0d2}.fl-builder-ui-skin--dark .fl-builder--group-label{color:#aaafb5!important;background:#24282e}.fl-builder-ui-skin--dark .fl-builder--category-select .fl-builder--selector-menu{border-color:#101215!important;color:#7c858e;background-color:#101215}.fl-builder-ui-skin--dark .fl-builder--category-select .fl-builder--selector-menu:before{border-bottom-color:#101215}.fl-builder-ui-skin--dark .fl-builder--menu>a,.fl-builder-ui-skin--dark .fl-builder--menu>button,.fl-builder-ui-skin--dark .fl-builder--menu>span{color:#a1adb9}.fl-builder-ui-skin--dark .fl-builder--category-select .fl-builder--selector-menu .fl-builder--menu-item:hover{background:#23282d!important;color:#a1adb9}.fl-builder-ui-skin--dark .fl-builder--category-select .fl-builder--selector-menu .fl-builder--menu-item:focus{background:#23282d!important;color:#00a0d2!important}.fl-builder-ui-skin--dark .fl-builder-panel-drag-handle{fill:#5b656f}.fl-builder-ui-skin--dark .fl-builder--template-collection-section-header,.fl-builder-ui-skin--dark .fl-builder-blocks-section .fl-builder-blocks-section-header,.fl-builder-ui-skin--dark .fl-builder-settings-section-header{background-color:#191b21;border-color:#191b21}.fl-builder-ui-skin--dark .fl-builder--template-collection-section-name,.fl-builder-ui-skin--dark .fl-builder--user-templates-section-name,.fl-builder-ui-skin--dark .fl-builder-blocks-section .fl-builder-blocks-section-title,.fl-builder-ui-skin--dark .fl-builder-settings-fields .fl-builder-settings-title{color:#7d8690!important;fill:#7d8690;background:#24282e}.fl-builder-ui-skin--dark .fl-builder-settings-fields .fl-builder-settings-title:focus{border-color:#7d8690}.fl-builder-ui-skin--dark .fl-builder-blocks-section-content .fl-builder-block,.fl-builder-ui-skin--dark .fl-user-template{color:#b8c2ce}.fl-builder-ui-skin--dark .fl-builder-block:hover .fl-builder-block-content,.fl-builder-ui-skin--dark .fl-user-template:hover{background:#171b1f;color:#fff}.fl-builder-ui-skin--dark .fl-builder-block:hover i,.fl-builder-ui-skin--dark .fl-user-template:hover i{color:#6d7782!important}.fl-builder-ui-skin--dark .fl-builder-block:hover a:hover i,.fl-builder-ui-skin--dark .fl-user-template:hover a:hover i{color:#9eacbb!important}.fl-builder-ui-skin--dark .fl-builder-block .fl-builder-block-icon{fill:#b5becb}.fl-builder-ui-skin--dark .fl-builder-block-visual.fl-cols-visual .fl-cols-visual-col,.fl-builder-ui-skin--dark .fl-builder-block:hover .fl-builder-block-visual.fl-cols-visual .fl-cols-visual-col{background:#7d8690}.fl-builder-ui-skin--dark .fl-user-templates{border-color:#101215}.fl-builder-ui-skin--dark .fl-builder--template-thumbnail{border-color:#393f44}.fl-builder-ui-skin--dark .fl-builder--menu a.fl-template-collection{color:#a8b3bf}.fl-builder-ui-skin--dark .fl-lightbox .fl-lightbox-header h1{color:#fff!important}.fl-builder-ui-skin--dark .fl-form-table th label{color:#a8b3bf!important}.fl-builder-ui-skin--dark .fl-builder-settings-tabs{background-color:#2c333a!important}.fl-builder-ui-skin--dark .fl-builder-settings-fields h3.fl-builder-settings-title{background:#24282e}.fl-builder-ui-skin--dark h3.fl-builder-settings-title .fl-builder-settings-title-text-wrap{color:#a8b3bf;background-color:#1b2025}.fl-builder-ui-skin--dark .fl-lightbox :not(i){color:#a7b1bb!important}.fl-builder-ui-skin--dark .fl-builder-button{color:#c6cdd6!important;fill:#c6cdd6!important}.fl-builder-ui-skin--dark .fl-builder-content-panel--button:hover,.fl-builder-ui-skin--dark .fl-builder-content-panel-button{fill:#00A0D2!important}.fl-builder-ui-skin--dark .fl-lightbox .fl-builder-button.fl-builder-button-primary{color:#fff!important}.fl-builder-ui-skin--dark .fl-color-picker-color.fl-color-picker-empty{background:#1a1b22}.fl-color-picker-color.fl-color-picker-empty .fl-color-picker-icon{fill:#6f7881}.fl-builder-ui-skin--dark .fl-color-picker-clear{background-color:#121a23}.fl-builder-ui-skin--dark .fl-color-picker-clear:hover{background-color:#373f46}.fl-builder-ui-skin--dark span.fl-builder-block-no-node-templates:hover{background:#1d2025}.fl-builder-ui-skin--dark .fl-builder-settings-tab-description{background:#1d2227}.fl-builder-ui-skin--dark .fl-builder-panel-search button svg .filled-shape{fill:#b5becb}.fl-builder-ui-skin--dark .fl-builder-custom-field,.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=email],.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=file],.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=number],.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=password],.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=search],.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=tel],.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=text],.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=url],.fl-builder-ui-skin--dark .fl-builder-settings-fields select,.fl-builder-ui-skin--dark .fl-builder-settings-fields textarea{background-color:#181b20!important}.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=email]:focus,.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=file]:focus,.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=number]:focus,.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=password]:focus,.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=search]:focus,.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=tel]:focus,.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=text]:focus,.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=url]:focus,.fl-builder-ui-skin--dark .fl-builder-settings-fields select:focus,.fl-builder-ui-skin--dark .fl-builder-settings-fields textarea:focus{border-color:#00a0d2!important;color:#fff!important}.fl-builder-ui-skin--dark .fl-builder-settings-fields select{background-image:url(../img/svg/select-arrow-down-alt2-light.svg)!important}.fl-builder-ui-skin--dark .fl-builder-custom-field select,.fl-builder-ui-skin--dark .fl-photo-field select{border-color:#7d8690!important}.fl-builder-ui-skin--dark .fl-field i.fl-field-responsive-toggle{color:#6b747d}.fl-builder-ui-skin--dark .fl-builder--main-menu-panel-view-title,.fl-builder-ui-skin--dark .fl-field i.fl-field-responsive-toggle:hover{color:#a8b3bf}.fl-builder-ui-skin--dark .fl-builder--saving-indicator{color:#858f99}.fl-builder-ui-skin--dark .fl-icons-list i:hover{background-color:#16191d;color:#fff}.fl-builder-ui-skin--dark .fl-color-picker-clear .fl-color-picker-icon-remove:after,.fl-builder-ui-skin--dark .fl-color-picker-clear .fl-color-picker-icon-remove:before{background:#6f7881}.fl-builder-ui-skin--dark .fl-builder--user-templates-section-content{border-color:#1d1d1d}.fl-builder-ui-skin--dark .fl-theme-builder-preview-select.fl-builder-button{background:0 0;border-right-color:#101215!important}.fl-builder-ui-skin--dark .fl-theme-builder-preview-select.fl-builder-button:hover{background:#181b1f}.fl-builder-ui-skin--dark .fl-theme-builder-preview-select .fl-theme-builder-preview-select-title span{color:#c6cdd6}.fl-builder-ui-skin--dark .fl-builder-settings-tabs-overflow-menu{background:#131a22;border-color:#353c43 #131a22 #131a22}.fl-builder-ui-skin--dark .fl-builder-settings-tabs-overflow-menu:before{border-bottom-color:#353c43}.fl-builder-ui-skin--dark .fl-builder-settings-tabs-overflow-menu>a:active,.fl-builder-ui-skin--dark .fl-builder-settings-tabs-overflow-menu>a:focus,.fl-builder-ui-skin--dark .fl-builder-settings-tabs-overflow-menu>a:hover{background:#383f46}.fl-builder-ui-skin--dark .fl-builder-settings-tabs-overflow-menu>a.fl-active,.fl-builder-ui-skin--dark .fl-builder-settings-tabs-overflow-menu>a:hover.fl-active{color:#fff!important;background:#383f46}.fl-builder-ui-skin--dark ul.as-selections{background-color:#121a23}.fl-builder-ui-skin--dark .fl-custom-query .fl-builder-settings-section{border-top:2px solid #1b2026!important}.fl-builder-ui-skin--dark div.fl-field-unit-select{background-color:#181b20!important}.fl-builder-ui-skin--dark .fl-dimension-field-units>*{border-right:1px solid #383f46}.fl-builder-ui-skin--dark .fl-field-popup-slider,.fl-builder-ui-skin--dark .fl-field-popup-slider-input .ui-slider-handle{background:#383f46}.fl-builder-ui-skin--dark .fl-field-popup-slider-arrow:after{border-bottom-color:#383f46}.fl-builder-ui-skin--dark .fl-field-popup-slider-input{background-color:#121a23}.fl-builder-ui-skin--dark .fl-unit-field-input{border-right:1px solid #383f46!important}.fl-builder-ui-skin--dark .fl-button-group-field-option[data-selected="1"]{background-color:#383f46;color:#fff}.fl-builder-ui-skin--dark .fl-button-group-field-option[data-selected="1"] i{color:#fff!important}.fl-builder-ui-skin--dark .fl-button-group-field-options{background:#181b20}.fl-builder-ui-skin--dark .fl-compound-field-section-toggle{background-color:#181b20}.fl-builder-ui-skin--dark .fl-compound-field-section-toggle:hover{background-color:#383f46}.fl-builder-ui-skin--dark .fl-compound-field-section-visible .fl-compound-field-section-toggle{border-top-color:#121a23!important;background-color:transparent}.fl-builder-ui-skin--dark .fl-field-connections-toggle i{color:#7c8590}.fl-builder-ui-skin--dark .fl-lightbox .fl-field-connection-content{background-color:#191b20!important}.fl-builder-ui-skin--dark .fl-nanoscroller>.fl-nanoscroller-pane>.fl-nanoscroller-slider{background-color:#181b20}.fl-builder-ui-skin--dark .fl-nanoscroller>.fl-nanoscroller-pane:hover>.fl-nanoscroller-slider{background-color:#5a646f}.fl-builder-ui-skin--dark .fl-nanoscroller>.fl-nanoscroller-pane.active>.fl-nanoscroller-slider{background-color:#00A0D2}.fl-builder-ui-skin--dark .fl-lightbox div.mce-panel{background:#383f46}.fl-builder-ui-skin--dark .fl-lightbox .mce-toolbar .mce-ico{color:#a7b1bb}.fl-builder-ui-skin--dark .fl-lightbox .wp-core-ui .button,.fl-builder-ui-skin--dark .fl-lightbox .wp-core-ui .button-secondary{background:#383f46;border:none;box-shadow:none}.fl-builder-ui-skin--dark .fl-lightbox .fl-builder-settings .wp-switch-editor{background:#23282d}.fl-builder-ui-skin--dark .fl-lightbox .html-active .switch-html,.fl-builder-ui-skin--dark .fl-lightbox .quicktags-toolbar,.fl-builder-ui-skin--dark .fl-lightbox .tmce-active .switch-tmce{background:#383f46}.fl-builder-ui-skin--dark .fl-lightbox textarea.wp-editor-area{background:0 0!important}.fl-builder-ui-skin--dark .fl-lightbox .wp-core-ui .button-secondary:focus,.fl-builder-ui-skin--dark .fl-lightbox .wp-core-ui .button-secondary:hover,.fl-builder-ui-skin--dark .fl-lightbox .wp-core-ui .button.focus,.fl-builder-ui-skin--dark .fl-lightbox .wp-core-ui .button.hover,.fl-builder-ui-skin--dark .fl-lightbox .wp-core-ui .button:focus,.fl-builder-ui-skin--dark .fl-lightbox .wp-core-ui .button:hover{background:#191b20}
|
extensions/fl-builder-cache-helper/includes/admin-settings-cache-plugins.php
CHANGED
@@ -11,7 +11,8 @@ $plugins = \FLCacheClear\Plugin::get_plugins();
|
|
11 |
<p><?php _e( 'This tool applies to caches created by the following:', 'fl-builder' ); ?></p>
|
12 |
<?php echo $plugins; ?>
|
13 |
<p>
|
14 |
-
<?php
|
|
|
15 |
</p>
|
16 |
<p>
|
17 |
<label>
|
11 |
<p><?php _e( 'This tool applies to caches created by the following:', 'fl-builder' ); ?></p>
|
12 |
<?php echo $plugins; ?>
|
13 |
<p>
|
14 |
+
<?php /* translators: %s: branded builder name */ ?>
|
15 |
+
<?php printf( __( 'Enable the following setting to clear the caches created by any of these caching plugins. If enabled, cache clearing occurs when layouts and templates are saved and when WordPress finishes updating plugins and themes. This setting also defines the DONOTCACHEPAGE constant, which is respected by most cache plugins, to keep the page from being cached when the %s editor is active.', 'fl-builder' ), FLBuilderModel::get_branding() ); ?>
|
16 |
</p>
|
17 |
<p>
|
18 |
<label>
|
extensions/fl-builder-cache-helper/plugins/acf.php
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
namespace FLCacheClear;
|
3 |
+
class ACF {
|
4 |
+
|
5 |
+
var $name = 'Advanced Custom Fields';
|
6 |
+
var $url = 'https://wordpress.org/plugins/advanced-custom-fields/';
|
7 |
+
|
8 |
+
var $filters = array( 'admin_init' );
|
9 |
+
|
10 |
+
function run() {
|
11 |
+
// nothing here
|
12 |
+
}
|
13 |
+
|
14 |
+
function filters() {
|
15 |
+
add_filter( 'acf/save_post', function( $post_id ) {
|
16 |
+
\FLBuilderModel::delete_all_asset_cache( $post_id );
|
17 |
+
});
|
18 |
+
}
|
19 |
+
}
|
extensions/fl-builder-cache-helper/plugins/hummingbird.php
CHANGED
@@ -6,7 +6,7 @@ class Hummingbird {
|
|
6 |
var $url = 'https://wordpress.org/plugins/hummingbird-performance/';
|
7 |
|
8 |
static function run() {
|
9 |
-
if ( class_exists( '\WP_Hummingbird_Utils' ) ) {
|
10 |
if ( \WP_Hummingbird_Utils::get_module( 'page_cache' )->is_active() ) {
|
11 |
\WP_Hummingbird_Utils::get_module( 'page_cache' )->clear_cache();
|
12 |
\WP_Hummingbird_Module_Page_Cache::log_msg( 'Cache cleared by Beaver Builder.' );
|
6 |
var $url = 'https://wordpress.org/plugins/hummingbird-performance/';
|
7 |
|
8 |
static function run() {
|
9 |
+
if ( class_exists( '\WP_Hummingbird_Utils' ) && class_exists( '\WP_Hummingbird' ) ) {
|
10 |
if ( \WP_Hummingbird_Utils::get_module( 'page_cache' )->is_active() ) {
|
11 |
\WP_Hummingbird_Utils::get_module( 'page_cache' )->clear_cache();
|
12 |
\WP_Hummingbird_Module_Page_Cache::log_msg( 'Cache cleared by Beaver Builder.' );
|
extensions/fl-builder-cache-helper/plugins/pantheon.php
ADDED
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
namespace FLCacheClear;
|
3 |
+
class Pantheon {
|
4 |
+
|
5 |
+
var $name = 'Pantheon Hosting';
|
6 |
+
var $url = 'https://pantheon.io/';
|
7 |
+
|
8 |
+
static function run() {
|
9 |
+
if ( function_exists( 'pantheon_wp_clear_edge_all' ) ) {
|
10 |
+
$ret = pantheon_wp_clear_edge_all();
|
11 |
+
}
|
12 |
+
}
|
13 |
+
}
|
extensions/fl-builder-cache-helper/plugins/supercache.php
CHANGED
@@ -7,7 +7,11 @@ class Supercache {
|
|
7 |
|
8 |
static function run() {
|
9 |
if ( function_exists( '\wp_cache_clear_cache' ) ) {
|
10 |
-
|
|
|
|
|
|
|
|
|
11 |
}
|
12 |
}
|
13 |
}
|
7 |
|
8 |
static function run() {
|
9 |
if ( function_exists( '\wp_cache_clear_cache' ) ) {
|
10 |
+
if ( is_multisite() ) {
|
11 |
+
\wp_cache_clear_cache( get_current_blog_id() );
|
12 |
+
} else {
|
13 |
+
\wp_cache_clear_cache();
|
14 |
+
}
|
15 |
}
|
16 |
}
|
17 |
}
|
extensions/fl-builder-multisite/classes/class-fl-builder-multisite.php
CHANGED
@@ -125,11 +125,7 @@ final class FLBuilderMultisite {
|
|
125 |
static public function blog_exists( $blog_id ) {
|
126 |
global $wpdb;
|
127 |
|
128 |
-
|
129 |
-
$like = esc_sql( $wpdb->esc_like( $blog_id ) );
|
130 |
-
} else {
|
131 |
-
$like = like_escape( esc_sql( $blog_id ) );
|
132 |
-
}
|
133 |
|
134 |
return $wpdb->get_row( $wpdb->prepare( "SELECT blog_id FROM $wpdb->blogs WHERE blog_id = '%s'", $like ) ); // @codingStandardsIgnoreLine
|
135 |
}
|
125 |
static public function blog_exists( $blog_id ) {
|
126 |
global $wpdb;
|
127 |
|
128 |
+
$like = esc_sql( $wpdb->esc_like( $blog_id ) );
|
|
|
|
|
|
|
|
|
129 |
|
130 |
return $wpdb->get_row( $wpdb->prepare( "SELECT blog_id FROM $wpdb->blogs WHERE blog_id = '%s'", $like ) ); // @codingStandardsIgnoreLine
|
131 |
}
|
extensions/fl-builder-seo-plugins/classes/class-fl-builder-seo-plugins.php
ADDED
@@ -0,0 +1,151 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Add support for SEO plugins
|
5 |
+
* @since 2.2.4
|
6 |
+
*/
|
7 |
+
class FLBuilderSeoPlugins {
|
8 |
+
|
9 |
+
function __construct() {
|
10 |
+
|
11 |
+
add_action( 'admin_init', array( $this, 'init' ) );
|
12 |
+
add_action( 'admin_head', array( $this, 'remove_yoast_meta_box_on_edit' ), 999 );
|
13 |
+
|
14 |
+
add_filter( 'wpseo_sitemap_exclude_post_type', array( $this, 'sitemap_exclude_post_type' ), 10, 2 );
|
15 |
+
add_filter( 'wpseo_sitemap_exclude_taxonomy', array( $this, 'sitemap_exclude_taxonomy' ), 10, 2 );
|
16 |
+
add_filter( 'manage_edit-fl-builder-template_columns', array( $this, 'remove_columns' ) );
|
17 |
+
|
18 |
+
add_filter( 'the_seo_framework_post_type_disabled', array( $this, 'sf_type' ), 10, 2 );
|
19 |
+
add_filter( 'the_seo_framework_sitemap_exclude_cpt', array( $this, 'sf_sitemap' ) );
|
20 |
+
|
21 |
+
add_filter( 'rank_math/sitemap/excluded_post_types', array( $this, 'rankmath_types' ) );
|
22 |
+
}
|
23 |
+
|
24 |
+
function init() {
|
25 |
+
global $pagenow;
|
26 |
+
if ( FLBuilderAJAX::doing_ajax() || 'post.php' !== $pagenow ) {
|
27 |
+
return;
|
28 |
+
}
|
29 |
+
if ( defined( 'WPSEO_VERSION' ) ) {
|
30 |
+
$this->enqueue_script( 'yoast' );
|
31 |
+
} elseif ( class_exists( 'RankMath' ) ) {
|
32 |
+
$this->enqueue_script( 'rankmath' );
|
33 |
+
}
|
34 |
+
}
|
35 |
+
|
36 |
+
function rankmath_types( $post_types ) {
|
37 |
+
unset( $post_types['fl-builder-template'] );
|
38 |
+
return $post_types;
|
39 |
+
}
|
40 |
+
|
41 |
+
function remove_columns( $columns ) {
|
42 |
+
|
43 |
+
// remove the Yoast SEO columns
|
44 |
+
unset( $columns['wpseo-score'] );
|
45 |
+
unset( $columns['wpseo-title'] );
|
46 |
+
unset( $columns['wpseo-links'] );
|
47 |
+
unset( $columns['wpseo-metadesc'] );
|
48 |
+
unset( $columns['wpseo-focuskw'] );
|
49 |
+
unset( $columns['wpseo-score-readability'] );
|
50 |
+
// RankMath columns
|
51 |
+
unset( $columns['rank_math_seo_details'] );
|
52 |
+
unset( $columns['rank_math_title'] );
|
53 |
+
unset( $columns['rank_math_description'] );
|
54 |
+
return $columns;
|
55 |
+
}
|
56 |
+
|
57 |
+
function remove_yoast_meta_box_on_edit() {
|
58 |
+
if ( function_exists( 'remove_meta_box' ) ) {
|
59 |
+
remove_meta_box( 'wpseo_meta', 'fl-builder-template', 'normal' );
|
60 |
+
}
|
61 |
+
}
|
62 |
+
|
63 |
+
function sitemap_exclude_post_type( $value, $post_type ) {
|
64 |
+
if ( 'fl-builder-template' === $post_type ) {
|
65 |
+
return true;
|
66 |
+
}
|
67 |
+
return $value;
|
68 |
+
}
|
69 |
+
|
70 |
+
function sitemap_exclude_taxonomy( $value, $taxonomy ) {
|
71 |
+
if ( 'fl-builder-template-category' === $taxonomy ) {
|
72 |
+
return true;
|
73 |
+
}
|
74 |
+
return $value;
|
75 |
+
}
|
76 |
+
|
77 |
+
function enqueue_script( $plugin ) {
|
78 |
+
|
79 |
+
global $post;
|
80 |
+
$orig = $post;
|
81 |
+
|
82 |
+
if ( ! isset( $_GET['post'] ) ) {
|
83 |
+
return false;
|
84 |
+
}
|
85 |
+
|
86 |
+
$post_id = $_GET['post'];
|
87 |
+
|
88 |
+
$post_type = get_post_type( $post_id );
|
89 |
+
|
90 |
+
if ( in_array( $post_type, array( 'fl-theme-layout', 'fl-builder-template' ) ) ) {
|
91 |
+
return false;
|
92 |
+
}
|
93 |
+
|
94 |
+
add_action( 'admin_enqueue_scripts', array( $this, 'dequeue_layout_scripts' ), 10000 );
|
95 |
+
|
96 |
+
if ( 'yoast' === $plugin ) {
|
97 |
+
$deps = array( 'yoast-seo-post-scraper' );
|
98 |
+
} else {
|
99 |
+
$deps = array( 'rank-math-post-metabox' );
|
100 |
+
}
|
101 |
+
|
102 |
+
$data = $this->content_data();
|
103 |
+
$post = $orig;
|
104 |
+
|
105 |
+
if ( $data ) {
|
106 |
+
wp_enqueue_script( 'bb-seo-scripts', FL_BUILDER_SEO_PLUGINS_URL . "js/plugin-$plugin.js", $deps, false, true );
|
107 |
+
wp_localize_script( 'bb-seo-scripts', 'bb_seo_data', array( 'content' => $data ) );
|
108 |
+
}
|
109 |
+
}
|
110 |
+
|
111 |
+
function dequeue_layout_scripts() {
|
112 |
+
global $wp_scripts;
|
113 |
+
foreach ( $wp_scripts->queue as $item ) {
|
114 |
+
if ( false !== strpos( $item, 'fl-builder-layout' ) ) {
|
115 |
+
wp_dequeue_script( $item );
|
116 |
+
}
|
117 |
+
}
|
118 |
+
}
|
119 |
+
|
120 |
+
function content_data() {
|
121 |
+
|
122 |
+
if ( ! isset( $_GET['post'] ) ) {
|
123 |
+
return false;
|
124 |
+
}
|
125 |
+
|
126 |
+
$id = $_GET['post'];
|
127 |
+
|
128 |
+
if ( ! get_post_meta( $id, '_fl_builder_enabled', true ) ) {
|
129 |
+
return false;
|
130 |
+
}
|
131 |
+
ob_start();
|
132 |
+
echo do_shortcode( "[fl_builder_insert_layout id=$id]" );
|
133 |
+
$data = ob_get_clean();
|
134 |
+
return str_replace( PHP_EOL, '', $data );
|
135 |
+
}
|
136 |
+
|
137 |
+
public function sf_type( $value, $post_type ) {
|
138 |
+
if ( 'fl-builder-template' === $post_type ) {
|
139 |
+
return true;
|
140 |
+
}
|
141 |
+
return $value;
|
142 |
+
}
|
143 |
+
|
144 |
+
public function sf_sitemap( $types ) {
|
145 |
+
$types[] = 'fl-builder-template';
|
146 |
+
return $types;
|
147 |
+
}
|
148 |
+
|
149 |
+
}
|
150 |
+
|
151 |
+
new FLBuilderSeoPlugins();
|
extensions/fl-builder-seo-plugins/fl-builder-seo-plugins.php
ADDED
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// Defines
|
4 |
+
define( 'FL_BUILDER_SEO_PLUGINS_DIR', FL_BUILDER_DIR . 'extensions/fl-builder-seo-plugins/' );
|
5 |
+
define( 'FL_BUILDER_SEO_PLUGINS_URL', FL_BUILDER_URL . 'extensions/fl-builder-seo-plugins/' );
|
6 |
+
|
7 |
+
// Classes
|
8 |
+
require_once FL_BUILDER_SEO_PLUGINS_DIR . 'classes/class-fl-builder-seo-plugins.php';
|
extensions/fl-builder-seo-plugins/js/plugin-rankmath.js
ADDED
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
(function($){
|
2 |
+
var RankMathIntegration = function() {
|
3 |
+
this.hooks()
|
4 |
+
}
|
5 |
+
|
6 |
+
RankMathIntegration.prototype.hooks = function() {
|
7 |
+
RankMathApp.registerPlugin( 'bb-seo' )
|
8 |
+
wp.hooks.addFilter( 'rank_math_content', 'bb-seo', function(content) {
|
9 |
+
return window.bb_seo_data.content;
|
10 |
+
} )
|
11 |
+
}
|
12 |
+
|
13 |
+
RankMathIntegration.prototype.getContent = function( content ) {
|
14 |
+
return window.bb_seo_data.content;
|
15 |
+
}
|
16 |
+
|
17 |
+
$( document ).ready( function () {
|
18 |
+
new RankMathIntegration()
|
19 |
+
})
|
20 |
+
})(jQuery);
|
extensions/fl-builder-seo-plugins/js/plugin-yoast.js
ADDED
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
(function($){
|
2 |
+
$(document).ready(function(){
|
3 |
+
|
4 |
+
BeaverPlugin = function() {
|
5 |
+
window.YoastSEO.app.registerPlugin( 'beaverPlugin', {status: 'ready'} );
|
6 |
+
window.YoastSEO.app.registerModification( 'content', this.myContentModification, 'beaverPlugin', 5 );
|
7 |
+
}
|
8 |
+
BeaverPlugin.prototype.myContentModification = function(data) {
|
9 |
+
return window.bb_seo_data.content;
|
10 |
+
};
|
11 |
+
new BeaverPlugin();
|
12 |
+
});
|
13 |
+
})(jQuery);
|
fl-builder.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
* Plugin Name: Beaver Builder Plugin (Lite Version)
|
4 |
* Plugin URI: https://www.wpbeaverbuilder.com/?utm_medium=bb&utm_source=plugins-admin-page&utm_campaign=plugins-admin-uri
|
5 |
* Description: A drag and drop frontend WordPress page builder plugin that works with almost any theme!
|
6 |
-
* Version: 2.2.
|
7 |
* Author: The Beaver Builder Team
|
8 |
* Author URI: https://www.wpbeaverbuilder.com/?utm_medium=bb&utm_source=plugins-admin-page&utm_campaign=plugins-admin-author
|
9 |
* Copyright: (c) 2014 Beaver Builder
|
3 |
* Plugin Name: Beaver Builder Plugin (Lite Version)
|
4 |
* Plugin URI: https://www.wpbeaverbuilder.com/?utm_medium=bb&utm_source=plugins-admin-page&utm_campaign=plugins-admin-uri
|
5 |
* Description: A drag and drop frontend WordPress page builder plugin that works with almost any theme!
|
6 |
+
* Version: 2.2.4.3
|
7 |
* Author: The Beaver Builder Team
|
8 |
* Author URI: https://www.wpbeaverbuilder.com/?utm_medium=bb&utm_source=plugins-admin-page&utm_campaign=plugins-admin-author
|
9 |
* Copyright: (c) 2014 Beaver Builder
|
fonts/fontawesome/css/all.min.css
CHANGED
@@ -1,5 +1,5 @@
|
|
1 |
/*!
|
2 |
-
* Font Awesome Free 5.
|
3 |
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
|
4 |
*/
|
5 |
-
.fa,.fab,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{animation:fa-spin 2s infinite linear}.fa-pulse{animation:fa-spin 1s infinite steps(8)}@keyframes fa-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";transform:scaleX(-1)}.fa-flip-vertical{transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adobe:before{content:"\f778"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-balance-scale:before{content:"\f24e"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-battle-net:before{content:"\f835"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bootstrap:before{content:"\f836"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clinic-medical:before{content:"\f7f2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-evernote:before{content:"\f839"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guitar:before{content:"\f7a6"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-handshake:before{content:"\f2b5"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-wizard:before{content:"\f6e8"}.fa-haykal:before{content:"\f666"}.fa-hdd:before{content:"\f0a0"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-icicles:before{content:"\f7ad"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-instagram:before{content:"\f16d"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-nintendo-switch:before{content:"\f418"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-volume:before{content:"\f2a0"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-salesforce:before{content:"\f83b"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-speaker-deck:before{content:"\f83c"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-symfony:before{content:"\f83d"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-water:before{content:"\f773"}.fa-wave-square:before{content:"\f83e"}.fa-waze:before{content:"\f83f"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}@font-face{font-family:"Font Awesome 5 Brands";font-style:normal;font-weight:normal;font-display:auto;src:url(../webfonts/fa-brands-400.eot);src:url(../webfonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.woff) format("woff"),url(../webfonts/fa-brands-400.ttf) format("truetype"),url(../webfonts/fa-brands-400.svg#fontawesome) format("svg")}.fab{font-family:"Font Awesome 5 Brands"}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:400;font-display:auto;src:url(../webfonts/fa-regular-400.eot);src:url(../webfonts/fa-regular-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.woff) format("woff"),url(../webfonts/fa-regular-400.ttf) format("truetype"),url(../webfonts/fa-regular-400.svg#fontawesome) format("svg")}.far{font-weight:400}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:900;font-display:auto;src:url(../webfonts/fa-solid-900.eot);src:url(../webfonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.woff) format("woff"),url(../webfonts/fa-solid-900.ttf) format("truetype"),url(../webfonts/fa-solid-900.svg#fontawesome) format("svg")}.fa,.far,.fas{font-family:"Font Awesome 5 Free"}.fa,.fas{font-weight:900}
|
1 |
/*!
|
2 |
+
* Font Awesome Free 5.9.0 by @fontawesome - https://fontawesome.com
|
3 |
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
|
4 |
*/
|
5 |
+
.fa,.fab,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{animation:fa-spin 2s infinite linear}.fa-pulse{animation:fa-spin 1s infinite steps(8)}@keyframes fa-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";transform:scaleX(-1)}.fa-flip-vertical{transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adobe:before{content:"\f778"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-balance-scale:before{content:"\f24e"}.fa-balance-scale-left:before{content:"\f515"}.fa-balance-scale-right:before{content:"\f516"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-battle-net:before{content:"\f835"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-biking:before{content:"\f84a"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bootstrap:before{content:"\f836"}.fa-border-all:before{content:"\f84c"}.fa-border-none:before{content:"\f850"}.fa-border-style:before{content:"\f853"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clinic-medical:before{content:"\f7f2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-evernote:before{content:"\f839"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fan:before{content:"\f863"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guitar:before{content:"\f7a6"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-handshake:before{content:"\f2b5"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-wizard:before{content:"\f6e8"}.fa-haykal:before{content:"\f666"}.fa-hdd:before{content:"\f0a0"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-icicles:before{content:"\f7ad"}.fa-icons:before{content:"\f86d"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-instagram:before{content:"\f16d"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-alt:before{content:"\f879"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-square-alt:before{content:"\f87b"}.fa-phone-volume:before{content:"\f2a0"}.fa-photo-video:before{content:"\f87c"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-remove-format:before{content:"\f87d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-salesforce:before{content:"\f83b"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-down-alt:before{content:"\f884"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-amount-up-alt:before{content:"\f885"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-speaker-deck:before{content:"\f83c"}.fa-spell-check:before{content:"\f891"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-symfony:before{content:"\f83d"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-voicemail:before{content:"\f897"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-water:before{content:"\f773"}.fa-wave-square:before{content:"\f83e"}.fa-waze:before{content:"\f83f"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}@font-face{font-family:"Font Awesome 5 Brands";font-style:normal;font-weight:normal;font-display:auto;src:url(../webfonts/fa-brands-400.eot);src:url(../webfonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.woff) format("woff"),url(../webfonts/fa-brands-400.ttf) format("truetype"),url(../webfonts/fa-brands-400.svg#fontawesome) format("svg")}.fab{font-family:"Font Awesome 5 Brands"}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:400;font-display:auto;src:url(../webfonts/fa-regular-400.eot);src:url(../webfonts/fa-regular-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.woff) format("woff"),url(../webfonts/fa-regular-400.ttf) format("truetype"),url(../webfonts/fa-regular-400.svg#fontawesome) format("svg")}.far{font-weight:400}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:900;font-display:auto;src:url(../webfonts/fa-solid-900.eot);src:url(../webfonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.woff) format("woff"),url(../webfonts/fa-solid-900.ttf) format("truetype"),url(../webfonts/fa-solid-900.svg#fontawesome) format("svg")}.fa,.far,.fas{font-family:"Font Awesome 5 Free"}.fa,.fas{font-weight:900}
|
fonts/fontawesome/css/v4-shims.min.css
CHANGED
@@ -1,5 +1,5 @@
|
|
1 |
/*!
|
2 |
-
* Font Awesome Free 5.
|
3 |
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
|
4 |
*/
|
5 |
.fa.fa-glass:before{content:"\f000"}.fa.fa-meetup{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-star-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-o:before{content:"\f005"}.fa.fa-close:before,.fa.fa-remove:before{content:"\f00d"}.fa.fa-gear:before{content:"\f013"}.fa.fa-trash-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-trash-o:before{content:"\f2ed"}.fa.fa-file-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-o:before{content:"\f15b"}.fa.fa-clock-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-clock-o:before{content:"\f017"}.fa.fa-arrow-circle-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-down:before{content:"\f358"}.fa.fa-arrow-circle-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-up:before{content:"\f35b"}.fa.fa-play-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-play-circle-o:before{content:"\f144"}.fa.fa-repeat:before,.fa.fa-rotate-right:before{content:"\f01e"}.fa.fa-refresh:before{content:"\f021"}.fa.fa-list-alt{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-dedent:before{content:"\f03b"}.fa.fa-video-camera:before{content:"\f03d"}.fa.fa-picture-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-picture-o:before{content:"\f03e"}.fa.fa-photo{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-photo:before{content:"\f03e"}.fa.fa-image{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-image:before{content:"\f03e"}.fa.fa-pencil:before{content:"\f303"}.fa.fa-map-marker:before{content:"\f3c5"}.fa.fa-pencil-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-pencil-square-o:before{content:"\f044"}.fa.fa-share-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-share-square-o:before{content:"\f14d"}.fa.fa-check-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-check-square-o:before{content:"\f14a"}.fa.fa-arrows:before{content:"\f0b2"}.fa.fa-times-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-times-circle-o:before{content:"\f057"}.fa.fa-check-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-check-circle-o:before{content:"\f058"}.fa.fa-mail-forward:before{content:"\f064"}.fa.fa-eye,.fa.fa-eye-slash{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-warning:before{content:"\f071"}.fa.fa-calendar:before{content:"\f073"}.fa.fa-arrows-v:before{content:"\f338"}.fa.fa-arrows-h:before{content:"\f337"}.fa.fa-bar-chart{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bar-chart:before{content:"\f080"}.fa.fa-bar-chart-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bar-chart-o:before{content:"\f080"}.fa.fa-facebook-square,.fa.fa-twitter-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-gears:before{content:"\f085"}.fa.fa-thumbs-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-thumbs-o-up:before{content:"\f164"}.fa.fa-thumbs-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-thumbs-o-down:before{content:"\f165"}.fa.fa-heart-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-heart-o:before{content:"\f004"}.fa.fa-sign-out:before{content:"\f2f5"}.fa.fa-linkedin-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-linkedin-square:before{content:"\f08c"}.fa.fa-thumb-tack:before{content:"\f08d"}.fa.fa-external-link:before{content:"\f35d"}.fa.fa-sign-in:before{content:"\f2f6"}.fa.fa-github-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-lemon-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-lemon-o:before{content:"\f094"}.fa.fa-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-square-o:before{content:"\f0c8"}.fa.fa-bookmark-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bookmark-o:before{content:"\f02e"}.fa.fa-facebook,.fa.fa-twitter{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-facebook:before{content:"\f39e"}.fa.fa-facebook-f{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-facebook-f:before{content:"\f39e"}.fa.fa-github{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-credit-card{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-feed:before{content:"\f09e"}.fa.fa-hdd-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hdd-o:before{content:"\f0a0"}.fa.fa-hand-o-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-right:before{content:"\f0a4"}.fa.fa-hand-o-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-left:before{content:"\f0a5"}.fa.fa-hand-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-up:before{content:"\f0a6"}.fa.fa-hand-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-down:before{content:"\f0a7"}.fa.fa-arrows-alt:before{content:"\f31e"}.fa.fa-group:before{content:"\f0c0"}.fa.fa-chain:before{content:"\f0c1"}.fa.fa-scissors:before{content:"\f0c4"}.fa.fa-files-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-files-o:before{content:"\f0c5"}.fa.fa-floppy-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-floppy-o:before{content:"\f0c7"}.fa.fa-navicon:before,.fa.fa-reorder:before{content:"\f0c9"}.fa.fa-google-plus,.fa.fa-google-plus-square,.fa.fa-pinterest,.fa.fa-pinterest-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-google-plus:before{content:"\f0d5"}.fa.fa-money{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-money:before{content:"\f3d1"}.fa.fa-unsorted:before{content:"\f0dc"}.fa.fa-sort-desc:before{content:"\f0dd"}.fa.fa-sort-asc:before{content:"\f0de"}.fa.fa-linkedin{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-linkedin:before{content:"\f0e1"}.fa.fa-rotate-left:before{content:"\f0e2"}.fa.fa-legal:before{content:"\f0e3"}.fa.fa-dashboard:before,.fa.fa-tachometer:before{content:"\f3fd"}.fa.fa-comment-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-comment-o:before{content:"\f075"}.fa.fa-comments-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-comments-o:before{content:"\f086"}.fa.fa-flash:before{content:"\f0e7"}.fa.fa-clipboard,.fa.fa-paste{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-paste:before{content:"\f328"}.fa.fa-lightbulb-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-lightbulb-o:before{content:"\f0eb"}.fa.fa-exchange:before{content:"\f362"}.fa.fa-cloud-download:before{content:"\f381"}.fa.fa-cloud-upload:before{content:"\f382"}.fa.fa-bell-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bell-o:before{content:"\f0f3"}.fa.fa-cutlery:before{content:"\f2e7"}.fa.fa-file-text-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-text-o:before{content:"\f15c"}.fa.fa-building-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-building-o:before{content:"\f1ad"}.fa.fa-hospital-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hospital-o:before{content:"\f0f8"}.fa.fa-tablet:before{content:"\f3fa"}.fa.fa-mobile-phone:before,.fa.fa-mobile:before{content:"\f3cd"}.fa.fa-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-circle-o:before{content:"\f111"}.fa.fa-mail-reply:before{content:"\f3e5"}.fa.fa-github-alt{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-folder-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-folder-o:before{content:"\f07b"}.fa.fa-folder-open-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-folder-open-o:before{content:"\f07c"}.fa.fa-smile-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-smile-o:before{content:"\f118"}.fa.fa-frown-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-frown-o:before{content:"\f119"}.fa.fa-meh-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-meh-o:before{content:"\f11a"}.fa.fa-keyboard-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-keyboard-o:before{content:"\f11c"}.fa.fa-flag-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-flag-o:before{content:"\f024"}.fa.fa-mail-reply-all:before{content:"\f122"}.fa.fa-star-half-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-half-o:before{content:"\f089"}.fa.fa-star-half-empty{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-half-empty:before{content:"\f089"}.fa.fa-star-half-full{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-half-full:before{content:"\f089"}.fa.fa-code-fork:before{content:"\f126"}.fa.fa-chain-broken:before{content:"\f127"}.fa.fa-shield:before{content:"\f3ed"}.fa.fa-calendar-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-o:before{content:"\f133"}.fa.fa-css3,.fa.fa-html5,.fa.fa-maxcdn{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-ticket:before{content:"\f3ff"}.fa.fa-minus-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-minus-square-o:before{content:"\f146"}.fa.fa-level-up:before{content:"\f3bf"}.fa.fa-level-down:before{content:"\f3be"}.fa.fa-pencil-square:before{content:"\f14b"}.fa.fa-external-link-square:before{content:"\f360"}.fa.fa-compass{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-down:before{content:"\f150"}.fa.fa-toggle-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-down:before{content:"\f150"}.fa.fa-caret-square-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-up:before{content:"\f151"}.fa.fa-toggle-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-up:before{content:"\f151"}.fa.fa-caret-square-o-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-right:before{content:"\f152"}.fa.fa-toggle-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-right:before{content:"\f152"}.fa.fa-eur:before,.fa.fa-euro:before{content:"\f153"}.fa.fa-gbp:before{content:"\f154"}.fa.fa-dollar:before,.fa.fa-usd:before{content:"\f155"}.fa.fa-inr:before,.fa.fa-rupee:before{content:"\f156"}.fa.fa-cny:before,.fa.fa-jpy:before,.fa.fa-rmb:before,.fa.fa-yen:before{content:"\f157"}.fa.fa-rouble:before,.fa.fa-rub:before,.fa.fa-ruble:before{content:"\f158"}.fa.fa-krw:before,.fa.fa-won:before{content:"\f159"}.fa.fa-bitcoin,.fa.fa-btc{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bitcoin:before{content:"\f15a"}.fa.fa-file-text:before{content:"\f15c"}.fa.fa-sort-alpha-asc:before{content:"\f15d"}.fa.fa-sort-alpha-desc:before{content:"\f15e"}.fa.fa-sort-amount-asc:before{content:"\f160"}.fa.fa-sort-amount-desc:before{content:"\f161"}.fa.fa-sort-numeric-asc:before{content:"\f162"}.fa.fa-sort-numeric-desc:before{content:"\f163"}.fa.fa-xing,.fa.fa-xing-square,.fa.fa-youtube,.fa.fa-youtube-play,.fa.fa-youtube-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-youtube-play:before{content:"\f167"}.fa.fa-adn,.fa.fa-bitbucket,.fa.fa-bitbucket-square,.fa.fa-dropbox,.fa.fa-flickr,.fa.fa-instagram,.fa.fa-stack-overflow{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bitbucket-square:before{content:"\f171"}.fa.fa-tumblr,.fa.fa-tumblr-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-long-arrow-down:before{content:"\f309"}.fa.fa-long-arrow-up:before{content:"\f30c"}.fa.fa-long-arrow-left:before{content:"\f30a"}.fa.fa-long-arrow-right:before{content:"\f30b"}.fa.fa-android,.fa.fa-apple,.fa.fa-dribbble,.fa.fa-foursquare,.fa.fa-gittip,.fa.fa-gratipay,.fa.fa-linux,.fa.fa-skype,.fa.fa-trello,.fa.fa-windows{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-gittip:before{content:"\f184"}.fa.fa-sun-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-sun-o:before{content:"\f185"}.fa.fa-moon-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-moon-o:before{content:"\f186"}.fa.fa-pagelines,.fa.fa-renren,.fa.fa-stack-exchange,.fa.fa-vk,.fa.fa-weibo{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-arrow-circle-o-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-right:before{content:"\f35a"}.fa.fa-arrow-circle-o-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-left:before{content:"\f359"}.fa.fa-caret-square-o-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-left:before{content:"\f191"}.fa.fa-toggle-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-left:before{content:"\f191"}.fa.fa-dot-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-dot-circle-o:before{content:"\f192"}.fa.fa-vimeo-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-try:before,.fa.fa-turkish-lira:before{content:"\f195"}.fa.fa-plus-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-plus-square-o:before{content:"\f0fe"}.fa.fa-openid,.fa.fa-slack,.fa.fa-wordpress{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bank:before,.fa.fa-institution:before{content:"\f19c"}.fa.fa-mortar-board:before{content:"\f19d"}.fa.fa-delicious,.fa.fa-digg,.fa.fa-drupal,.fa.fa-google,.fa.fa-joomla,.fa.fa-pied-piper-alt,.fa.fa-pied-piper-pp,.fa.fa-reddit,.fa.fa-reddit-square,.fa.fa-stumbleupon,.fa.fa-stumbleupon-circle,.fa.fa-yahoo{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-spoon:before{content:"\f2e5"}.fa.fa-behance,.fa.fa-behance-square,.fa.fa-steam,.fa.fa-steam-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-automobile:before{content:"\f1b9"}.fa.fa-cab:before{content:"\f1ba"}.fa.fa-envelope-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-envelope-o:before{content:"\f0e0"}.fa.fa-deviantart,.fa.fa-soundcloud{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-file-pdf-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-pdf-o:before{content:"\f1c1"}.fa.fa-file-word-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-word-o:before{content:"\f1c2"}.fa.fa-file-excel-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-excel-o:before{content:"\f1c3"}.fa.fa-file-powerpoint-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-powerpoint-o:before{content:"\f1c4"}.fa.fa-file-image-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-image-o:before{content:"\f1c5"}.fa.fa-file-photo-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-photo-o:before{content:"\f1c5"}.fa.fa-file-picture-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-picture-o:before{content:"\f1c5"}.fa.fa-file-archive-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-archive-o:before{content:"\f1c6"}.fa.fa-file-zip-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-zip-o:before{content:"\f1c6"}.fa.fa-file-audio-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-audio-o:before{content:"\f1c7"}.fa.fa-file-sound-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-sound-o:before{content:"\f1c7"}.fa.fa-file-video-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-video-o:before{content:"\f1c8"}.fa.fa-file-movie-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-movie-o:before{content:"\f1c8"}.fa.fa-file-code-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-code-o:before{content:"\f1c9"}.fa.fa-codepen,.fa.fa-jsfiddle,.fa.fa-vine{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-life-bouy,.fa.fa-life-ring{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-life-bouy:before{content:"\f1cd"}.fa.fa-life-buoy{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-life-buoy:before{content:"\f1cd"}.fa.fa-life-saver{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-life-saver:before{content:"\f1cd"}.fa.fa-support{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-support:before{content:"\f1cd"}.fa.fa-circle-o-notch:before{content:"\f1ce"}.fa.fa-ra,.fa.fa-rebel{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-ra:before{content:"\f1d0"}.fa.fa-resistance{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-resistance:before{content:"\f1d0"}.fa.fa-empire,.fa.fa-ge{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-ge:before{content:"\f1d1"}.fa.fa-git,.fa.fa-git-square,.fa.fa-hacker-news,.fa.fa-y-combinator-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-y-combinator-square:before{content:"\f1d4"}.fa.fa-yc-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-yc-square:before{content:"\f1d4"}.fa.fa-qq,.fa.fa-tencent-weibo,.fa.fa-wechat,.fa.fa-weixin{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-wechat:before{content:"\f1d7"}.fa.fa-send:before{content:"\f1d8"}.fa.fa-paper-plane-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-paper-plane-o:before{content:"\f1d8"}.fa.fa-send-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-send-o:before{content:"\f1d8"}.fa.fa-circle-thin{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-circle-thin:before{content:"\f111"}.fa.fa-header:before{content:"\f1dc"}.fa.fa-sliders:before{content:"\f1de"}.fa.fa-futbol-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-futbol-o:before{content:"\f1e3"}.fa.fa-soccer-ball-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-soccer-ball-o:before{content:"\f1e3"}.fa.fa-slideshare,.fa.fa-twitch,.fa.fa-yelp{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-newspaper-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-newspaper-o:before{content:"\f1ea"}.fa.fa-cc-amex,.fa.fa-cc-discover,.fa.fa-cc-mastercard,.fa.fa-cc-paypal,.fa.fa-cc-stripe,.fa.fa-cc-visa,.fa.fa-google-wallet,.fa.fa-paypal{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bell-slash-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bell-slash-o:before{content:"\f1f6"}.fa.fa-trash:before{content:"\f2ed"}.fa.fa-copyright{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-eyedropper:before{content:"\f1fb"}.fa.fa-area-chart:before{content:"\f1fe"}.fa.fa-pie-chart:before{content:"\f200"}.fa.fa-line-chart:before{content:"\f201"}.fa.fa-angellist,.fa.fa-ioxhost,.fa.fa-lastfm,.fa.fa-lastfm-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-cc{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-cc:before{content:"\f20a"}.fa.fa-ils:before,.fa.fa-shekel:before,.fa.fa-sheqel:before{content:"\f20b"}.fa.fa-meanpath{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-meanpath:before{content:"\f2b4"}.fa.fa-buysellads,.fa.fa-connectdevelop,.fa.fa-dashcube,.fa.fa-forumbee,.fa.fa-leanpub,.fa.fa-sellsy,.fa.fa-shirtsinbulk,.fa.fa-simplybuilt,.fa.fa-skyatlas{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-diamond{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-diamond:before{content:"\f3a5"}.fa.fa-intersex:before{content:"\f224"}.fa.fa-facebook-official{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-facebook-official:before{content:"\f09a"}.fa.fa-pinterest-p,.fa.fa-whatsapp{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-hotel:before{content:"\f236"}.fa.fa-medium,.fa.fa-viacoin,.fa.fa-y-combinator,.fa.fa-yc{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-yc:before{content:"\f23b"}.fa.fa-expeditedssl,.fa.fa-opencart,.fa.fa-optin-monster{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-battery-4:before,.fa.fa-battery:before{content:"\f240"}.fa.fa-battery-3:before{content:"\f241"}.fa.fa-battery-2:before{content:"\f242"}.fa.fa-battery-1:before{content:"\f243"}.fa.fa-battery-0:before{content:"\f244"}.fa.fa-object-group,.fa.fa-object-ungroup,.fa.fa-sticky-note-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-sticky-note-o:before{content:"\f249"}.fa.fa-cc-diners-club,.fa.fa-cc-jcb{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-clone,.fa.fa-hourglass-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hourglass-o:before{content:"\f254"}.fa.fa-hourglass-1:before{content:"\f251"}.fa.fa-hourglass-2:before{content:"\f252"}.fa.fa-hourglass-3:before{content:"\f253"}.fa.fa-hand-rock-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-rock-o:before{content:"\f255"}.fa.fa-hand-grab-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-grab-o:before{content:"\f255"}.fa.fa-hand-paper-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-paper-o:before{content:"\f256"}.fa.fa-hand-stop-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-stop-o:before{content:"\f256"}.fa.fa-hand-scissors-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-scissors-o:before{content:"\f257"}.fa.fa-hand-lizard-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-lizard-o:before{content:"\f258"}.fa.fa-hand-spock-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-spock-o:before{content:"\f259"}.fa.fa-hand-pointer-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-pointer-o:before{content:"\f25a"}.fa.fa-hand-peace-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-peace-o:before{content:"\f25b"}.fa.fa-registered{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-chrome,.fa.fa-creative-commons,.fa.fa-firefox,.fa.fa-get-pocket,.fa.fa-gg,.fa.fa-gg-circle,.fa.fa-internet-explorer,.fa.fa-odnoklassniki,.fa.fa-odnoklassniki-square,.fa.fa-opera,.fa.fa-safari,.fa.fa-tripadvisor,.fa.fa-wikipedia-w{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-television:before{content:"\f26c"}.fa.fa-500px,.fa.fa-amazon,.fa.fa-contao{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-calendar-plus-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-plus-o:before{content:"\f271"}.fa.fa-calendar-minus-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-minus-o:before{content:"\f272"}.fa.fa-calendar-times-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-times-o:before{content:"\f273"}.fa.fa-calendar-check-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-check-o:before{content:"\f274"}.fa.fa-map-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-map-o:before{content:"\f279"}.fa.fa-commenting:before{content:"\f4ad"}.fa.fa-commenting-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-commenting-o:before{content:"\f4ad"}.fa.fa-houzz,.fa.fa-vimeo{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-vimeo:before{content:"\f27d"}.fa.fa-black-tie,.fa.fa-edge,.fa.fa-fonticons,.fa.fa-reddit-alien{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-credit-card-alt:before{content:"\f09d"}.fa.fa-codiepie,.fa.fa-fort-awesome,.fa.fa-mixcloud,.fa.fa-modx,.fa.fa-product-hunt,.fa.fa-scribd,.fa.fa-usb{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-pause-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-pause-circle-o:before{content:"\f28b"}.fa.fa-stop-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-stop-circle-o:before{content:"\f28d"}.fa.fa-bluetooth,.fa.fa-bluetooth-b,.fa.fa-envira,.fa.fa-gitlab,.fa.fa-wheelchair-alt,.fa.fa-wpbeginner,.fa.fa-wpforms{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-wheelchair-alt:before{content:"\f368"}.fa.fa-question-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-question-circle-o:before{content:"\f059"}.fa.fa-volume-control-phone:before{content:"\f2a0"}.fa.fa-asl-interpreting:before{content:"\f2a3"}.fa.fa-deafness:before,.fa.fa-hard-of-hearing:before{content:"\f2a4"}.fa.fa-glide,.fa.fa-glide-g{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-signing:before{content:"\f2a7"}.fa.fa-first-order,.fa.fa-google-plus-official,.fa.fa-pied-piper,.fa.fa-snapchat,.fa.fa-snapchat-ghost,.fa.fa-snapchat-square,.fa.fa-themeisle,.fa.fa-viadeo,.fa.fa-viadeo-square,.fa.fa-yoast{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-google-plus-official:before{content:"\f2b3"}.fa.fa-google-plus-circle{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-google-plus-circle:before{content:"\f2b3"}.fa.fa-fa,.fa.fa-font-awesome{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-fa:before{content:"\f2b4"}.fa.fa-handshake-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-handshake-o:before{content:"\f2b5"}.fa.fa-envelope-open-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-envelope-open-o:before{content:"\f2b6"}.fa.fa-linode{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-address-book-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-address-book-o:before{content:"\f2b9"}.fa.fa-vcard:before{content:"\f2bb"}.fa.fa-address-card-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-address-card-o:before{content:"\f2bb"}.fa.fa-vcard-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-vcard-o:before{content:"\f2bb"}.fa.fa-user-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-user-circle-o:before{content:"\f2bd"}.fa.fa-user-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-user-o:before{content:"\f007"}.fa.fa-id-badge{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-drivers-license:before{content:"\f2c2"}.fa.fa-id-card-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-id-card-o:before{content:"\f2c2"}.fa.fa-drivers-license-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-drivers-license-o:before{content:"\f2c2"}.fa.fa-free-code-camp,.fa.fa-quora,.fa.fa-telegram{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-thermometer-4:before,.fa.fa-thermometer:before{content:"\f2c7"}.fa.fa-thermometer-3:before{content:"\f2c8"}.fa.fa-thermometer-2:before{content:"\f2c9"}.fa.fa-thermometer-1:before{content:"\f2ca"}.fa.fa-thermometer-0:before{content:"\f2cb"}.fa.fa-bathtub:before,.fa.fa-s15:before{content:"\f2cd"}.fa.fa-window-maximize,.fa.fa-window-restore{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-times-rectangle:before{content:"\f410"}.fa.fa-window-close-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-window-close-o:before{content:"\f410"}.fa.fa-times-rectangle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-times-rectangle-o:before{content:"\f410"}.fa.fa-bandcamp,.fa.fa-eercast,.fa.fa-etsy,.fa.fa-grav,.fa.fa-imdb,.fa.fa-ravelry{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-eercast:before{content:"\f2da"}.fa.fa-snowflake-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-snowflake-o:before{content:"\f2dc"}.fa.fa-spotify,.fa.fa-superpowers,.fa.fa-wpexplorer{font-family:"Font Awesome 5 Brands";font-weight:400}
|
1 |
/*!
|
2 |
+
* Font Awesome Free 5.9.0 by @fontawesome - https://fontawesome.com
|
3 |
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
|
4 |
*/
|
5 |
.fa.fa-glass:before{content:"\f000"}.fa.fa-meetup{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-star-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-o:before{content:"\f005"}.fa.fa-close:before,.fa.fa-remove:before{content:"\f00d"}.fa.fa-gear:before{content:"\f013"}.fa.fa-trash-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-trash-o:before{content:"\f2ed"}.fa.fa-file-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-o:before{content:"\f15b"}.fa.fa-clock-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-clock-o:before{content:"\f017"}.fa.fa-arrow-circle-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-down:before{content:"\f358"}.fa.fa-arrow-circle-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-up:before{content:"\f35b"}.fa.fa-play-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-play-circle-o:before{content:"\f144"}.fa.fa-repeat:before,.fa.fa-rotate-right:before{content:"\f01e"}.fa.fa-refresh:before{content:"\f021"}.fa.fa-list-alt{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-dedent:before{content:"\f03b"}.fa.fa-video-camera:before{content:"\f03d"}.fa.fa-picture-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-picture-o:before{content:"\f03e"}.fa.fa-photo{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-photo:before{content:"\f03e"}.fa.fa-image{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-image:before{content:"\f03e"}.fa.fa-pencil:before{content:"\f303"}.fa.fa-map-marker:before{content:"\f3c5"}.fa.fa-pencil-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-pencil-square-o:before{content:"\f044"}.fa.fa-share-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-share-square-o:before{content:"\f14d"}.fa.fa-check-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-check-square-o:before{content:"\f14a"}.fa.fa-arrows:before{content:"\f0b2"}.fa.fa-times-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-times-circle-o:before{content:"\f057"}.fa.fa-check-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-check-circle-o:before{content:"\f058"}.fa.fa-mail-forward:before{content:"\f064"}.fa.fa-eye,.fa.fa-eye-slash{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-warning:before{content:"\f071"}.fa.fa-calendar:before{content:"\f073"}.fa.fa-arrows-v:before{content:"\f338"}.fa.fa-arrows-h:before{content:"\f337"}.fa.fa-bar-chart{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bar-chart:before{content:"\f080"}.fa.fa-bar-chart-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bar-chart-o:before{content:"\f080"}.fa.fa-facebook-square,.fa.fa-twitter-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-gears:before{content:"\f085"}.fa.fa-thumbs-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-thumbs-o-up:before{content:"\f164"}.fa.fa-thumbs-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-thumbs-o-down:before{content:"\f165"}.fa.fa-heart-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-heart-o:before{content:"\f004"}.fa.fa-sign-out:before{content:"\f2f5"}.fa.fa-linkedin-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-linkedin-square:before{content:"\f08c"}.fa.fa-thumb-tack:before{content:"\f08d"}.fa.fa-external-link:before{content:"\f35d"}.fa.fa-sign-in:before{content:"\f2f6"}.fa.fa-github-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-lemon-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-lemon-o:before{content:"\f094"}.fa.fa-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-square-o:before{content:"\f0c8"}.fa.fa-bookmark-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bookmark-o:before{content:"\f02e"}.fa.fa-facebook,.fa.fa-twitter{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-facebook:before{content:"\f39e"}.fa.fa-facebook-f{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-facebook-f:before{content:"\f39e"}.fa.fa-github{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-credit-card{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-feed:before{content:"\f09e"}.fa.fa-hdd-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hdd-o:before{content:"\f0a0"}.fa.fa-hand-o-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-right:before{content:"\f0a4"}.fa.fa-hand-o-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-left:before{content:"\f0a5"}.fa.fa-hand-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-up:before{content:"\f0a6"}.fa.fa-hand-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-down:before{content:"\f0a7"}.fa.fa-arrows-alt:before{content:"\f31e"}.fa.fa-group:before{content:"\f0c0"}.fa.fa-chain:before{content:"\f0c1"}.fa.fa-scissors:before{content:"\f0c4"}.fa.fa-files-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-files-o:before{content:"\f0c5"}.fa.fa-floppy-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-floppy-o:before{content:"\f0c7"}.fa.fa-navicon:before,.fa.fa-reorder:before{content:"\f0c9"}.fa.fa-google-plus,.fa.fa-google-plus-square,.fa.fa-pinterest,.fa.fa-pinterest-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-google-plus:before{content:"\f0d5"}.fa.fa-money{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-money:before{content:"\f3d1"}.fa.fa-unsorted:before{content:"\f0dc"}.fa.fa-sort-desc:before{content:"\f0dd"}.fa.fa-sort-asc:before{content:"\f0de"}.fa.fa-linkedin{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-linkedin:before{content:"\f0e1"}.fa.fa-rotate-left:before{content:"\f0e2"}.fa.fa-legal:before{content:"\f0e3"}.fa.fa-dashboard:before,.fa.fa-tachometer:before{content:"\f3fd"}.fa.fa-comment-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-comment-o:before{content:"\f075"}.fa.fa-comments-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-comments-o:before{content:"\f086"}.fa.fa-flash:before{content:"\f0e7"}.fa.fa-clipboard,.fa.fa-paste{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-paste:before{content:"\f328"}.fa.fa-lightbulb-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-lightbulb-o:before{content:"\f0eb"}.fa.fa-exchange:before{content:"\f362"}.fa.fa-cloud-download:before{content:"\f381"}.fa.fa-cloud-upload:before{content:"\f382"}.fa.fa-bell-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bell-o:before{content:"\f0f3"}.fa.fa-cutlery:before{content:"\f2e7"}.fa.fa-file-text-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-text-o:before{content:"\f15c"}.fa.fa-building-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-building-o:before{content:"\f1ad"}.fa.fa-hospital-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hospital-o:before{content:"\f0f8"}.fa.fa-tablet:before{content:"\f3fa"}.fa.fa-mobile-phone:before,.fa.fa-mobile:before{content:"\f3cd"}.fa.fa-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-circle-o:before{content:"\f111"}.fa.fa-mail-reply:before{content:"\f3e5"}.fa.fa-github-alt{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-folder-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-folder-o:before{content:"\f07b"}.fa.fa-folder-open-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-folder-open-o:before{content:"\f07c"}.fa.fa-smile-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-smile-o:before{content:"\f118"}.fa.fa-frown-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-frown-o:before{content:"\f119"}.fa.fa-meh-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-meh-o:before{content:"\f11a"}.fa.fa-keyboard-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-keyboard-o:before{content:"\f11c"}.fa.fa-flag-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-flag-o:before{content:"\f024"}.fa.fa-mail-reply-all:before{content:"\f122"}.fa.fa-star-half-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-half-o:before{content:"\f089"}.fa.fa-star-half-empty{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-half-empty:before{content:"\f089"}.fa.fa-star-half-full{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-half-full:before{content:"\f089"}.fa.fa-code-fork:before{content:"\f126"}.fa.fa-chain-broken:before{content:"\f127"}.fa.fa-shield:before{content:"\f3ed"}.fa.fa-calendar-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-o:before{content:"\f133"}.fa.fa-css3,.fa.fa-html5,.fa.fa-maxcdn{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-ticket:before{content:"\f3ff"}.fa.fa-minus-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-minus-square-o:before{content:"\f146"}.fa.fa-level-up:before{content:"\f3bf"}.fa.fa-level-down:before{content:"\f3be"}.fa.fa-pencil-square:before{content:"\f14b"}.fa.fa-external-link-square:before{content:"\f360"}.fa.fa-compass{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-down:before{content:"\f150"}.fa.fa-toggle-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-down:before{content:"\f150"}.fa.fa-caret-square-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-up:before{content:"\f151"}.fa.fa-toggle-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-up:before{content:"\f151"}.fa.fa-caret-square-o-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-right:before{content:"\f152"}.fa.fa-toggle-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-right:before{content:"\f152"}.fa.fa-eur:before,.fa.fa-euro:before{content:"\f153"}.fa.fa-gbp:before{content:"\f154"}.fa.fa-dollar:before,.fa.fa-usd:before{content:"\f155"}.fa.fa-inr:before,.fa.fa-rupee:before{content:"\f156"}.fa.fa-cny:before,.fa.fa-jpy:before,.fa.fa-rmb:before,.fa.fa-yen:before{content:"\f157"}.fa.fa-rouble:before,.fa.fa-rub:before,.fa.fa-ruble:before{content:"\f158"}.fa.fa-krw:before,.fa.fa-won:before{content:"\f159"}.fa.fa-bitcoin,.fa.fa-btc{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bitcoin:before{content:"\f15a"}.fa.fa-file-text:before{content:"\f15c"}.fa.fa-sort-alpha-asc:before{content:"\f15d"}.fa.fa-sort-alpha-desc:before{content:"\f15e"}.fa.fa-sort-amount-asc:before{content:"\f160"}.fa.fa-sort-amount-desc:before{content:"\f161"}.fa.fa-sort-numeric-asc:before{content:"\f162"}.fa.fa-sort-numeric-desc:before{content:"\f163"}.fa.fa-xing,.fa.fa-xing-square,.fa.fa-youtube,.fa.fa-youtube-play,.fa.fa-youtube-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-youtube-play:before{content:"\f167"}.fa.fa-adn,.fa.fa-bitbucket,.fa.fa-bitbucket-square,.fa.fa-dropbox,.fa.fa-flickr,.fa.fa-instagram,.fa.fa-stack-overflow{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bitbucket-square:before{content:"\f171"}.fa.fa-tumblr,.fa.fa-tumblr-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-long-arrow-down:before{content:"\f309"}.fa.fa-long-arrow-up:before{content:"\f30c"}.fa.fa-long-arrow-left:before{content:"\f30a"}.fa.fa-long-arrow-right:before{content:"\f30b"}.fa.fa-android,.fa.fa-apple,.fa.fa-dribbble,.fa.fa-foursquare,.fa.fa-gittip,.fa.fa-gratipay,.fa.fa-linux,.fa.fa-skype,.fa.fa-trello,.fa.fa-windows{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-gittip:before{content:"\f184"}.fa.fa-sun-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-sun-o:before{content:"\f185"}.fa.fa-moon-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-moon-o:before{content:"\f186"}.fa.fa-pagelines,.fa.fa-renren,.fa.fa-stack-exchange,.fa.fa-vk,.fa.fa-weibo{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-arrow-circle-o-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-right:before{content:"\f35a"}.fa.fa-arrow-circle-o-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-left:before{content:"\f359"}.fa.fa-caret-square-o-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-left:before{content:"\f191"}.fa.fa-toggle-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-left:before{content:"\f191"}.fa.fa-dot-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-dot-circle-o:before{content:"\f192"}.fa.fa-vimeo-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-try:before,.fa.fa-turkish-lira:before{content:"\f195"}.fa.fa-plus-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-plus-square-o:before{content:"\f0fe"}.fa.fa-openid,.fa.fa-slack,.fa.fa-wordpress{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bank:before,.fa.fa-institution:before{content:"\f19c"}.fa.fa-mortar-board:before{content:"\f19d"}.fa.fa-delicious,.fa.fa-digg,.fa.fa-drupal,.fa.fa-google,.fa.fa-joomla,.fa.fa-pied-piper-alt,.fa.fa-pied-piper-pp,.fa.fa-reddit,.fa.fa-reddit-square,.fa.fa-stumbleupon,.fa.fa-stumbleupon-circle,.fa.fa-yahoo{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-spoon:before{content:"\f2e5"}.fa.fa-behance,.fa.fa-behance-square,.fa.fa-steam,.fa.fa-steam-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-automobile:before{content:"\f1b9"}.fa.fa-cab:before{content:"\f1ba"}.fa.fa-envelope-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-envelope-o:before{content:"\f0e0"}.fa.fa-deviantart,.fa.fa-soundcloud{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-file-pdf-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-pdf-o:before{content:"\f1c1"}.fa.fa-file-word-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-word-o:before{content:"\f1c2"}.fa.fa-file-excel-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-excel-o:before{content:"\f1c3"}.fa.fa-file-powerpoint-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-powerpoint-o:before{content:"\f1c4"}.fa.fa-file-image-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-image-o:before{content:"\f1c5"}.fa.fa-file-photo-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-photo-o:before{content:"\f1c5"}.fa.fa-file-picture-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-picture-o:before{content:"\f1c5"}.fa.fa-file-archive-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-archive-o:before{content:"\f1c6"}.fa.fa-file-zip-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-zip-o:before{content:"\f1c6"}.fa.fa-file-audio-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-audio-o:before{content:"\f1c7"}.fa.fa-file-sound-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-sound-o:before{content:"\f1c7"}.fa.fa-file-video-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-video-o:before{content:"\f1c8"}.fa.fa-file-movie-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-movie-o:before{content:"\f1c8"}.fa.fa-file-code-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-code-o:before{content:"\f1c9"}.fa.fa-codepen,.fa.fa-jsfiddle,.fa.fa-vine{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-life-bouy,.fa.fa-life-ring{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-life-bouy:before{content:"\f1cd"}.fa.fa-life-buoy{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-life-buoy:before{content:"\f1cd"}.fa.fa-life-saver{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-life-saver:before{content:"\f1cd"}.fa.fa-support{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-support:before{content:"\f1cd"}.fa.fa-circle-o-notch:before{content:"\f1ce"}.fa.fa-ra,.fa.fa-rebel{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-ra:before{content:"\f1d0"}.fa.fa-resistance{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-resistance:before{content:"\f1d0"}.fa.fa-empire,.fa.fa-ge{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-ge:before{content:"\f1d1"}.fa.fa-git,.fa.fa-git-square,.fa.fa-hacker-news,.fa.fa-y-combinator-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-y-combinator-square:before{content:"\f1d4"}.fa.fa-yc-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-yc-square:before{content:"\f1d4"}.fa.fa-qq,.fa.fa-tencent-weibo,.fa.fa-wechat,.fa.fa-weixin{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-wechat:before{content:"\f1d7"}.fa.fa-send:before{content:"\f1d8"}.fa.fa-paper-plane-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-paper-plane-o:before{content:"\f1d8"}.fa.fa-send-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-send-o:before{content:"\f1d8"}.fa.fa-circle-thin{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-circle-thin:before{content:"\f111"}.fa.fa-header:before{content:"\f1dc"}.fa.fa-sliders:before{content:"\f1de"}.fa.fa-futbol-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-futbol-o:before{content:"\f1e3"}.fa.fa-soccer-ball-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-soccer-ball-o:before{content:"\f1e3"}.fa.fa-slideshare,.fa.fa-twitch,.fa.fa-yelp{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-newspaper-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-newspaper-o:before{content:"\f1ea"}.fa.fa-cc-amex,.fa.fa-cc-discover,.fa.fa-cc-mastercard,.fa.fa-cc-paypal,.fa.fa-cc-stripe,.fa.fa-cc-visa,.fa.fa-google-wallet,.fa.fa-paypal{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bell-slash-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bell-slash-o:before{content:"\f1f6"}.fa.fa-trash:before{content:"\f2ed"}.fa.fa-copyright{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-eyedropper:before{content:"\f1fb"}.fa.fa-area-chart:before{content:"\f1fe"}.fa.fa-pie-chart:before{content:"\f200"}.fa.fa-line-chart:before{content:"\f201"}.fa.fa-angellist,.fa.fa-ioxhost,.fa.fa-lastfm,.fa.fa-lastfm-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-cc{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-cc:before{content:"\f20a"}.fa.fa-ils:before,.fa.fa-shekel:before,.fa.fa-sheqel:before{content:"\f20b"}.fa.fa-meanpath{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-meanpath:before{content:"\f2b4"}.fa.fa-buysellads,.fa.fa-connectdevelop,.fa.fa-dashcube,.fa.fa-forumbee,.fa.fa-leanpub,.fa.fa-sellsy,.fa.fa-shirtsinbulk,.fa.fa-simplybuilt,.fa.fa-skyatlas{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-diamond{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-diamond:before{content:"\f3a5"}.fa.fa-intersex:before{content:"\f224"}.fa.fa-facebook-official{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-facebook-official:before{content:"\f09a"}.fa.fa-pinterest-p,.fa.fa-whatsapp{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-hotel:before{content:"\f236"}.fa.fa-medium,.fa.fa-viacoin,.fa.fa-y-combinator,.fa.fa-yc{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-yc:before{content:"\f23b"}.fa.fa-expeditedssl,.fa.fa-opencart,.fa.fa-optin-monster{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-battery-4:before,.fa.fa-battery:before{content:"\f240"}.fa.fa-battery-3:before{content:"\f241"}.fa.fa-battery-2:before{content:"\f242"}.fa.fa-battery-1:before{content:"\f243"}.fa.fa-battery-0:before{content:"\f244"}.fa.fa-object-group,.fa.fa-object-ungroup,.fa.fa-sticky-note-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-sticky-note-o:before{content:"\f249"}.fa.fa-cc-diners-club,.fa.fa-cc-jcb{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-clone,.fa.fa-hourglass-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hourglass-o:before{content:"\f254"}.fa.fa-hourglass-1:before{content:"\f251"}.fa.fa-hourglass-2:before{content:"\f252"}.fa.fa-hourglass-3:before{content:"\f253"}.fa.fa-hand-rock-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-rock-o:before{content:"\f255"}.fa.fa-hand-grab-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-grab-o:before{content:"\f255"}.fa.fa-hand-paper-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-paper-o:before{content:"\f256"}.fa.fa-hand-stop-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-stop-o:before{content:"\f256"}.fa.fa-hand-scissors-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-scissors-o:before{content:"\f257"}.fa.fa-hand-lizard-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-lizard-o:before{content:"\f258"}.fa.fa-hand-spock-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-spock-o:before{content:"\f259"}.fa.fa-hand-pointer-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-pointer-o:before{content:"\f25a"}.fa.fa-hand-peace-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-peace-o:before{content:"\f25b"}.fa.fa-registered{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-chrome,.fa.fa-creative-commons,.fa.fa-firefox,.fa.fa-get-pocket,.fa.fa-gg,.fa.fa-gg-circle,.fa.fa-internet-explorer,.fa.fa-odnoklassniki,.fa.fa-odnoklassniki-square,.fa.fa-opera,.fa.fa-safari,.fa.fa-tripadvisor,.fa.fa-wikipedia-w{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-television:before{content:"\f26c"}.fa.fa-500px,.fa.fa-amazon,.fa.fa-contao{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-calendar-plus-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-plus-o:before{content:"\f271"}.fa.fa-calendar-minus-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-minus-o:before{content:"\f272"}.fa.fa-calendar-times-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-times-o:before{content:"\f273"}.fa.fa-calendar-check-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-check-o:before{content:"\f274"}.fa.fa-map-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-map-o:before{content:"\f279"}.fa.fa-commenting:before{content:"\f4ad"}.fa.fa-commenting-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-commenting-o:before{content:"\f4ad"}.fa.fa-houzz,.fa.fa-vimeo{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-vimeo:before{content:"\f27d"}.fa.fa-black-tie,.fa.fa-edge,.fa.fa-fonticons,.fa.fa-reddit-alien{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-credit-card-alt:before{content:"\f09d"}.fa.fa-codiepie,.fa.fa-fort-awesome,.fa.fa-mixcloud,.fa.fa-modx,.fa.fa-product-hunt,.fa.fa-scribd,.fa.fa-usb{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-pause-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-pause-circle-o:before{content:"\f28b"}.fa.fa-stop-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-stop-circle-o:before{content:"\f28d"}.fa.fa-bluetooth,.fa.fa-bluetooth-b,.fa.fa-envira,.fa.fa-gitlab,.fa.fa-wheelchair-alt,.fa.fa-wpbeginner,.fa.fa-wpforms{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-wheelchair-alt:before{content:"\f368"}.fa.fa-question-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-question-circle-o:before{content:"\f059"}.fa.fa-volume-control-phone:before{content:"\f2a0"}.fa.fa-asl-interpreting:before{content:"\f2a3"}.fa.fa-deafness:before,.fa.fa-hard-of-hearing:before{content:"\f2a4"}.fa.fa-glide,.fa.fa-glide-g{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-signing:before{content:"\f2a7"}.fa.fa-first-order,.fa.fa-google-plus-official,.fa.fa-pied-piper,.fa.fa-snapchat,.fa.fa-snapchat-ghost,.fa.fa-snapchat-square,.fa.fa-themeisle,.fa.fa-viadeo,.fa.fa-viadeo-square,.fa.fa-yoast{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-google-plus-official:before{content:"\f2b3"}.fa.fa-google-plus-circle{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-google-plus-circle:before{content:"\f2b3"}.fa.fa-fa,.fa.fa-font-awesome{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-fa:before{content:"\f2b4"}.fa.fa-handshake-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-handshake-o:before{content:"\f2b5"}.fa.fa-envelope-open-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-envelope-open-o:before{content:"\f2b6"}.fa.fa-linode{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-address-book-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-address-book-o:before{content:"\f2b9"}.fa.fa-vcard:before{content:"\f2bb"}.fa.fa-address-card-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-address-card-o:before{content:"\f2bb"}.fa.fa-vcard-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-vcard-o:before{content:"\f2bb"}.fa.fa-user-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-user-circle-o:before{content:"\f2bd"}.fa.fa-user-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-user-o:before{content:"\f007"}.fa.fa-id-badge{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-drivers-license:before{content:"\f2c2"}.fa.fa-id-card-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-id-card-o:before{content:"\f2c2"}.fa.fa-drivers-license-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-drivers-license-o:before{content:"\f2c2"}.fa.fa-free-code-camp,.fa.fa-quora,.fa.fa-telegram{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-thermometer-4:before,.fa.fa-thermometer:before{content:"\f2c7"}.fa.fa-thermometer-3:before{content:"\f2c8"}.fa.fa-thermometer-2:before{content:"\f2c9"}.fa.fa-thermometer-1:before{content:"\f2ca"}.fa.fa-thermometer-0:before{content:"\f2cb"}.fa.fa-bathtub:before,.fa.fa-s15:before{content:"\f2cd"}.fa.fa-window-maximize,.fa.fa-window-restore{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-times-rectangle:before{content:"\f410"}.fa.fa-window-close-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-window-close-o:before{content:"\f410"}.fa.fa-times-rectangle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-times-rectangle-o:before{content:"\f410"}.fa.fa-bandcamp,.fa.fa-eercast,.fa.fa-etsy,.fa.fa-grav,.fa.fa-imdb,.fa.fa-ravelry{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-eercast:before{content:"\f2da"}.fa.fa-snowflake-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-snowflake-o:before{content:"\f2dc"}.fa.fa-spotify,.fa.fa-superpowers,.fa.fa-wpexplorer{font-family:"Font Awesome 5 Brands";font-weight:400}
|
fonts/fontawesome/webfonts/fa-brands-400.eot
CHANGED
Binary file
|
fonts/fontawesome/webfonts/fa-brands-400.svg
CHANGED
@@ -1,12 +1,12 @@
|
|
1 |
<?xml version="1.0" standalone="no"?>
|
2 |
<!--
|
3 |
-
Font Awesome Free 5.
|
4 |
License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
|
5 |
-->
|
6 |
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
7 |
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
|
8 |
<metadata>
|
9 |
-
Created by FontForge 20190112 at
|
10 |
By Robert Madole
|
11 |
Copyright (c) Font Awesome
|
12 |
</metadata>
|
@@ -23,7 +23,7 @@ Copyright (c) Font Awesome
|
|
23 |
bbox="-0.200195 -66.9505 641.5 448.3"
|
24 |
underline-thickness="25"
|
25 |
underline-position="-51"
|
26 |
-
unicode-range="U+0020-
|
27 |
/>
|
28 |
<missing-glyph />
|
29 |
<glyph glyph-name="twitter-square" unicode=""
|
@@ -33,8 +33,8 @@ c-5.7002 -9.7002 -8.89941 -20.9004 -8.89941 -33.0996v-0.107422c0 -19.3584 13.081
|
|
33 |
c-10.4004 -2.7002 -19.5 -2.7002 -29.5996 -1.2002c8.2998 -26 32.5 -44.9004 61.2998 -45.5c-22.5 -17.6006 -50.7002 -28 -81.4004 -28c-5.39941 0 -10.5 0.200195 -15.7998 0.799805c29 -18.5996 63.5 -29.4004 100.7 -29.4004c120.6 0 186.6 99.9004 186.6 186.601
|
34 |
c0 2.7998 0 5.7002 -0.200195 8.5z" />
|
35 |
<glyph glyph-name="facebook-square" unicode=""
|
36 |
-
d="
|
37 |
-
|
38 |
<glyph glyph-name="linkedin" unicode=""
|
39 |
d="M416 416c17.5996 0 32 -14.5 32 -32.2998v-383.4c0 -17.7998 -14.4004 -32.2998 -32 -32.2998h-384.1c-17.6006 0 -31.9004 14.5 -31.9004 32.2998v383.4c0 17.7998 14.2998 32.2998 31.9004 32.2998h384.1zM135.4 32h0.0996094v213.8h-66.5v-213.8h66.4004zM102.2 275
|
40 |
c21.2998 0 38.5 17.2002 38.5 38.5c0 21.2002 -17.2998 38.5 -38.5 38.5c-21.2998 0 -38.5 -17.2998 -38.5 -38.5s17.2002 -38.5 38.5 -38.5zM384.3 32v117.2c0 57.5996 -12.5 101.899 -79.7002 101.899c-32.2998 0 -54 -17.6992 -62.8994 -34.5h-0.900391v29.2002h-63.7002
|
@@ -57,9 +57,9 @@ c49.0547 0 94.2129 16.5684 130.274 44.832c-46.1318 0.975586 -84.792 31.1885 -98.
|
|
57 |
c13.9688 -7.79688 30.2139 -12.6699 47.4307 -13.3184c-28.2637 18.8428 -46.7803 51.0049 -46.7803 87.3906c0 19.4922 5.19629 37.3604 14.2939 52.9541c51.6543 -63.6748 129.3 -105.258 216.364 -109.807c-1.62402 7.79688 -2.59863 15.918 -2.59863 24.04
|
58 |
c0 57.8271 46.7822 104.934 104.934 104.934c30.2139 0 57.502 -12.6699 76.6709 -33.1367c23.7148 4.54785 46.4551 13.3193 66.5986 25.3398c-7.79785 -24.3662 -24.3662 -44.833 -46.1318 -57.8271c21.1172 2.27344 41.584 8.12207 60.4258 16.2432
|
59 |
c-14.292 -20.791 -32.1611 -39.3086 -52.6279 -54.2529z" />
|
60 |
-
<glyph glyph-name="facebook" unicode=""
|
61 |
-
d="
|
62 |
-
v-
|
63 |
<glyph glyph-name="github" unicode="" horiz-adv-x="496"
|
64 |
d="M165.9 50.5996c0 -2 -2.30078 -3.59961 -5.2002 -3.59961c-3.2998 -0.299805 -5.60059 1.2998 -5.60059 3.59961c0 2 2.30078 3.60059 5.2002 3.60059c3 0.299805 5.60059 -1.2998 5.60059 -3.60059zM134.8 55.0996c0.700195 2 3.60059 3 6.2002 2.30078
|
65 |
c3 -0.900391 4.90039 -3.2002 4.2998 -5.2002c-0.599609 -2 -3.59961 -3 -6.2002 -2c-3 0.599609 -5 2.89941 -4.2998 4.89941zM179 56.7998c2.90039 0.299805 5.59961 -1 5.90039 -2.89941c0.299805 -2 -1.7002 -3.90039 -4.60059 -4.60059
|
@@ -432,21 +432,21 @@ c6.09961 17.5 15.5 33.2002 27.3994 46.8008l51.2002 -44.8008c10.2998 11.9004 24.4
|
|
432 |
c16.2998 -3.30078 30.5 -11.9004 40.7002 -23.8008l51.2002 44.8008c11.8994 -13.6006 21.2998 -29.4004 27.3994 -46.8008l-64.5 -22.0996c2.5 -7.40039 3.90039 -15.2002 3.90039 -23.5s-1.40039 -16 -3.90039 -23.5l64.2002 -22.0996
|
433 |
c-5.7998 -17.5 -15.2002 -33.2002 -27.0996 -46.8008l-51.2002 44.8008c-10.2998 -11.9004 -24.4004 -20.2002 -40.7002 -23.5z" />
|
434 |
<glyph glyph-name="git-square" unicode=""
|
435 |
-
d="
|
436 |
-
|
437 |
-
|
438 |
-
|
439 |
-
|
440 |
-
|
441 |
-
|
442 |
-
|
443 |
-
|
444 |
-
|
445 |
-
|
446 |
-
|
447 |
-
|
448 |
-
c-
|
449 |
-
c0
|
450 |
<glyph glyph-name="hacker-news" unicode=""
|
451 |
d="M0 416h448v-448h-448v448zM21.2002 218.8h-0.200195c0.0996094 0.100586 0.200195 0.299805 0.299805 0.400391c0 -0.100586 0 -0.299805 -0.0996094 -0.400391zM239.2 164.9l80.7998 155.1h-34.7998c-54.7998 -101.2 -48.2998 -98.5996 -60.6006 -125.6
|
452 |
c-10.0996 24.3994 -6.7998 27.2998 -59.2998 125.6h-37.2998l79.7998 -153.3v-102.7h31.4004v100.9z" />
|
@@ -1433,10 +1433,13 @@ c15.7998 7.59961 36.5 78.8994 24.2998 101.3z" />
|
|
1433 |
d="M87.2002 394.5c-41.5 -50.2002 -65.6006 -116.2 -65.5 -192.9c-0.100586 -86.7998 29 -159.5 78.7002 -212.1h-100.4v405h87.2002zM325.4 384.8c46.1992 -0.0996094 79.5996 -33.5 80.6992 -83.2002h-169.899c4.09961 49.7002 43.2998 83.1006 89.2002 83.2002z
|
1434 |
M556.1 394.4h0.300781l-0.100586 0.0996094zM556.4 394.4h83.5996v-405h-80.7998c21.3994 23 40.5 49.8994 57.8994 80.7998l-96.3994 48.2002c-33.9004 -55.1006 -83.4004 -105.801 -151.9 -106.101c-99.7002 0.400391 -138.8 85.6006 -138.6 195.3h372.399
|
1435 |
c0.5 12.4004 0.5 18.1006 0 24.1006c2.5 65.2002 -14.7998 120 -46.1992 162.7z" />
|
1436 |
-
<glyph glyph-name="facebook-f" unicode="" horiz-adv-x="
|
1437 |
-
d="
|
1438 |
-
<glyph glyph-name="facebook-messenger" unicode=""
|
1439 |
-
d="
|
|
|
|
|
|
|
1440 |
<glyph glyph-name="firstdraft" unicode="" horiz-adv-x="384"
|
1441 |
d="M384 256h-64v-128h-128v-128h-192v25.5996h166.4v128h128v128h89.5996v-25.5996zM358.4 217.6h25.5996v-153.6h-128v-128h-192v25.5996h166.4v128h128v128zM384 25.5996v-25.5996h-64v-64h-25.5996v89.5996h89.5996zM0 448h384v-128h-128v-128h-128v-128h-128v384z" />
|
1442 |
<glyph glyph-name="fonticons-fi" unicode="" horiz-adv-x="384"
|
@@ -2095,15 +2098,6 @@ c2.2998 2.09961 2.7002 2.69922 5.59961 3.59961c3.40039 0 3.90039 -0.299805 6.700
|
|
2095 |
l-3.2998 0.0996094c-1.7002 0.599609 -4.5 3.5 -6.2002 5.09961c-58.7998 57.8008 -148.7 151.601 -155.8 233.801c-1.5 71.3994 29.2998 113.399 82.9004 141.3c9.89941 4.09961 37 17.2998 81.0996 17.2998c22 0.200195 51.0996 -4.5 76.5996 -15.2002
|
2096 |
c24.7002 -11.5 47 -26.3994 63.3008 -52.0996zM186.8 96.0996v325.7c-57.8994 -5.5 -72.7002 -89.2002 -69.2998 -136.7c4.09961 -58.2998 41.2998 -137.899 69.2998 -189zM328.7 268c15.7998 54.9004 -10.9004 134.7 -99.7002 153
|
2097 |
c38.2002 -25.5996 49.5996 -85.5 48 -131.4c-2 -58.5996 -39.4004 -140 -67.2002 -191.899c41.6006 42.2998 102.5 113.5 118.9 170.3z" />
|
2098 |
-
<glyph glyph-name="nintendo-switch" unicode=""
|
2099 |
-
d="M95.9004 414.5c5.7998 1 19.0996 1.2998 63.2998 1.40039c54.3994 0.0996094 56 0 56.8994 -1.7002c0.600586 -1.2998 0.900391 -72.1006 0.900391 -222.601c0 -202.899 -0.0996094 -220.8 -1.5 -222.199c-1.40039 -1.40039 -6.7998 -1.5 -58.7002 -1.10059
|
2100 |
-
c-50.2002 0.200195 -58 0.5 -64.0996 1.90039c-47 10.8994 -80 44 -90.2998 90.5c-1.90039 8.7002 -2 11.2998 -2.2002 122.899c-0.5 121.601 -0.200195 130.801 3.89941 146.5c11.3008 43.4004 47.2002 76.4004 91.8008 84.4004zM179.8 191.9h-0.200195v188
|
2101 |
-
l-35.8994 -0.100586c-39.7002 -0.0996094 -45.4004 -0.700195 -57.6006 -5.59961c-24.2998 -9.7002 -42.3994 -31.2998 -48 -57.4004c-1.89941 -9.2002 -1.89941 -239.899 0.100586 -249.3c6.2998 -30 28.3994 -53 58.2998 -60.7002
|
2102 |
-
c7 -1.7002 10.7002 -1.89941 45.5 -2.2998l37.7998 -0.5v187.9zM103.9 323.1c23.2998 4.7002 46 -11.2998 49.8994 -35c3.5 -20.0996 -8.7002 -39.5996 -28.7998 -46.3994c-4.90039 -1.7002 -7.5 -2 -14.7998 -1.7002c-8.10059 0.299805 -9.7002 0.599609 -15.9004 3.7002
|
2103 |
-
c-9 4.39941 -15.5 11 -19.8994 20c-3 5.89941 -3.40039 7.89941 -3.80078 15.2002c-0.799805 14.0996 4.10059 26.0996 13.8008 34.5c4.7998 4.09961 13.6992 8.59961 19.5 9.69922zM262.1 415.4c0.300781 0.299805 18.8008 0.599609 41.2002 0.5
|
2104 |
-
c32.2998 0 42.2998 -0.300781 48.7998 -1.40039c48.4004 -8.2998 85.3008 -44.7998 94.5 -93.0996c1.30078 -6.7002 1.5 -22.6006 1.5 -129c0 -133.301 0.100586 -128.7 -5.69922 -146.101c-1.60059 -4.5 -4.7002 -11.7998 -7 -16.2002
|
2105 |
-
c-18 -34 -51.3008 -56.8994 -89 -61.1992c-8.90039 -1 -80.9004 -1.30078 -83.4004 -0.400391c-1.40039 0.599609 -1.5 21.0996 -1.5 223.4c0 122.699 0.200195 223.199 0.599609 223.5zM361.2 213.3c-23.2002 6.10059 -47.2998 -7.2998 -54.2002 -30
|
2106 |
-
c-2.2998 -7.2998 -2.40039 -19.2002 -0.400391 -26.2002c6.7002 -23 31.4004 -37 54.6006 -31c14.2998 3.80078 25.3994 14.1006 31.0996 28.8008c3.10059 8 3.2002 20.7998 0.100586 29.5c-4.90039 14.0996 -16.7002 25.0996 -31.2002 28.8994z" />
|
2107 |
<glyph glyph-name="node" unicode="" horiz-adv-x="640"
|
2108 |
d="M316.3 -4c-2.09961 0 -4.2002 0.599609 -6.09961 1.59961l-19.2002 11.4004c-2.90039 1.59961 -1.5 2.2002 -0.5 2.5c3.7998 1.2998 4.59961 1.59961 8.7002 4c0.399414 0.200195 1 0.0996094 1.39941 -0.0996094l14.8008 -8.80078
|
2109 |
c0.5 -0.299805 1.2998 -0.299805 1.7998 0l57.7998 33.4004c0.5 0.299805 0.900391 0.900391 0.900391 1.59961v66.7002c0 0.700195 -0.300781 1.2998 -0.900391 1.60059l-57.7998 33.2998c-0.5 0.299805 -1.2002 0.299805 -1.7998 0l-57.8008 -33.2998
|
@@ -2745,43 +2739,32 @@ c20.9434 0 37.9404 -16.9971 37.9404 -37.9404c0 -13.2236 -9.69043 -28.5703 -21.63
|
|
2745 |
s-16.9922 -37.9297 -37.9297 -37.9297c-13.1963 0 -28.5273 9.66211 -34.2197 21.5684c-1.76367 3.66602 -3.39453 9.93848 -3.63965 14c-111.98 -80.3398 -191.9 51 -191.9 51c43.0703 -5.87988 91.1904 -8.21973 91.1904 -8.21973
|
2746 |
c41.3301 -67.1709 63.9199 0.540039 72.7695 39.4893c50.418 18.7646 91.3604 77.6543 91.3906 131.45c0 2.08008 -0.220703 4.08984 -0.300781 6.15039l19.5205 0.139648c1.28027 -89.9697 -23.71 -147.2 -45.1406 -179.66z" />
|
2747 |
<glyph glyph-name="mailchimp" unicode=""
|
2748 |
-
d="
|
2749 |
-
|
2750 |
-
c-
|
2751 |
-
|
2752 |
-
c-
|
2753 |
-
|
2754 |
-
|
2755 |
-
c-
|
2756 |
-
|
2757 |
-
|
2758 |
-
|
2759 |
-
|
2760 |
-
|
2761 |
-
|
2762 |
-
|
2763 |
-
|
2764 |
-
c-
|
2765 |
-
|
2766 |
-
|
2767 |
-
|
2768 |
-
|
2769 |
-
c0 0
|
2770 |
-
c-
|
2771 |
-
|
2772 |
-
|
2773 |
-
|
2774 |
-
c3.51758 -0.786133 9.29688 -1.50293 12.9004 -1.59961c60.8994 -1.7002 111 45.5 113.1 47.9004c0 0 -0.5 -1.2002 -0.599609 -1.40039c-9 -20 -60.6006 -56.4004 -112.101 -55.4004l-0.199219 -0.0996094c-12 0.0996094 -26.5 3.09961 -34 12.5
|
2775 |
-
c-11.9004 14.7998 -5.7002 39.4004 13.2998 40c0 0 4.39941 0.0996094 6.2998 0.0996094c47 1.40039 89.2998 18.7002 119.5 54.8008c4.09961 5.19922 -0.5 12.2998 -9.5 12.5h-0.0996094l-0.100586 0.0996094c-10.7002 11.4004 -20 15.5 -28.3994 19.7002
|
2776 |
-
c-17.5 8.89941 -15.8008 1.2002 -19.9004 44.5c-1.09961 11.7002 -3.40039 27.5996 -13.5996 33.7002c-2.20605 1.26953 -6.06152 2.2998 -8.60645 2.2998c-1.46777 0 -3.79492 -0.358398 -5.19434 -0.799805c-5.59961 -1.2002 -8.7998 -4.40039 -12.7998 -8.10059
|
2777 |
-
c-18.8994 -17.3994 -34.0996 -12.7002 -56.5996 -12.5c-21.1006 0.100586 -39.7998 -14.5996 -43.4004 -37.2998c-1.7998 -11.9004 -0.700195 -24 1.2002 -29.4004c0 0 -5.7998 3.80078 -8.5 7.2002c3.2998 -20.7998 23.6484 -34.042 22.2002 -34.2998
|
2778 |
-
c-1.44922 -0.257812 -3.81934 -0.466797 -5.29102 -0.466797c-0.554688 0 -1.45508 0.0302734 -2.00879 0.0664062c0 0 10.6992 -8.5 20.0996 -11.5c-2.40039 -1.5 -14.7002 -13.6992 -21.0996 -30.3994c-5.90039 -15.7002 -3.5 -34.5 -3.5 -34.5l5.19922 7.7002
|
2779 |
-
s-3.2998 -17.2002 3.2002 -33.8008c2.2002 5 6.90039 13.8008 6.90039 13.8008s-0.799805 -18.4004 8.09961 -33.5c0.299805 3.39941 1.60059 12.2998 1.60059 12.2998s5.09961 -15.7002 16.8994 -26.7002c22 -19.5 80.2998 -23.0996 124.7 11.7998
|
2780 |
-
c35.2002 27.6006 41.2998 60.7998 41.9004 62zM269.7 85c0 0.0996094 -0.100586 0.0996094 -0.100586 0.200195c0 -0.100586 0 -0.100586 0.100586 -0.200195c0 0.0996094 -0.100586 0.200195 -0.100586 0.400391c0 -0.200195 0 -0.300781 0.100586 -0.400391zM332.6 195.4
|
2781 |
-
c0.600586 3.5 3.10059 6.09961 5.7002 5.69922c2.60059 -0.399414 4.2998 -3.5 3.7002 -7.09961s-3.09961 -6.09961 -5.7002 -5.7002c-2.59961 0.400391 -4.2002 3.60059 -3.7002 7.10059zM274.6 196.6c-10.3994 3.80078 -18 4.40039 -31.5 -0.699219
|
2782 |
-
c-3.39941 -1.30078 -5.7998 -2.30078 -7 -2.10059c-1.89941 0.299805 0 3.7002 4.10059 7.10059c4.65918 3.77734 13.3096 6.84277 19.3076 6.84277c2.89551 0 7.46191 -0.780273 10.1924 -1.74316c4.2998 -1.59961 9.09961 -4.7002 11.5996 -8.40039
|
2783 |
-
c0.900391 -1.39941 1.2002 -2.5 0.799805 -2.89941c-0.699219 -0.900391 -3.5 0.299805 -7.5 1.89941zM321.3 225.8c-0.0996094 3.40039 0.5 8.90039 3.7002 10c5.40039 1.90039 12.5996 -12 12.9004 -24.2998c-3.09863 1.50684 -8.41016 2.72949 -11.8555 2.72949
|
2784 |
-
c-0.731445 0 -1.91699 -0.0576172 -2.64453 -0.129883c-1.03027 3.14844 -1.97168 8.39062 -2.10059 11.7002z" />
|
2785 |
<glyph glyph-name="megaport" unicode="" horiz-adv-x="496"
|
2786 |
d="M214.5 238.4l33.4004 33.3994l33.3994 -33.3994v-66.4004l-33.2998 -33.2998l-33.5 33.5v66.2002zM248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM393.1 25.5996h0.100586v87.1006l-59.7002 59.7002v87.5996l-59.5 59.5
|
2787 |
v75.5996l-26.0996 19.2002l-26.1006 -19.2002v-75.5996l-59.5 -59.5v-87.9004l-59.5 -59.5v-87l26.1006 -19.1992l26.0996 19.1992v65.5l33.5 33.4004l33.4004 -33.4004v-65.5l26.0996 -19.1992l26.2002 19.1992v65.5l33.3994 33.4004l33.4004 -33.4004v-65.5l26 -19.1992z
|
@@ -3269,21 +3252,10 @@ c-0.400391 -8.59961 28.3994 -33.5 57.7998 -32.2998zM263.9 76.9004v0.599609c-0.20
|
|
3269 |
c32.6006 0.199219 59 24.2998 58.8008 54zM346.1 34.2002c18.4004 23.2002 12.2002 62 1.7002 72.2998c-15.5996 11.9004 -38 -3.2998 -58.8994 -26.5996c-18.3008 -21.1006 -28.4004 -59.6006 -15.1006 -72c12.7002 -9.60059 47 -8.30078 72.2998 26.2998zM369 107.4
|
3270 |
c23.7002 18.6992 31.2998 73.5996 -12.5996 98.2998c-26.4004 7 -8.90039 -107.7 12.5996 -98.2998z" />
|
3271 |
<glyph glyph-name="redhat" unicode="" horiz-adv-x="512"
|
3272 |
-
d="
|
3273 |
-
c-
|
3274 |
-
|
3275 |
-
c-
|
3276 |
-
c5.2002 9.90039 9.7002 12.7002 16 22.1006c1.90039 2.69922 9 12.5 11.0996 20.0996c2.30078 7.59961 1.5 16.9004 2.40039 20.7998c1.2002 5.60059 6.5 17.7002 6.90039 24.5c0.199219 3.90039 -16.1006 -5.5 -23.9004 -5.5s-15.4004 4.7002 -22.2998 5
|
3277 |
-
c-8.60059 0.400391 -14.1006 -6.59961 -21.9004 -5.39941c-4.39941 0.699219 -8.2002 4.59961 -15.8994 4.89941c-11.1006 0.400391 -24.6006 -6.09961 -49.9004 -5.2998c-24.9004 0.799805 -48 31.5 -51.0996 36.4004c-3.7002 5.69922 -8.2002 5.69922 -13.1006 1.19922
|
3278 |
-
c-4.89941 -4.39941 -11 -0.899414 -12.7002 2.10059c-2.39941 4.2998 -8 14.7998 -16.2998 21.2002c-8.7002 6.7998 -17.5 6.09961 -21.5 5c-10.5 -2.80078 -15.5996 -13.6006 -14.7002 -22.7002c0.900391 -9.2998 5.60059 -13.5 9.5 -17.7998
|
3279 |
-
c6.30078 -7.2002 6.10059 -14.1006 15.8008 -18.2002c5 -2.10059 6.69922 -5.10059 5.2998 -9.10059c-1.2998 -3.5 -6.40039 -4.2998 -9.7998 -4.5c-8.30078 -0.399414 -15.1006 3.5 -15.8008 3.90039c-12 7.59961 -11.1992 22.9004 -30.2998 22.9004
|
3280 |
-
c-3.7998 0 -7.2998 -1 -10.3994 -2.60059c-12.4004 -6.39941 -27 -10.2002 -42.8008 -10.2002h-17.7998c-8.59961 25.7002 -13.2998 53.2002 -13.2998 81.8008c0 141.3 114.6 255.899 256 255.899zM464.2 167.5c5.5 30.5996 -20.2002 53.2002 -63.9004 63.0996
|
3281 |
-
c-2.5 -8.5 -6.09961 -19.3994 -22.0996 -27.5996c-2.40039 -1.2002 -3.2998 0.799805 -2.2002 2.59961c6.09961 10.3008 7.09961 12.9004 8.90039 16.9004c2.5 6 3.7998 14.4004 -1.10059 32c-9.59961 34.5996 -29.7002 80.9004 -44.2998 95.9004
|
3282 |
-
c-14.0996 14.5 -39.5996 18.5996 -62.7002 12.6992c-8.39941 -2.19922 -25.0996 -10.7998 -55.8994 -3.89941c-53.3008 12 -61.2002 -14.7002 -64.3008 -26.2998c-3 -11.6006 -10.3994 -44.7002 -10.3994 -44.7002c-2.40039 -13.5 -5.7002 -36.9004 77.2002 -52.7002
|
3283 |
-
c62.6992 -12 30.8994 -31.7998 55.6992 -48.4004c5.5 -3.59961 0 -6.69922 -6.09961 -7.2998c-16.4004 -1.7002 -77.0996 15.7002 -113.1 36.1006c-29.4004 17.8994 -29.9004 34.0996 -23.2002 47.7998c-44.4004 4.7998 -77.7998 -4.2002 -83.7998 -25.2002
|
3284 |
-
c-10.3008 -36.0996 79.3994 -97.7002 181.6 -128.6c107.2 -32.4004 217.4 -9.80078 229.7 57.5996zM229.6 313c19.9004 0 34.4004 -14.5 6.5 -16.5996c-29.5996 -2.10059 -32.6992 -5.30078 -38.1992 -11.2002c-7.80078 -8.2998 -18.1006 10.7998 -18.1006 10.7998
|
3285 |
-
c-6.2002 1.2998 -13.5996 11.2002 -9.59961 20.5c4 9.2002 11.2998 6.5 13.5996 3.59961c11.4004 -14.0996 19.5 -7.09961 45.7998 -7.09961zM290.7 353.2c27 2.7998 39.5996 -7.7002 39.3994 -14.1006c-0.199219 -7.59961 -13.6992 -13.5 -30.0996 -13.1992
|
3286 |
-
c-5.2998 0.0996094 -10.2998 0.899414 -14.5996 2.09961c-1.2002 0.299805 -1.2002 1.90039 0 2.2002c30.5996 7 15.8994 20.5 -18.3008 15.0996c-1.19922 0 -1.19922 1.2002 -0.5 1.5c5.80078 3 14.3008 5.40039 24.1006 6.40039z" />
|
3287 |
<glyph glyph-name="sketch" unicode="" horiz-adv-x="512"
|
3288 |
d="M27.5 285.8l78.9004 105.8l-6.90039 -130.699h-90.5zM396.3 402.3l7.10059 -133.5l-135.7 147.2zM112.2 229.7l122.6 -239.7l-224.899 261.7h91.0996zM114.2 260.9l142.1 154.1l60.4004 -65.5996l81.5 -88.5h-284zM411.5 251.8v-0.0996094h90.9004l-224.801 -261.7z
|
3289 |
M415.4 379l87.8994 -118.1h-90.2998l-6.09961 113.399l-0.900391 17.2998zM113.5 354.5l2.59961 47.7998l128.601 13.7002l-135.8 -147.1zM401.2 251.8l-144.9 -283.8l-102.7 200.9l-42.3994 82.8994h290z" />
|
@@ -3455,5 +3427,16 @@ c0 -10.7881 -8.63965 -20.9561 -19.2861 -22.6982c-54.9102 0.0195312 -131.93 6.009
|
|
3455 |
c0 13.7334 11.1455 24.8799 24.8799 24.8799c8.72949 0 18.8213 -6.41504 22.5264 -14.3184l81 -205.06h1.20996l77 203.529c3.22559 8.26074 13.041 14.9648 21.9092 14.9648c12.9834 0 23.5205 -10.5371 23.5205 -23.5195
|
3456 |
c0 -1.89258 -0.438477 -4.90137 -0.979492 -6.71484l-109.6 -273.391c-18.5498 -47.2197 -37.1201 -79.5596 -93.29 -79.5596c-0.151367 -0.000976562 -0.395508 -0.000976562 -0.545898 -0.000976562c-6.4668 0 -16.8887 0.874023 -23.2646 1.95117
|
3457 |
c-8.52051 2.44238 -15.4365 11.6201 -15.4365 20.4844c0 11.7637 9.54688 21.3105 21.3096 21.3105c0.28418 0 0.744141 -0.0117188 1.02734 -0.0253906c0.660156 -0.0595703 10.9102 -0.660156 13.8604 -0.660156c30.4697 0 43.7393 18.9404 58.0693 59.4102z" />
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3458 |
</font>
|
3459 |
</defs></svg>
|
1 |
<?xml version="1.0" standalone="no"?>
|
2 |
<!--
|
3 |
+
Font Awesome Free 5.9.0 by @fontawesome - https://fontawesome.com
|
4 |
License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
|
5 |
-->
|
6 |
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
7 |
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
|
8 |
<metadata>
|
9 |
+
Created by FontForge 20190112 at Tue Jun 4 15:16:44 2019
|
10 |
By Robert Madole
|
11 |
Copyright (c) Font Awesome
|
12 |
</metadata>
|
23 |
bbox="-0.200195 -66.9505 641.5 448.3"
|
24 |
underline-thickness="25"
|
25 |
underline-position="-51"
|
26 |
+
unicode-range="U+0020-F842"
|
27 |
/>
|
28 |
<missing-glyph />
|
29 |
<glyph glyph-name="twitter-square" unicode=""
|
33 |
c-10.4004 -2.7002 -19.5 -2.7002 -29.5996 -1.2002c8.2998 -26 32.5 -44.9004 61.2998 -45.5c-22.5 -17.6006 -50.7002 -28 -81.4004 -28c-5.39941 0 -10.5 0.200195 -15.7998 0.799805c29 -18.5996 63.5 -29.4004 100.7 -29.4004c120.6 0 186.6 99.9004 186.6 186.601
|
34 |
c0 2.7998 0 5.7002 -0.200195 8.5z" />
|
35 |
<glyph glyph-name="facebook-square" unicode=""
|
36 |
+
d="M400 416c26.4961 0 48 -21.5039 48 -48v-352c0 -26.4961 -21.5039 -48 -48 -48h-137.25v152.31h57.7803l11 71.6904h-68.7803v46.5498c0 19.6104 9.61035 38.7305 40.4199 38.7305h31.2705v61s-28.3809 4.83984 -55.5205 4.83984
|
37 |
+
c-56.6699 0 -93.6699 -34.3301 -93.6699 -96.4805v-54.6396h-63v-71.6904h63v-152.31h-137.25c-26.4961 0 -48 21.5039 -48 48v352c0 26.4961 21.5039 48 48 48h352z" />
|
38 |
<glyph glyph-name="linkedin" unicode=""
|
39 |
d="M416 416c17.5996 0 32 -14.5 32 -32.2998v-383.4c0 -17.7998 -14.4004 -32.2998 -32 -32.2998h-384.1c-17.6006 0 -31.9004 14.5 -31.9004 32.2998v383.4c0 17.7998 14.2998 32.2998 31.9004 32.2998h384.1zM135.4 32h0.0996094v213.8h-66.5v-213.8h66.4004zM102.2 275
|
40 |
c21.2998 0 38.5 17.2002 38.5 38.5c0 21.2002 -17.2998 38.5 -38.5 38.5c-21.2998 0 -38.5 -17.2998 -38.5 -38.5s17.2002 -38.5 38.5 -38.5zM384.3 32v117.2c0 57.5996 -12.5 101.899 -79.7002 101.899c-32.2998 0 -54 -17.6992 -62.8994 -34.5h-0.900391v29.2002h-63.7002
|
57 |
c13.9688 -7.79688 30.2139 -12.6699 47.4307 -13.3184c-28.2637 18.8428 -46.7803 51.0049 -46.7803 87.3906c0 19.4922 5.19629 37.3604 14.2939 52.9541c51.6543 -63.6748 129.3 -105.258 216.364 -109.807c-1.62402 7.79688 -2.59863 15.918 -2.59863 24.04
|
58 |
c0 57.8271 46.7822 104.934 104.934 104.934c30.2139 0 57.502 -12.6699 76.6709 -33.1367c23.7148 4.54785 46.4551 13.3193 66.5986 25.3398c-7.79785 -24.3662 -24.3662 -44.833 -46.1318 -57.8271c21.1172 2.27344 41.584 8.12207 60.4258 16.2432
|
59 |
c-14.292 -20.791 -32.1611 -39.3086 -52.6279 -54.2529z" />
|
60 |
+
<glyph glyph-name="facebook" unicode="" horiz-adv-x="512"
|
61 |
+
d="M504 192c0 -123.78 -90.6904 -226.38 -209.25 -245v173.31h57.7803l11 71.6904h-68.7803v46.5498c0 19.6104 9.61035 38.7305 40.4102 38.7305h31.2803v61s-28.3809 4.83984 -55.5205 4.83984c-56.6699 0 -93.6699 -34.3301 -93.6699 -96.4805v-54.6396h-63v-71.6904h63
|
62 |
+
v-173.31c-118.56 18.6201 -209.25 121.22 -209.25 245c0 137 111 248 248 248s248 -111 248 -248z" />
|
63 |
<glyph glyph-name="github" unicode="" horiz-adv-x="496"
|
64 |
d="M165.9 50.5996c0 -2 -2.30078 -3.59961 -5.2002 -3.59961c-3.2998 -0.299805 -5.60059 1.2998 -5.60059 3.59961c0 2 2.30078 3.60059 5.2002 3.60059c3 0.299805 5.60059 -1.2998 5.60059 -3.60059zM134.8 55.0996c0.700195 2 3.60059 3 6.2002 2.30078
|
65 |
c3 -0.900391 4.90039 -3.2002 4.2998 -5.2002c-0.599609 -2 -3.59961 -3 -6.2002 -2c-3 0.599609 -5 2.89941 -4.2998 4.89941zM179 56.7998c2.90039 0.299805 5.59961 -1 5.90039 -2.89941c0.299805 -2 -1.7002 -3.90039 -4.60059 -4.60059
|
432 |
c16.2998 -3.30078 30.5 -11.9004 40.7002 -23.8008l51.2002 44.8008c11.8994 -13.6006 21.2998 -29.4004 27.3994 -46.8008l-64.5 -22.0996c2.5 -7.40039 3.90039 -15.2002 3.90039 -23.5s-1.40039 -16 -3.90039 -23.5l64.2002 -22.0996
|
433 |
c-5.7998 -17.5 -15.2002 -33.2002 -27.0996 -46.8008l-51.2002 44.8008c-10.2998 -11.9004 -24.4004 -20.2002 -40.7002 -23.5z" />
|
434 |
<glyph glyph-name="git-square" unicode=""
|
435 |
+
d="M100.59 113.76c48.5703 -3.30957 58.9502 -2.10938 58.9502 -11.9395c0 -20 -65.5498 -20.0605 -65.5498 -1.52051c0.00976562 5.08984 3.29004 9.40039 6.59961 13.46zM128.54 230.4c30.96 0 31.7598 -44.4707 -0.75 -44.4707c-33 0 -31.54 44.4707 0.75 44.4707z
|
436 |
+
M448 368v-352c0 -26.4961 -21.5039 -48 -48 -48h-352c-26.4961 0 -48 21.5039 -48 48v352c0 26.4961 21.5039 48 48 48h352c26.4961 0 48 -21.5039 48 -48zM221 298.69c0 -14.4902 8.37988 -22.8809 22.8604 -22.8809c14.7393 0 23.1299 8.39062 23.1299 22.8809
|
437 |
+
c0 14.4893 -8.37012 22.3096 -23.1104 22.3096c-14.4795 0 -22.8799 -7.83984 -22.8799 -22.3096zM199.18 253h-49.5498c-25 6.5498 -81.5596 4.84961 -81.5596 -46.75c0 -18.7998 9.39941 -32 21.8496 -38.1104c-15.6895 -14.3701 -23.1201 -21.1396 -23.1201 -30.7393
|
438 |
+
c0 -6.87012 2.79004 -13.2207 11.1807 -16.7607c-8.90039 -8.39941 -14 -14.4795 -14 -25.9199c0.0195312 -20.0693 17.5498 -31.7197 63.5391 -31.7197c44.2207 0 69.8701 16.5098 69.8701 45.7305c0 36.6699 -28.2295 35.3193 -94.7695 39.3799l8.37988 13.4297
|
439 |
+
c17 -4.74023 74.1904 -6.23047 74.1904 42.4297c0 11.6904 -4.83008 19.8203 -9.40039 25.6699l23.3799 1.78027zM283.52 143.16l-13 1.78027c-3.81934 0.509766 -4.06934 1 -4.06934 5.08984v105.45h-52.6006l-2.79004 -20.5703c15.75 -5.5498 17 -4.86035 17 -10.1699
|
440 |
+
v-74.7402c0 -5.62012 -0.30957 -4.58008 -17 -6.87012v-20.0596h72.4209zM384 133l-6.87012 22.3701c-40.9297 -15.3701 -37.8496 12.4102 -37.8496 16.7295v60.7207h37.8496v25.4102h-35.8203c-2.86914 0 -2 -2.52051 -2 38.6299h-24.1797
|
441 |
+
c-2.79004 -27.7002 -11.6797 -38.8799 -34 -41.4199v-22.6201c20.4697 0 19.8203 0.849609 19.8203 -2.54004v-66.5703c0 -28.7197 11.4297 -40.9102 41.6699 -40.9102c14.4502 0 30.4502 4.83008 41.3799 10.2002z" />
|
442 |
+
<glyph glyph-name="git" unicode="" horiz-adv-x="512"
|
443 |
+
d="M216.29 289.61l0.0400391 -34.5508l-37.4102 -2.83984c7.27051 -9.35938 15 -22.3701 15 -41.0693c0 -77.8906 -91.4297 -75.4707 -118.7 -67.8906l-13.4297 -21.5498c106.47 -6.5 151.63 -4.33984 151.63 -63c0 -46.7598 -41.04 -73.1797 -111.79 -73.1797
|
444 |
+
c-73.5801 0 -101.63 18.71 -101.63 50.8193c0 18.3008 8.12988 28.04 22.4004 41.4502c-13.4199 5.66992 -17.8906 15.8105 -17.8906 26.8105c0 15.3594 11.9004 26.21 37 49.21c-20 9.76953 -35 30.9102 -35 61c0 82.5498 90.4902 85.2793 130.49 74.79h79.29z
|
445 |
+
M152.87 47.71c0 15.7402 -16.6104 13.8096 -94.3203 19.1104c-5.2998 -6.54004 -10.5693 -13.4004 -10.5693 -21.54c0 -29.6699 104.89 -29.6299 104.89 2.42969zM102.06 182.29c52.0205 0 50.7402 71.1602 1.2002 71.1602c-51.6602 0 -54 -71.1602 -1.2002 -71.1602z
|
446 |
+
M235.36 81.7803v32.0996c26.75 3.66016 27.2393 2 27.2393 11v119.51c0 8.5 -2.0498 7.37988 -27.2393 16.2607l4.46973 32.9199h84.1699v-168.71c0 -6.51074 0.400391 -7.32031 6.50977 -8.14062l20.7305 -2.83984v-32.0996h-115.88zM287.81 326.09
|
447 |
+
c-23.1699 0 -36.5898 13.4297 -36.5898 36.6104c0 23.1797 13.4199 35.7695 36.5898 35.7695c23.5801 0 37 -12.6201 37 -35.7695c0 -23.1504 -13.4199 -36.6104 -37 -36.6104zM512 97.54c-17.4902 -8.53027 -43.0996 -16.2598 -66.2803 -16.2598
|
448 |
+
c-48.3799 0 -66.6699 19.5 -66.6699 65.46v106.51c0 5.41992 1.0498 4.05957 -31.71 4.05957v36.1904c35.7803 4.07031 50 22 54.4697 66.2695h38.6309c0 -65.8291 -1.34082 -61.8096 3.25977 -61.8096h57.2998v-40.6504h-60.5596v-97.1494
|
449 |
+
c0 -6.91992 -4.9209 -51.4102 60.5693 -26.8398z" />
|
450 |
<glyph glyph-name="hacker-news" unicode=""
|
451 |
d="M0 416h448v-448h-448v448zM21.2002 218.8h-0.200195c0.0996094 0.100586 0.200195 0.299805 0.299805 0.400391c0 -0.100586 0 -0.299805 -0.0996094 -0.400391zM239.2 164.9l80.7998 155.1h-34.7998c-54.7998 -101.2 -48.2998 -98.5996 -60.6006 -125.6
|
452 |
c-10.0996 24.3994 -6.7998 27.2998 -59.2998 125.6h-37.2998l79.7998 -153.3v-102.7h31.4004v100.9z" />
|
1433 |
d="M87.2002 394.5c-41.5 -50.2002 -65.6006 -116.2 -65.5 -192.9c-0.100586 -86.7998 29 -159.5 78.7002 -212.1h-100.4v405h87.2002zM325.4 384.8c46.1992 -0.0996094 79.5996 -33.5 80.6992 -83.2002h-169.899c4.09961 49.7002 43.2998 83.1006 89.2002 83.2002z
|
1434 |
M556.1 394.4h0.300781l-0.100586 0.0996094zM556.4 394.4h83.5996v-405h-80.7998c21.3994 23 40.5 49.8994 57.8994 80.7998l-96.3994 48.2002c-33.9004 -55.1006 -83.4004 -105.801 -151.9 -106.101c-99.7002 0.400391 -138.8 85.6006 -138.6 195.3h372.399
|
1435 |
c0.5 12.4004 0.5 18.1006 0 24.1006c2.5 65.2002 -14.7998 120 -46.1992 162.7z" />
|
1436 |
+
<glyph glyph-name="facebook-f" unicode="" horiz-adv-x="320"
|
1437 |
+
d="M279.14 160h-74.6895v-224h-100.17v224h-81.3906v92.6602h81.3906v70.6201c0 80.3398 47.8594 124.72 121.08 124.72c35.0693 0 71.75 -6.25977 71.75 -6.25977v-78.8906h-40.4199c-39.8203 0 -52.2402 -24.71 -52.2402 -50.0596v-60.1299h88.9102z" />
|
1438 |
+
<glyph glyph-name="facebook-messenger" unicode="" horiz-adv-x="512"
|
1439 |
+
d="M256.55 440c140.04 0 247.45 -102.34 247.45 -240.57c0 -175.13 -166.15 -273.229 -319.44 -231.04c-8.96973 2.44043 -9.64941 0.600586 -62.5596 -22.6992c-2.10449 -0.918945 -5.67578 -1.66504 -7.97168 -1.66504c-10.624 0 -19.543 8.61719 -19.9082 19.2344
|
1440 |
+
c-1.41992 46.3701 0.299805 50.7207 -8.0498 58.2305c-48.3604 43.1602 -78.0703 105.64 -78.0703 177.939c0 138.23 108.52 240.57 248.55 240.57zM405.79 254.87c7.0498 11.0801 -6.65039 23.5996 -17.0898 15.6201l-78.4102 -59.3799
|
1441 |
+
c-2.20801 -1.65625 -6.24023 -3 -9 -3s-6.79199 1.34375 -9 3l-58.0596 43.46c-5.48926 4.09961 -15.5049 7.42676 -22.3564 7.42676c-11.3438 0 -25.4805 -7.77637 -31.5537 -17.3574l-73 -115.569c-7.05078 -11.0703 6.64941 -23.6006 17.1094 -15.6699l78.3701 59.4395
|
1442 |
+
c2.20801 1.65625 6.24023 3 9 3s6.79199 -1.34375 9 -3l58.0801 -43.4697c5.48926 -4.09766 15.5039 -7.42285 22.3535 -7.42285c11.3428 0 25.4805 7.77441 31.5566 17.3525z" />
|
1443 |
<glyph glyph-name="firstdraft" unicode="" horiz-adv-x="384"
|
1444 |
d="M384 256h-64v-128h-128v-128h-192v25.5996h166.4v128h128v128h89.5996v-25.5996zM358.4 217.6h25.5996v-153.6h-128v-128h-192v25.5996h166.4v128h128v128zM384 25.5996v-25.5996h-64v-64h-25.5996v89.5996h89.5996zM0 448h384v-128h-128v-128h-128v-128h-128v384z" />
|
1445 |
<glyph glyph-name="fonticons-fi" unicode="" horiz-adv-x="384"
|
2098 |
l-3.2998 0.0996094c-1.7002 0.599609 -4.5 3.5 -6.2002 5.09961c-58.7998 57.8008 -148.7 151.601 -155.8 233.801c-1.5 71.3994 29.2998 113.399 82.9004 141.3c9.89941 4.09961 37 17.2998 81.0996 17.2998c22 0.200195 51.0996 -4.5 76.5996 -15.2002
|
2099 |
c24.7002 -11.5 47 -26.3994 63.3008 -52.0996zM186.8 96.0996v325.7c-57.8994 -5.5 -72.7002 -89.2002 -69.2998 -136.7c4.09961 -58.2998 41.2998 -137.899 69.2998 -189zM328.7 268c15.7998 54.9004 -10.9004 134.7 -99.7002 153
|
2100 |
c38.2002 -25.5996 49.5996 -85.5 48 -131.4c-2 -58.5996 -39.4004 -140 -67.2002 -191.899c41.6006 42.2998 102.5 113.5 118.9 170.3z" />
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2101 |
<glyph glyph-name="node" unicode="" horiz-adv-x="640"
|
2102 |
d="M316.3 -4c-2.09961 0 -4.2002 0.599609 -6.09961 1.59961l-19.2002 11.4004c-2.90039 1.59961 -1.5 2.2002 -0.5 2.5c3.7998 1.2998 4.59961 1.59961 8.7002 4c0.399414 0.200195 1 0.0996094 1.39941 -0.0996094l14.8008 -8.80078
|
2103 |
c0.5 -0.299805 1.2998 -0.299805 1.7998 0l57.7998 33.4004c0.5 0.299805 0.900391 0.900391 0.900391 1.59961v66.7002c0 0.700195 -0.300781 1.2998 -0.900391 1.60059l-57.7998 33.2998c-0.5 0.299805 -1.2002 0.299805 -1.7998 0l-57.8008 -33.2998
|
2739 |
s-16.9922 -37.9297 -37.9297 -37.9297c-13.1963 0 -28.5273 9.66211 -34.2197 21.5684c-1.76367 3.66602 -3.39453 9.93848 -3.63965 14c-111.98 -80.3398 -191.9 51 -191.9 51c43.0703 -5.87988 91.1904 -8.21973 91.1904 -8.21973
|
2740 |
c41.3301 -67.1709 63.9199 0.540039 72.7695 39.4893c50.418 18.7646 91.3604 77.6543 91.3906 131.45c0 2.08008 -0.220703 4.08984 -0.300781 6.15039l19.5205 0.139648c1.28027 -89.9697 -23.71 -147.2 -45.1406 -179.66z" />
|
2741 |
<glyph glyph-name="mailchimp" unicode=""
|
2742 |
+
d="M330.61 204.48c-2.50977 3.17969 -4.70996 8.31934 -5.9707 14.3193c-2.22949 10.6807 -1.98926 18.4102 4.24023 19.4199c6.23047 1.01074 9.25 -5.45996 11.4805 -16.1299c1.5 -7.17969 1.20996 -13.7803 -0.450195 -17.6094
|
2743 |
+
c-1.27832 0.165039 -3.36133 0.299805 -4.65039 0.299805c-1.28809 0 -3.37207 -0.134766 -4.64941 -0.299805zM277.05 196c-4.45996 1.95996 -10.2598 4.13965 -17.2598 3.7002c-12.5996 -0.770508 -21.75 -7.21973 -22.5996 -3.48047
|
2744 |
+
c-0.400391 1.83984 2.40918 4.87988 5.40918 7.06055c4.5791 3.35254 12.9014 6.07422 18.5762 6.07422c3.45312 0 8.84473 -1.07324 12.0342 -2.39453c8.63965 -3.7002 14.0098 -11.1504 12.1201 -13.0898c-1.08008 -1.12988 -3.81055 0.129883 -8.28027 2.12988z
|
2745 |
+
M268.05 190.87c9.68066 1.14941 16.8604 -4.62988 15.4004 -6.85059c-0.629883 -1.00977 -2.02051 -0.829102 -4.94043 -0.489258c-1.55078 0.239258 -4.08301 0.433594 -5.65234 0.433594c-3.72656 0 -9.58105 -1.06738 -13.0674 -2.38379
|
2746 |
+
c-4.04004 -1.62012 -4.30957 -1.15039 -5.20996 -0.810547c-1.53027 3.57031 4.40039 8.68066 13.4697 10.1006zM322.22 173.77c-3.40039 -6.91016 -17.7002 0.0703125 -14.2998 7c3.40039 6.93066 17.6797 -0.129883 14.2998 -7zM337.88 194.24
|
2747 |
+
c7.69922 -0.149414 7.42969 -16.0605 -0.259766 -15.9307c-7.69043 0.130859 -7.40039 16.0605 0.259766 15.9307zM119.09 115.34c4.0293 0.910156 3.40039 -1.25 3.37012 -0.359375c0.256836 -0.317383 0.46582 -0.904297 0.46582 -1.3125
|
2748 |
+
c0 -0.299805 -0.119141 -0.755859 -0.265625 -1.01758c-3.16016 -7.37012 -20.1904 -7.68066 -21.5801 9c-0.910156 10.8594 9.30957 21.0293 -2.28027 28.6191c-1.77734 1.17773 -4.95117 2.13281 -7.08301 2.13281c-3.84961 0 -8.67285 -2.62207 -10.7666 -5.85254
|
2749 |
+
c-3.2998 -5.16016 -3.11035 -12.2002 -7.37988 -11.6299c-3.7207 0.540039 -3.70996 14.4805 5 24.0801c7.22949 8 25.9492 11.9297 35.0498 -5.54004c8.11035 -15.3896 -8.2002 -27.7695 -3 -35.7695c2.46973 -3.80078 7.14941 -2.66016 8.46973 -2.35059zM418.81 132.41
|
2750 |
+
c6.44043 0 16.5605 -7.5 16.5605 -25.2705c0 -17.7695 -7.37012 -37.9092 -9.11035 -42.3799c-54.3896 -130.279 -264.56 -130.06 -322.29 3c-31.5293 -0.0400391 -64.1699 26.9805 -67.5293 60.3799c-0.256836 2.25195 -0.463867 5.91992 -0.463867 8.18652
|
2751 |
+
c0 7.21289 2.04395 18.5537 4.56348 25.3135l-14.7598 12.5107c-67.5498 57.04 143.72 291.85 211.27 232.93c0.339844 -0.299805 22.9902 -22.5205 23.0498 -22.5703l12.5508 5.33008c59.2695 24.5303 107.359 12.6904 107.42 -26.4697
|
2752 |
+
c0.0292969 -20.3604 -12.9404 -44.1006 -33.7305 -65.6504c26.1699 -24.2998 20.0205 -71.6094 21.5205 -83c7.19922 -2 30.6992 -7.62012 41.0996 -18.54c18.3604 -19.25 5.52051 -39.5801 3.07031 -43.25c4.20996 -11.2998 3.42969 -8.79004 6.7793 -20.5195z
|
2753 |
+
M102.81 84.25c29.4502 -0.680664 38.6309 28.2002 34.0908 57.8398c-9.74023 62.9404 -90.1699 48.9805 -84 -12.3301c2.44922 -24.3594 27.0898 -44.8994 49.9092 -45.5098zM84.2998 198.45c19.3105 51.8096 51.54 99.5498 94.2002 132.399
|
2754 |
+
c31.6504 26.4102 65.7998 45.3506 65.7998 45.3506s-18.3896 21.3193 -23.9395 22.8896c-34.1699 9.23047 -107.94 -41.6494 -155.051 -108.88c-19.0596 -27.21 -46.3096 -75.3604 -33.2998 -100.21c1.58984 -3 10.71 -10.9297 15.5898 -15
|
2755 |
+
c8.18066 11.9102 21.54 20.5 36.7002 23.4502zM323.18 97.2998c2.58984 0.259766 0.560547 -2.53027 0.560547 -2.53027s-27.4004 -12.75 -71 0.740234c1.20996 -10.2295 11.1699 -14.8193 15.9395 -16.6699c31.4004 -12.21 86.6904 -2.58008 128.46 26
|
2756 |
+
c0.850586 0.589844 1.41992 0 0.730469 -1c-28.9697 -41.3496 -128.73 -54.7598 -151.37 -21.3496c-12.0801 17.8301 -0.599609 43.8594 19.5498 41.1494c6.7998 -0.769531 53.7705 -8 100.48 13.6807c27.4893 12.7598 37.8701 26.79 36.3096 38.1602
|
2757 |
+
c-0.447266 3.00293 -2.57031 7.16504 -4.74023 9.28906c-5 4.83008 -12.79 8.60059 -26 12.3105c-4.35938 1.22949 -7.31934 2.00977 -10.5098 3.05957c-5.67969 1.83008 -8.47949 3.33008 -9.10938 14c-0.280273 4.62988 -1.09082 20.9102 -1.38086 27.6299
|
2758 |
+
c-0.519531 11.7607 -1.91992 27.8506 -11.9199 34.4902c-2.37305 1.51953 -6.58691 2.75195 -9.40527 2.75195c-1.1748 0 -3.05371 -0.229492 -4.19434 -0.511719c-5.69043 -0.969727 -9.06055 -4.00977 -13.2598 -7.50977
|
2759 |
+
c-12.4404 -10.3701 -22.9502 -12.0605 -34.6406 -11.5605c-6.98926 0.290039 -14.3994 1.37988 -22.8799 1.87988l-5 0.290039c-19.5801 1 -40.5693 -15.9092 -44.0693 -39.9092c-4.86035 -33.4307 19.3291 -50.7002 26.3291 -60.8301
|
2760 |
+
c0.912109 -1.0918 1.77246 -3.12598 1.9209 -4.54004c0 -1.94043 -1.25 -3.48047 -2.48047 -4.79004c-19.9805 -20.54 -26.3701 -53.1699 -18.8398 -80.3701c0.768555 -2.76562 2.35938 -7.12891 3.5498 -9.74023c17.7002 -41.2598 72.4902 -60.4795 126 -43
|
2761 |
+
c5.81152 1.89844 14.9238 5.74219 20.3398 8.58008c9.78906 4.8418 23.7441 15.2852 31.1504 23.3096c14.2002 14.8408 22.6396 30.9707 25.9297 50.8408c2.81055 18.6191 -7.78027 18.7598 -11.4395 18.0996c-1.13477 6.94531 -4.32422 17.8223 -7.12012 24.2803
|
2762 |
+
c-15.6299 -12.3506 -35.71 -20.9707 -51 -25.3506c-69.4004 -19.9102 -90.1904 6.35059 -96.4004 -13.8096c33.7705 -12.3701 69.5098 -7.07031 69.5098 -7.07031zM171.31 290.5l0.0605469 0.00976562c-0.0947266 -0.115234 -0.171875 -0.331055 -0.171875 -0.481445
|
2763 |
+
c0 -0.418945 0.34082 -0.759766 0.759766 -0.759766c0.124023 0 0.308594 0.0546875 0.412109 0.121094c11.4199 8.30078 64.9502 42.7705 134.5 26.8301c0.860352 -0.189453 1.39941 1.29004 0.639648 1.7207c-11.3398 6.33984 -28.6895 10.6494 -41 10.7393
|
2764 |
+
c-0.404297 0.00976562 -0.732422 0.345703 -0.732422 0.75c0 0.134766 0.0634766 0.332031 0.142578 0.44043c1.84668 2.41602 5.30078 5.88379 7.70996 7.74023c0.166992 0.126953 0.302734 0.401367 0.302734 0.611328c0 0.424805 -0.344727 0.770508 -0.770508 0.770508
|
2765 |
+
c-0.0146484 0 -0.0380859 -0.000976562 -0.0517578 -0.00195312c-17.5205 -1.08008 -37.5107 -9.4707 -49 -17.2998c-0.107422 -0.0751953 -0.300781 -0.136719 -0.431641 -0.136719c-0.414062 0 -0.75 0.335938 -0.75 0.75
|
2766 |
+
c0 0.0498047 0.00976562 0.12793 0.0214844 0.176758c0.899414 4.30957 3.72949 9.98926 5.18945 12.6494c0.0566406 0.0947266 0.102539 0.261719 0.102539 0.37207c0 0.402344 -0.327148 0.729492 -0.730469 0.729492
|
2767 |
+
c-0.110352 0 -0.276367 -0.0449219 -0.37207 -0.101562c-18.4697 -9.4502 -39.0898 -26.2803 -55.8301 -45.6299z" />
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2768 |
<glyph glyph-name="megaport" unicode="" horiz-adv-x="496"
|
2769 |
d="M214.5 238.4l33.4004 33.3994l33.3994 -33.3994v-66.4004l-33.2998 -33.2998l-33.5 33.5v66.2002zM248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM393.1 25.5996h0.100586v87.1006l-59.7002 59.7002v87.5996l-59.5 59.5
|
2770 |
v75.5996l-26.0996 19.2002l-26.1006 -19.2002v-75.5996l-59.5 -59.5v-87.9004l-59.5 -59.5v-87l26.1006 -19.1992l26.0996 19.1992v65.5l33.5 33.4004l33.4004 -33.4004v-65.5l26.0996 -19.1992l26.2002 19.1992v65.5l33.3994 33.4004l33.4004 -33.4004v-65.5l26 -19.1992z
|
3252 |
c32.6006 0.199219 59 24.2998 58.8008 54zM346.1 34.2002c18.4004 23.2002 12.2002 62 1.7002 72.2998c-15.5996 11.9004 -38 -3.2998 -58.8994 -26.5996c-18.3008 -21.1006 -28.4004 -59.6006 -15.1006 -72c12.7002 -9.60059 47 -8.30078 72.2998 26.2998zM369 107.4
|
3253 |
c23.7002 18.6992 31.2998 73.5996 -12.5996 98.2998c-26.4004 7 -8.90039 -107.7 12.5996 -98.2998z" />
|
3254 |
<glyph glyph-name="redhat" unicode="" horiz-adv-x="512"
|
3255 |
+
d="M341.52 162.59v-0.149414c33.6504 0 82.3408 6.93945 82.3408 47c0.219727 6.73926 0.859375 1.81934 -20.8799 96.2393c-4.62012 19.1504 -8.68066 27.8398 -42.3105 44.6504c-26.0898 13.3398 -82.9199 35.3701 -99.7295 35.3701
|
3256 |
+
c-15.6602 0 -20.2002 -20.1699 -38.8701 -20.1699c-18 0 -31.3105 15.0596 -48.1201 15.0596c-16.1406 0 -26.6602 -11 -34.7803 -33.6201c-27.5 -77.5498 -26.2803 -74.2695 -26.1201 -78.2695c0 -24.7998 97.6406 -106.11 228.47 -106.11zM429.07 193.19
|
3257 |
+
l-0.0703125 -0.0302734c4.65039 -22 4.65039 -24.3506 4.65039 -27.25c0 -37.6602 -42.3301 -58.5605 -98 -58.5605c-125.74 -0.0800781 -235.91 73.6504 -235.91 122.33v0.0771484c0 5.65332 1.81836 14.4531 4.05957 19.6436
|
3258 |
+
c-45.2402 -2.26074 -103.8 -10.3301 -103.8 -62.0303c0 -84.6699 200.63 -189 359.49 -189c121.79 0 152.51 55.0801 152.51 98.5801c0 34.21 -29.5898 73.0498 -82.9297 96.2402z" />
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3259 |
<glyph glyph-name="sketch" unicode="" horiz-adv-x="512"
|
3260 |
d="M27.5 285.8l78.9004 105.8l-6.90039 -130.699h-90.5zM396.3 402.3l7.10059 -133.5l-135.7 147.2zM112.2 229.7l122.6 -239.7l-224.899 261.7h91.0996zM114.2 260.9l142.1 154.1l60.4004 -65.5996l81.5 -88.5h-284zM411.5 251.8v-0.0996094h90.9004l-224.801 -261.7z
|
3261 |
M415.4 379l87.8994 -118.1h-90.2998l-6.09961 113.399l-0.900391 17.2998zM113.5 354.5l2.59961 47.7998l128.601 13.7002l-135.8 -147.1zM401.2 251.8l-144.9 -283.8l-102.7 200.9l-42.3994 82.8994h290z" />
|
3427 |
c0 13.7334 11.1455 24.8799 24.8799 24.8799c8.72949 0 18.8213 -6.41504 22.5264 -14.3184l81 -205.06h1.20996l77 203.529c3.22559 8.26074 13.041 14.9648 21.9092 14.9648c12.9834 0 23.5205 -10.5371 23.5205 -23.5195
|
3428 |
c0 -1.89258 -0.438477 -4.90137 -0.979492 -6.71484l-109.6 -273.391c-18.5498 -47.2197 -37.1201 -79.5596 -93.29 -79.5596c-0.151367 -0.000976562 -0.395508 -0.000976562 -0.545898 -0.000976562c-6.4668 0 -16.8887 0.874023 -23.2646 1.95117
|
3429 |
c-8.52051 2.44238 -15.4365 11.6201 -15.4365 20.4844c0 11.7637 9.54688 21.3105 21.3096 21.3105c0.28418 0 0.744141 -0.0117188 1.02734 -0.0253906c0.660156 -0.0595703 10.9102 -0.660156 13.8604 -0.660156c30.4697 0 43.7393 18.9404 58.0693 59.4102z" />
|
3430 |
+
<glyph glyph-name="git-alt" unicode=""
|
3431 |
+
d="M439.55 211.95c4.66504 -4.66602 8.45117 -13.8076 8.45117 -20.4053s-3.78613 -15.7393 -8.45117 -20.4053l-194.689 -194.689c-4.66602 -4.66211 -13.8047 -8.44629 -20.4004 -8.44629s-15.7344 3.78418 -20.4004 8.44629l-195.609 195.6
|
3432 |
+
c-4.66504 4.66602 -8.45117 13.8076 -8.45117 20.4053s3.78613 15.7393 8.45117 20.4053l134.12 134.14l50.79 -50.8496c-5.95996 -14.2607 -2.16016 -36.4902 18.6396 -45v-123c-22.3203 -9.09082 -28.8203 -38.4004 -11.25 -56
|
3433 |
+
c5.55176 -5.54883 16.4268 -10.0518 24.2754 -10.0518c7.84766 0 18.7236 4.50293 24.2744 10.0518c13.1807 13.1494 16.2197 42.46 -9.08008 55v121.85l46.3506 -46.29c-14.21 -34.4697 29.5098 -63.8301 56 -37.3398c25.71 25.6895 -1.24023 68.4902 -35.4707 56.6895
|
3434 |
+
l-49.6592 49.6602c9.29004 26.9102 -16.3301 52.8203 -43.3906 43.6807l-51.5195 51.5195l40.6602 40.6299c4.66602 4.66309 13.8076 8.44727 20.4043 8.44727s15.7383 -3.78418 20.4053 -8.44727z" />
|
3435 |
+
<glyph glyph-name="stackpath" unicode=""
|
3436 |
+
d="M244.6 215.6c0 -8.5 -4.25977 -20.4893 -21.3398 -20.4893h-19.6094v41.4697h19.6094c17.1299 0 21.3398 -12.3604 21.3398 -20.9805zM448 416v-448h-448v448h448zM151.3 160.16c0 21.2402 -12.1201 34.54 -46.7197 44.8496c-20.5703 7.41016 -26 10.9102 -26 18.6299
|
3437 |
+
c0 7.7207 7 14.6104 20.4102 14.6104c14.0898 0 20.79 -8.4502 20.79 -18.3496h30.7002l0.189453 0.569336c0.5 19.5703 -15.0596 41.6504 -51.1201 41.6504c-23.3701 0 -52.5498 -10.75 -52.5498 -38.29c0 -19.4004 9.25 -31.29 50.7402 -44.3701
|
3438 |
+
c17.2598 -6.15039 21.9102 -10.4004 21.9102 -19.4795c0 -15.2002 -19.1309 -14.2305 -19.4707 -14.2305c-20.3994 0 -25.6494 9.09961 -25.6494 21.9004h-30.7998l-0.180664 -0.560547c-0.679688 -31.3203 28.3799 -45.2197 56.6299 -45.2197
|
3439 |
+
c29.9805 0 51.1201 13.5498 51.1201 38.29zM276.68 215.79c0 25.2998 -18.4297 45.46 -53.4199 45.46h-51.7793v-138.18h32.1699v47.3594h19.6094c30.25 0 53.4199 15.9502 53.4199 45.3604zM297.94 123l49.0596 138.22h-31.0898l-47.9102 -138.22h29.9404zM404.46 261.22
|
3440 |
+
h-31.0898l-47.9102 -138.22h29.9404z" />
|
3441 |
</font>
|
3442 |
</defs></svg>
|
fonts/fontawesome/webfonts/fa-brands-400.ttf
CHANGED
Binary file
|
fonts/fontawesome/webfonts/fa-brands-400.woff
CHANGED
Binary file
|
fonts/fontawesome/webfonts/fa-brands-400.woff2
CHANGED
Binary file
|
fonts/fontawesome/webfonts/fa-regular-400.eot
CHANGED
Binary file
|
fonts/fontawesome/webfonts/fa-regular-400.svg
CHANGED
@@ -1,12 +1,12 @@
|
|
1 |
<?xml version="1.0" standalone="no"?>
|
2 |
<!--
|
3 |
-
Font Awesome Free 5.
|
4 |
License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
|
5 |
-->
|
6 |
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
7 |
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
|
8 |
<metadata>
|
9 |
-
Created by FontForge 20190112 at
|
10 |
By Robert Madole
|
11 |
Copyright (c) Font Awesome
|
12 |
</metadata>
|
1 |
<?xml version="1.0" standalone="no"?>
|
2 |
<!--
|
3 |
+
Font Awesome Free 5.9.0 by @fontawesome - https://fontawesome.com
|
4 |
License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
|
5 |
-->
|
6 |
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
7 |
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
|
8 |
<metadata>
|
9 |
+
Created by FontForge 20190112 at Tue Jun 4 15:16:44 2019
|
10 |
By Robert Madole
|
11 |
Copyright (c) Font Awesome
|
12 |
</metadata>
|
fonts/fontawesome/webfonts/fa-regular-400.ttf
CHANGED
Binary file
|
fonts/fontawesome/webfonts/fa-regular-400.woff
CHANGED
Binary file
|
fonts/fontawesome/webfonts/fa-regular-400.woff2
CHANGED
Binary file
|
fonts/fontawesome/webfonts/fa-solid-900.eot
CHANGED
Binary file
|
fonts/fontawesome/webfonts/fa-solid-900.svg
CHANGED
@@ -1,12 +1,12 @@
|
|
1 |
<?xml version="1.0" standalone="no"?>
|
2 |
<!--
|
3 |
-
Font Awesome Free 5.
|
4 |
License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
|
5 |
-->
|
6 |
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
7 |
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
|
8 |
<metadata>
|
9 |
-
Created by FontForge 20190112 at
|
10 |
By Robert Madole
|
11 |
Copyright (c) Font Awesome
|
12 |
</metadata>
|
@@ -23,7 +23,7 @@ Copyright (c) Font Awesome
|
|
23 |
bbox="-0.983398 -64.9834 640.104 448.427"
|
24 |
underline-thickness="25"
|
25 |
underline-position="-51"
|
26 |
-
unicode-range="U+0020-
|
27 |
/>
|
28 |
<missing-glyph />
|
29 |
<glyph glyph-name="glass-martini" unicode=""
|
@@ -192,57 +192,62 @@ c0 13.2598 -10.75 24 -24 24s-24 -10.7402 -24 -24c0 -13.25 10.75 -24 24 -24z" />
|
|
192 |
d="M512 304v-288c0 -26.5 -21.5 -48 -48 -48h-416c-26.5 0 -48 21.5 -48 48v288c0 26.5 21.5 48 48 48h88l12.2998 32.9004c7 18.6992 24.9004 31.0996 44.9004 31.0996h125.5c20 0 37.8994 -12.4004 44.8994 -31.0996l12.4004 -32.9004h88c26.5 0 48 -21.5 48 -48zM376 160
|
193 |
c0 66.2002 -53.7998 120 -120 120s-120 -53.7998 -120 -120s53.7998 -120 120 -120s120 53.7998 120 120zM344 160c0 -48.5 -39.5 -88 -88 -88s-88 39.5 -88 88s39.5 88 88 88s88 -39.5 88 -88z" />
|
194 |
<glyph glyph-name="font" unicode="" horiz-adv-x="448"
|
195 |
-
d="M432 32c8.
|
196 |
-
|
197 |
-
|
198 |
<glyph glyph-name="bold" unicode="" horiz-adv-x="384"
|
199 |
-
d="
|
200 |
-
|
201 |
-
|
202 |
-
c0 37.6768 -23.4121 63.0566 -63.0566 63.0566h-84.3672v-129.248h81.2334c8.73145 0 21.2686 0.851562 31.4092 4.90723z" />
|
203 |
<glyph glyph-name="italic" unicode="" horiz-adv-x="320"
|
204 |
-
d="
|
205 |
-
|
206 |
-
c-1.39258 -7.14062 -8.42773 -12.9365 -15.7041 -12.9365h-40.7246l-62.0918 -320h33.8486z" />
|
207 |
<glyph glyph-name="text-height" unicode="" horiz-adv-x="576"
|
208 |
-
d="
|
209 |
-
c0 8.
|
210 |
-
|
211 |
-
|
212 |
<glyph glyph-name="text-width" unicode="" horiz-adv-x="448"
|
213 |
-
d="
|
214 |
-
c0 8.
|
215 |
-
|
216 |
-
|
217 |
<glyph glyph-name="align-left" unicode="" horiz-adv-x="448"
|
218 |
-
d="
|
219 |
-
|
220 |
-
|
|
|
221 |
<glyph glyph-name="align-center" unicode="" horiz-adv-x="448"
|
222 |
-
d="
|
223 |
-
|
224 |
-
|
|
|
225 |
<glyph glyph-name="align-right" unicode="" horiz-adv-x="448"
|
226 |
-
d="
|
227 |
-
|
228 |
-
|
|
|
229 |
<glyph glyph-name="align-justify" unicode="" horiz-adv-x="448"
|
230 |
-
d="
|
231 |
-
|
232 |
-
|
233 |
<glyph glyph-name="list" unicode=""
|
234 |
-
d="
|
235 |
-
c0
|
236 |
-
|
237 |
-
c0 8.
|
238 |
<glyph glyph-name="outdent" unicode="" horiz-adv-x="448"
|
239 |
-
d="
|
240 |
-
|
241 |
-
|
|
|
|
|
242 |
<glyph glyph-name="indent" unicode="" horiz-adv-x="448"
|
243 |
-
d="
|
244 |
-
|
245 |
-
|
|
|
|
|
246 |
<glyph glyph-name="video" unicode="" horiz-adv-x="576"
|
247 |
d="M336.2 384c26.3994 0 47.7998 -21.4004 47.7998 -47.7998v-288.4c0 -26.3994 -21.4004 -47.7998 -47.7998 -47.7998h-288.4c-26.3994 0 -47.7998 21.4004 -47.7998 47.7998v288.4c0 26.3994 21.4004 47.7998 47.7998 47.7998h288.4zM525.6 346.3
|
248 |
c21.3008 14.6006 50.4004 -0.399414 50.4004 -25.7998v-256.9c0 -25.5 -29.2002 -40.3994 -50.4004 -25.7998l-109.6 75.5v157.4z" />
|
@@ -567,11 +572,13 @@ d="M507.73 338.9c11.7891 -47.4102 -0.84082 -99.6602 -37.9102 -136.73c-39.9004 -3
|
|
567 |
c-16.5 50.1006 -5.58984 107.561 34.0498 147.2c37.0303 37.0195 89.2002 49.6699 136.58 37.9297c9.08984 -2.25977 12.2803 -13.54 5.66016 -20.1602l-74.3604 -74.3594l11.3105 -67.8799l67.8799 -11.3105l74.3604 74.3604
|
568 |
c6.58008 6.58008 17.8799 3.51953 20.1201 -5.50977zM64 -24c13.25 0 24 10.75 24 24c0 13.2598 -10.75 24 -24 24s-24 -10.7402 -24 -24c0 -13.25 10.75 -24 24 -24z" />
|
569 |
<glyph glyph-name="tasks" unicode=""
|
570 |
-
d="
|
571 |
-
|
572 |
-
|
573 |
-
|
574 |
-
|
|
|
|
|
575 |
<glyph glyph-name="filter" unicode=""
|
576 |
d="M487.976 448c21.3623 0 32.0459 -25.8965 16.9717 -40.9707l-184.947 -184.971v-262.039c0 -19.5127 -21.9805 -30.71 -37.7627 -19.6611l-80 55.9795c-6.41602 4.49219 -10.2373 11.8311 -10.2373 19.6621v206.059l-184.942 184.971
|
577 |
c-15.1045 15.1045 -4.34766 40.9707 16.9707 40.9707h463.947z" />
|
@@ -627,30 +634,30 @@ d="M400 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -
|
|
627 |
d="M16 316c-8.83691 0 -16 7.16309 -16 16v40c0 8.83691 7.16309 16 16 16h416c8.83691 0 16 -7.16309 16 -16v-40c0 -8.83691 -7.16309 -16 -16 -16h-416zM16 156c-8.83691 0 -16 7.16309 -16 16v40c0 8.83691 7.16309 16 16 16h416c8.83691 0 16 -7.16309 16 -16v-40
|
628 |
c0 -8.83691 -7.16309 -16 -16 -16h-416zM16 -4c-8.83691 0 -16 7.16309 -16 16v40c0 8.83691 7.16309 16 16 16h416c8.83691 0 16 -7.16309 16 -16v-40c0 -8.83691 -7.16309 -16 -16 -16h-416z" />
|
629 |
<glyph glyph-name="list-ul" unicode=""
|
630 |
-
d="
|
631 |
-
s-48 21.
|
632 |
-
|
633 |
<glyph glyph-name="list-ol" unicode=""
|
634 |
-
d="
|
635 |
-
|
636 |
-
|
637 |
-
|
638 |
-
|
639 |
-
|
640 |
-
|
641 |
-
c-
|
642 |
-
|
643 |
-
c0 8.83691 7.16309 16 16 16h352c8.83691 0 16 -7.16309 16 -16v-40c0 -8.83691 -7.16309 -16 -16 -16h-352zM144 156c-8.83691 0 -16 7.16309 -16 16v40c0 8.83691 7.16309 16 16 16h352c8.83691 0 16 -7.16309 16 -16v-40c0 -8.83691 -7.16309 -16 -16 -16h-352zM144 -4
|
644 |
-
c-8.83691 0 -16 7.16309 -16 16v40c0 8.83691 7.16309 16 16 16h352c8.83691 0 16 -7.16309 16 -16v-40c0 -8.83691 -7.16309 -16 -16 -16h-352z" />
|
645 |
<glyph glyph-name="strikethrough" unicode=""
|
646 |
-
d="M496
|
647 |
-
c0
|
648 |
-
|
649 |
-
c0 -
|
|
|
|
|
650 |
<glyph glyph-name="underline" unicode="" horiz-adv-x="448"
|
651 |
-
d="
|
652 |
-
c0
|
653 |
-
|
654 |
<glyph glyph-name="table" unicode=""
|
655 |
d="M464 416c26.5098 0 48 -21.4902 48 -48v-352c0 -26.5098 -21.4902 -48 -48 -48h-416c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48h416zM224 32v96h-160v-96h160zM224 192v96h-160v-96h160zM448 32v96h-160v-96h160zM448 192v96h-160v-96h160z" />
|
656 |
<glyph glyph-name="magic" unicode=""
|
@@ -889,19 +896,15 @@ c0 11.0459 8.9541 20 20 20zM96 448c39.7637 0 72 -32.2354 72 -72s-32.2354 -72 -72
|
|
889 |
d="M176 16c0 -44.1123 -35.8877 -80 -80 -80s-80 35.8877 -80 80s35.8877 80 80 80s80 -35.8877 80 -80zM25.2598 422.801c-0.68457 13.709 10.2441 25.1992 23.9707 25.1992h93.5391c13.7266 0 24.6553 -11.4902 23.9707 -25.1992l-13.6006 -272
|
890 |
c-0.638672 -12.7725 -11.1807 -22.8008 -23.9697 -22.8008h-66.3398c-12.7891 0 -23.3311 10.0283 -23.9697 22.8008z" />
|
891 |
<glyph glyph-name="superscript" unicode=""
|
892 |
-
d="
|
893 |
-
|
894 |
-
|
895 |
-
|
896 |
-
c0 103 119.4 123.8 119.4 160c0 11 -6.90039 23.9004 -26.2998 23.9004c-12.9004 0 -23.7002 -7.7998 -31.7002 -18.2002c-5.09961 -6.7002 -14.5996 -8.2998 -21.5996 -3.59961l-30.3008 20.2998c-7.19922 4.89941 -9.2998 14.5996 -4.59961 21.8994
|
897 |
-
c18 28.4004 51.9004 50.4004 94.4004 50.4004c47.0996 0 97.7998 -27.5 97.7998 -88.0996c0 -24.4004 -8.40039 -45.5 -25.9004 -64.6006c-14.7998 -16.2998 -33.7002 -28.2998 -50.2998 -38.8994c-17.5 -11.1006 -32.7998 -21.9004 -36.2998 -32.4004h100.8z" />
|
898 |
<glyph glyph-name="subscript" unicode=""
|
899 |
-
d="
|
900 |
-
|
901 |
-
|
902 |
-
|
903 |
-
c0 103 119.4 123.8 119.4 160c0 11 -6.90039 23.9004 -26.2998 23.9004c-12.9004 0 -23.7002 -7.7998 -31.7002 -18.2002c-5.09961 -6.7002 -14.5996 -8.2998 -21.5996 -3.59961l-30.3008 20.2998c-7.19922 4.89941 -9.2998 14.5996 -4.59961 21.8994
|
904 |
-
c18 28.4004 51.9004 50.4004 94.4004 50.4004c47.0996 0 97.7998 -27.5 97.7998 -88.0996c0 -24.4004 -8.40039 -45.5 -25.9004 -64.6006c-14.7998 -16.2998 -33.7002 -28.2998 -50.2998 -38.8994c-17.5 -11.1006 -32.7998 -21.9004 -36.2998 -32.4004h100.8z" />
|
905 |
<glyph glyph-name="eraser" unicode=""
|
906 |
d="M497.941 174.059l-142.059 -142.059h144.117c6.62695 0 12 -5.37305 12 -12v-40c0 -6.62695 -5.37305 -12 -12 -12h-356c-10.9756 0 -26.1816 6.29883 -33.9424 14.0586l-96 96c-18.7441 18.7451 -18.7441 49.1377 0 67.8828l256 256
|
907 |
c18.7471 18.7451 49.1387 18.7441 67.8838 0l160 -160c18.7441 -18.7451 18.7441 -49.1377 0 -67.8828zM195.314 236.686l-124.687 -124.686l80 -80h114.745l67.3135 67.3135z" />
|
@@ -1042,41 +1045,41 @@ d="M224 312c0 -13.2002 10.7998 -24 24 -24h136v-328c0 -13.2998 -10.7002 -24 -24 -
|
|
1042 |
c0 -6.59961 5.40039 -12 12 -12h168c6.59961 0 12 5.40039 12 12zM288 140v8c0 6.59961 -5.40039 12 -12 12h-168c-6.59961 0 -12 -5.40039 -12 -12v-8c0 -6.59961 5.40039 -12 12 -12h168c6.59961 0 12 5.40039 12 12zM288 212c0 6.59961 -5.40039 12 -12 12h-168
|
1043 |
c-6.59961 0 -12 -5.40039 -12 -12v-8c0 -6.59961 5.40039 -12 12 -12h168c6.59961 0 12 5.40039 12 12v8zM384 326.1v-6.09961h-128v128h6.09961c6.40039 0 12.5 -2.5 17 -7l97.9004 -98c4.5 -4.5 7 -10.5996 7 -16.9004z" />
|
1044 |
<glyph glyph-name="sort-alpha-down" unicode="" horiz-adv-x="448"
|
1045 |
-
d="
|
1046 |
-
|
1047 |
-
|
1048 |
-
|
1049 |
-
|
|
|
1050 |
<glyph glyph-name="sort-alpha-up" unicode="" horiz-adv-x="448"
|
1051 |
-
d="
|
1052 |
-
|
1053 |
-
c-
|
1054 |
-
|
1055 |
-
|
|
|
1056 |
<glyph glyph-name="sort-amount-down" unicode=""
|
1057 |
-
d="
|
1058 |
-
|
1059 |
-
c8.
|
1060 |
-
c0 8.
|
1061 |
<glyph glyph-name="sort-amount-up" unicode=""
|
1062 |
-
d="
|
1063 |
-
|
1064 |
-
|
1065 |
-
c0 8.
|
1066 |
<glyph glyph-name="sort-numeric-down" unicode="" horiz-adv-x="448"
|
1067 |
-
d="
|
1068 |
-
c0 -
|
1069 |
-
|
1070 |
-
|
1071 |
-
|
1072 |
-
c-10.0703 10.0703 -2.89844 27.3145 11.3135 27.3145h47.9814v320c0 8.83691 7.16309 16 16 16h32c8.83691 0 16 -7.16309 16 -16v-320h47.9844z" />
|
1073 |
<glyph glyph-name="sort-numeric-up" unicode="" horiz-adv-x="448"
|
1074 |
-
d="
|
1075 |
-
|
1076 |
-
|
1077 |
-
|
1078 |
-
|
1079 |
-
c10.0703 -10.0703 2.89844 -27.3145 -11.3135 -27.3145h-47.9814v-320c0 -8.83691 -7.16309 -16 -16 -16h-32c-8.83691 0 -16 7.16309 -16 16v320h-47.9844z" />
|
1080 |
<glyph glyph-name="thumbs-up" unicode=""
|
1081 |
d="M104 224c13.2549 0 24 -10.7451 24 -24v-240c0 -13.2549 -10.7451 -24 -24 -24h-80c-13.2549 0 -24 10.7451 -24 24v240c0 13.2549 10.7451 24 24 24h80zM64 -24c13.2549 0 24 10.7451 24 24s-10.7451 24 -24 24s-24 -10.7451 -24 -24s10.7451 -24 24 -24zM384 366.548
|
1082 |
c0 -42.416 -25.9697 -66.208 -33.2773 -94.5479h101.724c33.3965 0 59.3965 -27.7461 59.5527 -58.0977c0.0839844 -17.9385 -7.5459 -37.249 -19.4395 -49.1973l-0.109375 -0.110352c9.83594 -23.3369 8.23633 -56.0371 -9.30859 -79.4688
|
@@ -1279,12 +1282,12 @@ c31.3848 -24.9043 71.1045 -39.7695 114.323 -39.7695c101.705 0 184 82.3105 184 18
|
|
1279 |
c-8.83691 0 -16 7.16309 -16 16v145.373c0 14.2539 17.2344 21.3926 27.3145 11.3135l49.3711 -49.3711c44.5234 42.5488 104.866 68.6846 171.314 68.6846c136.81 0 247.747 -110.78 248 -247.531zM323.088 113.685c-8.1377 -10.4629 -23.2158 -12.3467 -33.6787 -4.20996
|
1280 |
l-65.4092 50.874v135.651c0 13.2549 10.7451 24 24 24h16c13.2549 0 24 -10.7451 24 -24v-104.349l40.7012 -31.6572c10.4629 -8.13672 12.3477 -23.2158 4.20996 -33.6787z" />
|
1281 |
<glyph glyph-name="heading" unicode=""
|
1282 |
-
d="
|
1283 |
-
|
1284 |
-
c0
|
1285 |
<glyph glyph-name="paragraph" unicode="" horiz-adv-x="448"
|
1286 |
-
d="
|
1287 |
-
|
1288 |
<glyph glyph-name="sliders-h" unicode=""
|
1289 |
d="M496 64c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-336v-16c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v16h-80c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h80v16c0 8.7998 7.2002 16 16 16h32
|
1290 |
c8.7998 0 16 -7.2002 16 -16v-16h336zM496 224c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-80v-16c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v16h-336c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h336v16
|
@@ -2079,46 +2082,47 @@ l46.2998 -46.2998l-157.9 -157.9c-35 42.4004 -53.5 93.6006 -56.0996 145.5c63.9004
|
|
2079 |
d="M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM120 256c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32zM184 352c0 -17.7002 14.2998 -32 32 -32s32 14.2998 32 32
|
2080 |
s-14.2998 32 -32 32s-32 -14.2998 -32 -32zM232 208c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32z" />
|
2081 |
<glyph glyph-name="chess" unicode=""
|
2082 |
-
d="
|
2083 |
-
|
2084 |
-
|
2085 |
-
|
2086 |
-
|
2087 |
-
|
2088 |
-
|
2089 |
-
|
2090 |
-
" />
|
2091 |
<glyph glyph-name="chess-bishop" unicode="" horiz-adv-x="320"
|
2092 |
-
d="
|
2093 |
-
|
2094 |
-
|
2095 |
-
|
2096 |
<glyph glyph-name="chess-board" unicode=""
|
2097 |
-
d="
|
2098 |
-
|
2099 |
-
|
|
|
2100 |
<glyph glyph-name="chess-king" unicode="" horiz-adv-x="448"
|
2101 |
-
d="
|
2102 |
-
|
2103 |
-
|
2104 |
<glyph glyph-name="chess-knight" unicode="" horiz-adv-x="384"
|
2105 |
-
d="
|
2106 |
-
|
2107 |
-
|
2108 |
-
|
2109 |
<glyph glyph-name="chess-pawn" unicode="" horiz-adv-x="320"
|
2110 |
-
d="
|
2111 |
-
|
|
|
2112 |
<glyph glyph-name="chess-queen" unicode=""
|
2113 |
-
d="
|
2114 |
-
|
2115 |
-
|
2116 |
-
|
2117 |
-
|
2118 |
<glyph glyph-name="chess-rook" unicode="" horiz-adv-x="384"
|
2119 |
-
d="
|
2120 |
-
|
2121 |
-
|
2122 |
<glyph glyph-name="dumbbell" unicode="" horiz-adv-x="640"
|
2123 |
d="M104 352c13.2998 0 24 -10.7002 24 -24v-272c0 -13.2998 -10.7002 -24 -24 -24h-48c-13.2998 0 -24 10.7002 -24 24v104h-24c-4.40039 0 -8 3.59961 -8 8v48c0 4.40039 3.59961 8 8 8h24v104c0 13.2998 10.7002 24 24 24h48zM632 224c4.40039 0 8 -3.59961 8 -8v-48
|
2124 |
c0 -4.40039 -3.59961 -8 -8 -8h-24v-104c0 -13.2998 -10.7002 -24 -24 -24h-48c-13.2998 0 -24 10.7002 -24 24v272c0 13.2998 10.7002 24 24 24h48c13.2998 0 24 -10.7002 24 -24v-104h24zM456 416c13.2998 0 24 -10.7002 24 -24v-400c0 -13.2998 -10.7002 -24 -24 -24h-48
|
@@ -2465,9 +2469,10 @@ l190.601 45.9004c13 3.09961 26.7002 3.09961 39.7002 0l190.399 -46c18.2002 -4.400
|
|
2465 |
l-66 15.9004v-52.6006c7 -4.2002 12 -11.5 12 -20.2998c0 -8.40039 -4.59961 -15.4004 -11.0996 -19.7002l15.5996 -62.2998c1.7002 -6.90039 -2.09961 -14 -7.59961 -14h-41.8008c-5.5 0 -9.2998 7.09961 -7.59961 14l15.5996 62.2998
|
2466 |
c-6.5 4.2998 -11.0996 11.2998 -11.0996 19.7002c0 8.7998 5 16.0996 12 20.2998v58.4004z" />
|
2467 |
<glyph glyph-name="user-lock" unicode="" horiz-adv-x="640"
|
2468 |
-
d="
|
2469 |
-
|
2470 |
-
|
|
|
2471 |
<glyph glyph-name="user-minus" unicode="" horiz-adv-x="640"
|
2472 |
d="M624 240c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-192c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h192zM224 192c-70.7002 0 -128 57.2998 -128 128s57.2998 128 128 128s128 -57.2998 128 -128s-57.2998 -128 -128 -128z
|
2473 |
M313.6 160c74.2002 0 134.4 -60.2002 134.4 -134.4v-41.5996c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v41.5996c0 74.2002 60.2002 134.4 134.4 134.4h16.6992c22.3008 -10.2002 46.9004 -16 72.9004 -16s50.7002 5.7998 72.9004 16h16.6992z" />
|
@@ -2503,6 +2508,18 @@ c-15.8008 -17.0996 -28 -37.5 -36.3008 -59.2002c-1.89941 -0.0996094 -3.69922 -0.5
|
|
2503 |
c20.9004 -10 43.9004 -16 68.5 -16c3.30078 0 6.5 0.400391 9.80078 0.599609c2.7998 -3.09961 6 -5.89941 9.7998 -8.09961l7.89941 -4.59961c-0.0996094 -2.60059 -0.0996094 -5.2002 0 -7.80078c-0.899414 -0.599609 -36.5 -15.7998 -25.7998 -50.2998
|
2504 |
c7.90039 -25.7002 21.9004 -49.7998 40.2002 -69.5996c7.5 -8 18 -12.6006 28.9004 -12.6006c12.1992 0 19.2998 5 27.5 9.80078c2.19922 -1.30078 4.5 -2.7002 6.7998 -3.90039zM173.1 173.4c-40.2998 -22.1006 -68.8994 -62 -75.1992 -109.4h-65.9004
|
2505 |
c-17.7002 0 -32 14.2998 -32 32v32c0 35.2998 28.7002 64 64 64h64c17.5996 0 33.5 -7.09961 45.0996 -18.5996z" />
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2506 |
<glyph glyph-name="blender" unicode=""
|
2507 |
d="M416 64c35.3496 0 64 -28.6504 64 -64v-32c0 -17.6699 -14.3301 -32 -32 -32h-320c-17.6699 0 -32 14.3301 -32 32v32c0 35.3496 28.6504 64 64 64h256zM288 -32c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM328 384
|
2508 |
c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h157.82l-17.46 -64h-140.36c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h131.64l-17.46 -64h-114.18c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h105.46l-17.46 -64
|
@@ -2853,9 +2870,9 @@ c3.03027 3.04004 7.12012 4.7002 11.3203 4.7002c1.14941 0 2.2998 -0.129883 3.4394
|
|
2853 |
c2.93945 4.58984 8.01953 7.37012 13.4697 7.37012h0.00195312c4.82812 0 10.8574 -3.30176 13.458 -7.37012c2.5498 -3.97949 62.5303 -98.9102 62.5303 -217.7c0 -1.46973 0 -2.93945 -0.00976562 -4.39941c74.0391 60.1699 156.699 78.9102 160.579 79.7598
|
2854 |
c1.15039 0.259766 2.30078 0.379883 3.44043 0.379883c4.2002 0 8.29004 -1.66016 11.3203 -4.7002c3.85938 -3.87012 5.47949 -9.43945 4.2998 -14.7695c-0.879883 -3.96973 -20.6797 -90.5205 -84.9297 -165.641c44.3896 -8.91992 75.2197 -24.9893 76.7793 -25.8096z" />
|
2855 |
<glyph glyph-name="check-double" unicode=""
|
2856 |
-
d="
|
2857 |
-
c9.
|
2858 |
-
|
2859 |
<glyph glyph-name="cocktail" unicode="" horiz-adv-x="576"
|
2860 |
d="M296 -16c22.0898 0 40 -17.9102 40 -40c0 -4.41992 -3.58008 -8 -8 -8h-240c-4.41992 0 -8 3.58008 -8 8c0 22.0898 17.9102 40 40 40h56v125.22l-168.74 168.73c-15.5195 15.5195 -4.5293 42.0498 17.4199 42.0498h366.641c21.9492 0 32.9395 -26.5303 17.4199 -42.0498
|
2861 |
l-168.74 -168.73v-125.22h56zM432 448c79.5303 0 144 -64.4697 144 -144s-64.4697 -144 -144 -144c-27.4102 0 -52.7695 8.08008 -74.5801 21.3799l35.2598 35.2598c12.0303 -5.43945 25.2803 -8.63965 39.3203 -8.63965c52.9297 0 96 43.0596 96 96s-43.0703 96 -96 96
|
@@ -3409,13 +3426,11 @@ c-61.0498 30.75 -149.38 39.1396 -193.04 41.4297c-14.9004 0.770508 -26.4902 12.72
|
|
3409 |
c16.25 0.919922 29.7998 -11.46 29.8096 -27.0898v-222.82c0 -14.3301 -11.5898 -26.2803 -26.4902 -27.0596c-43.6494 -2.29004 -131.93 -10.6807 -192.97 -41.4004c-9.39941 -4.73047 -20.54 1.70996 -20.54 11.9004v245.789c0 4.6709 2.31055 9.12012 6.41016 11.6309
|
3410 |
c59.3203 36.3193 155.43 46.3096 203.78 49.0498z" />
|
3411 |
<glyph glyph-name="brain" unicode="" horiz-adv-x="576"
|
3412 |
-
d="M208 448c35.
|
3413 |
-
|
3414 |
-
c0
|
3415 |
-
|
3416 |
-
|
3417 |
-
c-24.21 6.16016 -42.2002 27.9502 -42.2002 54.04v74.0703c0 35.3496 28.6602 64 64 64c29.8701 0 54.7402 -20.5498 61.7998 -48.2197c0.75 0.0195312 1.4502 0.219727 2.2002 0.219727c35.3398 0 64 -28.6504 64 -64c0 -4.83984 -0.639648 -9.50977 -1.66016 -14.04
|
3418 |
-
c29.1201 -11.96 49.6602 -40.5303 49.6602 -73.96c0 -12.5801 -3.16992 -24.3203 -8.33984 -34.9102c24 -13.8096 40.3398 -39.4199 40.3398 -69.0898z" />
|
3419 |
<glyph glyph-name="car-alt" unicode="" horiz-adv-x="480"
|
3420 |
d="M438.66 235.67c24.1201 -9.16992 41.3398 -32.3301 41.3398 -59.6699v-48c0 -16.1299 -6.16016 -30.6797 -16 -41.9297v-54.0703c0 -17.6699 -14.3301 -32 -32 -32h-32c-17.6699 0 -32 14.3301 -32 32v32h-256v-32c0 -17.6699 -14.3301 -32 -32 -32h-32
|
3421 |
c-17.6699 0 -32 14.3301 -32 32v54.0703c-9.83984 11.2598 -16 25.8096 -16 41.9297v48c0 27.3398 17.2197 50.5 41.3398 59.6699l11.2402 28.0996l19.9297 49.8301c17.1104 42.7705 57.9307 70.4004 103.99 70.4004h127c46.0703 0 86.8799 -27.6299 103.99 -70.4004
|
@@ -3802,15 +3817,13 @@ c0 8.49023 5.38086 19.6865 12.0098 24.9902l128 102.4c11.6904 9.34961 28.29 9.349
|
|
3802 |
l-25.1201 -40h-38.9395c-3.70996 0 -5.98047 -4.08984 -4 -7.24023l19.1992 -30.5596l-19.1992 -30.5605c-1.98047 -3.14941 0.279297 -7.23926 4 -7.23926h38.9395l25.1201 -39.9805c1.84961 -2.9502 6.15039 -2.9502 8 0l25.1201 39.9902h38.9395
|
3803 |
c3.70996 0 5.98047 4.08984 4 7.24023z" />
|
3804 |
<glyph glyph-name="torah" unicode="" horiz-adv-x="640"
|
3805 |
-
d="
|
3806 |
-
|
3807 |
-
c-
|
3808 |
-
|
3809 |
-
|
3810 |
-
|
3811 |
-
|
3812 |
-
c0 -61.8242 -50.1758 -112 -112 -112h-336c52.9316 0.0605469 95.9395 43.0684 96 96v32h336zM276.86 324.56l-17.3906 -29.1699l-17.4697 29.1699h34.8604zM336 376.62l16.75 -28.0605h-33.5801zM304.88 219.44l-31.4697 52.5596l31.4102 52.5801h62.2998l31.4697 -52.5801
|
3813 |
-
l-31.4102 -52.5596h-62.2998z" />
|
3814 |
<glyph glyph-name="torii-gate" unicode=""
|
3815 |
d="M376.45 416c39.4961 0.00195312 100.223 14.3389 135.55 32v-96c0 -17.6699 -14.3301 -32 -32 -32h-32v-64h48c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-48v-240c0 -8.83984 -7.16016 -16 -16 -16h-32c-8.83984 0 -16 7.16016 -16 16v240
|
3816 |
h-256v-240c0 -8.83984 -7.16016 -16 -16 -16h-32c-8.83984 0 -16 7.16016 -16 16v240h-48c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h48v64h-32c-17.6699 0 -32 14.3301 -32 32v96c35.3271 -17.6611 96.0537 -31.998 135.55 -32h240.9zM128 320v-64h96
|
@@ -4322,16 +4335,16 @@ c20.2002 -20.5 32.7998 -46.5 36.6006 -74.7002c1.2998 -9.5 -6.5 -18 -16.3008 -18h
|
|
4322 |
c-1.19922 9.5 6.5 18 16.3008 18h16.3994c8.2002 0 15 -5.90039 16.1006 -13.7998c2.7998 -20.2002 12 -38.7998 26.3994 -53.5c20.2002 -20.5 32.7998 -46.5 36.6006 -74.7002c1.2998 -9.5 -6.5 -18 -16.3008 -18h-16.5c-8 0 -14.6992 5.7998 -16 13.5zM400 256
|
4323 |
c61.7998 0 112 -50.2002 112 -112s-50.2002 -112 -112 -112h-16c0 -53 -43 -96 -96 -96h-192c-53 0 -96 43 -96 96v192c0 17.7002 14.2998 32 32 32h368zM400 96c26.5 0 48 21.5 48 48s-21.5 48 -48 48h-16v-96h16z" />
|
4324 |
<glyph glyph-name="radiation" unicode="" horiz-adv-x="496"
|
4325 |
-
d="
|
4326 |
-
|
4327 |
-
|
4328 |
-
|
4329 |
<glyph glyph-name="radiation-alt" unicode="" horiz-adv-x="496"
|
4330 |
-
d="
|
4331 |
-
|
4332 |
-
|
4333 |
-
|
4334 |
-
|
4335 |
<glyph glyph-name="restroom" unicode="" horiz-adv-x="640"
|
4336 |
d="M128 320c-35.2998 0 -64 28.7002 -64 64s28.7002 64 64 64s64 -28.7002 64 -64s-28.7002 -64 -64 -64zM512 320c-35.2998 0 -64 28.7002 -64 64s28.7002 64 64 64s64 -28.7002 64 -64s-28.7002 -64 -64 -64zM639.3 93.5c3.7002 -15.0996 -8.2998 -29.5 -24.5 -29.5
|
4337 |
h-54.7998v-104c0 -13.2998 -10.7002 -24 -24 -24h-48c-13.2998 0 -24 10.7002 -24 24v104h-54.7998c-16.2002 0 -28.2002 14.4004 -24.7002 29.5l45.5996 185.8c3.30078 13.5 15.5 23 29.8008 24.2002c15 -9.7002 32.7998 -15.5 52 -15.5c19.1992 0 37 5.7998 52 15.5
|
@@ -4352,8 +4365,8 @@ c0.699219 -9.2998 -6.80078 -17.2998 -16.1006 -17.2998h-32.2002c-8.2998 0 -15.099
|
|
4352 |
<glyph glyph-name="sd-card" unicode="" horiz-adv-x="384"
|
4353 |
d="M320 448c35.2998 0 64 -28.7002 64 -64v-384c0 -35.2998 -28.7002 -64 -64 -64h-256c-35.2998 0 -64 28.7002 -64 64v320l128 128h192zM160 288v96h-48v-96h48zM240 288v96h-48v-96h48zM320 288v96h-48v-96h48z" />
|
4354 |
<glyph glyph-name="sim-card" unicode="" horiz-adv-x="384"
|
4355 |
-
d="
|
4356 |
-
|
4357 |
<glyph glyph-name="skating" unicode="" horiz-adv-x="448"
|
4358 |
d="M400 448c26.5 0 48 -21.5 48 -48s-21.5 -48 -48 -48s-48 21.5 -48 48s21.5 48 48 48zM400 0c8.7998 0 16 -7.2002 16 -16c0 -26.5 -21.5 -48 -48 -48h-96c-8.7998 0 -16 7.2002 -16 16s7.2002 16 16 16h96c8.7998 0 16 7.2002 16 16s7.2002 16 16 16zM117.8 -8.59961
|
4359 |
c6.2998 6.2998 16.5 6.19922 22.7002 0c6.2002 -6.2002 6.2002 -16.4004 0 -22.6006c-9.2998 -9.2998 -21.5996 -14 -33.9004 -14c-12.2998 0 -24.5996 4.60059 -34 14l-67.8994 67.9004c-6.2002 6.2002 -6.2002 16.3994 0 22.5996s16.3994 6.2002 22.5996 0
|
@@ -4523,5 +4536,114 @@ c0 -32.1318 -26.0781 -58.21 -58.21 -58.21v0h-331.58c-32.1318 0 -58.21 26.0781 -5
|
|
4523 |
<glyph glyph-name="wave-square" unicode="" horiz-adv-x="640"
|
4524 |
d="M476 -32h-152c-19.8721 0 -36 16.1279 -36 36v348h-96v-156c0 -19.8721 -16.1279 -36 -36 -36h-140c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h112v156c0 19.8721 16.1279 36 36 36h152c19.8721 0 36 -16.1279 36 -36v-348h96v156
|
4525 |
c0 19.8721 16.1279 36 36 36h140c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-112v-156c0 -19.8721 -16.1279 -36 -36 -36z" />
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4526 |
</font>
|
4527 |
</defs></svg>
|
1 |
<?xml version="1.0" standalone="no"?>
|
2 |
<!--
|
3 |
+
Font Awesome Free 5.9.0 by @fontawesome - https://fontawesome.com
|
4 |
License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
|
5 |
-->
|
6 |
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
7 |
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
|
8 |
<metadata>
|
9 |
+
Created by FontForge 20190112 at Tue Jun 4 15:16:44 2019
|
10 |
By Robert Madole
|
11 |
Copyright (c) Font Awesome
|
12 |
</metadata>
|
23 |
bbox="-0.983398 -64.9834 640.104 448.427"
|
24 |
underline-thickness="25"
|
25 |
underline-position="-51"
|
26 |
+
unicode-range="U+0020-F897"
|
27 |
/>
|
28 |
<missing-glyph />
|
29 |
<glyph glyph-name="glass-martini" unicode=""
|
192 |
d="M512 304v-288c0 -26.5 -21.5 -48 -48 -48h-416c-26.5 0 -48 21.5 -48 48v288c0 26.5 21.5 48 48 48h88l12.2998 32.9004c7 18.6992 24.9004 31.0996 44.9004 31.0996h125.5c20 0 37.8994 -12.4004 44.8994 -31.0996l12.4004 -32.9004h88c26.5 0 48 -21.5 48 -48zM376 160
|
193 |
c0 66.2002 -53.7998 120 -120 120s-120 -53.7998 -120 -120s53.7998 -120 120 -120s120 53.7998 120 120zM344 160c0 -48.5 -39.5 -88 -88 -88s-88 39.5 -88 88s39.5 88 88 88s88 -39.5 88 -88z" />
|
194 |
<glyph glyph-name="font" unicode="" horiz-adv-x="448"
|
195 |
+
d="M432 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-128c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h19.5801l-23.2998 64h-152.561l-23.2998 -64h19.5801c8.83203 0 16 -7.16797 16 -16v-32
|
196 |
+
c0 -8.83203 -7.16797 -16 -16 -16h-128c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h23.4102l130.71 362.31c4.07422 11.9736 17.6465 21.6904 30.2939 21.6904h0.00585938h47.1602h0.00585938c12.6475 0 26.2197 -9.7168 30.2939 -21.6904
|
197 |
+
l130.71 -362.31h23.4102zM176.85 176h94.3008l-47.1504 129.49z" />
|
198 |
<glyph glyph-name="bold" unicode="" horiz-adv-x="384"
|
199 |
+
d="M333.49 210c34.4395 -27.54 55.5693 -71.1504 50.8301 -119.6c-6.86035 -70.6504 -70.2002 -122.4 -141 -122.4h-209.32c-8.83203 0 -16 7.16797 -16 16v48c0 8.83203 7.16797 16 16 16h31.8701v288h-31.8701c-8.83203 0 -16 7.16797 -16 16v48
|
200 |
+
c0 8.83203 7.16797 16 16 16h199.42c74.5801 0 134.45 -64.4902 127.07 -140.79c-2.01367 -20.25 -14.1094 -49.4639 -27 -65.21zM145.66 336v-96h87.7598c26.4961 0 48 21.5039 48 48s-21.5039 48 -48 48h-87.7598zM233.42 48c30.9121 0 56 25.0879 56 56
|
201 |
+
s-25.0879 56 -56 56h-87.7598v-112h87.7598z" />
|
|
|
202 |
<glyph glyph-name="italic" unicode="" horiz-adv-x="320"
|
203 |
+
d="M320 400v-32c0 -8.83203 -7.16797 -16 -16 -16h-62.7598l-80 -320h46.7598c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-192c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h62.7598l80 320h-46.7598
|
204 |
+
c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h192c8.83203 0 16 -7.16797 16 -16z" />
|
|
|
205 |
<glyph glyph-name="text-height" unicode="" horiz-adv-x="576"
|
206 |
+
d="M304 416c8.83203 0 16 -7.16797 16 -16v-96c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32h-56v-304h40c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-160c-8.83203 0 -16 7.16797 -16 16v32
|
207 |
+
c0 8.83203 7.16797 16 16 16h40v304h-56v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v96c0 8.83203 7.16797 16 16 16h288zM560 80c15.6396 0 20.6396 -18 11.3096 -27.3096l-80 -80c-2.58594 -2.58496 -7.65332 -4.68262 -11.3096 -4.68262
|
208 |
+
s-8.72363 2.09766 -11.3096 4.68262l-80 80c-10.0107 10 -3 27.3096 11.3096 27.3096h48v224h-48c-15.6396 0 -20.6396 18 -11.3096 27.3096l80 80c2.58594 2.58496 7.65332 4.68262 11.3096 4.68262s8.72363 -2.09766 11.3096 -4.68262l80 -80
|
209 |
+
c10.0205 -10 3 -27.3096 -11.3096 -27.3096h-48v-224h48z" />
|
210 |
<glyph glyph-name="text-width" unicode="" horiz-adv-x="448"
|
211 |
+
d="M432 416c8.83203 0 16 -7.16797 16 -16v-80c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v16h-120v-112h24c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-128c-8.83203 0 -16 7.16797 -16 16v32
|
212 |
+
c0 8.83203 7.16797 16 16 16h24v112h-120v-16c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v80c0 8.83203 7.16797 16 16 16h416zM363.31 155.31l80 -80c2.58496 -2.58594 4.68262 -7.65332 4.68262 -11.3096s-2.09766 -8.72363 -4.68262 -11.3096
|
213 |
+
l-80 -80c-10 -10.0205 -27.3096 -3 -27.3096 11.3096v48h-224v-48c0 -15.6396 -18 -20.6396 -27.3096 -11.3096l-80 80c-2.58496 2.58594 -4.68262 7.65332 -4.68262 11.3096s2.09766 8.72363 4.68262 11.3096l80 80c10 10.0107 27.3096 3 27.3096 -11.3096v-48h224v48
|
214 |
+
c0 15.6396 18 20.6396 27.3096 11.3096z" />
|
215 |
<glyph glyph-name="align-left" unicode="" horiz-adv-x="448"
|
216 |
+
d="M12.8301 96c-7.07715 0 -12.8301 5.74316 -12.8301 12.8203v0.00976562v38.3398v0.00976562c0 7.07715 5.74316 12.8203 12.8203 12.8203h0.00976562h262.34h0.00976562c7.07715 0 12.8203 -5.74316 12.8203 -12.8203v-0.00976562v-38.3398v-0.00976562
|
217 |
+
c0 -7.07715 -5.74316 -12.8203 -12.8203 -12.8203h-0.00976562h-262.34zM12.8301 352c-7.07715 0 -12.8301 5.74316 -12.8301 12.8203v0.00976562v38.3398v0.00976562c0 7.07715 5.74316 12.8203 12.8203 12.8203h0.00976562h262.34h0.00976562
|
218 |
+
c7.07715 0 12.8203 -5.74316 12.8203 -12.8203v-0.00976562v-38.3398v-0.00976562c0 -7.07715 -5.74316 -12.8203 -12.8203 -12.8203h-0.00976562h-262.34zM432 288c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16
|
219 |
+
v32c0 8.83203 7.16797 16 16 16h416zM432 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416z" />
|
220 |
<glyph glyph-name="align-center" unicode="" horiz-adv-x="448"
|
221 |
+
d="M432 288c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416zM432 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16
|
222 |
+
v32c0 8.83203 7.16797 16 16 16h416zM108.1 352c-6.67871 0 -12.0996 5.4209 -12.0996 12.0996v39.8105c0 6.67383 5.41602 12.0898 12.0898 12.0898h0.00976562h231.811c6.67383 0 12.0898 -5.41602 12.0898 -12.0898v-39.8105v-0.00976562
|
223 |
+
c0 -6.67383 -5.41602 -12.0898 -12.0898 -12.0898v0h-231.811zM339.91 96h-231.811c-6.67871 0 -12.0996 5.4209 -12.0996 12.0996v39.8105c0 6.67383 5.41602 12.0898 12.0898 12.0898h0.00976562h231.811c6.67383 0 12.0898 -5.41602 12.0898 -12.0898v-39.8105
|
224 |
+
v-0.00976562c0 -6.67383 -5.41602 -12.0898 -12.0898 -12.0898v0z" />
|
225 |
<glyph glyph-name="align-right" unicode="" horiz-adv-x="448"
|
226 |
+
d="M16 224c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416zM432 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16
|
227 |
+
v32c0 8.83203 7.16797 16 16 16h416zM435.17 416c7.07715 0 12.8301 -5.74316 12.8301 -12.8203v-0.00976562v-38.3398v-0.00976562c0 -7.07715 -5.74316 -12.8203 -12.8203 -12.8203h-0.00976562h-262.34h-0.00976562c-7.07715 0 -12.8203 5.74316 -12.8203 12.8203
|
228 |
+
v0.00976562v38.3398v0.00976562c0 7.07715 5.74316 12.8203 12.8203 12.8203h0.00976562h262.34zM435.17 160c7.07715 0 12.8301 -5.74316 12.8301 -12.8203v-0.00976562v-38.3398v-0.00976562c0 -7.07715 -5.74316 -12.8203 -12.8203 -12.8203h-0.00976562h-262.34
|
229 |
+
h-0.00976562c-7.07715 0 -12.8203 5.74316 -12.8203 12.8203v0.00976562v38.3398v0.00976562c0 7.07715 5.74316 12.8203 12.8203 12.8203h0.00976562h262.34z" />
|
230 |
<glyph glyph-name="align-justify" unicode="" horiz-adv-x="448"
|
231 |
+
d="M432 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416zM432 160c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16
|
232 |
+
v32c0 8.83203 7.16797 16 16 16h416zM432 288c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416zM432 416c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16
|
233 |
+
h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416z" />
|
234 |
<glyph glyph-name="list" unicode=""
|
235 |
+
d="M80 80c8.83203 0 16 -7.16797 16 -16v-64c0 -8.83203 -7.16797 -16 -16 -16h-64c-8.83203 0 -16 7.16797 -16 16v64c0 8.83203 7.16797 16 16 16h64zM80 400c8.83203 0 16 -7.16797 16 -16v-64c0 -8.83203 -7.16797 -16 -16 -16h-64c-8.83203 0 -16 7.16797 -16 16v64
|
236 |
+
c0 8.83203 7.16797 16 16 16h64zM80 240c8.83203 0 16 -7.16797 16 -16v-64c0 -8.83203 -7.16797 -16 -16 -16h-64c-8.83203 0 -16 7.16797 -16 16v64c0 8.83203 7.16797 16 16 16h64zM496 64c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-320
|
237 |
+
c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h320zM496 384c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-320c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h320zM496 224c8.83203 0 16 -7.16797 16 -16v-32
|
238 |
+
c0 -8.83203 -7.16797 -16 -16 -16h-320c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h320z" />
|
239 |
<glyph glyph-name="outdent" unicode="" horiz-adv-x="448"
|
240 |
+
d="M100.69 84.71l-96 95.9805c-2.58496 2.58594 -4.68262 7.65332 -4.68262 11.3096s2.09766 8.72363 4.68262 11.3096l96 96c9.97949 10 27.3096 3.01074 27.3096 -11.3096v-191.98c0 -14.2393 -17.3096 -21.3096 -27.3096 -11.3096zM432 32c8.83203 0 16 -7.16797 16 -16
|
241 |
+
v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416zM435.17 160c7.07715 0 12.8301 -5.74316 12.8301 -12.8203v-0.00976562v-38.3398v-0.00976562c0 -7.07715 -5.74316 -12.8203 -12.8203 -12.8203h-0.00976562
|
242 |
+
h-230.34h-0.00976562c-7.07715 0 -12.8203 5.74316 -12.8203 12.8203v0.00976562v38.3398v0.00976562c0 7.07715 5.74316 12.8203 12.8203 12.8203h0.00976562h230.34zM435.17 288c7.07715 0 12.8301 -5.74316 12.8301 -12.8203v-0.00976562v-38.3398v-0.00976562
|
243 |
+
c0 -7.07715 -5.74316 -12.8203 -12.8203 -12.8203h-0.00976562h-230.34h-0.00976562c-7.07715 0 -12.8203 5.74316 -12.8203 12.8203v0.00976562v38.3398v0.00976562c0 7.07715 5.74316 12.8203 12.8203 12.8203h0.00976562h230.34zM432 416c8.83203 0 16 -7.16797 16 -16
|
244 |
+
v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416z" />
|
245 |
<glyph glyph-name="indent" unicode="" horiz-adv-x="448"
|
246 |
+
d="M27.3096 84.7002c-9.97949 -10 -27.3096 -3.00977 -27.3096 11.2998v192c0 14.2197 17.2695 21.3398 27.3096 11.3203l96 -96c2.58496 -2.58691 4.68262 -7.65332 4.68262 -11.3105c0 -3.65625 -2.09766 -8.72363 -4.68262 -11.3096zM432 32
|
247 |
+
c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416zM435.17 160c7.07715 0 12.8301 -5.74316 12.8301 -12.8203v-0.00976562v-38.3398v-0.00976562
|
248 |
+
c0 -7.07715 -5.74316 -12.8203 -12.8203 -12.8203h-0.00976562h-230.34h-0.00976562c-7.07715 0 -12.8203 5.74316 -12.8203 12.8203v0.00976562v38.3398v0.00976562c0 7.07715 5.74316 12.8203 12.8203 12.8203h0.00976562h230.34zM435.17 288
|
249 |
+
c7.07715 0 12.8301 -5.74316 12.8301 -12.8203v-0.00976562v-38.3398v-0.00976562c0 -7.07715 -5.74316 -12.8203 -12.8203 -12.8203h-0.00976562h-230.34h-0.00976562c-7.07715 0 -12.8203 5.74316 -12.8203 12.8203v0.00976562v38.3398v0.00976562
|
250 |
+
c0 7.07715 5.74316 12.8203 12.8203 12.8203h0.00976562h230.34zM432 416c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416z" />
|
251 |
<glyph glyph-name="video" unicode="" horiz-adv-x="576"
|
252 |
d="M336.2 384c26.3994 0 47.7998 -21.4004 47.7998 -47.7998v-288.4c0 -26.3994 -21.4004 -47.7998 -47.7998 -47.7998h-288.4c-26.3994 0 -47.7998 21.4004 -47.7998 47.7998v288.4c0 26.3994 21.4004 47.7998 47.7998 47.7998h288.4zM525.6 346.3
|
253 |
c21.3008 14.6006 50.4004 -0.399414 50.4004 -25.7998v-256.9c0 -25.5 -29.2002 -40.3994 -50.4004 -25.7998l-109.6 75.5v157.4z" />
|
572 |
c-16.5 50.1006 -5.58984 107.561 34.0498 147.2c37.0303 37.0195 89.2002 49.6699 136.58 37.9297c9.08984 -2.25977 12.2803 -13.54 5.66016 -20.1602l-74.3604 -74.3594l11.3105 -67.8799l67.8799 -11.3105l74.3604 74.3604
|
573 |
c6.58008 6.58008 17.8799 3.51953 20.1201 -5.50977zM64 -24c13.25 0 24 10.75 24 24c0 13.2598 -10.75 24 -24 24s-24 -10.7402 -24 -24c0 -13.25 10.75 -24 24 -24z" />
|
574 |
<glyph glyph-name="tasks" unicode=""
|
575 |
+
d="M139.61 412.5l17 -16.5c1.90234 -1.94531 3.44727 -5.7334 3.44727 -8.4541c0 -2.7627 -1.58496 -6.5918 -3.53809 -8.5459l-72.1992 -72.1904l-15.5898 -15.6191c-2.04297 -1.94238 -5.9873 -3.51758 -8.80566 -3.51758c-2.81738 0 -6.7627 1.5752 -8.80469 3.51758
|
576 |
+
l-47.5898 47.3994c-1.94824 1.94141 -3.5293 5.75 -3.5293 8.5c0 2.75098 1.58105 6.55859 3.5293 8.5l15.7002 15.7197c1.94141 1.94824 5.74902 3.53027 8.5 3.53027c2.75 0 6.55762 -1.58203 8.5 -3.53027l22.6992 -22.1191l63.6807 63.3096
|
577 |
+
c1.94141 1.94824 5.74902 3.5293 8.5 3.5293c2.75 0 6.55859 -1.58105 8.5 -3.5293zM139.61 253.31l16.9795 -17c1.89648 -1.93164 3.43457 -5.69727 3.43457 -8.4043c0 -2.74805 -1.5791 -6.55371 -3.52441 -8.49512l-72.2002 -72.2197l-15.7002 -15.6904
|
578 |
+
c-2.04102 -1.94141 -5.9834 -3.5166 -8.7998 -3.5166s-6.75879 1.5752 -8.7998 3.5166l-47.4697 47.5c-1.94824 1.94141 -3.5293 5.74902 -3.5293 8.5s1.58105 6.55859 3.5293 8.5l15.7002 15.6904c1.94141 1.94824 5.74902 3.5293 8.5 3.5293
|
579 |
+
c2.75 0 6.55762 -1.58105 8.5 -3.5293l22.6992 -22.1006l63.6807 63.7197c1.94141 1.94824 5.74902 3.53027 8.5 3.53027c2.75 0 6.55859 -1.58203 8.5 -3.53027zM64 80c26.4961 0 48 -21.5039 48 -48s-21.5039 -48 -48 -48c-26.4697 0 -48.5898 21.5 -48.5898 48
|
580 |
+
s22.0996 48 48.5898 48zM496 64c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-288c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h288zM496 384c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-288
|
581 |
+
c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h288zM496 224c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-288c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h288z" />
|
582 |
<glyph glyph-name="filter" unicode=""
|
583 |
d="M487.976 448c21.3623 0 32.0459 -25.8965 16.9717 -40.9707l-184.947 -184.971v-262.039c0 -19.5127 -21.9805 -30.71 -37.7627 -19.6611l-80 55.9795c-6.41602 4.49219 -10.2373 11.8311 -10.2373 19.6621v206.059l-184.942 184.971
|
584 |
c-15.1045 15.1045 -4.34766 40.9707 16.9707 40.9707h463.947z" />
|
634 |
d="M16 316c-8.83691 0 -16 7.16309 -16 16v40c0 8.83691 7.16309 16 16 16h416c8.83691 0 16 -7.16309 16 -16v-40c0 -8.83691 -7.16309 -16 -16 -16h-416zM16 156c-8.83691 0 -16 7.16309 -16 16v40c0 8.83691 7.16309 16 16 16h416c8.83691 0 16 -7.16309 16 -16v-40
|
635 |
c0 -8.83691 -7.16309 -16 -16 -16h-416zM16 -4c-8.83691 0 -16 7.16309 -16 16v40c0 8.83691 7.16309 16 16 16h416c8.83691 0 16 -7.16309 16 -16v-40c0 -8.83691 -7.16309 -16 -16 -16h-416z" />
|
636 |
<glyph glyph-name="list-ul" unicode=""
|
637 |
+
d="M48 400c26.4961 0 48 -21.5039 48 -48s-21.5039 -48 -48 -48s-48 21.5039 -48 48s21.5039 48 48 48zM48 240c26.4961 0 48 -21.5039 48 -48s-21.5039 -48 -48 -48s-48 21.5039 -48 48s21.5039 48 48 48zM48 80c26.4961 0 48 -21.5039 48 -48s-21.5039 -48 -48 -48
|
638 |
+
s-48 21.5039 -48 48s21.5039 48 48 48zM496 64c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-320c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h320zM496 384c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16
|
639 |
+
h-320c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h320zM496 224c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-320c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h320z" />
|
640 |
<glyph glyph-name="list-ol" unicode=""
|
641 |
+
d="M61.7695 47c19.6104 -5.12012 28.7002 -20.5 28.7305 -34.8799c0 -21.3701 -14.3398 -44.1201 -48.5 -44.1201c-16.6201 0 -29.29 4.75 -37 9.44043c-5.82031 4.21973 -6.34961 9.80957 -2.62988 15.9395l5.58984 9.31055c3.86035 6.61914 9.11035 7 15.5996 3.11914
|
642 |
+
c4.10352 -1.68652 11.0342 -3.08496 15.4707 -3.11914c10.1602 0 14.3594 3.5 14.3594 8.21973c0 6.64941 -5.60938 9.08984 -15.9395 9.08984h-4.73047c-5.95996 0 -9.25 2.12012 -12.25 7.87988l-1.0498 1.92969c-2.4502 4.75 -1.2002 9.81055 2.7998 14.8809l5.61035 7
|
643 |
+
c2.85742 3.55664 7.78516 9.07129 11 12.3096h-22.8301c-4.41602 0 -8 3.58398 -8 8v16c0 4.41602 3.58398 8 8 8h57c7.5 0 11.3398 -4 11.3398 -11.3496v-3.31055c0.0107422 -0.245117 0.0205078 -0.644531 0.0205078 -0.890625
|
644 |
+
c0 -4.20801 -2.28027 -10.166 -5.09082 -13.2988zM496 224c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-320c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h320zM496 384c8.83203 0 16 -7.16797 16 -16v-32
|
645 |
+
c0 -8.83203 -7.16797 -16 -16 -16h-320c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h320zM496 64c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-320c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h320zM16 288
|
646 |
+
c-4.41602 0 -8 3.58398 -8 8v16c0 4.41602 3.58398 8 8 8h16v64h-8c-4.4082 0.0078125 -7.98535 3.5918 -7.98535 8c0 1.04297 0.378906 2.64746 0.845703 3.58008l8 16c1.21777 2.43457 4.41699 4.41504 7.13965 4.41992h24c4.41602 0 8 -3.58398 8 -8v-88h16
|
647 |
+
c4.41602 0 8 -3.58398 8 -8v-16c0 -4.41602 -3.58398 -8 -8 -8h-64zM12.0898 128c-7.00977 0 -12.0898 4 -12.0898 11.4102v4c0 47.2803 51 56.3994 50.9697 69.1201c0 7.18945 -5.9502 8.75 -9.2793 8.75h-0.0546875c-3.02832 0 -7.24219 -1.7207 -9.40527 -3.83984
|
648 |
+
c-5.12012 -4.91016 -10.5107 -7 -16.1201 -2.44043l-8.58008 6.87988c-5.7998 4.53027 -7.16992 9.78027 -2.7998 15.3701c6.65918 8.75 19.0996 18.75 40.46 18.75c19.4697 0 44.4697 -10.5 44.4697 -39.5596c0 -37.7607 -45.0498 -46.1504 -48.3398 -56.4404h38.6797
|
649 |
+
c4.41602 0 8 -3.58398 8 -8v-16c0 -4.41602 -3.58398 -8 -8 -8h-67.9102z" />
|
|
|
|
|
650 |
<glyph glyph-name="strikethrough" unicode=""
|
651 |
+
d="M496 224c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-480c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h102.29c-11.6797 16.5303 -19.7803 35.4697 -21.7803 56.3604c-0.319336 3.29297 -0.579102 8.65137 -0.579102 11.96
|
652 |
+
c0 68.2158 55.3633 123.624 123.579 123.68h68h0.0117188c43.6865 0 94.9863 -31.7188 114.509 -70.7998l0.529297 -1c0.930664 -1.86328 1.68652 -5.06641 1.68652 -7.14844c0 -5.45898 -3.96289 -11.8711 -8.8457 -14.3115l-42.9404 -21.4707
|
653 |
+
c-1.86426 -0.931641 -5.06836 -1.6875 -7.15234 -1.6875c-5.45605 0 -11.8652 3.95996 -14.3076 8.83789c-7.61133 15.2246 -27.6025 27.5801 -44.624 27.5801h-0.0361328h-66.79c-24.0391 -0.000976562 -43.5488 -19.5107 -43.5488 -43.5498
|
654 |
+
c0 -17.749 13.7666 -36.3945 30.7295 -41.6201l87.1699 -26.8301h202.1zM315.76 128h94.3906c2.21191 -6.56152 4.60352 -17.4746 5.33984 -24.3604c0.319336 -3.29297 0.579102 -8.65137 0.579102 -11.96c0 -68.2158 -55.3633 -123.624 -123.579 -123.68h-68h-0.0117188
|
655 |
+
c-43.6865 0 -94.9863 31.7188 -114.509 70.7998l-0.529297 1c-0.930664 1.86328 -1.68652 5.06641 -1.68652 7.14844c0 5.45898 3.96289 11.8711 8.8457 14.3115l42.9404 21.4707c1.86426 0.931641 5.06836 1.6875 7.15234 1.6875
|
656 |
+
c5.45605 0 11.8652 -3.95996 14.3076 -8.83789c7.61133 -15.2246 27.6025 -27.5801 44.624 -27.5801h0.0361328h66.79c24.0176 0.0224609 43.5273 19.5322 43.5498 43.5498c-0.00976562 13.1572 -9.07715 29.4863 -20.2402 36.4502z" />
|
657 |
<glyph glyph-name="underline" unicode="" horiz-adv-x="448"
|
658 |
+
d="M32 384c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h144c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32v-160c0 -44.1602 35.8398 -80 80 -80s80 35.8398 80 80v160h-32c-8.83203 0 -16 7.16797 -16 16v32
|
659 |
+
c0 8.83203 7.16797 16 16 16h144c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32v-160c0 -88.2197 -71.7803 -160 -160 -160s-160 71.7803 -160 160v160h-32zM432 0c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416
|
660 |
+
c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416z" />
|
661 |
<glyph glyph-name="table" unicode=""
|
662 |
d="M464 416c26.5098 0 48 -21.4902 48 -48v-352c0 -26.5098 -21.4902 -48 -48 -48h-416c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48h416zM224 32v96h-160v-96h160zM224 192v96h-160v-96h160zM448 32v96h-160v-96h160zM448 192v96h-160v-96h160z" />
|
663 |
<glyph glyph-name="magic" unicode=""
|
896 |
d="M176 16c0 -44.1123 -35.8877 -80 -80 -80s-80 35.8877 -80 80s35.8877 80 80 80s80 -35.8877 80 -80zM25.2598 422.801c-0.68457 13.709 10.2441 25.1992 23.9707 25.1992h93.5391c13.7266 0 24.6553 -11.4902 23.9707 -25.1992l-13.6006 -272
|
897 |
c-0.638672 -12.7725 -11.1807 -22.8008 -23.9697 -22.8008h-66.3398c-12.7891 0 -23.3311 10.0283 -23.9697 22.8008z" />
|
898 |
<glyph glyph-name="superscript" unicode=""
|
899 |
+
d="M496 288c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-96c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h16v96h-16c-8.82422 0.0078125 -15.9863 7.17578 -15.9863 16c0 2.08984 0.759766 5.30176 1.69629 7.16992l16 32
|
900 |
+
c2.44141 4.87012 8.84277 8.8252 14.29 8.83008h48c8.83203 0 16 -7.16797 16 -16v-144h16zM336 384c8.83203 0 16 -7.16797 16 -16v-48c0 -8.83203 -7.16797 -16 -16 -16h-33.4805l-77.8096 -112l77.8096 -112h33.4805c8.83203 0 16 -7.16797 16 -16v-48
|
901 |
+
c0 -8.83203 -7.16797 -16 -16 -16h-67c-4.58984 0.0224609 -10.4404 3.10059 -13.0596 6.87012l-79.9004 115l-79.9004 -115c-2.63477 -3.79199 -8.52148 -6.87012 -13.1387 -6.87012h-0.000976562h-67c-8.83203 0 -16 7.16797 -16 16v48c0 8.83203 7.16797 16 16 16
|
902 |
+
h33.4805l77.8096 112l-77.8096 112h-33.4805c-8.83203 0 -16 7.16797 -16 16v48c0 8.83203 7.16797 16 16 16h67c4.58984 -0.0224609 10.4404 -3.10059 13.0596 -6.87012l79.9004 -115l79.9004 115c2.63477 3.79199 8.52148 6.87012 13.1387 6.87012h0.000976562h67z" />
|
|
|
|
|
903 |
<glyph glyph-name="subscript" unicode=""
|
904 |
+
d="M496 0c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-96c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h16v96h-16c-8.82422 0.0078125 -15.9863 7.17578 -15.9863 16c0 2.08984 0.759766 5.30176 1.69629 7.16992l16 32
|
905 |
+
c2.44141 4.87012 8.84277 8.8252 14.29 8.83008h48c8.83203 0 16 -7.16797 16 -16v-144h16zM336 384c8.83203 0 16 -7.16797 16 -16v-48c0 -8.83203 -7.16797 -16 -16 -16h-33.4805l-77.8096 -112l77.8096 -112h33.4805c8.83203 0 16 -7.16797 16 -16v-48
|
906 |
+
c0 -8.83203 -7.16797 -16 -16 -16h-67c-4.58984 0.0224609 -10.4404 3.10059 -13.0596 6.87012l-79.9004 115l-79.9004 -115c-2.63477 -3.79199 -8.52148 -6.87012 -13.1387 -6.87012h-0.000976562h-67c-8.83203 0 -16 7.16797 -16 16v48c0 8.83203 7.16797 16 16 16
|
907 |
+
h33.4805l77.8096 112l-77.8096 112h-33.4805c-8.83203 0 -16 7.16797 -16 16v48c0 8.83203 7.16797 16 16 16h67c4.58984 -0.0224609 10.4404 -3.10059 13.0596 -6.87012l79.9004 -115l79.9004 115c2.63477 3.79199 8.52148 6.87012 13.1387 6.87012h0.000976562h67z" />
|
|
|
|
|
908 |
<glyph glyph-name="eraser" unicode=""
|
909 |
d="M497.941 174.059l-142.059 -142.059h144.117c6.62695 0 12 -5.37305 12 -12v-40c0 -6.62695 -5.37305 -12 -12 -12h-356c-10.9756 0 -26.1816 6.29883 -33.9424 14.0586l-96 96c-18.7441 18.7451 -18.7441 49.1377 0 67.8828l256 256
|
910 |
c18.7471 18.7451 49.1387 18.7441 67.8838 0l160 -160c18.7441 -18.7451 18.7441 -49.1377 0 -67.8828zM195.314 236.686l-124.687 -124.686l80 -80h114.745l67.3135 67.3135z" />
|
1045 |
c0 -6.59961 5.40039 -12 12 -12h168c6.59961 0 12 5.40039 12 12zM288 140v8c0 6.59961 -5.40039 12 -12 12h-168c-6.59961 0 -12 -5.40039 -12 -12v-8c0 -6.59961 5.40039 -12 12 -12h168c6.59961 0 12 5.40039 12 12zM288 212c0 6.59961 -5.40039 12 -12 12h-168
|
1046 |
c-6.59961 0 -12 -5.40039 -12 -12v-8c0 -6.59961 5.40039 -12 12 -12h168c6.59961 0 12 5.40039 12 12v8zM384 326.1v-6.09961h-128v128h6.09961c6.40039 0 12.5 -2.5 17 -7l97.9004 -98c4.5 -4.5 7 -10.5996 7 -16.9004z" />
|
1047 |
<glyph glyph-name="sort-alpha-down" unicode="" horiz-adv-x="448"
|
1048 |
+
d="M176 96c14.2197 0 21.3496 -17.2598 11.3301 -27.3096l-80 -96c-2.58691 -2.58496 -7.65332 -4.68262 -11.3105 -4.68262c-3.65625 0 -8.72266 2.09766 -11.3096 4.68262l-80 96c-10.0703 10.0693 -2.90039 27.3096 11.29 27.3096h48v304c0 8.83203 7.16797 16 16 16h32
|
1049 |
+
c8.83203 0 16 -7.16797 16 -16v-304h48zM416 160c8.83203 0 16 -7.16797 16 -16v-17.6299v-0.00292969c0 -7.93262 -4.81152 -18.6475 -10.7402 -23.917l-61.2598 -70.4502h56c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-128
|
1050 |
+
c-8.83203 0 -16 7.16797 -16 16v17.6299v0.00292969c0 7.93262 4.81152 18.6475 10.7402 23.917l61.2598 70.4502h-56c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h128zM447.06 245.38c0.514648 -1.44043 0.931641 -3.85059 0.931641 -5.37988
|
1051 |
+
c0 -8.82715 -7.16406 -15.9951 -15.9912 -16h-24.8398h-0.0449219c-6.42773 0 -13.249 4.96387 -15.2256 11.0801l-4.40918 12.9199h-71l-4.4209 -12.9199c-1.97559 -6.11621 -8.79688 -11.0801 -15.2246 -11.0801h-0.00488281h-24.8301
|
1052 |
+
c-8.82715 0.00488281 -15.9912 7.17285 -15.9912 16c0 1.5293 0.416992 3.93945 0.931641 5.37988l59.2695 160c2.09277 5.8623 8.84375 10.6201 15.0684 10.6201h0.00195312h41.4395h0.00195312c6.22461 0 12.9756 -4.75781 15.0684 -10.6201zM335.61 304h32.7793
|
1053 |
+
l-16.3896 48z" />
|
1054 |
<glyph glyph-name="sort-alpha-up" unicode="" horiz-adv-x="448"
|
1055 |
+
d="M16 288c-14.2197 0 -21.3496 17.2598 -11.3096 27.3096l80 96c2.58594 2.58496 7.65332 4.68262 11.3096 4.68262s8.72363 -2.09766 11.3096 -4.68262l80 -96c10.0703 -10.0693 2.90039 -27.3096 -11.3096 -27.3096h-48v-304c0 -8.83203 -7.16797 -16 -16 -16h-32
|
1056 |
+
c-8.83203 0 -16 7.16797 -16 16v304h-48zM416 160c8.83203 0 16 -7.16797 16 -16v-17.6299v-0.00292969c0 -7.93262 -4.81152 -18.6475 -10.7402 -23.917l-61.2598 -70.4502h56c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-128
|
1057 |
+
c-8.83203 0 -16 7.16797 -16 16v17.6299v0.00292969c0 7.93262 4.81152 18.6475 10.7402 23.917l61.2598 70.4502h-56c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h128zM447.06 245.38c0.514648 -1.44043 0.931641 -3.85059 0.931641 -5.37988
|
1058 |
+
c0 -8.82715 -7.16406 -15.9951 -15.9912 -16h-24.8398h-0.0449219c-6.42773 0 -13.249 4.96387 -15.2256 11.0801l-4.40918 12.9199h-71l-4.4209 -12.9199c-1.97559 -6.11621 -8.79688 -11.0801 -15.2246 -11.0801h-0.00488281h-24.8301
|
1059 |
+
c-8.82715 0.00488281 -15.9912 7.17285 -15.9912 16c0 1.5293 0.416992 3.93945 0.931641 5.37988l59.2695 160c2.09277 5.8623 8.84375 10.6201 15.0684 10.6201h0.00195312h41.4395h0.00195312c6.22461 0 12.9756 -4.75781 15.0684 -10.6201zM335.61 304h32.7793
|
1060 |
+
l-16.3896 48z" />
|
1061 |
<glyph glyph-name="sort-amount-down" unicode=""
|
1062 |
+
d="M304 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-64c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h64zM176 96c14.2197 0 21.3496 -17.2598 11.3301 -27.3096l-80 -96
|
1063 |
+
c-2.58691 -2.58496 -7.65332 -4.68262 -11.3105 -4.68262c-3.65625 0 -8.72266 2.09766 -11.3096 4.68262l-80 96c-10.0801 10.0693 -2.90039 27.3096 11.29 27.3096h48v304c0 8.83203 7.16797 16 16 16h32c8.83203 0 16 -7.16797 16 -16v-304h48zM432 288
|
1064 |
+
c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-192c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h192zM368 160c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-128c-8.83203 0 -16 7.16797 -16 16v32
|
1065 |
+
c0 8.83203 7.16797 16 16 16h128zM496 416c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-256c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h256z" />
|
1066 |
<glyph glyph-name="sort-amount-up" unicode=""
|
1067 |
+
d="M304 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-64c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h64zM16 288c-14.2305 0 -21.3496 17.2598 -11.3096 27.3096l80 96c2.58594 2.58496 7.65332 4.68262 11.3096 4.68262
|
1068 |
+
s8.72363 -2.09766 11.3096 -4.68262l80 -96c10.0703 -10.0693 2.90039 -27.3096 -11.3096 -27.3096h-48v-304c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v304h-48zM432 288c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16
|
1069 |
+
h-192c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h192zM368 160c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-128c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h128zM496 416c8.83203 0 16 -7.16797 16 -16v-32
|
1070 |
+
c0 -8.83203 -7.16797 -16 -16 -16h-256c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h256z" />
|
1071 |
<glyph glyph-name="sort-numeric-down" unicode="" horiz-adv-x="448"
|
1072 |
+
d="M304 352c-8.82422 0.0078125 -15.9863 7.17578 -15.9863 16c0 2.08984 0.759766 5.30176 1.69629 7.16992l16 32c2.44141 4.87012 8.84277 8.8252 14.29 8.83008h48c8.83203 0 16 -7.16797 16 -16v-112h16c8.83203 0 16 -7.16797 16 -16v-32
|
1073 |
+
c0 -8.83203 -7.16797 -16 -16 -16h-96c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h16v64h-16zM330.15 189.09c53.4502 14.25 101.85 -25.8799 101.869 -77.0898v-10.7695c0 -70.3906 -28.25 -107.24 -86.25 -132
|
1074 |
+
c-8.36914 -3.58008 -18.0293 1.2793 -20.8994 9.90918l-9.90039 20c-2.62012 7.87012 0.610352 16.9404 8.18066 20.3408c6.2793 2.71387 15.6201 8.49805 20.8496 12.9092c-47.6396 4.76074 -83.0996 51.4805 -68.8496 102.53c6.80762 23.4512 31.4473 47.7197 55 54.1699z
|
1075 |
+
M352 92c11.04 0 20 8.95996 20 20s-8.95996 20 -20 20s-20 -8.95996 -20 -20s8.95996 -20 20 -20zM176 96c14.2197 0 21.3496 -17.2598 11.3301 -27.3096l-80 -96c-2.58691 -2.58496 -7.65332 -4.68262 -11.3105 -4.68262c-3.65625 0 -8.72266 2.09766 -11.3096 4.68262
|
1076 |
+
l-80 96c-10.0703 10.0693 -2.90039 27.3096 11.29 27.3096h48v304c0 8.83203 7.16797 16 16 16h32c8.83203 0 16 -7.16797 16 -16v-304h48z" />
|
|
|
1077 |
<glyph glyph-name="sort-numeric-up" unicode="" horiz-adv-x="448"
|
1078 |
+
d="M330.17 189.09c53.4502 14.25 101.83 -25.8799 101.85 -77.0898v-10.7695c0 -70.3906 -28.25 -107.24 -86.25 -132c-8.36914 -3.58008 -18.0293 1.2793 -20.8994 9.90918l-9.90039 20c-2.62012 7.87012 0.610352 16.9404 8.18066 20.3408
|
1079 |
+
c6.2793 2.71387 15.6201 8.49805 20.8496 12.9092c-47.6396 4.76074 -83.0996 51.4805 -68.8301 102.53c6.80762 23.4512 31.4482 47.7197 55 54.1699zM352 92c11.04 0 20 8.95996 20 20s-8.95996 20 -20 20s-20 -8.95996 -20 -20s8.95996 -20 20 -20zM304 352
|
1080 |
+
c-8.82422 0.0078125 -15.9863 7.17578 -15.9863 16c0 2.08984 0.759766 5.30176 1.69629 7.16992l16 32c2.44141 4.87012 8.84277 8.8252 14.29 8.83008h48c8.83203 0 16 -7.16797 16 -16v-112h16c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-96
|
1081 |
+
c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h16v64h-16zM107.31 411.31l80 -96c10.0703 -10.0693 2.90039 -27.3096 -11.3096 -27.3096h-48v-304c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v304h-48
|
1082 |
+
c-14.2197 0 -21.3496 17.2598 -11.3096 27.3096l80 96c2.58594 2.58496 7.65332 4.68262 11.3096 4.68262s8.72363 -2.09766 11.3096 -4.68262z" />
|
|
|
1083 |
<glyph glyph-name="thumbs-up" unicode=""
|
1084 |
d="M104 224c13.2549 0 24 -10.7451 24 -24v-240c0 -13.2549 -10.7451 -24 -24 -24h-80c-13.2549 0 -24 10.7451 -24 24v240c0 13.2549 10.7451 24 24 24h80zM64 -24c13.2549 0 24 10.7451 24 24s-10.7451 24 -24 24s-24 -10.7451 -24 -24s10.7451 -24 24 -24zM384 366.548
|
1085 |
c0 -42.416 -25.9697 -66.208 -33.2773 -94.5479h101.724c33.3965 0 59.3965 -27.7461 59.5527 -58.0977c0.0839844 -17.9385 -7.5459 -37.249 -19.4395 -49.1973l-0.109375 -0.110352c9.83594 -23.3369 8.23633 -56.0371 -9.30859 -79.4688
|
1282 |
c-8.83691 0 -16 7.16309 -16 16v145.373c0 14.2539 17.2344 21.3926 27.3145 11.3135l49.3711 -49.3711c44.5234 42.5488 104.866 68.6846 171.314 68.6846c136.81 0 247.747 -110.78 248 -247.531zM323.088 113.685c-8.1377 -10.4629 -23.2158 -12.3467 -33.6787 -4.20996
|
1283 |
l-65.4092 50.874v135.651c0 13.2549 10.7451 24 24 24h16c13.2549 0 24 -10.7451 24 -24v-104.349l40.7012 -31.6572c10.4629 -8.13672 12.3477 -23.2158 4.20996 -33.6787z" />
|
1284 |
<glyph glyph-name="heading" unicode=""
|
1285 |
+
d="M448 352v-320h32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-160c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32v128h-192v-128h32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-160
|
1286 |
+
c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32v320h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h160c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32v-128h192v128h-32c-8.83203 0 -16 7.16797 -16 16v32
|
1287 |
+
c0 8.83203 7.16797 16 16 16h160c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32z" />
|
1288 |
<glyph glyph-name="paragraph" unicode="" horiz-adv-x="448"
|
1289 |
+
d="M448 400v-32c0 -8.83203 -7.16797 -16 -16 -16h-48v-368c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v368h-32v-368c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v112h-32c-88.3203 0 -160 71.6797 -160 160
|
1290 |
+
s71.6797 160 160 160h240c8.83203 0 16 -7.16797 16 -16z" />
|
1291 |
<glyph glyph-name="sliders-h" unicode=""
|
1292 |
d="M496 64c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-336v-16c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v16h-80c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h80v16c0 8.7998 7.2002 16 16 16h32
|
1293 |
c8.7998 0 16 -7.2002 16 -16v-16h336zM496 224c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-80v-16c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v16h-336c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h336v16
|
2082 |
d="M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM120 256c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32zM184 352c0 -17.7002 14.2998 -32 32 -32s32 14.2998 32 32
|
2083 |
s-14.2998 32 -32 32s-32 -14.2998 -32 -32zM232 208c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32z" />
|
2084 |
<glyph glyph-name="chess" unicode=""
|
2085 |
+
d="M74 240l-33.9102 90.3799c-0.5625 1.5 -1.01953 4.01758 -1.01953 5.62012c0 8.83203 7.16797 16 16 16h0.0195312h56.9102v32h-24c-4.41602 0 -8 3.58398 -8 8v16c0 4.41602 3.58398 8 8 8h24v24c0 4.41602 3.58398 8 8 8h16c4.41602 0 8 -3.58398 8 -8v-24h24
|
2086 |
+
c4.41602 0 8 -3.58398 8 -8v-16c0 -4.41602 -3.58398 -8 -8 -8h-24v-32h56.8896h0.0195312c8.83203 0 16 -7.16797 16 -16c0 -1.60254 -0.456055 -4.12012 -1.01953 -5.62012l-33.8896 -90.3799h10c8.83203 0 16 -7.16797 16 -16v-16c0 -8.83203 -7.16797 -16 -16 -16
|
2087 |
+
h-15.9404c0.116211 -35.8613 7.25684 -93.2051 15.9404 -128h-128c8.68359 34.7949 15.8242 92.1387 15.9404 128h-15.9404c-8.83203 0 -16 7.16797 -16 16v16c0 8.83203 7.16797 16 16 16h10zM247.16 -11.5801c4.87988 -2.44141 8.83984 -8.85156 8.83984 -14.3086
|
2088 |
+
v-0.000976562v-22.1104c0 -8.83203 -7.16797 -16 -16 -16h-224c-8.83203 0 -16 7.16797 -16 16v22.1104c0.000976562 5.45898 3.96582 11.8701 8.84961 14.3096l23.1504 11.5801v16c0 8.83203 7.16797 16 16 16h160c8.83203 0 16 -7.16797 16 -16v-16zM339.93 146.2
|
2089 |
+
l-24.5693 20.7998c-6.25684 5.28125 -11.3467 16.2119 -11.3604 24.4004v58.5996c0 3.31152 2.68848 6 6 6h26.3896c3.3125 0 6 -2.68848 6 -6v-26h24.71v26c0 3.31152 2.68848 6 6 6h53.8105c3.31152 0 6 -2.68848 6 -6v-26h24.71v26c0 3.31152 2.6875 6 6 6h26.3799
|
2090 |
+
c3.31152 0 6 -2.68848 6 -6v-58.54v-0.03125c0 -8.19238 -5.07617 -19.1367 -11.3301 -24.4287l-24.5996 -20.79l3.29004 -82.21h-126.721zM384 144v-32h32v32c0 8.83203 -7.16797 16 -16 16s-16 -7.16797 -16 -16zM503.16 -11.5801
|
2091 |
+
c4.87988 -2.44141 8.83984 -8.85156 8.83984 -14.3086v-0.000976562v-22.1104c0 -8.83203 -7.16797 -16 -16 -16h-192c-8.83203 0 -16 7.16797 -16 16v22.1104c0.000976562 5.45898 3.96582 11.8701 8.84961 14.3096l23.1504 11.5801v16c0 8.83203 7.16797 16 16 16h128
|
2092 |
+
c8.83203 0 16 -7.16797 16 -16v-16z" />
|
|
|
2093 |
<glyph glyph-name="chess-bishop" unicode="" horiz-adv-x="320"
|
2094 |
+
d="M8 160.12c0 73.3799 59.8096 181.08 112.6 225.37c-14 3.41992 -24.5996 15.5098 -24.5996 30.5098c0 17.6641 14.3359 32 32 32h64c17.6641 0 32 -14.3359 32 -32c0 -15.0498 -10.5996 -27.0898 -24.5996 -30.5098c24.3994 -20.4902 50.0693 -54.6807 70.8691 -92.5898
|
2095 |
+
l-107.89 -107.931c-1.29199 -1.29297 -2.34082 -3.82617 -2.34082 -5.6543c0 -1.8291 1.04883 -4.3623 2.34082 -5.65527l11.3105 -11.3105c1.29297 -1.29199 3.82617 -2.34082 5.6543 -2.34082s4.3623 1.04883 5.65527 2.34082l100.31 100.33
|
2096 |
+
c15.96 -35.46 26.6904 -71.9492 26.6904 -102.56c0 -51.6006 -22.1396 -73.8301 -56 -84.6006v-43.5195h-192v43.5195c-33.8604 10.7705 -56 32.9609 -56 84.6006zM304 0c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-288
|
2097 |
+
c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h288z" />
|
2098 |
<glyph glyph-name="chess-board" unicode=""
|
2099 |
+
d="M255.9 447.8v-64h-64v64h64zM0 383.83h64v-64h-64v64zM128 447.8v-64h-64v64h64zM192 191.9h64v-64h-64v64zM0 255.88h64v-64h-64v64zM383.85 447.8v-64h-64v64h64zM511.85 447.8v-64h-64v64h64zM128 191.9v-64h-64v64h64zM511.8 0h-64v64h64v-64zM511.8 128h-64v64h64
|
2100 |
+
v-64zM383.85 -64v64h64v-64h-64zM511.85 255.88h-64v64h64v-64zM128 -64v64h64v-64h-64zM0 -64v64h64v-64h-64zM255.9 -64v64h64v-64h-64zM0 127.93h64v-64h-64v64zM319.88 319.85h-64v64h64v-64zM255.88 191.85v64h64v-64h-64zM191.88 63.8496h64v-64h-64v64z
|
2101 |
+
M319.88 127.85v64h64v-64h-64zM319.88 255.8v64h64v-64h-64zM319.88 63.8701h64v-64h-64v64zM64 63.9502h64v-64h-64v64zM192 319.85h-64v64h64v-64zM383.92 63.9502v64h64v-64h-64zM255.92 255.88h-64v64h64v-64zM383.92 383.83h64v-64h-64v64zM255.92 127.93h64v-64h-64
|
2102 |
+
v64zM191.92 255.88l0.0800781 -64h-64v64h63.9199zM383.84 191.88v64h64v-64h-64zM128 319.85v-64h-64v64h64zM128 127.93h64v-64h-64v64z" />
|
2103 |
<glyph glyph-name="chess-king" unicode="" horiz-adv-x="448"
|
2104 |
+
d="M400 0c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-352c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h352zM416 288c17.6504 -0.0136719 31.9756 -14.3496 31.9756 -32c0 -2.69434 -0.652344 -6.96777 -1.45605 -9.54004
|
2105 |
+
l-73.0791 -214.46h-298.881l-73.0791 214.46c-0.803711 2.57227 -1.45605 6.8457 -1.45605 9.54004c0 17.6504 14.3252 31.9863 31.9756 32h160v48h-40c-4.41602 0 -8 3.58398 -8 8v48c0 4.41602 3.58398 8 8 8h40v40c0 4.41602 3.58398 8 8 8h48c4.41602 0 8 -3.58398 8 -8
|
2106 |
+
v-40h40c4.41602 0 8 -3.58398 8 -8v-48c0 -4.41602 -3.58398 -8 -8 -8h-40v-48h160z" />
|
2107 |
<glyph glyph-name="chess-knight" unicode="" horiz-adv-x="384"
|
2108 |
+
d="M19 175.53c-10.4883 4.66211 -19 17.7627 -19 29.2402v0.0195312v137.21v0.0585938c0 5.47461 3.13574 13.0635 7 16.9414l9 9l-14.21 28.4199c-0.988281 1.97266 -1.79004 5.36328 -1.79004 7.56934v0.0107422c0 6.62402 5.37598 12 12 12h147.94
|
2109 |
+
c106 0 191.92 -86 191.92 -192v-192h-319.86v14.5195v0.0224609c0 27.2783 19.7969 59.3271 44.1904 71.5381l57.2197 28.6504c14.6445 7.32324 26.5303 26.5566 26.5303 42.9297v0.00976562v50.3301l-22.1201 -11.0801
|
2110 |
+
c-5.45117 -2.72559 -11.0732 -9.7373 -12.5508 -15.6504l-9.21973 -30.6494c-2.4502 -8.15332 -10.8545 -17.3379 -18.7598 -20.5l-12.7803 -5.12012c-3.1582 -1.2627 -8.48145 -2.28809 -11.8828 -2.28809c-3.74902 0 -9.57129 1.23535 -12.9971 2.75781zM52 320
|
2111 |
+
c-11.04 0 -20 -8.95996 -20 -20s8.95996 -20 20 -20s20 8.95996 20 20s-8.95996 20 -20 20zM368 0c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-352c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h352z" />
|
2112 |
<glyph glyph-name="chess-pawn" unicode="" horiz-adv-x="320"
|
2113 |
+
d="M105.1 224c-29.3896 18.3799 -49.0996 50.7803 -49.0996 88c0 57.4082 46.5918 104 104 104s104 -46.5918 104 -104c0 -37.2197 -19.71 -69.6201 -49.0996 -88h25.0996c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-16v-5.49023
|
2114 |
+
c0 -44 4.11035 -86.5996 24 -122.51h-176c19.8604 35.9102 24 78.5098 24 122.51v5.49023h-16c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h25.0996zM304 0c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-288
|
2115 |
+
c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h288z" />
|
2116 |
<glyph glyph-name="chess-queen" unicode=""
|
2117 |
+
d="M256 336c-30.9121 0 -56 25.0879 -56 56s25.0879 56 56 56s56 -25.0879 56 -56s-25.0879 -56 -56 -56zM432 0c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-352c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h352zM504.87 263.84
|
2118 |
+
c3.93457 -2.62109 7.12891 -8.58691 7.12891 -13.3154c0 -2.08496 -0.756836 -5.29004 -1.68945 -7.1543l-102.55 -211.37h-303.52l-102.55 211.33c-0.932617 1.86426 -1.68945 5.06934 -1.68945 7.1543c0 4.72852 3.19434 10.6943 7.12891 13.3154l28.5703 16
|
2119 |
+
c7.35938 4.91016 16.8096 2.5498 22.0898 -4.54004c7.86035 -10.6357 24.9736 -19.2676 38.1992 -19.2676c0.922852 0 2.41992 0.0527344 3.34082 0.118164c25.6699 1.73926 44.6699 24.7998 44.6699 50.4893c0 7.39746 6.00293 13.4004 13.4004 13.4004v0h38.7695
|
2120 |
+
c6.04004 0 11.6104 -3.99023 12.8604 -9.91016c4.42969 -21.0361 25.4717 -38.1094 46.9697 -38.1094s42.54 17.0732 46.9697 38.1094c1.25 5.91016 6.86035 9.91016 12.8604 9.91016h38.7695c7.39746 0 13.4004 -6.00293 13.4004 -13.4004
|
2121 |
+
c0 -23.5293 15.7002 -45.46 38.8398 -49.75c2.48926 -0.484375 6.56738 -0.878906 9.10352 -0.878906c13.166 0 30.2471 8.56152 38.127 19.1094c5.37988 7.13965 14.8496 9.67969 22.29 4.67969z" />
|
2122 |
<glyph glyph-name="chess-rook" unicode="" horiz-adv-x="384"
|
2123 |
+
d="M368 416c8.83203 0 16 -7.16797 16 -16v-176l-64 -32c0 -47.7197 1.54004 -95 13.21 -160h-282.42c11.6699 65 13.21 111.67 13.21 160l-64 32v176c0 8.83203 7.16797 16 16 16h56.0996c8.83203 0 16 -7.16797 16 -16v-48h47.9004v48c0 8.83203 7.16797 16 16 16h80
|
2124 |
+
c8.83203 0 16 -7.16797 16 -16v-48h48v48c0 8.83203 7.16797 16 16 16h56zM224 128v64c0 17.6641 -14.3359 32 -32 32s-32 -14.3359 -32 -32v-64h64zM368 0c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-352c-8.83203 0 -16 7.16797 -16 16v32
|
2125 |
+
c0 8.83203 7.16797 16 16 16h352z" />
|
2126 |
<glyph glyph-name="dumbbell" unicode="" horiz-adv-x="640"
|
2127 |
d="M104 352c13.2998 0 24 -10.7002 24 -24v-272c0 -13.2998 -10.7002 -24 -24 -24h-48c-13.2998 0 -24 10.7002 -24 24v104h-24c-4.40039 0 -8 3.59961 -8 8v48c0 4.40039 3.59961 8 8 8h24v104c0 13.2998 10.7002 24 24 24h48zM632 224c4.40039 0 8 -3.59961 8 -8v-48
|
2128 |
c0 -4.40039 -3.59961 -8 -8 -8h-24v-104c0 -13.2998 -10.7002 -24 -24 -24h-48c-13.2998 0 -24 10.7002 -24 24v272c0 13.2998 10.7002 24 24 24h48c13.2998 0 24 -10.7002 24 -24v-104h24zM456 416c13.2998 0 24 -10.7002 24 -24v-400c0 -13.2998 -10.7002 -24 -24 -24h-48
|
2469 |
l-66 15.9004v-52.6006c7 -4.2002 12 -11.5 12 -20.2998c0 -8.40039 -4.59961 -15.4004 -11.0996 -19.7002l15.5996 -62.2998c1.7002 -6.90039 -2.09961 -14 -7.59961 -14h-41.8008c-5.5 0 -9.2998 7.09961 -7.59961 14l15.5996 62.2998
|
2470 |
c-6.5 4.2998 -11.0996 11.2998 -11.0996 19.7002c0 8.7998 5 16.0996 12 20.2998v58.4004z" />
|
2471 |
<glyph glyph-name="user-lock" unicode="" horiz-adv-x="640"
|
2472 |
+
d="M224 192c-70.6562 0 -128 57.3438 -128 128s57.3438 128 128 128s128 -57.3438 128 -128s-57.3438 -128 -128 -128zM320 128v-160c0.0644531 -9.49707 4.05176 -23.833 8.90039 -32h-280.9c-26.4961 0 -48 21.5039 -48 48v41.5996
|
2473 |
+
c0.0166016 74.1729 60.2275 134.384 134.4 134.4h16.6992c19.1514 -8.83203 51.8105 -16 72.9004 -16s53.749 7.16797 72.9004 16h16.6992c5 0 9.7002 -1 14.5 -1.5c-4.41016 -7.84082 -8.03906 -21.5049 -8.09961 -30.5zM608 160c17.6641 0 32 -14.3359 32 -32v-160
|
2474 |
+
c0 -17.6641 -14.3359 -32 -32 -32h-224c-17.6641 0 -32 14.3359 -32 32v160c0 17.6641 14.3359 32 32 32h32v80c0 44.1602 35.8398 80 80 80s80 -35.8398 80 -80v-80h32zM496 16c17.6641 0 32 14.3359 32 32s-14.3359 32 -32 32s-32 -14.3359 -32 -32s14.3359 -32 32 -32z
|
2475 |
+
M528 160v80c0 17.6641 -14.3359 32 -32 32s-32 -14.3359 -32 -32v-80h64z" />
|
2476 |
<glyph glyph-name="user-minus" unicode="" horiz-adv-x="640"
|
2477 |
d="M624 240c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-192c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h192zM224 192c-70.7002 0 -128 57.2998 -128 128s57.2998 128 128 128s128 -57.2998 128 -128s-57.2998 -128 -128 -128z
|
2478 |
M313.6 160c74.2002 0 134.4 -60.2002 134.4 -134.4v-41.5996c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v41.5996c0 74.2002 60.2002 134.4 134.4 134.4h16.6992c22.3008 -10.2002 46.9004 -16 72.9004 -16s50.7002 5.7998 72.9004 16h16.6992z" />
|
2508 |
c20.9004 -10 43.9004 -16 68.5 -16c3.30078 0 6.5 0.400391 9.80078 0.599609c2.7998 -3.09961 6 -5.89941 9.7998 -8.09961l7.89941 -4.59961c-0.0996094 -2.60059 -0.0996094 -5.2002 0 -7.80078c-0.899414 -0.599609 -36.5 -15.7998 -25.7998 -50.2998
|
2509 |
c7.90039 -25.7002 21.9004 -49.7998 40.2002 -69.5996c7.5 -8 18 -12.6006 28.9004 -12.6006c12.1992 0 19.2998 5 27.5 9.80078c2.19922 -1.30078 4.5 -2.7002 6.7998 -3.90039zM173.1 173.4c-40.2998 -22.1006 -68.8994 -62 -75.1992 -109.4h-65.9004
|
2510 |
c-17.7002 0 -32 14.2998 -32 32v32c0 35.2998 28.7002 64 64 64h64c17.5996 0 33.5 -7.09961 45.0996 -18.5996z" />
|
2511 |
+
<glyph glyph-name="balance-scale-left" unicode="" horiz-adv-x="640"
|
2512 |
+
d="M528 0c8.83984 0 16 -7.16016 16.0098 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-224c-8.83984 0 -16 7.16016 -16 16v342.75c-4.55957 2 -8.91992 4.34961 -12.9902 7.12012l-142.05 -47.6299c-8.37988 -2.81055 -17.4502 1.7002 -20.2598 10.0801l-10.1699 30.3398
|
2513 |
+
c-2.80957 8.37988 1.7002 17.4502 10.0801 20.2598l128.39 43.0498c-0.419922 3.32031 -1.00977 6.60059 -1.00977 10.0303c0 44.1797 35.8203 80 80 80c29.6904 0 55.2998 -16.3604 69.1104 -40.3701l117.92 39.5303c8.37988 2.80957 17.4502 -1.7002 20.2598 -10.0801
|
2514 |
+
l10.1699 -30.3398c2.80957 -8.37988 -1.7002 -17.4502 -10.0801 -20.2598l-132 -44.2607c-7.28027 -21.25 -22.96 -38.5293 -43.3799 -47.4697v-294.75h176zM639.98 144c0 -44.1797 -57.29 -80 -127.98 -80s-128 35.8203 -128 80h0.0195312
|
2515 |
+
c0 15.6699 -2.0791 7.25 85.04 181.51c17.6807 35.3604 68.2207 35.29 85.8701 0c86.3906 -172.779 85.0508 -165.33 85.0508 -181.51zM440 160h144l-72 144zM170.93 197.51c86.3906 -172.779 85.0508 -165.33 85.0508 -181.51h0.0195312c0 -44.1797 -57.3096 -80 -128 -80
|
2516 |
+
s-128 35.8203 -128 80h0.0195312c0 15.6699 -2.0791 7.25 85.04 181.51c17.6807 35.3604 68.2207 35.29 85.8701 0zM56 32h144l-72 144z" />
|
2517 |
+
<glyph glyph-name="balance-scale-right" unicode="" horiz-adv-x="640"
|
2518 |
+
d="M96 -16c0 8.83984 7.16016 16 16 16h175.99v294.76c-20.4199 8.93066 -36.1006 26.2207 -43.3799 47.4707l-132 44.2598c-8.37012 2.80957 -12.8906 11.8799 -10.0801 20.2598l10.1699 30.3398c2.80957 8.37012 11.8799 12.8906 20.2598 10.0801l117.93 -39.54
|
2519 |
+
c13.8105 24.0098 39.4199 40.3701 69.1104 40.3701c44.1797 0 80 -35.8203 80 -80c0 -3.42969 -0.589844 -6.70996 -1.00977 -10.0303l128.399 -43.0498c8.37012 -2.80957 12.8906 -11.8799 10.0801 -20.2598l-10.1699 -30.3398
|
2520 |
+
c-2.80957 -8.37012 -11.8799 -12.8906 -20.2598 -10.0801l-142.05 47.6299c-4.07031 -2.77051 -8.43066 -5.12012 -12.9902 -7.12012v-342.75c0 -8.83984 -7.16016 -16 -16 -16h-224c-8.83984 0 -16 7.16016 -16 16v32zM0 144c0 16.1797 -1.32031 8.73047 85.0596 181.51
|
2521 |
+
c17.6504 35.29 68.1904 35.3604 85.8701 0c87.1299 -174.26 85.0508 -165.84 85.0508 -181.51h0.0195312c0 -44.1797 -57.3096 -80 -128 -80s-128 35.8203 -128 80zM56 160h144l-72 144zM384.02 16c0 16.1797 -1.33984 8.73047 85.04 181.51
|
2522 |
+
c17.6504 35.29 68.1904 35.3604 85.8701 0c87.1299 -174.26 85.0508 -165.84 85.0508 -181.51h0.0195312c0 -44.1797 -57.3096 -80 -128 -80s-128 35.8203 -128 80h0.0195312zM440 32h144l-72 144z" />
|
2523 |
<glyph glyph-name="blender" unicode=""
|
2524 |
d="M416 64c35.3496 0 64 -28.6504 64 -64v-32c0 -17.6699 -14.3301 -32 -32 -32h-320c-17.6699 0 -32 14.3301 -32 32v32c0 35.3496 28.6504 64 64 64h256zM288 -32c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM328 384
|
2525 |
c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h157.82l-17.46 -64h-140.36c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h131.64l-17.46 -64h-114.18c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h105.46l-17.46 -64
|
2870 |
c2.93945 4.58984 8.01953 7.37012 13.4697 7.37012h0.00195312c4.82812 0 10.8574 -3.30176 13.458 -7.37012c2.5498 -3.97949 62.5303 -98.9102 62.5303 -217.7c0 -1.46973 0 -2.93945 -0.00976562 -4.39941c74.0391 60.1699 156.699 78.9102 160.579 79.7598
|
2871 |
c1.15039 0.259766 2.30078 0.379883 3.44043 0.379883c4.2002 0 8.29004 -1.66016 11.3203 -4.7002c3.85938 -3.87012 5.47949 -9.43945 4.2998 -14.7695c-0.879883 -3.96973 -20.6797 -90.5205 -84.9297 -165.641c44.3896 -8.91992 75.2197 -24.9893 76.7793 -25.8096z" />
|
2872 |
<glyph glyph-name="check-double" unicode=""
|
2873 |
+
d="M505 273.2c9.2998 -9.2998 9.2998 -24.5 -0.0996094 -34l-296 -296.2c-9.30078 -9.40039 -24.5 -9.40039 -33.9004 0l-168 168.1c-9.40039 9.40039 -9.40039 24.6006 0 34l39.7002 39.7002c9.2998 9.40039 24.5 9.40039 33.8994 0l111.4 -111.5l239.5 239.5
|
2874 |
+
c9.2998 9.40039 24.5 9.40039 33.9004 0zM180.7 167.2l-112 112.2c-6.2002 6.19922 -6.2002 16.2998 0 22.5996l45.2998 45.2998c6.2002 6.2998 16.4004 6.2998 22.5996 0l55.4004 -55.5l151.5 151.5c6.2002 6.2998 16.4004 6.2998 22.5996 0l45.2002 -45.2998
|
2875 |
+
c6.2002 -6.2002 6.2002 -16.2998 0 -22.5996l-208 -208.2c-6.2002 -6.2998 -16.3994 -6.2998 -22.5996 0z" />
|
2876 |
<glyph glyph-name="cocktail" unicode="" horiz-adv-x="576"
|
2877 |
d="M296 -16c22.0898 0 40 -17.9102 40 -40c0 -4.41992 -3.58008 -8 -8 -8h-240c-4.41992 0 -8 3.58008 -8 8c0 22.0898 17.9102 40 40 40h56v125.22l-168.74 168.73c-15.5195 15.5195 -4.5293 42.0498 17.4199 42.0498h366.641c21.9492 0 32.9395 -26.5303 17.4199 -42.0498
|
2878 |
l-168.74 -168.73v-125.22h56zM432 448c79.5303 0 144 -64.4697 144 -144s-64.4697 -144 -144 -144c-27.4102 0 -52.7695 8.08008 -74.5801 21.3799l35.2598 35.2598c12.0303 -5.43945 25.2803 -8.63965 39.3203 -8.63965c52.9297 0 96 43.0596 96 96s-43.0703 96 -96 96
|
3426 |
c16.25 0.919922 29.7998 -11.46 29.8096 -27.0898v-222.82c0 -14.3301 -11.5898 -26.2803 -26.4902 -27.0596c-43.6494 -2.29004 -131.93 -10.6807 -192.97 -41.4004c-9.39941 -4.73047 -20.54 1.70996 -20.54 11.9004v245.789c0 4.6709 2.31055 9.12012 6.41016 11.6309
|
3427 |
c59.3203 36.3193 155.43 46.3096 203.78 49.0498z" />
|
3428 |
<glyph glyph-name="brain" unicode="" horiz-adv-x="576"
|
3429 |
+
d="M208 448c35.2998 0 64 -28.7002 64 -64v-376c0 -39.7998 -32.2002 -72 -72 -72c-31.7998 0 -58.4004 20.7002 -68 49.2002c-3.90039 -0.700195 -7.90039 -1.2002 -12 -1.2002c-39.7998 0 -72 32.2002 -72 72c0 4.7998 0.5 9.5 1.40039 14.0996
|
3430 |
+
c-29 12 -49.4004 40.6006 -49.4004 73.9004c0 29.7002 16.2998 55.2998 40.2998 69.0996c-5.09961 10.6006 -8.2998 22.3008 -8.2998 34.9004c0 33.4004 20.5 62 49.7002 74c-1.10059 4.5 -1.7002 9.2002 -1.7002 14c0 35.2998 28.7002 64 64 64
|
3431 |
+
c0.799805 0 1.40039 -0.200195 2.2002 -0.200195c7.09961 27.7002 31.8994 48.2002 61.7998 48.2002zM576 144c0 -33.2998 -20.4004 -61.9004 -49.4004 -73.9004c0.900391 -4.59961 1.40039 -9.2998 1.40039 -14.0996c0 -39.7998 -32.2002 -72 -72 -72
|
3432 |
+
c-4.09961 0 -8.09961 0.5 -12 1.2002c-9.59961 -28.5 -36.2002 -49.2002 -68 -49.2002c-39.7998 0 -72 32.2002 -72 72v376c0 35.4004 28.7002 64 64 64c29.9004 0 54.7002 -20.5 61.7998 -48.2002c0.700195 0 1.40039 0.200195 2.2002 0.200195
|
3433 |
+
c35.2998 0 64 -28.7002 64 -64c0 -4.7998 -0.700195 -9.5 -1.7002 -14c29.2002 -12 49.7002 -40.5996 49.7002 -74c0 -12.5996 -3.09961 -24.2998 -8.2998 -34.9004c24 -13.7998 40.2998 -39.3994 40.2998 -69.0996z" />
|
|
|
|
|
3434 |
<glyph glyph-name="car-alt" unicode="" horiz-adv-x="480"
|
3435 |
d="M438.66 235.67c24.1201 -9.16992 41.3398 -32.3301 41.3398 -59.6699v-48c0 -16.1299 -6.16016 -30.6797 -16 -41.9297v-54.0703c0 -17.6699 -14.3301 -32 -32 -32h-32c-17.6699 0 -32 14.3301 -32 32v32h-256v-32c0 -17.6699 -14.3301 -32 -32 -32h-32
|
3436 |
c-17.6699 0 -32 14.3301 -32 32v54.0703c-9.83984 11.2598 -16 25.8096 -16 41.9297v48c0 27.3398 17.2197 50.5 41.3398 59.6699l11.2402 28.0996l19.9297 49.8301c17.1104 42.7705 57.9307 70.4004 103.99 70.4004h127c46.0703 0 86.8799 -27.6299 103.99 -70.4004
|
3817 |
l-25.1201 -40h-38.9395c-3.70996 0 -5.98047 -4.08984 -4 -7.24023l19.1992 -30.5596l-19.1992 -30.5605c-1.98047 -3.14941 0.279297 -7.23926 4 -7.23926h38.9395l25.1201 -39.9805c1.84961 -2.9502 6.15039 -2.9502 8 0l25.1201 39.9902h38.9395
|
3818 |
c3.70996 0 5.98047 4.08984 4 7.24023z" />
|
3819 |
<glyph glyph-name="torah" unicode="" horiz-adv-x="640"
|
3820 |
+
d="M320.05 81.5195l-17.7402 29.6406h35.46zM419.26 247.52l-18.3994 -30.8193l-18.46 30.8193h36.8594zM48 448c26.5098 0 48 -14.3301 48 -32v-448c0 -17.6699 -21.4902 -32 -48 -32s-48 14.3301 -48 32v448c0 17.6699 21.4902 32 48 32zM220.74 136.5l18.3896 30.8203
|
3821 |
+
l18.46 -30.8203h-36.8496zM382.45 136.5l18.4102 30.7998l18.4492 -30.7998h-36.8594zM128 -16v416h384v-416h-384zM194.77 262.13c-1.53711 -2.65625 -2.78516 -7.30176 -2.78516 -10.3711c0 -3.20312 1.35059 -8.02246 3.01562 -10.7588l29.3604 -49l-29.21 -48.8398
|
3822 |
+
c-1.6709 -2.77344 -3.02637 -7.65234 -3.02637 -10.8906c0 -11.6523 9.45703 -21.1094 21.1104 -21.1094h0.015625h59.5l29.25 -48.8799c3.33105 -5.6416 11.3516 -10.2207 17.9023 -10.2207h0.0976562c6.64844 0.0136719 14.7842 4.67285 18.1602 10.4004l29.1299 48.7002
|
3823 |
+
h59.4697h0.0224609c6.8125 0 15.082 4.80273 18.458 10.7197c1.53418 2.65332 2.7793 7.29297 2.7793 10.3584c0 3.2041 -1.35254 8.02539 -3.01953 10.7617l-29.3701 49l29.2402 48.8496c1.66602 2.77246 3.01758 7.64648 3.01758 10.8809
|
3824 |
+
c0 11.6562 -9.46094 21.1182 -21.1182 21.1191h-59.5195l-29.25 48.8604c-3.3252 5.63574 -11.3359 10.21 -17.8799 10.21h-0.0703125h-0.0341797c-6.65137 0 -14.7988 -4.64551 -18.1855 -10.3701l-29.1299 -48.71h-59.4502h-0.0458984
|
3825 |
+
c-6.80469 0 -15.0635 -4.79785 -18.4346 -10.71zM592 448c26.5098 0 48 -14.3301 48 -32v-448c0 -17.6699 -21.4902 -32 -48 -32s-48 14.3301 -48 32v448c0 17.6699 21.4902 32 48 32zM320 302.47l17.6797 -29.6201h-35.46zM257.55 247.47l-18.3701 -30.7998
|
3826 |
+
l-18.4395 30.7998h36.8096zM287.13 136.47l-33.2295 55.5303l33.1699 55.5195h65.79l33.2295 -55.5195l-33.1699 -55.5303h-65.79z" />
|
|
|
|
|
3827 |
<glyph glyph-name="torii-gate" unicode=""
|
3828 |
d="M376.45 416c39.4961 0.00195312 100.223 14.3389 135.55 32v-96c0 -17.6699 -14.3301 -32 -32 -32h-32v-64h48c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-48v-240c0 -8.83984 -7.16016 -16 -16 -16h-32c-8.83984 0 -16 7.16016 -16 16v240
|
3829 |
h-256v-240c0 -8.83984 -7.16016 -16 -16 -16h-32c-8.83984 0 -16 7.16016 -16 16v240h-48c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h48v64h-32c-17.6699 0 -32 14.3301 -32 32v96c35.3271 -17.6611 96.0537 -31.998 135.55 -32h240.9zM128 320v-64h96
|
4335 |
c-1.19922 9.5 6.5 18 16.3008 18h16.3994c8.2002 0 15 -5.90039 16.1006 -13.7998c2.7998 -20.2002 12 -38.7998 26.3994 -53.5c20.2002 -20.5 32.7998 -46.5 36.6006 -74.7002c1.2998 -9.5 -6.5 -18 -16.3008 -18h-16.5c-8 0 -14.6992 5.7998 -16 13.5zM400 256
|
4336 |
c61.7998 0 112 -50.2002 112 -112s-50.2002 -112 -112 -112h-16c0 -53 -43 -96 -96 -96h-192c-53 0 -96 43 -96 96v192c0 17.7002 14.2998 32 32 32h368zM400 96c26.5 0 48 21.5 48 48s-21.5 48 -48 48h-16v-96h16z" />
|
4337 |
<glyph glyph-name="radiation" unicode="" horiz-adv-x="496"
|
4338 |
+
d="M328.2 192.2c0 28.5996 -15.2002 53.5 -37.7998 67.7998l80.3994 128.4c4.7998 7.69922 15.2998 10.0996 22.7002 4.7998c58.0996 -42 97.4004 -108.4 102.5 -184.2c0.599609 -9.09961 -7.09961 -16.7998 -16.2002 -16.7998h-151.6zM290.4 124.5l80.3994 -128.5
|
4339 |
+
c4.7998 -7.59961 2.40039 -18.0996 -5.59961 -22.4004c-34.9004 -18.7998 -74.7998 -29.5996 -117.2 -29.5996s-82.2998 10.7998 -117.2 29.5996c-8 4.30078 -10.3994 14.7002 -5.59961 22.4004l80.3994 128.5c12.4004 -7.7002 26.8008 -12.4004 42.4004 -12.4004
|
4340 |
+
s30.0996 4.7002 42.4004 12.4004zM248 144.2c-26.5 0 -48 21.5 -48 48s21.5 48 48 48s48 -21.5 48 -48s-21.5 -48 -48 -48zM16.2002 192.2c-9.10059 0 -16.7998 7.7002 -16.2002 16.7002c5.09961 75.7998 44.4004 142.199 102.5 184.199
|
4341 |
+
c7.40039 5.40039 17.9004 2.90039 22.7002 -4.7998l80.3994 -128.399c-22.5996 -14.2002 -37.7998 -39.1006 -37.7998 -67.7002h-151.6z" />
|
4342 |
<glyph glyph-name="radiation-alt" unicode="" horiz-adv-x="496"
|
4343 |
+
d="M312 192c0 22.7998 -12.0996 42.7998 -30.0996 54l41.6992 66.7998c5.2002 8.2998 16.4004 9.90039 24 3.7998c32.5 -26 54.9004 -64.1992 59.5 -107.8c0.900391 -9.09961 -6.7998 -16.7998 -16 -16.7998h-79.0996zM214.2 137.9
|
4344 |
+
c9.7998 -6.2002 21.5 -9.90039 33.8994 -9.90039c12.4004 0 24 3.7002 33.8008 9.90039l41.7998 -66.9004c4.7998 -7.7998 2.39941 -18.4004 -5.7998 -22.5c-21.2002 -10.4004 -44.8008 -16.5 -69.9004 -16.5s-48.7002 6.09961 -69.7998 16.5
|
4345 |
+
c-8.2002 4.09961 -10.7002 14.7002 -5.7998 22.5zM104.9 192c-9.2002 0 -17 7.7002 -15.9004 16.9004c4.59961 43.5996 26.9004 81.7998 59.5 107.8c7.59961 6.09961 18.7998 4.5 24 -3.7998l41.7002 -66.8008c-18.1006 -11.2998 -30.2002 -31.2998 -30.2002 -54.0996
|
4346 |
+
h-79.0996zM248 -56c-137 0 -248 111 -248 248s111 248 248 248s248 -111 248 -248s-111 -248 -248 -248zM248 376c-101.5 0 -184 -82.5 -184 -184s82.5 -184 184 -184s184 82.5 184 184s-82.5 184 -184 184zM248 160c-17.7002 0 -32 14.2998 -32 32s14.2998 32 32 32
|
4347 |
+
s32 -14.2998 32 -32s-14.2998 -32 -32 -32z" />
|
4348 |
<glyph glyph-name="restroom" unicode="" horiz-adv-x="640"
|
4349 |
d="M128 320c-35.2998 0 -64 28.7002 -64 64s28.7002 64 64 64s64 -28.7002 64 -64s-28.7002 -64 -64 -64zM512 320c-35.2998 0 -64 28.7002 -64 64s28.7002 64 64 64s64 -28.7002 64 -64s-28.7002 -64 -64 -64zM639.3 93.5c3.7002 -15.0996 -8.2998 -29.5 -24.5 -29.5
|
4350 |
h-54.7998v-104c0 -13.2998 -10.7002 -24 -24 -24h-48c-13.2998 0 -24 10.7002 -24 24v104h-54.7998c-16.2002 0 -28.2002 14.4004 -24.7002 29.5l45.5996 185.8c3.30078 13.5 15.5 23 29.8008 24.2002c15 -9.7002 32.7998 -15.5 52 -15.5c19.1992 0 37 5.7998 52 15.5
|
4365 |
<glyph glyph-name="sd-card" unicode="" horiz-adv-x="384"
|
4366 |
d="M320 448c35.2998 0 64 -28.7002 64 -64v-384c0 -35.2998 -28.7002 -64 -64 -64h-256c-35.2998 0 -64 28.7002 -64 64v320l128 128h192zM160 288v96h-48v-96h48zM240 288v96h-48v-96h48zM320 288v96h-48v-96h48z" />
|
4367 |
<glyph glyph-name="sim-card" unicode="" horiz-adv-x="384"
|
4368 |
+
d="M0 384c0 35.2998 28.7002 64 64 64h192l128 -128v-320c0 -35.2998 -28.7002 -64 -64 -64h-256c-35.2998 0 -64 28.7002 -64 64v384zM224 192v64h-64v-64h64zM320 192v32c0 17.7002 -14.2998 32 -32 32h-32v-64h64zM256 64v-64h32c17.7002 0 32 14.2998 32 32v32h-64z
|
4369 |
+
M160 64v-64h64v64h-64zM64 64v-32c0 -17.7002 14.2998 -32 32 -32h32v64h-64zM64 160v-64h256v64h-256zM64 224v-32h64v64h-32c-17.7002 0 -32 -14.2998 -32 -32z" />
|
4370 |
<glyph glyph-name="skating" unicode="" horiz-adv-x="448"
|
4371 |
d="M400 448c26.5 0 48 -21.5 48 -48s-21.5 -48 -48 -48s-48 21.5 -48 48s21.5 48 48 48zM400 0c8.7998 0 16 -7.2002 16 -16c0 -26.5 -21.5 -48 -48 -48h-96c-8.7998 0 -16 7.2002 -16 16s7.2002 16 16 16h96c8.7998 0 16 7.2002 16 16s7.2002 16 16 16zM117.8 -8.59961
|
4372 |
c6.2998 6.2998 16.5 6.19922 22.7002 0c6.2002 -6.2002 6.2002 -16.4004 0 -22.6006c-9.2998 -9.2998 -21.5996 -14 -33.9004 -14c-12.2998 0 -24.5996 4.60059 -34 14l-67.8994 67.9004c-6.2002 6.2002 -6.2002 16.3994 0 22.5996s16.3994 6.2002 22.5996 0
|
4536 |
<glyph glyph-name="wave-square" unicode="" horiz-adv-x="640"
|
4537 |
d="M476 -32h-152c-19.8721 0 -36 16.1279 -36 36v348h-96v-156c0 -19.8721 -16.1279 -36 -36 -36h-140c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h112v156c0 19.8721 16.1279 36 36 36h152c19.8721 0 36 -16.1279 36 -36v-348h96v156
|
4538 |
c0 19.8721 16.1279 36 36 36h140c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-112v-156c0 -19.8721 -16.1279 -36 -36 -36z" />
|
4539 |
+
<glyph glyph-name="biking" unicode="" horiz-adv-x="640"
|
4540 |
+
d="M400 352c-26.4961 0 -48 21.5039 -48 48s21.5039 48 48 48s48 -21.5039 48 -48s-21.5039 -48 -48 -48zM396 231l-41.3604 33.1104l-58.25 -49.9199l41.3604 -27.5703c7.86426 -5.24316 14.248 -17.1689 14.25 -26.6201v-128c0 -17.6641 -14.3359 -32 -32 -32
|
4541 |
+
s-32 14.3359 -32 32v110.88l-81.7305 54.5205c-7.86621 5.24316 -14.251 17.1719 -14.251 26.626c0 8.12305 5.00488 19.0068 11.1719 24.2939l112 96c4.95508 4.25781 14.2803 7.71289 20.8135 7.71289c6.20215 0 15.1602 -3.15039 19.9961 -7.0332l71.2197 -57h52.7803
|
4542 |
+
c17.6641 0 32 -14.3359 32 -32s-14.3359 -32 -32 -32h-64h-0.0595703c-6.18262 0 -15.1152 3.13574 -19.9404 7zM512 192c70.6562 0 128 -57.3438 128 -128s-57.3438 -128 -128 -128s-128 57.3438 -128 128s57.3438 128 128 128zM512 0c35.3281 0 64 28.6719 64 64
|
4543 |
+
s-28.6719 64 -64 64s-64 -28.6719 -64 -64s28.6719 -64 64 -64zM128 192c70.6562 0 128 -57.3438 128 -128s-57.3438 -128 -128 -128s-128 57.3438 -128 128s57.3438 128 128 128zM128 0c35.3281 0 64 28.6719 64 64s-28.6719 64 -64 64s-64 -28.6719 -64 -64
|
4544 |
+
s28.6719 -64 64 -64z" />
|
4545 |
+
<glyph glyph-name="border-all" unicode="" horiz-adv-x="448"
|
4546 |
+
d="M416 416c17.6641 0 32 -14.3359 32 -32v-384c0 -17.6641 -14.3359 -32 -32 -32h-384c-17.6641 0 -32 14.3359 -32 32v384c0 17.6641 14.3359 32 32 32h384zM384 352h-128v-128h128v128zM192 352h-128v-128h128v128zM64 32h128v128h-128v-128zM256 32h128v128h-128v-128z
|
4547 |
+
" />
|
4548 |
+
<glyph glyph-name="border-none" unicode="" horiz-adv-x="448"
|
4549 |
+
d="M240 224c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM336 224c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32
|
4550 |
+
c0 8.83203 7.16797 16 16 16h32zM432 224c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM144 224c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32
|
4551 |
+
c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM240 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM336 32c8.83203 0 16 -7.16797 16 -16v-32
|
4552 |
+
c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM432 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM432 128
|
4553 |
+
c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM432 320c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32
|
4554 |
+
c0 8.83203 7.16797 16 16 16h32zM240 128c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM240 320c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32
|
4555 |
+
c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM144 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM240 416c8.83203 0 16 -7.16797 16 -16v-32
|
4556 |
+
c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM336 416c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM432 416
|
4557 |
+
c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM48 224c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32
|
4558 |
+
c0 8.83203 7.16797 16 16 16h32zM48 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM48 128c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32
|
4559 |
+
c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM48 320c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM48 416c8.83203 0 16 -7.16797 16 -16v-32
|
4560 |
+
c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM144 416c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32z" />
|
4561 |
+
<glyph glyph-name="border-style" unicode="" horiz-adv-x="448"
|
4562 |
+
d="M240 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM144 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32
|
4563 |
+
c0 8.83203 7.16797 16 16 16h32zM336 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM432 224c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32
|
4564 |
+
c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM432 128c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM432 32c8.83203 0 16 -7.16797 16 -16v-32
|
4565 |
+
c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM432 320c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM432 416
|
4566 |
+
c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-368v-368c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v400c0 17.6641 14.3359 32 32 32h400z" />
|
4567 |
+
<glyph glyph-name="fan" unicode=""
|
4568 |
+
d="M352.57 320c81.79 0 149.3 -61.6299 159.3 -141.33c1.30957 -10.4795 -7.17969 -19.6396 -17.6201 -18.5898l-123.11 12.4102c8.34082 -22.9707 12.8604 -48.9707 12.8604 -77.0605c0 -81.79 -61.6299 -149.3 -141.33 -159.3
|
4569 |
+
c-10.4795 -1.30957 -19.6396 7.19043 -18.5898 17.6201l12.4102 123.11c-22.9707 -8.34082 -48.9707 -12.8604 -77.0605 -12.8604c-81.79 0 -149.3 61.6299 -159.3 141.33c-1.30957 10.4795 7.17969 19.6699 17.6201 18.5898l123.11 -12.4102
|
4570 |
+
c-8.34082 22.9707 -12.8604 48.9707 -12.8604 77.0605c0 81.79 61.6299 149.3 141.33 159.3c10.4795 1.30957 19.6699 -7.17969 18.5898 -17.6201l-12.4102 -123.11c22.9707 8.34082 48.9707 12.8604 77.0605 12.8604zM256 160c17.6641 0 32 14.3359 32 32
|
4571 |
+
s-14.3359 32 -32 32s-32 -14.3359 -32 -32s14.3359 -32 32 -32z" />
|
4572 |
+
<glyph glyph-name="icons" unicode=""
|
4573 |
+
d="M116.65 228.65l-96.79 99.8301c-28 29.0293 -26.4102 77.0996 5 103.88c27.3896 23.3398 68.1895 19.1396 93.29 -6.80078l9.84961 -10.1396l9.86035 10.1396c25.1396 25.9404 65.8896 30.1406 93.2793 6.80078c31.4102 -26.7803 33.0605 -74.8799 4.91016 -103.88
|
4574 |
+
l-96.75 -99.8301c-2.55566 -2.66992 -7.62891 -4.83594 -11.3252 -4.83594c-3.69531 0 -8.76855 2.16602 -11.3242 4.83594zM260.57 128.16c15.1406 -0.0107422 27.4297 -12.3086 27.4297 -27.4502v-0.00976562v-137.25v0c0 -15.1416 -12.2891 -27.4395 -27.4297 -27.4502
|
4575 |
+
h-233.141c-15.1406 0.00585938 -27.4297 12.2988 -27.4297 27.4404v0.00976562v137.25v0.00976562c0 15.1523 12.2979 27.4502 27.4502 27.4502h0.00976562h48l7 14.2402c3.67773 9.81445 15.168 17.7793 25.6484 17.7793h0.0117188h71.71h0.0107422
|
4576 |
+
c10.4814 0 21.9717 -7.96484 25.6494 -17.7793l7.08008 -14.2402h48zM144 -20c28.7041 0 52 23.2959 52 52s-23.2959 52 -52 52s-52 -23.2959 -52 -52s23.2959 -52 52 -52zM499.4 95.9004c9.70996 0 15.75 -8.79004 10.8691 -15.7002l-92.3994 -138.91
|
4577 |
+
c-2.19629 -2.90039 -6.93262 -5.25488 -10.5713 -5.25488c-0.0957031 0 -0.25293 0.00195312 -0.348633 0.00488281c-8.03027 0 -14.1201 6.25 -12.2305 12.9004l24.2002 83h-62.3096c-7.62012 0 -13.5 5.58984 -12.5 11.8896l16.7998 106.93
|
4578 |
+
c0.839844 5.2002 6.2002 9.10059 12.5 9.10059h75.5898c8.25 0 14.2803 -6.56055 12.1797 -13.21l-22.3594 -50.75h60.5801zM478.08 447.67c17.9199 2.75 33.9199 -12.1895 33.9199 -31.6699v-144.26c-0.269531 -26.3398 -28.7998 -47.6602 -64 -47.6602
|
4579 |
+
c-35.3496 0 -64 21.4795 -64 48c0 26.5195 28.6504 48 64 48c4.46191 -0.0400391 11.6299 -0.801758 16 -1.7002v47.1797l-112 -17.2197v-108.58c-0.269531 -26.3398 -28.7998 -47.6602 -64 -47.6602c-35.3496 0 -64 21.4805 -64 48c0 26.5205 28.6504 48 64 48
|
4580 |
+
c4.46191 -0.0400391 11.6299 -0.801758 16 -1.69922v106.77c0 15.9102 10.8701 29.4102 25.5098 31.6602z" />
|
4581 |
+
<glyph glyph-name="phone-alt" unicode=""
|
4582 |
+
d="M497.39 86.2002c8.06055 -3.50586 14.6016 -13.4844 14.6016 -22.2744c0 -1.48828 -0.264648 -3.87402 -0.59082 -5.32617l-24 -104c-2.37109 -10.2666 -12.8477 -18.5996 -23.3848 -18.5996h-0.015625c-256.1 0 -464 207.5 -464 464v0.00585938
|
4583 |
+
c0 10.5371 8.33301 21.0137 18.5996 23.3838l104 24c1.45996 0.332031 3.8584 0.601562 5.35547 0.601562c8.73242 0 18.6533 -6.49707 22.1445 -14.501l48 -112c1.06836 -2.49219 1.93457 -6.71582 1.93457 -9.42773c0 -6.28613 -3.95801 -14.6064 -8.83398 -18.5723
|
4584 |
+
l-60.6006 -49.6006c31.3398 -66.4688 110.721 -145.85 177.19 -177.189l49.5996 60.5996c3.97559 4.86914 12.3047 8.82129 18.5908 8.82129c2.70508 0 6.9209 -0.860352 9.40918 -1.9209z" />
|
4585 |
+
<glyph glyph-name="phone-square-alt" unicode="" horiz-adv-x="448"
|
4586 |
+
d="M400 416c26.4961 0 48 -21.5039 48 -48v-352c0 -26.4961 -21.5039 -48 -48 -48h-352c-26.4961 0 -48 21.5039 -48 48v352c0 26.4961 21.5039 48 48 48h352zM383.61 108.63c0.198242 0.919922 0.373047 2.42969 0.389648 3.37012
|
4587 |
+
c-0.262695 5.28613 -4.33496 11.4648 -9.08984 13.79l-70 30c-1.57422 0.613281 -4.22168 1.15527 -5.91016 1.20996c-3.82422 -0.209961 -9.02539 -2.67383 -11.6104 -5.5l-31 -37.8896c-41.5469 19.6025 -91.1768 69.2324 -110.779 110.779l37.8896 31
|
4588 |
+
c2.82617 2.58496 5.29004 7.78613 5.5 11.6104c-0.0546875 1.68848 -0.597656 4.33594 -1.20996 5.91016l-30 70c-2.32812 4.75098 -8.50586 8.82324 -13.79 9.08984c-0.94043 -0.0205078 -2.4502 -0.195312 -3.37012 -0.389648l-65 -15
|
4589 |
+
c-6.19238 -1.6582 -11.4033 -8.20312 -11.6299 -14.6104c0 -160.29 130 -290 290 -290c6.58496 0.00292969 13.1309 5.21289 14.6104 11.6299z" />
|
4590 |
+
<glyph glyph-name="photo-video" unicode="" horiz-adv-x="640"
|
4591 |
+
d="M608 448c17.6641 0 32 -14.3359 32 -32v-320c0 -17.6641 -14.3359 -32 -32 -32h-128v320h-192v-64h-160v96c0 17.6641 14.3359 32 32 32h448zM232 345v30c0 4.96777 -4.03223 9 -9 9h-30c-4.96777 0 -9 -4.03223 -9 -9v-30c0 -4.96777 4.03223 -9 9 -9h30
|
4592 |
+
c4.96777 0 9 4.03223 9 9zM584 137v30c0 4.96777 -4.03223 9 -9 9h-30c-4.96777 0 -9 -4.03223 -9 -9v-30c0 -4.96777 4.03223 -9 9 -9h30c4.96777 0 9 4.03223 9 9zM584 241v30c0 4.96777 -4.03223 9 -9 9h-30c-4.96777 0 -9 -4.03223 -9 -9v-30
|
4593 |
+
c0 -4.96777 4.03223 -9 9 -9h30c4.96777 0 9 4.03223 9 9zM584 345v30c0 4.96777 -4.03223 9 -9 9h-30c-4.96777 0 -9 -4.03223 -9 -9v-30c0 -4.96777 4.03223 -9 9 -9h30c4.96777 0 9 4.03223 9 9zM416 288c17.6641 0 32 -14.3359 32 -32v-288
|
4594 |
+
c0 -17.6641 -14.3359 -32 -32 -32h-384c-17.6641 0 -32 14.3359 -32 32v288c0 17.6641 14.3359 32 32 32h384zM96 224c-17.6641 0 -32 -14.3359 -32 -32s14.3359 -32 32 -32s32 14.3359 32 32s-14.3359 32 -32 32zM384 0v96l-96 96l-128 -128l-32 32l-64 -64v-32h320z" />
|
4595 |
+
<glyph glyph-name="remove-format" unicode="" horiz-adv-x="640"
|
4596 |
+
d="M336 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-128c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32.4902l26.5098 79.5996l67.0898 -51.8301l-9.25977 -27.7695h11.1699zM633.82 -10.0996
|
4597 |
+
c3.41309 -2.65234 6.18359 -8.3125 6.18359 -12.6357c0 -3.02734 -1.50684 -7.42383 -3.36426 -9.81445l-19.6396 -25.2705c-2.65234 -3.41211 -8.31152 -6.18262 -12.6338 -6.18262c-3.03125 0 -7.43359 1.51172 -9.82617 3.37305l-588.36 454.72
|
4598 |
+
c-3.41016 2.65234 -6.17773 8.31055 -6.17773 12.6309c0 3.02832 1.50879 7.42773 3.36816 9.81934l19.6299 25.2695c2.65234 3.41309 8.31152 6.18262 12.6338 6.18262c3.03125 0 7.43359 -1.51074 9.82617 -3.37207l114.54 -88.5205v43.9004c0 8.83203 7.16797 16 16 16
|
4599 |
+
h416c8.83203 0 16 -7.16797 16 -16v-96c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32h-117.83l-49.1699 -147.59zM309.91 240.24l31.9199 95.7598h-117.83v-29.3604z" />
|
4600 |
+
<glyph glyph-name="sort-alpha-down-alt" unicode="" horiz-adv-x="448"
|
4601 |
+
d="M176 96c14.2197 0 21.3496 -17.2598 11.3301 -27.3096l-80 -96c-2.58691 -2.58496 -7.65332 -4.68262 -11.3105 -4.68262c-3.65625 0 -8.72266 2.09766 -11.3096 4.68262l-80 96c-10.0703 10.0693 -2.90039 27.3096 11.29 27.3096h48v304c0 8.83203 7.16797 16 16 16h32
|
4602 |
+
c8.83203 0 16 -7.16797 16 -16v-304h48zM288 224c-8.83203 0 -16 7.16797 -16 16v17.6299v0.00292969c0 7.93262 4.81152 18.6475 10.7402 23.917l61.2598 70.4502h-56c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h128c8.83203 0 16 -7.16797 16 -16
|
4603 |
+
v-17.6299v-0.00292969c0 -7.93262 -4.81152 -18.6475 -10.7402 -23.917l-61.2598 -70.4502h56c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-128zM447.06 -10.6201c0.514648 -1.44043 0.931641 -3.85059 0.931641 -5.37988
|
4604 |
+
c0 -8.82715 -7.16406 -15.9951 -15.9912 -16h-24.8398h-0.0449219c-6.42773 0 -13.249 4.96387 -15.2256 11.0801l-4.40918 12.9199h-71l-4.4209 -12.9199c-1.97559 -6.11621 -8.79688 -11.0801 -15.2246 -11.0801h-0.00488281h-24.8301
|
4605 |
+
c-8.82715 0.00488281 -15.9912 7.17285 -15.9912 16c0 1.5293 0.416992 3.93945 0.931641 5.37988l59.2695 160c2.09277 5.8623 8.84375 10.6201 15.0684 10.6201h0.00195312h41.4395h0.00195312c6.22461 0 12.9756 -4.75781 15.0684 -10.6201zM335.61 48h32.7793
|
4606 |
+
l-16.3896 48z" />
|
4607 |
+
<glyph glyph-name="sort-alpha-up-alt" unicode="" horiz-adv-x="448"
|
4608 |
+
d="M16 288c-14.2197 0 -21.3496 17.2598 -11.3096 27.3096l80 96c2.58594 2.58496 7.65332 4.68262 11.3096 4.68262s8.72363 -2.09766 11.3096 -4.68262l80 -96c10.0703 -10.0693 2.90039 -27.3096 -11.3096 -27.3096h-48v-304c0 -8.83203 -7.16797 -16 -16 -16h-32
|
4609 |
+
c-8.83203 0 -16 7.16797 -16 16v304h-48zM288 224c-8.83203 0 -16 7.16797 -16 16v17.6299v0.00292969c0 7.93262 4.81152 18.6475 10.7402 23.917l61.2598 70.4502h-56c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h128c8.83203 0 16 -7.16797 16 -16
|
4610 |
+
v-17.6299v-0.00292969c0 -7.93262 -4.81152 -18.6475 -10.7402 -23.917l-61.2598 -70.4502h56c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-128zM447.06 -10.6201c0.514648 -1.44043 0.931641 -3.85059 0.931641 -5.37988
|
4611 |
+
c0 -8.82715 -7.16406 -15.9951 -15.9912 -16h-24.8398h-0.0449219c-6.42773 0 -13.249 4.96387 -15.2256 11.0801l-4.40918 12.9199h-71l-4.4209 -12.9199c-1.97559 -6.11621 -8.79688 -11.0801 -15.2246 -11.0801h-0.00488281h-24.8301
|
4612 |
+
c-8.82715 0.00488281 -15.9912 7.17285 -15.9912 16c0 1.5293 0.416992 3.93945 0.931641 5.37988l59.2695 160c2.09277 5.8623 8.84375 10.6201 15.0684 10.6201h0.00195312h41.4395h0.00195312c6.22461 0 12.9756 -4.75781 15.0684 -10.6201zM335.61 48h32.7793
|
4613 |
+
l-16.3896 48z" />
|
4614 |
+
<glyph glyph-name="sort-amount-down-alt" unicode=""
|
4615 |
+
d="M240 352c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h64c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-64zM240 224c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h128c8.83203 0 16 -7.16797 16 -16v-32
|
4616 |
+
c0 -8.83203 -7.16797 -16 -16 -16h-128zM496 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-256c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h256zM240 96c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h192
|
4617 |
+
c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-192zM176 96c14.2197 0 21.3496 -17.2598 11.3301 -27.3096l-80 -96c-2.58691 -2.58496 -7.65332 -4.68262 -11.3105 -4.68262c-3.65625 0 -8.72266 2.09766 -11.3096 4.68262l-80 96
|
4618 |
+
c-10.0801 10.0693 -2.90039 27.3096 11.29 27.3096h48v304c0 8.83203 7.16797 16 16 16h32c8.83203 0 16 -7.16797 16 -16v-304h48z" />
|
4619 |
+
<glyph glyph-name="sort-amount-up-alt" unicode=""
|
4620 |
+
d="M240 352c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h64c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-64zM240 224c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h128c8.83203 0 16 -7.16797 16 -16v-32
|
4621 |
+
c0 -8.83203 -7.16797 -16 -16 -16h-128zM496 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-256c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h256zM240 96c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h192
|
4622 |
+
c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-192zM16 288c-14.2197 0 -21.3496 17.2598 -11.3096 27.3096l80 96c2.58594 2.58496 7.65332 4.68262 11.3096 4.68262s8.72363 -2.09766 11.3096 -4.68262l80 -96
|
4623 |
+
c10.0801 -10.0693 2.90039 -27.3096 -11.3096 -27.3096h-48v-304c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v304h-48z" />
|
4624 |
+
<glyph glyph-name="sort-numeric-down-alt" unicode="" horiz-adv-x="448"
|
4625 |
+
d="M176 96c14.2197 0 21.3496 -17.2598 11.3301 -27.3096l-80 -96c-2.58691 -2.58496 -7.65332 -4.68262 -11.3105 -4.68262c-3.65625 0 -8.72266 2.09766 -11.3096 4.68262l-80 96c-10.0703 10.0693 -2.90039 27.3096 11.29 27.3096h48v304c0 8.83203 7.16797 16 16 16h32
|
4626 |
+
c8.83203 0 16 -7.16797 16 -16v-304h48zM400 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-96c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h16v64h-16c-8.82422 0.0078125 -15.9863 7.17578 -15.9863 16
|
4627 |
+
c0 2.08984 0.759766 5.30176 1.69629 7.16992l16 32c2.44141 4.87012 8.84277 8.8252 14.29 8.83008h48c8.83203 0 16 -7.16797 16 -16v-112h16zM330.17 413.09c53.4502 14.25 101.83 -25.8799 101.85 -77.0898v-10.7695c0 -70.3906 -28.25 -107.23 -86.25 -132
|
4628 |
+
c-8.36914 -3.58008 -18.0293 1.2793 -20.8994 9.90918l-9.90039 20c-2.62012 7.87012 0.610352 16.9404 8.18066 20.3408c6.2793 2.71387 15.6201 8.49805 20.8496 12.9092c-47.6396 4.76074 -83.0996 51.4805 -68.8301 102.53c6.80762 23.4512 31.4482 47.7197 55 54.1699z
|
4629 |
+
M352 316c11.04 0 20 8.95996 20 20s-8.95996 20 -20 20s-20 -8.95996 -20 -20s8.95996 -20 20 -20z" />
|
4630 |
+
<glyph glyph-name="sort-numeric-up-alt" unicode="" horiz-adv-x="448"
|
4631 |
+
d="M107.31 411.31l80 -96c10.0703 -10.0693 2.90039 -27.3096 -11.3096 -27.3096h-48v-304c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v304h-48c-14.2197 0 -21.3496 17.2598 -11.3096 27.3096l80 96
|
4632 |
+
c2.58594 2.58496 7.65332 4.68262 11.3096 4.68262s8.72363 -2.09766 11.3096 -4.68262zM400 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-96c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h16v64h-16
|
4633 |
+
c-8.82422 0.0078125 -15.9863 7.17578 -15.9863 16c0 2.08984 0.759766 5.30176 1.69629 7.16992l16 32c2.44141 4.87012 8.84277 8.8252 14.29 8.83008h48c8.83203 0 16 -7.16797 16 -16v-112h16zM330.17 413.09c53.4502 14.25 101.83 -25.8799 101.85 -77.0898v-10.7695
|
4634 |
+
c0 -70.3906 -28.25 -107.23 -86.25 -132c-8.36914 -3.58008 -18.0293 1.2793 -20.8994 9.90918l-9.90039 20c-2.62012 7.87012 0.610352 16.9404 8.18066 20.3408c6.2793 2.71387 15.6201 8.49805 20.8496 12.9092c-47.6396 4.76074 -83.0996 51.4805 -68.8301 102.53
|
4635 |
+
c6.80762 23.4512 31.4482 47.7197 55 54.1699zM352 316c11.04 0 20 8.95996 20 20s-8.95996 20 -20 20s-20 -8.95996 -20 -20s8.95996 -20 20 -20z" />
|
4636 |
+
<glyph glyph-name="spell-check" unicode="" horiz-adv-x="576"
|
4637 |
+
d="M272 192c-8.83203 0 -16 7.16797 -16 16v224c0 8.83203 7.16797 16 16 16h75c42.2998 0 80.9004 -30.5703 84.6699 -72.6797c0.186523 -2.02051 0.337891 -5.30762 0.337891 -7.33691c0 -11.0186 -4.20996 -27.8516 -9.39746 -37.5732
|
4638 |
+
c14.0186 -13.0674 25.3965 -39.2256 25.3965 -58.3906c0 -1.29199 -0.0615234 -3.38867 -0.136719 -4.67969c-2.50977 -43.1396 -41.3105 -75.3398 -84.5098 -75.3398h-91.3604zM312 392v-48h40c13.248 0 24 10.752 24 24s-10.752 24 -24 24h-40zM312 296v-48h56
|
4639 |
+
c13.248 0 24 10.752 24 24s-10.752 24 -24 24h-56zM155.12 425.75l68.2998 -213.48c0.320312 -1.15625 0.580078 -3.06934 0.580078 -4.26953c0 -8.83203 -7.16797 -16 -16 -16v0h-24.9297h-0.000976562c-6.71875 0 -13.626 5.25488 -15.4189 11.7305l-11.9404 36.2695
|
4640 |
+
h-87.4199l-11.9404 -36.2695c-1.79297 -6.47559 -8.7002 -11.7305 -15.4189 -11.7305h-0.000976562h-24.9297c-8.82617 0.00488281 -15.9902 7.17383 -15.9902 16c0 1.2002 0.259766 3.11328 0.580078 4.26953l68.29 213.48c3.92871 12.2822 17.583 22.25 30.4785 22.25
|
4641 |
+
h0.00195312h25.2793h0.00195312c12.8955 0 26.5498 -9.96777 30.4785 -22.25zM89.3701 304h45.2598l-22.6299 68.7002zM571.37 171.52c2.58203 -2.58594 4.65723 -7.65039 4.65723 -11.3047c0 -3.64551 -2.08594 -8.70117 -4.65723 -11.2852l-208 -208.21
|
4642 |
+
c-2.5752 -2.60449 -7.6377 -4.71777 -11.2998 -4.71777c-3.66309 0 -8.72559 2.11328 -11.3008 4.71777l-112 112.21c-2.57617 2.58496 -4.66699 7.64551 -4.66699 11.2949c0 3.65039 2.09082 8.70996 4.66699 11.2949l45.3008 45.3008
|
4643 |
+
c2.57324 2.60352 7.63379 4.71777 11.2949 4.71777s8.72168 -2.11426 11.2949 -4.71777l55.4102 -55.5l151.5 151.5c2.57324 2.60352 7.63379 4.71777 11.2949 4.71777s8.72168 -2.11426 11.2949 -4.71777z" />
|
4644 |
+
<glyph glyph-name="voicemail" unicode="" horiz-adv-x="640"
|
4645 |
+
d="M496 320c79.4883 0 144 -64.5117 144 -144s-64.5117 -144 -144 -144h-352c-79.4844 0.00390625 -143.993 64.5156 -143.993 144c0 79.4883 64.5117 144 144 144s144 -64.5117 144 -144c0 -24.1113 -10.8711 -59.9512 -24.2666 -80h112.52
|
4646 |
+
c-13.3955 20.0488 -24.2666 55.8887 -24.2666 80c0 79.4883 64.5117 144 144 144h0.00683594zM64 176c0 -44.1602 35.8398 -80 80 -80s80 35.8398 80 80s-35.8398 80 -80 80s-80 -35.8398 -80 -80zM496 96c44.1602 0 80 35.8398 80 80s-35.8398 80 -80 80
|
4647 |
+
s-80 -35.8398 -80 -80s35.8398 -80 80 -80z" />
|
4648 |
</font>
|
4649 |
</defs></svg>
|
fonts/fontawesome/webfonts/fa-solid-900.ttf
CHANGED
Binary file
|
fonts/fontawesome/webfonts/fa-solid-900.woff
CHANGED
Binary file
|
fonts/fontawesome/webfonts/fa-solid-900.woff2
CHANGED
Binary file
|
includes/admin-settings-tools.php
CHANGED
@@ -24,7 +24,13 @@
|
|
24 |
include FL_BUILDER_CACHE_HELPER_DIR . 'includes/admin-settings-cache-plugins.php';
|
25 |
}
|
26 |
|
27 |
-
$debug =
|
|
|
|
|
|
|
|
|
|
|
|
|
28 |
?>
|
29 |
<?php $header = ( $debug ) ? __( 'Debug Mode Enabled', 'fl-builder' ) : __( 'Debug Mode Disabled', 'fl-builder' ); ?>
|
30 |
<h3 class="fl-settings-form-header"><?php echo $header; ?></h3>
|
@@ -43,7 +49,7 @@
|
|
43 |
), site_url() );
|
44 |
?>
|
45 |
<p><?php printf( '<code>%s</code>', $url ); ?></p>
|
46 |
-
|
47 |
<?php endif; ?>
|
48 |
</div>
|
49 |
<p class="submit">
|
24 |
include FL_BUILDER_CACHE_HELPER_DIR . 'includes/admin-settings-cache-plugins.php';
|
25 |
}
|
26 |
|
27 |
+
$debug = get_transient( 'fl_debug_mode' );
|
28 |
+
if ( $debug ) {
|
29 |
+
$expire_opt = get_option( '_transient_timeout_fl_debug_mode' );
|
30 |
+
$datetime1 = new DateTime( 'now' );
|
31 |
+
$datetime2 = new DateTime( date( 'Y-m-d H:i:s', $expire_opt ) );
|
32 |
+
$interval = $datetime1->diff( $datetime2 );
|
33 |
+
}
|
34 |
?>
|
35 |
<?php $header = ( $debug ) ? __( 'Debug Mode Enabled', 'fl-builder' ) : __( 'Debug Mode Disabled', 'fl-builder' ); ?>
|
36 |
<h3 class="fl-settings-form-header"><?php echo $header; ?></h3>
|
49 |
), site_url() );
|
50 |
?>
|
51 |
<p><?php printf( '<code>%s</code>', $url ); ?></p>
|
52 |
+
<p><?php printf( 'Link will expire in <strong>%s</strong>', $interval->format( '%d days %h hours %i minutes' ) ); ?></p>
|
53 |
<?php endif; ?>
|
54 |
</div>
|
55 |
<p class="submit">
|
includes/column-settings.php
CHANGED
@@ -469,6 +469,10 @@ FLBuilder::register_settings_form('col', array(
|
|
469 |
'type' => 'select',
|
470 |
'label' => __( 'Container Element', 'fl-builder' ),
|
471 |
'default' => 'div',
|
|
|
|
|
|
|
|
|
472 |
'options' => apply_filters( 'fl_builder_node_container_element_options', array(
|
473 |
'div' => '<div>',
|
474 |
'section' => '<section>',
|
469 |
'type' => 'select',
|
470 |
'label' => __( 'Container Element', 'fl-builder' ),
|
471 |
'default' => 'div',
|
472 |
+
/**
|
473 |
+
* Filter to add/remove container types.
|
474 |
+
* @see fl_builder_node_container_element_options
|
475 |
+
*/
|
476 |
'options' => apply_filters( 'fl_builder_node_container_element_options', array(
|
477 |
'div' => '<div>',
|
478 |
'section' => '<section>',
|
includes/compatibility.php
CHANGED
@@ -643,3 +643,204 @@ function fl_fix_sumo( $option ) {
|
|
643 |
}
|
644 |
return $option;
|
645 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
643 |
}
|
644 |
return $option;
|
645 |
}
|
646 |
+
|
647 |
+
/**
|
648 |
+
* Fix icon issues with Frontend Dashboard version 1.3.4+
|
649 |
+
* @since 2.2.3
|
650 |
+
*/
|
651 |
+
add_action( 'template_redirect', 'fix_frontend_dashboard_plugin', 1000 );
|
652 |
+
function fix_frontend_dashboard_plugin() {
|
653 |
+
if ( FLBuilderModel::is_builder_active() ) {
|
654 |
+
remove_action( 'wp_enqueue_scripts', 'fed_script_front_end', 99 );
|
655 |
+
}
|
656 |
+
}
|
657 |
+
|
658 |
+
/**
|
659 |
+
* Add data-no-lazy to photo modules in themer header area.
|
660 |
+
* Fixes wp-rocket lazy load issue with shrink header.
|
661 |
+
* @since 2.2.3
|
662 |
+
*/
|
663 |
+
add_action( 'fl_theme_builder_before_render_header', 'fix_lazyload_header_start' );
|
664 |
+
function fix_lazyload_header_start() {
|
665 |
+
add_filter( 'fl_builder_photo_attributes', 'fix_lazyload_header_attributes' );
|
666 |
+
}
|
667 |
+
function fix_lazyload_header_attributes( $attrs ) {
|
668 |
+
return $attrs . ' data-no-lazy="1"';
|
669 |
+
}
|
670 |
+
add_action( 'fl_theme_builder_after_render_header', 'fix_lazyload_header_end' );
|
671 |
+
function fix_lazyload_header_end() {
|
672 |
+
remove_filter( 'fl_builder_photo_attributes', 'fix_lazyload_header_attributes' );
|
673 |
+
}
|
674 |
+
|
675 |
+
/**
|
676 |
+
* Fix JS error caused by UM-Switcher plugin
|
677 |
+
* @since 2.2.3
|
678 |
+
*/
|
679 |
+
add_action( 'template_redirect', 'fl_fix_um_switcher' );
|
680 |
+
function fl_fix_um_switcher() {
|
681 |
+
if ( isset( $_GET['fl_builder'] ) ) {
|
682 |
+
remove_action( 'wp_footer', 'umswitcher_profile_subscription_expiration_footer' );
|
683 |
+
}
|
684 |
+
}
|
685 |
+
|
686 |
+
/**
|
687 |
+
* Fix pipedrive chat popup
|
688 |
+
* @since 2.2.4
|
689 |
+
*/
|
690 |
+
add_action( 'template_redirect', 'fl_fix_pipedrive' );
|
691 |
+
function fl_fix_pipedrive() {
|
692 |
+
if ( isset( $_GET['fl_builder'] ) ) {
|
693 |
+
remove_action( 'wp_head', 'pipedrive_add_embed_code' );
|
694 |
+
}
|
695 |
+
}
|
696 |
+
|
697 |
+
/**
|
698 |
+
* Fix post type switcher
|
699 |
+
* @since 2.2.4
|
700 |
+
*/
|
701 |
+
add_action( 'admin_init', 'fl_fix_posttypeswitcher' );
|
702 |
+
function fl_fix_posttypeswitcher() {
|
703 |
+
global $pagenow;
|
704 |
+
$disable = false;
|
705 |
+
if ( 'edit.php' === $pagenow && isset( $_GET['post_type'] ) && 'fl-theme-layout' === $_GET['post_type'] ) {
|
706 |
+
$disable = true;
|
707 |
+
}
|
708 |
+
if ( 'post.php' === $pagenow && isset( $_GET['post'] ) && ( 'fl-theme-layout' === get_post_type( $_GET['post'] ) || 'fl-builder-template' === get_post_type( $_GET['post'] ) ) ) {
|
709 |
+
$disable = true;
|
710 |
+
}
|
711 |
+
if ( $disable ) {
|
712 |
+
add_filter( 'pts_allowed_pages', '__return_empty_array' );
|
713 |
+
}
|
714 |
+
}
|
715 |
+
|
716 |
+
/**
|
717 |
+
* Fixes for Google Reviews Business Plugin widget
|
718 |
+
* @since 2.2.4
|
719 |
+
*/
|
720 |
+
add_action( 'widgets_init', 'fix_google_reviews_business_widget', 11 );
|
721 |
+
function fix_google_reviews_business_widget() {
|
722 |
+
if ( isset( $_GET['fl_builder'] ) ) {
|
723 |
+
unregister_widget( 'Goog_Reviews_Pro' );
|
724 |
+
}
|
725 |
+
}
|
726 |
+
/**
|
727 |
+
* Fixes for Google Reviews Business Plugin shortcode
|
728 |
+
* @since 2.2.4
|
729 |
+
*/
|
730 |
+
add_action( 'init', 'fix_google_reviews_business_shortcode' );
|
731 |
+
function fix_google_reviews_business_shortcode() {
|
732 |
+
if ( isset( $_GET['fl_builder'] ) ) {
|
733 |
+
remove_shortcode( 'google-reviews-pro' );
|
734 |
+
}
|
735 |
+
}
|
736 |
+
|
737 |
+
/**
|
738 |
+
* Fix pagination on category archive layout.
|
739 |
+
* @since 2.2.4
|
740 |
+
*/
|
741 |
+
function fl_theme_builder_cat_archive_post_grid( $query ) {
|
742 |
+
if ( ! $query ) {
|
743 |
+
return;
|
744 |
+
}
|
745 |
+
|
746 |
+
if ( ! class_exists( 'FLThemeBuilder' ) ) {
|
747 |
+
return;
|
748 |
+
}
|
749 |
+
|
750 |
+
if ( is_admin() || ! $query->is_main_query() ) {
|
751 |
+
return;
|
752 |
+
}
|
753 |
+
|
754 |
+
if ( ! $query->is_archive || ! $query->is_category ) {
|
755 |
+
return;
|
756 |
+
}
|
757 |
+
|
758 |
+
$args = array(
|
759 |
+
'post_type' => 'fl-theme-layout',
|
760 |
+
'post_status' => 'publish',
|
761 |
+
'fields' => 'ids',
|
762 |
+
'meta_query' => array(
|
763 |
+
'relation' => 'OR',
|
764 |
+
array(
|
765 |
+
'key' => '_fl_theme_builder_locations',
|
766 |
+
'value' => 'general:site',
|
767 |
+
'compare' => 'LIKE',
|
768 |
+
),
|
769 |
+
array(
|
770 |
+
'key' => '_fl_theme_builder_locations',
|
771 |
+
'value' => 'taxonomy:category',
|
772 |
+
'compare' => 'LIKE',
|
773 |
+
),
|
774 |
+
array(
|
775 |
+
'key' => '_fl_theme_builder_locations',
|
776 |
+
'value' => 'general:archive',
|
777 |
+
'compare' => 'LIKE',
|
778 |
+
),
|
779 |
+
),
|
780 |
+
);
|
781 |
+
$post_grid = null;
|
782 |
+
$object = null;
|
783 |
+
$exclusions = array();
|
784 |
+
|
785 |
+
if ( $query->get( 'cat' ) ) {
|
786 |
+
$term = get_term( $query->get( 'cat' ), 'category' );
|
787 |
+
} elseif ( $query->get( 'category_name' ) ) {
|
788 |
+
$term = get_term_by( 'slug', $query->get( 'category_name' ), 'category' );
|
789 |
+
}
|
790 |
+
|
791 |
+
if ( ! empty( $term ) && ! is_wp_error( $term ) ) {
|
792 |
+
$term_id = (int) $term->term_id;
|
793 |
+
$object = 'taxonomy:category:' . $term_id;
|
794 |
+
$args['meta_query'][] = array(
|
795 |
+
'key' => '_fl_theme_builder_locations',
|
796 |
+
'value' => $object,
|
797 |
+
'compare' => 'LIKE',
|
798 |
+
);
|
799 |
+
}
|
800 |
+
|
801 |
+
$layout_query = new WP_Query( $args );
|
802 |
+
if ( $layout_query->post_count > 0 ) {
|
803 |
+
|
804 |
+
foreach ( $layout_query->posts as $i => $post_id ) {
|
805 |
+
$exclusions = FLThemeBuilderRulesLocation::get_saved_exclusions( $post_id );
|
806 |
+
$exclude = false;
|
807 |
+
|
808 |
+
if ( $object && in_array( $object, $exclusions ) ) {
|
809 |
+
$exclude = true;
|
810 |
+
} elseif ( in_array( 'taxonomy:category', $exclusions ) ) {
|
811 |
+
$exclude = true;
|
812 |
+
} elseif ( in_array( 'general:archive', $exclusions ) ) {
|
813 |
+
$exclude = true;
|
814 |
+
}
|
815 |
+
|
816 |
+
if ( ! $exclude ) {
|
817 |
+
$data = FLBuilderModel::get_layout_data( 'published', $post_id );
|
818 |
+
if ( ! empty( $data ) ) {
|
819 |
+
|
820 |
+
foreach ( $data as $node_id => $node ) {
|
821 |
+
|
822 |
+
if ( 'module' != $node->type ) {
|
823 |
+
continue;
|
824 |
+
}
|
825 |
+
|
826 |
+
if ( ! isset( $node->settings->type ) || 'post-grid' != $node->settings->type ) {
|
827 |
+
continue;
|
828 |
+
}
|
829 |
+
|
830 |
+
// Check for `post-grid` with custom query source.
|
831 |
+
if ( 'custom_query' == $node->settings->data_source ) {
|
832 |
+
$post_grid = FLBuilderLoop::custom_query( $node->settings );
|
833 |
+
break;
|
834 |
+
}
|
835 |
+
}
|
836 |
+
}
|
837 |
+
}
|
838 |
+
|
839 |
+
if ( $post_grid ) {
|
840 |
+
break;
|
841 |
+
}
|
842 |
+
}
|
843 |
+
}
|
844 |
+
|
845 |
+
return $post_grid;
|
846 |
+
}
|
includes/global-settings.php
CHANGED
@@ -227,7 +227,7 @@ FLBuilder::register_settings_form('global', array(
|
|
227 |
'size' => '5',
|
228 |
'description' => 'px',
|
229 |
'sanitize' => 'absint',
|
230 |
-
'help' => __( 'When typography unit is set to vh/
|
231 |
),
|
232 |
),
|
233 |
),
|
227 |
'size' => '5',
|
228 |
'description' => 'px',
|
229 |
'sanitize' => 'absint',
|
230 |
+
'help' => __( 'When typography unit is set to vh/vw this unit will be used to calculate the font size.', 'fl-builder' ),
|
231 |
),
|
232 |
),
|
233 |
),
|
includes/module-settings.php
CHANGED
@@ -103,6 +103,10 @@ FLBuilder::register_settings_form('module_advanced', array(
|
|
103 |
'type' => 'select',
|
104 |
'label' => __( 'Container Element', 'fl-builder' ),
|
105 |
'default' => 'div',
|
|
|
|
|
|
|
|
|
106 |
'options' => apply_filters( 'fl_builder_node_container_element_options', array(
|
107 |
'div' => '<div>',
|
108 |
'section' => '<section>',
|
103 |
'type' => 'select',
|
104 |
'label' => __( 'Container Element', 'fl-builder' ),
|
105 |
'default' => 'div',
|
106 |
+
/**
|
107 |
+
* Filter to add/remove container types.
|
108 |
+
* @see fl_builder_node_container_element_options
|
109 |
+
*/
|
110 |
'options' => apply_filters( 'fl_builder_node_container_element_options', array(
|
111 |
'div' => '<div>',
|
112 |
'section' => '<section>',
|
includes/row-settings.php
CHANGED
@@ -73,7 +73,7 @@ $row_settings = array(
|
|
73 |
'full' => __( 'Full Height', 'fl-builder' ),
|
74 |
'custom' => __( 'Minimum Height', 'fl-builder' ),
|
75 |
),
|
76 |
-
'help' => __( 'Full height rows fill the height of the browser window. Minimum height rows are
|
77 |
'toggle' => array(
|
78 |
'full' => array(
|
79 |
'fields' => array( 'content_alignment' ),
|
@@ -746,6 +746,10 @@ $row_settings = array(
|
|
746 |
'type' => 'select',
|
747 |
'label' => __( 'Container Element', 'fl-builder' ),
|
748 |
'default' => apply_filters( 'fl_builder_row_container_element_default', 'div' ),
|
|
|
|
|
|
|
|
|
749 |
'options' => apply_filters( 'fl_builder_node_container_element_options', array(
|
750 |
'div' => '<div>',
|
751 |
'section' => '<section>',
|
73 |
'full' => __( 'Full Height', 'fl-builder' ),
|
74 |
'custom' => __( 'Minimum Height', 'fl-builder' ),
|
75 |
),
|
76 |
+
'help' => __( 'Full height rows fill the height of the browser window. Minimum height rows are at least as tall as the value entered.', 'fl-builder' ),
|
77 |
'toggle' => array(
|
78 |
'full' => array(
|
79 |
'fields' => array( 'content_alignment' ),
|
746 |
'type' => 'select',
|
747 |
'label' => __( 'Container Element', 'fl-builder' ),
|
748 |
'default' => apply_filters( 'fl_builder_row_container_element_default', 'div' ),
|
749 |
+
/**
|
750 |
+
* Filter to add/remove container types.
|
751 |
+
* @see fl_builder_node_container_element_options
|
752 |
+
*/
|
753 |
'options' => apply_filters( 'fl_builder_node_container_element_options', array(
|
754 |
'div' => '<div>',
|
755 |
'section' => '<section>',
|
includes/ui-bar.php
CHANGED
@@ -1,3 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
<div class="fl-builder-bar">
|
2 |
<div class="fl-builder-bar-content">
|
3 |
<?php FLBuilder::render_ui_bar_title(); ?>
|
@@ -6,15 +20,15 @@
|
|
6 |
<div class="fl-builder-publish-actions-click-away-mask"></div>
|
7 |
<div class="fl-builder-publish-actions is-hidden">
|
8 |
<span class="fl-builder-button-group">
|
9 |
-
<span class="fl-builder-button fl-builder-button-primary" data-action="discard" title="<?php
|
10 |
-
<span class="fl-builder-button fl-builder-button-primary" data-action="draft" title="<?php
|
11 |
<# if( 'publish' !== FLBuilderConfig.postStatus && ! FLBuilderConfig.userCanPublish ) { #>
|
12 |
-
<span class="fl-builder-button fl-builder-button-primary" data-action="publish" title="<?php
|
13 |
<# } else { #>
|
14 |
-
<span class="fl-builder-button fl-builder-button-primary" data-action="publish" title="<?php
|
15 |
<# } #>
|
16 |
</span>
|
17 |
-
<span class="fl-builder-button" data-action="dismiss"><?php
|
18 |
</div>
|
19 |
</div>
|
20 |
</div>
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Button texts
|
4 |
+
*/
|
5 |
+
$discard = apply_filters( 'fl_builder_ui_bar_discard', __( 'Discard', 'fl-builder' ) );
|
6 |
+
$discard_alt = apply_filters( 'fl_builder_ui_bar_discard_alt', __( 'Discard changes and exit', 'fl-builder' ) );
|
7 |
+
$draft = apply_filters( 'fl_builder_ui_bar_draft', __( 'Save Draft', 'fl-builder' ) );
|
8 |
+
$draft_alt = apply_filters( 'fl_builder_ui_bar_draft_alt', __( 'Keep changes drafted and exit', 'fl-builder' ) );
|
9 |
+
$review = apply_filters( 'fl_builder_ui_bar_review', __( 'Submit for Review', 'fl-builder' ) );
|
10 |
+
$review_alt = apply_filters( 'fl_builder_ui_bar_review_alt', __( 'Submit changes for review and exit', 'fl-builder' ) );
|
11 |
+
$publish = apply_filters( 'fl_builder_ui_bar_publish', __( 'Publish', 'fl-builder' ) );
|
12 |
+
$publish_alt = apply_filters( 'fl_builder_ui_bar_publish_alt', __( 'Publish changes and exit', 'fl-builder' ) );
|
13 |
+
$cancel = apply_filters( 'fl_builder_ui_bar_cancel', __( 'Cancel', 'fl-builder' ) );
|
14 |
+
?>
|
15 |
<div class="fl-builder-bar">
|
16 |
<div class="fl-builder-bar-content">
|
17 |
<?php FLBuilder::render_ui_bar_title(); ?>
|
20 |
<div class="fl-builder-publish-actions-click-away-mask"></div>
|
21 |
<div class="fl-builder-publish-actions is-hidden">
|
22 |
<span class="fl-builder-button-group">
|
23 |
+
<span class="fl-builder-button fl-builder-button-primary" data-action="discard" title="<?php echo esc_attr( $discard_alt ); ?>"><?php echo esc_attr( $discard ); ?></span>
|
24 |
+
<span class="fl-builder-button fl-builder-button-primary" data-action="draft" title="<?php echo esc_attr( $draft_alt ); ?>"><?php echo esc_attr( $draft ); ?></span>
|
25 |
<# if( 'publish' !== FLBuilderConfig.postStatus && ! FLBuilderConfig.userCanPublish ) { #>
|
26 |
+
<span class="fl-builder-button fl-builder-button-primary" data-action="publish" title="<?php echo esc_attr( $review_alt ); ?>"><?php echo esc_attr( $review ); ?></span>
|
27 |
<# } else { #>
|
28 |
+
<span class="fl-builder-button fl-builder-button-primary" data-action="publish" title="<?php echo esc_attr( $publish_alt ); ?>"><?php echo esc_attr( $publish ); ?></span>
|
29 |
<# } #>
|
30 |
</span>
|
31 |
+
<span class="fl-builder-button" data-action="dismiss"><?php echo esc_attr( $cancel ); ?></span>
|
32 |
</div>
|
33 |
</div>
|
34 |
</div>
|
includes/ui-js-config.php
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
* Filter main UI JS config.
|
5 |
* @see fl_builder_ui_js_config
|
6 |
*/
|
7 |
-
echo 'FLBuilderConfig = ' . json_encode( apply_filters('fl_builder_ui_js_config', array(
|
8 |
'adminUrl' => admin_url(),
|
9 |
'ajaxNonce' => wp_create_nonce( 'fl_ajax_update' ),
|
10 |
'builderEnabled' => get_post_meta( $post_id, '_fl_builder_enabled', true ) ? true : false,
|
@@ -20,6 +20,7 @@ echo 'FLBuilderConfig = ' . json_encode( apply_filters('fl_builder_
|
|
20 |
'isUserTemplate' => false,
|
21 |
'lite' => true === FL_BUILDER_LITE,
|
22 |
'modSecFix' => ( defined( 'FL_BUILDER_MODSEC_FIX' ) && FL_BUILDER_MODSEC_FIX ),
|
|
|
23 |
'moduleGroups' => FLBuilderModel::get_module_groups(),
|
24 |
'nestedColumns' => ( ! defined( 'FL_BUILDER_NESTED_COLUMNS' ) || FL_BUILDER_NESTED_COLUMNS ),
|
25 |
'newUser' => FLBuilderModel::is_new_user(),
|
@@ -68,7 +69,7 @@ echo 'FLBuilderConfig = ' . json_encode( apply_filters('fl_builder_
|
|
68 |
* Filter UI JS Strings.
|
69 |
* @see fl_builder_ui_js_strings
|
70 |
*/
|
71 |
-
echo 'FLBuilderStrings = ' . json_encode( apply_filters('fl_builder_ui_js_strings', array(
|
72 |
'actionsLightboxTitle' => esc_attr__( 'What would you like to do?', 'fl-builder' ),
|
73 |
/* translators: %s: field name */
|
74 |
'addField' => esc_attr_x( 'Add %s', 'Field name to add.', 'fl-builder' ),
|
4 |
* Filter main UI JS config.
|
5 |
* @see fl_builder_ui_js_config
|
6 |
*/
|
7 |
+
echo 'FLBuilderConfig = ' . FLBuilderUtils::json_encode( apply_filters('fl_builder_ui_js_config', array(
|
8 |
'adminUrl' => admin_url(),
|
9 |
'ajaxNonce' => wp_create_nonce( 'fl_ajax_update' ),
|
10 |
'builderEnabled' => get_post_meta( $post_id, '_fl_builder_enabled', true ) ? true : false,
|
20 |
'isUserTemplate' => false,
|
21 |
'lite' => true === FL_BUILDER_LITE,
|
22 |
'modSecFix' => ( defined( 'FL_BUILDER_MODSEC_FIX' ) && FL_BUILDER_MODSEC_FIX ),
|
23 |
+
'MaxInputVars' => FL_Debug::safe_ini_get( 'max_input_vars' ),
|
24 |
'moduleGroups' => FLBuilderModel::get_module_groups(),
|
25 |
'nestedColumns' => ( ! defined( 'FL_BUILDER_NESTED_COLUMNS' ) || FL_BUILDER_NESTED_COLUMNS ),
|
26 |
'newUser' => FLBuilderModel::is_new_user(),
|
69 |
* Filter UI JS Strings.
|
70 |
* @see fl_builder_ui_js_strings
|
71 |
*/
|
72 |
+
echo 'FLBuilderStrings = ' . FLBuilderUtils::json_encode( apply_filters('fl_builder_ui_js_strings', array(
|
73 |
'actionsLightboxTitle' => esc_attr__( 'What would you like to do?', 'fl-builder' ),
|
74 |
/* translators: %s: field name */
|
75 |
'addField' => esc_attr_x( 'Add %s', 'Field name to add.', 'fl-builder' ),
|
includes/ui-js-templates.php
CHANGED
@@ -51,8 +51,10 @@
|
|
51 |
<i class="fl-block-copy fl-block-col-copy far fa-clone fl-tip" title="<?php _e( 'Duplicate', 'fl-builder' ); ?>"></i>
|
52 |
<# } #>
|
53 |
<# } #>
|
|
|
54 |
<span class="fl-builder-has-submenu">
|
55 |
<i class="fl-block-settings fas fa-columns fl-tip" title="<?php _e( 'Edit Column', 'fl-builder' ); ?>"></i>
|
|
|
56 |
<# if ( ! data.global || ( data.global && FLBuilderConfig.userTemplateType ) ) { #>
|
57 |
<ul class="fl-builder-submenu fl-block-col-submenu">
|
58 |
<li><a class="fl-block-col-edit" href="javascript:void(0);"><?php _e( 'Column Settings', 'fl-builder' ); ?></a></li>
|
@@ -71,7 +73,9 @@
|
|
71 |
<# } #>
|
72 |
</ul>
|
73 |
<# } #>
|
|
|
74 |
</span>
|
|
|
75 |
<# if ( ! data.isRootCol ) { #>
|
76 |
<i class="fl-block-remove fas fa-times fl-tip" title="<?php _e( 'Remove', 'fl-builder' ); ?>"></i>
|
77 |
<# } #>
|
@@ -808,7 +812,7 @@
|
|
808 |
<# if (FLBuilderConfig.lite) { #>
|
809 |
<div class="fl-builder--panel-message">
|
810 |
<p><?php _ex( 'Save and reuse your layouts or kick-start your creativity with dozens of professionally designed templates.', 'Upgrade message that displays in the templates tab in lite installs.', 'fl-builder' ); ?></p>
|
811 |
-
<a class="fl-builder-upgrade-button fl-builder-button" href="{{FLBuilderConfig.upgradeUrl}}" target="_blank"><?php _ex( 'Learn More', 'Link to learn more about premium
|
812 |
</div>
|
813 |
<# } #>
|
814 |
<#
|
@@ -992,7 +996,7 @@
|
|
992 |
<script type="text/html" id="tmpl-fl-content-lite-templates-upgrade-view">
|
993 |
<div class="fl-builder--panel-message">
|
994 |
<p><?php _ex( 'Save and reuse your layouts or kick-start your creativity with dozens of professionally designed templates.', 'Upgrade message that displays in the templates tab in lite installs.', 'fl-builder' ); ?></p>
|
995 |
-
<a class="fl-builder-upgrade-button fl-builder-button" href="{{FLBuilderConfig.upgradeUrl}}" target="_blank"><?php _ex( 'Learn More', 'Link to learn more about premium
|
996 |
</div>
|
997 |
</script>
|
998 |
<!-- #tmpl-fl-content-lite-templates-upgrade-view -->
|
51 |
<i class="fl-block-copy fl-block-col-copy far fa-clone fl-tip" title="<?php _e( 'Duplicate', 'fl-builder' ); ?>"></i>
|
52 |
<# } #>
|
53 |
<# } #>
|
54 |
+
<?php endif; ?>
|
55 |
<span class="fl-builder-has-submenu">
|
56 |
<i class="fl-block-settings fas fa-columns fl-tip" title="<?php _e( 'Edit Column', 'fl-builder' ); ?>"></i>
|
57 |
+
<?php if ( ! $simple_ui ) : ?>
|
58 |
<# if ( ! data.global || ( data.global && FLBuilderConfig.userTemplateType ) ) { #>
|
59 |
<ul class="fl-builder-submenu fl-block-col-submenu">
|
60 |
<li><a class="fl-block-col-edit" href="javascript:void(0);"><?php _e( 'Column Settings', 'fl-builder' ); ?></a></li>
|
73 |
<# } #>
|
74 |
</ul>
|
75 |
<# } #>
|
76 |
+
<?php endif; ?>
|
77 |
</span>
|
78 |
+
<?php if ( ! $simple_ui ) : ?>
|
79 |
<# if ( ! data.isRootCol ) { #>
|
80 |
<i class="fl-block-remove fas fa-times fl-tip" title="<?php _e( 'Remove', 'fl-builder' ); ?>"></i>
|
81 |
<# } #>
|
812 |
<# if (FLBuilderConfig.lite) { #>
|
813 |
<div class="fl-builder--panel-message">
|
814 |
<p><?php _ex( 'Save and reuse your layouts or kick-start your creativity with dozens of professionally designed templates.', 'Upgrade message that displays in the templates tab in lite installs.', 'fl-builder' ); ?></p>
|
815 |
+
<a class="fl-builder-upgrade-button fl-builder-button" href="{{FLBuilderConfig.upgradeUrl}}" target="_blank"><?php _ex( 'Learn More', 'Link to learn more about premium Beaver Builder', 'fl-builder' ); ?> <i class="fas fa-external-link-alt"></i></a>
|
816 |
</div>
|
817 |
<# } #>
|
818 |
<#
|
996 |
<script type="text/html" id="tmpl-fl-content-lite-templates-upgrade-view">
|
997 |
<div class="fl-builder--panel-message">
|
998 |
<p><?php _ex( 'Save and reuse your layouts or kick-start your creativity with dozens of professionally designed templates.', 'Upgrade message that displays in the templates tab in lite installs.', 'fl-builder' ); ?></p>
|
999 |
+
<a class="fl-builder-upgrade-button fl-builder-button" href="{{FLBuilderConfig.upgradeUrl}}" target="_blank"><?php _ex( 'Learn More', 'Link to learn more about premium Beaver Builder', 'fl-builder' ); ?> <i class="fas fa-external-link-alt"></i></a>
|
1000 |
</div>
|
1001 |
</script>
|
1002 |
<!-- #tmpl-fl-content-lite-templates-upgrade-view -->
|
includes/ui-settings-config.php
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
( function( $ ) {
|
2 |
FLBuilderSettingsConfig = 'undefined' === typeof FLBuilderSettingsConfig ? {} : FLBuilderSettingsConfig;
|
3 |
-
$.extend( FLBuilderSettingsConfig, <?php echo json_encode( $settings ); ?> );
|
4 |
if ( 'undefined' !== typeof FLBuilder ) {
|
5 |
FLBuilder.triggerHook( 'settingsConfigLoaded' );
|
6 |
}
|
1 |
( function( $ ) {
|
2 |
FLBuilderSettingsConfig = 'undefined' === typeof FLBuilderSettingsConfig ? {} : FLBuilderSettingsConfig;
|
3 |
+
$.extend( FLBuilderSettingsConfig, <?php echo FLBuilderUtils::json_encode( $settings ); ?> );
|
4 |
if ( 'undefined' !== typeof FLBuilder ) {
|
5 |
FLBuilder.triggerHook( 'settingsConfigLoaded' );
|
6 |
}
|
includes/updater-config.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
if ( class_exists( 'FLUpdater' ) ) {
|
4 |
FLUpdater::add_product(array(
|
5 |
'name' => 'Beaver Builder Plugin (Lite Version)',
|
6 |
-
'version' => '2.2.
|
7 |
'slug' => 'bb-plugin',
|
8 |
'type' => 'plugin',
|
9 |
));
|
3 |
if ( class_exists( 'FLUpdater' ) ) {
|
4 |
FLUpdater::add_product(array(
|
5 |
'name' => 'Beaver Builder Plugin (Lite Version)',
|
6 |
+
'version' => '2.2.4.3',
|
7 |
'slug' => 'bb-plugin',
|
8 |
'type' => 'plugin',
|
9 |
));
|
includes/updater/includes/form.php
CHANGED
@@ -72,7 +72,7 @@
|
|
72 |
<input type="button" class="button button-primary" value="<?php esc_attr_e( 'Enter License Key', 'fl-builder' ); ?>">
|
73 |
</p>
|
74 |
</div>
|
75 |
-
|
76 |
<?php FLUpdater::render_subscriptions( $subscription ); ?>
|
77 |
|
78 |
</div>
|
72 |
<input type="button" class="button button-primary" value="<?php esc_attr_e( 'Enter License Key', 'fl-builder' ); ?>">
|
73 |
</p>
|
74 |
</div>
|
75 |
+
<?php do_action( 'fl_after_license_form'); ?>
|
76 |
<?php FLUpdater::render_subscriptions( $subscription ); ?>
|
77 |
|
78 |
</div>
|
includes/vendor/infusionsoft/isdk.php
CHANGED
@@ -9,7 +9,7 @@
|
|
9 |
*/
|
10 |
|
11 |
if (!function_exists('xmlrpc_encode_entitites')) {
|
12 |
-
include("xmlrpc
|
13 |
}
|
14 |
class iSDKException extends Exception
|
15 |
{
|
@@ -2629,4 +2629,4 @@ class iSDK
|
|
2629 |
|
2630 |
}
|
2631 |
|
2632 |
-
?>
|
9 |
*/
|
10 |
|
11 |
if (!function_exists('xmlrpc_encode_entitites')) {
|
12 |
+
include("xmlrpc/lib/xmlrpc.inc");
|
13 |
}
|
14 |
class iSDKException extends Exception
|
15 |
{
|
2629 |
|
2630 |
}
|
2631 |
|
2632 |
+
?>
|
includes/vendor/infusionsoft/xmlrpc-3.0/Changelog
DELETED
@@ -1,1573 +0,0 @@
|
|
1 |
-
2009-09-05 - G. Giunta (giunta.gaetano@gmail.com)
|
2 |
-
|
3 |
-
* xmlrpcs.inc, xmlrpcs.inc: remove code that was left for compatibility
|
4 |
-
with php 4; use __METHOD__ constant for error messages instead of hardcoded
|
5 |
-
values
|
6 |
-
|
7 |
-
* xmlrpcs.inc: catch exceptions thrown during execution of invoked methods;
|
8 |
-
check for $_SERVER having been disabled via php.ini and log an error if so
|
9 |
-
|
10 |
-
* server.php, testsuite.php: add a new test and server method for exception
|
11 |
-
catching in the server
|
12 |
-
|
13 |
-
* xmlrpc.inc: added new method SetUserAgent to client to allow having different
|
14 |
-
user-agent http headers
|
15 |
-
|
16 |
-
* tagged and released as 3.0.0 beta
|
17 |
-
|
18 |
-
2009-08-05 - G. Giunta (giunta.gaetano@gmail.com)
|
19 |
-
|
20 |
-
* xmlrpc_wrappers.inc: improve compatibility with php 5.0 when registering
|
21 |
-
class/object methods
|
22 |
-
|
23 |
-
2009-08-02 - G. Giunta (giunta.gaetano@gmail.com) thanks Laurens
|
24 |
-
|
25 |
-
* xmlrpcs.inc: add a new member var in server class to allow fine-tuning
|
26 |
-
of the encoding of returned values when the server is in 'phpvals' mode;
|
27 |
-
allow servers in 'xmlrpcvals' mode to also register plain php functions by
|
28 |
-
defining them in the dispatch map with an added option:
|
29 |
-
'parameters_type' => 'phpvals' (feature request #2806628)
|
30 |
-
|
31 |
-
* xmlrpc.inc: added new method xmrlpc_client::SetCurlOptions($array) to
|
32 |
-
allow extra flexibility in tweaking http config, such as explicitly
|
33 |
-
binding to an ip address (feature request #2787468); fix bad encoding if
|
34 |
-
same object is encoded twice using php_xmlrpc_encode; removed some by-ref
|
35 |
-
assignments and declarations
|
36 |
-
|
37 |
-
2009-07-31 - G. Giunta (giunta.gaetano@gmail.com)
|
38 |
-
|
39 |
-
* xmlrpc.inc: add support for dateTime objects in both in php_xmlrpc_encode
|
40 |
-
and as parameter for constructor of xmlrpcvals; add support for timestamps
|
41 |
-
as parameter for constructor of xmlrpcvals; add option 'dates_as_objects' to
|
42 |
-
php_xmlrpc_decode to return dateTime objects for xmlrpc datetimes
|
43 |
-
|
44 |
-
* benchmark.php, xmlrpc_wrappers.inc: remove usage of split(), deprecated in
|
45 |
-
php 5.3
|
46 |
-
|
47 |
-
* benchmark.php: fixed url of server page used for testing; improved
|
48 |
-
verification of correspondence of test results; added more variants for
|
49 |
-
http options comparison
|
50 |
-
|
51 |
-
* verify_compat.php: check for php version 5 for client side too
|
52 |
-
|
53 |
-
* makefile: remove from build the compat directory
|
54 |
-
|
55 |
-
2009-07-26 - G. Giunta (giunta.gaetano@gmail.com)
|
56 |
-
|
57 |
-
* server.php: remove usage of ereg*(), deprecated in php 5.3
|
58 |
-
|
59 |
-
2009-07-16 - G. Giunta (giunta.gaetano@gmail.com) thanks Jean-Jacques Sarton
|
60 |
-
|
61 |
-
* xmlrpc.inc: add support for the <ex:nil/> from the apache library, both
|
62 |
-
in input and output (feature request #...)
|
63 |
-
|
64 |
-
* xmlrpc.inc, testsuite.php: remove usage of split(), deprecated in php 5.3
|
65 |
-
|
66 |
-
* testsuite.php: flush better results with output_buffering on
|
67 |
-
|
68 |
-
* server: php: avoid one warning about static function calls
|
69 |
-
|
70 |
-
2009-07-02 - G. Giunta (giunta.gaetano@gmail.com) thanks Heiko Stuebner
|
71 |
-
|
72 |
-
* xmlrpc.inc: fix: when checking the parameters against the signatures xmlrpc
|
73 |
-
checks for "array" but PHP returns "Array" resulting in a not matches signature
|
74 |
-
|
75 |
-
2009-05-07 - G. Giunta (giunta.gaetano@gmail.com)
|
76 |
-
|
77 |
-
* replace all usage of '= & new' with '= new', as this is deprecated in php 5
|
78 |
-
and has been shown to cause problems too
|
79 |
-
|
80 |
-
2009-05-06 - G. Giunta (giunta.gaetano@gmail.com)
|
81 |
-
|
82 |
-
* create php4 branch, rename trunk to 3.0.0beta - it will be the php5-only version
|
83 |
-
|
84 |
-
* xmlrpc.inc: removed test for php version and inclusion of compat patches for really
|
85 |
-
really old versions of php 4
|
86 |
-
|
87 |
-
2009-03-16 - G. Giunta (giunta.gaetano@gmail.com) thanks Tommaso Trani
|
88 |
-
|
89 |
-
* move from CVS to SVN on sf.net; file layout now is the same as in packaged lib
|
90 |
-
|
91 |
-
* xmlrpc.inc: fix php warning when receiving 'false' in a bool value
|
92 |
-
|
93 |
-
* Makefile, doc/Makefile: alter to follow new file layout
|
94 |
-
|
95 |
-
* tagged and released as 2.2.2
|
96 |
-
|
97 |
-
2009-02-03 - G. Giunta (giunta.gaetano@gmail.com)
|
98 |
-
|
99 |
-
* debugger/action.php: improve code robustness when parsing system.listmethods
|
100 |
-
and system.describemethods call
|
101 |
-
|
102 |
-
* xmlrpc.inc: format floating point values using the correct decimal separator
|
103 |
-
even when php locale is set to one that uses comma (bug #2517579);
|
104 |
-
use feof() to test if socket connections are to be closed instead of the
|
105 |
-
number of bytes read (bug #2556209)
|
106 |
-
|
107 |
-
2008-10-29 - G. Giunta (giunta.gaetano@gmail.com)
|
108 |
-
|
109 |
-
* xmlrpcs.inc: allow add_to_map server method to add docs for single params, too
|
110 |
-
|
111 |
-
2008-09-20 - G. Giunta (giunta.gaetano@gmail.com)
|
112 |
-
|
113 |
-
* xmlrpc_wrappers.inc: added the possibility to wrap for exposure as xmlrpc
|
114 |
-
methods plain php class methods, object methods and even whole classes
|
115 |
-
|
116 |
-
* testsuite.php, server.php: added test cases for the new code
|
117 |
-
|
118 |
-
2008-09-07 - G. Giunta (giunta.gaetano@gmail.com) thanks Bruno Zanetti Melotti
|
119 |
-
|
120 |
-
* xmlrpc.inc: be more tolerant in detection of charset in http headers (fix for bug #2058158)
|
121 |
-
|
122 |
-
2008-04-05 - G. Giunta (giunta.gaetano@gmail.com)
|
123 |
-
|
124 |
-
* xmlrpc.inc: fix encoding of UTF8 chars outside of the BMP
|
125 |
-
|
126 |
-
* xmlrpcs.inc: fix detection of zlib.output_compression (thanks xbert)
|
127 |
-
|
128 |
-
2008-03-06 - G. Giunta (giunta.gaetano@gmail.com)
|
129 |
-
|
130 |
-
* tagged and released as 2.2.1
|
131 |
-
|
132 |
-
* Makefile: improve usage on windows xp despite cmd's broken mkdir
|
133 |
-
|
134 |
-
2007-10-26 - G. Giunta (giunta.gaetano@gmail.com) thanks sajo_raftman
|
135 |
-
|
136 |
-
* xmlrpc.inc: remove one warning in xmlrpc_client creator
|
137 |
-
|
138 |
-
2007-10-26 - G. Giunta (giunta.gaetano@gmail.com)
|
139 |
-
|
140 |
-
* xmlrpc.inc: improve support for windows cp1252 character set (still
|
141 |
-
commented in the code)
|
142 |
-
|
143 |
-
2007-09-05 - G. Giunta (giunta.gaetano@gmail.com)
|
144 |
-
|
145 |
-
* xmlrpc.inc, xmlrps.inc: do not try to set invalid charsets as output for
|
146 |
-
xml parser, even if user set them up for internal_encoding (helps encoding
|
147 |
-
to exotic charsets, while decoding to UTF8)
|
148 |
-
|
149 |
-
2007-09-05 - G. Giunta (giunta.gaetano@gmail.com)
|
150 |
-
|
151 |
-
* xmlrpc.inc: fix parsing of '1e+1' as valid float
|
152 |
-
|
153 |
-
2007-09-01 - G. Giunta (giunta.gaetano@gmail.com), thanks Frederic Lecointre
|
154 |
-
|
155 |
-
* xmlrpcs.inc: allow errorlevel 3 to work when prev. error handler was a static method
|
156 |
-
|
157 |
-
* testsuite.php: fix test on setCookie()
|
158 |
-
|
159 |
-
2007-08-31 - G. Giunta (giunta.gaetano@gmail.com)
|
160 |
-
|
161 |
-
* xmlrpc.inc: minor fix in cookie parsing
|
162 |
-
|
163 |
-
2007-07-31 - G. Giunta (giunta.gaetano@gmail.com)
|
164 |
-
|
165 |
-
* xmlrpc.inc: Fix usage of client::setcookie() for multiple cookies in non-ssl mode
|
166 |
-
|
167 |
-
2007-07-26 - G. Giunta (giunta.gaetano@gmail.com) thanks Mark Olive
|
168 |
-
|
169 |
-
* xmlrpc.inc: Fix for bug # 1756274 (usage of cookies in ssl mode)
|
170 |
-
|
171 |
-
2007-04-28 - G. Giunta (giunta.gaetano@gmail.com)
|
172 |
-
|
173 |
-
* xmlrpc.inc: give more detailed curl information when DEBUG = 2; fix handling
|
174 |
-
of case where curl w. keepalive is used and one connection of many fails
|
175 |
-
|
176 |
-
* testsuite improvements: add one testcase; give feedbcak while tests are
|
177 |
-
running
|
178 |
-
|
179 |
-
2007-04-01 - G. Giunta (giunta.gaetano@gmail.com)
|
180 |
-
|
181 |
-
* doc/makefile, doc/custom.fo.xsl: improve pdf rendering of php source code
|
182 |
-
|
183 |
-
* makefile: recover version number from source instead of having it hardcoded
|
184 |
-
|
185 |
-
2007-03-10 - G. Giunta (giunta.gaetano@gmail.com)
|
186 |
-
|
187 |
-
* doc/makefile, doc/convert.php, doc/*.xsl: created customizations xslt to
|
188 |
-
produce a documentation more in line with the php manual, esp. with regards
|
189 |
-
to functions synopsis; added jellyfish book cover as local resource and a
|
190 |
-
screenshot of the debugger too; various updates to the manual source; added
|
191 |
-
a php script to highlight examples inside html docs
|
192 |
-
|
193 |
-
2007-03-09 - G. Giunta (giunta.gaetano@gmail.com)
|
194 |
-
|
195 |
-
* debugger/action.php: css tweak for IE
|
196 |
-
|
197 |
-
* added phpunit license file in the phpunit directory
|
198 |
-
|
199 |
-
* added link to license (on sf.net site) to many files
|
200 |
-
|
201 |
-
2007-03-04 - G. Giunta (giunta.gaetano@gmail.com)
|
202 |
-
|
203 |
-
* Makefile, doc/makefile: assorted improvements
|
204 |
-
|
205 |
-
2007-03-03 - G. Giunta (giunta.gaetano@gmail.com)
|
206 |
-
|
207 |
-
* xmlrpc.inc: micro-optimization in declaration of global vars xmlrpcerr, xmlrpcstr
|
208 |
-
|
209 |
-
2007-02-25 Gaetano Giunta <giunta.gaetano@gmail.com>
|
210 |
-
|
211 |
-
* removed a couple of warnings emitted in testsuite.php
|
212 |
-
|
213 |
-
* doc/makefile: added command for invocation of xxe to generate docs
|
214 |
-
|
215 |
-
* better rendering of docs in xml+css format for function prototypes
|
216 |
-
|
217 |
-
* updated documentation
|
218 |
-
|
219 |
-
* tagged and released as 2.2
|
220 |
-
|
221 |
-
2007-02-22 Gaetano Giunta <giunta.gaetano@gmail.com>
|
222 |
-
|
223 |
-
* debugger: workaround for case of magic_quotes_gpc being set (properly
|
224 |
-
unescape user input); fix case of user not setting msg id in jsonrpc case
|
225 |
-
when executing a remote method; allow strings, false, true and null as msg id
|
226 |
-
|
227 |
-
2007-02-13 Gaetano Giunta <giunta.gaetano@gmail.com>
|
228 |
-
|
229 |
-
* testsuite.php: added one test for automatic encoding/decoding case
|
230 |
-
|
231 |
-
2007-02-05 Gaetano Giunta <giunta.gaetano@gmail.com>
|
232 |
-
|
233 |
-
* xmlrpc.inc: slightly faster encoding of UTF8 data to ascii
|
234 |
-
|
235 |
-
2007-01-11 Gaetano Giunta <giunta.gaetano@gmail.com>
|
236 |
-
|
237 |
-
* xmlrpc.inc: when calling client::multicall() with an unspecified http version,
|
238 |
-
use the client default rather than the fixed 'http 1.0'
|
239 |
-
|
240 |
-
2006-09-17 Gaetano Giunta <giunta.gaetano@gmail.com>
|
241 |
-
|
242 |
-
* xmlrpc.inc, xmlrpcs.inc, testsuite.php: added support for <NIL/> and
|
243 |
-
system.getCapabilities, and one more testcase to go with it
|
244 |
-
|
245 |
-
2006-09-05 Gaetano Giunta <giunta.gaetano@gmail.com>
|
246 |
-
|
247 |
-
* xmlrpc.inc: fix support for https through proxies; client parses debug
|
248 |
-
messages sent by client even for compressed responses;
|
249 |
-
|
250 |
-
* testsuite.php, parse_args.php: added 3 test cases for proxy connections
|
251 |
-
|
252 |
-
2006-09-01 Gaetano Giunta <giunta.gaetano@gmail.com>
|
253 |
-
|
254 |
-
xmlrpc_wrappers.inc: add two more options in wrap_xmlrpc_method and fix
|
255 |
-
typo to allow obj encoding
|
256 |
-
|
257 |
-
2006-08-28 Gaetano Giunta <giunta.gaetano@gmail.com>
|
258 |
-
|
259 |
-
* xmlrpc_wrappers.inc: more options added to wrap_php_function and
|
260 |
-
wrap_xmlrpc_method
|
261 |
-
|
262 |
-
* xmlrpc.inc: pave the way to support for <nil/>
|
263 |
-
|
264 |
-
* doc/xmlrpc_php.xml documentation updated
|
265 |
-
|
266 |
-
* tagged and released as 2.1
|
267 |
-
|
268 |
-
2006-08-25 Gaetano Giunta <giunta.gaetano@gmail.com>
|
269 |
-
|
270 |
-
* xmlrpc.inc: stricter parsing of incoming messages: detect two DATA elements
|
271 |
-
inside an ARRAY, a STRUCT or SCALAR inside an already filled VALUE
|
272 |
-
|
273 |
-
* testsuite.php: added two testcases to check for the above cases
|
274 |
-
|
275 |
-
2006-08-24 Gaetano Giunta <giunta.gaetano@gmail.com>
|
276 |
-
|
277 |
-
* xmlrpc.inc: more code optimization in xmlrpcval::serialize() and
|
278 |
-
php_xmlrpc_encode(); fixed bug where struct elements with non-ascii chars
|
279 |
-
in their name would not be properly encoded
|
280 |
-
|
281 |
-
* testsuite.php: added a testcase for the new bug
|
282 |
-
|
283 |
-
2006-08-23 Gaetano Giunta <giunta.gaetano@gmail.com>
|
284 |
-
|
285 |
-
* remove old code left in comments across many files; many more javadoc
|
286 |
-
comments added
|
287 |
-
|
288 |
-
* xmlrpc.inc: a bit of code optimization: reorder switch() statements of
|
289 |
-
xml parsing element handlers; inline code for xmlrpcval() - this breaks
|
290 |
-
new xmlrpcval('true') and changes error msgs on new xmlrpcval($x, 'invalid_type')
|
291 |
-
|
292 |
-
* testsuite.php: change according to above
|
293 |
-
|
294 |
-
* benchmark.php: basic support for xdebug 2 profiling
|
295 |
-
|
296 |
-
2006-08-22 Gaetano Giunta <giunta.gaetano@gmail.com>
|
297 |
-
|
298 |
-
* xmlrpc.inc: addscalar() and addstruct() where not returning 1 when adding
|
299 |
-
data to an already formed value
|
300 |
-
|
301 |
-
2006-08-21 Gaetano Giunta <giunta.gaetano@gmail.com>
|
302 |
-
|
303 |
-
* xmlrpcs.inc, xmlrpc.inc: added support for emulating the xmlrpc-extension
|
304 |
-
API (the full emulation layer is part of the extras package);
|
305 |
-
fix support for the HTTP 'deflate' encoding
|
306 |
-
|
307 |
-
* xmlrpc.inc: better support for http compression with and without CURL;
|
308 |
-
a minor decoding speedup; added a new function: php_xmlrpc_decode_xml(),
|
309 |
-
that will convert into the appropriate object the xml representation of
|
310 |
-
either a request, response or a single value; log reception of invalid
|
311 |
-
datetime values
|
312 |
-
|
313 |
-
* xmlrpcs.inc: add a new parameter and return type to server->service();
|
314 |
-
let server->add_to_map() accept method definitions without parameter types
|
315 |
-
|
316 |
-
* xmlrpc_wrappers.inc: more logging of errors; wrap_php_functions now takes
|
317 |
-
more options; better support for jsonrpc; escape quote chars when wrapping
|
318 |
-
remothe servers / remote methods
|
319 |
-
|
320 |
-
* added cvs Id tag to files that missed it; speling fixes; updated NEWS files
|
321 |
-
|
322 |
-
2006-08-07 Gaetano Giunta <giunta.gaetano@gmail.com>
|
323 |
-
|
324 |
-
* assorted fixes to make the suite more compatible with php 4.0.5 and 5.x
|
325 |
-
|
326 |
-
2006-07-02 Gaetano Giunta <giunta.gaetano@gmail.com>
|
327 |
-
|
328 |
-
* xmlrpc_warppers.inc: added new function to wrap entire remote server into
|
329 |
-
a local php class; changed default calling synopsis of wrap_remote_method,
|
330 |
-
to ease passing multiple options at a time (but old syntax still works!)
|
331 |
-
|
332 |
-
* updated makefile, debugger/action.php in accord with the above
|
333 |
-
|
334 |
-
2006-06-30 Gaetano Giunta <giunta.gaetano@gmail.com>
|
335 |
-
|
336 |
-
* added to debugger capability to generate json-rpc code stubs
|
337 |
-
|
338 |
-
* added to debugger capability to load and launch self correctly if
|
339 |
-
controller.php is called directly from outside processes (single url access)
|
340 |
-
|
341 |
-
2006-06-26 Gaetano Giunta <giunta.gaetano@gmail.com>
|
342 |
-
|
343 |
-
* moved wrap_php_functions and wrap_xmlrpc_method into a file of their own.
|
344 |
-
This will let us add further stub functionality without the base lib growing too much.
|
345 |
-
All of the files that reference this functionality have been modified accordingly.
|
346 |
-
|
347 |
-
* made wrap_xmlrpc_method generate better code (with php type juggling), and
|
348 |
-
some phpdoc for the generated function, too
|
349 |
-
|
350 |
-
* added to debugger an option to produce for the user the generated php code
|
351 |
-
for wrapping a call to a remote method into a php function
|
352 |
-
|
353 |
-
2006-06-22 Gaetano Giunta <giunta.gaetano@gmail.com>
|
354 |
-
|
355 |
-
* xmlrpcs.inc: added description of parameters for system.xxx methods (useful with
|
356 |
-
html-self-documenting servers);
|
357 |
-
server->service() now returns response object, in case user has need for it...
|
358 |
-
|
359 |
-
* xmlrpc.inc: save full response payload into xmlrpcresp obj for better debugging
|
360 |
-
|
361 |
-
2006-06-15 Gaetano Giunta <giunta.gaetano@gmail.com>
|
362 |
-
|
363 |
-
* verify_compat.php: more tests
|
364 |
-
|
365 |
-
2006-06-09 Gaetano Giunta <giunta.gaetano@gmail.com>
|
366 |
-
|
367 |
-
* xmlrpcs.inc: fixed sending of compressed responses when output compression
|
368 |
-
is already enabled in php.ini
|
369 |
-
|
370 |
-
* verify_compat.php: split tests between server and client cases
|
371 |
-
|
372 |
-
2006-05-29 Gaetano Giunta <giunta.gaetano@gmail.com>
|
373 |
-
|
374 |
-
* added new file: verify_compat.php, to help troubleshooting platform
|
375 |
-
support for the library; added it to makefile, too
|
376 |
-
|
377 |
-
2006-05-24 Gaetano Giunta <giunta.gaetano@gmail.com>
|
378 |
-
|
379 |
-
* xmlrpc.inc: removed residual usage of regexp in favour of pregexps; fixed
|
380 |
-
a bug in specifying Host http header with non std ports
|
381 |
-
|
382 |
-
2006-05-23 Gaetano Giunta <giunta.gaetano@gmail.com>
|
383 |
-
|
384 |
-
* xmlrpc.inc: improvements to wrap_php_function: let it deal correctly
|
385 |
-
with php functions returning xmlrpcresp objs; make it generate also
|
386 |
-
docs for single parameters (useful for documenting_xmlrpc_server class)
|
387 |
-
|
388 |
-
2006-05-22 Gaetano Giunta <giunta.gaetano@gmail.com>
|
389 |
-
|
390 |
-
* xmlrpc.inc, xmlrpcs.inc: minor performance tuning updates: replaced
|
391 |
-
some explode vs. split, ereg vs. preg, single vs. double quotes
|
392 |
-
|
393 |
-
* xmlrpc.inc: fix wrap_xmlrpc_method to NOT rebuild php objects received
|
394 |
-
from the server by default, as it might pose a security risk
|
395 |
-
|
396 |
-
2006-04-24 Gaetano Giunta <giunta.gaetano@gmail.com>
|
397 |
-
|
398 |
-
* minor fixes makefiles. Tagged and released as 2.0 final
|
399 |
-
|
400 |
-
2006-04-22 Gaetano Giunta <giunta.gaetano@gmail.com>
|
401 |
-
|
402 |
-
* debugger/*: added option to set cainfo; improve web layout
|
403 |
-
|
404 |
-
* xmlrpc.inc: set sslverifypeer to TRUE instaed of 1 by default
|
405 |
-
|
406 |
-
* doc/php_xmlrpc.xml: documentation updates
|
407 |
-
|
408 |
-
2006-04-21 Gaetano Giunta <giunta.gaetano@gmail.com>
|
409 |
-
|
410 |
-
* xmlrpc.inc: added option to set ca certs dir instead of single cert
|
411 |
-
(used to validate server in https connetions)
|
412 |
-
|
413 |
-
2006-04-18 Gaetano Giunta <giunta.gaetano@gmail.com>
|
414 |
-
|
415 |
-
* xmlrpc.inc: fixed bug in xmlrpcval::structmemexists()
|
416 |
-
|
417 |
-
* testsuite.php: added test case for xmlrpcval::structmemexists()
|
418 |
-
|
419 |
-
2006-04-03 Gaetano Giunta <giunta.gaetano@gmail.com>
|
420 |
-
|
421 |
-
* xmlrpc.inc: add support for Digest and NTLM authentication, both to server
|
422 |
-
and to proxies (note: must use CURL for this to work)
|
423 |
-
|
424 |
-
* debugger/*: add support for Digest/NTLM auth to remote servers
|
425 |
-
|
426 |
-
2006-03-19 Gaetano Giunta <giunta.gaetano@gmail.com>
|
427 |
-
|
428 |
-
* xmlrpc.inc: fix a bug parsing of 'true' bool values;
|
429 |
-
added a new method to the client class: SetCaCertificate;
|
430 |
-
add column number in xml parsing error messages;
|
431 |
-
fix serialization of messages to ISO-8859-1 charset with php 5 (by adding
|
432 |
-
encoding to the xml prologue of generated messages)
|
433 |
-
|
434 |
-
* xmlrpcs.inc: correct detection of charset in http headers;
|
435 |
-
add column number in xml parsing error messages;
|
436 |
-
fix serialization of responses to ISO-8859-1 charset with php 5 (by adding
|
437 |
-
encoding to the xml prologue of generated responses)
|
438 |
-
|
439 |
-
* testsuite.php: added two more tests on charset encoding
|
440 |
-
|
441 |
-
* NEWS: update info for impending release
|
442 |
-
|
443 |
-
2006-03-23 Gaetano Giunta <giunta.gaetano@gmail.com>
|
444 |
-
|
445 |
-
* added a new demo file: simple_call.php
|
446 |
-
|
447 |
-
2006-02-20 Gaetano Giunta <giunta.gaetano@gmail.com>
|
448 |
-
|
449 |
-
* xmlrpcs.inc: more error checking and logging with regard to user-coded
|
450 |
-
method handler functions not being well behaved;
|
451 |
-
fix a case where error handler would not be reset upon user function
|
452 |
-
returning not valid xmlrpresp
|
453 |
-
|
454 |
-
* xmlrpc.inc: fix bug in detection of php 4.3.0
|
455 |
-
|
456 |
-
* Makefile: fix uppercase filenames
|
457 |
-
|
458 |
-
2006-02-15
|
459 |
-
|
460 |
-
* xmlrpc.inc: parse 'true' and 'false' as valid booleans, even though the
|
461 |
-
spec is quite clear on that; fix small bug w. internal_encoding = utf8; add
|
462 |
-
definition of $GLOBALS['xmlrpcNull'] for extensibility, e.g. json or
|
463 |
-
extensions to the xmlrpc spec
|
464 |
-
|
465 |
-
2006-02-05 Gaetano Giunta <giunta.gaetano@gmail.com>
|
466 |
-
|
467 |
-
* xmlrpc.inc: fix bug in wrap_xmlrpc_method if client passed to function has
|
468 |
-
return_type=phpvals
|
469 |
-
|
470 |
-
* all demo files: review code, add more comments and information
|
471 |
-
|
472 |
-
* added 2 demo files: proxy.php (implementing an xmlrpc proxy server) and
|
473 |
-
wrap.php (showing usage of wrap_method_call)
|
474 |
-
|
475 |
-
2006-02-04 Gaetano Giunta <giunta.gaetano@gmail.com>
|
476 |
-
|
477 |
-
* xmlrpc.inc: fix bug in multicall in case of no fallback and server error
|
478 |
-
|
479 |
-
2006-01-30 Gaetano Giunta <giunta.gaetano@gmail.com>
|
480 |
-
|
481 |
-
* xmlrpc.inc: fix recursive serialization of xmlrpcvals loosing UTF8 charset;
|
482 |
-
correctly set type field of xmlrpcvals returned by send() calls
|
483 |
-
|
484 |
-
* xmlrpcs.inc: add to server checks for correct return type of user-coded
|
485 |
-
method handling function; tolerate xmlrpcval instead of xmlrpcresp
|
486 |
-
|
487 |
-
* minor change in xmlrpcresp internals, to ease subclassing (store payload
|
488 |
-
in an internal var on serialize(), same as xmlrpcclient does)
|
489 |
-
|
490 |
-
2006-01-22 Gaetano Giunta <giunta.gaetano@gmail.com>
|
491 |
-
|
492 |
-
* benchmark.php: do not run http 1.1 tests if CURL notfound
|
493 |
-
|
494 |
-
* Released as 2.0 Rc3
|
495 |
-
|
496 |
-
2006-01-19 Gaetano Giunta <giunta.gaetano@gmail.com>
|
497 |
-
|
498 |
-
* xmlrpc.inc: make xmlrpc_client::setDebug() accept int values instead of
|
499 |
-
boolean. At level 2, the request payload is printed to screen before being
|
500 |
-
sent; fix bug with repeated sending of the same msg object and using request
|
501 |
-
compression w. php 5.1.2 (objects passed by ref by default!!!)
|
502 |
-
|
503 |
-
* xmlrpcs.inc: fix detection of clients accepting compressed responses
|
504 |
-
|
505 |
-
* comment.php: remove warnings due to liberal usage of $HTTP_POST/GET_VARS
|
506 |
-
|
507 |
-
* benchmark.php: add a test using http compression of both requests and
|
508 |
-
responses
|
509 |
-
|
510 |
-
* testsuite.php: added test for fix in xmlrpc.inc
|
511 |
-
|
512 |
-
2006-01-17 Gaetano Giunta <giunta.gaetano@gmail.com>
|
513 |
-
|
514 |
-
* xmlrpcs.php: minor fix: do not raise a PHP warning when std server is
|
515 |
-
called via GET (global HTTP_RAW_POST_DATA undefined). Some might have called
|
516 |
-
it a security breach (path disclosure)...
|
517 |
-
|
518 |
-
2006-01-15 Gaetano Giunta <giunta.gaetano@gmail.com>
|
519 |
-
|
520 |
-
* testsuite.php: minor fix to expected date format in http cookie hedaer
|
521 |
-
to cope with PHP 5.1.2
|
522 |
-
|
523 |
-
2006-01-05 Gaetano Giunta <giunta.gaetano@gmail.com>
|
524 |
-
|
525 |
-
* xmlrpcs.inc: merge code from the 'extras' subclass that allows server
|
526 |
-
to register plain php functions in dispatch map instead of functions
|
527 |
-
accepting a single xmlrpcmgs obj parameter.
|
528 |
-
One step closer to the kitchen sink!!!
|
529 |
-
|
530 |
-
2005-12-31 Gaetano Giunta <giunta.gaetano@gmail.com>
|
531 |
-
|
532 |
-
* xmlrpcs.inc: let the server accept 'class::method' syntax in the dispatch
|
533 |
-
map
|
534 |
-
|
535 |
-
* testsuite.php, server.php: added new tests for the recent charset encoding
|
536 |
-
capabilities
|
537 |
-
|
538 |
-
2005-12-24 Gaetano Giunta <giunta.gaetano@gmail.com>
|
539 |
-
|
540 |
-
* xmlrpc.inc: correctly serialize() string xmlrpcvals that have been
|
541 |
-
created out of non-string php variables, when internal encoding is UTF8;
|
542 |
-
serialize to '0' int and double values created out of non-string php
|
543 |
-
variables, eg. 'hello', instead of creating invalid xmlrpc;
|
544 |
-
extend the php_xmlrpc_encode function to allow serializing string values
|
545 |
-
to charsets other tha US-ASCII;
|
546 |
-
minor tweak to xml parsing to allow correct parsing of empty strings when
|
547 |
-
in 'direct to php values' mode
|
548 |
-
|
549 |
-
* xmlrpcs.inc: advances in system.multicall with plain php values
|
550 |
-
|
551 |
-
2005-12-17 Gaetano Giunta <giunta.gaetano@gmail.com>
|
552 |
-
|
553 |
-
* xmlrpcs.inc: let the functions implementing the system.* methods work
|
554 |
-
fine when called with plain php values as parameters instead of xmlrpcmsg
|
555 |
-
objects (multicall not quite finished yet...);
|
556 |
-
encode level 3 debug info as base64 data, to avoid charset encoding hell
|
557 |
-
|
558 |
-
* xmlrpc.inc: added a new xmlrpc_2_php_type function, to get the name of
|
559 |
-
php types corresponding to xmlrpc types;
|
560 |
-
in debug mode, when detecting base64 server debug info, print it out fine
|
561 |
-
|
562 |
-
* server.php: cosmetic fixes
|
563 |
-
|
564 |
-
2005-12-09 Gaetano Giunta <giunta.gaetano@gmail.com>
|
565 |
-
|
566 |
-
* xmlrpc.inc: remove one warning emitted when received xml contains an
|
567 |
-
unknown tag; remove warnings emitted when custom error handler is set
|
568 |
-
and user calls php_xmlrpc_encode/decode without the 2nd parameter
|
569 |
-
|
570 |
-
* xmlrpcs.inc: added a param to service(), to allow the server to parse
|
571 |
-
data other than the POST body (useful for subclassing and debugging);
|
572 |
-
reworked the implementation of server debug messages at debug level 2:
|
573 |
-
since the debug info generated has no known charset, and putting it back
|
574 |
-
into the response's xml would most likely break it, send it back to the
|
575 |
-
client as a base64 encoded comment. Clients can decode it if they need it...
|
576 |
-
Add some more javadocs
|
577 |
-
|
578 |
-
* testsuite.php: modified the string test, to see if the server can echo
|
579 |
-
back to the client the received data without breaking the response's xml
|
580 |
-
|
581 |
-
2005-12-05 Gaetano Giunta <giunta.gaetano@gmail.com>
|
582 |
-
|
583 |
-
* xmlrpc.inc, xmlrpcs.inc: let server and client objects decide if they
|
584 |
-
want to use some charset encoding other than US-ASCII for serialized data:
|
585 |
-
add a new var to both objects, and lots of parameters to function calls
|
586 |
-
that took none up to now;
|
587 |
-
refactored server method service() and parseRequest(), implementing a
|
588 |
-
new parserequestHeaders() method to explicitly deal with HTTP
|
589 |
-
|
590 |
-
2005-12-01 Gaetano Giunta <giunta.gaetano@gmail.com>
|
591 |
-
|
592 |
-
* moved the jsonrpc implementation and the new wsdl stuff to a separate
|
593 |
-
CVS module; updated the makefile to reflect it
|
594 |
-
|
595 |
-
2005-11-24 Gaetano Giunta <giunta.gaetano@gmail.com>
|
596 |
-
|
597 |
-
* modified php_xmlrpc_decode() to work on xmlrpcmessages too, besides
|
598 |
-
xmlrpcvals. To achieve this, added a new method: xmlrpcmsg::kindOf()
|
599 |
-
|
600 |
-
2005-11-22 Gaetano Giunta <giunta.gaetano@gmail.com>
|
601 |
-
|
602 |
-
* released as 2.0 RC2
|
603 |
-
|
604 |
-
2005-11-21 Gaetano Giunta <giunta.gaetano@gmail.com>
|
605 |
-
|
606 |
-
* xmlrpc.inc: fix warnings about references for PHP 4.1.X
|
607 |
-
|
608 |
-
* Whitespace cleanup on all the lib
|
609 |
-
|
610 |
-
2005-11-16 Gaetano Giunta <giunta.gaetano@gmail.com>
|
611 |
-
|
612 |
-
* xmlrpc.inc: rewritten xmlrpc_encode_entitites adding two extra parameters
|
613 |
-
that specify input and output charset encodings. This corrects the bug that
|
614 |
-
prevented native UTF-8 strings to be correctly serialized (to have them
|
615 |
-
encoded the user must set $xmlrpc_internalencoing appropriately).
|
616 |
-
|
617 |
-
* xmlrpc.inc: added new method xmlrpcmsg::parseResponseHeaders(), refactoring
|
618 |
-
parseResponse(). This makes the code more modular and eases subclassing.
|
619 |
-
|
620 |
-
* xmlrpc.inc: set cookies and http headers to xmlrpcresp objs even when calls
|
621 |
-
to send() do not complete correctly
|
622 |
-
|
623 |
-
* added new file: jsonrpcs.inc, to accomodate server jsonrpc objects in the future
|
624 |
-
|
625 |
-
* jsonrpc.inc: slow progress...
|
626 |
-
|
627 |
-
2005-11-10 Gaetano Giunta <giunta.gaetano@gmail.com>
|
628 |
-
|
629 |
-
* xmlrpc.inc: fixed the xmlrpc_client send and sendpayloadhttps methods
|
630 |
-
to fix errors in calling https servers;
|
631 |
-
added a new xmlrpc_client->setkey method to allow usage of client-side ssl
|
632 |
-
certs in recent php builds;
|
633 |
-
added to xmlrpcresp objects a content_type var, to be used in HTTP headers
|
634 |
-
|
635 |
-
* xmlrpcs.inc: separate generation of content-type http header and xml prologue
|
636 |
-
from the service() method, to ease subclassing
|
637 |
-
|
638 |
-
2005-11-03 Gaetano Giunta <giunta.gaetano@gmail.com>
|
639 |
-
|
640 |
-
* xmlrpc.inc: moved the 'text/xml' mimetype string as class var of the xmlrpcmsg
|
641 |
-
object instead of having it cabled into xmlrpc_client->send(): this allows to
|
642 |
-
create subclasses of xmlrpcmsg that use a different mimetype
|
643 |
-
|
644 |
-
* jsonrpc.inc: added a new file, with an extremely experimental set of classes,
|
645 |
-
designed to implement a json-rpc client and server, taking advantage of the
|
646 |
-
existing xml-rpc infrastructure
|
647 |
-
|
648 |
-
2005-10-28 Gaetano Giunta <giunta.gaetano@gmail.com>
|
649 |
-
|
650 |
-
* xmlrpc.inc: changed constructor method for xmlrpcresp, making it smarter in
|
651 |
-
case user does not declare the type of value it is passing to it;
|
652 |
-
minor changes in serialization of xmlrpcresp with error codes, so that it
|
653 |
-
utputs LF instead of CRLF on windows boxes after an FTP transfer of the code, too
|
654 |
-
|
655 |
-
2005-10-26 Gaetano Giunta <giunta.gaetano@gmail.com>
|
656 |
-
|
657 |
-
* xmlrpc.inc: added a new var of class xmlrpc_client, indicating what kind of
|
658 |
-
object will be stored in the value() of xmlrpcresp's gotten from the send()
|
659 |
-
method: xmlrpxc objects, plain php variables or raw xml. This allow the coder
|
660 |
-
to make use of xmlrpc_decode for better performances if he wishes so.
|
661 |
-
Modified creator of xmlrpcresp class to allow it to distinguish between being
|
662 |
-
created out of raw xml or a plain php string (in the former case, serialization
|
663 |
-
is still possible, opening a new world of opportunity for server-side programming:
|
664 |
-
the php function implementing a web service has to provide the xml for the
|
665 |
-
return value on its own).
|
666 |
-
Modified xmlrpc_client::multicall() to suit; also added a new parameter which
|
667 |
-
allows calls to multicall without automatic fallback to many-calls in case of
|
668 |
-
error (speeding up the process of doing a failed multicall() call quite a bit)
|
669 |
-
Fixed two bugs in guess_encoding.
|
670 |
-
Audited all regexps and fixed some.
|
671 |
-
xmlrpc_client::send() does not call xmlrpcmsg::parseresponsefile() anymore.
|
672 |
-
Shuffled parseresponse() a little bit
|
673 |
-
|
674 |
-
* testsuite.php: added a new testcase for the modifications to multicall():
|
675 |
-
now we test the case where xmlrpc_client returns php values, too
|
676 |
-
|
677 |
-
2005-10-24 Gaetano Giunta <giunta.gaetano@gmail.com>
|
678 |
-
|
679 |
-
* xmlrpc.inc: fixed guess_encoding() to always return uppercase chars
|
680 |
-
|
681 |
-
* added new file: benchmark.php. It contains a few tests used to evaluate
|
682 |
-
speed of the lib in common use cases
|
683 |
-
|
684 |
-
* added file parse_args.php, containing common code for benchmark and
|
685 |
-
testsuite, and modified testsuite.php accordingly
|
686 |
-
|
687 |
-
* modified makefile adding new files
|
688 |
-
|
689 |
-
* testsuite.php: added a couple of new test cases; fixed one warning
|
690 |
-
emitted in php 5 E_STRICT mode
|
691 |
-
|
692 |
-
2005-10-20 Gaetano Giunta <giunta.gaetano@gmail.com>
|
693 |
-
|
694 |
-
* xmlrpc.inc: modify 3d param of ParseResponse(), allowing the function to
|
695 |
-
return the raw xml received as value of the xmlrpcresponse object.
|
696 |
-
This allows eg. to have epi-xmlrpc decode the xml for faster execution.
|
697 |
-
|
698 |
-
2005-10-09 Gaetano Giunta <giunta.gaetano@gmail.com>
|
699 |
-
|
700 |
-
* xmlrpc.inc: fixed error that prevented usage of HTTPS (the client
|
701 |
-
always determined that ssl support was not present)
|
702 |
-
|
703 |
-
2005-10-03 Gaetano Giunta <giunta.gaetano@gmail.com>
|
704 |
-
|
705 |
-
* xmlrpc.inc, xmlrpcs.inc: revert direction of stack growth during xml
|
706 |
-
parsing for faster execution time; add support for detecting charset
|
707 |
-
encoding of received xml; add support for cookies; better parsing of
|
708 |
-
javadoc when building stub code in wrap_php_function; add a lot of
|
709 |
-
javadoc comments everywhere; rewrite most error messages
|
710 |
-
|
711 |
-
* testsuite.php: add many tests for newly introduced features
|
712 |
-
|
713 |
-
* server.php: add a couple of new functions to support debugging new
|
714 |
-
features
|
715 |
-
|
716 |
-
* debugger: add switches to enable all the latest lib features; minor
|
717 |
-
improvements to layout
|
718 |
-
|
719 |
-
* synch included phpunit with latest PEAR release
|
720 |
-
|
721 |
-
* reorganize files included in the distribution in a new hierarchy of folders
|
722 |
-
|
723 |
-
* bump revision number to 2.0RC1 and release
|
724 |
-
|
725 |
-
2005-8-14 Miles Lott <milos@groupwhere.org>
|
726 |
-
|
727 |
-
* xmlrpc.inc, xmlrpcs.inc: Remove all use of eval() to avoid potential
|
728 |
-
security hole.
|
729 |
-
|
730 |
-
* As of this release we are no longer php3-compatible.
|
731 |
-
|
732 |
-
2005-8-10 Miles Lott <milos@groupwhere.org>
|
733 |
-
|
734 |
-
* xmlrpc.inc, xmlrpcs.inc: Switched to using $GLOBALS instead of calling
|
735 |
-
global $varname
|
736 |
-
|
737 |
-
2005-07-22 Miles Lott <milos@groupwhere.org>
|
738 |
-
|
739 |
-
* Removed: bug_* files
|
740 |
-
|
741 |
-
2005-07-14 Gaetano Giunta <giunta.gaetano@gmail.com>
|
742 |
-
|
743 |
-
* debugger: added a workaround to disable using the debugger for attacking
|
744 |
-
older versions of the lib
|
745 |
-
|
746 |
-
* testsuite.php: added code to test wrap_xmlrpc_method;
|
747 |
-
use different wording for failed tests
|
748 |
-
|
749 |
-
* xmlrpcs.inc: change for() with foreach() in system.* methods implementations;
|
750 |
-
remove a possible cause of php warning;
|
751 |
-
|
752 |
-
* xmlrpc.inc: let wrap_php_function and wrap_xmlrpc_method find suitable
|
753 |
-
function names if default function names are already in use;
|
754 |
-
correct wrap_xmlrpc_method to not set http protocol to 1.0 when not asked to;
|
755 |
-
detect curl compiles without SSL
|
756 |
-
|
757 |
-
2005-07-14 Gaetano Giunta <giunta.gaetano@gmail.com>
|
758 |
-
|
759 |
-
* xmlrpc.inc: more auto-fix of xmlrpc_client path: '' -> '/';
|
760 |
-
change to the method used for detecting failed evals (php 4.0.x compatibility);
|
761 |
-
complete rework of return-by-ref functions to comply with php 4.4.0
|
762 |
-
|
763 |
-
* xmlrpcs.inc: change to the method used for detecting failed evals (php 4.0.x
|
764 |
-
compatibility)
|
765 |
-
|
766 |
-
* testsuite.php: major rewrite of the multi- tests, to give better feedback on
|
767 |
-
number of failed tests;
|
768 |
-
flush html page title to screen before starting tests;
|
769 |
-
|
770 |
-
2005-07-13 Gaetano Giunta <giunta.gaetano@gmail.com>
|
771 |
-
|
772 |
-
* xmlrpc.inc: let xmlrpcmsg creator be forgiving of target paths that miss the
|
773 |
-
starting '/' char;
|
774 |
-
completely reworked assign-by-ref to be compliant with php 4.4.0 stricter
|
775 |
-
warnings
|
776 |
-
|
777 |
-
* testsuite.php: added ability to be run from cli: (really dumb) separation of
|
778 |
-
html and plain text outputs + parsing of argv parameters
|
779 |
-
|
780 |
-
2005-07-12 Gaetano Giunta <giunta.gaetano@gmail.com>
|
781 |
-
|
782 |
-
* xmlrpc.inc: compatibility fixes with PHP versions 4.0.x (and remove some for
|
783 |
-
PHP 3)
|
784 |
-
|
785 |
-
* xmlrpcs.inc: compatibility fixes for PHP 4.0.x versions
|
786 |
-
|
787 |
-
* testsuite.php: better support for running with php versions 4.0.x;
|
788 |
-
do not generate runtime errors but finish tests anyway if some calls to
|
789 |
-
localhost fail;
|
790 |
-
correctly detect a localhost port different from 80 for running tests against
|
791 |
-
|
792 |
-
2005-07-11 Gaetano Giunta <giunta.gaetano@gmail.com>
|
793 |
-
|
794 |
-
* xmlrpc.inc: preliminary building of method signature and docs in
|
795 |
-
wrap_php_function;
|
796 |
-
fix a bug in extracting function description from javadoc block in
|
797 |
-
wrap_php_function;
|
798 |
-
small fix for better compatibility with php < 4.2.0
|
799 |
-
|
800 |
-
* added compat subdir with extra code, taken form PEAR package Compat, to let
|
801 |
-
the lib run fine with php 4 versions < 4.1
|
802 |
-
|
803 |
-
2005-07-10 Gaetano Giunta <giunta.gaetano@gmail.com>
|
804 |
-
|
805 |
-
* xmlrpc.inc: some nazi whitespace corrections;
|
806 |
-
declared global $xmlrpcBoolean too (was the only one missing);
|
807 |
-
used @eval inside getval() to have less path disclosure security reports filed
|
808 |
-
in the future;
|
809 |
-
added new global var: $xmlrpcValue, to be used in server dispatch maps as
|
810 |
-
placeholder for a param which can be of any kind;
|
811 |
-
big chunks (but still incomplete) of javadoc parsing in wrap_php_function
|
812 |
-
+ changed type of return val - now it is the complete array to be put in the
|
813 |
-
dispatch map
|
814 |
-
|
815 |
-
* xmlrpcs.inc: let previous error handler be called by server to handle errors
|
816 |
-
even if in debug level 3;
|
817 |
-
default to compress responses if zlib installed;
|
818 |
-
added a new val useful for only checking number (not type) of params in method
|
819 |
-
calls;
|
820 |
-
let user use object methods in dispatch map using the
|
821 |
-
array($obj, 'fmethodname') format
|
822 |
-
|
823 |
-
* server.php: Added code called by testsuite.php to exercise registration of
|
824 |
-
object methods as xmlrpc methods and auto-registration of php functions as xmlrpc
|
825 |
-
methods
|
826 |
-
|
827 |
-
* testsuite.php: added tests to exercice server registering object methods as
|
828 |
-
xmlrpc methods and automatic registration of php functions as server methods;
|
829 |
-
added a hint to enable debug if some test goes wrong;
|
830 |
-
renamed https test for better clarity
|
831 |
-
|
832 |
-
2005-07-07 Gaetano Giunta <giunta.gaetano@gmail.com>
|
833 |
-
|
834 |
-
* xmlrpc.inc: added function to be used for 'guestimating' charset encoding of
|
835 |
-
received xml (not activated yet)
|
836 |
-
|
837 |
-
* server.php: Let server compress content by default if user asks so: it allows
|
838 |
-
testsuite to check for compressed responses
|
839 |
-
|
840 |
-
* testsuite.php: added suite of tests for compressed responses; test CURL
|
841 |
-
(http1.1) with all possible compression combinations too
|
842 |
-
|
843 |
-
2005-07-06 Gaetano Giunta <giunta.gaetano@gmail.com>
|
844 |
-
|
845 |
-
* xmlrpc.inc: Enable setting usage of keepalives on/off (for CURL cases);
|
846 |
-
implement compression of xmlrpc requests; enable new syntax of xmlrpclient
|
847 |
-
constructor: 1 - allow preferred http method to be set at creation time,
|
848 |
-
2 - allow user to insert a single complete URL as only parameter and parse it;
|
849 |
-
try to detect if curl is present whether it has been compiled w. zlib to enable
|
850 |
-
automatically the reception of compressed responses
|
851 |
-
|
852 |
-
* xmlrpcs.inc: do not add into logs the content of the request, if it was
|
853 |
-
received gzipped/deflated, to avoid breaking the xml sent back as response
|
854 |
-
(NB: might be investigated further: is the problem caused by windows chars in
|
855 |
-
the range 128-160 ?)
|
856 |
-
|
857 |
-
* testsuite.php: run all localhost tests 2 more times, to stress request
|
858 |
-
compression;
|
859 |
-
run all localhost tests in a row using keepalives, to test keepalive
|
860 |
-
functionality
|
861 |
-
|
862 |
-
2005-07-05 Gaetano Giunta <giunta.gaetano@gmail.com>
|
863 |
-
|
864 |
-
* xmlrpc.inc: let CURL pass back to caller function the complete PHP headers
|
865 |
-
as it did before: it enables better logging / debugging of communication;
|
866 |
-
small change to the way CURL declares its ability to receive compressed
|
867 |
-
messages (fix for the case where zlib is compiled in PHP but not in curl);
|
868 |
-
added Keep-alive (ON BY DEFAULT) for http 1.1 and https messages (had to modify
|
869 |
-
a lot of functions for that);
|
870 |
-
always make sure a 'Connection: close' header is sent with curl connections if
|
871 |
-
keep-alive is not wanted
|
872 |
-
|
873 |
-
* phpunit.php: switched to PEAR PHPUnit (rel 1.2.3), since it is maintained a
|
874 |
-
lot more than the old version we were using
|
875 |
-
|
876 |
-
* added new folder with code of phpunit classes
|
877 |
-
|
878 |
-
* testsuite.php: added a new run of tests to check for compliance of client
|
879 |
-
when using http 1.1;
|
880 |
-
switched to PEAR PHPUnit classes;
|
881 |
-
divided test for client ability to do multicall() into 2 separate tests
|
882 |
-
|
883 |
-
2005-06-30 Gaetano Giunta <giunta.gaetano@gmail.com>
|
884 |
-
|
885 |
-
tagged and released version 1.1.1, backporting security fixes from HEAD
|
886 |
-
|
887 |
-
2005-06-28 Gaetano Giunta <giunta.gaetano@gmail.com>
|
888 |
-
|
889 |
-
* xmlrpcs.inc: fix changes introuced yesterday in a rush;
|
890 |
-
do not list system.* methods for a server that has them explicitly disabled
|
891 |
-
|
892 |
-
* bug_inject.xml: new test case used to check for code injection vulnerability
|
893 |
-
|
894 |
-
* testsuite.php: added a test case for zero parameters method calls;
|
895 |
-
added two test cases for recently found code injection vulnerabilities
|
896 |
-
|
897 |
-
2005-06-27 Gaetano Giunta <giunta.gaetano@gmail.com>
|
898 |
-
|
899 |
-
* xmlrpc.inc: (tentative) fix for security problem reported by
|
900 |
-
security@gulftech.org: we were not properly php-escaping xml received for
|
901 |
-
BASE64 and NAME tags;
|
902 |
-
some more patching related to junk received in xml messages/responses: if the
|
903 |
-
PHP code built from the parsed xml is broken, catch any generated errors
|
904 |
-
without echoing it to screen but take note of the error and propagate to user
|
905 |
-
code
|
906 |
-
|
907 |
-
* xmlrpcs.inc: some more patching related to junk received in xml messages/
|
908 |
-
responses: if the PHP code built from the parsed xml is broken, catch any
|
909 |
-
generated errors without echoing it to screen but take note of the error and
|
910 |
-
propagate to user code
|
911 |
-
|
912 |
-
2005-06-24 Gaetano Giunta <giunta.gaetano@gmail.com>
|
913 |
-
|
914 |
-
* xmlrpc.inc: fixed php_xmlrpc_encode detection of php arrays (again!);
|
915 |
-
removed from wrap_php_function the part about setting a custom error handler
|
916 |
-
(it can be activated using the more general $server->setdebug(3) anyway)
|
917 |
-
|
918 |
-
* xmlrpcs.inc: added to server the capability to trap all processing errors
|
919 |
-
during execution of user functions and add them to debug info inside responses;
|
920 |
-
return a (new) xmlrpcerr response instead of raising some obscure php execution
|
921 |
-
error if there is an undefined function in the dispatch map
|
922 |
-
|
923 |
-
* testsuite.php: Added new testcases for recently implemented stuff
|
924 |
-
|
925 |
-
2005-06-23 Gaetano Giunta <giunta.gaetano@gmail.com>
|
926 |
-
|
927 |
-
* xmlrpc.inc: added new method: xmlrpcval->structmemexists, to check for
|
928 |
-
presence of a wanted struct member without having to loop through all members;
|
929 |
-
fix wrap_php_functions: correctly return false for php internal functions,
|
930 |
-
whose param list is unknown;
|
931 |
-
let addscalar fail as it should if called on struct vals;
|
932 |
-
fix addstruct: do not fail when called for adding stuff to initialized structs;
|
933 |
-
removed a warning generated when calling addscalar with inexistent type;
|
934 |
-
massive code review for speed: replaced each() loops with foreach(), removed
|
935 |
-
lots of useless assignments and duplications of data;
|
936 |
-
added 'http11' as valid method param for xmlrpclient->send: makes use of curl
|
937 |
-
for sending http 1.1 requests;
|
938 |
-
changed a couple '=' into '=&' where objects are returned;
|
939 |
-
fixed wrap_php_function() to better detect php errors while processing wrapped
|
940 |
-
function
|
941 |
-
|
942 |
-
* xmlrpcs.inc: Fix php warnings generated when clients requested method
|
943 |
-
signature / description for a method that had none in its dispatch map;
|
944 |
-
turned server->debug into an integer value that will change the amount of
|
945 |
-
logging going as comments into xmlrpc responses
|
946 |
-
|
947 |
-
* server.php: set default server debug level to 2
|
948 |
-
|
949 |
-
* testsuite.php: removed calls to deleted functions (xmlrpc_encode,
|
950 |
-
xmlrpc_decode);
|
951 |
-
added html page title describing target servers used for tests;
|
952 |
-
added an assign-by-ref
|
953 |
-
|
954 |
-
* phpunit.php: Do not consider as failures PHP 5 E_STRICT errors (arbitrary
|
955 |
-
choice, but lib is targeted at PHP 4)
|
956 |
-
|
957 |
-
2005-06-22 Gaetano Giunta <giunta.gaetano@gmail.com>
|
958 |
-
|
959 |
-
* xmlrpc.inc: removed lottsa old code that had been left in commented
|
960 |
-
|
961 |
-
* xmlrpc.inc: fixed setting of proxy port
|
962 |
-
|
963 |
-
* xmlrpc.inc: removed one warning when trying to decompress junk sent as
|
964 |
-
deflated response
|
965 |
-
|
966 |
-
* xmlrpc.inc: changed the error messages (but not the code) that will be found
|
967 |
-
in xmlrpcresponses when there are socket errors, to differentiate from HTTP
|
968 |
-
errors
|
969 |
-
|
970 |
-
* xmlrpc.inc: refactored xmlrpcclient->sendpayloadHTTPS: now it calls a new
|
971 |
-
method (sendpayloadCURL) that could be used also for generating HTTP 1.1
|
972 |
-
requests
|
973 |
-
|
974 |
-
* xmlrpc.inc: added two new methods: wrap_php_function and wrap_xmlrpc_method:
|
975 |
-
designed to let the lazy programmer automagically convert php functions to
|
976 |
-
xmlrpc methods and vice versa. Details are in the code
|
977 |
-
|
978 |
-
* debugger/*: added initial revision of a 'universal xmlrpc debugger'
|
979 |
-
|
980 |
-
2005-06-20 Gaetano Giunta <giunta.gaetano@gmail.com>
|
981 |
-
|
982 |
-
* xmlrpc.inc: replace usage of 'echo' with error_log when errors arise
|
983 |
-
in manipulation of xmlrpcval objects
|
984 |
-
|
985 |
-
* xmlrpc.inc: replaced <br> with <br /> in dump function
|
986 |
-
|
987 |
-
* xmlrpc.inc: added method structsize to xmlrpcval class (alias for arraysize)
|
988 |
-
|
989 |
-
* xmlrpc.inc: addarray() now will add extra members to an xmlrpcval object
|
990 |
-
of array type; addstruct() can be used to add members to an xmlrpcval object
|
991 |
-
of struct type
|
992 |
-
|
993 |
-
* xmlrpcs.inc: Added member allow_system_funcs to server: controls whether the
|
994 |
-
server accepts or not calls to system.* functions
|
995 |
-
|
996 |
-
2005-05-10 Gaetano Giunta <giunta.gaetano@gmail.com>
|
997 |
-
|
998 |
-
* xmlrpc.inc: fix regression in php_xmlrpc_encode when encoding php hashes;
|
999 |
-
fix decompression of gzip/deflated xmlrpc responses;
|
1000 |
-
set user agent string correctly in SSL mode (was forgetting lib name);
|
1001 |
-
add allowed encoding http headers in requests;
|
1002 |
-
do not pass http headers back from curl to parseresponse, to avoid re-decoding
|
1003 |
-
compressed xml or http 100 headers
|
1004 |
-
|
1005 |
-
* xmlrpcs.inc: added method setDebug;
|
1006 |
-
renamed compress_output to compress_response;
|
1007 |
-
do not try to set http headers if they have already been sent, because trying
|
1008 |
-
to do so will raise a PHP error, and if headers have been sent something has
|
1009 |
-
gone wrong already (shall we send a meaningful error response instead?)
|
1010 |
-
|
1011 |
-
2005-05-08 Gaetano Giunta <giunta.gaetano@gmail.com>
|
1012 |
-
|
1013 |
-
* xmlrpcs.inc, xmlrpcs.inc: reverted to usage of '=& new' for better
|
1014 |
-
performance on (some) php4 installs.
|
1015 |
-
NB: PHP 3 compatibility is deprecated from now on!
|
1016 |
-
|
1017 |
-
* xmlrpc.inc: decode xmlrpc boolean type to native php boolean
|
1018 |
-
|
1019 |
-
* xmlrpcs.inc, xmlrpcs.inc: switched $_xh[$parser] to $_xh, since indexing
|
1020 |
-
an array by object will give a warning in php 5 (and we were resetting the
|
1021 |
-
array of _xh elements on every call anyway)
|
1022 |
-
|
1023 |
-
* xmlrpc.inc: commented unused code used originally for escaping content
|
1024 |
-
|
1025 |
-
* xmlrpc.inc: commented deprecated methods xmlrpc_encode and xmlrpc_decode
|
1026 |
-
|
1027 |
-
* xmlrpc.inc: php_xmlrpc_encode: encode integer-indexed php arrays as xmlrpc
|
1028 |
-
arrays instead of structs; if object given to encode is an xmlrpcval return it
|
1029 |
-
instead of reencoding (makes easier calling encode on an array of xmlrpcvals)
|
1030 |
-
|
1031 |
-
* xmlrpcs.inc: added $debug field to server class; if false will prevent
|
1032 |
-
the server from echoing debug info back to the client as xml comment
|
1033 |
-
|
1034 |
-
* xmlrpcs.inc: let the server add to the debug messages the complete request
|
1035 |
-
payload received and (if php installed as apache module) http headers, so that
|
1036 |
-
the client in debug mode can echo a complete fingerprint of the communication
|
1037 |
-
|
1038 |
-
* xmlrpcs.inc: changed API of ParseRequest method: now it cannot be called
|
1039 |
-
without a 'data' parameter; added 2nd parameter (http encoding); changed the
|
1040 |
-
call to this method from inside service() method
|
1041 |
-
|
1042 |
-
* xmlrpc.inc, xmlrpcs.inc: enable both server and client to parse compressed xml
|
1043 |
-
(if php is compiled with zlib); client should also be able to decode chunked
|
1044 |
-
http encoding
|
1045 |
-
|
1046 |
-
* xmlrpc.inc: add support for proxies (only basic auth supported); default port
|
1047 |
-
is 8080 (if left unspecified)
|
1048 |
-
|
1049 |
-
* xmlrpc.inc: use lowercase for names of http headers received (makes using
|
1050 |
-
them much simpler, since servers can use any upper/lowercase combination)
|
1051 |
-
|
1052 |
-
* xmlrpc.inc: bumped version number to '2.0 beta'
|
1053 |
-
|
1054 |
-
2005-05-08 Gaetano Giunta <giunta.gaetano@gmail.com>
|
1055 |
-
|
1056 |
-
* release of version 1.1
|
1057 |
-
|
1058 |
-
2005-04-24 Gaetano Giunta <giunta.gaetano@gmail.com>
|
1059 |
-
|
1060 |
-
* xmlrpcs.inc: removed charset declaration from xml prologue of responses,
|
1061 |
-
since we are now escaping all non-ascii chars in an encoding-independent way
|
1062 |
-
|
1063 |
-
* bug_http.xml: modified to exercise some extra functonality of the lib
|
1064 |
-
(it should now be failed by the current PEAR implementation of the lib)
|
1065 |
-
|
1066 |
-
* xmlrpc.inc: bumped up rev. number to 1.1
|
1067 |
-
|
1068 |
-
* doc/xmlrpc_php.xml, doc/announce1_1.txt: documentation updates
|
1069 |
-
|
1070 |
-
* Makefile: updated to reflect new xml doc source, modified filelist
|
1071 |
-
|
1072 |
-
2005-04-17 Gaetano Giunta <giunta.gaetano@gmail.com>
|
1073 |
-
|
1074 |
-
* client.php, agesort.php, introspect.php, introspect_demo.php,
|
1075 |
-
which.php, test.pl, test.py: use as default target the server.php page hosted
|
1076 |
-
on phpxmlrpc.sf.net
|
1077 |
-
|
1078 |
-
* server.php: fix for register_globals off; refer to docs on phpxmlrpc.sf.net
|
1079 |
-
|
1080 |
-
2005-04-15 Miles Lott <milos@groupwhere.org>
|
1081 |
-
|
1082 |
-
code formatting and comments
|
1083 |
-
|
1084 |
-
2005-04-03 Gaetano Giunta <giunta.gaetano@gmail.com>
|
1085 |
-
|
1086 |
-
* xmlrpc.inc: make use of global var $xmlrpcName in building User_Agent HTTP
|
1087 |
-
header (in conjunction with $xmlrpcVersion)
|
1088 |
-
|
1089 |
-
* agesort.php, client.php, comment.php, dicuss.php, mail.php, server.php,
|
1090 |
-
which.php: various janitorial fixes
|
1091 |
-
+ always html escape content received from xmlrpc server or from user input
|
1092 |
-
+ make the scripts run fine with register_globals off an register_long_arrays off
|
1093 |
-
+ always use the functions php_xmlrpc_en(de)code, even if the EPI extension
|
1094 |
-
is not installed
|
1095 |
-
+ in mail.php, allow user to see script source even if support for .phps files
|
1096 |
-
is not configured in the local web server
|
1097 |
-
|
1098 |
-
* testsuite.php: better detection of local webserver hostname for running tests
|
1099 |
-
against (if the user did not supply a webserver name)
|
1100 |
-
|
1101 |
-
2005-03-21 Gaetano Giunta <giunta.gaetano@gmail.com>
|
1102 |
-
|
1103 |
-
* xmlrpcs.inc: revert to a PHP3 compatible script (change '=& new' to '= new')
|
1104 |
-
|
1105 |
-
* xmlrpc.inc: revert to a PHP3 compatible script (lottsa fixes)
|
1106 |
-
|
1107 |
-
* testsuite.php: default to using local server as test target if no user
|
1108 |
-
provided values are available instead of heddley.com server
|
1109 |
-
|
1110 |
-
* testsuite.php: play nice to PHP3 in retrieving user-passed values
|
1111 |
-
|
1112 |
-
* testsuite.php: fix constructor method name for a type of tests
|
1113 |
-
|
1114 |
-
* phpunit.php: fix all cases of call-time-pass-by-ref
|
1115 |
-
|
1116 |
-
* phpunit.php: rename Exception class to _Exception if the script is run with
|
1117 |
-
PHP 5 (exception is a reserverd word)
|
1118 |
-
|
1119 |
-
2005-03-19 Gaetano Giunta <giunta.gaetano@gmail.com>
|
1120 |
-
|
1121 |
-
* xmlrpc.inc: fixed bug in new http header parsing code in case there is
|
1122 |
-
no correct separator between response headers and body
|
1123 |
-
|
1124 |
-
* xmlrpc.inc: added recognizing and stripping of HTTP/1.1 100 response headers
|
1125 |
-
|
1126 |
-
* xmlrpc.inc: strip extra whitespace from response body, as well as any junk
|
1127 |
-
that comes after the last </MethodResponse> tag. It allows the server code to
|
1128 |
-
be put on public providers that add e.g. javascript advertising to served pages
|
1129 |
-
|
1130 |
-
* xmlrpc.inc: removed unused parts of code, trailing whitespace
|
1131 |
-
|
1132 |
-
* xmlrpc.inc: fix possible bug (?) in xmlrpc_ee for BOOLEAN values: true was
|
1133 |
-
being handled differently than false
|
1134 |
-
|
1135 |
-
* testsuite.php: added a new file-based test to stress the response parsing
|
1136 |
-
modifications recently introduced; enabled debugging for file based tests
|
1137 |
-
|
1138 |
-
2005-03-15 Gaetano Giunta <giunta.gaetano@gmail.com>
|
1139 |
-
|
1140 |
-
* xmlrpc.inc: fixed missing declaration of global vars in xmlrpc_dh,
|
1141 |
-
sendpayloadhttps and sendpayloadhttp10
|
1142 |
-
|
1143 |
-
* xmlrpc.inc: changed error message for invalid responses: 'enable debugging'
|
1144 |
-
is more clear that 'enabling debugging' (the user is being encouraged to do it)
|
1145 |
-
|
1146 |
-
* xmlrpc.inc: rewrote HTTP response header parsing. It should be more tolerant
|
1147 |
-
of invalid headers, give more accurate error messages and be marginally faster,
|
1148 |
-
too.
|
1149 |
-
|
1150 |
-
* xmlrpc.inc: cosmetic whitespace fixes and remove useless one-liners
|
1151 |
-
|
1152 |
-
* xmlrpc.inc: build a shorter PHP command line to be evaluated for rebuilding
|
1153 |
-
values from parsed xml: use '$val =& nex xmlrpcval("value")' for string values
|
1154 |
-
instead of '$val =& nex xmlrpcval("value", $xmlrpcString)'
|
1155 |
-
|
1156 |
-
* xmlrpc.inc: fix change introduced 2005/01/30 moving call to curl_close()
|
1157 |
-
too early: it did not work on error situations
|
1158 |
-
|
1159 |
-
* testsuite.php: fix name of testAddingTest method, renamed testErrosString
|
1160 |
-
into testErrorString and removed useless warning for register_globals=off case
|
1161 |
-
|
1162 |
-
2005-02-27 Gaetano Giunta <giunta.gaetano@gmail.com>
|
1163 |
-
|
1164 |
-
* xmlrpc.inc: do not echo XML parsing error to screen (it is already dumped
|
1165 |
-
into error log)
|
1166 |
-
|
1167 |
-
* xmlrpc.inc: set hdrs field into response object in case of XML parsing error
|
1168 |
-
(uniform behaviour with other responses)
|
1169 |
-
|
1170 |
-
2005-02-26 Gaetano Giunta <giunta.gaetano@gmail.com>
|
1171 |
-
|
1172 |
-
* xmlrpc.inc: use global var $xmlrpcVersion as number for user agent string
|
1173 |
-
|
1174 |
-
* xmlrpcs.inc: eliminate server side PHP warning and give back to caller
|
1175 |
-
a better error msg in case the called method exists but no signature matches
|
1176 |
-
the number of parameters
|
1177 |
-
|
1178 |
-
2005-02-20 Gaetano Giunta <giunta.gaetano@gmail.com>
|
1179 |
-
|
1180 |
-
* xmlrpc.inc: accept a + sign in front of floats / integers, since the spec
|
1181 |
-
clearly mentions it
|
1182 |
-
|
1183 |
-
* xmlrpc.inc, xmlrpcs.inc: renamed function XmlEntities to xmlrpc_encode_entitites,
|
1184 |
-
to avoid using the same name as an array already defined
|
1185 |
-
|
1186 |
-
* xmlrpc.inc: fix bug introduced with escaping of UTF8 chars in xmlrpc error
|
1187 |
-
responses: correct behaviour is to escape chars inside serialize(), not when
|
1188 |
-
calling the xmlrpcresp creator
|
1189 |
-
|
1190 |
-
* testsuite.php: made test suite more friendly to modern PHP configs, allowing
|
1191 |
-
register_globals to be off and to set in the URL all testing parameters;
|
1192 |
-
added tests for newly introduced fixes; renamed existing tests acording to the
|
1193 |
-
docs inside phpunit.php (e.g. no subclass of TestCase should have a name
|
1194 |
-
starting with test...)
|
1195 |
-
|
1196 |
-
2005-02-19 Gaetano Giunta <giunta.gaetano@gmail.com>
|
1197 |
-
|
1198 |
-
* xmlrpc.inc: accept patch 683153 by mah0: if timeout is set, allow all socket
|
1199 |
-
operations to timeout at the given time, not only the socket connection
|
1200 |
-
|
1201 |
-
2005-02-13 Gaetano Giunta <giunta.gaetano@gmail.com>
|
1202 |
-
|
1203 |
-
* xmlrpc.inc: be tolerant to double values received in exponential notation:
|
1204 |
-
even though the spec forbids their usage PHP is fine with them
|
1205 |
-
|
1206 |
-
* xmlrpc.inc: fix bug: new xmlrpcval('-1') was creating an empty value instead
|
1207 |
-
of a string value!
|
1208 |
-
|
1209 |
-
* xmlrpc.inc, xmlrpcs.inc: fix the payload encoding changes introduced by
|
1210 |
-
Andres Salomon on 2004-03-17: sending named html entities inside an xml chunk
|
1211 |
-
makes it invalid, and thus renders the lib absolutely non-interoperable with
|
1212 |
-
any other xmlrpc implementation; moreover the current implementation only ever
|
1213 |
-
worked for non-ascii requests, while breaking client-parsing of responses
|
1214 |
-
containing non-ascii chars.
|
1215 |
-
The principle of using entities is preserved though, because it allows the
|
1216 |
-
client to send correct xml regardless of php internal charset encoding vs.
|
1217 |
-
xml request charset encoding, but using 'character references' instead.
|
1218 |
-
|
1219 |
-
* xmlrpc.inc: encode (non-ascii) chars into charset entities also for error
|
1220 |
-
strings
|
1221 |
-
|
1222 |
-
* xmlrpcs.inc: encode (non-ascii) chars into charset entities also for debug
|
1223 |
-
messages
|
1224 |
-
|
1225 |
-
* xmlrpcs.inc: added 'Accept-Charset' header in http request to let the server
|
1226 |
-
know what kind of charset encoding we do expect to be used for responses
|
1227 |
-
|
1228 |
-
* xmlrpc.inc, xmlrpcs.inc: explicitly tell the xml parser what charset the
|
1229 |
-
application expects to receive content in (notably strings). A new variable,
|
1230 |
-
$xmlrpc_internalencoding, (defaulting to ISO-8859-1) defines what charset the
|
1231 |
-
parser will use for passing back string xmlrpcvals to the PHP application
|
1232 |
-
(both server-side and client-side).
|
1233 |
-
This allows transparent usage of e.g. UTF-8 for encoding xml messages between
|
1234 |
-
server and client and ISO-8859-1 for internal string handling.
|
1235 |
-
ISO-8859-1 is, AFAIK, PHP internal encoding for all installs except
|
1236 |
-
mbstring-enabled ones.
|
1237 |
-
|
1238 |
-
2005-02-12 Gaetano Giunta <giunta.gaetano@gmail.com>
|
1239 |
-
|
1240 |
-
* xmlrpcs.inc: use '$var =& new(' construct to assign objects: on older versions
|
1241 |
-
of PHP objects are first built then copied over if the ampersand is omitted.
|
1242 |
-
Using it should make the code a little bit faster...
|
1243 |
-
|
1244 |
-
* doc/xmlrpc.php: update lib version number, release date in preparation for
|
1245 |
-
next release
|
1246 |
-
|
1247 |
-
* makefile: update lib version number in preparation for next release
|
1248 |
-
|
1249 |
-
* xmlrpc.inc: split up parsing of xmlrpc INT and DOUBLE values. This allows
|
1250 |
-
finer-grained control over valid values: now the '.' char is not allowed
|
1251 |
-
any more inside int values.
|
1252 |
-
|
1253 |
-
* xmlrpc.inc: fix for bug #560303: ints and doubles starting with '0' chars are
|
1254 |
-
no more parsed as octal values
|
1255 |
-
|
1256 |
-
2005-01-30 Gaetano Giunta <giunta.gaetano@gmail.com>
|
1257 |
-
|
1258 |
-
* xmlrpc.inc: Modifed last change by Miles: the functions php_xmlrpc_encode
|
1259 |
-
and php_xmlrpc_decode are now always defined, regardless of the existence of
|
1260 |
-
XMLRPC-EPI. This allows users to start using these functions as the 'default'
|
1261 |
-
functions, and pave the way for future deprecation of xmlrpc_encode/encode
|
1262 |
-
while maintaining a stable API.
|
1263 |
-
|
1264 |
-
* xmlrpc.inc: use '$var =& new(' construct to assign objects: on older versions
|
1265 |
-
of PHP objects are first built then copied over if the ampersand is omitted.
|
1266 |
-
Using it should make the code a little bit faster...
|
1267 |
-
|
1268 |
-
* xmlrpc.inc: close curl connection as soon as possible for https requests:
|
1269 |
-
it could save some memory / resources.
|
1270 |
-
|
1271 |
-
* xmlrpc.inc: added some extra info in the PHP error log message generated
|
1272 |
-
when an invalid xmlrpc integer/float value is encountered and we try to
|
1273 |
-
deserialize it.
|
1274 |
-
|
1275 |
-
* xmlrpc.inc: added @ char before fsockopen to avoid echoing useless warnings
|
1276 |
-
when connection to server fails; added the same to avoid echoing warnings when
|
1277 |
-
deserializing data of an unknown type
|
1278 |
-
|
1279 |
-
* xmlrpc.inc: reset the _xh array on each xmlrpc call: otherwise a new array
|
1280 |
-
member is created for each consecutive call and never destroyed, thus making it
|
1281 |
-
impossible to build an xmlrpc-client daemon beacuse of memory leaking.
|
1282 |
-
|
1283 |
-
* xmlrpc.inc: declare global the variables that are used as 'constants',
|
1284 |
-
so that xmlrpc.inc will work even if it is included from within a function
|
1285 |
-
|
1286 |
-
2004-12-27 Miles Lott <milos@groupwhere.org>
|
1287 |
-
* xmlrpc.inc: A new constant, XMLRPC_EPI_ENABLED, is defined depending on
|
1288 |
-
the existence of the function, xmlrpc_decode. This function will exist in
|
1289 |
-
PHP if the extension, XMLRPC-EPI (http://xmlrpc-epi.sourceforge.net), is
|
1290 |
-
loaded. It defines the functions xmlrpc_encode and xmlrpc_decode, which
|
1291 |
-
will conflict with functions of the same name in xmlrpc.inc. If this
|
1292 |
-
extension is loaded, we instead use the names php_xmlrpc_encode and
|
1293 |
-
php_xmlrpc_decode. Please look at server.php, testsuite.php, etc., for
|
1294 |
-
how this should be handled if using these functions.
|
1295 |
-
|
1296 |
-
2003-04-17 Andres Salomon <dilinger@voxel.net>
|
1297 |
-
* xmlrpc.inc: encode strings using htmlentities() instead of
|
1298 |
-
htmlspecialchars(), and add xmlrpc_html_entity_xlate(). This
|
1299 |
-
should fix longstanding issues with sending weird chars (from
|
1300 |
-
non-USASCII codesets like UTF-8, ISO-8859-1, etc) that caused
|
1301 |
-
the xml parser to choke. Multi-byte chars are now changed to
|
1302 |
-
entities before sending, so that the xmlrpc server doesn't need
|
1303 |
-
to know the encoding type of the POST data.
|
1304 |
-
* xmlrpcs.inc: call xmlrpc_html_entity_xlate before parsing
|
1305 |
-
request packet. The parser chokes on unknown entities (the
|
1306 |
-
entities created by htmlentities() are exactly that; html
|
1307 |
-
entities, not xml entities), so they must be converted from
|
1308 |
-
name form (é) to numerical form (é).
|
1309 |
-
|
1310 |
-
2003-01-12 Andres Salomon <dilinger@voxel.net>
|
1311 |
-
|
1312 |
-
* released 1.0.99.2.
|
1313 |
-
* Makefile: separate doc/Makefile a bit more from Makefile,
|
1314 |
-
and add clean rules.
|
1315 |
-
|
1316 |
-
2003-01-10 Andres Salomon <dilinger@voxel.net>
|
1317 |
-
|
1318 |
-
* xmlrpc.inc: xmlrpcresp and parseResponse cleanups; variable
|
1319 |
-
name renames ('xv' to 'val', for example), type checking, and
|
1320 |
-
stricter default values.
|
1321 |
-
* xmlrpc.inc: fix xmlrpcresp's faultcode; return -1 for FAULT
|
1322 |
-
responses from the server whose faultcodes don't reflect any
|
1323 |
-
errors.
|
1324 |
-
|
1325 |
-
2003-01-08 Andres Salomon <dilinger@voxel.net>
|
1326 |
-
|
1327 |
-
* xmlrpc.inc: rename $_xh[$parser]['ha'] to
|
1328 |
-
$_xh[$parser]['headers'].
|
1329 |
-
* xmlrpc.inc: fix bugs related to $_xh[$parser]['headers];
|
1330 |
-
some places treated this as an array, others as a scalar.
|
1331 |
-
Treat unconditionally as an array. Also wrap header debugging
|
1332 |
-
output in PRE tags.
|
1333 |
-
|
1334 |
-
2002-12-17 Andres Salomon <dilinger@voxel.net>
|
1335 |
-
|
1336 |
-
* released 1.0.99.
|
1337 |
-
* Makefile: changed the tarball format/dist rule to a more
|
1338 |
-
conventional form, as well as normal release updates.
|
1339 |
-
* xmlrpc.inc: added setSSLVerifyPeer and setSSLVerifyHost; as
|
1340 |
-
of curl 7.10, various certificate checks are done (by default).
|
1341 |
-
The default for CURLOPT_SSL_VERIFYHOST is to ensure the common
|
1342 |
-
name on the cert matches the provided hostname. This breaks a
|
1343 |
-
lot of stuff, so allow users to override it.
|
1344 |
-
* doc/xmlrpc_php.sgml: updated documentation accordingly.
|
1345 |
-
|
1346 |
-
2002-09-06 Geoffrey T. Dairiki <dairiki@dairiki.org>
|
1347 |
-
|
1348 |
-
Add support for system.multicall() to both the client
|
1349 |
-
and the server.
|
1350 |
-
|
1351 |
-
* testsuite.php: Add new tests 'testServerMulticall',
|
1352 |
-
and 'testClientMulticall'.
|
1353 |
-
|
1354 |
-
* xmlrpc.inc: Added new error messages for system.multicall().
|
1355 |
-
* xmlrpcs.inc: Added new procedure call system.multicall().
|
1356 |
-
See http://www.xmlrpc.com/discuss/msgReader$1208 for details.
|
1357 |
-
|
1358 |
-
* xmlrpc.inc: Added system.multicall functionality to
|
1359 |
-
xmlrpc_client. xmlrpc_client::send can now take an array of
|
1360 |
-
xmlrpcmsg's as an argument. In that case it will attempt
|
1361 |
-
to execute the whole array of procure calls in a single
|
1362 |
-
HTTP request using system.multicall(). (If that attempt fails,
|
1363 |
-
then the calls will be excuted one at a time.) The return
|
1364 |
-
value will be an array of xmlrpcresp's (or 0 upon transport
|
1365 |
-
failure.)
|
1366 |
-
|
1367 |
-
2001-11-29 Edd Dumbill <edd@usefulinc.com>
|
1368 |
-
|
1369 |
-
* xmlrpc.inc: fixed problem with processing HTTP headers that
|
1370 |
-
broke any payload with more than one consecutive newline in it.
|
1371 |
-
also initialise the 'ac' array member to empty string at start.
|
1372 |
-
* testsuite.php: added unit test to exercise above bug
|
1373 |
-
* xmlrpcs.inc: fixed uninitialized variable $plist
|
1374 |
-
|
1375 |
-
2001-09-25 Edd Dumbill <edd@usefulinc.com>
|
1376 |
-
|
1377 |
-
* xmlrpc.inc: applied urgent security fixes as identified by Dan
|
1378 |
-
Libby
|
1379 |
-
|
1380 |
-
2001-08-27 Edd Dumbill <edd@usefulinc.com>
|
1381 |
-
|
1382 |
-
* xmlrpc.inc: Merged in HTTPS support from Justin Miller, with a
|
1383 |
-
few additions for better traceability of failure conditions. Added
|
1384 |
-
small fix from Giancarlo Pinerolo. Bumped rev to 1.0. Changed
|
1385 |
-
license to BSD license.
|
1386 |
-
|
1387 |
-
2001-06-15 Edd Dumbill <edd@usefulinc.com>
|
1388 |
-
|
1389 |
-
* xmlrpcs.inc: Added \r into return MIME headers for server class
|
1390 |
-
|
1391 |
-
2001-04-25 Edd Dumbill <edd@usefulinc.com>
|
1392 |
-
|
1393 |
-
* server.php: Added interop suite of methods.
|
1394 |
-
|
1395 |
-
2001-04-24 Edd Dumbill <edd@usefulinc.com>
|
1396 |
-
|
1397 |
-
* testsuite.php: added in test case for string handling bug.
|
1398 |
-
|
1399 |
-
* xmlrpc.inc: merged in minor fixes from G Giunta to fix
|
1400 |
-
noninitialization. Created new method, getval(), which includes
|
1401 |
-
experimental support for recreating nested arrays, from Giunta and
|
1402 |
-
Sofer. Fixed string handling bug where characters after </string>
|
1403 |
-
but before </value> weren't ignored. Added in support for native
|
1404 |
-
boolean type into xmlrpc_encode (Giunta).
|
1405 |
-
|
1406 |
-
* xmlrpcs.inc: updated copyright notice
|
1407 |
-
|
1408 |
-
2001-01-15 Edd Dumbill <edd@usefulinc.com>
|
1409 |
-
|
1410 |
-
* xmlrpc.inc: fixed bug with creation of booleans. Put checks in
|
1411 |
-
to ensure that numbers were really numeric. Fixed bug with
|
1412 |
-
non-escaping of dollar signs in strings.
|
1413 |
-
|
1414 |
-
* testsuite.php: created test suite.
|
1415 |
-
|
1416 |
-
2000-08-26 Edd Dumbill <edd@usefulinc.com>
|
1417 |
-
|
1418 |
-
* xmlrpcs.inc: added xmlrpc_debugmsg() function which outputs
|
1419 |
-
debug information in comments inside the return payload XML
|
1420 |
-
|
1421 |
-
* xmlrpc.inc: merged in some changes from Dan Libby which fix up
|
1422 |
-
whitespace handling.
|
1423 |
-
|
1424 |
-
* xmlrpcs.inc: added Content-length header on response (bug from
|
1425 |
-
Jan Varga <varga@utcru.sk>. This means you can no longer print
|
1426 |
-
during processing
|
1427 |
-
|
1428 |
-
* xmlrpc.inc: changed ereg_replace to str_replace in several
|
1429 |
-
places (thanks to Dan Libby <dan@libby.com> for this).
|
1430 |
-
|
1431 |
-
* xmlrpc.inc: added xmlrpc_encode() and xmlrpc_decode() from Dan
|
1432 |
-
Libby--these helper routines make it easier to work in native PHP
|
1433 |
-
data structures.
|
1434 |
-
|
1435 |
-
2000-07-21 Edd Dumbill <edd@usefulinc.com>
|
1436 |
-
|
1437 |
-
* xmlrpc.inc: added xmlrpc_client::setCredentials method to pass
|
1438 |
-
in authorization information, and modified sendPayload* methods to
|
1439 |
-
send this OK. Thanks to Grant Rauscher for the impetus to do this.
|
1440 |
-
Also, made the client send empty <params></params> if there are no
|
1441 |
-
parameters set by the user.
|
1442 |
-
|
1443 |
-
* doc/xmlrpc_php.sgml: updated documentation to reflect recent
|
1444 |
-
changes
|
1445 |
-
|
1446 |
-
|
1447 |
-
2000-07-18 Edd Dumbill <edd@usefulinc.com>
|
1448 |
-
|
1449 |
-
* server.php: added examples.invertBooleans method to server as a
|
1450 |
-
useful test method for boolean values.
|
1451 |
-
|
1452 |
-
* xmlrpc.inc: rearranged the way booleans are handled to fix
|
1453 |
-
outstanding problems. Fixed calling addScalar() on arrays so it
|
1454 |
-
works. Finally fixed backslashification issues to remove the
|
1455 |
-
problem will dollar signs disappearing.
|
1456 |
-
|
1457 |
-
* booltest.php: really fixed booleans this time.
|
1458 |
-
|
1459 |
-
2000-06-03 Edd Dumbill <edd@usefulinc.com>
|
1460 |
-
|
1461 |
-
* xmlrpcs.inc: made signature verification more useful - now
|
1462 |
-
returns what it found was wrong
|
1463 |
-
|
1464 |
-
* xmlrpc.inc: fixed bug with decoding dateTimes. Also fixed a bug
|
1465 |
-
which meant a PHP syntax error happened when attempting to receive
|
1466 |
-
empty arrays or structs. Also fixed bug with booleans always being
|
1467 |
-
interpreted as 'true'.
|
1468 |
-
|
1469 |
-
* server.php: Added validator1 suite of tests to test against
|
1470 |
-
validator.xmlrpc.com
|
1471 |
-
|
1472 |
-
|
1473 |
-
2000-05-06 Edd Dumbill <edd@usefulinc.com>
|
1474 |
-
|
1475 |
-
* released 1.0b6
|
1476 |
-
|
1477 |
-
* added test.pl and test.py, Perl and Python scripts that exercise
|
1478 |
-
server.php somewhat (but not a lot)
|
1479 |
-
|
1480 |
-
* added extra fault condition for a non 200 OK response from the
|
1481 |
-
remote server.
|
1482 |
-
|
1483 |
-
* added iso8601_encode() and iso8601_decode() to give some support
|
1484 |
-
for passing dates around. They translate to and from UNIX
|
1485 |
-
timestamps. Updated documentation accordingly.
|
1486 |
-
|
1487 |
-
* fixed string backslashification -- was previously a little
|
1488 |
-
overzealous! new behavior is '\' --> '\\' and '"' -->
|
1489 |
-
'\"'. Everything else gets left alone.
|
1490 |
-
|
1491 |
-
2000-04-12 Edd Dumbill <edd@usefulinc.com>
|
1492 |
-
|
1493 |
-
* updated and bugfixed the documentation
|
1494 |
-
|
1495 |
-
* fixed base 64 encoding to only happen at serialize() time,
|
1496 |
-
rather than when a base64 value is created. This fixes the double
|
1497 |
-
encoding bug reported by Nicolay Mausz
|
1498 |
-
<castor@flying-dog.com>. The same approach ought to be taken with
|
1499 |
-
encoding XML entities in the data - this is a TODO.
|
1500 |
-
|
1501 |
-
* integrated further code from Peter Kocks: used his new code for
|
1502 |
-
send(), adding a second, optional, parameter which is a timeout
|
1503 |
-
parameter to fsockopen()
|
1504 |
-
|
1505 |
-
1999-10-11 Edd Dumbill <edd@usefulinc.com>
|
1506 |
-
|
1507 |
-
* added bug fixes from Peter Kocks <peter.kocks@baygate.com>
|
1508 |
-
|
1509 |
-
1999-10-10 Edd Dumbill <edd@usefulinc.com>
|
1510 |
-
|
1511 |
-
* updated the documentation
|
1512 |
-
|
1513 |
-
1999-10-08 Edd Dumbill <edd@usefulinc.com>
|
1514 |
-
|
1515 |
-
* added system.* methods and dispatcher, plus documentation
|
1516 |
-
|
1517 |
-
* fixed bug which meant request::getNumParams was returning an
|
1518 |
-
incorrect value
|
1519 |
-
|
1520 |
-
* added signatures into the dispatch map. This BREAKS
|
1521 |
-
COMPATIBILITY with previous releases of this code
|
1522 |
-
|
1523 |
-
1999-08-18 Edd Dumbill <edd@usefulinc.com>
|
1524 |
-
|
1525 |
-
* made entity encoding and decoding transparent now on string
|
1526 |
-
passing.
|
1527 |
-
|
1528 |
-
* de-globalised the globals in the parse routines, using an
|
1529 |
-
associative array to hold all parser state $_xh
|
1530 |
-
|
1531 |
-
* changed default input encoding to be UTF-8 to match expectation
|
1532 |
-
|
1533 |
-
* separated out parseResponse into parseResponse and
|
1534 |
-
parseResponseFile so that you can call parseResponse on a string
|
1535 |
-
if you have one handy
|
1536 |
-
|
1537 |
-
1999-07-20 Edd Dumbill <edd@usefulinc.com>
|
1538 |
-
|
1539 |
-
* Moved documentation into Docbook format
|
1540 |
-
|
1541 |
-
1999-07-19 Edd Dumbill <edd@usefulinc.com>
|
1542 |
-
|
1543 |
-
* Added an echo server into server.php and echotest.php, a client
|
1544 |
-
which will exercise the new echo routine.
|
1545 |
-
|
1546 |
-
* Added test for no valid value returned: in this case will now
|
1547 |
-
throw the error "invalid payload"
|
1548 |
-
|
1549 |
-
* Added serialize() method to xmlrpcresp to return a string with
|
1550 |
-
the response serialized as XML
|
1551 |
-
|
1552 |
-
* Added automatic encoding and decoding for base64 types
|
1553 |
-
|
1554 |
-
* Added setDebug() method to client to enable HTML output
|
1555 |
-
debugging in the client
|
1556 |
-
|
1557 |
-
1999-07-08 Edd Dumbill <edd@usefulinc.com>
|
1558 |
-
|
1559 |
-
* Improved XML parse error reporting on the server side to send it
|
1560 |
-
back in a faultCode packet. expat errors now begin at 100
|
1561 |
-
|
1562 |
-
1999-07-07 Edd Dumbill <edd@usefulinc.com>
|
1563 |
-
|
1564 |
-
* Changed the structmem and arraymem methods of xmlrpcval to always
|
1565 |
-
return xmlrpc vals whether they referred to scalars or complex
|
1566 |
-
types.
|
1567 |
-
|
1568 |
-
* Added the server class and demonstrations
|
1569 |
-
|
1570 |
-
* Fixed bugs in the XML parsing and reworked it
|
1571 |
-
|
1572 |
-
|
1573 |
-
$Id: ChangeLog,v 1.96 2009/03/16 19:39:11 ggiunta Exp $
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/vendor/infusionsoft/xmlrpc-3.0/Makefile
DELETED
@@ -1,123 +0,0 @@
|
|
1 |
-
# Makefile for phpxmlrpc library
|
2 |
-
# $Id: Makefile,v 1.37 2008/03/06 22:37:19 ggiunta Exp $
|
3 |
-
|
4 |
-
### USER EDITABLE VARS ###
|
5 |
-
|
6 |
-
# path to PHP executable, preferably CLI version
|
7 |
-
PHP=/usr/local/bin/php
|
8 |
-
|
9 |
-
# path were xmlrpc lib files will be copied to
|
10 |
-
PHPINCLUDEDIR=/usr/local/lib/php
|
11 |
-
|
12 |
-
# mkdir is a thorny beast under windows: make sure we can not use the cmd version, running eg. "make MKDIR=mkdir.exe"
|
13 |
-
MKDIR=mkdir
|
14 |
-
|
15 |
-
#find too
|
16 |
-
FIND=find
|
17 |
-
|
18 |
-
|
19 |
-
#### DO NOT TOUCH FROM HERE ONWARDS ###
|
20 |
-
|
21 |
-
# recover version number from code
|
22 |
-
# thanks to Firman Pribadi for unix command line help
|
23 |
-
# on unix shells lasts char should be \\2/g )
|
24 |
-
export VERSION=$(shell egrep "\$GLOBALS *\[ *'xmlrpcVersion' *\] *= *'" lib/xmlrpc.inc | sed -r s/"(.*= *' *)([0-9a-zA-Z.-]+)(.*)"/\2/g )
|
25 |
-
|
26 |
-
LIBFILES=lib/xmlrpc.inc lib/xmlrpcs.inc lib/xmlrpc_wrappers.inc
|
27 |
-
|
28 |
-
EXTRAFILES=extras/test.pl \
|
29 |
-
extras/test.py \
|
30 |
-
extras/rsakey.pem \
|
31 |
-
extras/workspace.testPhpServer.fttb
|
32 |
-
|
33 |
-
DEMOFILES=demo/vardemo.php \
|
34 |
-
demo/demo1.txt \
|
35 |
-
demo/demo2.txt \
|
36 |
-
demo/demo3.txt
|
37 |
-
|
38 |
-
DEMOSFILES=demo/server/discuss.php \
|
39 |
-
demo/server/server.php \
|
40 |
-
demo/server/proxy.php
|
41 |
-
|
42 |
-
DEMOCFILES=demo/client/agesort.php \
|
43 |
-
demo/client/client.php \
|
44 |
-
demo/client/comment.php \
|
45 |
-
demo/client/introspect.php \
|
46 |
-
demo/client/mail.php \
|
47 |
-
demo/client/simple_call.php \
|
48 |
-
demo/client/which.php \
|
49 |
-
demo/client/wrap.php \
|
50 |
-
demo/client/zopetest.php
|
51 |
-
|
52 |
-
TESTFILES=test/testsuite.php \
|
53 |
-
test/benchmark.php \
|
54 |
-
test/parse_args.php \
|
55 |
-
test/phpunit.php \
|
56 |
-
test/verify_compat.php \
|
57 |
-
test/PHPUnit/*.php
|
58 |
-
|
59 |
-
INFOFILES=Changelog \
|
60 |
-
Makefile \
|
61 |
-
NEWS \
|
62 |
-
README
|
63 |
-
|
64 |
-
DEBUGGERFILES=debugger/index.php \
|
65 |
-
debugger/action.php \
|
66 |
-
debugger/common.php \
|
67 |
-
debugger/controller.php
|
68 |
-
|
69 |
-
|
70 |
-
all: install
|
71 |
-
|
72 |
-
install:
|
73 |
-
cd lib && cp ${LIBFILES} ${PHPINCLUDEDIR}
|
74 |
-
@echo Lib files have been copied to ${PHPINCLUDEDIR}
|
75 |
-
cd doc && $(MAKE) install
|
76 |
-
|
77 |
-
test:
|
78 |
-
cd test && ${PHP} -q testsuite.php
|
79 |
-
|
80 |
-
|
81 |
-
### the following targets are to be used for library development ###
|
82 |
-
|
83 |
-
# make tag target: tag existing working copy as release in cvs.
|
84 |
-
# todo: convert dots in underscore in $VERSION
|
85 |
-
tag:
|
86 |
-
cvs -q tag -p release_${VERSION}
|
87 |
-
|
88 |
-
dist: xmlrpc-${VERSION}.zip xmlrpc-${VERSION}.tar.gz
|
89 |
-
|
90 |
-
xmlrpc-${VERSION}.zip xmlrpc-${VERSION}.tar.gz: ${LIBFILES} ${DEBUGGERFILES} ${INFOFILES} ${TESTFILES} ${EXTRAFILES} ${DEMOFILES} ${DEMOSFILES} ${DEMOCFILES}
|
91 |
-
@echo ---${VERSION}---
|
92 |
-
rm -rf xmlrpc-${VERSION}
|
93 |
-
${MKDIR} xmlrpc-${VERSION}
|
94 |
-
${MKDIR} xmlrpc-${VERSION}/demo
|
95 |
-
${MKDIR} xmlrpc-${VERSION}/demo/client
|
96 |
-
${MKDIR} xmlrpc-${VERSION}/demo/server
|
97 |
-
${MKDIR} xmlrpc-${VERSION}/test
|
98 |
-
${MKDIR} xmlrpc-${VERSION}/test/PHPUnit
|
99 |
-
${MKDIR} xmlrpc-${VERSION}/extras
|
100 |
-
${MKDIR} xmlrpc-${VERSION}/lib
|
101 |
-
${MKDIR} xmlrpc-${VERSION}/debugger
|
102 |
-
cp --parents ${DEMOFILES} xmlrpc-${VERSION}
|
103 |
-
cp --parents ${DEMOCFILES} xmlrpc-${VERSION}
|
104 |
-
cp --parents ${DEMOSFILES} xmlrpc-${VERSION}
|
105 |
-
cp --parents ${TESTFILES} xmlrpc-${VERSION}
|
106 |
-
cp --parents ${EXTRAFILES} xmlrpc-${VERSION}
|
107 |
-
cp --parents ${LIBFILES} xmlrpc-${VERSION}
|
108 |
-
cp --parents ${DEBUGGERFILES} xmlrpc-${VERSION}
|
109 |
-
cp ${INFOFILES} xmlrpc-${VERSION}
|
110 |
-
cd doc && $(MAKE) dist
|
111 |
-
# on unix shells last char should be \;
|
112 |
-
${FIND} xmlrpc-${VERSION} -type f ! -name "*.fttb" ! -name "*.pdf" ! -name "*.gif" -exec dos2unix {} ;
|
113 |
-
-rm xmlrpc-${VERSION}.zip xmlrpc-${VERSION}.tar.gz
|
114 |
-
tar -cvf xmlrpc-${VERSION}.tar xmlrpc-${VERSION}
|
115 |
-
gzip xmlrpc-${VERSION}.tar
|
116 |
-
zip -r xmlrpc-${VERSION}.zip xmlrpc-${VERSION}
|
117 |
-
|
118 |
-
doc:
|
119 |
-
cd doc && $(MAKE) doc
|
120 |
-
|
121 |
-
clean:
|
122 |
-
rm -rf xmlrpc-${VERSION} xmlrpc-${VERSION}.zip xmlrpc-${VERSION}.tar.gz
|
123 |
-
cd doc && $(MAKE) clean
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/vendor/infusionsoft/xmlrpc-3.0/NEWS
DELETED
@@ -1,333 +0,0 @@
|
|
1 |
-
XML-RPC for PHP version 3.0.0 beta - 2009/09/05
|
2 |
-
|
3 |
-
This is the first release of the library to only support PHP 5.
|
4 |
-
Some legacy code has been removed, and support for features such as exceptions
|
5 |
-
and dateTime objects introduced.
|
6 |
-
|
7 |
-
The "beta" tag is meant to indicate the fact that the refactoring has been more widespread
|
8 |
-
than in precedent releases and that more changes are likely to be introduced with time -
|
9 |
-
the library is still considered to be production quality.
|
10 |
-
|
11 |
-
* improved: removed all usage of php functions deprecated in php 5.3, usage of assign-by-ref when creating new objects etc...
|
12 |
-
* improved: add support for the <ex:nil/> tag used by the apache library, both in input and output
|
13 |
-
* improved: add support for dateTime objects in both in php_xmlrpc_encode and as parameter for constructor of xmlrpcval
|
14 |
-
* improved: add support for timestamps as parameter for constructor of xmlrpcval
|
15 |
-
* improved: add option 'dates_as_objects' to php_xmlrpc_decode to return dateTime objects for xmlrpc datetimes
|
16 |
-
* improved: add new method SetCurlOptions to xmrlpc_client to allow extra flexibility in tweaking http config, such as explicitly binding to an ip address
|
17 |
-
* improved: add new method SetUserAgent to xmrlpc_client to to allow having different user-agent http headers
|
18 |
-
* improved: add a new member variable in server class to allow fine-tuning of the encoding of returned values when the server is in 'phpvals' mode
|
19 |
-
* improved: allow servers in 'xmlrpcvals' mode to also register plain php functions by defining them in the dispatch map with an added option
|
20 |
-
* improved: catch exceptions thrown during execution of php functions exposed as methods by the server
|
21 |
-
* fixed: bad encoding if same object is encoded twice using php_xmlrpc_encode
|
22 |
-
|
23 |
-
|
24 |
-
XML-RPC for PHP version 2.2.2 - 2009/03/16
|
25 |
-
|
26 |
-
This release corrects all bugs that have been reported and sucesfully reproduced since
|
27 |
-
version 2.2.1.
|
28 |
-
Regardless of the intimidating message about dropping PHP 4 support, it still does
|
29 |
-
support that ancient, broken and insecure platform.
|
30 |
-
|
31 |
-
* fixed: php warning when receiving 'false' in a bool value
|
32 |
-
* fixed: improve robustness of the debugger when parsing weird results from non-compliant servers
|
33 |
-
* fixed: format floating point values using the correct decimal separator even when php locale is set to one that uses comma
|
34 |
-
* fixed: use feof() to test if socket connections are to be closed instead of the number of bytes read (rare bug when communicating with some servers)
|
35 |
-
* fixed: be more tolerant in detection of charset in http headers
|
36 |
-
* fixed: fix encoding of UTF8 chars outside of the BMP plane
|
37 |
-
* fixed: fix detection of zlib.output_compression
|
38 |
-
* improved: allow the add_to_map server method to add docs for single params too
|
39 |
-
* improved: added the possibility to wrap for exposure as xmlrpc methods plain php class methods, object methods and even whole classes
|
40 |
-
|
41 |
-
|
42 |
-
XML-RPC for PHP version 2.2.1 - 2008/03/06
|
43 |
-
|
44 |
-
This release corrects all bugs that have been reported and sucesfully reproduced.
|
45 |
-
It is the last release of the library that will support PHP 4.
|
46 |
-
|
47 |
-
* fixed: work aroung bug in php 5.2.2 which broke support of HTTP_RAW_POST_DATA
|
48 |
-
* fixed: is_dir parameter of setCaCertificate() method is reversed
|
49 |
-
* fixed: a php warning in xmlrpc_client creator method
|
50 |
-
* fixed: parsing of '1e+1' as valid float
|
51 |
-
* fixed: allow errorlevel 3 to work when prev. error handler was a static method
|
52 |
-
* fixed: usage of client::setcookie() for multiple cookies in non-ssl mode
|
53 |
-
* improved: support for CP1252 charset is not part or the library but almost possible
|
54 |
-
* improved: more info when curl is enabled and debug mode is on
|
55 |
-
|
56 |
-
|
57 |
-
XML-RPC for PHP version 2.2 - 2007/02/25
|
58 |
-
|
59 |
-
This release corrects a couple of bugs and adds a few minor features.
|
60 |
-
|
61 |
-
* fixed: debugger errors on php installs with magic_quotes_gpc on
|
62 |
-
* fixed: support for https connections via proxy
|
63 |
-
* fixed: wrap_xmlrpc_method() generated code failed to properly encode php objects
|
64 |
-
* improved: slightly faster encoding of data which is internally UTF-8
|
65 |
-
* improved: debugger always generates a 'null' id for jsonrpc if user omits it
|
66 |
-
* new: debugger can take advantage of a graphical value builder
|
67 |
-
(it has to be downloaded separately, as part of jsxmlrpc package)
|
68 |
-
* new: support for the <NIL/> xmlrpc extension
|
69 |
-
* new: server support for the system.getCapabilities xmlrpc extension
|
70 |
-
* new: wrap_xmlrpc_method() accepts two new options: debug and return_on_fault
|
71 |
-
|
72 |
-
|
73 |
-
XML-RPC for PHP version 2.1 - 2006/08/28
|
74 |
-
|
75 |
-
This release corrects quite a few bugs and adds some interesting new features.
|
76 |
-
There is a minor security enhancement and overall speedup too.
|
77 |
-
|
78 |
-
It has been tested with PHP 4.0.5 up to 4.4.4 and 5.1.5.
|
79 |
-
Please note that 404pl1 is NOT supported, and has not been since 2.0.
|
80 |
-
|
81 |
-
*** PLASE READ CAREFULLY BELOW ***
|
82 |
-
|
83 |
-
CHANGES THAT MIGHT AFFECT DEPLOYED APPLICATIONS:
|
84 |
-
|
85 |
-
The wrap_php_function and wrap_xmlrpc_method functions have been moved out of
|
86 |
-
the base library file xmlrpc.inc into a file of their own: xmlrpc_wrappers.inc.
|
87 |
-
You will have to include() / require() it in your scripts if you have been using
|
88 |
-
those functions.
|
89 |
-
|
90 |
-
For increased security, the automatic rebuilding of php object instances out of
|
91 |
-
received xmlrpc structs in wrap_xmlrpc_method() has been disabled (but it can be
|
92 |
-
optionally reenabled).
|
93 |
-
|
94 |
-
The constructor of xmlrpcval() values has seen major changes, and it will not
|
95 |
-
throw a php warning anymore when invoked using an unknown xmlrpc type: the
|
96 |
-
error will only be written to php error log. Also new xmlrpcval('true', 'boolean')
|
97 |
-
is not supported anymore.
|
98 |
-
|
99 |
-
MAJOR IMPROVEMENTS:
|
100 |
-
|
101 |
-
The new function php_xmlrpc_decode_xml() will take the xml representation of
|
102 |
-
either an xmlrpc request, response or single value and return the corresponding
|
103 |
-
php-xmlrpc object instance.
|
104 |
-
|
105 |
-
Both wrap_php_function() and wrap_xmlrpc_method() functions accept many more
|
106 |
-
options to fine tune their behaviour, including one to return the php code to
|
107 |
-
be saved and later used as standalone php script.
|
108 |
-
|
109 |
-
A new function wrap_xmlrpc_server() has been added, to wrap all (or some) of the
|
110 |
-
methods exposed by a remote xmlrpc server into a php class.
|
111 |
-
|
112 |
-
Lib internals have been modified to provide better support for grafting extra
|
113 |
-
functionality on top of it. Stay tuned for future releases of the EXTRAS package.
|
114 |
-
|
115 |
-
Last but not least a new file has been added: verify_compat.php, to help users
|
116 |
-
diagnose the level of compliance of the current php install with the library.
|
117 |
-
|
118 |
-
CHANGELOG IN DETAIL:
|
119 |
-
|
120 |
-
* fixed bug 1311927: client not playing nice with some proxy/firewall on ports != 80
|
121 |
-
* fixed bug 1334340: all ereg_ functions have been replaced with corresponding preg_
|
122 |
-
* fixed bug: wrong handling of 'deflate' http encoding, both server and client side
|
123 |
-
* fixed bug: sending compressed responses when php output compression is enabled was not working
|
124 |
-
* fixed bug: addarray() and addstruct() where not returning 1 when adding data to already initialized values
|
125 |
-
* fixed bug: non-ascii chars used in struct element names where not being encoded correctly
|
126 |
-
* restored compatibility with php 4.0.5 (for those poor souls still stuck on it)
|
127 |
-
* server->service() now returns either the payload or xmlrpcresp instance
|
128 |
-
* server->add_to_map() now accepts methods with no param definitions
|
129 |
-
* added new function: php_xmlrpc_decode_xml()
|
130 |
-
* added new function: wrap_xmlrpc_server()
|
131 |
-
* major improvements and security enhancements to wrap_php_function() and wrap_xmlrpc_method()
|
132 |
-
* documentation for single parameters of exposed methods can be added to the dispatch map
|
133 |
-
(and turned into html docs in conjunction with a future release of the extras package)
|
134 |
-
* full response payload is saved into xmlrpcresp object for further debugging
|
135 |
-
* stricter parsing of incmoing xmlrpc messages: two more invalid cases are now detected
|
136 |
-
(double data element inside array and struct/array after scalar inside value element)
|
137 |
-
* debugger can now generate code that wraps a remote method into php function (works for jsonrpc, too)
|
138 |
-
* debugger has better support for being activated via a single GET call (for integration into other tools?)
|
139 |
-
* more logging of errors in a lot of situations
|
140 |
-
* javadoc documentation of lib files almost complete
|
141 |
-
* the usual amount of new testcases in the testsuite
|
142 |
-
* many performance tweaks and code cleanups
|
143 |
-
* added foundation for emulating the API of the xmlrpc extension (extras package needed)
|
144 |
-
|
145 |
-
|
146 |
-
XML-RPC for PHP version 2.0 - 2006/04/24
|
147 |
-
|
148 |
-
I'm pleased to announce XML-RPC for PHP version 2.0, final.
|
149 |
-
|
150 |
-
With respect to the last release candidate, this release corrects a few small
|
151 |
-
bugs and adds a couple of new features: more authentication options (digest and
|
152 |
-
ntlm for servers, ntlm for proxies, and some https custom certificates stuff);
|
153 |
-
all the examples have been reviewed and some demo files added,
|
154 |
-
including a ready-made xmlrpc proxy (useful e.g. for ajax calls, when the xmlrpc
|
155 |
-
client is a browser); the server logs more warning messages for incorrect situations;
|
156 |
-
both client and server are more tolerant of commonly-found mistakes.
|
157 |
-
The debugger has been upgraded to reflect the new client capabilities.
|
158 |
-
|
159 |
-
In greater detail:
|
160 |
-
|
161 |
-
* fixed bug: method xmlrpcval::structmemexists($value) would not work
|
162 |
-
* fixed bug: wrap_xmlrpc_method would fail if invoked with a client object that
|
163 |
-
has return_type=phpvals
|
164 |
-
* fixed bug: in case of call to client::multicall without fallback and server error
|
165 |
-
* fixed bug: recursive serialization of xmlrpcvals loosing specified UTF8 charset
|
166 |
-
* fixed bug: serializing to ISO-8859-1 with php 5 would raise an error if non-ascii
|
167 |
-
chars where found when decoding
|
168 |
-
* new: client can use NTLM and Digest authentication methods for https and http 1.1
|
169 |
-
connections; authentication to proxy can be set to NTLM, too
|
170 |
-
* new: server tolerates user functions returning a single xmlrpcval object instead
|
171 |
-
of an xmlrpcresp
|
172 |
-
* new: server does more checks for presence and correct return type of user
|
173 |
-
coded method handling functions, and logs inconsistencies to php error log
|
174 |
-
* new: client method SetCaCertificate($cert, $is_dir) to validate server against
|
175 |
-
* new: both server and client tolerate receiving 'true' and 'false' for bool values
|
176 |
-
(which btw are not valid according to the xmlrpc spec)
|
177 |
-
|
178 |
-
|
179 |
-
XML-RPC for PHP version 2.0RC3 - 2006/01/22
|
180 |
-
|
181 |
-
This release corrects a few bugs and adds some interesting new features.
|
182 |
-
It has been tested with PHP up to 4.4.2 and 5.1.2.
|
183 |
-
|
184 |
-
* fixed bug: server not recognizing clients that declare support for http compression
|
185 |
-
* fixed bug: serialization of new xmlrpcval (8, 'string') when internal encoding
|
186 |
-
set to UTF-8
|
187 |
-
* fixed bug: serialization of new xmlrpcval ('hello', 'int') would produce
|
188 |
-
invalid xml-rpc
|
189 |
-
* new: let the server accept 'class::method' syntax in the dispatch map
|
190 |
-
* new: php_xmlrpc_decode() can decode xmlrpcmessage objects
|
191 |
-
* new: both client and server can specify a charset to be used for serializing
|
192 |
-
values instead of the default 'US-ASCII+xml-entities-for-other-characters'.
|
193 |
-
Values allowed: ISO-8859-1 and UTF-8
|
194 |
-
* new: the server object can register 'plain' php functions instead of functions
|
195 |
-
that accept a single parameter of type xmlrpcmsg. Faster, uses less memory
|
196 |
-
(but comes with minor drawbacks as well, read the manual for more details)
|
197 |
-
* new: client::setDebug(2) can be used to have the request payload printed to
|
198 |
-
screen before being sent
|
199 |
-
* new: server::service($data) lets user parse data other than POST body, for
|
200 |
-
easier testing / subclassing
|
201 |
-
* changed: framework-generated debug messages are sent back by the server base64
|
202 |
-
encoded, to avoid any charset/xml compatibility problem
|
203 |
-
* other minor fixes
|
204 |
-
|
205 |
-
The usual refactoring of a lot of (private) methods has taken place, with new
|
206 |
-
parameters added to some functions.
|
207 |
-
Javadoc documentation has been improved a lot.
|
208 |
-
The HTML documentation has been shuffled around a bit, hoping to give it a more
|
209 |
-
logical organization.
|
210 |
-
|
211 |
-
The experimental support for the JSON protocol has been removed, and will be
|
212 |
-
packaged as a separate download with some extra very interesting stuff (human
|
213 |
-
readable auto-generated documentation, anyone?).
|
214 |
-
|
215 |
-
|
216 |
-
XML-RPC for PHP version 2.0RC2 - 2005/11/22
|
217 |
-
|
218 |
-
This release corrects a few bugs and adds basically one new method for better
|
219 |
-
HTTPS support:
|
220 |
-
|
221 |
-
* fixed two bugs that prevented xmlrpc calls to take place over https
|
222 |
-
* fixed two bugs that prevented proper recognition of xml character set
|
223 |
-
when it was declared inside the xml prologue
|
224 |
-
* added xmlrpc_client::setKey($key, $keypass) method, to allow using client
|
225 |
-
side certificates for https connections
|
226 |
-
* fixed bug that prevented proper serialization of string xmlrpcvals when
|
227 |
-
$xmlrpc_internalencoding was set to UTF-8
|
228 |
-
* fixed bug in xmlrpc_server::echoInput() (and marked method as deprecated)
|
229 |
-
* correctly set cookies/http headers into xmlrpcresp objects even when the
|
230 |
-
sned() method call fails for some reason
|
231 |
-
* added a benchmark file in the testsuite directory
|
232 |
-
|
233 |
-
A couple of (private/protected) methods have been refactored, as well as a
|
234 |
-
couple of extra parameters added to some (private) functions - this has no
|
235 |
-
impact on the public API and should be of interest primarily to people extending
|
236 |
-
/ subclassing the lib.
|
237 |
-
|
238 |
-
There is also new, PARTIAL support for the JSON-RPC protocol, implemented in
|
239 |
-
two files in the extras dir (more info about json-rpc at http://json-rpc.org)
|
240 |
-
|
241 |
-
|
242 |
-
XML-RPC for PHP version 2.0RC1 - 2005/10/03
|
243 |
-
|
244 |
-
I'm pleased to announce XML-RPC for PHP version 2.0, release candidate 1.
|
245 |
-
|
246 |
-
This release introduces so many new features it is almost impossible to list them
|
247 |
-
here, making the library finally on pair with, if not more advanced than, any other
|
248 |
-
similar offer (e.g. the PEAR XMLRPC package or the Incutio IXR library).
|
249 |
-
No, really, trust me.
|
250 |
-
|
251 |
-
The minimum supported PHP version is now 4.2 - natively - or 4.0.4pl1 - by usage of
|
252 |
-
a couple of compatibility classes (code taken from PEAR php_compat package).
|
253 |
-
|
254 |
-
The placement of files and directories in the distribution has been deeply modified,
|
255 |
-
in the hope of making it more clear, now that the file count has increased.
|
256 |
-
I hope you find it easy.
|
257 |
-
|
258 |
-
Support for "advanced" HTTP features such as cookies, proxies and keep-alives has
|
259 |
-
been added at last.
|
260 |
-
|
261 |
-
It is now much easier to convert between xmlrpcval objects and php values, and
|
262 |
-
in fact php_xmlrpc_encode and php_xmlrpc_decode are now the recommended methods
|
263 |
-
for all cases, except when encoding base64 data.
|
264 |
-
|
265 |
-
Two new (experimental) functions have been added, allowing automagic conversion
|
266 |
-
of a php function into an xmlrpc method to be exposed and vice-versa.
|
267 |
-
|
268 |
-
PHP objects can be now automatically serialized as xmlrpc struct values and
|
269 |
-
correctly deserialized on the other end of the transmission, provided that the
|
270 |
-
same class definition is present on both sides and no object members are of
|
271 |
-
type resource.
|
272 |
-
|
273 |
-
A lot of the existing class methods have been overloaded with extra parameters
|
274 |
-
or new functionality, and a few added ex-novo, making usage easier than ever.
|
275 |
-
|
276 |
-
A complete debugger solution is included in the distribution. It needs a web server
|
277 |
-
to run (a freely available version of the same debugger is accessible online, it
|
278 |
-
can be found at http://phpxmlrpc.sourceforge.net).
|
279 |
-
|
280 |
-
For a more detailed list of changes, please read carefully chapter 2 of the
|
281 |
-
included documentation, or, even better, take a look at the source code, which
|
282 |
-
is commented in javadoc style quite a bit.
|
283 |
-
|
284 |
-
|
285 |
-
XML-RPC for PHP version 1.2 - 2005/08/14
|
286 |
-
|
287 |
-
This removes all use of eval(), which is a potential security problem.
|
288 |
-
All users are encouraged to upgrade as soon as possible.
|
289 |
-
As of this release we are no longer php3-compatible.
|
290 |
-
|
291 |
-
|
292 |
-
XML-RPC for PHP version 1.1.1 - 2005/06/30
|
293 |
-
|
294 |
-
This is a security vulnerability fix release.
|
295 |
-
All users are invited to upgrade as soon as possible.
|
296 |
-
|
297 |
-
|
298 |
-
XML-RPC for PHP version 1.1 - 2005/05/03
|
299 |
-
|
300 |
-
I'm pleased to announce XML-RPC for PHP version 1.1
|
301 |
-
It's taken two years to get to the this point, but here we are, finally.
|
302 |
-
|
303 |
-
This is a bugfix and maintenance release. No major new features have been added.
|
304 |
-
All known bugs have been ironed out, unless fixing would have meant breaking
|
305 |
-
the API.
|
306 |
-
The code has been tested with PHP 3, 4 and 5, even tough PHP 4 is the main
|
307 |
-
development platform (and some warnings will be emitted when runnning PHP5).
|
308 |
-
|
309 |
-
Notheworthy changes include:
|
310 |
-
|
311 |
-
* do not clash any more with the EPI xmlrpc extension bundled with PHP 4 and 5
|
312 |
-
* fixed the unicode/charset problems that have been plaguing the lib for years
|
313 |
-
* proper parsing of int and float values prepended with zeroes or the '+' char
|
314 |
-
* accept float values in exponential notation
|
315 |
-
* configurable http user-agent string
|
316 |
-
* use the same timeout on client socket reads as used for connecting
|
317 |
-
* more explicative error messages in xmlrpcresponse in many cases
|
318 |
-
* much more tolerant parsing of malformed http responses from xmlrpc servers
|
319 |
-
* fixed memleak that prevented the client to be used in never-ending scripts
|
320 |
-
* parse bigger xmlrpc messages without crashing (1MB in size or more)
|
321 |
-
* be tolerant to xmlrpc responses generated on public servers that add
|
322 |
-
javascript advertising at the end of hosted content
|
323 |
-
* the lib generates quite a few less PHP warnings during standard operation
|
324 |
-
|
325 |
-
This is the last release that will support PHP 3.
|
326 |
-
The next release will include better support for PHP 5 and (possibly) a slew of
|
327 |
-
new features.
|
328 |
-
|
329 |
-
The changelog is available at:
|
330 |
-
http://cvs.sourceforge.net/viewcvs.py/phpxmlrpc/xmlrpc/ChangeLog?view=markup
|
331 |
-
|
332 |
-
Please report bugs to the XML-RPC PHP mailing list or to the sourceforge project
|
333 |
-
pages at http://sourceforge.net/projects/phpxmlrpc/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/vendor/infusionsoft/xmlrpc-3.0/README
DELETED
@@ -1,13 +0,0 @@
|
|
1 |
-
NAME: XMLRPC FOR PHP
|
2 |
-
|
3 |
-
DESCRIPTION: A php library for building xmlrpc clients and servers
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
HTML documentation can be found in the doc/ directory.
|
8 |
-
|
9 |
-
Recent changes in the ChangeLog
|
10 |
-
|
11 |
-
Use of this software is subject to the terms in doc/index.html
|
12 |
-
|
13 |
-
The passphrase for the rsakey.pem certificate is 'test'.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/vendor/infusionsoft/xmlrpc-3.0/lib/xmlrpc.inc
DELETED
@@ -1,3840 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
// by Edd Dumbill (C) 1999-2002
|
3 |
-
// <edd@usefulinc.com>
|
4 |
-
|
5 |
-
// Copyright (c) 1999,2000,2002 Edd Dumbill.
|
6 |
-
// All rights reserved.
|
7 |
-
//
|
8 |
-
// Redistribution and use in source and binary forms, with or without
|
9 |
-
// modification, are permitted provided that the following conditions
|
10 |
-
// are met:
|
11 |
-
//
|
12 |
-
// * Redistributions of source code must retain the above copyright
|
13 |
-
// notice, this list of conditions and the following disclaimer.
|
14 |
-
//
|
15 |
-
// * Redistributions in binary form must reproduce the above
|
16 |
-
// copyright notice, this list of conditions and the following
|
17 |
-
// disclaimer in the documentation and/or other materials provided
|
18 |
-
// with the distribution.
|
19 |
-
//
|
20 |
-
// * Neither the name of the "XML-RPC for PHP" nor the names of its
|
21 |
-
// contributors may be used to endorse or promote products derived
|
22 |
-
// from this software without specific prior written permission.
|
23 |
-
//
|
24 |
-
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
25 |
-
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
26 |
-
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
27 |
-
// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
28 |
-
// REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
29 |
-
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
30 |
-
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
31 |
-
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
32 |
-
// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
33 |
-
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
34 |
-
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
35 |
-
// OF THE POSSIBILITY OF SUCH DAMAGE.
|
36 |
-
|
37 |
-
if(!function_exists('xml_parser_create'))
|
38 |
-
{
|
39 |
-
// For PHP 4 onward, XML functionality is always compiled-in on windows:
|
40 |
-
// no more need to dl-open it. It might have been compiled out on *nix...
|
41 |
-
if(strtoupper(substr(PHP_OS, 0, 3) != 'WIN'))
|
42 |
-
{
|
43 |
-
dl('xml.so');
|
44 |
-
}
|
45 |
-
}
|
46 |
-
|
47 |
-
// G. Giunta 2005/01/29: declare global these variables,
|
48 |
-
// so that xmlrpc.inc will work even if included from within a function
|
49 |
-
// Milosch: 2005/08/07 - explicitly request these via $GLOBALS where used.
|
50 |
-
$GLOBALS['xmlrpcI4']='i4';
|
51 |
-
$GLOBALS['xmlrpcInt']='int';
|
52 |
-
$GLOBALS['xmlrpcBoolean']='boolean';
|
53 |
-
$GLOBALS['xmlrpcDouble']='double';
|
54 |
-
$GLOBALS['xmlrpcString']='string';
|
55 |
-
$GLOBALS['xmlrpcDateTime']='dateTime.iso8601';
|
56 |
-
$GLOBALS['xmlrpcBase64']='base64';
|
57 |
-
$GLOBALS['xmlrpcArray']='array';
|
58 |
-
$GLOBALS['xmlrpcStruct']='struct';
|
59 |
-
$GLOBALS['xmlrpcValue']='undefined';
|
60 |
-
|
61 |
-
$GLOBALS['xmlrpcTypes']=array(
|
62 |
-
$GLOBALS['xmlrpcI4'] => 1,
|
63 |
-
$GLOBALS['xmlrpcInt'] => 1,
|
64 |
-
$GLOBALS['xmlrpcBoolean'] => 1,
|
65 |
-
$GLOBALS['xmlrpcString'] => 1,
|
66 |
-
$GLOBALS['xmlrpcDouble'] => 1,
|
67 |
-
$GLOBALS['xmlrpcDateTime'] => 1,
|
68 |
-
$GLOBALS['xmlrpcBase64'] => 1,
|
69 |
-
$GLOBALS['xmlrpcArray'] => 2,
|
70 |
-
$GLOBALS['xmlrpcStruct'] => 3
|
71 |
-
);
|
72 |
-
|
73 |
-
$GLOBALS['xmlrpc_valid_parents'] = array(
|
74 |
-
'VALUE' => array('MEMBER', 'DATA', 'PARAM', 'FAULT'),
|
75 |
-
'BOOLEAN' => array('VALUE'),
|
76 |
-
'I4' => array('VALUE'),
|
77 |
-
'INT' => array('VALUE'),
|
78 |
-
'STRING' => array('VALUE'),
|
79 |
-
'DOUBLE' => array('VALUE'),
|
80 |
-
'DATETIME.ISO8601' => array('VALUE'),
|
81 |
-
'BASE64' => array('VALUE'),
|
82 |
-
'MEMBER' => array('STRUCT'),
|
83 |
-
'NAME' => array('MEMBER'),
|
84 |
-
'DATA' => array('ARRAY'),
|
85 |
-
'ARRAY' => array('VALUE'),
|
86 |
-
'STRUCT' => array('VALUE'),
|
87 |
-
'PARAM' => array('PARAMS'),
|
88 |
-
'METHODNAME' => array('METHODCALL'),
|
89 |
-
'PARAMS' => array('METHODCALL', 'METHODRESPONSE'),
|
90 |
-
'FAULT' => array('METHODRESPONSE'),
|
91 |
-
'NIL' => array('VALUE'), // only used when extension activated
|
92 |
-
'EX:NIL' => array('VALUE') // only used when extension activated
|
93 |
-
);
|
94 |
-
|
95 |
-
// define extra types for supporting NULL (useful for json or <NIL/>)
|
96 |
-
$GLOBALS['xmlrpcNull']='null';
|
97 |
-
$GLOBALS['xmlrpcTypes']['null']=1;
|
98 |
-
|
99 |
-
// Not in use anymore since 2.0. Shall we remove it?
|
100 |
-
/// @deprecated
|
101 |
-
$GLOBALS['xmlEntities']=array(
|
102 |
-
'amp' => '&',
|
103 |
-
'quot' => '"',
|
104 |
-
'lt' => '<',
|
105 |
-
'gt' => '>',
|
106 |
-
'apos' => "'"
|
107 |
-
);
|
108 |
-
|
109 |
-
// tables used for transcoding different charsets into us-ascii xml
|
110 |
-
|
111 |
-
$GLOBALS['xml_iso88591_Entities']=array();
|
112 |
-
$GLOBALS['xml_iso88591_Entities']['in'] = array();
|
113 |
-
$GLOBALS['xml_iso88591_Entities']['out'] = array();
|
114 |
-
for ($i = 0; $i < 32; $i++)
|
115 |
-
{
|
116 |
-
$GLOBALS['xml_iso88591_Entities']['in'][] = chr($i);
|
117 |
-
$GLOBALS['xml_iso88591_Entities']['out'][] = '&#'.$i.';';
|
118 |
-
}
|
119 |
-
for ($i = 160; $i < 256; $i++)
|
120 |
-
{
|
121 |
-
$GLOBALS['xml_iso88591_Entities']['in'][] = chr($i);
|
122 |
-
$GLOBALS['xml_iso88591_Entities']['out'][] = '&#'.$i.';';
|
123 |
-
}
|
124 |
-
|
125 |
-
/// @todo add to iso table the characters from cp_1252 range, i.e. 128 to 159?
|
126 |
-
/// These will NOT be present in true ISO-8859-1, but will save the unwary
|
127 |
-
/// windows user from sending junk (though no luck when reciving them...)
|
128 |
-
/*
|
129 |
-
$GLOBALS['xml_cp1252_Entities']=array();
|
130 |
-
for ($i = 128; $i < 160; $i++)
|
131 |
-
{
|
132 |
-
$GLOBALS['xml_cp1252_Entities']['in'][] = chr($i);
|
133 |
-
}
|
134 |
-
$GLOBALS['xml_cp1252_Entities']['out'] = array(
|
135 |
-
'€', '?', '‚', 'ƒ',
|
136 |
-
'„', '…', '†', '‡',
|
137 |
-
'ˆ', '‰', 'Š', '‹',
|
138 |
-
'Œ', '?', 'Ž', '?',
|
139 |
-
'?', '‘', '’', '“',
|
140 |
-
'”', '•', '–', '—',
|
141 |
-
'˜', '™', 'š', '›',
|
142 |
-
'œ', '?', 'ž', 'Ÿ'
|
143 |
-
);
|
144 |
-
*/
|
145 |
-
|
146 |
-
$GLOBALS['xmlrpcerr'] = array(
|
147 |
-
'unknown_method'=>1,
|
148 |
-
'invalid_return'=>2,
|
149 |
-
'incorrect_params'=>3,
|
150 |
-
'introspect_unknown'=>4,
|
151 |
-
'http_error'=>5,
|
152 |
-
'no_data'=>6,
|
153 |
-
'no_ssl'=>7,
|
154 |
-
'curl_fail'=>8,
|
155 |
-
'invalid_request'=>15,
|
156 |
-
'no_curl'=>16,
|
157 |
-
'server_error'=>17,
|
158 |
-
'multicall_error'=>18,
|
159 |
-
'multicall_notstruct'=>9,
|
160 |
-
'multicall_nomethod'=>10,
|
161 |
-
'multicall_notstring'=>11,
|
162 |
-
'multicall_recursion'=>12,
|
163 |
-
'multicall_noparams'=>13,
|
164 |
-
'multicall_notarray'=>14,
|
165 |
-
|
166 |
-
'cannot_decompress'=>103,
|
167 |
-
'decompress_fail'=>104,
|
168 |
-
'dechunk_fail'=>105,
|
169 |
-
'server_cannot_decompress'=>106,
|
170 |
-
'server_decompress_fail'=>107
|
171 |
-
);
|
172 |
-
|
173 |
-
$GLOBALS['xmlrpcstr'] = array(
|
174 |
-
'unknown_method'=>'Unknown method',
|
175 |
-
'invalid_return'=>'Invalid return payload: enable debugging to examine incoming payload',
|
176 |
-
'incorrect_params'=>'Incorrect parameters passed to method',
|
177 |
-
'introspect_unknown'=>"Can't introspect: method unknown",
|
178 |
-
'http_error'=>"Didn't receive 200 OK from remote server.",
|
179 |
-
'no_data'=>'No data received from server.',
|
180 |
-
'no_ssl'=>'No SSL support compiled in.',
|
181 |
-
'curl_fail'=>'CURL error',
|
182 |
-
'invalid_request'=>'Invalid request payload',
|
183 |
-
'no_curl'=>'No CURL support compiled in.',
|
184 |
-
'server_error'=>'Internal server error',
|
185 |
-
'multicall_error'=>'Received from server invalid multicall response',
|
186 |
-
'multicall_notstruct'=>'system.multicall expected struct',
|
187 |
-
'multicall_nomethod'=>'missing methodName',
|
188 |
-
'multicall_notstring'=>'methodName is not a string',
|
189 |
-
'multicall_recursion'=>'recursive system.multicall forbidden',
|
190 |
-
'multicall_noparams'=>'missing params',
|
191 |
-
'multicall_notarray'=>'params is not an array',
|
192 |
-
|
193 |
-
'cannot_decompress'=>'Received from server compressed HTTP and cannot decompress',
|
194 |
-
'decompress_fail'=>'Received from server invalid compressed HTTP',
|
195 |
-
'dechunk_fail'=>'Received from server invalid chunked HTTP',
|
196 |
-
'server_cannot_decompress'=>'Received from client compressed HTTP request and cannot decompress',
|
197 |
-
'server_decompress_fail'=>'Received from client invalid compressed HTTP request'
|
198 |
-
);
|
199 |
-
|
200 |
-
// The charset encoding used by the server for received messages and
|
201 |
-
// by the client for received responses when received charset cannot be determined
|
202 |
-
// or is not supported
|
203 |
-
$GLOBALS['xmlrpc_defencoding']='UTF-8';
|
204 |
-
|
205 |
-
// The encoding used internally by PHP.
|
206 |
-
// String values received as xml will be converted to this, and php strings will be converted to xml
|
207 |
-
// as if having been coded with this
|
208 |
-
$GLOBALS['xmlrpc_internalencoding']='UTF-8';
|
209 |
-
|
210 |
-
$GLOBALS['xmlrpcName']='XML-RPC for PHP';
|
211 |
-
$GLOBALS['xmlrpcVersion']='3.0.0.beta';
|
212 |
-
|
213 |
-
// let user errors start at 800
|
214 |
-
$GLOBALS['xmlrpcerruser']=800;
|
215 |
-
// let XML parse errors start at 100
|
216 |
-
$GLOBALS['xmlrpcerrxml']=100;
|
217 |
-
|
218 |
-
// formulate backslashes for escaping regexp
|
219 |
-
// Not in use anymore since 2.0. Shall we remove it?
|
220 |
-
/// @deprecated
|
221 |
-
$GLOBALS['xmlrpc_backslash']=chr(92).chr(92);
|
222 |
-
|
223 |
-
// set to TRUE to enable correct decoding of <NIL/> and <EX:NIL/> values
|
224 |
-
$GLOBALS['xmlrpc_null_extension']=false;
|
225 |
-
|
226 |
-
// set to TRUE to enable encoding of php NULL values to <EX:NIL/> instead of <NIL/>
|
227 |
-
$GLOBALS['xmlrpc_null_apache_encoding']=false;
|
228 |
-
$GLOBALS['xmlrpc_null_apache_encoding_ns']='http://ws.apache.org/xmlrpc/namespaces/extensions';
|
229 |
-
|
230 |
-
// used to store state during parsing
|
231 |
-
// quick explanation of components:
|
232 |
-
// ac - used to accumulate values
|
233 |
-
// isf - used to indicate a parsing fault (2) or xmlrpcresp fault (1)
|
234 |
-
// isf_reason - used for storing xmlrpcresp fault string
|
235 |
-
// lv - used to indicate "looking for a value": implements
|
236 |
-
// the logic to allow values with no types to be strings
|
237 |
-
// params - used to store parameters in method calls
|
238 |
-
// method - used to store method name
|
239 |
-
// stack - array with genealogy of xml elements names:
|
240 |
-
// used to validate nesting of xmlrpc elements
|
241 |
-
$GLOBALS['_xh']=null;
|
242 |
-
|
243 |
-
/**
|
244 |
-
* Convert a string to the correct XML representation in a target charset
|
245 |
-
* To help correct communication of non-ascii chars inside strings, regardless
|
246 |
-
* of the charset used when sending requests, parsing them, sending responses
|
247 |
-
* and parsing responses, an option is to convert all non-ascii chars present in the message
|
248 |
-
* into their equivalent 'charset entity'. Charset entities enumerated this way
|
249 |
-
* are independent of the charset encoding used to transmit them, and all XML
|
250 |
-
* parsers are bound to understand them.
|
251 |
-
* Note that in the std case we are not sending a charset encoding mime type
|
252 |
-
* along with http headers, so we are bound by RFC 3023 to emit strict us-ascii.
|
253 |
-
*
|
254 |
-
* @todo do a bit of basic benchmarking (strtr vs. str_replace)
|
255 |
-
* @todo make usage of iconv() or recode_string() or mb_string() where available
|
256 |
-
*/
|
257 |
-
function xmlrpc_encode_entitites($data, $src_encoding='', $dest_encoding='')
|
258 |
-
{
|
259 |
-
/* Jordan Novak edit
|
260 |
-
* clean out invalid characters before sending
|
261 |
-
*/
|
262 |
-
$data = str_replace(array("", "�", "", "’", "“", "”"), "", $data);
|
263 |
-
/*
|
264 |
-
* End Jordan Novak edit
|
265 |
-
*/
|
266 |
-
if ($src_encoding == '')
|
267 |
-
{
|
268 |
-
// lame, but we know no better...
|
269 |
-
$src_encoding = $GLOBALS['xmlrpc_internalencoding'];
|
270 |
-
}
|
271 |
-
|
272 |
-
switch(strtoupper($src_encoding.'_'.$dest_encoding))
|
273 |
-
{
|
274 |
-
case 'ISO-8859-1_':
|
275 |
-
case 'ISO-8859-1_US-ASCII':
|
276 |
-
$escaped_data = str_replace(array('&', '"', "'", '<', '>'), array('&', '"', ''', '<', '>'), $data);
|
277 |
-
$escaped_data = str_replace($GLOBALS['xml_iso88591_Entities']['in'], $GLOBALS['xml_iso88591_Entities']['out'], $escaped_data);
|
278 |
-
break;
|
279 |
-
case 'ISO-8859-1_UTF-8':
|
280 |
-
$escaped_data = str_replace(array('&', '"', "'", '<', '>'), array('&', '"', ''', '<', '>'), $data);
|
281 |
-
$escaped_data = utf8_encode($escaped_data);
|
282 |
-
break;
|
283 |
-
case 'ISO-8859-1_ISO-8859-1':
|
284 |
-
case 'US-ASCII_US-ASCII':
|
285 |
-
case 'US-ASCII_UTF-8':
|
286 |
-
case 'US-ASCII_':
|
287 |
-
case 'US-ASCII_ISO-8859-1':
|
288 |
-
case 'UTF-8_UTF-8':
|
289 |
-
//case 'CP1252_CP1252':
|
290 |
-
$escaped_data = str_replace(array('&', '"', "'", '<', '>'), array('&', '"', ''', '<', '>'), $data);
|
291 |
-
break;
|
292 |
-
case 'UTF-8_':
|
293 |
-
case 'UTF-8_US-ASCII':
|
294 |
-
case 'UTF-8_ISO-8859-1':
|
295 |
-
// NB: this will choke on invalid UTF-8, going most likely beyond EOF
|
296 |
-
$escaped_data = '';
|
297 |
-
// be kind to users creating string xmlrpcvals out of different php types
|
298 |
-
$data = (string) $data;
|
299 |
-
$ns = strlen ($data);
|
300 |
-
for ($nn = 0; $nn < $ns; $nn++)
|
301 |
-
{
|
302 |
-
$ch = $data[$nn];
|
303 |
-
$ii = ord($ch);
|
304 |
-
//1 7 0bbbbbbb (127)
|
305 |
-
if ($ii < 128)
|
306 |
-
{
|
307 |
-
/// @todo shall we replace this with a (supposedly) faster str_replace?
|
308 |
-
switch($ii){
|
309 |
-
case 34:
|
310 |
-
$escaped_data .= '"';
|
311 |
-
break;
|
312 |
-
case 38:
|
313 |
-
$escaped_data .= '&';
|
314 |
-
break;
|
315 |
-
case 39:
|
316 |
-
$escaped_data .= ''';
|
317 |
-
break;
|
318 |
-
case 60:
|
319 |
-
$escaped_data .= '<';
|
320 |
-
break;
|
321 |
-
case 62:
|
322 |
-
$escaped_data .= '>';
|
323 |
-
break;
|
324 |
-
default:
|
325 |
-
$escaped_data .= $ch;
|
326 |
-
} // switch
|
327 |
-
}
|
328 |
-
//2 11 110bbbbb 10bbbbbb (2047)
|
329 |
-
else if ($ii>>5 == 6)
|
330 |
-
{
|
331 |
-
$b1 = ($ii & 31);
|
332 |
-
$ii = ord($data[$nn+1]);
|
333 |
-
$b2 = ($ii & 63);
|
334 |
-
$ii = ($b1 * 64) + $b2;
|
335 |
-
$ent = sprintf ('&#%d;', $ii);
|
336 |
-
$escaped_data .= $ent;
|
337 |
-
$nn += 1;
|
338 |
-
}
|
339 |
-
//3 16 1110bbbb 10bbbbbb 10bbbbbb
|
340 |
-
else if ($ii>>4 == 14)
|
341 |
-
{
|
342 |
-
$b1 = ($ii & 15);
|
343 |
-
$ii = ord($data[$nn+1]);
|
344 |
-
$b2 = ($ii & 63);
|
345 |
-
$ii = ord($data[$nn+2]);
|
346 |
-
$b3 = ($ii & 63);
|
347 |
-
$ii = ((($b1 * 64) + $b2) * 64) + $b3;
|
348 |
-
$ent = sprintf ('&#%d;', $ii);
|
349 |
-
$escaped_data .= $ent;
|
350 |
-
$nn += 2;
|
351 |
-
}
|
352 |
-
//4 21 11110bbb 10bbbbbb 10bbbbbb 10bbbbbb
|
353 |
-
else if ($ii>>3 == 30)
|
354 |
-
{
|
355 |
-
$b1 = ($ii & 7);
|
356 |
-
$ii = ord($data[$nn+1]);
|
357 |
-
$b2 = ($ii & 63);
|
358 |
-
$ii = ord($data[$nn+2]);
|
359 |
-
$b3 = ($ii & 63);
|
360 |
-
$ii = ord($data[$nn+3]);
|
361 |
-
$b4 = ($ii & 63);
|
362 |
-
$ii = ((((($b1 * 64) + $b2) * 64) + $b3) * 64) + $b4;
|
363 |
-
$ent = sprintf ('&#%d;', $ii);
|
364 |
-
$escaped_data .= $ent;
|
365 |
-
$nn += 3;
|
366 |
-
}
|
367 |
-
}
|
368 |
-
break;
|
369 |
-
/*
|
370 |
-
case 'CP1252_':
|
371 |
-
case 'CP1252_US-ASCII':
|
372 |
-
$escaped_data = str_replace(array('&', '"', "'", '<', '>'), array('&', '"', ''', '<', '>'), $data);
|
373 |
-
$escaped_data = str_replace($GLOBALS['xml_iso88591_Entities']['in'], $GLOBALS['xml_iso88591_Entities']['out'], $escaped_data);
|
374 |
-
$escaped_data = str_replace($GLOBALS['xml_cp1252_Entities']['in'], $GLOBALS['xml_cp1252_Entities']['out'], $escaped_data);
|
375 |
-
break;
|
376 |
-
case 'CP1252_UTF-8':
|
377 |
-
$escaped_data = str_replace(array('&', '"', "'", '<', '>'), array('&', '"', ''', '<', '>'), $data);
|
378 |
-
/// @todo we could use real UTF8 chars here instead of xml entities... (note that utf_8 encode all allone will NOT convert them)
|
379 |
-
$escaped_data = str_replace($GLOBALS['xml_cp1252_Entities']['in'], $GLOBALS['xml_cp1252_Entities']['out'], $escaped_data);
|
380 |
-
$escaped_data = utf8_encode($escaped_data);
|
381 |
-
break;
|
382 |
-
case 'CP1252_ISO-8859-1':
|
383 |
-
$escaped_data = str_replace(array('&', '"', "'", '<', '>'), array('&', '"', ''', '<', '>'), $data);
|
384 |
-
// we might as well replave all funky chars with a '?' here, but we are kind and leave it to the receiving application layer to decide what to do with these weird entities...
|
385 |
-
$escaped_data = str_replace($GLOBALS['xml_cp1252_Entities']['in'], $GLOBALS['xml_cp1252_Entities']['out'], $escaped_data);
|
386 |
-
break;
|
387 |
-
*/
|
388 |
-
default:
|
389 |
-
$escaped_data = '';
|
390 |
-
error_log("Converting from $src_encoding to $dest_encoding: not supported...");
|
391 |
-
}
|
392 |
-
return $escaped_data;
|
393 |
-
}
|
394 |
-
|
395 |
-
/// xml parser handler function for opening element tags
|
396 |
-
function xmlrpc_se($parser, $name, $attrs, $accept_single_vals=false)
|
397 |
-
{
|
398 |
-
// if invalid xmlrpc already detected, skip all processing
|
399 |
-
if ($GLOBALS['_xh']['isf'] < 2)
|
400 |
-
{
|
401 |
-
// check for correct element nesting
|
402 |
-
// top level element can only be of 2 types
|
403 |
-
/// @todo optimization creep: save this check into a bool variable, instead of using count() every time:
|
404 |
-
/// there is only a single top level element in xml anyway
|
405 |
-
if (count($GLOBALS['_xh']['stack']) == 0)
|
406 |
-
{
|
407 |
-
if ($name != 'METHODRESPONSE' && $name != 'METHODCALL' && (
|
408 |
-
$name != 'VALUE' && !$accept_single_vals))
|
409 |
-
{
|
410 |
-
$GLOBALS['_xh']['isf'] = 2;
|
411 |
-
$GLOBALS['_xh']['isf_reason'] = 'missing top level xmlrpc element';
|
412 |
-
return;
|
413 |
-
}
|
414 |
-
else
|
415 |
-
{
|
416 |
-
$GLOBALS['_xh']['rt'] = strtolower($name);
|
417 |
-
$GLOBALS['_xh']['rt'] = strtolower($name);
|
418 |
-
}
|
419 |
-
}
|
420 |
-
else
|
421 |
-
{
|
422 |
-
// not top level element: see if parent is OK
|
423 |
-
$parent = end($GLOBALS['_xh']['stack']);
|
424 |
-
if (!array_key_exists($name, $GLOBALS['xmlrpc_valid_parents']) || !in_array($parent, $GLOBALS['xmlrpc_valid_parents'][$name]))
|
425 |
-
{
|
426 |
-
$GLOBALS['_xh']['isf'] = 2;
|
427 |
-
$GLOBALS['_xh']['isf_reason'] = "xmlrpc element $name cannot be child of $parent";
|
428 |
-
return;
|
429 |
-
}
|
430 |
-
}
|
431 |
-
|
432 |
-
switch($name)
|
433 |
-
{
|
434 |
-
// optimize for speed switch cases: most common cases first
|
435 |
-
case 'VALUE':
|
436 |
-
/// @todo we could check for 2 VALUE elements inside a MEMBER or PARAM element
|
437 |
-
$GLOBALS['_xh']['vt']='value'; // indicator: no value found yet
|
438 |
-
$GLOBALS['_xh']['ac']='';
|
439 |
-
$GLOBALS['_xh']['lv']=1;
|
440 |
-
$GLOBALS['_xh']['php_class']=null;
|
441 |
-
break;
|
442 |
-
case 'I4':
|
443 |
-
case 'INT':
|
444 |
-
case 'STRING':
|
445 |
-
case 'BOOLEAN':
|
446 |
-
case 'DOUBLE':
|
447 |
-
case 'DATETIME.ISO8601':
|
448 |
-
case 'BASE64':
|
449 |
-
if ($GLOBALS['_xh']['vt']!='value')
|
450 |
-
{
|
451 |
-
//two data elements inside a value: an error occurred!
|
452 |
-
$GLOBALS['_xh']['isf'] = 2;
|
453 |
-
$GLOBALS['_xh']['isf_reason'] = "$name element following a {$GLOBALS['_xh']['vt']} element inside a single value";
|
454 |
-
return;
|
455 |
-
}
|
456 |
-
$GLOBALS['_xh']['ac']=''; // reset the accumulator
|
457 |
-
break;
|
458 |
-
case 'STRUCT':
|
459 |
-
case 'ARRAY':
|
460 |
-
if ($GLOBALS['_xh']['vt']!='value')
|
461 |
-
{
|
462 |
-
//two data elements inside a value: an error occurred!
|
463 |
-
$GLOBALS['_xh']['isf'] = 2;
|
464 |
-
$GLOBALS['_xh']['isf_reason'] = "$name element following a {$GLOBALS['_xh']['vt']} element inside a single value";
|
465 |
-
return;
|
466 |
-
}
|
467 |
-
// create an empty array to hold child values, and push it onto appropriate stack
|
468 |
-
$cur_val = array();
|
469 |
-
$cur_val['values'] = array();
|
470 |
-
$cur_val['type'] = $name;
|
471 |
-
// check for out-of-band information to rebuild php objs
|
472 |
-
// and in case it is found, save it
|
473 |
-
if (@isset($attrs['PHP_CLASS']))
|
474 |
-
{
|
475 |
-
$cur_val['php_class'] = $attrs['PHP_CLASS'];
|
476 |
-
}
|
477 |
-
$GLOBALS['_xh']['valuestack'][] = $cur_val;
|
478 |
-
$GLOBALS['_xh']['vt']='data'; // be prepared for a data element next
|
479 |
-
break;
|
480 |
-
case 'DATA':
|
481 |
-
if ($GLOBALS['_xh']['vt']!='data')
|
482 |
-
{
|
483 |
-
//two data elements inside a value: an error occurred!
|
484 |
-
$GLOBALS['_xh']['isf'] = 2;
|
485 |
-
$GLOBALS['_xh']['isf_reason'] = "found two data elements inside an array element";
|
486 |
-
return;
|
487 |
-
}
|
488 |
-
case 'METHODCALL':
|
489 |
-
case 'METHODRESPONSE':
|
490 |
-
case 'PARAMS':
|
491 |
-
// valid elements that add little to processing
|
492 |
-
break;
|
493 |
-
case 'METHODNAME':
|
494 |
-
case 'NAME':
|
495 |
-
/// @todo we could check for 2 NAME elements inside a MEMBER element
|
496 |
-
$GLOBALS['_xh']['ac']='';
|
497 |
-
break;
|
498 |
-
case 'FAULT':
|
499 |
-
$GLOBALS['_xh']['isf']=1;
|
500 |
-
break;
|
501 |
-
case 'MEMBER':
|
502 |
-
$GLOBALS['_xh']['valuestack'][count($GLOBALS['_xh']['valuestack'])-1]['name']=''; // set member name to null, in case we do not find in the xml later on
|
503 |
-
//$GLOBALS['_xh']['ac']='';
|
504 |
-
// Drop trough intentionally
|
505 |
-
case 'PARAM':
|
506 |
-
// clear value type, so we can check later if no value has been passed for this param/member
|
507 |
-
$GLOBALS['_xh']['vt']=null;
|
508 |
-
break;
|
509 |
-
case 'NIL':
|
510 |
-
break;
|
511 |
-
case 'EX:NIL':
|
512 |
-
if ($GLOBALS['xmlrpc_null_extension'])
|
513 |
-
{
|
514 |
-
if ($GLOBALS['_xh']['vt']!='value')
|
515 |
-
{
|
516 |
-
//two data elements inside a value: an error occurred!
|
517 |
-
$GLOBALS['_xh']['isf'] = 2;
|
518 |
-
$GLOBALS['_xh']['isf_reason'] = "$name element following a {$GLOBALS['_xh']['vt']} element inside a single value";
|
519 |
-
return;
|
520 |
-
}
|
521 |
-
$GLOBALS['_xh']['ac']=''; // reset the accumulator
|
522 |
-
break;
|
523 |
-
}
|
524 |
-
// we do not support the <NIL/> extension, so
|
525 |
-
// drop through intentionally
|
526 |
-
default:
|
527 |
-
/// INVALID ELEMENT: RAISE ISF so that it is later recognized!!!
|
528 |
-
$GLOBALS['_xh']['isf'] = 2;
|
529 |
-
$GLOBALS['_xh']['isf_reason'] = "found not-xmlrpc xml element $name";
|
530 |
-
break;
|
531 |
-
}
|
532 |
-
|
533 |
-
// Save current element name to stack, to validate nesting
|
534 |
-
$GLOBALS['_xh']['stack'][] = $name;
|
535 |
-
|
536 |
-
/// @todo optimization creep: move this inside the big switch() above
|
537 |
-
if($name!='VALUE')
|
538 |
-
{
|
539 |
-
$GLOBALS['_xh']['lv']=0;
|
540 |
-
}
|
541 |
-
}
|
542 |
-
}
|
543 |
-
|
544 |
-
/// Used in decoding xml chunks that might represent single xmlrpc values
|
545 |
-
function xmlrpc_se_any($parser, $name, $attrs)
|
546 |
-
{
|
547 |
-
xmlrpc_se($parser, $name, $attrs, true);
|
548 |
-
}
|
549 |
-
|
550 |
-
/// xml parser handler function for close element tags
|
551 |
-
function xmlrpc_ee($parser, $name, $rebuild_xmlrpcvals = true)
|
552 |
-
{
|
553 |
-
if ($GLOBALS['_xh']['isf'] < 2)
|
554 |
-
{
|
555 |
-
// push this element name from stack
|
556 |
-
// NB: if XML validates, correct opening/closing is guaranteed and
|
557 |
-
// we do not have to check for $name == $curr_elem.
|
558 |
-
// we also checked for proper nesting at start of elements...
|
559 |
-
$curr_elem = array_pop($GLOBALS['_xh']['stack']);
|
560 |
-
|
561 |
-
switch($name)
|
562 |
-
{
|
563 |
-
case 'VALUE':
|
564 |
-
// This if() detects if no scalar was inside <VALUE></VALUE>
|
565 |
-
if ($GLOBALS['_xh']['vt']=='value')
|
566 |
-
{
|
567 |
-
$GLOBALS['_xh']['value']=$GLOBALS['_xh']['ac'];
|
568 |
-
$GLOBALS['_xh']['vt']=$GLOBALS['xmlrpcString'];
|
569 |
-
}
|
570 |
-
|
571 |
-
if ($rebuild_xmlrpcvals)
|
572 |
-
{
|
573 |
-
// build the xmlrpc val out of the data received, and substitute it
|
574 |
-
$temp = new xmlrpcval($GLOBALS['_xh']['value'], $GLOBALS['_xh']['vt']);
|
575 |
-
// in case we got info about underlying php class, save it
|
576 |
-
// in the object we're rebuilding
|
577 |
-
if (isset($GLOBALS['_xh']['php_class']))
|
578 |
-
$temp->_php_class = $GLOBALS['_xh']['php_class'];
|
579 |
-
// check if we are inside an array or struct:
|
580 |
-
// if value just built is inside an array, let's move it into array on the stack
|
581 |
-
$vscount = count($GLOBALS['_xh']['valuestack']);
|
582 |
-
if ($vscount && $GLOBALS['_xh']['valuestack'][$vscount-1]['type']=='ARRAY')
|
583 |
-
{
|
584 |
-
$GLOBALS['_xh']['valuestack'][$vscount-1]['values'][] = $temp;
|
585 |
-
}
|
586 |
-
else
|
587 |
-
{
|
588 |
-
$GLOBALS['_xh']['value'] = $temp;
|
589 |
-
}
|
590 |
-
}
|
591 |
-
else
|
592 |
-
{
|
593 |
-
/// @todo this needs to treat correctly php-serialized objects,
|
594 |
-
/// since std deserializing is done by php_xmlrpc_decode,
|
595 |
-
/// which we will not be calling...
|
596 |
-
if (isset($GLOBALS['_xh']['php_class']))
|
597 |
-
{
|
598 |
-
}
|
599 |
-
|
600 |
-
// check if we are inside an array or struct:
|
601 |
-
// if value just built is inside an array, let's move it into array on the stack
|
602 |
-
$vscount = count($GLOBALS['_xh']['valuestack']);
|
603 |
-
if ($vscount && $GLOBALS['_xh']['valuestack'][$vscount-1]['type']=='ARRAY')
|
604 |
-
{
|
605 |
-
$GLOBALS['_xh']['valuestack'][$vscount-1]['values'][] = $GLOBALS['_xh']['value'];
|
606 |
-
}
|
607 |
-
}
|
608 |
-
break;
|
609 |
-
case 'BOOLEAN':
|
610 |
-
case 'I4':
|
611 |
-
case 'INT':
|
612 |
-
case 'STRING':
|
613 |
-
case 'DOUBLE':
|
614 |
-
case 'DATETIME.ISO8601':
|
615 |
-
case 'BASE64':
|
616 |
-
$GLOBALS['_xh']['vt']=strtolower($name);
|
617 |
-
/// @todo: optimization creep - remove the if/elseif cycle below
|
618 |
-
/// since the case() in which we are already did that
|
619 |
-
if ($name=='STRING')
|
620 |
-
{
|
621 |
-
$GLOBALS['_xh']['value']=$GLOBALS['_xh']['ac'];
|
622 |
-
}
|
623 |
-
elseif ($name=='DATETIME.ISO8601')
|
624 |
-
{
|
625 |
-
if (!preg_match('/^[0-9]{8}T[0-9]{2}:[0-9]{2}:[0-9]{2}$/', $GLOBALS['_xh']['ac']))
|
626 |
-
{
|
627 |
-
error_log('XML-RPC: invalid value received in DATETIME: '.$GLOBALS['_xh']['ac']);
|
628 |
-
}
|
629 |
-
$GLOBALS['_xh']['vt']=$GLOBALS['xmlrpcDateTime'];
|
630 |
-
$GLOBALS['_xh']['value']=$GLOBALS['_xh']['ac'];
|
631 |
-
}
|
632 |
-
elseif ($name=='BASE64')
|
633 |
-
{
|
634 |
-
/// @todo check for failure of base64 decoding / catch warnings
|
635 |
-
$GLOBALS['_xh']['value']=base64_decode($GLOBALS['_xh']['ac']);
|
636 |
-
}
|
637 |
-
elseif ($name=='BOOLEAN')
|
638 |
-
{
|
639 |
-
// special case here: we translate boolean 1 or 0 into PHP
|
640 |
-
// constants true or false.
|
641 |
-
// Strings 'true' and 'false' are accepted, even though the
|
642 |
-
// spec never mentions them (see eg. Blogger api docs)
|
643 |
-
// NB: this simple checks helps a lot sanitizing input, ie no
|
644 |
-
// security problems around here
|
645 |
-
if ($GLOBALS['_xh']['ac']=='1' || strcasecmp($GLOBALS['_xh']['ac'], 'true') == 0)
|
646 |
-
{
|
647 |
-
$GLOBALS['_xh']['value']=true;
|
648 |
-
}
|
649 |
-
else
|
650 |
-
{
|
651 |
-
// log if receiveing something strange, even though we set the value to false anyway
|
652 |
-
if ($GLOBALS['_xh']['ac']!='0' && strcasecmp($GLOBALS['_xh']['ac'], 'false') != 0)
|
653 |
-
error_log('XML-RPC: invalid value received in BOOLEAN: '.$GLOBALS['_xh']['ac']);
|
654 |
-
$GLOBALS['_xh']['value']=false;
|
655 |
-
}
|
656 |
-
}
|
657 |
-
elseif ($name=='DOUBLE')
|
658 |
-
{
|
659 |
-
// we have a DOUBLE
|
660 |
-
// we must check that only 0123456789-.<space> are characters here
|
661 |
-
// NOTE: regexp could be much stricter than this...
|
662 |
-
if (!preg_match('/^[+-eE0123456789 \t.]+$/', $GLOBALS['_xh']['ac']))
|
663 |
-
{
|
664 |
-
/// @todo: find a better way of throwing an error than this!
|
665 |
-
error_log('XML-RPC: non numeric value received in DOUBLE: '.$GLOBALS['_xh']['ac']);
|
666 |
-
$GLOBALS['_xh']['value']='ERROR_NON_NUMERIC_FOUND';
|
667 |
-
}
|
668 |
-
else
|
669 |
-
{
|
670 |
-
// it's ok, add it on
|
671 |
-
$GLOBALS['_xh']['value']=(double)$GLOBALS['_xh']['ac'];
|
672 |
-
}
|
673 |
-
}
|
674 |
-
else
|
675 |
-
{
|
676 |
-
// we have an I4/INT
|
677 |
-
// we must check that only 0123456789-<space> are characters here
|
678 |
-
if (!preg_match('/^[+-]?[0123456789 \t]+$/', $GLOBALS['_xh']['ac']))
|
679 |
-
{
|
680 |
-
/// @todo find a better way of throwing an error than this!
|
681 |
-
error_log('XML-RPC: non numeric value received in INT: '.$GLOBALS['_xh']['ac']);
|
682 |
-
$GLOBALS['_xh']['value']='ERROR_NON_NUMERIC_FOUND';
|
683 |
-
}
|
684 |
-
else
|
685 |
-
{
|
686 |
-
// it's ok, add it on
|
687 |
-
$GLOBALS['_xh']['value']=(int)$GLOBALS['_xh']['ac'];
|
688 |
-
}
|
689 |
-
}
|
690 |
-
//$GLOBALS['_xh']['ac']=''; // is this necessary?
|
691 |
-
$GLOBALS['_xh']['lv']=3; // indicate we've found a value
|
692 |
-
break;
|
693 |
-
case 'NAME':
|
694 |
-
$GLOBALS['_xh']['valuestack'][count($GLOBALS['_xh']['valuestack'])-1]['name'] = $GLOBALS['_xh']['ac'];
|
695 |
-
break;
|
696 |
-
case 'MEMBER':
|
697 |
-
//$GLOBALS['_xh']['ac']=''; // is this necessary?
|
698 |
-
// add to array in the stack the last element built,
|
699 |
-
// unless no VALUE was found
|
700 |
-
if ($GLOBALS['_xh']['vt'])
|
701 |
-
{
|
702 |
-
$vscount = count($GLOBALS['_xh']['valuestack']);
|
703 |
-
$GLOBALS['_xh']['valuestack'][$vscount-1]['values'][$GLOBALS['_xh']['valuestack'][$vscount-1]['name']] = $GLOBALS['_xh']['value'];
|
704 |
-
} else
|
705 |
-
error_log('XML-RPC: missing VALUE inside STRUCT in received xml');
|
706 |
-
break;
|
707 |
-
case 'DATA':
|
708 |
-
//$GLOBALS['_xh']['ac']=''; // is this necessary?
|
709 |
-
$GLOBALS['_xh']['vt']=null; // reset this to check for 2 data elements in a row - even if they're empty
|
710 |
-
break;
|
711 |
-
case 'STRUCT':
|
712 |
-
case 'ARRAY':
|
713 |
-
// fetch out of stack array of values, and promote it to current value
|
714 |
-
$curr_val = array_pop($GLOBALS['_xh']['valuestack']);
|
715 |
-
$GLOBALS['_xh']['value'] = $curr_val['values'];
|
716 |
-
$GLOBALS['_xh']['vt']=strtolower($name);
|
717 |
-
if (isset($curr_val['php_class']))
|
718 |
-
{
|
719 |
-
$GLOBALS['_xh']['php_class'] = $curr_val['php_class'];
|
720 |
-
}
|
721 |
-
break;
|
722 |
-
case 'PARAM':
|
723 |
-
// add to array of params the current value,
|
724 |
-
// unless no VALUE was found
|
725 |
-
if ($GLOBALS['_xh']['vt'])
|
726 |
-
{
|
727 |
-
$GLOBALS['_xh']['params'][]=$GLOBALS['_xh']['value'];
|
728 |
-
$GLOBALS['_xh']['pt'][]=$GLOBALS['_xh']['vt'];
|
729 |
-
}
|
730 |
-
else
|
731 |
-
error_log('XML-RPC: missing VALUE inside PARAM in received xml');
|
732 |
-
break;
|
733 |
-
case 'METHODNAME':
|
734 |
-
$GLOBALS['_xh']['method']=preg_replace('/^[\n\r\t ]+/', '', $GLOBALS['_xh']['ac']);
|
735 |
-
break;
|
736 |
-
case 'NIL':
|
737 |
-
case 'EX:NIL':
|
738 |
-
if ($GLOBALS['xmlrpc_null_extension'])
|
739 |
-
{
|
740 |
-
$GLOBALS['_xh']['vt']='null';
|
741 |
-
$GLOBALS['_xh']['value']=null;
|
742 |
-
$GLOBALS['_xh']['lv']=3;
|
743 |
-
break;
|
744 |
-
}
|
745 |
-
// drop through intentionally if nil extension not enabled
|
746 |
-
case 'PARAMS':
|
747 |
-
case 'FAULT':
|
748 |
-
case 'METHODCALL':
|
749 |
-
case 'METHORESPONSE':
|
750 |
-
break;
|
751 |
-
default:
|
752 |
-
// End of INVALID ELEMENT!
|
753 |
-
// shall we add an assert here for unreachable code???
|
754 |
-
break;
|
755 |
-
}
|
756 |
-
}
|
757 |
-
}
|
758 |
-
|
759 |
-
/// Used in decoding xmlrpc requests/responses without rebuilding xmlrpc values
|
760 |
-
function xmlrpc_ee_fast($parser, $name)
|
761 |
-
{
|
762 |
-
xmlrpc_ee($parser, $name, false);
|
763 |
-
}
|
764 |
-
|
765 |
-
/// xml parser handler function for character data
|
766 |
-
function xmlrpc_cd($parser, $data)
|
767 |
-
{
|
768 |
-
// skip processing if xml fault already detected
|
769 |
-
if ($GLOBALS['_xh']['isf'] < 2)
|
770 |
-
{
|
771 |
-
// "lookforvalue==3" means that we've found an entire value
|
772 |
-
// and should discard any further character data
|
773 |
-
if($GLOBALS['_xh']['lv']!=3)
|
774 |
-
{
|
775 |
-
// G. Giunta 2006-08-23: useless change of 'lv' from 1 to 2
|
776 |
-
//if($GLOBALS['_xh']['lv']==1)
|
777 |
-
//{
|
778 |
-
// if we've found text and we're just in a <value> then
|
779 |
-
// say we've found a value
|
780 |
-
//$GLOBALS['_xh']['lv']=2;
|
781 |
-
//}
|
782 |
-
// we always initialize the accumulator before starting parsing, anyway...
|
783 |
-
//if(!@isset($GLOBALS['_xh']['ac']))
|
784 |
-
//{
|
785 |
-
// $GLOBALS['_xh']['ac'] = '';
|
786 |
-
//}
|
787 |
-
$GLOBALS['_xh']['ac'].=$data;
|
788 |
-
}
|
789 |
-
}
|
790 |
-
}
|
791 |
-
|
792 |
-
/// xml parser handler function for 'other stuff', ie. not char data or
|
793 |
-
/// element start/end tag. In fact it only gets called on unknown entities...
|
794 |
-
function xmlrpc_dh($parser, $data)
|
795 |
-
{
|
796 |
-
// skip processing if xml fault already detected
|
797 |
-
if ($GLOBALS['_xh']['isf'] < 2)
|
798 |
-
{
|
799 |
-
if(substr($data, 0, 1) == '&' && substr($data, -1, 1) == ';')
|
800 |
-
{
|
801 |
-
// G. Giunta 2006-08-25: useless change of 'lv' from 1 to 2
|
802 |
-
//if($GLOBALS['_xh']['lv']==1)
|
803 |
-
//{
|
804 |
-
// $GLOBALS['_xh']['lv']=2;
|
805 |
-
//}
|
806 |
-
$GLOBALS['_xh']['ac'].=$data;
|
807 |
-
}
|
808 |
-
}
|
809 |
-
return true;
|
810 |
-
}
|
811 |
-
|
812 |
-
|
813 |
-
class xmlrpc_client
|
814 |
-
{
|
815 |
-
var $path;
|
816 |
-
var $server;
|
817 |
-
var $port=0;
|
818 |
-
var $method='http';
|
819 |
-
var $errno;
|
820 |
-
var $errstr;
|
821 |
-
var $debug=0;
|
822 |
-
var $username='';
|
823 |
-
var $password='';
|
824 |
-
var $authtype=1;
|
825 |
-
var $cert='';
|
826 |
-
var $certpass='';
|
827 |
-
var $cacert='';
|
828 |
-
var $cacertdir='';
|
829 |
-
var $key='';
|
830 |
-
var $keypass='';
|
831 |
-
var $verifypeer=true;
|
832 |
-
var $verifyhost=2;
|
833 |
-
var $no_multicall=false;
|
834 |
-
var $proxy='';
|
835 |
-
var $proxyport=0;
|
836 |
-
var $proxy_user='';
|
837 |
-
var $proxy_pass='';
|
838 |
-
var $proxy_authtype=1;
|
839 |
-
var $cookies=array();
|
840 |
-
var $extracurlopts=array();
|
841 |
-
var $extraUrlParams = null;
|
842 |
-
var $curlError = null;
|
843 |
-
var $curlInfo = null;
|
844 |
-
var $curlErrorNo = null;
|
845 |
-
|
846 |
-
/**
|
847 |
-
* List of http compression methods accepted by the client for responses.
|
848 |
-
* NB: PHP supports deflate, gzip compressions out of the box if compiled w. zlib
|
849 |
-
*
|
850 |
-
* NNB: you can set it to any non-empty array for HTTP11 and HTTPS, since
|
851 |
-
* in those cases it will be up to CURL to decide the compression methods
|
852 |
-
* it supports. You might check for the presence of 'zlib' in the output of
|
853 |
-
* curl_version() to determine wheter compression is supported or not
|
854 |
-
*/
|
855 |
-
var $accepted_compression = array();
|
856 |
-
/**
|
857 |
-
* Name of compression scheme to be used for sending requests.
|
858 |
-
* Either null, gzip or deflate
|
859 |
-
*/
|
860 |
-
var $request_compression = '';
|
861 |
-
/**
|
862 |
-
* CURL handle: used for keep-alive connections (PHP 4.3.8 up, see:
|
863 |
-
* http://curl.haxx.se/docs/faq.html#7.3)
|
864 |
-
*/
|
865 |
-
var $xmlrpc_curl_handle = null;
|
866 |
-
/// Whether to use persistent connections for http 1.1 and https
|
867 |
-
var $keepalive = false;
|
868 |
-
/// Charset encodings that can be decoded without problems by the client
|
869 |
-
var $accepted_charset_encodings = array();
|
870 |
-
/// Charset encoding to be used in serializing request. NULL = use ASCII
|
871 |
-
var $request_charset_encoding = '';
|
872 |
-
/**
|
873 |
-
* Decides the content of xmlrpcresp objects returned by calls to send()
|
874 |
-
* valid strings are 'xmlrpcvals', 'phpvals' or 'xml'
|
875 |
-
*/
|
876 |
-
var $return_type = 'xmlrpcvals';
|
877 |
-
/**
|
878 |
-
* Sent to servers in http headers
|
879 |
-
*/
|
880 |
-
var $user_agent;
|
881 |
-
|
882 |
-
/**
|
883 |
-
* @param string $path either the complete server URL or the PATH part of the xmlrc server URL, e.g. /xmlrpc/server.php
|
884 |
-
* @param string $server the server name / ip address
|
885 |
-
* @param integer $port the port the server is listening on, defaults to 80 or 443 depending on protocol used
|
886 |
-
* @param string $method the http protocol variant: defaults to 'http', 'https' and 'http11' can be used if CURL is installed
|
887 |
-
*/
|
888 |
-
function __construct($path, $server='', $port='', $method='')
|
889 |
-
{
|
890 |
-
// allow user to specify all params in $path
|
891 |
-
if($server == '' and $port == '' and $method == '')
|
892 |
-
{
|
893 |
-
$parts = parse_url($path);
|
894 |
-
$server = $parts['host'];
|
895 |
-
$path = isset($parts['path']) ? $parts['path'] : '';
|
896 |
-
if(isset($parts['query']))
|
897 |
-
{
|
898 |
-
$path .= '?'.$parts['query'];
|
899 |
-
}
|
900 |
-
if(isset($parts['fragment']))
|
901 |
-
{
|
902 |
-
$path .= '#'.$parts['fragment'];
|
903 |
-
}
|
904 |
-
if(isset($parts['port']))
|
905 |
-
{
|
906 |
-
$port = $parts['port'];
|
907 |
-
}
|
908 |
-
if(isset($parts['scheme']))
|
909 |
-
{
|
910 |
-
$method = $parts['scheme'];
|
911 |
-
}
|
912 |
-
if(isset($parts['user']))
|
913 |
-
{
|
914 |
-
$this->username = $parts['user'];
|
915 |
-
}
|
916 |
-
if(isset($parts['pass']))
|
917 |
-
{
|
918 |
-
$this->password = $parts['pass'];
|
919 |
-
}
|
920 |
-
}
|
921 |
-
if($path == '' || $path[0] != '/')
|
922 |
-
{
|
923 |
-
$this->path='/'.$path;
|
924 |
-
}
|
925 |
-
else
|
926 |
-
{
|
927 |
-
$this->path=$path;
|
928 |
-
}
|
929 |
-
$this->server=$server;
|
930 |
-
if($port != '')
|
931 |
-
{
|
932 |
-
$this->port=$port;
|
933 |
-
}
|
934 |
-
if($method != '')
|
935 |
-
{
|
936 |
-
$this->method=$method;
|
937 |
-
}
|
938 |
-
|
939 |
-
// if ZLIB is enabled, let the client by default accept compressed responses
|
940 |
-
if(function_exists('gzinflate') || (
|
941 |
-
function_exists('curl_init') && (($info = curl_version()) &&
|
942 |
-
((is_string($info) && strpos($info, 'zlib') !== null) || isset($info['libz_version'])))
|
943 |
-
))
|
944 |
-
{
|
945 |
-
$this->accepted_compression = array('gzip', 'deflate');
|
946 |
-
}
|
947 |
-
|
948 |
-
// keepalives: enabled by default
|
949 |
-
$this->keepalive = true;
|
950 |
-
|
951 |
-
// by default the xml parser can support these 3 charset encodings
|
952 |
-
$this->accepted_charset_encodings = array('UTF-8', 'ISO-8859-1', 'US-ASCII');
|
953 |
-
|
954 |
-
// initialize user_agent string
|
955 |
-
$this->user_agent = $GLOBALS['xmlrpcName'] . ' ' . $GLOBALS['xmlrpcVersion'];
|
956 |
-
}
|
957 |
-
|
958 |
-
/**
|
959 |
-
* Enables/disables the echoing to screen of the xmlrpc responses received
|
960 |
-
* @param integer $in values 0, 1 and 2 are supported (2 = echo sent msg too, before received response)
|
961 |
-
* @access public
|
962 |
-
*/
|
963 |
-
function setDebug($in)
|
964 |
-
{
|
965 |
-
$this->debug=$in;
|
966 |
-
}
|
967 |
-
|
968 |
-
/**
|
969 |
-
* Add some http BASIC AUTH credentials, used by the client to authenticate
|
970 |
-
* @param string $u username
|
971 |
-
* @param string $p password
|
972 |
-
* @param integer $t auth type. See curl_setopt man page for supported auth types. Defaults to CURLAUTH_BASIC (basic auth)
|
973 |
-
* @access public
|
974 |
-
*/
|
975 |
-
function setCredentials($u, $p, $t=1)
|
976 |
-
{
|
977 |
-
$this->username=$u;
|
978 |
-
$this->password=$p;
|
979 |
-
$this->authtype=$t;
|
980 |
-
}
|
981 |
-
|
982 |
-
/**
|
983 |
-
* Add a client-side https certificate
|
984 |
-
* @param string $cert
|
985 |
-
* @param string $certpass
|
986 |
-
* @access public
|
987 |
-
*/
|
988 |
-
function setCertificate($cert, $certpass)
|
989 |
-
{
|
990 |
-
$this->cert = $cert;
|
991 |
-
$this->certpass = $certpass;
|
992 |
-
}
|
993 |
-
|
994 |
-
/**
|
995 |
-
* Add a CA certificate to verify server with (see man page about
|
996 |
-
* CURLOPT_CAINFO for more details)
|
997 |
-
* @param string $cacert certificate file name (or dir holding certificates)
|
998 |
-
* @param bool $is_dir set to true to indicate cacert is a dir. defaults to false
|
999 |
-
* @access public
|
1000 |
-
*/
|
1001 |
-
function setCaCertificate($cacert, $is_dir=false)
|
1002 |
-
{
|
1003 |
-
if ($is_dir)
|
1004 |
-
{
|
1005 |
-
$this->cacertdir = $cacert;
|
1006 |
-
}
|
1007 |
-
else
|
1008 |
-
{
|
1009 |
-
$this->cacert = $cacert;
|
1010 |
-
}
|
1011 |
-
}
|
1012 |
-
|
1013 |
-
/**
|
1014 |
-
* Set attributes for SSL communication: private SSL key
|
1015 |
-
* NB: does not work in older php/curl installs
|
1016 |
-
* Thanks to Daniel Convissor
|
1017 |
-
* @param string $key The name of a file containing a private SSL key
|
1018 |
-
* @param string $keypass The secret password needed to use the private SSL key
|
1019 |
-
* @access public
|
1020 |
-
*/
|
1021 |
-
function setKey($key, $keypass)
|
1022 |
-
{
|
1023 |
-
$this->key = $key;
|
1024 |
-
$this->keypass = $keypass;
|
1025 |
-
}
|
1026 |
-
|
1027 |
-
/**
|
1028 |
-
* Set attributes for SSL communication: verify server certificate
|
1029 |
-
* @param bool $i enable/disable verification of peer certificate
|
1030 |
-
* @access public
|
1031 |
-
*/
|
1032 |
-
function setSSLVerifyPeer($i)
|
1033 |
-
{
|
1034 |
-
$this->verifypeer = $i;
|
1035 |
-
}
|
1036 |
-
|
1037 |
-
/**
|
1038 |
-
* Set attributes for SSL communication: verify match of server cert w. hostname
|
1039 |
-
* @param int $i
|
1040 |
-
* @access public
|
1041 |
-
*/
|
1042 |
-
function setSSLVerifyHost($i)
|
1043 |
-
{
|
1044 |
-
$this->verifyhost = $i;
|
1045 |
-
}
|
1046 |
-
|
1047 |
-
/**
|
1048 |
-
* Set proxy info
|
1049 |
-
* @param string $proxyhost
|
1050 |
-
* @param string $proxyport Defaults to 8080 for HTTP and 443 for HTTPS
|
1051 |
-
* @param string $proxyusername Leave blank if proxy has public access
|
1052 |
-
* @param string $proxypassword Leave blank if proxy has public access
|
1053 |
-
* @param int $proxyauthtype set to constant CURLAUTH_NTLM to use NTLM auth with proxy
|
1054 |
-
* @access public
|
1055 |
-
*/
|
1056 |
-
function setProxy($proxyhost, $proxyport, $proxyusername = '', $proxypassword = '', $proxyauthtype = 1)
|
1057 |
-
{
|
1058 |
-
$this->proxy = $proxyhost;
|
1059 |
-
$this->proxyport = $proxyport;
|
1060 |
-
$this->proxy_user = $proxyusername;
|
1061 |
-
$this->proxy_pass = $proxypassword;
|
1062 |
-
$this->proxy_authtype = $proxyauthtype;
|
1063 |
-
}
|
1064 |
-
|
1065 |
-
/**
|
1066 |
-
* Enables/disables reception of compressed xmlrpc responses.
|
1067 |
-
* Note that enabling reception of compressed responses merely adds some standard
|
1068 |
-
* http headers to xmlrpc requests. It is up to the xmlrpc server to return
|
1069 |
-
* compressed responses when receiving such requests.
|
1070 |
-
* @param string $compmethod either 'gzip', 'deflate', 'any' or ''
|
1071 |
-
* @access public
|
1072 |
-
*/
|
1073 |
-
function setAcceptedCompression($compmethod)
|
1074 |
-
{
|
1075 |
-
if ($compmethod == 'any')
|
1076 |
-
$this->accepted_compression = array('gzip', 'deflate');
|
1077 |
-
else
|
1078 |
-
if ($compmethod == false )
|
1079 |
-
$this->accepted_compression = array();
|
1080 |
-
else
|
1081 |
-
$this->accepted_compression = array($compmethod);
|
1082 |
-
}
|
1083 |
-
|
1084 |
-
/**
|
1085 |
-
* Enables/disables http compression of xmlrpc request.
|
1086 |
-
* Take care when sending compressed requests: servers might not support them
|
1087 |
-
* (and automatic fallback to uncompressed requests is not yet implemented)
|
1088 |
-
* @param string $compmethod either 'gzip', 'deflate' or ''
|
1089 |
-
* @access public
|
1090 |
-
*/
|
1091 |
-
function setRequestCompression($compmethod)
|
1092 |
-
{
|
1093 |
-
$this->request_compression = $compmethod;
|
1094 |
-
}
|
1095 |
-
|
1096 |
-
/**
|
1097 |
-
* Adds a cookie to list of cookies that will be sent to server.
|
1098 |
-
* NB: setting any param but name and value will turn the cookie into a 'version 1' cookie:
|
1099 |
-
* do not do it unless you know what you are doing
|
1100 |
-
* @param string $name
|
1101 |
-
* @param string $value
|
1102 |
-
* @param string $path
|
1103 |
-
* @param string $domain
|
1104 |
-
* @param int $port
|
1105 |
-
* @access public
|
1106 |
-
*
|
1107 |
-
* @todo check correctness of urlencoding cookie value (copied from php way of doing it...)
|
1108 |
-
*/
|
1109 |
-
function setCookie($name, $value='', $path='', $domain='', $port=null)
|
1110 |
-
{
|
1111 |
-
$this->cookies[$name]['value'] = urlencode($value);
|
1112 |
-
if ($path || $domain || $port)
|
1113 |
-
{
|
1114 |
-
$this->cookies[$name]['path'] = $path;
|
1115 |
-
$this->cookies[$name]['domain'] = $domain;
|
1116 |
-
$this->cookies[$name]['port'] = $port;
|
1117 |
-
$this->cookies[$name]['version'] = 1;
|
1118 |
-
}
|
1119 |
-
else
|
1120 |
-
{
|
1121 |
-
$this->cookies[$name]['version'] = 0;
|
1122 |
-
}
|
1123 |
-
}
|
1124 |
-
|
1125 |
-
/**
|
1126 |
-
* Directly set cURL options, for extra flexibility
|
1127 |
-
* It allows eg. to bind client to a specific IP interface / address
|
1128 |
-
* @param array $options
|
1129 |
-
*/
|
1130 |
-
function SetCurlOptions( $options )
|
1131 |
-
{
|
1132 |
-
$this->extracurlopts = $options;
|
1133 |
-
}
|
1134 |
-
|
1135 |
-
/**
|
1136 |
-
* Set user-agent string that will be used by this client instance
|
1137 |
-
* in http headers sent to the server
|
1138 |
-
*/
|
1139 |
-
function SetUserAgent( $agentstring )
|
1140 |
-
{
|
1141 |
-
$this->user_agent = $agentstring;
|
1142 |
-
}
|
1143 |
-
|
1144 |
-
/**
|
1145 |
-
* Send an xmlrpc request
|
1146 |
-
* @param mixed $msg The message object, or an array of messages for using multicall, or the complete xml representation of a request
|
1147 |
-
* @param integer $timeout Connection timeout, in seconds, If unspecified, a platform specific timeout will apply
|
1148 |
-
* @param string $method if left unspecified, the http protocol chosen during creation of the object will be used
|
1149 |
-
* @return xmlrpcresp
|
1150 |
-
* @access public
|
1151 |
-
*/
|
1152 |
-
function& send($msg, $timeout=0, $method='')
|
1153 |
-
{
|
1154 |
-
// if user deos not specify http protocol, use native method of this client
|
1155 |
-
// (i.e. method set during call to constructor)
|
1156 |
-
if($method == '')
|
1157 |
-
{
|
1158 |
-
$method = $this->method;
|
1159 |
-
}
|
1160 |
-
|
1161 |
-
if(is_array($msg))
|
1162 |
-
{
|
1163 |
-
// $msg is an array of xmlrpcmsg's
|
1164 |
-
$r = $this->multicall($msg, $timeout, $method);
|
1165 |
-
return $r;
|
1166 |
-
}
|
1167 |
-
elseif(is_string($msg))
|
1168 |
-
{
|
1169 |
-
$n = new xmlrpcmsg('');
|
1170 |
-
$n->payload = $msg;
|
1171 |
-
$msg = $n;
|
1172 |
-
}
|
1173 |
-
|
1174 |
-
// where msg is an xmlrpcmsg
|
1175 |
-
$msg->debug=$this->debug;
|
1176 |
-
|
1177 |
-
if($method == 'https')
|
1178 |
-
{
|
1179 |
-
$r =& $this->sendPayloadHTTPS(
|
1180 |
-
$msg,
|
1181 |
-
$this->server,
|
1182 |
-
$this->port,
|
1183 |
-
$timeout,
|
1184 |
-
$this->username,
|
1185 |
-
$this->password,
|
1186 |
-
$this->authtype,
|
1187 |
-
$this->cert,
|
1188 |
-
$this->certpass,
|
1189 |
-
$this->cacert,
|
1190 |
-
$this->cacertdir,
|
1191 |
-
$this->proxy,
|
1192 |
-
$this->proxyport,
|
1193 |
-
$this->proxy_user,
|
1194 |
-
$this->proxy_pass,
|
1195 |
-
$this->proxy_authtype,
|
1196 |
-
$this->keepalive,
|
1197 |
-
$this->key,
|
1198 |
-
$this->keypass
|
1199 |
-
);
|
1200 |
-
}
|
1201 |
-
elseif($method == 'http11')
|
1202 |
-
{
|
1203 |
-
$r =& $this->sendPayloadCURL(
|
1204 |
-
$msg,
|
1205 |
-
$this->server,
|
1206 |
-
$this->port,
|
1207 |
-
$timeout,
|
1208 |
-
$this->username,
|
1209 |
-
$this->password,
|
1210 |
-
$this->authtype,
|
1211 |
-
null,
|
1212 |
-
null,
|
1213 |
-
null,
|
1214 |
-
null,
|
1215 |
-
$this->proxy,
|
1216 |
-
$this->proxyport,
|
1217 |
-
$this->proxy_user,
|
1218 |
-
$this->proxy_pass,
|
1219 |
-
$this->proxy_authtype,
|
1220 |
-
'http',
|
1221 |
-
$this->keepalive
|
1222 |
-
);
|
1223 |
-
}
|
1224 |
-
else
|
1225 |
-
{
|
1226 |
-
$r =& $this->sendPayloadHTTP10(
|
1227 |
-
$msg,
|
1228 |
-
$this->server,
|
1229 |
-
$this->port,
|
1230 |
-
$timeout,
|
1231 |
-
$this->username,
|
1232 |
-
$this->password,
|
1233 |
-
$this->authtype,
|
1234 |
-
$this->proxy,
|
1235 |
-
$this->proxyport,
|
1236 |
-
$this->proxy_user,
|
1237 |
-
$this->proxy_pass,
|
1238 |
-
$this->proxy_authtype
|
1239 |
-
);
|
1240 |
-
}
|
1241 |
-
|
1242 |
-
return $r;
|
1243 |
-
}
|
1244 |
-
|
1245 |
-
/**
|
1246 |
-
* @access private
|
1247 |
-
*/
|
1248 |
-
function &sendPayloadHTTP10($msg, $server, $port, $timeout=0,
|
1249 |
-
$username='', $password='', $authtype=1, $proxyhost='',
|
1250 |
-
$proxyport=0, $proxyusername='', $proxypassword='', $proxyauthtype=1)
|
1251 |
-
{
|
1252 |
-
if($port==0)
|
1253 |
-
{
|
1254 |
-
$port=80;
|
1255 |
-
}
|
1256 |
-
|
1257 |
-
// Only create the payload if it was not created previously
|
1258 |
-
if(empty($msg->payload))
|
1259 |
-
{
|
1260 |
-
$msg->createPayload($this->request_charset_encoding);
|
1261 |
-
}
|
1262 |
-
|
1263 |
-
$payload = $msg->payload;
|
1264 |
-
// Deflate request body and set appropriate request headers
|
1265 |
-
if(function_exists('gzdeflate') && ($this->request_compression == 'gzip' || $this->request_compression == 'deflate'))
|
1266 |
-
{
|
1267 |
-
if($this->request_compression == 'gzip')
|
1268 |
-
{
|
1269 |
-
$a = @gzencode($payload);
|
1270 |
-
if($a)
|
1271 |
-
{
|
1272 |
-
$payload = $a;
|
1273 |
-
$encoding_hdr = "Content-Encoding: gzip\r\n";
|
1274 |
-
}
|
1275 |
-
}
|
1276 |
-
else
|
1277 |
-
{
|
1278 |
-
$a = @gzcompress($payload);
|
1279 |
-
if($a)
|
1280 |
-
{
|
1281 |
-
$payload = $a;
|
1282 |
-
$encoding_hdr = "Content-Encoding: deflate\r\n";
|
1283 |
-
}
|
1284 |
-
}
|
1285 |
-
}
|
1286 |
-
else
|
1287 |
-
{
|
1288 |
-
$encoding_hdr = '';
|
1289 |
-
}
|
1290 |
-
|
1291 |
-
// thanks to Grant Rauscher <grant7@firstworld.net> for this
|
1292 |
-
$credentials='';
|
1293 |
-
if($username!='')
|
1294 |
-
{
|
1295 |
-
$credentials='Authorization: Basic ' . base64_encode($username . ':' . $password) . "\r\n";
|
1296 |
-
if ($authtype != 1)
|
1297 |
-
{
|
1298 |
-
error_log('XML-RPC: '.__METHOD__.': warning. Only Basic auth is supported with HTTP 1.0');
|
1299 |
-
}
|
1300 |
-
}
|
1301 |
-
|
1302 |
-
$accepted_encoding = '';
|
1303 |
-
if(is_array($this->accepted_compression) && count($this->accepted_compression))
|
1304 |
-
{
|
1305 |
-
$accepted_encoding = 'Accept-Encoding: ' . implode(', ', $this->accepted_compression) . "\r\n";
|
1306 |
-
}
|
1307 |
-
|
1308 |
-
$proxy_credentials = '';
|
1309 |
-
if($proxyhost)
|
1310 |
-
{
|
1311 |
-
if($proxyport == 0)
|
1312 |
-
{
|
1313 |
-
$proxyport = 8080;
|
1314 |
-
}
|
1315 |
-
$connectserver = $proxyhost;
|
1316 |
-
$connectport = $proxyport;
|
1317 |
-
$uri = 'http://'.$server.':'.$port.$this->path;
|
1318 |
-
if($proxyusername != '')
|
1319 |
-
{
|
1320 |
-
if ($proxyauthtype != 1)
|
1321 |
-
{
|
1322 |
-
error_log('XML-RPC: '.__METHOD__.': warning. Only Basic auth to proxy is supported with HTTP 1.0');
|
1323 |
-
}
|
1324 |
-
$proxy_credentials = 'Proxy-Authorization: Basic ' . base64_encode($proxyusername.':'.$proxypassword) . "\r\n";
|
1325 |
-
}
|
1326 |
-
}
|
1327 |
-
else
|
1328 |
-
{
|
1329 |
-
$connectserver = $server;
|
1330 |
-
$connectport = $port;
|
1331 |
-
$uri = $this->path;
|
1332 |
-
}
|
1333 |
-
|
1334 |
-
// Cookie generation, as per rfc2965 (version 1 cookies) or
|
1335 |
-
// netscape's rules (version 0 cookies)
|
1336 |
-
$cookieheader='';
|
1337 |
-
if (count($this->cookies))
|
1338 |
-
{
|
1339 |
-
$version = '';
|
1340 |
-
foreach ($this->cookies as $name => $cookie)
|
1341 |
-
{
|
1342 |
-
if ($cookie['version'])
|
1343 |
-
{
|
1344 |
-
$version = ' $Version="' . $cookie['version'] . '";';
|
1345 |
-
$cookieheader .= ' ' . $name . '="' . $cookie['value'] . '";';
|
1346 |
-
if ($cookie['path'])
|
1347 |
-
$cookieheader .= ' $Path="' . $cookie['path'] . '";';
|
1348 |
-
if ($cookie['domain'])
|
1349 |
-
$cookieheader .= ' $Domain="' . $cookie['domain'] . '";';
|
1350 |
-
if ($cookie['port'])
|
1351 |
-
$cookieheader .= ' $Port="' . $cookie['port'] . '";';
|
1352 |
-
}
|
1353 |
-
else
|
1354 |
-
{
|
1355 |
-
$cookieheader .= ' ' . $name . '=' . $cookie['value'] . ";";
|
1356 |
-
}
|
1357 |
-
}
|
1358 |
-
$cookieheader = 'Cookie:' . $version . substr($cookieheader, 0, -1) . "\r\n";
|
1359 |
-
}
|
1360 |
-
|
1361 |
-
// omit port if 80
|
1362 |
-
$port = ($port == 80) ? '' : (':' . $port);
|
1363 |
-
|
1364 |
-
$op= 'POST ' . $uri. " HTTP/1.0\r\n" .
|
1365 |
-
'User-Agent: ' . $this->user_agent . "\r\n" .
|
1366 |
-
'Host: '. $server . $port . "\r\n" .
|
1367 |
-
$credentials .
|
1368 |
-
$proxy_credentials .
|
1369 |
-
$accepted_encoding .
|
1370 |
-
$encoding_hdr .
|
1371 |
-
'Accept-Charset: ' . implode(',', $this->accepted_charset_encodings) . "\r\n" .
|
1372 |
-
$cookieheader .
|
1373 |
-
'Content-Type: ' . $msg->content_type . "\r\nContent-Length: " .
|
1374 |
-
strlen($payload) . "\r\n\r\n" .
|
1375 |
-
$payload;
|
1376 |
-
|
1377 |
-
if($this->debug > 1)
|
1378 |
-
{
|
1379 |
-
print "<PRE>\n---SENDING---\n" . htmlentities($op) . "\n---END---\n</PRE>";
|
1380 |
-
// let the client see this now in case http times out...
|
1381 |
-
flush();
|
1382 |
-
}
|
1383 |
-
|
1384 |
-
if($timeout>0)
|
1385 |
-
{
|
1386 |
-
$fp=@fsockopen($connectserver, $connectport, $this->errno, $this->errstr, $timeout);
|
1387 |
-
}
|
1388 |
-
else
|
1389 |
-
{
|
1390 |
-
$fp=@fsockopen($connectserver, $connectport, $this->errno, $this->errstr);
|
1391 |
-
}
|
1392 |
-
if($fp)
|
1393 |
-
{
|
1394 |
-
if($timeout>0 && function_exists('stream_set_timeout'))
|
1395 |
-
{
|
1396 |
-
stream_set_timeout($fp, $timeout);
|
1397 |
-
}
|
1398 |
-
}
|
1399 |
-
else
|
1400 |
-
{
|
1401 |
-
$this->errstr='Connect error: '.$this->errstr;
|
1402 |
-
$r=new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['http_error'], $this->errstr . ' (' . $this->errno . ')');
|
1403 |
-
return $r;
|
1404 |
-
}
|
1405 |
-
|
1406 |
-
if(!fputs($fp, $op, strlen($op)))
|
1407 |
-
{
|
1408 |
-
fclose($fp);
|
1409 |
-
$this->errstr='Write error';
|
1410 |
-
$r=new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['http_error'], $this->errstr);
|
1411 |
-
return $r;
|
1412 |
-
}
|
1413 |
-
else
|
1414 |
-
{
|
1415 |
-
// reset errno and errstr on successful socket connection
|
1416 |
-
$this->errstr = '';
|
1417 |
-
}
|
1418 |
-
// G. Giunta 2005/10/24: close socket before parsing.
|
1419 |
-
// should yield slightly better execution times, and make easier recursive calls (e.g. to follow http redirects)
|
1420 |
-
$ipd='';
|
1421 |
-
do
|
1422 |
-
{
|
1423 |
-
// shall we check for $data === FALSE?
|
1424 |
-
// as per the manual, it signals an error
|
1425 |
-
$ipd.=fread($fp, 32768);
|
1426 |
-
} while(!feof($fp));
|
1427 |
-
fclose($fp);
|
1428 |
-
$r =& $msg->parseResponse($ipd, false, $this->return_type);
|
1429 |
-
return $r;
|
1430 |
-
|
1431 |
-
}
|
1432 |
-
|
1433 |
-
/**
|
1434 |
-
* @access private
|
1435 |
-
*/
|
1436 |
-
function &sendPayloadHTTPS($msg, $server, $port, $timeout=0, $username='',
|
1437 |
-
$password='', $authtype=1, $cert='',$certpass='', $cacert='', $cacertdir='',
|
1438 |
-
$proxyhost='', $proxyport=0, $proxyusername='', $proxypassword='', $proxyauthtype=1,
|
1439 |
-
$keepalive=false, $key='', $keypass='')
|
1440 |
-
{
|
1441 |
-
$r =& $this->sendPayloadCURL($msg, $server, $port, $timeout, $username,
|
1442 |
-
$password, $authtype, $cert, $certpass, $cacert, $cacertdir, $proxyhost, $proxyport,
|
1443 |
-
$proxyusername, $proxypassword, $proxyauthtype, 'https', $keepalive, $key, $keypass);
|
1444 |
-
return $r;
|
1445 |
-
}
|
1446 |
-
|
1447 |
-
/**
|
1448 |
-
* Contributed by Justin Miller <justin@voxel.net>
|
1449 |
-
* Requires curl to be built into PHP
|
1450 |
-
* NB: CURL versions before 7.11.10 cannot use proxy to talk to https servers!
|
1451 |
-
* @access private
|
1452 |
-
*/
|
1453 |
-
function &sendPayloadCURL($msg, $server, $port, $timeout=0, $username='',
|
1454 |
-
$password='', $authtype=1, $cert='', $certpass='', $cacert='', $cacertdir='',
|
1455 |
-
$proxyhost='', $proxyport=0, $proxyusername='', $proxypassword='', $proxyauthtype=1, $method='https',
|
1456 |
-
$keepalive=false, $key='', $keypass='')
|
1457 |
-
{
|
1458 |
-
if(!function_exists('curl_init'))
|
1459 |
-
{
|
1460 |
-
$this->errstr='CURL unavailable on this install';
|
1461 |
-
$r=new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['no_curl'], $GLOBALS['xmlrpcstr']['no_curl']);
|
1462 |
-
return $r;
|
1463 |
-
}
|
1464 |
-
if($method == 'https')
|
1465 |
-
{
|
1466 |
-
if(($info = curl_version()) &&
|
1467 |
-
((is_string($info) && strpos($info, 'OpenSSL') === null) || (is_array($info) && !isset($info['ssl_version']))))
|
1468 |
-
{
|
1469 |
-
$this->errstr='SSL unavailable on this install';
|
1470 |
-
$r=new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['no_ssl'], $GLOBALS['xmlrpcstr']['no_ssl']);
|
1471 |
-
return $r;
|
1472 |
-
}
|
1473 |
-
}
|
1474 |
-
|
1475 |
-
if($port == 0)
|
1476 |
-
{
|
1477 |
-
if($method == 'http')
|
1478 |
-
{
|
1479 |
-
$port = 80;
|
1480 |
-
}
|
1481 |
-
else
|
1482 |
-
{
|
1483 |
-
$port = 443;
|
1484 |
-
}
|
1485 |
-
}
|
1486 |
-
|
1487 |
-
// Only create the payload if it was not created previously
|
1488 |
-
if(empty($msg->payload))
|
1489 |
-
{
|
1490 |
-
$msg->createPayload($this->request_charset_encoding);
|
1491 |
-
}
|
1492 |
-
|
1493 |
-
// Deflate request body and set appropriate request headers
|
1494 |
-
$payload = $msg->payload;
|
1495 |
-
if(function_exists('gzdeflate') && ($this->request_compression == 'gzip' || $this->request_compression == 'deflate'))
|
1496 |
-
{
|
1497 |
-
if($this->request_compression == 'gzip')
|
1498 |
-
{
|
1499 |
-
$a = @gzencode($payload);
|
1500 |
-
if($a)
|
1501 |
-
{
|
1502 |
-
$payload = $a;
|
1503 |
-
$encoding_hdr = 'Content-Encoding: gzip';
|
1504 |
-
}
|
1505 |
-
}
|
1506 |
-
else
|
1507 |
-
{
|
1508 |
-
$a = @gzcompress($payload);
|
1509 |
-
if($a)
|
1510 |
-
{
|
1511 |
-
$payload = $a;
|
1512 |
-
$encoding_hdr = 'Content-Encoding: deflate';
|
1513 |
-
}
|
1514 |
-
}
|
1515 |
-
}
|
1516 |
-
else
|
1517 |
-
{
|
1518 |
-
$encoding_hdr = '';
|
1519 |
-
}
|
1520 |
-
|
1521 |
-
if($this->debug > 1)
|
1522 |
-
{
|
1523 |
-
print "<PRE>\n---SENDING---\n" . htmlentities($payload) . "\n---END---\n</PRE>";
|
1524 |
-
// let the client see this now in case http times out...
|
1525 |
-
flush();
|
1526 |
-
}
|
1527 |
-
|
1528 |
-
if(!$keepalive || !$this->xmlrpc_curl_handle)
|
1529 |
-
{
|
1530 |
-
$curl = curl_init($method . '://' . $server . ':' . $port . $this->path . ($this->extraUrlParams != null ? '?' . http_build_query($this->extraUrlParams) : ''));
|
1531 |
-
if($keepalive)
|
1532 |
-
{
|
1533 |
-
$this->xmlrpc_curl_handle = $curl;
|
1534 |
-
}
|
1535 |
-
}
|
1536 |
-
else
|
1537 |
-
{
|
1538 |
-
$curl = $this->xmlrpc_curl_handle;
|
1539 |
-
}
|
1540 |
-
|
1541 |
-
// results into variable
|
1542 |
-
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
|
1543 |
-
|
1544 |
-
if($this->debug)
|
1545 |
-
{
|
1546 |
-
curl_setopt($curl, CURLOPT_VERBOSE, 1);
|
1547 |
-
}
|
1548 |
-
curl_setopt($curl, CURLOPT_USERAGENT, $this->user_agent);
|
1549 |
-
// required for XMLRPC: post the data
|
1550 |
-
curl_setopt($curl, CURLOPT_POST, 1);
|
1551 |
-
// the data
|
1552 |
-
curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
|
1553 |
-
|
1554 |
-
// return the header too
|
1555 |
-
curl_setopt($curl, CURLOPT_HEADER, 1);
|
1556 |
-
|
1557 |
-
// NB: if we set an empty string, CURL will add http header indicating
|
1558 |
-
// ALL methods it is supporting. This is possibly a better option than
|
1559 |
-
// letting the user tell what curl can / cannot do...
|
1560 |
-
if(is_array($this->accepted_compression) && count($this->accepted_compression))
|
1561 |
-
{
|
1562 |
-
//curl_setopt($curl, CURLOPT_ENCODING, implode(',', $this->accepted_compression));
|
1563 |
-
// empty string means 'any supported by CURL' (shall we catch errors in case CURLOPT_SSLKEY undefined ?)
|
1564 |
-
if (count($this->accepted_compression) == 1)
|
1565 |
-
{
|
1566 |
-
curl_setopt($curl, CURLOPT_ENCODING, $this->accepted_compression[0]);
|
1567 |
-
}
|
1568 |
-
else
|
1569 |
-
curl_setopt($curl, CURLOPT_ENCODING, '');
|
1570 |
-
}
|
1571 |
-
// extra headers
|
1572 |
-
$headers = array('Content-Type: ' . $msg->content_type , 'Accept-Charset: ' . implode(',', $this->accepted_charset_encodings));
|
1573 |
-
// if no keepalive is wanted, let the server know it in advance
|
1574 |
-
if(!$keepalive)
|
1575 |
-
{
|
1576 |
-
$headers[] = 'Connection: close';
|
1577 |
-
}
|
1578 |
-
// request compression header
|
1579 |
-
if($encoding_hdr)
|
1580 |
-
{
|
1581 |
-
$headers[] = $encoding_hdr;
|
1582 |
-
}
|
1583 |
-
|
1584 |
-
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
|
1585 |
-
// timeout is borked
|
1586 |
-
if($timeout)
|
1587 |
-
{
|
1588 |
-
curl_setopt($curl, CURLOPT_TIMEOUT, $timeout == 1 ? 1 : $timeout - 1);
|
1589 |
-
}
|
1590 |
-
|
1591 |
-
if($username && $password)
|
1592 |
-
{
|
1593 |
-
curl_setopt($curl, CURLOPT_USERPWD, $username.':'.$password);
|
1594 |
-
if (defined('CURLOPT_HTTPAUTH'))
|
1595 |
-
{
|
1596 |
-
curl_setopt($curl, CURLOPT_HTTPAUTH, $authtype);
|
1597 |
-
}
|
1598 |
-
else if ($authtype != 1)
|
1599 |
-
{
|
1600 |
-
error_log('XML-RPC: '.__METHOD__.': warning. Only Basic auth is supported by the current PHP/curl install');
|
1601 |
-
}
|
1602 |
-
}
|
1603 |
-
|
1604 |
-
if($method == 'https')
|
1605 |
-
{
|
1606 |
-
// set cert file
|
1607 |
-
if($cert)
|
1608 |
-
{
|
1609 |
-
curl_setopt($curl, CURLOPT_SSLCERT, $cert);
|
1610 |
-
}
|
1611 |
-
// set cert password
|
1612 |
-
if($certpass)
|
1613 |
-
{
|
1614 |
-
curl_setopt($curl, CURLOPT_SSLCERTPASSWD, $certpass);
|
1615 |
-
}
|
1616 |
-
// whether to verify remote host's cert
|
1617 |
-
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, $this->verifypeer);
|
1618 |
-
// set ca certificates file/dir
|
1619 |
-
if($cacert)
|
1620 |
-
{
|
1621 |
-
curl_setopt($curl, CURLOPT_CAINFO, $cacert);
|
1622 |
-
}
|
1623 |
-
if($cacertdir)
|
1624 |
-
{
|
1625 |
-
curl_setopt($curl, CURLOPT_CAPATH, $cacertdir);
|
1626 |
-
}
|
1627 |
-
// set key file (shall we catch errors in case CURLOPT_SSLKEY undefined ?)
|
1628 |
-
if($key)
|
1629 |
-
{
|
1630 |
-
curl_setopt($curl, CURLOPT_SSLKEY, $key);
|
1631 |
-
}
|
1632 |
-
// set key password (shall we catch errors in case CURLOPT_SSLKEY undefined ?)
|
1633 |
-
if($keypass)
|
1634 |
-
{
|
1635 |
-
curl_setopt($curl, CURLOPT_SSLKEYPASSWD, $keypass);
|
1636 |
-
}
|
1637 |
-
// whether to verify cert's common name (CN); 0 for no, 1 to verify that it exists, and 2 to verify that it matches the hostname used
|
1638 |
-
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, $this->verifyhost);
|
1639 |
-
}
|
1640 |
-
|
1641 |
-
// proxy info
|
1642 |
-
if($proxyhost)
|
1643 |
-
{
|
1644 |
-
if($proxyport == 0)
|
1645 |
-
{
|
1646 |
-
$proxyport = 8080; // NB: even for HTTPS, local connection is on port 8080
|
1647 |
-
}
|
1648 |
-
curl_setopt($curl, CURLOPT_PROXY, $proxyhost.':'.$proxyport);
|
1649 |
-
//curl_setopt($curl, CURLOPT_PROXYPORT,$proxyport);
|
1650 |
-
if($proxyusername)
|
1651 |
-
{
|
1652 |
-
curl_setopt($curl, CURLOPT_PROXYUSERPWD, $proxyusername.':'.$proxypassword);
|
1653 |
-
if (defined('CURLOPT_PROXYAUTH'))
|
1654 |
-
{
|
1655 |
-
curl_setopt($curl, CURLOPT_PROXYAUTH, $proxyauthtype);
|
1656 |
-
}
|
1657 |
-
else if ($proxyauthtype != 1)
|
1658 |
-
{
|
1659 |
-
error_log('XML-RPC: '.__METHOD__.': warning. Only Basic auth to proxy is supported by the current PHP/curl install');
|
1660 |
-
}
|
1661 |
-
}
|
1662 |
-
}
|
1663 |
-
|
1664 |
-
// NB: should we build cookie http headers by hand rather than let CURL do it?
|
1665 |
-
// the following code does not honour 'expires', 'path' and 'domain' cookie attributes
|
1666 |
-
// set to client obj the the user...
|
1667 |
-
if (count($this->cookies))
|
1668 |
-
{
|
1669 |
-
$cookieheader = '';
|
1670 |
-
foreach ($this->cookies as $name => $cookie)
|
1671 |
-
{
|
1672 |
-
$cookieheader .= $name . '=' . $cookie['value'] . '; ';
|
1673 |
-
}
|
1674 |
-
curl_setopt($curl, CURLOPT_COOKIE, substr($cookieheader, 0, -2));
|
1675 |
-
}
|
1676 |
-
|
1677 |
-
foreach ($this->extracurlopts as $opt => $val)
|
1678 |
-
{
|
1679 |
-
curl_setopt($curl, $opt, $val);
|
1680 |
-
}
|
1681 |
-
|
1682 |
-
$result = curl_exec($curl);
|
1683 |
-
|
1684 |
-
if ($this->debug > 1)
|
1685 |
-
{
|
1686 |
-
print "<PRE>\n---CURL INFO---\n";
|
1687 |
-
foreach(curl_getinfo($curl) as $name => $val)
|
1688 |
-
{
|
1689 |
-
if (is_array($val))
|
1690 |
-
{
|
1691 |
-
$val = implode("\n", $val);
|
1692 |
-
}
|
1693 |
-
print $name . ': ' . htmlentities($val) . "\n";
|
1694 |
-
}
|
1695 |
-
|
1696 |
-
print "---END---\n</PRE>";
|
1697 |
-
}
|
1698 |
-
|
1699 |
-
$this->curlError = curl_error($curl);
|
1700 |
-
if ($this->curlError){
|
1701 |
-
$this->curlInfo = curl_getinfo($curl);
|
1702 |
-
$this->curlErrorNo = curl_errno($curl);
|
1703 |
-
}
|
1704 |
-
|
1705 |
-
if(!$result) /// @todo we should use a better check here - what if we get back '' or '0'?
|
1706 |
-
{
|
1707 |
-
$this->errstr='no response';
|
1708 |
-
$resp=new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['curl_fail'], $GLOBALS['xmlrpcstr']['curl_fail']. ': '. curl_error($curl));
|
1709 |
-
curl_close($curl);
|
1710 |
-
if($keepalive)
|
1711 |
-
{
|
1712 |
-
$this->xmlrpc_curl_handle = null;
|
1713 |
-
}
|
1714 |
-
}
|
1715 |
-
else
|
1716 |
-
{
|
1717 |
-
if(!$keepalive)
|
1718 |
-
{
|
1719 |
-
curl_close($curl);
|
1720 |
-
}
|
1721 |
-
$resp =& $msg->parseResponse($result, true, $this->return_type);
|
1722 |
-
// if we got back a 302, we can not reuse the curl handle for later calls
|
1723 |
-
if($resp->faultCode() == $GLOBALS['xmlrpcerr']['http_error'] && $keepalive)
|
1724 |
-
{
|
1725 |
-
curl_close($curl);
|
1726 |
-
$this->xmlrpc_curl_handle = null;
|
1727 |
-
}
|
1728 |
-
}
|
1729 |
-
return $resp;
|
1730 |
-
}
|
1731 |
-
|
1732 |
-
/**
|
1733 |
-
* Send an array of request messages and return an array of responses.
|
1734 |
-
* Unless $this->no_multicall has been set to true, it will try first
|
1735 |
-
* to use one single xmlrpc call to server method system.multicall, and
|
1736 |
-
* revert to sending many successive calls in case of failure.
|
1737 |
-
* This failure is also stored in $this->no_multicall for subsequent calls.
|
1738 |
-
* Unfortunately, there is no server error code universally used to denote
|
1739 |
-
* the fact that multicall is unsupported, so there is no way to reliably
|
1740 |
-
* distinguish between that and a temporary failure.
|
1741 |
-
* If you are sure that server supports multicall and do not want to
|
1742 |
-
* fallback to using many single calls, set the fourth parameter to FALSE.
|
1743 |
-
*
|
1744 |
-
* NB: trying to shoehorn extra functionality into existing syntax has resulted
|
1745 |
-
* in pretty much convoluted code...
|
1746 |
-
*
|
1747 |
-
* @param array $msgs an array of xmlrpcmsg objects
|
1748 |
-
* @param integer $timeout connection timeout (in seconds)
|
1749 |
-
* @param string $method the http protocol variant to be used
|
1750 |
-
* @param boolean fallback When true, upon receiving an error during multicall, multiple single calls will be attempted
|
1751 |
-
* @return array
|
1752 |
-
* @access public
|
1753 |
-
*/
|
1754 |
-
function multicall($msgs, $timeout=0, $method='', $fallback=true)
|
1755 |
-
{
|
1756 |
-
if ($method == '')
|
1757 |
-
{
|
1758 |
-
$method = $this->method;
|
1759 |
-
}
|
1760 |
-
if(!$this->no_multicall)
|
1761 |
-
{
|
1762 |
-
$results = $this->_try_multicall($msgs, $timeout, $method);
|
1763 |
-
if(is_array($results))
|
1764 |
-
{
|
1765 |
-
// System.multicall succeeded
|
1766 |
-
return $results;
|
1767 |
-
}
|
1768 |
-
else
|
1769 |
-
{
|
1770 |
-
// either system.multicall is unsupported by server,
|
1771 |
-
// or call failed for some other reason.
|
1772 |
-
if ($fallback)
|
1773 |
-
{
|
1774 |
-
// Don't try it next time...
|
1775 |
-
$this->no_multicall = true;
|
1776 |
-
}
|
1777 |
-
else
|
1778 |
-
{
|
1779 |
-
if (is_a($results, 'xmlrpcresp'))
|
1780 |
-
{
|
1781 |
-
$result = $results;
|
1782 |
-
}
|
1783 |
-
else
|
1784 |
-
{
|
1785 |
-
$result = new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['multicall_error'], $GLOBALS['xmlrpcstr']['multicall_error']);
|
1786 |
-
}
|
1787 |
-
}
|
1788 |
-
}
|
1789 |
-
}
|
1790 |
-
else
|
1791 |
-
{
|
1792 |
-
// override fallback, in case careless user tries to do two
|
1793 |
-
// opposite things at the same time
|
1794 |
-
$fallback = true;
|
1795 |
-
}
|
1796 |
-
|
1797 |
-
$results = array();
|
1798 |
-
if ($fallback)
|
1799 |
-
{
|
1800 |
-
// system.multicall is (probably) unsupported by server:
|
1801 |
-
// emulate multicall via multiple requests
|
1802 |
-
foreach($msgs as $msg)
|
1803 |
-
{
|
1804 |
-
$results[] =& $this->send($msg, $timeout, $method);
|
1805 |
-
}
|
1806 |
-
}
|
1807 |
-
else
|
1808 |
-
{
|
1809 |
-
// user does NOT want to fallback on many single calls:
|
1810 |
-
// since we should always return an array of responses,
|
1811 |
-
// return an array with the same error repeated n times
|
1812 |
-
foreach($msgs as $msg)
|
1813 |
-
{
|
1814 |
-
$results[] = $result;
|
1815 |
-
}
|
1816 |
-
}
|
1817 |
-
return $results;
|
1818 |
-
}
|
1819 |
-
|
1820 |
-
/**
|
1821 |
-
* Attempt to boxcar $msgs via system.multicall.
|
1822 |
-
* Returns either an array of xmlrpcreponses, an xmlrpc error response
|
1823 |
-
* or false (when received response does not respect valid multicall syntax)
|
1824 |
-
* @access private
|
1825 |
-
*/
|
1826 |
-
function _try_multicall($msgs, $timeout, $method)
|
1827 |
-
{
|
1828 |
-
// Construct multicall message
|
1829 |
-
$calls = array();
|
1830 |
-
foreach($msgs as $msg)
|
1831 |
-
{
|
1832 |
-
$call['methodName'] = new xmlrpcval($msg->method(),'string');
|
1833 |
-
$numParams = $msg->getNumParams();
|
1834 |
-
$params = array();
|
1835 |
-
for($i = 0; $i < $numParams; $i++)
|
1836 |
-
{
|
1837 |
-
$params[$i] = $msg->getParam($i);
|
1838 |
-
}
|
1839 |
-
$call['params'] = new xmlrpcval($params, 'array');
|
1840 |
-
$calls[] = new xmlrpcval($call, 'struct');
|
1841 |
-
}
|
1842 |
-
$multicall = new xmlrpcmsg('system.multicall');
|
1843 |
-
$multicall->addParam(new xmlrpcval($calls, 'array'));
|
1844 |
-
|
1845 |
-
// Attempt RPC call
|
1846 |
-
$result =& $this->send($multicall, $timeout, $method);
|
1847 |
-
|
1848 |
-
if($result->faultCode() != 0)
|
1849 |
-
{
|
1850 |
-
// call to system.multicall failed
|
1851 |
-
return $result;
|
1852 |
-
}
|
1853 |
-
|
1854 |
-
// Unpack responses.
|
1855 |
-
$rets = $result->value();
|
1856 |
-
|
1857 |
-
if ($this->return_type == 'xml')
|
1858 |
-
{
|
1859 |
-
return $rets;
|
1860 |
-
}
|
1861 |
-
else if ($this->return_type == 'phpvals')
|
1862 |
-
{
|
1863 |
-
///@todo test this code branch...
|
1864 |
-
$rets = $result->value();
|
1865 |
-
if(!is_array($rets))
|
1866 |
-
{
|
1867 |
-
return false; // bad return type from system.multicall
|
1868 |
-
}
|
1869 |
-
$numRets = count($rets);
|
1870 |
-
if($numRets != count($msgs))
|
1871 |
-
{
|
1872 |
-
return false; // wrong number of return values.
|
1873 |
-
}
|
1874 |
-
|
1875 |
-
$response = array();
|
1876 |
-
for($i = 0; $i < $numRets; $i++)
|
1877 |
-
{
|
1878 |
-
$val = $rets[$i];
|
1879 |
-
if (!is_array($val)) {
|
1880 |
-
return false;
|
1881 |
-
}
|
1882 |
-
switch(count($val))
|
1883 |
-
{
|
1884 |
-
case 1:
|
1885 |
-
if(!isset($val[0]))
|
1886 |
-
{
|
1887 |
-
return false; // Bad value
|
1888 |
-
}
|
1889 |
-
// Normal return value
|
1890 |
-
$response[$i] = new xmlrpcresp($val[0], 0, '', 'phpvals');
|
1891 |
-
break;
|
1892 |
-
case 2:
|
1893 |
-
/// @todo remove usage of @: it is apparently quite slow
|
1894 |
-
$code = @$val['faultCode'];
|
1895 |
-
if(!is_int($code))
|
1896 |
-
{
|
1897 |
-
return false;
|
1898 |
-
}
|
1899 |
-
$str = @$val['faultString'];
|
1900 |
-
if(!is_string($str))
|
1901 |
-
{
|
1902 |
-
return false;
|
1903 |
-
}
|
1904 |
-
$response[$i] = new xmlrpcresp(0, $code, $str);
|
1905 |
-
break;
|
1906 |
-
default:
|
1907 |
-
return false;
|
1908 |
-
}
|
1909 |
-
}
|
1910 |
-
return $response;
|
1911 |
-
}
|
1912 |
-
else // return type == 'xmlrpcvals'
|
1913 |
-
{
|
1914 |
-
$rets = $result->value();
|
1915 |
-
if($rets->kindOf() != 'array')
|
1916 |
-
{
|
1917 |
-
return false; // bad return type from system.multicall
|
1918 |
-
}
|
1919 |
-
$numRets = $rets->arraysize();
|
1920 |
-
if($numRets != count($msgs))
|
1921 |
-
{
|
1922 |
-
return false; // wrong number of return values.
|
1923 |
-
}
|
1924 |
-
|
1925 |
-
$response = array();
|
1926 |
-
for($i = 0; $i < $numRets; $i++)
|
1927 |
-
{
|
1928 |
-
$val = $rets->arraymem($i);
|
1929 |
-
switch($val->kindOf())
|
1930 |
-
{
|
1931 |
-
case 'array':
|
1932 |
-
if($val->arraysize() != 1)
|
1933 |
-
{
|
1934 |
-
return false; // Bad value
|
1935 |
-
}
|
1936 |
-
// Normal return value
|
1937 |
-
$response[$i] = new xmlrpcresp($val->arraymem(0));
|
1938 |
-
break;
|
1939 |
-
case 'struct':
|
1940 |
-
$code = $val->structmem('faultCode');
|
1941 |
-
if($code->kindOf() != 'scalar' || $code->scalartyp() != 'int')
|
1942 |
-
{
|
1943 |
-
return false;
|
1944 |
-
}
|
1945 |
-
$str = $val->structmem('faultString');
|
1946 |
-
if($str->kindOf() != 'scalar' || $str->scalartyp() != 'string')
|
1947 |
-
{
|
1948 |
-
return false;
|
1949 |
-
}
|
1950 |
-
$response[$i] = new xmlrpcresp(0, $code->scalarval(), $str->scalarval());
|
1951 |
-
break;
|
1952 |
-
default:
|
1953 |
-
return false;
|
1954 |
-
}
|
1955 |
-
}
|
1956 |
-
return $response;
|
1957 |
-
}
|
1958 |
-
}
|
1959 |
-
} // end class xmlrpc_client
|
1960 |
-
|
1961 |
-
class xmlrpcresp
|
1962 |
-
{
|
1963 |
-
var $val = 0;
|
1964 |
-
var $valtyp;
|
1965 |
-
var $errno = 0;
|
1966 |
-
var $errstr = '';
|
1967 |
-
var $payload;
|
1968 |
-
var $hdrs = array();
|
1969 |
-
var $_cookies = array();
|
1970 |
-
var $content_type = 'text/xml';
|
1971 |
-
var $raw_data = '';
|
1972 |
-
|
1973 |
-
/**
|
1974 |
-
* @param mixed $val either an xmlrpcval obj, a php value or the xml serialization of an xmlrpcval (a string)
|
1975 |
-
* @param integer $fcode set it to anything but 0 to create an error response
|
1976 |
-
* @param string $fstr the error string, in case of an error response
|
1977 |
-
* @param string $valtyp either 'xmlrpcvals', 'phpvals' or 'xml'
|
1978 |
-
*
|
1979 |
-
* @todo add check that $val / $fcode / $fstr is of correct type???
|
1980 |
-
* NB: as of now we do not do it, since it might be either an xmlrpcval or a plain
|
1981 |
-
* php val, or a complete xml chunk, depending on usage of xmlrpc_client::send() inside which creator is called...
|
1982 |
-
*/
|
1983 |
-
function __construct($val, $fcode = 0, $fstr = '', $valtyp='')
|
1984 |
-
{
|
1985 |
-
if($fcode != 0)
|
1986 |
-
{
|
1987 |
-
// error response
|
1988 |
-
$this->errno = $fcode;
|
1989 |
-
$this->errstr = $fstr;
|
1990 |
-
//$this->errstr = htmlspecialchars($fstr); // XXX: encoding probably shouldn't be done here; fix later.
|
1991 |
-
}
|
1992 |
-
else
|
1993 |
-
{
|
1994 |
-
// successful response
|
1995 |
-
$this->val = $val;
|
1996 |
-
if ($valtyp == '')
|
1997 |
-
{
|
1998 |
-
// user did not declare type of response value: try to guess it
|
1999 |
-
if (is_object($this->val) && is_a($this->val, 'xmlrpcval'))
|
2000 |
-
{
|
2001 |
-
$this->valtyp = 'xmlrpcvals';
|
2002 |
-
}
|
2003 |
-
else if (is_string($this->val))
|
2004 |
-
{
|
2005 |
-
$this->valtyp = 'xml';
|
2006 |
-
|
2007 |
-
}
|
2008 |
-
else
|
2009 |
-
{
|
2010 |
-
$this->valtyp = 'phpvals';
|
2011 |
-
}
|
2012 |
-
}
|
2013 |
-
else
|
2014 |
-
{
|
2015 |
-
// user declares type of resp value: believe him
|
2016 |
-
$this->valtyp = $valtyp;
|
2017 |
-
}
|
2018 |
-
}
|
2019 |
-
}
|
2020 |
-
|
2021 |
-
/**
|
2022 |
-
* Returns the error code of the response.
|
2023 |
-
* @return integer the error code of this response (0 for not-error responses)
|
2024 |
-
* @access public
|
2025 |
-
*/
|
2026 |
-
function faultCode()
|
2027 |
-
{
|
2028 |
-
return $this->errno;
|
2029 |
-
}
|
2030 |
-
|
2031 |
-
/**
|
2032 |
-
* Returns the error code of the response.
|
2033 |
-
* @return string the error string of this response ('' for not-error responses)
|
2034 |
-
* @access public
|
2035 |
-
*/
|
2036 |
-
function faultString()
|
2037 |
-
{
|
2038 |
-
return $this->errstr;
|
2039 |
-
}
|
2040 |
-
|
2041 |
-
/**
|
2042 |
-
* Returns the value received by the server.
|
2043 |
-
* @return mixed the xmlrpcval object returned by the server. Might be an xml string or php value if the response has been created by specially configured xmlrpc_client objects
|
2044 |
-
* @access public
|
2045 |
-
*/
|
2046 |
-
function value()
|
2047 |
-
{
|
2048 |
-
return $this->val;
|
2049 |
-
}
|
2050 |
-
|
2051 |
-
/**
|
2052 |
-
* Returns an array with the cookies received from the server.
|
2053 |
-
* Array has the form: $cookiename => array ('value' => $val, $attr1 => $val1, $attr2 = $val2, ...)
|
2054 |
-
* with attributes being e.g. 'expires', 'path', domain'.
|
2055 |
-
* NB: cookies sent as 'expired' by the server (i.e. with an expiry date in the past)
|
2056 |
-
* are still present in the array. It is up to the user-defined code to decide
|
2057 |
-
* how to use the received cookies, and whether they have to be sent back with the next
|
2058 |
-
* request to the server (using xmlrpc_client::setCookie) or not
|
2059 |
-
* @return array array of cookies received from the server
|
2060 |
-
* @access public
|
2061 |
-
*/
|
2062 |
-
function cookies()
|
2063 |
-
{
|
2064 |
-
return $this->_cookies;
|
2065 |
-
}
|
2066 |
-
|
2067 |
-
/**
|
2068 |
-
* Returns xml representation of the response. XML prologue not included
|
2069 |
-
* @param string $charset_encoding the charset to be used for serialization. if null, US-ASCII is assumed
|
2070 |
-
* @return string the xml representation of the response
|
2071 |
-
* @access public
|
2072 |
-
*/
|
2073 |
-
function serialize($charset_encoding='')
|
2074 |
-
{
|
2075 |
-
if ($charset_encoding != '')
|
2076 |
-
$this->content_type = 'text/xml; charset=' . $charset_encoding;
|
2077 |
-
else
|
2078 |
-
$this->content_type = 'text/xml';
|
2079 |
-
if ($GLOBALS['xmlrpc_null_apache_encoding'])
|
2080 |
-
{
|
2081 |
-
$result = "<methodResponse xmlns:ex=\"".$GLOBALS['xmlrpc_null_apache_encoding_ns']."\">\n";
|
2082 |
-
}
|
2083 |
-
else
|
2084 |
-
{
|
2085 |
-
$result = "<methodResponse>\n";
|
2086 |
-
}
|
2087 |
-
if($this->errno)
|
2088 |
-
{
|
2089 |
-
// G. Giunta 2005/2/13: let non-ASCII response messages be tolerated by clients
|
2090 |
-
// by xml-encoding non ascii chars
|
2091 |
-
$result .= "<fault>\n" .
|
2092 |
-
"<value>\n<struct><member><name>faultCode</name>\n<value><int>" . $this->errno .
|
2093 |
-
"</int></value>\n</member>\n<member>\n<name>faultString</name>\n<value><string>" .
|
2094 |
-
xmlrpc_encode_entitites($this->errstr, $GLOBALS['xmlrpc_internalencoding'], $charset_encoding) . "</string></value>\n</member>\n" .
|
2095 |
-
"</struct>\n</value>\n</fault>";
|
2096 |
-
}
|
2097 |
-
else
|
2098 |
-
{
|
2099 |
-
if(!is_object($this->val) || !is_a($this->val, 'xmlrpcval'))
|
2100 |
-
{
|
2101 |
-
if (is_string($this->val) && $this->valtyp == 'xml')
|
2102 |
-
{
|
2103 |
-
$result .= "<params>\n<param>\n" .
|
2104 |
-
$this->val .
|
2105 |
-
"</param>\n</params>";
|
2106 |
-
}
|
2107 |
-
else
|
2108 |
-
{
|
2109 |
-
/// @todo try to build something serializable?
|
2110 |
-
die('cannot serialize xmlrpcresp objects whose content is native php values');
|
2111 |
-
}
|
2112 |
-
}
|
2113 |
-
else
|
2114 |
-
{
|
2115 |
-
$result .= "<params>\n<param>\n" .
|
2116 |
-
$this->val->serialize($charset_encoding) .
|
2117 |
-
"</param>\n</params>";
|
2118 |
-
}
|
2119 |
-
}
|
2120 |
-
$result .= "\n</methodResponse>";
|
2121 |
-
$this->payload = $result;
|
2122 |
-
return $result;
|
2123 |
-
}
|
2124 |
-
}
|
2125 |
-
|
2126 |
-
class xmlrpcmsg
|
2127 |
-
{
|
2128 |
-
var $payload;
|
2129 |
-
var $methodname;
|
2130 |
-
var $params=array();
|
2131 |
-
var $debug=0;
|
2132 |
-
var $content_type = 'text/xml';
|
2133 |
-
|
2134 |
-
/**
|
2135 |
-
* @param string $meth the name of the method to invoke
|
2136 |
-
* @param array $pars array of parameters to be passed to the method (xmlrpcval objects)
|
2137 |
-
*/
|
2138 |
-
function __construct($meth, $pars=0)
|
2139 |
-
{
|
2140 |
-
$this->methodname=$meth;
|
2141 |
-
if(is_array($pars) && count($pars)>0)
|
2142 |
-
{
|
2143 |
-
for($i=0; $i<count($pars); $i++)
|
2144 |
-
{
|
2145 |
-
$this->addParam($pars[$i]);
|
2146 |
-
}
|
2147 |
-
}
|
2148 |
-
}
|
2149 |
-
|
2150 |
-
/**
|
2151 |
-
* @access private
|
2152 |
-
*/
|
2153 |
-
function xml_header($charset_encoding='')
|
2154 |
-
{
|
2155 |
-
if ($charset_encoding != '')
|
2156 |
-
{
|
2157 |
-
return "<?xml version=\"1.0\" encoding=\"$charset_encoding\" ?" . ">\n<methodCall>\n";
|
2158 |
-
}
|
2159 |
-
else
|
2160 |
-
{
|
2161 |
-
return "<?xml version=\"1.0\"?" . ">\n<methodCall>\n";
|
2162 |
-
}
|
2163 |
-
}
|
2164 |
-
|
2165 |
-
/**
|
2166 |
-
* @access private
|
2167 |
-
*/
|
2168 |
-
function xml_footer()
|
2169 |
-
{
|
2170 |
-
return '</methodCall>';
|
2171 |
-
}
|
2172 |
-
|
2173 |
-
/**
|
2174 |
-
* @access private
|
2175 |
-
*/
|
2176 |
-
function kindOf()
|
2177 |
-
{
|
2178 |
-
return 'msg';
|
2179 |
-
}
|
2180 |
-
|
2181 |
-
/**
|
2182 |
-
* @access private
|
2183 |
-
*/
|
2184 |
-
function createPayload($charset_encoding='')
|
2185 |
-
{
|
2186 |
-
if ($charset_encoding != '')
|
2187 |
-
$this->content_type = 'text/xml; charset=' . $charset_encoding;
|
2188 |
-
else
|
2189 |
-
$this->content_type = 'text/xml';
|
2190 |
-
$this->payload=$this->xml_header($charset_encoding);
|
2191 |
-
$this->payload.='<methodName>' . $this->methodname . "</methodName>\n";
|
2192 |
-
$this->payload.="<params>\n";
|
2193 |
-
for($i=0; $i<count($this->params); $i++)
|
2194 |
-
{
|
2195 |
-
$p=$this->params[$i];
|
2196 |
-
$this->payload.="<param>\n" . $p->serialize($charset_encoding) .
|
2197 |
-
"</param>\n";
|
2198 |
-
}
|
2199 |
-
$this->payload.="</params>\n";
|
2200 |
-
$this->payload.=$this->xml_footer();
|
2201 |
-
}
|
2202 |
-
|
2203 |
-
/**
|
2204 |
-
* Gets/sets the xmlrpc method to be invoked
|
2205 |
-
* @param string $meth the method to be set (leave empty not to set it)
|
2206 |
-
* @return string the method that will be invoked
|
2207 |
-
* @access public
|
2208 |
-
*/
|
2209 |
-
function method($meth='')
|
2210 |
-
{
|
2211 |
-
if($meth!='')
|
2212 |
-
{
|
2213 |
-
$this->methodname=$meth;
|
2214 |
-
}
|
2215 |
-
return $this->methodname;
|
2216 |
-
}
|
2217 |
-
|
2218 |
-
/**
|
2219 |
-
* Returns xml representation of the message. XML prologue included
|
2220 |
-
* @param string $charset_encoding
|
2221 |
-
* @return string the xml representation of the message, xml prologue included
|
2222 |
-
* @access public
|
2223 |
-
*/
|
2224 |
-
function serialize($charset_encoding='')
|
2225 |
-
{
|
2226 |
-
$this->createPayload($charset_encoding);
|
2227 |
-
return $this->payload;
|
2228 |
-
}
|
2229 |
-
|
2230 |
-
/**
|
2231 |
-
* Add a parameter to the list of parameters to be used upon method invocation
|
2232 |
-
* @param xmlrpcval $par
|
2233 |
-
* @return boolean false on failure
|
2234 |
-
* @access public
|
2235 |
-
*/
|
2236 |
-
function addParam($par)
|
2237 |
-
{
|
2238 |
-
// add check: do not add to self params which are not xmlrpcvals
|
2239 |
-
if(is_object($par) && is_a($par, 'xmlrpcval'))
|
2240 |
-
{
|
2241 |
-
$this->params[]=$par;
|
2242 |
-
return true;
|
2243 |
-
}
|
2244 |
-
else
|
2245 |
-
{
|
2246 |
-
return false;
|
2247 |
-
}
|
2248 |
-
}
|
2249 |
-
|
2250 |
-
/**
|
2251 |
-
* Returns the nth parameter in the message. The index zero-based.
|
2252 |
-
* @param integer $i the index of the parameter to fetch (zero based)
|
2253 |
-
* @return xmlrpcval the i-th parameter
|
2254 |
-
* @access public
|
2255 |
-
*/
|
2256 |
-
function getParam($i) { return $this->params[$i]; }
|
2257 |
-
|
2258 |
-
/**
|
2259 |
-
* Returns the number of parameters in the messge.
|
2260 |
-
* @return integer the number of parameters currently set
|
2261 |
-
* @access public
|
2262 |
-
*/
|
2263 |
-
function getNumParams() { return count($this->params); }
|
2264 |
-
|
2265 |
-
/**
|
2266 |
-
* Given an open file handle, read all data available and parse it as axmlrpc response.
|
2267 |
-
* NB: the file handle is not closed by this function.
|
2268 |
-
* NNB: might have trouble in rare cases to work on network streams, as we
|
2269 |
-
* check for a read of 0 bytes instead of feof($fp).
|
2270 |
-
* But since checking for feof(null) returns false, we would risk an
|
2271 |
-
* infinite loop in that case, because we cannot trust the caller
|
2272 |
-
* to give us a valid pointer to an open file...
|
2273 |
-
* @access public
|
2274 |
-
* @param resource $fp stream pointer
|
2275 |
-
* @return xmlrpcresp
|
2276 |
-
* @todo add 2nd & 3rd param to be passed to ParseResponse() ???
|
2277 |
-
*/
|
2278 |
-
function &parseResponseFile($fp)
|
2279 |
-
{
|
2280 |
-
$ipd='';
|
2281 |
-
while($data=fread($fp, 32768))
|
2282 |
-
{
|
2283 |
-
$ipd.=$data;
|
2284 |
-
}
|
2285 |
-
//fclose($fp);
|
2286 |
-
$r =& $this->parseResponse($ipd);
|
2287 |
-
return $r;
|
2288 |
-
}
|
2289 |
-
|
2290 |
-
/**
|
2291 |
-
* Parses HTTP headers and separates them from data.
|
2292 |
-
* @access private
|
2293 |
-
*/
|
2294 |
-
function &parseResponseHeaders(&$data, $headers_processed=false)
|
2295 |
-
{
|
2296 |
-
// Support "web-proxy-tunelling" connections for https through proxies
|
2297 |
-
if(preg_match('/^HTTP\/1\.[0-1] 200 Connection established/', $data))
|
2298 |
-
{
|
2299 |
-
// Look for CR/LF or simple LF as line separator,
|
2300 |
-
// (even though it is not valid http)
|
2301 |
-
$pos = strpos($data,"\r\n\r\n");
|
2302 |
-
if($pos || is_int($pos))
|
2303 |
-
{
|
2304 |
-
$bd = $pos+4;
|
2305 |
-
}
|
2306 |
-
else
|
2307 |
-
{
|
2308 |
-
$pos = strpos($data,"\n\n");
|
2309 |
-
if($pos || is_int($pos))
|
2310 |
-
{
|
2311 |
-
$bd = $pos+2;
|
2312 |
-
}
|
2313 |
-
else
|
2314 |
-
{
|
2315 |
-
// No separation between response headers and body: fault?
|
2316 |
-
$bd = 0;
|
2317 |
-
}
|
2318 |
-
}
|
2319 |
-
if ($bd)
|
2320 |
-
{
|
2321 |
-
// this filters out all http headers from proxy.
|
2322 |
-
// maybe we could take them into account, too?
|
2323 |
-
$data = substr($data, $bd);
|
2324 |
-
}
|
2325 |
-
else
|
2326 |
-
{
|
2327 |
-
error_log('XML-RPC: '.__METHOD__.': HTTPS via proxy error, tunnel connection possibly failed');
|
2328 |
-
$r=new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['http_error'], $GLOBALS['xmlrpcstr']['http_error']. ' (HTTPS via proxy error, tunnel connection possibly failed)');
|
2329 |
-
return $r;
|
2330 |
-
}
|
2331 |
-
}
|
2332 |
-
|
2333 |
-
// Strip HTTP 1.1 100 Continue header if present
|
2334 |
-
while(preg_match('/^HTTP\/1\.1 1[0-9]{2} /', $data))
|
2335 |
-
{
|
2336 |
-
$pos = strpos($data, 'HTTP', 12);
|
2337 |
-
// server sent a Continue header without any (valid) content following...
|
2338 |
-
// give the client a chance to know it
|
2339 |
-
if(!$pos && !is_int($pos)) // works fine in php 3, 4 and 5
|
2340 |
-
{
|
2341 |
-
break;
|
2342 |
-
}
|
2343 |
-
$data = substr($data, $pos);
|
2344 |
-
}
|
2345 |
-
if(!preg_match('/^HTTP\/[0-9.]+ 200 /', $data))
|
2346 |
-
{
|
2347 |
-
$errstr= substr($data, 0, strpos($data, "\n")-1);
|
2348 |
-
error_log('XML-RPC: '.__METHOD__.': HTTP error, got response: ' .$errstr);
|
2349 |
-
$r=new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['http_error'], $GLOBALS['xmlrpcstr']['http_error']. ' (' . $errstr . ')');
|
2350 |
-
return $r;
|
2351 |
-
}
|
2352 |
-
|
2353 |
-
$GLOBALS['_xh']['headers'] = array();
|
2354 |
-
$GLOBALS['_xh']['cookies'] = array();
|
2355 |
-
|
2356 |
-
// be tolerant to usage of \n instead of \r\n to separate headers and data
|
2357 |
-
// (even though it is not valid http)
|
2358 |
-
$pos = strpos($data,"\r\n\r\n");
|
2359 |
-
if($pos || is_int($pos))
|
2360 |
-
{
|
2361 |
-
$bd = $pos+4;
|
2362 |
-
}
|
2363 |
-
else
|
2364 |
-
{
|
2365 |
-
$pos = strpos($data,"\n\n");
|
2366 |
-
if($pos || is_int($pos))
|
2367 |
-
{
|
2368 |
-
$bd = $pos+2;
|
2369 |
-
}
|
2370 |
-
else
|
2371 |
-
{
|
2372 |
-
// No separation between response headers and body: fault?
|
2373 |
-
// we could take some action here instead of going on...
|
2374 |
-
$bd = 0;
|
2375 |
-
}
|
2376 |
-
}
|
2377 |
-
// be tolerant to line endings, and extra empty lines
|
2378 |
-
$ar = preg_split("/\r?\n/", trim(substr($data, 0, $pos)));
|
2379 |
-
while(list(,$line) = @each($ar))
|
2380 |
-
{
|
2381 |
-
// take care of multi-line headers and cookies
|
2382 |
-
$arr = explode(':',$line,2);
|
2383 |
-
if(count($arr) > 1)
|
2384 |
-
{
|
2385 |
-
$header_name = strtolower(trim($arr[0]));
|
2386 |
-
/// @todo some other headers (the ones that allow a CSV list of values)
|
2387 |
-
/// do allow many values to be passed using multiple header lines.
|
2388 |
-
/// We should add content to $GLOBALS['_xh']['headers'][$header_name]
|
2389 |
-
/// instead of replacing it for those...
|
2390 |
-
if ($header_name == 'set-cookie' || $header_name == 'set-cookie2')
|
2391 |
-
{
|
2392 |
-
if ($header_name == 'set-cookie2')
|
2393 |
-
{
|
2394 |
-
// version 2 cookies:
|
2395 |
-
// there could be many cookies on one line, comma separated
|
2396 |
-
$cookies = explode(',', $arr[1]);
|
2397 |
-
}
|
2398 |
-
else
|
2399 |
-
{
|
2400 |
-
$cookies = array($arr[1]);
|
2401 |
-
}
|
2402 |
-
foreach ($cookies as $cookie)
|
2403 |
-
{
|
2404 |
-
// glue together all received cookies, using a comma to separate them
|
2405 |
-
// (same as php does with getallheaders())
|
2406 |
-
if (isset($GLOBALS['_xh']['headers'][$header_name]))
|
2407 |
-
$GLOBALS['_xh']['headers'][$header_name] .= ', ' . trim($cookie);
|
2408 |
-
else
|
2409 |
-
$GLOBALS['_xh']['headers'][$header_name] = trim($cookie);
|
2410 |
-
// parse cookie attributes, in case user wants to correctly honour them
|
2411 |
-
// feature creep: only allow rfc-compliant cookie attributes?
|
2412 |
-
// @todo support for server sending multiple time cookie with same name, but using different PATHs
|
2413 |
-
$cookie = explode(';', $cookie);
|
2414 |
-
foreach ($cookie as $pos => $val)
|
2415 |
-
{
|
2416 |
-
$val = explode('=', $val, 2);
|
2417 |
-
$tag = trim($val[0]);
|
2418 |
-
$val = trim(@$val[1]);
|
2419 |
-
/// @todo with version 1 cookies, we should strip leading and trailing " chars
|
2420 |
-
if ($pos == 0)
|
2421 |
-
{
|
2422 |
-
$cookiename = $tag;
|
2423 |
-
$GLOBALS['_xh']['cookies'][$tag] = array();
|
2424 |
-
$GLOBALS['_xh']['cookies'][$cookiename]['value'] = urldecode($val);
|
2425 |
-
}
|
2426 |
-
else
|
2427 |
-
{
|
2428 |
-
if ($tag != 'value')
|
2429 |
-
{
|
2430 |
-
$GLOBALS['_xh']['cookies'][$cookiename][$tag] = $val;
|
2431 |
-
}
|
2432 |
-
}
|
2433 |
-
}
|
2434 |
-
}
|
2435 |
-
}
|
2436 |
-
else
|
2437 |
-
{
|
2438 |
-
$GLOBALS['_xh']['headers'][$header_name] = trim($arr[1]);
|
2439 |
-
}
|
2440 |
-
}
|
2441 |
-
elseif(isset($header_name))
|
2442 |
-
{
|
2443 |
-
/// @todo version1 cookies might span multiple lines, thus breaking the parsing above
|
2444 |
-
$GLOBALS['_xh']['headers'][$header_name] .= ' ' . trim($line);
|
2445 |
-
}
|
2446 |
-
}
|
2447 |
-
|
2448 |
-
$data = substr($data, $bd);
|
2449 |
-
|
2450 |
-
if($this->debug && count($GLOBALS['_xh']['headers']))
|
2451 |
-
{
|
2452 |
-
print '<PRE>';
|
2453 |
-
foreach($GLOBALS['_xh']['headers'] as $header => $value)
|
2454 |
-
{
|
2455 |
-
print htmlentities("HEADER: $header: $value\n");
|
2456 |
-
}
|
2457 |
-
foreach($GLOBALS['_xh']['cookies'] as $header => $value)
|
2458 |
-
{
|
2459 |
-
print htmlentities("COOKIE: $header={$value['value']}\n");
|
2460 |
-
}
|
2461 |
-
print "</PRE>\n";
|
2462 |
-
}
|
2463 |
-
|
2464 |
-
// if CURL was used for the call, http headers have been processed,
|
2465 |
-
// and dechunking + reinflating have been carried out
|
2466 |
-
if(!$headers_processed)
|
2467 |
-
{
|
2468 |
-
// Decode chunked encoding sent by http 1.1 servers
|
2469 |
-
if(isset($GLOBALS['_xh']['headers']['transfer-encoding']) && $GLOBALS['_xh']['headers']['transfer-encoding'] == 'chunked')
|
2470 |
-
{
|
2471 |
-
if(!$data = decode_chunked($data))
|
2472 |
-
{
|
2473 |
-
error_log('XML-RPC: '.__METHOD__.': errors occurred when trying to rebuild the chunked data received from server');
|
2474 |
-
$r = new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['dechunk_fail'], $GLOBALS['xmlrpcstr']['dechunk_fail']);
|
2475 |
-
return $r;
|
2476 |
-
}
|
2477 |
-
}
|
2478 |
-
|
2479 |
-
// Decode gzip-compressed stuff
|
2480 |
-
// code shamelessly inspired from nusoap library by Dietrich Ayala
|
2481 |
-
if(isset($GLOBALS['_xh']['headers']['content-encoding']))
|
2482 |
-
{
|
2483 |
-
$GLOBALS['_xh']['headers']['content-encoding'] = str_replace('x-', '', $GLOBALS['_xh']['headers']['content-encoding']);
|
2484 |
-
if($GLOBALS['_xh']['headers']['content-encoding'] == 'deflate' || $GLOBALS['_xh']['headers']['content-encoding'] == 'gzip')
|
2485 |
-
{
|
2486 |
-
// if decoding works, use it. else assume data wasn't gzencoded
|
2487 |
-
if(function_exists('gzinflate'))
|
2488 |
-
{
|
2489 |
-
if($GLOBALS['_xh']['headers']['content-encoding'] == 'deflate' && $degzdata = @gzuncompress($data))
|
2490 |
-
{
|
2491 |
-
$data = $degzdata;
|
2492 |
-
if($this->debug)
|
2493 |
-
print "<PRE>---INFLATED RESPONSE---[".strlen($data)." chars]---\n" . htmlentities($data) . "\n---END---</PRE>";
|
2494 |
-
}
|
2495 |
-
elseif($GLOBALS['_xh']['headers']['content-encoding'] == 'gzip' && $degzdata = @gzinflate(substr($data, 10)))
|
2496 |
-
{
|
2497 |
-
$data = $degzdata;
|
2498 |
-
if($this->debug)
|
2499 |
-
print "<PRE>---INFLATED RESPONSE---[".strlen($data)." chars]---\n" . htmlentities($data) . "\n---END---</PRE>";
|
2500 |
-
}
|
2501 |
-
else
|
2502 |
-
{
|
2503 |
-
error_log('XML-RPC: '.__METHOD__.': errors occurred when trying to decode the deflated data received from server');
|
2504 |
-
$r = new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['decompress_fail'], $GLOBALS['xmlrpcstr']['decompress_fail']);
|
2505 |
-
return $r;
|
2506 |
-
}
|
2507 |
-
}
|
2508 |
-
else
|
2509 |
-
{
|
2510 |
-
error_log('XML-RPC: '.__METHOD__.': the server sent deflated data. Your php install must have the Zlib extension compiled in to support this.');
|
2511 |
-
$r = new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['cannot_decompress'], $GLOBALS['xmlrpcstr']['cannot_decompress']);
|
2512 |
-
return $r;
|
2513 |
-
}
|
2514 |
-
}
|
2515 |
-
}
|
2516 |
-
} // end of 'if needed, de-chunk, re-inflate response'
|
2517 |
-
|
2518 |
-
// real stupid hack to avoid PHP complaining about returning NULL by ref
|
2519 |
-
$r = null;
|
2520 |
-
$r =& $r;
|
2521 |
-
return $r;
|
2522 |
-
}
|
2523 |
-
|
2524 |
-
/**
|
2525 |
-
* Parse the xmlrpc response contained in the string $data and return an xmlrpcresp object.
|
2526 |
-
* @param string $data the xmlrpc response, eventually including http headers
|
2527 |
-
* @param bool $headers_processed when true prevents parsing HTTP headers for interpretation of content-encoding and consequent decoding
|
2528 |
-
* @param string $return_type decides return type, i.e. content of response->value(). Either 'xmlrpcvals', 'xml' or 'phpvals'
|
2529 |
-
* @return xmlrpcresp
|
2530 |
-
* @access public
|
2531 |
-
*/
|
2532 |
-
function &parseResponse($data='', $headers_processed=false, $return_type='xmlrpcvals')
|
2533 |
-
{
|
2534 |
-
if($this->debug)
|
2535 |
-
{
|
2536 |
-
//by maHo, replaced htmlspecialchars with htmlentities
|
2537 |
-
print "<PRE>---GOT---\n" . htmlentities($data) . "\n---END---\n</PRE>";
|
2538 |
-
}
|
2539 |
-
|
2540 |
-
if($data == '')
|
2541 |
-
{
|
2542 |
-
error_log('XML-RPC: '.__METHOD__.': no response received from server.');
|
2543 |
-
$r = new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['no_data'], $GLOBALS['xmlrpcstr']['no_data']);
|
2544 |
-
return $r;
|
2545 |
-
}
|
2546 |
-
|
2547 |
-
$GLOBALS['_xh']=array();
|
2548 |
-
|
2549 |
-
$raw_data = $data;
|
2550 |
-
// parse the HTTP headers of the response, if present, and separate them from data
|
2551 |
-
if(substr($data, 0, 4) == 'HTTP')
|
2552 |
-
{
|
2553 |
-
$r =& $this->parseResponseHeaders($data, $headers_processed);
|
2554 |
-
if ($r)
|
2555 |
-
{
|
2556 |
-
// failed processing of HTTP response headers
|
2557 |
-
// save into response obj the full payload received, for debugging
|
2558 |
-
$r->raw_data = $data;
|
2559 |
-
return $r;
|
2560 |
-
}
|
2561 |
-
}
|
2562 |
-
else
|
2563 |
-
{
|
2564 |
-
$GLOBALS['_xh']['headers'] = array();
|
2565 |
-
$GLOBALS['_xh']['cookies'] = array();
|
2566 |
-
}
|
2567 |
-
|
2568 |
-
if($this->debug)
|
2569 |
-
{
|
2570 |
-
$start = strpos($data, '<!-- SERVER DEBUG INFO (BASE64 ENCODED):');
|
2571 |
-
if ($start)
|
2572 |
-
{
|
2573 |
-
$start += strlen('<!-- SERVER DEBUG INFO (BASE64 ENCODED):');
|
2574 |
-
$end = strpos($data, '-->', $start);
|
2575 |
-
$comments = substr($data, $start, $end-$start);
|
2576 |
-
print "<PRE>---SERVER DEBUG INFO (DECODED) ---\n\t".htmlentities(str_replace("\n", "\n\t", base64_decode($comments)))."\n---END---\n</PRE>";
|
2577 |
-
}
|
2578 |
-
}
|
2579 |
-
|
2580 |
-
// be tolerant of extra whitespace in response body
|
2581 |
-
$data = trim($data);
|
2582 |
-
|
2583 |
-
/// @todo return an error msg if $data=='' ?
|
2584 |
-
|
2585 |
-
// be tolerant of junk after methodResponse (e.g. javascript ads automatically inserted by free hosts)
|
2586 |
-
// idea from Luca Mariano <luca.mariano@email.it> originally in PEARified version of the lib
|
2587 |
-
$pos = strrpos($data, '</methodResponse>');
|
2588 |
-
if($pos !== false)
|
2589 |
-
{
|
2590 |
-
$data = substr($data, 0, $pos+17);
|
2591 |
-
}
|
2592 |
-
|
2593 |
-
// if user wants back raw xml, give it to him
|
2594 |
-
if ($return_type == 'xml')
|
2595 |
-
{
|
2596 |
-
$r = new xmlrpcresp($data, 0, '', 'xml');
|
2597 |
-
$r->hdrs = $GLOBALS['_xh']['headers'];
|
2598 |
-
$r->_cookies = $GLOBALS['_xh']['cookies'];
|
2599 |
-
$r->raw_data = $raw_data;
|
2600 |
-
return $r;
|
2601 |
-
}
|
2602 |
-
|
2603 |
-
// try to 'guestimate' the character encoding of the received response
|
2604 |
-
$resp_encoding = guess_encoding(@$GLOBALS['_xh']['headers']['content-type'], $data);
|
2605 |
-
|
2606 |
-
$GLOBALS['_xh']['ac']='';
|
2607 |
-
//$GLOBALS['_xh']['qt']=''; //unused...
|
2608 |
-
$GLOBALS['_xh']['stack'] = array();
|
2609 |
-
$GLOBALS['_xh']['valuestack'] = array();
|
2610 |
-
$GLOBALS['_xh']['isf']=0; // 0 = OK, 1 for xmlrpc fault responses, 2 = invalid xmlrpc
|
2611 |
-
$GLOBALS['_xh']['isf_reason']='';
|
2612 |
-
$GLOBALS['_xh']['rt']=''; // 'methodcall or 'methodresponse'
|
2613 |
-
|
2614 |
-
// if response charset encoding is not known / supported, try to use
|
2615 |
-
// the default encoding and parse the xml anyway, but log a warning...
|
2616 |
-
if (!in_array($resp_encoding, array('UTF-8', 'ISO-8859-1', 'US-ASCII')))
|
2617 |
-
// the following code might be better for mb_string enabled installs, but
|
2618 |
-
// makes the lib about 200% slower...
|
2619 |
-
//if (!is_valid_charset($resp_encoding, array('UTF-8', 'ISO-8859-1', 'US-ASCII')))
|
2620 |
-
{
|
2621 |
-
error_log('XML-RPC: '.__METHOD__.': invalid charset encoding of received response: '.$resp_encoding);
|
2622 |
-
$resp_encoding = $GLOBALS['xmlrpc_defencoding'];
|
2623 |
-
}
|
2624 |
-
$parser = xml_parser_create($resp_encoding);
|
2625 |
-
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, true);
|
2626 |
-
// G. Giunta 2005/02/13: PHP internally uses ISO-8859-1, so we have to tell
|
2627 |
-
// the xml parser to give us back data in the expected charset.
|
2628 |
-
// What if internal encoding is not in one of the 3 allowed?
|
2629 |
-
// we use the broadest one, ie. utf8
|
2630 |
-
// This allows to send data which is native in various charset,
|
2631 |
-
// by extending xmlrpc_encode_entitites() and setting xmlrpc_internalencoding
|
2632 |
-
if (!in_array($GLOBALS['xmlrpc_internalencoding'], array('UTF-8', 'ISO-8859-1', 'US-ASCII')))
|
2633 |
-
{
|
2634 |
-
xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, 'UTF-8');
|
2635 |
-
}
|
2636 |
-
else
|
2637 |
-
{
|
2638 |
-
xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, $GLOBALS['xmlrpc_internalencoding']);
|
2639 |
-
}
|
2640 |
-
|
2641 |
-
if ($return_type == 'phpvals')
|
2642 |
-
{
|
2643 |
-
xml_set_element_handler($parser, 'xmlrpc_se', 'xmlrpc_ee_fast');
|
2644 |
-
}
|
2645 |
-
else
|
2646 |
-
{
|
2647 |
-
xml_set_element_handler($parser, 'xmlrpc_se', 'xmlrpc_ee');
|
2648 |
-
}
|
2649 |
-
|
2650 |
-
xml_set_character_data_handler($parser, 'xmlrpc_cd');
|
2651 |
-
xml_set_default_handler($parser, 'xmlrpc_dh');
|
2652 |
-
|
2653 |
-
// **BEGIN JORDAN NOVAK EDIT**
|
2654 |
-
// Sometimes customer data has these random characters in it, and it breaks the XML parsing
|
2655 |
-
// $test = preg_match('/\&#[0-9]{1,3}/', $data, $matches);
|
2656 |
-
$data = preg_replace(array('/\&#[0-9]{1,4}(?![0-9]{0,3};)/'),'', $data);
|
2657 |
-
$data = str_replace(array("", "�", "", "", "", "", ""), "", $data);
|
2658 |
-
// **END JORDAN NOVAK EDIT**
|
2659 |
-
|
2660 |
-
|
2661 |
-
// first error check: xml not well formed
|
2662 |
-
if(!xml_parse($parser, $data, count($data)))
|
2663 |
-
{
|
2664 |
-
try{
|
2665 |
-
$bad_return = fopen("bad_return.xml.php", "w");
|
2666 |
-
fwrite($bad_return, $data);
|
2667 |
-
fclose($bad_return);
|
2668 |
-
} catch(Exception $e){}
|
2669 |
-
// thanks to Peter Kocks <peter.kocks@baygate.com>
|
2670 |
-
// if((xml_get_current_line_number($parser)) == 1)
|
2671 |
-
// {
|
2672 |
-
// $errstr = 'XML error at line 1, check URL';
|
2673 |
-
// }
|
2674 |
-
// else
|
2675 |
-
// {
|
2676 |
-
$errstr = sprintf('XML error: %s at line %d, column %d, byte %d, text in context: %s',
|
2677 |
-
xml_error_string(xml_get_error_code($parser)),
|
2678 |
-
xml_get_current_line_number($parser), xml_get_current_column_number($parser), xml_get_current_byte_index($parser),
|
2679 |
-
substr($data, (xml_get_current_byte_index($parser) - 100), 200)
|
2680 |
-
);
|
2681 |
-
// }
|
2682 |
-
error_log($errstr);
|
2683 |
-
$r=new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['invalid_return'], $GLOBALS['xmlrpcstr']['invalid_return'].' ('.$errstr.')');
|
2684 |
-
xml_parser_free($parser);
|
2685 |
-
if($this->debug)
|
2686 |
-
{
|
2687 |
-
print $errstr;
|
2688 |
-
}
|
2689 |
-
$r->hdrs = $GLOBALS['_xh']['headers'];
|
2690 |
-
$r->_cookies = $GLOBALS['_xh']['cookies'];
|
2691 |
-
$r->raw_data = $raw_data;
|
2692 |
-
return $r;
|
2693 |
-
}
|
2694 |
-
xml_parser_free($parser);
|
2695 |
-
// second error check: xml well formed but not xml-rpc compliant
|
2696 |
-
if ($GLOBALS['_xh']['isf'] > 1)
|
2697 |
-
{
|
2698 |
-
if ($this->debug)
|
2699 |
-
{
|
2700 |
-
/// @todo echo something for user?
|
2701 |
-
}
|
2702 |
-
|
2703 |
-
$r = new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['invalid_return'],
|
2704 |
-
$GLOBALS['xmlrpcstr']['invalid_return'] . ' ' . $GLOBALS['_xh']['isf_reason']);
|
2705 |
-
}
|
2706 |
-
// third error check: parsing of the response has somehow gone boink.
|
2707 |
-
// NB: shall we omit this check, since we trust the parsing code?
|
2708 |
-
elseif ($return_type == 'xmlrpcvals' && !is_object($GLOBALS['_xh']['value']))
|
2709 |
-
{
|
2710 |
-
// something odd has happened
|
2711 |
-
// and it's time to generate a client side error
|
2712 |
-
// indicating something odd went on
|
2713 |
-
$r=new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['invalid_return'],
|
2714 |
-
$GLOBALS['xmlrpcstr']['invalid_return']);
|
2715 |
-
}
|
2716 |
-
else
|
2717 |
-
{
|
2718 |
-
if ($this->debug)
|
2719 |
-
{
|
2720 |
-
print "<PRE>---PARSED---\n";
|
2721 |
-
// somehow htmlentities chokes on var_export, and some full html string...
|
2722 |
-
//print htmlentitites(var_export($GLOBALS['_xh']['value'], true));
|
2723 |
-
print htmlspecialchars(var_export($GLOBALS['_xh']['value'], true));
|
2724 |
-
print "\n---END---</PRE>";
|
2725 |
-
}
|
2726 |
-
|
2727 |
-
// note that using =& will raise an error if $GLOBALS['_xh']['st'] does not generate an object.
|
2728 |
-
$v =& $GLOBALS['_xh']['value'];
|
2729 |
-
|
2730 |
-
if($GLOBALS['_xh']['isf'])
|
2731 |
-
{
|
2732 |
-
/// @todo we should test here if server sent an int and a string,
|
2733 |
-
/// and/or coerce them into such...
|
2734 |
-
if ($return_type == 'xmlrpcvals')
|
2735 |
-
{
|
2736 |
-
$errno_v = $v->structmem('faultCode');
|
2737 |
-
$errstr_v = $v->structmem('faultString');
|
2738 |
-
$errno = $errno_v->scalarval();
|
2739 |
-
$errstr = $errstr_v->scalarval();
|
2740 |
-
}
|
2741 |
-
else
|
2742 |
-
{
|
2743 |
-
$errno = $v['faultCode'];
|
2744 |
-
$errstr = $v['faultString'];
|
2745 |
-
}
|
2746 |
-
|
2747 |
-
if($errno == 0)
|
2748 |
-
{
|
2749 |
-
// FAULT returned, errno needs to reflect that
|
2750 |
-
$errno = -1;
|
2751 |
-
}
|
2752 |
-
|
2753 |
-
$r = new xmlrpcresp(0, $errno, $errstr);
|
2754 |
-
}
|
2755 |
-
else
|
2756 |
-
{
|
2757 |
-
$r=new xmlrpcresp($v, 0, '', $return_type);
|
2758 |
-
}
|
2759 |
-
}
|
2760 |
-
|
2761 |
-
$r->hdrs = $GLOBALS['_xh']['headers'];
|
2762 |
-
$r->_cookies = $GLOBALS['_xh']['cookies'];
|
2763 |
-
$r->raw_data = $raw_data;
|
2764 |
-
return $r;
|
2765 |
-
}
|
2766 |
-
}
|
2767 |
-
|
2768 |
-
class xmlrpcval
|
2769 |
-
{
|
2770 |
-
var $me=array();
|
2771 |
-
var $mytype=0;
|
2772 |
-
var $_php_class=null;
|
2773 |
-
|
2774 |
-
/**
|
2775 |
-
* @param mixed $val
|
2776 |
-
* @param string $type any valid xmlrpc type name (lowercase). If null, 'string' is assumed
|
2777 |
-
*/
|
2778 |
-
function __construct($val=-1, $type='')
|
2779 |
-
{
|
2780 |
-
/// @todo: optimization creep - do not call addXX, do it all inline.
|
2781 |
-
/// downside: booleans will not be coerced anymore
|
2782 |
-
if($val!==-1 || $type!='')
|
2783 |
-
{
|
2784 |
-
// optimization creep: inlined all work done by constructor
|
2785 |
-
switch($type)
|
2786 |
-
{
|
2787 |
-
case '':
|
2788 |
-
$this->mytype=1;
|
2789 |
-
$this->me['string']=$val;
|
2790 |
-
break;
|
2791 |
-
case 'i4':
|
2792 |
-
case 'int':
|
2793 |
-
case 'double':
|
2794 |
-
case 'string':
|
2795 |
-
case 'boolean':
|
2796 |
-
case 'dateTime.iso8601':
|
2797 |
-
case 'base64':
|
2798 |
-
case 'null':
|
2799 |
-
$this->mytype=1;
|
2800 |
-
$this->me[$type]=$val;
|
2801 |
-
break;
|
2802 |
-
case 'array':
|
2803 |
-
$this->mytype=2;
|
2804 |
-
$this->me['array']=$val;
|
2805 |
-
break;
|
2806 |
-
case 'struct':
|
2807 |
-
$this->mytype=3;
|
2808 |
-
$this->me['struct']=$val;
|
2809 |
-
break;
|
2810 |
-
default:
|
2811 |
-
error_log("XML-RPC: ".__METHOD__.": not a known type ($type)");
|
2812 |
-
}
|
2813 |
-
/*if($type=='')
|
2814 |
-
{
|
2815 |
-
$type='string';
|
2816 |
-
}
|
2817 |
-
if($GLOBALS['xmlrpcTypes'][$type]==1)
|
2818 |
-
{
|
2819 |
-
$this->addScalar($val,$type);
|
2820 |
-
}
|
2821 |
-
elseif($GLOBALS['xmlrpcTypes'][$type]==2)
|
2822 |
-
{
|
2823 |
-
$this->addArray($val);
|
2824 |
-
}
|
2825 |
-
elseif($GLOBALS['xmlrpcTypes'][$type]==3)
|
2826 |
-
{
|
2827 |
-
$this->addStruct($val);
|
2828 |
-
}*/
|
2829 |
-
}
|
2830 |
-
}
|
2831 |
-
|
2832 |
-
/**
|
2833 |
-
* Add a single php value to an (unitialized) xmlrpcval
|
2834 |
-
* @param mixed $val
|
2835 |
-
* @param string $type
|
2836 |
-
* @return int 1 or 0 on failure
|
2837 |
-
*/
|
2838 |
-
function addScalar($val, $type='string')
|
2839 |
-
{
|
2840 |
-
$typeof=@$GLOBALS['xmlrpcTypes'][$type];
|
2841 |
-
if($typeof!=1)
|
2842 |
-
{
|
2843 |
-
error_log("XML-RPC: ".__METHOD__.": not a scalar type ($type)");
|
2844 |
-
return 0;
|
2845 |
-
}
|
2846 |
-
|
2847 |
-
// coerce booleans into correct values
|
2848 |
-
// NB: we should either do it for datetimes, integers and doubles, too,
|
2849 |
-
// or just plain remove this check, implemented on booleans only...
|
2850 |
-
if($type==$GLOBALS['xmlrpcBoolean'])
|
2851 |
-
{
|
2852 |
-
if(strcasecmp($val,'true')==0 || $val==1 || ($val==true && strcasecmp($val,'false')))
|
2853 |
-
{
|
2854 |
-
$val=true;
|
2855 |
-
}
|
2856 |
-
else
|
2857 |
-
{
|
2858 |
-
$val=false;
|
2859 |
-
}
|
2860 |
-
}
|
2861 |
-
|
2862 |
-
switch($this->mytype)
|
2863 |
-
{
|
2864 |
-
case 1:
|
2865 |
-
error_log('XML-RPC: '.__METHOD__.': scalar xmlrpcval can have only one value');
|
2866 |
-
return 0;
|
2867 |
-
case 3:
|
2868 |
-
error_log('XML-RPC: '.__METHOD__.': cannot add anonymous scalar to struct xmlrpcval');
|
2869 |
-
return 0;
|
2870 |
-
case 2:
|
2871 |
-
// we're adding a scalar value to an array here
|
2872 |
-
//$ar=$this->me['array'];
|
2873 |
-
//$ar[]=new xmlrpcval($val, $type);
|
2874 |
-
//$this->me['array']=$ar;
|
2875 |
-
// Faster (?) avoid all the costly array-copy-by-val done here...
|
2876 |
-
$this->me['array'][]=new xmlrpcval($val, $type);
|
2877 |
-
return 1;
|
2878 |
-
default:
|
2879 |
-
// a scalar, so set the value and remember we're scalar
|
2880 |
-
$this->me[$type]=$val;
|
2881 |
-
$this->mytype=$typeof;
|
2882 |
-
return 1;
|
2883 |
-
}
|
2884 |
-
}
|
2885 |
-
|
2886 |
-
/**
|
2887 |
-
* Add an array of xmlrpcval objects to an xmlrpcval
|
2888 |
-
* @param array $vals
|
2889 |
-
* @return int 1 or 0 on failure
|
2890 |
-
* @access public
|
2891 |
-
*
|
2892 |
-
* @todo add some checking for $vals to be an array of xmlrpcvals?
|
2893 |
-
*/
|
2894 |
-
function addArray($vals)
|
2895 |
-
{
|
2896 |
-
if($this->mytype==0)
|
2897 |
-
{
|
2898 |
-
$this->mytype=$GLOBALS['xmlrpcTypes']['array'];
|
2899 |
-
$this->me['array']=$vals;
|
2900 |
-
return 1;
|
2901 |
-
}
|
2902 |
-
elseif($this->mytype==2)
|
2903 |
-
{
|
2904 |
-
// we're adding to an array here
|
2905 |
-
$this->me['array'] = array_merge($this->me['array'], $vals);
|
2906 |
-
return 1;
|
2907 |
-
}
|
2908 |
-
else
|
2909 |
-
{
|
2910 |
-
error_log('XML-RPC: '.__METHOD__.': already initialized as a [' . $this->kindOf() . ']');
|
2911 |
-
return 0;
|
2912 |
-
}
|
2913 |
-
}
|
2914 |
-
|
2915 |
-
/**
|
2916 |
-
* Add an array of named xmlrpcval objects to an xmlrpcval
|
2917 |
-
* @param array $vals
|
2918 |
-
* @return int 1 or 0 on failure
|
2919 |
-
* @access public
|
2920 |
-
*
|
2921 |
-
* @todo add some checking for $vals to be an array?
|
2922 |
-
*/
|
2923 |
-
function addStruct($vals)
|
2924 |
-
{
|
2925 |
-
if($this->mytype==0)
|
2926 |
-
{
|
2927 |
-
$this->mytype=$GLOBALS['xmlrpcTypes']['struct'];
|
2928 |
-
$this->me['struct']=$vals;
|
2929 |
-
return 1;
|
2930 |
-
}
|
2931 |
-
elseif($this->mytype==3)
|
2932 |
-
{
|
2933 |
-
// we're adding to a struct here
|
2934 |
-
$this->me['struct'] = array_merge($this->me['struct'], $vals);
|
2935 |
-
return 1;
|
2936 |
-
}
|
2937 |
-
else
|
2938 |
-
{
|
2939 |
-
error_log('XML-RPC: '.__METHOD__.': already initialized as a [' . $this->kindOf() . ']');
|
2940 |
-
return 0;
|
2941 |
-
}
|
2942 |
-
}
|
2943 |
-
|
2944 |
-
// poor man's version of print_r ???
|
2945 |
-
// DEPRECATED!
|
2946 |
-
function dump($ar)
|
2947 |
-
{
|
2948 |
-
foreach($ar as $key => $val)
|
2949 |
-
{
|
2950 |
-
echo "$key => $val<br />";
|
2951 |
-
if($key == 'array')
|
2952 |
-
{
|
2953 |
-
while(list($key2, $val2) = each($val))
|
2954 |
-
{
|
2955 |
-
echo "-- $key2 => $val2<br />";
|
2956 |
-
}
|
2957 |
-
}
|
2958 |
-
}
|
2959 |
-
}
|
2960 |
-
|
2961 |
-
/**
|
2962 |
-
* Returns a string containing "struct", "array" or "scalar" describing the base type of the value
|
2963 |
-
* @return string
|
2964 |
-
* @access public
|
2965 |
-
*/
|
2966 |
-
function kindOf()
|
2967 |
-
{
|
2968 |
-
switch($this->mytype)
|
2969 |
-
{
|
2970 |
-
case 3:
|
2971 |
-
return 'struct';
|
2972 |
-
break;
|
2973 |
-
case 2:
|
2974 |
-
return 'array';
|
2975 |
-
break;
|
2976 |
-
case 1:
|
2977 |
-
return 'scalar';
|
2978 |
-
break;
|
2979 |
-
default:
|
2980 |
-
return 'undef';
|
2981 |
-
}
|
2982 |
-
}
|
2983 |
-
|
2984 |
-
/**
|
2985 |
-
* @access private
|
2986 |
-
*/
|
2987 |
-
function serializedata($typ, $val, $charset_encoding='')
|
2988 |
-
{
|
2989 |
-
$rs='';
|
2990 |
-
switch(@$GLOBALS['xmlrpcTypes'][$typ])
|
2991 |
-
{
|
2992 |
-
case 1:
|
2993 |
-
switch($typ)
|
2994 |
-
{
|
2995 |
-
case $GLOBALS['xmlrpcBase64']:
|
2996 |
-
$rs.="<${typ}>" . base64_encode($val) . "</${typ}>";
|
2997 |
-
break;
|
2998 |
-
case $GLOBALS['xmlrpcBoolean']:
|
2999 |
-
$rs.="<${typ}>" . ($val ? '1' : '0') . "</${typ}>";
|
3000 |
-
break;
|
3001 |
-
case $GLOBALS['xmlrpcString']:
|
3002 |
-
// G. Giunta 2005/2/13: do NOT use htmlentities, since
|
3003 |
-
// it will produce named html entities, which are invalid xml
|
3004 |
-
$rs.="<${typ}>" . xmlrpc_encode_entitites($val, $GLOBALS['xmlrpc_internalencoding'], $charset_encoding). "</${typ}>";
|
3005 |
-
break;
|
3006 |
-
case $GLOBALS['xmlrpcInt']:
|
3007 |
-
case $GLOBALS['xmlrpcI4']:
|
3008 |
-
$rs.="<${typ}>".(int)$val."</${typ}>";
|
3009 |
-
break;
|
3010 |
-
case $GLOBALS['xmlrpcDouble']:
|
3011 |
-
// avoid using standard conversion of float to string because it is locale-dependent,
|
3012 |
-
// and also because the xmlrpc spec forbids exponential notation.
|
3013 |
-
// sprintf('%F') could be most likely ok but it fails eg. on 2e-14.
|
3014 |
-
// The code below tries its best at keeping max precision while avoiding exp notation,
|
3015 |
-
// but there is of course no limit in the number of decimal places to be used...
|
3016 |
-
$rs.="<${typ}>".preg_replace('/\\.?0+$/','',number_format((double)$val, 128, '.', ''))."</${typ}>";
|
3017 |
-
break;
|
3018 |
-
case $GLOBALS['xmlrpcDateTime']:
|
3019 |
-
if (is_string($val))
|
3020 |
-
{
|
3021 |
-
$rs.="<${typ}>${val}</${typ}>";
|
3022 |
-
}
|
3023 |
-
else if(is_a($val, 'DateTime'))
|
3024 |
-
{
|
3025 |
-
$rs.="<${typ}>".$val->format('Ymd\TH:i:s')."</${typ}>";
|
3026 |
-
}
|
3027 |
-
else if(is_int($val))
|
3028 |
-
{
|
3029 |
-
$rs.="<${typ}>".strftime("%Y%m%dT%H:%M:%S", $val)."</${typ}>";
|
3030 |
-
}
|
3031 |
-
else
|
3032 |
-
{
|
3033 |
-
// not really a good idea here: but what shall we output anyway? left for backward compat...
|
3034 |
-
$rs.="<${typ}>${val}</${typ}>";
|
3035 |
-
}
|
3036 |
-
break;
|
3037 |
-
case $GLOBALS['xmlrpcNull']:
|
3038 |
-
if ($GLOBALS['xmlrpc_null_apache_encoding'])
|
3039 |
-
{
|
3040 |
-
$rs.="<ex:nil/>";
|
3041 |
-
}
|
3042 |
-
else
|
3043 |
-
{
|
3044 |
-
$rs.="<nil/>";
|
3045 |
-
}
|
3046 |
-
break;
|
3047 |
-
default:
|
3048 |
-
// no standard type value should arrive here, but provide a possibility
|
3049 |
-
// for xmlrpcvals of unknown type...
|
3050 |
-
$rs.="<${typ}>${val}</${typ}>";
|
3051 |
-
}
|
3052 |
-
break;
|
3053 |
-
case 3:
|
3054 |
-
// struct
|
3055 |
-
if ($this->_php_class)
|
3056 |
-
{
|
3057 |
-
$rs.='<struct php_class="' . $this->_php_class . "\">\n";
|
3058 |
-
}
|
3059 |
-
else
|
3060 |
-
{
|
3061 |
-
$rs.="<struct>\n";
|
3062 |
-
}
|
3063 |
-
foreach($val as $key2 => $val2)
|
3064 |
-
{
|
3065 |
-
$rs.='<member><name>'.xmlrpc_encode_entitites($key2, $GLOBALS['xmlrpc_internalencoding'], $charset_encoding)."</name>\n";
|
3066 |
-
//$rs.=$this->serializeval($val2);
|
3067 |
-
$rs.=$val2->serialize($charset_encoding);
|
3068 |
-
$rs.="</member>\n";
|
3069 |
-
}
|
3070 |
-
$rs.='</struct>';
|
3071 |
-
break;
|
3072 |
-
case 2:
|
3073 |
-
// array
|
3074 |
-
$rs.="<array>\n<data>\n";
|
3075 |
-
for($i=0; $i<count($val); $i++)
|
3076 |
-
{
|
3077 |
-
//$rs.=$this->serializeval($val[$i]);
|
3078 |
-
$rs.=$val[$i]->serialize($charset_encoding);
|
3079 |
-
}
|
3080 |
-
$rs.="</data>\n</array>";
|
3081 |
-
break;
|
3082 |
-
default:
|
3083 |
-
break;
|
3084 |
-
}
|
3085 |
-
return $rs;
|
3086 |
-
}
|
3087 |
-
|
3088 |
-
/**
|
3089 |
-
* Returns xml representation of the value. XML prologue not included
|
3090 |
-
* @param string $charset_encoding the charset to be used for serialization. if null, US-ASCII is assumed
|
3091 |
-
* @return string
|
3092 |
-
* @access public
|
3093 |
-
*/
|
3094 |
-
function serialize($charset_encoding='')
|
3095 |
-
{
|
3096 |
-
// add check? slower, but helps to avoid recursion in serializing broken xmlrpcvals...
|
3097 |
-
//if (is_object($o) && (get_class($o) == 'xmlrpcval' || is_subclass_of($o, 'xmlrpcval')))
|
3098 |
-
//{
|
3099 |
-
reset($this->me);
|
3100 |
-
list($typ, $val) = each($this->me);
|
3101 |
-
return '<value>' . $this->serializedata($typ, $val, $charset_encoding) . "</value>\n";
|
3102 |
-
//}
|
3103 |
-
}
|
3104 |
-
|
3105 |
-
// DEPRECATED
|
3106 |
-
function serializeval($o)
|
3107 |
-
{
|
3108 |
-
// add check? slower, but helps to avoid recursion in serializing broken xmlrpcvals...
|
3109 |
-
//if (is_object($o) && (get_class($o) == 'xmlrpcval' || is_subclass_of($o, 'xmlrpcval')))
|
3110 |
-
//{
|
3111 |
-
$ar=$o->me;
|
3112 |
-
reset($ar);
|
3113 |
-
list($typ, $val) = each($ar);
|
3114 |
-
return '<value>' . $this->serializedata($typ, $val) . "</value>\n";
|
3115 |
-
//}
|
3116 |
-
}
|
3117 |
-
|
3118 |
-
/**
|
3119 |
-
* Checks whether a struct member with a given name is present.
|
3120 |
-
* Works only on xmlrpcvals of type struct.
|
3121 |
-
* @param string $m the name of the struct member to be looked up
|
3122 |
-
* @return boolean
|
3123 |
-
* @access public
|
3124 |
-
*/
|
3125 |
-
function structmemexists($m)
|
3126 |
-
{
|
3127 |
-
return array_key_exists($m, $this->me['struct']);
|
3128 |
-
}
|
3129 |
-
|
3130 |
-
/**
|
3131 |
-
* Returns the value of a given struct member (an xmlrpcval object in itself).
|
3132 |
-
* Will raise a php warning if struct member of given name does not exist
|
3133 |
-
* @param string $m the name of the struct member to be looked up
|
3134 |
-
* @return xmlrpcval
|
3135 |
-
* @access public
|
3136 |
-
*/
|
3137 |
-
function structmem($m)
|
3138 |
-
{
|
3139 |
-
return $this->me['struct'][$m];
|
3140 |
-
}
|
3141 |
-
|
3142 |
-
/**
|
3143 |
-
* Reset internal pointer for xmlrpcvals of type struct.
|
3144 |
-
* @access public
|
3145 |
-
*/
|
3146 |
-
function structreset()
|
3147 |
-
{
|
3148 |
-
reset($this->me['struct']);
|
3149 |
-
}
|
3150 |
-
|
3151 |
-
/**
|
3152 |
-
* Return next member element for xmlrpcvals of type struct.
|
3153 |
-
* @return xmlrpcval
|
3154 |
-
* @access public
|
3155 |
-
*/
|
3156 |
-
function structeach()
|
3157 |
-
{
|
3158 |
-
return each($this->me['struct']);
|
3159 |
-
}
|
3160 |
-
|
3161 |
-
// DEPRECATED! this code looks like it is very fragile and has not been fixed
|
3162 |
-
// for a long long time. Shall we remove it for 2.0?
|
3163 |
-
function getval()
|
3164 |
-
{
|
3165 |
-
// UNSTABLE
|
3166 |
-
reset($this->me);
|
3167 |
-
list($a,$b)=each($this->me);
|
3168 |
-
// contributed by I Sofer, 2001-03-24
|
3169 |
-
// add support for nested arrays to scalarval
|
3170 |
-
// i've created a new method here, so as to
|
3171 |
-
// preserve back compatibility
|
3172 |
-
|
3173 |
-
if(is_array($b))
|
3174 |
-
{
|
3175 |
-
@reset($b);
|
3176 |
-
while(list($id,$cont) = @each($b))
|
3177 |
-
{
|
3178 |
-
$b[$id] = $cont->scalarval();
|
3179 |
-
}
|
3180 |
-
}
|
3181 |
-
|
3182 |
-
// add support for structures directly encoding php objects
|
3183 |
-
if(is_object($b))
|
3184 |
-
{
|
3185 |
-
$t = get_object_vars($b);
|
3186 |
-
@reset($t);
|
3187 |
-
while(list($id,$cont) = @each($t))
|
3188 |
-
{
|
3189 |
-
$t[$id] = $cont->scalarval();
|
3190 |
-
}
|
3191 |
-
@reset($t);
|
3192 |
-
while(list($id,$cont) = @each($t))
|
3193 |
-
{
|
3194 |
-
@$b->$id = $cont;
|
3195 |
-
}
|
3196 |
-
}
|
3197 |
-
// end contrib
|
3198 |
-
return $b;
|
3199 |
-
}
|
3200 |
-
|
3201 |
-
/**
|
3202 |
-
* Returns the value of a scalar xmlrpcval
|
3203 |
-
* @return mixed
|
3204 |
-
* @access public
|
3205 |
-
*/
|
3206 |
-
function scalarval()
|
3207 |
-
{
|
3208 |
-
reset($this->me);
|
3209 |
-
list(,$b)=each($this->me);
|
3210 |
-
return $b;
|
3211 |
-
}
|
3212 |
-
|
3213 |
-
/**
|
3214 |
-
* Returns the type of the xmlrpcval.
|
3215 |
-
* For integers, 'int' is always returned in place of 'i4'
|
3216 |
-
* @return string
|
3217 |
-
* @access public
|
3218 |
-
*/
|
3219 |
-
function scalartyp()
|
3220 |
-
{
|
3221 |
-
reset($this->me);
|
3222 |
-
list($a,)=each($this->me);
|
3223 |
-
if($a==$GLOBALS['xmlrpcI4'])
|
3224 |
-
{
|
3225 |
-
$a=$GLOBALS['xmlrpcInt'];
|
3226 |
-
}
|
3227 |
-
return $a;
|
3228 |
-
}
|
3229 |
-
|
3230 |
-
/**
|
3231 |
-
* Returns the m-th member of an xmlrpcval of struct type
|
3232 |
-
* @param integer $m the index of the value to be retrieved (zero based)
|
3233 |
-
* @return xmlrpcval
|
3234 |
-
* @access public
|
3235 |
-
*/
|
3236 |
-
function arraymem($m)
|
3237 |
-
{
|
3238 |
-
return $this->me['array'][$m];
|
3239 |
-
}
|
3240 |
-
|
3241 |
-
/**
|
3242 |
-
* Returns the number of members in an xmlrpcval of array type
|
3243 |
-
* @return integer
|
3244 |
-
* @access public
|
3245 |
-
*/
|
3246 |
-
function arraysize()
|
3247 |
-
{
|
3248 |
-
return count($this->me['array']);
|
3249 |
-
}
|
3250 |
-
|
3251 |
-
/**
|
3252 |
-
* Returns the number of members in an xmlrpcval of struct type
|
3253 |
-
* @return integer
|
3254 |
-
* @access public
|
3255 |
-
*/
|
3256 |
-
function structsize()
|
3257 |
-
{
|
3258 |
-
return count($this->me['struct']);
|
3259 |
-
}
|
3260 |
-
}
|
3261 |
-
|
3262 |
-
|
3263 |
-
// date helpers
|
3264 |
-
|
3265 |
-
/**
|
3266 |
-
* Given a timestamp, return the corresponding ISO8601 encoded string.
|
3267 |
-
*
|
3268 |
-
* Really, timezones ought to be supported
|
3269 |
-
* but the XML-RPC spec says:
|
3270 |
-
*
|
3271 |
-
* "Don't assume a timezone. It should be specified by the server in its
|
3272 |
-
* documentation what assumptions it makes about timezones."
|
3273 |
-
*
|
3274 |
-
* These routines always assume localtime unless
|
3275 |
-
* $utc is set to 1, in which case UTC is assumed
|
3276 |
-
* and an adjustment for locale is made when encoding
|
3277 |
-
*
|
3278 |
-
* @param int $timet (timestamp)
|
3279 |
-
* @param int $utc (0 or 1)
|
3280 |
-
* @return string
|
3281 |
-
*/
|
3282 |
-
function iso8601_encode($timet, $utc=0)
|
3283 |
-
{
|
3284 |
-
if(!$utc)
|
3285 |
-
{
|
3286 |
-
$t=strftime("%Y%m%dT%H:%M:%S", $timet);
|
3287 |
-
}
|
3288 |
-
else
|
3289 |
-
{
|
3290 |
-
if(function_exists('gmstrftime'))
|
3291 |
-
{
|
3292 |
-
// gmstrftime doesn't exist in some versions
|
3293 |
-
// of PHP
|
3294 |
-
$t=gmstrftime("%Y%m%dT%H:%M:%S", $timet);
|
3295 |
-
}
|
3296 |
-
else
|
3297 |
-
{
|
3298 |
-
$t=strftime("%Y%m%dT%H:%M:%S", $timet-date('Z'));
|
3299 |
-
}
|
3300 |
-
}
|
3301 |
-
return $t;
|
3302 |
-
}
|
3303 |
-
|
3304 |
-
/**
|
3305 |
-
* Given an ISO8601 date string, return a timet in the localtime, or UTC
|
3306 |
-
* @param string $idate
|
3307 |
-
* @param int $utc either 0 or 1
|
3308 |
-
* @return int (datetime)
|
3309 |
-
*/
|
3310 |
-
function iso8601_decode($idate, $utc=0)
|
3311 |
-
{
|
3312 |
-
$t=0;
|
3313 |
-
if(preg_match('/([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})/', $idate, $regs))
|
3314 |
-
{
|
3315 |
-
if($utc)
|
3316 |
-
{
|
3317 |
-
$t=gmmktime($regs[4], $regs[5], $regs[6], $regs[2], $regs[3], $regs[1]);
|
3318 |
-
}
|
3319 |
-
else
|
3320 |
-
{
|
3321 |
-
$t=mktime($regs[4], $regs[5], $regs[6], $regs[2], $regs[3], $regs[1]);
|
3322 |
-
}
|
3323 |
-
}
|
3324 |
-
return $t;
|
3325 |
-
}
|
3326 |
-
|
3327 |
-
/**
|
3328 |
-
* Takes an xmlrpc value in PHP xmlrpcval object format and translates it into native PHP types.
|
3329 |
-
*
|
3330 |
-
* Works with xmlrpc message objects as input, too.
|
3331 |
-
*
|
3332 |
-
* Given proper options parameter, can rebuild generic php object instances
|
3333 |
-
* (provided those have been encoded to xmlrpc format using a corresponding
|
3334 |
-
* option in php_xmlrpc_encode())
|
3335 |
-
* PLEASE NOTE that rebuilding php objects involves calling their constructor function.
|
3336 |
-
* This means that the remote communication end can decide which php code will
|
3337 |
-
* get executed on your server, leaving the door possibly open to 'php-injection'
|
3338 |
-
* style of attacks (provided you have some classes defined on your server that
|
3339 |
-
* might wreak havoc if instances are built outside an appropriate context).
|
3340 |
-
* Make sure you trust the remote server/client before eanbling this!
|
3341 |
-
*
|
3342 |
-
* @author Dan Libby (dan@libby.com)
|
3343 |
-
*
|
3344 |
-
* @param xmlrpcval $xmlrpc_val
|
3345 |
-
* @param array $options if 'decode_php_objs' is set in the options array, xmlrpc structs can be decoded into php objects; if 'dates_as_objects' is set xmlrpc datetimes are decoded as php DateTime objects (standard is
|
3346 |
-
* @return mixed
|
3347 |
-
*/
|
3348 |
-
function php_xmlrpc_decode($xmlrpc_val, $options=array())
|
3349 |
-
{
|
3350 |
-
switch($xmlrpc_val->kindOf())
|
3351 |
-
{
|
3352 |
-
case 'scalar':
|
3353 |
-
if (in_array('extension_api', $options))
|
3354 |
-
{
|
3355 |
-
reset($xmlrpc_val->me);
|
3356 |
-
list($typ,$val) = each($xmlrpc_val->me);
|
3357 |
-
switch ($typ)
|
3358 |
-
{
|
3359 |
-
case 'dateTime.iso8601':
|
3360 |
-
$xmlrpc_val->scalar = $val;
|
3361 |
-
$xmlrpc_val->xmlrpc_type = 'datetime';
|
3362 |
-
$xmlrpc_val->timestamp = iso8601_decode($val);
|
3363 |
-
return $xmlrpc_val;
|
3364 |
-
case 'base64':
|
3365 |
-
$xmlrpc_val->scalar = $val;
|
3366 |
-
$xmlrpc_val->type = $typ;
|
3367 |
-
return $xmlrpc_val;
|
3368 |
-
default:
|
3369 |
-
return $xmlrpc_val->scalarval();
|
3370 |
-
}
|
3371 |
-
}
|
3372 |
-
if (in_array('dates_as_objects', $options) && $xmlrpc_val->scalartyp() == 'dateTime.iso8601')
|
3373 |
-
{
|
3374 |
-
// we return a Datetime object instead of a string
|
3375 |
-
// since now the constructor of xmlrpcval accepts safely strings, ints and datetimes,
|
3376 |
-
// we cater to all 3 cases here
|
3377 |
-
$out = $xmlrpc_val->scalarval();
|
3378 |
-
if (is_string($out))
|
3379 |
-
{
|
3380 |
-
$out = strtotime($out);
|
3381 |
-
}
|
3382 |
-
if (is_int($out))
|
3383 |
-
{
|
3384 |
-
$result = new Datetime();
|
3385 |
-
$result->setTimestamp($out);
|
3386 |
-
return $result;
|
3387 |
-
}
|
3388 |
-
elseif (is_a($out, 'Datetime'))
|
3389 |
-
{
|
3390 |
-
return $out;
|
3391 |
-
}
|
3392 |
-
}
|
3393 |
-
return $xmlrpc_val->scalarval();
|
3394 |
-
case 'array':
|
3395 |
-
$size = $xmlrpc_val->arraysize();
|
3396 |
-
$arr = array();
|
3397 |
-
for($i = 0; $i < $size; $i++)
|
3398 |
-
{
|
3399 |
-
$arr[] = php_xmlrpc_decode($xmlrpc_val->arraymem($i), $options);
|
3400 |
-
}
|
3401 |
-
return $arr;
|
3402 |
-
case 'struct':
|
3403 |
-
$xmlrpc_val->structreset();
|
3404 |
-
// If user said so, try to rebuild php objects for specific struct vals.
|
3405 |
-
/// @todo should we raise a warning for class not found?
|
3406 |
-
// shall we check for proper subclass of xmlrpcval instead of
|
3407 |
-
// presence of _php_class to detect what we can do?
|
3408 |
-
if (in_array('decode_php_objs', $options) && $xmlrpc_val->_php_class != ''
|
3409 |
-
&& class_exists($xmlrpc_val->_php_class))
|
3410 |
-
{
|
3411 |
-
$obj = @new $xmlrpc_val->_php_class;
|
3412 |
-
while(list($key,$value)=$xmlrpc_val->structeach())
|
3413 |
-
{
|
3414 |
-
$obj->$key = php_xmlrpc_decode($value, $options);
|
3415 |
-
}
|
3416 |
-
return $obj;
|
3417 |
-
}
|
3418 |
-
else
|
3419 |
-
{
|
3420 |
-
$arr = array();
|
3421 |
-
while(list($key,$value)=$xmlrpc_val->structeach())
|
3422 |
-
{
|
3423 |
-
$arr[$key] = php_xmlrpc_decode($value, $options);
|
3424 |
-
}
|
3425 |
-
return $arr;
|
3426 |
-
}
|
3427 |
-
case 'msg':
|
3428 |
-
$paramcount = $xmlrpc_val->getNumParams();
|
3429 |
-
$arr = array();
|
3430 |
-
for($i = 0; $i < $paramcount; $i++)
|
3431 |
-
{
|
3432 |
-
$arr[] = php_xmlrpc_decode($xmlrpc_val->getParam($i));
|
3433 |
-
}
|
3434 |
-
return $arr;
|
3435 |
-
}
|
3436 |
-
}
|
3437 |
-
|
3438 |
-
// This constant left here only for historical reasons...
|
3439 |
-
// it was used to decide if we have to define xmlrpc_encode on our own, but
|
3440 |
-
// we do not do it anymore
|
3441 |
-
if(function_exists('xmlrpc_decode'))
|
3442 |
-
{
|
3443 |
-
define('XMLRPC_EPI_ENABLED','1');
|
3444 |
-
}
|
3445 |
-
else
|
3446 |
-
{
|
3447 |
-
define('XMLRPC_EPI_ENABLED','0');
|
3448 |
-
}
|
3449 |
-
|
3450 |
-
/**
|
3451 |
-
* Takes native php types and encodes them into xmlrpc PHP object format.
|
3452 |
-
* It will not re-encode xmlrpcval objects.
|
3453 |
-
*
|
3454 |
-
* Feature creep -- could support more types via optional type argument
|
3455 |
-
* (string => datetime support has been added, ??? => base64 not yet)
|
3456 |
-
*
|
3457 |
-
* If given a proper options parameter, php object instances will be encoded
|
3458 |
-
* into 'special' xmlrpc values, that can later be decoded into php objects
|
3459 |
-
* by calling php_xmlrpc_decode() with a corresponding option
|
3460 |
-
*
|
3461 |
-
* @author Dan Libby (dan@libby.com)
|
3462 |
-
*
|
3463 |
-
* @param mixed $php_val the value to be converted into an xmlrpcval object
|
3464 |
-
* @param array $options can include 'encode_php_objs', 'auto_dates', 'null_extension' or 'extension_api'
|
3465 |
-
* @return xmlrpcval
|
3466 |
-
*/
|
3467 |
-
function php_xmlrpc_encode($php_val, $options=array())
|
3468 |
-
{
|
3469 |
-
$type = gettype($php_val);
|
3470 |
-
switch($type)
|
3471 |
-
{
|
3472 |
-
case 'string':
|
3473 |
-
if (in_array('auto_dates', $options) && preg_match('/^[0-9]{8}T[0-9]{2}:[0-9]{2}:[0-9]{2}$/', $php_val)){
|
3474 |
-
$xmlrpc_val = new xmlrpcval($php_val, $GLOBALS['xmlrpcDateTime']);
|
3475 |
-
} else if(in_array('auto_base64', $options) && strpos($php_val, 'BASE64:') === 0){
|
3476 |
-
$xmlrpc_val = new xmlrpcval(substr($php_val, 7), $GLOBALS['xmlrpcBase64']);
|
3477 |
-
} else{
|
3478 |
-
$xmlrpc_val = new xmlrpcval($php_val, $GLOBALS['xmlrpcString']);
|
3479 |
-
}
|
3480 |
-
break;
|
3481 |
-
case 'integer':
|
3482 |
-
$xmlrpc_val = new xmlrpcval($php_val, $GLOBALS['xmlrpcInt']);
|
3483 |
-
break;
|
3484 |
-
case 'double':
|
3485 |
-
$xmlrpc_val = new xmlrpcval($php_val, $GLOBALS['xmlrpcDouble']);
|
3486 |
-
break;
|
3487 |
-
// <G_Giunta_2001-02-29>
|
3488 |
-
// Add support for encoding/decoding of booleans, since they are supported in PHP
|
3489 |
-
case 'boolean':
|
3490 |
-
$xmlrpc_val = new xmlrpcval($php_val, $GLOBALS['xmlrpcBoolean']);
|
3491 |
-
break;
|
3492 |
-
// </G_Giunta_2001-02-29>
|
3493 |
-
case 'array':
|
3494 |
-
// PHP arrays can be encoded to either xmlrpc structs or arrays,
|
3495 |
-
// depending on wheter they are hashes or plain 0..n integer indexed
|
3496 |
-
// A shorter one-liner would be
|
3497 |
-
// $tmp = array_diff(array_keys($php_val), range(0, count($php_val)-1));
|
3498 |
-
// but execution time skyrockets!
|
3499 |
-
$j = 0;
|
3500 |
-
$arr = array();
|
3501 |
-
$ko = false;
|
3502 |
-
foreach($php_val as $key => $val)
|
3503 |
-
{
|
3504 |
-
$arr[$key] = php_xmlrpc_encode($val, $options);
|
3505 |
-
if(!$ko && $key !== $j)
|
3506 |
-
{
|
3507 |
-
$ko = true;
|
3508 |
-
}
|
3509 |
-
$j++;
|
3510 |
-
}
|
3511 |
-
if($ko)
|
3512 |
-
{
|
3513 |
-
$xmlrpc_val = new xmlrpcval($arr, $GLOBALS['xmlrpcStruct']);
|
3514 |
-
}
|
3515 |
-
else
|
3516 |
-
{
|
3517 |
-
$xmlrpc_val = new xmlrpcval($arr, $GLOBALS['xmlrpcArray']);
|
3518 |
-
}
|
3519 |
-
break;
|
3520 |
-
case 'object':
|
3521 |
-
if(is_a($php_val, 'xmlrpcval'))
|
3522 |
-
{
|
3523 |
-
$xmlrpc_val = $php_val;
|
3524 |
-
}
|
3525 |
-
else if(is_a($php_val, 'DateTime'))
|
3526 |
-
{
|
3527 |
-
$xmlrpc_val = new xmlrpcval($php_val->format('Ymd\TH:i:s'), $GLOBALS['xmlrpcStruct']);
|
3528 |
-
}
|
3529 |
-
else
|
3530 |
-
{
|
3531 |
-
$arr = array();
|
3532 |
-
reset($php_val);
|
3533 |
-
while(list($k,$v) = each($php_val))
|
3534 |
-
{
|
3535 |
-
$arr[$k] = php_xmlrpc_encode($v, $options);
|
3536 |
-
}
|
3537 |
-
$xmlrpc_val = new xmlrpcval($arr, $GLOBALS['xmlrpcStruct']);
|
3538 |
-
if (in_array('encode_php_objs', $options))
|
3539 |
-
{
|
3540 |
-
// let's save original class name into xmlrpcval:
|
3541 |
-
// might be useful later on...
|
3542 |
-
$xmlrpc_val->_php_class = get_class($php_val);
|
3543 |
-
}
|
3544 |
-
}
|
3545 |
-
break;
|
3546 |
-
case 'NULL':
|
3547 |
-
if (in_array('extension_api', $options))
|
3548 |
-
{
|
3549 |
-
$xmlrpc_val = new xmlrpcval('', $GLOBALS['xmlrpcString']);
|
3550 |
-
}
|
3551 |
-
else if (in_array('null_extension', $options))
|
3552 |
-
{
|
3553 |
-
$xmlrpc_val = new xmlrpcval('', $GLOBALS['xmlrpcNull']);
|
3554 |
-
}
|
3555 |
-
else
|
3556 |
-
{
|
3557 |
-
$xmlrpc_val = new xmlrpcval();
|
3558 |
-
}
|
3559 |
-
break;
|
3560 |
-
case 'resource':
|
3561 |
-
if (in_array('extension_api', $options))
|
3562 |
-
{
|
3563 |
-
$xmlrpc_val = new xmlrpcval((int)$php_val, $GLOBALS['xmlrpcInt']);
|
3564 |
-
}
|
3565 |
-
else
|
3566 |
-
{
|
3567 |
-
$xmlrpc_val = new xmlrpcval();
|
3568 |
-
}
|
3569 |
-
// catch "user function", "unknown type"
|
3570 |
-
default:
|
3571 |
-
// giancarlo pinerolo <ping@alt.it>
|
3572 |
-
// it has to return
|
3573 |
-
// an empty object in case, not a boolean.
|
3574 |
-
$xmlrpc_val = new xmlrpcval();
|
3575 |
-
break;
|
3576 |
-
}
|
3577 |
-
return $xmlrpc_val;
|
3578 |
-
}
|
3579 |
-
|
3580 |
-
/**
|
3581 |
-
* Convert the xml representation of a method response, method request or single
|
3582 |
-
* xmlrpc value into the appropriate object (a.k.a. deserialize)
|
3583 |
-
* @param string $xml_val
|
3584 |
-
* @param array $options
|
3585 |
-
* @return mixed false on error, or an instance of either xmlrpcval, xmlrpcmsg or xmlrpcresp
|
3586 |
-
*/
|
3587 |
-
function php_xmlrpc_decode_xml($xml_val, $options=array())
|
3588 |
-
{
|
3589 |
-
$GLOBALS['_xh'] = array();
|
3590 |
-
$GLOBALS['_xh']['ac'] = '';
|
3591 |
-
$GLOBALS['_xh']['stack'] = array();
|
3592 |
-
$GLOBALS['_xh']['valuestack'] = array();
|
3593 |
-
$GLOBALS['_xh']['params'] = array();
|
3594 |
-
$GLOBALS['_xh']['pt'] = array();
|
3595 |
-
$GLOBALS['_xh']['isf'] = 0;
|
3596 |
-
$GLOBALS['_xh']['isf_reason'] = '';
|
3597 |
-
$GLOBALS['_xh']['method'] = false;
|
3598 |
-
$GLOBALS['_xh']['rt'] = '';
|
3599 |
-
/// @todo 'guestimate' encoding
|
3600 |
-
$parser = xml_parser_create();
|
3601 |
-
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, true);
|
3602 |
-
// What if internal encoding is not in one of the 3 allowed?
|
3603 |
-
// we use the broadest one, ie. utf8!
|
3604 |
-
if (!in_array($GLOBALS['xmlrpc_internalencoding'], array('UTF-8', 'ISO-8859-1', 'US-ASCII')))
|
3605 |
-
{
|
3606 |
-
xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, 'UTF-8');
|
3607 |
-
}
|
3608 |
-
else
|
3609 |
-
{
|
3610 |
-
xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, $GLOBALS['xmlrpc_internalencoding']);
|
3611 |
-
}
|
3612 |
-
xml_set_element_handler($parser, 'xmlrpc_se_any', 'xmlrpc_ee');
|
3613 |
-
xml_set_character_data_handler($parser, 'xmlrpc_cd');
|
3614 |
-
xml_set_default_handler($parser, 'xmlrpc_dh');
|
3615 |
-
if(!xml_parse($parser, $xml_val, 1))
|
3616 |
-
{
|
3617 |
-
$errstr = sprintf('XML error: %s at line %d, column %d',
|
3618 |
-
xml_error_string(xml_get_error_code($parser)),
|
3619 |
-
xml_get_current_line_number($parser), xml_get_current_column_number($parser));
|
3620 |
-
error_log($errstr);
|
3621 |
-
xml_parser_free($parser);
|
3622 |
-
return false;
|
3623 |
-
}
|
3624 |
-
xml_parser_free($parser);
|
3625 |
-
if ($GLOBALS['_xh']['isf'] > 1) // test that $GLOBALS['_xh']['value'] is an obj, too???
|
3626 |
-
{
|
3627 |
-
error_log($GLOBALS['_xh']['isf_reason']);
|
3628 |
-
return false;
|
3629 |
-
}
|
3630 |
-
switch ($GLOBALS['_xh']['rt'])
|
3631 |
-
{
|
3632 |
-
case 'methodresponse':
|
3633 |
-
$v =& $GLOBALS['_xh']['value'];
|
3634 |
-
if ($GLOBALS['_xh']['isf'] == 1)
|
3635 |
-
{
|
3636 |
-
$vc = $v->structmem('faultCode');
|
3637 |
-
$vs = $v->structmem('faultString');
|
3638 |
-
$r = new xmlrpcresp(0, $vc->scalarval(), $vs->scalarval());
|
3639 |
-
}
|
3640 |
-
else
|
3641 |
-
{
|
3642 |
-
$r = new xmlrpcresp($v);
|
3643 |
-
}
|
3644 |
-
return $r;
|
3645 |
-
case 'methodcall':
|
3646 |
-
$m = new xmlrpcmsg($GLOBALS['_xh']['method']);
|
3647 |
-
for($i=0; $i < count($GLOBALS['_xh']['params']); $i++)
|
3648 |
-
{
|
3649 |
-
$m->addParam($GLOBALS['_xh']['params'][$i]);
|
3650 |
-
}
|
3651 |
-
return $m;
|
3652 |
-
case 'value':
|
3653 |
-
return $GLOBALS['_xh']['value'];
|
3654 |
-
default:
|
3655 |
-
return false;
|
3656 |
-
}
|
3657 |
-
}
|
3658 |
-
|
3659 |
-
/**
|
3660 |
-
* decode a string that is encoded w/ "chunked" transfer encoding
|
3661 |
-
* as defined in rfc2068 par. 19.4.6
|
3662 |
-
* code shamelessly stolen from nusoap library by Dietrich Ayala
|
3663 |
-
*
|
3664 |
-
* @param string $buffer the string to be decoded
|
3665 |
-
* @return string
|
3666 |
-
*/
|
3667 |
-
function decode_chunked($buffer)
|
3668 |
-
{
|
3669 |
-
// length := 0
|
3670 |
-
$length = 0;
|
3671 |
-
$new = '';
|
3672 |
-
|
3673 |
-
// read chunk-size, chunk-extension (if any) and crlf
|
3674 |
-
// get the position of the linebreak
|
3675 |
-
$chunkend = strpos($buffer,"\r\n") + 2;
|
3676 |
-
$temp = substr($buffer,0,$chunkend);
|
3677 |
-
$chunk_size = hexdec( trim($temp) );
|
3678 |
-
$chunkstart = $chunkend;
|
3679 |
-
while($chunk_size > 0)
|
3680 |
-
{
|
3681 |
-
$chunkend = strpos($buffer, "\r\n", $chunkstart + $chunk_size);
|
3682 |
-
|
3683 |
-
// just in case we got a broken connection
|
3684 |
-
if($chunkend == false)
|
3685 |
-
{
|
3686 |
-
$chunk = substr($buffer,$chunkstart);
|
3687 |
-
// append chunk-data to entity-body
|
3688 |
-
$new .= $chunk;
|
3689 |
-
$length += strlen($chunk);
|
3690 |
-
break;
|
3691 |
-
}
|
3692 |
-
|
3693 |
-
// read chunk-data and crlf
|
3694 |
-
$chunk = substr($buffer,$chunkstart,$chunkend-$chunkstart);
|
3695 |
-
// append chunk-data to entity-body
|
3696 |
-
$new .= $chunk;
|
3697 |
-
// length := length + chunk-size
|
3698 |
-
$length += strlen($chunk);
|
3699 |
-
// read chunk-size and crlf
|
3700 |
-
$chunkstart = $chunkend + 2;
|
3701 |
-
|
3702 |
-
$chunkend = strpos($buffer,"\r\n",$chunkstart)+2;
|
3703 |
-
if($chunkend == false)
|
3704 |
-
{
|
3705 |
-
break; //just in case we got a broken connection
|
3706 |
-
}
|
3707 |
-
$temp = substr($buffer,$chunkstart,$chunkend-$chunkstart);
|
3708 |
-
$chunk_size = hexdec( trim($temp) );
|
3709 |
-
$chunkstart = $chunkend;
|
3710 |
-
}
|
3711 |
-
return $new;
|
3712 |
-
}
|
3713 |
-
|
3714 |
-
/**
|
3715 |
-
* xml charset encoding guessing helper function.
|
3716 |
-
* Tries to determine the charset encoding of an XML chunk received over HTTP.
|
3717 |
-
* NB: according to the spec (RFC 3023), if text/xml content-type is received over HTTP without a content-type,
|
3718 |
-
* we SHOULD assume it is strictly US-ASCII. But we try to be more tolerant of unconforming (legacy?) clients/servers,
|
3719 |
-
* which will be most probably using UTF-8 anyway...
|
3720 |
-
*
|
3721 |
-
* @param string $httpheader the http Content-type header
|
3722 |
-
* @param string $xmlchunk xml content buffer
|
3723 |
-
* @param string $encoding_prefs comma separated list of character encodings to be used as default (when mb extension is enabled)
|
3724 |
-
* @return string
|
3725 |
-
*
|
3726 |
-
* @todo explore usage of mb_http_input(): does it detect http headers + post data? if so, use it instead of hand-detection!!!
|
3727 |
-
*/
|
3728 |
-
function guess_encoding($httpheader='', $xmlchunk='', $encoding_prefs=null)
|
3729 |
-
{
|
3730 |
-
// discussion: see http://www.yale.edu/pclt/encoding/
|
3731 |
-
// 1 - test if encoding is specified in HTTP HEADERS
|
3732 |
-
|
3733 |
-
//Details:
|
3734 |
-
// LWS: (\13\10)?( |\t)+
|
3735 |
-
// token: (any char but excluded stuff)+
|
3736 |
-
// quoted string: " (any char but double quotes and cointrol chars)* "
|
3737 |
-
// header: Content-type = ...; charset=value(; ...)*
|
3738 |
-
// where value is of type token, no LWS allowed between 'charset' and value
|
3739 |
-
// Note: we do not check for invalid chars in VALUE:
|
3740 |
-
// this had better be done using pure ereg as below
|
3741 |
-
// Note 2: we might be removing whitespace/tabs that ought to be left in if
|
3742 |
-
// the received charset is a quoted string. But nobody uses such charset names...
|
3743 |
-
|
3744 |
-
/// @todo this test will pass if ANY header has charset specification, not only Content-Type. Fix it?
|
3745 |
-
$matches = array();
|
3746 |
-
if(preg_match('/;\s*charset\s*=([^;]+)/i', $httpheader, $matches))
|
3747 |
-
{
|
3748 |
-
return strtoupper(trim($matches[1], " \t\""));
|
3749 |
-
}
|
3750 |
-
|
3751 |
-
// 2 - scan the first bytes of the data for a UTF-16 (or other) BOM pattern
|
3752 |
-
// (source: http://www.w3.org/TR/2000/REC-xml-20001006)
|
3753 |
-
// NOTE: actually, according to the spec, even if we find the BOM and determine
|
3754 |
-
// an encoding, we should check if there is an encoding specified
|
3755 |
-
// in the xml declaration, and verify if they match.
|
3756 |
-
/// @todo implement check as described above?
|
3757 |
-
/// @todo implement check for first bytes of string even without a BOM? (It sure looks harder than for cases WITH a BOM)
|
3758 |
-
if(preg_match('/^(\x00\x00\xFE\xFF|\xFF\xFE\x00\x00|\x00\x00\xFF\xFE|\xFE\xFF\x00\x00)/', $xmlchunk))
|
3759 |
-
{
|
3760 |
-
return 'UCS-4';
|
3761 |
-
}
|
3762 |
-
elseif(preg_match('/^(\xFE\xFF|\xFF\xFE)/', $xmlchunk))
|
3763 |
-
{
|
3764 |
-
return 'UTF-16';
|
3765 |
-
}
|
3766 |
-
elseif(preg_match('/^(\xEF\xBB\xBF)/', $xmlchunk))
|
3767 |
-
{
|
3768 |
-
return 'UTF-8';
|
3769 |
-
}
|
3770 |
-
|
3771 |
-
// 3 - test if encoding is specified in the xml declaration
|
3772 |
-
// Details:
|
3773 |
-
// SPACE: (#x20 | #x9 | #xD | #xA)+ === [ \x9\xD\xA]+
|
3774 |
-
// EQ: SPACE?=SPACE? === [ \x9\xD\xA]*=[ \x9\xD\xA]*
|
3775 |
-
if (preg_match('/^<\?xml\s+version\s*=\s*'. "((?:\"[a-zA-Z0-9_.:-]+\")|(?:'[a-zA-Z0-9_.:-]+'))".
|
3776 |
-
'\s+encoding\s*=\s*' . "((?:\"[A-Za-z][A-Za-z0-9._-]*\")|(?:'[A-Za-z][A-Za-z0-9._-]*'))/",
|
3777 |
-
$xmlchunk, $matches))
|
3778 |
-
{
|
3779 |
-
return strtoupper(substr($matches[2], 1, -1));
|
3780 |
-
}
|
3781 |
-
|
3782 |
-
// 4 - if mbstring is available, let it do the guesswork
|
3783 |
-
// NB: we favour finding an encoding that is compatible with what we can process
|
3784 |
-
if(extension_loaded('mbstring'))
|
3785 |
-
{
|
3786 |
-
if($encoding_prefs)
|
3787 |
-
{
|
3788 |
-
$enc = mb_detect_encoding($xmlchunk, $encoding_prefs);
|
3789 |
-
}
|
3790 |
-
else
|
3791 |
-
{
|
3792 |
-
$enc = mb_detect_encoding($xmlchunk);
|
3793 |
-
}
|
3794 |
-
// NB: mb_detect likes to call it ascii, xml parser likes to call it US_ASCII...
|
3795 |
-
// IANA also likes better US-ASCII, so go with it
|
3796 |
-
if($enc == 'ASCII')
|
3797 |
-
{
|
3798 |
-
$enc = 'US-'.$enc;
|
3799 |
-
}
|
3800 |
-
return $enc;
|
3801 |
-
}
|
3802 |
-
else
|
3803 |
-
{
|
3804 |
-
// no encoding specified: as per HTTP1.1 assume it is iso-8859-1?
|
3805 |
-
// Both RFC 2616 (HTTP 1.1) and 1945 (HTTP 1.0) clearly state that for text/xxx content types
|
3806 |
-
// this should be the standard. And we should be getting text/xml as request and response.
|
3807 |
-
// BUT we have to be backward compatible with the lib, which always used UTF-8 as default...
|
3808 |
-
return $GLOBALS['xmlrpc_defencoding'];
|
3809 |
-
}
|
3810 |
-
}
|
3811 |
-
|
3812 |
-
/**
|
3813 |
-
* Checks if a given charset encoding is present in a list of encodings or
|
3814 |
-
* if it is a valid subset of any encoding in the list
|
3815 |
-
* @param string $encoding charset to be tested
|
3816 |
-
* @param mixed $validlist comma separated list of valid charsets (or array of charsets)
|
3817 |
-
* @return bool
|
3818 |
-
*/
|
3819 |
-
function is_valid_charset($encoding, $validlist)
|
3820 |
-
{
|
3821 |
-
$charset_supersets = array(
|
3822 |
-
'US-ASCII' => array ('ISO-8859-1', 'ISO-8859-2', 'ISO-8859-3', 'ISO-8859-4',
|
3823 |
-
'ISO-8859-5', 'ISO-8859-6', 'ISO-8859-7', 'ISO-8859-8',
|
3824 |
-
'ISO-8859-9', 'ISO-8859-10', 'ISO-8859-11', 'ISO-8859-12',
|
3825 |
-
'ISO-8859-13', 'ISO-8859-14', 'ISO-8859-15', 'UTF-8',
|
3826 |
-
'EUC-JP', 'EUC-', 'EUC-KR', 'EUC-CN')
|
3827 |
-
);
|
3828 |
-
if (is_string($validlist))
|
3829 |
-
$validlist = explode(',', $validlist);
|
3830 |
-
if (@in_array(strtoupper($encoding), $validlist))
|
3831 |
-
return true;
|
3832 |
-
else
|
3833 |
-
{
|
3834 |
-
if (array_key_exists($encoding, $charset_supersets))
|
3835 |
-
foreach ($validlist as $allowed)
|
3836 |
-
if (in_array($allowed, $charset_supersets[$encoding]))
|
3837 |
-
return true;
|
3838 |
-
return false;
|
3839 |
-
}
|
3840 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/vendor/infusionsoft/xmlrpc-3.0/lib/xmlrpc_wrappers.inc
DELETED
@@ -1,955 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* PHP-XMLRPC "wrapper" functions
|
4 |
-
* Generate stubs to transparently access xmlrpc methods as php functions and viceversa
|
5 |
-
*
|
6 |
-
* @version $Id: xmlrpc_wrappers.inc,v 1.13 2008/09/20 01:23:47 ggiunta Exp $
|
7 |
-
* @author Gaetano Giunta
|
8 |
-
* @copyright (C) 2006-2009 G. Giunta
|
9 |
-
* @license code licensed under the BSD License: http://phpxmlrpc.sourceforge.net/license.txt
|
10 |
-
*
|
11 |
-
* @todo separate introspection from code generation for func-2-method wrapping
|
12 |
-
* @todo use some better templating system for code generation?
|
13 |
-
* @todo implement method wrapping with preservation of php objs in calls
|
14 |
-
* @todo when wrapping methods without obj rebuilding, use return_type = 'phpvals' (faster)
|
15 |
-
* @todo implement self-parsing of php code for PHP <= 4
|
16 |
-
*/
|
17 |
-
|
18 |
-
// requires: xmlrpc.inc
|
19 |
-
|
20 |
-
/**
|
21 |
-
* Given a string defining a php type or phpxmlrpc type (loosely defined: strings
|
22 |
-
* accepted come from javadoc blocks), return corresponding phpxmlrpc type.
|
23 |
-
* NB: for php 'resource' types returns empty string, since resources cannot be serialized;
|
24 |
-
* for php class names returns 'struct', since php objects can be serialized as xmlrpc structs
|
25 |
-
* for php arrays always return array, even though arrays sometiles serialize as json structs
|
26 |
-
* @param string $phptype
|
27 |
-
* @return string
|
28 |
-
*/
|
29 |
-
function php_2_xmlrpc_type($phptype)
|
30 |
-
{
|
31 |
-
switch(strtolower($phptype))
|
32 |
-
{
|
33 |
-
case 'string':
|
34 |
-
return $GLOBALS['xmlrpcString'];
|
35 |
-
case 'integer':
|
36 |
-
case $GLOBALS['xmlrpcInt']: // 'int'
|
37 |
-
case $GLOBALS['xmlrpcI4']:
|
38 |
-
return $GLOBALS['xmlrpcInt'];
|
39 |
-
case 'double':
|
40 |
-
return $GLOBALS['xmlrpcDouble'];
|
41 |
-
case 'boolean':
|
42 |
-
return $GLOBALS['xmlrpcBoolean'];
|
43 |
-
case 'array':
|
44 |
-
return $GLOBALS['xmlrpcArray'];
|
45 |
-
case 'object':
|
46 |
-
return $GLOBALS['xmlrpcStruct'];
|
47 |
-
case $GLOBALS['xmlrpcBase64']:
|
48 |
-
case $GLOBALS['xmlrpcStruct']:
|
49 |
-
return strtolower($phptype);
|
50 |
-
case 'resource':
|
51 |
-
return '';
|
52 |
-
default:
|
53 |
-
if(class_exists($phptype))
|
54 |
-
{
|
55 |
-
return $GLOBALS['xmlrpcStruct'];
|
56 |
-
}
|
57 |
-
else
|
58 |
-
{
|
59 |
-
// unknown: might be any 'extended' xmlrpc type
|
60 |
-
return $GLOBALS['xmlrpcValue'];
|
61 |
-
}
|
62 |
-
}
|
63 |
-
}
|
64 |
-
|
65 |
-
/**
|
66 |
-
* Given a string defining a phpxmlrpc type return corresponding php type.
|
67 |
-
* @param string $xmlrpctype
|
68 |
-
* @return string
|
69 |
-
*/
|
70 |
-
function xmlrpc_2_php_type($xmlrpctype)
|
71 |
-
{
|
72 |
-
switch(strtolower($xmlrpctype))
|
73 |
-
{
|
74 |
-
case 'base64':
|
75 |
-
case 'datetime.iso8601':
|
76 |
-
case 'string':
|
77 |
-
return $GLOBALS['xmlrpcString'];
|
78 |
-
case 'int':
|
79 |
-
case 'i4':
|
80 |
-
return 'integer';
|
81 |
-
case 'struct':
|
82 |
-
case 'array':
|
83 |
-
return 'array';
|
84 |
-
case 'double':
|
85 |
-
return 'float';
|
86 |
-
case 'undefined':
|
87 |
-
return 'mixed';
|
88 |
-
case 'boolean':
|
89 |
-
case 'null':
|
90 |
-
default:
|
91 |
-
// unknown: might be any xmlrpc type
|
92 |
-
return strtolower($xmlrpctype);
|
93 |
-
}
|
94 |
-
}
|
95 |
-
|
96 |
-
/**
|
97 |
-
* Given a user-defined PHP function, create a PHP 'wrapper' function that can
|
98 |
-
* be exposed as xmlrpc method from an xmlrpc_server object and called from remote
|
99 |
-
* clients (as well as its corresponding signature info).
|
100 |
-
*
|
101 |
-
* Since php is a typeless language, to infer types of input and output parameters,
|
102 |
-
* it relies on parsing the javadoc-style comment block associated with the given
|
103 |
-
* function. Usage of xmlrpc native types (such as datetime.dateTime.iso8601 and base64)
|
104 |
-
* in the @param tag is also allowed, if you need the php function to receive/send
|
105 |
-
* data in that particular format (note that base64 encoding/decoding is transparently
|
106 |
-
* carried out by the lib, while datetime vals are passed around as strings)
|
107 |
-
*
|
108 |
-
* Known limitations:
|
109 |
-
* - requires PHP 5.0.3 +
|
110 |
-
* - only works for user-defined functions, not for PHP internal functions
|
111 |
-
* (reflection does not support retrieving number/type of params for those)
|
112 |
-
* - functions returning php objects will generate special xmlrpc responses:
|
113 |
-
* when the xmlrpc decoding of those responses is carried out by this same lib, using
|
114 |
-
* the appropriate param in php_xmlrpc_decode, the php objects will be rebuilt.
|
115 |
-
* In short: php objects can be serialized, too (except for their resource members),
|
116 |
-
* using this function.
|
117 |
-
* Other libs might choke on the very same xml that will be generated in this case
|
118 |
-
* (i.e. it has a nonstandard attribute on struct element tags)
|
119 |
-
* - usage of javadoc @param tags using param names in a different order from the
|
120 |
-
* function prototype is not considered valid (to be fixed?)
|
121 |
-
*
|
122 |
-
* Note that since rel. 2.0RC3 the preferred method to have the server call 'standard'
|
123 |
-
* php functions (ie. functions not expecting a single xmlrpcmsg obj as parameter)
|
124 |
-
* is by making use of the functions_parameters_type class member.
|
125 |
-
*
|
126 |
-
* @param string $funcname the name of the PHP user function to be exposed as xmlrpc method; array($obj, 'methodname') and array('class', 'methodname') are ok too
|
127 |
-
* @param string $newfuncname (optional) name for function to be created
|
128 |
-
* @param array $extra_options (optional) array of options for conversion. valid values include:
|
129 |
-
* bool return_source when true, php code w. function definition will be returned, not evaluated
|
130 |
-
* bool encode_php_objs let php objects be sent to server using the 'improved' xmlrpc notation, so server can deserialize them as php objects
|
131 |
-
* bool decode_php_objs --- WARNING !!! possible security hazard. only use it with trusted servers ---
|
132 |
-
* bool suppress_warnings remove from produced xml any runtime warnings due to the php function being invoked
|
133 |
-
* @return false on error, or an array containing the name of the new php function,
|
134 |
-
* its signature and docs, to be used in the server dispatch map
|
135 |
-
*
|
136 |
-
* @todo decide how to deal with params passed by ref: bomb out or allow?
|
137 |
-
* @todo finish using javadoc info to build method sig if all params are named but out of order
|
138 |
-
* @todo add a check for params of 'resource' type
|
139 |
-
* @todo add some trigger_errors / error_log when returning false?
|
140 |
-
* @todo what to do when the PHP function returns NULL? we are currently returning an empty string value...
|
141 |
-
* @todo add an option to suppress php warnings in invocation of user function, similar to server debug level 3?
|
142 |
-
* @todo if $newfuncname is empty, we could use create_user_func instead of eval, as it is possibly faster
|
143 |
-
* @todo add a verbatim_object_copy parameter to allow avoiding the same obj instance?
|
144 |
-
*/
|
145 |
-
function wrap_php_function($funcname, $newfuncname='', $extra_options=array())
|
146 |
-
{
|
147 |
-
$buildit = isset($extra_options['return_source']) ? !($extra_options['return_source']) : true;
|
148 |
-
$prefix = isset($extra_options['prefix']) ? $extra_options['prefix'] : 'xmlrpc';
|
149 |
-
$encode_php_objects = isset($extra_options['encode_php_objs']) ? (bool)$extra_options['encode_php_objs'] : false;
|
150 |
-
$decode_php_objects = isset($extra_options['decode_php_objs']) ? (bool)$extra_options['decode_php_objs'] : false;
|
151 |
-
$catch_warnings = isset($extra_options['suppress_warnings']) && $extra_options['suppress_warnings'] ? '@' : '';
|
152 |
-
|
153 |
-
if(version_compare(phpversion(), '5.0.3') == -1)
|
154 |
-
{
|
155 |
-
// up to php 5.0.3 some useful reflection methods were missing
|
156 |
-
error_log('XML-RPC: cannot not wrap php functions unless running php version bigger than 5.0.3');
|
157 |
-
return false;
|
158 |
-
}
|
159 |
-
|
160 |
-
$exists = false;
|
161 |
-
if (is_string($funcname) && strpos($funcname, '::') !== false)
|
162 |
-
{
|
163 |
-
$funcname = explode('::', $funcname);
|
164 |
-
}
|
165 |
-
if(is_array($funcname))
|
166 |
-
{
|
167 |
-
if(count($funcname) < 2 || (!is_string($funcname[0]) && !is_object($funcname[0])))
|
168 |
-
{
|
169 |
-
error_log('XML-RPC: syntax for function to be wrapped is wrong');
|
170 |
-
return false;
|
171 |
-
}
|
172 |
-
if(is_string($funcname[0]))
|
173 |
-
{
|
174 |
-
$plainfuncname = implode('::', $funcname);
|
175 |
-
}
|
176 |
-
elseif(is_object($funcname[0]))
|
177 |
-
{
|
178 |
-
$plainfuncname = get_class($funcname[0]) . '->' . $funcname[1];
|
179 |
-
}
|
180 |
-
$exists = method_exists($funcname[0], $funcname[1]);
|
181 |
-
if (!$exists && version_compare(phpversion(), '5.1') < 0)
|
182 |
-
{
|
183 |
-
// workaround for php 5.0: static class methods are not seen by method_exists
|
184 |
-
$exists = is_callable( $funcname );
|
185 |
-
}
|
186 |
-
}
|
187 |
-
else
|
188 |
-
{
|
189 |
-
$plainfuncname = $funcname;
|
190 |
-
$exists = function_exists($funcname);
|
191 |
-
}
|
192 |
-
|
193 |
-
if(!$exists)
|
194 |
-
{
|
195 |
-
error_log('XML-RPC: function to be wrapped is not defined: '.$plainfuncname);
|
196 |
-
return false;
|
197 |
-
}
|
198 |
-
else
|
199 |
-
{
|
200 |
-
// determine name of new php function
|
201 |
-
if($newfuncname == '')
|
202 |
-
{
|
203 |
-
if(is_array($funcname))
|
204 |
-
{
|
205 |
-
if(is_string($funcname[0]))
|
206 |
-
$xmlrpcfuncname = "{$prefix}_".implode('_', $funcname);
|
207 |
-
else
|
208 |
-
$xmlrpcfuncname = "{$prefix}_".get_class($funcname[0]) . '_' . $funcname[1];
|
209 |
-
}
|
210 |
-
else
|
211 |
-
{
|
212 |
-
$xmlrpcfuncname = "{$prefix}_$funcname";
|
213 |
-
}
|
214 |
-
}
|
215 |
-
else
|
216 |
-
{
|
217 |
-
$xmlrpcfuncname = $newfuncname;
|
218 |
-
}
|
219 |
-
while($buildit && function_exists($xmlrpcfuncname))
|
220 |
-
{
|
221 |
-
$xmlrpcfuncname .= 'x';
|
222 |
-
}
|
223 |
-
|
224 |
-
// start to introspect PHP code
|
225 |
-
if(is_array($funcname))
|
226 |
-
{
|
227 |
-
$func = new ReflectionMethod($funcname[0], $funcname[1]);
|
228 |
-
if($func->isPrivate())
|
229 |
-
{
|
230 |
-
error_log('XML-RPC: method to be wrapped is private: '.$plainfuncname);
|
231 |
-
return false;
|
232 |
-
}
|
233 |
-
if($func->isProtected())
|
234 |
-
{
|
235 |
-
error_log('XML-RPC: method to be wrapped is protected: '.$plainfuncname);
|
236 |
-
return false;
|
237 |
-
}
|
238 |
-
if($func->isConstructor())
|
239 |
-
{
|
240 |
-
error_log('XML-RPC: method to be wrapped is the constructor: '.$plainfuncname);
|
241 |
-
return false;
|
242 |
-
}
|
243 |
-
// php 503 always says isdestructor = true...
|
244 |
-
if( version_compare(phpversion(), '5.0.3') != 0 && $func->isDestructor())
|
245 |
-
{
|
246 |
-
error_log('XML-RPC: method to be wrapped is the destructor: '.$plainfuncname);
|
247 |
-
return false;
|
248 |
-
}
|
249 |
-
if($func->isAbstract())
|
250 |
-
{
|
251 |
-
error_log('XML-RPC: method to be wrapped is abstract: '.$plainfuncname);
|
252 |
-
return false;
|
253 |
-
}
|
254 |
-
/// @todo add more checks for static vs. nonstatic?
|
255 |
-
}
|
256 |
-
else
|
257 |
-
{
|
258 |
-
$func = new ReflectionFunction($funcname);
|
259 |
-
}
|
260 |
-
if($func->isInternal())
|
261 |
-
{
|
262 |
-
// Note: from PHP 5.1.0 onward, we will possibly be able to use invokeargs
|
263 |
-
// instead of getparameters to fully reflect internal php functions ?
|
264 |
-
error_log('XML-RPC: function to be wrapped is internal: '.$plainfuncname);
|
265 |
-
return false;
|
266 |
-
}
|
267 |
-
|
268 |
-
// retrieve parameter names, types and description from javadoc comments
|
269 |
-
|
270 |
-
// function description
|
271 |
-
$desc = '';
|
272 |
-
// type of return val: by default 'any'
|
273 |
-
$returns = $GLOBALS['xmlrpcValue'];
|
274 |
-
// desc of return val
|
275 |
-
$returnsDocs = '';
|
276 |
-
// type + name of function parameters
|
277 |
-
$paramDocs = array();
|
278 |
-
|
279 |
-
$docs = $func->getDocComment();
|
280 |
-
if($docs != '')
|
281 |
-
{
|
282 |
-
$docs = explode("\n", $docs);
|
283 |
-
$i = 0;
|
284 |
-
foreach($docs as $doc)
|
285 |
-
{
|
286 |
-
$doc = trim($doc, " \r\t/*");
|
287 |
-
if(strlen($doc) && strpos($doc, '@') !== 0 && !$i)
|
288 |
-
{
|
289 |
-
if($desc)
|
290 |
-
{
|
291 |
-
$desc .= "\n";
|
292 |
-
}
|
293 |
-
$desc .= $doc;
|
294 |
-
}
|
295 |
-
elseif(strpos($doc, '@param') === 0)
|
296 |
-
{
|
297 |
-
// syntax: @param type [$name] desc
|
298 |
-
if(preg_match('/@param\s+(\S+)(\s+\$\S+)?\s+(.+)/', $doc, $matches))
|
299 |
-
{
|
300 |
-
if(strpos($matches[1], '|'))
|
301 |
-
{
|
302 |
-
//$paramDocs[$i]['type'] = explode('|', $matches[1]);
|
303 |
-
$paramDocs[$i]['type'] = 'mixed';
|
304 |
-
}
|
305 |
-
else
|
306 |
-
{
|
307 |
-
$paramDocs[$i]['type'] = $matches[1];
|
308 |
-
}
|
309 |
-
$paramDocs[$i]['name'] = trim($matches[2]);
|
310 |
-
$paramDocs[$i]['doc'] = $matches[3];
|
311 |
-
}
|
312 |
-
$i++;
|
313 |
-
}
|
314 |
-
elseif(strpos($doc, '@return') === 0)
|
315 |
-
{
|
316 |
-
// syntax: @return type desc
|
317 |
-
//$returns = preg_split('/\s+/', $doc);
|
318 |
-
if(preg_match('/@return\s+(\S+)\s+(.+)/', $doc, $matches))
|
319 |
-
{
|
320 |
-
$returns = php_2_xmlrpc_type($matches[1]);
|
321 |
-
if(isset($matches[2]))
|
322 |
-
{
|
323 |
-
$returnsDocs = $matches[2];
|
324 |
-
}
|
325 |
-
}
|
326 |
-
}
|
327 |
-
}
|
328 |
-
}
|
329 |
-
|
330 |
-
// execute introspection of actual function prototype
|
331 |
-
$params = array();
|
332 |
-
$i = 0;
|
333 |
-
foreach($func->getParameters() as $paramobj)
|
334 |
-
{
|
335 |
-
$params[$i] = array();
|
336 |
-
$params[$i]['name'] = '$'.$paramobj->getName();
|
337 |
-
$params[$i]['isoptional'] = $paramobj->isOptional();
|
338 |
-
$i++;
|
339 |
-
}
|
340 |
-
|
341 |
-
|
342 |
-
// start building of PHP code to be eval'd
|
343 |
-
$innercode = '';
|
344 |
-
$i = 0;
|
345 |
-
$parsvariations = array();
|
346 |
-
$pars = array();
|
347 |
-
$pnum = count($params);
|
348 |
-
foreach($params as $param)
|
349 |
-
{
|
350 |
-
if (isset($paramDocs[$i]['name']) && $paramDocs[$i]['name'] && strtolower($paramDocs[$i]['name']) != strtolower($param['name']))
|
351 |
-
{
|
352 |
-
// param name from phpdoc info does not match param definition!
|
353 |
-
$paramDocs[$i]['type'] = 'mixed';
|
354 |
-
}
|
355 |
-
|
356 |
-
if($param['isoptional'])
|
357 |
-
{
|
358 |
-
// this particular parameter is optional. save as valid previous list of parameters
|
359 |
-
$innercode .= "if (\$paramcount > $i) {\n";
|
360 |
-
$parsvariations[] = $pars;
|
361 |
-
}
|
362 |
-
$innercode .= "\$p$i = \$msg->getParam($i);\n";
|
363 |
-
if ($decode_php_objects)
|
364 |
-
{
|
365 |
-
$innercode .= "if (\$p{$i}->kindOf() == 'scalar') \$p$i = \$p{$i}->scalarval(); else \$p$i = php_{$prefix}_decode(\$p$i, array('decode_php_objs'));\n";
|
366 |
-
}
|
367 |
-
else
|
368 |
-
{
|
369 |
-
$innercode .= "if (\$p{$i}->kindOf() == 'scalar') \$p$i = \$p{$i}->scalarval(); else \$p$i = php_{$prefix}_decode(\$p$i);\n";
|
370 |
-
}
|
371 |
-
|
372 |
-
$pars[] = "\$p$i";
|
373 |
-
$i++;
|
374 |
-
if($param['isoptional'])
|
375 |
-
{
|
376 |
-
$innercode .= "}\n";
|
377 |
-
}
|
378 |
-
if($i == $pnum)
|
379 |
-
{
|
380 |
-
// last allowed parameters combination
|
381 |
-
$parsvariations[] = $pars;
|
382 |
-
}
|
383 |
-
}
|
384 |
-
|
385 |
-
$sigs = array();
|
386 |
-
$psigs = array();
|
387 |
-
if(count($parsvariations) == 0)
|
388 |
-
{
|
389 |
-
// only known good synopsis = no parameters
|
390 |
-
$parsvariations[] = array();
|
391 |
-
$minpars = 0;
|
392 |
-
}
|
393 |
-
else
|
394 |
-
{
|
395 |
-
$minpars = count($parsvariations[0]);
|
396 |
-
}
|
397 |
-
|
398 |
-
if($minpars)
|
399 |
-
{
|
400 |
-
// add to code the check for min params number
|
401 |
-
// NB: this check needs to be done BEFORE decoding param values
|
402 |
-
$innercode = "\$paramcount = \$msg->getNumParams();\n" .
|
403 |
-
"if (\$paramcount < $minpars) return new {$prefix}resp(0, {$GLOBALS['xmlrpcerr']['incorrect_params']}, '{$GLOBALS['xmlrpcstr']['incorrect_params']}');\n" . $innercode;
|
404 |
-
}
|
405 |
-
else
|
406 |
-
{
|
407 |
-
$innercode = "\$paramcount = \$msg->getNumParams();\n" . $innercode;
|
408 |
-
}
|
409 |
-
|
410 |
-
$innercode .= "\$np = false;\n";
|
411 |
-
// since there are no closures in php, if we are given an object instance,
|
412 |
-
// we store a pointer to it in a global var...
|
413 |
-
if ( is_array($funcname) && is_object($funcname[0]) )
|
414 |
-
{
|
415 |
-
$GLOBALS['xmlrpcWPFObjHolder'][$xmlrpcfuncname] =& $funcname[0];
|
416 |
-
$innercode .= "\$obj =& \$GLOBALS['xmlrpcWPFObjHolder']['$xmlrpcfuncname'];\n";
|
417 |
-
$realfuncname = '$obj->'.$funcname[1];
|
418 |
-
}
|
419 |
-
else
|
420 |
-
{
|
421 |
-
$realfuncname = $plainfuncname;
|
422 |
-
}
|
423 |
-
foreach($parsvariations as $pars)
|
424 |
-
{
|
425 |
-
$innercode .= "if (\$paramcount == " . count($pars) . ") \$retval = {$catch_warnings}$realfuncname(" . implode(',', $pars) . "); else\n";
|
426 |
-
// build a 'generic' signature (only use an appropriate return type)
|
427 |
-
$sig = array($returns);
|
428 |
-
$psig = array($returnsDocs);
|
429 |
-
for($i=0; $i < count($pars); $i++)
|
430 |
-
{
|
431 |
-
if (isset($paramDocs[$i]['type']))
|
432 |
-
{
|
433 |
-
$sig[] = php_2_xmlrpc_type($paramDocs[$i]['type']);
|
434 |
-
}
|
435 |
-
else
|
436 |
-
{
|
437 |
-
$sig[] = $GLOBALS['xmlrpcValue'];
|
438 |
-
}
|
439 |
-
$psig[] = isset($paramDocs[$i]['doc']) ? $paramDocs[$i]['doc'] : '';
|
440 |
-
}
|
441 |
-
$sigs[] = $sig;
|
442 |
-
$psigs[] = $psig;
|
443 |
-
}
|
444 |
-
$innercode .= "\$np = true;\n";
|
445 |
-
$innercode .= "if (\$np) return new {$prefix}resp(0, {$GLOBALS['xmlrpcerr']['incorrect_params']}, '{$GLOBALS['xmlrpcstr']['incorrect_params']}'); else {\n";
|
446 |
-
//$innercode .= "if (\$_xmlrpcs_error_occurred) return new xmlrpcresp(0, $GLOBALS['xmlrpcerr']user, \$_xmlrpcs_error_occurred); else\n";
|
447 |
-
$innercode .= "if (is_a(\$retval, '{$prefix}resp')) return \$retval; else\n";
|
448 |
-
if($returns == $GLOBALS['xmlrpcDateTime'] || $returns == $GLOBALS['xmlrpcBase64'])
|
449 |
-
{
|
450 |
-
$innercode .= "return new {$prefix}resp(new {$prefix}val(\$retval, '$returns'));";
|
451 |
-
}
|
452 |
-
else
|
453 |
-
{
|
454 |
-
if ($encode_php_objects)
|
455 |
-
$innercode .= "return new {$prefix}resp(php_{$prefix}_encode(\$retval, array('encode_php_objs')));\n";
|
456 |
-
else
|
457 |
-
$innercode .= "return new {$prefix}resp(php_{$prefix}_encode(\$retval));\n";
|
458 |
-
}
|
459 |
-
// shall we exclude functions returning by ref?
|
460 |
-
// if($func->returnsReference())
|
461 |
-
// return false;
|
462 |
-
$code = "function $xmlrpcfuncname(\$msg) {\n" . $innercode . "}\n}";
|
463 |
-
//print_r($code);
|
464 |
-
if ($buildit)
|
465 |
-
{
|
466 |
-
$allOK = 0;
|
467 |
-
eval($code.'$allOK=1;');
|
468 |
-
// alternative
|
469 |
-
//$xmlrpcfuncname = create_function('$m', $innercode);
|
470 |
-
|
471 |
-
if(!$allOK)
|
472 |
-
{
|
473 |
-
error_log('XML-RPC: could not create function '.$xmlrpcfuncname.' to wrap php function '.$plainfuncname);
|
474 |
-
return false;
|
475 |
-
}
|
476 |
-
}
|
477 |
-
|
478 |
-
/// @todo examine if $paramDocs matches $parsvariations and build array for
|
479 |
-
/// usage as method signature, plus put together a nice string for docs
|
480 |
-
|
481 |
-
$ret = array('function' => $xmlrpcfuncname, 'signature' => $sigs, 'docstring' => $desc, 'signature_docs' => $psigs, 'source' => $code);
|
482 |
-
return $ret;
|
483 |
-
}
|
484 |
-
}
|
485 |
-
|
486 |
-
/**
|
487 |
-
* Given a user-defined PHP class or php object, map its methods onto a list of
|
488 |
-
* PHP 'wrapper' functions that can be exposed as xmlrpc methods from an xmlrpc_server
|
489 |
-
* object and called from remote clients (as well as their corresponding signature info).
|
490 |
-
*
|
491 |
-
* @param mixed $classname the name of the class whose methods are to be exposed as xmlrpc methods, or an object instance of that class
|
492 |
-
* @param array $extra_options see the docs for wrap_php_method for more options
|
493 |
-
* string method_type 'static', 'nonstatic', 'all' and 'auto' (default); the latter will switch between static and non-static depending on wheter $classname is a class name or object instance
|
494 |
-
* @return array or false on failure
|
495 |
-
*
|
496 |
-
* @todo get_class_methods will return both static and non-static methods.
|
497 |
-
* we have to differentiate the action, depending on wheter we recived a class name or object
|
498 |
-
*/
|
499 |
-
function wrap_php_class($classname, $extra_options=array())
|
500 |
-
{
|
501 |
-
$methodfilter = isset($extra_options['method_filter']) ? $extra_options['method_filter'] : '';
|
502 |
-
$methodtype = isset($extra_options['method_type']) ? $extra_options['method_type'] : 'auto';
|
503 |
-
|
504 |
-
if(version_compare(phpversion(), '5.0.3') == -1)
|
505 |
-
{
|
506 |
-
// up to php 5.0.3 some useful reflection methods were missing
|
507 |
-
error_log('XML-RPC: cannot not wrap php functions unless running php version bigger than 5.0.3');
|
508 |
-
return false;
|
509 |
-
}
|
510 |
-
|
511 |
-
$result = array();
|
512 |
-
$mlist = get_class_methods($classname);
|
513 |
-
foreach($mlist as $mname)
|
514 |
-
{
|
515 |
-
if ($methodfilter == '' || preg_match($methodfilter, $mname))
|
516 |
-
{
|
517 |
-
// echo $mlist."\n";
|
518 |
-
$func = new ReflectionMethod($classname, $mname);
|
519 |
-
if(!$func->isPrivate() && !$func->isProtected() && !$func->isConstructor() && !$func->isDestructor() && !$func->isAbstract())
|
520 |
-
{
|
521 |
-
if(($func->isStatic && ($methodtype == 'all' || $methodtype == 'static' || ($methodtype == 'auto' && is_string($classname)))) ||
|
522 |
-
(!$func->isStatic && ($methodtype == 'all' || $methodtype == 'nonstatic' || ($methodtype == 'auto' && is_object($classname)))))
|
523 |
-
{
|
524 |
-
$methodwrap = wrap_php_function(array($classname, $mname), '', $extra_options);
|
525 |
-
if ( $methodwrap )
|
526 |
-
{
|
527 |
-
$result[$methodwrap['function']] = $methodwrap['function'];
|
528 |
-
}
|
529 |
-
}
|
530 |
-
}
|
531 |
-
}
|
532 |
-
}
|
533 |
-
return $result;
|
534 |
-
}
|
535 |
-
|
536 |
-
/**
|
537 |
-
* Given an xmlrpc client and a method name, register a php wrapper function
|
538 |
-
* that will call it and return results using native php types for both
|
539 |
-
* params and results. The generated php function will return an xmlrpcresp
|
540 |
-
* oject for failed xmlrpc calls
|
541 |
-
*
|
542 |
-
* Known limitations:
|
543 |
-
* - server must support system.methodsignature for the wanted xmlrpc method
|
544 |
-
* - for methods that expose many signatures, only one can be picked (we
|
545 |
-
* could in priciple check if signatures differ only by number of params
|
546 |
-
* and not by type, but it would be more complication than we can spare time)
|
547 |
-
* - nested xmlrpc params: the caller of the generated php function has to
|
548 |
-
* encode on its own the params passed to the php function if these are structs
|
549 |
-
* or arrays whose (sub)members include values of type datetime or base64
|
550 |
-
*
|
551 |
-
* Notes: the connection properties of the given client will be copied
|
552 |
-
* and reused for the connection used during the call to the generated
|
553 |
-
* php function.
|
554 |
-
* Calling the generated php function 'might' be slow: a new xmlrpc client
|
555 |
-
* is created on every invocation and an xmlrpc-connection opened+closed.
|
556 |
-
* An extra 'debug' param is appended to param list of xmlrpc method, useful
|
557 |
-
* for debugging purposes.
|
558 |
-
*
|
559 |
-
* @param xmlrpc_client $client an xmlrpc client set up correctly to communicate with target server
|
560 |
-
* @param string $methodname the xmlrpc method to be mapped to a php function
|
561 |
-
* @param array $extra_options array of options that specify conversion details. valid ptions include
|
562 |
-
* integer signum the index of the method signature to use in mapping (if method exposes many sigs)
|
563 |
-
* integer timeout timeout (in secs) to be used when executing function/calling remote method
|
564 |
-
* string protocol 'http' (default), 'http11' or 'https'
|
565 |
-
* string new_function_name the name of php function to create. If unsepcified, lib will pick an appropriate name
|
566 |
-
* string return_source if true return php code w. function definition instead fo function name
|
567 |
-
* bool encode_php_objs let php objects be sent to server using the 'improved' xmlrpc notation, so server can deserialize them as php objects
|
568 |
-
* bool decode_php_objs --- WARNING !!! possible security hazard. only use it with trusted servers ---
|
569 |
-
* mixed return_on_fault a php value to be returned when the xmlrpc call fails/returns a fault response (by default the xmlrpcresp object is returned in this case). If a string is used, '%faultCode%' and '%faultString%' tokens will be substituted with actual error values
|
570 |
-
* bool debug set it to 1 or 2 to see debug results of querying server for method synopsis
|
571 |
-
* @return string the name of the generated php function (or false) - OR AN ARRAY...
|
572 |
-
*/
|
573 |
-
function wrap_xmlrpc_method($client, $methodname, $extra_options=0, $timeout=0, $protocol='', $newfuncname='')
|
574 |
-
{
|
575 |
-
// mind numbing: let caller use sane calling convention (as per javadoc, 3 params),
|
576 |
-
// OR the 2.0 calling convention (no options) - we really love backward compat, don't we?
|
577 |
-
if (!is_array($extra_options))
|
578 |
-
{
|
579 |
-
$signum = $extra_options;
|
580 |
-
$extra_options = array();
|
581 |
-
}
|
582 |
-
else
|
583 |
-
{
|
584 |
-
$signum = isset($extra_options['signum']) ? (int)$extra_options['signum'] : 0;
|
585 |
-
$timeout = isset($extra_options['timeout']) ? (int)$extra_options['timeout'] : 0;
|
586 |
-
$protocol = isset($extra_options['protocol']) ? $extra_options['protocol'] : '';
|
587 |
-
$newfuncname = isset($extra_options['new_function_name']) ? $extra_options['new_function_name'] : '';
|
588 |
-
}
|
589 |
-
//$encode_php_objects = in_array('encode_php_objects', $extra_options);
|
590 |
-
//$verbatim_client_copy = in_array('simple_client_copy', $extra_options) ? 1 :
|
591 |
-
// in_array('build_class_code', $extra_options) ? 2 : 0;
|
592 |
-
|
593 |
-
$encode_php_objects = isset($extra_options['encode_php_objs']) ? (bool)$extra_options['encode_php_objs'] : false;
|
594 |
-
$decode_php_objects = isset($extra_options['decode_php_objs']) ? (bool)$extra_options['decode_php_objs'] : false;
|
595 |
-
$simple_client_copy = isset($extra_options['simple_client_copy']) ? (int)($extra_options['simple_client_copy']) : 0;
|
596 |
-
$buildit = isset($extra_options['return_source']) ? !($extra_options['return_source']) : true;
|
597 |
-
$prefix = isset($extra_options['prefix']) ? $extra_options['prefix'] : 'xmlrpc';
|
598 |
-
if (isset($extra_options['return_on_fault']))
|
599 |
-
{
|
600 |
-
$decode_fault = true;
|
601 |
-
$fault_response = $extra_options['return_on_fault'];
|
602 |
-
}
|
603 |
-
else
|
604 |
-
{
|
605 |
-
$decode_fault = false;
|
606 |
-
$fault_response = '';
|
607 |
-
}
|
608 |
-
$debug = isset($extra_options['debug']) ? ($extra_options['debug']) : 0;
|
609 |
-
|
610 |
-
$msgclass = $prefix.'msg';
|
611 |
-
$valclass = $prefix.'val';
|
612 |
-
$decodefunc = 'php_'.$prefix.'_decode';
|
613 |
-
|
614 |
-
$msg = new $msgclass('system.methodSignature');
|
615 |
-
$msg->addparam(new $valclass($methodname));
|
616 |
-
$client->setDebug($debug);
|
617 |
-
$response =& $client->send($msg, $timeout, $protocol);
|
618 |
-
if($response->faultCode())
|
619 |
-
{
|
620 |
-
error_log('XML-RPC: could not retrieve method signature from remote server for method '.$methodname);
|
621 |
-
return false;
|
622 |
-
}
|
623 |
-
else
|
624 |
-
{
|
625 |
-
$msig = $response->value();
|
626 |
-
if ($client->return_type != 'phpvals')
|
627 |
-
{
|
628 |
-
$msig = $decodefunc($msig);
|
629 |
-
}
|
630 |
-
if(!is_array($msig) || count($msig) <= $signum)
|
631 |
-
{
|
632 |
-
error_log('XML-RPC: could not retrieve method signature nr.'.$signum.' from remote server for method '.$methodname);
|
633 |
-
return false;
|
634 |
-
}
|
635 |
-
else
|
636 |
-
{
|
637 |
-
// pick a suitable name for the new function, avoiding collisions
|
638 |
-
if($newfuncname != '')
|
639 |
-
{
|
640 |
-
$xmlrpcfuncname = $newfuncname;
|
641 |
-
}
|
642 |
-
else
|
643 |
-
{
|
644 |
-
// take care to insure that methodname is translated to valid
|
645 |
-
// php function name
|
646 |
-
$xmlrpcfuncname = $prefix.'_'.preg_replace(array('/\./', '/[^a-zA-Z0-9_\x7f-\xff]/'),
|
647 |
-
array('_', ''), $methodname);
|
648 |
-
}
|
649 |
-
while($buildit && function_exists($xmlrpcfuncname))
|
650 |
-
{
|
651 |
-
$xmlrpcfuncname .= 'x';
|
652 |
-
}
|
653 |
-
|
654 |
-
$msig = $msig[$signum];
|
655 |
-
$mdesc = '';
|
656 |
-
// if in 'offline' mode, get method description too.
|
657 |
-
// in online mode, favour speed of operation
|
658 |
-
if(!$buildit)
|
659 |
-
{
|
660 |
-
$msg = new $msgclass('system.methodHelp');
|
661 |
-
$msg->addparam(new $valclass($methodname));
|
662 |
-
$response =& $client->send($msg, $timeout, $protocol);
|
663 |
-
if (!$response->faultCode())
|
664 |
-
{
|
665 |
-
$mdesc = $response->value();
|
666 |
-
if ($client->return_type != 'phpvals')
|
667 |
-
{
|
668 |
-
$mdesc = $mdesc->scalarval();
|
669 |
-
}
|
670 |
-
}
|
671 |
-
}
|
672 |
-
|
673 |
-
$results = build_remote_method_wrapper_code($client, $methodname,
|
674 |
-
$xmlrpcfuncname, $msig, $mdesc, $timeout, $protocol, $simple_client_copy,
|
675 |
-
$prefix, $decode_php_objects, $encode_php_objects, $decode_fault,
|
676 |
-
$fault_response);
|
677 |
-
|
678 |
-
//print_r($code);
|
679 |
-
if ($buildit)
|
680 |
-
{
|
681 |
-
$allOK = 0;
|
682 |
-
eval($results['source'].'$allOK=1;');
|
683 |
-
// alternative
|
684 |
-
//$xmlrpcfuncname = create_function('$m', $innercode);
|
685 |
-
if($allOK)
|
686 |
-
{
|
687 |
-
return $xmlrpcfuncname;
|
688 |
-
}
|
689 |
-
else
|
690 |
-
{
|
691 |
-
error_log('XML-RPC: could not create function '.$xmlrpcfuncname.' to wrap remote method '.$methodname);
|
692 |
-
return false;
|
693 |
-
}
|
694 |
-
}
|
695 |
-
else
|
696 |
-
{
|
697 |
-
$results['function'] = $xmlrpcfuncname;
|
698 |
-
return $results;
|
699 |
-
}
|
700 |
-
}
|
701 |
-
}
|
702 |
-
}
|
703 |
-
|
704 |
-
/**
|
705 |
-
* Similar to wrap_xmlrpc_method, but will generate a php class that wraps
|
706 |
-
* all xmlrpc methods exposed by the remote server as own methods.
|
707 |
-
* For more details see wrap_xmlrpc_method.
|
708 |
-
* @param xmlrpc_client $client the client obj all set to query the desired server
|
709 |
-
* @param array $extra_options list of options for wrapped code
|
710 |
-
* @return mixed false on error, the name of the created class if all ok or an array with code, class name and comments (if the appropriatevoption is set in extra_options)
|
711 |
-
*/
|
712 |
-
function wrap_xmlrpc_server($client, $extra_options=array())
|
713 |
-
{
|
714 |
-
$methodfilter = isset($extra_options['method_filter']) ? $extra_options['method_filter'] : '';
|
715 |
-
//$signum = isset($extra_options['signum']) ? (int)$extra_options['signum'] : 0;
|
716 |
-
$timeout = isset($extra_options['timeout']) ? (int)$extra_options['timeout'] : 0;
|
717 |
-
$protocol = isset($extra_options['protocol']) ? $extra_options['protocol'] : '';
|
718 |
-
$newclassname = isset($extra_options['new_class_name']) ? $extra_options['new_class_name'] : '';
|
719 |
-
$encode_php_objects = isset($extra_options['encode_php_objs']) ? (bool)$extra_options['encode_php_objs'] : false;
|
720 |
-
$decode_php_objects = isset($extra_options['decode_php_objs']) ? (bool)$extra_options['decode_php_objs'] : false;
|
721 |
-
$verbatim_client_copy = isset($extra_options['simple_client_copy']) ? !($extra_options['simple_client_copy']) : true;
|
722 |
-
$buildit = isset($extra_options['return_source']) ? !($extra_options['return_source']) : true;
|
723 |
-
$prefix = isset($extra_options['prefix']) ? $extra_options['prefix'] : 'xmlrpc';
|
724 |
-
|
725 |
-
$msgclass = $prefix.'msg';
|
726 |
-
//$valclass = $prefix.'val';
|
727 |
-
$decodefunc = 'php_'.$prefix.'_decode';
|
728 |
-
|
729 |
-
$msg = new $msgclass('system.listMethods');
|
730 |
-
$response =& $client->send($msg, $timeout, $protocol);
|
731 |
-
if($response->faultCode())
|
732 |
-
{
|
733 |
-
error_log('XML-RPC: could not retrieve method list from remote server');
|
734 |
-
return false;
|
735 |
-
}
|
736 |
-
else
|
737 |
-
{
|
738 |
-
$mlist = $response->value();
|
739 |
-
if ($client->return_type != 'phpvals')
|
740 |
-
{
|
741 |
-
$mlist = $decodefunc($mlist);
|
742 |
-
}
|
743 |
-
if(!is_array($mlist) || !count($mlist))
|
744 |
-
{
|
745 |
-
error_log('XML-RPC: could not retrieve meaningful method list from remote server');
|
746 |
-
return false;
|
747 |
-
}
|
748 |
-
else
|
749 |
-
{
|
750 |
-
// pick a suitable name for the new function, avoiding collisions
|
751 |
-
if($newclassname != '')
|
752 |
-
{
|
753 |
-
$xmlrpcclassname = $newclassname;
|
754 |
-
}
|
755 |
-
else
|
756 |
-
{
|
757 |
-
$xmlrpcclassname = $prefix.'_'.preg_replace(array('/\./', '/[^a-zA-Z0-9_\x7f-\xff]/'),
|
758 |
-
array('_', ''), $client->server).'_client';
|
759 |
-
}
|
760 |
-
while($buildit && class_exists($xmlrpcclassname))
|
761 |
-
{
|
762 |
-
$xmlrpcclassname .= 'x';
|
763 |
-
}
|
764 |
-
|
765 |
-
/// @todo add function setdebug() to new class, to enable/disable debugging
|
766 |
-
$source = "class $xmlrpcclassname\n{\nvar \$client;\n\n";
|
767 |
-
$source .= "function $xmlrpcclassname()\n{\n";
|
768 |
-
$source .= build_client_wrapper_code($client, $verbatim_client_copy, $prefix);
|
769 |
-
$source .= "\$this->client =& \$client;\n}\n\n";
|
770 |
-
$opts = array('simple_client_copy' => 2, 'return_source' => true,
|
771 |
-
'timeout' => $timeout, 'protocol' => $protocol,
|
772 |
-
'encode_php_objs' => $encode_php_objects, 'prefix' => $prefix,
|
773 |
-
'decode_php_objs' => $decode_php_objects
|
774 |
-
);
|
775 |
-
/// @todo build javadoc for class definition, too
|
776 |
-
foreach($mlist as $mname)
|
777 |
-
{
|
778 |
-
if ($methodfilter == '' || preg_match($methodfilter, $mname))
|
779 |
-
{
|
780 |
-
$opts['new_function_name'] = preg_replace(array('/\./', '/[^a-zA-Z0-9_\x7f-\xff]/'),
|
781 |
-
array('_', ''), $mname);
|
782 |
-
$methodwrap = wrap_xmlrpc_method($client, $mname, $opts);
|
783 |
-
if ($methodwrap)
|
784 |
-
{
|
785 |
-
if (!$buildit)
|
786 |
-
{
|
787 |
-
$source .= $methodwrap['docstring'];
|
788 |
-
}
|
789 |
-
$source .= $methodwrap['source']."\n";
|
790 |
-
}
|
791 |
-
else
|
792 |
-
{
|
793 |
-
error_log('XML-RPC: will not create class method to wrap remote method '.$mname);
|
794 |
-
}
|
795 |
-
}
|
796 |
-
}
|
797 |
-
$source .= "}\n";
|
798 |
-
if ($buildit)
|
799 |
-
{
|
800 |
-
$allOK = 0;
|
801 |
-
eval($source.'$allOK=1;');
|
802 |
-
// alternative
|
803 |
-
//$xmlrpcfuncname = create_function('$m', $innercode);
|
804 |
-
if($allOK)
|
805 |
-
{
|
806 |
-
return $xmlrpcclassname;
|
807 |
-
}
|
808 |
-
else
|
809 |
-
{
|
810 |
-
error_log('XML-RPC: could not create class '.$xmlrpcclassname.' to wrap remote server '.$client->server);
|
811 |
-
return false;
|
812 |
-
}
|
813 |
-
}
|
814 |
-
else
|
815 |
-
{
|
816 |
-
return array('class' => $xmlrpcclassname, 'code' => $source, 'docstring' => '');
|
817 |
-
}
|
818 |
-
}
|
819 |
-
}
|
820 |
-
}
|
821 |
-
|
822 |
-
/**
|
823 |
-
* Given the necessary info, build php code that creates a new function to
|
824 |
-
* invoke a remote xmlrpc method.
|
825 |
-
* Take care that no full checking of input parameters is done to ensure that
|
826 |
-
* valid php code is emitted.
|
827 |
-
* Note: real spaghetti code follows...
|
828 |
-
* @access private
|
829 |
-
*/
|
830 |
-
function build_remote_method_wrapper_code($client, $methodname, $xmlrpcfuncname,
|
831 |
-
$msig, $mdesc='', $timeout=0, $protocol='', $client_copy_mode=0, $prefix='xmlrpc',
|
832 |
-
$decode_php_objects=false, $encode_php_objects=false, $decode_fault=false,
|
833 |
-
$fault_response='')
|
834 |
-
{
|
835 |
-
$code = "function $xmlrpcfuncname (";
|
836 |
-
if ($client_copy_mode < 2)
|
837 |
-
{
|
838 |
-
// client copy mode 0 or 1 == partial / full client copy in emitted code
|
839 |
-
$innercode = build_client_wrapper_code($client, $client_copy_mode, $prefix);
|
840 |
-
$innercode .= "\$client->setDebug(\$debug);\n";
|
841 |
-
$this_ = '';
|
842 |
-
}
|
843 |
-
else
|
844 |
-
{
|
845 |
-
// client copy mode 2 == no client copy in emitted code
|
846 |
-
$innercode = '';
|
847 |
-
$this_ = 'this->';
|
848 |
-
}
|
849 |
-
$innercode .= "\$msg = new {$prefix}msg('$methodname');\n";
|
850 |
-
|
851 |
-
if ($mdesc != '')
|
852 |
-
{
|
853 |
-
// take care that PHP comment is not terminated unwillingly by method description
|
854 |
-
$mdesc = "/**\n* ".str_replace('*/', '* /', $mdesc)."\n";
|
855 |
-
}
|
856 |
-
else
|
857 |
-
{
|
858 |
-
$mdesc = "/**\nFunction $xmlrpcfuncname\n";
|
859 |
-
}
|
860 |
-
|
861 |
-
// param parsing
|
862 |
-
$plist = array();
|
863 |
-
$pcount = count($msig);
|
864 |
-
for($i = 1; $i < $pcount; $i++)
|
865 |
-
{
|
866 |
-
$plist[] = "\$p$i";
|
867 |
-
$ptype = $msig[$i];
|
868 |
-
if($ptype == 'i4' || $ptype == 'int' || $ptype == 'boolean' || $ptype == 'double' ||
|
869 |
-
$ptype == 'string' || $ptype == 'dateTime.iso8601' || $ptype == 'base64' || $ptype == 'null')
|
870 |
-
{
|
871 |
-
// only build directly xmlrpcvals when type is known and scalar
|
872 |
-
$innercode .= "\$p$i = new {$prefix}val(\$p$i, '$ptype');\n";
|
873 |
-
}
|
874 |
-
else
|
875 |
-
{
|
876 |
-
if ($encode_php_objects)
|
877 |
-
{
|
878 |
-
$innercode .= "\$p$i =& php_{$prefix}_encode(\$p$i, array('encode_php_objs'));\n";
|
879 |
-
}
|
880 |
-
else
|
881 |
-
{
|
882 |
-
$innercode .= "\$p$i =& php_{$prefix}_encode(\$p$i);\n";
|
883 |
-
}
|
884 |
-
}
|
885 |
-
$innercode .= "\$msg->addparam(\$p$i);\n";
|
886 |
-
$mdesc .= '* @param '.xmlrpc_2_php_type($ptype)." \$p$i\n";
|
887 |
-
}
|
888 |
-
if ($client_copy_mode < 2)
|
889 |
-
{
|
890 |
-
$plist[] = '$debug=0';
|
891 |
-
$mdesc .= "* @param int \$debug when 1 (or 2) will enable debugging of the underlying {$prefix} call (defaults to 0)\n";
|
892 |
-
}
|
893 |
-
$plist = implode(', ', $plist);
|
894 |
-
$mdesc .= '* @return '.xmlrpc_2_php_type($msig[0])." (or an {$prefix}resp obj instance if call fails)\n*/\n";
|
895 |
-
|
896 |
-
$innercode .= "\$res =& \${$this_}client->send(\$msg, $timeout, '$protocol');\n";
|
897 |
-
if ($decode_fault)
|
898 |
-
{
|
899 |
-
if (is_string($fault_response) && ((strpos($fault_response, '%faultCode%') !== false) || (strpos($fault_response, '%faultString%') !== false)))
|
900 |
-
{
|
901 |
-
$respcode = "str_replace(array('%faultCode%', '%faultString%'), array(\$res->faultCode(), \$res->faultString()), '".str_replace("'", "''", $fault_response)."')";
|
902 |
-
}
|
903 |
-
else
|
904 |
-
{
|
905 |
-
$respcode = var_export($fault_response, true);
|
906 |
-
}
|
907 |
-
}
|
908 |
-
else
|
909 |
-
{
|
910 |
-
$respcode = '$res';
|
911 |
-
}
|
912 |
-
if ($decode_php_objects)
|
913 |
-
{
|
914 |
-
$innercode .= "if (\$res->faultcode()) return $respcode; else return php_{$prefix}_decode(\$res->value(), array('decode_php_objs'));";
|
915 |
-
}
|
916 |
-
else
|
917 |
-
{
|
918 |
-
$innercode .= "if (\$res->faultcode()) return $respcode; else return php_{$prefix}_decode(\$res->value());";
|
919 |
-
}
|
920 |
-
|
921 |
-
$code = $code . $plist. ") {\n" . $innercode . "\n}\n";
|
922 |
-
|
923 |
-
return array('source' => $code, 'docstring' => $mdesc);
|
924 |
-
}
|
925 |
-
|
926 |
-
/**
|
927 |
-
* Given necessary info, generate php code that will rebuild a client object
|
928 |
-
* Take care that no full checking of input parameters is done to ensure that
|
929 |
-
* valid php code is emitted.
|
930 |
-
* @access private
|
931 |
-
*/
|
932 |
-
function build_client_wrapper_code($client, $verbatim_client_copy, $prefix='xmlrpc')
|
933 |
-
{
|
934 |
-
$code = "\$client = new {$prefix}_client('".str_replace("'", "\'", $client->path).
|
935 |
-
"', '" . str_replace("'", "\'", $client->server) . "', $client->port);\n";
|
936 |
-
|
937 |
-
// copy all client fields to the client that will be generated runtime
|
938 |
-
// (this provides for future expansion or subclassing of client obj)
|
939 |
-
if ($verbatim_client_copy)
|
940 |
-
{
|
941 |
-
foreach($client as $fld => $val)
|
942 |
-
{
|
943 |
-
if($fld != 'debug' && $fld != 'return_type')
|
944 |
-
{
|
945 |
-
$val = var_export($val, true);
|
946 |
-
$code .= "\$client->$fld = $val;\n";
|
947 |
-
}
|
948 |
-
}
|
949 |
-
}
|
950 |
-
// only make sure that client always returns the correct data type
|
951 |
-
$code .= "\$client->return_type = '{$prefix}vals';\n";
|
952 |
-
//$code .= "\$client->setDebug(\$debug);\n";
|
953 |
-
return $code;
|
954 |
-
}
|
955 |
-
?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/vendor/infusionsoft/xmlrpc-3.0/lib/xmlrpcs.inc
DELETED
@@ -1,1246 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
// by Edd Dumbill (C) 1999-2002
|
3 |
-
// <edd@usefulinc.com>
|
4 |
-
// $Id: xmlrpcs.inc,v 1.71 2008/10/29 23:41:28 ggiunta Exp $
|
5 |
-
|
6 |
-
// Copyright (c) 1999,2000,2002 Edd Dumbill.
|
7 |
-
// All rights reserved.
|
8 |
-
//
|
9 |
-
// Redistribution and use in source and binary forms, with or without
|
10 |
-
// modification, are permitted provided that the following conditions
|
11 |
-
// are met:
|
12 |
-
//
|
13 |
-
// * Redistributions of source code must retain the above copyright
|
14 |
-
// notice, this list of conditions and the following disclaimer.
|
15 |
-
//
|
16 |
-
// * Redistributions in binary form must reproduce the above
|
17 |
-
// copyright notice, this list of conditions and the following
|
18 |
-
// disclaimer in the documentation and/or other materials provided
|
19 |
-
// with the distribution.
|
20 |
-
//
|
21 |
-
// * Neither the name of the "XML-RPC for PHP" nor the names of its
|
22 |
-
// contributors may be used to endorse or promote products derived
|
23 |
-
// from this software without specific prior written permission.
|
24 |
-
//
|
25 |
-
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
26 |
-
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
27 |
-
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
28 |
-
// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
29 |
-
// REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
30 |
-
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
31 |
-
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
32 |
-
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
33 |
-
// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
34 |
-
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
35 |
-
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
36 |
-
// OF THE POSSIBILITY OF SUCH DAMAGE.
|
37 |
-
|
38 |
-
// XML RPC Server class
|
39 |
-
// requires: xmlrpc.inc
|
40 |
-
|
41 |
-
$GLOBALS['xmlrpcs_capabilities'] = array(
|
42 |
-
// xmlrpc spec: always supported
|
43 |
-
'xmlrpc' => new xmlrpcval(array(
|
44 |
-
'specUrl' => new xmlrpcval('http://www.xmlrpc.com/spec', 'string'),
|
45 |
-
'specVersion' => new xmlrpcval(1, 'int')
|
46 |
-
), 'struct'),
|
47 |
-
// if we support system.xxx functions, we always support multicall, too...
|
48 |
-
// Note that, as of 2006/09/17, the following URL does not respond anymore
|
49 |
-
'system.multicall' => new xmlrpcval(array(
|
50 |
-
'specUrl' => new xmlrpcval('http://www.xmlrpc.com/discuss/msgReader$1208', 'string'),
|
51 |
-
'specVersion' => new xmlrpcval(1, 'int')
|
52 |
-
), 'struct'),
|
53 |
-
// introspection: version 2! we support 'mixed', too
|
54 |
-
'introspection' => new xmlrpcval(array(
|
55 |
-
'specUrl' => new xmlrpcval('http://phpxmlrpc.sourceforge.net/doc-2/ch10.html', 'string'),
|
56 |
-
'specVersion' => new xmlrpcval(2, 'int')
|
57 |
-
), 'struct')
|
58 |
-
);
|
59 |
-
|
60 |
-
/* Functions that implement system.XXX methods of xmlrpc servers */
|
61 |
-
$_xmlrpcs_getCapabilities_sig=array(array($GLOBALS['xmlrpcStruct']));
|
62 |
-
$_xmlrpcs_getCapabilities_doc='This method lists all the capabilites that the XML-RPC server has: the (more or less standard) extensions to the xmlrpc spec that it adheres to';
|
63 |
-
$_xmlrpcs_getCapabilities_sdoc=array(array('list of capabilities, described as structs with a version number and url for the spec'));
|
64 |
-
function _xmlrpcs_getCapabilities($server, $m=null)
|
65 |
-
{
|
66 |
-
$outAr = $GLOBALS['xmlrpcs_capabilities'];
|
67 |
-
// NIL extension
|
68 |
-
if ($GLOBALS['xmlrpc_null_extension']) {
|
69 |
-
$outAr['nil'] = new xmlrpcval(array(
|
70 |
-
'specUrl' => new xmlrpcval('http://www.ontosys.com/xml-rpc/extensions.php', 'string'),
|
71 |
-
'specVersion' => new xmlrpcval(1, 'int')
|
72 |
-
), 'struct');
|
73 |
-
}
|
74 |
-
return new xmlrpcresp(new xmlrpcval($outAr, 'struct'));
|
75 |
-
}
|
76 |
-
|
77 |
-
// listMethods: signature was either a string, or nothing.
|
78 |
-
// The useless string variant has been removed
|
79 |
-
$_xmlrpcs_listMethods_sig=array(array($GLOBALS['xmlrpcArray']));
|
80 |
-
$_xmlrpcs_listMethods_doc='This method lists all the methods that the XML-RPC server knows how to dispatch';
|
81 |
-
$_xmlrpcs_listMethods_sdoc=array(array('list of method names'));
|
82 |
-
function _xmlrpcs_listMethods($server, $m=null) // if called in plain php values mode, second param is missing
|
83 |
-
{
|
84 |
-
|
85 |
-
$outAr=array();
|
86 |
-
foreach($server->dmap as $key => $val)
|
87 |
-
{
|
88 |
-
$outAr[]=new xmlrpcval($key, 'string');
|
89 |
-
}
|
90 |
-
if($server->allow_system_funcs)
|
91 |
-
{
|
92 |
-
foreach($GLOBALS['_xmlrpcs_dmap'] as $key => $val)
|
93 |
-
{
|
94 |
-
$outAr[]=new xmlrpcval($key, 'string');
|
95 |
-
}
|
96 |
-
}
|
97 |
-
return new xmlrpcresp(new xmlrpcval($outAr, 'array'));
|
98 |
-
}
|
99 |
-
|
100 |
-
$_xmlrpcs_methodSignature_sig=array(array($GLOBALS['xmlrpcArray'], $GLOBALS['xmlrpcString']));
|
101 |
-
$_xmlrpcs_methodSignature_doc='Returns an array of known signatures (an array of arrays) for the method name passed. If no signatures are known, returns a none-array (test for type != array to detect missing signature)';
|
102 |
-
$_xmlrpcs_methodSignature_sdoc=array(array('list of known signatures, each sig being an array of xmlrpc type names', 'name of method to be described'));
|
103 |
-
function _xmlrpcs_methodSignature($server, $m)
|
104 |
-
{
|
105 |
-
// let accept as parameter both an xmlrpcval or string
|
106 |
-
if (is_object($m))
|
107 |
-
{
|
108 |
-
$methName=$m->getParam(0);
|
109 |
-
$methName=$methName->scalarval();
|
110 |
-
}
|
111 |
-
else
|
112 |
-
{
|
113 |
-
$methName=$m;
|
114 |
-
}
|
115 |
-
if(strpos($methName, "system.") === 0)
|
116 |
-
{
|
117 |
-
$dmap=$GLOBALS['_xmlrpcs_dmap']; $sysCall=1;
|
118 |
-
}
|
119 |
-
else
|
120 |
-
{
|
121 |
-
$dmap=$server->dmap; $sysCall=0;
|
122 |
-
}
|
123 |
-
if(isset($dmap[$methName]))
|
124 |
-
{
|
125 |
-
if(isset($dmap[$methName]['signature']))
|
126 |
-
{
|
127 |
-
$sigs=array();
|
128 |
-
foreach($dmap[$methName]['signature'] as $inSig)
|
129 |
-
{
|
130 |
-
$cursig=array();
|
131 |
-
foreach($inSig as $sig)
|
132 |
-
{
|
133 |
-
$cursig[]=new xmlrpcval($sig, 'string');
|
134 |
-
}
|
135 |
-
$sigs[]=new xmlrpcval($cursig, 'array');
|
136 |
-
}
|
137 |
-
$r=new xmlrpcresp(new xmlrpcval($sigs, 'array'));
|
138 |
-
}
|
139 |
-
else
|
140 |
-
{
|
141 |
-
// NB: according to the official docs, we should be returning a
|
142 |
-
// "none-array" here, which means not-an-array
|
143 |
-
$r=new xmlrpcresp(new xmlrpcval('undef', 'string'));
|
144 |
-
}
|
145 |
-
}
|
146 |
-
else
|
147 |
-
{
|
148 |
-
$r=new xmlrpcresp(0,$GLOBALS['xmlrpcerr']['introspect_unknown'], $GLOBALS['xmlrpcstr']['introspect_unknown']);
|
149 |
-
}
|
150 |
-
return $r;
|
151 |
-
}
|
152 |
-
|
153 |
-
$_xmlrpcs_methodHelp_sig=array(array($GLOBALS['xmlrpcString'], $GLOBALS['xmlrpcString']));
|
154 |
-
$_xmlrpcs_methodHelp_doc='Returns help text if defined for the method passed, otherwise returns an empty string';
|
155 |
-
$_xmlrpcs_methodHelp_sdoc=array(array('method description', 'name of the method to be described'));
|
156 |
-
function _xmlrpcs_methodHelp($server, $m)
|
157 |
-
{
|
158 |
-
// let accept as parameter both an xmlrpcval or string
|
159 |
-
if (is_object($m))
|
160 |
-
{
|
161 |
-
$methName=$m->getParam(0);
|
162 |
-
$methName=$methName->scalarval();
|
163 |
-
}
|
164 |
-
else
|
165 |
-
{
|
166 |
-
$methName=$m;
|
167 |
-
}
|
168 |
-
if(strpos($methName, "system.") === 0)
|
169 |
-
{
|
170 |
-
$dmap=$GLOBALS['_xmlrpcs_dmap']; $sysCall=1;
|
171 |
-
}
|
172 |
-
else
|
173 |
-
{
|
174 |
-
$dmap=$server->dmap; $sysCall=0;
|
175 |
-
}
|
176 |
-
if(isset($dmap[$methName]))
|
177 |
-
{
|
178 |
-
if(isset($dmap[$methName]['docstring']))
|
179 |
-
{
|
180 |
-
$r=new xmlrpcresp(new xmlrpcval($dmap[$methName]['docstring']), 'string');
|
181 |
-
}
|
182 |
-
else
|
183 |
-
{
|
184 |
-
$r=new xmlrpcresp(new xmlrpcval('', 'string'));
|
185 |
-
}
|
186 |
-
}
|
187 |
-
else
|
188 |
-
{
|
189 |
-
$r=new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['introspect_unknown'], $GLOBALS['xmlrpcstr']['introspect_unknown']);
|
190 |
-
}
|
191 |
-
return $r;
|
192 |
-
}
|
193 |
-
|
194 |
-
$_xmlrpcs_multicall_sig = array(array($GLOBALS['xmlrpcArray'], $GLOBALS['xmlrpcArray']));
|
195 |
-
$_xmlrpcs_multicall_doc = 'Boxcar multiple RPC calls in one request. See http://www.xmlrpc.com/discuss/msgReader$1208 for details';
|
196 |
-
$_xmlrpcs_multicall_sdoc = array(array('list of response structs, where each struct has the usual members', 'list of calls, with each call being represented as a struct, with members "methodname" and "params"'));
|
197 |
-
function _xmlrpcs_multicall_error($err)
|
198 |
-
{
|
199 |
-
if(is_string($err))
|
200 |
-
{
|
201 |
-
$str = $GLOBALS['xmlrpcstr']["multicall_${err}"];
|
202 |
-
$code = $GLOBALS['xmlrpcerr']["multicall_${err}"];
|
203 |
-
}
|
204 |
-
else
|
205 |
-
{
|
206 |
-
$code = $err->faultCode();
|
207 |
-
$str = $err->faultString();
|
208 |
-
}
|
209 |
-
$struct = array();
|
210 |
-
$struct['faultCode'] = new xmlrpcval($code, 'int');
|
211 |
-
$struct['faultString'] = new xmlrpcval($str, 'string');
|
212 |
-
return new xmlrpcval($struct, 'struct');
|
213 |
-
}
|
214 |
-
|
215 |
-
function _xmlrpcs_multicall_do_call($server, $call)
|
216 |
-
{
|
217 |
-
if($call->kindOf() != 'struct')
|
218 |
-
{
|
219 |
-
return _xmlrpcs_multicall_error('notstruct');
|
220 |
-
}
|
221 |
-
$methName = @$call->structmem('methodName');
|
222 |
-
if(!$methName)
|
223 |
-
{
|
224 |
-
return _xmlrpcs_multicall_error('nomethod');
|
225 |
-
}
|
226 |
-
if($methName->kindOf() != 'scalar' || $methName->scalartyp() != 'string')
|
227 |
-
{
|
228 |
-
return _xmlrpcs_multicall_error('notstring');
|
229 |
-
}
|
230 |
-
if($methName->scalarval() == 'system.multicall')
|
231 |
-
{
|
232 |
-
return _xmlrpcs_multicall_error('recursion');
|
233 |
-
}
|
234 |
-
|
235 |
-
$params = @$call->structmem('params');
|
236 |
-
if(!$params)
|
237 |
-
{
|
238 |
-
return _xmlrpcs_multicall_error('noparams');
|
239 |
-
}
|
240 |
-
if($params->kindOf() != 'array')
|
241 |
-
{
|
242 |
-
return _xmlrpcs_multicall_error('notarray');
|
243 |
-
}
|
244 |
-
$numParams = $params->arraysize();
|
245 |
-
|
246 |
-
$msg = new xmlrpcmsg($methName->scalarval());
|
247 |
-
for($i = 0; $i < $numParams; $i++)
|
248 |
-
{
|
249 |
-
if(!$msg->addParam($params->arraymem($i)))
|
250 |
-
{
|
251 |
-
$i++;
|
252 |
-
return _xmlrpcs_multicall_error(new xmlrpcresp(0,
|
253 |
-
$GLOBALS['xmlrpcerr']['incorrect_params'],
|
254 |
-
$GLOBALS['xmlrpcstr']['incorrect_params'] . ": probable xml error in param " . $i));
|
255 |
-
}
|
256 |
-
}
|
257 |
-
|
258 |
-
$result = $server->execute($msg);
|
259 |
-
|
260 |
-
if($result->faultCode() != 0)
|
261 |
-
{
|
262 |
-
return _xmlrpcs_multicall_error($result); // Method returned fault.
|
263 |
-
}
|
264 |
-
|
265 |
-
return new xmlrpcval(array($result->value()), 'array');
|
266 |
-
}
|
267 |
-
|
268 |
-
function _xmlrpcs_multicall_do_call_phpvals($server, $call)
|
269 |
-
{
|
270 |
-
if(!is_array($call))
|
271 |
-
{
|
272 |
-
return _xmlrpcs_multicall_error('notstruct');
|
273 |
-
}
|
274 |
-
if(!array_key_exists('methodName', $call))
|
275 |
-
{
|
276 |
-
return _xmlrpcs_multicall_error('nomethod');
|
277 |
-
}
|
278 |
-
if (!is_string($call['methodName']))
|
279 |
-
{
|
280 |
-
return _xmlrpcs_multicall_error('notstring');
|
281 |
-
}
|
282 |
-
if($call['methodName'] == 'system.multicall')
|
283 |
-
{
|
284 |
-
return _xmlrpcs_multicall_error('recursion');
|
285 |
-
}
|
286 |
-
if(!array_key_exists('params', $call))
|
287 |
-
{
|
288 |
-
return _xmlrpcs_multicall_error('noparams');
|
289 |
-
}
|
290 |
-
if(!is_array($call['params']))
|
291 |
-
{
|
292 |
-
return _xmlrpcs_multicall_error('notarray');
|
293 |
-
}
|
294 |
-
|
295 |
-
// this is a real dirty and simplistic hack, since we might have received a
|
296 |
-
// base64 or datetime values, but they will be listed as strings here...
|
297 |
-
$numParams = count($call['params']);
|
298 |
-
$pt = array();
|
299 |
-
foreach($call['params'] as $val)
|
300 |
-
$pt[] = php_2_xmlrpc_type(gettype($val));
|
301 |
-
|
302 |
-
$result = $server->execute($call['methodName'], $call['params'], $pt);
|
303 |
-
|
304 |
-
if($result->faultCode() != 0)
|
305 |
-
{
|
306 |
-
return _xmlrpcs_multicall_error($result); // Method returned fault.
|
307 |
-
}
|
308 |
-
|
309 |
-
return new xmlrpcval(array($result->value()), 'array');
|
310 |
-
}
|
311 |
-
|
312 |
-
function _xmlrpcs_multicall($server, $m)
|
313 |
-
{
|
314 |
-
$result = array();
|
315 |
-
// let accept a plain list of php parameters, beside a single xmlrpc msg object
|
316 |
-
if (is_object($m))
|
317 |
-
{
|
318 |
-
$calls = $m->getParam(0);
|
319 |
-
$numCalls = $calls->arraysize();
|
320 |
-
for($i = 0; $i < $numCalls; $i++)
|
321 |
-
{
|
322 |
-
$call = $calls->arraymem($i);
|
323 |
-
$result[$i] = _xmlrpcs_multicall_do_call($server, $call);
|
324 |
-
}
|
325 |
-
}
|
326 |
-
else
|
327 |
-
{
|
328 |
-
$numCalls=count($m);
|
329 |
-
for($i = 0; $i < $numCalls; $i++)
|
330 |
-
{
|
331 |
-
$result[$i] = _xmlrpcs_multicall_do_call_phpvals($server, $m[$i]);
|
332 |
-
}
|
333 |
-
}
|
334 |
-
|
335 |
-
return new xmlrpcresp(new xmlrpcval($result, 'array'));
|
336 |
-
}
|
337 |
-
|
338 |
-
$GLOBALS['_xmlrpcs_dmap']=array(
|
339 |
-
'system.listMethods' => array(
|
340 |
-
'function' => '_xmlrpcs_listMethods',
|
341 |
-
'signature' => $_xmlrpcs_listMethods_sig,
|
342 |
-
'docstring' => $_xmlrpcs_listMethods_doc,
|
343 |
-
'signature_docs' => $_xmlrpcs_listMethods_sdoc),
|
344 |
-
'system.methodHelp' => array(
|
345 |
-
'function' => '_xmlrpcs_methodHelp',
|
346 |
-
'signature' => $_xmlrpcs_methodHelp_sig,
|
347 |
-
'docstring' => $_xmlrpcs_methodHelp_doc,
|
348 |
-
'signature_docs' => $_xmlrpcs_methodHelp_sdoc),
|
349 |
-
'system.methodSignature' => array(
|
350 |
-
'function' => '_xmlrpcs_methodSignature',
|
351 |
-
'signature' => $_xmlrpcs_methodSignature_sig,
|
352 |
-
'docstring' => $_xmlrpcs_methodSignature_doc,
|
353 |
-
'signature_docs' => $_xmlrpcs_methodSignature_sdoc),
|
354 |
-
'system.multicall' => array(
|
355 |
-
'function' => '_xmlrpcs_multicall',
|
356 |
-
'signature' => $_xmlrpcs_multicall_sig,
|
357 |
-
'docstring' => $_xmlrpcs_multicall_doc,
|
358 |
-
'signature_docs' => $_xmlrpcs_multicall_sdoc),
|
359 |
-
'system.getCapabilities' => array(
|
360 |
-
'function' => '_xmlrpcs_getCapabilities',
|
361 |
-
'signature' => $_xmlrpcs_getCapabilities_sig,
|
362 |
-
'docstring' => $_xmlrpcs_getCapabilities_doc,
|
363 |
-
'signature_docs' => $_xmlrpcs_getCapabilities_sdoc)
|
364 |
-
);
|
365 |
-
|
366 |
-
$GLOBALS['_xmlrpcs_occurred_errors'] = '';
|
367 |
-
$GLOBALS['_xmlrpcs_prev_ehandler'] = '';
|
368 |
-
|
369 |
-
/**
|
370 |
-
* Error handler used to track errors that occur during server-side execution of PHP code.
|
371 |
-
* This allows to report back to the client whether an internal error has occurred or not
|
372 |
-
* using an xmlrpc response object, instead of letting the client deal with the html junk
|
373 |
-
* that a PHP execution error on the server generally entails.
|
374 |
-
*
|
375 |
-
* NB: in fact a user defined error handler can only handle WARNING, NOTICE and USER_* errors.
|
376 |
-
*
|
377 |
-
*/
|
378 |
-
function _xmlrpcs_errorHandler($errcode, $errstring, $filename=null, $lineno=null, $context=null)
|
379 |
-
{
|
380 |
-
// obey the @ protocol
|
381 |
-
if (error_reporting() == 0)
|
382 |
-
return;
|
383 |
-
|
384 |
-
//if($errcode != E_NOTICE && $errcode != E_WARNING && $errcode != E_USER_NOTICE && $errcode != E_USER_WARNING)
|
385 |
-
if($errcode != E_STRICT)
|
386 |
-
{
|
387 |
-
$GLOBALS['_xmlrpcs_occurred_errors'] = $GLOBALS['_xmlrpcs_occurred_errors'] . $errstring . "\n";
|
388 |
-
}
|
389 |
-
// Try to avoid as much as possible disruption to the previous error handling
|
390 |
-
// mechanism in place
|
391 |
-
if($GLOBALS['_xmlrpcs_prev_ehandler'] == '')
|
392 |
-
{
|
393 |
-
// The previous error handler was the default: all we should do is log error
|
394 |
-
// to the default error log (if level high enough)
|
395 |
-
if(ini_get('log_errors') && (intval(ini_get('error_reporting')) & $errcode))
|
396 |
-
{
|
397 |
-
error_log($errstring);
|
398 |
-
}
|
399 |
-
}
|
400 |
-
else
|
401 |
-
{
|
402 |
-
// Pass control on to previous error handler, trying to avoid loops...
|
403 |
-
if($GLOBALS['_xmlrpcs_prev_ehandler'] != '_xmlrpcs_errorHandler')
|
404 |
-
{
|
405 |
-
// NB: this code will NOT work on php < 4.0.2: only 2 params were used for error handlers
|
406 |
-
if(is_array($GLOBALS['_xmlrpcs_prev_ehandler']))
|
407 |
-
{
|
408 |
-
// the following works both with static class methods and plain object methods as error handler
|
409 |
-
call_user_func_array($GLOBALS['_xmlrpcs_prev_ehandler'], array($errcode, $errstring, $filename, $lineno, $context));
|
410 |
-
}
|
411 |
-
else
|
412 |
-
{
|
413 |
-
$GLOBALS['_xmlrpcs_prev_ehandler']($errcode, $errstring, $filename, $lineno, $context);
|
414 |
-
}
|
415 |
-
}
|
416 |
-
}
|
417 |
-
}
|
418 |
-
|
419 |
-
$GLOBALS['_xmlrpc_debuginfo']='';
|
420 |
-
|
421 |
-
/**
|
422 |
-
* Add a string to the debug info that can be later seralized by the server
|
423 |
-
* as part of the response message.
|
424 |
-
* Note that for best compatbility, the debug string should be encoded using
|
425 |
-
* the $GLOBALS['xmlrpc_internalencoding'] character set.
|
426 |
-
* @param string $m
|
427 |
-
* @access public
|
428 |
-
*/
|
429 |
-
function xmlrpc_debugmsg($m)
|
430 |
-
{
|
431 |
-
$GLOBALS['_xmlrpc_debuginfo'] .= $m . "\n";
|
432 |
-
}
|
433 |
-
|
434 |
-
class xmlrpc_server
|
435 |
-
{
|
436 |
-
/**
|
437 |
-
* Array defining php functions exposed as xmlrpc methods by this server
|
438 |
-
* @access private
|
439 |
-
*/
|
440 |
-
var $dmap=array();
|
441 |
-
/**
|
442 |
-
* Defines how functions in dmap will be invoked: either using an xmlrpc msg object
|
443 |
-
* or plain php values.
|
444 |
-
* valid strings are 'xmlrpcvals', 'phpvals' or 'epivals'
|
445 |
-
*/
|
446 |
-
var $functions_parameters_type='xmlrpcvals';
|
447 |
-
/**
|
448 |
-
* Option used for fine-tuning the encoding the php values returned from
|
449 |
-
* functions registered in the dispatch map when the functions_parameters_types
|
450 |
-
* member is set to 'phpvals'
|
451 |
-
* @see php_xmlrpc_encode for a list of values
|
452 |
-
*/
|
453 |
-
var $phpvals_encoding_options = array( 'auto_dates' );
|
454 |
-
/// controls wether the server is going to echo debugging messages back to the client as comments in response body. valid values: 0,1,2,3
|
455 |
-
var $debug = 1;
|
456 |
-
/**
|
457 |
-
* Controls behaviour of server when invoked user function throws an exception:
|
458 |
-
* 0 = catch it and return an 'internal error' xmlrpc response (default)
|
459 |
-
* 1 = catch it and return an xmlrpc response with the error corresponding to the exception
|
460 |
-
* 2 = allow the exception to float to the upper layers
|
461 |
-
*/
|
462 |
-
var $exception_handling = 0;
|
463 |
-
/**
|
464 |
-
* When set to true, it will enable HTTP compression of the response, in case
|
465 |
-
* the client has declared its support for compression in the request.
|
466 |
-
*/
|
467 |
-
var $compress_response = false;
|
468 |
-
/**
|
469 |
-
* List of http compression methods accepted by the server for requests.
|
470 |
-
* NB: PHP supports deflate, gzip compressions out of the box if compiled w. zlib
|
471 |
-
*/
|
472 |
-
var $accepted_compression = array();
|
473 |
-
/// shall we serve calls to system.* methods?
|
474 |
-
var $allow_system_funcs = true;
|
475 |
-
/// list of charset encodings natively accepted for requests
|
476 |
-
var $accepted_charset_encodings = array();
|
477 |
-
/**
|
478 |
-
* charset encoding to be used for response.
|
479 |
-
* NB: if we can, we will convert the generated response from internal_encoding to the intended one.
|
480 |
-
* can be: a supported xml encoding (only UTF-8 and ISO-8859-1 at present, unless mbstring is enabled),
|
481 |
-
* null (leave unspecified in response, convert output stream to US_ASCII),
|
482 |
-
* 'default' (use xmlrpc library default as specified in xmlrpc.inc, convert output stream if needed),
|
483 |
-
* or 'auto' (use client-specified charset encoding or same as request if request headers do not specify it (unless request is US-ASCII: then use library default anyway).
|
484 |
-
* NB: pretty dangerous if you accept every charset and do not have mbstring enabled)
|
485 |
-
*/
|
486 |
-
var $response_charset_encoding = '';
|
487 |
-
/**
|
488 |
-
* Storage for internal debug info
|
489 |
-
* @access private
|
490 |
-
*/
|
491 |
-
var $debug_info = '';
|
492 |
-
/**
|
493 |
-
* Extra data passed at runtime to method handling functions. Used only by EPI layer
|
494 |
-
*/
|
495 |
-
var $user_data = null;
|
496 |
-
|
497 |
-
/**
|
498 |
-
* @param array $dispmap the dispatch map withd efinition of exposed services
|
499 |
-
* @param boolean $servicenow set to false to prevent the server from runnung upon construction
|
500 |
-
*/
|
501 |
-
function xmlrpc_server($dispMap=null, $serviceNow=true)
|
502 |
-
{
|
503 |
-
// if ZLIB is enabled, let the server by default accept compressed requests,
|
504 |
-
// and compress responses sent to clients that support them
|
505 |
-
if(function_exists('gzinflate'))
|
506 |
-
{
|
507 |
-
$this->accepted_compression = array('gzip', 'deflate');
|
508 |
-
$this->compress_response = true;
|
509 |
-
}
|
510 |
-
|
511 |
-
// by default the xml parser can support these 3 charset encodings
|
512 |
-
$this->accepted_charset_encodings = array('UTF-8', 'ISO-8859-1', 'US-ASCII');
|
513 |
-
|
514 |
-
// dispMap is a dispatch array of methods
|
515 |
-
// mapped to function names and signatures
|
516 |
-
// if a method
|
517 |
-
// doesn't appear in the map then an unknown
|
518 |
-
// method error is generated
|
519 |
-
/* milosch - changed to make passing dispMap optional.
|
520 |
-
* instead, you can use the class add_to_map() function
|
521 |
-
* to add functions manually (borrowed from SOAPX4)
|
522 |
-
*/
|
523 |
-
if($dispMap)
|
524 |
-
{
|
525 |
-
$this->dmap = $dispMap;
|
526 |
-
if($serviceNow)
|
527 |
-
{
|
528 |
-
$this->service();
|
529 |
-
}
|
530 |
-
}
|
531 |
-
}
|
532 |
-
|
533 |
-
/**
|
534 |
-
* Set debug level of server.
|
535 |
-
* @param integer $in debug lvl: determines info added to xmlrpc responses (as xml comments)
|
536 |
-
* 0 = no debug info,
|
537 |
-
* 1 = msgs set from user with debugmsg(),
|
538 |
-
* 2 = add complete xmlrpc request (headers and body),
|
539 |
-
* 3 = add also all processing warnings happened during method processing
|
540 |
-
* (NB: this involves setting a custom error handler, and might interfere
|
541 |
-
* with the standard processing of the php function exposed as method. In
|
542 |
-
* particular, triggering an USER_ERROR level error will not halt script
|
543 |
-
* execution anymore, but just end up logged in the xmlrpc response)
|
544 |
-
* Note that info added at elevel 2 and 3 will be base64 encoded
|
545 |
-
* @access public
|
546 |
-
*/
|
547 |
-
function setDebug($in)
|
548 |
-
{
|
549 |
-
$this->debug=$in;
|
550 |
-
}
|
551 |
-
|
552 |
-
/**
|
553 |
-
* Return a string with the serialized representation of all debug info
|
554 |
-
* @param string $charset_encoding the target charset encoding for the serialization
|
555 |
-
* @return string an XML comment (or two)
|
556 |
-
*/
|
557 |
-
function serializeDebug($charset_encoding='')
|
558 |
-
{
|
559 |
-
// Tough encoding problem: which internal charset should we assume for debug info?
|
560 |
-
// It might contain a copy of raw data received from client, ie with unknown encoding,
|
561 |
-
// intermixed with php generated data and user generated data...
|
562 |
-
// so we split it: system debug is base 64 encoded,
|
563 |
-
// user debug info should be encoded by the end user using the INTERNAL_ENCODING
|
564 |
-
$out = '';
|
565 |
-
if ($this->debug_info != '')
|
566 |
-
{
|
567 |
-
$out .= "<!-- SERVER DEBUG INFO (BASE64 ENCODED):\n".base64_encode($this->debug_info)."\n-->\n";
|
568 |
-
}
|
569 |
-
if($GLOBALS['_xmlrpc_debuginfo']!='')
|
570 |
-
{
|
571 |
-
|
572 |
-
$out .= "<!-- DEBUG INFO:\n" . xmlrpc_encode_entitites(str_replace('--', '_-', $GLOBALS['_xmlrpc_debuginfo']), $GLOBALS['xmlrpc_internalencoding'], $charset_encoding) . "\n-->\n";
|
573 |
-
// NB: a better solution MIGHT be to use CDATA, but we need to insert it
|
574 |
-
// into return payload AFTER the beginning tag
|
575 |
-
//$out .= "<![CDATA[ DEBUG INFO:\n\n" . str_replace(']]>', ']_]_>', $GLOBALS['_xmlrpc_debuginfo']) . "\n]]>\n";
|
576 |
-
}
|
577 |
-
return $out;
|
578 |
-
}
|
579 |
-
|
580 |
-
/**
|
581 |
-
* Execute the xmlrpc request, printing the response
|
582 |
-
* @param string $data the request body. If null, the http POST request will be examined
|
583 |
-
* @return xmlrpcresp the response object (usually not used by caller...)
|
584 |
-
* @access public
|
585 |
-
*/
|
586 |
-
function service($data=null, $return_payload=false)
|
587 |
-
{
|
588 |
-
if ($data === null)
|
589 |
-
{
|
590 |
-
// workaround for a known bug in php ver. 5.2.2 that broke $HTTP_RAW_POST_DATA
|
591 |
-
$ver = phpversion();
|
592 |
-
if ($ver[0] >= 5)
|
593 |
-
{
|
594 |
-
$data = file_get_contents('php://input');
|
595 |
-
}
|
596 |
-
else
|
597 |
-
{
|
598 |
-
$data = isset($GLOBALS['HTTP_RAW_POST_DATA']) ? $GLOBALS['HTTP_RAW_POST_DATA'] : '';
|
599 |
-
}
|
600 |
-
}
|
601 |
-
$raw_data = $data;
|
602 |
-
|
603 |
-
// reset internal debug info
|
604 |
-
$this->debug_info = '';
|
605 |
-
|
606 |
-
// Echo back what we received, before parsing it
|
607 |
-
if($this->debug > 1)
|
608 |
-
{
|
609 |
-
$this->debugmsg("+++GOT+++\n" . $data . "\n+++END+++");
|
610 |
-
}
|
611 |
-
|
612 |
-
$r = $this->parseRequestHeaders($data, $req_charset, $resp_charset, $resp_encoding);
|
613 |
-
if (!$r)
|
614 |
-
{
|
615 |
-
$r=$this->parseRequest($data, $req_charset);
|
616 |
-
}
|
617 |
-
|
618 |
-
// save full body of request into response, for more debugging usages
|
619 |
-
$r->raw_data = $raw_data;
|
620 |
-
|
621 |
-
if($this->debug > 2 && $GLOBALS['_xmlrpcs_occurred_errors'])
|
622 |
-
{
|
623 |
-
$this->debugmsg("+++PROCESSING ERRORS AND WARNINGS+++\n" .
|
624 |
-
$GLOBALS['_xmlrpcs_occurred_errors'] . "+++END+++");
|
625 |
-
}
|
626 |
-
|
627 |
-
$payload=$this->xml_header($resp_charset);
|
628 |
-
if($this->debug > 0)
|
629 |
-
{
|
630 |
-
$payload = $payload . $this->serializeDebug($resp_charset);
|
631 |
-
}
|
632 |
-
|
633 |
-
// G. Giunta 2006-01-27: do not create response serialization if it has
|
634 |
-
// already happened. Helps building json magic
|
635 |
-
if (empty($r->payload))
|
636 |
-
{
|
637 |
-
$r->serialize($resp_charset);
|
638 |
-
}
|
639 |
-
$payload = $payload . $r->payload;
|
640 |
-
|
641 |
-
if ($return_payload)
|
642 |
-
{
|
643 |
-
return $payload;
|
644 |
-
}
|
645 |
-
|
646 |
-
// if we get a warning/error that has output some text before here, then we cannot
|
647 |
-
// add a new header. We cannot say we are sending xml, either...
|
648 |
-
if(!headers_sent())
|
649 |
-
{
|
650 |
-
header('Content-Type: '.$r->content_type);
|
651 |
-
// we do not know if client actually told us an accepted charset, but if he did
|
652 |
-
// we have to tell him what we did
|
653 |
-
header("Vary: Accept-Charset");
|
654 |
-
|
655 |
-
// http compression of output: only
|
656 |
-
// if we can do it, and we want to do it, and client asked us to,
|
657 |
-
// and php ini settings do not force it already
|
658 |
-
$php_no_self_compress = !ini_get('zlib.output_compression') && (ini_get('output_handler') != 'ob_gzhandler');
|
659 |
-
if($this->compress_response && function_exists('gzencode') && $resp_encoding != ''
|
660 |
-
&& $php_no_self_compress)
|
661 |
-
{
|
662 |
-
if(strpos($resp_encoding, 'gzip') !== false)
|
663 |
-
{
|
664 |
-
$payload = gzencode($payload);
|
665 |
-
header("Content-Encoding: gzip");
|
666 |
-
header("Vary: Accept-Encoding");
|
667 |
-
}
|
668 |
-
elseif (strpos($resp_encoding, 'deflate') !== false)
|
669 |
-
{
|
670 |
-
$payload = gzcompress($payload);
|
671 |
-
header("Content-Encoding: deflate");
|
672 |
-
header("Vary: Accept-Encoding");
|
673 |
-
}
|
674 |
-
}
|
675 |
-
|
676 |
-
// do not ouput content-length header if php is compressing output for us:
|
677 |
-
// it will mess up measurements
|
678 |
-
if($php_no_self_compress)
|
679 |
-
{
|
680 |
-
header('Content-Length: ' . (int)strlen($payload));
|
681 |
-
}
|
682 |
-
}
|
683 |
-
else
|
684 |
-
{
|
685 |
-
error_log('XML-RPC: '.__METHOD__.': http headers already sent before response is fully generated. Check for php warning or error messages');
|
686 |
-
}
|
687 |
-
|
688 |
-
print $payload;
|
689 |
-
|
690 |
-
// return request, in case subclasses want it
|
691 |
-
return $r;
|
692 |
-
}
|
693 |
-
|
694 |
-
/**
|
695 |
-
* Add a method to the dispatch map
|
696 |
-
* @param string $methodname the name with which the method will be made available
|
697 |
-
* @param string $function the php function that will get invoked
|
698 |
-
* @param array $sig the array of valid method signatures
|
699 |
-
* @param string $doc method documentation
|
700 |
-
* @param array $sigdoc the array of valid method signatures docs (one string per param, one for return type)
|
701 |
-
* @access public
|
702 |
-
*/
|
703 |
-
function add_to_map($methodname,$function,$sig=null,$doc=false,$sigdoc=false)
|
704 |
-
{
|
705 |
-
$this->dmap[$methodname] = array(
|
706 |
-
'function' => $function,
|
707 |
-
'docstring' => $doc
|
708 |
-
);
|
709 |
-
if ($sig)
|
710 |
-
{
|
711 |
-
$this->dmap[$methodname]['signature'] = $sig;
|
712 |
-
}
|
713 |
-
if ($sigdoc)
|
714 |
-
{
|
715 |
-
$this->dmap[$methodname]['signature_docs'] = $sigdoc;
|
716 |
-
}
|
717 |
-
}
|
718 |
-
|
719 |
-
/**
|
720 |
-
* Verify type and number of parameters received against a list of known signatures
|
721 |
-
* @param array $in array of either xmlrpcval objects or xmlrpc type definitions
|
722 |
-
* @param array $sig array of known signatures to match against
|
723 |
-
* @access private
|
724 |
-
*/
|
725 |
-
function verifySignature($in, $sig)
|
726 |
-
{
|
727 |
-
// check each possible signature in turn
|
728 |
-
if (is_object($in))
|
729 |
-
{
|
730 |
-
$numParams = $in->getNumParams();
|
731 |
-
}
|
732 |
-
else
|
733 |
-
{
|
734 |
-
$numParams = count($in);
|
735 |
-
}
|
736 |
-
foreach($sig as $cursig)
|
737 |
-
{
|
738 |
-
if(count($cursig)==$numParams+1)
|
739 |
-
{
|
740 |
-
$itsOK=1;
|
741 |
-
for($n=0; $n<$numParams; $n++)
|
742 |
-
{
|
743 |
-
if (is_object($in))
|
744 |
-
{
|
745 |
-
$p=$in->getParam($n);
|
746 |
-
if($p->kindOf() == 'scalar')
|
747 |
-
{
|
748 |
-
$pt=$p->scalartyp();
|
749 |
-
}
|
750 |
-
else
|
751 |
-
{
|
752 |
-
$pt=$p->kindOf();
|
753 |
-
}
|
754 |
-
}
|
755 |
-
else
|
756 |
-
{
|
757 |
-
$pt= $in[$n] == 'i4' ? 'int' : strtolower($in[$n]); // dispatch maps never use i4...
|
758 |
-
}
|
759 |
-
|
760 |
-
// param index is $n+1, as first member of sig is return type
|
761 |
-
if($pt != $cursig[$n+1] && $cursig[$n+1] != $GLOBALS['xmlrpcValue'])
|
762 |
-
{
|
763 |
-
$itsOK=0;
|
764 |
-
$pno=$n+1;
|
765 |
-
$wanted=$cursig[$n+1];
|
766 |
-
$got=$pt;
|
767 |
-
break;
|
768 |
-
}
|
769 |
-
}
|
770 |
-
if($itsOK)
|
771 |
-
{
|
772 |
-
return array(1,'');
|
773 |
-
}
|
774 |
-
}
|
775 |
-
}
|
776 |
-
if(isset($wanted))
|
777 |
-
{
|
778 |
-
return array(0, "Wanted ${wanted}, got ${got} at param ${pno}");
|
779 |
-
}
|
780 |
-
else
|
781 |
-
{
|
782 |
-
return array(0, "No method signature matches number of parameters");
|
783 |
-
}
|
784 |
-
}
|
785 |
-
|
786 |
-
/**
|
787 |
-
* Parse http headers received along with xmlrpc request. If needed, inflate request
|
788 |
-
* @return null on success or an xmlrpcresp
|
789 |
-
* @access private
|
790 |
-
*/
|
791 |
-
function parseRequestHeaders(&$data, &$req_encoding, &$resp_encoding, &$resp_compression)
|
792 |
-
{
|
793 |
-
// check if $_SERVER is populated: it might have been disabled via ini file
|
794 |
-
// (this is true even when in CLI mode)
|
795 |
-
if (count($_SERVER) == 0)
|
796 |
-
{
|
797 |
-
error_log('XML-RPC: '.__METHOD__.': cannot parse request headers as $_SERVER is not populated');
|
798 |
-
}
|
799 |
-
|
800 |
-
if($this->debug > 1)
|
801 |
-
{
|
802 |
-
if(function_exists('getallheaders'))
|
803 |
-
{
|
804 |
-
$this->debugmsg(''); // empty line
|
805 |
-
foreach(getallheaders() as $name => $val)
|
806 |
-
{
|
807 |
-
$this->debugmsg("HEADER: $name: $val");
|
808 |
-
}
|
809 |
-
}
|
810 |
-
|
811 |
-
}
|
812 |
-
|
813 |
-
if(isset($_SERVER['HTTP_CONTENT_ENCODING']))
|
814 |
-
{
|
815 |
-
$content_encoding = str_replace('x-', '', $_SERVER['HTTP_CONTENT_ENCODING']);
|
816 |
-
}
|
817 |
-
else
|
818 |
-
{
|
819 |
-
$content_encoding = '';
|
820 |
-
}
|
821 |
-
|
822 |
-
// check if request body has been compressed and decompress it
|
823 |
-
if($content_encoding != '' && strlen($data))
|
824 |
-
{
|
825 |
-
if($content_encoding == 'deflate' || $content_encoding == 'gzip')
|
826 |
-
{
|
827 |
-
// if decoding works, use it. else assume data wasn't gzencoded
|
828 |
-
if(function_exists('gzinflate') && in_array($content_encoding, $this->accepted_compression))
|
829 |
-
{
|
830 |
-
if($content_encoding == 'deflate' && $degzdata = @gzuncompress($data))
|
831 |
-
{
|
832 |
-
$data = $degzdata;
|
833 |
-
if($this->debug > 1)
|
834 |
-
{
|
835 |
-
$this->debugmsg("\n+++INFLATED REQUEST+++[".strlen($data)." chars]+++\n" . $data . "\n+++END+++");
|
836 |
-
}
|
837 |
-
}
|
838 |
-
elseif($content_encoding == 'gzip' && $degzdata = @gzinflate(substr($data, 10)))
|
839 |
-
{
|
840 |
-
$data = $degzdata;
|
841 |
-
if($this->debug > 1)
|
842 |
-
$this->debugmsg("+++INFLATED REQUEST+++[".strlen($data)." chars]+++\n" . $data . "\n+++END+++");
|
843 |
-
}
|
844 |
-
else
|
845 |
-
{
|
846 |
-
$r = new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['server_decompress_fail'], $GLOBALS['xmlrpcstr']['server_decompress_fail']);
|
847 |
-
return $r;
|
848 |
-
}
|
849 |
-
}
|
850 |
-
else
|
851 |
-
{
|
852 |
-
//error_log('The server sent deflated data. Your php install must have the Zlib extension compiled in to support this.');
|
853 |
-
$r = new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['server_cannot_decompress'], $GLOBALS['xmlrpcstr']['server_cannot_decompress']);
|
854 |
-
return $r;
|
855 |
-
}
|
856 |
-
}
|
857 |
-
}
|
858 |
-
|
859 |
-
// check if client specified accepted charsets, and if we know how to fulfill
|
860 |
-
// the request
|
861 |
-
if ($this->response_charset_encoding == 'auto')
|
862 |
-
{
|
863 |
-
$resp_encoding = '';
|
864 |
-
if (isset($_SERVER['HTTP_ACCEPT_CHARSET']))
|
865 |
-
{
|
866 |
-
// here we should check if we can match the client-requested encoding
|
867 |
-
// with the encodings we know we can generate.
|
868 |
-
/// @todo we should parse q=0.x preferences instead of getting first charset specified...
|
869 |
-
$client_accepted_charsets = explode(',', strtoupper($_SERVER['HTTP_ACCEPT_CHARSET']));
|
870 |
-
// Give preference to internal encoding
|
871 |
-
$known_charsets = array($GLOBALS['xmlrpc_internalencoding'], 'UTF-8', 'ISO-8859-1', 'US-ASCII');
|
872 |
-
foreach ($known_charsets as $charset)
|
873 |
-
{
|
874 |
-
foreach ($client_accepted_charsets as $accepted)
|
875 |
-
if (strpos($accepted, $charset) === 0)
|
876 |
-
{
|
877 |
-
$resp_encoding = $charset;
|
878 |
-
break;
|
879 |
-
}
|
880 |
-
if ($resp_encoding)
|
881 |
-
break;
|
882 |
-
}
|
883 |
-
}
|
884 |
-
}
|
885 |
-
else
|
886 |
-
{
|
887 |
-
$resp_encoding = $this->response_charset_encoding;
|
888 |
-
}
|
889 |
-
|
890 |
-
if (isset($_SERVER['HTTP_ACCEPT_ENCODING']))
|
891 |
-
{
|
892 |
-
$resp_compression = $_SERVER['HTTP_ACCEPT_ENCODING'];
|
893 |
-
}
|
894 |
-
else
|
895 |
-
{
|
896 |
-
$resp_compression = '';
|
897 |
-
}
|
898 |
-
|
899 |
-
// 'guestimate' request encoding
|
900 |
-
/// @todo check if mbstring is enabled and automagic input conversion is on: it might mingle with this check???
|
901 |
-
$req_encoding = guess_encoding(isset($_SERVER['CONTENT_TYPE']) ? $_SERVER['CONTENT_TYPE'] : '',
|
902 |
-
$data);
|
903 |
-
|
904 |
-
return null;
|
905 |
-
}
|
906 |
-
|
907 |
-
/**
|
908 |
-
* Parse an xml chunk containing an xmlrpc request and execute the corresponding
|
909 |
-
* php function registered with the server
|
910 |
-
* @param string $data the xml request
|
911 |
-
* @param string $req_encoding (optional) the charset encoding of the xml request
|
912 |
-
* @return xmlrpcresp
|
913 |
-
* @access private
|
914 |
-
*/
|
915 |
-
function parseRequest($data, $req_encoding='')
|
916 |
-
{
|
917 |
-
// 2005/05/07 commented and moved into caller function code
|
918 |
-
//if($data=='')
|
919 |
-
//{
|
920 |
-
// $data=$GLOBALS['HTTP_RAW_POST_DATA'];
|
921 |
-
//}
|
922 |
-
|
923 |
-
// G. Giunta 2005/02/13: we do NOT expect to receive html entities
|
924 |
-
// so we do not try to convert them into xml character entities
|
925 |
-
//$data = xmlrpc_html_entity_xlate($data);
|
926 |
-
|
927 |
-
$GLOBALS['_xh']=array();
|
928 |
-
$GLOBALS['_xh']['ac']='';
|
929 |
-
$GLOBALS['_xh']['stack']=array();
|
930 |
-
$GLOBALS['_xh']['valuestack'] = array();
|
931 |
-
$GLOBALS['_xh']['params']=array();
|
932 |
-
$GLOBALS['_xh']['pt']=array();
|
933 |
-
$GLOBALS['_xh']['isf']=0;
|
934 |
-
$GLOBALS['_xh']['isf_reason']='';
|
935 |
-
$GLOBALS['_xh']['method']=false; // so we can check later if we got a methodname or not
|
936 |
-
$GLOBALS['_xh']['rt']='';
|
937 |
-
|
938 |
-
// decompose incoming XML into request structure
|
939 |
-
if ($req_encoding != '')
|
940 |
-
{
|
941 |
-
if (!in_array($req_encoding, array('UTF-8', 'ISO-8859-1', 'US-ASCII')))
|
942 |
-
// the following code might be better for mb_string enabled installs, but
|
943 |
-
// makes the lib about 200% slower...
|
944 |
-
//if (!is_valid_charset($req_encoding, array('UTF-8', 'ISO-8859-1', 'US-ASCII')))
|
945 |
-
{
|
946 |
-
error_log('XML-RPC: '.__METHOD__.': invalid charset encoding of received request: '.$req_encoding);
|
947 |
-
$req_encoding = $GLOBALS['xmlrpc_defencoding'];
|
948 |
-
}
|
949 |
-
/// @BUG this will fail on PHP 5 if charset is not specified in the xml prologue,
|
950 |
-
// the encoding is not UTF8 and there are non-ascii chars in the text...
|
951 |
-
/// @todo use an ampty string for php 5 ???
|
952 |
-
$parser = xml_parser_create($req_encoding);
|
953 |
-
}
|
954 |
-
else
|
955 |
-
{
|
956 |
-
$parser = xml_parser_create();
|
957 |
-
}
|
958 |
-
|
959 |
-
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, true);
|
960 |
-
// G. Giunta 2005/02/13: PHP internally uses ISO-8859-1, so we have to tell
|
961 |
-
// the xml parser to give us back data in the expected charset
|
962 |
-
// What if internal encoding is not in one of the 3 allowed?
|
963 |
-
// we use the broadest one, ie. utf8
|
964 |
-
// This allows to send data which is native in various charset,
|
965 |
-
// by extending xmlrpc_encode_entitites() and setting xmlrpc_internalencoding
|
966 |
-
if (!in_array($GLOBALS['xmlrpc_internalencoding'], array('UTF-8', 'ISO-8859-1', 'US-ASCII')))
|
967 |
-
{
|
968 |
-
xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, 'UTF-8');
|
969 |
-
}
|
970 |
-
else
|
971 |
-
{
|
972 |
-
xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, $GLOBALS['xmlrpc_internalencoding']);
|
973 |
-
}
|
974 |
-
|
975 |
-
if ($this->functions_parameters_type != 'xmlrpcvals')
|
976 |
-
xml_set_element_handler($parser, 'xmlrpc_se', 'xmlrpc_ee_fast');
|
977 |
-
else
|
978 |
-
xml_set_element_handler($parser, 'xmlrpc_se', 'xmlrpc_ee');
|
979 |
-
xml_set_character_data_handler($parser, 'xmlrpc_cd');
|
980 |
-
xml_set_default_handler($parser, 'xmlrpc_dh');
|
981 |
-
if(!xml_parse($parser, $data, 1))
|
982 |
-
{
|
983 |
-
// return XML error as a faultCode
|
984 |
-
$r=new xmlrpcresp(0,
|
985 |
-
$GLOBALS['xmlrpcerrxml']+xml_get_error_code($parser),
|
986 |
-
sprintf('XML error: %s at line %d, column %d',
|
987 |
-
xml_error_string(xml_get_error_code($parser)),
|
988 |
-
xml_get_current_line_number($parser), xml_get_current_column_number($parser)));
|
989 |
-
xml_parser_free($parser);
|
990 |
-
}
|
991 |
-
elseif ($GLOBALS['_xh']['isf'])
|
992 |
-
{
|
993 |
-
xml_parser_free($parser);
|
994 |
-
$r=new xmlrpcresp(0,
|
995 |
-
$GLOBALS['xmlrpcerr']['invalid_request'],
|
996 |
-
$GLOBALS['xmlrpcstr']['invalid_request'] . ' ' . $GLOBALS['_xh']['isf_reason']);
|
997 |
-
}
|
998 |
-
else
|
999 |
-
{
|
1000 |
-
xml_parser_free($parser);
|
1001 |
-
// small layering violation in favor of speed and memory usage:
|
1002 |
-
// we should allow the 'execute' method handle this, but in the
|
1003 |
-
// most common scenario (xmlrpcvals type server with some methods
|
1004 |
-
// registered as phpvals) that would mean a useless encode+decode pass
|
1005 |
-
if ($this->functions_parameters_type != 'xmlrpcvals' || (isset($this->dmap[$GLOBALS['_xh']['method']]['parameters_type']) && ($this->dmap[$GLOBALS['_xh']['method']]['parameters_type'] == 'phpvals')))
|
1006 |
-
{
|
1007 |
-
if($this->debug > 1)
|
1008 |
-
{
|
1009 |
-
$this->debugmsg("\n+++PARSED+++\n".var_export($GLOBALS['_xh']['params'], true)."\n+++END+++");
|
1010 |
-
}
|
1011 |
-
$r = $this->execute($GLOBALS['_xh']['method'], $GLOBALS['_xh']['params'], $GLOBALS['_xh']['pt']);
|
1012 |
-
}
|
1013 |
-
else
|
1014 |
-
{
|
1015 |
-
// build an xmlrpcmsg object with data parsed from xml
|
1016 |
-
$m=new xmlrpcmsg($GLOBALS['_xh']['method']);
|
1017 |
-
// now add parameters in
|
1018 |
-
for($i=0; $i<count($GLOBALS['_xh']['params']); $i++)
|
1019 |
-
{
|
1020 |
-
$m->addParam($GLOBALS['_xh']['params'][$i]);
|
1021 |
-
}
|
1022 |
-
|
1023 |
-
if($this->debug > 1)
|
1024 |
-
{
|
1025 |
-
$this->debugmsg("\n+++PARSED+++\n".var_export($m, true)."\n+++END+++");
|
1026 |
-
}
|
1027 |
-
$r = $this->execute($m);
|
1028 |
-
}
|
1029 |
-
}
|
1030 |
-
return $r;
|
1031 |
-
}
|
1032 |
-
|
1033 |
-
/**
|
1034 |
-
* Execute a method invoked by the client, checking parameters used
|
1035 |
-
* @param mixed $m either an xmlrpcmsg obj or a method name
|
1036 |
-
* @param array $params array with method parameters as php types (if m is method name only)
|
1037 |
-
* @param array $paramtypes array with xmlrpc types of method parameters (if m is method name only)
|
1038 |
-
* @return xmlrpcresp
|
1039 |
-
* @access private
|
1040 |
-
*/
|
1041 |
-
function execute($m, $params=null, $paramtypes=null)
|
1042 |
-
{
|
1043 |
-
if (is_object($m))
|
1044 |
-
{
|
1045 |
-
$methName = $m->method();
|
1046 |
-
}
|
1047 |
-
else
|
1048 |
-
{
|
1049 |
-
$methName = $m;
|
1050 |
-
}
|
1051 |
-
$sysCall = $this->allow_system_funcs && (strpos($methName, "system.") === 0);
|
1052 |
-
$dmap = $sysCall ? $GLOBALS['_xmlrpcs_dmap'] : $this->dmap;
|
1053 |
-
|
1054 |
-
if(!isset($dmap[$methName]['function']))
|
1055 |
-
{
|
1056 |
-
// No such method
|
1057 |
-
return new xmlrpcresp(0,
|
1058 |
-
$GLOBALS['xmlrpcerr']['unknown_method'],
|
1059 |
-
$GLOBALS['xmlrpcstr']['unknown_method']);
|
1060 |
-
}
|
1061 |
-
|
1062 |
-
// Check signature
|
1063 |
-
if(isset($dmap[$methName]['signature']))
|
1064 |
-
{
|
1065 |
-
$sig = $dmap[$methName]['signature'];
|
1066 |
-
if (is_object($m))
|
1067 |
-
{
|
1068 |
-
list($ok, $errstr) = $this->verifySignature($m, $sig);
|
1069 |
-
}
|
1070 |
-
else
|
1071 |
-
{
|
1072 |
-
list($ok, $errstr) = $this->verifySignature($paramtypes, $sig);
|
1073 |
-
}
|
1074 |
-
if(!$ok)
|
1075 |
-
{
|
1076 |
-
// Didn't match.
|
1077 |
-
return new xmlrpcresp(
|
1078 |
-
0,
|
1079 |
-
$GLOBALS['xmlrpcerr']['incorrect_params'],
|
1080 |
-
$GLOBALS['xmlrpcstr']['incorrect_params'] . ": ${errstr}"
|
1081 |
-
);
|
1082 |
-
}
|
1083 |
-
}
|
1084 |
-
|
1085 |
-
$func = $dmap[$methName]['function'];
|
1086 |
-
// let the 'class::function' syntax be accepted in dispatch maps
|
1087 |
-
if(is_string($func) && strpos($func, '::'))
|
1088 |
-
{
|
1089 |
-
$func = explode('::', $func);
|
1090 |
-
}
|
1091 |
-
// verify that function to be invoked is in fact callable
|
1092 |
-
if(!is_callable($func))
|
1093 |
-
{
|
1094 |
-
error_log("XML-RPC: ".__METHOD__.": function $func registered as method handler is not callable");
|
1095 |
-
return new xmlrpcresp(
|
1096 |
-
0,
|
1097 |
-
$GLOBALS['xmlrpcerr']['server_error'],
|
1098 |
-
$GLOBALS['xmlrpcstr']['server_error'] . ": no function matches method"
|
1099 |
-
);
|
1100 |
-
}
|
1101 |
-
|
1102 |
-
// If debug level is 3, we should catch all errors generated during
|
1103 |
-
// processing of user function, and log them as part of response
|
1104 |
-
if($this->debug > 2)
|
1105 |
-
{
|
1106 |
-
$GLOBALS['_xmlrpcs_prev_ehandler'] = set_error_handler('_xmlrpcs_errorHandler');
|
1107 |
-
}
|
1108 |
-
try
|
1109 |
-
{
|
1110 |
-
// Allow mixed-convention servers
|
1111 |
-
if (is_object($m))
|
1112 |
-
{
|
1113 |
-
if($sysCall)
|
1114 |
-
{
|
1115 |
-
$r = call_user_func($func, $this, $m);
|
1116 |
-
}
|
1117 |
-
else
|
1118 |
-
{
|
1119 |
-
$r = call_user_func($func, $m);
|
1120 |
-
}
|
1121 |
-
if (!is_a($r, 'xmlrpcresp'))
|
1122 |
-
{
|
1123 |
-
error_log("XML-RPC: ".__METHOD__.": function $func registered as method handler does not return an xmlrpcresp object");
|
1124 |
-
if (is_a($r, 'xmlrpcval'))
|
1125 |
-
{
|
1126 |
-
$r = new xmlrpcresp($r);
|
1127 |
-
}
|
1128 |
-
else
|
1129 |
-
{
|
1130 |
-
$r = new xmlrpcresp(
|
1131 |
-
0,
|
1132 |
-
$GLOBALS['xmlrpcerr']['server_error'],
|
1133 |
-
$GLOBALS['xmlrpcstr']['server_error'] . ": function does not return xmlrpcresp object"
|
1134 |
-
);
|
1135 |
-
}
|
1136 |
-
}
|
1137 |
-
}
|
1138 |
-
else
|
1139 |
-
{
|
1140 |
-
// call a 'plain php' function
|
1141 |
-
if($sysCall)
|
1142 |
-
{
|
1143 |
-
array_unshift($params, $this);
|
1144 |
-
$r = call_user_func_array($func, $params);
|
1145 |
-
}
|
1146 |
-
else
|
1147 |
-
{
|
1148 |
-
// 3rd API convention for method-handling functions: EPI-style
|
1149 |
-
if ($this->functions_parameters_type == 'epivals')
|
1150 |
-
{
|
1151 |
-
$r = call_user_func_array($func, array($methName, $params, $this->user_data));
|
1152 |
-
// mimic EPI behaviour: if we get an array that looks like an error, make it
|
1153 |
-
// an eror response
|
1154 |
-
if (is_array($r) && array_key_exists('faultCode', $r) && array_key_exists('faultString', $r))
|
1155 |
-
{
|
1156 |
-
$r = new xmlrpcresp(0, (integer)$r['faultCode'], (string)$r['faultString']);
|
1157 |
-
}
|
1158 |
-
else
|
1159 |
-
{
|
1160 |
-
// functions using EPI api should NOT return resp objects,
|
1161 |
-
// so make sure we encode the return type correctly
|
1162 |
-
$r = new xmlrpcresp(php_xmlrpc_encode($r, array('extension_api')));
|
1163 |
-
}
|
1164 |
-
}
|
1165 |
-
else
|
1166 |
-
{
|
1167 |
-
$r = call_user_func_array($func, $params);
|
1168 |
-
}
|
1169 |
-
}
|
1170 |
-
// the return type can be either an xmlrpcresp object or a plain php value...
|
1171 |
-
if (!is_a($r, 'xmlrpcresp'))
|
1172 |
-
{
|
1173 |
-
// what should we assume here about automatic encoding of datetimes
|
1174 |
-
// and php classes instances???
|
1175 |
-
$r = new xmlrpcresp(php_xmlrpc_encode($r, $this->phpvals_encoding_options));
|
1176 |
-
}
|
1177 |
-
}
|
1178 |
-
}
|
1179 |
-
catch(Exception $e)
|
1180 |
-
{
|
1181 |
-
// (barring errors in the lib) an uncatched exception happened
|
1182 |
-
// in the called function, we wrap it in a proper error-response
|
1183 |
-
switch($this->exception_handling)
|
1184 |
-
{
|
1185 |
-
case 2:
|
1186 |
-
throw $e;
|
1187 |
-
break;
|
1188 |
-
case 1:
|
1189 |
-
$r = new xmlrpcresp(0, $e->getCode(), $e->getMessage());
|
1190 |
-
break;
|
1191 |
-
default:
|
1192 |
-
$r = new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['server_error'], $GLOBALS['xmlrpcstr']['server_error']);
|
1193 |
-
}
|
1194 |
-
}
|
1195 |
-
if($this->debug > 2)
|
1196 |
-
{
|
1197 |
-
// note: restore the error handler we found before calling the
|
1198 |
-
// user func, even if it has been changed inside the func itself
|
1199 |
-
if($GLOBALS['_xmlrpcs_prev_ehandler'])
|
1200 |
-
{
|
1201 |
-
set_error_handler($GLOBALS['_xmlrpcs_prev_ehandler']);
|
1202 |
-
}
|
1203 |
-
else
|
1204 |
-
{
|
1205 |
-
restore_error_handler();
|
1206 |
-
}
|
1207 |
-
}
|
1208 |
-
return $r;
|
1209 |
-
}
|
1210 |
-
|
1211 |
-
/**
|
1212 |
-
* add a string to the 'internal debug message' (separate from 'user debug message')
|
1213 |
-
* @param string $strings
|
1214 |
-
* @access private
|
1215 |
-
*/
|
1216 |
-
function debugmsg($string)
|
1217 |
-
{
|
1218 |
-
$this->debug_info .= $string."\n";
|
1219 |
-
}
|
1220 |
-
|
1221 |
-
/**
|
1222 |
-
* @access private
|
1223 |
-
*/
|
1224 |
-
function xml_header($charset_encoding='')
|
1225 |
-
{
|
1226 |
-
if ($charset_encoding != '')
|
1227 |
-
{
|
1228 |
-
return "<?xml version=\"1.0\" encoding=\"$charset_encoding\"?" . ">\n";
|
1229 |
-
}
|
1230 |
-
else
|
1231 |
-
{
|
1232 |
-
return "<?xml version=\"1.0\"?" . ">\n";
|
1233 |
-
}
|
1234 |
-
}
|
1235 |
-
|
1236 |
-
/**
|
1237 |
-
* A debugging routine: just echoes back the input packet as a string value
|
1238 |
-
* DEPRECATED!
|
1239 |
-
*/
|
1240 |
-
function echoInput()
|
1241 |
-
{
|
1242 |
-
$r=new xmlrpcresp(new xmlrpcval( "'Aha said I: '" . $GLOBALS['HTTP_RAW_POST_DATA'], 'string'));
|
1243 |
-
print $r->serialize();
|
1244 |
-
}
|
1245 |
-
}
|
1246 |
-
?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/vendor/infusionsoft/xmlrpc/lib/xmlrpc.inc
ADDED
@@ -0,0 +1,214 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
// by Edd Dumbill (C) 1999-2002
|
3 |
+
// <edd@usefulinc.com>
|
4 |
+
|
5 |
+
// Copyright (c) 1999,2000,2002 Edd Dumbill.
|
6 |
+
// All rights reserved.
|
7 |
+
//
|
8 |
+
// Redistribution and use in source and binary forms, with or without
|
9 |
+
// modification, are permitted provided that the following conditions
|
10 |
+
// are met:
|
11 |
+
//
|
12 |
+
// * Redistributions of source code must retain the above copyright
|
13 |
+
// notice, this list of conditions and the following disclaimer.
|
14 |
+
//
|
15 |
+
// * Redistributions in binary form must reproduce the above
|
16 |
+
// copyright notice, this list of conditions and the following
|
17 |
+
// disclaimer in the documentation and/or other materials provided
|
18 |
+
// with the distribution.
|
19 |
+
//
|
20 |
+
// * Neither the name of the "XML-RPC for PHP" nor the names of its
|
21 |
+
// contributors may be used to endorse or promote products derived
|
22 |
+
// from this software without specific prior written permission.
|
23 |
+
//
|
24 |
+
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
25 |
+
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
26 |
+
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
27 |
+
// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
28 |
+
// REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
29 |
+
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
30 |
+
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
31 |
+
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
32 |
+
// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
33 |
+
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
34 |
+
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
35 |
+
// OF THE POSSIBILITY OF SUCH DAMAGE.
|
36 |
+
|
37 |
+
/******************************************************************************
|
38 |
+
*
|
39 |
+
* *** DEPRECATED ***
|
40 |
+
*
|
41 |
+
* This file is only used to insure backwards compatibility
|
42 |
+
* with the API of the library <= rev. 3
|
43 |
+
*
|
44 |
+
* If it is included, the library will work without any further autoloading
|
45 |
+
*****************************************************************************/
|
46 |
+
|
47 |
+
include_once(__DIR__.'/../src/PhpXmlRpc.php');
|
48 |
+
include_once(__DIR__.'/../src/Value.php');
|
49 |
+
include_once(__DIR__.'/../src/Request.php');
|
50 |
+
include_once(__DIR__.'/../src/Response.php');
|
51 |
+
include_once(__DIR__.'/../src/Client.php');
|
52 |
+
include_once(__DIR__.'/../src/Encoder.php');
|
53 |
+
include_once(__DIR__.'/../src/Helper/Charset.php');
|
54 |
+
include_once(__DIR__.'/../src/Helper/Date.php');
|
55 |
+
include_once(__DIR__.'/../src/Helper/Http.php');
|
56 |
+
include_once(__DIR__.'/../src/Helper/Logger.php');
|
57 |
+
include_once(__DIR__.'/../src/Helper/XMLParser.php');
|
58 |
+
|
59 |
+
|
60 |
+
/* Expose the global variables which used to be defined */
|
61 |
+
PhpXmlRpc\PhpXmlRpc::$xmlrpc_internalencoding = 'ISO-8859-1'; // old default
|
62 |
+
PhpXmlRpc\PhpXmlRpc::exportGlobals();
|
63 |
+
|
64 |
+
/* some stuff deprecated enough that we do not want to put it in the new lib version */
|
65 |
+
|
66 |
+
/// @deprecated
|
67 |
+
$GLOBALS['xmlEntities'] = array(
|
68 |
+
'amp' => '&',
|
69 |
+
'quot' => '"',
|
70 |
+
'lt' => '<',
|
71 |
+
'gt' => '>',
|
72 |
+
'apos' => "'"
|
73 |
+
);
|
74 |
+
|
75 |
+
// formulate backslashes for escaping regexp
|
76 |
+
// Not in use anymore since 2.0. Shall we remove it?
|
77 |
+
/// @deprecated
|
78 |
+
$GLOBALS['xmlrpc_backslash'] = chr(92).chr(92);
|
79 |
+
|
80 |
+
/* Expose with the old names the classes which have been namespaced */
|
81 |
+
|
82 |
+
class xmlrpcval extends PhpXmlRpc\Value
|
83 |
+
{
|
84 |
+
/**
|
85 |
+
* @deprecated
|
86 |
+
* @param xmlrpcval $o
|
87 |
+
* @return string
|
88 |
+
*/
|
89 |
+
public function serializeval($o)
|
90 |
+
{
|
91 |
+
// add check? slower, but helps to avoid recursion in serializing broken xmlrpcvals...
|
92 |
+
//if (is_object($o) && (get_class($o) == 'xmlrpcval' || is_subclass_of($o, 'xmlrpcval')))
|
93 |
+
//{
|
94 |
+
$ar = $o->me;
|
95 |
+
$val = reset($ar);
|
96 |
+
$typ = key($ar);
|
97 |
+
|
98 |
+
return '<value>' . $this->serializedata($typ, $val) . "</value>\n";
|
99 |
+
//}
|
100 |
+
}
|
101 |
+
|
102 |
+
/**
|
103 |
+
* @deprecated this code looks like it is very fragile and has not been fixed
|
104 |
+
* for a long long time. Shall we remove it for 2.0?
|
105 |
+
*/
|
106 |
+
public function getval()
|
107 |
+
{
|
108 |
+
// UNSTABLE
|
109 |
+
$b = reset($this->me);
|
110 |
+
$a = key($this->me);
|
111 |
+
// contributed by I Sofer, 2001-03-24
|
112 |
+
// add support for nested arrays to scalarval
|
113 |
+
// i've created a new method here, so as to
|
114 |
+
// preserve back compatibility
|
115 |
+
|
116 |
+
if (is_array($b)) {
|
117 |
+
foreach($b as $id => $cont) {
|
118 |
+
$b[$id] = $cont->scalarval();
|
119 |
+
}
|
120 |
+
}
|
121 |
+
|
122 |
+
// add support for structures directly encoding php objects
|
123 |
+
if (is_object($b)) {
|
124 |
+
$t = get_object_vars($b);
|
125 |
+
foreach($t as $id => $cont) {
|
126 |
+
$t[$id] = $cont->scalarval();
|
127 |
+
}
|
128 |
+
foreach($t as $id => $cont) {
|
129 |
+
@$b->$id = $cont;
|
130 |
+
}
|
131 |
+
}
|
132 |
+
// end contrib
|
133 |
+
return $b;
|
134 |
+
}
|
135 |
+
|
136 |
+
/// reset functionality added by parent class: same as it would happen if no interface was declared
|
137 |
+
public function count()
|
138 |
+
{
|
139 |
+
return 1;
|
140 |
+
}
|
141 |
+
|
142 |
+
/// reset functionality added by parent class: same as it would happen if no interface was declared
|
143 |
+
public function getIterator() {
|
144 |
+
return new ArrayIterator($this);
|
145 |
+
}
|
146 |
+
}
|
147 |
+
|
148 |
+
class xmlrpcmsg extends PhpXmlRpc\Request
|
149 |
+
{
|
150 |
+
}
|
151 |
+
|
152 |
+
class xmlrpcresp extends PhpXmlRpc\Response
|
153 |
+
{
|
154 |
+
}
|
155 |
+
|
156 |
+
class xmlrpc_client extends PhpXmlRpc\Client
|
157 |
+
{
|
158 |
+
}
|
159 |
+
|
160 |
+
/* Expose as global functions the ones which are now class methods */
|
161 |
+
|
162 |
+
/// Wrong speling, but we are adamant on backwards compatibility!
|
163 |
+
function xmlrpc_encode_entitites($data, $srcEncoding='', $destEncoding='')
|
164 |
+
{
|
165 |
+
return PhpXmlRpc\Helper\Charset::instance()->encodeEntitites($data, $srcEncoding, $destEncoding);
|
166 |
+
}
|
167 |
+
|
168 |
+
function iso8601_encode($timeT, $utc=0)
|
169 |
+
{
|
170 |
+
return PhpXmlRpc\Helper\Date::iso8601Encode($timeT, $utc);
|
171 |
+
}
|
172 |
+
|
173 |
+
function iso8601_decode($iDate, $utc=0)
|
174 |
+
{
|
175 |
+
return PhpXmlRpc\Helper\Date::iso8601Decode($iDate, $utc);
|
176 |
+
}
|
177 |
+
|
178 |
+
function decode_chunked($buffer)
|
179 |
+
{
|
180 |
+
return PhpXmlRpc\Helper\Http::decodeChunked($buffer);
|
181 |
+
}
|
182 |
+
|
183 |
+
function php_xmlrpc_decode($xmlrpcVal, $options=array())
|
184 |
+
{
|
185 |
+
$encoder = new PhpXmlRpc\Encoder();
|
186 |
+
return $encoder->decode($xmlrpcVal, $options);
|
187 |
+
}
|
188 |
+
|
189 |
+
function php_xmlrpc_encode($phpVal, $options=array())
|
190 |
+
{
|
191 |
+
$encoder = new PhpXmlRpc\Encoder();
|
192 |
+
return $encoder->encode($phpVal, $options);
|
193 |
+
}
|
194 |
+
|
195 |
+
function php_xmlrpc_decode_xml($xmlVal, $options=array())
|
196 |
+
{
|
197 |
+
$encoder = new PhpXmlRpc\Encoder();
|
198 |
+
return $encoder->decodeXml($xmlVal, $options);
|
199 |
+
}
|
200 |
+
|
201 |
+
function guess_encoding($httpHeader='', $xmlChunk='', $encodingPrefs=null)
|
202 |
+
{
|
203 |
+
return PhpXmlRpc\Helper\XMLParser::guessEncoding($httpHeader, $xmlChunk, $encodingPrefs);
|
204 |
+
}
|
205 |
+
|
206 |
+
function has_encoding($xmlChunk)
|
207 |
+
{
|
208 |
+
return PhpXmlRpc\Helper\XMLParser::hasEncoding($xmlChunk);
|
209 |
+
}
|
210 |
+
|
211 |
+
function is_valid_charset($encoding, $validList)
|
212 |
+
{
|
213 |
+
return PhpXmlRpc\Helper\Charset::instance()->isValidCharset($encoding, $validList);
|
214 |
+
}
|
js/build/builder.bundle.js
CHANGED
@@ -20692,6 +20692,7 @@ var InlineEditor = function (_Component) {
|
|
20692 |
inline: true,
|
20693 |
menubar: false,
|
20694 |
paste_as_text: true,
|
|
|
20695 |
skin: FLBuilder ? false : 'lightgray',
|
20696 |
skin_url: FLBuilder ? false : tinyMCEPreInit.baseURL + '/skins/lightgray/',
|
20697 |
theme: 'modern',
|
@@ -20813,6 +20814,7 @@ var InlineEditor = function (_Component) {
|
|
20813 |
}, {
|
20814 |
key: 'onEditorChange',
|
20815 |
value: function onEditorChange(e) {
|
|
|
20816 |
var target = e.target.bodyElement ? e.target.bodyElement : e.target;
|
20817 |
|
20818 |
var _getEditorEventVars = this.getEditorEventVars(target),
|
@@ -20830,9 +20832,9 @@ var InlineEditor = function (_Component) {
|
|
20830 |
var textarea = settings.find('#fl-field-' + field.name + ' textarea.wp-editor-area');
|
20831 |
var editorId = textarea.attr('id');
|
20832 |
if (textarea.closest('.tmce-active').length) {
|
20833 |
-
tinymce.get(editorId).setContent(content);
|
20834 |
} else {
|
20835 |
-
textarea.val(content);
|
20836 |
}
|
20837 |
} else {
|
20838 |
var _textarea = document.createElement('textarea');
|
@@ -21004,6 +21006,16 @@ var InlineEditor = function (_Component) {
|
|
21004 |
value: function matchHTML(a, b) {
|
21005 |
return this.cleanHTML(a) === this.cleanHTML(b);
|
21006 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
21007 |
}, {
|
21008 |
key: 'cleanHTML',
|
21009 |
value: function cleanHTML(html) {
|
20692 |
inline: true,
|
20693 |
menubar: false,
|
20694 |
paste_as_text: true,
|
20695 |
+
relative_urls: false,
|
20696 |
skin: FLBuilder ? false : 'lightgray',
|
20697 |
skin_url: FLBuilder ? false : tinyMCEPreInit.baseURL + '/skins/lightgray/',
|
20698 |
theme: 'modern',
|
20814 |
}, {
|
20815 |
key: 'onEditorChange',
|
20816 |
value: function onEditorChange(e) {
|
20817 |
+
|
20818 |
var target = e.target.bodyElement ? e.target.bodyElement : e.target;
|
20819 |
|
20820 |
var _getEditorEventVars = this.getEditorEventVars(target),
|
20832 |
var textarea = settings.find('#fl-field-' + field.name + ' textarea.wp-editor-area');
|
20833 |
var editorId = textarea.attr('id');
|
20834 |
if (textarea.closest('.tmce-active').length) {
|
20835 |
+
tinymce.get(editorId).setContent(this.fixURLs(content));
|
20836 |
} else {
|
20837 |
+
textarea.val(this.fixURLs(content));
|
20838 |
}
|
20839 |
} else {
|
20840 |
var _textarea = document.createElement('textarea');
|
21006 |
value: function matchHTML(a, b) {
|
21007 |
return this.cleanHTML(a) === this.cleanHTML(b);
|
21008 |
}
|
21009 |
+
}, {
|
21010 |
+
key: 'fixURLs',
|
21011 |
+
value: function fixURLs(html) {
|
21012 |
+
html = html.replace(/href="[^http#]/g, 'href="' + FLBuilderConfig.homeUrl + '/');
|
21013 |
+
html = html.replace(/href="(\.\.\/){1,2}/g, 'href="' + FLBuilderConfig.homeUrl + '/');
|
21014 |
+
|
21015 |
+
html = html.replace(/src="(\.\.\/){1,2}/g, 'src="' + FLBuilderConfig.homeUrl + '/');
|
21016 |
+
html = html.replace(/src="[^http]/g, 'src="' + FLBuilderConfig.homeUrl + '/');
|
21017 |
+
return html;
|
21018 |
+
}
|
21019 |
}, {
|
21020 |
key: 'cleanHTML',
|
21021 |
value: function cleanHTML(html) {
|
js/build/builder.bundle.min.js
CHANGED
@@ -3,7 +3,7 @@ object-assign
|
|
3 |
(c) Sindre Sorhus
|
4 |
@license MIT
|
5 |
*/
|
6 |
-
var o=Object.getOwnPropertySymbols,i=Object.prototype.hasOwnProperty,l=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map(function(e){return t[e]}).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach(function(e){r[e]=e}),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(e){return!1}}()?Object.assign:function(e,t){for(var n,a,u=r(e),c=1;c<arguments.length;c++){n=Object(arguments[c]);for(var s in n)i.call(n,s)&&(u[s]=n[s]);if(o){a=o(n);for(var f=0;f<a.length;f++)l.call(n,a[f])&&(u[a[f]]=n[a[f]])}}return u}},function(e,t,n){"use strict";function r(e,t,n,r,i,l,a,u){if(o(t),!e){var c;if(void 0===t)c=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var s=[n,r,i,l,a,u],f=0;c=new Error(t.replace(/%s/g,function(){return s[f++]})),c.name="Invariant Violation"}throw c.framesToPop=1,c}}var o=function(e){};e.exports=r},function(e,t,n){"use strict";var r={};e.exports=r},function(e,t,n){"use strict";function r(e){return function(){return e}}var o=function(){};o.thatReturns=r,o.thatReturnsFalse=r(!1),o.thatReturnsTrue=r(!0),o.thatReturnsNull=r(null),o.thatReturnsThis=function(){return this},o.thatReturnsArgument=function(e){return e},e.exports=o},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}var o=n(0),i=r(o),l=n(7),a=r(l),u=n(15),c=r(u),s=n(16),f=r(s);n(23),a.default.render(i.default.createElement(c.default,null,i.default.createElement(f.default,null)),document.getElementById("fl-ui-root"))},function(e,t,n){"use strict";function r(e){for(var t=arguments.length-1,n="https://reactjs.org/docs/error-decoder.html?invariant="+e,r=0;r<t;r++)n+="&args[]="+encodeURIComponent(arguments[r+1]);g(!1,"Minified React error #"+e+"; visit %s for the full message or use the non-minified dev environment for full errors and additional helpful warnings. ",n)}function o(e,t,n){this.props=e,this.context=t,this.refs=b,this.updater=n||F}function i(){}function l(e,t,n){this.props=e,this.context=t,this.refs=b,this.updater=n||F}function a(e,t,n){var r=void 0,o={},i=null,l=null;if(null!=t)for(r in void 0!==t.ref&&(l=t.ref),void 0!==t.key&&(i=""+t.key),t)
|
7 |
* react.production.min.js
|
8 |
*
|
9 |
* Copyright (c) 2013-present, Facebook, Inc.
|
@@ -11,7 +11,7 @@ var o=Object.getOwnPropertySymbols,i=Object.prototype.hasOwnProperty,l=Object.pr
|
|
11 |
* This source code is licensed under the MIT license found in the
|
12 |
* LICENSE file in the root directory of this source tree.
|
13 |
*/
|
14 |
-
var v=n(1),g=n(2),b=n(3),k=n(4),w="function"==typeof Symbol&&Symbol.for,E=w?Symbol.for("react.element"):60103,_=w?Symbol.for("react.portal"):60106,C=w?Symbol.for("react.fragment"):60107,x=w?Symbol.for("react.strict_mode"):60108,T=w?Symbol.for("react.profiler"):60114,S=w?Symbol.for("react.provider"):60109,P=w?Symbol.for("react.context"):60110,N=w?Symbol.for("react.async_mode"):60111,O=w?Symbol.for("react.forward_ref"):60112;w&&Symbol.for("react.timeout");var M="function"==typeof Symbol&&Symbol.iterator,F={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}};o.prototype.isReactComponent={},o.prototype.setState=function(e,t){"object"!=typeof e&&"function"!=typeof e&&null!=e&&r("85"),this.updater.enqueueSetState(this,e,t,"setState")},o.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},i.prototype=o.prototype;var L=l.prototype=new i;L.constructor=l,v(L,o.prototype),L.isPureReactComponent=!0;var R={current:null},I=Object.prototype.hasOwnProperty,U={key:!0,ref:!0,__self:!0,__source:!0},j=/\/+/g,D=[],z={Children:{map:function(e,t,n){if(null==e)return e;var r=[];return y(e,r,null,t,n),r},forEach:function(e,t,n){if(null==e)return e;t=s(null,null,t,n),null==e||d(e,"",h,t),f(t)},count:function(e){return null==e?0:d(e,"",k.thatReturnsNull,null)},toArray:function(e){var t=[];return y(e,t,null,k.thatReturnsArgument),t},only:function(e){return u(e)||r("143"),e}},createRef:function(){return{current:null}},Component:o,PureComponent:l,createContext:function(e,t){return void 0===t&&(t=null),e={$$typeof:P,_calculateChangedBits:t,_defaultValue:e,_currentValue:e,_currentValue2:e,_changedBits:0,_changedBits2:0,Provider:null,Consumer:null},e.Provider={$$typeof:S,_context:e},e.Consumer=e},forwardRef:function(e){return{$$typeof:O,render:e}},Fragment:C,StrictMode:x,unstable_AsyncMode:N,unstable_Profiler:T,createElement:a,cloneElement:function(e,t,n){(null===e||void 0===e)&&r("267",e);var o=void 0,i=v({},e.props),l=e.key,a=e.ref,u=e._owner;if(null!=t){void 0!==t.ref&&(a=t.ref,u=R.current),void 0!==t.key&&(l=""+t.key);var c=void 0;e.type&&e.type.defaultProps&&(c=e.type.defaultProps);for(o in t)I.call(t,o)&&!U.hasOwnProperty(o)&&(i[o]=void 0===t[o]&&void 0!==c?c[o]:t[o])}if(1===(o=arguments.length-2))i.children=n;else if(1<o){c=Array(o);for(var s=0;s<o;s++)c[s]=arguments[s+2];i.children=c}return{$$typeof:E,type:e.type,key:l,ref:a,props:i,_owner:u}},createFactory:function(e){var t=a.bind(null,e);return t.type=e,t},isValidElement:u,version:"16.4.2",__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:{ReactCurrentOwner:R,assign:v}},A={default:z},B=A&&z||A;e.exports=B.default?B.default:B},function(e,t,n){"use strict";function r(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(r)}catch(e){console.error(e)}}r(),e.exports=n(8)},function(e,t,n){"use strict";function r(e){for(var t=arguments.length-1,n="https://reactjs.org/docs/error-decoder.html?invariant="+e,r=0;r<t;r++)n+="&args[]="+encodeURIComponent(arguments[r+1]);Rr(!1,"Minified React error #"+e+"; visit %s for the full message or use the non-minified dev environment for full errors and additional helpful warnings. ",n)}function o(e,t,n,r,o,i,l,a,u){this._hasCaughtError=!1,this._caughtError=null;var c=Array.prototype.slice.call(arguments,3);try{t.apply(n,c)}catch(e){this._caughtError=e,this._hasCaughtError=!0}}function i(){if(Vr._hasRethrowError){var e=Vr._rethrowError;throw Vr._rethrowError=null,Vr._hasRethrowError=!1,e}}function l(){if(Wr)for(var e in Qr){var t=Qr[e],n=Wr.indexOf(e);if(-1<n||r("96",e),!$r[n]){t.extractEvents||r("97",e),$r[n]=t,n=t.eventTypes;for(var o in n){var i=void 0,l=n[o],u=t,c=o;Kr.hasOwnProperty(c)&&r("99",c),Kr[c]=l;var s=l.phasedRegistrationNames;if(s){for(i in s)s.hasOwnProperty(i)&&a(s[i],u,c);i=!0}else l.registrationName?(a(l.registrationName,u,c),i=!0):i=!1;i||r("98",o,e)}}}}function a(e,t,n){qr[e]&&r("100",e),qr[e]=t,Gr[e]=t.eventTypes[n].dependencies}function u(e){Wr&&r("101"),Wr=Array.prototype.slice.call(e),l()}function c(e){var t,n=!1;for(t in e)if(e.hasOwnProperty(t)){var o=e[t];Qr.hasOwnProperty(t)&&Qr[t]===o||(Qr[t]&&r("102",t),Qr[t]=o,n=!0)}n&&l()}function s(e,t,n,r){t=e.type||"unknown-event",e.currentTarget=Jr(r),Vr.invokeGuardedCallbackAndCatchFirstError(t,n,void 0,e),e.currentTarget=null}function f(e,t){return null==t&&r("30"),null==e?t:Array.isArray(e)?Array.isArray(t)?(e.push.apply(e,t),e):(e.push(t),e):Array.isArray(t)?[e].concat(t):[e,t]}function d(e,t,n){Array.isArray(e)?e.forEach(t,n):e&&t.call(n,e)}function p(e,t){if(e){var n=e._dispatchListeners,r=e._dispatchInstances;if(Array.isArray(n))for(var o=0;o<n.length&&!e.isPropagationStopped();o++)s(e,t,n[o],r[o]);else n&&s(e,t,n,r);e._dispatchListeners=null,e._dispatchInstances=null,e.isPersistent()||e.constructor.release(e)}}function h(e){return p(e,!0)}function m(e){return p(e,!1)}function y(e,t){var n=e.stateNode;if(!n)return null;var o=Xr(n);if(!o)return null;n=o[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":(o=!o.disabled)||(e=e.type,o=!("button"===e||"input"===e||"select"===e||"textarea"===e)),e=!o;break e;default:e=!1}return e?null:(n&&"function"!=typeof n&&r("231",t,typeof n),n)}function v(e,t){null!==e&&(eo=f(eo,e)),e=eo,eo=null,e&&(t?d(e,h):d(e,m),eo&&r("95"),Vr.rethrowCaughtError())}function g(e,t,n,r){for(var o=null,i=0;i<$r.length;i++){var l=$r[i];l&&(l=l.extractEvents(e,t,n,r))&&(o=f(o,l))}v(o,!1)}function b(e){if(e[oo])return e[oo];for(;!e[oo];){if(!e.parentNode)return null;e=e.parentNode}return e=e[oo],5===e.tag||6===e.tag?e:null}function k(e){if(5===e.tag||6===e.tag)return e.stateNode;r("33")}function w(e){return e[io]||null}function E(e){do{e=e.return}while(e&&5!==e.tag);return e||null}function _(e,t,n){for(var r=[];e;)r.push(e),e=E(e);for(e=r.length;0<e--;)t(r[e],"captured",n);for(e=0;e<r.length;e++)t(r[e],"bubbled",n)}function C(e,t,n){(t=y(e,n.dispatchConfig.phasedRegistrationNames[t]))&&(n._dispatchListeners=f(n._dispatchListeners,t),n._dispatchInstances=f(n._dispatchInstances,e))}function x(e){e&&e.dispatchConfig.phasedRegistrationNames&&_(e._targetInst,C,e)}function T(e){if(e&&e.dispatchConfig.phasedRegistrationNames){var t=e._targetInst;t=t?E(t):null,_(t,C,e)}}function S(e,t,n){e&&n&&n.dispatchConfig.registrationName&&(t=y(e,n.dispatchConfig.registrationName))&&(n._dispatchListeners=f(n._dispatchListeners,t),n._dispatchInstances=f(n._dispatchInstances,e))}function P(e){e&&e.dispatchConfig.registrationName&&S(e._targetInst,null,e)}function N(e){d(e,x)}function O(e,t,n,r){if(n&&r)e:{for(var o=n,i=r,l=0,a=o;a;a=E(a))l++;a=0;for(var u=i;u;u=E(u))a++;for(;0<l-a;)o=E(o),l--;for(;0<a-l;)i=E(i),a--;for(;l--;){if(o===i||o===i.alternate)break e;o=E(o),i=E(i)}o=null}else o=null;for(i=o,o=[];n&&n!==i&&(null===(l=n.alternate)||l!==i);)o.push(n),n=E(n);for(n=[];r&&r!==i&&(null===(l=r.alternate)||l!==i);)n.push(r),r=E(r);for(r=0;r<o.length;r++)S(o[r],"bubbled",e);for(e=n.length;0<e--;)S(n[e],"captured",t)}function M(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n["ms"+e]="MS"+t,n["O"+e]="o"+t.toLowerCase(),n}function F(e){if(co[e])return co[e];if(!uo[e])return e;var t,n=uo[e];for(t in n)if(n.hasOwnProperty(t)&&t in so)return co[e]=n[t];return e}function L(){return!vo&&Ur.canUseDOM&&(vo="textContent"in document.documentElement?"textContent":"innerText"),vo}function R(){if(go._fallbackText)return go._fallbackText;var e,t,n=go._startText,r=n.length,o=I(),i=o.length;for(e=0;e<r&&n[e]===o[e];e++);var l=r-e;for(t=1;t<=l&&n[r-t]===o[i-t];t++);return go._fallbackText=o.slice(e,1<t?1-t:void 0),go._fallbackText}function I(){return"value"in go._root?go._root.value:go._root[L()]}function U(e,t,n,r){this.dispatchConfig=e,this._targetInst=t,this.nativeEvent=n,e=this.constructor.Interface;for(var o in e)e.hasOwnProperty(o)&&((t=e[o])?this[o]=t(n):"target"===o?this.target=r:this[o]=n[o]);return this.isDefaultPrevented=(null!=n.defaultPrevented?n.defaultPrevented:!1===n.returnValue)?Dr.thatReturnsTrue:Dr.thatReturnsFalse,this.isPropagationStopped=Dr.thatReturnsFalse,this}function j(e,t,n,r){if(this.eventPool.length){var o=this.eventPool.pop();return this.call(o,e,t,n,r),o}return new this(e,t,n,r)}function D(e){e instanceof this||r("223"),e.destructor(),10>this.eventPool.length&&this.eventPool.push(e)}function z(e){e.eventPool=[],e.getPooled=j,e.release=D}function A(e,t){switch(e){case"keyup":return-1!==_o.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"blur":return!0;default:return!1}}function B(e){return e=e.detail,"object"==typeof e&&"data"in e?e.data:null}function H(e,t){switch(e){case"compositionend":return B(t);case"keypress":return 32!==t.which?null:(Oo=!0,Po);case"textInput":return e=t.data,e===Po&&Oo?null:e;default:return null}}function V(e,t){if(Mo)return"compositionend"===e||!Co&&A(e,t)?(e=R(),go._root=null,go._startText=null,go._fallbackText=null,Mo=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return So?null:t.data;default:return null}}function W(e){if(e=Zr(e)){Lo&&"function"==typeof Lo.restoreControlledState||r("194");var t=Xr(e.stateNode);Lo.restoreControlledState(e.stateNode,e.type,t)}}function Q(e){Io?Uo?Uo.push(e):Uo=[e]:Io=e}function $(){return null!==Io||null!==Uo}function K(){if(Io){var e=Io,t=Uo;if(Uo=Io=null,W(e),t)for(e=0;e<t.length;e++)W(t[e])}}function q(e,t){return e(t)}function G(e,t,n){return e(t,n)}function Y(){}function X(e,t){if(Do)return e(t);Do=!0;try{return q(e,t)}finally{Do=!1,$()&&(Y(),K())}}function Z(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!zo[e.type]:"textarea"===t}function J(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}function ee(e,t){return!(!Ur.canUseDOM||t&&!("addEventListener"in document))&&(e="on"+e,t=e in document,t||(t=document.createElement("div"),t.setAttribute(e,"return;"),t="function"==typeof t[e]),t)}function te(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function ne(e){var t=te(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&void 0!==n&&"function"==typeof n.get&&"function"==typeof n.set){var o=n.get,i=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(e){r=""+e,i.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(e){r=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function re(e){e._valueTracker||(e._valueTracker=ne(e))}function oe(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=te(e)?e.checked?"true":"false":e.value),(e=r)!==n&&(t.setValue(e),!0)}function ie(e){return null===e||void 0===e?null:(e=Zo&&e[Zo]||e["@@iterator"],"function"==typeof e?e:null)}function le(e){var t=e.type;if("function"==typeof t)return t.displayName||t.name;if("string"==typeof t)return t;switch(t){case Go:return"AsyncMode";case qo:return"Context.Consumer";case Wo:return"ReactFragment";case Vo:return"ReactPortal";case $o:return"Profiler("+e.pendingProps.id+")";case Ko:return"Context.Provider";case Qo:return"StrictMode";case Xo:return"Timeout"}if("object"==typeof t&&null!==t)switch(t.$$typeof){case Yo:return e=t.render.displayName||t.render.name||"",""!==e?"ForwardRef("+e+")":"ForwardRef"}return null}function ae(e){var t="";do{e:switch(e.tag){case 0:case 1:case 2:case 5:var n=e._debugOwner,r=e._debugSource,o=le(e),i=null;n&&(i=le(n)),n=r,o="\n in "+(o||"Unknown")+(n?" (at "+n.fileName.replace(/^.*[\\\/]/,"")+":"+n.lineNumber+")":i?" (created by "+i+")":"");break e;default:o=""}t+=o,e=e.return}while(e);return t}function ue(e){return!!ei.call(ni,e)||!ei.call(ti,e)&&(Jo.test(e)?ni[e]=!0:(ti[e]=!0,!1))}function ce(e,t,n,r){if(null!==n&&0===n.type)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return!r&&(null!==n?!n.acceptsBooleans:"data-"!==(e=e.toLowerCase().slice(0,5))&&"aria-"!==e);default:return!1}}function se(e,t,n,r){if(null===t||void 0===t||ce(e,t,n,r))return!0;if(r)return!1;if(null!==n)switch(n.type){case 3:return!t;case 4:return!1===t;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function fe(e,t,n,r,o){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=r,this.attributeNamespace=o,this.mustUseProperty=n,this.propertyName=e,this.type=t}function de(e){return e[1].toUpperCase()}function pe(e,t,n,r){var o=ri.hasOwnProperty(t)?ri[t]:null;(null!==o?0===o.type:!r&&(2<t.length&&("o"===t[0]||"O"===t[0])&&("n"===t[1]||"N"===t[1])))||(se(t,n,o,r)&&(n=null),r||null===o?ue(t)&&(null===n?e.removeAttribute(t):e.setAttribute(t,""+n)):o.mustUseProperty?e[o.propertyName]=null===n?3!==o.type&&"":n:(t=o.attributeName,r=o.attributeNamespace,null===n?e.removeAttribute(t):(o=o.type,n=3===o||4===o&&!0===n?"":""+n,r?e.setAttributeNS(r,t,n):e.setAttribute(t,n))))}function he(e,t){var n=t.checked;return jr({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function me(e,t){var n=null==t.defaultValue?"":t.defaultValue,r=null!=t.checked?t.checked:t.defaultChecked;n=ke(null!=t.value?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:"checkbox"===t.type||"radio"===t.type?null!=t.checked:null!=t.value}}function ye(e,t){null!=(t=t.checked)&&pe(e,"checked",t,!1)}function ve(e,t){ye(e,t);var n=ke(t.value);null!=n&&("number"===t.type?(0===n&&""===e.value||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n)),t.hasOwnProperty("value")?be(e,t.type,n):t.hasOwnProperty("defaultValue")&&be(e,t.type,ke(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function ge(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){t=""+e._wrapperState.initialValue;var r=e.value;n||t===r||(e.value=t),e.defaultValue=t}n=e.name,""!==n&&(e.name=""),e.defaultChecked=!e.defaultChecked,e.defaultChecked=!e.defaultChecked,""!==n&&(e.name=n)}function be(e,t,n){"number"===t&&e.ownerDocument.activeElement===e||(null==n?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}function ke(e){switch(typeof e){case"boolean":case"number":case"object":case"string":case"undefined":return e;default:return""}}function we(e,t,n){return e=U.getPooled(ii.change,e,t,n),e.type="change",Q(n),N(e),e}function Ee(e){v(e,!1)}function _e(e){if(oe(k(e)))return e}function Ce(e,t){if("change"===e)return t}function xe(){li&&(li.detachEvent("onpropertychange",Te),ai=li=null)}function Te(e){"value"===e.propertyName&&_e(ai)&&(e=we(ai,e,J(e)),X(Ee,e))}function Se(e,t,n){"focus"===e?(xe(),li=t,ai=n,li.attachEvent("onpropertychange",Te)):"blur"===e&&xe()}function Pe(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return _e(ai)}function Ne(e,t){if("click"===e)return _e(t)}function Oe(e,t){if("input"===e||"change"===e)return _e(t)}function Me(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=fi[e])&&!!t[e]}function Fe(){return Me}function Le(e){var t=e;if(e.alternate)for(;t.return;)t=t.return;else{if(0!=(2&t.effectTag))return 1;for(;t.return;)if(t=t.return,0!=(2&t.effectTag))return 1}return 3===t.tag?2:3}function Re(e){2!==Le(e)&&r("188")}function Ie(e){var t=e.alternate;if(!t)return t=Le(e),3===t&&r("188"),1===t?null:e;for(var n=e,o=t;;){var i=n.return,l=i?i.alternate:null;if(!i||!l)break;if(i.child===l.child){for(var a=i.child;a;){if(a===n)return Re(i),e;if(a===o)return Re(i),t;a=a.sibling}r("188")}if(n.return!==o.return)n=i,o=l;else{a=!1;for(var u=i.child;u;){if(u===n){a=!0,n=i,o=l;break}if(u===o){a=!0,o=i,n=l;break}u=u.sibling}if(!a){for(u=l.child;u;){if(u===n){a=!0,n=l,o=i;break}if(u===o){a=!0,o=l,n=i;break}u=u.sibling}a||r("189")}}n.alternate!==o&&r("190")}return 3!==n.tag&&r("188"),n.stateNode.current===n?e:t}function Ue(e){if(!(e=Ie(e)))return null;for(var t=e;;){if(5===t.tag||6===t.tag)return t;if(t.child)t.child.return=t,t=t.child;else{if(t===e)break;for(;!t.sibling;){if(!t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}}return null}function je(e){if(!(e=Ie(e)))return null;for(var t=e;;){if(5===t.tag||6===t.tag)return t;if(t.child&&4!==t.tag)t.child.return=t,t=t.child;else{if(t===e)break;for(;!t.sibling;){if(!t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}}return null}function De(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}function ze(e,t){var n=e[0];e=e[1];var r="on"+(e[0].toUpperCase()+e.slice(1));t={phasedRegistrationNames:{bubbled:r,captured:r+"Capture"},dependencies:[n],isInteractive:t},Si[e]=t,Pi[n]=t}function Ae(e){var t=e.targetInst;do{if(!t){e.ancestors.push(t);break}var n;for(n=t;n.return;)n=n.return;if(!(n=3!==n.tag?null:n.stateNode.containerInfo))break;e.ancestors.push(t),t=b(n)}while(t);for(n=0;n<e.ancestors.length;n++)t=e.ancestors[n],g(e.topLevelType,t,e.nativeEvent,J(e.nativeEvent))}function Be(e){Fi=!!e}function He(e,t){if(!t)return null;var n=(Oi(e)?We:Qe).bind(null,e);t.addEventListener(e,n,!1)}function Ve(e,t){if(!t)return null;var n=(Oi(e)?We:Qe).bind(null,e);t.addEventListener(e,n,!0)}function We(e,t){G(Qe,e,t)}function Qe(e,t){if(Fi){var n=J(t);if(n=b(n),null===n||"number"!=typeof n.tag||2===Le(n)||(n=null),Mi.length){var r=Mi.pop();r.topLevelType=e,r.nativeEvent=t,r.targetInst=n,e=r}else e={topLevelType:e,nativeEvent:t,targetInst:n,ancestors:[]};try{X(Ae,e)}finally{e.topLevelType=null,e.nativeEvent=null,e.targetInst=null,e.ancestors.length=0,10>Mi.length&&Mi.push(e)}}}function $e(e){return Object.prototype.hasOwnProperty.call(e,Ui)||(e[Ui]=Ii++,Ri[e[Ui]]={}),Ri[e[Ui]]}function Ke(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function qe(e,t){var n=Ke(e);e=0;for(var r;n;){if(3===n.nodeType){if(r=e+n.textContent.length,e<=t&&r>=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=Ke(n)}}function Ge(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}function Ye(e,t){if(Hi||null==zi||zi!==zr())return null;var n=zi;return"selectionStart"in n&&Ge(n)?n={start:n.selectionStart,end:n.selectionEnd}:window.getSelection?(n=window.getSelection(),n={anchorNode:n.anchorNode,anchorOffset:n.anchorOffset,focusNode:n.focusNode,focusOffset:n.focusOffset}):n=void 0,Bi&&Ar(Bi,n)?null:(Bi=n,e=U.getPooled(Di.select,Ai,e,t),e.type="select",e.target=zi,N(e),e)}function Xe(e){var t="";return Ir.Children.forEach(e,function(e){null==e||"string"!=typeof e&&"number"!=typeof e||(t+=e)}),t}function Ze(e,t){return e=jr({children:void 0},t),(t=Xe(t.children))&&(e.children=t),e}function Je(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o<n.length;o++)t["$"+n[o]]=!0;for(n=0;n<e.length;n++)o=t.hasOwnProperty("$"+e[n].value),e[n].selected!==o&&(e[n].selected=o),o&&r&&(e[n].defaultSelected=!0)}else{for(n=""+n,t=null,o=0;o<e.length;o++){if(e[o].value===n)return e[o].selected=!0,void(r&&(e[o].defaultSelected=!0));null!==t||e[o].disabled||(t=e[o])}null!==t&&(t.selected=!0)}}function et(e,t){var n=t.value;e._wrapperState={initialValue:null!=n?n:t.defaultValue,wasMultiple:!!t.multiple}}function tt(e,t){return null!=t.dangerouslySetInnerHTML&&r("91"),jr({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function nt(e,t){var n=t.value;null==n&&(n=t.defaultValue,t=t.children,null!=t&&(null!=n&&r("92"),Array.isArray(t)&&(1>=t.length||r("93"),t=t[0]),n=""+t),null==n&&(n="")),e._wrapperState={initialValue:""+n}}function rt(e,t){var n=t.value;null!=n&&(n=""+n,n!==e.value&&(e.value=n),null==t.defaultValue&&(e.defaultValue=n)),null!=t.defaultValue&&(e.defaultValue=t.defaultValue)}function ot(e){var t=e.textContent;t===e._wrapperState.initialValue&&(e.value=t)}function it(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function lt(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?it(t):"http://www.w3.org/2000/svg"===e&&"foreignObject"===t?"http://www.w3.org/1999/xhtml":e}function at(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}function ut(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=0===n.indexOf("--"),o=n,i=t[n];o=null==i||"boolean"==typeof i||""===i?"":r||"number"!=typeof i||0===i||ml.hasOwnProperty(o)&&ml[o]?(""+i).trim():i+"px","float"===n&&(n="cssFloat"),r?e.setProperty(n,o):e[n]=o}}function ct(e,t,n){t&&(vl[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML)&&r("137",e,n()),null!=t.dangerouslySetInnerHTML&&(null!=t.children&&r("60"),"object"==typeof t.dangerouslySetInnerHTML&&"__html"in t.dangerouslySetInnerHTML||r("61")),null!=t.style&&"object"!=typeof t.style&&r("62",n()))}function st(e,t){if(-1===e.indexOf("-"))return"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}function ft(e,t){e=9===e.nodeType||11===e.nodeType?e:e.ownerDocument;var n=$e(e);t=Gr[t];for(var r=0;r<t.length;r++){var o=t[r];if(!n.hasOwnProperty(o)||!n[o]){switch(o){case"scroll":Ve("scroll",e);break;case"focus":case"blur":Ve("focus",e),Ve("blur",e),n.blur=!0,n.focus=!0;break;case"cancel":case"close":ee(o,!0)&&Ve(o,e);break;case"invalid":case"submit":case"reset":break;default:-1===yo.indexOf(o)&&He(o,e)}n[o]=!0}}}function dt(e,t,n,r){return n=9===n.nodeType?n:n.ownerDocument,r===dl.html&&(r=it(e)),r===dl.html?"script"===e?(e=n.createElement("div"),e.innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):e="string"==typeof t.is?n.createElement(e,{is:t.is}):n.createElement(e):e=n.createElementNS(r,e),e}function pt(e,t){return(9===t.nodeType?t:t.ownerDocument).createTextNode(e)}function ht(e,t,n,r){var o=st(t,n);switch(t){case"iframe":case"object":He("load",e);var i=n;break;case"video":case"audio":for(i=0;i<yo.length;i++)He(yo[i],e);i=n;break;case"source":He("error",e),i=n;break;case"img":case"image":case"link":He("error",e),He("load",e),i=n;break;case"form":He("reset",e),He("submit",e),i=n;break;case"details":He("toggle",e),i=n;break;case"input":me(e,n),i=he(e,n),He("invalid",e),ft(r,"onChange");break;case"option":i=Ze(e,n);break;case"select":et(e,n),i=jr({},n,{value:void 0}),He("invalid",e),ft(r,"onChange");break;case"textarea":nt(e,n),i=tt(e,n),He("invalid",e),ft(r,"onChange");break;default:i=n}ct(t,i,gl);var l,a=i;for(l in a)if(a.hasOwnProperty(l)){var u=a[l];"style"===l?ut(e,u,gl):"dangerouslySetInnerHTML"===l?null!=(u=u?u.__html:void 0)&&hl(e,u):"children"===l?"string"==typeof u?("textarea"!==t||""!==u)&&at(e,u):"number"==typeof u&&at(e,""+u):"suppressContentEditableWarning"!==l&&"suppressHydrationWarning"!==l&&"autoFocus"!==l&&(qr.hasOwnProperty(l)?null!=u&&ft(r,l):null!=u&&pe(e,l,u,o))}switch(t){case"input":re(e),ge(e,n,!1);break;case"textarea":re(e),ot(e,n);break;case"option":null!=n.value&&e.setAttribute("value",n.value);break;case"select":e.multiple=!!n.multiple,t=n.value,null!=t?Je(e,!!n.multiple,t,!1):null!=n.defaultValue&&Je(e,!!n.multiple,n.defaultValue,!0);break;default:"function"==typeof i.onClick&&(e.onclick=Dr)}}function mt(e,t,n,r,o){var i=null;switch(t){case"input":n=he(e,n),r=he(e,r),i=[];break;case"option":n=Ze(e,n),r=Ze(e,r),i=[];break;case"select":n=jr({},n,{value:void 0}),r=jr({},r,{value:void 0}),i=[];break;case"textarea":n=tt(e,n),r=tt(e,r),i=[];break;default:"function"!=typeof n.onClick&&"function"==typeof r.onClick&&(e.onclick=Dr)}ct(t,r,gl),t=e=void 0;var l=null;for(e in n)if(!r.hasOwnProperty(e)&&n.hasOwnProperty(e)&&null!=n[e])if("style"===e){var a=n[e];for(t in a)a.hasOwnProperty(t)&&(l||(l={}),l[t]="")}else"dangerouslySetInnerHTML"!==e&&"children"!==e&&"suppressContentEditableWarning"!==e&&"suppressHydrationWarning"!==e&&"autoFocus"!==e&&(qr.hasOwnProperty(e)?i||(i=[]):(i=i||[]).push(e,null));for(e in r){var u=r[e];if(a=null!=n?n[e]:void 0,r.hasOwnProperty(e)&&u!==a&&(null!=u||null!=a))if("style"===e)if(a){for(t in a)!a.hasOwnProperty(t)||u&&u.hasOwnProperty(t)||(l||(l={}),l[t]="");for(t in u)u.hasOwnProperty(t)&&a[t]!==u[t]&&(l||(l={}),l[t]=u[t])}else l||(i||(i=[]),i.push(e,l)),l=u;else"dangerouslySetInnerHTML"===e?(u=u?u.__html:void 0,a=a?a.__html:void 0,null!=u&&a!==u&&(i=i||[]).push(e,""+u)):"children"===e?a===u||"string"!=typeof u&&"number"!=typeof u||(i=i||[]).push(e,""+u):"suppressContentEditableWarning"!==e&&"suppressHydrationWarning"!==e&&(qr.hasOwnProperty(e)?(null!=u&&ft(o,e),i||a===u||(i=[])):(i=i||[]).push(e,u))}return l&&(i=i||[]).push("style",l),i}function yt(e,t,n,r,o){"input"===n&&"radio"===o.type&&null!=o.name&&ye(e,o),st(n,r),r=st(n,o);for(var i=0;i<t.length;i+=2){var l=t[i],a=t[i+1];"style"===l?ut(e,a,gl):"dangerouslySetInnerHTML"===l?hl(e,a):"children"===l?at(e,a):pe(e,l,a,r)}switch(n){case"input":ve(e,o);break;case"textarea":rt(e,o);break;case"select":e._wrapperState.initialValue=void 0,t=e._wrapperState.wasMultiple,e._wrapperState.wasMultiple=!!o.multiple,n=o.value,null!=n?Je(e,!!o.multiple,n,!1):t!==!!o.multiple&&(null!=o.defaultValue?Je(e,!!o.multiple,o.defaultValue,!0):Je(e,!!o.multiple,o.multiple?[]:"",!1))}}function vt(e,t,n,r,o){switch(t){case"iframe":case"object":He("load",e);break;case"video":case"audio":for(r=0;r<yo.length;r++)He(yo[r],e);break;case"source":He("error",e);break;case"img":case"image":case"link":He("error",e),He("load",e);break;case"form":He("reset",e),He("submit",e);break;case"details":He("toggle",e);break;case"input":me(e,n),He("invalid",e),ft(o,"onChange");break;case"select":et(e,n),He("invalid",e),ft(o,"onChange");break;case"textarea":nt(e,n),He("invalid",e),ft(o,"onChange")}ct(t,n,gl),r=null;for(var i in n)if(n.hasOwnProperty(i)){var l=n[i];"children"===i?"string"==typeof l?e.textContent!==l&&(r=["children",l]):"number"==typeof l&&e.textContent!==""+l&&(r=["children",""+l]):qr.hasOwnProperty(i)&&null!=l&&ft(o,i)}switch(t){case"input":re(e),ge(e,n,!0);break;case"textarea":re(e),ot(e,n);break;case"select":case"option":break;default:"function"==typeof n.onClick&&(e.onclick=Dr)}return r}function gt(e,t){return e.nodeValue!==t}function bt(e,t){switch(e){case"button":case"input":case"select":case"textarea":return!!t.autoFocus}return!1}function kt(e,t){return"textarea"===e||"string"==typeof t.children||"number"==typeof t.children||"object"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&"string"==typeof t.dangerouslySetInnerHTML.__html}function wt(e){for(e=e.nextSibling;e&&1!==e.nodeType&&3!==e.nodeType;)e=e.nextSibling;return e}function Et(e){for(e=e.firstChild;e&&1!==e.nodeType&&3!==e.nodeType;)e=e.nextSibling;return e}function _t(e){return{current:e}}function Ct(e){0>Tl||(e.current=xl[Tl],xl[Tl]=null,Tl--)}function xt(e,t){Tl++,xl[Tl]=e.current,e.current=t}function Tt(e){return Pt(e)?Nl:Sl.current}function St(e,t){var n=e.type.contextTypes;if(!n)return Hr;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var o,i={};for(o in n)i[o]=t[o];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=i),i}function Pt(e){return 2===e.tag&&null!=e.type.childContextTypes}function Nt(e){Pt(e)&&(Ct(Pl,e),Ct(Sl,e))}function Ot(e){Ct(Pl,e),Ct(Sl,e)}function Mt(e,t,n){Sl.current!==Hr&&r("168"),xt(Sl,t,e),xt(Pl,n,e)}function Ft(e,t){var n=e.stateNode,o=e.type.childContextTypes;if("function"!=typeof n.getChildContext)return t;n=n.getChildContext();for(var i in n)i in o||r("108",le(e)||"Unknown",i);return jr({},t,n)}function Lt(e){if(!Pt(e))return!1;var t=e.stateNode;return t=t&&t.__reactInternalMemoizedMergedChildContext||Hr,Nl=Sl.current,xt(Sl,t,e),xt(Pl,Pl.current,e),!0}function Rt(e,t){var n=e.stateNode;if(n||r("169"),t){var o=Ft(e,Nl);n.__reactInternalMemoizedMergedChildContext=o,Ct(Pl,e),Ct(Sl,e),xt(Sl,o,e)}else Ct(Pl,e);xt(Pl,t,e)}function It(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=null,this.index=0,this.ref=null,this.pendingProps=t,this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.effectTag=0,this.lastEffect=this.firstEffect=this.nextEffect=null,this.expirationTime=0,this.alternate=null}function Ut(e,t,n){var r=e.alternate;return null===r?(r=new It(e.tag,t,e.key,e.mode),r.type=e.type,r.stateNode=e.stateNode,r.alternate=e,e.alternate=r):(r.pendingProps=t,r.effectTag=0,r.nextEffect=null,r.firstEffect=null,r.lastEffect=null),r.expirationTime=n,r.child=e.child,r.memoizedProps=e.memoizedProps,r.memoizedState=e.memoizedState,r.updateQueue=e.updateQueue,r.sibling=e.sibling,r.index=e.index,r.ref=e.ref,r}function jt(e,t,n){var o=e.type,i=e.key;if(e=e.props,"function"==typeof o)var l=o.prototype&&o.prototype.isReactComponent?2:0;else if("string"==typeof o)l=5;else switch(o){case Wo:return Dt(e.children,t,n,i);case Go:l=11,t|=3;break;case Qo:l=11,t|=2;break;case $o:return o=new It(15,e,i,4|t),o.type=$o,o.expirationTime=n,o;case Xo:l=16,t|=2;break;default:e:{switch("object"==typeof o&&null!==o?o.$$typeof:null){case Ko:l=13;break e;case qo:l=12;break e;case Yo:l=14;break e;default:r("130",null==o?o:typeof o,"")}l=void 0}}return t=new It(l,e,i,t),t.type=o,t.expirationTime=n,t}function Dt(e,t,n,r){return e=new It(10,e,r,t),e.expirationTime=n,e}function zt(e,t,n){return e=new It(6,e,null,t),e.expirationTime=n,e}function At(e,t,n){return t=new It(4,null!==e.children?e.children:[],e.key,t),t.expirationTime=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Bt(e,t,n){return t=new It(3,null,null,t?3:0),e={current:t,containerInfo:e,pendingChildren:null,earliestPendingTime:0,latestPendingTime:0,earliestSuspendedTime:0,latestSuspendedTime:0,latestPingedTime:0,pendingCommitExpirationTime:0,finishedWork:null,context:null,pendingContext:null,hydrate:n,remainingExpirationTime:0,firstBatch:null,nextScheduledRoot:null},t.stateNode=e}function Ht(e){return function(t){try{return e(t)}catch(e){}}}function Vt(e){if("undefined"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__)return!1;var t=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(t.isDisabled||!t.supportsFiber)return!0;try{var n=t.inject(e);Ol=Ht(function(e){return t.onCommitFiberRoot(n,e)}),Ml=Ht(function(e){return t.onCommitFiberUnmount(n,e)})}catch(e){}return!0}function Wt(e){"function"==typeof Ol&&Ol(e)}function Qt(e){"function"==typeof Ml&&Ml(e)}function $t(e){return{expirationTime:0,baseState:e,firstUpdate:null,lastUpdate:null,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function Kt(e){return{expirationTime:e.expirationTime,baseState:e.baseState,firstUpdate:e.firstUpdate,lastUpdate:e.lastUpdate,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function qt(e){return{expirationTime:e,tag:0,payload:null,callback:null,next:null,nextEffect:null}}function Gt(e,t,n){null===e.lastUpdate?e.firstUpdate=e.lastUpdate=t:(e.lastUpdate.next=t,e.lastUpdate=t),(0===e.expirationTime||e.expirationTime>n)&&(e.expirationTime=n)}function Yt(e,t,n){var r=e.alternate;if(null===r){var o=e.updateQueue,i=null;null===o&&(o=e.updateQueue=$t(e.memoizedState))}else o=e.updateQueue,i=r.updateQueue,null===o?null===i?(o=e.updateQueue=$t(e.memoizedState),i=r.updateQueue=$t(r.memoizedState)):o=e.updateQueue=Kt(i):null===i&&(i=r.updateQueue=Kt(o));null===i||o===i?Gt(o,t,n):null===o.lastUpdate||null===i.lastUpdate?(Gt(o,t,n),Gt(i,t,n)):(Gt(o,t,n),i.lastUpdate=t)}function Xt(e,t,n){var r=e.updateQueue;r=null===r?e.updateQueue=$t(e.memoizedState):Zt(e,r),null===r.lastCapturedUpdate?r.firstCapturedUpdate=r.lastCapturedUpdate=t:(r.lastCapturedUpdate.next=t,r.lastCapturedUpdate=t),(0===r.expirationTime||r.expirationTime>n)&&(r.expirationTime=n)}function Zt(e,t){var n=e.alternate;return null!==n&&t===n.updateQueue&&(t=e.updateQueue=Kt(t)),t}function Jt(e,t,n,r,o,i){switch(n.tag){case 1:return e=n.payload,"function"==typeof e?e.call(i,r,o):e;case 3:e.effectTag=-1025&e.effectTag|64;case 0:if(e=n.payload,null===(o="function"==typeof e?e.call(i,r,o):e)||void 0===o)break;return jr({},r,o);case 2:Fl=!0}return r}function en(e,t,n,r,o){if(Fl=!1,!(0===t.expirationTime||t.expirationTime>o)){t=Zt(e,t);for(var i=t.baseState,l=null,a=0,u=t.firstUpdate,c=i;null!==u;){var s=u.expirationTime;s>o?(null===l&&(l=u,i=c),(0===a||a>s)&&(a=s)):(c=Jt(e,t,u,c,n,r),null!==u.callback&&(e.effectTag|=32,u.nextEffect=null,null===t.lastEffect?t.firstEffect=t.lastEffect=u:(t.lastEffect.nextEffect=u,t.lastEffect=u))),u=u.next}for(s=null,u=t.firstCapturedUpdate;null!==u;){var f=u.expirationTime;f>o?(null===s&&(s=u,null===l&&(i=c)),(0===a||a>f)&&(a=f)):(c=Jt(e,t,u,c,n,r),null!==u.callback&&(e.effectTag|=32,u.nextEffect=null,null===t.lastCapturedEffect?t.firstCapturedEffect=t.lastCapturedEffect=u:(t.lastCapturedEffect.nextEffect=u,t.lastCapturedEffect=u))),u=u.next}null===l&&(t.lastUpdate=null),null===s?t.lastCapturedUpdate=null:e.effectTag|=32,null===l&&null===s&&(i=c),t.baseState=i,t.firstUpdate=l,t.firstCapturedUpdate=s,t.expirationTime=a,e.memoizedState=c}}function tn(e,t){"function"!=typeof e&&r("191",e),e.call(t)}function nn(e,t,n){for(null!==t.firstCapturedUpdate&&(null!==t.lastUpdate&&(t.lastUpdate.next=t.firstCapturedUpdate,t.lastUpdate=t.lastCapturedUpdate),t.firstCapturedUpdate=t.lastCapturedUpdate=null),e=t.firstEffect,t.firstEffect=t.lastEffect=null;null!==e;){var r=e.callback;null!==r&&(e.callback=null,tn(r,n)),e=e.nextEffect}for(e=t.firstCapturedEffect,t.firstCapturedEffect=t.lastCapturedEffect=null;null!==e;)t=e.callback,null!==t&&(e.callback=null,tn(t,n)),e=e.nextEffect}function rn(e,t){return{value:e,source:t,stack:ae(t)}}function on(e){var t=e.type._context;xt(Il,t._changedBits,e),xt(Rl,t._currentValue,e),xt(Ll,e,e),t._currentValue=e.pendingProps.value,t._changedBits=e.stateNode}function ln(e){var t=Il.current,n=Rl.current;Ct(Ll,e),Ct(Rl,e),Ct(Il,e),e=e.type._context,e._currentValue=n,e._changedBits=t}function an(e){return e===Ul&&r("174"),e}function un(e,t){xt(zl,t,e),xt(Dl,e,e),xt(jl,Ul,e);var n=t.nodeType;switch(n){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:lt(null,"");break;default:n=8===n?t.parentNode:t,t=n.namespaceURI||null,n=n.tagName,t=lt(t,n)}Ct(jl,e),xt(jl,t,e)}function cn(e){Ct(jl,e),Ct(Dl,e),Ct(zl,e)}function sn(e){Dl.current===e&&(Ct(jl,e),Ct(Dl,e))}function fn(e,t,n){var r=e.memoizedState;t=t(n,r),r=null===t||void 0===t?r:jr({},r,t),e.memoizedState=r,null!==(e=e.updateQueue)&&0===e.expirationTime&&(e.baseState=r)}function dn(e,t,n,r,o,i){var l=e.stateNode;return e=e.type,"function"==typeof l.shouldComponentUpdate?l.shouldComponentUpdate(n,o,i):!e.prototype||!e.prototype.isPureReactComponent||(!Ar(t,n)||!Ar(r,o))}function pn(e,t,n,r){e=t.state,"function"==typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,r),"function"==typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&Al.enqueueReplaceState(t,t.state,null)}function hn(e,t){var n=e.type,r=e.stateNode,o=e.pendingProps,i=Tt(e);r.props=o,r.state=e.memoizedState,r.refs=Hr,r.context=St(e,i),i=e.updateQueue,null!==i&&(en(e,i,o,r,t),r.state=e.memoizedState),i=e.type.getDerivedStateFromProps,"function"==typeof i&&(fn(e,i,o),r.state=e.memoizedState),"function"==typeof n.getDerivedStateFromProps||"function"==typeof r.getSnapshotBeforeUpdate||"function"!=typeof r.UNSAFE_componentWillMount&&"function"!=typeof r.componentWillMount||(n=r.state,"function"==typeof r.componentWillMount&&r.componentWillMount(),"function"==typeof r.UNSAFE_componentWillMount&&r.UNSAFE_componentWillMount(),n!==r.state&&Al.enqueueReplaceState(r,r.state,null),null!==(i=e.updateQueue)&&(en(e,i,o,r,t),r.state=e.memoizedState)),"function"==typeof r.componentDidMount&&(e.effectTag|=4)}function mn(e,t,n){if(null!==(e=n.ref)&&"function"!=typeof e&&"object"!=typeof e){if(n._owner){n=n._owner;var o=void 0;n&&(2!==n.tag&&r("110"),o=n.stateNode),o||r("147",e);var i=""+e;return null!==t&&null!==t.ref&&"function"==typeof t.ref&&t.ref._stringRef===i?t.ref:(t=function(e){var t=o.refs===Hr?o.refs={}:o.refs;null===e?delete t[i]:t[i]=e},t._stringRef=i,t)}"string"!=typeof e&&r("148"),n._owner||r("254",e)}return e}function yn(e,t){"textarea"!==e.type&&r("31","[object Object]"===Object.prototype.toString.call(t)?"object with keys {"+Object.keys(t).join(", ")+"}":t,"")}function vn(e){function t(t,n){if(e){var r=t.lastEffect;null!==r?(r.nextEffect=n,t.lastEffect=n):t.firstEffect=t.lastEffect=n,n.nextEffect=null,n.effectTag=8}}function n(n,r){if(!e)return null;for(;null!==r;)t(n,r),r=r.sibling;return null}function o(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function i(e,t,n){return e=Ut(e,t,n),e.index=0,e.sibling=null,e}function l(t,n,r){return t.index=r,e?null!==(r=t.alternate)?(r=r.index,r<n?(t.effectTag=2,n):r):(t.effectTag=2,n):n}function a(t){return e&&null===t.alternate&&(t.effectTag=2),t}function u(e,t,n,r){return null===t||6!==t.tag?(t=zt(n,e.mode,r),t.r
|
3 |
(c) Sindre Sorhus
|
4 |
@license MIT
|
5 |
*/
|
6 |
+
var o=Object.getOwnPropertySymbols,i=Object.prototype.hasOwnProperty,l=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map(function(e){return t[e]}).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach(function(e){r[e]=e}),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(e){return!1}}()?Object.assign:function(e,t){for(var n,a,u=r(e),c=1;c<arguments.length;c++){n=Object(arguments[c]);for(var s in n)i.call(n,s)&&(u[s]=n[s]);if(o){a=o(n);for(var f=0;f<a.length;f++)l.call(n,a[f])&&(u[a[f]]=n[a[f]])}}return u}},function(e,t,n){"use strict";function r(e,t,n,r,i,l,a,u){if(o(t),!e){var c;if(void 0===t)c=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var s=[n,r,i,l,a,u],f=0;c=new Error(t.replace(/%s/g,function(){return s[f++]})),c.name="Invariant Violation"}throw c.framesToPop=1,c}}var o=function(e){};e.exports=r},function(e,t,n){"use strict";var r={};e.exports=r},function(e,t,n){"use strict";function r(e){return function(){return e}}var o=function(){};o.thatReturns=r,o.thatReturnsFalse=r(!1),o.thatReturnsTrue=r(!0),o.thatReturnsNull=r(null),o.thatReturnsThis=function(){return this},o.thatReturnsArgument=function(e){return e},e.exports=o},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}var o=n(0),i=r(o),l=n(7),a=r(l),u=n(15),c=r(u),s=n(16),f=r(s);n(23),a.default.render(i.default.createElement(c.default,null,i.default.createElement(f.default,null)),document.getElementById("fl-ui-root"))},function(e,t,n){"use strict";function r(e){for(var t=arguments.length-1,n="https://reactjs.org/docs/error-decoder.html?invariant="+e,r=0;r<t;r++)n+="&args[]="+encodeURIComponent(arguments[r+1]);g(!1,"Minified React error #"+e+"; visit %s for the full message or use the non-minified dev environment for full errors and additional helpful warnings. ",n)}function o(e,t,n){this.props=e,this.context=t,this.refs=b,this.updater=n||F}function i(){}function l(e,t,n){this.props=e,this.context=t,this.refs=b,this.updater=n||F}function a(e,t,n){var r=void 0,o={},i=null,l=null;if(null!=t)for(r in void 0!==t.ref&&(l=t.ref),void 0!==t.key&&(i=""+t.key),t)U.call(t,r)&&!I.hasOwnProperty(r)&&(o[r]=t[r]);var a=arguments.length-2;if(1===a)o.children=n;else if(1<a){for(var u=Array(a),c=0;c<a;c++)u[c]=arguments[c+2];o.children=u}if(e&&e.defaultProps)for(r in a=e.defaultProps)void 0===o[r]&&(o[r]=a[r]);return{$$typeof:E,type:e,key:i,ref:l,props:o,_owner:R.current}}function u(e){return"object"==typeof e&&null!==e&&e.$$typeof===E}function c(e){var t={"=":"=0",":":"=2"};return"$"+(""+e).replace(/[=:]/g,function(e){return t[e]})}function s(e,t,n,r){if(D.length){var o=D.pop();return o.result=e,o.keyPrefix=t,o.func=n,o.context=r,o.count=0,o}return{result:e,keyPrefix:t,func:n,context:r,count:0}}function f(e){e.result=null,e.keyPrefix=null,e.func=null,e.context=null,e.count=0,10>D.length&&D.push(e)}function d(e,t,n,o){var i=typeof e;"undefined"!==i&&"boolean"!==i||(e=null);var l=!1;if(null===e)l=!0;else switch(i){case"string":case"number":l=!0;break;case"object":switch(e.$$typeof){case E:case _:l=!0}}if(l)return n(o,e,""===t?"."+p(e,0):t),1;if(l=0,t=""===t?".":t+":",Array.isArray(e))for(var a=0;a<e.length;a++){i=e[a];var u=t+p(i,a);l+=d(i,u,n,o)}else if(null===e||void 0===e?u=null:(u=M&&e[M]||e["@@iterator"],u="function"==typeof u?u:null),"function"==typeof u)for(e=u.call(e),a=0;!(i=e.next()).done;)i=i.value,u=t+p(i,a++),l+=d(i,u,n,o);else"object"===i&&(n=""+e,r("31","[object Object]"===n?"object with keys {"+Object.keys(e).join(", ")+"}":n,""));return l}function p(e,t){return"object"==typeof e&&null!==e&&null!=e.key?c(e.key):t.toString(36)}function h(e,t){e.func.call(e.context,t,e.count++)}function m(e,t,n){var r=e.result,o=e.keyPrefix;e=e.func.call(e.context,t,e.count++),Array.isArray(e)?y(e,r,n,k.thatReturnsArgument):null!=e&&(u(e)&&(t=o+(!e.key||t&&t.key===e.key?"":(""+e.key).replace(j,"$&/")+"/")+n,e={$$typeof:E,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}),r.push(e))}function y(e,t,n,r,o){var i="";null!=n&&(i=(""+n).replace(j,"$&/")+"/"),t=s(t,i,r,o),null==e||d(e,"",m,t),f(t)}/** @license React v16.4.2
|
7 |
* react.production.min.js
|
8 |
*
|
9 |
* Copyright (c) 2013-present, Facebook, Inc.
|
11 |
* This source code is licensed under the MIT license found in the
|
12 |
* LICENSE file in the root directory of this source tree.
|
13 |
*/
|
|