From eeafb59c31823a3eaf7e12a7bb61869819063cf0 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 25 Feb 2018 19:45:04 -0500 Subject: [PATCH 001/227] Add new class/functions - Create class Core\Acl - Add Contact::pruneUnavailable - Add mod_content --- mod/acl.php | 305 ++++++++++++++++++++++++++++++++- src/Core/Acl.php | 384 ++++++++++++++++++++++++++++++++++++++++++ src/Model/Contact.php | 23 +++ 3 files changed, 708 insertions(+), 4 deletions(-) create mode 100644 src/Core/Acl.php diff --git a/mod/acl.php b/mod/acl.php index e04a3fbc7..e325e4668 100644 --- a/mod/acl.php +++ b/mod/acl.php @@ -1,12 +1,309 @@ = `failure_update` + AND `notify` != '' $sql_extra2", + intval(local_user()) + ); + $contact_count = (int) $r[0]['c']; + } elseif ($type == 'f') { + // autocomplete for editor mentions of forums + $r = q("SELECT COUNT(*) AS c FROM `contact` + WHERE `uid` = %d AND NOT `self` + AND NOT `blocked` AND NOT `pending` AND NOT `archive` + AND (`forum` OR `prv`) + AND `success_update` >= `failure_update` + AND `notify` != '' $sql_extra2", + intval(local_user()) + ); + $contact_count = (int) $r[0]['c']; + } elseif ($type == 'm') { + // autocomplete for Private Messages + $r = q("SELECT COUNT(*) AS c FROM `contact` + WHERE `uid` = %d AND NOT `self` + AND NOT `blocked` AND NOT `pending` AND NOT `archive` + AND `success_update` >= `failure_update` + AND `network` IN ('%s', '%s') $sql_extra2", + intval(local_user()), + dbesc(NETWORK_DFRN), + dbesc(NETWORK_DIASPORA) + ); + $contact_count = (int) $r[0]['c']; + } elseif ($type == 'a') { + // autocomplete for Contacts + $r = q("SELECT COUNT(*) AS c FROM `contact` + WHERE `uid` = %d AND NOT `self` + AND NOT `pending` $sql_extra2", + intval(local_user()) + ); + $contact_count = (int) $r[0]['c']; + } else { + $contact_count = 0; + } + + $tot = $group_count + $contact_count; + + $groups = []; + $contacts = []; + + if ($type == '' || $type == 'g') { + /// @todo We should cache this query. + // This can be done when we can delete cache entries via wildcard + $r = q("SELECT `group`.`id`, `group`.`name`, GROUP_CONCAT(DISTINCT `group_member`.`contact-id` SEPARATOR ',') AS uids + FROM `group` + INNER JOIN `group_member` ON `group_member`.`gid`=`group`.`id` + WHERE NOT `group`.`deleted` AND `group`.`uid` = %d + $sql_extra + GROUP BY `group`.`name`, `group`.`id` + ORDER BY `group`.`name` + LIMIT %d,%d", + intval(local_user()), + intval($start), + intval($count) + ); + + foreach ($r as $g) { + $groups[] = [ + 'type' => 'g', + 'photo' => 'images/twopeople.png', + 'name' => htmlentities($g['name']), + 'id' => intval($g['id']), + 'uids' => array_map('intval', explode(',', $g['uids'])), + 'link' => '', + 'forum' => '0' + ]; + } + if ((count($groups) > 0) && ($search == '')) { + $groups[] = ['separator' => true]; + } + } + + if ($type == '') { + $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv`, (`prv` OR `forum`) AS `frm` FROM `contact` + WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' + AND `success_update` >= `failure_update` AND NOT (`network` IN ('%s', '%s')) + $sql_extra2 + ORDER BY `name` ASC ", + intval(local_user()), + dbesc(NETWORK_OSTATUS), + dbesc(NETWORK_STATUSNET) + ); + } elseif ($type == 'c') { + $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv` FROM `contact` + WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' + AND `success_update` >= `failure_update` AND NOT (`network` IN ('%s')) + $sql_extra2 + ORDER BY `name` ASC ", + intval(local_user()), + dbesc(NETWORK_STATUSNET) + ); + } elseif ($type == 'f') { + $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv` FROM `contact` + WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' + AND `success_update` >= `failure_update` AND NOT (`network` IN ('%s')) + AND (`forum` OR `prv`) + $sql_extra2 + ORDER BY `name` ASC ", + intval(local_user()), + dbesc(NETWORK_STATUSNET) + ); + } elseif ($type == 'm') { + $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr` FROM `contact` + WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` + AND `success_update` >= `failure_update` AND `network` IN ('%s', '%s') + $sql_extra2 + ORDER BY `name` ASC ", + intval(local_user()), + dbesc(NETWORK_DFRN), + dbesc(NETWORK_DIASPORA) + ); + } elseif ($type == 'a') { + $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv` FROM `contact` + WHERE `uid` = %d AND `pending` = 0 AND `success_update` >= `failure_update` + $sql_extra2 + ORDER BY `name` ASC ", + intval(local_user()) + ); + } elseif ($type == 'x') { + // autocomplete for global contact search (e.g. navbar search) + $r = navbar_complete($a); + $contacts = []; + foreach ($r as $g) { + $contacts[] = [ + 'photo' => proxy_url($g['photo'], false, PROXY_SIZE_MICRO), + 'name' => $g['name'], + 'nick' => (x($g['addr']) ? $g['addr'] : $g['url']), + 'network' => $g['network'], + 'link' => $g['url'], + 'forum' => (x($g['community']) ? 1 : 0), + ]; + } + $o = [ + 'start' => $start, + 'count' => $count, + 'items' => $contacts, + ]; + echo json_encode($o); + killme(); + } else { + $r = []; + } + + if (DBM::is_result($r)) { + $forums = []; + foreach ($r as $g) { + $entry = [ + 'type' => 'c', + 'photo' => proxy_url($g['micro'], false, PROXY_SIZE_MICRO), + 'name' => htmlentities($g['name']), + 'id' => intval($g['id']), + 'network' => $g['network'], + 'link' => $g['url'], + 'nick' => htmlentities(($g['attag']) ? $g['attag'] : $g['nick']), + 'addr' => htmlentities(($g['addr']) ? $g['addr'] : $g['url']), + 'forum' => ((x($g, 'forum') || x($g, 'prv')) ? 1 : 0), + ]; + if ($entry['forum']) { + $forums[] = $entry; + } else { + $contacts[] = $entry; + } + } + if (count($forums) > 0) { + if ($search == '') { + $forums[] = ['separator' => true]; + } + $contacts = array_merge($forums, $contacts); + } + } + + $items = array_merge($groups, $contacts); + + if ($conv_id) { + /* + * if $conv_id is set, get unknown contacts in thread + * but first get known contacts url to filter them out + */ + $known_contacts = array_map(function ($i) { + return dbesc($i['link']); + }, $contacts); + + $unknown_contacts = []; + $r = q("SELECT `author-link` + FROM `item` WHERE `parent` = %d + AND (`author-name` LIKE '%%%s%%' OR `author-link` LIKE '%%%s%%') + AND `author-link` NOT IN ('%s') + GROUP BY `author-link`, `author-avatar`, `author-name` + ORDER BY `author-name` ASC + ", + intval($conv_id), + dbesc($search), + dbesc($search), + implode("', '", $known_contacts) + ); + if (DBM::is_result($r)) { + foreach ($r as $row) { + $contact = Contact::getDetailsByURL($row['author-link']); + + if (count($contact) > 0) { + $unknown_contacts[] = [ + 'type' => 'c', + 'photo' => proxy_url($contact['micro'], false, PROXY_SIZE_MICRO), + 'name' => htmlentities($contact['name']), + 'id' => intval($contact['cid']), + 'network' => $contact['network'], + 'link' => $contact['url'], + 'nick' => htmlentities($contact['nick'] ?: $contact['addr']), + 'addr' => htmlentities(($contact['addr']) ? $contact['addr'] : $contact['url']), + 'forum' => $contact['forum'] + ]; + } + } + } + + $items = array_merge($items, $unknown_contacts); + $tot += count($unknown_contacts); + } + + $results = [ + 'tot' => $tot, + 'start' => $start, + 'count' => $count, + 'groups' => $groups, + 'contacts' => $contacts, + 'items' => $items, + 'type' => $type, + 'search' => $search, + ]; + + Addon::callHooks('acl_lookup_end', $results); + + $o = [ + 'tot' => $results['tot'], + 'start' => $results['start'], + 'count' => $results['count'], + 'items' => $results['items'], + ]; + + echo json_encode($o); + + killme(); } - - diff --git a/src/Core/Acl.php b/src/Core/Acl.php new file mode 100644 index 000000000..67e2633a2 --- /dev/null +++ b/src/Core/Acl.php @@ -0,0 +1,384 @@ + + */ +class Acl extends BaseObject +{ + /** + * Returns a select input tag with all the contact of the local user + * + * @param string $selname Name attribute of the select input tag + * @param string $selclass Class attribute of the select input tag + * @param array $options Available options: + * - size: length of the select box + * - mutual_friends: Only used for the hook + * - single: Only used for the hook + * - exclude: Only used for the hook + * @param array $preselected Contact ID that should be already selected + * @return string + */ + public static function getSuggestContactSelectHTML($selname, $selclass, array $options = [], array $preselected = []) + { + $a = self::getApp(); + + $networks = null; + + $size = defaults($options, 'size', 4); + $mutual = !empty($options['mutual_friends']); + $single = !empty($options['single']) && empty($options['multiple']); + $exclude = defaults($options, 'exclude', false); + + switch (defaults($options, 'networks', Protocol::PHANTOM)) { + case 'DFRN_ONLY': + $networks = [NETWORK_DFRN]; + break; + case 'PRIVATE': + if (!empty($a->user['prvnets'])) { + $networks = [NETWORK_DFRN, NETWORK_MAIL, NETWORK_DIASPORA]; + } else { + $networks = [NETWORK_DFRN, NETWORK_FACEBOOK, NETWORK_MAIL, NETWORK_DIASPORA]; + } + break; + case 'TWO_WAY': + if (!empty($a->user['prvnets'])) { + $networks = [NETWORK_DFRN, NETWORK_MAIL, NETWORK_DIASPORA]; + } else { + $networks = [NETWORK_DFRN, NETWORK_FACEBOOK, NETWORK_MAIL, NETWORK_DIASPORA, NETWORK_OSTATUS]; + } + break; + default: /// @TODO Maybe log this call? + break; + } + + $x = ['options' => $options, 'size' => $size, 'single' => $single, 'mutual' => $mutual, 'exclude' => $exclude, 'networks' => $networks]; + + Addon::callHooks('contact_select_options', $x); + + $o = ''; + + $sql_extra = ''; + + if (!empty($x['mutual'])) { + $sql_extra .= sprintf(" AND `rel` = %d ", intval(CONTACT_IS_FRIEND)); + } + + if (!empty($x['exclude'])) { + $sql_extra .= sprintf(" AND `id` != %d ", intval($x['exclude'])); + } + + if (!empty($x['networks'])) { + /// @TODO rewrite to foreach() + array_walk($x['networks'], function (&$value) { + $value = "'" . dbesc($value) . "'"; + }); + $str_nets = implode(',', $x['networks']); + $sql_extra .= " AND `network` IN ( $str_nets ) "; + } + + $tabindex = (!empty($options['tabindex']) ? 'tabindex="' . $options["tabindex"] . '"' : ''); + + if (!empty($x['single'])) { + $o .= "\r\n"; + } + + $stmt = dba::p("SELECT `id`, `name`, `url`, `network` FROM `contact` + WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' + $sql_extra + ORDER BY `name` ASC ", intval(local_user()) + ); + + $contacts = dba::inArray($stmt); + + $arr = ['contact' => $contacts, 'entry' => $o]; + + // e.g. 'network_pre_contact_deny', 'profile_pre_contact_allow' + Addon::callHooks($a->module . '_pre_' . $selname, $arr); + + if (DBM::is_result($contacts)) { + foreach ($contacts as $contact) { + if (in_array($contact['id'], $preselected)) { + $selected = ' selected="selected" '; + } else { + $selected = ''; + } + + $trimmed = mb_substr($contact['name'], 0, 20); + + $o .= "\r\n"; + } + } + + $o .= '' . PHP_EOL; + + Addon::callHooks($a->module . '_post_' . $selname, $o); + + return $o; + } + + /** + * Returns a select input tag with all the contact of the local user + * + * @param string $selname Name attribute of the select input tag + * @param string $selclass Class attribute of the select input tag + * @param array $preselected Contact ID that should be already selected + * @param int $size Length of the select box + * @param bool $privmail + * @param bool $celeb + * @param bool $privatenet + * @param int $tabindex Select input tag tabindex attribute + * @return string + */ + public static function getMessageContactSelectHTML( + $selname, $selclass, array $preselected = [], $size = 4, $privmail = false, $celeb = false, $privatenet = false, + $tabindex = null) + { + $a = self::getApp(); + + $o = ''; + + // When used for private messages, we limit correspondence to mutual DFRN/Friendica friends and the selector + // to one recipient. By default our selector allows multiple selects amongst all contacts. + + $sql_extra = ''; + + if ($privmail || $celeb) { + $sql_extra .= sprintf(" AND `rel` = %d ", intval(CONTACT_IS_FRIEND)); + } + + if ($privmail) { + $sql_extra .= sprintf(" AND `network` IN ('%s' , '%s') ", NETWORK_DFRN, NETWORK_DIASPORA); + } elseif ($privatenet) { + $sql_extra .= sprintf(" AND `network` IN ('%s' , '%s', '%s', '%s') ", NETWORK_DFRN, NETWORK_MAIL, NETWORK_FACEBOOK, + NETWORK_DIASPORA); + } + + $tabindex_attr = !empty($tabindex) ? ' tabindex="' . intval($tabindex) . '"' : ''; + + if ($privmail && $preselected) { + $sql_extra .= " AND `id` IN (" . implode(",", $preselected) . ")"; + $hidepreselected = ' style="display: none;"'; + } else { + $hidepreselected = ''; + } + + if ($privmail) { + $o .= "\r\n"; + } + + $stmt = dba::p("SELECT `id`, `name`, `url`, `network` FROM `contact` + WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' + $sql_extra + ORDER BY `name` ASC ", intval(local_user()) + ); + + $contacts = dba::inArray($stmt); + + $arr = ['contact' => $contacts, 'entry' => $o]; + + // e.g. 'network_pre_contact_deny', 'profile_pre_contact_allow' + + Addon::callHooks($a->module . '_pre_' . $selname, $arr); + + $receiverlist = []; + + if (DBM::is_result($contacts)) { + foreach ($contacts as $contact) { + if (in_array($contact['id'], $preselected)) { + $selected = ' selected="selected"'; + } else { + $selected = ''; + } + + if ($privmail) { + $trimmed = Protocol::formatMention($contact['url'], $contact['name']); + } else { + $trimmed = mb_substr($contact['name'], 0, 20); + } + + $receiverlist[] = $trimmed; + + $o .= "\r\n"; + } + } + + $o .= '' . PHP_EOL; + + if ($privmail && $preselected) { + $o .= implode(', ', $receiverlist); + } + + Addon::callHooks($a->module . '_post_' . $selname, $o); + + return $o; + } + + /** + * Return the default permission of the provided user array + * + * @param array $user + * @return array Hash of contact id lists + */ + public static function getDefaultUserPermissions(array $user = null) + { + $matches = []; + + $acl_regex = '/<([0-9]+)>/i'; + + preg_match_all($acl_regex, defaults($user, 'allow_cid', ''), $matches); + $allow_cid = $matches[1]; + preg_match_all($acl_regex, defaults($user, 'allow_gid', ''), $matches); + $allow_gid = $matches[1]; + preg_match_all($acl_regex, defaults($user, 'deny_cid', ''), $matches); + $deny_cid = $matches[1]; + preg_match_all($acl_regex, defaults($user, 'deny_gid', ''), $matches); + $deny_gid = $matches[1]; + + Contact::pruneUnavailable($allow_cid); + + return [ + 'allow_cid' => $allow_cid, + 'allow_gid' => $allow_gid, + 'deny_cid' => $deny_cid, + 'deny_gid' => $deny_gid, + ]; + } + + /** + * Return the full jot ACL selector HTML + * + * @param array $user + * @param bool $show_jotnets + * @return string + */ + public static function getFullSelectorHTML(array $user = null, $show_jotnets = false) + { + $perms = self::getDefaultUserPermissions($user); + + $jotnets = ''; + if ($show_jotnets) { + $imap_disabled = !function_exists('imap_open') || Config::get('system', 'imap_disabled'); + + $mail_enabled = false; + $pubmail_enabled = false; + + if (!$imap_disabled) { + $mailacct = dba::selectFirst('mailacct', ['pubmail'], ['`uid` = ? AND `server` != ""', local_user()]); + if (DBM::is_result($mailacct)) { + $mail_enabled = true; + $pubmail_enabled = !empty($mailacct['pubmail']); + } + } + + if (empty($user['hidewall'])) { + if ($mail_enabled) { + $selected = $pubmail_enabled ? ' checked="checked"' : ''; + $jotnets .= '
' . L10n::t("Post to Email") . '
'; + } + + Addon::callHooks('jot_networks', $jotnets); + } else { + $jotnets .= L10n::t('Connectors disabled, since "%s" is enabled.', + L10n::t('Hide your profile details from unknown viewers?')); + } + } + + $tpl = get_markup_template('acl_selector.tpl'); + $o = replace_macros($tpl, [ + '$showall' => L10n::t('Visible to everybody'), + '$show' => L10n::t('show'), + '$hide' => L10n::t('don\'t show'), + '$allowcid' => json_encode($perms['allow_cid']), + '$allowgid' => json_encode($perms['allow_gid']), + '$denycid' => json_encode($perms['deny_cid']), + '$denygid' => json_encode($perms['deny_gid']), + '$networks' => $show_jotnets, + '$emailcc' => L10n::t('CC: email addresses'), + '$emtitle' => L10n::t('Example: bob@example.com, mary@example.com'), + '$jotnets' => $jotnets, + '$aclModalTitle' => L10n::t('Permissions'), + '$aclModalDismiss' => L10n::t('Close'), + '$features' => [ + 'aclautomention' => Feature::isEnabled($user['uid'], 'aclautomention') ? 'true' : 'false' + ], + ]); + + return $o; + } + + /** + * Searching for global contacts for autocompletion + * + * @brief Searching for global contacts for autocompletion + * @param string $search Name or part of a name or nick + * @param string $mode Search mode (e.g. "community") + * @return array with the search results + */ + public static function contactAutocomplete($search, $mode) + { + if ((Config::get('system', 'block_public')) && (!local_user()) && (!remote_user())) { + return []; + } + + // don't search if search term has less than 2 characters + if (!$search || mb_strlen($search) < 2) { + return []; + } + + if (substr($search, 0, 1) === '@') { + $search = substr($search, 1); + } + + // check if searching in the local global contact table is enabled + if (Config::get('system', 'poco_local_search')) { + $return = GContact::searchByName($search, $mode); + } else { + $a = self::getApp(); + $p = $a->pager['page'] != 1 ? '&p=' . $a->pager['page'] : ''; + + $response = Network::curl(get_server() . '/lsearch?f=' . $p . '&search=' . urlencode($search)); + if ($response['success']) { + $lsearch = json_decode($response['body'], true); + if (!empty($lsearch['results'])) { + $return = $lsearch['results']; + } + } + } + + return defaults($return, []); + } +} diff --git a/src/Model/Contact.php b/src/Model/Contact.php index fc27b0c41..85e71075a 100644 --- a/src/Model/Contact.php +++ b/src/Model/Contact.php @@ -1517,4 +1517,27 @@ class Contact extends BaseObject } } } + + /** + * Remove the unavailable contact ids from the provided list + * + * @param array $contact_ids Contact id list + */ + public static function pruneUnavailable(array &$contact_ids) + { + if (empty($contact_ids)) { + return; + } + + $str = dbesc(implode(',', $contact_ids)); + + $stmt = dba::p("SELECT `id` FROM `contact` WHERE `id` IN ( " . $str . ") AND `blocked` = 0 AND `pending` = 0 AND `archive` = 0"); + + $return = []; + while($contact = dba::fetch($stmt)) { + $return[] = $contact['id']; + } + + $contact_ids = $return; + } } From e2de86de4654c7948a9bfeba564d08106f52383d Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 25 Feb 2018 19:45:32 -0500 Subject: [PATCH 002/227] Update references in acl_selectors to new functions --- include/acl_selectors.php | 724 +------------------------------------- 1 file changed, 8 insertions(+), 716 deletions(-) diff --git a/include/acl_selectors.php b/include/acl_selectors.php index e69ac36f6..37819fb56 100644 --- a/include/acl_selectors.php +++ b/include/acl_selectors.php @@ -4,744 +4,36 @@ */ use Friendica\App; -use Friendica\Content\Feature; -use Friendica\Content\Widget; -use Friendica\Core\Addon; -use Friendica\Core\Config; -use Friendica\Core\L10n; -use Friendica\Core\Protocol; -use Friendica\Database\DBM; +use Friendica\Core\Acl; use Friendica\Model\Contact; -use Friendica\Model\GContact; -use Friendica\Util\Network; require_once "mod/proxy.php"; -/** - * @package acl_selectors - */ -function group_select($selname,$selclass,$preselected = false,$size = 4) { - - $a = get_app(); - - $o = ''; - - $o .= "\r\n"; - - Addon::callHooks($a->module . '_post_' . $selname, $o); - - - return $o; -} - -/// @TODO find proper type-hints function contact_selector($selname, $selclass, $options, $preselected = false) { - $a = get_app(); - - $mutual = false; - $networks = null; - $single = false; - $exclude = false; - $size = 4; - - if (is_array($options)) { - if (x($options, 'size')) - $size = $options['size']; - - if (x($options, 'mutual_friends')) { - $mutual = true; - } - if (x($options, 'single')) { - $single = true; - } - if (x($options, 'multiple')) { - $single = false; - } - if (x($options, 'exclude')) { - $exclude = $options['exclude']; - } - - if (x($options, 'networks')) { - switch ($options['networks']) { - case 'DFRN_ONLY': - $networks = [NETWORK_DFRN]; - break; - case 'PRIVATE': - if (is_array($a->user) && $a->user['prvnets']) { - $networks = [NETWORK_DFRN, NETWORK_MAIL, NETWORK_DIASPORA]; - } else { - $networks = [NETWORK_DFRN, NETWORK_FACEBOOK, NETWORK_MAIL, NETWORK_DIASPORA]; - } - break; - case 'TWO_WAY': - if (is_array($a->user) && $a->user['prvnets']) { - $networks = [NETWORK_DFRN, NETWORK_MAIL, NETWORK_DIASPORA]; - } else { - $networks = [NETWORK_DFRN, NETWORK_FACEBOOK, NETWORK_MAIL, NETWORK_DIASPORA, NETWORK_OSTATUS]; - } - break; - default: /// @TODO Maybe log this call? - break; - } - } - } - - $x = ['options' => $options, 'size' => $size, 'single' => $single, 'mutual' => $mutual, 'exclude' => $exclude, 'networks' => $networks]; - - Addon::callHooks('contact_select_options', $x); - - $o = ''; - - $sql_extra = ''; - - if (x($x, 'mutual')) { - $sql_extra .= sprintf(" AND `rel` = %d ", intval(CONTACT_IS_FRIEND)); - } - - if (x($x, 'exclude')) { - $sql_extra .= sprintf(" AND `id` != %d ", intval($x['exclude'])); - } - - if (is_array($x['networks']) && count($x['networks'])) { - /// @TODO rewrite to foreach() - for ($y = 0; $y < count($x['networks']) ; $y ++) { - $x['networks'][$y] = "'" . dbesc($x['networks'][$y]) . "'"; - } - $str_nets = implode(',', $x['networks']); - $sql_extra .= " AND `network` IN ( $str_nets ) "; - } - - $tabindex = (x($options, 'tabindex') ? "tabindex=\"" . $options["tabindex"] . "\"" : ""); - - if ($x['single']) { - $o .= "\r\n"; - } - - $r = q("SELECT `id`, `name`, `url`, `network` FROM `contact` - WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' - $sql_extra - ORDER BY `name` ASC ", - intval(local_user()) - ); - - - $arr = ['contact' => $r, 'entry' => $o]; - - // e.g. 'network_pre_contact_deny', 'profile_pre_contact_allow' - - Addon::callHooks($a->module . '_pre_' . $selname, $arr); - - if (DBM::is_result($r)) { - foreach ($r as $rr) { - if ((is_array($preselected)) && in_array($rr['id'], $preselected)) { - $selected = " selected=\"selected\" "; - } else { - $selected = ''; - } - - $trimmed = mb_substr($rr['name'],0,20); - - $o .= "\r\n"; - } - - } - - $o .= "\r\n"; - - Addon::callHooks($a->module . '_post_' . $selname, $o); - - return $o; + return Acl::getSuggestContactSelectHTML($selname, $selclass, $options, defaults($preselected, [])); } - - function contact_select($selname, $selclass, $preselected = false, $size = 4, $privmail = false, $celeb = false, $privatenet = false, $tabindex = null) { - $a = get_app(); - - $o = ''; - - // When used for private messages, we limit correspondence to mutual DFRN/Friendica friends and the selector - // to one recipient. By default our selector allows multiple selects amongst all contacts. - - $sql_extra = ''; - - if ($privmail || $celeb) { - $sql_extra .= sprintf(" AND `rel` = %d ", intval(CONTACT_IS_FRIEND)); - } - - if ($privmail) { - $sql_extra .= sprintf(" AND `network` IN ('%s' , '%s') ", - NETWORK_DFRN, NETWORK_DIASPORA); - } elseif ($privatenet) { - $sql_extra .= sprintf(" AND `network` IN ('%s' , '%s', '%s', '%s') ", - NETWORK_DFRN, NETWORK_MAIL, NETWORK_FACEBOOK, NETWORK_DIASPORA); - } - - $tabindex = ($tabindex > 0 ? "tabindex=\"$tabindex\"" : ""); - - if ($privmail && $preselected) { - $sql_extra .= " AND `id` IN (".implode(",", $preselected).")"; - $hidepreselected = ' style="display: none;"'; - } else { - $hidepreselected = ""; - } - - if ($privmail) { - $o .= "\r\n"; - } - - $r = q("SELECT `id`, `name`, `url`, `network` FROM `contact` - WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' - $sql_extra - ORDER BY `name` ASC ", - intval(local_user()) - ); - - - $arr = ['contact' => $r, 'entry' => $o]; - - // e.g. 'network_pre_contact_deny', 'profile_pre_contact_allow' - - Addon::callHooks($a->module . '_pre_' . $selname, $arr); - - $receiverlist = []; - - if (DBM::is_result($r)) { - foreach ($r as $rr) { - if ((is_array($preselected)) && in_array($rr['id'], $preselected)) { - $selected = " selected=\"selected\" "; - } else { - $selected = ''; - } - - if ($privmail) { - $trimmed = Protocol::formatMention($rr['url'], $rr['name']); - } else { - $trimmed = mb_substr($rr['name'],0,20); - } - - $receiverlist[] = $trimmed; - - $o .= "\r\n"; - } - - } - - $o .= "\r\n"; - - if ($privmail && $preselected) { - $o .= implode(", ", $receiverlist); - } - - Addon::callHooks($a->module . '_post_' . $selname, $o); - - return $o; -} - - -function fixacl(&$item) { - $item = intval(str_replace(['<', '>'], ['', ''], $item)); + return Acl::getMessageContactSelectHTML($selname, $selclass, defaults($preselected, []), $size, $privmail, $celeb, $privatenet, $tabindex); } function prune_deadguys($arr) { - - if (! $arr) { - return $arr; - } - - $str = dbesc(implode(',', $arr)); - - $r = q("SELECT `id` FROM `contact` WHERE `id` IN ( " . $str . ") AND `blocked` = 0 AND `pending` = 0 AND `archive` = 0 "); - - if (DBM::is_result($r)) { - $ret = []; - foreach ($r as $rr) { - $ret[] = intval($rr['id']); - } - return $ret; - } - - return []; + Contact::pruneUnavailable($arr); + return $arr; } - function get_acl_permissions($user = null) { - $allow_cid = $allow_gid = $deny_cid = $deny_gid = false; - - if (is_array($user)) { - $allow_cid = ((strlen($user['allow_cid'])) - ? explode('><', $user['allow_cid']) : [] ); - $allow_gid = ((strlen($user['allow_gid'])) - ? explode('><', $user['allow_gid']) : [] ); - $deny_cid = ((strlen($user['deny_cid'])) - ? explode('><', $user['deny_cid']) : [] ); - $deny_gid = ((strlen($user['deny_gid'])) - ? explode('><', $user['deny_gid']) : [] ); - array_walk($allow_cid,'fixacl'); - array_walk($allow_gid,'fixacl'); - array_walk($deny_cid,'fixacl'); - array_walk($deny_gid,'fixacl'); - } - - $allow_cid = prune_deadguys($allow_cid); - - return [ - 'allow_cid' => $allow_cid, - 'allow_gid' => $allow_gid, - 'deny_cid' => $deny_cid, - 'deny_gid' => $deny_gid, - ]; + return Acl::getDefaultUserPermissions($user); } - function populate_acl($user = null, $show_jotnets = false) { - - $perms = get_acl_permissions($user); - - $jotnets = ''; - if ($show_jotnets) { - $mail_disabled = ((function_exists('imap_open') && (! Config::get('system','imap_disabled'))) ? 0 : 1); - - $mail_enabled = false; - $pubmail_enabled = false; - - if (! $mail_disabled) { - $r = q("SELECT `pubmail` FROM `mailacct` WHERE `uid` = %d AND `server` != '' LIMIT 1", - intval(local_user()) - ); - if (DBM::is_result($r)) { - $mail_enabled = true; - if (intval($r[0]['pubmail'])) { - $pubmail_enabled = true; - } - } - } - - if (!$user['hidewall']) { - if ($mail_enabled) { - $selected = (($pubmail_enabled) ? ' checked="checked" ' : ''); - $jotnets .= '
' . L10n::t("Post to Email") . '
'; - } - - Addon::callHooks('jot_networks', $jotnets); - } else { - $jotnets .= L10n::t('Connectors disabled, since "%s" is enabled.', L10n::t('Hide your profile details from unknown viewers?')); - } - } - - $tpl = get_markup_template("acl_selector.tpl"); - $o = replace_macros($tpl, [ - '$showall'=> L10n::t("Visible to everybody"), - '$show' => L10n::t("show"), - '$hide' => L10n::t("don't show"), - '$allowcid' => json_encode($perms['allow_cid']), - '$allowgid' => json_encode($perms['allow_gid']), - '$denycid' => json_encode($perms['deny_cid']), - '$denygid' => json_encode($perms['deny_gid']), - '$networks' => $show_jotnets, - '$emailcc' => L10n::t('CC: email addresses'), - '$emtitle' => L10n::t('Example: bob@example.com, mary@example.com'), - '$jotnets' => $jotnets, - '$aclModalTitle' => L10n::t('Permissions'), - '$aclModalDismiss' => L10n::t('Close'), - '$features' => [ - 'aclautomention' => (Feature::isEnabled($user['uid'], "aclautomention") ? "true" : "false") - ], - ]); - - - return $o; - + return Acl::getFullSelectorHTML($user, $show_jotnets); } -function acl_lookup(App $a, $out_type = 'json') -{ - if (!local_user()) { - return ''; - } - - $start = defaults($_REQUEST, 'start' , 0); - $count = defaults($_REQUEST, 'count' , 100); - $search = defaults($_REQUEST, 'search' , ''); - $type = defaults($_REQUEST, 'type' , ''); - $conv_id = defaults($_REQUEST, 'conversation', null); - - // For use with jquery.textcomplete for private mail completion - if (x($_REQUEST, 'query')) { - if (! $type) { - $type = 'm'; - } - $search = $_REQUEST['query']; - } - - logger("Searching for ".$search." - type ".$type, LOGGER_DEBUG); - - if ($search != '') { - $sql_extra = "AND `name` LIKE '%%".dbesc($search)."%%'"; - $sql_extra2 = "AND (`attag` LIKE '%%".dbesc($search)."%%' OR `name` LIKE '%%".dbesc($search)."%%' OR `nick` LIKE '%%".dbesc($search)."%%')"; - } else { - /// @TODO Avoid these needless else blocks by putting variable-initialization atop of if() - $sql_extra = $sql_extra2 = ""; - } - - // count groups and contacts - if ($type == '' || $type == 'g') { - $r = q("SELECT COUNT(*) AS g FROM `group` WHERE `deleted` = 0 AND `uid` = %d $sql_extra", - intval(local_user()) - ); - $group_count = (int)$r[0]['g']; - } else { - $group_count = 0; - } - - $sql_extra2 .= " ".Widget::unavailableNetworks(); - - if ($type == '' || $type == 'c') { - // autocomplete for editor mentions - $r = q("SELECT COUNT(*) AS c FROM `contact` - WHERE `uid` = %d AND NOT `self` - AND NOT `blocked` AND NOT `pending` AND NOT `archive` - AND `success_update` >= `failure_update` - AND `notify` != '' $sql_extra2" , - intval(local_user()) - ); - $contact_count = (int)$r[0]['c']; - } elseif ($type == 'f') { - // autocomplete for editor mentions of forums - $r = q("SELECT COUNT(*) AS c FROM `contact` - WHERE `uid` = %d AND NOT `self` - AND NOT `blocked` AND NOT `pending` AND NOT `archive` - AND (`forum` OR `prv`) - AND `success_update` >= `failure_update` - AND `notify` != '' $sql_extra2" , - intval(local_user()) - ); - $contact_count = (int)$r[0]['c']; - } elseif ($type == 'm') { - // autocomplete for Private Messages - $r = q("SELECT COUNT(*) AS c FROM `contact` - WHERE `uid` = %d AND NOT `self` - AND NOT `blocked` AND NOT `pending` AND NOT `archive` - AND `success_update` >= `failure_update` - AND `network` IN ('%s', '%s') $sql_extra2" , - intval(local_user()), - dbesc(NETWORK_DFRN), - dbesc(NETWORK_DIASPORA) - ); - $contact_count = (int)$r[0]['c']; - - } elseif ($type == 'a') { - // autocomplete for Contacts - $r = q("SELECT COUNT(*) AS c FROM `contact` - WHERE `uid` = %d AND NOT `self` - AND NOT `pending` $sql_extra2" , - intval(local_user()) - ); - $contact_count = (int)$r[0]['c']; - } else { - $contact_count = 0; - } - - $tot = $group_count + $contact_count; - - $groups = []; - $contacts = []; - - if ($type == '' || $type == 'g') { - /// @todo We should cache this query. - // This can be done when we can delete cache entries via wildcard - $r = q("SELECT `group`.`id`, `group`.`name`, GROUP_CONCAT(DISTINCT `group_member`.`contact-id` SEPARATOR ',') AS uids - FROM `group` - INNER JOIN `group_member` ON `group_member`.`gid`=`group`.`id` - WHERE NOT `group`.`deleted` AND `group`.`uid` = %d - $sql_extra - GROUP BY `group`.`name`, `group`.`id` - ORDER BY `group`.`name` - LIMIT %d,%d", - intval(local_user()), - intval($start), - intval($count) - ); - - foreach ($r as $g) { - $groups[] = [ - "type" => "g", - "photo" => "images/twopeople.png", - "name" => htmlentities($g['name']), - "id" => intval($g['id']), - "uids" => array_map("intval", explode(",",$g['uids'])), - "link" => '', - "forum" => '0' - ]; - } - if ((count($groups) > 0) && ($search == "")) { - $groups[] = ["separator" => true]; - } - } - - if ($type == '') { - $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv`, (`prv` OR `forum`) AS `frm` FROM `contact` - WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' - AND `success_update` >= `failure_update` AND NOT (`network` IN ('%s', '%s')) - $sql_extra2 - ORDER BY `name` ASC ", - intval(local_user()), - dbesc(NETWORK_OSTATUS), dbesc(NETWORK_STATUSNET) - ); - } elseif ($type == 'c') { - $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv` FROM `contact` - WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' - AND `success_update` >= `failure_update` AND NOT (`network` IN ('%s')) - $sql_extra2 - ORDER BY `name` ASC ", - intval(local_user()), - dbesc(NETWORK_STATUSNET) - ); - } elseif ($type == 'f') { - $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv` FROM `contact` - WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' - AND `success_update` >= `failure_update` AND NOT (`network` IN ('%s')) - AND (`forum` OR `prv`) - $sql_extra2 - ORDER BY `name` ASC ", - intval(local_user()), - dbesc(NETWORK_STATUSNET) - ); - } elseif ($type == 'm') { - $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr` FROM `contact` - WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` - AND `success_update` >= `failure_update` AND `network` IN ('%s', '%s') - $sql_extra2 - ORDER BY `name` ASC ", - intval(local_user()), - dbesc(NETWORK_DFRN), - dbesc(NETWORK_DIASPORA) - ); - } elseif ($type == 'a') { - $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv` FROM `contact` - WHERE `uid` = %d AND `pending` = 0 AND `success_update` >= `failure_update` - $sql_extra2 - ORDER BY `name` ASC ", - intval(local_user()) - ); - } elseif ($type == 'x') { - // autocomplete for global contact search (e.g. navbar search) - $r = navbar_complete($a); - $contacts = []; - if ($r) { - foreach ($r as $g) { - $contacts[] = [ - 'photo' => proxy_url($g['photo'], false, PROXY_SIZE_MICRO), - 'name' => $g['name'], - 'nick' => (x($g['addr']) ? $g['addr'] : $g['url']), - 'network' => $g['network'], - 'link' => $g['url'], - 'forum' => (x($g['community']) ? 1 : 0), - ]; - } - } - $o = [ - 'start' => $start, - 'count' => $count, - 'items' => $contacts, - ]; - echo json_encode($o); - killme(); - } else { - $r = []; - } - - if (DBM::is_result($r)) { - $forums = []; - foreach ($r as $g) { - $entry = [ - 'type' => 'c', - 'photo' => proxy_url($g['micro'], false, PROXY_SIZE_MICRO), - 'name' => htmlentities($g['name']), - 'id' => intval($g['id']), - 'network' => $g['network'], - 'link' => $g['url'], - 'nick' => htmlentities(($g['attag']) ? $g['attag'] : $g['nick']), - 'addr' => htmlentities(($g['addr']) ? $g['addr'] : $g['url']), - 'forum' => ((x($g, 'forum') || x($g, 'prv')) ? 1 : 0), - ]; - if ($entry['forum']) { - $forums[] = $entry; - } else { - $contacts[] = $entry; - } - } - if (count($forums) > 0) { - if ($search == "") { - $forums[] = ["separator" => true]; - } - $contacts = array_merge($forums, $contacts); - } - } - - $items = array_merge($groups, $contacts); - - if ($conv_id) { - /* - * if $conv_id is set, get unknown contacts in thread - * but first get known contacts url to filter them out - */ - $known_contacts = array_map( - function ($i) { - return dbesc($i['link']); - } - , $contacts); - - $unknown_contacts = []; - $r = q("SELECT `author-link` - FROM `item` WHERE `parent` = %d - AND (`author-name` LIKE '%%%s%%' OR `author-link` LIKE '%%%s%%') - AND `author-link` NOT IN ('%s') - GROUP BY `author-link`, `author-avatar`, `author-name` - ORDER BY `author-name` ASC - ", - intval($conv_id), - dbesc($search), - dbesc($search), - implode("', '", $known_contacts) - ); - if (DBM::is_result($r)) { - foreach ($r as $row) { - $contact = Contact::getDetailsByURL($row['author-link']); - - if (count($contact) > 0) { - $unknown_contacts[] = [ - 'type' => 'c', - 'photo' => proxy_url($contact['micro'], false, PROXY_SIZE_MICRO), - 'name' => htmlentities($contact['name']), - 'id' => intval($contact['cid']), - 'network' => $contact['network'], - 'link' => $contact['url'], - 'nick' => htmlentities($contact['nick'] ? : $contact['addr']), - 'addr' => htmlentities(($contact['addr']) ? $contact['addr'] : $contact['url']), - 'forum' => $contact['forum'] - ]; - } - } - } - - $items = array_merge($items, $unknown_contacts); - $tot += count($unknown_contacts); - } - - $results = [ - 'tot' => $tot, - 'start' => $start, - 'count' => $count, - 'groups' => $groups, - 'contacts' => $contacts, - 'items' => $items, - 'type' => $type, - 'search' => $search, - ]; - - Addon::callHooks('acl_lookup_end', $results); - - if ($out_type === 'html') { - $o = [ - 'tot' => $results['tot'], - 'start' => $results['start'], - 'count' => $results['count'], - 'groups' => $results['groups'], - 'contacts' => $results['contacts'], - ]; - return $o; - } - - $o = [ - 'tot' => $results['tot'], - 'start' => $results['start'], - 'count' => $results['count'], - 'items' => $results['items'], - ]; - - echo json_encode($o); - - killme(); -} -/** - * @brief Searching for global contacts for autocompletion - * - * @param App $a - * @return array with the search results - */ function navbar_complete(App $a) { - -// logger('navbar_complete'); - - if ((Config::get('system','block_public')) && (! local_user()) && (! remote_user())) { - return; - } - - // check if searching in the local global contact table is enabled - $localsearch = Config::get('system','poco_local_search'); - $search = notags(trim($_REQUEST['search'])); $mode = $_REQUEST['smode']; - // don't search if search term has less than 2 characters - if (! $search || mb_strlen($search) < 2) { - return []; - } - - if (substr($search,0,1) === '@') { - $search = substr($search,1); - } - - if ($localsearch) { - $x = GContact::searchByName($search, $mode); - return $x; - } - - if (! $localsearch) { - $p = (($a->pager['page'] != 1) ? '&p=' . $a->pager['page'] : ''); - - $x = Network::curl(get_server() . '/lsearch?f=' . $p . '&search=' . urlencode($search)); - if ($x['success']) { - $j = json_decode($x['body'],true); - if ($j && isset($j['results'])) { - return $j['results']; - } - } - } - - /// @TODO Not needed here? - return; + return Acl::contactAutocomplete($search, $mode); } From eef25a32593a58432029c71497ee77a24f04bf1e Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 25 Feb 2018 19:47:10 -0500 Subject: [PATCH 003/227] Move contact_selector() --- include/acl_selectors.php | 5 ----- mod/fsuggest.php | 6 +++--- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/include/acl_selectors.php b/include/acl_selectors.php index 37819fb56..b4eed7dd4 100644 --- a/include/acl_selectors.php +++ b/include/acl_selectors.php @@ -9,11 +9,6 @@ use Friendica\Model\Contact; require_once "mod/proxy.php"; -function contact_selector($selname, $selclass, $options, $preselected = false) -{ - return Acl::getSuggestContactSelectHTML($selname, $selclass, $options, defaults($preselected, [])); -} - function contact_select($selname, $selclass, $preselected = false, $size = 4, $privmail = false, $celeb = false, $privatenet = false, $tabindex = null) { return Acl::getMessageContactSelectHTML($selname, $selclass, defaults($preselected, []), $size, $privmail, $celeb, $privatenet, $tabindex); } diff --git a/mod/fsuggest.php b/mod/fsuggest.php index 86878a529..b0abeb220 100644 --- a/mod/fsuggest.php +++ b/mod/fsuggest.php @@ -4,6 +4,7 @@ */ use Friendica\App; +use Friendica\Core\Acl; use Friendica\Core\L10n; use Friendica\Core\Worker; use Friendica\Database\DBM; @@ -105,11 +106,10 @@ function fsuggest_content(App $a) $o .= '
'; - $o .= contact_selector( + $o .= Acl::getSuggestContactSelectHTML( 'suggest', 'suggest-select', - ['size' => 4, 'exclude' => $contact_id, 'networks' => 'DFRN_ONLY', 'single' => true], - false + ['size' => 4, 'exclude' => $contact_id, 'networks' => 'DFRN_ONLY', 'single' => true] ); From 113ea38d502e0ca90ec87b3cbaf4d8656f733022 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 25 Feb 2018 19:56:53 -0500 Subject: [PATCH 004/227] Move contact_select to Acl - Simplify Acl::getMessageContactSelectHTML parameters --- include/acl_selectors.php | 4 ---- mod/message.php | 5 +++-- src/Core/Acl.php | 44 ++++++++------------------------------- 3 files changed, 12 insertions(+), 41 deletions(-) diff --git a/include/acl_selectors.php b/include/acl_selectors.php index b4eed7dd4..b965c2ca6 100644 --- a/include/acl_selectors.php +++ b/include/acl_selectors.php @@ -9,10 +9,6 @@ use Friendica\Model\Contact; require_once "mod/proxy.php"; -function contact_select($selname, $selclass, $preselected = false, $size = 4, $privmail = false, $celeb = false, $privatenet = false, $tabindex = null) { - return Acl::getMessageContactSelectHTML($selname, $selclass, defaults($preselected, []), $size, $privmail, $celeb, $privatenet, $tabindex); -} - function prune_deadguys($arr) { Contact::pruneUnavailable($arr); return $arr; diff --git a/mod/message.php b/mod/message.php index 40f1dd08c..d2980aaea 100644 --- a/mod/message.php +++ b/mod/message.php @@ -7,6 +7,7 @@ use Friendica\App; use Friendica\Content\Nav; use Friendica\Content\Smilies; use Friendica\Content\Text\BBCode; +use Friendica\Core\Acl; use Friendica\Core\L10n; use Friendica\Core\System; use Friendica\Database\DBM; @@ -236,14 +237,14 @@ function message_content(App $a) $preid = $r[0]['id']; $preselect = [$preid]; } else { - $preselect = false; + $preselect = []; } } $prefill = $preselect ? $prename : ''; // the ugly select box - $select = contact_select('messageto', 'message-to-select', $preselect, 4, true, false, false, 10); + $select = Acl::getMessageContactSelectHTML('messageto', 'message-to-select', $preselect, 4, 10); $tpl = get_markup_template('prv_message.tpl'); $o .= replace_macros($tpl, [ diff --git a/src/Core/Acl.php b/src/Core/Acl.php index 67e2633a2..1c72d23cb 100644 --- a/src/Core/Acl.php +++ b/src/Core/Acl.php @@ -153,17 +153,12 @@ class Acl extends BaseObject * * @param string $selname Name attribute of the select input tag * @param string $selclass Class attribute of the select input tag - * @param array $preselected Contact ID that should be already selected + * @param array $preselected Contact IDs that should be already selected * @param int $size Length of the select box - * @param bool $privmail - * @param bool $celeb - * @param bool $privatenet * @param int $tabindex Select input tag tabindex attribute * @return string */ - public static function getMessageContactSelectHTML( - $selname, $selclass, array $preselected = [], $size = 4, $privmail = false, $celeb = false, $privatenet = false, - $tabindex = null) + public static function getMessageContactSelectHTML($selname, $selclass, array $preselected = [], $size = 4, $tabindex = null) { $a = self::getApp(); @@ -171,34 +166,18 @@ class Acl extends BaseObject // When used for private messages, we limit correspondence to mutual DFRN/Friendica friends and the selector // to one recipient. By default our selector allows multiple selects amongst all contacts. - - $sql_extra = ''; - - if ($privmail || $celeb) { - $sql_extra .= sprintf(" AND `rel` = %d ", intval(CONTACT_IS_FRIEND)); - } - - if ($privmail) { - $sql_extra .= sprintf(" AND `network` IN ('%s' , '%s') ", NETWORK_DFRN, NETWORK_DIASPORA); - } elseif ($privatenet) { - $sql_extra .= sprintf(" AND `network` IN ('%s' , '%s', '%s', '%s') ", NETWORK_DFRN, NETWORK_MAIL, NETWORK_FACEBOOK, - NETWORK_DIASPORA); - } + $sql_extra = sprintf(" AND `rel` = %d ", intval(CONTACT_IS_FRIEND)); + $sql_extra .= sprintf(" AND `network` IN ('%s' , '%s') ", NETWORK_DFRN, NETWORK_DIASPORA); $tabindex_attr = !empty($tabindex) ? ' tabindex="' . intval($tabindex) . '"' : ''; - if ($privmail && $preselected) { + $hidepreselected = ''; + if ($preselected) { $sql_extra .= " AND `id` IN (" . implode(",", $preselected) . ")"; $hidepreselected = ' style="display: none;"'; - } else { - $hidepreselected = ''; } - if ($privmail) { - $o .= "\r\n"; - } + $o .= "' . PHP_EOL; - if ($privmail && $preselected) { + if ($preselected) { $o .= implode(', ', $receiverlist); } From ce9e0f3649d89c7acdc1290ffb3175ff84eab664 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 25 Feb 2018 19:58:23 -0500 Subject: [PATCH 005/227] Move prune_deadguys to Contact --- include/acl_selectors.php | 5 ----- src/Model/Group.php | 4 ++-- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/include/acl_selectors.php b/include/acl_selectors.php index b965c2ca6..9eab2ffd7 100644 --- a/include/acl_selectors.php +++ b/include/acl_selectors.php @@ -9,11 +9,6 @@ use Friendica\Model\Contact; require_once "mod/proxy.php"; -function prune_deadguys($arr) { - Contact::pruneUnavailable($arr); - return $arr; -} - function get_acl_permissions($user = null) { return Acl::getDefaultUserPermissions($user); } diff --git a/src/Model/Group.php b/src/Model/Group.php index 9e472a7ad..c1430642d 100644 --- a/src/Model/Group.php +++ b/src/Model/Group.php @@ -4,8 +4,8 @@ */ namespace Friendica\Model; -use Friendica\Core\L10n; use Friendica\BaseObject; +use Friendica\Core\L10n; use Friendica\Database\DBM; use dba; @@ -290,7 +290,7 @@ class Group extends BaseObject if ($check_dead && !$use_gcontact) { require_once 'include/acl_selectors.php'; - $return = prune_deadguys($return); + Contact::pruneUnavailable($return); } return $return; } From 2b35938e34da9327d32f0883eae525b85ccce88a Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 25 Feb 2018 20:00:05 -0500 Subject: [PATCH 006/227] Move get_acl_permissions to Acl --- include/acl_selectors.php | 4 ---- mod/bookmarklet.php | 4 +++- mod/events.php | 3 ++- mod/network.php | 5 +++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/include/acl_selectors.php b/include/acl_selectors.php index 9eab2ffd7..ef7eef108 100644 --- a/include/acl_selectors.php +++ b/include/acl_selectors.php @@ -9,10 +9,6 @@ use Friendica\Model\Contact; require_once "mod/proxy.php"; -function get_acl_permissions($user = null) { - return Acl::getDefaultUserPermissions($user); -} - function populate_acl($user = null, $show_jotnets = false) { return Acl::getFullSelectorHTML($user, $show_jotnets); } diff --git a/mod/bookmarklet.php b/mod/bookmarklet.php index 7a6a3ee21..45c3d3190 100644 --- a/mod/bookmarklet.php +++ b/mod/bookmarklet.php @@ -2,7 +2,9 @@ /** * @file mod/bookmarklet.php */ + use Friendica\App; +use Friendica\Core\Acl; use Friendica\Core\L10n; use Friendica\Core\System; use Friendica\Module\Login; @@ -35,7 +37,7 @@ function bookmarklet_content(App $a) 'default_location' => $a->user['default-location'], 'nickname' => $a->user['nickname'], 'lockstate' => ((is_array($a->user) && ((strlen($a->user['allow_cid'])) || (strlen($a->user['allow_gid'])) || (strlen($a->user['deny_cid'])) || (strlen($a->user['deny_gid'])))) ? 'lock' : 'unlock'), - 'default_perms' => get_acl_permissions($a->user), + 'default_perms' => Acl::getDefaultUserPermissions($a->user), 'acl' => populate_acl($a->user, true), 'bang' => '', 'visitor' => 'block', diff --git a/mod/events.php b/mod/events.php index 695dbb290..cf84dc7ba 100644 --- a/mod/events.php +++ b/mod/events.php @@ -6,6 +6,7 @@ use Friendica\App; use Friendica\Content\Nav; +use Friendica\Core\Acl; use Friendica\Core\L10n; use Friendica\Core\System; use Friendica\Core\Worker; @@ -480,7 +481,7 @@ function events_content(App $a) { require_once 'include/acl_selectors.php' ; - $perms = get_acl_permissions($orig_event); + $perms = Acl::getDefaultUserPermissions($orig_event); if ($mode === 'new' || $mode === 'copy') { $acl = (($cid) ? '' : populate_acl(((x($orig_event)) ? $orig_event : $a->user))); diff --git a/mod/network.php b/mod/network.php index c2cb8e03f..9ab476004 100644 --- a/mod/network.php +++ b/mod/network.php @@ -9,6 +9,7 @@ use Friendica\Content\Feature; use Friendica\Content\ForumManager; use Friendica\Content\Nav; use Friendica\Content\Widget; +use Friendica\Core\Acl; use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Core\L10n; @@ -427,7 +428,7 @@ function networkFlatView(App $a, $update = 0) 'lockstate' => (((is_array($a->user) && ((strlen($a->user['allow_cid'])) || (strlen($a->user['allow_gid'])) || (strlen($a->user['deny_cid'])) || (strlen($a->user['deny_gid']))))) ? 'lock' : 'unlock'), - 'default_perms' => get_acl_permissions($a->user), + 'default_perms' => Acl::getDefaultUserPermissions($a->user), 'acl' => populate_acl($a->user, true), 'bang' => '', 'visitor' => 'block', @@ -576,7 +577,7 @@ function networkThreadedView(App $a, $update, $parent) 'lockstate' => ((($gid) || ($cid) || ($nets) || (is_array($a->user) && ((strlen($a->user['allow_cid'])) || (strlen($a->user['allow_gid'])) || (strlen($a->user['deny_cid'])) || (strlen($a->user['deny_gid']))))) ? 'lock' : 'unlock'), - 'default_perms' => get_acl_permissions($a->user), + 'default_perms' => Acl::getDefaultUserPermissions($a->user), 'acl' => populate_acl((($gid || $cid || $nets) ? $def_acl : $a->user), true), 'bang' => (($gid || $cid || $nets) ? '!' : ''), 'visitor' => 'block', From 824262b8248701b9f0bd33168e73108eb457c464 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 25 Feb 2018 20:03:03 -0500 Subject: [PATCH 007/227] Move populate_acl to Acl --- include/acl_selectors.php | 4 ---- mod/bookmarklet.php | 2 +- mod/community.php | 4 +++- mod/display.php | 3 ++- mod/events.php | 2 +- mod/network.php | 4 ++-- mod/photos.php | 5 +++-- mod/profile.php | 3 ++- mod/settings.php | 3 ++- 9 files changed, 16 insertions(+), 14 deletions(-) diff --git a/include/acl_selectors.php b/include/acl_selectors.php index ef7eef108..2c9770f9b 100644 --- a/include/acl_selectors.php +++ b/include/acl_selectors.php @@ -9,10 +9,6 @@ use Friendica\Model\Contact; require_once "mod/proxy.php"; -function populate_acl($user = null, $show_jotnets = false) { - return Acl::getFullSelectorHTML($user, $show_jotnets); -} - function navbar_complete(App $a) { $search = notags(trim($_REQUEST['search'])); $mode = $_REQUEST['smode']; diff --git a/mod/bookmarklet.php b/mod/bookmarklet.php index 45c3d3190..5d8d02c47 100644 --- a/mod/bookmarklet.php +++ b/mod/bookmarklet.php @@ -38,7 +38,7 @@ function bookmarklet_content(App $a) 'nickname' => $a->user['nickname'], 'lockstate' => ((is_array($a->user) && ((strlen($a->user['allow_cid'])) || (strlen($a->user['allow_gid'])) || (strlen($a->user['deny_cid'])) || (strlen($a->user['deny_gid'])))) ? 'lock' : 'unlock'), 'default_perms' => Acl::getDefaultUserPermissions($a->user), - 'acl' => populate_acl($a->user, true), + 'acl' => Acl::getFullSelectorHTML($a->user, true), 'bang' => '', 'visitor' => 'block', 'profile_uid' => local_user(), diff --git a/mod/community.php b/mod/community.php index 88fc6168b..5f0bd34a1 100644 --- a/mod/community.php +++ b/mod/community.php @@ -2,8 +2,10 @@ /** * @file mod/community.php */ + use Friendica\App; use Friendica\Content\Nav; +use Friendica\Core\Acl; use Friendica\Core\Config; use Friendica\Core\L10n; use Friendica\Core\PConfig; @@ -104,7 +106,7 @@ function community_content(App $a, $update = 0) 'default_location' => $a->user['default-location'], 'nickname' => $a->user['nickname'], 'lockstate' => (is_array($a->user) && (strlen($a->user['allow_cid']) || strlen($a->user['allow_gid']) || strlen($a->user['deny_cid']) || strlen($a->user['deny_gid'])) ? 'lock' : 'unlock'), - 'acl' => populate_acl($a->user, true), + 'acl' => Acl::getFullSelectorHTML($a->user, true), 'bang' => '', 'visitor' => 'block', 'profile_uid' => local_user(), diff --git a/mod/display.php b/mod/display.php index 42aad736c..d543535aa 100644 --- a/mod/display.php +++ b/mod/display.php @@ -5,6 +5,7 @@ use Friendica\App; use Friendica\Content\Text\BBCode; +use Friendica\Core\Acl; use Friendica\Core\Config; use Friendica\Core\L10n; use Friendica\Core\Protocol; @@ -317,7 +318,7 @@ function display_content(App $a, $update = false, $update_uid = 0) { 'default_location' => $a->user['default-location'], 'nickname' => $a->user['nickname'], 'lockstate' => (is_array($a->user) && (strlen($a->user['allow_cid']) || strlen($a->user['allow_gid']) || strlen($a->user['deny_cid']) || strlen($a->user['deny_gid'])) ? 'lock' : 'unlock'), - 'acl' => populate_acl($a->user, true), + 'acl' => Acl::getFullSelectorHTML($a->user, true), 'bang' => '', 'visitor' => 'block', 'profile_uid' => local_user(), diff --git a/mod/events.php b/mod/events.php index cf84dc7ba..7a54056b5 100644 --- a/mod/events.php +++ b/mod/events.php @@ -484,7 +484,7 @@ function events_content(App $a) { $perms = Acl::getDefaultUserPermissions($orig_event); if ($mode === 'new' || $mode === 'copy') { - $acl = (($cid) ? '' : populate_acl(((x($orig_event)) ? $orig_event : $a->user))); + $acl = (($cid) ? '' : Acl::getFullSelectorHTML(((x($orig_event)) ? $orig_event : $a->user))); } // If we copy an old event, we need to remove the ID and URI diff --git a/mod/network.php b/mod/network.php index 9ab476004..f7cc16764 100644 --- a/mod/network.php +++ b/mod/network.php @@ -429,7 +429,7 @@ function networkFlatView(App $a, $update = 0) ((strlen($a->user['allow_cid'])) || (strlen($a->user['allow_gid'])) || (strlen($a->user['deny_cid'])) || (strlen($a->user['deny_gid']))))) ? 'lock' : 'unlock'), 'default_perms' => Acl::getDefaultUserPermissions($a->user), - 'acl' => populate_acl($a->user, true), + 'acl' => Acl::getFullSelectorHTML($a->user, true), 'bang' => '', 'visitor' => 'block', 'profile_uid' => local_user(), @@ -578,7 +578,7 @@ function networkThreadedView(App $a, $update, $parent) ((strlen($a->user['allow_cid'])) || (strlen($a->user['allow_gid'])) || (strlen($a->user['deny_cid'])) || (strlen($a->user['deny_gid']))))) ? 'lock' : 'unlock'), 'default_perms' => Acl::getDefaultUserPermissions($a->user), - 'acl' => populate_acl((($gid || $cid || $nets) ? $def_acl : $a->user), true), + 'acl' => Acl::getFullSelectorHTML((($gid || $cid || $nets) ? $def_acl : $a->user), true), 'bang' => (($gid || $cid || $nets) ? '!' : ''), 'visitor' => 'block', 'profile_uid' => local_user(), diff --git a/mod/photos.php b/mod/photos.php index 3cd8b7528..fd8f1c84c 100644 --- a/mod/photos.php +++ b/mod/photos.php @@ -7,6 +7,7 @@ use Friendica\App; use Friendica\Content\Feature; use Friendica\Content\Nav; use Friendica\Content\Text\BBCode; +use Friendica\Core\Acl; use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Core\L10n; @@ -1084,7 +1085,7 @@ function photos_content(App $a) $tpl = get_markup_template('photos_upload.tpl'); - $aclselect_e = ($visitor ? '' : populate_acl($a->user)); + $aclselect_e = ($visitor ? '' : Acl::getFullSelectorHTML($a->user)); $o .= replace_macros($tpl,[ '$pagename' => L10n::t('Upload Photos'), @@ -1425,7 +1426,7 @@ function photos_content(App $a) $album_e = $ph[0]['album']; $caption_e = $ph[0]['desc']; - $aclselect_e = populate_acl($ph[0]); + $aclselect_e = Acl::getFullSelectorHTML($ph[0]); $edit = replace_macros($edit_tpl, [ '$id' => $ph[0]['id'], diff --git a/mod/profile.php b/mod/profile.php index 5e5988994..6e8de3527 100644 --- a/mod/profile.php +++ b/mod/profile.php @@ -6,6 +6,7 @@ use Friendica\App; use Friendica\Content\Nav; use Friendica\Content\Widget; +use Friendica\Core\Acl; use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Core\L10n; @@ -213,7 +214,7 @@ function profile_content(App $a, $update = 0) || strlen($a->user['deny_cid']) || strlen($a->user['deny_gid']) ) ? 'lock' : 'unlock', - 'acl' => $is_owner ? populate_acl($a->user, true) : '', + 'acl' => $is_owner ? Acl::getFullSelectorHTML($a->user, true) : '', 'bang' => '', 'visitor' => $is_owner || $commvisitor ? 'block' : 'none', 'profile_uid' => $a->profile['profile_uid'], diff --git a/mod/settings.php b/mod/settings.php index 6fcbe4d11..6646f1559 100644 --- a/mod/settings.php +++ b/mod/settings.php @@ -6,6 +6,7 @@ use Friendica\App; use Friendica\Content\Feature; use Friendica\Content\Nav; +use Friendica\Core\Acl; use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Core\L10n; @@ -1224,7 +1225,7 @@ function settings_content(App $a) '$permissions' => L10n::t('Default Post Permissions'), '$permdesc' => L10n::t("\x28click to open/close\x29"), '$visibility' => $profile['net-publish'], - '$aclselect' => populate_acl($a->user), + '$aclselect' => Acl::getFullSelectorHTML($a->user), '$suggestme' => $suggestme, '$blockwall'=> $blockwall, // array('blockwall', L10n::t('Allow friends to post to your profile page:'), !$blockwall, ''), '$blocktags'=> $blocktags, // array('blocktags', L10n::t('Allow friends to tag your posts:'), !$blocktags, ''), From 207eac4a1694e41a0f80a867d2af4bfdecbc0fb0 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 25 Feb 2018 20:04:30 -0500 Subject: [PATCH 008/227] Move navbar_complete to Acl --- include/acl_selectors.php | 6 ------ mod/acl.php | 7 ++++++- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/include/acl_selectors.php b/include/acl_selectors.php index 2c9770f9b..e6d1a8a92 100644 --- a/include/acl_selectors.php +++ b/include/acl_selectors.php @@ -9,9 +9,3 @@ use Friendica\Model\Contact; require_once "mod/proxy.php"; -function navbar_complete(App $a) { - $search = notags(trim($_REQUEST['search'])); - $mode = $_REQUEST['smode']; - - return Acl::contactAutocomplete($search, $mode); -} diff --git a/mod/acl.php b/mod/acl.php index e325e4668..a178a6922 100644 --- a/mod/acl.php +++ b/mod/acl.php @@ -4,6 +4,7 @@ use Friendica\App; use Friendica\Content\Widget; +use Friendica\Core\Acl; use Friendica\Core\Addon; use Friendica\Database\DBM; use Friendica\Model\Contact; @@ -184,7 +185,11 @@ function acl_content(App $a) ); } elseif ($type == 'x') { // autocomplete for global contact search (e.g. navbar search) - $r = navbar_complete($a); + $search = notags(trim($_REQUEST['search'])); + $mode = $_REQUEST['smode']; + + $r = Acl::contactAutocomplete($search, $mode); + $contacts = []; foreach ($r as $g) { $contacts[] = [ From 09c717d7519ef871a6f3ce0a73f7e24466bd50f0 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 25 Feb 2018 20:08:33 -0500 Subject: [PATCH 009/227] Remove references to include/acl_selectors --- include/conversation.php | 2 -- mod/acl.php | 1 - mod/display.php | 1 - mod/editpost.php | 2 -- mod/events.php | 2 -- mod/fsuggest.php | 2 -- mod/group.php | 1 - mod/message.php | 1 - mod/network.php | 1 - mod/notes.php | 1 - mod/photos.php | 1 - mod/profile.php | 1 - mod/settings.php | 2 -- mod/videos.php | 1 - src/Model/Group.php | 1 - 15 files changed, 20 deletions(-) diff --git a/include/conversation.php b/include/conversation.php index c7a2379d5..ba7b7315b 100644 --- a/include/conversation.php +++ b/include/conversation.php @@ -21,8 +21,6 @@ use Friendica\Util\DateTimeFormat; use Friendica\Util\Temporal; use Friendica\Util\XML; -require_once "include/acl_selectors.php"; - function item_extract_images($body) { $saved_image = []; diff --git a/mod/acl.php b/mod/acl.php index a178a6922..a3cc335b1 100644 --- a/mod/acl.php +++ b/mod/acl.php @@ -9,7 +9,6 @@ use Friendica\Core\Addon; use Friendica\Database\DBM; use Friendica\Model\Contact; -require_once 'include/acl_selectors.php'; require_once 'include/dba.php'; require_once 'mod/proxy.php'; diff --git a/mod/display.php b/mod/display.php index d543535aa..59e8aa277 100644 --- a/mod/display.php +++ b/mod/display.php @@ -205,7 +205,6 @@ function display_content(App $a, $update = false, $update_uid = 0) { require_once 'include/security.php'; require_once 'include/conversation.php'; - require_once 'include/acl_selectors.php'; $o = ''; diff --git a/mod/editpost.php b/mod/editpost.php index 3081b6729..aa2c29684 100644 --- a/mod/editpost.php +++ b/mod/editpost.php @@ -10,8 +10,6 @@ use Friendica\Core\L10n; use Friendica\Core\System; use Friendica\Database\DBM; -require_once 'include/acl_selectors.php'; - function editpost_content(App $a) { $o = ''; diff --git a/mod/events.php b/mod/events.php index 7a54056b5..3cc2ae2b4 100644 --- a/mod/events.php +++ b/mod/events.php @@ -479,8 +479,6 @@ function events_content(App $a) { $fhour = ((x($orig_event)) ? DateTimeFormat::convert($fdt, $tz, 'UTC', 'H') : '00'); $fminute = ((x($orig_event)) ? DateTimeFormat::convert($fdt, $tz, 'UTC', 'i') : '00'); - require_once 'include/acl_selectors.php' ; - $perms = Acl::getDefaultUserPermissions($orig_event); if ($mode === 'new' || $mode === 'copy') { diff --git a/mod/fsuggest.php b/mod/fsuggest.php index b0abeb220..55f9c3231 100644 --- a/mod/fsuggest.php +++ b/mod/fsuggest.php @@ -76,8 +76,6 @@ function fsuggest_post(App $a) function fsuggest_content(App $a) { - require_once 'include/acl_selectors.php'; - if (! local_user()) { notice(L10n::t('Permission denied.') . EOL); return; diff --git a/mod/group.php b/mod/group.php index 0473e2af9..870025074 100644 --- a/mod/group.php +++ b/mod/group.php @@ -146,7 +146,6 @@ function group_content(App $a) { } if (($a->argc > 1) && (intval($a->argv[1]))) { - require_once 'include/acl_selectors.php'; require_once 'mod/contacts.php'; $r = q("SELECT * FROM `group` WHERE `id` = %d AND `uid` = %d AND `deleted` = 0 LIMIT 1", diff --git a/mod/message.php b/mod/message.php index d2980aaea..e7d8a2080 100644 --- a/mod/message.php +++ b/mod/message.php @@ -16,7 +16,6 @@ use Friendica\Model\Mail; use Friendica\Util\DateTimeFormat; use Friendica\Util\Temporal; -require_once 'include/acl_selectors.php'; require_once 'include/conversation.php'; function message_init(App $a) diff --git a/mod/network.php b/mod/network.php index f7cc16764..9e1a05a11 100644 --- a/mod/network.php +++ b/mod/network.php @@ -25,7 +25,6 @@ use Friendica\Util\DateTimeFormat; require_once 'include/conversation.php'; require_once 'include/items.php'; -require_once 'include/acl_selectors.php'; function network_init(App $a) { diff --git a/mod/notes.php b/mod/notes.php index 3b46df07d..aa239fb0e 100644 --- a/mod/notes.php +++ b/mod/notes.php @@ -33,7 +33,6 @@ function notes_content(App $a, $update = false) require_once 'include/security.php'; require_once 'include/conversation.php'; - require_once 'include/acl_selectors.php'; $groups = []; diff --git a/mod/photos.php b/mod/photos.php index fd8f1c84c..a34a28fc1 100644 --- a/mod/photos.php +++ b/mod/photos.php @@ -27,7 +27,6 @@ use Friendica\Util\Map; use Friendica\Util\Temporal; require_once 'include/items.php'; -require_once 'include/acl_selectors.php'; require_once 'include/security.php'; function photos_init(App $a) { diff --git a/mod/profile.php b/mod/profile.php index 6e8de3527..830fc04c7 100644 --- a/mod/profile.php +++ b/mod/profile.php @@ -119,7 +119,6 @@ function profile_content(App $a, $update = 0) require_once 'include/security.php'; require_once 'include/conversation.php'; - require_once 'include/acl_selectors.php'; require_once 'include/items.php'; $groups = []; diff --git a/mod/settings.php b/mod/settings.php index 6646f1559..1ac3f434b 100644 --- a/mod/settings.php +++ b/mod/settings.php @@ -1000,8 +1000,6 @@ function settings_content(App $a) * ACCOUNT SETTINGS */ - require_once('include/acl_selectors.php'); - $profile = dba::selectFirst('profile', [], ['is-default' => true, 'uid' => local_user()]); if (!DBM::is_result($profile)) { notice(L10n::t('Unable to find your profile. Please contact your admin.') . EOL); diff --git a/mod/videos.php b/mod/videos.php index 75a4d031f..f4b8c46b1 100644 --- a/mod/videos.php +++ b/mod/videos.php @@ -19,7 +19,6 @@ use Friendica\Protocol\DFRN; use Friendica\Util\DateTimeFormat; require_once 'include/items.php'; -require_once 'include/acl_selectors.php'; require_once 'include/security.php'; function videos_init(App $a) { diff --git a/src/Model/Group.php b/src/Model/Group.php index c1430642d..f48dd5043 100644 --- a/src/Model/Group.php +++ b/src/Model/Group.php @@ -289,7 +289,6 @@ class Group extends BaseObject } if ($check_dead && !$use_gcontact) { - require_once 'include/acl_selectors.php'; Contact::pruneUnavailable($return); } return $return; From 2f463dfb17ac1ca554bd935c2a6529c577a1c21f Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 25 Feb 2018 20:08:51 -0500 Subject: [PATCH 010/227] Remove include/acl_selectors --- include/acl_selectors.php | 11 ----------- 1 file changed, 11 deletions(-) delete mode 100644 include/acl_selectors.php diff --git a/include/acl_selectors.php b/include/acl_selectors.php deleted file mode 100644 index e6d1a8a92..000000000 --- a/include/acl_selectors.php +++ /dev/null @@ -1,11 +0,0 @@ - Date: Sun, 25 Feb 2018 20:24:46 -0500 Subject: [PATCH 011/227] Prettify mod/acl - Replace obsolete x() and killme() calls - Simplify ternary operators with defaults() - Restore list alignment - Extract variable initialization from else conditions --- mod/acl.php | 102 +++++++++++++++++++++++++--------------------------- 1 file changed, 49 insertions(+), 53 deletions(-) diff --git a/mod/acl.php b/mod/acl.php index a3cc335b1..23875b683 100644 --- a/mod/acl.php +++ b/mod/acl.php @@ -18,14 +18,14 @@ function acl_content(App $a) return ''; } - $start = defaults($_REQUEST, 'start', 0); - $count = defaults($_REQUEST, 'count', 100); - $search = defaults($_REQUEST, 'search', ''); - $type = defaults($_REQUEST, 'type', ''); + $start = defaults($_REQUEST, 'start' , 0); + $count = defaults($_REQUEST, 'count' , 100); + $search = defaults($_REQUEST, 'search' , ''); + $type = defaults($_REQUEST, 'type' , ''); $conv_id = defaults($_REQUEST, 'conversation', null); // For use with jquery.textcomplete for private mail completion - if (x($_REQUEST, 'query')) { + if (!empty($_REQUEST['query'])) { if (!$type) { $type = 'm'; } @@ -43,17 +43,17 @@ function acl_content(App $a) } // count groups and contacts + $group_count = 0; if ($type == '' || $type == 'g') { $r = q("SELECT COUNT(*) AS g FROM `group` WHERE `deleted` = 0 AND `uid` = %d $sql_extra", intval(local_user()) ); $group_count = (int) $r[0]['g']; - } else { - $group_count = 0; } $sql_extra2 .= ' ' . Widget::unavailableNetworks(); + $contact_count = 0; if ($type == '' || $type == 'c') { // autocomplete for editor mentions $r = q("SELECT COUNT(*) AS c FROM `contact` @@ -95,8 +95,6 @@ function acl_content(App $a) intval(local_user()) ); $contact_count = (int) $r[0]['c']; - } else { - $contact_count = 0; } $tot = $group_count + $contact_count; @@ -122,12 +120,12 @@ function acl_content(App $a) foreach ($r as $g) { $groups[] = [ - 'type' => 'g', + 'type' => 'g', 'photo' => 'images/twopeople.png', - 'name' => htmlentities($g['name']), - 'id' => intval($g['id']), - 'uids' => array_map('intval', explode(',', $g['uids'])), - 'link' => '', + 'name' => htmlentities($g['name']), + 'id' => intval($g['id']), + 'uids' => array_map('intval', explode(',', $g['uids'])), + 'link' => '', 'forum' => '0' ]; } @@ -136,50 +134,51 @@ function acl_content(App $a) } } + $r = []; if ($type == '') { $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv`, (`prv` OR `forum`) AS `frm` FROM `contact` - WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' - AND `success_update` >= `failure_update` AND NOT (`network` IN ('%s', '%s')) - $sql_extra2 - ORDER BY `name` ASC ", + WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' + AND `success_update` >= `failure_update` AND NOT (`network` IN ('%s', '%s')) + $sql_extra2 + ORDER BY `name` ASC ", intval(local_user()), dbesc(NETWORK_OSTATUS), dbesc(NETWORK_STATUSNET) ); } elseif ($type == 'c') { $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv` FROM `contact` - WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' - AND `success_update` >= `failure_update` AND NOT (`network` IN ('%s')) - $sql_extra2 - ORDER BY `name` ASC ", + WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' + AND `success_update` >= `failure_update` AND NOT (`network` IN ('%s')) + $sql_extra2 + ORDER BY `name` ASC ", intval(local_user()), dbesc(NETWORK_STATUSNET) ); } elseif ($type == 'f') { $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv` FROM `contact` - WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' - AND `success_update` >= `failure_update` AND NOT (`network` IN ('%s')) - AND (`forum` OR `prv`) - $sql_extra2 - ORDER BY `name` ASC ", + WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' + AND `success_update` >= `failure_update` AND NOT (`network` IN ('%s')) + AND (`forum` OR `prv`) + $sql_extra2 + ORDER BY `name` ASC ", intval(local_user()), dbesc(NETWORK_STATUSNET) ); } elseif ($type == 'm') { $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr` FROM `contact` - WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` - AND `success_update` >= `failure_update` AND `network` IN ('%s', '%s') - $sql_extra2 - ORDER BY `name` ASC ", + WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` + AND `success_update` >= `failure_update` AND `network` IN ('%s', '%s') + $sql_extra2 + ORDER BY `name` ASC ", intval(local_user()), dbesc(NETWORK_DFRN), dbesc(NETWORK_DIASPORA) ); } elseif ($type == 'a') { $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv` FROM `contact` - WHERE `uid` = %d AND `pending` = 0 AND `success_update` >= `failure_update` - $sql_extra2 - ORDER BY `name` ASC ", + WHERE `uid` = %d AND `pending` = 0 AND `success_update` >= `failure_update` + $sql_extra2 + ORDER BY `name` ASC ", intval(local_user()) ); } elseif ($type == 'x') { @@ -194,10 +193,10 @@ function acl_content(App $a) $contacts[] = [ 'photo' => proxy_url($g['photo'], false, PROXY_SIZE_MICRO), 'name' => $g['name'], - 'nick' => (x($g['addr']) ? $g['addr'] : $g['url']), + 'nick' => defaults($g, 'addr', $g['url']), 'network' => $g['network'], 'link' => $g['url'], - 'forum' => (x($g['community']) ? 1 : 0), + 'forum' => !empty($g['community']) ? 1 : 0, ]; } $o = [ @@ -206,9 +205,7 @@ function acl_content(App $a) 'items' => $contacts, ]; echo json_encode($o); - killme(); - } else { - $r = []; + exit; } if (DBM::is_result($r)) { @@ -221,9 +218,9 @@ function acl_content(App $a) 'id' => intval($g['id']), 'network' => $g['network'], 'link' => $g['url'], - 'nick' => htmlentities(($g['attag']) ? $g['attag'] : $g['nick']), - 'addr' => htmlentities(($g['addr']) ? $g['addr'] : $g['url']), - 'forum' => ((x($g, 'forum') || x($g, 'prv')) ? 1 : 0), + 'nick' => htmlentities(defaults($g, 'attag', $g['nick'])), + 'addr' => htmlentities(defaults($g, 'addr', $g['url'])), + 'forum' => !empty($g['forum']) || !empty($g['prv']) ? 1 : 0, ]; if ($entry['forum']) { $forums[] = $entry; @@ -269,15 +266,15 @@ function acl_content(App $a) if (count($contact) > 0) { $unknown_contacts[] = [ - 'type' => 'c', - 'photo' => proxy_url($contact['micro'], false, PROXY_SIZE_MICRO), - 'name' => htmlentities($contact['name']), - 'id' => intval($contact['cid']), + 'type' => 'c', + 'photo' => proxy_url($contact['micro'], false, PROXY_SIZE_MICRO), + 'name' => htmlentities($contact['name']), + 'id' => intval($contact['cid']), 'network' => $contact['network'], - 'link' => $contact['url'], - 'nick' => htmlentities($contact['nick'] ?: $contact['addr']), - 'addr' => htmlentities(($contact['addr']) ? $contact['addr'] : $contact['url']), - 'forum' => $contact['forum'] + 'link' => $contact['url'], + 'nick' => htmlentities(defaults($contact, 'nick', $contact['addr'])), + 'addr' => htmlentities(defaults($contact, 'addr', $contact['url'])), + 'forum' => $contact['forum'] ]; } } @@ -301,13 +298,12 @@ function acl_content(App $a) Addon::callHooks('acl_lookup_end', $results); $o = [ - 'tot' => $results['tot'], + 'tot' => $results['tot'], 'start' => $results['start'], 'count' => $results['count'], 'items' => $results['items'], ]; echo json_encode($o); - - killme(); + exit; } From dca0fa3f1d48ad8c63c8b7210ea7cb550baddb6d Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Wed, 28 Feb 2018 20:08:59 -0500 Subject: [PATCH 012/227] Fix wrong variable type in mod/message --- mod/message.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mod/message.php b/mod/message.php index e7d8a2080..27ba765d0 100644 --- a/mod/message.php +++ b/mod/message.php @@ -207,7 +207,7 @@ function message_content(App $a) '$linkurl' => L10n::t('Please enter a link URL:') ]); - $preselect = isset($a->argv[2]) ? [$a->argv[2]] : false; + $preselect = isset($a->argv[2]) ? [$a->argv[2]] : []; $prename = $preurl = $preid = ''; From 35d09fdad1af0ff64ab1f1e3cab8c1befeef711f Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Wed, 28 Feb 2018 20:09:19 -0500 Subject: [PATCH 013/227] Fix query mistake in Acl::getSuggestContactSelectHTML --- src/Core/Acl.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Core/Acl.php b/src/Core/Acl.php index 1c72d23cb..1bc150aca 100644 --- a/src/Core/Acl.php +++ b/src/Core/Acl.php @@ -115,7 +115,7 @@ class Acl extends BaseObject } $stmt = dba::p("SELECT `id`, `name`, `url`, `network` FROM `contact` - WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' + WHERE `uid` = ? AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' $sql_extra ORDER BY `name` ASC ", intval(local_user()) ); From a7db21c8fd8d1584bbc77566c830e26d9ea3519b Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Fri, 2 Mar 2018 18:41:24 -0500 Subject: [PATCH 014/227] Rename Core\Acl to Core\ACL --- mod/acl.php | 4 ++-- mod/bookmarklet.php | 6 +++--- mod/community.php | 4 ++-- mod/display.php | 4 ++-- mod/events.php | 6 +++--- mod/fsuggest.php | 4 ++-- mod/message.php | 4 ++-- mod/network.php | 10 +++++----- mod/photos.php | 6 +++--- mod/profile.php | 4 ++-- mod/settings.php | 4 ++-- 11 files changed, 28 insertions(+), 28 deletions(-) diff --git a/mod/acl.php b/mod/acl.php index 23875b683..11d9e5683 100644 --- a/mod/acl.php +++ b/mod/acl.php @@ -4,7 +4,7 @@ use Friendica\App; use Friendica\Content\Widget; -use Friendica\Core\Acl; +use Friendica\Core\ACL; use Friendica\Core\Addon; use Friendica\Database\DBM; use Friendica\Model\Contact; @@ -186,7 +186,7 @@ function acl_content(App $a) $search = notags(trim($_REQUEST['search'])); $mode = $_REQUEST['smode']; - $r = Acl::contactAutocomplete($search, $mode); + $r = ACL::contactAutocomplete($search, $mode); $contacts = []; foreach ($r as $g) { diff --git a/mod/bookmarklet.php b/mod/bookmarklet.php index 5d8d02c47..9ae3e28f0 100644 --- a/mod/bookmarklet.php +++ b/mod/bookmarklet.php @@ -4,7 +4,7 @@ */ use Friendica\App; -use Friendica\Core\Acl; +use Friendica\Core\ACL; use Friendica\Core\L10n; use Friendica\Core\System; use Friendica\Module\Login; @@ -37,8 +37,8 @@ function bookmarklet_content(App $a) 'default_location' => $a->user['default-location'], 'nickname' => $a->user['nickname'], 'lockstate' => ((is_array($a->user) && ((strlen($a->user['allow_cid'])) || (strlen($a->user['allow_gid'])) || (strlen($a->user['deny_cid'])) || (strlen($a->user['deny_gid'])))) ? 'lock' : 'unlock'), - 'default_perms' => Acl::getDefaultUserPermissions($a->user), - 'acl' => Acl::getFullSelectorHTML($a->user, true), + 'default_perms' => ACL::getDefaultUserPermissions($a->user), + 'acl' => ACL::getFullSelectorHTML($a->user, true), 'bang' => '', 'visitor' => 'block', 'profile_uid' => local_user(), diff --git a/mod/community.php b/mod/community.php index 5f0bd34a1..40ebdbb6e 100644 --- a/mod/community.php +++ b/mod/community.php @@ -5,7 +5,7 @@ use Friendica\App; use Friendica\Content\Nav; -use Friendica\Core\Acl; +use Friendica\Core\ACL; use Friendica\Core\Config; use Friendica\Core\L10n; use Friendica\Core\PConfig; @@ -106,7 +106,7 @@ function community_content(App $a, $update = 0) 'default_location' => $a->user['default-location'], 'nickname' => $a->user['nickname'], 'lockstate' => (is_array($a->user) && (strlen($a->user['allow_cid']) || strlen($a->user['allow_gid']) || strlen($a->user['deny_cid']) || strlen($a->user['deny_gid'])) ? 'lock' : 'unlock'), - 'acl' => Acl::getFullSelectorHTML($a->user, true), + 'acl' => ACL::getFullSelectorHTML($a->user, true), 'bang' => '', 'visitor' => 'block', 'profile_uid' => local_user(), diff --git a/mod/display.php b/mod/display.php index 59e8aa277..ab27b283b 100644 --- a/mod/display.php +++ b/mod/display.php @@ -5,7 +5,7 @@ use Friendica\App; use Friendica\Content\Text\BBCode; -use Friendica\Core\Acl; +use Friendica\Core\ACL; use Friendica\Core\Config; use Friendica\Core\L10n; use Friendica\Core\Protocol; @@ -317,7 +317,7 @@ function display_content(App $a, $update = false, $update_uid = 0) { 'default_location' => $a->user['default-location'], 'nickname' => $a->user['nickname'], 'lockstate' => (is_array($a->user) && (strlen($a->user['allow_cid']) || strlen($a->user['allow_gid']) || strlen($a->user['deny_cid']) || strlen($a->user['deny_gid'])) ? 'lock' : 'unlock'), - 'acl' => Acl::getFullSelectorHTML($a->user, true), + 'acl' => ACL::getFullSelectorHTML($a->user, true), 'bang' => '', 'visitor' => 'block', 'profile_uid' => local_user(), diff --git a/mod/events.php b/mod/events.php index 3cc2ae2b4..8dab59b03 100644 --- a/mod/events.php +++ b/mod/events.php @@ -6,7 +6,7 @@ use Friendica\App; use Friendica\Content\Nav; -use Friendica\Core\Acl; +use Friendica\Core\ACL; use Friendica\Core\L10n; use Friendica\Core\System; use Friendica\Core\Worker; @@ -479,10 +479,10 @@ function events_content(App $a) { $fhour = ((x($orig_event)) ? DateTimeFormat::convert($fdt, $tz, 'UTC', 'H') : '00'); $fminute = ((x($orig_event)) ? DateTimeFormat::convert($fdt, $tz, 'UTC', 'i') : '00'); - $perms = Acl::getDefaultUserPermissions($orig_event); + $perms = ACL::getDefaultUserPermissions($orig_event); if ($mode === 'new' || $mode === 'copy') { - $acl = (($cid) ? '' : Acl::getFullSelectorHTML(((x($orig_event)) ? $orig_event : $a->user))); + $acl = (($cid) ? '' : ACL::getFullSelectorHTML(((x($orig_event)) ? $orig_event : $a->user))); } // If we copy an old event, we need to remove the ID and URI diff --git a/mod/fsuggest.php b/mod/fsuggest.php index 55f9c3231..4f432d840 100644 --- a/mod/fsuggest.php +++ b/mod/fsuggest.php @@ -4,7 +4,7 @@ */ use Friendica\App; -use Friendica\Core\Acl; +use Friendica\Core\ACL; use Friendica\Core\L10n; use Friendica\Core\Worker; use Friendica\Database\DBM; @@ -104,7 +104,7 @@ function fsuggest_content(App $a) $o .= ''; - $o .= Acl::getSuggestContactSelectHTML( + $o .= ACL::getSuggestContactSelectHTML( 'suggest', 'suggest-select', ['size' => 4, 'exclude' => $contact_id, 'networks' => 'DFRN_ONLY', 'single' => true] diff --git a/mod/message.php b/mod/message.php index 27ba765d0..e9bfc076b 100644 --- a/mod/message.php +++ b/mod/message.php @@ -7,7 +7,7 @@ use Friendica\App; use Friendica\Content\Nav; use Friendica\Content\Smilies; use Friendica\Content\Text\BBCode; -use Friendica\Core\Acl; +use Friendica\Core\ACL; use Friendica\Core\L10n; use Friendica\Core\System; use Friendica\Database\DBM; @@ -243,7 +243,7 @@ function message_content(App $a) $prefill = $preselect ? $prename : ''; // the ugly select box - $select = Acl::getMessageContactSelectHTML('messageto', 'message-to-select', $preselect, 4, 10); + $select = ACL::getMessageContactSelectHTML('messageto', 'message-to-select', $preselect, 4, 10); $tpl = get_markup_template('prv_message.tpl'); $o .= replace_macros($tpl, [ diff --git a/mod/network.php b/mod/network.php index 9e1a05a11..4ab773bd3 100644 --- a/mod/network.php +++ b/mod/network.php @@ -9,7 +9,7 @@ use Friendica\Content\Feature; use Friendica\Content\ForumManager; use Friendica\Content\Nav; use Friendica\Content\Widget; -use Friendica\Core\Acl; +use Friendica\Core\ACL; use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Core\L10n; @@ -427,8 +427,8 @@ function networkFlatView(App $a, $update = 0) 'lockstate' => (((is_array($a->user) && ((strlen($a->user['allow_cid'])) || (strlen($a->user['allow_gid'])) || (strlen($a->user['deny_cid'])) || (strlen($a->user['deny_gid']))))) ? 'lock' : 'unlock'), - 'default_perms' => Acl::getDefaultUserPermissions($a->user), - 'acl' => Acl::getFullSelectorHTML($a->user, true), + 'default_perms' => ACL::getDefaultUserPermissions($a->user), + 'acl' => ACL::getFullSelectorHTML($a->user, true), 'bang' => '', 'visitor' => 'block', 'profile_uid' => local_user(), @@ -576,8 +576,8 @@ function networkThreadedView(App $a, $update, $parent) 'lockstate' => ((($gid) || ($cid) || ($nets) || (is_array($a->user) && ((strlen($a->user['allow_cid'])) || (strlen($a->user['allow_gid'])) || (strlen($a->user['deny_cid'])) || (strlen($a->user['deny_gid']))))) ? 'lock' : 'unlock'), - 'default_perms' => Acl::getDefaultUserPermissions($a->user), - 'acl' => Acl::getFullSelectorHTML((($gid || $cid || $nets) ? $def_acl : $a->user), true), + 'default_perms' => ACL::getDefaultUserPermissions($a->user), + 'acl' => ACL::getFullSelectorHTML((($gid || $cid || $nets) ? $def_acl : $a->user), true), 'bang' => (($gid || $cid || $nets) ? '!' : ''), 'visitor' => 'block', 'profile_uid' => local_user(), diff --git a/mod/photos.php b/mod/photos.php index a34a28fc1..c8dad750d 100644 --- a/mod/photos.php +++ b/mod/photos.php @@ -7,7 +7,7 @@ use Friendica\App; use Friendica\Content\Feature; use Friendica\Content\Nav; use Friendica\Content\Text\BBCode; -use Friendica\Core\Acl; +use Friendica\Core\ACL; use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Core\L10n; @@ -1084,7 +1084,7 @@ function photos_content(App $a) $tpl = get_markup_template('photos_upload.tpl'); - $aclselect_e = ($visitor ? '' : Acl::getFullSelectorHTML($a->user)); + $aclselect_e = ($visitor ? '' : ACL::getFullSelectorHTML($a->user)); $o .= replace_macros($tpl,[ '$pagename' => L10n::t('Upload Photos'), @@ -1425,7 +1425,7 @@ function photos_content(App $a) $album_e = $ph[0]['album']; $caption_e = $ph[0]['desc']; - $aclselect_e = Acl::getFullSelectorHTML($ph[0]); + $aclselect_e = ACL::getFullSelectorHTML($ph[0]); $edit = replace_macros($edit_tpl, [ '$id' => $ph[0]['id'], diff --git a/mod/profile.php b/mod/profile.php index 830fc04c7..ab11b4d5f 100644 --- a/mod/profile.php +++ b/mod/profile.php @@ -6,7 +6,7 @@ use Friendica\App; use Friendica\Content\Nav; use Friendica\Content\Widget; -use Friendica\Core\Acl; +use Friendica\Core\ACL; use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Core\L10n; @@ -213,7 +213,7 @@ function profile_content(App $a, $update = 0) || strlen($a->user['deny_cid']) || strlen($a->user['deny_gid']) ) ? 'lock' : 'unlock', - 'acl' => $is_owner ? Acl::getFullSelectorHTML($a->user, true) : '', + 'acl' => $is_owner ? ACL::getFullSelectorHTML($a->user, true) : '', 'bang' => '', 'visitor' => $is_owner || $commvisitor ? 'block' : 'none', 'profile_uid' => $a->profile['profile_uid'], diff --git a/mod/settings.php b/mod/settings.php index 1ac3f434b..46c3d2ec9 100644 --- a/mod/settings.php +++ b/mod/settings.php @@ -6,7 +6,7 @@ use Friendica\App; use Friendica\Content\Feature; use Friendica\Content\Nav; -use Friendica\Core\Acl; +use Friendica\Core\ACL; use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Core\L10n; @@ -1223,7 +1223,7 @@ function settings_content(App $a) '$permissions' => L10n::t('Default Post Permissions'), '$permdesc' => L10n::t("\x28click to open/close\x29"), '$visibility' => $profile['net-publish'], - '$aclselect' => Acl::getFullSelectorHTML($a->user), + '$aclselect' => ACL::getFullSelectorHTML($a->user), '$suggestme' => $suggestme, '$blockwall'=> $blockwall, // array('blockwall', L10n::t('Allow friends to post to your profile page:'), !$blockwall, ''), '$blocktags'=> $blocktags, // array('blocktags', L10n::t('Allow friends to tag your posts:'), !$blocktags, ''), From 5bda6c7f6de8b766a612880636c7030a98db5efe Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 3 Mar 2018 08:47:13 +0000 Subject: [PATCH 015/227] We now accept array as condition parameters --- include/dba.php | 40 +++++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/include/dba.php b/include/dba.php index 9ac26aaa1..247e6ac83 100644 --- a/include/dba.php +++ b/include/dba.php @@ -950,13 +950,7 @@ class dba { foreach ($commands AS $command) { $conditions = $command['conditions']; - $array_element = each($conditions); - $array_key = $array_element['key']; - if (is_int($array_key)) { - $condition_string = " WHERE " . array_shift($conditions); - } else { - $condition_string = " WHERE `" . implode("` = ? AND `", array_keys($conditions)) . "` = ?"; - } + $condition_string = self::buildCondition($conditions); if ((count($command['conditions']) > 1) || is_int($array_key)) { $sql = "DELETE FROM `" . $command['table'] . "`" . $condition_string; @@ -1047,13 +1041,7 @@ class dba { $table = self::escape($table); - $array_element = each($condition); - $array_key = $array_element['key']; - if (is_int($array_key)) { - $condition_string = " WHERE ".array_shift($condition); - } else { - $condition_string = " WHERE `".implode("` = ? AND `", array_keys($condition))."` = ?"; - } + $condition_string = self::buildCondition($condition); if (is_bool($old_fields)) { $do_insert = $old_fields; @@ -1148,6 +1136,8 @@ class dba { return false; } + $table = self::escape($table); + if (count($fields) > 0) { $select_fields = "`" . implode("`, `", array_values($fields)) . "`"; } else { @@ -1235,16 +1225,32 @@ class dba { * @param array $condition * @return string */ - private static function buildCondition(array &$condition = []) + private static function buildCondition(&$condition = []) { $condition_string = ''; - if (count($condition) > 0) { + if (is_array($condition) && (count($condition) > 0)) { $array_element = each($condition); $array_key = $array_element['key']; if (is_int($array_key)) { $condition_string = " WHERE ".array_shift($condition); } else { - $condition_string = " WHERE `".implode("` = ? AND `", array_keys($condition))."` = ?"; + $new_values = []; + $condition_string = ""; + foreach ($condition as $field => $value) { + if ($condition_string != "") { + $condition_string .= " AND "; + } + if (is_array($value)) { + $new_values = array_merge($new_values, array_values($value)); + $placeholders = substr(str_repeat("?, ", count($value)), 0, -2); + $condition_string .= "`" . $field . "` IN (" . $placeholders . ")"; + } else { + $new_values[] = $value; + $condition_string .= "`" . $field . "` = ?"; + } + } + $condition_string = " WHERE " . $condition_string; + $condition = $new_values; } } From cd3ff100ab1e6935a4d3acc28e0acf5f0f3ff77e Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sat, 3 Mar 2018 07:38:15 -0500 Subject: [PATCH 016/227] Rename Acl.php to ACL.php --- src/Core/Acl.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Core/Acl.php b/src/Core/Acl.php index 1bc150aca..ae05fd136 100644 --- a/src/Core/Acl.php +++ b/src/Core/Acl.php @@ -33,7 +33,7 @@ use function replace_macros; * * @author Hypolite Petovan */ -class Acl extends BaseObject +class ACL extends BaseObject { /** * Returns a select input tag with all the contact of the local user From 1907a5dbe762dc287167cd3d33feafb12ad04c1b Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sat, 3 Mar 2018 07:40:18 -0500 Subject: [PATCH 017/227] Rename Acl.php to ACL.php --- src/Core/{Acl.php => ACL.php} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/Core/{Acl.php => ACL.php} (100%) diff --git a/src/Core/Acl.php b/src/Core/ACL.php similarity index 100% rename from src/Core/Acl.php rename to src/Core/ACL.php From ab544e1e9f1ad56205c80facc220d6e7856d9a19 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sat, 3 Mar 2018 07:41:49 -0500 Subject: [PATCH 018/227] Add missing dba::close() call in Contact::pruneUnavailable --- src/Model/Contact.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Model/Contact.php b/src/Model/Contact.php index 85e71075a..b4d20586a 100644 --- a/src/Model/Contact.php +++ b/src/Model/Contact.php @@ -1538,6 +1538,8 @@ class Contact extends BaseObject $return[] = $contact['id']; } + dba::close($stmt); + $contact_ids = $return; } } From 194da423e0c9c02eb9a0a55cfd2e75f2cac5936a Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 3 Mar 2018 13:26:23 +0000 Subject: [PATCH 019/227] An array with fieldnames as keys is important for the "insert" in the "update" function --- include/dba.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/dba.php b/include/dba.php index 247e6ac83..4f7ca4da3 100644 --- a/include/dba.php +++ b/include/dba.php @@ -1245,7 +1245,7 @@ class dba { $placeholders = substr(str_repeat("?, ", count($value)), 0, -2); $condition_string .= "`" . $field . "` IN (" . $placeholders . ")"; } else { - $new_values[] = $value; + $new_values[$field] = $value; $condition_string .= "`" . $field . "` = ?"; } } From 74f6dc5373f91adc59960807ff9870aa07c59b57 Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 3 Mar 2018 23:02:45 +0000 Subject: [PATCH 020/227] Renamed functions / each is replaced --- include/dba.php | 43 +++++++++++++++++++++++-------------------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/include/dba.php b/include/dba.php index 4f7ca4da3..af571f245 100644 --- a/include/dba.php +++ b/include/dba.php @@ -145,7 +145,7 @@ class dba { * * @param string $query The database query that will be analyzed */ - private static function log_index($query) { + private static function logIndex($query) { $a = get_app(); if (empty($a->config["system"]["db_log_index"])) { @@ -272,7 +272,7 @@ class dba { * @param array $args The parameters that are to replace the ? placeholders * @return string The replaced SQL query */ - private static function replace_parameters($sql, $args) { + private static function replaceParameters($sql, $args) { $offset = 0; foreach ($args AS $param => $value) { if (is_int($args[$param]) || is_float($args[$param])) { @@ -413,7 +413,7 @@ class dba { // The fallback routine is called as well when there are no arguments if (!$can_be_prepared || (count($args) == 0)) { - $retval = self::$db->query(self::replace_parameters($sql, $args)); + $retval = self::$db->query(self::replaceParameters($sql, $args)); if (self::$db->errno) { self::$error = self::$db->error; self::$errorno = self::$db->errno; @@ -476,7 +476,7 @@ class dba { $errorno = self::$errorno; logger('DB Error '.self::$errorno.': '.self::$error."\n". - System::callstack(8)."\n".self::replace_parameters($sql, $params)); + System::callstack(8)."\n".self::replaceParameters($sql, $params)); self::$error = $error; self::$errorno = $errorno; @@ -496,7 +496,7 @@ class dba { @file_put_contents($a->config["system"]["db_log"], DateTimeFormat::utcNow()."\t".$duration."\t". basename($backtrace[1]["file"])."\t". $backtrace[1]["line"]."\t".$backtrace[2]["function"]."\t". - substr(self::replace_parameters($sql, $args), 0, 2000)."\n", FILE_APPEND); + substr(self::replaceParameters($sql, $args), 0, 2000)."\n", FILE_APPEND); } } return $retval; @@ -541,7 +541,7 @@ class dba { $errorno = self::$errorno; logger('DB Error '.self::$errorno.': '.self::$error."\n". - System::callstack(8)."\n".self::replace_parameters($sql, $params)); + System::callstack(8)."\n".self::replaceParameters($sql, $params)); self::$error = $error; self::$errorno = $errorno; @@ -567,10 +567,10 @@ class dba { $fields = []; - $array_element = each($condition); - $array_key = $array_element['key']; - if (!is_int($array_key)) { - $fields = [$array_key]; + reset($condition); + $first_key = key($condition); + if (!is_int($first_key)) { + $fields = [$first_key]; } $stmt = self::select($table, $fields, $condition, ['limit' => 1]); @@ -846,7 +846,7 @@ class dba { * * This process must only be started once, since the value is cached. */ - private static function build_relation_data() { + private static function buildRelationData() { $definition = DBStructure::definition(); foreach ($definition AS $table => $structure) { @@ -895,7 +895,7 @@ class dba { // To speed up the whole process we cache the table relations if (count(self::$relation) == 0) { - self::build_relation_data(); + self::buildRelationData(); } // Is there a relation entry for the table? @@ -950,11 +950,14 @@ class dba { foreach ($commands AS $command) { $conditions = $command['conditions']; + reset($conditions); + $first_key = key($conditions); + $condition_string = self::buildCondition($conditions); - if ((count($command['conditions']) > 1) || is_int($array_key)) { + if ((count($command['conditions']) > 1) || is_int($first_key)) { $sql = "DELETE FROM `" . $command['table'] . "`" . $condition_string; - logger(self::replace_parameters($sql, $conditions), LOGGER_DATA); + logger(self::replaceParameters($sql, $conditions), LOGGER_DATA); if (!self::e($sql, $conditions)) { if ($do_transaction) { @@ -984,7 +987,7 @@ class dba { $sql = "DELETE FROM `" . $table . "` WHERE `" . $field . "` IN (" . substr(str_repeat("?, ", count($field_values)), 0, -2) . ");"; - logger(self::replace_parameters($sql, $field_values), LOGGER_DATA); + logger(self::replaceParameters($sql, $field_values), LOGGER_DATA); if (!self::e($sql, $field_values)) { if ($do_transaction) { @@ -1225,13 +1228,13 @@ class dba { * @param array $condition * @return string */ - private static function buildCondition(&$condition = []) + private static function buildCondition(array &$condition = []) { $condition_string = ''; - if (is_array($condition) && (count($condition) > 0)) { - $array_element = each($condition); - $array_key = $array_element['key']; - if (is_int($array_key)) { + if (count($condition) > 0) { + reset($condition); + $first_key = key($condition); + if (is_int($first_key)) { $condition_string = " WHERE ".array_shift($condition); } else { $new_values = []; From a233ce16588add49b593f60959c7943eecdfed69 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 4 Mar 2018 08:31:05 -0500 Subject: [PATCH 021/227] Create Markdown::toBBCode() method - Create private callback Markdown::diasporaMention2BBCodeCallback --- src/Content/Text/Markdown.php | 80 +++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/src/Content/Text/Markdown.php b/src/Content/Text/Markdown.php index 1d2f68bc7..0e6846ebf 100644 --- a/src/Content/Text/Markdown.php +++ b/src/Content/Text/Markdown.php @@ -7,8 +7,11 @@ namespace Friendica\Content\Text; use Friendica\BaseObject; +use Friendica\Model\Contact; use Michelf\MarkdownExtra; +require_once 'include/html2bbcode.php'; + /** * Friendica-specific usage of Markdown * @@ -36,4 +39,81 @@ class Markdown extends BaseObject return $html; } + + /** + * @brief Callback function to replace a Diaspora style mention in a mention for Friendica + * + * @param array $match Matching values for the callback + * @return string Replaced mention + */ + private static function diasporaMention2BBCodeCallback($match) + { + if ($match[2] == '') { + return; + } + + $data = Contact::getDetailsByAddr($match[2]); + + $name = $match[1]; + + if ($name == '') { + $name = $data['name']; + } + + return '@[url=' . $data['url'] . ']' . $name . '[/url]'; + } + + /* + * we don't want to support a bbcode specific markdown interpreter + * and the markdown library we have is pretty good, but provides HTML output. + * So we'll use that to convert to HTML, then convert the HTML back to bbcode, + * and then clean up a few Diaspora specific constructs. + */ + public static function toBBCode($s) + { + $s = html_entity_decode($s, ENT_COMPAT, 'UTF-8'); + + // Handles single newlines + $s = str_replace("\r\n", "\n", $s); + $s = str_replace("\n", " \n", $s); + $s = str_replace("\r", " \n", $s); + + // Replace lonely stars in lines not starting with it with literal stars + $s = preg_replace('/^([^\*]+)\*([^\*]*)$/im', '$1\*$2', $s); + + // The parser cannot handle paragraphs correctly + $s = str_replace(['

', '

', '

'], ['
', '
', '
'], $s); + + // Escaping the hash tags + $s = preg_replace('/\#([^\s\#])/', '#$1', $s); + + $s = Markdown::convert($s); + + $regexp = "/@\{(?:([^\}]+?); )?([^\} ]+)\}/"; + $s = preg_replace_callback($regexp, ['self', 'diasporaMention2BBCodeCallback'], $s); + + $s = str_replace('#', '#', $s); + + $s = html2bbcode($s); + + // protect the recycle symbol from turning into a tag, but without unescaping angles and naked ampersands + $s = str_replace('♲', html_entity_decode('♲', ENT_QUOTES, 'UTF-8'), $s); + + // Convert everything that looks like a link to a link + $s = preg_replace('/([^\]=]|^)(https?\:\/\/)([a-zA-Z0-9:\/\-?&;.=_~#%$!+,@]+(? Date: Sun, 4 Mar 2018 08:31:40 -0500 Subject: [PATCH 022/227] Replace disapora2bb function content with Markdown::toBBCode call --- include/bb2diaspora.php | 74 +---------------------------------------- 1 file changed, 1 insertion(+), 73 deletions(-) diff --git a/include/bb2diaspora.php b/include/bb2diaspora.php index bea15e3d4..7f942be14 100644 --- a/include/bb2diaspora.php +++ b/include/bb2diaspora.php @@ -13,80 +13,8 @@ use League\HTMLToMarkdown\HtmlConverter; require_once 'include/event.php'; require_once 'include/html2bbcode.php'; -/** - * @brief Callback function to replace a Diaspora style mention in a mention for Friendica - * - * @param array $match Matching values for the callback - * @return string Replaced mention - */ -function diaspora_mention2bb($match) { - if ($match[2] == '') { - return; - } - - $data = Contact::getDetailsByAddr($match[2]); - - $name = $match[1]; - - if ($name == '') { - $name = $data['name']; - } - - return '@[url=' . $data['url'] . ']' . $name . '[/url]'; -} - -/* - * we don't want to support a bbcode specific markdown interpreter - * and the markdown library we have is pretty good, but provides HTML output. - * So we'll use that to convert to HTML, then convert the HTML back to bbcode, - * and then clean up a few Diaspora specific constructs. - */ function diaspora2bb($s) { - - $s = html_entity_decode($s, ENT_COMPAT, 'UTF-8'); - - // Handles single newlines - $s = str_replace("\r\n", "\n", $s); - $s = str_replace("\n", " \n", $s); - $s = str_replace("\r", " \n", $s); - - // Replace lonely stars in lines not starting with it with literal stars - $s = preg_replace('/^([^\*]+)\*([^\*]*)$/im', '$1\*$2', $s); - - // The parser cannot handle paragraphs correctly - $s = str_replace(['

', '

', '

'], ['
', '
', '
'], $s); - - // Escaping the hash tags - $s = preg_replace('/\#([^\s\#])/', '#$1', $s); - - $s = Markdown::convert($s); - - $regexp = "/@\{(?:([^\}]+?); )?([^\} ]+)\}/"; - $s = preg_replace_callback($regexp, 'diaspora_mention2bb', $s); - - $s = str_replace('#', '#', $s); - - $s = html2bbcode($s); - - // protect the recycle symbol from turning into a tag, but without unescaping angles and naked ampersands - $s = str_replace('♲', html_entity_decode('♲', ENT_QUOTES, 'UTF-8'), $s); - - // Convert everything that looks like a link to a link - $s = preg_replace('/([^\]=]|^)(https?\:\/\/)([a-zA-Z0-9:\/\-?&;.=_~#%$!+,@]+(? Date: Sun, 4 Mar 2018 17:34:59 -0500 Subject: [PATCH 023/227] Move bb2diaspora() content to Content\Text\BBCode::toMarkdown - Use self where appropriate - Add BaseObject extension --- include/bb2diaspora.php | 182 +--------------------------------- src/Content/Text/BBCode.php | 168 +++++++++++++++++++++++++++++-- src/Content/Text/Markdown.php | 2 +- 3 files changed, 160 insertions(+), 192 deletions(-) diff --git a/include/bb2diaspora.php b/include/bb2diaspora.php index 7f942be14..932d543db 100644 --- a/include/bb2diaspora.php +++ b/include/bb2diaspora.php @@ -2,191 +2,11 @@ use Friendica\Content\Text\BBCode; use Friendica\Content\Text\Markdown; -use Friendica\Core\Addon; -use Friendica\Core\L10n; -use Friendica\Core\System; -use Friendica\Model\Contact; -use Friendica\Network\Probe; -use Friendica\Util\DateTimeFormat; -use League\HTMLToMarkdown\HtmlConverter; - -require_once 'include/event.php'; -require_once 'include/html2bbcode.php'; function diaspora2bb($s) { return Markdown::toBBCode($s); } -/** - * @brief Callback function to replace a Friendica style mention in a mention for Diaspora - * - * @param array $match Matching values for the callback - * @return string Replaced mention - */ -function diaspora_mentions($match) { - - $contact = Contact::getDetailsByURL($match[3]); - - if (!x($contact, 'addr')) { - $contact = Probe::uri($match[3]); - } - - if (!x($contact, 'addr')) { - return $match[0]; - } - - $mention = '@{' . $match[2] . '; ' . $contact['addr'] . '}'; - return $mention; -} - -/** - * @brief Converts a BBCode text into Markdown - * - * This function converts a BBCode item body to be sent to Markdown-enabled - * systems like Diaspora and Libertree - * - * @param string $Text - * @param bool $fordiaspora Diaspora requires more changes than Libertree - * @return string - */ function bb2diaspora($Text, $fordiaspora = true) { - $a = get_app(); - - $OriginalText = $Text; - - // Since Diaspora is creating a summary for links, this function removes them before posting - if ($fordiaspora) { - $Text = BBCode::removeShareInformation($Text); - } - - /** - * Transform #tags, strip off the [url] and replace spaces with underscore - */ - $URLSearchString = "^\[\]"; - $Text = preg_replace_callback("/#\[url\=([$URLSearchString]*)\](.*?)\[\/url\]/i", - function ($matches) { - return '#' . str_replace(' ', '_', $matches[2]); - } - , $Text); - - // Converting images with size parameters to simple images. Markdown doesn't know it. - $Text = preg_replace("/\[img\=([0-9]*)x([0-9]*)\](.*?)\[\/img\]/ism", '[img]$3[/img]', $Text); - - // Extracting multi-line code blocks before the whitespace processing/code highlighter in BBCode::convert() - $codeblocks = []; - - $Text = preg_replace_callback("#\[code(?:=([^\]]*))?\](.*?)\[\/code\]#is", - function ($matches) use (&$codeblocks) { - $return = $matches[0]; - if (strpos($matches[2], "\n") !== false) { - $return = '#codeblock-' . count($codeblocks) . '#'; - - $prefix = '````' . $matches[1] . PHP_EOL; - $codeblocks[] = $prefix . trim($matches[2]) . PHP_EOL . '````'; - } - return $return; - } - , $Text); - - // Convert it to HTML - don't try oembed - if ($fordiaspora) { - $Text = BBCode::convert($Text, false, 3); - - // Add all tags that maybe were removed - if (preg_match_all("/#\[url\=([$URLSearchString]*)\](.*?)\[\/url\]/ism", $OriginalText, $tags)) { - $tagline = ""; - foreach ($tags[2] as $tag) { - $tag = html_entity_decode($tag, ENT_QUOTES, 'UTF-8'); - if (!strpos(html_entity_decode($Text, ENT_QUOTES, 'UTF-8'), '#' . $tag)) { - $tagline .= '#' . $tag . ' '; - } - } - $Text = $Text." ".$tagline; - } - } else { - $Text = BBCode::convert($Text, false, 4); - } - - // mask some special HTML chars from conversation to markdown - $Text = str_replace(['<', '>', '&'], ['&_lt_;', '&_gt_;', '&_amp_;'], $Text); - - // If a link is followed by a quote then there should be a newline before it - // Maybe we should make this newline at every time before a quote. - $Text = str_replace(["

"], ["
"], $Text); - - $stamp1 = microtime(true); - - // Now convert HTML to Markdown - $converter = new HtmlConverter(); - $Text = $converter->convert($Text); - - // unmask the special chars back to HTML - $Text = str_replace(['&\_lt\_;', '&\_gt\_;', '&\_amp\_;'], ['<', '>', '&'], $Text); - - $a->save_timestamp($stamp1, "parser"); - - // Libertree has a problem with escaped hashtags. - $Text = str_replace(['\#'], ['#'], $Text); - - // Remove any leading or trailing whitespace, as this will mess up - // the Diaspora signature verification and cause the item to disappear - $Text = trim($Text); - - if ($fordiaspora) { - $URLSearchString = "^\[\]"; - $Text = preg_replace_callback("/([@]\[(.*?)\])\(([$URLSearchString]*?)\)/ism", 'diaspora_mentions', $Text); - } - - // Restore code blocks - $Text = preg_replace_callback('/#codeblock-([0-9]+)#/iU', - function ($matches) use ($codeblocks) { - $return = ''; - if (isset($codeblocks[intval($matches[1])])) { - $return = $codeblocks[$matches[1]]; - } - return $return; - } - , $Text); - - Addon::callHooks('bb2diaspora',$Text); - - return $Text; -} - -function unescape_underscores_in_links($m) { - $y = str_replace('\\_', '_', $m[2]); - return('[' . $m[1] . '](' . $y . ')'); -} - -function format_event_diaspora($ev) { - if (! ((is_array($ev)) && count($ev))) { - return ''; - } - - $bd_format = L10n::t('l F d, Y \@ g:i A') ; // Friday January 18, 2011 @ 8 AM - - $o = 'Friendica event notification:' . "\n"; - - $o .= '**' . (($ev['summary']) ? bb2diaspora($ev['summary']) : bb2diaspora($ev['desc'])) . '**' . "\n"; - - // @todo What. Is. Going. On. With. This. Useless. Ternary. Operator? - mrpetovan - $o .= L10n::t('Starts:') . ' ' . '[' . day_translate( - $ev['adjust'] ? DateTimeFormat::utc($ev['start'], $bd_format) : DateTimeFormat::utc($ev['start'], $bd_format) - ) - . '](' . System::baseUrl() . '/localtime/?f=&time=' . urlencode(DateTimeFormat::utc($ev['start'])) . ")\n"; - - if (! $ev['nofinish']) { - $o .= L10n::t('Finishes:') . ' ' . '[' . day_translate( - $ev['adjust'] ? DateTimeFormat::utc($ev['finish'], $bd_format) : DateTimeFormat::utc($ev['finish'], $bd_format) - ) - . '](' . System::baseUrl() . '/localtime/?f=&time=' . urlencode(DateTimeFormat::utc($ev['finish'])) . ")\n"; - } - - if (strlen($ev['location'])) { - $o .= L10n::t('Location:') . bb2diaspora($ev['location']) - . "\n"; - } - - $o .= "\n"; - return $o; + return BBCode::toMarkdown($Text, $fordiaspora); } diff --git a/src/Content/Text/BBCode.php b/src/Content/Text/BBCode.php index 8dd9305ca..9c7dac260 100644 --- a/src/Content/Text/BBCode.php +++ b/src/Content/Text/BBCode.php @@ -1,33 +1,37 @@ %s
', trim(BBCode::convert($data["description"]))); + $return .= sprintf('
%s
', trim(self::convert($data["description"]))); } if ($data["type"] == "link") { @@ -1202,7 +1206,7 @@ class BBCode $text = Cache::get($match[1]); if (is_null($text)) { - $a = get_app(); + $a = self::getApp(); $stamp1 = microtime(true); @@ -1261,7 +1265,7 @@ class BBCode $text = Cache::get($match[1]); if (is_null($text)) { - $a = get_app(); + $a = self::getApp(); $stamp1 = microtime(true); @@ -1285,7 +1289,7 @@ class BBCode $doc = new DOMDocument(); @$doc->loadHTML($body); - $xpath = new DomXPath($doc); + $xpath = new DOMXPath($doc); $list = $xpath->query("//meta[@name]"); foreach ($list as $node) { $attr = []; @@ -1348,7 +1352,7 @@ class BBCode */ public static function convert($text, $try_oembed = true, $simple_html = false, $for_plaintext = false) { - $a = get_app(); + $a = self::getApp(); /* * preg_match_callback function to replace potential Oembed tags with Oembed content @@ -1978,4 +1982,148 @@ class BBCode return $abstract; } + + /** + * @brief Callback function to replace a Friendica style mention in a mention for Diaspora + * + * @param array $match Matching values for the callback + * @return string Replaced mention + */ + private static function bbCodeMention2DiasporaCallback($match) + { + $contact = Contact::getDetailsByURL($match[3]); + + if (empty($contact['addr'])) { + $contact = Probe::uri($match[3]); + } + + if (empty($contact['addr'])) { + return $match[0]; + } + + $mention = '@{' . $match[2] . '; ' . $contact['addr'] . '}'; + return $mention; + } + + /** + * @brief Converts a BBCode text into Markdown + * + * This function converts a BBCode item body to be sent to Markdown-enabled + * systems like Diaspora and Libertree + * + * @param string $text + * @param bool $for_diaspora Diaspora requires more changes than Libertree + * @return string + */ + public static function toMarkdown($text, $for_diaspora = true) + { + $a = self::getApp(); + + $original_text = $text; + + // Since Diaspora is creating a summary for links, this function removes them before posting + if ($for_diaspora) { + $text = self::removeShareInformation($text); + } + + /** + * Transform #tags, strip off the [url] and replace spaces with underscore + */ + $url_search_string = "^\[\]"; + $text = preg_replace_callback("/#\[url\=([$url_search_string]*)\](.*?)\[\/url\]/i", + function ($matches) { + return '#' . str_replace(' ', '_', $matches[2]); + }, + $text + ); + + // Converting images with size parameters to simple images. Markdown doesn't know it. + $text = preg_replace("/\[img\=([0-9]*)x([0-9]*)\](.*?)\[\/img\]/ism", '[img]$3[/img]', $text); + + // Extracting multi-line code blocks before the whitespace processing/code highlighter in self::convert() + $codeblocks = []; + + $text = preg_replace_callback("#\[code(?:=([^\]]*))?\](.*?)\[\/code\]#is", + function ($matches) use (&$codeblocks) { + $return = $matches[0]; + if (strpos($matches[2], "\n") !== false) { + $return = '#codeblock-' . count($codeblocks) . '#'; + + $prefix = '````' . $matches[1] . PHP_EOL; + $codeblocks[] = $prefix . trim($matches[2]) . PHP_EOL . '````'; + } + return $return; + }, + $text + ); + + // Convert it to HTML - don't try oembed + if ($for_diaspora) { + $text = self::convert($text, false, 3); + + // Add all tags that maybe were removed + if (preg_match_all("/#\[url\=([$url_search_string]*)\](.*?)\[\/url\]/ism", $original_text, $tags)) { + $tagline = ""; + foreach ($tags[2] as $tag) { + $tag = html_entity_decode($tag, ENT_QUOTES, 'UTF-8'); + if (!strpos(html_entity_decode($text, ENT_QUOTES, 'UTF-8'), '#' . $tag)) { + $tagline .= '#' . $tag . ' '; + } + } + $text = $text . " " . $tagline; + } + } else { + $text = self::convert($text, false, 4); + } + + // mask some special HTML chars from conversation to markdown + $text = str_replace(['<', '>', '&'], ['&_lt_;', '&_gt_;', '&_amp_;'], $text); + + // If a link is followed by a quote then there should be a newline before it + // Maybe we should make this newline at every time before a quote. + $text = str_replace(["
"], ["
"], $text); + + $stamp1 = microtime(true); + + // Now convert HTML to Markdown + $converter = new HtmlConverter(); + $text = $converter->convert($text); + + // unmask the special chars back to HTML + $text = str_replace(['&\_lt\_;', '&\_gt\_;', '&\_amp\_;'], ['<', '>', '&'], $text); + + $a->save_timestamp($stamp1, "parser"); + + // Libertree has a problem with escaped hashtags. + $text = str_replace(['\#'], ['#'], $text); + + // Remove any leading or trailing whitespace, as this will mess up + // the Diaspora signature verification and cause the item to disappear + $text = trim($text); + + if ($for_diaspora) { + $url_search_string = "^\[\]"; + $text = preg_replace_callback( + "/([@]\[(.*?)\])\(([$url_search_string]*?)\)/ism", + ['self', 'bbCodeMention2DiasporaCallback'], + $text + ); + } + + // Restore code blocks + $text = preg_replace_callback('/#codeblock-([0-9]+)#/iU', + function ($matches) use ($codeblocks) { + $return = ''; + if (isset($codeblocks[intval($matches[1])])) { + $return = $codeblocks[$matches[1]]; + } + return $return; + }, + $text + ); + + Addon::callHooks('bb2diaspora', $text); + + return $text; + } } diff --git a/src/Content/Text/Markdown.php b/src/Content/Text/Markdown.php index 0e6846ebf..e7383a3fd 100644 --- a/src/Content/Text/Markdown.php +++ b/src/Content/Text/Markdown.php @@ -87,7 +87,7 @@ class Markdown extends BaseObject // Escaping the hash tags $s = preg_replace('/\#([^\s\#])/', '#$1', $s); - $s = Markdown::convert($s); + $s = self::convert($s); $regexp = "/@\{(?:([^\}]+?); )?([^\} ]+)\}/"; $s = preg_replace_callback($regexp, ['self', 'diasporaMention2BBCodeCallback'], $s); From 26ea6f69d726a0a9ff87e5db2f42126ec56708f3 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 4 Mar 2018 17:39:41 -0500 Subject: [PATCH 024/227] Update references to bb2diaspora and diaspora2bb --- mod/babel.php | 6 +++--- src/Protocol/Diaspora.php | 30 ++++++++++++++++-------------- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/mod/babel.php b/mod/babel.php index 43b5c4e80..ac2e1342e 100644 --- a/mod/babel.php +++ b/mod/babel.php @@ -49,7 +49,7 @@ function babel_content() $o .= '

' . L10n::t('bbcode => html2bbcode: ') . '

' . EOL . EOL; $o .= visible_lf($bbcode) . EOL . EOL; - $diaspora = bb2diaspora($text); + $diaspora = BBCode::toMarkdown($text); $o .= '

' . L10n::t('bb2diaspora: ') . '

' . EOL . EOL; $o .= visible_lf($diaspora) . EOL . EOL; @@ -57,7 +57,7 @@ function babel_content() $o .= '

' . L10n::t('bb2diaspora => Markdown: ') . '

' . EOL . EOL; $o .= $html . EOL . EOL; - $bbcode = diaspora2bb($diaspora); + $bbcode = Markdown::toBBCode($diaspora); $o .= '

' . L10n::t('bb2diaspora => diaspora2bb: ') . '

' . EOL . EOL; $o .= visible_lf($bbcode) . EOL . EOL; @@ -71,7 +71,7 @@ function babel_content() $o .= '

' . L10n::t("Source input \x28Diaspora format\x29: ") . '

' . EOL . EOL; $o .= '
' . $d2bbtext . '
' . EOL . EOL; - $bb = diaspora2bb($d2bbtext); + $bb = Markdown::toBBCode($d2bbtext); $o .= '

' . L10n::t('diaspora2bb: ') . '

' . EOL . EOL; $o .= '
' . $bb . '
' . EOL . EOL; } diff --git a/src/Protocol/Diaspora.php b/src/Protocol/Diaspora.php index 1578edb92..a2a4f3603 100644 --- a/src/Protocol/Diaspora.php +++ b/src/Protocol/Diaspora.php @@ -7,9 +7,11 @@ * This implementation here interprets the old and the new protocol and sends the new one. * In the future we will remove most stuff from "validPosting" and interpret only the new protocol. */ + namespace Friendica\Protocol; use Friendica\Content\Text\BBCode; +use Friendica\Content\Text\Markdown; use Friendica\Core\Cache; use Friendica\Core\Config; use Friendica\Core\L10n; @@ -1729,7 +1731,7 @@ class Diaspora $datarray["plink"] = self::plink($author, $guid, $parent_item['guid']); - $body = diaspora2bb($text); + $body = Markdown::toBBCode($text); $datarray["body"] = self::replacePeopleGuid($body, $person["url"]); @@ -1796,7 +1798,7 @@ class Diaspora return false; } - $body = diaspora2bb($msg_text); + $body = Markdown::toBBCode($msg_text); $message_uri = $msg_author.":".$msg_guid; $person = self::personByHandle($msg_author); @@ -2130,7 +2132,7 @@ class Diaspora return false; } - $body = diaspora2bb($text); + $body = Markdown::toBBCode($text); $body = self::replacePeopleGuid($body, $person["url"]); @@ -2282,8 +2284,8 @@ class Diaspora $image_url = unxmlify($data->image_url); $birthday = unxmlify($data->birthday); $gender = unxmlify($data->gender); - $about = diaspora2bb(unxmlify($data->bio)); - $location = diaspora2bb(unxmlify($data->location)); + $about = Markdown::toBBCode(unxmlify($data->bio)); + $location = Markdown::toBBCode(unxmlify($data->location)); $searchable = (unxmlify($data->searchable) == "true"); $nsfw = (unxmlify($data->nsfw) == "true"); $tags = unxmlify($data->tag_string); @@ -2660,7 +2662,7 @@ class Diaspora if (self::isReshare($r[0]["body"], true)) { $r = []; } elseif (self::isReshare($r[0]["body"], false) || strstr($r[0]["body"], "[share")) { - $r[0]["body"] = diaspora2bb(bb2diaspora($r[0]["body"])); + $r[0]["body"] = Markdown::toBBCode(BBCode::toMarkdown($r[0]["body"])); $r[0]["body"] = self::replacePeopleGuid($r[0]["body"], $r[0]["author-link"]); @@ -2695,7 +2697,7 @@ class Diaspora if (DBM::is_result($r)) { // If it is a reshared post from another network then reformat to avoid display problems with two share elements if (self::isReshare($r[0]["body"], false)) { - $r[0]["body"] = diaspora2bb(bb2diaspora($r[0]["body"])); + $r[0]["body"] = Markdown::toBBCode(BBCode::toMarkdown($r[0]["body"])); $r[0]["body"] = self::replacePeopleGuid($r[0]["body"], $r[0]["author-link"]); } @@ -2939,7 +2941,7 @@ class Diaspora } } - $body = diaspora2bb($text); + $body = Markdown::toBBCode($text); $datarray = []; @@ -3590,14 +3592,14 @@ class Diaspora $eventdata['end'] = DateTimeFormat::convert($event['finish'], "UTC", $eventdata['timezone'], $mask); } if ($event['summary']) { - $eventdata['summary'] = html_entity_decode(bb2diaspora($event['summary'])); + $eventdata['summary'] = html_entity_decode(BBCode::toMarkdown($event['summary'])); } if ($event['desc']) { - $eventdata['description'] = html_entity_decode(bb2diaspora($event['desc'])); + $eventdata['description'] = html_entity_decode(BBCode::toMarkdown($event['desc'])); } if ($event['location']) { $location = []; - $location["address"] = html_entity_decode(bb2diaspora($event['location'])); + $location["address"] = html_entity_decode(BBCode::toMarkdown($event['location'])); $location["lat"] = 0; $location["lng"] = 0; $eventdata['location'] = $location; @@ -3647,7 +3649,7 @@ class Diaspora $body = $item["body"]; // convert to markdown - $body = html_entity_decode(bb2diaspora($body)); + $body = html_entity_decode(BBCode::toMarkdown($body)); // Adding the title if (strlen($title)) { @@ -3832,7 +3834,7 @@ class Diaspora $parent = $p[0]; - $text = html_entity_decode(bb2diaspora($item["body"])); + $text = html_entity_decode(BBCode::toMarkdown($item["body"])); $created = DateTimeFormat::utc($item["created"], DateTimeFormat::ATOM); $comment = ["author" => self::myHandle($owner), @@ -4068,7 +4070,7 @@ class Diaspora "participants" => $cnv["recips"] ]; - $body = bb2diaspora($item["body"]); + $body = BBCode::toMarkdown($item["body"]); $created = DateTimeFormat::utc($item["created"], DateTimeFormat::ATOM); $msg = [ From bb7f459b47aa6647bedd136da27ee1f47e5c7ee6 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 4 Mar 2018 17:43:41 -0500 Subject: [PATCH 025/227] Remove references to include/bb2diaspora.php --- mod/babel.php | 7 +++---- src/Protocol/Diaspora.php | 1 - 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/mod/babel.php b/mod/babel.php index ac2e1342e..99e6f4078 100644 --- a/mod/babel.php +++ b/mod/babel.php @@ -7,7 +7,6 @@ use Friendica\Content\Text\BBCode; use Friendica\Content\Text\Markdown; use Friendica\Core\L10n; -require_once 'include/bb2diaspora.php'; require_once 'include/html2bbcode.php'; function visible_lf($s) @@ -50,15 +49,15 @@ function babel_content() $o .= visible_lf($bbcode) . EOL . EOL; $diaspora = BBCode::toMarkdown($text); - $o .= '

' . L10n::t('bb2diaspora: ') . '

' . EOL . EOL; + $o .= '

' . L10n::t('BBCode::toMarkdown: ') . '

' . EOL . EOL; $o .= visible_lf($diaspora) . EOL . EOL; $html = Markdown::convert($diaspora); - $o .= '

' . L10n::t('bb2diaspora => Markdown: ') . '

' . EOL . EOL; + $o .= '

' . L10n::t('BBCode::toMarkdown => Markdown::convert: ') . '

' . EOL . EOL; $o .= $html . EOL . EOL; $bbcode = Markdown::toBBCode($diaspora); - $o .= '

' . L10n::t('bb2diaspora => diaspora2bb: ') . '

' . EOL . EOL; + $o .= '

' . L10n::t('BBCode::toMarkdown => Markdown::toBBCode: ') . '

' . EOL . EOL; $o .= visible_lf($bbcode) . EOL . EOL; $bbcode = html2bbcode($html); diff --git a/src/Protocol/Diaspora.php b/src/Protocol/Diaspora.php index a2a4f3603..0055f8d9b 100644 --- a/src/Protocol/Diaspora.php +++ b/src/Protocol/Diaspora.php @@ -36,7 +36,6 @@ use SimpleXMLElement; require_once 'include/dba.php'; require_once 'include/items.php'; -require_once 'include/bb2diaspora.php'; /** * @brief This class contain functions to create and send Diaspora XML files From 6447a45a060d345d8c9b1c2425b7e42305020546 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 4 Mar 2018 17:43:51 -0500 Subject: [PATCH 026/227] Remove include/bb2diaspora.php --- include/bb2diaspora.php | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 include/bb2diaspora.php diff --git a/include/bb2diaspora.php b/include/bb2diaspora.php deleted file mode 100644 index 932d543db..000000000 --- a/include/bb2diaspora.php +++ /dev/null @@ -1,12 +0,0 @@ - Date: Wed, 28 Feb 2018 23:48:09 -0500 Subject: [PATCH 027/227] Add support for Memcached/Improve database cache - Create Cache Driver interface - Update cache table fields - Add CacheSessionHandler --- boot.php | 2 +- src/Core/Cache.php | 210 +++++------------- src/Core/Cache/DatabaseCacheDriver.php | 56 +++++ src/Core/Cache/ICacheDriver.php | 50 +++++ src/Core/Cache/MemcacheCacheDriver.php | 77 +++++++ src/Core/Cache/MemcachedCacheDriver.php | 66 ++++++ src/Core/Session.php | 10 +- ...ionHandler.php => CacheSessionHandler.php} | 35 +-- src/Database/DBStructure.php | 12 +- 9 files changed, 326 insertions(+), 192 deletions(-) create mode 100644 src/Core/Cache/DatabaseCacheDriver.php create mode 100644 src/Core/Cache/ICacheDriver.php create mode 100644 src/Core/Cache/MemcacheCacheDriver.php create mode 100644 src/Core/Cache/MemcachedCacheDriver.php rename src/Core/Session/{MemcacheSessionHandler.php => CacheSessionHandler.php} (65%) diff --git a/boot.php b/boot.php index 4ba8c1ad8..5dc7ce1e9 100644 --- a/boot.php +++ b/boot.php @@ -39,7 +39,7 @@ define('FRIENDICA_PLATFORM', 'Friendica'); define('FRIENDICA_CODENAME', 'Asparagus'); define('FRIENDICA_VERSION', '3.6-dev'); define('DFRN_PROTOCOL_VERSION', '2.23'); -define('DB_UPDATE_VERSION', 1255); +define('DB_UPDATE_VERSION', 1256); define('NEW_UPDATE_ROUTINE_VERSION', 1170); /** diff --git a/src/Core/Cache.php b/src/Core/Cache.php index 5ceb97676..58969f081 100644 --- a/src/Core/Cache.php +++ b/src/Core/Cache.php @@ -4,44 +4,46 @@ */ namespace Friendica\Core; +use Friendica\Core\Cache; use Friendica\Core\Config; -use Friendica\Database\DBM; -use Friendica\Util\DateTimeFormat; -use dba; -use Memcache; - -require_once 'include/dba.php'; /** * @brief Class for storing data for a short time */ class Cache { + const MONTH = 0; + const WEEK = 1; + const DAY = 2; + const HOUR = 3; + const HALF_HOUR = 4; + const QUARTER_HOUR = 5; + const FIVE_MINUTES = 6; + const MINUTE = 7; + /** - * @brief Check for Memcache and open a connection if configured - * - * @return Memcache|boolean The Memcache object - or "false" if not successful + * @var Cache\ICacheDriver */ - public static function memcache() + static $driver = null; + + public static function init() { - if (!class_exists('Memcache', false)) { - return false; + switch(Config::get('system', 'cache_driver', 'database')) { + case 'memcache': + $memcache_host = Config::get('system', 'memcache_host', '127.0.0.1'); + $memcache_port = Config::get('system', 'memcache_port', 11211); + + self::$driver = new Cache\MemcacheCacheDriver($memcache_host, $memcache_port); + break; + case 'memcached': + $memcached_host = Config::get('system', 'memcached_host', '127.0.0.1'); + $memcached_port = Config::get('system', 'memcached_port', 11211); + + self::$driver = new Cache\MemcachedCacheDriver($memcached_host, $memcached_port); + break; + default: + self::$driver = new Cache\DatabaseCacheDriver(); } - - if (!Config::get('system', 'memcache')) { - return false; - } - - $memcache_host = Config::get('system', 'memcache_host', '127.0.0.1'); - $memcache_port = Config::get('system', 'memcache_port', 11211); - - $memcache = new Memcache(); - - if (!$memcache->connect($memcache_host, $memcache_port)) { - return false; - } - - return $memcache; } /** @@ -51,31 +53,31 @@ class Cache * * @return integer The cache duration in seconds */ - private static function duration($level) + public static function duration($level) { switch ($level) { - case CACHE_MONTH: + case self::MONTH: $seconds = 2592000; break; - case CACHE_WEEK: + case self::WEEK: $seconds = 604800; break; - case CACHE_DAY: + case self::DAY: $seconds = 86400; break; - case CACHE_HOUR: + case self::HOUR: $seconds = 3600; break; - case CACHE_HALF_HOUR: + case self::HALF_HOUR: $seconds = 1800; break; - case CACHE_QUARTER_HOUR: + case self::QUARTER_HOUR: $seconds = 900; break; - case CACHE_FIVE_MINUTES: + case self::FIVE_MINUTES: $seconds = 300; break; - case CACHE_MINUTE: + case self::MINUTE: default: $seconds = 60; break; @@ -83,6 +85,20 @@ class Cache return $seconds; } + /** + * Returns the current cache driver + * + * @return Cache\ICacheDriver + */ + private static function getDriver() + { + if (self::$driver === null) { + self::init(); + } + + return self::$driver; + } + /** * @brief Fetch cached data according to the key * @@ -92,40 +108,7 @@ class Cache */ public static function get($key) { - $memcache = self::memcache(); - if (is_object($memcache)) { - // We fetch with the hostname as key to avoid problems with other applications - $cached = $memcache->get(get_app()->get_hostname().":".$key); - $value = @unserialize($cached); - - // Only return a value if the serialized value is valid. - // We also check if the db entry is a serialized - // boolean 'false' value (which we want to return). - if ($cached === serialize(false) || $value !== false) { - return $value; - } - - return null; - } - - // Frequently clear cache - self::clear(); - - $cache = dba::selectFirst('cache', ['v'], ['k' => $key]); - - if (DBM::is_result($cache)) { - $cached = $cache['v']; - $value = @unserialize($cached); - - // Only return a value if the serialized value is valid. - // We also check if the db entry is a serialized - // boolean 'false' value (which we want to return). - if ($cached === serialize(false) || $value !== false) { - return $value; - } - } - - return null; + return self::getDriver()->get($key); } /** @@ -137,20 +120,11 @@ class Cache * @param mixed $value The value that is about to be stored * @param integer $duration The cache lifespan * - * @return void + * @return bool */ - public static function set($key, $value, $duration = CACHE_MONTH) + public static function set($key, $value, $duration = self::MONTH) { - // Do we have an installed memcache? Use it instead. - $memcache = self::memcache(); - if (is_object($memcache)) { - // We store with the hostname as key to avoid problems with other applications - $memcache->set(get_app()->get_hostname().":".$key, serialize($value), MEMCACHE_COMPRESSED, self::duration($duration)); - return; - } - $fields = ['v' => serialize($value), 'expire_mode' => $duration, 'updated' => DateTimeFormat::utcNow()]; - $condition = ['k' => $key]; - dba::update('cache', $fields, $condition, true); + return self::getDriver()->set($key, $value, $duration); } /** @@ -160,76 +134,8 @@ class Cache * * @return void */ - public static function clear($max_level = CACHE_MONTH) + public static function clear() { - // Clear long lasting cache entries only once a day - if (Config::get("system", "cache_cleared_day") < time() - self::duration(CACHE_DAY)) { - if ($max_level == CACHE_MONTH) { - $condition = ["`updated` < ? AND `expire_mode` = ?", - DateTimeFormat::utc("now - 30 days"), - CACHE_MONTH]; - dba::delete('cache', $condition); - } - - if ($max_level <= CACHE_WEEK) { - $condition = ["`updated` < ? AND `expire_mode` = ?", - DateTimeFormat::utc("now - 7 days"), - CACHE_WEEK]; - dba::delete('cache', $condition); - } - - if ($max_level <= CACHE_DAY) { - $condition = ["`updated` < ? AND `expire_mode` = ?", - DateTimeFormat::utc("now - 1 days"), - CACHE_DAY]; - dba::delete('cache', $condition); - } - Config::set("system", "cache_cleared_day", time()); - } - - if (($max_level <= CACHE_HOUR) && (Config::get("system", "cache_cleared_hour")) < time() - self::duration(CACHE_HOUR)) { - $condition = ["`updated` < ? AND `expire_mode` = ?", - DateTimeFormat::utc("now - 1 hours"), - CACHE_HOUR]; - dba::delete('cache', $condition); - - Config::set("system", "cache_cleared_hour", time()); - } - - if (($max_level <= CACHE_HALF_HOUR) && (Config::get("system", "cache_cleared_half_hour")) < time() - self::duration(CACHE_HALF_HOUR)) { - $condition = ["`updated` < ? AND `expire_mode` = ?", - DateTimeFormat::utc("now - 30 minutes"), - CACHE_HALF_HOUR]; - dba::delete('cache', $condition); - - Config::set("system", "cache_cleared_half_hour", time()); - } - - if (($max_level <= CACHE_QUARTER_HOUR) && (Config::get("system", "cache_cleared_quarter_hour")) < time() - self::duration(CACHE_QUARTER_HOUR)) { - $condition = ["`updated` < ? AND `expire_mode` = ?", - DateTimeFormat::utc("now - 15 minutes"), - CACHE_QUARTER_HOUR]; - dba::delete('cache', $condition); - - Config::set("system", "cache_cleared_quarter_hour", time()); - } - - if (($max_level <= CACHE_FIVE_MINUTES) && (Config::get("system", "cache_cleared_five_minute")) < time() - self::duration(CACHE_FIVE_MINUTES)) { - $condition = ["`updated` < ? AND `expire_mode` = ?", - DateTimeFormat::utc("now - 5 minutes"), - CACHE_FIVE_MINUTES]; - dba::delete('cache', $condition); - - Config::set("system", "cache_cleared_five_minute", time()); - } - - if (($max_level <= CACHE_MINUTE) && (Config::get("system", "cache_cleared_minute")) < time() - self::duration(CACHE_MINUTE)) { - $condition = ["`updated` < ? AND `expire_mode` = ?", - DateTimeFormat::utc("now - 1 minutes"), - CACHE_MINUTE]; - dba::delete('cache', $condition); - - Config::set("system", "cache_cleared_minute", time()); - } + return self::getDriver()->clear(); } } diff --git a/src/Core/Cache/DatabaseCacheDriver.php b/src/Core/Cache/DatabaseCacheDriver.php new file mode 100644 index 000000000..0aefc812b --- /dev/null +++ b/src/Core/Cache/DatabaseCacheDriver.php @@ -0,0 +1,56 @@ + + */ +class DatabaseCacheDriver implements ICacheDriver +{ + public function get($key) + { + $cache = dba::selectFirst('cache', ['v'], ['`k` = ? AND `expires` >= NOW()`', $key]); + + if (DBM::is_result($cache)) { + $cached = $cache['v']; + $value = @unserialize($cached); + + // Only return a value if the serialized value is valid. + // We also check if the db entry is a serialized + // boolean 'false' value (which we want to return). + if ($cached === serialize(false) || $value !== false) { + return $value; + } + } + + return null; + } + + public function set($key, $value, $duration = Cache::MONTH) + { + $fields = [ + 'v' => serialize($value), + 'expires' => DateTimeFormat::utc('now + ' . Cache::duration($duration) . ' seconds'), + 'updated' => DateTimeFormat::utcNow() + ]; + + return dba::update('cache', $fields, ['k' => $key], true); + } + + public function delete($key) + { + return dba::delete('cache', ['k' => $key]); + } + + public function clear() + { + return dba::delete('cache', ['`expires` < NOW()']); + } +} diff --git a/src/Core/Cache/ICacheDriver.php b/src/Core/Cache/ICacheDriver.php new file mode 100644 index 000000000..9ed622693 --- /dev/null +++ b/src/Core/Cache/ICacheDriver.php @@ -0,0 +1,50 @@ + + */ +interface ICacheDriver +{ + /** + * Fetches cached data according to the key + * + * @param string $key The key to the cached data + * + * @return mixed Cached $value or "null" if not found + */ + public function get($key); + + /** + * Stores data in the cache identified by the key. The input $value can have multiple formats. + * + * @param string $key The cache key + * @param mixed $value The value to store + * @param integer $duration The cache lifespan, must be one of the Cache constants + * + * @return bool + */ + public function set($key, $value, $duration = Cache::MONTH); + + + /** + * Delete a key from the cache + * + * @param string $key + * + * @return bool + */ + public function delete($key); + + /** + * Remove outdated data from the cache + * + * @return bool + */ + public function clear(); +} diff --git a/src/Core/Cache/MemcacheCacheDriver.php b/src/Core/Cache/MemcacheCacheDriver.php new file mode 100644 index 000000000..03fc075f4 --- /dev/null +++ b/src/Core/Cache/MemcacheCacheDriver.php @@ -0,0 +1,77 @@ + + */ +class MemcacheCacheDriver extends BaseObject implements ICacheDriver +{ + /** + * @var Memcache + */ + private $memcache; + + public function __construct($memcache_host, $memcache_port) + { + if (!class_exists('Memcache', false)) { + throw new \Exception('Memcache class isn\'t available'); + } + + $this->memcache = new \Memcache(); + + if (!$this->memcache->connect($memcache_host, $memcache_port)) { + throw new \Exception('Expected Memcache server at ' . $memcache_host . ':' . $memcache_port . ' isn\'t available'); + } + } + + public function get($key) + { + $return = null; + + // We fetch with the hostname as key to avoid problems with other applications + $cached = $this->memcache->get(self::getApp()->get_hostname() . ':' . $key); + + // @see http://php.net/manual/en/memcache.get.php#84275 + if (is_bool($cached) || is_double($cached) || is_long($cached)) { + return $return; + } + + $value = @unserialize($cached); + + // Only return a value if the serialized value is valid. + // We also check if the db entry is a serialized + // boolean 'false' value (which we want to return). + if ($cached === serialize(false) || $value !== false) { + $return = $value; + } + + return $return; + } + + public function set($key, $value, $duration = Cache::MONTH) + { + // We store with the hostname as key to avoid problems with other applications + return $this->memcache->set( + self::getApp()->get_hostname() . ":" . $key, + serialize($value), + MEMCACHE_COMPRESSED, + Cache::duration($duration) + ); + } + + public function delete($key) + { + return $this->memcache->delete($key); + } + + public function clear() + { + return true; + } +} diff --git a/src/Core/Cache/MemcachedCacheDriver.php b/src/Core/Cache/MemcachedCacheDriver.php new file mode 100644 index 000000000..9101c7919 --- /dev/null +++ b/src/Core/Cache/MemcachedCacheDriver.php @@ -0,0 +1,66 @@ + + */ +class MemcachedCacheDriver extends BaseObject implements ICacheDriver +{ + /** + * @var Memcached + */ + private $memcached; + + public function __construct($memcached_host, $memcached_port) + { + if (!class_exists('Memcached', false)) { + throw new \Exception('Memcached class isn\'t available'); + } + + $this->memcached = new \Memcached(); + + if (!$this->memcached->addServer($memcached_host, $memcached_port)) { + throw new \Exception('Expected Memcached server at ' . $memcached_host . ':' . $memcached_port . ' isn\'t available'); + } + } + + public function get($key) + { + $return = null; + + // We fetch with the hostname as key to avoid problems with other applications + $value = $this->memcached->get(self::getApp()->get_hostname() . ':' . $key); + + if ($this->memcached->getResultCode() === \Memcached::RES_SUCCESS) { + $return = $value; + } + + return $return; + } + + public function set($key, $value, $duration = Cache::MONTH) + { + // We store with the hostname as key to avoid problems with other applications + return $this->memcached->set( + self::getApp()->get_hostname() . ":" . $key, + $value, + Cache::duration($duration) + ); + } + + public function delete($key) + { + return $this->memcached->delete($key); + } + + public function clear() + { + return true; + } +} diff --git a/src/Core/Session.php b/src/Core/Session.php index 20d1e9ef7..b245c675b 100644 --- a/src/Core/Session.php +++ b/src/Core/Session.php @@ -5,8 +5,8 @@ */ namespace Friendica\Core; +use Friendica\Core\Session\CacheSessionHandler; use Friendica\Core\Session\DatabaseSessionHandler; -use Friendica\Core\Session\MemcacheSessionHandler; /** * High-level Session service class @@ -28,10 +28,10 @@ class Session ini_set('session.cookie_secure', 1); } - if (!Config::get('system', 'disable_database_session')) { - $memcache = Cache::memcache(); - if (is_object($memcache)) { - $SessionHandler = new MemcacheSessionHandler($memcache); + $session_handler = Config::get('system', 'session_handler', 'database'); + if ($session_handler != 'native') { + if ($session_handler == 'cache' && Config::get('system', 'cache_driver', 'database') != 'database') { + $SessionHandler = new CacheSessionHandler(); } else { $SessionHandler = new DatabaseSessionHandler(); } diff --git a/src/Core/Session/MemcacheSessionHandler.php b/src/Core/Session/CacheSessionHandler.php similarity index 65% rename from src/Core/Session/MemcacheSessionHandler.php rename to src/Core/Session/CacheSessionHandler.php index 0bc5e8bfe..463fd33d3 100644 --- a/src/Core/Session/MemcacheSessionHandler.php +++ b/src/Core/Session/CacheSessionHandler.php @@ -3,34 +3,20 @@ namespace Friendica\Core\Session; use Friendica\BaseObject; +use Friendica\Core\Cache; use Friendica\Core\Session; use SessionHandlerInterface; -use Memcache; require_once 'boot.php'; require_once 'include/text.php'; /** - * SessionHandler using Memcache + * SessionHandler using Friendica Cache * * @author Hypolite Petovan */ -class MemcacheSessionHandler extends BaseObject implements SessionHandlerInterface +class CacheSessionHandler extends BaseObject implements SessionHandlerInterface { - /** - * @var Memcache - */ - private $memcache = null; - - /** - * - * @param Memcache $memcache - */ - public function __construct(Memcache $memcache) - { - $this->memcache = $memcache; - } - public function open($save_path, $session_name) { return true; @@ -42,8 +28,8 @@ class MemcacheSessionHandler extends BaseObject implements SessionHandlerInterfa return ''; } - $data = $this->memcache->get(self::getApp()->get_hostname() . ":session:" . $session_id); - if (!is_bool($data)) { + $data = Cache::get('session:' . $session_id); + if (!empty($data)) { Session::$exists = true; return $data; } @@ -72,14 +58,7 @@ class MemcacheSessionHandler extends BaseObject implements SessionHandlerInterfa return true; } - $expire = time() + Session::$expire; - - $this->memcache->set( - self::getApp()->get_hostname() . ":session:" . $session_id, - $session_data, - MEMCACHE_COMPRESSED, - $expire - ); + Cache::set('session:' . $session_id, $session_data, Session::$expire); return true; } @@ -91,7 +70,7 @@ class MemcacheSessionHandler extends BaseObject implements SessionHandlerInterfa public function destroy($id) { - $this->memcache->delete(self::getApp()->get_hostname() . ":session:" . $id); + Cache::delete('session:' . $id); return true; } diff --git a/src/Database/DBStructure.php b/src/Database/DBStructure.php index f4a88871d..d2d0bd703 100644 --- a/src/Database/DBStructure.php +++ b/src/Database/DBStructure.php @@ -712,16 +712,16 @@ class DBStructure ] ]; $database["cache"] = [ - "comment" => "Used to store different data that doesn't to be stored for a long time", + "comment" => "Stores temporary data", "fields" => [ - "k" => ["type" => "varbinary(255)", "not null" => "1", "primary" => "1", "comment" => ""], - "v" => ["type" => "mediumtext", "comment" => ""], - "expire_mode" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => ""], - "updated" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => ""], + "k" => ["type" => "varbinary(255)", "not null" => "1", "primary" => "1", "comment" => "cache key"], + "v" => ["type" => "mediumtext", "comment" => "cached serialized value"], + "expires" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => "datetime of cache expiration"], + "updated" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => "datetime of cache insertion"], ], "indexes" => [ "PRIMARY" => ["k"], - "expire_mode_updated" => ["expire_mode", "updated"], + "k_expires" => ["k", "expires"], ] ]; $database["challenge"] = [ From 4b361747a093121e1fb26b03911e2dcc9380487d Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Wed, 28 Feb 2018 23:48:28 -0500 Subject: [PATCH 028/227] Update SQL scripts for cache table --- database.sql | 16 ++++++++-------- friendica_test_data.sql | 31 +++++++++++++++++++++++-------- 2 files changed, 31 insertions(+), 16 deletions(-) diff --git a/database.sql b/database.sql index 4275c3831..7c4acc29f 100644 --- a/database.sql +++ b/database.sql @@ -1,6 +1,6 @@ -- ------------------------------------------ -- Friendica 3.6-dev (Asparagus) --- DB_UPDATE_VERSION 1255 +-- DB_UPDATE_VERSION 1256 -- ------------------------------------------ @@ -55,13 +55,13 @@ CREATE TABLE IF NOT EXISTS `auth_codes` ( -- TABLE cache -- CREATE TABLE IF NOT EXISTS `cache` ( - `k` varbinary(255) NOT NULL COMMENT '', - `v` mediumtext COMMENT '', - `expire_mode` tinyint unsigned NOT NULL DEFAULT 0 COMMENT '', - `updated` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '', - PRIMARY KEY(`k`), - INDEX `expire_mode_updated` (`expire_mode`,`updated`) -) DEFAULT COLLATE utf8mb4_general_ci; + `k` varbinary(255) NOT NULL COMMENT 'cache key', + `v` mediumtext COMMENT 'cached serialized value', + `expires` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'datetime of cache expiration', + `updated` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'datetime of cache insertion', + PRIMARY KEY (`k`), + KEY `k_expires` (`k`,`expires`) USING BTREE +) DEFAULT COLLATE utf8mb4_general_ci COMMENT='Stores temporary data'; -- -- TABLE challenge diff --git a/friendica_test_data.sql b/friendica_test_data.sql index 97d3788d9..019dc4c49 100644 --- a/friendica_test_data.sql +++ b/friendica_test_data.sql @@ -112,13 +112,13 @@ DROP TABLE IF EXISTS `cache`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `cache` ( - `k` varbinary(255) NOT NULL, - `v` mediumtext, - `expire_mode` int(11) NOT NULL DEFAULT '0', - `updated` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', + `k` varbinary(255) NOT NULL COMMENT 'cache key', + `v` mediumtext COMMENT 'cached serialized value', + `expires` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'datetime of cache expiration', + `updated` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'datetime of cache insertion', PRIMARY KEY (`k`), - KEY `expire_mode_updated` (`expire_mode`,`updated`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + KEY `k_expires` (`k`,`expires`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Used to store different data that doesn''t to be stored for a long time'; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -127,7 +127,22 @@ CREATE TABLE `cache` ( LOCK TABLES `cache` WRITE; /*!40000 ALTER TABLE `cache` DISABLE KEYS */; -INSERT INTO `cache` VALUES ('about::http://friendica.dev/profile/friendica1','s:0:\"\";',0,'2017-09-07 09:09:50'),('about::http://friendica.dev/profile/friendica2','s:0:\"\";',0,'2017-09-07 09:09:50'),('about::http://friendica.dev/profile/friendica4','s:0:\"\";',0,'2017-09-07 09:13:25'),('app:proc_run:started','i:1504775968;',7,'2017-09-07 09:19:28'),('diaspora:construct_comment:758d682b1059b10ee096f38798595234','a:6:{s:6:\"author\";s:24:\"friendica3@friendica.dev\";s:4:\"guid\";s:32:\"758d682b1059b10ee096f38798595234\";s:10:\"created_at\";s:20:\"2017-09-07T09:18:24Z\";s:11:\"parent_guid\";s:32:\"758d682b1859b10ebd6abab685903735\";s:4:\"text\";s:5:\"Cool!\";s:16:\"author_signature\";s:0:\"\";}',5,'2017-09-07 09:18:24'),('diaspora:construct_comment:758d682b2059b10f204f9c2684001373','a:6:{s:6:\"author\";s:24:\"friendica2@friendica.dev\";s:4:\"guid\";s:32:\"758d682b2059b10f204f9c2684001373\";s:10:\"created_at\";s:20:\"2017-09-07T09:19:28Z\";s:11:\"parent_guid\";s:32:\"758d682b1459b10f0be17c3206121357\";s:4:\"text\";s:4:\"Yay!\";s:16:\"author_signature\";s:0:\"\";}',5,'2017-09-07 09:19:28'),('probe_url::friendica2@friendica.dev','a:21:{s:4:\"name\";s:10:\"friendica2\";s:4:\"nick\";s:10:\"friendica2\";s:4:\"guid\";s:32:\"758d682b1359b10a3a54a8c301503194\";s:3:\"url\";s:39:\"http://friendica.dev/profile/friendica2\";s:4:\"addr\";s:24:\"friendica2@friendica.dev\";s:5:\"alias\";s:0:\"\";s:5:\"photo\";s:40:\"http://friendica.dev/photo/profile/3.jpg\";s:9:\"community\";s:0:\"\";s:8:\"keywords\";s:0:\"\";s:8:\"location\";s:0:\"\";s:5:\"about\";s:0:\"\";s:5:\"batch\";s:0:\"\";s:6:\"notify\";s:43:\"http://friendica.dev/dfrn_notify/friendica2\";s:4:\"poll\";s:41:\"http://friendica.dev/dfrn_poll/friendica2\";s:7:\"request\";s:44:\"http://friendica.dev/dfrn_request/friendica2\";s:7:\"confirm\";s:44:\"http://friendica.dev/dfrn_confirm/friendica2\";s:4:\"poco\";s:36:\"http://friendica.dev/poco/friendica2\";s:8:\"priority\";i:0;s:7:\"network\";s:4:\"dfrn\";s:6:\"pubkey\";s:800:\"-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzOHCS/TBWB72tguU5RWu\nG4KnESmdXWGSHHrCm0iWP88Xl17lkEw58o4yt+bQS3c8U46OwP8z9EyCxFyDyHPU\noVgii+jMmT4hhKw5TeDPWwHSUZM07OP2d0J0Kktr6wC16DfGLWqo+EnJcLxyjFGn\nV6KzYR2d/73m0bj26QWM4w2ZCfBZvEEZsreF0XsZuBOWVRlTB4GzDlsRwRt05kUi\nevFnrth0fq+aeEnZA/8eFY9X8F1LB+mZLRdmWX77pMDtzzxTJUBoQPCkOJ0BvdXi\nyAYybmcxFzR/x1u+kpsgxeDOOPDAQAPnbBQcNNwWtl+emd8wmqXcbmM3XeIa1HPb\nDi0CHXJ5Lr95JYP2brAZu4dEwUNeTzkVkvB8DlviOSFmlg6CWmSKXdaF8trK6j4d\nlv7nxGBvmrbx1CmeA3RblvHR1aRyoQdNhBh1eLJrkDcaTgtzhycrjqdz+vVVV/xi\n4yMY9x+voxENfurEo/XsbzGfPSigTIHImzBcMtG0RTgxTMke6CoqRZW1pXFxZast\ncpsO02JRdPrXt+DHpYzDf8oEMTa4TNKBvczcT8ar82RZYY0srVV0uxH77xhx1bvm\nVAPf40FA2qbHZzCAv64YU9LdIT4iPEUga+Y5m9t2LvS+RiA8Zw/mmOdMFp4hI6+K\nELuO8hQc3Ot0moqfpYCnSl0CAwEAAQ==\n-----END PUBLIC KEY-----\n\";s:7:\"baseurl\";s:20:\"http://friendica.dev\";}',2,'2017-09-07 09:03:39'),('probe_url::friendica3@friendica.dev','a:21:{s:4:\"name\";s:10:\"friendica3\";s:4:\"nick\";s:10:\"friendica3\";s:4:\"guid\";s:32:\"758d682b1359b10a642ef08222820194\";s:3:\"url\";s:39:\"http://friendica.dev/profile/friendica3\";s:4:\"addr\";s:24:\"friendica3@friendica.dev\";s:5:\"alias\";s:0:\"\";s:5:\"photo\";s:40:\"http://friendica.dev/photo/profile/4.jpg\";s:9:\"community\";s:0:\"\";s:8:\"keywords\";s:0:\"\";s:8:\"location\";s:0:\"\";s:5:\"about\";s:0:\"\";s:5:\"batch\";s:0:\"\";s:6:\"notify\";s:43:\"http://friendica.dev/dfrn_notify/friendica3\";s:4:\"poll\";s:41:\"http://friendica.dev/dfrn_poll/friendica3\";s:7:\"request\";s:44:\"http://friendica.dev/dfrn_request/friendica3\";s:7:\"confirm\";s:44:\"http://friendica.dev/dfrn_confirm/friendica3\";s:4:\"poco\";s:36:\"http://friendica.dev/poco/friendica3\";s:8:\"priority\";i:0;s:7:\"network\";s:4:\"dfrn\";s:6:\"pubkey\";s:800:\"-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAwIuhjeg03GoOuSYqulsa\nvd/spvniwjaYZhCJYTHgOM4ak9qG8SwPhguSBMqZS3baHEcZtYcYsu5vSQAO/zCB\niK8yefV8LguBhoNw36p/hoQ4TdApOH3cjKAJoaxZSJw0oa50ebCSbh23chRHESbv\nlvfGXq0Pmk060VcLf6h00Iivg/BFNmDfEqrVmgpl0G1PIOatNJ5QdEpCP0E5Bg/H\nvnqvBgpkVAZkKA4xY5rw6pB2NofK74gaeNklnVFqAwaQZUrBv+z1C7h3NQ5YRees\nuspiwZVyFy95xm+kGlKq6GJ7WPQi1mKSJisHLxh9uI7ylgIyRWi/GRA2NBLb15tJ\nL9PpyWEbKhEX/zCUQbos6cFC3+jgiJoYIIa5pOYU0Ekf5AcyF3dFsbcWGObn++wv\nk+5dIK/un+1KOv7X3e/bAnkVCHHjzWAzURQkvb0fwFVzw80ioP4L4V+mvw4jxh+x\ndpPBQmqgCglqE2cpCB4gAcYPlXICBC18YcUYOkYIlgz2WuslcJCnrHO6K5q6lAn3\nNqEI/LmJDrq3hbu96k8d/0zCMNO+u3xPIhDcQ6ZzyhZmVDTpVGFiJ7Yhtfih3ASC\nZqWowoSq5onVWLCsj4QquNCIvJK1NLrkrr6rxD4DbCzW7XbZkenuHumh3HoFb5Lc\nRN6UJNHe/4FNNUzcAVBgEe0CAwEAAQ==\n-----END PUBLIC KEY-----\n\";s:7:\"baseurl\";s:20:\"http://friendica.dev\";}',2,'2017-09-07 09:04:34'),('probe_url::friendica4@friendica.dev','a:21:{s:4:\"name\";s:10:\"friendica4\";s:4:\"nick\";s:10:\"friendica4\";s:4:\"guid\";s:32:\"758d682b1359b10a89ad697631454583\";s:3:\"url\";s:39:\"http://friendica.dev/profile/friendica4\";s:4:\"addr\";s:24:\"friendica4@friendica.dev\";s:5:\"alias\";s:0:\"\";s:5:\"photo\";s:40:\"http://friendica.dev/photo/profile/5.jpg\";s:9:\"community\";s:0:\"\";s:8:\"keywords\";s:0:\"\";s:8:\"location\";s:0:\"\";s:5:\"about\";s:0:\"\";s:5:\"batch\";s:0:\"\";s:6:\"notify\";s:43:\"http://friendica.dev/dfrn_notify/friendica4\";s:4:\"poll\";s:41:\"http://friendica.dev/dfrn_poll/friendica4\";s:7:\"request\";s:44:\"http://friendica.dev/dfrn_request/friendica4\";s:7:\"confirm\";s:44:\"http://friendica.dev/dfrn_confirm/friendica4\";s:4:\"poco\";s:36:\"http://friendica.dev/poco/friendica4\";s:8:\"priority\";i:0;s:7:\"network\";s:4:\"dfrn\";s:6:\"pubkey\";s:800:\"-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxAJ+t/FrD0sHO2ecwsoH\nmOst2aPHca5n4UEIpr2ZTl26WN1AbcNo9wahDHXG7pE50GQwvmnnTIlVDLAsBC23\n8sTSpGXrIC8L7YiyDeu3piBp/w4jy8JQrbXn4L8IQbnmi6nDCSr1szXjBcvdPPKK\nrCFgYJ4hjEkSp/wJcKZ1mlRTwtofWZHUMu3NsP2146wRj0roydFVkWGrfsH8grUO\nqMktmpCUOQNsOIAN8b6vQiYQQoamGWjV8wXO3W0fRhQ5Yjko19j1t+O1Jvy2CMhn\nRY2wiGZ91ZSfl8VNLrz38JyeR0cz7YJeNYzOggB1AjEzLhKtqw7zkyW8Qg1Kfo85\ndagFPZ5sQZ8R4nus7xabICMG/qJPL23/1tyenxqkVP0iDIhLo/f0uuG4riNOJZtf\nPYPT6sxSlqxbznuLQr1fYnjFyEnFtJpzuAuvybshT5QLyKntcGap67fWoj/7SrA4\n8T5RCdYHDacMdKEC1SDwpokpgWhWaRkUxJ5F0Q5Jpyvhui/UkxkevDWv5373pgVz\ngaZlxRKYKABWiJkQH9FPAdsr4nUVErl/zvI0+9GuzK/EJ5ToVs8bF98Jb4Y3o2pm\nNtPL1ao9r0ug/3F7RHTLs1tp0Bdm/Gxk/RJf4j6gKgAw9WcdHzkxcvikhAY43zMe\n5qExQo663i3hzw4v3p94i+sCAwEAAQ==\n-----END PUBLIC KEY-----\n\";s:7:\"baseurl\";s:20:\"http://friendica.dev\";}',2,'2017-09-07 09:04:51'),('probe_url::friendica5@friendica.dev','a:21:{s:4:\"name\";s:10:\"friendica5\";s:4:\"nick\";s:10:\"friendica5\";s:4:\"guid\";s:32:\"758d682b1959b10ab0768ff699049903\";s:3:\"url\";s:39:\"http://friendica.dev/profile/friendica5\";s:4:\"addr\";s:24:\"friendica5@friendica.dev\";s:5:\"alias\";s:0:\"\";s:5:\"photo\";s:40:\"http://friendica.dev/photo/profile/6.jpg\";s:9:\"community\";s:0:\"\";s:8:\"keywords\";s:0:\"\";s:8:\"location\";s:0:\"\";s:5:\"about\";s:0:\"\";s:5:\"batch\";s:0:\"\";s:6:\"notify\";s:43:\"http://friendica.dev/dfrn_notify/friendica5\";s:4:\"poll\";s:41:\"http://friendica.dev/dfrn_poll/friendica5\";s:7:\"request\";s:44:\"http://friendica.dev/dfrn_request/friendica5\";s:7:\"confirm\";s:44:\"http://friendica.dev/dfrn_confirm/friendica5\";s:4:\"poco\";s:36:\"http://friendica.dev/poco/friendica5\";s:8:\"priority\";i:0;s:7:\"network\";s:4:\"dfrn\";s:6:\"pubkey\";s:800:\"-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAmtBUbN/07wWbcUvp9QvR\nKLoM+WjC0K0rFsx6L/Mktk6Go5+DqofuHSQgfJZGBI3vbTlbwW76peX/0aqiZPGF\nrrhX1FMhU23AxYE9TixRR+oqIKETNzU8NuahpK/ZBokoPL7mzrY4o5dNcnG4S57O\nir4VfEpuYB99K7Uo4yVc6a50ZQfDoBy6nnCPbVmh+gokc28paK7Av0vnMwwD6TWQ\nrgXyrPsa+Af5YeDC7GOmhppeN+e5zycRTddfXWR8QFp+he43b7z54pB+ajAu3J+C\nTAagIp5UWrBmwclF2gmLWvyYYpwTF3kNz+Waf0s3khiZXcJZKxGKVqXoTkqEKV/i\nvHryaBlvvAkQKR1mfJpNasJfHrqhOlHigWi3ISlPJQB4h+85W+YAXj+3j26OnMpb\nCmjf0BXLnjuC+w9rXFW/kj3Q1PxNaAfx/BoV62unWBKnZAkkzHOkQ5yyATdXQaEY\nlDsFbc0itSm3zjsPa1gXtn9e9z8Mqn5MwKk5I9k7TIr6/FdgbX7gxl6mn59OQ0v+\ne8o7HECSQvT8c+WmvBk3tjQHDgw3FeiJ54w0IGiha530vPCk5Z840d/jVUL7Qc6j\nrNi7hLOBvx4jdxk+5tq6fZMG4Sbu+Iibc4b+f2QyVW7Pcxt3CM/ADh0kzfGJ7wQd\nzl4w/9+s8DPT43Tbn98QK+MCAwEAAQ==\n-----END PUBLIC KEY-----\n\";s:7:\"baseurl\";s:20:\"http://friendica.dev\";}',2,'2017-09-07 09:05:05'),('probe_url::http://friendica.dev/profile/friendica1','a:21:{s:4:\"name\";s:10:\"friendica1\";s:4:\"nick\";s:10:\"friendica1\";s:4:\"guid\";s:32:\"758d682b8559b109d5ad831494500945\";s:3:\"url\";s:39:\"http://friendica.dev/profile/friendica1\";s:4:\"addr\";s:24:\"friendica1@friendica.dev\";s:5:\"alias\";s:0:\"\";s:5:\"photo\";s:40:\"http://friendica.dev/photo/profile/2.jpg\";s:9:\"community\";s:0:\"\";s:8:\"keywords\";s:0:\"\";s:8:\"location\";s:0:\"\";s:5:\"about\";s:0:\"\";s:5:\"batch\";s:0:\"\";s:6:\"notify\";s:43:\"http://friendica.dev/dfrn_notify/friendica1\";s:4:\"poll\";s:41:\"http://friendica.dev/dfrn_poll/friendica1\";s:7:\"request\";s:44:\"http://friendica.dev/dfrn_request/friendica1\";s:7:\"confirm\";s:44:\"http://friendica.dev/dfrn_confirm/friendica1\";s:4:\"poco\";s:36:\"http://friendica.dev/poco/friendica1\";s:8:\"priority\";i:0;s:7:\"network\";s:4:\"dfrn\";s:6:\"pubkey\";s:800:\"-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzNeTX2GGZAqTecUeOPNq\n+uFCfBuN4g6xKTkBlUDeVCLp2N3uVJq+TSjmoau8MpY3jCD2Nqn5KsMPh8XJV2s6\nb1kSjmVdpr4EeBXPyvi3asCcgmqi2IeoK/ihVGP9IrrYh8zwzVY9wW1/TPcC4N4W\nCcmeFTO08CSJh2P8ROq6irU0ndbmqfmFSs5uZ7UcEKUzkgSSPTxq5x3O7xSfTbOZ\nPNhSn3r5buSOd46KyWaBIJ2KgFNoY2AGJqbzZTZmJZB/qelrONtJ6XDnDI9GNQBI\nyL9935Scmo9WrXeZcqXNW3yI97s1tH27pCxhsyy5xqzEYfAPwPFry4gbO+wSGcNm\nFYfbCM19uPvJyN6TEgFNZD5401Pl8LQaVkSAnV9LQPzn/54CJYQb6KlE0rymROyQ\nvKPUZmEkw6ZnVJIF5pjxu6bGGPdv3xmBH6Xnmi0hhNA2AEDbv6wDrLZYLUCTSSqq\nhW8WK3HylsP9dqNT+a3X9l9dG7vqmRevGcbBQDDZPOKjkJkAa8IgIlk3UIWs3bYY\nST0VUtjRpsoLo3XmdYtY5qXxjGjtEy7NjRErlT31WoMzxcLhLwxKGWQz/xMC9OXe\np+uoyVUOd3U/Jvz6vpW9k5ua417IrF9XaxtcKvhp69m16br8JkMuKWvdGomWDXxA\nG1cAbsHJN6JJEU/3Vo35sh0CAwEAAQ==\n-----END PUBLIC KEY-----\n\";s:7:\"baseurl\";s:20:\"http://friendica.dev\";}',2,'2017-09-07 09:02:28'),('probe_url::http://friendica.dev/profile/friendica2','a:21:{s:4:\"name\";s:10:\"friendica2\";s:4:\"nick\";s:10:\"friendica2\";s:4:\"guid\";s:32:\"758d682b1359b10a3a54a8c301503194\";s:3:\"url\";s:39:\"http://friendica.dev/profile/friendica2\";s:4:\"addr\";s:24:\"friendica2@friendica.dev\";s:5:\"alias\";s:0:\"\";s:5:\"photo\";s:40:\"http://friendica.dev/photo/profile/3.jpg\";s:9:\"community\";s:0:\"\";s:8:\"keywords\";s:0:\"\";s:8:\"location\";s:0:\"\";s:5:\"about\";s:0:\"\";s:5:\"batch\";s:0:\"\";s:6:\"notify\";s:43:\"http://friendica.dev/dfrn_notify/friendica2\";s:4:\"poll\";s:41:\"http://friendica.dev/dfrn_poll/friendica2\";s:7:\"request\";s:44:\"http://friendica.dev/dfrn_request/friendica2\";s:7:\"confirm\";s:44:\"http://friendica.dev/dfrn_confirm/friendica2\";s:4:\"poco\";s:36:\"http://friendica.dev/poco/friendica2\";s:8:\"priority\";i:0;s:7:\"network\";s:4:\"dfrn\";s:6:\"pubkey\";s:800:\"-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzOHCS/TBWB72tguU5RWu\nG4KnESmdXWGSHHrCm0iWP88Xl17lkEw58o4yt+bQS3c8U46OwP8z9EyCxFyDyHPU\noVgii+jMmT4hhKw5TeDPWwHSUZM07OP2d0J0Kktr6wC16DfGLWqo+EnJcLxyjFGn\nV6KzYR2d/73m0bj26QWM4w2ZCfBZvEEZsreF0XsZuBOWVRlTB4GzDlsRwRt05kUi\nevFnrth0fq+aeEnZA/8eFY9X8F1LB+mZLRdmWX77pMDtzzxTJUBoQPCkOJ0BvdXi\nyAYybmcxFzR/x1u+kpsgxeDOOPDAQAPnbBQcNNwWtl+emd8wmqXcbmM3XeIa1HPb\nDi0CHXJ5Lr95JYP2brAZu4dEwUNeTzkVkvB8DlviOSFmlg6CWmSKXdaF8trK6j4d\nlv7nxGBvmrbx1CmeA3RblvHR1aRyoQdNhBh1eLJrkDcaTgtzhycrjqdz+vVVV/xi\n4yMY9x+voxENfurEo/XsbzGfPSigTIHImzBcMtG0RTgxTMke6CoqRZW1pXFxZast\ncpsO02JRdPrXt+DHpYzDf8oEMTa4TNKBvczcT8ar82RZYY0srVV0uxH77xhx1bvm\nVAPf40FA2qbHZzCAv64YU9LdIT4iPEUga+Y5m9t2LvS+RiA8Zw/mmOdMFp4hI6+K\nELuO8hQc3Ot0moqfpYCnSl0CAwEAAQ==\n-----END PUBLIC KEY-----\n\";s:7:\"baseurl\";s:20:\"http://friendica.dev\";}',2,'2017-09-07 09:06:02'),('probe_url::http://friendica.dev/profile/friendica3','a:21:{s:4:\"name\";s:10:\"friendica3\";s:4:\"nick\";s:10:\"friendica3\";s:4:\"guid\";s:32:\"758d682b1359b10a642ef08222820194\";s:3:\"url\";s:39:\"http://friendica.dev/profile/friendica3\";s:4:\"addr\";s:24:\"friendica3@friendica.dev\";s:5:\"alias\";s:0:\"\";s:5:\"photo\";s:40:\"http://friendica.dev/photo/profile/4.jpg\";s:9:\"community\";s:0:\"\";s:8:\"keywords\";s:0:\"\";s:8:\"location\";s:0:\"\";s:5:\"about\";s:0:\"\";s:5:\"batch\";s:0:\"\";s:6:\"notify\";s:43:\"http://friendica.dev/dfrn_notify/friendica3\";s:4:\"poll\";s:41:\"http://friendica.dev/dfrn_poll/friendica3\";s:7:\"request\";s:44:\"http://friendica.dev/dfrn_request/friendica3\";s:7:\"confirm\";s:44:\"http://friendica.dev/dfrn_confirm/friendica3\";s:4:\"poco\";s:36:\"http://friendica.dev/poco/friendica3\";s:8:\"priority\";i:0;s:7:\"network\";s:4:\"dfrn\";s:6:\"pubkey\";s:800:\"-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAwIuhjeg03GoOuSYqulsa\nvd/spvniwjaYZhCJYTHgOM4ak9qG8SwPhguSBMqZS3baHEcZtYcYsu5vSQAO/zCB\niK8yefV8LguBhoNw36p/hoQ4TdApOH3cjKAJoaxZSJw0oa50ebCSbh23chRHESbv\nlvfGXq0Pmk060VcLf6h00Iivg/BFNmDfEqrVmgpl0G1PIOatNJ5QdEpCP0E5Bg/H\nvnqvBgpkVAZkKA4xY5rw6pB2NofK74gaeNklnVFqAwaQZUrBv+z1C7h3NQ5YRees\nuspiwZVyFy95xm+kGlKq6GJ7WPQi1mKSJisHLxh9uI7ylgIyRWi/GRA2NBLb15tJ\nL9PpyWEbKhEX/zCUQbos6cFC3+jgiJoYIIa5pOYU0Ekf5AcyF3dFsbcWGObn++wv\nk+5dIK/un+1KOv7X3e/bAnkVCHHjzWAzURQkvb0fwFVzw80ioP4L4V+mvw4jxh+x\ndpPBQmqgCglqE2cpCB4gAcYPlXICBC18YcUYOkYIlgz2WuslcJCnrHO6K5q6lAn3\nNqEI/LmJDrq3hbu96k8d/0zCMNO+u3xPIhDcQ6ZzyhZmVDTpVGFiJ7Yhtfih3ASC\nZqWowoSq5onVWLCsj4QquNCIvJK1NLrkrr6rxD4DbCzW7XbZkenuHumh3HoFb5Lc\nRN6UJNHe/4FNNUzcAVBgEe0CAwEAAQ==\n-----END PUBLIC KEY-----\n\";s:7:\"baseurl\";s:20:\"http://friendica.dev\";}',2,'2017-09-07 09:09:50'),('probe_url::http://friendica.dev/profile/friendica4','a:21:{s:4:\"name\";s:10:\"friendica4\";s:4:\"nick\";s:10:\"friendica4\";s:4:\"guid\";s:32:\"758d682b1359b10a89ad697631454583\";s:3:\"url\";s:39:\"http://friendica.dev/profile/friendica4\";s:4:\"addr\";s:24:\"friendica4@friendica.dev\";s:5:\"alias\";s:0:\"\";s:5:\"photo\";s:40:\"http://friendica.dev/photo/profile/5.jpg\";s:9:\"community\";s:0:\"\";s:8:\"keywords\";s:0:\"\";s:8:\"location\";s:0:\"\";s:5:\"about\";s:0:\"\";s:5:\"batch\";s:0:\"\";s:6:\"notify\";s:43:\"http://friendica.dev/dfrn_notify/friendica4\";s:4:\"poll\";s:41:\"http://friendica.dev/dfrn_poll/friendica4\";s:7:\"request\";s:44:\"http://friendica.dev/dfrn_request/friendica4\";s:7:\"confirm\";s:44:\"http://friendica.dev/dfrn_confirm/friendica4\";s:4:\"poco\";s:36:\"http://friendica.dev/poco/friendica4\";s:8:\"priority\";i:0;s:7:\"network\";s:4:\"dfrn\";s:6:\"pubkey\";s:800:\"-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxAJ+t/FrD0sHO2ecwsoH\nmOst2aPHca5n4UEIpr2ZTl26WN1AbcNo9wahDHXG7pE50GQwvmnnTIlVDLAsBC23\n8sTSpGXrIC8L7YiyDeu3piBp/w4jy8JQrbXn4L8IQbnmi6nDCSr1szXjBcvdPPKK\nrCFgYJ4hjEkSp/wJcKZ1mlRTwtofWZHUMu3NsP2146wRj0roydFVkWGrfsH8grUO\nqMktmpCUOQNsOIAN8b6vQiYQQoamGWjV8wXO3W0fRhQ5Yjko19j1t+O1Jvy2CMhn\nRY2wiGZ91ZSfl8VNLrz38JyeR0cz7YJeNYzOggB1AjEzLhKtqw7zkyW8Qg1Kfo85\ndagFPZ5sQZ8R4nus7xabICMG/qJPL23/1tyenxqkVP0iDIhLo/f0uuG4riNOJZtf\nPYPT6sxSlqxbznuLQr1fYnjFyEnFtJpzuAuvybshT5QLyKntcGap67fWoj/7SrA4\n8T5RCdYHDacMdKEC1SDwpokpgWhWaRkUxJ5F0Q5Jpyvhui/UkxkevDWv5373pgVz\ngaZlxRKYKABWiJkQH9FPAdsr4nUVErl/zvI0+9GuzK/EJ5ToVs8bF98Jb4Y3o2pm\nNtPL1ao9r0ug/3F7RHTLs1tp0Bdm/Gxk/RJf4j6gKgAw9WcdHzkxcvikhAY43zMe\n5qExQo663i3hzw4v3p94i+sCAwEAAQ==\n-----END PUBLIC KEY-----\n\";s:7:\"baseurl\";s:20:\"http://friendica.dev\";}',2,'2017-09-07 09:11:41'),('probe_url::http://friendica.dev/profile/friendica5','a:21:{s:4:\"name\";s:10:\"friendica5\";s:4:\"nick\";s:10:\"friendica5\";s:4:\"guid\";s:32:\"758d682b1959b10ab0768ff699049903\";s:3:\"url\";s:39:\"http://friendica.dev/profile/friendica5\";s:4:\"addr\";s:24:\"friendica5@friendica.dev\";s:5:\"alias\";s:0:\"\";s:5:\"photo\";s:40:\"http://friendica.dev/photo/profile/6.jpg\";s:9:\"community\";s:0:\"\";s:8:\"keywords\";s:0:\"\";s:8:\"location\";s:0:\"\";s:5:\"about\";s:0:\"\";s:5:\"batch\";s:0:\"\";s:6:\"notify\";s:43:\"http://friendica.dev/dfrn_notify/friendica5\";s:4:\"poll\";s:41:\"http://friendica.dev/dfrn_poll/friendica5\";s:7:\"request\";s:44:\"http://friendica.dev/dfrn_request/friendica5\";s:7:\"confirm\";s:44:\"http://friendica.dev/dfrn_confirm/friendica5\";s:4:\"poco\";s:36:\"http://friendica.dev/poco/friendica5\";s:8:\"priority\";i:0;s:7:\"network\";s:4:\"dfrn\";s:6:\"pubkey\";s:800:\"-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAmtBUbN/07wWbcUvp9QvR\nKLoM+WjC0K0rFsx6L/Mktk6Go5+DqofuHSQgfJZGBI3vbTlbwW76peX/0aqiZPGF\nrrhX1FMhU23AxYE9TixRR+oqIKETNzU8NuahpK/ZBokoPL7mzrY4o5dNcnG4S57O\nir4VfEpuYB99K7Uo4yVc6a50ZQfDoBy6nnCPbVmh+gokc28paK7Av0vnMwwD6TWQ\nrgXyrPsa+Af5YeDC7GOmhppeN+e5zycRTddfXWR8QFp+he43b7z54pB+ajAu3J+C\nTAagIp5UWrBmwclF2gmLWvyYYpwTF3kNz+Waf0s3khiZXcJZKxGKVqXoTkqEKV/i\nvHryaBlvvAkQKR1mfJpNasJfHrqhOlHigWi3ISlPJQB4h+85W+YAXj+3j26OnMpb\nCmjf0BXLnjuC+w9rXFW/kj3Q1PxNaAfx/BoV62unWBKnZAkkzHOkQ5yyATdXQaEY\nlDsFbc0itSm3zjsPa1gXtn9e9z8Mqn5MwKk5I9k7TIr6/FdgbX7gxl6mn59OQ0v+\ne8o7HECSQvT8c+WmvBk3tjQHDgw3FeiJ54w0IGiha530vPCk5Z840d/jVUL7Qc6j\nrNi7hLOBvx4jdxk+5tq6fZMG4Sbu+Iibc4b+f2QyVW7Pcxt3CM/ADh0kzfGJ7wQd\nzl4w/9+s8DPT43Tbn98QK+MCAwEAAQ==\n-----END PUBLIC KEY-----\n\";s:7:\"baseurl\";s:20:\"http://friendica.dev\";}',2,'2017-09-07 09:13:25'); +INSERT INTO `cache` VALUES +('about::http://friendica.dev/profile/friendica1','s:0:\"\";',DATE_ADD(NOW(), INTERVAL 2 MONTH), +('about::http://friendica.dev/profile/friendica2','s:0:\"\";',DATE_ADD(NOW(), INTERVAL 2 MONTH)), +('about::http://friendica.dev/profile/friendica4','s:0:\"\";',DATE_ADD(NOW(), INTERVAL 2 MONTH)), +('app:proc_run:started','i:1504775968;',DATE_ADD(NOW(), INTERVAL 1 MINUTE)), +('diaspora:construct_comment:758d682b1059b10ee096f38798595234','a:6:{s:6:\"author\";s:24:\"friendica3@friendica.dev\";s:4:\"guid\";s:32:\"758d682b1059b10ee096f38798595234\";s:10:\"created_at\";s:20:\"2017-09-07T09:18:24Z\";s:11:\"parent_guid\";s:32:\"758d682b1859b10ebd6abab685903735\";s:4:\"text\";s:5:\"Cool!\";s:16:\"author_signature\";s:0:\"\";}',DATE_ADD(NOW(), INTERVAL 15 MINUTE)), +('diaspora:construct_comment:758d682b2059b10f204f9c2684001373','a:6:{s:6:\"author\";s:24:\"friendica2@friendica.dev\";s:4:\"guid\";s:32:\"758d682b2059b10f204f9c2684001373\";s:10:\"created_at\";s:20:\"2017-09-07T09:19:28Z\";s:11:\"parent_guid\";s:32:\"758d682b1459b10f0be17c3206121357\";s:4:\"text\";s:4:\"Yay!\";s:16:\"author_signature\";s:0:\"\";}',DATE_ADD(NOW(), INTERVAL 15 MINUTE)), +('probe_url::friendica2@friendica.dev','a:21:{s:4:\"name\";s:10:\"friendica2\";s:4:\"nick\";s:10:\"friendica2\";s:4:\"guid\";s:32:\"758d682b1359b10a3a54a8c301503194\";s:3:\"url\";s:39:\"http://friendica.dev/profile/friendica2\";s:4:\"addr\";s:24:\"friendica2@friendica.dev\";s:5:\"alias\";s:0:\"\";s:5:\"photo\";s:40:\"http://friendica.dev/photo/profile/3.jpg\";s:9:\"community\";s:0:\"\";s:8:\"keywords\";s:0:\"\";s:8:\"location\";s:0:\"\";s:5:\"about\";s:0:\"\";s:5:\"batch\";s:0:\"\";s:6:\"notify\";s:43:\"http://friendica.dev/dfrn_notify/friendica2\";s:4:\"poll\";s:41:\"http://friendica.dev/dfrn_poll/friendica2\";s:7:\"request\";s:44:\"http://friendica.dev/dfrn_request/friendica2\";s:7:\"confirm\";s:44:\"http://friendica.dev/dfrn_confirm/friendica2\";s:4:\"poco\";s:36:\"http://friendica.dev/poco/friendica2\";s:8:\"priority\";i:0;s:7:\"network\";s:4:\"dfrn\";s:6:\"pubkey\";s:800:\"-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzOHCS/TBWB72tguU5RWu\nG4KnESmdXWGSHHrCm0iWP88Xl17lkEw58o4yt+bQS3c8U46OwP8z9EyCxFyDyHPU\noVgii+jMmT4hhKw5TeDPWwHSUZM07OP2d0J0Kktr6wC16DfGLWqo+EnJcLxyjFGn\nV6KzYR2d/73m0bj26QWM4w2ZCfBZvEEZsreF0XsZuBOWVRlTB4GzDlsRwRt05kUi\nevFnrth0fq+aeEnZA/8eFY9X8F1LB+mZLRdmWX77pMDtzzxTJUBoQPCkOJ0BvdXi\nyAYybmcxFzR/x1u+kpsgxeDOOPDAQAPnbBQcNNwWtl+emd8wmqXcbmM3XeIa1HPb\nDi0CHXJ5Lr95JYP2brAZu4dEwUNeTzkVkvB8DlviOSFmlg6CWmSKXdaF8trK6j4d\nlv7nxGBvmrbx1CmeA3RblvHR1aRyoQdNhBh1eLJrkDcaTgtzhycrjqdz+vVVV/xi\n4yMY9x+voxENfurEo/XsbzGfPSigTIHImzBcMtG0RTgxTMke6CoqRZW1pXFxZast\ncpsO02JRdPrXt+DHpYzDf8oEMTa4TNKBvczcT8ar82RZYY0srVV0uxH77xhx1bvm\nVAPf40FA2qbHZzCAv64YU9LdIT4iPEUga+Y5m9t2LvS+RiA8Zw/mmOdMFp4hI6+K\nELuO8hQc3Ot0moqfpYCnSl0CAwEAAQ==\n-----END PUBLIC KEY-----\n\";s:7:\"baseurl\";s:20:\"http://friendica.dev\";}',DATE_ADD(NOW(), INTERVAL 1 DAY)), +('probe_url::friendica3@friendica.dev','a:21:{s:4:\"name\";s:10:\"friendica3\";s:4:\"nick\";s:10:\"friendica3\";s:4:\"guid\";s:32:\"758d682b1359b10a642ef08222820194\";s:3:\"url\";s:39:\"http://friendica.dev/profile/friendica3\";s:4:\"addr\";s:24:\"friendica3@friendica.dev\";s:5:\"alias\";s:0:\"\";s:5:\"photo\";s:40:\"http://friendica.dev/photo/profile/4.jpg\";s:9:\"community\";s:0:\"\";s:8:\"keywords\";s:0:\"\";s:8:\"location\";s:0:\"\";s:5:\"about\";s:0:\"\";s:5:\"batch\";s:0:\"\";s:6:\"notify\";s:43:\"http://friendica.dev/dfrn_notify/friendica3\";s:4:\"poll\";s:41:\"http://friendica.dev/dfrn_poll/friendica3\";s:7:\"request\";s:44:\"http://friendica.dev/dfrn_request/friendica3\";s:7:\"confirm\";s:44:\"http://friendica.dev/dfrn_confirm/friendica3\";s:4:\"poco\";s:36:\"http://friendica.dev/poco/friendica3\";s:8:\"priority\";i:0;s:7:\"network\";s:4:\"dfrn\";s:6:\"pubkey\";s:800:\"-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAwIuhjeg03GoOuSYqulsa\nvd/spvniwjaYZhCJYTHgOM4ak9qG8SwPhguSBMqZS3baHEcZtYcYsu5vSQAO/zCB\niK8yefV8LguBhoNw36p/hoQ4TdApOH3cjKAJoaxZSJw0oa50ebCSbh23chRHESbv\nlvfGXq0Pmk060VcLf6h00Iivg/BFNmDfEqrVmgpl0G1PIOatNJ5QdEpCP0E5Bg/H\nvnqvBgpkVAZkKA4xY5rw6pB2NofK74gaeNklnVFqAwaQZUrBv+z1C7h3NQ5YRees\nuspiwZVyFy95xm+kGlKq6GJ7WPQi1mKSJisHLxh9uI7ylgIyRWi/GRA2NBLb15tJ\nL9PpyWEbKhEX/zCUQbos6cFC3+jgiJoYIIa5pOYU0Ekf5AcyF3dFsbcWGObn++wv\nk+5dIK/un+1KOv7X3e/bAnkVCHHjzWAzURQkvb0fwFVzw80ioP4L4V+mvw4jxh+x\ndpPBQmqgCglqE2cpCB4gAcYPlXICBC18YcUYOkYIlgz2WuslcJCnrHO6K5q6lAn3\nNqEI/LmJDrq3hbu96k8d/0zCMNO+u3xPIhDcQ6ZzyhZmVDTpVGFiJ7Yhtfih3ASC\nZqWowoSq5onVWLCsj4QquNCIvJK1NLrkrr6rxD4DbCzW7XbZkenuHumh3HoFb5Lc\nRN6UJNHe/4FNNUzcAVBgEe0CAwEAAQ==\n-----END PUBLIC KEY-----\n\";s:7:\"baseurl\";s:20:\"http://friendica.dev\";}',DATE_ADD(NOW(), INTERVAL 1 DAY)), +('probe_url::friendica4@friendica.dev','a:21:{s:4:\"name\";s:10:\"friendica4\";s:4:\"nick\";s:10:\"friendica4\";s:4:\"guid\";s:32:\"758d682b1359b10a89ad697631454583\";s:3:\"url\";s:39:\"http://friendica.dev/profile/friendica4\";s:4:\"addr\";s:24:\"friendica4@friendica.dev\";s:5:\"alias\";s:0:\"\";s:5:\"photo\";s:40:\"http://friendica.dev/photo/profile/5.jpg\";s:9:\"community\";s:0:\"\";s:8:\"keywords\";s:0:\"\";s:8:\"location\";s:0:\"\";s:5:\"about\";s:0:\"\";s:5:\"batch\";s:0:\"\";s:6:\"notify\";s:43:\"http://friendica.dev/dfrn_notify/friendica4\";s:4:\"poll\";s:41:\"http://friendica.dev/dfrn_poll/friendica4\";s:7:\"request\";s:44:\"http://friendica.dev/dfrn_request/friendica4\";s:7:\"confirm\";s:44:\"http://friendica.dev/dfrn_confirm/friendica4\";s:4:\"poco\";s:36:\"http://friendica.dev/poco/friendica4\";s:8:\"priority\";i:0;s:7:\"network\";s:4:\"dfrn\";s:6:\"pubkey\";s:800:\"-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxAJ+t/FrD0sHO2ecwsoH\nmOst2aPHca5n4UEIpr2ZTl26WN1AbcNo9wahDHXG7pE50GQwvmnnTIlVDLAsBC23\n8sTSpGXrIC8L7YiyDeu3piBp/w4jy8JQrbXn4L8IQbnmi6nDCSr1szXjBcvdPPKK\nrCFgYJ4hjEkSp/wJcKZ1mlRTwtofWZHUMu3NsP2146wRj0roydFVkWGrfsH8grUO\nqMktmpCUOQNsOIAN8b6vQiYQQoamGWjV8wXO3W0fRhQ5Yjko19j1t+O1Jvy2CMhn\nRY2wiGZ91ZSfl8VNLrz38JyeR0cz7YJeNYzOggB1AjEzLhKtqw7zkyW8Qg1Kfo85\ndagFPZ5sQZ8R4nus7xabICMG/qJPL23/1tyenxqkVP0iDIhLo/f0uuG4riNOJZtf\nPYPT6sxSlqxbznuLQr1fYnjFyEnFtJpzuAuvybshT5QLyKntcGap67fWoj/7SrA4\n8T5RCdYHDacMdKEC1SDwpokpgWhWaRkUxJ5F0Q5Jpyvhui/UkxkevDWv5373pgVz\ngaZlxRKYKABWiJkQH9FPAdsr4nUVErl/zvI0+9GuzK/EJ5ToVs8bF98Jb4Y3o2pm\nNtPL1ao9r0ug/3F7RHTLs1tp0Bdm/Gxk/RJf4j6gKgAw9WcdHzkxcvikhAY43zMe\n5qExQo663i3hzw4v3p94i+sCAwEAAQ==\n-----END PUBLIC KEY-----\n\";s:7:\"baseurl\";s:20:\"http://friendica.dev\";}',DATE_ADD(NOW(), INTERVAL 1 DAY)), +('probe_url::friendica5@friendica.dev','a:21:{s:4:\"name\";s:10:\"friendica5\";s:4:\"nick\";s:10:\"friendica5\";s:4:\"guid\";s:32:\"758d682b1959b10ab0768ff699049903\";s:3:\"url\";s:39:\"http://friendica.dev/profile/friendica5\";s:4:\"addr\";s:24:\"friendica5@friendica.dev\";s:5:\"alias\";s:0:\"\";s:5:\"photo\";s:40:\"http://friendica.dev/photo/profile/6.jpg\";s:9:\"community\";s:0:\"\";s:8:\"keywords\";s:0:\"\";s:8:\"location\";s:0:\"\";s:5:\"about\";s:0:\"\";s:5:\"batch\";s:0:\"\";s:6:\"notify\";s:43:\"http://friendica.dev/dfrn_notify/friendica5\";s:4:\"poll\";s:41:\"http://friendica.dev/dfrn_poll/friendica5\";s:7:\"request\";s:44:\"http://friendica.dev/dfrn_request/friendica5\";s:7:\"confirm\";s:44:\"http://friendica.dev/dfrn_confirm/friendica5\";s:4:\"poco\";s:36:\"http://friendica.dev/poco/friendica5\";s:8:\"priority\";i:0;s:7:\"network\";s:4:\"dfrn\";s:6:\"pubkey\";s:800:\"-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAmtBUbN/07wWbcUvp9QvR\nKLoM+WjC0K0rFsx6L/Mktk6Go5+DqofuHSQgfJZGBI3vbTlbwW76peX/0aqiZPGF\nrrhX1FMhU23AxYE9TixRR+oqIKETNzU8NuahpK/ZBokoPL7mzrY4o5dNcnG4S57O\nir4VfEpuYB99K7Uo4yVc6a50ZQfDoBy6nnCPbVmh+gokc28paK7Av0vnMwwD6TWQ\nrgXyrPsa+Af5YeDC7GOmhppeN+e5zycRTddfXWR8QFp+he43b7z54pB+ajAu3J+C\nTAagIp5UWrBmwclF2gmLWvyYYpwTF3kNz+Waf0s3khiZXcJZKxGKVqXoTkqEKV/i\nvHryaBlvvAkQKR1mfJpNasJfHrqhOlHigWi3ISlPJQB4h+85W+YAXj+3j26OnMpb\nCmjf0BXLnjuC+w9rXFW/kj3Q1PxNaAfx/BoV62unWBKnZAkkzHOkQ5yyATdXQaEY\nlDsFbc0itSm3zjsPa1gXtn9e9z8Mqn5MwKk5I9k7TIr6/FdgbX7gxl6mn59OQ0v+\ne8o7HECSQvT8c+WmvBk3tjQHDgw3FeiJ54w0IGiha530vPCk5Z840d/jVUL7Qc6j\nrNi7hLOBvx4jdxk+5tq6fZMG4Sbu+Iibc4b+f2QyVW7Pcxt3CM/ADh0kzfGJ7wQd\nzl4w/9+s8DPT43Tbn98QK+MCAwEAAQ==\n-----END PUBLIC KEY-----\n\";s:7:\"baseurl\";s:20:\"http://friendica.dev\";}',DATE_ADD(NOW(), INTERVAL 1 DAY)), +('probe_url::http://friendica.dev/profile/friendica1','a:21:{s:4:\"name\";s:10:\"friendica1\";s:4:\"nick\";s:10:\"friendica1\";s:4:\"guid\";s:32:\"758d682b8559b109d5ad831494500945\";s:3:\"url\";s:39:\"http://friendica.dev/profile/friendica1\";s:4:\"addr\";s:24:\"friendica1@friendica.dev\";s:5:\"alias\";s:0:\"\";s:5:\"photo\";s:40:\"http://friendica.dev/photo/profile/2.jpg\";s:9:\"community\";s:0:\"\";s:8:\"keywords\";s:0:\"\";s:8:\"location\";s:0:\"\";s:5:\"about\";s:0:\"\";s:5:\"batch\";s:0:\"\";s:6:\"notify\";s:43:\"http://friendica.dev/dfrn_notify/friendica1\";s:4:\"poll\";s:41:\"http://friendica.dev/dfrn_poll/friendica1\";s:7:\"request\";s:44:\"http://friendica.dev/dfrn_request/friendica1\";s:7:\"confirm\";s:44:\"http://friendica.dev/dfrn_confirm/friendica1\";s:4:\"poco\";s:36:\"http://friendica.dev/poco/friendica1\";s:8:\"priority\";i:0;s:7:\"network\";s:4:\"dfrn\";s:6:\"pubkey\";s:800:\"-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzNeTX2GGZAqTecUeOPNq\n+uFCfBuN4g6xKTkBlUDeVCLp2N3uVJq+TSjmoau8MpY3jCD2Nqn5KsMPh8XJV2s6\nb1kSjmVdpr4EeBXPyvi3asCcgmqi2IeoK/ihVGP9IrrYh8zwzVY9wW1/TPcC4N4W\nCcmeFTO08CSJh2P8ROq6irU0ndbmqfmFSs5uZ7UcEKUzkgSSPTxq5x3O7xSfTbOZ\nPNhSn3r5buSOd46KyWaBIJ2KgFNoY2AGJqbzZTZmJZB/qelrONtJ6XDnDI9GNQBI\nyL9935Scmo9WrXeZcqXNW3yI97s1tH27pCxhsyy5xqzEYfAPwPFry4gbO+wSGcNm\nFYfbCM19uPvJyN6TEgFNZD5401Pl8LQaVkSAnV9LQPzn/54CJYQb6KlE0rymROyQ\nvKPUZmEkw6ZnVJIF5pjxu6bGGPdv3xmBH6Xnmi0hhNA2AEDbv6wDrLZYLUCTSSqq\nhW8WK3HylsP9dqNT+a3X9l9dG7vqmRevGcbBQDDZPOKjkJkAa8IgIlk3UIWs3bYY\nST0VUtjRpsoLo3XmdYtY5qXxjGjtEy7NjRErlT31WoMzxcLhLwxKGWQz/xMC9OXe\np+uoyVUOd3U/Jvz6vpW9k5ua417IrF9XaxtcKvhp69m16br8JkMuKWvdGomWDXxA\nG1cAbsHJN6JJEU/3Vo35sh0CAwEAAQ==\n-----END PUBLIC KEY-----\n\";s:7:\"baseurl\";s:20:\"http://friendica.dev\";}',DATE_ADD(NOW(), INTERVAL 1 DAY)), +('probe_url::http://friendica.dev/profile/friendica2','a:21:{s:4:\"name\";s:10:\"friendica2\";s:4:\"nick\";s:10:\"friendica2\";s:4:\"guid\";s:32:\"758d682b1359b10a3a54a8c301503194\";s:3:\"url\";s:39:\"http://friendica.dev/profile/friendica2\";s:4:\"addr\";s:24:\"friendica2@friendica.dev\";s:5:\"alias\";s:0:\"\";s:5:\"photo\";s:40:\"http://friendica.dev/photo/profile/3.jpg\";s:9:\"community\";s:0:\"\";s:8:\"keywords\";s:0:\"\";s:8:\"location\";s:0:\"\";s:5:\"about\";s:0:\"\";s:5:\"batch\";s:0:\"\";s:6:\"notify\";s:43:\"http://friendica.dev/dfrn_notify/friendica2\";s:4:\"poll\";s:41:\"http://friendica.dev/dfrn_poll/friendica2\";s:7:\"request\";s:44:\"http://friendica.dev/dfrn_request/friendica2\";s:7:\"confirm\";s:44:\"http://friendica.dev/dfrn_confirm/friendica2\";s:4:\"poco\";s:36:\"http://friendica.dev/poco/friendica2\";s:8:\"priority\";i:0;s:7:\"network\";s:4:\"dfrn\";s:6:\"pubkey\";s:800:\"-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzOHCS/TBWB72tguU5RWu\nG4KnESmdXWGSHHrCm0iWP88Xl17lkEw58o4yt+bQS3c8U46OwP8z9EyCxFyDyHPU\noVgii+jMmT4hhKw5TeDPWwHSUZM07OP2d0J0Kktr6wC16DfGLWqo+EnJcLxyjFGn\nV6KzYR2d/73m0bj26QWM4w2ZCfBZvEEZsreF0XsZuBOWVRlTB4GzDlsRwRt05kUi\nevFnrth0fq+aeEnZA/8eFY9X8F1LB+mZLRdmWX77pMDtzzxTJUBoQPCkOJ0BvdXi\nyAYybmcxFzR/x1u+kpsgxeDOOPDAQAPnbBQcNNwWtl+emd8wmqXcbmM3XeIa1HPb\nDi0CHXJ5Lr95JYP2brAZu4dEwUNeTzkVkvB8DlviOSFmlg6CWmSKXdaF8trK6j4d\nlv7nxGBvmrbx1CmeA3RblvHR1aRyoQdNhBh1eLJrkDcaTgtzhycrjqdz+vVVV/xi\n4yMY9x+voxENfurEo/XsbzGfPSigTIHImzBcMtG0RTgxTMke6CoqRZW1pXFxZast\ncpsO02JRdPrXt+DHpYzDf8oEMTa4TNKBvczcT8ar82RZYY0srVV0uxH77xhx1bvm\nVAPf40FA2qbHZzCAv64YU9LdIT4iPEUga+Y5m9t2LvS+RiA8Zw/mmOdMFp4hI6+K\nELuO8hQc3Ot0moqfpYCnSl0CAwEAAQ==\n-----END PUBLIC KEY-----\n\";s:7:\"baseurl\";s:20:\"http://friendica.dev\";}',DATE_ADD(NOW(), INTERVAL 1 DAY)), +('probe_url::http://friendica.dev/profile/friendica3','a:21:{s:4:\"name\";s:10:\"friendica3\";s:4:\"nick\";s:10:\"friendica3\";s:4:\"guid\";s:32:\"758d682b1359b10a642ef08222820194\";s:3:\"url\";s:39:\"http://friendica.dev/profile/friendica3\";s:4:\"addr\";s:24:\"friendica3@friendica.dev\";s:5:\"alias\";s:0:\"\";s:5:\"photo\";s:40:\"http://friendica.dev/photo/profile/4.jpg\";s:9:\"community\";s:0:\"\";s:8:\"keywords\";s:0:\"\";s:8:\"location\";s:0:\"\";s:5:\"about\";s:0:\"\";s:5:\"batch\";s:0:\"\";s:6:\"notify\";s:43:\"http://friendica.dev/dfrn_notify/friendica3\";s:4:\"poll\";s:41:\"http://friendica.dev/dfrn_poll/friendica3\";s:7:\"request\";s:44:\"http://friendica.dev/dfrn_request/friendica3\";s:7:\"confirm\";s:44:\"http://friendica.dev/dfrn_confirm/friendica3\";s:4:\"poco\";s:36:\"http://friendica.dev/poco/friendica3\";s:8:\"priority\";i:0;s:7:\"network\";s:4:\"dfrn\";s:6:\"pubkey\";s:800:\"-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAwIuhjeg03GoOuSYqulsa\nvd/spvniwjaYZhCJYTHgOM4ak9qG8SwPhguSBMqZS3baHEcZtYcYsu5vSQAO/zCB\niK8yefV8LguBhoNw36p/hoQ4TdApOH3cjKAJoaxZSJw0oa50ebCSbh23chRHESbv\nlvfGXq0Pmk060VcLf6h00Iivg/BFNmDfEqrVmgpl0G1PIOatNJ5QdEpCP0E5Bg/H\nvnqvBgpkVAZkKA4xY5rw6pB2NofK74gaeNklnVFqAwaQZUrBv+z1C7h3NQ5YRees\nuspiwZVyFy95xm+kGlKq6GJ7WPQi1mKSJisHLxh9uI7ylgIyRWi/GRA2NBLb15tJ\nL9PpyWEbKhEX/zCUQbos6cFC3+jgiJoYIIa5pOYU0Ekf5AcyF3dFsbcWGObn++wv\nk+5dIK/un+1KOv7X3e/bAnkVCHHjzWAzURQkvb0fwFVzw80ioP4L4V+mvw4jxh+x\ndpPBQmqgCglqE2cpCB4gAcYPlXICBC18YcUYOkYIlgz2WuslcJCnrHO6K5q6lAn3\nNqEI/LmJDrq3hbu96k8d/0zCMNO+u3xPIhDcQ6ZzyhZmVDTpVGFiJ7Yhtfih3ASC\nZqWowoSq5onVWLCsj4QquNCIvJK1NLrkrr6rxD4DbCzW7XbZkenuHumh3HoFb5Lc\nRN6UJNHe/4FNNUzcAVBgEe0CAwEAAQ==\n-----END PUBLIC KEY-----\n\";s:7:\"baseurl\";s:20:\"http://friendica.dev\";}',DATE_ADD(NOW(), INTERVAL 1 DAY)), +('probe_url::http://friendica.dev/profile/friendica4','a:21:{s:4:\"name\";s:10:\"friendica4\";s:4:\"nick\";s:10:\"friendica4\";s:4:\"guid\";s:32:\"758d682b1359b10a89ad697631454583\";s:3:\"url\";s:39:\"http://friendica.dev/profile/friendica4\";s:4:\"addr\";s:24:\"friendica4@friendica.dev\";s:5:\"alias\";s:0:\"\";s:5:\"photo\";s:40:\"http://friendica.dev/photo/profile/5.jpg\";s:9:\"community\";s:0:\"\";s:8:\"keywords\";s:0:\"\";s:8:\"location\";s:0:\"\";s:5:\"about\";s:0:\"\";s:5:\"batch\";s:0:\"\";s:6:\"notify\";s:43:\"http://friendica.dev/dfrn_notify/friendica4\";s:4:\"poll\";s:41:\"http://friendica.dev/dfrn_poll/friendica4\";s:7:\"request\";s:44:\"http://friendica.dev/dfrn_request/friendica4\";s:7:\"confirm\";s:44:\"http://friendica.dev/dfrn_confirm/friendica4\";s:4:\"poco\";s:36:\"http://friendica.dev/poco/friendica4\";s:8:\"priority\";i:0;s:7:\"network\";s:4:\"dfrn\";s:6:\"pubkey\";s:800:\"-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxAJ+t/FrD0sHO2ecwsoH\nmOst2aPHca5n4UEIpr2ZTl26WN1AbcNo9wahDHXG7pE50GQwvmnnTIlVDLAsBC23\n8sTSpGXrIC8L7YiyDeu3piBp/w4jy8JQrbXn4L8IQbnmi6nDCSr1szXjBcvdPPKK\nrCFgYJ4hjEkSp/wJcKZ1mlRTwtofWZHUMu3NsP2146wRj0roydFVkWGrfsH8grUO\nqMktmpCUOQNsOIAN8b6vQiYQQoamGWjV8wXO3W0fRhQ5Yjko19j1t+O1Jvy2CMhn\nRY2wiGZ91ZSfl8VNLrz38JyeR0cz7YJeNYzOggB1AjEzLhKtqw7zkyW8Qg1Kfo85\ndagFPZ5sQZ8R4nus7xabICMG/qJPL23/1tyenxqkVP0iDIhLo/f0uuG4riNOJZtf\nPYPT6sxSlqxbznuLQr1fYnjFyEnFtJpzuAuvybshT5QLyKntcGap67fWoj/7SrA4\n8T5RCdYHDacMdKEC1SDwpokpgWhWaRkUxJ5F0Q5Jpyvhui/UkxkevDWv5373pgVz\ngaZlxRKYKABWiJkQH9FPAdsr4nUVErl/zvI0+9GuzK/EJ5ToVs8bF98Jb4Y3o2pm\nNtPL1ao9r0ug/3F7RHTLs1tp0Bdm/Gxk/RJf4j6gKgAw9WcdHzkxcvikhAY43zMe\n5qExQo663i3hzw4v3p94i+sCAwEAAQ==\n-----END PUBLIC KEY-----\n\";s:7:\"baseurl\";s:20:\"http://friendica.dev\";}',DATE_ADD(NOW(), INTERVAL 1 DAY)), +('probe_url::http://friendica.dev/profile/friendica5','a:21:{s:4:\"name\";s:10:\"friendica5\";s:4:\"nick\";s:10:\"friendica5\";s:4:\"guid\";s:32:\"758d682b1959b10ab0768ff699049903\";s:3:\"url\";s:39:\"http://friendica.dev/profile/friendica5\";s:4:\"addr\";s:24:\"friendica5@friendica.dev\";s:5:\"alias\";s:0:\"\";s:5:\"photo\";s:40:\"http://friendica.dev/photo/profile/6.jpg\";s:9:\"community\";s:0:\"\";s:8:\"keywords\";s:0:\"\";s:8:\"location\";s:0:\"\";s:5:\"about\";s:0:\"\";s:5:\"batch\";s:0:\"\";s:6:\"notify\";s:43:\"http://friendica.dev/dfrn_notify/friendica5\";s:4:\"poll\";s:41:\"http://friendica.dev/dfrn_poll/friendica5\";s:7:\"request\";s:44:\"http://friendica.dev/dfrn_request/friendica5\";s:7:\"confirm\";s:44:\"http://friendica.dev/dfrn_confirm/friendica5\";s:4:\"poco\";s:36:\"http://friendica.dev/poco/friendica5\";s:8:\"priority\";i:0;s:7:\"network\";s:4:\"dfrn\";s:6:\"pubkey\";s:800:\"-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAmtBUbN/07wWbcUvp9QvR\nKLoM+WjC0K0rFsx6L/Mktk6Go5+DqofuHSQgfJZGBI3vbTlbwW76peX/0aqiZPGF\nrrhX1FMhU23AxYE9TixRR+oqIKETNzU8NuahpK/ZBokoPL7mzrY4o5dNcnG4S57O\nir4VfEpuYB99K7Uo4yVc6a50ZQfDoBy6nnCPbVmh+gokc28paK7Av0vnMwwD6TWQ\nrgXyrPsa+Af5YeDC7GOmhppeN+e5zycRTddfXWR8QFp+he43b7z54pB+ajAu3J+C\nTAagIp5UWrBmwclF2gmLWvyYYpwTF3kNz+Waf0s3khiZXcJZKxGKVqXoTkqEKV/i\nvHryaBlvvAkQKR1mfJpNasJfHrqhOlHigWi3ISlPJQB4h+85W+YAXj+3j26OnMpb\nCmjf0BXLnjuC+w9rXFW/kj3Q1PxNaAfx/BoV62unWBKnZAkkzHOkQ5yyATdXQaEY\nlDsFbc0itSm3zjsPa1gXtn9e9z8Mqn5MwKk5I9k7TIr6/FdgbX7gxl6mn59OQ0v+\ne8o7HECSQvT8c+WmvBk3tjQHDgw3FeiJ54w0IGiha530vPCk5Z840d/jVUL7Qc6j\nrNi7hLOBvx4jdxk+5tq6fZMG4Sbu+Iibc4b+f2QyVW7Pcxt3CM/ADh0kzfGJ7wQd\nzl4w/9+s8DPT43Tbn98QK+MCAwEAAQ==\n-----END PUBLIC KEY-----\n\";s:7:\"baseurl\";s:20:\"http://friendica.dev\";}',DATE_ADD(NOW(), INTERVAL 1 DAY)); /*!40000 ALTER TABLE `cache` ENABLE KEYS */; UNLOCK TABLES; @@ -1268,7 +1283,7 @@ CREATE TABLE `photo` ( LOCK TABLES `photo` WRITE; /*!40000 ALTER TABLE `photo` DISABLE KEYS */; -INSERT INTO `photo` VALUES (1,1,0,'75859b1098e38271','676c41a6030639fa07634741242d99de','2017-09-07 08:55:42','2017-09-07 08:55:42','','','Profile photos','person-175.jpg','image/jpeg',175,175,5476,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n  \0A\0\0\0\0\0\0\0 !\n1A\"Q2aq#%3$&5BREs\0\0\0?\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*ՆXgp|LsN}Y%ZR|1(J*I&+r$0G)%lZ,:i(ϥ)J*hχoSмI$Dj.T\n1PȌ4?{eӦx)ж}t^x\\~s2{ml&\0T2#3ږ_،ûUYf$1.`w)rrǒ$gboqd\Z7\"i,0g#}G!\0\0\0\0\0\0\0*|zB6Zp]s\"Aڝ\rE\r{bZHIj>EqE˒S.:t7Vg5u;Ys=YFZRk}OJ\Zmiv2rVӍBl[rdD;k)^2-gQ~ESAjƴS<0\0\0\0\0\0\0\0vSę>\'9خ 豆8$򌩵œUY)O&DH]6B&KMeNDSL8d#z9۔g,ܮG w7GggU)F]Esi-DRd{-e|jwK P䗴[f\\rZ\\kpqҾ.oUuZn)XFd5Q1ec@J{LX(GԽ3\\[a,|M.kQ&_,R\ZK6>i#2Y*h@Wu+-.q\'c)Z]X\'fIQ0J-DdJZ)%\0#[ڋѓNVeM|<qEK>Yk[\ZYN \"ZyTGV\ZĢ5MGROO&7 ;_Ou[7Q?0RvVg#۔+E1vl\0\0\0\0\0?Ɯ^0RlwέlFݒRב̋rK3=2###h,I7_Cku齒笩Y;a{`\0\0\'uXhY\'qEIx}RÓI_/_#qGOO%3.\'\\m>t27 36(FffJw_C44yZ*\0\0\0\0\0\\1.۷C6yC2t2$3K\\.K\r^\'GE);S/ҟEs,f/qB5qC\"Ǯm̕gx/6l5|*Io$}X\0]Uza jvC0)8.opcև6\'R (WJ\"Sf>UKS*TΦ=72?[ َ\0u&|5\"-Uh ǭ\nV#9Mԗ;H$i5\"̢:g&\0\0\0\0\0كF&7<!E4/R5U*\n*:$N$\ZҎlk/ )=9&Qeؽ\r>1\ZT|JmFJnwiNo[/8& q,K\r5qvs\'\ZPHGzjY|F2?jj|\0໩\nLKcA_.(\ZJ LjȪ\Zy\"}ݽεՃeS5:$n\Z[ δ\"dF((Y\ZQvLGMy!z\'GǾƷu(%;<\0\0\0\0\0?յnn\nm3\"\"\"=ؼ\'x8x-aESl13K Yx%rJrRY5B$E=4k_ć&N\Z_kHQ;wdW)%/y}\')5i([xrIW+]}f,\n^G,sJ\'8ӫzLKZ%l$Y(:]6\0㴒Mʮ%y2=ޟ${;SؔI-mzѸU)hc,Xۭѹ›C;ccg)-TZSBV^S2%l@roW8&اi;6{{IY\\J6ڒ\"\"J|w\"-)`tJKq:}74QoӕI4{uHn0BaG\'w~x-5:@\0\0\0\0|(\\-ek$ c\' 4W\"+HSw:%25Ȉ׶ܜ>E{殸g]hѣ\"3i_0MEK[EmFI tҦeϨWۧڥZ%./k0cU\\Jr [GKUkFfJ[D=(l\'\0\0\0\0\0\0= 1Wή1n\ZݪLV,ګV0^`q-O52dfJy|e9\rO*d=\09.s\Z\0&V [u; ۺK_Q(d^xp:L5\\+幞Y{Cۧ@\0\0\0\0\0\0@R:XR{f鷺z\Z{7Gx\0\reK)Z4.=bWfyi=l>Lp\0pt=UrG\'zR/J\0\0\0\0\0\0\"C?\ZQS(m]q6Hܷ=[zy%O\'`1@BWaA1#hC(9?MQH\"3-cѷ= DZWlהmLISw.оʈ2 v\0\0\0\0\0\0uhJ8=UCh<^;/F 鱴zmI\"\0\0޻\0cd5CήҦ5l֋-Nm R~wB߀\0\0\0\0\0\0׎JO\ZO;\'0g ynwd.\0\0\0T^G\0]\0?/.2\0\0\0\0\0\0\0`TV*h:mL܌\0\0\0\0\0\0\0\0\0\0\0\0',4,1,'','','',''),(2,1,0,'75859b1098e38271','676c41a6030639fa07634741242d99de','2017-09-07 08:55:42','2017-09-07 08:55:42','','','Profile photos','person-175.jpg','image/jpeg',80,80,2697,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \0P\0P\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n \01\0\0\0\0\0\0\0\0 !1\n\"QqA#3\0\0\0?\0M5Aq\04M5ݸt=X\"™!Dp< _xrYCêT,Qrd其aɖ+z4d2:AY1.ZF`Hk7>CbMrIU*UXznh6FCŰjR6g\Z 6@IM4\nP)\' c-^je[JEt\0lA5*ga\'2א\rjXOR_]ds8$+\' ۬L%hAu(VHVW&8\'zr \napp~o\0\">?:;pMT.cר%\'g>xkx3Ԫ*j*srRs&vma\r00n];_oow[sŕs\'_Xcՙ7?D} ݦk/d\\7v۸n0UXȬRU#57%9L%0 D@uo\'l95Rs1Y23T<$oKD~.`Wz$_\'@ꑄk\Zܐ3x,31fWdaq*uZc W,,~V\"N[.O=Pt*Ed]D7@˶GѱBfc\nuʹUV쁍E\"tZg)\njrшN`MQ6i)KxøY%tSLW?w_\n!R; )ٴhzIؼR@\n=M5[n?ܣx©1b~cE e\n>@.,So =t٫tr ͎ r$eBt6*$q:+$.&7\")Af]KiyFWn6/uKD<}ӞBuah+#Qt72D*Vm59ESNCV`);\nVVe]@ŠFѰɢ:9dȃfQM!JB\0jw-ۈoŷrU$p[$3qm1Sp(, ʒΘ$#ۻ@=td젆QVOX7>;\rDȕ0uI{,IWJ5 pe9L_!۸~{~uϐ?\0\ZBkWYtu ]8wh.6kkHEUj2dN%U0\rUMTj+LH `w*\n\"\\0g \rѼ|dLTstG0hM0b3f$5lH i&B馿!t|z@UMe`m{4*%V.m*(C1Zf\r3;ÆUsن\"-.9J>tL~H,$~vfUFYVEqE˒S.:t7Vg5u;Ys=YFZRk}OJ\Zmiv2rVӍBl[rdD;k)^2-gQ~ESAjƴS<0\0\0\0\0\0\0\0vSę>\'9خ 豆8$򌩵œUY)O&DH]6B&KMeNDSL8d#z9۔g,ܮG w7GggU)F]Esi-DRd{-e|jwK P䗴[f\\rZ\\kpqҾ.oUuZn)XFd5Q1ec@J{LX(GԽ3\\[a,|M.kQ&_,R\ZK6>i#2Y*h@Wu+-.q\'c)Z]X\'fIQ0J-DdJZ)%\0#[ڋѓNVeM|<qEK>Yk[\ZYN \"ZyTGV\ZĢ5MGROO&7 ;_Ou[7Q?0RvVg#۔+E1vl\0\0\0\0\0?Ɯ^0RlwέlFݒRב̋rK3=2###h,I7_Cku齒笩Y;a{`\0\0\'uXhY\'qEIx}RÓI_/_#qGOO%3.\'\\m>t27 36(FffJw_C44yZ*\0\0\0\0\0\\1.۷C6yC2t2$3K\\.K\r^\'GE);S/ҟEs,f/qB5qC\"Ǯm̕gx/6l5|*Io$}X\0]Uza jvC0)8.opcև6\'R (WJ\"Sf>UKS*TΦ=72?[ َ\0u&|5\"-Uh ǭ\nV#9Mԗ;H$i5\"̢:g&\0\0\0\0\0كF&7<!E4/R5U*\n*:$N$\ZҎlk/ )=9&Qeؽ\r>1\ZT|JmFJnwiNo[/8& q,K\r5qvs\'\ZPHGzjY|F2?jj|\0໩\nLKcA_.(\ZJ LjȪ\Zy\"}ݽεՃeS5:$n\Z[ δ\"dF((Y\ZQvLGMy!z\'GǾƷu(%;<\0\0\0\0\0?յnn\nm3\"\"\"=ؼ\'x8x-aESl13K Yx%rJrRY5B$E=4k_ć&N\Z_kHQ;wdW)%/y}\')5i([xrIW+]}f,\n^G,sJ\'8ӫzLKZ%l$Y(:]6\0㴒Mʮ%y2=ޟ${;SؔI-mzѸU)hc,Xۭѹ›C;ccg)-TZSBV^S2%l@roW8&اi;6{{IY\\J6ڒ\"\"J|w\"-)`tJKq:}74QoӕI4{uHn0BaG\'w~x-5:@\0\0\0\0|(\\-ek$ c\' 4W\"+HSw:%25Ȉ׶ܜ>E{殸g]hѣ\"3i_0MEK[EmFI tҦeϨWۧڥZ%./k0cU\\Jr [GKUkFfJ[D=(l\'\0\0\0\0\0\0= 1Wή1n\ZݪLV,ګV0^`q-O52dfJy|e9\rO*d=\09.s\Z\0&V [u; ۺK_Q(d^xp:L5\\+幞Y{Cۧ@\0\0\0\0\0\0@R:XR{f鷺z\Z{7Gx\0\reK)Z4.=bWfyi=l>Lp\0pt=UrG\'zR/J\0\0\0\0\0\0\"C?\ZQS(m]q6Hܷ=[zy%O\'`1@BWaA1#hC(9?MQH\"3-cѷ= DZWlהmLISw.оʈ2 v\0\0\0\0\0\0uhJ8=UCh<^;/F 鱴zmI\"\0\0޻\0cd5CήҦ5l֋-Nm R~wB߀\0\0\0\0\0\0׎JO\ZO;\'0g ynwd.\0\0\0T^G\0]\0?/.2\0\0\0\0\0\0\0`TV*h:mL܌\0\0\0\0\0\0\0\0\0\0\0\0',4,1,'','','',''),(5,2,0,'75859b109d5b24c8','a78adc969a71bfd985d769baa2d51c78','2017-09-07 08:56:53','2017-09-07 08:56:53','','','Profile photos','person-175.jpg','image/jpeg',80,80,2697,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \0P\0P\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n \01\0\0\0\0\0\0\0\0 !1\n\"QqA#3\0\0\0?\0M5Aq\04M5ݸt=X\"™!Dp< _xrYCêT,Qrd其aɖ+z4d2:AY1.ZF`Hk7>CbMrIU*UXznh6FCŰjR6g\Z 6@IM4\nP)\' c-^je[JEt\0lA5*ga\'2א\rjXOR_]ds8$+\' ۬L%hAu(VHVW&8\'zr \napp~o\0\">?:;pMT.cר%\'g>xkx3Ԫ*j*srRs&vma\r00n];_oow[sŕs\'_Xcՙ7?D} ݦk/d\\7v۸n0UXȬRU#57%9L%0 D@uo\'l95Rs1Y23T<$oKD~.`Wz$_\'@ꑄk\Zܐ3x,31fWdaq*uZc W,,~V\"N[.O=Pt*Ed]D7@˶GѱBfc\nuʹUV쁍E\"tZg)\njrшN`MQ6i)KxøY%tSLW?w_\n!R; )ٴhzIؼR@\n=M5[n?ܣx©1b~cE e\n>@.,So =t٫tr ͎ r$eBt6*$q:+$.&7\")Af]KiyFWn6/uKD<}ӞBuah+#Qt72D*Vm59ESNCV`);\nVVe]@ŠFѰɢ:9dȃfQM!JB\0jw-ۈoŷrU$p[$3qm1Sp(, ʒΘ$#ۻ@=td젆QVOX7>;\rDȕ0uI{,IWJ5 pe9L_!۸~{~uϐ?\0\ZBkWYtu ]8wh.6kkHEUj2dN%U0\rUMTj+LH `w*\n\"\\0g \rѼ|dLTstG0hM0b3f$5lH i&B馿!t|z@UMe`m{4*%V.m*(C1Zf\r3;ÆUsن\"-.9J>tL~H,$~vfUFYVEqE˒S.:t7Vg5u;Ys=YFZRk}OJ\Zmiv2rVӍBl[rdD;k)^2-gQ~ESAjƴS<0\0\0\0\0\0\0\0vSę>\'9خ 豆8$򌩵œUY)O&DH]6B&KMeNDSL8d#z9۔g,ܮG w7GggU)F]Esi-DRd{-e|jwK P䗴[f\\rZ\\kpqҾ.oUuZn)XFd5Q1ec@J{LX(GԽ3\\[a,|M.kQ&_,R\ZK6>i#2Y*h@Wu+-.q\'c)Z]X\'fIQ0J-DdJZ)%\0#[ڋѓNVeM|<qEK>Yk[\ZYN \"ZyTGV\ZĢ5MGROO&7 ;_Ou[7Q?0RvVg#۔+E1vl\0\0\0\0\0?Ɯ^0RlwέlFݒRב̋rK3=2###h,I7_Cku齒笩Y;a{`\0\0\'uXhY\'qEIx}RÓI_/_#qGOO%3.\'\\m>t27 36(FffJw_C44yZ*\0\0\0\0\0\\1.۷C6yC2t2$3K\\.K\r^\'GE);S/ҟEs,f/qB5qC\"Ǯm̕gx/6l5|*Io$}X\0]Uza jvC0)8.opcև6\'R (WJ\"Sf>UKS*TΦ=72?[ َ\0u&|5\"-Uh ǭ\nV#9Mԗ;H$i5\"̢:g&\0\0\0\0\0كF&7<!E4/R5U*\n*:$N$\ZҎlk/ )=9&Qeؽ\r>1\ZT|JmFJnwiNo[/8& q,K\r5qvs\'\ZPHGzjY|F2?jj|\0໩\nLKcA_.(\ZJ LjȪ\Zy\"}ݽεՃeS5:$n\Z[ δ\"dF((Y\ZQvLGMy!z\'GǾƷu(%;<\0\0\0\0\0?յnn\nm3\"\"\"=ؼ\'x8x-aESl13K Yx%rJrRY5B$E=4k_ć&N\Z_kHQ;wdW)%/y}\')5i([xrIW+]}f,\n^G,sJ\'8ӫzLKZ%l$Y(:]6\0㴒Mʮ%y2=ޟ${;SؔI-mzѸU)hc,Xۭѹ›C;ccg)-TZSBV^S2%l@roW8&اi;6{{IY\\J6ڒ\"\"J|w\"-)`tJKq:}74QoӕI4{uHn0BaG\'w~x-5:@\0\0\0\0|(\\-ek$ c\' 4W\"+HSw:%25Ȉ׶ܜ>E{殸g]hѣ\"3i_0MEK[EmFI tҦeϨWۧڥZ%./k0cU\\Jr [GKUkFfJ[D=(l\'\0\0\0\0\0\0= 1Wή1n\ZݪLV,ګV0^`q-O52dfJy|e9\rO*d=\09.s\Z\0&V [u; ۺK_Q(d^xp:L5\\+幞Y{Cۧ@\0\0\0\0\0\0@R:XR{f鷺z\Z{7Gx\0\reK)Z4.=bWfyi=l>Lp\0pt=UrG\'zR/J\0\0\0\0\0\0\"C?\ZQS(m]q6Hܷ=[zy%O\'`1@BWaA1#hC(9?MQH\"3-cѷ= DZWlהmLISw.оʈ2 v\0\0\0\0\0\0uhJ8=UCh<^;/F 鱴zmI\"\0\0޻\0cd5CήҦ5l֋-Nm R~wB߀\0\0\0\0\0\0׎JO\ZO;\'0g ynwd.\0\0\0T^G\0]\0?/.2\0\0\0\0\0\0\0`TV*h:mL܌\0\0\0\0\0\0\0\0\0\0\0\0',4,1,'','','',''),(8,3,0,'75859b10a3a57734','cde8bd4c269d017826b5c163d04134ae','2017-09-07 08:58:34','2017-09-07 08:58:34','','','Profile photos','person-175.jpg','image/jpeg',80,80,2697,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \0P\0P\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n \01\0\0\0\0\0\0\0\0 !1\n\"QqA#3\0\0\0?\0M5Aq\04M5ݸt=X\"™!Dp< _xrYCêT,Qrd其aɖ+z4d2:AY1.ZF`Hk7>CbMrIU*UXznh6FCŰjR6g\Z 6@IM4\nP)\' c-^je[JEt\0lA5*ga\'2א\rjXOR_]ds8$+\' ۬L%hAu(VHVW&8\'zr \napp~o\0\">?:;pMT.cר%\'g>xkx3Ԫ*j*srRs&vma\r00n];_oow[sŕs\'_Xcՙ7?D} ݦk/d\\7v۸n0UXȬRU#57%9L%0 D@uo\'l95Rs1Y23T<$oKD~.`Wz$_\'@ꑄk\Zܐ3x,31fWdaq*uZc W,,~V\"N[.O=Pt*Ed]D7@˶GѱBfc\nuʹUV쁍E\"tZg)\njrшN`MQ6i)KxøY%tSLW?w_\n!R; )ٴhzIؼR@\n=M5[n?ܣx©1b~cE e\n>@.,So =t٫tr ͎ r$eBt6*$q:+$.&7\")Af]KiyFWn6/uKD<}ӞBuah+#Qt72D*Vm59ESNCV`);\nVVe]@ŠFѰɢ:9dȃfQM!JB\0jw-ۈoŷrU$p[$3qm1Sp(, ʒΘ$#ۻ@=td젆QVOX7>;\rDȕ0uI{,IWJ5 pe9L_!۸~{~uϐ?\0\ZBkWYtu ]8wh.6kkHEUj2dN%U0\rUMTj+LH `w*\n\"\\0g \rѼ|dLTstG0hM0b3f$5lH i&B馿!t|z@UMe`m{4*%V.m*(C1Zf\r3;ÆUsن\"-.9J>tL~H,$~vfUFYVEqE˒S.:t7Vg5u;Ys=YFZRk}OJ\Zmiv2rVӍBl[rdD;k)^2-gQ~ESAjƴS<0\0\0\0\0\0\0\0vSę>\'9خ 豆8$򌩵œUY)O&DH]6B&KMeNDSL8d#z9۔g,ܮG w7GggU)F]Esi-DRd{-e|jwK P䗴[f\\rZ\\kpqҾ.oUuZn)XFd5Q1ec@J{LX(GԽ3\\[a,|M.kQ&_,R\ZK6>i#2Y*h@Wu+-.q\'c)Z]X\'fIQ0J-DdJZ)%\0#[ڋѓNVeM|<qEK>Yk[\ZYN \"ZyTGV\ZĢ5MGROO&7 ;_Ou[7Q?0RvVg#۔+E1vl\0\0\0\0\0?Ɯ^0RlwέlFݒRב̋rK3=2###h,I7_Cku齒笩Y;a{`\0\0\'uXhY\'qEIx}RÓI_/_#qGOO%3.\'\\m>t27 36(FffJw_C44yZ*\0\0\0\0\0\\1.۷C6yC2t2$3K\\.K\r^\'GE);S/ҟEs,f/qB5qC\"Ǯm̕gx/6l5|*Io$}X\0]Uza jvC0)8.opcև6\'R (WJ\"Sf>UKS*TΦ=72?[ َ\0u&|5\"-Uh ǭ\nV#9Mԗ;H$i5\"̢:g&\0\0\0\0\0كF&7<!E4/R5U*\n*:$N$\ZҎlk/ )=9&Qeؽ\r>1\ZT|JmFJnwiNo[/8& q,K\r5qvs\'\ZPHGzjY|F2?jj|\0໩\nLKcA_.(\ZJ LjȪ\Zy\"}ݽεՃeS5:$n\Z[ δ\"dF((Y\ZQvLGMy!z\'GǾƷu(%;<\0\0\0\0\0?յnn\nm3\"\"\"=ؼ\'x8x-aESl13K Yx%rJrRY5B$E=4k_ć&N\Z_kHQ;wdW)%/y}\')5i([xrIW+]}f,\n^G,sJ\'8ӫzLKZ%l$Y(:]6\0㴒Mʮ%y2=ޟ${;SؔI-mzѸU)hc,Xۭѹ›C;ccg)-TZSBV^S2%l@roW8&اi;6{{IY\\J6ڒ\"\"J|w\"-)`tJKq:}74QoӕI4{uHn0BaG\'w~x-5:@\0\0\0\0|(\\-ek$ c\' 4W\"+HSw:%25Ȉ׶ܜ>E{殸g]hѣ\"3i_0MEK[EmFI tҦeϨWۧڥZ%./k0cU\\Jr [GKUkFfJ[D=(l\'\0\0\0\0\0\0= 1Wή1n\ZݪLV,ګV0^`q-O52dfJy|e9\rO*d=\09.s\Z\0&V [u; ۺK_Q(d^xp:L5\\+幞Y{Cۧ@\0\0\0\0\0\0@R:XR{f鷺z\Z{7Gx\0\reK)Z4.=bWfyi=l>Lp\0pt=UrG\'zR/J\0\0\0\0\0\0\"C?\ZQS(m]q6Hܷ=[zy%O\'`1@BWaA1#hC(9?MQH\"3-cѷ= DZWlהmLISw.оʈ2 v\0\0\0\0\0\0uhJ8=UCh<^;/F 鱴zmI\"\0\0޻\0cd5CήҦ5l֋-Nm R~wB߀\0\0\0\0\0\0׎JO\ZO;\'0g ynwd.\0\0\0T^G\0]\0?/.2\0\0\0\0\0\0\0`TV*h:mL܌\0\0\0\0\0\0\0\0\0\0\0\0',4,1,'','','',''),(11,4,0,'75859b10a64380c7','97611ba91637997e24ea7ad58fb9cb2e','2017-09-07 08:59:16','2017-09-07 08:59:16','','','Profile photos','person-175.jpg','image/jpeg',80,80,2697,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \0P\0P\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n \01\0\0\0\0\0\0\0\0 !1\n\"QqA#3\0\0\0?\0M5Aq\04M5ݸt=X\"™!Dp< _xrYCêT,Qrd其aɖ+z4d2:AY1.ZF`Hk7>CbMrIU*UXznh6FCŰjR6g\Z 6@IM4\nP)\' c-^je[JEt\0lA5*ga\'2א\rjXOR_]ds8$+\' ۬L%hAu(VHVW&8\'zr \napp~o\0\">?:;pMT.cר%\'g>xkx3Ԫ*j*srRs&vma\r00n];_oow[sŕs\'_Xcՙ7?D} ݦk/d\\7v۸n0UXȬRU#57%9L%0 D@uo\'l95Rs1Y23T<$oKD~.`Wz$_\'@ꑄk\Zܐ3x,31fWdaq*uZc W,,~V\"N[.O=Pt*Ed]D7@˶GѱBfc\nuʹUV쁍E\"tZg)\njrшN`MQ6i)KxøY%tSLW?w_\n!R; )ٴhzIؼR@\n=M5[n?ܣx©1b~cE e\n>@.,So =t٫tr ͎ r$eBt6*$q:+$.&7\")Af]KiyFWn6/uKD<}ӞBuah+#Qt72D*Vm59ESNCV`);\nVVe]@ŠFѰɢ:9dȃfQM!JB\0jw-ۈoŷrU$p[$3qm1Sp(, ʒΘ$#ۻ@=td젆QVOX7>;\rDȕ0uI{,IWJ5 pe9L_!۸~{~uϐ?\0\ZBkWYtu ]8wh.6kkHEUj2dN%U0\rUMTj+LH `w*\n\"\\0g \rѼ|dLTstG0hM0b3f$5lH i&B馿!t|z@UMe`m{4*%V.m*(C1Zf\r3;ÆUsن\"-.9J>tL~H,$~vfUFYVEqE˒S.:t7Vg5u;Ys=YFZRk}OJ\Zmiv2rVӍBl[rdD;k)^2-gQ~ESAjƴS<0\0\0\0\0\0\0\0vSę>\'9خ 豆8$򌩵œUY)O&DH]6B&KMeNDSL8d#z9۔g,ܮG w7GggU)F]Esi-DRd{-e|jwK P䗴[f\\rZ\\kpqҾ.oUuZn)XFd5Q1ec@J{LX(GԽ3\\[a,|M.kQ&_,R\ZK6>i#2Y*h@Wu+-.q\'c)Z]X\'fIQ0J-DdJZ)%\0#[ڋѓNVeM|<qEK>Yk[\ZYN \"ZyTGV\ZĢ5MGROO&7 ;_Ou[7Q?0RvVg#۔+E1vl\0\0\0\0\0?Ɯ^0RlwέlFݒRב̋rK3=2###h,I7_Cku齒笩Y;a{`\0\0\'uXhY\'qEIx}RÓI_/_#qGOO%3.\'\\m>t27 36(FffJw_C44yZ*\0\0\0\0\0\\1.۷C6yC2t2$3K\\.K\r^\'GE);S/ҟEs,f/qB5qC\"Ǯm̕gx/6l5|*Io$}X\0]Uza jvC0)8.opcև6\'R (WJ\"Sf>UKS*TΦ=72?[ َ\0u&|5\"-Uh ǭ\nV#9Mԗ;H$i5\"̢:g&\0\0\0\0\0كF&7<!E4/R5U*\n*:$N$\ZҎlk/ )=9&Qeؽ\r>1\ZT|JmFJnwiNo[/8& q,K\r5qvs\'\ZPHGzjY|F2?jj|\0໩\nLKcA_.(\ZJ LjȪ\Zy\"}ݽεՃeS5:$n\Z[ δ\"dF((Y\ZQvLGMy!z\'GǾƷu(%;<\0\0\0\0\0?յnn\nm3\"\"\"=ؼ\'x8x-aESl13K Yx%rJrRY5B$E=4k_ć&N\Z_kHQ;wdW)%/y}\')5i([xrIW+]}f,\n^G,sJ\'8ӫzLKZ%l$Y(:]6\0㴒Mʮ%y2=ޟ${;SؔI-mzѸU)hc,Xۭѹ›C;ccg)-TZSBV^S2%l@roW8&اi;6{{IY\\J6ڒ\"\"J|w\"-)`tJKq:}74QoӕI4{uHn0BaG\'w~x-5:@\0\0\0\0|(\\-ek$ c\' 4W\"+HSw:%25Ȉ׶ܜ>E{殸g]hѣ\"3i_0MEK[EmFI tҦeϨWۧڥZ%./k0cU\\Jr [GKUkFfJ[D=(l\'\0\0\0\0\0\0= 1Wή1n\ZݪLV,ګV0^`q-O52dfJy|e9\rO*d=\09.s\Z\0&V [u; ۺK_Q(d^xp:L5\\+幞Y{Cۧ@\0\0\0\0\0\0@R:XR{f鷺z\Z{7Gx\0\reK)Z4.=bWfyi=l>Lp\0pt=UrG\'zR/J\0\0\0\0\0\0\"C?\ZQS(m]q6Hܷ=[zy%O\'`1@BWaA1#hC(9?MQH\"3-cѷ= DZWlהmLISw.оʈ2 v\0\0\0\0\0\0uhJ8=UCh<^;/F 鱴zmI\"\0\0޻\0cd5CήҦ5l֋-Nm R~wB߀\0\0\0\0\0\0׎JO\ZO;\'0g ynwd.\0\0\0T^G\0]\0?/.2\0\0\0\0\0\0\0`TV*h:mL܌\0\0\0\0\0\0\0\0\0\0\0\0',4,1,'','','',''),(14,5,0,'75859b10a89b26b7','1e6e86cff989b84650c44bf8f408250a','2017-09-07 08:59:53','2017-09-07 08:59:53','','','Profile photos','person-175.jpg','image/jpeg',80,80,2697,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \0P\0P\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n \01\0\0\0\0\0\0\0\0 !1\n\"QqA#3\0\0\0?\0M5Aq\04M5ݸt=X\"™!Dp< _xrYCêT,Qrd其aɖ+z4d2:AY1.ZF`Hk7>CbMrIU*UXznh6FCŰjR6g\Z 6@IM4\nP)\' c-^je[JEt\0lA5*ga\'2א\rjXOR_]ds8$+\' ۬L%hAu(VHVW&8\'zr \napp~o\0\">?:;pMT.cר%\'g>xkx3Ԫ*j*srRs&vma\r00n];_oow[sŕs\'_Xcՙ7?D} ݦk/d\\7v۸n0UXȬRU#57%9L%0 D@uo\'l95Rs1Y23T<$oKD~.`Wz$_\'@ꑄk\Zܐ3x,31fWdaq*uZc W,,~V\"N[.O=Pt*Ed]D7@˶GѱBfc\nuʹUV쁍E\"tZg)\njrшN`MQ6i)KxøY%tSLW?w_\n!R; )ٴhzIؼR@\n=M5[n?ܣx©1b~cE e\n>@.,So =t٫tr ͎ r$eBt6*$q:+$.&7\")Af]KiyFWn6/uKD<}ӞBuah+#Qt72D*Vm59ESNCV`);\nVVe]@ŠFѰɢ:9dȃfQM!JB\0jw-ۈoŷrU$p[$3qm1Sp(, ʒΘ$#ۻ@=td젆QVOX7>;\rDȕ0uI{,IWJ5 pe9L_!۸~{~uϐ?\0\ZBkWYtu ]8wh.6kkHEUj2dN%U0\rUMTj+LH `w*\n\"\\0g \rѼ|dLTstG0hM0b3f$5lH i&B馿!t|z@UMe`m{4*%V.m*(C1Zf\r3;ÆUsن\"-.9J>tL~H,$~vfUFYVEqE˒S.:t7Vg5u;Ys=YFZRk}OJ\Zmiv2rVӍBl[rdD;k)^2-gQ~ESAjƴS<0\0\0\0\0\0\0\0vSę>\'9خ 豆8$򌩵œUY)O&DH]6B&KMeNDSL8d#z9۔g,ܮG w7GggU)F]Esi-DRd{-e|jwK P䗴[f\\rZ\\kpqҾ.oUuZn)XFd5Q1ec@J{LX(GԽ3\\[a,|M.kQ&_,R\ZK6>i#2Y*h@Wu+-.q\'c)Z]X\'fIQ0J-DdJZ)%\0#[ڋѓNVeM|<qEK>Yk[\ZYN \"ZyTGV\ZĢ5MGROO&7 ;_Ou[7Q?0RvVg#۔+E1vl\0\0\0\0\0?Ɯ^0RlwέlFݒRב̋rK3=2###h,I7_Cku齒笩Y;a{`\0\0\'uXhY\'qEIx}RÓI_/_#qGOO%3.\'\\m>t27 36(FffJw_C44yZ*\0\0\0\0\0\\1.۷C6yC2t2$3K\\.K\r^\'GE);S/ҟEs,f/qB5qC\"Ǯm̕gx/6l5|*Io$}X\0]Uza jvC0)8.opcև6\'R (WJ\"Sf>UKS*TΦ=72?[ َ\0u&|5\"-Uh ǭ\nV#9Mԗ;H$i5\"̢:g&\0\0\0\0\0كF&7<!E4/R5U*\n*:$N$\ZҎlk/ )=9&Qeؽ\r>1\ZT|JmFJnwiNo[/8& q,K\r5qvs\'\ZPHGzjY|F2?jj|\0໩\nLKcA_.(\ZJ LjȪ\Zy\"}ݽεՃeS5:$n\Z[ δ\"dF((Y\ZQvLGMy!z\'GǾƷu(%;<\0\0\0\0\0?յnn\nm3\"\"\"=ؼ\'x8x-aESl13K Yx%rJrRY5B$E=4k_ć&N\Z_kHQ;wdW)%/y}\')5i([xrIW+]}f,\n^G,sJ\'8ӫzLKZ%l$Y(:]6\0㴒Mʮ%y2=ޟ${;SؔI-mzѸU)hc,Xۭѹ›C;ccg)-TZSBV^S2%l@roW8&اi;6{{IY\\J6ڒ\"\"J|w\"-)`tJKq:}74QoӕI4{uHn0BaG\'w~x-5:@\0\0\0\0|(\\-ek$ c\' 4W\"+HSw:%25Ȉ׶ܜ>E{殸g]hѣ\"3i_0MEK[EmFI tҦeϨWۧڥZ%./k0cU\\Jr [GKUkFfJ[D=(l\'\0\0\0\0\0\0= 1Wή1n\ZݪLV,ګV0^`q-O52dfJy|e9\rO*d=\09.s\Z\0&V [u; ۺK_Q(d^xp:L5\\+幞Y{Cۧ@\0\0\0\0\0\0@R:XR{f鷺z\Z{7Gx\0\reK)Z4.=bWfyi=l>Lp\0pt=UrG\'zR/J\0\0\0\0\0\0\"C?\ZQS(m]q6Hܷ=[zy%O\'`1@BWaA1#hC(9?MQH\"3-cѷ= DZWlהmLISw.оʈ2 v\0\0\0\0\0\0uhJ8=UCh<^;/F 鱴zmI\"\0\0޻\0cd5CήҦ5l֋-Nm R~wB߀\0\0\0\0\0\0׎JO\ZO;\'0g ynwd.\0\0\0T^G\0]\0?/.2\0\0\0\0\0\0\0`TV*h:mL܌\0\0\0\0\0\0\0\0\0\0\0\0',4,1,'','','',''),(17,6,0,'75859b10ab07f500','240eef737fb1a7e5d0bf2425f9f4030e','2017-09-07 09:00:32','2017-09-07 09:00:32','','','Profile photos','person-175.jpg','image/jpeg',80,80,2697,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \0P\0P\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n \01\0\0\0\0\0\0\0\0 !1\n\"QqA#3\0\0\0?\0M5Aq\04M5ݸt=X\"™!Dp< _xrYCêT,Qrd其aɖ+z4d2:AY1.ZF`Hk7>CbMrIU*UXznh6FCŰjR6g\Z 6@IM4\nP)\' c-^je[JEt\0lA5*ga\'2א\rjXOR_]ds8$+\' ۬L%hAu(VHVW&8\'zr \napp~o\0\">?:;pMT.cר%\'g>xkx3Ԫ*j*srRs&vma\r00n];_oow[sŕs\'_Xcՙ7?D} ݦk/d\\7v۸n0UXȬRU#57%9L%0 D@uo\'l95Rs1Y23T<$oKD~.`Wz$_\'@ꑄk\Zܐ3x,31fWdaq*uZc W,,~V\"N[.O=Pt*Ed]D7@˶GѱBfc\nuʹUV쁍E\"tZg)\njrшN`MQ6i)KxøY%tSLW?w_\n!R; )ٴhzIؼR@\n=M5[n?ܣx©1b~cE e\n>@.,So =t٫tr ͎ r$eBt6*$q:+$.&7\")Af]KiyFWn6/uKD<}ӞBuah+#Qt72D*Vm59ESNCV`);\nVVe]@ŠFѰɢ:9dȃfQM!JB\0jw-ۈoŷrU$p[$3qm1Sp(, ʒΘ$#ۻ@=td젆QVOX7>;\rDȕ0uI{,IWJ5 pe9L_!۸~{~uϐ?\0\ZBkWYtu ]8wh.6kkHEUj2dN%U0\rUMTj+LH `w*\n\"\\0g \rѼ|dLTstG0hM0b3f$5lH i&B馿!t|z@UMe`m{4*%V.m*(C1Zf\r3;ÆUsن\"-.9J>tL~H,$~vfUFYVEqE˒S.:t7Vg5u;Ys=YFZRk}jʮHnlIfhM6&\";MDD]¿SRchB{tƤGVMʽ4$&2\"%{̈}9$489hۆ @e崭\ZطHlMT:!M2aLc/RiCrT\ZuΥ$FIN춆q5S,-Bc^op}AW8Y)c?T2FiդkI$bՓ鐸A\\<FhŭܿIk)3^Nٓwu]kU4J8W*F7`^U:VңI%̷?|C{Oh[:rqğ 0\\\Ze0\\ޅ\Z.RvZNOI\n#O v-ikFo;EIձ5\ZRv!,\\4;MyE3ta9B:̌[XTh_\"r4k*F\\U:Mz\0u#\0C\0\0\0\0\0>frZ\\kpqҾ.oUuq-SCJKPSǬf2JJGD Ym+>!҄^\n\'/{} W7-K;KkI (;TF\rH̖J\0Jsj K\0mp֫WV\'\"IٹjTlx;ҤO,RԐǖ edK:8<)5hy Ów r*-0BfJ& u:fIVr:rjh.p甴9 MH>듲pgBҲ4:{-RTPMHZRw+|)DqKєW2WejO{F|aM)xhʴH-IF3捩Gِ\0\0\0\0\0qd-B\\*uDZnǮ~4gfGyN-mݯm(ָmWWIoԺw2IHX%Lza֞XY;$DQ{}54;9)k3S2%-|Ĕ\0EɧT|+2BBHUyK>Yk[\ZYN \"ZyTGV\ZĢ5MGROO&7 ;_Ou[7O?0RvVg#۔+E1[ٲ\0\0\0\0\0;X\ZqzqJ2c:#vIK^Fk4B/X﹑E4ehM88(:\0s2ia{CT\0XRJdz]d݉ ,1r~6DdGOBg&f)e+/4TQjѰ~wc8ڤFgTճG[M\')?JUDR)6v[#E3$n=JK\'Dq18򄭴7(UueLtv2ҤTK[o\0>}FH\0\0\0\0\0B\0Lvx(Ʋ93O\"\noHPQiJU;G\\/e>oQ{hnW^\0S8{\"ΛJK\\*G1)|\'s6@Mo+@:euw;uY*9rOl4YLԲ3Q#\"5E}qSSGHRb]{~&B\nq@wgvQg_=rcW6EPj\"؊vׇv{:׎V\r}LdD[u_^ ?!y֑p<[L^Z}ӵk;[cJ.ɖ6鲔$/DY[kwRD\0\0\0\0.nNnv\rvsvupVV6;o̥M\'x8x-aESl13K Yx%rJrRY5B$e=4_ć&N\Z_kHQ;wdW/+^&)5i(-Z<9sN.jM #p9hԥiʼnQ=&UOQnQԔla\\.\\\0㴒Mʮ%y2=ޟ]ZB˩J$\0-FX R2bX01[#s;=\Z\r&QiOwM Z-:i)tY.ϺfbVZ:Z`W%T3>I>FdF-$j#;*O$)R])}[d\0 z~BпgG 4L=c&n3κu6[8eTҔ.GUF(G$^Jڑ\rſqخwZ\rnÙL5>wv$Rb2{UB?H LAFLi%`TjѫQ\0>\0\0\0\0SG M%BIy[뽊G?t/ǘP4% YT*\">a&}bpija־x[Wnb\' +H%L3ȬNC+RW\nbL+`\0\0\0!MWp᭭gk&4qSGe:O-]1Iw#277Q%!T2C0Ҵ>MYV8#chV(vvTN-~=I[WM5㿀rnue0[ΝX$!DB;0z>S%&Fxʗ1+cRղGB)r]/q Ïz ύ9U/%,/SrCj(\\d$DeQȵ}Bj+n--ܧem3뷐 \0q65YRGX:a:\\\'{V(CӪ\Z.7p42cZQz_j6{s}ARrҋӗx^_է$R#N+j}\Z4hQ>[E\0 \0\0\0\0Rtwؾ~{|\00 \"8\"M/j9E-`អ\r-[,&ooL)&\r1EE)aM|i:{Lٞw,dRt aKBf 5Ô5b%֡ZuZꅊqNL2ÕoY↚}LVB\00ւ7s\0D{IN\n_J;)Tʮ>)URUVPlЏ`lD4SM8\rfѲ*HiP)CPO 3{a%yV)ynYiE3IVh; 8ݴʛG]5b~=I~}vݐr(C/mXHrN*ߎ\\==ZQed{\\nX^¹Z2TƓe%W\"\"wFVeL8$@KaM`9Gzvies^qY99(h9HF`kd)I$Br\n\"n5}. 9l2m&\nb+$V`\n\0++9W0hqqG\0GZ~. ׬c8o\rO5b61T\ZEW%BNnTJU2gfܤlu遅-r߲}M{2۞,[:\0^2֫ADH.a~X{\'?,5CfKW2}ߝ$+O0T\'cXXlfq 0# 8U(+*e ra`[Jprw휢VE+$z!]=j33WۮUȇb7f j,׳>NPHG,yQ\r u:%Ühƙi\'l;\"WI܅4R+EnQ*?&a%:6\rUM-(\0\08\0?\\^ᝠ+>*)1PPa$b:Vp097MLN!a-oX\0yLY#*_nT~%{]NI${LquI7i0qiw\'M-\Z^<]/)u NxU mX{ԬFYc(Vk0MlYlDf]Ou:YR0+ZZ!\rv[FG&(-D4jh\nR\05۾ۍSw{ae;qZ_ʴDdr6ͺT=J )H(r& &nk  bXBٓGmY> El\'x|5\"FrO& y%^\Zn(:ԓH*1{@b^\\k!令#\0#X3]Rzl \0 #\rD1t[gfZB*Q\"q*уjj$VZbE YPQ8~1$ s8XhFDG7M|lsѓ-QI6mRIV$ $P}4.!^5\n⾪\rfYT}ګEM|Usc=GmK;LcwO0Q={hc):Ě cr\\n귺{iU_7&L7)ӷ~\rK^fX,%_q8Z)+_#v,dSѓդyy\r?^RvYvSbL>Ee ^/q:V!Yd7M4V }+Jض WH K*$ y*Q1J#MPH`!C~T7<_]CL~IoݒU\0uE} V֘~ $RM4PC/a3-dLn.cdۛώЌb80b鮸4nNWJuWިcQrd\" TJ\0*Gi͸+E1vFhG敲MUuQIC\0qɓ/!ֿ',5,0,'','','',''),(21,3,7,'75859b10b87ebc39','18a7495723879503dac64b352e245508','2017-09-07 09:19:08','2017-09-07 09:19:08','','','Contact Photos','4b7db531ad1920a7cb8fb76aed46ddd9-4.jpg?ts=1504775575','image/jpeg',48,48,1755,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \00\00\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa\0\0\0?\03csǜ?1{pK]_r\0BsK]n 4dfZ%ӣ ³+r0m&i-jAg>%hM%C¿pO!6xie5H)LWle!k:Thq2ڰNݴMj6A7?qYˌgZ[DEn&Z]-mnBa![v\\h2BaRI?<~/y=dG3JM[ݨ` ԭyN\0ɚȥ֐YʈO`=y| Ҽ&-Fmf+`<q{*En՘g$Y`P#I%;B~NMX}\']؜\ZlcޒZFQ.6?` />>J[X㦣`3l8m%X<=j2.L21\"D70Ĉ2+I1Kwn^i>%T%cƺx]l_/CXJRByŸQ-+μ+ug\\yJ7t{2U0OHmYF]qZa$fdB2FzXK3xq,8+-#?*\ZFV)/%xR3e0(b0Š;# ;Kl\r%YecCM6\'JP%81zWmJeZ⁜[&+i!.>Vz8XE}+d\r\0!PeաiUtvO;}qje0åi?~A-٘H q-b> \Z+9#7x1\Z\Ze=`t,\n\0\"\nn:x%zsϤ?z|գcuS?KR+1UhahTc%A1>?B\0',6,0,'','','',''),(22,0,2,'75859b10b87f222d','4b7db531ad1920a7cb8fb76aed46ddd9','2017-09-07 09:12:55','2017-09-07 09:12:55','','','Contact Photos','f958f83dd2af4c30b30045dfc6ff0718-4.jpg?ts=1504775108','image/jpeg',175,175,5493,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n  \0B\0\0 \0\0\0\0\0 !\n1A\"Qaq%23#$&5BREs\0\0\0?\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*ՆX\Z\'p|LsN}Y%ZR|(J*I&+rJ#yI)%lZ,:i(ϥ)J*hχoмI$Dj- (C\"cI(s_L:g `wI9s.wYaC\"3:Ie~g,ڮϨ6&tt/iKxvEqE˒S.:t7Vg5u;Ys=YFZRk}jʮHnlIfhM6&\";MDD]¿SRchB{tƤGVMʽ4$&2\"%{̈}9$489hۆ @e崭\ZطHlMT:!M2aLc/RiCrT\ZuΥ$FIN춆q5S,-Bc^op}AW8Y)c?T2FiդkI$bՓ鐸A\\<FhŭܿIk)3^Nٓwu]kU4J8W*F7`^U:VңI%̷?|C{Oh[:rqğ 0\\\Ze0\\ޅ\Z.RvZNOI\n#O v-ikFo;EIձ5\ZRv!,\\4;MyE3ta9B:̌[XTh_\"r4k*F\\U:Mz\0u#\0C\0\0\0\0\0>frZ\\kpqҾ.oUuq-SCJKPSǬf2JJGD Ym+>!҄^\n\'/{} W7-K;KkI (;TF\rH̖J\0Jsj K\0mp֫WV\'\"IٹjTlx;ҤO,RԐǖ edK:8<)5hy Ów r*-0BfJ& u:fIVr:rjh.p甴9 MH>듲pgBҲ4:{-RTPMHZRw+|)DqKєW2WejO{F|aM)xhʴH-IF3捩Gِ\0\0\0\0\0qd-B\\*uDZnǮ~4gfGyN-mݯm(ָmWWIoԺw2IHX%Lza֞XY;$DQ{}54;9)k3S2%-|Ĕ\0EɧT|+2BBHUyK>Yk[\ZYN \"ZyTGV\ZĢ5MGROO&7 ;_Ou[7O?0RvVg#۔+E1[ٲ\0\0\0\0\0;X\ZqzqJ2c:#vIK^Fk4B/X﹑E4ehM88(:\0s2ia{CT\0XRJdz]d݉ ,1r~6DdGOBg&f)e+/4TQjѰ~wc8ڤFgTճG[M\')?JUDR)6v[#E3$n=JK\'Dq18򄭴7(UueLtv2ҤTK[o\0>}FH\0\0\0\0\0B\0Lvx(Ʋ93O\"\noHPQiJU;G\\/e>oQ{hnW^\0S8{\"ΛJK\\*G1)|\'s6@Mo+@:euw;uY*9rOl4YLԲ3Q#\"5E}qSSGHRb]{~&B\nq@wgvQg_=rcW6EPj\"؊vׇv{:׎V\r}LdD[u_^ ?!y֑p<[L^Z}ӵk;[cJ.ɖ6鲔$/DY[kwRD\0\0\0\0.nNnv\rvsvupVV6;o̥M\'x8x-aESl13K Yx%rJrRY5B$e=4_ć&N\Z_kHQ;wdW/+^&)5i(-Z<9sN.jM #p9hԥiʼnQ=&UOQnQԔla\\.\\\0㴒Mʮ%y2=ޟ]ZB˩J$\0-FX R2bX01[#s;=\Z\r&QiOwM Z-:i)tY.ϺfbVZ:Z`W%T3>I>FdF-$j#;*O$)R])}[d\0 z~BпgG 4L=c&n3κu6[8eTҔ.GUF(G$^Jڑ\rſqخwZ\rnÙL5>wv$Rb2{UB?H LAFLi%`TjѫQ\0>\0\0\0\0SG M%BIy[뽊G?t/ǘP4% YT*\">a&}bpija־x[Wnb\' +H%L3ȬNC+RW\nbL+`\0\0\0!MWp᭭gk&4qSGe:O-]1Iw#277Q%!T2C0Ҵ>MYV8#chV(vvTN-~=I[WM5㿀rnue0[ΝX$!DB;0z>S%&Fxʗ1+cRղGB)r]/q Ïz ύ9U/%,/SrCj(\\d$DeQȵ}Bj+n--ܧem3뷐 \0q65YRGX:a:\\\'{V(CӪ\Z.7p42cZQz_j6{s}ARrҋӗx^_է$R#N+j}\Z4hQ>[E\0 \0\0\0\0Rtwؾ~{|\00 \"8\"M/j9E-`អ\r-[,&ooL)&\r1EE)aM|i:{Lٞw,dRt aKBf 5Ô5b%֡ZuZꅊqNL2ÕoY↚}LVB\00ւ7s\0D{IN\n_J;)Tʮ>)URUVPlЏ`lD4SM8\rfѲ*HiP)CPO 3{a%yV)ynYiE3IVh; 8ݴʛG]5b~=I~}vݐr(C/mXHrN*ߎ\\==ZQed{\\nX^¹Z2TƓe%W\"\"wFVeL8$@KaM`9Gzvies^qY99(h9HF`kd)I$Br\n\"n5}. 9l2m&\nb+$V`\n\0++9W0hqqG\0GZ~. ׬c8o\rO5b61T\ZEW%BNnTJU2gfܤlu遅-r߲}M{2۞,[:\0^2֫ADH.a~X{\'?,5CfKW2}ߝ$+O0T\'cXXlfq 0# 8U(+*e ra`[Jprw휢VE+$z!]=j33WۮUȇb7f j,׳>NPHG,yQ\r u:%Ühƙi\'l;\"WI܅4R+EnQ*?&a%:6\rUM-(\0\08\0?\\^ᝠ+>*)1PPa$b:Vp097MLN!a-oX\0yLY#*_nT~%{]NI${LquI7i0qiw\'M-\Z^<]/)u NxU mX{ԬFYc(Vk0MlYlDf]Ou:YR0+ZZ!\rv[FG&(-D4jh\nR\05۾ۍSw{ae;qZ_ʴDdr6ͺT=J )H(r& &nk  bXBٓGmY> El\'x|5\"FrO& y%^\Zn(:ԓH*1{@b^\\k!令#\0#X3]Rzl \0 #\rD1t[gfZB*Q\"q*уjj$VZbE YPQ8~1$ s8XhFDG7M|lsѓ-QI6mRIV$ $P}4.!^5\n⾪\rfYT}ګEM|Usc=GmK;LcwO0Q={hc):Ě cr\\n귺{iU_7&L7)ӷ~\rK^fX,%_q8Z)+_#v,dSѓդyy\r?^RvYvSbL>Ee ^/q:V!Yd7M4V }+Jض WH K*$ y*Q1J#MPH`!C~T7<_]CL~IoݒU\0uE} V֘~ $RM4PC/a3-dLn.cdۛώЌb80b鮸4nNWJuWިcQrd\" TJ\0*Gi͸+E1vFhG敲MUuQIC\0qɓ/!ֿ',5,0,'','','',''),(24,0,2,'75859b10b87f222d','4b7db531ad1920a7cb8fb76aed46ddd9','2017-09-07 09:12:55','2017-09-07 09:12:55','','','Contact Photos','f958f83dd2af4c30b30045dfc6ff0718-4.jpg?ts=1504775108','image/jpeg',48,48,1755,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \00\00\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa\0\0\0?\03csǜ?1{pK]_r\0BsK]n 4dfZ%ӣ ³+r0m&i-jAg>%hM%C¿pO!6xie5H)LWle!k:Thq2ڰNݴMj6A7?qYˌgZ[DEn&Z]-mnBa![v\\h2BaRI?<~/y=dG3JM[ݨ` ԭyN\0ɚȥ֐YʈO`=y| Ҽ&-Fmf+`<q{*En՘g$Y`P#I%;B~NMX}\']؜\ZlcޒZFQ.6?` />>J[X㦣`3l8m%X<=j2.L21\"D70Ĉ2+I1Kwn^i>%T%cƺx]l_/CXJRByŸQ-+μ+ug\\yJ7t{2U0OHmYF]qZa$fdB2FzXK3xq,8+-#?*\ZFV)/%xR3e0(b0Š;# ;Kl\r%YecCM6\'JP%81zWmJeZ⁜[&+i!.>Vz8XE}+d\r\0!PeաiUtvO;}qje0åi?~A-٘H q-b> \Z+9#7x1\Z\Ze=`t,\n\0\"\nn:x%zsϤ?z|գcuS?KR+1UhahTc%A1>?B\0',6,0,'','','',''),(25,2,8,'75859b10b880d425','5b0e9c6920adcf8efafaf3743d0e0c6c','2017-09-07 09:16:42','2017-09-07 09:16:42','','','Contact Photos','3.jpg','image/jpeg',175,175,5486,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n  \0B\0\0 \0\0\0\0\0 !\n1A\"Qaq%23R#$&5BEs\0\0\0?\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*ՆX\Zgp|LsN}Y%ZR|(J*I&+rJ#yI)%lZ,:i(ϥ)J*hχo>$Œd \"5ɐbo9/צF3qN;뤂9;߬Kka0Z$ԲOb3gWqgUlW\0ĺQ<;J;剽ŒTh܋}h>#\0\0\0\0\0\0\0>=]Xwg-8i9uN梿ݱ^-l$$5Rt\"e):G+3Ϛͺ,-d5ܾn~5SeW$76sS$4SME\"\"O._)YŽ1\rX!M\nmyKlR#kM&^o|ML}IjOD>OJ\Zmiv2rVӍBl[rdD;k2dZ8($h:״y}`\0\0\0\0\0\0\08ƣ37 } Nsſ]Ec pJL򄩵œU<Y)O&$.!EQ%NCSL8d#z9㔚g,ܮG w7GggU)F]EsI-DS:{-e|jwK P䗴[듲pgBҲ:t[I줩*¤VpS◣(dBŗ4B. su= =4ᢙKAeZ$qu餣}Fԣ\0\0\0\0\0\nYNo!Nj{\"F-zyc?s\Z I3#̼˧Q\rk\\]6PꫫUr$]MIN^|$^u,ݦ=0O,Vt,p]I(F\Z̔QbJIDl\0dӪ>o!Sg[$i*<\\Qng|Qu,,tu-<#\rbQ\Z&vc٧u-\'Bb);C3haKr\"ۘr-\0\0\0\0\0Ky8qa^1[؍$#5K,JLȌaLs&[d1\rצKɧ=\0DxaÓ_Udǁ5%~<&ܾ^G⏚_Kωf\\O2ث=t27 36FffJw&M^DDV\0\0\0\0\0A-GM:]\ZN/&ɛ3:Rv_?]%0^w ghF˭3橯c`jGf=hR ȪnG)#I&e696\0\0\0\0\0\0L4/6v91!\r),~*Rg#URij\"rNPkJ;m>bd&XFޭb48KKT\\h^Q̶#I\ZhWe+_ͺɧI;\nF.Vw)7|U-R/1.t2fsniEu?bDV2#Cau33q2jwZqN?;^XR#g3Dj֣&\nI*);-xj7A%GiŢV8TNBVERe*WZMQi;iR*h-\0>$\0\0\0\0\0!}Lvx(Ʋ93O\"\noHPQiJU;G\\/e>oQ{hnW^\0S8{\"ΛJK\\*G1)|\'s6@Mo+@:euw;uY*9rOl4YLԲ3Q#\"5E}qSSGHRb]{~&B\nq@wgvQg_=rcW6EPj\"؊vׇv{:׎V\r}LdD[u_^ ?!y֑p<[L^Z}ӵk;[cJ.ɖ6鲔$/DY[kwRD\0\0\0\0.nNnv\rvsvupVV6;o̥M\'x8x-aESl13K Yx%rJrRY5B$e=4_ć&N\Z_kHQ;wdW/+^&)5i([xrIW+]}f,\n^G,sJ\'8ӫzL+Z%l$Y(:]6\0ei%v]Jd{o?${;SؔI-[l;ǢeŎ3lb`cnFv6{\nm 퍍JZ\\dJ2ڀ#opMNӷw8m2i$dm$EjDMr\"bvKȴ4s܈\ZSENU\'|{uHn0BaG\'w~x-5:@\0\0\0\0|(\\-es$ c\' 4W\"+HSw:%25Ȉ׶ܜ3B\rW\\e34hё/Zq&%-¢$ʄʺiS2g@ +mRӭVNQ\\5[B챌hx%kk91&rQ%Hjp՗htזf,a\"ڪA@d&b\n4cI+\0-RV^_gG<\0\0\0\0Wc3M214V9&n)мsc73MB/ǬD<%ePJXGZ!m_UX:,m0y#𖦳U2SD\"9 I^)#\r2]\0\0\0<;~bj\rmk;^I5]28)~j2K!d dFI) ]_8q:j:űEڱFn`=ZqmL}$JJZiwhtK->)t%\Zy&\"$r0~Ʊك)23T[\Z:LL*{f{^|m|D5WtRy)dzX.QD&G\"$#YT/RBrMŵź쭶}>{v\0\0>_;.&ƹ *H6L\'R $jhuzuQvCQEҦ:y}ƚU,kJ!Y>}Fк/no3NZQw35r+dJRDvеmOF\n\'k~|H38\0\0\0\0\0cGT/]/_?F92GIMZ1\'(l3AKuŒRM4w$ԙ!(RH\'~.3,3u (s@#.m1HwK[:vtG\'9&2D$N0Yu\nn4:J_# \0+ˮ&8H\ZWҾSidr؍ed}K{L:1\rqjNě(Z735T_s\0\0\0\0\0\0Ɣd~?T\02}nj눝F o1-y ]čhv9nQHȌm{>m H:5;{#RTKy~2v\0\0\0\0\0\0uhJ8=UCh<^;F [L6$\0\0EJ]]z2ƣszT8ƭ{\Zx*P} c鷐\0\0\0\0\0\0\ZI7IwD\0& q-Î>鿡\r\0\0%H?yt!\0\0\0\0\0\0\Z)VFַjgf^D{ ox\0\0\0\0\0\0\0\0\0\0\0\0',4,0,'','','',''),(26,2,8,'75859b10b880d425','5b0e9c6920adcf8efafaf3743d0e0c6c','2017-09-07 09:16:42','2017-09-07 09:16:42','','','Contact Photos','3.jpg','image/jpeg',80,80,2703,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \0P\0P\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n \04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#3Sa\0\0\0?\0M5AQ\0jǯ<_T@Zi9׾*){ڥJY[6he ,u$1tKvD3%g[I_:kƵJuB7\'vX3iRj:G*e\0aM|i:{Kٞw,dRt aKBf }zao-fr@@D5֮VbS&-Lm[xS!d\"ἵ1/n}U2e&T`aU4#``!\rũl>5tl\n(\"i\nP)\' rc-^je[ZEt\0lA-\'!~N.Am2p\rjXOR_]dr8$+\' ۬. Ӭ[8o\rbO5b61T\ZEW%BNnTJSd͸\"aۦ˧~m7\rnxndxZz1 |#;Mu_5I7,\";w8L SY7ڪJcDS LQe[DmacܜrLL /m_˘~tFP?|R0c[wcoWu4,Ê.8%TLa3兂21o*IBe߶r8Z;AHq먆v;61a\\?nW\"Jݘ1N+^%9A\"tb(CGX7|.{mGt{ꧼs\r\ZejR5|]\'r1HŻF gl45V%4/P\0\08\0rMx73vۃ(+0LXߘQCB` [0\"d6j1:>c3c2:sH>p\\udV.U}QL>Cu9$2$ݦ”qil4j5zhgQtC-9T\']l\raR5IgMs)Y4A5fѳStZ%?:fJðUjuhP5 Zm ,!lѪ)d)H@\0׏nn5M;uk8bێ9*8w8 6{^SlPMgLISwg8!9\0Pİ\'e2ڲ}Oj%D`VMfJ4jQ}N3*1{@b^\\k!令#\0#X3]Rzl \0 #\rD1t[gfZB*Q\"q*уjj$VZbE YPQ8~1$ s8XhFDG7M|lsѓ-QI6mRIV$ $P}4.!^5\n⾪\rfYT}ګEM|Usc=GmK;LcwO0Q={hc):Ě cr\\n귺{iU_7&L7)ӷ~\rK^fX,%_q8Z)+_#v,dSѓդyy\r?^RvYvSbL>Ee ^/q:V!Yd7M4V }+Jض WH K*$ y*Q1J#MPH`!C~T7<_]CL~IoݒU\0uE} V֘~ $RM4PC/a3-dLn.cdۛώЌb80b鮸4nNWJuWިcQrd\" TJ\0*Gi͸+E1vFhG敲MUuQIC\0qɓ/!ֿ',5,0,'','','',''),(27,2,8,'75859b10b880d425','5b0e9c6920adcf8efafaf3743d0e0c6c','2017-09-07 09:16:42','2017-09-07 09:16:42','','','Contact Photos','3.jpg','image/jpeg',48,48,1755,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \00\00\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa\0\0\0?\03csǜ?1{pK]_r\0BsK]n 4dfZ%ӣ ³+r0m&i-jAg>%hM%C¿pO!6xie5H)LWle!k:Thq2ڰNݴMj6A7?qYˌgZ[DEn&Z]-mnBa![v\\h2BaRI?<~/y=dG3JM[ݨ` ԭyN\0ɚȥ֐YʈO`=y| Ҽ&-Fmf+`<q{*En՘g$Y`P#I%;B~NMX}\']؜\ZlcޒZFQ.6?` />>IX㞣`3lHm%X8=j2.K21$72)I1Cwn^i>%T%cƺx]l_/CXJRByŸQ-+μ+ug\\yJ7t{2U0OHmYF]qZa$fdB2FzXK3xq,8+-#?*\ZFV)/%xR3e0(b0Š;# ;Kl\r%YecCM6\'JP%81zWmJeZ⁜[&+i!.>Vz8XE}+d\r\0!PeաiUtvO;}qje0åi?~A-٘H q-b> \Z+9#7x1\Z\Ze=`t,\n\0\"\nn:x%zsϤ?z|գcuS?KR+1UhahTc%A1>?B\0',6,0,'','','',''),(28,0,8,'75859b10b8813eeb','db4dd6c60ea3b83171c94ae1c492fa8c','2017-09-07 09:09:29','2017-09-07 09:09:29','','','Contact Photos','22875ea1ab42e09a2f1d3869cd6edfe7-4.jpg?ts=1504775234','image/jpeg',175,175,5493,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n  \0B\0\0 \0\0\0\0\0 !\n1A\"Qaq%23#$&5BREs\0\0\0?\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*ՆX\Z\'p|LsN}Y%ZR|(J*I&+rJ#yI)%lZ,:i(ϥ)J*hχoмI$Dj- (C\"cI(s_L:g `wI9s.wYaC\"3:Ie~g,ڮϨ6&tt/iKxvEqE˒S.:t7Vg5u;Ys=YFZRk}jʮHnlIfhM6&\";MDD]¿SRchB{tƤGVMʽ4$&2\"%{̈}9$489hۆ @e崭\ZطHlMT:!M2aLc/RiCrT\ZuΥ$FIN춆q5S,-Bc^op}AW8Y)c?T2FiդkI$bՓ鐸A\\<FhŭܿIk)3^Nٓwu]kU4J8W*F7`^U:VңI%̷?|C{Oh[:rqğ 0\\\Ze0\\ޅ\Z.RvZNOI\n#O v-ikFo;EIձ5\ZRv!,\\4;MyE3ta9B:̌[XTh_\"r4k*F\\U:Mz\0u#\0C\0\0\0\0\0>frZ\\kpqҾ.oUuq-SCJKPSǬf2JJGD Ym+>!҄^\n\'/{} W7-K;KkI (;TF\rH̖J\0Jsj K\0mp֫WV\'\"IٹjTlx;ҤO,RԐǖ edK:8<)5hy Ów r*-0BfJ& u:fIVr:rjh.p甴9 MH>듲pgBҲ4:{-RTPMHZRw+|)DqKєW2WejO{F|aM)xhʴH-IF3捩Gِ\0\0\0\0\0qd-B\\*uDZnǮ~4gfGyN-mݯm(ָmWWIoԺw2IHX%Lza֞XY;$DQ{}54;9)k3S2%-|Ĕ\0EɧT|+2BBHUyK>Yk[\ZYN \"ZyTGV\ZĢ5MGROO&7 ;_Ou[7O?0RvVg#۔+E1[ٲ\0\0\0\0\0;X\ZqzqJ2c:#vIK^Fk4B/X﹑E4ehM88(:\0s2ia{CT\0XRJdz]d݉ ,1r~6DdGOBg&f)e+/4TQjѰ~wc8ڤFgTճG[M\')?JUDR)6v[#E3$n=JK\'Dq18򄭴7(UueLtv2ҤTK[o\0>}FH\0\0\0\0\0B\0Lvx(Ʋ93O\"\noHPQiJU;G\\/e>oQ{hnW^\0S8{\"ΛJK\\*G1)|\'s6@Mo+@:euw;uY*9rOl4YLԲ3Q#\"5E}qSSGHRb]{~&B\nq@wgvQg_=rcW6EPj\"؊vׇv{:׎V\r}LdD[u_^ ?!y֑p<[L^Z}ӵk;[cJ.ɖ6鲔$/DY[kwRD\0\0\0\0.nNnv\rvsvupVV6;o̥M\'x8x-aESl13K Yx%rJrRY5B$e=4_ć&N\Z_kHQ;wdW/+^&)5i(-Z<9sN.jM #p9hԥiʼnQ=&UOQnQԔla\\.\\\0㴒Mʮ%y2=ޟ]ZB˩J$\0-FX R2bX01[#s;=\Z\r&QiOwM Z-:i)tY.ϺfbVZ:Z`W%T3>I>FdF-$j#;*O$)R])}[d\0 z~BпgG 4L=c&n3κu6[8eTҔ.GUF(G$^Jڑ\rſqخwZ\rnÙL5>wv$Rb2{UB?H LAFLi%`TjѫQ\0>\0\0\0\0SG M%BIy[뽊G?t/ǘP4% YT*\">a&}bpija־x[Wnb\' +H%L3ȬNC+RW\nbL+`\0\0\0!MWp᭭gk&4qSGe:O-]1Iw#277Q%!T2C0Ҵ>MYV8#chV(vvTN-~=I[WM5㿀rnue0[ΝX$!DB;0z>S%&Fxʗ1+cRղGB)r]/q Ïz ύ9U/%,/SrCj(\\d$DeQȵ}Bj+n--ܧem3뷐 \0q65YRGX:a:\\\'{V(CӪ\Z.7p42cZQz_j6{s}ARrҋӗx^_է$R#N+j}\Z4hQ>[E\0 \0\0\0\0Rtwؾ~{|\00 \"8\"M/j9E-`អ\r-[,&ooL)&\r1EE)aM|i:{Lٞw,dRt aKBf 5Ô5b%֡ZuZꅊqNL2ÕoY↚}LVB\00ւ7s\0D{IN\n_J;)Tʮ>)URUVPlЏ`lD4SM8\rfѲ*HiP)CPO 3{a%yV)ynYiE3IVh; 8ݴʛG]5b~=I~}vݐr(C/mXHrN*ߎ\\==ZQed{\\nX^¹Z2TƓe%W\"\"wFVeL8$@KaM`9Gzvies^qY99(h9HF`kd)I$Br\n\"n5}. 9l2m&\nb+$V`\n\0++9W0hqqG\0GZ~. ׬c8o\rO5b61T\ZEW%BNnTJU2gfܤlu遅-r߲}M{2۞,[:\0^2֫ADH.a~X{\'?,5CfKW2}ߝ$+O0T\'cXXlfq 0# 8U(+*e ra`[Jprw휢VE+$z!]=j33WۮUȇb7f j,׳>NPHG,yQ\r u:%Ühƙi\'l;\"WI܅4R+EnQ*?&a%:6\rUM-(\0\08\0?\\^ᝠ+>*)1PPa$b:Vp097MLN!a-oX\0yLY#*_nT~%{]NI${LquI7i0qiw\'M-\Z^<]/)u NxU mX{ԬFYc(Vk0MlYlDf]Ou:YR0+ZZ!\rv[FG&(-D4jh\nR\05۾ۍSw{ae;qZ_ʴDdr6ͺT=J )H(r& &nk  bXBٓGmY> El\'x|5\"FrO& y%^\Zn(:ԓH*1{@b^\\k!令#\0#X3]Rzl \0 #\rD1t[gfZB*Q\"q*уjj$VZbE YPQ8~1$ s8XhFDG7M|lsѓ-QI6mRIV$ $P}4.!^5\n⾪\rfYT}ګEM|Usc=GmK;LcwO0Q={hc):Ě cr\\n귺{iU_7&L7)ӷ~\rK^fX,%_q8Z)+_#v,dSѓդyy\r?^RvYvSbL>Ee ^/q:V!Yd7M4V }+Jض WH K*$ y*Q1J#MPH`!C~T7<_]CL~IoݒU\0uE} V֘~ $RM4PC/a3-dLn.cdۛώЌb80b鮸4nNWJuWިcQrd\" TJ\0*Gi͸+E1vFhG敲MUuQIC\0qɓ/!ֿ',5,0,'','','',''),(30,0,8,'75859b10b8813eeb','db4dd6c60ea3b83171c94ae1c492fa8c','2017-09-07 09:09:29','2017-09-07 09:09:29','','','Contact Photos','22875ea1ab42e09a2f1d3869cd6edfe7-4.jpg?ts=1504775234','image/jpeg',48,48,1755,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \00\00\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa\0\0\0?\03csǜ?1{pK]_r\0BsK]n 4dfZ%ӣ ³+r0m&i-jAg>%hM%C¿pO!6xie5H)LWle!k:Thq2ڰNݴMj6A7?qYˌgZ[DEn&Z]-mnBa![v\\h2BaRI?<~/y=dG3JM[ݨ` ԭyN\0ɚȥ֐YʈO`=y| Ҽ&-Fmf+`<q{*En՘g$Y`P#I%;B~NMX}\']؜\ZlcޒZFQ.6?` />>J[X㦣`3l8m%X<=j2.L21\"D70Ĉ2+I1Kwn^i>%T%cƺx]l_/CXJRByŸQ-+μ+ug\\yJ7t{2U0OHmYF]qZa$fdB2FzXK3xq,8+-#?*\ZFV)/%xR3e0(b0Š;# ;Kl\r%YecCM6\'JP%81zWmJeZ⁜[&+i!.>Vz8XE}+d\r\0!PeաiUtvO;}qje0åi?~A-٘H q-b> \Z+9#7x1\Z\Ze=`t,\n\0\"\nn:x%zsϤ?z|գcuS?KR+1UhahTc%A1>?B\0',6,0,'','','',''),(31,4,9,'75859b10ba668548','adef541d0f334352940ad40251e15158','2017-09-07 09:17:49','2017-09-07 09:17:49','','','Contact Photos','4b7db531ad1920a7cb8fb76aed46ddd9-4.jpg?ts=1504775575','image/jpeg',175,175,5493,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n  \0B\0\0 \0\0\0\0\0 !\n1A\"Qaq%23#$&5BREs\0\0\0?\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*ՆX\Z\'p|LsN}Y%ZR|(J*I&+rJ#yI)%lZ,:i(ϥ)J*hχoмI$Dj- (C\"cI(s_L:g `wI9s.wYaC\"3:Ie~g,ڮϨ6&tt/iKxvEqE˒S.:t7Vg5u;Ys=YFZRk}jʮHnlIfhM6&\";MDD]¿SRchB{tƤGVMʽ4$&2\"%{̈}9$489hۆ @e崭\ZطHlMT:!M2aLc/RiCrT\ZuΥ$FIN춆q5S,-Bc^op}AW8Y)c?T2FiդkI$bՓ鐸A\\<FhŭܿIk)3^Nٓwu]kU4J8W*F7`^U:VңI%̷?|C{Oh[:rqğ 0\\\Ze0\\ޅ\Z.RvZNOI\n#O v-ikFo;EIձ5\ZRv!,\\4;MyE3ta9B:̌[XTh_\"r4k*F\\U:Mz\0u#\0C\0\0\0\0\0>frZ\\kpqҾ.oUuq-SCJKPSǬf2JJGD Ym+>!҄^\n\'/{} W7-K;KkI (;TF\rH̖J\0Jsj K\0mp֫WV\'\"IٹjTlx;ҤO,RԐǖ edK:8<)5hy Ów r*-0BfJ& u:fIVr:rjh.p甴9 MH>듲pgBҲ4:{-RTPMHZRw+|)DqKєW2WejO{F|aM)xhʴH-IF3捩Gِ\0\0\0\0\0qd-B\\*uDZnǮ~4gfGyN-mݯm(ָmWWIoԺw2IHX%Lza֞XY;$DQ{}54;9)k3S2%-|Ĕ\0EɧT|+2BBHUyK>Yk[\ZYN \"ZyTGV\ZĢ5MGROO&7 ;_Ou[7O?0RvVg#۔+E1[ٲ\0\0\0\0\0;X\ZqzqJ2c:#vIK^Fk4B/X﹑E4ehM88(:\0s2ia{CT\0XRJdz]d݉ ,1r~6DdGOBg&f)e+/4TQjѰ~wc8ڤFgTճG[M\')?JUDR)6v[#E3$n=JK\'Dq18򄭴7(UueLtv2ҤTK[o\0>}FH\0\0\0\0\0B\0Lvx(Ʋ93O\"\noHPQiJU;G\\/e>oQ{hnW^\0S8{\"ΛJK\\*G1)|\'s6@Mo+@:euw;uY*9rOl4YLԲ3Q#\"5E}qSSGHRb]{~&B\nq@wgvQg_=rcW6EPj\"؊vׇv{:׎V\r}LdD[u_^ ?!y֑p<[L^Z}ӵk;[cJ.ɖ6鲔$/DY[kwRD\0\0\0\0.nNnv\rvsvupVV6;o̥M\'x8x-aESl13K Yx%rJrRY5B$e=4_ć&N\Z_kHQ;wdW/+^&)5i(-Z<9sN.jM #p9hԥiʼnQ=&UOQnQԔla\\.\\\0㴒Mʮ%y2=ޟ]ZB˩J$\0-FX R2bX01[#s;=\Z\r&QiOwM Z-:i)tY.ϺfbVZ:Z`W%T3>I>FdF-$j#;*O$)R])}[d\0 z~BпgG 4L=c&n3κu6[8eTҔ.GUF(G$^Jڑ\rſqخwZ\rnÙL5>wv$Rb2{UB?H LAFLi%`TjѫQ\0>\0\0\0\0SG M%BIy[뽊G?t/ǘP4% YT*\">a&}bpija־x[Wnb\' +H%L3ȬNC+RW\nbL+`\0\0\0!MWp᭭gk&4qSGe:O-]1Iw#277Q%!T2C0Ҵ>MYV8#chV(vvTN-~=I[WM5㿀rnue0[ΝX$!DB;0z>S%&Fxʗ1+cRղGB)r]/q Ïz ύ9U/%,/SrCj(\\d$DeQȵ}Bj+n--ܧem3뷐 \0q65YRGX:a:\\\'{V(CӪ\Z.7p42cZQz_j6{s}ARrҋӗx^_է$R#N+j}\Z4hQ>[E\0 \0\0\0\0Rtwؾ~{|\00 \"8\"M/j9E-`អ\r-[,&ooL)&\r1EE)aM|i:{Lٞw,dRt aKBf 5Ô5b%֡ZuZꅊqNL2ÕoY↚}LVB\00ւ7s\0D{IN\n_J;)Tʮ>)URUVPlЏ`lD4SM8\rfѲ*HiP)CPO 3{a%yV)ynYiE3IVh; 8ݴʛG]5b~=I~}vݐr(C/mXHrN*ߎ\\==ZQed{\\nX^¹Z2TƓe%W\"\"wFVeL8$@KaM`9Gzvies^qY99(h9HF`kd)I$Br\n\"n5}. 9l2m&\nb+$V`\n\0++9W0hqqG\0GZ~. ׬c8o\rO5b61T\ZEW%BNnTJU2gfܤlu遅-r߲}M{2۞,[:\0^2֫ADH.a~X{\'?,5CfKW2}ߝ$+O0T\'cXXlfq 0# 8U(+*e ra`[Jprw휢VE+$z!]=j33WۮUȇb7f j,׳>NPHG,yQ\r u:%Ühƙi\'l;\"WI܅4R+EnQ*?&a%:6\rUM-(\0\08\0?\\^ᝠ+>*)1PPa$b:Vp097MLN!a-oX\0yLY#*_nT~%{]NI${LquI7i0qiw\'M-\Z^<]/)u NxU mX{ԬFYc(Vk0MlYlDf]Ou:YR0+ZZ!\rv[FG&(-D4jh\nR\05۾ۍSw{ae;qZ_ʴDdr6ͺT=J )H(r& &nk  bXBٓGmY> El\'x|5\"FrO& y%^\Zn(:ԓH*1{@b^\\k!令#\0#X3]Rzl \0 #\rD1t[gfZB*Q\"q*уjj$VZbE YPQ8~1$ s8XhFDG7M|lsѓ-QI6mRIV$ $P}4.!^5\n⾪\rfYT}ګEM|Usc=GmK;LcwO0Q={hc):Ě cr\\n귺{iU_7&L7)ӷ~\rK^fX,%_q8Z)+_#v,dSѓդyy\r?^RvYvSbL>Ee ^/q:V!Yd7M4V }+Jض WH K*$ y*Q1J#MPH`!C~T7<_]CL~IoݒU\0uE} V֘~ $RM4PC/a3-dLn.cdۛώЌb80b鮸4nNWJuWިcQrd\" TJ\0*Gi͸+E1vFhG敲MUuQIC\0qɓ/!ֿ',5,0,'','','',''),(33,4,9,'75859b10ba668548','adef541d0f334352940ad40251e15158','2017-09-07 09:17:49','2017-09-07 09:17:49','','','Contact Photos','4b7db531ad1920a7cb8fb76aed46ddd9-4.jpg?ts=1504775575','image/jpeg',48,48,1755,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \00\00\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa\0\0\0?\03csǜ?1{pK]_r\0BsK]n 4dfZ%ӣ ³+r0m&i-jAg>%hM%C¿pO!6xie5H)LWle!k:Thq2ڰNݴMj6A7?qYˌgZ[DEn&Z]-mnBa![v\\h2BaRI?<~/y=dG3JM[ݨ` ԭyN\0ɚȥ֐YʈO`=y| Ҽ&-Fmf+`<q{*En՘g$Y`P#I%;B~NMX}\']؜\ZlcޒZFQ.6?` />>J[X㦣`3l8m%X<=j2.L21\"D70Ĉ2+I1Kwn^i>%T%cƺx]l_/CXJRByŸQ-+μ+ug\\yJ7t{2U0OHmYF]qZa$fdB2FzXK3xq,8+-#?*\ZFV)/%xR3e0(b0Š;# ;Kl\r%YecCM6\'JP%81zWmJeZ⁜[&+i!.>Vz8XE}+d\r\0!PeաiUtvO;}qje0åi?~A-٘H q-b> \Z+9#7x1\Z\Ze=`t,\n\0\"\nn:x%zsϤ?z|գcuS?KR+1UhahTc%A1>?B\0',6,0,'','','',''),(34,2,10,'75859b10ba67f3b5','01ff45af20fe4c6fb230e6fc773f3ef8','2017-09-07 09:18:24','2017-09-07 09:18:24','','','Contact Photos','4.jpg','image/jpeg',175,175,5486,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n  \0B\0\0 \0\0\0\0\0 !\n1A\"Qaq%23R#$&5BEs\0\0\0?\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*ՆX\Zgp|LsN}Y%ZR|(J*I&+rJ#yI)%lZ,:i(ϥ)J*hχo>$Œd \"5ɐbo9/צF3qN;뤂9;߬Kka0Z$ԲOb3gWqgUlW\0ĺQ<;J;剽ŒTh܋}h>#\0\0\0\0\0\0\0>=]Xwg-8i9uN梿ݱ^-l$$5Rt\"e):G+3Ϛͺ,-d5ܾn~5SeW$76sS$4SME\"\"O._)YŽ1\rX!M\nmyKlR#kM&^o|ML}IjOD>OJ\Zmiv2rVӍBl[rdD;k2dZ8($h:״y}`\0\0\0\0\0\0\08ƣ37 } Nsſ]Ec pJL򄩵œU<Y)O&$.!EQ%NCSL8d#z9㔚g,ܮG w7GggU)F]EsI-DS:{-e|jwK P䗴[듲pgBҲ:t[I줩*¤VpS◣(dBŗ4B. su= =4ᢙKAeZ$qu餣}Fԣ\0\0\0\0\0\nYNo!Nj{\"F-zyc?s\Z I3#̼˧Q\rk\\]6PꫫUr$]MIN^|$^u,ݦ=0O,Vt,p]I(F\Z̔QbJIDl\0dӪ>o!Sg[$i*<\\Qng|Qu,,tu-<#\rbQ\Z&vc٧u-\'Bb);C3haKr\"ۘr-\0\0\0\0\0Ky8qa^1[؍$#5K,JLȌaLs&[d1\rצKɧ=\0DxaÓ_Udǁ5%~<&ܾ^G⏚_Kωf\\O2ث=t27 36FffJw&M^DDV\0\0\0\0\0A-GM:]\ZN/&ɛ3:Rv_?]%0^w ghF˭3橯c`jGf=hR ȪnG)#I&e696\0\0\0\0\0\0L4/6v91!\r),~*Rg#URij\"rNPkJ;m>bd&XFޭb48KKT\\h^Q̶#I\ZhWe+_ͺɧI;\nF.Vw)7|U-R/1.t2fsniEu?bDV2#Cau33q2jwZqN?;^XR#g3Dj֣&\nI*);-xj7A%GiŢV8TNBVERe*WZMQi;iR*h-\0>$\0\0\0\0\0!}Lvx(Ʋ93O\"\noHPQiJU;G\\/e>oQ{hnW^\0S8{\"ΛJK\\*G1)|\'s6@Mo+@:euw;uY*9rOl4YLԲ3Q#\"5E}qSSGHRb]{~&B\nq@wgvQg_=rcW6EPj\"؊vׇv{:׎V\r}LdD[u_^ ?!y֑p<[L^Z}ӵk;[cJ.ɖ6鲔$/DY[kwRD\0\0\0\0.nNnv\rvsvupVV6;o̥M\'x8x-aESl13K Yx%rJrRY5B$e=4_ć&N\Z_kHQ;wdW/+^&)5i([xrIW+]}f,\n^G,sJ\'8ӫzL+Z%l$Y(:]6\0ei%v]Jd{o?${;SؔI-[l;ǢeŎ3lb`cnFv6{\nm 퍍JZ\\dJ2ڀ#opMNӷw8m2i$dm$EjDMr\"bvKȴ4s܈\ZSENU\'|{uHn0BaG\'w~x-5:@\0\0\0\0|(\\-es$ c\' 4W\"+HSw:%25Ȉ׶ܜ3B\rW\\e34hё/Zq&%-¢$ʄʺiS2g@ +mRӭVNQ\\5[B챌hx%kk91&rQ%Hjp՗htזf,a\"ڪA@d&b\n4cI+\0-RV^_gG<\0\0\0\0Wc3M214V9&n)мsc73MB/ǬD<%ePJXGZ!m_UX:,m0y#𖦳U2SD\"9 I^)#\r2]\0\0\0<;~bj\rmk;^I5]28)~j2K!d dFI) ]_8q:j:űEڱFn`=ZqmL}$JJZiwhtK->)t%\Zy&\"$r0~Ʊك)23T[\Z:LL*{f{^|m|D5WtRy)dzX.QD&G\"$#YT/RBrMŵź쭶}>{v\0\0>_;.&ƹ *H6L\'R $jhuzuQvCQEҦ:y}ƚU,kJ!Y>}Fк/no3NZQw35r+dJRDvеmOF\n\'k~|H38\0\0\0\0\0cGT/]/_?F92GIMZ1\'(l3AKuŒRM4w$ԙ!(RH\'~.3,3u (s@#.m1HwK[:vtG\'9&2D$N0Yu\nn4:J_# \0+ˮ&8H\ZWҾSidr؍ed}K{L:1\rqjNě(Z735T_s\0\0\0\0\0\0Ɣd~?T\02}nj눝F o1-y ]čhv9nQHȌm{>m H:5;{#RTKy~2v\0\0\0\0\0\0uhJ8=UCh<^;F [L6$\0\0EJ]]z2ƣszT8ƭ{\Zx*P} c鷐\0\0\0\0\0\0\ZI7IwD\0& q-Î>鿡\r\0\0%H?yt!\0\0\0\0\0\0\Z)VFַjgf^D{ ox\0\0\0\0\0\0\0\0\0\0\0\0',4,0,'','','',''),(35,2,10,'75859b10ba67f3b5','01ff45af20fe4c6fb230e6fc773f3ef8','2017-09-07 09:18:24','2017-09-07 09:18:24','','','Contact Photos','4.jpg','image/jpeg',80,80,2703,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \0P\0P\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n \04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#3Sa\0\0\0?\0M5AQ\0jǯ<_T@Zi9׾*){ڥJY[6he ,u$1tKvD3%g[I_:kƵJuB7\'vX3iRj:G*e\0aM|i:{Kٞw,dRt aKBf }zao-fr@@D5֮VbS&-Lm[xS!d\"ἵ1/n}U2e&T`aU4#``!\rũl>5tl\n(\"i\nP)\' rc-^je[ZEt\0lA-\'!~N.Am2p\rjXOR_]dr8$+\' ۬. Ӭ[8o\rbO5b61T\ZEW%BNnTJSd͸\"aۦ˧~m7\rnxndxZz1 |#;Mu_5I7,\";w8L SY7ڪJcDS LQe[DmacܜrLL /m_˘~tFP?|R0c[wcoWu4,Ê.8%TLa3兂21o*IBe߶r8Z;AHq먆v;61a\\?nW\"Jݘ1N+^%9A\"tb(CGX7|.{mGt{ꧼs\r\ZejR5|]\'r1HŻF gl45V%4/P\0\08\0rMx73vۃ(+0LXߘQCB` [0\"d6j1:>c3c2:sH>p\\udV.U}QL>Cu9$2$ݦ”qil4j5zhgQtC-9T\']l\raR5IgMs)Y4A5fѳStZ%?:fJðUjuhP5 Zm ,!lѪ)d)H@\0׏nn5M;uk8bێ9*8w8 6{^SlPMgLISwg8!9\0Pİ\'e2ڲ}Oj%D`VMfJ4jQ}N3*1{@b^\\k!令#\0#X3]Rzl \0 #\rD1t[gfZB*Q\"q*уjj$VZbE YPQ8~1$ s8XhFDG7M|lsѓ-QI6mRIV$ $P}4.!^5\n⾪\rfYT}ګEM|Usc=GmK;LcwO0Q={hc):Ě cr\\n귺{iU_7&L7)ӷ~\rK^fX,%_q8Z)+_#v,dSѓդyy\r?^RvYvSbL>Ee ^/q:V!Yd7M4V }+Jض WH K*$ y*Q1J#MPH`!C~T7<_]CL~IoݒU\0uE} V֘~ $RM4PC/a3-dLn.cdۛώЌb80b鮸4nNWJuWިcQrd\" TJ\0*Gi͸+E1vFhG敲MUuQIC\0qɓ/!ֿ',5,0,'','','',''),(36,2,10,'75859b10ba67f3b5','01ff45af20fe4c6fb230e6fc773f3ef8','2017-09-07 09:18:24','2017-09-07 09:18:24','','','Contact Photos','4.jpg','image/jpeg',48,48,1755,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \00\00\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa\0\0\0?\03csǜ?1{pK]_r\0BsK]n 4dfZ%ӣ ³+r0m&i-jAg>%hM%C¿pO!6xie5H)LWle!k:Thq2ڰNݴMj6A7?qYˌgZ[DEn&Z]-mnBa![v\\h2BaRI?<~/y=dG3JM[ݨ` ԭyN\0ɚȥ֐YʈO`=y| Ҽ&-Fmf+`<q{*En՘g$Y`P#I%;B~NMX}\']؜\ZlcޒZFQ.6?` />>IX㞣`3lHm%X8=j2.K21$72)I1Cwn^i>%T%cƺx]l_/CXJRByŸQ-+μ+ug\\yJ7t{2U0OHmYF]qZa$fdB2FzXK3xq,8+-#?*\ZFV)/%xR3e0(b0Š;# ;Kl\r%YecCM6\'JP%81zWmJeZ⁜[&+i!.>Vz8XE}+d\r\0!PeաiUtvO;}qje0åi?~A-٘H q-b> \Z+9#7x1\Z\Ze=`t,\n\0\"\nn:x%zsϤ?z|գcuS?KR+1UhahTc%A1>?B\0',6,0,'','','',''),(37,0,10,'75859b10ba6852dd','de20aa50472d9b54f292966d1cf693c4','2017-09-07 09:09:29','2017-09-07 09:09:29','','','Contact Photos','9c78857b3d725c1c6d1227a7b8cbe6b2-4.jpg?ts=1504775234','image/jpeg',175,175,5493,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n  \0B\0\0 \0\0\0\0\0 !\n1A\"Qaq%23#$&5BREs\0\0\0?\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*ՆX\Z\'p|LsN}Y%ZR|(J*I&+rJ#yI)%lZ,:i(ϥ)J*hχoмI$Dj- (C\"cI(s_L:g `wI9s.wYaC\"3:Ie~g,ڮϨ6&tt/iKxvEqE˒S.:t7Vg5u;Ys=YFZRk}jʮHnlIfhM6&\";MDD]¿SRchB{tƤGVMʽ4$&2\"%{̈}9$489hۆ @e崭\ZطHlMT:!M2aLc/RiCrT\ZuΥ$FIN춆q5S,-Bc^op}AW8Y)c?T2FiդkI$bՓ鐸A\\<FhŭܿIk)3^Nٓwu]kU4J8W*F7`^U:VңI%̷?|C{Oh[:rqğ 0\\\Ze0\\ޅ\Z.RvZNOI\n#O v-ikFo;EIձ5\ZRv!,\\4;MyE3ta9B:̌[XTh_\"r4k*F\\U:Mz\0u#\0C\0\0\0\0\0>frZ\\kpqҾ.oUuq-SCJKPSǬf2JJGD Ym+>!҄^\n\'/{} W7-K;KkI (;TF\rH̖J\0Jsj K\0mp֫WV\'\"IٹjTlx;ҤO,RԐǖ edK:8<)5hy Ów r*-0BfJ& u:fIVr:rjh.p甴9 MH>듲pgBҲ4:{-RTPMHZRw+|)DqKєW2WejO{F|aM)xhʴH-IF3捩Gِ\0\0\0\0\0qd-B\\*uDZnǮ~4gfGyN-mݯm(ָmWWIoԺw2IHX%Lza֞XY;$DQ{}54;9)k3S2%-|Ĕ\0EɧT|+2BBHUyK>Yk[\ZYN \"ZyTGV\ZĢ5MGROO&7 ;_Ou[7O?0RvVg#۔+E1[ٲ\0\0\0\0\0;X\ZqzqJ2c:#vIK^Fk4B/X﹑E4ehM88(:\0s2ia{CT\0XRJdz]d݉ ,1r~6DdGOBg&f)e+/4TQjѰ~wc8ڤFgTճG[M\')?JUDR)6v[#E3$n=JK\'Dq18򄭴7(UueLtv2ҤTK[o\0>}FH\0\0\0\0\0B\0Lvx(Ʋ93O\"\noHPQiJU;G\\/e>oQ{hnW^\0S8{\"ΛJK\\*G1)|\'s6@Mo+@:euw;uY*9rOl4YLԲ3Q#\"5E}qSSGHRb]{~&B\nq@wgvQg_=rcW6EPj\"؊vׇv{:׎V\r}LdD[u_^ ?!y֑p<[L^Z}ӵk;[cJ.ɖ6鲔$/DY[kwRD\0\0\0\0.nNnv\rvsvupVV6;o̥M\'x8x-aESl13K Yx%rJrRY5B$e=4_ć&N\Z_kHQ;wdW/+^&)5i(-Z<9sN.jM #p9hԥiʼnQ=&UOQnQԔla\\.\\\0㴒Mʮ%y2=ޟ]ZB˩J$\0-FX R2bX01[#s;=\Z\r&QiOwM Z-:i)tY.ϺfbVZ:Z`W%T3>I>FdF-$j#;*O$)R])}[d\0 z~BпgG 4L=c&n3κu6[8eTҔ.GUF(G$^Jڑ\rſqخwZ\rnÙL5>wv$Rb2{UB?H LAFLi%`TjѫQ\0>\0\0\0\0SG M%BIy[뽊G?t/ǘP4% YT*\">a&}bpija־x[Wnb\' +H%L3ȬNC+RW\nbL+`\0\0\0!MWp᭭gk&4qSGe:O-]1Iw#277Q%!T2C0Ҵ>MYV8#chV(vvTN-~=I[WM5㿀rnue0[ΝX$!DB;0z>S%&Fxʗ1+cRղGB)r]/q Ïz ύ9U/%,/SrCj(\\d$DeQȵ}Bj+n--ܧem3뷐 \0q65YRGX:a:\\\'{V(CӪ\Z.7p42cZQz_j6{s}ARrҋӗx^_է$R#N+j}\Z4hQ>[E\0 \0\0\0\0Rtwؾ~{|\00 \"8\"M/j9E-`អ\r-[,&ooL)&\r1EE)aM|i:{Lٞw,dRt aKBf 5Ô5b%֡ZuZꅊqNL2ÕoY↚}LVB\00ւ7s\0D{IN\n_J;)Tʮ>)URUVPlЏ`lD4SM8\rfѲ*HiP)CPO 3{a%yV)ynYiE3IVh; 8ݴʛG]5b~=I~}vݐr(C/mXHrN*ߎ\\==ZQed{\\nX^¹Z2TƓe%W\"\"wFVeL8$@KaM`9Gzvies^qY99(h9HF`kd)I$Br\n\"n5}. 9l2m&\nb+$V`\n\0++9W0hqqG\0GZ~. ׬c8o\rO5b61T\ZEW%BNnTJU2gfܤlu遅-r߲}M{2۞,[:\0^2֫ADH.a~X{\'?,5CfKW2}ߝ$+O0T\'cXXlfq 0# 8U(+*e ra`[Jprw휢VE+$z!]=j33WۮUȇb7f j,׳>NPHG,yQ\r u:%Ühƙi\'l;\"WI܅4R+EnQ*?&a%:6\rUM-(\0\08\0?\\^ᝠ+>*)1PPa$b:Vp097MLN!a-oX\0yLY#*_nT~%{]NI${LquI7i0qiw\'M-\Z^<]/)u NxU mX{ԬFYc(Vk0MlYlDf]Ou:YR0+ZZ!\rv[FG&(-D4jh\nR\05۾ۍSw{ae;qZ_ʴDdr6ͺT=J )H(r& &nk  bXBٓGmY> El\'x|5\"FrO& y%^\Zn(:ԓH*1{@b^\\k!令#\0#X3]Rzl \0 #\rD1t[gfZB*Q\"q*уjj$VZbE YPQ8~1$ s8XhFDG7M|lsѓ-QI6mRIV$ $P}4.!^5\n⾪\rfYT}ګEM|Usc=GmK;LcwO0Q={hc):Ě cr\\n귺{iU_7&L7)ӷ~\rK^fX,%_q8Z)+_#v,dSѓդyy\r?^RvYvSbL>Ee ^/q:V!Yd7M4V }+Jض WH K*$ y*Q1J#MPH`!C~T7<_]CL~IoݒU\0uE} V֘~ $RM4PC/a3-dLn.cdۛώЌb80b鮸4nNWJuWިcQrd\" TJ\0*Gi͸+E1vFhG敲MUuQIC\0qɓ/!ֿ',5,0,'','','',''),(39,0,10,'75859b10ba6852dd','de20aa50472d9b54f292966d1cf693c4','2017-09-07 09:09:29','2017-09-07 09:09:29','','','Contact Photos','9c78857b3d725c1c6d1227a7b8cbe6b2-4.jpg?ts=1504775234','image/jpeg',48,48,1755,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \00\00\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa\0\0\0?\03csǜ?1{pK]_r\0BsK]n 4dfZ%ӣ ³+r0m&i-jAg>%hM%C¿pO!6xie5H)LWle!k:Thq2ڰNݴMj6A7?qYˌgZ[DEn&Z]-mnBa![v\\h2BaRI?<~/y=dG3JM[ݨ` ԭyN\0ɚȥ֐YʈO`=y| Ҽ&-Fmf+`<q{*En՘g$Y`P#I%;B~NMX}\']؜\ZlcޒZFQ.6?` />>J[X㦣`3l8m%X<=j2.L21\"D70Ĉ2+I1Kwn^i>%T%cƺx]l_/CXJRByŸQ-+μ+ug\\yJ7t{2U0OHmYF]qZa$fdB2FzXK3xq,8+-#?*\ZFV)/%xR3e0(b0Š;# ;Kl\r%YecCM6\'JP%81zWmJeZ⁜[&+i!.>Vz8XE}+d\r\0!PeաiUtvO;}qje0åi?~A-٘H q-b> \Z+9#7x1\Z\Ze=`t,\n\0\"\nn:x%zsϤ?z|գcuS?KR+1UhahTc%A1>?B\0',6,0,'','','',''),(40,5,11,'75859b10bb574e2e','01ebf2eb957e5aef5463ba5ae6510ef5','2017-09-07 09:19:08','2017-09-07 09:19:08','','','Contact Photos','4b7db531ad1920a7cb8fb76aed46ddd9-4.jpg?ts=1504775575','image/jpeg',175,175,5493,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n  \0B\0\0 \0\0\0\0\0 !\n1A\"Qaq%23#$&5BREs\0\0\0?\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*ՆX\Z\'p|LsN}Y%ZR|(J*I&+rJ#yI)%lZ,:i(ϥ)J*hχoмI$Dj- (C\"cI(s_L:g `wI9s.wYaC\"3:Ie~g,ڮϨ6&tt/iKxvEqE˒S.:t7Vg5u;Ys=YFZRk}jʮHnlIfhM6&\";MDD]¿SRchB{tƤGVMʽ4$&2\"%{̈}9$489hۆ @e崭\ZطHlMT:!M2aLc/RiCrT\ZuΥ$FIN춆q5S,-Bc^op}AW8Y)c?T2FiդkI$bՓ鐸A\\<FhŭܿIk)3^Nٓwu]kU4J8W*F7`^U:VңI%̷?|C{Oh[:rqğ 0\\\Ze0\\ޅ\Z.RvZNOI\n#O v-ikFo;EIձ5\ZRv!,\\4;MyE3ta9B:̌[XTh_\"r4k*F\\U:Mz\0u#\0C\0\0\0\0\0>frZ\\kpqҾ.oUuq-SCJKPSǬf2JJGD Ym+>!҄^\n\'/{} W7-K;KkI (;TF\rH̖J\0Jsj K\0mp֫WV\'\"IٹjTlx;ҤO,RԐǖ edK:8<)5hy Ów r*-0BfJ& u:fIVr:rjh.p甴9 MH>듲pgBҲ4:{-RTPMHZRw+|)DqKєW2WejO{F|aM)xhʴH-IF3捩Gِ\0\0\0\0\0qd-B\\*uDZnǮ~4gfGyN-mݯm(ָmWWIoԺw2IHX%Lza֞XY;$DQ{}54;9)k3S2%-|Ĕ\0EɧT|+2BBHUyK>Yk[\ZYN \"ZyTGV\ZĢ5MGROO&7 ;_Ou[7O?0RvVg#۔+E1[ٲ\0\0\0\0\0;X\ZqzqJ2c:#vIK^Fk4B/X﹑E4ehM88(:\0s2ia{CT\0XRJdz]d݉ ,1r~6DdGOBg&f)e+/4TQjѰ~wc8ڤFgTճG[M\')?JUDR)6v[#E3$n=JK\'Dq18򄭴7(UueLtv2ҤTK[o\0>}FH\0\0\0\0\0B\0Lvx(Ʋ93O\"\noHPQiJU;G\\/e>oQ{hnW^\0S8{\"ΛJK\\*G1)|\'s6@Mo+@:euw;uY*9rOl4YLԲ3Q#\"5E}qSSGHRb]{~&B\nq@wgvQg_=rcW6EPj\"؊vׇv{:׎V\r}LdD[u_^ ?!y֑p<[L^Z}ӵk;[cJ.ɖ6鲔$/DY[kwRD\0\0\0\0.nNnv\rvsvupVV6;o̥M\'x8x-aESl13K Yx%rJrRY5B$e=4_ć&N\Z_kHQ;wdW/+^&)5i(-Z<9sN.jM #p9hԥiʼnQ=&UOQnQԔla\\.\\\0㴒Mʮ%y2=ޟ]ZB˩J$\0-FX R2bX01[#s;=\Z\r&QiOwM Z-:i)tY.ϺfbVZ:Z`W%T3>I>FdF-$j#;*O$)R])}[d\0 z~BпgG 4L=c&n3κu6[8eTҔ.GUF(G$^Jڑ\rſqخwZ\rnÙL5>wv$Rb2{UB?H LAFLi%`TjѫQ\0>\0\0\0\0SG M%BIy[뽊G?t/ǘP4% YT*\">a&}bpija־x[Wnb\' +H%L3ȬNC+RW\nbL+`\0\0\0!MWp᭭gk&4qSGe:O-]1Iw#277Q%!T2C0Ҵ>MYV8#chV(vvTN-~=I[WM5㿀rnue0[ΝX$!DB;0z>S%&Fxʗ1+cRղGB)r]/q Ïz ύ9U/%,/SrCj(\\d$DeQȵ}Bj+n--ܧem3뷐 \0q65YRGX:a:\\\'{V(CӪ\Z.7p42cZQz_j6{s}ARrҋӗx^_է$R#N+j}\Z4hQ>[E\0 \0\0\0\0Rtwؾ~{|\00 \"8\"M/j9E-`អ\r-[,&ooL)&\r1EE)aM|i:{Lٞw,dRt aKBf 5Ô5b%֡ZuZꅊqNL2ÕoY↚}LVB\00ւ7s\0D{IN\n_J;)Tʮ>)URUVPlЏ`lD4SM8\rfѲ*HiP)CPO 3{a%yV)ynYiE3IVh; 8ݴʛG]5b~=I~}vݐr(C/mXHrN*ߎ\\==ZQed{\\nX^¹Z2TƓe%W\"\"wFVeL8$@KaM`9Gzvies^qY99(h9HF`kd)I$Br\n\"n5}. 9l2m&\nb+$V`\n\0++9W0hqqG\0GZ~. ׬c8o\rO5b61T\ZEW%BNnTJU2gfܤlu遅-r߲}M{2۞,[:\0^2֫ADH.a~X{\'?,5CfKW2}ߝ$+O0T\'cXXlfq 0# 8U(+*e ra`[Jprw휢VE+$z!]=j33WۮUȇb7f j,׳>NPHG,yQ\r u:%Ühƙi\'l;\"WI܅4R+EnQ*?&a%:6\rUM-(\0\08\0?\\^ᝠ+>*)1PPa$b:Vp097MLN!a-oX\0yLY#*_nT~%{]NI${LquI7i0qiw\'M-\Z^<]/)u NxU mX{ԬFYc(Vk0MlYlDf]Ou:YR0+ZZ!\rv[FG&(-D4jh\nR\05۾ۍSw{ae;qZ_ʴDdr6ͺT=J )H(r& &nk  bXBٓGmY> El\'x|5\"FrO& y%^\Zn(:ԓH*1{@b^\\k!令#\0#X3]Rzl \0 #\rD1t[gfZB*Q\"q*уjj$VZbE YPQ8~1$ s8XhFDG7M|lsѓ-QI6mRIV$ $P}4.!^5\n⾪\rfYT}ګEM|Usc=GmK;LcwO0Q={hc):Ě cr\\n귺{iU_7&L7)ӷ~\rK^fX,%_q8Z)+_#v,dSѓդyy\r?^RvYvSbL>Ee ^/q:V!Yd7M4V }+Jض WH K*$ y*Q1J#MPH`!C~T7<_]CL~IoݒU\0uE} V֘~ $RM4PC/a3-dLn.cdۛώЌb80b鮸4nNWJuWިcQrd\" TJ\0*Gi͸+E1vFhG敲MUuQIC\0qɓ/!ֿ',5,0,'','','',''),(42,5,11,'75859b10bb574e2e','01ebf2eb957e5aef5463ba5ae6510ef5','2017-09-07 09:19:08','2017-09-07 09:19:08','','','Contact Photos','4b7db531ad1920a7cb8fb76aed46ddd9-4.jpg?ts=1504775575','image/jpeg',48,48,1755,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \00\00\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa\0\0\0?\03csǜ?1{pK]_r\0BsK]n 4dfZ%ӣ ³+r0m&i-jAg>%hM%C¿pO!6xie5H)LWle!k:Thq2ڰNݴMj6A7?qYˌgZ[DEn&Z]-mnBa![v\\h2BaRI?<~/y=dG3JM[ݨ` ԭyN\0ɚȥ֐YʈO`=y| Ҽ&-Fmf+`<q{*En՘g$Y`P#I%;B~NMX}\']؜\ZlcޒZFQ.6?` />>J[X㦣`3l8m%X<=j2.L21\"D70Ĉ2+I1Kwn^i>%T%cƺx]l_/CXJRByŸQ-+μ+ug\\yJ7t{2U0OHmYF]qZa$fdB2FzXK3xq,8+-#?*\ZFV)/%xR3e0(b0Š;# ;Kl\r%YecCM6\'JP%81zWmJeZ⁜[&+i!.>Vz8XE}+d\r\0!PeաiUtvO;}qje0åi?~A-٘H q-b> \Z+9#7x1\Z\Ze=`t,\n\0\"\nn:x%zsϤ?z|գcuS?KR+1UhahTc%A1>?B\0',6,0,'','','',''),(43,2,12,'75859b10bb588dfc','b32d851ca091305b4cf5d115070cedbd','2017-09-07 09:11:20','2017-09-07 09:11:20','','','Contact Photos','777ac66400f3fef5ff42189840387ede-4.jpg?ts=1504775093','image/jpeg',175,175,5493,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n  \0B\0\0 \0\0\0\0\0 !\n1A\"Qaq%23#$&5BREs\0\0\0?\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*ՆX\Z\'p|LsN}Y%ZR|(J*I&+rJ#yI)%lZ,:i(ϥ)J*hχoмI$Dj- (C\"cI(s_L:g `wI9s.wYaC\"3:Ie~g,ڮϨ6&tt/iKxvEqE˒S.:t7Vg5u;Ys=YFZRk}jʮHnlIfhM6&\";MDD]¿SRchB{tƤGVMʽ4$&2\"%{̈}9$489hۆ @e崭\ZطHlMD:!M2aLc/RiCrT\ZuΥ$FIN춆q5S,-Bc^op}AW8Y)c?T2FiդkI$bՓ鐸A\\<FhŭܿIk)3^Nٓwu]kU4J8W*F7`^U:VңI%̷?|C{Oh[:rqğ 0\\\Ze0\\ޅ\Z.RvZNOI\n#O v-ikFo;EIձ5\ZRv!,\\4;MyE3ta9B:̌[XTh_\"r4k*F\\U:Mz\0u#\0C\0\0\0\0\0>frZ\\kpqҾ.oUuq-SCJKPSǬf2JJGD Ym+>!҄^\n\'/{} W7-K;KkI (;TF\rH̖J\0Jsj K\0mp֫WV\'\"IٹjTlx;ҤO,RԐǖ edK:8<)5hy Ów r*-0BfJ& u:fIVr:rjh.p甴9 MH>듲pgBҲ4:{-RTPMHZRw+|)DqKєW2WejO{F|aM)xhʴH-IF3捩Gِ\0\0\0\0\0qd-B\\*uDZnǮ~4gfGyN-mݯm(ָmWWIoԺw2IHX%Lza֞XY;$DQ{}54;9)k3S2%-|Ĕ\0EɧT|+2BBHUyK>Yk[\ZYN \"ZyTGV\ZĢ5MGROO&7 ;_Ou[7O?0RvVg#۔+E1[ٲ\0\0\0\0\0;X\ZqzqJ2c:#vIK^Fk4B/X﹑E4ehM88(:\0s2ia{CT\0XRJdz]d݉ ,1r~6DdGOBg&f)e+/4TQjѰ~wc8ڤFgTճG[M\')?JUDR)6v[#E3$n=JK\'Dq18򄭴7(UueLtv2ҤTK[o\0>}FH\0\0\0\0\0B\0Lvx(Ʋ93O\"\noHPQiJU;G\\/e>oQ{hnW^\0S8{\"ΛJK\\*G1)|\'s6@Mo+@:euw;uY*9rOl4YLԲ3Q#\"5E}qSSGHRb]{~&B\nq@wgvQg_=rcW6EPj\"؊vׇv{:׎V\r}LdD[u_^ ?!y֑p<[L^Z}ӵk;[cJ.ɖ6鲔$/DY[kwRD\0\0\0\0.nNnv\rvsvupVV6;o̥M\'x8x-aESl13K Yx%rJrRY5B$e=4_ć&N\Z_kHQ;wdW/+^&)5i(-Z<9sN.jM #p9hԥiʼnQ=&UOQnQԔla\\.\\\0㴒Mʮ%y2=ޟ]ZB˩J$\0-FX R2bX01[#s;=\Z\r&QiOwM Z-:i)tY.ϺfbVZ:Z`W%T3>I>FdF-$j#;*O$)R])}[d\0 z~BпgG 4L=c&n3κu6[8eTҔ.GUF(G$^Jڑ\rſqخwZ\rnÙL5>wv$Rb2{UB?H LAFLi%`TjѫQ\0>\0\0\0\0SG M%BIy[뽊G?t/ǘP4% YT*\">a&}bpija־x[Wnb\' +H%L3ȬNC+RW\nbL+`\0\0\0!MWp᭭gk&4qSGe:O-]1Iw#277Q%!T2C0Ҵ>MYV8#chV(vvTN-~=I[WM5㿀rnue0[ΝX$!DB;0z>S%&Fxʗ1+cRղGB)r]/q Ïz ύ9U/%,/SrCj(\\d$DeQȵ}Bj+n--ܧem3뷐 \0q65YRGX:a:\\\'{V(CӪ\Z.7p42cZQz_j6{s}ARrҋӗx^_է$R#N+j}\Z4hQ>[E\0 \0\0\0\0Rtwؾ~{|\00 \"8\"M/j9E-`អ\r-[,&ooL)&\r1EE)aM|i:{Lٞw,dRt aKBf 5Ô5b%֡ZuZꅊqNL2ÕoY↚}LVB\00ւ7s\0D{IN\n_J;)Tʮ>)URUVPlЏ`lD4SM8\rfѲ*HiP)CPO 3{a%yV)ynYiE3IVh; 8ݴʛG]5b=I~}vݐr(C/nXHrN*ߎY=ZQed{\\nX^¹Z2TƓe%W\"\"wFVeL8$@KaM`9Gzvies^qY99(h9HF`kd)I$Br\n\"n5}. 9l2m&\nb+$V`\n\0++9W0hqqG\0GZ~. ׬c8o\rO5b61T\ZEW%BNnTJU2gfܤlu遅-r߲}M{2۞,[:\0^2֫ADH.a~X{\'?,5CfKW2}ߝ$+O0T\'cXXlfq 0# 8U(+*e ra`[Jprw휢VE+$z!]=j33WۮUȇb7f j,׳>NPHG,yQ\r u:%Ühƙi\'l;\"WI܅4R+EnQ*?&a%:6\rUM-(\0\08\0?\\^ᝠ+>*)1PPa$b:Vp097MLN!a-oX\0yLY#*_nT~%{]NI${LquI7i0qiw\'M-\Z^<]/)u NxU mX{ԬFYc(Vk0MlYlDf]Ou:YR0+ZZ!\rv[FG&(-D4jh\nR\05۾ۍSw{ae;qZ_ʴDdr6ͺT=J )H(r& &nk  bXBٓGmY> El\'x|5\"FrO& y%^\Zn(:ԓH*1{@b^\\k!令#\0#X3]Rzl \0 #\rD1t[gfZB*Q\"q*уjj$VZbE YPQ8~1$ s8XhFDG7M|lsѓ-QI6mRIV$ $P}4.!^5\n⾪\rfYT}ګEM|Usc=GmK;LcwO0Q={hc):Ě cr\\n귺{iU_7&L7)ӷ~\rK^fX,%_q8Z)+_#v,dSѓդyy\r?^RvYvSbL>Ee ^/q:V!Yd7M4V }+Jض WH K*$ y*Q1J#MPH`!C~T7<_]CL~IoݒU\0uE} V֘~ $RM4PC/a3-dLn.cdۛώЌb80b鮸4nNWJuWިcQrd\" TJ\0*Gi͸+E1vFhG敲MUuQIC\0qɓ/!ֿ',5,0,'','','',''),(45,2,12,'75859b10bb588dfc','b32d851ca091305b4cf5d115070cedbd','2017-09-07 09:11:20','2017-09-07 09:11:20','','','Contact Photos','777ac66400f3fef5ff42189840387ede-4.jpg?ts=1504775093','image/jpeg',48,48,1755,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \00\00\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa\0\0\0?\03csǜ?1{pK]_r\0BsK]n 4dfZ%ӣ ³+r0m&i-jAg>%hM%C¿pO!6xie5H)LWle!k:Thq2ڰNݴMj6A7?qYˌgZ[DEn&Z]-mnBa![v\\h2BaRI?<~/y=dG3JM[ݨ` ԭyN\0ɚȥ֐YʈO`=y| Ҽ&-Fmf+`<q{*En՘g$Y`P#I%;B~NMX}\']؜\ZlcޒZFQ.6?` />>J[X㦣`3l8m%X<=j2.L21\"D70Ĉ2+I1Kwn^i>%T%cƺx]l_/CXJRByŸQ-+μ+ug\\yJ7t{2U0OHmYF]qZa$fdB2FzXK3xq,8+-#?*\ZFV)/%xR3e0(b0Š;# ;Kl\r%YecCM6\'JP%81zWmJeZ⁜[&+i!.>Vz8XE}+d\r\0!PeաiUtvO;}qje0åi?~A-٘H q-b> \Z+9#7x1\Z\Ze=`t,\n\0\"\nn:x%zsϤ?z|գcuS?KR+1UhahTc%A1>?B\0',6,0,'','','',''),(46,0,12,'75859b10bb58e506','777ac66400f3fef5ff42189840387ede','2017-09-07 09:13:05','2017-09-07 09:13:05','','','Contact Photos','15048d33e71544a25a6dd13bb081c78f-4.jpg?ts=1504775545','image/jpeg',175,175,5493,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n  \0B\0\0 \0\0\0\0\0 !\n1A\"Qaq%23#$&5BREs\0\0\0?\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*ՆX\Z\'p|LsN}Y%ZR|(J*I&+rJ#yI)%lZ,:i(ϥ)J*hχoмI$Dj- (C\"cI(s_L:g `wI9s.wYaC\"3:Ie~g,ڮϨ6&tt/iKxvEqE˒S.:t7Vg5u;Ys=YFZRk}jʮHnlIfhM6&\";MDD]¿SRchB{tƤGVMʽ4$&2\"%{̈}9$489hۆ @e崭\ZطHlMT:!M2aLc/RiCrT\ZuΥ$FIN춆q5S,-Bc^op}AW8Y)c?T2FiդkI$bՓ鐸A\\<FhŭܿIk)3^Nٓwu]kU4J8W*F7`^U:VңI%̷?|C{Oh[:rqğ 0\\\Ze0\\ޅ\Z.RvZNOI\n#O v-ikFo;EIձ5\ZRv!,\\4;MyE3ta9B:̌[XTh_\"r4k*F\\U:Mz\0u#\0C\0\0\0\0\0>frZ\\kpqҾ.oUuq-SCJKPSǬf2JJGD Ym+>!҄^\n\'/{} W7-K;KkI (;TF\rH̖J\0Jsj K\0mp֫WV\'\"IٹjTlx;ҤO,RԐǖ edK:8<)5hy Ów r*-0BfJ& u:fIVr:rjh.p甴9 MH>듲pgBҲ4:{-RTPMHZRw+|)DqKєW2WejO{F|aM)xhʴH-IF3捩Gِ\0\0\0\0\0qd-B\\*uDZnǮ~4gfGyN-mݯm(ָmWWIoԺw2IHX%Lza֞XY;$DQ{}54;9)k3S2%-|Ĕ\0EɧT|+2BBHUyK>Yk[\ZYN \"ZyTGV\ZĢ5MGROO&7 ;_Ou[7O?0RvVg#۔+E1[ٲ\0\0\0\0\0;X\ZqzqJ2c:#vIK^Fk4B/X﹑E4ehM88(:\0s2ia{CT\0XRJdz]d݉ ,1r~6DdGOBg&f)e+/4TQjѰ~wc8ڤFgTճG[M\')?JUDR)6v[#E3$n=JK\'Dq18򄭴7(UueLtv2ҤTK[o\0>}FH\0\0\0\0\0B\0Lvx(Ʋ93O\"\noHPQiJU;G\\/e>oQ{hnW^\0S8{\"ΛJK\\*G1)|\'s6@Mo+@:euw;uY*9rOl4YLԲ3Q#\"5E}qSSGHRb]{~&B\nq@wgvQg_=rcW6EPj\"؊vׇv{:׎V\r}LdD[u_^ ?!y֑p<[L^Z}ӵk;[cJ.ɖ6鲔$/DY[kwRD\0\0\0\0.nNnv\rvsvupVV6;o̥M\'x8x-aESl13K Yx%rJrRY5B$e=4_ć&N\Z_kHQ;wdW/+^&)5i(-Z<9sN.jM #p9hԥiʼnQ=&UOQnQԔla\\.\\\0㴒Mʮ%y2=ޟ]ZB˩J$\0-FX R2bX01[#s;=\Z\r&QiOwM Z-:i)tY.ϺfbVZ:Z`W%T3>I>FdF-$j#;*O$)R])}[d\0 z~BпgG 4L=c&n3κu6[8eTҔ.GUF(G$^Jڑ\rſqخwZ\rnÙL5>wv$Rb2{UB?H LAFLi%`TjѫQ\0>\0\0\0\0SG M%BIy[뽊G?t/ǘP4% YT*\">a&}bpija־x[Wnb\' +H%L3ȬNC+RW\nbL+`\0\0\0!MWp᭭gk&4qSGe:O-]1Iw#277Q%!T2C0Ҵ>MYV8#chV(vvTN-~=I[WM5㿀rnue0[ΝX$!DB;0z>S%&Fxʗ1+cRղGB)r]/q Ïz ύ9U/%,/SrCj(\\d$DeQȵ}Bj+n--ܧem3뷐 \0q65YRGX:a:\\\'{V(CӪ\Z.7p42cZQz_j6{s}ARrҋӗx^_է$R#N+j}\Z4hQ>[E\0 \0\0\0\0Rtwؾ~{|\00 \"8\"M/j9E-`អ\r-[,&ooL)&\r1EE)aM|i:{Lٞw,dRt aKBf 5Ô5b%֡ZuZꅊqNL2ÕoY↚}LVB\00ւ7s\0D{IN\n_J;)Tʮ>)URUVPlЏ`lD4SM8\rfѲ*HiP)CPO 3{a%yV)ynYiE3IVh; 8ݴʛG]5b~=I~}vݐr(C/mXHrN*ߎ\\==ZQed{\\nX^¹Z2TƓe%W\"\"wFVeL8$@KaM`9Gzvies^qY99(h9HF`kd)I$Br\n\"n5}. 9l2m&\nb+$V`\n\0++9W0hqqG\0GZ~. ׬c8o\rO5b61T\ZEW%BNnTJU2gfܤlu遅-r߲}M{2۞,[:\0^2֫ADH.a~X{\'?,5CfKW2}ߝ$+O0T\'cXXlfq 0# 8U(+*e ra`[Jprw휢VE+$z!]=j33WۮUȇb7f j,׳>NPHG,yQ\r u:%Ühƙi\'l;\"WI܅4R+EnQ*?&a%:6\rUM-(\0\08\0?\\^ᝠ+>*)1PPa$b:Vp097MLN!a-oX\0yLY#*_nT~%{]NI${LquI7i0qiw\'M-\Z^<]/)u NxU mX{ԬFYc(Vk0MlYlDf]Ou:YR0+ZZ!\rv[FG&(-D4jh\nR\05۾ۍSw{ae;qZ_ʴDdr6ͺT=J )H(r& &nk  bXBٓGmY> El\'x|5\"FrO& y%^\Zn(:ԓH*1{@b^\\k!令#\0#X3]Rzl \0 #\rD1t[gfZB*Q\"q*уjj$VZbE YPQ8~1$ s8XhFDG7M|lsѓ-QI6mRIV$ $P}4.!^5\n⾪\rfYT}ګEM|Usc=GmK;LcwO0Q={hc):Ě cr\\n귺{iU_7&L7)ӷ~\rK^fX,%_q8Z)+_#v,dSѓդyy\r?^RvYvSbL>Ee ^/q:V!Yd7M4V }+Jض WH K*$ y*Q1J#MPH`!C~T7<_]CL~IoݒU\0uE} V֘~ $RM4PC/a3-dLn.cdۛώЌb80b鮸4nNWJuWިcQrd\" TJ\0*Gi͸+E1vFhG敲MUuQIC\0qɓ/!ֿ',5,0,'','','',''),(48,0,12,'75859b10bb58e506','777ac66400f3fef5ff42189840387ede','2017-09-07 09:13:05','2017-09-07 09:13:05','','','Contact Photos','15048d33e71544a25a6dd13bb081c78f-4.jpg?ts=1504775545','image/jpeg',48,48,1755,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \00\00\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa\0\0\0?\03csǜ?1{pK]_r\0BsK]n 4dfZ%ӣ ³+r0m&i-jAg>%hM%C¿pO!6xie5H)LWle!k:Thq2ڰNݴMj6A7?qYˌgZ[DEn&Z]-mnBa![v\\h2BaRI?<~/y=dG3JM[ݨ` ԭyN\0ɚȥ֐YʈO`=y| Ҽ&-Fmf+`<q{*En՘g$Y`P#I%;B~NMX}\']؜\ZlcޒZFQ.6?` />>J[X㦣`3l8m%X<=j2.L21\"D70Ĉ2+I1Kwn^i>%T%cƺx]l_/CXJRByŸQ-+μ+ug\\yJ7t{2U0OHmYF]qZa$fdB2FzXK3xq,8+-#?*\ZFV)/%xR3e0(b0Š;# ;Kl\r%YecCM6\'JP%81zWmJeZ⁜[&+i!.>Vz8XE}+d\r\0!PeաiUtvO;}qje0åi?~A-٘H q-b> \Z+9#7x1\Z\Ze=`t,\n\0\"\nn:x%zsϤ?z|գcuS?KR+1UhahTc%A1>?B\0',6,0,'','','',''),(49,6,13,'75859b10bc4f03c7','f958f83dd2af4c30b30045dfc6ff0718','2017-09-07 09:17:49','2017-09-07 09:17:49','','','Contact Photos','4b7db531ad1920a7cb8fb76aed46ddd9-4.jpg?ts=1504775575','image/jpeg',175,175,5493,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n  \0B\0\0 \0\0\0\0\0 !\n1A\"Qaq%23#$&5BREs\0\0\0?\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*ՆX\Z\'p|LsN}Y%ZR|(J*I&+rJ#yI)%lZ,:i(ϥ)J*hχoмI$Dj- (C\"cI(s_L:g `wI9s.wYaC\"3:Ie~g,ڮϨ6&tt/iKxvEqE˒S.:t7Vg5u;Ys=YFZRk}jʮHnlIfhM6&\";MDD]¿SRchB{tƤGVMʽ4$&2\"%{̈}9$489hۆ @e崭\ZطHlMT:!M2aLc/RiCrT\ZuΥ$FIN춆q5S,-Bc^op}AW8Y)c?T2FiդkI$bՓ鐸A\\<FhŭܿIk)3^Nٓwu]kU4J8W*F7`^U:VңI%̷?|C{Oh[:rqğ 0\\\Ze0\\ޅ\Z.RvZNOI\n#O v-ikFo;EIձ5\ZRv!,\\4;MyE3ta9B:̌[XTh_\"r4k*F\\U:Mz\0u#\0C\0\0\0\0\0>frZ\\kpqҾ.oUuq-SCJKPSǬf2JJGD Ym+>!҄^\n\'/{} W7-K;KkI (;TF\rH̖J\0Jsj K\0mp֫WV\'\"IٹjTlx;ҤO,RԐǖ edK:8<)5hy Ów r*-0BfJ& u:fIVr:rjh.p甴9 MH>듲pgBҲ4:{-RTPMHZRw+|)DqKєW2WejO{F|aM)xhʴH-IF3捩Gِ\0\0\0\0\0qd-B\\*uDZnǮ~4gfGyN-mݯm(ָmWWIoԺw2IHX%Lza֞XY;$DQ{}54;9)k3S2%-|Ĕ\0EɧT|+2BBHUyK>Yk[\ZYN \"ZyTGV\ZĢ5MGROO&7 ;_Ou[7O?0RvVg#۔+E1[ٲ\0\0\0\0\0;X\ZqzqJ2c:#vIK^Fk4B/X﹑E4ehM88(:\0s2ia{CT\0XRJdz]d݉ ,1r~6DdGOBg&f)e+/4TQjѰ~wc8ڤFgTճG[M\')?JUDR)6v[#E3$n=JK\'Dq18򄭴7(UueLtv2ҤTK[o\0>}FH\0\0\0\0\0B\0Lvx(Ʋ93O\"\noHPQiJU;G\\/e>oQ{hnW^\0S8{\"ΛJK\\*G1)|\'s6@Mo+@:euw;uY*9rOl4YLԲ3Q#\"5E}qSSGHRb]{~&B\nq@wgvQg_=rcW6EPj\"؊vׇv{:׎V\r}LdD[u_^ ?!y֑p<[L^Z}ӵk;[cJ.ɖ6鲔$/DY[kwRD\0\0\0\0.nNnv\rvsvupVV6;o̥M\'x8x-aESl13K Yx%rJrRY5B$e=4_ć&N\Z_kHQ;wdW/+^&)5i(-Z<9sN.jM #p9hԥiʼnQ=&UOQnQԔla\\.\\\0㴒Mʮ%y2=ޟ]ZB˩J$\0-FX R2bX01[#s;=\Z\r&QiOwM Z-:i)tY.ϺfbVZ:Z`W%T3>I>FdF-$j#;*O$)R])}[d\0 z~BпgG 4L=c&n3κu6[8eTҔ.GUF(G$^Jڑ\rſqخwZ\rnÙL5>wv$Rb2{UB?H LAFLi%`TjѫQ\0>\0\0\0\0SG M%BIy[뽊G?t/ǘP4% YT*\">a&}bpija־x[Wnb\' +H%L3ȬNC+RW\nbL+`\0\0\0!MWp᭭gk&4qSGe:O-]1Iw#277Q%!T2C0Ҵ>MYV8#chV(vvTN-~=I[WM5㿀rnue0[ΝX$!DB;0z>S%&Fxʗ1+cRղGB)r]/q Ïz ύ9U/%,/SrCj(\\d$DeQȵ}Bj+n--ܧem3뷐 \0q65YRGX:a:\\\'{V(CӪ\Z.7p42cZQz_j6{s}ARrҋӗx^_է$R#N+j}\Z4hQ>[E\0 \0\0\0\0Rtwؾ~{|\00 \"8\"M/j9E-`អ\r-[,&ooL)&\r1EE)aM|i:{Lٞw,dRt aKBf 5Ô5b%֡ZuZꅊqNL2ÕoY↚}LVB\00ւ7s\0D{IN\n_J;)Tʮ>)URUVPlЏ`lD4SM8\rfѲ*HiP)CPO 3{a%yV)ynYiE3IVh; 8ݴʛG]5b~=I~}vݐr(C/mXHrN*ߎ\\==ZQed{\\nX^¹Z2TƓe%W\"\"wFVeL8$@KaM`9Gzvies^qY99(h9HF`kd)I$Br\n\"n5}. 9l2m&\nb+$V`\n\0++9W0hqqG\0GZ~. ׬c8o\rO5b61T\ZEW%BNnTJU2gfܤlu遅-r߲}M{2۞,[:\0^2֫ADH.a~X{\'?,5CfKW2}ߝ$+O0T\'cXXlfq 0# 8U(+*e ra`[Jprw휢VE+$z!]=j33WۮUȇb7f j,׳>NPHG,yQ\r u:%Ühƙi\'l;\"WI܅4R+EnQ*?&a%:6\rUM-(\0\08\0?\\^ᝠ+>*)1PPa$b:Vp097MLN!a-oX\0yLY#*_nT~%{]NI${LquI7i0qiw\'M-\Z^<]/)u NxU mX{ԬFYc(Vk0MlYlDf]Ou:YR0+ZZ!\rv[FG&(-D4jh\nR\05۾ۍSw{ae;qZ_ʴDdr6ͺT=J )H(r& &nk  bXBٓGmY> El\'x|5\"FrO& y%^\Zn(:ԓH*1{@b^\\k!令#\0#X3]Rzl \0 #\rD1t[gfZB*Q\"q*уjj$VZbE YPQ8~1$ s8XhFDG7M|lsѓ-QI6mRIV$ $P}4.!^5\n⾪\rfYT}ګEM|Usc=GmK;LcwO0Q={hc):Ě cr\\n귺{iU_7&L7)ӷ~\rK^fX,%_q8Z)+_#v,dSѓդyy\r?^RvYvSbL>Ee ^/q:V!Yd7M4V }+Jض WH K*$ y*Q1J#MPH`!C~T7<_]CL~IoݒU\0uE} V֘~ $RM4PC/a3-dLn.cdۛώЌb80b鮸4nNWJuWިcQrd\" TJ\0*Gi͸+E1vFhG敲MUuQIC\0qɓ/!ֿ',5,0,'','','',''),(51,6,13,'75859b10bc4f03c7','f958f83dd2af4c30b30045dfc6ff0718','2017-09-07 09:17:49','2017-09-07 09:17:49','','','Contact Photos','4b7db531ad1920a7cb8fb76aed46ddd9-4.jpg?ts=1504775575','image/jpeg',48,48,1755,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \00\00\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa\0\0\0?\03csǜ?1{pK]_r\0BsK]n 4dfZ%ӣ ³+r0m&i-jAg>%hM%C¿pO!6xie5H)LWle!k:Thq2ڰNݴMj6A7?qYˌgZ[DEn&Z]-mnBa![v\\h2BaRI?<~/y=dG3JM[ݨ` ԭyN\0ɚȥ֐YʈO`=y| Ҽ&-Fmf+`<q{*En՘g$Y`P#I%;B~NMX}\']؜\ZlcޒZFQ.6?` />>J[X㦣`3l8m%X<=j2.L21\"D70Ĉ2+I1Kwn^i>%T%cƺx]l_/CXJRByŸQ-+μ+ug\\yJ7t{2U0OHmYF]qZa$fdB2FzXK3xq,8+-#?*\ZFV)/%xR3e0(b0Š;# ;Kl\r%YecCM6\'JP%81zWmJeZ⁜[&+i!.>Vz8XE}+d\r\0!PeաiUtvO;}qje0åi?~A-٘H q-b> \Z+9#7x1\Z\Ze=`t,\n\0\"\nn:x%zsϤ?z|գcuS?KR+1UhahTc%A1>?B\0',6,0,'','','',''),(52,2,14,'75859b10bc511276','ed2cf7a93daffb15532a78b261ac4685','2017-09-07 09:16:08','2017-09-07 09:16:08','','','Contact Photos','6.jpg','image/jpeg',175,175,5486,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n  \0B\0\0 \0\0\0\0\0 !\n1A\"Qaq%23R#$&5BEs\0\0\0?\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*ՆX\Zgp|LsN}Y%ZR|(J*I&+rJ#yI)%lZ,:i(ϥ)J*hχo>$Œd \"5ɐbo9/צF3qN;뤂9;߬Kka0Z$ԲOb3gWqgUlW\0ĺQ<;J;剽ŒTh܋}h>#\0\0\0\0\0\0\0>=]Xwg-8i9uN梿ݱ^-l$$5Rt\"e):G+3Ϛͺ,-d5ܾn~5SeW$76sS$4SME\"\"O._)YŽ1\rX!M\nmyKlR#kM&^o|ML}IjOD>OJ\Zmiv2rVӍBl[rdD;k2dZ8($h:״y}`\0\0\0\0\0\0\08ƣ37 } Nsſ]Ec pJL򄩵œU<Y)O&$.!EQ%NCSL8d#z9㔚g,ܮG w7GggU)F]EsI-DS:{-e|jwK P䗴[듲pgBҲ:t[I줩*¤VpS◣(dBŗ4B. su= =4ᢙKAeZ$qu餣}Fԣ\0\0\0\0\0\nYNo!Nj{\"F-zyc?s\Z I3#̼˧Q\rk\\]6PꫫUr$]MIN^|$^u,ݦ=0O,Vt,p]I(F\Z̔QbJIDl\0dӪ>o!Sg[$i*<\\Qng|Qu,,tu-<#\rbQ\Z&vc٧u-\'Bb);C3haKr\"ۘr-\0\0\0\0\0Ky8qa^1[؍$#5K,JLȌaLs&[d1\rצKɧ=\0DxaÓ_Udǁ5%~<&ܾ^G⏚_Kωf\\O2ث=t27 36FffJw&M^DDV\0\0\0\0\0A-GM:]\ZN/&ɛ3:Rv_?]%0^w ghF˭3橯c`jGf=hR ȪnG)#I&e696\0\0\0\0\0\0L4/6v91!\r),~*Rg#URij\"rNPkJ;m>bd&XFޭb48KKT\\h^Q̶#I\ZhWe+_ͺɧI;\nF.Vw)7|U-R/1.t2fsniEu?bDV2#Cau33q2jwZqN?;^XR#g3Dj֣&\nI*);-xj7A%GiŢV8TNBVERe*WZMQi;iR*h-\0>$\0\0\0\0\0!}Lvx(Ʋ93O\"\noHPQiJU;G\\/e>oQ{hnW^\0S8{\"ΛJK\\*G1)|\'s6@Mo+@:euw;uY*9rOl4YLԲ3Q#\"5E}qSSGHRb]{~&B\nq@wgvQg_=rcW6EPj\"؊vׇv{:׎V\r}LdD[u_^ ?!y֑p<[L^Z}ӵk;[cJ.ɖ6鲔$/DY[kwRD\0\0\0\0.nNnv\rvsvupVV6;o̥M\'x8x-aESl13K Yx%rJrRY5B$e=4_ć&N\Z_kHQ;wdW/+^&)5i([xrIW+]}f,\n^G,sJ\'8ӫzL+Z%l$Y(:]6\0ei%v]Jd{o?${;SؔI-[l;ǢeŎ3lb`cnFv6{\nm 퍍JZ\\dJ2ڀ#opMNӷw8m2i$dm$EjDMr\"bvKȴ4s܈\ZSENU\'|{uHn0BaG\'w~x-5:@\0\0\0\0|(\\-es$ c\' 4W\"+HSw:%25Ȉ׶ܜ3B\rW\\e34hё/Zq&%-¢$ʄʺiS2g@ +mRӭVNQ\\5[B챌hx%kk91&rQ%Hjp՗htזf,a\"ڪA@d&b\n4cI+\0-RV^_gG<\0\0\0\0Wc3M214V9&n)мsc73MB/ǬD<%ePJXGZ!m_UX:,m0y#𖦳U2SD\"9 I^)#\r2]\0\0\0<;~bj\rmk;^I5]28)~j2K!d dFI) ]_8q:j:űEڱFn`=ZqmL}$JJZiwhtK->)t%\Zy&\"$r0~Ʊك)23T[\Z:LL*{f{^|m|D5WtRy)dzX.QD&G\"$#YT/RBrMŵź쭶}>{v\0\0>_;.&ƹ *H6L\'R $jhuzuQvCQEҦ:y}ƚU,kJ!Y>}Fк/no3NZQw35r+dJRDvеmOF\n\'k~|H38\0\0\0\0\0cGT/]/_?F92GIMZ1\'(l3AKuŒRM4w$ԙ!(RH\'~.3,3u (s@#.m1HwK[:vtG\'9&2D$N0Yu\nn4:J_# \0+ˮ&8H\ZWҾSidr؍ed}K{L:1\rqjNě(Z735T_s\0\0\0\0\0\0Ɣd~?T\02}nj눝F o1-y ]čhv9nQHȌm{>m H:5;{#RTKy~2v\0\0\0\0\0\0uhJ8=UCh<^;F [L6$\0\0EJ]]z2ƣszT8ƭ{\Zx*P} c鷐\0\0\0\0\0\0\ZI7IwD\0& q-Î>鿡\r\0\0%H?yt!\0\0\0\0\0\0\Z)VFַjgf^D{ ox\0\0\0\0\0\0\0\0\0\0\0\0',4,0,'','','',''),(53,2,14,'75859b10bc511276','ed2cf7a93daffb15532a78b261ac4685','2017-09-07 09:16:08','2017-09-07 09:16:08','','','Contact Photos','6.jpg','image/jpeg',80,80,2703,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \0P\0P\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n \04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#3Sa\0\0\0?\0M5AQ\0jǯ<_T@Zi9׾*){ڥJY[6he ,u$1tKvD3%g[I_:kƵJuB7\'vX3iRj:G*e\0aM|i:{Kٞw,dRt aKBf }zao-fr@@D5֮VbS&-Lm[xS!d\"ἵ1/n}U2e&T`aU4#``!\rũl>5tl\n(\"i\nP)\' rc-^je[ZEt\0lA-\'!~N.Am2p\rjXOR_]dr8$+\' ۬. Ӭ[8o\rbO5b61T\ZEW%BNnTJSd͸\"aۦ˧~m7\rnxndxZz1 |#;Mu_5I7,\";w8L SY7ڪJcDS LQe[DmacܜrLL /m_˘~tFP?|R0c[wcoWu4,Ê.8%TLa3兂21o*IBe߶r8Z;AHq먆v;61a\\?nW\"Jݘ1N+^%9A\"tb(CGX7|.{mGt{ꧼs\r\ZejR5|]\'r1HŻF gl45V%4/P\0\08\0rMx73vۃ(+0LXߘQCB` [0\"d6j1:>c3c2:sH>p\\udV.U}QL>Cu9$2$ݦ”qil4j5zhgQtC-9T\']l\raR5IgMs)Y4A5fѳStZ%?:fJðUjuhP5 Zm ,!lѪ)d)H@\0׏nn5M;uk8bێ9*8w8 6{^SlPMgLISwg8!9\0Pİ\'e2ڲ}Oj%D`VMfJ4jQ}N3*1{@b^\\k!令#\0#X3]Rzl \0 #\rD1t[gfZB*Q\"q*уjj$VZbE YPQ8~1$ s8XhFDG7M|lsѓ-QI6mRIV$ $P}4.!^5\n⾪\rfYT}ګEM|Usc=GmK;LcwO0Q={hc):Ě cr\\n귺{iU_7&L7)ӷ~\rK^fX,%_q8Z)+_#v,dSѓդyy\r?^RvYvSbL>Ee ^/q:V!Yd7M4V }+Jض WH K*$ y*Q1J#MPH`!C~T7<_]CL~IoݒU\0uE} V֘~ $RM4PC/a3-dLn.cdۛώЌb80b鮸4nNWJuWިcQrd\" TJ\0*Gi͸+E1vFhG敲MUuQIC\0qɓ/!ֿ',5,0,'','','',''),(54,2,14,'75859b10bc511276','ed2cf7a93daffb15532a78b261ac4685','2017-09-07 09:16:08','2017-09-07 09:16:08','','','Contact Photos','6.jpg','image/jpeg',48,48,1755,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \00\00\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa\0\0\0?\03csǜ?1{pK]_r\0BsK]n 4dfZ%ӣ ³+r0m&i-jAg>%hM%C¿pO!6xie5H)LWle!k:Thq2ڰNݴMj6A7?qYˌgZ[DEn&Z]-mnBa![v\\h2BaRI?<~/y=dG3JM[ݨ` ԭyN\0ɚȥ֐YʈO`=y| Ҽ&-Fmf+`<q{*En՘g$Y`P#I%;B~NMX}\']؜\ZlcޒZFQ.6?` />>IX㞣`3lHm%X8=j2.K21$72)I1Cwn^i>%T%cƺx]l_/CXJRByŸQ-+μ+ug\\yJ7t{2U0OHmYF]qZa$fdB2FzXK3xq,8+-#?*\ZFV)/%xR3e0(b0Š;# ;Kl\r%YecCM6\'JP%81zWmJeZ⁜[&+i!.>Vz8XE}+d\r\0!PeաiUtvO;}qje0åi?~A-٘H q-b> \Z+9#7x1\Z\Ze=`t,\n\0\"\nn:x%zsϤ?z|գcuS?KR+1UhahTc%A1>?B\0',6,0,'','','',''),(55,0,14,'75859b10bc51688d','1eaeb44ce16c9a8548707cafe998e6dc','2017-09-07 09:13:05','2017-09-07 09:13:05','','','Contact Photos','d74f209bfcd190b3864fa678e5068a16-4.jpg?ts=1504775545','image/jpeg',175,175,5493,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n  \0B\0\0 \0\0\0\0\0 !\n1A\"Qaq%23#$&5BREs\0\0\0?\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*ՆX\Z\'p|LsN}Y%ZR|(J*I&+rJ#yI)%lZ,:i(ϥ)J*hχoмI$Dj- (C\"cI(s_L:g `wI9s.wYaC\"3:Ie~g,ڮϨ6&tt/iKxvEqE˒S.:t7Vg5u;Ys=YFZRk}jʮHnlIfhM6&\";MDD]¿SRchB{tƤGVMʽ4$&2\"%{̈}9$489hۆ @e崭\ZطHlMT:!M2aLc/RiCrT\ZuΥ$FIN춆q5S,-Bc^op}AW8Y)c?T2FiդkI$bՓ鐸A\\<FhŭܿIk)3^Nٓwu]kU4J8W*F7`^U:VңI%̷?|C{Oh[:rqğ 0\\\Ze0\\ޅ\Z.RvZNOI\n#O v-ikFo;EIձ5\ZRv!,\\4;MyE3ta9B:̌[XTh_\"r4k*F\\U:Mz\0u#\0C\0\0\0\0\0>frZ\\kpqҾ.oUuq-SCJKPSǬf2JJGD Ym+>!҄^\n\'/{} W7-K;KkI (;TF\rH̖J\0Jsj K\0mp֫WV\'\"IٹjTlx;ҤO,RԐǖ edK:8<)5hy Ów r*-0BfJ& u:fIVr:rjh.p甴9 MH>듲pgBҲ4:{-RTPMHZRw+|)DqKєW2WejO{F|aM)xhʴH-IF3捩Gِ\0\0\0\0\0qd-B\\*uDZnǮ~4gfGyN-mݯm(ָmWWIoԺw2IHX%Lza֞XY;$DQ{}54;9)k3S2%-|Ĕ\0EɧT|+2BBHUyK>Yk[\ZYN \"ZyTGV\ZĢ5MGROO&7 ;_Ou[7O?0RvVg#۔+E1[ٲ\0\0\0\0\0;X\ZqzqJ2c:#vIK^Fk4B/X﹑E4ehM88(:\0s2ia{CT\0XRJdz]d݉ ,1r~6DdGOBg&f)e+/4TQjѰ~wc8ڤFgTճG[M\')?JUDR)6v[#E3$n=JK\'Dq18򄭴7(UueLtv2ҤTK[o\0>}FH\0\0\0\0\0B\0Lvx(Ʋ93O\"\noHPQiJU;G\\/e>oQ{hnW^\0S8{\"ΛJK\\*G1)|\'s6@Mo+@:euw;uY*9rOl4YLԲ3Q#\"5E}qSSGHRb]{~&B\nq@wgvQg_=rcW6EPj\"؊vׇv{:׎V\r}LdD[u_^ ?!y֑p<[L^Z}ӵk;[cJ.ɖ6鲔$/DY[kwRD\0\0\0\0.nNnv\rvsvupVV6;o̥M\'x8x-aESl13K Yx%rJrRY5B$e=4_ć&N\Z_kHQ;wdW/+^&)5i(-Z<9sN.jM #p9hԥiʼnQ=&UOQnQԔla\\.\\\0㴒Mʮ%y2=ޟ]ZB˩J$\0-FX R2bX01[#s;=\Z\r&QiOwM Z-:i)tY.ϺfbVZ:Z`W%T3>I>FdF-$j#;*O$)R])}[d\0 z~BпgG 4L=c&n3κu6[8eTҔ.GUF(G$^Jڑ\rſqخwZ\rnÙL5>wv$Rb2{UB?H LAFLi%`TjѫQ\0>\0\0\0\0SG M%BIy[뽊G?t/ǘP4% YT*\">a&}bpija־x[Wnb\' +H%L3ȬNC+RW\nbL+`\0\0\0!MWp᭭gk&4qSGe:O-]1Iw#277Q%!T2C0Ҵ>MYV8#chV(vvTN-~=I[WM5㿀rnue0[ΝX$!DB;0z>S%&Fxʗ1+cRղGB)r]/q Ïz ύ9U/%,/SrCj(\\d$DeQȵ}Bj+n--ܧem3뷐 \0q65YRGX:a:\\\'{V(CӪ\Z.7p42cZQz_j6{s}ARrҋӗx^_է$R#N+j}\Z4hQ>[E\0 \0\0\0\0Rtwؾ~{|\00 \"8\"M/j9E-`អ\r-[,&ooL)&\r1EE)aM|i:{Lٞw,dRt aKBf 5Ô5b%֡ZuZꅊqNL2ÕoY↚}LVB\00ւ7s\0D{IN\n_J;)Tʮ>)URUVPlЏ`lD4SM8\rfѲ*HiP)CPO 3{a%yV)ynYiE3IVh; 8ݴʛG]5b~=I~}vݐr(C/mXHrN*ߎ\\==ZQed{\\nX^¹Z2TƓe%W\"\"wFVeL8$@KaM`9Gzvies^qY99(h9HF`kd)I$Br\n\"n5}. 9l2m&\nb+$V`\n\0++9W0hqqG\0GZ~. ׬c8o\rO5b61T\ZEW%BNnTJU2gfܤlu遅-r߲}M{2۞,[:\0^2֫ADH.a~X{\'?,5CfKW2}ߝ$+O0T\'cXXlfq 0# 8U(+*e ra`[Jprw휢VE+$z!]=j33WۮUȇb7f j,׳>NPHG,yQ\r u:%Ühƙi\'l;\"WI܅4R+EnQ*?&a%:6\rUM-(\0\08\0?\\^ᝠ+>*)1PPa$b:Vp097MLN!a-oX\0yLY#*_nT~%{]NI${LquI7i0qiw\'M-\Z^<]/)u NxU mX{ԬFYc(Vk0MlYlDf]Ou:YR0+ZZ!\rv[FG&(-D4jh\nR\05۾ۍSw{ae;qZ_ʴDdr6ͺT=J )H(r& &nk  bXBٓGmY> El\'x|5\"FrO& y%^\Zn(:ԓH*1{@b^\\k!令#\0#X3]Rzl \0 #\rD1t[gfZB*Q\"q*уjj$VZbE YPQ8~1$ s8XhFDG7M|lsѓ-QI6mRIV$ $P}4.!^5\n⾪\rfYT}ګEM|Usc=GmK;LcwO0Q={hc):Ě cr\\n귺{iU_7&L7)ӷ~\rK^fX,%_q8Z)+_#v,dSѓդyy\r?^RvYvSbL>Ee ^/q:V!Yd7M4V }+Jض WH K*$ y*Q1J#MPH`!C~T7<_]CL~IoݒU\0uE} V֘~ $RM4PC/a3-dLn.cdۛώЌb80b鮸4nNWJuWިcQrd\" TJ\0*Gi͸+E1vFhG敲MUuQIC\0qɓ/!ֿ',5,0,'','','',''),(57,0,14,'75859b10bc51688d','1eaeb44ce16c9a8548707cafe998e6dc','2017-09-07 09:13:05','2017-09-07 09:13:05','','','Contact Photos','d74f209bfcd190b3864fa678e5068a16-4.jpg?ts=1504775545','image/jpeg',48,48,1755,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \00\00\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa\0\0\0?\03csǜ?1{pK]_r\0BsK]n 4dfZ%ӣ ³+r0m&i-jAg>%hM%C¿pO!6xie5H)LWle!k:Thq2ڰNݴMj6A7?qYˌgZ[DEn&Z]-mnBa![v\\h2BaRI?<~/y=dG3JM[ݨ` ԭyN\0ɚȥ֐YʈO`=y| Ҽ&-Fmf+`<q{*En՘g$Y`P#I%;B~NMX}\']؜\ZlcޒZFQ.6?` />>J[X㦣`3l8m%X<=j2.L21\"D70Ĉ2+I1Kwn^i>%T%cƺx]l_/CXJRByŸQ-+μ+ug\\yJ7t{2U0OHmYF]qZa$fdB2FzXK3xq,8+-#?*\ZFV)/%xR3e0(b0Š;# ;Kl\r%YecCM6\'JP%81zWmJeZ⁜[&+i!.>Vz8XE}+d\r\0!PeաiUtvO;}qje0åi?~A-٘H q-b> \Z+9#7x1\Z\Ze=`t,\n\0\"\nn:x%zsϤ?z|գcuS?KR+1UhahTc%A1>?B\0',6,0,'','','',''),(58,4,15,'75859b10c420acd6','22875ea1ab42e09a2f1d3869cd6edfe7','2017-09-07 09:16:42','2017-09-07 09:16:42','','','Contact Photos','3.jpg','image/jpeg',175,175,5486,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n  \0B\0\0 \0\0\0\0\0 !\n1A\"Qaq%23R#$&5BEs\0\0\0?\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*ՆX\Zgp|LsN}Y%ZR|(J*I&+rJ#yI)%lZ,:i(ϥ)J*hχo>$Œd \"5ɐbo9/צF3qN;뤂9;߬Kka0Z$ԲOb3gWqgUlW\0ĺQ<;J;剽ŒTh܋}h>#\0\0\0\0\0\0\0>=]Xwg-8i9uN梿ݱ^-l$$5Rt\"e):G+3Ϛͺ,-d5ܾn~5SeW$76sS$4SME\"\"O._)YŽ1\rX!M\nmyKlR#kM&^o|ML}IjOD>OJ\Zmiv2rVӍBl[rdD;k2dZ8($h:״y}`\0\0\0\0\0\0\08ƣ37 } Nsſ]Ec pJL򄩵œU<Y)O&$.!EQ%NCSL8d#z9㔚g,ܮG w7GggU)F]EsI-DS:{-e|jwK P䗴[듲pgBҲ:t[I줩*¤VpS◣(dBŗ4B. su= =4ᢙKAeZ$qu餣}Fԣ\0\0\0\0\0\nYNo!Nj{\"F-zyc?s\Z I3#̼˧Q\rk\\]6PꫫUr$]MIN^|$^u,ݦ=0O,Vt,p]I(F\Z̔QbJIDl\0dӪ>o!Sg[$i*<\\Qng|Qu,,tu-<#\rbQ\Z&vc٧u-\'Bb);C3haKr\"ۘr-\0\0\0\0\0Ky8qa^1[؍$#5K,JLȌaLs&[d1\rצKɧ=\0DxaÓ_Udǁ5%~<&ܾ^G⏚_Kωf\\O2ث=t27 36FffJw&M^DDV\0\0\0\0\0A-GM:]\ZN/&ɛ3:Rv_?]%0^w ghF˭3橯c`jGf=hR ȪnG)#I&e696\0\0\0\0\0\0L4/6v91!\r),~*Rg#URij\"rNPkJ;m>bd&XFޭb48KKT\\h^Q̶#I\ZhWe+_ͺɧI;\nF.Vw)7|U-R/1.t2fsniEu?bDV2#Cau33q2jwZqN?;^XR#g3Dj֣&\nI*);-xj7A%GiŢV8TNBVERe*WZMQi;iR*h-\0>$\0\0\0\0\0!}Lvx(Ʋ93O\"\noHPQiJU;G\\/e>oQ{hnW^\0S8{\"ΛJK\\*G1)|\'s6@Mo+@:euw;uY*9rOl4YLԲ3Q#\"5E}qSSGHRb]{~&B\nq@wgvQg_=rcW6EPj\"؊vׇv{:׎V\r}LdD[u_^ ?!y֑p<[L^Z}ӵk;[cJ.ɖ6鲔$/DY[kwRD\0\0\0\0.nNnv\rvsvupVV6;o̥M\'x8x-aESl13K Yx%rJrRY5B$e=4_ć&N\Z_kHQ;wdW/+^&)5i([xrIW+]}f,\n^G,sJ\'8ӫzL+Z%l$Y(:]6\0ei%v]Jd{o?${;SؔI-[l;ǢeŎ3lb`cnFv6{\nm 퍍JZ\\dJ2ڀ#opMNӷw8m2i$dm$EjDMr\"bvKȴ4s܈\ZSENU\'|{uHn0BaG\'w~x-5:@\0\0\0\0|(\\-es$ c\' 4W\"+HSw:%25Ȉ׶ܜ3B\rW\\e34hё/Zq&%-¢$ʄʺiS2g@ +mRӭVNQ\\5[B챌hx%kk91&rQ%Hjp՗htזf,a\"ڪA@d&b\n4cI+\0-RV^_gG<\0\0\0\0Wc3M214V9&n)мsc73MB/ǬD<%ePJXGZ!m_UX:,m0y#𖦳U2SD\"9 I^)#\r2]\0\0\0<;~bj\rmk;^I5]28)~j2K!d dFI) ]_8q:j:űEڱFn`=ZqmL}$JJZiwhtK->)t%\Zy&\"$r0~Ʊك)23T[\Z:LL*{f{^|m|D5WtRy)dzX.QD&G\"$#YT/RBrMŵź쭶}>{v\0\0>_;.&ƹ *H6L\'R $jhuzuQvCQEҦ:y}ƚU,kJ!Y>}Fк/no3NZQw35r+dJRDvеmOF\n\'k~|H38\0\0\0\0\0cGT/]/_?F92GIMZ1\'(l3AKuŒRM4w$ԙ!(RH\'~.3,3u (s@#.m1HwK[:vtG\'9&2D$N0Yu\nn4:J_# \0+ˮ&8H\ZWҾSidr؍ed}K{L:1\rqjNě(Z735T_s\0\0\0\0\0\0Ɣd~?T\02}nj눝F o1-y ]čhv9nQHȌm{>m H:5;{#RTKy~2v\0\0\0\0\0\0uhJ8=UCh<^;F [L6$\0\0EJ]]z2ƣszT8ƭ{\Zx*P} c鷐\0\0\0\0\0\0\ZI7IwD\0& q-Î>鿡\r\0\0%H?yt!\0\0\0\0\0\0\Z)VFַjgf^D{ ox\0\0\0\0\0\0\0\0\0\0\0\0',4,0,'','','',''),(59,4,15,'75859b10c420acd6','22875ea1ab42e09a2f1d3869cd6edfe7','2017-09-07 09:16:42','2017-09-07 09:16:42','','','Contact Photos','3.jpg','image/jpeg',80,80,2703,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \0P\0P\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n \04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#3Sa\0\0\0?\0M5AQ\0jǯ<_T@Zi9׾*){ڥJY[6he ,u$1tKvD3%g[I_:kƵJuB7\'vX3iRj:G*e\0aM|i:{Kٞw,dRt aKBf }zao-fr@@D5֮VbS&-Lm[xS!d\"ἵ1/n}U2e&T`aU4#``!\rũl>5tl\n(\"i\nP)\' rc-^je[ZEt\0lA-\'!~N.Am2p\rjXOR_]dr8$+\' ۬. Ӭ[8o\rbO5b61T\ZEW%BNnTJSd͸\"aۦ˧~m7\rnxndxZz1 |#;Mu_5I7,\";w8L SY7ڪJcDS LQe[DmacܜrLL /m_˘~tFP?|R0c[wcoWu4,Ê.8%TLa3兂21o*IBe߶r8Z;AHq먆v;61a\\?nW\"Jݘ1N+^%9A\"tb(CGX7|.{mGt{ꧼs\r\ZejR5|]\'r1HŻF gl45V%4/P\0\08\0rMx73vۃ(+0LXߘQCB` [0\"d6j1:>c3c2:sH>p\\udV.U}QL>Cu9$2$ݦ”qil4j5zhgQtC-9T\']l\raR5IgMs)Y4A5fѳStZ%?:fJðUjuhP5 Zm ,!lѪ)d)H@\0׏nn5M;uk8bێ9*8w8 6{^SlPMgLISwg8!9\0Pİ\'e2ڲ}Oj%D`VMfJ4jQ}N3*1{@b^\\k!令#\0#X3]Rzl \0 #\rD1t[gfZB*Q\"q*уjj$VZbE YPQ8~1$ s8XhFDG7M|lsѓ-QI6mRIV$ $P}4.!^5\n⾪\rfYT}ګEM|Usc=GmK;LcwO0Q={hc):Ě cr\\n귺{iU_7&L7)ӷ~\rK^fX,%_q8Z)+_#v,dSѓդyy\r?^RvYvSbL>Ee ^/q:V!Yd7M4V }+Jض WH K*$ y*Q1J#MPH`!C~T7<_]CL~IoݒU\0uE} V֘~ $RM4PC/a3-dLn.cdۛώЌb80b鮸4nNWJuWިcQrd\" TJ\0*Gi͸+E1vFhG敲MUuQIC\0qɓ/!ֿ',5,0,'','','',''),(60,4,15,'75859b10c420acd6','22875ea1ab42e09a2f1d3869cd6edfe7','2017-09-07 09:16:42','2017-09-07 09:16:42','','','Contact Photos','3.jpg','image/jpeg',48,48,1755,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \00\00\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa\0\0\0?\03csǜ?1{pK]_r\0BsK]n 4dfZ%ӣ ³+r0m&i-jAg>%hM%C¿pO!6xie5H)LWle!k:Thq2ڰNݴMj6A7?qYˌgZ[DEn&Z]-mnBa![v\\h2BaRI?<~/y=dG3JM[ݨ` ԭyN\0ɚȥ֐YʈO`=y| Ҽ&-Fmf+`<q{*En՘g$Y`P#I%;B~NMX}\']؜\ZlcޒZFQ.6?` />>IX㞣`3lHm%X8=j2.K21$72)I1Cwn^i>%T%cƺx]l_/CXJRByŸQ-+μ+ug\\yJ7t{2U0OHmYF]qZa$fdB2FzXK3xq,8+-#?*\ZFV)/%xR3e0(b0Š;# ;Kl\r%YecCM6\'JP%81zWmJeZ⁜[&+i!.>Vz8XE}+d\r\0!PeաiUtvO;}qje0åi?~A-٘H q-b> \Z+9#7x1\Z\Ze=`t,\n\0\"\nn:x%zsϤ?z|գcuS?KR+1UhahTc%A1>?B\0',6,0,'','','',''),(61,3,16,'75859b10c4223968','9c78857b3d725c1c6d1227a7b8cbe6b2','2017-09-07 09:09:29','2017-09-07 09:09:29','','','Contact Photos','9c78857b3d725c1c6d1227a7b8cbe6b2-4.jpg?ts=1504775234','image/jpeg',175,175,5493,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n  \0B\0\0 \0\0\0\0\0 !\n1A\"Qaq%23#$&5BREs\0\0\0?\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*ՆX\Z\'p|LsN}Y%ZR|(J*I&+rJ#yI)%lZ,:i(ϥ)J*hχoмI$Dj- (C\"cI(s_L:g `wI9s.wYaC\"3:Ie~g,ڮϨ6&tt/iKxvEqE˒S.:t7Vg5u;Ys=YFZRk}jʮHnlIfhM6&\";MDD]¿SRchB{tƤGVMʽ4$&2\"%{̈}9$489hۆ @e崭\ZطHlMD:!M2aLc/RiCrT\ZuΥ$FIN춆q5S,-Bc^op}AW8Y)c?T2FiդkI$bՓ鐸A\\<FhŭܿIk)3^Nٓwu]kU4J8W*F7`^U:VңI%̷?|C{Oh[:rqğ 0\\\Ze0\\ޅ\Z.RvZNOI\n#O v-ikFo;EIձ5\ZRv!,\\4;MyE3ta9B:̌[XTh_\"r4k*F\\U:Mz\0u#\0C\0\0\0\0\0>frZ\\kpqҾ.oUuq-SCJKPSǬf2JJGD Ym+>!҄^\n\'/{} W7-K;KkI (;TF\rH̖J\0Jsj K\0mp֫WV\'\"IٹjTlx;ҤO,RԐǖ edK:8<)5hy Ów r*-0BfJ& u:fIVr:rjh.p甴9 MH>듲pgBҲ4:{-RTPMHZRw+|)DqKєW2WejO{F|aM)xhʴH-IF3捩Gِ\0\0\0\0\0qd-B\\*uDZnǮ~4gfGyN-mݯm(ָmWWIoԺw2IHX%Lza֞XY;$DQ{}54;9)k3S2%-|Ĕ\0EɧT|+2BBHUyK>Yk[\ZYN \"ZyTGV\ZĢ5MGROO&7 ;_Ou[7O?0RvVg#۔+E1[ٲ\0\0\0\0\0;X\ZqzqJ2c:#vIK^Fk4B/X﹑E4ehM88(:\0s2ia{CT\0XRJdz]d݉ ,1r~6DdGOBg&f)e+/4TQjѰ~wc8ڤFgTճG[M\')?JUDR)6v[#E3$n=JK\'Dq18򄭴7(UueLtv2ҤTK[o\0>}FH\0\0\0\0\0B\0Lvx(Ʋ93O\"\noHPQiJU;G\\/e>oQ{hnW^\0S8{\"ΛJK\\*G1)|\'s6@Mo+@:euw;uY*9rOl4YLԲ3Q#\"5E}qSSGHRb]{~&B\nq@wgvQg_=rcW6EPj\"؊vׇv{:׎V\r}LdD[u_^ ?!y֑p<[L^Z}ӵk;[cJ.ɖ6鲔$/DY[kwRD\0\0\0\0.nNnv\rvsvupVV6;o̥M\'x8x-aESl13K Yx%rJrRY5B$e=4_ć&N\Z_kHQ;wdW/+^&)5i(-Z<9sN.jM #p9hԥiʼnQ=&UOQnQԔla\\.\\\0㴒Mʮ%y2=ޟ]ZB˩J$\0-FX R2bX01[#s;=\Z\r&QiOwM Z-:i)tY.ϺfbVZ:Z`W%T3>I>FdF-$j#;*O$)R])}[d\0 z~BпgG 4L=c&n3κu6[8eTҔ.GUF(G$^Jڑ\rſqخwZ\rnÙL5>wv$Rb2{UB?H LAFLi%`TjѫQ\0>\0\0\0\0SG M%BIy[뽊G?t/ǘP4% YT*\">a&}bpija־x[Wnb\' +H%L3ȬNC+RW\nbL+`\0\0\0!MWp᭭gk&4qSGe:O-]1Iw#277Q%!T2C0Ҵ>MYV8#chV(vvTN-~=I[WM5㿀rnue0[ΝX$!DB;0z>S%&Fxʗ1+cRղGB)r]/q Ïz ύ9U/%,/SrCj(\\d$DeQȵ}Bj+n--ܧem3뷐 \0q65YRGX:a:\\\'{V(CӪ\Z.7p42cZQz_j6{s}ARrҋӗx^_է$R#N+j}\Z4hQ>[E\0 \0\0\0\0Rtwؾ~{|\00 \"8\"M/j9E-`អ\r-[,&ooL)&\r1EE)aM|i:{Lٞw,dRt aKBf 5Ô5b%֡ZuZꅊqNL2ÕoY↚}LVB\00ւ7s\0D{IN\n_J;)Tʮ>)URUVPlЏ`lD4SM8\rfѲ*HiP)CPO 3{a%yV)ynYiE3IVh; 8ݴʛG]5b=I~}vݐr(C/nXHrN*ߎY=ZQed{\\nX^¹Z2TƓe%W\"\"wFVeL8$@KaM`9Gzvies^qY99(h9HF`kd)I$Br\n\"n5}. 9l2m&\nb+$V`\n\0++9W0hqqG\0GZ~. ׬c8o\rO5b61T\ZEW%BNnTJU2gfܤlu遅-r߲}M{2۞,[:\0^2֫ADH.a~X{\'?,5CfKW2}ߝ$+O0T\'cXXlfq 0# 8U(+*e ra`[Jprw휢VE+$z!]=j33WۮUȇb7f j,׳>NPHG,yQ\r u:%Ühƙi\'l;\"WI܅4R+EnQ*?&a%:6\rUM-(\0\08\0?\\^ᝠ+>*)1PPa$b:Vp097MLN!a-oX\0yLY#*_nT~%{]NI${LquI7i0qiw\'M-\Z^<]/)u NxU mX{ԬFYc(Vk0MlYlDf]Ou:YR0+ZZ!\rv[FG&(-D4jh\nR\05۾ۍSw{ae;qZ_ʴDdr6ͺT=J )H(r& &nk  bXBٓGmY> El\'x|5\"FrO& y%^\Zn(:ԓH*1{@b^\\k!令#\0#X3]Rzl \0 #\rD1t[gfZB*Q\"q*уjj$VZbE YPQ8~1$ s8XhFDG7M|lsѓ-QI6mRIV$ $P}4.!^5\n⾪\rfYT}ګEM|Usc=GmK;LcwO0Q={hc):Ě cr\\n귺{iU_7&L7)ӷ~\rK^fX,%_q8Z)+_#v,dSѓդyy\r?^RvYvSbL>Ee ^/q:V!Yd7M4V }+Jض WH K*$ y*Q1J#MPH`!C~T7<_]CL~IoݒU\0uE} V֘~ $RM4PC/a3-dLn.cdۛώЌb80b鮸4nNWJuWިcQrd\" TJ\0*Gi͸+E1vFhG敲MUuQIC\0qɓ/!ֿ',5,0,'','','',''),(63,3,16,'75859b10c4223968','9c78857b3d725c1c6d1227a7b8cbe6b2','2017-09-07 09:09:29','2017-09-07 09:09:29','','','Contact Photos','9c78857b3d725c1c6d1227a7b8cbe6b2-4.jpg?ts=1504775234','image/jpeg',48,48,1755,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \00\00\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa\0\0\0?\03csǜ?1{pK]_r\0BsK]n 4dfZ%ӣ ³+r0m&i-jAg>%hM%C¿pO!6xie5H)LWle!k:Thq2ڰNݴMj6A7?qYˌgZ[DEn&Z]-mnBa![v\\h2BaRI?<~/y=dG3JM[ݨ` ԭyN\0ɚȥ֐YʈO`=y| Ҽ&-Fmf+`<q{*En՘g$Y`P#I%;B~NMX}\']؜\ZlcޒZFQ.6?` />>J[X㦣`3l8m%X<=j2.L21\"D70Ĉ2+I1Kwn^i>%T%cƺx]l_/CXJRByŸQ-+μ+ug\\yJ7t{2U0OHmYF]qZa$fdB2FzXK3xq,8+-#?*\ZFV)/%xR3e0(b0Š;# ;Kl\r%YecCM6\'JP%81zWmJeZ⁜[&+i!.>Vz8XE}+d\r\0!PeաiUtvO;}qje0åi?~A-٘H q-b> \Z+9#7x1\Z\Ze=`t,\n\0\"\nn:x%zsϤ?z|գcuS?KR+1UhahTc%A1>?B\0',6,0,'','','',''),(64,6,17,'75859b10d79196fc','15048d33e71544a25a6dd13bb081c78f','2017-09-07 09:13:05','2017-09-07 09:13:05','','','Contact Photos','15048d33e71544a25a6dd13bb081c78f-4.jpg?ts=1504775545','image/jpeg',175,175,5493,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n  \0B\0\0 \0\0\0\0\0 !\n1A\"Qaq%23#$&5BREs\0\0\0?\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*ՆX\Z\'p|LsN}Y%ZR|(J*I&+rJ#yI)%lZ,:i(ϥ)J*hχoмI$Dj- (C\"cI(s_L:g `wI9s.wYaC\"3:Ie~g,ڮϨ6&tt/iKxvEqE˒S.:t7Vg5u;Ys=YFZRk}jʮHnlIfhM6&\";MDD]¿SRchB{tƤGVMʽ4$&2\"%{̈}9$489hۆ @e崭\ZطHlMD:!M2aLc/RiCrT\ZuΥ$FIN춆q5S,-Bc^op}AW8Y)c?T2FiդkI$bՓ鐸A\\<FhŭܿIk)3^Nٓwu]kU4J8W*F7`^U:VңI%̷?|C{Oh[:rqğ 0\\\Ze0\\ޅ\Z.RvZNOI\n#O v-ikFo;EIձ5\ZRv!,\\4;MyE3ta9B:̌[XTh_\"r4k*F\\U:Mz\0u#\0C\0\0\0\0\0>frZ\\kpqҾ.oUuq-SCJKPSǬf2JJGD Ym+>!҄^\n\'/{} W7-K;KkI (;TF\rH̖J\0Jsj K\0mp֫WV\'\"IٹjTlx;ҤO,RԐǖ edK:8<)5hy Ów r*-0BfJ& u:fIVr:rjh.p甴9 MH>듲pgBҲ4:{-RTPMHZRw+|)DqKєW2WejO{F|aM)xhʴH-IF3捩Gِ\0\0\0\0\0qd-B\\*uDZnǮ~4gfGyN-mݯm(ָmWWIoԺw2IHX%Lza֞XY;$DQ{}54;9)k3S2%-|Ĕ\0EɧT|+2BBHUyK>Yk[\ZYN \"ZyTGV\ZĢ5MGROO&7 ;_Ou[7O?0RvVg#۔+E1[ٲ\0\0\0\0\0;X\ZqzqJ2c:#vIK^Fk4B/X﹑E4ehM88(:\0s2ia{CT\0XRJdz]d݉ ,1r~6DdGOBg&f)e+/4TQjѰ~wc8ڤFgTճG[M\')?JUDR)6v[#E3$n=JK\'Dq18򄭴7(UueLtv2ҤTK[o\0>}FH\0\0\0\0\0B\0Lvx(Ʋ93O\"\noHPQiJU;G\\/e>oQ{hnW^\0S8{\"ΛJK\\*G1)|\'s6@Mo+@:euw;uY*9rOl4YLԲ3Q#\"5E}qSSGHRb]{~&B\nq@wgvQg_=rcW6EPj\"؊vׇv{:׎V\r}LdD[u_^ ?!y֑p<[L^Z}ӵk;[cJ.ɖ6鲔$/DY[kwRD\0\0\0\0.nNnv\rvsvupVV6;o̥M\'x8x-aESl13K Yx%rJrRY5B$e=4_ć&N\Z_kHQ;wdW/+^&)5i(-Z<9sN.jM #p9hԥiʼnQ=&UOQnQԔla\\.\\\0㴒Mʮ%y2=ޟ]ZB˩J$\0-FX R2bX01[#s;=\Z\r&QiOwM Z-:i)tY.ϺfbVZ:Z`W%T3>I>FdF-$j#;*O$)R])}[d\0 z~BпgG 4L=c&n3κu6[8eTҔ.GUF(G$^Jڑ\rſqخwZ\rnÙL5>wv$Rb2{UB?H LAFLi%`TjѫQ\0>\0\0\0\0SG M%BIy[뽊G?t/ǘP4% YT*\">a&}bpija־x[Wnb\' +H%L3ȬNC+RW\nbL+`\0\0\0!MWp᭭gk&4qSGe:O-]1Iw#277Q%!T2C0Ҵ>MYV8#chV(vvTN-~=I[WM5㿀rnue0[ΝX$!DB;0z>S%&Fxʗ1+cRղGB)r]/q Ïz ύ9U/%,/SrCj(\\d$DeQȵ}Bj+n--ܧem3뷐 \0q65YRGX:a:\\\'{V(CӪ\Z.7p42cZQz_j6{s}ARrҋӗx^_է$R#N+j}\Z4hQ>[E\0 \0\0\0\0Rtwؾ~{|\00 \"8\"M/j9E-`អ\r-[,&ooL)&\r1EE)aM|i:{Lٞw,dRt aKBf 5Ô5b%֡ZuZꅊqNL2ÕoY↚}LVB\00ւ7s\0D{IN\n_J;)Tʮ>)URUVPlЏ`lD4SM8\rfѲ*HiP)CPO 3{a%yV)ynYiE3IVh; 8ݴʛG]5b=I~}vݐr(C/nXHrN*ߎY=ZQed{\\nX^¹Z2TƓe%W\"\"wFVeL8$@KaM`9Gzvies^qY99(h9HF`kd)I$Br\n\"n5}. 9l2m&\nb+$V`\n\0++9W0hqqG\0GZ~. ׬c8o\rO5b61T\ZEW%BNnTJU2gfܤlu遅-r߲}M{2۞,[:\0^2֫ADH.a~X{\'?,5CfKW2}ߝ$+O0T\'cXXlfq 0# 8U(+*e ra`[Jprw휢VE+$z!]=j33WۮUȇb7f j,׳>NPHG,yQ\r u:%Ühƙi\'l;\"WI܅4R+EnQ*?&a%:6\rUM-(\0\08\0?\\^ᝠ+>*)1PPa$b:Vp097MLN!a-oX\0yLY#*_nT~%{]NI${LquI7i0qiw\'M-\Z^<]/)u NxU mX{ԬFYc(Vk0MlYlDf]Ou:YR0+ZZ!\rv[FG&(-D4jh\nR\05۾ۍSw{ae;qZ_ʴDdr6ͺT=J )H(r& &nk  bXBٓGmY> El\'x|5\"FrO& y%^\Zn(:ԓH*1{@b^\\k!令#\0#X3]Rzl \0 #\rD1t[gfZB*Q\"q*уjj$VZbE YPQ8~1$ s8XhFDG7M|lsѓ-QI6mRIV$ $P}4.!^5\n⾪\rfYT}ګEM|Usc=GmK;LcwO0Q={hc):Ě cr\\n귺{iU_7&L7)ӷ~\rK^fX,%_q8Z)+_#v,dSѓդyy\r?^RvYvSbL>Ee ^/q:V!Yd7M4V }+Jض WH K*$ y*Q1J#MPH`!C~T7<_]CL~IoݒU\0uE} V֘~ $RM4PC/a3-dLn.cdۛώЌb80b鮸4nNWJuWިcQrd\" TJ\0*Gi͸+E1vFhG敲MUuQIC\0qɓ/!ֿ',5,0,'','','',''),(66,6,17,'75859b10d79196fc','15048d33e71544a25a6dd13bb081c78f','2017-09-07 09:13:05','2017-09-07 09:13:05','','','Contact Photos','15048d33e71544a25a6dd13bb081c78f-4.jpg?ts=1504775545','image/jpeg',48,48,1755,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \00\00\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa\0\0\0?\03csǜ?1{pK]_r\0BsK]n 4dfZ%ӣ ³+r0m&i-jAg>%hM%C¿pO!6xie5H)LWle!k:Thq2ڰNݴMj6A7?qYˌgZ[DEn&Z]-mnBa![v\\h2BaRI?<~/y=dG3JM[ݨ` ԭyN\0ɚȥ֐YʈO`=y| Ҽ&-Fmf+`<q{*En՘g$Y`P#I%;B~NMX}\']؜\ZlcޒZFQ.6?` />>J[X㦣`3l8m%X<=j2.L21\"D70Ĉ2+I1Kwn^i>%T%cƺx]l_/CXJRByŸQ-+μ+ug\\yJ7t{2U0OHmYF]qZa$fdB2FzXK3xq,8+-#?*\ZFV)/%xR3e0(b0Š;# ;Kl\r%YecCM6\'JP%81zWmJeZ⁜[&+i!.>Vz8XE}+d\r\0!PeաiUtvO;}qje0åi?~A-٘H q-b> \Z+9#7x1\Z\Ze=`t,\n\0\"\nn:x%zsϤ?z|գcuS?KR+1UhahTc%A1>?B\0',6,0,'','','',''),(67,5,18,'75859b10d792d9a0','d74f209bfcd190b3864fa678e5068a16','2017-09-07 09:16:08','2017-09-07 09:16:08','','','Contact Photos','6.jpg','image/jpeg',175,175,5486,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n  \0B\0\0 \0\0\0\0\0 !\n1A\"Qaq%23R#$&5BEs\0\0\0?\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*ՆX\Zgp|LsN}Y%ZR|(J*I&+rJ#yI)%lZ,:i(ϥ)J*hχo>$Œd \"5ɐbo9/צF3qN;뤂9;߬Kka0Z$ԲOb3gWqgUlW\0ĺQ<;J;剽ŒTh܋}h>#\0\0\0\0\0\0\0>=]Xwg-8i9uN梿ݱ^-l$$5Rt\"e):G+3Ϛͺ,-d5ܾn~5SeW$76sS$4SME\"\"O._)YŽ1\rX!M\nmyKlR#kM&^o|ML}IjOD>OJ\Zmiv2rVӍBl[rdD;k2dZ8($h:״y}`\0\0\0\0\0\0\08ƣ37 } Nsſ]Ec pJL򄩵œU<Y)O&$.!EQ%NCSL8d#z9㔚g,ܮG w7GggU)F]EsI-DS:{-e|jwK P䗴[듲pgBҲ:t[I줩*¤VpS◣(dBŗ4B. su= =4ᢙKAeZ$qu餣}Fԣ\0\0\0\0\0\nYNo!Nj{\"F-zyc?s\Z I3#̼˧Q\rk\\]6PꫫUr$]MIN^|$^u,ݦ=0O,Vt,p]I(F\Z̔QbJIDl\0dӪ>o!Sg[$i*<\\Qng|Qu,,tu-<#\rbQ\Z&vc٧u-\'Bb);C3haKr\"ۘr-\0\0\0\0\0Ky8qa^1[؍$#5K,JLȌaLs&[d1\rצKɧ=\0DxaÓ_Udǁ5%~<&ܾ^G⏚_Kωf\\O2ث=t27 36FffJw&M^DDV\0\0\0\0\0A-GM:]\ZN/&ɛ3:Rv_?]%0^w ghF˭3橯c`jGf=hR ȪnG)#I&e696\0\0\0\0\0\0L4/6v91!\r),~*Rg#URij\"rNPkJ;m>bd&XFޭb48KKT\\h^Q̶#I\ZhWe+_ͺɧI;\nF.Vw)7|U-R/1.t2fsniEu?bDV2#Cau33q2jwZqN?;^XR#g3Dj֣&\nI*);-xj7A%GiŢV8TNBVERe*WZMQi;iR*h-\0>$\0\0\0\0\0!}Lvx(Ʋ93O\"\noHPQiJU;G\\/e>oQ{hnW^\0S8{\"ΛJK\\*G1)|\'s6@Mo+@:euw;uY*9rOl4YLԲ3Q#\"5E}qSSGHRb]{~&B\nq@wgvQg_=rcW6EPj\"؊vׇv{:׎V\r}LdD[u_^ ?!y֑p<[L^Z}ӵk;[cJ.ɖ6鲔$/DY[kwRD\0\0\0\0.nNnv\rvsvupVV6;o̥M\'x8x-aESl13K Yx%rJrRY5B$e=4_ć&N\Z_kHQ;wdW/+^&)5i([xrIW+]}f,\n^G,sJ\'8ӫzL+Z%l$Y(:]6\0ei%v]Jd{o?${;SؔI-[l;ǢeŎ3lb`cnFv6{\nm 퍍JZ\\dJ2ڀ#opMNӷw8m2i$dm$EjDMr\"bvKȴ4s܈\ZSENU\'|{uHn0BaG\'w~x-5:@\0\0\0\0|(\\-es$ c\' 4W\"+HSw:%25Ȉ׶ܜ3B\rW\\e34hё/Zq&%-¢$ʄʺiS2g@ +mRӭVNQ\\5[B챌hx%kk91&rQ%Hjp՗htזf,a\"ڪA@d&b\n4cI+\0-RV^_gG<\0\0\0\0Wc3M214V9&n)мsc73MB/ǬD<%ePJXGZ!m_UX:,m0y#𖦳U2SD\"9 I^)#\r2]\0\0\0<;~bj\rmk;^I5]28)~j2K!d dFI) ]_8q:j:űEڱFn`=ZqmL}$JJZiwhtK->)t%\Zy&\"$r0~Ʊك)23T[\Z:LL*{f{^|m|D5WtRy)dzX.QD&G\"$#YT/RBrMŵź쭶}>{v\0\0>_;.&ƹ *H6L\'R $jhuzuQvCQEҦ:y}ƚU,kJ!Y>}Fк/no3NZQw35r+dJRDvеmOF\n\'k~|H38\0\0\0\0\0cGT/]/_?F92GIMZ1\'(l3AKuŒRM4w$ԙ!(RH\'~.3,3u (s@#.m1HwK[:vtG\'9&2D$N0Yu\nn4:J_# \0+ˮ&8H\ZWҾSidr؍ed}K{L:1\rqjNě(Z735T_s\0\0\0\0\0\0Ɣd~?T\02}nj눝F o1-y ]čhv9nQHȌm{>m H:5;{#RTKy~2v\0\0\0\0\0\0uhJ8=UCh<^;F [L6$\0\0EJ]]z2ƣszT8ƭ{\Zx*P} c鷐\0\0\0\0\0\0\ZI7IwD\0& q-Î>鿡\r\0\0%H?yt!\0\0\0\0\0\0\Z)VFַjgf^D{ ox\0\0\0\0\0\0\0\0\0\0\0\0',4,0,'','','',''),(68,5,18,'75859b10d792d9a0','d74f209bfcd190b3864fa678e5068a16','2017-09-07 09:16:08','2017-09-07 09:16:08','','','Contact Photos','6.jpg','image/jpeg',80,80,2703,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \0P\0P\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n \04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#3Sa\0\0\0?\0M5AQ\0jǯ<_T@Zi9׾*){ڥJY[6he ,u$1tKvD3%g[I_:kƵJuB7\'vX3iRj:G*e\0aM|i:{Kٞw,dRt aKBf }zao-fr@@D5֮VbS&-Lm[xS!d\"ἵ1/n}U2e&T`aU4#``!\rũl>5tl\n(\"i\nP)\' rc-^je[ZEt\0lA-\'!~N.Am2p\rjXOR_]dr8$+\' ۬. Ӭ[8o\rbO5b61T\ZEW%BNnTJSd͸\"aۦ˧~m7\rnxndxZz1 |#;Mu_5I7,\";w8L SY7ڪJcDS LQe[DmacܜrLL /m_˘~tFP?|R0c[wcoWu4,Ê.8%TLa3兂21o*IBe߶r8Z;AHq먆v;61a\\?nW\"Jݘ1N+^%9A\"tb(CGX7|.{mGt{ꧼs\r\ZejR5|]\'r1HŻF gl45V%4/P\0\08\0rMx73vۃ(+0LXߘQCB` [0\"d6j1:>c3c2:sH>p\\udV.U}QL>Cu9$2$ݦ”qil4j5zhgQtC-9T\']l\raR5IgMs)Y4A5fѳStZ%?:fJðUjuhP5 Zm ,!lѪ)d)H@\0׏nn5M;uk8bێ9*8w8 6{^SlPMgLISwg8!9\0Pİ\'e2ڲ}Oj%D`VMfJ4jQ}N3*1{@b^\\k!令#\0#X3]Rzl \0 #\rD1t[gfZB*Q\"q*уjj$VZbE YPQ8~1$ s8XhFDG7M|lsѓ-QI6mRIV$ $P}4.!^5\n⾪\rfYT}ګEM|Usc=GmK;LcwO0Q={hc):Ě cr\\n귺{iU_7&L7)ӷ~\rK^fX,%_q8Z)+_#v,dSѓդyy\r?^RvYvSbL>Ee ^/q:V!Yd7M4V }+Jض WH K*$ y*Q1J#MPH`!C~T7<_]CL~IoݒU\0uE} V֘~ $RM4PC/a3-dLn.cdۛώЌb80b鮸4nNWJuWިcQrd\" TJ\0*Gi͸+E1vFhG敲MUuQIC\0qɓ/!ֿ',5,0,'','','',''),(69,5,18,'75859b10d792d9a0','d74f209bfcd190b3864fa678e5068a16','2017-09-07 09:16:09','2017-09-07 09:16:09','','','Contact Photos','6.jpg','image/jpeg',48,48,1755,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \00\00\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa\0\0\0?\03csǜ?1{pK]_r\0BsK]n 4dfZ%ӣ ³+r0m&i-jAg>%hM%C¿pO!6xie5H)LWle!k:Thq2ڰNݴMj6A7?qYˌgZ[DEn&Z]-mnBa![v\\h2BaRI?<~/y=dG3JM[ݨ` ԭyN\0ɚȥ֐YʈO`=y| Ҽ&-Fmf+`<q{*En՘g$Y`P#I%;B~NMX}\']؜\ZlcޒZFQ.6?` />>IX㞣`3lHm%X8=j2.K21$72)I1Cwn^i>%T%cƺx]l_/CXJRByŸQ-+μ+ug\\yJ7t{2U0OHmYF]qZa$fdB2FzXK3xq,8+-#?*\ZFV)/%xR3e0(b0Š;# ;Kl\r%YecCM6\'JP%81zWmJeZ⁜[&+i!.>Vz8XE}+d\r\0!PeաiUtvO;}qje0åi?~A-٘H q-b> \Z+9#7x1\Z\Ze=`t,\n\0\"\nn:x%zsϤ?z|գcuS?KR+1UhahTc%A1>?B\0',6,0,'','','',''),(70,0,19,'75859b10e58a60ae','2b902d193517f74d2c14e163cff8c10e','2017-09-07 09:16:08','2017-09-07 09:16:08','','','Contact Photos','6.jpg','image/jpeg',175,175,5486,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n  \0B\0\0 \0\0\0\0\0 !\n1A\"Qaq%23R#$&5BEs\0\0\0?\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*ՆX\Zgp|LsN}Y%ZR|(J*I&+rJ#yI)%lZ,:i(ϥ)J*hχo>$Œd \"5ɐbo9/צF3qN;뤂9;߬Kka0Z$ԲOb3gWqgUlW\0ĺQ<;J;剽ŒTh܋}h>#\0\0\0\0\0\0\0>=]Xwg-8i9uN梿ݱ^-l$$5Rt\"e):G+3Ϛͺ,-d5ܾn~5SeW$76sS$4SME\"\"O._)YŽ1\rX!M\nmyKlR#kM&^o|ML}IjOD>OJ\Zmiv2rVӍBl[rdD;k2dZ8($h:״y}`\0\0\0\0\0\0\08ƣ37 } Nsſ]Ec pJL򄩵œU<Y)O&$.!EQ%NCSL8d#z9㔚g,ܮG w7GggU)F]EsI-DS:{-e|jwK P䗴[듲pgBҲ:t[I줩*¤VpS◣(dBŗ4B. su= =4ᢙKAeZ$qu餣}Fԣ\0\0\0\0\0\nYNo!Nj{\"F-zyc?s\Z I3#̼˧Q\rk\\]6PꫫUr$]MIN^|$^u,ݦ=0O,Vt,p]I(F\Z̔QbJIDl\0dӪ>o!Sg[$i*<\\Qng|Qu,,tu-<#\rbQ\Z&vc٧u-\'Bb);C3haKr\"ۘr-\0\0\0\0\0Ky8qa^1[؍$#5K,JLȌaLs&[d1\rצKɧ=\0DxaÓ_Udǁ5%~<&ܾ^G⏚_Kωf\\O2ث=t27 36FffJw&M^DDV\0\0\0\0\0A-GM:]\ZN/&ɛ3:Rv_?]%0^w ghF˭3橯c`jGf=hR ȪnG)#I&e696\0\0\0\0\0\0L4/6v91!\r),~*Rg#URij\"rNPkJ;m>bd&XFޭb48KKT\\h^Q̶#I\ZhWe+_ͺɧI;\nF.Vw)7|U-R/1.t2fsniEu?bDV2#Cau33q2jwZqN?;^XR#g3Dj֣&\nI*);-xj7A%GiŢV8TNBVERe*WZMQi;iR*h-\0>$\0\0\0\0\0!}Lvx(Ʋ93O\"\noHPQiJU;G\\/e>oQ{hnW^\0S8{\"ΛJK\\*G1)|\'s6@Mo+@:euw;uY*9rOl4YLԲ3Q#\"5E}qSSGHRb]{~&B\nq@wgvQg_=rcW6EPj\"؊vׇv{:׎V\r}LdD[u_^ ?!y֑p<[L^Z}ӵk;[cJ.ɖ6鲔$/DY[kwRD\0\0\0\0.nNnv\rvsvupVV6;o̥M\'x8x-aESl13K Yx%rJrRY5B$e=4_ć&N\Z_kHQ;wdW/+^&)5i([xrIW+]}f,\n^G,sJ\'8ӫzL+Z%l$Y(:]6\0ei%v]Jd{o?${;SؔI-[l;ǢeŎ3lb`cnFv6{\nm 퍍JZ\\dJ2ڀ#opMNӷw8m2i$dm$EjDMr\"bvKȴ4s܈\ZSENU\'|{uHn0BaG\'w~x-5:@\0\0\0\0|(\\-es$ c\' 4W\"+HSw:%25Ȉ׶ܜ3B\rW\\e34hё/Zq&%-¢$ʄʺiS2g@ +mRӭVNQ\\5[B챌hx%kk91&rQ%Hjp՗htזf,a\"ڪA@d&b\n4cI+\0-RV^_gG<\0\0\0\0Wc3M214V9&n)мsc73MB/ǬD<%ePJXGZ!m_UX:,m0y#𖦳U2SD\"9 I^)#\r2]\0\0\0<;~bj\rmk;^I5]28)~j2K!d dFI) ]_8q:j:űEڱFn`=ZqmL}$JJZiwhtK->)t%\Zy&\"$r0~Ʊك)23T[\Z:LL*{f{^|m|D5WtRy)dzX.QD&G\"$#YT/RBrMŵź쭶}>{v\0\0>_;.&ƹ *H6L\'R $jhuzuQvCQEҦ:y}ƚU,kJ!Y>}Fк/no3NZQw35r+dJRDvеmOF\n\'k~|H38\0\0\0\0\0cGT/]/_?F92GIMZ1\'(l3AKuŒRM4w$ԙ!(RH\'~.3,3u (s@#.m1HwK[:vtG\'9&2D$N0Yu\nn4:J_# \0+ˮ&8H\ZWҾSidr؍ed}K{L:1\rqjNě(Z735T_s\0\0\0\0\0\0Ɣd~?T\02}nj눝F o1-y ]čhv9nQHȌm{>m H:5;{#RTKy~2v\0\0\0\0\0\0uhJ8=UCh<^;F [L6$\0\0EJ]]z2ƣszT8ƭ{\Zx*P} c鷐\0\0\0\0\0\0\ZI7IwD\0& q-Î>鿡\r\0\0%H?yt!\0\0\0\0\0\0\Z)VFַjgf^D{ ox\0\0\0\0\0\0\0\0\0\0\0\0',4,0,'','','',''),(71,0,19,'75859b10e58a60ae','2b902d193517f74d2c14e163cff8c10e','2017-09-07 09:16:08','2017-09-07 09:16:08','','','Contact Photos','6.jpg','image/jpeg',80,80,2703,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \0P\0P\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n \04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#3Sa\0\0\0?\0M5AQ\0jǯ<_T@Zi9׾*){ڥJY[6he ,u$1tKvD3%g[I_:kƵJuB7\'vX3iRj:G*e\0aM|i:{Kٞw,dRt aKBf }zao-fr@@D5֮VbS&-Lm[xS!d\"ἵ1/n}U2e&T`aU4#``!\rũl>5tl\n(\"i\nP)\' rc-^je[ZEt\0lA-\'!~N.Am2p\rjXOR_]dr8$+\' ۬. Ӭ[8o\rbO5b61T\ZEW%BNnTJSd͸\"aۦ˧~m7\rnxndxZz1 |#;Mu_5I7,\";w8L SY7ڪJcDS LQe[DmacܜrLL /m_˘~tFP?|R0c[wcoWu4,Ê.8%TLa3兂21o*IBe߶r8Z;AHq먆v;61a\\?nW\"Jݘ1N+^%9A\"tb(CGX7|.{mGt{ꧼs\r\ZejR5|]\'r1HŻF gl45V%4/P\0\08\0rMx73vۃ(+0LXߘQCB` [0\"d6j1:>c3c2:sH>p\\udV.U}QL>Cu9$2$ݦ”qil4j5zhgQtC-9T\']l\raR5IgMs)Y4A5fѳStZ%?:fJðUjuhP5 Zm ,!lѪ)d)H@\0׏nn5M;uk8bێ9*8w8 6{^SlPMgLISwg8!9\0Pİ\'e2ڲ}Oj%D`VMfJ4jQ}N3*1{@b^\\k!令#\0#X3]Rzl \0 #\rD1t[gfZB*Q\"q*уjj$VZbE YPQ8~1$ s8XhFDG7M|lsѓ-QI6mRIV$ $P}4.!^5\n⾪\rfYT}ګEM|Usc=GmK;LcwO0Q={hc):Ě cr\\n귺{iU_7&L7)ӷ~\rK^fX,%_q8Z)+_#v,dSѓդyy\r?^RvYvSbL>Ee ^/q:V!Yd7M4V }+Jض WH K*$ y*Q1J#MPH`!C~T7<_]CL~IoݒU\0uE} V֘~ $RM4PC/a3-dLn.cdۛώЌb80b鮸4nNWJuWިcQrd\" TJ\0*Gi͸+E1vFhG敲MUuQIC\0qɓ/!ֿ',5,0,'','','',''),(72,0,19,'75859b10e58a60ae','2b902d193517f74d2c14e163cff8c10e','2017-09-07 09:16:08','2017-09-07 09:16:08','','','Contact Photos','6.jpg','image/jpeg',48,48,1755,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \00\00\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa\0\0\0?\03csǜ?1{pK]_r\0BsK]n 4dfZ%ӣ ³+r0m&i-jAg>%hM%C¿pO!6xie5H)LWle!k:Thq2ڰNݴMj6A7?qYˌgZ[DEn&Z]-mnBa![v\\h2BaRI?<~/y=dG3JM[ݨ` ԭyN\0ɚȥ֐YʈO`=y| Ҽ&-Fmf+`<q{*En՘g$Y`P#I%;B~NMX}\']؜\ZlcޒZFQ.6?` />>IX㞣`3lHm%X8=j2.K21$72)I1Cwn^i>%T%cƺx]l_/CXJRByŸQ-+μ+ug\\yJ7t{2U0OHmYF]qZa$fdB2FzXK3xq,8+-#?*\ZFV)/%xR3e0(b0Š;# ;Kl\r%YecCM6\'JP%81zWmJeZ⁜[&+i!.>Vz8XE}+d\r\0!PeաiUtvO;}qje0åi?~A-٘H q-b> \Z+9#7x1\Z\Ze=`t,\n\0\"\nn:x%zsϤ?z|գcuS?KR+1UhahTc%A1>?B\0',6,0,'','','',''),(73,0,20,'75859b10e79de61b','01f62fe9af5d22dfb7664e78e64acd43','2017-09-07 09:16:41','2017-09-07 09:16:41','','','Contact Photos','3.jpg','image/jpeg',175,175,5486,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n  \0B\0\0 \0\0\0\0\0 !\n1A\"Qaq%23R#$&5BEs\0\0\0?\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*ՆX\Zgp|LsN}Y%ZR|(J*I&+rJ#yI)%lZ,:i(ϥ)J*hχo>$Œd \"5ɐbo9/צF3qN;뤂9;߬Kka0Z$ԲOb3gWqgUlW\0ĺQ<;J;剽ŒTh܋}h>#\0\0\0\0\0\0\0>=]Xwg-8i9uN梿ݱ^-l$$5Rt\"e):G+3Ϛͺ,-d5ܾn~5SeW$76sS$4SME\"\"O._)YŽ1\rX!M\nmyKlR#kM&^o|ML}IjOD>OJ\Zmiv2rVӍBl[rdD;k2dZ8($h:״y}`\0\0\0\0\0\0\08ƣ37 } Nsſ]Ec pJL򄩵œU<Y)O&$.!EQ%NCSL8d#z9㔚g,ܮG w7GggU)F]EsI-DS:{-e|jwK P䗴[듲pgBҲ:t[I줩*¤VpS◣(dBŗ4B. su= =4ᢙKAeZ$qu餣}Fԣ\0\0\0\0\0\nYNo!Nj{\"F-zyc?s\Z I3#̼˧Q\rk\\]6PꫫUr$]MIN^|$^u,ݦ=0O,Vt,p]I(F\Z̔QbJIDl\0dӪ>o!Sg[$i*<\\Qng|Qu,,tu-<#\rbQ\Z&vc٧u-\'Bb);C3haKr\"ۘr-\0\0\0\0\0Ky8qa^1[؍$#5K,JLȌaLs&[d1\rצKɧ=\0DxaÓ_Udǁ5%~<&ܾ^G⏚_Kωf\\O2ث=t27 36FffJw&M^DDV\0\0\0\0\0A-GM:]\ZN/&ɛ3:Rv_?]%0^w ghF˭3橯c`jGf=hR ȪnG)#I&e696\0\0\0\0\0\0L4/6v91!\r),~*Rg#URij\"rNPkJ;m>bd&XFޭb48KKT\\h^Q̶#I\ZhWe+_ͺɧI;\nF.Vw)7|U-R/1.t2fsniEu?bDV2#Cau33q2jwZqN?;^XR#g3Dj֣&\nI*);-xj7A%GiŢV8TNBVERe*WZMQi;iR*h-\0>$\0\0\0\0\0!}Lvx(Ʋ93O\"\noHPQiJU;G\\/e>oQ{hnW^\0S8{\"ΛJK\\*G1)|\'s6@Mo+@:euw;uY*9rOl4YLԲ3Q#\"5E}qSSGHRb]{~&B\nq@wgvQg_=rcW6EPj\"؊vׇv{:׎V\r}LdD[u_^ ?!y֑p<[L^Z}ӵk;[cJ.ɖ6鲔$/DY[kwRD\0\0\0\0.nNnv\rvsvupVV6;o̥M\'x8x-aESl13K Yx%rJrRY5B$e=4_ć&N\Z_kHQ;wdW/+^&)5i([xrIW+]}f,\n^G,sJ\'8ӫzL+Z%l$Y(:]6\0ei%v]Jd{o?${;SؔI-[l;ǢeŎ3lb`cnFv6{\nm 퍍JZ\\dJ2ڀ#opMNӷw8m2i$dm$EjDMr\"bvKȴ4s܈\ZSENU\'|{uHn0BaG\'w~x-5:@\0\0\0\0|(\\-es$ c\' 4W\"+HSw:%25Ȉ׶ܜ3B\rW\\e34hё/Zq&%-¢$ʄʺiS2g@ +mRӭVNQ\\5[B챌hx%kk91&rQ%Hjp՗htזf,a\"ڪA@d&b\n4cI+\0-RV^_gG<\0\0\0\0Wc3M214V9&n)мsc73MB/ǬD<%ePJXGZ!m_UX:,m0y#𖦳U2SD\"9 I^)#\r2]\0\0\0<;~bj\rmk;^I5]28)~j2K!d dFI) ]_8q:j:űEڱFn`=ZqmL}$JJZiwhtK->)t%\Zy&\"$r0~Ʊك)23T[\Z:LL*{f{^|m|D5WtRy)dzX.QD&G\"$#YT/RBrMŵź쭶}>{v\0\0>_;.&ƹ *H6L\'R $jhuzuQvCQEҦ:y}ƚU,kJ!Y>}Fк/no3NZQw35r+dJRDvеmOF\n\'k~|H38\0\0\0\0\0cGT/]/_?F92GIMZ1\'(l3AKuŒRM4w$ԙ!(RH\'~.3,3u (s@#.m1HwK[:vtG\'9&2D$N0Yu\nn4:J_# \0+ˮ&8H\ZWҾSidr؍ed}K{L:1\rqjNě(Z735T_s\0\0\0\0\0\0Ɣd~?T\02}nj눝F o1-y ]čhv9nQHȌm{>m H:5;{#RTKy~2v\0\0\0\0\0\0uhJ8=UCh<^;F [L6$\0\0EJ]]z2ƣszT8ƭ{\Zx*P} c鷐\0\0\0\0\0\0\ZI7IwD\0& q-Î>鿡\r\0\0%H?yt!\0\0\0\0\0\0\Z)VFַjgf^D{ ox\0\0\0\0\0\0\0\0\0\0\0\0',4,0,'','','',''),(74,0,20,'75859b10e79de61b','01f62fe9af5d22dfb7664e78e64acd43','2017-09-07 09:16:41','2017-09-07 09:16:41','','','Contact Photos','3.jpg','image/jpeg',80,80,2703,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \0P\0P\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n \04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#3Sa\0\0\0?\0M5AQ\0jǯ<_T@Zi9׾*){ڥJY[6he ,u$1tKvD3%g[I_:kƵJuB7\'vX3iRj:G*e\0aM|i:{Kٞw,dRt aKBf }zao-fr@@D5֮VbS&-Lm[xS!d\"ἵ1/n}U2e&T`aU4#``!\rũl>5tl\n(\"i\nP)\' rc-^je[ZEt\0lA-\'!~N.Am2p\rjXOR_]dr8$+\' ۬. Ӭ[8o\rbO5b61T\ZEW%BNnTJSd͸\"aۦ˧~m7\rnxndxZz1 |#;Mu_5I7,\";w8L SY7ڪJcDS LQe[DmacܜrLL /m_˘~tFP?|R0c[wcoWu4,Ê.8%TLa3兂21o*IBe߶r8Z;AHq먆v;61a\\?nW\"Jݘ1N+^%9A\"tb(CGX7|.{mGt{ꧼs\r\ZejR5|]\'r1HŻF gl45V%4/P\0\08\0rMx73vۃ(+0LXߘQCB` [0\"d6j1:>c3c2:sH>p\\udV.U}QL>Cu9$2$ݦ”qil4j5zhgQtC-9T\']l\raR5IgMs)Y4A5fѳStZ%?:fJðUjuhP5 Zm ,!lѪ)d)H@\0׏nn5M;uk8bێ9*8w8 6{^SlPMgLISwg8!9\0Pİ\'e2ڲ}Oj%D`VMfJ4jQ}N3*1{@b^\\k!令#\0#X3]Rzl \0 #\rD1t[gfZB*Q\"q*уjj$VZbE YPQ8~1$ s8XhFDG7M|lsѓ-QI6mRIV$ $P}4.!^5\n⾪\rfYT}ګEM|Usc=GmK;LcwO0Q={hc):Ě cr\\n귺{iU_7&L7)ӷ~\rK^fX,%_q8Z)+_#v,dSѓդyy\r?^RvYvSbL>Ee ^/q:V!Yd7M4V }+Jض WH K*$ y*Q1J#MPH`!C~T7<_]CL~IoݒU\0uE} V֘~ $RM4PC/a3-dLn.cdۛώЌb80b鮸4nNWJuWިcQrd\" TJ\0*Gi͸+E1vFhG敲MUuQIC\0qɓ/!ֿ',5,0,'','','',''),(75,0,20,'75859b10e79de61b','01f62fe9af5d22dfb7664e78e64acd43','2017-09-07 09:16:41','2017-09-07 09:16:41','','','Contact Photos','3.jpg','image/jpeg',48,48,1755,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \00\00\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa\0\0\0?\03csǜ?1{pK]_r\0BsK]n 4dfZ%ӣ ³+r0m&i-jAg>%hM%C¿pO!6xie5H)LWle!k:Thq2ڰNݴMj6A7?qYˌgZ[DEn&Z]-mnBa![v\\h2BaRI?<~/y=dG3JM[ݨ` ԭyN\0ɚȥ֐YʈO`=y| Ҽ&-Fmf+`<q{*En՘g$Y`P#I%;B~NMX}\']؜\ZlcޒZFQ.6?` />>IX㞣`3lHm%X8=j2.K21$72)I1Cwn^i>%T%cƺx]l_/CXJRByŸQ-+μ+ug\\yJ7t{2U0OHmYF]qZa$fdB2FzXK3xq,8+-#?*\ZFV)/%xR3e0(b0Š;# ;Kl\r%YecCM6\'JP%81zWmJeZ⁜[&+i!.>Vz8XE}+d\r\0!PeաiUtvO;}qje0åi?~A-٘H q-b> \Z+9#7x1\Z\Ze=`t,\n\0\"\nn:x%zsϤ?z|գcuS?KR+1UhahTc%A1>?B\0',6,0,'','','',''),(76,0,21,'75859b10ebd73888','39e7b822c093a22f70de8782c7d652d4','2017-09-07 09:19:08','2017-09-07 09:19:08','','','Contact Photos','4b7db531ad1920a7cb8fb76aed46ddd9-4.jpg?ts=1504775575','image/jpeg',175,175,5493,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n  \0B\0\0 \0\0\0\0\0 !\n1A\"Qaq%23#$&5BREs\0\0\0?\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*ՆX\Z\'p|LsN}Y%ZR|(J*I&+rJ#yI)%lZ,:i(ϥ)J*hχoмI$Dj- (C\"cI(s_L:g `wI9s.wYaC\"3:Ie~g,ڮϨ6&tt/iKxvEqE˒S.:t7Vg5u;Ys=YFZRk}jʮHnlIfhM6&\";MDD]¿SRchB{tƤGVMʽ4$&2\"%{̈}9$489hۆ @e崭\ZطHlMT:!M2aLc/RiCrT\ZuΥ$FIN춆q5S,-Bc^op}AW8Y)c?T2FiդkI$bՓ鐸A\\<FhŭܿIk)3^Nٓwu]kU4J8W*F7`^U:VңI%̷?|C{Oh[:rqğ 0\\\Ze0\\ޅ\Z.RvZNOI\n#O v-ikFo;EIձ5\ZRv!,\\4;MyE3ta9B:̌[XTh_\"r4k*F\\U:Mz\0u#\0C\0\0\0\0\0>frZ\\kpqҾ.oUuq-SCJKPSǬf2JJGD Ym+>!҄^\n\'/{} W7-K;KkI (;TF\rH̖J\0Jsj K\0mp֫WV\'\"IٹjTlx;ҤO,RԐǖ edK:8<)5hy Ów r*-0BfJ& u:fIVr:rjh.p甴9 MH>듲pgBҲ4:{-RTPMHZRw+|)DqKєW2WejO{F|aM)xhʴH-IF3捩Gِ\0\0\0\0\0qd-B\\*uDZnǮ~4gfGyN-mݯm(ָmWWIoԺw2IHX%Lza֞XY;$DQ{}54;9)k3S2%-|Ĕ\0EɧT|+2BBHUyK>Yk[\ZYN \"ZyTGV\ZĢ5MGROO&7 ;_Ou[7O?0RvVg#۔+E1[ٲ\0\0\0\0\0;X\ZqzqJ2c:#vIK^Fk4B/X﹑E4ehM88(:\0s2ia{CT\0XRJdz]d݉ ,1r~6DdGOBg&f)e+/4TQjѰ~wc8ڤFgTճG[M\')?JUDR)6v[#E3$n=JK\'Dq18򄭴7(UueLtv2ҤTK[o\0>}FH\0\0\0\0\0B\0Lvx(Ʋ93O\"\noHPQiJU;G\\/e>oQ{hnW^\0S8{\"ΛJK\\*G1)|\'s6@Mo+@:euw;uY*9rOl4YLԲ3Q#\"5E}qSSGHRb]{~&B\nq@wgvQg_=rcW6EPj\"؊vׇv{:׎V\r}LdD[u_^ ?!y֑p<[L^Z}ӵk;[cJ.ɖ6鲔$/DY[kwRD\0\0\0\0.nNnv\rvsvupVV6;o̥M\'x8x-aESl13K Yx%rJrRY5B$e=4_ć&N\Z_kHQ;wdW/+^&)5i(-Z<9sN.jM #p9hԥiʼnQ=&UOQnQԔla\\.\\\0㴒Mʮ%y2=ޟ]ZB˩J$\0-FX R2bX01[#s;=\Z\r&QiOwM Z-:i)tY.ϺfbVZ:Z`W%T3>I>FdF-$j#;*O$)R])}[d\0 z~BпgG 4L=c&n3κu6[8eTҔ.GUF(G$^Jڑ\rſqخwZ\rnÙL5>wv$Rb2{UB?H LAFLi%`TjѫQ\0>\0\0\0\0SG M%BIy[뽊G?t/ǘP4% YT*\">a&}bpija־x[Wnb\' +H%L3ȬNC+RW\nbL+`\0\0\0!MWp᭭gk&4qSGe:O-]1Iw#277Q%!T2C0Ҵ>MYV8#chV(vvTN-~=I[WM5㿀rnue0[ΝX$!DB;0z>S%&Fxʗ1+cRղGB)r]/q Ïz ύ9U/%,/SrCj(\\d$DeQȵ}Bj+n--ܧem3뷐 \0q65YRGX:a:\\\'{V(CӪ\Z.7p42cZQz_j6{s}ARrҋӗx^_է$R#N+j}\Z4hQ>[E\0 \0\0\0\0Rtwؾ~{|\00 \"8\"M/j9E-`អ\r-[,&ooL)&\r1EE)aM|i:{Lٞw,dRt aKBf 5Ô5b%֡ZuZꅊqNL2ÕoY↚}LVB\00ւ7s\0D{IN\n_J;)Tʮ>)URUVPlЏ`lD4SM8\rfѲ*HiP)CPO 3{a%yV)ynYiE3IVh; 8ݴʛG]5b~=I~}vݐr(C/mXHrN*ߎ\\==ZQed{\\nX^¹Z2TƓe%W\"\"wFVeL8$@KaM`9Gzvies^qY99(h9HF`kd)I$Br\n\"n5}. 9l2m&\nb+$V`\n\0++9W0hqqG\0GZ~. ׬c8o\rO5b61T\ZEW%BNnTJU2gfܤlu遅-r߲}M{2۞,[:\0^2֫ADH.a~X{\'?,5CfKW2}ߝ$+O0T\'cXXlfq 0# 8U(+*e ra`[Jprw휢VE+$z!]=j33WۮUȇb7f j,׳>NPHG,yQ\r u:%Ühƙi\'l;\"WI܅4R+EnQ*?&a%:6\rUM-(\0\08\0?\\^ᝠ+>*)1PPa$b:Vp097MLN!a-oX\0yLY#*_nT~%{]NI${LquI7i0qiw\'M-\Z^<]/)u NxU mX{ԬFYc(Vk0MlYlDf]Ou:YR0+ZZ!\rv[FG&(-D4jh\nR\05۾ۍSw{ae;qZ_ʴDdr6ͺT=J )H(r& &nk  bXBٓGmY> El\'x|5\"FrO& y%^\Zn(:ԓH*1{@b^\\k!令#\0#X3]Rzl \0 #\rD1t[gfZB*Q\"q*уjj$VZbE YPQ8~1$ s8XhFDG7M|lsѓ-QI6mRIV$ $P}4.!^5\n⾪\rfYT}ګEM|Usc=GmK;LcwO0Q={hc):Ě cr\\n귺{iU_7&L7)ӷ~\rK^fX,%_q8Z)+_#v,dSѓդyy\r?^RvYvSbL>Ee ^/q:V!Yd7M4V }+Jض WH K*$ y*Q1J#MPH`!C~T7<_]CL~IoݒU\0uE} V֘~ $RM4PC/a3-dLn.cdۛώЌb80b鮸4nNWJuWިcQrd\" TJ\0*Gi͸+E1vFhG敲MUuQIC\0qɓ/!ֿ',5,0,'','','',''),(78,0,21,'75859b10ebd73888','39e7b822c093a22f70de8782c7d652d4','2017-09-07 09:19:08','2017-09-07 09:19:08','','','Contact Photos','4b7db531ad1920a7cb8fb76aed46ddd9-4.jpg?ts=1504775575','image/jpeg',48,48,1755,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \00\00\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa\0\0\0?\03csǜ?1{pK]_r\0BsK]n 4dfZ%ӣ ³+r0m&i-jAg>%hM%C¿pO!6xie5H)LWle!k:Thq2ڰNݴMj6A7?qYˌgZ[DEn&Z]-mnBa![v\\h2BaRI?<~/y=dG3JM[ݨ` ԭyN\0ɚȥ֐YʈO`=y| Ҽ&-Fmf+`<q{*En՘g$Y`P#I%;B~NMX}\']؜\ZlcޒZFQ.6?` />>J[X㦣`3l8m%X<=j2.L21\"D70Ĉ2+I1Kwn^i>%T%cƺx]l_/CXJRByŸQ-+μ+ug\\yJ7t{2U0OHmYF]qZa$fdB2FzXK3xq,8+-#?*\ZFV)/%xR3e0(b0Š;# ;Kl\r%YecCM6\'JP%81zWmJeZ⁜[&+i!.>Vz8XE}+d\r\0!PeաiUtvO;}qje0åi?~A-٘H q-b> \Z+9#7x1\Z\Ze=`t,\n\0\"\nn:x%zsϤ?z|գcuS?KR+1UhahTc%A1>?B\0',6,0,'','','',''),(79,0,22,'75859b10ee09e3cc','19065c444ea257e137e46e890d2c7001','2017-09-07 09:18:24','2017-09-07 09:18:24','','','Contact Photos','4.jpg','image/jpeg',175,175,5486,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n  \0B\0\0 \0\0\0\0\0 !\n1A\"Qaq%23R#$&5BEs\0\0\0?\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*ՆX\Zgp|LsN}Y%ZR|(J*I&+rJ#yI)%lZ,:i(ϥ)J*hχo>$Œd \"5ɐbo9/צF3qN;뤂9;߬Kka0Z$ԲOb3gWqgUlW\0ĺQ<;J;剽ŒTh܋}h>#\0\0\0\0\0\0\0>=]Xwg-8i9uN梿ݱ^-l$$5Rt\"e):G+3Ϛͺ,-d5ܾn~5SeW$76sS$4SME\"\"O._)YŽ1\rX!M\nmyKlR#kM&^o|ML}IjOD>OJ\Zmiv2rVӍBl[rdD;k2dZ8($h:״y}`\0\0\0\0\0\0\08ƣ37 } Nsſ]Ec pJL򄩵œU<Y)O&$.!EQ%NCSL8d#z9㔚g,ܮG w7GggU)F]EsI-DS:{-e|jwK P䗴[듲pgBҲ:t[I줩*¤VpS◣(dBŗ4B. su= =4ᢙKAeZ$qu餣}Fԣ\0\0\0\0\0\nYNo!Nj{\"F-zyc?s\Z I3#̼˧Q\rk\\]6PꫫUr$]MIN^|$^u,ݦ=0O,Vt,p]I(F\Z̔QbJIDl\0dӪ>o!Sg[$i*<\\Qng|Qu,,tu-<#\rbQ\Z&vc٧u-\'Bb);C3haKr\"ۘr-\0\0\0\0\0Ky8qa^1[؍$#5K,JLȌaLs&[d1\rצKɧ=\0DxaÓ_Udǁ5%~<&ܾ^G⏚_Kωf\\O2ث=t27 36FffJw&M^DDV\0\0\0\0\0A-GM:]\ZN/&ɛ3:Rv_?]%0^w ghF˭3橯c`jGf=hR ȪnG)#I&e696\0\0\0\0\0\0L4/6v91!\r),~*Rg#URij\"rNPkJ;m>bd&XFޭb48KKT\\h^Q̶#I\ZhWe+_ͺɧI;\nF.Vw)7|U-R/1.t2fsniEu?bDV2#Cau33q2jwZqN?;^XR#g3Dj֣&\nI*);-xj7A%GiŢV8TNBVERe*WZMQi;iR*h-\0>$\0\0\0\0\0!}Lvx(Ʋ93O\"\noHPQiJU;G\\/e>oQ{hnW^\0S8{\"ΛJK\\*G1)|\'s6@Mo+@:euw;uY*9rOl4YLԲ3Q#\"5E}qSSGHRb]{~&B\nq@wgvQg_=rcW6EPj\"؊vׇv{:׎V\r}LdD[u_^ ?!y֑p<[L^Z}ӵk;[cJ.ɖ6鲔$/DY[kwRD\0\0\0\0.nNnv\rvsvupVV6;o̥M\'x8x-aESl13K Yx%rJrRY5B$e=4_ć&N\Z_kHQ;wdW/+^&)5i([xrIW+]}f,\n^G,sJ\'8ӫzL+Z%l$Y(:]6\0ei%v]Jd{o?${;SؔI-[l;ǢeŎ3lb`cnFv6{\nm 퍍JZ\\dJ2ڀ#opMNӷw8m2i$dm$EjDMr\"bvKȴ4s܈\ZSENU\'|{uHn0BaG\'w~x-5:@\0\0\0\0|(\\-es$ c\' 4W\"+HSw:%25Ȉ׶ܜ3B\rW\\e34hё/Zq&%-¢$ʄʺiS2g@ +mRӭVNQ\\5[B챌hx%kk91&rQ%Hjp՗htזf,a\"ڪA@d&b\n4cI+\0-RV^_gG<\0\0\0\0Wc3M214V9&n)мsc73MB/ǬD<%ePJXGZ!m_UX:,m0y#𖦳U2SD\"9 I^)#\r2]\0\0\0<;~bj\rmk;^I5]28)~j2K!d dFI) ]_8q:j:űEڱFn`=ZqmL}$JJZiwhtK->)t%\Zy&\"$r0~Ʊك)23T[\Z:LL*{f{^|m|D5WtRy)dzX.QD&G\"$#YT/RBrMŵź쭶}>{v\0\0>_;.&ƹ *H6L\'R $jhuzuQvCQEҦ:y}ƚU,kJ!Y>}Fк/no3NZQw35r+dJRDvеmOF\n\'k~|H38\0\0\0\0\0cGT/]/_?F92GIMZ1\'(l3AKuŒRM4w$ԙ!(RH\'~.3,3u (s@#.m1HwK[:vtG\'9&2D$N0Yu\nn4:J_# \0+ˮ&8H\ZWҾSidr؍ed}K{L:1\rqjNě(Z735T_s\0\0\0\0\0\0Ɣd~?T\02}nj눝F o1-y ]čhv9nQHȌm{>m H:5;{#RTKy~2v\0\0\0\0\0\0uhJ8=UCh<^;F [L6$\0\0EJ]]z2ƣszT8ƭ{\Zx*P} c鷐\0\0\0\0\0\0\ZI7IwD\0& q-Î>鿡\r\0\0%H?yt!\0\0\0\0\0\0\Z)VFַjgf^D{ ox\0\0\0\0\0\0\0\0\0\0\0\0',4,0,'','','',''),(80,0,22,'75859b10ee09e3cc','19065c444ea257e137e46e890d2c7001','2017-09-07 09:18:24','2017-09-07 09:18:24','','','Contact Photos','4.jpg','image/jpeg',80,80,2703,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \0P\0P\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n \04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#3Sa\0\0\0?\0M5AQ\0jǯ<_T@Zi9׾*){ڥJY[6he ,u$1tKvD3%g[I_:kƵJuB7\'vX3iRj:G*e\0aM|i:{Kٞw,dRt aKBf }zao-fr@@D5֮VbS&-Lm[xS!d\"ἵ1/n}U2e&T`aU4#``!\rũl>5tl\n(\"i\nP)\' rc-^je[ZEt\0lA-\'!~N.Am2p\rjXOR_]dr8$+\' ۬. Ӭ[8o\rbO5b61T\ZEW%BNnTJSd͸\"aۦ˧~m7\rnxndxZz1 |#;Mu_5I7,\";w8L SY7ڪJcDS LQe[DmacܜrLL /m_˘~tFP?|R0c[wcoWu4,Ê.8%TLa3兂21o*IBe߶r8Z;AHq먆v;61a\\?nW\"Jݘ1N+^%9A\"tb(CGX7|.{mGt{ꧼs\r\ZejR5|]\'r1HŻF gl45V%4/P\0\08\0rMx73vۃ(+0LXߘQCB` [0\"d6j1:>c3c2:sH>p\\udV.U}QL>Cu9$2$ݦ”qil4j5zhgQtC-9T\']l\raR5IgMs)Y4A5fѳStZ%?:fJðUjuhP5 Zm ,!lѪ)d)H@\0׏nn5M;uk8bێ9*8w8 6{^SlPMgLISwg8!9\0Pİ\'e2ڲ}Oj%D`VMfJ4jQ}N3*1{@b^\\k!令#\0#X3]Rzl \0 #\rD1t[gfZB*Q\"q*уjj$VZbE YPQ8~1$ s8XhFDG7M|lsѓ-QI6mRIV$ $P}4.!^5\n⾪\rfYT}ګEM|Usc=GmK;LcwO0Q={hc):Ě cr\\n귺{iU_7&L7)ӷ~\rK^fX,%_q8Z)+_#v,dSѓդyy\r?^RvYvSbL>Ee ^/q:V!Yd7M4V }+Jض WH K*$ y*Q1J#MPH`!C~T7<_]CL~IoݒU\0uE} V֘~ $RM4PC/a3-dLn.cdۛώЌb80b鮸4nNWJuWިcQrd\" TJ\0*Gi͸+E1vFhG敲MUuQIC\0qɓ/!ֿ',5,0,'','','',''),(81,0,22,'75859b10ee09e3cc','19065c444ea257e137e46e890d2c7001','2017-09-07 09:18:24','2017-09-07 09:18:24','','','Contact Photos','4.jpg','image/jpeg',48,48,1755,'\0JFIF\0\0H\0H\0\0Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n\0C\0\0 \00\00\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa\0\0\0?\03csǜ?1{pK]_r\0BsK]n 4dfZ%ӣ ³+r0m&i-jAg>%hM%C¿pO!6xie5H)LWle!k:Thq2ڰNݴMj6A7?qYˌgZ[DEn&Z]-mnBa![v\\h2BaRI?<~/y=dG3JM[ݨ` ԭyN\0ɚȥ֐YʈO`=y| Ҽ&-Fmf+`<q{*En՘g$Y`P#I%;B~NMX}\']؜\ZlcޒZFQ.6?` />>IX㞣`3lHm%X8=j2.K21$72)I1Cwn^i>%T%cƺx]l_/CXJRByŸQ-+μ+ug\\yJ7t{2U0OHmYF]qZa$fdB2FzXK3xq,8+-#?*\ZFV)/%xR3e0(b0Š;# ;Kl\r%YecCM6\'JP%81zWmJeZ⁜[&+i!.>Vz8XE}+d\r\0!PeաiUtvO;}qje0åi?~A-٘H q-b> \Z+9#7x1\Z\Ze=`t,\n\0\"\nn:x%zsϤ?z|գcuS?KR+1UhahTc%A1>?B\0',6,0,'','','',''); +INSERT INTO `photo` VALUES (1,1,0,'75859b1098e38271','676c41a6030639fa07634741242d99de','2017-09-07 08:55:42','2017-09-07 08:55:42','','','Profile photos','person-175.jpg','image/jpeg',175,175,5476,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0�\0�\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ��\0A\0\0\0\0\0\0\0 !\n1A\"Q�2aq�#%3���$&5BR��Es����\0\0\0?\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Ն����Xg���p|L�sN���}�Y%ZR|�1(�J*I&+�r$0G��)%l�Z�,:��i�(��ϥ�)���J�����*hχoSмI����$�Dj.T�\n1PȌ�4��?�{e���Ӧx�)ж}t�^x\\~�s��2�{���ml&��\0�T2#3��ږ_�،�ûU�Y�f�$���1.�`w��)rr�ǒ��$g�boqd�\Z7\"�i,�0g��#�}�G���!�\0\0\0\0\0\0\0*|z�B��6�Zp�]�s\"�A�ڝ\r�E\r��{�b��Z�HI��j��>Eq�E�˒S.:t�7�Vg�5�u;��Ys=�YFZ�Rk��}�����OJ��\Z�m��i��v2��r�VӍB�l[�rd��D�;k�)^�2-gQ~ESA�j�ƴS��<���0\0\0\0\0\0\0\0v�Sę��>�\'9��خ� �豆�8$��򌩵�œ�U��Y)�O�&DH]6B�&�KMeN�D�SL�8�d��#z��9�۔�g,�ܮ��G w�7GggU)F�]Es�i-��DRd�{-��e�|jw�K P���䗴[�<�PU�&�Jw���iU4�L��\Zno5i)i���ud�:d.-�n��=9�tр��Z!�kj�/�Z��rL�׹S��d�]�Wg�\Z��M(R���%�#����F�� ʧJ޵ZT}��$�������|����7����u�ç(\'I�]_���/�Yk1�S���Q��\"�x��f�\\r���Z\\kp�qҾ.oU�u������Z�n���)����X�Fd��5Q1e�c�@���J�{LX(�GԽ��3\\�[���a,|�M.�kQ�&_�,���R�\ZK��6>i#2Y*h@Wu+����-.���q�\'c)�Z�]X��\'f�I�Q��0�J�<�H�j�RCZ$1��.�˟��4�?¿ �գ�\"t]�N��&z}Ȩ�4���\0*����AMq�%��%[1�PT�ɩ��Æ3�R��R��l14z�Y\"�d��G�N���� Jː���m\'ʢS-BU5!j/�Iܭ���1�/FQ\\�^��.h�]P0��ohϐY�)�^\Z)�T��U�GQ����,fJ��Gِ\0\0\0\0\0�q���d-�B\\*�u���D�Z��nǮ~�4��$�̏2�.��-m�ݯ�m(ָ����m����WW���IoԺ������w2I��HX%�Lza�֞X��Z6�;�<��$���%jhvs2R�f���:>-DdJZ��)%��\0#[ڋѓN��Ve��M��|����<�qE������K>Yk�[\ZYN ��\"ZyTGV\ZĢ5MGR�OO��&7��� �;_��Ou��[7���Q��?�0�Rv�Vg#۔��+���E�1��vl�\0\0\0\0\0����?�Ɯ^��0�R�lw���έ��lFݒRב�̋�rK�3=�2###�h��,��I��7_�Cku齒笩Y��;���a{`\0\0�\'uXh����Y\'q�E��Ix��}�RÓI_/_#�qG�OO��%�����3.\'�\\�m������>�t��2�7 ���36(�FffJw_C4�4yZ*\0\0\0\0\0����\\�1.�۷��C���6����yC��2t2$��3�K�������\\��.�K�\r^\'�G���E���);S/�ҟ����E��s,��f/qB�5�q�C\"Ǯm̕gx�/���6l�5|*��Io�$����}X\0]�Uz�a�� ��jv�C0�)�8�.�op���cև6���\'R (W�����J�\"�Sf>���UKS���*T�Φ�=72��?���[ َ��\0�����u��&|�5�\"�-Uh� ǭ\nV#�9Mԗ��;�H�$i5\"�̢�:��g&�\0\0\0\0\0���ك����F��&7��<!�E4��/�R���5U*���\n*:�$�N�����$\ZҎ�l�����k/�� ��)=��9�&Q��eؽ��\r>���1\Z�T|�J�m��F���J��n��w�i�N�o[/���8�����&� �q,���K\r5<���Gݢʥ����*T����\0/�<�|{9e�.���L�y-ؙ���\r\"ȳ.��Q�j�[o��OB�g��&f)��e�+/�4�\\�Q�j�����Ѱ�~wh�c�8���ڤF�gT�ճ�G�[�M\')��?J�UDR)6v[�\"�3���$n��=�J��K�\'�D��q1�8��򄩴��7�(��U����ueL�����t�v2ҤT�K�[o���|���\0\0\0\0\0���\0/�!3ڕ�\Z˘� �.����s.b������U�~T��22T��<�)�������qv�s\'��\ZPH��GzjY��|�F�2�����?jj|�\0໩\nLK�c���A_.(\Z����J �������Lj��Ȫ\Zy��\"�}����ݽ��ε�Ճe�S5:�$�n�\Z���[�� δ��\"�d����F��(��(Y��\ZQvL����GM���y!z\'G�ǾƷu(���%;<\0\0\0\0\0?�յ������������n�n�\n����m���3\"\"\"=�ؼ����\'�x��8x�-��a�����ES������l13K� �Yx%���rJ��rR�Y�5B$�E�=4k_��ć�&��N\Z_�����k���H��Q;wdW)%�/y}\'��)5���i�(���[���xr�I�W�+�]}f,�\n��^G��,s������J\'8ӫ��zLKZ�%l����$�Y�(�:���]��6��\0�㴒�Mʮ�%y�2=�ޟ�$��{�;�SؔI-��m�z�Ѹ�U��)h�c���,X�ۭ�ѹ���›C;ccg)�-TZS��BV�^S2%l��@ro�������W8&اi��;��6�{{��IY�\\J6ڒ\"��\"J�|��w\"-�)�`t��J��K�q���:�}�7�4��QoӕI��4��{u���H�n��0B��a�G�\'�w~�x�-���5�:���������@\0\0\0\0|�(�\\����-e�k$ c�\' 4�W\"�+H�Sw��:��%�25�Ȉ׶ܜ�>E��{�殸�g]hѣ\"3i�_0���ME�K�[�EmFI� �tҦe�Ϩ�W�ۧڥ�Z�%.���/�k0���c�U��\\�J��r [GKUkF�f�������J[�D�=��(��l\'�\0\0\0\0\0\0= ����1Wή1�n\ZݪLV��,���ګ��V0��^�`q-O�52df��Jy|�e9\r���O*�����d=�\09���.s�\Z�\0�&�V�� ��[u;� ۺK�_Q(���d^����x��p���:��L5���\\+�幞�Y�{�C����ۧ��@\0\0\0\0\0\0@��R��:�X��R���{�f鷺z��\Z���{����7�G�x\0\re��K��)�Z�4.=���b�����Wf�yi=��l�������>��L��p��\0pt=����UrG���\'�����z�R/��J�\0\0\0\0\0\0\"C�?\ZQ�����S��(���m�]q�6Hܷ=��[�zy��%�O�\'�`1�@�BWaA�1#h�C�(��9��?M��Q�H��\"3-������c�ѷ= D�ZW��lה�m�L�IS�w�.��оʈ�2� ��v�\0\0\0\0\0\0u�hJ8��=�U�Ch<�^;����/�F ��鱴�zm�I\"�\0\0���޻���\0c�d5C�ήҦ�5l��֋��-N��m� R��~�w�B���߀\0\0\0\0\0\0��׎JO��\ZO;�\'�0�g ���ynwd��.������\0\0\0�T��^G��\0]�\0?/.�2\0\0\0\0\0\0\0`T��V�*�h�:��mL�܌�������\0\0\0\0\0\0\0\0\0\0\0\0��',4,1,'','','',''),(2,1,0,'75859b1098e38271','676c41a6030639fa07634741242d99de','2017-09-07 08:55:42','2017-09-07 08:55:42','','','Profile photos','person-175.jpg','image/jpeg',80,80,2697,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0P\0P\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ��\01\0\0\0\0\0\0\0\0 !1\n\"QqA#���3���\0\0\0?\0��M5Aq\0�����4�M5�ݸt���=��X�\"��™!D�p< ��_x��r���Y������C�������ê�T,Q�rd�其aɖ��+z�4��d2���:AY1.�Z�F�`H��k7>��C�b���M���r�I��U*UXz�n���h6F�CŰjR6g\Z�� �6@�IM4�\nP�)�\'�� ����c-�^j����e�[��JE�t\0���l�A�5��*���ga\'��2��א�\rjX��OR_���]�d�s�8��$+�\' ۬�L%h��Au��(VH����VW&8\'�zr�� \na��p��p~��o�\0\">�?�:�;�pMT.�cר%\'g���>�xk��x���3���Ԫ*��j*sr�R�s&vm��a\r��00��n];�_�o��ow�[sŕ�s\'_��X��cՙ�7?�D����}� ��ݦ�k���/��d�\\7v�۸n�0U�X��Ȭ���RU#57%9L%0 D@u�o\'l9��5�����Rs�1�Y2�3T<$oKD��~�.`W�z�$���_�\'@�ꑄ�k\Zܐ�3��x���,�3�1�fWdaq�*�u�Zc ���W,,��~�V\"N[.O=��Pt��*���Ed��]D7@�˶G��ѱ�Bfc\n��uʹ�UV�쁍E��\"t��Z�g�)�\nj�r�ш�N`���M�Q������6�i��)K��x�øY�%t��SL���W�?�w_\n�!R�; )��ٴhz�IؼR�@\n�=��M5�[�����n?ܣ�x�©1b�~cE e\n�>�@.�,S��o ��=��t٫t��r�������� ͎������ �r�$eB�t�6���*���$�q�:+��$����.�&�7\")A���f�]���KiyF�W�n6�/��uK�D<�}�ӞBu�ah����+#Q��t��72���D*�Vm59��E�S�N�C�V`)���;\n�V�V�e]�@ŠFѰ�ɢ�:9�dȃf�QM�!JB\0���j���w�-�ۈ��oŷr�U�$p�[$3�q�m�1Sp��(,�� �ʒΘ$�����#�ۻ��@�=�t����d젆Q�VO���X�7���>�;\rD�ȕ����0uI�{,�IW���J5���� �pe9L_��!���۸�~{~uϐ���?��\0\Z��Bk�WY��t��u ]�8�w��h�.�6kk��HEUj2��dN%U�0�\rUMT�j�+LH `w���*\n\"�\\��0����g \rѼ|dLTst�G��0h�M0b��3f�$�5l�H �i&B��馿!t��|�z�@�U��Me`m��{4*�%���V.m��*(��C�1�Zf\r3;��Æ�U��sن��\"���-�.�9�J>tL~��H�,���$�~��v��f��UFYVEq�E�˒S.:t�7�Vg�5�u;��Ys=�YFZ�Rk��}�����OJ��\Z�m��i��v2��r�VӍB�l[�rd��D�;k�)^�2-gQ~ESA�j�ƴS��<���0\0\0\0\0\0\0\0v�Sę��>�\'9��خ� �豆�8$��򌩵�œ�U��Y)�O�&DH]6B�&�KMeN�D�SL�8�d��#z��9�۔�g,�ܮ��G w�7GggU)F�]Es�i-��DRd�{-��e�|jw�K P���䗴[�<�PU�&�Jw���iU4�L��\Zno5i)i���ud�:d.-�n��=9�tр��Z!�kj�/�Z��rL�׹S��d�]�Wg�\Z��M(R���%�#����F�� ʧJ޵ZT}��$�������|����7����u�ç(\'I�]_���/�Yk1�S���Q��\"�x��f�\\r���Z\\kp�qҾ.oU�u������Z�n���)����X�Fd��5Q1e�c�@���J�{LX(�GԽ��3\\�[���a,|�M.�kQ�&_�,���R�\ZK��6>i#2Y*h@Wu+����-.���q�\'c)�Z�]X��\'f�I�Q��0�J�<�H�j�RCZ$1��.�˟��4�?¿ �գ�\"t]�N��&z}Ȩ�4���\0*����AMq�%��%[1�PT�ɩ��Æ3�R��R��l14z�Y\"�d��G�N���� Jː���m\'ʢS-BU5!j/�Iܭ���1�/FQ\\�^��.h�]P0��ohϐY�)�^\Z)�T��U�GQ����,fJ��Gِ\0\0\0\0\0�q���d-�B\\*�u���D�Z��nǮ~�4��$�̏2�.��-m�ݯ�m(ָ����m����WW���IoԺ������w2I��HX%�Lza�֞X��Z6�;�<��$���%jhvs2R�f���:>-DdJZ��)%��\0#[ڋѓN��Ve��M��|����<�qE������K>Yk�[\ZYN ��\"ZyTGV\ZĢ5MGR�OO��&7��� �;_��Ou��[7���Q��?�0�Rv�Vg#۔��+���E�1��vl�\0\0\0\0\0����?�Ɯ^��0�R�lw���έ��lFݒRב�̋�rK�3=�2###�h��,��I��7_�Cku齒笩Y��;���a{`\0\0�\'uXh����Y\'q�E��Ix��}�RÓI_/_#�qG�OO��%�����3.\'�\\�m������>�t��2�7 ���36(�FffJw_C4�4yZ*\0\0\0\0\0����\\�1.�۷��C���6����yC��2t2$��3�K�������\\��.�K�\r^\'�G���E���);S/�ҟ����E��s,��f/qB�5�q�C\"Ǯm̕gx�/���6l�5|*��Io�$����}X\0]�Uz�a�� ��jv�C0�)�8�.�op���cև6���\'R (W�����J�\"�Sf>���UKS���*T�Φ�=72��?���[ َ��\0�����u��&|�5�\"�-Uh� ǭ\nV#�9Mԗ��;�H�$i5\"�̢�:��g&�\0\0\0\0\0���ك����F��&7��<!�E4��/�R���5U*���\n*:�$�N�����$\ZҎ�l�����k/�� ��)=��9�&Q��eؽ��\r>���1\Z�T|�J�m��F���J��n��w�i�N�o[/���8�����&� �q,���K\r5<���Gݢʥ����*T����\0/�<�|{9e�.���L�y-ؙ���\r\"ȳ.��Q�j�[o��OB�g��&f)��e�+/�4�\\�Q�j�����Ѱ�~wh�c�8���ڤF�gT�ճ�G�[�M\')��?J�UDR)6v[�\"�3���$n��=�J��K�\'�D��q1�8��򄩴��7�(��U����ueL�����t�v2ҤT�K�[o���|���\0\0\0\0\0���\0/�!3ڕ�\Z˘� �.����s.b������U�~T��22T��<�)�������qv�s\'��\ZPH��GzjY��|�F�2�����?jj|�\0໩\nLK�c���A_.(\Z����J �������Lj��Ȫ\Zy��\"�}����ݽ��ε�Ճe�S5:�$�n�\Z���[�� δ��\"�d����F��(��(Y��\ZQvL����GM���y!z\'G�ǾƷu(���%;<\0\0\0\0\0?�յ������������n�n�\n����m���3\"\"\"=�ؼ����\'�x��8x�-��a�����ES������l13K� �Yx%���rJ��rR�Y�5B$�E�=4k_��ć�&��N\Z_�����k���H��Q;wdW)%�/y}\'��)5���i�(���[���xr�I�W�+�]}f,�\n��^G��,s������J\'8ӫ��zLKZ�%l����$�Y�(�:���]��6��\0�㴒�Mʮ�%y�2=�ޟ�$��{�;�SؔI-��m�z�Ѹ�U��)h�c���,X�ۭ�ѹ���›C;ccg)�-TZS��BV�^S2%l��@ro�������W8&اi��;��6�{{��IY�\\J6ڒ\"��\"J�|��w\"-�)�`t��J��K�q���:�}�7�4��QoӕI��4��{u���H�n��0B��a�G�\'�w~�x�-���5�:���������@\0\0\0\0|�(�\\����-e�k$ c�\' 4�W\"�+H�Sw��:��%�25�Ȉ׶ܜ�>E��{�殸�g]hѣ\"3i�_0���ME�K�[�EmFI� �tҦe�Ϩ�W�ۧڥ�Z�%.���/�k0���c�U��\\�J��r [GKUkF�f�������J[�D�=��(��l\'�\0\0\0\0\0\0= ����1Wή1�n\ZݪLV��,���ګ��V0��^�`q-O�52df��Jy|�e9\r���O*�����d=�\09���.s�\Z�\0�&�V�� ��[u;� ۺK�_Q(���d^����x��p���:��L5���\\+�幞�Y�{�C����ۧ��@\0\0\0\0\0\0@��R��:�X��R���{�f鷺z��\Z���{����7�G�x\0\re��K��)�Z�4.=���b�����Wf�yi=��l�������>��L��p��\0pt=����UrG���\'�����z�R/��J�\0\0\0\0\0\0\"C�?\ZQ�����S��(���m�]q�6Hܷ=��[�zy��%�O�\'�`1�@�BWaA�1#h�C�(��9��?M��Q�H��\"3-������c�ѷ= D�ZW��lה�m�L�IS�w�.��оʈ�2� ��v�\0\0\0\0\0\0u�hJ8��=�U�Ch<�^;����/�F ��鱴�zm�I\"�\0\0���޻���\0c�d5C�ήҦ�5l��֋��-N��m� R��~�w�B���߀\0\0\0\0\0\0��׎JO��\ZO;�\'�0�g ���ynwd��.������\0\0\0�T��^G��\0]�\0?/.�2\0\0\0\0\0\0\0`T��V�*�h�:��mL�܌�������\0\0\0\0\0\0\0\0\0\0\0\0��',4,1,'','','',''),(5,2,0,'75859b109d5b24c8','a78adc969a71bfd985d769baa2d51c78','2017-09-07 08:56:53','2017-09-07 08:56:53','','','Profile photos','person-175.jpg','image/jpeg',80,80,2697,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0P\0P\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ��\01\0\0\0\0\0\0\0\0 !1\n\"QqA#���3���\0\0\0?\0��M5Aq\0�����4�M5�ݸt���=��X�\"��™!D�p< ��_x��r���Y������C�������ê�T,Q�rd�其aɖ��+z�4��d2���:AY1.�Z�F�`H��k7>��C�b���M���r�I��U*UXz�n���h6F�CŰjR6g\Z�� �6@�IM4�\nP�)�\'�� ����c-�^j����e�[��JE�t\0���l�A�5��*���ga\'��2��א�\rjX��OR_���]�d�s�8��$+�\' ۬�L%h��Au��(VH����VW&8\'�zr�� \na��p��p~��o�\0\">�?�:�;�pMT.�cר%\'g���>�xk��x���3���Ԫ*��j*sr�R�s&vm��a\r��00��n];�_�o��ow�[sŕ�s\'_��X��cՙ�7?�D����}� ��ݦ�k���/��d�\\7v�۸n�0U�X��Ȭ���RU#57%9L%0 D@u�o\'l9��5�����Rs�1�Y2�3T<$oKD��~�.`W�z�$���_�\'@�ꑄ�k\Zܐ�3��x���,�3�1�fWdaq�*�u�Zc ���W,,��~�V\"N[.O=��Pt��*���Ed��]D7@�˶G��ѱ�Bfc\n��uʹ�UV�쁍E��\"t��Z�g�)�\nj�r�ш�N`���M�Q������6�i��)K��x�øY�%t��SL���W�?�w_\n�!R�; )��ٴhz�IؼR�@\n�=��M5�[�����n?ܣ�x�©1b�~cE e\n�>�@.�,S��o ��=��t٫t��r�������� ͎������ �r�$eB�t�6���*���$�q�:+��$����.�&�7\")A���f�]���KiyF�W�n6�/��uK�D<�}�ӞBu�ah����+#Q��t��72���D*�Vm59��E�S�N�C�V`)���;\n�V�V�e]�@ŠFѰ�ɢ�:9�dȃf�QM�!JB\0���j���w�-�ۈ��oŷr�U�$p�[$3�q�m�1Sp��(,�� �ʒΘ$�����#�ۻ��@�=�t����d젆Q�VO���X�7���>�;\rD�ȕ����0uI�{,�IW���J5���� �pe9L_��!���۸�~{~uϐ���?��\0\Z��Bk�WY��t��u ]�8�w��h�.�6kk��HEUj2��dN%U�0�\rUMT�j�+LH `w���*\n\"�\\��0����g \rѼ|dLTst�G��0h�M0b��3f�$�5l�H �i&B��馿!t��|�z�@�U��Me`m��{4*�%���V.m��*(��C�1�Zf\r3;��Æ�U��sن��\"���-�.�9�J>tL~��H�,���$�~��v��f��UFYVEq�E�˒S.:t�7�Vg�5�u;��Ys=�YFZ�Rk��}�����OJ��\Z�m��i��v2��r�VӍB�l[�rd��D�;k�)^�2-gQ~ESA�j�ƴS��<���0\0\0\0\0\0\0\0v�Sę��>�\'9��خ� �豆�8$��򌩵�œ�U��Y)�O�&DH]6B�&�KMeN�D�SL�8�d��#z��9�۔�g,�ܮ��G w�7GggU)F�]Es�i-��DRd�{-��e�|jw�K P���䗴[�<�PU�&�Jw���iU4�L��\Zno5i)i���ud�:d.-�n��=9�tр��Z!�kj�/�Z��rL�׹S��d�]�Wg�\Z��M(R���%�#����F�� ʧJ޵ZT}��$�������|����7����u�ç(\'I�]_���/�Yk1�S���Q��\"�x��f�\\r���Z\\kp�qҾ.oU�u������Z�n���)����X�Fd��5Q1e�c�@���J�{LX(�GԽ��3\\�[���a,|�M.�kQ�&_�,���R�\ZK��6>i#2Y*h@Wu+����-.���q�\'c)�Z�]X��\'f�I�Q��0�J�<�H�j�RCZ$1��.�˟��4�?¿ �գ�\"t]�N��&z}Ȩ�4���\0*����AMq�%��%[1�PT�ɩ��Æ3�R��R��l14z�Y\"�d��G�N���� Jː���m\'ʢS-BU5!j/�Iܭ���1�/FQ\\�^��.h�]P0��ohϐY�)�^\Z)�T��U�GQ����,fJ��Gِ\0\0\0\0\0�q���d-�B\\*�u���D�Z��nǮ~�4��$�̏2�.��-m�ݯ�m(ָ����m����WW���IoԺ������w2I��HX%�Lza�֞X��Z6�;�<��$���%jhvs2R�f���:>-DdJZ��)%��\0#[ڋѓN��Ve��M��|����<�qE������K>Yk�[\ZYN ��\"ZyTGV\ZĢ5MGR�OO��&7��� �;_��Ou��[7���Q��?�0�Rv�Vg#۔��+���E�1��vl�\0\0\0\0\0����?�Ɯ^��0�R�lw���έ��lFݒRב�̋�rK�3=�2###�h��,��I��7_�Cku齒笩Y��;���a{`\0\0�\'uXh����Y\'q�E��Ix��}�RÓI_/_#�qG�OO��%�����3.\'�\\�m������>�t��2�7 ���36(�FffJw_C4�4yZ*\0\0\0\0\0����\\�1.�۷��C���6����yC��2t2$��3�K�������\\��.�K�\r^\'�G���E���);S/�ҟ����E��s,��f/qB�5�q�C\"Ǯm̕gx�/���6l�5|*��Io�$����}X\0]�Uz�a�� ��jv�C0�)�8�.�op���cև6���\'R (W�����J�\"�Sf>���UKS���*T�Φ�=72��?���[ َ��\0�����u��&|�5�\"�-Uh� ǭ\nV#�9Mԗ��;�H�$i5\"�̢�:��g&�\0\0\0\0\0���ك����F��&7��<!�E4��/�R���5U*���\n*:�$�N�����$\ZҎ�l�����k/�� ��)=��9�&Q��eؽ��\r>���1\Z�T|�J�m��F���J��n��w�i�N�o[/���8�����&� �q,���K\r5<���Gݢʥ����*T����\0/�<�|{9e�.���L�y-ؙ���\r\"ȳ.��Q�j�[o��OB�g��&f)��e�+/�4�\\�Q�j�����Ѱ�~wh�c�8���ڤF�gT�ճ�G�[�M\')��?J�UDR)6v[�\"�3���$n��=�J��K�\'�D��q1�8��򄩴��7�(��U����ueL�����t�v2ҤT�K�[o���|���\0\0\0\0\0���\0/�!3ڕ�\Z˘� �.����s.b������U�~T��22T��<�)�������qv�s\'��\ZPH��GzjY��|�F�2�����?jj|�\0໩\nLK�c���A_.(\Z����J �������Lj��Ȫ\Zy��\"�}����ݽ��ε�Ճe�S5:�$�n�\Z���[�� δ��\"�d����F��(��(Y��\ZQvL����GM���y!z\'G�ǾƷu(���%;<\0\0\0\0\0?�յ������������n�n�\n����m���3\"\"\"=�ؼ����\'�x��8x�-��a�����ES������l13K� �Yx%���rJ��rR�Y�5B$�E�=4k_��ć�&��N\Z_�����k���H��Q;wdW)%�/y}\'��)5���i�(���[���xr�I�W�+�]}f,�\n��^G��,s������J\'8ӫ��zLKZ�%l����$�Y�(�:���]��6��\0�㴒�Mʮ�%y�2=�ޟ�$��{�;�SؔI-��m�z�Ѹ�U��)h�c���,X�ۭ�ѹ���›C;ccg)�-TZS��BV�^S2%l��@ro�������W8&اi��;��6�{{��IY�\\J6ڒ\"��\"J�|��w\"-�)�`t��J��K�q���:�}�7�4��QoӕI��4��{u���H�n��0B��a�G�\'�w~�x�-���5�:���������@\0\0\0\0|�(�\\����-e�k$ c�\' 4�W\"�+H�Sw��:��%�25�Ȉ׶ܜ�>E��{�殸�g]hѣ\"3i�_0���ME�K�[�EmFI� �tҦe�Ϩ�W�ۧڥ�Z�%.���/�k0���c�U��\\�J��r [GKUkF�f�������J[�D�=��(��l\'�\0\0\0\0\0\0= ����1Wή1�n\ZݪLV��,���ګ��V0��^�`q-O�52df��Jy|�e9\r���O*�����d=�\09���.s�\Z�\0�&�V�� ��[u;� ۺK�_Q(���d^����x��p���:��L5���\\+�幞�Y�{�C����ۧ��@\0\0\0\0\0\0@��R��:�X��R���{�f鷺z��\Z���{����7�G�x\0\re��K��)�Z�4.=���b�����Wf�yi=��l�������>��L��p��\0pt=����UrG���\'�����z�R/��J�\0\0\0\0\0\0\"C�?\ZQ�����S��(���m�]q�6Hܷ=��[�zy��%�O�\'�`1�@�BWaA�1#h�C�(��9��?M��Q�H��\"3-������c�ѷ= D�ZW��lה�m�L�IS�w�.��оʈ�2� ��v�\0\0\0\0\0\0u�hJ8��=�U�Ch<�^;����/�F ��鱴�zm�I\"�\0\0���޻���\0c�d5C�ήҦ�5l��֋��-N��m� R��~�w�B���߀\0\0\0\0\0\0��׎JO��\ZO;�\'�0�g ���ynwd��.������\0\0\0�T��^G��\0]�\0?/.�2\0\0\0\0\0\0\0`T��V�*�h�:��mL�܌�������\0\0\0\0\0\0\0\0\0\0\0\0��',4,1,'','','',''),(8,3,0,'75859b10a3a57734','cde8bd4c269d017826b5c163d04134ae','2017-09-07 08:58:34','2017-09-07 08:58:34','','','Profile photos','person-175.jpg','image/jpeg',80,80,2697,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0P\0P\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ��\01\0\0\0\0\0\0\0\0 !1\n\"QqA#���3���\0\0\0?\0��M5Aq\0�����4�M5�ݸt���=��X�\"��™!D�p< ��_x��r���Y������C�������ê�T,Q�rd�其aɖ��+z�4��d2���:AY1.�Z�F�`H��k7>��C�b���M���r�I��U*UXz�n���h6F�CŰjR6g\Z�� �6@�IM4�\nP�)�\'�� ����c-�^j����e�[��JE�t\0���l�A�5��*���ga\'��2��א�\rjX��OR_���]�d�s�8��$+�\' ۬�L%h��Au��(VH����VW&8\'�zr�� \na��p��p~��o�\0\">�?�:�;�pMT.�cר%\'g���>�xk��x���3���Ԫ*��j*sr�R�s&vm��a\r��00��n];�_�o��ow�[sŕ�s\'_��X��cՙ�7?�D����}� ��ݦ�k���/��d�\\7v�۸n�0U�X��Ȭ���RU#57%9L%0 D@u�o\'l9��5�����Rs�1�Y2�3T<$oKD��~�.`W�z�$���_�\'@�ꑄ�k\Zܐ�3��x���,�3�1�fWdaq�*�u�Zc ���W,,��~�V\"N[.O=��Pt��*���Ed��]D7@�˶G��ѱ�Bfc\n��uʹ�UV�쁍E��\"t��Z�g�)�\nj�r�ш�N`���M�Q������6�i��)K��x�øY�%t��SL���W�?�w_\n�!R�; )��ٴhz�IؼR�@\n�=��M5�[�����n?ܣ�x�©1b�~cE e\n�>�@.�,S��o ��=��t٫t��r�������� ͎������ �r�$eB�t�6���*���$�q�:+��$����.�&�7\")A���f�]���KiyF�W�n6�/��uK�D<�}�ӞBu�ah����+#Q��t��72���D*�Vm59��E�S�N�C�V`)���;\n�V�V�e]�@ŠFѰ�ɢ�:9�dȃf�QM�!JB\0���j���w�-�ۈ��oŷr�U�$p�[$3�q�m�1Sp��(,�� �ʒΘ$�����#�ۻ��@�=�t����d젆Q�VO���X�7���>�;\rD�ȕ����0uI�{,�IW���J5���� �pe9L_��!���۸�~{~uϐ���?��\0\Z��Bk�WY��t��u ]�8�w��h�.�6kk��HEUj2��dN%U�0�\rUMT�j�+LH `w���*\n\"�\\��0����g \rѼ|dLTst�G��0h�M0b��3f�$�5l�H �i&B��馿!t��|�z�@�U��Me`m��{4*�%���V.m��*(��C�1�Zf\r3;��Æ�U��sن��\"���-�.�9�J>tL~��H�,���$�~��v��f��UFYVEq�E�˒S.:t�7�Vg�5�u;��Ys=�YFZ�Rk��}�����OJ��\Z�m��i��v2��r�VӍB�l[�rd��D�;k�)^�2-gQ~ESA�j�ƴS��<���0\0\0\0\0\0\0\0v�Sę��>�\'9��خ� �豆�8$��򌩵�œ�U��Y)�O�&DH]6B�&�KMeN�D�SL�8�d��#z��9�۔�g,�ܮ��G w�7GggU)F�]Es�i-��DRd�{-��e�|jw�K P���䗴[�<�PU�&�Jw���iU4�L��\Zno5i)i���ud�:d.-�n��=9�tр��Z!�kj�/�Z��rL�׹S��d�]�Wg�\Z��M(R���%�#����F�� ʧJ޵ZT}��$�������|����7����u�ç(\'I�]_���/�Yk1�S���Q��\"�x��f�\\r���Z\\kp�qҾ.oU�u������Z�n���)����X�Fd��5Q1e�c�@���J�{LX(�GԽ��3\\�[���a,|�M.�kQ�&_�,���R�\ZK��6>i#2Y*h@Wu+����-.���q�\'c)�Z�]X��\'f�I�Q��0�J�<�H�j�RCZ$1��.�˟��4�?¿ �գ�\"t]�N��&z}Ȩ�4���\0*����AMq�%��%[1�PT�ɩ��Æ3�R��R��l14z�Y\"�d��G�N���� Jː���m\'ʢS-BU5!j/�Iܭ���1�/FQ\\�^��.h�]P0��ohϐY�)�^\Z)�T��U�GQ����,fJ��Gِ\0\0\0\0\0�q���d-�B\\*�u���D�Z��nǮ~�4��$�̏2�.��-m�ݯ�m(ָ����m����WW���IoԺ������w2I��HX%�Lza�֞X��Z6�;�<��$���%jhvs2R�f���:>-DdJZ��)%��\0#[ڋѓN��Ve��M��|����<�qE������K>Yk�[\ZYN ��\"ZyTGV\ZĢ5MGR�OO��&7��� �;_��Ou��[7���Q��?�0�Rv�Vg#۔��+���E�1��vl�\0\0\0\0\0����?�Ɯ^��0�R�lw���έ��lFݒRב�̋�rK�3=�2###�h��,��I��7_�Cku齒笩Y��;���a{`\0\0�\'uXh����Y\'q�E��Ix��}�RÓI_/_#�qG�OO��%�����3.\'�\\�m������>�t��2�7 ���36(�FffJw_C4�4yZ*\0\0\0\0\0����\\�1.�۷��C���6����yC��2t2$��3�K�������\\��.�K�\r^\'�G���E���);S/�ҟ����E��s,��f/qB�5�q�C\"Ǯm̕gx�/���6l�5|*��Io�$����}X\0]�Uz�a�� ��jv�C0�)�8�.�op���cև6���\'R (W�����J�\"�Sf>���UKS���*T�Φ�=72��?���[ َ��\0�����u��&|�5�\"�-Uh� ǭ\nV#�9Mԗ��;�H�$i5\"�̢�:��g&�\0\0\0\0\0���ك����F��&7��<!�E4��/�R���5U*���\n*:�$�N�����$\ZҎ�l�����k/�� ��)=��9�&Q��eؽ��\r>���1\Z�T|�J�m��F���J��n��w�i�N�o[/���8�����&� �q,���K\r5<���Gݢʥ����*T����\0/�<�|{9e�.���L�y-ؙ���\r\"ȳ.��Q�j�[o��OB�g��&f)��e�+/�4�\\�Q�j�����Ѱ�~wh�c�8���ڤF�gT�ճ�G�[�M\')��?J�UDR)6v[�\"�3���$n��=�J��K�\'�D��q1�8��򄩴��7�(��U����ueL�����t�v2ҤT�K�[o���|���\0\0\0\0\0���\0/�!3ڕ�\Z˘� �.����s.b������U�~T��22T��<�)�������qv�s\'��\ZPH��GzjY��|�F�2�����?jj|�\0໩\nLK�c���A_.(\Z����J �������Lj��Ȫ\Zy��\"�}����ݽ��ε�Ճe�S5:�$�n�\Z���[�� δ��\"�d����F��(��(Y��\ZQvL����GM���y!z\'G�ǾƷu(���%;<\0\0\0\0\0?�յ������������n�n�\n����m���3\"\"\"=�ؼ����\'�x��8x�-��a�����ES������l13K� �Yx%���rJ��rR�Y�5B$�E�=4k_��ć�&��N\Z_�����k���H��Q;wdW)%�/y}\'��)5���i�(���[���xr�I�W�+�]}f,�\n��^G��,s������J\'8ӫ��zLKZ�%l����$�Y�(�:���]��6��\0�㴒�Mʮ�%y�2=�ޟ�$��{�;�SؔI-��m�z�Ѹ�U��)h�c���,X�ۭ�ѹ���›C;ccg)�-TZS��BV�^S2%l��@ro�������W8&اi��;��6�{{��IY�\\J6ڒ\"��\"J�|��w\"-�)�`t��J��K�q���:�}�7�4��QoӕI��4��{u���H�n��0B��a�G�\'�w~�x�-���5�:���������@\0\0\0\0|�(�\\����-e�k$ c�\' 4�W\"�+H�Sw��:��%�25�Ȉ׶ܜ�>E��{�殸�g]hѣ\"3i�_0���ME�K�[�EmFI� �tҦe�Ϩ�W�ۧڥ�Z�%.���/�k0���c�U��\\�J��r [GKUkF�f�������J[�D�=��(��l\'�\0\0\0\0\0\0= ����1Wή1�n\ZݪLV��,���ګ��V0��^�`q-O�52df��Jy|�e9\r���O*�����d=�\09���.s�\Z�\0�&�V�� ��[u;� ۺK�_Q(���d^����x��p���:��L5���\\+�幞�Y�{�C����ۧ��@\0\0\0\0\0\0@��R��:�X��R���{�f鷺z��\Z���{����7�G�x\0\re��K��)�Z�4.=���b�����Wf�yi=��l�������>��L��p��\0pt=����UrG���\'�����z�R/��J�\0\0\0\0\0\0\"C�?\ZQ�����S��(���m�]q�6Hܷ=��[�zy��%�O�\'�`1�@�BWaA�1#h�C�(��9��?M��Q�H��\"3-������c�ѷ= D�ZW��lה�m�L�IS�w�.��оʈ�2� ��v�\0\0\0\0\0\0u�hJ8��=�U�Ch<�^;����/�F ��鱴�zm�I\"�\0\0���޻���\0c�d5C�ήҦ�5l��֋��-N��m� R��~�w�B���߀\0\0\0\0\0\0��׎JO��\ZO;�\'�0�g ���ynwd��.������\0\0\0�T��^G��\0]�\0?/.�2\0\0\0\0\0\0\0`T��V�*�h�:��mL�܌�������\0\0\0\0\0\0\0\0\0\0\0\0��',4,1,'','','',''),(11,4,0,'75859b10a64380c7','97611ba91637997e24ea7ad58fb9cb2e','2017-09-07 08:59:16','2017-09-07 08:59:16','','','Profile photos','person-175.jpg','image/jpeg',80,80,2697,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0P\0P\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ��\01\0\0\0\0\0\0\0\0 !1\n\"QqA#���3���\0\0\0?\0��M5Aq\0�����4�M5�ݸt���=��X�\"��™!D�p< ��_x��r���Y������C�������ê�T,Q�rd�其aɖ��+z�4��d2���:AY1.�Z�F�`H��k7>��C�b���M���r�I��U*UXz�n���h6F�CŰjR6g\Z�� �6@�IM4�\nP�)�\'�� ����c-�^j����e�[��JE�t\0���l�A�5��*���ga\'��2��א�\rjX��OR_���]�d�s�8��$+�\' ۬�L%h��Au��(VH����VW&8\'�zr�� \na��p��p~��o�\0\">�?�:�;�pMT.�cר%\'g���>�xk��x���3���Ԫ*��j*sr�R�s&vm��a\r��00��n];�_�o��ow�[sŕ�s\'_��X��cՙ�7?�D����}� ��ݦ�k���/��d�\\7v�۸n�0U�X��Ȭ���RU#57%9L%0 D@u�o\'l9��5�����Rs�1�Y2�3T<$oKD��~�.`W�z�$���_�\'@�ꑄ�k\Zܐ�3��x���,�3�1�fWdaq�*�u�Zc ���W,,��~�V\"N[.O=��Pt��*���Ed��]D7@�˶G��ѱ�Bfc\n��uʹ�UV�쁍E��\"t��Z�g�)�\nj�r�ш�N`���M�Q������6�i��)K��x�øY�%t��SL���W�?�w_\n�!R�; )��ٴhz�IؼR�@\n�=��M5�[�����n?ܣ�x�©1b�~cE e\n�>�@.�,S��o ��=��t٫t��r�������� ͎������ �r�$eB�t�6���*���$�q�:+��$����.�&�7\")A���f�]���KiyF�W�n6�/��uK�D<�}�ӞBu�ah����+#Q��t��72���D*�Vm59��E�S�N�C�V`)���;\n�V�V�e]�@ŠFѰ�ɢ�:9�dȃf�QM�!JB\0���j���w�-�ۈ��oŷr�U�$p�[$3�q�m�1Sp��(,�� �ʒΘ$�����#�ۻ��@�=�t����d젆Q�VO���X�7���>�;\rD�ȕ����0uI�{,�IW���J5���� �pe9L_��!���۸�~{~uϐ���?��\0\Z��Bk�WY��t��u ]�8�w��h�.�6kk��HEUj2��dN%U�0�\rUMT�j�+LH `w���*\n\"�\\��0����g \rѼ|dLTst�G��0h�M0b��3f�$�5l�H �i&B��馿!t��|�z�@�U��Me`m��{4*�%���V.m��*(��C�1�Zf\r3;��Æ�U��sن��\"���-�.�9�J>tL~��H�,���$�~��v��f��UFYVEq�E�˒S.:t�7�Vg�5�u;��Ys=�YFZ�Rk��}�����OJ��\Z�m��i��v2��r�VӍB�l[�rd��D�;k�)^�2-gQ~ESA�j�ƴS��<���0\0\0\0\0\0\0\0v�Sę��>�\'9��خ� �豆�8$��򌩵�œ�U��Y)�O�&DH]6B�&�KMeN�D�SL�8�d��#z��9�۔�g,�ܮ��G w�7GggU)F�]Es�i-��DRd�{-��e�|jw�K P���䗴[�<�PU�&�Jw���iU4�L��\Zno5i)i���ud�:d.-�n��=9�tр��Z!�kj�/�Z��rL�׹S��d�]�Wg�\Z��M(R���%�#����F�� ʧJ޵ZT}��$�������|����7����u�ç(\'I�]_���/�Yk1�S���Q��\"�x��f�\\r���Z\\kp�qҾ.oU�u������Z�n���)����X�Fd��5Q1e�c�@���J�{LX(�GԽ��3\\�[���a,|�M.�kQ�&_�,���R�\ZK��6>i#2Y*h@Wu+����-.���q�\'c)�Z�]X��\'f�I�Q��0�J�<�H�j�RCZ$1��.�˟��4�?¿ �գ�\"t]�N��&z}Ȩ�4���\0*����AMq�%��%[1�PT�ɩ��Æ3�R��R��l14z�Y\"�d��G�N���� Jː���m\'ʢS-BU5!j/�Iܭ���1�/FQ\\�^��.h�]P0��ohϐY�)�^\Z)�T��U�GQ����,fJ��Gِ\0\0\0\0\0�q���d-�B\\*�u���D�Z��nǮ~�4��$�̏2�.��-m�ݯ�m(ָ����m����WW���IoԺ������w2I��HX%�Lza�֞X��Z6�;�<��$���%jhvs2R�f���:>-DdJZ��)%��\0#[ڋѓN��Ve��M��|����<�qE������K>Yk�[\ZYN ��\"ZyTGV\ZĢ5MGR�OO��&7��� �;_��Ou��[7���Q��?�0�Rv�Vg#۔��+���E�1��vl�\0\0\0\0\0����?�Ɯ^��0�R�lw���έ��lFݒRב�̋�rK�3=�2###�h��,��I��7_�Cku齒笩Y��;���a{`\0\0�\'uXh����Y\'q�E��Ix��}�RÓI_/_#�qG�OO��%�����3.\'�\\�m������>�t��2�7 ���36(�FffJw_C4�4yZ*\0\0\0\0\0����\\�1.�۷��C���6����yC��2t2$��3�K�������\\��.�K�\r^\'�G���E���);S/�ҟ����E��s,��f/qB�5�q�C\"Ǯm̕gx�/���6l�5|*��Io�$����}X\0]�Uz�a�� ��jv�C0�)�8�.�op���cև6���\'R (W�����J�\"�Sf>���UKS���*T�Φ�=72��?���[ َ��\0�����u��&|�5�\"�-Uh� ǭ\nV#�9Mԗ��;�H�$i5\"�̢�:��g&�\0\0\0\0\0���ك����F��&7��<!�E4��/�R���5U*���\n*:�$�N�����$\ZҎ�l�����k/�� ��)=��9�&Q��eؽ��\r>���1\Z�T|�J�m��F���J��n��w�i�N�o[/���8�����&� �q,���K\r5<���Gݢʥ����*T����\0/�<�|{9e�.���L�y-ؙ���\r\"ȳ.��Q�j�[o��OB�g��&f)��e�+/�4�\\�Q�j�����Ѱ�~wh�c�8���ڤF�gT�ճ�G�[�M\')��?J�UDR)6v[�\"�3���$n��=�J��K�\'�D��q1�8��򄩴��7�(��U����ueL�����t�v2ҤT�K�[o���|���\0\0\0\0\0���\0/�!3ڕ�\Z˘� �.����s.b������U�~T��22T��<�)�������qv�s\'��\ZPH��GzjY��|�F�2�����?jj|�\0໩\nLK�c���A_.(\Z����J �������Lj��Ȫ\Zy��\"�}����ݽ��ε�Ճe�S5:�$�n�\Z���[�� δ��\"�d����F��(��(Y��\ZQvL����GM���y!z\'G�ǾƷu(���%;<\0\0\0\0\0?�յ������������n�n�\n����m���3\"\"\"=�ؼ����\'�x��8x�-��a�����ES������l13K� �Yx%���rJ��rR�Y�5B$�E�=4k_��ć�&��N\Z_�����k���H��Q;wdW)%�/y}\'��)5���i�(���[���xr�I�W�+�]}f,�\n��^G��,s������J\'8ӫ��zLKZ�%l����$�Y�(�:���]��6��\0�㴒�Mʮ�%y�2=�ޟ�$��{�;�SؔI-��m�z�Ѹ�U��)h�c���,X�ۭ�ѹ���›C;ccg)�-TZS��BV�^S2%l��@ro�������W8&اi��;��6�{{��IY�\\J6ڒ\"��\"J�|��w\"-�)�`t��J��K�q���:�}�7�4��QoӕI��4��{u���H�n��0B��a�G�\'�w~�x�-���5�:���������@\0\0\0\0|�(�\\����-e�k$ c�\' 4�W\"�+H�Sw��:��%�25�Ȉ׶ܜ�>E��{�殸�g]hѣ\"3i�_0���ME�K�[�EmFI� �tҦe�Ϩ�W�ۧڥ�Z�%.���/�k0���c�U��\\�J��r [GKUkF�f�������J[�D�=��(��l\'�\0\0\0\0\0\0= ����1Wή1�n\ZݪLV��,���ګ��V0��^�`q-O�52df��Jy|�e9\r���O*�����d=�\09���.s�\Z�\0�&�V�� ��[u;� ۺK�_Q(���d^����x��p���:��L5���\\+�幞�Y�{�C����ۧ��@\0\0\0\0\0\0@��R��:�X��R���{�f鷺z��\Z���{����7�G�x\0\re��K��)�Z�4.=���b�����Wf�yi=��l�������>��L��p��\0pt=����UrG���\'�����z�R/��J�\0\0\0\0\0\0\"C�?\ZQ�����S��(���m�]q�6Hܷ=��[�zy��%�O�\'�`1�@�BWaA�1#h�C�(��9��?M��Q�H��\"3-������c�ѷ= D�ZW��lה�m�L�IS�w�.��оʈ�2� ��v�\0\0\0\0\0\0u�hJ8��=�U�Ch<�^;����/�F ��鱴�zm�I\"�\0\0���޻���\0c�d5C�ήҦ�5l��֋��-N��m� R��~�w�B���߀\0\0\0\0\0\0��׎JO��\ZO;�\'�0�g ���ynwd��.������\0\0\0�T��^G��\0]�\0?/.�2\0\0\0\0\0\0\0`T��V�*�h�:��mL�܌�������\0\0\0\0\0\0\0\0\0\0\0\0��',4,1,'','','',''),(14,5,0,'75859b10a89b26b7','1e6e86cff989b84650c44bf8f408250a','2017-09-07 08:59:53','2017-09-07 08:59:53','','','Profile photos','person-175.jpg','image/jpeg',80,80,2697,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0P\0P\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ��\01\0\0\0\0\0\0\0\0 !1\n\"QqA#���3���\0\0\0?\0��M5Aq\0�����4�M5�ݸt���=��X�\"��™!D�p< ��_x��r���Y������C�������ê�T,Q�rd�其aɖ��+z�4��d2���:AY1.�Z�F�`H��k7>��C�b���M���r�I��U*UXz�n���h6F�CŰjR6g\Z�� �6@�IM4�\nP�)�\'�� ����c-�^j����e�[��JE�t\0���l�A�5��*���ga\'��2��א�\rjX��OR_���]�d�s�8��$+�\' ۬�L%h��Au��(VH����VW&8\'�zr�� \na��p��p~��o�\0\">�?�:�;�pMT.�cר%\'g���>�xk��x���3���Ԫ*��j*sr�R�s&vm��a\r��00��n];�_�o��ow�[sŕ�s\'_��X��cՙ�7?�D����}� ��ݦ�k���/��d�\\7v�۸n�0U�X��Ȭ���RU#57%9L%0 D@u�o\'l9��5�����Rs�1�Y2�3T<$oKD��~�.`W�z�$���_�\'@�ꑄ�k\Zܐ�3��x���,�3�1�fWdaq�*�u�Zc ���W,,��~�V\"N[.O=��Pt��*���Ed��]D7@�˶G��ѱ�Bfc\n��uʹ�UV�쁍E��\"t��Z�g�)�\nj�r�ш�N`���M�Q������6�i��)K��x�øY�%t��SL���W�?�w_\n�!R�; )��ٴhz�IؼR�@\n�=��M5�[�����n?ܣ�x�©1b�~cE e\n�>�@.�,S��o ��=��t٫t��r�������� ͎������ �r�$eB�t�6���*���$�q�:+��$����.�&�7\")A���f�]���KiyF�W�n6�/��uK�D<�}�ӞBu�ah����+#Q��t��72���D*�Vm59��E�S�N�C�V`)���;\n�V�V�e]�@ŠFѰ�ɢ�:9�dȃf�QM�!JB\0���j���w�-�ۈ��oŷr�U�$p�[$3�q�m�1Sp��(,�� �ʒΘ$�����#�ۻ��@�=�t����d젆Q�VO���X�7���>�;\rD�ȕ����0uI�{,�IW���J5���� �pe9L_��!���۸�~{~uϐ���?��\0\Z��Bk�WY��t��u ]�8�w��h�.�6kk��HEUj2��dN%U�0�\rUMT�j�+LH `w���*\n\"�\\��0����g \rѼ|dLTst�G��0h�M0b��3f�$�5l�H �i&B��馿!t��|�z�@�U��Me`m��{4*�%���V.m��*(��C�1�Zf\r3;��Æ�U��sن��\"���-�.�9�J>tL~��H�,���$�~��v��f��UFYVEq�E�˒S.:t�7�Vg�5�u;��Ys=�YFZ�Rk��}�����OJ��\Z�m��i��v2��r�VӍB�l[�rd��D�;k�)^�2-gQ~ESA�j�ƴS��<���0\0\0\0\0\0\0\0v�Sę��>�\'9��خ� �豆�8$��򌩵�œ�U��Y)�O�&DH]6B�&�KMeN�D�SL�8�d��#z��9�۔�g,�ܮ��G w�7GggU)F�]Es�i-��DRd�{-��e�|jw�K P���䗴[�<�PU�&�Jw���iU4�L��\Zno5i)i���ud�:d.-�n��=9�tр��Z!�kj�/�Z��rL�׹S��d�]�Wg�\Z��M(R���%�#����F�� ʧJ޵ZT}��$�������|����7����u�ç(\'I�]_���/�Yk1�S���Q��\"�x��f�\\r���Z\\kp�qҾ.oU�u������Z�n���)����X�Fd��5Q1e�c�@���J�{LX(�GԽ��3\\�[���a,|�M.�kQ�&_�,���R�\ZK��6>i#2Y*h@Wu+����-.���q�\'c)�Z�]X��\'f�I�Q��0�J�<�H�j�RCZ$1��.�˟��4�?¿ �գ�\"t]�N��&z}Ȩ�4���\0*����AMq�%��%[1�PT�ɩ��Æ3�R��R��l14z�Y\"�d��G�N���� Jː���m\'ʢS-BU5!j/�Iܭ���1�/FQ\\�^��.h�]P0��ohϐY�)�^\Z)�T��U�GQ����,fJ��Gِ\0\0\0\0\0�q���d-�B\\*�u���D�Z��nǮ~�4��$�̏2�.��-m�ݯ�m(ָ����m����WW���IoԺ������w2I��HX%�Lza�֞X��Z6�;�<��$���%jhvs2R�f���:>-DdJZ��)%��\0#[ڋѓN��Ve��M��|����<�qE������K>Yk�[\ZYN ��\"ZyTGV\ZĢ5MGR�OO��&7��� �;_��Ou��[7���Q��?�0�Rv�Vg#۔��+���E�1��vl�\0\0\0\0\0����?�Ɯ^��0�R�lw���έ��lFݒRב�̋�rK�3=�2###�h��,��I��7_�Cku齒笩Y��;���a{`\0\0�\'uXh����Y\'q�E��Ix��}�RÓI_/_#�qG�OO��%�����3.\'�\\�m������>�t��2�7 ���36(�FffJw_C4�4yZ*\0\0\0\0\0����\\�1.�۷��C���6����yC��2t2$��3�K�������\\��.�K�\r^\'�G���E���);S/�ҟ����E��s,��f/qB�5�q�C\"Ǯm̕gx�/���6l�5|*��Io�$����}X\0]�Uz�a�� ��jv�C0�)�8�.�op���cև6���\'R (W�����J�\"�Sf>���UKS���*T�Φ�=72��?���[ َ��\0�����u��&|�5�\"�-Uh� ǭ\nV#�9Mԗ��;�H�$i5\"�̢�:��g&�\0\0\0\0\0���ك����F��&7��<!�E4��/�R���5U*���\n*:�$�N�����$\ZҎ�l�����k/�� ��)=��9�&Q��eؽ��\r>���1\Z�T|�J�m��F���J��n��w�i�N�o[/���8�����&� �q,���K\r5<���Gݢʥ����*T����\0/�<�|{9e�.���L�y-ؙ���\r\"ȳ.��Q�j�[o��OB�g��&f)��e�+/�4�\\�Q�j�����Ѱ�~wh�c�8���ڤF�gT�ճ�G�[�M\')��?J�UDR)6v[�\"�3���$n��=�J��K�\'�D��q1�8��򄩴��7�(��U����ueL�����t�v2ҤT�K�[o���|���\0\0\0\0\0���\0/�!3ڕ�\Z˘� �.����s.b������U�~T��22T��<�)�������qv�s\'��\ZPH��GzjY��|�F�2�����?jj|�\0໩\nLK�c���A_.(\Z����J �������Lj��Ȫ\Zy��\"�}����ݽ��ε�Ճe�S5:�$�n�\Z���[�� δ��\"�d����F��(��(Y��\ZQvL����GM���y!z\'G�ǾƷu(���%;<\0\0\0\0\0?�յ������������n�n�\n����m���3\"\"\"=�ؼ����\'�x��8x�-��a�����ES������l13K� �Yx%���rJ��rR�Y�5B$�E�=4k_��ć�&��N\Z_�����k���H��Q;wdW)%�/y}\'��)5���i�(���[���xr�I�W�+�]}f,�\n��^G��,s������J\'8ӫ��zLKZ�%l����$�Y�(�:���]��6��\0�㴒�Mʮ�%y�2=�ޟ�$��{�;�SؔI-��m�z�Ѹ�U��)h�c���,X�ۭ�ѹ���›C;ccg)�-TZS��BV�^S2%l��@ro�������W8&اi��;��6�{{��IY�\\J6ڒ\"��\"J�|��w\"-�)�`t��J��K�q���:�}�7�4��QoӕI��4��{u���H�n��0B��a�G�\'�w~�x�-���5�:���������@\0\0\0\0|�(�\\����-e�k$ c�\' 4�W\"�+H�Sw��:��%�25�Ȉ׶ܜ�>E��{�殸�g]hѣ\"3i�_0���ME�K�[�EmFI� �tҦe�Ϩ�W�ۧڥ�Z�%.���/�k0���c�U��\\�J��r [GKUkF�f�������J[�D�=��(��l\'�\0\0\0\0\0\0= ����1Wή1�n\ZݪLV��,���ګ��V0��^�`q-O�52df��Jy|�e9\r���O*�����d=�\09���.s�\Z�\0�&�V�� ��[u;� ۺK�_Q(���d^����x��p���:��L5���\\+�幞�Y�{�C����ۧ��@\0\0\0\0\0\0@��R��:�X��R���{�f鷺z��\Z���{����7�G�x\0\re��K��)�Z�4.=���b�����Wf�yi=��l�������>��L��p��\0pt=����UrG���\'�����z�R/��J�\0\0\0\0\0\0\"C�?\ZQ�����S��(���m�]q�6Hܷ=��[�zy��%�O�\'�`1�@�BWaA�1#h�C�(��9��?M��Q�H��\"3-������c�ѷ= D�ZW��lה�m�L�IS�w�.��оʈ�2� ��v�\0\0\0\0\0\0u�hJ8��=�U�Ch<�^;����/�F ��鱴�zm�I\"�\0\0���޻���\0c�d5C�ήҦ�5l��֋��-N��m� R��~�w�B���߀\0\0\0\0\0\0��׎JO��\ZO;�\'�0�g ���ynwd��.������\0\0\0�T��^G��\0]�\0?/.�2\0\0\0\0\0\0\0`T��V�*�h�:��mL�܌�������\0\0\0\0\0\0\0\0\0\0\0\0��',4,1,'','','',''),(17,6,0,'75859b10ab07f500','240eef737fb1a7e5d0bf2425f9f4030e','2017-09-07 09:00:32','2017-09-07 09:00:32','','','Profile photos','person-175.jpg','image/jpeg',80,80,2697,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0P\0P\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ��\01\0\0\0\0\0\0\0\0 !1\n\"QqA#���3���\0\0\0?\0��M5Aq\0�����4�M5�ݸt���=��X�\"��™!D�p< ��_x��r���Y������C�������ê�T,Q�rd�其aɖ��+z�4��d2���:AY1.�Z�F�`H��k7>��C�b���M���r�I��U*UXz�n���h6F�CŰjR6g\Z�� �6@�IM4�\nP�)�\'�� ����c-�^j����e�[��JE�t\0���l�A�5��*���ga\'��2��א�\rjX��OR_���]�d�s�8��$+�\' ۬�L%h��Au��(VH����VW&8\'�zr�� \na��p��p~��o�\0\">�?�:�;�pMT.�cר%\'g���>�xk��x���3���Ԫ*��j*sr�R�s&vm��a\r��00��n];�_�o��ow�[sŕ�s\'_��X��cՙ�7?�D����}� ��ݦ�k���/��d�\\7v�۸n�0U�X��Ȭ���RU#57%9L%0 D@u�o\'l9��5�����Rs�1�Y2�3T<$oKD��~�.`W�z�$���_�\'@�ꑄ�k\Zܐ�3��x���,�3�1�fWdaq�*�u�Zc ���W,,��~�V\"N[.O=��Pt��*���Ed��]D7@�˶G��ѱ�Bfc\n��uʹ�UV�쁍E��\"t��Z�g�)�\nj�r�ш�N`���M�Q������6�i��)K��x�øY�%t��SL���W�?�w_\n�!R�; )��ٴhz�IؼR�@\n�=��M5�[�����n?ܣ�x�©1b�~cE e\n�>�@.�,S��o ��=��t٫t��r�������� ͎������ �r�$eB�t�6���*���$�q�:+��$����.�&�7\")A���f�]���KiyF�W�n6�/��uK�D<�}�ӞBu�ah����+#Q��t��72���D*�Vm59��E�S�N�C�V`)���;\n�V�V�e]�@ŠFѰ�ɢ�:9�dȃf�QM�!JB\0���j���w�-�ۈ��oŷr�U�$p�[$3�q�m�1Sp��(,�� �ʒΘ$�����#�ۻ��@�=�t����d젆Q�VO���X�7���>�;\rD�ȕ����0uI�{,�IW���J5���� �pe9L_��!���۸�~{~uϐ���?��\0\Z��Bk�WY��t��u ]�8�w��h�.�6kk��HEUj2��dN%U�0�\rUMT�j�+LH `w���*\n\"�\\��0����g \rѼ|dLTst�G��0h�M0b��3f�$�5l�H �i&B��馿!t��|�z�@�U��Me`m��{4*�%���V.m��*(��C�1�Zf\r3;��Æ�U��sن��\"���-�.�9�J>tL~��H�,���$�~��v��f��UFYVEq�E�˒S.:t�7�Vg�5�u;��Ys=�YFZ�Rk��}����j��ʮHnl�Ifh���M6&\";M�DD�]��¿SR��c�h�B��{��t��ƤG��V�Mʽ4$�&2��\"����%���{̈}9$����489hۆ�� @�e��崭�\Z��ط<��m�(v&�Ne{�ȵE�qQMI��\Z�uO�h���D<�\0\0\0\0\0\0\0qۍGfn\Z��b��R���9~�2w���o\nstMT�x=d��>��H��l�MT���:�!M2��a��L��c��/�Ri��Cr���������T�\Z�uΥ$�F�IN��춆�q�5��S�,-B��c�^�op�}AW�8�Y)�c?��T��2Fi��դkI��$b�Փ�鐸�A��\\<���F��h�ŭ�ܿIk�)�3^�N�ٓ�wu]��k�U4�J���8�W�*�F�7�`^U:V��ң�I%�̷?��|����C{�Oh�[�:r�qğ��� ����0\\���\Ze0\\�ޅ\Z��.����RvZ��NOI\n#�����O v���-ik�F�����o�;�E�I����ձ��5�\Z�Rv!,��\\4;����MyE�3��t�a9��B��:̌�[�X�T���h_\"��r4k��*�F\\��U:��M�z�\0�u#�\0�C�\0\0\0\0\0�>�f�r���Z\\kp�qҾ.oU�u������q-S�CJK��PSǬf�2JJ��G�D Ym���+>!҄�^�\n\'��/{} �W7��-K;�K���kI�� (�;T�F��\r��H̖J�\0��J�sj� K��\0��m���p֫WV\'�\"IٹjTlx�;ҤO,R��Ԑǖ� edK����:�8���<)5h�y Ó�w ��r*-�0�������Bf��J& u:fIV�r�:rjh.p�甴���9� M��H���>���듲pg�BҲ4:{-��RT�P�MHZ��Rw+|�)�D�qKєW2W��e����j�O{F|��aM)xh���ʴH��-�IF�3捩Gِ\0\0\0\0\0�q���d-�B\\*�u���D�Z��nǮ~�4��gfG�y�N��-m�ݯ�m(ָ����m����WW���IoԺ������w2I��HX%�Lza�֞X��Y��;�$�D�Q{}�54;9�)k3S���2%-|Ĕ����\0��E�ɧT|+2�B��B�H�U�y���������K>Yk�[\ZYN ��\"ZyTGV\ZĢ5MGR�OO��&7��� �;_��Ou��[7���O��?�0�Rv�Vg#۔��+���E�1�[ٲ\0\0\0\0\0��;X��\Zqz��qJ����2c:�#��vIK^Fk4�B/�X���﹑�E4�eh�M8�8(�:�\0s2ia���{���CT��\0XR�J��������dz�]���d��݉� � �,�1r�~��6���DdG��OB�g��&f)��e�+/�4�T�Q�j�����Ѱ�~w��c�8���ڤF�gT�ճ�G�[�M\')��?J�UDR)6v[�#E3���$n��=�J��K�\'�D��q1�8��򄭴��7�(��U����ueL�����t�v2ҤT�K�[o���\0>}FH\0\0\0\0\0B��\0��Lv�x(Ʋ�9�3O\"\no�H�P��QiJU�;G�\\/��e>����oQ�{hnW�^\0�S���8��{�\"Λ��JK\\�*��G��1)|��\'s6��@��M���o+@�:�euw;uY�*9���r�Ol4��YL��Բ3Q#�\"5�E}�q�SS��G�HRb]{~&�B\n�q@�wgv�Qg_��=�rcW6�EP�j\"؊��v�ׇv�{:׎�V\r��}L��dD[u��_^� ?!y֑p<[L�^�Z}�ӵ����k;[cJ.ɖ6���鲔��$/D��Y[�kwR��D���\0\0\0\0�.n���Nn��v\rv�sv�upVV6�;o̥����M���\'�x��8x�-��a�����ES������l13K� �Yx%���rJ��rR�Y�5B$�e�=4�_��ć�&��N\Z_�����k���H��Q;wdW/+�^&�����)5���i�(���-�Z�<9sN����.��j�M� �#�p�9��h���ԥ�i�ʼn�Q=&�U�O�Qn�Q�Ԕl�a��\\�.��\\�\0�㴒�Mʮ�%y�2=�ޟ�]Z��B˩�J$��\0-��F��X� R2�b���X�01�[�#s;=�\Z�\r&��QiOwM Z�<�dJ2�ڀ��#��o��pM�Nӷ�w��8m�2��i�$��d��m�$E��jD�����E��2���iC;�iwN1���C����59��\"�~��O]����O�[��^T�f�1��!����q�2yq��W���K�Q�ө���y����\0\0\0\0��U��K�r�X�2@��?bp�L�r+��d�057x������[S#Y���{m�̣4.��+�o5u�S8���F��M2����h�/m2^��*+j2L�L���3,�}D\0���F�>�-:�i)t���Y��.�Ϻ�f��bV���Z�:Z��`W%T���3�>I��>Fd���F�-$�j#;*O$��)R�])}����[��d�\0 z���~B�пgG 4�L��=c��&n��3κu�6��[�8�e��T�Ҕ�.GUF�(�G��$^J�ڑ�\r��ſ���q��خ��wZ���\r���n�������ÙL5>wv$Rb2{UB�?H ���LAF�Li%`���Tjѫ�Q��\0>�������\0\0\0\0��������SG �M%�B�I�y�[�뽊G?t/ǘ���P����4�% YT*���\">�a&}b��pij��a־x�[W�n�����b\' +�H�%���L��3Ȭ�NC+RW��\nb��L�+�`\0\0\0��!�MWp�᭭gk�&�4q��SGe:O�-]1�Iw�#27������7�Q��%!�T2�C����0Ҵ>�MY�V8�#ch�V(��vv������TN-�������~=I[��W�M5㿀�rn�u��e0�[�Ν���X�$��!D��B���;0z>S%&Fxʗ1+cRղ�GB���)�r�]/q Ïz ύ����9��U/%,��/S�rC��j(�\\�d��$D���eQ�ȵ��}B��j�+�n-�-��ܧem����3���뷐� \0�����q65�YRGX���:a:�\\�\'{V(�C�Ӫ���\Z����.�7p�����4�2��cZQz���_j6��{s}�A�Rrҋ������ӗx�^_է�$�R�#�N��+j}�\Z4hQ>�[����E�\0��� �\0\0\0\0��R�t�wؾ~�{�|�\0��0��� ��\"8\"M��/�j����9E��-�`អ\r-�[�,�&��oo��L��)&��\r1E���E)<���q�d�ᛨYE���p�i�G#�Z����/{�ۢ99�1��$%,֪q�H\"˨T�q���R����\0\09_Ʀ]u�1�\"@�Z��徕�M�ͿS#�F��k-��\'c�^�����bgYшk�Rw�_��$ؿ E� Ϛѹ���c/nA+����=�b/\n#܋a=@\0\0\0\0\0�_��\0���uq�+p��Rb��if�H�F�^ʱ�����j}٩�#55�S����)�l�\"yP���������!�\0ͮ/1s�p���q4����?�۩�4�^��_2���De�\"�?�k�͛��F�ԠGZa���uB�^w-�� B�G���:l_��zK�\0\0\0\0\0\0�AX�/�������,�zO���n�{��i���l��O���q?~������\0�]]Ľ�Ҟ�� �B���?�(��\\levo\'��߮�l�������}�ؙG82����{��䏯��O]�������������\0\0\0\0\0\0D��~4�\'���!���FQ��{sW\\D�͒7-�s���^�{y�m�����8��J�(?�$mh{Ev\'6����w⍪G/�Df[m�c��8�\0��ǿ�nZ@�Դ�o^ٯ(9��ܙ\Z��|�]����TG���fFC��\0\0\0\0\0\08s�|kBQś��ޭ*A�Z�����:3�N�ߦ��e鷡$�w\0\0z*R�z��������\Z���gW\r�S �\Z�U�kE���ks����Cÿ���h[�M��߀\0\0\0\0\0\0��׎JO��\ZO;�\'�0�g ���ynwd��OM� ���n\0\0\0 tQ*E�ב����ˡ �\0\0\0\0\0\0-hթJ�Z4N��[S=�#2�#��[}O�g�\0\0\0\0\0\0\0\0\0\0\0��',4,0,'','','',''),(20,3,7,'75859b10b87ebc39','18a7495723879503dac64b352e245508','2017-09-07 09:19:08','2017-09-07 09:19:08','','','Contact Photos','4b7db531ad1920a7cb8fb76aed46ddd9-4.jpg?ts=1504775575','image/jpeg',80,80,2703,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0P\0P\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ��\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#���3Sa����\0\0\0?\0��M5AQ\0��j�����ǯ<����_�T�@Z��i����9���׾�*��)��{ڥ����J�Y�[6h��e� �,u��$�1����t�KvD3%���g[I�_:kƵ�J�u��B��7��\'vX3i�Rj:�G���*�e�\0��a��M|�i������:{Lٞ�w,dRt� aK�B�f���� �5���Ô��5��b�%֡��Z�uZꅊqNL�����2Õ�oY↚}L�VB�\0���0���ւ7s\0�D�{I��N\n_�J;�)Tʮ>��)���UR�U���V�PlЏ����`�lD4S�M�8��\r�fѲ*H��i�P)CP���O 3�{�a��%y��V�)��yn��YiE�3�I��Vh����; 8�ݴʛG]��5�b~�=I~}��vݐr��(��C����/m��X�H�rN*ߎ��\\==Z�Q�ed���{��\\�����n��X�^¹Z���2�TƓ�e�%W\"���\"��wFVe�L�8$���@K�aM`9G�zv�i�e���s���^�q�Y���9���9(h��9�H��F�`�kd�)�����I$B��r�\n\"n5�����}.�� 9�l2�m&�\n�b����+$V�`\n�\0++���9W��0�h�q�q�������G�\0G��Z�~. ��׬c�����8�o\r��O��5�b61T\ZEW�%B�NnTJU2gfܤ��lu遅-�r�߲�}M�{�2۞,�[�:�\0^2�֫��A��DH.�a<��h_/���4�]W�R|��\'�ỴN��*�.���Ed������Q3�C��S\0�DYV�vÑ>~�X{��\'?���,5C�f�K�W�2�}ߝ$���+�O��0T�\'cX����X��l���f��q� 0�# �8�U(+�*�e �r�a`��[�J�p���rw휢���V��E�+$�z�!��]�=�j33WۮUȇb����7f j,����׳>�NPH�G,y���Q�\r� ���u��:��%Ü�hƙi����\'�l;��\"WI܅4�R+E��n��Q�*?&a%:��6�\rU�M-��(\0\08\0�?�\\��^���ᝠ�+�����>����*�)��1�P�P���a�$�b�:�V�p0���97M��LN�!a-���oX�\0���y�L����Y#*���_n�T~%{����]NI${L�quI7i�0���q�iw\'M-��\Z�^���<���]/)�u� NxU �m���X{Ԭ�FY�c(��Vk0Ml��Y�l��Df]�O�u:��Y��R�0�+�Z�Z!�\rv��[F���G&�(��-�D4j�h��\nR\05�۾ۍSw{a�e�;qZ���_ʴD���d�r�6�ͺ�T�=�J )�H(r&�� &�����n�k��� �� bXBٓ��GmY>� E�l�\'�x�|�5�\"F�r�O���&�� �y%^\Zn�(�:ԓH�*�1{@b���^���\\k�!令#��\0���#�X�3]Rz�l�� ��\0�� �#�\r�D1t�[gfZB*�Q���\"q*�у�j�j$�V�ZbE�� �YPQ�8��~1�$ s8�Xh���FD�G7M�|ls��ѓ-QI�6mRI�V�$� �$�P�}4��.����!�^�5\n�⾪���\r��f�YT�}ګEM�|�U�s�c�=�G�m������K;Lcw��O�0Q�=�{h��c):Ě cr�\\�������n귺��{�i��U���_7�&��L��7)ӷ~\r�K����^f�X�,%_q8Z�)��+����_��#�v,��d���S�ѓդ��y��y���\r��?��^Rv��Y��vS�b�L�>����E�e ^/q:V!�Y���d7��M4�V }��+�J��ض�� WH �K*��$ y*���Q����1J��#��M�P��H�`!C���~�T��7<����_�]CL�~I����oݒ���U��\0uE������}� �V֘~�� �$R�����M4�P�C�����/a3-�dLn.����c��dۛώЌb�8�0�b鮸4nN�WJ��uW�ި�c�Q����rd�\" ��TJ\0*G���i���͸�+�E1vF�hG�敲�MU�uQIC\0qɓ/!��ֿ��',5,0,'','','',''),(21,3,7,'75859b10b87ebc39','18a7495723879503dac64b352e245508','2017-09-07 09:19:08','2017-09-07 09:19:08','','','Contact Photos','4b7db531ad1920a7cb8fb76aed46ddd9-4.jpg?ts=1504775575','image/jpeg',48,48,1755,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \00\00\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n��\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa��\0\0\0?\0���3�c�s�ǜ�?�1���{�pK����]�_��r��\0BsK�]�n 4d��fZ%ӣ� ³+�r0�m�&��i��-��jA�g>���%hM����%�C¿p��O!����6���x�i�e�5���H�)LW�l�e����!k��:�T���h�q2ڰ���NݴM�j�6�A��7�?qY��ˌ�g�Z�[D�En�&Z]-�mnB��a!�[v\\�h��2BaRI?����<~/�y=d�G������3�JM�[ݨ��` ��ԭy���N��\0ɚȥ֐Y�ʈ���O`=�y��| Ҽ�&�-F�mf��+`<�q{�*En՘g���$��Y��`��P��#I%�;�<�z�+��<��#ۣ��g��dl9�n��&���ek�ٵ���)X�C�dz�D����0�N%HiI�m���R/hvߠ��)5>B�~N��M�X�}��\']�؜�\Zlcޒ�Z��FQ.6��?` �/����>�>J[X㦣�`�3���l8m%X<�=�j�2.�L2�1\"����D�7�0�Ĉ2�+�I1��Kw����n^i>%T%�cƺ�x�]�l�_�/�C��X�JR�B�y��Ÿ�Q-�+μ�+ug�\\�y�J7t���{2U0�OH��m�YF]q�Z�a�$f�d�B����2�F<��c.:�e`��Z�_���|������)�n|���KQi\Z�WK��y��#Y, 6��6c&,S�MP�Δ�3ę��;F�imE�M�I�MiF��܎L��N�W����J!O�Vi��2zA\n(�$�G�#\n%�{�^s*]���p��\\�2n�Et��ܬ�fݏ�Z\Z�m\0�:��2%�.�؁D�3)�[F������a ���],2 ]�ˆ�ۮ�� �Z�ϯ*kj4=���N1�����-c��;l�:�@�Ϋ+�������O�WW��!א^EJGNFG�Ü$�L�B�FI\0CE�x��C42�Z�$R�u��}����ZB��c=/>�z������XK�3x�q�,�8�+���-�#��?*\ZF�����V)/%xR3�e�0�(b0�Š;# ;Kl��\r%�Ye�cCM6���\'JP�%8�1��z�Wm�J��e�Z⁜�[�&+i!�.>Vz8��X�E}+d�\r\0�!�P��eաi�U�tv��O�;}qj�e0åi��?~A�-��٘H �q�-�b> �\Z�+9�#7�x�1�\Z�\Z�e���=`�t,���\n�\0\"\nn:x%zs�Ϥ����?�z|��գ�c���u��S?����K��R+1Uh�a���hTc�%A��1�>?�B�\0����',6,0,'','','',''),(22,0,2,'75859b10b87f222d','4b7db531ad1920a7cb8fb76aed46ddd9','2017-09-07 09:12:55','2017-09-07 09:12:55','','','Contact Photos','f958f83dd2af4c30b30045dfc6ff0718-4.jpg?ts=1504775108','image/jpeg',175,175,5493,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0�\0�\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ��\0B\0\0 \0\0\0\0\0 !\n1A\"Qa�q�%23�#$&5BR����Es�����\0\0\0?\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Ն����X\Z\'���p|L�sN���}�Y%ZR|�(�J*I&+�rJ#�yI)%l�Z�,:��i�(��ϥ�)���J�����*hχo�мI����$�Dj-� (�C\"�cI(s���_�L�:g�� `w�I����9�s.w�Y���a���C\"3:I��e�~��g,�ڮ�Ϩ�6�&�t�t��/iK��xv<�v #=�{�$�ѹ�Idу=��#�}�G���!�\0\0\0\0\0\0\0*|z�B��6�Zp�]�s\"�A�ڝ\r�E\r��{�b��Z�HI��j��>Eq�E�˒S.:t�7�Vg�5�u;��Ys=�YFZ�Rk��}����j��ʮHnl�Ifh���M6&\";M�DD�]��¿SR��c�h�B��{��t��ƤG��V�Mʽ4$�&2��\"����%���{̈}9$����489hۆ�� @�e��崭�\Z��ط<��m�(v&�Ne{�ȵE�qQMI��\Z�uO�h���D<�\0\0\0\0\0\0\0qۍGfn\Z��b��R���9~�2w���o\nstMT�x=d��>��H��l�MT���:�!M2��a��L��c��/�Ri��Cr���������T�\Z�uΥ$�F�IN��춆�q�5��S�,-B��c�^�op�}AW�8�Y)�c?��T��2Fi��դkI��$b�Փ�鐸�A��\\<���F��h�ŭ�ܿIk�)�3^�N�ٓ�wu]��k�U4�J���8�W�*�F�7�`^U:V��ң�I%�̷?��|����C{�Oh�[�:r�qğ��� ����0\\���\Ze0\\�ޅ\Z��.����RvZ��NOI\n#�����O v���-ik�F�����o�;�E�I����ձ��5�\Z�Rv!,��\\4;����MyE�3��t�a9��B��:̌�[�X�T���h_\"��r4k��*�F\\��U:��M�z�\0�u#�\0�C�\0\0\0\0\0�>�f�r���Z\\kp�qҾ.oU�u������q-S�CJK��PSǬf�2JJ��G�D Ym���+>!҄�^�\n\'��/{} �W7��-K;�K���kI�� (�;T�F��\r��H̖J�\0��J�sj� K��\0��m���p֫WV\'�\"IٹjTlx�;ҤO,R��Ԑǖ� edK����:�8���<)5h�y Ó�w ��r*-�0�������Bf��J& u:fIV�r�:rjh.p�甴���9� M��H���>���듲pg�BҲ4:{-��RT�P�MHZ��Rw+|�)�D�qKєW2W��e����j�O{F|��aM)xh���ʴH��-�IF�3捩Gِ\0\0\0\0\0�q���d-�B\\*�u���D�Z��nǮ~�4��gfG�y�N��-m�ݯ�m(ָ����m����WW���IoԺ������w2I��HX%�Lza�֞X��Y��;�$�D�Q{}�54;9�)k3S���2%-|Ĕ����\0��E�ɧT|+2�B��B�H�U�y���������K>Yk�[\ZYN ��\"ZyTGV\ZĢ5MGR�OO��&7��� �;_��Ou��[7���O��?�0�Rv�Vg#۔��+���E�1�[ٲ\0\0\0\0\0��;X��\Zqz��qJ����2c:�#��vIK^Fk4�B/�X���﹑�E4�eh�M8�8(�:�\0s2ia���{���CT��\0XR�J��������dz�]���d��݉� � �,�1r�~��6���DdG��OB�g��&f)��e�+/�4�T�Q�j�����Ѱ�~w��c�8���ڤF�gT�ճ�G�[�M\')��?J�UDR)6v[�#E3���$n��=�J��K�\'�D��q1�8��򄭴��7�(��U����ueL�����t�v2ҤT�K�[o���\0>}FH\0\0\0\0\0B��\0��Lv�x(Ʋ�9�3O\"\no�H�P��QiJU�;G�\\/��e>����oQ�{hnW�^\0�S���8��{�\"Λ��JK\\�*��G��1)|��\'s6��@��M���o+@�:�euw;uY�*9���r�Ol4��YL��Բ3Q#�\"5�E}�q�SS��G�HRb]{~&�B\n�q@�wgv�Qg_��=�rcW6�EP�j\"؊��v�ׇv�{:׎�V\r��}L��dD[u��_^� ?!y֑p<[L�^�Z}�ӵ����k;[cJ.ɖ6���鲔��$/D��Y[�kwR��D���\0\0\0\0�.n���Nn��v\rv�sv�upVV6�;o̥����M���\'�x��8x�-��a�����ES������l13K� �Yx%���rJ��rR�Y�5B$�e�=4�_��ć�&��N\Z_�����k���H��Q;wdW/+�^&�����)5���i�(���-�Z�<9sN����.��j�M� �#�p�9��h���ԥ�i�ʼn�Q=&�U�O�Qn�Q�Ԕl�a��\\�.��\\�\0�㴒�Mʮ�%y�2=�ޟ�]Z��B˩�J$��\0-��F��X� R2�b���X�01�[�#s;=�\Z�\r&��QiOwM Z�<�dJ2�ڀ��#��o��pM�Nӷ�w��8m�2��i�$��d��m�$E��jD�����E��2���iC;�iwN1���C����59��\"�~��O]����O�[��^T�f�1��!����q�2yq��W���K�Q�ө���y����\0\0\0\0��U��K�r�X�2@��?bp�L�r+��d�057x������[S#Y���{m�̣4.��+�o5u�S8���F��M2����h�/m2^��*+j2L�L���3,�}D\0���F�>�-:�i)t���Y��.�Ϻ�f��bV���Z�:Z��`W%T���3�>I��>Fd���F�-$�j#;*O$��)R�])}����[��d�\0 z���~B�пgG 4�L��=c��&n��3κu�6��[�8�e��T�Ҕ�.GUF�(�G��$^J�ڑ�\r��ſ���q��خ��wZ���\r���n�������ÙL5>wv$Rb2{UB�?H ���LAF�Li%`���Tjѫ�Q��\0>�������\0\0\0\0��������SG �M%�B�I�y�[�뽊G?t/ǘ���P����4�% YT*���\">�a&}b��pij��a־x�[W�n�����b\' +�H�%���L��3Ȭ�NC+RW��\nb��L�+�`\0\0\0��!�MWp�᭭gk�&�4q��SGe:O�-]1�Iw�#27������7�Q��%!�T2�C����0Ҵ>�MY�V8�#ch�V(��vv������TN-�������~=I[��W�M5㿀�rn�u��e0�[�Ν���X�$��!D��B���;0z>S%&Fxʗ1+cRղ�GB���)�r�]/q Ïz ύ����9��U/%,��/S�rC��j(�\\�d��$D���eQ�ȵ��}B��j�+�n-�-��ܧem����3���뷐� \0�����q65�YRGX���:a:�\\�\'{V(�C�Ӫ���\Z����.�7p�����4�2��cZQz���_j6��{s}�A�Rrҋ������ӗx�^_է�$�R�#�N��+j}�\Z4hQ>�[����E�\0��� �\0\0\0\0��R�t�wؾ~�{�|�\0��0��� ��\"8\"M��/�j����9E��-�`អ\r-�[�,�&��oo��L��)&��\r1E���E)<���q�d�ᛨYE���p�i�G#�Z����/{�ۢ99�1��$%,֪q�H\"˨T�q���R����\0\09_Ʀ]u�1�\"@�Z��徕�M�ͿS#�F��k-��\'c�^�����bgYшk�Rw�_��$ؿ E� Ϛѹ���c/nA+����=�b/\n#܋a=@\0\0\0\0\0�_��\0���uq�+p��Rb��if�H�F�^ʱ�����j}٩�#55�S����)�l�\"yP���������!�\0ͮ/1s�p���q4����?�۩�4�^��_2���De�\"�?�k�͛��F�ԠGZa���uB�^w-�� B�G���:l_��zK�\0\0\0\0\0\0�AX�/�������,�zO���n�{��i���l��O���q?~������\0�]]Ľ�Ҟ�� �B���?�(��\\levo\'��߮�l�������}�ؙG82����{��䏯��O]�������������\0\0\0\0\0\0D��~4�\'���!���FQ��{sW\\D�͒7-�s���^�{y�m�����8��J�(?�$mh{Ev\'6����w⍪G/�Df[m�c��8�\0��ǿ�nZ@�Դ�o^ٯ(9��ܙ\Z��|�]����TG���fFC��\0\0\0\0\0\08s�|kBQś��ޭ*A�Z�����:3�N�ߦ��e鷡$�w\0\0z*R�z��������\Z���gW\r�S �\Z�U�kE���ks����Cÿ���h[�M��߀\0\0\0\0\0\0��׎JO��\ZO;�\'�0�g ���ynwd��OM� ���n\0\0\0 tQ*E�ב����ˡ �\0\0\0\0\0\0-hթJ�Z4N��[S=�#2�#��[}O�g�\0\0\0\0\0\0\0\0\0\0\0��',4,0,'','','',''),(23,0,2,'75859b10b87f222d','4b7db531ad1920a7cb8fb76aed46ddd9','2017-09-07 09:12:55','2017-09-07 09:12:55','','','Contact Photos','f958f83dd2af4c30b30045dfc6ff0718-4.jpg?ts=1504775108','image/jpeg',80,80,2703,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0P\0P\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ��\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#���3Sa����\0\0\0?\0��M5AQ\0��j�����ǯ<����_�T�@Z��i����9���׾�*��)��{ڥ����J�Y�[6h��e� �,u��$�1����t�KvD3%���g[I�_:kƵ�J�u��B��7��\'vX3i�Rj:�G���*�e�\0��a��M|�i������:{Lٞ�w,dRt� aK�B�f���� �5���Ô��5��b�%֡��Z�uZꅊqNL�����2Õ�oY↚}L�VB�\0���0���ւ7s\0�D�{I��N\n_�J;�)Tʮ>��)���UR�U���V�PlЏ����`�lD4S�M�8��\r�fѲ*H��i�P)CP���O 3�{�a��%y��V�)��yn��YiE�3�I��Vh����; 8�ݴʛG]��5�b~�=I~}��vݐr��(��C����/m��X�H�rN*ߎ��\\==Z�Q�ed���{��\\�����n��X�^¹Z���2�TƓ�e�%W\"���\"��wFVe�L�8$���@K�aM`9G�zv�i�e���s���^�q�Y���9���9(h��9�H��F�`�kd�)�����I$B��r�\n\"n5�����}.�� 9�l2�m&�\n�b����+$V�`\n�\0++���9W��0�h�q�q�������G�\0G��Z�~. ��׬c�����8�o\r��O��5�b61T\ZEW�%B�NnTJU2gfܤ��lu遅-�r�߲�}M�{�2۞,�[�:�\0^2�֫��A��DH.�a<��h_/���4�]W�R|��\'�ỴN��*�.���Ed������Q3�C��S\0�DYV�vÑ>~�X{��\'?���,5C�f�K�W�2�}ߝ$���+�O��0T�\'cX����X��l���f��q� 0�# �8�U(+�*�e �r�a`��[�J�p���rw휢���V��E�+$�z�!��]�=�j33WۮUȇb����7f j,����׳>�NPH�G,y���Q�\r� ���u��:��%Ü�hƙi����\'�l;��\"WI܅4�R+E��n��Q�*?&a%:��6�\rU�M-��(\0\08\0�?�\\��^���ᝠ�+�����>����*�)��1�P�P���a�$�b�:�V�p0���97M��LN�!a-���oX�\0���y�L����Y#*���_n�T~%{����]NI${L�quI7i�0���q�iw\'M-��\Z�^���<���]/)�u� NxU �m���X{Ԭ�FY�c(��Vk0Ml��Y�l��Df]�O�u:��Y��R�0�+�Z�Z!�\rv��[F���G&�(��-�D4j�h��\nR\05�۾ۍSw{a�e�;qZ���_ʴD���d�r�6�ͺ�T�=�J )�H(r&�� &�����n�k��� �� bXBٓ��GmY>� E�l�\'�x�|�5�\"F�r�O���&�� �y%^\Zn�(�:ԓH�*�1{@b���^���\\k�!令#��\0���#�X�3]Rz�l�� ��\0�� �#�\r�D1t�[gfZB*�Q���\"q*�у�j�j$�V�ZbE�� �YPQ�8��~1�$ s8�Xh���FD�G7M�|ls��ѓ-QI�6mRI�V�$� �$�P�}4��.����!�^�5\n�⾪���\r��f�YT�}ګEM�|�U�s�c�=�G�m������K;Lcw��O�0Q�=�{h��c):Ě cr�\\�������n귺��{�i��U���_7�&��L��7)ӷ~\r�K����^f�X�,%_q8Z�)��+����_��#�v,��d���S�ѓդ��y��y���\r��?��^Rv��Y��vS�b�L�>����E�e ^/q:V!�Y���d7��M4�V }��+�J��ض�� WH �K*��$ y*���Q����1J��#��M�P��H�`!C���~�T��7<����_�]CL�~I����oݒ���U��\0uE������}� �V֘~�� �$R�����M4�P�C�����/a3-�dLn.����c��dۛώЌb�8�0�b鮸4nN�WJ��uW�ި�c�Q����rd�\" ��TJ\0*G���i���͸�+�E1vF�hG�敲�MU�uQIC\0qɓ/!��ֿ��',5,0,'','','',''),(24,0,2,'75859b10b87f222d','4b7db531ad1920a7cb8fb76aed46ddd9','2017-09-07 09:12:55','2017-09-07 09:12:55','','','Contact Photos','f958f83dd2af4c30b30045dfc6ff0718-4.jpg?ts=1504775108','image/jpeg',48,48,1755,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \00\00\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n��\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa��\0\0\0?\0���3�c�s�ǜ�?�1���{�pK����]�_��r��\0BsK�]�n 4d��fZ%ӣ� ³+�r0�m�&��i��-��jA�g>���%hM����%�C¿p��O!����6���x�i�e�5���H�)LW�l�e����!k��:�T���h�q2ڰ���NݴM�j�6�A��7�?qY��ˌ�g�Z�[D�En�&Z]-�mnB��a!�[v\\�h��2BaRI?����<~/�y=d�G������3�JM�[ݨ��` ��ԭy���N��\0ɚȥ֐Y�ʈ���O`=�y��| Ҽ�&�-F�mf��+`<�q{�*En՘g���$��Y��`��P��#I%�;�<�z�+��<��#ۣ��g��dl9�n��&���ek�ٵ���)X�C�dz�D����0�N%HiI�m���R/hvߠ��)5>B�~N��M�X�}��\']�؜�\Zlcޒ�Z��FQ.6��?` �/����>�>J[X㦣�`�3���l8m%X<�=�j�2.�L2�1\"����D�7�0�Ĉ2�+�I1��Kw����n^i>%T%�cƺ�x�]�l�_�/�C��X�JR�B�y��Ÿ�Q-�+μ�+ug�\\�y�J7t���{2U0�OH��m�YF]q�Z�a�$f�d�B����2�F<��c.:�e`��Z�_���|������)�n|���KQi\Z�WK��y��#Y, 6��6c&,S�MP�Δ�3ę��;F�imE�M�I�MiF��܎L��N�W����J!O�Vi��2zA\n(�$�G�#\n%�{�^s*]���p��\\�2n�Et��ܬ�fݏ�Z\Z�m\0�:��2%�.�؁D�3)�[F������a ���],2 ]�ˆ�ۮ�� �Z�ϯ*kj4=���N1�����-c��;l�:�@�Ϋ+�������O�WW��!א^EJGNFG�Ü$�L�B�FI\0CE�x��C42�Z�$R�u��}����ZB��c=/>�z������XK�3x�q�,�8�+���-�#��?*\ZF�����V)/%xR3�e�0�(b0�Š;# ;Kl��\r%�Ye�cCM6���\'JP�%8�1��z�Wm�J��e�Z⁜�[�&+i!�.>Vz8��X�E}+d�\r\0�!�P��eաi�U�tv��O�;}qj�e0åi��?~A�-��٘H �q�-�b> �\Z�+9�#7�x�1�\Z�\Z�e���=`�t,���\n�\0\"\nn:x%zs�Ϥ����?�z|��գ�c���u��S?����K��R+1Uh�a���hTc�%A��1�>?�B�\0����',6,0,'','','',''),(25,2,8,'75859b10b880d425','5b0e9c6920adcf8efafaf3743d0e0c6c','2017-09-07 09:16:42','2017-09-07 09:16:42','','','Contact Photos','3.jpg','image/jpeg',175,175,5486,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0�\0�\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ��\0B\0\0 \0\0\0\0\0 !\n1A\"Q�aq�%23R����#$&5B�Es�����\0\0\0?\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Ն����X\Zg���p|L�sN���}�Y%ZR|�(�J*I&+�rJ#�yI)%l�Z�,:��i�(��ϥ�)���J�����*hχo��>$���Œd \"5ɐb��o���9���/צF�3�qN��;뤂��������9�;߬�Kka0���Z���$�Բ��Ob3�g�Wqg�U�l�W�\0ĺQ������<;J;��剽ŒTh܋}��h�����>�#����\0\0\0\0\0\0\0>=]�Xwg-8i��9�u����N�梿���ݱ^�-l$$��5Rt�\"�����e�)�:G��+3Ϛ�ͺ���,���-d�5�ܾ��n~5SeW$76sS$�4SME������\"\"O.����_��)YŽ1�\r�X!M\nm��y�Kl�R�#�k�M&�^�o|ML}Ij���O��D>��OJ��\Z�m��i��v2��r�VӍB�l[�rd��D�;k�2��dZ���8�(��$���h:�״y}`\0\0\0\0\0\0\08�ƣ�37 } Nsſ�]�E�c pJL�򄩵�œ�U<��Y)�O�&�$.�!E�Q%��N�C�SL�8�d��#z��9�㔚g,�ܮ��G w�7GggU)F�]Es�I-��DS�:{-��e�|jw�K P���䗴[�<�PU�&�Jw���iU4�L��\Zno5i\Z�j���ud�:d.-�n��=9�tр��Z!�kj�/�Z��rL�׹S��d�]�Wg�\Z��M(R���%�#劰Q����N��j���ERI�3-���_=�#���=�����q\'�uc���L-e�ƙL#��F�t�����G�����䓓�B��eEk2=����ZZ�C���������3����xdRh�#\'�5ldE(�nF�ԝ�K/��\r�9c���^QG���4�&NjP���#=��:�)<2�ȧ�܆M\Z�3J���\"z�N�{�n���]H�\0�!�\0\0\0\0\0Xl3W9_�.5�W���_7����v��츖��㡥%�k()��3Q�%%MJ#�\",��|h��B{�i�������c+��r��%��ɥ�Mj5���Z��V#Isӆ��$fK%M\0j�t��5s����n6���e8kU��ݑ$�܉5*6���듲pg�BҲ�:t�[I줩��*���¤�V�pS�◣(�d�Bŗ4B.� �su=�� =�4�ᢙ�KAeZ$qu餣}��Fԣ��\0\0\0\0\0\nY��No��!�N��j{\"F-zy�c�?s\Z ��I3�#̼˧Q������\r��k\\]���6��Pꫫ�Ur$��]MIN�^|��$�^u�,ݦ=0��O,Vt,�p���]�I(���F\Z��̔�������Q��bJID�l�\0����dӪ>�o!Sg�[$i*��<�\\Qng|Q�u��,�,�tu�-<�#�\rbQ\Z�&��v�����c����٧��u�-����\'���B�b);C�3����ha��Kr\"ۘ�r-���\0\0\0\0\0K��y�8�qa��^���1�[�؍�$��#5�K��,JL���Ȍ��a��L��s�&�[d��1\r�צ�K�����ɧ��=��\0Dx��a�Ó_Ud�ǁ�5%�~��<��&��ܾ^�G�⏚��_�K�ω�f\\O�2ث�����=�t��2�7 ���36��FffJw���&M^DDV��\0\0\0\0\0���A�������-G���M�:]��\Z�N/&�ɛ����3:Rv�_��?]����%0���^�w g�h��F˭�3橯c�`��j�G�f=h�R� Ȫn������G)#I�&e��6�96\0\0\0\0\0\0���L4/���6v91��!�\r�)�,�~*�Rg#UR�ij�\"��rN������P�kJ;�m�>�b���d&X�����Fޭ�b��48�K�K�T\\�h^�Q̶#I\Z�hWe+_ͺ���ɧI;�\n�F��.Vw)7|<�f�d�O�̚Xi���>��U-��R��/��1����.�t��2fs�n���iE��u?b�D�V��2#�Ca��u3��3�q2����j�w���Z�����qN?;�^��X���R#g3�Dj�֣��&�����\nI*�)�;-�����x�j�7A��%Gi��ŢV�8��TN�BV�ER��e�*��������W�ZMQ�i;iR*h��-����\0�>�$\0\0\0\0\0�!}���Lv�x(Ʋ�9�3O\"\no�H�P��QiJU�;G�\\/��e>����oQ�{hnW�^\0�S���8��{�\"Λ��JK\\�*��G��1)|��\'s6��@��M���o+@�:�euw;uY�*9���r�Ol4��YL��Բ3Q#�\"5�E}�q�SS��G�HRb]{~&�B\n�q@�wgv�Qg_��=�rcW6�EP�j\"؊��v�ׇv�{:׎�V\r��}L��dD[u��_^� ?!y֑p<[L�^�Z}�ӵ����k;[cJ.ɖ6���鲔��$/D��Y[�kwR��D���\0\0\0\0�.n���Nn��v\rv�sv�upVV6�;o̥����M���\'�x��8x�-��a�����ES������l13K� �Yx%���rJ��rR�Y�5B$�e�=4�_��ć�&��N\Z_�����k���H��Q;wdW/+�^&�����)5���i�(���[���xr�I�W�+�]}f,�\n��^G��,s������J\'8ӫ��zL+Z�%l����$�Y�(�:���]��6��\0e�i%v��]�J�d{o�?�$��{�;�SؔI-�[l;��Ǣ���e�Ŏ3l�b`cn��F�v6{\nm 퍍��JZ�������\\��dJ2�ڀ��#��o��pM�Nӷ�w��8m�2��i�$��d��m�$E��jD��M�r\"�b�vKȴ���4����s���܈�\Z��S�E�NU\'����|�{u���H�n��0B��a�G�\'�w~�x�-���5�:���������@\0\0\0\0|�(�\\����-e�s$ c�\' 4�W\"�+H�Sw��:��%�25�Ȉ׶ܜ�3B�\r���W\\e3���4hё��/�Z�q�&����%�-¢��$ʄʺiS2�g�@ +��m��RӭV��NQ\\�5�[B챌���h�x�%kk9�����1&rQ%Hj���p��՗��h����tזf���,����a��\"��ڪA�@d�&�b\n4�cI+\0-��R�V�^����_g��G�<\0\0\0\0Wc����3�M214��V9&�n���)�мsc73MB/ǬD�<�%eP�JX������������G��Z��!m_U���X:�,m��0�y#𖦳U2SD�\"�9 �I^��)�#�\r2��]�\0\0\0<;�~�bj��\rmk;^I5��]2�8�)�~�j�2K�!��d d�����FI) ���]�_���8q�����:j�:�űEڱF����n`���=Z�qmL����}��$����J��J�Zi��w�h�tK�->�)�����t��%\Z�y&��\"$�r0~Ʊك��)23�T��[\Z����:�L�L��*�{�f{�^|m|D5��Wt�R�y)d��z�X�.�QD��&G\"$����#�Y�T/�R���B��rMŵź��쭶�}�>�{���v��\0\0>_��;.&ƹ *H��6�L\'R �$�j�huzuQ�vCQ���EҦ�:y}�ƚ�U�,kJ!�Y>}��Fк/no��3�NZQw35��r��+����d�JRDv�е�mO��F�\n\'�k~�|�H��3�8\0\0\0\0\0c�GT��/]�/����_?��F�9�2�GI����MZ��1�\'(����l3�A��KuŒ��RM��4��w�$ԙ!�(��RH�\'���~.3,���3u (�s�@#.m1H�wK[���:��vtG\'9&2�D�$���N0�Yu\n�n4�:J_���# \0+��ˮ��&8�H\Z�W���ҾSi����dr��؍e��d�}K���{�L��:1\rqjN���ě�(����Z735��T��_�s��\0\0\0\0\0\0��Ɣd�~�?T�\0��2}��nj눝�F���� ��o1-����y��� ]��č��h�����v�9n�Q�H��Ȍ�m��{���>��m� H:�����5�;�{�#RT��K��y~���2����v�\0\0\0\0\0\0u�hJ8��=�U�Ch<�^;������F �[���L�6�$��\0\0EJ]�]�z��2��ƣ�s��zT�8ƭ�{\Z�x������*P���}�� c�鷐��\0\0\0\0\0\0\Z���I�7�I�wD�\0& �q���-Î�>�鿡���\r�\0\0��%H���?�����yt!�\0\0\0\0\0\0��\Z�)V�F�ַ�jg��f^D{� o���x\0\0\0\0\0\0\0\0\0\0\0\0��',4,0,'','','',''),(26,2,8,'75859b10b880d425','5b0e9c6920adcf8efafaf3743d0e0c6c','2017-09-07 09:16:42','2017-09-07 09:16:42','','','Contact Photos','3.jpg','image/jpeg',80,80,2703,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0P\0P\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ��\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#���3Sa����\0\0\0?\0��M5AQ\0��j�����ǯ<����_�T�@Z��i����9���׾�*��)��{ڥ����J�Y�[6h��e� �,u��$�1����t�KvD3%���g[I�_:kƵ�J�u��B��7��\'vX3i�Rj:�G���*�e�\0��a��M|�i������:{Kٞ�w,dRt� aK�B�f���� }��z�a�o�-fr�����@@D5��֮V��b�S�&��-�L��m�[�x���S!�����d�\"ἵ����1�/��n}������U2�����e&�T��`a�U��4#�``�!\rũl�>5�t�l�\n�(\"�i�\nP�)�\'�� ��r�c-�^j����e�[��ZE�t\0���l�A�-��\'!�~��N.A�m2���p�\rjX��OR_���]�d�r�8��$+�\' ۬�. ��Ӭ[�����8�o\rb�O��5�b61T\Z�EW�%B�NnTJS�d�͸�\"a�ۦ��˧~��m�7\r���nx��nd��x�Z�z�1�� �����|�#;��Mu_5I�7,�\"����;w8L��� SY�7ڪJ�cD��S LQe[��D�m��a��c�ܜ��rL�L� ���/m_�˘�~t�F�P��?��|�R0��c[��wco�W�u�4,Ê�.8�%T����La�3�兂21o�*�I�B�e�߶r��8Z;AH��q먆��v��;�61���a\\?n�W\"��J�ݘ1���N��+^��%9A\"���tb(C�GX7|.{m�Gt{�ꧼ�s\r�\Ze�jR���5��|�]\'r�1H��Ż��F ������gl�45V%4�/�P\0\0��8�\0�r�Mx�73�v���ۃ��(�+�0�LX�ߘ�QCB����`� ����[���0\"�d��6j�1:������>��c�3c��2:sH>p\\ud��V.���U}��Q��L��>�C�u9$��2���$ݦ�”��q�i��l�4���j5z��h���gQt��C���-9�T\']��l\ra�R�5IgM��s)Y��4A��5fѳS��tZ%?���:f�J�ð�Ujuh�P5�� Zm �,����!lѪ)��d)H@\0׏n�n5M��;����uk8bێ9*�8w���8� 6���{^�Sl�P�MgLISwg8!����9���\0Pİ��\'e2�ڲ}�����O�����j%�D�`�V����M��f�J�4�jQ�}��N3�*�1{@b���^���\\k�!令#��\0���#�X�3]Rz�l�� ��\0�� �#�\r�D1t�[gfZB*�Q���\"q*�у�j�j$�V�ZbE�� �YPQ�8��~1�$ s8�Xh���FD�G7M�|ls��ѓ-QI�6mRI�V�$� �$�P�}4��.����!�^�5\n�⾪���\r��f�YT�}ګEM�|�U�s�c�=�G�m������K;Lcw��O�0Q�=�{h��c):Ě cr�\\�������n귺��{�i��U���_7�&��L��7)ӷ~\r�K����^f�X�,%_q8Z�)��+����_��#�v,��d���S�ѓդ��y��y���\r��?��^Rv��Y��vS�b�L�>����E�e ^/q:V!�Y���d7��M4�V }��+�J��ض�� WH �K*��$ y*���Q����1J��#��M�P��H�`!C���~�T��7<����_�]CL�~I����oݒ���U��\0uE������}� �V֘~�� �$R�����M4�P�C�����/a3-�dLn.����c��dۛώЌb�8�0�b鮸4nN�WJ��uW�ި�c�Q����rd�\" ��TJ\0*G���i���͸�+�E1vF�hG�敲�MU�uQIC\0qɓ/!��ֿ��',5,0,'','','',''),(27,2,8,'75859b10b880d425','5b0e9c6920adcf8efafaf3743d0e0c6c','2017-09-07 09:16:42','2017-09-07 09:16:42','','','Contact Photos','3.jpg','image/jpeg',48,48,1755,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \00\00\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n��\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa��\0\0\0?\0���3�c�s�ǜ�?�1���{�pK����]�_��r��\0BsK�]�n 4d��fZ%ӣ� ³+�r0�m�&��i��-��jA�g>���%hM����%�C¿p��O!����6���x�i�e�5���H�)LW�l�e����!k��:�T���h�q2ڰ���NݴM�j�6�A��7�?qY��ˌ�g�Z�[D�En�&Z]-�mnB��a!�[v\\�h��2BaRI?����<~/�y=d�G������3�JM�[ݨ��` ��ԭy���N��\0ɚȥ֐Y�ʈ���O`=�y��| Ҽ�&�-F�mf��+`<�q{�*En՘g���$��Y��`��P��#I%�;�<�z�+��<��#ۣ��g��dl9�n��&���ek�ٵ���)X�C�dz�D����0�N%HiI�m���R/hvߠ��)5>B�~N��M�X�}��\']�؜�\Zlcޒ�Z��FQ.6��?` �/����>�>I�X㞣�`�3���lHm%X8�=�j�2.�K2�1$������7���2�)�I1��Cw����n^i>%T%�cƺ�x�]�l�_�/�C��X�JR�B�y��Ÿ�Q-�+μ�+ug�\\�y�J7t���{2U0�OH��m�YF]q�Z�a�$f�d�B����2�F<��c.:�e`��Z�_���|������%�n|���KQi\Z�WK��y��#X0 6��6�&,S�MP���;ę��;F�imE�M�I�MiF��܎L��N�W����J!O�Vi��2zA\n(�$�G�#\n%�{�^s*]���p��\\�2n�Et��ܬ�fݏ�Z\Z�m\0�:��2%�.�؁D�3)�[F������a ���],2 ]�ˆ�ۮ�� �Z�ϯ*kj4=���N1�����-c��;l�:�@�Ϋ+�������O�WW��!א^EJGNFG�Ü$�L�B�FI\0CE�x��C42�Z�$R�u��}����ZB��c=/>�z������XK�3x�q�,�8�+���-�#��?*\ZF�����V)/%xR3�e�0�(b0�Š;# ;Kl��\r%�Ye�cCM6���\'JP�%8�1��z�Wm�J��e�Z⁜�[�&+i!�.>Vz8��X�E}+d�\r\0�!�P��eաi�U�tv��O�;}qj�e0åi��?~A�-��٘H �q�-�b> �\Z�+9�#7�x�1�\Z�\Z�e���=`�t,���\n�\0\"\nn:x%zs�Ϥ����?�z|��գ�c���u��S?����K��R+1Uh�a���hTc�%A��1�>?�B�\0����',6,0,'','','',''),(28,0,8,'75859b10b8813eeb','db4dd6c60ea3b83171c94ae1c492fa8c','2017-09-07 09:09:29','2017-09-07 09:09:29','','','Contact Photos','22875ea1ab42e09a2f1d3869cd6edfe7-4.jpg?ts=1504775234','image/jpeg',175,175,5493,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0�\0�\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ��\0B\0\0 \0\0\0\0\0 !\n1A\"Qa�q�%23�#$&5BR����Es�����\0\0\0?\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Ն����X\Z\'���p|L�sN���}�Y%ZR|�(�J*I&+�rJ#�yI)%l�Z�,:��i�(��ϥ�)���J�����*hχo�мI����$�Dj-� (�C\"�cI(s���_�L�:g�� `w�I����9�s.w�Y���a���C\"3:I��e�~��g,�ڮ�Ϩ�6�&�t�t��/iK��xv<�v #=�{�$�ѹ�Idу=��#�}�G���!�\0\0\0\0\0\0\0*|z�B��6�Zp�]�s\"�A�ڝ\r�E\r��{�b��Z�HI��j��>Eq�E�˒S.:t�7�Vg�5�u;��Ys=�YFZ�Rk��}����j��ʮHnl�Ifh���M6&\";M�DD�]��¿SR��c�h�B��{��t��ƤG��V�Mʽ4$�&2��\"����%���{̈}9$����489hۆ�� @�e��崭�\Z��ط<��m�(v&�Ne{�ȵE�qQMI��\Z�uO�h���D<�\0\0\0\0\0\0\0qۍGfn\Z��b��R���9~�2w���o\nstET�x��H��l�MT���:�!M2��a��L��c��/�Ri��Cr���������T�\Z�uΥ$�F�IN��춆�q�5��S�,-B��c�^�op�}AW�8�Y)�c?��T��2Fi��դkI��$b�Փ�鐸�A��\\<���F��h�ŭ�ܿIk�)�3^�N�ٓ�wu]��k�U4�J���8�W�*�F�7�`^U:V��ң�I%�̷?��|����C{�Oh�[�:r�qğ��� ����0\\���\Ze0\\�ޅ\Z��.����RvZ��NOI\n#�����O v���-ik�F�����o�;�E�I����ձ��5�\Z�Rv!,��\\4;����MyE�3��t�a9��B��:̌�[�X�T���h_\"��r4k��*�F\\��U:��M�z�\0�u#�\0�C�\0\0\0\0\0�>�f�r���Z\\kp�qҾ.oU�u������q-S�CJK��PSǬf�2JJ��G�D Ym���+>!҄�^�\n\'��/{} �W7��-K;�K���kI�� (�;T�F��\r��H̖J�\0��J�sj� K��\0��m���p֫WV\'�\"IٹjTlx�;ҤO,R��Ԑǖ� edK����:�8���<)5h�y Ó�w ��r*-�0�������Bf��J& u:fIV�r�:rjh.p�甴���9� M��H���>���듲pg�BҲ4:{-��RT�P�MHZ��Rw+|�)�D�qKєW2W��e����j�O{F|��aM)xh���ʴH��-�IF�3捩Gِ\0\0\0\0\0�q���d-�B\\*�u���D�Z��nǮ~�4��gfG�y�N��-m�ݯ�m(ָ����m����WW���IoԺ������w2I��HX%�Lza�֞X��Y��;�$�D�Q{}�54;9�)k3S���2%-|Ĕ����\0��E�ɧT|+2�B��B�H�U�y���������K>Yk�[\ZYN ��\"ZyTGV\ZĢ5MGR�OO��&7��� �;_��Ou��[7���O��?�0�Rv�Vg#۔��+���E�1�[ٲ\0\0\0\0\0��;X��\Zqz��qJ����2c:�#��vIK^Fk4�B/�X���﹑�E4�eh�M8�8(�:�\0s2ia���{���CT��\0XR�J��������dz�]���d��݉� � �,�1r�~��6���DdG��OB�g��&f)��e�+/�4�T�Q�j�����Ѱ�~w��c�8���ڤF�gT�ճ�G�[�M\')��?J�UDR)6v[�#E3���$n��=�J��K�\'�D��q1�8��򄭴��7�(��U����ueL�����t�v2ҤT�K�[o���\0>}FH\0\0\0\0\0B��\0��Lv�x(Ʋ�9�3O\"\no�H�P��QiJU�;G�\\/��e>����oQ�{hnW�^\0�S���8��{�\"Λ��JK\\�*��G��1)|��\'s6��@��M���o+@�:�euw;uY�*9���r�Ol4��YL��Բ3Q#�\"5�E}�q�SS��G�HRb]{~&�B\n�q@�wgv�Qg_��=�rcW6�EP�j\"؊��v�ׇv�{:׎�V\r��}L��dD[u��_^� ?!y֑p<[L�^�Z}�ӵ����k;[cJ.ɖ6���鲔��$/D��Y[�kwR��D���\0\0\0\0�.n���Nn��v\rv�sv�upVV6�;o̥����M���\'�x��8x�-��a�����ES������l13K� �Yx%���rJ��rR�Y�5B$�e�=4�_��ć�&��N\Z_�����k���H��Q;wdW/+�^&�����)5���i�(���-�Z�<9sN����.��j�M� �#�p�9��h���ԥ�i�ʼn�Q=&�U�O�Qn�Q�Ԕl�a��\\�.��\\�\0�㴒�Mʮ�%y�2=�ޟ�]Z��B˩�J$��\0-��F��X� R2�b���X�01�[�#s;=�\Z�\r&��QiOwM Z�<�dJ2�ڀ��#��o��pM�Nӷ�w��8m�2��i�$��d��m�$E��jD�����E��2���iC;�iwN1���C����59��\"�~��O]����O�[��^T�f�1��!����q�2yq��W���K�Q�ө���y����\0\0\0\0��U��K�r�X�2@��?bp�L�r+��d�057x������[S#Y���{m�̣4.��+�o5u�S8���F��M2����h�/m2^��*+j2L�L���3,�}D\0���F�>�-:�i)t���Y��.�Ϻ�f��bV���Z�:Z��`W%T���3�>I��>Fd���F�-$�j#;*O$��)R�])}����[��d�\0 z���~B�пgG 4�L��=c��&n��3κu�6��[�8�e��T�Ҕ�.GUF�(�G��$^J�ڑ�\r��ſ���q��خ��wZ���\r���n�������ÙL5>wv$Rb2{UB�?H ���LAF�Li%`���Tjѫ�Q��\0>�������\0\0\0\0��������SG �M%�B�I�y�[�뽊G?t/ǘ���P����4�% YT*���\">�a&}b��pij��a־x�[W�n�����b\' +�H�%���L��3Ȭ�NC+RW��\nb��L�+�`\0\0\0��!�MWp�᭭gk�&�4q��SGe:O�-]1�Iw�#27������7�Q��%!�T2�C����0Ҵ>�MY�V8�#ch�V(��vv������TN-�������~=I[��W�M5㿀�rn�u��e0�[�Ν���X�$��!D��B���;0z>S%&Fxʗ1+cRղ�GB���)�r�]/q Ïz ύ����9��U/%,��/S�rC��j(�\\�d��$D���eQ�ȵ��}B��j�+�n-�-��ܧem����3���뷐� \0�����q65�YRGX���:a:�\\�\'{V(�C�Ӫ���\Z����.�7p�����4�2��cZQz���_j6��{s}�A�Rrҋ������ӗx�^_է�$�R�#�N��+j}�\Z4hQ>�[����E�\0��� �\0\0\0\0��R�t�wؾ~�{�|�\0��0��� ��\"8\"M��/�j����9E��-�`អ\r-�[�,�&��oo��L��)&��\r1E���E)<���q�d�ᛨYE���p�i�G#�Z����/{�ۢ99�1��$%,֪q�H\"˨T�q���R����\0\09_Ʀ]u�1�\"@�Z��徕�M�ͿS#�F��k-��\'c�^�����bgYшk�Rw�_��$ؿ E� Ϛѹ���c/nA+����=�b/\n#܋a=@\0\0\0\0\0�_��\0���uq�+p��Rb��if�H�F�^ʱ�����j}٩�#55�S����)�l�\"yP���������!�\0ͮ/1s�p���q4����?�۩�4�^��_2���De�\"�?�k�͛��F�ԠGZa���uB�^w-�� B�G���:l_��zK�\0\0\0\0\0\0�AX�/�������,�zO���n�{��i���l��O���q?~������\0�]]Ľ�Ҟ�� �B���?�(��\\levo\'��߮�l�������}�ؙG82����{��䏯��O]�������������\0\0\0\0\0\0D��~4�\'���!���FQ��{sW\\D�͒7-�s���^�{y�m�����8��J�(?�$mh{Ev\'6����w⍪G/�Df[m�c��8�\0��ǿ�nZ@�Դ�o^ٯ(9��ܙ\Z��|�]����TG���fFC��\0\0\0\0\0\08s�|kBQś��ޭ*A�Z�����:3�N�ߦ��e鷡$�w\0\0z*R�z��������\Z���gW\r�S �\Z�U�kE���ks����Cÿ���h[�M��߀\0\0\0\0\0\0��׎JO��\ZO;�\'�0�g ���ynwd��OM� ���n\0\0\0 tQ*E�ב����ˡ �\0\0\0\0\0\0-hթJ�Z4N��[S=�#2�#��[}O�g�\0\0\0\0\0\0\0\0\0\0\0��',4,0,'','','',''),(29,0,8,'75859b10b8813eeb','db4dd6c60ea3b83171c94ae1c492fa8c','2017-09-07 09:09:29','2017-09-07 09:09:29','','','Contact Photos','22875ea1ab42e09a2f1d3869cd6edfe7-4.jpg?ts=1504775234','image/jpeg',80,80,2703,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0P\0P\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ��\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#���3Sa����\0\0\0?\0��M5AQ\0��j�����ǯ<����_�T�@Z��i����9���׾�*��)��{ڥ����J�Y�[6h��e� �,u��$�1����t�KvD3%���g[I�_:kƵ�J�u��B��7��\'vX3i�Rj:�G���*�e�\0��a��M|�i������:{Lٞ�w,dRt� aK�B�f���� �5���Ô��5��b�%֡��Z�uZꅊqNL�����2Õ�oY↚}L�VB�\0���0���ւ7s\0�D�{I��N\n_�J;�)Tʮ>��)���UR�U���V�PlЏ����`�lD4S�M�8��\r�fѲ*H��i�P)CP���O 3�{�a��%y��V�)��yn��YiE�3�I��Vh����; 8�ݴʛG]��5�b~�=I~}��vݐr��(��C����/m��X�H�rN*ߎ��\\==Z�Q�ed���{��\\�����n��X�^¹Z���2�TƓ�e�%W\"���\"��wFVe�L�8$���@K�aM`9G�zv�i�e���s���^�q�Y���9���9(h��9�H��F�`�kd�)�����I$B��r�\n\"n5�����}.�� 9�l2�m&�\n�b����+$V�`\n�\0++���9W��0�h�q�q�������G�\0G��Z�~. ��׬c�����8�o\r��O��5�b61T\ZEW�%B�NnTJU2gfܤ��lu遅-�r�߲�}M�{�2۞,�[�:�\0^2�֫��A��DH.�a<��h_/���4�]W�R|��\'�ỴN��*�.���Ed������Q3�C��S\0�DYV�vÑ>~�X{��\'?���,5C�f�K�W�2�}ߝ$���+�O��0T�\'cX����X��l���f��q� 0�# �8�U(+�*�e �r�a`��[�J�p���rw휢���V��E�+$�z�!��]�=�j33WۮUȇb����7f j,����׳>�NPH�G,y���Q�\r� ���u��:��%Ü�hƙi����\'�l;��\"WI܅4�R+E��n��Q�*?&a%:��6�\rU�M-��(\0\08\0�?�\\��^���ᝠ�+�����>����*�)��1�P�P���a�$�b�:�V�p0���97M��LN�!a-���oX�\0���y�L����Y#*���_n�T~%{����]NI${L�quI7i�0���q�iw\'M-��\Z�^���<���]/)�u� NxU �m���X{Ԭ�FY�c(��Vk0Ml��Y�l��Df]�O�u:��Y��R�0�+�Z�Z!�\rv��[F���G&�(��-�D4j�h��\nR\05�۾ۍSw{a�e�;qZ���_ʴD���d�r�6�ͺ�T�=�J )�H(r&�� &�����n�k��� �� bXBٓ��GmY>� E�l�\'�x�|�5�\"F�r�O���&�� �y%^\Zn�(�:ԓH�*�1{@b���^���\\k�!令#��\0���#�X�3]Rz�l�� ��\0�� �#�\r�D1t�[gfZB*�Q���\"q*�у�j�j$�V�ZbE�� �YPQ�8��~1�$ s8�Xh���FD�G7M�|ls��ѓ-QI�6mRI�V�$� �$�P�}4��.����!�^�5\n�⾪���\r��f�YT�}ګEM�|�U�s�c�=�G�m������K;Lcw��O�0Q�=�{h��c):Ě cr�\\�������n귺��{�i��U���_7�&��L��7)ӷ~\r�K����^f�X�,%_q8Z�)��+����_��#�v,��d���S�ѓդ��y��y���\r��?��^Rv��Y��vS�b�L�>����E�e ^/q:V!�Y���d7��M4�V }��+�J��ض�� WH �K*��$ y*���Q����1J��#��M�P��H�`!C���~�T��7<����_�]CL�~I����oݒ���U��\0uE������}� �V֘~�� �$R�����M4�P�C�����/a3-�dLn.����c��dۛώЌb�8�0�b鮸4nN�WJ��uW�ި�c�Q����rd�\" ��TJ\0*G���i���͸�+�E1vF�hG�敲�MU�uQIC\0qɓ/!��ֿ��',5,0,'','','',''),(30,0,8,'75859b10b8813eeb','db4dd6c60ea3b83171c94ae1c492fa8c','2017-09-07 09:09:29','2017-09-07 09:09:29','','','Contact Photos','22875ea1ab42e09a2f1d3869cd6edfe7-4.jpg?ts=1504775234','image/jpeg',48,48,1755,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \00\00\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n��\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa��\0\0\0?\0���3�c�s�ǜ�?�1���{�pK����]�_��r��\0BsK�]�n 4d��fZ%ӣ� ³+�r0�m�&��i��-��jA�g>���%hM����%�C¿p��O!����6���x�i�e�5���H�)LW�l�e����!k��:�T���h�q2ڰ���NݴM�j�6�A��7�?qY��ˌ�g�Z�[D�En�&Z]-�mnB��a!�[v\\�h��2BaRI?����<~/�y=d�G������3�JM�[ݨ��` ��ԭy���N��\0ɚȥ֐Y�ʈ���O`=�y��| Ҽ�&�-F�mf��+`<�q{�*En՘g���$��Y��`��P��#I%�;�<�z�+��<��#ۣ��g��dl9�n��&���ek�ٵ���)X�C�dz�D����0�N%HiI�m���R/hvߠ��)5>B�~N��M�X�}��\']�؜�\Zlcޒ�Z��FQ.6��?` �/����>�>J[X㦣�`�3���l8m%X<�=�j�2.�L2�1\"����D�7�0�Ĉ2�+�I1��Kw����n^i>%T%�cƺ�x�]�l�_�/�C��X�JR�B�y��Ÿ�Q-�+μ�+ug�\\�y�J7t���{2U0�OH��m�YF]q�Z�a�$f�d�B����2�F<��c.:�e`��Z�_���|������)�n|���KQi\Z�WK��y��#Y, 6��6c&,S�MP�Δ�3ę��;F�imE�M�I�MiF��܎L��N�W����J!O�Vi��2zA\n(�$�G�#\n%�{�^s*]���p��\\�2n�Et��ܬ�fݏ�Z\Z�m\0�:��2%�.�؁D�3)�[F������a ���],2 ]�ˆ�ۮ�� �Z�ϯ*kj4=���N1�����-c��;l�:�@�Ϋ+�������O�WW��!א^EJGNFG�Ü$�L�B�FI\0CE�x��C42�Z�$R�u��}����ZB��c=/>�z������XK�3x�q�,�8�+���-�#��?*\ZF�����V)/%xR3�e�0�(b0�Š;# ;Kl��\r%�Ye�cCM6���\'JP�%8�1��z�Wm�J��e�Z⁜�[�&+i!�.>Vz8��X�E}+d�\r\0�!�P��eաi�U�tv��O�;}qj�e0åi��?~A�-��٘H �q�-�b> �\Z�+9�#7�x�1�\Z�\Z�e���=`�t,���\n�\0\"\nn:x%zs�Ϥ����?�z|��գ�c���u��S?����K��R+1Uh�a���hTc�%A��1�>?�B�\0����',6,0,'','','',''),(31,4,9,'75859b10ba668548','adef541d0f334352940ad40251e15158','2017-09-07 09:17:49','2017-09-07 09:17:49','','','Contact Photos','4b7db531ad1920a7cb8fb76aed46ddd9-4.jpg?ts=1504775575','image/jpeg',175,175,5493,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0�\0�\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ��\0B\0\0 \0\0\0\0\0 !\n1A\"Qa�q�%23�#$&5BR����Es�����\0\0\0?\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Ն����X\Z\'���p|L�sN���}�Y%ZR|�(�J*I&+�rJ#�yI)%l�Z�,:��i�(��ϥ�)���J�����*hχo�мI����$�Dj-� (�C\"�cI(s���_�L�:g�� `w�I����9�s.w�Y���a���C\"3:I��e�~��g,�ڮ�Ϩ�6�&�t�t��/iK��xv<�v #=�{�$�ѹ�Idу=��#�}�G���!�\0\0\0\0\0\0\0*|z�B��6�Zp�]�s\"�A�ڝ\r�E\r��{�b��Z�HI��j��>Eq�E�˒S.:t�7�Vg�5�u;��Ys=�YFZ�Rk��}����j��ʮHnl�Ifh���M6&\";M�DD�]��¿SR��c�h�B��{��t��ƤG��V�Mʽ4$�&2��\"����%���{̈}9$����489hۆ�� @�e��崭�\Z��ط<��m�(v&�Ne{�ȵE�qQMI��\Z�uO�h���D<�\0\0\0\0\0\0\0qۍGfn\Z��b��R���9~�2w���o\nstMT�x=d��>��H��l�MT���:�!M2��a��L��c��/�Ri��Cr���������T�\Z�uΥ$�F�IN��춆�q�5��S�,-B��c�^�op�}AW�8�Y)�c?��T��2Fi��դkI��$b�Փ�鐸�A��\\<���F��h�ŭ�ܿIk�)�3^�N�ٓ�wu]��k�U4�J���8�W�*�F�7�`^U:V��ң�I%�̷?��|����C{�Oh�[�:r�qğ��� ����0\\���\Ze0\\�ޅ\Z��.����RvZ��NOI\n#�����O v���-ik�F�����o�;�E�I����ձ��5�\Z�Rv!,��\\4;����MyE�3��t�a9��B��:̌�[�X�T���h_\"��r4k��*�F\\��U:��M�z�\0�u#�\0�C�\0\0\0\0\0�>�f�r���Z\\kp�qҾ.oU�u������q-S�CJK��PSǬf�2JJ��G�D Ym���+>!҄�^�\n\'��/{} �W7��-K;�K���kI�� (�;T�F��\r��H̖J�\0��J�sj� K��\0��m���p֫WV\'�\"IٹjTlx�;ҤO,R��Ԑǖ� edK����:�8���<)5h�y Ó�w ��r*-�0�������Bf��J& u:fIV�r�:rjh.p�甴���9� M��H���>���듲pg�BҲ4:{-��RT�P�MHZ��Rw+|�)�D�qKєW2W��e����j�O{F|��aM)xh���ʴH��-�IF�3捩Gِ\0\0\0\0\0�q���d-�B\\*�u���D�Z��nǮ~�4��gfG�y�N��-m�ݯ�m(ָ����m����WW���IoԺ������w2I��HX%�Lza�֞X��Y��;�$�D�Q{}�54;9�)k3S���2%-|Ĕ����\0��E�ɧT|+2�B��B�H�U�y���������K>Yk�[\ZYN ��\"ZyTGV\ZĢ5MGR�OO��&7��� �;_��Ou��[7���O��?�0�Rv�Vg#۔��+���E�1�[ٲ\0\0\0\0\0��;X��\Zqz��qJ����2c:�#��vIK^Fk4�B/�X���﹑�E4�eh�M8�8(�:�\0s2ia���{���CT��\0XR�J��������dz�]���d��݉� � �,�1r�~��6���DdG��OB�g��&f)��e�+/�4�T�Q�j�����Ѱ�~w��c�8���ڤF�gT�ճ�G�[�M\')��?J�UDR)6v[�#E3���$n��=�J��K�\'�D��q1�8��򄭴��7�(��U����ueL�����t�v2ҤT�K�[o���\0>}FH\0\0\0\0\0B��\0��Lv�x(Ʋ�9�3O\"\no�H�P��QiJU�;G�\\/��e>����oQ�{hnW�^\0�S���8��{�\"Λ��JK\\�*��G��1)|��\'s6��@��M���o+@�:�euw;uY�*9���r�Ol4��YL��Բ3Q#�\"5�E}�q�SS��G�HRb]{~&�B\n�q@�wgv�Qg_��=�rcW6�EP�j\"؊��v�ׇv�{:׎�V\r��}L��dD[u��_^� ?!y֑p<[L�^�Z}�ӵ����k;[cJ.ɖ6���鲔��$/D��Y[�kwR��D���\0\0\0\0�.n���Nn��v\rv�sv�upVV6�;o̥����M���\'�x��8x�-��a�����ES������l13K� �Yx%���rJ��rR�Y�5B$�e�=4�_��ć�&��N\Z_�����k���H��Q;wdW/+�^&�����)5���i�(���-�Z�<9sN����.��j�M� �#�p�9��h���ԥ�i�ʼn�Q=&�U�O�Qn�Q�Ԕl�a��\\�.��\\�\0�㴒�Mʮ�%y�2=�ޟ�]Z��B˩�J$��\0-��F��X� R2�b���X�01�[�#s;=�\Z�\r&��QiOwM Z�<�dJ2�ڀ��#��o��pM�Nӷ�w��8m�2��i�$��d��m�$E��jD�����E��2���iC;�iwN1���C����59��\"�~��O]����O�[��^T�f�1��!����q�2yq��W���K�Q�ө���y����\0\0\0\0��U��K�r�X�2@��?bp�L�r+��d�057x������[S#Y���{m�̣4.��+�o5u�S8���F��M2����h�/m2^��*+j2L�L���3,�}D\0���F�>�-:�i)t���Y��.�Ϻ�f��bV���Z�:Z��`W%T���3�>I��>Fd���F�-$�j#;*O$��)R�])}����[��d�\0 z���~B�пgG 4�L��=c��&n��3κu�6��[�8�e��T�Ҕ�.GUF�(�G��$^J�ڑ�\r��ſ���q��خ��wZ���\r���n�������ÙL5>wv$Rb2{UB�?H ���LAF�Li%`���Tjѫ�Q��\0>�������\0\0\0\0��������SG �M%�B�I�y�[�뽊G?t/ǘ���P����4�% YT*���\">�a&}b��pij��a־x�[W�n�����b\' +�H�%���L��3Ȭ�NC+RW��\nb��L�+�`\0\0\0��!�MWp�᭭gk�&�4q��SGe:O�-]1�Iw�#27������7�Q��%!�T2�C����0Ҵ>�MY�V8�#ch�V(��vv������TN-�������~=I[��W�M5㿀�rn�u��e0�[�Ν���X�$��!D��B���;0z>S%&Fxʗ1+cRղ�GB���)�r�]/q Ïz ύ����9��U/%,��/S�rC��j(�\\�d��$D���eQ�ȵ��}B��j�+�n-�-��ܧem����3���뷐� \0�����q65�YRGX���:a:�\\�\'{V(�C�Ӫ���\Z����.�7p�����4�2��cZQz���_j6��{s}�A�Rrҋ������ӗx�^_է�$�R�#�N��+j}�\Z4hQ>�[����E�\0��� �\0\0\0\0��R�t�wؾ~�{�|�\0��0��� ��\"8\"M��/�j����9E��-�`អ\r-�[�,�&��oo��L��)&��\r1E���E)<���q�d�ᛨYE���p�i�G#�Z����/{�ۢ99�1��$%,֪q�H\"˨T�q���R����\0\09_Ʀ]u�1�\"@�Z��徕�M�ͿS#�F��k-��\'c�^�����bgYшk�Rw�_��$ؿ E� Ϛѹ���c/nA+����=�b/\n#܋a=@\0\0\0\0\0�_��\0���uq�+p��Rb��if�H�F�^ʱ�����j}٩�#55�S����)�l�\"yP���������!�\0ͮ/1s�p���q4����?�۩�4�^��_2���De�\"�?�k�͛��F�ԠGZa���uB�^w-�� B�G���:l_��zK�\0\0\0\0\0\0�AX�/�������,�zO���n�{��i���l��O���q?~������\0�]]Ľ�Ҟ�� �B���?�(��\\levo\'��߮�l�������}�ؙG82����{��䏯��O]�������������\0\0\0\0\0\0D��~4�\'���!���FQ��{sW\\D�͒7-�s���^�{y�m�����8��J�(?�$mh{Ev\'6����w⍪G/�Df[m�c��8�\0��ǿ�nZ@�Դ�o^ٯ(9��ܙ\Z��|�]����TG���fFC��\0\0\0\0\0\08s�|kBQś��ޭ*A�Z�����:3�N�ߦ��e鷡$�w\0\0z*R�z��������\Z���gW\r�S �\Z�U�kE���ks����Cÿ���h[�M��߀\0\0\0\0\0\0��׎JO��\ZO;�\'�0�g ���ynwd��OM� ���n\0\0\0 tQ*E�ב����ˡ �\0\0\0\0\0\0-hթJ�Z4N��[S=�#2�#��[}O�g�\0\0\0\0\0\0\0\0\0\0\0��',4,0,'','','',''),(32,4,9,'75859b10ba668548','adef541d0f334352940ad40251e15158','2017-09-07 09:17:49','2017-09-07 09:17:49','','','Contact Photos','4b7db531ad1920a7cb8fb76aed46ddd9-4.jpg?ts=1504775575','image/jpeg',80,80,2703,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0P\0P\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ��\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#���3Sa����\0\0\0?\0��M5AQ\0��j�����ǯ<����_�T�@Z��i����9���׾�*��)��{ڥ����J�Y�[6h��e� �,u��$�1����t�KvD3%���g[I�_:kƵ�J�u��B��7��\'vX3i�Rj:�G���*�e�\0��a��M|�i������:{Lٞ�w,dRt� aK�B�f���� �5���Ô��5��b�%֡��Z�uZꅊqNL�����2Õ�oY↚}L�VB�\0���0���ւ7s\0�D�{I��N\n_�J;�)Tʮ>��)���UR�U���V�PlЏ����`�lD4S�M�8��\r�fѲ*H��i�P)CP���O 3�{�a��%y��V�)��yn��YiE�3�I��Vh����; 8�ݴʛG]��5�b~�=I~}��vݐr��(��C����/m��X�H�rN*ߎ��\\==Z�Q�ed���{��\\�����n��X�^¹Z���2�TƓ�e�%W\"���\"��wFVe�L�8$���@K�aM`9G�zv�i�e���s���^�q�Y���9���9(h��9�H��F�`�kd�)�����I$B��r�\n\"n5�����}.�� 9�l2�m&�\n�b����+$V�`\n�\0++���9W��0�h�q�q�������G�\0G��Z�~. ��׬c�����8�o\r��O��5�b61T\ZEW�%B�NnTJU2gfܤ��lu遅-�r�߲�}M�{�2۞,�[�:�\0^2�֫��A��DH.�a<��h_/���4�]W�R|��\'�ỴN��*�.���Ed������Q3�C��S\0�DYV�vÑ>~�X{��\'?���,5C�f�K�W�2�}ߝ$���+�O��0T�\'cX����X��l���f��q� 0�# �8�U(+�*�e �r�a`��[�J�p���rw휢���V��E�+$�z�!��]�=�j33WۮUȇb����7f j,����׳>�NPH�G,y���Q�\r� ���u��:��%Ü�hƙi����\'�l;��\"WI܅4�R+E��n��Q�*?&a%:��6�\rU�M-��(\0\08\0�?�\\��^���ᝠ�+�����>����*�)��1�P�P���a�$�b�:�V�p0���97M��LN�!a-���oX�\0���y�L����Y#*���_n�T~%{����]NI${L�quI7i�0���q�iw\'M-��\Z�^���<���]/)�u� NxU �m���X{Ԭ�FY�c(��Vk0Ml��Y�l��Df]�O�u:��Y��R�0�+�Z�Z!�\rv��[F���G&�(��-�D4j�h��\nR\05�۾ۍSw{a�e�;qZ���_ʴD���d�r�6�ͺ�T�=�J )�H(r&�� &�����n�k��� �� bXBٓ��GmY>� E�l�\'�x�|�5�\"F�r�O���&�� �y%^\Zn�(�:ԓH�*�1{@b���^���\\k�!令#��\0���#�X�3]Rz�l�� ��\0�� �#�\r�D1t�[gfZB*�Q���\"q*�у�j�j$�V�ZbE�� �YPQ�8��~1�$ s8�Xh���FD�G7M�|ls��ѓ-QI�6mRI�V�$� �$�P�}4��.����!�^�5\n�⾪���\r��f�YT�}ګEM�|�U�s�c�=�G�m������K;Lcw��O�0Q�=�{h��c):Ě cr�\\�������n귺��{�i��U���_7�&��L��7)ӷ~\r�K����^f�X�,%_q8Z�)��+����_��#�v,��d���S�ѓդ��y��y���\r��?��^Rv��Y��vS�b�L�>����E�e ^/q:V!�Y���d7��M4�V }��+�J��ض�� WH �K*��$ y*���Q����1J��#��M�P��H�`!C���~�T��7<����_�]CL�~I����oݒ���U��\0uE������}� �V֘~�� �$R�����M4�P�C�����/a3-�dLn.����c��dۛώЌb�8�0�b鮸4nN�WJ��uW�ި�c�Q����rd�\" ��TJ\0*G���i���͸�+�E1vF�hG�敲�MU�uQIC\0qɓ/!��ֿ��',5,0,'','','',''),(33,4,9,'75859b10ba668548','adef541d0f334352940ad40251e15158','2017-09-07 09:17:49','2017-09-07 09:17:49','','','Contact Photos','4b7db531ad1920a7cb8fb76aed46ddd9-4.jpg?ts=1504775575','image/jpeg',48,48,1755,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \00\00\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n��\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa��\0\0\0?\0���3�c�s�ǜ�?�1���{�pK����]�_��r��\0BsK�]�n 4d��fZ%ӣ� ³+�r0�m�&��i��-��jA�g>���%hM����%�C¿p��O!����6���x�i�e�5���H�)LW�l�e����!k��:�T���h�q2ڰ���NݴM�j�6�A��7�?qY��ˌ�g�Z�[D�En�&Z]-�mnB��a!�[v\\�h��2BaRI?����<~/�y=d�G������3�JM�[ݨ��` ��ԭy���N��\0ɚȥ֐Y�ʈ���O`=�y��| Ҽ�&�-F�mf��+`<�q{�*En՘g���$��Y��`��P��#I%�;�<�z�+��<��#ۣ��g��dl9�n��&���ek�ٵ���)X�C�dz�D����0�N%HiI�m���R/hvߠ��)5>B�~N��M�X�}��\']�؜�\Zlcޒ�Z��FQ.6��?` �/����>�>J[X㦣�`�3���l8m%X<�=�j�2.�L2�1\"����D�7�0�Ĉ2�+�I1��Kw����n^i>%T%�cƺ�x�]�l�_�/�C��X�JR�B�y��Ÿ�Q-�+μ�+ug�\\�y�J7t���{2U0�OH��m�YF]q�Z�a�$f�d�B����2�F<��c.:�e`��Z�_���|������)�n|���KQi\Z�WK��y��#Y, 6��6c&,S�MP�Δ�3ę��;F�imE�M�I�MiF��܎L��N�W����J!O�Vi��2zA\n(�$�G�#\n%�{�^s*]���p��\\�2n�Et��ܬ�fݏ�Z\Z�m\0�:��2%�.�؁D�3)�[F������a ���],2 ]�ˆ�ۮ�� �Z�ϯ*kj4=���N1�����-c��;l�:�@�Ϋ+�������O�WW��!א^EJGNFG�Ü$�L�B�FI\0CE�x��C42�Z�$R�u��}����ZB��c=/>�z������XK�3x�q�,�8�+���-�#��?*\ZF�����V)/%xR3�e�0�(b0�Š;# ;Kl��\r%�Ye�cCM6���\'JP�%8�1��z�Wm�J��e�Z⁜�[�&+i!�.>Vz8��X�E}+d�\r\0�!�P��eաi�U�tv��O�;}qj�e0åi��?~A�-��٘H �q�-�b> �\Z�+9�#7�x�1�\Z�\Z�e���=`�t,���\n�\0\"\nn:x%zs�Ϥ����?�z|��գ�c���u��S?����K��R+1Uh�a���hTc�%A��1�>?�B�\0����',6,0,'','','',''),(34,2,10,'75859b10ba67f3b5','01ff45af20fe4c6fb230e6fc773f3ef8','2017-09-07 09:18:24','2017-09-07 09:18:24','','','Contact Photos','4.jpg','image/jpeg',175,175,5486,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0�\0�\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ��\0B\0\0 \0\0\0\0\0 !\n1A\"Q�aq�%23R����#$&5B�Es�����\0\0\0?\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Ն����X\Zg���p|L�sN���}�Y%ZR|�(�J*I&+�rJ#�yI)%l�Z�,:��i�(��ϥ�)���J�����*hχo��>$���Œd \"5ɐb��o���9���/צF�3�qN��;뤂��������9�;߬�Kka0���Z���$�Բ��Ob3�g�Wqg�U�l�W�\0ĺQ������<;J;��剽ŒTh܋}��h�����>�#����\0\0\0\0\0\0\0>=]�Xwg-8i��9�u����N�梿���ݱ^�-l$$��5Rt�\"�����e�)�:G��+3Ϛ�ͺ���,���-d�5�ܾ��n~5SeW$76sS$�4SME������\"\"O.����_��)YŽ1�\r�X!M\nm��y�Kl�R�#�k�M&�^�o|ML}Ij���O��D>��OJ��\Z�m��i��v2��r�VӍB�l[�rd��D�;k�2��dZ���8�(��$���h:�״y}`\0\0\0\0\0\0\08�ƣ�37 } Nsſ�]�E�c pJL�򄩵�œ�U<��Y)�O�&�$.�!E�Q%��N�C�SL�8�d��#z��9�㔚g,�ܮ��G w�7GggU)F�]Es�I-��DS�:{-��e�|jw�K P���䗴[�<�PU�&�Jw���iU4�L��\Zno5i\Z�j���ud�:d.-�n��=9�tр��Z!�kj�/�Z��rL�׹S��d�]�Wg�\Z��M(R���%�#劰Q����N��j���ERI�3-���_=�#���=�����q\'�uc���L-e�ƙL#��F�t�����G�����䓓�B��eEk2=����ZZ�C���������3����xdRh�#\'�5ldE(�nF�ԝ�K/��\r�9c���^QG���4�&NjP���#=��:�)<2�ȧ�܆M\Z�3J���\"z�N�{�n���]H�\0�!�\0\0\0\0\0Xl3W9_�.5�W���_7����v��츖��㡥%�k()��3Q�%%MJ#�\",��|h��B{�i�������c+��r��%��ɥ�Mj5���Z��V#Isӆ��$fK%M\0j�t��5s����n6���e8kU��ݑ$�܉5*6���듲pg�BҲ�:t�[I줩��*���¤�V�pS�◣(�d�Bŗ4B.� �su=�� =�4�ᢙ�KAeZ$qu餣}��Fԣ��\0\0\0\0\0\nY��No��!�N��j{\"F-zy�c�?s\Z ��I3�#̼˧Q������\r��k\\]���6��Pꫫ�Ur$��]MIN�^|��$�^u�,ݦ=0��O,Vt,�p���]�I(���F\Z��̔�������Q��bJID�l�\0����dӪ>�o!Sg�[$i*��<�\\Qng|Q�u��,�,�tu�-<�#�\rbQ\Z�&��v�����c����٧��u�-����\'���B�b);C�3����ha��Kr\"ۘ�r-���\0\0\0\0\0K��y�8�qa��^���1�[�؍�$��#5�K��,JL���Ȍ��a��L��s�&�[d��1\r�צ�K�����ɧ��=��\0Dx��a�Ó_Ud�ǁ�5%�~��<��&��ܾ^�G�⏚��_�K�ω�f\\O�2ث�����=�t��2�7 ���36��FffJw���&M^DDV��\0\0\0\0\0���A�������-G���M�:]��\Z�N/&�ɛ����3:Rv�_��?]����%0���^�w g�h��F˭�3橯c�`��j�G�f=h�R� Ȫn������G)#I�&e��6�96\0\0\0\0\0\0���L4/���6v91��!�\r�)�,�~*�Rg#UR�ij�\"��rN������P�kJ;�m�>�b���d&X�����Fޭ�b��48�K�K�T\\�h^�Q̶#I\Z�hWe+_ͺ���ɧI;�\n�F��.Vw)7|<�f�d�O�̚Xi���>��U-��R��/��1����.�t��2fs�n���iE��u?b�D�V��2#�Ca��u3��3�q2����j�w���Z�����qN?;�^��X���R#g3�Dj�֣��&�����\nI*�)�;-�����x�j�7A��%Gi��ŢV�8��TN�BV�ER��e�*��������W�ZMQ�i;iR*h��-����\0�>�$\0\0\0\0\0�!}���Lv�x(Ʋ�9�3O\"\no�H�P��QiJU�;G�\\/��e>����oQ�{hnW�^\0�S���8��{�\"Λ��JK\\�*��G��1)|��\'s6��@��M���o+@�:�euw;uY�*9���r�Ol4��YL��Բ3Q#�\"5�E}�q�SS��G�HRb]{~&�B\n�q@�wgv�Qg_��=�rcW6�EP�j\"؊��v�ׇv�{:׎�V\r��}L��dD[u��_^� ?!y֑p<[L�^�Z}�ӵ����k;[cJ.ɖ6���鲔��$/D��Y[�kwR��D���\0\0\0\0�.n���Nn��v\rv�sv�upVV6�;o̥����M���\'�x��8x�-��a�����ES������l13K� �Yx%���rJ��rR�Y�5B$�e�=4�_��ć�&��N\Z_�����k���H��Q;wdW/+�^&�����)5���i�(���[���xr�I�W�+�]}f,�\n��^G��,s������J\'8ӫ��zL+Z�%l����$�Y�(�:���]��6��\0e�i%v��]�J�d{o�?�$��{�;�SؔI-�[l;��Ǣ���e�Ŏ3l�b`cn��F�v6{\nm 퍍��JZ�������\\��dJ2�ڀ��#��o��pM�Nӷ�w��8m�2��i�$��d��m�$E��jD��M�r\"�b�vKȴ���4����s���܈�\Z��S�E�NU\'����|�{u���H�n��0B��a�G�\'�w~�x�-���5�:���������@\0\0\0\0|�(�\\����-e�s$ c�\' 4�W\"�+H�Sw��:��%�25�Ȉ׶ܜ�3B�\r���W\\e3���4hё��/�Z�q�&����%�-¢��$ʄʺiS2�g�@ +��m��RӭV��NQ\\�5�[B챌���h�x�%kk9�����1&rQ%Hj���p��՗��h����tזf���,����a��\"��ڪA�@d�&�b\n4�cI+\0-��R�V�^����_g��G�<\0\0\0\0Wc����3�M214��V9&�n���)�мsc73MB/ǬD�<�%eP�JX������������G��Z��!m_U���X:�,m��0�y#𖦳U2SD�\"�9 �I^��)�#�\r2��]�\0\0\0<;�~�bj��\rmk;^I5��]2�8�)�~�j�2K�!��d d�����FI) ���]�_���8q�����:j�:�űEڱF����n`���=Z�qmL����}��$����J��J�Zi��w�h�tK�->�)�����t��%\Z�y&��\"$�r0~Ʊك��)23�T��[\Z����:�L�L��*�{�f{�^|m|D5��Wt�R�y)d��z�X�.�QD��&G\"$����#�Y�T/�R���B��rMŵź��쭶�}�>�{���v��\0\0>_��;.&ƹ *H��6�L\'R �$�j�huzuQ�vCQ���EҦ�:y}�ƚ�U�,kJ!�Y>}��Fк/no��3�NZQw35��r��+����d�JRDv�е�mO��F�\n\'�k~�|�H��3�8\0\0\0\0\0c�GT��/]�/����_?��F�9�2�GI����MZ��1�\'(����l3�A��KuŒ��RM��4��w�$ԙ!�(��RH�\'���~.3,���3u (�s�@#.m1H�wK[���:��vtG\'9&2�D�$���N0�Yu\n�n4�:J_���# \0+��ˮ��&8�H\Z�W���ҾSi����dr��؍e��d�}K���{�L��:1\rqjN���ě�(����Z735��T��_�s��\0\0\0\0\0\0��Ɣd�~�?T�\0��2}��nj눝�F���� ��o1-����y��� ]��č��h�����v�9n�Q�H��Ȍ�m��{���>��m� H:�����5�;�{�#RT��K��y~���2����v�\0\0\0\0\0\0u�hJ8��=�U�Ch<�^;������F �[���L�6�$��\0\0EJ]�]�z��2��ƣ�s��zT�8ƭ�{\Z�x������*P���}�� c�鷐��\0\0\0\0\0\0\Z���I�7�I�wD�\0& �q���-Î�>�鿡���\r�\0\0��%H���?�����yt!�\0\0\0\0\0\0��\Z�)V�F�ַ�jg��f^D{� o���x\0\0\0\0\0\0\0\0\0\0\0\0��',4,0,'','','',''),(35,2,10,'75859b10ba67f3b5','01ff45af20fe4c6fb230e6fc773f3ef8','2017-09-07 09:18:24','2017-09-07 09:18:24','','','Contact Photos','4.jpg','image/jpeg',80,80,2703,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0P\0P\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ��\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#���3Sa����\0\0\0?\0��M5AQ\0��j�����ǯ<����_�T�@Z��i����9���׾�*��)��{ڥ����J�Y�[6h��e� �,u��$�1����t�KvD3%���g[I�_:kƵ�J�u��B��7��\'vX3i�Rj:�G���*�e�\0��a��M|�i������:{Kٞ�w,dRt� aK�B�f���� }��z�a�o�-fr�����@@D5��֮V��b�S�&��-�L��m�[�x���S!�����d�\"ἵ����1�/��n}������U2�����e&�T��`a�U��4#�``�!\rũl�>5�t�l�\n�(\"�i�\nP�)�\'�� ��r�c-�^j����e�[��ZE�t\0���l�A�-��\'!�~��N.A�m2���p�\rjX��OR_���]�d�r�8��$+�\' ۬�. ��Ӭ[�����8�o\rb�O��5�b61T\Z�EW�%B�NnTJS�d�͸�\"a�ۦ��˧~��m�7\r���nx��nd��x�Z�z�1�� �����|�#;��Mu_5I�7,�\"����;w8L��� SY�7ڪJ�cD��S LQe[��D�m��a��c�ܜ��rL�L� ���/m_�˘�~t�F�P��?��|�R0��c[��wco�W�u�4,Ê�.8�%T����La�3�兂21o�*�I�B�e�߶r��8Z;AH��q먆��v��;�61���a\\?n�W\"��J�ݘ1���N��+^��%9A\"���tb(C�GX7|.{m�Gt{�ꧼ�s\r�\Ze�jR���5��|�]\'r�1H��Ż��F ������gl�45V%4�/�P\0\0��8�\0�r�Mx�73�v���ۃ��(�+�0�LX�ߘ�QCB����`� ����[���0\"�d��6j�1:������>��c�3c��2:sH>p\\ud��V.���U}��Q��L��>�C�u9$��2���$ݦ�”��q�i��l�4���j5z��h���gQt��C���-9�T\']��l\ra�R�5IgM��s)Y��4A��5fѳS��tZ%?���:f�J�ð�Ujuh�P5�� Zm �,����!lѪ)��d)H@\0׏n�n5M��;����uk8bێ9*�8w���8� 6���{^�Sl�P�MgLISwg8!����9���\0Pİ��\'e2�ڲ}�����O�����j%�D�`�V����M��f�J�4�jQ�}��N3�*�1{@b���^���\\k�!令#��\0���#�X�3]Rz�l�� ��\0�� �#�\r�D1t�[gfZB*�Q���\"q*�у�j�j$�V�ZbE�� �YPQ�8��~1�$ s8�Xh���FD�G7M�|ls��ѓ-QI�6mRI�V�$� �$�P�}4��.����!�^�5\n�⾪���\r��f�YT�}ګEM�|�U�s�c�=�G�m������K;Lcw��O�0Q�=�{h��c):Ě cr�\\�������n귺��{�i��U���_7�&��L��7)ӷ~\r�K����^f�X�,%_q8Z�)��+����_��#�v,��d���S�ѓդ��y��y���\r��?��^Rv��Y��vS�b�L�>����E�e ^/q:V!�Y���d7��M4�V }��+�J��ض�� WH �K*��$ y*���Q����1J��#��M�P��H�`!C���~�T��7<����_�]CL�~I����oݒ���U��\0uE������}� �V֘~�� �$R�����M4�P�C�����/a3-�dLn.����c��dۛώЌb�8�0�b鮸4nN�WJ��uW�ި�c�Q����rd�\" ��TJ\0*G���i���͸�+�E1vF�hG�敲�MU�uQIC\0qɓ/!��ֿ��',5,0,'','','',''),(36,2,10,'75859b10ba67f3b5','01ff45af20fe4c6fb230e6fc773f3ef8','2017-09-07 09:18:24','2017-09-07 09:18:24','','','Contact Photos','4.jpg','image/jpeg',48,48,1755,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \00\00\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n��\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa��\0\0\0?\0���3�c�s�ǜ�?�1���{�pK����]�_��r��\0BsK�]�n 4d��fZ%ӣ� ³+�r0�m�&��i��-��jA�g>���%hM����%�C¿p��O!����6���x�i�e�5���H�)LW�l�e����!k��:�T���h�q2ڰ���NݴM�j�6�A��7�?qY��ˌ�g�Z�[D�En�&Z]-�mnB��a!�[v\\�h��2BaRI?����<~/�y=d�G������3�JM�[ݨ��` ��ԭy���N��\0ɚȥ֐Y�ʈ���O`=�y��| Ҽ�&�-F�mf��+`<�q{�*En՘g���$��Y��`��P��#I%�;�<�z�+��<��#ۣ��g��dl9�n��&���ek�ٵ���)X�C�dz�D����0�N%HiI�m���R/hvߠ��)5>B�~N��M�X�}��\']�؜�\Zlcޒ�Z��FQ.6��?` �/����>�>I�X㞣�`�3���lHm%X8�=�j�2.�K2�1$������7���2�)�I1��Cw����n^i>%T%�cƺ�x�]�l�_�/�C��X�JR�B�y��Ÿ�Q-�+μ�+ug�\\�y�J7t���{2U0�OH��m�YF]q�Z�a�$f�d�B����2�F<��c.:�e`��Z�_���|������%�n|���KQi\Z�WK��y��#X0 6��6�&,S�MP���;ę��;F�imE�M�I�MiF��܎L��N�W����J!O�Vi��2zA\n(�$�G�#\n%�{�^s*]���p��\\�2n�Et��ܬ�fݏ�Z\Z�m\0�:��2%�.�؁D�3)�[F������a ���],2 ]�ˆ�ۮ�� �Z�ϯ*kj4=���N1�����-c��;l�:�@�Ϋ+�������O�WW��!א^EJGNFG�Ü$�L�B�FI\0CE�x��C42�Z�$R�u��}����ZB��c=/>�z������XK�3x�q�,�8�+���-�#��?*\ZF�����V)/%xR3�e�0�(b0�Š;# ;Kl��\r%�Ye�cCM6���\'JP�%8�1��z�Wm�J��e�Z⁜�[�&+i!�.>Vz8��X�E}+d�\r\0�!�P��eաi�U�tv��O�;}qj�e0åi��?~A�-��٘H �q�-�b> �\Z�+9�#7�x�1�\Z�\Z�e���=`�t,���\n�\0\"\nn:x%zs�Ϥ����?�z|��գ�c���u��S?����K��R+1Uh�a���hTc�%A��1�>?�B�\0����',6,0,'','','',''),(37,0,10,'75859b10ba6852dd','de20aa50472d9b54f292966d1cf693c4','2017-09-07 09:09:29','2017-09-07 09:09:29','','','Contact Photos','9c78857b3d725c1c6d1227a7b8cbe6b2-4.jpg?ts=1504775234','image/jpeg',175,175,5493,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0�\0�\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ��\0B\0\0 \0\0\0\0\0 !\n1A\"Qa�q�%23�#$&5BR����Es�����\0\0\0?\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Ն����X\Z\'���p|L�sN���}�Y%ZR|�(�J*I&+�rJ#�yI)%l�Z�,:��i�(��ϥ�)���J�����*hχo�мI����$�Dj-� (�C\"�cI(s���_�L�:g�� `w�I����9�s.w�Y���a���C\"3:I��e�~��g,�ڮ�Ϩ�6�&�t�t��/iK��xv<�v #=�{�$�ѹ�Idу=��#�}�G���!�\0\0\0\0\0\0\0*|z�B��6�Zp�]�s\"�A�ڝ\r�E\r��{�b��Z�HI��j��>Eq�E�˒S.:t�7�Vg�5�u;��Ys=�YFZ�Rk��}����j��ʮHnl�Ifh���M6&\";M�DD�]��¿SR��c�h�B��{��t��ƤG��V�Mʽ4$�&2��\"����%���{̈}9$����489hۆ�� @�e��崭�\Z��ط<��m�(v&�Ne{�ȵE�qQMI��\Z�uO�h���D<�\0\0\0\0\0\0\0qۍGfn\Z��b��R���9~�2w���o\nstET�x��H��l�MT���:�!M2��a��L��c��/�Ri��Cr���������T�\Z�uΥ$�F�IN��춆�q�5��S�,-B��c�^�op�}AW�8�Y)�c?��T��2Fi��դkI��$b�Փ�鐸�A��\\<���F��h�ŭ�ܿIk�)�3^�N�ٓ�wu]��k�U4�J���8�W�*�F�7�`^U:V��ң�I%�̷?��|����C{�Oh�[�:r�qğ��� ����0\\���\Ze0\\�ޅ\Z��.����RvZ��NOI\n#�����O v���-ik�F�����o�;�E�I����ձ��5�\Z�Rv!,��\\4;����MyE�3��t�a9��B��:̌�[�X�T���h_\"��r4k��*�F\\��U:��M�z�\0�u#�\0�C�\0\0\0\0\0�>�f�r���Z\\kp�qҾ.oU�u������q-S�CJK��PSǬf�2JJ��G�D Ym���+>!҄�^�\n\'��/{} �W7��-K;�K���kI�� (�;T�F��\r��H̖J�\0��J�sj� K��\0��m���p֫WV\'�\"IٹjTlx�;ҤO,R��Ԑǖ� edK����:�8���<)5h�y Ó�w ��r*-�0�������Bf��J& u:fIV�r�:rjh.p�甴���9� M��H���>���듲pg�BҲ4:{-��RT�P�MHZ��Rw+|�)�D�qKєW2W��e����j�O{F|��aM)xh���ʴH��-�IF�3捩Gِ\0\0\0\0\0�q���d-�B\\*�u���D�Z��nǮ~�4��gfG�y�N��-m�ݯ�m(ָ����m����WW���IoԺ������w2I��HX%�Lza�֞X��Y��;�$�D�Q{}�54;9�)k3S���2%-|Ĕ����\0��E�ɧT|+2�B��B�H�U�y���������K>Yk�[\ZYN ��\"ZyTGV\ZĢ5MGR�OO��&7��� �;_��Ou��[7���O��?�0�Rv�Vg#۔��+���E�1�[ٲ\0\0\0\0\0��;X��\Zqz��qJ����2c:�#��vIK^Fk4�B/�X���﹑�E4�eh�M8�8(�:�\0s2ia���{���CT��\0XR�J��������dz�]���d��݉� � �,�1r�~��6���DdG��OB�g��&f)��e�+/�4�T�Q�j�����Ѱ�~w��c�8���ڤF�gT�ճ�G�[�M\')��?J�UDR)6v[�#E3���$n��=�J��K�\'�D��q1�8��򄭴��7�(��U����ueL�����t�v2ҤT�K�[o���\0>}FH\0\0\0\0\0B��\0��Lv�x(Ʋ�9�3O\"\no�H�P��QiJU�;G�\\/��e>����oQ�{hnW�^\0�S���8��{�\"Λ��JK\\�*��G��1)|��\'s6��@��M���o+@�:�euw;uY�*9���r�Ol4��YL��Բ3Q#�\"5�E}�q�SS��G�HRb]{~&�B\n�q@�wgv�Qg_��=�rcW6�EP�j\"؊��v�ׇv�{:׎�V\r��}L��dD[u��_^� ?!y֑p<[L�^�Z}�ӵ����k;[cJ.ɖ6���鲔��$/D��Y[�kwR��D���\0\0\0\0�.n���Nn��v\rv�sv�upVV6�;o̥����M���\'�x��8x�-��a�����ES������l13K� �Yx%���rJ��rR�Y�5B$�e�=4�_��ć�&��N\Z_�����k���H��Q;wdW/+�^&�����)5���i�(���-�Z�<9sN����.��j�M� �#�p�9��h���ԥ�i�ʼn�Q=&�U�O�Qn�Q�Ԕl�a��\\�.��\\�\0�㴒�Mʮ�%y�2=�ޟ�]Z��B˩�J$��\0-��F��X� R2�b���X�01�[�#s;=�\Z�\r&��QiOwM Z�<�dJ2�ڀ��#��o��pM�Nӷ�w��8m�2��i�$��d��m�$E��jD�����E��2���iC;�iwN1���C����59��\"�~��O]����O�[��^T�f�1��!����q�2yq��W���K�Q�ө���y����\0\0\0\0��U��K�r�X�2@��?bp�L�r+��d�057x������[S#Y���{m�̣4.��+�o5u�S8���F��M2����h�/m2^��*+j2L�L���3,�}D\0���F�>�-:�i)t���Y��.�Ϻ�f��bV���Z�:Z��`W%T���3�>I��>Fd���F�-$�j#;*O$��)R�])}����[��d�\0 z���~B�пgG 4�L��=c��&n��3κu�6��[�8�e��T�Ҕ�.GUF�(�G��$^J�ڑ�\r��ſ���q��خ��wZ���\r���n�������ÙL5>wv$Rb2{UB�?H ���LAF�Li%`���Tjѫ�Q��\0>�������\0\0\0\0��������SG �M%�B�I�y�[�뽊G?t/ǘ���P����4�% YT*���\">�a&}b��pij��a־x�[W�n�����b\' +�H�%���L��3Ȭ�NC+RW��\nb��L�+�`\0\0\0��!�MWp�᭭gk�&�4q��SGe:O�-]1�Iw�#27������7�Q��%!�T2�C����0Ҵ>�MY�V8�#ch�V(��vv������TN-�������~=I[��W�M5㿀�rn�u��e0�[�Ν���X�$��!D��B���;0z>S%&Fxʗ1+cRղ�GB���)�r�]/q Ïz ύ����9��U/%,��/S�rC��j(�\\�d��$D���eQ�ȵ��}B��j�+�n-�-��ܧem����3���뷐� \0�����q65�YRGX���:a:�\\�\'{V(�C�Ӫ���\Z����.�7p�����4�2��cZQz���_j6��{s}�A�Rrҋ������ӗx�^_է�$�R�#�N��+j}�\Z4hQ>�[����E�\0��� �\0\0\0\0��R�t�wؾ~�{�|�\0��0��� ��\"8\"M��/�j����9E��-�`អ\r-�[�,�&��oo��L��)&��\r1E���E)<���q�d�ᛨYE���p�i�G#�Z����/{�ۢ99�1��$%,֪q�H\"˨T�q���R����\0\09_Ʀ]u�1�\"@�Z��徕�M�ͿS#�F��k-��\'c�^�����bgYшk�Rw�_��$ؿ E� Ϛѹ���c/nA+����=�b/\n#܋a=@\0\0\0\0\0�_��\0���uq�+p��Rb��if�H�F�^ʱ�����j}٩�#55�S����)�l�\"yP���������!�\0ͮ/1s�p���q4����?�۩�4�^��_2���De�\"�?�k�͛��F�ԠGZa���uB�^w-�� B�G���:l_��zK�\0\0\0\0\0\0�AX�/�������,�zO���n�{��i���l��O���q?~������\0�]]Ľ�Ҟ�� �B���?�(��\\levo\'��߮�l�������}�ؙG82����{��䏯��O]�������������\0\0\0\0\0\0D��~4�\'���!���FQ��{sW\\D�͒7-�s���^�{y�m�����8��J�(?�$mh{Ev\'6����w⍪G/�Df[m�c��8�\0��ǿ�nZ@�Դ�o^ٯ(9��ܙ\Z��|�]����TG���fFC��\0\0\0\0\0\08s�|kBQś��ޭ*A�Z�����:3�N�ߦ��e鷡$�w\0\0z*R�z��������\Z���gW\r�S �\Z�U�kE���ks����Cÿ���h[�M��߀\0\0\0\0\0\0��׎JO��\ZO;�\'�0�g ���ynwd��OM� ���n\0\0\0 tQ*E�ב����ˡ �\0\0\0\0\0\0-hթJ�Z4N��[S=�#2�#��[}O�g�\0\0\0\0\0\0\0\0\0\0\0��',4,0,'','','',''),(38,0,10,'75859b10ba6852dd','de20aa50472d9b54f292966d1cf693c4','2017-09-07 09:09:29','2017-09-07 09:09:29','','','Contact Photos','9c78857b3d725c1c6d1227a7b8cbe6b2-4.jpg?ts=1504775234','image/jpeg',80,80,2703,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0P\0P\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ��\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#���3Sa����\0\0\0?\0��M5AQ\0��j�����ǯ<����_�T�@Z��i����9���׾�*��)��{ڥ����J�Y�[6h��e� �,u��$�1����t�KvD3%���g[I�_:kƵ�J�u��B��7��\'vX3i�Rj:�G���*�e�\0��a��M|�i������:{Lٞ�w,dRt� aK�B�f���� �5���Ô��5��b�%֡��Z�uZꅊqNL�����2Õ�oY↚}L�VB�\0���0���ւ7s\0�D�{I��N\n_�J;�)Tʮ>��)���UR�U���V�PlЏ����`�lD4S�M�8��\r�fѲ*H��i�P)CP���O 3�{�a��%y��V�)��yn��YiE�3�I��Vh����; 8�ݴʛG]��5�b~�=I~}��vݐr��(��C����/m��X�H�rN*ߎ��\\==Z�Q�ed���{��\\�����n��X�^¹Z���2�TƓ�e�%W\"���\"��wFVe�L�8$���@K�aM`9G�zv�i�e���s���^�q�Y���9���9(h��9�H��F�`�kd�)�����I$B��r�\n\"n5�����}.�� 9�l2�m&�\n�b����+$V�`\n�\0++���9W��0�h�q�q�������G�\0G��Z�~. ��׬c�����8�o\r��O��5�b61T\ZEW�%B�NnTJU2gfܤ��lu遅-�r�߲�}M�{�2۞,�[�:�\0^2�֫��A��DH.�a<��h_/���4�]W�R|��\'�ỴN��*�.���Ed������Q3�C��S\0�DYV�vÑ>~�X{��\'?���,5C�f�K�W�2�}ߝ$���+�O��0T�\'cX����X��l���f��q� 0�# �8�U(+�*�e �r�a`��[�J�p���rw휢���V��E�+$�z�!��]�=�j33WۮUȇb����7f j,����׳>�NPH�G,y���Q�\r� ���u��:��%Ü�hƙi����\'�l;��\"WI܅4�R+E��n��Q�*?&a%:��6�\rU�M-��(\0\08\0�?�\\��^���ᝠ�+�����>����*�)��1�P�P���a�$�b�:�V�p0���97M��LN�!a-���oX�\0���y�L����Y#*���_n�T~%{����]NI${L�quI7i�0���q�iw\'M-��\Z�^���<���]/)�u� NxU �m���X{Ԭ�FY�c(��Vk0Ml��Y�l��Df]�O�u:��Y��R�0�+�Z�Z!�\rv��[F���G&�(��-�D4j�h��\nR\05�۾ۍSw{a�e�;qZ���_ʴD���d�r�6�ͺ�T�=�J )�H(r&�� &�����n�k��� �� bXBٓ��GmY>� E�l�\'�x�|�5�\"F�r�O���&�� �y%^\Zn�(�:ԓH�*�1{@b���^���\\k�!令#��\0���#�X�3]Rz�l�� ��\0�� �#�\r�D1t�[gfZB*�Q���\"q*�у�j�j$�V�ZbE�� �YPQ�8��~1�$ s8�Xh���FD�G7M�|ls��ѓ-QI�6mRI�V�$� �$�P�}4��.����!�^�5\n�⾪���\r��f�YT�}ګEM�|�U�s�c�=�G�m������K;Lcw��O�0Q�=�{h��c):Ě cr�\\�������n귺��{�i��U���_7�&��L��7)ӷ~\r�K����^f�X�,%_q8Z�)��+����_��#�v,��d���S�ѓդ��y��y���\r��?��^Rv��Y��vS�b�L�>����E�e ^/q:V!�Y���d7��M4�V }��+�J��ض�� WH �K*��$ y*���Q����1J��#��M�P��H�`!C���~�T��7<����_�]CL�~I����oݒ���U��\0uE������}� �V֘~�� �$R�����M4�P�C�����/a3-�dLn.����c��dۛώЌb�8�0�b鮸4nN�WJ��uW�ި�c�Q����rd�\" ��TJ\0*G���i���͸�+�E1vF�hG�敲�MU�uQIC\0qɓ/!��ֿ��',5,0,'','','',''),(39,0,10,'75859b10ba6852dd','de20aa50472d9b54f292966d1cf693c4','2017-09-07 09:09:29','2017-09-07 09:09:29','','','Contact Photos','9c78857b3d725c1c6d1227a7b8cbe6b2-4.jpg?ts=1504775234','image/jpeg',48,48,1755,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \00\00\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n��\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa��\0\0\0?\0���3�c�s�ǜ�?�1���{�pK����]�_��r��\0BsK�]�n 4d��fZ%ӣ� ³+�r0�m�&��i��-��jA�g>���%hM����%�C¿p��O!����6���x�i�e�5���H�)LW�l�e����!k��:�T���h�q2ڰ���NݴM�j�6�A��7�?qY��ˌ�g�Z�[D�En�&Z]-�mnB��a!�[v\\�h��2BaRI?����<~/�y=d�G������3�JM�[ݨ��` ��ԭy���N��\0ɚȥ֐Y�ʈ���O`=�y��| Ҽ�&�-F�mf��+`<�q{�*En՘g���$��Y��`��P��#I%�;�<�z�+��<��#ۣ��g��dl9�n��&���ek�ٵ���)X�C�dz�D����0�N%HiI�m���R/hvߠ��)5>B�~N��M�X�}��\']�؜�\Zlcޒ�Z��FQ.6��?` �/����>�>J[X㦣�`�3���l8m%X<�=�j�2.�L2�1\"����D�7�0�Ĉ2�+�I1��Kw����n^i>%T%�cƺ�x�]�l�_�/�C��X�JR�B�y��Ÿ�Q-�+μ�+ug�\\�y�J7t���{2U0�OH��m�YF]q�Z�a�$f�d�B����2�F<��c.:�e`��Z�_���|������)�n|���KQi\Z�WK��y��#Y, 6��6c&,S�MP�Δ�3ę��;F�imE�M�I�MiF��܎L��N�W����J!O�Vi��2zA\n(�$�G�#\n%�{�^s*]���p��\\�2n�Et��ܬ�fݏ�Z\Z�m\0�:��2%�.�؁D�3)�[F������a ���],2 ]�ˆ�ۮ�� �Z�ϯ*kj4=���N1�����-c��;l�:�@�Ϋ+�������O�WW��!א^EJGNFG�Ü$�L�B�FI\0CE�x��C42�Z�$R�u��}����ZB��c=/>�z������XK�3x�q�,�8�+���-�#��?*\ZF�����V)/%xR3�e�0�(b0�Š;# ;Kl��\r%�Ye�cCM6���\'JP�%8�1��z�Wm�J��e�Z⁜�[�&+i!�.>Vz8��X�E}+d�\r\0�!�P��eաi�U�tv��O�;}qj�e0åi��?~A�-��٘H �q�-�b> �\Z�+9�#7�x�1�\Z�\Z�e���=`�t,���\n�\0\"\nn:x%zs�Ϥ����?�z|��գ�c���u��S?����K��R+1Uh�a���hTc�%A��1�>?�B�\0����',6,0,'','','',''),(40,5,11,'75859b10bb574e2e','01ebf2eb957e5aef5463ba5ae6510ef5','2017-09-07 09:19:08','2017-09-07 09:19:08','','','Contact Photos','4b7db531ad1920a7cb8fb76aed46ddd9-4.jpg?ts=1504775575','image/jpeg',175,175,5493,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0�\0�\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ��\0B\0\0 \0\0\0\0\0 !\n1A\"Qa�q�%23�#$&5BR����Es�����\0\0\0?\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Ն����X\Z\'���p|L�sN���}�Y%ZR|�(�J*I&+�rJ#�yI)%l�Z�,:��i�(��ϥ�)���J�����*hχo�мI����$�Dj-� (�C\"�cI(s���_�L�:g�� `w�I����9�s.w�Y���a���C\"3:I��e�~��g,�ڮ�Ϩ�6�&�t�t��/iK��xv<�v #=�{�$�ѹ�Idу=��#�}�G���!�\0\0\0\0\0\0\0*|z�B��6�Zp�]�s\"�A�ڝ\r�E\r��{�b��Z�HI��j��>Eq�E�˒S.:t�7�Vg�5�u;��Ys=�YFZ�Rk��}����j��ʮHnl�Ifh���M6&\";M�DD�]��¿SR��c�h�B��{��t��ƤG��V�Mʽ4$�&2��\"����%���{̈}9$����489hۆ�� @�e��崭�\Z��ط<��m�(v&�Ne{�ȵE�qQMI��\Z�uO�h���D<�\0\0\0\0\0\0\0qۍGfn\Z��b��R���9~�2w���o\nstMT�x=d��>��H��l�MT���:�!M2��a��L��c��/�Ri��Cr���������T�\Z�uΥ$�F�IN��춆�q�5��S�,-B��c�^�op�}AW�8�Y)�c?��T��2Fi��դkI��$b�Փ�鐸�A��\\<���F��h�ŭ�ܿIk�)�3^�N�ٓ�wu]��k�U4�J���8�W�*�F�7�`^U:V��ң�I%�̷?��|����C{�Oh�[�:r�qğ��� ����0\\���\Ze0\\�ޅ\Z��.����RvZ��NOI\n#�����O v���-ik�F�����o�;�E�I����ձ��5�\Z�Rv!,��\\4;����MyE�3��t�a9��B��:̌�[�X�T���h_\"��r4k��*�F\\��U:��M�z�\0�u#�\0�C�\0\0\0\0\0�>�f�r���Z\\kp�qҾ.oU�u������q-S�CJK��PSǬf�2JJ��G�D Ym���+>!҄�^�\n\'��/{} �W7��-K;�K���kI�� (�;T�F��\r��H̖J�\0��J�sj� K��\0��m���p֫WV\'�\"IٹjTlx�;ҤO,R��Ԑǖ� edK����:�8���<)5h�y Ó�w ��r*-�0�������Bf��J& u:fIV�r�:rjh.p�甴���9� M��H���>���듲pg�BҲ4:{-��RT�P�MHZ��Rw+|�)�D�qKєW2W��e����j�O{F|��aM)xh���ʴH��-�IF�3捩Gِ\0\0\0\0\0�q���d-�B\\*�u���D�Z��nǮ~�4��gfG�y�N��-m�ݯ�m(ָ����m����WW���IoԺ������w2I��HX%�Lza�֞X��Y��;�$�D�Q{}�54;9�)k3S���2%-|Ĕ����\0��E�ɧT|+2�B��B�H�U�y���������K>Yk�[\ZYN ��\"ZyTGV\ZĢ5MGR�OO��&7��� �;_��Ou��[7���O��?�0�Rv�Vg#۔��+���E�1�[ٲ\0\0\0\0\0��;X��\Zqz��qJ����2c:�#��vIK^Fk4�B/�X���﹑�E4�eh�M8�8(�:�\0s2ia���{���CT��\0XR�J��������dz�]���d��݉� � �,�1r�~��6���DdG��OB�g��&f)��e�+/�4�T�Q�j�����Ѱ�~w��c�8���ڤF�gT�ճ�G�[�M\')��?J�UDR)6v[�#E3���$n��=�J��K�\'�D��q1�8��򄭴��7�(��U����ueL�����t�v2ҤT�K�[o���\0>}FH\0\0\0\0\0B��\0��Lv�x(Ʋ�9�3O\"\no�H�P��QiJU�;G�\\/��e>����oQ�{hnW�^\0�S���8��{�\"Λ��JK\\�*��G��1)|��\'s6��@��M���o+@�:�euw;uY�*9���r�Ol4��YL��Բ3Q#�\"5�E}�q�SS��G�HRb]{~&�B\n�q@�wgv�Qg_��=�rcW6�EP�j\"؊��v�ׇv�{:׎�V\r��}L��dD[u��_^� ?!y֑p<[L�^�Z}�ӵ����k;[cJ.ɖ6���鲔��$/D��Y[�kwR��D���\0\0\0\0�.n���Nn��v\rv�sv�upVV6�;o̥����M���\'�x��8x�-��a�����ES������l13K� �Yx%���rJ��rR�Y�5B$�e�=4�_��ć�&��N\Z_�����k���H��Q;wdW/+�^&�����)5���i�(���-�Z�<9sN����.��j�M� �#�p�9��h���ԥ�i�ʼn�Q=&�U�O�Qn�Q�Ԕl�a��\\�.��\\�\0�㴒�Mʮ�%y�2=�ޟ�]Z��B˩�J$��\0-��F��X� R2�b���X�01�[�#s;=�\Z�\r&��QiOwM Z�<�dJ2�ڀ��#��o��pM�Nӷ�w��8m�2��i�$��d��m�$E��jD�����E��2���iC;�iwN1���C����59��\"�~��O]����O�[��^T�f�1��!����q�2yq��W���K�Q�ө���y����\0\0\0\0��U��K�r�X�2@��?bp�L�r+��d�057x������[S#Y���{m�̣4.��+�o5u�S8���F��M2����h�/m2^��*+j2L�L���3,�}D\0���F�>�-:�i)t���Y��.�Ϻ�f��bV���Z�:Z��`W%T���3�>I��>Fd���F�-$�j#;*O$��)R�])}����[��d�\0 z���~B�пgG 4�L��=c��&n��3κu�6��[�8�e��T�Ҕ�.GUF�(�G��$^J�ڑ�\r��ſ���q��خ��wZ���\r���n�������ÙL5>wv$Rb2{UB�?H ���LAF�Li%`���Tjѫ�Q��\0>�������\0\0\0\0��������SG �M%�B�I�y�[�뽊G?t/ǘ���P����4�% YT*���\">�a&}b��pij��a־x�[W�n�����b\' +�H�%���L��3Ȭ�NC+RW��\nb��L�+�`\0\0\0��!�MWp�᭭gk�&�4q��SGe:O�-]1�Iw�#27������7�Q��%!�T2�C����0Ҵ>�MY�V8�#ch�V(��vv������TN-�������~=I[��W�M5㿀�rn�u��e0�[�Ν���X�$��!D��B���;0z>S%&Fxʗ1+cRղ�GB���)�r�]/q Ïz ύ����9��U/%,��/S�rC��j(�\\�d��$D���eQ�ȵ��}B��j�+�n-�-��ܧem����3���뷐� \0�����q65�YRGX���:a:�\\�\'{V(�C�Ӫ���\Z����.�7p�����4�2��cZQz���_j6��{s}�A�Rrҋ������ӗx�^_է�$�R�#�N��+j}�\Z4hQ>�[����E�\0��� �\0\0\0\0��R�t�wؾ~�{�|�\0��0��� ��\"8\"M��/�j����9E��-�`អ\r-�[�,�&��oo��L��)&��\r1E���E)<���q�d�ᛨYE���p�i�G#�Z����/{�ۢ99�1��$%,֪q�H\"˨T�q���R����\0\09_Ʀ]u�1�\"@�Z��徕�M�ͿS#�F��k-��\'c�^�����bgYшk�Rw�_��$ؿ E� Ϛѹ���c/nA+����=�b/\n#܋a=@\0\0\0\0\0�_��\0���uq�+p��Rb��if�H�F�^ʱ�����j}٩�#55�S����)�l�\"yP���������!�\0ͮ/1s�p���q4����?�۩�4�^��_2���De�\"�?�k�͛��F�ԠGZa���uB�^w-�� B�G���:l_��zK�\0\0\0\0\0\0�AX�/�������,�zO���n�{��i���l��O���q?~������\0�]]Ľ�Ҟ�� �B���?�(��\\levo\'��߮�l�������}�ؙG82����{��䏯��O]�������������\0\0\0\0\0\0D��~4�\'���!���FQ��{sW\\D�͒7-�s���^�{y�m�����8��J�(?�$mh{Ev\'6����w⍪G/�Df[m�c��8�\0��ǿ�nZ@�Դ�o^ٯ(9��ܙ\Z��|�]����TG���fFC��\0\0\0\0\0\08s�|kBQś��ޭ*A�Z�����:3�N�ߦ��e鷡$�w\0\0z*R�z��������\Z���gW\r�S �\Z�U�kE���ks����Cÿ���h[�M��߀\0\0\0\0\0\0��׎JO��\ZO;�\'�0�g ���ynwd��OM� ���n\0\0\0 tQ*E�ב����ˡ �\0\0\0\0\0\0-hթJ�Z4N��[S=�#2�#��[}O�g�\0\0\0\0\0\0\0\0\0\0\0��',4,0,'','','',''),(41,5,11,'75859b10bb574e2e','01ebf2eb957e5aef5463ba5ae6510ef5','2017-09-07 09:19:08','2017-09-07 09:19:08','','','Contact Photos','4b7db531ad1920a7cb8fb76aed46ddd9-4.jpg?ts=1504775575','image/jpeg',80,80,2703,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0P\0P\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ��\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#���3Sa����\0\0\0?\0��M5AQ\0��j�����ǯ<����_�T�@Z��i����9���׾�*��)��{ڥ����J�Y�[6h��e� �,u��$�1����t�KvD3%���g[I�_:kƵ�J�u��B��7��\'vX3i�Rj:�G���*�e�\0��a��M|�i������:{Lٞ�w,dRt� aK�B�f���� �5���Ô��5��b�%֡��Z�uZꅊqNL�����2Õ�oY↚}L�VB�\0���0���ւ7s\0�D�{I��N\n_�J;�)Tʮ>��)���UR�U���V�PlЏ����`�lD4S�M�8��\r�fѲ*H��i�P)CP���O 3�{�a��%y��V�)��yn��YiE�3�I��Vh����; 8�ݴʛG]��5�b~�=I~}��vݐr��(��C����/m��X�H�rN*ߎ��\\==Z�Q�ed���{��\\�����n��X�^¹Z���2�TƓ�e�%W\"���\"��wFVe�L�8$���@K�aM`9G�zv�i�e���s���^�q�Y���9���9(h��9�H��F�`�kd�)�����I$B��r�\n\"n5�����}.�� 9�l2�m&�\n�b����+$V�`\n�\0++���9W��0�h�q�q�������G�\0G��Z�~. ��׬c�����8�o\r��O��5�b61T\ZEW�%B�NnTJU2gfܤ��lu遅-�r�߲�}M�{�2۞,�[�:�\0^2�֫��A��DH.�a<��h_/���4�]W�R|��\'�ỴN��*�.���Ed������Q3�C��S\0�DYV�vÑ>~�X{��\'?���,5C�f�K�W�2�}ߝ$���+�O��0T�\'cX����X��l���f��q� 0�# �8�U(+�*�e �r�a`��[�J�p���rw휢���V��E�+$�z�!��]�=�j33WۮUȇb����7f j,����׳>�NPH�G,y���Q�\r� ���u��:��%Ü�hƙi����\'�l;��\"WI܅4�R+E��n��Q�*?&a%:��6�\rU�M-��(\0\08\0�?�\\��^���ᝠ�+�����>����*�)��1�P�P���a�$�b�:�V�p0���97M��LN�!a-���oX�\0���y�L����Y#*���_n�T~%{����]NI${L�quI7i�0���q�iw\'M-��\Z�^���<���]/)�u� NxU �m���X{Ԭ�FY�c(��Vk0Ml��Y�l��Df]�O�u:��Y��R�0�+�Z�Z!�\rv��[F���G&�(��-�D4j�h��\nR\05�۾ۍSw{a�e�;qZ���_ʴD���d�r�6�ͺ�T�=�J )�H(r&�� &�����n�k��� �� bXBٓ��GmY>� E�l�\'�x�|�5�\"F�r�O���&�� �y%^\Zn�(�:ԓH�*�1{@b���^���\\k�!令#��\0���#�X�3]Rz�l�� ��\0�� �#�\r�D1t�[gfZB*�Q���\"q*�у�j�j$�V�ZbE�� �YPQ�8��~1�$ s8�Xh���FD�G7M�|ls��ѓ-QI�6mRI�V�$� �$�P�}4��.����!�^�5\n�⾪���\r��f�YT�}ګEM�|�U�s�c�=�G�m������K;Lcw��O�0Q�=�{h��c):Ě cr�\\�������n귺��{�i��U���_7�&��L��7)ӷ~\r�K����^f�X�,%_q8Z�)��+����_��#�v,��d���S�ѓդ��y��y���\r��?��^Rv��Y��vS�b�L�>����E�e ^/q:V!�Y���d7��M4�V }��+�J��ض�� WH �K*��$ y*���Q����1J��#��M�P��H�`!C���~�T��7<����_�]CL�~I����oݒ���U��\0uE������}� �V֘~�� �$R�����M4�P�C�����/a3-�dLn.����c��dۛώЌb�8�0�b鮸4nN�WJ��uW�ި�c�Q����rd�\" ��TJ\0*G���i���͸�+�E1vF�hG�敲�MU�uQIC\0qɓ/!��ֿ��',5,0,'','','',''),(42,5,11,'75859b10bb574e2e','01ebf2eb957e5aef5463ba5ae6510ef5','2017-09-07 09:19:08','2017-09-07 09:19:08','','','Contact Photos','4b7db531ad1920a7cb8fb76aed46ddd9-4.jpg?ts=1504775575','image/jpeg',48,48,1755,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \00\00\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n��\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa��\0\0\0?\0���3�c�s�ǜ�?�1���{�pK����]�_��r��\0BsK�]�n 4d��fZ%ӣ� ³+�r0�m�&��i��-��jA�g>���%hM����%�C¿p��O!����6���x�i�e�5���H�)LW�l�e����!k��:�T���h�q2ڰ���NݴM�j�6�A��7�?qY��ˌ�g�Z�[D�En�&Z]-�mnB��a!�[v\\�h��2BaRI?����<~/�y=d�G������3�JM�[ݨ��` ��ԭy���N��\0ɚȥ֐Y�ʈ���O`=�y��| Ҽ�&�-F�mf��+`<�q{�*En՘g���$��Y��`��P��#I%�;�<�z�+��<��#ۣ��g��dl9�n��&���ek�ٵ���)X�C�dz�D����0�N%HiI�m���R/hvߠ��)5>B�~N��M�X�}��\']�؜�\Zlcޒ�Z��FQ.6��?` �/����>�>J[X㦣�`�3���l8m%X<�=�j�2.�L2�1\"����D�7�0�Ĉ2�+�I1��Kw����n^i>%T%�cƺ�x�]�l�_�/�C��X�JR�B�y��Ÿ�Q-�+μ�+ug�\\�y�J7t���{2U0�OH��m�YF]q�Z�a�$f�d�B����2�F<��c.:�e`��Z�_���|������)�n|���KQi\Z�WK��y��#Y, 6��6c&,S�MP�Δ�3ę��;F�imE�M�I�MiF��܎L��N�W����J!O�Vi��2zA\n(�$�G�#\n%�{�^s*]���p��\\�2n�Et��ܬ�fݏ�Z\Z�m\0�:��2%�.�؁D�3)�[F������a ���],2 ]�ˆ�ۮ�� �Z�ϯ*kj4=���N1�����-c��;l�:�@�Ϋ+�������O�WW��!א^EJGNFG�Ü$�L�B�FI\0CE�x��C42�Z�$R�u��}����ZB��c=/>�z������XK�3x�q�,�8�+���-�#��?*\ZF�����V)/%xR3�e�0�(b0�Š;# ;Kl��\r%�Ye�cCM6���\'JP�%8�1��z�Wm�J��e�Z⁜�[�&+i!�.>Vz8��X�E}+d�\r\0�!�P��eաi�U�tv��O�;}qj�e0åi��?~A�-��٘H �q�-�b> �\Z�+9�#7�x�1�\Z�\Z�e���=`�t,���\n�\0\"\nn:x%zs�Ϥ����?�z|��գ�c���u��S?����K��R+1Uh�a���hTc�%A��1�>?�B�\0����',6,0,'','','',''),(43,2,12,'75859b10bb588dfc','b32d851ca091305b4cf5d115070cedbd','2017-09-07 09:11:20','2017-09-07 09:11:20','','','Contact Photos','777ac66400f3fef5ff42189840387ede-4.jpg?ts=1504775093','image/jpeg',175,175,5493,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0�\0�\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ��\0B\0\0 \0\0\0\0\0 !\n1A\"Qa�q�%23�#$&5BR����Es�����\0\0\0?\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Ն����X\Z\'���p|L�sN���}�Y%ZR|�(�J*I&+�rJ#�yI)%l�Z�,:��i�(��ϥ�)���J�����*hχo�мI����$�Dj-� (�C\"�cI(s���_�L�:g�� `w�I����9�s.w�Y���a���C\"3:I��e�~��g,�ڮ�Ϩ�6�&�t�t��/iK��xv<�v #=�{�$�ѹ�Idу=��#�}�G���!�\0\0\0\0\0\0\0*|z�B��6�Zp�]�s\"�A�ڝ\r�E\r��{�b��Z�HI��j��>Eq�E�˒S.:t�7�Vg�5�u;��Ys=�YFZ�Rk��}����j��ʮHnl�Ifh���M6&\";M�DD�]��¿SR��c�h�B��{��t��ƤG��V�Mʽ4$�&2��\"����%���{̈}9$����489hۆ�� @�e��崭�\Z��ط<��m�(v&�Ne{�ȵE�qQMI��\Z�uO�h���D<�\0\0\0\0\0\0\0qۍGfn���b��R���8��2w���o\nstET�x=d��>��H��l�MD���:�!M2��a��L��c��/�Ri��Cr���������T�\Z�uΥ$�F�IN��춆�q�5��S�,-B��c�^�op�}AW�8�Y)�c?��T��2Fi��դkI��$b�Փ�鐸�A��\\<���F��h�ŭ�ܿIk�)�3^�N�ٓ�wu]��k�U4�J���8�W�*�F�7�`^U:V��ң�I%�̷?��|����C{�Oh�[�:r�qğ��� ����0\\���\Ze0\\�ޅ\Z��.����RvZ��NOI\n#�����O v���-ik�F�����o�;�E�I����ձ��5�\Z�Rv!,��\\4;����MyE�3��t�a9��B��:̌�[�X�T���h_\"��r4k��*�F\\��U:��M�z�\0�u#�\0�C�\0\0\0\0\0�>�f�r���Z\\kp�qҾ.oU�u������q-S�CJK��PSǬf�2JJ��G�D Ym���+>!҄�^�\n\'��/{} �W7��-K;�K���kI�� (�;T�F��\r��H̖J�\0��J�sj� K��\0��m���p֫WV\'�\"IٹjTlx�;ҤO,R��Ԑǖ� edK����:�8���<)5h�y Ó�w ��r*-�0�������Bf��J& u:fIV�r�:rjh.p�甴���9� M��H���>���듲pg�BҲ4:{-��RT�P�MHZ��Rw+|�)�D�qKєW2W��e����j�O{F|��aM)xh���ʴH��-�IF�3捩Gِ\0\0\0\0\0�q���d-�B\\*�u���D�Z��nǮ~�4��gfG�y�N��-m�ݯ�m(ָ����m����WW���IoԺ������w2I��HX%�Lza�֞X��Y��;�$�D�Q{}�54;9�)k3S���2%-|Ĕ����\0��E�ɧT|+2�B��B�H�U�y���������K>Yk�[\ZYN ��\"ZyTGV\ZĢ5MGR�OO��&7��� �;_��Ou��[7���O��?�0�Rv�Vg#۔��+���E�1�[ٲ\0\0\0\0\0��;X��\Zqz��qJ����2c:�#��vIK^Fk4�B/�X���﹑�E4�eh�M8�8(�:�\0s2ia���{���CT��\0XR�J��������dz�]���d��݉� � �,�1r�~��6���DdG��OB�g��&f)��e�+/�4�T�Q�j�����Ѱ�~w��c�8���ڤF�gT�ճ�G�[�M\')��?J�UDR)6v[�#E3���$n��=�J��K�\'�D��q1�8��򄭴��7�(��U����ueL�����t�v2ҤT�K�[o���\0>}FH\0\0\0\0\0B��\0��Lv�x(Ʋ�9�3O\"\no�H�P��QiJU�;G�\\/��e>����oQ�{hnW�^\0�S���8��{�\"Λ��JK\\�*��G��1)|��\'s6��@��M���o+@�:�euw;uY�*9���r�Ol4��YL��Բ3Q#�\"5�E}�q�SS��G�HRb]{~&�B\n�q@�wgv�Qg_��=�rcW6�EP�j\"؊��v�ׇv�{:׎�V\r��}L��dD[u��_^� ?!y֑p<[L�^�Z}�ӵ����k;[cJ.ɖ6���鲔��$/D��Y[�kwR��D���\0\0\0\0�.n���Nn��v\rv�sv�upVV6�;o̥����M���\'�x��8x�-��a�����ES������l13K� �Yx%���rJ��rR�Y�5B$�e�=4�_��ć�&��N\Z_�����k���H��Q;wdW/+�^&�����)5���i�(���-�Z�<9sN����.��j�M� �#�p�9��h���ԥ�i�ʼn�Q=&�U�O�Qn�Q�Ԕl�a��\\�.��\\�\0�㴒�Mʮ�%y�2=�ޟ�]Z��B˩�J$��\0-��F��X� R2�b���X�01�[�#s;=�\Z�\r&��QiOwM Z�<�dJ2�ڀ��#��o��pM�Nӷ�w��8m�2��i�$��d��m�$E��jD�����E��2���iC;�iwN1���C����59��\"�~��O]����O�[��^T�f�1��!����q�2yq��W���K�Q�ө���y����\0\0\0\0��U��K�r�X�2@��?bp�L�r+��d�057x������[S#Y���{m�̣4.��+�o5u�S8���F��M2����h�/m2^��*+j2L�L���3,�}D\0���F�>�-:�i)t���Y��.�Ϻ�f��bV���Z�:Z��`W%T���3�>I��>Fd���F�-$�j#;*O$��)R�])}����[��d�\0 z���~B�пgG 4�L��=c��&n��3κu�6��[�8�e��T�Ҕ�.GUF�(�G��$^J�ڑ�\r��ſ���q��خ��wZ���\r���n�������ÙL5>wv$Rb2{UB�?H ���LAF�Li%`���Tjѫ�Q��\0>�������\0\0\0\0��������SG �M%�B�I�y�[�뽊G?t/ǘ���P����4�% YT*���\">�a&}b��pij��a־x�[W�n�����b\' +�H�%���L��3Ȭ�NC+RW��\nb��L�+�`\0\0\0��!�MWp�᭭gk�&�4q��SGe:O�-]1�Iw�#27������7�Q��%!�T2�C����0Ҵ>�MY�V8�#ch�V(��vv������TN-�������~=I[��W�M5㿀�rn�u��e0�[�Ν���X�$��!D��B���;0z>S%&Fxʗ1+cRղ�GB���)�r�]/q Ïz ύ����9��U/%,��/S�rC��j(�\\�d��$D���eQ�ȵ��}B��j�+�n-�-��ܧem����3���뷐� \0�����q65�YRGX���:a:�\\�\'{V(�C�Ӫ���\Z����.�7p�����4�2��cZQz���_j6��{s}�A�Rrҋ������ӗx�^_է�$�R�#�N��+j}�\Z4hQ>�[����E�\0��� �\0\0\0\0��R�t�wؾ~�{�|�\0��0��� ��\"8\"M��/�j����9E��-�`អ\r-�[�,�&��oo��L��)&��\r1E���E)<���q�d�ᛨYE���p�i�G#�Z����/{�ۢ99�1��$%,֪q�H\"˨T�q���R����\0\09_Ʀ]u�1�\"@�Z��徕�M�ͿS#�F��k-��\'c�^�����bgYшk�Rw�_��$ؿ E� Ϛѹ���c/nA+����=�b/\n#܋a=@\0\0\0\0\0�_��\0���uq�+p��Rb��if�H�F�^ʱ�����j}٩�#55�S����)�l�\"yP���������!�\0ͮ/1s�p���q4����?�۩�4�^��_2���De�\"�?�k�͛��F�ԠGZa���uB�^w-�� B�G���:l_��zK�\0\0\0\0\0\0�AX�/�������,�zO���n�{��i���l��O���q?~������\0�]]Ľ�Ҟ�� �B���?�(��\\levo\'��߮�l�������}�ؙG82����{��䏯��O]�������������\0\0\0\0\0\0D��~4�\'���!���FQ��{sW\\D�͒7-�s���^�{y�m�����8��J�(?�$mh{Ev\'6����w⍪G/�Df[m�c��8�\0��ǿ�nZ@�Դ�o^ٯ(9��ܙ\Z��|�]����TG���fFC��\0\0\0\0\0\08s�|kBQś��ޭ*A�Z�����:3�N�ߦ��e鷡$�w\0\0z*R�z��������\Z���gW\r�S �\Z�U�kE���ks����Cÿ���h[�M��߀\0\0\0\0\0\0��׎JO��\ZO;�\'�0�g ���ynwd��OM� ���n\0\0\0 tQ*E�ב����ˡ �\0\0\0\0\0\0-hթJ�Z4N��[S=�#2�#��[}O�g�\0\0\0\0\0\0\0\0\0\0\0��',4,0,'','','',''),(44,2,12,'75859b10bb588dfc','b32d851ca091305b4cf5d115070cedbd','2017-09-07 09:11:20','2017-09-07 09:11:20','','','Contact Photos','777ac66400f3fef5ff42189840387ede-4.jpg?ts=1504775093','image/jpeg',80,80,2703,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0P\0P\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ��\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#���3Sa����\0\0\0?\0��M5AQ\0��j�����ǯ<����_�T�@Z��i����9���׾�*��)��{ڥ����J�Y�[6h��e� �,u��$�1����t�KvD3%���g[I�_:kƵ�J�u��B��7��\'vX3i�Rj:�G���*�e�\0��a��M|�i������:{Lٞ�w,dRt� aK�B�f���� �5���Ô��5��b�%֡��Z�uZꅊqNL�����2Õ�oY↚}L�VB�\0���0���ւ7s\0�D�{I��N\n_�J;�)Tʮ>��)���UR�U���V�PlЏ����`�lD4S�M�8��\r�fѲ*H��i�P)CP���O 3�{�a��%y��V�)��yn��YiE�3�I��Vh����; 8�ݴʛG]��5�b��=I~}��vݐr��(��C����/n��X�H�rN*ߎ�Y�=Z�Q�ed���{��\\�����n��X�^¹Z���2�TƓ�e�%W\"���\"��wFVe�L�8$���@K�aM`9G�zv�i�e���s���^�q�Y���9���9(h��9�H��F�`�kd�)�����I$B��r�\n\"n5�����}.�� 9�l2�m&�\n�b����+$V�`\n�\0++���9W��0�h�q�q�������G�\0G��Z�~. ��׬c�����8�o\r��O��5�b61T\ZEW�%B�NnTJU2gfܤ��lu遅-�r�߲�}M�{�2۞,�[�:�\0^2�֫��A��DH.�a<��h_/���4�]W�R|��\'�ỴN��*�.���Ed������Q3�C��S\0�DYV�vÑ>~�X{��\'?���,5C�f�K�W�2�}ߝ$���+�O��0T�\'cX����X��l���f��q� 0�# �8�U(+�*�e �r�a`��[�J�p���rw휢���V��E�+$�z�!��]�=�j33WۮUȇb����7f j,����׳>�NPH�G,y���Q�\r� ���u��:��%Ü�hƙi����\'�l;��\"WI܅4�R+E��n��Q�*?&a%:��6�\rU�M-��(\0\08\0�?�\\��^���ᝠ�+�����>����*�)��1�P�P���a�$�b�:�V�p0���97M��LN�!a-���oX�\0���y�L����Y#*���_n�T~%{����]NI${L�quI7i�0���q�iw\'M-��\Z�^���<���]/)�u� NxU �m���X{Ԭ�FY�c(��Vk0Ml��Y�l��Df]�O�u:��Y��R�0�+�Z�Z!�\rv��[F���G&�(��-�D4j�h��\nR\05�۾ۍSw{a�e�;qZ���_ʴD���d�r�6�ͺ�T�=�J )�H(r&�� &�����n�k��� �� bXBٓ��GmY>� E�l�\'�x�|�5�\"F�r�O���&�� �y%^\Zn�(�:ԓH�*�1{@b���^���\\k�!令#��\0���#�X�3]Rz�l�� ��\0�� �#�\r�D1t�[gfZB*�Q���\"q*�у�j�j$�V�ZbE�� �YPQ�8��~1�$ s8�Xh���FD�G7M�|ls��ѓ-QI�6mRI�V�$� �$�P�}4��.����!�^�5\n�⾪���\r��f�YT�}ګEM�|�U�s�c�=�G�m������K;Lcw��O�0Q�=�{h��c):Ě cr�\\�������n귺��{�i��U���_7�&��L��7)ӷ~\r�K����^f�X�,%_q8Z�)��+����_��#�v,��d���S�ѓդ��y��y���\r��?��^Rv��Y��vS�b�L�>����E�e ^/q:V!�Y���d7��M4�V }��+�J��ض�� WH �K*��$ y*���Q����1J��#��M�P��H�`!C���~�T��7<����_�]CL�~I����oݒ���U��\0uE������}� �V֘~�� �$R�����M4�P�C�����/a3-�dLn.����c��dۛώЌb�8�0�b鮸4nN�WJ��uW�ި�c�Q����rd�\" ��TJ\0*G���i���͸�+�E1vF�hG�敲�MU�uQIC\0qɓ/!��ֿ��',5,0,'','','',''),(45,2,12,'75859b10bb588dfc','b32d851ca091305b4cf5d115070cedbd','2017-09-07 09:11:20','2017-09-07 09:11:20','','','Contact Photos','777ac66400f3fef5ff42189840387ede-4.jpg?ts=1504775093','image/jpeg',48,48,1755,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \00\00\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n��\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa��\0\0\0?\0���3�c�s�ǜ�?�1���{�pK����]�_��r��\0BsK�]�n 4d��fZ%ӣ� ³+�r0�m�&��i��-��jA�g>���%hM����%�C¿p��O!����6���x�i�e�5���H�)LW�l�e����!k��:�T���h�q2ڰ���NݴM�j�6�A��7�?qY��ˌ�g�Z�[D�En�&Z]-�mnB��a!�[v\\�h��2BaRI?����<~/�y=d�G������3�JM�[ݨ��` ��ԭy���N��\0ɚȥ֐Y�ʈ���O`=�y��| Ҽ�&�-F�mf��+`<�q{�*En՘g���$��Y��`��P��#I%�;�<�z�+��<��#ۣ��g��dl9�n��&���ek�ٵ���)X�C�dz�D����0�N%HiI�m���R/hvߠ��)5>B�~N��M�X�}��\']�؜�\Zlcޒ�Z��FQ.6��?` �/����>�>J[X㦣�`�3���l8m%X<�=�j�2.�L2�1\"����D�7�0�Ĉ2�+�I1��Kw����n^i>%T%�cƺ�x�]�l�_�/�C��X�JR�B�y��Ÿ�Q-�+μ�+ug�\\�y�J7t���{2U0�OH��m�YF]q�Z�a�$f�d�B����2�F<��c.:�e`��Z�_���|������)�n|���KQi\Z�WK��y��#Y, 6��6c&,S�MP�Δ�3ę��;F�imE�M�I�MiF��܎L��N�W����J!O�Vi��2zA\n(�$�G�#\n%�{�^s*]���p��\\�2n�Et��ܬ�fݏ�Z\Z�m\0�:��2%�.�؁D�3)�[F������a ���],2 ]�ˆ�ۮ�� �Z�ϯ*kj4=���N1�����-c��;l�:�@�Ϋ+�������O�WW��!א^EJGNFG�Ü$�L�B�FI\0CE�x��C42�Z�$R�u��}����ZB��c=/>�z������XK�3x�q�,�8�+���-�#��?*\ZF�����V)/%xR3�e�0�(b0�Š;# ;Kl��\r%�Ye�cCM6���\'JP�%8�1��z�Wm�J��e�Z⁜�[�&+i!�.>Vz8��X�E}+d�\r\0�!�P��eաi�U�tv��O�;}qj�e0åi��?~A�-��٘H �q�-�b> �\Z�+9�#7�x�1�\Z�\Z�e���=`�t,���\n�\0\"\nn:x%zs�Ϥ����?�z|��գ�c���u��S?����K��R+1Uh�a���hTc�%A��1�>?�B�\0����',6,0,'','','',''),(46,0,12,'75859b10bb58e506','777ac66400f3fef5ff42189840387ede','2017-09-07 09:13:05','2017-09-07 09:13:05','','','Contact Photos','15048d33e71544a25a6dd13bb081c78f-4.jpg?ts=1504775545','image/jpeg',175,175,5493,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0�\0�\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ��\0B\0\0 \0\0\0\0\0 !\n1A\"Qa�q�%23�#$&5BR����Es�����\0\0\0?\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Ն����X\Z\'���p|L�sN���}�Y%ZR|�(�J*I&+�rJ#�yI)%l�Z�,:��i�(��ϥ�)���J�����*hχo�мI����$�Dj-� (�C\"�cI(s���_�L�:g�� `w�I����9�s.w�Y���a���C\"3:I��e�~��g,�ڮ�Ϩ�6�&�t�t��/iK��xv<�v #=�{�$�ѹ�Idу=��#�}�G���!�\0\0\0\0\0\0\0*|z�B��6�Zp�]�s\"�A�ڝ\r�E\r��{�b��Z�HI��j��>Eq�E�˒S.:t�7�Vg�5�u;��Ys=�YFZ�Rk��}����j��ʮHnl�Ifh���M6&\";M�DD�]��¿SR��c�h�B��{��t��ƤG��V�Mʽ4$�&2��\"����%���{̈}9$����489hۆ�� @�e��崭�\Z��ط<��m�(v&�Ne{�ȵE�qQMI��\Z�uO�h���D<�\0\0\0\0\0\0\0qۍGfn\Z��b��R���9~�2w���o\nstET�x��H��l�MT���:�!M2��a��L��c��/�Ri��Cr���������T�\Z�uΥ$�F�IN��춆�q�5��S�,-B��c�^�op�}AW�8�Y)�c?��T��2Fi��դkI��$b�Փ�鐸�A��\\<���F��h�ŭ�ܿIk�)�3^�N�ٓ�wu]��k�U4�J���8�W�*�F�7�`^U:V��ң�I%�̷?��|����C{�Oh�[�:r�qğ��� ����0\\���\Ze0\\�ޅ\Z��.����RvZ��NOI\n#�����O v���-ik�F�����o�;�E�I����ձ��5�\Z�Rv!,��\\4;����MyE�3��t�a9��B��:̌�[�X�T���h_\"��r4k��*�F\\��U:��M�z�\0�u#�\0�C�\0\0\0\0\0�>�f�r���Z\\kp�qҾ.oU�u������q-S�CJK��PSǬf�2JJ��G�D Ym���+>!҄�^�\n\'��/{} �W7��-K;�K���kI�� (�;T�F��\r��H̖J�\0��J�sj� K��\0��m���p֫WV\'�\"IٹjTlx�;ҤO,R��Ԑǖ� edK����:�8���<)5h�y Ó�w ��r*-�0�������Bf��J& u:fIV�r�:rjh.p�甴���9� M��H���>���듲pg�BҲ4:{-��RT�P�MHZ��Rw+|�)�D�qKєW2W��e����j�O{F|��aM)xh���ʴH��-�IF�3捩Gِ\0\0\0\0\0�q���d-�B\\*�u���D�Z��nǮ~�4��gfG�y�N��-m�ݯ�m(ָ����m����WW���IoԺ������w2I��HX%�Lza�֞X��Y��;�$�D�Q{}�54;9�)k3S���2%-|Ĕ����\0��E�ɧT|+2�B��B�H�U�y���������K>Yk�[\ZYN ��\"ZyTGV\ZĢ5MGR�OO��&7��� �;_��Ou��[7���O��?�0�Rv�Vg#۔��+���E�1�[ٲ\0\0\0\0\0��;X��\Zqz��qJ����2c:�#��vIK^Fk4�B/�X���﹑�E4�eh�M8�8(�:�\0s2ia���{���CT��\0XR�J��������dz�]���d��݉� � �,�1r�~��6���DdG��OB�g��&f)��e�+/�4�T�Q�j�����Ѱ�~w��c�8���ڤF�gT�ճ�G�[�M\')��?J�UDR)6v[�#E3���$n��=�J��K�\'�D��q1�8��򄭴��7�(��U����ueL�����t�v2ҤT�K�[o���\0>}FH\0\0\0\0\0B��\0��Lv�x(Ʋ�9�3O\"\no�H�P��QiJU�;G�\\/��e>����oQ�{hnW�^\0�S���8��{�\"Λ��JK\\�*��G��1)|��\'s6��@��M���o+@�:�euw;uY�*9���r�Ol4��YL��Բ3Q#�\"5�E}�q�SS��G�HRb]{~&�B\n�q@�wgv�Qg_��=�rcW6�EP�j\"؊��v�ׇv�{:׎�V\r��}L��dD[u��_^� ?!y֑p<[L�^�Z}�ӵ����k;[cJ.ɖ6���鲔��$/D��Y[�kwR��D���\0\0\0\0�.n���Nn��v\rv�sv�upVV6�;o̥����M���\'�x��8x�-��a�����ES������l13K� �Yx%���rJ��rR�Y�5B$�e�=4�_��ć�&��N\Z_�����k���H��Q;wdW/+�^&�����)5���i�(���-�Z�<9sN����.��j�M� �#�p�9��h���ԥ�i�ʼn�Q=&�U�O�Qn�Q�Ԕl�a��\\�.��\\�\0�㴒�Mʮ�%y�2=�ޟ�]Z��B˩�J$��\0-��F��X� R2�b���X�01�[�#s;=�\Z�\r&��QiOwM Z�<�dJ2�ڀ��#��o��pM�Nӷ�w��8m�2��i�$��d��m�$E��jD�����E��2���iC;�iwN1���C����59��\"�~��O]����O�[��^T�f�1��!����q�2yq��W���K�Q�ө���y����\0\0\0\0��U��K�r�X�2@��?bp�L�r+��d�057x������[S#Y���{m�̣4.��+�o5u�S8���F��M2����h�/m2^��*+j2L�L���3,�}D\0���F�>�-:�i)t���Y��.�Ϻ�f��bV���Z�:Z��`W%T���3�>I��>Fd���F�-$�j#;*O$��)R�])}����[��d�\0 z���~B�пgG 4�L��=c��&n��3κu�6��[�8�e��T�Ҕ�.GUF�(�G��$^J�ڑ�\r��ſ���q��خ��wZ���\r���n�������ÙL5>wv$Rb2{UB�?H ���LAF�Li%`���Tjѫ�Q��\0>�������\0\0\0\0��������SG �M%�B�I�y�[�뽊G?t/ǘ���P����4�% YT*���\">�a&}b��pij��a־x�[W�n�����b\' +�H�%���L��3Ȭ�NC+RW��\nb��L�+�`\0\0\0��!�MWp�᭭gk�&�4q��SGe:O�-]1�Iw�#27������7�Q��%!�T2�C����0Ҵ>�MY�V8�#ch�V(��vv������TN-�������~=I[��W�M5㿀�rn�u��e0�[�Ν���X�$��!D��B���;0z>S%&Fxʗ1+cRղ�GB���)�r�]/q Ïz ύ����9��U/%,��/S�rC��j(�\\�d��$D���eQ�ȵ��}B��j�+�n-�-��ܧem����3���뷐� \0�����q65�YRGX���:a:�\\�\'{V(�C�Ӫ���\Z����.�7p�����4�2��cZQz���_j6��{s}�A�Rrҋ������ӗx�^_է�$�R�#�N��+j}�\Z4hQ>�[����E�\0��� �\0\0\0\0��R�t�wؾ~�{�|�\0��0��� ��\"8\"M��/�j����9E��-�`អ\r-�[�,�&��oo��L��)&��\r1E���E)<���q�d�ᛨYE���p�i�G#�Z����/{�ۢ99�1��$%,֪q�H\"˨T�q���R����\0\09_Ʀ]u�1�\"@�Z��徕�M�ͿS#�F��k-��\'c�^�����bgYшk�Rw�_��$ؿ E� Ϛѹ���c/nA+����=�b/\n#܋a=@\0\0\0\0\0�_��\0���uq�+p��Rb��if�H�F�^ʱ�����j}٩�#55�S����)�l�\"yP���������!�\0ͮ/1s�p���q4����?�۩�4�^��_2���De�\"�?�k�͛��F�ԠGZa���uB�^w-�� B�G���:l_��zK�\0\0\0\0\0\0�AX�/�������,�zO���n�{��i���l��O���q?~������\0�]]Ľ�Ҟ�� �B���?�(��\\levo\'��߮�l�������}�ؙG82����{��䏯��O]�������������\0\0\0\0\0\0D��~4�\'���!���FQ��{sW\\D�͒7-�s���^�{y�m�����8��J�(?�$mh{Ev\'6����w⍪G/�Df[m�c��8�\0��ǿ�nZ@�Դ�o^ٯ(9��ܙ\Z��|�]����TG���fFC��\0\0\0\0\0\08s�|kBQś��ޭ*A�Z�����:3�N�ߦ��e鷡$�w\0\0z*R�z��������\Z���gW\r�S �\Z�U�kE���ks����Cÿ���h[�M��߀\0\0\0\0\0\0��׎JO��\ZO;�\'�0�g ���ynwd��OM� ���n\0\0\0 tQ*E�ב����ˡ �\0\0\0\0\0\0-hթJ�Z4N��[S=�#2�#��[}O�g�\0\0\0\0\0\0\0\0\0\0\0��',4,0,'','','',''),(47,0,12,'75859b10bb58e506','777ac66400f3fef5ff42189840387ede','2017-09-07 09:13:05','2017-09-07 09:13:05','','','Contact Photos','15048d33e71544a25a6dd13bb081c78f-4.jpg?ts=1504775545','image/jpeg',80,80,2703,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0P\0P\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ��\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#���3Sa����\0\0\0?\0��M5AQ\0��j�����ǯ<����_�T�@Z��i����9���׾�*��)��{ڥ����J�Y�[6h��e� �,u��$�1����t�KvD3%���g[I�_:kƵ�J�u��B��7��\'vX3i�Rj:�G���*�e�\0��a��M|�i������:{Lٞ�w,dRt� aK�B�f���� �5���Ô��5��b�%֡��Z�uZꅊqNL�����2Õ�oY↚}L�VB�\0���0���ւ7s\0�D�{I��N\n_�J;�)Tʮ>��)���UR�U���V�PlЏ����`�lD4S�M�8��\r�fѲ*H��i�P)CP���O 3�{�a��%y��V�)��yn��YiE�3�I��Vh����; 8�ݴʛG]��5�b~�=I~}��vݐr��(��C����/m��X�H�rN*ߎ��\\==Z�Q�ed���{��\\�����n��X�^¹Z���2�TƓ�e�%W\"���\"��wFVe�L�8$���@K�aM`9G�zv�i�e���s���^�q�Y���9���9(h��9�H��F�`�kd�)�����I$B��r�\n\"n5�����}.�� 9�l2�m&�\n�b����+$V�`\n�\0++���9W��0�h�q�q�������G�\0G��Z�~. ��׬c�����8�o\r��O��5�b61T\ZEW�%B�NnTJU2gfܤ��lu遅-�r�߲�}M�{�2۞,�[�:�\0^2�֫��A��DH.�a<��h_/���4�]W�R|��\'�ỴN��*�.���Ed������Q3�C��S\0�DYV�vÑ>~�X{��\'?���,5C�f�K�W�2�}ߝ$���+�O��0T�\'cX����X��l���f��q� 0�# �8�U(+�*�e �r�a`��[�J�p���rw휢���V��E�+$�z�!��]�=�j33WۮUȇb����7f j,����׳>�NPH�G,y���Q�\r� ���u��:��%Ü�hƙi����\'�l;��\"WI܅4�R+E��n��Q�*?&a%:��6�\rU�M-��(\0\08\0�?�\\��^���ᝠ�+�����>����*�)��1�P�P���a�$�b�:�V�p0���97M��LN�!a-���oX�\0���y�L����Y#*���_n�T~%{����]NI${L�quI7i�0���q�iw\'M-��\Z�^���<���]/)�u� NxU �m���X{Ԭ�FY�c(��Vk0Ml��Y�l��Df]�O�u:��Y��R�0�+�Z�Z!�\rv��[F���G&�(��-�D4j�h��\nR\05�۾ۍSw{a�e�;qZ���_ʴD���d�r�6�ͺ�T�=�J )�H(r&�� &�����n�k��� �� bXBٓ��GmY>� E�l�\'�x�|�5�\"F�r�O���&�� �y%^\Zn�(�:ԓH�*�1{@b���^���\\k�!令#��\0���#�X�3]Rz�l�� ��\0�� �#�\r�D1t�[gfZB*�Q���\"q*�у�j�j$�V�ZbE�� �YPQ�8��~1�$ s8�Xh���FD�G7M�|ls��ѓ-QI�6mRI�V�$� �$�P�}4��.����!�^�5\n�⾪���\r��f�YT�}ګEM�|�U�s�c�=�G�m������K;Lcw��O�0Q�=�{h��c):Ě cr�\\�������n귺��{�i��U���_7�&��L��7)ӷ~\r�K����^f�X�,%_q8Z�)��+����_��#�v,��d���S�ѓդ��y��y���\r��?��^Rv��Y��vS�b�L�>����E�e ^/q:V!�Y���d7��M4�V }��+�J��ض�� WH �K*��$ y*���Q����1J��#��M�P��H�`!C���~�T��7<����_�]CL�~I����oݒ���U��\0uE������}� �V֘~�� �$R�����M4�P�C�����/a3-�dLn.����c��dۛώЌb�8�0�b鮸4nN�WJ��uW�ި�c�Q����rd�\" ��TJ\0*G���i���͸�+�E1vF�hG�敲�MU�uQIC\0qɓ/!��ֿ��',5,0,'','','',''),(48,0,12,'75859b10bb58e506','777ac66400f3fef5ff42189840387ede','2017-09-07 09:13:05','2017-09-07 09:13:05','','','Contact Photos','15048d33e71544a25a6dd13bb081c78f-4.jpg?ts=1504775545','image/jpeg',48,48,1755,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \00\00\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n��\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa��\0\0\0?\0���3�c�s�ǜ�?�1���{�pK����]�_��r��\0BsK�]�n 4d��fZ%ӣ� ³+�r0�m�&��i��-��jA�g>���%hM����%�C¿p��O!����6���x�i�e�5���H�)LW�l�e����!k��:�T���h�q2ڰ���NݴM�j�6�A��7�?qY��ˌ�g�Z�[D�En�&Z]-�mnB��a!�[v\\�h��2BaRI?����<~/�y=d�G������3�JM�[ݨ��` ��ԭy���N��\0ɚȥ֐Y�ʈ���O`=�y��| Ҽ�&�-F�mf��+`<�q{�*En՘g���$��Y��`��P��#I%�;�<�z�+��<��#ۣ��g��dl9�n��&���ek�ٵ���)X�C�dz�D����0�N%HiI�m���R/hvߠ��)5>B�~N��M�X�}��\']�؜�\Zlcޒ�Z��FQ.6��?` �/����>�>J[X㦣�`�3���l8m%X<�=�j�2.�L2�1\"����D�7�0�Ĉ2�+�I1��Kw����n^i>%T%�cƺ�x�]�l�_�/�C��X�JR�B�y��Ÿ�Q-�+μ�+ug�\\�y�J7t���{2U0�OH��m�YF]q�Z�a�$f�d�B����2�F<��c.:�e`��Z�_���|������)�n|���KQi\Z�WK��y��#Y, 6��6c&,S�MP�Δ�3ę��;F�imE�M�I�MiF��܎L��N�W����J!O�Vi��2zA\n(�$�G�#\n%�{�^s*]���p��\\�2n�Et��ܬ�fݏ�Z\Z�m\0�:��2%�.�؁D�3)�[F������a ���],2 ]�ˆ�ۮ�� �Z�ϯ*kj4=���N1�����-c��;l�:�@�Ϋ+�������O�WW��!א^EJGNFG�Ü$�L�B�FI\0CE�x��C42�Z�$R�u��}����ZB��c=/>�z������XK�3x�q�,�8�+���-�#��?*\ZF�����V)/%xR3�e�0�(b0�Š;# ;Kl��\r%�Ye�cCM6���\'JP�%8�1��z�Wm�J��e�Z⁜�[�&+i!�.>Vz8��X�E}+d�\r\0�!�P��eաi�U�tv��O�;}qj�e0åi��?~A�-��٘H �q�-�b> �\Z�+9�#7�x�1�\Z�\Z�e���=`�t,���\n�\0\"\nn:x%zs�Ϥ����?�z|��գ�c���u��S?����K��R+1Uh�a���hTc�%A��1�>?�B�\0����',6,0,'','','',''),(49,6,13,'75859b10bc4f03c7','f958f83dd2af4c30b30045dfc6ff0718','2017-09-07 09:17:49','2017-09-07 09:17:49','','','Contact Photos','4b7db531ad1920a7cb8fb76aed46ddd9-4.jpg?ts=1504775575','image/jpeg',175,175,5493,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0�\0�\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ��\0B\0\0 \0\0\0\0\0 !\n1A\"Qa�q�%23�#$&5BR����Es�����\0\0\0?\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Ն����X\Z\'���p|L�sN���}�Y%ZR|�(�J*I&+�rJ#�yI)%l�Z�,:��i�(��ϥ�)���J�����*hχo�мI����$�Dj-� (�C\"�cI(s���_�L�:g�� `w�I����9�s.w�Y���a���C\"3:I��e�~��g,�ڮ�Ϩ�6�&�t�t��/iK��xv<�v #=�{�$�ѹ�Idу=��#�}�G���!�\0\0\0\0\0\0\0*|z�B��6�Zp�]�s\"�A�ڝ\r�E\r��{�b��Z�HI��j��>Eq�E�˒S.:t�7�Vg�5�u;��Ys=�YFZ�Rk��}����j��ʮHnl�Ifh���M6&\";M�DD�]��¿SR��c�h�B��{��t��ƤG��V�Mʽ4$�&2��\"����%���{̈}9$����489hۆ�� @�e��崭�\Z��ط<��m�(v&�Ne{�ȵE�qQMI��\Z�uO�h���D<�\0\0\0\0\0\0\0qۍGfn\Z��b��R���9~�2w���o\nstMT�x=d��>��H��l�MT���:�!M2��a��L��c��/�Ri��Cr���������T�\Z�uΥ$�F�IN��춆�q�5��S�,-B��c�^�op�}AW�8�Y)�c?��T��2Fi��դkI��$b�Փ�鐸�A��\\<���F��h�ŭ�ܿIk�)�3^�N�ٓ�wu]��k�U4�J���8�W�*�F�7�`^U:V��ң�I%�̷?��|����C{�Oh�[�:r�qğ��� ����0\\���\Ze0\\�ޅ\Z��.����RvZ��NOI\n#�����O v���-ik�F�����o�;�E�I����ձ��5�\Z�Rv!,��\\4;����MyE�3��t�a9��B��:̌�[�X�T���h_\"��r4k��*�F\\��U:��M�z�\0�u#�\0�C�\0\0\0\0\0�>�f�r���Z\\kp�qҾ.oU�u������q-S�CJK��PSǬf�2JJ��G�D Ym���+>!҄�^�\n\'��/{} �W7��-K;�K���kI�� (�;T�F��\r��H̖J�\0��J�sj� K��\0��m���p֫WV\'�\"IٹjTlx�;ҤO,R��Ԑǖ� edK����:�8���<)5h�y Ó�w ��r*-�0�������Bf��J& u:fIV�r�:rjh.p�甴���9� M��H���>���듲pg�BҲ4:{-��RT�P�MHZ��Rw+|�)�D�qKєW2W��e����j�O{F|��aM)xh���ʴH��-�IF�3捩Gِ\0\0\0\0\0�q���d-�B\\*�u���D�Z��nǮ~�4��gfG�y�N��-m�ݯ�m(ָ����m����WW���IoԺ������w2I��HX%�Lza�֞X��Y��;�$�D�Q{}�54;9�)k3S���2%-|Ĕ����\0��E�ɧT|+2�B��B�H�U�y���������K>Yk�[\ZYN ��\"ZyTGV\ZĢ5MGR�OO��&7��� �;_��Ou��[7���O��?�0�Rv�Vg#۔��+���E�1�[ٲ\0\0\0\0\0��;X��\Zqz��qJ����2c:�#��vIK^Fk4�B/�X���﹑�E4�eh�M8�8(�:�\0s2ia���{���CT��\0XR�J��������dz�]���d��݉� � �,�1r�~��6���DdG��OB�g��&f)��e�+/�4�T�Q�j�����Ѱ�~w��c�8���ڤF�gT�ճ�G�[�M\')��?J�UDR)6v[�#E3���$n��=�J��K�\'�D��q1�8��򄭴��7�(��U����ueL�����t�v2ҤT�K�[o���\0>}FH\0\0\0\0\0B��\0��Lv�x(Ʋ�9�3O\"\no�H�P��QiJU�;G�\\/��e>����oQ�{hnW�^\0�S���8��{�\"Λ��JK\\�*��G��1)|��\'s6��@��M���o+@�:�euw;uY�*9���r�Ol4��YL��Բ3Q#�\"5�E}�q�SS��G�HRb]{~&�B\n�q@�wgv�Qg_��=�rcW6�EP�j\"؊��v�ׇv�{:׎�V\r��}L��dD[u��_^� ?!y֑p<[L�^�Z}�ӵ����k;[cJ.ɖ6���鲔��$/D��Y[�kwR��D���\0\0\0\0�.n���Nn��v\rv�sv�upVV6�;o̥����M���\'�x��8x�-��a�����ES������l13K� �Yx%���rJ��rR�Y�5B$�e�=4�_��ć�&��N\Z_�����k���H��Q;wdW/+�^&�����)5���i�(���-�Z�<9sN����.��j�M� �#�p�9��h���ԥ�i�ʼn�Q=&�U�O�Qn�Q�Ԕl�a��\\�.��\\�\0�㴒�Mʮ�%y�2=�ޟ�]Z��B˩�J$��\0-��F��X� R2�b���X�01�[�#s;=�\Z�\r&��QiOwM Z�<�dJ2�ڀ��#��o��pM�Nӷ�w��8m�2��i�$��d��m�$E��jD�����E��2���iC;�iwN1���C����59��\"�~��O]����O�[��^T�f�1��!����q�2yq��W���K�Q�ө���y����\0\0\0\0��U��K�r�X�2@��?bp�L�r+��d�057x������[S#Y���{m�̣4.��+�o5u�S8���F��M2����h�/m2^��*+j2L�L���3,�}D\0���F�>�-:�i)t���Y��.�Ϻ�f��bV���Z�:Z��`W%T���3�>I��>Fd���F�-$�j#;*O$��)R�])}����[��d�\0 z���~B�пgG 4�L��=c��&n��3κu�6��[�8�e��T�Ҕ�.GUF�(�G��$^J�ڑ�\r��ſ���q��خ��wZ���\r���n�������ÙL5>wv$Rb2{UB�?H ���LAF�Li%`���Tjѫ�Q��\0>�������\0\0\0\0��������SG �M%�B�I�y�[�뽊G?t/ǘ���P����4�% YT*���\">�a&}b��pij��a־x�[W�n�����b\' +�H�%���L��3Ȭ�NC+RW��\nb��L�+�`\0\0\0��!�MWp�᭭gk�&�4q��SGe:O�-]1�Iw�#27������7�Q��%!�T2�C����0Ҵ>�MY�V8�#ch�V(��vv������TN-�������~=I[��W�M5㿀�rn�u��e0�[�Ν���X�$��!D��B���;0z>S%&Fxʗ1+cRղ�GB���)�r�]/q Ïz ύ����9��U/%,��/S�rC��j(�\\�d��$D���eQ�ȵ��}B��j�+�n-�-��ܧem����3���뷐� \0�����q65�YRGX���:a:�\\�\'{V(�C�Ӫ���\Z����.�7p�����4�2��cZQz���_j6��{s}�A�Rrҋ������ӗx�^_է�$�R�#�N��+j}�\Z4hQ>�[����E�\0��� �\0\0\0\0��R�t�wؾ~�{�|�\0��0��� ��\"8\"M��/�j����9E��-�`អ\r-�[�,�&��oo��L��)&��\r1E���E)<���q�d�ᛨYE���p�i�G#�Z����/{�ۢ99�1��$%,֪q�H\"˨T�q���R����\0\09_Ʀ]u�1�\"@�Z��徕�M�ͿS#�F��k-��\'c�^�����bgYшk�Rw�_��$ؿ E� Ϛѹ���c/nA+����=�b/\n#܋a=@\0\0\0\0\0�_��\0���uq�+p��Rb��if�H�F�^ʱ�����j}٩�#55�S����)�l�\"yP���������!�\0ͮ/1s�p���q4����?�۩�4�^��_2���De�\"�?�k�͛��F�ԠGZa���uB�^w-�� B�G���:l_��zK�\0\0\0\0\0\0�AX�/�������,�zO���n�{��i���l��O���q?~������\0�]]Ľ�Ҟ�� �B���?�(��\\levo\'��߮�l�������}�ؙG82����{��䏯��O]�������������\0\0\0\0\0\0D��~4�\'���!���FQ��{sW\\D�͒7-�s���^�{y�m�����8��J�(?�$mh{Ev\'6����w⍪G/�Df[m�c��8�\0��ǿ�nZ@�Դ�o^ٯ(9��ܙ\Z��|�]����TG���fFC��\0\0\0\0\0\08s�|kBQś��ޭ*A�Z�����:3�N�ߦ��e鷡$�w\0\0z*R�z��������\Z���gW\r�S �\Z�U�kE���ks����Cÿ���h[�M��߀\0\0\0\0\0\0��׎JO��\ZO;�\'�0�g ���ynwd��OM� ���n\0\0\0 tQ*E�ב����ˡ �\0\0\0\0\0\0-hթJ�Z4N��[S=�#2�#��[}O�g�\0\0\0\0\0\0\0\0\0\0\0��',4,0,'','','',''),(50,6,13,'75859b10bc4f03c7','f958f83dd2af4c30b30045dfc6ff0718','2017-09-07 09:17:49','2017-09-07 09:17:49','','','Contact Photos','4b7db531ad1920a7cb8fb76aed46ddd9-4.jpg?ts=1504775575','image/jpeg',80,80,2703,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0P\0P\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ��\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#���3Sa����\0\0\0?\0��M5AQ\0��j�����ǯ<����_�T�@Z��i����9���׾�*��)��{ڥ����J�Y�[6h��e� �,u��$�1����t�KvD3%���g[I�_:kƵ�J�u��B��7��\'vX3i�Rj:�G���*�e�\0��a��M|�i������:{Lٞ�w,dRt� aK�B�f���� �5���Ô��5��b�%֡��Z�uZꅊqNL�����2Õ�oY↚}L�VB�\0���0���ւ7s\0�D�{I��N\n_�J;�)Tʮ>��)���UR�U���V�PlЏ����`�lD4S�M�8��\r�fѲ*H��i�P)CP���O 3�{�a��%y��V�)��yn��YiE�3�I��Vh����; 8�ݴʛG]��5�b~�=I~}��vݐr��(��C����/m��X�H�rN*ߎ��\\==Z�Q�ed���{��\\�����n��X�^¹Z���2�TƓ�e�%W\"���\"��wFVe�L�8$���@K�aM`9G�zv�i�e���s���^�q�Y���9���9(h��9�H��F�`�kd�)�����I$B��r�\n\"n5�����}.�� 9�l2�m&�\n�b����+$V�`\n�\0++���9W��0�h�q�q�������G�\0G��Z�~. ��׬c�����8�o\r��O��5�b61T\ZEW�%B�NnTJU2gfܤ��lu遅-�r�߲�}M�{�2۞,�[�:�\0^2�֫��A��DH.�a<��h_/���4�]W�R|��\'�ỴN��*�.���Ed������Q3�C��S\0�DYV�vÑ>~�X{��\'?���,5C�f�K�W�2�}ߝ$���+�O��0T�\'cX����X��l���f��q� 0�# �8�U(+�*�e �r�a`��[�J�p���rw휢���V��E�+$�z�!��]�=�j33WۮUȇb����7f j,����׳>�NPH�G,y���Q�\r� ���u��:��%Ü�hƙi����\'�l;��\"WI܅4�R+E��n��Q�*?&a%:��6�\rU�M-��(\0\08\0�?�\\��^���ᝠ�+�����>����*�)��1�P�P���a�$�b�:�V�p0���97M��LN�!a-���oX�\0���y�L����Y#*���_n�T~%{����]NI${L�quI7i�0���q�iw\'M-��\Z�^���<���]/)�u� NxU �m���X{Ԭ�FY�c(��Vk0Ml��Y�l��Df]�O�u:��Y��R�0�+�Z�Z!�\rv��[F���G&�(��-�D4j�h��\nR\05�۾ۍSw{a�e�;qZ���_ʴD���d�r�6�ͺ�T�=�J )�H(r&�� &�����n�k��� �� bXBٓ��GmY>� E�l�\'�x�|�5�\"F�r�O���&�� �y%^\Zn�(�:ԓH�*�1{@b���^���\\k�!令#��\0���#�X�3]Rz�l�� ��\0�� �#�\r�D1t�[gfZB*�Q���\"q*�у�j�j$�V�ZbE�� �YPQ�8��~1�$ s8�Xh���FD�G7M�|ls��ѓ-QI�6mRI�V�$� �$�P�}4��.����!�^�5\n�⾪���\r��f�YT�}ګEM�|�U�s�c�=�G�m������K;Lcw��O�0Q�=�{h��c):Ě cr�\\�������n귺��{�i��U���_7�&��L��7)ӷ~\r�K����^f�X�,%_q8Z�)��+����_��#�v,��d���S�ѓդ��y��y���\r��?��^Rv��Y��vS�b�L�>����E�e ^/q:V!�Y���d7��M4�V }��+�J��ض�� WH �K*��$ y*���Q����1J��#��M�P��H�`!C���~�T��7<����_�]CL�~I����oݒ���U��\0uE������}� �V֘~�� �$R�����M4�P�C�����/a3-�dLn.����c��dۛώЌb�8�0�b鮸4nN�WJ��uW�ި�c�Q����rd�\" ��TJ\0*G���i���͸�+�E1vF�hG�敲�MU�uQIC\0qɓ/!��ֿ��',5,0,'','','',''),(51,6,13,'75859b10bc4f03c7','f958f83dd2af4c30b30045dfc6ff0718','2017-09-07 09:17:49','2017-09-07 09:17:49','','','Contact Photos','4b7db531ad1920a7cb8fb76aed46ddd9-4.jpg?ts=1504775575','image/jpeg',48,48,1755,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \00\00\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n��\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa��\0\0\0?\0���3�c�s�ǜ�?�1���{�pK����]�_��r��\0BsK�]�n 4d��fZ%ӣ� ³+�r0�m�&��i��-��jA�g>���%hM����%�C¿p��O!����6���x�i�e�5���H�)LW�l�e����!k��:�T���h�q2ڰ���NݴM�j�6�A��7�?qY��ˌ�g�Z�[D�En�&Z]-�mnB��a!�[v\\�h��2BaRI?����<~/�y=d�G������3�JM�[ݨ��` ��ԭy���N��\0ɚȥ֐Y�ʈ���O`=�y��| Ҽ�&�-F�mf��+`<�q{�*En՘g���$��Y��`��P��#I%�;�<�z�+��<��#ۣ��g��dl9�n��&���ek�ٵ���)X�C�dz�D����0�N%HiI�m���R/hvߠ��)5>B�~N��M�X�}��\']�؜�\Zlcޒ�Z��FQ.6��?` �/����>�>J[X㦣�`�3���l8m%X<�=�j�2.�L2�1\"����D�7�0�Ĉ2�+�I1��Kw����n^i>%T%�cƺ�x�]�l�_�/�C��X�JR�B�y��Ÿ�Q-�+μ�+ug�\\�y�J7t���{2U0�OH��m�YF]q�Z�a�$f�d�B����2�F<��c.:�e`��Z�_���|������)�n|���KQi\Z�WK��y��#Y, 6��6c&,S�MP�Δ�3ę��;F�imE�M�I�MiF��܎L��N�W����J!O�Vi��2zA\n(�$�G�#\n%�{�^s*]���p��\\�2n�Et��ܬ�fݏ�Z\Z�m\0�:��2%�.�؁D�3)�[F������a ���],2 ]�ˆ�ۮ�� �Z�ϯ*kj4=���N1�����-c��;l�:�@�Ϋ+�������O�WW��!א^EJGNFG�Ü$�L�B�FI\0CE�x��C42�Z�$R�u��}����ZB��c=/>�z������XK�3x�q�,�8�+���-�#��?*\ZF�����V)/%xR3�e�0�(b0�Š;# ;Kl��\r%�Ye�cCM6���\'JP�%8�1��z�Wm�J��e�Z⁜�[�&+i!�.>Vz8��X�E}+d�\r\0�!�P��eաi�U�tv��O�;}qj�e0åi��?~A�-��٘H �q�-�b> �\Z�+9�#7�x�1�\Z�\Z�e���=`�t,���\n�\0\"\nn:x%zs�Ϥ����?�z|��գ�c���u��S?����K��R+1Uh�a���hTc�%A��1�>?�B�\0����',6,0,'','','',''),(52,2,14,'75859b10bc511276','ed2cf7a93daffb15532a78b261ac4685','2017-09-07 09:16:08','2017-09-07 09:16:08','','','Contact Photos','6.jpg','image/jpeg',175,175,5486,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0�\0�\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ��\0B\0\0 \0\0\0\0\0 !\n1A\"Q�aq�%23R����#$&5B�Es�����\0\0\0?\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Ն����X\Zg���p|L�sN���}�Y%ZR|�(�J*I&+�rJ#�yI)%l�Z�,:��i�(��ϥ�)���J�����*hχo��>$���Œd \"5ɐb��o���9���/צF�3�qN��;뤂��������9�;߬�Kka0���Z���$�Բ��Ob3�g�Wqg�U�l�W�\0ĺQ������<;J;��剽ŒTh܋}��h�����>�#����\0\0\0\0\0\0\0>=]�Xwg-8i��9�u����N�梿���ݱ^�-l$$��5Rt�\"�����e�)�:G��+3Ϛ�ͺ���,���-d�5�ܾ��n~5SeW$76sS$�4SME������\"\"O.����_��)YŽ1�\r�X!M\nm��y�Kl�R�#�k�M&�^�o|ML}Ij���O��D>��OJ��\Z�m��i��v2��r�VӍB�l[�rd��D�;k�2��dZ���8�(��$���h:�״y}`\0\0\0\0\0\0\08�ƣ�37 } Nsſ�]�E�c pJL�򄩵�œ�U<��Y)�O�&�$.�!E�Q%��N�C�SL�8�d��#z��9�㔚g,�ܮ��G w�7GggU)F�]Es�I-��DS�:{-��e�|jw�K P���䗴[�<�PU�&�Jw���iU4�L��\Zno5i\Z�j���ud�:d.-�n��=9�tр��Z!�kj�/�Z��rL�׹S��d�]�Wg�\Z��M(R���%�#劰Q����N��j���ERI�3-���_=�#���=�����q\'�uc���L-e�ƙL#��F�t�����G�����䓓�B��eEk2=����ZZ�C���������3����xdRh�#\'�5ldE(�nF�ԝ�K/��\r�9c���^QG���4�&NjP���#=��:�)<2�ȧ�܆M\Z�3J���\"z�N�{�n���]H�\0�!�\0\0\0\0\0Xl3W9_�.5�W���_7����v��츖��㡥%�k()��3Q�%%MJ#�\",��|h��B{�i�������c+��r��%��ɥ�Mj5���Z��V#Isӆ��$fK%M\0j�t��5s����n6���e8kU��ݑ$�܉5*6���듲pg�BҲ�:t�[I줩��*���¤�V�pS�◣(�d�Bŗ4B.� �su=�� =�4�ᢙ�KAeZ$qu餣}��Fԣ��\0\0\0\0\0\nY��No��!�N��j{\"F-zy�c�?s\Z ��I3�#̼˧Q������\r��k\\]���6��Pꫫ�Ur$��]MIN�^|��$�^u�,ݦ=0��O,Vt,�p���]�I(���F\Z��̔�������Q��bJID�l�\0����dӪ>�o!Sg�[$i*��<�\\Qng|Q�u��,�,�tu�-<�#�\rbQ\Z�&��v�����c����٧��u�-����\'���B�b);C�3����ha��Kr\"ۘ�r-���\0\0\0\0\0K��y�8�qa��^���1�[�؍�$��#5�K��,JL���Ȍ��a��L��s�&�[d��1\r�צ�K�����ɧ��=��\0Dx��a�Ó_Ud�ǁ�5%�~��<��&��ܾ^�G�⏚��_�K�ω�f\\O�2ث�����=�t��2�7 ���36��FffJw���&M^DDV��\0\0\0\0\0���A�������-G���M�:]��\Z�N/&�ɛ����3:Rv�_��?]����%0���^�w g�h��F˭�3橯c�`��j�G�f=h�R� Ȫn������G)#I�&e��6�96\0\0\0\0\0\0���L4/���6v91��!�\r�)�,�~*�Rg#UR�ij�\"��rN������P�kJ;�m�>�b���d&X�����Fޭ�b��48�K�K�T\\�h^�Q̶#I\Z�hWe+_ͺ���ɧI;�\n�F��.Vw)7|<�f�d�O�̚Xi���>��U-��R��/��1����.�t��2fs�n���iE��u?b�D�V��2#�Ca��u3��3�q2����j�w���Z�����qN?;�^��X���R#g3�Dj�֣��&�����\nI*�)�;-�����x�j�7A��%Gi��ŢV�8��TN�BV�ER��e�*��������W�ZMQ�i;iR*h��-����\0�>�$\0\0\0\0\0�!}���Lv�x(Ʋ�9�3O\"\no�H�P��QiJU�;G�\\/��e>����oQ�{hnW�^\0�S���8��{�\"Λ��JK\\�*��G��1)|��\'s6��@��M���o+@�:�euw;uY�*9���r�Ol4��YL��Բ3Q#�\"5�E}�q�SS��G�HRb]{~&�B\n�q@�wgv�Qg_��=�rcW6�EP�j\"؊��v�ׇv�{:׎�V\r��}L��dD[u��_^� ?!y֑p<[L�^�Z}�ӵ����k;[cJ.ɖ6���鲔��$/D��Y[�kwR��D���\0\0\0\0�.n���Nn��v\rv�sv�upVV6�;o̥����M���\'�x��8x�-��a�����ES������l13K� �Yx%���rJ��rR�Y�5B$�e�=4�_��ć�&��N\Z_�����k���H��Q;wdW/+�^&�����)5���i�(���[���xr�I�W�+�]}f,�\n��^G��,s������J\'8ӫ��zL+Z�%l����$�Y�(�:���]��6��\0e�i%v��]�J�d{o�?�$��{�;�SؔI-�[l;��Ǣ���e�Ŏ3l�b`cn��F�v6{\nm 퍍��JZ�������\\��dJ2�ڀ��#��o��pM�Nӷ�w��8m�2��i�$��d��m�$E��jD��M�r\"�b�vKȴ���4����s���܈�\Z��S�E�NU\'����|�{u���H�n��0B��a�G�\'�w~�x�-���5�:���������@\0\0\0\0|�(�\\����-e�s$ c�\' 4�W\"�+H�Sw��:��%�25�Ȉ׶ܜ�3B�\r���W\\e3���4hё��/�Z�q�&����%�-¢��$ʄʺiS2�g�@ +��m��RӭV��NQ\\�5�[B챌���h�x�%kk9�����1&rQ%Hj���p��՗��h����tזf���,����a��\"��ڪA�@d�&�b\n4�cI+\0-��R�V�^����_g��G�<\0\0\0\0Wc����3�M214��V9&�n���)�мsc73MB/ǬD�<�%eP�JX������������G��Z��!m_U���X:�,m��0�y#𖦳U2SD�\"�9 �I^��)�#�\r2��]�\0\0\0<;�~�bj��\rmk;^I5��]2�8�)�~�j�2K�!��d d�����FI) ���]�_���8q�����:j�:�űEڱF����n`���=Z�qmL����}��$����J��J�Zi��w�h�tK�->�)�����t��%\Z�y&��\"$�r0~Ʊك��)23�T��[\Z����:�L�L��*�{�f{�^|m|D5��Wt�R�y)d��z�X�.�QD��&G\"$����#�Y�T/�R���B��rMŵź��쭶�}�>�{���v��\0\0>_��;.&ƹ *H��6�L\'R �$�j�huzuQ�vCQ���EҦ�:y}�ƚ�U�,kJ!�Y>}��Fк/no��3�NZQw35��r��+����d�JRDv�е�mO��F�\n\'�k~�|�H��3�8\0\0\0\0\0c�GT��/]�/����_?��F�9�2�GI����MZ��1�\'(����l3�A��KuŒ��RM��4��w�$ԙ!�(��RH�\'���~.3,���3u (�s�@#.m1H�wK[���:��vtG\'9&2�D�$���N0�Yu\n�n4�:J_���# \0+��ˮ��&8�H\Z�W���ҾSi����dr��؍e��d�}K���{�L��:1\rqjN���ě�(����Z735��T��_�s��\0\0\0\0\0\0��Ɣd�~�?T�\0��2}��nj눝�F���� ��o1-����y��� ]��č��h�����v�9n�Q�H��Ȍ�m��{���>��m� H:�����5�;�{�#RT��K��y~���2����v�\0\0\0\0\0\0u�hJ8��=�U�Ch<�^;������F �[���L�6�$��\0\0EJ]�]�z��2��ƣ�s��zT�8ƭ�{\Z�x������*P���}�� c�鷐��\0\0\0\0\0\0\Z���I�7�I�wD�\0& �q���-Î�>�鿡���\r�\0\0��%H���?�����yt!�\0\0\0\0\0\0��\Z�)V�F�ַ�jg��f^D{� o���x\0\0\0\0\0\0\0\0\0\0\0\0��',4,0,'','','',''),(53,2,14,'75859b10bc511276','ed2cf7a93daffb15532a78b261ac4685','2017-09-07 09:16:08','2017-09-07 09:16:08','','','Contact Photos','6.jpg','image/jpeg',80,80,2703,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0P\0P\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ��\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#���3Sa����\0\0\0?\0��M5AQ\0��j�����ǯ<����_�T�@Z��i����9���׾�*��)��{ڥ����J�Y�[6h��e� �,u��$�1����t�KvD3%���g[I�_:kƵ�J�u��B��7��\'vX3i�Rj:�G���*�e�\0��a��M|�i������:{Kٞ�w,dRt� aK�B�f���� }��z�a�o�-fr�����@@D5��֮V��b�S�&��-�L��m�[�x���S!�����d�\"ἵ����1�/��n}������U2�����e&�T��`a�U��4#�``�!\rũl�>5�t�l�\n�(\"�i�\nP�)�\'�� ��r�c-�^j����e�[��ZE�t\0���l�A�-��\'!�~��N.A�m2���p�\rjX��OR_���]�d�r�8��$+�\' ۬�. ��Ӭ[�����8�o\rb�O��5�b61T\Z�EW�%B�NnTJS�d�͸�\"a�ۦ��˧~��m�7\r���nx��nd��x�Z�z�1�� �����|�#;��Mu_5I�7,�\"����;w8L��� SY�7ڪJ�cD��S LQe[��D�m��a��c�ܜ��rL�L� ���/m_�˘�~t�F�P��?��|�R0��c[��wco�W�u�4,Ê�.8�%T����La�3�兂21o�*�I�B�e�߶r��8Z;AH��q먆��v��;�61���a\\?n�W\"��J�ݘ1���N��+^��%9A\"���tb(C�GX7|.{m�Gt{�ꧼ�s\r�\Ze�jR���5��|�]\'r�1H��Ż��F ������gl�45V%4�/�P\0\0��8�\0�r�Mx�73�v���ۃ��(�+�0�LX�ߘ�QCB����`� ����[���0\"�d��6j�1:������>��c�3c��2:sH>p\\ud��V.���U}��Q��L��>�C�u9$��2���$ݦ�”��q�i��l�4���j5z��h���gQt��C���-9�T\']��l\ra�R�5IgM��s)Y��4A��5fѳS��tZ%?���:f�J�ð�Ujuh�P5�� Zm �,����!lѪ)��d)H@\0׏n�n5M��;����uk8bێ9*�8w���8� 6���{^�Sl�P�MgLISwg8!����9���\0Pİ��\'e2�ڲ}�����O�����j%�D�`�V����M��f�J�4�jQ�}��N3�*�1{@b���^���\\k�!令#��\0���#�X�3]Rz�l�� ��\0�� �#�\r�D1t�[gfZB*�Q���\"q*�у�j�j$�V�ZbE�� �YPQ�8��~1�$ s8�Xh���FD�G7M�|ls��ѓ-QI�6mRI�V�$� �$�P�}4��.����!�^�5\n�⾪���\r��f�YT�}ګEM�|�U�s�c�=�G�m������K;Lcw��O�0Q�=�{h��c):Ě cr�\\�������n귺��{�i��U���_7�&��L��7)ӷ~\r�K����^f�X�,%_q8Z�)��+����_��#�v,��d���S�ѓդ��y��y���\r��?��^Rv��Y��vS�b�L�>����E�e ^/q:V!�Y���d7��M4�V }��+�J��ض�� WH �K*��$ y*���Q����1J��#��M�P��H�`!C���~�T��7<����_�]CL�~I����oݒ���U��\0uE������}� �V֘~�� �$R�����M4�P�C�����/a3-�dLn.����c��dۛώЌb�8�0�b鮸4nN�WJ��uW�ި�c�Q����rd�\" ��TJ\0*G���i���͸�+�E1vF�hG�敲�MU�uQIC\0qɓ/!��ֿ��',5,0,'','','',''),(54,2,14,'75859b10bc511276','ed2cf7a93daffb15532a78b261ac4685','2017-09-07 09:16:08','2017-09-07 09:16:08','','','Contact Photos','6.jpg','image/jpeg',48,48,1755,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \00\00\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n��\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa��\0\0\0?\0���3�c�s�ǜ�?�1���{�pK����]�_��r��\0BsK�]�n 4d��fZ%ӣ� ³+�r0�m�&��i��-��jA�g>���%hM����%�C¿p��O!����6���x�i�e�5���H�)LW�l�e����!k��:�T���h�q2ڰ���NݴM�j�6�A��7�?qY��ˌ�g�Z�[D�En�&Z]-�mnB��a!�[v\\�h��2BaRI?����<~/�y=d�G������3�JM�[ݨ��` ��ԭy���N��\0ɚȥ֐Y�ʈ���O`=�y��| Ҽ�&�-F�mf��+`<�q{�*En՘g���$��Y��`��P��#I%�;�<�z�+��<��#ۣ��g��dl9�n��&���ek�ٵ���)X�C�dz�D����0�N%HiI�m���R/hvߠ��)5>B�~N��M�X�}��\']�؜�\Zlcޒ�Z��FQ.6��?` �/����>�>I�X㞣�`�3���lHm%X8�=�j�2.�K2�1$������7���2�)�I1��Cw����n^i>%T%�cƺ�x�]�l�_�/�C��X�JR�B�y��Ÿ�Q-�+μ�+ug�\\�y�J7t���{2U0�OH��m�YF]q�Z�a�$f�d�B����2�F<��c.:�e`��Z�_���|������%�n|���KQi\Z�WK��y��#X0 6��6�&,S�MP���;ę��;F�imE�M�I�MiF��܎L��N�W����J!O�Vi��2zA\n(�$�G�#\n%�{�^s*]���p��\\�2n�Et��ܬ�fݏ�Z\Z�m\0�:��2%�.�؁D�3)�[F������a ���],2 ]�ˆ�ۮ�� �Z�ϯ*kj4=���N1�����-c��;l�:�@�Ϋ+�������O�WW��!א^EJGNFG�Ü$�L�B�FI\0CE�x��C42�Z�$R�u��}����ZB��c=/>�z������XK�3x�q�,�8�+���-�#��?*\ZF�����V)/%xR3�e�0�(b0�Š;# ;Kl��\r%�Ye�cCM6���\'JP�%8�1��z�Wm�J��e�Z⁜�[�&+i!�.>Vz8��X�E}+d�\r\0�!�P��eաi�U�tv��O�;}qj�e0åi��?~A�-��٘H �q�-�b> �\Z�+9�#7�x�1�\Z�\Z�e���=`�t,���\n�\0\"\nn:x%zs�Ϥ����?�z|��գ�c���u��S?����K��R+1Uh�a���hTc�%A��1�>?�B�\0����',6,0,'','','',''),(55,0,14,'75859b10bc51688d','1eaeb44ce16c9a8548707cafe998e6dc','2017-09-07 09:13:05','2017-09-07 09:13:05','','','Contact Photos','d74f209bfcd190b3864fa678e5068a16-4.jpg?ts=1504775545','image/jpeg',175,175,5493,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0�\0�\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ��\0B\0\0 \0\0\0\0\0 !\n1A\"Qa�q�%23�#$&5BR����Es�����\0\0\0?\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Ն����X\Z\'���p|L�sN���}�Y%ZR|�(�J*I&+�rJ#�yI)%l�Z�,:��i�(��ϥ�)���J�����*hχo�мI����$�Dj-� (�C\"�cI(s���_�L�:g�� `w�I����9�s.w�Y���a���C\"3:I��e�~��g,�ڮ�Ϩ�6�&�t�t��/iK��xv<�v #=�{�$�ѹ�Idу=��#�}�G���!�\0\0\0\0\0\0\0*|z�B��6�Zp�]�s\"�A�ڝ\r�E\r��{�b��Z�HI��j��>Eq�E�˒S.:t�7�Vg�5�u;��Ys=�YFZ�Rk��}����j��ʮHnl�Ifh���M6&\";M�DD�]��¿SR��c�h�B��{��t��ƤG��V�Mʽ4$�&2��\"����%���{̈}9$����489hۆ�� @�e��崭�\Z��ط<��m�(v&�Ne{�ȵE�qQMI��\Z�uO�h���D<�\0\0\0\0\0\0\0qۍGfn\Z��b��R���9~�2w���o\nstET�x��H��l�MT���:�!M2��a��L��c��/�Ri��Cr���������T�\Z�uΥ$�F�IN��춆�q�5��S�,-B��c�^�op�}AW�8�Y)�c?��T��2Fi��դkI��$b�Փ�鐸�A��\\<���F��h�ŭ�ܿIk�)�3^�N�ٓ�wu]��k�U4�J���8�W�*�F�7�`^U:V��ң�I%�̷?��|����C{�Oh�[�:r�qğ��� ����0\\���\Ze0\\�ޅ\Z��.����RvZ��NOI\n#�����O v���-ik�F�����o�;�E�I����ձ��5�\Z�Rv!,��\\4;����MyE�3��t�a9��B��:̌�[�X�T���h_\"��r4k��*�F\\��U:��M�z�\0�u#�\0�C�\0\0\0\0\0�>�f�r���Z\\kp�qҾ.oU�u������q-S�CJK��PSǬf�2JJ��G�D Ym���+>!҄�^�\n\'��/{} �W7��-K;�K���kI�� (�;T�F��\r��H̖J�\0��J�sj� K��\0��m���p֫WV\'�\"IٹjTlx�;ҤO,R��Ԑǖ� edK����:�8���<)5h�y Ó�w ��r*-�0�������Bf��J& u:fIV�r�:rjh.p�甴���9� M��H���>���듲pg�BҲ4:{-��RT�P�MHZ��Rw+|�)�D�qKєW2W��e����j�O{F|��aM)xh���ʴH��-�IF�3捩Gِ\0\0\0\0\0�q���d-�B\\*�u���D�Z��nǮ~�4��gfG�y�N��-m�ݯ�m(ָ����m����WW���IoԺ������w2I��HX%�Lza�֞X��Y��;�$�D�Q{}�54;9�)k3S���2%-|Ĕ����\0��E�ɧT|+2�B��B�H�U�y���������K>Yk�[\ZYN ��\"ZyTGV\ZĢ5MGR�OO��&7��� �;_��Ou��[7���O��?�0�Rv�Vg#۔��+���E�1�[ٲ\0\0\0\0\0��;X��\Zqz��qJ����2c:�#��vIK^Fk4�B/�X���﹑�E4�eh�M8�8(�:�\0s2ia���{���CT��\0XR�J��������dz�]���d��݉� � �,�1r�~��6���DdG��OB�g��&f)��e�+/�4�T�Q�j�����Ѱ�~w��c�8���ڤF�gT�ճ�G�[�M\')��?J�UDR)6v[�#E3���$n��=�J��K�\'�D��q1�8��򄭴��7�(��U����ueL�����t�v2ҤT�K�[o���\0>}FH\0\0\0\0\0B��\0��Lv�x(Ʋ�9�3O\"\no�H�P��QiJU�;G�\\/��e>����oQ�{hnW�^\0�S���8��{�\"Λ��JK\\�*��G��1)|��\'s6��@��M���o+@�:�euw;uY�*9���r�Ol4��YL��Բ3Q#�\"5�E}�q�SS��G�HRb]{~&�B\n�q@�wgv�Qg_��=�rcW6�EP�j\"؊��v�ׇv�{:׎�V\r��}L��dD[u��_^� ?!y֑p<[L�^�Z}�ӵ����k;[cJ.ɖ6���鲔��$/D��Y[�kwR��D���\0\0\0\0�.n���Nn��v\rv�sv�upVV6�;o̥����M���\'�x��8x�-��a�����ES������l13K� �Yx%���rJ��rR�Y�5B$�e�=4�_��ć�&��N\Z_�����k���H��Q;wdW/+�^&�����)5���i�(���-�Z�<9sN����.��j�M� �#�p�9��h���ԥ�i�ʼn�Q=&�U�O�Qn�Q�Ԕl�a��\\�.��\\�\0�㴒�Mʮ�%y�2=�ޟ�]Z��B˩�J$��\0-��F��X� R2�b���X�01�[�#s;=�\Z�\r&��QiOwM Z�<�dJ2�ڀ��#��o��pM�Nӷ�w��8m�2��i�$��d��m�$E��jD�����E��2���iC;�iwN1���C����59��\"�~��O]����O�[��^T�f�1��!����q�2yq��W���K�Q�ө���y����\0\0\0\0��U��K�r�X�2@��?bp�L�r+��d�057x������[S#Y���{m�̣4.��+�o5u�S8���F��M2����h�/m2^��*+j2L�L���3,�}D\0���F�>�-:�i)t���Y��.�Ϻ�f��bV���Z�:Z��`W%T���3�>I��>Fd���F�-$�j#;*O$��)R�])}����[��d�\0 z���~B�пgG 4�L��=c��&n��3κu�6��[�8�e��T�Ҕ�.GUF�(�G��$^J�ڑ�\r��ſ���q��خ��wZ���\r���n�������ÙL5>wv$Rb2{UB�?H ���LAF�Li%`���Tjѫ�Q��\0>�������\0\0\0\0��������SG �M%�B�I�y�[�뽊G?t/ǘ���P����4�% YT*���\">�a&}b��pij��a־x�[W�n�����b\' +�H�%���L��3Ȭ�NC+RW��\nb��L�+�`\0\0\0��!�MWp�᭭gk�&�4q��SGe:O�-]1�Iw�#27������7�Q��%!�T2�C����0Ҵ>�MY�V8�#ch�V(��vv������TN-�������~=I[��W�M5㿀�rn�u��e0�[�Ν���X�$��!D��B���;0z>S%&Fxʗ1+cRղ�GB���)�r�]/q Ïz ύ����9��U/%,��/S�rC��j(�\\�d��$D���eQ�ȵ��}B��j�+�n-�-��ܧem����3���뷐� \0�����q65�YRGX���:a:�\\�\'{V(�C�Ӫ���\Z����.�7p�����4�2��cZQz���_j6��{s}�A�Rrҋ������ӗx�^_է�$�R�#�N��+j}�\Z4hQ>�[����E�\0��� �\0\0\0\0��R�t�wؾ~�{�|�\0��0��� ��\"8\"M��/�j����9E��-�`អ\r-�[�,�&��oo��L��)&��\r1E���E)<���q�d�ᛨYE���p�i�G#�Z����/{�ۢ99�1��$%,֪q�H\"˨T�q���R����\0\09_Ʀ]u�1�\"@�Z��徕�M�ͿS#�F��k-��\'c�^�����bgYшk�Rw�_��$ؿ E� Ϛѹ���c/nA+����=�b/\n#܋a=@\0\0\0\0\0�_��\0���uq�+p��Rb��if�H�F�^ʱ�����j}٩�#55�S����)�l�\"yP���������!�\0ͮ/1s�p���q4����?�۩�4�^��_2���De�\"�?�k�͛��F�ԠGZa���uB�^w-�� B�G���:l_��zK�\0\0\0\0\0\0�AX�/�������,�zO���n�{��i���l��O���q?~������\0�]]Ľ�Ҟ�� �B���?�(��\\levo\'��߮�l�������}�ؙG82����{��䏯��O]�������������\0\0\0\0\0\0D��~4�\'���!���FQ��{sW\\D�͒7-�s���^�{y�m�����8��J�(?�$mh{Ev\'6����w⍪G/�Df[m�c��8�\0��ǿ�nZ@�Դ�o^ٯ(9��ܙ\Z��|�]����TG���fFC��\0\0\0\0\0\08s�|kBQś��ޭ*A�Z�����:3�N�ߦ��e鷡$�w\0\0z*R�z��������\Z���gW\r�S �\Z�U�kE���ks����Cÿ���h[�M��߀\0\0\0\0\0\0��׎JO��\ZO;�\'�0�g ���ynwd��OM� ���n\0\0\0 tQ*E�ב����ˡ �\0\0\0\0\0\0-hթJ�Z4N��[S=�#2�#��[}O�g�\0\0\0\0\0\0\0\0\0\0\0��',4,0,'','','',''),(56,0,14,'75859b10bc51688d','1eaeb44ce16c9a8548707cafe998e6dc','2017-09-07 09:13:05','2017-09-07 09:13:05','','','Contact Photos','d74f209bfcd190b3864fa678e5068a16-4.jpg?ts=1504775545','image/jpeg',80,80,2703,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0P\0P\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ��\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#���3Sa����\0\0\0?\0��M5AQ\0��j�����ǯ<����_�T�@Z��i����9���׾�*��)��{ڥ����J�Y�[6h��e� �,u��$�1����t�KvD3%���g[I�_:kƵ�J�u��B��7��\'vX3i�Rj:�G���*�e�\0��a��M|�i������:{Lٞ�w,dRt� aK�B�f���� �5���Ô��5��b�%֡��Z�uZꅊqNL�����2Õ�oY↚}L�VB�\0���0���ւ7s\0�D�{I��N\n_�J;�)Tʮ>��)���UR�U���V�PlЏ����`�lD4S�M�8��\r�fѲ*H��i�P)CP���O 3�{�a��%y��V�)��yn��YiE�3�I��Vh����; 8�ݴʛG]��5�b~�=I~}��vݐr��(��C����/m��X�H�rN*ߎ��\\==Z�Q�ed���{��\\�����n��X�^¹Z���2�TƓ�e�%W\"���\"��wFVe�L�8$���@K�aM`9G�zv�i�e���s���^�q�Y���9���9(h��9�H��F�`�kd�)�����I$B��r�\n\"n5�����}.�� 9�l2�m&�\n�b����+$V�`\n�\0++���9W��0�h�q�q�������G�\0G��Z�~. ��׬c�����8�o\r��O��5�b61T\ZEW�%B�NnTJU2gfܤ��lu遅-�r�߲�}M�{�2۞,�[�:�\0^2�֫��A��DH.�a<��h_/���4�]W�R|��\'�ỴN��*�.���Ed������Q3�C��S\0�DYV�vÑ>~�X{��\'?���,5C�f�K�W�2�}ߝ$���+�O��0T�\'cX����X��l���f��q� 0�# �8�U(+�*�e �r�a`��[�J�p���rw휢���V��E�+$�z�!��]�=�j33WۮUȇb����7f j,����׳>�NPH�G,y���Q�\r� ���u��:��%Ü�hƙi����\'�l;��\"WI܅4�R+E��n��Q�*?&a%:��6�\rU�M-��(\0\08\0�?�\\��^���ᝠ�+�����>����*�)��1�P�P���a�$�b�:�V�p0���97M��LN�!a-���oX�\0���y�L����Y#*���_n�T~%{����]NI${L�quI7i�0���q�iw\'M-��\Z�^���<���]/)�u� NxU �m���X{Ԭ�FY�c(��Vk0Ml��Y�l��Df]�O�u:��Y��R�0�+�Z�Z!�\rv��[F���G&�(��-�D4j�h��\nR\05�۾ۍSw{a�e�;qZ���_ʴD���d�r�6�ͺ�T�=�J )�H(r&�� &�����n�k��� �� bXBٓ��GmY>� E�l�\'�x�|�5�\"F�r�O���&�� �y%^\Zn�(�:ԓH�*�1{@b���^���\\k�!令#��\0���#�X�3]Rz�l�� ��\0�� �#�\r�D1t�[gfZB*�Q���\"q*�у�j�j$�V�ZbE�� �YPQ�8��~1�$ s8�Xh���FD�G7M�|ls��ѓ-QI�6mRI�V�$� �$�P�}4��.����!�^�5\n�⾪���\r��f�YT�}ګEM�|�U�s�c�=�G�m������K;Lcw��O�0Q�=�{h��c):Ě cr�\\�������n귺��{�i��U���_7�&��L��7)ӷ~\r�K����^f�X�,%_q8Z�)��+����_��#�v,��d���S�ѓդ��y��y���\r��?��^Rv��Y��vS�b�L�>����E�e ^/q:V!�Y���d7��M4�V }��+�J��ض�� WH �K*��$ y*���Q����1J��#��M�P��H�`!C���~�T��7<����_�]CL�~I����oݒ���U��\0uE������}� �V֘~�� �$R�����M4�P�C�����/a3-�dLn.����c��dۛώЌb�8�0�b鮸4nN�WJ��uW�ި�c�Q����rd�\" ��TJ\0*G���i���͸�+�E1vF�hG�敲�MU�uQIC\0qɓ/!��ֿ��',5,0,'','','',''),(57,0,14,'75859b10bc51688d','1eaeb44ce16c9a8548707cafe998e6dc','2017-09-07 09:13:05','2017-09-07 09:13:05','','','Contact Photos','d74f209bfcd190b3864fa678e5068a16-4.jpg?ts=1504775545','image/jpeg',48,48,1755,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \00\00\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n��\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa��\0\0\0?\0���3�c�s�ǜ�?�1���{�pK����]�_��r��\0BsK�]�n 4d��fZ%ӣ� ³+�r0�m�&��i��-��jA�g>���%hM����%�C¿p��O!����6���x�i�e�5���H�)LW�l�e����!k��:�T���h�q2ڰ���NݴM�j�6�A��7�?qY��ˌ�g�Z�[D�En�&Z]-�mnB��a!�[v\\�h��2BaRI?����<~/�y=d�G������3�JM�[ݨ��` ��ԭy���N��\0ɚȥ֐Y�ʈ���O`=�y��| Ҽ�&�-F�mf��+`<�q{�*En՘g���$��Y��`��P��#I%�;�<�z�+��<��#ۣ��g��dl9�n��&���ek�ٵ���)X�C�dz�D����0�N%HiI�m���R/hvߠ��)5>B�~N��M�X�}��\']�؜�\Zlcޒ�Z��FQ.6��?` �/����>�>J[X㦣�`�3���l8m%X<�=�j�2.�L2�1\"����D�7�0�Ĉ2�+�I1��Kw����n^i>%T%�cƺ�x�]�l�_�/�C��X�JR�B�y��Ÿ�Q-�+μ�+ug�\\�y�J7t���{2U0�OH��m�YF]q�Z�a�$f�d�B����2�F<��c.:�e`��Z�_���|������)�n|���KQi\Z�WK��y��#Y, 6��6c&,S�MP�Δ�3ę��;F�imE�M�I�MiF��܎L��N�W����J!O�Vi��2zA\n(�$�G�#\n%�{�^s*]���p��\\�2n�Et��ܬ�fݏ�Z\Z�m\0�:��2%�.�؁D�3)�[F������a ���],2 ]�ˆ�ۮ�� �Z�ϯ*kj4=���N1�����-c��;l�:�@�Ϋ+�������O�WW��!א^EJGNFG�Ü$�L�B�FI\0CE�x��C42�Z�$R�u��}����ZB��c=/>�z������XK�3x�q�,�8�+���-�#��?*\ZF�����V)/%xR3�e�0�(b0�Š;# ;Kl��\r%�Ye�cCM6���\'JP�%8�1��z�Wm�J��e�Z⁜�[�&+i!�.>Vz8��X�E}+d�\r\0�!�P��eաi�U�tv��O�;}qj�e0åi��?~A�-��٘H �q�-�b> �\Z�+9�#7�x�1�\Z�\Z�e���=`�t,���\n�\0\"\nn:x%zs�Ϥ����?�z|��գ�c���u��S?����K��R+1Uh�a���hTc�%A��1�>?�B�\0����',6,0,'','','',''),(58,4,15,'75859b10c420acd6','22875ea1ab42e09a2f1d3869cd6edfe7','2017-09-07 09:16:42','2017-09-07 09:16:42','','','Contact Photos','3.jpg','image/jpeg',175,175,5486,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0�\0�\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ��\0B\0\0 \0\0\0\0\0 !\n1A\"Q�aq�%23R����#$&5B�Es�����\0\0\0?\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Ն����X\Zg���p|L�sN���}�Y%ZR|�(�J*I&+�rJ#�yI)%l�Z�,:��i�(��ϥ�)���J�����*hχo��>$���Œd \"5ɐb��o���9���/צF�3�qN��;뤂��������9�;߬�Kka0���Z���$�Բ��Ob3�g�Wqg�U�l�W�\0ĺQ������<;J;��剽ŒTh܋}��h�����>�#����\0\0\0\0\0\0\0>=]�Xwg-8i��9�u����N�梿���ݱ^�-l$$��5Rt�\"�����e�)�:G��+3Ϛ�ͺ���,���-d�5�ܾ��n~5SeW$76sS$�4SME������\"\"O.����_��)YŽ1�\r�X!M\nm��y�Kl�R�#�k�M&�^�o|ML}Ij���O��D>��OJ��\Z�m��i��v2��r�VӍB�l[�rd��D�;k�2��dZ���8�(��$���h:�״y}`\0\0\0\0\0\0\08�ƣ�37 } Nsſ�]�E�c pJL�򄩵�œ�U<��Y)�O�&�$.�!E�Q%��N�C�SL�8�d��#z��9�㔚g,�ܮ��G w�7GggU)F�]Es�I-��DS�:{-��e�|jw�K P���䗴[�<�PU�&�Jw���iU4�L��\Zno5i\Z�j���ud�:d.-�n��=9�tр��Z!�kj�/�Z��rL�׹S��d�]�Wg�\Z��M(R���%�#劰Q����N��j���ERI�3-���_=�#���=�����q\'�uc���L-e�ƙL#��F�t�����G�����䓓�B��eEk2=����ZZ�C���������3����xdRh�#\'�5ldE(�nF�ԝ�K/��\r�9c���^QG���4�&NjP���#=��:�)<2�ȧ�܆M\Z�3J���\"z�N�{�n���]H�\0�!�\0\0\0\0\0Xl3W9_�.5�W���_7����v��츖��㡥%�k()��3Q�%%MJ#�\",��|h��B{�i�������c+��r��%��ɥ�Mj5���Z��V#Isӆ��$fK%M\0j�t��5s����n6���e8kU��ݑ$�܉5*6���듲pg�BҲ�:t�[I줩��*���¤�V�pS�◣(�d�Bŗ4B.� �su=�� =�4�ᢙ�KAeZ$qu餣}��Fԣ��\0\0\0\0\0\nY��No��!�N��j{\"F-zy�c�?s\Z ��I3�#̼˧Q������\r��k\\]���6��Pꫫ�Ur$��]MIN�^|��$�^u�,ݦ=0��O,Vt,�p���]�I(���F\Z��̔�������Q��bJID�l�\0����dӪ>�o!Sg�[$i*��<�\\Qng|Q�u��,�,�tu�-<�#�\rbQ\Z�&��v�����c����٧��u�-����\'���B�b);C�3����ha��Kr\"ۘ�r-���\0\0\0\0\0K��y�8�qa��^���1�[�؍�$��#5�K��,JL���Ȍ��a��L��s�&�[d��1\r�צ�K�����ɧ��=��\0Dx��a�Ó_Ud�ǁ�5%�~��<��&��ܾ^�G�⏚��_�K�ω�f\\O�2ث�����=�t��2�7 ���36��FffJw���&M^DDV��\0\0\0\0\0���A�������-G���M�:]��\Z�N/&�ɛ����3:Rv�_��?]����%0���^�w g�h��F˭�3橯c�`��j�G�f=h�R� Ȫn������G)#I�&e��6�96\0\0\0\0\0\0���L4/���6v91��!�\r�)�,�~*�Rg#UR�ij�\"��rN������P�kJ;�m�>�b���d&X�����Fޭ�b��48�K�K�T\\�h^�Q̶#I\Z�hWe+_ͺ���ɧI;�\n�F��.Vw)7|<�f�d�O�̚Xi���>��U-��R��/��1����.�t��2fs�n���iE��u?b�D�V��2#�Ca��u3��3�q2����j�w���Z�����qN?;�^��X���R#g3�Dj�֣��&�����\nI*�)�;-�����x�j�7A��%Gi��ŢV�8��TN�BV�ER��e�*��������W�ZMQ�i;iR*h��-����\0�>�$\0\0\0\0\0�!}���Lv�x(Ʋ�9�3O\"\no�H�P��QiJU�;G�\\/��e>����oQ�{hnW�^\0�S���8��{�\"Λ��JK\\�*��G��1)|��\'s6��@��M���o+@�:�euw;uY�*9���r�Ol4��YL��Բ3Q#�\"5�E}�q�SS��G�HRb]{~&�B\n�q@�wgv�Qg_��=�rcW6�EP�j\"؊��v�ׇv�{:׎�V\r��}L��dD[u��_^� ?!y֑p<[L�^�Z}�ӵ����k;[cJ.ɖ6���鲔��$/D��Y[�kwR��D���\0\0\0\0�.n���Nn��v\rv�sv�upVV6�;o̥����M���\'�x��8x�-��a�����ES������l13K� �Yx%���rJ��rR�Y�5B$�e�=4�_��ć�&��N\Z_�����k���H��Q;wdW/+�^&�����)5���i�(���[���xr�I�W�+�]}f,�\n��^G��,s������J\'8ӫ��zL+Z�%l����$�Y�(�:���]��6��\0e�i%v��]�J�d{o�?�$��{�;�SؔI-�[l;��Ǣ���e�Ŏ3l�b`cn��F�v6{\nm 퍍��JZ�������\\��dJ2�ڀ��#��o��pM�Nӷ�w��8m�2��i�$��d��m�$E��jD��M�r\"�b�vKȴ���4����s���܈�\Z��S�E�NU\'����|�{u���H�n��0B��a�G�\'�w~�x�-���5�:���������@\0\0\0\0|�(�\\����-e�s$ c�\' 4�W\"�+H�Sw��:��%�25�Ȉ׶ܜ�3B�\r���W\\e3���4hё��/�Z�q�&����%�-¢��$ʄʺiS2�g�@ +��m��RӭV��NQ\\�5�[B챌���h�x�%kk9�����1&rQ%Hj���p��՗��h����tזf���,����a��\"��ڪA�@d�&�b\n4�cI+\0-��R�V�^����_g��G�<\0\0\0\0Wc����3�M214��V9&�n���)�мsc73MB/ǬD�<�%eP�JX������������G��Z��!m_U���X:�,m��0�y#𖦳U2SD�\"�9 �I^��)�#�\r2��]�\0\0\0<;�~�bj��\rmk;^I5��]2�8�)�~�j�2K�!��d d�����FI) ���]�_���8q�����:j�:�űEڱF����n`���=Z�qmL����}��$����J��J�Zi��w�h�tK�->�)�����t��%\Z�y&��\"$�r0~Ʊك��)23�T��[\Z����:�L�L��*�{�f{�^|m|D5��Wt�R�y)d��z�X�.�QD��&G\"$����#�Y�T/�R���B��rMŵź��쭶�}�>�{���v��\0\0>_��;.&ƹ *H��6�L\'R �$�j�huzuQ�vCQ���EҦ�:y}�ƚ�U�,kJ!�Y>}��Fк/no��3�NZQw35��r��+����d�JRDv�е�mO��F�\n\'�k~�|�H��3�8\0\0\0\0\0c�GT��/]�/����_?��F�9�2�GI����MZ��1�\'(����l3�A��KuŒ��RM��4��w�$ԙ!�(��RH�\'���~.3,���3u (�s�@#.m1H�wK[���:��vtG\'9&2�D�$���N0�Yu\n�n4�:J_���# \0+��ˮ��&8�H\Z�W���ҾSi����dr��؍e��d�}K���{�L��:1\rqjN���ě�(����Z735��T��_�s��\0\0\0\0\0\0��Ɣd�~�?T�\0��2}��nj눝�F���� ��o1-����y��� ]��č��h�����v�9n�Q�H��Ȍ�m��{���>��m� H:�����5�;�{�#RT��K��y~���2����v�\0\0\0\0\0\0u�hJ8��=�U�Ch<�^;������F �[���L�6�$��\0\0EJ]�]�z��2��ƣ�s��zT�8ƭ�{\Z�x������*P���}�� c�鷐��\0\0\0\0\0\0\Z���I�7�I�wD�\0& �q���-Î�>�鿡���\r�\0\0��%H���?�����yt!�\0\0\0\0\0\0��\Z�)V�F�ַ�jg��f^D{� o���x\0\0\0\0\0\0\0\0\0\0\0\0��',4,0,'','','',''),(59,4,15,'75859b10c420acd6','22875ea1ab42e09a2f1d3869cd6edfe7','2017-09-07 09:16:42','2017-09-07 09:16:42','','','Contact Photos','3.jpg','image/jpeg',80,80,2703,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0P\0P\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ��\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#���3Sa����\0\0\0?\0��M5AQ\0��j�����ǯ<����_�T�@Z��i����9���׾�*��)��{ڥ����J�Y�[6h��e� �,u��$�1����t�KvD3%���g[I�_:kƵ�J�u��B��7��\'vX3i�Rj:�G���*�e�\0��a��M|�i������:{Kٞ�w,dRt� aK�B�f���� }��z�a�o�-fr�����@@D5��֮V��b�S�&��-�L��m�[�x���S!�����d�\"ἵ����1�/��n}������U2�����e&�T��`a�U��4#�``�!\rũl�>5�t�l�\n�(\"�i�\nP�)�\'�� ��r�c-�^j����e�[��ZE�t\0���l�A�-��\'!�~��N.A�m2���p�\rjX��OR_���]�d�r�8��$+�\' ۬�. ��Ӭ[�����8�o\rb�O��5�b61T\Z�EW�%B�NnTJS�d�͸�\"a�ۦ��˧~��m�7\r���nx��nd��x�Z�z�1�� �����|�#;��Mu_5I�7,�\"����;w8L��� SY�7ڪJ�cD��S LQe[��D�m��a��c�ܜ��rL�L� ���/m_�˘�~t�F�P��?��|�R0��c[��wco�W�u�4,Ê�.8�%T����La�3�兂21o�*�I�B�e�߶r��8Z;AH��q먆��v��;�61���a\\?n�W\"��J�ݘ1���N��+^��%9A\"���tb(C�GX7|.{m�Gt{�ꧼ�s\r�\Ze�jR���5��|�]\'r�1H��Ż��F ������gl�45V%4�/�P\0\0��8�\0�r�Mx�73�v���ۃ��(�+�0�LX�ߘ�QCB����`� ����[���0\"�d��6j�1:������>��c�3c��2:sH>p\\ud��V.���U}��Q��L��>�C�u9$��2���$ݦ�”��q�i��l�4���j5z��h���gQt��C���-9�T\']��l\ra�R�5IgM��s)Y��4A��5fѳS��tZ%?���:f�J�ð�Ujuh�P5�� Zm �,����!lѪ)��d)H@\0׏n�n5M��;����uk8bێ9*�8w���8� 6���{^�Sl�P�MgLISwg8!����9���\0Pİ��\'e2�ڲ}�����O�����j%�D�`�V����M��f�J�4�jQ�}��N3�*�1{@b���^���\\k�!令#��\0���#�X�3]Rz�l�� ��\0�� �#�\r�D1t�[gfZB*�Q���\"q*�у�j�j$�V�ZbE�� �YPQ�8��~1�$ s8�Xh���FD�G7M�|ls��ѓ-QI�6mRI�V�$� �$�P�}4��.����!�^�5\n�⾪���\r��f�YT�}ګEM�|�U�s�c�=�G�m������K;Lcw��O�0Q�=�{h��c):Ě cr�\\�������n귺��{�i��U���_7�&��L��7)ӷ~\r�K����^f�X�,%_q8Z�)��+����_��#�v,��d���S�ѓդ��y��y���\r��?��^Rv��Y��vS�b�L�>����E�e ^/q:V!�Y���d7��M4�V }��+�J��ض�� WH �K*��$ y*���Q����1J��#��M�P��H�`!C���~�T��7<����_�]CL�~I����oݒ���U��\0uE������}� �V֘~�� �$R�����M4�P�C�����/a3-�dLn.����c��dۛώЌb�8�0�b鮸4nN�WJ��uW�ި�c�Q����rd�\" ��TJ\0*G���i���͸�+�E1vF�hG�敲�MU�uQIC\0qɓ/!��ֿ��',5,0,'','','',''),(60,4,15,'75859b10c420acd6','22875ea1ab42e09a2f1d3869cd6edfe7','2017-09-07 09:16:42','2017-09-07 09:16:42','','','Contact Photos','3.jpg','image/jpeg',48,48,1755,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \00\00\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n��\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa��\0\0\0?\0���3�c�s�ǜ�?�1���{�pK����]�_��r��\0BsK�]�n 4d��fZ%ӣ� ³+�r0�m�&��i��-��jA�g>���%hM����%�C¿p��O!����6���x�i�e�5���H�)LW�l�e����!k��:�T���h�q2ڰ���NݴM�j�6�A��7�?qY��ˌ�g�Z�[D�En�&Z]-�mnB��a!�[v\\�h��2BaRI?����<~/�y=d�G������3�JM�[ݨ��` ��ԭy���N��\0ɚȥ֐Y�ʈ���O`=�y��| Ҽ�&�-F�mf��+`<�q{�*En՘g���$��Y��`��P��#I%�;�<�z�+��<��#ۣ��g��dl9�n��&���ek�ٵ���)X�C�dz�D����0�N%HiI�m���R/hvߠ��)5>B�~N��M�X�}��\']�؜�\Zlcޒ�Z��FQ.6��?` �/����>�>I�X㞣�`�3���lHm%X8�=�j�2.�K2�1$������7���2�)�I1��Cw����n^i>%T%�cƺ�x�]�l�_�/�C��X�JR�B�y��Ÿ�Q-�+μ�+ug�\\�y�J7t���{2U0�OH��m�YF]q�Z�a�$f�d�B����2�F<��c.:�e`��Z�_���|������%�n|���KQi\Z�WK��y��#X0 6��6�&,S�MP���;ę��;F�imE�M�I�MiF��܎L��N�W����J!O�Vi��2zA\n(�$�G�#\n%�{�^s*]���p��\\�2n�Et��ܬ�fݏ�Z\Z�m\0�:��2%�.�؁D�3)�[F������a ���],2 ]�ˆ�ۮ�� �Z�ϯ*kj4=���N1�����-c��;l�:�@�Ϋ+�������O�WW��!א^EJGNFG�Ü$�L�B�FI\0CE�x��C42�Z�$R�u��}����ZB��c=/>�z������XK�3x�q�,�8�+���-�#��?*\ZF�����V)/%xR3�e�0�(b0�Š;# ;Kl��\r%�Ye�cCM6���\'JP�%8�1��z�Wm�J��e�Z⁜�[�&+i!�.>Vz8��X�E}+d�\r\0�!�P��eաi�U�tv��O�;}qj�e0åi��?~A�-��٘H �q�-�b> �\Z�+9�#7�x�1�\Z�\Z�e���=`�t,���\n�\0\"\nn:x%zs�Ϥ����?�z|��գ�c���u��S?����K��R+1Uh�a���hTc�%A��1�>?�B�\0����',6,0,'','','',''),(61,3,16,'75859b10c4223968','9c78857b3d725c1c6d1227a7b8cbe6b2','2017-09-07 09:09:29','2017-09-07 09:09:29','','','Contact Photos','9c78857b3d725c1c6d1227a7b8cbe6b2-4.jpg?ts=1504775234','image/jpeg',175,175,5493,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0�\0�\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ��\0B\0\0 \0\0\0\0\0 !\n1A\"Qa�q�%23�#$&5BR����Es�����\0\0\0?\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Ն����X\Z\'���p|L�sN���}�Y%ZR|�(�J*I&+�rJ#�yI)%l�Z�,:��i�(��ϥ�)���J�����*hχo�мI����$�Dj-� (�C\"�cI(s���_�L�:g�� `w�I����9�s.w�Y���a���C\"3:I��e�~��g,�ڮ�Ϩ�6�&�t�t��/iK��xv<�v #=�{�$�ѹ�Idу=��#�}�G���!�\0\0\0\0\0\0\0*|z�B��6�Zp�]�s\"�A�ڝ\r�E\r��{�b��Z�HI��j��>Eq�E�˒S.:t�7�Vg�5�u;��Ys=�YFZ�Rk��}����j��ʮHnl�Ifh���M6&\";M�DD�]��¿SR��c�h�B��{��t��ƤG��V�Mʽ4$�&2��\"����%���{̈}9$����489hۆ�� @�e��崭�\Z��ط<��m�(v&�Ne{�ȵE�qQMI��\Z�uO�h���D<�\0\0\0\0\0\0\0qۍGfn���b��R���8��2w���o\nstET�x=d��>��H��l�MD���:�!M2��a��L��c��/�Ri��Cr���������T�\Z�uΥ$�F�IN��춆�q�5��S�,-B��c�^�op�}AW�8�Y)�c?��T��2Fi��դkI��$b�Փ�鐸�A��\\<���F��h�ŭ�ܿIk�)�3^�N�ٓ�wu]��k�U4�J���8�W�*�F�7�`^U:V��ң�I%�̷?��|����C{�Oh�[�:r�qğ��� ����0\\���\Ze0\\�ޅ\Z��.����RvZ��NOI\n#�����O v���-ik�F�����o�;�E�I����ձ��5�\Z�Rv!,��\\4;����MyE�3��t�a9��B��:̌�[�X�T���h_\"��r4k��*�F\\��U:��M�z�\0�u#�\0�C�\0\0\0\0\0�>�f�r���Z\\kp�qҾ.oU�u������q-S�CJK��PSǬf�2JJ��G�D Ym���+>!҄�^�\n\'��/{} �W7��-K;�K���kI�� (�;T�F��\r��H̖J�\0��J�sj� K��\0��m���p֫WV\'�\"IٹjTlx�;ҤO,R��Ԑǖ� edK����:�8���<)5h�y Ó�w ��r*-�0�������Bf��J& u:fIV�r�:rjh.p�甴���9� M��H���>���듲pg�BҲ4:{-��RT�P�MHZ��Rw+|�)�D�qKєW2W��e����j�O{F|��aM)xh���ʴH��-�IF�3捩Gِ\0\0\0\0\0�q���d-�B\\*�u���D�Z��nǮ~�4��gfG�y�N��-m�ݯ�m(ָ����m����WW���IoԺ������w2I��HX%�Lza�֞X��Y��;�$�D�Q{}�54;9�)k3S���2%-|Ĕ����\0��E�ɧT|+2�B��B�H�U�y���������K>Yk�[\ZYN ��\"ZyTGV\ZĢ5MGR�OO��&7��� �;_��Ou��[7���O��?�0�Rv�Vg#۔��+���E�1�[ٲ\0\0\0\0\0��;X��\Zqz��qJ����2c:�#��vIK^Fk4�B/�X���﹑�E4�eh�M8�8(�:�\0s2ia���{���CT��\0XR�J��������dz�]���d��݉� � �,�1r�~��6���DdG��OB�g��&f)��e�+/�4�T�Q�j�����Ѱ�~w��c�8���ڤF�gT�ճ�G�[�M\')��?J�UDR)6v[�#E3���$n��=�J��K�\'�D��q1�8��򄭴��7�(��U����ueL�����t�v2ҤT�K�[o���\0>}FH\0\0\0\0\0B��\0��Lv�x(Ʋ�9�3O\"\no�H�P��QiJU�;G�\\/��e>����oQ�{hnW�^\0�S���8��{�\"Λ��JK\\�*��G��1)|��\'s6��@��M���o+@�:�euw;uY�*9���r�Ol4��YL��Բ3Q#�\"5�E}�q�SS��G�HRb]{~&�B\n�q@�wgv�Qg_��=�rcW6�EP�j\"؊��v�ׇv�{:׎�V\r��}L��dD[u��_^� ?!y֑p<[L�^�Z}�ӵ����k;[cJ.ɖ6���鲔��$/D��Y[�kwR��D���\0\0\0\0�.n���Nn��v\rv�sv�upVV6�;o̥����M���\'�x��8x�-��a�����ES������l13K� �Yx%���rJ��rR�Y�5B$�e�=4�_��ć�&��N\Z_�����k���H��Q;wdW/+�^&�����)5���i�(���-�Z�<9sN����.��j�M� �#�p�9��h���ԥ�i�ʼn�Q=&�U�O�Qn�Q�Ԕl�a��\\�.��\\�\0�㴒�Mʮ�%y�2=�ޟ�]Z��B˩�J$��\0-��F��X� R2�b���X�01�[�#s;=�\Z�\r&��QiOwM Z�<�dJ2�ڀ��#��o��pM�Nӷ�w��8m�2��i�$��d��m�$E��jD�����E��2���iC;�iwN1���C����59��\"�~��O]����O�[��^T�f�1��!����q�2yq��W���K�Q�ө���y����\0\0\0\0��U��K�r�X�2@��?bp�L�r+��d�057x������[S#Y���{m�̣4.��+�o5u�S8���F��M2����h�/m2^��*+j2L�L���3,�}D\0���F�>�-:�i)t���Y��.�Ϻ�f��bV���Z�:Z��`W%T���3�>I��>Fd���F�-$�j#;*O$��)R�])}����[��d�\0 z���~B�пgG 4�L��=c��&n��3κu�6��[�8�e��T�Ҕ�.GUF�(�G��$^J�ڑ�\r��ſ���q��خ��wZ���\r���n�������ÙL5>wv$Rb2{UB�?H ���LAF�Li%`���Tjѫ�Q��\0>�������\0\0\0\0��������SG �M%�B�I�y�[�뽊G?t/ǘ���P����4�% YT*���\">�a&}b��pij��a־x�[W�n�����b\' +�H�%���L��3Ȭ�NC+RW��\nb��L�+�`\0\0\0��!�MWp�᭭gk�&�4q��SGe:O�-]1�Iw�#27������7�Q��%!�T2�C����0Ҵ>�MY�V8�#ch�V(��vv������TN-�������~=I[��W�M5㿀�rn�u��e0�[�Ν���X�$��!D��B���;0z>S%&Fxʗ1+cRղ�GB���)�r�]/q Ïz ύ����9��U/%,��/S�rC��j(�\\�d��$D���eQ�ȵ��}B��j�+�n-�-��ܧem����3���뷐� \0�����q65�YRGX���:a:�\\�\'{V(�C�Ӫ���\Z����.�7p�����4�2��cZQz���_j6��{s}�A�Rrҋ������ӗx�^_է�$�R�#�N��+j}�\Z4hQ>�[����E�\0��� �\0\0\0\0��R�t�wؾ~�{�|�\0��0��� ��\"8\"M��/�j����9E��-�`អ\r-�[�,�&��oo��L��)&��\r1E���E)<���q�d�ᛨYE���p�i�G#�Z����/{�ۢ99�1��$%,֪q�H\"˨T�q���R����\0\09_Ʀ]u�1�\"@�Z��徕�M�ͿS#�F��k-��\'c�^�����bgYшk�Rw�_��$ؿ E� Ϛѹ���c/nA+����=�b/\n#܋a=@\0\0\0\0\0�_��\0���uq�+p��Rb��if�H�F�^ʱ�����j}٩�#55�S����)�l�\"yP���������!�\0ͮ/1s�p���q4����?�۩�4�^��_2���De�\"�?�k�͛��F�ԠGZa���uB�^w-�� B�G���:l_��zK�\0\0\0\0\0\0�AX�/�������,�zO���n�{��i���l��O���q?~������\0�]]Ľ�Ҟ�� �B���?�(��\\levo\'��߮�l�������}�ؙG82����{��䏯��O]�������������\0\0\0\0\0\0D��~4�\'���!���FQ��{sW\\D�͒7-�s���^�{y�m�����8��J�(?�$mh{Ev\'6����w⍪G/�Df[m�c��8�\0��ǿ�nZ@�Դ�o^ٯ(9��ܙ\Z��|�]����TG���fFC��\0\0\0\0\0\08s�|kBQś��ޭ*A�Z�����:3�N�ߦ��e鷡$�w\0\0z*R�z��������\Z���gW\r�S �\Z�U�kE���ks����Cÿ���h[�M��߀\0\0\0\0\0\0��׎JO��\ZO;�\'�0�g ���ynwd��OM� ���n\0\0\0 tQ*E�ב����ˡ �\0\0\0\0\0\0-hթJ�Z4N��[S=�#2�#��[}O�g�\0\0\0\0\0\0\0\0\0\0\0��',4,0,'','','',''),(62,3,16,'75859b10c4223968','9c78857b3d725c1c6d1227a7b8cbe6b2','2017-09-07 09:09:29','2017-09-07 09:09:29','','','Contact Photos','9c78857b3d725c1c6d1227a7b8cbe6b2-4.jpg?ts=1504775234','image/jpeg',80,80,2703,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0P\0P\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ��\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#���3Sa����\0\0\0?\0��M5AQ\0��j�����ǯ<����_�T�@Z��i����9���׾�*��)��{ڥ����J�Y�[6h��e� �,u��$�1����t�KvD3%���g[I�_:kƵ�J�u��B��7��\'vX3i�Rj:�G���*�e�\0��a��M|�i������:{Lٞ�w,dRt� aK�B�f���� �5���Ô��5��b�%֡��Z�uZꅊqNL�����2Õ�oY↚}L�VB�\0���0���ւ7s\0�D�{I��N\n_�J;�)Tʮ>��)���UR�U���V�PlЏ����`�lD4S�M�8��\r�fѲ*H��i�P)CP���O 3�{�a��%y��V�)��yn��YiE�3�I��Vh����; 8�ݴʛG]��5�b��=I~}��vݐr��(��C����/n��X�H�rN*ߎ�Y�=Z�Q�ed���{��\\�����n��X�^¹Z���2�TƓ�e�%W\"���\"��wFVe�L�8$���@K�aM`9G�zv�i�e���s���^�q�Y���9���9(h��9�H��F�`�kd�)�����I$B��r�\n\"n5�����}.�� 9�l2�m&�\n�b����+$V�`\n�\0++���9W��0�h�q�q�������G�\0G��Z�~. ��׬c�����8�o\r��O��5�b61T\ZEW�%B�NnTJU2gfܤ��lu遅-�r�߲�}M�{�2۞,�[�:�\0^2�֫��A��DH.�a<��h_/���4�]W�R|��\'�ỴN��*�.���Ed������Q3�C��S\0�DYV�vÑ>~�X{��\'?���,5C�f�K�W�2�}ߝ$���+�O��0T�\'cX����X��l���f��q� 0�# �8�U(+�*�e �r�a`��[�J�p���rw휢���V��E�+$�z�!��]�=�j33WۮUȇb����7f j,����׳>�NPH�G,y���Q�\r� ���u��:��%Ü�hƙi����\'�l;��\"WI܅4�R+E��n��Q�*?&a%:��6�\rU�M-��(\0\08\0�?�\\��^���ᝠ�+�����>����*�)��1�P�P���a�$�b�:�V�p0���97M��LN�!a-���oX�\0���y�L����Y#*���_n�T~%{����]NI${L�quI7i�0���q�iw\'M-��\Z�^���<���]/)�u� NxU �m���X{Ԭ�FY�c(��Vk0Ml��Y�l��Df]�O�u:��Y��R�0�+�Z�Z!�\rv��[F���G&�(��-�D4j�h��\nR\05�۾ۍSw{a�e�;qZ���_ʴD���d�r�6�ͺ�T�=�J )�H(r&�� &�����n�k��� �� bXBٓ��GmY>� E�l�\'�x�|�5�\"F�r�O���&�� �y%^\Zn�(�:ԓH�*�1{@b���^���\\k�!令#��\0���#�X�3]Rz�l�� ��\0�� �#�\r�D1t�[gfZB*�Q���\"q*�у�j�j$�V�ZbE�� �YPQ�8��~1�$ s8�Xh���FD�G7M�|ls��ѓ-QI�6mRI�V�$� �$�P�}4��.����!�^�5\n�⾪���\r��f�YT�}ګEM�|�U�s�c�=�G�m������K;Lcw��O�0Q�=�{h��c):Ě cr�\\�������n귺��{�i��U���_7�&��L��7)ӷ~\r�K����^f�X�,%_q8Z�)��+����_��#�v,��d���S�ѓդ��y��y���\r��?��^Rv��Y��vS�b�L�>����E�e ^/q:V!�Y���d7��M4�V }��+�J��ض�� WH �K*��$ y*���Q����1J��#��M�P��H�`!C���~�T��7<����_�]CL�~I����oݒ���U��\0uE������}� �V֘~�� �$R�����M4�P�C�����/a3-�dLn.����c��dۛώЌb�8�0�b鮸4nN�WJ��uW�ި�c�Q����rd�\" ��TJ\0*G���i���͸�+�E1vF�hG�敲�MU�uQIC\0qɓ/!��ֿ��',5,0,'','','',''),(63,3,16,'75859b10c4223968','9c78857b3d725c1c6d1227a7b8cbe6b2','2017-09-07 09:09:29','2017-09-07 09:09:29','','','Contact Photos','9c78857b3d725c1c6d1227a7b8cbe6b2-4.jpg?ts=1504775234','image/jpeg',48,48,1755,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \00\00\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n��\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa��\0\0\0?\0���3�c�s�ǜ�?�1���{�pK����]�_��r��\0BsK�]�n 4d��fZ%ӣ� ³+�r0�m�&��i��-��jA�g>���%hM����%�C¿p��O!����6���x�i�e�5���H�)LW�l�e����!k��:�T���h�q2ڰ���NݴM�j�6�A��7�?qY��ˌ�g�Z�[D�En�&Z]-�mnB��a!�[v\\�h��2BaRI?����<~/�y=d�G������3�JM�[ݨ��` ��ԭy���N��\0ɚȥ֐Y�ʈ���O`=�y��| Ҽ�&�-F�mf��+`<�q{�*En՘g���$��Y��`��P��#I%�;�<�z�+��<��#ۣ��g��dl9�n��&���ek�ٵ���)X�C�dz�D����0�N%HiI�m���R/hvߠ��)5>B�~N��M�X�}��\']�؜�\Zlcޒ�Z��FQ.6��?` �/����>�>J[X㦣�`�3���l8m%X<�=�j�2.�L2�1\"����D�7�0�Ĉ2�+�I1��Kw����n^i>%T%�cƺ�x�]�l�_�/�C��X�JR�B�y��Ÿ�Q-�+μ�+ug�\\�y�J7t���{2U0�OH��m�YF]q�Z�a�$f�d�B����2�F<��c.:�e`��Z�_���|������)�n|���KQi\Z�WK��y��#Y, 6��6c&,S�MP�Δ�3ę��;F�imE�M�I�MiF��܎L��N�W����J!O�Vi��2zA\n(�$�G�#\n%�{�^s*]���p��\\�2n�Et��ܬ�fݏ�Z\Z�m\0�:��2%�.�؁D�3)�[F������a ���],2 ]�ˆ�ۮ�� �Z�ϯ*kj4=���N1�����-c��;l�:�@�Ϋ+�������O�WW��!א^EJGNFG�Ü$�L�B�FI\0CE�x��C42�Z�$R�u��}����ZB��c=/>�z������XK�3x�q�,�8�+���-�#��?*\ZF�����V)/%xR3�e�0�(b0�Š;# ;Kl��\r%�Ye�cCM6���\'JP�%8�1��z�Wm�J��e�Z⁜�[�&+i!�.>Vz8��X�E}+d�\r\0�!�P��eաi�U�tv��O�;}qj�e0åi��?~A�-��٘H �q�-�b> �\Z�+9�#7�x�1�\Z�\Z�e���=`�t,���\n�\0\"\nn:x%zs�Ϥ����?�z|��գ�c���u��S?����K��R+1Uh�a���hTc�%A��1�>?�B�\0����',6,0,'','','',''),(64,6,17,'75859b10d79196fc','15048d33e71544a25a6dd13bb081c78f','2017-09-07 09:13:05','2017-09-07 09:13:05','','','Contact Photos','15048d33e71544a25a6dd13bb081c78f-4.jpg?ts=1504775545','image/jpeg',175,175,5493,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0�\0�\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ��\0B\0\0 \0\0\0\0\0 !\n1A\"Qa�q�%23�#$&5BR����Es�����\0\0\0?\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Ն����X\Z\'���p|L�sN���}�Y%ZR|�(�J*I&+�rJ#�yI)%l�Z�,:��i�(��ϥ�)���J�����*hχo�мI����$�Dj-� (�C\"�cI(s���_�L�:g�� `w�I����9�s.w�Y���a���C\"3:I��e�~��g,�ڮ�Ϩ�6�&�t�t��/iK��xv<�v #=�{�$�ѹ�Idу=��#�}�G���!�\0\0\0\0\0\0\0*|z�B��6�Zp�]�s\"�A�ڝ\r�E\r��{�b��Z�HI��j��>Eq�E�˒S.:t�7�Vg�5�u;��Ys=�YFZ�Rk��}����j��ʮHnl�Ifh���M6&\";M�DD�]��¿SR��c�h�B��{��t��ƤG��V�Mʽ4$�&2��\"����%���{̈}9$����489hۆ�� @�e��崭�\Z��ط<��m�(v&�Ne{�ȵE�qQMI��\Z�uO�h���D<�\0\0\0\0\0\0\0qۍGfn���b��R���8��2w���o\nstET�x=d��>��H��l�MD���:�!M2��a��L��c��/�Ri��Cr���������T�\Z�uΥ$�F�IN��춆�q�5��S�,-B��c�^�op�}AW�8�Y)�c?��T��2Fi��դkI��$b�Փ�鐸�A��\\<���F��h�ŭ�ܿIk�)�3^�N�ٓ�wu]��k�U4�J���8�W�*�F�7�`^U:V��ң�I%�̷?��|����C{�Oh�[�:r�qğ��� ����0\\���\Ze0\\�ޅ\Z��.����RvZ��NOI\n#�����O v���-ik�F�����o�;�E�I����ձ��5�\Z�Rv!,��\\4;����MyE�3��t�a9��B��:̌�[�X�T���h_\"��r4k��*�F\\��U:��M�z�\0�u#�\0�C�\0\0\0\0\0�>�f�r���Z\\kp�qҾ.oU�u������q-S�CJK��PSǬf�2JJ��G�D Ym���+>!҄�^�\n\'��/{} �W7��-K;�K���kI�� (�;T�F��\r��H̖J�\0��J�sj� K��\0��m���p֫WV\'�\"IٹjTlx�;ҤO,R��Ԑǖ� edK����:�8���<)5h�y Ó�w ��r*-�0�������Bf��J& u:fIV�r�:rjh.p�甴���9� M��H���>���듲pg�BҲ4:{-��RT�P�MHZ��Rw+|�)�D�qKєW2W��e����j�O{F|��aM)xh���ʴH��-�IF�3捩Gِ\0\0\0\0\0�q���d-�B\\*�u���D�Z��nǮ~�4��gfG�y�N��-m�ݯ�m(ָ����m����WW���IoԺ������w2I��HX%�Lza�֞X��Y��;�$�D�Q{}�54;9�)k3S���2%-|Ĕ����\0��E�ɧT|+2�B��B�H�U�y���������K>Yk�[\ZYN ��\"ZyTGV\ZĢ5MGR�OO��&7��� �;_��Ou��[7���O��?�0�Rv�Vg#۔��+���E�1�[ٲ\0\0\0\0\0��;X��\Zqz��qJ����2c:�#��vIK^Fk4�B/�X���﹑�E4�eh�M8�8(�:�\0s2ia���{���CT��\0XR�J��������dz�]���d��݉� � �,�1r�~��6���DdG��OB�g��&f)��e�+/�4�T�Q�j�����Ѱ�~w��c�8���ڤF�gT�ճ�G�[�M\')��?J�UDR)6v[�#E3���$n��=�J��K�\'�D��q1�8��򄭴��7�(��U����ueL�����t�v2ҤT�K�[o���\0>}FH\0\0\0\0\0B��\0��Lv�x(Ʋ�9�3O\"\no�H�P��QiJU�;G�\\/��e>����oQ�{hnW�^\0�S���8��{�\"Λ��JK\\�*��G��1)|��\'s6��@��M���o+@�:�euw;uY�*9���r�Ol4��YL��Բ3Q#�\"5�E}�q�SS��G�HRb]{~&�B\n�q@�wgv�Qg_��=�rcW6�EP�j\"؊��v�ׇv�{:׎�V\r��}L��dD[u��_^� ?!y֑p<[L�^�Z}�ӵ����k;[cJ.ɖ6���鲔��$/D��Y[�kwR��D���\0\0\0\0�.n���Nn��v\rv�sv�upVV6�;o̥����M���\'�x��8x�-��a�����ES������l13K� �Yx%���rJ��rR�Y�5B$�e�=4�_��ć�&��N\Z_�����k���H��Q;wdW/+�^&�����)5���i�(���-�Z�<9sN����.��j�M� �#�p�9��h���ԥ�i�ʼn�Q=&�U�O�Qn�Q�Ԕl�a��\\�.��\\�\0�㴒�Mʮ�%y�2=�ޟ�]Z��B˩�J$��\0-��F��X� R2�b���X�01�[�#s;=�\Z�\r&��QiOwM Z�<�dJ2�ڀ��#��o��pM�Nӷ�w��8m�2��i�$��d��m�$E��jD�����E��2���iC;�iwN1���C����59��\"�~��O]����O�[��^T�f�1��!����q�2yq��W���K�Q�ө���y����\0\0\0\0��U��K�r�X�2@��?bp�L�r+��d�057x������[S#Y���{m�̣4.��+�o5u�S8���F��M2����h�/m2^��*+j2L�L���3,�}D\0���F�>�-:�i)t���Y��.�Ϻ�f��bV���Z�:Z��`W%T���3�>I��>Fd���F�-$�j#;*O$��)R�])}����[��d�\0 z���~B�пgG 4�L��=c��&n��3κu�6��[�8�e��T�Ҕ�.GUF�(�G��$^J�ڑ�\r��ſ���q��خ��wZ���\r���n�������ÙL5>wv$Rb2{UB�?H ���LAF�Li%`���Tjѫ�Q��\0>�������\0\0\0\0��������SG �M%�B�I�y�[�뽊G?t/ǘ���P����4�% YT*���\">�a&}b��pij��a־x�[W�n�����b\' +�H�%���L��3Ȭ�NC+RW��\nb��L�+�`\0\0\0��!�MWp�᭭gk�&�4q��SGe:O�-]1�Iw�#27������7�Q��%!�T2�C����0Ҵ>�MY�V8�#ch�V(��vv������TN-�������~=I[��W�M5㿀�rn�u��e0�[�Ν���X�$��!D��B���;0z>S%&Fxʗ1+cRղ�GB���)�r�]/q Ïz ύ����9��U/%,��/S�rC��j(�\\�d��$D���eQ�ȵ��}B��j�+�n-�-��ܧem����3���뷐� \0�����q65�YRGX���:a:�\\�\'{V(�C�Ӫ���\Z����.�7p�����4�2��cZQz���_j6��{s}�A�Rrҋ������ӗx�^_է�$�R�#�N��+j}�\Z4hQ>�[����E�\0��� �\0\0\0\0��R�t�wؾ~�{�|�\0��0��� ��\"8\"M��/�j����9E��-�`អ\r-�[�,�&��oo��L��)&��\r1E���E)<���q�d�ᛨYE���p�i�G#�Z����/{�ۢ99�1��$%,֪q�H\"˨T�q���R����\0\09_Ʀ]u�1�\"@�Z��徕�M�ͿS#�F��k-��\'c�^�����bgYшk�Rw�_��$ؿ E� Ϛѹ���c/nA+����=�b/\n#܋a=@\0\0\0\0\0�_��\0���uq�+p��Rb��if�H�F�^ʱ�����j}٩�#55�S����)�l�\"yP���������!�\0ͮ/1s�p���q4����?�۩�4�^��_2���De�\"�?�k�͛��F�ԠGZa���uB�^w-�� B�G���:l_��zK�\0\0\0\0\0\0�AX�/�������,�zO���n�{��i���l��O���q?~������\0�]]Ľ�Ҟ�� �B���?�(��\\levo\'��߮�l�������}�ؙG82����{��䏯��O]�������������\0\0\0\0\0\0D��~4�\'���!���FQ��{sW\\D�͒7-�s���^�{y�m�����8��J�(?�$mh{Ev\'6����w⍪G/�Df[m�c��8�\0��ǿ�nZ@�Դ�o^ٯ(9��ܙ\Z��|�]����TG���fFC��\0\0\0\0\0\08s�|kBQś��ޭ*A�Z�����:3�N�ߦ��e鷡$�w\0\0z*R�z��������\Z���gW\r�S �\Z�U�kE���ks����Cÿ���h[�M��߀\0\0\0\0\0\0��׎JO��\ZO;�\'�0�g ���ynwd��OM� ���n\0\0\0 tQ*E�ב����ˡ �\0\0\0\0\0\0-hթJ�Z4N��[S=�#2�#��[}O�g�\0\0\0\0\0\0\0\0\0\0\0��',4,0,'','','',''),(65,6,17,'75859b10d79196fc','15048d33e71544a25a6dd13bb081c78f','2017-09-07 09:13:05','2017-09-07 09:13:05','','','Contact Photos','15048d33e71544a25a6dd13bb081c78f-4.jpg?ts=1504775545','image/jpeg',80,80,2703,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0P\0P\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ��\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#���3Sa����\0\0\0?\0��M5AQ\0��j�����ǯ<����_�T�@Z��i����9���׾�*��)��{ڥ����J�Y�[6h��e� �,u��$�1����t�KvD3%���g[I�_:kƵ�J�u��B��7��\'vX3i�Rj:�G���*�e�\0��a��M|�i������:{Lٞ�w,dRt� aK�B�f���� �5���Ô��5��b�%֡��Z�uZꅊqNL�����2Õ�oY↚}L�VB�\0���0���ւ7s\0�D�{I��N\n_�J;�)Tʮ>��)���UR�U���V�PlЏ����`�lD4S�M�8��\r�fѲ*H��i�P)CP���O 3�{�a��%y��V�)��yn��YiE�3�I��Vh����; 8�ݴʛG]��5�b��=I~}��vݐr��(��C����/n��X�H�rN*ߎ�Y�=Z�Q�ed���{��\\�����n��X�^¹Z���2�TƓ�e�%W\"���\"��wFVe�L�8$���@K�aM`9G�zv�i�e���s���^�q�Y���9���9(h��9�H��F�`�kd�)�����I$B��r�\n\"n5�����}.�� 9�l2�m&�\n�b����+$V�`\n�\0++���9W��0�h�q�q�������G�\0G��Z�~. ��׬c�����8�o\r��O��5�b61T\ZEW�%B�NnTJU2gfܤ��lu遅-�r�߲�}M�{�2۞,�[�:�\0^2�֫��A��DH.�a<��h_/���4�]W�R|��\'�ỴN��*�.���Ed������Q3�C��S\0�DYV�vÑ>~�X{��\'?���,5C�f�K�W�2�}ߝ$���+�O��0T�\'cX����X��l���f��q� 0�# �8�U(+�*�e �r�a`��[�J�p���rw휢���V��E�+$�z�!��]�=�j33WۮUȇb����7f j,����׳>�NPH�G,y���Q�\r� ���u��:��%Ü�hƙi����\'�l;��\"WI܅4�R+E��n��Q�*?&a%:��6�\rU�M-��(\0\08\0�?�\\��^���ᝠ�+�����>����*�)��1�P�P���a�$�b�:�V�p0���97M��LN�!a-���oX�\0���y�L����Y#*���_n�T~%{����]NI${L�quI7i�0���q�iw\'M-��\Z�^���<���]/)�u� NxU �m���X{Ԭ�FY�c(��Vk0Ml��Y�l��Df]�O�u:��Y��R�0�+�Z�Z!�\rv��[F���G&�(��-�D4j�h��\nR\05�۾ۍSw{a�e�;qZ���_ʴD���d�r�6�ͺ�T�=�J )�H(r&�� &�����n�k��� �� bXBٓ��GmY>� E�l�\'�x�|�5�\"F�r�O���&�� �y%^\Zn�(�:ԓH�*�1{@b���^���\\k�!令#��\0���#�X�3]Rz�l�� ��\0�� �#�\r�D1t�[gfZB*�Q���\"q*�у�j�j$�V�ZbE�� �YPQ�8��~1�$ s8�Xh���FD�G7M�|ls��ѓ-QI�6mRI�V�$� �$�P�}4��.����!�^�5\n�⾪���\r��f�YT�}ګEM�|�U�s�c�=�G�m������K;Lcw��O�0Q�=�{h��c):Ě cr�\\�������n귺��{�i��U���_7�&��L��7)ӷ~\r�K����^f�X�,%_q8Z�)��+����_��#�v,��d���S�ѓդ��y��y���\r��?��^Rv��Y��vS�b�L�>����E�e ^/q:V!�Y���d7��M4�V }��+�J��ض�� WH �K*��$ y*���Q����1J��#��M�P��H�`!C���~�T��7<����_�]CL�~I����oݒ���U��\0uE������}� �V֘~�� �$R�����M4�P�C�����/a3-�dLn.����c��dۛώЌb�8�0�b鮸4nN�WJ��uW�ި�c�Q����rd�\" ��TJ\0*G���i���͸�+�E1vF�hG�敲�MU�uQIC\0qɓ/!��ֿ��',5,0,'','','',''),(66,6,17,'75859b10d79196fc','15048d33e71544a25a6dd13bb081c78f','2017-09-07 09:13:05','2017-09-07 09:13:05','','','Contact Photos','15048d33e71544a25a6dd13bb081c78f-4.jpg?ts=1504775545','image/jpeg',48,48,1755,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \00\00\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n��\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa��\0\0\0?\0���3�c�s�ǜ�?�1���{�pK����]�_��r��\0BsK�]�n 4d��fZ%ӣ� ³+�r0�m�&��i��-��jA�g>���%hM����%�C¿p��O!����6���x�i�e�5���H�)LW�l�e����!k��:�T���h�q2ڰ���NݴM�j�6�A��7�?qY��ˌ�g�Z�[D�En�&Z]-�mnB��a!�[v\\�h��2BaRI?����<~/�y=d�G������3�JM�[ݨ��` ��ԭy���N��\0ɚȥ֐Y�ʈ���O`=�y��| Ҽ�&�-F�mf��+`<�q{�*En՘g���$��Y��`��P��#I%�;�<�z�+��<��#ۣ��g��dl9�n��&���ek�ٵ���)X�C�dz�D����0�N%HiI�m���R/hvߠ��)5>B�~N��M�X�}��\']�؜�\Zlcޒ�Z��FQ.6��?` �/����>�>J[X㦣�`�3���l8m%X<�=�j�2.�L2�1\"����D�7�0�Ĉ2�+�I1��Kw����n^i>%T%�cƺ�x�]�l�_�/�C��X�JR�B�y��Ÿ�Q-�+μ�+ug�\\�y�J7t���{2U0�OH��m�YF]q�Z�a�$f�d�B����2�F<��c.:�e`��Z�_���|������)�n|���KQi\Z�WK��y��#Y, 6��6c&,S�MP�Δ�3ę��;F�imE�M�I�MiF��܎L��N�W����J!O�Vi��2zA\n(�$�G�#\n%�{�^s*]���p��\\�2n�Et��ܬ�fݏ�Z\Z�m\0�:��2%�.�؁D�3)�[F������a ���],2 ]�ˆ�ۮ�� �Z�ϯ*kj4=���N1�����-c��;l�:�@�Ϋ+�������O�WW��!א^EJGNFG�Ü$�L�B�FI\0CE�x��C42�Z�$R�u��}����ZB��c=/>�z������XK�3x�q�,�8�+���-�#��?*\ZF�����V)/%xR3�e�0�(b0�Š;# ;Kl��\r%�Ye�cCM6���\'JP�%8�1��z�Wm�J��e�Z⁜�[�&+i!�.>Vz8��X�E}+d�\r\0�!�P��eաi�U�tv��O�;}qj�e0åi��?~A�-��٘H �q�-�b> �\Z�+9�#7�x�1�\Z�\Z�e���=`�t,���\n�\0\"\nn:x%zs�Ϥ����?�z|��գ�c���u��S?����K��R+1Uh�a���hTc�%A��1�>?�B�\0����',6,0,'','','',''),(67,5,18,'75859b10d792d9a0','d74f209bfcd190b3864fa678e5068a16','2017-09-07 09:16:08','2017-09-07 09:16:08','','','Contact Photos','6.jpg','image/jpeg',175,175,5486,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0�\0�\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ��\0B\0\0 \0\0\0\0\0 !\n1A\"Q�aq�%23R����#$&5B�Es�����\0\0\0?\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Ն����X\Zg���p|L�sN���}�Y%ZR|�(�J*I&+�rJ#�yI)%l�Z�,:��i�(��ϥ�)���J�����*hχo��>$���Œd \"5ɐb��o���9���/צF�3�qN��;뤂��������9�;߬�Kka0���Z���$�Բ��Ob3�g�Wqg�U�l�W�\0ĺQ������<;J;��剽ŒTh܋}��h�����>�#����\0\0\0\0\0\0\0>=]�Xwg-8i��9�u����N�梿���ݱ^�-l$$��5Rt�\"�����e�)�:G��+3Ϛ�ͺ���,���-d�5�ܾ��n~5SeW$76sS$�4SME������\"\"O.����_��)YŽ1�\r�X!M\nm��y�Kl�R�#�k�M&�^�o|ML}Ij���O��D>��OJ��\Z�m��i��v2��r�VӍB�l[�rd��D�;k�2��dZ���8�(��$���h:�״y}`\0\0\0\0\0\0\08�ƣ�37 } Nsſ�]�E�c pJL�򄩵�œ�U<��Y)�O�&�$.�!E�Q%��N�C�SL�8�d��#z��9�㔚g,�ܮ��G w�7GggU)F�]Es�I-��DS�:{-��e�|jw�K P���䗴[�<�PU�&�Jw���iU4�L��\Zno5i\Z�j���ud�:d.-�n��=9�tр��Z!�kj�/�Z��rL�׹S��d�]�Wg�\Z��M(R���%�#劰Q����N��j���ERI�3-���_=�#���=�����q\'�uc���L-e�ƙL#��F�t�����G�����䓓�B��eEk2=����ZZ�C���������3����xdRh�#\'�5ldE(�nF�ԝ�K/��\r�9c���^QG���4�&NjP���#=��:�)<2�ȧ�܆M\Z�3J���\"z�N�{�n���]H�\0�!�\0\0\0\0\0Xl3W9_�.5�W���_7����v��츖��㡥%�k()��3Q�%%MJ#�\",��|h��B{�i�������c+��r��%��ɥ�Mj5���Z��V#Isӆ��$fK%M\0j�t��5s����n6���e8kU��ݑ$�܉5*6���듲pg�BҲ�:t�[I줩��*���¤�V�pS�◣(�d�Bŗ4B.� �su=�� =�4�ᢙ�KAeZ$qu餣}��Fԣ��\0\0\0\0\0\nY��No��!�N��j{\"F-zy�c�?s\Z ��I3�#̼˧Q������\r��k\\]���6��Pꫫ�Ur$��]MIN�^|��$�^u�,ݦ=0��O,Vt,�p���]�I(���F\Z��̔�������Q��bJID�l�\0����dӪ>�o!Sg�[$i*��<�\\Qng|Q�u��,�,�tu�-<�#�\rbQ\Z�&��v�����c����٧��u�-����\'���B�b);C�3����ha��Kr\"ۘ�r-���\0\0\0\0\0K��y�8�qa��^���1�[�؍�$��#5�K��,JL���Ȍ��a��L��s�&�[d��1\r�צ�K�����ɧ��=��\0Dx��a�Ó_Ud�ǁ�5%�~��<��&��ܾ^�G�⏚��_�K�ω�f\\O�2ث�����=�t��2�7 ���36��FffJw���&M^DDV��\0\0\0\0\0���A�������-G���M�:]��\Z�N/&�ɛ����3:Rv�_��?]����%0���^�w g�h��F˭�3橯c�`��j�G�f=h�R� Ȫn������G)#I�&e��6�96\0\0\0\0\0\0���L4/���6v91��!�\r�)�,�~*�Rg#UR�ij�\"��rN������P�kJ;�m�>�b���d&X�����Fޭ�b��48�K�K�T\\�h^�Q̶#I\Z�hWe+_ͺ���ɧI;�\n�F��.Vw)7|<�f�d�O�̚Xi���>��U-��R��/��1����.�t��2fs�n���iE��u?b�D�V��2#�Ca��u3��3�q2����j�w���Z�����qN?;�^��X���R#g3�Dj�֣��&�����\nI*�)�;-�����x�j�7A��%Gi��ŢV�8��TN�BV�ER��e�*��������W�ZMQ�i;iR*h��-����\0�>�$\0\0\0\0\0�!}���Lv�x(Ʋ�9�3O\"\no�H�P��QiJU�;G�\\/��e>����oQ�{hnW�^\0�S���8��{�\"Λ��JK\\�*��G��1)|��\'s6��@��M���o+@�:�euw;uY�*9���r�Ol4��YL��Բ3Q#�\"5�E}�q�SS��G�HRb]{~&�B\n�q@�wgv�Qg_��=�rcW6�EP�j\"؊��v�ׇv�{:׎�V\r��}L��dD[u��_^� ?!y֑p<[L�^�Z}�ӵ����k;[cJ.ɖ6���鲔��$/D��Y[�kwR��D���\0\0\0\0�.n���Nn��v\rv�sv�upVV6�;o̥����M���\'�x��8x�-��a�����ES������l13K� �Yx%���rJ��rR�Y�5B$�e�=4�_��ć�&��N\Z_�����k���H��Q;wdW/+�^&�����)5���i�(���[���xr�I�W�+�]}f,�\n��^G��,s������J\'8ӫ��zL+Z�%l����$�Y�(�:���]��6��\0e�i%v��]�J�d{o�?�$��{�;�SؔI-�[l;��Ǣ���e�Ŏ3l�b`cn��F�v6{\nm 퍍��JZ�������\\��dJ2�ڀ��#��o��pM�Nӷ�w��8m�2��i�$��d��m�$E��jD��M�r\"�b�vKȴ���4����s���܈�\Z��S�E�NU\'����|�{u���H�n��0B��a�G�\'�w~�x�-���5�:���������@\0\0\0\0|�(�\\����-e�s$ c�\' 4�W\"�+H�Sw��:��%�25�Ȉ׶ܜ�3B�\r���W\\e3���4hё��/�Z�q�&����%�-¢��$ʄʺiS2�g�@ +��m��RӭV��NQ\\�5�[B챌���h�x�%kk9�����1&rQ%Hj���p��՗��h����tזf���,����a��\"��ڪA�@d�&�b\n4�cI+\0-��R�V�^����_g��G�<\0\0\0\0Wc����3�M214��V9&�n���)�мsc73MB/ǬD�<�%eP�JX������������G��Z��!m_U���X:�,m��0�y#𖦳U2SD�\"�9 �I^��)�#�\r2��]�\0\0\0<;�~�bj��\rmk;^I5��]2�8�)�~�j�2K�!��d d�����FI) ���]�_���8q�����:j�:�űEڱF����n`���=Z�qmL����}��$����J��J�Zi��w�h�tK�->�)�����t��%\Z�y&��\"$�r0~Ʊك��)23�T��[\Z����:�L�L��*�{�f{�^|m|D5��Wt�R�y)d��z�X�.�QD��&G\"$����#�Y�T/�R���B��rMŵź��쭶�}�>�{���v��\0\0>_��;.&ƹ *H��6�L\'R �$�j�huzuQ�vCQ���EҦ�:y}�ƚ�U�,kJ!�Y>}��Fк/no��3�NZQw35��r��+����d�JRDv�е�mO��F�\n\'�k~�|�H��3�8\0\0\0\0\0c�GT��/]�/����_?��F�9�2�GI����MZ��1�\'(����l3�A��KuŒ��RM��4��w�$ԙ!�(��RH�\'���~.3,���3u (�s�@#.m1H�wK[���:��vtG\'9&2�D�$���N0�Yu\n�n4�:J_���# \0+��ˮ��&8�H\Z�W���ҾSi����dr��؍e��d�}K���{�L��:1\rqjN���ě�(����Z735��T��_�s��\0\0\0\0\0\0��Ɣd�~�?T�\0��2}��nj눝�F���� ��o1-����y��� ]��č��h�����v�9n�Q�H��Ȍ�m��{���>��m� H:�����5�;�{�#RT��K��y~���2����v�\0\0\0\0\0\0u�hJ8��=�U�Ch<�^;������F �[���L�6�$��\0\0EJ]�]�z��2��ƣ�s��zT�8ƭ�{\Z�x������*P���}�� c�鷐��\0\0\0\0\0\0\Z���I�7�I�wD�\0& �q���-Î�>�鿡���\r�\0\0��%H���?�����yt!�\0\0\0\0\0\0��\Z�)V�F�ַ�jg��f^D{� o���x\0\0\0\0\0\0\0\0\0\0\0\0��',4,0,'','','',''),(68,5,18,'75859b10d792d9a0','d74f209bfcd190b3864fa678e5068a16','2017-09-07 09:16:08','2017-09-07 09:16:08','','','Contact Photos','6.jpg','image/jpeg',80,80,2703,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0P\0P\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ��\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#���3Sa����\0\0\0?\0��M5AQ\0��j�����ǯ<����_�T�@Z��i����9���׾�*��)��{ڥ����J�Y�[6h��e� �,u��$�1����t�KvD3%���g[I�_:kƵ�J�u��B��7��\'vX3i�Rj:�G���*�e�\0��a��M|�i������:{Kٞ�w,dRt� aK�B�f���� }��z�a�o�-fr�����@@D5��֮V��b�S�&��-�L��m�[�x���S!�����d�\"ἵ����1�/��n}������U2�����e&�T��`a�U��4#�``�!\rũl�>5�t�l�\n�(\"�i�\nP�)�\'�� ��r�c-�^j����e�[��ZE�t\0���l�A�-��\'!�~��N.A�m2���p�\rjX��OR_���]�d�r�8��$+�\' ۬�. ��Ӭ[�����8�o\rb�O��5�b61T\Z�EW�%B�NnTJS�d�͸�\"a�ۦ��˧~��m�7\r���nx��nd��x�Z�z�1�� �����|�#;��Mu_5I�7,�\"����;w8L��� SY�7ڪJ�cD��S LQe[��D�m��a��c�ܜ��rL�L� ���/m_�˘�~t�F�P��?��|�R0��c[��wco�W�u�4,Ê�.8�%T����La�3�兂21o�*�I�B�e�߶r��8Z;AH��q먆��v��;�61���a\\?n�W\"��J�ݘ1���N��+^��%9A\"���tb(C�GX7|.{m�Gt{�ꧼ�s\r�\Ze�jR���5��|�]\'r�1H��Ż��F ������gl�45V%4�/�P\0\0��8�\0�r�Mx�73�v���ۃ��(�+�0�LX�ߘ�QCB����`� ����[���0\"�d��6j�1:������>��c�3c��2:sH>p\\ud��V.���U}��Q��L��>�C�u9$��2���$ݦ�”��q�i��l�4���j5z��h���gQt��C���-9�T\']��l\ra�R�5IgM��s)Y��4A��5fѳS��tZ%?���:f�J�ð�Ujuh�P5�� Zm �,����!lѪ)��d)H@\0׏n�n5M��;����uk8bێ9*�8w���8� 6���{^�Sl�P�MgLISwg8!����9���\0Pİ��\'e2�ڲ}�����O�����j%�D�`�V����M��f�J�4�jQ�}��N3�*�1{@b���^���\\k�!令#��\0���#�X�3]Rz�l�� ��\0�� �#�\r�D1t�[gfZB*�Q���\"q*�у�j�j$�V�ZbE�� �YPQ�8��~1�$ s8�Xh���FD�G7M�|ls��ѓ-QI�6mRI�V�$� �$�P�}4��.����!�^�5\n�⾪���\r��f�YT�}ګEM�|�U�s�c�=�G�m������K;Lcw��O�0Q�=�{h��c):Ě cr�\\�������n귺��{�i��U���_7�&��L��7)ӷ~\r�K����^f�X�,%_q8Z�)��+����_��#�v,��d���S�ѓդ��y��y���\r��?��^Rv��Y��vS�b�L�>����E�e ^/q:V!�Y���d7��M4�V }��+�J��ض�� WH �K*��$ y*���Q����1J��#��M�P��H�`!C���~�T��7<����_�]CL�~I����oݒ���U��\0uE������}� �V֘~�� �$R�����M4�P�C�����/a3-�dLn.����c��dۛώЌb�8�0�b鮸4nN�WJ��uW�ި�c�Q����rd�\" ��TJ\0*G���i���͸�+�E1vF�hG�敲�MU�uQIC\0qɓ/!��ֿ��',5,0,'','','',''),(69,5,18,'75859b10d792d9a0','d74f209bfcd190b3864fa678e5068a16','2017-09-07 09:16:09','2017-09-07 09:16:09','','','Contact Photos','6.jpg','image/jpeg',48,48,1755,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \00\00\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n��\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa��\0\0\0?\0���3�c�s�ǜ�?�1���{�pK����]�_��r��\0BsK�]�n 4d��fZ%ӣ� ³+�r0�m�&��i��-��jA�g>���%hM����%�C¿p��O!����6���x�i�e�5���H�)LW�l�e����!k��:�T���h�q2ڰ���NݴM�j�6�A��7�?qY��ˌ�g�Z�[D�En�&Z]-�mnB��a!�[v\\�h��2BaRI?����<~/�y=d�G������3�JM�[ݨ��` ��ԭy���N��\0ɚȥ֐Y�ʈ���O`=�y��| Ҽ�&�-F�mf��+`<�q{�*En՘g���$��Y��`��P��#I%�;�<�z�+��<��#ۣ��g��dl9�n��&���ek�ٵ���)X�C�dz�D����0�N%HiI�m���R/hvߠ��)5>B�~N��M�X�}��\']�؜�\Zlcޒ�Z��FQ.6��?` �/����>�>I�X㞣�`�3���lHm%X8�=�j�2.�K2�1$������7���2�)�I1��Cw����n^i>%T%�cƺ�x�]�l�_�/�C��X�JR�B�y��Ÿ�Q-�+μ�+ug�\\�y�J7t���{2U0�OH��m�YF]q�Z�a�$f�d�B����2�F<��c.:�e`��Z�_���|������%�n|���KQi\Z�WK��y��#X0 6��6�&,S�MP���;ę��;F�imE�M�I�MiF��܎L��N�W����J!O�Vi��2zA\n(�$�G�#\n%�{�^s*]���p��\\�2n�Et��ܬ�fݏ�Z\Z�m\0�:��2%�.�؁D�3)�[F������a ���],2 ]�ˆ�ۮ�� �Z�ϯ*kj4=���N1�����-c��;l�:�@�Ϋ+�������O�WW��!א^EJGNFG�Ü$�L�B�FI\0CE�x��C42�Z�$R�u��}����ZB��c=/>�z������XK�3x�q�,�8�+���-�#��?*\ZF�����V)/%xR3�e�0�(b0�Š;# ;Kl��\r%�Ye�cCM6���\'JP�%8�1��z�Wm�J��e�Z⁜�[�&+i!�.>Vz8��X�E}+d�\r\0�!�P��eաi�U�tv��O�;}qj�e0åi��?~A�-��٘H �q�-�b> �\Z�+9�#7�x�1�\Z�\Z�e���=`�t,���\n�\0\"\nn:x%zs�Ϥ����?�z|��գ�c���u��S?����K��R+1Uh�a���hTc�%A��1�>?�B�\0����',6,0,'','','',''),(70,0,19,'75859b10e58a60ae','2b902d193517f74d2c14e163cff8c10e','2017-09-07 09:16:08','2017-09-07 09:16:08','','','Contact Photos','6.jpg','image/jpeg',175,175,5486,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0�\0�\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ��\0B\0\0 \0\0\0\0\0 !\n1A\"Q�aq�%23R����#$&5B�Es�����\0\0\0?\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Ն����X\Zg���p|L�sN���}�Y%ZR|�(�J*I&+�rJ#�yI)%l�Z�,:��i�(��ϥ�)���J�����*hχo��>$���Œd \"5ɐb��o���9���/צF�3�qN��;뤂��������9�;߬�Kka0���Z���$�Բ��Ob3�g�Wqg�U�l�W�\0ĺQ������<;J;��剽ŒTh܋}��h�����>�#����\0\0\0\0\0\0\0>=]�Xwg-8i��9�u����N�梿���ݱ^�-l$$��5Rt�\"�����e�)�:G��+3Ϛ�ͺ���,���-d�5�ܾ��n~5SeW$76sS$�4SME������\"\"O.����_��)YŽ1�\r�X!M\nm��y�Kl�R�#�k�M&�^�o|ML}Ij���O��D>��OJ��\Z�m��i��v2��r�VӍB�l[�rd��D�;k�2��dZ���8�(��$���h:�״y}`\0\0\0\0\0\0\08�ƣ�37 } Nsſ�]�E�c pJL�򄩵�œ�U<��Y)�O�&�$.�!E�Q%��N�C�SL�8�d��#z��9�㔚g,�ܮ��G w�7GggU)F�]Es�I-��DS�:{-��e�|jw�K P���䗴[�<�PU�&�Jw���iU4�L��\Zno5i\Z�j���ud�:d.-�n��=9�tр��Z!�kj�/�Z��rL�׹S��d�]�Wg�\Z��M(R���%�#劰Q����N��j���ERI�3-���_=�#���=�����q\'�uc���L-e�ƙL#��F�t�����G�����䓓�B��eEk2=����ZZ�C���������3����xdRh�#\'�5ldE(�nF�ԝ�K/��\r�9c���^QG���4�&NjP���#=��:�)<2�ȧ�܆M\Z�3J���\"z�N�{�n���]H�\0�!�\0\0\0\0\0Xl3W9_�.5�W���_7����v��츖��㡥%�k()��3Q�%%MJ#�\",��|h��B{�i�������c+��r��%��ɥ�Mj5���Z��V#Isӆ��$fK%M\0j�t��5s����n6���e8kU��ݑ$�܉5*6���듲pg�BҲ�:t�[I줩��*���¤�V�pS�◣(�d�Bŗ4B.� �su=�� =�4�ᢙ�KAeZ$qu餣}��Fԣ��\0\0\0\0\0\nY��No��!�N��j{\"F-zy�c�?s\Z ��I3�#̼˧Q������\r��k\\]���6��Pꫫ�Ur$��]MIN�^|��$�^u�,ݦ=0��O,Vt,�p���]�I(���F\Z��̔�������Q��bJID�l�\0����dӪ>�o!Sg�[$i*��<�\\Qng|Q�u��,�,�tu�-<�#�\rbQ\Z�&��v�����c����٧��u�-����\'���B�b);C�3����ha��Kr\"ۘ�r-���\0\0\0\0\0K��y�8�qa��^���1�[�؍�$��#5�K��,JL���Ȍ��a��L��s�&�[d��1\r�צ�K�����ɧ��=��\0Dx��a�Ó_Ud�ǁ�5%�~��<��&��ܾ^�G�⏚��_�K�ω�f\\O�2ث�����=�t��2�7 ���36��FffJw���&M^DDV��\0\0\0\0\0���A�������-G���M�:]��\Z�N/&�ɛ����3:Rv�_��?]����%0���^�w g�h��F˭�3橯c�`��j�G�f=h�R� Ȫn������G)#I�&e��6�96\0\0\0\0\0\0���L4/���6v91��!�\r�)�,�~*�Rg#UR�ij�\"��rN������P�kJ;�m�>�b���d&X�����Fޭ�b��48�K�K�T\\�h^�Q̶#I\Z�hWe+_ͺ���ɧI;�\n�F��.Vw)7|<�f�d�O�̚Xi���>��U-��R��/��1����.�t��2fs�n���iE��u?b�D�V��2#�Ca��u3��3�q2����j�w���Z�����qN?;�^��X���R#g3�Dj�֣��&�����\nI*�)�;-�����x�j�7A��%Gi��ŢV�8��TN�BV�ER��e�*��������W�ZMQ�i;iR*h��-����\0�>�$\0\0\0\0\0�!}���Lv�x(Ʋ�9�3O\"\no�H�P��QiJU�;G�\\/��e>����oQ�{hnW�^\0�S���8��{�\"Λ��JK\\�*��G��1)|��\'s6��@��M���o+@�:�euw;uY�*9���r�Ol4��YL��Բ3Q#�\"5�E}�q�SS��G�HRb]{~&�B\n�q@�wgv�Qg_��=�rcW6�EP�j\"؊��v�ׇv�{:׎�V\r��}L��dD[u��_^� ?!y֑p<[L�^�Z}�ӵ����k;[cJ.ɖ6���鲔��$/D��Y[�kwR��D���\0\0\0\0�.n���Nn��v\rv�sv�upVV6�;o̥����M���\'�x��8x�-��a�����ES������l13K� �Yx%���rJ��rR�Y�5B$�e�=4�_��ć�&��N\Z_�����k���H��Q;wdW/+�^&�����)5���i�(���[���xr�I�W�+�]}f,�\n��^G��,s������J\'8ӫ��zL+Z�%l����$�Y�(�:���]��6��\0e�i%v��]�J�d{o�?�$��{�;�SؔI-�[l;��Ǣ���e�Ŏ3l�b`cn��F�v6{\nm 퍍��JZ�������\\��dJ2�ڀ��#��o��pM�Nӷ�w��8m�2��i�$��d��m�$E��jD��M�r\"�b�vKȴ���4����s���܈�\Z��S�E�NU\'����|�{u���H�n��0B��a�G�\'�w~�x�-���5�:���������@\0\0\0\0|�(�\\����-e�s$ c�\' 4�W\"�+H�Sw��:��%�25�Ȉ׶ܜ�3B�\r���W\\e3���4hё��/�Z�q�&����%�-¢��$ʄʺiS2�g�@ +��m��RӭV��NQ\\�5�[B챌���h�x�%kk9�����1&rQ%Hj���p��՗��h����tזf���,����a��\"��ڪA�@d�&�b\n4�cI+\0-��R�V�^����_g��G�<\0\0\0\0Wc����3�M214��V9&�n���)�мsc73MB/ǬD�<�%eP�JX������������G��Z��!m_U���X:�,m��0�y#𖦳U2SD�\"�9 �I^��)�#�\r2��]�\0\0\0<;�~�bj��\rmk;^I5��]2�8�)�~�j�2K�!��d d�����FI) ���]�_���8q�����:j�:�űEڱF����n`���=Z�qmL����}��$����J��J�Zi��w�h�tK�->�)�����t��%\Z�y&��\"$�r0~Ʊك��)23�T��[\Z����:�L�L��*�{�f{�^|m|D5��Wt�R�y)d��z�X�.�QD��&G\"$����#�Y�T/�R���B��rMŵź��쭶�}�>�{���v��\0\0>_��;.&ƹ *H��6�L\'R �$�j�huzuQ�vCQ���EҦ�:y}�ƚ�U�,kJ!�Y>}��Fк/no��3�NZQw35��r��+����d�JRDv�е�mO��F�\n\'�k~�|�H��3�8\0\0\0\0\0c�GT��/]�/����_?��F�9�2�GI����MZ��1�\'(����l3�A��KuŒ��RM��4��w�$ԙ!�(��RH�\'���~.3,���3u (�s�@#.m1H�wK[���:��vtG\'9&2�D�$���N0�Yu\n�n4�:J_���# \0+��ˮ��&8�H\Z�W���ҾSi����dr��؍e��d�}K���{�L��:1\rqjN���ě�(����Z735��T��_�s��\0\0\0\0\0\0��Ɣd�~�?T�\0��2}��nj눝�F���� ��o1-����y��� ]��č��h�����v�9n�Q�H��Ȍ�m��{���>��m� H:�����5�;�{�#RT��K��y~���2����v�\0\0\0\0\0\0u�hJ8��=�U�Ch<�^;������F �[���L�6�$��\0\0EJ]�]�z��2��ƣ�s��zT�8ƭ�{\Z�x������*P���}�� c�鷐��\0\0\0\0\0\0\Z���I�7�I�wD�\0& �q���-Î�>�鿡���\r�\0\0��%H���?�����yt!�\0\0\0\0\0\0��\Z�)V�F�ַ�jg��f^D{� o���x\0\0\0\0\0\0\0\0\0\0\0\0��',4,0,'','','',''),(71,0,19,'75859b10e58a60ae','2b902d193517f74d2c14e163cff8c10e','2017-09-07 09:16:08','2017-09-07 09:16:08','','','Contact Photos','6.jpg','image/jpeg',80,80,2703,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0P\0P\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ��\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#���3Sa����\0\0\0?\0��M5AQ\0��j�����ǯ<����_�T�@Z��i����9���׾�*��)��{ڥ����J�Y�[6h��e� �,u��$�1����t�KvD3%���g[I�_:kƵ�J�u��B��7��\'vX3i�Rj:�G���*�e�\0��a��M|�i������:{Kٞ�w,dRt� aK�B�f���� }��z�a�o�-fr�����@@D5��֮V��b�S�&��-�L��m�[�x���S!�����d�\"ἵ����1�/��n}������U2�����e&�T��`a�U��4#�``�!\rũl�>5�t�l�\n�(\"�i�\nP�)�\'�� ��r�c-�^j����e�[��ZE�t\0���l�A�-��\'!�~��N.A�m2���p�\rjX��OR_���]�d�r�8��$+�\' ۬�. ��Ӭ[�����8�o\rb�O��5�b61T\Z�EW�%B�NnTJS�d�͸�\"a�ۦ��˧~��m�7\r���nx��nd��x�Z�z�1�� �����|�#;��Mu_5I�7,�\"����;w8L��� SY�7ڪJ�cD��S LQe[��D�m��a��c�ܜ��rL�L� ���/m_�˘�~t�F�P��?��|�R0��c[��wco�W�u�4,Ê�.8�%T����La�3�兂21o�*�I�B�e�߶r��8Z;AH��q먆��v��;�61���a\\?n�W\"��J�ݘ1���N��+^��%9A\"���tb(C�GX7|.{m�Gt{�ꧼ�s\r�\Ze�jR���5��|�]\'r�1H��Ż��F ������gl�45V%4�/�P\0\0��8�\0�r�Mx�73�v���ۃ��(�+�0�LX�ߘ�QCB����`� ����[���0\"�d��6j�1:������>��c�3c��2:sH>p\\ud��V.���U}��Q��L��>�C�u9$��2���$ݦ�”��q�i��l�4���j5z��h���gQt��C���-9�T\']��l\ra�R�5IgM��s)Y��4A��5fѳS��tZ%?���:f�J�ð�Ujuh�P5�� Zm �,����!lѪ)��d)H@\0׏n�n5M��;����uk8bێ9*�8w���8� 6���{^�Sl�P�MgLISwg8!����9���\0Pİ��\'e2�ڲ}�����O�����j%�D�`�V����M��f�J�4�jQ�}��N3�*�1{@b���^���\\k�!令#��\0���#�X�3]Rz�l�� ��\0�� �#�\r�D1t�[gfZB*�Q���\"q*�у�j�j$�V�ZbE�� �YPQ�8��~1�$ s8�Xh���FD�G7M�|ls��ѓ-QI�6mRI�V�$� �$�P�}4��.����!�^�5\n�⾪���\r��f�YT�}ګEM�|�U�s�c�=�G�m������K;Lcw��O�0Q�=�{h��c):Ě cr�\\�������n귺��{�i��U���_7�&��L��7)ӷ~\r�K����^f�X�,%_q8Z�)��+����_��#�v,��d���S�ѓդ��y��y���\r��?��^Rv��Y��vS�b�L�>����E�e ^/q:V!�Y���d7��M4�V }��+�J��ض�� WH �K*��$ y*���Q����1J��#��M�P��H�`!C���~�T��7<����_�]CL�~I����oݒ���U��\0uE������}� �V֘~�� �$R�����M4�P�C�����/a3-�dLn.����c��dۛώЌb�8�0�b鮸4nN�WJ��uW�ި�c�Q����rd�\" ��TJ\0*G���i���͸�+�E1vF�hG�敲�MU�uQIC\0qɓ/!��ֿ��',5,0,'','','',''),(72,0,19,'75859b10e58a60ae','2b902d193517f74d2c14e163cff8c10e','2017-09-07 09:16:08','2017-09-07 09:16:08','','','Contact Photos','6.jpg','image/jpeg',48,48,1755,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \00\00\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n��\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa��\0\0\0?\0���3�c�s�ǜ�?�1���{�pK����]�_��r��\0BsK�]�n 4d��fZ%ӣ� ³+�r0�m�&��i��-��jA�g>���%hM����%�C¿p��O!����6���x�i�e�5���H�)LW�l�e����!k��:�T���h�q2ڰ���NݴM�j�6�A��7�?qY��ˌ�g�Z�[D�En�&Z]-�mnB��a!�[v\\�h��2BaRI?����<~/�y=d�G������3�JM�[ݨ��` ��ԭy���N��\0ɚȥ֐Y�ʈ���O`=�y��| Ҽ�&�-F�mf��+`<�q{�*En՘g���$��Y��`��P��#I%�;�<�z�+��<��#ۣ��g��dl9�n��&���ek�ٵ���)X�C�dz�D����0�N%HiI�m���R/hvߠ��)5>B�~N��M�X�}��\']�؜�\Zlcޒ�Z��FQ.6��?` �/����>�>I�X㞣�`�3���lHm%X8�=�j�2.�K2�1$������7���2�)�I1��Cw����n^i>%T%�cƺ�x�]�l�_�/�C��X�JR�B�y��Ÿ�Q-�+μ�+ug�\\�y�J7t���{2U0�OH��m�YF]q�Z�a�$f�d�B����2�F<��c.:�e`��Z�_���|������%�n|���KQi\Z�WK��y��#X0 6��6�&,S�MP���;ę��;F�imE�M�I�MiF��܎L��N�W����J!O�Vi��2zA\n(�$�G�#\n%�{�^s*]���p��\\�2n�Et��ܬ�fݏ�Z\Z�m\0�:��2%�.�؁D�3)�[F������a ���],2 ]�ˆ�ۮ�� �Z�ϯ*kj4=���N1�����-c��;l�:�@�Ϋ+�������O�WW��!א^EJGNFG�Ü$�L�B�FI\0CE�x��C42�Z�$R�u��}����ZB��c=/>�z������XK�3x�q�,�8�+���-�#��?*\ZF�����V)/%xR3�e�0�(b0�Š;# ;Kl��\r%�Ye�cCM6���\'JP�%8�1��z�Wm�J��e�Z⁜�[�&+i!�.>Vz8��X�E}+d�\r\0�!�P��eաi�U�tv��O�;}qj�e0åi��?~A�-��٘H �q�-�b> �\Z�+9�#7�x�1�\Z�\Z�e���=`�t,���\n�\0\"\nn:x%zs�Ϥ����?�z|��գ�c���u��S?����K��R+1Uh�a���hTc�%A��1�>?�B�\0����',6,0,'','','',''),(73,0,20,'75859b10e79de61b','01f62fe9af5d22dfb7664e78e64acd43','2017-09-07 09:16:41','2017-09-07 09:16:41','','','Contact Photos','3.jpg','image/jpeg',175,175,5486,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0�\0�\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ��\0B\0\0 \0\0\0\0\0 !\n1A\"Q�aq�%23R����#$&5B�Es�����\0\0\0?\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Ն����X\Zg���p|L�sN���}�Y%ZR|�(�J*I&+�rJ#�yI)%l�Z�,:��i�(��ϥ�)���J�����*hχo��>$���Œd \"5ɐb��o���9���/צF�3�qN��;뤂��������9�;߬�Kka0���Z���$�Բ��Ob3�g�Wqg�U�l�W�\0ĺQ������<;J;��剽ŒTh܋}��h�����>�#����\0\0\0\0\0\0\0>=]�Xwg-8i��9�u����N�梿���ݱ^�-l$$��5Rt�\"�����e�)�:G��+3Ϛ�ͺ���,���-d�5�ܾ��n~5SeW$76sS$�4SME������\"\"O.����_��)YŽ1�\r�X!M\nm��y�Kl�R�#�k�M&�^�o|ML}Ij���O��D>��OJ��\Z�m��i��v2��r�VӍB�l[�rd��D�;k�2��dZ���8�(��$���h:�״y}`\0\0\0\0\0\0\08�ƣ�37 } Nsſ�]�E�c pJL�򄩵�œ�U<��Y)�O�&�$.�!E�Q%��N�C�SL�8�d��#z��9�㔚g,�ܮ��G w�7GggU)F�]Es�I-��DS�:{-��e�|jw�K P���䗴[�<�PU�&�Jw���iU4�L��\Zno5i\Z�j���ud�:d.-�n��=9�tр��Z!�kj�/�Z��rL�׹S��d�]�Wg�\Z��M(R���%�#劰Q����N��j���ERI�3-���_=�#���=�����q\'�uc���L-e�ƙL#��F�t�����G�����䓓�B��eEk2=����ZZ�C���������3����xdRh�#\'�5ldE(�nF�ԝ�K/��\r�9c���^QG���4�&NjP���#=��:�)<2�ȧ�܆M\Z�3J���\"z�N�{�n���]H�\0�!�\0\0\0\0\0Xl3W9_�.5�W���_7����v��츖��㡥%�k()��3Q�%%MJ#�\",��|h��B{�i�������c+��r��%��ɥ�Mj5���Z��V#Isӆ��$fK%M\0j�t��5s����n6���e8kU��ݑ$�܉5*6���듲pg�BҲ�:t�[I줩��*���¤�V�pS�◣(�d�Bŗ4B.� �su=�� =�4�ᢙ�KAeZ$qu餣}��Fԣ��\0\0\0\0\0\nY��No��!�N��j{\"F-zy�c�?s\Z ��I3�#̼˧Q������\r��k\\]���6��Pꫫ�Ur$��]MIN�^|��$�^u�,ݦ=0��O,Vt,�p���]�I(���F\Z��̔�������Q��bJID�l�\0����dӪ>�o!Sg�[$i*��<�\\Qng|Q�u��,�,�tu�-<�#�\rbQ\Z�&��v�����c����٧��u�-����\'���B�b);C�3����ha��Kr\"ۘ�r-���\0\0\0\0\0K��y�8�qa��^���1�[�؍�$��#5�K��,JL���Ȍ��a��L��s�&�[d��1\r�צ�K�����ɧ��=��\0Dx��a�Ó_Ud�ǁ�5%�~��<��&��ܾ^�G�⏚��_�K�ω�f\\O�2ث�����=�t��2�7 ���36��FffJw���&M^DDV��\0\0\0\0\0���A�������-G���M�:]��\Z�N/&�ɛ����3:Rv�_��?]����%0���^�w g�h��F˭�3橯c�`��j�G�f=h�R� Ȫn������G)#I�&e��6�96\0\0\0\0\0\0���L4/���6v91��!�\r�)�,�~*�Rg#UR�ij�\"��rN������P�kJ;�m�>�b���d&X�����Fޭ�b��48�K�K�T\\�h^�Q̶#I\Z�hWe+_ͺ���ɧI;�\n�F��.Vw)7|<�f�d�O�̚Xi���>��U-��R��/��1����.�t��2fs�n���iE��u?b�D�V��2#�Ca��u3��3�q2����j�w���Z�����qN?;�^��X���R#g3�Dj�֣��&�����\nI*�)�;-�����x�j�7A��%Gi��ŢV�8��TN�BV�ER��e�*��������W�ZMQ�i;iR*h��-����\0�>�$\0\0\0\0\0�!}���Lv�x(Ʋ�9�3O\"\no�H�P��QiJU�;G�\\/��e>����oQ�{hnW�^\0�S���8��{�\"Λ��JK\\�*��G��1)|��\'s6��@��M���o+@�:�euw;uY�*9���r�Ol4��YL��Բ3Q#�\"5�E}�q�SS��G�HRb]{~&�B\n�q@�wgv�Qg_��=�rcW6�EP�j\"؊��v�ׇv�{:׎�V\r��}L��dD[u��_^� ?!y֑p<[L�^�Z}�ӵ����k;[cJ.ɖ6���鲔��$/D��Y[�kwR��D���\0\0\0\0�.n���Nn��v\rv�sv�upVV6�;o̥����M���\'�x��8x�-��a�����ES������l13K� �Yx%���rJ��rR�Y�5B$�e�=4�_��ć�&��N\Z_�����k���H��Q;wdW/+�^&�����)5���i�(���[���xr�I�W�+�]}f,�\n��^G��,s������J\'8ӫ��zL+Z�%l����$�Y�(�:���]��6��\0e�i%v��]�J�d{o�?�$��{�;�SؔI-�[l;��Ǣ���e�Ŏ3l�b`cn��F�v6{\nm 퍍��JZ�������\\��dJ2�ڀ��#��o��pM�Nӷ�w��8m�2��i�$��d��m�$E��jD��M�r\"�b�vKȴ���4����s���܈�\Z��S�E�NU\'����|�{u���H�n��0B��a�G�\'�w~�x�-���5�:���������@\0\0\0\0|�(�\\����-e�s$ c�\' 4�W\"�+H�Sw��:��%�25�Ȉ׶ܜ�3B�\r���W\\e3���4hё��/�Z�q�&����%�-¢��$ʄʺiS2�g�@ +��m��RӭV��NQ\\�5�[B챌���h�x�%kk9�����1&rQ%Hj���p��՗��h����tזf���,����a��\"��ڪA�@d�&�b\n4�cI+\0-��R�V�^����_g��G�<\0\0\0\0Wc����3�M214��V9&�n���)�мsc73MB/ǬD�<�%eP�JX������������G��Z��!m_U���X:�,m��0�y#𖦳U2SD�\"�9 �I^��)�#�\r2��]�\0\0\0<;�~�bj��\rmk;^I5��]2�8�)�~�j�2K�!��d d�����FI) ���]�_���8q�����:j�:�űEڱF����n`���=Z�qmL����}��$����J��J�Zi��w�h�tK�->�)�����t��%\Z�y&��\"$�r0~Ʊك��)23�T��[\Z����:�L�L��*�{�f{�^|m|D5��Wt�R�y)d��z�X�.�QD��&G\"$����#�Y�T/�R���B��rMŵź��쭶�}�>�{���v��\0\0>_��;.&ƹ *H��6�L\'R �$�j�huzuQ�vCQ���EҦ�:y}�ƚ�U�,kJ!�Y>}��Fк/no��3�NZQw35��r��+����d�JRDv�е�mO��F�\n\'�k~�|�H��3�8\0\0\0\0\0c�GT��/]�/����_?��F�9�2�GI����MZ��1�\'(����l3�A��KuŒ��RM��4��w�$ԙ!�(��RH�\'���~.3,���3u (�s�@#.m1H�wK[���:��vtG\'9&2�D�$���N0�Yu\n�n4�:J_���# \0+��ˮ��&8�H\Z�W���ҾSi����dr��؍e��d�}K���{�L��:1\rqjN���ě�(����Z735��T��_�s��\0\0\0\0\0\0��Ɣd�~�?T�\0��2}��nj눝�F���� ��o1-����y��� ]��č��h�����v�9n�Q�H��Ȍ�m��{���>��m� H:�����5�;�{�#RT��K��y~���2����v�\0\0\0\0\0\0u�hJ8��=�U�Ch<�^;������F �[���L�6�$��\0\0EJ]�]�z��2��ƣ�s��zT�8ƭ�{\Z�x������*P���}�� c�鷐��\0\0\0\0\0\0\Z���I�7�I�wD�\0& �q���-Î�>�鿡���\r�\0\0��%H���?�����yt!�\0\0\0\0\0\0��\Z�)V�F�ַ�jg��f^D{� o���x\0\0\0\0\0\0\0\0\0\0\0\0��',4,0,'','','',''),(74,0,20,'75859b10e79de61b','01f62fe9af5d22dfb7664e78e64acd43','2017-09-07 09:16:41','2017-09-07 09:16:41','','','Contact Photos','3.jpg','image/jpeg',80,80,2703,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0P\0P\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ��\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#���3Sa����\0\0\0?\0��M5AQ\0��j�����ǯ<����_�T�@Z��i����9���׾�*��)��{ڥ����J�Y�[6h��e� �,u��$�1����t�KvD3%���g[I�_:kƵ�J�u��B��7��\'vX3i�Rj:�G���*�e�\0��a��M|�i������:{Kٞ�w,dRt� aK�B�f���� }��z�a�o�-fr�����@@D5��֮V��b�S�&��-�L��m�[�x���S!�����d�\"ἵ����1�/��n}������U2�����e&�T��`a�U��4#�``�!\rũl�>5�t�l�\n�(\"�i�\nP�)�\'�� ��r�c-�^j����e�[��ZE�t\0���l�A�-��\'!�~��N.A�m2���p�\rjX��OR_���]�d�r�8��$+�\' ۬�. ��Ӭ[�����8�o\rb�O��5�b61T\Z�EW�%B�NnTJS�d�͸�\"a�ۦ��˧~��m�7\r���nx��nd��x�Z�z�1�� �����|�#;��Mu_5I�7,�\"����;w8L��� SY�7ڪJ�cD��S LQe[��D�m��a��c�ܜ��rL�L� ���/m_�˘�~t�F�P��?��|�R0��c[��wco�W�u�4,Ê�.8�%T����La�3�兂21o�*�I�B�e�߶r��8Z;AH��q먆��v��;�61���a\\?n�W\"��J�ݘ1���N��+^��%9A\"���tb(C�GX7|.{m�Gt{�ꧼ�s\r�\Ze�jR���5��|�]\'r�1H��Ż��F ������gl�45V%4�/�P\0\0��8�\0�r�Mx�73�v���ۃ��(�+�0�LX�ߘ�QCB����`� ����[���0\"�d��6j�1:������>��c�3c��2:sH>p\\ud��V.���U}��Q��L��>�C�u9$��2���$ݦ�”��q�i��l�4���j5z��h���gQt��C���-9�T\']��l\ra�R�5IgM��s)Y��4A��5fѳS��tZ%?���:f�J�ð�Ujuh�P5�� Zm �,����!lѪ)��d)H@\0׏n�n5M��;����uk8bێ9*�8w���8� 6���{^�Sl�P�MgLISwg8!����9���\0Pİ��\'e2�ڲ}�����O�����j%�D�`�V����M��f�J�4�jQ�}��N3�*�1{@b���^���\\k�!令#��\0���#�X�3]Rz�l�� ��\0�� �#�\r�D1t�[gfZB*�Q���\"q*�у�j�j$�V�ZbE�� �YPQ�8��~1�$ s8�Xh���FD�G7M�|ls��ѓ-QI�6mRI�V�$� �$�P�}4��.����!�^�5\n�⾪���\r��f�YT�}ګEM�|�U�s�c�=�G�m������K;Lcw��O�0Q�=�{h��c):Ě cr�\\�������n귺��{�i��U���_7�&��L��7)ӷ~\r�K����^f�X�,%_q8Z�)��+����_��#�v,��d���S�ѓդ��y��y���\r��?��^Rv��Y��vS�b�L�>����E�e ^/q:V!�Y���d7��M4�V }��+�J��ض�� WH �K*��$ y*���Q����1J��#��M�P��H�`!C���~�T��7<����_�]CL�~I����oݒ���U��\0uE������}� �V֘~�� �$R�����M4�P�C�����/a3-�dLn.����c��dۛώЌb�8�0�b鮸4nN�WJ��uW�ި�c�Q����rd�\" ��TJ\0*G���i���͸�+�E1vF�hG�敲�MU�uQIC\0qɓ/!��ֿ��',5,0,'','','',''),(75,0,20,'75859b10e79de61b','01f62fe9af5d22dfb7664e78e64acd43','2017-09-07 09:16:41','2017-09-07 09:16:41','','','Contact Photos','3.jpg','image/jpeg',48,48,1755,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \00\00\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n��\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa��\0\0\0?\0���3�c�s�ǜ�?�1���{�pK����]�_��r��\0BsK�]�n 4d��fZ%ӣ� ³+�r0�m�&��i��-��jA�g>���%hM����%�C¿p��O!����6���x�i�e�5���H�)LW�l�e����!k��:�T���h�q2ڰ���NݴM�j�6�A��7�?qY��ˌ�g�Z�[D�En�&Z]-�mnB��a!�[v\\�h��2BaRI?����<~/�y=d�G������3�JM�[ݨ��` ��ԭy���N��\0ɚȥ֐Y�ʈ���O`=�y��| Ҽ�&�-F�mf��+`<�q{�*En՘g���$��Y��`��P��#I%�;�<�z�+��<��#ۣ��g��dl9�n��&���ek�ٵ���)X�C�dz�D����0�N%HiI�m���R/hvߠ��)5>B�~N��M�X�}��\']�؜�\Zlcޒ�Z��FQ.6��?` �/����>�>I�X㞣�`�3���lHm%X8�=�j�2.�K2�1$������7���2�)�I1��Cw����n^i>%T%�cƺ�x�]�l�_�/�C��X�JR�B�y��Ÿ�Q-�+μ�+ug�\\�y�J7t���{2U0�OH��m�YF]q�Z�a�$f�d�B����2�F<��c.:�e`��Z�_���|������%�n|���KQi\Z�WK��y��#X0 6��6�&,S�MP���;ę��;F�imE�M�I�MiF��܎L��N�W����J!O�Vi��2zA\n(�$�G�#\n%�{�^s*]���p��\\�2n�Et��ܬ�fݏ�Z\Z�m\0�:��2%�.�؁D�3)�[F������a ���],2 ]�ˆ�ۮ�� �Z�ϯ*kj4=���N1�����-c��;l�:�@�Ϋ+�������O�WW��!א^EJGNFG�Ü$�L�B�FI\0CE�x��C42�Z�$R�u��}����ZB��c=/>�z������XK�3x�q�,�8�+���-�#��?*\ZF�����V)/%xR3�e�0�(b0�Š;# ;Kl��\r%�Ye�cCM6���\'JP�%8�1��z�Wm�J��e�Z⁜�[�&+i!�.>Vz8��X�E}+d�\r\0�!�P��eաi�U�tv��O�;}qj�e0åi��?~A�-��٘H �q�-�b> �\Z�+9�#7�x�1�\Z�\Z�e���=`�t,���\n�\0\"\nn:x%zs�Ϥ����?�z|��գ�c���u��S?����K��R+1Uh�a���hTc�%A��1�>?�B�\0����',6,0,'','','',''),(76,0,21,'75859b10ebd73888','39e7b822c093a22f70de8782c7d652d4','2017-09-07 09:19:08','2017-09-07 09:19:08','','','Contact Photos','4b7db531ad1920a7cb8fb76aed46ddd9-4.jpg?ts=1504775575','image/jpeg',175,175,5493,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0�\0�\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ��\0B\0\0 \0\0\0\0\0 !\n1A\"Qa�q�%23�#$&5BR����Es�����\0\0\0?\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Ն����X\Z\'���p|L�sN���}�Y%ZR|�(�J*I&+�rJ#�yI)%l�Z�,:��i�(��ϥ�)���J�����*hχo�мI����$�Dj-� (�C\"�cI(s���_�L�:g�� `w�I����9�s.w�Y���a���C\"3:I��e�~��g,�ڮ�Ϩ�6�&�t�t��/iK��xv<�v #=�{�$�ѹ�Idу=��#�}�G���!�\0\0\0\0\0\0\0*|z�B��6�Zp�]�s\"�A�ڝ\r�E\r��{�b��Z�HI��j��>Eq�E�˒S.:t�7�Vg�5�u;��Ys=�YFZ�Rk��}����j��ʮHnl�Ifh���M6&\";M�DD�]��¿SR��c�h�B��{��t��ƤG��V�Mʽ4$�&2��\"����%���{̈}9$����489hۆ�� @�e��崭�\Z��ط<��m�(v&�Ne{�ȵE�qQMI��\Z�uO�h���D<�\0\0\0\0\0\0\0qۍGfn\Z��b��R���9~�2w���o\nstMT�x=d��>��H��l�MT���:�!M2��a��L��c��/�Ri��Cr���������T�\Z�uΥ$�F�IN��춆�q�5��S�,-B��c�^�op�}AW�8�Y)�c?��T��2Fi��դkI��$b�Փ�鐸�A��\\<���F��h�ŭ�ܿIk�)�3^�N�ٓ�wu]��k�U4�J���8�W�*�F�7�`^U:V��ң�I%�̷?��|����C{�Oh�[�:r�qğ��� ����0\\���\Ze0\\�ޅ\Z��.����RvZ��NOI\n#�����O v���-ik�F�����o�;�E�I����ձ��5�\Z�Rv!,��\\4;����MyE�3��t�a9��B��:̌�[�X�T���h_\"��r4k��*�F\\��U:��M�z�\0�u#�\0�C�\0\0\0\0\0�>�f�r���Z\\kp�qҾ.oU�u������q-S�CJK��PSǬf�2JJ��G�D Ym���+>!҄�^�\n\'��/{} �W7��-K;�K���kI�� (�;T�F��\r��H̖J�\0��J�sj� K��\0��m���p֫WV\'�\"IٹjTlx�;ҤO,R��Ԑǖ� edK����:�8���<)5h�y Ó�w ��r*-�0�������Bf��J& u:fIV�r�:rjh.p�甴���9� M��H���>���듲pg�BҲ4:{-��RT�P�MHZ��Rw+|�)�D�qKєW2W��e����j�O{F|��aM)xh���ʴH��-�IF�3捩Gِ\0\0\0\0\0�q���d-�B\\*�u���D�Z��nǮ~�4��gfG�y�N��-m�ݯ�m(ָ����m����WW���IoԺ������w2I��HX%�Lza�֞X��Y��;�$�D�Q{}�54;9�)k3S���2%-|Ĕ����\0��E�ɧT|+2�B��B�H�U�y���������K>Yk�[\ZYN ��\"ZyTGV\ZĢ5MGR�OO��&7��� �;_��Ou��[7���O��?�0�Rv�Vg#۔��+���E�1�[ٲ\0\0\0\0\0��;X��\Zqz��qJ����2c:�#��vIK^Fk4�B/�X���﹑�E4�eh�M8�8(�:�\0s2ia���{���CT��\0XR�J��������dz�]���d��݉� � �,�1r�~��6���DdG��OB�g��&f)��e�+/�4�T�Q�j�����Ѱ�~w��c�8���ڤF�gT�ճ�G�[�M\')��?J�UDR)6v[�#E3���$n��=�J��K�\'�D��q1�8��򄭴��7�(��U����ueL�����t�v2ҤT�K�[o���\0>}FH\0\0\0\0\0B��\0��Lv�x(Ʋ�9�3O\"\no�H�P��QiJU�;G�\\/��e>����oQ�{hnW�^\0�S���8��{�\"Λ��JK\\�*��G��1)|��\'s6��@��M���o+@�:�euw;uY�*9���r�Ol4��YL��Բ3Q#�\"5�E}�q�SS��G�HRb]{~&�B\n�q@�wgv�Qg_��=�rcW6�EP�j\"؊��v�ׇv�{:׎�V\r��}L��dD[u��_^� ?!y֑p<[L�^�Z}�ӵ����k;[cJ.ɖ6���鲔��$/D��Y[�kwR��D���\0\0\0\0�.n���Nn��v\rv�sv�upVV6�;o̥����M���\'�x��8x�-��a�����ES������l13K� �Yx%���rJ��rR�Y�5B$�e�=4�_��ć�&��N\Z_�����k���H��Q;wdW/+�^&�����)5���i�(���-�Z�<9sN����.��j�M� �#�p�9��h���ԥ�i�ʼn�Q=&�U�O�Qn�Q�Ԕl�a��\\�.��\\�\0�㴒�Mʮ�%y�2=�ޟ�]Z��B˩�J$��\0-��F��X� R2�b���X�01�[�#s;=�\Z�\r&��QiOwM Z�<�dJ2�ڀ��#��o��pM�Nӷ�w��8m�2��i�$��d��m�$E��jD�����E��2���iC;�iwN1���C����59��\"�~��O]����O�[��^T�f�1��!����q�2yq��W���K�Q�ө���y����\0\0\0\0��U��K�r�X�2@��?bp�L�r+��d�057x������[S#Y���{m�̣4.��+�o5u�S8���F��M2����h�/m2^��*+j2L�L���3,�}D\0���F�>�-:�i)t���Y��.�Ϻ�f��bV���Z�:Z��`W%T���3�>I��>Fd���F�-$�j#;*O$��)R�])}����[��d�\0 z���~B�пgG 4�L��=c��&n��3κu�6��[�8�e��T�Ҕ�.GUF�(�G��$^J�ڑ�\r��ſ���q��خ��wZ���\r���n�������ÙL5>wv$Rb2{UB�?H ���LAF�Li%`���Tjѫ�Q��\0>�������\0\0\0\0��������SG �M%�B�I�y�[�뽊G?t/ǘ���P����4�% YT*���\">�a&}b��pij��a־x�[W�n�����b\' +�H�%���L��3Ȭ�NC+RW��\nb��L�+�`\0\0\0��!�MWp�᭭gk�&�4q��SGe:O�-]1�Iw�#27������7�Q��%!�T2�C����0Ҵ>�MY�V8�#ch�V(��vv������TN-�������~=I[��W�M5㿀�rn�u��e0�[�Ν���X�$��!D��B���;0z>S%&Fxʗ1+cRղ�GB���)�r�]/q Ïz ύ����9��U/%,��/S�rC��j(�\\�d��$D���eQ�ȵ��}B��j�+�n-�-��ܧem����3���뷐� \0�����q65�YRGX���:a:�\\�\'{V(�C�Ӫ���\Z����.�7p�����4�2��cZQz���_j6��{s}�A�Rrҋ������ӗx�^_է�$�R�#�N��+j}�\Z4hQ>�[����E�\0��� �\0\0\0\0��R�t�wؾ~�{�|�\0��0��� ��\"8\"M��/�j����9E��-�`អ\r-�[�,�&��oo��L��)&��\r1E���E)<���q�d�ᛨYE���p�i�G#�Z����/{�ۢ99�1��$%,֪q�H\"˨T�q���R����\0\09_Ʀ]u�1�\"@�Z��徕�M�ͿS#�F��k-��\'c�^�����bgYшk�Rw�_��$ؿ E� Ϛѹ���c/nA+����=�b/\n#܋a=@\0\0\0\0\0�_��\0���uq�+p��Rb��if�H�F�^ʱ�����j}٩�#55�S����)�l�\"yP���������!�\0ͮ/1s�p���q4����?�۩�4�^��_2���De�\"�?�k�͛��F�ԠGZa���uB�^w-�� B�G���:l_��zK�\0\0\0\0\0\0�AX�/�������,�zO���n�{��i���l��O���q?~������\0�]]Ľ�Ҟ�� �B���?�(��\\levo\'��߮�l�������}�ؙG82����{��䏯��O]�������������\0\0\0\0\0\0D��~4�\'���!���FQ��{sW\\D�͒7-�s���^�{y�m�����8��J�(?�$mh{Ev\'6����w⍪G/�Df[m�c��8�\0��ǿ�nZ@�Դ�o^ٯ(9��ܙ\Z��|�]����TG���fFC��\0\0\0\0\0\08s�|kBQś��ޭ*A�Z�����:3�N�ߦ��e鷡$�w\0\0z*R�z��������\Z���gW\r�S �\Z�U�kE���ks����Cÿ���h[�M��߀\0\0\0\0\0\0��׎JO��\ZO;�\'�0�g ���ynwd��OM� ���n\0\0\0 tQ*E�ב����ˡ �\0\0\0\0\0\0-hթJ�Z4N��[S=�#2�#��[}O�g�\0\0\0\0\0\0\0\0\0\0\0��',4,0,'','','',''),(77,0,21,'75859b10ebd73888','39e7b822c093a22f70de8782c7d652d4','2017-09-07 09:19:08','2017-09-07 09:19:08','','','Contact Photos','4b7db531ad1920a7cb8fb76aed46ddd9-4.jpg?ts=1504775575','image/jpeg',80,80,2703,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0P\0P\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ��\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#���3Sa����\0\0\0?\0��M5AQ\0��j�����ǯ<����_�T�@Z��i����9���׾�*��)��{ڥ����J�Y�[6h��e� �,u��$�1����t�KvD3%���g[I�_:kƵ�J�u��B��7��\'vX3i�Rj:�G���*�e�\0��a��M|�i������:{Lٞ�w,dRt� aK�B�f���� �5���Ô��5��b�%֡��Z�uZꅊqNL�����2Õ�oY↚}L�VB�\0���0���ւ7s\0�D�{I��N\n_�J;�)Tʮ>��)���UR�U���V�PlЏ����`�lD4S�M�8��\r�fѲ*H��i�P)CP���O 3�{�a��%y��V�)��yn��YiE�3�I��Vh����; 8�ݴʛG]��5�b~�=I~}��vݐr��(��C����/m��X�H�rN*ߎ��\\==Z�Q�ed���{��\\�����n��X�^¹Z���2�TƓ�e�%W\"���\"��wFVe�L�8$���@K�aM`9G�zv�i�e���s���^�q�Y���9���9(h��9�H��F�`�kd�)�����I$B��r�\n\"n5�����}.�� 9�l2�m&�\n�b����+$V�`\n�\0++���9W��0�h�q�q�������G�\0G��Z�~. ��׬c�����8�o\r��O��5�b61T\ZEW�%B�NnTJU2gfܤ��lu遅-�r�߲�}M�{�2۞,�[�:�\0^2�֫��A��DH.�a<��h_/���4�]W�R|��\'�ỴN��*�.���Ed������Q3�C��S\0�DYV�vÑ>~�X{��\'?���,5C�f�K�W�2�}ߝ$���+�O��0T�\'cX����X��l���f��q� 0�# �8�U(+�*�e �r�a`��[�J�p���rw휢���V��E�+$�z�!��]�=�j33WۮUȇb����7f j,����׳>�NPH�G,y���Q�\r� ���u��:��%Ü�hƙi����\'�l;��\"WI܅4�R+E��n��Q�*?&a%:��6�\rU�M-��(\0\08\0�?�\\��^���ᝠ�+�����>����*�)��1�P�P���a�$�b�:�V�p0���97M��LN�!a-���oX�\0���y�L����Y#*���_n�T~%{����]NI${L�quI7i�0���q�iw\'M-��\Z�^���<���]/)�u� NxU �m���X{Ԭ�FY�c(��Vk0Ml��Y�l��Df]�O�u:��Y��R�0�+�Z�Z!�\rv��[F���G&�(��-�D4j�h��\nR\05�۾ۍSw{a�e�;qZ���_ʴD���d�r�6�ͺ�T�=�J )�H(r&�� &�����n�k��� �� bXBٓ��GmY>� E�l�\'�x�|�5�\"F�r�O���&�� �y%^\Zn�(�:ԓH�*�1{@b���^���\\k�!令#��\0���#�X�3]Rz�l�� ��\0�� �#�\r�D1t�[gfZB*�Q���\"q*�у�j�j$�V�ZbE�� �YPQ�8��~1�$ s8�Xh���FD�G7M�|ls��ѓ-QI�6mRI�V�$� �$�P�}4��.����!�^�5\n�⾪���\r��f�YT�}ګEM�|�U�s�c�=�G�m������K;Lcw��O�0Q�=�{h��c):Ě cr�\\�������n귺��{�i��U���_7�&��L��7)ӷ~\r�K����^f�X�,%_q8Z�)��+����_��#�v,��d���S�ѓդ��y��y���\r��?��^Rv��Y��vS�b�L�>����E�e ^/q:V!�Y���d7��M4�V }��+�J��ض�� WH �K*��$ y*���Q����1J��#��M�P��H�`!C���~�T��7<����_�]CL�~I����oݒ���U��\0uE������}� �V֘~�� �$R�����M4�P�C�����/a3-�dLn.����c��dۛώЌb�8�0�b鮸4nN�WJ��uW�ި�c�Q����rd�\" ��TJ\0*G���i���͸�+�E1vF�hG�敲�MU�uQIC\0qɓ/!��ֿ��',5,0,'','','',''),(78,0,21,'75859b10ebd73888','39e7b822c093a22f70de8782c7d652d4','2017-09-07 09:19:08','2017-09-07 09:19:08','','','Contact Photos','4b7db531ad1920a7cb8fb76aed46ddd9-4.jpg?ts=1504775575','image/jpeg',48,48,1755,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \00\00\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n��\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa��\0\0\0?\0���3�c�s�ǜ�?�1���{�pK����]�_��r��\0BsK�]�n 4d��fZ%ӣ� ³+�r0�m�&��i��-��jA�g>���%hM����%�C¿p��O!����6���x�i�e�5���H�)LW�l�e����!k��:�T���h�q2ڰ���NݴM�j�6�A��7�?qY��ˌ�g�Z�[D�En�&Z]-�mnB��a!�[v\\�h��2BaRI?����<~/�y=d�G������3�JM�[ݨ��` ��ԭy���N��\0ɚȥ֐Y�ʈ���O`=�y��| Ҽ�&�-F�mf��+`<�q{�*En՘g���$��Y��`��P��#I%�;�<�z�+��<��#ۣ��g��dl9�n��&���ek�ٵ���)X�C�dz�D����0�N%HiI�m���R/hvߠ��)5>B�~N��M�X�}��\']�؜�\Zlcޒ�Z��FQ.6��?` �/����>�>J[X㦣�`�3���l8m%X<�=�j�2.�L2�1\"����D�7�0�Ĉ2�+�I1��Kw����n^i>%T%�cƺ�x�]�l�_�/�C��X�JR�B�y��Ÿ�Q-�+μ�+ug�\\�y�J7t���{2U0�OH��m�YF]q�Z�a�$f�d�B����2�F<��c.:�e`��Z�_���|������)�n|���KQi\Z�WK��y��#Y, 6��6c&,S�MP�Δ�3ę��;F�imE�M�I�MiF��܎L��N�W����J!O�Vi��2zA\n(�$�G�#\n%�{�^s*]���p��\\�2n�Et��ܬ�fݏ�Z\Z�m\0�:��2%�.�؁D�3)�[F������a ���],2 ]�ˆ�ۮ�� �Z�ϯ*kj4=���N1�����-c��;l�:�@�Ϋ+�������O�WW��!א^EJGNFG�Ü$�L�B�FI\0CE�x��C42�Z�$R�u��}����ZB��c=/>�z������XK�3x�q�,�8�+���-�#��?*\ZF�����V)/%xR3�e�0�(b0�Š;# ;Kl��\r%�Ye�cCM6���\'JP�%8�1��z�Wm�J��e�Z⁜�[�&+i!�.>Vz8��X�E}+d�\r\0�!�P��eաi�U�tv��O�;}qj�e0åi��?~A�-��٘H �q�-�b> �\Z�+9�#7�x�1�\Z�\Z�e���=`�t,���\n�\0\"\nn:x%zs�Ϥ����?�z|��գ�c���u��S?����K��R+1Uh�a���hTc�%A��1�>?�B�\0����',6,0,'','','',''),(79,0,22,'75859b10ee09e3cc','19065c444ea257e137e46e890d2c7001','2017-09-07 09:18:24','2017-09-07 09:18:24','','','Contact Photos','4.jpg','image/jpeg',175,175,5486,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0�\0�\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ��\0B\0\0 \0\0\0\0\0 !\n1A\"Q�aq�%23R����#$&5B�Es�����\0\0\0?\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Ն����X\Zg���p|L�sN���}�Y%ZR|�(�J*I&+�rJ#�yI)%l�Z�,:��i�(��ϥ�)���J�����*hχo��>$���Œd \"5ɐb��o���9���/צF�3�qN��;뤂��������9�;߬�Kka0���Z���$�Բ��Ob3�g�Wqg�U�l�W�\0ĺQ������<;J;��剽ŒTh܋}��h�����>�#����\0\0\0\0\0\0\0>=]�Xwg-8i��9�u����N�梿���ݱ^�-l$$��5Rt�\"�����e�)�:G��+3Ϛ�ͺ���,���-d�5�ܾ��n~5SeW$76sS$�4SME������\"\"O.����_��)YŽ1�\r�X!M\nm��y�Kl�R�#�k�M&�^�o|ML}Ij���O��D>��OJ��\Z�m��i��v2��r�VӍB�l[�rd��D�;k�2��dZ���8�(��$���h:�״y}`\0\0\0\0\0\0\08�ƣ�37 } Nsſ�]�E�c pJL�򄩵�œ�U<��Y)�O�&�$.�!E�Q%��N�C�SL�8�d��#z��9�㔚g,�ܮ��G w�7GggU)F�]Es�I-��DS�:{-��e�|jw�K P���䗴[�<�PU�&�Jw���iU4�L��\Zno5i\Z�j���ud�:d.-�n��=9�tр��Z!�kj�/�Z��rL�׹S��d�]�Wg�\Z��M(R���%�#劰Q����N��j���ERI�3-���_=�#���=�����q\'�uc���L-e�ƙL#��F�t�����G�����䓓�B��eEk2=����ZZ�C���������3����xdRh�#\'�5ldE(�nF�ԝ�K/��\r�9c���^QG���4�&NjP���#=��:�)<2�ȧ�܆M\Z�3J���\"z�N�{�n���]H�\0�!�\0\0\0\0\0Xl3W9_�.5�W���_7����v��츖��㡥%�k()��3Q�%%MJ#�\",��|h��B{�i�������c+��r��%��ɥ�Mj5���Z��V#Isӆ��$fK%M\0j�t��5s����n6���e8kU��ݑ$�܉5*6���듲pg�BҲ�:t�[I줩��*���¤�V�pS�◣(�d�Bŗ4B.� �su=�� =�4�ᢙ�KAeZ$qu餣}��Fԣ��\0\0\0\0\0\nY��No��!�N��j{\"F-zy�c�?s\Z ��I3�#̼˧Q������\r��k\\]���6��Pꫫ�Ur$��]MIN�^|��$�^u�,ݦ=0��O,Vt,�p���]�I(���F\Z��̔�������Q��bJID�l�\0����dӪ>�o!Sg�[$i*��<�\\Qng|Q�u��,�,�tu�-<�#�\rbQ\Z�&��v�����c����٧��u�-����\'���B�b);C�3����ha��Kr\"ۘ�r-���\0\0\0\0\0K��y�8�qa��^���1�[�؍�$��#5�K��,JL���Ȍ��a��L��s�&�[d��1\r�צ�K�����ɧ��=��\0Dx��a�Ó_Ud�ǁ�5%�~��<��&��ܾ^�G�⏚��_�K�ω�f\\O�2ث�����=�t��2�7 ���36��FffJw���&M^DDV��\0\0\0\0\0���A�������-G���M�:]��\Z�N/&�ɛ����3:Rv�_��?]����%0���^�w g�h��F˭�3橯c�`��j�G�f=h�R� Ȫn������G)#I�&e��6�96\0\0\0\0\0\0���L4/���6v91��!�\r�)�,�~*�Rg#UR�ij�\"��rN������P�kJ;�m�>�b���d&X�����Fޭ�b��48�K�K�T\\�h^�Q̶#I\Z�hWe+_ͺ���ɧI;�\n�F��.Vw)7|<�f�d�O�̚Xi���>��U-��R��/��1����.�t��2fs�n���iE��u?b�D�V��2#�Ca��u3��3�q2����j�w���Z�����qN?;�^��X���R#g3�Dj�֣��&�����\nI*�)�;-�����x�j�7A��%Gi��ŢV�8��TN�BV�ER��e�*��������W�ZMQ�i;iR*h��-����\0�>�$\0\0\0\0\0�!}���Lv�x(Ʋ�9�3O\"\no�H�P��QiJU�;G�\\/��e>����oQ�{hnW�^\0�S���8��{�\"Λ��JK\\�*��G��1)|��\'s6��@��M���o+@�:�euw;uY�*9���r�Ol4��YL��Բ3Q#�\"5�E}�q�SS��G�HRb]{~&�B\n�q@�wgv�Qg_��=�rcW6�EP�j\"؊��v�ׇv�{:׎�V\r��}L��dD[u��_^� ?!y֑p<[L�^�Z}�ӵ����k;[cJ.ɖ6���鲔��$/D��Y[�kwR��D���\0\0\0\0�.n���Nn��v\rv�sv�upVV6�;o̥����M���\'�x��8x�-��a�����ES������l13K� �Yx%���rJ��rR�Y�5B$�e�=4�_��ć�&��N\Z_�����k���H��Q;wdW/+�^&�����)5���i�(���[���xr�I�W�+�]}f,�\n��^G��,s������J\'8ӫ��zL+Z�%l����$�Y�(�:���]��6��\0e�i%v��]�J�d{o�?�$��{�;�SؔI-�[l;��Ǣ���e�Ŏ3l�b`cn��F�v6{\nm 퍍��JZ�������\\��dJ2�ڀ��#��o��pM�Nӷ�w��8m�2��i�$��d��m�$E��jD��M�r\"�b�vKȴ���4����s���܈�\Z��S�E�NU\'����|�{u���H�n��0B��a�G�\'�w~�x�-���5�:���������@\0\0\0\0|�(�\\����-e�s$ c�\' 4�W\"�+H�Sw��:��%�25�Ȉ׶ܜ�3B�\r���W\\e3���4hё��/�Z�q�&����%�-¢��$ʄʺiS2�g�@ +��m��RӭV��NQ\\�5�[B챌���h�x�%kk9�����1&rQ%Hj���p��՗��h����tזf���,����a��\"��ڪA�@d�&�b\n4�cI+\0-��R�V�^����_g��G�<\0\0\0\0Wc����3�M214��V9&�n���)�мsc73MB/ǬD�<�%eP�JX������������G��Z��!m_U���X:�,m��0�y#𖦳U2SD�\"�9 �I^��)�#�\r2��]�\0\0\0<;�~�bj��\rmk;^I5��]2�8�)�~�j�2K�!��d d�����FI) ���]�_���8q�����:j�:�űEڱF����n`���=Z�qmL����}��$����J��J�Zi��w�h�tK�->�)�����t��%\Z�y&��\"$�r0~Ʊك��)23�T��[\Z����:�L�L��*�{�f{�^|m|D5��Wt�R�y)d��z�X�.�QD��&G\"$����#�Y�T/�R���B��rMŵź��쭶�}�>�{���v��\0\0>_��;.&ƹ *H��6�L\'R �$�j�huzuQ�vCQ���EҦ�:y}�ƚ�U�,kJ!�Y>}��Fк/no��3�NZQw35��r��+����d�JRDv�е�mO��F�\n\'�k~�|�H��3�8\0\0\0\0\0c�GT��/]�/����_?��F�9�2�GI����MZ��1�\'(����l3�A��KuŒ��RM��4��w�$ԙ!�(��RH�\'���~.3,���3u (�s�@#.m1H�wK[���:��vtG\'9&2�D�$���N0�Yu\n�n4�:J_���# \0+��ˮ��&8�H\Z�W���ҾSi����dr��؍e��d�}K���{�L��:1\rqjN���ě�(����Z735��T��_�s��\0\0\0\0\0\0��Ɣd�~�?T�\0��2}��nj눝�F���� ��o1-����y��� ]��č��h�����v�9n�Q�H��Ȍ�m��{���>��m� H:�����5�;�{�#RT��K��y~���2����v�\0\0\0\0\0\0u�hJ8��=�U�Ch<�^;������F �[���L�6�$��\0\0EJ]�]�z��2��ƣ�s��zT�8ƭ�{\Z�x������*P���}�� c�鷐��\0\0\0\0\0\0\Z���I�7�I�wD�\0& �q���-Î�>�鿡���\r�\0\0��%H���?�����yt!�\0\0\0\0\0\0��\Z�)V�F�ַ�jg��f^D{� o���x\0\0\0\0\0\0\0\0\0\0\0\0��',4,0,'','','',''),(80,0,22,'75859b10ee09e3cc','19065c444ea257e137e46e890d2c7001','2017-09-07 09:18:24','2017-09-07 09:18:24','','','Contact Photos','4.jpg','image/jpeg',80,80,2703,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0P\0P\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ��\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#���3Sa����\0\0\0?\0��M5AQ\0��j�����ǯ<����_�T�@Z��i����9���׾�*��)��{ڥ����J�Y�[6h��e� �,u��$�1����t�KvD3%���g[I�_:kƵ�J�u��B��7��\'vX3i�Rj:�G���*�e�\0��a��M|�i������:{Kٞ�w,dRt� aK�B�f���� }��z�a�o�-fr�����@@D5��֮V��b�S�&��-�L��m�[�x���S!�����d�\"ἵ����1�/��n}������U2�����e&�T��`a�U��4#�``�!\rũl�>5�t�l�\n�(\"�i�\nP�)�\'�� ��r�c-�^j����e�[��ZE�t\0���l�A�-��\'!�~��N.A�m2���p�\rjX��OR_���]�d�r�8��$+�\' ۬�. ��Ӭ[�����8�o\rb�O��5�b61T\Z�EW�%B�NnTJS�d�͸�\"a�ۦ��˧~��m�7\r���nx��nd��x�Z�z�1�� �����|�#;��Mu_5I�7,�\"����;w8L��� SY�7ڪJ�cD��S LQe[��D�m��a��c�ܜ��rL�L� ���/m_�˘�~t�F�P��?��|�R0��c[��wco�W�u�4,Ê�.8�%T����La�3�兂21o�*�I�B�e�߶r��8Z;AH��q먆��v��;�61���a\\?n�W\"��J�ݘ1���N��+^��%9A\"���tb(C�GX7|.{m�Gt{�ꧼ�s\r�\Ze�jR���5��|�]\'r�1H��Ż��F ������gl�45V%4�/�P\0\0��8�\0�r�Mx�73�v���ۃ��(�+�0�LX�ߘ�QCB����`� ����[���0\"�d��6j�1:������>��c�3c��2:sH>p\\ud��V.���U}��Q��L��>�C�u9$��2���$ݦ�”��q�i��l�4���j5z��h���gQt��C���-9�T\']��l\ra�R�5IgM��s)Y��4A��5fѳS��tZ%?���:f�J�ð�Ujuh�P5�� Zm �,����!lѪ)��d)H@\0׏n�n5M��;����uk8bێ9*�8w���8� 6���{^�Sl�P�MgLISwg8!����9���\0Pİ��\'e2�ڲ}�����O�����j%�D�`�V����M��f�J�4�jQ�}��N3�*�1{@b���^���\\k�!令#��\0���#�X�3]Rz�l�� ��\0�� �#�\r�D1t�[gfZB*�Q���\"q*�у�j�j$�V�ZbE�� �YPQ�8��~1�$ s8�Xh���FD�G7M�|ls��ѓ-QI�6mRI�V�$� �$�P�}4��.����!�^�5\n�⾪���\r��f�YT�}ګEM�|�U�s�c�=�G�m������K;Lcw��O�0Q�=�{h��c):Ě cr�\\�������n귺��{�i��U���_7�&��L��7)ӷ~\r�K����^f�X�,%_q8Z�)��+����_��#�v,��d���S�ѓդ��y��y���\r��?��^Rv��Y��vS�b�L�>����E�e ^/q:V!�Y���d7��M4�V }��+�J��ض�� WH �K*��$ y*���Q����1J��#��M�P��H�`!C���~�T��7<����_�]CL�~I����oݒ���U��\0uE������}� �V֘~�� �$R�����M4�P�C�����/a3-�dLn.����c��dۛώЌb�8�0�b鮸4nN�WJ��uW�ި�c�Q����rd�\" ��TJ\0*G���i���͸�+�E1vF�hG�敲�MU�uQIC\0qɓ/!��ֿ��',5,0,'','','',''),(81,0,22,'75859b10ee09e3cc','19065c444ea257e137e46e890d2c7001','2017-09-07 09:18:24','2017-09-07 09:18:24','','','Contact Photos','4.jpg','image/jpeg',48,48,1755,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \00\00\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n��\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa��\0\0\0?\0���3�c�s�ǜ�?�1���{�pK����]�_��r��\0BsK�]�n 4d��fZ%ӣ� ³+�r0�m�&��i��-��jA�g>���%hM����%�C¿p��O!����6���x�i�e�5���H�)LW�l�e����!k��:�T���h�q2ڰ���NݴM�j�6�A��7�?qY��ˌ�g�Z�[D�En�&Z]-�mnB��a!�[v\\�h��2BaRI?����<~/�y=d�G������3�JM�[ݨ��` ��ԭy���N��\0ɚȥ֐Y�ʈ���O`=�y��| Ҽ�&�-F�mf��+`<�q{�*En՘g���$��Y��`��P��#I%�;�<�z�+��<��#ۣ��g��dl9�n��&���ek�ٵ���)X�C�dz�D����0�N%HiI�m���R/hvߠ��)5>B�~N��M�X�}��\']�؜�\Zlcޒ�Z��FQ.6��?` �/����>�>I�X㞣�`�3���lHm%X8�=�j�2.�K2�1$������7���2�)�I1��Cw����n^i>%T%�cƺ�x�]�l�_�/�C��X�JR�B�y��Ÿ�Q-�+μ�+ug�\\�y�J7t���{2U0�OH��m�YF]q�Z�a�$f�d�B����2�F<��c.:�e`��Z�_���|������%�n|���KQi\Z�WK��y��#X0 6��6�&,S�MP���;ę��;F�imE�M�I�MiF��܎L��N�W����J!O�Vi��2zA\n(�$�G�#\n%�{�^s*]���p��\\�2n�Et��ܬ�fݏ�Z\Z�m\0�:��2%�.�؁D�3)�[F������a ���],2 ]�ˆ�ۮ�� �Z�ϯ*kj4=���N1�����-c��;l�:�@�Ϋ+�������O�WW��!א^EJGNFG�Ü$�L�B�FI\0CE�x��C42�Z�$R�u��}����ZB��c=/>�z������XK�3x�q�,�8�+���-�#��?*\ZF�����V)/%xR3�e�0�(b0�Š;# ;Kl��\r%�Ye�cCM6���\'JP�%8�1��z�Wm�J��e�Z⁜�[�&+i!�.>Vz8��X�E}+d�\r\0�!�P��eաi�U�tv��O�;}qj�e0åi��?~A�-��٘H �q�-�b> �\Z�+9�#7�x�1�\Z�\Z�e���=`�t,���\n�\0\"\nn:x%zs�Ϥ����?�z|��գ�c���u��S?����K��R+1Uh�a���hTc�%A��1�>?�B�\0����',6,0,'','','',''); /*!40000 ALTER TABLE `photo` ENABLE KEYS */; UNLOCK TABLES; From e749e8ef4c0f006be343782077d7b8a76ccef99e Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Wed, 28 Feb 2018 23:48:42 -0500 Subject: [PATCH 029/227] Update htconfig documentation --- doc/htconfig.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/doc/htconfig.md b/doc/htconfig.md index 3a482742d..0355c3df2 100644 --- a/doc/htconfig.md +++ b/doc/htconfig.md @@ -58,9 +58,12 @@ Example: To set the automatic database cleanup process add this line to your .ht * **max_processes_backend** - Maximum number of concurrent database processes for background tasks. Default value is 5. * **max_processes_frontend** - Maximum number of concurrent database processes for foreground tasks. Default value is 20. * **min_poll_interval** - minimal distance in minutes between two polls for a contact. Default is 1. Reasonable values are between 1 and 59. -* **memcache** (Boolean) - Use memcache. To use memcache the PECL extension "memcache" has to be installed and activated. -* **memcache_host** - Hostname of the memcache daemon. Default is '127.0.0.1'. -* **memcache_port** - Portnumber of the memcache daemon. Default is 11211. +* **session_handler** ([database]|cache|native) - Whether to use Cache to store session data or to use PHP native session storage +* **cache_driver** ([database]|memcache|memcached) - Whether to use Memcache or Memcached to store temporary cache +* **memcache_host** - Host name of the memcache daemon. Default is '127.0.0.1'. +* **memcache_port** - Port number of the memcache daemon. Default is 11211. +* **memcached_host** - Host name of the memcached daemon. Default is '127.0.0.1'. +* **memcached_port** - Port number of the memcached daemon. Default is 11211. * **no_count** (Boolean) - Don't do count calculations (currently only when showing albums) * **no_oembed** (Boolean) - Don't use OEmbed to fetch more information about a link. * **no_smilies** (Boolean) - Don't show smilies. From 4e6dd7dd5feaf4e0a4df5fe71636f82c9a57ae66 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Wed, 28 Feb 2018 23:48:54 -0500 Subject: [PATCH 030/227] Update db cache table documentation --- doc/database/db_cache.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/doc/database/db_cache.md b/doc/database/db_cache.md index 3675474a5..f5691d08a 100644 --- a/doc/database/db_cache.md +++ b/doc/database/db_cache.md @@ -1,11 +1,13 @@ Table cache =========== +Stores temporary data + | Field | Description | Type | Null | Key | Default | Extra | | ------------ | ---------------------------------- | ------------ | ---- | --- | ------------------- | ----- | -| k | horizontal width + url or resource | varchar(255) | NO | PRI | NULL | | -| v | OEmbed response from site | text | NO | | NULL | | +| k | cache key | varchar(255) | NO | PRI | NULL | | +| v | cached serialized value | text | NO | | NULL | | +| expires | datetime of cache expiration | datetime | NO | MUL | 0001-01-01 00:00:00 | | | updated | datetime of cache insertion | datetime | NO | MUL | 0001-01-01 00:00:00 | | -| expire_mode | | int(11) | NO | | 0 | | Return to [database documentation](help/database) From 1a18220059e18677a1c888e4a0082a2e73400e19 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Wed, 28 Feb 2018 23:49:29 -0500 Subject: [PATCH 031/227] Remove unused global cache constants --- boot.php | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/boot.php b/boot.php index 5dc7ce1e9..a8b998fe1 100644 --- a/boot.php +++ b/boot.php @@ -119,22 +119,6 @@ define('LOGGER_DATA', 3); define('LOGGER_ALL', 4); /* @}*/ -/** - * @name Cache - * - * Cache levels - * @{ - */ -define('CACHE_MONTH', 0); -define('CACHE_WEEK', 1); -define('CACHE_DAY', 2); -define('CACHE_HOUR', 3); -define('CACHE_HALF_HOUR', 4); -define('CACHE_QUARTER_HOUR', 5); -define('CACHE_FIVE_MINUTES', 6); -define('CACHE_MINUTE', 7); -/* @}*/ - /** * @name Register * From 41d5c7d4c7bb7b45c63687a98170b505a96d3d2b Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Thu, 1 Mar 2018 00:33:10 -0500 Subject: [PATCH 032/227] Restore deprecated constants in boot --- boot.php | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/boot.php b/boot.php index a8b998fe1..a069dcafc 100644 --- a/boot.php +++ b/boot.php @@ -1,6 +1,6 @@ Date: Thu, 1 Mar 2018 00:33:44 -0500 Subject: [PATCH 033/227] Fix DatabaseCacheDriver::get SQL select - Fix typo - Fix wrong usage of NOW() --- src/Core/Cache/DatabaseCacheDriver.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Core/Cache/DatabaseCacheDriver.php b/src/Core/Cache/DatabaseCacheDriver.php index 0aefc812b..9703208d7 100644 --- a/src/Core/Cache/DatabaseCacheDriver.php +++ b/src/Core/Cache/DatabaseCacheDriver.php @@ -16,7 +16,7 @@ class DatabaseCacheDriver implements ICacheDriver { public function get($key) { - $cache = dba::selectFirst('cache', ['v'], ['`k` = ? AND `expires` >= NOW()`', $key]); + $cache = dba::selectFirst('cache', ['v'], ['`k` = ? AND `expires` >= ?', $key, DateTimeFormat::utcNow()]); if (DBM::is_result($cache)) { $cached = $cache['v']; From 4954c4b9aa1bbbfdbe564f7b184ed5a042d51a3a Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Thu, 1 Mar 2018 00:33:56 -0500 Subject: [PATCH 034/227] Add cache timing points --- src/Core/Cache.php | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/Core/Cache.php b/src/Core/Cache.php index 58969f081..aeda29e84 100644 --- a/src/Core/Cache.php +++ b/src/Core/Cache.php @@ -10,7 +10,7 @@ use Friendica\Core\Config; /** * @brief Class for storing data for a short time */ -class Cache +class Cache extends \Friendica\BaseObject { const MONTH = 0; const WEEK = 1; @@ -108,7 +108,13 @@ class Cache */ public static function get($key) { - return self::getDriver()->get($key); + $time = microtime(true); + + $return = self::getDriver()->get($key); + + self::getApp()->save_timestamp($time, 'cache'); + + return $return; } /** @@ -124,7 +130,13 @@ class Cache */ public static function set($key, $value, $duration = self::MONTH) { - return self::getDriver()->set($key, $value, $duration); + $time = microtime(true); + + $return = self::getDriver()->set($key, $value, $duration); + + self::getApp()->save_timestamp($time, 'cache_write'); + + return $return; } /** From 22fd2409cad636f90bc934345f2f2f017dfdf2ed Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Thu, 1 Mar 2018 01:13:50 -0500 Subject: [PATCH 035/227] Add cache to performance arrays --- src/App.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/App.php b/src/App.php index 6eff22f54..0acbfe6f4 100644 --- a/src/App.php +++ b/src/App.php @@ -148,6 +148,8 @@ class App $this->performance['start'] = microtime(true); $this->performance['database'] = 0; $this->performance['database_write'] = 0; + $this->performance['cache'] = 0; + $this->performance['cache_write'] = 0; $this->performance['network'] = 0; $this->performance['file'] = 0; $this->performance['rendering'] = 0; @@ -157,6 +159,8 @@ class App $this->callstack['database'] = []; $this->callstack['database_write'] = []; + $this->callstack['cache'] = []; + $this->callstack['cache_write'] = []; $this->callstack['network'] = []; $this->callstack['file'] = []; $this->callstack['rendering'] = []; From 95752b79e8803c2b5cfdc38840654ea691af0759 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Thu, 1 Mar 2018 01:25:39 -0500 Subject: [PATCH 036/227] Add cache performance to API and worker --- include/api.php | 23 +++++++++++++++++++++-- src/Core/Worker.php | 28 ++++++++++++++++++++++++++-- 2 files changed, 47 insertions(+), 4 deletions(-) diff --git a/include/api.php b/include/api.php index f742d2cb2..60a9acce0 100644 --- a/include/api.php +++ b/include/api.php @@ -317,12 +317,16 @@ function api_call(App $a) /// @TODO round() really everywhere? logger( parse_url($a->query_string, PHP_URL_PATH) . ": " . sprintf( - "Database: %s/%s, Network: %s, I/O: %s, Other: %s, Total: %s", + "Database: %s/%s, Cache %s/%s, Network: %s, I/O: %s, Other: %s, Total: %s", round($a->performance["database"] - $a->performance["database_write"], 3), round($a->performance["database_write"], 3), + round($a->performance["cache"], 3), + round($a->performance["cache_write"], 3), round($a->performance["network"], 2), round($a->performance["file"], 2), - round($duration - ($a->performance["database"] + $a->performance["network"] + $a->performance["file"]), 2), + round($duration - ($a->performance["database"] + + $a->performance["cache"] + $a->performance["cache_write"] + + $a->performance["network"] + $a->performance["file"]), 2), round($duration, 2) ), LOGGER_DEBUG @@ -344,6 +348,21 @@ function api_call(App $a) } } + $o = "Cache Read:\n"; + foreach ($a->callstack["cache"] as $func => $time) { + $time = round($time, 3); + if ($time > 0) { + $o .= $func . ": " . $time . "\n"; + } + } + $o .= "\nCache Write:\n"; + foreach ($a->callstack["cache_write"] as $func => $time) { + $time = round($time, 3); + if ($time > 0) { + $o .= $func . ": " . $time . "\n"; + } + } + $o .= "\nNetwork:\n"; foreach ($a->callstack["network"] as $func => $time) { $time = round($time, 3); diff --git a/src/Core/Worker.php b/src/Core/Worker.php index f5979a82a..525287dd0 100644 --- a/src/Core/Worker.php +++ b/src/Core/Worker.php @@ -325,6 +325,8 @@ class Worker $a->performance["start"] = microtime(true); $a->performance["database"] = 0; $a->performance["database_write"] = 0; + $a->performance["cache"] = 0; + $a->performance["cache_write"] = 0; $a->performance["network"] = 0; $a->performance["file"] = 0; $a->performance["rendering"] = 0; @@ -409,6 +411,24 @@ class Worker } } } + if (isset($a->callstack["dache"])) { + $o .= "\nCache Read:\n"; + foreach ($a->callstack["dache"] as $func => $time) { + $time = round($time, 3); + if ($time > 0) { + $o .= $func.": ".$time."\n"; + } + } + } + if (isset($a->callstack["dache_write"])) { + $o .= "\nCache Write:\n"; + foreach ($a->callstack["dache_write"] as $func => $time) { + $time = round($time, 3); + if ($time > 0) { + $o .= $func.": ".$time."\n"; + } + } + } if (isset($a->callstack["network"])) { $o .= "\nNetwork:\n"; foreach ($a->callstack["network"] as $func => $time) { @@ -422,12 +442,16 @@ class Worker logger( "ID ".$queue["id"].": ".$funcname.": ".sprintf( - "DB: %s/%s, Net: %s, I/O: %s, Other: %s, Total: %s".$o, + "DB: %s/%s, Cache: %s/%s, Net: %s, I/O: %s, Other: %s, Total: %s".$o, number_format($a->performance["database"] - $a->performance["database_write"], 2), number_format($a->performance["database_write"], 2), + number_format($a->performance["cache"], 2), + number_format($a->performance["cache_write"], 2), number_format($a->performance["network"], 2), number_format($a->performance["file"], 2), - number_format($duration - ($a->performance["database"] + $a->performance["network"] + $a->performance["file"]), 2), + number_format($duration - ($a->performance["database"] + + $a->performance["cache"] + $a->performance["cache_write"] + + $a->performance["network"] + $a->performance["file"]), 2), number_format($duration, 2) ), LOGGER_DEBUG From 059b1f63f8067c54bf9c16cba9710605eb7c9f89 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 4 Mar 2018 23:28:49 -0500 Subject: [PATCH 037/227] Add support for multiple Memcached servers - Updated htconfig documentation --- doc/htconfig.md | 3 +-- src/Core/Cache.php | 5 ++--- src/Core/Cache/MemcachedCacheDriver.php | 8 +++++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/doc/htconfig.md b/doc/htconfig.md index 0355c3df2..b6fd66bc2 100644 --- a/doc/htconfig.md +++ b/doc/htconfig.md @@ -62,8 +62,7 @@ Example: To set the automatic database cleanup process add this line to your .ht * **cache_driver** ([database]|memcache|memcached) - Whether to use Memcache or Memcached to store temporary cache * **memcache_host** - Host name of the memcache daemon. Default is '127.0.0.1'. * **memcache_port** - Port number of the memcache daemon. Default is 11211. -* **memcached_host** - Host name of the memcached daemon. Default is '127.0.0.1'. -* **memcached_port** - Port number of the memcached daemon. Default is 11211. +* **memcached_hosts** - Array of Memcached servers info [host, port(, weight)]. Default is [['127.0.0.1', 11211]] * **no_count** (Boolean) - Don't do count calculations (currently only when showing albums) * **no_oembed** (Boolean) - Don't use OEmbed to fetch more information about a link. * **no_smilies** (Boolean) - Don't show smilies. diff --git a/src/Core/Cache.php b/src/Core/Cache.php index aeda29e84..a1b1ecb9c 100644 --- a/src/Core/Cache.php +++ b/src/Core/Cache.php @@ -36,10 +36,9 @@ class Cache extends \Friendica\BaseObject self::$driver = new Cache\MemcacheCacheDriver($memcache_host, $memcache_port); break; case 'memcached': - $memcached_host = Config::get('system', 'memcached_host', '127.0.0.1'); - $memcached_port = Config::get('system', 'memcached_port', 11211); + $memcached_hosts = Config::get('system', 'memcached_hosts', [['127.0.0.1', 11211]]); - self::$driver = new Cache\MemcachedCacheDriver($memcached_host, $memcached_port); + self::$driver = new Cache\MemcachedCacheDriver($memcached_hosts); break; default: self::$driver = new Cache\DatabaseCacheDriver(); diff --git a/src/Core/Cache/MemcachedCacheDriver.php b/src/Core/Cache/MemcachedCacheDriver.php index 9101c7919..8f1752cbe 100644 --- a/src/Core/Cache/MemcachedCacheDriver.php +++ b/src/Core/Cache/MemcachedCacheDriver.php @@ -17,7 +17,7 @@ class MemcachedCacheDriver extends BaseObject implements ICacheDriver */ private $memcached; - public function __construct($memcached_host, $memcached_port) + public function __construct(array $memcached_hosts) { if (!class_exists('Memcached', false)) { throw new \Exception('Memcached class isn\'t available'); @@ -25,8 +25,10 @@ class MemcachedCacheDriver extends BaseObject implements ICacheDriver $this->memcached = new \Memcached(); - if (!$this->memcached->addServer($memcached_host, $memcached_port)) { - throw new \Exception('Expected Memcached server at ' . $memcached_host . ':' . $memcached_port . ' isn\'t available'); + $this->memcached->addServers($memcached_hosts); + + if (count($this->memcached->getServerList()) == 0) { + throw new \Exception('Expected Memcached servers aren\'t available, config:' . var_export($memcached_hosts, true)); } } From 47b1e4b3ee7aec0a4ce52659a974da573a7a6540 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 4 Mar 2018 23:41:01 -0500 Subject: [PATCH 038/227] Improve default values in htconfig documentation --- doc/htconfig.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/htconfig.md b/doc/htconfig.md index b6fd66bc2..bed6f7902 100644 --- a/doc/htconfig.md +++ b/doc/htconfig.md @@ -58,11 +58,11 @@ Example: To set the automatic database cleanup process add this line to your .ht * **max_processes_backend** - Maximum number of concurrent database processes for background tasks. Default value is 5. * **max_processes_frontend** - Maximum number of concurrent database processes for foreground tasks. Default value is 20. * **min_poll_interval** - minimal distance in minutes between two polls for a contact. Default is 1. Reasonable values are between 1 and 59. -* **session_handler** ([database]|cache|native) - Whether to use Cache to store session data or to use PHP native session storage -* **cache_driver** ([database]|memcache|memcached) - Whether to use Memcache or Memcached to store temporary cache +* **session_handler** (database|cache|native) - Whether to use Cache to store session data or to use PHP native session storage. Default value is `database`. +* **cache_driver** (database|memcache|memcached) - Whether to use Memcache or Memcached to store temporary cache. Default value is `database`. * **memcache_host** - Host name of the memcache daemon. Default is '127.0.0.1'. * **memcache_port** - Port number of the memcache daemon. Default is 11211. -* **memcached_hosts** - Array of Memcached servers info [host, port(, weight)]. Default is [['127.0.0.1', 11211]] +* **memcached_hosts** - Array of Memcached servers info `[host, port(, weight)]`. Default value is `[['127.0.0.1', 11211]]`. * **no_count** (Boolean) - Don't do count calculations (currently only when showing albums) * **no_oembed** (Boolean) - Don't use OEmbed to fetch more information about a link. * **no_smilies** (Boolean) - Don't show smilies. From f94134f556044104f83b81c18835cf9d0923c158 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 4 Mar 2018 23:41:14 -0500 Subject: [PATCH 039/227] Update database.sql according to process --- database.sql | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/database.sql b/database.sql index 7c4acc29f..0b2b01707 100644 --- a/database.sql +++ b/database.sql @@ -59,9 +59,9 @@ CREATE TABLE IF NOT EXISTS `cache` ( `v` mediumtext COMMENT 'cached serialized value', `expires` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'datetime of cache expiration', `updated` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'datetime of cache insertion', - PRIMARY KEY (`k`), - KEY `k_expires` (`k`,`expires`) USING BTREE -) DEFAULT COLLATE utf8mb4_general_ci COMMENT='Stores temporary data'; + PRIMARY KEY(`k`), + INDEX `k_expires` (`k`,`expires`) +) DEFAULT COLLATE utf8mb4_general_ci; -- -- TABLE challenge From d760d339895d40e9de86ab98471d233179502a8a Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sat, 3 Mar 2018 12:09:12 -0500 Subject: [PATCH 040/227] Add Config adapter interfaces/classes --- src/Core/Config/IConfigAdapter.php | 72 ++++++++++++ src/Core/Config/IPConfigAdapter.php | 77 +++++++++++++ src/Core/Config/JITConfigAdapter.php | 132 ++++++++++++++++++++++ src/Core/Config/JITPConfigAdapter.php | 117 +++++++++++++++++++ src/Core/Config/PreloadConfigAdapter.php | 119 +++++++++++++++++++ src/Core/Config/PreloadPConfigAdapter.php | 102 +++++++++++++++++ 6 files changed, 619 insertions(+) create mode 100644 src/Core/Config/IConfigAdapter.php create mode 100644 src/Core/Config/IPConfigAdapter.php create mode 100644 src/Core/Config/JITConfigAdapter.php create mode 100644 src/Core/Config/JITPConfigAdapter.php create mode 100644 src/Core/Config/PreloadConfigAdapter.php create mode 100644 src/Core/Config/PreloadPConfigAdapter.php diff --git a/src/Core/Config/IConfigAdapter.php b/src/Core/Config/IConfigAdapter.php new file mode 100644 index 000000000..ee5ca3ca5 --- /dev/null +++ b/src/Core/Config/IConfigAdapter.php @@ -0,0 +1,72 @@ + + */ +interface IConfigAdapter +{ + /** + * @brief Loads all configuration values into a cached storage. + * + * All configuration values of the system are stored in global cache + * which is available under the global variable $a->config + * + * @param string $cat The category of the configuration values to load + * + * @return void + */ + public function load($cat = "config"); + + /** + * @brief Get a particular user's config variable given the category name + * ($family) and a key. + * + * Get a particular config value from the given category ($family) + * and the $key from a cached storage in $a->config[$uid]. + * $instore is only used by the set_config function + * to determine if the key already exists in the DB + * If a key is found in the DB but doesn't exist in + * local config cache, pull it into the cache so we don't have + * to hit the DB again for this item. + * + * @param string $cat The category of the configuration value + * @param string $k The configuration key to query + * @param mixed $default_value optional, The value to return if key is not set (default: null) + * @param boolean $refresh optional, If true the config is loaded from the db and not from the cache (default: false) + * + * @return mixed Stored value or null if it does not exist + */ + public function get($cat, $k, $default_value = null, $refresh = false); + + /** + * @brief Sets a configuration value for system config + * + * Stores a config value ($value) in the category ($family) under the key ($key) + * for the user_id $uid. + * + * Note: Please do not store booleans - convert to 0/1 integer values! + * + * @param string $family The category of the configuration value + * @param string $key The configuration key to set + * @param mixed $value The value to store + * + * @return mixed Stored $value or false if the database update failed + */ + public function set($cat, $k, $value); + + /** + * @brief Deletes the given key from the system configuration. + * + * Removes the configured value from the stored cache in $a->config + * and removes it from the database. + * + * @param string $cat The category of the configuration value + * @param string $k The configuration key to delete + * + * @return mixed + */ + public function delete($cat, $k); +} diff --git a/src/Core/Config/IPConfigAdapter.php b/src/Core/Config/IPConfigAdapter.php new file mode 100644 index 000000000..f78654d39 --- /dev/null +++ b/src/Core/Config/IPConfigAdapter.php @@ -0,0 +1,77 @@ +config[$uid]. + * + * @param string $uid The user_id + * @param string $cat The category of the configuration value + * + * @return void + */ + public function load($uid, $cat); + + /** + * @brief Get a particular user's config variable given the category name + * ($family) and a key. + * + * Get a particular user's config value from the given category ($family) + * and the $key from a cached storage in $a->config[$uid]. + * + * @param string $uid The user_id + * @param string $cat The category of the configuration value + * @param string $k The configuration key to query + * @param mixed $default_value optional, The value to return if key is not set (default: null) + * @param boolean $refresh optional, If true the config is loaded from the db and not from the cache (default: false) + * + * @return mixed Stored value or null if it does not exist + */ + public function get($uid, $cat, $k, $default_value = null, $refresh = false); + + /** + * @brief Sets a configuration value for a user + * + * Stores a config value ($value) in the category ($family) under the key ($key) + * for the user_id $uid. + * + * @note Please do not store booleans - convert to 0/1 integer values! + * + * @param string $uid The user_id + * @param string $cat The category of the configuration value + * @param string $k The configuration key to set + * @param string $value The value to store + * + * @return mixed Stored $value or false + */ + public function set($uid, $cat, $k, $value); + + /** + * @brief Deletes the given key from the users's configuration. + * + * Removes the configured value from the stored cache in $a->config[$uid] + * and removes it from the database. + * + * @param string $uid The user_id + * @param string $cat The category of the configuration value + * @param string $k The configuration key to delete + * + * @return mixed + */ + public function delete($uid, $cat, $k); +} diff --git a/src/Core/Config/JITConfigAdapter.php b/src/Core/Config/JITConfigAdapter.php new file mode 100644 index 000000000..1bc3bf5a8 --- /dev/null +++ b/src/Core/Config/JITConfigAdapter.php @@ -0,0 +1,132 @@ + + */ +class JITConfigAdapter extends BaseObject implements IConfigAdapter +{ + private $cache; + private $in_db; + + public function load($cat = "config") + { + // We don't preload "system" anymore. + // This reduces the number of database reads a lot. + if ($cat === 'system') { + return; + } + + $a = self::getApp(); + + $configs = dba::select('config', ['v', 'k'], ['cat' => $cat]); + while ($config = dba::fetch($configs)) { + $k = $config['k']; + if ($cat === 'config') { + $a->config[$k] = $config['v']; + } else { + $a->config[$cat][$k] = $config['v']; + self::$cache[$cat][$k] = $config['v']; + self::$in_db[$cat][$k] = true; + } + } + dba::close($configs); + } + + public function get($cat, $k, $default_value = null, $refresh = false) + { + $a = self::getApp(); + + if (!$refresh) { + // Do we have the cached value? Then return it + if (isset($this->cache[$cat][$k])) { + if ($this->cache[$cat][$k] === '!!') { + return $default_value; + } else { + return $this->cache[$cat][$k]; + } + } + } + + $config = dba::selectFirst('config', ['v'], ['cat' => $cat, 'k' => $k]); + if (DBM::is_result($config)) { + // manage array value + $value = (preg_match("|^a:[0-9]+:{.*}$|s", $config['v']) ? unserialize($config['v']) : $config['v']); + + // Assign the value from the database to the cache + $this->cache[$cat][$k] = $value; + $this->in_db[$cat][$k] = true; + return $value; + } elseif (isset($a->config[$cat][$k])) { + // Assign the value (mostly) from the .htconfig.php to the cache + $this->cache[$cat][$k] = $a->config[$cat][$k]; + $this->in_db[$cat][$k] = false; + + return $a->config[$cat][$k]; + } + + $this->cache[$cat][$k] = '!!'; + $this->in_db[$cat][$k] = false; + + return $default_value; + } + + public function set($cat, $k, $value) + { + $a = self::getApp(); + + // We store our setting values in a string variable. + // So we have to do the conversion here so that the compare below works. + // The exception are array values. + $dbvalue = (!is_array($value) ? (string)$value : $value); + + $stored = $this->get($cat, $k, null, true); + + if (($stored === $dbvalue) && $this->in_db[$cat][$k]) { + return true; + } + + if ($cat === 'config') { + $a->config[$k] = $dbvalue; + } elseif ($cat != 'system') { + $a->config[$cat][$k] = $dbvalue; + } + + // Assign the just added value to the cache + $this->cache[$cat][$k] = $dbvalue; + + // manage array value + $dbvalue = (is_array($value) ? serialize($value) : $dbvalue); + + $result = dba::update('config', ['v' => $dbvalue], ['cat' => $cat, 'k' => $k], true); + + if ($result) { + $this->in_db[$cat][$k] = true; + return $value; + } + + return $result; + } + + public function delete($cat, $k) + { + if (isset($this->cache[$cat][$k])) { + unset($this->cache[$cat][$k]); + unset($this->in_db[$cat][$k]); + } + + $result = dba::delete('config', ['cat' => $cat, 'k' => $k]); + + return $result; + } +} diff --git a/src/Core/Config/JITPConfigAdapter.php b/src/Core/Config/JITPConfigAdapter.php new file mode 100644 index 000000000..27f2ed862 --- /dev/null +++ b/src/Core/Config/JITPConfigAdapter.php @@ -0,0 +1,117 @@ + + */ +class JITPConfigAdapter extends BaseObject implements IPConfigAdapter +{ + private $in_db; + + public function load($uid, $cat) + { + $a = self::getApp(); + + $pconfigs = dba::select('pconfig', ['v', 'k'], ['cat' => $cat, 'uid' => $uid]); + if (DBM::is_result($pconfigs)) { + while ($pconfig = dba::fetch($pconfigs)) { + $k = $pconfig['k']; + $a->config[$uid][$cat][$k] = $pconfig['v']; + $this->in_db[$uid][$cat][$k] = true; + } + } else if ($cat != 'config') { + // Negative caching + $a->config[$uid][$cat] = "!!"; + } + dba::close($pconfigs); + } + + public function get($uid, $cat, $k, $default_value = null, $refresh = false) + { + $a = self::getApp(); + + if (!$refresh) { + // Looking if the whole family isn't set + if (isset($a->config[$uid][$cat])) { + if ($a->config[$uid][$cat] === '!!') { + return $default_value; + } + } + + if (isset($a->config[$uid][$cat][$k])) { + if ($a->config[$uid][$cat][$k] === '!!') { + return $default_value; + } + return $a->config[$uid][$cat][$k]; + } + } + + $pconfig = dba::selectFirst('pconfig', ['v'], ['uid' => $uid, 'cat' => $cat, 'k' => $k]); + if (DBM::is_result($pconfig)) { + $val = (preg_match("|^a:[0-9]+:{.*}$|s", $pconfig['v']) ? unserialize($pconfig['v']) : $pconfig['v']); + $a->config[$uid][$cat][$k] = $val; + $this->in_db[$uid][$cat][$k] = true; + + return $val; + } else { + $a->config[$uid][$cat][$k] = '!!'; + $this->in_db[$uid][$cat][$k] = false; + + return $default_value; + } + } + + public function set($uid, $cat, $k, $value) + { + $a = self::getApp(); + + // We store our setting values in a string variable. + // So we have to do the conversion here so that the compare below works. + // The exception are array values. + $dbvalue = (!is_array($value) ? (string)$value : $value); + + $stored = $this->get($uid, $cat, $k, null, true); + + if (($stored === $dbvalue) && $this->in_db[$uid][$cat][$k]) { + return true; + } + + $a->config[$uid][$cat][$k] = $dbvalue; + + // manage array value + $dbvalue = (is_array($value) ? serialize($value) : $dbvalue); + + $result = dba::update('pconfig', ['v' => $dbvalue], ['uid' => $uid, 'cat' => $cat, 'k' => $k], true); + + if ($result) { + $this->in_db[$uid][$cat][$k] = true; + return $value; + } + + return $result; + } + + public function delete($uid, $cat, $k) + { + $a = self::getApp(); + + if (!empty($a->config[$uid][$cat][$k])) { + unset($a->config[$uid][$cat][$k]); + unset($this->in_db[$uid][$cat][$k]); + } + + $result = dba::delete('pconfig', ['uid' => $uid, 'cat' => $cat, 'k' => $k]); + + return $result; + } +} diff --git a/src/Core/Config/PreloadConfigAdapter.php b/src/Core/Config/PreloadConfigAdapter.php new file mode 100644 index 000000000..c10f2ee64 --- /dev/null +++ b/src/Core/Config/PreloadConfigAdapter.php @@ -0,0 +1,119 @@ + + */ +class PreloadConfigAdapter extends BaseObject implements IConfigAdapter +{ + private $config_loaded = false; + + public function __construct() + { + $this->load(); + } + + public function load($family = 'config') + { + if ($this->config_loaded) { + return; + } + + $a = self::getApp(); + + $configs = dba::select('config', ['cat', 'v', 'k']); + while ($config = dba::fetch($configs)) { + $cat = $config['cat']; + $k = $config['k']; + $value = (preg_match("|^a:[0-9]+:{.*}$|s", $config['v']) ? unserialize($config['v']) : $config['v']); + + if ($cat === 'config') { + $a->config[$k] = $value; + } else { + $a->config[$cat][$k] = $value; + } + } + dba::close($configs); + + $this->config_loaded = true; + } + + public function get($cat, $k, $default_value = null, $refresh = false) + { + $a = self::getApp(); + + $return = $default_value; + + if ($cat === 'config') { + if (isset($a->config[$k])) { + $return = $a->config[$k]; + } + } else { + if (isset($a->config[$cat][$k])) { + $return = $a->config[$cat][$k]; + } + } + + return $return; + } + + public function set($cat, $k, $value) + { + $a = self::getApp(); + + // We store our setting values as strings. + // So we have to do the conversion here so that the compare below works. + // The exception are array values. + $compare_value = !is_array($value) ? (string)$value : $value; + + if ($this->get($cat, $k) === $compare_value) { + return true; + } + + if ($cat === 'config') { + $a->config[$k] = $value; + } else { + $a->config[$cat][$k] = $value; + } + + // manage array value + $dbvalue = is_array($value) ? serialize($value) : $value; + + $result = dba::update('config', ['v' => $dbvalue], ['cat' => $cat, 'k' => $k], true); + if (!$result) { + throw new Exception('Unable to store config value in [' . $cat . '][' . $k . ']'); + } + + return true; + } + + public function delete($cat, $k) + { + $a = self::getApp(); + + if ($cat === 'config') { + if (isset($a->config[$k])) { + unset($a->config[$k]); + } + } else { + if (isset($a->config[$cat][$k])) { + unset($a->config[$cat][$k]); + } + } + + $result = dba::delete('config', ['cat' => $cat, 'k' => $k]); + + return $result; + } +} diff --git a/src/Core/Config/PreloadPConfigAdapter.php b/src/Core/Config/PreloadPConfigAdapter.php new file mode 100644 index 000000000..002094a51 --- /dev/null +++ b/src/Core/Config/PreloadPConfigAdapter.php @@ -0,0 +1,102 @@ + + */ +class PreloadPConfigAdapter extends BaseObject implements IPConfigAdapter +{ + private $config_loaded = false; + + public function __construct($uid) + { + $this->load($uid, 'config'); + } + + public function load($uid, $family) + { + if ($this->config_loaded) { + return; + } + + $a = self::getApp(); + + $pconfigs = dba::select('pconfig', ['cat', 'v', 'k'], ['uid' => $uid]); + while ($pconfig = dba::fetch($pconfigs)) { + $cat = $pconfig['cat']; + $k = $pconfig['k']; + $value = (preg_match("|^a:[0-9]+:{.*}$|s", $pconfig['v']) ? unserialize($pconfig['v']) : $pconfig['v']); + + $a->config[$uid][$cat][$k] = $value; + } + dba::close($pconfigs); + + $this->config_loaded = true; + } + + public function get($uid, $cat, $k, $default_value = null, $refresh = false) + { + $a = self::getApp(); + + $return = $default_value; + + if (isset($a->config[$uid][$cat][$k])) { + $return = $a->config[$uid][$cat][$k]; + } + + return $return; + } + + public function set($uid, $cat, $k, $value) + { + $a = self::getApp(); + + // We store our setting values as strings. + // So we have to do the conversion here so that the compare below works. + // The exception are array values. + $compare_value = !is_array($value) ? (string)$value : $value; + + if ($this->get($uid, $cat, $k) === $compare_value) { + return true; + } + + $a->config[$uid][$cat][$k] = $value; + + // manage array value + $dbvalue = is_array($value) ? serialize($value) : $value; + + $result = dba::update('pconfig', ['v' => $dbvalue], ['uid' => $uid, 'cat' => $cat, 'k' => $k], true); + + if (!$result) { + throw new Exception('Unable to store config value in [' . $uid . '][' . $cat . '][' . $k . ']'); + } + + return true; + } + + public function delete($uid, $cat, $k) + { + $a = self::getApp(); + + if (!isset($a->config[$uid][$cat][$k])) { + return true; + } + + unset($a->config[$uid][$cat][$k]); + + $result = dba::delete('pconfig', ['uid' => $uid, 'cat' => $cat, 'k' => $k]); + + return $result; + } +} From 6fec0433758ec1df4f798941939250dd169269a7 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sat, 3 Mar 2018 12:10:55 -0500 Subject: [PATCH 041/227] Update Config class with adapter --- index.php | 1 + src/Core/Config.php | 127 +++++++++++--------------------------------- 2 files changed, 32 insertions(+), 96 deletions(-) diff --git a/index.php b/index.php index ef8440099..4fad08da8 100644 --- a/index.php +++ b/index.php @@ -78,6 +78,7 @@ if (!$install) { exit(); } + Config::init(); Session::init(); Addon::loadHooks(); Addon::callHooks('init_1'); diff --git a/src/Core/Config.php b/src/Core/Config.php index 5e162a3fa..bff5d81ff 100644 --- a/src/Core/Config.php +++ b/src/Core/Config.php @@ -8,26 +8,35 @@ */ namespace Friendica\Core; -use Friendica\Database\DBM; -use dba; +use Friendica\BaseObject; +use Friendica\Core\Config; require_once 'include/dba.php'; /** - * @brief Arbitrary sytem configuration storage + * @brief Arbitrary system configuration storage * * Note: * If we ever would decide to return exactly the variable type as entered, * we will have fun with the additional features. :-) - * - * The config class always returns strings but in the default features - * we use a "false" to determine if the config value isn't set. - * */ -class Config +class Config extends BaseObject { - private static $cache; - private static $in_db; + /** + * @var Friendica\Core\Config\IConfigAdapter + */ + private static $adapter = null; + + public static function init() + { + $a = self::getApp(); + + if (isset($a->config['system']['config_adapter']) && $a->config['system']['config_adapter'] == 'preload') { + self::$adapter = new Config\PreloadConfigAdapter(); + } else { + self::$adapter = new Config\JITConfigAdapter(); + } + } /** * @brief Loads all configuration values of family into a cached storage. @@ -41,26 +50,11 @@ class Config */ public static function load($family = "config") { - // We don't preload "system" anymore. - // This reduces the number of database reads a lot. - if ($family === 'system') { - return; + if (empty(self::$adapter)) { + self::init(); } - $a = get_app(); - - $r = dba::select('config', ['v', 'k'], ['cat' => $family]); - while ($rr = dba::fetch($r)) { - $k = $rr['k']; - if ($family === 'config') { - $a->config[$k] = $rr['v']; - } else { - $a->config[$family][$k] = $rr['v']; - self::$cache[$family][$k] = $rr['v']; - self::$in_db[$family][$k] = true; - } - } - dba::close($r); + self::$adapter->load($family); } /** @@ -84,40 +78,11 @@ class Config */ public static function get($family, $key, $default_value = null, $refresh = false) { - $a = get_app(); - - if (!$refresh) { - // Do we have the cached value? Then return it - if (isset(self::$cache[$family][$key])) { - if (self::$cache[$family][$key] === '!!') { - return $default_value; - } else { - return self::$cache[$family][$key]; - } - } + if (empty(self::$adapter)) { + self::init(); } - $config = dba::selectFirst('config', ['v'], ['cat' => $family, 'k' => $key]); - if (DBM::is_result($config)) { - // manage array value - $val = (preg_match("|^a:[0-9]+:{.*}$|s", $config['v']) ? unserialize($config['v']) : $config['v']); - - // Assign the value from the database to the cache - self::$cache[$family][$key] = $val; - self::$in_db[$family][$key] = true; - return $val; - } elseif (isset($a->config[$family][$key])) { - // Assign the value (mostly) from the .htconfig.php to the cache - self::$cache[$family][$key] = $a->config[$family][$key]; - self::$in_db[$family][$key] = false; - - return $a->config[$family][$key]; - } - - self::$cache[$family][$key] = '!!'; - self::$in_db[$family][$key] = false; - - return $default_value; + return self::$adapter->get($family, $key, $default_value, $refresh); } /** @@ -136,38 +101,11 @@ class Config */ public static function set($family, $key, $value) { - $a = get_app(); - - // We store our setting values in a string variable. - // So we have to do the conversion here so that the compare below works. - // The exception are array values. - $dbvalue = (!is_array($value) ? (string)$value : $value); - - $stored = self::get($family, $key, null, true); - - if (($stored === $dbvalue) && self::$in_db[$family][$key]) { - return true; + if (empty(self::$adapter)) { + self::init(); } - if ($family === 'config') { - $a->config[$key] = $dbvalue; - } elseif ($family != 'system') { - $a->config[$family][$key] = $dbvalue; - } - - // Assign the just added value to the cache - self::$cache[$family][$key] = $dbvalue; - - // manage array value - $dbvalue = (is_array($value) ? serialize($value) : $dbvalue); - - $ret = dba::update('config', ['v' => $dbvalue], ['cat' => $family, 'k' => $key], true); - - if ($ret) { - self::$in_db[$family][$key] = true; - return $value; - } - return $ret; + return self::$adapter->set($family, $key, $value); } /** @@ -183,13 +121,10 @@ class Config */ public static function delete($family, $key) { - if (isset(self::$cache[$family][$key])) { - unset(self::$cache[$family][$key]); - unset(self::$in_db[$family][$key]); + if (empty(self::$adapter)) { + self::init(); } - $ret = dba::delete('config', ['cat' => $family, 'k' => $key]); - - return $ret; + return self::$adapter->delete($family, $key); } } From 7afcd6d49e6afed1bc4a94602370eee7859e401e Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sat, 3 Mar 2018 12:13:20 -0500 Subject: [PATCH 042/227] Update PConfig class with adapter --- src/Core/PConfig.php | 120 +++++++++++++------------------------------ 1 file changed, 36 insertions(+), 84 deletions(-) diff --git a/src/Core/PConfig.php b/src/Core/PConfig.php index 82d469083..bfa52f5a3 100644 --- a/src/Core/PConfig.php +++ b/src/Core/PConfig.php @@ -1,20 +1,18 @@ config['system']['config_adapter']) && $a->config['system']['config_adapter'] == 'preload') { + self::$adapter = new Config\PreloadPConfigAdapter($uid); + } else { + self::$adapter = new Config\JITPConfigAdapter($uid); + } + } /** * @brief Loads all configuration values of a user's config family into a cached storage. @@ -39,20 +51,11 @@ class PConfig */ public static function load($uid, $family) { - $a = get_app(); - - $r = dba::select('pconfig', ['v', 'k'], ['cat' => $family, 'uid' => $uid]); - if (DBM::is_result($r)) { - while ($rr = dba::fetch($r)) { - $k = $rr['k']; - $a->config[$uid][$family][$k] = $rr['v']; - self::$in_db[$uid][$family][$k] = true; - } - } else if ($family != 'config') { - // Negative caching - $a->config[$uid][$family] = "!!"; + if (empty(self::$adapter)) { + self::init($uid); } - dba::close($r); + + self::$adapter->load($uid, $family); } /** @@ -72,37 +75,11 @@ class PConfig */ public static function get($uid, $family, $key, $default_value = null, $refresh = false) { - $a = get_app(); - - if (!$refresh) { - // Looking if the whole family isn't set - if (isset($a->config[$uid][$family])) { - if ($a->config[$uid][$family] === '!!') { - return $default_value; - } - } - - if (isset($a->config[$uid][$family][$key])) { - if ($a->config[$uid][$family][$key] === '!!') { - return $default_value; - } - return $a->config[$uid][$family][$key]; - } + if (empty(self::$adapter)) { + self::init($uid); } - $pconfig = dba::selectFirst('pconfig', ['v'], ['uid' => $uid, 'cat' => $family, 'k' => $key]); - if (DBM::is_result($pconfig)) { - $val = (preg_match("|^a:[0-9]+:{.*}$|s", $pconfig['v']) ? unserialize($pconfig['v']) : $pconfig['v']); - $a->config[$uid][$family][$key] = $val; - self::$in_db[$uid][$family][$key] = true; - - return $val; - } else { - $a->config[$uid][$family][$key] = '!!'; - self::$in_db[$uid][$family][$key] = false; - - return $default_value; - } + return self::$adapter->get($uid, $family, $key, $default_value, $refresh); } /** @@ -122,31 +99,11 @@ class PConfig */ public static function set($uid, $family, $key, $value) { - $a = get_app(); - - // We store our setting values in a string variable. - // So we have to do the conversion here so that the compare below works. - // The exception are array values. - $dbvalue = (!is_array($value) ? (string)$value : $value); - - $stored = self::get($uid, $family, $key, null, true); - - if (($stored === $dbvalue) && self::$in_db[$uid][$family][$key]) { - return true; + if (empty(self::$adapter)) { + self::init($uid); } - $a->config[$uid][$family][$key] = $dbvalue; - - // manage array value - $dbvalue = (is_array($value) ? serialize($value) : $dbvalue); - - $ret = dba::update('pconfig', ['v' => $dbvalue], ['uid' => $uid, 'cat' => $family, 'k' => $key], true); - - if ($ret) { - self::$in_db[$uid][$family][$key] = true; - return $value; - } - return $ret; + return self::$adapter->set($uid, $family, $key, $value); } /** @@ -163,15 +120,10 @@ class PConfig */ public static function delete($uid, $family, $key) { - $a = get_app(); - - if (x($a->config[$uid][$family], $key)) { - unset($a->config[$uid][$family][$key]); - unset(self::$in_db[$uid][$family][$key]); + if (empty(self::$adapter)) { + self::init($uid); } - $ret = dba::delete('pconfig', ['uid' => $uid, 'cat' => $family, 'k' => $key]); - - return $ret; + return self::$adapter->delete($uid, $family, $key); } } From 4b9c52aad0ba24476e4d04d98bd0b52f66f3ba36 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sat, 3 Mar 2018 12:13:43 -0500 Subject: [PATCH 043/227] Update htconfig documentation --- doc/htconfig.md | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/htconfig.md b/doc/htconfig.md index bed6f7902..1f1b62bd4 100644 --- a/doc/htconfig.md +++ b/doc/htconfig.md @@ -27,6 +27,7 @@ Example: To set the automatic database cleanup process add this line to your .ht * **always_show_preview** (Boolean) - Only show small preview picures. Default value is false. * **block_local_dir** (Boolean) - Blocks the access to the directory of the local users. * **auth_cookie_lifetime** (Integer) - Number of days that should pass without any activity before a user who chose "Remember me" when logging in is considered logged out. Defaults to 7. +* **config_adapter** (jit|preload) - Allow to switch the configuration adapter to improve performances at the cost of memory consumption. Default value is "jit" * **curl_range_bytes** - Maximum number of bytes that should be fetched. Default is 0, which mean "no limit". * **db_log** - Name of a logfile to log slow database queries * **db_loglimit** - If a database call lasts longer than this value it is logged From dcd1f1861180b812c9b4f08209ea0610af437df0 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 4 Mar 2018 22:44:33 -0500 Subject: [PATCH 044/227] Add refresh feature to Preload (P)Config adapters - Add private methods to manipulat the App config variable --- src/Core/Config/PreloadConfigAdapter.php | 111 +++++++++++++++------- src/Core/Config/PreloadPConfigAdapter.php | 98 ++++++++++++++----- 2 files changed, 150 insertions(+), 59 deletions(-) diff --git a/src/Core/Config/PreloadConfigAdapter.php b/src/Core/Config/PreloadConfigAdapter.php index c10f2ee64..4abcc4a1a 100644 --- a/src/Core/Config/PreloadConfigAdapter.php +++ b/src/Core/Config/PreloadConfigAdapter.php @@ -4,7 +4,9 @@ namespace Friendica\Core\Config; use dba; use Exception; +use Friendica\App; use Friendica\BaseObject; +use Friendica\Database\DBM; require_once 'include/dba.php'; @@ -30,19 +32,9 @@ class PreloadConfigAdapter extends BaseObject implements IConfigAdapter return; } - $a = self::getApp(); - $configs = dba::select('config', ['cat', 'v', 'k']); while ($config = dba::fetch($configs)) { - $cat = $config['cat']; - $k = $config['k']; - $value = (preg_match("|^a:[0-9]+:{.*}$|s", $config['v']) ? unserialize($config['v']) : $config['v']); - - if ($cat === 'config') { - $a->config[$k] = $value; - } else { - $a->config[$cat][$k] = $value; - } + $this->setPreloadedValue($config['cat'], $config['k'], $config['v']); } dba::close($configs); @@ -51,41 +43,32 @@ class PreloadConfigAdapter extends BaseObject implements IConfigAdapter public function get($cat, $k, $default_value = null, $refresh = false) { - $a = self::getApp(); - - $return = $default_value; - - if ($cat === 'config') { - if (isset($a->config[$k])) { - $return = $a->config[$k]; - } - } else { - if (isset($a->config[$cat][$k])) { - $return = $a->config[$cat][$k]; + if ($refresh) { + $config = dba::selectFirst('config', ['v'], ['cat' => $cat, 'k' => $k]); + if (DBM::is_result($config)) { + $this->setPreloadedValue($cat, $k, $config['v']); + } else { + $this->deletePreloadedValue($cat, $k); } } + $return = $this->getPreloadedValue($cat, $k, $default_value); + return $return; } public function set($cat, $k, $value) { - $a = self::getApp(); - // We store our setting values as strings. // So we have to do the conversion here so that the compare below works. // The exception are array values. $compare_value = !is_array($value) ? (string)$value : $value; - if ($this->get($cat, $k) === $compare_value) { + if ($this->getPreloadedValue($cat, $k) === $compare_value) { return true; } - if ($cat === 'config') { - $a->config[$k] = $value; - } else { - $a->config[$cat][$k] = $value; - } + $this->setPreloadedValue($cat, $k, $value); // manage array value $dbvalue = is_array($value) ? serialize($value) : $value; @@ -99,6 +82,70 @@ class PreloadConfigAdapter extends BaseObject implements IConfigAdapter } public function delete($cat, $k) + { + $this->deletePreloadedValue($cat, $k); + + $result = dba::delete('config', ['cat' => $cat, 'k' => $k]); + + return $result; + } + + /** + * Retrieves a preloaded value from the App config cache + * + * @param string $cat + * @param string $k + * @param mixed $default + */ + private function getPreloadedValue($cat, $k, $default = null) + { + $a = self::getApp(); + + $return = $default; + + if ($cat === 'config') { + if (isset($a->config[$k])) { + $return = $a->config[$k]; + } + } else { + if (isset($a->config[$cat][$k])) { + $return = $a->config[$cat][$k]; + } + } + + return $return; + } + + /** + * Sets a preloaded value in the App config cache + * + * Accepts raw output from the config table + * + * @param string $cat + * @param string $k + * @param mixed $v + */ + private function setPreloadedValue($cat, $k, $v) + { + $a = self::getApp(); + + // Only arrays are serialized in database, so we have to unserialize sparingly + $value = is_string($v) && preg_match("|^a:[0-9]+:{.*}$|s", $v) ? unserialize($v) : $v; + + if ($cat === 'config') { + $a->config[$k] = $value; + } else { + $a->config[$cat][$k] = $value; + } + } + + /** + * Deletes a preloaded value from the App config cache + * + * @param string $cat + * @param string $k + */ + private function deletePreloadedValue($cat, $k) { $a = self::getApp(); @@ -111,9 +158,5 @@ class PreloadConfigAdapter extends BaseObject implements IConfigAdapter unset($a->config[$cat][$k]); } } - - $result = dba::delete('config', ['cat' => $cat, 'k' => $k]); - - return $result; } } diff --git a/src/Core/Config/PreloadPConfigAdapter.php b/src/Core/Config/PreloadPConfigAdapter.php index 002094a51..d6a44e07c 100644 --- a/src/Core/Config/PreloadPConfigAdapter.php +++ b/src/Core/Config/PreloadPConfigAdapter.php @@ -4,7 +4,9 @@ namespace Friendica\Core\Config; use dba; use Exception; +use Friendica\App; use Friendica\BaseObject; +use Friendica\Database\DBM; require_once 'include/dba.php'; @@ -30,15 +32,9 @@ class PreloadPConfigAdapter extends BaseObject implements IPConfigAdapter return; } - $a = self::getApp(); - $pconfigs = dba::select('pconfig', ['cat', 'v', 'k'], ['uid' => $uid]); while ($pconfig = dba::fetch($pconfigs)) { - $cat = $pconfig['cat']; - $k = $pconfig['k']; - $value = (preg_match("|^a:[0-9]+:{.*}$|s", $pconfig['v']) ? unserialize($pconfig['v']) : $pconfig['v']); - - $a->config[$uid][$cat][$k] = $value; + $this->setPreloadedValue($uid, $pconfig['cat'], $pconfig['k'], $pconfig['v']); } dba::close($pconfigs); @@ -47,37 +43,37 @@ class PreloadPConfigAdapter extends BaseObject implements IPConfigAdapter public function get($uid, $cat, $k, $default_value = null, $refresh = false) { - $a = self::getApp(); - - $return = $default_value; - - if (isset($a->config[$uid][$cat][$k])) { - $return = $a->config[$uid][$cat][$k]; + if ($refresh) { + $config = dba::selectFirst('pconfig', ['v'], ['uid' => $uid, 'cat' => $cat, 'k' => $k]); + if (DBM::is_result($config)) { + $this->setPreloadedValue($uid, $cat, $k, $config['v']); + } else { + $this->deletePreloadedValue($uid, $cat, $k); + } } + $return = $this->getPreloadedValue($uid, $cat, $k, $default_value); + return $return; } public function set($uid, $cat, $k, $value) { - $a = self::getApp(); - // We store our setting values as strings. // So we have to do the conversion here so that the compare below works. // The exception are array values. $compare_value = !is_array($value) ? (string)$value : $value; - if ($this->get($uid, $cat, $k) === $compare_value) { + if ($this->getPreloadedValue($uid, $cat, $k) === $compare_value) { return true; } - $a->config[$uid][$cat][$k] = $value; + $this->setPreloadedValue($uid, $cat, $k, $value); // manage array value $dbvalue = is_array($value) ? serialize($value) : $value; $result = dba::update('pconfig', ['v' => $dbvalue], ['uid' => $uid, 'cat' => $cat, 'k' => $k], true); - if (!$result) { throw new Exception('Unable to store config value in [' . $uid . '][' . $cat . '][' . $k . ']'); } @@ -87,16 +83,68 @@ class PreloadPConfigAdapter extends BaseObject implements IPConfigAdapter public function delete($uid, $cat, $k) { - $a = self::getApp(); - - if (!isset($a->config[$uid][$cat][$k])) { - return true; - } - - unset($a->config[$uid][$cat][$k]); + $this->deletePreloadedValue($uid, $cat, $k); $result = dba::delete('pconfig', ['uid' => $uid, 'cat' => $cat, 'k' => $k]); return $result; } + + + /** + * Retrieves a preloaded value from the App user config cache + * + * @param int $uid + * @param string $cat + * @param string $k + * @param mixed $default + */ + private function getPreloadedValue($uid, $cat, $k, $default = null) + { + $a = self::getApp(); + + $return = $default; + + if (isset($a->config[$uid][$cat][$k])) { + $return = $a->config[$uid][$cat][$k]; + } + + return $return; + } + + /** + * Sets a preloaded value in the App user config cache + * + * Accepts raw output from the pconfig table + * + * @param int $uid + * @param string $cat + * @param string $k + * @param mixed $v + */ + private function setPreloadedValue($uid, $cat, $k, $v) + { + $a = self::getApp(); + + // Only arrays are serialized in database, so we have to unserialize sparingly + $value = is_string($v) && preg_match("|^a:[0-9]+:{.*}$|s", $v) ? unserialize($v) : $v; + + $a->config[$uid][$cat][$k] = $value; + } + + /** + * Deletes a preloaded value from the App user config cache + * + * @param int $uid + * @param string $cat + * @param string $k + */ + private function deletePreloadedValue($uid, $cat, $k) + { + $a = self::getApp(); + + if (isset($a->config[$uid][$cat][$k])) { + unset($a->config[$uid][$cat][$k]); + } + } } From 047f94996773ac248442c9565991f3558dc9aa36 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 4 Mar 2018 22:59:26 -0500 Subject: [PATCH 045/227] Remove irrelevant else case --- src/Core/Config/PreloadConfigAdapter.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/Core/Config/PreloadConfigAdapter.php b/src/Core/Config/PreloadConfigAdapter.php index 4abcc4a1a..6d4350042 100644 --- a/src/Core/Config/PreloadConfigAdapter.php +++ b/src/Core/Config/PreloadConfigAdapter.php @@ -47,8 +47,6 @@ class PreloadConfigAdapter extends BaseObject implements IConfigAdapter $config = dba::selectFirst('config', ['v'], ['cat' => $cat, 'k' => $k]); if (DBM::is_result($config)) { $this->setPreloadedValue($cat, $k, $config['v']); - } else { - $this->deletePreloadedValue($cat, $k); } } From 87f2d185541eeb2475c16c844b172c5fa89a6527 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Tue, 6 Mar 2018 20:04:04 -0500 Subject: [PATCH 046/227] Move *ConfigValue functions to App --- src/App.php | 112 ++++++++++++++++++++++ src/Core/Config.php | 4 +- src/Core/Config/JITConfigAdapter.php | 22 ++--- src/Core/Config/JITPConfigAdapter.php | 22 +++-- src/Core/Config/PreloadConfigAdapter.php | 86 ++--------------- src/Core/Config/PreloadPConfigAdapter.php | 76 ++------------- 6 files changed, 150 insertions(+), 172 deletions(-) diff --git a/src/App.php b/src/App.php index 0acbfe6f4..2330bc118 100644 --- a/src/App.php +++ b/src/App.php @@ -944,4 +944,116 @@ class App return true; } + + /** + * @param string $cat Config category + * @param string $k Config key + * @param mixed $default Default value if it isn't set + */ + public function getConfigValue($cat, $k, $default = null) + { + $return = $default; + + if ($cat === 'config') { + if (isset($this->config[$k])) { + $return = $this->config[$k]; + } + } else { + if (isset($this->config[$cat][$k])) { + $return = $this->config[$cat][$k]; + } + } + + return $return; + } + + /** + * Sets a value in the config cache. Accepts raw output from the config table + * + * @param string $cat Config category + * @param string $k Config key + * @param mixed $v Value to set + */ + public function setConfigValue($cat, $k, $v) + { + // Only arrays are serialized in database, so we have to unserialize sparingly + $value = is_string($v) && preg_match("|^a:[0-9]+:{.*}$|s", $v) ? unserialize($v) : $v; + + if ($cat === 'config') { + $this->config[$k] = $value; + } else { + $this->config[$cat][$k] = $value; + } + } + + /** + * Deletes a value from the config cache + * + * @param string $cat Config category + * @param string $k Config key + */ + public function deleteConfigValue($cat, $k) + { + if ($cat === 'config') { + if (isset($this->config[$k])) { + unset($this->config[$k]); + } + } else { + if (isset($this->config[$cat][$k])) { + unset($this->config[$cat][$k]); + } + } + } + + + /** + * Retrieves a value from the user config cache + * + * @param int $uid User Id + * @param string $cat Config category + * @param string $k Config key + * @param mixed $default Default value if key isn't set + */ + public function getPConfigValue($uid, $cat, $k, $default = null) + { + $return = $default; + + if (isset($this->config[$uid][$cat][$k])) { + $return = $this->config[$uid][$cat][$k]; + } + + return $return; + } + + /** + * Sets a value in the user config cache + * + * Accepts raw output from the pconfig table + * + * @param int $uid User Id + * @param string $cat Config category + * @param string $k Config key + * @param mixed $v Value to set + */ + public function setPConfigValue($uid, $cat, $k, $v) + { + // Only arrays are serialized in database, so we have to unserialize sparingly + $value = is_string($v) && preg_match("|^a:[0-9]+:{.*}$|s", $v) ? unserialize($v) : $v; + + $this->config[$uid][$cat][$k] = $value; + } + + /** + * Deletes a value from the user config cache + * + * @param int $uid User Id + * @param string $cat Config category + * @param string $k Config key + */ + public function deletePConfigValue($uid, $cat, $k) + { + if (isset($this->config[$uid][$cat][$k])) { + unset($this->config[$uid][$cat][$k]); + } + } } diff --git a/src/Core/Config.php b/src/Core/Config.php index bff5d81ff..3c1d3245f 100644 --- a/src/Core/Config.php +++ b/src/Core/Config.php @@ -29,9 +29,7 @@ class Config extends BaseObject public static function init() { - $a = self::getApp(); - - if (isset($a->config['system']['config_adapter']) && $a->config['system']['config_adapter'] == 'preload') { + if (self::getApp()->getConfigValue('system', 'config_adapter') == 'preload') { self::$adapter = new Config\PreloadConfigAdapter(); } else { self::$adapter = new Config\JITConfigAdapter(); diff --git a/src/Core/Config/JITConfigAdapter.php b/src/Core/Config/JITConfigAdapter.php index 1bc3bf5a8..0e7731690 100644 --- a/src/Core/Config/JITConfigAdapter.php +++ b/src/Core/Config/JITConfigAdapter.php @@ -8,7 +8,7 @@ use Friendica\Database\DBM; require_once 'include/dba.php'; /** - * JustInTime ConfigAdapter + * JustInTime Configuration Adapter * * Default Config Adapter. Provides the best performance for pages loading few configuration variables. * @@ -27,17 +27,15 @@ class JITConfigAdapter extends BaseObject implements IConfigAdapter return; } - $a = self::getApp(); - $configs = dba::select('config', ['v', 'k'], ['cat' => $cat]); while ($config = dba::fetch($configs)) { $k = $config['k']; - if ($cat === 'config') { - $a->config[$k] = $config['v']; - } else { - $a->config[$cat][$k] = $config['v']; - self::$cache[$cat][$k] = $config['v']; - self::$in_db[$cat][$k] = true; + + self::getApp()->setConfigValue($cat, $k, $config['v']); + + if ($cat !== 'config') { + $this->cache[$cat][$k] = $config['v']; + $this->in_db[$cat][$k] = true; } } dba::close($configs); @@ -96,11 +94,7 @@ class JITConfigAdapter extends BaseObject implements IConfigAdapter return true; } - if ($cat === 'config') { - $a->config[$k] = $dbvalue; - } elseif ($cat != 'system') { - $a->config[$cat][$k] = $dbvalue; - } + self::getApp()->setConfigValue($cat, $k, $value); // Assign the just added value to the cache $this->cache[$cat][$k] = $dbvalue; diff --git a/src/Core/Config/JITPConfigAdapter.php b/src/Core/Config/JITPConfigAdapter.php index 27f2ed862..ce9c5b646 100644 --- a/src/Core/Config/JITPConfigAdapter.php +++ b/src/Core/Config/JITPConfigAdapter.php @@ -8,7 +8,7 @@ use Friendica\Database\DBM; require_once 'include/dba.php'; /** - * JustInTime PConfigAdapter + * JustInTime User Configuration Adapter * * Default PConfig Adapter. Provides the best performance for pages loading few configuration variables. * @@ -26,7 +26,9 @@ class JITPConfigAdapter extends BaseObject implements IPConfigAdapter if (DBM::is_result($pconfigs)) { while ($pconfig = dba::fetch($pconfigs)) { $k = $pconfig['k']; - $a->config[$uid][$cat][$k] = $pconfig['v']; + + self::getApp()->setPConfigValue($uid, $cat, $k, $pconfig['v']); + $this->in_db[$uid][$cat][$k] = true; } } else if ($cat != 'config') { @@ -59,12 +61,15 @@ class JITPConfigAdapter extends BaseObject implements IPConfigAdapter $pconfig = dba::selectFirst('pconfig', ['v'], ['uid' => $uid, 'cat' => $cat, 'k' => $k]); if (DBM::is_result($pconfig)) { $val = (preg_match("|^a:[0-9]+:{.*}$|s", $pconfig['v']) ? unserialize($pconfig['v']) : $pconfig['v']); - $a->config[$uid][$cat][$k] = $val; + + self::getApp()->setPConfigValue($uid, $cat, $k, $val); + $this->in_db[$uid][$cat][$k] = true; return $val; } else { - $a->config[$uid][$cat][$k] = '!!'; + self::getApp()->setPConfigValue($uid, $cat, $k, '!!'); + $this->in_db[$uid][$cat][$k] = false; return $default_value; @@ -73,8 +78,6 @@ class JITPConfigAdapter extends BaseObject implements IPConfigAdapter public function set($uid, $cat, $k, $value) { - $a = self::getApp(); - // We store our setting values in a string variable. // So we have to do the conversion here so that the compare below works. // The exception are array values. @@ -86,7 +89,7 @@ class JITPConfigAdapter extends BaseObject implements IPConfigAdapter return true; } - $a->config[$uid][$cat][$k] = $dbvalue; + self::getApp()->setPConfigValue($uid, $cat, $k, $value); // manage array value $dbvalue = (is_array($value) ? serialize($value) : $dbvalue); @@ -103,10 +106,9 @@ class JITPConfigAdapter extends BaseObject implements IPConfigAdapter public function delete($uid, $cat, $k) { - $a = self::getApp(); + self::getApp()->deletePConfigValue($uid, $cat, $k); - if (!empty($a->config[$uid][$cat][$k])) { - unset($a->config[$uid][$cat][$k]); + if (!empty($this->in_db[$uid][$cat][$k])) { unset($this->in_db[$uid][$cat][$k]); } diff --git a/src/Core/Config/PreloadConfigAdapter.php b/src/Core/Config/PreloadConfigAdapter.php index 6d4350042..f87b47f16 100644 --- a/src/Core/Config/PreloadConfigAdapter.php +++ b/src/Core/Config/PreloadConfigAdapter.php @@ -11,9 +11,9 @@ use Friendica\Database\DBM; require_once 'include/dba.php'; /** - * Preload ConfigAdapter + * Preload Configuration Adapter * - * Minimize the number of database queries to retrieve configuration values at the cost of memory. + * Minimizes the number of database queries to retrieve configuration values at the cost of memory. * * @author Hypolite Petovan */ @@ -34,7 +34,7 @@ class PreloadConfigAdapter extends BaseObject implements IConfigAdapter $configs = dba::select('config', ['cat', 'v', 'k']); while ($config = dba::fetch($configs)) { - $this->setPreloadedValue($config['cat'], $config['k'], $config['v']); + self::getApp()->setConfigValue($config['cat'], $config['k'], $config['v']); } dba::close($configs); @@ -46,11 +46,11 @@ class PreloadConfigAdapter extends BaseObject implements IConfigAdapter if ($refresh) { $config = dba::selectFirst('config', ['v'], ['cat' => $cat, 'k' => $k]); if (DBM::is_result($config)) { - $this->setPreloadedValue($cat, $k, $config['v']); + self::getApp()->setConfigValue($cat, $k, $config['v']); } } - $return = $this->getPreloadedValue($cat, $k, $default_value); + $return = self::getApp()->getConfigValue($cat, $k, $default_value); return $return; } @@ -62,11 +62,11 @@ class PreloadConfigAdapter extends BaseObject implements IConfigAdapter // The exception are array values. $compare_value = !is_array($value) ? (string)$value : $value; - if ($this->getPreloadedValue($cat, $k) === $compare_value) { + if (self::getApp()->getConfigValue($cat, $k) === $compare_value) { return true; } - $this->setPreloadedValue($cat, $k, $value); + self::getApp()->setConfigValue($cat, $k, $value); // manage array value $dbvalue = is_array($value) ? serialize($value) : $value; @@ -81,80 +81,10 @@ class PreloadConfigAdapter extends BaseObject implements IConfigAdapter public function delete($cat, $k) { - $this->deletePreloadedValue($cat, $k); + self::getApp()->deleteConfigValue($cat, $k); $result = dba::delete('config', ['cat' => $cat, 'k' => $k]); return $result; } - - /** - * Retrieves a preloaded value from the App config cache - * - * @param string $cat - * @param string $k - * @param mixed $default - */ - private function getPreloadedValue($cat, $k, $default = null) - { - $a = self::getApp(); - - $return = $default; - - if ($cat === 'config') { - if (isset($a->config[$k])) { - $return = $a->config[$k]; - } - } else { - if (isset($a->config[$cat][$k])) { - $return = $a->config[$cat][$k]; - } - } - - return $return; - } - - /** - * Sets a preloaded value in the App config cache - * - * Accepts raw output from the config table - * - * @param string $cat - * @param string $k - * @param mixed $v - */ - private function setPreloadedValue($cat, $k, $v) - { - $a = self::getApp(); - - // Only arrays are serialized in database, so we have to unserialize sparingly - $value = is_string($v) && preg_match("|^a:[0-9]+:{.*}$|s", $v) ? unserialize($v) : $v; - - if ($cat === 'config') { - $a->config[$k] = $value; - } else { - $a->config[$cat][$k] = $value; - } - } - - /** - * Deletes a preloaded value from the App config cache - * - * @param string $cat - * @param string $k - */ - private function deletePreloadedValue($cat, $k) - { - $a = self::getApp(); - - if ($cat === 'config') { - if (isset($a->config[$k])) { - unset($a->config[$k]); - } - } else { - if (isset($a->config[$cat][$k])) { - unset($a->config[$cat][$k]); - } - } - } } diff --git a/src/Core/Config/PreloadPConfigAdapter.php b/src/Core/Config/PreloadPConfigAdapter.php index d6a44e07c..d23541033 100644 --- a/src/Core/Config/PreloadPConfigAdapter.php +++ b/src/Core/Config/PreloadPConfigAdapter.php @@ -11,9 +11,9 @@ use Friendica\Database\DBM; require_once 'include/dba.php'; /** - * Preload PConfigAdapter + * Preload User Configuration Adapter * - * Minimize the number of database queries to retrieve configuration values at the cost of memory. + * Minimizes the number of database queries to retrieve configuration values at the cost of memory. * * @author Hypolite Petovan */ @@ -34,7 +34,7 @@ class PreloadPConfigAdapter extends BaseObject implements IPConfigAdapter $pconfigs = dba::select('pconfig', ['cat', 'v', 'k'], ['uid' => $uid]); while ($pconfig = dba::fetch($pconfigs)) { - $this->setPreloadedValue($uid, $pconfig['cat'], $pconfig['k'], $pconfig['v']); + self::getApp()->setPConfigValue($uid, $pconfig['cat'], $pconfig['k'], $pconfig['v']); } dba::close($pconfigs); @@ -46,13 +46,13 @@ class PreloadPConfigAdapter extends BaseObject implements IPConfigAdapter if ($refresh) { $config = dba::selectFirst('pconfig', ['v'], ['uid' => $uid, 'cat' => $cat, 'k' => $k]); if (DBM::is_result($config)) { - $this->setPreloadedValue($uid, $cat, $k, $config['v']); + self::getApp()->setPConfigValue($uid, $cat, $k, $config['v']); } else { - $this->deletePreloadedValue($uid, $cat, $k); + self::getApp()->deletePConfigValue($uid, $cat, $k); } } - $return = $this->getPreloadedValue($uid, $cat, $k, $default_value); + $return = self::getApp()->getPConfigValue($uid, $cat, $k, $default_value); return $return; } @@ -64,11 +64,11 @@ class PreloadPConfigAdapter extends BaseObject implements IPConfigAdapter // The exception are array values. $compare_value = !is_array($value) ? (string)$value : $value; - if ($this->getPreloadedValue($uid, $cat, $k) === $compare_value) { + if (self::getApp()->getPConfigValue($uid, $cat, $k) === $compare_value) { return true; } - $this->setPreloadedValue($uid, $cat, $k, $value); + self::getApp()->setPConfigValue($uid, $cat, $k, $value); // manage array value $dbvalue = is_array($value) ? serialize($value) : $value; @@ -83,68 +83,10 @@ class PreloadPConfigAdapter extends BaseObject implements IPConfigAdapter public function delete($uid, $cat, $k) { - $this->deletePreloadedValue($uid, $cat, $k); + self::getApp()->deletePConfigValue($uid, $cat, $k); $result = dba::delete('pconfig', ['uid' => $uid, 'cat' => $cat, 'k' => $k]); return $result; } - - - /** - * Retrieves a preloaded value from the App user config cache - * - * @param int $uid - * @param string $cat - * @param string $k - * @param mixed $default - */ - private function getPreloadedValue($uid, $cat, $k, $default = null) - { - $a = self::getApp(); - - $return = $default; - - if (isset($a->config[$uid][$cat][$k])) { - $return = $a->config[$uid][$cat][$k]; - } - - return $return; - } - - /** - * Sets a preloaded value in the App user config cache - * - * Accepts raw output from the pconfig table - * - * @param int $uid - * @param string $cat - * @param string $k - * @param mixed $v - */ - private function setPreloadedValue($uid, $cat, $k, $v) - { - $a = self::getApp(); - - // Only arrays are serialized in database, so we have to unserialize sparingly - $value = is_string($v) && preg_match("|^a:[0-9]+:{.*}$|s", $v) ? unserialize($v) : $v; - - $a->config[$uid][$cat][$k] = $value; - } - - /** - * Deletes a preloaded value from the App user config cache - * - * @param int $uid - * @param string $cat - * @param string $k - */ - private function deletePreloadedValue($uid, $cat, $k) - { - $a = self::getApp(); - - if (isset($a->config[$uid][$cat][$k])) { - unset($a->config[$uid][$cat][$k]); - } - } } From ef0701a97a748704142fdf1d34149586f02d468e Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Tue, 6 Mar 2018 21:34:00 -0500 Subject: [PATCH 047/227] Fix wrong session expire set for custom duration --- src/Core/Cache.php | 55 ++++--------------------- src/Core/Cache/DatabaseCacheDriver.php | 2 +- src/Core/Cache/MemcacheCacheDriver.php | 2 +- src/Core/Cache/MemcachedCacheDriver.php | 2 +- 4 files changed, 11 insertions(+), 50 deletions(-) diff --git a/src/Core/Cache.php b/src/Core/Cache.php index a1b1ecb9c..3f2edd2e2 100644 --- a/src/Core/Cache.php +++ b/src/Core/Cache.php @@ -12,14 +12,14 @@ use Friendica\Core\Config; */ class Cache extends \Friendica\BaseObject { - const MONTH = 0; - const WEEK = 1; - const DAY = 2; - const HOUR = 3; - const HALF_HOUR = 4; - const QUARTER_HOUR = 5; - const FIVE_MINUTES = 6; - const MINUTE = 7; + const MONTH = 2592000; + const WEEK = 604800; + const DAY = 86400; + const HOUR = 3600; + const HALF_HOUR = 1800; + const QUARTER_HOUR = 900; + const FIVE_MINUTES = 300; + const MINUTE = 60; /** * @var Cache\ICacheDriver @@ -45,45 +45,6 @@ class Cache extends \Friendica\BaseObject } } - /** - * @brief Return the duration for a given cache level - * - * @param integer $level Cache level - * - * @return integer The cache duration in seconds - */ - public static function duration($level) - { - switch ($level) { - case self::MONTH: - $seconds = 2592000; - break; - case self::WEEK: - $seconds = 604800; - break; - case self::DAY: - $seconds = 86400; - break; - case self::HOUR: - $seconds = 3600; - break; - case self::HALF_HOUR: - $seconds = 1800; - break; - case self::QUARTER_HOUR: - $seconds = 900; - break; - case self::FIVE_MINUTES: - $seconds = 300; - break; - case self::MINUTE: - default: - $seconds = 60; - break; - } - return $seconds; - } - /** * Returns the current cache driver * diff --git a/src/Core/Cache/DatabaseCacheDriver.php b/src/Core/Cache/DatabaseCacheDriver.php index 9703208d7..17ae31007 100644 --- a/src/Core/Cache/DatabaseCacheDriver.php +++ b/src/Core/Cache/DatabaseCacheDriver.php @@ -37,7 +37,7 @@ class DatabaseCacheDriver implements ICacheDriver { $fields = [ 'v' => serialize($value), - 'expires' => DateTimeFormat::utc('now + ' . Cache::duration($duration) . ' seconds'), + 'expires' => DateTimeFormat::utc('now + ' . $duration . ' seconds'), 'updated' => DateTimeFormat::utcNow() ]; diff --git a/src/Core/Cache/MemcacheCacheDriver.php b/src/Core/Cache/MemcacheCacheDriver.php index 03fc075f4..563447ef1 100644 --- a/src/Core/Cache/MemcacheCacheDriver.php +++ b/src/Core/Cache/MemcacheCacheDriver.php @@ -61,7 +61,7 @@ class MemcacheCacheDriver extends BaseObject implements ICacheDriver self::getApp()->get_hostname() . ":" . $key, serialize($value), MEMCACHE_COMPRESSED, - Cache::duration($duration) + time() + $duration ); } diff --git a/src/Core/Cache/MemcachedCacheDriver.php b/src/Core/Cache/MemcachedCacheDriver.php index 8f1752cbe..1a8bdc950 100644 --- a/src/Core/Cache/MemcachedCacheDriver.php +++ b/src/Core/Cache/MemcachedCacheDriver.php @@ -52,7 +52,7 @@ class MemcachedCacheDriver extends BaseObject implements ICacheDriver return $this->memcached->set( self::getApp()->get_hostname() . ":" . $key, $value, - Cache::duration($duration) + time() + $duration ); } From 274ce95d13feb0ff7b150c9a0c3d1db49eb507bb Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Wed, 7 Mar 2018 08:07:36 -0500 Subject: [PATCH 048/227] Move Composer assets to view/ --- .gitignore | 3 +- composer.json | 4 +-- view/templates/admin/federation.tpl | 2 +- view/templates/event_head.tpl | 8 ++--- view/templates/head.tpl | 20 ++++++------ view/theme/frio/templates/event_head.tpl | 8 ++--- view/theme/frio/templates/head.tpl | 32 +++++++++---------- view/theme/frost-mobile/templates/end.tpl | 8 ++--- .../frost-mobile/templates/event_end.tpl | 4 +-- .../frost-mobile/templates/event_head.tpl | 4 +-- view/theme/frost-mobile/templates/head.tpl | 6 ++-- view/theme/frost/templates/end.tpl | 10 +++--- view/theme/frost/templates/event_end.tpl | 4 +-- view/theme/frost/templates/event_head.tpl | 4 +-- view/theme/frost/templates/head.tpl | 8 ++--- .../quattro/templates/events_reminder.tpl | 8 ++--- view/theme/vier/templates/event_head.tpl | 8 ++--- 17 files changed, 71 insertions(+), 70 deletions(-) diff --git a/.gitignore b/.gitignore index 859220653..8d86b9587 100644 --- a/.gitignore +++ b/.gitignore @@ -53,7 +53,8 @@ nbproject venv/ #ignore Composer dependencies -vendor +/vendor +/view/asset #ignore config files from JetBrains /.idea \ No newline at end of file diff --git a/composer.json b/composer.json index 7bdba4cf0..e064a0a6a 100644 --- a/composer.json +++ b/composer.json @@ -54,8 +54,8 @@ "preferred-install": "dist", "fxp-asset": { "installer-paths": { - "npm-asset-library": "vendor/asset", - "bower-asset-library": "vendor/asset" + "npm-asset-library": "view/asset", + "bower-asset-library": "view/asset" } } }, diff --git a/view/templates/admin/federation.tpl b/view/templates/admin/federation.tpl index bd2af3d78..5f89d4f7d 100644 --- a/view/templates/admin/federation.tpl +++ b/view/templates/admin/federation.tpl @@ -1,4 +1,4 @@ - +

{{$title}} - {{$page}}

diff --git a/view/templates/event_head.tpl b/view/templates/event_head.tpl index 36be15290..baa031f04 100644 --- a/view/templates/event_head.tpl +++ b/view/templates/event_head.tpl @@ -1,8 +1,8 @@ - - - - + + + + - + - - - - + + + + - + - + + - - - - - - - - - - - + + + + + + + + + + + + diff --git a/view/theme/frost-mobile/templates/end.tpl b/view/theme/frost-mobile/templates/end.tpl index 4af3b41c0..a37ae7bba 100644 --- a/view/theme/frost-mobile/templates/end.tpl +++ b/view/theme/frost-mobile/templates/end.tpl @@ -1,16 +1,16 @@ - + - - + + - + diff --git a/view/theme/frost-mobile/templates/event_end.tpl b/view/theme/frost-mobile/templates/event_end.tpl index 1df60bdfd..8641b7c1b 100644 --- a/view/theme/frost-mobile/templates/event_end.tpl +++ b/view/theme/frost-mobile/templates/event_end.tpl @@ -1,3 +1,3 @@ - - + + diff --git a/view/theme/frost-mobile/templates/event_head.tpl b/view/theme/frost-mobile/templates/event_head.tpl index 6c332b435..e4abc175a 100644 --- a/view/theme/frost-mobile/templates/event_head.tpl +++ b/view/theme/frost-mobile/templates/event_head.tpl @@ -1,6 +1,6 @@ - - + + + + + diff --git a/view/theme/frost/templates/end.tpl b/view/theme/frost/templates/end.tpl index b49fc3cd4..b8a598de5 100644 --- a/view/theme/frost/templates/end.tpl +++ b/view/theme/frost/templates/end.tpl @@ -3,15 +3,15 @@ - + - - - + + + - + diff --git a/view/theme/frost/templates/event_end.tpl b/view/theme/frost/templates/event_end.tpl index 1df60bdfd..8641b7c1b 100644 --- a/view/theme/frost/templates/event_end.tpl +++ b/view/theme/frost/templates/event_end.tpl @@ -1,3 +1,3 @@ - - + + diff --git a/view/theme/frost/templates/event_head.tpl b/view/theme/frost/templates/event_head.tpl index 6c332b435..e4abc175a 100644 --- a/view/theme/frost/templates/event_head.tpl +++ b/view/theme/frost/templates/event_head.tpl @@ -1,6 +1,6 @@ - - + + + - - - + + + + - + + + + + - + - - - - + + + + - - + + - - - - - - - - - - - + + + + + + + + + + + {{* own js files *}} - - - - + + + + + - + - - - - + + + + - - + + - - - - - - - - - - - + + + + + + + + + + + {{* own js files *}} - - - - + + + + - 2. - - 3. - - -Options - -ratioDim obj - The pixel dimensions to apply as a restrictive ratio, with properties x & y. -minWidth int - The minimum width for the select area in pixels. -minHeight int - The mimimum height for the select area in pixels. -maxWidth int - The maximum width for the select areas in pixels (if both minWidth & maxWidth set to same the width of the cropper will be fixed) -maxHeight int - The maximum height for the select areas in pixels (if both minHeight & maxHeight set to same the height of the cropper will be fixed) -displayOnInit int - Whether to display the select area on initialisation, only used when providing minimum width & height or ratio. -onEndCrop func - The callback function to provide the crop details to on end of a crop. -captureKeys boolean - Whether to capture the keys for moving the select area, as these can cause some problems at the moment. -onloadCoords obj - A coordinates object with properties x1, y1, x2 & y2; for the coordinates of the select area to display onload - -The callback function - -The callback function is a function that allows you to capture the crop co-ordinates when the user finished a crop movement, it is passed two arguments: - - * coords, obj, coordinates object with properties x1, y1, x2 & y2; for the coordinates of the select area. - * dimensions, obj, dimensions object with properities width & height; for the dimensions of the select area. - -An example function which outputs the crop values to form fields: -Display code as plain text -JavaScript: - - 1. - function onEndCrop( coords, dimensions ) { - 2. - $PR( 'x1' ).value = coords.x1; - 3. - $PR( 'y1' ).value = coords.y1; - 4. - $PR( 'x2' ).value = coords.x2; - 5. - $PR( 'y2' ).value = coords.y2; - 6. - $PR( 'width' ).value = dimensions.width; - 7. - $PR( 'height' ).value = dimensions.height; - 8. - } - -Basic interface - -This basic example will attach the cropper UI to the test image and return crop results to the provided callback function. -Display code as plain text -HTML: - - 1. - Test image - 2. - - 3. - - -Minimum dimensions - -You can apply minimum dimensions to a single axis or both, this example applies minimum dimensions to both axis. -Display code as plain text -HTML: - - 1. - Test image - 2. - - 3. - - -Select area ratio - -You can apply a ratio to the selection area, this example applies a 4:3 ratio to the select area. -Display code as plain text -HTML: - - 1. - Test image - 2. - - 3. - - -With crop preview - -You can display a dynamically prouced preview of the resulting crop by using the ImgWithPreview subclass, a preview can only be displayed when we have a fixed size (set via minWidth & minHeight options). Note that the displayOnInit option is not required as this is the default behaviour when displaying a crop preview. -Display code as plain text -HTML: - - 1. - Test image - 2. -
- 3. - - 4. - - -Known Issues - - * Safari animated gifs, only one of each will animate, this seems to be a known Safari issue. - * After drawing an area and then clicking to start a new drag in IE 5.5 the rendered height appears as the last height until the user drags, this appears to be the related to another IE error (which has been fixed) where IE does not always redraw the select area properly. - * Lack of CSS opacity support in Opera before version 9 mean we disable those style rules, if Opera 8 support is important you & you want the overlay to work then you can use the Opera rules in the CSS to apply a black PNG with 50% alpha transparency to replicate the effect. - * Styling & borders on image, any CSS styling applied directly to the image itself (floats, borders, padding, margin, etc.) will cause problems with the cropper. The use of a wrapper element to apply these styles to is recommended. - * overflow: auto or overflow: scroll on parent will cause cropper to burst out of parent in IE and Opera when applied (maybe Mac browsers too) I'm not sure why yet. - -If you use CakePHP you will notice that including this in your script will break the CSS layout. This is due to the CSS rule - -form div{ -vertical-align: text-top; -margin-left: 1em; -margin-bottom:2em; -overflow: auto; -} - -A simple workaround is to add another rule directly after this like so: - -form div.no_cake, form div.no_cake div { -margin:0; -overflow:hidden; -} - -and then in your code surround the img tag with a div with the class name of no_cake. - -Cheers - diff --git a/view/js/cropper/cropper.js b/view/js/cropper/cropper.js deleted file mode 100644 index 427a9ba0a..000000000 --- a/view/js/cropper/cropper.js +++ /dev/null @@ -1,568 +0,0 @@ -/** - * Copyright (c) 2006, David Spurr (http://www.defusion.org.uk/) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * * Neither the name of the David Spurr nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * http://www.opensource.org/licenses/bsd-license.php - * - * See scriptaculous.js for full scriptaculous licence - * - * Modified 2013/06/01 Zach P to change $() to $PR() for eliminating conflicts with jQuery - */ - -var CropDraggable=Class.create(); -Object.extend(Object.extend(CropDraggable.prototype,Draggable.prototype),{initialize:function(_1){ -this.options=Object.extend({drawMethod:function(){ -}},arguments[1]||{}); -this.element=$PR(_1); -this.handle=this.element; -this.delta=this.currentDelta(); -this.dragging=false; -this.eventMouseDown=this.initDrag.bindAsEventListener(this); -Event.observe(this.handle,"mousedown",this.eventMouseDown); -Draggables.register(this); -},draw:function(_2){ -var _3=Position.cumulativeOffset(this.element); -var d=this.currentDelta(); -_3[0]-=d[0]; -_3[1]-=d[1]; -var p=[0,1].map(function(i){ -return (_2[i]-_3[i]-this.offset[i]); -}.bind(this)); -this.options.drawMethod(p); -}}); -var Cropper={}; -Cropper.Img=Class.create(); -Cropper.Img.prototype={initialize:function(_7,_8){ -this.options=Object.extend({ratioDim:{x:0,y:0},minWidth:0,minHeight:0,displayOnInit:false,onEndCrop:Prototype.emptyFunction,captureKeys:true,onloadCoords:null,maxWidth:0,maxHeight:0},_8||{}); -this.img=$PR(_7); -this.clickCoords={x:0,y:0}; -this.dragging=false; -this.resizing=false; -this.isWebKit=/Konqueror|Safari|KHTML/.test(navigator.userAgent); -this.isIE=/MSIE/.test(navigator.userAgent); -this.isOpera8=/Opera\s[1-8]/.test(navigator.userAgent); -this.ratioX=0; -this.ratioY=0; -this.attached=false; -this.fixedWidth=(this.options.maxWidth>0&&(this.options.minWidth>=this.options.maxWidth)); -this.fixedHeight=(this.options.maxHeight>0&&(this.options.minHeight>=this.options.maxHeight)); -if(typeof this.img=="undefined"){ -return; -} -$A(document.getElementsByTagName("script")).each(function(s){ -if(s.src.match(/cropper\.js/)){ -var _a=s.src.replace(/cropper\.js(.*)?/,""); -var _b=document.createElement("link"); -_b.rel="stylesheet"; -_b.type="text/css"; -_b.href=_a+"cropper.css"; -_b.media="screen"; -document.getElementsByTagName("head")[0].appendChild(_b); -} -}); -if(this.options.ratioDim.x>0&&this.options.ratioDim.y>0){ -var _c=this.getGCD(this.options.ratioDim.x,this.options.ratioDim.y); -this.ratioX=this.options.ratioDim.x/_c; -this.ratioY=this.options.ratioDim.y/_c; -} -this.subInitialize(); -if(this.img.complete||this.isWebKit){ -this.onLoad(); -}else{ -Event.observe(this.img,"load",this.onLoad.bindAsEventListener(this)); -} -},getGCD:function(a,b){ -if(b==0){ -return a; -} -return this.getGCD(b,a%b); -},onLoad:function(){ -var _f="imgCrop_"; -var _10=this.img.parentNode; -var _11=""; -if(this.isOpera8){ -_11=" opera8"; -} -this.imgWrap=Builder.node("div",{"class":_f+"wrap"+_11}); -this.north=Builder.node("div",{"class":_f+"overlay "+_f+"north"},[Builder.node("span")]); -this.east=Builder.node("div",{"class":_f+"overlay "+_f+"east"},[Builder.node("span")]); -this.south=Builder.node("div",{"class":_f+"overlay "+_f+"south"},[Builder.node("span")]); -this.west=Builder.node("div",{"class":_f+"overlay "+_f+"west"},[Builder.node("span")]); -var _12=[this.north,this.east,this.south,this.west]; -this.dragArea=Builder.node("div",{"class":_f+"dragArea"},_12); -this.handleN=Builder.node("div",{"class":_f+"handle "+_f+"handleN"}); -this.handleNE=Builder.node("div",{"class":_f+"handle "+_f+"handleNE"}); -this.handleE=Builder.node("div",{"class":_f+"handle "+_f+"handleE"}); -this.handleSE=Builder.node("div",{"class":_f+"handle "+_f+"handleSE"}); -this.handleS=Builder.node("div",{"class":_f+"handle "+_f+"handleS"}); -this.handleSW=Builder.node("div",{"class":_f+"handle "+_f+"handleSW"}); -this.handleW=Builder.node("div",{"class":_f+"handle "+_f+"handleW"}); -this.handleNW=Builder.node("div",{"class":_f+"handle "+_f+"handleNW"}); -this.selArea=Builder.node("div",{"class":_f+"selArea"},[Builder.node("div",{"class":_f+"marqueeHoriz "+_f+"marqueeNorth"},[Builder.node("span")]),Builder.node("div",{"class":_f+"marqueeVert "+_f+"marqueeEast"},[Builder.node("span")]),Builder.node("div",{"class":_f+"marqueeHoriz "+_f+"marqueeSouth"},[Builder.node("span")]),Builder.node("div",{"class":_f+"marqueeVert "+_f+"marqueeWest"},[Builder.node("span")]),this.handleN,this.handleNE,this.handleE,this.handleSE,this.handleS,this.handleSW,this.handleW,this.handleNW,Builder.node("div",{"class":_f+"clickArea"})]); -this.imgWrap.appendChild(this.img); -this.imgWrap.appendChild(this.dragArea); -this.dragArea.appendChild(this.selArea); -this.dragArea.appendChild(Builder.node("div",{"class":_f+"clickArea"})); -_10.appendChild(this.imgWrap); -this.startDragBind=this.startDrag.bindAsEventListener(this); -Event.observe(this.dragArea,"mousedown",this.startDragBind); -this.onDragBind=this.onDrag.bindAsEventListener(this); -Event.observe(document,"mousemove",this.onDragBind); -this.endCropBind=this.endCrop.bindAsEventListener(this); -Event.observe(document,"mouseup",this.endCropBind); -this.resizeBind=this.startResize.bindAsEventListener(this); -this.handles=[this.handleN,this.handleNE,this.handleE,this.handleSE,this.handleS,this.handleSW,this.handleW,this.handleNW]; -this.registerHandles(true); -if(this.options.captureKeys){ -this.keysBind=this.handleKeys.bindAsEventListener(this); -Event.observe(document,"keypress",this.keysBind); -} -new CropDraggable(this.selArea,{drawMethod:this.moveArea.bindAsEventListener(this)}); -this.setParams(); -},registerHandles:function(_13){ -for(var i=0;i0&&this.options.ratioDim.y>0){ -_1a.x1=Math.ceil((this.imgW-this.options.ratioDim.x)/2); -_1a.y1=Math.ceil((this.imgH-this.options.ratioDim.y)/2); -_1a.x2=_1a.x1+this.options.ratioDim.x; -_1a.y2=_1a.y1+this.options.ratioDim.y; -_1b=true; -} -} -this.setAreaCoords(_1a,false,false,1); -if(this.options.displayOnInit&&_1b){ -this.selArea.show(); -this.drawArea(); -this.endCrop(); -} -this.attached=true; -},remove:function(){ -if(this.attached){ -this.attached=false; -this.imgWrap.parentNode.insertBefore(this.img,this.imgWrap); -this.imgWrap.parentNode.removeChild(this.imgWrap); -Event.stopObserving(this.dragArea,"mousedown",this.startDragBind); -Event.stopObserving(document,"mousemove",this.onDragBind); -Event.stopObserving(document,"mouseup",this.endCropBind); -this.registerHandles(false); -if(this.options.captureKeys){ -Event.stopObserving(document,"keypress",this.keysBind); -} -} -},reset:function(){ -if(!this.attached){ -this.onLoad(); -}else{ -this.setParams(); -} -this.endCrop(); -},handleKeys:function(e){ -var dir={x:0,y:0}; -if(!this.dragging){ -switch(e.keyCode){ -case (37): -dir.x=-1; -break; -case (38): -dir.y=-1; -break; -case (39): -dir.x=1; -break; -case (40): -dir.y=1; -break; -} -if(dir.x!=0||dir.y!=0){ -if(e.shiftKey){ -dir.x*=10; -dir.y*=10; -} -this.moveArea([this.areaCoords.x1+dir.x,this.areaCoords.y1+dir.y]); -Event.stop(e); -} -} -},calcW:function(){ -return (this.areaCoords.x2-this.areaCoords.x1); -},calcH:function(){ -return (this.areaCoords.y2-this.areaCoords.y1); -},moveArea:function(_1e){ -this.setAreaCoords({x1:_1e[0],y1:_1e[1],x2:_1e[0]+this.calcW(),y2:_1e[1]+this.calcH()},true,false); -this.drawArea(); -},cloneCoords:function(_1f){ -return {x1:_1f.x1,y1:_1f.y1,x2:_1f.x2,y2:_1f.y2}; -},setAreaCoords:function(_20,_21,_22,_23,_24){ -if(_21){ -var _25=_20.x2-_20.x1; -var _26=_20.y2-_20.y1; -if(_20.x1<0){ -_20.x1=0; -_20.x2=_25; -} -if(_20.y1<0){ -_20.y1=0; -_20.y2=_26; -} -if(_20.x2>this.imgW){ -_20.x2=this.imgW; -_20.x1=this.imgW-_25; -} -if(_20.y2>this.imgH){ -_20.y2=this.imgH; -_20.y1=this.imgH-_26; -} -}else{ -if(_20.x1<0){ -_20.x1=0; -} -if(_20.y1<0){ -_20.y1=0; -} -if(_20.x2>this.imgW){ -_20.x2=this.imgW; -} -if(_20.y2>this.imgH){ -_20.y2=this.imgH; -} -if(_23!=null){ -if(this.ratioX>0){ -this.applyRatio(_20,{x:this.ratioX,y:this.ratioY},_23,_24); -}else{ -if(_22){ -this.applyRatio(_20,{x:1,y:1},_23,_24); -} -} -var _27=[this.options.minWidth,this.options.minHeight]; -var _28=[this.options.maxWidth,this.options.maxHeight]; -if(_27[0]>0||_27[1]>0||_28[0]>0||_28[1]>0){ -var _29={a1:_20.x1,a2:_20.x2}; -var _2a={a1:_20.y1,a2:_20.y2}; -var _2b={min:0,max:this.imgW}; -var _2c={min:0,max:this.imgH}; -if((_27[0]!=0||_27[1]!=0)&&_22){ -if(_27[0]>0){ -_27[1]=_27[0]; -}else{ -if(_27[1]>0){ -_27[0]=_27[1]; -} -} -} -if((_28[0]!=0||_28[0]!=0)&&_22){ -if(_28[0]>0&&_28[0]<=_28[1]){ -_28[1]=_28[0]; -}else{ -if(_28[1]>0&&_28[1]<=_28[0]){ -_28[0]=_28[1]; -} -} -} -if(_27[0]>0){ -this.applyDimRestriction(_29,_27[0],_23.x,_2b,"min"); -} -if(_27[1]>1){ -this.applyDimRestriction(_2a,_27[1],_23.y,_2c,"min"); -} -if(_28[0]>0){ -this.applyDimRestriction(_29,_28[0],_23.x,_2b,"max"); -} -if(_28[1]>1){ -this.applyDimRestriction(_2a,_28[1],_23.y,_2c,"max"); -} -_20={x1:_29.a1,y1:_2a.a1,x2:_29.a2,y2:_2a.a2}; -} -} -} -this.areaCoords=_20; -},applyDimRestriction:function(_2d,val,_2f,_30,_31){ -var _32; -if(_31=="min"){ -_32=((_2d.a2-_2d.a1)val); -} -if(_32){ -if(_2f==1){ -_2d.a2=_2d.a1+val; -}else{ -_2d.a1=_2d.a2-val; -} -if(_2d.a1<_30.min){ -_2d.a1=_30.min; -_2d.a2=val; -}else{ -if(_2d.a2>_30.max){ -_2d.a1=_30.max-val; -_2d.a2=_30.max; -} -} -} -},applyRatio:function(_33,_34,_35,_36){ -var _37; -if(_36=="N"||_36=="S"){ -_37=this.applyRatioToAxis({a1:_33.y1,b1:_33.x1,a2:_33.y2,b2:_33.x2},{a:_34.y,b:_34.x},{a:_35.y,b:_35.x},{min:0,max:this.imgW}); -_33.x1=_37.b1; -_33.y1=_37.a1; -_33.x2=_37.b2; -_33.y2=_37.a2; -}else{ -_37=this.applyRatioToAxis({a1:_33.x1,b1:_33.y1,a2:_33.x2,b2:_33.y2},{a:_34.x,b:_34.y},{a:_35.x,b:_35.y},{min:0,max:this.imgH}); -_33.x1=_37.a1; -_33.y1=_37.b1; -_33.x2=_37.a2; -_33.y2=_37.b2; -} -},applyRatioToAxis:function(_38,_39,_3a,_3b){ -var _3c=Object.extend(_38,{}); -var _3d=_3c.a2-_3c.a1; -var _3e=Math.floor(_3d*_39.b/_39.a); -var _3f; -var _40; -var _41=null; -if(_3a.b==1){ -_3f=_3c.b1+_3e; -if(_3f>_3b.max){ -_3f=_3b.max; -_41=_3f-_3c.b1; -} -_3c.b2=_3f; -}else{ -_3f=_3c.b2-_3e; -if(_3f<_3b.min){ -_3f=_3b.min; -_41=_3f+_3c.b2; -} -_3c.b1=_3f; -} -if(_41!=null){ -_40=Math.floor(_41*_39.a/_39.b); -if(_3a.a==1){ -_3c.a2=_3c.a1+_40; -}else{ -_3c.a1=_3c.a1=_3c.a2-_40; -} -} -return _3c; -},drawArea:function(){ -var _42=this.calcW(); -var _43=this.calcH(); -var px="px"; -var _45=[this.areaCoords.x1+px,this.areaCoords.y1+px,_42+px,_43+px,this.areaCoords.x2+px,this.areaCoords.y2+px,(this.img.width-this.areaCoords.x2)+px,(this.img.height-this.areaCoords.y2)+px]; -var _46=this.selArea.style; -_46.left=_45[0]; -_46.top=_45[1]; -_46.width=_45[2]; -_46.height=_45[3]; -var _47=Math.ceil((_42-6)/2)+px; -var _48=Math.ceil((_43-6)/2)+px; -this.handleN.style.left=_47; -this.handleE.style.top=_48; -this.handleS.style.left=_47; -this.handleW.style.top=_48; -this.north.style.height=_45[1]; -var _49=this.east.style; -_49.top=_45[1]; -_49.height=_45[3]; -_49.left=_45[4]; -_49.width=_45[6]; -var _4a=this.south.style; -_4a.top=_45[5]; -_4a.height=_45[7]; -var _4b=this.west.style; -_4b.top=_45[1]; -_4b.height=_45[3]; -_4b.width=_45[0]; -this.subDrawArea(); -this.forceReRender(); -},forceReRender:function(){ -if(this.isIE||this.isWebKit){ -var n=document.createTextNode(" "); -var d,el,fixEL,i; -if(this.isIE){ -fixEl=this.selArea; -}else{ -if(this.isWebKit){ -fixEl=document.getElementsByClassName("imgCrop_marqueeSouth",this.imgWrap)[0]; -d=Builder.node("div",""); -d.style.visibility="hidden"; -var _4e=["SE","S","SW"]; -for(i=0;i<_4e.length;i++){ -el=document.getElementsByClassName("imgCrop_handle"+_4e[i],this.selArea)[0]; -if(el.childNodes.length){ -el.removeChild(el.childNodes[0]); -} -el.appendChild(d); -} -} -} -fixEl.appendChild(n); -fixEl.removeChild(n); -} -},startResize:function(e){ -this.startCoords=this.cloneCoords(this.areaCoords); -this.resizing=true; -this.resizeHandle=Event.element(e).classNames().toString().replace(/([^N|NE|E|SE|S|SW|W|NW])+/,""); -Event.stop(e); -},startDrag:function(e){ -this.selArea.show(); -this.clickCoords=this.getCurPos(e); -this.setAreaCoords({x1:this.clickCoords.x,y1:this.clickCoords.y,x2:this.clickCoords.x,y2:this.clickCoords.y},false,false,null); -this.dragging=true; -this.onDrag(e); -Event.stop(e); -},getCurPos:function(e){ -var el=this.imgWrap,wrapOffsets=Position.cumulativeOffset(el); -while(el.nodeName!="BODY"){ -wrapOffsets[1]-=el.scrollTop||0; -wrapOffsets[0]-=el.scrollLeft||0; -el=el.parentNode; -} -return curPos={x:Event.pointerX(e)-wrapOffsets[0],y:Event.pointerY(e)-wrapOffsets[1]}; -},onDrag:function(e){ -if(this.dragging||this.resizing){ -var _54=null; -var _55=this.getCurPos(e); -var _56=this.cloneCoords(this.areaCoords); -var _57={x:1,y:1}; -if(this.dragging){ -if(_55.x_59){ -_5c.reverse(); -} -_5a[_5b+"1"]=_5c[0]; -_5a[_5b+"2"]=_5c[1]; -},endCrop:function(){ -this.dragging=false; -this.resizing=false; -this.options.onEndCrop(this.areaCoords,{width:this.calcW(),height:this.calcH()}); -},subInitialize:function(){ -},subDrawArea:function(){ -}}; -Cropper.ImgWithPreview=Class.create(); -Object.extend(Object.extend(Cropper.ImgWithPreview.prototype,Cropper.Img.prototype),{subInitialize:function(){ -this.hasPreviewImg=false; -if(typeof (this.options.previewWrap)!="undefined"&&this.options.minWidth>0&&this.options.minHeight>0){ -this.previewWrap=$PR(this.options.previewWrap); -this.previewImg=this.img.cloneNode(false); -this.previewImg.id="imgCrop_"+this.previewImg.id; -this.options.displayOnInit=true; -this.hasPreviewImg=true; -this.previewWrap.addClassName("imgCrop_previewWrap"); -this.previewWrap.setStyle({width:this.options.minWidth+"px",height:this.options.minHeight+"px"}); -this.previewWrap.appendChild(this.previewImg); -} -},subDrawArea:function(){ -if(this.hasPreviewImg){ -var _5d=this.calcW(); -var _5e=this.calcH(); -var _5f={x:this.imgW/_5d,y:this.imgH/_5e}; -var _60={x:_5d/this.options.minWidth,y:_5e/this.options.minHeight}; -var _61={w:Math.ceil(this.options.minWidth*_5f.x)+"px",h:Math.ceil(this.options.minHeight*_5f.y)+"px",x:"-"+Math.ceil(this.areaCoords.x1/_60.x)+"px",y:"-"+Math.ceil(this.areaCoords.y1/_60.y)+"px"}; -var _62=this.previewImg.style; -_62.width=_61.w; -_62.height=_61.h; -_62.left=_61.x; -_62.top=_61.y; -} -}}); - diff --git a/view/js/cropper/cropper.uncompressed.js b/view/js/cropper/cropper.uncompressed.js deleted file mode 100644 index 0ea0b803d..000000000 --- a/view/js/cropper/cropper.uncompressed.js +++ /dev/null @@ -1,1333 +0,0 @@ -/** - * Image Cropper (v. 1.2.0 - 2006-10-30 ) - * Copyright (c) 2006 David Spurr (http://www.defusion.org.uk/) - * - * The image cropper provides a way to draw a crop area on an image and capture - * the coordinates of the drawn crop area. - * - * Features include: - * - Based on Prototype and Scriptaculous - * - Image editing package styling, the crop area functions and looks - * like those found in popular image editing software - * - Dynamic inclusion of required styles - * - Drag to draw areas - * - Shift drag to draw/resize areas as squares - * - Selection area can be moved - * - Seleciton area can be resized using resize handles - * - Allows dimension ratio limited crop areas - * - Allows minimum dimension crop areas - * - Allows maximum dimesion crop areas - * - If both min & max dimension options set to the same value for a single axis,then the cropper will not - * display the resize handles as appropriate (when min & max dimensions are passed for both axes this - * results in a 'fixed size' crop area) - * - Allows dynamic preview of resultant crop ( if minimum width & height are provided ), this is - * implemented as a subclass so can be excluded when not required - * - Movement of selection area by arrow keys ( shift + arrow key will move selection area by - * 10 pixels ) - * - All operations stay within bounds of image - * - All functionality & display compatible with most popular browsers supported by Prototype: - * PC: IE 7, 6 & 5.5, Firefox 1.5, Opera 8.5 (see known issues) & 9.0b - * MAC: Camino 1.0, Firefox 1.5, Safari 2.0 - * - * Requires: - * - Prototype v. 1.5.0_rc0 > (as packaged with Scriptaculous 1.6.1) - * - Scriptaculous v. 1.6.1 > modules: builder, dragdrop - * - * Known issues: - * - Safari animated gifs, only one of each will animate, this seems to be a known Safari issue - * - * - After drawing an area and then clicking to start a new drag in IE 5.5 the rendered height - * appears as the last height until the user drags, this appears to be the related to the error - * that the forceReRender() method fixes for IE 6, i.e. IE 5.5 is not redrawing the box properly. - * - * - Lack of CSS opacity support in Opera before version 9 mean we disable those style rules, these - * could be fixed by using PNGs with transparency if Opera 8.5 support is high priority for you - * - * - Marching ants keep reloading in IE <6 (not tested in IE7), it is a known issue in IE and I have - * found no viable workarounds that can be included in the release. If this really is an issue for you - * either try this post: http://mir.aculo.us/articles/2005/08/28/internet-explorer-and-ajax-image-caching-woes - * or uncomment the 'FIX MARCHING ANTS IN IE' rules in the CSS file - * - * - Styling & borders on image, any CSS styling applied directly to the image itself (floats, borders, padding, margin, etc.) will - * cause problems with the cropper. The use of a wrapper element to apply these styles to is recommended. - * - * - overflow: auto or overflow: scroll on parent will cause cropper to burst out of parent in IE and Opera (maybe Mac browsers too) - * I'm not sure why yet. - * - * Usage: - * See Cropper.Img & Cropper.ImgWithPreview for usage details - * - * Changelog: - * v1.2.0 - 2006-10-30 - * + Added id to the preview image element using 'imgCrop_[originalImageID]' - * * #00001 - Fixed bug: Doesn't account for scroll offsets - * * #00009 - Fixed bug: Placing the cropper inside differently positioned elements causes incorrect co-ordinates and display - * * #00013 - Fixed bug: I-bar cursor appears on drag plane - * * #00014 - Fixed bug: If ID for image tag is not found in document script throws error - * * Fixed bug with drag start co-ordinates if wrapper element has moved in browser (e.g. dragged to a new position) - * * Fixed bug with drag start co-ordinates if image contained in a wrapper with scrolling - this may be buggy if image - * has other ancestors with scrolling applied (except the body) - * * #00015 - Fixed bug: When cropper removed and then reapplied onEndCrop callback gets called multiple times, solution suggestion from Bill Smith - * * Various speed increases & code cleanup which meant improved performance in Mac - which allowed removal of different overlay methods for - * IE and all other browsers, which led to a fix for: - * * #00010 - Fixed bug: Select area doesn't adhere to image size when image resized using img attributes - * - #00006 - Removed default behaviour of automatically setting a ratio when both min width & height passed, the ratioDimensions must be passed in - * + #00005 - Added ability to set maximum crop dimensions, if both min & max set as the same value then we'll get a fixed cropper size on the axes as appropriate - * and the resize handles will not be displayed as appropriate - * * Switched keydown for keypress for moving select area with cursor keys (makes for nicer action) - doesn't appear to work in Safari - * - * v1.1.3 - 2006-08-21 - * * Fixed wrong cursor on western handle in CSS - * + #00008 & #00003 - Added feature: Allow to set dimensions & position for cropper on load - * * #00002 - Fixed bug: Pressing 'remove cropper' twice removes image in IE - * - * v1.1.2 - 2006-06-09 - * * Fixed bugs with ratios when GCD is low (patch submitted by Andy Skelton) - * - * v1.1.1 - 2006-06-03 - * * Fixed bug with rendering issues fix in IE 5.5 - * * Fixed bug with endCrop callback issues once cropper had been removed & reset in IE - * - * v1.1.0 - 2006-06-02 - * * Fixed bug with IE constantly trying to reload select area background image - * * Applied more robust fix to Safari & IE rendering issues - * + Added method to reset parameters - useful for when dynamically changing img cropper attached to - * + Added method to remove cropper from image - * - * v1.0.0 - 2006-05-18 - * + Initial verison - * - * - * Copyright (c) 2006, David Spurr (http://www.defusion.org.uk/) - * All rights reserved. - * - * - * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * * Neither the name of the David Spurr nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * http://www.opensource.org/licenses/bsd-license.php - * - * See scriptaculous.js for full scriptaculous licence - * - * Modified 2013/06/01 Zach P to change $() to $PR() for eliminating conflicts with jQuery - */ - -/** - * Extend the Draggable class to allow us to pass the rendering - * down to the Cropper object. - */ -var CropDraggable = Class.create(); - -Object.extend( Object.extend( CropDraggable.prototype, Draggable.prototype), { - - initialize: function(element) { - this.options = Object.extend( - { - /** - * The draw method to defer drawing to - */ - drawMethod: function() {} - }, - arguments[1] || {} - ); - - this.element = $PR(element); - - this.handle = this.element; - - this.delta = this.currentDelta(); - this.dragging = false; - - this.eventMouseDown = this.initDrag.bindAsEventListener(this); - Event.observe(this.handle, "mousedown", this.eventMouseDown); - - Draggables.register(this); - }, - - /** - * Defers the drawing of the draggable to the supplied method - */ - draw: function(point) { - var pos = Position.cumulativeOffset(this.element); - var d = this.currentDelta(); - pos[0] -= d[0]; - pos[1] -= d[1]; - - var p = [0,1].map(function(i) { - return (point[i]-pos[i]-this.offset[i]) - }.bind(this)); - - this.options.drawMethod( p ); - } - -}); - - -/** - * The Cropper object, this will attach itself to the provided image by wrapping it with - * the generated xHTML structure required by the cropper. - * - * Usage: - * @param obj Image element to attach to - * @param obj Optional options: - * - ratioDim obj - * The pixel dimensions to apply as a restrictive ratio, with properties x & y - * - * - minWidth int - * The minimum width for the select area in pixels - * - * - minHeight int - * The mimimum height for the select area in pixels - * - * - maxWidth int - * The maximum width for the select areas in pixels (if both minWidth & maxWidth set to same the width of the cropper will be fixed) - * - * - maxHeight int - * The maximum height for the select areas in pixels (if both minHeight & maxHeight set to same the height of the cropper will be fixed) - * - * - displayOnInit int - * Whether to display the select area on initialisation, only used when providing minimum width & height or ratio - * - * - onEndCrop func - * The callback function to provide the crop details to on end of a crop (see below) - * - * - captureKeys boolean - * Whether to capture the keys for moving the select area, as these can cause some problems at the moment - * - * - onloadCoords obj - * A coordinates object with properties x1, y1, x2 & y2; for the coordinates of the select area to display onload - * - *---------------------------------------------- - * - * The callback function provided via the onEndCrop option should accept the following parameters: - * - coords obj - * The coordinates object with properties x1, y1, x2 & y2; for the coordinates of the select area - * - * - dimensions obj - * The dimensions object with properites width & height; for the dimensions of the select area - * - * - * Example: - * function onEndCrop( coords, dimensions ) { - * $PR( 'x1' ).value = coords.x1; - * $PR( 'y1' ).value = coords.y1; - * $PR( 'x2' ).value = coords.x2; - * $PR( 'y2' ).value = coords.y2; - * $PR( 'width' ).value = dimensions.width; - * $PR( 'height' ).value = dimensions.height; - * } - * - */ -var Cropper = {}; -Cropper.Img = Class.create(); -Cropper.Img.prototype = { - - /** - * Initialises the class - * - * @access public - * @param obj Image element to attach to - * @param obj Options - * @return void - */ - initialize: function(element, options) { - this.options = Object.extend( - { - /** - * @var obj - * The pixel dimensions to apply as a restrictive ratio - */ - ratioDim: { x: 0, y: 0 }, - /** - * @var int - * The minimum pixel width, also used as restrictive ratio if min height passed too - */ - minWidth: 0, - /** - * @var int - * The minimum pixel height, also used as restrictive ratio if min width passed too - */ - minHeight: 0, - /** - * @var boolean - * Whether to display the select area on initialisation, only used when providing minimum width & height or ratio - */ - displayOnInit: false, - /** - * @var function - * The call back function to pass the final values to - */ - onEndCrop: Prototype.emptyFunction, - /** - * @var boolean - * Whether to capture key presses or not - */ - captureKeys: true, - /** - * @var obj Coordinate object x1, y1, x2, y2 - * The coordinates to optionally display the select area at onload - */ - onloadCoords: null, - /** - * @var int - * The maximum width for the select areas in pixels (if both minWidth & maxWidth set to same the width of the cropper will be fixed) - */ - maxWidth: 0, - /** - * @var int - * The maximum height for the select areas in pixels (if both minHeight & maxHeight set to same the height of the cropper will be fixed) - */ - maxHeight: 0 - }, - options || {} - ); - /** - * @var obj - * The img node to attach to - */ - this.img = $PR( element ); - /** - * @var obj - * The x & y coordinates of the click point - */ - this.clickCoords = { x: 0, y: 0 }; - /** - * @var boolean - * Whether the user is dragging - */ - this.dragging = false; - /** - * @var boolean - * Whether the user is resizing - */ - this.resizing = false; - /** - * @var boolean - * Whether the user is on a webKit browser - */ - this.isWebKit = /Konqueror|Safari|KHTML/.test( navigator.userAgent ); - /** - * @var boolean - * Whether the user is on IE - */ - this.isIE = /MSIE/.test( navigator.userAgent ); - /** - * @var boolean - * Whether the user is on Opera below version 9 - */ - this.isOpera8 = /Opera\s[1-8]/.test( navigator.userAgent ); - /** - * @var int - * The x ratio - */ - this.ratioX = 0; - /** - * @var int - * The y ratio - */ - this.ratioY = 0; - /** - * @var boolean - * Whether we've attached sucessfully - */ - this.attached = false; - /** - * @var boolean - * Whether we've got a fixed width (if minWidth EQ or GT maxWidth then we have a fixed width - * in the case of minWidth > maxWidth maxWidth wins as the fixed width) - */ - this.fixedWidth = ( this.options.maxWidth > 0 && ( this.options.minWidth >= this.options.maxWidth ) ); - /** - * @var boolean - * Whether we've got a fixed height (if minHeight EQ or GT maxHeight then we have a fixed height - * in the case of minHeight > maxHeight maxHeight wins as the fixed height) - */ - this.fixedHeight = ( this.options.maxHeight > 0 && ( this.options.minHeight >= this.options.maxHeight ) ); - - // quit if the image element doesn't exist - if( typeof this.img == 'undefined' ) return; - - // include the stylesheet - $A( document.getElementsByTagName( 'script' ) ).each( - function(s) { - if( s.src.match( /cropper\.js/ ) ) { - var path = s.src.replace( /cropper\.js(.*)?/, '' ); - // ''; - var style = document.createElement( 'link' ); - style.rel = 'stylesheet'; - style.type = 'text/css'; - style.href = path + 'cropper.css'; - style.media = 'screen'; - document.getElementsByTagName( 'head' )[0].appendChild( style ); - } - } - ); - - // calculate the ratio when neccessary - if( this.options.ratioDim.x > 0 && this.options.ratioDim.y > 0 ) { - var gcd = this.getGCD( this.options.ratioDim.x, this.options.ratioDim.y ); - this.ratioX = this.options.ratioDim.x / gcd; - this.ratioY = this.options.ratioDim.y / gcd; - // dump( 'RATIO : ' + this.ratioX + ':' + this.ratioY + '\n' ); - } - - // initialise sub classes - this.subInitialize(); - - // only load the event observers etc. once the image is loaded - // this is done after the subInitialize() call just in case the sub class does anything - // that will affect the result of the call to onLoad() - if( this.img.complete || this.isWebKit ) this.onLoad(); // for some reason Safari seems to support img.complete but returns 'undefined' on the this.img object - else Event.observe( this.img, 'load', this.onLoad.bindAsEventListener( this) ); - }, - - /** - * The Euclidean algorithm used to find the greatest common divisor - * - * @acces private - * @param int Value 1 - * @param int Value 2 - * @return int - */ - getGCD : function( a , b ) { - if( b == 0 ) return a; - return this.getGCD(b, a % b ); - }, - - /** - * Attaches the cropper to the image once it has loaded - * - * @access private - * @return void - */ - onLoad: function( ) { - /* - * Build the container and all related elements, will result in the following - * - *
- * - *
- * - *
- *
- *
- *
- *
- * - * - *
- *
- *
- *
- * - *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- */ - var cNamePrefix = 'imgCrop_'; - - // get the point to insert the container - var insertPoint = this.img.parentNode; - - // apply an extra class to the wrapper to fix Opera below version 9 - var fixOperaClass = ''; - if( this.isOpera8 ) fixOperaClass = ' opera8'; - this.imgWrap = Builder.node( 'div', { 'class': cNamePrefix + 'wrap' + fixOperaClass } ); - - this.north = Builder.node( 'div', { 'class': cNamePrefix + 'overlay ' + cNamePrefix + 'north' }, [Builder.node( 'span' )] ); - this.east = Builder.node( 'div', { 'class': cNamePrefix + 'overlay ' + cNamePrefix + 'east' } , [Builder.node( 'span' )] ); - this.south = Builder.node( 'div', { 'class': cNamePrefix + 'overlay ' + cNamePrefix + 'south' }, [Builder.node( 'span' )] ); - this.west = Builder.node( 'div', { 'class': cNamePrefix + 'overlay ' + cNamePrefix + 'west' } , [Builder.node( 'span' )] ); - - var overlays = [ this.north, this.east, this.south, this.west ]; - - this.dragArea = Builder.node( 'div', { 'class': cNamePrefix + 'dragArea' }, overlays ); - - this.handleN = Builder.node( 'div', { 'class': cNamePrefix + 'handle ' + cNamePrefix + 'handleN' } ); - this.handleNE = Builder.node( 'div', { 'class': cNamePrefix + 'handle ' + cNamePrefix + 'handleNE' } ); - this.handleE = Builder.node( 'div', { 'class': cNamePrefix + 'handle ' + cNamePrefix + 'handleE' } ); - this.handleSE = Builder.node( 'div', { 'class': cNamePrefix + 'handle ' + cNamePrefix + 'handleSE' } ); - this.handleS = Builder.node( 'div', { 'class': cNamePrefix + 'handle ' + cNamePrefix + 'handleS' } ); - this.handleSW = Builder.node( 'div', { 'class': cNamePrefix + 'handle ' + cNamePrefix + 'handleSW' } ); - this.handleW = Builder.node( 'div', { 'class': cNamePrefix + 'handle ' + cNamePrefix + 'handleW' } ); - this.handleNW = Builder.node( 'div', { 'class': cNamePrefix + 'handle ' + cNamePrefix + 'handleNW' } ); - - this.selArea = Builder.node( 'div', { 'class': cNamePrefix + 'selArea' }, - [ - Builder.node( 'div', { 'class': cNamePrefix + 'marqueeHoriz ' + cNamePrefix + 'marqueeNorth' }, [Builder.node( 'span' )] ), - Builder.node( 'div', { 'class': cNamePrefix + 'marqueeVert ' + cNamePrefix + 'marqueeEast' } , [Builder.node( 'span' )] ), - Builder.node( 'div', { 'class': cNamePrefix + 'marqueeHoriz ' + cNamePrefix + 'marqueeSouth' }, [Builder.node( 'span' )] ), - Builder.node( 'div', { 'class': cNamePrefix + 'marqueeVert ' + cNamePrefix + 'marqueeWest' } , [Builder.node( 'span' )] ), - this.handleN, - this.handleNE, - this.handleE, - this.handleSE, - this.handleS, - this.handleSW, - this.handleW, - this.handleNW, - Builder.node( 'div', { 'class': cNamePrefix + 'clickArea' } ) - ] - ); - - this.imgWrap.appendChild( this.img ); - this.imgWrap.appendChild( this.dragArea ); - this.dragArea.appendChild( this.selArea ); - this.dragArea.appendChild( Builder.node( 'div', { 'class': cNamePrefix + 'clickArea' } ) ); - - insertPoint.appendChild( this.imgWrap ); - - // add event observers - this.startDragBind = this.startDrag.bindAsEventListener( this ); - Event.observe( this.dragArea, 'mousedown', this.startDragBind ); - - this.onDragBind = this.onDrag.bindAsEventListener( this ); - Event.observe( document, 'mousemove', this.onDragBind ); - - this.endCropBind = this.endCrop.bindAsEventListener( this ); - Event.observe( document, 'mouseup', this.endCropBind ); - - this.resizeBind = this.startResize.bindAsEventListener( this ); - this.handles = [ this.handleN, this.handleNE, this.handleE, this.handleSE, this.handleS, this.handleSW, this.handleW, this.handleNW ]; - this.registerHandles( true ); - - if( this.options.captureKeys ) { - this.keysBind = this.handleKeys.bindAsEventListener( this ); - Event.observe( document, 'keypress', this.keysBind ); - } - - // attach the dragable to the select area - new CropDraggable( this.selArea, { drawMethod: this.moveArea.bindAsEventListener( this ) } ); - - this.setParams(); - }, - - /** - * Manages adding or removing the handle event handler and hiding or displaying them as appropriate - * - * @access private - * @param boolean registration true = add, false = remove - * @return void - */ - registerHandles: function( registration ) { - for( var i = 0; i < this.handles.length; i++ ) { - var handle = $PR( this.handles[i] ); - - if( registration ) { - var hideHandle = false; // whether to hide the handle - - // disable handles asappropriate if we've got fixed dimensions - // if both dimensions are fixed we don't need to do much - if( this.fixedWidth && this.fixedHeight ) hideHandle = true; - else if( this.fixedWidth || this.fixedHeight ) { - // if one of the dimensions is fixed then just hide those handles - var isCornerHandle = handle.className.match( /([S|N][E|W])$/ ) - var isWidthHandle = handle.className.match( /(E|W)$/ ); - var isHeightHandle = handle.className.match( /(N|S)$/ ); - if( isCornerHandle ) hideHandle = true; - else if( this.fixedWidth && isWidthHandle ) hideHandle = true; - else if( this.fixedHeight && isHeightHandle ) hideHandle = true; - } - if( hideHandle ) handle.hide(); - else Event.observe( handle, 'mousedown', this.resizeBind ); - } else { - handle.show(); - Event.stopObserving( handle, 'mousedown', this.resizeBind ); - } - } - }, - - /** - * Sets up all the cropper parameters, this can be used to reset the cropper when dynamically - * changing the images - * - * @access private - * @return void - */ - setParams: function() { - /** - * @var int - * The image width - */ - this.imgW = this.img.width; - /** - * @var int - * The image height - */ - this.imgH = this.img.height; - - $PR( this.north ).setStyle( { height: 0 } ); - $PR( this.east ).setStyle( { width: 0, height: 0 } ); - $PR( this.south ).setStyle( { height: 0 } ); - $PR( this.west ).setStyle( { width: 0, height: 0 } ); - - // resize the container to fit the image - $PR( this.imgWrap ).setStyle( { 'width': this.imgW + 'px', 'height': this.imgH + 'px' } ); - - // hide the select area - $PR( this.selArea ).hide(); - - // setup the starting position of the select area - var startCoords = { x1: 0, y1: 0, x2: 0, y2: 0 }; - var validCoordsSet = false; - - // display the select area - if( this.options.onloadCoords != null ) { - // if we've being given some coordinates to - startCoords = this.cloneCoords( this.options.onloadCoords ); - validCoordsSet = true; - } else if( this.options.ratioDim.x > 0 && this.options.ratioDim.y > 0 ) { - // if there is a ratio limit applied and the then set it to initial ratio - startCoords.x1 = Math.ceil( ( this.imgW - this.options.ratioDim.x ) / 2 ); - startCoords.y1 = Math.ceil( ( this.imgH - this.options.ratioDim.y ) / 2 ); - startCoords.x2 = startCoords.x1 + this.options.ratioDim.x; - startCoords.y2 = startCoords.y1 + this.options.ratioDim.y; - validCoordsSet = true; - } - - this.setAreaCoords( startCoords, false, false, 1 ); - - if( this.options.displayOnInit && validCoordsSet ) { - this.selArea.show(); - this.drawArea(); - this.endCrop(); - } - - this.attached = true; - }, - - /** - * Removes the cropper - * - * @access public - * @return void - */ - remove: function() { - if( this.attached ) { - this.attached = false; - - // remove the elements we inserted - this.imgWrap.parentNode.insertBefore( this.img, this.imgWrap ); - this.imgWrap.parentNode.removeChild( this.imgWrap ); - - // remove the event observers - Event.stopObserving( this.dragArea, 'mousedown', this.startDragBind ); - Event.stopObserving( document, 'mousemove', this.onDragBind ); - Event.stopObserving( document, 'mouseup', this.endCropBind ); - this.registerHandles( false ); - if( this.options.captureKeys ) Event.stopObserving( document, 'keypress', this.keysBind ); - } - }, - - /** - * Resets the cropper, can be used either after being removed or any time you wish - * - * @access public - * @return void - */ - reset: function() { - if( !this.attached ) this.onLoad(); - else this.setParams(); - this.endCrop(); - }, - - /** - * Handles the key functionality, currently just using arrow keys to move, if the user - * presses shift then the area will move by 10 pixels - */ - handleKeys: function( e ) { - var dir = { x: 0, y: 0 }; // direction to move it in & the amount in pixels - if( !this.dragging ) { - - // catch the arrow keys - switch( e.keyCode ) { - case( 37 ) : // left - dir.x = -1; - break; - case( 38 ) : // up - dir.y = -1; - break; - case( 39 ) : // right - dir.x = 1; - break - case( 40 ) : // down - dir.y = 1; - break; - } - - if( dir.x != 0 || dir.y != 0 ) { - // if shift is pressed then move by 10 pixels - if( e.shiftKey ) { - dir.x *= 10; - dir.y *= 10; - } - - this.moveArea( [ this.areaCoords.x1 + dir.x, this.areaCoords.y1 + dir.y ] ); - Event.stop( e ); - } - } - }, - - /** - * Calculates the width from the areaCoords - * - * @access private - * @return int - */ - calcW: function() { - return (this.areaCoords.x2 - this.areaCoords.x1) - }, - - /** - * Calculates the height from the areaCoords - * - * @access private - * @return int - */ - calcH: function() { - return (this.areaCoords.y2 - this.areaCoords.y1) - }, - - /** - * Moves the select area to the supplied point (assumes the point is x1 & y1 of the select area) - * - * @access public - * @param array Point for x1 & y1 to move select area to - * @return void - */ - moveArea: function( point ) { - // dump( 'moveArea : ' + point[0] + ',' + point[1] + ',' + ( point[0] + ( this.areaCoords.x2 - this.areaCoords.x1 ) ) + ',' + ( point[1] + ( this.areaCoords.y2 - this.areaCoords.y1 ) ) + '\n' ); - this.setAreaCoords( - { - x1: point[0], - y1: point[1], - x2: point[0] + this.calcW(), - y2: point[1] + this.calcH() - }, - true, - false - ); - this.drawArea(); - }, - - /** - * Clones a co-ordinates object, stops problems with handling them by reference - * - * @access private - * @param obj Coordinate object x1, y1, x2, y2 - * @return obj Coordinate object x1, y1, x2, y2 - */ - cloneCoords: function( coords ) { - return { x1: coords.x1, y1: coords.y1, x2: coords.x2, y2: coords.y2 }; - }, - - /** - * Sets the select coords to those provided but ensures they don't go - * outside the bounding box - * - * @access private - * @param obj Coordinates x1, y1, x2, y2 - * @param boolean Whether this is a move - * @param boolean Whether to apply squaring - * @param obj Direction of mouse along both axis x, y ( -1 = negative, 1 = positive ) only required when moving etc. - * @param string The current resize handle || null - * @return void - */ - setAreaCoords: function( coords, moving, square, direction, resizeHandle ) { - // dump( 'setAreaCoords (in) : ' + coords.x1 + ',' + coords.y1 + ',' + coords.x2 + ',' + coords.y2 ); - if( moving ) { - // if moving - var targW = coords.x2 - coords.x1; - var targH = coords.y2 - coords.y1; - - // ensure we're within the bounds - if( coords.x1 < 0 ) { - coords.x1 = 0; - coords.x2 = targW; - } - if( coords.y1 < 0 ) { - coords.y1 = 0; - coords.y2 = targH; - } - if( coords.x2 > this.imgW ) { - coords.x2 = this.imgW; - coords.x1 = this.imgW - targW; - } - if( coords.y2 > this.imgH ) { - coords.y2 = this.imgH; - coords.y1 = this.imgH - targH; - } - } else { - // ensure we're within the bounds - if( coords.x1 < 0 ) coords.x1 = 0; - if( coords.y1 < 0 ) coords.y1 = 0; - if( coords.x2 > this.imgW ) coords.x2 = this.imgW; - if( coords.y2 > this.imgH ) coords.y2 = this.imgH; - - // This is passed as null in onload - if( direction != null ) { - - // apply the ratio or squaring where appropriate - if( this.ratioX > 0 ) this.applyRatio( coords, { x: this.ratioX, y: this.ratioY }, direction, resizeHandle ); - else if( square ) this.applyRatio( coords, { x: 1, y: 1 }, direction, resizeHandle ); - - var mins = [ this.options.minWidth, this.options.minHeight ]; // minimum dimensions [x,y] - var maxs = [ this.options.maxWidth, this.options.maxHeight ]; // maximum dimensions [x,y] - - // apply dimensions where appropriate - if( mins[0] > 0 || mins[1] > 0 || maxs[0] > 0 || maxs[1] > 0) { - - var coordsTransX = { a1: coords.x1, a2: coords.x2 }; - var coordsTransY = { a1: coords.y1, a2: coords.y2 }; - var boundsX = { min: 0, max: this.imgW }; - var boundsY = { min: 0, max: this.imgH }; - - // handle squaring properly on single axis minimum dimensions - if( (mins[0] != 0 || mins[1] != 0) && square ) { - if( mins[0] > 0 ) mins[1] = mins[0]; - else if( mins[1] > 0 ) mins[0] = mins[1]; - } - - if( (maxs[0] != 0 || maxs[0] != 0) && square ) { - // if we have a max x value & it is less than the max y value then we set the y max to the max x (so we don't go over the minimum maximum of one of the axes - if that makes sense) - if( maxs[0] > 0 && maxs[0] <= maxs[1] ) maxs[1] = maxs[0]; - else if( maxs[1] > 0 && maxs[1] <= maxs[0] ) maxs[0] = maxs[1]; - } - - if( mins[0] > 0 ) this.applyDimRestriction( coordsTransX, mins[0], direction.x, boundsX, 'min' ); - if( mins[1] > 1 ) this.applyDimRestriction( coordsTransY, mins[1], direction.y, boundsY, 'min' ); - - if( maxs[0] > 0 ) this.applyDimRestriction( coordsTransX, maxs[0], direction.x, boundsX, 'max' ); - if( maxs[1] > 1 ) this.applyDimRestriction( coordsTransY, maxs[1], direction.y, boundsY, 'max' ); - - coords = { x1: coordsTransX.a1, y1: coordsTransY.a1, x2: coordsTransX.a2, y2: coordsTransY.a2 }; - } - - } - } - - // dump( 'setAreaCoords (out) : ' + coords.x1 + ',' + coords.y1 + ',' + coords.x2 + ',' + coords.y2 + '\n' ); - this.areaCoords = coords; - }, - - /** - * Applies the supplied dimension restriction to the supplied coordinates along a single axis - * - * @access private - * @param obj Single axis coordinates, a1, a2 (e.g. for the x axis a1 = x1 & a2 = x2) - * @param int The restriction value - * @param int The direction ( -1 = negative, 1 = positive ) - * @param obj The bounds of the image ( for this axis ) - * @param string The dimension restriction type ( 'min' | 'max' ) - * @return void - */ - applyDimRestriction: function( coords, val, direction, bounds, type ) { - var check; - if( type == 'min' ) check = ( ( coords.a2 - coords.a1 ) < val ); - else check = ( ( coords.a2 - coords.a1 ) > val ); - if( check ) { - if( direction == 1 ) coords.a2 = coords.a1 + val; - else coords.a1 = coords.a2 - val; - - // make sure we're still in the bounds (not too pretty for the user, but needed) - if( coords.a1 < bounds.min ) { - coords.a1 = bounds.min; - coords.a2 = val; - } else if( coords.a2 > bounds.max ) { - coords.a1 = bounds.max - val; - coords.a2 = bounds.max; - } - } - }, - - /** - * Applies the supplied ratio to the supplied coordinates - * - * @access private - * @param obj Coordinates, x1, y1, x2, y2 - * @param obj Ratio, x, y - * @param obj Direction of mouse, x & y : -1 == negative 1 == positive - * @param string The current resize handle || null - * @return void - */ - applyRatio : function( coords, ratio, direction, resizeHandle ) { - // dump( 'direction.y : ' + direction.y + '\n'); - var newCoords; - if( resizeHandle == 'N' || resizeHandle == 'S' ) { - // dump( 'north south \n'); - // if moving on either the lone north & south handles apply the ratio on the y axis - newCoords = this.applyRatioToAxis( - { a1: coords.y1, b1: coords.x1, a2: coords.y2, b2: coords.x2 }, - { a: ratio.y, b: ratio.x }, - { a: direction.y, b: direction.x }, - { min: 0, max: this.imgW } - ); - coords.x1 = newCoords.b1; - coords.y1 = newCoords.a1; - coords.x2 = newCoords.b2; - coords.y2 = newCoords.a2; - } else { - // otherwise deal with it as if we're applying the ratio on the x axis - newCoords = this.applyRatioToAxis( - { a1: coords.x1, b1: coords.y1, a2: coords.x2, b2: coords.y2 }, - { a: ratio.x, b: ratio.y }, - { a: direction.x, b: direction.y }, - { min: 0, max: this.imgH } - ); - coords.x1 = newCoords.a1; - coords.y1 = newCoords.b1; - coords.x2 = newCoords.a2; - coords.y2 = newCoords.b2; - } - - }, - - /** - * Applies the provided ratio to the provided coordinates based on provided direction & bounds, - * use to encapsulate functionality to make it easy to apply to either axis. This is probably - * quite hard to visualise so see the x axis example within applyRatio() - * - * Example in parameter details & comments is for requesting applying ratio to x axis. - * - * @access private - * @param obj Coords object (a1, b1, a2, b2) where a = x & b = y in example - * @param obj Ratio object (a, b) where a = x & b = y in example - * @param obj Direction object (a, b) where a = x & b = y in example - * @param obj Bounds (min, max) - * @return obj Coords object (a1, b1, a2, b2) where a = x & b = y in example - */ - applyRatioToAxis: function( coords, ratio, direction, bounds ) { - var newCoords = Object.extend( coords, {} ); - var calcDimA = newCoords.a2 - newCoords.a1; // calculate dimension a (e.g. width) - var targDimB = Math.floor( calcDimA * ratio.b / ratio.a ); // the target dimension b (e.g. height) - var targB; // to hold target b (e.g. y value) - var targDimA; // to hold target dimension a (e.g. width) - var calcDimB = null; // to hold calculated dimension b (e.g. height) - - // dump( 'newCoords[0]: ' + newCoords.a1 + ',' + newCoords.b1 + ','+ newCoords.a2 + ',' + newCoords.b2 + '\n'); - - if( direction.b == 1 ) { // if travelling in a positive direction - // make sure we're not going out of bounds - targB = newCoords.b1 + targDimB; - if( targB > bounds.max ) { - targB = bounds.max; - calcDimB = targB - newCoords.b1; // calcuate dimension b (e.g. height) - } - - newCoords.b2 = targB; - } else { // if travelling in a negative direction - // make sure we're not going out of bounds - targB = newCoords.b2 - targDimB; - if( targB < bounds.min ) { - targB = bounds.min; - calcDimB = targB + newCoords.b2; // calcuate dimension b (e.g. height) - } - newCoords.b1 = targB; - } - - // dump( 'newCoords[1]: ' + newCoords.a1 + ',' + newCoords.b1 + ','+ newCoords.a2 + ',' + newCoords.b2 + '\n'); - - // apply the calculated dimensions - if( calcDimB != null ) { - targDimA = Math.floor( calcDimB * ratio.a / ratio.b ); - - if( direction.a == 1 ) newCoords.a2 = newCoords.a1 + targDimA; - else newCoords.a1 = newCoords.a1 = newCoords.a2 - targDimA; - } - - // dump( 'newCoords[2]: ' + newCoords.a1 + ',' + newCoords.b1 + ','+ newCoords.a2 + ',' + newCoords.b2 + '\n'); - - return newCoords; - }, - - /** - * Draws the select area - * - * @access private - * @return void - */ - drawArea: function( ) { - /* - * NOTE: I'm not using the Element.setStyle() shortcut as they make it - * quite sluggish on Mac based browsers - */ - // dump( 'drawArea : ' + this.areaCoords.x1 + ',' + this.areaCoords.y1 + ',' + this.areaCoords.x2 + ',' + this.areaCoords.y2 + '\n' ); - var areaWidth = this.calcW(); - var areaHeight = this.calcH(); - - /* - * Calculate all the style strings before we use them, allows reuse & produces quicker - * rendering (especially noticable in Mac based browsers) - */ - var px = 'px'; - var params = [ - this.areaCoords.x1 + px, // the left of the selArea - this.areaCoords.y1 + px, // the top of the selArea - areaWidth + px, // width of the selArea - areaHeight + px, // height of the selArea - this.areaCoords.x2 + px, // bottom of the selArea - this.areaCoords.y2 + px, // right of the selArea - (this.img.width - this.areaCoords.x2) + px, // right edge of selArea - (this.img.height - this.areaCoords.y2) + px // bottom edge of selArea - ]; - - // do the select area - var areaStyle = this.selArea.style; - areaStyle.left = params[0]; - areaStyle.top = params[1]; - areaStyle.width = params[2]; - areaStyle.height = params[3]; - - // position the north, east, south & west handles - var horizHandlePos = Math.ceil( (areaWidth - 6) / 2 ) + px; - var vertHandlePos = Math.ceil( (areaHeight - 6) / 2 ) + px; - - this.handleN.style.left = horizHandlePos; - this.handleE.style.top = vertHandlePos; - this.handleS.style.left = horizHandlePos; - this.handleW.style.top = vertHandlePos; - - // draw the four overlays - this.north.style.height = params[1]; - - var eastStyle = this.east.style; - eastStyle.top = params[1]; - eastStyle.height = params[3]; - eastStyle.left = params[4]; - eastStyle.width = params[6]; - - var southStyle = this.south.style; - southStyle.top = params[5]; - southStyle.height = params[7]; - - var westStyle = this.west.style; - westStyle.top = params[1]; - westStyle.height = params[3]; - westStyle.width = params[0]; - - // call the draw method on sub classes - this.subDrawArea(); - - this.forceReRender(); - }, - - /** - * Force the re-rendering of the selArea element which fixes rendering issues in Safari - * & IE PC, especially evident when re-sizing perfectly vertical using any of the south handles - * - * @access private - * @return void - */ - forceReRender: function() { - if( this.isIE || this.isWebKit) { - var n = document.createTextNode(' '); - var d,el,fixEL,i; - - if( this.isIE ) fixEl = this.selArea; - else if( this.isWebKit ) { - fixEl = document.getElementsByClassName( 'imgCrop_marqueeSouth', this.imgWrap )[0]; - /* we have to be a bit more forceful for Safari, otherwise the the marquee & - * the south handles still don't move - */ - d = Builder.node( 'div', '' ); - d.style.visibility = 'hidden'; - - var classList = ['SE','S','SW']; - for( i = 0; i < classList.length; i++ ) { - el = document.getElementsByClassName( 'imgCrop_handle' + classList[i], this.selArea )[0]; - if( el.childNodes.length ) el.removeChild( el.childNodes[0] ); - el.appendChild(d); - } - } - fixEl.appendChild(n); - fixEl.removeChild(n); - } - }, - - /** - * Starts the resize - * - * @access private - * @param obj Event - * @return void - */ - startResize: function( e ) { - this.startCoords = this.cloneCoords( this.areaCoords ); - - this.resizing = true; - this.resizeHandle = Event.element( e ).classNames().toString().replace(/([^N|NE|E|SE|S|SW|W|NW])+/, ''); - // dump( 'this.resizeHandle : ' + this.resizeHandle + '\n' ); - Event.stop( e ); - }, - - /** - * Starts the drag - * - * @access private - * @param obj Event - * @return void - */ - startDrag: function( e ) { - this.selArea.show(); - this.clickCoords = this.getCurPos( e ); - - this.setAreaCoords( { x1: this.clickCoords.x, y1: this.clickCoords.y, x2: this.clickCoords.x, y2: this.clickCoords.y }, false, false, null ); - - this.dragging = true; - this.onDrag( e ); // incase the user just clicks once after already making a selection - Event.stop( e ); - }, - - /** - * Gets the current cursor position relative to the image - * - * @access private - * @param obj Event - * @return obj x,y pixels of the cursor - */ - getCurPos: function( e ) { - // get the offsets for the wrapper within the document - var el = this.imgWrap, wrapOffsets = Position.cumulativeOffset( el ); - // remove any scrolling that is applied to the wrapper (this may be buggy) - don't count the scroll on the body as that won't affect us - while( el.nodeName != 'BODY' ) { - wrapOffsets[1] -= el.scrollTop || 0; - wrapOffsets[0] -= el.scrollLeft || 0; - el = el.parentNode; - } - return curPos = { - x: Event.pointerX(e) - wrapOffsets[0], - y: Event.pointerY(e) - wrapOffsets[1] - } - }, - - /** - * Performs the drag for both resize & inital draw dragging - * - * @access private - * @param obj Event - * @return void - */ - onDrag: function( e ) { - if( this.dragging || this.resizing ) { - - var resizeHandle = null; - var curPos = this.getCurPos( e ); - var newCoords = this.cloneCoords( this.areaCoords ); - var direction = { x: 1, y: 1 }; - - if( this.dragging ) { - if( curPos.x < this.clickCoords.x ) direction.x = -1; - if( curPos.y < this.clickCoords.y ) direction.y = -1; - - this.transformCoords( curPos.x, this.clickCoords.x, newCoords, 'x' ); - this.transformCoords( curPos.y, this.clickCoords.y, newCoords, 'y' ); - } else if( this.resizing ) { - resizeHandle = this.resizeHandle; - // do x movements first - if( resizeHandle.match(/E/) ) { - // if we're moving an east handle - this.transformCoords( curPos.x, this.startCoords.x1, newCoords, 'x' ); - if( curPos.x < this.startCoords.x1 ) direction.x = -1; - } else if( resizeHandle.match(/W/) ) { - // if we're moving an west handle - this.transformCoords( curPos.x, this.startCoords.x2, newCoords, 'x' ); - if( curPos.x < this.startCoords.x2 ) direction.x = -1; - } - - // do y movements second - if( resizeHandle.match(/N/) ) { - // if we're moving an north handle - this.transformCoords( curPos.y, this.startCoords.y2, newCoords, 'y' ); - if( curPos.y < this.startCoords.y2 ) direction.y = -1; - } else if( resizeHandle.match(/S/) ) { - // if we're moving an south handle - this.transformCoords( curPos.y, this.startCoords.y1, newCoords, 'y' ); - if( curPos.y < this.startCoords.y1 ) direction.y = -1; - } - - } - - this.setAreaCoords( newCoords, false, e.shiftKey, direction, resizeHandle ); - this.drawArea(); - Event.stop( e ); // stop the default event (selecting images & text) in Safari & IE PC - } - }, - - /** - * Applies the appropriate transform to supplied co-ordinates, on the - * defined axis, depending on the relationship of the supplied values - * - * @access private - * @param int Current value of pointer - * @param int Base value to compare current pointer val to - * @param obj Coordinates to apply transformation on x1, x2, y1, y2 - * @param string Axis to apply transformation on 'x' || 'y' - * @return void - */ - transformCoords : function( curVal, baseVal, coords, axis ) { - var newVals = [ curVal, baseVal ]; - if( curVal > baseVal ) newVals.reverse(); - coords[ axis + '1' ] = newVals[0]; - coords[ axis + '2' ] = newVals[1]; - }, - - /** - * Ends the crop & passes the values of the select area on to the appropriate - * callback function on completion of a crop - * - * @access private - * @return void - */ - endCrop : function() { - this.dragging = false; - this.resizing = false; - - this.options.onEndCrop( - this.areaCoords, - { - width: this.calcW(), - height: this.calcH() - } - ); - }, - - /** - * Abstract method called on the end of initialization - * - * @access private - * @abstract - * @return void - */ - subInitialize: function() {}, - - /** - * Abstract method called on the end of drawArea() - * - * @access private - * @abstract - * @return void - */ - subDrawArea: function() {} -}; - - - - -/** - * Extend the Cropper.Img class to allow for presentation of a preview image of the resulting crop, - * the option for displayOnInit is always overridden to true when displaying a preview image - * - * Usage: - * @param obj Image element to attach to - * @param obj Optional options: - * - see Cropper.Img for base options - * - * - previewWrap obj - * HTML element that will be used as a container for the preview image - */ -Cropper.ImgWithPreview = Class.create(); - -Object.extend( Object.extend( Cropper.ImgWithPreview.prototype, Cropper.Img.prototype ), { - - /** - * Implements the abstract method from Cropper.Img to initialize preview image settings. - * Will only attach a preview image is the previewWrap element is defined and the minWidth - * & minHeight options are set. - * - * @see Croper.Img.subInitialize - */ - subInitialize: function() { - /** - * Whether or not we've attached a preview image - * @var boolean - */ - this.hasPreviewImg = false; - if( typeof(this.options.previewWrap) != 'undefined' - && this.options.minWidth > 0 - && this.options.minHeight > 0 - ) { - /** - * The preview image wrapper element - * @var obj HTML element - */ - this.previewWrap = $PR( this.options.previewWrap ); - /** - * The preview image element - * @var obj HTML IMG element - */ - this.previewImg = this.img.cloneNode( false ); - // set the ID of the preview image to be unique - this.previewImg.id = 'imgCrop_' + this.previewImg.id; - - - // set the displayOnInit option to true so we display the select area at the same time as the thumbnail - this.options.displayOnInit = true; - - this.hasPreviewImg = true; - - this.previewWrap.addClassName( 'imgCrop_previewWrap' ); - - this.previewWrap.setStyle( - { - width: this.options.minWidth + 'px', - height: this.options.minHeight + 'px' - } - ); - - this.previewWrap.appendChild( this.previewImg ); - } - }, - - /** - * Implements the abstract method from Cropper.Img to draw the preview image - * - * @see Croper.Img.subDrawArea - */ - subDrawArea: function() { - if( this.hasPreviewImg ) { - // get the ratio of the select area to the src image - var calcWidth = this.calcW(); - var calcHeight = this.calcH(); - // ratios for the dimensions of the preview image - var dimRatio = { - x: this.imgW / calcWidth, - y: this.imgH / calcHeight - }; - //ratios for the positions within the preview - var posRatio = { - x: calcWidth / this.options.minWidth, - y: calcHeight / this.options.minHeight - }; - - // setting the positions in an obj before apply styles for rendering speed increase - var calcPos = { - w: Math.ceil( this.options.minWidth * dimRatio.x ) + 'px', - h: Math.ceil( this.options.minHeight * dimRatio.y ) + 'px', - x: '-' + Math.ceil( this.areaCoords.x1 / posRatio.x ) + 'px', - y: '-' + Math.ceil( this.areaCoords.y1 / posRatio.y ) + 'px' - } - - var previewStyle = this.previewImg.style; - previewStyle.width = calcPos.w; - previewStyle.height = calcPos.h; - previewStyle.left = calcPos.x; - previewStyle.top = calcPos.y; - } - } - -}); diff --git a/view/js/cropper/lib/builder.js b/view/js/cropper/lib/builder.js deleted file mode 100644 index 5b15ba939..000000000 --- a/view/js/cropper/lib/builder.js +++ /dev/null @@ -1,101 +0,0 @@ -// Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) -// -// See scriptaculous.js for full license. - -var Builder = { - NODEMAP: { - AREA: 'map', - CAPTION: 'table', - COL: 'table', - COLGROUP: 'table', - LEGEND: 'fieldset', - OPTGROUP: 'select', - OPTION: 'select', - PARAM: 'object', - TBODY: 'table', - TD: 'table', - TFOOT: 'table', - TH: 'table', - THEAD: 'table', - TR: 'table' - }, - // note: For Firefox < 1.5, OPTION and OPTGROUP tags are currently broken, - // due to a Firefox bug - node: function(elementName) { - elementName = elementName.toUpperCase(); - - // try innerHTML approach - var parentTag = this.NODEMAP[elementName] || 'div'; - var parentElement = document.createElement(parentTag); - try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707 - parentElement.innerHTML = "<" + elementName + ">"; - } catch(e) {} - var element = parentElement.firstChild || null; - - // see if browser added wrapping tags - if(element && (element.tagName != elementName)) - element = element.getElementsByTagName(elementName)[0]; - - // fallback to createElement approach - if(!element) element = document.createElement(elementName); - - // abort if nothing could be created - if(!element) return; - - // attributes (or text) - if(arguments[1]) - if(this._isStringOrNumber(arguments[1]) || - (arguments[1] instanceof Array)) { - this._children(element, arguments[1]); - } else { - var attrs = this._attributes(arguments[1]); - if(attrs.length) { - try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707 - parentElement.innerHTML = "<" +elementName + " " + - attrs + ">"; - } catch(e) {} - element = parentElement.firstChild || null; - // workaround firefox 1.0.X bug - if(!element) { - element = document.createElement(elementName); - for(attr in arguments[1]) - element[attr == 'class' ? 'className' : attr] = arguments[1][attr]; - } - if(element.tagName != elementName) - element = parentElement.getElementsByTagName(elementName)[0]; - } - } - - // text, or array of children - if(arguments[2]) - this._children(element, arguments[2]); - - return element; - }, - _text: function(text) { - return document.createTextNode(text); - }, - _attributes: function(attributes) { - var attrs = []; - for(attribute in attributes) - attrs.push((attribute=='className' ? 'class' : attribute) + - '="' + attributes[attribute].toString().escapeHTML() + '"'); - return attrs.join(" "); - }, - _children: function(element, children) { - if(typeof children=='object') { // array can hold nodes and text - children.flatten().each( function(e) { - if(typeof e=='object') - element.appendChild(e) - else - if(Builder._isStringOrNumber(e)) - element.appendChild(Builder._text(e)); - }); - } else - if(Builder._isStringOrNumber(children)) - element.appendChild(Builder._text(children)); - }, - _isStringOrNumber: function(param) { - return(typeof param=='string' || typeof param=='number'); - } -} \ No newline at end of file diff --git a/view/js/cropper/lib/controls.js b/view/js/cropper/lib/controls.js deleted file mode 100644 index 960694877..000000000 --- a/view/js/cropper/lib/controls.js +++ /dev/null @@ -1,815 +0,0 @@ -// Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) -// (c) 2005 Ivan Krstic (http://blogs.law.harvard.edu/ivan) -// (c) 2005 Jon Tirsen (http://www.tirsen.com) -// Contributors: -// Richard Livsey -// Rahul Bhargava -// Rob Wills -// -// See scriptaculous.js for full license. - -// Autocompleter.Base handles all the autocompletion functionality -// that's independent of the data source for autocompletion. This -// includes drawing the autocompletion menu, observing keyboard -// and mouse events, and similar. -// -// Specific autocompleters need to provide, at the very least, -// a getUpdatedChoices function that will be invoked every time -// the text inside the monitored textbox changes. This method -// should get the text for which to provide autocompletion by -// invoking this.getToken(), NOT by directly accessing -// this.element.value. This is to allow incremental tokenized -// autocompletion. Specific auto-completion logic (AJAX, etc) -// belongs in getUpdatedChoices. -// -// Tokenized incremental autocompletion is enabled automatically -// when an autocompleter is instantiated with the 'tokens' option -// in the options parameter, e.g.: -// new Ajax.Autocompleter('id','upd', '/url/', { tokens: ',' }); -// will incrementally autocomplete with a comma as the token. -// Additionally, ',' in the above example can be replaced with -// a token array, e.g. { tokens: [',', '\n'] } which -// enables autocompletion on multiple tokens. This is most -// useful when one of the tokens is \n (a newline), as it -// allows smart autocompletion after linebreaks. - -var Autocompleter = {} -Autocompleter.Base = function() {}; -Autocompleter.Base.prototype = { - baseInitialize: function(element, update, options) { - this.element = $PR(element); - this.update = $PR(update); - this.hasFocus = false; - this.changed = false; - this.active = false; - this.index = 0; - this.entryCount = 0; - - if (this.setOptions) - this.setOptions(options); - else - this.options = options || {}; - - this.options.paramName = this.options.paramName || this.element.name; - this.options.tokens = this.options.tokens || []; - this.options.frequency = this.options.frequency || 0.4; - this.options.minChars = this.options.minChars || 1; - this.options.onShow = this.options.onShow || - function(element, update){ - if(!update.style.position || update.style.position=='absolute') { - update.style.position = 'absolute'; - Position.clone(element, update, {setHeight: false, offsetTop: element.offsetHeight}); - } - Effect.Appear(update,{duration:0.15}); - }; - this.options.onHide = this.options.onHide || - function(element, update){ new Effect.Fade(update,{duration:0.15}) }; - - if (typeof(this.options.tokens) == 'string') - this.options.tokens = new Array(this.options.tokens); - - this.observer = null; - - this.element.setAttribute('autocomplete','off'); - - Element.hide(this.update); - - Event.observe(this.element, "blur", this.onBlur.bindAsEventListener(this)); - Event.observe(this.element, "keypress", this.onKeyPress.bindAsEventListener(this)); - }, - - show: function() { - if(Element.getStyle(this.update, 'display')=='none') this.options.onShow(this.element, this.update); - if(!this.iefix && - (navigator.appVersion.indexOf('MSIE')>0) && - (navigator.userAgent.indexOf('Opera')<0) && - (Element.getStyle(this.update, 'position')=='absolute')) { - new Insertion.After(this.update, - ''); - this.iefix = $PR(this.update.id+'_iefix'); - } - if(this.iefix) setTimeout(this.fixIEOverlapping.bind(this), 50); - }, - - fixIEOverlapping: function() { - Position.clone(this.update, this.iefix); - this.iefix.style.zIndex = 1; - this.update.style.zIndex = 2; - Element.show(this.iefix); - }, - - hide: function() { - this.stopIndicator(); - if(Element.getStyle(this.update, 'display')!='none') this.options.onHide(this.element, this.update); - if(this.iefix) Element.hide(this.iefix); - }, - - startIndicator: function() { - if(this.options.indicator) Element.show(this.options.indicator); - }, - - stopIndicator: function() { - if(this.options.indicator) Element.hide(this.options.indicator); - }, - - onKeyPress: function(event) { - if(this.active) - switch(event.keyCode) { - case Event.KEY_TAB: - case Event.KEY_RETURN: - this.selectEntry(); - Event.stop(event); - case Event.KEY_ESC: - this.hide(); - this.active = false; - Event.stop(event); - return; - case Event.KEY_LEFT: - case Event.KEY_RIGHT: - return; - case Event.KEY_UP: - this.markPrevious(); - this.render(); - if(navigator.appVersion.indexOf('AppleWebKit')>0) Event.stop(event); - return; - case Event.KEY_DOWN: - this.markNext(); - this.render(); - if(navigator.appVersion.indexOf('AppleWebKit')>0) Event.stop(event); - return; - } - else - if(event.keyCode==Event.KEY_TAB || event.keyCode==Event.KEY_RETURN || - (navigator.appVersion.indexOf('AppleWebKit') > 0 && event.keyCode == 0)) return; - - this.changed = true; - this.hasFocus = true; - - if(this.observer) clearTimeout(this.observer); - this.observer = - setTimeout(this.onObserverEvent.bind(this), this.options.frequency*1000); - }, - - activate: function() { - this.changed = false; - this.hasFocus = true; - this.getUpdatedChoices(); - }, - - onHover: function(event) { - var element = Event.findElement(event, 'LI'); - if(this.index != element.autocompleteIndex) - { - this.index = element.autocompleteIndex; - this.render(); - } - Event.stop(event); - }, - - onClick: function(event) { - var element = Event.findElement(event, 'LI'); - this.index = element.autocompleteIndex; - this.selectEntry(); - this.hide(); - }, - - onBlur: function(event) { - // needed to make click events working - setTimeout(this.hide.bind(this), 250); - this.hasFocus = false; - this.active = false; - }, - - render: function() { - if(this.entryCount > 0) { - for (var i = 0; i < this.entryCount; i++) - this.index==i ? - Element.addClassName(this.getEntry(i),"selected") : - Element.removeClassName(this.getEntry(i),"selected"); - - if(this.hasFocus) { - this.show(); - this.active = true; - } - } else { - this.active = false; - this.hide(); - } - }, - - markPrevious: function() { - if(this.index > 0) this.index-- - else this.index = this.entryCount-1; - }, - - markNext: function() { - if(this.index < this.entryCount-1) this.index++ - else this.index = 0; - }, - - getEntry: function(index) { - return this.update.firstChild.childNodes[index]; - }, - - getCurrentEntry: function() { - return this.getEntry(this.index); - }, - - selectEntry: function() { - this.active = false; - this.updateElement(this.getCurrentEntry()); - }, - - updateElement: function(selectedElement) { - if (this.options.updateElement) { - this.options.updateElement(selectedElement); - return; - } - var value = ''; - if (this.options.select) { - var nodes = document.getElementsByClassName(this.options.select, selectedElement) || []; - if(nodes.length>0) value = Element.collectTextNodes(nodes[0], this.options.select); - } else - value = Element.collectTextNodesIgnoreClass(selectedElement, 'informal'); - - var lastTokenPos = this.findLastToken(); - if (lastTokenPos != -1) { - var newValue = this.element.value.substr(0, lastTokenPos + 1); - var whitespace = this.element.value.substr(lastTokenPos + 1).match(/^\s+/); - if (whitespace) - newValue += whitespace[0]; - this.element.value = newValue + value; - } else { - this.element.value = value; - } - this.element.focus(); - - if (this.options.afterUpdateElement) - this.options.afterUpdateElement(this.element, selectedElement); - }, - - updateChoices: function(choices) { - if(!this.changed && this.hasFocus) { - this.update.innerHTML = choices; - Element.cleanWhitespace(this.update); - Element.cleanWhitespace(this.update.firstChild); - - if(this.update.firstChild && this.update.firstChild.childNodes) { - this.entryCount = - this.update.firstChild.childNodes.length; - for (var i = 0; i < this.entryCount; i++) { - var entry = this.getEntry(i); - entry.autocompleteIndex = i; - this.addObservers(entry); - } - } else { - this.entryCount = 0; - } - - this.stopIndicator(); - - this.index = 0; - this.render(); - } - }, - - addObservers: function(element) { - Event.observe(element, "mouseover", this.onHover.bindAsEventListener(this)); - Event.observe(element, "click", this.onClick.bindAsEventListener(this)); - }, - - onObserverEvent: function() { - this.changed = false; - if(this.getToken().length>=this.options.minChars) { - this.startIndicator(); - this.getUpdatedChoices(); - } else { - this.active = false; - this.hide(); - } - }, - - getToken: function() { - var tokenPos = this.findLastToken(); - if (tokenPos != -1) - var ret = this.element.value.substr(tokenPos + 1).replace(/^\s+/,'').replace(/\s+$/,''); - else - var ret = this.element.value; - - return /\n/.test(ret) ? '' : ret; - }, - - findLastToken: function() { - var lastTokenPos = -1; - - for (var i=0; i lastTokenPos) - lastTokenPos = thisTokenPos; - } - return lastTokenPos; - } -} - -Ajax.Autocompleter = Class.create(); -Object.extend(Object.extend(Ajax.Autocompleter.prototype, Autocompleter.Base.prototype), { - initialize: function(element, update, url, options) { - this.baseInitialize(element, update, options); - this.options.asynchronous = true; - this.options.onComplete = this.onComplete.bind(this); - this.options.defaultParams = this.options.parameters || null; - this.url = url; - }, - - getUpdatedChoices: function() { - entry = encodeURIComponent(this.options.paramName) + '=' + - encodeURIComponent(this.getToken()); - - this.options.parameters = this.options.callback ? - this.options.callback(this.element, entry) : entry; - - if(this.options.defaultParams) - this.options.parameters += '&' + this.options.defaultParams; - - new Ajax.Request(this.url, this.options); - }, - - onComplete: function(request) { - this.updateChoices(request.responseText); - } - -}); - -// The local array autocompleter. Used when you'd prefer to -// inject an array of autocompletion options into the page, rather -// than sending out Ajax queries, which can be quite slow sometimes. -// -// The constructor takes four parameters. The first two are, as usual, -// the id of the monitored textbox, and id of the autocompletion menu. -// The third is the array you want to autocomplete from, and the fourth -// is the options block. -// -// Extra local autocompletion options: -// - choices - How many autocompletion choices to offer -// -// - partialSearch - If false, the autocompleter will match entered -// text only at the beginning of strings in the -// autocomplete array. Defaults to true, which will -// match text at the beginning of any *word* in the -// strings in the autocomplete array. If you want to -// search anywhere in the string, additionally set -// the option fullSearch to true (default: off). -// -// - fullSsearch - Search anywhere in autocomplete array strings. -// -// - partialChars - How many characters to enter before triggering -// a partial match (unlike minChars, which defines -// how many characters are required to do any match -// at all). Defaults to 2. -// -// - ignoreCase - Whether to ignore case when autocompleting. -// Defaults to true. -// -// It's possible to pass in a custom function as the 'selector' -// option, if you prefer to write your own autocompletion logic. -// In that case, the other options above will not apply unless -// you support them. - -Autocompleter.Local = Class.create(); -Autocompleter.Local.prototype = Object.extend(new Autocompleter.Base(), { - initialize: function(element, update, array, options) { - this.baseInitialize(element, update, options); - this.options.array = array; - }, - - getUpdatedChoices: function() { - this.updateChoices(this.options.selector(this)); - }, - - setOptions: function(options) { - this.options = Object.extend({ - choices: 10, - partialSearch: true, - partialChars: 2, - ignoreCase: true, - fullSearch: false, - selector: function(instance) { - var ret = []; // Beginning matches - var partial = []; // Inside matches - var entry = instance.getToken(); - var count = 0; - - for (var i = 0; i < instance.options.array.length && - ret.length < instance.options.choices ; i++) { - - var elem = instance.options.array[i]; - var foundPos = instance.options.ignoreCase ? - elem.toLowerCase().indexOf(entry.toLowerCase()) : - elem.indexOf(entry); - - while (foundPos != -1) { - if (foundPos == 0 && elem.length != entry.length) { - ret.push("
  • " + elem.substr(0, entry.length) + "" + - elem.substr(entry.length) + "
  • "); - break; - } else if (entry.length >= instance.options.partialChars && - instance.options.partialSearch && foundPos != -1) { - if (instance.options.fullSearch || /\s/.test(elem.substr(foundPos-1,1))) { - partial.push("
  • " + elem.substr(0, foundPos) + "" + - elem.substr(foundPos, entry.length) + "" + elem.substr( - foundPos + entry.length) + "
  • "); - break; - } - } - - foundPos = instance.options.ignoreCase ? - elem.toLowerCase().indexOf(entry.toLowerCase(), foundPos + 1) : - elem.indexOf(entry, foundPos + 1); - - } - } - if (partial.length) - ret = ret.concat(partial.slice(0, instance.options.choices - ret.length)) - return "
      " + ret.join('') + "
    "; - } - }, options || {}); - } -}); - -// AJAX in-place editor -// -// see documentation on http://wiki.script.aculo.us/scriptaculous/show/Ajax.InPlaceEditor - -// Use this if you notice weird scrolling problems on some browsers, -// the DOM might be a bit confused when this gets called so do this -// waits 1 ms (with setTimeout) until it does the activation -Field.scrollFreeActivate = function(field) { - setTimeout(function() { - Field.activate(field); - }, 1); -} - -Ajax.InPlaceEditor = Class.create(); -Ajax.InPlaceEditor.defaultHighlightColor = "#FFFF99"; -Ajax.InPlaceEditor.prototype = { - initialize: function(element, url, options) { - this.url = url; - this.element = $PR(element); - - this.options = Object.extend({ - okButton: true, - okText: "ok", - cancelLink: true, - cancelText: "cancel", - savingText: "Saving...", - clickToEditText: "Click to edit", - okText: "ok", - rows: 1, - onComplete: function(transport, element) { - new Effect.Highlight(element, {startcolor: this.options.highlightcolor}); - }, - onFailure: function(transport) { - alert("Error communicating with the server: " + transport.responseText.stripTags()); - }, - callback: function(form) { - return Form.serialize(form); - }, - handleLineBreaks: true, - loadingText: 'Loading...', - savingClassName: 'inplaceeditor-saving', - loadingClassName: 'inplaceeditor-loading', - formClassName: 'inplaceeditor-form', - highlightcolor: Ajax.InPlaceEditor.defaultHighlightColor, - highlightendcolor: "#FFFFFF", - externalControl: null, - submitOnBlur: false, - ajaxOptions: {}, - evalScripts: false - }, options || {}); - - if(!this.options.formId && this.element.id) { - this.options.formId = this.element.id + "-inplaceeditor"; - if ($PR(this.options.formId)) { - // there's already a form with that name, don't specify an id - this.options.formId = null; - } - } - - if (this.options.externalControl) { - this.options.externalControl = $PR(this.options.externalControl); - } - - this.originalBackground = Element.getStyle(this.element, 'background-color'); - if (!this.originalBackground) { - this.originalBackground = "transparent"; - } - - this.element.title = this.options.clickToEditText; - - this.onclickListener = this.enterEditMode.bindAsEventListener(this); - this.mouseoverListener = this.enterHover.bindAsEventListener(this); - this.mouseoutListener = this.leaveHover.bindAsEventListener(this); - Event.observe(this.element, 'click', this.onclickListener); - Event.observe(this.element, 'mouseover', this.mouseoverListener); - Event.observe(this.element, 'mouseout', this.mouseoutListener); - if (this.options.externalControl) { - Event.observe(this.options.externalControl, 'click', this.onclickListener); - Event.observe(this.options.externalControl, 'mouseover', this.mouseoverListener); - Event.observe(this.options.externalControl, 'mouseout', this.mouseoutListener); - } - }, - enterEditMode: function(evt) { - if (this.saving) return; - if (this.editing) return; - this.editing = true; - this.onEnterEditMode(); - if (this.options.externalControl) { - Element.hide(this.options.externalControl); - } - Element.hide(this.element); - this.createForm(); - this.element.parentNode.insertBefore(this.form, this.element); - Field.scrollFreeActivate(this.editField); - // stop the event to avoid a page refresh in Safari - if (evt) { - Event.stop(evt); - } - return false; - }, - createForm: function() { - this.form = document.createElement("form"); - this.form.id = this.options.formId; - Element.addClassName(this.form, this.options.formClassName) - this.form.onsubmit = this.onSubmit.bind(this); - - this.createEditField(); - - if (this.options.textarea) { - var br = document.createElement("br"); - this.form.appendChild(br); - } - - if (this.options.okButton) { - okButton = document.createElement("input"); - okButton.type = "submit"; - okButton.value = this.options.okText; - okButton.className = 'editor_ok_button'; - this.form.appendChild(okButton); - } - - if (this.options.cancelLink) { - cancelLink = document.createElement("a"); - cancelLink.href = "#"; - cancelLink.appendChild(document.createTextNode(this.options.cancelText)); - cancelLink.onclick = this.onclickCancel.bind(this); - cancelLink.className = 'editor_cancel'; - this.form.appendChild(cancelLink); - } - }, - hasHTMLLineBreaks: function(string) { - if (!this.options.handleLineBreaks) return false; - return string.match(/
    /i); - }, - convertHTMLLineBreaks: function(string) { - return string.replace(/
    /gi, "\n").replace(//gi, "\n").replace(/<\/p>/gi, "\n").replace(/

    /gi, ""); - }, - createEditField: function() { - var text; - if(this.options.loadTextURL) { - text = this.options.loadingText; - } else { - text = this.getText(); - } - - var obj = this; - - if (this.options.rows == 1 && !this.hasHTMLLineBreaks(text)) { - this.options.textarea = false; - var textField = document.createElement("input"); - textField.obj = this; - textField.type = "text"; - textField.name = "value"; - textField.value = text; - textField.style.backgroundColor = this.options.highlightcolor; - textField.className = 'editor_field'; - var size = this.options.size || this.options.cols || 0; - if (size != 0) textField.size = size; - if (this.options.submitOnBlur) - textField.onblur = this.onSubmit.bind(this); - this.editField = textField; - } else { - this.options.textarea = true; - var textArea = document.createElement("textarea"); - textArea.obj = this; - textArea.name = "value"; - textArea.value = this.convertHTMLLineBreaks(text); - textArea.rows = this.options.rows; - textArea.cols = this.options.cols || 40; - textArea.className = 'editor_field'; - if (this.options.submitOnBlur) - textArea.onblur = this.onSubmit.bind(this); - this.editField = textArea; - } - - if(this.options.loadTextURL) { - this.loadExternalText(); - } - this.form.appendChild(this.editField); - }, - getText: function() { - return this.element.innerHTML; - }, - loadExternalText: function() { - Element.addClassName(this.form, this.options.loadingClassName); - this.editField.disabled = true; - new Ajax.Request( - this.options.loadTextURL, - Object.extend({ - asynchronous: true, - onComplete: this.onLoadedExternalText.bind(this) - }, this.options.ajaxOptions) - ); - }, - onLoadedExternalText: function(transport) { - Element.removeClassName(this.form, this.options.loadingClassName); - this.editField.disabled = false; - this.editField.value = transport.responseText.stripTags(); - }, - onclickCancel: function() { - this.onComplete(); - this.leaveEditMode(); - return false; - }, - onFailure: function(transport) { - this.options.onFailure(transport); - if (this.oldInnerHTML) { - this.element.innerHTML = this.oldInnerHTML; - this.oldInnerHTML = null; - } - return false; - }, - onSubmit: function() { - // onLoading resets these so we need to save them away for the Ajax call - var form = this.form; - var value = this.editField.value; - - // do this first, sometimes the ajax call returns before we get a chance to switch on Saving... - // which means this will actually switch on Saving... *after* we've left edit mode causing Saving... - // to be displayed indefinitely - this.onLoading(); - - if (this.options.evalScripts) { - new Ajax.Request( - this.url, Object.extend({ - parameters: this.options.callback(form, value), - onComplete: this.onComplete.bind(this), - onFailure: this.onFailure.bind(this), - asynchronous:true, - evalScripts:true - }, this.options.ajaxOptions)); - } else { - new Ajax.Updater( - { success: this.element, - // don't update on failure (this could be an option) - failure: null }, - this.url, Object.extend({ - parameters: this.options.callback(form, value), - onComplete: this.onComplete.bind(this), - onFailure: this.onFailure.bind(this) - }, this.options.ajaxOptions)); - } - // stop the event to avoid a page refresh in Safari - if (arguments.length > 1) { - Event.stop(arguments[0]); - } - return false; - }, - onLoading: function() { - this.saving = true; - this.removeForm(); - this.leaveHover(); - this.showSaving(); - }, - showSaving: function() { - this.oldInnerHTML = this.element.innerHTML; - this.element.innerHTML = this.options.savingText; - Element.addClassName(this.element, this.options.savingClassName); - this.element.style.backgroundColor = this.originalBackground; - Element.show(this.element); - }, - removeForm: function() { - if(this.form) { - if (this.form.parentNode) Element.remove(this.form); - this.form = null; - } - }, - enterHover: function() { - if (this.saving) return; - this.element.style.backgroundColor = this.options.highlightcolor; - if (this.effect) { - this.effect.cancel(); - } - Element.addClassName(this.element, this.options.hoverClassName) - }, - leaveHover: function() { - if (this.options.backgroundColor) { - this.element.style.backgroundColor = this.oldBackground; - } - Element.removeClassName(this.element, this.options.hoverClassName) - if (this.saving) return; - this.effect = new Effect.Highlight(this.element, { - startcolor: this.options.highlightcolor, - endcolor: this.options.highlightendcolor, - restorecolor: this.originalBackground - }); - }, - leaveEditMode: function() { - Element.removeClassName(this.element, this.options.savingClassName); - this.removeForm(); - this.leaveHover(); - this.element.style.backgroundColor = this.originalBackground; - Element.show(this.element); - if (this.options.externalControl) { - Element.show(this.options.externalControl); - } - this.editing = false; - this.saving = false; - this.oldInnerHTML = null; - this.onLeaveEditMode(); - }, - onComplete: function(transport) { - this.leaveEditMode(); - this.options.onComplete.bind(this)(transport, this.element); - }, - onEnterEditMode: function() {}, - onLeaveEditMode: function() {}, - dispose: function() { - if (this.oldInnerHTML) { - this.element.innerHTML = this.oldInnerHTML; - } - this.leaveEditMode(); - Event.stopObserving(this.element, 'click', this.onclickListener); - Event.stopObserving(this.element, 'mouseover', this.mouseoverListener); - Event.stopObserving(this.element, 'mouseout', this.mouseoutListener); - if (this.options.externalControl) { - Event.stopObserving(this.options.externalControl, 'click', this.onclickListener); - Event.stopObserving(this.options.externalControl, 'mouseover', this.mouseoverListener); - Event.stopObserving(this.options.externalControl, 'mouseout', this.mouseoutListener); - } - } -}; - -Ajax.InPlaceCollectionEditor = Class.create(); -Object.extend(Ajax.InPlaceCollectionEditor.prototype, Ajax.InPlaceEditor.prototype); -Object.extend(Ajax.InPlaceCollectionEditor.prototype, { - createEditField: function() { - if (!this.cached_selectTag) { - var selectTag = document.createElement("select"); - var collection = this.options.collection || []; - var optionTag; - collection.each(function(e,i) { - optionTag = document.createElement("option"); - optionTag.value = (e instanceof Array) ? e[0] : e; - if(this.options.value==optionTag.value) optionTag.selected = true; - optionTag.appendChild(document.createTextNode((e instanceof Array) ? e[1] : e)); - selectTag.appendChild(optionTag); - }.bind(this)); - this.cached_selectTag = selectTag; - } - - this.editField = this.cached_selectTag; - if(this.options.loadTextURL) this.loadExternalText(); - this.form.appendChild(this.editField); - this.options.callback = function(form, value) { - return "value=" + encodeURIComponent(value); - } - } -}); - -// Delayed observer, like Form.Element.Observer, -// but waits for delay after last key input -// Ideal for live-search fields - -Form.Element.DelayedObserver = Class.create(); -Form.Element.DelayedObserver.prototype = { - initialize: function(element, delay, callback) { - this.delay = delay || 0.5; - this.element = $PR(element); - this.callback = callback; - this.timer = null; - this.lastValue = $F(this.element); - Event.observe(this.element,'keyup',this.delayedListener.bindAsEventListener(this)); - }, - delayedListener: function(event) { - if(this.lastValue == $F(this.element)) return; - if(this.timer) clearTimeout(this.timer); - this.timer = setTimeout(this.onTimerEvent.bind(this), this.delay * 1000); - this.lastValue = $F(this.element); - }, - onTimerEvent: function() { - this.timer = null; - this.callback(this.element, $F(this.element)); - } -}; diff --git a/view/js/cropper/lib/dragdrop.js b/view/js/cropper/lib/dragdrop.js deleted file mode 100644 index baa607c67..000000000 --- a/view/js/cropper/lib/dragdrop.js +++ /dev/null @@ -1,915 +0,0 @@ -// Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) -// (c) 2005 Sammi Williams (http://www.oriontransfer.co.nz, sammi@oriontransfer.co.nz) -// -// See scriptaculous.js for full license. - -/*--------------------------------------------------------------------------*/ - -var Droppables = { - drops: [], - - remove: function(element) { - this.drops = this.drops.reject(function(d) { return d.element==$PR(element) }); - }, - - add: function(element) { - element = $PR(element); - var options = Object.extend({ - greedy: true, - hoverclass: null, - tree: false - }, arguments[1] || {}); - - // cache containers - if(options.containment) { - options._containers = []; - var containment = options.containment; - if((typeof containment == 'object') && - (containment.constructor == Array)) { - containment.each( function(c) { options._containers.push($PR(c)) }); - } else { - options._containers.push($PR(containment)); - } - } - - if(options.accept) options.accept = [options.accept].flatten(); - - Element.makePositioned(element); // fix IE - options.element = element; - - this.drops.push(options); - }, - - findDeepestChild: function(drops) { - deepest = drops[0]; - - for (i = 1; i < drops.length; ++i) - if (Element.isParent(drops[i].element, deepest.element)) - deepest = drops[i]; - - return deepest; - }, - - isContained: function(element, drop) { - var containmentNode; - if(drop.tree) { - containmentNode = element.treeNode; - } else { - containmentNode = element.parentNode; - } - return drop._containers.detect(function(c) { return containmentNode == c }); - }, - - isAffected: function(point, element, drop) { - return ( - (drop.element!=element) && - ((!drop._containers) || - this.isContained(element, drop)) && - ((!drop.accept) || - (Element.classNames(element).detect( - function(v) { return drop.accept.include(v) } ) )) && - Position.within(drop.element, point[0], point[1]) ); - }, - - deactivate: function(drop) { - if(drop.hoverclass) - Element.removeClassName(drop.element, drop.hoverclass); - this.last_active = null; - }, - - activate: function(drop) { - if(drop.hoverclass) - Element.addClassName(drop.element, drop.hoverclass); - this.last_active = drop; - }, - - show: function(point, element) { - if(!this.drops.length) return; - var affected = []; - - if(this.last_active) this.deactivate(this.last_active); - this.drops.each( function(drop) { - if(Droppables.isAffected(point, element, drop)) - affected.push(drop); - }); - - if(affected.length>0) { - drop = Droppables.findDeepestChild(affected); - Position.within(drop.element, point[0], point[1]); - if(drop.onHover) - drop.onHover(element, drop.element, Position.overlap(drop.overlap, drop.element)); - - Droppables.activate(drop); - } - }, - - fire: function(event, element) { - if(!this.last_active) return; - Position.prepare(); - - if (this.isAffected([Event.pointerX(event), Event.pointerY(event)], element, this.last_active)) - if (this.last_active.onDrop) - this.last_active.onDrop(element, this.last_active.element, event); - }, - - reset: function() { - if(this.last_active) - this.deactivate(this.last_active); - } -} - -var Draggables = { - drags: [], - observers: [], - - register: function(draggable) { - if(this.drags.length == 0) { - this.eventMouseUp = this.endDrag.bindAsEventListener(this); - this.eventMouseMove = this.updateDrag.bindAsEventListener(this); - this.eventKeypress = this.keyPress.bindAsEventListener(this); - - Event.observe(document, "mouseup", this.eventMouseUp); - Event.observe(document, "mousemove", this.eventMouseMove); - Event.observe(document, "keypress", this.eventKeypress); - } - this.drags.push(draggable); - }, - - unregister: function(draggable) { - this.drags = this.drags.reject(function(d) { return d==draggable }); - if(this.drags.length == 0) { - Event.stopObserving(document, "mouseup", this.eventMouseUp); - Event.stopObserving(document, "mousemove", this.eventMouseMove); - Event.stopObserving(document, "keypress", this.eventKeypress); - } - }, - - activate: function(draggable) { - window.focus(); // allows keypress events if window isn't currently focused, fails for Safari - this.activeDraggable = draggable; - }, - - deactivate: function() { - this.activeDraggable = null; - }, - - updateDrag: function(event) { - if(!this.activeDraggable) return; - var pointer = [Event.pointerX(event), Event.pointerY(event)]; - // Mozilla-based browsers fire successive mousemove events with - // the same coordinates, prevent needless redrawing (moz bug?) - if(this._lastPointer && (this._lastPointer.inspect() == pointer.inspect())) return; - this._lastPointer = pointer; - this.activeDraggable.updateDrag(event, pointer); - }, - - endDrag: function(event) { - if(!this.activeDraggable) return; - this._lastPointer = null; - this.activeDraggable.endDrag(event); - this.activeDraggable = null; - }, - - keyPress: function(event) { - if(this.activeDraggable) - this.activeDraggable.keyPress(event); - }, - - addObserver: function(observer) { - this.observers.push(observer); - this._cacheObserverCallbacks(); - }, - - removeObserver: function(element) { // element instead of observer fixes mem leaks - this.observers = this.observers.reject( function(o) { return o.element==element }); - this._cacheObserverCallbacks(); - }, - - notify: function(eventName, draggable, event) { // 'onStart', 'onEnd', 'onDrag' - if(this[eventName+'Count'] > 0) - this.observers.each( function(o) { - if(o[eventName]) o[eventName](eventName, draggable, event); - }); - }, - - _cacheObserverCallbacks: function() { - ['onStart','onEnd','onDrag'].each( function(eventName) { - Draggables[eventName+'Count'] = Draggables.observers.select( - function(o) { return o[eventName]; } - ).length; - }); - } -} - -/*--------------------------------------------------------------------------*/ - -var Draggable = Class.create(); -Draggable.prototype = { - initialize: function(element) { - var options = Object.extend({ - handle: false, - starteffect: function(element) { - element._opacity = Element.getOpacity(element); - new Effect.Opacity(element, {duration:0.2, from:element._opacity, to:0.7}); - }, - reverteffect: function(element, top_offset, left_offset) { - var dur = Math.sqrt(Math.abs(top_offset^2)+Math.abs(left_offset^2))*0.02; - element._revert = new Effect.Move(element, { x: -left_offset, y: -top_offset, duration: dur}); - }, - endeffect: function(element) { - var toOpacity = typeof element._opacity == 'number' ? element._opacity : 1.0 - new Effect.Opacity(element, {duration:0.2, from:0.7, to:toOpacity}); - }, - zindex: 1000, - revert: false, - scroll: false, - scrollSensitivity: 20, - scrollSpeed: 15, - snap: false // false, or xy or [x,y] or function(x,y){ return [x,y] } - }, arguments[1] || {}); - - this.element = $PR(element); - - if(options.handle && (typeof options.handle == 'string')) { - var h = Element.childrenWithClassName(this.element, options.handle, true); - if(h.length>0) this.handle = h[0]; - } - if(!this.handle) this.handle = $PR(options.handle); - if(!this.handle) this.handle = this.element; - - if(options.scroll && !options.scroll.scrollTo && !options.scroll.outerHTML) - options.scroll = $PR(options.scroll); - - Element.makePositioned(this.element); // fix IE - - this.delta = this.currentDelta(); - this.options = options; - this.dragging = false; - - this.eventMouseDown = this.initDrag.bindAsEventListener(this); - Event.observe(this.handle, "mousedown", this.eventMouseDown); - - Draggables.register(this); - }, - - destroy: function() { - Event.stopObserving(this.handle, "mousedown", this.eventMouseDown); - Draggables.unregister(this); - }, - - currentDelta: function() { - return([ - parseInt(Element.getStyle(this.element,'left') || '0'), - parseInt(Element.getStyle(this.element,'top') || '0')]); - }, - - initDrag: function(event) { - if(Event.isLeftClick(event)) { - // abort on form elements, fixes a Firefox issue - var src = Event.element(event); - if(src.tagName && ( - src.tagName=='INPUT' || - src.tagName=='SELECT' || - src.tagName=='OPTION' || - src.tagName=='BUTTON' || - src.tagName=='TEXTAREA')) return; - - if(this.element._revert) { - this.element._revert.cancel(); - this.element._revert = null; - } - - var pointer = [Event.pointerX(event), Event.pointerY(event)]; - var pos = Position.cumulativeOffset(this.element); - this.offset = [0,1].map( function(i) { return (pointer[i] - pos[i]) }); - - Draggables.activate(this); - Event.stop(event); - } - }, - - startDrag: function(event) { - this.dragging = true; - - if(this.options.zindex) { - this.originalZ = parseInt(Element.getStyle(this.element,'z-index') || 0); - this.element.style.zIndex = this.options.zindex; - } - - if(this.options.ghosting) { - this._clone = this.element.cloneNode(true); - Position.absolutize(this.element); - this.element.parentNode.insertBefore(this._clone, this.element); - } - - if(this.options.scroll) { - if (this.options.scroll == window) { - var where = this._getWindowScroll(this.options.scroll); - this.originalScrollLeft = where.left; - this.originalScrollTop = where.top; - } else { - this.originalScrollLeft = this.options.scroll.scrollLeft; - this.originalScrollTop = this.options.scroll.scrollTop; - } - } - - Draggables.notify('onStart', this, event); - if(this.options.starteffect) this.options.starteffect(this.element); - }, - - updateDrag: function(event, pointer) { - if(!this.dragging) this.startDrag(event); - Position.prepare(); - Droppables.show(pointer, this.element); - Draggables.notify('onDrag', this, event); - this.draw(pointer); - if(this.options.change) this.options.change(this); - - if(this.options.scroll) { - this.stopScrolling(); - - var p; - if (this.options.scroll == window) { - with(this._getWindowScroll(this.options.scroll)) { p = [ left, top, left+width, top+height ]; } - } else { - p = Position.page(this.options.scroll); - p[0] += this.options.scroll.scrollLeft; - p[1] += this.options.scroll.scrollTop; - p.push(p[0]+this.options.scroll.offsetWidth); - p.push(p[1]+this.options.scroll.offsetHeight); - } - var speed = [0,0]; - if(pointer[0] < (p[0]+this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[0]+this.options.scrollSensitivity); - if(pointer[1] < (p[1]+this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[1]+this.options.scrollSensitivity); - if(pointer[0] > (p[2]-this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[2]-this.options.scrollSensitivity); - if(pointer[1] > (p[3]-this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[3]-this.options.scrollSensitivity); - this.startScrolling(speed); - } - - // fix AppleWebKit rendering - if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0); - - Event.stop(event); - }, - - finishDrag: function(event, success) { - this.dragging = false; - - if(this.options.ghosting) { - Position.relativize(this.element); - Element.remove(this._clone); - this._clone = null; - } - - if(success) Droppables.fire(event, this.element); - Draggables.notify('onEnd', this, event); - - var revert = this.options.revert; - if(revert && typeof revert == 'function') revert = revert(this.element); - - var d = this.currentDelta(); - if(revert && this.options.reverteffect) { - this.options.reverteffect(this.element, - d[1]-this.delta[1], d[0]-this.delta[0]); - } else { - this.delta = d; - } - - if(this.options.zindex) - this.element.style.zIndex = this.originalZ; - - if(this.options.endeffect) - this.options.endeffect(this.element); - - Draggables.deactivate(this); - Droppables.reset(); - }, - - keyPress: function(event) { - if(event.keyCode!=Event.KEY_ESC) return; - this.finishDrag(event, false); - Event.stop(event); - }, - - endDrag: function(event) { - if(!this.dragging) return; - this.stopScrolling(); - this.finishDrag(event, true); - Event.stop(event); - }, - - draw: function(point) { - var pos = Position.cumulativeOffset(this.element); - var d = this.currentDelta(); - pos[0] -= d[0]; pos[1] -= d[1]; - - if(this.options.scroll && (this.options.scroll != window)) { - pos[0] -= this.options.scroll.scrollLeft-this.originalScrollLeft; - pos[1] -= this.options.scroll.scrollTop-this.originalScrollTop; - } - - var p = [0,1].map(function(i){ - return (point[i]-pos[i]-this.offset[i]) - }.bind(this)); - - if(this.options.snap) { - if(typeof this.options.snap == 'function') { - p = this.options.snap(p[0],p[1],this); - } else { - if(this.options.snap instanceof Array) { - p = p.map( function(v, i) { - return Math.round(v/this.options.snap[i])*this.options.snap[i] }.bind(this)) - } else { - p = p.map( function(v) { - return Math.round(v/this.options.snap)*this.options.snap }.bind(this)) - } - }} - - var style = this.element.style; - if((!this.options.constraint) || (this.options.constraint=='horizontal')) - style.left = p[0] + "px"; - if((!this.options.constraint) || (this.options.constraint=='vertical')) - style.top = p[1] + "px"; - if(style.visibility=="hidden") style.visibility = ""; // fix gecko rendering - }, - - stopScrolling: function() { - if(this.scrollInterval) { - clearInterval(this.scrollInterval); - this.scrollInterval = null; - Draggables._lastScrollPointer = null; - } - }, - - startScrolling: function(speed) { - this.scrollSpeed = [speed[0]*this.options.scrollSpeed,speed[1]*this.options.scrollSpeed]; - this.lastScrolled = new Date(); - this.scrollInterval = setInterval(this.scroll.bind(this), 10); - }, - - scroll: function() { - var current = new Date(); - var delta = current - this.lastScrolled; - this.lastScrolled = current; - if(this.options.scroll == window) { - with (this._getWindowScroll(this.options.scroll)) { - if (this.scrollSpeed[0] || this.scrollSpeed[1]) { - var d = delta / 1000; - this.options.scroll.scrollTo( left + d*this.scrollSpeed[0], top + d*this.scrollSpeed[1] ); - } - } - } else { - this.options.scroll.scrollLeft += this.scrollSpeed[0] * delta / 1000; - this.options.scroll.scrollTop += this.scrollSpeed[1] * delta / 1000; - } - - Position.prepare(); - Droppables.show(Draggables._lastPointer, this.element); - Draggables.notify('onDrag', this); - Draggables._lastScrollPointer = Draggables._lastScrollPointer || $A(Draggables._lastPointer); - Draggables._lastScrollPointer[0] += this.scrollSpeed[0] * delta / 1000; - Draggables._lastScrollPointer[1] += this.scrollSpeed[1] * delta / 1000; - if (Draggables._lastScrollPointer[0] < 0) - Draggables._lastScrollPointer[0] = 0; - if (Draggables._lastScrollPointer[1] < 0) - Draggables._lastScrollPointer[1] = 0; - this.draw(Draggables._lastScrollPointer); - - if(this.options.change) this.options.change(this); - }, - - _getWindowScroll: function(w) { - var T, L, W, H; - with (w.document) { - if (w.document.documentElement && documentElement.scrollTop) { - T = documentElement.scrollTop; - L = documentElement.scrollLeft; - } else if (w.document.body) { - T = body.scrollTop; - L = body.scrollLeft; - } - if (w.innerWidth) { - W = w.innerWidth; - H = w.innerHeight; - } else if (w.document.documentElement && documentElement.clientWidth) { - W = documentElement.clientWidth; - H = documentElement.clientHeight; - } else { - W = body.offsetWidth; - H = body.offsetHeight - } - } - return { top: T, left: L, width: W, height: H }; - } -} - -/*--------------------------------------------------------------------------*/ - -var SortableObserver = Class.create(); -SortableObserver.prototype = { - initialize: function(element, observer) { - this.element = $PR(element); - this.observer = observer; - this.lastValue = Sortable.serialize(this.element); - }, - - onStart: function() { - this.lastValue = Sortable.serialize(this.element); - }, - - onEnd: function() { - Sortable.unmark(); - if(this.lastValue != Sortable.serialize(this.element)) - this.observer(this.element) - } -} - -var Sortable = { - sortables: {}, - - _findRootElement: function(element) { - while (element.tagName != "BODY") { - if(element.id && Sortable.sortables[element.id]) return element; - element = element.parentNode; - } - }, - - options: function(element) { - element = Sortable._findRootElement($PR(element)); - if(!element) return; - return Sortable.sortables[element.id]; - }, - - destroy: function(element){ - var s = Sortable.options(element); - - if(s) { - Draggables.removeObserver(s.element); - s.droppables.each(function(d){ Droppables.remove(d) }); - s.draggables.invoke('destroy'); - - delete Sortable.sortables[s.element.id]; - } - }, - - create: function(element) { - element = $PR(element); - var options = Object.extend({ - element: element, - tag: 'li', // assumes li children, override with tag: 'tagname' - dropOnEmpty: false, - tree: false, - treeTag: 'ul', - overlap: 'vertical', // one of 'vertical', 'horizontal' - constraint: 'vertical', // one of 'vertical', 'horizontal', false - containment: element, // also takes array of elements (or id's); or false - handle: false, // or a CSS class - only: false, - hoverclass: null, - ghosting: false, - scroll: false, - scrollSensitivity: 20, - scrollSpeed: 15, - format: /^[^_]*_(.*)$/, - onChange: Prototype.emptyFunction, - onUpdate: Prototype.emptyFunction - }, arguments[1] || {}); - - // clear any old sortable with same element - this.destroy(element); - - // build options for the draggables - var options_for_draggable = { - revert: true, - scroll: options.scroll, - scrollSpeed: options.scrollSpeed, - scrollSensitivity: options.scrollSensitivity, - ghosting: options.ghosting, - constraint: options.constraint, - handle: options.handle }; - - if(options.starteffect) - options_for_draggable.starteffect = options.starteffect; - - if(options.reverteffect) - options_for_draggable.reverteffect = options.reverteffect; - else - if(options.ghosting) options_for_draggable.reverteffect = function(element) { - element.style.top = 0; - element.style.left = 0; - }; - - if(options.endeffect) - options_for_draggable.endeffect = options.endeffect; - - if(options.zindex) - options_for_draggable.zindex = options.zindex; - - // build options for the droppables - var options_for_droppable = { - overlap: options.overlap, - containment: options.containment, - tree: options.tree, - hoverclass: options.hoverclass, - onHover: Sortable.onHover - //greedy: !options.dropOnEmpty - } - - var options_for_tree = { - onHover: Sortable.onEmptyHover, - overlap: options.overlap, - containment: options.containment, - hoverclass: options.hoverclass - } - - // fix for gecko engine - Element.cleanWhitespace(element); - - options.draggables = []; - options.droppables = []; - - // drop on empty handling - if(options.dropOnEmpty || options.tree) { - Droppables.add(element, options_for_tree); - options.droppables.push(element); - } - - (this.findElements(element, options) || []).each( function(e) { - // handles are per-draggable - var handle = options.handle ? - Element.childrenWithClassName(e, options.handle)[0] : e; - options.draggables.push( - new Draggable(e, Object.extend(options_for_draggable, { handle: handle }))); - Droppables.add(e, options_for_droppable); - if(options.tree) e.treeNode = element; - options.droppables.push(e); - }); - - if(options.tree) { - (Sortable.findTreeElements(element, options) || []).each( function(e) { - Droppables.add(e, options_for_tree); - e.treeNode = element; - options.droppables.push(e); - }); - } - - // keep reference - this.sortables[element.id] = options; - - // for onupdate - Draggables.addObserver(new SortableObserver(element, options.onUpdate)); - - }, - - // return all suitable-for-sortable elements in a guaranteed order - findElements: function(element, options) { - return Element.findChildren( - element, options.only, options.tree ? true : false, options.tag); - }, - - findTreeElements: function(element, options) { - return Element.findChildren( - element, options.only, options.tree ? true : false, options.treeTag); - }, - - onHover: function(element, dropon, overlap) { - if(Element.isParent(dropon, element)) return; - - if(overlap > .33 && overlap < .66 && Sortable.options(dropon).tree) { - return; - } else if(overlap>0.5) { - Sortable.mark(dropon, 'before'); - if(dropon.previousSibling != element) { - var oldParentNode = element.parentNode; - element.style.visibility = "hidden"; // fix gecko rendering - dropon.parentNode.insertBefore(element, dropon); - if(dropon.parentNode!=oldParentNode) - Sortable.options(oldParentNode).onChange(element); - Sortable.options(dropon.parentNode).onChange(element); - } - } else { - Sortable.mark(dropon, 'after'); - var nextElement = dropon.nextSibling || null; - if(nextElement != element) { - var oldParentNode = element.parentNode; - element.style.visibility = "hidden"; // fix gecko rendering - dropon.parentNode.insertBefore(element, nextElement); - if(dropon.parentNode!=oldParentNode) - Sortable.options(oldParentNode).onChange(element); - Sortable.options(dropon.parentNode).onChange(element); - } - } - }, - - onEmptyHover: function(element, dropon, overlap) { - var oldParentNode = element.parentNode; - var droponOptions = Sortable.options(dropon); - - if(!Element.isParent(dropon, element)) { - var index; - - var children = Sortable.findElements(dropon, {tag: droponOptions.tag}); - var child = null; - - if(children) { - var offset = Element.offsetSize(dropon, droponOptions.overlap) * (1.0 - overlap); - - for (index = 0; index < children.length; index += 1) { - if (offset - Element.offsetSize (children[index], droponOptions.overlap) >= 0) { - offset -= Element.offsetSize (children[index], droponOptions.overlap); - } else if (offset - (Element.offsetSize (children[index], droponOptions.overlap) / 2) >= 0) { - child = index + 1 < children.length ? children[index + 1] : null; - break; - } else { - child = children[index]; - break; - } - } - } - - dropon.insertBefore(element, child); - - Sortable.options(oldParentNode).onChange(element); - droponOptions.onChange(element); - } - }, - - unmark: function() { - if(Sortable._marker) Element.hide(Sortable._marker); - }, - - mark: function(dropon, position) { - // mark on ghosting only - var sortable = Sortable.options(dropon.parentNode); - if(sortable && !sortable.ghosting) return; - - if(!Sortable._marker) { - Sortable._marker = $PR('dropmarker') || document.createElement('DIV'); - Element.hide(Sortable._marker); - Element.addClassName(Sortable._marker, 'dropmarker'); - Sortable._marker.style.position = 'absolute'; - document.getElementsByTagName("body").item(0).appendChild(Sortable._marker); - } - var offsets = Position.cumulativeOffset(dropon); - Sortable._marker.style.left = offsets[0] + 'px'; - Sortable._marker.style.top = offsets[1] + 'px'; - - if(position=='after') - if(sortable.overlap == 'horizontal') - Sortable._marker.style.left = (offsets[0]+dropon.clientWidth) + 'px'; - else - Sortable._marker.style.top = (offsets[1]+dropon.clientHeight) + 'px'; - - Element.show(Sortable._marker); - }, - - _tree: function(element, options, parent) { - var children = Sortable.findElements(element, options) || []; - - for (var i = 0; i < children.length; ++i) { - var match = children[i].id.match(options.format); - - if (!match) continue; - - var child = { - id: encodeURIComponent(match ? match[1] : null), - element: element, - parent: parent, - children: new Array, - position: parent.children.length, - container: Sortable._findChildrenElement(children[i], options.treeTag.toUpperCase()) - } - - /* Get the element containing the children and recurse over it */ - if (child.container) - this._tree(child.container, options, child) - - parent.children.push (child); - } - - return parent; - }, - - /* Finds the first element of the given tag type within a parent element. - Used for finding the first LI[ST] within a L[IST]I[TEM].*/ - _findChildrenElement: function (element, containerTag) { - if (element && element.hasChildNodes) - for (var i = 0; i < element.childNodes.length; ++i) - if (element.childNodes[i].tagName == containerTag) - return element.childNodes[i]; - - return null; - }, - - tree: function(element) { - element = $PR(element); - var sortableOptions = this.options(element); - var options = Object.extend({ - tag: sortableOptions.tag, - treeTag: sortableOptions.treeTag, - only: sortableOptions.only, - name: element.id, - format: sortableOptions.format - }, arguments[1] || {}); - - var root = { - id: null, - parent: null, - children: new Array, - container: element, - position: 0 - } - - return Sortable._tree (element, options, root); - }, - - /* Construct a [i] index for a particular node */ - _constructIndex: function(node) { - var index = ''; - do { - if (node.id) index = '[' + node.position + ']' + index; - } while ((node = node.parent) != null); - return index; - }, - - sequence: function(element) { - element = $PR(element); - var options = Object.extend(this.options(element), arguments[1] || {}); - - return $PR(this.findElements(element, options) || []).map( function(item) { - return item.id.match(options.format) ? item.id.match(options.format)[1] : ''; - }); - }, - - setSequence: function(element, new_sequence) { - element = $PR(element); - var options = Object.extend(this.options(element), arguments[2] || {}); - - var nodeMap = {}; - this.findElements(element, options).each( function(n) { - if (n.id.match(options.format)) - nodeMap[n.id.match(options.format)[1]] = [n, n.parentNode]; - n.parentNode.removeChild(n); - }); - - new_sequence.each(function(ident) { - var n = nodeMap[ident]; - if (n) { - n[1].appendChild(n[0]); - delete nodeMap[ident]; - } - }); - }, - - serialize: function(element) { - element = $PR(element); - var options = Object.extend(Sortable.options(element), arguments[1] || {}); - var name = encodeURIComponent( - (arguments[1] && arguments[1].name) ? arguments[1].name : element.id); - - if (options.tree) { - return Sortable.tree(element, arguments[1]).children.map( function (item) { - return [name + Sortable._constructIndex(item) + "=" + - encodeURIComponent(item.id)].concat(item.children.map(arguments.callee)); - }).flatten().join('&'); - } else { - return Sortable.sequence(element, arguments[1]).map( function(item) { - return name + "[]=" + encodeURIComponent(item); - }).join('&'); - } - } -} - -/* Returns true if child is contained within element */ -Element.isParent = function(child, element) { - if (!child.parentNode || child == element) return false; - - if (child.parentNode == element) return true; - - return Element.isParent(child.parentNode, element); -} - -Element.findChildren = function(element, only, recursive, tagName) { - if(!element.hasChildNodes()) return null; - tagName = tagName.toUpperCase(); - if(only) only = [only].flatten(); - var elements = []; - $A(element.childNodes).each( function(e) { - if(e.tagName && e.tagName.toUpperCase()==tagName && - (!only || (Element.classNames(e).detect(function(v) { return only.include(v) })))) - elements.push(e); - if(recursive) { - var grandchildren = Element.findChildren(e, only, recursive, tagName); - if(grandchildren) elements.push(grandchildren); - } - }); - - return (elements.length>0 ? elements.flatten() : []); -} - -Element.offsetSize = function (element, type) { - if (type == 'vertical' || type == 'height') - return element.offsetHeight; - else - return element.offsetWidth; -} diff --git a/view/js/cropper/lib/effects.js b/view/js/cropper/lib/effects.js deleted file mode 100644 index 7e0407deb..000000000 --- a/view/js/cropper/lib/effects.js +++ /dev/null @@ -1,958 +0,0 @@ -// Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) -// Contributors: -// Justin Palmer (http://encytemedia.com/) -// Mark Pilgrim (http://diveintomark.org/) -// Martin Bialasinki -// -// See scriptaculous.js for full license. - -// converts rgb() and #xxx to #xxxxxx format, -// returns self (or first argument) if not convertable -String.prototype.parseColor = function() { - var color = '#'; - if(this.slice(0,4) == 'rgb(') { - var cols = this.slice(4,this.length-1).split(','); - var i=0; do { color += parseInt(cols[i]).toColorPart() } while (++i<3); - } else { - if(this.slice(0,1) == '#') { - if(this.length==4) for(var i=1;i<4;i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase(); - if(this.length==7) color = this.toLowerCase(); - } - } - return(color.length==7 ? color : (arguments[0] || this)); -} - -/*--------------------------------------------------------------------------*/ - -Element.collectTextNodes = function(element) { - return $A($PR(element).childNodes).collect( function(node) { - return (node.nodeType==3 ? node.nodeValue : - (node.hasChildNodes() ? Element.collectTextNodes(node) : '')); - }).flatten().join(''); -} - -Element.collectTextNodesIgnoreClass = function(element, className) { - return $A($PR(element).childNodes).collect( function(node) { - return (node.nodeType==3 ? node.nodeValue : - ((node.hasChildNodes() && !Element.hasClassName(node,className)) ? - Element.collectTextNodesIgnoreClass(node, className) : '')); - }).flatten().join(''); -} - -Element.setContentZoom = function(element, percent) { - element = $PR(element); - Element.setStyle(element, {fontSize: (percent/100) + 'em'}); - if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0); -} - -Element.getOpacity = function(element){ - var opacity; - if (opacity = Element.getStyle(element, 'opacity')) - return parseFloat(opacity); - if (opacity = (Element.getStyle(element, 'filter') || '').match(/alpha\(opacity=(.*)\)/)) - if(opacity[1]) return parseFloat(opacity[1]) / 100; - return 1.0; -} - -Element.setOpacity = function(element, value){ - element= $PR(element); - if (value == 1){ - Element.setStyle(element, { opacity: - (/Gecko/.test(navigator.userAgent) && !/Konqueror|Safari|KHTML/.test(navigator.userAgent)) ? - 0.999999 : null }); - if(/MSIE/.test(navigator.userAgent)) - Element.setStyle(element, {filter: Element.getStyle(element,'filter').replace(/alpha\([^\)]*\)/gi,'')}); - } else { - if(value < 0.00001) value = 0; - Element.setStyle(element, {opacity: value}); - if(/MSIE/.test(navigator.userAgent)) - Element.setStyle(element, - { filter: Element.getStyle(element,'filter').replace(/alpha\([^\)]*\)/gi,'') + - 'alpha(opacity='+value*100+')' }); - } -} - -Element.getInlineOpacity = function(element){ - return $PR(element).style.opacity || ''; -} - -Element.childrenWithClassName = function(element, className, findFirst) { - var classNameRegExp = new RegExp("(^|\\s)" + className + "(\\s|$)"); - var results = $A($PR(element).getElementsByTagName('*'))[findFirst ? 'detect' : 'select']( function(c) { - return (c.className && c.className.match(classNameRegExp)); - }); - if(!results) results = []; - return results; -} - -Element.forceRerendering = function(element) { - try { - element = $PR(element); - var n = document.createTextNode(' '); - element.appendChild(n); - element.removeChild(n); - } catch(e) { } -}; - -/*--------------------------------------------------------------------------*/ - -Array.prototype.call = function() { - var args = arguments; - this.each(function(f){ f.apply(this, args) }); -} - -/*--------------------------------------------------------------------------*/ - -var Effect = { - tagifyText: function(element) { - var tagifyStyle = 'position:relative'; - if(/MSIE/.test(navigator.userAgent)) tagifyStyle += ';zoom:1'; - element = $PR(element); - $A(element.childNodes).each( function(child) { - if(child.nodeType==3) { - child.nodeValue.toArray().each( function(character) { - element.insertBefore( - Builder.node('span',{style: tagifyStyle}, - character == ' ' ? String.fromCharCode(160) : character), - child); - }); - Element.remove(child); - } - }); - }, - multiple: function(element, effect) { - var elements; - if(((typeof element == 'object') || - (typeof element == 'function')) && - (element.length)) - elements = element; - else - elements = $PR(element).childNodes; - - var options = Object.extend({ - speed: 0.1, - delay: 0.0 - }, arguments[2] || {}); - var masterDelay = options.delay; - - $A(elements).each( function(element, index) { - new effect(element, Object.extend(options, { delay: index * options.speed + masterDelay })); - }); - }, - PAIRS: { - 'slide': ['SlideDown','SlideUp'], - 'blind': ['BlindDown','BlindUp'], - 'appear': ['Appear','Fade'] - }, - toggle: function(element, effect) { - element = $PR(element); - effect = (effect || 'appear').toLowerCase(); - var options = Object.extend({ - queue: { position:'end', scope:(element.id || 'global'), limit: 1 } - }, arguments[2] || {}); - Effect[element.visible() ? - Effect.PAIRS[effect][1] : Effect.PAIRS[effect][0]](element, options); - } -}; - -var Effect2 = Effect; // deprecated - -/* ------------- transitions ------------- */ - -Effect.Transitions = {} - -Effect.Transitions.linear = function(pos) { - return pos; -} -Effect.Transitions.sinoidal = function(pos) { - return (-Math.cos(pos*Math.PI)/2) + 0.5; -} -Effect.Transitions.reverse = function(pos) { - return 1-pos; -} -Effect.Transitions.flicker = function(pos) { - return ((-Math.cos(pos*Math.PI)/4) + 0.75) + Math.random()/4; -} -Effect.Transitions.wobble = function(pos) { - return (-Math.cos(pos*Math.PI*(9*pos))/2) + 0.5; -} -Effect.Transitions.pulse = function(pos) { - return (Math.floor(pos*10) % 2 == 0 ? - (pos*10-Math.floor(pos*10)) : 1-(pos*10-Math.floor(pos*10))); -} -Effect.Transitions.none = function(pos) { - return 0; -} -Effect.Transitions.full = function(pos) { - return 1; -} - -/* ------------- core effects ------------- */ - -Effect.ScopedQueue = Class.create(); -Object.extend(Object.extend(Effect.ScopedQueue.prototype, Enumerable), { - initialize: function() { - this.effects = []; - this.interval = null; - }, - _each: function(iterator) { - this.effects._each(iterator); - }, - add: function(effect) { - var timestamp = new Date().getTime(); - - var position = (typeof effect.options.queue == 'string') ? - effect.options.queue : effect.options.queue.position; - - switch(position) { - case 'front': - // move unstarted effects after this effect - this.effects.findAll(function(e){ return e.state=='idle' }).each( function(e) { - e.startOn += effect.finishOn; - e.finishOn += effect.finishOn; - }); - break; - case 'end': - // start effect after last queued effect has finished - timestamp = this.effects.pluck('finishOn').max() || timestamp; - break; - } - - effect.startOn += timestamp; - effect.finishOn += timestamp; - - if(!effect.options.queue.limit || (this.effects.length < effect.options.queue.limit)) - this.effects.push(effect); - - if(!this.interval) - this.interval = setInterval(this.loop.bind(this), 40); - }, - remove: function(effect) { - this.effects = this.effects.reject(function(e) { return e==effect }); - if(this.effects.length == 0) { - clearInterval(this.interval); - this.interval = null; - } - }, - loop: function() { - var timePos = new Date().getTime(); - this.effects.invoke('loop', timePos); - } -}); - -Effect.Queues = { - instances: $H(), - get: function(queueName) { - if(typeof queueName != 'string') return queueName; - - if(!this.instances[queueName]) - this.instances[queueName] = new Effect.ScopedQueue(); - - return this.instances[queueName]; - } -} -Effect.Queue = Effect.Queues.get('global'); - -Effect.DefaultOptions = { - transition: Effect.Transitions.sinoidal, - duration: 1.0, // seconds - fps: 25.0, // max. 25fps due to Effect.Queue implementation - sync: false, // true for combining - from: 0.0, - to: 1.0, - delay: 0.0, - queue: 'parallel' -} - -Effect.Base = function() {}; -Effect.Base.prototype = { - position: null, - start: function(options) { - this.options = Object.extend(Object.extend({},Effect.DefaultOptions), options || {}); - this.currentFrame = 0; - this.state = 'idle'; - this.startOn = this.options.delay*1000; - this.finishOn = this.startOn + (this.options.duration*1000); - this.event('beforeStart'); - if(!this.options.sync) - Effect.Queues.get(typeof this.options.queue == 'string' ? - 'global' : this.options.queue.scope).add(this); - }, - loop: function(timePos) { - if(timePos >= this.startOn) { - if(timePos >= this.finishOn) { - this.render(1.0); - this.cancel(); - this.event('beforeFinish'); - if(this.finish) this.finish(); - this.event('afterFinish'); - return; - } - var pos = (timePos - this.startOn) / (this.finishOn - this.startOn); - var frame = Math.round(pos * this.options.fps * this.options.duration); - if(frame > this.currentFrame) { - this.render(pos); - this.currentFrame = frame; - } - } - }, - render: function(pos) { - if(this.state == 'idle') { - this.state = 'running'; - this.event('beforeSetup'); - if(this.setup) this.setup(); - this.event('afterSetup'); - } - if(this.state == 'running') { - if(this.options.transition) pos = this.options.transition(pos); - pos *= (this.options.to-this.options.from); - pos += this.options.from; - this.position = pos; - this.event('beforeUpdate'); - if(this.update) this.update(pos); - this.event('afterUpdate'); - } - }, - cancel: function() { - if(!this.options.sync) - Effect.Queues.get(typeof this.options.queue == 'string' ? - 'global' : this.options.queue.scope).remove(this); - this.state = 'finished'; - }, - event: function(eventName) { - if(this.options[eventName + 'Internal']) this.options[eventName + 'Internal'](this); - if(this.options[eventName]) this.options[eventName](this); - }, - inspect: function() { - return '#'; - } -} - -Effect.Parallel = Class.create(); -Object.extend(Object.extend(Effect.Parallel.prototype, Effect.Base.prototype), { - initialize: function(effects) { - this.effects = effects || []; - this.start(arguments[1]); - }, - update: function(position) { - this.effects.invoke('render', position); - }, - finish: function(position) { - this.effects.each( function(effect) { - effect.render(1.0); - effect.cancel(); - effect.event('beforeFinish'); - if(effect.finish) effect.finish(position); - effect.event('afterFinish'); - }); - } -}); - -Effect.Opacity = Class.create(); -Object.extend(Object.extend(Effect.Opacity.prototype, Effect.Base.prototype), { - initialize: function(element) { - this.element = $PR(element); - // make this work on IE on elements without 'layout' - if(/MSIE/.test(navigator.userAgent) && (!this.element.hasLayout)) - this.element.setStyle({zoom: 1}); - var options = Object.extend({ - from: this.element.getOpacity() || 0.0, - to: 1.0 - }, arguments[1] || {}); - this.start(options); - }, - update: function(position) { - this.element.setOpacity(position); - } -}); - -Effect.Move = Class.create(); -Object.extend(Object.extend(Effect.Move.prototype, Effect.Base.prototype), { - initialize: function(element) { - this.element = $PR(element); - var options = Object.extend({ - x: 0, - y: 0, - mode: 'relative' - }, arguments[1] || {}); - this.start(options); - }, - setup: function() { - // Bug in Opera: Opera returns the "real" position of a static element or - // relative element that does not have top/left explicitly set. - // ==> Always set top and left for position relative elements in your stylesheets - // (to 0 if you do not need them) - this.element.makePositioned(); - this.originalLeft = parseFloat(this.element.getStyle('left') || '0'); - this.originalTop = parseFloat(this.element.getStyle('top') || '0'); - if(this.options.mode == 'absolute') { - // absolute movement, so we need to calc deltaX and deltaY - this.options.x = this.options.x - this.originalLeft; - this.options.y = this.options.y - this.originalTop; - } - }, - update: function(position) { - this.element.setStyle({ - left: this.options.x * position + this.originalLeft + 'px', - top: this.options.y * position + this.originalTop + 'px' - }); - } -}); - -// for backwards compatibility -Effect.MoveBy = function(element, toTop, toLeft) { - return new Effect.Move(element, - Object.extend({ x: toLeft, y: toTop }, arguments[3] || {})); -}; - -Effect.Scale = Class.create(); -Object.extend(Object.extend(Effect.Scale.prototype, Effect.Base.prototype), { - initialize: function(element, percent) { - this.element = $PR(element) - var options = Object.extend({ - scaleX: true, - scaleY: true, - scaleContent: true, - scaleFromCenter: false, - scaleMode: 'box', // 'box' or 'contents' or {} with provided values - scaleFrom: 100.0, - scaleTo: percent - }, arguments[2] || {}); - this.start(options); - }, - setup: function() { - this.restoreAfterFinish = this.options.restoreAfterFinish || false; - this.elementPositioning = this.element.getStyle('position'); - - this.originalStyle = {}; - ['top','left','width','height','fontSize'].each( function(k) { - this.originalStyle[k] = this.element.style[k]; - }.bind(this)); - - this.originalTop = this.element.offsetTop; - this.originalLeft = this.element.offsetLeft; - - var fontSize = this.element.getStyle('font-size') || '100%'; - ['em','px','%'].each( function(fontSizeType) { - if(fontSize.indexOf(fontSizeType)>0) { - this.fontSize = parseFloat(fontSize); - this.fontSizeType = fontSizeType; - } - }.bind(this)); - - this.factor = (this.options.scaleTo - this.options.scaleFrom)/100; - - this.dims = null; - if(this.options.scaleMode=='box') - this.dims = [this.element.offsetHeight, this.element.offsetWidth]; - if(/^content/.test(this.options.scaleMode)) - this.dims = [this.element.scrollHeight, this.element.scrollWidth]; - if(!this.dims) - this.dims = [this.options.scaleMode.originalHeight, - this.options.scaleMode.originalWidth]; - }, - update: function(position) { - var currentScale = (this.options.scaleFrom/100.0) + (this.factor * position); - if(this.options.scaleContent && this.fontSize) - this.element.setStyle({fontSize: this.fontSize * currentScale + this.fontSizeType }); - this.setDimensions(this.dims[0] * currentScale, this.dims[1] * currentScale); - }, - finish: function(position) { - if (this.restoreAfterFinish) this.element.setStyle(this.originalStyle); - }, - setDimensions: function(height, width) { - var d = {}; - if(this.options.scaleX) d.width = width + 'px'; - if(this.options.scaleY) d.height = height + 'px'; - if(this.options.scaleFromCenter) { - var topd = (height - this.dims[0])/2; - var leftd = (width - this.dims[1])/2; - if(this.elementPositioning == 'absolute') { - if(this.options.scaleY) d.top = this.originalTop-topd + 'px'; - if(this.options.scaleX) d.left = this.originalLeft-leftd + 'px'; - } else { - if(this.options.scaleY) d.top = -topd + 'px'; - if(this.options.scaleX) d.left = -leftd + 'px'; - } - } - this.element.setStyle(d); - } -}); - -Effect.Highlight = Class.create(); -Object.extend(Object.extend(Effect.Highlight.prototype, Effect.Base.prototype), { - initialize: function(element) { - this.element = $PR(element); - var options = Object.extend({ startcolor: '#ffff99' }, arguments[1] || {}); - this.start(options); - }, - setup: function() { - // Prevent executing on elements not in the layout flow - if(this.element.getStyle('display')=='none') { this.cancel(); return; } - // Disable background image during the effect - this.oldStyle = { - backgroundImage: this.element.getStyle('background-image') }; - this.element.setStyle({backgroundImage: 'none'}); - if(!this.options.endcolor) - this.options.endcolor = this.element.getStyle('background-color').parseColor('#ffffff'); - if(!this.options.restorecolor) - this.options.restorecolor = this.element.getStyle('background-color'); - // init color calculations - this._base = $R(0,2).map(function(i){ return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16) }.bind(this)); - this._delta = $R(0,2).map(function(i){ return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i] }.bind(this)); - }, - update: function(position) { - this.element.setStyle({backgroundColor: $R(0,2).inject('#',function(m,v,i){ - return m+(Math.round(this._base[i]+(this._delta[i]*position)).toColorPart()); }.bind(this)) }); - }, - finish: function() { - this.element.setStyle(Object.extend(this.oldStyle, { - backgroundColor: this.options.restorecolor - })); - } -}); - -Effect.ScrollTo = Class.create(); -Object.extend(Object.extend(Effect.ScrollTo.prototype, Effect.Base.prototype), { - initialize: function(element) { - this.element = $PR(element); - this.start(arguments[1] || {}); - }, - setup: function() { - Position.prepare(); - var offsets = Position.cumulativeOffset(this.element); - if(this.options.offset) offsets[1] += this.options.offset; - var max = window.innerHeight ? - window.height - window.innerHeight : - document.body.scrollHeight - - (document.documentElement.clientHeight ? - document.documentElement.clientHeight : document.body.clientHeight); - this.scrollStart = Position.deltaY; - this.delta = (offsets[1] > max ? max : offsets[1]) - this.scrollStart; - }, - update: function(position) { - Position.prepare(); - window.scrollTo(Position.deltaX, - this.scrollStart + (position*this.delta)); - } -}); - -/* ------------- combination effects ------------- */ - -Effect.Fade = function(element) { - element = $PR(element); - var oldOpacity = element.getInlineOpacity(); - var options = Object.extend({ - from: element.getOpacity() || 1.0, - to: 0.0, - afterFinishInternal: function(effect) { - if(effect.options.to!=0) return; - effect.element.hide(); - effect.element.setStyle({opacity: oldOpacity}); - }}, arguments[1] || {}); - return new Effect.Opacity(element,options); -} - -Effect.Appear = function(element) { - element = $PR(element); - var options = Object.extend({ - from: (element.getStyle('display') == 'none' ? 0.0 : element.getOpacity() || 0.0), - to: 1.0, - // force Safari to render floated elements properly - afterFinishInternal: function(effect) { - effect.element.forceRerendering(); - }, - beforeSetup: function(effect) { - effect.element.setOpacity(effect.options.from); - effect.element.show(); - }}, arguments[1] || {}); - return new Effect.Opacity(element,options); -} - -Effect.Puff = function(element) { - element = $PR(element); - var oldStyle = { opacity: element.getInlineOpacity(), position: element.getStyle('position') }; - return new Effect.Parallel( - [ new Effect.Scale(element, 200, - { sync: true, scaleFromCenter: true, scaleContent: true, restoreAfterFinish: true }), - new Effect.Opacity(element, { sync: true, to: 0.0 } ) ], - Object.extend({ duration: 1.0, - beforeSetupInternal: function(effect) { - effect.effects[0].element.setStyle({position: 'absolute'}); }, - afterFinishInternal: function(effect) { - effect.effects[0].element.hide(); - effect.effects[0].element.setStyle(oldStyle); } - }, arguments[1] || {}) - ); -} - -Effect.BlindUp = function(element) { - element = $PR(element); - element.makeClipping(); - return new Effect.Scale(element, 0, - Object.extend({ scaleContent: false, - scaleX: false, - restoreAfterFinish: true, - afterFinishInternal: function(effect) { - effect.element.hide(); - effect.element.undoClipping(); - } - }, arguments[1] || {}) - ); -} - -Effect.BlindDown = function(element) { - element = $PR(element); - var elementDimensions = element.getDimensions(); - return new Effect.Scale(element, 100, - Object.extend({ scaleContent: false, - scaleX: false, - scaleFrom: 0, - scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width}, - restoreAfterFinish: true, - afterSetup: function(effect) { - effect.element.makeClipping(); - effect.element.setStyle({height: '0px'}); - effect.element.show(); - }, - afterFinishInternal: function(effect) { - effect.element.undoClipping(); - } - }, arguments[1] || {}) - ); -} - -Effect.SwitchOff = function(element) { - element = $PR(element); - var oldOpacity = element.getInlineOpacity(); - return new Effect.Appear(element, { - duration: 0.4, - from: 0, - transition: Effect.Transitions.flicker, - afterFinishInternal: function(effect) { - new Effect.Scale(effect.element, 1, { - duration: 0.3, scaleFromCenter: true, - scaleX: false, scaleContent: false, restoreAfterFinish: true, - beforeSetup: function(effect) { - effect.element.makePositioned(); - effect.element.makeClipping(); - }, - afterFinishInternal: function(effect) { - effect.element.hide(); - effect.element.undoClipping(); - effect.element.undoPositioned(); - effect.element.setStyle({opacity: oldOpacity}); - } - }) - } - }); -} - -Effect.DropOut = function(element) { - element = $PR(element); - var oldStyle = { - top: element.getStyle('top'), - left: element.getStyle('left'), - opacity: element.getInlineOpacity() }; - return new Effect.Parallel( - [ new Effect.Move(element, {x: 0, y: 100, sync: true }), - new Effect.Opacity(element, { sync: true, to: 0.0 }) ], - Object.extend( - { duration: 0.5, - beforeSetup: function(effect) { - effect.effects[0].element.makePositioned(); - }, - afterFinishInternal: function(effect) { - effect.effects[0].element.hide(); - effect.effects[0].element.undoPositioned(); - effect.effects[0].element.setStyle(oldStyle); - } - }, arguments[1] || {})); -} - -Effect.Shake = function(element) { - element = $PR(element); - var oldStyle = { - top: element.getStyle('top'), - left: element.getStyle('left') }; - return new Effect.Move(element, - { x: 20, y: 0, duration: 0.05, afterFinishInternal: function(effect) { - new Effect.Move(effect.element, - { x: -40, y: 0, duration: 0.1, afterFinishInternal: function(effect) { - new Effect.Move(effect.element, - { x: 40, y: 0, duration: 0.1, afterFinishInternal: function(effect) { - new Effect.Move(effect.element, - { x: -40, y: 0, duration: 0.1, afterFinishInternal: function(effect) { - new Effect.Move(effect.element, - { x: 40, y: 0, duration: 0.1, afterFinishInternal: function(effect) { - new Effect.Move(effect.element, - { x: -20, y: 0, duration: 0.05, afterFinishInternal: function(effect) { - effect.element.undoPositioned(); - effect.element.setStyle(oldStyle); - }}) }}) }}) }}) }}) }}); -} - -Effect.SlideDown = function(element) { - element = $PR(element); - element.cleanWhitespace(); - // SlideDown need to have the content of the element wrapped in a container element with fixed height! - var oldInnerBottom = $PR(element.firstChild).getStyle('bottom'); - var elementDimensions = element.getDimensions(); - return new Effect.Scale(element, 100, Object.extend({ - scaleContent: false, - scaleX: false, - scaleFrom: window.opera ? 0 : 1, - scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width}, - restoreAfterFinish: true, - afterSetup: function(effect) { - effect.element.makePositioned(); - effect.element.firstChild.makePositioned(); - if(window.opera) effect.element.setStyle({top: ''}); - effect.element.makeClipping(); - effect.element.setStyle({height: '0px'}); - effect.element.show(); }, - afterUpdateInternal: function(effect) { - effect.element.firstChild.setStyle({bottom: - (effect.dims[0] - effect.element.clientHeight) + 'px' }); - }, - afterFinishInternal: function(effect) { - effect.element.undoClipping(); - // IE will crash if child is undoPositioned first - if(/MSIE/.test(navigator.userAgent)){ - effect.element.undoPositioned(); - effect.element.firstChild.undoPositioned(); - }else{ - effect.element.firstChild.undoPositioned(); - effect.element.undoPositioned(); - } - effect.element.firstChild.setStyle({bottom: oldInnerBottom}); } - }, arguments[1] || {}) - ); -} - -Effect.SlideUp = function(element) { - element = $PR(element); - element.cleanWhitespace(); - var oldInnerBottom = $PR(element.firstChild).getStyle('bottom'); - return new Effect.Scale(element, window.opera ? 0 : 1, - Object.extend({ scaleContent: false, - scaleX: false, - scaleMode: 'box', - scaleFrom: 100, - restoreAfterFinish: true, - beforeStartInternal: function(effect) { - effect.element.makePositioned(); - effect.element.firstChild.makePositioned(); - if(window.opera) effect.element.setStyle({top: ''}); - effect.element.makeClipping(); - effect.element.show(); }, - afterUpdateInternal: function(effect) { - effect.element.firstChild.setStyle({bottom: - (effect.dims[0] - effect.element.clientHeight) + 'px' }); }, - afterFinishInternal: function(effect) { - effect.element.hide(); - effect.element.undoClipping(); - effect.element.firstChild.undoPositioned(); - effect.element.undoPositioned(); - effect.element.setStyle({bottom: oldInnerBottom}); } - }, arguments[1] || {}) - ); -} - -// Bug in opera makes the TD containing this element expand for a instance after finish -Effect.Squish = function(element) { - return new Effect.Scale(element, window.opera ? 1 : 0, - { restoreAfterFinish: true, - beforeSetup: function(effect) { - effect.element.makeClipping(effect.element); }, - afterFinishInternal: function(effect) { - effect.element.hide(effect.element); - effect.element.undoClipping(effect.element); } - }); -} - -Effect.Grow = function(element) { - element = $PR(element); - var options = Object.extend({ - direction: 'center', - moveTransition: Effect.Transitions.sinoidal, - scaleTransition: Effect.Transitions.sinoidal, - opacityTransition: Effect.Transitions.full - }, arguments[1] || {}); - var oldStyle = { - top: element.style.top, - left: element.style.left, - height: element.style.height, - width: element.style.width, - opacity: element.getInlineOpacity() }; - - var dims = element.getDimensions(); - var initialMoveX, initialMoveY; - var moveX, moveY; - - switch (options.direction) { - case 'top-left': - initialMoveX = initialMoveY = moveX = moveY = 0; - break; - case 'top-right': - initialMoveX = dims.width; - initialMoveY = moveY = 0; - moveX = -dims.width; - break; - case 'bottom-left': - initialMoveX = moveX = 0; - initialMoveY = dims.height; - moveY = -dims.height; - break; - case 'bottom-right': - initialMoveX = dims.width; - initialMoveY = dims.height; - moveX = -dims.width; - moveY = -dims.height; - break; - case 'center': - initialMoveX = dims.width / 2; - initialMoveY = dims.height / 2; - moveX = -dims.width / 2; - moveY = -dims.height / 2; - break; - } - - return new Effect.Move(element, { - x: initialMoveX, - y: initialMoveY, - duration: 0.01, - beforeSetup: function(effect) { - effect.element.hide(); - effect.element.makeClipping(); - effect.element.makePositioned(); - }, - afterFinishInternal: function(effect) { - new Effect.Parallel( - [ new Effect.Opacity(effect.element, { sync: true, to: 1.0, from: 0.0, transition: options.opacityTransition }), - new Effect.Move(effect.element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }), - new Effect.Scale(effect.element, 100, { - scaleMode: { originalHeight: dims.height, originalWidth: dims.width }, - sync: true, scaleFrom: window.opera ? 1 : 0, transition: options.scaleTransition, restoreAfterFinish: true}) - ], Object.extend({ - beforeSetup: function(effect) { - effect.effects[0].element.setStyle({height: '0px'}); - effect.effects[0].element.show(); - }, - afterFinishInternal: function(effect) { - effect.effects[0].element.undoClipping(); - effect.effects[0].element.undoPositioned(); - effect.effects[0].element.setStyle(oldStyle); - } - }, options) - ) - } - }); -} - -Effect.Shrink = function(element) { - element = $PR(element); - var options = Object.extend({ - direction: 'center', - moveTransition: Effect.Transitions.sinoidal, - scaleTransition: Effect.Transitions.sinoidal, - opacityTransition: Effect.Transitions.none - }, arguments[1] || {}); - var oldStyle = { - top: element.style.top, - left: element.style.left, - height: element.style.height, - width: element.style.width, - opacity: element.getInlineOpacity() }; - - var dims = element.getDimensions(); - var moveX, moveY; - - switch (options.direction) { - case 'top-left': - moveX = moveY = 0; - break; - case 'top-right': - moveX = dims.width; - moveY = 0; - break; - case 'bottom-left': - moveX = 0; - moveY = dims.height; - break; - case 'bottom-right': - moveX = dims.width; - moveY = dims.height; - break; - case 'center': - moveX = dims.width / 2; - moveY = dims.height / 2; - break; - } - - return new Effect.Parallel( - [ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, transition: options.opacityTransition }), - new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, transition: options.scaleTransition, restoreAfterFinish: true}), - new Effect.Move(element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }) - ], Object.extend({ - beforeStartInternal: function(effect) { - effect.effects[0].element.makePositioned(); - effect.effects[0].element.makeClipping(); }, - afterFinishInternal: function(effect) { - effect.effects[0].element.hide(); - effect.effects[0].element.undoClipping(); - effect.effects[0].element.undoPositioned(); - effect.effects[0].element.setStyle(oldStyle); } - }, options) - ); -} - -Effect.Pulsate = function(element) { - element = $PR(element); - var options = arguments[1] || {}; - var oldOpacity = element.getInlineOpacity(); - var transition = options.transition || Effect.Transitions.sinoidal; - var reverser = function(pos){ return transition(1-Effect.Transitions.pulse(pos)) }; - reverser.bind(transition); - return new Effect.Opacity(element, - Object.extend(Object.extend({ duration: 3.0, from: 0, - afterFinishInternal: function(effect) { effect.element.setStyle({opacity: oldOpacity}); } - }, options), {transition: reverser})); -} - -Effect.Fold = function(element) { - element = $PR(element); - var oldStyle = { - top: element.style.top, - left: element.style.left, - width: element.style.width, - height: element.style.height }; - Element.makeClipping(element); - return new Effect.Scale(element, 5, Object.extend({ - scaleContent: false, - scaleX: false, - afterFinishInternal: function(effect) { - new Effect.Scale(element, 1, { - scaleContent: false, - scaleY: false, - afterFinishInternal: function(effect) { - effect.element.hide(); - effect.element.undoClipping(); - effect.element.setStyle(oldStyle); - } }); - }}, arguments[1] || {})); -}; - -['setOpacity','getOpacity','getInlineOpacity','forceRerendering','setContentZoom', - 'collectTextNodes','collectTextNodesIgnoreClass','childrenWithClassName'].each( - function(f) { Element.Methods[f] = Element[f]; } -); - -Element.Methods.visualEffect = function(element, effect, options) { - s = effect.gsub(/_/, '-').camelize(); - effect_class = s.charAt(0).toUpperCase() + s.substring(1); - new Effect[effect_class](element, options); - return $PR(element); -}; - -Element.addMethods(); diff --git a/view/js/cropper/lib/prototype.js b/view/js/cropper/lib/prototype.js deleted file mode 100644 index 668206587..000000000 --- a/view/js/cropper/lib/prototype.js +++ /dev/null @@ -1,2006 +0,0 @@ -/* Prototype JavaScript framework, version 1.5.0_rc0 - * (c) 2005 Sam Stephenson - * - * Prototype is freely distributable under the terms of an MIT-style license. - * For details, see the Prototype web site: http://prototype.conio.net/ - * -/*--------------------------------------------------------------------------*/ - -var Prototype = { - Version: '1.5.0_rc0', - ScriptFragment: '(?:)((\n|\r|.)*?)(?:<\/script>)', - - emptyFunction: function() {}, - K: function(x) {return x} -} - -var Class = { - create: function() { - return function() { - this.initialize.apply(this, arguments); - } - } -} - -var Abstract = new Object(); - -Object.extend = function(destination, source) { - for (var property in source) { - destination[property] = source[property]; - } - return destination; -} - -Object.inspect = function(object) { - try { - if (object == undefined) return 'undefined'; - if (object == null) return 'null'; - return object.inspect ? object.inspect() : object.toString(); - } catch (e) { - if (e instanceof RangeError) return '...'; - throw e; - } -} - -Function.prototype.bind = function() { - var __method = this, args = $A(arguments), object = args.shift(); - return function() { - return __method.apply(object, args.concat($A(arguments))); - } -} - -Function.prototype.bindAsEventListener = function(object) { - var __method = this; - return function(event) { - return __method.call(object, event || window.event); - } -} - -Object.extend(Number.prototype, { - toColorPart: function() { - var digits = this.toString(16); - if (this < 16) return '0' + digits; - return digits; - }, - - succ: function() { - return this + 1; - }, - - times: function(iterator) { - $R(0, this, true).each(iterator); - return this; - } -}); - -var Try = { - these: function() { - var returnValue; - - for (var i = 0; i < arguments.length; i++) { - var lambda = arguments[i]; - try { - returnValue = lambda(); - break; - } catch (e) {} - } - - return returnValue; - } -} - -/*--------------------------------------------------------------------------*/ - -var PeriodicalExecuter = Class.create(); -PeriodicalExecuter.prototype = { - initialize: function(callback, frequency) { - this.callback = callback; - this.frequency = frequency; - this.currentlyExecuting = false; - - this.registerCallback(); - }, - - registerCallback: function() { - setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); - }, - - onTimerEvent: function() { - if (!this.currentlyExecuting) { - try { - this.currentlyExecuting = true; - this.callback(); - } finally { - this.currentlyExecuting = false; - } - } - } -} -Object.extend(String.prototype, { - gsub: function(pattern, replacement) { - var result = '', source = this, match; - replacement = arguments.callee.prepareReplacement(replacement); - - while (source.length > 0) { - if (match = source.match(pattern)) { - result += source.slice(0, match.index); - result += (replacement(match) || '').toString(); - source = source.slice(match.index + match[0].length); - } else { - result += source, source = ''; - } - } - return result; - }, - - sub: function(pattern, replacement, count) { - replacement = this.gsub.prepareReplacement(replacement); - count = count === undefined ? 1 : count; - - return this.gsub(pattern, function(match) { - if (--count < 0) return match[0]; - return replacement(match); - }); - }, - - scan: function(pattern, iterator) { - this.gsub(pattern, iterator); - return this; - }, - - truncate: function(length, truncation) { - length = length || 30; - truncation = truncation === undefined ? '...' : truncation; - return this.length > length ? - this.slice(0, length - truncation.length) + truncation : this; - }, - - strip: function() { - return this.replace(/^\s+/, '').replace(/\s+$/, ''); - }, - - stripTags: function() { - return this.replace(/<\/?[^>]+>/gi, ''); - }, - - stripScripts: function() { - return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), ''); - }, - - extractScripts: function() { - var matchAll = new RegExp(Prototype.ScriptFragment, 'img'); - var matchOne = new RegExp(Prototype.ScriptFragment, 'im'); - return (this.match(matchAll) || []).map(function(scriptTag) { - return (scriptTag.match(matchOne) || ['', ''])[1]; - }); - }, - - evalScripts: function() { - return this.extractScripts().map(function(script) { return eval(script) }); - }, - - escapeHTML: function() { - var div = document.createElement('div'); - var text = document.createTextNode(this); - div.appendChild(text); - return div.innerHTML; - }, - - unescapeHTML: function() { - var div = document.createElement('div'); - div.innerHTML = this.stripTags(); - return div.childNodes[0] ? div.childNodes[0].nodeValue : ''; - }, - - toQueryParams: function() { - var pairs = this.match(/^\??(.*)$/)[1].split('&'); - return pairs.inject({}, function(params, pairString) { - var pair = pairString.split('='); - params[pair[0]] = pair[1]; - return params; - }); - }, - - toArray: function() { - return this.split(''); - }, - - camelize: function() { - var oStringList = this.split('-'); - if (oStringList.length == 1) return oStringList[0]; - - var camelizedString = this.indexOf('-') == 0 - ? oStringList[0].charAt(0).toUpperCase() + oStringList[0].substring(1) - : oStringList[0]; - - for (var i = 1, len = oStringList.length; i < len; i++) { - var s = oStringList[i]; - camelizedString += s.charAt(0).toUpperCase() + s.substring(1); - } - - return camelizedString; - }, - - inspect: function() { - return "'" + this.replace(/\\/g, '\\\\').replace(/'/g, '\\\'') + "'"; - } -}); - -String.prototype.gsub.prepareReplacement = function(replacement) { - if (typeof replacement == 'function') return replacement; - var template = new Template(replacement); - return function(match) { return template.evaluate(match) }; -} - -String.prototype.parseQuery = String.prototype.toQueryParams; - -var Template = Class.create(); -Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/; -Template.prototype = { - initialize: function(template, pattern) { - this.template = template.toString(); - this.pattern = pattern || Template.Pattern; - }, - - evaluate: function(object) { - return this.template.gsub(this.pattern, function(match) { - var before = match[1]; - if (before == '\\') return match[2]; - return before + (object[match[3]] || '').toString(); - }); - } -} - -var $break = new Object(); -var $continue = new Object(); - -var Enumerable = { - each: function(iterator) { - var index = 0; - try { - this._each(function(value) { - try { - iterator(value, index++); - } catch (e) { - if (e != $continue) throw e; - } - }); - } catch (e) { - if (e != $break) throw e; - } - }, - - all: function(iterator) { - var result = true; - this.each(function(value, index) { - result = result && !!(iterator || Prototype.K)(value, index); - if (!result) throw $break; - }); - return result; - }, - - any: function(iterator) { - var result = true; - this.each(function(value, index) { - if (result = !!(iterator || Prototype.K)(value, index)) - throw $break; - }); - return result; - }, - - collect: function(iterator) { - var results = []; - this.each(function(value, index) { - results.push(iterator(value, index)); - }); - return results; - }, - - detect: function (iterator) { - var result; - this.each(function(value, index) { - if (iterator(value, index)) { - result = value; - throw $break; - } - }); - return result; - }, - - findAll: function(iterator) { - var results = []; - this.each(function(value, index) { - if (iterator(value, index)) - results.push(value); - }); - return results; - }, - - grep: function(pattern, iterator) { - var results = []; - this.each(function(value, index) { - var stringValue = value.toString(); - if (stringValue.match(pattern)) - results.push((iterator || Prototype.K)(value, index)); - }) - return results; - }, - - include: function(object) { - var found = false; - this.each(function(value) { - if (value == object) { - found = true; - throw $break; - } - }); - return found; - }, - - inject: function(memo, iterator) { - this.each(function(value, index) { - memo = iterator(memo, value, index); - }); - return memo; - }, - - invoke: function(method) { - var args = $A(arguments).slice(1); - return this.collect(function(value) { - return value[method].apply(value, args); - }); - }, - - max: function(iterator) { - var result; - this.each(function(value, index) { - value = (iterator || Prototype.K)(value, index); - if (result == undefined || value >= result) - result = value; - }); - return result; - }, - - min: function(iterator) { - var result; - this.each(function(value, index) { - value = (iterator || Prototype.K)(value, index); - if (result == undefined || value < result) - result = value; - }); - return result; - }, - - partition: function(iterator) { - var trues = [], falses = []; - this.each(function(value, index) { - ((iterator || Prototype.K)(value, index) ? - trues : falses).push(value); - }); - return [trues, falses]; - }, - - pluck: function(property) { - var results = []; - this.each(function(value, index) { - results.push(value[property]); - }); - return results; - }, - - reject: function(iterator) { - var results = []; - this.each(function(value, index) { - if (!iterator(value, index)) - results.push(value); - }); - return results; - }, - - sortBy: function(iterator) { - return this.collect(function(value, index) { - return {value: value, criteria: iterator(value, index)}; - }).sort(function(left, right) { - var a = left.criteria, b = right.criteria; - return a < b ? -1 : a > b ? 1 : 0; - }).pluck('value'); - }, - - toArray: function() { - return this.collect(Prototype.K); - }, - - zip: function() { - var iterator = Prototype.K, args = $A(arguments); - if (typeof args.last() == 'function') - iterator = args.pop(); - - var collections = [this].concat(args).map($A); - return this.map(function(value, index) { - return iterator(collections.pluck(index)); - }); - }, - - inspect: function() { - return '#'; - } -} - -Object.extend(Enumerable, { - map: Enumerable.collect, - find: Enumerable.detect, - select: Enumerable.findAll, - member: Enumerable.include, - entries: Enumerable.toArray -}); -var $A = Array.from = function(iterable) { - if (!iterable) return []; - if (iterable.toArray) { - return iterable.toArray(); - } else { - var results = []; - for (var i = 0; i < iterable.length; i++) - results.push(iterable[i]); - return results; - } -} - -Object.extend(Array.prototype, Enumerable); - -if (!Array.prototype._reverse) - Array.prototype._reverse = Array.prototype.reverse; - -Object.extend(Array.prototype, { - _each: function(iterator) { - for (var i = 0; i < this.length; i++) - iterator(this[i]); - }, - - clear: function() { - this.length = 0; - return this; - }, - - first: function() { - return this[0]; - }, - - last: function() { - return this[this.length - 1]; - }, - - compact: function() { - return this.select(function(value) { - return value != undefined || value != null; - }); - }, - - flatten: function() { - return this.inject([], function(array, value) { - return array.concat(value && value.constructor == Array ? - value.flatten() : [value]); - }); - }, - - without: function() { - var values = $A(arguments); - return this.select(function(value) { - return !values.include(value); - }); - }, - - indexOf: function(object) { - for (var i = 0; i < this.length; i++) - if (this[i] == object) return i; - return -1; - }, - - reverse: function(inline) { - return (inline !== false ? this : this.toArray())._reverse(); - }, - - inspect: function() { - return '[' + this.map(Object.inspect).join(', ') + ']'; - } -}); -var Hash = { - _each: function(iterator) { - for (var key in this) { - var value = this[key]; - if (typeof value == 'function') continue; - - var pair = [key, value]; - pair.key = key; - pair.value = value; - iterator(pair); - } - }, - - keys: function() { - return this.pluck('key'); - }, - - values: function() { - return this.pluck('value'); - }, - - merge: function(hash) { - return $H(hash).inject($H(this), function(mergedHash, pair) { - mergedHash[pair.key] = pair.value; - return mergedHash; - }); - }, - - toQueryString: function() { - return this.map(function(pair) { - return pair.map(encodeURIComponent).join('='); - }).join('&'); - }, - - inspect: function() { - return '#'; - } -} - -function $H(object) { - var hash = Object.extend({}, object || {}); - Object.extend(hash, Enumerable); - Object.extend(hash, Hash); - return hash; -} -ObjectRange = Class.create(); -Object.extend(ObjectRange.prototype, Enumerable); -Object.extend(ObjectRange.prototype, { - initialize: function(start, end, exclusive) { - this.start = start; - this.end = end; - this.exclusive = exclusive; - }, - - _each: function(iterator) { - var value = this.start; - do { - iterator(value); - value = value.succ(); - } while (this.include(value)); - }, - - include: function(value) { - if (value < this.start) - return false; - if (this.exclusive) - return value < this.end; - return value <= this.end; - } -}); - -var $R = function(start, end, exclusive) { - return new ObjectRange(start, end, exclusive); -} - -var Ajax = { - getTransport: function() { - return Try.these( - function() {return new XMLHttpRequest()}, - function() {return new ActiveXObject('Msxml2.XMLHTTP')}, - function() {return new ActiveXObject('Microsoft.XMLHTTP')} - ) || false; - }, - - activeRequestCount: 0 -} - -Ajax.Responders = { - responders: [], - - _each: function(iterator) { - this.responders._each(iterator); - }, - - register: function(responderToAdd) { - if (!this.include(responderToAdd)) - this.responders.push(responderToAdd); - }, - - unregister: function(responderToRemove) { - this.responders = this.responders.without(responderToRemove); - }, - - dispatch: function(callback, request, transport, json) { - this.each(function(responder) { - if (responder[callback] && typeof responder[callback] == 'function') { - try { - responder[callback].apply(responder, [request, transport, json]); - } catch (e) {} - } - }); - } -}; - -Object.extend(Ajax.Responders, Enumerable); - -Ajax.Responders.register({ - onCreate: function() { - Ajax.activeRequestCount++; - }, - - onComplete: function() { - Ajax.activeRequestCount--; - } -}); - -Ajax.Base = function() {}; -Ajax.Base.prototype = { - setOptions: function(options) { - this.options = { - method: 'post', - asynchronous: true, - contentType: 'application/x-www-form-urlencoded', - parameters: '' - } - Object.extend(this.options, options || {}); - }, - - responseIsSuccess: function() { - return this.transport.status == undefined - || this.transport.status == 0 - || (this.transport.status >= 200 && this.transport.status < 300); - }, - - responseIsFailure: function() { - return !this.responseIsSuccess(); - } -} - -Ajax.Request = Class.create(); -Ajax.Request.Events = - ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete']; - -Ajax.Request.prototype = Object.extend(new Ajax.Base(), { - initialize: function(url, options) { - this.transport = Ajax.getTransport(); - this.setOptions(options); - this.request(url); - }, - - request: function(url) { - var parameters = this.options.parameters || ''; - if (parameters.length > 0) parameters += '&_='; - - try { - this.url = url; - if (this.options.method == 'get' && parameters.length > 0) - this.url += (this.url.match(/\?/) ? '&' : '?') + parameters; - - Ajax.Responders.dispatch('onCreate', this, this.transport); - - this.transport.open(this.options.method, this.url, - this.options.asynchronous); - - if (this.options.asynchronous) { - this.transport.onreadystatechange = this.onStateChange.bind(this); - setTimeout((function() {this.respondToReadyState(1)}).bind(this), 10); - } - - this.setRequestHeaders(); - - var body = this.options.postBody ? this.options.postBody : parameters; - this.transport.send(this.options.method == 'post' ? body : null); - - } catch (e) { - this.dispatchException(e); - } - }, - - setRequestHeaders: function() { - var requestHeaders = - ['X-Requested-With', 'XMLHttpRequest', - 'X-Prototype-Version', Prototype.Version, - 'Accept', 'text/javascript, text/html, application/xml, text/xml, */*']; - - if (this.options.method == 'post') { - requestHeaders.push('Content-type', this.options.contentType); - - /* Force "Connection: close" for Mozilla browsers to work around - * a bug where XMLHttpReqeuest sends an incorrect Content-length - * header. See Mozilla Bugzilla #246651. - */ - if (this.transport.overrideMimeType) - requestHeaders.push('Connection', 'close'); - } - - if (this.options.requestHeaders) - requestHeaders.push.apply(requestHeaders, this.options.requestHeaders); - - for (var i = 0; i < requestHeaders.length; i += 2) - this.transport.setRequestHeader(requestHeaders[i], requestHeaders[i+1]); - }, - - onStateChange: function() { - var readyState = this.transport.readyState; - if (readyState != 1) - this.respondToReadyState(this.transport.readyState); - }, - - header: function(name) { - try { - return this.transport.getResponseHeader(name); - } catch (e) {} - }, - - evalJSON: function() { - try { - return eval('(' + this.header('X-JSON') + ')'); - } catch (e) {} - }, - - evalResponse: function() { - try { - return eval(this.transport.responseText); - } catch (e) { - this.dispatchException(e); - } - }, - - respondToReadyState: function(readyState) { - var event = Ajax.Request.Events[readyState]; - var transport = this.transport, json = this.evalJSON(); - - if (event == 'Complete') { - try { - (this.options['on' + this.transport.status] - || this.options['on' + (this.responseIsSuccess() ? 'Success' : 'Failure')] - || Prototype.emptyFunction)(transport, json); - } catch (e) { - this.dispatchException(e); - } - - if ((this.header('Content-type') || '').match(/^text\/javascript/i)) - this.evalResponse(); - } - - try { - (this.options['on' + event] || Prototype.emptyFunction)(transport, json); - Ajax.Responders.dispatch('on' + event, this, transport, json); - } catch (e) { - this.dispatchException(e); - } - - /* Avoid memory leak in MSIE: clean up the oncomplete event handler */ - if (event == 'Complete') - this.transport.onreadystatechange = Prototype.emptyFunction; - }, - - dispatchException: function(exception) { - (this.options.onException || Prototype.emptyFunction)(this, exception); - Ajax.Responders.dispatch('onException', this, exception); - } -}); - -Ajax.Updater = Class.create(); - -Object.extend(Object.extend(Ajax.Updater.prototype, Ajax.Request.prototype), { - initialize: function(container, url, options) { - this.containers = { - success: container.success ? $PR(container.success) : $PR(container), - failure: container.failure ? $PR(container.failure) : - (container.success ? null : $PR(container)) - } - - this.transport = Ajax.getTransport(); - this.setOptions(options); - - var onComplete = this.options.onComplete || Prototype.emptyFunction; - this.options.onComplete = (function(transport, object) { - this.updateContent(); - onComplete(transport, object); - }).bind(this); - - this.request(url); - }, - - updateContent: function() { - var receiver = this.responseIsSuccess() ? - this.containers.success : this.containers.failure; - var response = this.transport.responseText; - - if (!this.options.evalScripts) - response = response.stripScripts(); - - if (receiver) { - if (this.options.insertion) { - new this.options.insertion(receiver, response); - } else { - Element.update(receiver, response); - } - } - - if (this.responseIsSuccess()) { - if (this.onComplete) - setTimeout(this.onComplete.bind(this), 10); - } - } -}); - -Ajax.PeriodicalUpdater = Class.create(); -Ajax.PeriodicalUpdater.prototype = Object.extend(new Ajax.Base(), { - initialize: function(container, url, options) { - this.setOptions(options); - this.onComplete = this.options.onComplete; - - this.frequency = (this.options.frequency || 2); - this.decay = (this.options.decay || 1); - - this.updater = {}; - this.container = container; - this.url = url; - - this.start(); - }, - - start: function() { - this.options.onComplete = this.updateComplete.bind(this); - this.onTimerEvent(); - }, - - stop: function() { - this.updater.onComplete = undefined; - clearTimeout(this.timer); - (this.onComplete || Prototype.emptyFunction).apply(this, arguments); - }, - - updateComplete: function(request) { - if (this.options.decay) { - this.decay = (request.responseText == this.lastText ? - this.decay * this.options.decay : 1); - - this.lastText = request.responseText; - } - this.timer = setTimeout(this.onTimerEvent.bind(this), - this.decay * this.frequency * 1000); - }, - - onTimerEvent: function() { - this.updater = new Ajax.Updater(this.container, this.url, this.options); - } -}); -function $PR() { - var results = [], element; - for (var i = 0; i < arguments.length; i++) { - element = arguments[i]; - if (typeof element == 'string') - element = document.getElementById(element); - results.push(Element.extend(element)); - } - return results.length < 2 ? results[0] : results; -} - -document.getElementsByClassName = function(className, parentElement) { - var children = ($PR(parentElement) || document.body).getElementsByTagName('*'); - return $A(children).inject([], function(elements, child) { - if (child.className.match(new RegExp("(^|\\s)" + className + "(\\s|$)"))) - elements.push(Element.extend(child)); - return elements; - }); -} - -/*--------------------------------------------------------------------------*/ - -if (!window.Element) - var Element = new Object(); - -Element.extend = function(element) { - if (!element) return; - if (_nativeExtensions) return element; - - if (!element._extended && element.tagName && element != window) { - var methods = Element.Methods, cache = Element.extend.cache; - for (property in methods) { - var value = methods[property]; - if (typeof value == 'function') - element[property] = cache.findOrStore(value); - } - } - - element._extended = true; - return element; -} - -Element.extend.cache = { - findOrStore: function(value) { - return this[value] = this[value] || function() { - return value.apply(null, [this].concat($A(arguments))); - } - } -} - -Element.Methods = { - visible: function(element) { - return $PR(element).style.display != 'none'; - }, - - toggle: function() { - for (var i = 0; i < arguments.length; i++) { - var element = $PR(arguments[i]); - Element[Element.visible(element) ? 'hide' : 'show'](element); - } - }, - - hide: function() { - for (var i = 0; i < arguments.length; i++) { - var element = $PR(arguments[i]); - element.style.display = 'none'; - } - }, - - show: function() { - for (var i = 0; i < arguments.length; i++) { - var element = $PR(arguments[i]); - element.style.display = ''; - } - }, - - remove: function(element) { - element = $PR(element); - element.parentNode.removeChild(element); - }, - - update: function(element, html) { - $PR(element).innerHTML = html.stripScripts(); - setTimeout(function() {html.evalScripts()}, 10); - }, - - replace: function(element, html) { - element = $PR(element); - if (element.outerHTML) { - element.outerHTML = html.stripScripts(); - } else { - var range = element.ownerDocument.createRange(); - range.selectNodeContents(element); - element.parentNode.replaceChild( - range.createContextualFragment(html.stripScripts()), element); - } - setTimeout(function() {html.evalScripts()}, 10); - }, - - getHeight: function(element) { - element = $PR(element); - return element.offsetHeight; - }, - - classNames: function(element) { - return new Element.ClassNames(element); - }, - - hasClassName: function(element, className) { - if (!(element = $PR(element))) return; - return Element.classNames(element).include(className); - }, - - addClassName: function(element, className) { - if (!(element = $PR(element))) return; - return Element.classNames(element).add(className); - }, - - removeClassName: function(element, className) { - if (!(element = $PR(element))) return; - return Element.classNames(element).remove(className); - }, - - // removes whitespace-only text node children - cleanWhitespace: function(element) { - element = $PR(element); - for (var i = 0; i < element.childNodes.length; i++) { - var node = element.childNodes[i]; - if (node.nodeType == 3 && !/\S/.test(node.nodeValue)) - Element.remove(node); - } - }, - - empty: function(element) { - return $PR(element).innerHTML.match(/^\s*$/); - }, - - childOf: function(element, ancestor) { - element = $PR(element), ancestor = $PR(ancestor); - while (element = element.parentNode) - if (element == ancestor) return true; - return false; - }, - - scrollTo: function(element) { - element = $PR(element); - var x = element.x ? element.x : element.offsetLeft, - y = element.y ? element.y : element.offsetTop; - window.scrollTo(x, y); - }, - - getStyle: function(element, style) { - element = $PR(element); - var value = element.style[style.camelize()]; - if (!value) { - if (document.defaultView && document.defaultView.getComputedStyle) { - var css = document.defaultView.getComputedStyle(element, null); - value = css ? css.getPropertyValue(style) : null; - } else if (element.currentStyle) { - value = element.currentStyle[style.camelize()]; - } - } - - if (window.opera && ['left', 'top', 'right', 'bottom'].include(style)) - if (Element.getStyle(element, 'position') == 'static') value = 'auto'; - - return value == 'auto' ? null : value; - }, - - setStyle: function(element, style) { - element = $PR(element); - for (var name in style) - element.style[name.camelize()] = style[name]; - }, - - getDimensions: function(element) { - element = $PR(element); - if (Element.getStyle(element, 'display') != 'none') - return {width: element.offsetWidth, height: element.offsetHeight}; - - // All *Width and *Height properties give 0 on elements with display none, - // so enable the element temporarily - var els = element.style; - var originalVisibility = els.visibility; - var originalPosition = els.position; - els.visibility = 'hidden'; - els.position = 'absolute'; - els.display = ''; - var originalWidth = element.clientWidth; - var originalHeight = element.clientHeight; - els.display = 'none'; - els.position = originalPosition; - els.visibility = originalVisibility; - return {width: originalWidth, height: originalHeight}; - }, - - makePositioned: function(element) { - element = $PR(element); - var pos = Element.getStyle(element, 'position'); - if (pos == 'static' || !pos) { - element._madePositioned = true; - element.style.position = 'relative'; - // Opera returns the offset relative to the positioning context, when an - // element is position relative but top and left have not been defined - if (window.opera) { - element.style.top = 0; - element.style.left = 0; - } - } - }, - - undoPositioned: function(element) { - element = $PR(element); - if (element._madePositioned) { - element._madePositioned = undefined; - element.style.position = - element.style.top = - element.style.left = - element.style.bottom = - element.style.right = ''; - } - }, - - makeClipping: function(element) { - element = $PR(element); - if (element._overflow) return; - element._overflow = element.style.overflow; - if ((Element.getStyle(element, 'overflow') || 'visible') != 'hidden') - element.style.overflow = 'hidden'; - }, - - undoClipping: function(element) { - element = $PR(element); - if (element._overflow) return; - element.style.overflow = element._overflow; - element._overflow = undefined; - } -} - -Object.extend(Element, Element.Methods); - -var _nativeExtensions = false; - -if(!HTMLElement && /Konqueror|Safari|KHTML/.test(navigator.userAgent)) { - var HTMLElement = {} - HTMLElement.prototype = document.createElement('div').__proto__; -} - -Element.addMethods = function(methods) { - Object.extend(Element.Methods, methods || {}); - - if(typeof HTMLElement != 'undefined') { - var methods = Element.Methods, cache = Element.extend.cache; - for (property in methods) { - var value = methods[property]; - if (typeof value == 'function') - HTMLElement.prototype[property] = cache.findOrStore(value); - } - _nativeExtensions = true; - } -} - -Element.addMethods(); - -var Toggle = new Object(); -Toggle.display = Element.toggle; - -/*--------------------------------------------------------------------------*/ - -Abstract.Insertion = function(adjacency) { - this.adjacency = adjacency; -} - -Abstract.Insertion.prototype = { - initialize: function(element, content) { - this.element = $PR(element); - this.content = content.stripScripts(); - - if (this.adjacency && this.element.insertAdjacentHTML) { - try { - this.element.insertAdjacentHTML(this.adjacency, this.content); - } catch (e) { - var tagName = this.element.tagName.toLowerCase(); - if (tagName == 'tbody' || tagName == 'tr') { - this.insertContent(this.contentFromAnonymousTable()); - } else { - throw e; - } - } - } else { - this.range = this.element.ownerDocument.createRange(); - if (this.initializeRange) this.initializeRange(); - this.insertContent([this.range.createContextualFragment(this.content)]); - } - - setTimeout(function() {content.evalScripts()}, 10); - }, - - contentFromAnonymousTable: function() { - var div = document.createElement('div'); - div.innerHTML = '' + this.content + '
    '; - return $A(div.childNodes[0].childNodes[0].childNodes); - } -} - -var Insertion = new Object(); - -Insertion.Before = Class.create(); -Insertion.Before.prototype = Object.extend(new Abstract.Insertion('beforeBegin'), { - initializeRange: function() { - this.range.setStartBefore(this.element); - }, - - insertContent: function(fragments) { - fragments.each((function(fragment) { - this.element.parentNode.insertBefore(fragment, this.element); - }).bind(this)); - } -}); - -Insertion.Top = Class.create(); -Insertion.Top.prototype = Object.extend(new Abstract.Insertion('afterBegin'), { - initializeRange: function() { - this.range.selectNodeContents(this.element); - this.range.collapse(true); - }, - - insertContent: function(fragments) { - fragments.reverse(false).each((function(fragment) { - this.element.insertBefore(fragment, this.element.firstChild); - }).bind(this)); - } -}); - -Insertion.Bottom = Class.create(); -Insertion.Bottom.prototype = Object.extend(new Abstract.Insertion('beforeEnd'), { - initializeRange: function() { - this.range.selectNodeContents(this.element); - this.range.collapse(this.element); - }, - - insertContent: function(fragments) { - fragments.each((function(fragment) { - this.element.appendChild(fragment); - }).bind(this)); - } -}); - -Insertion.After = Class.create(); -Insertion.After.prototype = Object.extend(new Abstract.Insertion('afterEnd'), { - initializeRange: function() { - this.range.setStartAfter(this.element); - }, - - insertContent: function(fragments) { - fragments.each((function(fragment) { - this.element.parentNode.insertBefore(fragment, - this.element.nextSibling); - }).bind(this)); - } -}); - -/*--------------------------------------------------------------------------*/ - -Element.ClassNames = Class.create(); -Element.ClassNames.prototype = { - initialize: function(element) { - this.element = $PR(element); - }, - - _each: function(iterator) { - this.element.className.split(/\s+/).select(function(name) { - return name.length > 0; - })._each(iterator); - }, - - set: function(className) { - this.element.className = className; - }, - - add: function(classNameToAdd) { - if (this.include(classNameToAdd)) return; - this.set(this.toArray().concat(classNameToAdd).join(' ')); - }, - - remove: function(classNameToRemove) { - if (!this.include(classNameToRemove)) return; - this.set(this.select(function(className) { - return className != classNameToRemove; - }).join(' ')); - }, - - toString: function() { - return this.toArray().join(' '); - } -} - -Object.extend(Element.ClassNames.prototype, Enumerable); -var Selector = Class.create(); -Selector.prototype = { - initialize: function(expression) { - this.params = {classNames: []}; - this.expression = expression.toString().strip(); - this.parseExpression(); - this.compileMatcher(); - }, - - parseExpression: function() { - function abort(message) { throw 'Parse error in selector: ' + message; } - - if (this.expression == '') abort('empty expression'); - - var params = this.params, expr = this.expression, match, modifier, clause, rest; - while (match = expr.match(/^(.*)\[([a-z0-9_:-]+?)(?:([~\|!]?=)(?:"([^"]*)"|([^\]\s]*)))?\]$/i)) { - params.attributes = params.attributes || []; - params.attributes.push({name: match[2], operator: match[3], value: match[4] || match[5] || ''}); - expr = match[1]; - } - - if (expr == '*') return this.params.wildcard = true; - - while (match = expr.match(/^([^a-z0-9_-])?([a-z0-9_-]+)(.*)/i)) { - modifier = match[1], clause = match[2], rest = match[3]; - switch (modifier) { - case '#': params.id = clause; break; - case '.': params.classNames.push(clause); break; - case '': - case undefined: params.tagName = clause.toUpperCase(); break; - default: abort(expr.inspect()); - } - expr = rest; - } - - if (expr.length > 0) abort(expr.inspect()); - }, - - buildMatchExpression: function() { - var params = this.params, conditions = [], clause; - - if (params.wildcard) - conditions.push('true'); - if (clause = params.id) - conditions.push('element.id == ' + clause.inspect()); - if (clause = params.tagName) - conditions.push('element.tagName.toUpperCase() == ' + clause.inspect()); - if ((clause = params.classNames).length > 0) - for (var i = 0; i < clause.length; i++) - conditions.push('Element.hasClassName(element, ' + clause[i].inspect() + ')'); - if (clause = params.attributes) { - clause.each(function(attribute) { - var value = 'element.getAttribute(' + attribute.name.inspect() + ')'; - var splitValueBy = function(delimiter) { - return value + ' && ' + value + '.split(' + delimiter.inspect() + ')'; - } - - switch (attribute.operator) { - case '=': conditions.push(value + ' == ' + attribute.value.inspect()); break; - case '~=': conditions.push(splitValueBy(' ') + '.include(' + attribute.value.inspect() + ')'); break; - case '|=': conditions.push( - splitValueBy('-') + '.first().toUpperCase() == ' + attribute.value.toUpperCase().inspect() - ); break; - case '!=': conditions.push(value + ' != ' + attribute.value.inspect()); break; - case '': - case undefined: conditions.push(value + ' != null'); break; - default: throw 'Unknown operator ' + attribute.operator + ' in selector'; - } - }); - } - - return conditions.join(' && '); - }, - - compileMatcher: function() { - this.match = new Function('element', 'if (!element.tagName) return false; \ - return ' + this.buildMatchExpression()); - }, - - findElements: function(scope) { - var element; - - if (element = $PR(this.params.id)) - if (this.match(element)) - if (!scope || Element.childOf(element, scope)) - return [element]; - - scope = (scope || document).getElementsByTagName(this.params.tagName || '*'); - - var results = []; - for (var i = 0; i < scope.length; i++) - if (this.match(element = scope[i])) - results.push(Element.extend(element)); - - return results; - }, - - toString: function() { - return this.expression; - } -} - -function $$() { - return $A(arguments).map(function(expression) { - return expression.strip().split(/\s+/).inject([null], function(results, expr) { - var selector = new Selector(expr); - return results.map(selector.findElements.bind(selector)).flatten(); - }); - }).flatten(); -} -var Field = { - clear: function() { - for (var i = 0; i < arguments.length; i++) - $PR(arguments[i]).value = ''; - }, - - focus: function(element) { - $PR(element).focus(); - }, - - present: function() { - for (var i = 0; i < arguments.length; i++) - if ($PR(arguments[i]).value == '') return false; - return true; - }, - - select: function(element) { - $PR(element).select(); - }, - - activate: function(element) { - element = $PR(element); - element.focus(); - if (element.select) - element.select(); - } -} - -/*--------------------------------------------------------------------------*/ - -var Form = { - serialize: function(form) { - var elements = Form.getElements($PR(form)); - var queryComponents = new Array(); - - for (var i = 0; i < elements.length; i++) { - var queryComponent = Form.Element.serialize(elements[i]); - if (queryComponent) - queryComponents.push(queryComponent); - } - - return queryComponents.join('&'); - }, - - getElements: function(form) { - form = $PR(form); - var elements = new Array(); - - for (var tagName in Form.Element.Serializers) { - var tagElements = form.getElementsByTagName(tagName); - for (var j = 0; j < tagElements.length; j++) - elements.push(tagElements[j]); - } - return elements; - }, - - getInputs: function(form, typeName, name) { - form = $PR(form); - var inputs = form.getElementsByTagName('input'); - - if (!typeName && !name) - return inputs; - - var matchingInputs = new Array(); - for (var i = 0; i < inputs.length; i++) { - var input = inputs[i]; - if ((typeName && input.type != typeName) || - (name && input.name != name)) - continue; - matchingInputs.push(input); - } - - return matchingInputs; - }, - - disable: function(form) { - var elements = Form.getElements(form); - for (var i = 0; i < elements.length; i++) { - var element = elements[i]; - element.blur(); - element.disabled = 'true'; - } - }, - - enable: function(form) { - var elements = Form.getElements(form); - for (var i = 0; i < elements.length; i++) { - var element = elements[i]; - element.disabled = ''; - } - }, - - findFirstElement: function(form) { - return Form.getElements(form).find(function(element) { - return element.type != 'hidden' && !element.disabled && - ['input', 'select', 'textarea'].include(element.tagName.toLowerCase()); - }); - }, - - focusFirstElement: function(form) { - Field.activate(Form.findFirstElement(form)); - }, - - reset: function(form) { - $PR(form).reset(); - } -} - -Form.Element = { - serialize: function(element) { - element = $PR(element); - var method = element.tagName.toLowerCase(); - var parameter = Form.Element.Serializers[method](element); - - if (parameter) { - var key = encodeURIComponent(parameter[0]); - if (key.length == 0) return; - - if (parameter[1].constructor != Array) - parameter[1] = [parameter[1]]; - - return parameter[1].map(function(value) { - return key + '=' + encodeURIComponent(value); - }).join('&'); - } - }, - - getValue: function(element) { - element = $PR(element); - var method = element.tagName.toLowerCase(); - var parameter = Form.Element.Serializers[method](element); - - if (parameter) - return parameter[1]; - } -} - -Form.Element.Serializers = { - input: function(element) { - switch (element.type.toLowerCase()) { - case 'submit': - case 'hidden': - case 'password': - case 'text': - return Form.Element.Serializers.textarea(element); - case 'checkbox': - case 'radio': - return Form.Element.Serializers.inputSelector(element); - } - return false; - }, - - inputSelector: function(element) { - if (element.checked) - return [element.name, element.value]; - }, - - textarea: function(element) { - return [element.name, element.value]; - }, - - select: function(element) { - return Form.Element.Serializers[element.type == 'select-one' ? - 'selectOne' : 'selectMany'](element); - }, - - selectOne: function(element) { - var value = '', opt, index = element.selectedIndex; - if (index >= 0) { - opt = element.options[index]; - value = opt.value || opt.text; - } - return [element.name, value]; - }, - - selectMany: function(element) { - var value = []; - for (var i = 0; i < element.length; i++) { - var opt = element.options[i]; - if (opt.selected) - value.push(opt.value || opt.text); - } - return [element.name, value]; - } -} - -/*--------------------------------------------------------------------------*/ - -var $F = Form.Element.getValue; - -/*--------------------------------------------------------------------------*/ - -Abstract.TimedObserver = function() {} -Abstract.TimedObserver.prototype = { - initialize: function(element, frequency, callback) { - this.frequency = frequency; - this.element = $PR(element); - this.callback = callback; - - this.lastValue = this.getValue(); - this.registerCallback(); - }, - - registerCallback: function() { - setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); - }, - - onTimerEvent: function() { - var value = this.getValue(); - if (this.lastValue != value) { - this.callback(this.element, value); - this.lastValue = value; - } - } -} - -Form.Element.Observer = Class.create(); -Form.Element.Observer.prototype = Object.extend(new Abstract.TimedObserver(), { - getValue: function() { - return Form.Element.getValue(this.element); - } -}); - -Form.Observer = Class.create(); -Form.Observer.prototype = Object.extend(new Abstract.TimedObserver(), { - getValue: function() { - return Form.serialize(this.element); - } -}); - -/*--------------------------------------------------------------------------*/ - -Abstract.EventObserver = function() {} -Abstract.EventObserver.prototype = { - initialize: function(element, callback) { - this.element = $PR(element); - this.callback = callback; - - this.lastValue = this.getValue(); - if (this.element.tagName.toLowerCase() == 'form') - this.registerFormCallbacks(); - else - this.registerCallback(this.element); - }, - - onElementEvent: function() { - var value = this.getValue(); - if (this.lastValue != value) { - this.callback(this.element, value); - this.lastValue = value; - } - }, - - registerFormCallbacks: function() { - var elements = Form.getElements(this.element); - for (var i = 0; i < elements.length; i++) - this.registerCallback(elements[i]); - }, - - registerCallback: function(element) { - if (element.type) { - switch (element.type.toLowerCase()) { - case 'checkbox': - case 'radio': - Event.observe(element, 'click', this.onElementEvent.bind(this)); - break; - case 'password': - case 'text': - case 'textarea': - case 'select-one': - case 'select-multiple': - Event.observe(element, 'change', this.onElementEvent.bind(this)); - break; - } - } - } -} - -Form.Element.EventObserver = Class.create(); -Form.Element.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), { - getValue: function() { - return Form.Element.getValue(this.element); - } -}); - -Form.EventObserver = Class.create(); -Form.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), { - getValue: function() { - return Form.serialize(this.element); - } -}); -if (!window.Event) { - var Event = new Object(); -} - -Object.extend(Event, { - KEY_BACKSPACE: 8, - KEY_TAB: 9, - KEY_RETURN: 13, - KEY_ESC: 27, - KEY_LEFT: 37, - KEY_UP: 38, - KEY_RIGHT: 39, - KEY_DOWN: 40, - KEY_DELETE: 46, - - element: function(event) { - return event.target || event.srcElement; - }, - - isLeftClick: function(event) { - return (((event.which) && (event.which == 1)) || - ((event.button) && (event.button == 1))); - }, - - pointerX: function(event) { - return event.pageX || (event.clientX + - (document.documentElement.scrollLeft || document.body.scrollLeft)); - }, - - pointerY: function(event) { - return event.pageY || (event.clientY + - (document.documentElement.scrollTop || document.body.scrollTop)); - }, - - stop: function(event) { - if (event.preventDefault) { - event.preventDefault(); - event.stopPropagation(); - } else { - event.returnValue = false; - event.cancelBubble = true; - } - }, - - // find the first node with the given tagName, starting from the - // node the event was triggered on; traverses the DOM upwards - findElement: function(event, tagName) { - var element = Event.element(event); - while (element.parentNode && (!element.tagName || - (element.tagName.toUpperCase() != tagName.toUpperCase()))) - element = element.parentNode; - return element; - }, - - observers: false, - - _observeAndCache: function(element, name, observer, useCapture) { - if (!this.observers) this.observers = []; - if (element.addEventListener) { - this.observers.push([element, name, observer, useCapture]); - element.addEventListener(name, observer, useCapture); - } else if (element.attachEvent) { - this.observers.push([element, name, observer, useCapture]); - element.attachEvent('on' + name, observer); - } - }, - - unloadCache: function() { - if (!Event.observers) return; - for (var i = 0; i < Event.observers.length; i++) { - Event.stopObserving.apply(this, Event.observers[i]); - Event.observers[i][0] = null; - } - Event.observers = false; - }, - - observe: function(element, name, observer, useCapture) { - var element = $PR(element); - useCapture = useCapture || false; - - if (name == 'keypress' && - (navigator.appVersion.match(/Konqueror|Safari|KHTML/) - || element.attachEvent)) - name = 'keydown'; - - this._observeAndCache(element, name, observer, useCapture); - }, - - stopObserving: function(element, name, observer, useCapture) { - var element = $PR(element); - useCapture = useCapture || false; - - if (name == 'keypress' && - (navigator.appVersion.match(/Konqueror|Safari|KHTML/) - || element.detachEvent)) - name = 'keydown'; - - if (element.removeEventListener) { - element.removeEventListener(name, observer, useCapture); - } else if (element.detachEvent) { - element.detachEvent('on' + name, observer); - } - } -}); - -/* prevent memory leaks in IE */ -if (navigator.appVersion.match(/\bMSIE\b/)) - Event.observe(window, 'unload', Event.unloadCache, false); -var Position = { - // set to true if needed, warning: firefox performance problems - // NOT neeeded for page scrolling, only if draggable contained in - // scrollable elements - includeScrollOffsets: false, - - // must be called before calling withinIncludingScrolloffset, every time the - // page is scrolled - prepare: function() { - this.deltaX = window.pageXOffset - || document.documentElement.scrollLeft - || document.body.scrollLeft - || 0; - this.deltaY = window.pageYOffset - || document.documentElement.scrollTop - || document.body.scrollTop - || 0; - }, - - realOffset: function(element) { - var valueT = 0, valueL = 0; - do { - valueT += element.scrollTop || 0; - valueL += element.scrollLeft || 0; - element = element.parentNode; - } while (element); - return [valueL, valueT]; - }, - - cumulativeOffset: function(element) { - var valueT = 0, valueL = 0; - do { - valueT += element.offsetTop || 0; - valueL += element.offsetLeft || 0; - element = element.offsetParent; - } while (element); - return [valueL, valueT]; - }, - - positionedOffset: function(element) { - var valueT = 0, valueL = 0; - do { - valueT += element.offsetTop || 0; - valueL += element.offsetLeft || 0; - element = element.offsetParent; - if (element) { - p = Element.getStyle(element, 'position'); - if (p == 'relative' || p == 'absolute') break; - } - } while (element); - return [valueL, valueT]; - }, - - offsetParent: function(element) { - if (element.offsetParent) return element.offsetParent; - if (element == document.body) return element; - - while ((element = element.parentNode) && element != document.body) - if (Element.getStyle(element, 'position') != 'static') - return element; - - return document.body; - }, - - // caches x/y coordinate pair to use with overlap - within: function(element, x, y) { - if (this.includeScrollOffsets) - return this.withinIncludingScrolloffsets(element, x, y); - this.xcomp = x; - this.ycomp = y; - this.offset = this.cumulativeOffset(element); - - return (y >= this.offset[1] && - y < this.offset[1] + element.offsetHeight && - x >= this.offset[0] && - x < this.offset[0] + element.offsetWidth); - }, - - withinIncludingScrolloffsets: function(element, x, y) { - var offsetcache = this.realOffset(element); - - this.xcomp = x + offsetcache[0] - this.deltaX; - this.ycomp = y + offsetcache[1] - this.deltaY; - this.offset = this.cumulativeOffset(element); - - return (this.ycomp >= this.offset[1] && - this.ycomp < this.offset[1] + element.offsetHeight && - this.xcomp >= this.offset[0] && - this.xcomp < this.offset[0] + element.offsetWidth); - }, - - // within must be called directly before - overlap: function(mode, element) { - if (!mode) return 0; - if (mode == 'vertical') - return ((this.offset[1] + element.offsetHeight) - this.ycomp) / - element.offsetHeight; - if (mode == 'horizontal') - return ((this.offset[0] + element.offsetWidth) - this.xcomp) / - element.offsetWidth; - }, - - clone: function(source, target) { - source = $PR(source); - target = $PR(target); - target.style.position = 'absolute'; - var offsets = this.cumulativeOffset(source); - target.style.top = offsets[1] + 'px'; - target.style.left = offsets[0] + 'px'; - target.style.width = source.offsetWidth + 'px'; - target.style.height = source.offsetHeight + 'px'; - }, - - page: function(forElement) { - var valueT = 0, valueL = 0; - - var element = forElement; - do { - valueT += element.offsetTop || 0; - valueL += element.offsetLeft || 0; - - // Safari fix - if (element.offsetParent==document.body) - if (Element.getStyle(element,'position')=='absolute') break; - - } while (element = element.offsetParent); - - element = forElement; - do { - valueT -= element.scrollTop || 0; - valueL -= element.scrollLeft || 0; - } while (element = element.parentNode); - - return [valueL, valueT]; - }, - - clone: function(source, target) { - var options = Object.extend({ - setLeft: true, - setTop: true, - setWidth: true, - setHeight: true, - offsetTop: 0, - offsetLeft: 0 - }, arguments[2] || {}) - - // find page position of source - source = $PR(source); - var p = Position.page(source); - - // find coordinate system to use - target = $PR(target); - var delta = [0, 0]; - var parent = null; - // delta [0,0] will do fine with position: fixed elements, - // position:absolute needs offsetParent deltas - if (Element.getStyle(target,'position') == 'absolute') { - parent = Position.offsetParent(target); - delta = Position.page(parent); - } - - // correct by body offsets (fixes Safari) - if (parent == document.body) { - delta[0] -= document.body.offsetLeft; - delta[1] -= document.body.offsetTop; - } - - // set position - if(options.setLeft) target.style.left = (p[0] - delta[0] + options.offsetLeft) + 'px'; - if(options.setTop) target.style.top = (p[1] - delta[1] + options.offsetTop) + 'px'; - if(options.setWidth) target.style.width = source.offsetWidth + 'px'; - if(options.setHeight) target.style.height = source.offsetHeight + 'px'; - }, - - absolutize: function(element) { - element = $PR(element); - if (element.style.position == 'absolute') return; - Position.prepare(); - - var offsets = Position.positionedOffset(element); - var top = offsets[1]; - var left = offsets[0]; - var width = element.clientWidth; - var height = element.clientHeight; - - element._originalLeft = left - parseFloat(element.style.left || 0); - element._originalTop = top - parseFloat(element.style.top || 0); - element._originalWidth = element.style.width; - element._originalHeight = element.style.height; - - element.style.position = 'absolute'; - element.style.top = top + 'px';; - element.style.left = left + 'px';; - element.style.width = width + 'px';; - element.style.height = height + 'px';; - }, - - relativize: function(element) { - element = $PR(element); - if (element.style.position == 'relative') return; - Position.prepare(); - - element.style.position = 'relative'; - var top = parseFloat(element.style.top || 0) - (element._originalTop || 0); - var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0); - - element.style.top = top + 'px'; - element.style.left = left + 'px'; - element.style.height = element._originalHeight; - element.style.width = element._originalWidth; - } -} - -// Safari returns margins on body which is incorrect if the child is absolutely -// positioned. For performance reasons, redefine Position.cumulativeOffset for -// KHTML/WebKit only. -if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) { - Position.cumulativeOffset = function(element) { - var valueT = 0, valueL = 0; - do { - valueT += element.offsetTop || 0; - valueL += element.offsetLeft || 0; - if (element.offsetParent == document.body) - if (Element.getStyle(element, 'position') == 'absolute') break; - - element = element.offsetParent; - } while (element); - - return [valueL, valueT]; - } -} diff --git a/view/js/cropper/lib/scriptaculous.js b/view/js/cropper/lib/scriptaculous.js deleted file mode 100644 index f61fc57f7..000000000 --- a/view/js/cropper/lib/scriptaculous.js +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -var Scriptaculous = { - Version: '1.6.1', - require: function(libraryName) { - // inserting via DOM fails in Safari 2.0, so brute force approach - document.write(''); - }, - load: function() { - if((typeof Prototype=='undefined') || - (typeof Element == 'undefined') || - (typeof Element.Methods=='undefined') || - parseFloat(Prototype.Version.split(".")[0] + "." + - Prototype.Version.split(".")[1]) < 1.5) - throw("script.aculo.us requires the Prototype JavaScript framework >= 1.5.0"); - - $A(document.getElementsByTagName("script")).findAll( function(s) { - return (s.src && s.src.match(/scriptaculous\.js(\?.*)?$/)) - }).each( function(s) { - var path = s.src.replace(/scriptaculous\.js(\?.*)?$/,''); - var includes = s.src.match(/\?.*load=([a-z,]*)/); - (includes ? includes[1] : 'builder,effects,dragdrop,controls,slider').split(',').each( - function(include) { Scriptaculous.require(path+include+'.js') }); - }); - } -} - -Scriptaculous.load(); \ No newline at end of file diff --git a/view/js/cropper/lib/slider.js b/view/js/cropper/lib/slider.js deleted file mode 100644 index cd16b692d..000000000 --- a/view/js/cropper/lib/slider.js +++ /dev/null @@ -1,283 +0,0 @@ -// Copyright (c) 2005 Marty Haught, Thomas Fuchs -// -// See http://script.aculo.us for more info -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -if(!Control) var Control = {}; -Control.Slider = Class.create(); - -// options: -// axis: 'vertical', or 'horizontal' (default) -// -// callbacks: -// onChange(value) -// onSlide(value) -Control.Slider.prototype = { - initialize: function(handle, track, options) { - var slider = this; - - if(handle instanceof Array) { - this.handles = handle.collect( function(e) { return $PR(e) }); - } else { - this.handles = [$PR(handle)]; - } - - this.track = $PR(track); - this.options = options || {}; - - this.axis = this.options.axis || 'horizontal'; - this.increment = this.options.increment || 1; - this.step = parseInt(this.options.step || '1'); - this.range = this.options.range || $R(0,1); - - this.value = 0; // assure backwards compat - this.values = this.handles.map( function() { return 0 }); - this.spans = this.options.spans ? this.options.spans.map(function(s){ return $PR(s) }) : false; - this.options.startSpan = $PR(this.options.startSpan || null); - this.options.endSpan = $PR(this.options.endSpan || null); - - this.restricted = this.options.restricted || false; - - this.maximum = this.options.maximum || this.range.end; - this.minimum = this.options.minimum || this.range.start; - - // Will be used to align the handle onto the track, if necessary - this.alignX = parseInt(this.options.alignX || '0'); - this.alignY = parseInt(this.options.alignY || '0'); - - this.trackLength = this.maximumOffset() - this.minimumOffset(); - this.handleLength = this.isVertical() ? this.handles[0].offsetHeight : this.handles[0].offsetWidth; - - this.active = false; - this.dragging = false; - this.disabled = false; - - if(this.options.disabled) this.setDisabled(); - - // Allowed values array - this.allowedValues = this.options.values ? this.options.values.sortBy(Prototype.K) : false; - if(this.allowedValues) { - this.minimum = this.allowedValues.min(); - this.maximum = this.allowedValues.max(); - } - - this.eventMouseDown = this.startDrag.bindAsEventListener(this); - this.eventMouseUp = this.endDrag.bindAsEventListener(this); - this.eventMouseMove = this.update.bindAsEventListener(this); - - // Initialize handles in reverse (make sure first handle is active) - this.handles.each( function(h,i) { - i = slider.handles.length-1-i; - slider.setValue(parseFloat( - (slider.options.sliderValue instanceof Array ? - slider.options.sliderValue[i] : slider.options.sliderValue) || - slider.range.start), i); - Element.makePositioned(h); // fix IE - Event.observe(h, "mousedown", slider.eventMouseDown); - }); - - Event.observe(this.track, "mousedown", this.eventMouseDown); - Event.observe(document, "mouseup", this.eventMouseUp); - Event.observe(document, "mousemove", this.eventMouseMove); - - this.initialized = true; - }, - dispose: function() { - var slider = this; - Event.stopObserving(this.track, "mousedown", this.eventMouseDown); - Event.stopObserving(document, "mouseup", this.eventMouseUp); - Event.stopObserving(document, "mousemove", this.eventMouseMove); - this.handles.each( function(h) { - Event.stopObserving(h, "mousedown", slider.eventMouseDown); - }); - }, - setDisabled: function(){ - this.disabled = true; - }, - setEnabled: function(){ - this.disabled = false; - }, - getNearestValue: function(value){ - if(this.allowedValues){ - if(value >= this.allowedValues.max()) return(this.allowedValues.max()); - if(value <= this.allowedValues.min()) return(this.allowedValues.min()); - - var offset = Math.abs(this.allowedValues[0] - value); - var newValue = this.allowedValues[0]; - this.allowedValues.each( function(v) { - var currentOffset = Math.abs(v - value); - if(currentOffset <= offset){ - newValue = v; - offset = currentOffset; - } - }); - return newValue; - } - if(value > this.range.end) return this.range.end; - if(value < this.range.start) return this.range.start; - return value; - }, - setValue: function(sliderValue, handleIdx){ - if(!this.active) { - this.activeHandle = this.handles[handleIdx]; - this.activeHandleIdx = handleIdx; - this.updateStyles(); - } - handleIdx = handleIdx || this.activeHandleIdx || 0; - if(this.initialized && this.restricted) { - if((handleIdx>0) && (sliderValuethis.values[handleIdx+1])) - sliderValue = this.values[handleIdx+1]; - } - sliderValue = this.getNearestValue(sliderValue); - this.values[handleIdx] = sliderValue; - this.value = this.values[0]; // assure backwards compat - - this.handles[handleIdx].style[this.isVertical() ? 'top' : 'left'] = - this.translateToPx(sliderValue); - - this.drawSpans(); - if(!this.dragging || !this.event) this.updateFinished(); - }, - setValueBy: function(delta, handleIdx) { - this.setValue(this.values[handleIdx || this.activeHandleIdx || 0] + delta, - handleIdx || this.activeHandleIdx || 0); - }, - translateToPx: function(value) { - return Math.round( - ((this.trackLength-this.handleLength)/(this.range.end-this.range.start)) * - (value - this.range.start)) + "px"; - }, - translateToValue: function(offset) { - return ((offset/(this.trackLength-this.handleLength) * - (this.range.end-this.range.start)) + this.range.start); - }, - getRange: function(range) { - var v = this.values.sortBy(Prototype.K); - range = range || 0; - return $R(v[range],v[range+1]); - }, - minimumOffset: function(){ - return(this.isVertical() ? this.alignY : this.alignX); - }, - maximumOffset: function(){ - return(this.isVertical() ? - this.track.offsetHeight - this.alignY : this.track.offsetWidth - this.alignX); - }, - isVertical: function(){ - return (this.axis == 'vertical'); - }, - drawSpans: function() { - var slider = this; - if(this.spans) - $R(0, this.spans.length-1).each(function(r) { slider.setSpan(slider.spans[r], slider.getRange(r)) }); - if(this.options.startSpan) - this.setSpan(this.options.startSpan, - $R(0, this.values.length>1 ? this.getRange(0).min() : this.value )); - if(this.options.endSpan) - this.setSpan(this.options.endSpan, - $R(this.values.length>1 ? this.getRange(this.spans.length-1).max() : this.value, this.maximum)); - }, - setSpan: function(span, range) { - if(this.isVertical()) { - span.style.top = this.translateToPx(range.start); - span.style.height = this.translateToPx(range.end - range.start + this.range.start); - } else { - span.style.left = this.translateToPx(range.start); - span.style.width = this.translateToPx(range.end - range.start + this.range.start); - } - }, - updateStyles: function() { - this.handles.each( function(h){ Element.removeClassName(h, 'selected') }); - Element.addClassName(this.activeHandle, 'selected'); - }, - startDrag: function(event) { - if(Event.isLeftClick(event)) { - if(!this.disabled){ - this.active = true; - - var handle = Event.element(event); - var pointer = [Event.pointerX(event), Event.pointerY(event)]; - if(handle==this.track) { - var offsets = Position.cumulativeOffset(this.track); - this.event = event; - this.setValue(this.translateToValue( - (this.isVertical() ? pointer[1]-offsets[1] : pointer[0]-offsets[0])-(this.handleLength/2) - )); - var offsets = Position.cumulativeOffset(this.activeHandle); - this.offsetX = (pointer[0] - offsets[0]); - this.offsetY = (pointer[1] - offsets[1]); - } else { - // find the handle (prevents issues with Safari) - while((this.handles.indexOf(handle) == -1) && handle.parentNode) - handle = handle.parentNode; - - this.activeHandle = handle; - this.activeHandleIdx = this.handles.indexOf(this.activeHandle); - this.updateStyles(); - - var offsets = Position.cumulativeOffset(this.activeHandle); - this.offsetX = (pointer[0] - offsets[0]); - this.offsetY = (pointer[1] - offsets[1]); - } - } - Event.stop(event); - } - }, - update: function(event) { - if(this.active) { - if(!this.dragging) this.dragging = true; - this.draw(event); - // fix AppleWebKit rendering - if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0); - Event.stop(event); - } - }, - draw: function(event) { - var pointer = [Event.pointerX(event), Event.pointerY(event)]; - var offsets = Position.cumulativeOffset(this.track); - pointer[0] -= this.offsetX + offsets[0]; - pointer[1] -= this.offsetY + offsets[1]; - this.event = event; - this.setValue(this.translateToValue( this.isVertical() ? pointer[1] : pointer[0] )); - if(this.initialized && this.options.onSlide) - this.options.onSlide(this.values.length>1 ? this.values : this.value, this); - }, - endDrag: function(event) { - if(this.active && this.dragging) { - this.finishDrag(event, true); - Event.stop(event); - } - this.active = false; - this.dragging = false; - }, - finishDrag: function(event, success) { - this.active = false; - this.dragging = false; - this.updateFinished(); - }, - updateFinished: function() { - if(this.initialized && this.options.onChange) - this.options.onChange(this.values.length>1 ? this.values : this.value, this); - this.event = null; - } -} diff --git a/view/js/cropper/lib/unittest.js b/view/js/cropper/lib/unittest.js deleted file mode 100644 index be0d25227..000000000 --- a/view/js/cropper/lib/unittest.js +++ /dev/null @@ -1,383 +0,0 @@ -// Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) -// (c) 2005 Jon Tirsen (http://www.tirsen.com) -// (c) 2005 Michael Schuerig (http://www.schuerig.de/michael/) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -// experimental, Firefox-only -Event.simulateMouse = function(element, eventName) { - var options = Object.extend({ - pointerX: 0, - pointerY: 0, - buttons: 0 - }, arguments[2] || {}); - var oEvent = document.createEvent("MouseEvents"); - oEvent.initMouseEvent(eventName, true, true, document.defaultView, - options.buttons, options.pointerX, options.pointerY, options.pointerX, options.pointerY, - false, false, false, false, 0, $PR(element)); - - if(this.mark) Element.remove(this.mark); - this.mark = document.createElement('div'); - this.mark.appendChild(document.createTextNode(" ")); - document.body.appendChild(this.mark); - this.mark.style.position = 'absolute'; - this.mark.style.top = options.pointerY + "px"; - this.mark.style.left = options.pointerX + "px"; - this.mark.style.width = "5px"; - this.mark.style.height = "5px;"; - this.mark.style.borderTop = "1px solid red;" - this.mark.style.borderLeft = "1px solid red;" - - if(this.step) - alert('['+new Date().getTime().toString()+'] '+eventName+'/'+Test.Unit.inspect(options)); - - $PR(element).dispatchEvent(oEvent); -}; - -// Note: Due to a fix in Firefox 1.0.5/6 that probably fixed "too much", this doesn't work in 1.0.6 or DP2. -// You need to downgrade to 1.0.4 for now to get this working -// See https://bugzilla.mozilla.org/show_bug.cgi?id=289940 for the fix that fixed too much -Event.simulateKey = function(element, eventName) { - var options = Object.extend({ - ctrlKey: false, - altKey: false, - shiftKey: false, - metaKey: false, - keyCode: 0, - charCode: 0 - }, arguments[2] || {}); - - var oEvent = document.createEvent("KeyEvents"); - oEvent.initKeyEvent(eventName, true, true, window, - options.ctrlKey, options.altKey, options.shiftKey, options.metaKey, - options.keyCode, options.charCode ); - $PR(element).dispatchEvent(oEvent); -}; - -Event.simulateKeys = function(element, command) { - for(var i=0; i

    ' + - '' + - '' + - '' + - '
    StatusTestMessage
    '; - this.logsummary = $PR('logsummary') - this.loglines = $PR('loglines'); - }, - _toHTML: function(txt) { - return txt.escapeHTML().replace(/\n/g,"
    "); - } -} - -Test.Unit.Runner = Class.create(); -Test.Unit.Runner.prototype = { - initialize: function(testcases) { - this.options = Object.extend({ - testLog: 'testlog' - }, arguments[1] || {}); - this.options.resultsURL = this.parseResultsURLQueryParameter(); - if (this.options.testLog) { - this.options.testLog = $PR(this.options.testLog) || null; - } - if(this.options.tests) { - this.tests = []; - for(var i = 0; i < this.options.tests.length; i++) { - if(/^test/.test(this.options.tests[i])) { - this.tests.push(new Test.Unit.Testcase(this.options.tests[i], testcases[this.options.tests[i]], testcases["setup"], testcases["teardown"])); - } - } - } else { - if (this.options.test) { - this.tests = [new Test.Unit.Testcase(this.options.test, testcases[this.options.test], testcases["setup"], testcases["teardown"])]; - } else { - this.tests = []; - for(var testcase in testcases) { - if(/^test/.test(testcase)) { - this.tests.push(new Test.Unit.Testcase(testcase, testcases[testcase], testcases["setup"], testcases["teardown"])); - } - } - } - } - this.currentTest = 0; - this.logger = new Test.Unit.Logger(this.options.testLog); - setTimeout(this.runTests.bind(this), 1000); - }, - parseResultsURLQueryParameter: function() { - return window.location.search.parseQuery()["resultsURL"]; - }, - // Returns: - // "ERROR" if there was an error, - // "FAILURE" if there was a failure, or - // "SUCCESS" if there was neither - getResult: function() { - var hasFailure = false; - for(var i=0;i 0) { - return "ERROR"; - } - if (this.tests[i].failures > 0) { - hasFailure = true; - } - } - if (hasFailure) { - return "FAILURE"; - } else { - return "SUCCESS"; - } - }, - postResults: function() { - if (this.options.resultsURL) { - new Ajax.Request(this.options.resultsURL, - { method: 'get', parameters: 'result=' + this.getResult(), asynchronous: false }); - } - }, - runTests: function() { - var test = this.tests[this.currentTest]; - if (!test) { - // finished! - this.postResults(); - this.logger.summary(this.summary()); - return; - } - if(!test.isWaiting) { - this.logger.start(test.name); - } - test.run(); - if(test.isWaiting) { - this.logger.message("Waiting for " + test.timeToWait + "ms"); - setTimeout(this.runTests.bind(this), test.timeToWait || 1000); - } else { - this.logger.finish(test.status(), test.summary()); - this.currentTest++; - // tail recursive, hopefully the browser will skip the stackframe - this.runTests(); - } - }, - summary: function() { - var assertions = 0; - var failures = 0; - var errors = 0; - var messages = []; - for(var i=0;i 0) return 'failed'; - if (this.errors > 0) return 'error'; - return 'passed'; - }, - assert: function(expression) { - var message = arguments[1] || 'assert: got "' + Test.Unit.inspect(expression) + '"'; - try { expression ? this.pass() : - this.fail(message); } - catch(e) { this.error(e); } - }, - assertEqual: function(expected, actual) { - var message = arguments[2] || "assertEqual"; - try { (expected == actual) ? this.pass() : - this.fail(message + ': expected "' + Test.Unit.inspect(expected) + - '", actual "' + Test.Unit.inspect(actual) + '"'); } - catch(e) { this.error(e); } - }, - assertEnumEqual: function(expected, actual) { - var message = arguments[2] || "assertEnumEqual"; - try { $A(expected).length == $A(actual).length && - expected.zip(actual).all(function(pair) { return pair[0] == pair[1] }) ? - this.pass() : this.fail(message + ': expected ' + Test.Unit.inspect(expected) + - ', actual ' + Test.Unit.inspect(actual)); } - catch(e) { this.error(e); } - }, - assertNotEqual: function(expected, actual) { - var message = arguments[2] || "assertNotEqual"; - try { (expected != actual) ? this.pass() : - this.fail(message + ': got "' + Test.Unit.inspect(actual) + '"'); } - catch(e) { this.error(e); } - }, - assertNull: function(obj) { - var message = arguments[1] || 'assertNull' - try { (obj==null) ? this.pass() : - this.fail(message + ': got "' + Test.Unit.inspect(obj) + '"'); } - catch(e) { this.error(e); } - }, - assertHidden: function(element) { - var message = arguments[1] || 'assertHidden'; - this.assertEqual("none", element.style.display, message); - }, - assertNotNull: function(object) { - var message = arguments[1] || 'assertNotNull'; - this.assert(object != null, message); - }, - assertInstanceOf: function(expected, actual) { - var message = arguments[2] || 'assertInstanceOf'; - try { - (actual instanceof expected) ? this.pass() : - this.fail(message + ": object was not an instance of the expected type"); } - catch(e) { this.error(e); } - }, - assertNotInstanceOf: function(expected, actual) { - var message = arguments[2] || 'assertNotInstanceOf'; - try { - !(actual instanceof expected) ? this.pass() : - this.fail(message + ": object was an instance of the not expected type"); } - catch(e) { this.error(e); } - }, - _isVisible: function(element) { - element = $PR(element); - if(!element.parentNode) return true; - this.assertNotNull(element); - if(element.style && Element.getStyle(element, 'display') == 'none') - return false; - - return this._isVisible(element.parentNode); - }, - assertNotVisible: function(element) { - this.assert(!this._isVisible(element), Test.Unit.inspect(element) + " was not hidden and didn't have a hidden parent either. " + ("" || arguments[1])); - }, - assertVisible: function(element) { - this.assert(this._isVisible(element), Test.Unit.inspect(element) + " was not visible. " + ("" || arguments[1])); - }, - benchmark: function(operation, iterations) { - var startAt = new Date(); - (iterations || 1).times(operation); - var timeTaken = ((new Date())-startAt); - this.info((arguments[2] || 'Operation') + ' finished ' + - iterations + ' iterations in ' + (timeTaken/1000)+'s' ); - return timeTaken; - } -} - -Test.Unit.Testcase = Class.create(); -Object.extend(Object.extend(Test.Unit.Testcase.prototype, Test.Unit.Assertions.prototype), { - initialize: function(name, test, setup, teardown) { - Test.Unit.Assertions.prototype.initialize.bind(this)(); - this.name = name; - this.test = test || function() {}; - this.setup = setup || function() {}; - this.teardown = teardown || function() {}; - this.isWaiting = false; - this.timeToWait = 1000; - }, - wait: function(time, nextPart) { - this.isWaiting = true; - this.test = nextPart; - this.timeToWait = time; - }, - run: function() { - try { - try { - if (!this.isWaiting) this.setup.bind(this)(); - this.isWaiting = false; - this.test.bind(this)(); - } finally { - if(!this.isWaiting) { - this.teardown.bind(this)(); - } - } - } - catch(e) { this.error(e); } - } -}); diff --git a/view/js/cropper/licence.txt b/view/js/cropper/licence.txt deleted file mode 100644 index b59e02917..000000000 --- a/view/js/cropper/licence.txt +++ /dev/null @@ -1,12 +0,0 @@ -Copyright (c) 2006, David Spurr (www.defusion.org.uk) -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of the David Spurr nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -http://www.opensource.org/licenses/bsd-license.php \ No newline at end of file diff --git a/view/js/cropper/marqueeHoriz.gif b/view/js/cropper/marqueeHoriz.gif deleted file mode 100644 index 25317e5738bfcce43707ec0a0640533f69eb8fff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1125 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 PPffC!10NW#8L$7@U6jV2 diff --git a/view/js/cropper/tests/castleMed.jpg b/view/js/cropper/tests/castleMed.jpg deleted file mode 100644 index c35a6f554a21eb62f3c3e3580e616a4feee8748c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50584 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%0Dl3VwBB+R7y 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 RJ3V^U{{ZIRKl@F8|Jg7^TQ~p! diff --git a/view/js/cropper/tests/example-Basic.htm b/view/js/cropper/tests/example-Basic.htm deleted file mode 100644 index 2a55eca5a..000000000 --- a/view/js/cropper/tests/example-Basic.htm +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - Basic cropper test - - - - - - - - - - -

    Basic cropper test

    -

    - Some test content before the image -

    - -
    - test image -
    - - -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    - - - - - diff --git a/view/js/cropper/tests/example-CSS-Absolute.htm b/view/js/cropper/tests/example-CSS-Absolute.htm deleted file mode 100644 index b605fd344..000000000 --- a/view/js/cropper/tests/example-CSS-Absolute.htm +++ /dev/null @@ -1,162 +0,0 @@ - - - - - - CSS - Absolute positioned (and draggable) test - - - - - - - - - - -

    CSS - Absolute positioned (and draggable) test

    -

    - Some test content before the image -

    -

    - Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Pellentesque consequat risus cursus ipsum. Etiam libero. Integer vel mauris. Donec vulputate. In ut augue vitae nibh lobortis tempor. Aliquam hendrerit quam. Phasellus sed orci. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut sed urna. Donec nunc urna, porttitor a, feugiat pellentesque, varius id, justo. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nulla facilisi. Sed sollicitudin. Integer enim. Aenean sollicitudin. -

    -

    - Integer lorem turpis, dapibus sed, vulputate nec, volutpat a, sem. Sed malesuada laoreet lorem. Duis mauris ipsum, fringilla nec, tristique vel, imperdiet vel, neque. Nulla vel purus. Fusce non lectus. Mauris pulvinar. Curabitur eget eros. Nunc ultrices, risus vitae adipiscing scelerisque, quam mi auctor lacus, non pellentesque augue sapien a magna. Etiam rutrum posuere tortor. Mauris rhoncus sagittis dolor. Donec sed quam. Vivamus vel diam id massa adipiscing bibendum. Suspendisse potenti. Integer arcu est, adipiscing sit amet, convallis eu, sollicitudin tincidunt, quam. -

    -

    - Etiam ligula lorem, imperdiet ac, luctus eget, ultrices at, odio. Vivamus malesuada, justo eu adipiscing semper, nisi dui tempus magna, quis ultrices nunc tellus id massa. Nullam lobortis auctor sapien. Quisque non nulla. Donec lobortis pellentesque nisl. Sed lacus sapien, viverra vitae, blandit ut, fermentum quis, leo. Morbi augue turpis, hendrerit non, feugiat vel, laoreet sed, est. Nunc velit. Praesent lobortis. Integer enim. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Curabitur faucibus lacus ac ante. Donec odio odio, tincidunt a, egestas nec, scelerisque nec, dui. Cras sollicitudin. Donec lacus enim, mollis sit amet, interdum quis, euismod et, nulla. Nunc sit amet dui eu magna dapibus mollis. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nulla facilisi. -

    -

    - In hac habitasse platea dictumst. Nunc neque urna, dapibus ut, tristique ut, bibendum ac, felis. Donec dictum est ut dolor. Etiam accumsan, velit sit amet blandit vestibulum, turpis quam hendrerit risus, vel interdum eros orci in nunc. Curabitur tellus sapien, rutrum ac, euismod ac, malesuada nec, pede. Proin sit amet ipsum. Praesent quam nisl, adipiscing nec, tristique eget, fermentum sed, est. Praesent ac est sit amet orci facilisis placerat. Sed consequat, est sit amet consectetuer viverra, risus urna porttitor tellus, ut convallis nibh libero in lectus. Pellentesque molestie, erat non vehicula pretium, turpis nisi eleifend eros, sed scelerisque tortor odio non tellus. Nunc leo tellus, faucibus vitae, placerat a, accumsan vel, arcu. In et orci. Ut tristique euismod nibh. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Sed nulla nunc, placerat vitae, pellentesque non, interdum non, sapien. Quisque faucibus, eros sed venenatis sagittis, leo risus rhoncus risus, in pretium sem purus a lacus. Aliquam aliquam leo et diam. - -

    -

    - Nulla sagittis diam. Phasellus vitae enim tristique libero molestie tristique. Nam mauris sem, elementum nec, cursus in, fringilla ac, neque. Nunc metus nisi, dictum vel, vulputate quis, porttitor bibendum, tortor. Vestibulum vehicula. Nulla facilisi. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla ac magna sed purus ultricies euismod. Aliquam dictum. Sed mauris. Suspendisse justo. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi purus lorem, auctor non, porta ac, vehicula vel, orci. Morbi pharetra massa nec leo. Maecenas et mauris. Aliquam porttitor tincidunt nulla. Vestibulum pede. -

    -

    - Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Pellentesque consequat risus cursus ipsum. Etiam libero. Integer vel mauris. Donec vulputate. In ut augue vitae nibh lobortis tempor. Aliquam hendrerit quam. Phasellus sed orci. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut sed urna. Donec nunc urna, porttitor a, feugiat pellentesque, varius id, justo. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nulla facilisi. Sed sollicitudin. Integer enim. Aenean sollicitudin. -

    -

    - Integer lorem turpis, dapibus sed, vulputate nec, volutpat a, sem. Sed malesuada laoreet lorem. Duis mauris ipsum, fringilla nec, tristique vel, imperdiet vel, neque. Nulla vel purus. Fusce non lectus. Mauris pulvinar. Curabitur eget eros. Nunc ultrices, risus vitae adipiscing scelerisque, quam mi auctor lacus, non pellentesque augue sapien a magna. Etiam rutrum posuere tortor. Mauris rhoncus sagittis dolor. Donec sed quam. Vivamus vel diam id massa adipiscing bibendum. Suspendisse potenti. Integer arcu est, adipiscing sit amet, convallis eu, sollicitudin tincidunt, quam. -

    -

    - Etiam ligula lorem, imperdiet ac, luctus eget, ultrices at, odio. Vivamus malesuada, justo eu adipiscing semper, nisi dui tempus magna, quis ultrices nunc tellus id massa. Nullam lobortis auctor sapien. Quisque non nulla. Donec lobortis pellentesque nisl. Sed lacus sapien, viverra vitae, blandit ut, fermentum quis, leo. Morbi augue turpis, hendrerit non, feugiat vel, laoreet sed, est. Nunc velit. Praesent lobortis. Integer enim. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Curabitur faucibus lacus ac ante. Donec odio odio, tincidunt a, egestas nec, scelerisque nec, dui. Cras sollicitudin. Donec lacus enim, mollis sit amet, interdum quis, euismod et, nulla. Nunc sit amet dui eu magna dapibus mollis. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nulla facilisi. -

    -

    - In hac habitasse platea dictumst. Nunc neque urna, dapibus ut, tristique ut, bibendum ac, felis. Donec dictum est ut dolor. Etiam accumsan, velit sit amet blandit vestibulum, turpis quam hendrerit risus, vel interdum eros orci in nunc. Curabitur tellus sapien, rutrum ac, euismod ac, malesuada nec, pede. Proin sit amet ipsum. Praesent quam nisl, adipiscing nec, tristique eget, fermentum sed, est. Praesent ac est sit amet orci facilisis placerat. Sed consequat, est sit amet consectetuer viverra, risus urna porttitor tellus, ut convallis nibh libero in lectus. Pellentesque molestie, erat non vehicula pretium, turpis nisi eleifend eros, sed scelerisque tortor odio non tellus. Nunc leo tellus, faucibus vitae, placerat a, accumsan vel, arcu. In et orci. Ut tristique euismod nibh. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Sed nulla nunc, placerat vitae, pellentesque non, interdum non, sapien. Quisque faucibus, eros sed venenatis sagittis, leo risus rhoncus risus, in pretium sem purus a lacus. Aliquam aliquam leo et diam. - -

    -

    - Nulla sagittis diam. Phasellus vitae enim tristique libero molestie tristique. Nam mauris sem, elementum nec, cursus in, fringilla ac, neque. Nunc metus nisi, dictum vel, vulputate quis, porttitor bibendum, tortor. Vestibulum vehicula. Nulla facilisi. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla ac magna sed purus ultricies euismod. Aliquam dictum. Sed mauris. Suspendisse justo. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi purus lorem, auctor non, porta ac, vehicula vel, orci. Morbi pharetra massa nec leo. Maecenas et mauris. Aliquam porttitor tincidunt nulla. Vestibulum pede. -

    -

    - Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Pellentesque consequat risus cursus ipsum. Etiam libero. Integer vel mauris. Donec vulputate. In ut augue vitae nibh lobortis tempor. Aliquam hendrerit quam. Phasellus sed orci. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut sed urna. Donec nunc urna, porttitor a, feugiat pellentesque, varius id, justo. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nulla facilisi. Sed sollicitudin. Integer enim. Aenean sollicitudin. -

    -

    - Integer lorem turpis, dapibus sed, vulputate nec, volutpat a, sem. Sed malesuada laoreet lorem. Duis mauris ipsum, fringilla nec, tristique vel, imperdiet vel, neque. Nulla vel purus. Fusce non lectus. Mauris pulvinar. Curabitur eget eros. Nunc ultrices, risus vitae adipiscing scelerisque, quam mi auctor lacus, non pellentesque augue sapien a magna. Etiam rutrum posuere tortor. Mauris rhoncus sagittis dolor. Donec sed quam. Vivamus vel diam id massa adipiscing bibendum. Suspendisse potenti. Integer arcu est, adipiscing sit amet, convallis eu, sollicitudin tincidunt, quam. -

    -

    - Etiam ligula lorem, imperdiet ac, luctus eget, ultrices at, odio. Vivamus malesuada, justo eu adipiscing semper, nisi dui tempus magna, quis ultrices nunc tellus id massa. Nullam lobortis auctor sapien. Quisque non nulla. Donec lobortis pellentesque nisl. Sed lacus sapien, viverra vitae, blandit ut, fermentum quis, leo. Morbi augue turpis, hendrerit non, feugiat vel, laoreet sed, est. Nunc velit. Praesent lobortis. Integer enim. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Curabitur faucibus lacus ac ante. Donec odio odio, tincidunt a, egestas nec, scelerisque nec, dui. Cras sollicitudin. Donec lacus enim, mollis sit amet, interdum quis, euismod et, nulla. Nunc sit amet dui eu magna dapibus mollis. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nulla facilisi. -

    -

    - In hac habitasse platea dictumst. Nunc neque urna, dapibus ut, tristique ut, bibendum ac, felis. Donec dictum est ut dolor. Etiam accumsan, velit sit amet blandit vestibulum, turpis quam hendrerit risus, vel interdum eros orci in nunc. Curabitur tellus sapien, rutrum ac, euismod ac, malesuada nec, pede. Proin sit amet ipsum. Praesent quam nisl, adipiscing nec, tristique eget, fermentum sed, est. Praesent ac est sit amet orci facilisis placerat. Sed consequat, est sit amet consectetuer viverra, risus urna porttitor tellus, ut convallis nibh libero in lectus. Pellentesque molestie, erat non vehicula pretium, turpis nisi eleifend eros, sed scelerisque tortor odio non tellus. Nunc leo tellus, faucibus vitae, placerat a, accumsan vel, arcu. In et orci. Ut tristique euismod nibh. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Sed nulla nunc, placerat vitae, pellentesque non, interdum non, sapien. Quisque faucibus, eros sed venenatis sagittis, leo risus rhoncus risus, in pretium sem purus a lacus. Aliquam aliquam leo et diam. - -

    -

    - Nulla sagittis diam. Phasellus vitae enim tristique libero molestie tristique. Nam mauris sem, elementum nec, cursus in, fringilla ac, neque. Nunc metus nisi, dictum vel, vulputate quis, porttitor bibendum, tortor. Vestibulum vehicula. Nulla facilisi. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla ac magna sed purus ultricies euismod. Aliquam dictum. Sed mauris. Suspendisse justo. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi purus lorem, auctor non, porta ac, vehicula vel, orci. Morbi pharetra massa nec leo. Maecenas et mauris. Aliquam porttitor tincidunt nulla. Vestibulum pede. -

    - - -
    -

    Absolute test

    -
    - test image -
    - -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -
    - - - - - diff --git a/view/js/cropper/tests/example-CSS-Float.htm b/view/js/cropper/tests/example-CSS-Float.htm deleted file mode 100644 index 3dbeeab4b..000000000 --- a/view/js/cropper/tests/example-CSS-Float.htm +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - CSS - Float test - - - - - - - - - - -

    Test page with floating wrapper

    -

    - Some test content before the image -

    - -
    -

    Float test

    -
    - test image -
    - -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -
    - - - - - diff --git a/view/js/cropper/tests/example-CSS-Relative.htm b/view/js/cropper/tests/example-CSS-Relative.htm deleted file mode 100644 index ecad1341a..000000000 --- a/view/js/cropper/tests/example-CSS-Relative.htm +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - CSS - Relative test - - - - - - - - - - -

    Test page with relatively positioned wrapper

    -

    - Some test content before the image -

    - -
    -

    Relative test

    -
    - test image -
    - - -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -
    - - - - - diff --git a/view/js/cropper/tests/example-CoordsOnLoad.htm b/view/js/cropper/tests/example-CoordsOnLoad.htm deleted file mode 100644 index c14289c2d..000000000 --- a/view/js/cropper/tests/example-CoordsOnLoad.htm +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - Loading & displaying co-ordinates of crop area on attachment test - - - - - - - - - - -

    Loading & displaying co-ordinates of crop area on attachment test

    -

    - Some test content before the image -

    - -
    - test image -
    - - -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    - - - - - diff --git a/view/js/cropper/tests/example-CoordsOnLoadWithRatio.htm b/view/js/cropper/tests/example-CoordsOnLoadWithRatio.htm deleted file mode 100644 index 9ba02da11..000000000 --- a/view/js/cropper/tests/example-CoordsOnLoadWithRatio.htm +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - Loading & displaying co-ordinates (with ratio) of crop area on attachment test< - - - - - - - - - - -

    Loading & displaying co-ordinates (with ratio) of crop area on attachment test

    -

    - Some test content before the image -

    - -
    - test image -
    - - -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    - - - - - diff --git a/view/js/cropper/tests/example-Dimensions.htm b/view/js/cropper/tests/example-Dimensions.htm deleted file mode 100644 index 10e5ba26c..000000000 --- a/view/js/cropper/tests/example-Dimensions.htm +++ /dev/null @@ -1,225 +0,0 @@ - - - - - - Different dimensions test - - - - - - - - - - -

    Multiple dimensions tests

    -

    - Test of applying different dimension restrictions to the cropper -

    - - -
    - Set the cropper with the following dimension restrictions: -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    - -
    - - -
    - test image -
    - - -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    - - - - - diff --git a/view/js/cropper/tests/example-DynamicImage.htm b/view/js/cropper/tests/example-DynamicImage.htm deleted file mode 100644 index 08240bb63..000000000 --- a/view/js/cropper/tests/example-DynamicImage.htm +++ /dev/null @@ -1,203 +0,0 @@ - - - - - - Dynamic image test - - - - - - - - - - -

    Dynamic image test

    -

    - Test of dynamically changing images or removing & re-applying the cropper -

    - -
    - test image -
    - -

    - - -

    - -

    - - -

    - - -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    - - - - - diff --git a/view/js/cropper/tests/example-FixedRatio.htm b/view/js/cropper/tests/example-FixedRatio.htm deleted file mode 100644 index 8d196c15c..000000000 --- a/view/js/cropper/tests/example-FixedRatio.htm +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - Fixed ratio test - - - - - - - - - - -

    Fixed ratio test

    -

    - Test of applying a fixed ratio to the cropper -

    -
    - -
    - test image -
    - - -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    - - - - - diff --git a/view/js/cropper/tests/example-MinimumDimensions.htm b/view/js/cropper/tests/example-MinimumDimensions.htm deleted file mode 100644 index e6d96b393..000000000 --- a/view/js/cropper/tests/example-MinimumDimensions.htm +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - Min dimensions test - - - - - - - - - - -

    Minimum (both axes ) dimension test

    -

    - Test of applying a minimum dimension to both axes to the cropper -

    -
    - -
    - test image -
    - - -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    - - - - - diff --git a/view/js/cropper/tests/example-MinimumWidth.htm b/view/js/cropper/tests/example-MinimumWidth.htm deleted file mode 100644 index ec5d69667..000000000 --- a/view/js/cropper/tests/example-MinimumWidth.htm +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - Min (single axis) dimensions test - - - - - - - - - - -

    Minimum (single axis) dimension test

    -

    - Test of applying a minimum dimension to only one axis (width in this case) to the cropper -

    -
    -

    - -
    - test image -
    - - -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    - - - - - diff --git a/view/js/cropper/tests/example-Preview.htm b/view/js/cropper/tests/example-Preview.htm deleted file mode 100644 index 51bf260d3..000000000 --- a/view/js/cropper/tests/example-Preview.htm +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - - - - - - - - - - -

    - -
    - test image -
    - -
    - -
    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -
    - - - - - diff --git a/view/js/cropper/tests/poppy.jpg b/view/js/cropper/tests/poppy.jpg deleted file mode 100644 index 1f6498584473b632b707c83ec751499878266915..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18338 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 diff --git a/view/js/cropper/tests/staticHTMLStructure.htm b/view/js/cropper/tests/staticHTMLStructure.htm deleted file mode 100644 index ddb99278e..000000000 --- a/view/js/cropper/tests/staticHTMLStructure.htm +++ /dev/null @@ -1,236 +0,0 @@ - - - - - - - - - - - -

    - - -

    - test image -
    -
    -
    - - -
    -
    -
    -
    - -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    - -
    -

    Preview:

    -
    - test image -
    -
    - - - - diff --git a/view/templates/cropbody.tpl b/view/templates/cropbody.tpl index 4cf030bc9..5fedfd0df 100644 --- a/view/templates/cropbody.tpl +++ b/view/templates/cropbody.tpl @@ -1,58 +1,54 @@

    {{$title}}

    -{{$desc}} + {{$desc}}

    +
    -{{$title}} + {{$title}}
    +
    -
    +
    - + - - - - - - - - + + + + + + + + -
    - -
    +
    + +
    diff --git a/view/templates/crophead.tpl b/view/templates/crophead.tpl index 033f2e410..d6fc84567 100644 --- a/view/templates/crophead.tpl +++ b/view/templates/crophead.tpl @@ -1,4 +1,2 @@ - - - - + + diff --git a/view/theme/duepuntozero/style.css b/view/theme/duepuntozero/style.css index 728a55b9c..84ea6db94 100644 --- a/view/theme/duepuntozero/style.css +++ b/view/theme/duepuntozero/style.css @@ -726,6 +726,9 @@ input#dfrn-url { height:175px; padding: 12px; } +#profile-photo-wrapper.crop-preview img { + padding: 0; +} #profile-edit-profile-name-label, #profile-edit-name-label, diff --git a/view/theme/frio/css/style.css b/view/theme/frio/css/style.css index 99fde3309..312bee263 100644 --- a/view/theme/frio/css/style.css +++ b/view/theme/frio/css/style.css @@ -1087,6 +1087,9 @@ color: rgba(255,255,255,.85); aside .vcard #profile-photo-wrapper:hover .tool .action { opacity: 1; } +aside .vcard #profile-photo-wrapper.crop-preview { + padding: 0; +} aside .vcard .profile-header { margin-bottom: 20px; } From 51841ab148949100f27cbe51e029e293564838c1 Mon Sep 17 00:00:00 2001 From: rabuzarus Date: Thu, 29 Mar 2018 18:06:56 +0200 Subject: [PATCH 185/227] cropperjs: fix indention --- view/templates/cropbody.tpl | 38 ++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/view/templates/cropbody.tpl b/view/templates/cropbody.tpl index 5fedfd0df..144277310 100644 --- a/view/templates/cropbody.tpl +++ b/view/templates/cropbody.tpl @@ -13,25 +13,25 @@ From 4efa2109ee0892e926f5d1f43ef4134692c6b3ec Mon Sep 17 00:00:00 2001 From: rabuzarus Date: Thu, 29 Mar 2018 18:39:26 +0200 Subject: [PATCH 186/227] cropperjs: use npm-asset for composer --- composer.json | 13 +---- composer.lock | 107 ++++++++++++++++++++++++++++++++---- view/templates/crophead.tpl | 4 +- 3 files changed, 98 insertions(+), 26 deletions(-) diff --git a/composer.json b/composer.json index 9cef6f379..52b4f2c86 100644 --- a/composer.json +++ b/composer.json @@ -35,23 +35,12 @@ "npm-asset/jquery-datetimepicker": "^2.4.0", "npm-asset/jgrowl": "^1.4", "npm-asset/fullcalendar": "^3.0.1", - "fengyuanchen/cropperjs": "1.2.2" + "npm-asset/cropperjs": "1.2.2" }, "repositories": [ { "type": "vcs", "url": "https://github.com/pear/Text_Highlighter" - }, - { - "type": "package", - "package": { - "name": "fengyuanchen/cropperjs", - "version": "1.2.2", - "dist": { - "url": "https://github.com/fengyuanchen/cropperjs/archive/v1.2.2.zip", - "type": "zip" - } - } } ], "autoload": { diff --git a/composer.lock b/composer.lock index 5d15aef12..4aeae3a72 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "c665c4d63bd0317db0c1992ad7c6c7a1", + "content-hash": "12b8df66213734281765cb6e2c5a786e", "packages": [ { "name": "asika/simple-console", @@ -225,17 +225,6 @@ ], "time": "2015-08-05T01:03:42+00:00" }, - { - "name": "fengyuanchen/cropperjs", - "version": "1.2.2", - "dist": { - "type": "zip", - "url": "https://github.com/fengyuanchen/cropperjs/archive/v1.2.2.zip", - "reference": null, - "shasum": null - }, - "type": "library" - }, { "name": "fxp/composer-asset-plugin", "version": "v1.4.2", @@ -671,6 +660,100 @@ ], "time": "2018-02-26T19:39:55+00:00" }, + { + "name": "npm-asset/cropperjs", + "version": "1.2.2", + "dist": { + "type": "tar", + "url": "https://registry.npmjs.org/cropperjs/-/cropperjs-1.2.2.tgz", + "reference": null, + "shasum": "30dc7a7ce872155b23a33bd10ad4c76c0d613f55" + }, + "require-dev": { + "npm-asset/babel-core": ">=6.26.0,<7.0.0", + "npm-asset/babel-plugin-external-helpers": ">=6.22.0,<7.0.0", + "npm-asset/babel-preset-env": ">=1.6.1,<2.0.0", + "npm-asset/cpy-cli": ">=1.0.1,<2.0.0", + "npm-asset/cssnano": ">=3.10.0,<4.0.0", + "npm-asset/del-cli": ">=1.1.0,<2.0.0", + "npm-asset/eslint": ">=4.14.0,<5.0.0", + "npm-asset/eslint-config-airbnb-base": ">=12.1.0,<13.0.0", + "npm-asset/eslint-plugin-import": ">=2.8.0,<3.0.0", + "npm-asset/node-qunit-phantomjs": ">=2.0.0,<3.0.0", + "npm-asset/npm-run-all": ">=4.1.2,<5.0.0", + "npm-asset/postcss-cli": ">=4.1.1,<5.0.0", + "npm-asset/postcss-cssnext": ">=3.0.2,<4.0.0", + "npm-asset/postcss-header": ">=1.0.0,<2.0.0", + "npm-asset/postcss-url": ">=7.3.0,<8.0.0", + "npm-asset/rollup": ">=0.53.3,<0.54.0", + "npm-asset/rollup-plugin-babel": ">=3.0.3,<4.0.0", + "npm-asset/rollup-watch": ">=4.3.1,<5.0.0", + "npm-asset/stylefmt": ">=6.0.0,<7.0.0", + "npm-asset/uglify-js": ">=3.3.4,<4.0.0" + }, + "type": "npm-asset-library", + "extra": { + "npm-asset-bugs": { + "url": "https://github.com/fengyuanchen/cropperjs/issues" + }, + "npm-asset-files": [ + "src", + "dist" + ], + "npm-asset-main": "dist/cropper.common.js", + "npm-asset-directories": [], + "npm-asset-repository": { + "type": "git", + "url": "git+https://github.com/fengyuanchen/cropperjs.git" + }, + "npm-asset-scripts": { + "build": "npm run build:css && npm run build:js", + "build:css": "postcss src/css/cropper.css -o dist/cropper.css --no-map", + "build:js": "rollup -c", + "clear": "del-cli dist", + "compress": "npm run compress:css && npm run compress:js", + "compress:css": "postcss dist/cropper.css -u cssnano -o dist/cropper.min.css --no-map", + "compress:js": "uglifyjs dist/cropper.js -o dist/cropper.min.js -c -m --comments /^!/", + "copy": "cpy dist/cropper.css docs/css", + "lint": "eslint src/js --fix", + "release": "npm run clear && npm run lint && npm run build && npm run compress && npm run copy && npm test", + "start": "npm-run-all --parallel watch:*", + "test": "node-qunit-phantomjs test/index.html --timeout 10", + "watch:css": "postcss src/css/cropper.css -o docs/css/cropper.css -m -w", + "watch:js": "rollup -c -m -w" + } + }, + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chen Fengyuan", + "url": "http://chenfengyuan.com" + } + ], + "description": "JavaScript image cropper.", + "homepage": "https://fengyuanchen.github.io/cropperjs", + "keywords": [ + "crop", + "cropper", + "cropper.js", + "cropperjs", + "cropping", + "css", + "development", + "front-end", + "html", + "image", + "javascript", + "move", + "rotate", + "scale", + "web", + "zoom" + ], + "time": "2018-01-03T13:39:39+00:00" + }, { "name": "npm-asset/fullcalendar", "version": "3.9.0", diff --git a/view/templates/crophead.tpl b/view/templates/crophead.tpl index d6fc84567..3fd15796e 100644 --- a/view/templates/crophead.tpl +++ b/view/templates/crophead.tpl @@ -1,2 +1,2 @@ - - + + From 515ef66c52178a73af85716a3a3019c0cf7936f5 Mon Sep 17 00:00:00 2001 From: rabuzarus Date: Thu, 29 Mar 2018 20:30:26 +0200 Subject: [PATCH 187/227] cropperjs: fix composer.lock --- composer.lock | 102 ++++++++++++++++++++++++-------------------------- 1 file changed, 48 insertions(+), 54 deletions(-) diff --git a/composer.lock b/composer.lock index 4aeae3a72..72417f8e3 100644 --- a/composer.lock +++ b/composer.lock @@ -41,16 +41,16 @@ }, { "name": "bower-asset/Chart-js", - "version": "v2.7.2", + "version": "v2.7.1", "source": { "type": "git", "url": "https://github.com/chartjs/Chart.js.git", - "reference": "98f104cdd03617f1300b417b3d60c23d4e3e3403" + "reference": "0fead21939b92c15093c1b7d5ee2627fb5900fff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/chartjs/Chart.js/zipball/98f104cdd03617f1300b417b3d60c23d4e3e3403", - "reference": "98f104cdd03617f1300b417b3d60c23d4e3e3403", + "url": "https://api.github.com/repos/chartjs/Chart.js/zipball/0fead21939b92c15093c1b7d5ee2627fb5900fff", + "reference": "0fead21939b92c15093c1b7d5ee2627fb5900fff", "shasum": "" }, "type": "bower-asset-library", @@ -69,7 +69,7 @@ "MIT" ], "description": "Simple HTML5 charts using the canvas element.", - "time": "2018-03-01T21:45:21+00:00" + "time": "2017-10-28T15:01:52+00:00" }, { "name": "bower-asset/base64", @@ -286,16 +286,16 @@ }, { "name": "guzzlehttp/guzzle", - "version": "6.3.2", + "version": "6.3.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "68d0ea14d5a3f42a20e87632a5f84931e2709c90" + "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/68d0ea14d5a3f42a20e87632a5f84931e2709c90", - "reference": "68d0ea14d5a3f42a20e87632a5f84931e2709c90", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/f4db5a78a5ea468d4831de7f0bf9d9415e348699", + "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699", "shasum": "" }, "require": { @@ -305,7 +305,7 @@ }, "require-dev": { "ext-curl": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4", + "phpunit/phpunit": "^4.0 || ^5.0", "psr/log": "^1.0" }, "suggest": { @@ -314,7 +314,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "6.3-dev" + "dev-master": "6.2-dev" } }, "autoload": { @@ -347,7 +347,7 @@ "rest", "web service" ], - "time": "2018-03-26T16:33:04+00:00" + "time": "2017-06-22T18:50:49+00:00" }, { "name": "guzzlehttp/promises", @@ -610,16 +610,16 @@ }, { "name": "mobiledetect/mobiledetectlib", - "version": "2.8.31", + "version": "2.8.30", "source": { "type": "git", "url": "https://github.com/serbanghita/Mobile-Detect.git", - "reference": "adb882ea3b9d154f087ecb2c333180dad6f4dd37" + "reference": "5500bbbf312fe77ef0c7223858dad84fe49ee0c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/serbanghita/Mobile-Detect/zipball/adb882ea3b9d154f087ecb2c333180dad6f4dd37", - "reference": "adb882ea3b9d154f087ecb2c333180dad6f4dd37", + "url": "https://api.github.com/repos/serbanghita/Mobile-Detect/zipball/5500bbbf312fe77ef0c7223858dad84fe49ee0c3", + "reference": "5500bbbf312fe77ef0c7223858dad84fe49ee0c3", "shasum": "" }, "require": { @@ -658,7 +658,7 @@ "mobile detector", "php mobile detect" ], - "time": "2018-02-26T19:39:55+00:00" + "time": "2017-12-18T10:38:51+00:00" }, { "name": "npm-asset/cropperjs", @@ -756,27 +756,27 @@ }, { "name": "npm-asset/fullcalendar", - "version": "3.9.0", + "version": "3.8.2", "dist": { "type": "tar", - "url": "https://registry.npmjs.org/fullcalendar/-/fullcalendar-3.9.0.tgz", + "url": "https://registry.npmjs.org/fullcalendar/-/fullcalendar-3.8.2.tgz", "reference": null, - "shasum": "b608a9989f3416f0b1d526c6bdfeeaf2ac79eda5" + "shasum": "ef7dc77b89134bbe6163e51136f7a1f8bfc1d807" }, "require": { "npm-asset/jquery": ">=2,<4.0", - "npm-asset/moment": ">=2.20.1,<3.0.0" + "npm-asset/moment": ">=2.9.0,<3.0.0" }, "require-dev": { - "npm-asset/awesome-typescript-loader": ">=3.5.0,<4.0.0", + "npm-asset/awesome-typescript-loader": ">=3.3.0,<4.0.0", "npm-asset/bootstrap": ">=3.3.7,<4.0.0", "npm-asset/components-jqueryui": "dev-github:components/jqueryui", - "npm-asset/css-loader": ">=0.28.10,<0.29.0", + "npm-asset/css-loader": ">=0.28.7,<0.29.0", "npm-asset/del": ">=2.2.1,<3.0.0", "npm-asset/dts-generator": ">=2.1.0,<3.0.0", - "npm-asset/eslint": ">=4.18.2,<5.0.0", - "npm-asset/eslint-config-standard": ">=11.0.0,<12.0.0", - "npm-asset/eslint-plugin-import": ">=2.9.0,<3.0.0", + "npm-asset/eslint": ">=4.13.1,<5.0.0", + "npm-asset/eslint-config-standard": ">=11.0.0-beta.0,<12.0.0", + "npm-asset/eslint-plugin-import": ">=2.8.0,<3.0.0", "npm-asset/eslint-plugin-node": ">=5.2.1,<6.0.0", "npm-asset/eslint-plugin-promise": ">=3.6.0,<4.0.0", "npm-asset/eslint-plugin-standard": ">=3.0.1,<4.0.0", @@ -789,7 +789,7 @@ "npm-asset/gulp-modify-file": ">=1.0.0,<2.0.0", "npm-asset/gulp-rename": ">=1.2.2,<2.0.0", "npm-asset/gulp-shell": ">=0.6.5,<0.7.0", - "npm-asset/gulp-tslint": ">=8.1.3,<9.0.0", + "npm-asset/gulp-tslint": ">=8.1.2,<9.0.0", "npm-asset/gulp-uglify": ">=2.0.0,<3.0.0", "npm-asset/gulp-util": ">=3.0.7,<4.0.0", "npm-asset/gulp-watch": ">=4.3.11,<5.0.0", @@ -808,14 +808,14 @@ "npm-asset/native-promise-only": ">=0.8.1,<0.9.0", "npm-asset/node-sass": ">=4.7.2,<5.0.0", "npm-asset/phantomjs-prebuilt": ">=2.1.7,<3.0.0", - "npm-asset/sass-loader": ">=6.0.7,<7.0.0", + "npm-asset/sass-loader": ">=6.0.6,<7.0.0", "npm-asset/tslib": ">=1.8.0,<2.0.0", "npm-asset/tslint": ">=5.8.0,<6.0.0", "npm-asset/tslint-config-standard": ">=7.0.0,<8.0.0", "npm-asset/types--jquery": "2.0.47", - "npm-asset/typescript": ">=2.7.2,<3.0.0", - "npm-asset/webpack": ">=3.11.0,<4.0.0", - "npm-asset/webpack-stream": ">=4.0.2,<5.0.0", + "npm-asset/typescript": ">=2.6.2,<3.0.0", + "npm-asset/webpack": ">=3.8.1,<4.0.0", + "npm-asset/webpack-stream": ">=4.0.0,<5.0.0", "npm-asset/yargs": ">=4.8.1,<5.0.0" }, "type": "npm-asset-library", @@ -864,7 +864,7 @@ "full-sized", "jquery-plugin" ], - "time": "2018-03-05T03:30:23+00:00" + "time": "2018-01-30T23:49:01+00:00" }, { "name": "npm-asset/jgrowl", @@ -1027,12 +1027,12 @@ }, { "name": "npm-asset/jquery-datetimepicker", - "version": "2.5.20", + "version": "2.5.17", "dist": { "type": "tar", - "url": "https://registry.npmjs.org/jquery-datetimepicker/-/jquery-datetimepicker-2.5.20.tgz", + "url": "https://registry.npmjs.org/jquery-datetimepicker/-/jquery-datetimepicker-2.5.17.tgz", "reference": null, - "shasum": "687d6204b90b03dc93f725f8df036e1d061f37ac" + "shasum": "8857a631f248081d4072563bde40fa8c17e407b1" }, "require": { "npm-asset/jquery": ">=1.7.2", @@ -1040,14 +1040,8 @@ "npm-asset/php-date-formatter": ">=1.3.4,<2.0.0" }, "require-dev": { - "npm-asset/chai": ">=4.1.2,<5.0.0", "npm-asset/concat": "dev-github:azer/concat", "npm-asset/concat-cli": ">=4.0.0,<5.0.0", - "npm-asset/karma": ">=2.0.0,<3.0.0", - "npm-asset/karma-chai": ">=0.1.0,<0.2.0", - "npm-asset/karma-firefox-launcher": ">=1.1.0,<2.0.0", - "npm-asset/karma-mocha": ">=1.3.0,<2.0.0", - "npm-asset/mocha": ">=5.0.4,<6.0.0", "npm-asset/uglifycss": ">=0.0.27,<0.0.28", "npm-asset/uglifyjs": ">=2.4.10,<3.0.0" }, @@ -1063,13 +1057,13 @@ "url": "git+https://github.com/xdan/datetimepicker.git" }, "npm-asset-scripts": { - "test": "karma start --browsers Firefox karma.conf.js --single-run", + "test": "echo \"Error: no test specified\" && exit 1", "concat": "concat-cli -f node_modules/php-date-formatter/js/php-date-formatter.min.js jquery.datetimepicker.js node_modules/jquery-mousewheel/jquery.mousewheel.js -o build/jquery.datetimepicker.full.js", "minify": "uglifyjs jquery.datetimepicker.js -c -m -o build/jquery.datetimepicker.min.js && uglifycss jquery.datetimepicker.css > build/jquery.datetimepicker.min.css", "minifyconcat": "uglifyjs build/jquery.datetimepicker.full.js -c -m -o build/jquery.datetimepicker.full.min.js", "github": "git add --all && git commit -m \"New version %npm_package_version% \" && git tag %npm_package_version% && git push --tags origin HEAD:master && npm publish", "build": "npm run minify && npm run concat && npm run minifyconcat", - "public": "npm run test && npm version patch --no-git-tag-version && npm run build && npm run github" + "public": "npm version patch --no-git-tag-version && npm run build && npm run github" } }, "license": [ @@ -1079,7 +1073,7 @@ { "name": "Chupurnov", "email": "chupurnov@gmail.com", - "url": "https://xdsoft.net/" + "url": "http://xdsoft.net/" } ], "description": "jQuery Plugin DateTimePicker it is DatePicker and TimePicker in one", @@ -1093,7 +1087,7 @@ "time", "timepicker" ], - "time": "2018-03-21T16:26:39+00:00" + "time": "2018-01-23T05:56:50+00:00" }, { "name": "npm-asset/jquery-mousewheel", @@ -1152,12 +1146,12 @@ }, { "name": "npm-asset/moment", - "version": "2.21.0", + "version": "2.20.1", "dist": { "type": "tar", - "url": "https://registry.npmjs.org/moment/-/moment-2.21.0.tgz", + "url": "https://registry.npmjs.org/moment/-/moment-2.20.1.tgz", "reference": null, - "shasum": "2a114b51d2a6ec9e6d83cf803f838a878d8a023a" + "shasum": "d6eb1a46cbcc14a2b2f9434112c1ff8907f313fd" }, "require-dev": { "npm-asset/benchmark": "dev-default|*", @@ -1260,7 +1254,7 @@ "time", "validate" ], - "time": "2018-03-02T20:41:10+00:00" + "time": "2017-12-19T04:44:18+00:00" }, { "name": "npm-asset/php-date-formatter", @@ -1472,16 +1466,16 @@ }, { "name": "paragonie/sodium_compat", - "version": "v1.6.1", + "version": "v1.6.0", "source": { "type": "git", "url": "https://github.com/paragonie/sodium_compat.git", - "reference": "9857e17bf9c1464485d8cc804eb13f2bcddc4cf0" + "reference": "1f6e5682eff4a5a6a394b14331a1904f1740e432" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/sodium_compat/zipball/9857e17bf9c1464485d8cc804eb13f2bcddc4cf0", - "reference": "9857e17bf9c1464485d8cc804eb13f2bcddc4cf0", + "url": "https://api.github.com/repos/paragonie/sodium_compat/zipball/1f6e5682eff4a5a6a394b14331a1904f1740e432", + "reference": "1f6e5682eff4a5a6a394b14331a1904f1740e432", "shasum": "" }, "require": { @@ -1550,7 +1544,7 @@ "secret-key cryptography", "side-channel resistant" ], - "time": "2018-03-21T17:08:08+00:00" + "time": "2018-02-15T05:50:20+00:00" }, { "name": "pear/console_getopt", From 586b0b6e5724c79c17f57e04897a1c7d7dead6f6 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Thu, 29 Mar 2018 19:29:09 -0400 Subject: [PATCH 188/227] Add bash to text_highlight language list --- include/text.php | 4 ++++ src/Content/Text/BBCode.php | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/include/text.php b/include/text.php index 67ce7e65e..311422c57 100644 --- a/include/text.php +++ b/include/text.php @@ -2030,6 +2030,10 @@ function text_highlight($s, $lang) { $lang = 'javascript'; } + if ($lang === 'bash') { + $lang = 'sh'; + } + // @TODO: Replace Text_Highlighter_Renderer_Html by scrivo/highlight.php // Autoload the library to make constants available diff --git a/src/Content/Text/BBCode.php b/src/Content/Text/BBCode.php index 7d1c42976..d545492bb 100644 --- a/src/Content/Text/BBCode.php +++ b/src/Content/Text/BBCode.php @@ -1294,7 +1294,7 @@ class BBCode extends BaseObject { if (in_array(strtolower($match[1]), ['php', 'css', 'mysql', 'sql', 'abap', 'diff', 'html', 'perl', 'ruby', - 'vbscript', 'avrc', 'dtd', 'java', 'xml', 'cpp', 'python', 'javascript', 'js', 'sh']) + 'vbscript', 'avrc', 'dtd', 'java', 'xml', 'cpp', 'python', 'javascript', 'js', 'sh', 'bash']) ) { return text_highlight($match[2], strtolower($match[1])); } From 80b6dc5787a6da176f1906132e8b520b5aa2db43 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Thu, 29 Mar 2018 19:29:36 -0400 Subject: [PATCH 189/227] Add fallback to regular code if language doesn't exist --- src/Content/Text/BBCode.php | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Content/Text/BBCode.php b/src/Content/Text/BBCode.php index d545492bb..5b0aa2cff 100644 --- a/src/Content/Text/BBCode.php +++ b/src/Content/Text/BBCode.php @@ -1292,13 +1292,17 @@ class BBCode extends BaseObject private static function textHighlightCallback($match) { + // Fallback in case the language doesn't exist + $return = '[code]' . $match[2] . '[/code]'; + if (in_array(strtolower($match[1]), ['php', 'css', 'mysql', 'sql', 'abap', 'diff', 'html', 'perl', 'ruby', 'vbscript', 'avrc', 'dtd', 'java', 'xml', 'cpp', 'python', 'javascript', 'js', 'sh', 'bash']) ) { - return text_highlight($match[2], strtolower($match[1])); + $return = text_highlight($match[2], strtolower($match[1])); } - return $match[0]; + + return $return; } /** From 3a58fe48bd915da6d3f3d2a40317a5b0b43b4baa Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Thu, 29 Mar 2018 23:28:48 -0400 Subject: [PATCH 190/227] Fix formatting in mod/follow --- mod/follow.php | 132 ++++++++++++++++++++++++------------------------- 1 file changed, 66 insertions(+), 66 deletions(-) diff --git a/mod/follow.php b/mod/follow.php index 1dc20d16d..639fa0686 100644 --- a/mod/follow.php +++ b/mod/follow.php @@ -11,10 +11,10 @@ use Friendica\Model\Profile; use Friendica\Network\Probe; use Friendica\Database\DBM; -function follow_post(App $a) { - +function follow_post(App $a) +{ if (!local_user()) { - notice(L10n::t('Permission denied.') . EOL); + notice(L10n::t('Permission denied.')); goaway($_SESSION['return_url']); // NOTREACHED } @@ -29,7 +29,7 @@ function follow_post(App $a) { // Makes the connection request for friendica contacts easier // This is just a precaution if maybe this page is called somewhere directly via POST - $_SESSION["fastlane"] = $url; + $_SESSION['fastlane'] = $url; $result = Contact::createFromProbe($uid, $url, true); @@ -39,19 +39,19 @@ function follow_post(App $a) { } goaway($return_url); } elseif ($result['cid']) { - goaway(System::baseUrl().'/contacts/'.$result['cid']); + goaway(System::baseUrl() . '/contacts/' . $result['cid']); } - info(L10n::t('The contact could not be added.').EOL); + info(L10n::t('The contact could not be added.')); goaway($return_url); // NOTREACHED } -function follow_content(App $a) { - +function follow_content(App $a) +{ if (!local_user()) { - notice(L10n::t('Permission denied.') . EOL); + notice(L10n::t('Permission denied.')); goaway($_SESSION['return_url']); // NOTREACHED } @@ -70,8 +70,8 @@ function follow_content(App $a) { if ($r) { if ($r[0]['pending']) { - notice(L10n::t('You already added this contact.').EOL); - $submit = ""; + notice(L10n::t('You already added this contact.')); + $submit = ''; //goaway($_SESSION['return_url']); // NOTREACHED } @@ -79,104 +79,104 @@ function follow_content(App $a) { $ret = Probe::uri($url); - if (($ret["network"] == NETWORK_DIASPORA) && !Config::get('system', 'diaspora_enabled')) { - notice(L10n::t("Diaspora support isn't enabled. Contact can't be added.") . EOL); - $submit = ""; + if (($ret['network'] == NETWORK_DIASPORA) && !Config::get('system', 'diaspora_enabled')) { + notice(L10n::t("Diaspora support isn't enabled. Contact can't be added.")); + $submit = ''; //goaway($_SESSION['return_url']); // NOTREACHED } - if (($ret["network"] == NETWORK_OSTATUS) && Config::get('system', 'ostatus_disabled')) { - notice(L10n::t("OStatus support is disabled. Contact can't be added.") . EOL); - $submit = ""; + if (($ret['network'] == NETWORK_OSTATUS) && Config::get('system', 'ostatus_disabled')) { + notice(L10n::t("OStatus support is disabled. Contact can't be added.")); + $submit = ''; //goaway($_SESSION['return_url']); // NOTREACHED } - if ($ret["network"] == NETWORK_PHANTOM) { - notice(L10n::t("The network type couldn't be detected. Contact can't be added.") . EOL); - $submit = ""; + if ($ret['network'] == NETWORK_PHANTOM) { + notice(L10n::t("The network type couldn't be detected. Contact can't be added.")); + $submit = ''; //goaway($_SESSION['return_url']); // NOTREACHED } - if ($ret["network"] == NETWORK_MAIL) { - $ret["url"] = $ret["addr"]; + if ($ret['network'] == NETWORK_MAIL) { + $ret['url'] = $ret['addr']; } if (($ret['network'] === NETWORK_DFRN) && !DBM::is_result($r)) { - $request = $ret["request"]; + $request = $ret['request']; $tpl = get_markup_template('dfrn_request.tpl'); } else { - $request = System::baseUrl()."/follow"; + $request = System::baseUrl() . '/follow'; $tpl = get_markup_template('auto_request.tpl'); } $r = q("SELECT `url` FROM `contact` WHERE `uid` = %d AND `self` LIMIT 1", intval($uid)); if (!$r) { - notice(L10n::t('Permission denied.') . EOL); + notice(L10n::t('Permission denied.')); goaway($_SESSION['return_url']); // NOTREACHED } - $myaddr = $r[0]["url"]; + $myaddr = $r[0]['url']; $gcontact_id = 0; // Makes the connection request for friendica contacts easier - $_SESSION["fastlane"] = $ret["url"]; + $_SESSION['fastlane'] = $ret['url']; $r = q("SELECT `id`, `location`, `about`, `keywords` FROM `gcontact` WHERE `nurl` = '%s'", - normalise_link($ret["url"])); + normalise_link($ret['url'])); if (!$r) { - $r = [["location" => "", "about" => "", "keywords" => ""]]; + $r = [['location' => '', 'about' => '', 'keywords' => '']]; } else { - $gcontact_id = $r[0]["id"]; + $gcontact_id = $r[0]['id']; } if ($ret['network'] === NETWORK_DIASPORA) { - $r[0]["location"] = ""; - $r[0]["about"] = ""; + $r[0]['location'] = ''; + $r[0]['about'] = ''; } - $header = L10n::t("Connect/Follow"); + $header = L10n::t('Connect/Follow'); - $o = replace_macros($tpl, [ - '$header' => htmlentities($header), - //'$photo' => proxy_url($ret["photo"], false, PROXY_SIZE_SMALL), - '$desc' => "", - '$pls_answer' => L10n::t('Please answer the following:'), - '$does_know_you' => ['knowyou', L10n::t('Does %s know you?', $ret["name"]), false, '', [L10n::t('No'), L10n::t('Yes')]], - '$add_note' => L10n::t('Add a personal note:'), - '$page_desc' => "", - '$friendica' => "", - '$statusnet' => "", - '$diaspora' => "", - '$diasnote' => "", - '$your_address' => L10n::t('Your Identity Address:'), - '$invite_desc' => "", - '$emailnet' => "", - '$submit' => $submit, - '$cancel' => L10n::t('Cancel'), - '$nickname' => "", - '$name' => $ret["name"], - '$url' => $ret["url"], - '$zrl' => Profile::zrl($ret["url"]), - '$url_label' => L10n::t("Profile URL"), - '$myaddr' => $myaddr, - '$request' => $request, - /*'$location' => Friendica\Content\Text\BBCode::::convert($r[0]["location"]), - '$location_label' => L10n::t("Location:"), - '$about' => Friendica\Content\Text\BBCode::::convert($r[0]["about"], false, false), - '$about_label' => L10n::t("About:"), */ - '$keywords' => $r[0]["keywords"], - '$keywords_label' => L10n::t("Tags:") + $o = replace_macros($tpl, [ + '$header' => htmlentities($header), + //'$photo' => proxy_url($ret['photo'], false, PROXY_SIZE_SMALL), + '$desc' => '', + '$pls_answer' => L10n::t('Please answer the following:'), + '$does_know_you' => ['knowyou', L10n::t('Does %s know you?', $ret['name']), false, '', [L10n::t('No'), L10n::t('Yes')]], + '$add_note' => L10n::t('Add a personal note:'), + '$page_desc' => '', + '$friendica' => '', + '$statusnet' => '', + '$diaspora' => '', + '$diasnote' => '', + '$your_address' => L10n::t('Your Identity Address:'), + '$invite_desc' => '', + '$emailnet' => '', + '$submit' => $submit, + '$cancel' => L10n::t('Cancel'), + '$nickname' => '', + '$name' => $ret['name'], + '$url' => $ret['url'], + '$zrl' => Profile::zrl($ret['url']), + '$url_label' => L10n::t('Profile URL'), + '$myaddr' => $myaddr, + '$request' => $request, + /*'$location' => Friendica\Content\Text\BBCode::::convert($r[0]['location']), + '$location_label'=> L10n::t('Location:'), + '$about' => Friendica\Content\Text\BBCode::::convert($r[0]['about'], false, false), + '$about_label' => L10n::t('About:'),*/ + '$keywords' => $r[0]['keywords'], + '$keywords_label'=> L10n::t('Tags:') ]); - $a->page['aside'] = ""; + $a->page['aside'] = ''; - Profile::load($a, "", 0, Contact::getDetailsByURL($ret["url"]), false); + Profile::load($a, '', 0, Contact::getDetailsByURL($ret['url']), false); if ($gcontact_id <> 0) { $o .= replace_macros(get_markup_template('section_title.tpl'), @@ -184,7 +184,7 @@ function follow_content(App $a) { ); // Show last public posts - $o .= Contact::getPostsFromUrl($ret["url"]); + $o .= Contact::getPostsFromUrl($ret['url']); } return $o; From d13f36938cf5132b822c313eef4f9ed565ecf7b9 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Thu, 29 Mar 2018 23:29:41 -0400 Subject: [PATCH 191/227] Suppress error message for non-existing contacts in mod/follow --- mod/follow.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/mod/follow.php b/mod/follow.php index 639fa0686..1292d24e3 100644 --- a/mod/follow.php +++ b/mod/follow.php @@ -176,7 +176,10 @@ function follow_content(App $a) $a->page['aside'] = ''; - Profile::load($a, '', 0, Contact::getDetailsByURL($ret['url']), false); + $profiledata = Contact::getDetailsByURL($ret['url']); + if ($profiledata) { + Profile::load($a, '', 0, $profiledata, false); + } if ($gcontact_id <> 0) { $o .= replace_macros(get_markup_template('section_title.tpl'), From 1613f2a1c48db54e8841a286dd60013fd7859b48 Mon Sep 17 00:00:00 2001 From: Michael Date: Fri, 30 Mar 2018 06:20:00 +0000 Subject: [PATCH 192/227] Ensure that public contacts can't create toplevel posts --- mod/dfrn_notify.php | 1 - src/Protocol/DFRN.php | 26 +++++++++++++++----------- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/mod/dfrn_notify.php b/mod/dfrn_notify.php index a9dbcd263..a43c316b0 100644 --- a/mod/dfrn_notify.php +++ b/mod/dfrn_notify.php @@ -55,7 +55,6 @@ function dfrn_notify_post(App $a) { } // Set the user id. This is important if this is a public contact - $importer['uid'] = $user['uid']; $importer['importer_uid'] = $user['uid']; // Now we should be able to import it diff --git a/src/Protocol/DFRN.php b/src/Protocol/DFRN.php index 429c5051f..3d836acf9 100644 --- a/src/Protocol/DFRN.php +++ b/src/Protocol/DFRN.php @@ -1433,7 +1433,7 @@ class DFRN $contact_old = dba::fetch_first("SELECT `id`, `uid`, `url`, `network`, `avatar-date`, `avatar`, `name-date`, `uri-date`, `addr`, `name`, `nick`, `about`, `location`, `keywords`, `xmpp`, `bdyear`, `bd`, `hidden`, `contact-type` FROM `contact` WHERE `uid` = ? AND `nurl` = ? AND `network` != ?", - $importer["uid"], + $importer["importer_uid"], normalise_link($author["link"]), NETWORK_STATUSNET ); @@ -1443,7 +1443,7 @@ class DFRN $author["network"] = $contact_old["network"]; } else { if (!$onlyfetch) { - logger("Contact ".$author["link"]." wasn't found for user ".$importer["uid"]." XML: ".$xml, LOGGER_DEBUG); + logger("Contact ".$author["link"]." wasn't found for user ".$importer["importer_uid"]." XML: ".$xml, LOGGER_DEBUG); } $author["contact-id"] = $importer["id"]; @@ -1639,7 +1639,7 @@ class DFRN Contact::updateAvatar( $author['avatar'], - $importer['uid'], + $importer['importer_uid'], $contact['id'], (strtotime($contact['avatar-date']) > strtotime($contact_old['avatar-date']) || ($author['avatar'] != $contact_old['avatar'])) ); @@ -1657,7 +1657,7 @@ class DFRN $poco["contact-type"] = $contact["contact-type"]; $gcid = GContact::update($poco); - GContact::link($gcid, $importer["uid"], $contact["id"]); + GContact::link($gcid, $importer["importer_uid"], $contact["id"]); } return $author; @@ -2617,7 +2617,7 @@ class DFRN if ((x($ev, "desc") || x($ev, "summary")) && x($ev, "start")) { logger("Event in item ".$item["uri"]." was found.", LOGGER_DEBUG); $ev["cid"] = $importer["id"]; - $ev["uid"] = $importer["uid"]; + $ev["uid"] = $importer["importer_uid"]; $ev["uri"] = $item["uri"]; $ev["edited"] = $item["edited"]; $ev["private"] = $item["private"]; @@ -2626,7 +2626,7 @@ class DFRN $r = q( "SELECT `id` FROM `event` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1", dbesc($item["uri"]), - intval($importer["uid"]) + intval($importer["importer_uid"]) ); if (DBM::is_result($r)) { $ev["id"] = $r[0]["id"]; @@ -2681,6 +2681,10 @@ class DFRN return true; } } else { // $entrytype == DFRN_TOP_LEVEL + if ($importer["uid"] == 0) { + logger("Contact ".$importer["id"]." isn't known to user ".$importer["importer_uid"].". The post will be ignored.", LOGGER_DEBUG); + return; + } if (!link_compare($item["owner-link"], $importer["url"])) { /* * The item owner info is not our contact. It's OK and is to be expected if this is a tgroup delivery, @@ -2736,10 +2740,10 @@ class DFRN return false; } - $condition = ["`uri` = ? AND `uid` = ? AND NOT `file` LIKE '%[%'", $uri, $importer["uid"]]; + $condition = ["`uri` = ? AND `uid` = ? AND NOT `file` LIKE '%[%'", $uri, $importer["importer_uid"]]; $item = dba::selectFirst('item', ['id', 'parent', 'contact-id'], $condition); if (!DBM::is_result($item)) { - logger("Item with uri " . $uri . " for user " . $importer["uid"] . " wasn't found.", LOGGER_DEBUG); + logger("Item with uri " . $uri . " for user " . $importer["importer_uid"] . " wasn't found.", LOGGER_DEBUG); return; } @@ -2808,7 +2812,7 @@ class DFRN $xpath->registerNamespace("statusnet", NAMESPACE_STATUSNET); $header = []; - $header["uid"] = $importer["uid"]; + $header["uid"] = $importer["importer_uid"]; $header["network"] = NETWORK_DFRN; $header["type"] = "remote"; $header["wall"] = 0; @@ -2827,7 +2831,7 @@ class DFRN self::fetchauthor($xpath, $doc->firstChild, $importer, "dfrn:owner", false, $xml); } - logger("Import DFRN message for user " . $importer["uid"] . " from contact " . $importer["id"], LOGGER_DEBUG); + logger("Import DFRN message for user " . $importer["importer_uid"] . " from contact " . $importer["id"], LOGGER_DEBUG); // The account type is new since 3.5.1 if ($xpath->query("/atom:feed/dfrn:account_type")->length > 0) { @@ -2895,7 +2899,7 @@ class DFRN self::processEntry($header, $xpath, $entry, $importer, $xml); } } - logger("Import done for user " . $importer["uid"] . " from contact " . $importer["id"], LOGGER_DEBUG); + logger("Import done for user " . $importer["importer_uid"] . " from contact " . $importer["id"], LOGGER_DEBUG); return 200; } From 2eb4912dbf3e0c26b8945ee7a64ac0ff1c9ce9ce Mon Sep 17 00:00:00 2001 From: Michael Date: Fri, 30 Mar 2018 19:17:12 +0000 Subject: [PATCH 193/227] New functionality to set a password for a given user --- src/Core/Console.php | 2 + src/Core/Console/NewPassword.php | 91 ++++++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+) create mode 100644 src/Core/Console/NewPassword.php diff --git a/src/Core/Console.php b/src/Core/Console.php index eb6e08057..02a0b66ae 100644 --- a/src/Core/Console.php +++ b/src/Core/Console.php @@ -22,6 +22,7 @@ class Console extends \Asika\SimpleConsole\Console 'globalcommunityblock' => __NAMESPACE__ . '\Console\GlobalCommunityBlock', 'globalcommunitysilence' => __NAMESPACE__ . '\Console\GlobalCommunitySilence', 'maintenance' => __NAMESPACE__ . '\Console\Maintenance', + 'newpassword' => __NAMESPACE__ . '\Console\NewPassword', 'php2po' => __NAMESPACE__ . '\Console\PhpToPo', 'po2php' => __NAMESPACE__ . '\Console\PoToPhp', 'typo' => __NAMESPACE__ . '\Console\Typo', @@ -42,6 +43,7 @@ Commands: globalcommunitysilence Silence remote profile from global community page help Show help about a command, e.g (bin/console help config) maintenance Set maintenance mode for this node + newpassword Set an new password for a given user php2po Generate a messages.po file from a strings.php file po2php Generate a strings.php file from a messages.po file typo Checks for parse errors in Friendica files diff --git a/src/Core/Console/NewPassword.php b/src/Core/Console/NewPassword.php new file mode 100644 index 000000000..9d40e454b --- /dev/null +++ b/src/Core/Console/NewPassword.php @@ -0,0 +1,91 @@ + + * @author Hypolite Petovan + */ +class NewPassword extends \Asika\SimpleConsole\Console +{ + protected $helpOptions = ['h', 'help', '?']; + + protected function getHelp() + { + $help = << [-h|--help|-?] [-v] + +Description + Creates a new password for a user without using the "forgot password" functionality. + +Options + -h|--help|-? Show help information + -v Show more debug information. +HELP; + return $help; + } + + protected function doExecute() + { + $a = get_app(); + + if ($this->getOption('v')) { + $this->out('Class: ' . __CLASS__); + $this->out('Arguments: ' . var_export($this->args, true)); + $this->out('Options: ' . var_export($this->options, true)); + } + + if (count($this->args) == 0) { + $this->out($this->getHelp()); + return 0; + } + + if (count($this->args) > 2) { + throw new \Asika\SimpleConsole\CommandArgsException('Too many arguments'); + } + + require_once '.htconfig.php'; + $result = \dba::connect($db_host, $db_user, $db_pass, $db_data); + unset($db_host, $db_user, $db_pass, $db_data); + + if (!$result) { + throw new \RuntimeException('Unable to connect to database'); + } + + $nick = $this->getArgument(0); + $password = $this->getArgument(1); + + $user = dba::selectFirst('user', ['uid'], ['nickname' => $nick]); + if (!DBM::is_result($user)) { + throw new \RuntimeException(L10n::t('User not found')); + } + + if (!Config::get('system', 'disable_password_exposed', false) && User::isPasswordExposed($password)) { + throw new \RuntimeException(L10n::t('The new password has been exposed in a public data dump, please choose another.')); + } + + if (!User::updatePassword($user['uid'], $password)) { + throw new \RuntimeException(L10n::t('Password update failed. Please try again.')); + } + + $this->out(L10n::t('Password changed.', $nick)); + + return 0; + } +} From 491db963dbeb65e3b9ecee79a48580312c35b110 Mon Sep 17 00:00:00 2001 From: Michael Date: Fri, 30 Mar 2018 19:57:14 +0000 Subject: [PATCH 194/227] Changed comments --- src/Core/Console.php | 2 +- src/Core/Console/NewPassword.php | 10 ++++------ 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/Core/Console.php b/src/Core/Console.php index 02a0b66ae..a1143ae1d 100644 --- a/src/Core/Console.php +++ b/src/Core/Console.php @@ -43,7 +43,7 @@ Commands: globalcommunitysilence Silence remote profile from global community page help Show help about a command, e.g (bin/console help config) maintenance Set maintenance mode for this node - newpassword Set an new password for a given user + newpassword Set a new password for a given user php2po Generate a messages.po file from a strings.php file po2php Generate a strings.php file from a messages.po file typo Checks for parse errors in Friendica files diff --git a/src/Core/Console/NewPassword.php b/src/Core/Console/NewPassword.php index 9d40e454b..d44286d28 100644 --- a/src/Core/Console/NewPassword.php +++ b/src/Core/Console/NewPassword.php @@ -10,15 +10,13 @@ use Friendica\Database\DBM; use dba; /** - * @brief tool to block an account from the node + * @brief tool to set a new password for a user * - * With this tool, you can block an account in such a way, that no postings - * or comments this account writes are accepted to the node. + * With this tool, you can set a new password for a user * * License: AGPLv3 or later, same as Friendica * - * @author Tobias Diekershoff - * @author Hypolite Petovan + * @author Michael Vogel */ class NewPassword extends \Asika\SimpleConsole\Console { @@ -84,7 +82,7 @@ HELP; throw new \RuntimeException(L10n::t('Password update failed. Please try again.')); } - $this->out(L10n::t('Password changed.', $nick)); + $this->out(L10n::t('Password changed.')); return 0; } From 3b81c6615029752bfddf80dc6c097dff1ce5c424 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Fri, 30 Mar 2018 22:56:04 -0400 Subject: [PATCH 195/227] Use $argv instead of $_SERVER['argv'] --- bin/console.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/console.php b/bin/console.php index 90e4be392..9c25279d3 100755 --- a/bin/console.php +++ b/bin/console.php @@ -6,4 +6,4 @@ include_once dirname(__DIR__) . '/boot.php'; $a = new Friendica\App(dirname(__DIR__)); \Friendica\BaseObject::setApp($a); -(new Friendica\Core\Console())->execute(); +(new Friendica\Core\Console($argv))->execute(); From 80cca09a538935ed2a733cf86e100c68bdb9151e Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 31 Mar 2018 03:33:19 +0000 Subject: [PATCH 196/227] Fix: Avoid a WSOD when saving the profile --- mod/profiles.php | 1 + 1 file changed, 1 insertion(+) diff --git a/mod/profiles.php b/mod/profiles.php index bec09e2d0..8bb09aa6d 100644 --- a/mod/profiles.php +++ b/mod/profiles.php @@ -14,6 +14,7 @@ use Friendica\Core\PConfig; use Friendica\Core\System; use Friendica\Core\Worker; use Friendica\Database\DBM; +use Friendica\Model\Contact; use Friendica\Model\GContact; use Friendica\Model\Item; use Friendica\Model\Profile; From 3d487c263ea5c294418cd6cf2d5fc5bb9ffaacae Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 31 Mar 2018 08:19:19 +0000 Subject: [PATCH 197/227] Fixes missing command line argument --- src/App.php | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/App.php b/src/App.php index 2330bc118..55623e1e8 100644 --- a/src/App.php +++ b/src/App.php @@ -212,12 +212,6 @@ class App . $this->basepath . DIRECTORY_SEPARATOR . 'library' . PATH_SEPARATOR . $this->basepath); - - if (is_array($_SERVER['argv']) && $_SERVER['argc'] > 1 && substr(end($_SERVER['argv']), 0, 4) == 'http') { - $this->set_baseurl(array_pop($_SERVER['argv'])); - $_SERVER['argc'] --; - } - if ((x($_SERVER, 'QUERY_STRING')) && substr($_SERVER['QUERY_STRING'], 0, 9) === 'pagename=') { $this->query_string = substr($_SERVER['QUERY_STRING'], 9); @@ -868,9 +862,6 @@ class App array_unshift($args, ((x($this->config, 'php_path')) && (strlen($this->config['php_path'])) ? $this->config['php_path'] : 'php')); - // add baseurl to args. cli scripts can't construct it - $args[] = $this->get_baseurl(); - for ($x = 0; $x < count($args); $x ++) { $args[$x] = escapeshellarg($args[$x]); } From 3eb7ab2d9e18df44d1dbbdb1d3805335a0fac362 Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 31 Mar 2018 09:34:36 +0000 Subject: [PATCH 198/227] Fix the version sorting in the federation statistics --- mod/admin.php | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/mod/admin.php b/mod/admin.php index 3cbb70d3c..4ae5eb70b 100644 --- a/mod/admin.php +++ b/mod/admin.php @@ -635,8 +635,21 @@ function admin_page_federation(App $a) $v = $newVv; } - foreach ($v as $key => $vv) - $v[$key]["version"] = trim(strip_tags($vv["version"])); + // Assure that the versions are sorted correctly + $v2 = []; + $versions = []; + foreach ($v as $vv) { + $version = trim(strip_tags($vv["version"])); + $v2[$version] = $vv; + $versions[] = $version; + } + + usort($versions, 'version_compare'); + + $v = []; + foreach ($versions as $version) { + $v[] = $v2[$version]; + } // the 3rd array item is needed for the JavaScript graphs as JS does // not like some characters in the names of variables... From f51a254ed0abe480d0cefcd8ff41de9bec4fa7f6 Mon Sep 17 00:00:00 2001 From: Michael Date: Sun, 1 Apr 2018 05:07:35 +0000 Subject: [PATCH 199/227] Public contacts are not permitted for suggestions or mails --- src/Protocol/DFRN.php | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/src/Protocol/DFRN.php b/src/Protocol/DFRN.php index 3d836acf9..cb23c4bf1 100644 --- a/src/Protocol/DFRN.php +++ b/src/Protocol/DFRN.php @@ -2681,6 +2681,10 @@ class DFRN return true; } } else { // $entrytype == DFRN_TOP_LEVEL + if ($importer["readonly"]) { + logger('ignoring read-only contact '.$importer["id"]); + return; + } if ($importer["uid"] == 0) { logger("Contact ".$importer["id"]." isn't known to user ".$importer["importer_uid"].". The post will be ignored.", LOGGER_DEBUG); return; @@ -2857,21 +2861,16 @@ class DFRN self::processRelocation($xpath, $relocation, $importer); } - if ($importer["readonly"]) { - // We aren't receiving stuff from this person. But we will quietly ignore them - // rather than a blatant "go away" message. - logger('ignoring contact '.$importer["id"]); - return 403; - } + if (($importer["uid"] != 0) && !$importer["readonly"]) { + $mails = $xpath->query("/atom:feed/dfrn:mail"); + foreach ($mails as $mail) { + self::processMail($xpath, $mail, $importer); + } - $mails = $xpath->query("/atom:feed/dfrn:mail"); - foreach ($mails as $mail) { - self::processMail($xpath, $mail, $importer); - } - - $suggestions = $xpath->query("/atom:feed/dfrn:suggest"); - foreach ($suggestions as $suggestion) { - self::processSuggestion($xpath, $suggestion, $importer); + $suggestions = $xpath->query("/atom:feed/dfrn:suggest"); + foreach ($suggestions as $suggestion) { + self::processSuggestion($xpath, $suggestion, $importer); + } } $deletions = $xpath->query("/atom:feed/at:deleted-entry"); From 91e9b464e549df3352b4cb13ed8691019266566e Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Sun, 1 Apr 2018 11:22:36 +0200 Subject: [PATCH 200/227] update for PL translation THX waldis --- view/lang/pl/messages.po | 1230 +++++++++++++++++++------------------- view/lang/pl/strings.php | 1228 ++++++++++++++++++------------------- 2 files changed, 1229 insertions(+), 1229 deletions(-) diff --git a/view/lang/pl/messages.po b/view/lang/pl/messages.po index 4b9b463c2..af025cd04 100644 --- a/view/lang/pl/messages.po +++ b/view/lang/pl/messages.po @@ -39,7 +39,7 @@ msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-03-28 08:41+0200\n" -"PO-Revision-Date: 2018-03-28 20:01+0000\n" +"PO-Revision-Date: 2018-03-31 20:50+0000\n" "Last-Translator: Waldemar Stoczkowski \n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" @@ -88,7 +88,7 @@ msgstr[3] "" #: include/api.php:1247 #, php-format msgid "Monthly posting limit of %d post reached. The post was rejected." -msgstr "" +msgstr "Miesięczny limit %d wysyłania postów. Post został odrzucony." #: include/api.php:4400 mod/photos.php:88 mod/photos.php:194 #: mod/photos.php:722 mod/photos.php:1149 mod/photos.php:1166 @@ -97,7 +97,7 @@ msgstr "" #: mod/profile_photo.php:302 mod/profile_photo.php:312 src/Model/User.php:539 #: src/Model/User.php:547 src/Model/User.php:555 msgid "Profile Photos" -msgstr "Zdjęcia profilowe" +msgstr "Zdjęcie profilowe" #: include/conversation.php:144 include/conversation.php:282 #: include/text.php:1724 src/Model/Item.php:1795 @@ -136,12 +136,12 @@ msgstr "" #: include/conversation.php:173 #, php-format msgid "%1$s doesn't attend %2$s's %3$s" -msgstr "" +msgstr "%1$s nie uczestniczy %2$s 's %3$s" #: include/conversation.php:176 #, php-format msgid "%1$s attends maybe %2$s's %3$s" -msgstr "" +msgstr "%1$s może uczęszcza %2$s 's %3$s" #: include/conversation.php:209 mod/dfrn_confirm.php:431 #: src/Protocol/Diaspora.php:2477 @@ -170,11 +170,11 @@ msgstr "" #: include/conversation.php:605 mod/photos.php:1501 mod/profiles.php:354 msgid "Likes" -msgstr "Polubień" +msgstr "Lubi" #: include/conversation.php:605 mod/photos.php:1501 mod/profiles.php:358 msgid "Dislikes" -msgstr "Nie lubień" +msgstr "Nie lubi" #: include/conversation.php:606 include/conversation.php:1680 #: mod/photos.php:1502 @@ -318,7 +318,7 @@ msgstr "i %d inni ludzie" #: include/conversation.php:1231 #, php-format msgid "%2$d people like this" -msgstr "" +msgstr "%2$d ludzi lubi to" #: include/conversation.php:1232 #, php-format @@ -328,7 +328,7 @@ msgstr "%s lubię to." #: include/conversation.php:1235 #, php-format msgid "%2$d people don't like this" -msgstr "" +msgstr "%2$d ludzi nie lubi tego " #: include/conversation.php:1236 #, php-format @@ -353,17 +353,17 @@ msgstr "" #: include/conversation.php:1244 #, php-format msgid "%s don't attend." -msgstr "" +msgstr "%s nie uczestnicz" #: include/conversation.php:1247 #, php-format msgid "%2$d people attend maybe" -msgstr "" +msgstr "%2$dprzyjacielemogą uczestniczyć " #: include/conversation.php:1248 #, php-format msgid "%s attend maybe." -msgstr "" +msgstr "%sbyć może uczestniczyć. " #: include/conversation.php:1278 include/conversation.php:1294 msgid "Visible to everybody" @@ -385,7 +385,7 @@ msgstr "Podaj link do muzyki" #: include/conversation.php:1282 include/conversation.php:1298 msgid "Tag term:" -msgstr "" +msgstr "Termin tagu:" #: include/conversation.php:1283 include/conversation.php:1299 #: mod/filer.php:34 @@ -575,7 +575,7 @@ msgstr "%s administrator" #: include/enotify.php:39 #, php-format msgid "%1$s, %2$s Administrator" -msgstr "" +msgstr "%1$s,%2$sAdministrator" #: include/enotify.php:50 src/Worker/Delivery.php:402 msgid "noreply" @@ -589,7 +589,7 @@ msgstr "[Friendica:Notify] Nowa wiadomość otrzymana od %s" #: include/enotify.php:100 #, php-format msgid "%1$s sent you a new private message at %2$s." -msgstr "" +msgstr "%1$swysłał ci nową prywatną wiadomość na %2$s " #: include/enotify.php:101 msgid "a private message" @@ -613,17 +613,17 @@ msgstr "%1$s skomentował [url=%2$s]a %3$s[/url]" #: include/enotify.php:149 #, php-format msgid "%1$s commented on [url=%2$s]%3$s's %4$s[/url]" -msgstr "" +msgstr "%1$sskomentował [url=%2$s]%3$s %4$s[/url]" #: include/enotify.php:159 #, php-format msgid "%1$s commented on [url=%2$s]your %3$s[/url]" -msgstr "" +msgstr "%1$s skomentował [url=%2$s] twój %3$s[/ url]" #: include/enotify.php:171 #, php-format msgid "[Friendica:Notify] Comment to conversation #%1$d by %2$s" -msgstr "" +msgstr "[Friendica:Powiadomienie] Komentarz do rozmowy #%1$d przez %2$s" #: include/enotify.php:173 #, php-format @@ -639,12 +639,12 @@ msgstr "Odwiedź %s żeby zobaczyć i/lub odpowiedzieć na rozmowę" #: include/enotify.php:183 #, php-format msgid "[Friendica:Notify] %s posted to your profile wall" -msgstr "[Friendica:Notify] %s napisał na twoim profilu" +msgstr "[Friendica:Powiadomienie] %s napisał na twoim profilu" #: include/enotify.php:185 #, php-format msgid "%1$s posted to your profile wall at %2$s" -msgstr "" +msgstr "%1$sopublikowano na ścianie profilu w %2$s " #: include/enotify.php:186 #, php-format @@ -654,12 +654,12 @@ msgstr "" #: include/enotify.php:198 #, php-format msgid "[Friendica:Notify] %s tagged you" -msgstr "[Friendica:Notify] %s oznaczył cię" +msgstr "[Friendica:Powiadomienie] %s dodał Cię" #: include/enotify.php:200 #, php-format msgid "%1$s tagged you at %2$s" -msgstr "%1$s oznaczył/a cię w %2$s" +msgstr "%1$s oznaczono Cię tagiem %2$s" #: include/enotify.php:201 #, php-format @@ -669,12 +669,12 @@ msgstr "" #: include/enotify.php:213 #, php-format msgid "[Friendica:Notify] %s shared a new post" -msgstr "" +msgstr "[Friendica:Powiadomienie] %s udostępnił nowy wpis" #: include/enotify.php:215 #, php-format msgid "%1$s shared a new post at %2$s" -msgstr "" +msgstr "%1$sudostępnił nowy wpis na %2$s " #: include/enotify.php:216 #, php-format @@ -684,7 +684,7 @@ msgstr "" #: include/enotify.php:228 #, php-format msgid "[Friendica:Notify] %1$s poked you" -msgstr "" +msgstr "[Friendica: Powiadomienie] %1$s poked you" #: include/enotify.php:230 #, php-format @@ -699,12 +699,12 @@ msgstr "" #: include/enotify.php:247 #, php-format msgid "[Friendica:Notify] %s tagged your post" -msgstr "" +msgstr "[Friendica:Powiadomienie] %s otagował Twój post" #: include/enotify.php:249 #, php-format msgid "%1$s tagged your post at %2$s" -msgstr "" +msgstr "%1$soznaczyłeś swój wpis na %2$s " #: include/enotify.php:250 #, php-format @@ -713,12 +713,12 @@ msgstr "" #: include/enotify.php:262 msgid "[Friendica:Notify] Introduction received" -msgstr "" +msgstr "[Friendica:Powiadomienie] Zapoznanie wstępne" #: include/enotify.php:264 #, php-format msgid "You've received an introduction from '%1$s' at %2$s" -msgstr "" +msgstr "Otrzymałeś wstęp od '%1$s' z %2$s" #: include/enotify.php:265 #, php-format @@ -728,7 +728,7 @@ msgstr "" #: include/enotify.php:270 include/enotify.php:316 #, php-format msgid "You may visit their profile at %s" -msgstr "Możesz obejrzeć ich profile na %s" +msgstr "Możesz odwiedzić ich profil na stronie %s" #: include/enotify.php:272 #, php-format @@ -737,21 +737,21 @@ msgstr "Odwiedż %s aby zatwierdzić lub odrzucić przedstawienie." #: include/enotify.php:280 msgid "[Friendica:Notify] A new person is sharing with you" -msgstr "" +msgstr "[Friendica:Powiadomienie] Nowa osoba dzieli się z tobą" #: include/enotify.php:282 include/enotify.php:283 #, php-format msgid "%1$s is sharing with you at %2$s" -msgstr "" +msgstr "%1$sdzieli się z tobą w %2$s " #: include/enotify.php:290 msgid "[Friendica:Notify] You have a new follower" -msgstr "" +msgstr "[Friendica:Powiadomienie] Masz nowego obserwatora" #: include/enotify.php:292 include/enotify.php:293 #, php-format msgid "You have a new follower at %2$s : %1$s" -msgstr "" +msgstr "Masz nowego obserwatora na %2$s : %1$s" #: include/enotify.php:305 msgid "[Friendica:Notify] Friend suggestion received" @@ -760,13 +760,13 @@ msgstr "[Friendica: Powiadomienie] Otrzymano sugestię znajomego" #: include/enotify.php:307 #, php-format msgid "You've received a friend suggestion from '%1$s' at %2$s" -msgstr "" +msgstr "Otrzymałeś od znajomego sugestię '%1$s' na %2$s" #: include/enotify.php:308 #, php-format msgid "" "You've received [url=%1$s]a friend suggestion[/url] for %2$s from %3$s." -msgstr "" +msgstr "Otrzymałeś [url=%1$s] sugestię znajomego [/url] dla %2$s od %3$s." #: include/enotify.php:314 msgid "Name:" @@ -779,7 +779,7 @@ msgstr "Zdjęcie:" #: include/enotify.php:318 #, php-format msgid "Please visit %s to approve or reject the suggestion." -msgstr "" +msgstr "Odwiedź stronę %s, aby zatwierdzić lub odrzucić sugestię." #: include/enotify.php:326 include/enotify.php:341 msgid "[Friendica:Notify] Connection accepted" @@ -788,12 +788,12 @@ msgstr "[Friendica: Powiadomienie] Połączenie zostało zaakceptowane" #: include/enotify.php:328 include/enotify.php:343 #, php-format msgid "'%1$s' has accepted your connection request at %2$s" -msgstr "" +msgstr "'%1$s' zaakceptował Twoją prośbę o połączenie na %2$s" #: include/enotify.php:329 include/enotify.php:344 #, php-format msgid "%2$s has accepted your [url=%1$s]connection request[/url]." -msgstr "" +msgstr "%2$szaakceptował twoje [url=%1$s] żądanie połączenia [/url]. " #: include/enotify.php:334 msgid "" @@ -820,36 +820,36 @@ msgstr "'%1$s' zdecydował się zaakceptować Cię jako fana, który ogranicza n msgid "" "'%1$s' may choose to extend this into a two-way or more permissive " "relationship in the future." -msgstr "" +msgstr "'%1$s' możesz zdecydować o przedłużeniu tego w dwukierunkowy lub bardziej ścisłą relację w przyszłości. " #: include/enotify.php:353 #, php-format msgid "Please visit %s if you wish to make any changes to this relationship." -msgstr "" +msgstr "Odwiedź stronę %s, jeśli chcesz wprowadzić zmiany w tym związku." #: include/enotify.php:363 msgid "[Friendica System:Notify] registration request" -msgstr "[Friendica System: Powiadomienie] prośba o rejestrację" +msgstr "[Friendica System:Powiadomienie] prośba o rejestrację" #: include/enotify.php:365 #, php-format msgid "You've received a registration request from '%1$s' at %2$s" -msgstr "" +msgstr "Otrzymałeś wniosek rejestracyjny od '%1$s' na %2$s" #: include/enotify.php:366 #, php-format msgid "You've received a [url=%1$s]registration request[/url] from %2$s." -msgstr "" +msgstr "Otrzymałeś [url=%1$s] żądanie rejestracji [/url] od %2$s." #: include/enotify.php:371 #, php-format msgid "Full Name:\t%1$s\\nSite Location:\t%2$s\\nLogin Name:\t%3$s (%4$s)" -msgstr "" +msgstr "Pełna nazwa:\t%1$s \\Lokalizacja nSite:\t%2$s\\ nNazwa Użytkownika: \t%3$s(%4$s)" #: include/enotify.php:377 #, php-format msgid "Please visit %s to approve or reject the request." -msgstr "" +msgstr "Odwiedź stronę %s, aby zatwierdzić lub odrzucić wniosek." #: include/items.php:342 mod/notice.php:22 mod/viewsrc.php:21 #: mod/admin.php:269 mod/admin.php:1787 mod/admin.php:2035 mod/display.php:72 @@ -968,7 +968,7 @@ msgstr "Szukaj" #: include/text.php:1019 src/Content/Nav.php:58 msgid "@name, !forum, #tags, content" -msgstr "" +msgstr "@imię, !forum, #tagi, treść" #: include/text.php:1025 src/Content/Nav.php:145 msgid "Full Text" @@ -1016,7 +1016,7 @@ msgstr "" #: include/text.php:1077 msgid "slap" -msgstr "spoliczkuj" +msgstr "klask" #: include/text.php:1077 msgid "slapped" @@ -1024,7 +1024,7 @@ msgstr "spoliczkowany" #: include/text.php:1078 msgid "finger" -msgstr "dotknąć" +msgstr "wskaż" #: include/text.php:1078 msgid "fingered" @@ -1032,11 +1032,11 @@ msgstr "dotknięty" #: include/text.php:1079 msgid "rebuff" -msgstr "odprawiać" +msgstr "odrzuć" #: include/text.php:1079 msgid "rebuffed" -msgstr "odprawiony" +msgstr "odrzucony" #: include/text.php:1093 mod/settings.php:941 src/Model/Event.php:379 msgid "Monday" @@ -1121,7 +1121,7 @@ msgstr "Pon" #: include/text.php:1111 src/Model/Event.php:372 msgid "Tue" -msgstr "Forum" +msgstr "Wt" #: include/text.php:1111 src/Model/Event.php:373 msgid "Wed" @@ -1145,43 +1145,43 @@ msgstr "Niedz" #: include/text.php:1114 src/Model/Event.php:386 msgid "Jan" -msgstr "" +msgstr "Sty" #: include/text.php:1114 src/Model/Event.php:387 msgid "Feb" -msgstr "" +msgstr "Lut" #: include/text.php:1114 src/Model/Event.php:388 msgid "Mar" -msgstr "" +msgstr "Mar" #: include/text.php:1114 src/Model/Event.php:389 msgid "Apr" -msgstr "" +msgstr "Kwi" #: include/text.php:1114 src/Model/Event.php:392 msgid "Jul" -msgstr "" +msgstr "Lip" #: include/text.php:1114 src/Model/Event.php:393 msgid "Aug" -msgstr "" +msgstr "Sie" #: include/text.php:1114 msgid "Sep" -msgstr "" +msgstr "Wrz" #: include/text.php:1114 src/Model/Event.php:395 msgid "Oct" -msgstr "" +msgstr "Paź" #: include/text.php:1114 src/Model/Event.php:396 msgid "Nov" -msgstr "" +msgstr "Lis" #: include/text.php:1114 src/Model/Event.php:397 msgid "Dec" -msgstr "" +msgstr "Gru" #: include/text.php:1324 mod/videos.php:380 msgid "View Video" @@ -1294,7 +1294,7 @@ msgstr "Wspólni znajomi" #: mod/credits.php:18 msgid "Credits" -msgstr "" +msgstr "Zaufany" #: mod/credits.php:19 msgid "" @@ -1334,11 +1334,11 @@ msgstr "Bez dublowania" #: mod/crepair.php:129 msgid "Mirror as forwarded posting" -msgstr "" +msgstr "Przesłany lustrzany post" #: mod/crepair.php:129 mod/crepair.php:131 msgid "Mirror as my own posting" -msgstr "" +msgstr "Lustro mojego własnego komentarza" #: mod/crepair.php:144 msgid "Return to contact editor" @@ -1362,17 +1362,17 @@ msgstr "Potwierdź" #: mod/crepair.php:149 msgid "Remote Self" -msgstr "" +msgstr "Zdalny Self" #: mod/crepair.php:152 msgid "Mirror postings from this contact" -msgstr "" +msgstr "Publikacje lustrzane od tego kontaktu" #: mod/crepair.php:154 msgid "" "Mark this contact as remote_self, this will cause friendica to repost new " "entries from this contact." -msgstr "" +msgstr "Oznacz ten kontakt jako remote_self, spowoduje to, że friendica odeśle nowe wpisy z tego kontaktu." #: mod/crepair.php:158 mod/admin.php:439 mod/admin.php:1714 mod/admin.php:1726 #: mod/admin.php:1739 mod/admin.php:1755 mod/settings.php:677 @@ -1499,7 +1499,7 @@ msgid "" "On your Quick Start page - find a brief introduction to your " "profile and network tabs, make some new connections, and find some groups to" " join." -msgstr "" +msgstr "Na stronie Szybki start - znajdź krótkie wprowadzenie do swojego profilu i kart sieciowych, stwórz nowe połączenia i znajdź kilka grup do przyłączenia się." #: mod/newmember.php:19 mod/admin.php:1839 mod/admin.php:2108 #: mod/settings.php:124 view/theme/frio/theme.php:269 src/Content/Nav.php:206 @@ -1589,7 +1589,7 @@ msgid "" "Your Contacts page is your gateway to managing friendships and connecting " "with friends on other networks. Typically you enter their address or site " "URL in the Add New Contact dialog." -msgstr "" +msgstr "Strona Kontakty jest twoją bramą do zarządzania przyjaciółmi i łączenia się z przyjaciółmi w innych sieciach. Zazwyczaj podaje się adres lub adres URL strony w oknie dialogowym Dodaj nowy kontakt." #: mod/newmember.php:40 msgid "Go to Your Site's Directory" @@ -1600,7 +1600,7 @@ msgid "" "The Directory page lets you find other people in this network or other " "federated sites. Look for a Connect or Follow link on " "their profile page. Provide your own Identity Address if requested." -msgstr "" +msgstr "Strona Katalog umożliwia znalezienie innych osób w tej sieci lub innych witrynach stowarzyszonych. Poszukaj łącza Połącz lub Śledź na stronie profilu. Jeśli chcesz, podaj swój własny adres tożsamości." #: mod/newmember.php:41 msgid "Finding New People" @@ -1613,7 +1613,7 @@ msgid "" "interest, and provide suggestions based on network relationships. On a brand" " new site, friend suggestions will usually begin to be populated within 24 " "hours." -msgstr "Na bocznym panelu strony Kontaktów znajduje się kilka narzędzi do znajdowania nowych przyjaciół. Możemy dopasować osoby według zainteresowań, wyszukiwać osoby według nazwisk i zainteresowań oraz dostarczać sugestie oparte na relacjach sieciowych. Na zupełnie nowej stronie sugestie znajomych zwykle zaczynają być wypełniane w ciągu 24 godzin." +msgstr "Na bocznym panelu strony Kontaktów znajduje się kilka narzędzi do znajdowania nowych przyjaciół. Możemy dopasować osoby według zainteresowań, wyszukiwać osoby według nazwisk i zainteresowań oraz dostarczać sugestie oparte na relacjach sieciowych. Na zupełnie nowej stronie sugestie znajomych zwykle zaczynają być wypełniane w ciągu 24 godzin" #: mod/newmember.php:43 src/Model/Group.php:401 msgid "Groups" @@ -1643,11 +1643,11 @@ msgstr "Friendica szanuje Twoją prywatność. Domyślnie Twoje wpisy będą wy #: mod/newmember.php:52 msgid "Getting Help" -msgstr "Otrzymywanie pomocy" +msgstr "Otrzymaj pomoc" #: mod/newmember.php:54 msgid "Go to the Help Section" -msgstr "Idź do części o pomocy" +msgstr "Przejdź do sekcji pomocy" #: mod/newmember.php:54 msgid "" @@ -1671,7 +1671,7 @@ msgstr "Kontakty spoza członków grupy" #: mod/p.php:14 msgid "Not Extended" -msgstr "" +msgstr "Nie przedłużony" #: mod/repair_ostatus.php:18 msgid "Resubscribing to OStatus contacts" @@ -1774,11 +1774,11 @@ msgstr "Odwiedź stronę
    Friendi.ca aby dowie #: mod/friendica.php:86 msgid "Bug reports and issues: please visit" -msgstr "Reportowanie błędów i problemów: proszę odwiedź" +msgstr "Raporty o błędach i problemy: odwiedź stronę" #: mod/friendica.php:86 msgid "the bugtracker at github" -msgstr "" +msgstr "bugtracker na github" #: mod/friendica.php:89 msgid "" @@ -1796,7 +1796,7 @@ msgstr "Brak zainstalowanych dodatków/aplikacji" #: mod/friendica.php:122 msgid "On this server the following remote servers are blocked." -msgstr "" +msgstr "Na tym serwerze następujące serwery zdalne są blokowane." #: mod/friendica.php:123 mod/dfrn_request.php:351 mod/admin.php:302 #: mod/admin.php:320 src/Model/Contact.php:1228 @@ -1805,7 +1805,7 @@ msgstr "Zablokowana domena" #: mod/friendica.php:123 mod/admin.php:303 mod/admin.php:321 msgid "Reason for the block" -msgstr "" +msgstr "Powód blokowania" #: mod/match.php:48 msgid "No keywords to match. Please add keywords to your default profile." @@ -1817,15 +1817,15 @@ msgstr "interesuje się:" #: mod/match.php:120 msgid "Profile Match" -msgstr "Profil zgodny " +msgstr "Dopasowanie profilu" #: mod/match.php:125 mod/dirfind.php:253 msgid "No matches" -msgstr "brak dopasowań" +msgstr "Brak wyników" #: mod/notifications.php:37 msgid "Invalid request identifier." -msgstr "Niewłaściwy identyfikator wymagania." +msgstr "Nieprawidłowy identyfikator żądania." #: mod/notifications.php:46 mod/notifications.php:183 #: mod/notifications.php:230 @@ -1844,7 +1844,7 @@ msgstr "Powiadomienia" #: mod/notifications.php:107 msgid "Network Notifications" -msgstr "Powiadomienia z sieci" +msgstr "Powiadomienia sieciowe" #: mod/notifications.php:113 mod/notify.php:81 msgid "System Notifications" @@ -1856,7 +1856,7 @@ msgstr "Prywatne powiadomienia" #: mod/notifications.php:125 msgid "Home Notifications" -msgstr "Powiadomienia z instancji" +msgstr "Powiadomienia domowe" #: mod/notifications.php:155 msgid "Show Ignored Requests" @@ -1864,11 +1864,11 @@ msgstr "Pokaż ignorowane żądania" #: mod/notifications.php:155 msgid "Hide Ignored Requests" -msgstr "Ukryj ignorowane żądania" +msgstr "Ukryj zignorowane prośby" #: mod/notifications.php:167 mod/notifications.php:237 msgid "Notification type: " -msgstr "Typ zawiadomień:" +msgstr "Typ powiadomienia:" #: mod/notifications.php:170 #, php-format @@ -1881,11 +1881,11 @@ msgstr "Ukryj ten kontakt przed innymi" #: mod/notifications.php:176 mod/notifications.php:255 msgid "Post a new friend activity" -msgstr "Pisz o nowej działalności przyjaciela" +msgstr "Opublikuj aktywność nowego znajomego" #: mod/notifications.php:176 mod/notifications.php:255 msgid "if applicable" -msgstr "jeśli odpowiednie" +msgstr "jeśli dotyczy" #: mod/notifications.php:179 mod/notifications.php:264 mod/admin.php:1729 msgid "Approve" @@ -1912,21 +1912,21 @@ msgstr "Czy twoje połączenie ma być dwukierunkowe, czy nie?" msgid "" "Accepting %s as a friend allows %s to subscribe to your posts, and you will " "also receive updates from them in your news feed." -msgstr "" +msgstr "Przyjmowanie %s jako znajomego pozwala %s zasubskrybować twoje posty, a także otrzymywać od nich aktualizacje w swoim kanale wiadomości." #: mod/notifications.php:202 #, php-format msgid "" "Accepting %s as a subscriber allows them to subscribe to your posts, but you" " will not receive updates from them in your news feed." -msgstr "" +msgstr "Zaakceptowanie %s jako subskrybenta umożliwia im subskrybowanie Twoich postów, ale nie otrzymasz od nich aktualizacji w swoim kanale wiadomości." #: mod/notifications.php:207 #, php-format msgid "" "Accepting %s as a sharer allows them to subscribe to your posts, but you " "will not receive updates from them in your news feed." -msgstr "" +msgstr "Akceptowanie %s jako udostępniający pozwala im subskrybować twoje posty, ale nie otrzymasz od nich aktualizacji w swoim kanale wiadomości." #: mod/notifications.php:218 msgid "Friend" @@ -1938,7 +1938,7 @@ msgstr "Udostępniający/a" #: mod/notifications.php:219 msgid "Subscriber" -msgstr "" +msgstr "Subskrybent" #: mod/notifications.php:247 mod/contacts.php:660 mod/directory.php:149 #: mod/events.php:518 src/Model/Profile.php:417 src/Model/Event.php:60 @@ -1964,7 +1964,7 @@ msgstr "Płeć:" #: mod/notifications.php:258 mod/admin.php:439 mod/admin.php:449 #: mod/contacts.php:656 mod/follow.php:166 mod/unfollow.php:122 msgid "Profile URL" -msgstr "" +msgstr "Adres URL profilu" #: mod/notifications.php:261 mod/contacts.php:71 src/Model/Profile.php:518 msgid "Network:" @@ -1972,7 +1972,7 @@ msgstr "Sieć:" #: mod/notifications.php:275 msgid "No introductions." -msgstr "Brak wstępu." +msgstr "Brak dostępu." #: mod/notifications.php:316 msgid "Show unread" @@ -2017,23 +2017,23 @@ msgstr "Odpowiedź do zdalnej strony nie została zrozumiana" #: mod/dfrn_confirm.php:249 mod/dfrn_confirm.php:254 msgid "Unexpected response from remote site: " -msgstr "Nieoczekiwana odpowiedź od strony zdalnej" +msgstr "Nieoczekiwana odpowiedź od strony zdalnej:" #: mod/dfrn_confirm.php:263 msgid "Confirmation completed successfully." -msgstr "Potwierdzenie ukończone poprawnie" +msgstr "Potwierdzenie zostało pomyślnie zakończone." #: mod/dfrn_confirm.php:275 msgid "Temporary failure. Please wait and try again." -msgstr "Tymczasowo uszkodzone. Proszę poczekać i spróbować później." +msgstr "Tymczasowa awaria. Proszę czekać i spróbuj ponownie." #: mod/dfrn_confirm.php:278 msgid "Introduction failed or was revoked." -msgstr "Nieudane lub unieważnione wprowadzenie." +msgstr "Wprowadzenie nie powiodło się lub zostało odwołane." #: mod/dfrn_confirm.php:283 msgid "Remote site reported: " -msgstr "Zdalna strona zgłoszona:" +msgstr "Zdalna witryna zgłoszona:" #: mod/dfrn_confirm.php:396 msgid "Unable to set contact photo." @@ -2046,11 +2046,11 @@ msgstr "Nie znaleziono użytkownika dla '%s'" #: mod/dfrn_confirm.php:508 msgid "Our site encryption key is apparently messed up." -msgstr "Klucz kodujący jest najwyraźniej zepsuty" +msgstr "Klucz kodujący jest najwyraźniej uszkodzony." #: mod/dfrn_confirm.php:519 msgid "Empty site URL was provided or URL could not be decrypted by us." -msgstr "Został dostarczony pusty URL lub nie może zostać rozszyfrowany przez nas." +msgstr "Został podany pusty adres URL witryny lub nie można go odszyfrować." #: mod/dfrn_confirm.php:535 msgid "Contact record was not found for you on our site." @@ -2065,15 +2065,15 @@ msgstr "Publiczny klucz witryny jest niedostępny w rekordzie kontaktu dla adres msgid "" "The ID provided by your system is a duplicate on our system. It should work " "if you try again." -msgstr "ID dostarczone przez Twój system jest już w naszeym systemie. Powinno zadziałać jeżeli spróbujesz ponownie." +msgstr "Identyfikator dostarczony przez Twój system jest duplikatem w naszym systemie. Powinien działać, jeśli spróbujesz ponownie." #: mod/dfrn_confirm.php:576 msgid "Unable to set your contact credentials on our system." -msgstr "Niezdolny do ustalenie tożsamości twoich kontaktów w naszym systemie" +msgstr "Nie można ustawić danych kontaktowych w naszym systemie." #: mod/dfrn_confirm.php:631 msgid "Unable to update your contact profile details on our system" -msgstr "Niezdolny do aktualizacji szczegółowych danych profilowych twoich kontaktów w naszym systemie" +msgstr "Nie można zaktualizować danych Twojego profilu kontaktowego w naszym systemie" #: mod/dfrn_confirm.php:661 mod/dfrn_request.php:568 #: src/Model/Contact.php:1520 @@ -2105,7 +2105,7 @@ msgstr "Przekroczono limit zaproszeń. Skontaktuj się z administratorem witryny #: mod/invite.php:95 #, php-format msgid "%s : Message delivery failed." -msgstr "%s : Dostarczenie wiadomości nieudane." +msgstr "%s : Nie udało się dostarczyć wiadomości." #: mod/invite.php:99 #, php-format @@ -2118,7 +2118,7 @@ msgstr[3] "%d wysłano ." #: mod/invite.php:117 msgid "You have no more invitations available" -msgstr "Nie masz więcej zaproszeń" +msgstr "Nie masz już dostępnych zaproszeń" #: mod/invite.php:125 #, php-format @@ -2126,7 +2126,7 @@ msgid "" "Visit %s for a list of public sites that you can join. Friendica members on " "other sites can all connect with each other, as well as with members of many" " other social networks." -msgstr "" +msgstr "Odwiedź %s listę publicznych witryn, do których możesz dołączyć. Członkowie Friendica na innych stronach mogą łączyć się ze sobą, jak również z członkami wielu innych sieci społecznościowych." #: mod/invite.php:127 #, php-format @@ -2142,29 +2142,29 @@ msgid "" "web that is owned and controlled by its members. They can also connect with " "many traditional social networks. See %s for a list of alternate Friendica " "sites you can join." -msgstr "" +msgstr "Strony Friendica łączą się ze sobą, tworząc ogromną sieć społecznościową o zwiększonej prywatności, która jest własnością i jest kontrolowana przez jej członków. Mogą również łączyć się z wieloma tradycyjnymi sieciami społecznościowymi. Zobacz %s listę alternatywnych witryn Friendica, do których możesz dołączyć." #: mod/invite.php:132 msgid "" "Our apologies. This system is not currently configured to connect with other" " public sites or invite members." -msgstr "Nasze przeprosiny. Ten system nie jest obecnie skonfigurowany do łączenia się z innymi publicznymi witrynami lub zapraszania członków." +msgstr "Przepraszamy. System nie jest obecnie skonfigurowany do łączenia się z innymi publicznymi witrynami lub zapraszania członków." #: mod/invite.php:136 msgid "" "Friendica sites all inter-connect to create a huge privacy-enhanced social " "web that is owned and controlled by its members. They can also connect with " "many traditional social networks." -msgstr "" +msgstr "Strony Friendica łączą się ze sobą, tworząc ogromną sieć społecznościową o zwiększonej prywatności, która jest własnością i jest kontrolowana przez jej członków. Mogą również łączyć się z wieloma tradycyjnymi sieciami społecznościowymi." #: mod/invite.php:135 #, php-format msgid "To accept this invitation, please visit and register at %s." -msgstr "" +msgstr "Aby zaakceptować to zaproszenie, odwiedź stronę i zarejestruj się na stronie %s." #: mod/invite.php:142 msgid "Send invitations" -msgstr "Wyślij zaproszenia" +msgstr "Wyślij zaproszenie" #: mod/invite.php:143 msgid "Enter email addresses, one per line:" @@ -2179,22 +2179,22 @@ msgstr "Twoja wiadomość:" msgid "" "You are cordially invited to join me and other close friends on Friendica - " "and help us to create a better social web." -msgstr "" +msgstr "Serdecznie zapraszam do przyłączenia się do mnie i innych bliskich znajomych na stronie Friendica - i pomóż nam stworzyć lepszą sieć społecznościową." #: mod/invite.php:147 msgid "You will need to supply this invitation code: $invite_code" -msgstr "" +msgstr "Musisz podać ten kod zaproszenia: $invite_code" #: mod/invite.php:147 msgid "" "Once you have registered, please connect with me via my profile page at:" -msgstr "Gdy już się zarejestrujesz, skontaktuj się ze mną przez moją stronkę profilową :" +msgstr "Po rejestracji połącz się ze mną na stronie mojego profilu pod adresem:" #: mod/invite.php:149 msgid "" "For more information about the Friendica project and why we feel it is " "important, please visit http://friendi.ca" -msgstr "" +msgstr "Aby uzyskać więcej informacji na temat projektu Friendica i dlaczego uważamy, że jest to ważne, odwiedź http://friendi.ca" #: mod/manage.php:180 msgid "Manage Identities and/or Pages" @@ -2204,7 +2204,7 @@ msgstr "Zarządzaj Tożsamościami i/lub Stronami." msgid "" "Toggle between different identities or community/group pages which share " "your account details or which you have been granted \"manage\" permissions" -msgstr "" +msgstr "Przełącz między różnymi tożsamościami lub stronami społeczność/grupy, które udostępniają dane Twojego konta lub które otrzymałeś uprawnienia \"zarządzaj\"" #: mod/manage.php:182 msgid "Select an identity to manage: " @@ -2218,16 +2218,16 @@ msgstr "Nieprawidłowe żądanie." #: mod/wall_attach.php:101 msgid "Sorry, maybe your upload is bigger than the PHP configuration allows" -msgstr "" +msgstr "Przepraszam, może twój przesyłany plik jest większy niż pozwala konfiguracja PHP" #: mod/wall_attach.php:101 msgid "Or - did you try to upload an empty file?" -msgstr "" +msgstr "Lub - czy próbowałeś załadować pusty plik?" #: mod/wall_attach.php:112 #, php-format msgid "File exceeds size limit of %s" -msgstr "" +msgstr "Plik przekracza limit rozmiaru wynoszący %s" #: mod/wall_attach.php:136 mod/wall_attach.php:152 msgid "File upload failed." @@ -2239,7 +2239,7 @@ msgstr "To wprowadzenie zostało już zaakceptowane." #: mod/dfrn_request.php:112 mod/dfrn_request.php:359 msgid "Profile location is not valid or does not contain profile information." -msgstr "Położenie profilu jest niepoprawne lub nie zawiera żadnych informacji." +msgstr "Lokalizacja profilu jest nieprawidłowa lub nie zawiera informacji o profilu." #: mod/dfrn_request.php:116 mod/dfrn_request.php:363 msgid "Warning: profile location has no identifiable owner name." @@ -2285,7 +2285,7 @@ msgstr "Przyjaciele namawiają do spróbowania za 24h." #: mod/dfrn_request.php:280 msgid "Invalid locator" -msgstr "Niewłaściwy lokalizator " +msgstr "Nieprawidłowy lokalizator" #: mod/dfrn_request.php:316 msgid "You have already introduced yourself here." @@ -2306,7 +2306,7 @@ msgstr "Nie dozwolony adres URL profilu." #: mod/dfrn_request.php:419 mod/contacts.php:230 msgid "Failed to update contact record." -msgstr "Aktualizacja nagrania kontaktu nie powiodła się." +msgstr "Aktualizacja rekordu kontaktu nie powiodła się." #: mod/dfrn_request.php:439 msgid "Your introduction has been sent." @@ -2316,7 +2316,7 @@ msgstr "Twoje dane zostały wysłane." msgid "" "Remote subscription can't be done for your network. Please subscribe " "directly on your system." -msgstr "" +msgstr "Zdalnej subskrypcji nie można wykonać dla swojej sieci. Proszę zasubskrybuj bezpośrednio w swoim systemie." #: mod/dfrn_request.php:493 msgid "Please login to confirm introduction." @@ -2364,7 +2364,7 @@ msgstr "Proszę podaj swój \"Adres tożsamości \" z jednej z możliwych wspier msgid "" "If you are not yet a member of the free social web, follow " "this link to find a public Friendica site and join us today." -msgstr "" +msgstr "Jeśli nie jesteś jeszcze członkiem darmowej strony społecznościowej, kliknij ten link, aby znaleźć publiczną witrynę Friendica i dołącz do nas już dziś ." #: mod/dfrn_request.php:650 msgid "Friend/Connection Request" @@ -2374,11 +2374,11 @@ msgstr "Przyjaciel/Prośba o połączenie" msgid "" "Examples: jojo@demo.friendica.com, http://demo.friendica.com/profile/jojo, " "testuser@gnusocial.de" -msgstr "" +msgstr "Przykłady: jojo@demo.friendica.com, http://demo.friendica.com/profile/jojo, testuser@gnusocial.de" #: mod/dfrn_request.php:652 mod/follow.php:149 msgid "Please answer the following:" -msgstr "Proszę odpowiedzieć na poniższe:" +msgstr "Proszę odpowiedzieć na następujące pytania:" #: mod/dfrn_request.php:653 mod/follow.php:150 #, php-format @@ -2406,11 +2406,11 @@ msgstr "" msgid "" " - please do not use this form. Instead, enter %s into your Diaspora search" " bar." -msgstr "- proszę wyraź to inaczej . Zamiast tego ,wprowadź %s do swojej belki wyszukiwarki." +msgstr "- proszę nie używać tego formularza. Zamiast tego %s wejdź na pasek wyszukiwania Diaspora. do swojej belki wyszukiwarki." #: mod/dfrn_request.php:660 mod/follow.php:157 mod/unfollow.php:113 msgid "Your Identity Address:" -msgstr "Twój zidentyfikowany adres:" +msgstr "Twój adres tożsamości:" #: mod/dfrn_request.php:662 mod/follow.php:62 mod/unfollow.php:65 msgid "Submit Request" @@ -2432,7 +2432,7 @@ msgstr "Zmiana czasu" msgid "" "Friendica provides this service for sharing events with other networks and " "friends in unknown timezones." -msgstr "" +msgstr "Friendica udostępnia tę usługę do udostępniania wydarzeń innym sieciom i znajomym w nieznanych strefach czasowych." #: mod/localtime.php:39 #, php-format @@ -2475,7 +2475,7 @@ msgid "" "\n" "\t\tYour password will not be changed unless we can verify that you\n" "\t\tissued this request." -msgstr "" +msgstr "\n\t\tDrodzy %1$s, \n\t\t\tOtrzymano niedawno prośbę o ''%2$s\" zresetowanie konta \n\t\thasło. Aby potwierdzić tę prośbę, wybierz link weryfikacyjny \n\t\tponiżej lub wklej go na pasek adresu przeglądarki internetowej. \n \n\t\tJeśli NIE poprosiłeś o tę zmianę, NIE wykonuj tego linku \n\t\tpod warunkiem, że zignorujesz i/lub usuniesz ten e-mail, prośba wkrótce wygaśnie. \n \n\t\tTwoje hasło nie zostanie zmienione, chyba że będziemy mogli to potwierdzić \n\t\twydał to żądanie." #: mod/lostpass.php:56 #, php-format @@ -2492,7 +2492,7 @@ msgid "" "\n" "\t\tSite Location:\t%2$s\n" "\t\tLogin Name:\t%3$s" -msgstr "" +msgstr "\nWkrótce skorzystaj z tego linku, aby zweryfikować swoją tożsamość: \n\n\t\t%1$s\n\n\t\tOtrzymasz następnie komunikat uzupełniający zawierający nowe hasło. \n\t\tMożesz zmienić to hasło ze strony ustawień swojego konta po zalogowaniu. \n \n\t\tDane logowania są następujące: \n \nLokalizacja strony: \t%2$s\nNazwa użytkownika:\t%3$s" #: mod/lostpass.php:72 #, php-format @@ -2507,7 +2507,7 @@ msgstr "Prośba nie może być zweryfikowana. (Mogłeś już ją poprzednio wys #: mod/lostpass.php:101 msgid "Request has expired, please make a new one." -msgstr "" +msgstr "Żądanie wygasło. Zrób nowe." #: mod/lostpass.php:116 msgid "Forgot your Password?" @@ -2533,7 +2533,7 @@ msgstr "Zresetuj hasło" #: mod/lostpass.php:136 msgid "Your password has been reset as requested." -msgstr "Twoje hasło zostało zresetowane na twoje życzenie." +msgstr "Twoje hasło zostało zresetowane zgodnie z żądaniem." #: mod/lostpass.php:137 msgid "Your new password is" @@ -2541,11 +2541,11 @@ msgstr "Twoje nowe hasło to" #: mod/lostpass.php:138 msgid "Save or copy your new password - and then" -msgstr "Zapisz lub skopiuj swoje nowe hasło - i wtedy" +msgstr "Zapisz lub skopiuj nowe hasło - a następnie" #: mod/lostpass.php:139 msgid "click here to login" -msgstr "Kliknij tutaj aby zalogować" +msgstr "Kliknij tutaj aby się zalogować" #: mod/lostpass.php:140 msgid "" @@ -2562,7 +2562,7 @@ msgid "" "\t\t\tinformation for your records (or change your password immediately to\n" "\t\t\tsomething that you will remember).\n" "\t\t" -msgstr "" +msgstr "\n\t\t\tDrogi %1$s, \n\t\t\t\tTwoje hasło zostało zmienione zgodnie z życzeniem. Proszę, zachowaj te \n\t\t\tinformacje dotyczące twoich rekordów (lub natychmiast zmień hasło na \n\t\t\tcoś, co zapamiętasz).\n\t\t" #: mod/lostpass.php:154 #, php-format @@ -2576,7 +2576,7 @@ msgid "" "\n" "\t\t\tYou may change that password from your account settings page after logging in.\n" "\t\t" -msgstr "" +msgstr "\n\t\t\tDane logowania są następujące:\n\n\t\t\tLokalizacja witryny:\t%1$s\n\t\t\tNazwa użytkownika:\t%2$s\n\t\t\tHasło:\t%3$s\n\n\t\t\tMożesz zmienić hasło na stronie ustawień konta po zalogowaniu.\n\t\t" #: mod/lostpass.php:167 #, php-format @@ -2593,11 +2593,11 @@ msgstr "{0} chce być Twoim znajomym" #: mod/ping.php:307 msgid "{0} sent you a message" -msgstr "{0} wysyła Ci wiadomość" +msgstr "{0} wysłałem Ci wiadomość" #: mod/ping.php:322 msgid "{0} requested registration" -msgstr "{0} żądana rejestracja" +msgstr "{0} wymagana rejestracja" #: mod/poke.php:192 msgid "Poke/Prod" @@ -2613,11 +2613,11 @@ msgstr "Odbiorca" #: mod/poke.php:195 msgid "Choose what you wish to do to recipient" -msgstr "" +msgstr "Wybierz, co chcesz zrobić" #: mod/poke.php:198 msgid "Make this post private" -msgstr "Zrób ten post prywatnym" +msgstr "Ustaw ten post jako prywatny" #: mod/probe.php:14 mod/webfinger.php:17 msgid "Only logged in users are permitted to perform a probing." @@ -2654,7 +2654,7 @@ msgstr "Konto zatwierdzone." #: mod/regmod.php:93 #, php-format msgid "Registration revoked for %s" -msgstr "Rejestracja dla %s odwołana" +msgstr "Rejestracja odwołana dla %s" #: mod/regmod.php:102 msgid "Please login." @@ -2668,7 +2668,7 @@ msgstr "Usuń konto" msgid "" "This will completely remove your account. Once this has been done it is not " "recoverable." -msgstr "Kompletne usunięcie konta. Jeżeli zostanie wykonane, konto nie może zostać odzyskane." +msgstr "Spowoduje to całkowite usunięcie Twojego konta. Po wykonaniu tej czynności nie można jej odzyskać." #: mod/removeme.php:57 msgid "Please enter your password for verification:" @@ -2684,7 +2684,7 @@ msgstr "Zapisane wyszukiwania" #: mod/search.php:105 msgid "Only logged in users are permitted to perform a search." -msgstr "" +msgstr "Tylko zalogowani użytkownicy mogą wyszukiwać." #: mod/search.php:129 msgid "Too Many Requests" @@ -2706,12 +2706,12 @@ msgstr "Przedmioty oznaczone tagiem: %s" #: mod/search.php:236 mod/contacts.php:819 #, php-format msgid "Results for: %s" -msgstr "" +msgstr "Wyniki dla: %s" #: mod/subthread.php:113 #, php-format msgid "%1$s is following %2$s's %3$s" -msgstr "" +msgstr "%1$skolejny %2$s %3$s " #: mod/tagrm.php:47 msgid "Tag removed" @@ -2784,7 +2784,7 @@ msgstr "Przesyłanie obrazu nie powiodło się" #: mod/wallmessage.php:49 mod/wallmessage.php:112 #, php-format msgid "Number of daily wall messages for %s exceeded. Message failed." -msgstr "Dzienny limit wiadomości na murze dla %s został przekroczony. Wiadomość została odrzucona." +msgstr "Dzienny limit wiadomości %s został przekroczony. Wiadomość została odrzucona." #: mod/wallmessage.php:57 mod/message.php:73 msgid "No recipient selected." @@ -2819,7 +2819,7 @@ msgstr "Wyślij prywatną wiadomość" msgid "" "If you wish for %s to respond, please check that the privacy settings on " "your site allow private mail from unknown senders." -msgstr "" +msgstr "Jeśli chcesz %s odpowiedzieć, sprawdź, czy ustawienia prywatności w Twojej witrynie zezwalają na prywatne wiadomości od nieznanych nadawców." #: mod/wallmessage.php:134 mod/message.php:251 mod/message.php:421 msgid "To:" @@ -2839,7 +2839,7 @@ msgstr "Rejestracja zakończona pomyślnie. Dalsze instrukcje zostały wysłane msgid "" "Failed to send email message. Here your accout details:
    login: %s
    " "password: %s

    You can change your password after login." -msgstr "" +msgstr "Nie udało się wysłać wiadomości e-mail. Tutaj szczegóły twojego konta:
    login: %s
    hasło: %s

    Możesz zmienić swoje hasło po zalogowaniu." #: mod/register.php:110 msgid "Registration successful." @@ -2857,7 +2857,7 @@ msgstr "Twoja rejestracja oczekuje na zaakceptowanie przez właściciela witryny msgid "" "You may (optionally) fill in this form via OpenID by supplying your OpenID " "and clicking 'Register'." -msgstr "Masz możliwość (opcjonalnie) wypełnić ten formularz przez OpenID poprzez załączenie Twojego OpenID i kliknięcie 'Zarejestruj'." +msgstr "Możesz (opcjonalnie) wypełnić ten formularz za pośrednictwem OpenID, podając swój OpenID i klikając 'Register'." #: mod/register.php:221 msgid "" @@ -2895,7 +2895,7 @@ msgstr "Rejestracja" #: mod/register.php:270 msgid "Your Full Name (e.g. Joe Smith, real or real-looking): " -msgstr "" +msgstr "Twoje imię i nazwisko (np. Joe Smith, prawdziwy lub real-looking):" #: mod/register.php:271 msgid "" @@ -2909,7 +2909,7 @@ msgstr "Nowe hasło:" #: mod/register.php:273 msgid "Leave empty for an auto generated password." -msgstr "" +msgstr "Pozostaw puste dla wygenerowanego automatycznie hasła." #: mod/register.php:274 mod/settings.php:1200 msgid "Confirm:" @@ -2920,7 +2920,7 @@ msgstr "Potwierdź:" msgid "" "Choose a profile nickname. This must begin with a text character. Your " "profile address on this site will then be 'nickname@%s'." -msgstr "" +msgstr "Wybierz pseudonim profilu. Nazwa musi zaczynać się od znaku tekstowego. Twój adres profilu na tej stronie będzie wówczas 'pseudonimem%s'." #: mod/register.php:276 msgid "Choose a nickname: " @@ -2932,7 +2932,7 @@ msgstr "Zarejestruj" #: mod/register.php:286 msgid "Import your profile to this friendica instance" -msgstr "" +msgstr "Zaimportuj swój profil do tej instancji friendica" #: mod/bookmarklet.php:23 src/Content/Nav.php:114 src/Module/Login.php:312 msgid "Login" @@ -2944,7 +2944,7 @@ msgstr "Post został utworzony" #: mod/community.php:46 msgid "Community option not available." -msgstr "" +msgstr "Opcja wspólnotowa jest niedostępna." #: mod/community.php:63 msgid "Not available." @@ -2964,13 +2964,13 @@ msgstr "Globalna społeczność" #: mod/community.php:90 msgid "Posts from users of the whole federated network" -msgstr "" +msgstr "Wpisy od użytkowników całej sieci stowarzyszonej" #: mod/community.php:180 msgid "" "This community stream shows all public posts received by this node. They may" " not reflect the opinions of this node’s users." -msgstr "" +msgstr "Ten strumień społeczności pokazuje wszystkie publiczne posty otrzymane przez ten węzeł. Mogą nie odzwierciedlać opinii użytkowników tego węzła." #: mod/editpost.php:25 mod/editpost.php:35 msgid "Item not found" @@ -3019,7 +3019,7 @@ msgstr "Nazwa grupy zmieniona" #: mod/group.php:97 msgid "Save Group" -msgstr "" +msgstr "Zapisz grupę" #: mod/group.php:102 msgid "Create a group of contacts/friends." @@ -3039,7 +3039,7 @@ msgstr "Nie można usunąć grupy." #: mod/group.php:192 msgid "Delete Group" -msgstr "" +msgstr "Usuń grupę" #: mod/group.php:198 msgid "Group Editor" @@ -3047,7 +3047,7 @@ msgstr "Edytor grupy" #: mod/group.php:203 msgid "Edit Group Name" -msgstr "" +msgstr "Edytuj nazwę grupy" #: mod/group.php:213 msgid "Members" @@ -3063,11 +3063,11 @@ msgstr "Grupa jest pusta" #: mod/group.php:229 msgid "Remove Contact" -msgstr "" +msgstr "Usuń Kontakt" #: mod/group.php:253 msgid "Add Contact" -msgstr "" +msgstr "Dodaj Kontakt" #: mod/message.php:30 src/Content/Nav.php:198 msgid "New Message" @@ -3075,7 +3075,7 @@ msgstr "Nowa wiadomość" #: mod/message.php:77 msgid "Unable to locate contact information." -msgstr "Niezdolny do uzyskania informacji kontaktowych." +msgstr "Nie można znaleźć informacji kontaktowych." #: mod/message.php:112 view/theme/frio/theme.php:268 src/Content/Nav.php:195 msgid "Messages" @@ -3117,7 +3117,7 @@ msgstr "Usuń rozmowę" msgid "" "No secure communications available. You may be able to " "respond from the sender's profile page." -msgstr "" +msgstr "Brak bezpiecznej komunikacji. Możesz odpowiedzieć na stronie profilu nadawcy." #: mod/message.php:420 msgid "Send Reply" @@ -3126,7 +3126,7 @@ msgstr "Odpowiedz" #: mod/message.php:471 #, php-format msgid "Unknown sender - %s" -msgstr "Nieznany wysyłający - %s" +msgstr "Nieznany nadawca - %s" #: mod/message.php:473 #, php-format @@ -3166,7 +3166,7 @@ msgstr[3] "" #: mod/network.php:550 msgid "Messages in this group won't be send to these receivers." -msgstr "" +msgstr "Wiadomości z tej grupy nie będą wysyłane do tych odbiorców." #: mod/network.php:618 msgid "No such group" @@ -3175,7 +3175,7 @@ msgstr "Nie ma takiej grupy" #: mod/network.php:643 #, php-format msgid "Group: %s" -msgstr "" +msgstr "Grupa: %s" #: mod/network.php:669 msgid "Private messages to this person are at risk of public disclosure." @@ -3208,7 +3208,7 @@ msgstr "Osobiste" #: mod/network.php:943 msgid "Posts that mention or involve you" -msgstr "" +msgstr "Posty, które wspominają lub angażują Ciebie" #: mod/network.php:951 msgid "New" @@ -3216,11 +3216,11 @@ msgstr "Nowy" #: mod/network.php:954 msgid "Activity Stream - by date" -msgstr "" +msgstr "Strumień aktywności - według daty" #: mod/network.php:962 msgid "Shared Links" -msgstr "Współdzielone linki" +msgstr "Udostępnione łącza" #: mod/network.php:965 msgid "Interesting Links" @@ -3285,21 +3285,21 @@ msgstr "zdjęcie" #: mod/photos.php:667 #, php-format msgid "%1$s was tagged in %2$s by %3$s" -msgstr "" +msgstr "%1$szostał oznaczony tagiem %2$s przez %3$s" #: mod/photos.php:769 msgid "Image upload didn't complete, please try again" -msgstr "" +msgstr "Przesyłanie zdjęć nie zostało zakończone, spróbuj ponownie" #: mod/photos.php:772 msgid "Image file is missing" -msgstr "" +msgstr "Brak pliku obrazu" #: mod/photos.php:777 msgid "" "Server can't accept new file upload at this time, please contact your " "administrator" -msgstr "" +msgstr "Serwer nie może teraz przyjąć nowego pliku, skontaktuj się z administratorem" #: mod/photos.php:803 msgid "Image file is empty." @@ -3413,7 +3413,7 @@ msgstr "Przykładowo: @bob, @Barbara_Jensen, @jim@example.com, #California, #cam #: mod/photos.php:1435 msgid "Do not rotate" -msgstr "" +msgstr "Nie obracaj" #: mod/photos.php:1436 msgid "Rotate CW (right)" @@ -3443,7 +3443,7 @@ msgstr "Komentarz" #: mod/photos.php:1634 msgid "Map" -msgstr "" +msgstr "Mapa" #: mod/photos.php:1704 mod/videos.php:387 msgid "View Album" @@ -3456,21 +3456,21 @@ msgstr "Żądany profil jest niedostępny" #: mod/profile.php:78 src/Protocol/OStatus.php:1252 #, php-format msgid "%s's posts" -msgstr "" +msgstr "%s posty " #: mod/profile.php:79 src/Protocol/OStatus.php:1253 #, php-format msgid "%s's comments" -msgstr "" +msgstr "%s komentarze " #: mod/profile.php:80 src/Protocol/OStatus.php:1251 #, php-format msgid "%s's timeline" -msgstr "" +msgstr "%s oś czasu " #: mod/profile.php:173 mod/cal.php:142 mod/display.php:313 msgid "Access to this profile has been restricted." -msgstr "Ograniczony dostęp do tego konta" +msgstr "Dostęp do tego profilu został ograniczony." #: mod/profile.php:194 msgid "Tips for New Members" @@ -3478,11 +3478,11 @@ msgstr "Wskazówki dla nowych użytkowników" #: mod/videos.php:139 msgid "Do you really want to delete this video?" -msgstr "" +msgstr "Czy na pewno chcesz usunąć ten film wideo?" #: mod/videos.php:144 msgid "Delete Video" -msgstr "" +msgstr "Usuń wideo" #: mod/videos.php:207 msgid "No videos selected" @@ -3502,7 +3502,7 @@ msgstr "Ustawienia szablonu zmienione." #: mod/admin.php:176 src/Content/Nav.php:174 msgid "Information" -msgstr "" +msgstr "Informacja" #: mod/admin.php:177 msgid "Overview" @@ -3510,7 +3510,7 @@ msgstr "Przegląd" #: mod/admin.php:178 mod/admin.php:654 msgid "Federation Statistics" -msgstr "" +msgstr "Statystyki Organizacji" #: mod/admin.php:179 msgid "Configuration" @@ -3546,7 +3546,7 @@ msgstr "Aktualizacje DB" #: mod/admin.php:187 mod/admin.php:689 msgid "Inspect Queue" -msgstr "" +msgstr "Sprawdź kolejkę" #: mod/admin.php:188 msgid "Tools" @@ -3554,15 +3554,15 @@ msgstr "Narzędzia" #: mod/admin.php:189 msgid "Contact Blocklist" -msgstr "" +msgstr "Skontaktuj się z Blocklist" #: mod/admin.php:190 mod/admin.php:311 msgid "Server Blocklist" -msgstr "" +msgstr "Lista zablokowanych serwerów" #: mod/admin.php:191 mod/admin.php:470 msgid "Delete Item" -msgstr "" +msgstr "Usuń przedmiot" #: mod/admin.php:192 mod/admin.php:193 mod/admin.php:2224 msgid "Logs" @@ -3570,11 +3570,11 @@ msgstr "Logi" #: mod/admin.php:194 mod/admin.php:2291 msgid "View Logs" -msgstr "" +msgstr "Zobacz rejestry" #: mod/admin.php:196 msgid "Diagnostics" -msgstr "" +msgstr "Diagnostyka" #: mod/admin.php:197 msgid "PHP Info" @@ -3582,11 +3582,11 @@ msgstr "" #: mod/admin.php:198 msgid "probe address" -msgstr "" +msgstr "adres sondy" #: mod/admin.php:199 msgid "check webfinger" -msgstr "" +msgstr "sprawdź webfinger" #: mod/admin.php:218 src/Content/Nav.php:217 msgid "Admin" @@ -3602,11 +3602,11 @@ msgstr "Rejestracje użytkownika czekają na potwierdzenie." #: mod/admin.php:302 msgid "The blocked domain" -msgstr "" +msgstr "Zablokowana domena" #: mod/admin.php:303 mod/admin.php:316 msgid "The reason why you blocked this domain." -msgstr "" +msgstr "Powód zablokowania tej domeny." #: mod/admin.php:304 msgid "Delete domain" @@ -3614,7 +3614,7 @@ msgstr "Usuń domenę" #: mod/admin.php:304 msgid "Check to delete this entry from the blocklist" -msgstr "" +msgstr "Zaznacz, aby usunąć ten wpis z listy bloków" #: mod/admin.php:310 mod/admin.php:427 mod/admin.php:469 mod/admin.php:653 #: mod/admin.php:688 mod/admin.php:784 mod/admin.php:1279 mod/admin.php:1720 @@ -3644,13 +3644,13 @@ msgstr "Dodaj nowy wpis do listy bloków" #: mod/admin.php:315 msgid "Server Domain" -msgstr "" +msgstr "Domena serwera" #: mod/admin.php:315 msgid "" "The domain of the new server to add to the block list. Do not include the " "protocol." -msgstr "" +msgstr "Domena nowego serwera do dodania do listy bloków. Nie dołączaj protokołu." #: mod/admin.php:316 msgid "Block reason" @@ -3658,27 +3658,27 @@ msgstr "" #: mod/admin.php:317 msgid "Add Entry" -msgstr "" +msgstr "Dodaj wpis" #: mod/admin.php:318 msgid "Save changes to the blocklist" -msgstr "" +msgstr "Zapisz zmiany w Liście zablokowanych" #: mod/admin.php:319 msgid "Current Entries in the Blocklist" -msgstr "" +msgstr "Aktualne wpisy na liście zablokowanych" #: mod/admin.php:322 msgid "Delete entry from blocklist" -msgstr "" +msgstr "Usuń wpis z listy zablokowanych" #: mod/admin.php:325 msgid "Delete entry from blocklist?" -msgstr "" +msgstr "Usunąć wpis z listy zablokowanych?" #: mod/admin.php:351 msgid "Server added to blocklist." -msgstr "" +msgstr "Serwer dodany do listy zablokowanych." #: mod/admin.php:367 msgid "Site blocklist updated." @@ -3686,12 +3686,12 @@ msgstr "Zaktualizowano listę bloków witryny." #: mod/admin.php:390 src/Core/Console/GlobalCommunityBlock.php:72 msgid "The contact has been blocked from the node" -msgstr "" +msgstr "Kontakt został zablokowany w węźle" #: mod/admin.php:392 src/Core/Console/GlobalCommunityBlock.php:69 #, php-format msgid "Could not find any contact entry for this URL (%s)" -msgstr "" +msgstr "Nie można znaleźć żadnego kontaktu dla tego adresu URL (%s)" #: mod/admin.php:399 #, php-format @@ -3704,17 +3704,17 @@ msgstr[3] "" #: mod/admin.php:428 msgid "Remote Contact Blocklist" -msgstr "" +msgstr "Lista zablokowanych kontaktów zdalnych" #: mod/admin.php:429 msgid "" "This page allows you to prevent any message from a remote contact to reach " "your node." -msgstr "" +msgstr "Ta strona pozwala zapobiec wysyłaniu do węzła wiadomości od kontaktu zdalnego." #: mod/admin.php:430 msgid "Block Remote Contact" -msgstr "" +msgstr "Zablokuj kontakt zdalny" #: mod/admin.php:431 mod/admin.php:1723 msgid "select all" @@ -3736,15 +3736,15 @@ msgstr "Odblokuj" #: mod/admin.php:435 msgid "No remote contact is blocked from this node." -msgstr "" +msgstr "Z tego węzła nie jest blokowany kontakt zdalny." #: mod/admin.php:437 msgid "Blocked Remote Contacts" -msgstr "" +msgstr "Zablokowane kontakty zdalne" #: mod/admin.php:438 msgid "Block New Remote Contact" -msgstr "" +msgstr "Zablokuj nowy kontakt zdalny" #: mod/admin.php:439 msgid "Photo" @@ -3765,64 +3765,64 @@ msgstr[3] "" #: mod/admin.php:449 msgid "URL of the remote contact to block." -msgstr "" +msgstr "Adres URL kontaktu zdalnego do zablokowania." #: mod/admin.php:471 msgid "Delete this Item" -msgstr "" +msgstr "Usuń ten przedmiot" #: mod/admin.php:472 msgid "" "On this page you can delete an item from your node. If the item is a top " "level posting, the entire thread will be deleted." -msgstr "" +msgstr "Na tej stronie możesz usunąć przedmiot ze swojego węzła. Jeśli element jest publikowaniem na najwyższym poziomie, cały wątek zostanie usunięty." #: mod/admin.php:473 msgid "" "You need to know the GUID of the item. You can find it e.g. by looking at " "the display URL. The last part of http://example.com/display/123456 is the " "GUID, here 123456." -msgstr "" +msgstr "Musisz znać identyfikator GUID tego przedmiotu. Możesz go znaleźć np. patrząc na wyświetlany adres URL. Ostatnia część http://example.com/display/123456 to GUID, tutaj 123456." #: mod/admin.php:474 msgid "GUID" -msgstr "" +msgstr "GUID" #: mod/admin.php:474 msgid "The GUID of the item you want to delete." -msgstr "" +msgstr "Identyfikator elementu GUID, który chcesz usunąć." #: mod/admin.php:513 msgid "Item marked for deletion." -msgstr "" +msgstr "Przedmiot oznaczony do usunięcia." #: mod/admin.php:584 msgid "unknown" -msgstr "" +msgstr "nieznany" #: mod/admin.php:647 msgid "" "This page offers you some numbers to the known part of the federated social " "network your Friendica node is part of. These numbers are not complete but " "only reflect the part of the network your node is aware of." -msgstr "" +msgstr "Ta strona zawiera kilka numerów do znanej części federacyjnej sieci społecznościowej, do której należy Twój węzeł Friendica. Liczby te nie są kompletne, ale odzwierciedlają tylko część sieci, o której wie twój węzeł." #: mod/admin.php:648 msgid "" "The Auto Discovered Contact Directory feature is not enabled, it " "will improve the data displayed here." -msgstr "" +msgstr "Funkcja Katalog kontaktów automatycznie odkrytych nie jest włączona, poprawi ona wyświetlane tutaj dane." #: mod/admin.php:660 #, php-format msgid "" "Currently this node is aware of %d nodes with %d registered users from the " "following platforms:" -msgstr "" +msgstr "Obecnie węzeł ten jest świadomy %dwęzłów z %d zarejestrowanymi użytkownikami z następujących platform:" #: mod/admin.php:691 msgid "ID" -msgstr "" +msgstr "ID" #: mod/admin.php:692 msgid "Recipient Name" @@ -3839,18 +3839,18 @@ msgstr "Sieć" #: mod/admin.php:695 msgid "Created" -msgstr "" +msgstr "Utwórz" #: mod/admin.php:696 msgid "Last Tried" -msgstr "" +msgstr "Ostatnia wypróbowana" #: mod/admin.php:697 msgid "" "This page lists the content of the queue for outgoing postings. These are " "postings the initial delivery failed for. They will be resend later and " "eventually deleted if the delivery fails permanently." -msgstr "" +msgstr "Na tej stronie znajduje się zawartość kolejki dla wysyłek wychodzących. Są to posty, dla których początkowe wysyłanie nie powiodło się. Zostaną one ponownie wysłane później i ostatecznie usunięte, jeśli doręczenie zakończy się trwale." #: mod/admin.php:721 #, php-format @@ -3861,21 +3861,21 @@ msgid "" "converting the table engines. You may also use the command php " "bin/console.php dbstructure toinnodb of your Friendica installation for" " an automatic conversion.
    " -msgstr "" +msgstr "Twoja baza danych nadal działa z tabelami MyISAM. Powinieneś zmienić typ silnika na InnoDB. Ponieważ Friendica będzie używać funkcji związanych z InnoDB tylko w przyszłości, powinieneś to zmienić! Zobacz
    tutaj przewodnik, który może być pomocny w konwersji silników stołowych. Możesz także użyć polecenia php bin/console.php dbstructure toinnodb instalacji Friendica do automatycznej konwersji.
    " #: mod/admin.php:728 #, php-format msgid "" "There is a new version of Friendica available for download. Your current " "version is %1$s, upstream version is %2$s" -msgstr "" +msgstr "Dostępna jest nowa wersja aplikacji Friendica. Twoja aktualna wersja to %1$s wyższa wersja to %2$s" #: mod/admin.php:738 msgid "" "The database update failed. Please run \"php bin/console.php dbstructure " "update\" from the command line and have a look at the errors that might " "appear." -msgstr "" +msgstr "Aktualizacja bazy danych nie powiodła się. Uruchom polecenie \"php bin/console.php dbstructure update\" z wiersza poleceń i sprawdź błędy, które mogą się pojawić." #: mod/admin.php:744 msgid "The worker was never executed. Please check your database structure!" @@ -3886,7 +3886,7 @@ msgstr "" msgid "" "The last worker execution was on %s UTC. This is older than one hour. Please" " check your crontab settings." -msgstr "" +msgstr "Ostatnie wykonanie robota było w %s UTC. To jest starsze niż jedna godzina. Sprawdź ustawienia crontab." #: mod/admin.php:752 mod/admin.php:1672 msgid "Normal Account" @@ -3894,11 +3894,11 @@ msgstr "Konto normalne" #: mod/admin.php:753 mod/admin.php:1673 msgid "Automatic Follower Account" -msgstr "" +msgstr "Automatyczne konto obserwatora" #: mod/admin.php:754 mod/admin.php:1674 msgid "Public Forum Account" -msgstr "" +msgstr "Publiczne konto na forum" #: mod/admin.php:755 mod/admin.php:1675 msgid "Automatic Friend Account" @@ -3910,7 +3910,7 @@ msgstr "Konto Bloga" #: mod/admin.php:757 msgid "Private Forum Account" -msgstr "" +msgstr "Prywatne konto na forum" #: mod/admin.php:779 msgid "Message queues" @@ -3918,7 +3918,7 @@ msgstr "Wiadomości" #: mod/admin.php:785 msgid "Summary" -msgstr "Skrót" +msgstr "Podsumowanie" #: mod/admin.php:787 msgid "Registered users" @@ -3934,7 +3934,7 @@ msgstr "Wersja" #: mod/admin.php:795 msgid "Active addons" -msgstr "" +msgstr "Aktywne dodatki" #: mod/admin.php:826 msgid "Can not parse base url. Must have at least ://" @@ -3958,11 +3958,11 @@ msgstr "Publikacje publiczne od użytkowników tej strony" #: mod/admin.php:1202 msgid "Public postings from the federated network" -msgstr "" +msgstr "Publikacje wpisy ze sfederowanej sieci" #: mod/admin.php:1203 msgid "Public postings from local users and the federated network" -msgstr "" +msgstr "Publikacje publiczne od użytkowników lokalnych i sieci federacyjnej" #: mod/admin.php:1207 mod/admin.php:1370 mod/admin.php:1380 #: mod/contacts.php:572 @@ -4031,7 +4031,7 @@ msgstr "sprawdź wersję stabilną" #: mod/admin.php:1259 msgid "check the development version" -msgstr "" +msgstr "sprawdź wersję rozwojową" #: mod/admin.php:1281 mod/admin.php:1898 mod/admin.php:2151 mod/admin.php:2225 #: mod/admin.php:2372 mod/delegate.php:168 mod/settings.php:675 @@ -4042,7 +4042,7 @@ msgstr "Zapisz ustawienia" #: mod/admin.php:1282 msgid "Republish users to directory" -msgstr "" +msgstr "Ponownie opublikuj użytkowników w katalogu" #: mod/admin.php:1284 msgid "File upload" @@ -4059,7 +4059,7 @@ msgstr "Zaawansowany" #: mod/admin.php:1287 msgid "Auto Discovered Contact Directory" -msgstr "" +msgstr "Katalog kontaktów automatycznie odkrytych" #: mod/admin.php:1288 msgid "Performance" @@ -4071,7 +4071,7 @@ msgstr "Pracownik" #: mod/admin.php:1290 msgid "Message Relay" -msgstr "" +msgstr "Przekazywanie wiadomości" #: mod/admin.php:1291 msgid "" @@ -4113,7 +4113,7 @@ msgstr "Kliknij ikonę" #: mod/admin.php:1299 msgid "Link to an icon that will be used for tablets and mobiles." -msgstr "" +msgstr "Link do ikony, która będzie używana w tabletach i telefonach komórkowych." #: mod/admin.php:1300 msgid "Additional Info" @@ -4124,7 +4124,7 @@ msgstr "Dodatkowe informacje" msgid "" "For public servers: you can add additional information here that will be " "listed at %s/servers." -msgstr "" +msgstr "W przypadku serwerów publicznych: możesz tu dodać dodatkowe informacje, które będą wymienione na %s/serwerach." #: mod/admin.php:1301 msgid "System language" @@ -4164,7 +4164,7 @@ msgstr "Wymuś SSL" msgid "" "Force all Non-SSL requests to SSL - Attention: on some systems it could lead" " to endless loops." -msgstr "" +msgstr "Wymuszaj wszystkie żądania SSL bez SSL - Uwaga: w niektórych systemach może to prowadzić do niekończących się pętli." #: mod/admin.php:1306 msgid "Hide help entry from navigation menu" @@ -4227,7 +4227,7 @@ msgid "" "If registration is permitted above, this sets the maximum number of new user" " registrations to accept per day. If register is set to closed, this " "setting has no effect." -msgstr "" +msgstr "Jeśli rejestracja jest dozwolona powyżej, określa maksymalną liczbę nowych rejestracji użytkowników do zaakceptowania na dzień. Jeśli rejestr jest ustawiony na zamknięty, to ustawienie nie ma wpływu." #: mod/admin.php:1314 msgid "Register text" @@ -4235,7 +4235,7 @@ msgstr "Zarejestruj tekst" #: mod/admin.php:1314 msgid "Will be displayed prominently on the registration page." -msgstr "" +msgstr "Będą wyświetlane w widocznym miejscu na stronie rejestracji." #: mod/admin.php:1315 msgid "Accounts abandoned after x days" @@ -4266,7 +4266,7 @@ msgid "" "Comma separated list of domains which are allowed in email addresses for " "registrations to this site. Wildcards are accepted. Empty to allow any " "domains" -msgstr "" +msgstr "Rozdzielana przecinkami lista domen dozwolonych w adresach e-mail do rejestracji na tej stronie. Symbole wieloznaczne są akceptowane. Opróżnij, aby zezwolić na dowolne domeny" #: mod/admin.php:1318 msgid "No OEmbed rich content" @@ -4276,17 +4276,17 @@ msgstr "" msgid "" "Don't show the rich content (e.g. embedded PDF), except from the domains " "listed below." -msgstr "" +msgstr "Nie wyświetlaj zasobów treści (np. osadzonego pliku PDF), z wyjątkiem domen wymienionych poniżej." #: mod/admin.php:1319 msgid "Allowed OEmbed domains" -msgstr "" +msgstr "Dozwolone domeny OEmbed" #: mod/admin.php:1319 msgid "" "Comma separated list of domains which oembed content is allowed to be " "displayed. Wildcards are accepted." -msgstr "" +msgstr "Rozdzielana przecinkami lista domen, w których wyświetlana jest treść, może być wyświetlana. Symbole wieloznaczne są akceptowane." #: mod/admin.php:1320 msgid "Block public" @@ -4296,7 +4296,7 @@ msgstr "Blokuj publicznie" msgid "" "Check to block public access to all otherwise public personal pages on this " "site unless you are currently logged in." -msgstr "" +msgstr "Zaznacz, aby zablokować publiczny dostęp do wszystkich publicznych stron prywatnych w tej witrynie, chyba że jesteś zalogowany." #: mod/admin.php:1321 msgid "Force publish" @@ -4305,17 +4305,17 @@ msgstr "Wymuś publikację" #: mod/admin.php:1321 msgid "" "Check to force all profiles on this site to be listed in the site directory." -msgstr "" +msgstr "Zaznacz, aby wymusić umieszczenie wszystkich profili w tej witrynie w katalogu witryny." #: mod/admin.php:1322 msgid "Global directory URL" -msgstr "" +msgstr "Globalny adres URL katalogu" #: mod/admin.php:1322 msgid "" "URL to the global directory. If this is not set, the global directory is " "completely unavailable to the application." -msgstr "" +msgstr "Adres URL do katalogu globalnego. Jeśli nie zostanie to ustawione, katalog globalny jest całkowicie niedostępny dla aplikacji." #: mod/admin.php:1323 msgid "Private posts by default for new users" @@ -4325,7 +4325,7 @@ msgstr "Prywatne posty domyślnie dla nowych użytkowników" msgid "" "Set default post permissions for all new members to the default privacy " "group rather than public." -msgstr "" +msgstr "Ustaw domyślne uprawnienia do publikowania dla wszystkich nowych członków na domyślną grupę prywatności, a nie publiczną." #: mod/admin.php:1324 msgid "Don't include post content in email notifications" @@ -4345,11 +4345,11 @@ msgstr "Nie zezwalaj na publiczny dostęp do dodatkowych wtyczek wyszczególnion msgid "" "Checking this box will restrict addons listed in the apps menu to members " "only." -msgstr "" +msgstr "Zaznaczenie tego pola spowoduje ograniczenie dodatków wymienionych w menu aplikacji tylko dla członków." #: mod/admin.php:1326 msgid "Don't embed private images in posts" -msgstr "" +msgstr "Nie umieszczaj prywatnych zdjęć w postach" #: mod/admin.php:1326 msgid "" @@ -4357,18 +4357,18 @@ msgid "" "of the image. This means that contacts who receive posts containing private " "photos will have to authenticate and load each image, which may take a " "while." -msgstr "" +msgstr "Nie zastępuj lokalnie hostowanych zdjęć prywatnych we wpisach za pomocą osadzonej kopii obrazu. Oznacza to, że osoby, które otrzymują posty zawierające prywatne zdjęcia, będą musiały uwierzytelnić i wczytać każdy obraz, co może trochę potrwać." #: mod/admin.php:1327 msgid "Allow Users to set remote_self" -msgstr "" +msgstr "Zezwól użytkownikom na ustawienie remote_self" #: mod/admin.php:1327 msgid "" "With checking this, every user is allowed to mark every contact as a " "remote_self in the repair contact dialog. Setting this flag on a contact " "causes mirroring every posting of that contact in the users stream." -msgstr "" +msgstr "Po sprawdzeniu tego każdy użytkownik może zaznaczyć każdy kontakt jako zdalny w oknie dialogowym kontaktu naprawczego. Ustawienie tej flagi na kontakcie powoduje dublowanie każdego wpisu tego kontaktu w strumieniu użytkowników." #: mod/admin.php:1328 msgid "Block multiple registrations" @@ -4384,7 +4384,7 @@ msgstr "Wsparcie OpenID" #: mod/admin.php:1329 msgid "OpenID support for registration and logins." -msgstr "" +msgstr "Obsługa OpenID do rejestracji i logowania." #: mod/admin.php:1330 msgid "Fullname check" @@ -4398,23 +4398,23 @@ msgstr "Aby ograniczyć spam, wymagaj by użytkownik przy rejestracji w polu Imi #: mod/admin.php:1331 msgid "Community pages for visitors" -msgstr "" +msgstr "Strony społecznościowe dla odwiedzających" #: mod/admin.php:1331 msgid "" "Which community pages should be available for visitors. Local users always " "see both pages." -msgstr "" +msgstr "Które strony społeczności powinny być dostępne dla odwiedzających. Lokalni użytkownicy zawsze widzą obie strony." #: mod/admin.php:1332 msgid "Posts per user on community page" -msgstr "" +msgstr "Lista postów użytkownika na stronie społeczności" #: mod/admin.php:1332 msgid "" "The maximum number of posts per user on the community page. (Not valid for " "'Global Community')" -msgstr "" +msgstr "Maksymalna liczba postów na użytkownika na stronie społeczności. (Nie dotyczy 'społeczności globalnej')" #: mod/admin.php:1333 msgid "Enable OStatus support" @@ -4425,18 +4425,18 @@ msgid "" "Provide built-in OStatus (StatusNet, GNU Social etc.) compatibility. All " "communications in OStatus are public, so privacy warnings will be " "occasionally displayed." -msgstr "" +msgstr "Zapewnij kompatybilność z OStatus (StatusNet, GNU Social itp.). Cała komunikacja w stanie OStatus jest jawna, dlatego ostrzeżenia o prywatności będą czasami wyświetlane." #: mod/admin.php:1334 msgid "Only import OStatus threads from our contacts" -msgstr "" +msgstr "Importuj wątki OStatus tylko z naszych kontaktów" #: mod/admin.php:1334 msgid "" "Normally we import every content from our OStatus contacts. With this option" " we only store threads that are started by a contact that is known on our " "system." -msgstr "" +msgstr "Normalnie importujemy każdą treść z naszych kontaktów OStatus. W tej opcji przechowujemy tylko wątki uruchomione przez kontakt znany w naszym systemie." #: mod/admin.php:1335 msgid "OStatus support can only be enabled if threading is enabled." @@ -4464,7 +4464,7 @@ msgstr "Dopuść tylko kontakty Friendrica" msgid "" "All contacts must use Friendica protocols. All other built-in communication " "protocols disabled." -msgstr "" +msgstr "Wszyscy znajomi muszą używać protokołów Friendica. Wszystkie inne wbudowane protokoły komunikacyjne są wyłączone." #: mod/admin.php:1340 msgid "Verify SSL" @@ -4474,7 +4474,7 @@ msgstr "Weryfikacja SSL" msgid "" "If you wish, you can turn on strict certificate checking. This will mean you" " cannot connect (at all) to self-signed SSL sites." -msgstr "" +msgstr "Jeśli chcesz, możesz włączyć ścisłe sprawdzanie certyfikatu. Oznacza to, że nie możesz połączyć się (w ogóle) z własnoręcznie podpisanymi stronami SSL." #: mod/admin.php:1341 msgid "Proxy user" @@ -4490,7 +4490,7 @@ msgstr "Network timeout" #: mod/admin.php:1343 msgid "Value is in seconds. Set to 0 for unlimited (not recommended)." -msgstr "" +msgstr "Wartość jest w sekundach. Ustaw na 0 dla nieograniczonej (niezalecane)." #: mod/admin.php:1344 msgid "Maximum Load Average" @@ -4500,7 +4500,7 @@ msgstr "" msgid "" "Maximum system load before delivery and poll processes are deferred - " "default 50." -msgstr "" +msgstr "Maksymalne obciążenie systemu przed dostawą i odpytywaniem jest odroczone - domyślnie 50." #: mod/admin.php:1345 msgid "Maximum Load Average (Frontend)" @@ -4508,11 +4508,11 @@ msgstr "" #: mod/admin.php:1345 msgid "Maximum system load before the frontend quits service - default 50." -msgstr "" +msgstr "Maksymalne obciążenie systemu, zanim frontend zakończy pracę - domyślnie 50." #: mod/admin.php:1346 msgid "Minimal Memory" -msgstr "" +msgstr "Minimalna pamięć" #: mod/admin.php:1346 msgid "" @@ -4548,11 +4548,11 @@ msgstr "" msgid "" "If enabled, the global contacts are checked periodically for missing or " "outdated data and the vitality of the contacts and servers." -msgstr "" +msgstr "Jeśli jest włączona, kontakty globalne są okresowo sprawdzane pod kątem brakujących lub nieaktualnych danych oraz żywotności kontaktów i serwerów." #: mod/admin.php:1351 msgid "Days between requery" -msgstr "" +msgstr "Dni między żądaniem" #: mod/admin.php:1351 msgid "Number of days after which a server is requeried for his contacts." @@ -4570,17 +4570,17 @@ msgid "" "and older friendica servers, where global contacts weren't available. The " "fallback increases the server load, so the recommened setting is 'Users, " "Global Contacts'." -msgstr "" +msgstr "Okresowo wysyłaj zapytanie do innych serwerów o kontakty. Możesz wybierać pomiędzy 'użytkownikami': użytkownikami w systemie zdalnym, 'Kontakty globalne': aktywne kontakty znane w systemie. Zastępowanie jest przeznaczone dla serwerów Redmatrix i starszych serwerów Friendica, w których kontakty globalne nie były dostępne. Funkcja awaryjna zwiększa obciążenie serwera, dlatego zalecanym ustawieniem jest 'Użytkownicy, kontakty globalne'." #: mod/admin.php:1353 msgid "Timeframe for fetching global contacts" -msgstr "" +msgstr "Czas pobierania globalnych kontaktów" #: mod/admin.php:1353 msgid "" "When the discovery is activated, this value defines the timeframe for the " "activity of the global contacts that are fetched from other servers." -msgstr "" +msgstr "Po aktywowaniu wykrywania ta wartość określa czas działania globalnych kontaktów pobieranych z innych serwerów." #: mod/admin.php:1354 msgid "Search the local directory" @@ -4591,7 +4591,7 @@ msgid "" "Search the local directory instead of the global directory. When searching " "locally, every search will be executed on the global directory in the " "background. This improves the search results when the search is repeated." -msgstr "" +msgstr "Wyszukaj lokalny katalog zamiast katalogu globalnego. Podczas wyszukiwania lokalnie każde wyszukiwanie zostanie wykonane w katalogu globalnym w tle. Poprawia to wyniki wyszukiwania, gdy wyszukiwanie jest powtarzane." #: mod/admin.php:1356 msgid "Publish server information" @@ -4603,51 +4603,51 @@ msgid "" "contains the name and version of the server, number of users with public " "profiles, number of posts and the activated protocols and connectors. See the-federation.info for details." -msgstr "" +msgstr "Jeśli opcja jest włączona, ogólne dane serwera i użytkowania zostaną opublikowane. Dane zawierają nazwę i wersję serwera, liczbę użytkowników z profilami publicznymi, liczbę postów oraz aktywowane protokoły i konektory. Aby uzyskać szczegółowe informacje, patrz the-federation.info." #: mod/admin.php:1358 msgid "Check upstream version" -msgstr "" +msgstr "Sprawdź wersję powyżej" #: mod/admin.php:1358 msgid "" "Enables checking for new Friendica versions at github. If there is a new " "version, you will be informed in the admin panel overview." -msgstr "" +msgstr "Umożliwia sprawdzenie nowych wersji Friendica na github. Jeśli pojawi się nowa wersja, zostaniesz o tym poinformowany w panelu administracyjnym." #: mod/admin.php:1359 msgid "Suppress Tags" -msgstr "" +msgstr "Ukryj tagi" #: mod/admin.php:1359 msgid "Suppress showing a list of hashtags at the end of the posting." -msgstr "" +msgstr "Pomiń wyświetlenie listy hashtagów na końcu postu." #: mod/admin.php:1360 msgid "Path to item cache" -msgstr "" +msgstr "Ścieżka do pamięci podręcznej" #: mod/admin.php:1360 msgid "The item caches buffers generated bbcode and external images." -msgstr "" +msgstr "Pozycja buforuje bufory generowane bbcode i obrazy zewnętrzne." #: mod/admin.php:1361 msgid "Cache duration in seconds" -msgstr "" +msgstr "Czas trwania w sekundach" #: mod/admin.php:1361 msgid "" "How long should the cache files be hold? Default value is 86400 seconds (One" " day). To disable the item cache, set the value to -1." -msgstr "" +msgstr "Jak długo powinny być przechowywane pliki pamięci podręcznej? Wartość domyślna to 86400 sekund (jeden dzień). Aby wyłączyć pamięć podręczną elementów, ustaw wartość na -1." #: mod/admin.php:1362 msgid "Maximum numbers of comments per post" -msgstr "" +msgstr "Maksymalna liczba komentarzy na post" #: mod/admin.php:1362 msgid "How much comments should be shown for each post? Default value is 100." -msgstr "" +msgstr "Ile komentarzy powinno być pokazywanych dla każdego posta? Domyślna wartość to 100." #: mod/admin.php:1363 msgid "Temp path" @@ -4657,18 +4657,18 @@ msgstr "Ścieżka do Temp" msgid "" "If you have a restricted system where the webserver can't access the system " "temp path, enter another path here." -msgstr "" +msgstr "Jeśli masz zastrzeżony system, w którym serwer internetowy nie może uzyskać dostępu do ścieżki temp systemu, wprowadź tutaj inną ścieżkę." #: mod/admin.php:1364 msgid "Base path to installation" -msgstr "" +msgstr "Podstawowa ścieżka do instalacji" #: mod/admin.php:1364 msgid "" "If the system cannot detect the correct path to your installation, enter the" " correct path here. This setting should only be set if you are using a " "restricted system and symbolic links to your webroot." -msgstr "" +msgstr "Jeśli system nie może wykryć poprawnej ścieżki do instalacji, wprowadź tutaj poprawną ścieżkę. To ustawienie powinno być ustawione tylko wtedy, gdy używasz ograniczonego systemu i dowiązań symbolicznych do twojego webroota." #: mod/admin.php:1365 msgid "Disable picture proxy" @@ -4678,33 +4678,33 @@ msgstr "Wyłącz obraz proxy" msgid "" "The picture proxy increases performance and privacy. It shouldn't be used on" " systems with very low bandwith." -msgstr "" +msgstr "Proxy obrazu zwiększa wydajność i prywatność. Nie należy go stosować w systemach o bardzo niskiej przepustowości." #: mod/admin.php:1366 msgid "Only search in tags" -msgstr "" +msgstr "Szukaj tylko w tagach" #: mod/admin.php:1366 msgid "On large systems the text search can slow down the system extremely." -msgstr "" +msgstr "W dużych systemach wyszukiwanie tekstu może wyjątkowo spowolnić system." #: mod/admin.php:1368 msgid "New base url" -msgstr "" +msgstr "Nowy bazowy adres url" #: mod/admin.php:1368 msgid "" "Change base url for this server. Sends relocate message to all Friendica and" " Diaspora* contacts of all users." -msgstr "" +msgstr "Zmień bazowy adres URL dla tego serwera. Wysyła wiadomość o przeniesieniu do wszystkich kontaktów Friendica i Diaspora* wszystkich użytkowników." #: mod/admin.php:1370 msgid "RINO Encryption" -msgstr "" +msgstr "Szyfrowanie RINO" #: mod/admin.php:1370 msgid "Encryption layer between nodes." -msgstr "" +msgstr "Warstwa szyfrowania między węzłami." #: mod/admin.php:1370 msgid "Enabled" @@ -4712,13 +4712,13 @@ msgstr "Włącz" #: mod/admin.php:1372 msgid "Maximum number of parallel workers" -msgstr "" +msgstr "Maksymalna liczba równoległych pracowników" #: mod/admin.php:1372 msgid "" "On shared hosters set this to 2. On larger systems, values of 10 are great. " "Default value is 4." -msgstr "" +msgstr "Na współdzielonych hostach ustaw to na 2. W większych systemach wartości 10 są świetne. Domyślna wartość to 4." #: mod/admin.php:1373 msgid "Don't use 'proc_open' with the worker" @@ -4733,13 +4733,13 @@ msgstr "" #: mod/admin.php:1374 msgid "Enable fastlane" -msgstr "" +msgstr "Włącz Fastlane" #: mod/admin.php:1374 msgid "" "When enabed, the fastlane mechanism starts an additional worker if processes" " with higher priority are blocked by processes of lower priority." -msgstr "" +msgstr "Po włączeniu system Fastlane uruchamia dodatkowego pracownika, jeśli procesy o wyższym priorytecie są blokowane przez procesy o niższym priorytecie." #: mod/admin.php:1375 msgid "Enable frontend worker" @@ -4763,11 +4763,11 @@ msgstr "" msgid "" "Enables the receiving of public posts from the relay. They will be included " "in the search, subscribed tags and on the global community page." -msgstr "" +msgstr "Umożliwia odbieranie publicznych wiadomości z przekaźnika. Zostaną uwzględnione w tagach wyszukiwania, subskrybowanych i na stronie społeczności globalnej." #: mod/admin.php:1378 msgid "Relay server" -msgstr "" +msgstr "Serwer przekazujący" #: mod/admin.php:1378 msgid "" @@ -4805,7 +4805,7 @@ msgstr "tagi" #: mod/admin.php:1381 msgid "Server tags" -msgstr "" +msgstr "Serwer tagów" #: mod/admin.php:1381 msgid "Comma separated list of tags for the 'tags' subscription." @@ -4813,7 +4813,7 @@ msgstr "" #: mod/admin.php:1382 msgid "Allow user tags" -msgstr "" +msgstr "Pozwól na tagi użytkowników" #: mod/admin.php:1382 msgid "" @@ -4823,7 +4823,7 @@ msgstr "" #: mod/admin.php:1410 msgid "Update has been marked successful" -msgstr "" +msgstr "Aktualizacja została oznaczona jako udana" #: mod/admin.php:1417 #, php-format @@ -4861,7 +4861,7 @@ msgstr "Brak błędów aktualizacji." #: mod/admin.php:1462 msgid "Check database structure" -msgstr "" +msgstr "Sprawdź strukturę bazy danych" #: mod/admin.php:1467 msgid "Failed Updates" @@ -4874,11 +4874,11 @@ msgstr "" #: mod/admin.php:1469 msgid "Mark success (if update was manually applied)" -msgstr "" +msgstr "Oznacz sukces (jeśli aktualizacja została ręcznie zastosowana)" #: mod/admin.php:1470 msgid "Attempt to execute this update step automatically" -msgstr "" +msgstr "Spróbuj automatycznie wykonać ten krok aktualizacji" #: mod/admin.php:1509 #, php-format @@ -5039,11 +5039,11 @@ msgstr "Nazwa nowego użytkownika." #: mod/admin.php:1756 msgid "Nickname" -msgstr "" +msgstr "Pseudonim" #: mod/admin.php:1756 msgid "Nickname of the new user." -msgstr "" +msgstr "Pseudonim nowego użytkownika." #: mod/admin.php:1757 msgid "Email address of the new user." @@ -5081,7 +5081,7 @@ msgstr "Opiekun:" #: mod/admin.php:1899 msgid "Reload active addons" -msgstr "" +msgstr "Załaduj ponownie aktywne dodatki" #: mod/admin.php:1904 #, php-format @@ -5106,7 +5106,7 @@ msgstr "Przeładuj aktywne motywy" #: mod/admin.php:2157 #, php-format msgid "No themes found on the system. They should be placed in %1$s" -msgstr "" +msgstr "Nie znaleziono motywów w systemie. Powinny zostać umieszczone %1$s" #: mod/admin.php:2158 msgid "[Experimental]" @@ -5122,11 +5122,11 @@ msgstr "Zaktualizowano ustawienia logów." #: mod/admin.php:2215 msgid "PHP log currently enabled." -msgstr "" +msgstr "Dziennik PHP jest obecnie włączony." #: mod/admin.php:2217 msgid "PHP log currently disabled." -msgstr "" +msgstr "Dziennik PHP jest obecnie wyłączony." #: mod/admin.php:2226 msgid "Clear" @@ -5144,7 +5144,7 @@ msgstr "Plik logów" msgid "" "Must be writable by web server. Relative to your Friendica top-level " "directory." -msgstr "" +msgstr "Musi być zapisywalny przez serwer sieciowy. W stosunku do katalogu najwyższego poziomu Friendica." #: mod/admin.php:2232 msgid "Log level" @@ -5161,7 +5161,7 @@ msgid "" "'error_log' line is relative to the friendica top-level directory and must " "be writeable by the web server. The option '1' for 'log_errors' and " "'display_errors' is to enable these options, set to '0' to disable them." -msgstr "" +msgstr "Aby włączyć rejestrowanie błędów i ostrzeżeń PHP, możesz dodać następujące dane do pliku .htconfig.php instalacji. Nazwa pliku ustawiona w linii 'error_log' odnosi się do katalogu najwyższego poziomu friendiki i musi być zapisywalna przez serwer WWW. Opcja '1' dla 'log_errors' i 'display_errors' polega na włączeniu tych opcji, ustawieniu na '0', aby je wyłączyć." #: mod/admin.php:2266 #, php-format @@ -5192,11 +5192,11 @@ msgstr "" #: mod/admin.php:2370 msgid "Manage Additional Features" -msgstr "" +msgstr "Zarządzaj dodatkowymi funkcjami" #: mod/babel.php:22 msgid "Source input" -msgstr "" +msgstr "Źródło wejściowe" #: mod/babel.php:28 msgid "BBCode::convert (raw HTML(" @@ -5252,7 +5252,7 @@ msgstr "" #: mod/babel.php:108 msgid "Source text" -msgstr "" +msgstr "Tekst źródłowy" #: mod/babel.php:109 msgid "BBCode" @@ -5264,7 +5264,7 @@ msgstr "" #: mod/babel.php:111 msgid "HTML" -msgstr "" +msgstr "HTML" #: mod/cal.php:274 mod/events.php:391 view/theme/frio/theme.php:263 #: view/theme/frio/theme.php:267 src/Content/Nav.php:104 @@ -5274,7 +5274,7 @@ msgstr "Wydarzenia" #: mod/cal.php:275 mod/events.php:392 msgid "View" -msgstr "" +msgstr "Widok" #: mod/cal.php:276 mod/events.php:394 msgid "Previous" @@ -5305,19 +5305,19 @@ msgstr "dzień" #: mod/cal.php:284 mod/events.php:404 msgid "list" -msgstr "" +msgstr "lista" #: mod/cal.php:297 src/Model/User.php:204 msgid "User not found" -msgstr "" +msgstr "Użytkownik nie znaleziony" #: mod/cal.php:313 msgid "This calendar format is not supported" -msgstr "" +msgstr "Ten format kalendarza nie jest obsługiwany" #: mod/cal.php:315 msgid "No exportable data found" -msgstr "" +msgstr "Nie znaleziono danych do eksportu" #: mod/cal.php:332 msgid "calendar" @@ -5366,11 +5366,11 @@ msgstr "Kontakt został zarchiwizowany" #: mod/contacts.php:443 msgid "Contact has been unarchived" -msgstr "" +msgstr "Kontakt został przywrócony" #: mod/contacts.php:467 msgid "Drop contact" -msgstr "" +msgstr "Usuń kontakt" #: mod/contacts.php:470 mod/contacts.php:823 msgid "Do you really want to delete this contact?" @@ -5433,19 +5433,19 @@ msgid "" "Fetch information like preview pictures, title and teaser from the feed " "item. You can activate this if the feed doesn't contain much text. Keywords " "are taken from the meta header in the feed item and are posted as hash tags." -msgstr "" +msgstr "Pobieranie informacji, takich jak zdjęcia podglądu, tytuł i zwiastun z elementu kanału. Możesz to aktywować, jeśli plik danych nie zawiera dużo tekstu. Słowa kluczowe są pobierane z nagłówka meta w elemencie kanału i są publikowane jako znaczniki haszowania." #: mod/contacts.php:573 msgid "Fetch information" -msgstr "" +msgstr "Pobierz informacje" #: mod/contacts.php:574 msgid "Fetch keywords" -msgstr "" +msgstr "Pobierz słowa kluczowe" #: mod/contacts.php:575 msgid "Fetch information and keywords" -msgstr "" +msgstr "Pobierz informacje i słowa kluczowe" #: mod/contacts.php:599 mod/unfollow.php:100 msgid "Disconnect/Unfollow" @@ -5472,7 +5472,7 @@ msgstr "Informacja o kontakcie / Notka" #: mod/contacts.php:614 msgid "Their personal note" -msgstr "" +msgstr "Ich osobista uwaga" #: mod/contacts.php:616 msgid "Edit contact notes" @@ -5524,7 +5524,7 @@ msgstr "Obecnie zarchiwizowany" #: mod/contacts.php:645 msgid "Awaiting connection acknowledge" -msgstr "" +msgstr "Oczekiwanie na potwierdzenie połączenia" #: mod/contacts.php:646 msgid "" @@ -5533,21 +5533,21 @@ msgstr "Odpowiedzi/kliknięcia \"lubię to\" do twoich publicznych postów nadal #: mod/contacts.php:647 msgid "Notification for new posts" -msgstr "" +msgstr "Powiadomienie o nowych postach" #: mod/contacts.php:647 msgid "Send a notification of every new post of this contact" -msgstr "" +msgstr "Wyślij powiadomienie o każdym nowym poście tego kontaktu" #: mod/contacts.php:650 msgid "Blacklisted keywords" -msgstr "" +msgstr "Słowa kluczowe na czarnej liście" #: mod/contacts.php:650 msgid "" "Comma separated list of keywords that should not be converted to hashtags, " "when \"Fetch information and keywords\" is selected" -msgstr "" +msgstr "Rozdzielana przecinkami lista słów kluczowych, które nie powinny zostać przekonwertowane na hashtagi, gdy wybrana jest opcja 'Pobierz informacje i słowa kluczowe'" #: mod/contacts.php:662 src/Model/Profile.php:424 msgid "XMPP:" @@ -5555,7 +5555,7 @@ msgstr "" #: mod/contacts.php:667 msgid "Actions" -msgstr "" +msgstr "Akcja" #: mod/contacts.php:669 mod/contacts.php:855 view/theme/frio/theme.php:259 #: src/Content/Nav.php:100 src/Model/Profile.php:888 @@ -5564,7 +5564,7 @@ msgstr "Status" #: mod/contacts.php:670 msgid "Contact Settings" -msgstr "" +msgstr "Ustawienia kontaktów" #: mod/contacts.php:711 msgid "Suggestions" @@ -5640,7 +5640,7 @@ msgstr "Przywróć z archiwum" #: mod/contacts.php:832 msgid "Batch Actions" -msgstr "" +msgstr "Akcje wsadowe" #: mod/contacts.php:858 mod/follow.php:183 mod/unfollow.php:132 #: src/Model/Profile.php:891 @@ -5657,7 +5657,7 @@ msgstr "Zobacz wszystkie kontakty" #: mod/contacts.php:889 msgid "View all common friends" -msgstr "" +msgstr "Zobacz wszystkich popularnych znajomych" #: mod/contacts.php:898 msgid "Advanced Contact Settings" @@ -5677,7 +5677,7 @@ msgstr "jesteś fanem" #: mod/contacts.php:1013 msgid "Toggle Blocked status" -msgstr "" +msgstr "Przełącz na Zablokowany" #: mod/contacts.php:1021 msgid "Toggle Ignored status" @@ -5693,30 +5693,30 @@ msgstr "Usuń kontakt" #: mod/delegate.php:37 msgid "Parent user not found." -msgstr "" +msgstr "Nie znaleziono użytkownika nadrzędnego." #: mod/delegate.php:144 msgid "No parent user" -msgstr "" +msgstr "Brak nadrzędnego użytkownika" #: mod/delegate.php:159 msgid "Parent Password:" -msgstr "" +msgstr "Hasło nadrzędne:" #: mod/delegate.php:159 msgid "" "Please enter the password of the parent account to legitimize your request." -msgstr "" +msgstr "Wprowadź hasło konta nadrzędnego, aby legalizować swoje żądanie." #: mod/delegate.php:164 msgid "Parent User" -msgstr "" +msgstr "Użytkownik nadrzędny" #: mod/delegate.php:167 msgid "" "Parent users have total control about this account, including the account " "settings. Please double check whom you give this access." -msgstr "" +msgstr "Użytkownicy nadrzędni mają pełną kontrolę nad tym kontem, w tym także ustawienia konta. Sprawdź dokładnie, komu przyznasz ten dostęp." #: mod/delegate.php:169 src/Content/Nav.php:204 msgid "Delegate Page Management" @@ -5724,22 +5724,22 @@ msgstr "" #: mod/delegate.php:170 msgid "Delegates" -msgstr "" +msgstr "Oddeleguj" #: mod/delegate.php:172 msgid "" "Delegates are able to manage all aspects of this account/page except for " "basic account settings. Please do not delegate your personal account to " "anybody that you do not trust completely." -msgstr "" +msgstr "Delegaci mogą zarządzać wszystkimi aspektami tego konta/strony, z wyjątkiem podstawowych ustawień konta. Nie przekazuj swojego konta osobistego nikomu, komu nie ufasz całkowicie." #: mod/delegate.php:173 msgid "Existing Page Delegates" -msgstr "" +msgstr "Obecni delegaci stron" #: mod/delegate.php:175 msgid "Potential Delegates" -msgstr "" +msgstr "Potencjalni delegaci" #: mod/delegate.php:178 msgid "Add" @@ -5767,7 +5767,7 @@ msgstr "Znajdź na tej stronie" #: mod/directory.php:207 msgid "Results for:" -msgstr "" +msgstr "Wyniki dla:" #: mod/directory.php:209 msgid "Site Directory" @@ -5785,7 +5785,7 @@ msgstr "" #: mod/dirfind.php:60 #, php-format msgid "Forum Search - %s" -msgstr "" +msgstr "Przeszukiwanie forum - %s" #: mod/events.php:105 mod/events.php:107 msgid "Event can not end before it has started." @@ -5805,7 +5805,7 @@ msgstr "Szczegóły wydarzenia" #: mod/events.php:507 msgid "Starting date and Title are required." -msgstr "" +msgstr "Data rozpoczęcia i tytuł są wymagane." #: mod/events.php:508 mod/events.php:509 msgid "Event Starts:" @@ -5849,19 +5849,19 @@ msgstr "Nie udało się usunąć wydarzenia" #: mod/events.php:554 msgid "Event removed" -msgstr "" +msgstr "Wydarzenie zostało usunięte" #: mod/feedtest.php:20 msgid "You must be logged in to use this module" -msgstr "" +msgstr "Musisz być zalogowany, aby korzystać z tego modułu" #: mod/feedtest.php:48 msgid "Source URL" -msgstr "" +msgstr "Źródłowy adres URL" #: mod/follow.php:45 msgid "The contact could not be added." -msgstr "" +msgstr "Nie można dodać kontaktu." #: mod/follow.php:73 msgid "You already added this contact." @@ -5957,7 +5957,7 @@ msgstr "Ze względów bezpieczeństwa hasło nie może być puste" #: mod/install.php:240 msgid "Database Name" -msgstr "Baza danych - Nazwa" +msgstr "Nazwa bazy danych" #: mod/install.php:241 mod/install.php:281 msgid "Site administrator email address" @@ -5967,7 +5967,7 @@ msgstr "Adres e-mail administratora strony" msgid "" "Your account email address must match this in order to use the web admin " "panel." -msgstr "" +msgstr "Adres e-mail konta musi pasować do tego, aby móc korzystać z panelu administracyjnego." #: mod/install.php:245 mod/install.php:284 msgid "Please select a default timezone for your website" @@ -5997,17 +5997,17 @@ msgid "" "you will not be able to run the background processing. See 'Setup the worker'" -msgstr "" +msgstr "Jeśli nie masz zainstalowanej na serwerze wersji PHP z wiersza poleceń, nie będziesz mógł uruchomić przetwarzania w tle. Zobacz 'Konfiguracja pracownika'" #: mod/install.php:330 msgid "PHP executable path" -msgstr "" +msgstr "Ścieżka wykonywalna PHP" #: mod/install.php:330 msgid "" "Enter full path to php executable. You can leave this blank to continue the " "installation." -msgstr "" +msgstr "Wprowadź pełną ścieżkę do pliku wykonywalnego php. Możesz pozostawić to pole puste, aby kontynuować instalację." #: mod/install.php:335 msgid "Command line PHP" @@ -6023,7 +6023,7 @@ msgstr "Znaleziono wersje PHP:" #: mod/install.php:347 msgid "PHP cli binary" -msgstr "" +msgstr "PHP cli binarny" #: mod/install.php:358 msgid "" @@ -6123,15 +6123,15 @@ msgstr "Błąd: moduł PHP mb_string jest wymagany ale nie jest zainstalowany" #: mod/install.php:437 msgid "Error: iconv PHP module required but not installed." -msgstr "" +msgstr "Błąd: wymagany moduł PHP iconv, ale nie zainstalowany." #: mod/install.php:441 msgid "Error: POSIX PHP module required but not installed." -msgstr "" +msgstr "Błąd: wymagany moduł POSIX PHP, ale nie zainstalowany." #: mod/install.php:451 msgid "Error, XML PHP module required but not installed." -msgstr "" +msgstr "Błąd, wymagany moduł XML PHP, ale nie zainstalowany." #: mod/install.php:463 msgid "" @@ -6143,19 +6143,19 @@ msgstr "Instalator WWW musi być w stanie utworzyć plik o nazwie \". Htconfig.p msgid "" "This is most often a permission setting, as the web server may not be able " "to write files in your folder - even if you can." -msgstr "" +msgstr "Jest to najczęściej ustawienie uprawnień, ponieważ serwer sieciowy może nie być w stanie zapisywać plików w folderze - nawet jeśli możesz." #: mod/install.php:465 msgid "" "At the end of this procedure, we will give you a text to save in a file " "named .htconfig.php in your Friendica top folder." -msgstr "" +msgstr "Pod koniec tej procedury podamy Ci tekst do zapisania w pliku o nazwie .htconfig.php w twoim górnym folderze Friendica." #: mod/install.php:466 msgid "" "You can alternatively skip this procedure and perform a manual installation." " Please see the file \"INSTALL.txt\" for instructions." -msgstr "" +msgstr "Alternatywnie można pominąć tę procedurę i wykonać ręczną instalację. Proszę zobaczyć plik 'INSTALL.txt' z instrukcjami." #: mod/install.php:469 msgid ".htconfig.php is writable" @@ -6172,13 +6172,13 @@ msgid "" "In order to store these compiled templates, the web server needs to have " "write access to the directory view/smarty3/ under the Friendica top level " "folder." -msgstr "" +msgstr "Aby przechowywać te skompilowane szablony, serwer WWW musi mieć dostęp do zapisu do katalogu view/smarty3/ w folderze najwyższego poziomu Friendica." #: mod/install.php:481 msgid "" "Please ensure that the user that your web server runs as (e.g. www-data) has" " write access to this folder." -msgstr "" +msgstr "Upewnij się, że użytkownik, na którym działa serwer WWW (np. www-data), ma prawo do zapisu do tego folderu." #: mod/install.php:482 msgid "" @@ -6201,15 +6201,15 @@ msgstr "" #: mod/install.php:522 msgid "ImageMagick PHP extension is not installed" -msgstr "" +msgstr "Rozszerzenie PHP ImageMagick nie jest zainstalowane" #: mod/install.php:524 msgid "ImageMagick PHP extension is installed" -msgstr "" +msgstr "Rozszerzenie PHP ImageMagick jest zainstalowane" #: mod/install.php:526 msgid "ImageMagick supports GIF" -msgstr "" +msgstr "ImageMagick obsługuje GIF" #: mod/install.php:533 msgid "" @@ -6297,7 +6297,7 @@ msgstr "nie udało się" #: mod/ostatus_subscribe.php:83 src/Object/Post.php:279 msgid "ignored" -msgstr "" +msgstr "Ignoruj" #: mod/profile_photo.php:55 msgid "Image uploaded but image cropping failed." @@ -6377,11 +6377,11 @@ msgstr "Nazwa Profilu jest wymagana" #: mod/profiles.php:346 msgid "Marital Status" -msgstr "" +msgstr "Stan cywilny" #: mod/profiles.php:350 msgid "Romantic Partner" -msgstr "" +msgstr "Romantyczny partner" #: mod/profiles.php:362 msgid "Work/Employment" @@ -6405,7 +6405,7 @@ msgstr "Orientacja seksualna" #: mod/profiles.php:381 msgid "XMPP" -msgstr "" +msgstr "XMPP" #: mod/profiles.php:385 msgid "Homepage" @@ -6448,7 +6448,7 @@ msgstr "" #: mod/profiles.php:632 msgid "Hide contacts and friends:" -msgstr "" +msgstr "Ukryj kontakty i znajomych:" #: mod/profiles.php:637 msgid "Hide your contact/friend list from viewers of this profile?" @@ -6456,11 +6456,11 @@ msgstr "Czy chcesz ukryć listę kontaktów dla przeglądających to konto?" #: mod/profiles.php:657 msgid "Show more profile fields:" -msgstr "" +msgstr "Pokaż więcej pól profilu:" #: mod/profiles.php:669 msgid "Profile Actions" -msgstr "" +msgstr "Akcje profilowe" #: mod/profiles.php:670 msgid "Edit Profile Details" @@ -6492,11 +6492,11 @@ msgstr "Usuń ten profil" #: mod/profiles.php:679 msgid "Basic information" -msgstr "" +msgstr "Podstawowe informacje" #: mod/profiles.php:680 msgid "Profile picture" -msgstr "" +msgstr "Zdjęcie profilowe" #: mod/profiles.php:682 msgid "Preferences" @@ -6504,15 +6504,15 @@ msgstr "Preferencje" #: mod/profiles.php:683 msgid "Status information" -msgstr "" +msgstr "Informacje o stanie" #: mod/profiles.php:684 msgid "Additional information" -msgstr "" +msgstr "Dodatkowe informacje" #: mod/profiles.php:687 msgid "Relation" -msgstr "" +msgstr "Relacje" #: mod/profiles.php:688 src/Util/Temporal.php:81 src/Util/Temporal.php:83 msgid "Miscellaneous" @@ -6528,7 +6528,7 @@ msgstr " Stan :" #: mod/profiles.php:693 src/Model/Profile.php:782 msgid "Sexual Preference:" -msgstr "Interesują mnie:" +msgstr "Preferencje seksualne:" #: mod/profiles.php:694 msgid "Example: fishing photography software" @@ -6562,7 +6562,7 @@ msgstr "Miejscowość/Miasto :" #: mod/profiles.php:708 msgid "Region/State:" -msgstr "Region / Stan :" +msgstr "Region/Państwo:" #: mod/profiles.php:709 msgid "Postal/Zip Code:" @@ -6640,7 +6640,7 @@ msgstr "Lubi:" #: mod/profiles.php:726 src/Model/Profile.php:818 msgid "Dislikes:" -msgstr "" +msgstr "Nie lubi:" #: mod/profiles.php:727 msgid "Musical interests" @@ -6704,7 +6704,7 @@ msgstr "Pokaz" #: mod/settings.php:80 mod/settings.php:841 msgid "Social Networks" -msgstr "" +msgstr "Portale społecznościowe" #: mod/settings.php:94 src/Content/Nav.php:204 msgid "Delegations" @@ -6732,25 +6732,25 @@ msgstr "Zaktualizowano ustawienia email." #: mod/settings.php:300 msgid "Features updated" -msgstr "" +msgstr "Funkcje zaktualizowane" #: mod/settings.php:372 msgid "Relocate message has been send to your contacts" -msgstr "" +msgstr "Przeniesienie wiadomości zostało wysłane do Twoich kontaktów" #: mod/settings.php:384 src/Model/User.php:325 msgid "Passwords do not match. Password unchanged." -msgstr "Hasło nie pasuje. Hasło nie zmienione." +msgstr "Hasła nie pasują do siebie. Hasło niezmienione." #: mod/settings.php:389 msgid "Empty passwords are not allowed. Password unchanged." -msgstr "Brak hasła niedozwolony. Hasło nie zmienione." +msgstr "Puste hasła są niedozwolone. Hasło niezmienione." #: mod/settings.php:394 msgid "" "The new password has been exposed in a public data dump, please choose " "another." -msgstr "" +msgstr "Nowe hasło zostało ujawnione w publicznym zrzucie danych, wybierz inne." #: mod/settings.php:400 msgid "Wrong password." @@ -6782,11 +6782,11 @@ msgstr "Niepoprawny e-mail." #: mod/settings.php:519 msgid "Cannot change to that email." -msgstr "" +msgstr "Nie można zmienić tego e-maila." #: mod/settings.php:572 msgid "Private forum has no privacy permissions. Using default privacy group." -msgstr "" +msgstr "Prywatne forum nie ma uprawnień do prywatności. Użyj domyślnej grupy prywatnej." #: mod/settings.php:575 msgid "Private forum has no privacy permissions and no default privacy group." @@ -6802,11 +6802,11 @@ msgstr "Dodaj aplikacje" #: mod/settings.php:678 mod/settings.php:704 msgid "Consumer Key" -msgstr "Klucz konsumenta" +msgstr "Klucz klienta" #: mod/settings.php:679 mod/settings.php:705 msgid "Consumer Secret" -msgstr "Sekret konsumenta" +msgstr "Sekret klienta" #: mod/settings.php:680 mod/settings.php:706 msgid "Redirect" @@ -6842,7 +6842,7 @@ msgstr "Odwołaj upoważnienie" #: mod/settings.php:752 msgid "No Addon settings configured" -msgstr "" +msgstr "Brak skonfigurowanych ustawień Dodatków" #: mod/settings.php:761 msgid "Addon Settings" @@ -6850,7 +6850,7 @@ msgstr "Ustawienia Dodatków" #: mod/settings.php:782 msgid "Additional Features" -msgstr "" +msgstr "Dodatkowe funkcje" #: mod/settings.php:804 src/Content/ContactSelector.php:83 msgid "Diaspora" @@ -6890,33 +6890,33 @@ msgid "" "Normally the system tries to find the best link to add to shortened posts. " "If this option is enabled then every shortened post will always point to the" " original friendica post." -msgstr "" +msgstr "Zwykle system próbuje znaleźć najlepszy link do dodania do skróconych postów. Jeśli ta opcja jest włączona, każdy skrócony wpis zawsze wskazuje oryginalny post znajomej osoby." #: mod/settings.php:848 msgid "Automatically follow any GNU Social (OStatus) followers/mentioners" -msgstr "" +msgstr "Automatycznie podążaj za wszystkimi obserwatorami/rzecznikami GNU Społeczności (OStatus)" #: mod/settings.php:848 msgid "" "If you receive a message from an unknown OStatus user, this option decides " "what to do. If it is checked, a new contact will be created for every " "unknown user." -msgstr "" +msgstr "Jeśli otrzymasz wiadomość od nieznanego użytkownika OStatus, ta opcja decyduje, co zrobić. Jeśli zostanie zaznaczone, dla każdego nieznanego użytkownika zostanie utworzony nowy kontakt." #: mod/settings.php:849 msgid "Default group for OStatus contacts" -msgstr "" +msgstr "Domyślna grupa dla kontaktów OStatus" #: mod/settings.php:850 msgid "Your legacy GNU Social account" -msgstr "" +msgstr "Twoje starsze konto społecznościowe GNU" #: mod/settings.php:850 msgid "" "If you enter your old GNU Social/Statusnet account name here (in the format " "user@domain.tld), your contacts will be added automatically. The field will " "be emptied when done." -msgstr "" +msgstr "Jeśli podasz swoją starą nazwę konta GNU Social/Statusnet tutaj (w formacie user@domain.tld), twoje kontakty zostaną dodane automatycznie. Pole zostanie opróżnione po zakończeniu." #: mod/settings.php:853 msgid "Repair OStatus subscriptions" @@ -6987,12 +6987,12 @@ msgstr "Przenieś do folderu:" #: mod/settings.php:912 #, php-format msgid "%s - (Unsupported)" -msgstr "" +msgstr "%s - (Nieobsługiwane)" #: mod/settings.php:914 #, php-format msgid "%s - (Experimental)" -msgstr "" +msgstr "%s- (Eksperymentalne)" #: mod/settings.php:957 msgid "Display Settings" @@ -7022,7 +7022,7 @@ msgstr "Odświeżaj stronę co xx sekund" #: mod/settings.php:966 msgid "Minimum of 10 seconds. Enter -1 to disable it." -msgstr "" +msgstr "Minimum 10 sekund. Wprowadź -1, aby go wyłączyć." #: mod/settings.php:967 msgid "Number of items to display per page:" @@ -7034,7 +7034,7 @@ msgstr "Maksymalnie 100 elementów" #: mod/settings.php:968 msgid "Number of items to display per page when viewed from mobile device:" -msgstr "" +msgstr "Liczba elementów do wyświetlenia na stronie podczas przeglądania z urządzenia mobilnego:" #: mod/settings.php:969 msgid "Don't show emoticons" @@ -7046,7 +7046,7 @@ msgstr "Kalendarz" #: mod/settings.php:971 msgid "Beginning of week:" -msgstr "" +msgstr "Początek tygodnia:" #: mod/settings.php:972 msgid "Don't show notices" @@ -7058,7 +7058,7 @@ msgstr "Nieskończone przewijanie" #: mod/settings.php:974 msgid "Automatic updates only at the top of the network page" -msgstr "" +msgstr "Automatyczne aktualizacje tylko u góry strony sieci" #: mod/settings.php:974 msgid "" @@ -7078,7 +7078,7 @@ msgstr "" #: mod/settings.php:976 msgid "Smart Threading" -msgstr "" +msgstr "Inteligentne gwintowanie" #: mod/settings.php:976 msgid "" @@ -7088,15 +7088,15 @@ msgstr "" #: mod/settings.php:978 msgid "General Theme Settings" -msgstr "" +msgstr "Ogólne ustawienia motywu" #: mod/settings.php:979 msgid "Custom Theme Settings" -msgstr "" +msgstr "Niestandardowe ustawienia motywów" #: mod/settings.php:980 msgid "Content Settings" -msgstr "" +msgstr "Ustawienia zawartości" #: mod/settings.php:981 view/theme/duepuntozero/config.php:73 #: view/theme/frio/config.php:115 view/theme/quattro/config.php:75 @@ -7110,11 +7110,11 @@ msgstr "Nie można znaleźć Twojego profilu. Skontaktuj się z administratorem. #: mod/settings.php:1042 msgid "Account Types" -msgstr "" +msgstr "Rodzaje kont" #: mod/settings.php:1043 msgid "Personal Page Subtypes" -msgstr "" +msgstr "Podtypy osobistych stron" #: mod/settings.php:1044 msgid "Community Forum Subtypes" @@ -7158,13 +7158,13 @@ msgstr "" #: mod/settings.php:1067 msgid "Normal Account Page" -msgstr "" +msgstr "Normalna strona konta" #: mod/settings.php:1068 msgid "" "Account for a regular personal profile that requires manual approval of " "\"Friends\" and \"Followers\"." -msgstr "" +msgstr "Konto dla zwykłego profilu osobistego, który wymaga ręcznej zgody \"Przyjaciół\" i \"Obserwatorów\"." #: mod/settings.php:1071 msgid "Soapbox Page" @@ -7174,33 +7174,33 @@ msgstr "" msgid "" "Account for a public profile that automatically approves contact requests as" " \"Followers\"." -msgstr "" +msgstr "Konto dla profilu publicznego, który automatycznie zatwierdza prośby o kontakt jako \"Obserwatorzy\"." #: mod/settings.php:1075 msgid "Public Forum" -msgstr "" +msgstr "Forum publiczne" #: mod/settings.php:1076 msgid "Automatically approves all contact requests." -msgstr "" +msgstr "Automatycznie zatwierdza wszystkie prośby o kontakt." #: mod/settings.php:1079 msgid "Automatic Friend Page" -msgstr "" +msgstr "Automatyczna strona znajomego" #: mod/settings.php:1080 msgid "" "Account for a popular profile that automatically approves contact requests " "as \"Friends\"." -msgstr "" +msgstr "Konto popularnego profilu, które automatycznie zatwierdza prośby o kontakt jako \"Przyjaciele\"." #: mod/settings.php:1083 msgid "Private Forum [Experimental]" -msgstr "" +msgstr "Prywatne Forum [Eksperymentalne]" #: mod/settings.php:1084 msgid "Requires manual approval of contact requests." -msgstr "" +msgstr "Wymaga ręcznego zatwierdzania żądań kontaktów." #: mod/settings.php:1095 msgid "OpenID:" @@ -7208,11 +7208,11 @@ msgstr "OpenID:" #: mod/settings.php:1095 msgid "(Optional) Allow this OpenID to login to this account." -msgstr "Przeznacz to OpenID do logowania się na to konto." +msgstr "(Opcjonalnie) Pozwól temu OpenID zalogować się na to konto." #: mod/settings.php:1103 msgid "Publish your default profile in your local site directory?" -msgstr "Czy publikować Twój profil w lokalnym katalogu tej instancji?" +msgstr "Opublikować swój domyślny profil w swoim lokalnym katalogu stron?" #: mod/settings.php:1103 #, php-format @@ -7231,7 +7231,7 @@ msgid "" "Your profile will be published in this node's local " "directory. Your profile details may be publicly visible depending on the" " system settings." -msgstr "" +msgstr "Twój profil zostanie opublikowany w lokalnym katalogu tego węzła. Dane Twojego profilu mogą być publicznie widoczne w zależności od ustawień systemu." #: mod/settings.php:1116 msgid "Hide your contact/friend list from viewers of your default profile?" @@ -7242,18 +7242,18 @@ msgid "" "Your contact list won't be shown in your default profile page. You can " "decide to show your contact list separately for each additional profile you " "create" -msgstr "" +msgstr "Twoja lista kontaktów nie będzie wyświetlana na domyślnej stronie profilu. Możesz zdecydować o wyświetleniu listy kontaktów osobno dla każdego tworzonego dodatkowego profilu" #: mod/settings.php:1120 msgid "Hide your profile details from anonymous viewers?" -msgstr "" +msgstr "Ukryj dane swojego profilu przed anonimowymi widzami?" #: mod/settings.php:1120 msgid "" "Anonymous visitors will only see your profile picture, your display name and" " the nickname you are using on your profile page. Disables posting public " "messages to Diaspora and other networks." -msgstr "" +msgstr "Anonimowi użytkownicy zobaczą tylko Twoje zdjęcie profilowe, swoją wyświetlaną nazwę i pseudonim, którego używasz na stronie profilu. Wyłącza wysyłanie publicznych wiadomości do Diaspory i innych sieci." #: mod/settings.php:1124 msgid "Allow friends to post to your profile page?" @@ -7263,7 +7263,7 @@ msgstr "Zezwól na dodawanie postów na twoim profilu przez znajomych" msgid "" "Your contacts may write posts on your profile wall. These posts will be " "distributed to your contacts" -msgstr "" +msgstr "Twoi znajomi mogą pisać posty na ścianie Twojego profilu. Te posty zostaną przesłane do Twoich kontaktów" #: mod/settings.php:1128 msgid "Allow friends to tag your posts?" @@ -7271,26 +7271,26 @@ msgstr "Zezwól na oznaczanie twoich postów przez znajomych" #: mod/settings.php:1128 msgid "Your contacts can add additional tags to your posts." -msgstr "" +msgstr "Twoje kontakty mogą dodawać do tagów dodatkowe tagi." #: mod/settings.php:1132 msgid "Allow us to suggest you as a potential friend to new members?" -msgstr "" +msgstr "Pozwól nam zasugerować Cię jako potencjalnego przyjaciela dla nowych członków?" #: mod/settings.php:1132 msgid "" "If you like, Friendica may suggest new members to add you as a contact." -msgstr "" +msgstr "Jeśli chcesz, Friendica może zaproponować nowym członkom dodanie Cię jako kontakt." #: mod/settings.php:1136 msgid "Permit unknown people to send you private mail?" -msgstr "" +msgstr "Zezwolić nieznanym osobom na wysyłanie prywatnych wiadomości?" #: mod/settings.php:1136 msgid "" "Friendica network users may send you private messages even if they are not " "in your contact list." -msgstr "" +msgstr "Użytkownicy sieci w serwisie Friendica mogą wysyłać prywatne wiadomości, nawet jeśli nie znajdują się one na liście kontaktów." #: mod/settings.php:1140 msgid "Profile is not published." @@ -7303,7 +7303,7 @@ msgstr "" #: mod/settings.php:1153 msgid "Automatically expire posts after this many days:" -msgstr "" +msgstr "Automatycznie wygasaj posty po tych wielu dniach:" #: mod/settings.php:1153 msgid "If empty, posts will not expire. Expired posts will be deleted" @@ -7311,11 +7311,11 @@ msgstr "Pole puste, wiadomość nie wygaśnie. Niezapisane wpisy zostaną usuni #: mod/settings.php:1154 msgid "Advanced expiration settings" -msgstr "" +msgstr "Zaawansowane ustawienia wygasania" #: mod/settings.php:1155 msgid "Advanced Expiration" -msgstr "" +msgstr "Zaawansowane wygasanie" #: mod/settings.php:1156 msgid "Expire posts:" @@ -7327,11 +7327,11 @@ msgstr "Wygasające notatki osobiste:" #: mod/settings.php:1158 msgid "Expire starred posts:" -msgstr "" +msgstr "Wygasaj posty oznaczone gwiazdką:" #: mod/settings.php:1159 msgid "Expire photos:" -msgstr "Wygasające zdjęcia:" +msgstr "Wygasanie zdjęć:" #: mod/settings.php:1160 msgid "Only expire posts by others:" @@ -7355,7 +7355,7 @@ msgstr "Obecne hasło:" #: mod/settings.php:1201 mod/settings.php:1202 msgid "Your current password to confirm the changes" -msgstr "" +msgstr "Twoje obecne hasło, potwierdź zmiany" #: mod/settings.php:1202 msgid "Password:" @@ -7379,13 +7379,13 @@ msgstr "Twoja strefa czasowa:" #: mod/settings.php:1210 msgid "Your Language:" -msgstr "" +msgstr "Twój język:" #: mod/settings.php:1210 msgid "" "Set the language we use to show you friendica interface and to send you " "emails" -msgstr "" +msgstr "Ustaw język, którego używamy, aby pokazać interfejs użytkownika i wysłać Ci e-maile" #: mod/settings.php:1211 msgid "Default Post Location:" @@ -7417,19 +7417,19 @@ msgstr "(kliknij by otworzyć/zamknąć)" #: mod/settings.php:1229 msgid "Default Private Post" -msgstr "" +msgstr "Domyślny Prywatny Wpis" #: mod/settings.php:1230 msgid "Default Public Post" -msgstr "" +msgstr "Domyślny Publiczny Post" #: mod/settings.php:1234 msgid "Default Permissions for New Posts" -msgstr "" +msgstr "Uprawnienia domyślne dla nowych postów" #: mod/settings.php:1246 msgid "Maximum private messages per day from unknown people:" -msgstr "" +msgstr "Maksymalna liczba wiadomości prywatnych dziennie od nieznanych ludzi:" #: mod/settings.php:1249 msgid "Notification Settings" @@ -7437,11 +7437,11 @@ msgstr "Ustawienia powiadomień" #: mod/settings.php:1250 msgid "By default post a status message when:" -msgstr "" +msgstr "Domyślnie publikuj komunikat o stanie, gdy:" #: mod/settings.php:1251 msgid "accepting a friend request" -msgstr "" +msgstr "przyjmowanie prośby o dodanie do znajomych" #: mod/settings.php:1252 msgid "joining a forum/community" @@ -7465,7 +7465,7 @@ msgstr "Dane zatwierdzone" #: mod/settings.php:1257 msgid "Someone writes on your profile wall" -msgstr "Ktoś pisze na twojej ścianie profilowej" +msgstr "Ktoś pisze na twoim profilu" #: mod/settings.php:1258 msgid "Someone writes a followup comment" @@ -7481,7 +7481,7 @@ msgstr "Otrzymane propozycje znajomych" #: mod/settings.php:1261 msgid "You are tagged in a post" -msgstr "Jesteś oznaczony w poście" +msgstr "Jesteś oznaczony tagiem w poście" #: mod/settings.php:1262 msgid "You are poked/prodded/etc. in a post" @@ -7489,7 +7489,7 @@ msgstr "" #: mod/settings.php:1264 msgid "Activate desktop notifications" -msgstr "" +msgstr "Aktywuj powiadomienia na pulpicie" #: mod/settings.php:1264 msgid "Show desktop popup on new notifications" @@ -7505,7 +7505,7 @@ msgstr "" #: mod/settings.php:1270 msgid "Show detailled notifications" -msgstr "" +msgstr "Pokaż szczegółowe powiadomienia" #: mod/settings.php:1272 msgid "" @@ -7523,13 +7523,13 @@ msgstr "" #: mod/settings.php:1278 msgid "Relocate" -msgstr "" +msgstr "Przeniesienie" #: mod/settings.php:1279 msgid "" "If you have moved this profile from another server, and some of your " "contacts don't receive your updates, try pushing this button." -msgstr "" +msgstr "Jeśli ten profil został przeniesiony z innego serwera, a niektóre z Twoich kontaktów nie otrzymają aktualizacji, spróbuj nacisnąć ten przycisk." #: mod/settings.php:1280 msgid "Resend relocate message to contacts" @@ -7589,7 +7589,7 @@ msgstr "" #: view/theme/frio/php/Image.php:25 msgid "Will repeat your image to fill the background." -msgstr "" +msgstr "Powtarza twój obraz, aby wypełnić tło." #: view/theme/frio/php/Image.php:27 msgid "Stretch" @@ -7597,27 +7597,27 @@ msgstr "" #: view/theme/frio/php/Image.php:27 msgid "Will stretch to width/height of the image." -msgstr "" +msgstr "Rozciągnie się do szerokości/wysokości obrazu." #: view/theme/frio/php/Image.php:29 msgid "Resize fill and-clip" -msgstr "" +msgstr "Zmień rozmiar wypełnienia i klipu" #: view/theme/frio/php/Image.php:29 msgid "Resize to fill and retain aspect ratio." -msgstr "" +msgstr "Zmień rozmiar, aby wypełnić i zachować proporcje." #: view/theme/frio/php/Image.php:31 msgid "Resize best fit" -msgstr "" +msgstr "Zmień rozmiar, aby najlepiej dopasować" #: view/theme/frio/php/Image.php:31 msgid "Resize to best fit and retain aspect ratio." -msgstr "" +msgstr "Zmień rozmiar, aby jak najlepiej dopasować i zachować proporcje." #: view/theme/frio/config.php:97 msgid "Default" -msgstr "" +msgstr "Domyślne" #: view/theme/frio/config.php:109 msgid "Note" @@ -7625,7 +7625,7 @@ msgstr "Uwaga" #: view/theme/frio/config.php:109 msgid "Check image permissions if all users are allowed to visit the image" -msgstr "" +msgstr "Sprawdź uprawnienia do obrazu, jeśli wszyscy użytkownicy mogą odwiedzać obraz" #: view/theme/frio/config.php:116 msgid "Select scheme" @@ -7633,39 +7633,39 @@ msgstr "Wybierz schemat" #: view/theme/frio/config.php:117 msgid "Navigation bar background color" -msgstr "" +msgstr "Kolor tła paska nawigacyjnego" #: view/theme/frio/config.php:118 msgid "Navigation bar icon color " -msgstr "" +msgstr "Kolor ikony paska nawigacyjnego" #: view/theme/frio/config.php:119 msgid "Link color" -msgstr "" +msgstr "Kolor łączy" #: view/theme/frio/config.php:120 msgid "Set the background color" -msgstr "" +msgstr "Ustaw kolor tła" #: view/theme/frio/config.php:121 msgid "Content background opacity" -msgstr "" +msgstr "Nieprzezroczystość tła treści" #: view/theme/frio/config.php:122 msgid "Set the background image" -msgstr "" +msgstr "Ustaw obraz tła" #: view/theme/frio/config.php:127 msgid "Login page background image" -msgstr "" +msgstr "Obraz tła strony logowania" #: view/theme/frio/config.php:130 msgid "Login page background color" -msgstr "" +msgstr "Kolor tła strony logowania" #: view/theme/frio/config.php:130 msgid "Leave background image and color empty for theme defaults" -msgstr "" +msgstr "Pozostaw obraz tła i kolor pusty dla domyślnych ustawień kompozycji" #: view/theme/frio/theme.php:238 msgid "Guest" @@ -7673,7 +7673,7 @@ msgstr "Gość" #: view/theme/frio/theme.php:243 msgid "Visitor" -msgstr "" +msgstr "Odwiedzający" #: view/theme/frio/theme.php:256 src/Content/Nav.php:97 #: src/Module/Login.php:311 @@ -7704,7 +7704,7 @@ msgstr "Filmy" #: view/theme/frio/theme.php:262 src/Content/Nav.php:103 msgid "Your videos" -msgstr "" +msgstr "Twoje filmy" #: view/theme/frio/theme.php:263 src/Content/Nav.php:104 msgid "Your events" @@ -7749,15 +7749,15 @@ msgstr "Zestaw kolorów" #: view/theme/quattro/config.php:78 msgid "Posts font size" -msgstr "" +msgstr "Rozmiar czcionki postów" #: view/theme/quattro/config.php:79 msgid "Textareas font size" -msgstr "" +msgstr "Rozmiar czcionki Textareas" #: view/theme/vier/config.php:75 msgid "Comma separated list of helper forums" -msgstr "" +msgstr "Lista pomocników oddzielona przecinkami" #: view/theme/vier/config.php:115 src/Core/ACL.php:309 msgid "don't show" @@ -7769,15 +7769,15 @@ msgstr "pokaż" #: view/theme/vier/config.php:122 msgid "Set style" -msgstr "" +msgstr "Ustaw styl" #: view/theme/vier/config.php:123 msgid "Community Pages" -msgstr "Strony społecznościowe" +msgstr "Strony społeczności" #: view/theme/vier/config.php:124 view/theme/vier/theme.php:150 msgid "Community Profiles" -msgstr "" +msgstr "Profile społeczności" #: view/theme/vier/config.php:125 msgid "Help or @NewHere ?" @@ -7797,7 +7797,7 @@ msgstr "Ostatni użytkownicy" #: view/theme/vier/theme.php:200 msgid "Local Directory" -msgstr "" +msgstr "Katalog lokalny" #: view/theme/vier/theme.php:202 src/Content/Widget.php:65 msgid "Similar Interests" @@ -7809,11 +7809,11 @@ msgstr "Zaproś znajomych" #: view/theme/vier/theme.php:256 src/Content/ForumManager.php:127 msgid "External link to forum" -msgstr "" +msgstr "Zewnętrzny link do forum" #: view/theme/vier/theme.php:292 msgid "Quick Start" -msgstr "" +msgstr "Szybki start" #: src/Core/UserImport.php:104 msgid "Error decoding account file" @@ -7821,7 +7821,7 @@ msgstr "Błąd podczas odczytu pliku konta" #: src/Core/UserImport.php:110 msgid "Error! No version data in file! This is not a Friendica account file?" -msgstr "" +msgstr "Błąd! Brak danych wersji w pliku! To nie jest plik konta Friendica?" #: src/Core/UserImport.php:118 #, php-format @@ -7830,11 +7830,11 @@ msgstr "Użytkownik '%s' już istnieje na tym serwerze!" #: src/Core/UserImport.php:151 msgid "User creation error" -msgstr "" +msgstr "Błąd tworzenia użytkownika" #: src/Core/UserImport.php:169 msgid "User profile creation error" -msgstr "" +msgstr "Błąd tworzenia profilu użytkownika" #: src/Core/UserImport.php:213 #, php-format @@ -7843,19 +7843,19 @@ msgid_plural "%d contacts not imported" msgstr[0] "Nie zaimportowano %d kontaktu." msgstr[1] "Nie zaimportowano %d kontaktów." msgstr[2] "Nie zaimportowano %d kontaktów." -msgstr[3] "Nie zaimportowano %d kontaktów." +msgstr[3] "%dkontakty nie zostały zaimportowane " #: src/Core/UserImport.php:278 msgid "Done. You can now login with your username and password" -msgstr "Wykonano. Teraz możesz się zalogować z użyciem loginu i hasła." +msgstr "Gotowe. Możesz teraz zalogować się, podając swoją nazwę użytkownika i hasło." #: src/Core/ACL.php:295 msgid "Post to Email" -msgstr "Wyślij poprzez email" +msgstr "Prześlij e-mailem" #: src/Core/ACL.php:301 msgid "Hide your profile details from unknown viewers?" -msgstr "Ukryć szczegóły twojego profilu przed nieznajomymi ?" +msgstr "Ukryć szczegóły twojego profilu przed nieznajomymi?" #: src/Core/ACL.php:300 #, php-format @@ -7877,7 +7877,7 @@ msgstr "System" #: src/Core/NotificationsManager.php:192 src/Content/Nav.php:124 #: src/Content/Nav.php:181 msgid "Home" -msgstr "Dom" +msgstr "Strona domowa" #: src/Core/NotificationsManager.php:199 src/Content/Nav.php:186 msgid "Introductions" @@ -7916,7 +7916,7 @@ msgstr "" #: src/Core/NotificationsManager.php:333 #, php-format msgid "%s may attend %s's event" -msgstr "" +msgstr "%smoże uczestniczyć %s w wydarzeniu" #: src/Core/NotificationsManager.php:350 #, php-format @@ -7933,7 +7933,7 @@ msgstr "Prośba o dodanie do przyjaciół/powiązanych" #: src/Core/NotificationsManager.php:851 msgid "New Follower" -msgstr "Nowy obserwator" +msgstr "Nowy obserwujący" #: src/Util/Temporal.php:147 src/Model/Profile.php:758 msgid "Birthday:" @@ -7941,7 +7941,7 @@ msgstr "Urodziny:" #: src/Util/Temporal.php:151 msgid "YYYY-MM-DD or MM-DD" -msgstr "" +msgstr "RRRR-MM-DD lub MM-DD" #: src/Util/Temporal.php:294 msgid "never" @@ -8012,7 +8012,7 @@ msgstr "Obrazek/zdjęcie" #: src/Content/Text/BBCode.php:1116 #, php-format msgid "%2$s %3$s" -msgstr "" +msgstr "%2$s%3$s" #: src/Content/Text/BBCode.php:1670 src/Content/Text/BBCode.php:1692 msgid "$1 wrote:" @@ -8024,11 +8024,11 @@ msgstr "Szyfrowana treść" #: src/Content/Text/BBCode.php:1862 msgid "Invalid source protocol" -msgstr "" +msgstr "Nieprawidłowy protokół źródłowy" #: src/Content/Text/BBCode.php:1873 msgid "Invalid link protocol" -msgstr "" +msgstr "Niepoprawny link protokołu" #: src/Content/ContactSelector.php:55 msgid "Frequently" @@ -8068,7 +8068,7 @@ msgstr "Facebook" #: src/Content/ContactSelector.php:85 msgid "Zot!" -msgstr "" +msgstr "Zot!" #: src/Content/ContactSelector.php:86 msgid "LinkedIn" @@ -8092,7 +8092,7 @@ msgstr "" #: src/Content/ContactSelector.php:91 msgid "Twitter" -msgstr "" +msgstr "Twitter" #: src/Content/ContactSelector.php:92 msgid "Diaspora Connector" @@ -8100,7 +8100,7 @@ msgstr "" #: src/Content/ContactSelector.php:93 msgid "GNU Social Connector" -msgstr "" +msgstr "GNU Łącze Społecznościowe" #: src/Content/ContactSelector.php:94 msgid "pnut" @@ -8236,7 +8236,7 @@ msgstr "" #: src/Content/ContactSelector.php:169 msgid "Infatuated" -msgstr "zakochany" +msgstr "Zakochany" #: src/Content/ContactSelector.php:169 msgid "Dating" @@ -8284,7 +8284,7 @@ msgstr "Konkubinat" #: src/Content/ContactSelector.php:169 msgid "Common law" -msgstr "" +msgstr "Prawo zwyczajowe" #: src/Content/ContactSelector.php:169 msgid "Happy" @@ -8292,7 +8292,7 @@ msgstr "Szczęśliwy" #: src/Content/ContactSelector.php:169 msgid "Not looking" -msgstr "" +msgstr "Nie patrzę" #: src/Content/ContactSelector.php:169 msgid "Swinger" @@ -8332,7 +8332,7 @@ msgstr "To skomplikowane" #: src/Content/ContactSelector.php:169 msgid "Don't care" -msgstr "Nie obchodzi mnie to" +msgstr "Nie przejmuj się" #: src/Content/ContactSelector.php:169 msgid "Ask me" @@ -8352,7 +8352,7 @@ msgstr "Osobiste notatki" #: src/Content/Nav.php:105 msgid "Your personal notes" -msgstr "" +msgstr "Twoje osobiste notatki" #: src/Content/Nav.php:114 msgid "Sign in" @@ -8388,7 +8388,7 @@ msgstr "Społeczność" #: src/Content/Nav.php:165 msgid "Conversations on this and other servers" -msgstr "" +msgstr "Rozmowy na tym i innych serwerach" #: src/Content/Nav.php:172 msgid "Directory" @@ -8396,23 +8396,23 @@ msgstr "Katalog" #: src/Content/Nav.php:172 msgid "People directory" -msgstr "" +msgstr "Katalog osób" #: src/Content/Nav.php:174 msgid "Information about this friendica instance" -msgstr "" +msgstr "Informacje o tej instancji friendica" #: src/Content/Nav.php:179 msgid "Network Reset" -msgstr "" +msgstr "Resetowanie sieci" #: src/Content/Nav.php:179 msgid "Load Network page with no filters" -msgstr "" +msgstr "Załaduj stronę sieci bez filtrów" #: src/Content/Nav.php:186 msgid "Friend Requests" -msgstr "Podania o przyjęcie do grona znajomych" +msgstr "Prośba o przyjęcie do grona znajomych" #: src/Content/Nav.php:190 msgid "See all notifications" @@ -8460,29 +8460,29 @@ msgstr "Mapa strony" #: src/Content/Feature.php:79 msgid "General Features" -msgstr "" +msgstr "Główne cechy" #: src/Content/Feature.php:81 msgid "Multiple Profiles" -msgstr "" +msgstr "Wiele profili" #: src/Content/Feature.php:81 msgid "Ability to create multiple profiles" -msgstr "" +msgstr "Możliwość tworzenia wielu profili" #: src/Content/Feature.php:82 msgid "Photo Location" -msgstr "" +msgstr "Lokalizacja zdjęcia" #: src/Content/Feature.php:82 msgid "" "Photo metadata is normally stripped. This extracts the location (if present)" " prior to stripping metadata and links it to a map." -msgstr "" +msgstr "Metadane zdjęć są zwykle usuwane. Wyodrębnia to położenie (jeśli jest obecne) przed usunięciem metadanych i łączy je z mapą." #: src/Content/Feature.php:83 msgid "Export Public Calendar" -msgstr "" +msgstr "Eksportuj kalendarz publiczny" #: src/Content/Feature.php:83 msgid "Ability for visitors to download the public calendar" @@ -8498,7 +8498,7 @@ msgstr "Podgląd posta" #: src/Content/Feature.php:89 msgid "Allow previewing posts and comments before publishing them" -msgstr "" +msgstr "Zezwalaj na podgląd postów i komentarzy przed ich opublikowaniem" #: src/Content/Feature.php:90 msgid "Auto-mention Forums" @@ -8507,11 +8507,11 @@ msgstr "" #: src/Content/Feature.php:90 msgid "" "Add/remove mention when a forum page is selected/deselected in ACL window." -msgstr "" +msgstr "Dodaj/usuń wzmiankę, gdy strona forum zostanie wybrana/cofnięta w oknie ACL." #: src/Content/Feature.php:95 msgid "Network Sidebar Widgets" -msgstr "" +msgstr "Widgety paska bocznego sieci" #: src/Content/Feature.php:96 msgid "Search by Date" @@ -8519,55 +8519,55 @@ msgstr "Szukanie wg daty" #: src/Content/Feature.php:96 msgid "Ability to select posts by date ranges" -msgstr "" +msgstr "Wybierz wpisy według zakresów dat" #: src/Content/Feature.php:97 src/Content/Feature.php:127 msgid "List Forums" -msgstr "" +msgstr "Lista forów" #: src/Content/Feature.php:97 msgid "Enable widget to display the forums your are connected with" -msgstr "" +msgstr "Włącz widżet, aby wyświetlić fora, z którymi jesteś połączony" #: src/Content/Feature.php:98 msgid "Group Filter" -msgstr "Filtrowanie grupowe" +msgstr "Filtr grupowy" #: src/Content/Feature.php:98 msgid "Enable widget to display Network posts only from selected group" -msgstr "" +msgstr "Włącz widżet, aby wyświetlać posty sieciowe tylko z wybranej grupy" #: src/Content/Feature.php:99 msgid "Network Filter" -msgstr "" +msgstr "Filtr sieciowy" #: src/Content/Feature.php:99 msgid "Enable widget to display Network posts only from selected network" -msgstr "" +msgstr "Włącz widżet, aby wyświetlać posty sieciowe tylko z wybranej sieci" #: src/Content/Feature.php:100 msgid "Save search terms for re-use" -msgstr "" +msgstr "Zapisz wyszukiwane hasła do ponownego użycia" #: src/Content/Feature.php:105 msgid "Network Tabs" -msgstr "" +msgstr "Karty sieciowe" #: src/Content/Feature.php:106 msgid "Network Personal Tab" -msgstr "" +msgstr "Sieć Osobista zakładka" #: src/Content/Feature.php:106 msgid "Enable tab to display only Network posts that you've interacted on" -msgstr "" +msgstr "Włącz kartę, by wyświetlać tylko posty w sieci, z którymi współpracujesz" #: src/Content/Feature.php:107 msgid "Network New Tab" -msgstr "" +msgstr "Sieć Nowa karta" #: src/Content/Feature.php:107 msgid "Enable tab to display only new Network posts (from the last 12 hours)" -msgstr "" +msgstr "Włącz kartę, aby wyświetlić tylko nowe posty sieciowe (z ostatnich 12 godzin)" #: src/Content/Feature.php:108 msgid "Network Shared Links Tab" @@ -8575,35 +8575,35 @@ msgstr "" #: src/Content/Feature.php:108 msgid "Enable tab to display only Network posts with links in them" -msgstr "" +msgstr "Włącz zakładkę, aby wyświetlić tylko posty sieciowe z łączami do nich" #: src/Content/Feature.php:113 msgid "Post/Comment Tools" -msgstr "" +msgstr "Narzędzia post/komentarz" #: src/Content/Feature.php:114 msgid "Multiple Deletion" -msgstr "" +msgstr "Wielokrotne usunięcie" #: src/Content/Feature.php:114 msgid "Select and delete multiple posts/comments at once" -msgstr "" +msgstr "Wybierz i usuń wiele postów/komentarzy jednocześnie" #: src/Content/Feature.php:115 msgid "Edit Sent Posts" -msgstr "" +msgstr "Edytuj wysłane posty" #: src/Content/Feature.php:115 msgid "Edit and correct posts and comments after sending" -msgstr "" +msgstr "Edycja i poprawianie wpisów i komentarzy po wysłaniu" #: src/Content/Feature.php:116 msgid "Tagging" -msgstr "Oznaczanie" +msgstr "Tagowanie" #: src/Content/Feature.php:116 msgid "Ability to tag existing posts" -msgstr "" +msgstr "Możliwość oznaczania istniejących postów" #: src/Content/Feature.php:117 msgid "Post Categories" @@ -8619,11 +8619,11 @@ msgstr "Zapisane foldery" #: src/Content/Feature.php:118 msgid "Ability to file posts under folders" -msgstr "" +msgstr "Możliwość przesyłania postów do folderów" #: src/Content/Feature.php:119 msgid "Dislike Posts" -msgstr "" +msgstr "Nie lubię Postów" #: src/Content/Feature.php:119 msgid "Ability to dislike posts/comments" @@ -8635,39 +8635,39 @@ msgstr "Oznacz posty gwiazdką" #: src/Content/Feature.php:120 msgid "Ability to mark special posts with a star indicator" -msgstr "" +msgstr "Oznacz specjalne posty gwiazdką" #: src/Content/Feature.php:121 msgid "Mute Post Notifications" -msgstr "" +msgstr "Ignoruj ​​powiadomienia pocztą" #: src/Content/Feature.php:121 msgid "Ability to mute notifications for a thread" -msgstr "" +msgstr "Ignoruj powiadomienia dla wątku" #: src/Content/Feature.php:126 msgid "Advanced Profile Settings" -msgstr "" +msgstr "Zaawansowane ustawienia profilu" #: src/Content/Feature.php:127 msgid "Show visitors public community forums at the Advanced Profile Page" -msgstr "" +msgstr "Wyświetlaj publiczne fora społeczności na stronie profilu zaawansowanego" #: src/Content/Feature.php:128 msgid "Tag Cloud" -msgstr "" +msgstr "Chmura tagów" #: src/Content/Feature.php:128 msgid "Provide a personal tag cloud on your profile page" -msgstr "" +msgstr "Podaj osobistą chmurę tagów na stronie profilu" #: src/Content/Feature.php:129 msgid "Display Membership Date" -msgstr "" +msgstr "Wyświetl datę członkostwa" #: src/Content/Feature.php:129 msgid "Display membership date in profile" -msgstr "" +msgstr "Wyświetl datę członkostwa w profilu" #: src/Content/OEmbed.php:253 msgid "Embedding disabled" @@ -8679,15 +8679,15 @@ msgstr "Osadzona zawartość" #: src/Content/Widget/CalendarExport.php:61 msgid "Export" -msgstr "" +msgstr "Eksport" #: src/Content/Widget/CalendarExport.php:62 msgid "Export calendar as ical" -msgstr "" +msgstr "Wyeksportuj kalendarz jako ical" #: src/Content/Widget/CalendarExport.php:63 msgid "Export calendar as csv" -msgstr "" +msgstr "Eksportuj kalendarz jako csv" #: src/Content/Widget.php:33 msgid "Add New Contact" @@ -8720,7 +8720,7 @@ msgstr "Wpisz nazwę lub zainteresowanie" #: src/Content/Widget.php:62 msgid "Examples: Robert Morgenstein, Fishing" -msgstr "Przykładowo: Jan Kowalski, Wędkarstwo" +msgstr "Przykład: Jan Kowalski, Wędkarstwo" #: src/Content/Widget.php:66 msgid "Random Profile" @@ -8728,7 +8728,7 @@ msgstr "Domyślny profil" #: src/Content/Widget.php:68 msgid "View Global Directory" -msgstr "" +msgstr "Wyświetl globalny katalog" #: src/Content/Widget.php:159 msgid "Networks" @@ -8757,7 +8757,7 @@ msgstr[3] "" #: src/Database/DBStructure.php:32 msgid "There are no tables on MyISAM." -msgstr "" +msgstr "W MyISAM nie ma tabel." #: src/Database/DBStructure.php:75 #, php-format @@ -8774,7 +8774,7 @@ msgstr "" msgid "" "The error message is\n" "[pre]%s[/pre]" -msgstr "" +msgstr "Komunikat o błędzie jest \n[pre]%s[/ pre]" #: src/Database/DBStructure.php:191 #, php-format @@ -8782,20 +8782,20 @@ msgid "" "\n" "Error %d occurred during database update:\n" "%s\n" -msgstr "" +msgstr "\nWystąpił błąd %d podczas aktualizacji bazy danych:\n%s\n" #: src/Database/DBStructure.php:194 msgid "Errors encountered performing database changes: " -msgstr "" +msgstr "Napotkane błędy powodujące zmiany w bazie danych:" #: src/Database/DBStructure.php:210 msgid ": Database update" -msgstr "" +msgstr ": Aktualizacja bazy danych" #: src/Database/DBStructure.php:460 #, php-format msgid "%s: updating %s table." -msgstr "" +msgstr "%s: aktualizowanie %s tabeli." #: src/Model/Mail.php:40 src/Model/Mail.php:174 msgid "[no subject]" @@ -8852,7 +8852,7 @@ msgstr "Wydarzenia w tym tygodniu:" #: src/Model/Profile.php:741 msgid "Member since:" -msgstr "" +msgstr "Członek od:" #: src/Model/Profile.php:749 msgid "j F, Y" @@ -8921,7 +8921,7 @@ msgstr "Tylko ty możesz to zobaczyć" #: src/Model/Contact.php:645 msgid "Drop Contact" -msgstr "" +msgstr "Upuść kontakt" #: src/Model/Contact.php:1048 msgid "Organisation" @@ -8933,7 +8933,7 @@ msgstr "Aktualności" #: src/Model/Contact.php:1054 msgid "Forum" -msgstr "" +msgstr "Forum" #: src/Model/Contact.php:1233 msgid "Connect URL missing." @@ -8943,7 +8943,7 @@ msgstr "Brak adresu URL połączenia." msgid "" "The contact could not be added. Please check the relevant network " "credentials in your Settings -> Social Networks page." -msgstr "" +msgstr "Nie można dodać kontaktu. Sprawdź odpowiednie poświadczenia sieciowe na stronie Ustawienia -> Sieci społecznościowe." #: src/Model/Contact.php:1289 msgid "" @@ -8952,7 +8952,7 @@ msgstr "Ta strona nie jest skonfigurowana do pozwalania na komunikację z innymi #: src/Model/Contact.php:1290 src/Model/Contact.php:1304 msgid "No compatible communication protocols or feeds were discovered." -msgstr "" +msgstr "Nie znaleziono żadnych kompatybilnych protokołów komunikacyjnych ani źródeł." #: src/Model/Contact.php:1302 msgid "The profile address specified does not provide adequate information." @@ -8970,11 +8970,11 @@ msgstr "Przeglądarka WWW nie może odnaleźć podanego adresu" msgid "" "Unable to match @-style Identity Address with a known protocol or email " "contact." -msgstr "" +msgstr "Nie można dopasować @-stylu Adres identyfikacyjny ze znanym protokołem lub kontaktem e-mail." #: src/Model/Contact.php:1314 msgid "Use mailto: in front of address to force email check." -msgstr "" +msgstr "Użyj mailto: przed adresem, aby wymusić sprawdzanie poczty e-mail." #: src/Model/Contact.php:1320 msgid "" @@ -9014,19 +9014,19 @@ msgstr "Wykończenia:" #: src/Model/Event.php:368 msgid "all-day" -msgstr "" +msgstr "cały dzień" #: src/Model/Event.php:391 msgid "Jun" -msgstr "" +msgstr "cze" #: src/Model/Event.php:394 msgid "Sept" -msgstr "" +msgstr "wrz" #: src/Model/Event.php:417 msgid "No events to display" -msgstr "" +msgstr "Brak wydarzeń do wyświetlenia" #: src/Model/Event.php:543 msgid "l, F j" @@ -9038,11 +9038,11 @@ msgstr "Edytuj wydarzenie" #: src/Model/Event.php:567 msgid "Duplicate event" -msgstr "" +msgstr "Zduplikowane zdarzenie" #: src/Model/Event.php:568 msgid "Delete event" -msgstr "" +msgstr "Usuń wydarzenie" #: src/Model/Event.php:815 msgid "D g:i A" @@ -9054,18 +9054,18 @@ msgstr "" #: src/Model/Event.php:901 src/Model/Event.php:903 msgid "Show map" -msgstr "" +msgstr "Pokaż mapę" #: src/Model/Event.php:902 msgid "Hide map" -msgstr "" +msgstr "Ukryj mapę" #: src/Model/Group.php:44 msgid "" "A deleted group with this name was revived. Existing item permissions " "may apply to this group and any future members. If this is " "not what you intended, please create another group with a different name." -msgstr "" +msgstr "Skasowana grupa o tej nazwie została przywrócona. Istniejące uprawnienia do pozycji mogą dotyczyć tej grupy i wszystkich przyszłych członków. Jeśli nie jest to zamierzone, utwórz inną grupę o innej nazwie." #: src/Model/Group.php:328 msgid "Default privacy group for new contacts" @@ -9098,17 +9098,17 @@ msgstr "Edytuj grupy" #: src/Model/Item.php:1676 #, php-format msgid "%1$s is attending %2$s's %3$s" -msgstr "" +msgstr "%1$suczestniczy %2$s's %3$s " #: src/Model/Item.php:1681 #, php-format msgid "%1$s is not attending %2$s's %3$s" -msgstr "" +msgstr "%1$snie uczestniczy %2$s's %3$s " #: src/Model/Item.php:1686 #, php-format msgid "%1$s may attend %2$s's %3$s" -msgstr "" +msgstr "%1$smogą uczestniczyć %2$s's %3$s " #: src/Model/User.php:144 msgid "Login failed" @@ -9116,7 +9116,7 @@ msgstr "Logowanie nieudane" #: src/Model/User.php:175 msgid "Not enough information to authenticate" -msgstr "" +msgstr "Za mało informacji do uwierzytelnienia" #: src/Model/User.php:332 msgid "An invitation is required." @@ -9134,7 +9134,7 @@ msgstr "Nieprawidłowy adres url OpenID" msgid "" "We encountered a problem while logging in with the OpenID you provided. " "Please check the correct spelling of the ID." -msgstr "" +msgstr "Napotkaliśmy problem podczas logowania z podanym przez nas identyfikatorem OpenID. Sprawdź poprawną pisownię identyfikatora." #: src/Model/User.php:356 src/Module/Login.php:100 msgid "The error message was:" @@ -9170,7 +9170,7 @@ msgstr "Nie możesz użyć tego e-maila. " #: src/Model/User.php:414 msgid "Your nickname can only contain a-z, 0-9 and _." -msgstr "" +msgstr "Twój pseudonim może zawierać tylko a-z, 0-9 i _." #: src/Model/User.php:421 src/Model/User.php:477 msgid "Nickname is already registered. Please choose another." @@ -9190,12 +9190,12 @@ msgstr "Wystąpił błąd podczas tworzenia profilu. Spróbuj ponownie." #: src/Model/User.php:500 msgid "An error occurred creating your self contact. Please try again." -msgstr "" +msgstr "Wystąpił błąd podczas tworzenia własnego kontaktu. Proszę spróbuj ponownie." #: src/Model/User.php:509 msgid "" "An error occurred creating your default contact group. Please try again." -msgstr "" +msgstr "Wystąpił błąd podczas tworzenia domyślnej grupy kontaktów. Proszę spróbuj ponownie." #: src/Model/User.php:583 #, php-format @@ -9204,12 +9204,12 @@ msgid "" "\t\t\tDear %1$s,\n" "\t\t\t\tThank you for registering at %2$s. Your account is pending for approval by the administrator.\n" "\t\t" -msgstr "" +msgstr "\n\t\t\tDrodzy %1$s, \n\t\t\t\tDziękujemy za rejestrację na stronie %2$s. Twoje konto czeka na zatwierdzenie przez administratora." #: src/Model/User.php:593 #, php-format msgid "Registration at %s" -msgstr "" +msgstr "Rejestracja w %s" #: src/Model/User.php:611 #, php-format @@ -9218,7 +9218,7 @@ msgid "" "\t\t\tDear %1$s,\n" "\t\t\t\tThank you for registering at %2$s. Your account has been created.\n" "\t\t" -msgstr "" +msgstr "\n\t\t\tDrodzy %1$s, \n\t\t\t\tDziękujemy za rejestrację na stronie %2$s. Twoje konto zostało utworzone." #: src/Model/User.php:615 #, php-format @@ -9248,12 +9248,12 @@ msgid "" "\n" "\n" "\t\t\tThank you and welcome to %2$s." -msgstr "" +msgstr "\n\t\t\tDane logowania są następujące:\n\t\t\t\tLokalizacja strony:\t%3$s\n\t\t\t\tNazwa użytkownika:\t%1$s\n\t\t\t\tHasło:\t%5$s\n \n\t\t\tMożesz zmienić hasło ze strony Ustawienia konta po zalogowaniu\n\t\t\tw.\n\n\t\t\tPoświęć chwilę, aby przejrzeć inne ustawienia konta na tej stronie.\n\n\t\t\tMożesz również dodać podstawowe informacje do domyślnego profilu\n\t\t\t(na stronie \"Profile\"), aby inne osoby mogły łatwo Cię znaleźć.\n\n\t\t\tZalecamy ustawienie imienia i nazwiska, dodanie zdjęcia profilowego,\n\t\t\tdodanie niektórych słów kluczowych profilu (bardzo przydatne w nawiązywaniu nowych znajomości) - i\n\t\t\tbyć może w jakim kraju mieszkasz; jeśli nie chcesz być bardziej konkretny\n\t\t\tniż to.\n \n\t\t\tW pełni szanujemy Twoje prawo do prywatności i żaden z tych elementów nie jest konieczny.\n\t\t\tJeśli jesteś nowy i nie znasz nikogo tutaj, mogą ci pomóc\n\t\t\tMożesz tworzyć nowych i interesujących przyjaciół\n\n\n\t\t\tDziękuję i zapraszam %2$s." #: src/Protocol/DFRN.php:1396 #, php-format msgid "%s\\'s birthday" -msgstr "" +msgstr "%s\\'s urodziny" #: src/Protocol/Diaspora.php:2647 msgid "Sharing notification from Diaspora network" @@ -9266,7 +9266,7 @@ msgstr "Załączniki:" #: src/Protocol/OStatus.php:1799 #, php-format msgid "%s is now following %s." -msgstr "" +msgstr "%sjest teraz następujące %s. " #: src/Protocol/OStatus.php:1800 msgid "following" @@ -9275,11 +9275,11 @@ msgstr "następujący" #: src/Protocol/OStatus.php:1803 #, php-format msgid "%s stopped following %s." -msgstr "" +msgstr "%sprzestał śledzić %s. " #: src/Protocol/OStatus.php:1804 msgid "stopped following" -msgstr "przestań obserwować" +msgstr "przestał śledzić" #: src/Worker/Delivery.php:390 msgid "(no subject)" @@ -9307,7 +9307,7 @@ msgstr "Zapomniałeś swojego hasła?" #: src/Module/Login.php:328 msgid "Website Terms of Service" -msgstr "" +msgstr "Warunki korzystania z witryny" #: src/Module/Login.php:329 msgid "terms of service" @@ -9315,7 +9315,7 @@ msgstr "warunki użytkowania" #: src/Module/Login.php:331 msgid "Website Privacy Policy" -msgstr "" +msgstr "Polityka Prywatności Witryny" #: src/Module/Login.php:332 msgid "privacy policy" @@ -9335,15 +9335,15 @@ msgstr "zapisz w folderze" #: src/Object/Post.php:235 msgid "I will attend" -msgstr "" +msgstr "Będę uczestniczyć" #: src/Object/Post.php:235 msgid "I will not attend" -msgstr "" +msgstr "Nie będę uczestniczyć" #: src/Object/Post.php:235 msgid "I might attend" -msgstr "" +msgstr "Mogę wziąć udział" #: src/Object/Post.php:263 msgid "add star" @@ -9367,11 +9367,11 @@ msgstr "zignoruj ​​wątek" #: src/Object/Post.php:275 msgid "unignore thread" -msgstr "" +msgstr "odignoruj ​​wątek" #: src/Object/Post.php:276 msgid "toggle ignore status" -msgstr "" +msgstr "przełącz status ignorowania" #: src/Object/Post.php:285 msgid "add tag" diff --git a/view/lang/pl/strings.php b/view/lang/pl/strings.php index 5e8c75570..3f5e0d1ea 100644 --- a/view/lang/pl/strings.php +++ b/view/lang/pl/strings.php @@ -21,23 +21,23 @@ $a->strings["Weekly posting limit of %d post reached. The post was rejected."] = 2 => "", 3 => "", ]; -$a->strings["Monthly posting limit of %d post reached. The post was rejected."] = ""; -$a->strings["Profile Photos"] = "Zdjęcia profilowe"; +$a->strings["Monthly posting limit of %d post reached. The post was rejected."] = "Miesięczny limit %d wysyłania postów. Post został odrzucony."; +$a->strings["Profile Photos"] = "Zdjęcie profilowe"; $a->strings["event"] = "wydarzenie"; $a->strings["status"] = "status"; $a->strings["photo"] = "zdjęcie"; $a->strings["%1\$s likes %2\$s's %3\$s"] = "%1\$s lubi %2\$s's %3\$s"; $a->strings["%1\$s doesn't like %2\$s's %3\$s"] = "%1\$s nie lubi %2\$s's %3\$s"; $a->strings["%1\$s attends %2\$s's %3\$s"] = ""; -$a->strings["%1\$s doesn't attend %2\$s's %3\$s"] = ""; -$a->strings["%1\$s attends maybe %2\$s's %3\$s"] = ""; +$a->strings["%1\$s doesn't attend %2\$s's %3\$s"] = "%1\$s nie uczestniczy %2\$s 's %3\$s"; +$a->strings["%1\$s attends maybe %2\$s's %3\$s"] = "%1\$s może uczęszcza %2\$s 's %3\$s"; $a->strings["%1\$s is now friends with %2\$s"] = "%1\$s jest teraz znajomym z %2\$s"; $a->strings["%1\$s poked %2\$s"] = ""; $a->strings["%1\$s tagged %2\$s's %3\$s with %4\$s"] = "%1\$s zaznaczył %2\$s'go %3\$s przy użyciu %4\$s"; $a->strings["post/item"] = ""; $a->strings["%1\$s marked %2\$s's %3\$s as favorite"] = ""; -$a->strings["Likes"] = "Polubień"; -$a->strings["Dislikes"] = "Nie lubień"; +$a->strings["Likes"] = "Lubi"; +$a->strings["Dislikes"] = "Nie lubi"; $a->strings["Attending"] = [ 0 => "", 1 => "", @@ -72,21 +72,21 @@ $a->strings["%s doesn't attend."] = "%s nie uczestniczy."; $a->strings["%s attends maybe."] = "%s może uczęszcza."; $a->strings["and"] = "i"; $a->strings["and %d other people"] = "i %d inni ludzie"; -$a->strings["%2\$d people like this"] = ""; +$a->strings["%2\$d people like this"] = "%2\$d ludzi lubi to"; $a->strings["%s like this."] = "%s lubię to."; -$a->strings["%2\$d people don't like this"] = ""; +$a->strings["%2\$d people don't like this"] = "%2\$d ludzi nie lubi tego "; $a->strings["%s don't like this."] = "%s nie lubię tego."; $a->strings["%2\$d people attend"] = ""; $a->strings["%s attend."] = ""; $a->strings["%2\$d people don't attend"] = ""; -$a->strings["%s don't attend."] = ""; -$a->strings["%2\$d people attend maybe"] = ""; -$a->strings["%s attend maybe."] = ""; +$a->strings["%s don't attend."] = "%s nie uczestnicz"; +$a->strings["%2\$d people attend maybe"] = "%2\$dprzyjacielemogą uczestniczyć "; +$a->strings["%s attend maybe."] = "%sbyć może uczestniczyć. "; $a->strings["Visible to everybody"] = "Widoczne dla wszystkich"; $a->strings["Please enter a link URL:"] = "Proszę wpisać adres URL:"; $a->strings["Please enter a video link/URL:"] = "Podaj link do filmu"; $a->strings["Please enter an audio link/URL:"] = "Podaj link do muzyki"; -$a->strings["Tag term:"] = ""; +$a->strings["Tag term:"] = "Termin tagu:"; $a->strings["Save to Folder:"] = "Zapisz w folderze:"; $a->strings["Where are you right now?"] = "Gdzie teraz jesteś?"; $a->strings["Delete item(s)?"] = "Usunąć pozycję (pozycje)?"; @@ -146,62 +146,62 @@ $a->strings["Cannot locate DNS info for database server '%s'"] = "Nie można zlo $a->strings["Friendica Notification"] = "Powiadomienia Friendica"; $a->strings["Thank You,"] = "Dziękuję,"; $a->strings["%s Administrator"] = "%s administrator"; -$a->strings["%1\$s, %2\$s Administrator"] = ""; +$a->strings["%1\$s, %2\$s Administrator"] = "%1\$s,%2\$sAdministrator"; $a->strings["noreply"] = "brak odpowiedzi"; $a->strings["[Friendica:Notify] New mail received at %s"] = "[Friendica:Notify] Nowa wiadomość otrzymana od %s"; -$a->strings["%1\$s sent you a new private message at %2\$s."] = ""; +$a->strings["%1\$s sent you a new private message at %2\$s."] = "%1\$swysłał ci nową prywatną wiadomość na %2\$s "; $a->strings["a private message"] = "prywatna wiadomość"; $a->strings["%1\$s sent you %2\$s."] = "%1\$s wysyła ci %2\$s"; $a->strings["Please visit %s to view and/or reply to your private messages."] = "Odwiedź %s żeby zobaczyć i/lub odpowiedzieć na twoje prywatne wiadomości"; $a->strings["%1\$s commented on [url=%2\$s]a %3\$s[/url]"] = "%1\$s skomentował [url=%2\$s]a %3\$s[/url]"; -$a->strings["%1\$s commented on [url=%2\$s]%3\$s's %4\$s[/url]"] = ""; -$a->strings["%1\$s commented on [url=%2\$s]your %3\$s[/url]"] = ""; -$a->strings["[Friendica:Notify] Comment to conversation #%1\$d by %2\$s"] = ""; +$a->strings["%1\$s commented on [url=%2\$s]%3\$s's %4\$s[/url]"] = "%1\$sskomentował [url=%2\$s]%3\$s %4\$s[/url]"; +$a->strings["%1\$s commented on [url=%2\$s]your %3\$s[/url]"] = "%1\$s skomentował [url=%2\$s] twój %3\$s[/ url]"; +$a->strings["[Friendica:Notify] Comment to conversation #%1\$d by %2\$s"] = "[Friendica:Powiadomienie] Komentarz do rozmowy #%1\$d przez %2\$s"; $a->strings["%s commented on an item/conversation you have been following."] = "%s skomentował rozmowę którą śledzisz"; $a->strings["Please visit %s to view and/or reply to the conversation."] = "Odwiedź %s żeby zobaczyć i/lub odpowiedzieć na rozmowę"; -$a->strings["[Friendica:Notify] %s posted to your profile wall"] = "[Friendica:Notify] %s napisał na twoim profilu"; -$a->strings["%1\$s posted to your profile wall at %2\$s"] = ""; +$a->strings["[Friendica:Notify] %s posted to your profile wall"] = "[Friendica:Powiadomienie] %s napisał na twoim profilu"; +$a->strings["%1\$s posted to your profile wall at %2\$s"] = "%1\$sopublikowano na ścianie profilu w %2\$s "; $a->strings["%1\$s posted to [url=%2\$s]your wall[/url]"] = ""; -$a->strings["[Friendica:Notify] %s tagged you"] = "[Friendica:Notify] %s oznaczył cię"; -$a->strings["%1\$s tagged you at %2\$s"] = "%1\$s oznaczył/a cię w %2\$s"; +$a->strings["[Friendica:Notify] %s tagged you"] = "[Friendica:Powiadomienie] %s dodał Cię"; +$a->strings["%1\$s tagged you at %2\$s"] = "%1\$s oznaczono Cię tagiem %2\$s"; $a->strings["%1\$s [url=%2\$s]tagged you[/url]."] = ""; -$a->strings["[Friendica:Notify] %s shared a new post"] = ""; -$a->strings["%1\$s shared a new post at %2\$s"] = ""; +$a->strings["[Friendica:Notify] %s shared a new post"] = "[Friendica:Powiadomienie] %s udostępnił nowy wpis"; +$a->strings["%1\$s shared a new post at %2\$s"] = "%1\$sudostępnił nowy wpis na %2\$s "; $a->strings["%1\$s [url=%2\$s]shared a post[/url]."] = ""; -$a->strings["[Friendica:Notify] %1\$s poked you"] = ""; +$a->strings["[Friendica:Notify] %1\$s poked you"] = "[Friendica: Powiadomienie] %1\$s poked you"; $a->strings["%1\$s poked you at %2\$s"] = ""; $a->strings["%1\$s [url=%2\$s]poked you[/url]."] = ""; -$a->strings["[Friendica:Notify] %s tagged your post"] = ""; -$a->strings["%1\$s tagged your post at %2\$s"] = ""; +$a->strings["[Friendica:Notify] %s tagged your post"] = "[Friendica:Powiadomienie] %s otagował Twój post"; +$a->strings["%1\$s tagged your post at %2\$s"] = "%1\$soznaczyłeś swój wpis na %2\$s "; $a->strings["%1\$s tagged [url=%2\$s]your post[/url]"] = ""; -$a->strings["[Friendica:Notify] Introduction received"] = ""; -$a->strings["You've received an introduction from '%1\$s' at %2\$s"] = ""; +$a->strings["[Friendica:Notify] Introduction received"] = "[Friendica:Powiadomienie] Zapoznanie wstępne"; +$a->strings["You've received an introduction from '%1\$s' at %2\$s"] = "Otrzymałeś wstęp od '%1\$s' z %2\$s"; $a->strings["You've received [url=%1\$s]an introduction[/url] from %2\$s."] = ""; -$a->strings["You may visit their profile at %s"] = "Możesz obejrzeć ich profile na %s"; +$a->strings["You may visit their profile at %s"] = "Możesz odwiedzić ich profil na stronie %s"; $a->strings["Please visit %s to approve or reject the introduction."] = "Odwiedż %s aby zatwierdzić lub odrzucić przedstawienie."; -$a->strings["[Friendica:Notify] A new person is sharing with you"] = ""; -$a->strings["%1\$s is sharing with you at %2\$s"] = ""; -$a->strings["[Friendica:Notify] You have a new follower"] = ""; -$a->strings["You have a new follower at %2\$s : %1\$s"] = ""; +$a->strings["[Friendica:Notify] A new person is sharing with you"] = "[Friendica:Powiadomienie] Nowa osoba dzieli się z tobą"; +$a->strings["%1\$s is sharing with you at %2\$s"] = "%1\$sdzieli się z tobą w %2\$s "; +$a->strings["[Friendica:Notify] You have a new follower"] = "[Friendica:Powiadomienie] Masz nowego obserwatora"; +$a->strings["You have a new follower at %2\$s : %1\$s"] = "Masz nowego obserwatora na %2\$s : %1\$s"; $a->strings["[Friendica:Notify] Friend suggestion received"] = "[Friendica: Powiadomienie] Otrzymano sugestię znajomego"; -$a->strings["You've received a friend suggestion from '%1\$s' at %2\$s"] = ""; -$a->strings["You've received [url=%1\$s]a friend suggestion[/url] for %2\$s from %3\$s."] = ""; +$a->strings["You've received a friend suggestion from '%1\$s' at %2\$s"] = "Otrzymałeś od znajomego sugestię '%1\$s' na %2\$s"; +$a->strings["You've received [url=%1\$s]a friend suggestion[/url] for %2\$s from %3\$s."] = "Otrzymałeś [url=%1\$s] sugestię znajomego [/url] dla %2\$s od %3\$s."; $a->strings["Name:"] = "Imię:"; $a->strings["Photo:"] = "Zdjęcie:"; -$a->strings["Please visit %s to approve or reject the suggestion."] = ""; +$a->strings["Please visit %s to approve or reject the suggestion."] = "Odwiedź stronę %s, aby zatwierdzić lub odrzucić sugestię."; $a->strings["[Friendica:Notify] Connection accepted"] = "[Friendica: Powiadomienie] Połączenie zostało zaakceptowane"; -$a->strings["'%1\$s' has accepted your connection request at %2\$s"] = ""; -$a->strings["%2\$s has accepted your [url=%1\$s]connection request[/url]."] = ""; +$a->strings["'%1\$s' has accepted your connection request at %2\$s"] = "'%1\$s' zaakceptował Twoją prośbę o połączenie na %2\$s"; +$a->strings["%2\$s has accepted your [url=%1\$s]connection request[/url]."] = "%2\$szaakceptował twoje [url=%1\$s] żądanie połączenia [/url]. "; $a->strings["You are now mutual friends and may exchange status updates, photos, and email without restriction."] = "Jesteście teraz przyjaciółmi i możesz wymieniać aktualizacje statusu, zdjęcia i e-maile bez ograniczeń."; $a->strings["Please visit %s if you wish to make any changes to this relationship."] = "Odwiedź stronę %s jeśli chcesz wprowadzić zmiany w tym związku."; $a->strings["'%1\$s' has chosen to accept you a fan, which restricts some forms of communication - such as private messaging and some profile interactions. If this is a celebrity or community page, these settings were applied automatically."] = "'%1\$s' zdecydował się zaakceptować Cię jako fana, który ogranicza niektóre formy komunikacji - takie jak prywatne wiadomości i niektóre interakcje w profilu. Jeśli jest to strona celebrytów lub społeczności, ustawienia te zostały zastosowane automatycznie."; -$a->strings["'%1\$s' may choose to extend this into a two-way or more permissive relationship in the future."] = ""; -$a->strings["Please visit %s if you wish to make any changes to this relationship."] = ""; -$a->strings["[Friendica System:Notify] registration request"] = "[Friendica System: Powiadomienie] prośba o rejestrację"; -$a->strings["You've received a registration request from '%1\$s' at %2\$s"] = ""; -$a->strings["You've received a [url=%1\$s]registration request[/url] from %2\$s."] = ""; -$a->strings["Full Name:\t%1\$s\\nSite Location:\t%2\$s\\nLogin Name:\t%3\$s (%4\$s)"] = ""; -$a->strings["Please visit %s to approve or reject the request."] = ""; +$a->strings["'%1\$s' may choose to extend this into a two-way or more permissive relationship in the future."] = "'%1\$s' możesz zdecydować o przedłużeniu tego w dwukierunkowy lub bardziej ścisłą relację w przyszłości. "; +$a->strings["Please visit %s if you wish to make any changes to this relationship."] = "Odwiedź stronę %s, jeśli chcesz wprowadzić zmiany w tym związku."; +$a->strings["[Friendica System:Notify] registration request"] = "[Friendica System:Powiadomienie] prośba o rejestrację"; +$a->strings["You've received a registration request from '%1\$s' at %2\$s"] = "Otrzymałeś wniosek rejestracyjny od '%1\$s' na %2\$s"; +$a->strings["You've received a [url=%1\$s]registration request[/url] from %2\$s."] = "Otrzymałeś [url=%1\$s] żądanie rejestracji [/url] od %2\$s."; +$a->strings["Full Name:\t%1\$s\\nSite Location:\t%2\$s\\nLogin Name:\t%3\$s (%4\$s)"] = "Pełna nazwa:\t%1\$s \\Lokalizacja nSite:\t%2\$s\\ nNazwa Użytkownika: \t%3\$s(%4\$s)"; +$a->strings["Please visit %s to approve or reject the request."] = "Odwiedź stronę %s, aby zatwierdzić lub odrzucić wniosek."; $a->strings["Item not found."] = "Element nie znaleziony."; $a->strings["Do you really want to delete this item?"] = "Czy na pewno chcesz usunąć ten element?"; $a->strings["Yes"] = "Tak"; @@ -227,7 +227,7 @@ $a->strings["View Contacts"] = "widok kontaktów"; $a->strings["Save"] = "Zapisz"; $a->strings["Follow"] = "Śledzić"; $a->strings["Search"] = "Szukaj"; -$a->strings["@name, !forum, #tags, content"] = ""; +$a->strings["@name, !forum, #tags, content"] = "@imię, !forum, #tagi, treść"; $a->strings["Full Text"] = "Pełny tekst"; $a->strings["Tags"] = "Tagi"; $a->strings["Contacts"] = "Kontakty"; @@ -238,12 +238,12 @@ $a->strings["ping"] = "ping"; $a->strings["pinged"] = ""; $a->strings["prod"] = ""; $a->strings["prodded"] = ""; -$a->strings["slap"] = "spoliczkuj"; +$a->strings["slap"] = "klask"; $a->strings["slapped"] = "spoliczkowany"; -$a->strings["finger"] = "dotknąć"; +$a->strings["finger"] = "wskaż"; $a->strings["fingered"] = "dotknięty"; -$a->strings["rebuff"] = "odprawiać"; -$a->strings["rebuffed"] = "odprawiony"; +$a->strings["rebuff"] = "odrzuć"; +$a->strings["rebuffed"] = "odrzucony"; $a->strings["Monday"] = "Poniedziałek"; $a->strings["Tuesday"] = "Wtorek"; $a->strings["Wednesday"] = "Środa"; @@ -264,22 +264,22 @@ $a->strings["October"] = "Październik"; $a->strings["November"] = "Listopad"; $a->strings["December"] = "Grudzień"; $a->strings["Mon"] = "Pon"; -$a->strings["Tue"] = "Forum"; +$a->strings["Tue"] = "Wt"; $a->strings["Wed"] = "Śr"; $a->strings["Thu"] = "Czw"; $a->strings["Fri"] = "Pt"; $a->strings["Sat"] = "Sob"; $a->strings["Sun"] = "Niedz"; -$a->strings["Jan"] = ""; -$a->strings["Feb"] = ""; -$a->strings["Mar"] = ""; -$a->strings["Apr"] = ""; -$a->strings["Jul"] = ""; -$a->strings["Aug"] = ""; -$a->strings["Sep"] = ""; -$a->strings["Oct"] = ""; -$a->strings["Nov"] = ""; -$a->strings["Dec"] = ""; +$a->strings["Jan"] = "Sty"; +$a->strings["Feb"] = "Lut"; +$a->strings["Mar"] = "Mar"; +$a->strings["Apr"] = "Kwi"; +$a->strings["Jul"] = "Lip"; +$a->strings["Aug"] = "Sie"; +$a->strings["Sep"] = "Wrz"; +$a->strings["Oct"] = "Paź"; +$a->strings["Nov"] = "Lis"; +$a->strings["Dec"] = "Gru"; $a->strings["View Video"] = "Zobacz film"; $a->strings["bytes"] = "bajty"; $a->strings["Click to open/close"] = "Kliknij aby otworzyć/zamknąć"; @@ -309,7 +309,7 @@ $a->strings["Item not available."] = "Element nie dostępny."; $a->strings["Item was not found."] = "Element nie znaleziony."; $a->strings["No contacts in common."] = "Brak wspólnych kontaktów."; $a->strings["Common Friends"] = "Wspólni znajomi"; -$a->strings["Credits"] = ""; +$a->strings["Credits"] = "Zaufany"; $a->strings["Friendica is a community project, that would not be possible without the help of many people. Here is a list of those who have contributed to the code or the translation of Friendica. Thank you all!"] = "Friendica to projekt społecznościowy, który nie byłby możliwy bez pomocy wielu osób. Oto lista osób, które przyczyniły się do tworzenia kodu lub tłumaczenia Friendica. Dziękuję wam wszystkim!"; $a->strings["Contact settings applied."] = "Ustawienia kontaktu zaktualizowane."; $a->strings["Contact update failed."] = "Nie udało się zaktualizować kontaktu."; @@ -317,14 +317,14 @@ $a->strings["Contact not found."] = "Kontakt nie znaleziony"; $a->strings["WARNING: This is highly advanced and if you enter incorrect information your communications with this contact may stop working."] = " UWAGA: To jest wysoce zaawansowane i jeśli wprowadzisz niewłaściwą informację twoje komunikacje z tym kontaktem mogą przestać działać."; $a->strings["Please use your browser 'Back' button now if you are uncertain what to do on this page."] = "Jeśli nie jesteś pewien, co zrobić na tej stronie, użyj teraz przycisku 'powrót' na swojej przeglądarce."; $a->strings["No mirroring"] = "Bez dublowania"; -$a->strings["Mirror as forwarded posting"] = ""; -$a->strings["Mirror as my own posting"] = ""; +$a->strings["Mirror as forwarded posting"] = "Przesłany lustrzany post"; +$a->strings["Mirror as my own posting"] = "Lustro mojego własnego komentarza"; $a->strings["Return to contact editor"] = "Wróć do edytora kontaktów"; $a->strings["Refetch contact data"] = "Odśwież dane kontaktowe"; $a->strings["Submit"] = "Potwierdź"; -$a->strings["Remote Self"] = ""; -$a->strings["Mirror postings from this contact"] = ""; -$a->strings["Mark this contact as remote_self, this will cause friendica to repost new entries from this contact."] = ""; +$a->strings["Remote Self"] = "Zdalny Self"; +$a->strings["Mirror postings from this contact"] = "Publikacje lustrzane od tego kontaktu"; +$a->strings["Mark this contact as remote_self, this will cause friendica to repost new entries from this contact."] = "Oznacz ten kontakt jako remote_self, spowoduje to, że friendica odeśle nowe wpisy z tego kontaktu."; $a->strings["Name"] = "Imię"; $a->strings["Account Nickname"] = "Nazwa konta"; $a->strings["@Tagname - overrides Name/Nickname"] = "@Zmienna - zastępuje Imię/Pseudonim"; @@ -352,7 +352,7 @@ $a->strings["New Member Checklist"] = "Lista nowych członków"; $a->strings["We would like to offer some tips and links to help make your experience enjoyable. Click any item to visit the relevant page. A link to this page will be visible from your home page for two weeks after your initial registration and then will quietly disappear."] = "Chcielibyśmy zaproponować kilka porad i linków, które pomogą uczynić twoje doświadczenie przyjemnym. Kliknij dowolny element, aby odwiedzić odpowiednią stronę. Link do tej strony będzie widoczny na stronie głównej przez dwa tygodnie od czasu rejestracji, a następnie zniknie."; $a->strings["Getting Started"] = "Pierwsze kroki"; $a->strings["Friendica Walk-Through"] = ""; -$a->strings["On your Quick Start page - find a brief introduction to your profile and network tabs, make some new connections, and find some groups to join."] = ""; +$a->strings["On your Quick Start page - find a brief introduction to your profile and network tabs, make some new connections, and find some groups to join."] = "Na stronie Szybki start - znajdź krótkie wprowadzenie do swojego profilu i kart sieciowych, stwórz nowe połączenia i znajdź kilka grup do przyłączenia się."; $a->strings["Settings"] = "Ustawienia"; $a->strings["Go to Your Settings"] = "Idź do swoich ustawień"; $a->strings["On your Settings page - change your initial password. Also make a note of your Identity Address. This looks just like an email address - and will be useful in making friends on the free social web."] = "Na stronie Ustawienia - zmień swoje początkowe hasło. Zanotuj także swój adres tożsamości. Wygląda to jak adres e-mail - i będzie przydatny w nawiązywaniu znajomości w bezpłatnej sieci społecznościowej."; @@ -368,23 +368,23 @@ $a->strings["Connecting"] = "Łączę się..."; $a->strings["Importing Emails"] = "Importuję emaile..."; $a->strings["Enter your email access information on your Connector Settings page if you wish to import and interact with friends or mailing lists from your email INBOX"] = "Wprowadź informacje dotyczące dostępu do poczty e-mail na stronie Ustawienia oprogramowania, jeśli chcesz importować i wchodzić w interakcje z przyjaciółmi lub listami adresowymi z poziomu konta e-mail INBOX"; $a->strings["Go to Your Contacts Page"] = "Idź do strony z Twoimi kontaktami"; -$a->strings["Your Contacts page is your gateway to managing friendships and connecting with friends on other networks. Typically you enter their address or site URL in the Add New Contact dialog."] = ""; +$a->strings["Your Contacts page is your gateway to managing friendships and connecting with friends on other networks. Typically you enter their address or site URL in the Add New Contact dialog."] = "Strona Kontakty jest twoją bramą do zarządzania przyjaciółmi i łączenia się z przyjaciółmi w innych sieciach. Zazwyczaj podaje się adres lub adres URL strony w oknie dialogowym Dodaj nowy kontakt."; $a->strings["Go to Your Site's Directory"] = "Idż do twojej strony"; -$a->strings["The Directory page lets you find other people in this network or other federated sites. Look for a Connect or Follow link on their profile page. Provide your own Identity Address if requested."] = ""; +$a->strings["The Directory page lets you find other people in this network or other federated sites. Look for a Connect or Follow link on their profile page. Provide your own Identity Address if requested."] = "Strona Katalog umożliwia znalezienie innych osób w tej sieci lub innych witrynach stowarzyszonych. Poszukaj łącza Połącz lub Śledź na stronie profilu. Jeśli chcesz, podaj swój własny adres tożsamości."; $a->strings["Finding New People"] = "Poszukiwanie Nowych Ludzi"; -$a->strings["On the side panel of the Contacts page are several tools to find new friends. We can match people by interest, look up people by name or interest, and provide suggestions based on network relationships. On a brand new site, friend suggestions will usually begin to be populated within 24 hours."] = "Na bocznym panelu strony Kontaktów znajduje się kilka narzędzi do znajdowania nowych przyjaciół. Możemy dopasować osoby według zainteresowań, wyszukiwać osoby według nazwisk i zainteresowań oraz dostarczać sugestie oparte na relacjach sieciowych. Na zupełnie nowej stronie sugestie znajomych zwykle zaczynają być wypełniane w ciągu 24 godzin."; +$a->strings["On the side panel of the Contacts page are several tools to find new friends. We can match people by interest, look up people by name or interest, and provide suggestions based on network relationships. On a brand new site, friend suggestions will usually begin to be populated within 24 hours."] = "Na bocznym panelu strony Kontaktów znajduje się kilka narzędzi do znajdowania nowych przyjaciół. Możemy dopasować osoby według zainteresowań, wyszukiwać osoby według nazwisk i zainteresowań oraz dostarczać sugestie oparte na relacjach sieciowych. Na zupełnie nowej stronie sugestie znajomych zwykle zaczynają być wypełniane w ciągu 24 godzin"; $a->strings["Groups"] = "Grupy"; $a->strings["Group Your Contacts"] = "Grupuj Swoje kontakty"; $a->strings["Once you have made some friends, organize them into private conversation groups from the sidebar of your Contacts page and then you can interact with each group privately on your Network page."] = "Gdy zaprzyjaźnisz się z przyjaciółmi, uporządkuj je w prywatne grupy konwersacji na pasku bocznym na stronie Kontakty, a następnie możesz wchodzić w interakcje z każdą grupą prywatnie na stronie Sieć."; $a->strings["Why Aren't My Posts Public?"] = "Dlaczego moje posty nie są publiczne?"; $a->strings["Friendica respects your privacy. By default, your posts will only show up to people you've added as friends. For more information, see the help section from the link above."] = "Friendica szanuje Twoją prywatność. Domyślnie Twoje wpisy będą wyświetlane tylko osobom, które dodałeś jako znajomi. Aby uzyskać więcej informacji, zobacz sekcję pomocy na powyższym łączu."; -$a->strings["Getting Help"] = "Otrzymywanie pomocy"; -$a->strings["Go to the Help Section"] = "Idź do części o pomocy"; +$a->strings["Getting Help"] = "Otrzymaj pomoc"; +$a->strings["Go to the Help Section"] = "Przejdź do sekcji pomocy"; $a->strings["Our help pages may be consulted for detail on other program features and resources."] = "Na naszych stronach pomocy można znaleźć szczegółowe informacje na temat innych funkcji programu i zasobów."; $a->strings["Visit %s's profile [%s]"] = "Obejrzyj %s's profil [%s]"; $a->strings["Edit contact"] = "Edytuj kontakt"; $a->strings["Contacts who are not members of a group"] = "Kontakty spoza członków grupy"; -$a->strings["Not Extended"] = ""; +$a->strings["Not Extended"] = "Nie przedłużony"; $a->strings["Resubscribing to OStatus contacts"] = "Ponowne subskrybowanie kontaktów OStatus"; $a->strings["Error"] = "Błąd"; $a->strings["Done"] = "Gotowe"; @@ -406,51 +406,51 @@ $a->strings["%1\$s welcomes %2\$s"] = "%1\$s witamy %2\$s"; $a->strings["This is Friendica, version"] = "To jest Friendica, wersja"; $a->strings["running at web location"] = "otwierane na serwerze"; $a->strings["Please visit Friendi.ca to learn more about the Friendica project."] = "Odwiedź stronę Friendi.ca aby dowiedzieć się więcej o projekcie Friendica."; -$a->strings["Bug reports and issues: please visit"] = "Reportowanie błędów i problemów: proszę odwiedź"; -$a->strings["the bugtracker at github"] = ""; +$a->strings["Bug reports and issues: please visit"] = "Raporty o błędach i problemy: odwiedź stronę"; +$a->strings["the bugtracker at github"] = "bugtracker na github"; $a->strings["Suggestions, praise, donations, etc. - please email \"Info\" at Friendica - dot com"] = "Sugestie, pochwały, darowizny, itp. - napisz e-mail \"Info\" do Friendica - dot com"; $a->strings["Installed addons/apps:"] = "Zainstalowane dodatki/aplikacje:"; $a->strings["No installed addons/apps"] = "Brak zainstalowanych dodatków/aplikacji"; -$a->strings["On this server the following remote servers are blocked."] = ""; +$a->strings["On this server the following remote servers are blocked."] = "Na tym serwerze następujące serwery zdalne są blokowane."; $a->strings["Blocked domain"] = "Zablokowana domena"; -$a->strings["Reason for the block"] = ""; +$a->strings["Reason for the block"] = "Powód blokowania"; $a->strings["No keywords to match. Please add keywords to your default profile."] = "Brak słów-kluczy do wyszukania. Dodaj słowa-klucze do swojego domyślnego profilu."; $a->strings["is interested in:"] = "interesuje się:"; -$a->strings["Profile Match"] = "Profil zgodny "; -$a->strings["No matches"] = "brak dopasowań"; -$a->strings["Invalid request identifier."] = "Niewłaściwy identyfikator wymagania."; +$a->strings["Profile Match"] = "Dopasowanie profilu"; +$a->strings["No matches"] = "Brak wyników"; +$a->strings["Invalid request identifier."] = "Nieprawidłowy identyfikator żądania."; $a->strings["Discard"] = "Odrzuć"; $a->strings["Ignore"] = "Ignoruj"; $a->strings["Notifications"] = "Powiadomienia"; -$a->strings["Network Notifications"] = "Powiadomienia z sieci"; +$a->strings["Network Notifications"] = "Powiadomienia sieciowe"; $a->strings["System Notifications"] = "Powiadomienia systemowe"; $a->strings["Personal Notifications"] = "Prywatne powiadomienia"; -$a->strings["Home Notifications"] = "Powiadomienia z instancji"; +$a->strings["Home Notifications"] = "Powiadomienia domowe"; $a->strings["Show Ignored Requests"] = "Pokaż ignorowane żądania"; -$a->strings["Hide Ignored Requests"] = "Ukryj ignorowane żądania"; -$a->strings["Notification type: "] = "Typ zawiadomień:"; +$a->strings["Hide Ignored Requests"] = "Ukryj zignorowane prośby"; +$a->strings["Notification type: "] = "Typ powiadomienia:"; $a->strings["suggested by %s"] = "zaproponowane przez %s"; $a->strings["Hide this contact from others"] = "Ukryj ten kontakt przed innymi"; -$a->strings["Post a new friend activity"] = "Pisz o nowej działalności przyjaciela"; -$a->strings["if applicable"] = "jeśli odpowiednie"; +$a->strings["Post a new friend activity"] = "Opublikuj aktywność nowego znajomego"; +$a->strings["if applicable"] = "jeśli dotyczy"; $a->strings["Approve"] = "Zatwierdź"; $a->strings["Claims to be known to you: "] = "Twierdzi, że go znasz:"; $a->strings["yes"] = "tak"; $a->strings["no"] = "nie"; $a->strings["Shall your connection be bidirectional or not?"] = "Czy twoje połączenie ma być dwukierunkowe, czy nie?"; -$a->strings["Accepting %s as a friend allows %s to subscribe to your posts, and you will also receive updates from them in your news feed."] = ""; -$a->strings["Accepting %s as a subscriber allows them to subscribe to your posts, but you will not receive updates from them in your news feed."] = ""; -$a->strings["Accepting %s as a sharer allows them to subscribe to your posts, but you will not receive updates from them in your news feed."] = ""; +$a->strings["Accepting %s as a friend allows %s to subscribe to your posts, and you will also receive updates from them in your news feed."] = "Przyjmowanie %s jako znajomego pozwala %s zasubskrybować twoje posty, a także otrzymywać od nich aktualizacje w swoim kanale wiadomości."; +$a->strings["Accepting %s as a subscriber allows them to subscribe to your posts, but you will not receive updates from them in your news feed."] = "Zaakceptowanie %s jako subskrybenta umożliwia im subskrybowanie Twoich postów, ale nie otrzymasz od nich aktualizacji w swoim kanale wiadomości."; +$a->strings["Accepting %s as a sharer allows them to subscribe to your posts, but you will not receive updates from them in your news feed."] = "Akceptowanie %s jako udostępniający pozwala im subskrybować twoje posty, ale nie otrzymasz od nich aktualizacji w swoim kanale wiadomości."; $a->strings["Friend"] = "Znajomy"; $a->strings["Sharer"] = "Udostępniający/a"; -$a->strings["Subscriber"] = ""; +$a->strings["Subscriber"] = "Subskrybent"; $a->strings["Location:"] = "Lokalizacja"; $a->strings["About:"] = "O:"; $a->strings["Tags:"] = "Tagi:"; $a->strings["Gender:"] = "Płeć:"; -$a->strings["Profile URL"] = ""; +$a->strings["Profile URL"] = "Adres URL profilu"; $a->strings["Network:"] = "Sieć:"; -$a->strings["No introductions."] = "Brak wstępu."; +$a->strings["No introductions."] = "Brak dostępu."; $a->strings["Show unread"] = "Pokaż nieprzeczytane"; $a->strings["Show all"] = "Pokaż wszystko"; $a->strings["No more %s notifications."] = "Nigdy więcej %s powiadomień."; @@ -460,57 +460,57 @@ $a->strings["Login failed."] = "Niepowodzenie logowania"; $a->strings["Profile not found."] = "Nie znaleziono profilu."; $a->strings["This may occasionally happen if contact was requested by both persons and it has already been approved."] = "Może się to zdarzyć, gdy kontakt został zgłoszony przez obie osoby i został już zatwierdzony."; $a->strings["Response from remote site was not understood."] = "Odpowiedź do zdalnej strony nie została zrozumiana"; -$a->strings["Unexpected response from remote site: "] = "Nieoczekiwana odpowiedź od strony zdalnej"; -$a->strings["Confirmation completed successfully."] = "Potwierdzenie ukończone poprawnie"; -$a->strings["Temporary failure. Please wait and try again."] = "Tymczasowo uszkodzone. Proszę poczekać i spróbować później."; -$a->strings["Introduction failed or was revoked."] = "Nieudane lub unieważnione wprowadzenie."; -$a->strings["Remote site reported: "] = "Zdalna strona zgłoszona:"; +$a->strings["Unexpected response from remote site: "] = "Nieoczekiwana odpowiedź od strony zdalnej:"; +$a->strings["Confirmation completed successfully."] = "Potwierdzenie zostało pomyślnie zakończone."; +$a->strings["Temporary failure. Please wait and try again."] = "Tymczasowa awaria. Proszę czekać i spróbuj ponownie."; +$a->strings["Introduction failed or was revoked."] = "Wprowadzenie nie powiodło się lub zostało odwołane."; +$a->strings["Remote site reported: "] = "Zdalna witryna zgłoszona:"; $a->strings["Unable to set contact photo."] = "Nie można ustawić zdjęcia kontaktu."; $a->strings["No user record found for '%s' "] = "Nie znaleziono użytkownika dla '%s'"; -$a->strings["Our site encryption key is apparently messed up."] = "Klucz kodujący jest najwyraźniej zepsuty"; -$a->strings["Empty site URL was provided or URL could not be decrypted by us."] = "Został dostarczony pusty URL lub nie może zostać rozszyfrowany przez nas."; +$a->strings["Our site encryption key is apparently messed up."] = "Klucz kodujący jest najwyraźniej uszkodzony."; +$a->strings["Empty site URL was provided or URL could not be decrypted by us."] = "Został podany pusty adres URL witryny lub nie można go odszyfrować."; $a->strings["Contact record was not found for you on our site."] = "Nie znaleziono kontaktu na naszej stronie"; $a->strings["Site public key not available in contact record for URL %s."] = "Publiczny klucz witryny jest niedostępny w rekordzie kontaktu dla adresu URL %s"; -$a->strings["The ID provided by your system is a duplicate on our system. It should work if you try again."] = "ID dostarczone przez Twój system jest już w naszeym systemie. Powinno zadziałać jeżeli spróbujesz ponownie."; -$a->strings["Unable to set your contact credentials on our system."] = "Niezdolny do ustalenie tożsamości twoich kontaktów w naszym systemie"; -$a->strings["Unable to update your contact profile details on our system"] = "Niezdolny do aktualizacji szczegółowych danych profilowych twoich kontaktów w naszym systemie"; +$a->strings["The ID provided by your system is a duplicate on our system. It should work if you try again."] = "Identyfikator dostarczony przez Twój system jest duplikatem w naszym systemie. Powinien działać, jeśli spróbujesz ponownie."; +$a->strings["Unable to set your contact credentials on our system."] = "Nie można ustawić danych kontaktowych w naszym systemie."; +$a->strings["Unable to update your contact profile details on our system"] = "Nie można zaktualizować danych Twojego profilu kontaktowego w naszym systemie"; $a->strings["[Name Withheld]"] = "[Nazwa wstrzymana]"; $a->strings["%1\$s has joined %2\$s"] = "%1\$s dołączył/a do %2\$s"; $a->strings["Total invitation limit exceeded."] = "Przekroczono limit zaproszeń ogółem."; $a->strings["%s : Not a valid email address."] = "%s : Niepoprawny adres email."; $a->strings["Please join us on Friendica"] = "Dołącz do nas na Friendica"; $a->strings["Invitation limit exceeded. Please contact your site administrator."] = "Przekroczono limit zaproszeń. Skontaktuj się z administratorem witryny."; -$a->strings["%s : Message delivery failed."] = "%s : Dostarczenie wiadomości nieudane."; +$a->strings["%s : Message delivery failed."] = "%s : Nie udało się dostarczyć wiadomości."; $a->strings["%d message sent."] = [ 0 => "%d wiadomość wysłana.", 1 => "%d wiadomości wysłane.", 2 => "%d wysłano .", 3 => "%d wysłano .", ]; -$a->strings["You have no more invitations available"] = "Nie masz więcej zaproszeń"; -$a->strings["Visit %s for a list of public sites that you can join. Friendica members on other sites can all connect with each other, as well as with members of many other social networks."] = ""; +$a->strings["You have no more invitations available"] = "Nie masz już dostępnych zaproszeń"; +$a->strings["Visit %s for a list of public sites that you can join. Friendica members on other sites can all connect with each other, as well as with members of many other social networks."] = "Odwiedź %s listę publicznych witryn, do których możesz dołączyć. Członkowie Friendica na innych stronach mogą łączyć się ze sobą, jak również z członkami wielu innych sieci społecznościowych."; $a->strings["To accept this invitation, please visit and register at %s or any other public Friendica website."] = "Aby zaakceptować to zaproszenie, odwiedź i zarejestruj się %s lub w dowolnej innej publicznej witrynie internetowej Friendica."; -$a->strings["Friendica sites all inter-connect to create a huge privacy-enhanced social web that is owned and controlled by its members. They can also connect with many traditional social networks. See %s for a list of alternate Friendica sites you can join."] = ""; -$a->strings["Our apologies. This system is not currently configured to connect with other public sites or invite members."] = "Nasze przeprosiny. Ten system nie jest obecnie skonfigurowany do łączenia się z innymi publicznymi witrynami lub zapraszania członków."; -$a->strings["Friendica sites all inter-connect to create a huge privacy-enhanced social web that is owned and controlled by its members. They can also connect with many traditional social networks."] = ""; -$a->strings["To accept this invitation, please visit and register at %s."] = ""; -$a->strings["Send invitations"] = "Wyślij zaproszenia"; +$a->strings["Friendica sites all inter-connect to create a huge privacy-enhanced social web that is owned and controlled by its members. They can also connect with many traditional social networks. See %s for a list of alternate Friendica sites you can join."] = "Strony Friendica łączą się ze sobą, tworząc ogromną sieć społecznościową o zwiększonej prywatności, która jest własnością i jest kontrolowana przez jej członków. Mogą również łączyć się z wieloma tradycyjnymi sieciami społecznościowymi. Zobacz %s listę alternatywnych witryn Friendica, do których możesz dołączyć."; +$a->strings["Our apologies. This system is not currently configured to connect with other public sites or invite members."] = "Przepraszamy. System nie jest obecnie skonfigurowany do łączenia się z innymi publicznymi witrynami lub zapraszania członków."; +$a->strings["Friendica sites all inter-connect to create a huge privacy-enhanced social web that is owned and controlled by its members. They can also connect with many traditional social networks."] = "Strony Friendica łączą się ze sobą, tworząc ogromną sieć społecznościową o zwiększonej prywatności, która jest własnością i jest kontrolowana przez jej członków. Mogą również łączyć się z wieloma tradycyjnymi sieciami społecznościowymi."; +$a->strings["To accept this invitation, please visit and register at %s."] = "Aby zaakceptować to zaproszenie, odwiedź stronę i zarejestruj się na stronie %s."; +$a->strings["Send invitations"] = "Wyślij zaproszenie"; $a->strings["Enter email addresses, one per line:"] = "Wprowadź adresy email, jeden na linijkę:"; $a->strings["Your message:"] = "Twoja wiadomość:"; -$a->strings["You are cordially invited to join me and other close friends on Friendica - and help us to create a better social web."] = ""; -$a->strings["You will need to supply this invitation code: \$invite_code"] = ""; -$a->strings["Once you have registered, please connect with me via my profile page at:"] = "Gdy już się zarejestrujesz, skontaktuj się ze mną przez moją stronkę profilową :"; -$a->strings["For more information about the Friendica project and why we feel it is important, please visit http://friendi.ca"] = ""; +$a->strings["You are cordially invited to join me and other close friends on Friendica - and help us to create a better social web."] = "Serdecznie zapraszam do przyłączenia się do mnie i innych bliskich znajomych na stronie Friendica - i pomóż nam stworzyć lepszą sieć społecznościową."; +$a->strings["You will need to supply this invitation code: \$invite_code"] = "Musisz podać ten kod zaproszenia: \$invite_code"; +$a->strings["Once you have registered, please connect with me via my profile page at:"] = "Po rejestracji połącz się ze mną na stronie mojego profilu pod adresem:"; +$a->strings["For more information about the Friendica project and why we feel it is important, please visit http://friendi.ca"] = "Aby uzyskać więcej informacji na temat projektu Friendica i dlaczego uważamy, że jest to ważne, odwiedź http://friendi.ca"; $a->strings["Manage Identities and/or Pages"] = "Zarządzaj Tożsamościami i/lub Stronami."; -$a->strings["Toggle between different identities or community/group pages which share your account details or which you have been granted \"manage\" permissions"] = ""; +$a->strings["Toggle between different identities or community/group pages which share your account details or which you have been granted \"manage\" permissions"] = "Przełącz między różnymi tożsamościami lub stronami społeczność/grupy, które udostępniają dane Twojego konta lub które otrzymałeś uprawnienia \"zarządzaj\""; $a->strings["Select an identity to manage: "] = "Wybierz tożsamość do zarządzania:"; $a->strings["Invalid request."] = "Nieprawidłowe żądanie."; -$a->strings["Sorry, maybe your upload is bigger than the PHP configuration allows"] = ""; -$a->strings["Or - did you try to upload an empty file?"] = ""; -$a->strings["File exceeds size limit of %s"] = ""; +$a->strings["Sorry, maybe your upload is bigger than the PHP configuration allows"] = "Przepraszam, może twój przesyłany plik jest większy niż pozwala konfiguracja PHP"; +$a->strings["Or - did you try to upload an empty file?"] = "Lub - czy próbowałeś załadować pusty plik?"; +$a->strings["File exceeds size limit of %s"] = "Plik przekracza limit rozmiaru wynoszący %s"; $a->strings["File upload failed."] = "Przesyłanie pliku nie powiodło się."; $a->strings["This introduction has already been accepted."] = "To wprowadzenie zostało już zaakceptowane."; -$a->strings["Profile location is not valid or does not contain profile information."] = "Położenie profilu jest niepoprawne lub nie zawiera żadnych informacji."; +$a->strings["Profile location is not valid or does not contain profile information."] = "Lokalizacja profilu jest nieprawidłowa lub nie zawiera informacji o profilu."; $a->strings["Warning: profile location has no identifiable owner name."] = "Ostrzeżenie: położenie profilu ma taką samą nazwę jak użytkownik."; $a->strings["Warning: profile location has no profile photo."] = "Ostrzeżenie: położenie profilu nie zawiera zdjęcia."; $a->strings["%d required parameter was not found at the given location"] = [ @@ -525,14 +525,14 @@ $a->strings["Profile unavailable."] = "Profil niedostępny."; $a->strings["%s has received too many connection requests today."] = "%s otrzymał dziś zbyt wiele żądań połączeń."; $a->strings["Spam protection measures have been invoked."] = "Ochrona przed spamem została wywołana."; $a->strings["Friends are advised to please try again in 24 hours."] = "Przyjaciele namawiają do spróbowania za 24h."; -$a->strings["Invalid locator"] = "Niewłaściwy lokalizator "; +$a->strings["Invalid locator"] = "Nieprawidłowy lokalizator"; $a->strings["You have already introduced yourself here."] = "Już się tu przedstawiłeś."; $a->strings["Apparently you are already friends with %s."] = "Widocznie jesteście już znajomymi z %s"; $a->strings["Invalid profile URL."] = "Zły adres URL profilu."; $a->strings["Disallowed profile URL."] = "Nie dozwolony adres URL profilu."; -$a->strings["Failed to update contact record."] = "Aktualizacja nagrania kontaktu nie powiodła się."; +$a->strings["Failed to update contact record."] = "Aktualizacja rekordu kontaktu nie powiodła się."; $a->strings["Your introduction has been sent."] = "Twoje dane zostały wysłane."; -$a->strings["Remote subscription can't be done for your network. Please subscribe directly on your system."] = ""; +$a->strings["Remote subscription can't be done for your network. Please subscribe directly on your system."] = "Zdalnej subskrypcji nie można wykonać dla swojej sieci. Proszę zasubskrybuj bezpośrednio w swoim systemie."; $a->strings["Please login to confirm introduction."] = "Proszę zalogować się do potwierdzenia wstępu."; $a->strings["Incorrect identity currently logged in. Please login to this profile."] = "Niepoprawna tożsamość obecnego użytkownika. Proszę zalogować się na tego użytkownika. "; $a->strings["Confirm"] = "Potwierdź"; @@ -541,55 +541,55 @@ $a->strings["Welcome home %s."] = "Welcome home %s."; $a->strings["Please confirm your introduction/connection request to %s."] = "Proszę potwierdzić swój wstęp/prośbę o połączenie do %s."; $a->strings["Public access denied."] = "Publiczny dostęp zabroniony"; $a->strings["Please enter your 'Identity Address' from one of the following supported communications networks:"] = "Proszę podaj swój \"Adres tożsamości \" z jednej z możliwych wspieranych sieci komunikacyjnych ."; -$a->strings["If you are not yet a member of the free social web, follow this link to find a public Friendica site and join us today."] = ""; +$a->strings["If you are not yet a member of the free social web, follow this link to find a public Friendica site and join us today."] = "Jeśli nie jesteś jeszcze członkiem darmowej strony społecznościowej, kliknij ten link, aby znaleźć publiczną witrynę Friendica i dołącz do nas już dziś ."; $a->strings["Friend/Connection Request"] = "Przyjaciel/Prośba o połączenie"; -$a->strings["Examples: jojo@demo.friendica.com, http://demo.friendica.com/profile/jojo, testuser@gnusocial.de"] = ""; -$a->strings["Please answer the following:"] = "Proszę odpowiedzieć na poniższe:"; +$a->strings["Examples: jojo@demo.friendica.com, http://demo.friendica.com/profile/jojo, testuser@gnusocial.de"] = "Przykłady: jojo@demo.friendica.com, http://demo.friendica.com/profile/jojo, testuser@gnusocial.de"; +$a->strings["Please answer the following:"] = "Proszę odpowiedzieć na następujące pytania:"; $a->strings["Does %s know you?"] = "Czy %s Cię zna?"; $a->strings["Add a personal note:"] = "Dodaj osobistą notkę:"; $a->strings["Friendica"] = "Friendica"; $a->strings["GNU Social (Pleroma, Mastodon)"] = ""; $a->strings["Diaspora (Socialhome, Hubzilla)"] = ""; -$a->strings[" - please do not use this form. Instead, enter %s into your Diaspora search bar."] = "- proszę wyraź to inaczej . Zamiast tego ,wprowadź %s do swojej belki wyszukiwarki."; -$a->strings["Your Identity Address:"] = "Twój zidentyfikowany adres:"; +$a->strings[" - please do not use this form. Instead, enter %s into your Diaspora search bar."] = "- proszę nie używać tego formularza. Zamiast tego %s wejdź na pasek wyszukiwania Diaspora. do swojej belki wyszukiwarki."; +$a->strings["Your Identity Address:"] = "Twój adres tożsamości:"; $a->strings["Submit Request"] = "Wyślij zgłoszenie"; $a->strings["- select -"] = "- wybierz -"; $a->strings["l F d, Y \\@ g:i A"] = ""; $a->strings["Time Conversion"] = "Zmiana czasu"; -$a->strings["Friendica provides this service for sharing events with other networks and friends in unknown timezones."] = ""; +$a->strings["Friendica provides this service for sharing events with other networks and friends in unknown timezones."] = "Friendica udostępnia tę usługę do udostępniania wydarzeń innym sieciom i znajomym w nieznanych strefach czasowych."; $a->strings["UTC time: %s"] = "Czas UTC %s"; $a->strings["Current timezone: %s"] = "Obecna strefa czasowa: %s"; $a->strings["Converted localtime: %s"] = "Zmień strefę czasową: %s"; $a->strings["Please select your timezone:"] = "Wybierz swoją strefę czasową:"; $a->strings["No valid account found."] = "Nie znaleziono ważnego konta."; $a->strings["Password reset request issued. Check your email."] = "Prośba o zresetowanie hasła została zatwierdzona. Sprawdź swój adres email."; -$a->strings["\n\t\tDear %1\$s,\n\t\t\tA request was recently received at \"%2\$s\" to reset your account\n\t\tpassword. In order to confirm this request, please select the verification link\n\t\tbelow or paste it into your web browser address bar.\n\n\t\tIf you did NOT request this change, please DO NOT follow the link\n\t\tprovided and ignore and/or delete this email, the request will expire shortly.\n\n\t\tYour password will not be changed unless we can verify that you\n\t\tissued this request."] = ""; -$a->strings["\n\t\tFollow this link soon to verify your identity:\n\n\t\t%1\$s\n\n\t\tYou will then receive a follow-up message containing the new password.\n\t\tYou may change that password from your account settings page after logging in.\n\n\t\tThe login details are as follows:\n\n\t\tSite Location:\t%2\$s\n\t\tLogin Name:\t%3\$s"] = ""; +$a->strings["\n\t\tDear %1\$s,\n\t\t\tA request was recently received at \"%2\$s\" to reset your account\n\t\tpassword. In order to confirm this request, please select the verification link\n\t\tbelow or paste it into your web browser address bar.\n\n\t\tIf you did NOT request this change, please DO NOT follow the link\n\t\tprovided and ignore and/or delete this email, the request will expire shortly.\n\n\t\tYour password will not be changed unless we can verify that you\n\t\tissued this request."] = "\n\t\tDrodzy %1\$s, \n\t\t\tOtrzymano niedawno prośbę o ''%2\$s\" zresetowanie konta \n\t\thasło. Aby potwierdzić tę prośbę, wybierz link weryfikacyjny \n\t\tponiżej lub wklej go na pasek adresu przeglądarki internetowej. \n \n\t\tJeśli NIE poprosiłeś o tę zmianę, NIE wykonuj tego linku \n\t\tpod warunkiem, że zignorujesz i/lub usuniesz ten e-mail, prośba wkrótce wygaśnie. \n \n\t\tTwoje hasło nie zostanie zmienione, chyba że będziemy mogli to potwierdzić \n\t\twydał to żądanie."; +$a->strings["\n\t\tFollow this link soon to verify your identity:\n\n\t\t%1\$s\n\n\t\tYou will then receive a follow-up message containing the new password.\n\t\tYou may change that password from your account settings page after logging in.\n\n\t\tThe login details are as follows:\n\n\t\tSite Location:\t%2\$s\n\t\tLogin Name:\t%3\$s"] = "\nWkrótce skorzystaj z tego linku, aby zweryfikować swoją tożsamość: \n\n\t\t%1\$s\n\n\t\tOtrzymasz następnie komunikat uzupełniający zawierający nowe hasło. \n\t\tMożesz zmienić to hasło ze strony ustawień swojego konta po zalogowaniu. \n \n\t\tDane logowania są następujące: \n \nLokalizacja strony: \t%2\$s\nNazwa użytkownika:\t%3\$s"; $a->strings["Password reset requested at %s"] = "Prośba o reset hasła na %s"; $a->strings["Request could not be verified. (You may have previously submitted it.) Password reset failed."] = "Prośba nie może być zweryfikowana. (Mogłeś już ją poprzednio wysłać.) Reset hasła nie powiódł się."; -$a->strings["Request has expired, please make a new one."] = ""; +$a->strings["Request has expired, please make a new one."] = "Żądanie wygasło. Zrób nowe."; $a->strings["Forgot your Password?"] = "Zapomniałeś hasła?"; $a->strings["Enter your email address and submit to have your password reset. Then check your email for further instructions."] = "Wpisz swój adres email i wyślij, aby zresetować hasło. Później sprawdź swojego emaila w celu uzyskania dalszych instrukcji."; $a->strings["Nickname or Email: "] = "Pseudonim lub Email:"; $a->strings["Reset"] = "Zresetuj"; $a->strings["Password Reset"] = "Zresetuj hasło"; -$a->strings["Your password has been reset as requested."] = "Twoje hasło zostało zresetowane na twoje życzenie."; +$a->strings["Your password has been reset as requested."] = "Twoje hasło zostało zresetowane zgodnie z żądaniem."; $a->strings["Your new password is"] = "Twoje nowe hasło to"; -$a->strings["Save or copy your new password - and then"] = "Zapisz lub skopiuj swoje nowe hasło - i wtedy"; -$a->strings["click here to login"] = "Kliknij tutaj aby zalogować"; +$a->strings["Save or copy your new password - and then"] = "Zapisz lub skopiuj nowe hasło - a następnie"; +$a->strings["click here to login"] = "Kliknij tutaj aby się zalogować"; $a->strings["Your password may be changed from the Settings page after successful login."] = "Twoje hasło może być zmienione w Ustawieniach po udanym zalogowaniu."; -$a->strings["\n\t\t\tDear %1\$s,\n\t\t\t\tYour password has been changed as requested. Please retain this\n\t\t\tinformation for your records (or change your password immediately to\n\t\t\tsomething that you will remember).\n\t\t"] = ""; -$a->strings["\n\t\t\tYour login details are as follows:\n\n\t\t\tSite Location:\t%1\$s\n\t\t\tLogin Name:\t%2\$s\n\t\t\tPassword:\t%3\$s\n\n\t\t\tYou may change that password from your account settings page after logging in.\n\t\t"] = ""; +$a->strings["\n\t\t\tDear %1\$s,\n\t\t\t\tYour password has been changed as requested. Please retain this\n\t\t\tinformation for your records (or change your password immediately to\n\t\t\tsomething that you will remember).\n\t\t"] = "\n\t\t\tDrogi %1\$s, \n\t\t\t\tTwoje hasło zostało zmienione zgodnie z życzeniem. Proszę, zachowaj te \n\t\t\tinformacje dotyczące twoich rekordów (lub natychmiast zmień hasło na \n\t\t\tcoś, co zapamiętasz).\n\t\t"; +$a->strings["\n\t\t\tYour login details are as follows:\n\n\t\t\tSite Location:\t%1\$s\n\t\t\tLogin Name:\t%2\$s\n\t\t\tPassword:\t%3\$s\n\n\t\t\tYou may change that password from your account settings page after logging in.\n\t\t"] = "\n\t\t\tDane logowania są następujące:\n\n\t\t\tLokalizacja witryny:\t%1\$s\n\t\t\tNazwa użytkownika:\t%2\$s\n\t\t\tHasło:\t%3\$s\n\n\t\t\tMożesz zmienić hasło na stronie ustawień konta po zalogowaniu.\n\t\t"; $a->strings["Your password has been changed at %s"] = "Twoje hasło zostało zmienione na %s"; $a->strings["No more system notifications."] = "Nie ma więcej powiadomień systemowych."; $a->strings["{0} wants to be your friend"] = "{0} chce być Twoim znajomym"; -$a->strings["{0} sent you a message"] = "{0} wysyła Ci wiadomość"; -$a->strings["{0} requested registration"] = "{0} żądana rejestracja"; +$a->strings["{0} sent you a message"] = "{0} wysłałem Ci wiadomość"; +$a->strings["{0} requested registration"] = "{0} wymagana rejestracja"; $a->strings["Poke/Prod"] = ""; $a->strings["poke, prod or do other things to somebody"] = ""; $a->strings["Recipient"] = "Odbiorca"; -$a->strings["Choose what you wish to do to recipient"] = ""; -$a->strings["Make this post private"] = "Zrób ten post prywatnym"; +$a->strings["Choose what you wish to do to recipient"] = "Wybierz, co chcesz zrobić"; +$a->strings["Make this post private"] = "Ustaw ten post jako prywatny"; $a->strings["Only logged in users are permitted to perform a probing."] = "Tylko zalogowani użytkownicy mogą wykonywać sondowanie."; $a->strings["Permission denied"] = "Odmowa dostępu"; $a->strings["Invalid profile identifier."] = "Nieprawidłowa nazwa użytkownika."; @@ -598,20 +598,20 @@ $a->strings["Click on a contact to add or remove."] = "Kliknij na kontakt w celu $a->strings["Visible To"] = "Widoczne dla"; $a->strings["All Contacts (with secure profile access)"] = "Wszystkie kontakty (z bezpiecznym dostępem do profilu)"; $a->strings["Account approved."] = "Konto zatwierdzone."; -$a->strings["Registration revoked for %s"] = "Rejestracja dla %s odwołana"; +$a->strings["Registration revoked for %s"] = "Rejestracja odwołana dla %s"; $a->strings["Please login."] = "Proszę się zalogować."; $a->strings["Remove My Account"] = "Usuń konto"; -$a->strings["This will completely remove your account. Once this has been done it is not recoverable."] = "Kompletne usunięcie konta. Jeżeli zostanie wykonane, konto nie może zostać odzyskane."; +$a->strings["This will completely remove your account. Once this has been done it is not recoverable."] = "Spowoduje to całkowite usunięcie Twojego konta. Po wykonaniu tej czynności nie można jej odzyskać."; $a->strings["Please enter your password for verification:"] = "Wprowadź hasło w celu weryfikacji."; $a->strings["Remove term"] = "Usuń wpis"; $a->strings["Saved Searches"] = "Zapisane wyszukiwania"; -$a->strings["Only logged in users are permitted to perform a search."] = ""; +$a->strings["Only logged in users are permitted to perform a search."] = "Tylko zalogowani użytkownicy mogą wyszukiwać."; $a->strings["Too Many Requests"] = "Zbyt dużo próśb"; $a->strings["Only one search per minute is permitted for not logged in users."] = "Dla niezalogowanych użytkowników dozwolone jest tylko jedno wyszukiwanie na minutę."; $a->strings["No results."] = "Brak wyników."; $a->strings["Items tagged with: %s"] = "Przedmioty oznaczone tagiem: %s"; -$a->strings["Results for: %s"] = ""; -$a->strings["%1\$s is following %2\$s's %3\$s"] = ""; +$a->strings["Results for: %s"] = "Wyniki dla: %s"; +$a->strings["%1\$s is following %2\$s's %3\$s"] = "%1\$skolejny %2\$s %3\$s "; $a->strings["Tag removed"] = "Tag usunięty"; $a->strings["Remove Item Tag"] = "Usuń pozycję Tag"; $a->strings["Select a tag to remove: "] = "Wybierz tag do usunięcia"; @@ -627,7 +627,7 @@ $a->strings["Image exceeds size limit of %s"] = "Obraz przekracza limit rozmiaru $a->strings["Unable to process image."] = "Przetwarzanie obrazu nie powiodło się."; $a->strings["Wall Photos"] = "Tablica zdjęć"; $a->strings["Image upload failed."] = "Przesyłanie obrazu nie powiodło się"; -$a->strings["Number of daily wall messages for %s exceeded. Message failed."] = "Dzienny limit wiadomości na murze dla %s został przekroczony. Wiadomość została odrzucona."; +$a->strings["Number of daily wall messages for %s exceeded. Message failed."] = "Dzienny limit wiadomości %s został przekroczony. Wiadomość została odrzucona."; $a->strings["No recipient selected."] = "Nie wybrano odbiorcy."; $a->strings["Unable to check your home location."] = "Nie można sprawdzić twojej lokalizacji."; $a->strings["Message could not be sent."] = "Wiadomość nie może zostać wysłana"; @@ -635,15 +635,15 @@ $a->strings["Message collection failure."] = "Błąd zbierania komunikatów."; $a->strings["Message sent."] = "Wysłano."; $a->strings["No recipient."] = "Brak odbiorcy."; $a->strings["Send Private Message"] = "Wyślij prywatną wiadomość"; -$a->strings["If you wish for %s to respond, please check that the privacy settings on your site allow private mail from unknown senders."] = ""; +$a->strings["If you wish for %s to respond, please check that the privacy settings on your site allow private mail from unknown senders."] = "Jeśli chcesz %s odpowiedzieć, sprawdź, czy ustawienia prywatności w Twojej witrynie zezwalają na prywatne wiadomości od nieznanych nadawców."; $a->strings["To:"] = "Do:"; $a->strings["Subject:"] = "Temat:"; $a->strings["Registration successful. Please check your email for further instructions."] = "Rejestracja zakończona pomyślnie. Dalsze instrukcje zostały wysłane na twojego e-maila."; -$a->strings["Failed to send email message. Here your accout details:
    login: %s
    password: %s

    You can change your password after login."] = ""; +$a->strings["Failed to send email message. Here your accout details:
    login: %s
    password: %s

    You can change your password after login."] = "Nie udało się wysłać wiadomości e-mail. Tutaj szczegóły twojego konta:
    login: %s
    hasło: %s

    Możesz zmienić swoje hasło po zalogowaniu."; $a->strings["Registration successful."] = "Rejestracja udana."; $a->strings["Your registration can not be processed."] = "Twoja rejestracja nie może zostać przeprowadzona. "; $a->strings["Your registration is pending approval by the site owner."] = "Twoja rejestracja oczekuje na zaakceptowanie przez właściciela witryny."; -$a->strings["You may (optionally) fill in this form via OpenID by supplying your OpenID and clicking 'Register'."] = "Masz możliwość (opcjonalnie) wypełnić ten formularz przez OpenID poprzez załączenie Twojego OpenID i kliknięcie 'Zarejestruj'."; +$a->strings["You may (optionally) fill in this form via OpenID by supplying your OpenID and clicking 'Register'."] = "Możesz (opcjonalnie) wypełnić ten formularz za pośrednictwem OpenID, podając swój OpenID i klikając 'Register'."; $a->strings["If you are not familiar with OpenID, please leave that field blank and fill in the rest of the items."] = "Jeśli nie jesteś zaznajomiony z OpenID, zostaw to pole puste i uzupełnij resztę elementów."; $a->strings["Your OpenID (optional): "] = "Twój OpenID (opcjonalnie):"; $a->strings["Include your profile in member directory?"] = "Czy dołączyć twój profil do katalogu członków?"; @@ -652,24 +652,24 @@ $a->strings["Leave a message for the admin, why you want to join this node"] = " $a->strings["Membership on this site is by invitation only."] = "Członkostwo na tej stronie możliwe tylko dzięki zaproszeniu."; $a->strings["Your invitation code: "] = "Twój kod zaproszenia:"; $a->strings["Registration"] = "Rejestracja"; -$a->strings["Your Full Name (e.g. Joe Smith, real or real-looking): "] = ""; +$a->strings["Your Full Name (e.g. Joe Smith, real or real-looking): "] = "Twoje imię i nazwisko (np. Joe Smith, prawdziwy lub real-looking):"; $a->strings["Your Email Address: (Initial information will be send there, so this has to be an existing address.)"] = "Twój adres e-mail: (Informacje początkowe zostaną wysłane tam, więc musi to być istniejący adres)."; $a->strings["New Password:"] = "Nowe hasło:"; -$a->strings["Leave empty for an auto generated password."] = ""; +$a->strings["Leave empty for an auto generated password."] = "Pozostaw puste dla wygenerowanego automatycznie hasła."; $a->strings["Confirm:"] = "Potwierdź:"; -$a->strings["Choose a profile nickname. This must begin with a text character. Your profile address on this site will then be 'nickname@%s'."] = ""; +$a->strings["Choose a profile nickname. This must begin with a text character. Your profile address on this site will then be 'nickname@%s'."] = "Wybierz pseudonim profilu. Nazwa musi zaczynać się od znaku tekstowego. Twój adres profilu na tej stronie będzie wówczas 'pseudonimem%s'."; $a->strings["Choose a nickname: "] = "Wybierz pseudonim:"; $a->strings["Register"] = "Zarejestruj"; -$a->strings["Import your profile to this friendica instance"] = ""; +$a->strings["Import your profile to this friendica instance"] = "Zaimportuj swój profil do tej instancji friendica"; $a->strings["Login"] = "Login"; $a->strings["The post was created"] = "Post został utworzony"; -$a->strings["Community option not available."] = ""; +$a->strings["Community option not available."] = "Opcja wspólnotowa jest niedostępna."; $a->strings["Not available."] = "Niedostępne."; $a->strings["Local Community"] = "Lokalna społeczność"; $a->strings["Posts from local users on this server"] = "Wpisy od lokalnych użytkowników na tym serwerze"; $a->strings["Global Community"] = "Globalna społeczność"; -$a->strings["Posts from users of the whole federated network"] = ""; -$a->strings["This community stream shows all public posts received by this node. They may not reflect the opinions of this node’s users."] = ""; +$a->strings["Posts from users of the whole federated network"] = "Wpisy od użytkowników całej sieci stowarzyszonej"; +$a->strings["This community stream shows all public posts received by this node. They may not reflect the opinions of this node’s users."] = "Ten strumień społeczności pokazuje wszystkie publiczne posty otrzymane przez ten węzeł. Mogą nie odzwierciedlać opinii użytkowników tego węzła."; $a->strings["Item not found"] = "Artykuł nie znaleziony"; $a->strings["Edit post"] = "Edytuj post"; $a->strings["CC: email addresses"] = "CC: adresy e-mail"; @@ -681,21 +681,21 @@ $a->strings["Group created."] = "Grupa utworzona."; $a->strings["Could not create group."] = "Nie mogę stworzyć grupy"; $a->strings["Group not found."] = "Nie znaleziono grupy"; $a->strings["Group name changed."] = "Nazwa grupy zmieniona"; -$a->strings["Save Group"] = ""; +$a->strings["Save Group"] = "Zapisz grupę"; $a->strings["Create a group of contacts/friends."] = "Stwórz grupę znajomych."; $a->strings["Group Name: "] = "Nazwa grupy: "; $a->strings["Group removed."] = "Grupa usunięta."; $a->strings["Unable to remove group."] = "Nie można usunąć grupy."; -$a->strings["Delete Group"] = ""; +$a->strings["Delete Group"] = "Usuń grupę"; $a->strings["Group Editor"] = "Edytor grupy"; -$a->strings["Edit Group Name"] = ""; +$a->strings["Edit Group Name"] = "Edytuj nazwę grupy"; $a->strings["Members"] = "Członkowie"; $a->strings["All Contacts"] = "Wszystkie kontakty"; $a->strings["Group is empty"] = "Grupa jest pusta"; -$a->strings["Remove Contact"] = ""; -$a->strings["Add Contact"] = ""; +$a->strings["Remove Contact"] = "Usuń Kontakt"; +$a->strings["Add Contact"] = "Dodaj Kontakt"; $a->strings["New Message"] = "Nowa wiadomość"; -$a->strings["Unable to locate contact information."] = "Niezdolny do uzyskania informacji kontaktowych."; +$a->strings["Unable to locate contact information."] = "Nie można znaleźć informacji kontaktowych."; $a->strings["Messages"] = "Wiadomości"; $a->strings["Do you really want to delete this message?"] = "Czy na pewno chcesz usunąć tę wiadomość?"; $a->strings["Message deleted."] = "Wiadomość usunięta."; @@ -705,9 +705,9 @@ $a->strings["Message not available."] = "Wiadomość nie jest dostępna."; $a->strings["Delete message"] = "Usuń wiadomość"; $a->strings["D, d M Y - g:i A"] = "D, d M R - g:m AM/PM"; $a->strings["Delete conversation"] = "Usuń rozmowę"; -$a->strings["No secure communications available. You may be able to respond from the sender's profile page."] = ""; +$a->strings["No secure communications available. You may be able to respond from the sender's profile page."] = "Brak bezpiecznej komunikacji. Możesz odpowiedzieć na stronie profilu nadawcy."; $a->strings["Send Reply"] = "Odpowiedz"; -$a->strings["Unknown sender - %s"] = "Nieznany wysyłający - %s"; +$a->strings["Unknown sender - %s"] = "Nieznany nadawca - %s"; $a->strings["You and %s"] = "Ty i %s"; $a->strings["%s and You"] = "%s i ty"; $a->strings["%d message"] = [ @@ -723,9 +723,9 @@ $a->strings["Warning: This group contains %s member from a network that doesn't 2 => "", 3 => "", ]; -$a->strings["Messages in this group won't be send to these receivers."] = ""; +$a->strings["Messages in this group won't be send to these receivers."] = "Wiadomości z tej grupy nie będą wysyłane do tych odbiorców."; $a->strings["No such group"] = "Nie ma takiej grupy"; -$a->strings["Group: %s"] = ""; +$a->strings["Group: %s"] = "Grupa: %s"; $a->strings["Private messages to this person are at risk of public disclosure."] = "Prywatne wiadomości do tej osoby mogą zostać publicznie ujawnione "; $a->strings["Invalid contact."] = "Zły kontakt"; $a->strings["Commented Order"] = "Porządek wg komentarzy"; @@ -733,10 +733,10 @@ $a->strings["Sort by Comment Date"] = "Sortuj po dacie komentarza"; $a->strings["Posted Order"] = "Porządek wg wpisów"; $a->strings["Sort by Post Date"] = "Sortuj po dacie posta"; $a->strings["Personal"] = "Osobiste"; -$a->strings["Posts that mention or involve you"] = ""; +$a->strings["Posts that mention or involve you"] = "Posty, które wspominają lub angażują Ciebie"; $a->strings["New"] = "Nowy"; -$a->strings["Activity Stream - by date"] = ""; -$a->strings["Shared Links"] = "Współdzielone linki"; +$a->strings["Activity Stream - by date"] = "Strumień aktywności - według daty"; +$a->strings["Shared Links"] = "Udostępnione łącza"; $a->strings["Interesting Links"] = "Interesujące linki"; $a->strings["Starred"] = "Ulubione"; $a->strings["Favourite Posts"] = "Ulubione posty"; @@ -752,10 +752,10 @@ $a->strings["Do you really want to delete this photo album and all its photos?"] $a->strings["Delete Photo"] = "Usuń zdjęcie"; $a->strings["Do you really want to delete this photo?"] = "Czy na pewno chcesz usunąć to zdjęcie ?"; $a->strings["a photo"] = "zdjęcie"; -$a->strings["%1\$s was tagged in %2\$s by %3\$s"] = ""; -$a->strings["Image upload didn't complete, please try again"] = ""; -$a->strings["Image file is missing"] = ""; -$a->strings["Server can't accept new file upload at this time, please contact your administrator"] = ""; +$a->strings["%1\$s was tagged in %2\$s by %3\$s"] = "%1\$szostał oznaczony tagiem %2\$s przez %3\$s"; +$a->strings["Image upload didn't complete, please try again"] = "Przesyłanie zdjęć nie zostało zakończone, spróbuj ponownie"; +$a->strings["Image file is missing"] = "Brak pliku obrazu"; +$a->strings["Server can't accept new file upload at this time, please contact your administrator"] = "Serwer nie może teraz przyjąć nowego pliku, skontaktuj się z administratorem"; $a->strings["Image file is empty."] = "Plik obrazka jest pusty."; $a->strings["No photos selected"] = "Nie zaznaczono zdjęć"; $a->strings["Access to this item is restricted."] = "Dostęp do tego obiektu jest ograniczony."; @@ -783,30 +783,30 @@ $a->strings["New album name"] = "Nazwa nowego albumu"; $a->strings["Caption"] = "Zawartość"; $a->strings["Add a Tag"] = "Dodaj tag"; $a->strings["Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping"] = "Przykładowo: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping"; -$a->strings["Do not rotate"] = ""; +$a->strings["Do not rotate"] = "Nie obracaj"; $a->strings["Rotate CW (right)"] = "Obróć CW (w prawo)"; $a->strings["Rotate CCW (left)"] = "Obróć CCW (w lewo)"; $a->strings["I like this (toggle)"] = "Lubię to (zmień)"; $a->strings["I don't like this (toggle)"] = "Nie lubię (zmień)"; $a->strings["This is you"] = "To jesteś ty"; $a->strings["Comment"] = "Komentarz"; -$a->strings["Map"] = ""; +$a->strings["Map"] = "Mapa"; $a->strings["View Album"] = "Zobacz album"; $a->strings["Requested profile is not available."] = "Żądany profil jest niedostępny"; -$a->strings["%s's posts"] = ""; -$a->strings["%s's comments"] = ""; -$a->strings["%s's timeline"] = ""; -$a->strings["Access to this profile has been restricted."] = "Ograniczony dostęp do tego konta"; +$a->strings["%s's posts"] = "%s posty "; +$a->strings["%s's comments"] = "%s komentarze "; +$a->strings["%s's timeline"] = "%s oś czasu "; +$a->strings["Access to this profile has been restricted."] = "Dostęp do tego profilu został ograniczony."; $a->strings["Tips for New Members"] = "Wskazówki dla nowych użytkowników"; -$a->strings["Do you really want to delete this video?"] = ""; -$a->strings["Delete Video"] = ""; +$a->strings["Do you really want to delete this video?"] = "Czy na pewno chcesz usunąć ten film wideo?"; +$a->strings["Delete Video"] = "Usuń wideo"; $a->strings["No videos selected"] = "Nie zaznaczono filmów"; $a->strings["Recent Videos"] = "Ostatnio dodane filmy"; $a->strings["Upload New Videos"] = "Wstaw nowe filmy"; $a->strings["Theme settings updated."] = "Ustawienia szablonu zmienione."; -$a->strings["Information"] = ""; +$a->strings["Information"] = "Informacja"; $a->strings["Overview"] = "Przegląd"; -$a->strings["Federation Statistics"] = ""; +$a->strings["Federation Statistics"] = "Statystyki Organizacji"; $a->strings["Configuration"] = "Konfiguracja"; $a->strings["Site"] = "Strona"; $a->strings["Users"] = "Użytkownicy"; @@ -815,56 +815,56 @@ $a->strings["Themes"] = "Temat"; $a->strings["Additional features"] = "Dodatkowe funkcje"; $a->strings["Database"] = "Baza danych"; $a->strings["DB updates"] = "Aktualizacje DB"; -$a->strings["Inspect Queue"] = ""; +$a->strings["Inspect Queue"] = "Sprawdź kolejkę"; $a->strings["Tools"] = "Narzędzia"; -$a->strings["Contact Blocklist"] = ""; -$a->strings["Server Blocklist"] = ""; -$a->strings["Delete Item"] = ""; +$a->strings["Contact Blocklist"] = "Skontaktuj się z Blocklist"; +$a->strings["Server Blocklist"] = "Lista zablokowanych serwerów"; +$a->strings["Delete Item"] = "Usuń przedmiot"; $a->strings["Logs"] = "Logi"; -$a->strings["View Logs"] = ""; -$a->strings["Diagnostics"] = ""; +$a->strings["View Logs"] = "Zobacz rejestry"; +$a->strings["Diagnostics"] = "Diagnostyka"; $a->strings["PHP Info"] = ""; -$a->strings["probe address"] = ""; -$a->strings["check webfinger"] = ""; +$a->strings["probe address"] = "adres sondy"; +$a->strings["check webfinger"] = "sprawdź webfinger"; $a->strings["Admin"] = "Administator"; $a->strings["Addon Features"] = "Funkcje dodatkowe"; $a->strings["User registrations waiting for confirmation"] = "Rejestracje użytkownika czekają na potwierdzenie."; -$a->strings["The blocked domain"] = ""; -$a->strings["The reason why you blocked this domain."] = ""; +$a->strings["The blocked domain"] = "Zablokowana domena"; +$a->strings["The reason why you blocked this domain."] = "Powód zablokowania tej domeny."; $a->strings["Delete domain"] = "Usuń domenę"; -$a->strings["Check to delete this entry from the blocklist"] = ""; +$a->strings["Check to delete this entry from the blocklist"] = "Zaznacz, aby usunąć ten wpis z listy bloków"; $a->strings["Administration"] = "Administracja"; $a->strings["This page can be used to define a black list of servers from the federated network that are not allowed to interact with your node. For all entered domains you should also give a reason why you have blocked the remote server."] = "Na tej stronie można zdefiniować czarną listę serwerów ze stowarzyszonej sieci, które nie mogą współdziałać z danym węzłem. Dla wszystkich wprowadzonych domen powinieneś podać powód, dla którego zablokowałeś serwer zdalny."; $a->strings["The list of blocked servers will be made publically available on the /friendica page so that your users and people investigating communication problems can find the reason easily."] = "Lista zablokowanych serwerów zostanie publicznie udostępniona na stronie /friendica, dzięki czemu użytkownicy i osoby badające problemy z komunikacją mogą łatwo znaleźć przyczynę."; $a->strings["Add new entry to block list"] = "Dodaj nowy wpis do listy bloków"; -$a->strings["Server Domain"] = ""; -$a->strings["The domain of the new server to add to the block list. Do not include the protocol."] = ""; +$a->strings["Server Domain"] = "Domena serwera"; +$a->strings["The domain of the new server to add to the block list. Do not include the protocol."] = "Domena nowego serwera do dodania do listy bloków. Nie dołączaj protokołu."; $a->strings["Block reason"] = ""; -$a->strings["Add Entry"] = ""; -$a->strings["Save changes to the blocklist"] = ""; -$a->strings["Current Entries in the Blocklist"] = ""; -$a->strings["Delete entry from blocklist"] = ""; -$a->strings["Delete entry from blocklist?"] = ""; -$a->strings["Server added to blocklist."] = ""; +$a->strings["Add Entry"] = "Dodaj wpis"; +$a->strings["Save changes to the blocklist"] = "Zapisz zmiany w Liście zablokowanych"; +$a->strings["Current Entries in the Blocklist"] = "Aktualne wpisy na liście zablokowanych"; +$a->strings["Delete entry from blocklist"] = "Usuń wpis z listy zablokowanych"; +$a->strings["Delete entry from blocklist?"] = "Usunąć wpis z listy zablokowanych?"; +$a->strings["Server added to blocklist."] = "Serwer dodany do listy zablokowanych."; $a->strings["Site blocklist updated."] = "Zaktualizowano listę bloków witryny."; -$a->strings["The contact has been blocked from the node"] = ""; -$a->strings["Could not find any contact entry for this URL (%s)"] = ""; +$a->strings["The contact has been blocked from the node"] = "Kontakt został zablokowany w węźle"; +$a->strings["Could not find any contact entry for this URL (%s)"] = "Nie można znaleźć żadnego kontaktu dla tego adresu URL (%s)"; $a->strings["%s contact unblocked"] = [ 0 => "", 1 => "", 2 => "", 3 => "", ]; -$a->strings["Remote Contact Blocklist"] = ""; -$a->strings["This page allows you to prevent any message from a remote contact to reach your node."] = ""; -$a->strings["Block Remote Contact"] = ""; +$a->strings["Remote Contact Blocklist"] = "Lista zablokowanych kontaktów zdalnych"; +$a->strings["This page allows you to prevent any message from a remote contact to reach your node."] = "Ta strona pozwala zapobiec wysyłaniu do węzła wiadomości od kontaktu zdalnego."; +$a->strings["Block Remote Contact"] = "Zablokuj kontakt zdalny"; $a->strings["select all"] = "Zaznacz wszystko"; $a->strings["select none"] = "wybierz brak"; $a->strings["Block"] = "Zablokuj"; $a->strings["Unblock"] = "Odblokuj"; -$a->strings["No remote contact is blocked from this node."] = ""; -$a->strings["Blocked Remote Contacts"] = ""; -$a->strings["Block New Remote Contact"] = ""; +$a->strings["No remote contact is blocked from this node."] = "Z tego węzła nie jest blokowany kontakt zdalny."; +$a->strings["Blocked Remote Contacts"] = "Zablokowane kontakty zdalne"; +$a->strings["Block New Remote Contact"] = "Zablokuj nowy kontakt zdalny"; $a->strings["Photo"] = "Zdjęcie"; $a->strings["Address"] = "Adres"; $a->strings["%s total blocked contact"] = [ @@ -873,48 +873,48 @@ $a->strings["%s total blocked contact"] = [ 2 => "", 3 => "", ]; -$a->strings["URL of the remote contact to block."] = ""; -$a->strings["Delete this Item"] = ""; -$a->strings["On this page you can delete an item from your node. If the item is a top level posting, the entire thread will be deleted."] = ""; -$a->strings["You need to know the GUID of the item. You can find it e.g. by looking at the display URL. The last part of http://example.com/display/123456 is the GUID, here 123456."] = ""; -$a->strings["GUID"] = ""; -$a->strings["The GUID of the item you want to delete."] = ""; -$a->strings["Item marked for deletion."] = ""; -$a->strings["unknown"] = ""; -$a->strings["This page offers you some numbers to the known part of the federated social network your Friendica node is part of. These numbers are not complete but only reflect the part of the network your node is aware of."] = ""; -$a->strings["The Auto Discovered Contact Directory feature is not enabled, it will improve the data displayed here."] = ""; -$a->strings["Currently this node is aware of %d nodes with %d registered users from the following platforms:"] = ""; -$a->strings["ID"] = ""; +$a->strings["URL of the remote contact to block."] = "Adres URL kontaktu zdalnego do zablokowania."; +$a->strings["Delete this Item"] = "Usuń ten przedmiot"; +$a->strings["On this page you can delete an item from your node. If the item is a top level posting, the entire thread will be deleted."] = "Na tej stronie możesz usunąć przedmiot ze swojego węzła. Jeśli element jest publikowaniem na najwyższym poziomie, cały wątek zostanie usunięty."; +$a->strings["You need to know the GUID of the item. You can find it e.g. by looking at the display URL. The last part of http://example.com/display/123456 is the GUID, here 123456."] = "Musisz znać identyfikator GUID tego przedmiotu. Możesz go znaleźć np. patrząc na wyświetlany adres URL. Ostatnia część http://example.com/display/123456 to GUID, tutaj 123456."; +$a->strings["GUID"] = "GUID"; +$a->strings["The GUID of the item you want to delete."] = "Identyfikator elementu GUID, który chcesz usunąć."; +$a->strings["Item marked for deletion."] = "Przedmiot oznaczony do usunięcia."; +$a->strings["unknown"] = "nieznany"; +$a->strings["This page offers you some numbers to the known part of the federated social network your Friendica node is part of. These numbers are not complete but only reflect the part of the network your node is aware of."] = "Ta strona zawiera kilka numerów do znanej części federacyjnej sieci społecznościowej, do której należy Twój węzeł Friendica. Liczby te nie są kompletne, ale odzwierciedlają tylko część sieci, o której wie twój węzeł."; +$a->strings["The Auto Discovered Contact Directory feature is not enabled, it will improve the data displayed here."] = "Funkcja Katalog kontaktów automatycznie odkrytych nie jest włączona, poprawi ona wyświetlane tutaj dane."; +$a->strings["Currently this node is aware of %d nodes with %d registered users from the following platforms:"] = "Obecnie węzeł ten jest świadomy %dwęzłów z %d zarejestrowanymi użytkownikami z następujących platform:"; +$a->strings["ID"] = "ID"; $a->strings["Recipient Name"] = "Nazwa odbiorcy"; $a->strings["Recipient Profile"] = "Profil odbiorcy"; $a->strings["Network"] = "Sieć"; -$a->strings["Created"] = ""; -$a->strings["Last Tried"] = ""; -$a->strings["This page lists the content of the queue for outgoing postings. These are postings the initial delivery failed for. They will be resend later and eventually deleted if the delivery fails permanently."] = ""; -$a->strings["Your DB still runs with MyISAM tables. You should change the engine type to InnoDB. As Friendica will use InnoDB only features in the future, you should change this! See
    here for a guide that may be helpful converting the table engines. You may also use the command php bin/console.php dbstructure toinnodb of your Friendica installation for an automatic conversion.
    "] = ""; -$a->strings["There is a new version of Friendica available for download. Your current version is %1\$s, upstream version is %2\$s"] = ""; -$a->strings["The database update failed. Please run \"php bin/console.php dbstructure update\" from the command line and have a look at the errors that might appear."] = ""; +$a->strings["Created"] = "Utwórz"; +$a->strings["Last Tried"] = "Ostatnia wypróbowana"; +$a->strings["This page lists the content of the queue for outgoing postings. These are postings the initial delivery failed for. They will be resend later and eventually deleted if the delivery fails permanently."] = "Na tej stronie znajduje się zawartość kolejki dla wysyłek wychodzących. Są to posty, dla których początkowe wysyłanie nie powiodło się. Zostaną one ponownie wysłane później i ostatecznie usunięte, jeśli doręczenie zakończy się trwale."; +$a->strings["Your DB still runs with MyISAM tables. You should change the engine type to InnoDB. As Friendica will use InnoDB only features in the future, you should change this! See here for a guide that may be helpful converting the table engines. You may also use the command php bin/console.php dbstructure toinnodb of your Friendica installation for an automatic conversion.
    "] = "Twoja baza danych nadal działa z tabelami MyISAM. Powinieneś zmienić typ silnika na InnoDB. Ponieważ Friendica będzie używać funkcji związanych z InnoDB tylko w przyszłości, powinieneś to zmienić! Zobacz tutaj przewodnik, który może być pomocny w konwersji silników stołowych. Możesz także użyć polecenia php bin/console.php dbstructure toinnodb instalacji Friendica do automatycznej konwersji.
    "; +$a->strings["There is a new version of Friendica available for download. Your current version is %1\$s, upstream version is %2\$s"] = "Dostępna jest nowa wersja aplikacji Friendica. Twoja aktualna wersja to %1\$s wyższa wersja to %2\$s"; +$a->strings["The database update failed. Please run \"php bin/console.php dbstructure update\" from the command line and have a look at the errors that might appear."] = "Aktualizacja bazy danych nie powiodła się. Uruchom polecenie \"php bin/console.php dbstructure update\" z wiersza poleceń i sprawdź błędy, które mogą się pojawić."; $a->strings["The worker was never executed. Please check your database structure!"] = ""; -$a->strings["The last worker execution was on %s UTC. This is older than one hour. Please check your crontab settings."] = ""; +$a->strings["The last worker execution was on %s UTC. This is older than one hour. Please check your crontab settings."] = "Ostatnie wykonanie robota było w %s UTC. To jest starsze niż jedna godzina. Sprawdź ustawienia crontab."; $a->strings["Normal Account"] = "Konto normalne"; -$a->strings["Automatic Follower Account"] = ""; -$a->strings["Public Forum Account"] = ""; +$a->strings["Automatic Follower Account"] = "Automatyczne konto obserwatora"; +$a->strings["Public Forum Account"] = "Publiczne konto na forum"; $a->strings["Automatic Friend Account"] = "Automatyczny przyjaciel konta"; $a->strings["Blog Account"] = "Konto Bloga"; -$a->strings["Private Forum Account"] = ""; +$a->strings["Private Forum Account"] = "Prywatne konto na forum"; $a->strings["Message queues"] = "Wiadomości"; -$a->strings["Summary"] = "Skrót"; +$a->strings["Summary"] = "Podsumowanie"; $a->strings["Registered users"] = "Zarejestrowani użytkownicy"; $a->strings["Pending registrations"] = "Rejestracje w toku."; $a->strings["Version"] = "Wersja"; -$a->strings["Active addons"] = ""; +$a->strings["Active addons"] = "Aktywne dodatki"; $a->strings["Can not parse base url. Must have at least ://"] = ""; $a->strings["Site settings updated."] = "Ustawienia strony zaktualizowane"; $a->strings["No special theme for mobile devices"] = "Brak specialnego motywu dla urządzeń mobilnych"; $a->strings["No community page"] = "Brak strony społeczności"; $a->strings["Public postings from users of this site"] = "Publikacje publiczne od użytkowników tej strony"; -$a->strings["Public postings from the federated network"] = ""; -$a->strings["Public postings from local users and the federated network"] = ""; +$a->strings["Public postings from the federated network"] = "Publikacje wpisy ze sfederowanej sieci"; +$a->strings["Public postings from local users and the federated network"] = "Publikacje publiczne od użytkowników lokalnych i sieci federacyjnej"; $a->strings["Disabled"] = "Wyłączony"; $a->strings["Users, Global Contacts"] = "Użytkownicy, kontakty globalne"; $a->strings["Users, Global Contacts/fallback"] = "Użytkownicy, kontakty globalne/awaryjne"; @@ -931,16 +931,16 @@ $a->strings["Force all links to use SSL"] = "Wymuś by linki używały SSL."; $a->strings["Self-signed certificate, use SSL for local links only (discouraged)"] = "Wewnętrzne Certyfikaty , użyj SSL tylko dla linków lokalnych . "; $a->strings["Don't check"] = "Nie sprawdzaj"; $a->strings["check the stable version"] = "sprawdź wersję stabilną"; -$a->strings["check the development version"] = ""; +$a->strings["check the development version"] = "sprawdź wersję rozwojową"; $a->strings["Save Settings"] = "Zapisz ustawienia"; -$a->strings["Republish users to directory"] = ""; +$a->strings["Republish users to directory"] = "Ponownie opublikuj użytkowników w katalogu"; $a->strings["File upload"] = "Plik załadowano"; $a->strings["Policies"] = "zasady"; $a->strings["Advanced"] = "Zaawansowany"; -$a->strings["Auto Discovered Contact Directory"] = ""; +$a->strings["Auto Discovered Contact Directory"] = "Katalog kontaktów automatycznie odkrytych"; $a->strings["Performance"] = "Ustawienia"; $a->strings["Worker"] = "Pracownik"; -$a->strings["Message Relay"] = ""; +$a->strings["Message Relay"] = "Przekazywanie wiadomości"; $a->strings["Relocate - WARNING: advanced function. Could make this server unreachable."] = "Relokacja - OSTRZEŻENIE: funkcja zaawansowana. Może spowodować, że serwer będzie nieosiągalny."; $a->strings["Site name"] = "Nazwa strony"; $a->strings["Host name"] = "Nazwa hosta"; @@ -950,9 +950,9 @@ $a->strings["Banner/Logo"] = "Logo"; $a->strings["Shortcut icon"] = "Ikona skrótu"; $a->strings["Link to an icon that will be used for browsers."] = "Link do ikony, która będzie używana w przeglądarkach."; $a->strings["Touch icon"] = "Kliknij ikonę"; -$a->strings["Link to an icon that will be used for tablets and mobiles."] = ""; +$a->strings["Link to an icon that will be used for tablets and mobiles."] = "Link do ikony, która będzie używana w tabletach i telefonach komórkowych."; $a->strings["Additional Info"] = "Dodatkowe informacje"; -$a->strings["For public servers: you can add additional information here that will be listed at %s/servers."] = ""; +$a->strings["For public servers: you can add additional information here that will be listed at %s/servers."] = "W przypadku serwerów publicznych: możesz tu dodać dodatkowe informacje, które będą wymienione na %s/serwerach."; $a->strings["System language"] = "Język systemu"; $a->strings["System theme"] = "Motyw systemowy"; $a->strings["Default system theme - may be over-ridden by user profiles - change theme settings"] = "Domyślny motyw systemu - może być nadpisany przez profil użytkownika zmień ustawienia motywów"; @@ -961,7 +961,7 @@ $a->strings["Theme for mobile devices"] = "Szablon dla mobilnych urządzeń"; $a->strings["SSL link policy"] = "polityka SSL"; $a->strings["Determines whether generated links should be forced to use SSL"] = "Określa kiedy generowane linki powinny używać wymuszonego SSl."; $a->strings["Force SSL"] = "Wymuś SSL"; -$a->strings["Force all Non-SSL requests to SSL - Attention: on some systems it could lead to endless loops."] = ""; +$a->strings["Force all Non-SSL requests to SSL - Attention: on some systems it could lead to endless loops."] = "Wymuszaj wszystkie żądania SSL bez SSL - Uwaga: w niektórych systemach może to prowadzić do niekończących się pętli."; $a->strings["Hide help entry from navigation menu"] = "Wyłącz pomoc w menu nawigacyjnym "; $a->strings["Hides the menu entry for the Help pages from the navigation menu. You can still access it calling /help directly."] = "Chowa pozycje menu dla stron pomocy ze strony nawigacyjnej. Możesz nadal ją wywołać poprzez komendę /help."; $a->strings["Single user instance"] = "Tryb SingleUsera"; @@ -974,117 +974,117 @@ $a->strings["JPEG image quality"] = "jakość obrazu JPEG"; $a->strings["Uploaded JPEGS will be saved at this quality setting [0-100]. Default is 100, which is full quality."] = "Wczytywanie JPEGS będzie zapisane z tymi ustawieniami jakości [0-100] . Domyslnie jest ustawione 100 co oznacza brak strat jakości . "; $a->strings["Register policy"] = "Zarejestruj polisę"; $a->strings["Maximum Daily Registrations"] = "Maksymalnie dziennych rejestracji"; -$a->strings["If registration is permitted above, this sets the maximum number of new user registrations to accept per day. If register is set to closed, this setting has no effect."] = ""; +$a->strings["If registration is permitted above, this sets the maximum number of new user registrations to accept per day. If register is set to closed, this setting has no effect."] = "Jeśli rejestracja jest dozwolona powyżej, określa maksymalną liczbę nowych rejestracji użytkowników do zaakceptowania na dzień. Jeśli rejestr jest ustawiony na zamknięty, to ustawienie nie ma wpływu."; $a->strings["Register text"] = "Zarejestruj tekst"; -$a->strings["Will be displayed prominently on the registration page."] = ""; +$a->strings["Will be displayed prominently on the registration page."] = "Będą wyświetlane w widocznym miejscu na stronie rejestracji."; $a->strings["Accounts abandoned after x days"] = "Konto porzucone od x dni."; $a->strings["Will not waste system resources polling external sites for abandonded accounts. Enter 0 for no time limit."] = "Nie będzie marnować zasobów systemu wypytując zewnętrzne strony o opuszczone konta. Ustaw 0 dla braku limitu czasu ."; $a->strings["Allowed friend domains"] = "Dozwolone domeny przyjaciół"; $a->strings["Comma separated list of domains which are allowed to establish friendships with this site. Wildcards are accepted. Empty to allow any domains"] = "Lista domen separowana przecinkami które mogą zaprzyjaźnić się z tą stroną . Wildcards są akceptowane . Pozostaw puste by zezwolić każdej domenie na zapryjaźnienie. "; $a->strings["Allowed email domains"] = "Dozwolone domeny e-mailowe"; -$a->strings["Comma separated list of domains which are allowed in email addresses for registrations to this site. Wildcards are accepted. Empty to allow any domains"] = ""; +$a->strings["Comma separated list of domains which are allowed in email addresses for registrations to this site. Wildcards are accepted. Empty to allow any domains"] = "Rozdzielana przecinkami lista domen dozwolonych w adresach e-mail do rejestracji na tej stronie. Symbole wieloznaczne są akceptowane. Opróżnij, aby zezwolić na dowolne domeny"; $a->strings["No OEmbed rich content"] = ""; -$a->strings["Don't show the rich content (e.g. embedded PDF), except from the domains listed below."] = ""; -$a->strings["Allowed OEmbed domains"] = ""; -$a->strings["Comma separated list of domains which oembed content is allowed to be displayed. Wildcards are accepted."] = ""; +$a->strings["Don't show the rich content (e.g. embedded PDF), except from the domains listed below."] = "Nie wyświetlaj zasobów treści (np. osadzonego pliku PDF), z wyjątkiem domen wymienionych poniżej."; +$a->strings["Allowed OEmbed domains"] = "Dozwolone domeny OEmbed"; +$a->strings["Comma separated list of domains which oembed content is allowed to be displayed. Wildcards are accepted."] = "Rozdzielana przecinkami lista domen, w których wyświetlana jest treść, może być wyświetlana. Symbole wieloznaczne są akceptowane."; $a->strings["Block public"] = "Blokuj publicznie"; -$a->strings["Check to block public access to all otherwise public personal pages on this site unless you are currently logged in."] = ""; +$a->strings["Check to block public access to all otherwise public personal pages on this site unless you are currently logged in."] = "Zaznacz, aby zablokować publiczny dostęp do wszystkich publicznych stron prywatnych w tej witrynie, chyba że jesteś zalogowany."; $a->strings["Force publish"] = "Wymuś publikację"; -$a->strings["Check to force all profiles on this site to be listed in the site directory."] = ""; -$a->strings["Global directory URL"] = ""; -$a->strings["URL to the global directory. If this is not set, the global directory is completely unavailable to the application."] = ""; +$a->strings["Check to force all profiles on this site to be listed in the site directory."] = "Zaznacz, aby wymusić umieszczenie wszystkich profili w tej witrynie w katalogu witryny."; +$a->strings["Global directory URL"] = "Globalny adres URL katalogu"; +$a->strings["URL to the global directory. If this is not set, the global directory is completely unavailable to the application."] = "Adres URL do katalogu globalnego. Jeśli nie zostanie to ustawione, katalog globalny jest całkowicie niedostępny dla aplikacji."; $a->strings["Private posts by default for new users"] = "Prywatne posty domyślnie dla nowych użytkowników"; -$a->strings["Set default post permissions for all new members to the default privacy group rather than public."] = ""; +$a->strings["Set default post permissions for all new members to the default privacy group rather than public."] = "Ustaw domyślne uprawnienia do publikowania dla wszystkich nowych członków na domyślną grupę prywatności, a nie publiczną."; $a->strings["Don't include post content in email notifications"] = "Nie wklejaj zawartości postu do powiadomienia o poczcie"; $a->strings["Don't include the content of a post/comment/private message/etc. in the email notifications that are sent out from this site, as a privacy measure."] = "W celu ochrony prywatności, nie włączaj zawartości postu/komentarza/wiadomości prywatnej/etc. do powiadomień w wiadomościach mailowych wysyłanych z tej strony."; $a->strings["Disallow public access to addons listed in the apps menu."] = "Nie zezwalaj na publiczny dostęp do dodatkowych wtyczek wyszczególnionych w menu aplikacji."; -$a->strings["Checking this box will restrict addons listed in the apps menu to members only."] = ""; -$a->strings["Don't embed private images in posts"] = ""; -$a->strings["Don't replace locally-hosted private photos in posts with an embedded copy of the image. This means that contacts who receive posts containing private photos will have to authenticate and load each image, which may take a while."] = ""; -$a->strings["Allow Users to set remote_self"] = ""; -$a->strings["With checking this, every user is allowed to mark every contact as a remote_self in the repair contact dialog. Setting this flag on a contact causes mirroring every posting of that contact in the users stream."] = ""; +$a->strings["Checking this box will restrict addons listed in the apps menu to members only."] = "Zaznaczenie tego pola spowoduje ograniczenie dodatków wymienionych w menu aplikacji tylko dla członków."; +$a->strings["Don't embed private images in posts"] = "Nie umieszczaj prywatnych zdjęć w postach"; +$a->strings["Don't replace locally-hosted private photos in posts with an embedded copy of the image. This means that contacts who receive posts containing private photos will have to authenticate and load each image, which may take a while."] = "Nie zastępuj lokalnie hostowanych zdjęć prywatnych we wpisach za pomocą osadzonej kopii obrazu. Oznacza to, że osoby, które otrzymują posty zawierające prywatne zdjęcia, będą musiały uwierzytelnić i wczytać każdy obraz, co może trochę potrwać."; +$a->strings["Allow Users to set remote_self"] = "Zezwól użytkownikom na ustawienie remote_self"; +$a->strings["With checking this, every user is allowed to mark every contact as a remote_self in the repair contact dialog. Setting this flag on a contact causes mirroring every posting of that contact in the users stream."] = "Po sprawdzeniu tego każdy użytkownik może zaznaczyć każdy kontakt jako zdalny w oknie dialogowym kontaktu naprawczego. Ustawienie tej flagi na kontakcie powoduje dublowanie każdego wpisu tego kontaktu w strumieniu użytkowników."; $a->strings["Block multiple registrations"] = "Zablokuj wielokrotną rejestrację"; $a->strings["Disallow users to register additional accounts for use as pages."] = "Nie pozwalaj użytkownikom na zakładanie dodatkowych kont do używania jako strony. "; $a->strings["OpenID support"] = "Wsparcie OpenID"; -$a->strings["OpenID support for registration and logins."] = ""; +$a->strings["OpenID support for registration and logins."] = "Obsługa OpenID do rejestracji i logowania."; $a->strings["Fullname check"] = "Sprawdzanie pełnej nazwy"; $a->strings["Force users to register with a space between firstname and lastname in Full name, as an antispam measure"] = "Aby ograniczyć spam, wymagaj by użytkownik przy rejestracji w polu Imię i nazwisko użył spacji pomiędzy imieniem i nazwiskiem."; -$a->strings["Community pages for visitors"] = ""; -$a->strings["Which community pages should be available for visitors. Local users always see both pages."] = ""; -$a->strings["Posts per user on community page"] = ""; -$a->strings["The maximum number of posts per user on the community page. (Not valid for 'Global Community')"] = ""; +$a->strings["Community pages for visitors"] = "Strony społecznościowe dla odwiedzających"; +$a->strings["Which community pages should be available for visitors. Local users always see both pages."] = "Które strony społeczności powinny być dostępne dla odwiedzających. Lokalni użytkownicy zawsze widzą obie strony."; +$a->strings["Posts per user on community page"] = "Lista postów użytkownika na stronie społeczności"; +$a->strings["The maximum number of posts per user on the community page. (Not valid for 'Global Community')"] = "Maksymalna liczba postów na użytkownika na stronie społeczności. (Nie dotyczy 'społeczności globalnej')"; $a->strings["Enable OStatus support"] = "Włącz wsparcie OStatus"; -$a->strings["Provide built-in OStatus (StatusNet, GNU Social etc.) compatibility. All communications in OStatus are public, so privacy warnings will be occasionally displayed."] = ""; -$a->strings["Only import OStatus threads from our contacts"] = ""; -$a->strings["Normally we import every content from our OStatus contacts. With this option we only store threads that are started by a contact that is known on our system."] = ""; +$a->strings["Provide built-in OStatus (StatusNet, GNU Social etc.) compatibility. All communications in OStatus are public, so privacy warnings will be occasionally displayed."] = "Zapewnij kompatybilność z OStatus (StatusNet, GNU Social itp.). Cała komunikacja w stanie OStatus jest jawna, dlatego ostrzeżenia o prywatności będą czasami wyświetlane."; +$a->strings["Only import OStatus threads from our contacts"] = "Importuj wątki OStatus tylko z naszych kontaktów"; +$a->strings["Normally we import every content from our OStatus contacts. With this option we only store threads that are started by a contact that is known on our system."] = "Normalnie importujemy każdą treść z naszych kontaktów OStatus. W tej opcji przechowujemy tylko wątki uruchomione przez kontakt znany w naszym systemie."; $a->strings["OStatus support can only be enabled if threading is enabled."] = ""; $a->strings["Diaspora support can't be enabled because Friendica was installed into a sub directory."] = ""; $a->strings["Enable Diaspora support"] = "Włączyć obsługę Diaspory"; $a->strings["Provide built-in Diaspora network compatibility."] = ""; $a->strings["Only allow Friendica contacts"] = "Dopuść tylko kontakty Friendrica"; -$a->strings["All contacts must use Friendica protocols. All other built-in communication protocols disabled."] = ""; +$a->strings["All contacts must use Friendica protocols. All other built-in communication protocols disabled."] = "Wszyscy znajomi muszą używać protokołów Friendica. Wszystkie inne wbudowane protokoły komunikacyjne są wyłączone."; $a->strings["Verify SSL"] = "Weryfikacja SSL"; -$a->strings["If you wish, you can turn on strict certificate checking. This will mean you cannot connect (at all) to self-signed SSL sites."] = ""; +$a->strings["If you wish, you can turn on strict certificate checking. This will mean you cannot connect (at all) to self-signed SSL sites."] = "Jeśli chcesz, możesz włączyć ścisłe sprawdzanie certyfikatu. Oznacza to, że nie możesz połączyć się (w ogóle) z własnoręcznie podpisanymi stronami SSL."; $a->strings["Proxy user"] = "Użytkownik proxy"; $a->strings["Proxy URL"] = "URL Proxy"; $a->strings["Network timeout"] = "Network timeout"; -$a->strings["Value is in seconds. Set to 0 for unlimited (not recommended)."] = ""; +$a->strings["Value is in seconds. Set to 0 for unlimited (not recommended)."] = "Wartość jest w sekundach. Ustaw na 0 dla nieograniczonej (niezalecane)."; $a->strings["Maximum Load Average"] = ""; -$a->strings["Maximum system load before delivery and poll processes are deferred - default 50."] = ""; +$a->strings["Maximum system load before delivery and poll processes are deferred - default 50."] = "Maksymalne obciążenie systemu przed dostawą i odpytywaniem jest odroczone - domyślnie 50."; $a->strings["Maximum Load Average (Frontend)"] = ""; -$a->strings["Maximum system load before the frontend quits service - default 50."] = ""; -$a->strings["Minimal Memory"] = ""; +$a->strings["Maximum system load before the frontend quits service - default 50."] = "Maksymalne obciążenie systemu, zanim frontend zakończy pracę - domyślnie 50."; +$a->strings["Minimal Memory"] = "Minimalna pamięć"; $a->strings["Minimal free memory in MB for the worker. Needs access to /proc/meminfo - default 0 (deactivated)."] = ""; $a->strings["Maximum table size for optimization"] = ""; $a->strings["Maximum table size (in MB) for the automatic optimization - default 100 MB. Enter -1 to disable it."] = ""; $a->strings["Minimum level of fragmentation"] = ""; $a->strings["Minimum fragmenation level to start the automatic optimization - default value is 30%."] = ""; $a->strings["Periodical check of global contacts"] = ""; -$a->strings["If enabled, the global contacts are checked periodically for missing or outdated data and the vitality of the contacts and servers."] = ""; -$a->strings["Days between requery"] = ""; +$a->strings["If enabled, the global contacts are checked periodically for missing or outdated data and the vitality of the contacts and servers."] = "Jeśli jest włączona, kontakty globalne są okresowo sprawdzane pod kątem brakujących lub nieaktualnych danych oraz żywotności kontaktów i serwerów."; +$a->strings["Days between requery"] = "Dni między żądaniem"; $a->strings["Number of days after which a server is requeried for his contacts."] = ""; $a->strings["Discover contacts from other servers"] = "Odkryj kontakty z innych serwerów"; -$a->strings["Periodically query other servers for contacts. You can choose between 'users': the users on the remote system, 'Global Contacts': active contacts that are known on the system. The fallback is meant for Redmatrix servers and older friendica servers, where global contacts weren't available. The fallback increases the server load, so the recommened setting is 'Users, Global Contacts'."] = ""; -$a->strings["Timeframe for fetching global contacts"] = ""; -$a->strings["When the discovery is activated, this value defines the timeframe for the activity of the global contacts that are fetched from other servers."] = ""; +$a->strings["Periodically query other servers for contacts. You can choose between 'users': the users on the remote system, 'Global Contacts': active contacts that are known on the system. The fallback is meant for Redmatrix servers and older friendica servers, where global contacts weren't available. The fallback increases the server load, so the recommened setting is 'Users, Global Contacts'."] = "Okresowo wysyłaj zapytanie do innych serwerów o kontakty. Możesz wybierać pomiędzy 'użytkownikami': użytkownikami w systemie zdalnym, 'Kontakty globalne': aktywne kontakty znane w systemie. Zastępowanie jest przeznaczone dla serwerów Redmatrix i starszych serwerów Friendica, w których kontakty globalne nie były dostępne. Funkcja awaryjna zwiększa obciążenie serwera, dlatego zalecanym ustawieniem jest 'Użytkownicy, kontakty globalne'."; +$a->strings["Timeframe for fetching global contacts"] = "Czas pobierania globalnych kontaktów"; +$a->strings["When the discovery is activated, this value defines the timeframe for the activity of the global contacts that are fetched from other servers."] = "Po aktywowaniu wykrywania ta wartość określa czas działania globalnych kontaktów pobieranych z innych serwerów."; $a->strings["Search the local directory"] = "Wyszukaj w lokalnym katalogu"; -$a->strings["Search the local directory instead of the global directory. When searching locally, every search will be executed on the global directory in the background. This improves the search results when the search is repeated."] = ""; +$a->strings["Search the local directory instead of the global directory. When searching locally, every search will be executed on the global directory in the background. This improves the search results when the search is repeated."] = "Wyszukaj lokalny katalog zamiast katalogu globalnego. Podczas wyszukiwania lokalnie każde wyszukiwanie zostanie wykonane w katalogu globalnym w tle. Poprawia to wyniki wyszukiwania, gdy wyszukiwanie jest powtarzane."; $a->strings["Publish server information"] = "Publikuj informacje o serwerze"; -$a->strings["If enabled, general server and usage data will be published. The data contains the name and version of the server, number of users with public profiles, number of posts and the activated protocols and connectors. See the-federation.info for details."] = ""; -$a->strings["Check upstream version"] = ""; -$a->strings["Enables checking for new Friendica versions at github. If there is a new version, you will be informed in the admin panel overview."] = ""; -$a->strings["Suppress Tags"] = ""; -$a->strings["Suppress showing a list of hashtags at the end of the posting."] = ""; -$a->strings["Path to item cache"] = ""; -$a->strings["The item caches buffers generated bbcode and external images."] = ""; -$a->strings["Cache duration in seconds"] = ""; -$a->strings["How long should the cache files be hold? Default value is 86400 seconds (One day). To disable the item cache, set the value to -1."] = ""; -$a->strings["Maximum numbers of comments per post"] = ""; -$a->strings["How much comments should be shown for each post? Default value is 100."] = ""; +$a->strings["If enabled, general server and usage data will be published. The data contains the name and version of the server, number of users with public profiles, number of posts and the activated protocols and connectors. See the-federation.info for details."] = "Jeśli opcja jest włączona, ogólne dane serwera i użytkowania zostaną opublikowane. Dane zawierają nazwę i wersję serwera, liczbę użytkowników z profilami publicznymi, liczbę postów oraz aktywowane protokoły i konektory. Aby uzyskać szczegółowe informacje, patrz the-federation.info."; +$a->strings["Check upstream version"] = "Sprawdź wersję powyżej"; +$a->strings["Enables checking for new Friendica versions at github. If there is a new version, you will be informed in the admin panel overview."] = "Umożliwia sprawdzenie nowych wersji Friendica na github. Jeśli pojawi się nowa wersja, zostaniesz o tym poinformowany w panelu administracyjnym."; +$a->strings["Suppress Tags"] = "Ukryj tagi"; +$a->strings["Suppress showing a list of hashtags at the end of the posting."] = "Pomiń wyświetlenie listy hashtagów na końcu postu."; +$a->strings["Path to item cache"] = "Ścieżka do pamięci podręcznej"; +$a->strings["The item caches buffers generated bbcode and external images."] = "Pozycja buforuje bufory generowane bbcode i obrazy zewnętrzne."; +$a->strings["Cache duration in seconds"] = "Czas trwania w sekundach"; +$a->strings["How long should the cache files be hold? Default value is 86400 seconds (One day). To disable the item cache, set the value to -1."] = "Jak długo powinny być przechowywane pliki pamięci podręcznej? Wartość domyślna to 86400 sekund (jeden dzień). Aby wyłączyć pamięć podręczną elementów, ustaw wartość na -1."; +$a->strings["Maximum numbers of comments per post"] = "Maksymalna liczba komentarzy na post"; +$a->strings["How much comments should be shown for each post? Default value is 100."] = "Ile komentarzy powinno być pokazywanych dla każdego posta? Domyślna wartość to 100."; $a->strings["Temp path"] = "Ścieżka do Temp"; -$a->strings["If you have a restricted system where the webserver can't access the system temp path, enter another path here."] = ""; -$a->strings["Base path to installation"] = ""; -$a->strings["If the system cannot detect the correct path to your installation, enter the correct path here. This setting should only be set if you are using a restricted system and symbolic links to your webroot."] = ""; +$a->strings["If you have a restricted system where the webserver can't access the system temp path, enter another path here."] = "Jeśli masz zastrzeżony system, w którym serwer internetowy nie może uzyskać dostępu do ścieżki temp systemu, wprowadź tutaj inną ścieżkę."; +$a->strings["Base path to installation"] = "Podstawowa ścieżka do instalacji"; +$a->strings["If the system cannot detect the correct path to your installation, enter the correct path here. This setting should only be set if you are using a restricted system and symbolic links to your webroot."] = "Jeśli system nie może wykryć poprawnej ścieżki do instalacji, wprowadź tutaj poprawną ścieżkę. To ustawienie powinno być ustawione tylko wtedy, gdy używasz ograniczonego systemu i dowiązań symbolicznych do twojego webroota."; $a->strings["Disable picture proxy"] = "Wyłącz obraz proxy"; -$a->strings["The picture proxy increases performance and privacy. It shouldn't be used on systems with very low bandwith."] = ""; -$a->strings["Only search in tags"] = ""; -$a->strings["On large systems the text search can slow down the system extremely."] = ""; -$a->strings["New base url"] = ""; -$a->strings["Change base url for this server. Sends relocate message to all Friendica and Diaspora* contacts of all users."] = ""; -$a->strings["RINO Encryption"] = ""; -$a->strings["Encryption layer between nodes."] = ""; +$a->strings["The picture proxy increases performance and privacy. It shouldn't be used on systems with very low bandwith."] = "Proxy obrazu zwiększa wydajność i prywatność. Nie należy go stosować w systemach o bardzo niskiej przepustowości."; +$a->strings["Only search in tags"] = "Szukaj tylko w tagach"; +$a->strings["On large systems the text search can slow down the system extremely."] = "W dużych systemach wyszukiwanie tekstu może wyjątkowo spowolnić system."; +$a->strings["New base url"] = "Nowy bazowy adres url"; +$a->strings["Change base url for this server. Sends relocate message to all Friendica and Diaspora* contacts of all users."] = "Zmień bazowy adres URL dla tego serwera. Wysyła wiadomość o przeniesieniu do wszystkich kontaktów Friendica i Diaspora* wszystkich użytkowników."; +$a->strings["RINO Encryption"] = "Szyfrowanie RINO"; +$a->strings["Encryption layer between nodes."] = "Warstwa szyfrowania między węzłami."; $a->strings["Enabled"] = "Włącz"; -$a->strings["Maximum number of parallel workers"] = ""; -$a->strings["On shared hosters set this to 2. On larger systems, values of 10 are great. Default value is 4."] = ""; +$a->strings["Maximum number of parallel workers"] = "Maksymalna liczba równoległych pracowników"; +$a->strings["On shared hosters set this to 2. On larger systems, values of 10 are great. Default value is 4."] = "Na współdzielonych hostach ustaw to na 2. W większych systemach wartości 10 są świetne. Domyślna wartość to 4."; $a->strings["Don't use 'proc_open' with the worker"] = ""; $a->strings["Enable this if your system doesn't allow the use of 'proc_open'. This can happen on shared hosters. If this is enabled you should increase the frequency of worker calls in your crontab."] = ""; -$a->strings["Enable fastlane"] = ""; -$a->strings["When enabed, the fastlane mechanism starts an additional worker if processes with higher priority are blocked by processes of lower priority."] = ""; +$a->strings["Enable fastlane"] = "Włącz Fastlane"; +$a->strings["When enabed, the fastlane mechanism starts an additional worker if processes with higher priority are blocked by processes of lower priority."] = "Po włączeniu system Fastlane uruchamia dodatkowego pracownika, jeśli procesy o wyższym priorytecie są blokowane przez procesy o niższym priorytecie."; $a->strings["Enable frontend worker"] = ""; $a->strings["When enabled the Worker process is triggered when backend access is performed \\x28e.g. messages being delivered\\x29. On smaller sites you might want to call %s/worker on a regular basis via an external cron job. You should only enable this option if you cannot utilize cron/scheduled jobs on your server."] = ""; $a->strings["Subscribe to relay"] = ""; -$a->strings["Enables the receiving of public posts from the relay. They will be included in the search, subscribed tags and on the global community page."] = ""; -$a->strings["Relay server"] = ""; +$a->strings["Enables the receiving of public posts from the relay. They will be included in the search, subscribed tags and on the global community page."] = "Umożliwia odbieranie publicznych wiadomości z przekaźnika. Zostaną uwzględnione w tagach wyszukiwania, subskrybowanych i na stronie społeczności globalnej."; +$a->strings["Relay server"] = "Serwer przekazujący"; $a->strings["Address of the relay server where public posts should be send to. For example https://relay.diasp.org"] = ""; $a->strings["Direct relay transfer"] = ""; $a->strings["Enables the direct transfer to other servers without using the relay servers"] = ""; @@ -1092,11 +1092,11 @@ $a->strings["Relay scope"] = ""; $a->strings["Can be 'all' or 'tags'. 'all' means that every public post should be received. 'tags' means that only posts with selected tags should be received."] = ""; $a->strings["all"] = "wszystko"; $a->strings["tags"] = "tagi"; -$a->strings["Server tags"] = ""; +$a->strings["Server tags"] = "Serwer tagów"; $a->strings["Comma separated list of tags for the 'tags' subscription."] = ""; -$a->strings["Allow user tags"] = ""; +$a->strings["Allow user tags"] = "Pozwól na tagi użytkowników"; $a->strings["If enabled, the tags from the saved searches will used for the 'tags' subscription in addition to the 'relay_server_tags'."] = ""; -$a->strings["Update has been marked successful"] = ""; +$a->strings["Update has been marked successful"] = "Aktualizacja została oznaczona jako udana"; $a->strings["Database structure update %s was successfully applied."] = ""; $a->strings["Executing of database structure update %s failed with error: %s"] = ""; $a->strings["Executing %s failed with error: %s"] = ""; @@ -1104,11 +1104,11 @@ $a->strings["Update %s was successfully applied."] = ""; $a->strings["Update %s did not return a status. Unknown if it succeeded."] = ""; $a->strings["There was no additional update function %s that needed to be called."] = ""; $a->strings["No failed updates."] = "Brak błędów aktualizacji."; -$a->strings["Check database structure"] = ""; +$a->strings["Check database structure"] = "Sprawdź strukturę bazy danych"; $a->strings["Failed Updates"] = "Błąd aktualizacji"; $a->strings["This does not include updates prior to 1139, which did not return a status."] = ""; -$a->strings["Mark success (if update was manually applied)"] = ""; -$a->strings["Attempt to execute this update step automatically"] = ""; +$a->strings["Mark success (if update was manually applied)"] = "Oznacz sukces (jeśli aktualizacja została ręcznie zastosowana)"; +$a->strings["Attempt to execute this update step automatically"] = "Spróbuj automatycznie wykonać ten krok aktualizacji"; $a->strings["\n\t\t\tDear %1\$s,\n\t\t\t\tthe administrator of %2\$s has set up an account for you."] = ""; $a->strings["\n\t\t\tThe login details are as follows:\n\n\t\t\tSite Location:\t%1\$s\n\t\t\tLogin Name:\t\t%2\$s\n\t\t\tPassword:\t\t%3\$s\n\n\t\t\tYou may change your password from your account \"Settings\" page after logging\n\t\t\tin.\n\n\t\t\tPlease take a few moments to review the other account settings on that page.\n\n\t\t\tYou may also wish to add some basic information to your default profile\n\t\t\t(on the \"Profiles\" page) so that other people can easily find you.\n\n\t\t\tWe recommend setting your full name, adding a profile photo,\n\t\t\tadding some profile \"keywords\" (very useful in making new friends) - and\n\t\t\tperhaps what country you live in; if you do not wish to be more specific\n\t\t\tthan that.\n\n\t\t\tWe fully respect your right to privacy, and none of these items are necessary.\n\t\t\tIf you are new and do not know anybody here, they may help\n\t\t\tyou to make some new and interesting friends.\n\n\t\t\tThank you and welcome to %4\$s."] = ""; $a->strings["Registration details for %s"] = "Szczegóły rejestracji dla %s"; @@ -1146,8 +1146,8 @@ $a->strings["Deleted since"] = "Skasowany od"; $a->strings["Selected users will be deleted!\\n\\nEverything these users had posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "Zaznaczeni użytkownicy zostaną usunięci!\\n\\nWszystko co zamieścili na tej stronie będzie trwale skasowane!\\n\\nJesteś pewien?"; $a->strings["The user {0} will be deleted!\\n\\nEverything this user has posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "Użytkownik {0} zostanie usunięty!\\n\\nWszystko co zamieścił na tej stronie będzie trwale skasowane!\\n\\nJesteś pewien?"; $a->strings["Name of the new user."] = "Nazwa nowego użytkownika."; -$a->strings["Nickname"] = ""; -$a->strings["Nickname of the new user."] = ""; +$a->strings["Nickname"] = "Pseudonim"; +$a->strings["Nickname of the new user."] = "Pseudonim nowego użytkownika."; $a->strings["Email address of the new user."] = "Adres email nowego użytkownika."; $a->strings["Addon %s disabled."] = "Dodatek %s wyłączony."; $a->strings["Addon %s enabled."] = "Dodatek %s włączony."; @@ -1156,31 +1156,31 @@ $a->strings["Enable"] = "Zezwól"; $a->strings["Toggle"] = "Włącz"; $a->strings["Author: "] = "Autor: "; $a->strings["Maintainer: "] = "Opiekun:"; -$a->strings["Reload active addons"] = ""; +$a->strings["Reload active addons"] = "Załaduj ponownie aktywne dodatki"; $a->strings["There are currently no addons available on your node. You can find the official addon repository at %1\$s and might find other interesting addons in the open addon registry at %2\$s"] = ""; $a->strings["No themes found."] = "Nie znaleziono tematu."; $a->strings["Screenshot"] = "Zrzut ekranu"; $a->strings["Reload active themes"] = "Przeładuj aktywne motywy"; -$a->strings["No themes found on the system. They should be placed in %1\$s"] = ""; +$a->strings["No themes found on the system. They should be placed in %1\$s"] = "Nie znaleziono motywów w systemie. Powinny zostać umieszczone %1\$s"; $a->strings["[Experimental]"] = "[Eksperymentalne]"; $a->strings["[Unsupported]"] = "[Niewspieralne]"; $a->strings["Log settings updated."] = "Zaktualizowano ustawienia logów."; -$a->strings["PHP log currently enabled."] = ""; -$a->strings["PHP log currently disabled."] = ""; +$a->strings["PHP log currently enabled."] = "Dziennik PHP jest obecnie włączony."; +$a->strings["PHP log currently disabled."] = "Dziennik PHP jest obecnie wyłączony."; $a->strings["Clear"] = "Wyczyść"; $a->strings["Enable Debugging"] = "Włącz debugowanie"; $a->strings["Log file"] = "Plik logów"; -$a->strings["Must be writable by web server. Relative to your Friendica top-level directory."] = ""; +$a->strings["Must be writable by web server. Relative to your Friendica top-level directory."] = "Musi być zapisywalny przez serwer sieciowy. W stosunku do katalogu najwyższego poziomu Friendica."; $a->strings["Log level"] = "Poziom logów"; $a->strings["PHP logging"] = ""; -$a->strings["To enable logging of PHP errors and warnings you can add the following to the .htconfig.php file of your installation. The filename set in the 'error_log' line is relative to the friendica top-level directory and must be writeable by the web server. The option '1' for 'log_errors' and 'display_errors' is to enable these options, set to '0' to disable them."] = ""; +$a->strings["To enable logging of PHP errors and warnings you can add the following to the .htconfig.php file of your installation. The filename set in the 'error_log' line is relative to the friendica top-level directory and must be writeable by the web server. The option '1' for 'log_errors' and 'display_errors' is to enable these options, set to '0' to disable them."] = "Aby włączyć rejestrowanie błędów i ostrzeżeń PHP, możesz dodać następujące dane do pliku .htconfig.php instalacji. Nazwa pliku ustawiona w linii 'error_log' odnosi się do katalogu najwyższego poziomu friendiki i musi być zapisywalna przez serwer WWW. Opcja '1' dla 'log_errors' i 'display_errors' polega na włączeniu tych opcji, ustawieniu na '0', aby je wyłączyć."; $a->strings["Error trying to open %1\$s log file.\\r\\n
    Check to see if file %1\$s exist and is readable."] = ""; $a->strings["Couldn't open %1\$s log file.\\r\\n
    Check to see if file %1\$s is readable."] = ""; $a->strings["Off"] = "Wyłącz"; $a->strings["On"] = "Włącz"; $a->strings["Lock feature %s"] = ""; -$a->strings["Manage Additional Features"] = ""; -$a->strings["Source input"] = ""; +$a->strings["Manage Additional Features"] = "Zarządzaj dodatkowymi funkcjami"; +$a->strings["Source input"] = "Źródło wejściowe"; $a->strings["BBCode::convert (raw HTML("] = ""; $a->strings["BBCode::convert"] = ""; $a->strings["BBCode::convert => HTML::toBBCode"] = ""; @@ -1194,22 +1194,22 @@ $a->strings["Raw HTML input"] = ""; $a->strings["HTML Input"] = ""; $a->strings["HTML::toBBCode"] = ""; $a->strings["HTML::toPlaintext"] = ""; -$a->strings["Source text"] = ""; +$a->strings["Source text"] = "Tekst źródłowy"; $a->strings["BBCode"] = ""; $a->strings["Markdown"] = ""; -$a->strings["HTML"] = ""; +$a->strings["HTML"] = "HTML"; $a->strings["Events"] = "Wydarzenia"; -$a->strings["View"] = ""; +$a->strings["View"] = "Widok"; $a->strings["Previous"] = "Poprzedni"; $a->strings["Next"] = "Następny"; $a->strings["today"] = "dzisiaj"; $a->strings["month"] = "miesiąc"; $a->strings["week"] = "tydzień"; $a->strings["day"] = "dzień"; -$a->strings["list"] = ""; -$a->strings["User not found"] = ""; -$a->strings["This calendar format is not supported"] = ""; -$a->strings["No exportable data found"] = ""; +$a->strings["list"] = "lista"; +$a->strings["User not found"] = "Użytkownik nie znaleziony"; +$a->strings["This calendar format is not supported"] = "Ten format kalendarza nie jest obsługiwany"; +$a->strings["No exportable data found"] = "Nie znaleziono danych do eksportu"; $a->strings["calendar"] = "kalendarz"; $a->strings["%d contact edited."] = [ 0 => "", @@ -1225,8 +1225,8 @@ $a->strings["Contact has been unblocked"] = "Kontakt został odblokowany"; $a->strings["Contact has been ignored"] = "Kontakt jest ignorowany"; $a->strings["Contact has been unignored"] = "Kontakt nie jest ignorowany"; $a->strings["Contact has been archived"] = "Kontakt został zarchiwizowany"; -$a->strings["Contact has been unarchived"] = ""; -$a->strings["Drop contact"] = ""; +$a->strings["Contact has been unarchived"] = "Kontakt został przywrócony"; +$a->strings["Drop contact"] = "Usuń kontakt"; $a->strings["Do you really want to delete this contact?"] = "Czy na pewno chcesz usunąć ten kontakt?"; $a->strings["Contact has been removed."] = "Kontakt został usunięty."; $a->strings["You are mutual friends with %s"] = "Jesteś już znajomym z %s"; @@ -1240,16 +1240,16 @@ $a->strings["Suggest friends"] = "Osoby, które możesz znać"; $a->strings["Network type: %s"] = "Typ sieci: %s"; $a->strings["Communications lost with this contact!"] = "Komunikacja przerwana z tym kontaktem!"; $a->strings["Fetch further information for feeds"] = "Pobierz dalsze informacje dla kanałów"; -$a->strings["Fetch information like preview pictures, title and teaser from the feed item. You can activate this if the feed doesn't contain much text. Keywords are taken from the meta header in the feed item and are posted as hash tags."] = ""; -$a->strings["Fetch information"] = ""; -$a->strings["Fetch keywords"] = ""; -$a->strings["Fetch information and keywords"] = ""; +$a->strings["Fetch information like preview pictures, title and teaser from the feed item. You can activate this if the feed doesn't contain much text. Keywords are taken from the meta header in the feed item and are posted as hash tags."] = "Pobieranie informacji, takich jak zdjęcia podglądu, tytuł i zwiastun z elementu kanału. Możesz to aktywować, jeśli plik danych nie zawiera dużo tekstu. Słowa kluczowe są pobierane z nagłówka meta w elemencie kanału i są publikowane jako znaczniki haszowania."; +$a->strings["Fetch information"] = "Pobierz informacje"; +$a->strings["Fetch keywords"] = "Pobierz słowa kluczowe"; +$a->strings["Fetch information and keywords"] = "Pobierz informacje i słowa kluczowe"; $a->strings["Disconnect/Unfollow"] = ""; $a->strings["Contact"] = "Kontakt"; $a->strings["Profile Visibility"] = "Widoczność profilu"; $a->strings["Please choose the profile you would like to display to %s when viewing your profile securely."] = "Wybierz profil, który chcesz bezpiecznie wyświetlić %s"; $a->strings["Contact Information / Notes"] = "Informacja o kontakcie / Notka"; -$a->strings["Their personal note"] = ""; +$a->strings["Their personal note"] = "Ich osobista uwaga"; $a->strings["Edit contact notes"] = "Edytuj notatki kontaktu"; $a->strings["Block/Unblock contact"] = "Zablokuj/odblokuj kontakt"; $a->strings["Ignore contact"] = "Ignoruj kontakt"; @@ -1262,16 +1262,16 @@ $a->strings["Unignore"] = "Odblokuj"; $a->strings["Currently blocked"] = "Obecnie zablokowany"; $a->strings["Currently ignored"] = "Obecnie zignorowany"; $a->strings["Currently archived"] = "Obecnie zarchiwizowany"; -$a->strings["Awaiting connection acknowledge"] = ""; +$a->strings["Awaiting connection acknowledge"] = "Oczekiwanie na potwierdzenie połączenia"; $a->strings["Replies/likes to your public posts may still be visible"] = "Odpowiedzi/kliknięcia \"lubię to\" do twoich publicznych postów nadal mogą być widoczne"; -$a->strings["Notification for new posts"] = ""; -$a->strings["Send a notification of every new post of this contact"] = ""; -$a->strings["Blacklisted keywords"] = ""; -$a->strings["Comma separated list of keywords that should not be converted to hashtags, when \"Fetch information and keywords\" is selected"] = ""; +$a->strings["Notification for new posts"] = "Powiadomienie o nowych postach"; +$a->strings["Send a notification of every new post of this contact"] = "Wyślij powiadomienie o każdym nowym poście tego kontaktu"; +$a->strings["Blacklisted keywords"] = "Słowa kluczowe na czarnej liście"; +$a->strings["Comma separated list of keywords that should not be converted to hashtags, when \"Fetch information and keywords\" is selected"] = "Rozdzielana przecinkami lista słów kluczowych, które nie powinny zostać przekonwertowane na hashtagi, gdy wybrana jest opcja 'Pobierz informacje i słowa kluczowe'"; $a->strings["XMPP:"] = ""; -$a->strings["Actions"] = ""; +$a->strings["Actions"] = "Akcja"; $a->strings["Status"] = "Status"; -$a->strings["Contact Settings"] = ""; +$a->strings["Contact Settings"] = "Ustawienia kontaktów"; $a->strings["Suggestions"] = "Sugestie"; $a->strings["Suggest potential friends"] = "Sugerowani znajomi"; $a->strings["Show all contacts"] = "Pokaż wszystkie kontakty"; @@ -1290,46 +1290,46 @@ $a->strings["Find"] = "Znajdź"; $a->strings["Update"] = "Zaktualizuj"; $a->strings["Archive"] = "Archiwum"; $a->strings["Unarchive"] = "Przywróć z archiwum"; -$a->strings["Batch Actions"] = ""; +$a->strings["Batch Actions"] = "Akcje wsadowe"; $a->strings["Status Messages and Posts"] = "Status wiadomości i postów"; $a->strings["Profile Details"] = "Szczegóły profilu"; $a->strings["View all contacts"] = "Zobacz wszystkie kontakty"; -$a->strings["View all common friends"] = ""; +$a->strings["View all common friends"] = "Zobacz wszystkich popularnych znajomych"; $a->strings["Advanced Contact Settings"] = "Zaawansowane ustawienia kontaktów"; $a->strings["Mutual Friendship"] = "Wzajemna przyjaźń"; $a->strings["is a fan of yours"] = "jest twoim fanem"; $a->strings["you are a fan of"] = "jesteś fanem"; -$a->strings["Toggle Blocked status"] = ""; +$a->strings["Toggle Blocked status"] = "Przełącz na Zablokowany"; $a->strings["Toggle Ignored status"] = ""; $a->strings["Toggle Archive status"] = ""; $a->strings["Delete contact"] = "Usuń kontakt"; -$a->strings["Parent user not found."] = ""; -$a->strings["No parent user"] = ""; -$a->strings["Parent Password:"] = ""; -$a->strings["Please enter the password of the parent account to legitimize your request."] = ""; -$a->strings["Parent User"] = ""; -$a->strings["Parent users have total control about this account, including the account settings. Please double check whom you give this access."] = ""; +$a->strings["Parent user not found."] = "Nie znaleziono użytkownika nadrzędnego."; +$a->strings["No parent user"] = "Brak nadrzędnego użytkownika"; +$a->strings["Parent Password:"] = "Hasło nadrzędne:"; +$a->strings["Please enter the password of the parent account to legitimize your request."] = "Wprowadź hasło konta nadrzędnego, aby legalizować swoje żądanie."; +$a->strings["Parent User"] = "Użytkownik nadrzędny"; +$a->strings["Parent users have total control about this account, including the account settings. Please double check whom you give this access."] = "Użytkownicy nadrzędni mają pełną kontrolę nad tym kontem, w tym także ustawienia konta. Sprawdź dokładnie, komu przyznasz ten dostęp."; $a->strings["Delegate Page Management"] = ""; -$a->strings["Delegates"] = ""; -$a->strings["Delegates are able to manage all aspects of this account/page except for basic account settings. Please do not delegate your personal account to anybody that you do not trust completely."] = ""; -$a->strings["Existing Page Delegates"] = ""; -$a->strings["Potential Delegates"] = ""; +$a->strings["Delegates"] = "Oddeleguj"; +$a->strings["Delegates are able to manage all aspects of this account/page except for basic account settings. Please do not delegate your personal account to anybody that you do not trust completely."] = "Delegaci mogą zarządzać wszystkimi aspektami tego konta/strony, z wyjątkiem podstawowych ustawień konta. Nie przekazuj swojego konta osobistego nikomu, komu nie ufasz całkowicie."; +$a->strings["Existing Page Delegates"] = "Obecni delegaci stron"; +$a->strings["Potential Delegates"] = "Potencjalni delegaci"; $a->strings["Add"] = "Dodaj"; $a->strings["No entries."] = "Brak wpisów."; $a->strings["Status:"] = "Status"; $a->strings["Homepage:"] = "Strona główna:"; $a->strings["Global Directory"] = "Globalne Położenie"; $a->strings["Find on this site"] = "Znajdź na tej stronie"; -$a->strings["Results for:"] = ""; +$a->strings["Results for:"] = "Wyniki dla:"; $a->strings["Site Directory"] = "Katalog Strony"; $a->strings["No entries (some entries may be hidden)."] = "Brak odwiedzin (niektóre odwiedziny mogą być ukryte)."; $a->strings["People Search - %s"] = ""; -$a->strings["Forum Search - %s"] = ""; +$a->strings["Forum Search - %s"] = "Przeszukiwanie forum - %s"; $a->strings["Event can not end before it has started."] = ""; $a->strings["Event title and start time are required."] = "Wymagany tytuł wydarzenia i czas rozpoczęcia."; $a->strings["Create New Event"] = "Stwórz nowe wydarzenie"; $a->strings["Event details"] = "Szczegóły wydarzenia"; -$a->strings["Starting date and Title are required."] = ""; +$a->strings["Starting date and Title are required."] = "Data rozpoczęcia i tytuł są wymagane."; $a->strings["Event Starts:"] = "Rozpoczęcie wydarzenia:"; $a->strings["Required"] = "Wymagany"; $a->strings["Finish date/time is not known or not relevant"] = "Data/czas zakończenia nie jest znana lub jest nieistotna"; @@ -1340,10 +1340,10 @@ $a->strings["Title:"] = "Tytuł:"; $a->strings["Share this event"] = "Udostępnij te wydarzenie"; $a->strings["Basic"] = "Podstawowy"; $a->strings["Failed to remove event"] = "Nie udało się usunąć wydarzenia"; -$a->strings["Event removed"] = ""; -$a->strings["You must be logged in to use this module"] = ""; -$a->strings["Source URL"] = ""; -$a->strings["The contact could not be added."] = ""; +$a->strings["Event removed"] = "Wydarzenie zostało usunięte"; +$a->strings["You must be logged in to use this module"] = "Musisz być zalogowany, aby korzystać z tego modułu"; +$a->strings["Source URL"] = "Źródłowy adres URL"; +$a->strings["The contact could not be added."] = "Nie można dodać kontaktu."; $a->strings["You already added this contact."] = "Już dodałeś ten kontakt."; $a->strings["Diaspora support isn't enabled. Contact can't be added."] = "Obsługa Diaspory nie jest włączona. Kontakt nie może zostać dodany."; $a->strings["OStatus support is disabled. Contact can't be added."] = "Obsługa OStatus jest wyłączona. Kontakt nie może zostać dodany."; @@ -1365,21 +1365,21 @@ $a->strings["Database Server Name"] = "Baza danych - Nazwa serwera"; $a->strings["Database Login Name"] = "Baza danych - Nazwa loginu"; $a->strings["Database Login Password"] = "Baza danych - Hasło loginu"; $a->strings["For security reasons the password must not be empty"] = "Ze względów bezpieczeństwa hasło nie może być puste"; -$a->strings["Database Name"] = "Baza danych - Nazwa"; +$a->strings["Database Name"] = "Nazwa bazy danych"; $a->strings["Site administrator email address"] = "Adres e-mail administratora strony"; -$a->strings["Your account email address must match this in order to use the web admin panel."] = ""; +$a->strings["Your account email address must match this in order to use the web admin panel."] = "Adres e-mail konta musi pasować do tego, aby móc korzystać z panelu administracyjnego."; $a->strings["Please select a default timezone for your website"] = "Proszę wybrać domyślną strefę czasową dla swojej strony"; $a->strings["Site settings"] = "Ustawienia strony"; $a->strings["System Language:"] = "Język systemu:"; $a->strings["Set the default language for your Friendica installation interface and to send emails."] = "Ustaw domyślny język dla interfejsu instalacyjnego Friendica i wysyłaj e-maile."; $a->strings["Could not find a command line version of PHP in the web server PATH."] = "Nie można znaleźć wersji PHP komendy w serwerze PATH"; -$a->strings["If you don't have a command line version of PHP installed on your server, you will not be able to run the background processing. See 'Setup the worker'"] = ""; -$a->strings["PHP executable path"] = ""; -$a->strings["Enter full path to php executable. You can leave this blank to continue the installation."] = ""; +$a->strings["If you don't have a command line version of PHP installed on your server, you will not be able to run the background processing. See 'Setup the worker'"] = "Jeśli nie masz zainstalowanej na serwerze wersji PHP z wiersza poleceń, nie będziesz mógł uruchomić przetwarzania w tle. Zobacz 'Konfiguracja pracownika'"; +$a->strings["PHP executable path"] = "Ścieżka wykonywalna PHP"; +$a->strings["Enter full path to php executable. You can leave this blank to continue the installation."] = "Wprowadź pełną ścieżkę do pliku wykonywalnego php. Możesz pozostawić to pole puste, aby kontynuować instalację."; $a->strings["Command line PHP"] = "Linia komend PHP"; $a->strings["PHP executable is not the php cli binary (could be cgi-fgci version)"] = ""; $a->strings["Found PHP version: "] = "Znaleziono wersje PHP:"; -$a->strings["PHP cli binary"] = ""; +$a->strings["PHP cli binary"] = "PHP cli binarny"; $a->strings["The command line version of PHP on your system does not have \"register_argc_argv\" enabled."] = "Wersja linii poleceń PHP w twoim systemie nie ma aktywowanego \"register_argc_argv\"."; $a->strings["This is required for message delivery to work."] = "To jest wymagane do dostarczenia wiadomości do pracy."; $a->strings["PHP register_argc_argv"] = ""; @@ -1402,24 +1402,24 @@ $a->strings["Error: openssl PHP module required but not installed."] = "Błąd: $a->strings["Error: PDO or MySQLi PHP module required but not installed."] = "Błąd: Wymagany moduł PDO lub MySQLi PHP, ale nie zainstalowany."; $a->strings["Error: The MySQL driver for PDO is not installed."] = "Błąd: Sterownik MySQL dla PDO nie jest zainstalowany."; $a->strings["Error: mb_string PHP module required but not installed."] = "Błąd: moduł PHP mb_string jest wymagany ale nie jest zainstalowany"; -$a->strings["Error: iconv PHP module required but not installed."] = ""; -$a->strings["Error: POSIX PHP module required but not installed."] = ""; -$a->strings["Error, XML PHP module required but not installed."] = ""; +$a->strings["Error: iconv PHP module required but not installed."] = "Błąd: wymagany moduł PHP iconv, ale nie zainstalowany."; +$a->strings["Error: POSIX PHP module required but not installed."] = "Błąd: wymagany moduł POSIX PHP, ale nie zainstalowany."; +$a->strings["Error, XML PHP module required but not installed."] = "Błąd, wymagany moduł XML PHP, ale nie zainstalowany."; $a->strings["The web installer needs to be able to create a file called \".htconfig.php\" in the top folder of your web server and it is unable to do so."] = "Instalator WWW musi być w stanie utworzyć plik o nazwie \". Htconfig.php\" i nie jest w stanie tego zrobić."; -$a->strings["This is most often a permission setting, as the web server may not be able to write files in your folder - even if you can."] = ""; -$a->strings["At the end of this procedure, we will give you a text to save in a file named .htconfig.php in your Friendica top folder."] = ""; -$a->strings["You can alternatively skip this procedure and perform a manual installation. Please see the file \"INSTALL.txt\" for instructions."] = ""; +$a->strings["This is most often a permission setting, as the web server may not be able to write files in your folder - even if you can."] = "Jest to najczęściej ustawienie uprawnień, ponieważ serwer sieciowy może nie być w stanie zapisywać plików w folderze - nawet jeśli możesz."; +$a->strings["At the end of this procedure, we will give you a text to save in a file named .htconfig.php in your Friendica top folder."] = "Pod koniec tej procedury podamy Ci tekst do zapisania w pliku o nazwie .htconfig.php w twoim górnym folderze Friendica."; +$a->strings["You can alternatively skip this procedure and perform a manual installation. Please see the file \"INSTALL.txt\" for instructions."] = "Alternatywnie można pominąć tę procedurę i wykonać ręczną instalację. Proszę zobaczyć plik 'INSTALL.txt' z instrukcjami."; $a->strings[".htconfig.php is writable"] = ".htconfig.php jest zapisywalny"; $a->strings["Friendica uses the Smarty3 template engine to render its web views. Smarty3 compiles templates to PHP to speed up rendering."] = "Friendica używa silnika szablonów Smarty3 do renderowania swoich widoków. Smarty3 kompiluje szablony do PHP, aby przyspieszyć renderowanie."; -$a->strings["In order to store these compiled templates, the web server needs to have write access to the directory view/smarty3/ under the Friendica top level folder."] = ""; -$a->strings["Please ensure that the user that your web server runs as (e.g. www-data) has write access to this folder."] = ""; +$a->strings["In order to store these compiled templates, the web server needs to have write access to the directory view/smarty3/ under the Friendica top level folder."] = "Aby przechowywać te skompilowane szablony, serwer WWW musi mieć dostęp do zapisu do katalogu view/smarty3/ w folderze najwyższego poziomu Friendica."; +$a->strings["Please ensure that the user that your web server runs as (e.g. www-data) has write access to this folder."] = "Upewnij się, że użytkownik, na którym działa serwer WWW (np. www-data), ma prawo do zapisu do tego folderu."; $a->strings["Note: as a security measure, you should give the web server write access to view/smarty3/ only--not the template files (.tpl) that it contains."] = ""; $a->strings["view/smarty3 is writable"] = "view/smarty3 jest zapisywalny"; $a->strings["Url rewrite in .htaccess is not working. Check your server configuration."] = ""; $a->strings["Url rewrite is working"] = ""; -$a->strings["ImageMagick PHP extension is not installed"] = ""; -$a->strings["ImageMagick PHP extension is installed"] = ""; -$a->strings["ImageMagick supports GIF"] = ""; +$a->strings["ImageMagick PHP extension is not installed"] = "Rozszerzenie PHP ImageMagick nie jest zainstalowane"; +$a->strings["ImageMagick PHP extension is installed"] = "Rozszerzenie PHP ImageMagick jest zainstalowane"; +$a->strings["ImageMagick supports GIF"] = "ImageMagick obsługuje GIF"; $a->strings["The database configuration file \".htconfig.php\" could not be written. Please use the enclosed text to create a configuration file in your web server root."] = "Konfiguracja bazy danych pliku \".htconfig.php\" nie mogła zostać zapisana. Proszę użyć załączonego tekstu, aby utworzyć folder konfiguracyjny w sieci serwera."; $a->strings["

    What next

    "] = "

    Co dalej

    "; $a->strings["IMPORTANT: You will need to [manually] setup a scheduled task for the worker."] = ""; @@ -1437,7 +1437,7 @@ $a->strings["Couldn't fetch information for contact."] = ""; $a->strings["Couldn't fetch friends for contact."] = ""; $a->strings["success"] = "powodzenie"; $a->strings["failed"] = "nie udało się"; -$a->strings["ignored"] = ""; +$a->strings["ignored"] = "Ignoruj"; $a->strings["Image uploaded but image cropping failed."] = "Obrazek załadowany, ale oprawanie powiodła się."; $a->strings["Image size reduction [%s] failed."] = "Redukcja rozmiaru obrazka [%s] nie powiodła się."; $a->strings["Shift-reload the page or clear browser cache if the new photo does not display immediately."] = "Ponownie załaduj stronę lub wyczyść pamięć podręczną przeglądarki, jeśli nowe zdjęcie nie pojawi się natychmiast."; @@ -1456,14 +1456,14 @@ $a->strings["Profile-"] = "Profil-"; $a->strings["New profile created."] = "Utworzono nowy profil."; $a->strings["Profile unavailable to clone."] = "Nie można powileić profilu "; $a->strings["Profile Name is required."] = "Nazwa Profilu jest wymagana"; -$a->strings["Marital Status"] = ""; -$a->strings["Romantic Partner"] = ""; +$a->strings["Marital Status"] = "Stan cywilny"; +$a->strings["Romantic Partner"] = "Romantyczny partner"; $a->strings["Work/Employment"] = "Praca/Zatrudnienie"; $a->strings["Religion"] = "Religia"; $a->strings["Political Views"] = "Poglądy polityczne"; $a->strings["Gender"] = "Płeć"; $a->strings["Sexual Preference"] = "Orientacja seksualna"; -$a->strings["XMPP"] = ""; +$a->strings["XMPP"] = "XMPP"; $a->strings["Homepage"] = "Strona Główna"; $a->strings["Interests"] = "Zainteresowania"; $a->strings["Location"] = "Położenie"; @@ -1473,10 +1473,10 @@ $a->strings["public profile"] = "profil publiczny"; $a->strings["%1\$s changed %2\$s to “%3\$s”"] = ""; $a->strings[" - Visit %1\$s's %2\$s"] = " - Odwiedźa %1\$s's %2\$s"; $a->strings["%1\$s has an updated %2\$s, changing %3\$s."] = ""; -$a->strings["Hide contacts and friends:"] = ""; +$a->strings["Hide contacts and friends:"] = "Ukryj kontakty i znajomych:"; $a->strings["Hide your contact/friend list from viewers of this profile?"] = "Czy chcesz ukryć listę kontaktów dla przeglądających to konto?"; -$a->strings["Show more profile fields:"] = ""; -$a->strings["Profile Actions"] = ""; +$a->strings["Show more profile fields:"] = "Pokaż więcej pól profilu:"; +$a->strings["Profile Actions"] = "Akcje profilowe"; $a->strings["Edit Profile Details"] = "Edytuj profil."; $a->strings["Change Profile Photo"] = "Zmień profilowe zdjęcie"; $a->strings["View this profile"] = "Zobacz ten profil"; @@ -1484,16 +1484,16 @@ $a->strings["Edit visibility"] = "Edytuj widoczność"; $a->strings["Create a new profile using these settings"] = "Stwórz nowy profil wykorzystując te ustawienia"; $a->strings["Clone this profile"] = "Sklonuj ten profil"; $a->strings["Delete this profile"] = "Usuń ten profil"; -$a->strings["Basic information"] = ""; -$a->strings["Profile picture"] = ""; +$a->strings["Basic information"] = "Podstawowe informacje"; +$a->strings["Profile picture"] = "Zdjęcie profilowe"; $a->strings["Preferences"] = "Preferencje"; -$a->strings["Status information"] = ""; -$a->strings["Additional information"] = ""; -$a->strings["Relation"] = ""; +$a->strings["Status information"] = "Informacje o stanie"; +$a->strings["Additional information"] = "Dodatkowe informacje"; +$a->strings["Relation"] = "Relacje"; $a->strings["Miscellaneous"] = "Różny"; $a->strings["Your Gender:"] = "Twoja płeć:"; $a->strings[" Marital Status:"] = " Stan :"; -$a->strings["Sexual Preference:"] = "Interesują mnie:"; +$a->strings["Sexual Preference:"] = "Preferencje seksualne:"; $a->strings["Example: fishing photography software"] = "Przykład: kończenie oprogramowania fotografii"; $a->strings["Profile Name:"] = "Nazwa profilu :"; $a->strings["This is your public profile.
    It may be visible to anybody using the internet."] = "To jest Twój publiczny profil.
    Może zostać wyświetlony przez każdego kto używa internetu."; @@ -1501,7 +1501,7 @@ $a->strings["Your Full Name:"] = "Twoje imię i nazwisko:"; $a->strings["Title/Description:"] = "Tytuł/Opis :"; $a->strings["Street Address:"] = "Ulica:"; $a->strings["Locality/City:"] = "Miejscowość/Miasto :"; -$a->strings["Region/State:"] = "Region / Stan :"; +$a->strings["Region/State:"] = "Region/Państwo:"; $a->strings["Postal/Zip Code:"] = "Kod Pocztowy :"; $a->strings["Country:"] = "Kraj:"; $a->strings["Age: "] = "Wiek: "; @@ -1520,7 +1520,7 @@ $a->strings["(Used for suggesting potential friends, can be seen by others)"] = $a->strings["Private Keywords:"] = "Prywatne słowa kluczowe :"; $a->strings["(Used for searching profiles, never shown to others)"] = "(Używany do wyszukiwania profili, niepokazywany innym)"; $a->strings["Likes:"] = "Lubi:"; -$a->strings["Dislikes:"] = ""; +$a->strings["Dislikes:"] = "Nie lubi:"; $a->strings["Musical interests"] = "Muzyka"; $a->strings["Books, literature"] = "Literatura"; $a->strings["Television"] = "Telewizja"; @@ -1536,18 +1536,18 @@ $a->strings["Edit/Manage Profiles"] = "Edytuj/Zarządzaj Profilami"; $a->strings["Change profile photo"] = "Zmień zdjęcie profilowe"; $a->strings["Create New Profile"] = "Stwórz nowy profil"; $a->strings["Display"] = "Pokaz"; -$a->strings["Social Networks"] = ""; +$a->strings["Social Networks"] = "Portale społecznościowe"; $a->strings["Delegations"] = ""; $a->strings["Connected apps"] = "Powiązane aplikacje"; $a->strings["Remove account"] = "Usuń konto"; $a->strings["Missing some important data!"] = "Brakuje ważnych danych!"; $a->strings["Failed to connect with email account using the settings provided."] = "Połączenie z kontem email używając wybranych ustawień nie powiodło się."; $a->strings["Email settings updated."] = "Zaktualizowano ustawienia email."; -$a->strings["Features updated"] = ""; -$a->strings["Relocate message has been send to your contacts"] = ""; -$a->strings["Passwords do not match. Password unchanged."] = "Hasło nie pasuje. Hasło nie zmienione."; -$a->strings["Empty passwords are not allowed. Password unchanged."] = "Brak hasła niedozwolony. Hasło nie zmienione."; -$a->strings["The new password has been exposed in a public data dump, please choose another."] = ""; +$a->strings["Features updated"] = "Funkcje zaktualizowane"; +$a->strings["Relocate message has been send to your contacts"] = "Przeniesienie wiadomości zostało wysłane do Twoich kontaktów"; +$a->strings["Passwords do not match. Password unchanged."] = "Hasła nie pasują do siebie. Hasło niezmienione."; +$a->strings["Empty passwords are not allowed. Password unchanged."] = "Puste hasła są niedozwolone. Hasło niezmienione."; +$a->strings["The new password has been exposed in a public data dump, please choose another."] = "Nowe hasło zostało ujawnione w publicznym zrzucie danych, wybierz inne."; $a->strings["Wrong password."] = "Złe hasło."; $a->strings["Password changed."] = "Hasło zostało zmianione."; $a->strings["Password update failed. Please try again."] = "Aktualizacja hasła nie powiodła się. Proszę spróbować ponownie."; @@ -1555,13 +1555,13 @@ $a->strings[" Please use a shorter name."] = "Proszę użyć krótszej nazwy."; $a->strings[" Name too short."] = "Za krótka nazwa."; $a->strings["Wrong Password"] = "Złe hasło"; $a->strings["Invalid email."] = "Niepoprawny e-mail."; -$a->strings["Cannot change to that email."] = ""; -$a->strings["Private forum has no privacy permissions. Using default privacy group."] = ""; +$a->strings["Cannot change to that email."] = "Nie można zmienić tego e-maila."; +$a->strings["Private forum has no privacy permissions. Using default privacy group."] = "Prywatne forum nie ma uprawnień do prywatności. Użyj domyślnej grupy prywatnej."; $a->strings["Private forum has no privacy permissions and no default privacy group."] = ""; $a->strings["Settings updated."] = "Zaktualizowano ustawienia."; $a->strings["Add application"] = "Dodaj aplikacje"; -$a->strings["Consumer Key"] = "Klucz konsumenta"; -$a->strings["Consumer Secret"] = "Sekret konsumenta"; +$a->strings["Consumer Key"] = "Klucz klienta"; +$a->strings["Consumer Secret"] = "Sekret klienta"; $a->strings["Redirect"] = "Przekierowanie"; $a->strings["Icon url"] = "Adres ikony"; $a->strings["You can't edit this application."] = "Nie możesz edytować tej aplikacji."; @@ -1570,9 +1570,9 @@ $a->strings["Edit"] = "Edytuj"; $a->strings["Client key starts with"] = "Klucz klienta zaczyna się od"; $a->strings["No name"] = "Bez nazwy"; $a->strings["Remove authorization"] = "Odwołaj upoważnienie"; -$a->strings["No Addon settings configured"] = ""; +$a->strings["No Addon settings configured"] = "Brak skonfigurowanych ustawień Dodatków"; $a->strings["Addon Settings"] = "Ustawienia Dodatków"; -$a->strings["Additional Features"] = ""; +$a->strings["Additional Features"] = "Dodatkowe funkcje"; $a->strings["Diaspora"] = "Diaspora"; $a->strings["enabled"] = "włączony"; $a->strings["disabled"] = "wyłączony"; @@ -1581,12 +1581,12 @@ $a->strings["GNU Social (OStatus)"] = ""; $a->strings["Email access is disabled on this site."] = "Dostęp do e-maila nie jest w pełni sprawny na tej stronie"; $a->strings["General Social Media Settings"] = ""; $a->strings["Disable intelligent shortening"] = ""; -$a->strings["Normally the system tries to find the best link to add to shortened posts. If this option is enabled then every shortened post will always point to the original friendica post."] = ""; -$a->strings["Automatically follow any GNU Social (OStatus) followers/mentioners"] = ""; -$a->strings["If you receive a message from an unknown OStatus user, this option decides what to do. If it is checked, a new contact will be created for every unknown user."] = ""; -$a->strings["Default group for OStatus contacts"] = ""; -$a->strings["Your legacy GNU Social account"] = ""; -$a->strings["If you enter your old GNU Social/Statusnet account name here (in the format user@domain.tld), your contacts will be added automatically. The field will be emptied when done."] = ""; +$a->strings["Normally the system tries to find the best link to add to shortened posts. If this option is enabled then every shortened post will always point to the original friendica post."] = "Zwykle system próbuje znaleźć najlepszy link do dodania do skróconych postów. Jeśli ta opcja jest włączona, każdy skrócony wpis zawsze wskazuje oryginalny post znajomej osoby."; +$a->strings["Automatically follow any GNU Social (OStatus) followers/mentioners"] = "Automatycznie podążaj za wszystkimi obserwatorami/rzecznikami GNU Społeczności (OStatus)"; +$a->strings["If you receive a message from an unknown OStatus user, this option decides what to do. If it is checked, a new contact will be created for every unknown user."] = "Jeśli otrzymasz wiadomość od nieznanego użytkownika OStatus, ta opcja decyduje, co zrobić. Jeśli zostanie zaznaczone, dla każdego nieznanego użytkownika zostanie utworzony nowy kontakt."; +$a->strings["Default group for OStatus contacts"] = "Domyślna grupa dla kontaktów OStatus"; +$a->strings["Your legacy GNU Social account"] = "Twoje starsze konto społecznościowe GNU"; +$a->strings["If you enter your old GNU Social/Statusnet account name here (in the format user@domain.tld), your contacts will be added automatically. The field will be emptied when done."] = "Jeśli podasz swoją starą nazwę konta GNU Social/Statusnet tutaj (w formacie user@domain.tld), twoje kontakty zostaną dodane automatycznie. Pole zostanie opróżnione po zakończeniu."; $a->strings["Repair OStatus subscriptions"] = "Napraw subskrypcje OStatus"; $a->strings["Email/Mailbox Setup"] = "Ustawienia emaila/skrzynki mailowej"; $a->strings["If you wish to communicate with email contacts using this service (optional), please specify how to connect to your mailbox."] = "Jeżeli życzysz sobie komunikowania z kontaktami email używając tego serwisu (opcjonalne), opisz jak połaczyć się z Twoją skrzynką email."; @@ -1603,36 +1603,36 @@ $a->strings["Action after import:"] = "Akcja po zaimportowaniu:"; $a->strings["Mark as seen"] = "Oznacz jako przeczytane"; $a->strings["Move to folder"] = "Przenieś do folderu"; $a->strings["Move to folder:"] = "Przenieś do folderu:"; -$a->strings["%s - (Unsupported)"] = ""; -$a->strings["%s - (Experimental)"] = ""; +$a->strings["%s - (Unsupported)"] = "%s - (Nieobsługiwane)"; +$a->strings["%s - (Experimental)"] = "%s- (Eksperymentalne)"; $a->strings["Display Settings"] = "Wyświetl ustawienia"; $a->strings["Display Theme:"] = "Wyświetl motyw:"; $a->strings["Mobile Theme:"] = "Mobilny motyw:"; $a->strings["Suppress warning of insecure networks"] = ""; $a->strings["Should the system suppress the warning that the current group contains members of networks that can't receive non public postings."] = ""; $a->strings["Update browser every xx seconds"] = "Odświeżaj stronę co xx sekund"; -$a->strings["Minimum of 10 seconds. Enter -1 to disable it."] = ""; +$a->strings["Minimum of 10 seconds. Enter -1 to disable it."] = "Minimum 10 sekund. Wprowadź -1, aby go wyłączyć."; $a->strings["Number of items to display per page:"] = ""; $a->strings["Maximum of 100 items"] = "Maksymalnie 100 elementów"; -$a->strings["Number of items to display per page when viewed from mobile device:"] = ""; +$a->strings["Number of items to display per page when viewed from mobile device:"] = "Liczba elementów do wyświetlenia na stronie podczas przeglądania z urządzenia mobilnego:"; $a->strings["Don't show emoticons"] = "Nie pokazuj emotikonek"; $a->strings["Calendar"] = "Kalendarz"; -$a->strings["Beginning of week:"] = ""; +$a->strings["Beginning of week:"] = "Początek tygodnia:"; $a->strings["Don't show notices"] = "Nie pokazuj powiadomień"; $a->strings["Infinite scroll"] = "Nieskończone przewijanie"; -$a->strings["Automatic updates only at the top of the network page"] = ""; +$a->strings["Automatic updates only at the top of the network page"] = "Automatyczne aktualizacje tylko u góry strony sieci"; $a->strings["When disabled, the network page is updated all the time, which could be confusing while reading."] = ""; $a->strings["Bandwith Saver Mode"] = ""; $a->strings["When enabled, embedded content is not displayed on automatic updates, they only show on page reload."] = ""; -$a->strings["Smart Threading"] = ""; +$a->strings["Smart Threading"] = "Inteligentne gwintowanie"; $a->strings["When enabled, suppress extraneous thread indentation while keeping it where it matters. Only works if threading is available and enabled."] = ""; -$a->strings["General Theme Settings"] = ""; -$a->strings["Custom Theme Settings"] = ""; -$a->strings["Content Settings"] = ""; +$a->strings["General Theme Settings"] = "Ogólne ustawienia motywu"; +$a->strings["Custom Theme Settings"] = "Niestandardowe ustawienia motywów"; +$a->strings["Content Settings"] = "Ustawienia zawartości"; $a->strings["Theme settings"] = "Ustawienia motywu"; $a->strings["Unable to find your profile. Please contact your admin."] = "Nie można znaleźć Twojego profilu. Skontaktuj się z administratorem."; -$a->strings["Account Types"] = ""; -$a->strings["Personal Page Subtypes"] = ""; +$a->strings["Account Types"] = "Rodzaje kont"; +$a->strings["Personal Page Subtypes"] = "Podtypy osobistych stron"; $a->strings["Community Forum Subtypes"] = ""; $a->strings["Personal Page"] = "Strona osobista"; $a->strings["Account for a personal profile."] = "Konto dla profilu osobistego."; @@ -1642,57 +1642,57 @@ $a->strings["News Page"] = "Strona Wiadomości"; $a->strings["Account for a news reflector that automatically approves contact requests as \"Followers\"."] = ""; $a->strings["Community Forum"] = ""; $a->strings["Account for community discussions."] = ""; -$a->strings["Normal Account Page"] = ""; -$a->strings["Account for a regular personal profile that requires manual approval of \"Friends\" and \"Followers\"."] = ""; +$a->strings["Normal Account Page"] = "Normalna strona konta"; +$a->strings["Account for a regular personal profile that requires manual approval of \"Friends\" and \"Followers\"."] = "Konto dla zwykłego profilu osobistego, który wymaga ręcznej zgody \"Przyjaciół\" i \"Obserwatorów\"."; $a->strings["Soapbox Page"] = ""; -$a->strings["Account for a public profile that automatically approves contact requests as \"Followers\"."] = ""; -$a->strings["Public Forum"] = ""; -$a->strings["Automatically approves all contact requests."] = ""; -$a->strings["Automatic Friend Page"] = ""; -$a->strings["Account for a popular profile that automatically approves contact requests as \"Friends\"."] = ""; -$a->strings["Private Forum [Experimental]"] = ""; -$a->strings["Requires manual approval of contact requests."] = ""; +$a->strings["Account for a public profile that automatically approves contact requests as \"Followers\"."] = "Konto dla profilu publicznego, który automatycznie zatwierdza prośby o kontakt jako \"Obserwatorzy\"."; +$a->strings["Public Forum"] = "Forum publiczne"; +$a->strings["Automatically approves all contact requests."] = "Automatycznie zatwierdza wszystkie prośby o kontakt."; +$a->strings["Automatic Friend Page"] = "Automatyczna strona znajomego"; +$a->strings["Account for a popular profile that automatically approves contact requests as \"Friends\"."] = "Konto popularnego profilu, które automatycznie zatwierdza prośby o kontakt jako \"Przyjaciele\"."; +$a->strings["Private Forum [Experimental]"] = "Prywatne Forum [Eksperymentalne]"; +$a->strings["Requires manual approval of contact requests."] = "Wymaga ręcznego zatwierdzania żądań kontaktów."; $a->strings["OpenID:"] = "OpenID:"; -$a->strings["(Optional) Allow this OpenID to login to this account."] = "Przeznacz to OpenID do logowania się na to konto."; -$a->strings["Publish your default profile in your local site directory?"] = "Czy publikować Twój profil w lokalnym katalogu tej instancji?"; +$a->strings["(Optional) Allow this OpenID to login to this account."] = "(Opcjonalnie) Pozwól temu OpenID zalogować się na to konto."; +$a->strings["Publish your default profile in your local site directory?"] = "Opublikować swój domyślny profil w swoim lokalnym katalogu stron?"; $a->strings["Your profile will be published in the global friendica directories (e.g. %s). Your profile will be visible in public."] = ""; $a->strings["Publish your default profile in the global social directory?"] = "Opublikować twój niewypełniony profil w globalnym, społecznym katalogu?"; -$a->strings["Your profile will be published in this node's local directory. Your profile details may be publicly visible depending on the system settings."] = ""; +$a->strings["Your profile will be published in this node's local directory. Your profile details may be publicly visible depending on the system settings."] = "Twój profil zostanie opublikowany w lokalnym katalogu tego węzła. Dane Twojego profilu mogą być publicznie widoczne w zależności od ustawień systemu."; $a->strings["Hide your contact/friend list from viewers of your default profile?"] = "Ukryć listę znajomych przed odwiedzającymi Twój profil?"; -$a->strings["Your contact list won't be shown in your default profile page. You can decide to show your contact list separately for each additional profile you create"] = ""; -$a->strings["Hide your profile details from anonymous viewers?"] = ""; -$a->strings["Anonymous visitors will only see your profile picture, your display name and the nickname you are using on your profile page. Disables posting public messages to Diaspora and other networks."] = ""; +$a->strings["Your contact list won't be shown in your default profile page. You can decide to show your contact list separately for each additional profile you create"] = "Twoja lista kontaktów nie będzie wyświetlana na domyślnej stronie profilu. Możesz zdecydować o wyświetleniu listy kontaktów osobno dla każdego tworzonego dodatkowego profilu"; +$a->strings["Hide your profile details from anonymous viewers?"] = "Ukryj dane swojego profilu przed anonimowymi widzami?"; +$a->strings["Anonymous visitors will only see your profile picture, your display name and the nickname you are using on your profile page. Disables posting public messages to Diaspora and other networks."] = "Anonimowi użytkownicy zobaczą tylko Twoje zdjęcie profilowe, swoją wyświetlaną nazwę i pseudonim, którego używasz na stronie profilu. Wyłącza wysyłanie publicznych wiadomości do Diaspory i innych sieci."; $a->strings["Allow friends to post to your profile page?"] = "Zezwól na dodawanie postów na twoim profilu przez znajomych"; -$a->strings["Your contacts may write posts on your profile wall. These posts will be distributed to your contacts"] = ""; +$a->strings["Your contacts may write posts on your profile wall. These posts will be distributed to your contacts"] = "Twoi znajomi mogą pisać posty na ścianie Twojego profilu. Te posty zostaną przesłane do Twoich kontaktów"; $a->strings["Allow friends to tag your posts?"] = "Zezwól na oznaczanie twoich postów przez znajomych"; -$a->strings["Your contacts can add additional tags to your posts."] = ""; -$a->strings["Allow us to suggest you as a potential friend to new members?"] = ""; -$a->strings["If you like, Friendica may suggest new members to add you as a contact."] = ""; -$a->strings["Permit unknown people to send you private mail?"] = ""; -$a->strings["Friendica network users may send you private messages even if they are not in your contact list."] = ""; +$a->strings["Your contacts can add additional tags to your posts."] = "Twoje kontakty mogą dodawać do tagów dodatkowe tagi."; +$a->strings["Allow us to suggest you as a potential friend to new members?"] = "Pozwól nam zasugerować Cię jako potencjalnego przyjaciela dla nowych członków?"; +$a->strings["If you like, Friendica may suggest new members to add you as a contact."] = "Jeśli chcesz, Friendica może zaproponować nowym członkom dodanie Cię jako kontakt."; +$a->strings["Permit unknown people to send you private mail?"] = "Zezwolić nieznanym osobom na wysyłanie prywatnych wiadomości?"; +$a->strings["Friendica network users may send you private messages even if they are not in your contact list."] = "Użytkownicy sieci w serwisie Friendica mogą wysyłać prywatne wiadomości, nawet jeśli nie znajdują się one na liście kontaktów."; $a->strings["Profile is not published."] = "Profil nie jest opublikowany"; $a->strings["Your Identity Address is '%s' or '%s'."] = ""; -$a->strings["Automatically expire posts after this many days:"] = ""; +$a->strings["Automatically expire posts after this many days:"] = "Automatycznie wygasaj posty po tych wielu dniach:"; $a->strings["If empty, posts will not expire. Expired posts will be deleted"] = "Pole puste, wiadomość nie wygaśnie. Niezapisane wpisy zostaną usunięte."; -$a->strings["Advanced expiration settings"] = ""; -$a->strings["Advanced Expiration"] = ""; +$a->strings["Advanced expiration settings"] = "Zaawansowane ustawienia wygasania"; +$a->strings["Advanced Expiration"] = "Zaawansowane wygasanie"; $a->strings["Expire posts:"] = "Wygasające posty:"; $a->strings["Expire personal notes:"] = "Wygasające notatki osobiste:"; -$a->strings["Expire starred posts:"] = ""; -$a->strings["Expire photos:"] = "Wygasające zdjęcia:"; +$a->strings["Expire starred posts:"] = "Wygasaj posty oznaczone gwiazdką:"; +$a->strings["Expire photos:"] = "Wygasanie zdjęć:"; $a->strings["Only expire posts by others:"] = ""; $a->strings["Account Settings"] = "Ustawienia konta"; $a->strings["Password Settings"] = "Ustawienia hasła"; $a->strings["Leave password fields blank unless changing"] = "Pozostaw pola hasła puste, chyba że chcesz je zmienić."; $a->strings["Current Password:"] = "Obecne hasło:"; -$a->strings["Your current password to confirm the changes"] = ""; +$a->strings["Your current password to confirm the changes"] = "Twoje obecne hasło, potwierdź zmiany"; $a->strings["Password:"] = "Hasło:"; $a->strings["Basic Settings"] = "Ustawienia podstawowe"; $a->strings["Full Name:"] = "Imię i nazwisko:"; $a->strings["Email Address:"] = "Adres email:"; $a->strings["Your Timezone:"] = "Twoja strefa czasowa:"; -$a->strings["Your Language:"] = ""; -$a->strings["Set the language we use to show you friendica interface and to send you emails"] = ""; +$a->strings["Your Language:"] = "Twój język:"; +$a->strings["Set the language we use to show you friendica interface and to send you emails"] = "Ustaw język, którego używamy, aby pokazać interfejs użytkownika i wysłać Ci e-maile"; $a->strings["Default Post Location:"] = "Standardowa lokalizacja wiadomości:"; $a->strings["Use Browser Location:"] = "Użyj położenia przeglądarki:"; $a->strings["Security and Privacy Settings"] = "Ustawienia bezpieczeństwa i prywatności"; @@ -1700,34 +1700,34 @@ $a->strings["Maximum Friend Requests/Day:"] = "Maksymalna liczba zaproszeń do g $a->strings["(to prevent spam abuse)"] = "(aby zapobiec spamowaniu)"; $a->strings["Default Post Permissions"] = "Domyślne prawa dostępu wiadomości"; $a->strings["(click to open/close)"] = "(kliknij by otworzyć/zamknąć)"; -$a->strings["Default Private Post"] = ""; -$a->strings["Default Public Post"] = ""; -$a->strings["Default Permissions for New Posts"] = ""; -$a->strings["Maximum private messages per day from unknown people:"] = ""; +$a->strings["Default Private Post"] = "Domyślny Prywatny Wpis"; +$a->strings["Default Public Post"] = "Domyślny Publiczny Post"; +$a->strings["Default Permissions for New Posts"] = "Uprawnienia domyślne dla nowych postów"; +$a->strings["Maximum private messages per day from unknown people:"] = "Maksymalna liczba wiadomości prywatnych dziennie od nieznanych ludzi:"; $a->strings["Notification Settings"] = "Ustawienia powiadomień"; -$a->strings["By default post a status message when:"] = ""; -$a->strings["accepting a friend request"] = ""; +$a->strings["By default post a status message when:"] = "Domyślnie publikuj komunikat o stanie, gdy:"; +$a->strings["accepting a friend request"] = "przyjmowanie prośby o dodanie do znajomych"; $a->strings["joining a forum/community"] = ""; $a->strings["making an interesting profile change"] = ""; $a->strings["Send a notification email when:"] = "Wyślij powiadmonienia na email, kiedy:"; $a->strings["You receive an introduction"] = "Otrzymałeś zaproszenie"; $a->strings["Your introductions are confirmed"] = "Dane zatwierdzone"; -$a->strings["Someone writes on your profile wall"] = "Ktoś pisze na twojej ścianie profilowej"; +$a->strings["Someone writes on your profile wall"] = "Ktoś pisze na twoim profilu"; $a->strings["Someone writes a followup comment"] = "Ktoś pisze komentarz nawiązujący."; $a->strings["You receive a private message"] = "Otrzymałeś prywatną wiadomość"; $a->strings["You receive a friend suggestion"] = "Otrzymane propozycje znajomych"; -$a->strings["You are tagged in a post"] = "Jesteś oznaczony w poście"; +$a->strings["You are tagged in a post"] = "Jesteś oznaczony tagiem w poście"; $a->strings["You are poked/prodded/etc. in a post"] = ""; -$a->strings["Activate desktop notifications"] = ""; +$a->strings["Activate desktop notifications"] = "Aktywuj powiadomienia na pulpicie"; $a->strings["Show desktop popup on new notifications"] = ""; $a->strings["Text-only notification emails"] = ""; $a->strings["Send text only notification emails, without the html part"] = ""; -$a->strings["Show detailled notifications"] = ""; +$a->strings["Show detailled notifications"] = "Pokaż szczegółowe powiadomienia"; $a->strings["Per default, notifications are condensed to a single notification per item. When enabled every notification is displayed."] = ""; $a->strings["Advanced Account/Page Type Settings"] = ""; $a->strings["Change the behaviour of this account for special situations"] = ""; -$a->strings["Relocate"] = ""; -$a->strings["If you have moved this profile from another server, and some of your contacts don't receive your updates, try pushing this button."] = ""; +$a->strings["Relocate"] = "Przeniesienie"; +$a->strings["If you have moved this profile from another server, and some of your contacts don't receive your updates, try pushing this button."] = "Jeśli ten profil został przeniesiony z innego serwera, a niektóre z Twoich kontaktów nie otrzymają aktualizacji, spróbuj nacisnąć ten przycisk."; $a->strings["Resend relocate message to contacts"] = ""; $a->strings["Contact wasn't found or can't be unfollowed."] = ""; $a->strings["Contact unfollowed"] = ""; @@ -1742,35 +1742,35 @@ $a->strings["comix"] = ""; $a->strings["slackr"] = ""; $a->strings["Variations"] = ""; $a->strings["Repeat the image"] = ""; -$a->strings["Will repeat your image to fill the background."] = ""; +$a->strings["Will repeat your image to fill the background."] = "Powtarza twój obraz, aby wypełnić tło."; $a->strings["Stretch"] = ""; -$a->strings["Will stretch to width/height of the image."] = ""; -$a->strings["Resize fill and-clip"] = ""; -$a->strings["Resize to fill and retain aspect ratio."] = ""; -$a->strings["Resize best fit"] = ""; -$a->strings["Resize to best fit and retain aspect ratio."] = ""; -$a->strings["Default"] = ""; +$a->strings["Will stretch to width/height of the image."] = "Rozciągnie się do szerokości/wysokości obrazu."; +$a->strings["Resize fill and-clip"] = "Zmień rozmiar wypełnienia i klipu"; +$a->strings["Resize to fill and retain aspect ratio."] = "Zmień rozmiar, aby wypełnić i zachować proporcje."; +$a->strings["Resize best fit"] = "Zmień rozmiar, aby najlepiej dopasować"; +$a->strings["Resize to best fit and retain aspect ratio."] = "Zmień rozmiar, aby jak najlepiej dopasować i zachować proporcje."; +$a->strings["Default"] = "Domyślne"; $a->strings["Note"] = "Uwaga"; -$a->strings["Check image permissions if all users are allowed to visit the image"] = ""; +$a->strings["Check image permissions if all users are allowed to visit the image"] = "Sprawdź uprawnienia do obrazu, jeśli wszyscy użytkownicy mogą odwiedzać obraz"; $a->strings["Select scheme"] = "Wybierz schemat"; -$a->strings["Navigation bar background color"] = ""; -$a->strings["Navigation bar icon color "] = ""; -$a->strings["Link color"] = ""; -$a->strings["Set the background color"] = ""; -$a->strings["Content background opacity"] = ""; -$a->strings["Set the background image"] = ""; -$a->strings["Login page background image"] = ""; -$a->strings["Login page background color"] = ""; -$a->strings["Leave background image and color empty for theme defaults"] = ""; +$a->strings["Navigation bar background color"] = "Kolor tła paska nawigacyjnego"; +$a->strings["Navigation bar icon color "] = "Kolor ikony paska nawigacyjnego"; +$a->strings["Link color"] = "Kolor łączy"; +$a->strings["Set the background color"] = "Ustaw kolor tła"; +$a->strings["Content background opacity"] = "Nieprzezroczystość tła treści"; +$a->strings["Set the background image"] = "Ustaw obraz tła"; +$a->strings["Login page background image"] = "Obraz tła strony logowania"; +$a->strings["Login page background color"] = "Kolor tła strony logowania"; +$a->strings["Leave background image and color empty for theme defaults"] = "Pozostaw obraz tła i kolor pusty dla domyślnych ustawień kompozycji"; $a->strings["Guest"] = "Gość"; -$a->strings["Visitor"] = ""; +$a->strings["Visitor"] = "Odwiedzający"; $a->strings["Logout"] = "Wyloguj się"; $a->strings["End this session"] = "Zakończ sesję"; $a->strings["Your posts and conversations"] = "Twoje posty i rozmowy"; $a->strings["Your profile page"] = "Twoja strona profilowa"; $a->strings["Your photos"] = "Twoje zdjęcia"; $a->strings["Videos"] = "Filmy"; -$a->strings["Your videos"] = ""; +$a->strings["Your videos"] = "Twoje filmy"; $a->strings["Your events"] = "Twoje wydarzenia"; $a->strings["Conversations from your friends"] = "Rozmowy Twoich przyjaciół"; $a->strings["Events and Calendar"] = "Wydarzenia i kalendarz"; @@ -1781,42 +1781,42 @@ $a->strings["Alignment"] = "Wyrównanie"; $a->strings["Left"] = "Lewo"; $a->strings["Center"] = "Środek"; $a->strings["Color scheme"] = "Zestaw kolorów"; -$a->strings["Posts font size"] = ""; -$a->strings["Textareas font size"] = ""; -$a->strings["Comma separated list of helper forums"] = ""; +$a->strings["Posts font size"] = "Rozmiar czcionki postów"; +$a->strings["Textareas font size"] = "Rozmiar czcionki Textareas"; +$a->strings["Comma separated list of helper forums"] = "Lista pomocników oddzielona przecinkami"; $a->strings["don't show"] = "nie pokazuj"; $a->strings["show"] = "pokaż"; -$a->strings["Set style"] = ""; -$a->strings["Community Pages"] = "Strony społecznościowe"; -$a->strings["Community Profiles"] = ""; +$a->strings["Set style"] = "Ustaw styl"; +$a->strings["Community Pages"] = "Strony społeczności"; +$a->strings["Community Profiles"] = "Profile społeczności"; $a->strings["Help or @NewHere ?"] = ""; $a->strings["Connect Services"] = "Połączone serwisy"; $a->strings["Find Friends"] = "Znajdź znajomych"; $a->strings["Last users"] = "Ostatni użytkownicy"; -$a->strings["Local Directory"] = ""; +$a->strings["Local Directory"] = "Katalog lokalny"; $a->strings["Similar Interests"] = "Podobne zainteresowania"; $a->strings["Invite Friends"] = "Zaproś znajomych"; -$a->strings["External link to forum"] = ""; -$a->strings["Quick Start"] = ""; +$a->strings["External link to forum"] = "Zewnętrzny link do forum"; +$a->strings["Quick Start"] = "Szybki start"; $a->strings["Error decoding account file"] = "Błąd podczas odczytu pliku konta"; -$a->strings["Error! No version data in file! This is not a Friendica account file?"] = ""; +$a->strings["Error! No version data in file! This is not a Friendica account file?"] = "Błąd! Brak danych wersji w pliku! To nie jest plik konta Friendica?"; $a->strings["User '%s' already exists on this server!"] = "Użytkownik '%s' już istnieje na tym serwerze!"; -$a->strings["User creation error"] = ""; -$a->strings["User profile creation error"] = ""; +$a->strings["User creation error"] = "Błąd tworzenia użytkownika"; +$a->strings["User profile creation error"] = "Błąd tworzenia profilu użytkownika"; $a->strings["%d contact not imported"] = [ 0 => "Nie zaimportowano %d kontaktu.", 1 => "Nie zaimportowano %d kontaktów.", 2 => "Nie zaimportowano %d kontaktów.", - 3 => "Nie zaimportowano %d kontaktów.", + 3 => "%dkontakty nie zostały zaimportowane ", ]; -$a->strings["Done. You can now login with your username and password"] = "Wykonano. Teraz możesz się zalogować z użyciem loginu i hasła."; -$a->strings["Post to Email"] = "Wyślij poprzez email"; -$a->strings["Hide your profile details from unknown viewers?"] = "Ukryć szczegóły twojego profilu przed nieznajomymi ?"; +$a->strings["Done. You can now login with your username and password"] = "Gotowe. Możesz teraz zalogować się, podając swoją nazwę użytkownika i hasło."; +$a->strings["Post to Email"] = "Prześlij e-mailem"; +$a->strings["Hide your profile details from unknown viewers?"] = "Ukryć szczegóły twojego profilu przed nieznajomymi?"; $a->strings["Connectors disabled, since \"%s\" is enabled."] = ""; $a->strings["Visible to everybody"] = "Widoczny dla wszystkich"; $a->strings["Close"] = "Zamknij"; $a->strings["System"] = "System"; -$a->strings["Home"] = "Dom"; +$a->strings["Home"] = "Strona domowa"; $a->strings["Introductions"] = "Wstępy"; $a->strings["%s commented on %s's post"] = "%s skomentował wpis %s"; $a->strings["%s created a new post"] = "%s dodał nowy wpis"; @@ -1824,13 +1824,13 @@ $a->strings["%s liked %s's post"] = "%s polubił wpis %s"; $a->strings["%s disliked %s's post"] = "%s przestał lubić post %s"; $a->strings["%s is attending %s's event"] = ""; $a->strings["%s is not attending %s's event"] = ""; -$a->strings["%s may attend %s's event"] = ""; +$a->strings["%s may attend %s's event"] = "%smoże uczestniczyć %s w wydarzeniu"; $a->strings["%s is now friends with %s"] = "%s jest teraz znajomym %s"; $a->strings["Friend Suggestion"] = "Propozycja znajomych"; $a->strings["Friend/Connect Request"] = "Prośba o dodanie do przyjaciół/powiązanych"; -$a->strings["New Follower"] = "Nowy obserwator"; +$a->strings["New Follower"] = "Nowy obserwujący"; $a->strings["Birthday:"] = "Urodziny:"; -$a->strings["YYYY-MM-DD or MM-DD"] = ""; +$a->strings["YYYY-MM-DD or MM-DD"] = "RRRR-MM-DD lub MM-DD"; $a->strings["never"] = "nigdy"; $a->strings["less than a second ago"] = "mniej niż sekundę temu"; $a->strings["year"] = "rok"; @@ -1847,11 +1847,11 @@ $a->strings["seconds"] = "sekundy"; $a->strings["%1\$d %2\$s ago"] = "%1\$d %2\$s temu"; $a->strings["view full size"] = "Zobacz w pełnym wymiarze"; $a->strings["Image/photo"] = "Obrazek/zdjęcie"; -$a->strings["%2\$s %3\$s"] = ""; +$a->strings["%2\$s %3\$s"] = "%2\$s%3\$s"; $a->strings["$1 wrote:"] = "$1 napisał:"; $a->strings["Encrypted content"] = "Szyfrowana treść"; -$a->strings["Invalid source protocol"] = ""; -$a->strings["Invalid link protocol"] = ""; +$a->strings["Invalid source protocol"] = "Nieprawidłowy protokół źródłowy"; +$a->strings["Invalid link protocol"] = "Niepoprawny link protokołu"; $a->strings["Frequently"] = "Jak najczęściej"; $a->strings["Hourly"] = "Godzinowo"; $a->strings["Twice daily"] = "Dwa razy dziennie"; @@ -1861,15 +1861,15 @@ $a->strings["Monthly"] = "Miesięcznie"; $a->strings["OStatus"] = "OStatus"; $a->strings["RSS/Atom"] = "RSS/Atom"; $a->strings["Facebook"] = "Facebook"; -$a->strings["Zot!"] = ""; +$a->strings["Zot!"] = "Zot!"; $a->strings["LinkedIn"] = "LinkedIn"; $a->strings["XMPP/IM"] = "XMPP/IM"; $a->strings["MySpace"] = "MySpace"; $a->strings["Google+"] = "Google+"; $a->strings["pump.io"] = ""; -$a->strings["Twitter"] = ""; +$a->strings["Twitter"] = "Twitter"; $a->strings["Diaspora Connector"] = ""; -$a->strings["GNU Social Connector"] = ""; +$a->strings["GNU Social Connector"] = "GNU Łącze Społecznościowe"; $a->strings["pnut"] = ""; $a->strings["App.net"] = ""; $a->strings["Male"] = "Mężczyzna"; @@ -1903,7 +1903,7 @@ $a->strings["Lonely"] = "Samotny"; $a->strings["Available"] = "Dostępny"; $a->strings["Unavailable"] = "Niedostępny"; $a->strings["Has crush"] = ""; -$a->strings["Infatuated"] = "zakochany"; +$a->strings["Infatuated"] = "Zakochany"; $a->strings["Dating"] = "Randki"; $a->strings["Unfaithful"] = "Niewierny"; $a->strings["Sex Addict"] = "Uzależniony od seksu"; @@ -1915,9 +1915,9 @@ $a->strings["Married"] = "Małżeństwo"; $a->strings["Imaginarily married"] = "Fikcyjnie w związku małżeńskim"; $a->strings["Partners"] = "Partnerzy"; $a->strings["Cohabiting"] = "Konkubinat"; -$a->strings["Common law"] = ""; +$a->strings["Common law"] = "Prawo zwyczajowe"; $a->strings["Happy"] = "Szczęśliwy"; -$a->strings["Not looking"] = ""; +$a->strings["Not looking"] = "Nie patrzę"; $a->strings["Swinger"] = "Swinger"; $a->strings["Betrayed"] = "Zdradzony"; $a->strings["Separated"] = "W separacji"; @@ -1927,12 +1927,12 @@ $a->strings["Imaginarily divorced"] = "Fikcyjnie rozwiedziony/a"; $a->strings["Widowed"] = "Wdowiec"; $a->strings["Uncertain"] = "Nieokreślony"; $a->strings["It's complicated"] = "To skomplikowane"; -$a->strings["Don't care"] = "Nie obchodzi mnie to"; +$a->strings["Don't care"] = "Nie przejmuj się"; $a->strings["Ask me"] = "Zapytaj mnie "; $a->strings["Nothing new here"] = "Brak nowych zdarzeń"; $a->strings["Clear notifications"] = "Wyczyść powiadomienia"; $a->strings["Personal notes"] = "Osobiste notatki"; -$a->strings["Your personal notes"] = ""; +$a->strings["Your personal notes"] = "Twoje osobiste notatki"; $a->strings["Sign in"] = "Zaloguj się"; $a->strings["Home Page"] = "Strona startowa"; $a->strings["Create an account"] = "Załóż konto"; @@ -1941,13 +1941,13 @@ $a->strings["Apps"] = "Aplikacje"; $a->strings["Addon applications, utilities, games"] = "Wtyczki, aplikacje, narzędzia, gry"; $a->strings["Search site content"] = "Przeszukaj zawartość strony"; $a->strings["Community"] = "Społeczność"; -$a->strings["Conversations on this and other servers"] = ""; +$a->strings["Conversations on this and other servers"] = "Rozmowy na tym i innych serwerach"; $a->strings["Directory"] = "Katalog"; -$a->strings["People directory"] = ""; -$a->strings["Information about this friendica instance"] = ""; -$a->strings["Network Reset"] = ""; -$a->strings["Load Network page with no filters"] = ""; -$a->strings["Friend Requests"] = "Podania o przyjęcie do grona znajomych"; +$a->strings["People directory"] = "Katalog osób"; +$a->strings["Information about this friendica instance"] = "Informacje o tej instancji friendica"; +$a->strings["Network Reset"] = "Resetowanie sieci"; +$a->strings["Load Network page with no filters"] = "Załaduj stronę sieci bez filtrów"; +$a->strings["Friend Requests"] = "Prośba o przyjęcie do grona znajomych"; $a->strings["See all notifications"] = "Zobacz wszystkie powiadomienia"; $a->strings["Mark all system notifications seen"] = "Oznacz wszystkie powiadomienia systemu jako przeczytane"; $a->strings["Inbox"] = "Odebrane"; @@ -1959,63 +1959,63 @@ $a->strings["Manage/Edit Profiles"] = "Zarządzaj/Edytuj profile"; $a->strings["Site setup and configuration"] = "Konfiguracja i ustawienia instancji"; $a->strings["Navigation"] = "Nawigacja"; $a->strings["Site map"] = "Mapa strony"; -$a->strings["General Features"] = ""; -$a->strings["Multiple Profiles"] = ""; -$a->strings["Ability to create multiple profiles"] = ""; -$a->strings["Photo Location"] = ""; -$a->strings["Photo metadata is normally stripped. This extracts the location (if present) prior to stripping metadata and links it to a map."] = ""; -$a->strings["Export Public Calendar"] = ""; +$a->strings["General Features"] = "Główne cechy"; +$a->strings["Multiple Profiles"] = "Wiele profili"; +$a->strings["Ability to create multiple profiles"] = "Możliwość tworzenia wielu profili"; +$a->strings["Photo Location"] = "Lokalizacja zdjęcia"; +$a->strings["Photo metadata is normally stripped. This extracts the location (if present) prior to stripping metadata and links it to a map."] = "Metadane zdjęć są zwykle usuwane. Wyodrębnia to położenie (jeśli jest obecne) przed usunięciem metadanych i łączy je z mapą."; +$a->strings["Export Public Calendar"] = "Eksportuj kalendarz publiczny"; $a->strings["Ability for visitors to download the public calendar"] = ""; $a->strings["Post Composition Features"] = ""; $a->strings["Post Preview"] = "Podgląd posta"; -$a->strings["Allow previewing posts and comments before publishing them"] = ""; +$a->strings["Allow previewing posts and comments before publishing them"] = "Zezwalaj na podgląd postów i komentarzy przed ich opublikowaniem"; $a->strings["Auto-mention Forums"] = ""; -$a->strings["Add/remove mention when a forum page is selected/deselected in ACL window."] = ""; -$a->strings["Network Sidebar Widgets"] = ""; +$a->strings["Add/remove mention when a forum page is selected/deselected in ACL window."] = "Dodaj/usuń wzmiankę, gdy strona forum zostanie wybrana/cofnięta w oknie ACL."; +$a->strings["Network Sidebar Widgets"] = "Widgety paska bocznego sieci"; $a->strings["Search by Date"] = "Szukanie wg daty"; -$a->strings["Ability to select posts by date ranges"] = ""; -$a->strings["List Forums"] = ""; -$a->strings["Enable widget to display the forums your are connected with"] = ""; -$a->strings["Group Filter"] = "Filtrowanie grupowe"; -$a->strings["Enable widget to display Network posts only from selected group"] = ""; -$a->strings["Network Filter"] = ""; -$a->strings["Enable widget to display Network posts only from selected network"] = ""; -$a->strings["Save search terms for re-use"] = ""; -$a->strings["Network Tabs"] = ""; -$a->strings["Network Personal Tab"] = ""; -$a->strings["Enable tab to display only Network posts that you've interacted on"] = ""; -$a->strings["Network New Tab"] = ""; -$a->strings["Enable tab to display only new Network posts (from the last 12 hours)"] = ""; +$a->strings["Ability to select posts by date ranges"] = "Wybierz wpisy według zakresów dat"; +$a->strings["List Forums"] = "Lista forów"; +$a->strings["Enable widget to display the forums your are connected with"] = "Włącz widżet, aby wyświetlić fora, z którymi jesteś połączony"; +$a->strings["Group Filter"] = "Filtr grupowy"; +$a->strings["Enable widget to display Network posts only from selected group"] = "Włącz widżet, aby wyświetlać posty sieciowe tylko z wybranej grupy"; +$a->strings["Network Filter"] = "Filtr sieciowy"; +$a->strings["Enable widget to display Network posts only from selected network"] = "Włącz widżet, aby wyświetlać posty sieciowe tylko z wybranej sieci"; +$a->strings["Save search terms for re-use"] = "Zapisz wyszukiwane hasła do ponownego użycia"; +$a->strings["Network Tabs"] = "Karty sieciowe"; +$a->strings["Network Personal Tab"] = "Sieć Osobista zakładka"; +$a->strings["Enable tab to display only Network posts that you've interacted on"] = "Włącz kartę, by wyświetlać tylko posty w sieci, z którymi współpracujesz"; +$a->strings["Network New Tab"] = "Sieć Nowa karta"; +$a->strings["Enable tab to display only new Network posts (from the last 12 hours)"] = "Włącz kartę, aby wyświetlić tylko nowe posty sieciowe (z ostatnich 12 godzin)"; $a->strings["Network Shared Links Tab"] = ""; -$a->strings["Enable tab to display only Network posts with links in them"] = ""; -$a->strings["Post/Comment Tools"] = ""; -$a->strings["Multiple Deletion"] = ""; -$a->strings["Select and delete multiple posts/comments at once"] = ""; -$a->strings["Edit Sent Posts"] = ""; -$a->strings["Edit and correct posts and comments after sending"] = ""; -$a->strings["Tagging"] = "Oznaczanie"; -$a->strings["Ability to tag existing posts"] = ""; +$a->strings["Enable tab to display only Network posts with links in them"] = "Włącz zakładkę, aby wyświetlić tylko posty sieciowe z łączami do nich"; +$a->strings["Post/Comment Tools"] = "Narzędzia post/komentarz"; +$a->strings["Multiple Deletion"] = "Wielokrotne usunięcie"; +$a->strings["Select and delete multiple posts/comments at once"] = "Wybierz i usuń wiele postów/komentarzy jednocześnie"; +$a->strings["Edit Sent Posts"] = "Edytuj wysłane posty"; +$a->strings["Edit and correct posts and comments after sending"] = "Edycja i poprawianie wpisów i komentarzy po wysłaniu"; +$a->strings["Tagging"] = "Tagowanie"; +$a->strings["Ability to tag existing posts"] = "Możliwość oznaczania istniejących postów"; $a->strings["Post Categories"] = "Kategorie postów"; $a->strings["Add categories to your posts"] = "Dodaj kategorie do twoich postów"; $a->strings["Saved Folders"] = "Zapisane foldery"; -$a->strings["Ability to file posts under folders"] = ""; -$a->strings["Dislike Posts"] = ""; +$a->strings["Ability to file posts under folders"] = "Możliwość przesyłania postów do folderów"; +$a->strings["Dislike Posts"] = "Nie lubię Postów"; $a->strings["Ability to dislike posts/comments"] = ""; $a->strings["Star Posts"] = "Oznacz posty gwiazdką"; -$a->strings["Ability to mark special posts with a star indicator"] = ""; -$a->strings["Mute Post Notifications"] = ""; -$a->strings["Ability to mute notifications for a thread"] = ""; -$a->strings["Advanced Profile Settings"] = ""; -$a->strings["Show visitors public community forums at the Advanced Profile Page"] = ""; -$a->strings["Tag Cloud"] = ""; -$a->strings["Provide a personal tag cloud on your profile page"] = ""; -$a->strings["Display Membership Date"] = ""; -$a->strings["Display membership date in profile"] = ""; +$a->strings["Ability to mark special posts with a star indicator"] = "Oznacz specjalne posty gwiazdką"; +$a->strings["Mute Post Notifications"] = "Ignoruj ​​powiadomienia pocztą"; +$a->strings["Ability to mute notifications for a thread"] = "Ignoruj powiadomienia dla wątku"; +$a->strings["Advanced Profile Settings"] = "Zaawansowane ustawienia profilu"; +$a->strings["Show visitors public community forums at the Advanced Profile Page"] = "Wyświetlaj publiczne fora społeczności na stronie profilu zaawansowanego"; +$a->strings["Tag Cloud"] = "Chmura tagów"; +$a->strings["Provide a personal tag cloud on your profile page"] = "Podaj osobistą chmurę tagów na stronie profilu"; +$a->strings["Display Membership Date"] = "Wyświetl datę członkostwa"; +$a->strings["Display membership date in profile"] = "Wyświetl datę członkostwa w profilu"; $a->strings["Embedding disabled"] = "Osadzanie wyłączone"; $a->strings["Embedded content"] = "Osadzona zawartość"; -$a->strings["Export"] = ""; -$a->strings["Export calendar as ical"] = ""; -$a->strings["Export calendar as csv"] = ""; +$a->strings["Export"] = "Eksport"; +$a->strings["Export calendar as ical"] = "Wyeksportuj kalendarz jako ical"; +$a->strings["Export calendar as csv"] = "Eksportuj kalendarz jako csv"; $a->strings["Add New Contact"] = "Dodaj nowy kontakt"; $a->strings["Enter address or web location"] = "Wpisz adres lub lokalizację sieciową"; $a->strings["Example: bob@example.com, http://example.com/barbara"] = "Przykład: bob@przykład.com, http://przykład.com/barbara"; @@ -2027,9 +2027,9 @@ $a->strings["%d invitation available"] = [ ]; $a->strings["Find People"] = "Znajdź ludzi"; $a->strings["Enter name or interest"] = "Wpisz nazwę lub zainteresowanie"; -$a->strings["Examples: Robert Morgenstein, Fishing"] = "Przykładowo: Jan Kowalski, Wędkarstwo"; +$a->strings["Examples: Robert Morgenstein, Fishing"] = "Przykład: Jan Kowalski, Wędkarstwo"; $a->strings["Random Profile"] = "Domyślny profil"; -$a->strings["View Global Directory"] = ""; +$a->strings["View Global Directory"] = "Wyświetl globalny katalog"; $a->strings["Networks"] = "Sieci"; $a->strings["All Networks"] = "Wszystkie Sieci"; $a->strings["Everything"] = "Wszystko"; @@ -2040,13 +2040,13 @@ $a->strings["%d contact in common"] = [ 2 => "", 3 => "", ]; -$a->strings["There are no tables on MyISAM."] = ""; +$a->strings["There are no tables on MyISAM."] = "W MyISAM nie ma tabel."; $a->strings["\n\t\t\t\tThe friendica developers released update %s recently,\n\t\t\t\tbut when I tried to install it, something went terribly wrong.\n\t\t\t\tThis needs to be fixed soon and I can't do it alone. Please contact a\n\t\t\t\tfriendica developer if you can not help me on your own. My database might be invalid."] = ""; -$a->strings["The error message is\n[pre]%s[/pre]"] = ""; -$a->strings["\nError %d occurred during database update:\n%s\n"] = ""; -$a->strings["Errors encountered performing database changes: "] = ""; -$a->strings[": Database update"] = ""; -$a->strings["%s: updating %s table."] = ""; +$a->strings["The error message is\n[pre]%s[/pre]"] = "Komunikat o błędzie jest \n[pre]%s[/ pre]"; +$a->strings["\nError %d occurred during database update:\n%s\n"] = "\nWystąpił błąd %d podczas aktualizacji bazy danych:\n%s\n"; +$a->strings["Errors encountered performing database changes: "] = "Napotkane błędy powodujące zmiany w bazie danych:"; +$a->strings[": Database update"] = ": Aktualizacja bazy danych"; +$a->strings["%s: updating %s table."] = "%s: aktualizowanie %s tabeli."; $a->strings["[no subject]"] = "[bez tematu]"; $a->strings["Requested account is not available."] = "Żądane konto jest niedostępne."; $a->strings["Edit profile"] = "Edytuj profil"; @@ -2060,7 +2060,7 @@ $a->strings["Birthdays this week:"] = "Urodziny w tym tygodniu:"; $a->strings["[No description]"] = "[Brak opisu]"; $a->strings["Event Reminders"] = "Przypominacze wydarzeń"; $a->strings["Events this week:"] = "Wydarzenia w tym tygodniu:"; -$a->strings["Member since:"] = ""; +$a->strings["Member since:"] = "Członek od:"; $a->strings["j F, Y"] = "d M, R"; $a->strings["j F"] = "d M"; $a->strings["Age:"] = "Wiek:"; @@ -2077,19 +2077,19 @@ $a->strings["Work/employment:"] = "Praca/zatrudnienie:"; $a->strings["School/education:"] = "Szkoła/edukacja:"; $a->strings["Forums:"] = "Fora:"; $a->strings["Only You Can See This"] = "Tylko ty możesz to zobaczyć"; -$a->strings["Drop Contact"] = ""; +$a->strings["Drop Contact"] = "Upuść kontakt"; $a->strings["Organisation"] = "Organizacja"; $a->strings["News"] = "Aktualności"; -$a->strings["Forum"] = ""; +$a->strings["Forum"] = "Forum"; $a->strings["Connect URL missing."] = "Brak adresu URL połączenia."; -$a->strings["The contact could not be added. Please check the relevant network credentials in your Settings -> Social Networks page."] = ""; +$a->strings["The contact could not be added. Please check the relevant network credentials in your Settings -> Social Networks page."] = "Nie można dodać kontaktu. Sprawdź odpowiednie poświadczenia sieciowe na stronie Ustawienia -> Sieci społecznościowe."; $a->strings["This site is not configured to allow communications with other networks."] = "Ta strona nie jest skonfigurowana do pozwalania na komunikację z innymi sieciami"; -$a->strings["No compatible communication protocols or feeds were discovered."] = ""; +$a->strings["No compatible communication protocols or feeds were discovered."] = "Nie znaleziono żadnych kompatybilnych protokołów komunikacyjnych ani źródeł."; $a->strings["The profile address specified does not provide adequate information."] = "Dany adres profilu nie dostarcza odpowiednich informacji."; $a->strings["An author or name was not found."] = "Autor lub nazwa nie zostało znalezione."; $a->strings["No browser URL could be matched to this address."] = "Przeglądarka WWW nie może odnaleźć podanego adresu"; -$a->strings["Unable to match @-style Identity Address with a known protocol or email contact."] = ""; -$a->strings["Use mailto: in front of address to force email check."] = ""; +$a->strings["Unable to match @-style Identity Address with a known protocol or email contact."] = "Nie można dopasować @-stylu Adres identyfikacyjny ze znanym protokołem lub kontaktem e-mail."; +$a->strings["Use mailto: in front of address to force email check."] = "Użyj mailto: przed adresem, aby wymusić sprawdzanie poczty e-mail."; $a->strings["The profile address specified belongs to a network which has been disabled on this site."] = "Określony adres profilu należy do sieci, która została wyłączona na tej stronie."; $a->strings["Limited profile. This person will be unable to receive direct/personal notifications from you."] = "Profil ograniczony. Ta osoba będzie niezdolna do odbierania osobistych powiadomień od ciebie."; $a->strings["Unable to retrieve contact information."] = "Nie można otrzymać informacji kontaktowych"; @@ -2097,19 +2097,19 @@ $a->strings["%s's birthday"] = "Urodziny %s"; $a->strings["Happy Birthday %s"] = "Urodziny %s"; $a->strings["Starts:"] = "Start:"; $a->strings["Finishes:"] = "Wykończenia:"; -$a->strings["all-day"] = ""; -$a->strings["Jun"] = ""; -$a->strings["Sept"] = ""; -$a->strings["No events to display"] = ""; +$a->strings["all-day"] = "cały dzień"; +$a->strings["Jun"] = "cze"; +$a->strings["Sept"] = "wrz"; +$a->strings["No events to display"] = "Brak wydarzeń do wyświetlenia"; $a->strings["l, F j"] = "d, M d "; $a->strings["Edit event"] = "Edytuj wydarzenie"; -$a->strings["Duplicate event"] = ""; -$a->strings["Delete event"] = ""; +$a->strings["Duplicate event"] = "Zduplikowane zdarzenie"; +$a->strings["Delete event"] = "Usuń wydarzenie"; $a->strings["D g:i A"] = ""; $a->strings["g:i A"] = ""; -$a->strings["Show map"] = ""; -$a->strings["Hide map"] = ""; -$a->strings["A deleted group with this name was revived. Existing item permissions may apply to this group and any future members. If this is not what you intended, please create another group with a different name."] = ""; +$a->strings["Show map"] = "Pokaż mapę"; +$a->strings["Hide map"] = "Ukryj mapę"; +$a->strings["A deleted group with this name was revived. Existing item permissions may apply to this group and any future members. If this is not what you intended, please create another group with a different name."] = "Skasowana grupa o tej nazwie została przywrócona. Istniejące uprawnienia do pozycji mogą dotyczyć tej grupy i wszystkich przyszłych członków. Jeśli nie jest to zamierzone, utwórz inną grupę o innej nazwie."; $a->strings["Default privacy group for new contacts"] = "Domyślne ustawienia prywatności dla nowych kontaktów"; $a->strings["Everybody"] = "Wszyscy"; $a->strings["edit"] = "edytuj"; @@ -2117,15 +2117,15 @@ $a->strings["Edit group"] = "Edytuj grupy"; $a->strings["Contacts not in any group"] = "Kontakt nie jest w żadnej grupie"; $a->strings["Create a new group"] = "Stwórz nową grupę"; $a->strings["Edit groups"] = "Edytuj grupy"; -$a->strings["%1\$s is attending %2\$s's %3\$s"] = ""; -$a->strings["%1\$s is not attending %2\$s's %3\$s"] = ""; -$a->strings["%1\$s may attend %2\$s's %3\$s"] = ""; +$a->strings["%1\$s is attending %2\$s's %3\$s"] = "%1\$suczestniczy %2\$s's %3\$s "; +$a->strings["%1\$s is not attending %2\$s's %3\$s"] = "%1\$snie uczestniczy %2\$s's %3\$s "; +$a->strings["%1\$s may attend %2\$s's %3\$s"] = "%1\$smogą uczestniczyć %2\$s's %3\$s "; $a->strings["Login failed"] = "Logowanie nieudane"; -$a->strings["Not enough information to authenticate"] = ""; +$a->strings["Not enough information to authenticate"] = "Za mało informacji do uwierzytelnienia"; $a->strings["An invitation is required."] = "Wymagane zaproszenie."; $a->strings["Invitation could not be verified."] = "Zaproszenie niezweryfikowane."; $a->strings["Invalid OpenID url"] = "Nieprawidłowy adres url OpenID"; -$a->strings["We encountered a problem while logging in with the OpenID you provided. Please check the correct spelling of the ID."] = ""; +$a->strings["We encountered a problem while logging in with the OpenID you provided. Please check the correct spelling of the ID."] = "Napotkaliśmy problem podczas logowania z podanym przez nas identyfikatorem OpenID. Sprawdź poprawną pisownię identyfikatora."; $a->strings["The error message was:"] = "Komunikat o błędzie:"; $a->strings["Please enter the required information."] = "Wprowadź wymagane informacje"; $a->strings["Please use a shorter name."] = "Użyj dłuższej nazwy."; @@ -2134,47 +2134,47 @@ $a->strings["That doesn't appear to be your full (First Last) name."] = "Zdaje m $a->strings["Your email domain is not among those allowed on this site."] = "Twoja domena internetowa nie jest obsługiwana na tej stronie."; $a->strings["Not a valid email address."] = "Niepoprawny adres e mail.."; $a->strings["Cannot use that email."] = "Nie możesz użyć tego e-maila. "; -$a->strings["Your nickname can only contain a-z, 0-9 and _."] = ""; +$a->strings["Your nickname can only contain a-z, 0-9 and _."] = "Twój pseudonim może zawierać tylko a-z, 0-9 i _."; $a->strings["Nickname is already registered. Please choose another."] = "Ten login jest zajęty. Wybierz inny."; $a->strings["SERIOUS ERROR: Generation of security keys failed."] = "POWAŻNY BŁĄD: niepowodzenie podczas tworzenia kluczy zabezpieczeń."; $a->strings["An error occurred during registration. Please try again."] = "Wystąpił bład podczas rejestracji, Spróbuj ponownie."; $a->strings["An error occurred creating your default profile. Please try again."] = "Wystąpił błąd podczas tworzenia profilu. Spróbuj ponownie."; -$a->strings["An error occurred creating your self contact. Please try again."] = ""; -$a->strings["An error occurred creating your default contact group. Please try again."] = ""; -$a->strings["\n\t\t\tDear %1\$s,\n\t\t\t\tThank you for registering at %2\$s. Your account is pending for approval by the administrator.\n\t\t"] = ""; -$a->strings["Registration at %s"] = ""; -$a->strings["\n\t\t\tDear %1\$s,\n\t\t\t\tThank you for registering at %2\$s. Your account has been created.\n\t\t"] = ""; -$a->strings["\n\t\t\tThe login details are as follows:\n\t\t\t\tSite Location:\t%3\$s\n\t\t\t\tLogin Name:\t%1\$s\n\t\t\t\tPassword:\t%5\$s\n\n\t\t\tYou may change your password from your account Settings page after logging\n\t\t\tin.\n\n\t\t\tPlease take a few moments to review the other account settings on that page.\n\n\t\t\tYou may also wish to add some basic information to your default profile\n\t\t\t(on the \"Profiles\" page) so that other people can easily find you.\n\n\t\t\tWe recommend setting your full name, adding a profile photo,\n\t\t\tadding some profile keywords (very useful in making new friends) - and\n\t\t\tperhaps what country you live in; if you do not wish to be more specific\n\t\t\tthan that.\n\n\t\t\tWe fully respect your right to privacy, and none of these items are necessary.\n\t\t\tIf you are new and do not know anybody here, they may help\n\t\t\tyou to make some new and interesting friends.\n\n\n\t\t\tThank you and welcome to %2\$s."] = ""; -$a->strings["%s\\'s birthday"] = ""; +$a->strings["An error occurred creating your self contact. Please try again."] = "Wystąpił błąd podczas tworzenia własnego kontaktu. Proszę spróbuj ponownie."; +$a->strings["An error occurred creating your default contact group. Please try again."] = "Wystąpił błąd podczas tworzenia domyślnej grupy kontaktów. Proszę spróbuj ponownie."; +$a->strings["\n\t\t\tDear %1\$s,\n\t\t\t\tThank you for registering at %2\$s. Your account is pending for approval by the administrator.\n\t\t"] = "\n\t\t\tDrodzy %1\$s, \n\t\t\t\tDziękujemy za rejestrację na stronie %2\$s. Twoje konto czeka na zatwierdzenie przez administratora."; +$a->strings["Registration at %s"] = "Rejestracja w %s"; +$a->strings["\n\t\t\tDear %1\$s,\n\t\t\t\tThank you for registering at %2\$s. Your account has been created.\n\t\t"] = "\n\t\t\tDrodzy %1\$s, \n\t\t\t\tDziękujemy za rejestrację na stronie %2\$s. Twoje konto zostało utworzone."; +$a->strings["\n\t\t\tThe login details are as follows:\n\t\t\t\tSite Location:\t%3\$s\n\t\t\t\tLogin Name:\t%1\$s\n\t\t\t\tPassword:\t%5\$s\n\n\t\t\tYou may change your password from your account Settings page after logging\n\t\t\tin.\n\n\t\t\tPlease take a few moments to review the other account settings on that page.\n\n\t\t\tYou may also wish to add some basic information to your default profile\n\t\t\t(on the \"Profiles\" page) so that other people can easily find you.\n\n\t\t\tWe recommend setting your full name, adding a profile photo,\n\t\t\tadding some profile keywords (very useful in making new friends) - and\n\t\t\tperhaps what country you live in; if you do not wish to be more specific\n\t\t\tthan that.\n\n\t\t\tWe fully respect your right to privacy, and none of these items are necessary.\n\t\t\tIf you are new and do not know anybody here, they may help\n\t\t\tyou to make some new and interesting friends.\n\n\n\t\t\tThank you and welcome to %2\$s."] = "\n\t\t\tDane logowania są następujące:\n\t\t\t\tLokalizacja strony:\t%3\$s\n\t\t\t\tNazwa użytkownika:\t%1\$s\n\t\t\t\tHasło:\t%5\$s\n \n\t\t\tMożesz zmienić hasło ze strony Ustawienia konta po zalogowaniu\n\t\t\tw.\n\n\t\t\tPoświęć chwilę, aby przejrzeć inne ustawienia konta na tej stronie.\n\n\t\t\tMożesz również dodać podstawowe informacje do domyślnego profilu\n\t\t\t(na stronie \"Profile\"), aby inne osoby mogły łatwo Cię znaleźć.\n\n\t\t\tZalecamy ustawienie imienia i nazwiska, dodanie zdjęcia profilowego,\n\t\t\tdodanie niektórych słów kluczowych profilu (bardzo przydatne w nawiązywaniu nowych znajomości) - i\n\t\t\tbyć może w jakim kraju mieszkasz; jeśli nie chcesz być bardziej konkretny\n\t\t\tniż to.\n \n\t\t\tW pełni szanujemy Twoje prawo do prywatności i żaden z tych elementów nie jest konieczny.\n\t\t\tJeśli jesteś nowy i nie znasz nikogo tutaj, mogą ci pomóc\n\t\t\tMożesz tworzyć nowych i interesujących przyjaciół\n\n\n\t\t\tDziękuję i zapraszam %2\$s."; +$a->strings["%s\\'s birthday"] = "%s\\'s urodziny"; $a->strings["Sharing notification from Diaspora network"] = "Wspólne powiadomienie z sieci Diaspora"; $a->strings["Attachments:"] = "Załączniki:"; -$a->strings["%s is now following %s."] = ""; +$a->strings["%s is now following %s."] = "%sjest teraz następujące %s. "; $a->strings["following"] = "następujący"; -$a->strings["%s stopped following %s."] = ""; -$a->strings["stopped following"] = "przestań obserwować"; +$a->strings["%s stopped following %s."] = "%sprzestał śledzić %s. "; +$a->strings["stopped following"] = "przestał śledzić"; $a->strings["(no subject)"] = "(bez tematu)"; $a->strings["Create a New Account"] = "Załóż nowe konto"; $a->strings["Password: "] = "Hasło:"; $a->strings["Remember me"] = "Zapamiętaj mnie"; $a->strings["Or login using OpenID: "] = "Lub zaloguj się korzystając z OpenID:"; $a->strings["Forgot your password?"] = "Zapomniałeś swojego hasła?"; -$a->strings["Website Terms of Service"] = ""; +$a->strings["Website Terms of Service"] = "Warunki korzystania z witryny"; $a->strings["terms of service"] = "warunki użytkowania"; -$a->strings["Website Privacy Policy"] = ""; +$a->strings["Website Privacy Policy"] = "Polityka Prywatności Witryny"; $a->strings["privacy policy"] = "polityka prywatności"; $a->strings["Logged out."] = "Wyloguj"; $a->strings["This entry was edited"] = "Ten wpis został zedytowany"; $a->strings["save to folder"] = "zapisz w folderze"; -$a->strings["I will attend"] = ""; -$a->strings["I will not attend"] = ""; -$a->strings["I might attend"] = ""; +$a->strings["I will attend"] = "Będę uczestniczyć"; +$a->strings["I will not attend"] = "Nie będę uczestniczyć"; +$a->strings["I might attend"] = "Mogę wziąć udział"; $a->strings["add star"] = "dodaj gwiazdkę"; $a->strings["remove star"] = "anuluj gwiazdkę"; $a->strings["toggle star status"] = "włącz status gwiazdy"; $a->strings["starred"] = "gwiazdką"; $a->strings["ignore thread"] = "zignoruj ​​wątek"; -$a->strings["unignore thread"] = ""; -$a->strings["toggle ignore status"] = ""; +$a->strings["unignore thread"] = "odignoruj ​​wątek"; +$a->strings["toggle ignore status"] = "przełącz status ignorowania"; $a->strings["add tag"] = "dodaj tag"; $a->strings["like"] = "polub"; $a->strings["dislike"] = "Nie lubię"; From bd1a48b61bd79ebd6f9b6a8dbed979708985aea5 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Sun, 1 Apr 2018 20:15:50 +0200 Subject: [PATCH 201/227] update for PL translation THX waldis --- view/lang/pl/messages.po | 216 +++++++++++++++++++-------------------- view/lang/pl/strings.php | 214 +++++++++++++++++++------------------- 2 files changed, 215 insertions(+), 215 deletions(-) diff --git a/view/lang/pl/messages.po b/view/lang/pl/messages.po index af025cd04..99035dbe1 100644 --- a/view/lang/pl/messages.po +++ b/view/lang/pl/messages.po @@ -39,7 +39,7 @@ msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-03-28 08:41+0200\n" -"PO-Revision-Date: 2018-03-31 20:50+0000\n" +"PO-Revision-Date: 2018-04-01 18:13+0000\n" "Last-Translator: Waldemar Stoczkowski \n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" @@ -338,7 +338,7 @@ msgstr "%s nie lubię tego." #: include/conversation.php:1239 #, php-format msgid "%2$d people attend" -msgstr "" +msgstr "%2$dosoby uczestniczą" #: include/conversation.php:1240 #, php-format @@ -3879,7 +3879,7 @@ msgstr "Aktualizacja bazy danych nie powiodła się. Uruchom polecenie \"php bin #: mod/admin.php:744 msgid "The worker was never executed. Please check your database structure!" -msgstr "" +msgstr "Pracownik nigdy nie został stracony. Sprawdź swoją strukturę bazy danych!" #: mod/admin.php:747 #, php-format @@ -3938,7 +3938,7 @@ msgstr "Aktywne dodatki" #: mod/admin.php:826 msgid "Can not parse base url. Must have at least ://" -msgstr "" +msgstr "Nie można zanalizować podstawowego adresu URL. Musi mieć co najmniej : //" #: mod/admin.php:1144 msgid "Site settings updated." @@ -4270,7 +4270,7 @@ msgstr "Rozdzielana przecinkami lista domen dozwolonych w adresach e-mail do rej #: mod/admin.php:1318 msgid "No OEmbed rich content" -msgstr "" +msgstr "Brak treści multimedialnych ze znaczkiem HTML" #: mod/admin.php:1318 msgid "" @@ -4440,13 +4440,13 @@ msgstr "Normalnie importujemy każdą treść z naszych kontaktów OStatus. W te #: mod/admin.php:1335 msgid "OStatus support can only be enabled if threading is enabled." -msgstr "" +msgstr "Obsługa OStatus może być włączona tylko wtedy, gdy włączone jest wątkowanie." #: mod/admin.php:1337 msgid "" "Diaspora support can't be enabled because Friendica was installed into a sub" " directory." -msgstr "" +msgstr "Obsługa Diaspory nie może być włączona, ponieważ Friendica została zainstalowana w podkatalogu." #: mod/admin.php:1338 msgid "Enable Diaspora support" @@ -4454,7 +4454,7 @@ msgstr "Włączyć obsługę Diaspory" #: mod/admin.php:1338 msgid "Provide built-in Diaspora network compatibility." -msgstr "" +msgstr "Zapewnij wbudowaną kompatybilność z siecią Diaspora." #: mod/admin.php:1339 msgid "Only allow Friendica contacts" @@ -4494,7 +4494,7 @@ msgstr "Wartość jest w sekundach. Ustaw na 0 dla nieograniczonej (niezalecane) #: mod/admin.php:1344 msgid "Maximum Load Average" -msgstr "" +msgstr "Maksymalne obciążenie średnie" #: mod/admin.php:1344 msgid "" @@ -4504,7 +4504,7 @@ msgstr "Maksymalne obciążenie systemu przed dostawą i odpytywaniem jest odroc #: mod/admin.php:1345 msgid "Maximum Load Average (Frontend)" -msgstr "" +msgstr "Maksymalne obciążenie średnie (Frontend)" #: mod/admin.php:1345 msgid "Maximum system load before the frontend quits service - default 50." @@ -4518,31 +4518,31 @@ msgstr "Minimalna pamięć" msgid "" "Minimal free memory in MB for the worker. Needs access to /proc/meminfo - " "default 0 (deactivated)." -msgstr "" +msgstr "Minimalna wolna pamięć w MB dla pracownika. Potrzebuje dostępu do /proc/ meminfo - domyślnie 0 (wyłączone)." #: mod/admin.php:1347 msgid "Maximum table size for optimization" -msgstr "" +msgstr "Maksymalny rozmiar stołu do optymalizacji" #: mod/admin.php:1347 msgid "" "Maximum table size (in MB) for the automatic optimization - default 100 MB. " "Enter -1 to disable it." -msgstr "" +msgstr "Maksymalny rozmiar tabeli (w MB) dla automatycznej optymalizacji - domyślnie 100 MB. Wprowadź -1, aby go wyłączyć." #: mod/admin.php:1348 msgid "Minimum level of fragmentation" -msgstr "" +msgstr "Minimalny poziom fragmentacji" #: mod/admin.php:1348 msgid "" "Minimum fragmenation level to start the automatic optimization - default " "value is 30%." -msgstr "" +msgstr "Minimalny poziom fragmentacji, aby rozpocząć automatyczną optymalizację - domyślna wartość to 30%." #: mod/admin.php:1350 msgid "Periodical check of global contacts" -msgstr "" +msgstr "Okresowa kontrola kontaktów globalnych" #: mod/admin.php:1350 msgid "" @@ -4556,7 +4556,7 @@ msgstr "Dni między żądaniem" #: mod/admin.php:1351 msgid "Number of days after which a server is requeried for his contacts." -msgstr "" +msgstr "Liczba dni, po upływie których serwer jest żądany dla swoich kontaktów." #: mod/admin.php:1352 msgid "Discover contacts from other servers" @@ -4722,14 +4722,14 @@ msgstr "Na współdzielonych hostach ustaw to na 2. W większych systemach warto #: mod/admin.php:1373 msgid "Don't use 'proc_open' with the worker" -msgstr "" +msgstr "Nie używaj 'proc_open' z robotnikiem" #: mod/admin.php:1373 msgid "" "Enable this if your system doesn't allow the use of 'proc_open'. This can " "happen on shared hosters. If this is enabled you should increase the " "frequency of worker calls in your crontab." -msgstr "" +msgstr "Włącz to, jeśli twój system nie zezwala na użycie 'proc_open'. Może się to zdarzyć w przypadku współdzielonych hosterów. Jeśli ta opcja jest włączona, powinieneś zwiększyć częstotliwość wywołań pracowniczych w twoim pliku crontab." #: mod/admin.php:1374 msgid "Enable fastlane" @@ -4743,7 +4743,7 @@ msgstr "Po włączeniu system Fastlane uruchamia dodatkowego pracownika, jeśli #: mod/admin.php:1375 msgid "Enable frontend worker" -msgstr "" +msgstr "Włącz pracownika frontend" #: mod/admin.php:1375 #, php-format @@ -4753,11 +4753,11 @@ msgid "" "might want to call %s/worker on a regular basis via an external cron job. " "You should only enable this option if you cannot utilize cron/scheduled jobs" " on your server." -msgstr "" +msgstr "Po włączeniu proces roboczy jest wyzwalany, gdy wykonywany jest dostęp do zaplecza \\x28e.g. wiadomości są dostarczane\\x29. W mniejszych witrynach możesz chcieć wywoływać %s/robotnika regularnie przez zewnętrzne zadanie cron. Tę opcję należy włączyć tylko wtedy, gdy nie można używać zadań cron/zaplanowanych na serwerze." #: mod/admin.php:1377 msgid "Subscribe to relay" -msgstr "" +msgstr "Subskrybuj przekaźnik" #: mod/admin.php:1377 msgid "" @@ -4773,27 +4773,27 @@ msgstr "Serwer przekazujący" msgid "" "Address of the relay server where public posts should be send to. For " "example https://relay.diasp.org" -msgstr "" +msgstr "Adres serwera przekazującego, do którego należy wysyłać publiczne posty. Na przykład https://relay.diasp.org" #: mod/admin.php:1379 msgid "Direct relay transfer" -msgstr "" +msgstr "Bezpośredni transfer przekaźników" #: mod/admin.php:1379 msgid "" "Enables the direct transfer to other servers without using the relay servers" -msgstr "" +msgstr "Umożliwia bezpośredni transfer do innych serwerów bez korzystania z serwerów przekazujących" #: mod/admin.php:1380 msgid "Relay scope" -msgstr "" +msgstr "Zakres przekaźnika" #: mod/admin.php:1380 msgid "" "Can be 'all' or 'tags'. 'all' means that every public post should be " "received. 'tags' means that only posts with selected tags should be " "received." -msgstr "" +msgstr "Może być 'wszystkim' lub 'tagami'. 'wszystko' oznacza, że ​​każdy post publiczny powinien zostać odebrany. 'tagi' oznaczają, że powinny być odbierane tylko posty z wybranymi tagami." #: mod/admin.php:1380 msgid "all" @@ -4809,7 +4809,7 @@ msgstr "Serwer tagów" #: mod/admin.php:1381 msgid "Comma separated list of tags for the 'tags' subscription." -msgstr "" +msgstr "Lista oddzielonych przecinkami znaczników dla subskrypcji 'tagów'." #: mod/admin.php:1382 msgid "Allow user tags" @@ -4819,7 +4819,7 @@ msgstr "Pozwól na tagi użytkowników" msgid "" "If enabled, the tags from the saved searches will used for the 'tags' " "subscription in addition to the 'relay_server_tags'." -msgstr "" +msgstr "Po włączeniu tagi z zapisanych wyszukiwań będą używane do subskrypcji 'tagów' oprócz 'relay_server_tags'." #: mod/admin.php:1410 msgid "Update has been marked successful" @@ -4828,32 +4828,32 @@ msgstr "Aktualizacja została oznaczona jako udana" #: mod/admin.php:1417 #, php-format msgid "Database structure update %s was successfully applied." -msgstr "" +msgstr "Pomyślnie zastosowano aktualizację %s struktury bazy danych." #: mod/admin.php:1420 #, php-format msgid "Executing of database structure update %s failed with error: %s" -msgstr "" +msgstr "Wykonanie aktualizacji %s struktury bazy danych nie powiodło się z powodu błędu:%s" #: mod/admin.php:1433 #, php-format msgid "Executing %s failed with error: %s" -msgstr "" +msgstr "Wykonanie %s nie powiodło się z powodu błędu:%s" #: mod/admin.php:1435 #, php-format msgid "Update %s was successfully applied." -msgstr "" +msgstr "Aktualizacja %s została pomyślnie zastosowana." #: mod/admin.php:1438 #, php-format msgid "Update %s did not return a status. Unknown if it succeeded." -msgstr "" +msgstr "Aktualizacja %s nie zwróciła statusu. Nieznane, jeśli się udało." #: mod/admin.php:1441 #, php-format msgid "There was no additional update function %s that needed to be called." -msgstr "" +msgstr "Nie było dodatkowej funkcji %s aktualizacji, która musiała zostać wywołana." #: mod/admin.php:1461 msgid "No failed updates." @@ -4870,7 +4870,7 @@ msgstr "Błąd aktualizacji" #: mod/admin.php:1468 msgid "" "This does not include updates prior to 1139, which did not return a status." -msgstr "" +msgstr "Nie dotyczy to aktualizacji przed 1139, który nie zwrócił statusu." #: mod/admin.php:1469 msgid "Mark success (if update was manually applied)" @@ -4886,7 +4886,7 @@ msgid "" "\n" "\t\t\tDear %1$s,\n" "\t\t\t\tthe administrator of %2$s has set up an account for you." -msgstr "" +msgstr "\n\t\t\tSzanowny/a Panie/Pani %1$s, \n\t\t\t\tadministrator %2$s założył dla ciebie konto." #: mod/admin.php:1512 #, php-format @@ -4916,7 +4916,7 @@ msgid "" "\t\t\tyou to make some new and interesting friends.\n" "\n" "\t\t\tThank you and welcome to %4$s." -msgstr "" +msgstr "\n\t\t\tDane logowania są następuje:\n\n\t\t\tLokalizacja witryny:\t%1$s\n\t\t\tNazwa użytkownika:\t\t%2$s\n\t\t\tHasło:\t\t%3$s\n\n\t\t\tPo zalogowaniu możesz zmienić hasło ze strony \"Ustawienia\" na koncie\n\t\t\tw\n\n\t\t\t Poświęć chwilę, aby przejrzeć inne ustawienia konta na tej stronie\n\n\t\t\tMożesz również dodać podstawowe informacje do swojego domyślnego profilu\n\t\t\t(na stronie 'Profil'), aby inne osoby mogły łatwo Cię znaleźć.\n\n\t\t\tZalecamy ustawienie imienia i nazwiska, dodanie zdjęcia profilowego,\n\t\t\tdodanie niektórych \"słów kluczowych\" profilu (bardzo przydatne w nawiązywaniu nowych znajomości) - i\n\t\t\tbyć może w jakim kraju mieszkasz; jeśli nie chcesz być bardziej konkretny\n\t\t\tniż to.\n\n \t\t\tW pełni szanujemy Twoje prawo do prywatności i żaden z tych elementów nie jest konieczny.\n\t\t\tJeśli jesteś nowy i nie znasz nikogo tutaj, mogą ci pomóc\n\t\t\tmożesz tworzyć nowych i interesujących przyjaciół\n\n\t\t\tDziękuję i zapraszam%4$s" #: mod/admin.php:1544 src/Model/User.php:647 #, php-format @@ -5089,7 +5089,7 @@ msgid "" "There are currently no addons available on your node. You can find the " "official addon repository at %1$s and might find other interesting addons in" " the open addon registry at %2$s" -msgstr "" +msgstr "W twoim węźle nie ma obecnie żadnych dodatków. Możesz znaleźć oficjalne repozytorium dodatków na %1$s i możesz znaleźć inne interesujące dodatki w otwartym rejestrze dodatków na %2$s" #: mod/admin.php:2024 msgid "No themes found." @@ -5168,14 +5168,14 @@ msgstr "Aby włączyć rejestrowanie błędów i ostrzeżeń PHP, możesz dodać msgid "" "Error trying to open %1$s log file.\\r\\n
    Check to see " "if file %1$s exist and is readable." -msgstr "" +msgstr "Błąd podczas próby otwarcia %1$s pliku dziennika. \\r\\n
    Sprawdź, czy plik %1$s istnieje i czy można go odczytać." #: mod/admin.php:2270 #, php-format msgid "" "Couldn't open %1$s log file.\\r\\n
    Check to see if file" " %1$s is readable." -msgstr "" +msgstr "Nie można otworzyć %1$spliku dziennika. \\r\\n
    Sprawdź, czy plik %1$s jest czytelny." #: mod/admin.php:2361 mod/admin.php:2362 mod/settings.php:775 msgid "Off" @@ -5188,7 +5188,7 @@ msgstr "Włącz" #: mod/admin.php:2362 #, php-format msgid "Lock feature %s" -msgstr "" +msgstr "Funkcja blokady %s" #: mod/admin.php:2370 msgid "Manage Additional Features" @@ -5236,7 +5236,7 @@ msgstr "" #: mod/babel.php:83 msgid "Raw HTML input" -msgstr "" +msgstr "Surowe wejście HTML" #: mod/babel.php:88 msgid "HTML Input" @@ -5449,7 +5449,7 @@ msgstr "Pobierz informacje i słowa kluczowe" #: mod/contacts.php:599 mod/unfollow.php:100 msgid "Disconnect/Unfollow" -msgstr "" +msgstr "Rozłącz/Nie obserwuj" #: mod/contacts.php:608 msgid "Contact" @@ -5681,11 +5681,11 @@ msgstr "Przełącz na Zablokowany" #: mod/contacts.php:1021 msgid "Toggle Ignored status" -msgstr "" +msgstr "Przełącz ignorowany status" #: mod/contacts.php:1029 msgid "Toggle Archive status" -msgstr "" +msgstr "Przełącz status archiwum" #: mod/contacts.php:1037 msgid "Delete contact" @@ -5720,7 +5720,7 @@ msgstr "Użytkownicy nadrzędni mają pełną kontrolę nad tym kontem, w tym ta #: mod/delegate.php:169 src/Content/Nav.php:204 msgid "Delegate Page Management" -msgstr "" +msgstr "Deleguj zarządzanie stronami" #: mod/delegate.php:170 msgid "Delegates" @@ -5780,7 +5780,7 @@ msgstr "Brak odwiedzin (niektóre odwiedziny mogą być ukryte)." #: mod/dirfind.php:49 #, php-format msgid "People Search - %s" -msgstr "" +msgstr "Szukaj osób - %s" #: mod/dirfind.php:60 #, php-format @@ -5789,7 +5789,7 @@ msgstr "Przeszukiwanie forum - %s" #: mod/events.php:105 mod/events.php:107 msgid "Event can not end before it has started." -msgstr "" +msgstr "Wydarzenie nie może się zakończyć przed jego rozpoczęciem." #: mod/events.php:114 mod/events.php:116 msgid "Event title and start time are required." @@ -6015,7 +6015,7 @@ msgstr "Linia komend PHP" #: mod/install.php:344 msgid "PHP executable is not the php cli binary (could be cgi-fgci version)" -msgstr "" +msgstr "Plik wykonywalny PHP nie jest php cli binarny (może być wersją cgi-fgci)" #: mod/install.php:345 msgid "Found PHP version: " @@ -6184,7 +6184,7 @@ msgstr "Upewnij się, że użytkownik, na którym działa serwer WWW (np. www-da msgid "" "Note: as a security measure, you should give the web server write access to " "view/smarty3/ only--not the template files (.tpl) that it contains." -msgstr "" +msgstr "Uwaga: jako środek bezpieczeństwa, powinieneś dać serwerowi dostęp do zapisu view/smarty3/ jedynie - nie do plików szablonów (.tpl), które zawiera." #: mod/install.php:485 msgid "view/smarty3 is writable" @@ -6193,7 +6193,7 @@ msgstr "view/smarty3 jest zapisywalny" #: mod/install.php:501 msgid "" "Url rewrite in .htaccess is not working. Check your server configuration." -msgstr "" +msgstr "Nie działa URL w .htaccess popraw. Sprawdź konfigurację serwera." #: mod/install.php:503 msgid "Url rewrite is working" @@ -6226,7 +6226,7 @@ msgstr "

    Co dalej

    " msgid "" "IMPORTANT: You will need to [manually] setup a scheduled task for the " "worker." -msgstr "" +msgstr "WAŻNE: Będziesz musiał [ręcznie] ustawić zaplanowane zadanie dla pracownika." #: mod/install.php:560 #, php-format @@ -6234,7 +6234,7 @@ msgid "" "Go to your new Friendica node registration page " "and register as new user. Remember to use the same email you have entered as" " administrator email. This will allow you to enter the site admin panel." -msgstr "" +msgstr "Przejdź do strony rejestracji nowego węzła Friendica i zarejestruj się jako nowy użytkownik. Pamiętaj, aby użyć adresu e-mail wprowadzonego jako e-mail administratora. To pozwoli Ci wejść do panelu administratora witryny." #: mod/item.php:114 msgid "Unable to locate original post." @@ -6273,19 +6273,19 @@ msgstr "Post dodany pomyślnie" #: mod/ostatus_subscribe.php:21 msgid "Subscribing to OStatus contacts" -msgstr "" +msgstr "Subskrybowanie kontaktów OStatus" #: mod/ostatus_subscribe.php:33 msgid "No contact provided." -msgstr "" +msgstr "Brak kontaktu." #: mod/ostatus_subscribe.php:40 msgid "Couldn't fetch information for contact." -msgstr "" +msgstr "Nie można pobrać informacji o kontakcie." #: mod/ostatus_subscribe.php:50 msgid "Couldn't fetch friends for contact." -msgstr "" +msgstr "Nie można pobrać znajomych do kontaktu." #: mod/ostatus_subscribe.php:78 msgid "success" @@ -6444,7 +6444,7 @@ msgstr " - Odwiedźa %1$s's %2$s" #: mod/profiles.php:578 #, php-format msgid "%1$s has an updated %2$s, changing %3$s." -msgstr "" +msgstr "%1$sma zaktualizowany %2$s, zmiana%3$s." #: mod/profiles.php:632 msgid "Hide contacts and friends:" @@ -6594,13 +6594,13 @@ msgstr "Napisz o sobie..." #: mod/profiles.php:718 msgid "XMPP (Jabber) address:" -msgstr "" +msgstr "Adres XMPP (Jabber):" #: mod/profiles.php:718 msgid "" "The XMPP address will be propagated to your contacts so that they can follow" " you." -msgstr "" +msgstr "Adres XMPP będzie propagowany do Twoich kontaktów, aby mogli Cię śledzić." #: mod/profiles.php:719 msgid "Homepage URL:" @@ -6708,7 +6708,7 @@ msgstr "Portale społecznościowe" #: mod/settings.php:94 src/Content/Nav.php:204 msgid "Delegations" -msgstr "" +msgstr "Delegowanie" #: mod/settings.php:101 msgid "Connected apps" @@ -6790,7 +6790,7 @@ msgstr "Prywatne forum nie ma uprawnień do prywatności. Użyj domyślnej grupy #: mod/settings.php:575 msgid "Private forum has no privacy permissions and no default privacy group." -msgstr "" +msgstr "Prywatne forum nie ma uprawnień do prywatności ani domyślnej grupy prywatności." #: mod/settings.php:615 msgid "Settings updated." @@ -6867,7 +6867,7 @@ msgstr "wyłączony" #: mod/settings.php:804 mod/settings.php:805 #, php-format msgid "Built-in support for %s connectivity is %s" -msgstr "" +msgstr "Wbudowane wsparcie dla %s łączność jest %s" #: mod/settings.php:805 msgid "GNU Social (OStatus)" @@ -6879,11 +6879,11 @@ msgstr "Dostęp do e-maila nie jest w pełni sprawny na tej stronie" #: mod/settings.php:846 msgid "General Social Media Settings" -msgstr "" +msgstr "Ogólne ustawienia mediów społecznościowych" #: mod/settings.php:847 msgid "Disable intelligent shortening" -msgstr "" +msgstr "Wyłącz inteligentne skracanie" #: mod/settings.php:847 msgid "" @@ -7008,13 +7008,13 @@ msgstr "Mobilny motyw:" #: mod/settings.php:965 msgid "Suppress warning of insecure networks" -msgstr "" +msgstr "Ukryj ostrzeżenie przed niebezpiecznymi sieciami" #: mod/settings.php:965 msgid "" "Should the system suppress the warning that the current group contains " "members of networks that can't receive non public postings." -msgstr "" +msgstr "System powinien pominąć ostrzeżenie, że bieżąca grupa zawiera członków sieci, którzy nie mogą otrzymywać komentarzy niepublicznych" #: mod/settings.php:966 msgid "Update browser every xx seconds" @@ -7026,7 +7026,7 @@ msgstr "Minimum 10 sekund. Wprowadź -1, aby go wyłączyć." #: mod/settings.php:967 msgid "Number of items to display per page:" -msgstr "" +msgstr "Liczba elementów do wyświetlenia na stronie:" #: mod/settings.php:967 mod/settings.php:968 msgid "Maximum of 100 items" @@ -7064,17 +7064,17 @@ msgstr "Automatyczne aktualizacje tylko u góry strony sieci" msgid "" "When disabled, the network page is updated all the time, which could be " "confusing while reading." -msgstr "" +msgstr "Po wyłączeniu strona sieciowa jest cały czas aktualizowana, co może być mylące podczas czytania." #: mod/settings.php:975 msgid "Bandwith Saver Mode" -msgstr "" +msgstr "Tryb oszczędzania przepustowości" #: mod/settings.php:975 msgid "" "When enabled, embedded content is not displayed on automatic updates, they " "only show on page reload." -msgstr "" +msgstr "Po włączeniu wbudowana zawartość nie jest wyświetlana w automatycznych aktualizacjach, wyświetlają się tylko przy przeładowaniu strony." #: mod/settings.php:976 msgid "Smart Threading" @@ -7084,7 +7084,7 @@ msgstr "Inteligentne gwintowanie" msgid "" "When enabled, suppress extraneous thread indentation while keeping it where " "it matters. Only works if threading is available and enabled." -msgstr "" +msgstr "Włączenie tej opcji powoduje pomijanie wcięcia nitek zewnętrznych, zachowując je w dowolnym miejscu. Działa tylko wtedy, gdy wątki są dostępne i włączone." #: mod/settings.php:978 msgid "General Theme Settings" @@ -7118,7 +7118,7 @@ msgstr "Podtypy osobistych stron" #: mod/settings.php:1044 msgid "Community Forum Subtypes" -msgstr "" +msgstr "Podtypy społeczności forum" #: mod/settings.php:1051 msgid "Personal Page" @@ -7136,7 +7136,7 @@ msgstr "Strona Organizacji" msgid "" "Account for an organisation that automatically approves contact requests as " "\"Followers\"." -msgstr "" +msgstr "Konto dla organizacji, która automatycznie zatwierdza prośby o kontakt jako \"Obserwatorzy\"." #: mod/settings.php:1059 msgid "News Page" @@ -7146,15 +7146,15 @@ msgstr "Strona Wiadomości" msgid "" "Account for a news reflector that automatically approves contact requests as" " \"Followers\"." -msgstr "" +msgstr "Konto dla reflektora wiadomości, który automatycznie zatwierdza prośby o kontakt jako \"Obserwatorzy\"." #: mod/settings.php:1063 msgid "Community Forum" -msgstr "" +msgstr "Forum społecznościowe" #: mod/settings.php:1064 msgid "Account for community discussions." -msgstr "" +msgstr "Konto do dyskusji w społeczności." #: mod/settings.php:1067 msgid "Normal Account Page" @@ -7168,7 +7168,7 @@ msgstr "Konto dla zwykłego profilu osobistego, który wymaga ręcznej zgody \"P #: mod/settings.php:1071 msgid "Soapbox Page" -msgstr "" +msgstr "Strona Soapbox" #: mod/settings.php:1072 msgid "" @@ -7219,7 +7219,7 @@ msgstr "Opublikować swój domyślny profil w swoim lokalnym katalogu stron?" msgid "" "Your profile will be published in the global friendica directories (e.g. %s). Your profile will be visible in public." -msgstr "" +msgstr "Twój profil zostanie opublikowany w globalnych katalogach friendica (np.%s). Twój profil będzie widoczny publicznie." #: mod/settings.php:1109 msgid "Publish your default profile in the global social directory?" @@ -7299,7 +7299,7 @@ msgstr "Profil nie jest opublikowany" #: mod/settings.php:1146 #, php-format msgid "Your Identity Address is '%s' or '%s'." -msgstr "" +msgstr "Twój adres tożsamości to '%s' lub '%s'." #: mod/settings.php:1153 msgid "Automatically expire posts after this many days:" @@ -7335,7 +7335,7 @@ msgstr "Wygasanie zdjęć:" #: mod/settings.php:1160 msgid "Only expire posts by others:" -msgstr "" +msgstr "Tylko wygasaj posty innych osób:" #: mod/settings.php:1190 msgid "Account Settings" @@ -7445,11 +7445,11 @@ msgstr "przyjmowanie prośby o dodanie do znajomych" #: mod/settings.php:1252 msgid "joining a forum/community" -msgstr "" +msgstr "dołączanie do forum/społeczności" #: mod/settings.php:1253 msgid "making an interesting profile change" -msgstr "" +msgstr "dokonaj interesującej zmiany profilu" #: mod/settings.php:1254 msgid "Send a notification email when:" @@ -7493,15 +7493,15 @@ msgstr "Aktywuj powiadomienia na pulpicie" #: mod/settings.php:1264 msgid "Show desktop popup on new notifications" -msgstr "" +msgstr "Pokaż wyskakujące okienko dla nowych powiadomień" #: mod/settings.php:1266 msgid "Text-only notification emails" -msgstr "" +msgstr "E-maile z powiadomieniami tekstowymi" #: mod/settings.php:1268 msgid "Send text only notification emails, without the html part" -msgstr "" +msgstr "Wysyłaj tylko e-maile z powiadomieniami tekstowymi, bez części html" #: mod/settings.php:1270 msgid "Show detailled notifications" @@ -7511,15 +7511,15 @@ msgstr "Pokaż szczegółowe powiadomienia" msgid "" "Per default, notifications are condensed to a single notification per item. " "When enabled every notification is displayed." -msgstr "" +msgstr "Domyślne powiadomienia są skondensowane z jednym powiadomieniem dla każdego przedmiotu. Po włączeniu wyświetlane jest każde powiadomienie." #: mod/settings.php:1274 msgid "Advanced Account/Page Type Settings" -msgstr "" +msgstr "Zaawansowane ustawienia konta/rodzaju strony" #: mod/settings.php:1275 msgid "Change the behaviour of this account for special situations" -msgstr "" +msgstr "Zmień zachowanie tego konta w sytuacjach specjalnych" #: mod/settings.php:1278 msgid "Relocate" @@ -7533,23 +7533,23 @@ msgstr "Jeśli ten profil został przeniesiony z innego serwera, a niektóre z T #: mod/settings.php:1280 msgid "Resend relocate message to contacts" -msgstr "" +msgstr "Wyślij ponownie przenieść wiadomości do kontaktów" #: mod/unfollow.php:34 msgid "Contact wasn't found or can't be unfollowed." -msgstr "" +msgstr "Kontakt nie został znaleziony lub nie można go pominąć." #: mod/unfollow.php:47 msgid "Contact unfollowed" -msgstr "" +msgstr "Skontaktuj się z obserwowanym" #: mod/unfollow.php:73 msgid "You aren't a friend of this contact." -msgstr "" +msgstr "Nie jesteś przyjacielem tego kontaktu." #: mod/unfollow.php:79 msgid "Unfollowing is currently not supported by your network." -msgstr "" +msgstr "Brak obserwowania nie jest obecnie obsługiwany przez twoją sieć." #: view/theme/duepuntozero/config.php:54 src/Model/User.php:488 msgid "default" @@ -7585,7 +7585,7 @@ msgstr "" #: view/theme/frio/php/Image.php:25 msgid "Repeat the image" -msgstr "" +msgstr "Powtórz obraz" #: view/theme/frio/php/Image.php:25 msgid "Will repeat your image to fill the background." @@ -7781,7 +7781,7 @@ msgstr "Profile społeczności" #: view/theme/vier/config.php:125 msgid "Help or @NewHere ?" -msgstr "" +msgstr "Pomoc lub @NewHere?" #: view/theme/vier/config.php:126 view/theme/vier/theme.php:389 msgid "Connect Services" @@ -7860,7 +7860,7 @@ msgstr "Ukryć szczegóły twojego profilu przed nieznajomymi?" #: src/Core/ACL.php:300 #, php-format msgid "Connectors disabled, since \"%s\" is enabled." -msgstr "" +msgstr "Wtyczki są wyłączone, ponieważ \"%s\" jest włączone." #: src/Core/ACL.php:307 msgid "Visible to everybody" @@ -7906,12 +7906,12 @@ msgstr "%s przestał lubić post %s" #: src/Core/NotificationsManager.php:307 #, php-format msgid "%s is attending %s's event" -msgstr "" +msgstr "%suczestniczy %sw wydarzeniu " #: src/Core/NotificationsManager.php:320 #, php-format msgid "%s is not attending %s's event" -msgstr "" +msgstr "%snie uczestniczy %s w wydarzeniu " #: src/Core/NotificationsManager.php:333 #, php-format @@ -8088,7 +8088,7 @@ msgstr "Google+" #: src/Content/ContactSelector.php:90 msgid "pump.io" -msgstr "" +msgstr "pump.io" #: src/Content/ContactSelector.php:91 msgid "Twitter" @@ -8096,7 +8096,7 @@ msgstr "Twitter" #: src/Content/ContactSelector.php:92 msgid "Diaspora Connector" -msgstr "" +msgstr "Wtyczka Diaspora" #: src/Content/ContactSelector.php:93 msgid "GNU Social Connector" @@ -8108,7 +8108,7 @@ msgstr "" #: src/Content/ContactSelector.php:95 msgid "App.net" -msgstr "" +msgstr "App.net" #: src/Content/ContactSelector.php:125 msgid "Male" @@ -8486,7 +8486,7 @@ msgstr "Eksportuj kalendarz publiczny" #: src/Content/Feature.php:83 msgid "Ability for visitors to download the public calendar" -msgstr "" +msgstr "Możliwość pobierania kalendarza publicznego przez odwiedzających" #: src/Content/Feature.php:88 msgid "Post Composition Features" @@ -8502,7 +8502,7 @@ msgstr "Zezwalaj na podgląd postów i komentarzy przed ich opublikowaniem" #: src/Content/Feature.php:90 msgid "Auto-mention Forums" -msgstr "" +msgstr "Automatyczne wymienianie forów" #: src/Content/Feature.php:90 msgid "" @@ -8571,7 +8571,7 @@ msgstr "Włącz kartę, aby wyświetlić tylko nowe posty sieciowe (z ostatnich #: src/Content/Feature.php:108 msgid "Network Shared Links Tab" -msgstr "" +msgstr "Karta Połączone karty sieciowe" #: src/Content/Feature.php:108 msgid "Enable tab to display only Network posts with links in them" @@ -8627,7 +8627,7 @@ msgstr "Nie lubię Postów" #: src/Content/Feature.php:119 msgid "Ability to dislike posts/comments" -msgstr "" +msgstr "Możliwa niechęć do postów/komentarzy" #: src/Content/Feature.php:120 msgid "Star Posts" @@ -8767,7 +8767,7 @@ msgid "" "\t\t\t\tbut when I tried to install it, something went terribly wrong.\n" "\t\t\t\tThis needs to be fixed soon and I can't do it alone. Please contact a\n" "\t\t\t\tfriendica developer if you can not help me on your own. My database might be invalid." -msgstr "" +msgstr "\n\t\t\t\tDeweloperzy friendica wydali niedawno aktualizację %s,\n\t\t\t\tale podczas próby instalacji, coś poszło nie tak.\n\t\t\t\tZostanie to naprawione wkrótce i nie mogę tego zrobić sam. Proszę skontaktować się z \n\t\t\t\tprogramistami friendica, jeśli nie możesz mi pomóc na własną rękę. Moja baza danych może być nieprawidłowa." #: src/Database/DBStructure.php:80 #, php-format diff --git a/view/lang/pl/strings.php b/view/lang/pl/strings.php index 3f5e0d1ea..95e5f4c9d 100644 --- a/view/lang/pl/strings.php +++ b/view/lang/pl/strings.php @@ -76,7 +76,7 @@ $a->strings["%2\$d people like this"] = "%2\$d $a->strings["%s like this."] = "%s lubię to."; $a->strings["%2\$d people don't like this"] = "%2\$d ludzi nie lubi tego "; $a->strings["%s don't like this."] = "%s nie lubię tego."; -$a->strings["%2\$d people attend"] = ""; +$a->strings["%2\$d people attend"] = "%2\$dosoby uczestniczą"; $a->strings["%s attend."] = ""; $a->strings["%2\$d people don't attend"] = ""; $a->strings["%s don't attend."] = "%s nie uczestnicz"; @@ -894,7 +894,7 @@ $a->strings["This page lists the content of the queue for outgoing postings. The $a->strings["Your DB still runs with MyISAM tables. You should change the engine type to InnoDB. As Friendica will use InnoDB only features in the future, you should change this! See here for a guide that may be helpful converting the table engines. You may also use the command php bin/console.php dbstructure toinnodb of your Friendica installation for an automatic conversion.
    "] = "Twoja baza danych nadal działa z tabelami MyISAM. Powinieneś zmienić typ silnika na InnoDB. Ponieważ Friendica będzie używać funkcji związanych z InnoDB tylko w przyszłości, powinieneś to zmienić! Zobacz tutaj przewodnik, który może być pomocny w konwersji silników stołowych. Możesz także użyć polecenia php bin/console.php dbstructure toinnodb instalacji Friendica do automatycznej konwersji.
    "; $a->strings["There is a new version of Friendica available for download. Your current version is %1\$s, upstream version is %2\$s"] = "Dostępna jest nowa wersja aplikacji Friendica. Twoja aktualna wersja to %1\$s wyższa wersja to %2\$s"; $a->strings["The database update failed. Please run \"php bin/console.php dbstructure update\" from the command line and have a look at the errors that might appear."] = "Aktualizacja bazy danych nie powiodła się. Uruchom polecenie \"php bin/console.php dbstructure update\" z wiersza poleceń i sprawdź błędy, które mogą się pojawić."; -$a->strings["The worker was never executed. Please check your database structure!"] = ""; +$a->strings["The worker was never executed. Please check your database structure!"] = "Pracownik nigdy nie został stracony. Sprawdź swoją strukturę bazy danych!"; $a->strings["The last worker execution was on %s UTC. This is older than one hour. Please check your crontab settings."] = "Ostatnie wykonanie robota było w %s UTC. To jest starsze niż jedna godzina. Sprawdź ustawienia crontab."; $a->strings["Normal Account"] = "Konto normalne"; $a->strings["Automatic Follower Account"] = "Automatyczne konto obserwatora"; @@ -908,7 +908,7 @@ $a->strings["Registered users"] = "Zarejestrowani użytkownicy"; $a->strings["Pending registrations"] = "Rejestracje w toku."; $a->strings["Version"] = "Wersja"; $a->strings["Active addons"] = "Aktywne dodatki"; -$a->strings["Can not parse base url. Must have at least ://"] = ""; +$a->strings["Can not parse base url. Must have at least ://"] = "Nie można zanalizować podstawowego adresu URL. Musi mieć co najmniej : //"; $a->strings["Site settings updated."] = "Ustawienia strony zaktualizowane"; $a->strings["No special theme for mobile devices"] = "Brak specialnego motywu dla urządzeń mobilnych"; $a->strings["No community page"] = "Brak strony społeczności"; @@ -983,7 +983,7 @@ $a->strings["Allowed friend domains"] = "Dozwolone domeny przyjaciół"; $a->strings["Comma separated list of domains which are allowed to establish friendships with this site. Wildcards are accepted. Empty to allow any domains"] = "Lista domen separowana przecinkami które mogą zaprzyjaźnić się z tą stroną . Wildcards są akceptowane . Pozostaw puste by zezwolić każdej domenie na zapryjaźnienie. "; $a->strings["Allowed email domains"] = "Dozwolone domeny e-mailowe"; $a->strings["Comma separated list of domains which are allowed in email addresses for registrations to this site. Wildcards are accepted. Empty to allow any domains"] = "Rozdzielana przecinkami lista domen dozwolonych w adresach e-mail do rejestracji na tej stronie. Symbole wieloznaczne są akceptowane. Opróżnij, aby zezwolić na dowolne domeny"; -$a->strings["No OEmbed rich content"] = ""; +$a->strings["No OEmbed rich content"] = "Brak treści multimedialnych ze znaczkiem HTML"; $a->strings["Don't show the rich content (e.g. embedded PDF), except from the domains listed below."] = "Nie wyświetlaj zasobów treści (np. osadzonego pliku PDF), z wyjątkiem domen wymienionych poniżej."; $a->strings["Allowed OEmbed domains"] = "Dozwolone domeny OEmbed"; $a->strings["Comma separated list of domains which oembed content is allowed to be displayed. Wildcards are accepted."] = "Rozdzielana przecinkami lista domen, w których wyświetlana jest treść, może być wyświetlana. Symbole wieloznaczne są akceptowane."; @@ -1017,10 +1017,10 @@ $a->strings["Enable OStatus support"] = "Włącz wsparcie OStatus"; $a->strings["Provide built-in OStatus (StatusNet, GNU Social etc.) compatibility. All communications in OStatus are public, so privacy warnings will be occasionally displayed."] = "Zapewnij kompatybilność z OStatus (StatusNet, GNU Social itp.). Cała komunikacja w stanie OStatus jest jawna, dlatego ostrzeżenia o prywatności będą czasami wyświetlane."; $a->strings["Only import OStatus threads from our contacts"] = "Importuj wątki OStatus tylko z naszych kontaktów"; $a->strings["Normally we import every content from our OStatus contacts. With this option we only store threads that are started by a contact that is known on our system."] = "Normalnie importujemy każdą treść z naszych kontaktów OStatus. W tej opcji przechowujemy tylko wątki uruchomione przez kontakt znany w naszym systemie."; -$a->strings["OStatus support can only be enabled if threading is enabled."] = ""; -$a->strings["Diaspora support can't be enabled because Friendica was installed into a sub directory."] = ""; +$a->strings["OStatus support can only be enabled if threading is enabled."] = "Obsługa OStatus może być włączona tylko wtedy, gdy włączone jest wątkowanie."; +$a->strings["Diaspora support can't be enabled because Friendica was installed into a sub directory."] = "Obsługa Diaspory nie może być włączona, ponieważ Friendica została zainstalowana w podkatalogu."; $a->strings["Enable Diaspora support"] = "Włączyć obsługę Diaspory"; -$a->strings["Provide built-in Diaspora network compatibility."] = ""; +$a->strings["Provide built-in Diaspora network compatibility."] = "Zapewnij wbudowaną kompatybilność z siecią Diaspora."; $a->strings["Only allow Friendica contacts"] = "Dopuść tylko kontakty Friendrica"; $a->strings["All contacts must use Friendica protocols. All other built-in communication protocols disabled."] = "Wszyscy znajomi muszą używać protokołów Friendica. Wszystkie inne wbudowane protokoły komunikacyjne są wyłączone."; $a->strings["Verify SSL"] = "Weryfikacja SSL"; @@ -1029,20 +1029,20 @@ $a->strings["Proxy user"] = "Użytkownik proxy"; $a->strings["Proxy URL"] = "URL Proxy"; $a->strings["Network timeout"] = "Network timeout"; $a->strings["Value is in seconds. Set to 0 for unlimited (not recommended)."] = "Wartość jest w sekundach. Ustaw na 0 dla nieograniczonej (niezalecane)."; -$a->strings["Maximum Load Average"] = ""; +$a->strings["Maximum Load Average"] = "Maksymalne obciążenie średnie"; $a->strings["Maximum system load before delivery and poll processes are deferred - default 50."] = "Maksymalne obciążenie systemu przed dostawą i odpytywaniem jest odroczone - domyślnie 50."; -$a->strings["Maximum Load Average (Frontend)"] = ""; +$a->strings["Maximum Load Average (Frontend)"] = "Maksymalne obciążenie średnie (Frontend)"; $a->strings["Maximum system load before the frontend quits service - default 50."] = "Maksymalne obciążenie systemu, zanim frontend zakończy pracę - domyślnie 50."; $a->strings["Minimal Memory"] = "Minimalna pamięć"; -$a->strings["Minimal free memory in MB for the worker. Needs access to /proc/meminfo - default 0 (deactivated)."] = ""; -$a->strings["Maximum table size for optimization"] = ""; -$a->strings["Maximum table size (in MB) for the automatic optimization - default 100 MB. Enter -1 to disable it."] = ""; -$a->strings["Minimum level of fragmentation"] = ""; -$a->strings["Minimum fragmenation level to start the automatic optimization - default value is 30%."] = ""; -$a->strings["Periodical check of global contacts"] = ""; +$a->strings["Minimal free memory in MB for the worker. Needs access to /proc/meminfo - default 0 (deactivated)."] = "Minimalna wolna pamięć w MB dla pracownika. Potrzebuje dostępu do /proc/ meminfo - domyślnie 0 (wyłączone)."; +$a->strings["Maximum table size for optimization"] = "Maksymalny rozmiar stołu do optymalizacji"; +$a->strings["Maximum table size (in MB) for the automatic optimization - default 100 MB. Enter -1 to disable it."] = "Maksymalny rozmiar tabeli (w MB) dla automatycznej optymalizacji - domyślnie 100 MB. Wprowadź -1, aby go wyłączyć."; +$a->strings["Minimum level of fragmentation"] = "Minimalny poziom fragmentacji"; +$a->strings["Minimum fragmenation level to start the automatic optimization - default value is 30%."] = "Minimalny poziom fragmentacji, aby rozpocząć automatyczną optymalizację - domyślna wartość to 30%."; +$a->strings["Periodical check of global contacts"] = "Okresowa kontrola kontaktów globalnych"; $a->strings["If enabled, the global contacts are checked periodically for missing or outdated data and the vitality of the contacts and servers."] = "Jeśli jest włączona, kontakty globalne są okresowo sprawdzane pod kątem brakujących lub nieaktualnych danych oraz żywotności kontaktów i serwerów."; $a->strings["Days between requery"] = "Dni między żądaniem"; -$a->strings["Number of days after which a server is requeried for his contacts."] = ""; +$a->strings["Number of days after which a server is requeried for his contacts."] = "Liczba dni, po upływie których serwer jest żądany dla swoich kontaktów."; $a->strings["Discover contacts from other servers"] = "Odkryj kontakty z innych serwerów"; $a->strings["Periodically query other servers for contacts. You can choose between 'users': the users on the remote system, 'Global Contacts': active contacts that are known on the system. The fallback is meant for Redmatrix servers and older friendica servers, where global contacts weren't available. The fallback increases the server load, so the recommened setting is 'Users, Global Contacts'."] = "Okresowo wysyłaj zapytanie do innych serwerów o kontakty. Możesz wybierać pomiędzy 'użytkownikami': użytkownikami w systemie zdalnym, 'Kontakty globalne': aktywne kontakty znane w systemie. Zastępowanie jest przeznaczone dla serwerów Redmatrix i starszych serwerów Friendica, w których kontakty globalne nie były dostępne. Funkcja awaryjna zwiększa obciążenie serwera, dlatego zalecanym ustawieniem jest 'Użytkownicy, kontakty globalne'."; $a->strings["Timeframe for fetching global contacts"] = "Czas pobierania globalnych kontaktów"; @@ -1076,41 +1076,41 @@ $a->strings["Encryption layer between nodes."] = "Warstwa szyfrowania między w $a->strings["Enabled"] = "Włącz"; $a->strings["Maximum number of parallel workers"] = "Maksymalna liczba równoległych pracowników"; $a->strings["On shared hosters set this to 2. On larger systems, values of 10 are great. Default value is 4."] = "Na współdzielonych hostach ustaw to na 2. W większych systemach wartości 10 są świetne. Domyślna wartość to 4."; -$a->strings["Don't use 'proc_open' with the worker"] = ""; -$a->strings["Enable this if your system doesn't allow the use of 'proc_open'. This can happen on shared hosters. If this is enabled you should increase the frequency of worker calls in your crontab."] = ""; +$a->strings["Don't use 'proc_open' with the worker"] = "Nie używaj 'proc_open' z robotnikiem"; +$a->strings["Enable this if your system doesn't allow the use of 'proc_open'. This can happen on shared hosters. If this is enabled you should increase the frequency of worker calls in your crontab."] = "Włącz to, jeśli twój system nie zezwala na użycie 'proc_open'. Może się to zdarzyć w przypadku współdzielonych hosterów. Jeśli ta opcja jest włączona, powinieneś zwiększyć częstotliwość wywołań pracowniczych w twoim pliku crontab."; $a->strings["Enable fastlane"] = "Włącz Fastlane"; $a->strings["When enabed, the fastlane mechanism starts an additional worker if processes with higher priority are blocked by processes of lower priority."] = "Po włączeniu system Fastlane uruchamia dodatkowego pracownika, jeśli procesy o wyższym priorytecie są blokowane przez procesy o niższym priorytecie."; -$a->strings["Enable frontend worker"] = ""; -$a->strings["When enabled the Worker process is triggered when backend access is performed \\x28e.g. messages being delivered\\x29. On smaller sites you might want to call %s/worker on a regular basis via an external cron job. You should only enable this option if you cannot utilize cron/scheduled jobs on your server."] = ""; -$a->strings["Subscribe to relay"] = ""; +$a->strings["Enable frontend worker"] = "Włącz pracownika frontend"; +$a->strings["When enabled the Worker process is triggered when backend access is performed \\x28e.g. messages being delivered\\x29. On smaller sites you might want to call %s/worker on a regular basis via an external cron job. You should only enable this option if you cannot utilize cron/scheduled jobs on your server."] = "Po włączeniu proces roboczy jest wyzwalany, gdy wykonywany jest dostęp do zaplecza \\x28e.g. wiadomości są dostarczane\\x29. W mniejszych witrynach możesz chcieć wywoływać %s/robotnika regularnie przez zewnętrzne zadanie cron. Tę opcję należy włączyć tylko wtedy, gdy nie można używać zadań cron/zaplanowanych na serwerze."; +$a->strings["Subscribe to relay"] = "Subskrybuj przekaźnik"; $a->strings["Enables the receiving of public posts from the relay. They will be included in the search, subscribed tags and on the global community page."] = "Umożliwia odbieranie publicznych wiadomości z przekaźnika. Zostaną uwzględnione w tagach wyszukiwania, subskrybowanych i na stronie społeczności globalnej."; $a->strings["Relay server"] = "Serwer przekazujący"; -$a->strings["Address of the relay server where public posts should be send to. For example https://relay.diasp.org"] = ""; -$a->strings["Direct relay transfer"] = ""; -$a->strings["Enables the direct transfer to other servers without using the relay servers"] = ""; -$a->strings["Relay scope"] = ""; -$a->strings["Can be 'all' or 'tags'. 'all' means that every public post should be received. 'tags' means that only posts with selected tags should be received."] = ""; +$a->strings["Address of the relay server where public posts should be send to. For example https://relay.diasp.org"] = "Adres serwera przekazującego, do którego należy wysyłać publiczne posty. Na przykład https://relay.diasp.org"; +$a->strings["Direct relay transfer"] = "Bezpośredni transfer przekaźników"; +$a->strings["Enables the direct transfer to other servers without using the relay servers"] = "Umożliwia bezpośredni transfer do innych serwerów bez korzystania z serwerów przekazujących"; +$a->strings["Relay scope"] = "Zakres przekaźnika"; +$a->strings["Can be 'all' or 'tags'. 'all' means that every public post should be received. 'tags' means that only posts with selected tags should be received."] = "Może być 'wszystkim' lub 'tagami'. 'wszystko' oznacza, że ​​każdy post publiczny powinien zostać odebrany. 'tagi' oznaczają, że powinny być odbierane tylko posty z wybranymi tagami."; $a->strings["all"] = "wszystko"; $a->strings["tags"] = "tagi"; $a->strings["Server tags"] = "Serwer tagów"; -$a->strings["Comma separated list of tags for the 'tags' subscription."] = ""; +$a->strings["Comma separated list of tags for the 'tags' subscription."] = "Lista oddzielonych przecinkami znaczników dla subskrypcji 'tagów'."; $a->strings["Allow user tags"] = "Pozwól na tagi użytkowników"; -$a->strings["If enabled, the tags from the saved searches will used for the 'tags' subscription in addition to the 'relay_server_tags'."] = ""; +$a->strings["If enabled, the tags from the saved searches will used for the 'tags' subscription in addition to the 'relay_server_tags'."] = "Po włączeniu tagi z zapisanych wyszukiwań będą używane do subskrypcji 'tagów' oprócz 'relay_server_tags'."; $a->strings["Update has been marked successful"] = "Aktualizacja została oznaczona jako udana"; -$a->strings["Database structure update %s was successfully applied."] = ""; -$a->strings["Executing of database structure update %s failed with error: %s"] = ""; -$a->strings["Executing %s failed with error: %s"] = ""; -$a->strings["Update %s was successfully applied."] = ""; -$a->strings["Update %s did not return a status. Unknown if it succeeded."] = ""; -$a->strings["There was no additional update function %s that needed to be called."] = ""; +$a->strings["Database structure update %s was successfully applied."] = "Pomyślnie zastosowano aktualizację %s struktury bazy danych."; +$a->strings["Executing of database structure update %s failed with error: %s"] = "Wykonanie aktualizacji %s struktury bazy danych nie powiodło się z powodu błędu:%s"; +$a->strings["Executing %s failed with error: %s"] = "Wykonanie %s nie powiodło się z powodu błędu:%s"; +$a->strings["Update %s was successfully applied."] = "Aktualizacja %s została pomyślnie zastosowana."; +$a->strings["Update %s did not return a status. Unknown if it succeeded."] = "Aktualizacja %s nie zwróciła statusu. Nieznane, jeśli się udało."; +$a->strings["There was no additional update function %s that needed to be called."] = "Nie było dodatkowej funkcji %s aktualizacji, która musiała zostać wywołana."; $a->strings["No failed updates."] = "Brak błędów aktualizacji."; $a->strings["Check database structure"] = "Sprawdź strukturę bazy danych"; $a->strings["Failed Updates"] = "Błąd aktualizacji"; -$a->strings["This does not include updates prior to 1139, which did not return a status."] = ""; +$a->strings["This does not include updates prior to 1139, which did not return a status."] = "Nie dotyczy to aktualizacji przed 1139, który nie zwrócił statusu."; $a->strings["Mark success (if update was manually applied)"] = "Oznacz sukces (jeśli aktualizacja została ręcznie zastosowana)"; $a->strings["Attempt to execute this update step automatically"] = "Spróbuj automatycznie wykonać ten krok aktualizacji"; -$a->strings["\n\t\t\tDear %1\$s,\n\t\t\t\tthe administrator of %2\$s has set up an account for you."] = ""; -$a->strings["\n\t\t\tThe login details are as follows:\n\n\t\t\tSite Location:\t%1\$s\n\t\t\tLogin Name:\t\t%2\$s\n\t\t\tPassword:\t\t%3\$s\n\n\t\t\tYou may change your password from your account \"Settings\" page after logging\n\t\t\tin.\n\n\t\t\tPlease take a few moments to review the other account settings on that page.\n\n\t\t\tYou may also wish to add some basic information to your default profile\n\t\t\t(on the \"Profiles\" page) so that other people can easily find you.\n\n\t\t\tWe recommend setting your full name, adding a profile photo,\n\t\t\tadding some profile \"keywords\" (very useful in making new friends) - and\n\t\t\tperhaps what country you live in; if you do not wish to be more specific\n\t\t\tthan that.\n\n\t\t\tWe fully respect your right to privacy, and none of these items are necessary.\n\t\t\tIf you are new and do not know anybody here, they may help\n\t\t\tyou to make some new and interesting friends.\n\n\t\t\tThank you and welcome to %4\$s."] = ""; +$a->strings["\n\t\t\tDear %1\$s,\n\t\t\t\tthe administrator of %2\$s has set up an account for you."] = "\n\t\t\tSzanowny/a Panie/Pani %1\$s, \n\t\t\t\tadministrator %2\$s założył dla ciebie konto."; +$a->strings["\n\t\t\tThe login details are as follows:\n\n\t\t\tSite Location:\t%1\$s\n\t\t\tLogin Name:\t\t%2\$s\n\t\t\tPassword:\t\t%3\$s\n\n\t\t\tYou may change your password from your account \"Settings\" page after logging\n\t\t\tin.\n\n\t\t\tPlease take a few moments to review the other account settings on that page.\n\n\t\t\tYou may also wish to add some basic information to your default profile\n\t\t\t(on the \"Profiles\" page) so that other people can easily find you.\n\n\t\t\tWe recommend setting your full name, adding a profile photo,\n\t\t\tadding some profile \"keywords\" (very useful in making new friends) - and\n\t\t\tperhaps what country you live in; if you do not wish to be more specific\n\t\t\tthan that.\n\n\t\t\tWe fully respect your right to privacy, and none of these items are necessary.\n\t\t\tIf you are new and do not know anybody here, they may help\n\t\t\tyou to make some new and interesting friends.\n\n\t\t\tThank you and welcome to %4\$s."] = "\n\t\t\tDane logowania są następuje:\n\n\t\t\tLokalizacja witryny:\t%1\$s\n\t\t\tNazwa użytkownika:\t\t%2\$s\n\t\t\tHasło:\t\t%3\$s\n\n\t\t\tPo zalogowaniu możesz zmienić hasło ze strony \"Ustawienia\" na koncie\n\t\t\tw\n\n\t\t\t Poświęć chwilę, aby przejrzeć inne ustawienia konta na tej stronie\n\n\t\t\tMożesz również dodać podstawowe informacje do swojego domyślnego profilu\n\t\t\t(na stronie 'Profil'), aby inne osoby mogły łatwo Cię znaleźć.\n\n\t\t\tZalecamy ustawienie imienia i nazwiska, dodanie zdjęcia profilowego,\n\t\t\tdodanie niektórych \"słów kluczowych\" profilu (bardzo przydatne w nawiązywaniu nowych znajomości) - i\n\t\t\tbyć może w jakim kraju mieszkasz; jeśli nie chcesz być bardziej konkretny\n\t\t\tniż to.\n\n \t\t\tW pełni szanujemy Twoje prawo do prywatności i żaden z tych elementów nie jest konieczny.\n\t\t\tJeśli jesteś nowy i nie znasz nikogo tutaj, mogą ci pomóc\n\t\t\tmożesz tworzyć nowych i interesujących przyjaciół\n\n\t\t\tDziękuję i zapraszam%4\$s"; $a->strings["Registration details for %s"] = "Szczegóły rejestracji dla %s"; $a->strings["%s user blocked/unblocked"] = [ 0 => "", @@ -1157,7 +1157,7 @@ $a->strings["Toggle"] = "Włącz"; $a->strings["Author: "] = "Autor: "; $a->strings["Maintainer: "] = "Opiekun:"; $a->strings["Reload active addons"] = "Załaduj ponownie aktywne dodatki"; -$a->strings["There are currently no addons available on your node. You can find the official addon repository at %1\$s and might find other interesting addons in the open addon registry at %2\$s"] = ""; +$a->strings["There are currently no addons available on your node. You can find the official addon repository at %1\$s and might find other interesting addons in the open addon registry at %2\$s"] = "W twoim węźle nie ma obecnie żadnych dodatków. Możesz znaleźć oficjalne repozytorium dodatków na %1\$s i możesz znaleźć inne interesujące dodatki w otwartym rejestrze dodatków na %2\$s"; $a->strings["No themes found."] = "Nie znaleziono tematu."; $a->strings["Screenshot"] = "Zrzut ekranu"; $a->strings["Reload active themes"] = "Przeładuj aktywne motywy"; @@ -1174,11 +1174,11 @@ $a->strings["Must be writable by web server. Relative to your Friendica top-leve $a->strings["Log level"] = "Poziom logów"; $a->strings["PHP logging"] = ""; $a->strings["To enable logging of PHP errors and warnings you can add the following to the .htconfig.php file of your installation. The filename set in the 'error_log' line is relative to the friendica top-level directory and must be writeable by the web server. The option '1' for 'log_errors' and 'display_errors' is to enable these options, set to '0' to disable them."] = "Aby włączyć rejestrowanie błędów i ostrzeżeń PHP, możesz dodać następujące dane do pliku .htconfig.php instalacji. Nazwa pliku ustawiona w linii 'error_log' odnosi się do katalogu najwyższego poziomu friendiki i musi być zapisywalna przez serwer WWW. Opcja '1' dla 'log_errors' i 'display_errors' polega na włączeniu tych opcji, ustawieniu na '0', aby je wyłączyć."; -$a->strings["Error trying to open %1\$s log file.\\r\\n
    Check to see if file %1\$s exist and is readable."] = ""; -$a->strings["Couldn't open %1\$s log file.\\r\\n
    Check to see if file %1\$s is readable."] = ""; +$a->strings["Error trying to open %1\$s log file.\\r\\n
    Check to see if file %1\$s exist and is readable."] = "Błąd podczas próby otwarcia %1\$s pliku dziennika. \\r\\n
    Sprawdź, czy plik %1\$s istnieje i czy można go odczytać."; +$a->strings["Couldn't open %1\$s log file.\\r\\n
    Check to see if file %1\$s is readable."] = "Nie można otworzyć %1\$spliku dziennika. \\r\\n
    Sprawdź, czy plik %1\$s jest czytelny."; $a->strings["Off"] = "Wyłącz"; $a->strings["On"] = "Włącz"; -$a->strings["Lock feature %s"] = ""; +$a->strings["Lock feature %s"] = "Funkcja blokady %s"; $a->strings["Manage Additional Features"] = "Zarządzaj dodatkowymi funkcjami"; $a->strings["Source input"] = "Źródło wejściowe"; $a->strings["BBCode::convert (raw HTML("] = ""; @@ -1190,7 +1190,7 @@ $a->strings["BBCode::toMarkdown => Markdown::toBBCode"] = ""; $a->strings["BBCode::toMarkdown => Markdown::convert => HTML::toBBCode"] = ""; $a->strings["Source input \\x28Diaspora format\\x29"] = ""; $a->strings["Markdown::toBBCode"] = ""; -$a->strings["Raw HTML input"] = ""; +$a->strings["Raw HTML input"] = "Surowe wejście HTML"; $a->strings["HTML Input"] = ""; $a->strings["HTML::toBBCode"] = ""; $a->strings["HTML::toPlaintext"] = ""; @@ -1244,7 +1244,7 @@ $a->strings["Fetch information like preview pictures, title and teaser from the $a->strings["Fetch information"] = "Pobierz informacje"; $a->strings["Fetch keywords"] = "Pobierz słowa kluczowe"; $a->strings["Fetch information and keywords"] = "Pobierz informacje i słowa kluczowe"; -$a->strings["Disconnect/Unfollow"] = ""; +$a->strings["Disconnect/Unfollow"] = "Rozłącz/Nie obserwuj"; $a->strings["Contact"] = "Kontakt"; $a->strings["Profile Visibility"] = "Widoczność profilu"; $a->strings["Please choose the profile you would like to display to %s when viewing your profile securely."] = "Wybierz profil, który chcesz bezpiecznie wyświetlić %s"; @@ -1300,8 +1300,8 @@ $a->strings["Mutual Friendship"] = "Wzajemna przyjaźń"; $a->strings["is a fan of yours"] = "jest twoim fanem"; $a->strings["you are a fan of"] = "jesteś fanem"; $a->strings["Toggle Blocked status"] = "Przełącz na Zablokowany"; -$a->strings["Toggle Ignored status"] = ""; -$a->strings["Toggle Archive status"] = ""; +$a->strings["Toggle Ignored status"] = "Przełącz ignorowany status"; +$a->strings["Toggle Archive status"] = "Przełącz status archiwum"; $a->strings["Delete contact"] = "Usuń kontakt"; $a->strings["Parent user not found."] = "Nie znaleziono użytkownika nadrzędnego."; $a->strings["No parent user"] = "Brak nadrzędnego użytkownika"; @@ -1309,7 +1309,7 @@ $a->strings["Parent Password:"] = "Hasło nadrzędne:"; $a->strings["Please enter the password of the parent account to legitimize your request."] = "Wprowadź hasło konta nadrzędnego, aby legalizować swoje żądanie."; $a->strings["Parent User"] = "Użytkownik nadrzędny"; $a->strings["Parent users have total control about this account, including the account settings. Please double check whom you give this access."] = "Użytkownicy nadrzędni mają pełną kontrolę nad tym kontem, w tym także ustawienia konta. Sprawdź dokładnie, komu przyznasz ten dostęp."; -$a->strings["Delegate Page Management"] = ""; +$a->strings["Delegate Page Management"] = "Deleguj zarządzanie stronami"; $a->strings["Delegates"] = "Oddeleguj"; $a->strings["Delegates are able to manage all aspects of this account/page except for basic account settings. Please do not delegate your personal account to anybody that you do not trust completely."] = "Delegaci mogą zarządzać wszystkimi aspektami tego konta/strony, z wyjątkiem podstawowych ustawień konta. Nie przekazuj swojego konta osobistego nikomu, komu nie ufasz całkowicie."; $a->strings["Existing Page Delegates"] = "Obecni delegaci stron"; @@ -1323,9 +1323,9 @@ $a->strings["Find on this site"] = "Znajdź na tej stronie"; $a->strings["Results for:"] = "Wyniki dla:"; $a->strings["Site Directory"] = "Katalog Strony"; $a->strings["No entries (some entries may be hidden)."] = "Brak odwiedzin (niektóre odwiedziny mogą być ukryte)."; -$a->strings["People Search - %s"] = ""; +$a->strings["People Search - %s"] = "Szukaj osób - %s"; $a->strings["Forum Search - %s"] = "Przeszukiwanie forum - %s"; -$a->strings["Event can not end before it has started."] = ""; +$a->strings["Event can not end before it has started."] = "Wydarzenie nie może się zakończyć przed jego rozpoczęciem."; $a->strings["Event title and start time are required."] = "Wymagany tytuł wydarzenia i czas rozpoczęcia."; $a->strings["Create New Event"] = "Stwórz nowe wydarzenie"; $a->strings["Event details"] = "Szczegóły wydarzenia"; @@ -1377,7 +1377,7 @@ $a->strings["If you don't have a command line version of PHP installed on your s $a->strings["PHP executable path"] = "Ścieżka wykonywalna PHP"; $a->strings["Enter full path to php executable. You can leave this blank to continue the installation."] = "Wprowadź pełną ścieżkę do pliku wykonywalnego php. Możesz pozostawić to pole puste, aby kontynuować instalację."; $a->strings["Command line PHP"] = "Linia komend PHP"; -$a->strings["PHP executable is not the php cli binary (could be cgi-fgci version)"] = ""; +$a->strings["PHP executable is not the php cli binary (could be cgi-fgci version)"] = "Plik wykonywalny PHP nie jest php cli binarny (może być wersją cgi-fgci)"; $a->strings["Found PHP version: "] = "Znaleziono wersje PHP:"; $a->strings["PHP cli binary"] = "PHP cli binarny"; $a->strings["The command line version of PHP on your system does not have \"register_argc_argv\" enabled."] = "Wersja linii poleceń PHP w twoim systemie nie ma aktywowanego \"register_argc_argv\"."; @@ -1413,17 +1413,17 @@ $a->strings[".htconfig.php is writable"] = ".htconfig.php jest zapisywalny"; $a->strings["Friendica uses the Smarty3 template engine to render its web views. Smarty3 compiles templates to PHP to speed up rendering."] = "Friendica używa silnika szablonów Smarty3 do renderowania swoich widoków. Smarty3 kompiluje szablony do PHP, aby przyspieszyć renderowanie."; $a->strings["In order to store these compiled templates, the web server needs to have write access to the directory view/smarty3/ under the Friendica top level folder."] = "Aby przechowywać te skompilowane szablony, serwer WWW musi mieć dostęp do zapisu do katalogu view/smarty3/ w folderze najwyższego poziomu Friendica."; $a->strings["Please ensure that the user that your web server runs as (e.g. www-data) has write access to this folder."] = "Upewnij się, że użytkownik, na którym działa serwer WWW (np. www-data), ma prawo do zapisu do tego folderu."; -$a->strings["Note: as a security measure, you should give the web server write access to view/smarty3/ only--not the template files (.tpl) that it contains."] = ""; +$a->strings["Note: as a security measure, you should give the web server write access to view/smarty3/ only--not the template files (.tpl) that it contains."] = "Uwaga: jako środek bezpieczeństwa, powinieneś dać serwerowi dostęp do zapisu view/smarty3/ jedynie - nie do plików szablonów (.tpl), które zawiera."; $a->strings["view/smarty3 is writable"] = "view/smarty3 jest zapisywalny"; -$a->strings["Url rewrite in .htaccess is not working. Check your server configuration."] = ""; +$a->strings["Url rewrite in .htaccess is not working. Check your server configuration."] = "Nie działa URL w .htaccess popraw. Sprawdź konfigurację serwera."; $a->strings["Url rewrite is working"] = ""; $a->strings["ImageMagick PHP extension is not installed"] = "Rozszerzenie PHP ImageMagick nie jest zainstalowane"; $a->strings["ImageMagick PHP extension is installed"] = "Rozszerzenie PHP ImageMagick jest zainstalowane"; $a->strings["ImageMagick supports GIF"] = "ImageMagick obsługuje GIF"; $a->strings["The database configuration file \".htconfig.php\" could not be written. Please use the enclosed text to create a configuration file in your web server root."] = "Konfiguracja bazy danych pliku \".htconfig.php\" nie mogła zostać zapisana. Proszę użyć załączonego tekstu, aby utworzyć folder konfiguracyjny w sieci serwera."; $a->strings["

    What next

    "] = "

    Co dalej

    "; -$a->strings["IMPORTANT: You will need to [manually] setup a scheduled task for the worker."] = ""; -$a->strings["Go to your new Friendica node registration page and register as new user. Remember to use the same email you have entered as administrator email. This will allow you to enter the site admin panel."] = ""; +$a->strings["IMPORTANT: You will need to [manually] setup a scheduled task for the worker."] = "WAŻNE: Będziesz musiał [ręcznie] ustawić zaplanowane zadanie dla pracownika."; +$a->strings["Go to your new Friendica node registration page and register as new user. Remember to use the same email you have entered as administrator email. This will allow you to enter the site admin panel."] = "Przejdź do strony rejestracji nowego węzła Friendica i zarejestruj się jako nowy użytkownik. Pamiętaj, aby użyć adresu e-mail wprowadzonego jako e-mail administratora. To pozwoli Ci wejść do panelu administratora witryny."; $a->strings["Unable to locate original post."] = "Nie można zlokalizować oryginalnej wiadomości."; $a->strings["Empty post discarded."] = "Pusty wpis wyrzucony."; $a->strings["This message was sent to you by %s, a member of the Friendica social network."] = "Wiadomość została wysłana do ciebie od %s , członka portalu Friendica"; @@ -1431,10 +1431,10 @@ $a->strings["You may visit them online at %s"] = "Możesz ich odwiedzić online $a->strings["Please contact the sender by replying to this post if you do not wish to receive these messages."] = "Skontaktuj się z nadawcą odpowiadając na ten post jeśli nie chcesz otrzymywać tych wiadomości."; $a->strings["%s posted an update."] = "%s zaktualizował wpis."; $a->strings["Post successful."] = "Post dodany pomyślnie"; -$a->strings["Subscribing to OStatus contacts"] = ""; -$a->strings["No contact provided."] = ""; -$a->strings["Couldn't fetch information for contact."] = ""; -$a->strings["Couldn't fetch friends for contact."] = ""; +$a->strings["Subscribing to OStatus contacts"] = "Subskrybowanie kontaktów OStatus"; +$a->strings["No contact provided."] = "Brak kontaktu."; +$a->strings["Couldn't fetch information for contact."] = "Nie można pobrać informacji o kontakcie."; +$a->strings["Couldn't fetch friends for contact."] = "Nie można pobrać znajomych do kontaktu."; $a->strings["success"] = "powodzenie"; $a->strings["failed"] = "nie udało się"; $a->strings["ignored"] = "Ignoruj"; @@ -1472,7 +1472,7 @@ $a->strings[" and "] = " i "; $a->strings["public profile"] = "profil publiczny"; $a->strings["%1\$s changed %2\$s to “%3\$s”"] = ""; $a->strings[" - Visit %1\$s's %2\$s"] = " - Odwiedźa %1\$s's %2\$s"; -$a->strings["%1\$s has an updated %2\$s, changing %3\$s."] = ""; +$a->strings["%1\$s has an updated %2\$s, changing %3\$s."] = "%1\$sma zaktualizowany %2\$s, zmiana%3\$s."; $a->strings["Hide contacts and friends:"] = "Ukryj kontakty i znajomych:"; $a->strings["Hide your contact/friend list from viewers of this profile?"] = "Czy chcesz ukryć listę kontaktów dla przeglądających to konto?"; $a->strings["Show more profile fields:"] = "Pokaż więcej pól profilu:"; @@ -1509,8 +1509,8 @@ $a->strings["Who: (if applicable)"] = "Kto: (jeśli dotyczy)"; $a->strings["Examples: cathy123, Cathy Williams, cathy@example.com"] = "Przykłady : cathy123, Cathy Williams, cathy@example.com"; $a->strings["Since [date]:"] = "Od [data]:"; $a->strings["Tell us about yourself..."] = "Napisz o sobie..."; -$a->strings["XMPP (Jabber) address:"] = ""; -$a->strings["The XMPP address will be propagated to your contacts so that they can follow you."] = ""; +$a->strings["XMPP (Jabber) address:"] = "Adres XMPP (Jabber):"; +$a->strings["The XMPP address will be propagated to your contacts so that they can follow you."] = "Adres XMPP będzie propagowany do Twoich kontaktów, aby mogli Cię śledzić."; $a->strings["Homepage URL:"] = "Strona główna URL:"; $a->strings["Hometown:"] = "Miasto rodzinne:"; $a->strings["Political Views:"] = "Poglądy polityczne:"; @@ -1537,7 +1537,7 @@ $a->strings["Change profile photo"] = "Zmień zdjęcie profilowe"; $a->strings["Create New Profile"] = "Stwórz nowy profil"; $a->strings["Display"] = "Pokaz"; $a->strings["Social Networks"] = "Portale społecznościowe"; -$a->strings["Delegations"] = ""; +$a->strings["Delegations"] = "Delegowanie"; $a->strings["Connected apps"] = "Powiązane aplikacje"; $a->strings["Remove account"] = "Usuń konto"; $a->strings["Missing some important data!"] = "Brakuje ważnych danych!"; @@ -1557,7 +1557,7 @@ $a->strings["Wrong Password"] = "Złe hasło"; $a->strings["Invalid email."] = "Niepoprawny e-mail."; $a->strings["Cannot change to that email."] = "Nie można zmienić tego e-maila."; $a->strings["Private forum has no privacy permissions. Using default privacy group."] = "Prywatne forum nie ma uprawnień do prywatności. Użyj domyślnej grupy prywatnej."; -$a->strings["Private forum has no privacy permissions and no default privacy group."] = ""; +$a->strings["Private forum has no privacy permissions and no default privacy group."] = "Prywatne forum nie ma uprawnień do prywatności ani domyślnej grupy prywatności."; $a->strings["Settings updated."] = "Zaktualizowano ustawienia."; $a->strings["Add application"] = "Dodaj aplikacje"; $a->strings["Consumer Key"] = "Klucz klienta"; @@ -1576,11 +1576,11 @@ $a->strings["Additional Features"] = "Dodatkowe funkcje"; $a->strings["Diaspora"] = "Diaspora"; $a->strings["enabled"] = "włączony"; $a->strings["disabled"] = "wyłączony"; -$a->strings["Built-in support for %s connectivity is %s"] = ""; +$a->strings["Built-in support for %s connectivity is %s"] = "Wbudowane wsparcie dla %s łączność jest %s"; $a->strings["GNU Social (OStatus)"] = ""; $a->strings["Email access is disabled on this site."] = "Dostęp do e-maila nie jest w pełni sprawny na tej stronie"; -$a->strings["General Social Media Settings"] = ""; -$a->strings["Disable intelligent shortening"] = ""; +$a->strings["General Social Media Settings"] = "Ogólne ustawienia mediów społecznościowych"; +$a->strings["Disable intelligent shortening"] = "Wyłącz inteligentne skracanie"; $a->strings["Normally the system tries to find the best link to add to shortened posts. If this option is enabled then every shortened post will always point to the original friendica post."] = "Zwykle system próbuje znaleźć najlepszy link do dodania do skróconych postów. Jeśli ta opcja jest włączona, każdy skrócony wpis zawsze wskazuje oryginalny post znajomej osoby."; $a->strings["Automatically follow any GNU Social (OStatus) followers/mentioners"] = "Automatycznie podążaj za wszystkimi obserwatorami/rzecznikami GNU Społeczności (OStatus)"; $a->strings["If you receive a message from an unknown OStatus user, this option decides what to do. If it is checked, a new contact will be created for every unknown user."] = "Jeśli otrzymasz wiadomość od nieznanego użytkownika OStatus, ta opcja decyduje, co zrobić. Jeśli zostanie zaznaczone, dla każdego nieznanego użytkownika zostanie utworzony nowy kontakt."; @@ -1608,11 +1608,11 @@ $a->strings["%s - (Experimental)"] = "%s- (Eksperymentalne)"; $a->strings["Display Settings"] = "Wyświetl ustawienia"; $a->strings["Display Theme:"] = "Wyświetl motyw:"; $a->strings["Mobile Theme:"] = "Mobilny motyw:"; -$a->strings["Suppress warning of insecure networks"] = ""; -$a->strings["Should the system suppress the warning that the current group contains members of networks that can't receive non public postings."] = ""; +$a->strings["Suppress warning of insecure networks"] = "Ukryj ostrzeżenie przed niebezpiecznymi sieciami"; +$a->strings["Should the system suppress the warning that the current group contains members of networks that can't receive non public postings."] = "System powinien pominąć ostrzeżenie, że bieżąca grupa zawiera członków sieci, którzy nie mogą otrzymywać komentarzy niepublicznych"; $a->strings["Update browser every xx seconds"] = "Odświeżaj stronę co xx sekund"; $a->strings["Minimum of 10 seconds. Enter -1 to disable it."] = "Minimum 10 sekund. Wprowadź -1, aby go wyłączyć."; -$a->strings["Number of items to display per page:"] = ""; +$a->strings["Number of items to display per page:"] = "Liczba elementów do wyświetlenia na stronie:"; $a->strings["Maximum of 100 items"] = "Maksymalnie 100 elementów"; $a->strings["Number of items to display per page when viewed from mobile device:"] = "Liczba elementów do wyświetlenia na stronie podczas przeglądania z urządzenia mobilnego:"; $a->strings["Don't show emoticons"] = "Nie pokazuj emotikonek"; @@ -1621,11 +1621,11 @@ $a->strings["Beginning of week:"] = "Początek tygodnia:"; $a->strings["Don't show notices"] = "Nie pokazuj powiadomień"; $a->strings["Infinite scroll"] = "Nieskończone przewijanie"; $a->strings["Automatic updates only at the top of the network page"] = "Automatyczne aktualizacje tylko u góry strony sieci"; -$a->strings["When disabled, the network page is updated all the time, which could be confusing while reading."] = ""; -$a->strings["Bandwith Saver Mode"] = ""; -$a->strings["When enabled, embedded content is not displayed on automatic updates, they only show on page reload."] = ""; +$a->strings["When disabled, the network page is updated all the time, which could be confusing while reading."] = "Po wyłączeniu strona sieciowa jest cały czas aktualizowana, co może być mylące podczas czytania."; +$a->strings["Bandwith Saver Mode"] = "Tryb oszczędzania przepustowości"; +$a->strings["When enabled, embedded content is not displayed on automatic updates, they only show on page reload."] = "Po włączeniu wbudowana zawartość nie jest wyświetlana w automatycznych aktualizacjach, wyświetlają się tylko przy przeładowaniu strony."; $a->strings["Smart Threading"] = "Inteligentne gwintowanie"; -$a->strings["When enabled, suppress extraneous thread indentation while keeping it where it matters. Only works if threading is available and enabled."] = ""; +$a->strings["When enabled, suppress extraneous thread indentation while keeping it where it matters. Only works if threading is available and enabled."] = "Włączenie tej opcji powoduje pomijanie wcięcia nitek zewnętrznych, zachowując je w dowolnym miejscu. Działa tylko wtedy, gdy wątki są dostępne i włączone."; $a->strings["General Theme Settings"] = "Ogólne ustawienia motywu"; $a->strings["Custom Theme Settings"] = "Niestandardowe ustawienia motywów"; $a->strings["Content Settings"] = "Ustawienia zawartości"; @@ -1633,18 +1633,18 @@ $a->strings["Theme settings"] = "Ustawienia motywu"; $a->strings["Unable to find your profile. Please contact your admin."] = "Nie można znaleźć Twojego profilu. Skontaktuj się z administratorem."; $a->strings["Account Types"] = "Rodzaje kont"; $a->strings["Personal Page Subtypes"] = "Podtypy osobistych stron"; -$a->strings["Community Forum Subtypes"] = ""; +$a->strings["Community Forum Subtypes"] = "Podtypy społeczności forum"; $a->strings["Personal Page"] = "Strona osobista"; $a->strings["Account for a personal profile."] = "Konto dla profilu osobistego."; $a->strings["Organisation Page"] = "Strona Organizacji"; -$a->strings["Account for an organisation that automatically approves contact requests as \"Followers\"."] = ""; +$a->strings["Account for an organisation that automatically approves contact requests as \"Followers\"."] = "Konto dla organizacji, która automatycznie zatwierdza prośby o kontakt jako \"Obserwatorzy\"."; $a->strings["News Page"] = "Strona Wiadomości"; -$a->strings["Account for a news reflector that automatically approves contact requests as \"Followers\"."] = ""; -$a->strings["Community Forum"] = ""; -$a->strings["Account for community discussions."] = ""; +$a->strings["Account for a news reflector that automatically approves contact requests as \"Followers\"."] = "Konto dla reflektora wiadomości, który automatycznie zatwierdza prośby o kontakt jako \"Obserwatorzy\"."; +$a->strings["Community Forum"] = "Forum społecznościowe"; +$a->strings["Account for community discussions."] = "Konto do dyskusji w społeczności."; $a->strings["Normal Account Page"] = "Normalna strona konta"; $a->strings["Account for a regular personal profile that requires manual approval of \"Friends\" and \"Followers\"."] = "Konto dla zwykłego profilu osobistego, który wymaga ręcznej zgody \"Przyjaciół\" i \"Obserwatorów\"."; -$a->strings["Soapbox Page"] = ""; +$a->strings["Soapbox Page"] = "Strona Soapbox"; $a->strings["Account for a public profile that automatically approves contact requests as \"Followers\"."] = "Konto dla profilu publicznego, który automatycznie zatwierdza prośby o kontakt jako \"Obserwatorzy\"."; $a->strings["Public Forum"] = "Forum publiczne"; $a->strings["Automatically approves all contact requests."] = "Automatycznie zatwierdza wszystkie prośby o kontakt."; @@ -1655,7 +1655,7 @@ $a->strings["Requires manual approval of contact requests."] = "Wymaga ręcznego $a->strings["OpenID:"] = "OpenID:"; $a->strings["(Optional) Allow this OpenID to login to this account."] = "(Opcjonalnie) Pozwól temu OpenID zalogować się na to konto."; $a->strings["Publish your default profile in your local site directory?"] = "Opublikować swój domyślny profil w swoim lokalnym katalogu stron?"; -$a->strings["Your profile will be published in the global friendica directories (e.g. %s). Your profile will be visible in public."] = ""; +$a->strings["Your profile will be published in the global friendica directories (e.g. %s). Your profile will be visible in public."] = "Twój profil zostanie opublikowany w globalnych katalogach friendica (np.%s). Twój profil będzie widoczny publicznie."; $a->strings["Publish your default profile in the global social directory?"] = "Opublikować twój niewypełniony profil w globalnym, społecznym katalogu?"; $a->strings["Your profile will be published in this node's local directory. Your profile details may be publicly visible depending on the system settings."] = "Twój profil zostanie opublikowany w lokalnym katalogu tego węzła. Dane Twojego profilu mogą być publicznie widoczne w zależności od ustawień systemu."; $a->strings["Hide your contact/friend list from viewers of your default profile?"] = "Ukryć listę znajomych przed odwiedzającymi Twój profil?"; @@ -1671,7 +1671,7 @@ $a->strings["If you like, Friendica may suggest new members to add you as a cont $a->strings["Permit unknown people to send you private mail?"] = "Zezwolić nieznanym osobom na wysyłanie prywatnych wiadomości?"; $a->strings["Friendica network users may send you private messages even if they are not in your contact list."] = "Użytkownicy sieci w serwisie Friendica mogą wysyłać prywatne wiadomości, nawet jeśli nie znajdują się one na liście kontaktów."; $a->strings["Profile is not published."] = "Profil nie jest opublikowany"; -$a->strings["Your Identity Address is '%s' or '%s'."] = ""; +$a->strings["Your Identity Address is '%s' or '%s'."] = "Twój adres tożsamości to '%s' lub '%s'."; $a->strings["Automatically expire posts after this many days:"] = "Automatycznie wygasaj posty po tych wielu dniach:"; $a->strings["If empty, posts will not expire. Expired posts will be deleted"] = "Pole puste, wiadomość nie wygaśnie. Niezapisane wpisy zostaną usunięte."; $a->strings["Advanced expiration settings"] = "Zaawansowane ustawienia wygasania"; @@ -1680,7 +1680,7 @@ $a->strings["Expire posts:"] = "Wygasające posty:"; $a->strings["Expire personal notes:"] = "Wygasające notatki osobiste:"; $a->strings["Expire starred posts:"] = "Wygasaj posty oznaczone gwiazdką:"; $a->strings["Expire photos:"] = "Wygasanie zdjęć:"; -$a->strings["Only expire posts by others:"] = ""; +$a->strings["Only expire posts by others:"] = "Tylko wygasaj posty innych osób:"; $a->strings["Account Settings"] = "Ustawienia konta"; $a->strings["Password Settings"] = "Ustawienia hasła"; $a->strings["Leave password fields blank unless changing"] = "Pozostaw pola hasła puste, chyba że chcesz je zmienić."; @@ -1707,8 +1707,8 @@ $a->strings["Maximum private messages per day from unknown people:"] = "Maksymal $a->strings["Notification Settings"] = "Ustawienia powiadomień"; $a->strings["By default post a status message when:"] = "Domyślnie publikuj komunikat o stanie, gdy:"; $a->strings["accepting a friend request"] = "przyjmowanie prośby o dodanie do znajomych"; -$a->strings["joining a forum/community"] = ""; -$a->strings["making an interesting profile change"] = ""; +$a->strings["joining a forum/community"] = "dołączanie do forum/społeczności"; +$a->strings["making an interesting profile change"] = "dokonaj interesującej zmiany profilu"; $a->strings["Send a notification email when:"] = "Wyślij powiadmonienia na email, kiedy:"; $a->strings["You receive an introduction"] = "Otrzymałeś zaproszenie"; $a->strings["Your introductions are confirmed"] = "Dane zatwierdzone"; @@ -1719,20 +1719,20 @@ $a->strings["You receive a friend suggestion"] = "Otrzymane propozycje znajomych $a->strings["You are tagged in a post"] = "Jesteś oznaczony tagiem w poście"; $a->strings["You are poked/prodded/etc. in a post"] = ""; $a->strings["Activate desktop notifications"] = "Aktywuj powiadomienia na pulpicie"; -$a->strings["Show desktop popup on new notifications"] = ""; -$a->strings["Text-only notification emails"] = ""; -$a->strings["Send text only notification emails, without the html part"] = ""; +$a->strings["Show desktop popup on new notifications"] = "Pokaż wyskakujące okienko dla nowych powiadomień"; +$a->strings["Text-only notification emails"] = "E-maile z powiadomieniami tekstowymi"; +$a->strings["Send text only notification emails, without the html part"] = "Wysyłaj tylko e-maile z powiadomieniami tekstowymi, bez części html"; $a->strings["Show detailled notifications"] = "Pokaż szczegółowe powiadomienia"; -$a->strings["Per default, notifications are condensed to a single notification per item. When enabled every notification is displayed."] = ""; -$a->strings["Advanced Account/Page Type Settings"] = ""; -$a->strings["Change the behaviour of this account for special situations"] = ""; +$a->strings["Per default, notifications are condensed to a single notification per item. When enabled every notification is displayed."] = "Domyślne powiadomienia są skondensowane z jednym powiadomieniem dla każdego przedmiotu. Po włączeniu wyświetlane jest każde powiadomienie."; +$a->strings["Advanced Account/Page Type Settings"] = "Zaawansowane ustawienia konta/rodzaju strony"; +$a->strings["Change the behaviour of this account for special situations"] = "Zmień zachowanie tego konta w sytuacjach specjalnych"; $a->strings["Relocate"] = "Przeniesienie"; $a->strings["If you have moved this profile from another server, and some of your contacts don't receive your updates, try pushing this button."] = "Jeśli ten profil został przeniesiony z innego serwera, a niektóre z Twoich kontaktów nie otrzymają aktualizacji, spróbuj nacisnąć ten przycisk."; -$a->strings["Resend relocate message to contacts"] = ""; -$a->strings["Contact wasn't found or can't be unfollowed."] = ""; -$a->strings["Contact unfollowed"] = ""; -$a->strings["You aren't a friend of this contact."] = ""; -$a->strings["Unfollowing is currently not supported by your network."] = ""; +$a->strings["Resend relocate message to contacts"] = "Wyślij ponownie przenieść wiadomości do kontaktów"; +$a->strings["Contact wasn't found or can't be unfollowed."] = "Kontakt nie został znaleziony lub nie można go pominąć."; +$a->strings["Contact unfollowed"] = "Skontaktuj się z obserwowanym"; +$a->strings["You aren't a friend of this contact."] = "Nie jesteś przyjacielem tego kontaktu."; +$a->strings["Unfollowing is currently not supported by your network."] = "Brak obserwowania nie jest obecnie obsługiwany przez twoją sieć."; $a->strings["default"] = "standardowe"; $a->strings["greenzero"] = ""; $a->strings["purplezero"] = ""; @@ -1741,7 +1741,7 @@ $a->strings["darkzero"] = ""; $a->strings["comix"] = ""; $a->strings["slackr"] = ""; $a->strings["Variations"] = ""; -$a->strings["Repeat the image"] = ""; +$a->strings["Repeat the image"] = "Powtórz obraz"; $a->strings["Will repeat your image to fill the background."] = "Powtarza twój obraz, aby wypełnić tło."; $a->strings["Stretch"] = ""; $a->strings["Will stretch to width/height of the image."] = "Rozciągnie się do szerokości/wysokości obrazu."; @@ -1789,7 +1789,7 @@ $a->strings["show"] = "pokaż"; $a->strings["Set style"] = "Ustaw styl"; $a->strings["Community Pages"] = "Strony społeczności"; $a->strings["Community Profiles"] = "Profile społeczności"; -$a->strings["Help or @NewHere ?"] = ""; +$a->strings["Help or @NewHere ?"] = "Pomoc lub @NewHere?"; $a->strings["Connect Services"] = "Połączone serwisy"; $a->strings["Find Friends"] = "Znajdź znajomych"; $a->strings["Last users"] = "Ostatni użytkownicy"; @@ -1812,7 +1812,7 @@ $a->strings["%d contact not imported"] = [ $a->strings["Done. You can now login with your username and password"] = "Gotowe. Możesz teraz zalogować się, podając swoją nazwę użytkownika i hasło."; $a->strings["Post to Email"] = "Prześlij e-mailem"; $a->strings["Hide your profile details from unknown viewers?"] = "Ukryć szczegóły twojego profilu przed nieznajomymi?"; -$a->strings["Connectors disabled, since \"%s\" is enabled."] = ""; +$a->strings["Connectors disabled, since \"%s\" is enabled."] = "Wtyczki są wyłączone, ponieważ \"%s\" jest włączone."; $a->strings["Visible to everybody"] = "Widoczny dla wszystkich"; $a->strings["Close"] = "Zamknij"; $a->strings["System"] = "System"; @@ -1822,8 +1822,8 @@ $a->strings["%s commented on %s's post"] = "%s skomentował wpis %s"; $a->strings["%s created a new post"] = "%s dodał nowy wpis"; $a->strings["%s liked %s's post"] = "%s polubił wpis %s"; $a->strings["%s disliked %s's post"] = "%s przestał lubić post %s"; -$a->strings["%s is attending %s's event"] = ""; -$a->strings["%s is not attending %s's event"] = ""; +$a->strings["%s is attending %s's event"] = "%suczestniczy %sw wydarzeniu "; +$a->strings["%s is not attending %s's event"] = "%snie uczestniczy %s w wydarzeniu "; $a->strings["%s may attend %s's event"] = "%smoże uczestniczyć %s w wydarzeniu"; $a->strings["%s is now friends with %s"] = "%s jest teraz znajomym %s"; $a->strings["Friend Suggestion"] = "Propozycja znajomych"; @@ -1866,12 +1866,12 @@ $a->strings["LinkedIn"] = "LinkedIn"; $a->strings["XMPP/IM"] = "XMPP/IM"; $a->strings["MySpace"] = "MySpace"; $a->strings["Google+"] = "Google+"; -$a->strings["pump.io"] = ""; +$a->strings["pump.io"] = "pump.io"; $a->strings["Twitter"] = "Twitter"; -$a->strings["Diaspora Connector"] = ""; +$a->strings["Diaspora Connector"] = "Wtyczka Diaspora"; $a->strings["GNU Social Connector"] = "GNU Łącze Społecznościowe"; $a->strings["pnut"] = ""; -$a->strings["App.net"] = ""; +$a->strings["App.net"] = "App.net"; $a->strings["Male"] = "Mężczyzna"; $a->strings["Female"] = "Kobieta"; $a->strings["Currently Male"] = "Aktualnie Mężczyzna"; @@ -1965,11 +1965,11 @@ $a->strings["Ability to create multiple profiles"] = "Możliwość tworzenia wie $a->strings["Photo Location"] = "Lokalizacja zdjęcia"; $a->strings["Photo metadata is normally stripped. This extracts the location (if present) prior to stripping metadata and links it to a map."] = "Metadane zdjęć są zwykle usuwane. Wyodrębnia to położenie (jeśli jest obecne) przed usunięciem metadanych i łączy je z mapą."; $a->strings["Export Public Calendar"] = "Eksportuj kalendarz publiczny"; -$a->strings["Ability for visitors to download the public calendar"] = ""; +$a->strings["Ability for visitors to download the public calendar"] = "Możliwość pobierania kalendarza publicznego przez odwiedzających"; $a->strings["Post Composition Features"] = ""; $a->strings["Post Preview"] = "Podgląd posta"; $a->strings["Allow previewing posts and comments before publishing them"] = "Zezwalaj na podgląd postów i komentarzy przed ich opublikowaniem"; -$a->strings["Auto-mention Forums"] = ""; +$a->strings["Auto-mention Forums"] = "Automatyczne wymienianie forów"; $a->strings["Add/remove mention when a forum page is selected/deselected in ACL window."] = "Dodaj/usuń wzmiankę, gdy strona forum zostanie wybrana/cofnięta w oknie ACL."; $a->strings["Network Sidebar Widgets"] = "Widgety paska bocznego sieci"; $a->strings["Search by Date"] = "Szukanie wg daty"; @@ -1986,7 +1986,7 @@ $a->strings["Network Personal Tab"] = "Sieć Osobista zakładka"; $a->strings["Enable tab to display only Network posts that you've interacted on"] = "Włącz kartę, by wyświetlać tylko posty w sieci, z którymi współpracujesz"; $a->strings["Network New Tab"] = "Sieć Nowa karta"; $a->strings["Enable tab to display only new Network posts (from the last 12 hours)"] = "Włącz kartę, aby wyświetlić tylko nowe posty sieciowe (z ostatnich 12 godzin)"; -$a->strings["Network Shared Links Tab"] = ""; +$a->strings["Network Shared Links Tab"] = "Karta Połączone karty sieciowe"; $a->strings["Enable tab to display only Network posts with links in them"] = "Włącz zakładkę, aby wyświetlić tylko posty sieciowe z łączami do nich"; $a->strings["Post/Comment Tools"] = "Narzędzia post/komentarz"; $a->strings["Multiple Deletion"] = "Wielokrotne usunięcie"; @@ -2000,7 +2000,7 @@ $a->strings["Add categories to your posts"] = "Dodaj kategorie do twoich postów $a->strings["Saved Folders"] = "Zapisane foldery"; $a->strings["Ability to file posts under folders"] = "Możliwość przesyłania postów do folderów"; $a->strings["Dislike Posts"] = "Nie lubię Postów"; -$a->strings["Ability to dislike posts/comments"] = ""; +$a->strings["Ability to dislike posts/comments"] = "Możliwa niechęć do postów/komentarzy"; $a->strings["Star Posts"] = "Oznacz posty gwiazdką"; $a->strings["Ability to mark special posts with a star indicator"] = "Oznacz specjalne posty gwiazdką"; $a->strings["Mute Post Notifications"] = "Ignoruj ​​powiadomienia pocztą"; @@ -2041,7 +2041,7 @@ $a->strings["%d contact in common"] = [ 3 => "", ]; $a->strings["There are no tables on MyISAM."] = "W MyISAM nie ma tabel."; -$a->strings["\n\t\t\t\tThe friendica developers released update %s recently,\n\t\t\t\tbut when I tried to install it, something went terribly wrong.\n\t\t\t\tThis needs to be fixed soon and I can't do it alone. Please contact a\n\t\t\t\tfriendica developer if you can not help me on your own. My database might be invalid."] = ""; +$a->strings["\n\t\t\t\tThe friendica developers released update %s recently,\n\t\t\t\tbut when I tried to install it, something went terribly wrong.\n\t\t\t\tThis needs to be fixed soon and I can't do it alone. Please contact a\n\t\t\t\tfriendica developer if you can not help me on your own. My database might be invalid."] = "\n\t\t\t\tDeweloperzy friendica wydali niedawno aktualizację %s,\n\t\t\t\tale podczas próby instalacji, coś poszło nie tak.\n\t\t\t\tZostanie to naprawione wkrótce i nie mogę tego zrobić sam. Proszę skontaktować się z \n\t\t\t\tprogramistami friendica, jeśli nie możesz mi pomóc na własną rękę. Moja baza danych może być nieprawidłowa."; $a->strings["The error message is\n[pre]%s[/pre]"] = "Komunikat o błędzie jest \n[pre]%s[/ pre]"; $a->strings["\nError %d occurred during database update:\n%s\n"] = "\nWystąpił błąd %d podczas aktualizacji bazy danych:\n%s\n"; $a->strings["Errors encountered performing database changes: "] = "Napotkane błędy powodujące zmiany w bazie danych:"; From 348ee3625d5beeb07250d6082d22400754afb70b Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Mon, 2 Apr 2018 08:42:11 +0200 Subject: [PATCH 202/227] BBCode support in register_text --- mod/admin.php | 4 ++-- mod/register.php | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/mod/admin.php b/mod/admin.php index 4ae5eb70b..c76cb49e9 100644 --- a/mod/admin.php +++ b/mod/admin.php @@ -920,7 +920,7 @@ function admin_page_site_post(App $a) $daily_registrations = ((x($_POST,'max_daily_registrations')) ? intval(trim($_POST['max_daily_registrations'])) :0); $abandon_days = ((x($_POST,'abandon_days')) ? intval(trim($_POST['abandon_days'])) : 0); - $register_text = ((x($_POST,'register_text')) ? notags(trim($_POST['register_text'])) : ''); + $register_text = ((x($_POST,'register_text')) ? strip_tags(trim($_POST['register_text'])) : ''); $allowed_sites = ((x($_POST,'allowed_sites')) ? notags(trim($_POST['allowed_sites'])) : ''); $allowed_email = ((x($_POST,'allowed_email')) ? notags(trim($_POST['allowed_email'])) : ''); @@ -1325,7 +1325,7 @@ function admin_page_site(App $a) '$register_policy' => ['register_policy', L10n::t("Register policy"), $a->config['register_policy'], "", $register_choices], '$daily_registrations' => ['max_daily_registrations', L10n::t("Maximum Daily Registrations"), Config::get('system', 'max_daily_registrations'), L10n::t("If registration is permitted above, this sets the maximum number of new user registrations to accept per day. If register is set to closed, this setting has no effect.")], - '$register_text' => ['register_text', L10n::t("Register text"), $a->config['register_text'], L10n::t("Will be displayed prominently on the registration page.")], + '$register_text' => ['register_text', L10n::t("Register text"), $a->config['register_text'], L10n::t("Will be displayed prominently on the registration page. You can use BBCode here.")], '$abandon_days' => ['abandon_days', L10n::t('Accounts abandoned after x days'), Config::get('system','account_abandon_days'), L10n::t('Will not waste system resources polling external sites for abandonded accounts. Enter 0 for no time limit.')], '$allowed_sites' => ['allowed_sites', L10n::t("Allowed friend domains"), Config::get('system','allowed_sites'), L10n::t("Comma separated list of domains which are allowed to establish friendships with this site. Wildcards are accepted. Empty to allow any domains")], '$allowed_email' => ['allowed_email', L10n::t("Allowed email domains"), Config::get('system','allowed_email'), L10n::t("Comma separated list of domains which are allowed in email addresses for registrations to this site. Wildcards are accepted. Empty to allow any domains")], diff --git a/mod/register.php b/mod/register.php index c97433c04..512364dcf 100644 --- a/mod/register.php +++ b/mod/register.php @@ -262,7 +262,7 @@ function register_content(App $a) '$invite_id' => $invite_id, '$realpeople' => $realpeople, '$regtitle' => L10n::t('Registration'), - '$registertext' => x($a->config, 'register_text') ? BBCode::convert($a->config['register_text']) : "", + '$registertext' => BBCode::convert(Config::get('config', 'register_text', '')), '$fillwith' => $fillwith, '$fillext' => $fillext, '$oidlabel' => $oidlabel, From 0594f13c35d53363fc36b31b23867331c1a9c35c Mon Sep 17 00:00:00 2001 From: Michael Date: Mon, 2 Apr 2018 12:53:48 +0000 Subject: [PATCH 203/227] Receiving was tested, sending is implemented and tested as well, currently unused --- mod/dfrn_notify.php | 6 +++--- src/Protocol/DFRN.php | 38 ++++++++++++++++++++++++++++++++++++++ src/Protocol/Diaspora.php | 2 +- 3 files changed, 42 insertions(+), 4 deletions(-) diff --git a/mod/dfrn_notify.php b/mod/dfrn_notify.php index a43c316b0..7eddd4f3d 100644 --- a/mod/dfrn_notify.php +++ b/mod/dfrn_notify.php @@ -32,10 +32,10 @@ function dfrn_notify_post(App $a) { $msg = Diaspora::decodeRaw($user, $postdata); // Check if the user has got this contact - $cid = getIdForURL($msg['author'], $user['uid']); + $cid = Contact::getIdForURL($msg['author'], $user['uid']); if (!$cid) { // Otherwise there should be a public contact - $cid = getIdForURL($msg['author']); + $cid = Contact::getIdForURL($msg['author']); if (!$cid) { logger('Contact not found for address ' . $msg['author']); System::xmlExit(3, 'Contact not found'); @@ -59,7 +59,7 @@ function dfrn_notify_post(App $a) { // Now we should be able to import it $ret = DFRN::import($msg['message'], $importer); - System::xmlExit($ret, 'Processed'); + System::xmlExit($ret, 'Done'); } else { require_once 'mod/salmon.php'; salmon_post($a, $postdata); diff --git a/src/Protocol/DFRN.php b/src/Protocol/DFRN.php index cb23c4bf1..43fe16c31 100644 --- a/src/Protocol/DFRN.php +++ b/src/Protocol/DFRN.php @@ -31,6 +31,7 @@ use Friendica\Util\Crypto; use Friendica\Util\DateTimeFormat; use Friendica\Util\Network; use Friendica\Util\XML; +use Friendica\Protocol\Diaspora; use dba; use DOMDocument; use DOMXPath; @@ -1368,6 +1369,43 @@ class DFRN return intval($res->status); } + /** + * @brief Delivers items to the contacts via the Diaspora transport layer + * + * @param array $owner Owner record + * @param array $contact Contact record of the receiver + * @param array $items Items that will be transmitted + * + * @return int HTTP Deliver status + */ + public static function buildAndTransmit($owner, $contact, $items) + { + $a = get_app(); + + // Currently disabled, at first we will not use the batch delivery + // $public_batch = !$items[0]['private']; + $public_batch = false; + + $msg = DFRN::entries($items, $owner); + + $fcontact = Diaspora::personByHandle($contact['addr']); + if (empty($fcontact)) { + logger("unable to find contact details"); + return; + } + + $envelope = Diaspora::buildMessage($msg, $owner, $contact, $owner['uprvkey'], $fcontact['pubkey'], $public_batch); + + $dest_url = ($public_batch ? $fcontact["batch"] : $contact["notify"]); + + $content_type = ($public_batch ? "application/magic-envelope+xml" : "application/json"); + + $ret = Network::post($dest_url, $envelope, ["Content-Type: ".$content_type]); + + /// @ToDo: Add better treating of return codes + return $a->get_curl_code(); + } + /** * @brief Add new birthday event for this person * diff --git a/src/Protocol/Diaspora.php b/src/Protocol/Diaspora.php index 23bc575dd..4b8ae2110 100644 --- a/src/Protocol/Diaspora.php +++ b/src/Protocol/Diaspora.php @@ -3205,7 +3205,7 @@ class Diaspora * * @return string The message that will be transmitted to other servers */ - private static function buildMessage($msg, $user, $contact, $prvkey, $pubkey, $public = false) + public static function buildMessage($msg, $user, $contact, $prvkey, $pubkey, $public = false) { // The message is put into an envelope with the sender's signature $envelope = self::buildMagicEnvelope($msg, $user); From f89904ed7786d9259f0e87c11db0358a298181ad Mon Sep 17 00:00:00 2001 From: Michael Date: Mon, 2 Apr 2018 13:44:45 +0000 Subject: [PATCH 204/227] Treatment, Treating, whatever :-) --- src/Protocol/DFRN.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Protocol/DFRN.php b/src/Protocol/DFRN.php index 43fe16c31..ea867a84d 100644 --- a/src/Protocol/DFRN.php +++ b/src/Protocol/DFRN.php @@ -1402,7 +1402,7 @@ class DFRN $ret = Network::post($dest_url, $envelope, ["Content-Type: ".$content_type]); - /// @ToDo: Add better treating of return codes + /// @ToDo: Add better treatment of return codes return $a->get_curl_code(); } From 6c20b4507d1d2cb218568c30b3f9a8c4fb26be5a Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Mon, 2 Apr 2018 18:40:30 +0200 Subject: [PATCH 205/227] Added /tos module --- mod/admin.php | 55 +++++++++++++++++++++++++++++++++++- mod/friendica.php | 5 ++++ mod/register.php | 3 ++ mod/tos.php | 42 +++++++++++++++++++++++++++ view/templates/admin/tos.tpl | 12 ++++++++ view/templates/tos.tpl | 10 +++++++ 6 files changed, 126 insertions(+), 1 deletion(-) create mode 100644 mod/tos.php create mode 100644 view/templates/admin/tos.tpl create mode 100644 view/templates/tos.tpl diff --git a/mod/admin.php b/mod/admin.php index c76cb49e9..7dc736ab4 100644 --- a/mod/admin.php +++ b/mod/admin.php @@ -109,6 +109,9 @@ function admin_post(App $a) } $return_path = 'admin/themes/' . $theme; break; + case 'tos': + admin_page_tos_post($a); + break; case 'features': admin_page_features_post($a); break; @@ -181,7 +184,8 @@ function admin_content(App $a) 'users' => ["admin/users/" , L10n::t("Users") , "users"], 'addons' => ["admin/addons/" , L10n::t("Addons") , "addons"], 'themes' => ["admin/themes/" , L10n::t("Themes") , "themes"], - 'features' => ["admin/features/" , L10n::t("Additional features") , "features"] ]], + 'features' => ["admin/features/" , L10n::t("Additional features") , "features"], + 'tos' => ["admin/tos/" , L10n::t("Terms of Service") , "tos"] ]], 'database' => [ L10n::t('Database'), [ 'dbsync' => ["admin/dbsync/" , L10n::t('DB updates') , "dbsync"], 'queue' => ["admin/queue/" , L10n::t('Inspect Queue') , "queue"], ]], @@ -265,6 +269,9 @@ function admin_content(App $a) case 'deleteitem': $o = admin_page_deleteitem($a); break; + case 'tos': + $o = admin_page_tos($a); + break; default: notice(L10n::t("Item not found.")); } @@ -281,6 +288,50 @@ function admin_content(App $a) } } +/** + * @brief Subpage to define the display of a Terms of Usage page. + * + * @param App $a + * @return string + */ +function admin_page_tos(App $a) +{ + $t = get_markup_template('admin/tos.tpl'); + return replace_macros($t, [ + '$title' => L10n::t('Administration'), + '$page' => L10n::t('Terms of Service'), + '$displaytos' => ['displaytos', L10n::t('Display Terms of Service'), Config::get('system', 'tosdisplay'), L10n::t('Enable the Terms of Service page. If this is enabled a link to the terms will be added to the registration form and the general information page.')], + '$displayprivstatement' => ['displayprivstatement', L10n::t('Display Privacy Statement'), Config::get('system','tosprivstatement'), L10n::t('Show some informations regarding the needed information to operate the node according e.g. to EU-GDPR.','https://en.wikipedia.org/wiki/General_Data_Protection_Regulation')], + '$tostext' => ['tostext', L10n::t('The Terms of Usage'), Config::get('system', 'tostext'), L10n::t('Enter the Terms of Service for your node here. You can use BBCode. Headers of sections should be [h2] and below.')], + '$form_security_token' => get_form_security_token("admin_tos"), + '$submit' => L10n::t('Save Settings'), + ]); +} +/** + * @brief Process send data from Admin TOS Page + * + * @param App $a + */ +function admin_page_tos_post(App $a) +{ + check_form_security_token_redirectOnErr('/admin/tos', 'admin_tos'); + + if (!x($_POST, "page_tos")) { + return; + } + + $displaytos = ((x($_POST, 'displaytos')) ? True : False); + $displayprivstatement = ((x($_POST, 'displayprivstatement')) ? True : False); + $tostext = ((x($_POST, 'tostext')) ? strip_tags(trim($_POST['tostext'])) : ''); + + Config::set('system', 'tosdisplay', $displaytos); + Config::set('system', 'tosprivstatement', $displayprivstatement); + Config::set('system', 'tostext', $tostext); + + goaway('admin/tos'); + + return; // NOTREACHED +} /** * @brief Subpage to modify the server wide block list via the admin panel. * @@ -1547,6 +1598,8 @@ function admin_page_users_post(App $a) If you are new and do not know anybody here, they may help you to make some new and interesting friends. + If you ever want to delete your account, you can do so at %1$s/removeme + Thank you and welcome to %4$s.')); $preamble = sprintf($preamble, $user['username'], $a->config['sitename']); diff --git a/mod/friendica.php b/mod/friendica.php index 14363ea4d..43e518359 100644 --- a/mod/friendica.php +++ b/mod/friendica.php @@ -116,6 +116,11 @@ function friendica_content(App $a) } else { $o .= '

    ' . L10n::t('No installed addons/apps') . '

    ' . PHP_EOL; } + + if (Config::get('system', 'tosdisplay')) + { + $o .= '

    '.L10n::t('Read about the Terms of Service of this node.', System::baseurl()).'

    '; + } $blocklist = Config::get('system', 'blocklist'); if (count($blocklist)) { diff --git a/mod/register.php b/mod/register.php index 512364dcf..9de7a0ca3 100644 --- a/mod/register.php +++ b/mod/register.php @@ -284,6 +284,9 @@ function register_content(App $a) '$sitename' => $a->get_hostname(), '$importh' => L10n::t('Import'), '$importt' => L10n::t('Import your profile to this friendica instance'), + '$showtoslink' => Config::get('system', 'tosdisplay'), + '$tostext' => L10n::t('Terms of Service'), + '$baseurl' => System::baseurl(), '$form_security_token' => get_form_security_token("register") ]); return $o; diff --git a/mod/tos.php b/mod/tos.php new file mode 100644 index 000000000..4ce8a8f3f --- /dev/null +++ b/mod/tos.php @@ -0,0 +1,42 @@ + L10n::t('Terms of Service'), + '$tostext' => BBCode::convert(Config::get('system', 'tostext')), + '$displayprivstatement' => Config::get('system', 'tosprivstatement'), + '$privstatementtitle' => L10n::t('Privacy Statement'), + '$privoperate' => L10n::t('At the time of registration, and for providing communications between the user account and their contacts, the user has to provide a display name (pen name), a nickname and a working email address. The names will be accessible on the profile page of the account by any visitor of the page even if other profile details are not displayed. The email address will only be used to send the user notifications about interactions, but wont be visibly displayed. The listing of an account in the nodes user directory or the global user directory is optional and can be controlled in the user settings, it is not necessary for communication.'), + '$privdelete' => L10n::t('At any point in time a logged in user can export their account data from the account settings. If the user wants to delete their account they can do so at %1$s. The deletion of the account will be permanent.', System::baseurl().'/removeme') + ]); + } else { + return; + } + + return $o; + +} diff --git a/view/templates/admin/tos.tpl b/view/templates/admin/tos.tpl new file mode 100644 index 000000000..79465e7f1 --- /dev/null +++ b/view/templates/admin/tos.tpl @@ -0,0 +1,12 @@ +
    +

    {{$title}} - {{$page}}

    +

    {{$intro}}

    +
    + + {{include file="field_checkbox.tpl" field=$displaytos}} + {{include file="field_checkbox.tpl" field=$displayprivstatement}} + {{include file="field_textarea.tpl" field=$tostext}} +
    +
    +
    + diff --git a/view/templates/tos.tpl b/view/templates/tos.tpl new file mode 100644 index 000000000..0f3d3c24b --- /dev/null +++ b/view/templates/tos.tpl @@ -0,0 +1,10 @@ +

    {{$title}}

    + +{{$tostext}} + +{{if $displayprivstatement}} +

    {{$privstatementtitle}}

    +

    {{$privoperate}}

    +

    {{$privdelete}}

    +{{/if}} + From 6cef0fbaeb02c20883262a9058e337d4031f382a Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Mon, 2 Apr 2018 18:40:52 +0200 Subject: [PATCH 206/227] added link to delete the account to the registration mail text --- src/Model/User.php | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/Model/User.php b/src/Model/User.php index 1df7e5ef4..d971d968b 100644 --- a/src/Model/User.php +++ b/src/Model/User.php @@ -614,11 +614,12 @@ class User ')); $body = deindent(L10n::t(' The login details are as follows: - Site Location: %3$s - Login Name: %1$s - Password: %5$s - You may change your password from your account Settings page after logging + Site Location: %1$s + Login Name: %2$s + Password: %3$s + + You may change your password from your account "Settings" page after logging in. Please take a few moments to review the other account settings on that page. @@ -627,7 +628,7 @@ class User ' . "\x28" . 'on the "Profiles" page' . "\x29" . ' so that other people can easily find you. We recommend setting your full name, adding a profile photo, - adding some profile keywords ' . "\x28" . 'very useful in making new friends' . "\x29" . ' - and + adding some profile "keywords" ' . "\x28" . 'very useful in making new friends' . "\x29" . ' - and perhaps what country you live in; if you do not wish to be more specific than that. @@ -635,8 +636,9 @@ class User If you are new and do not know anybody here, they may help you to make some new and interesting friends. + If you ever want to delete your account, you can do so at %1$s/removeme - Thank you and welcome to %2$s.')); + Thank you and welcome to %4$s.')); $preamble = sprintf($preamble, $username, $sitename); $body = sprintf($body, $email, $sitename, $siteurl, $username, $password); From 6f5b6a073a2a07b0cc96529e3f70cc1185ce7151 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Mon, 2 Apr 2018 18:41:16 +0200 Subject: [PATCH 207/227] register template may link to the TOS as well --- view/templates/register.tpl | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/view/templates/register.tpl b/view/templates/register.tpl index 55c086274..eddc55132 100644 --- a/view/templates/register.tpl +++ b/view/templates/register.tpl @@ -64,6 +64,10 @@ {{$publish}} + {{if $showtoslink}} +

    {{$tostext}}

    + {{/if}} +
    From 01a1e1b451095d10b6d867aca7540c76fad94db7 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Mon, 2 Apr 2018 18:50:27 +0200 Subject: [PATCH 208/227] regenerated master messages.po file --- util/messages.po | 6086 +++++++++++++++++++++++----------------------- 1 file changed, 3061 insertions(+), 3025 deletions(-) diff --git a/util/messages.po b/util/messages.po index 0d60cd833..ac457d982 100644 --- a/util/messages.po +++ b/util/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-03-28 08:41+0200\n" +"POT-Creation-Date: 2018-04-02 18:46+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -36,6 +36,11 @@ msgid "" "form has been opened for too long (>3 hours) before submitting it." msgstr "" +#: include/dba.php:57 +#, php-format +msgid "Cannot locate DNS info for database server '%s'" +msgstr "" + #: include/api.php:1199 #, php-format msgid "Daily posting limit of %d post reached. The post was rejected." @@ -133,11 +138,11 @@ msgstr "" msgid "%1$s marked %2$s's %3$s as favorite" msgstr "" -#: include/conversation.php:605 mod/photos.php:1501 mod/profiles.php:354 +#: include/conversation.php:605 mod/photos.php:1501 mod/profiles.php:355 msgid "Likes" msgstr "" -#: include/conversation.php:605 mod/photos.php:1501 mod/profiles.php:358 +#: include/conversation.php:605 mod/photos.php:1501 mod/profiles.php:359 msgid "Dislikes" msgstr "" @@ -160,8 +165,8 @@ msgstr "" msgid "Select" msgstr "" -#: include/conversation.php:745 mod/photos.php:1570 mod/admin.php:1731 -#: mod/contacts.php:830 mod/contacts.php:1035 mod/settings.php:738 +#: include/conversation.php:745 mod/photos.php:1570 mod/contacts.php:830 +#: mod/contacts.php:1035 mod/settings.php:738 mod/admin.php:1798 #: src/Object/Post.php:179 msgid "Delete" msgstr "" @@ -212,7 +217,7 @@ msgstr "" #: include/conversation.php:1061 include/conversation.php:1077 #: mod/allfriends.php:73 mod/suggest.php:82 mod/match.php:89 -#: mod/directory.php:160 mod/dirfind.php:217 src/Model/Contact.php:580 +#: mod/dirfind.php:217 mod/directory.php:159 src/Model/Contact.php:580 #: src/Model/Contact.php:593 src/Model/Contact.php:641 msgid "View Profile" msgstr "" @@ -453,8 +458,8 @@ msgstr "" #: mod/fbrowser.php:134 mod/suggest.php:41 mod/dfrn_request.php:663 #: mod/tagrm.php:19 mod/tagrm.php:99 mod/editpost.php:149 mod/message.php:141 #: mod/photos.php:248 mod/photos.php:324 mod/videos.php:147 -#: mod/contacts.php:475 mod/follow.php:161 mod/settings.php:676 -#: mod/settings.php:702 mod/unfollow.php:117 +#: mod/contacts.php:475 mod/unfollow.php:117 mod/settings.php:676 +#: mod/settings.php:702 mod/follow.php:161 msgid "Cancel" msgstr "" @@ -506,11 +511,6 @@ msgid_plural "Undecided" msgstr[0] "" msgstr[1] "" -#: include/dba.php:57 -#, php-format -msgid "Cannot locate DNS info for database server '%s'" -msgstr "" - #: include/enotify.php:31 msgid "Friendica Notification" msgstr "" @@ -802,9 +802,9 @@ msgstr "" msgid "Please visit %s to approve or reject the request." msgstr "" -#: include/items.php:342 mod/notice.php:22 mod/viewsrc.php:21 mod/admin.php:269 -#: mod/admin.php:1787 mod/admin.php:2035 mod/display.php:72 mod/display.php:252 -#: mod/display.php:354 +#: include/items.php:342 mod/notice.php:22 mod/viewsrc.php:21 +#: mod/display.php:72 mod/display.php:252 mod/display.php:354 mod/admin.php:276 +#: mod/admin.php:1854 mod/admin.php:2102 msgid "Item not found." msgstr "" @@ -813,13 +813,13 @@ msgid "Do you really want to delete this item?" msgstr "" #: include/items.php:384 mod/api.php:110 mod/suggest.php:38 -#: mod/dfrn_request.php:653 mod/register.php:237 mod/message.php:138 -#: mod/contacts.php:472 mod/follow.php:150 mod/profiles.php:635 -#: mod/profiles.php:638 mod/profiles.php:660 mod/settings.php:1103 -#: mod/settings.php:1109 mod/settings.php:1116 mod/settings.php:1120 -#: mod/settings.php:1124 mod/settings.php:1128 mod/settings.php:1132 -#: mod/settings.php:1136 mod/settings.php:1156 mod/settings.php:1157 -#: mod/settings.php:1158 mod/settings.php:1159 mod/settings.php:1160 +#: mod/dfrn_request.php:653 mod/message.php:138 mod/contacts.php:472 +#: mod/settings.php:1103 mod/settings.php:1109 mod/settings.php:1116 +#: mod/settings.php:1120 mod/settings.php:1124 mod/settings.php:1128 +#: mod/settings.php:1132 mod/settings.php:1136 mod/settings.php:1156 +#: mod/settings.php:1157 mod/settings.php:1158 mod/settings.php:1159 +#: mod/settings.php:1160 mod/follow.php:150 mod/profiles.php:636 +#: mod/profiles.php:639 mod/profiles.php:661 mod/register.php:237 msgid "Yes" msgstr "" @@ -827,21 +827,21 @@ msgstr "" #: mod/attach.php:38 mod/common.php:26 mod/crepair.php:98 mod/nogroup.php:28 #: mod/repair_ostatus.php:13 mod/suggest.php:60 mod/uimport.php:28 #: mod/notifications.php:73 mod/dfrn_confirm.php:68 mod/invite.php:20 -#: mod/invite.php:106 mod/manage.php:131 mod/wall_attach.php:74 -#: mod/wall_attach.php:77 mod/poke.php:150 mod/regmod.php:108 -#: mod/viewcontacts.php:57 mod/wall_upload.php:103 mod/wall_upload.php:106 +#: mod/invite.php:106 mod/wall_attach.php:74 mod/wall_attach.php:77 +#: mod/manage.php:131 mod/regmod.php:108 mod/viewcontacts.php:57 #: mod/wallmessage.php:16 mod/wallmessage.php:40 mod/wallmessage.php:79 -#: mod/wallmessage.php:103 mod/register.php:53 mod/editpost.php:18 -#: mod/fsuggest.php:80 mod/group.php:26 mod/message.php:59 mod/message.php:104 +#: mod/wallmessage.php:103 mod/poke.php:150 mod/wall_upload.php:103 +#: mod/wall_upload.php:106 mod/editpost.php:18 mod/fsuggest.php:80 +#: mod/group.php:26 mod/item.php:160 mod/message.php:59 mod/message.php:104 #: mod/network.php:32 mod/notes.php:30 mod/photos.php:174 mod/photos.php:1051 -#: mod/cal.php:304 mod/contacts.php:386 mod/delegate.php:25 mod/delegate.php:43 -#: mod/delegate.php:54 mod/dirfind.php:25 mod/events.php:194 mod/follow.php:17 -#: mod/follow.php:54 mod/follow.php:118 mod/item.php:160 -#: mod/ostatus_subscribe.php:16 mod/profile_photo.php:30 -#: mod/profile_photo.php:176 mod/profile_photo.php:187 -#: mod/profile_photo.php:200 mod/profiles.php:181 mod/profiles.php:605 -#: mod/settings.php:43 mod/settings.php:142 mod/settings.php:665 -#: mod/unfollow.php:15 mod/unfollow.php:57 mod/unfollow.php:90 index.php:416 +#: mod/contacts.php:386 mod/delegate.php:25 mod/delegate.php:43 +#: mod/delegate.php:54 mod/dirfind.php:25 mod/ostatus_subscribe.php:16 +#: mod/unfollow.php:15 mod/unfollow.php:57 mod/unfollow.php:90 mod/cal.php:304 +#: mod/events.php:194 mod/profile_photo.php:30 mod/profile_photo.php:176 +#: mod/profile_photo.php:187 mod/profile_photo.php:200 mod/settings.php:43 +#: mod/settings.php:142 mod/settings.php:665 mod/follow.php:17 +#: mod/follow.php:54 mod/follow.php:118 mod/profiles.php:182 +#: mod/profiles.php:606 mod/register.php:53 index.php:416 msgid "Permission denied." msgstr "" @@ -849,9 +849,9 @@ msgstr "" msgid "Archives" msgstr "" -#: include/items.php:477 view/theme/vier/theme.php:259 -#: src/Content/ForumManager.php:130 src/Content/Widget.php:312 -#: src/Object/Post.php:424 src/App.php:518 +#: include/items.php:477 src/Content/ForumManager.php:130 +#: src/Content/Widget.php:312 src/Object/Post.php:424 src/App.php:512 +#: view/theme/vier/theme.php:259 msgid "show more" msgstr "" @@ -928,13 +928,14 @@ msgid "Tags" msgstr "" #: include/text.php:1027 mod/viewcontacts.php:131 mod/contacts.php:814 -#: mod/contacts.php:875 view/theme/frio/theme.php:270 src/Content/Nav.php:147 -#: src/Content/Nav.php:212 src/Model/Profile.php:957 src/Model/Profile.php:960 +#: mod/contacts.php:875 src/Content/Nav.php:147 src/Content/Nav.php:212 +#: src/Model/Profile.php:957 src/Model/Profile.php:960 +#: view/theme/frio/theme.php:270 msgid "Contacts" msgstr "" -#: include/text.php:1030 view/theme/vier/theme.php:254 -#: src/Content/ForumManager.php:125 src/Content/Nav.php:151 +#: include/text.php:1030 src/Content/ForumManager.php:125 +#: src/Content/Nav.php:151 view/theme/vier/theme.php:254 msgid "Forums" msgstr "" @@ -1200,13 +1201,13 @@ msgid "" "and/or create new posts for you?" msgstr "" -#: mod/api.php:111 mod/dfrn_request.php:653 mod/register.php:238 -#: mod/follow.php:150 mod/profiles.php:635 mod/profiles.php:639 -#: mod/profiles.php:660 mod/settings.php:1103 mod/settings.php:1109 -#: mod/settings.php:1116 mod/settings.php:1120 mod/settings.php:1124 -#: mod/settings.php:1128 mod/settings.php:1132 mod/settings.php:1136 -#: mod/settings.php:1156 mod/settings.php:1157 mod/settings.php:1158 -#: mod/settings.php:1159 mod/settings.php:1160 +#: mod/api.php:111 mod/dfrn_request.php:653 mod/settings.php:1103 +#: mod/settings.php:1109 mod/settings.php:1116 mod/settings.php:1120 +#: mod/settings.php:1124 mod/settings.php:1128 mod/settings.php:1132 +#: mod/settings.php:1136 mod/settings.php:1156 mod/settings.php:1157 +#: mod/settings.php:1158 mod/settings.php:1159 mod/settings.php:1160 +#: mod/follow.php:150 mod/profiles.php:636 mod/profiles.php:640 +#: mod/profiles.php:661 mod/register.php:238 msgid "No" msgstr "" @@ -1299,10 +1300,10 @@ msgstr "" #: mod/message.php:265 mod/message.php:432 mod/photos.php:1080 #: mod/photos.php:1160 mod/photos.php:1445 mod/photos.php:1491 #: mod/photos.php:1530 mod/photos.php:1603 mod/contacts.php:610 -#: mod/events.php:530 mod/install.php:251 mod/install.php:290 -#: mod/profiles.php:671 view/theme/duepuntozero/config.php:71 -#: view/theme/frio/config.php:113 view/theme/quattro/config.php:73 -#: view/theme/vier/config.php:119 src/Object/Post.php:790 +#: mod/install.php:251 mod/install.php:290 mod/events.php:530 +#: mod/profiles.php:672 src/Object/Post.php:790 +#: view/theme/duepuntozero/config.php:71 view/theme/frio/config.php:113 +#: view/theme/quattro/config.php:73 view/theme/vier/config.php:119 msgid "Submit" msgstr "" @@ -1320,9 +1321,9 @@ msgid "" "entries from this contact." msgstr "" -#: mod/crepair.php:158 mod/admin.php:439 mod/admin.php:1714 mod/admin.php:1726 -#: mod/admin.php:1739 mod/admin.php:1755 mod/settings.php:677 -#: mod/settings.php:703 +#: mod/crepair.php:158 mod/settings.php:677 mod/settings.php:703 +#: mod/admin.php:490 mod/admin.php:1781 mod/admin.php:1793 mod/admin.php:1806 +#: mod/admin.php:1822 msgid "Name" msgstr "" @@ -1358,8 +1359,8 @@ msgstr "" msgid "New photo from this URL" msgstr "" -#: mod/fbrowser.php:34 view/theme/frio/theme.php:261 src/Content/Nav.php:102 -#: src/Model/Profile.php:904 +#: mod/fbrowser.php:34 src/Content/Nav.php:102 src/Model/Profile.php:904 +#: view/theme/frio/theme.php:261 msgid "Photos" msgstr "" @@ -1391,7 +1392,7 @@ msgstr "" msgid "Help:" msgstr "" -#: mod/help.php:54 view/theme/vier/theme.php:298 src/Content/Nav.php:134 +#: mod/help.php:54 src/Content/Nav.php:134 view/theme/vier/theme.php:298 msgid "Help" msgstr "" @@ -1447,8 +1448,8 @@ msgid "" "join." msgstr "" -#: mod/newmember.php:19 mod/admin.php:1839 mod/admin.php:2108 -#: mod/settings.php:124 view/theme/frio/theme.php:269 src/Content/Nav.php:206 +#: mod/newmember.php:19 mod/settings.php:124 mod/admin.php:1906 +#: mod/admin.php:2175 src/Content/Nav.php:206 view/theme/frio/theme.php:269 msgid "Settings" msgstr "" @@ -1472,13 +1473,13 @@ msgid "" msgstr "" #: mod/newmember.php:24 mod/profperm.php:113 mod/contacts.php:671 -#: mod/contacts.php:863 view/theme/frio/theme.php:260 src/Content/Nav.php:101 -#: src/Model/Profile.php:730 src/Model/Profile.php:863 -#: src/Model/Profile.php:896 +#: mod/contacts.php:863 src/Content/Nav.php:101 src/Model/Profile.php:730 +#: src/Model/Profile.php:863 src/Model/Profile.php:896 +#: view/theme/frio/theme.php:260 msgid "Profile" msgstr "" -#: mod/newmember.php:26 mod/profile_photo.php:249 mod/profiles.php:690 +#: mod/newmember.php:26 mod/profile_photo.php:249 mod/profiles.php:691 msgid "Upload Profile Photo" msgstr "" @@ -1649,15 +1650,10 @@ msgstr "" msgid "Ignore/Hide" msgstr "" -#: mod/suggest.php:114 view/theme/vier/theme.php:203 src/Content/Widget.php:64 +#: mod/suggest.php:114 src/Content/Widget.php:64 view/theme/vier/theme.php:203 msgid "Friend Suggestions" msgstr "" -#: mod/update_community.php:27 mod/update_display.php:27 -#: mod/update_notes.php:40 mod/update_profile.php:39 mod/update_network.php:33 -msgid "[Embedded content - reload page to view]" -msgstr "" - #: mod/uimport.php:55 mod/register.php:191 msgid "" "This site has exceeded the number of allowed daily account registrations. " @@ -1699,60 +1695,16 @@ msgid "" "select \"Export account\"" msgstr "" +#: mod/update_community.php:27 mod/update_display.php:27 +#: mod/update_notes.php:40 mod/update_profile.php:39 mod/update_network.php:33 +msgid "[Embedded content - reload page to view]" +msgstr "" + #: mod/dfrn_poll.php:123 mod/dfrn_poll.php:543 #, php-format msgid "%1$s welcomes %2$s" msgstr "" -#: mod/friendica.php:77 -msgid "This is Friendica, version" -msgstr "" - -#: mod/friendica.php:78 -msgid "running at web location" -msgstr "" - -#: mod/friendica.php:82 -msgid "" -"Please visit Friendi.ca to learn more " -"about the Friendica project." -msgstr "" - -#: mod/friendica.php:86 -msgid "Bug reports and issues: please visit" -msgstr "" - -#: mod/friendica.php:86 -msgid "the bugtracker at github" -msgstr "" - -#: mod/friendica.php:89 -msgid "" -"Suggestions, praise, donations, etc. - please email \"Info\" at Friendica - " -"dot com" -msgstr "" - -#: mod/friendica.php:103 -msgid "Installed addons/apps:" -msgstr "" - -#: mod/friendica.php:117 -msgid "No installed addons/apps" -msgstr "" - -#: mod/friendica.php:122 -msgid "On this server the following remote servers are blocked." -msgstr "" - -#: mod/friendica.php:123 mod/dfrn_request.php:351 mod/admin.php:302 -#: mod/admin.php:320 src/Model/Contact.php:1228 -msgid "Blocked domain" -msgstr "" - -#: mod/friendica.php:123 mod/admin.php:303 mod/admin.php:321 -msgid "Reason for the block" -msgstr "" - #: mod/match.php:48 msgid "No keywords to match. Please add keywords to your default profile." msgstr "" @@ -1831,7 +1783,7 @@ msgstr "" msgid "if applicable" msgstr "" -#: mod/notifications.php:179 mod/notifications.php:264 mod/admin.php:1729 +#: mod/notifications.php:179 mod/notifications.php:264 mod/admin.php:1796 msgid "Approve" msgstr "" @@ -1884,13 +1836,13 @@ msgstr "" msgid "Subscriber" msgstr "" -#: mod/notifications.php:247 mod/contacts.php:660 mod/directory.php:149 -#: mod/events.php:518 src/Model/Profile.php:417 src/Model/Event.php:60 +#: mod/notifications.php:247 mod/contacts.php:660 mod/events.php:518 +#: mod/directory.php:148 src/Model/Profile.php:417 src/Model/Event.php:60 #: src/Model/Event.php:85 src/Model/Event.php:421 src/Model/Event.php:900 msgid "Location:" msgstr "" -#: mod/notifications.php:249 mod/contacts.php:664 mod/directory.php:155 +#: mod/notifications.php:249 mod/contacts.php:664 mod/directory.php:154 #: src/Model/Profile.php:423 src/Model/Profile.php:806 msgid "About:" msgstr "" @@ -1900,13 +1852,13 @@ msgstr "" msgid "Tags:" msgstr "" -#: mod/notifications.php:253 mod/directory.php:152 src/Model/Profile.php:420 +#: mod/notifications.php:253 mod/directory.php:151 src/Model/Profile.php:420 #: src/Model/Profile.php:745 msgid "Gender:" msgstr "" -#: mod/notifications.php:258 mod/admin.php:439 mod/admin.php:449 -#: mod/contacts.php:656 mod/follow.php:166 mod/unfollow.php:122 +#: mod/notifications.php:258 mod/contacts.php:656 mod/unfollow.php:122 +#: mod/follow.php:166 mod/admin.php:490 mod/admin.php:500 msgid "Profile URL" msgstr "" @@ -1944,8 +1896,8 @@ msgstr "" msgid "Login failed." msgstr "" -#: mod/dfrn_confirm.php:74 mod/profiles.php:38 mod/profiles.php:148 -#: mod/profiles.php:195 mod/profiles.php:617 +#: mod/dfrn_confirm.php:74 mod/profiles.php:39 mod/profiles.php:149 +#: mod/profiles.php:196 mod/profiles.php:618 msgid "Profile not found." msgstr "" @@ -2137,20 +2089,6 @@ msgid "" "important, please visit http://friendi.ca" msgstr "" -#: mod/manage.php:180 -msgid "Manage Identities and/or Pages" -msgstr "" - -#: mod/manage.php:181 -msgid "" -"Toggle between different identities or community/group pages which share " -"your account details or which you have been granted \"manage\" permissions" -msgstr "" - -#: mod/manage.php:182 -msgid "Select an identity to manage: " -msgstr "" - #: mod/wall_attach.php:24 mod/wall_attach.php:32 mod/wall_attach.php:83 #: mod/wall_upload.php:38 mod/wall_upload.php:54 mod/wall_upload.php:112 #: mod/wall_upload.php:155 mod/wall_upload.php:158 @@ -2174,6 +2112,20 @@ msgstr "" msgid "File upload failed." msgstr "" +#: mod/manage.php:180 +msgid "Manage Identities and/or Pages" +msgstr "" + +#: mod/manage.php:181 +msgid "" +"Toggle between different identities or community/group pages which share " +"your account details or which you have been granted \"manage\" permissions" +msgstr "" + +#: mod/manage.php:182 +msgid "Select an identity to manage: " +msgstr "" + #: mod/dfrn_request.php:94 msgid "This introduction has already been accepted." msgstr "" @@ -2243,6 +2195,11 @@ msgstr "" msgid "Disallowed profile URL." msgstr "" +#: mod/dfrn_request.php:351 mod/friendica.php:128 mod/admin.php:353 +#: mod/admin.php:371 src/Model/Contact.php:1228 +msgid "Blocked domain" +msgstr "" + #: mod/dfrn_request.php:419 mod/contacts.php:230 msgid "Failed to update contact record." msgstr "" @@ -2285,10 +2242,10 @@ msgstr "" msgid "Please confirm your introduction/connection request to %s." msgstr "" -#: mod/dfrn_request.php:607 mod/probe.php:13 mod/search.php:98 -#: mod/search.php:104 mod/viewcontacts.php:45 mod/webfinger.php:16 +#: mod/dfrn_request.php:607 mod/probe.php:13 mod/viewcontacts.php:45 +#: mod/webfinger.php:16 mod/search.php:98 mod/search.php:104 #: mod/community.php:27 mod/photos.php:932 mod/videos.php:199 -#: mod/directory.php:42 mod/display.php:203 +#: mod/display.php:203 mod/directory.php:42 msgid "Public access denied." msgstr "" @@ -2347,18 +2304,14 @@ msgid "" "bar." msgstr "" -#: mod/dfrn_request.php:660 mod/follow.php:157 mod/unfollow.php:113 +#: mod/dfrn_request.php:660 mod/unfollow.php:113 mod/follow.php:157 msgid "Your Identity Address:" msgstr "" -#: mod/dfrn_request.php:662 mod/follow.php:62 mod/unfollow.php:65 +#: mod/dfrn_request.php:662 mod/unfollow.php:65 mod/follow.php:62 msgid "Submit Request" msgstr "" -#: mod/filer.php:34 -msgid "- select -" -msgstr "" - #: mod/localtime.php:19 src/Model/Event.php:36 src/Model/Event.php:814 msgid "l F d, Y \\@ g:i A" msgstr "" @@ -2526,42 +2479,6 @@ msgstr "" msgid "Your password has been changed at %s" msgstr "" -#: mod/notify.php:77 -msgid "No more system notifications." -msgstr "" - -#: mod/ping.php:292 -msgid "{0} wants to be your friend" -msgstr "" - -#: mod/ping.php:307 -msgid "{0} sent you a message" -msgstr "" - -#: mod/ping.php:322 -msgid "{0} requested registration" -msgstr "" - -#: mod/poke.php:192 -msgid "Poke/Prod" -msgstr "" - -#: mod/poke.php:193 -msgid "poke, prod or do other things to somebody" -msgstr "" - -#: mod/poke.php:194 -msgid "Recipient" -msgstr "" - -#: mod/poke.php:195 -msgid "Choose what you wish to do to recipient" -msgstr "" - -#: mod/poke.php:198 -msgid "Make this post private" -msgstr "" - #: mod/probe.php:14 mod/webfinger.php:17 msgid "Only logged in users are permitted to perform a probing." msgstr "" @@ -2617,86 +2534,6 @@ msgstr "" msgid "Please enter your password for verification:" msgstr "" -#: mod/search.php:37 mod/network.php:194 -msgid "Remove term" -msgstr "" - -#: mod/search.php:46 mod/network.php:201 src/Content/Feature.php:100 -msgid "Saved Searches" -msgstr "" - -#: mod/search.php:105 -msgid "Only logged in users are permitted to perform a search." -msgstr "" - -#: mod/search.php:129 -msgid "Too Many Requests" -msgstr "" - -#: mod/search.php:130 -msgid "Only one search per minute is permitted for not logged in users." -msgstr "" - -#: mod/search.php:228 mod/community.php:136 -msgid "No results." -msgstr "" - -#: mod/search.php:234 -#, php-format -msgid "Items tagged with: %s" -msgstr "" - -#: mod/search.php:236 mod/contacts.php:819 -#, php-format -msgid "Results for: %s" -msgstr "" - -#: mod/subthread.php:113 -#, php-format -msgid "%1$s is following %2$s's %3$s" -msgstr "" - -#: mod/tagrm.php:47 -msgid "Tag removed" -msgstr "" - -#: mod/tagrm.php:85 -msgid "Remove Item Tag" -msgstr "" - -#: mod/tagrm.php:87 -msgid "Select a tag to remove: " -msgstr "" - -#: mod/tagrm.php:98 mod/delegate.php:177 -msgid "Remove" -msgstr "" - -#: mod/uexport.php:44 -msgid "Export account" -msgstr "" - -#: mod/uexport.php:44 -msgid "" -"Export your account info and contacts. Use this to make a backup of your " -"account and/or to move it to another server." -msgstr "" - -#: mod/uexport.php:45 -msgid "Export all" -msgstr "" - -#: mod/uexport.php:45 -msgid "" -"Export your accout info, contacts and all your items as json. Could be a " -"very big file, and could take a lot of time. Use this to make a full backup " -"of your account (photos are not exported)" -msgstr "" - -#: mod/uexport.php:52 mod/settings.php:108 -msgid "Export personal data" -msgstr "" - #: mod/viewcontacts.php:87 msgid "No contacts." msgstr "" @@ -2705,25 +2542,6 @@ msgstr "" msgid "Access denied." msgstr "" -#: mod/wall_upload.php:186 mod/photos.php:763 mod/photos.php:766 -#: mod/photos.php:795 mod/profile_photo.php:153 -#, php-format -msgid "Image exceeds size limit of %s" -msgstr "" - -#: mod/wall_upload.php:200 mod/photos.php:818 mod/profile_photo.php:162 -msgid "Unable to process image." -msgstr "" - -#: mod/wall_upload.php:231 mod/item.php:471 src/Object/Image.php:953 -#: src/Object/Image.php:969 src/Object/Image.php:977 src/Object/Image.php:1002 -msgid "Wall Photos" -msgstr "" - -#: mod/wall_upload.php:239 mod/photos.php:847 mod/profile_photo.php:307 -msgid "Image upload failed." -msgstr "" - #: mod/wallmessage.php:49 mod/wallmessage.php:112 #, php-format msgid "Number of daily wall messages for %s exceeded. Message failed." @@ -2772,109 +2590,143 @@ msgstr "" msgid "Subject:" msgstr "" -#: mod/register.php:99 -msgid "" -"Registration successful. Please check your email for further instructions." +#: mod/uexport.php:44 +msgid "Export account" msgstr "" -#: mod/register.php:103 +#: mod/uexport.php:44 +msgid "" +"Export your account info and contacts. Use this to make a backup of your " +"account and/or to move it to another server." +msgstr "" + +#: mod/uexport.php:45 +msgid "Export all" +msgstr "" + +#: mod/uexport.php:45 +msgid "" +"Export your accout info, contacts and all your items as json. Could be a " +"very big file, and could take a lot of time. Use this to make a full backup " +"of your account (photos are not exported)" +msgstr "" + +#: mod/uexport.php:52 mod/settings.php:108 +msgid "Export personal data" +msgstr "" + +#: mod/filer.php:34 +msgid "- select -" +msgstr "" + +#: mod/notify.php:77 +msgid "No more system notifications." +msgstr "" + +#: mod/ping.php:292 +msgid "{0} wants to be your friend" +msgstr "" + +#: mod/ping.php:307 +msgid "{0} sent you a message" +msgstr "" + +#: mod/ping.php:322 +msgid "{0} requested registration" +msgstr "" + +#: mod/poke.php:192 +msgid "Poke/Prod" +msgstr "" + +#: mod/poke.php:193 +msgid "poke, prod or do other things to somebody" +msgstr "" + +#: mod/poke.php:194 +msgid "Recipient" +msgstr "" + +#: mod/poke.php:195 +msgid "Choose what you wish to do to recipient" +msgstr "" + +#: mod/poke.php:198 +msgid "Make this post private" +msgstr "" + +#: mod/subthread.php:113 #, php-format -msgid "" -"Failed to send email message. Here your accout details:
    login: %s
    " -"password: %s

    You can change your password after login." +msgid "%1$s is following %2$s's %3$s" msgstr "" -#: mod/register.php:110 -msgid "Registration successful." +#: mod/tagrm.php:47 +msgid "Tag removed" msgstr "" -#: mod/register.php:115 -msgid "Your registration can not be processed." +#: mod/tagrm.php:85 +msgid "Remove Item Tag" msgstr "" -#: mod/register.php:162 -msgid "Your registration is pending approval by the site owner." +#: mod/tagrm.php:87 +msgid "Select a tag to remove: " msgstr "" -#: mod/register.php:220 -msgid "" -"You may (optionally) fill in this form via OpenID by supplying your OpenID " -"and clicking 'Register'." +#: mod/tagrm.php:98 mod/delegate.php:177 +msgid "Remove" msgstr "" -#: mod/register.php:221 -msgid "" -"If you are not familiar with OpenID, please leave that field blank and fill " -"in the rest of the items." -msgstr "" - -#: mod/register.php:222 -msgid "Your OpenID (optional): " -msgstr "" - -#: mod/register.php:234 -msgid "Include your profile in member directory?" -msgstr "" - -#: mod/register.php:259 -msgid "Note for the admin" -msgstr "" - -#: mod/register.php:259 -msgid "Leave a message for the admin, why you want to join this node" -msgstr "" - -#: mod/register.php:260 -msgid "Membership on this site is by invitation only." -msgstr "" - -#: mod/register.php:261 -msgid "Your invitation code: " -msgstr "" - -#: mod/register.php:264 mod/admin.php:1283 -msgid "Registration" -msgstr "" - -#: mod/register.php:270 -msgid "Your Full Name (e.g. Joe Smith, real or real-looking): " -msgstr "" - -#: mod/register.php:271 -msgid "" -"Your Email Address: (Initial information will be send there, so this has to " -"be an existing address.)" -msgstr "" - -#: mod/register.php:273 mod/settings.php:1199 -msgid "New Password:" -msgstr "" - -#: mod/register.php:273 -msgid "Leave empty for an auto generated password." -msgstr "" - -#: mod/register.php:274 mod/settings.php:1200 -msgid "Confirm:" -msgstr "" - -#: mod/register.php:275 +#: mod/wall_upload.php:186 mod/photos.php:763 mod/photos.php:766 +#: mod/photos.php:795 mod/profile_photo.php:153 #, php-format -msgid "" -"Choose a profile nickname. This must begin with a text character. Your " -"profile address on this site will then be 'nickname@%s'." +msgid "Image exceeds size limit of %s" msgstr "" -#: mod/register.php:276 -msgid "Choose a nickname: " +#: mod/wall_upload.php:200 mod/photos.php:818 mod/profile_photo.php:162 +msgid "Unable to process image." msgstr "" -#: mod/register.php:279 src/Content/Nav.php:128 src/Module/Login.php:283 -msgid "Register" +#: mod/wall_upload.php:231 mod/item.php:471 src/Object/Image.php:953 +#: src/Object/Image.php:969 src/Object/Image.php:977 src/Object/Image.php:1002 +msgid "Wall Photos" msgstr "" -#: mod/register.php:286 -msgid "Import your profile to this friendica instance" +#: mod/wall_upload.php:239 mod/photos.php:847 mod/profile_photo.php:307 +msgid "Image upload failed." +msgstr "" + +#: mod/search.php:37 mod/network.php:194 +msgid "Remove term" +msgstr "" + +#: mod/search.php:46 mod/network.php:201 src/Content/Feature.php:100 +msgid "Saved Searches" +msgstr "" + +#: mod/search.php:105 +msgid "Only logged in users are permitted to perform a search." +msgstr "" + +#: mod/search.php:129 +msgid "Too Many Requests" +msgstr "" + +#: mod/search.php:130 +msgid "Only one search per minute is permitted for not logged in users." +msgstr "" + +#: mod/search.php:228 mod/community.php:136 +msgid "No results." +msgstr "" + +#: mod/search.php:234 +#, php-format +msgid "Items tagged with: %s" +msgstr "" + +#: mod/search.php:236 mod/contacts.php:819 +#, php-format +msgid "Results for: %s" msgstr "" #: mod/bookmarklet.php:23 src/Content/Nav.php:114 src/Module/Login.php:312 @@ -2931,6 +2783,14 @@ msgstr "" msgid "Example: bob@example.com, mary@example.com" msgstr "" +#: mod/feedtest.php:20 +msgid "You must be logged in to use this module" +msgstr "" + +#: mod/feedtest.php:48 +msgid "Source URL" +msgstr "" + #: mod/fsuggest.php:72 msgid "Friend suggestion sent." msgstr "" @@ -3012,6 +2872,36 @@ msgstr "" msgid "Add Contact" msgstr "" +#: mod/item.php:114 +msgid "Unable to locate original post." +msgstr "" + +#: mod/item.php:274 +msgid "Empty post discarded." +msgstr "" + +#: mod/item.php:799 +#, php-format +msgid "" +"This message was sent to you by %s, a member of the Friendica social network." +msgstr "" + +#: mod/item.php:801 +#, php-format +msgid "You may visit them online at %s" +msgstr "" + +#: mod/item.php:802 +msgid "" +"Please contact the sender by replying to this post if you do not wish to " +"receive these messages." +msgstr "" + +#: mod/item.php:806 +#, php-format +msgid "%s posted an update." +msgstr "" + #: mod/message.php:30 src/Content/Nav.php:198 msgid "New Message" msgstr "" @@ -3020,7 +2910,7 @@ msgstr "" msgid "Unable to locate contact information." msgstr "" -#: mod/message.php:112 view/theme/frio/theme.php:268 src/Content/Nav.php:195 +#: mod/message.php:112 src/Content/Nav.php:195 view/theme/frio/theme.php:268 msgid "Messages" msgstr "" @@ -3140,7 +3030,7 @@ msgstr "" msgid "Sort by Post Date" msgstr "" -#: mod/network.php:940 mod/profiles.php:686 +#: mod/network.php:940 mod/profiles.php:687 #: src/Core/NotificationsManager.php:185 msgid "Personal" msgstr "" @@ -3177,6 +3067,10 @@ msgstr "" msgid "Personal Notes" msgstr "" +#: mod/oexchange.php:30 +msgid "Post successful." +msgstr "" + #: mod/photos.php:108 src/Model/Profile.php:907 msgid "Photo Albums" msgstr "" @@ -3406,7 +3300,7 @@ msgstr "" msgid "%s's timeline" msgstr "" -#: mod/profile.php:173 mod/cal.php:142 mod/display.php:313 +#: mod/profile.php:173 mod/display.php:313 mod/cal.php:142 msgid "Access to this profile has been restricted." msgstr "" @@ -3434,1828 +3328,6 @@ msgstr "" msgid "Upload New Videos" msgstr "" -#: mod/admin.php:106 -msgid "Theme settings updated." -msgstr "" - -#: mod/admin.php:176 src/Content/Nav.php:174 -msgid "Information" -msgstr "" - -#: mod/admin.php:177 -msgid "Overview" -msgstr "" - -#: mod/admin.php:178 mod/admin.php:654 -msgid "Federation Statistics" -msgstr "" - -#: mod/admin.php:179 -msgid "Configuration" -msgstr "" - -#: mod/admin.php:180 mod/admin.php:1280 -msgid "Site" -msgstr "" - -#: mod/admin.php:181 mod/admin.php:1208 mod/admin.php:1721 mod/admin.php:1737 -msgid "Users" -msgstr "" - -#: mod/admin.php:182 mod/admin.php:1837 mod/admin.php:1897 mod/settings.php:87 -msgid "Addons" -msgstr "" - -#: mod/admin.php:183 mod/admin.php:2106 mod/admin.php:2150 -msgid "Themes" -msgstr "" - -#: mod/admin.php:184 mod/settings.php:65 -msgid "Additional features" -msgstr "" - -#: mod/admin.php:185 -msgid "Database" -msgstr "" - -#: mod/admin.php:186 -msgid "DB updates" -msgstr "" - -#: mod/admin.php:187 mod/admin.php:689 -msgid "Inspect Queue" -msgstr "" - -#: mod/admin.php:188 -msgid "Tools" -msgstr "" - -#: mod/admin.php:189 -msgid "Contact Blocklist" -msgstr "" - -#: mod/admin.php:190 mod/admin.php:311 -msgid "Server Blocklist" -msgstr "" - -#: mod/admin.php:191 mod/admin.php:470 -msgid "Delete Item" -msgstr "" - -#: mod/admin.php:192 mod/admin.php:193 mod/admin.php:2224 -msgid "Logs" -msgstr "" - -#: mod/admin.php:194 mod/admin.php:2291 -msgid "View Logs" -msgstr "" - -#: mod/admin.php:196 -msgid "Diagnostics" -msgstr "" - -#: mod/admin.php:197 -msgid "PHP Info" -msgstr "" - -#: mod/admin.php:198 -msgid "probe address" -msgstr "" - -#: mod/admin.php:199 -msgid "check webfinger" -msgstr "" - -#: mod/admin.php:218 src/Content/Nav.php:217 -msgid "Admin" -msgstr "" - -#: mod/admin.php:219 -msgid "Addon Features" -msgstr "" - -#: mod/admin.php:220 -msgid "User registrations waiting for confirmation" -msgstr "" - -#: mod/admin.php:302 -msgid "The blocked domain" -msgstr "" - -#: mod/admin.php:303 mod/admin.php:316 -msgid "The reason why you blocked this domain." -msgstr "" - -#: mod/admin.php:304 -msgid "Delete domain" -msgstr "" - -#: mod/admin.php:304 -msgid "Check to delete this entry from the blocklist" -msgstr "" - -#: mod/admin.php:310 mod/admin.php:427 mod/admin.php:469 mod/admin.php:653 -#: mod/admin.php:688 mod/admin.php:784 mod/admin.php:1279 mod/admin.php:1720 -#: mod/admin.php:1836 mod/admin.php:1896 mod/admin.php:2105 mod/admin.php:2149 -#: mod/admin.php:2223 mod/admin.php:2290 -msgid "Administration" -msgstr "" - -#: mod/admin.php:312 -msgid "" -"This page can be used to define a black list of servers from the federated " -"network that are not allowed to interact with your node. For all entered " -"domains you should also give a reason why you have blocked the remote server." -msgstr "" - -#: mod/admin.php:313 -msgid "" -"The list of blocked servers will be made publically available on the /" -"friendica page so that your users and people investigating communication " -"problems can find the reason easily." -msgstr "" - -#: mod/admin.php:314 -msgid "Add new entry to block list" -msgstr "" - -#: mod/admin.php:315 -msgid "Server Domain" -msgstr "" - -#: mod/admin.php:315 -msgid "" -"The domain of the new server to add to the block list. Do not include the " -"protocol." -msgstr "" - -#: mod/admin.php:316 -msgid "Block reason" -msgstr "" - -#: mod/admin.php:317 -msgid "Add Entry" -msgstr "" - -#: mod/admin.php:318 -msgid "Save changes to the blocklist" -msgstr "" - -#: mod/admin.php:319 -msgid "Current Entries in the Blocklist" -msgstr "" - -#: mod/admin.php:322 -msgid "Delete entry from blocklist" -msgstr "" - -#: mod/admin.php:325 -msgid "Delete entry from blocklist?" -msgstr "" - -#: mod/admin.php:351 -msgid "Server added to blocklist." -msgstr "" - -#: mod/admin.php:367 -msgid "Site blocklist updated." -msgstr "" - -#: mod/admin.php:390 src/Core/Console/GlobalCommunityBlock.php:72 -msgid "The contact has been blocked from the node" -msgstr "" - -#: mod/admin.php:392 src/Core/Console/GlobalCommunityBlock.php:69 -#, php-format -msgid "Could not find any contact entry for this URL (%s)" -msgstr "" - -#: mod/admin.php:399 -#, php-format -msgid "%s contact unblocked" -msgid_plural "%s contacts unblocked" -msgstr[0] "" -msgstr[1] "" - -#: mod/admin.php:428 -msgid "Remote Contact Blocklist" -msgstr "" - -#: mod/admin.php:429 -msgid "" -"This page allows you to prevent any message from a remote contact to reach " -"your node." -msgstr "" - -#: mod/admin.php:430 -msgid "Block Remote Contact" -msgstr "" - -#: mod/admin.php:431 mod/admin.php:1723 -msgid "select all" -msgstr "" - -#: mod/admin.php:432 -msgid "select none" -msgstr "" - -#: mod/admin.php:433 mod/admin.php:1732 mod/contacts.php:637 -#: mod/contacts.php:827 mod/contacts.php:1011 -msgid "Block" -msgstr "" - -#: mod/admin.php:434 mod/admin.php:1733 mod/contacts.php:637 -#: mod/contacts.php:827 mod/contacts.php:1011 -msgid "Unblock" -msgstr "" - -#: mod/admin.php:435 -msgid "No remote contact is blocked from this node." -msgstr "" - -#: mod/admin.php:437 -msgid "Blocked Remote Contacts" -msgstr "" - -#: mod/admin.php:438 -msgid "Block New Remote Contact" -msgstr "" - -#: mod/admin.php:439 -msgid "Photo" -msgstr "" - -#: mod/admin.php:439 mod/profiles.php:393 -msgid "Address" -msgstr "" - -#: mod/admin.php:447 -#, php-format -msgid "%s total blocked contact" -msgid_plural "%s total blocked contacts" -msgstr[0] "" -msgstr[1] "" - -#: mod/admin.php:449 -msgid "URL of the remote contact to block." -msgstr "" - -#: mod/admin.php:471 -msgid "Delete this Item" -msgstr "" - -#: mod/admin.php:472 -msgid "" -"On this page you can delete an item from your node. If the item is a top " -"level posting, the entire thread will be deleted." -msgstr "" - -#: mod/admin.php:473 -msgid "" -"You need to know the GUID of the item. You can find it e.g. by looking at " -"the display URL. The last part of http://example.com/display/123456 is the " -"GUID, here 123456." -msgstr "" - -#: mod/admin.php:474 -msgid "GUID" -msgstr "" - -#: mod/admin.php:474 -msgid "The GUID of the item you want to delete." -msgstr "" - -#: mod/admin.php:513 -msgid "Item marked for deletion." -msgstr "" - -#: mod/admin.php:584 -msgid "unknown" -msgstr "" - -#: mod/admin.php:647 -msgid "" -"This page offers you some numbers to the known part of the federated social " -"network your Friendica node is part of. These numbers are not complete but " -"only reflect the part of the network your node is aware of." -msgstr "" - -#: mod/admin.php:648 -msgid "" -"The Auto Discovered Contact Directory feature is not enabled, it " -"will improve the data displayed here." -msgstr "" - -#: mod/admin.php:660 -#, php-format -msgid "" -"Currently this node is aware of %d nodes with %d registered users from the " -"following platforms:" -msgstr "" - -#: mod/admin.php:691 -msgid "ID" -msgstr "" - -#: mod/admin.php:692 -msgid "Recipient Name" -msgstr "" - -#: mod/admin.php:693 -msgid "Recipient Profile" -msgstr "" - -#: mod/admin.php:694 view/theme/frio/theme.php:266 -#: src/Core/NotificationsManager.php:178 src/Content/Nav.php:178 -msgid "Network" -msgstr "" - -#: mod/admin.php:695 -msgid "Created" -msgstr "" - -#: mod/admin.php:696 -msgid "Last Tried" -msgstr "" - -#: mod/admin.php:697 -msgid "" -"This page lists the content of the queue for outgoing postings. These are " -"postings the initial delivery failed for. They will be resend later and " -"eventually deleted if the delivery fails permanently." -msgstr "" - -#: mod/admin.php:721 -#, php-format -msgid "" -"Your DB still runs with MyISAM tables. You should change the engine type to " -"InnoDB. As Friendica will use InnoDB only features in the future, you should " -"change this! See here for a guide that may be helpful " -"converting the table engines. You may also use the command php bin/" -"console.php dbstructure toinnodb of your Friendica installation for an " -"automatic conversion.
    " -msgstr "" - -#: mod/admin.php:728 -#, php-format -msgid "" -"There is a new version of Friendica available for download. Your current " -"version is %1$s, upstream version is %2$s" -msgstr "" - -#: mod/admin.php:738 -msgid "" -"The database update failed. Please run \"php bin/console.php dbstructure " -"update\" from the command line and have a look at the errors that might " -"appear." -msgstr "" - -#: mod/admin.php:744 -msgid "The worker was never executed. Please check your database structure!" -msgstr "" - -#: mod/admin.php:747 -#, php-format -msgid "" -"The last worker execution was on %s UTC. This is older than one hour. Please " -"check your crontab settings." -msgstr "" - -#: mod/admin.php:752 mod/admin.php:1672 -msgid "Normal Account" -msgstr "" - -#: mod/admin.php:753 mod/admin.php:1673 -msgid "Automatic Follower Account" -msgstr "" - -#: mod/admin.php:754 mod/admin.php:1674 -msgid "Public Forum Account" -msgstr "" - -#: mod/admin.php:755 mod/admin.php:1675 -msgid "Automatic Friend Account" -msgstr "" - -#: mod/admin.php:756 -msgid "Blog Account" -msgstr "" - -#: mod/admin.php:757 -msgid "Private Forum Account" -msgstr "" - -#: mod/admin.php:779 -msgid "Message queues" -msgstr "" - -#: mod/admin.php:785 -msgid "Summary" -msgstr "" - -#: mod/admin.php:787 -msgid "Registered users" -msgstr "" - -#: mod/admin.php:789 -msgid "Pending registrations" -msgstr "" - -#: mod/admin.php:790 -msgid "Version" -msgstr "" - -#: mod/admin.php:795 -msgid "Active addons" -msgstr "" - -#: mod/admin.php:826 -msgid "Can not parse base url. Must have at least ://" -msgstr "" - -#: mod/admin.php:1144 -msgid "Site settings updated." -msgstr "" - -#: mod/admin.php:1171 mod/settings.php:903 -msgid "No special theme for mobile devices" -msgstr "" - -#: mod/admin.php:1200 -msgid "No community page" -msgstr "" - -#: mod/admin.php:1201 -msgid "Public postings from users of this site" -msgstr "" - -#: mod/admin.php:1202 -msgid "Public postings from the federated network" -msgstr "" - -#: mod/admin.php:1203 -msgid "Public postings from local users and the federated network" -msgstr "" - -#: mod/admin.php:1207 mod/admin.php:1370 mod/admin.php:1380 -#: mod/contacts.php:572 -msgid "Disabled" -msgstr "" - -#: mod/admin.php:1209 -msgid "Users, Global Contacts" -msgstr "" - -#: mod/admin.php:1210 -msgid "Users, Global Contacts/fallback" -msgstr "" - -#: mod/admin.php:1214 -msgid "One month" -msgstr "" - -#: mod/admin.php:1215 -msgid "Three months" -msgstr "" - -#: mod/admin.php:1216 -msgid "Half a year" -msgstr "" - -#: mod/admin.php:1217 -msgid "One year" -msgstr "" - -#: mod/admin.php:1222 -msgid "Multi user instance" -msgstr "" - -#: mod/admin.php:1245 -msgid "Closed" -msgstr "" - -#: mod/admin.php:1246 -msgid "Requires approval" -msgstr "" - -#: mod/admin.php:1247 -msgid "Open" -msgstr "" - -#: mod/admin.php:1251 -msgid "No SSL policy, links will track page SSL state" -msgstr "" - -#: mod/admin.php:1252 -msgid "Force all links to use SSL" -msgstr "" - -#: mod/admin.php:1253 -msgid "Self-signed certificate, use SSL for local links only (discouraged)" -msgstr "" - -#: mod/admin.php:1257 -msgid "Don't check" -msgstr "" - -#: mod/admin.php:1258 -msgid "check the stable version" -msgstr "" - -#: mod/admin.php:1259 -msgid "check the development version" -msgstr "" - -#: mod/admin.php:1281 mod/admin.php:1898 mod/admin.php:2151 mod/admin.php:2225 -#: mod/admin.php:2372 mod/delegate.php:168 mod/settings.php:675 -#: mod/settings.php:784 mod/settings.php:870 mod/settings.php:959 -#: mod/settings.php:1192 -msgid "Save Settings" -msgstr "" - -#: mod/admin.php:1282 -msgid "Republish users to directory" -msgstr "" - -#: mod/admin.php:1284 -msgid "File upload" -msgstr "" - -#: mod/admin.php:1285 -msgid "Policies" -msgstr "" - -#: mod/admin.php:1286 mod/contacts.php:895 mod/events.php:532 -#: src/Model/Profile.php:865 -msgid "Advanced" -msgstr "" - -#: mod/admin.php:1287 -msgid "Auto Discovered Contact Directory" -msgstr "" - -#: mod/admin.php:1288 -msgid "Performance" -msgstr "" - -#: mod/admin.php:1289 -msgid "Worker" -msgstr "" - -#: mod/admin.php:1290 -msgid "Message Relay" -msgstr "" - -#: mod/admin.php:1291 -msgid "" -"Relocate - WARNING: advanced function. Could make this server unreachable." -msgstr "" - -#: mod/admin.php:1294 -msgid "Site name" -msgstr "" - -#: mod/admin.php:1295 -msgid "Host name" -msgstr "" - -#: mod/admin.php:1296 -msgid "Sender Email" -msgstr "" - -#: mod/admin.php:1296 -msgid "" -"The email address your server shall use to send notification emails from." -msgstr "" - -#: mod/admin.php:1297 -msgid "Banner/Logo" -msgstr "" - -#: mod/admin.php:1298 -msgid "Shortcut icon" -msgstr "" - -#: mod/admin.php:1298 -msgid "Link to an icon that will be used for browsers." -msgstr "" - -#: mod/admin.php:1299 -msgid "Touch icon" -msgstr "" - -#: mod/admin.php:1299 -msgid "Link to an icon that will be used for tablets and mobiles." -msgstr "" - -#: mod/admin.php:1300 -msgid "Additional Info" -msgstr "" - -#: mod/admin.php:1300 -#, php-format -msgid "" -"For public servers: you can add additional information here that will be " -"listed at %s/servers." -msgstr "" - -#: mod/admin.php:1301 -msgid "System language" -msgstr "" - -#: mod/admin.php:1302 -msgid "System theme" -msgstr "" - -#: mod/admin.php:1302 -msgid "" -"Default system theme - may be over-ridden by user profiles - change theme settings" -msgstr "" - -#: mod/admin.php:1303 -msgid "Mobile system theme" -msgstr "" - -#: mod/admin.php:1303 -msgid "Theme for mobile devices" -msgstr "" - -#: mod/admin.php:1304 -msgid "SSL link policy" -msgstr "" - -#: mod/admin.php:1304 -msgid "Determines whether generated links should be forced to use SSL" -msgstr "" - -#: mod/admin.php:1305 -msgid "Force SSL" -msgstr "" - -#: mod/admin.php:1305 -msgid "" -"Force all Non-SSL requests to SSL - Attention: on some systems it could lead " -"to endless loops." -msgstr "" - -#: mod/admin.php:1306 -msgid "Hide help entry from navigation menu" -msgstr "" - -#: mod/admin.php:1306 -msgid "" -"Hides the menu entry for the Help pages from the navigation menu. You can " -"still access it calling /help directly." -msgstr "" - -#: mod/admin.php:1307 -msgid "Single user instance" -msgstr "" - -#: mod/admin.php:1307 -msgid "Make this instance multi-user or single-user for the named user" -msgstr "" - -#: mod/admin.php:1308 -msgid "Maximum image size" -msgstr "" - -#: mod/admin.php:1308 -msgid "" -"Maximum size in bytes of uploaded images. Default is 0, which means no " -"limits." -msgstr "" - -#: mod/admin.php:1309 -msgid "Maximum image length" -msgstr "" - -#: mod/admin.php:1309 -msgid "" -"Maximum length in pixels of the longest side of uploaded images. Default is " -"-1, which means no limits." -msgstr "" - -#: mod/admin.php:1310 -msgid "JPEG image quality" -msgstr "" - -#: mod/admin.php:1310 -msgid "" -"Uploaded JPEGS will be saved at this quality setting [0-100]. Default is " -"100, which is full quality." -msgstr "" - -#: mod/admin.php:1312 -msgid "Register policy" -msgstr "" - -#: mod/admin.php:1313 -msgid "Maximum Daily Registrations" -msgstr "" - -#: mod/admin.php:1313 -msgid "" -"If registration is permitted above, this sets the maximum number of new user " -"registrations to accept per day. If register is set to closed, this setting " -"has no effect." -msgstr "" - -#: mod/admin.php:1314 -msgid "Register text" -msgstr "" - -#: mod/admin.php:1314 -msgid "Will be displayed prominently on the registration page." -msgstr "" - -#: mod/admin.php:1315 -msgid "Accounts abandoned after x days" -msgstr "" - -#: mod/admin.php:1315 -msgid "" -"Will not waste system resources polling external sites for abandonded " -"accounts. Enter 0 for no time limit." -msgstr "" - -#: mod/admin.php:1316 -msgid "Allowed friend domains" -msgstr "" - -#: mod/admin.php:1316 -msgid "" -"Comma separated list of domains which are allowed to establish friendships " -"with this site. Wildcards are accepted. Empty to allow any domains" -msgstr "" - -#: mod/admin.php:1317 -msgid "Allowed email domains" -msgstr "" - -#: mod/admin.php:1317 -msgid "" -"Comma separated list of domains which are allowed in email addresses for " -"registrations to this site. Wildcards are accepted. Empty to allow any " -"domains" -msgstr "" - -#: mod/admin.php:1318 -msgid "No OEmbed rich content" -msgstr "" - -#: mod/admin.php:1318 -msgid "" -"Don't show the rich content (e.g. embedded PDF), except from the domains " -"listed below." -msgstr "" - -#: mod/admin.php:1319 -msgid "Allowed OEmbed domains" -msgstr "" - -#: mod/admin.php:1319 -msgid "" -"Comma separated list of domains which oembed content is allowed to be " -"displayed. Wildcards are accepted." -msgstr "" - -#: mod/admin.php:1320 -msgid "Block public" -msgstr "" - -#: mod/admin.php:1320 -msgid "" -"Check to block public access to all otherwise public personal pages on this " -"site unless you are currently logged in." -msgstr "" - -#: mod/admin.php:1321 -msgid "Force publish" -msgstr "" - -#: mod/admin.php:1321 -msgid "" -"Check to force all profiles on this site to be listed in the site directory." -msgstr "" - -#: mod/admin.php:1322 -msgid "Global directory URL" -msgstr "" - -#: mod/admin.php:1322 -msgid "" -"URL to the global directory. If this is not set, the global directory is " -"completely unavailable to the application." -msgstr "" - -#: mod/admin.php:1323 -msgid "Private posts by default for new users" -msgstr "" - -#: mod/admin.php:1323 -msgid "" -"Set default post permissions for all new members to the default privacy " -"group rather than public." -msgstr "" - -#: mod/admin.php:1324 -msgid "Don't include post content in email notifications" -msgstr "" - -#: mod/admin.php:1324 -msgid "" -"Don't include the content of a post/comment/private message/etc. in the " -"email notifications that are sent out from this site, as a privacy measure." -msgstr "" - -#: mod/admin.php:1325 -msgid "Disallow public access to addons listed in the apps menu." -msgstr "" - -#: mod/admin.php:1325 -msgid "" -"Checking this box will restrict addons listed in the apps menu to members " -"only." -msgstr "" - -#: mod/admin.php:1326 -msgid "Don't embed private images in posts" -msgstr "" - -#: mod/admin.php:1326 -msgid "" -"Don't replace locally-hosted private photos in posts with an embedded copy " -"of the image. This means that contacts who receive posts containing private " -"photos will have to authenticate and load each image, which may take a while." -msgstr "" - -#: mod/admin.php:1327 -msgid "Allow Users to set remote_self" -msgstr "" - -#: mod/admin.php:1327 -msgid "" -"With checking this, every user is allowed to mark every contact as a " -"remote_self in the repair contact dialog. Setting this flag on a contact " -"causes mirroring every posting of that contact in the users stream." -msgstr "" - -#: mod/admin.php:1328 -msgid "Block multiple registrations" -msgstr "" - -#: mod/admin.php:1328 -msgid "Disallow users to register additional accounts for use as pages." -msgstr "" - -#: mod/admin.php:1329 -msgid "OpenID support" -msgstr "" - -#: mod/admin.php:1329 -msgid "OpenID support for registration and logins." -msgstr "" - -#: mod/admin.php:1330 -msgid "Fullname check" -msgstr "" - -#: mod/admin.php:1330 -msgid "" -"Force users to register with a space between firstname and lastname in Full " -"name, as an antispam measure" -msgstr "" - -#: mod/admin.php:1331 -msgid "Community pages for visitors" -msgstr "" - -#: mod/admin.php:1331 -msgid "" -"Which community pages should be available for visitors. Local users always " -"see both pages." -msgstr "" - -#: mod/admin.php:1332 -msgid "Posts per user on community page" -msgstr "" - -#: mod/admin.php:1332 -msgid "" -"The maximum number of posts per user on the community page. (Not valid for " -"'Global Community')" -msgstr "" - -#: mod/admin.php:1333 -msgid "Enable OStatus support" -msgstr "" - -#: mod/admin.php:1333 -msgid "" -"Provide built-in OStatus (StatusNet, GNU Social etc.) compatibility. All " -"communications in OStatus are public, so privacy warnings will be " -"occasionally displayed." -msgstr "" - -#: mod/admin.php:1334 -msgid "Only import OStatus threads from our contacts" -msgstr "" - -#: mod/admin.php:1334 -msgid "" -"Normally we import every content from our OStatus contacts. With this option " -"we only store threads that are started by a contact that is known on our " -"system." -msgstr "" - -#: mod/admin.php:1335 -msgid "OStatus support can only be enabled if threading is enabled." -msgstr "" - -#: mod/admin.php:1337 -msgid "" -"Diaspora support can't be enabled because Friendica was installed into a sub " -"directory." -msgstr "" - -#: mod/admin.php:1338 -msgid "Enable Diaspora support" -msgstr "" - -#: mod/admin.php:1338 -msgid "Provide built-in Diaspora network compatibility." -msgstr "" - -#: mod/admin.php:1339 -msgid "Only allow Friendica contacts" -msgstr "" - -#: mod/admin.php:1339 -msgid "" -"All contacts must use Friendica protocols. All other built-in communication " -"protocols disabled." -msgstr "" - -#: mod/admin.php:1340 -msgid "Verify SSL" -msgstr "" - -#: mod/admin.php:1340 -msgid "" -"If you wish, you can turn on strict certificate checking. This will mean you " -"cannot connect (at all) to self-signed SSL sites." -msgstr "" - -#: mod/admin.php:1341 -msgid "Proxy user" -msgstr "" - -#: mod/admin.php:1342 -msgid "Proxy URL" -msgstr "" - -#: mod/admin.php:1343 -msgid "Network timeout" -msgstr "" - -#: mod/admin.php:1343 -msgid "Value is in seconds. Set to 0 for unlimited (not recommended)." -msgstr "" - -#: mod/admin.php:1344 -msgid "Maximum Load Average" -msgstr "" - -#: mod/admin.php:1344 -msgid "" -"Maximum system load before delivery and poll processes are deferred - " -"default 50." -msgstr "" - -#: mod/admin.php:1345 -msgid "Maximum Load Average (Frontend)" -msgstr "" - -#: mod/admin.php:1345 -msgid "Maximum system load before the frontend quits service - default 50." -msgstr "" - -#: mod/admin.php:1346 -msgid "Minimal Memory" -msgstr "" - -#: mod/admin.php:1346 -msgid "" -"Minimal free memory in MB for the worker. Needs access to /proc/meminfo - " -"default 0 (deactivated)." -msgstr "" - -#: mod/admin.php:1347 -msgid "Maximum table size for optimization" -msgstr "" - -#: mod/admin.php:1347 -msgid "" -"Maximum table size (in MB) for the automatic optimization - default 100 MB. " -"Enter -1 to disable it." -msgstr "" - -#: mod/admin.php:1348 -msgid "Minimum level of fragmentation" -msgstr "" - -#: mod/admin.php:1348 -msgid "" -"Minimum fragmenation level to start the automatic optimization - default " -"value is 30%." -msgstr "" - -#: mod/admin.php:1350 -msgid "Periodical check of global contacts" -msgstr "" - -#: mod/admin.php:1350 -msgid "" -"If enabled, the global contacts are checked periodically for missing or " -"outdated data and the vitality of the contacts and servers." -msgstr "" - -#: mod/admin.php:1351 -msgid "Days between requery" -msgstr "" - -#: mod/admin.php:1351 -msgid "Number of days after which a server is requeried for his contacts." -msgstr "" - -#: mod/admin.php:1352 -msgid "Discover contacts from other servers" -msgstr "" - -#: mod/admin.php:1352 -msgid "" -"Periodically query other servers for contacts. You can choose between " -"'users': the users on the remote system, 'Global Contacts': active contacts " -"that are known on the system. The fallback is meant for Redmatrix servers " -"and older friendica servers, where global contacts weren't available. The " -"fallback increases the server load, so the recommened setting is 'Users, " -"Global Contacts'." -msgstr "" - -#: mod/admin.php:1353 -msgid "Timeframe for fetching global contacts" -msgstr "" - -#: mod/admin.php:1353 -msgid "" -"When the discovery is activated, this value defines the timeframe for the " -"activity of the global contacts that are fetched from other servers." -msgstr "" - -#: mod/admin.php:1354 -msgid "Search the local directory" -msgstr "" - -#: mod/admin.php:1354 -msgid "" -"Search the local directory instead of the global directory. When searching " -"locally, every search will be executed on the global directory in the " -"background. This improves the search results when the search is repeated." -msgstr "" - -#: mod/admin.php:1356 -msgid "Publish server information" -msgstr "" - -#: mod/admin.php:1356 -msgid "" -"If enabled, general server and usage data will be published. The data " -"contains the name and version of the server, number of users with public " -"profiles, number of posts and the activated protocols and connectors. See the-federation.info for details." -msgstr "" - -#: mod/admin.php:1358 -msgid "Check upstream version" -msgstr "" - -#: mod/admin.php:1358 -msgid "" -"Enables checking for new Friendica versions at github. If there is a new " -"version, you will be informed in the admin panel overview." -msgstr "" - -#: mod/admin.php:1359 -msgid "Suppress Tags" -msgstr "" - -#: mod/admin.php:1359 -msgid "Suppress showing a list of hashtags at the end of the posting." -msgstr "" - -#: mod/admin.php:1360 -msgid "Path to item cache" -msgstr "" - -#: mod/admin.php:1360 -msgid "The item caches buffers generated bbcode and external images." -msgstr "" - -#: mod/admin.php:1361 -msgid "Cache duration in seconds" -msgstr "" - -#: mod/admin.php:1361 -msgid "" -"How long should the cache files be hold? Default value is 86400 seconds (One " -"day). To disable the item cache, set the value to -1." -msgstr "" - -#: mod/admin.php:1362 -msgid "Maximum numbers of comments per post" -msgstr "" - -#: mod/admin.php:1362 -msgid "How much comments should be shown for each post? Default value is 100." -msgstr "" - -#: mod/admin.php:1363 -msgid "Temp path" -msgstr "" - -#: mod/admin.php:1363 -msgid "" -"If you have a restricted system where the webserver can't access the system " -"temp path, enter another path here." -msgstr "" - -#: mod/admin.php:1364 -msgid "Base path to installation" -msgstr "" - -#: mod/admin.php:1364 -msgid "" -"If the system cannot detect the correct path to your installation, enter the " -"correct path here. This setting should only be set if you are using a " -"restricted system and symbolic links to your webroot." -msgstr "" - -#: mod/admin.php:1365 -msgid "Disable picture proxy" -msgstr "" - -#: mod/admin.php:1365 -msgid "" -"The picture proxy increases performance and privacy. It shouldn't be used on " -"systems with very low bandwith." -msgstr "" - -#: mod/admin.php:1366 -msgid "Only search in tags" -msgstr "" - -#: mod/admin.php:1366 -msgid "On large systems the text search can slow down the system extremely." -msgstr "" - -#: mod/admin.php:1368 -msgid "New base url" -msgstr "" - -#: mod/admin.php:1368 -msgid "" -"Change base url for this server. Sends relocate message to all Friendica and " -"Diaspora* contacts of all users." -msgstr "" - -#: mod/admin.php:1370 -msgid "RINO Encryption" -msgstr "" - -#: mod/admin.php:1370 -msgid "Encryption layer between nodes." -msgstr "" - -#: mod/admin.php:1370 -msgid "Enabled" -msgstr "" - -#: mod/admin.php:1372 -msgid "Maximum number of parallel workers" -msgstr "" - -#: mod/admin.php:1372 -msgid "" -"On shared hosters set this to 2. On larger systems, values of 10 are great. " -"Default value is 4." -msgstr "" - -#: mod/admin.php:1373 -msgid "Don't use 'proc_open' with the worker" -msgstr "" - -#: mod/admin.php:1373 -msgid "" -"Enable this if your system doesn't allow the use of 'proc_open'. This can " -"happen on shared hosters. If this is enabled you should increase the " -"frequency of worker calls in your crontab." -msgstr "" - -#: mod/admin.php:1374 -msgid "Enable fastlane" -msgstr "" - -#: mod/admin.php:1374 -msgid "" -"When enabed, the fastlane mechanism starts an additional worker if processes " -"with higher priority are blocked by processes of lower priority." -msgstr "" - -#: mod/admin.php:1375 -msgid "Enable frontend worker" -msgstr "" - -#: mod/admin.php:1375 -#, php-format -msgid "" -"When enabled the Worker process is triggered when backend access is " -"performed \\x28e.g. messages being delivered\\x29. On smaller sites you " -"might want to call %s/worker on a regular basis via an external cron job. " -"You should only enable this option if you cannot utilize cron/scheduled jobs " -"on your server." -msgstr "" - -#: mod/admin.php:1377 -msgid "Subscribe to relay" -msgstr "" - -#: mod/admin.php:1377 -msgid "" -"Enables the receiving of public posts from the relay. They will be included " -"in the search, subscribed tags and on the global community page." -msgstr "" - -#: mod/admin.php:1378 -msgid "Relay server" -msgstr "" - -#: mod/admin.php:1378 -msgid "" -"Address of the relay server where public posts should be send to. For " -"example https://relay.diasp.org" -msgstr "" - -#: mod/admin.php:1379 -msgid "Direct relay transfer" -msgstr "" - -#: mod/admin.php:1379 -msgid "" -"Enables the direct transfer to other servers without using the relay servers" -msgstr "" - -#: mod/admin.php:1380 -msgid "Relay scope" -msgstr "" - -#: mod/admin.php:1380 -msgid "" -"Can be 'all' or 'tags'. 'all' means that every public post should be " -"received. 'tags' means that only posts with selected tags should be received." -msgstr "" - -#: mod/admin.php:1380 -msgid "all" -msgstr "" - -#: mod/admin.php:1380 -msgid "tags" -msgstr "" - -#: mod/admin.php:1381 -msgid "Server tags" -msgstr "" - -#: mod/admin.php:1381 -msgid "Comma separated list of tags for the 'tags' subscription." -msgstr "" - -#: mod/admin.php:1382 -msgid "Allow user tags" -msgstr "" - -#: mod/admin.php:1382 -msgid "" -"If enabled, the tags from the saved searches will used for the 'tags' " -"subscription in addition to the 'relay_server_tags'." -msgstr "" - -#: mod/admin.php:1410 -msgid "Update has been marked successful" -msgstr "" - -#: mod/admin.php:1417 -#, php-format -msgid "Database structure update %s was successfully applied." -msgstr "" - -#: mod/admin.php:1420 -#, php-format -msgid "Executing of database structure update %s failed with error: %s" -msgstr "" - -#: mod/admin.php:1433 -#, php-format -msgid "Executing %s failed with error: %s" -msgstr "" - -#: mod/admin.php:1435 -#, php-format -msgid "Update %s was successfully applied." -msgstr "" - -#: mod/admin.php:1438 -#, php-format -msgid "Update %s did not return a status. Unknown if it succeeded." -msgstr "" - -#: mod/admin.php:1441 -#, php-format -msgid "There was no additional update function %s that needed to be called." -msgstr "" - -#: mod/admin.php:1461 -msgid "No failed updates." -msgstr "" - -#: mod/admin.php:1462 -msgid "Check database structure" -msgstr "" - -#: mod/admin.php:1467 -msgid "Failed Updates" -msgstr "" - -#: mod/admin.php:1468 -msgid "" -"This does not include updates prior to 1139, which did not return a status." -msgstr "" - -#: mod/admin.php:1469 -msgid "Mark success (if update was manually applied)" -msgstr "" - -#: mod/admin.php:1470 -msgid "Attempt to execute this update step automatically" -msgstr "" - -#: mod/admin.php:1509 -#, php-format -msgid "" -"\n" -"\t\t\tDear %1$s,\n" -"\t\t\t\tthe administrator of %2$s has set up an account for you." -msgstr "" - -#: mod/admin.php:1512 -#, php-format -msgid "" -"\n" -"\t\t\tThe login details are as follows:\n" -"\n" -"\t\t\tSite Location:\t%1$s\n" -"\t\t\tLogin Name:\t\t%2$s\n" -"\t\t\tPassword:\t\t%3$s\n" -"\n" -"\t\t\tYou may change your password from your account \"Settings\" page after " -"logging\n" -"\t\t\tin.\n" -"\n" -"\t\t\tPlease take a few moments to review the other account settings on that " -"page.\n" -"\n" -"\t\t\tYou may also wish to add some basic information to your default " -"profile\n" -"\t\t\t(on the \"Profiles\" page) so that other people can easily find you.\n" -"\n" -"\t\t\tWe recommend setting your full name, adding a profile photo,\n" -"\t\t\tadding some profile \"keywords\" (very useful in making new friends) - " -"and\n" -"\t\t\tperhaps what country you live in; if you do not wish to be more " -"specific\n" -"\t\t\tthan that.\n" -"\n" -"\t\t\tWe fully respect your right to privacy, and none of these items are " -"necessary.\n" -"\t\t\tIf you are new and do not know anybody here, they may help\n" -"\t\t\tyou to make some new and interesting friends.\n" -"\n" -"\t\t\tThank you and welcome to %4$s." -msgstr "" - -#: mod/admin.php:1544 src/Model/User.php:647 -#, php-format -msgid "Registration details for %s" -msgstr "" - -#: mod/admin.php:1554 -#, php-format -msgid "%s user blocked/unblocked" -msgid_plural "%s users blocked/unblocked" -msgstr[0] "" -msgstr[1] "" - -#: mod/admin.php:1560 -#, php-format -msgid "%s user deleted" -msgid_plural "%s users deleted" -msgstr[0] "" -msgstr[1] "" - -#: mod/admin.php:1607 -#, php-format -msgid "User '%s' deleted" -msgstr "" - -#: mod/admin.php:1615 -#, php-format -msgid "User '%s' unblocked" -msgstr "" - -#: mod/admin.php:1615 -#, php-format -msgid "User '%s' blocked" -msgstr "" - -#: mod/admin.php:1714 mod/admin.php:1726 mod/admin.php:1739 mod/admin.php:1757 -#: src/Content/ContactSelector.php:82 -msgid "Email" -msgstr "" - -#: mod/admin.php:1714 mod/admin.php:1739 -msgid "Register date" -msgstr "" - -#: mod/admin.php:1714 mod/admin.php:1739 -msgid "Last login" -msgstr "" - -#: mod/admin.php:1714 mod/admin.php:1739 -msgid "Last item" -msgstr "" - -#: mod/admin.php:1714 mod/settings.php:56 -msgid "Account" -msgstr "" - -#: mod/admin.php:1722 -msgid "Add User" -msgstr "" - -#: mod/admin.php:1724 -msgid "User registrations waiting for confirm" -msgstr "" - -#: mod/admin.php:1725 -msgid "User waiting for permanent deletion" -msgstr "" - -#: mod/admin.php:1726 -msgid "Request date" -msgstr "" - -#: mod/admin.php:1727 -msgid "No registrations." -msgstr "" - -#: mod/admin.php:1728 -msgid "Note from the user" -msgstr "" - -#: mod/admin.php:1730 -msgid "Deny" -msgstr "" - -#: mod/admin.php:1734 -msgid "Site admin" -msgstr "" - -#: mod/admin.php:1735 -msgid "Account expired" -msgstr "" - -#: mod/admin.php:1738 -msgid "New User" -msgstr "" - -#: mod/admin.php:1739 -msgid "Deleted since" -msgstr "" - -#: mod/admin.php:1744 -msgid "" -"Selected users will be deleted!\\n\\nEverything these users had posted on " -"this site will be permanently deleted!\\n\\nAre you sure?" -msgstr "" - -#: mod/admin.php:1745 -msgid "" -"The user {0} will be deleted!\\n\\nEverything this user has posted on this " -"site will be permanently deleted!\\n\\nAre you sure?" -msgstr "" - -#: mod/admin.php:1755 -msgid "Name of the new user." -msgstr "" - -#: mod/admin.php:1756 -msgid "Nickname" -msgstr "" - -#: mod/admin.php:1756 -msgid "Nickname of the new user." -msgstr "" - -#: mod/admin.php:1757 -msgid "Email address of the new user." -msgstr "" - -#: mod/admin.php:1799 -#, php-format -msgid "Addon %s disabled." -msgstr "" - -#: mod/admin.php:1803 -#, php-format -msgid "Addon %s enabled." -msgstr "" - -#: mod/admin.php:1813 mod/admin.php:2062 -msgid "Disable" -msgstr "" - -#: mod/admin.php:1816 mod/admin.php:2065 -msgid "Enable" -msgstr "" - -#: mod/admin.php:1838 mod/admin.php:2107 -msgid "Toggle" -msgstr "" - -#: mod/admin.php:1846 mod/admin.php:2116 -msgid "Author: " -msgstr "" - -#: mod/admin.php:1847 mod/admin.php:2117 -msgid "Maintainer: " -msgstr "" - -#: mod/admin.php:1899 -msgid "Reload active addons" -msgstr "" - -#: mod/admin.php:1904 -#, php-format -msgid "" -"There are currently no addons available on your node. You can find the " -"official addon repository at %1$s and might find other interesting addons in " -"the open addon registry at %2$s" -msgstr "" - -#: mod/admin.php:2024 -msgid "No themes found." -msgstr "" - -#: mod/admin.php:2098 -msgid "Screenshot" -msgstr "" - -#: mod/admin.php:2152 -msgid "Reload active themes" -msgstr "" - -#: mod/admin.php:2157 -#, php-format -msgid "No themes found on the system. They should be placed in %1$s" -msgstr "" - -#: mod/admin.php:2158 -msgid "[Experimental]" -msgstr "" - -#: mod/admin.php:2159 -msgid "[Unsupported]" -msgstr "" - -#: mod/admin.php:2183 -msgid "Log settings updated." -msgstr "" - -#: mod/admin.php:2215 -msgid "PHP log currently enabled." -msgstr "" - -#: mod/admin.php:2217 -msgid "PHP log currently disabled." -msgstr "" - -#: mod/admin.php:2226 -msgid "Clear" -msgstr "" - -#: mod/admin.php:2230 -msgid "Enable Debugging" -msgstr "" - -#: mod/admin.php:2231 -msgid "Log file" -msgstr "" - -#: mod/admin.php:2231 -msgid "" -"Must be writable by web server. Relative to your Friendica top-level " -"directory." -msgstr "" - -#: mod/admin.php:2232 -msgid "Log level" -msgstr "" - -#: mod/admin.php:2234 -msgid "PHP logging" -msgstr "" - -#: mod/admin.php:2235 -msgid "" -"To enable logging of PHP errors and warnings you can add the following to " -"the .htconfig.php file of your installation. The filename set in the " -"'error_log' line is relative to the friendica top-level directory and must " -"be writeable by the web server. The option '1' for 'log_errors' and " -"'display_errors' is to enable these options, set to '0' to disable them." -msgstr "" - -#: mod/admin.php:2266 -#, php-format -msgid "" -"Error trying to open %1$s log file.\\r\\n
    Check to see " -"if file %1$s exist and is readable." -msgstr "" - -#: mod/admin.php:2270 -#, php-format -msgid "" -"Couldn't open %1$s log file.\\r\\n
    Check to see if file " -"%1$s is readable." -msgstr "" - -#: mod/admin.php:2361 mod/admin.php:2362 mod/settings.php:775 -msgid "Off" -msgstr "" - -#: mod/admin.php:2361 mod/admin.php:2362 mod/settings.php:775 -msgid "On" -msgstr "" - -#: mod/admin.php:2362 -#, php-format -msgid "Lock feature %s" -msgstr "" - -#: mod/admin.php:2370 -msgid "Manage Additional Features" -msgstr "" - -#: mod/babel.php:22 -msgid "Source input" -msgstr "" - -#: mod/babel.php:28 -msgid "BBCode::convert (raw HTML(" -msgstr "" - -#: mod/babel.php:33 -msgid "BBCode::convert" -msgstr "" - -#: mod/babel.php:39 -msgid "BBCode::convert => HTML::toBBCode" -msgstr "" - -#: mod/babel.php:45 -msgid "BBCode::toMarkdown" -msgstr "" - -#: mod/babel.php:51 -msgid "BBCode::toMarkdown => Markdown::convert" -msgstr "" - -#: mod/babel.php:57 -msgid "BBCode::toMarkdown => Markdown::toBBCode" -msgstr "" - -#: mod/babel.php:63 -msgid "BBCode::toMarkdown => Markdown::convert => HTML::toBBCode" -msgstr "" - -#: mod/babel.php:70 -msgid "Source input \\x28Diaspora format\\x29" -msgstr "" - -#: mod/babel.php:76 -msgid "Markdown::toBBCode" -msgstr "" - -#: mod/babel.php:83 -msgid "Raw HTML input" -msgstr "" - -#: mod/babel.php:88 -msgid "HTML Input" -msgstr "" - -#: mod/babel.php:94 -msgid "HTML::toBBCode" -msgstr "" - -#: mod/babel.php:100 -msgid "HTML::toPlaintext" -msgstr "" - -#: mod/babel.php:108 -msgid "Source text" -msgstr "" - -#: mod/babel.php:109 -msgid "BBCode" -msgstr "" - -#: mod/babel.php:110 -msgid "Markdown" -msgstr "" - -#: mod/babel.php:111 -msgid "HTML" -msgstr "" - -#: mod/cal.php:274 mod/events.php:391 view/theme/frio/theme.php:263 -#: view/theme/frio/theme.php:267 src/Content/Nav.php:104 -#: src/Content/Nav.php:169 src/Model/Profile.php:924 src/Model/Profile.php:935 -msgid "Events" -msgstr "" - -#: mod/cal.php:275 mod/events.php:392 -msgid "View" -msgstr "" - -#: mod/cal.php:276 mod/events.php:394 -msgid "Previous" -msgstr "" - -#: mod/cal.php:277 mod/events.php:395 mod/install.php:209 -msgid "Next" -msgstr "" - -#: mod/cal.php:280 mod/events.php:400 src/Model/Event.php:412 -msgid "today" -msgstr "" - -#: mod/cal.php:281 mod/events.php:401 src/Util/Temporal.php:304 -#: src/Model/Event.php:413 -msgid "month" -msgstr "" - -#: mod/cal.php:282 mod/events.php:402 src/Util/Temporal.php:305 -#: src/Model/Event.php:414 -msgid "week" -msgstr "" - -#: mod/cal.php:283 mod/events.php:403 src/Util/Temporal.php:306 -#: src/Model/Event.php:415 -msgid "day" -msgstr "" - -#: mod/cal.php:284 mod/events.php:404 -msgid "list" -msgstr "" - -#: mod/cal.php:297 src/Model/User.php:204 -msgid "User not found" -msgstr "" - -#: mod/cal.php:313 -msgid "This calendar format is not supported" -msgstr "" - -#: mod/cal.php:315 -msgid "No exportable data found" -msgstr "" - -#: mod/cal.php:332 -msgid "calendar" -msgstr "" - #: mod/contacts.php:157 #, php-format msgid "%d contact edited." @@ -5366,6 +3438,11 @@ msgid "" "are taken from the meta header in the feed item and are posted as hash tags." msgstr "" +#: mod/contacts.php:572 mod/admin.php:1272 mod/admin.php:1435 +#: mod/admin.php:1445 +msgid "Disabled" +msgstr "" + #: mod/contacts.php:573 msgid "Fetch information" msgstr "" @@ -5437,6 +3514,16 @@ msgstr "" msgid "Update now" msgstr "" +#: mod/contacts.php:637 mod/contacts.php:827 mod/contacts.php:1011 +#: mod/admin.php:485 mod/admin.php:1800 +msgid "Unblock" +msgstr "" + +#: mod/contacts.php:637 mod/contacts.php:827 mod/contacts.php:1011 +#: mod/admin.php:484 mod/admin.php:1799 +msgid "Block" +msgstr "" + #: mod/contacts.php:638 mod/contacts.php:828 mod/contacts.php:1019 msgid "Unignore" msgstr "" @@ -5488,8 +3575,8 @@ msgstr "" msgid "Actions" msgstr "" -#: mod/contacts.php:669 mod/contacts.php:855 view/theme/frio/theme.php:259 -#: src/Content/Nav.php:100 src/Model/Profile.php:888 +#: mod/contacts.php:669 mod/contacts.php:855 src/Content/Nav.php:100 +#: src/Model/Profile.php:888 view/theme/frio/theme.php:259 msgid "Status" msgstr "" @@ -5553,7 +3640,7 @@ msgstr "" msgid "Search your contacts" msgstr "" -#: mod/contacts.php:820 mod/directory.php:210 src/Content/Widget.php:63 +#: mod/contacts.php:820 mod/directory.php:209 src/Content/Widget.php:63 msgid "Find" msgstr "" @@ -5573,7 +3660,7 @@ msgstr "" msgid "Batch Actions" msgstr "" -#: mod/contacts.php:858 mod/follow.php:183 mod/unfollow.php:132 +#: mod/contacts.php:858 mod/unfollow.php:132 mod/follow.php:186 #: src/Model/Profile.php:891 msgid "Status Messages and Posts" msgstr "" @@ -5590,6 +3677,11 @@ msgstr "" msgid "View all common friends" msgstr "" +#: mod/contacts.php:895 mod/events.php:532 mod/admin.php:1351 +#: src/Model/Profile.php:865 +msgid "Advanced" +msgstr "" + #: mod/contacts.php:898 msgid "Advanced Contact Settings" msgstr "" @@ -5649,6 +3741,13 @@ msgid "" "settings. Please double check whom you give this access." msgstr "" +#: mod/delegate.php:168 mod/settings.php:675 mod/settings.php:784 +#: mod/settings.php:870 mod/settings.php:959 mod/settings.php:1192 +#: mod/admin.php:307 mod/admin.php:1346 mod/admin.php:1965 mod/admin.php:2218 +#: mod/admin.php:2292 mod/admin.php:2439 +msgid "Save Settings" +msgstr "" + #: mod/delegate.php:169 src/Content/Nav.php:204 msgid "Delegate Page Management" msgstr "" @@ -5680,34 +3779,6 @@ msgstr "" msgid "No entries." msgstr "" -#: mod/directory.php:153 src/Model/Profile.php:421 src/Model/Profile.php:769 -msgid "Status:" -msgstr "" - -#: mod/directory.php:154 src/Model/Profile.php:422 src/Model/Profile.php:786 -msgid "Homepage:" -msgstr "" - -#: mod/directory.php:203 view/theme/vier/theme.php:201 -msgid "Global Directory" -msgstr "" - -#: mod/directory.php:205 -msgid "Find on this site" -msgstr "" - -#: mod/directory.php:207 -msgid "Results for:" -msgstr "" - -#: mod/directory.php:209 -msgid "Site Directory" -msgstr "" - -#: mod/directory.php:214 -msgid "No entries (some entries may be hidden)." -msgstr "" - #: mod/dirfind.php:49 #, php-format msgid "People Search - %s" @@ -5718,98 +3789,6 @@ msgstr "" msgid "Forum Search - %s" msgstr "" -#: mod/events.php:105 mod/events.php:107 -msgid "Event can not end before it has started." -msgstr "" - -#: mod/events.php:114 mod/events.php:116 -msgid "Event title and start time are required." -msgstr "" - -#: mod/events.php:393 -msgid "Create New Event" -msgstr "" - -#: mod/events.php:506 -msgid "Event details" -msgstr "" - -#: mod/events.php:507 -msgid "Starting date and Title are required." -msgstr "" - -#: mod/events.php:508 mod/events.php:509 -msgid "Event Starts:" -msgstr "" - -#: mod/events.php:508 mod/events.php:520 mod/profiles.php:699 -msgid "Required" -msgstr "" - -#: mod/events.php:510 mod/events.php:526 -msgid "Finish date/time is not known or not relevant" -msgstr "" - -#: mod/events.php:512 mod/events.php:513 -msgid "Event Finishes:" -msgstr "" - -#: mod/events.php:514 mod/events.php:527 -msgid "Adjust for viewer timezone" -msgstr "" - -#: mod/events.php:516 -msgid "Description:" -msgstr "" - -#: mod/events.php:520 mod/events.php:522 -msgid "Title:" -msgstr "" - -#: mod/events.php:523 mod/events.php:524 -msgid "Share this event" -msgstr "" - -#: mod/events.php:531 src/Model/Profile.php:864 -msgid "Basic" -msgstr "" - -#: mod/events.php:552 -msgid "Failed to remove event" -msgstr "" - -#: mod/events.php:554 -msgid "Event removed" -msgstr "" - -#: mod/feedtest.php:20 -msgid "You must be logged in to use this module" -msgstr "" - -#: mod/feedtest.php:48 -msgid "Source URL" -msgstr "" - -#: mod/follow.php:45 -msgid "The contact could not be added." -msgstr "" - -#: mod/follow.php:73 -msgid "You already added this contact." -msgstr "" - -#: mod/follow.php:83 -msgid "Diaspora support isn't enabled. Contact can't be added." -msgstr "" - -#: mod/follow.php:90 -msgid "OStatus support is disabled. Contact can't be added." -msgstr "" - -#: mod/follow.php:97 -msgid "The network type couldn't be detected. Contact can't be added." -msgstr "" - #: mod/install.php:114 msgid "Friendica Communications Server - Setup" msgstr "" @@ -5844,6 +3823,10 @@ msgstr "" msgid "System check" msgstr "" +#: mod/install.php:209 mod/cal.php:277 mod/events.php:395 +msgid "Next" +msgstr "" + #: mod/install.php:210 msgid "Check again" msgstr "" @@ -6166,40 +4149,6 @@ msgid "" "administrator email. This will allow you to enter the site admin panel." msgstr "" -#: mod/item.php:114 -msgid "Unable to locate original post." -msgstr "" - -#: mod/item.php:274 -msgid "Empty post discarded." -msgstr "" - -#: mod/item.php:799 -#, php-format -msgid "" -"This message was sent to you by %s, a member of the Friendica social network." -msgstr "" - -#: mod/item.php:801 -#, php-format -msgid "You may visit them online at %s" -msgstr "" - -#: mod/item.php:802 -msgid "" -"Please contact the sender by replying to this post if you do not wish to " -"receive these messages." -msgstr "" - -#: mod/item.php:806 -#, php-format -msgid "%s posted an update." -msgstr "" - -#: mod/oexchange.php:30 -msgid "Post successful." -msgstr "" - #: mod/ostatus_subscribe.php:21 msgid "Subscribing to OStatus contacts" msgstr "" @@ -6228,6 +4177,139 @@ msgstr "" msgid "ignored" msgstr "" +#: mod/unfollow.php:34 +msgid "Contact wasn't found or can't be unfollowed." +msgstr "" + +#: mod/unfollow.php:47 +msgid "Contact unfollowed" +msgstr "" + +#: mod/unfollow.php:73 +msgid "You aren't a friend of this contact." +msgstr "" + +#: mod/unfollow.php:79 +msgid "Unfollowing is currently not supported by your network." +msgstr "" + +#: mod/cal.php:274 mod/events.php:391 src/Content/Nav.php:104 +#: src/Content/Nav.php:169 src/Model/Profile.php:924 src/Model/Profile.php:935 +#: view/theme/frio/theme.php:263 view/theme/frio/theme.php:267 +msgid "Events" +msgstr "" + +#: mod/cal.php:275 mod/events.php:392 +msgid "View" +msgstr "" + +#: mod/cal.php:276 mod/events.php:394 +msgid "Previous" +msgstr "" + +#: mod/cal.php:280 mod/events.php:400 src/Model/Event.php:412 +msgid "today" +msgstr "" + +#: mod/cal.php:281 mod/events.php:401 src/Util/Temporal.php:304 +#: src/Model/Event.php:413 +msgid "month" +msgstr "" + +#: mod/cal.php:282 mod/events.php:402 src/Util/Temporal.php:305 +#: src/Model/Event.php:414 +msgid "week" +msgstr "" + +#: mod/cal.php:283 mod/events.php:403 src/Util/Temporal.php:306 +#: src/Model/Event.php:415 +msgid "day" +msgstr "" + +#: mod/cal.php:284 mod/events.php:404 +msgid "list" +msgstr "" + +#: mod/cal.php:297 src/Core/Console/NewPassword.php:74 src/Model/User.php:204 +msgid "User not found" +msgstr "" + +#: mod/cal.php:313 +msgid "This calendar format is not supported" +msgstr "" + +#: mod/cal.php:315 +msgid "No exportable data found" +msgstr "" + +#: mod/cal.php:332 +msgid "calendar" +msgstr "" + +#: mod/events.php:105 mod/events.php:107 +msgid "Event can not end before it has started." +msgstr "" + +#: mod/events.php:114 mod/events.php:116 +msgid "Event title and start time are required." +msgstr "" + +#: mod/events.php:393 +msgid "Create New Event" +msgstr "" + +#: mod/events.php:506 +msgid "Event details" +msgstr "" + +#: mod/events.php:507 +msgid "Starting date and Title are required." +msgstr "" + +#: mod/events.php:508 mod/events.php:509 +msgid "Event Starts:" +msgstr "" + +#: mod/events.php:508 mod/events.php:520 mod/profiles.php:700 +msgid "Required" +msgstr "" + +#: mod/events.php:510 mod/events.php:526 +msgid "Finish date/time is not known or not relevant" +msgstr "" + +#: mod/events.php:512 mod/events.php:513 +msgid "Event Finishes:" +msgstr "" + +#: mod/events.php:514 mod/events.php:527 +msgid "Adjust for viewer timezone" +msgstr "" + +#: mod/events.php:516 +msgid "Description:" +msgstr "" + +#: mod/events.php:520 mod/events.php:522 +msgid "Title:" +msgstr "" + +#: mod/events.php:523 mod/events.php:524 +msgid "Share this event" +msgstr "" + +#: mod/events.php:531 src/Model/Profile.php:864 +msgid "Basic" +msgstr "" + +#: mod/events.php:552 +msgid "Failed to remove event" +msgstr "" + +#: mod/events.php:554 +msgid "Event removed" +msgstr "" + #: mod/profile_photo.php:55 msgid "Image uploaded but image cropping failed." msgstr "" @@ -6284,347 +4366,12 @@ msgstr "" msgid "Image uploaded successfully." msgstr "" -#: mod/profiles.php:57 -msgid "Profile deleted." +#: mod/settings.php:56 mod/admin.php:1781 +msgid "Account" msgstr "" -#: mod/profiles.php:73 mod/profiles.php:109 -msgid "Profile-" -msgstr "" - -#: mod/profiles.php:92 mod/profiles.php:131 -msgid "New profile created." -msgstr "" - -#: mod/profiles.php:115 -msgid "Profile unavailable to clone." -msgstr "" - -#: mod/profiles.php:205 -msgid "Profile Name is required." -msgstr "" - -#: mod/profiles.php:346 -msgid "Marital Status" -msgstr "" - -#: mod/profiles.php:350 -msgid "Romantic Partner" -msgstr "" - -#: mod/profiles.php:362 -msgid "Work/Employment" -msgstr "" - -#: mod/profiles.php:365 -msgid "Religion" -msgstr "" - -#: mod/profiles.php:369 -msgid "Political Views" -msgstr "" - -#: mod/profiles.php:373 -msgid "Gender" -msgstr "" - -#: mod/profiles.php:377 -msgid "Sexual Preference" -msgstr "" - -#: mod/profiles.php:381 -msgid "XMPP" -msgstr "" - -#: mod/profiles.php:385 -msgid "Homepage" -msgstr "" - -#: mod/profiles.php:389 mod/profiles.php:685 -msgid "Interests" -msgstr "" - -#: mod/profiles.php:400 mod/profiles.php:681 -msgid "Location" -msgstr "" - -#: mod/profiles.php:485 -msgid "Profile updated." -msgstr "" - -#: mod/profiles.php:563 -msgid " and " -msgstr "" - -#: mod/profiles.php:572 -msgid "public profile" -msgstr "" - -#: mod/profiles.php:575 -#, php-format -msgid "%1$s changed %2$s to “%3$s”" -msgstr "" - -#: mod/profiles.php:576 -#, php-format -msgid " - Visit %1$s's %2$s" -msgstr "" - -#: mod/profiles.php:578 -#, php-format -msgid "%1$s has an updated %2$s, changing %3$s." -msgstr "" - -#: mod/profiles.php:632 -msgid "Hide contacts and friends:" -msgstr "" - -#: mod/profiles.php:637 -msgid "Hide your contact/friend list from viewers of this profile?" -msgstr "" - -#: mod/profiles.php:657 -msgid "Show more profile fields:" -msgstr "" - -#: mod/profiles.php:669 -msgid "Profile Actions" -msgstr "" - -#: mod/profiles.php:670 -msgid "Edit Profile Details" -msgstr "" - -#: mod/profiles.php:672 -msgid "Change Profile Photo" -msgstr "" - -#: mod/profiles.php:673 -msgid "View this profile" -msgstr "" - -#: mod/profiles.php:674 mod/profiles.php:769 src/Model/Profile.php:393 -msgid "Edit visibility" -msgstr "" - -#: mod/profiles.php:675 -msgid "Create a new profile using these settings" -msgstr "" - -#: mod/profiles.php:676 -msgid "Clone this profile" -msgstr "" - -#: mod/profiles.php:677 -msgid "Delete this profile" -msgstr "" - -#: mod/profiles.php:679 -msgid "Basic information" -msgstr "" - -#: mod/profiles.php:680 -msgid "Profile picture" -msgstr "" - -#: mod/profiles.php:682 -msgid "Preferences" -msgstr "" - -#: mod/profiles.php:683 -msgid "Status information" -msgstr "" - -#: mod/profiles.php:684 -msgid "Additional information" -msgstr "" - -#: mod/profiles.php:687 -msgid "Relation" -msgstr "" - -#: mod/profiles.php:688 src/Util/Temporal.php:81 src/Util/Temporal.php:83 -msgid "Miscellaneous" -msgstr "" - -#: mod/profiles.php:691 -msgid "Your Gender:" -msgstr "" - -#: mod/profiles.php:692 -msgid " Marital Status:" -msgstr "" - -#: mod/profiles.php:693 src/Model/Profile.php:782 -msgid "Sexual Preference:" -msgstr "" - -#: mod/profiles.php:694 -msgid "Example: fishing photography software" -msgstr "" - -#: mod/profiles.php:699 -msgid "Profile Name:" -msgstr "" - -#: mod/profiles.php:701 -msgid "" -"This is your public profile.
    It may " -"be visible to anybody using the internet." -msgstr "" - -#: mod/profiles.php:702 -msgid "Your Full Name:" -msgstr "" - -#: mod/profiles.php:703 -msgid "Title/Description:" -msgstr "" - -#: mod/profiles.php:706 -msgid "Street Address:" -msgstr "" - -#: mod/profiles.php:707 -msgid "Locality/City:" -msgstr "" - -#: mod/profiles.php:708 -msgid "Region/State:" -msgstr "" - -#: mod/profiles.php:709 -msgid "Postal/Zip Code:" -msgstr "" - -#: mod/profiles.php:710 -msgid "Country:" -msgstr "" - -#: mod/profiles.php:711 src/Util/Temporal.php:149 -msgid "Age: " -msgstr "" - -#: mod/profiles.php:714 -msgid "Who: (if applicable)" -msgstr "" - -#: mod/profiles.php:714 -msgid "Examples: cathy123, Cathy Williams, cathy@example.com" -msgstr "" - -#: mod/profiles.php:715 -msgid "Since [date]:" -msgstr "" - -#: mod/profiles.php:717 -msgid "Tell us about yourself..." -msgstr "" - -#: mod/profiles.php:718 -msgid "XMPP (Jabber) address:" -msgstr "" - -#: mod/profiles.php:718 -msgid "" -"The XMPP address will be propagated to your contacts so that they can follow " -"you." -msgstr "" - -#: mod/profiles.php:719 -msgid "Homepage URL:" -msgstr "" - -#: mod/profiles.php:720 src/Model/Profile.php:790 -msgid "Hometown:" -msgstr "" - -#: mod/profiles.php:721 src/Model/Profile.php:798 -msgid "Political Views:" -msgstr "" - -#: mod/profiles.php:722 -msgid "Religious Views:" -msgstr "" - -#: mod/profiles.php:723 -msgid "Public Keywords:" -msgstr "" - -#: mod/profiles.php:723 -msgid "(Used for suggesting potential friends, can be seen by others)" -msgstr "" - -#: mod/profiles.php:724 -msgid "Private Keywords:" -msgstr "" - -#: mod/profiles.php:724 -msgid "(Used for searching profiles, never shown to others)" -msgstr "" - -#: mod/profiles.php:725 src/Model/Profile.php:814 -msgid "Likes:" -msgstr "" - -#: mod/profiles.php:726 src/Model/Profile.php:818 -msgid "Dislikes:" -msgstr "" - -#: mod/profiles.php:727 -msgid "Musical interests" -msgstr "" - -#: mod/profiles.php:728 -msgid "Books, literature" -msgstr "" - -#: mod/profiles.php:729 -msgid "Television" -msgstr "" - -#: mod/profiles.php:730 -msgid "Film/dance/culture/entertainment" -msgstr "" - -#: mod/profiles.php:731 -msgid "Hobbies/Interests" -msgstr "" - -#: mod/profiles.php:732 -msgid "Love/romance" -msgstr "" - -#: mod/profiles.php:733 -msgid "Work/employment" -msgstr "" - -#: mod/profiles.php:734 -msgid "School/education" -msgstr "" - -#: mod/profiles.php:735 -msgid "Contact information and Social Networks" -msgstr "" - -#: mod/profiles.php:766 src/Model/Profile.php:389 -msgid "Profile Image" -msgstr "" - -#: mod/profiles.php:768 src/Model/Profile.php:392 -msgid "visible to everybody" -msgstr "" - -#: mod/profiles.php:775 -msgid "Edit/Manage Profiles" -msgstr "" - -#: mod/profiles.php:776 src/Model/Profile.php:379 src/Model/Profile.php:401 -msgid "Change profile photo" -msgstr "" - -#: mod/profiles.php:777 src/Model/Profile.php:380 -msgid "Create New Profile" +#: mod/settings.php:65 mod/admin.php:187 +msgid "Additional features" msgstr "" #: mod/settings.php:73 @@ -6635,6 +4382,10 @@ msgstr "" msgid "Social Networks" msgstr "" +#: mod/settings.php:87 mod/admin.php:185 mod/admin.php:1904 mod/admin.php:1964 +msgid "Addons" +msgstr "" + #: mod/settings.php:94 src/Content/Nav.php:204 msgid "Delegations" msgstr "" @@ -6675,7 +4426,7 @@ msgstr "" msgid "Empty passwords are not allowed. Password unchanged." msgstr "" -#: mod/settings.php:394 +#: mod/settings.php:394 src/Core/Console/NewPassword.php:78 msgid "" "The new password has been exposed in a public data dump, please choose " "another." @@ -6685,11 +4436,11 @@ msgstr "" msgid "Wrong password." msgstr "" -#: mod/settings.php:407 +#: mod/settings.php:407 src/Core/Console/NewPassword.php:85 msgid "Password changed." msgstr "" -#: mod/settings.php:409 +#: mod/settings.php:409 src/Core/Console/NewPassword.php:82 msgid "Password update failed. Please try again." msgstr "" @@ -6777,6 +4528,14 @@ msgstr "" msgid "Addon Settings" msgstr "" +#: mod/settings.php:775 mod/admin.php:2428 mod/admin.php:2429 +msgid "Off" +msgstr "" + +#: mod/settings.php:775 mod/admin.php:2428 mod/admin.php:2429 +msgid "On" +msgstr "" + #: mod/settings.php:782 msgid "Additional Features" msgstr "" @@ -6913,6 +4672,10 @@ msgstr "" msgid "Move to folder:" msgstr "" +#: mod/settings.php:903 mod/admin.php:1236 +msgid "No special theme for mobile devices" +msgstr "" + #: mod/settings.php:912 #, php-format msgid "%s - (Unsupported)" @@ -7273,6 +5036,14 @@ msgstr "" msgid "Password Settings" msgstr "" +#: mod/settings.php:1199 mod/register.php:273 +msgid "New Password:" +msgstr "" + +#: mod/settings.php:1200 mod/register.php:274 +msgid "Confirm:" +msgstr "" + #: mod/settings.php:1200 msgid "Leave password fields blank unless changing" msgstr "" @@ -7463,284 +5234,2321 @@ msgstr "" msgid "Resend relocate message to contacts" msgstr "" -#: mod/unfollow.php:34 -msgid "Contact wasn't found or can't be unfollowed." +#: mod/directory.php:152 src/Model/Profile.php:421 src/Model/Profile.php:769 +msgid "Status:" msgstr "" -#: mod/unfollow.php:47 -msgid "Contact unfollowed" +#: mod/directory.php:153 src/Model/Profile.php:422 src/Model/Profile.php:786 +msgid "Homepage:" msgstr "" -#: mod/unfollow.php:73 -msgid "You aren't a friend of this contact." +#: mod/directory.php:202 view/theme/vier/theme.php:201 +msgid "Global Directory" msgstr "" -#: mod/unfollow.php:79 -msgid "Unfollowing is currently not supported by your network." +#: mod/directory.php:204 +msgid "Find on this site" msgstr "" -#: view/theme/duepuntozero/config.php:54 src/Model/User.php:488 -msgid "default" +#: mod/directory.php:206 +msgid "Results for:" msgstr "" -#: view/theme/duepuntozero/config.php:55 -msgid "greenzero" +#: mod/directory.php:208 +msgid "Site Directory" msgstr "" -#: view/theme/duepuntozero/config.php:56 -msgid "purplezero" +#: mod/directory.php:213 +msgid "No entries (some entries may be hidden)." msgstr "" -#: view/theme/duepuntozero/config.php:57 -msgid "easterbunny" +#: mod/babel.php:22 +msgid "Source input" msgstr "" -#: view/theme/duepuntozero/config.php:58 -msgid "darkzero" +#: mod/babel.php:28 +msgid "BBCode::convert (raw HTML)" msgstr "" -#: view/theme/duepuntozero/config.php:59 -msgid "comix" +#: mod/babel.php:33 +msgid "BBCode::convert" msgstr "" -#: view/theme/duepuntozero/config.php:60 -msgid "slackr" +#: mod/babel.php:39 +msgid "BBCode::convert => HTML::toBBCode" msgstr "" -#: view/theme/duepuntozero/config.php:74 -msgid "Variations" +#: mod/babel.php:45 +msgid "BBCode::toMarkdown" msgstr "" -#: view/theme/frio/php/Image.php:25 -msgid "Repeat the image" +#: mod/babel.php:51 +msgid "BBCode::toMarkdown => Markdown::convert" msgstr "" -#: view/theme/frio/php/Image.php:25 -msgid "Will repeat your image to fill the background." +#: mod/babel.php:57 +msgid "BBCode::toMarkdown => Markdown::toBBCode" msgstr "" -#: view/theme/frio/php/Image.php:27 -msgid "Stretch" +#: mod/babel.php:63 +msgid "BBCode::toMarkdown => Markdown::convert => HTML::toBBCode" msgstr "" -#: view/theme/frio/php/Image.php:27 -msgid "Will stretch to width/height of the image." +#: mod/babel.php:70 +msgid "Source input \\x28Diaspora format\\x29" msgstr "" -#: view/theme/frio/php/Image.php:29 -msgid "Resize fill and-clip" +#: mod/babel.php:76 +msgid "Markdown::toBBCode" msgstr "" -#: view/theme/frio/php/Image.php:29 -msgid "Resize to fill and retain aspect ratio." +#: mod/babel.php:83 +msgid "Raw HTML input" msgstr "" -#: view/theme/frio/php/Image.php:31 -msgid "Resize best fit" +#: mod/babel.php:88 +msgid "HTML Input" msgstr "" -#: view/theme/frio/php/Image.php:31 -msgid "Resize to best fit and retain aspect ratio." +#: mod/babel.php:94 +msgid "HTML::toBBCode" msgstr "" -#: view/theme/frio/config.php:97 -msgid "Default" +#: mod/babel.php:100 +msgid "HTML::toPlaintext" msgstr "" -#: view/theme/frio/config.php:109 -msgid "Note" +#: mod/babel.php:108 +msgid "Source text" msgstr "" -#: view/theme/frio/config.php:109 -msgid "Check image permissions if all users are allowed to visit the image" +#: mod/babel.php:109 +msgid "BBCode" msgstr "" -#: view/theme/frio/config.php:116 -msgid "Select scheme" +#: mod/babel.php:110 +msgid "Markdown" msgstr "" -#: view/theme/frio/config.php:117 -msgid "Navigation bar background color" +#: mod/babel.php:111 +msgid "HTML" msgstr "" -#: view/theme/frio/config.php:118 -msgid "Navigation bar icon color " +#: mod/follow.php:45 +msgid "The contact could not be added." msgstr "" -#: view/theme/frio/config.php:119 -msgid "Link color" +#: mod/follow.php:73 +msgid "You already added this contact." msgstr "" -#: view/theme/frio/config.php:120 -msgid "Set the background color" +#: mod/follow.php:83 +msgid "Diaspora support isn't enabled. Contact can't be added." msgstr "" -#: view/theme/frio/config.php:121 -msgid "Content background opacity" +#: mod/follow.php:90 +msgid "OStatus support is disabled. Contact can't be added." msgstr "" -#: view/theme/frio/config.php:122 -msgid "Set the background image" +#: mod/follow.php:97 +msgid "The network type couldn't be detected. Contact can't be added." msgstr "" -#: view/theme/frio/config.php:127 -msgid "Login page background image" +#: mod/profiles.php:58 +msgid "Profile deleted." msgstr "" -#: view/theme/frio/config.php:130 -msgid "Login page background color" +#: mod/profiles.php:74 mod/profiles.php:110 +msgid "Profile-" msgstr "" -#: view/theme/frio/config.php:130 -msgid "Leave background image and color empty for theme defaults" +#: mod/profiles.php:93 mod/profiles.php:132 +msgid "New profile created." msgstr "" -#: view/theme/frio/theme.php:238 -msgid "Guest" +#: mod/profiles.php:116 +msgid "Profile unavailable to clone." msgstr "" -#: view/theme/frio/theme.php:243 -msgid "Visitor" +#: mod/profiles.php:206 +msgid "Profile Name is required." msgstr "" -#: view/theme/frio/theme.php:256 src/Content/Nav.php:97 -#: src/Module/Login.php:311 -msgid "Logout" +#: mod/profiles.php:347 +msgid "Marital Status" msgstr "" -#: view/theme/frio/theme.php:256 src/Content/Nav.php:97 -msgid "End this session" +#: mod/profiles.php:351 +msgid "Romantic Partner" msgstr "" -#: view/theme/frio/theme.php:259 src/Content/Nav.php:100 -#: src/Content/Nav.php:181 -msgid "Your posts and conversations" +#: mod/profiles.php:363 +msgid "Work/Employment" msgstr "" -#: view/theme/frio/theme.php:260 src/Content/Nav.php:101 -msgid "Your profile page" +#: mod/profiles.php:366 +msgid "Religion" msgstr "" -#: view/theme/frio/theme.php:261 src/Content/Nav.php:102 -msgid "Your photos" +#: mod/profiles.php:370 +msgid "Political Views" msgstr "" -#: view/theme/frio/theme.php:262 src/Content/Nav.php:103 -#: src/Model/Profile.php:912 src/Model/Profile.php:915 -msgid "Videos" +#: mod/profiles.php:374 +msgid "Gender" msgstr "" -#: view/theme/frio/theme.php:262 src/Content/Nav.php:103 -msgid "Your videos" +#: mod/profiles.php:378 +msgid "Sexual Preference" msgstr "" -#: view/theme/frio/theme.php:263 src/Content/Nav.php:104 -msgid "Your events" +#: mod/profiles.php:382 +msgid "XMPP" msgstr "" -#: view/theme/frio/theme.php:266 src/Content/Nav.php:178 -msgid "Conversations from your friends" +#: mod/profiles.php:386 +msgid "Homepage" msgstr "" -#: view/theme/frio/theme.php:267 src/Content/Nav.php:169 -#: src/Model/Profile.php:927 src/Model/Profile.php:938 -msgid "Events and Calendar" +#: mod/profiles.php:390 mod/profiles.php:686 +msgid "Interests" msgstr "" -#: view/theme/frio/theme.php:268 src/Content/Nav.php:195 -msgid "Private mail" +#: mod/profiles.php:394 mod/admin.php:490 +msgid "Address" msgstr "" -#: view/theme/frio/theme.php:269 src/Content/Nav.php:206 -msgid "Account settings" +#: mod/profiles.php:401 mod/profiles.php:682 +msgid "Location" msgstr "" -#: view/theme/frio/theme.php:270 src/Content/Nav.php:212 -msgid "Manage/edit friends and contacts" +#: mod/profiles.php:486 +msgid "Profile updated." msgstr "" -#: view/theme/quattro/config.php:76 -msgid "Alignment" +#: mod/profiles.php:564 +msgid " and " msgstr "" -#: view/theme/quattro/config.php:76 -msgid "Left" +#: mod/profiles.php:573 +msgid "public profile" msgstr "" -#: view/theme/quattro/config.php:76 -msgid "Center" +#: mod/profiles.php:576 +#, php-format +msgid "%1$s changed %2$s to “%3$s”" msgstr "" -#: view/theme/quattro/config.php:77 -msgid "Color scheme" +#: mod/profiles.php:577 +#, php-format +msgid " - Visit %1$s's %2$s" msgstr "" -#: view/theme/quattro/config.php:78 -msgid "Posts font size" +#: mod/profiles.php:579 +#, php-format +msgid "%1$s has an updated %2$s, changing %3$s." msgstr "" -#: view/theme/quattro/config.php:79 -msgid "Textareas font size" +#: mod/profiles.php:633 +msgid "Hide contacts and friends:" msgstr "" -#: view/theme/vier/config.php:75 -msgid "Comma separated list of helper forums" +#: mod/profiles.php:638 +msgid "Hide your contact/friend list from viewers of this profile?" msgstr "" -#: view/theme/vier/config.php:115 src/Core/ACL.php:309 -msgid "don't show" +#: mod/profiles.php:658 +msgid "Show more profile fields:" msgstr "" -#: view/theme/vier/config.php:115 src/Core/ACL.php:308 -msgid "show" +#: mod/profiles.php:670 +msgid "Profile Actions" msgstr "" -#: view/theme/vier/config.php:122 -msgid "Set style" +#: mod/profiles.php:671 +msgid "Edit Profile Details" msgstr "" -#: view/theme/vier/config.php:123 -msgid "Community Pages" +#: mod/profiles.php:673 +msgid "Change Profile Photo" msgstr "" -#: view/theme/vier/config.php:124 view/theme/vier/theme.php:150 -msgid "Community Profiles" +#: mod/profiles.php:674 +msgid "View this profile" msgstr "" -#: view/theme/vier/config.php:125 -msgid "Help or @NewHere ?" +#: mod/profiles.php:675 mod/profiles.php:770 src/Model/Profile.php:393 +msgid "Edit visibility" msgstr "" -#: view/theme/vier/config.php:126 view/theme/vier/theme.php:389 -msgid "Connect Services" +#: mod/profiles.php:676 +msgid "Create a new profile using these settings" msgstr "" -#: view/theme/vier/config.php:127 view/theme/vier/theme.php:199 -msgid "Find Friends" +#: mod/profiles.php:677 +msgid "Clone this profile" msgstr "" -#: view/theme/vier/config.php:128 view/theme/vier/theme.php:181 -msgid "Last users" +#: mod/profiles.php:678 +msgid "Delete this profile" msgstr "" -#: view/theme/vier/theme.php:200 -msgid "Local Directory" +#: mod/profiles.php:680 +msgid "Basic information" msgstr "" -#: view/theme/vier/theme.php:202 src/Content/Widget.php:65 -msgid "Similar Interests" +#: mod/profiles.php:681 +msgid "Profile picture" msgstr "" -#: view/theme/vier/theme.php:204 src/Content/Widget.php:67 -msgid "Invite Friends" +#: mod/profiles.php:683 +msgid "Preferences" msgstr "" -#: view/theme/vier/theme.php:256 src/Content/ForumManager.php:127 -msgid "External link to forum" +#: mod/profiles.php:684 +msgid "Status information" msgstr "" -#: view/theme/vier/theme.php:292 -msgid "Quick Start" +#: mod/profiles.php:685 +msgid "Additional information" +msgstr "" + +#: mod/profiles.php:688 +msgid "Relation" +msgstr "" + +#: mod/profiles.php:689 src/Util/Temporal.php:81 src/Util/Temporal.php:83 +msgid "Miscellaneous" +msgstr "" + +#: mod/profiles.php:692 +msgid "Your Gender:" +msgstr "" + +#: mod/profiles.php:693 +msgid " Marital Status:" +msgstr "" + +#: mod/profiles.php:694 src/Model/Profile.php:782 +msgid "Sexual Preference:" +msgstr "" + +#: mod/profiles.php:695 +msgid "Example: fishing photography software" +msgstr "" + +#: mod/profiles.php:700 +msgid "Profile Name:" +msgstr "" + +#: mod/profiles.php:702 +msgid "" +"This is your public profile.
    It may " +"be visible to anybody using the internet." +msgstr "" + +#: mod/profiles.php:703 +msgid "Your Full Name:" +msgstr "" + +#: mod/profiles.php:704 +msgid "Title/Description:" +msgstr "" + +#: mod/profiles.php:707 +msgid "Street Address:" +msgstr "" + +#: mod/profiles.php:708 +msgid "Locality/City:" +msgstr "" + +#: mod/profiles.php:709 +msgid "Region/State:" +msgstr "" + +#: mod/profiles.php:710 +msgid "Postal/Zip Code:" +msgstr "" + +#: mod/profiles.php:711 +msgid "Country:" +msgstr "" + +#: mod/profiles.php:712 src/Util/Temporal.php:149 +msgid "Age: " +msgstr "" + +#: mod/profiles.php:715 +msgid "Who: (if applicable)" +msgstr "" + +#: mod/profiles.php:715 +msgid "Examples: cathy123, Cathy Williams, cathy@example.com" +msgstr "" + +#: mod/profiles.php:716 +msgid "Since [date]:" +msgstr "" + +#: mod/profiles.php:718 +msgid "Tell us about yourself..." +msgstr "" + +#: mod/profiles.php:719 +msgid "XMPP (Jabber) address:" +msgstr "" + +#: mod/profiles.php:719 +msgid "" +"The XMPP address will be propagated to your contacts so that they can follow " +"you." +msgstr "" + +#: mod/profiles.php:720 +msgid "Homepage URL:" +msgstr "" + +#: mod/profiles.php:721 src/Model/Profile.php:790 +msgid "Hometown:" +msgstr "" + +#: mod/profiles.php:722 src/Model/Profile.php:798 +msgid "Political Views:" +msgstr "" + +#: mod/profiles.php:723 +msgid "Religious Views:" +msgstr "" + +#: mod/profiles.php:724 +msgid "Public Keywords:" +msgstr "" + +#: mod/profiles.php:724 +msgid "(Used for suggesting potential friends, can be seen by others)" +msgstr "" + +#: mod/profiles.php:725 +msgid "Private Keywords:" +msgstr "" + +#: mod/profiles.php:725 +msgid "(Used for searching profiles, never shown to others)" +msgstr "" + +#: mod/profiles.php:726 src/Model/Profile.php:814 +msgid "Likes:" +msgstr "" + +#: mod/profiles.php:727 src/Model/Profile.php:818 +msgid "Dislikes:" +msgstr "" + +#: mod/profiles.php:728 +msgid "Musical interests" +msgstr "" + +#: mod/profiles.php:729 +msgid "Books, literature" +msgstr "" + +#: mod/profiles.php:730 +msgid "Television" +msgstr "" + +#: mod/profiles.php:731 +msgid "Film/dance/culture/entertainment" +msgstr "" + +#: mod/profiles.php:732 +msgid "Hobbies/Interests" +msgstr "" + +#: mod/profiles.php:733 +msgid "Love/romance" +msgstr "" + +#: mod/profiles.php:734 +msgid "Work/employment" +msgstr "" + +#: mod/profiles.php:735 +msgid "School/education" +msgstr "" + +#: mod/profiles.php:736 +msgid "Contact information and Social Networks" +msgstr "" + +#: mod/profiles.php:767 src/Model/Profile.php:389 +msgid "Profile Image" +msgstr "" + +#: mod/profiles.php:769 src/Model/Profile.php:392 +msgid "visible to everybody" +msgstr "" + +#: mod/profiles.php:776 +msgid "Edit/Manage Profiles" +msgstr "" + +#: mod/profiles.php:777 src/Model/Profile.php:379 src/Model/Profile.php:401 +msgid "Change profile photo" +msgstr "" + +#: mod/profiles.php:778 src/Model/Profile.php:380 +msgid "Create New Profile" +msgstr "" + +#: mod/tos.php:29 mod/register.php:288 mod/admin.php:188 mod/admin.php:302 +msgid "Terms of Service" +msgstr "" + +#: mod/tos.php:32 +msgid "Privacy Statement" +msgstr "" + +#: mod/tos.php:33 +msgid "" +"At the time of registration, and for providing communications between the " +"user account and their contacts, the user has to provide a display name (pen " +"name), a nickname and a working email address. The names will be accessible " +"on the profile page of the account by any visitor of the page even if other " +"profile details are not displayed. The email address will only be used to " +"send the user notifications about interactions, but wont be visibly " +"displayed. The listing of an account in the nodes user directory or the " +"global user directory is optional and can be controlled in the user " +"settings, it is not necessary for communication." +msgstr "" + +#: mod/tos.php:34 +#, php-format +msgid "" +"At any point in time a logged in user can export their account data from the " +"account settings. If the user wants to " +"delete their account they can do so at %1$s. The " +"deletion of the account will be permanent." +msgstr "" + +#: mod/register.php:99 +msgid "" +"Registration successful. Please check your email for further instructions." +msgstr "" + +#: mod/register.php:103 +#, php-format +msgid "" +"Failed to send email message. Here your accout details:
    login: %s
    " +"password: %s

    You can change your password after login." +msgstr "" + +#: mod/register.php:110 +msgid "Registration successful." +msgstr "" + +#: mod/register.php:115 +msgid "Your registration can not be processed." +msgstr "" + +#: mod/register.php:162 +msgid "Your registration is pending approval by the site owner." +msgstr "" + +#: mod/register.php:220 +msgid "" +"You may (optionally) fill in this form via OpenID by supplying your OpenID " +"and clicking 'Register'." +msgstr "" + +#: mod/register.php:221 +msgid "" +"If you are not familiar with OpenID, please leave that field blank and fill " +"in the rest of the items." +msgstr "" + +#: mod/register.php:222 +msgid "Your OpenID (optional): " +msgstr "" + +#: mod/register.php:234 +msgid "Include your profile in member directory?" +msgstr "" + +#: mod/register.php:259 +msgid "Note for the admin" +msgstr "" + +#: mod/register.php:259 +msgid "Leave a message for the admin, why you want to join this node" +msgstr "" + +#: mod/register.php:260 +msgid "Membership on this site is by invitation only." +msgstr "" + +#: mod/register.php:261 +msgid "Your invitation code: " +msgstr "" + +#: mod/register.php:264 mod/admin.php:1348 +msgid "Registration" +msgstr "" + +#: mod/register.php:270 +msgid "Your Full Name (e.g. Joe Smith, real or real-looking): " +msgstr "" + +#: mod/register.php:271 +msgid "" +"Your Email Address: (Initial information will be send there, so this has to " +"be an existing address.)" +msgstr "" + +#: mod/register.php:273 +msgid "Leave empty for an auto generated password." +msgstr "" + +#: mod/register.php:275 +#, php-format +msgid "" +"Choose a profile nickname. This must begin with a text character. Your " +"profile address on this site will then be 'nickname@%s'." +msgstr "" + +#: mod/register.php:276 +msgid "Choose a nickname: " +msgstr "" + +#: mod/register.php:279 src/Content/Nav.php:128 src/Module/Login.php:283 +msgid "Register" +msgstr "" + +#: mod/register.php:286 +msgid "Import your profile to this friendica instance" +msgstr "" + +#: mod/friendica.php:77 +msgid "This is Friendica, version" +msgstr "" + +#: mod/friendica.php:78 +msgid "running at web location" +msgstr "" + +#: mod/friendica.php:82 +msgid "" +"Please visit Friendi.ca to learn more " +"about the Friendica project." +msgstr "" + +#: mod/friendica.php:86 +msgid "Bug reports and issues: please visit" +msgstr "" + +#: mod/friendica.php:86 +msgid "the bugtracker at github" +msgstr "" + +#: mod/friendica.php:89 +msgid "" +"Suggestions, praise, donations, etc. - please email \"Info\" at Friendica - " +"dot com" +msgstr "" + +#: mod/friendica.php:103 +msgid "Installed addons/apps:" +msgstr "" + +#: mod/friendica.php:117 +msgid "No installed addons/apps" +msgstr "" + +#: mod/friendica.php:122 +#, php-format +msgid "Read about the Terms of Service of this node." +msgstr "" + +#: mod/friendica.php:127 +msgid "On this server the following remote servers are blocked." +msgstr "" + +#: mod/friendica.php:128 mod/admin.php:354 mod/admin.php:372 +msgid "Reason for the block" +msgstr "" + +#: mod/admin.php:106 +msgid "Theme settings updated." +msgstr "" + +#: mod/admin.php:179 src/Content/Nav.php:174 +msgid "Information" +msgstr "" + +#: mod/admin.php:180 +msgid "Overview" +msgstr "" + +#: mod/admin.php:181 mod/admin.php:718 +msgid "Federation Statistics" +msgstr "" + +#: mod/admin.php:182 +msgid "Configuration" +msgstr "" + +#: mod/admin.php:183 mod/admin.php:1345 +msgid "Site" +msgstr "" + +#: mod/admin.php:184 mod/admin.php:1273 mod/admin.php:1788 mod/admin.php:1804 +msgid "Users" +msgstr "" + +#: mod/admin.php:186 mod/admin.php:2173 mod/admin.php:2217 +msgid "Themes" +msgstr "" + +#: mod/admin.php:189 +msgid "Database" +msgstr "" + +#: mod/admin.php:190 +msgid "DB updates" +msgstr "" + +#: mod/admin.php:191 mod/admin.php:753 +msgid "Inspect Queue" +msgstr "" + +#: mod/admin.php:192 +msgid "Tools" +msgstr "" + +#: mod/admin.php:193 +msgid "Contact Blocklist" +msgstr "" + +#: mod/admin.php:194 mod/admin.php:362 +msgid "Server Blocklist" +msgstr "" + +#: mod/admin.php:195 mod/admin.php:521 +msgid "Delete Item" +msgstr "" + +#: mod/admin.php:196 mod/admin.php:197 mod/admin.php:2291 +msgid "Logs" +msgstr "" + +#: mod/admin.php:198 mod/admin.php:2358 +msgid "View Logs" +msgstr "" + +#: mod/admin.php:200 +msgid "Diagnostics" +msgstr "" + +#: mod/admin.php:201 +msgid "PHP Info" +msgstr "" + +#: mod/admin.php:202 +msgid "probe address" +msgstr "" + +#: mod/admin.php:203 +msgid "check webfinger" +msgstr "" + +#: mod/admin.php:222 src/Content/Nav.php:217 +msgid "Admin" +msgstr "" + +#: mod/admin.php:223 +msgid "Addon Features" +msgstr "" + +#: mod/admin.php:224 +msgid "User registrations waiting for confirmation" +msgstr "" + +#: mod/admin.php:301 mod/admin.php:361 mod/admin.php:478 mod/admin.php:520 +#: mod/admin.php:717 mod/admin.php:752 mod/admin.php:848 mod/admin.php:1344 +#: mod/admin.php:1787 mod/admin.php:1903 mod/admin.php:1963 mod/admin.php:2172 +#: mod/admin.php:2216 mod/admin.php:2290 mod/admin.php:2357 +msgid "Administration" +msgstr "" + +#: mod/admin.php:303 +msgid "Display Terms of Service" +msgstr "" + +#: mod/admin.php:303 +msgid "" +"Enable the Terms of Service page. If this is enabled a link to the terms " +"will be added to the registration form and the general information page." +msgstr "" + +#: mod/admin.php:304 +msgid "Display Privacy Statement" +msgstr "" + +#: mod/admin.php:304 +#, php-format +msgid "" +"Show some informations regarding the needed information to operate the node " +"according e.g. to EU-GDPR." +msgstr "" + +#: mod/admin.php:305 +msgid "The Terms of Usage" +msgstr "" + +#: mod/admin.php:305 +msgid "" +"Enter the Terms of Service for your node here. You can use BBCode. Headers " +"of sections should be [h2] and below." +msgstr "" + +#: mod/admin.php:353 +msgid "The blocked domain" +msgstr "" + +#: mod/admin.php:354 mod/admin.php:367 +msgid "The reason why you blocked this domain." +msgstr "" + +#: mod/admin.php:355 +msgid "Delete domain" +msgstr "" + +#: mod/admin.php:355 +msgid "Check to delete this entry from the blocklist" +msgstr "" + +#: mod/admin.php:363 +msgid "" +"This page can be used to define a black list of servers from the federated " +"network that are not allowed to interact with your node. For all entered " +"domains you should also give a reason why you have blocked the remote server." +msgstr "" + +#: mod/admin.php:364 +msgid "" +"The list of blocked servers will be made publically available on the /" +"friendica page so that your users and people investigating communication " +"problems can find the reason easily." +msgstr "" + +#: mod/admin.php:365 +msgid "Add new entry to block list" +msgstr "" + +#: mod/admin.php:366 +msgid "Server Domain" +msgstr "" + +#: mod/admin.php:366 +msgid "" +"The domain of the new server to add to the block list. Do not include the " +"protocol." +msgstr "" + +#: mod/admin.php:367 +msgid "Block reason" +msgstr "" + +#: mod/admin.php:368 +msgid "Add Entry" +msgstr "" + +#: mod/admin.php:369 +msgid "Save changes to the blocklist" +msgstr "" + +#: mod/admin.php:370 +msgid "Current Entries in the Blocklist" +msgstr "" + +#: mod/admin.php:373 +msgid "Delete entry from blocklist" +msgstr "" + +#: mod/admin.php:376 +msgid "Delete entry from blocklist?" +msgstr "" + +#: mod/admin.php:402 +msgid "Server added to blocklist." +msgstr "" + +#: mod/admin.php:418 +msgid "Site blocklist updated." +msgstr "" + +#: mod/admin.php:441 src/Core/Console/GlobalCommunityBlock.php:72 +msgid "The contact has been blocked from the node" +msgstr "" + +#: mod/admin.php:443 src/Core/Console/GlobalCommunityBlock.php:69 +#, php-format +msgid "Could not find any contact entry for this URL (%s)" +msgstr "" + +#: mod/admin.php:450 +#, php-format +msgid "%s contact unblocked" +msgid_plural "%s contacts unblocked" +msgstr[0] "" +msgstr[1] "" + +#: mod/admin.php:479 +msgid "Remote Contact Blocklist" +msgstr "" + +#: mod/admin.php:480 +msgid "" +"This page allows you to prevent any message from a remote contact to reach " +"your node." +msgstr "" + +#: mod/admin.php:481 +msgid "Block Remote Contact" +msgstr "" + +#: mod/admin.php:482 mod/admin.php:1790 +msgid "select all" +msgstr "" + +#: mod/admin.php:483 +msgid "select none" +msgstr "" + +#: mod/admin.php:486 +msgid "No remote contact is blocked from this node." +msgstr "" + +#: mod/admin.php:488 +msgid "Blocked Remote Contacts" +msgstr "" + +#: mod/admin.php:489 +msgid "Block New Remote Contact" +msgstr "" + +#: mod/admin.php:490 +msgid "Photo" +msgstr "" + +#: mod/admin.php:498 +#, php-format +msgid "%s total blocked contact" +msgid_plural "%s total blocked contacts" +msgstr[0] "" +msgstr[1] "" + +#: mod/admin.php:500 +msgid "URL of the remote contact to block." +msgstr "" + +#: mod/admin.php:522 +msgid "Delete this Item" +msgstr "" + +#: mod/admin.php:523 +msgid "" +"On this page you can delete an item from your node. If the item is a top " +"level posting, the entire thread will be deleted." +msgstr "" + +#: mod/admin.php:524 +msgid "" +"You need to know the GUID of the item. You can find it e.g. by looking at " +"the display URL. The last part of http://example.com/display/123456 is the " +"GUID, here 123456." +msgstr "" + +#: mod/admin.php:525 +msgid "GUID" +msgstr "" + +#: mod/admin.php:525 +msgid "The GUID of the item you want to delete." +msgstr "" + +#: mod/admin.php:564 +msgid "Item marked for deletion." +msgstr "" + +#: mod/admin.php:635 +msgid "unknown" +msgstr "" + +#: mod/admin.php:711 +msgid "" +"This page offers you some numbers to the known part of the federated social " +"network your Friendica node is part of. These numbers are not complete but " +"only reflect the part of the network your node is aware of." +msgstr "" + +#: mod/admin.php:712 +msgid "" +"The Auto Discovered Contact Directory feature is not enabled, it " +"will improve the data displayed here." +msgstr "" + +#: mod/admin.php:724 +#, php-format +msgid "" +"Currently this node is aware of %d nodes with %d registered users from the " +"following platforms:" +msgstr "" + +#: mod/admin.php:755 +msgid "ID" +msgstr "" + +#: mod/admin.php:756 +msgid "Recipient Name" +msgstr "" + +#: mod/admin.php:757 +msgid "Recipient Profile" +msgstr "" + +#: mod/admin.php:758 src/Core/NotificationsManager.php:178 +#: src/Content/Nav.php:178 view/theme/frio/theme.php:266 +msgid "Network" +msgstr "" + +#: mod/admin.php:759 +msgid "Created" +msgstr "" + +#: mod/admin.php:760 +msgid "Last Tried" +msgstr "" + +#: mod/admin.php:761 +msgid "" +"This page lists the content of the queue for outgoing postings. These are " +"postings the initial delivery failed for. They will be resend later and " +"eventually deleted if the delivery fails permanently." +msgstr "" + +#: mod/admin.php:785 +#, php-format +msgid "" +"Your DB still runs with MyISAM tables. You should change the engine type to " +"InnoDB. As Friendica will use InnoDB only features in the future, you should " +"change this! See here for a guide that may be helpful " +"converting the table engines. You may also use the command php bin/" +"console.php dbstructure toinnodb of your Friendica installation for an " +"automatic conversion.
    " +msgstr "" + +#: mod/admin.php:792 +#, php-format +msgid "" +"There is a new version of Friendica available for download. Your current " +"version is %1$s, upstream version is %2$s" +msgstr "" + +#: mod/admin.php:802 +msgid "" +"The database update failed. Please run \"php bin/console.php dbstructure " +"update\" from the command line and have a look at the errors that might " +"appear." +msgstr "" + +#: mod/admin.php:808 +msgid "The worker was never executed. Please check your database structure!" +msgstr "" + +#: mod/admin.php:811 +#, php-format +msgid "" +"The last worker execution was on %s UTC. This is older than one hour. Please " +"check your crontab settings." +msgstr "" + +#: mod/admin.php:816 mod/admin.php:1739 +msgid "Normal Account" +msgstr "" + +#: mod/admin.php:817 mod/admin.php:1740 +msgid "Automatic Follower Account" +msgstr "" + +#: mod/admin.php:818 mod/admin.php:1741 +msgid "Public Forum Account" +msgstr "" + +#: mod/admin.php:819 mod/admin.php:1742 +msgid "Automatic Friend Account" +msgstr "" + +#: mod/admin.php:820 +msgid "Blog Account" +msgstr "" + +#: mod/admin.php:821 +msgid "Private Forum Account" +msgstr "" + +#: mod/admin.php:843 +msgid "Message queues" +msgstr "" + +#: mod/admin.php:849 +msgid "Summary" +msgstr "" + +#: mod/admin.php:851 +msgid "Registered users" +msgstr "" + +#: mod/admin.php:853 +msgid "Pending registrations" +msgstr "" + +#: mod/admin.php:854 +msgid "Version" +msgstr "" + +#: mod/admin.php:859 +msgid "Active addons" +msgstr "" + +#: mod/admin.php:890 +msgid "Can not parse base url. Must have at least ://" +msgstr "" + +#: mod/admin.php:1209 +msgid "Site settings updated." +msgstr "" + +#: mod/admin.php:1265 +msgid "No community page" +msgstr "" + +#: mod/admin.php:1266 +msgid "Public postings from users of this site" +msgstr "" + +#: mod/admin.php:1267 +msgid "Public postings from the federated network" +msgstr "" + +#: mod/admin.php:1268 +msgid "Public postings from local users and the federated network" +msgstr "" + +#: mod/admin.php:1274 +msgid "Users, Global Contacts" +msgstr "" + +#: mod/admin.php:1275 +msgid "Users, Global Contacts/fallback" +msgstr "" + +#: mod/admin.php:1279 +msgid "One month" +msgstr "" + +#: mod/admin.php:1280 +msgid "Three months" +msgstr "" + +#: mod/admin.php:1281 +msgid "Half a year" +msgstr "" + +#: mod/admin.php:1282 +msgid "One year" +msgstr "" + +#: mod/admin.php:1287 +msgid "Multi user instance" +msgstr "" + +#: mod/admin.php:1310 +msgid "Closed" +msgstr "" + +#: mod/admin.php:1311 +msgid "Requires approval" +msgstr "" + +#: mod/admin.php:1312 +msgid "Open" +msgstr "" + +#: mod/admin.php:1316 +msgid "No SSL policy, links will track page SSL state" +msgstr "" + +#: mod/admin.php:1317 +msgid "Force all links to use SSL" +msgstr "" + +#: mod/admin.php:1318 +msgid "Self-signed certificate, use SSL for local links only (discouraged)" +msgstr "" + +#: mod/admin.php:1322 +msgid "Don't check" +msgstr "" + +#: mod/admin.php:1323 +msgid "check the stable version" +msgstr "" + +#: mod/admin.php:1324 +msgid "check the development version" +msgstr "" + +#: mod/admin.php:1347 +msgid "Republish users to directory" +msgstr "" + +#: mod/admin.php:1349 +msgid "File upload" +msgstr "" + +#: mod/admin.php:1350 +msgid "Policies" +msgstr "" + +#: mod/admin.php:1352 +msgid "Auto Discovered Contact Directory" +msgstr "" + +#: mod/admin.php:1353 +msgid "Performance" +msgstr "" + +#: mod/admin.php:1354 +msgid "Worker" +msgstr "" + +#: mod/admin.php:1355 +msgid "Message Relay" +msgstr "" + +#: mod/admin.php:1356 +msgid "" +"Relocate - WARNING: advanced function. Could make this server unreachable." +msgstr "" + +#: mod/admin.php:1359 +msgid "Site name" +msgstr "" + +#: mod/admin.php:1360 +msgid "Host name" +msgstr "" + +#: mod/admin.php:1361 +msgid "Sender Email" +msgstr "" + +#: mod/admin.php:1361 +msgid "" +"The email address your server shall use to send notification emails from." +msgstr "" + +#: mod/admin.php:1362 +msgid "Banner/Logo" +msgstr "" + +#: mod/admin.php:1363 +msgid "Shortcut icon" +msgstr "" + +#: mod/admin.php:1363 +msgid "Link to an icon that will be used for browsers." +msgstr "" + +#: mod/admin.php:1364 +msgid "Touch icon" +msgstr "" + +#: mod/admin.php:1364 +msgid "Link to an icon that will be used for tablets and mobiles." +msgstr "" + +#: mod/admin.php:1365 +msgid "Additional Info" +msgstr "" + +#: mod/admin.php:1365 +#, php-format +msgid "" +"For public servers: you can add additional information here that will be " +"listed at %s/servers." +msgstr "" + +#: mod/admin.php:1366 +msgid "System language" +msgstr "" + +#: mod/admin.php:1367 +msgid "System theme" +msgstr "" + +#: mod/admin.php:1367 +msgid "" +"Default system theme - may be over-ridden by user profiles - change theme settings" +msgstr "" + +#: mod/admin.php:1368 +msgid "Mobile system theme" +msgstr "" + +#: mod/admin.php:1368 +msgid "Theme for mobile devices" +msgstr "" + +#: mod/admin.php:1369 +msgid "SSL link policy" +msgstr "" + +#: mod/admin.php:1369 +msgid "Determines whether generated links should be forced to use SSL" +msgstr "" + +#: mod/admin.php:1370 +msgid "Force SSL" +msgstr "" + +#: mod/admin.php:1370 +msgid "" +"Force all Non-SSL requests to SSL - Attention: on some systems it could lead " +"to endless loops." +msgstr "" + +#: mod/admin.php:1371 +msgid "Hide help entry from navigation menu" +msgstr "" + +#: mod/admin.php:1371 +msgid "" +"Hides the menu entry for the Help pages from the navigation menu. You can " +"still access it calling /help directly." +msgstr "" + +#: mod/admin.php:1372 +msgid "Single user instance" +msgstr "" + +#: mod/admin.php:1372 +msgid "Make this instance multi-user or single-user for the named user" +msgstr "" + +#: mod/admin.php:1373 +msgid "Maximum image size" +msgstr "" + +#: mod/admin.php:1373 +msgid "" +"Maximum size in bytes of uploaded images. Default is 0, which means no " +"limits." +msgstr "" + +#: mod/admin.php:1374 +msgid "Maximum image length" +msgstr "" + +#: mod/admin.php:1374 +msgid "" +"Maximum length in pixels of the longest side of uploaded images. Default is " +"-1, which means no limits." +msgstr "" + +#: mod/admin.php:1375 +msgid "JPEG image quality" +msgstr "" + +#: mod/admin.php:1375 +msgid "" +"Uploaded JPEGS will be saved at this quality setting [0-100]. Default is " +"100, which is full quality." +msgstr "" + +#: mod/admin.php:1377 +msgid "Register policy" +msgstr "" + +#: mod/admin.php:1378 +msgid "Maximum Daily Registrations" +msgstr "" + +#: mod/admin.php:1378 +msgid "" +"If registration is permitted above, this sets the maximum number of new user " +"registrations to accept per day. If register is set to closed, this setting " +"has no effect." +msgstr "" + +#: mod/admin.php:1379 +msgid "Register text" +msgstr "" + +#: mod/admin.php:1379 +msgid "" +"Will be displayed prominently on the registration page. You can use BBCode " +"here." +msgstr "" + +#: mod/admin.php:1380 +msgid "Accounts abandoned after x days" +msgstr "" + +#: mod/admin.php:1380 +msgid "" +"Will not waste system resources polling external sites for abandonded " +"accounts. Enter 0 for no time limit." +msgstr "" + +#: mod/admin.php:1381 +msgid "Allowed friend domains" +msgstr "" + +#: mod/admin.php:1381 +msgid "" +"Comma separated list of domains which are allowed to establish friendships " +"with this site. Wildcards are accepted. Empty to allow any domains" +msgstr "" + +#: mod/admin.php:1382 +msgid "Allowed email domains" +msgstr "" + +#: mod/admin.php:1382 +msgid "" +"Comma separated list of domains which are allowed in email addresses for " +"registrations to this site. Wildcards are accepted. Empty to allow any " +"domains" +msgstr "" + +#: mod/admin.php:1383 +msgid "No OEmbed rich content" +msgstr "" + +#: mod/admin.php:1383 +msgid "" +"Don't show the rich content (e.g. embedded PDF), except from the domains " +"listed below." +msgstr "" + +#: mod/admin.php:1384 +msgid "Allowed OEmbed domains" +msgstr "" + +#: mod/admin.php:1384 +msgid "" +"Comma separated list of domains which oembed content is allowed to be " +"displayed. Wildcards are accepted." +msgstr "" + +#: mod/admin.php:1385 +msgid "Block public" +msgstr "" + +#: mod/admin.php:1385 +msgid "" +"Check to block public access to all otherwise public personal pages on this " +"site unless you are currently logged in." +msgstr "" + +#: mod/admin.php:1386 +msgid "Force publish" +msgstr "" + +#: mod/admin.php:1386 +msgid "" +"Check to force all profiles on this site to be listed in the site directory." +msgstr "" + +#: mod/admin.php:1387 +msgid "Global directory URL" +msgstr "" + +#: mod/admin.php:1387 +msgid "" +"URL to the global directory. If this is not set, the global directory is " +"completely unavailable to the application." +msgstr "" + +#: mod/admin.php:1388 +msgid "Private posts by default for new users" +msgstr "" + +#: mod/admin.php:1388 +msgid "" +"Set default post permissions for all new members to the default privacy " +"group rather than public." +msgstr "" + +#: mod/admin.php:1389 +msgid "Don't include post content in email notifications" +msgstr "" + +#: mod/admin.php:1389 +msgid "" +"Don't include the content of a post/comment/private message/etc. in the " +"email notifications that are sent out from this site, as a privacy measure." +msgstr "" + +#: mod/admin.php:1390 +msgid "Disallow public access to addons listed in the apps menu." +msgstr "" + +#: mod/admin.php:1390 +msgid "" +"Checking this box will restrict addons listed in the apps menu to members " +"only." +msgstr "" + +#: mod/admin.php:1391 +msgid "Don't embed private images in posts" +msgstr "" + +#: mod/admin.php:1391 +msgid "" +"Don't replace locally-hosted private photos in posts with an embedded copy " +"of the image. This means that contacts who receive posts containing private " +"photos will have to authenticate and load each image, which may take a while." +msgstr "" + +#: mod/admin.php:1392 +msgid "Allow Users to set remote_self" +msgstr "" + +#: mod/admin.php:1392 +msgid "" +"With checking this, every user is allowed to mark every contact as a " +"remote_self in the repair contact dialog. Setting this flag on a contact " +"causes mirroring every posting of that contact in the users stream." +msgstr "" + +#: mod/admin.php:1393 +msgid "Block multiple registrations" +msgstr "" + +#: mod/admin.php:1393 +msgid "Disallow users to register additional accounts for use as pages." +msgstr "" + +#: mod/admin.php:1394 +msgid "OpenID support" +msgstr "" + +#: mod/admin.php:1394 +msgid "OpenID support for registration and logins." +msgstr "" + +#: mod/admin.php:1395 +msgid "Fullname check" +msgstr "" + +#: mod/admin.php:1395 +msgid "" +"Force users to register with a space between firstname and lastname in Full " +"name, as an antispam measure" +msgstr "" + +#: mod/admin.php:1396 +msgid "Community pages for visitors" +msgstr "" + +#: mod/admin.php:1396 +msgid "" +"Which community pages should be available for visitors. Local users always " +"see both pages." +msgstr "" + +#: mod/admin.php:1397 +msgid "Posts per user on community page" +msgstr "" + +#: mod/admin.php:1397 +msgid "" +"The maximum number of posts per user on the community page. (Not valid for " +"'Global Community')" +msgstr "" + +#: mod/admin.php:1398 +msgid "Enable OStatus support" +msgstr "" + +#: mod/admin.php:1398 +msgid "" +"Provide built-in OStatus (StatusNet, GNU Social etc.) compatibility. All " +"communications in OStatus are public, so privacy warnings will be " +"occasionally displayed." +msgstr "" + +#: mod/admin.php:1399 +msgid "Only import OStatus threads from our contacts" +msgstr "" + +#: mod/admin.php:1399 +msgid "" +"Normally we import every content from our OStatus contacts. With this option " +"we only store threads that are started by a contact that is known on our " +"system." +msgstr "" + +#: mod/admin.php:1400 +msgid "OStatus support can only be enabled if threading is enabled." +msgstr "" + +#: mod/admin.php:1402 +msgid "" +"Diaspora support can't be enabled because Friendica was installed into a sub " +"directory." +msgstr "" + +#: mod/admin.php:1403 +msgid "Enable Diaspora support" +msgstr "" + +#: mod/admin.php:1403 +msgid "Provide built-in Diaspora network compatibility." +msgstr "" + +#: mod/admin.php:1404 +msgid "Only allow Friendica contacts" +msgstr "" + +#: mod/admin.php:1404 +msgid "" +"All contacts must use Friendica protocols. All other built-in communication " +"protocols disabled." +msgstr "" + +#: mod/admin.php:1405 +msgid "Verify SSL" +msgstr "" + +#: mod/admin.php:1405 +msgid "" +"If you wish, you can turn on strict certificate checking. This will mean you " +"cannot connect (at all) to self-signed SSL sites." +msgstr "" + +#: mod/admin.php:1406 +msgid "Proxy user" +msgstr "" + +#: mod/admin.php:1407 +msgid "Proxy URL" +msgstr "" + +#: mod/admin.php:1408 +msgid "Network timeout" +msgstr "" + +#: mod/admin.php:1408 +msgid "Value is in seconds. Set to 0 for unlimited (not recommended)." +msgstr "" + +#: mod/admin.php:1409 +msgid "Maximum Load Average" +msgstr "" + +#: mod/admin.php:1409 +msgid "" +"Maximum system load before delivery and poll processes are deferred - " +"default 50." +msgstr "" + +#: mod/admin.php:1410 +msgid "Maximum Load Average (Frontend)" +msgstr "" + +#: mod/admin.php:1410 +msgid "Maximum system load before the frontend quits service - default 50." +msgstr "" + +#: mod/admin.php:1411 +msgid "Minimal Memory" +msgstr "" + +#: mod/admin.php:1411 +msgid "" +"Minimal free memory in MB for the worker. Needs access to /proc/meminfo - " +"default 0 (deactivated)." +msgstr "" + +#: mod/admin.php:1412 +msgid "Maximum table size for optimization" +msgstr "" + +#: mod/admin.php:1412 +msgid "" +"Maximum table size (in MB) for the automatic optimization - default 100 MB. " +"Enter -1 to disable it." +msgstr "" + +#: mod/admin.php:1413 +msgid "Minimum level of fragmentation" +msgstr "" + +#: mod/admin.php:1413 +msgid "" +"Minimum fragmenation level to start the automatic optimization - default " +"value is 30%." +msgstr "" + +#: mod/admin.php:1415 +msgid "Periodical check of global contacts" +msgstr "" + +#: mod/admin.php:1415 +msgid "" +"If enabled, the global contacts are checked periodically for missing or " +"outdated data and the vitality of the contacts and servers." +msgstr "" + +#: mod/admin.php:1416 +msgid "Days between requery" +msgstr "" + +#: mod/admin.php:1416 +msgid "Number of days after which a server is requeried for his contacts." +msgstr "" + +#: mod/admin.php:1417 +msgid "Discover contacts from other servers" +msgstr "" + +#: mod/admin.php:1417 +msgid "" +"Periodically query other servers for contacts. You can choose between " +"'users': the users on the remote system, 'Global Contacts': active contacts " +"that are known on the system. The fallback is meant for Redmatrix servers " +"and older friendica servers, where global contacts weren't available. The " +"fallback increases the server load, so the recommened setting is 'Users, " +"Global Contacts'." +msgstr "" + +#: mod/admin.php:1418 +msgid "Timeframe for fetching global contacts" +msgstr "" + +#: mod/admin.php:1418 +msgid "" +"When the discovery is activated, this value defines the timeframe for the " +"activity of the global contacts that are fetched from other servers." +msgstr "" + +#: mod/admin.php:1419 +msgid "Search the local directory" +msgstr "" + +#: mod/admin.php:1419 +msgid "" +"Search the local directory instead of the global directory. When searching " +"locally, every search will be executed on the global directory in the " +"background. This improves the search results when the search is repeated." +msgstr "" + +#: mod/admin.php:1421 +msgid "Publish server information" +msgstr "" + +#: mod/admin.php:1421 +msgid "" +"If enabled, general server and usage data will be published. The data " +"contains the name and version of the server, number of users with public " +"profiles, number of posts and the activated protocols and connectors. See the-federation.info for details." +msgstr "" + +#: mod/admin.php:1423 +msgid "Check upstream version" +msgstr "" + +#: mod/admin.php:1423 +msgid "" +"Enables checking for new Friendica versions at github. If there is a new " +"version, you will be informed in the admin panel overview." +msgstr "" + +#: mod/admin.php:1424 +msgid "Suppress Tags" +msgstr "" + +#: mod/admin.php:1424 +msgid "Suppress showing a list of hashtags at the end of the posting." +msgstr "" + +#: mod/admin.php:1425 +msgid "Path to item cache" +msgstr "" + +#: mod/admin.php:1425 +msgid "The item caches buffers generated bbcode and external images." +msgstr "" + +#: mod/admin.php:1426 +msgid "Cache duration in seconds" +msgstr "" + +#: mod/admin.php:1426 +msgid "" +"How long should the cache files be hold? Default value is 86400 seconds (One " +"day). To disable the item cache, set the value to -1." +msgstr "" + +#: mod/admin.php:1427 +msgid "Maximum numbers of comments per post" +msgstr "" + +#: mod/admin.php:1427 +msgid "How much comments should be shown for each post? Default value is 100." +msgstr "" + +#: mod/admin.php:1428 +msgid "Temp path" +msgstr "" + +#: mod/admin.php:1428 +msgid "" +"If you have a restricted system where the webserver can't access the system " +"temp path, enter another path here." +msgstr "" + +#: mod/admin.php:1429 +msgid "Base path to installation" +msgstr "" + +#: mod/admin.php:1429 +msgid "" +"If the system cannot detect the correct path to your installation, enter the " +"correct path here. This setting should only be set if you are using a " +"restricted system and symbolic links to your webroot." +msgstr "" + +#: mod/admin.php:1430 +msgid "Disable picture proxy" +msgstr "" + +#: mod/admin.php:1430 +msgid "" +"The picture proxy increases performance and privacy. It shouldn't be used on " +"systems with very low bandwith." +msgstr "" + +#: mod/admin.php:1431 +msgid "Only search in tags" +msgstr "" + +#: mod/admin.php:1431 +msgid "On large systems the text search can slow down the system extremely." +msgstr "" + +#: mod/admin.php:1433 +msgid "New base url" +msgstr "" + +#: mod/admin.php:1433 +msgid "" +"Change base url for this server. Sends relocate message to all Friendica and " +"Diaspora* contacts of all users." +msgstr "" + +#: mod/admin.php:1435 +msgid "RINO Encryption" +msgstr "" + +#: mod/admin.php:1435 +msgid "Encryption layer between nodes." +msgstr "" + +#: mod/admin.php:1435 +msgid "Enabled" +msgstr "" + +#: mod/admin.php:1437 +msgid "Maximum number of parallel workers" +msgstr "" + +#: mod/admin.php:1437 +msgid "" +"On shared hosters set this to 2. On larger systems, values of 10 are great. " +"Default value is 4." +msgstr "" + +#: mod/admin.php:1438 +msgid "Don't use 'proc_open' with the worker" +msgstr "" + +#: mod/admin.php:1438 +msgid "" +"Enable this if your system doesn't allow the use of 'proc_open'. This can " +"happen on shared hosters. If this is enabled you should increase the " +"frequency of worker calls in your crontab." +msgstr "" + +#: mod/admin.php:1439 +msgid "Enable fastlane" +msgstr "" + +#: mod/admin.php:1439 +msgid "" +"When enabed, the fastlane mechanism starts an additional worker if processes " +"with higher priority are blocked by processes of lower priority." +msgstr "" + +#: mod/admin.php:1440 +msgid "Enable frontend worker" +msgstr "" + +#: mod/admin.php:1440 +#, php-format +msgid "" +"When enabled the Worker process is triggered when backend access is " +"performed \\x28e.g. messages being delivered\\x29. On smaller sites you " +"might want to call %s/worker on a regular basis via an external cron job. " +"You should only enable this option if you cannot utilize cron/scheduled jobs " +"on your server." +msgstr "" + +#: mod/admin.php:1442 +msgid "Subscribe to relay" +msgstr "" + +#: mod/admin.php:1442 +msgid "" +"Enables the receiving of public posts from the relay. They will be included " +"in the search, subscribed tags and on the global community page." +msgstr "" + +#: mod/admin.php:1443 +msgid "Relay server" +msgstr "" + +#: mod/admin.php:1443 +msgid "" +"Address of the relay server where public posts should be send to. For " +"example https://relay.diasp.org" +msgstr "" + +#: mod/admin.php:1444 +msgid "Direct relay transfer" +msgstr "" + +#: mod/admin.php:1444 +msgid "" +"Enables the direct transfer to other servers without using the relay servers" +msgstr "" + +#: mod/admin.php:1445 +msgid "Relay scope" +msgstr "" + +#: mod/admin.php:1445 +msgid "" +"Can be 'all' or 'tags'. 'all' means that every public post should be " +"received. 'tags' means that only posts with selected tags should be received." +msgstr "" + +#: mod/admin.php:1445 +msgid "all" +msgstr "" + +#: mod/admin.php:1445 +msgid "tags" +msgstr "" + +#: mod/admin.php:1446 +msgid "Server tags" +msgstr "" + +#: mod/admin.php:1446 +msgid "Comma separated list of tags for the 'tags' subscription." +msgstr "" + +#: mod/admin.php:1447 +msgid "Allow user tags" +msgstr "" + +#: mod/admin.php:1447 +msgid "" +"If enabled, the tags from the saved searches will used for the 'tags' " +"subscription in addition to the 'relay_server_tags'." +msgstr "" + +#: mod/admin.php:1475 +msgid "Update has been marked successful" +msgstr "" + +#: mod/admin.php:1482 +#, php-format +msgid "Database structure update %s was successfully applied." +msgstr "" + +#: mod/admin.php:1485 +#, php-format +msgid "Executing of database structure update %s failed with error: %s" +msgstr "" + +#: mod/admin.php:1498 +#, php-format +msgid "Executing %s failed with error: %s" +msgstr "" + +#: mod/admin.php:1500 +#, php-format +msgid "Update %s was successfully applied." +msgstr "" + +#: mod/admin.php:1503 +#, php-format +msgid "Update %s did not return a status. Unknown if it succeeded." +msgstr "" + +#: mod/admin.php:1506 +#, php-format +msgid "There was no additional update function %s that needed to be called." +msgstr "" + +#: mod/admin.php:1526 +msgid "No failed updates." +msgstr "" + +#: mod/admin.php:1527 +msgid "Check database structure" +msgstr "" + +#: mod/admin.php:1532 +msgid "Failed Updates" +msgstr "" + +#: mod/admin.php:1533 +msgid "" +"This does not include updates prior to 1139, which did not return a status." +msgstr "" + +#: mod/admin.php:1534 +msgid "Mark success (if update was manually applied)" +msgstr "" + +#: mod/admin.php:1535 +msgid "Attempt to execute this update step automatically" +msgstr "" + +#: mod/admin.php:1574 +#, php-format +msgid "" +"\n" +"\t\t\tDear %1$s,\n" +"\t\t\t\tthe administrator of %2$s has set up an account for you." +msgstr "" + +#: mod/admin.php:1577 src/Model/User.php:615 +#, php-format +msgid "" +"\n" +"\t\t\tThe login details are as follows:\n" +"\n" +"\t\t\tSite Location:\t%1$s\n" +"\t\t\tLogin Name:\t\t%2$s\n" +"\t\t\tPassword:\t\t%3$s\n" +"\n" +"\t\t\tYou may change your password from your account \"Settings\" page after " +"logging\n" +"\t\t\tin.\n" +"\n" +"\t\t\tPlease take a few moments to review the other account settings on that " +"page.\n" +"\n" +"\t\t\tYou may also wish to add some basic information to your default " +"profile\n" +"\t\t\t(on the \"Profiles\" page) so that other people can easily find you.\n" +"\n" +"\t\t\tWe recommend setting your full name, adding a profile photo,\n" +"\t\t\tadding some profile \"keywords\" (very useful in making new friends) - " +"and\n" +"\t\t\tperhaps what country you live in; if you do not wish to be more " +"specific\n" +"\t\t\tthan that.\n" +"\n" +"\t\t\tWe fully respect your right to privacy, and none of these items are " +"necessary.\n" +"\t\t\tIf you are new and do not know anybody here, they may help\n" +"\t\t\tyou to make some new and interesting friends.\n" +"\n" +"\t\t\tIf you ever want to delete your account, you can do so at %1$s/" +"removeme\n" +"\n" +"\t\t\tThank you and welcome to %4$s." +msgstr "" + +#: mod/admin.php:1611 src/Model/User.php:649 +#, php-format +msgid "Registration details for %s" +msgstr "" + +#: mod/admin.php:1621 +#, php-format +msgid "%s user blocked/unblocked" +msgid_plural "%s users blocked/unblocked" +msgstr[0] "" +msgstr[1] "" + +#: mod/admin.php:1627 +#, php-format +msgid "%s user deleted" +msgid_plural "%s users deleted" +msgstr[0] "" +msgstr[1] "" + +#: mod/admin.php:1674 +#, php-format +msgid "User '%s' deleted" +msgstr "" + +#: mod/admin.php:1682 +#, php-format +msgid "User '%s' unblocked" +msgstr "" + +#: mod/admin.php:1682 +#, php-format +msgid "User '%s' blocked" +msgstr "" + +#: mod/admin.php:1781 mod/admin.php:1793 mod/admin.php:1806 mod/admin.php:1824 +#: src/Content/ContactSelector.php:82 +msgid "Email" +msgstr "" + +#: mod/admin.php:1781 mod/admin.php:1806 +msgid "Register date" +msgstr "" + +#: mod/admin.php:1781 mod/admin.php:1806 +msgid "Last login" +msgstr "" + +#: mod/admin.php:1781 mod/admin.php:1806 +msgid "Last item" +msgstr "" + +#: mod/admin.php:1789 +msgid "Add User" +msgstr "" + +#: mod/admin.php:1791 +msgid "User registrations waiting for confirm" +msgstr "" + +#: mod/admin.php:1792 +msgid "User waiting for permanent deletion" +msgstr "" + +#: mod/admin.php:1793 +msgid "Request date" +msgstr "" + +#: mod/admin.php:1794 +msgid "No registrations." +msgstr "" + +#: mod/admin.php:1795 +msgid "Note from the user" +msgstr "" + +#: mod/admin.php:1797 +msgid "Deny" +msgstr "" + +#: mod/admin.php:1801 +msgid "Site admin" +msgstr "" + +#: mod/admin.php:1802 +msgid "Account expired" +msgstr "" + +#: mod/admin.php:1805 +msgid "New User" +msgstr "" + +#: mod/admin.php:1806 +msgid "Deleted since" +msgstr "" + +#: mod/admin.php:1811 +msgid "" +"Selected users will be deleted!\\n\\nEverything these users had posted on " +"this site will be permanently deleted!\\n\\nAre you sure?" +msgstr "" + +#: mod/admin.php:1812 +msgid "" +"The user {0} will be deleted!\\n\\nEverything this user has posted on this " +"site will be permanently deleted!\\n\\nAre you sure?" +msgstr "" + +#: mod/admin.php:1822 +msgid "Name of the new user." +msgstr "" + +#: mod/admin.php:1823 +msgid "Nickname" +msgstr "" + +#: mod/admin.php:1823 +msgid "Nickname of the new user." +msgstr "" + +#: mod/admin.php:1824 +msgid "Email address of the new user." +msgstr "" + +#: mod/admin.php:1866 +#, php-format +msgid "Addon %s disabled." +msgstr "" + +#: mod/admin.php:1870 +#, php-format +msgid "Addon %s enabled." +msgstr "" + +#: mod/admin.php:1880 mod/admin.php:2129 +msgid "Disable" +msgstr "" + +#: mod/admin.php:1883 mod/admin.php:2132 +msgid "Enable" +msgstr "" + +#: mod/admin.php:1905 mod/admin.php:2174 +msgid "Toggle" +msgstr "" + +#: mod/admin.php:1913 mod/admin.php:2183 +msgid "Author: " +msgstr "" + +#: mod/admin.php:1914 mod/admin.php:2184 +msgid "Maintainer: " +msgstr "" + +#: mod/admin.php:1966 +msgid "Reload active addons" +msgstr "" + +#: mod/admin.php:1971 +#, php-format +msgid "" +"There are currently no addons available on your node. You can find the " +"official addon repository at %1$s and might find other interesting addons in " +"the open addon registry at %2$s" +msgstr "" + +#: mod/admin.php:2091 +msgid "No themes found." +msgstr "" + +#: mod/admin.php:2165 +msgid "Screenshot" +msgstr "" + +#: mod/admin.php:2219 +msgid "Reload active themes" +msgstr "" + +#: mod/admin.php:2224 +#, php-format +msgid "No themes found on the system. They should be placed in %1$s" +msgstr "" + +#: mod/admin.php:2225 +msgid "[Experimental]" +msgstr "" + +#: mod/admin.php:2226 +msgid "[Unsupported]" +msgstr "" + +#: mod/admin.php:2250 +msgid "Log settings updated." +msgstr "" + +#: mod/admin.php:2282 +msgid "PHP log currently enabled." +msgstr "" + +#: mod/admin.php:2284 +msgid "PHP log currently disabled." +msgstr "" + +#: mod/admin.php:2293 +msgid "Clear" +msgstr "" + +#: mod/admin.php:2297 +msgid "Enable Debugging" +msgstr "" + +#: mod/admin.php:2298 +msgid "Log file" +msgstr "" + +#: mod/admin.php:2298 +msgid "" +"Must be writable by web server. Relative to your Friendica top-level " +"directory." +msgstr "" + +#: mod/admin.php:2299 +msgid "Log level" +msgstr "" + +#: mod/admin.php:2301 +msgid "PHP logging" +msgstr "" + +#: mod/admin.php:2302 +msgid "" +"To enable logging of PHP errors and warnings you can add the following to " +"the .htconfig.php file of your installation. The filename set in the " +"'error_log' line is relative to the friendica top-level directory and must " +"be writeable by the web server. The option '1' for 'log_errors' and " +"'display_errors' is to enable these options, set to '0' to disable them." +msgstr "" + +#: mod/admin.php:2333 +#, php-format +msgid "" +"Error trying to open %1$s log file.\\r\\n
    Check to see " +"if file %1$s exist and is readable." +msgstr "" + +#: mod/admin.php:2337 +#, php-format +msgid "" +"Couldn't open %1$s log file.\\r\\n
    Check to see if file " +"%1$s is readable." +msgstr "" + +#: mod/admin.php:2429 +#, php-format +msgid "Lock feature %s" +msgstr "" + +#: mod/admin.php:2437 +msgid "Manage Additional Features" msgstr "" #: src/Core/UserImport.php:104 @@ -7775,27 +7583,6 @@ msgstr[1] "" msgid "Done. You can now login with your username and password" msgstr "" -#: src/Core/ACL.php:295 -msgid "Post to Email" -msgstr "" - -#: src/Core/ACL.php:301 -msgid "Hide your profile details from unknown viewers?" -msgstr "" - -#: src/Core/ACL.php:300 -#, php-format -msgid "Connectors disabled, since \"%s\" is enabled." -msgstr "" - -#: src/Core/ACL.php:307 -msgid "Visible to everybody" -msgstr "" - -#: src/Core/ACL.php:319 -msgid "Close" -msgstr "" - #: src/Core/NotificationsManager.php:171 msgid "System" msgstr "" @@ -7861,6 +7648,35 @@ msgstr "" msgid "New Follower" msgstr "" +#: src/Core/ACL.php:295 +msgid "Post to Email" +msgstr "" + +#: src/Core/ACL.php:301 +msgid "Hide your profile details from unknown viewers?" +msgstr "" + +#: src/Core/ACL.php:300 +#, php-format +msgid "Connectors disabled, since \"%s\" is enabled." +msgstr "" + +#: src/Core/ACL.php:307 +msgid "Visible to everybody" +msgstr "" + +#: src/Core/ACL.php:308 view/theme/vier/config.php:115 +msgid "show" +msgstr "" + +#: src/Core/ACL.php:309 view/theme/vier/config.php:115 +msgid "don't show" +msgstr "" + +#: src/Core/ACL.php:319 +msgid "Close" +msgstr "" + #: src/Util/Temporal.php:147 src/Model/Profile.php:758 msgid "Birthday:" msgstr "" @@ -7930,8 +7746,8 @@ msgstr "" msgid "view full size" msgstr "" -#: src/Content/Text/BBCode.php:978 src/Content/Text/BBCode.php:1735 -#: src/Content/Text/BBCode.php:1736 +#: src/Content/Text/BBCode.php:978 src/Content/Text/BBCode.php:1739 +#: src/Content/Text/BBCode.php:1740 msgid "Image/photo" msgstr "" @@ -7940,19 +7756,19 @@ msgstr "" msgid "%2$s %3$s" msgstr "" -#: src/Content/Text/BBCode.php:1670 src/Content/Text/BBCode.php:1692 +#: src/Content/Text/BBCode.php:1674 src/Content/Text/BBCode.php:1696 msgid "$1 wrote:" msgstr "" -#: src/Content/Text/BBCode.php:1744 src/Content/Text/BBCode.php:1745 +#: src/Content/Text/BBCode.php:1748 src/Content/Text/BBCode.php:1749 msgid "Encrypted content" msgstr "" -#: src/Content/Text/BBCode.php:1862 +#: src/Content/Text/BBCode.php:1866 msgid "Invalid source protocol" msgstr "" -#: src/Content/Text/BBCode.php:1873 +#: src/Content/Text/BBCode.php:1877 msgid "Invalid link protocol" msgstr "" @@ -8264,6 +8080,10 @@ msgstr "" msgid "Ask me" msgstr "" +#: src/Content/ForumManager.php:127 view/theme/vier/theme.php:256 +msgid "External link to forum" +msgstr "" + #: src/Content/Nav.php:53 msgid "Nothing new here" msgstr "" @@ -8272,6 +8092,41 @@ msgstr "" msgid "Clear notifications" msgstr "" +#: src/Content/Nav.php:97 src/Module/Login.php:311 +#: view/theme/frio/theme.php:256 +msgid "Logout" +msgstr "" + +#: src/Content/Nav.php:97 view/theme/frio/theme.php:256 +msgid "End this session" +msgstr "" + +#: src/Content/Nav.php:100 src/Content/Nav.php:181 +#: view/theme/frio/theme.php:259 +msgid "Your posts and conversations" +msgstr "" + +#: src/Content/Nav.php:101 view/theme/frio/theme.php:260 +msgid "Your profile page" +msgstr "" + +#: src/Content/Nav.php:102 view/theme/frio/theme.php:261 +msgid "Your photos" +msgstr "" + +#: src/Content/Nav.php:103 src/Model/Profile.php:912 src/Model/Profile.php:915 +#: view/theme/frio/theme.php:262 +msgid "Videos" +msgstr "" + +#: src/Content/Nav.php:103 view/theme/frio/theme.php:262 +msgid "Your videos" +msgstr "" + +#: src/Content/Nav.php:104 view/theme/frio/theme.php:263 +msgid "Your events" +msgstr "" + #: src/Content/Nav.php:105 msgid "Personal notes" msgstr "" @@ -8316,6 +8171,11 @@ msgstr "" msgid "Conversations on this and other servers" msgstr "" +#: src/Content/Nav.php:169 src/Model/Profile.php:927 src/Model/Profile.php:938 +#: view/theme/frio/theme.php:267 +msgid "Events and Calendar" +msgstr "" + #: src/Content/Nav.php:172 msgid "Directory" msgstr "" @@ -8328,6 +8188,10 @@ msgstr "" msgid "Information about this friendica instance" msgstr "" +#: src/Content/Nav.php:178 view/theme/frio/theme.php:266 +msgid "Conversations from your friends" +msgstr "" + #: src/Content/Nav.php:179 msgid "Network Reset" msgstr "" @@ -8348,6 +8212,10 @@ msgstr "" msgid "Mark all system notifications seen" msgstr "" +#: src/Content/Nav.php:195 view/theme/frio/theme.php:268 +msgid "Private mail" +msgstr "" + #: src/Content/Nav.php:196 msgid "Inbox" msgstr "" @@ -8364,6 +8232,10 @@ msgstr "" msgid "Manage other pages" msgstr "" +#: src/Content/Nav.php:206 view/theme/frio/theme.php:269 +msgid "Account settings" +msgstr "" + #: src/Content/Nav.php:209 src/Model/Profile.php:372 msgid "Profiles" msgstr "" @@ -8372,6 +8244,10 @@ msgstr "" msgid "Manage/Edit Profiles" msgstr "" +#: src/Content/Nav.php:212 view/theme/frio/theme.php:270 +msgid "Manage/edit friends and contacts" +msgstr "" + #: src/Content/Nav.php:217 msgid "Site setup and configuration" msgstr "" @@ -8384,6 +8260,26 @@ msgstr "" msgid "Site map" msgstr "" +#: src/Content/OEmbed.php:253 +msgid "Embedding disabled" +msgstr "" + +#: src/Content/OEmbed.php:373 +msgid "Embedded content" +msgstr "" + +#: src/Content/Widget/CalendarExport.php:61 +msgid "Export" +msgstr "" + +#: src/Content/Widget/CalendarExport.php:62 +msgid "Export calendar as ical" +msgstr "" + +#: src/Content/Widget/CalendarExport.php:63 +msgid "Export calendar as csv" +msgstr "" + #: src/Content/Feature.php:79 msgid "General Features" msgstr "" @@ -8595,26 +8491,6 @@ msgstr "" msgid "Display membership date in profile" msgstr "" -#: src/Content/OEmbed.php:253 -msgid "Embedding disabled" -msgstr "" - -#: src/Content/OEmbed.php:373 -msgid "Embedded content" -msgstr "" - -#: src/Content/Widget/CalendarExport.php:61 -msgid "Export" -msgstr "" - -#: src/Content/Widget/CalendarExport.php:62 -msgid "Export calendar as ical" -msgstr "" - -#: src/Content/Widget/CalendarExport.php:63 -msgid "Export calendar as csv" -msgstr "" - #: src/Content/Widget.php:33 msgid "Add New Contact" msgstr "" @@ -8646,10 +8522,18 @@ msgstr "" msgid "Examples: Robert Morgenstein, Fishing" msgstr "" +#: src/Content/Widget.php:65 view/theme/vier/theme.php:202 +msgid "Similar Interests" +msgstr "" + #: src/Content/Widget.php:66 msgid "Random Profile" msgstr "" +#: src/Content/Widget.php:67 view/theme/vier/theme.php:204 +msgid "Invite Friends" +msgstr "" + #: src/Content/Widget.php:68 msgid "View Global Directory" msgstr "" @@ -8843,6 +8727,56 @@ msgstr "" msgid "Only You Can See This" msgstr "" +#: src/Model/Item.php:1676 +#, php-format +msgid "%1$s is attending %2$s's %3$s" +msgstr "" + +#: src/Model/Item.php:1681 +#, php-format +msgid "%1$s is not attending %2$s's %3$s" +msgstr "" + +#: src/Model/Item.php:1686 +#, php-format +msgid "%1$s may attend %2$s's %3$s" +msgstr "" + +#: src/Model/Group.php:44 +msgid "" +"A deleted group with this name was revived. Existing item permissions " +"may apply to this group and any future members. If this is " +"not what you intended, please create another group with a different name." +msgstr "" + +#: src/Model/Group.php:328 +msgid "Default privacy group for new contacts" +msgstr "" + +#: src/Model/Group.php:361 +msgid "Everybody" +msgstr "" + +#: src/Model/Group.php:381 +msgid "edit" +msgstr "" + +#: src/Model/Group.php:405 +msgid "Edit group" +msgstr "" + +#: src/Model/Group.php:406 +msgid "Contacts not in any group" +msgstr "" + +#: src/Model/Group.php:407 +msgid "Create a new group" +msgstr "" + +#: src/Model/Group.php:409 +msgid "Edit groups" +msgstr "" + #: src/Model/Contact.php:645 msgid "Drop Contact" msgstr "" @@ -8984,56 +8918,6 @@ msgstr "" msgid "Hide map" msgstr "" -#: src/Model/Group.php:44 -msgid "" -"A deleted group with this name was revived. Existing item permissions " -"may apply to this group and any future members. If this is " -"not what you intended, please create another group with a different name." -msgstr "" - -#: src/Model/Group.php:328 -msgid "Default privacy group for new contacts" -msgstr "" - -#: src/Model/Group.php:361 -msgid "Everybody" -msgstr "" - -#: src/Model/Group.php:381 -msgid "edit" -msgstr "" - -#: src/Model/Group.php:405 -msgid "Edit group" -msgstr "" - -#: src/Model/Group.php:406 -msgid "Contacts not in any group" -msgstr "" - -#: src/Model/Group.php:407 -msgid "Create a new group" -msgstr "" - -#: src/Model/Group.php:409 -msgid "Edit groups" -msgstr "" - -#: src/Model/Item.php:1676 -#, php-format -msgid "%1$s is attending %2$s's %3$s" -msgstr "" - -#: src/Model/Item.php:1681 -#, php-format -msgid "%1$s is not attending %2$s's %3$s" -msgstr "" - -#: src/Model/Item.php:1686 -#, php-format -msgid "%1$s may attend %2$s's %3$s" -msgstr "" - #: src/Model/User.php:144 msgid "Login failed" msgstr "" @@ -9108,6 +8992,10 @@ msgstr "" msgid "An error occurred during registration. Please try again." msgstr "" +#: src/Model/User.php:488 view/theme/duepuntozero/config.php:54 +msgid "default" +msgstr "" + #: src/Model/User.php:493 msgid "An error occurred creating your default profile. Please try again." msgstr "" @@ -9145,55 +9033,11 @@ msgid "" "\t\t" msgstr "" -#: src/Model/User.php:615 -#, php-format -msgid "" -"\n" -"\t\t\tThe login details are as follows:\n" -"\t\t\t\tSite Location:\t%3$s\n" -"\t\t\t\tLogin Name:\t%1$s\n" -"\t\t\t\tPassword:\t%5$s\n" -"\n" -"\t\t\tYou may change your password from your account Settings page after " -"logging\n" -"\t\t\tin.\n" -"\n" -"\t\t\tPlease take a few moments to review the other account settings on that " -"page.\n" -"\n" -"\t\t\tYou may also wish to add some basic information to your default " -"profile\n" -"\t\t\t(on the \"Profiles\" page) so that other people can easily find you.\n" -"\n" -"\t\t\tWe recommend setting your full name, adding a profile photo,\n" -"\t\t\tadding some profile keywords (very useful in making new friends) - " -"and\n" -"\t\t\tperhaps what country you live in; if you do not wish to be more " -"specific\n" -"\t\t\tthan that.\n" -"\n" -"\t\t\tWe fully respect your right to privacy, and none of these items are " -"necessary.\n" -"\t\t\tIf you are new and do not know anybody here, they may help\n" -"\t\t\tyou to make some new and interesting friends.\n" -"\n" -"\n" -"\t\t\tThank you and welcome to %2$s." -msgstr "" - #: src/Protocol/DFRN.php:1396 #, php-format msgid "%s\\'s birthday" msgstr "" -#: src/Protocol/Diaspora.php:2647 -msgid "Sharing notification from Diaspora network" -msgstr "" - -#: src/Protocol/Diaspora.php:3732 -msgid "Attachments:" -msgstr "" - #: src/Protocol/OStatus.php:1799 #, php-format msgid "%s is now following %s." @@ -9212,50 +9056,18 @@ msgstr "" msgid "stopped following" msgstr "" +#: src/Protocol/Diaspora.php:2647 +msgid "Sharing notification from Diaspora network" +msgstr "" + +#: src/Protocol/Diaspora.php:3732 +msgid "Attachments:" +msgstr "" + #: src/Worker/Delivery.php:390 msgid "(no subject)" msgstr "" -#: src/Module/Login.php:282 -msgid "Create a New Account" -msgstr "" - -#: src/Module/Login.php:315 -msgid "Password: " -msgstr "" - -#: src/Module/Login.php:316 -msgid "Remember me" -msgstr "" - -#: src/Module/Login.php:319 -msgid "Or login using OpenID: " -msgstr "" - -#: src/Module/Login.php:325 -msgid "Forgot your password?" -msgstr "" - -#: src/Module/Login.php:328 -msgid "Website Terms of Service" -msgstr "" - -#: src/Module/Login.php:329 -msgid "terms of service" -msgstr "" - -#: src/Module/Login.php:331 -msgid "Website Privacy Policy" -msgstr "" - -#: src/Module/Login.php:332 -msgid "privacy policy" -msgstr "" - -#: src/Module/Logout.php:28 -msgid "Logged out." -msgstr "" - #: src/Object/Post.php:128 msgid "This entry was edited" msgstr "" @@ -9379,19 +9191,243 @@ msgstr "" msgid "Video" msgstr "" -#: src/App.php:517 +#: src/Module/Login.php:282 +msgid "Create a New Account" +msgstr "" + +#: src/Module/Login.php:315 +msgid "Password: " +msgstr "" + +#: src/Module/Login.php:316 +msgid "Remember me" +msgstr "" + +#: src/Module/Login.php:319 +msgid "Or login using OpenID: " +msgstr "" + +#: src/Module/Login.php:325 +msgid "Forgot your password?" +msgstr "" + +#: src/Module/Login.php:328 +msgid "Website Terms of Service" +msgstr "" + +#: src/Module/Login.php:329 +msgid "terms of service" +msgstr "" + +#: src/Module/Login.php:331 +msgid "Website Privacy Policy" +msgstr "" + +#: src/Module/Login.php:332 +msgid "privacy policy" +msgstr "" + +#: src/Module/Logout.php:28 +msgid "Logged out." +msgstr "" + +#: src/App.php:511 msgid "Delete this item?" msgstr "" -#: src/App.php:519 +#: src/App.php:513 msgid "show fewer" msgstr "" +#: view/theme/duepuntozero/config.php:55 +msgid "greenzero" +msgstr "" + +#: view/theme/duepuntozero/config.php:56 +msgid "purplezero" +msgstr "" + +#: view/theme/duepuntozero/config.php:57 +msgid "easterbunny" +msgstr "" + +#: view/theme/duepuntozero/config.php:58 +msgid "darkzero" +msgstr "" + +#: view/theme/duepuntozero/config.php:59 +msgid "comix" +msgstr "" + +#: view/theme/duepuntozero/config.php:60 +msgid "slackr" +msgstr "" + +#: view/theme/duepuntozero/config.php:74 +msgid "Variations" +msgstr "" + +#: view/theme/frio/php/Image.php:25 +msgid "Repeat the image" +msgstr "" + +#: view/theme/frio/php/Image.php:25 +msgid "Will repeat your image to fill the background." +msgstr "" + +#: view/theme/frio/php/Image.php:27 +msgid "Stretch" +msgstr "" + +#: view/theme/frio/php/Image.php:27 +msgid "Will stretch to width/height of the image." +msgstr "" + +#: view/theme/frio/php/Image.php:29 +msgid "Resize fill and-clip" +msgstr "" + +#: view/theme/frio/php/Image.php:29 +msgid "Resize to fill and retain aspect ratio." +msgstr "" + +#: view/theme/frio/php/Image.php:31 +msgid "Resize best fit" +msgstr "" + +#: view/theme/frio/php/Image.php:31 +msgid "Resize to best fit and retain aspect ratio." +msgstr "" + +#: view/theme/frio/config.php:97 +msgid "Default" +msgstr "" + +#: view/theme/frio/config.php:109 +msgid "Note" +msgstr "" + +#: view/theme/frio/config.php:109 +msgid "Check image permissions if all users are allowed to visit the image" +msgstr "" + +#: view/theme/frio/config.php:116 +msgid "Select scheme" +msgstr "" + +#: view/theme/frio/config.php:117 +msgid "Navigation bar background color" +msgstr "" + +#: view/theme/frio/config.php:118 +msgid "Navigation bar icon color " +msgstr "" + +#: view/theme/frio/config.php:119 +msgid "Link color" +msgstr "" + +#: view/theme/frio/config.php:120 +msgid "Set the background color" +msgstr "" + +#: view/theme/frio/config.php:121 +msgid "Content background opacity" +msgstr "" + +#: view/theme/frio/config.php:122 +msgid "Set the background image" +msgstr "" + +#: view/theme/frio/config.php:127 +msgid "Login page background image" +msgstr "" + +#: view/theme/frio/config.php:130 +msgid "Login page background color" +msgstr "" + +#: view/theme/frio/config.php:130 +msgid "Leave background image and color empty for theme defaults" +msgstr "" + +#: view/theme/frio/theme.php:238 +msgid "Guest" +msgstr "" + +#: view/theme/frio/theme.php:243 +msgid "Visitor" +msgstr "" + +#: view/theme/quattro/config.php:76 +msgid "Alignment" +msgstr "" + +#: view/theme/quattro/config.php:76 +msgid "Left" +msgstr "" + +#: view/theme/quattro/config.php:76 +msgid "Center" +msgstr "" + +#: view/theme/quattro/config.php:77 +msgid "Color scheme" +msgstr "" + +#: view/theme/quattro/config.php:78 +msgid "Posts font size" +msgstr "" + +#: view/theme/quattro/config.php:79 +msgid "Textareas font size" +msgstr "" + +#: view/theme/vier/config.php:75 +msgid "Comma separated list of helper forums" +msgstr "" + +#: view/theme/vier/config.php:122 +msgid "Set style" +msgstr "" + +#: view/theme/vier/config.php:123 +msgid "Community Pages" +msgstr "" + +#: view/theme/vier/config.php:124 view/theme/vier/theme.php:150 +msgid "Community Profiles" +msgstr "" + +#: view/theme/vier/config.php:125 +msgid "Help or @NewHere ?" +msgstr "" + +#: view/theme/vier/config.php:126 view/theme/vier/theme.php:389 +msgid "Connect Services" +msgstr "" + +#: view/theme/vier/config.php:127 view/theme/vier/theme.php:199 +msgid "Find Friends" +msgstr "" + +#: view/theme/vier/config.php:128 view/theme/vier/theme.php:181 +msgid "Last users" +msgstr "" + +#: view/theme/vier/theme.php:200 +msgid "Local Directory" +msgstr "" + +#: view/theme/vier/theme.php:292 +msgid "Quick Start" +msgstr "" + +#: index.php:444 +msgid "toggle mobile" +msgstr "" + #: boot.php:791 #, php-format msgid "Update %s failed. See error logs." msgstr "" - -#: index.php:444 -msgid "toggle mobile" -msgstr "" From eeadd2f9d61ca1dfd8acf157df5f4b8b06d87b0b Mon Sep 17 00:00:00 2001 From: Michael Date: Mon, 2 Apr 2018 21:46:10 +0000 Subject: [PATCH 209/227] The Diaspora transport layer is now the default for DFRN --- src/Protocol/DFRN.php | 57 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 46 insertions(+), 11 deletions(-) diff --git a/src/Protocol/DFRN.php b/src/Protocol/DFRN.php index ea867a84d..88025b88c 100644 --- a/src/Protocol/DFRN.php +++ b/src/Protocol/DFRN.php @@ -1146,13 +1146,20 @@ class DFRN * @param string $atom Content that will be transmitted * @param bool $dissolve (to be documented) * - * @return int Deliver status. -1 means an error. + * @return int Deliver status. Negative values mean an error. * @todo Add array type-hint for $owner, $contact */ public static function deliver($owner, $contact, $atom, $dissolve = false) { $a = get_app(); + // At first try the Diaspora transport layer + $ret = self::transmit($owner, $contact, $atom); + if ($ret >= 200) { + logger('Delivery via Diaspora transport layer was successfull with status ' . $ret); + return $ret; + } + $idtosend = $orig_id = (($contact['dfrn-id']) ? $contact['dfrn-id'] : $contact['issued-id']); if ($contact['duplex'] && $contact['dfrn-id']) { @@ -1359,7 +1366,7 @@ class DFRN } if (!empty($res->message)) { - logger('Delivery returned status '.$res->status.' - '.$res->message, LOGGER_DEBUG); + logger('Transmit returned status '.$res->status.' - '.$res->message, LOGGER_DEBUG); } if ($res->status == 200) { @@ -1370,15 +1377,15 @@ class DFRN } /** - * @brief Delivers items to the contacts via the Diaspora transport layer + * @brief Transmits atom content to the contacts via the Diaspora transport layer * - * @param array $owner Owner record - * @param array $contact Contact record of the receiver - * @param array $items Items that will be transmitted + * @param array $owner Owner record + * @param array $contact Contact record of the receiver + * @param string $atom Content that will be transmitted * - * @return int HTTP Deliver status + * @return int Deliver status. Negative values mean an error. */ - public static function buildAndTransmit($owner, $contact, $items) + public static function transmit($owner, $contact, $atom) { $a = get_app(); @@ -1400,10 +1407,38 @@ class DFRN $content_type = ($public_batch ? "application/magic-envelope+xml" : "application/json"); - $ret = Network::post($dest_url, $envelope, ["Content-Type: ".$content_type]); + $xml = Network::post($dest_url, $envelope, ["Content-Type: ".$content_type]); - /// @ToDo: Add better treatment of return codes - return $a->get_curl_code(); + $curl_stat = $a->get_curl_code(); + if (!$curl_stat || empty($xml)) { + return -9; // timed out + } + + if (($curl_stat == 503) && (stristr($a->get_curl_headers(), 'retry-after'))) { + return -10; + } + + if (strpos($xml, 'status)) { + return -11; + } + + if (!empty($res->message)) { + logger('Delivery returned status '.$res->status.' - '.$res->message, LOGGER_DEBUG); + } + + if ($res->status == 200) { + Contact::unmarkForArchival($contact); + } + + return intval($res->status); } /** From 8ff6a31512d86623673d38c116d37cca566dab27 Mon Sep 17 00:00:00 2001 From: Michael Date: Mon, 2 Apr 2018 21:59:30 +0000 Subject: [PATCH 210/227] Sending does now work --- src/Protocol/DFRN.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/Protocol/DFRN.php b/src/Protocol/DFRN.php index 88025b88c..1ead71ea1 100644 --- a/src/Protocol/DFRN.php +++ b/src/Protocol/DFRN.php @@ -1393,15 +1393,13 @@ class DFRN // $public_batch = !$items[0]['private']; $public_batch = false; - $msg = DFRN::entries($items, $owner); - $fcontact = Diaspora::personByHandle($contact['addr']); if (empty($fcontact)) { logger("unable to find contact details"); return; } - $envelope = Diaspora::buildMessage($msg, $owner, $contact, $owner['uprvkey'], $fcontact['pubkey'], $public_batch); + $envelope = Diaspora::buildMessage($atom, $owner, $contact, $owner['uprvkey'], $fcontact['pubkey'], $public_batch); $dest_url = ($public_batch ? $fcontact["batch"] : $contact["notify"]); From becc86a9606a3619cf96b6d38ca245e726431d52 Mon Sep 17 00:00:00 2001 From: Michael Date: Mon, 2 Apr 2018 22:02:43 +0000 Subject: [PATCH 211/227] Changed logging text --- src/Protocol/DFRN.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Protocol/DFRN.php b/src/Protocol/DFRN.php index 1ead71ea1..e253ae751 100644 --- a/src/Protocol/DFRN.php +++ b/src/Protocol/DFRN.php @@ -1366,7 +1366,7 @@ class DFRN } if (!empty($res->message)) { - logger('Transmit returned status '.$res->status.' - '.$res->message, LOGGER_DEBUG); + logger('Delivery returned status '.$res->status.' - '.$res->message, LOGGER_DEBUG); } if ($res->status == 200) { @@ -1429,7 +1429,7 @@ class DFRN } if (!empty($res->message)) { - logger('Delivery returned status '.$res->status.' - '.$res->message, LOGGER_DEBUG); + logger('Transmit returned status '.$res->status.' - '.$res->message, LOGGER_DEBUG); } if ($res->status == 200) { From d668b967c90f65366375ff6cfb825a97d66cb253 Mon Sep 17 00:00:00 2001 From: Michael Date: Mon, 2 Apr 2018 22:06:31 +0000 Subject: [PATCH 212/227] Misspelling --- src/Protocol/DFRN.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Protocol/DFRN.php b/src/Protocol/DFRN.php index e253ae751..ea3a05a88 100644 --- a/src/Protocol/DFRN.php +++ b/src/Protocol/DFRN.php @@ -1156,7 +1156,7 @@ class DFRN // At first try the Diaspora transport layer $ret = self::transmit($owner, $contact, $atom); if ($ret >= 200) { - logger('Delivery via Diaspora transport layer was successfull with status ' . $ret); + logger('Delivery via Diaspora transport layer was successful with status ' . $ret); return $ret; } From 3ec4e28af692ec29d6c337517aab56fc247c8513 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Tue, 3 Apr 2018 06:55:25 +0200 Subject: [PATCH 213/227] updated the privacy statement text and added some headers to the functions --- mod/tos.php | 35 ++++++++++++++++++++------- util/messages.po | 62 ++++++++++++++++++++++++------------------------ 2 files changed, 58 insertions(+), 39 deletions(-) diff --git a/mod/tos.php b/mod/tos.php index 4ce8a8f3f..70fd87aaa 100644 --- a/mod/tos.php +++ b/mod/tos.php @@ -1,37 +1,56 @@ L10n::t('Terms of Service'), + '$title' => L10n::t("Terms of Service"), '$tostext' => BBCode::convert(Config::get('system', 'tostext')), '$displayprivstatement' => Config::get('system', 'tosprivstatement'), - '$privstatementtitle' => L10n::t('Privacy Statement'), - '$privoperate' => L10n::t('At the time of registration, and for providing communications between the user account and their contacts, the user has to provide a display name (pen name), a nickname and a working email address. The names will be accessible on the profile page of the account by any visitor of the page even if other profile details are not displayed. The email address will only be used to send the user notifications about interactions, but wont be visibly displayed. The listing of an account in the nodes user directory or the global user directory is optional and can be controlled in the user settings, it is not necessary for communication.'), - '$privdelete' => L10n::t('At any point in time a logged in user can export their account data from the account settings. If the user wants to delete their account they can do so at %1$s. The deletion of the account will be permanent.', System::baseurl().'/removeme') + '$privstatementtitle' => L10n::t("Privacy Statement"), + '$privoperate' => L10n::t('At the time of registration, and for providing communications between the user account and their contacts, the user has to provide a display name (pen name), an username (nickname) and a working email address. The names will be accessible on the profile page of the account by any visitor of the page, even if other profile details are not displayed. The email address will only be used to send the user notifications about interactions, but wont be visibly displayed. The listing of an account in the node\'s user directory or the global user directory is optional and can be controlled in the user settings, it is not necessary for communication.'), + '$privdelete' => L10n::t('At any point in time a logged in user can export their account data from the account settings. If the user wants to delete their account they can do so at %1$s/removeme. The deletion of the account will be permanent.', System::baseurl()) ]); } else { return; diff --git a/util/messages.po b/util/messages.po index ac457d982..40829b007 100644 --- a/util/messages.po +++ b/util/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-02 18:46+0200\n" +"POT-Creation-Date: 2018-04-03 06:50+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -5701,36 +5701,6 @@ msgstr "" msgid "Create New Profile" msgstr "" -#: mod/tos.php:29 mod/register.php:288 mod/admin.php:188 mod/admin.php:302 -msgid "Terms of Service" -msgstr "" - -#: mod/tos.php:32 -msgid "Privacy Statement" -msgstr "" - -#: mod/tos.php:33 -msgid "" -"At the time of registration, and for providing communications between the " -"user account and their contacts, the user has to provide a display name (pen " -"name), a nickname and a working email address. The names will be accessible " -"on the profile page of the account by any visitor of the page even if other " -"profile details are not displayed. The email address will only be used to " -"send the user notifications about interactions, but wont be visibly " -"displayed. The listing of an account in the nodes user directory or the " -"global user directory is optional and can be controlled in the user " -"settings, it is not necessary for communication." -msgstr "" - -#: mod/tos.php:34 -#, php-format -msgid "" -"At any point in time a logged in user can export their account data from the " -"account settings. If the user wants to " -"delete their account they can do so at %1$s. The " -"deletion of the account will be permanent." -msgstr "" - #: mod/register.php:99 msgid "" "Registration successful. Please check your email for further instructions." @@ -5828,6 +5798,10 @@ msgstr "" msgid "Import your profile to this friendica instance" msgstr "" +#: mod/register.php:288 mod/admin.php:188 mod/admin.php:302 mod/tos.php:48 +msgid "Terms of Service" +msgstr "" + #: mod/friendica.php:77 msgid "This is Friendica, version" msgstr "" @@ -7551,6 +7525,32 @@ msgstr "" msgid "Manage Additional Features" msgstr "" +#: mod/tos.php:51 +msgid "Privacy Statement" +msgstr "" + +#: mod/tos.php:52 +msgid "" +"At the time of registration, and for providing communications between the " +"user account and their contacts, the user has to provide a display name (pen " +"name), an username (nickname) and a working email address. The names will be " +"accessible on the profile page of the account by any visitor of the page, " +"even if other profile details are not displayed. The email address will only " +"be used to send the user notifications about interactions, but wont be " +"visibly displayed. The listing of an account in the node's user directory or " +"the global user directory is optional and can be controlled in the user " +"settings, it is not necessary for communication." +msgstr "" + +#: mod/tos.php:53 +#, php-format +msgid "" +"At any point in time a logged in user can export their account data from the " +"account settings. If the user wants to " +"delete their account they can do so at %1$s/" +"removeme. The deletion of the account will be permanent." +msgstr "" + #: src/Core/UserImport.php:104 msgid "Error decoding account file" msgstr "" From 4f221d63346f20f0ad99f9f7ba1c942b255c34db Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Tue, 3 Apr 2018 06:57:27 +0200 Subject: [PATCH 214/227] indentation --- view/templates/admin/tos.tpl | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/view/templates/admin/tos.tpl b/view/templates/admin/tos.tpl index 79465e7f1..033a45d26 100644 --- a/view/templates/admin/tos.tpl +++ b/view/templates/admin/tos.tpl @@ -2,11 +2,11 @@

    {{$title}} - {{$page}}

    {{$intro}}

    - - {{include file="field_checkbox.tpl" field=$displaytos}} - {{include file="field_checkbox.tpl" field=$displayprivstatement}} - {{include file="field_textarea.tpl" field=$tostext}} -
    + + {{include file="field_checkbox.tpl" field=$displaytos}} + {{include file="field_checkbox.tpl" field=$displayprivstatement}} + {{include file="field_textarea.tpl" field=$tostext}} +
    From ca0b0e92c857b4cade2704c08e2bf66330cb7d90 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Tue, 3 Apr 2018 06:58:21 +0200 Subject: [PATCH 215/227] indentation --- view/templates/admin/tos.tpl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/view/templates/admin/tos.tpl b/view/templates/admin/tos.tpl index 033a45d26..14fe68d7b 100644 --- a/view/templates/admin/tos.tpl +++ b/view/templates/admin/tos.tpl @@ -3,9 +3,9 @@

    {{$intro}}

    - {{include file="field_checkbox.tpl" field=$displaytos}} - {{include file="field_checkbox.tpl" field=$displayprivstatement}} - {{include file="field_textarea.tpl" field=$tostext}} + {{include file="field_checkbox.tpl" field=$displaytos}} + {{include file="field_checkbox.tpl" field=$displayprivstatement}} + {{include file="field_textarea.tpl" field=$tostext}}
    From 50f91862de10842d37b5757765324b9d8f671eff Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Tue, 3 Apr 2018 01:04:46 -0400 Subject: [PATCH 216/227] [Composer] Bump divineomega/password_exposed version to 2.5.1 --- composer.lock | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/composer.lock b/composer.lock index 8e5a7f163..2fc9bbd8f 100644 --- a/composer.lock +++ b/composer.lock @@ -135,16 +135,16 @@ }, { "name": "divineomega/password_exposed", - "version": "v2.4.0", + "version": "v2.5.1", "source": { "type": "git", "url": "https://github.com/DivineOmega/password_exposed.git", - "reference": "7e26898a280662529b3e5e472b16fcbda167ffce" + "reference": "c928bf722eb02398df11076add60df070cb55581" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/DivineOmega/password_exposed/zipball/7e26898a280662529b3e5e472b16fcbda167ffce", - "reference": "7e26898a280662529b3e5e472b16fcbda167ffce", + "url": "https://api.github.com/repos/DivineOmega/password_exposed/zipball/c928bf722eb02398df11076add60df070cb55581", + "reference": "c928bf722eb02398df11076add60df070cb55581", "shasum": "" }, "require": { @@ -179,7 +179,7 @@ } ], "description": "This PHP package provides a `password_exposed` helper function, that uses the haveibeenpwned.com API to check if a password has been exposed in a data breach.", - "time": "2018-03-14T09:17:40+00:00" + "time": "2018-04-02T18:16:36+00:00" }, { "name": "ezyang/htmlpurifier", From d10cdfe9423266b5f88bb082cb0f75f0b96f1151 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Tue, 3 Apr 2018 12:45:27 +0200 Subject: [PATCH 217/227] pass uid to notofication system so securemail addon can pick it up --- mod/lostpass.php | 1 + 1 file changed, 1 insertion(+) diff --git a/mod/lostpass.php b/mod/lostpass.php index 56ad7e30e..e44c0938e 100644 --- a/mod/lostpass.php +++ b/mod/lostpass.php @@ -69,6 +69,7 @@ function lostpass_post(App $a) notification([ 'type' => SYSTEM_EMAIL, 'to_email' => $user['email'], + 'uid' => $user['uid'], 'subject' => L10n::t('Password reset requested at %s', $sitename), 'preamble' => $preamble, 'body' => $body From 03ed5e5649e0a84767ce22e064df5da7d78724a6 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Tue, 3 Apr 2018 12:47:38 +0200 Subject: [PATCH 218/227] forgot the 2nd mail --- mod/lostpass.php | 1 + 1 file changed, 1 insertion(+) diff --git a/mod/lostpass.php b/mod/lostpass.php index e44c0938e..af4518ca1 100644 --- a/mod/lostpass.php +++ b/mod/lostpass.php @@ -165,6 +165,7 @@ function lostpass_generate_password($user) notification([ 'type' => SYSTEM_EMAIL, 'to_email' => $user['email'], + 'uid' => $user['uid'], 'subject' => L10n::t('Your password has been changed at %s', $sitename), 'preamble' => $preamble, 'body' => $body From 1a2c771f24b48255ff2b7801e3f69b7047a53782 Mon Sep 17 00:00:00 2001 From: Michael Date: Tue, 3 Apr 2018 12:18:05 +0000 Subject: [PATCH 219/227] DFRN: Improvements to delivery. Logging and marking as not reachable --- src/Protocol/DFRN.php | 44 ++++++++++++++++++++++++--------------- src/Protocol/Diaspora.php | 16 ++++++++------ src/Worker/Delivery.php | 2 +- 3 files changed, 38 insertions(+), 24 deletions(-) diff --git a/src/Protocol/DFRN.php b/src/Protocol/DFRN.php index ea3a05a88..734fbde62 100644 --- a/src/Protocol/DFRN.php +++ b/src/Protocol/DFRN.php @@ -1203,13 +1203,13 @@ class DFRN $xml = $ret['body']; $curl_stat = $a->get_curl_code(); - if (!$curl_stat) { + if (empty($curl_stat)) { return -3; // timed out } logger('dfrn_deliver: ' . $xml, LOGGER_DATA); - if (! $xml) { + if (empty($xml)) { return 3; } @@ -1222,7 +1222,7 @@ class DFRN $res = XML::parseString($xml); if ((intval($res->status) != 0) || (! strlen($res->challenge)) || (! strlen($res->dfrn_id))) { - return (($res->status) ? $res->status : 3); + return ($res->status ? $res->status : 3); } $postvars = []; @@ -1345,11 +1345,11 @@ class DFRN logger('dfrn_deliver: ' . "RECEIVED: " . $xml, LOGGER_DATA); $curl_stat = $a->get_curl_code(); - if ((!$curl_stat) || (!strlen($xml))) { + if (empty($curl_stat) || empty($xml)) { return -9; // timed out } - if (($curl_stat == 503) && (stristr($a->get_curl_headers(), 'retry-after'))) { + if (($curl_stat == 503) && stristr($a->get_curl_headers(), 'retry-after')) { return -10; } @@ -1361,7 +1361,7 @@ class DFRN $res = XML::parseString($xml); - if (!isset($res->status)) { + if (empty($res->status)) { return -11; } @@ -1385,18 +1385,27 @@ class DFRN * * @return int Deliver status. Negative values mean an error. */ - public static function transmit($owner, $contact, $atom) + public static function transmit($owner, $contact, $atom, $public_batch = false) { $a = get_app(); - // Currently disabled, at first we will not use the batch delivery - // $public_batch = !$items[0]['private']; - $public_batch = false; + if (empty($contact['addr'])) { + logger('Empty contact handle for ' . $contact['id'] . ' - ' . $contact['url'] . ' - trying to update it.'); + if (Contact::updateFromProbe($contact['id'])) { + $new_contact = dba::selectFirst('contact', ['addr'], ['id' => $contact['id']]); + $contact['addr'] = $new_contact['addr']; + } + + if (empty($contact['addr'])) { + logger('Unable to find contact handle for ' . $contact['id'] . ' - ' . $contact['url']); + return -21; + } + } $fcontact = Diaspora::personByHandle($contact['addr']); if (empty($fcontact)) { - logger("unable to find contact details"); - return; + logger('Unable to find contact details for ' . $contact['id'] . ' - ' . $contact['addr']); + return -21; } $envelope = Diaspora::buildMessage($atom, $owner, $contact, $owner['uprvkey'], $fcontact['pubkey'], $public_batch); @@ -1408,7 +1417,8 @@ class DFRN $xml = Network::post($dest_url, $envelope, ["Content-Type: ".$content_type]); $curl_stat = $a->get_curl_code(); - if (!$curl_stat || empty($xml)) { + if (empty($curl_stat) || empty($xml)) { + logger('Empty answer from ' . $contact['id'] . ' - ' . $dest_url); return -9; // timed out } @@ -1417,19 +1427,19 @@ class DFRN } if (strpos($xml, 'status)) { + if (empty($res->status)) { return -11; } if (!empty($res->message)) { - logger('Transmit returned status '.$res->status.' - '.$res->message, LOGGER_DEBUG); + logger('Transmit to ' . $dest_url . ' returned status '.$res->status.' - '.$res->message, LOGGER_DEBUG); } if ($res->status == 200) { diff --git a/src/Protocol/Diaspora.php b/src/Protocol/Diaspora.php index 4b8ae2110..d5d60a154 100644 --- a/src/Protocol/Diaspora.php +++ b/src/Protocol/Diaspora.php @@ -82,15 +82,19 @@ class Diaspora // All servers who wants content with this tag $tagserverlist = []; - $tagserver = dba::select('gserver-tag', ['gserver-id'], ['tag' => $taglist]); - while ($server = dba::fetch($tagserver)) { - $tagserverlist[] = $server['gserver-id']; + if (!empty($taglist)) { + $tagserver = dba::select('gserver-tag', ['gserver-id'], ['tag' => $taglist]); + while ($server = dba::fetch($tagserver)) { + $tagserverlist[] = $server['gserver-id']; + } } // All adresses with the given id - $servers = dba::select('gserver', ['url'], ['relay-subscribe' => true, 'relay-scope' => 'tags', 'id' => $tagserverlist]); - while ($server = dba::fetch($servers)) { - $serverlist[$server['url']] = $server['url']; + if (!empty($tagserverlist)) { + $servers = dba::select('gserver', ['url'], ['relay-subscribe' => true, 'relay-scope' => 'tags', 'id' => $tagserverlist]); + while ($server = dba::fetch($servers)) { + $serverlist[$server['url']] = $server['url']; + } } } diff --git a/src/Worker/Delivery.php b/src/Worker/Delivery.php index dc6caab3d..ecc9e9b69 100644 --- a/src/Worker/Delivery.php +++ b/src/Worker/Delivery.php @@ -318,7 +318,7 @@ class Delivery { logger('notifier: dfrn_delivery to '.$contact["url"].' with guid '.$target_item["guid"].' returns '.$deliver_status); - if ($deliver_status < 0) { + if ($deliver_status < 200) { logger('notifier: delivery failed: queuing message'); Queue::add($contact['id'], NETWORK_DFRN, $atom, false, $target_item['guid']); From e7fb8c04dd1ed705c2399146e169ba2675141c9e Mon Sep 17 00:00:00 2001 From: Michael Date: Tue, 3 Apr 2018 12:27:22 +0000 Subject: [PATCH 220/227] Don't always queue messages --- src/Worker/Delivery.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Worker/Delivery.php b/src/Worker/Delivery.php index ecc9e9b69..e98d66a08 100644 --- a/src/Worker/Delivery.php +++ b/src/Worker/Delivery.php @@ -318,10 +318,12 @@ class Delivery { logger('notifier: dfrn_delivery to '.$contact["url"].' with guid '.$target_item["guid"].' returns '.$deliver_status); - if ($deliver_status < 200) { + if ($deliver_status < 0) { logger('notifier: delivery failed: queuing message'); Queue::add($contact['id'], NETWORK_DFRN, $atom, false, $target_item['guid']); + } + if ($deliver_status < 200) { // The message could not be delivered. We mark the contact as "dead" Contact::markForArchival($contact); } else { From 297ade6981ba5abb0d899642f96fea422f42112f Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Tue, 3 Apr 2018 15:49:54 +0200 Subject: [PATCH 221/227] removed leftover from the used template --- mod/tos.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/mod/tos.php b/mod/tos.php index 70fd87aaa..13f64c6f9 100644 --- a/mod/tos.php +++ b/mod/tos.php @@ -56,6 +56,4 @@ function tos_content(App $a) { return; } - return $o; - } From 4b7014d367370f93be0c511fac68aa9e4b17dd57 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Tue, 3 Apr 2018 16:33:10 +0200 Subject: [PATCH 222/227] move the tos module to src/Module --- mod/tos.php | 59 ---------------------------------------------- src/Module/Tos.php | 59 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+), 59 deletions(-) delete mode 100644 mod/tos.php create mode 100644 src/Module/Tos.php diff --git a/mod/tos.php b/mod/tos.php deleted file mode 100644 index 13f64c6f9..000000000 --- a/mod/tos.php +++ /dev/null @@ -1,59 +0,0 @@ - L10n::t("Terms of Service"), - '$tostext' => BBCode::convert(Config::get('system', 'tostext')), - '$displayprivstatement' => Config::get('system', 'tosprivstatement'), - '$privstatementtitle' => L10n::t("Privacy Statement"), - '$privoperate' => L10n::t('At the time of registration, and for providing communications between the user account and their contacts, the user has to provide a display name (pen name), an username (nickname) and a working email address. The names will be accessible on the profile page of the account by any visitor of the page, even if other profile details are not displayed. The email address will only be used to send the user notifications about interactions, but wont be visibly displayed. The listing of an account in the node\'s user directory or the global user directory is optional and can be controlled in the user settings, it is not necessary for communication.'), - '$privdelete' => L10n::t('At any point in time a logged in user can export their account data from the account settings. If the user wants to delete their account they can do so at %1$s/removeme. The deletion of the account will be permanent.', System::baseurl()) - ]); - } else { - return; - } - -} diff --git a/src/Module/Tos.php b/src/Module/Tos.php new file mode 100644 index 000000000..a5ace5195 --- /dev/null +++ b/src/Module/Tos.php @@ -0,0 +1,59 @@ + L10n::t("Terms of Service"), + '$tostext' => BBCode::convert(Config::get('system', 'tostext')), + '$displayprivstatement' => Config::get('system', 'tosprivstatement'), + '$privstatementtitle' => L10n::t("Privacy Statement"), + '$privoperate' => L10n::t('At the time of registration, and for providing communications between the user account and their contacts, the user has to provide a display name (pen name), an username (nickname) and a working email address. The names will be accessible on the profile page of the account by any visitor of the page, even if other profile details are not displayed. The email address will only be used to send the user notifications about interactions, but wont be visibly displayed. The listing of an account in the node\'s user directory or the global user directory is optional and can be controlled in the user settings, it is not necessary for communication.'), + '$privdelete' => L10n::t('At any point in time a logged in user can export their account data from the account settings. If the user wants to delete their account they can do so at %1$s/removeme. The deletion of the account will be permanent.', System::baseurl()) + ]); + } else { + return; + } + } +} From 0af5e54ef1338a5f4a8c247ba84910148129bdea Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Tue, 3 Apr 2018 16:33:39 +0200 Subject: [PATCH 223/227] added hint about naming the class and filename --- src/BaseModule.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/BaseModule.php b/src/BaseModule.php index aad4e6fb0..d0019ccd1 100644 --- a/src/BaseModule.php +++ b/src/BaseModule.php @@ -6,6 +6,9 @@ namespace Friendica; * All modules in Friendica should extend BaseModule, although not all modules * need to extend all the methods described here * + * The filename of the module in src/Module needs to match the class name + * exactly to make the module available. + * * @author Hypolite Petovan mrpetovan@gmail.com */ abstract class BaseModule extends BaseObject From 59fe47ccee6920f31891b5423531d7dd1ee23f0b Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Tue, 3 Apr 2018 17:19:18 +0200 Subject: [PATCH 224/227] update for PL translation THX waldis --- view/lang/pl/messages.po | 92 ++++++++++++++++++++-------------------- view/lang/pl/strings.php | 90 +++++++++++++++++++-------------------- 2 files changed, 91 insertions(+), 91 deletions(-) diff --git a/view/lang/pl/messages.po b/view/lang/pl/messages.po index 99035dbe1..df1caab07 100644 --- a/view/lang/pl/messages.po +++ b/view/lang/pl/messages.po @@ -39,7 +39,7 @@ msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-03-28 08:41+0200\n" -"PO-Revision-Date: 2018-04-01 18:13+0000\n" +"PO-Revision-Date: 2018-04-02 19:35+0000\n" "Last-Translator: Waldemar Stoczkowski \n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" @@ -649,7 +649,7 @@ msgstr "%1$sopublikowano na ścianie profilu w %2$s " #: include/enotify.php:186 #, php-format msgid "%1$s posted to [url=%2$s]your wall[/url]" -msgstr "" +msgstr "%1$s wysłano do [url =%2$s]twojej ściany[/url] " #: include/enotify.php:198 #, php-format @@ -664,7 +664,7 @@ msgstr "%1$s oznaczono Cię tagiem %2$s" #: include/enotify.php:201 #, php-format msgid "%1$s [url=%2$s]tagged you[/url]." -msgstr "" +msgstr "%1$s [url=%2$s]oznaczył Cię[/url]. " #: include/enotify.php:213 #, php-format @@ -723,7 +723,7 @@ msgstr "Otrzymałeś wstęp od '%1$s' z %2$s" #: include/enotify.php:265 #, php-format msgid "You've received [url=%1$s]an introduction[/url] from %2$s." -msgstr "" +msgstr "Otrzymałeś [url=%1$s] wprowadzenie [/ url] z %2$s." #: include/enotify.php:270 include/enotify.php:316 #, php-format @@ -2399,7 +2399,7 @@ msgstr "" #: mod/dfrn_request.php:658 msgid "Diaspora (Socialhome, Hubzilla)" -msgstr "" +msgstr "Diaspora (Socialhome, Hubzilla)" #: mod/dfrn_request.php:659 #, php-format @@ -2662,13 +2662,13 @@ msgstr "Proszę się zalogować." #: mod/removeme.php:55 mod/removeme.php:58 msgid "Remove My Account" -msgstr "Usuń konto" +msgstr "Usuń moje konto" #: mod/removeme.php:56 msgid "" "This will completely remove your account. Once this has been done it is not " "recoverable." -msgstr "Spowoduje to całkowite usunięcie Twojego konta. Po wykonaniu tej czynności nie można jej odzyskać." +msgstr "Spowoduje to całkowite usunięcie Twojego konta. Po wykonaniu tej czynności nie można jej cofnąć." #: mod/removeme.php:57 msgid "Please enter your password for verification:" @@ -3498,7 +3498,7 @@ msgstr "Wstaw nowe filmy" #: mod/admin.php:106 msgid "Theme settings updated." -msgstr "Ustawienia szablonu zmienione." +msgstr "Zaktualizowano ustawienia motywów." #: mod/admin.php:176 src/Content/Nav.php:174 msgid "Information" @@ -3530,7 +3530,7 @@ msgstr "Dodatki" #: mod/admin.php:183 mod/admin.php:2106 mod/admin.php:2150 msgid "Themes" -msgstr "Temat" +msgstr "Wygląd" #: mod/admin.php:184 mod/settings.php:65 msgid "Additional features" @@ -3554,7 +3554,7 @@ msgstr "Narzędzia" #: mod/admin.php:189 msgid "Contact Blocklist" -msgstr "Skontaktuj się z Blocklist" +msgstr "Lista zablokowanych kontaktów" #: mod/admin.php:190 mod/admin.php:311 msgid "Server Blocklist" @@ -3578,7 +3578,7 @@ msgstr "Diagnostyka" #: mod/admin.php:197 msgid "PHP Info" -msgstr "" +msgstr "Informacje o PHP" #: mod/admin.php:198 msgid "probe address" @@ -3995,11 +3995,11 @@ msgstr "Rok" #: mod/admin.php:1222 msgid "Multi user instance" -msgstr "Tryb MultiUsera" +msgstr "Tryb wielu użytkowników" #: mod/admin.php:1245 msgid "Closed" -msgstr "Zamknięty" +msgstr "Zamknięta" #: mod/admin.php:1246 msgid "Requires approval" @@ -4007,7 +4007,7 @@ msgstr "Wymagane zatwierdzenie." #: mod/admin.php:1247 msgid "Open" -msgstr "Otwórz" +msgstr "Otwarte" #: mod/admin.php:1251 msgid "No SSL policy, links will track page SSL state" @@ -4109,7 +4109,7 @@ msgstr "Link do ikony, która będzie używana w przeglądarkach." #: mod/admin.php:1299 msgid "Touch icon" -msgstr "Kliknij ikonę" +msgstr "Dołącz ikonę" #: mod/admin.php:1299 msgid "Link to an icon that will be used for tablets and mobiles." @@ -4124,7 +4124,7 @@ msgstr "Dodatkowe informacje" msgid "" "For public servers: you can add additional information here that will be " "listed at %s/servers." -msgstr "W przypadku serwerów publicznych: możesz tu dodać dodatkowe informacje, które będą wymienione na %s/serwerach." +msgstr "W przypadku serwerów publicznych: możesz tu dodać dodatkowe informacje, które będą wymienione na %s/servers." #: mod/admin.php:1301 msgid "System language" @@ -4142,11 +4142,11 @@ msgstr "Domyślny motyw systemu - może być nadpisany przez profil użytkownika #: mod/admin.php:1303 msgid "Mobile system theme" -msgstr "Mobilny motyw systemowy" +msgstr "Motyw systemu mobilnego" #: mod/admin.php:1303 msgid "Theme for mobile devices" -msgstr "Szablon dla mobilnych urządzeń" +msgstr "Motyw na urządzenia mobilne" #: mod/admin.php:1304 msgid "SSL link policy" @@ -4178,11 +4178,11 @@ msgstr "Chowa pozycje menu dla stron pomocy ze strony nawigacyjnej. Możesz nada #: mod/admin.php:1307 msgid "Single user instance" -msgstr "Tryb SingleUsera" +msgstr "Tryb pojedynczego użytkownika" #: mod/admin.php:1307 msgid "Make this instance multi-user or single-user for the named user" -msgstr "Ustawia tryb multi lub single dla wybranych użytkowników." +msgstr "Ustawia tryb dla wielu użytkowników lub pojedynczego użytkownika dla nazwanego użytkownika" #: mod/admin.php:1308 msgid "Maximum image size" @@ -4216,18 +4216,18 @@ msgstr "Wczytywanie JPEGS będzie zapisane z tymi ustawieniami jakości [0-100] #: mod/admin.php:1312 msgid "Register policy" -msgstr "Zarejestruj polisę" +msgstr "Zasady rejestracji" #: mod/admin.php:1313 msgid "Maximum Daily Registrations" -msgstr "Maksymalnie dziennych rejestracji" +msgstr "Maksymalna dzienna rejestracja" #: mod/admin.php:1313 msgid "" "If registration is permitted above, this sets the maximum number of new user" " registrations to accept per day. If register is set to closed, this " "setting has no effect." -msgstr "Jeśli rejestracja jest dozwolona powyżej, określa maksymalną liczbę nowych rejestracji użytkowników do zaakceptowania na dzień. Jeśli rejestr jest ustawiony na zamknięty, to ustawienie nie ma wpływu." +msgstr "Jeśli rejestracja powyżej jest dozwolona, to określa maksymalną liczbę nowych rejestracji użytkowników do zaakceptowania na dzień. Jeśli rejestracja jest ustawiona na \"Zamknięta\", to ustawienie to nie ma wpływu." #: mod/admin.php:1314 msgid "Register text" @@ -5093,7 +5093,7 @@ msgstr "W twoim węźle nie ma obecnie żadnych dodatków. Możesz znaleźć ofi #: mod/admin.php:2024 msgid "No themes found." -msgstr "Nie znaleziono tematu." +msgstr "Nie znaleziono motywów." #: mod/admin.php:2098 msgid "Screenshot" @@ -5152,7 +5152,7 @@ msgstr "Poziom logów" #: mod/admin.php:2234 msgid "PHP logging" -msgstr "" +msgstr "Logowanie w PHP" #: mod/admin.php:2235 msgid "" @@ -5200,39 +5200,39 @@ msgstr "Źródło wejściowe" #: mod/babel.php:28 msgid "BBCode::convert (raw HTML(" -msgstr "" +msgstr "BBCode::przekształć (raw HTML(" #: mod/babel.php:33 msgid "BBCode::convert" -msgstr "" +msgstr "BBCode::przekształć" #: mod/babel.php:39 msgid "BBCode::convert => HTML::toBBCode" -msgstr "" +msgstr "BBCode::przekształć => HTML::toBBCode" #: mod/babel.php:45 msgid "BBCode::toMarkdown" -msgstr "" +msgstr "BBCode::toMarkdown" #: mod/babel.php:51 msgid "BBCode::toMarkdown => Markdown::convert" -msgstr "" +msgstr "BBCode::toMarkdown => Markdown::przekształć" #: mod/babel.php:57 msgid "BBCode::toMarkdown => Markdown::toBBCode" -msgstr "" +msgstr "BBCode::toMarkdown => Markdown::toBBCode" #: mod/babel.php:63 msgid "BBCode::toMarkdown => Markdown::convert => HTML::toBBCode" -msgstr "" +msgstr "BBCode::toMarkdown => Markdown::przekształć => HTML::toBBCode" #: mod/babel.php:70 msgid "Source input \\x28Diaspora format\\x29" -msgstr "" +msgstr "Źródło wejściowe \\x28Diaspora format\\x29" #: mod/babel.php:76 msgid "Markdown::toBBCode" -msgstr "" +msgstr "Markdown::toBBCode" #: mod/babel.php:83 msgid "Raw HTML input" @@ -5240,15 +5240,15 @@ msgstr "Surowe wejście HTML" #: mod/babel.php:88 msgid "HTML Input" -msgstr "" +msgstr "Wejście HTML" #: mod/babel.php:94 msgid "HTML::toBBCode" -msgstr "" +msgstr "HTML::toBBCode" #: mod/babel.php:100 msgid "HTML::toPlaintext" -msgstr "" +msgstr "HTML::toPlaintext" #: mod/babel.php:108 msgid "Source text" @@ -5256,11 +5256,11 @@ msgstr "Tekst źródłowy" #: mod/babel.php:109 msgid "BBCode" -msgstr "" +msgstr "BBCode" #: mod/babel.php:110 msgid "Markdown" -msgstr "" +msgstr "Markdown" #: mod/babel.php:111 msgid "HTML" @@ -5551,7 +5551,7 @@ msgstr "Rozdzielana przecinkami lista słów kluczowych, które nie powinny zost #: mod/contacts.php:662 src/Model/Profile.php:424 msgid "XMPP:" -msgstr "" +msgstr "XMPP:" #: mod/contacts.php:667 msgid "Actions" @@ -6037,7 +6037,7 @@ msgstr "To jest wymagane do dostarczenia wiadomości do pracy." #: mod/install.php:361 msgid "PHP register_argc_argv" -msgstr "" +msgstr "PHP register_argc_argv" #: mod/install.php:384 msgid "" @@ -6069,7 +6069,7 @@ msgstr "Moduł PHP OpenSSL" #: mod/install.php:397 msgid "PDO or MySQLi PHP module" -msgstr "" +msgstr "Moduł PDO lub MySQLi PHP" #: mod/install.php:398 msgid "mb_string PHP module" @@ -6434,7 +6434,7 @@ msgstr "profil publiczny" #: mod/profiles.php:575 #, php-format msgid "%1$s changed %2$s to “%3$s”" -msgstr "" +msgstr "%1$szmienione %2$s na “%3$s”" #: mod/profiles.php:576 #, php-format @@ -7004,7 +7004,7 @@ msgstr "Wyświetl motyw:" #: mod/settings.php:964 msgid "Mobile Theme:" -msgstr "Mobilny motyw:" +msgstr "Motyw dla urządzeń mobilnych:" #: mod/settings.php:965 msgid "Suppress warning of insecure networks" @@ -7581,7 +7581,7 @@ msgstr "" #: view/theme/duepuntozero/config.php:74 msgid "Variations" -msgstr "" +msgstr "Zmiana" #: view/theme/frio/php/Image.php:25 msgid "Repeat the image" @@ -8490,7 +8490,7 @@ msgstr "Możliwość pobierania kalendarza publicznego przez odwiedzających" #: src/Content/Feature.php:88 msgid "Post Composition Features" -msgstr "" +msgstr "Funkcje po ułożeniu" #: src/Content/Feature.php:89 msgid "Post Preview" diff --git a/view/lang/pl/strings.php b/view/lang/pl/strings.php index 95e5f4c9d..743f2e253 100644 --- a/view/lang/pl/strings.php +++ b/view/lang/pl/strings.php @@ -161,10 +161,10 @@ $a->strings["%s commented on an item/conversation you have been following."] = " $a->strings["Please visit %s to view and/or reply to the conversation."] = "Odwiedź %s żeby zobaczyć i/lub odpowiedzieć na rozmowę"; $a->strings["[Friendica:Notify] %s posted to your profile wall"] = "[Friendica:Powiadomienie] %s napisał na twoim profilu"; $a->strings["%1\$s posted to your profile wall at %2\$s"] = "%1\$sopublikowano na ścianie profilu w %2\$s "; -$a->strings["%1\$s posted to [url=%2\$s]your wall[/url]"] = ""; +$a->strings["%1\$s posted to [url=%2\$s]your wall[/url]"] = "%1\$s wysłano do [url =%2\$s]twojej ściany[/url] "; $a->strings["[Friendica:Notify] %s tagged you"] = "[Friendica:Powiadomienie] %s dodał Cię"; $a->strings["%1\$s tagged you at %2\$s"] = "%1\$s oznaczono Cię tagiem %2\$s"; -$a->strings["%1\$s [url=%2\$s]tagged you[/url]."] = ""; +$a->strings["%1\$s [url=%2\$s]tagged you[/url]."] = "%1\$s [url=%2\$s]oznaczył Cię[/url]. "; $a->strings["[Friendica:Notify] %s shared a new post"] = "[Friendica:Powiadomienie] %s udostępnił nowy wpis"; $a->strings["%1\$s shared a new post at %2\$s"] = "%1\$sudostępnił nowy wpis na %2\$s "; $a->strings["%1\$s [url=%2\$s]shared a post[/url]."] = ""; @@ -176,7 +176,7 @@ $a->strings["%1\$s tagged your post at %2\$s"] = "%1\$soznaczyłeś swój wpis n $a->strings["%1\$s tagged [url=%2\$s]your post[/url]"] = ""; $a->strings["[Friendica:Notify] Introduction received"] = "[Friendica:Powiadomienie] Zapoznanie wstępne"; $a->strings["You've received an introduction from '%1\$s' at %2\$s"] = "Otrzymałeś wstęp od '%1\$s' z %2\$s"; -$a->strings["You've received [url=%1\$s]an introduction[/url] from %2\$s."] = ""; +$a->strings["You've received [url=%1\$s]an introduction[/url] from %2\$s."] = "Otrzymałeś [url=%1\$s] wprowadzenie [/ url] z %2\$s."; $a->strings["You may visit their profile at %s"] = "Możesz odwiedzić ich profil na stronie %s"; $a->strings["Please visit %s to approve or reject the introduction."] = "Odwiedż %s aby zatwierdzić lub odrzucić przedstawienie."; $a->strings["[Friendica:Notify] A new person is sharing with you"] = "[Friendica:Powiadomienie] Nowa osoba dzieli się z tobą"; @@ -549,7 +549,7 @@ $a->strings["Does %s know you?"] = "Czy %s Cię zna?"; $a->strings["Add a personal note:"] = "Dodaj osobistą notkę:"; $a->strings["Friendica"] = "Friendica"; $a->strings["GNU Social (Pleroma, Mastodon)"] = ""; -$a->strings["Diaspora (Socialhome, Hubzilla)"] = ""; +$a->strings["Diaspora (Socialhome, Hubzilla)"] = "Diaspora (Socialhome, Hubzilla)"; $a->strings[" - please do not use this form. Instead, enter %s into your Diaspora search bar."] = "- proszę nie używać tego formularza. Zamiast tego %s wejdź na pasek wyszukiwania Diaspora. do swojej belki wyszukiwarki."; $a->strings["Your Identity Address:"] = "Twój adres tożsamości:"; $a->strings["Submit Request"] = "Wyślij zgłoszenie"; @@ -600,8 +600,8 @@ $a->strings["All Contacts (with secure profile access)"] = "Wszystkie kontakty ( $a->strings["Account approved."] = "Konto zatwierdzone."; $a->strings["Registration revoked for %s"] = "Rejestracja odwołana dla %s"; $a->strings["Please login."] = "Proszę się zalogować."; -$a->strings["Remove My Account"] = "Usuń konto"; -$a->strings["This will completely remove your account. Once this has been done it is not recoverable."] = "Spowoduje to całkowite usunięcie Twojego konta. Po wykonaniu tej czynności nie można jej odzyskać."; +$a->strings["Remove My Account"] = "Usuń moje konto"; +$a->strings["This will completely remove your account. Once this has been done it is not recoverable."] = "Spowoduje to całkowite usunięcie Twojego konta. Po wykonaniu tej czynności nie można jej cofnąć."; $a->strings["Please enter your password for verification:"] = "Wprowadź hasło w celu weryfikacji."; $a->strings["Remove term"] = "Usuń wpis"; $a->strings["Saved Searches"] = "Zapisane wyszukiwania"; @@ -803,7 +803,7 @@ $a->strings["Delete Video"] = "Usuń wideo"; $a->strings["No videos selected"] = "Nie zaznaczono filmów"; $a->strings["Recent Videos"] = "Ostatnio dodane filmy"; $a->strings["Upload New Videos"] = "Wstaw nowe filmy"; -$a->strings["Theme settings updated."] = "Ustawienia szablonu zmienione."; +$a->strings["Theme settings updated."] = "Zaktualizowano ustawienia motywów."; $a->strings["Information"] = "Informacja"; $a->strings["Overview"] = "Przegląd"; $a->strings["Federation Statistics"] = "Statystyki Organizacji"; @@ -811,19 +811,19 @@ $a->strings["Configuration"] = "Konfiguracja"; $a->strings["Site"] = "Strona"; $a->strings["Users"] = "Użytkownicy"; $a->strings["Addons"] = "Dodatki"; -$a->strings["Themes"] = "Temat"; +$a->strings["Themes"] = "Wygląd"; $a->strings["Additional features"] = "Dodatkowe funkcje"; $a->strings["Database"] = "Baza danych"; $a->strings["DB updates"] = "Aktualizacje DB"; $a->strings["Inspect Queue"] = "Sprawdź kolejkę"; $a->strings["Tools"] = "Narzędzia"; -$a->strings["Contact Blocklist"] = "Skontaktuj się z Blocklist"; +$a->strings["Contact Blocklist"] = "Lista zablokowanych kontaktów"; $a->strings["Server Blocklist"] = "Lista zablokowanych serwerów"; $a->strings["Delete Item"] = "Usuń przedmiot"; $a->strings["Logs"] = "Logi"; $a->strings["View Logs"] = "Zobacz rejestry"; $a->strings["Diagnostics"] = "Diagnostyka"; -$a->strings["PHP Info"] = ""; +$a->strings["PHP Info"] = "Informacje o PHP"; $a->strings["probe address"] = "adres sondy"; $a->strings["check webfinger"] = "sprawdź webfinger"; $a->strings["Admin"] = "Administator"; @@ -922,10 +922,10 @@ $a->strings["One month"] = "Miesiąc"; $a->strings["Three months"] = "Trzy miesiące"; $a->strings["Half a year"] = "Pół roku"; $a->strings["One year"] = "Rok"; -$a->strings["Multi user instance"] = "Tryb MultiUsera"; -$a->strings["Closed"] = "Zamknięty"; +$a->strings["Multi user instance"] = "Tryb wielu użytkowników"; +$a->strings["Closed"] = "Zamknięta"; $a->strings["Requires approval"] = "Wymagane zatwierdzenie."; -$a->strings["Open"] = "Otwórz"; +$a->strings["Open"] = "Otwarte"; $a->strings["No SSL policy, links will track page SSL state"] = "Brak SSL , linki będą śledzić stan SSL ."; $a->strings["Force all links to use SSL"] = "Wymuś by linki używały SSL."; $a->strings["Self-signed certificate, use SSL for local links only (discouraged)"] = "Wewnętrzne Certyfikaty , użyj SSL tylko dla linków lokalnych . "; @@ -949,32 +949,32 @@ $a->strings["The email address your server shall use to send notification emails $a->strings["Banner/Logo"] = "Logo"; $a->strings["Shortcut icon"] = "Ikona skrótu"; $a->strings["Link to an icon that will be used for browsers."] = "Link do ikony, która będzie używana w przeglądarkach."; -$a->strings["Touch icon"] = "Kliknij ikonę"; +$a->strings["Touch icon"] = "Dołącz ikonę"; $a->strings["Link to an icon that will be used for tablets and mobiles."] = "Link do ikony, która będzie używana w tabletach i telefonach komórkowych."; $a->strings["Additional Info"] = "Dodatkowe informacje"; -$a->strings["For public servers: you can add additional information here that will be listed at %s/servers."] = "W przypadku serwerów publicznych: możesz tu dodać dodatkowe informacje, które będą wymienione na %s/serwerach."; +$a->strings["For public servers: you can add additional information here that will be listed at %s/servers."] = "W przypadku serwerów publicznych: możesz tu dodać dodatkowe informacje, które będą wymienione na %s/servers."; $a->strings["System language"] = "Język systemu"; $a->strings["System theme"] = "Motyw systemowy"; $a->strings["Default system theme - may be over-ridden by user profiles - change theme settings"] = "Domyślny motyw systemu - może być nadpisany przez profil użytkownika zmień ustawienia motywów"; -$a->strings["Mobile system theme"] = "Mobilny motyw systemowy"; -$a->strings["Theme for mobile devices"] = "Szablon dla mobilnych urządzeń"; +$a->strings["Mobile system theme"] = "Motyw systemu mobilnego"; +$a->strings["Theme for mobile devices"] = "Motyw na urządzenia mobilne"; $a->strings["SSL link policy"] = "polityka SSL"; $a->strings["Determines whether generated links should be forced to use SSL"] = "Określa kiedy generowane linki powinny używać wymuszonego SSl."; $a->strings["Force SSL"] = "Wymuś SSL"; $a->strings["Force all Non-SSL requests to SSL - Attention: on some systems it could lead to endless loops."] = "Wymuszaj wszystkie żądania SSL bez SSL - Uwaga: w niektórych systemach może to prowadzić do niekończących się pętli."; $a->strings["Hide help entry from navigation menu"] = "Wyłącz pomoc w menu nawigacyjnym "; $a->strings["Hides the menu entry for the Help pages from the navigation menu. You can still access it calling /help directly."] = "Chowa pozycje menu dla stron pomocy ze strony nawigacyjnej. Możesz nadal ją wywołać poprzez komendę /help."; -$a->strings["Single user instance"] = "Tryb SingleUsera"; -$a->strings["Make this instance multi-user or single-user for the named user"] = "Ustawia tryb multi lub single dla wybranych użytkowników."; +$a->strings["Single user instance"] = "Tryb pojedynczego użytkownika"; +$a->strings["Make this instance multi-user or single-user for the named user"] = "Ustawia tryb dla wielu użytkowników lub pojedynczego użytkownika dla nazwanego użytkownika"; $a->strings["Maximum image size"] = "Maksymalny rozmiar zdjęcia"; $a->strings["Maximum size in bytes of uploaded images. Default is 0, which means no limits."] = "Maksymalny rozmiar w bitach dla wczytywanego obrazu . Domyślnie jest to 0 , co oznacza bez limitu ."; $a->strings["Maximum image length"] = "Maksymalna długość obrazu"; $a->strings["Maximum length in pixels of the longest side of uploaded images. Default is -1, which means no limits."] = "Maksymalna długość najdłuższej strony przesyłanego obrazu w pikselach.\nDomyślnie jest to -1, co oznacza brak limitu."; $a->strings["JPEG image quality"] = "jakość obrazu JPEG"; $a->strings["Uploaded JPEGS will be saved at this quality setting [0-100]. Default is 100, which is full quality."] = "Wczytywanie JPEGS będzie zapisane z tymi ustawieniami jakości [0-100] . Domyslnie jest ustawione 100 co oznacza brak strat jakości . "; -$a->strings["Register policy"] = "Zarejestruj polisę"; -$a->strings["Maximum Daily Registrations"] = "Maksymalnie dziennych rejestracji"; -$a->strings["If registration is permitted above, this sets the maximum number of new user registrations to accept per day. If register is set to closed, this setting has no effect."] = "Jeśli rejestracja jest dozwolona powyżej, określa maksymalną liczbę nowych rejestracji użytkowników do zaakceptowania na dzień. Jeśli rejestr jest ustawiony na zamknięty, to ustawienie nie ma wpływu."; +$a->strings["Register policy"] = "Zasady rejestracji"; +$a->strings["Maximum Daily Registrations"] = "Maksymalna dzienna rejestracja"; +$a->strings["If registration is permitted above, this sets the maximum number of new user registrations to accept per day. If register is set to closed, this setting has no effect."] = "Jeśli rejestracja powyżej jest dozwolona, to określa maksymalną liczbę nowych rejestracji użytkowników do zaakceptowania na dzień. Jeśli rejestracja jest ustawiona na \"Zamknięta\", to ustawienie to nie ma wpływu."; $a->strings["Register text"] = "Zarejestruj tekst"; $a->strings["Will be displayed prominently on the registration page."] = "Będą wyświetlane w widocznym miejscu na stronie rejestracji."; $a->strings["Accounts abandoned after x days"] = "Konto porzucone od x dni."; @@ -1158,7 +1158,7 @@ $a->strings["Author: "] = "Autor: "; $a->strings["Maintainer: "] = "Opiekun:"; $a->strings["Reload active addons"] = "Załaduj ponownie aktywne dodatki"; $a->strings["There are currently no addons available on your node. You can find the official addon repository at %1\$s and might find other interesting addons in the open addon registry at %2\$s"] = "W twoim węźle nie ma obecnie żadnych dodatków. Możesz znaleźć oficjalne repozytorium dodatków na %1\$s i możesz znaleźć inne interesujące dodatki w otwartym rejestrze dodatków na %2\$s"; -$a->strings["No themes found."] = "Nie znaleziono tematu."; +$a->strings["No themes found."] = "Nie znaleziono motywów."; $a->strings["Screenshot"] = "Zrzut ekranu"; $a->strings["Reload active themes"] = "Przeładuj aktywne motywy"; $a->strings["No themes found on the system. They should be placed in %1\$s"] = "Nie znaleziono motywów w systemie. Powinny zostać umieszczone %1\$s"; @@ -1172,7 +1172,7 @@ $a->strings["Enable Debugging"] = "Włącz debugowanie"; $a->strings["Log file"] = "Plik logów"; $a->strings["Must be writable by web server. Relative to your Friendica top-level directory."] = "Musi być zapisywalny przez serwer sieciowy. W stosunku do katalogu najwyższego poziomu Friendica."; $a->strings["Log level"] = "Poziom logów"; -$a->strings["PHP logging"] = ""; +$a->strings["PHP logging"] = "Logowanie w PHP"; $a->strings["To enable logging of PHP errors and warnings you can add the following to the .htconfig.php file of your installation. The filename set in the 'error_log' line is relative to the friendica top-level directory and must be writeable by the web server. The option '1' for 'log_errors' and 'display_errors' is to enable these options, set to '0' to disable them."] = "Aby włączyć rejestrowanie błędów i ostrzeżeń PHP, możesz dodać następujące dane do pliku .htconfig.php instalacji. Nazwa pliku ustawiona w linii 'error_log' odnosi się do katalogu najwyższego poziomu friendiki i musi być zapisywalna przez serwer WWW. Opcja '1' dla 'log_errors' i 'display_errors' polega na włączeniu tych opcji, ustawieniu na '0', aby je wyłączyć."; $a->strings["Error trying to open %1\$s log file.\\r\\n
    Check to see if file %1\$s exist and is readable."] = "Błąd podczas próby otwarcia %1\$s pliku dziennika. \\r\\n
    Sprawdź, czy plik %1\$s istnieje i czy można go odczytać."; $a->strings["Couldn't open %1\$s log file.\\r\\n
    Check to see if file %1\$s is readable."] = "Nie można otworzyć %1\$spliku dziennika. \\r\\n
    Sprawdź, czy plik %1\$s jest czytelny."; @@ -1181,22 +1181,22 @@ $a->strings["On"] = "Włącz"; $a->strings["Lock feature %s"] = "Funkcja blokady %s"; $a->strings["Manage Additional Features"] = "Zarządzaj dodatkowymi funkcjami"; $a->strings["Source input"] = "Źródło wejściowe"; -$a->strings["BBCode::convert (raw HTML("] = ""; -$a->strings["BBCode::convert"] = ""; -$a->strings["BBCode::convert => HTML::toBBCode"] = ""; -$a->strings["BBCode::toMarkdown"] = ""; -$a->strings["BBCode::toMarkdown => Markdown::convert"] = ""; -$a->strings["BBCode::toMarkdown => Markdown::toBBCode"] = ""; -$a->strings["BBCode::toMarkdown => Markdown::convert => HTML::toBBCode"] = ""; -$a->strings["Source input \\x28Diaspora format\\x29"] = ""; -$a->strings["Markdown::toBBCode"] = ""; +$a->strings["BBCode::convert (raw HTML("] = "BBCode::przekształć (raw HTML("; +$a->strings["BBCode::convert"] = "BBCode::przekształć"; +$a->strings["BBCode::convert => HTML::toBBCode"] = "BBCode::przekształć => HTML::toBBCode"; +$a->strings["BBCode::toMarkdown"] = "BBCode::toMarkdown"; +$a->strings["BBCode::toMarkdown => Markdown::convert"] = "BBCode::toMarkdown => Markdown::przekształć"; +$a->strings["BBCode::toMarkdown => Markdown::toBBCode"] = "BBCode::toMarkdown => Markdown::toBBCode"; +$a->strings["BBCode::toMarkdown => Markdown::convert => HTML::toBBCode"] = "BBCode::toMarkdown => Markdown::przekształć => HTML::toBBCode"; +$a->strings["Source input \\x28Diaspora format\\x29"] = "Źródło wejściowe \\x28Diaspora format\\x29"; +$a->strings["Markdown::toBBCode"] = "Markdown::toBBCode"; $a->strings["Raw HTML input"] = "Surowe wejście HTML"; -$a->strings["HTML Input"] = ""; -$a->strings["HTML::toBBCode"] = ""; -$a->strings["HTML::toPlaintext"] = ""; +$a->strings["HTML Input"] = "Wejście HTML"; +$a->strings["HTML::toBBCode"] = "HTML::toBBCode"; +$a->strings["HTML::toPlaintext"] = "HTML::toPlaintext"; $a->strings["Source text"] = "Tekst źródłowy"; -$a->strings["BBCode"] = ""; -$a->strings["Markdown"] = ""; +$a->strings["BBCode"] = "BBCode"; +$a->strings["Markdown"] = "Markdown"; $a->strings["HTML"] = "HTML"; $a->strings["Events"] = "Wydarzenia"; $a->strings["View"] = "Widok"; @@ -1268,7 +1268,7 @@ $a->strings["Notification for new posts"] = "Powiadomienie o nowych postach"; $a->strings["Send a notification of every new post of this contact"] = "Wyślij powiadomienie o każdym nowym poście tego kontaktu"; $a->strings["Blacklisted keywords"] = "Słowa kluczowe na czarnej liście"; $a->strings["Comma separated list of keywords that should not be converted to hashtags, when \"Fetch information and keywords\" is selected"] = "Rozdzielana przecinkami lista słów kluczowych, które nie powinny zostać przekonwertowane na hashtagi, gdy wybrana jest opcja 'Pobierz informacje i słowa kluczowe'"; -$a->strings["XMPP:"] = ""; +$a->strings["XMPP:"] = "XMPP:"; $a->strings["Actions"] = "Akcja"; $a->strings["Status"] = "Status"; $a->strings["Contact Settings"] = "Ustawienia kontaktów"; @@ -1382,14 +1382,14 @@ $a->strings["Found PHP version: "] = "Znaleziono wersje PHP:"; $a->strings["PHP cli binary"] = "PHP cli binarny"; $a->strings["The command line version of PHP on your system does not have \"register_argc_argv\" enabled."] = "Wersja linii poleceń PHP w twoim systemie nie ma aktywowanego \"register_argc_argv\"."; $a->strings["This is required for message delivery to work."] = "To jest wymagane do dostarczenia wiadomości do pracy."; -$a->strings["PHP register_argc_argv"] = ""; +$a->strings["PHP register_argc_argv"] = "PHP register_argc_argv"; $a->strings["Error: the \"openssl_pkey_new\" function on this system is not able to generate encryption keys"] = "Błąd : funkcja systemu \"openssl_pkey_new\" nie jest w stanie wygenerować klucza szyfrującego ."; $a->strings["If running under Windows, please see \"http://www.php.net/manual/en/openssl.installation.php\"."] = "Jeśli korzystasz z Windowsa, proszę odwiedzić \"http://www.php.net/manual/en/openssl.installation.php\"."; $a->strings["Generate encryption keys"] = "Generuj klucz kodowania"; $a->strings["libCurl PHP module"] = "Moduł libCurl PHP"; $a->strings["GD graphics PHP module"] = "Moduł PHP-GD"; $a->strings["OpenSSL PHP module"] = "Moduł PHP OpenSSL"; -$a->strings["PDO or MySQLi PHP module"] = ""; +$a->strings["PDO or MySQLi PHP module"] = "Moduł PDO lub MySQLi PHP"; $a->strings["mb_string PHP module"] = "Moduł mb_string PHP"; $a->strings["XML PHP module"] = ""; $a->strings["iconv PHP module"] = ""; @@ -1470,7 +1470,7 @@ $a->strings["Location"] = "Położenie"; $a->strings["Profile updated."] = "Konto zaktualizowane."; $a->strings[" and "] = " i "; $a->strings["public profile"] = "profil publiczny"; -$a->strings["%1\$s changed %2\$s to “%3\$s”"] = ""; +$a->strings["%1\$s changed %2\$s to “%3\$s”"] = "%1\$szmienione %2\$s na “%3\$s”"; $a->strings[" - Visit %1\$s's %2\$s"] = " - Odwiedźa %1\$s's %2\$s"; $a->strings["%1\$s has an updated %2\$s, changing %3\$s."] = "%1\$sma zaktualizowany %2\$s, zmiana%3\$s."; $a->strings["Hide contacts and friends:"] = "Ukryj kontakty i znajomych:"; @@ -1607,7 +1607,7 @@ $a->strings["%s - (Unsupported)"] = "%s - (Nieobsługiwane)"; $a->strings["%s - (Experimental)"] = "%s- (Eksperymentalne)"; $a->strings["Display Settings"] = "Wyświetl ustawienia"; $a->strings["Display Theme:"] = "Wyświetl motyw:"; -$a->strings["Mobile Theme:"] = "Mobilny motyw:"; +$a->strings["Mobile Theme:"] = "Motyw dla urządzeń mobilnych:"; $a->strings["Suppress warning of insecure networks"] = "Ukryj ostrzeżenie przed niebezpiecznymi sieciami"; $a->strings["Should the system suppress the warning that the current group contains members of networks that can't receive non public postings."] = "System powinien pominąć ostrzeżenie, że bieżąca grupa zawiera członków sieci, którzy nie mogą otrzymywać komentarzy niepublicznych"; $a->strings["Update browser every xx seconds"] = "Odświeżaj stronę co xx sekund"; @@ -1740,7 +1740,7 @@ $a->strings["easterbunny"] = ""; $a->strings["darkzero"] = ""; $a->strings["comix"] = ""; $a->strings["slackr"] = ""; -$a->strings["Variations"] = ""; +$a->strings["Variations"] = "Zmiana"; $a->strings["Repeat the image"] = "Powtórz obraz"; $a->strings["Will repeat your image to fill the background."] = "Powtarza twój obraz, aby wypełnić tło."; $a->strings["Stretch"] = ""; @@ -1966,7 +1966,7 @@ $a->strings["Photo Location"] = "Lokalizacja zdjęcia"; $a->strings["Photo metadata is normally stripped. This extracts the location (if present) prior to stripping metadata and links it to a map."] = "Metadane zdjęć są zwykle usuwane. Wyodrębnia to położenie (jeśli jest obecne) przed usunięciem metadanych i łączy je z mapą."; $a->strings["Export Public Calendar"] = "Eksportuj kalendarz publiczny"; $a->strings["Ability for visitors to download the public calendar"] = "Możliwość pobierania kalendarza publicznego przez odwiedzających"; -$a->strings["Post Composition Features"] = ""; +$a->strings["Post Composition Features"] = "Funkcje po ułożeniu"; $a->strings["Post Preview"] = "Podgląd posta"; $a->strings["Allow previewing posts and comments before publishing them"] = "Zezwalaj na podgląd postów i komentarzy przed ich opublikowaniem"; $a->strings["Auto-mention Forums"] = "Automatyczne wymienianie forów"; From 421517c611834ccf4a982d319d5beb478407a9f2 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Wed, 4 Apr 2018 07:22:05 +0200 Subject: [PATCH 225/227] consistent use of terms in heading in the admin panel --- mod/admin.php | 2 +- util/messages.po | 1903 +++++++++++++++++++++++----------------------- 2 files changed, 953 insertions(+), 952 deletions(-) diff --git a/mod/admin.php b/mod/admin.php index 7dc736ab4..a51cbd8d3 100644 --- a/mod/admin.php +++ b/mod/admin.php @@ -302,7 +302,7 @@ function admin_page_tos(App $a) '$page' => L10n::t('Terms of Service'), '$displaytos' => ['displaytos', L10n::t('Display Terms of Service'), Config::get('system', 'tosdisplay'), L10n::t('Enable the Terms of Service page. If this is enabled a link to the terms will be added to the registration form and the general information page.')], '$displayprivstatement' => ['displayprivstatement', L10n::t('Display Privacy Statement'), Config::get('system','tosprivstatement'), L10n::t('Show some informations regarding the needed information to operate the node according e.g. to EU-GDPR.','https://en.wikipedia.org/wiki/General_Data_Protection_Regulation')], - '$tostext' => ['tostext', L10n::t('The Terms of Usage'), Config::get('system', 'tostext'), L10n::t('Enter the Terms of Service for your node here. You can use BBCode. Headers of sections should be [h2] and below.')], + '$tostext' => ['tostext', L10n::t('The Terms of Service'), Config::get('system', 'tostext'), L10n::t('Enter the Terms of Service for your node here. You can use BBCode. Headers of sections should be [h2] and below.')], '$form_security_token' => get_form_security_token("admin_tos"), '$submit' => L10n::t('Save Settings'), ]); diff --git a/util/messages.po b/util/messages.po index 40829b007..d7f127684 100644 --- a/util/messages.po +++ b/util/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-03 06:50+0200\n" +"POT-Creation-Date: 2018-04-04 07:01+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -77,7 +77,7 @@ msgstr "" #: include/conversation.php:147 include/conversation.php:157 #: include/conversation.php:285 include/conversation.php:294 #: mod/subthread.php:97 mod/tagger.php:72 src/Model/Item.php:1793 -#: src/Protocol/Diaspora.php:2006 +#: src/Protocol/Diaspora.php:2010 msgid "status" msgstr "" @@ -88,7 +88,7 @@ msgid "photo" msgstr "" #: include/conversation.php:164 src/Model/Item.php:1666 -#: src/Protocol/Diaspora.php:2002 +#: src/Protocol/Diaspora.php:2006 #, php-format msgid "%1$s likes %2$s's %3$s" msgstr "" @@ -114,7 +114,7 @@ msgid "%1$s attends maybe %2$s's %3$s" msgstr "" #: include/conversation.php:209 mod/dfrn_confirm.php:431 -#: src/Protocol/Diaspora.php:2477 +#: src/Protocol/Diaspora.php:2481 #, php-format msgid "%1$s is now friends with %2$s" msgstr "" @@ -165,8 +165,8 @@ msgstr "" msgid "Select" msgstr "" -#: include/conversation.php:745 mod/photos.php:1570 mod/contacts.php:830 -#: mod/contacts.php:1035 mod/settings.php:738 mod/admin.php:1798 +#: include/conversation.php:745 mod/photos.php:1570 mod/settings.php:738 +#: mod/contacts.php:830 mod/contacts.php:1035 mod/admin.php:1798 #: src/Object/Post.php:179 msgid "Delete" msgstr "" @@ -243,7 +243,7 @@ msgid "Poke" msgstr "" #: include/conversation.php:1074 mod/allfriends.php:74 mod/suggest.php:83 -#: mod/match.php:90 mod/contacts.php:596 mod/dirfind.php:218 mod/follow.php:143 +#: mod/match.php:90 mod/dirfind.php:218 mod/follow.php:143 mod/contacts.php:596 #: src/Content/Widget.php:61 src/Model/Contact.php:594 msgid "Connect/Follow" msgstr "" @@ -458,8 +458,8 @@ msgstr "" #: mod/fbrowser.php:134 mod/suggest.php:41 mod/dfrn_request.php:663 #: mod/tagrm.php:19 mod/tagrm.php:99 mod/editpost.php:149 mod/message.php:141 #: mod/photos.php:248 mod/photos.php:324 mod/videos.php:147 -#: mod/contacts.php:475 mod/unfollow.php:117 mod/settings.php:676 -#: mod/settings.php:702 mod/follow.php:161 +#: mod/unfollow.php:117 mod/settings.php:676 mod/settings.php:702 +#: mod/follow.php:161 mod/contacts.php:475 msgid "Cancel" msgstr "" @@ -529,7 +529,7 @@ msgstr "" msgid "%1$s, %2$s Administrator" msgstr "" -#: include/enotify.php:50 src/Worker/Delivery.php:402 +#: include/enotify.php:50 src/Worker/Delivery.php:404 msgid "noreply" msgstr "" @@ -813,13 +813,13 @@ msgid "Do you really want to delete this item?" msgstr "" #: include/items.php:384 mod/api.php:110 mod/suggest.php:38 -#: mod/dfrn_request.php:653 mod/message.php:138 mod/contacts.php:472 -#: mod/settings.php:1103 mod/settings.php:1109 mod/settings.php:1116 -#: mod/settings.php:1120 mod/settings.php:1124 mod/settings.php:1128 -#: mod/settings.php:1132 mod/settings.php:1136 mod/settings.php:1156 -#: mod/settings.php:1157 mod/settings.php:1158 mod/settings.php:1159 -#: mod/settings.php:1160 mod/follow.php:150 mod/profiles.php:636 -#: mod/profiles.php:639 mod/profiles.php:661 mod/register.php:237 +#: mod/dfrn_request.php:653 mod/message.php:138 mod/settings.php:1103 +#: mod/settings.php:1109 mod/settings.php:1116 mod/settings.php:1120 +#: mod/settings.php:1124 mod/settings.php:1128 mod/settings.php:1132 +#: mod/settings.php:1136 mod/settings.php:1156 mod/settings.php:1157 +#: mod/settings.php:1158 mod/settings.php:1159 mod/settings.php:1160 +#: mod/follow.php:150 mod/profiles.php:636 mod/profiles.php:639 +#: mod/profiles.php:661 mod/contacts.php:472 mod/register.php:237 msgid "Yes" msgstr "" @@ -834,14 +834,14 @@ msgstr "" #: mod/wall_upload.php:106 mod/editpost.php:18 mod/fsuggest.php:80 #: mod/group.php:26 mod/item.php:160 mod/message.php:59 mod/message.php:104 #: mod/network.php:32 mod/notes.php:30 mod/photos.php:174 mod/photos.php:1051 -#: mod/contacts.php:386 mod/delegate.php:25 mod/delegate.php:43 -#: mod/delegate.php:54 mod/dirfind.php:25 mod/ostatus_subscribe.php:16 -#: mod/unfollow.php:15 mod/unfollow.php:57 mod/unfollow.php:90 mod/cal.php:304 -#: mod/events.php:194 mod/profile_photo.php:30 mod/profile_photo.php:176 -#: mod/profile_photo.php:187 mod/profile_photo.php:200 mod/settings.php:43 -#: mod/settings.php:142 mod/settings.php:665 mod/follow.php:17 -#: mod/follow.php:54 mod/follow.php:118 mod/profiles.php:182 -#: mod/profiles.php:606 mod/register.php:53 index.php:416 +#: mod/delegate.php:25 mod/delegate.php:43 mod/delegate.php:54 +#: mod/dirfind.php:25 mod/ostatus_subscribe.php:16 mod/unfollow.php:15 +#: mod/unfollow.php:57 mod/unfollow.php:90 mod/cal.php:304 mod/events.php:194 +#: mod/profile_photo.php:30 mod/profile_photo.php:176 mod/profile_photo.php:187 +#: mod/profile_photo.php:200 mod/settings.php:43 mod/settings.php:142 +#: mod/settings.php:665 mod/follow.php:17 mod/follow.php:54 mod/follow.php:118 +#: mod/profiles.php:182 mod/profiles.php:606 mod/contacts.php:386 +#: mod/register.php:53 index.php:416 msgid "Permission denied." msgstr "" @@ -1299,9 +1299,9 @@ msgstr "" #: mod/localtime.php:56 mod/poke.php:199 mod/fsuggest.php:114 #: mod/message.php:265 mod/message.php:432 mod/photos.php:1080 #: mod/photos.php:1160 mod/photos.php:1445 mod/photos.php:1491 -#: mod/photos.php:1530 mod/photos.php:1603 mod/contacts.php:610 -#: mod/install.php:251 mod/install.php:290 mod/events.php:530 -#: mod/profiles.php:672 src/Object/Post.php:790 +#: mod/photos.php:1530 mod/photos.php:1603 mod/install.php:251 +#: mod/install.php:290 mod/events.php:530 mod/profiles.php:672 +#: mod/contacts.php:610 src/Object/Post.php:790 #: view/theme/duepuntozero/config.php:71 view/theme/frio/config.php:113 #: view/theme/quattro/config.php:73 view/theme/vier/config.php:119 msgid "Submit" @@ -1836,18 +1836,18 @@ msgstr "" msgid "Subscriber" msgstr "" -#: mod/notifications.php:247 mod/contacts.php:660 mod/events.php:518 -#: mod/directory.php:148 src/Model/Profile.php:417 src/Model/Event.php:60 +#: mod/notifications.php:247 mod/events.php:518 mod/directory.php:148 +#: mod/contacts.php:660 src/Model/Profile.php:417 src/Model/Event.php:60 #: src/Model/Event.php:85 src/Model/Event.php:421 src/Model/Event.php:900 msgid "Location:" msgstr "" -#: mod/notifications.php:249 mod/contacts.php:664 mod/directory.php:154 +#: mod/notifications.php:249 mod/directory.php:154 mod/contacts.php:664 #: src/Model/Profile.php:423 src/Model/Profile.php:806 msgid "About:" msgstr "" -#: mod/notifications.php:251 mod/contacts.php:666 mod/follow.php:174 +#: mod/notifications.php:251 mod/follow.php:174 mod/contacts.php:666 #: src/Model/Profile.php:794 msgid "Tags:" msgstr "" @@ -1857,8 +1857,8 @@ msgstr "" msgid "Gender:" msgstr "" -#: mod/notifications.php:258 mod/contacts.php:656 mod/unfollow.php:122 -#: mod/follow.php:166 mod/admin.php:490 mod/admin.php:500 +#: mod/notifications.php:258 mod/unfollow.php:122 mod/follow.php:166 +#: mod/contacts.php:656 mod/admin.php:490 mod/admin.php:500 msgid "Profile URL" msgstr "" @@ -2345,140 +2345,6 @@ msgstr "" msgid "Please select your timezone:" msgstr "" -#: mod/lostpass.php:27 -msgid "No valid account found." -msgstr "" - -#: mod/lostpass.php:39 -msgid "Password reset request issued. Check your email." -msgstr "" - -#: mod/lostpass.php:45 -#, php-format -msgid "" -"\n" -"\t\tDear %1$s,\n" -"\t\t\tA request was recently received at \"%2$s\" to reset your account\n" -"\t\tpassword. In order to confirm this request, please select the " -"verification link\n" -"\t\tbelow or paste it into your web browser address bar.\n" -"\n" -"\t\tIf you did NOT request this change, please DO NOT follow the link\n" -"\t\tprovided and ignore and/or delete this email, the request will expire " -"shortly.\n" -"\n" -"\t\tYour password will not be changed unless we can verify that you\n" -"\t\tissued this request." -msgstr "" - -#: mod/lostpass.php:56 -#, php-format -msgid "" -"\n" -"\t\tFollow this link soon to verify your identity:\n" -"\n" -"\t\t%1$s\n" -"\n" -"\t\tYou will then receive a follow-up message containing the new password.\n" -"\t\tYou may change that password from your account settings page after " -"logging in.\n" -"\n" -"\t\tThe login details are as follows:\n" -"\n" -"\t\tSite Location:\t%2$s\n" -"\t\tLogin Name:\t%3$s" -msgstr "" - -#: mod/lostpass.php:72 -#, php-format -msgid "Password reset requested at %s" -msgstr "" - -#: mod/lostpass.php:88 -msgid "" -"Request could not be verified. (You may have previously submitted it.) " -"Password reset failed." -msgstr "" - -#: mod/lostpass.php:101 -msgid "Request has expired, please make a new one." -msgstr "" - -#: mod/lostpass.php:116 -msgid "Forgot your Password?" -msgstr "" - -#: mod/lostpass.php:117 -msgid "" -"Enter your email address and submit to have your password reset. Then check " -"your email for further instructions." -msgstr "" - -#: mod/lostpass.php:118 src/Module/Login.php:314 -msgid "Nickname or Email: " -msgstr "" - -#: mod/lostpass.php:119 -msgid "Reset" -msgstr "" - -#: mod/lostpass.php:135 src/Module/Login.php:326 -msgid "Password Reset" -msgstr "" - -#: mod/lostpass.php:136 -msgid "Your password has been reset as requested." -msgstr "" - -#: mod/lostpass.php:137 -msgid "Your new password is" -msgstr "" - -#: mod/lostpass.php:138 -msgid "Save or copy your new password - and then" -msgstr "" - -#: mod/lostpass.php:139 -msgid "click here to login" -msgstr "" - -#: mod/lostpass.php:140 -msgid "" -"Your password may be changed from the Settings page after " -"successful login." -msgstr "" - -#: mod/lostpass.php:148 -#, php-format -msgid "" -"\n" -"\t\t\tDear %1$s,\n" -"\t\t\t\tYour password has been changed as requested. Please retain this\n" -"\t\t\tinformation for your records (or change your password immediately to\n" -"\t\t\tsomething that you will remember).\n" -"\t\t" -msgstr "" - -#: mod/lostpass.php:154 -#, php-format -msgid "" -"\n" -"\t\t\tYour login details are as follows:\n" -"\n" -"\t\t\tSite Location:\t%1$s\n" -"\t\t\tLogin Name:\t%2$s\n" -"\t\t\tPassword:\t%3$s\n" -"\n" -"\t\t\tYou may change that password from your account settings page after " -"logging in.\n" -"\t\t" -msgstr "" - -#: mod/lostpass.php:167 -#, php-format -msgid "Your password has been changed at %s" -msgstr "" - #: mod/probe.php:14 mod/webfinger.php:17 msgid "Only logged in users are permitted to perform a probing." msgstr "" @@ -3328,392 +3194,6 @@ msgstr "" msgid "Upload New Videos" msgstr "" -#: mod/contacts.php:157 -#, php-format -msgid "%d contact edited." -msgid_plural "%d contacts edited." -msgstr[0] "" -msgstr[1] "" - -#: mod/contacts.php:184 mod/contacts.php:400 -msgid "Could not access contact record." -msgstr "" - -#: mod/contacts.php:194 -msgid "Could not locate selected profile." -msgstr "" - -#: mod/contacts.php:228 -msgid "Contact updated." -msgstr "" - -#: mod/contacts.php:421 -msgid "Contact has been blocked" -msgstr "" - -#: mod/contacts.php:421 -msgid "Contact has been unblocked" -msgstr "" - -#: mod/contacts.php:432 -msgid "Contact has been ignored" -msgstr "" - -#: mod/contacts.php:432 -msgid "Contact has been unignored" -msgstr "" - -#: mod/contacts.php:443 -msgid "Contact has been archived" -msgstr "" - -#: mod/contacts.php:443 -msgid "Contact has been unarchived" -msgstr "" - -#: mod/contacts.php:467 -msgid "Drop contact" -msgstr "" - -#: mod/contacts.php:470 mod/contacts.php:823 -msgid "Do you really want to delete this contact?" -msgstr "" - -#: mod/contacts.php:488 -msgid "Contact has been removed." -msgstr "" - -#: mod/contacts.php:519 -#, php-format -msgid "You are mutual friends with %s" -msgstr "" - -#: mod/contacts.php:523 -#, php-format -msgid "You are sharing with %s" -msgstr "" - -#: mod/contacts.php:527 -#, php-format -msgid "%s is sharing with you" -msgstr "" - -#: mod/contacts.php:547 -msgid "Private communications are not available for this contact." -msgstr "" - -#: mod/contacts.php:549 -msgid "Never" -msgstr "" - -#: mod/contacts.php:552 -msgid "(Update was successful)" -msgstr "" - -#: mod/contacts.php:552 -msgid "(Update was not successful)" -msgstr "" - -#: mod/contacts.php:554 mod/contacts.php:992 -msgid "Suggest friends" -msgstr "" - -#: mod/contacts.php:558 -#, php-format -msgid "Network type: %s" -msgstr "" - -#: mod/contacts.php:563 -msgid "Communications lost with this contact!" -msgstr "" - -#: mod/contacts.php:569 -msgid "Fetch further information for feeds" -msgstr "" - -#: mod/contacts.php:571 -msgid "" -"Fetch information like preview pictures, title and teaser from the feed " -"item. You can activate this if the feed doesn't contain much text. Keywords " -"are taken from the meta header in the feed item and are posted as hash tags." -msgstr "" - -#: mod/contacts.php:572 mod/admin.php:1272 mod/admin.php:1435 -#: mod/admin.php:1445 -msgid "Disabled" -msgstr "" - -#: mod/contacts.php:573 -msgid "Fetch information" -msgstr "" - -#: mod/contacts.php:574 -msgid "Fetch keywords" -msgstr "" - -#: mod/contacts.php:575 -msgid "Fetch information and keywords" -msgstr "" - -#: mod/contacts.php:599 mod/unfollow.php:100 -msgid "Disconnect/Unfollow" -msgstr "" - -#: mod/contacts.php:608 -msgid "Contact" -msgstr "" - -#: mod/contacts.php:611 -msgid "Profile Visibility" -msgstr "" - -#: mod/contacts.php:612 -#, php-format -msgid "" -"Please choose the profile you would like to display to %s when viewing your " -"profile securely." -msgstr "" - -#: mod/contacts.php:613 -msgid "Contact Information / Notes" -msgstr "" - -#: mod/contacts.php:614 -msgid "Their personal note" -msgstr "" - -#: mod/contacts.php:616 -msgid "Edit contact notes" -msgstr "" - -#: mod/contacts.php:620 -msgid "Block/Unblock contact" -msgstr "" - -#: mod/contacts.php:621 -msgid "Ignore contact" -msgstr "" - -#: mod/contacts.php:622 -msgid "Repair URL settings" -msgstr "" - -#: mod/contacts.php:623 -msgid "View conversations" -msgstr "" - -#: mod/contacts.php:628 -msgid "Last update:" -msgstr "" - -#: mod/contacts.php:630 -msgid "Update public posts" -msgstr "" - -#: mod/contacts.php:632 mod/contacts.php:1002 -msgid "Update now" -msgstr "" - -#: mod/contacts.php:637 mod/contacts.php:827 mod/contacts.php:1011 -#: mod/admin.php:485 mod/admin.php:1800 -msgid "Unblock" -msgstr "" - -#: mod/contacts.php:637 mod/contacts.php:827 mod/contacts.php:1011 -#: mod/admin.php:484 mod/admin.php:1799 -msgid "Block" -msgstr "" - -#: mod/contacts.php:638 mod/contacts.php:828 mod/contacts.php:1019 -msgid "Unignore" -msgstr "" - -#: mod/contacts.php:642 -msgid "Currently blocked" -msgstr "" - -#: mod/contacts.php:643 -msgid "Currently ignored" -msgstr "" - -#: mod/contacts.php:644 -msgid "Currently archived" -msgstr "" - -#: mod/contacts.php:645 -msgid "Awaiting connection acknowledge" -msgstr "" - -#: mod/contacts.php:646 -msgid "" -"Replies/likes to your public posts may still be visible" -msgstr "" - -#: mod/contacts.php:647 -msgid "Notification for new posts" -msgstr "" - -#: mod/contacts.php:647 -msgid "Send a notification of every new post of this contact" -msgstr "" - -#: mod/contacts.php:650 -msgid "Blacklisted keywords" -msgstr "" - -#: mod/contacts.php:650 -msgid "" -"Comma separated list of keywords that should not be converted to hashtags, " -"when \"Fetch information and keywords\" is selected" -msgstr "" - -#: mod/contacts.php:662 src/Model/Profile.php:424 -msgid "XMPP:" -msgstr "" - -#: mod/contacts.php:667 -msgid "Actions" -msgstr "" - -#: mod/contacts.php:669 mod/contacts.php:855 src/Content/Nav.php:100 -#: src/Model/Profile.php:888 view/theme/frio/theme.php:259 -msgid "Status" -msgstr "" - -#: mod/contacts.php:670 -msgid "Contact Settings" -msgstr "" - -#: mod/contacts.php:711 -msgid "Suggestions" -msgstr "" - -#: mod/contacts.php:714 -msgid "Suggest potential friends" -msgstr "" - -#: mod/contacts.php:722 -msgid "Show all contacts" -msgstr "" - -#: mod/contacts.php:727 -msgid "Unblocked" -msgstr "" - -#: mod/contacts.php:730 -msgid "Only show unblocked contacts" -msgstr "" - -#: mod/contacts.php:735 -msgid "Blocked" -msgstr "" - -#: mod/contacts.php:738 -msgid "Only show blocked contacts" -msgstr "" - -#: mod/contacts.php:743 -msgid "Ignored" -msgstr "" - -#: mod/contacts.php:746 -msgid "Only show ignored contacts" -msgstr "" - -#: mod/contacts.php:751 -msgid "Archived" -msgstr "" - -#: mod/contacts.php:754 -msgid "Only show archived contacts" -msgstr "" - -#: mod/contacts.php:759 -msgid "Hidden" -msgstr "" - -#: mod/contacts.php:762 -msgid "Only show hidden contacts" -msgstr "" - -#: mod/contacts.php:818 -msgid "Search your contacts" -msgstr "" - -#: mod/contacts.php:820 mod/directory.php:209 src/Content/Widget.php:63 -msgid "Find" -msgstr "" - -#: mod/contacts.php:826 mod/settings.php:171 mod/settings.php:701 -msgid "Update" -msgstr "" - -#: mod/contacts.php:829 mod/contacts.php:1027 -msgid "Archive" -msgstr "" - -#: mod/contacts.php:829 mod/contacts.php:1027 -msgid "Unarchive" -msgstr "" - -#: mod/contacts.php:832 -msgid "Batch Actions" -msgstr "" - -#: mod/contacts.php:858 mod/unfollow.php:132 mod/follow.php:186 -#: src/Model/Profile.php:891 -msgid "Status Messages and Posts" -msgstr "" - -#: mod/contacts.php:866 src/Model/Profile.php:899 -msgid "Profile Details" -msgstr "" - -#: mod/contacts.php:878 -msgid "View all contacts" -msgstr "" - -#: mod/contacts.php:889 -msgid "View all common friends" -msgstr "" - -#: mod/contacts.php:895 mod/events.php:532 mod/admin.php:1351 -#: src/Model/Profile.php:865 -msgid "Advanced" -msgstr "" - -#: mod/contacts.php:898 -msgid "Advanced Contact Settings" -msgstr "" - -#: mod/contacts.php:930 -msgid "Mutual Friendship" -msgstr "" - -#: mod/contacts.php:934 -msgid "is a fan of yours" -msgstr "" - -#: mod/contacts.php:938 -msgid "you are a fan of" -msgstr "" - -#: mod/contacts.php:1013 -msgid "Toggle Blocked status" -msgstr "" - -#: mod/contacts.php:1021 -msgid "Toggle Ignored status" -msgstr "" - -#: mod/contacts.php:1029 -msgid "Toggle Archive status" -msgstr "" - -#: mod/contacts.php:1037 -msgid "Delete contact" -msgstr "" - #: mod/delegate.php:37 msgid "Parent user not found." msgstr "" @@ -4193,6 +3673,15 @@ msgstr "" msgid "Unfollowing is currently not supported by your network." msgstr "" +#: mod/unfollow.php:100 mod/contacts.php:599 +msgid "Disconnect/Unfollow" +msgstr "" + +#: mod/unfollow.php:132 mod/follow.php:186 mod/contacts.php:858 +#: src/Model/Profile.php:891 +msgid "Status Messages and Posts" +msgstr "" + #: mod/cal.php:274 mod/events.php:391 src/Content/Nav.php:104 #: src/Content/Nav.php:169 src/Model/Profile.php:924 src/Model/Profile.php:935 #: view/theme/frio/theme.php:263 view/theme/frio/theme.php:267 @@ -4302,6 +3791,11 @@ msgstr "" msgid "Basic" msgstr "" +#: mod/events.php:532 mod/contacts.php:895 mod/admin.php:1351 +#: src/Model/Profile.php:865 +msgid "Advanced" +msgstr "" + #: mod/events.php:552 msgid "Failed to remove event" msgstr "" @@ -4402,6 +3896,10 @@ msgstr "" msgid "Missing some important data!" msgstr "" +#: mod/settings.php:171 mod/settings.php:701 mod/contacts.php:826 +msgid "Update" +msgstr "" + #: mod/settings.php:279 msgid "Failed to connect with email account using the settings provided." msgstr "" @@ -5258,6 +4756,10 @@ msgstr "" msgid "Site Directory" msgstr "" +#: mod/directory.php:209 mod/contacts.php:820 src/Content/Widget.php:63 +msgid "Find" +msgstr "" + #: mod/directory.php:213 msgid "No entries (some entries may be hidden)." msgstr "" @@ -5701,6 +5203,584 @@ msgstr "" msgid "Create New Profile" msgstr "" +#: mod/contacts.php:157 +#, php-format +msgid "%d contact edited." +msgid_plural "%d contacts edited." +msgstr[0] "" +msgstr[1] "" + +#: mod/contacts.php:184 mod/contacts.php:400 +msgid "Could not access contact record." +msgstr "" + +#: mod/contacts.php:194 +msgid "Could not locate selected profile." +msgstr "" + +#: mod/contacts.php:228 +msgid "Contact updated." +msgstr "" + +#: mod/contacts.php:421 +msgid "Contact has been blocked" +msgstr "" + +#: mod/contacts.php:421 +msgid "Contact has been unblocked" +msgstr "" + +#: mod/contacts.php:432 +msgid "Contact has been ignored" +msgstr "" + +#: mod/contacts.php:432 +msgid "Contact has been unignored" +msgstr "" + +#: mod/contacts.php:443 +msgid "Contact has been archived" +msgstr "" + +#: mod/contacts.php:443 +msgid "Contact has been unarchived" +msgstr "" + +#: mod/contacts.php:467 +msgid "Drop contact" +msgstr "" + +#: mod/contacts.php:470 mod/contacts.php:823 +msgid "Do you really want to delete this contact?" +msgstr "" + +#: mod/contacts.php:488 +msgid "Contact has been removed." +msgstr "" + +#: mod/contacts.php:519 +#, php-format +msgid "You are mutual friends with %s" +msgstr "" + +#: mod/contacts.php:523 +#, php-format +msgid "You are sharing with %s" +msgstr "" + +#: mod/contacts.php:527 +#, php-format +msgid "%s is sharing with you" +msgstr "" + +#: mod/contacts.php:547 +msgid "Private communications are not available for this contact." +msgstr "" + +#: mod/contacts.php:549 +msgid "Never" +msgstr "" + +#: mod/contacts.php:552 +msgid "(Update was successful)" +msgstr "" + +#: mod/contacts.php:552 +msgid "(Update was not successful)" +msgstr "" + +#: mod/contacts.php:554 mod/contacts.php:992 +msgid "Suggest friends" +msgstr "" + +#: mod/contacts.php:558 +#, php-format +msgid "Network type: %s" +msgstr "" + +#: mod/contacts.php:563 +msgid "Communications lost with this contact!" +msgstr "" + +#: mod/contacts.php:569 +msgid "Fetch further information for feeds" +msgstr "" + +#: mod/contacts.php:571 +msgid "" +"Fetch information like preview pictures, title and teaser from the feed " +"item. You can activate this if the feed doesn't contain much text. Keywords " +"are taken from the meta header in the feed item and are posted as hash tags." +msgstr "" + +#: mod/contacts.php:572 mod/admin.php:1272 mod/admin.php:1435 +#: mod/admin.php:1445 +msgid "Disabled" +msgstr "" + +#: mod/contacts.php:573 +msgid "Fetch information" +msgstr "" + +#: mod/contacts.php:574 +msgid "Fetch keywords" +msgstr "" + +#: mod/contacts.php:575 +msgid "Fetch information and keywords" +msgstr "" + +#: mod/contacts.php:608 +msgid "Contact" +msgstr "" + +#: mod/contacts.php:611 +msgid "Profile Visibility" +msgstr "" + +#: mod/contacts.php:612 +#, php-format +msgid "" +"Please choose the profile you would like to display to %s when viewing your " +"profile securely." +msgstr "" + +#: mod/contacts.php:613 +msgid "Contact Information / Notes" +msgstr "" + +#: mod/contacts.php:614 +msgid "Their personal note" +msgstr "" + +#: mod/contacts.php:616 +msgid "Edit contact notes" +msgstr "" + +#: mod/contacts.php:620 +msgid "Block/Unblock contact" +msgstr "" + +#: mod/contacts.php:621 +msgid "Ignore contact" +msgstr "" + +#: mod/contacts.php:622 +msgid "Repair URL settings" +msgstr "" + +#: mod/contacts.php:623 +msgid "View conversations" +msgstr "" + +#: mod/contacts.php:628 +msgid "Last update:" +msgstr "" + +#: mod/contacts.php:630 +msgid "Update public posts" +msgstr "" + +#: mod/contacts.php:632 mod/contacts.php:1002 +msgid "Update now" +msgstr "" + +#: mod/contacts.php:637 mod/contacts.php:827 mod/contacts.php:1011 +#: mod/admin.php:485 mod/admin.php:1800 +msgid "Unblock" +msgstr "" + +#: mod/contacts.php:637 mod/contacts.php:827 mod/contacts.php:1011 +#: mod/admin.php:484 mod/admin.php:1799 +msgid "Block" +msgstr "" + +#: mod/contacts.php:638 mod/contacts.php:828 mod/contacts.php:1019 +msgid "Unignore" +msgstr "" + +#: mod/contacts.php:642 +msgid "Currently blocked" +msgstr "" + +#: mod/contacts.php:643 +msgid "Currently ignored" +msgstr "" + +#: mod/contacts.php:644 +msgid "Currently archived" +msgstr "" + +#: mod/contacts.php:645 +msgid "Awaiting connection acknowledge" +msgstr "" + +#: mod/contacts.php:646 +msgid "" +"Replies/likes to your public posts may still be visible" +msgstr "" + +#: mod/contacts.php:647 +msgid "Notification for new posts" +msgstr "" + +#: mod/contacts.php:647 +msgid "Send a notification of every new post of this contact" +msgstr "" + +#: mod/contacts.php:650 +msgid "Blacklisted keywords" +msgstr "" + +#: mod/contacts.php:650 +msgid "" +"Comma separated list of keywords that should not be converted to hashtags, " +"when \"Fetch information and keywords\" is selected" +msgstr "" + +#: mod/contacts.php:662 src/Model/Profile.php:424 +msgid "XMPP:" +msgstr "" + +#: mod/contacts.php:667 +msgid "Actions" +msgstr "" + +#: mod/contacts.php:669 mod/contacts.php:855 src/Content/Nav.php:100 +#: src/Model/Profile.php:888 view/theme/frio/theme.php:259 +msgid "Status" +msgstr "" + +#: mod/contacts.php:670 +msgid "Contact Settings" +msgstr "" + +#: mod/contacts.php:711 +msgid "Suggestions" +msgstr "" + +#: mod/contacts.php:714 +msgid "Suggest potential friends" +msgstr "" + +#: mod/contacts.php:722 +msgid "Show all contacts" +msgstr "" + +#: mod/contacts.php:727 +msgid "Unblocked" +msgstr "" + +#: mod/contacts.php:730 +msgid "Only show unblocked contacts" +msgstr "" + +#: mod/contacts.php:735 +msgid "Blocked" +msgstr "" + +#: mod/contacts.php:738 +msgid "Only show blocked contacts" +msgstr "" + +#: mod/contacts.php:743 +msgid "Ignored" +msgstr "" + +#: mod/contacts.php:746 +msgid "Only show ignored contacts" +msgstr "" + +#: mod/contacts.php:751 +msgid "Archived" +msgstr "" + +#: mod/contacts.php:754 +msgid "Only show archived contacts" +msgstr "" + +#: mod/contacts.php:759 +msgid "Hidden" +msgstr "" + +#: mod/contacts.php:762 +msgid "Only show hidden contacts" +msgstr "" + +#: mod/contacts.php:818 +msgid "Search your contacts" +msgstr "" + +#: mod/contacts.php:829 mod/contacts.php:1027 +msgid "Archive" +msgstr "" + +#: mod/contacts.php:829 mod/contacts.php:1027 +msgid "Unarchive" +msgstr "" + +#: mod/contacts.php:832 +msgid "Batch Actions" +msgstr "" + +#: mod/contacts.php:866 src/Model/Profile.php:899 +msgid "Profile Details" +msgstr "" + +#: mod/contacts.php:878 +msgid "View all contacts" +msgstr "" + +#: mod/contacts.php:889 +msgid "View all common friends" +msgstr "" + +#: mod/contacts.php:898 +msgid "Advanced Contact Settings" +msgstr "" + +#: mod/contacts.php:930 +msgid "Mutual Friendship" +msgstr "" + +#: mod/contacts.php:934 +msgid "is a fan of yours" +msgstr "" + +#: mod/contacts.php:938 +msgid "you are a fan of" +msgstr "" + +#: mod/contacts.php:1013 +msgid "Toggle Blocked status" +msgstr "" + +#: mod/contacts.php:1021 +msgid "Toggle Ignored status" +msgstr "" + +#: mod/contacts.php:1029 +msgid "Toggle Archive status" +msgstr "" + +#: mod/contacts.php:1037 +msgid "Delete contact" +msgstr "" + +#: mod/_tos.php:48 mod/register.php:288 mod/admin.php:188 mod/admin.php:302 +#: src/Module/Tos.php:48 +msgid "Terms of Service" +msgstr "" + +#: mod/_tos.php:51 src/Module/Tos.php:51 +msgid "Privacy Statement" +msgstr "" + +#: mod/_tos.php:52 src/Module/Tos.php:52 +msgid "" +"At the time of registration, and for providing communications between the " +"user account and their contacts, the user has to provide a display name (pen " +"name), an username (nickname) and a working email address. The names will be " +"accessible on the profile page of the account by any visitor of the page, " +"even if other profile details are not displayed. The email address will only " +"be used to send the user notifications about interactions, but wont be " +"visibly displayed. The listing of an account in the node's user directory or " +"the global user directory is optional and can be controlled in the user " +"settings, it is not necessary for communication." +msgstr "" + +#: mod/_tos.php:53 src/Module/Tos.php:53 +#, php-format +msgid "" +"At any point in time a logged in user can export their account data from the " +"account settings. If the user wants to " +"delete their account they can do so at %1$s/" +"removeme. The deletion of the account will be permanent." +msgstr "" + +#: mod/friendica.php:77 +msgid "This is Friendica, version" +msgstr "" + +#: mod/friendica.php:78 +msgid "running at web location" +msgstr "" + +#: mod/friendica.php:82 +msgid "" +"Please visit Friendi.ca to learn more " +"about the Friendica project." +msgstr "" + +#: mod/friendica.php:86 +msgid "Bug reports and issues: please visit" +msgstr "" + +#: mod/friendica.php:86 +msgid "the bugtracker at github" +msgstr "" + +#: mod/friendica.php:89 +msgid "" +"Suggestions, praise, donations, etc. - please email \"Info\" at Friendica - " +"dot com" +msgstr "" + +#: mod/friendica.php:103 +msgid "Installed addons/apps:" +msgstr "" + +#: mod/friendica.php:117 +msgid "No installed addons/apps" +msgstr "" + +#: mod/friendica.php:122 +#, php-format +msgid "Read about the Terms of Service of this node." +msgstr "" + +#: mod/friendica.php:127 +msgid "On this server the following remote servers are blocked." +msgstr "" + +#: mod/friendica.php:128 mod/admin.php:354 mod/admin.php:372 +msgid "Reason for the block" +msgstr "" + +#: mod/lostpass.php:27 +msgid "No valid account found." +msgstr "" + +#: mod/lostpass.php:39 +msgid "Password reset request issued. Check your email." +msgstr "" + +#: mod/lostpass.php:45 +#, php-format +msgid "" +"\n" +"\t\tDear %1$s,\n" +"\t\t\tA request was recently received at \"%2$s\" to reset your account\n" +"\t\tpassword. In order to confirm this request, please select the " +"verification link\n" +"\t\tbelow or paste it into your web browser address bar.\n" +"\n" +"\t\tIf you did NOT request this change, please DO NOT follow the link\n" +"\t\tprovided and ignore and/or delete this email, the request will expire " +"shortly.\n" +"\n" +"\t\tYour password will not be changed unless we can verify that you\n" +"\t\tissued this request." +msgstr "" + +#: mod/lostpass.php:56 +#, php-format +msgid "" +"\n" +"\t\tFollow this link soon to verify your identity:\n" +"\n" +"\t\t%1$s\n" +"\n" +"\t\tYou will then receive a follow-up message containing the new password.\n" +"\t\tYou may change that password from your account settings page after " +"logging in.\n" +"\n" +"\t\tThe login details are as follows:\n" +"\n" +"\t\tSite Location:\t%2$s\n" +"\t\tLogin Name:\t%3$s" +msgstr "" + +#: mod/lostpass.php:73 +#, php-format +msgid "Password reset requested at %s" +msgstr "" + +#: mod/lostpass.php:89 +msgid "" +"Request could not be verified. (You may have previously submitted it.) " +"Password reset failed." +msgstr "" + +#: mod/lostpass.php:102 +msgid "Request has expired, please make a new one." +msgstr "" + +#: mod/lostpass.php:117 +msgid "Forgot your Password?" +msgstr "" + +#: mod/lostpass.php:118 +msgid "" +"Enter your email address and submit to have your password reset. Then check " +"your email for further instructions." +msgstr "" + +#: mod/lostpass.php:119 src/Module/Login.php:314 +msgid "Nickname or Email: " +msgstr "" + +#: mod/lostpass.php:120 +msgid "Reset" +msgstr "" + +#: mod/lostpass.php:136 src/Module/Login.php:326 +msgid "Password Reset" +msgstr "" + +#: mod/lostpass.php:137 +msgid "Your password has been reset as requested." +msgstr "" + +#: mod/lostpass.php:138 +msgid "Your new password is" +msgstr "" + +#: mod/lostpass.php:139 +msgid "Save or copy your new password - and then" +msgstr "" + +#: mod/lostpass.php:140 +msgid "click here to login" +msgstr "" + +#: mod/lostpass.php:141 +msgid "" +"Your password may be changed from the Settings page after " +"successful login." +msgstr "" + +#: mod/lostpass.php:149 +#, php-format +msgid "" +"\n" +"\t\t\tDear %1$s,\n" +"\t\t\t\tYour password has been changed as requested. Please retain this\n" +"\t\t\tinformation for your records (or change your password immediately to\n" +"\t\t\tsomething that you will remember).\n" +"\t\t" +msgstr "" + +#: mod/lostpass.php:155 +#, php-format +msgid "" +"\n" +"\t\t\tYour login details are as follows:\n" +"\n" +"\t\t\tSite Location:\t%1$s\n" +"\t\t\tLogin Name:\t%2$s\n" +"\t\t\tPassword:\t%3$s\n" +"\n" +"\t\t\tYou may change that password from your account settings page after " +"logging in.\n" +"\t\t" +msgstr "" + +#: mod/lostpass.php:169 +#, php-format +msgid "Your password has been changed at %s" +msgstr "" + #: mod/register.php:99 msgid "" "Registration successful. Please check your email for further instructions." @@ -5798,59 +5878,6 @@ msgstr "" msgid "Import your profile to this friendica instance" msgstr "" -#: mod/register.php:288 mod/admin.php:188 mod/admin.php:302 mod/tos.php:48 -msgid "Terms of Service" -msgstr "" - -#: mod/friendica.php:77 -msgid "This is Friendica, version" -msgstr "" - -#: mod/friendica.php:78 -msgid "running at web location" -msgstr "" - -#: mod/friendica.php:82 -msgid "" -"Please visit Friendi.ca to learn more " -"about the Friendica project." -msgstr "" - -#: mod/friendica.php:86 -msgid "Bug reports and issues: please visit" -msgstr "" - -#: mod/friendica.php:86 -msgid "the bugtracker at github" -msgstr "" - -#: mod/friendica.php:89 -msgid "" -"Suggestions, praise, donations, etc. - please email \"Info\" at Friendica - " -"dot com" -msgstr "" - -#: mod/friendica.php:103 -msgid "Installed addons/apps:" -msgstr "" - -#: mod/friendica.php:117 -msgid "No installed addons/apps" -msgstr "" - -#: mod/friendica.php:122 -#, php-format -msgid "Read about the Terms of Service of this node." -msgstr "" - -#: mod/friendica.php:127 -msgid "On this server the following remote servers are blocked." -msgstr "" - -#: mod/friendica.php:128 mod/admin.php:354 mod/admin.php:372 -msgid "Reason for the block" -msgstr "" - #: mod/admin.php:106 msgid "Theme settings updated." msgstr "" @@ -5976,7 +6003,7 @@ msgid "" msgstr "" #: mod/admin.php:305 -msgid "The Terms of Usage" +msgid "The Terms of Service" msgstr "" #: mod/admin.php:305 @@ -7525,32 +7552,6 @@ msgstr "" msgid "Manage Additional Features" msgstr "" -#: mod/tos.php:51 -msgid "Privacy Statement" -msgstr "" - -#: mod/tos.php:52 -msgid "" -"At the time of registration, and for providing communications between the " -"user account and their contacts, the user has to provide a display name (pen " -"name), an username (nickname) and a working email address. The names will be " -"accessible on the profile page of the account by any visitor of the page, " -"even if other profile details are not displayed. The email address will only " -"be used to send the user notifications about interactions, but wont be " -"visibly displayed. The listing of an account in the node's user directory or " -"the global user directory is optional and can be controlled in the user " -"settings, it is not necessary for communication." -msgstr "" - -#: mod/tos.php:53 -#, php-format -msgid "" -"At any point in time a logged in user can export their account data from the " -"account settings. If the user wants to " -"delete their account they can do so at %1$s/" -"removeme. The deletion of the account will be permanent." -msgstr "" - #: src/Core/UserImport.php:104 msgid "Error decoding account file" msgstr "" @@ -7772,314 +7773,6 @@ msgstr "" msgid "Invalid link protocol" msgstr "" -#: src/Content/ContactSelector.php:55 -msgid "Frequently" -msgstr "" - -#: src/Content/ContactSelector.php:56 -msgid "Hourly" -msgstr "" - -#: src/Content/ContactSelector.php:57 -msgid "Twice daily" -msgstr "" - -#: src/Content/ContactSelector.php:58 -msgid "Daily" -msgstr "" - -#: src/Content/ContactSelector.php:59 -msgid "Weekly" -msgstr "" - -#: src/Content/ContactSelector.php:60 -msgid "Monthly" -msgstr "" - -#: src/Content/ContactSelector.php:80 -msgid "OStatus" -msgstr "" - -#: src/Content/ContactSelector.php:81 -msgid "RSS/Atom" -msgstr "" - -#: src/Content/ContactSelector.php:84 -msgid "Facebook" -msgstr "" - -#: src/Content/ContactSelector.php:85 -msgid "Zot!" -msgstr "" - -#: src/Content/ContactSelector.php:86 -msgid "LinkedIn" -msgstr "" - -#: src/Content/ContactSelector.php:87 -msgid "XMPP/IM" -msgstr "" - -#: src/Content/ContactSelector.php:88 -msgid "MySpace" -msgstr "" - -#: src/Content/ContactSelector.php:89 -msgid "Google+" -msgstr "" - -#: src/Content/ContactSelector.php:90 -msgid "pump.io" -msgstr "" - -#: src/Content/ContactSelector.php:91 -msgid "Twitter" -msgstr "" - -#: src/Content/ContactSelector.php:92 -msgid "Diaspora Connector" -msgstr "" - -#: src/Content/ContactSelector.php:93 -msgid "GNU Social Connector" -msgstr "" - -#: src/Content/ContactSelector.php:94 -msgid "pnut" -msgstr "" - -#: src/Content/ContactSelector.php:95 -msgid "App.net" -msgstr "" - -#: src/Content/ContactSelector.php:125 -msgid "Male" -msgstr "" - -#: src/Content/ContactSelector.php:125 -msgid "Female" -msgstr "" - -#: src/Content/ContactSelector.php:125 -msgid "Currently Male" -msgstr "" - -#: src/Content/ContactSelector.php:125 -msgid "Currently Female" -msgstr "" - -#: src/Content/ContactSelector.php:125 -msgid "Mostly Male" -msgstr "" - -#: src/Content/ContactSelector.php:125 -msgid "Mostly Female" -msgstr "" - -#: src/Content/ContactSelector.php:125 -msgid "Transgender" -msgstr "" - -#: src/Content/ContactSelector.php:125 -msgid "Intersex" -msgstr "" - -#: src/Content/ContactSelector.php:125 -msgid "Transsexual" -msgstr "" - -#: src/Content/ContactSelector.php:125 -msgid "Hermaphrodite" -msgstr "" - -#: src/Content/ContactSelector.php:125 -msgid "Neuter" -msgstr "" - -#: src/Content/ContactSelector.php:125 -msgid "Non-specific" -msgstr "" - -#: src/Content/ContactSelector.php:125 -msgid "Other" -msgstr "" - -#: src/Content/ContactSelector.php:147 -msgid "Males" -msgstr "" - -#: src/Content/ContactSelector.php:147 -msgid "Females" -msgstr "" - -#: src/Content/ContactSelector.php:147 -msgid "Gay" -msgstr "" - -#: src/Content/ContactSelector.php:147 -msgid "Lesbian" -msgstr "" - -#: src/Content/ContactSelector.php:147 -msgid "No Preference" -msgstr "" - -#: src/Content/ContactSelector.php:147 -msgid "Bisexual" -msgstr "" - -#: src/Content/ContactSelector.php:147 -msgid "Autosexual" -msgstr "" - -#: src/Content/ContactSelector.php:147 -msgid "Abstinent" -msgstr "" - -#: src/Content/ContactSelector.php:147 -msgid "Virgin" -msgstr "" - -#: src/Content/ContactSelector.php:147 -msgid "Deviant" -msgstr "" - -#: src/Content/ContactSelector.php:147 -msgid "Fetish" -msgstr "" - -#: src/Content/ContactSelector.php:147 -msgid "Oodles" -msgstr "" - -#: src/Content/ContactSelector.php:147 -msgid "Nonsexual" -msgstr "" - -#: src/Content/ContactSelector.php:169 -msgid "Single" -msgstr "" - -#: src/Content/ContactSelector.php:169 -msgid "Lonely" -msgstr "" - -#: src/Content/ContactSelector.php:169 -msgid "Available" -msgstr "" - -#: src/Content/ContactSelector.php:169 -msgid "Unavailable" -msgstr "" - -#: src/Content/ContactSelector.php:169 -msgid "Has crush" -msgstr "" - -#: src/Content/ContactSelector.php:169 -msgid "Infatuated" -msgstr "" - -#: src/Content/ContactSelector.php:169 -msgid "Dating" -msgstr "" - -#: src/Content/ContactSelector.php:169 -msgid "Unfaithful" -msgstr "" - -#: src/Content/ContactSelector.php:169 -msgid "Sex Addict" -msgstr "" - -#: src/Content/ContactSelector.php:169 src/Model/User.php:505 -msgid "Friends" -msgstr "" - -#: src/Content/ContactSelector.php:169 -msgid "Friends/Benefits" -msgstr "" - -#: src/Content/ContactSelector.php:169 -msgid "Casual" -msgstr "" - -#: src/Content/ContactSelector.php:169 -msgid "Engaged" -msgstr "" - -#: src/Content/ContactSelector.php:169 -msgid "Married" -msgstr "" - -#: src/Content/ContactSelector.php:169 -msgid "Imaginarily married" -msgstr "" - -#: src/Content/ContactSelector.php:169 -msgid "Partners" -msgstr "" - -#: src/Content/ContactSelector.php:169 -msgid "Cohabiting" -msgstr "" - -#: src/Content/ContactSelector.php:169 -msgid "Common law" -msgstr "" - -#: src/Content/ContactSelector.php:169 -msgid "Happy" -msgstr "" - -#: src/Content/ContactSelector.php:169 -msgid "Not looking" -msgstr "" - -#: src/Content/ContactSelector.php:169 -msgid "Swinger" -msgstr "" - -#: src/Content/ContactSelector.php:169 -msgid "Betrayed" -msgstr "" - -#: src/Content/ContactSelector.php:169 -msgid "Separated" -msgstr "" - -#: src/Content/ContactSelector.php:169 -msgid "Unstable" -msgstr "" - -#: src/Content/ContactSelector.php:169 -msgid "Divorced" -msgstr "" - -#: src/Content/ContactSelector.php:169 -msgid "Imaginarily divorced" -msgstr "" - -#: src/Content/ContactSelector.php:169 -msgid "Widowed" -msgstr "" - -#: src/Content/ContactSelector.php:169 -msgid "Uncertain" -msgstr "" - -#: src/Content/ContactSelector.php:169 -msgid "It's complicated" -msgstr "" - -#: src/Content/ContactSelector.php:169 -msgid "Don't care" -msgstr "" - -#: src/Content/ContactSelector.php:169 -msgid "Ask me" -msgstr "" - #: src/Content/ForumManager.php:127 view/theme/vier/theme.php:256 msgid "External link to forum" msgstr "" @@ -8561,6 +8254,314 @@ msgid_plural "%d contacts in common" msgstr[0] "" msgstr[1] "" +#: src/Content/ContactSelector.php:55 +msgid "Frequently" +msgstr "" + +#: src/Content/ContactSelector.php:56 +msgid "Hourly" +msgstr "" + +#: src/Content/ContactSelector.php:57 +msgid "Twice daily" +msgstr "" + +#: src/Content/ContactSelector.php:58 +msgid "Daily" +msgstr "" + +#: src/Content/ContactSelector.php:59 +msgid "Weekly" +msgstr "" + +#: src/Content/ContactSelector.php:60 +msgid "Monthly" +msgstr "" + +#: src/Content/ContactSelector.php:80 +msgid "OStatus" +msgstr "" + +#: src/Content/ContactSelector.php:81 +msgid "RSS/Atom" +msgstr "" + +#: src/Content/ContactSelector.php:84 +msgid "Facebook" +msgstr "" + +#: src/Content/ContactSelector.php:85 +msgid "Zot!" +msgstr "" + +#: src/Content/ContactSelector.php:86 +msgid "LinkedIn" +msgstr "" + +#: src/Content/ContactSelector.php:87 +msgid "XMPP/IM" +msgstr "" + +#: src/Content/ContactSelector.php:88 +msgid "MySpace" +msgstr "" + +#: src/Content/ContactSelector.php:89 +msgid "Google+" +msgstr "" + +#: src/Content/ContactSelector.php:90 +msgid "pump.io" +msgstr "" + +#: src/Content/ContactSelector.php:91 +msgid "Twitter" +msgstr "" + +#: src/Content/ContactSelector.php:92 +msgid "Diaspora Connector" +msgstr "" + +#: src/Content/ContactSelector.php:93 +msgid "GNU Social Connector" +msgstr "" + +#: src/Content/ContactSelector.php:94 +msgid "pnut" +msgstr "" + +#: src/Content/ContactSelector.php:95 +msgid "App.net" +msgstr "" + +#: src/Content/ContactSelector.php:125 +msgid "Male" +msgstr "" + +#: src/Content/ContactSelector.php:125 +msgid "Female" +msgstr "" + +#: src/Content/ContactSelector.php:125 +msgid "Currently Male" +msgstr "" + +#: src/Content/ContactSelector.php:125 +msgid "Currently Female" +msgstr "" + +#: src/Content/ContactSelector.php:125 +msgid "Mostly Male" +msgstr "" + +#: src/Content/ContactSelector.php:125 +msgid "Mostly Female" +msgstr "" + +#: src/Content/ContactSelector.php:125 +msgid "Transgender" +msgstr "" + +#: src/Content/ContactSelector.php:125 +msgid "Intersex" +msgstr "" + +#: src/Content/ContactSelector.php:125 +msgid "Transsexual" +msgstr "" + +#: src/Content/ContactSelector.php:125 +msgid "Hermaphrodite" +msgstr "" + +#: src/Content/ContactSelector.php:125 +msgid "Neuter" +msgstr "" + +#: src/Content/ContactSelector.php:125 +msgid "Non-specific" +msgstr "" + +#: src/Content/ContactSelector.php:125 +msgid "Other" +msgstr "" + +#: src/Content/ContactSelector.php:147 +msgid "Males" +msgstr "" + +#: src/Content/ContactSelector.php:147 +msgid "Females" +msgstr "" + +#: src/Content/ContactSelector.php:147 +msgid "Gay" +msgstr "" + +#: src/Content/ContactSelector.php:147 +msgid "Lesbian" +msgstr "" + +#: src/Content/ContactSelector.php:147 +msgid "No Preference" +msgstr "" + +#: src/Content/ContactSelector.php:147 +msgid "Bisexual" +msgstr "" + +#: src/Content/ContactSelector.php:147 +msgid "Autosexual" +msgstr "" + +#: src/Content/ContactSelector.php:147 +msgid "Abstinent" +msgstr "" + +#: src/Content/ContactSelector.php:147 +msgid "Virgin" +msgstr "" + +#: src/Content/ContactSelector.php:147 +msgid "Deviant" +msgstr "" + +#: src/Content/ContactSelector.php:147 +msgid "Fetish" +msgstr "" + +#: src/Content/ContactSelector.php:147 +msgid "Oodles" +msgstr "" + +#: src/Content/ContactSelector.php:147 +msgid "Nonsexual" +msgstr "" + +#: src/Content/ContactSelector.php:169 +msgid "Single" +msgstr "" + +#: src/Content/ContactSelector.php:169 +msgid "Lonely" +msgstr "" + +#: src/Content/ContactSelector.php:169 +msgid "Available" +msgstr "" + +#: src/Content/ContactSelector.php:169 +msgid "Unavailable" +msgstr "" + +#: src/Content/ContactSelector.php:169 +msgid "Has crush" +msgstr "" + +#: src/Content/ContactSelector.php:169 +msgid "Infatuated" +msgstr "" + +#: src/Content/ContactSelector.php:169 +msgid "Dating" +msgstr "" + +#: src/Content/ContactSelector.php:169 +msgid "Unfaithful" +msgstr "" + +#: src/Content/ContactSelector.php:169 +msgid "Sex Addict" +msgstr "" + +#: src/Content/ContactSelector.php:169 src/Model/User.php:505 +msgid "Friends" +msgstr "" + +#: src/Content/ContactSelector.php:169 +msgid "Friends/Benefits" +msgstr "" + +#: src/Content/ContactSelector.php:169 +msgid "Casual" +msgstr "" + +#: src/Content/ContactSelector.php:169 +msgid "Engaged" +msgstr "" + +#: src/Content/ContactSelector.php:169 +msgid "Married" +msgstr "" + +#: src/Content/ContactSelector.php:169 +msgid "Imaginarily married" +msgstr "" + +#: src/Content/ContactSelector.php:169 +msgid "Partners" +msgstr "" + +#: src/Content/ContactSelector.php:169 +msgid "Cohabiting" +msgstr "" + +#: src/Content/ContactSelector.php:169 +msgid "Common law" +msgstr "" + +#: src/Content/ContactSelector.php:169 +msgid "Happy" +msgstr "" + +#: src/Content/ContactSelector.php:169 +msgid "Not looking" +msgstr "" + +#: src/Content/ContactSelector.php:169 +msgid "Swinger" +msgstr "" + +#: src/Content/ContactSelector.php:169 +msgid "Betrayed" +msgstr "" + +#: src/Content/ContactSelector.php:169 +msgid "Separated" +msgstr "" + +#: src/Content/ContactSelector.php:169 +msgid "Unstable" +msgstr "" + +#: src/Content/ContactSelector.php:169 +msgid "Divorced" +msgstr "" + +#: src/Content/ContactSelector.php:169 +msgid "Imaginarily divorced" +msgstr "" + +#: src/Content/ContactSelector.php:169 +msgid "Widowed" +msgstr "" + +#: src/Content/ContactSelector.php:169 +msgid "Uncertain" +msgstr "" + +#: src/Content/ContactSelector.php:169 +msgid "It's complicated" +msgstr "" + +#: src/Content/ContactSelector.php:169 +msgid "Don't care" +msgstr "" + +#: src/Content/ContactSelector.php:169 +msgid "Ask me" +msgstr "" + #: src/Database/DBStructure.php:32 msgid "There are no tables on MyISAM." msgstr "" @@ -8855,7 +8856,7 @@ msgstr "" msgid "%s's birthday" msgstr "" -#: src/Model/Contact.php:1589 src/Protocol/DFRN.php:1397 +#: src/Model/Contact.php:1589 src/Protocol/DFRN.php:1478 #, php-format msgid "Happy Birthday %s" msgstr "" @@ -9033,11 +9034,6 @@ msgid "" "\t\t" msgstr "" -#: src/Protocol/DFRN.php:1396 -#, php-format -msgid "%s\\'s birthday" -msgstr "" - #: src/Protocol/OStatus.php:1799 #, php-format msgid "%s is now following %s." @@ -9056,15 +9052,20 @@ msgstr "" msgid "stopped following" msgstr "" -#: src/Protocol/Diaspora.php:2647 +#: src/Protocol/DFRN.php:1477 +#, php-format +msgid "%s\\'s birthday" +msgstr "" + +#: src/Protocol/Diaspora.php:2651 msgid "Sharing notification from Diaspora network" msgstr "" -#: src/Protocol/Diaspora.php:3732 +#: src/Protocol/Diaspora.php:3736 msgid "Attachments:" msgstr "" -#: src/Worker/Delivery.php:390 +#: src/Worker/Delivery.php:392 msgid "(no subject)" msgstr "" From c16ae0bacbd255444c99b16fede353d2b0bf1b3c Mon Sep 17 00:00:00 2001 From: Michael Date: Wed, 4 Apr 2018 06:06:38 +0000 Subject: [PATCH 226/227] Fix: Commenting on public posts from Friendica users is now possible again --- src/Protocol/Diaspora.php | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/Protocol/Diaspora.php b/src/Protocol/Diaspora.php index d5d60a154..3e53626bf 100644 --- a/src/Protocol/Diaspora.php +++ b/src/Protocol/Diaspora.php @@ -3264,13 +3264,15 @@ class Diaspora $logid = random_string(4); + $dest_url = ($public_batch ? $contact["batch"] : $contact["notify"]); + // We always try to use the data from the fcontact table. // This is important for transmitting data to Friendica servers. - if (!empty($contact['addr']) && ($contact['network'] != NETWORK_DIASPORA)) { + if (!empty($contact['addr'])) { $fcontact = self::personByHandle($contact['addr']); - $dest_url = ($public_batch ? $fcontact["batch"] : $fcontact["notify"]); - } else { - $dest_url = ($public_batch ? $contact["batch"] : $contact["notify"]); + if (!empty($fcontact)) { + $dest_url = ($public_batch ? $fcontact["batch"] : $fcontact["notify"]); + } } if (!$dest_url) { From eb5404740a5a485a7b92b08cf06749d8c44535bf Mon Sep 17 00:00:00 2001 From: ben-utzer Date: Wed, 4 Apr 2018 14:24:28 +0530 Subject: [PATCH 227/227] .service file for systemd unit --- mods/sample-systemd.service | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 mods/sample-systemd.service diff --git a/mods/sample-systemd.service b/mods/sample-systemd.service new file mode 100644 index 000000000..a3c350ff5 --- /dev/null +++ b/mods/sample-systemd.service @@ -0,0 +1,8 @@ +[Unit] +Description=Friendica Worker + +[Service] +User=http +#Adapt the path in the following line to your system, use 'which php' to find php path, +#provide the absolute path for worker.php +ExecStart=/usr/bin/php /www/path/bin/worker.php &