summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Kunz <david.kunz@bfh.ch>2018-05-16 12:14:40 +0000
committerDavid Kunz <david.kunz@bfh.ch>2018-05-16 12:14:40 +0000
commit41f3c72085492e9269b073a7c908f3ae019c3944 (patch)
tree54d90aa1c984e8c334e64ba47b95ae1da5e809b7
parentReleasing progress-inux version 3.4.0-0+dschinn1. (diff)
downloadmatomo-41f3c72085492e9269b073a7c908f3ae019c3944.zip
matomo-41f3c72085492e9269b073a7c908f3ae019c3944.tar.xz
Merging upstream version 3.5.0.
Signed-off-by: David Kunz <david.kunz@bfh.ch>
-rw-r--r--piwik/CHANGELOG.md15
-rw-r--r--piwik/LEGALNOTICE4
-rw-r--r--piwik/composer.json3
-rw-r--r--piwik/composer.lock232
-rw-r--r--piwik/config/global.ini.php30
-rw-r--r--piwik/config/global.php2
-rw-r--r--piwik/config/manifest.inc.php647
-rw-r--r--piwik/core/API/DataTableManipulator/Flattener.php2
-rw-r--r--piwik/core/Archive/ArchiveInvalidator.php65
-rw-r--r--piwik/core/AssetManager/UIAssetMerger/StylesheetUIAssetMerger.php18
-rw-r--r--piwik/core/CliMulti.php41
-rw-r--r--piwik/core/Common.php13
-rw-r--r--piwik/core/CronArchive.php144
-rw-r--r--piwik/core/CronArchive/SharedSiteIds.php18
-rw-r--r--piwik/core/Db/Adapter/Mysqli.php40
-rw-r--r--piwik/core/Db/Adapter/Pdo/Mysql.php40
-rw-r--r--piwik/core/Db/BatchInsert.php14
-rw-r--r--piwik/core/Db/Schema/Mysql.php4
-rw-r--r--piwik/core/Menu/MenuAbstract.php14
-rw-r--r--piwik/core/Option.php21
-rw-r--r--piwik/core/Plugin/ComputedMetric.php7
-rw-r--r--piwik/core/Plugin/LogTablesProvider.php27
-rw-r--r--piwik/core/Plugin/ViewDataTable.php7
-rw-r--r--piwik/core/ProxyHttp.php4
-rw-r--r--piwik/core/Settings/FieldConfig.php24
-rw-r--r--piwik/core/Settings/FieldConfig/MultiPair.php89
-rw-r--r--piwik/core/Settings/Setting.php10
-rw-r--r--piwik/core/Settings/Storage/Backend/MeasurableSettingsTable.php54
-rw-r--r--piwik/core/Settings/Storage/Backend/PluginSettingsTable.php54
-rw-r--r--piwik/core/Tracker/Db/Mysqli.php43
-rw-r--r--piwik/core/Tracker/Db/Pdo/Mysql.php37
-rw-r--r--piwik/core/Tracker/GoalManager.php32
-rw-r--r--piwik/core/Tracker/LogTable.php15
-rw-r--r--piwik/core/Tracker/Request.php81
-rw-r--r--piwik/core/Tracker/TrackerCodeGenerator.php6
-rw-r--r--piwik/core/Tracker/Visit.php2
-rw-r--r--piwik/core/Updates/3.0.0-b1.php8
-rw-r--r--piwik/core/Updates/3.5.0-b2.php57
-rw-r--r--piwik/core/Updates/3.5.0-b4.php40
-rw-r--r--piwik/core/Updates/3.5.0-rc2.php25
-rw-r--r--piwik/core/Validators/BaseValidator.php48
-rw-r--r--piwik/core/Validators/CharacterLength.php58
-rw-r--r--piwik/core/Validators/DateTime.php34
-rw-r--r--piwik/core/Validators/Email.php26
-rw-r--r--[-rwxr-xr-x]piwik/core/Validators/Exception.php (renamed from piwik/plugins/UserCountry/javascripts/userCountry.js)13
-rw-r--r--piwik/core/Validators/IdSite.php22
-rw-r--r--piwik/core/Validators/NotEmpty.php22
-rw-r--r--piwik/core/Validators/NumberRange.php57
-rw-r--r--piwik/core/Validators/Regex.php26
-rw-r--r--piwik/core/Validators/UrlLike.php23
-rw-r--r--piwik/core/Validators/WhitelistedValue.php36
-rw-r--r--piwik/core/Version.php2
-rw-r--r--piwik/core/View/OneClickDone.php4
-rw-r--r--piwik/core/ViewDataTable/Config.php10
-rw-r--r--piwik/js/README.md11
-rw-r--r--piwik/js/piwik.js443
-rw-r--r--piwik/js/piwik.min.js112
-rw-r--r--piwik/lang/cs.json3
-rw-r--r--piwik/lang/da.json95
-rw-r--r--piwik/lang/de.json12
-rw-r--r--piwik/lang/el.json13
-rw-r--r--piwik/lang/en.json13
-rw-r--r--piwik/lang/es.json13
-rw-r--r--piwik/lang/fi.json47
-rw-r--r--piwik/lang/pl.json12
-rw-r--r--piwik/lang/pt-br.json2
-rw-r--r--piwik/lang/sq.json11
-rw-r--r--piwik/lang/tr.json12
-rw-r--r--piwik/libs/Zend/Db/Adapter/Mysqli.php40
-rw-r--r--piwik/piwik.js112
-rw-r--r--piwik/plugins/Actions/API.php11
-rw-r--r--piwik/plugins/Actions/ArchivingHelper.php2
-rw-r--r--piwik/plugins/Actions/DataTable/Filter/Actions.php23
-rw-r--r--piwik/plugins/Actions/javascripts/actionsDataTable.js2
-rw-r--r--piwik/plugins/Actions/lang/da.json9
-rw-r--r--piwik/plugins/Contents/lang/da.json4
-rw-r--r--piwik/plugins/CoreAdminHome/Commands/PurgeOldArchiveData.php7
-rw-r--r--piwik/plugins/CoreAdminHome/Controller.php8
-rw-r--r--piwik/plugins/CoreAdminHome/lang/da.json6
-rw-r--r--piwik/plugins/CoreAdminHome/lang/el.json3
-rw-r--r--piwik/plugins/CoreAdminHome/lang/en.json3
-rw-r--r--piwik/plugins/CoreAdminHome/lang/et.json1
-rw-r--r--piwik/plugins/CoreAdminHome/lang/pl.json3
-rw-r--r--piwik/plugins/CoreAdminHome/lang/sl.json3
-rw-r--r--piwik/plugins/CoreAdminHome/lang/sq.json3
-rw-r--r--piwik/plugins/CoreAdminHome/lang/tr.json3
-rw-r--r--piwik/plugins/CoreAdminHome/lang/zh-cn.json1
-rw-r--r--piwik/plugins/CoreAdminHome/templates/trackingCodeGenerator.twig42
-rw-r--r--piwik/plugins/CoreConsole/Commands/GeneratePluginBase.php9
-rw-r--r--piwik/plugins/CoreHome/Columns/IdSite.php23
-rw-r--r--piwik/plugins/CoreHome/Columns/LinkVisitActionId.php11
-rw-r--r--piwik/plugins/CoreHome/Columns/LinkVisitActionIdPages.php44
-rw-r--r--piwik/plugins/CoreHome/Columns/VisitGoalBuyer.php8
-rw-r--r--piwik/plugins/CoreHome/CoreHome.php5
-rw-r--r--piwik/plugins/CoreHome/DataTableRowAction/RowEvolution.php9
-rw-r--r--piwik/plugins/CoreHome/angularjs/common/directives/attributes.js3
-rw-r--r--piwik/plugins/CoreHome/angularjs/common/services/piwik-api.js5
-rw-r--r--piwik/plugins/CoreHome/angularjs/common/services/piwik-url.js15
-rw-r--r--piwik/plugins/CoreHome/angularjs/content-block/content-block.directive.js8
-rw-r--r--piwik/plugins/CoreHome/angularjs/multipairfield/multipairfield.controller.js96
-rw-r--r--piwik/plugins/CoreHome/angularjs/multipairfield/multipairfield.directive.html35
-rw-r--r--piwik/plugins/CoreHome/angularjs/multipairfield/multipairfield.directive.js61
-rw-r--r--piwik/plugins/CoreHome/angularjs/multipairfield/multipairfield.directive.less27
-rw-r--r--piwik/plugins/CoreHome/angularjs/widget/widget.directive.js19
-rw-r--r--piwik/plugins/CoreHome/javascripts/dataTable.js26
-rw-r--r--piwik/plugins/CoreHome/javascripts/dataTable_rowactions.js7
-rw-r--r--piwik/plugins/CoreHome/javascripts/notification.js16
-rw-r--r--piwik/plugins/CoreHome/lang/da.json8
-rw-r--r--piwik/plugins/CoreHome/lang/de.json12
-rw-r--r--piwik/plugins/CoreHome/lang/el.json12
-rw-r--r--piwik/plugins/CoreHome/lang/pl.json30
-rw-r--r--piwik/plugins/CoreHome/lang/pt-br.json1
-rw-r--r--piwik/plugins/CoreHome/lang/sq.json16
-rw-r--r--piwik/plugins/CoreHome/lang/tr.json12
-rw-r--r--piwik/plugins/CoreHome/lang/zh-tw.json12
-rw-r--r--piwik/plugins/CoreHome/templates/_menu.twig8
-rw-r--r--piwik/plugins/CorePluginsAdmin/API.php8
-rw-r--r--piwik/plugins/CorePluginsAdmin/SettingsMetadata.php10
-rw-r--r--piwik/plugins/CorePluginsAdmin/angularjs/field/field.directive.js9
-rw-r--r--piwik/plugins/CorePluginsAdmin/angularjs/form-field/field-multituple.html9
-rw-r--r--piwik/plugins/CorePluginsAdmin/angularjs/plugin-settings/plugin-settings.controller.js9
-rw-r--r--piwik/plugins/CorePluginsAdmin/angularjs/plugin-settings/plugin-settings.directive.html4
-rw-r--r--piwik/plugins/CoreUpdater/Test/Fixtures/DbUpdaterTestFixture.php23
-rw-r--r--piwik/plugins/CoreUpdater/Test/Fixtures/FailUpdateHttpsFixture.php24
-rw-r--r--piwik/plugins/CoreUpdater/Test/Integration/Commands/UpdateTest.php123
-rw-r--r--piwik/plugins/CoreUpdater/Test/Integration/ReleaseChannelTest.php73
-rw-r--r--piwik/plugins/CoreUpdater/Test/Integration/UpdateCommunicationTest.php152
-rw-r--r--piwik/plugins/CoreUpdater/Test/Mock/UpdaterMock.php59
-rw-r--r--piwik/plugins/CoreUpdater/Test/Unit/ModelTest.php61
-rw-r--r--piwik/plugins/CoreUpdater/lang/pl.json2
-rw-r--r--piwik/plugins/CoreVisualizations/javascripts/seriesPicker.js2
-rw-r--r--piwik/plugins/CustomVariables/lang/sq.json2
-rw-r--r--piwik/plugins/DBStats/lang/da.json8
-rw-r--r--piwik/plugins/DevicesDetection/lang/da.json8
-rw-r--r--piwik/plugins/Diagnostics/Diagnostic/DbOverSSLCheck.php62
-rw-r--r--piwik/plugins/Diagnostics/Test/Integration/Commands/AnalyzeArchiveTableTest.php99
-rw-r--r--piwik/plugins/Diagnostics/Test/Integration/ConfigReaderTest.php275
-rw-r--r--piwik/plugins/Diagnostics/Test/Mock/DiagnosticWithError.php22
-rw-r--r--piwik/plugins/Diagnostics/Test/Mock/DiagnosticWithSuccess.php22
-rw-r--r--piwik/plugins/Diagnostics/Test/Mock/DiagnosticWithWarning.php22
-rw-r--r--piwik/plugins/Diagnostics/Test/Unit/Diagnostic/DiagnosticResultTest.php37
-rw-r--r--piwik/plugins/Diagnostics/Test/Unit/DiagnosticReportTest.php47
-rw-r--r--piwik/plugins/Diagnostics/Test/Unit/DiagnosticServiceTest.php43
-rw-r--r--piwik/plugins/Diagnostics/config/config.php1
-rw-r--r--piwik/plugins/Diagnostics/lang/da.json6
-rw-r--r--piwik/plugins/Events/lang/da.json10
-rw-r--r--piwik/plugins/ExampleSettingsPlugin/SystemSettings.php3
-rw-r--r--piwik/plugins/Feedback/lang/da.json5
-rw-r--r--piwik/plugins/GeoIp2/Columns/Region.php20
-rw-r--r--piwik/plugins/GeoIp2/Commands/ConvertRegionCodesToIso.php124
-rw-r--r--piwik/plugins/GeoIp2/GeoIP2AutoUpdater.php667
-rw-r--r--piwik/plugins/GeoIp2/GeoIp2.php30
-rw-r--r--piwik/plugins/GeoIp2/LocationProvider/GeoIp2.php266
-rw-r--r--piwik/plugins/GeoIp2/LocationProvider/GeoIp2/Php.php316
-rw-r--r--piwik/plugins/GeoIp2/LocationProvider/GeoIp2/ServerModule.php331
-rw-r--r--piwik/plugins/GeoIp2/SystemSettings.php40
-rw-r--r--piwik/plugins/GeoIp2/Tasks.php23
-rw-r--r--piwik/plugins/GeoIp2/data/isoRegionNames.php5476
-rw-r--r--piwik/plugins/GeoIp2/data/regionMapping.php4635
-rw-r--r--piwik/plugins/GeoIp2/lang/en.json14
-rw-r--r--piwik/plugins/Goals/API.php23
-rw-r--r--piwik/plugins/Goals/Goals.php16
-rw-r--r--piwik/plugins/Goals/Model.php7
-rw-r--r--piwik/plugins/Goals/lang/da.json15
-rw-r--r--piwik/plugins/Goals/lang/de.json1
-rw-r--r--piwik/plugins/Goals/lang/el.json1
-rw-r--r--piwik/plugins/Goals/lang/en.json1
-rw-r--r--piwik/plugins/Goals/lang/pl.json3
-rw-r--r--piwik/plugins/Goals/lang/sq.json2
-rw-r--r--piwik/plugins/Goals/lang/tr.json1
-rw-r--r--piwik/plugins/Installation/FormSuperUser.php6
-rw-r--r--piwik/plugins/Installation/lang/da.json23
-rw-r--r--piwik/plugins/Installation/lang/de.json6
-rw-r--r--piwik/plugins/Installation/lang/el.json6
-rw-r--r--piwik/plugins/Installation/lang/en.json6
-rw-r--r--piwik/plugins/Installation/lang/pl.json8
-rw-r--r--piwik/plugins/Installation/lang/sq.json10
-rw-r--r--piwik/plugins/Installation/lang/tr.json6
-rw-r--r--piwik/plugins/Installation/lang/zh-tw.json6
-rw-r--r--piwik/plugins/LanguagesManager/Commands/CreatePull.php2
-rwxr-xr-xpiwik/plugins/LanguagesManager/Test/Integration/LanguagesManagerTest.php243
-rw-r--r--piwik/plugins/LanguagesManager/Test/Integration/ModelTest.php136
-rw-r--r--piwik/plugins/LanguagesManager/Test/Unit/TranslationWriter/Filter/ByBaseTranslationsTest.php162
-rw-r--r--piwik/plugins/LanguagesManager/Test/Unit/TranslationWriter/Filter/ByParameterCountTest.php121
-rw-r--r--piwik/plugins/LanguagesManager/Test/Unit/TranslationWriter/Filter/EmptyTranslationsTest.php99
-rw-r--r--piwik/plugins/LanguagesManager/Test/Unit/TranslationWriter/Filter/EncodedEntitiesTest.php113
-rw-r--r--piwik/plugins/LanguagesManager/Test/Unit/TranslationWriter/Filter/UnnecassaryWhitespacesTest.php158
-rw-r--r--piwik/plugins/LanguagesManager/Test/Unit/TranslationWriter/Validate/CoreTranslationsTest.php104
-rw-r--r--piwik/plugins/LanguagesManager/Test/Unit/TranslationWriter/Validate/NoScriptsTest.php113
-rw-r--r--piwik/plugins/LanguagesManager/Test/Unit/TranslationWriter/WriterTest.php267
-rw-r--r--piwik/plugins/Live/API.php7
-rw-r--r--piwik/plugins/Live/Controller.php5
-rw-r--r--piwik/plugins/Live/Model.php23
-rw-r--r--piwik/plugins/Live/VisitorDetails.php1
-rw-r--r--piwik/plugins/Live/Visualizations/VisitorLog.php9
-rw-r--r--piwik/plugins/Live/javascripts/live.js24
-rw-r--r--piwik/plugins/Live/javascripts/visitorProfile.js5
-rw-r--r--piwik/plugins/Live/stylesheets/live.less38
-rw-r--r--piwik/plugins/Live/templates/_visitorDetails.twig4
-rw-r--r--piwik/plugins/Live/templates/getLastVisitsStart.twig94
-rw-r--r--piwik/plugins/Login/lang/da.json6
-rw-r--r--piwik/plugins/Login/templates/login.twig2
-rw-r--r--piwik/plugins/Marketplace/lang/da.json3
-rw-r--r--piwik/plugins/MobileAppMeasurable/lang/da.json2
-rw-r--r--piwik/plugins/MobileMessaging/lang/da.json10
-rw-r--r--piwik/plugins/Monolog/Processor/RequestIdProcessor.php10
-rw-r--r--piwik/plugins/Monolog/config/cli.php2
-rw-r--r--piwik/plugins/Morpheus/fonts/matomo.svg4
-rw-r--r--piwik/plugins/Morpheus/fonts/matomo.ttfbin25628 -> 26128 bytes
-rw-r--r--piwik/plugins/Morpheus/fonts/matomo.woffbin25704 -> 26204 bytes
-rw-r--r--piwik/plugins/Morpheus/fonts/selection.json1256
-rw-r--r--piwik/plugins/Morpheus/icons/dist/flags/no.pngbin207 -> 207 bytes
-rw-r--r--piwik/plugins/Morpheus/icons/dist/flags/ph.pngbin694 -> 824 bytes
-rw-r--r--piwik/plugins/Morpheus/icons/dist/flags/pl.pngbin179 -> 179 bytes
-rw-r--r--piwik/plugins/Morpheus/icons/dist/flags/ws.pngbin337 -> 403 bytes
-rw-r--r--piwik/plugins/Morpheus/javascripts/piwikHelper.js32
-rw-r--r--piwik/plugins/Morpheus/stylesheets/base/icons.css16
-rw-r--r--piwik/plugins/Morpheus/stylesheets/general/_misc.less9
-rw-r--r--piwik/plugins/Morpheus/stylesheets/ui/_cards.less4
-rw-r--r--piwik/plugins/Morpheus/templates/demo.twig82
-rw-r--r--piwik/plugins/Morpheus/templates/javascriptCode.twig2
-rw-r--r--piwik/plugins/Overlay/API.php4
-rw-r--r--piwik/plugins/PrivacyManager/API.php110
-rw-r--r--piwik/plugins/PrivacyManager/Commands/AnonymizeRawData.php119
-rw-r--r--piwik/plugins/PrivacyManager/Config.php4
-rw-r--r--piwik/plugins/PrivacyManager/Controller.php66
-rw-r--r--piwik/plugins/PrivacyManager/Dao/LogDataAnonymizer.php274
-rwxr-xr-xpiwik/plugins/PrivacyManager/LogDataPurger.php17
-rw-r--r--piwik/plugins/PrivacyManager/Menu.php15
-rw-r--r--piwik/plugins/PrivacyManager/Model/DataSubjects.php398
-rw-r--r--piwik/plugins/PrivacyManager/Model/LogDataAnonymizations.php305
-rw-r--r--piwik/plugins/PrivacyManager/PrivacyManager.php41
-rw-r--r--piwik/plugins/PrivacyManager/Tasks.php26
-rw-r--r--piwik/plugins/PrivacyManager/Tracker/RequestProcessor.php64
-rw-r--r--piwik/plugins/PrivacyManager/Validators/VisitsDataSubject.php32
-rw-r--r--piwik/plugins/PrivacyManager/angularjs/anonymize-ip/anonymize-ip.controller.js2
-rw-r--r--piwik/plugins/PrivacyManager/angularjs/anonymize-log-data/anonymize-log-data.controller.js145
-rw-r--r--piwik/plugins/PrivacyManager/angularjs/anonymize-log-data/anonymize-log-data.directive.html142
-rw-r--r--piwik/plugins/PrivacyManager/angularjs/anonymize-log-data/anonymize-log-data.directive.js29
-rw-r--r--piwik/plugins/PrivacyManager/angularjs/anonymize-log-data/anonymize-log-data.directive.less17
-rw-r--r--piwik/plugins/PrivacyManager/angularjs/manage-gdpr/managegdpr.controller.js195
-rw-r--r--piwik/plugins/PrivacyManager/angularjs/manage-gdpr/managegdpr.directive.html138
-rw-r--r--piwik/plugins/PrivacyManager/angularjs/manage-gdpr/managegdpr.directive.js29
-rw-r--r--piwik/plugins/PrivacyManager/angularjs/manage-gdpr/managegdpr.directive.less12
-rw-r--r--piwik/plugins/PrivacyManager/angularjs/opt-out-customizer/opt-out-customizer.directive.html6
-rw-r--r--piwik/plugins/PrivacyManager/lang/bg.json1
-rw-r--r--piwik/plugins/PrivacyManager/lang/ca.json1
-rw-r--r--piwik/plugins/PrivacyManager/lang/cs.json1
-rw-r--r--piwik/plugins/PrivacyManager/lang/da.json9
-rw-r--r--piwik/plugins/PrivacyManager/lang/de.json8
-rw-r--r--piwik/plugins/PrivacyManager/lang/el.json10
-rw-r--r--piwik/plugins/PrivacyManager/lang/en.json12
-rw-r--r--piwik/plugins/PrivacyManager/lang/es.json1
-rw-r--r--piwik/plugins/PrivacyManager/lang/fi.json1
-rw-r--r--piwik/plugins/PrivacyManager/lang/fr.json1
-rw-r--r--piwik/plugins/PrivacyManager/lang/hi.json1
-rw-r--r--piwik/plugins/PrivacyManager/lang/id.json1
-rw-r--r--piwik/plugins/PrivacyManager/lang/it.json1
-rw-r--r--piwik/plugins/PrivacyManager/lang/ja.json1
-rw-r--r--piwik/plugins/PrivacyManager/lang/ko.json1
-rw-r--r--piwik/plugins/PrivacyManager/lang/nl.json1
-rw-r--r--piwik/plugins/PrivacyManager/lang/pl.json10
-rw-r--r--piwik/plugins/PrivacyManager/lang/pt-br.json1
-rw-r--r--piwik/plugins/PrivacyManager/lang/ro.json1
-rw-r--r--piwik/plugins/PrivacyManager/lang/ru.json1
-rw-r--r--piwik/plugins/PrivacyManager/lang/sl.json1
-rw-r--r--piwik/plugins/PrivacyManager/lang/sq.json10
-rw-r--r--piwik/plugins/PrivacyManager/lang/sr.json1
-rw-r--r--piwik/plugins/PrivacyManager/lang/sv.json1
-rw-r--r--piwik/plugins/PrivacyManager/lang/th.json1
-rw-r--r--piwik/plugins/PrivacyManager/lang/tl.json1
-rw-r--r--piwik/plugins/PrivacyManager/lang/tr.json10
-rw-r--r--piwik/plugins/PrivacyManager/lang/uk.json1
-rw-r--r--piwik/plugins/PrivacyManager/lang/zh-cn.json1
-rw-r--r--piwik/plugins/PrivacyManager/lang/zh-tw.json1
-rw-r--r--piwik/plugins/PrivacyManager/stylesheets/gdprOverview.less8
-rw-r--r--piwik/plugins/PrivacyManager/templates/askingForConsent.twig105
-rw-r--r--piwik/plugins/PrivacyManager/templates/gdprOverview.twig55
-rw-r--r--piwik/plugins/PrivacyManager/templates/gdprTools.twig7
-rw-r--r--piwik/plugins/PrivacyManager/templates/privacySettings.twig104
-rw-r--r--piwik/plugins/PrivacyManager/templates/usersOptOut.twig42
-rw-r--r--piwik/plugins/Referrers/lang/da.json2
-rw-r--r--piwik/plugins/Referrers/templates/_visitorDetails.twig4
-rw-r--r--piwik/plugins/SEO/Metric/DomainAge.php2
-rw-r--r--piwik/plugins/SEO/Metric/Google.php2
-rw-r--r--piwik/plugins/SEO/lang/da.json4
-rw-r--r--piwik/plugins/ScheduledReports/lang/da.json6
-rw-r--r--piwik/plugins/SegmentEditor/lang/da.json7
-rw-r--r--piwik/plugins/SitesManager/API.php7
-rw-r--r--piwik/plugins/SitesManager/angularjs/sites-manager/sites-manager-site.controller.js23
-rw-r--r--piwik/plugins/SitesManager/lang/da.json28
-rw-r--r--piwik/plugins/SitesManager/templates/_displayJavascriptCode.twig2
-rw-r--r--piwik/plugins/UserCountry/API.php148
-rw-r--r--piwik/plugins/UserCountry/Columns/Region.php3
-rw-r--r--piwik/plugins/UserCountry/Controller.php205
-rw-r--r--piwik/plugins/UserCountry/Diagnostic/GeolocationDiagnostic.php12
-rwxr-xr-xpiwik/plugins/UserCountry/GeoIPAutoUpdater.php11
-rwxr-xr-xpiwik/plugins/UserCountry/LocationProvider.php47
-rwxr-xr-xpiwik/plugins/UserCountry/LocationProvider/GeoIp.php6
-rwxr-xr-xpiwik/plugins/UserCountry/LocationProvider/GeoIp/Pecl.php4
-rwxr-xr-xpiwik/plugins/UserCountry/LocationProvider/GeoIp/Php.php15
-rwxr-xr-xpiwik/plugins/UserCountry/LocationProvider/GeoIp/ServerBased.php4
-rw-r--r--piwik/plugins/UserCountry/UserCountry.php1
-rw-r--r--piwik/plugins/UserCountry/VisitorDetails.php6
-rw-r--r--piwik/plugins/UserCountry/angularjs/location-provider-updater/location-provider-updater.controller.js10
-rw-r--r--piwik/plugins/UserCountry/functions.php34
-rw-r--r--piwik/plugins/UserCountry/lang/da.json5
-rw-r--r--piwik/plugins/UserCountry/lang/en.json1
-rw-r--r--piwik/plugins/UserCountry/lang/sq.json2
-rwxr-xr-xpiwik/plugins/UserCountry/templates/_updaterManage.twig2
-rwxr-xr-xpiwik/plugins/UserCountry/templates/adminIndex.twig36
-rwxr-xr-xpiwik/plugins/UserCountry/templates/getGeoIpUpdaterManageScreen.twig1
-rw-r--r--piwik/plugins/UserCountryMap/Controller.php4
-rw-r--r--piwik/plugins/UserCountryMap/javascripts/realtime-map.js17
-rw-r--r--piwik/plugins/UserCountryMap/lang/da.json4
-rw-r--r--piwik/plugins/UserId/lang/da.json4
-rw-r--r--piwik/plugins/UserLanguage/lang/da.json4
-rw-r--r--piwik/plugins/UsersManager/lang/da.json14
-rw-r--r--piwik/plugins/UsersManager/lang/sq.json2
-rw-r--r--piwik/plugins/VisitTime/lang/de.json2
-rw-r--r--piwik/plugins/Widgetize/lang/da.json2
-rw-r--r--piwik/vendor/autoload.php2
-rw-r--r--piwik/vendor/composer/autoload_classmap.php144
-rw-r--r--piwik/vendor/composer/autoload_psr4.php5
-rw-r--r--piwik/vendor/composer/autoload_real.php14
-rw-r--r--piwik/vendor/composer/autoload_static.php184
-rw-r--r--piwik/vendor/composer/ca-bundle/LICENSE19
-rw-r--r--piwik/vendor/composer/ca-bundle/README.md85
-rw-r--r--piwik/vendor/composer/ca-bundle/composer.json54
-rw-r--r--piwik/vendor/composer/ca-bundle/res/cacert.pem3338
-rw-r--r--piwik/vendor/composer/ca-bundle/src/CaBundle.php308
-rw-r--r--piwik/vendor/composer/installed.json236
-rw-r--r--piwik/vendor/geoip2/geoip2/CHANGELOG.md257
-rw-r--r--piwik/vendor/geoip2/geoip2/LICENSE202
-rw-r--r--piwik/vendor/geoip2/geoip2/README.md401
-rw-r--r--piwik/vendor/geoip2/geoip2/composer.json31
-rw-r--r--piwik/vendor/geoip2/geoip2/src/Database/Reader.php283
-rw-r--r--piwik/vendor/geoip2/geoip2/src/Exception/AddressNotFoundException.php10
-rw-r--r--piwik/vendor/geoip2/geoip2/src/Exception/AuthenticationException.php10
-rw-r--r--piwik/vendor/geoip2/geoip2/src/Exception/GeoIp2Exception.php10
-rw-r--r--piwik/vendor/geoip2/geoip2/src/Exception/HttpException.php24
-rw-r--r--piwik/vendor/geoip2/geoip2/src/Exception/InvalidRequestException.php26
-rw-r--r--piwik/vendor/geoip2/geoip2/src/Exception/OutOfQueriesException.php10
-rw-r--r--piwik/vendor/geoip2/geoip2/src/Model/AbstractModel.php67
-rw-r--r--piwik/vendor/geoip2/geoip2/src/Model/AnonymousIp.php46
-rw-r--r--piwik/vendor/geoip2/geoip2/src/Model/Asn.php35
-rw-r--r--piwik/vendor/geoip2/geoip2/src/Model/City.php133
-rw-r--r--piwik/vendor/geoip2/geoip2/src/Model/ConnectionType.php31
-rw-r--r--piwik/vendor/geoip2/geoip2/src/Model/Country.php71
-rw-r--r--piwik/vendor/geoip2/geoip2/src/Model/Domain.php31
-rw-r--r--piwik/vendor/geoip2/geoip2/src/Model/Enterprise.php47
-rw-r--r--piwik/vendor/geoip2/geoip2/src/Model/Insights.php47
-rw-r--r--piwik/vendor/geoip2/geoip2/src/Model/Isp.php44
-rw-r--r--piwik/vendor/geoip2/geoip2/src/ProviderInterface.php20
-rw-r--r--piwik/vendor/geoip2/geoip2/src/Record/AbstractPlaceRecord.php66
-rw-r--r--piwik/vendor/geoip2/geoip2/src/Record/AbstractRecord.php61
-rw-r--r--piwik/vendor/geoip2/geoip2/src/Record/City.php29
-rw-r--r--piwik/vendor/geoip2/geoip2/src/Record/Continent.php32
-rw-r--r--piwik/vendor/geoip2/geoip2/src/Record/Country.php41
-rw-r--r--piwik/vendor/geoip2/geoip2/src/Record/Location.php52
-rw-r--r--piwik/vendor/geoip2/geoip2/src/Record/MaxMind.php19
-rw-r--r--piwik/vendor/geoip2/geoip2/src/Record/Postal.php26
-rw-r--r--piwik/vendor/geoip2/geoip2/src/Record/RepresentedCountry.php39
-rw-r--r--piwik/vendor/geoip2/geoip2/src/Record/Subdivision.php40
-rw-r--r--piwik/vendor/geoip2/geoip2/src/Record/Traits.php114
-rw-r--r--piwik/vendor/geoip2/geoip2/src/WebService/Client.php239
-rw-r--r--piwik/vendor/maxmind-db/reader/CHANGELOG.md121
-rw-r--r--piwik/vendor/maxmind-db/reader/LICENSE202
-rw-r--r--piwik/vendor/maxmind-db/reader/README.md156
-rw-r--r--piwik/vendor/maxmind-db/reader/autoload.php44
-rw-r--r--piwik/vendor/maxmind-db/reader/composer.json34
-rw-r--r--piwik/vendor/maxmind-db/reader/ext/config.m419
-rw-r--r--piwik/vendor/maxmind-db/reader/ext/maxminddb.c564
-rw-r--r--piwik/vendor/maxmind-db/reader/ext/php_maxminddb.h24
-rw-r--r--piwik/vendor/maxmind-db/reader/src/MaxMind/Db/Reader.php309
-rw-r--r--piwik/vendor/maxmind-db/reader/src/MaxMind/Db/Reader/Decoder.php311
-rw-r--r--piwik/vendor/maxmind-db/reader/src/MaxMind/Db/Reader/InvalidDatabaseException.php10
-rw-r--r--piwik/vendor/maxmind-db/reader/src/MaxMind/Db/Reader/Metadata.php69
-rw-r--r--piwik/vendor/maxmind-db/reader/src/MaxMind/Db/Reader/Util.php26
-rw-r--r--piwik/vendor/maxmind/web-service-common/CHANGELOG.md79
-rw-r--r--piwik/vendor/maxmind/web-service-common/LICENSE202
-rw-r--r--piwik/vendor/maxmind/web-service-common/README.md26
-rw-r--r--piwik/vendor/maxmind/web-service-common/composer.json31
-rwxr-xr-xpiwik/vendor/maxmind/web-service-common/dev-bin/release.sh60
-rw-r--r--piwik/vendor/maxmind/web-service-common/src/Exception/AuthenticationException.php10
-rw-r--r--piwik/vendor/maxmind/web-service-common/src/Exception/HttpException.php40
-rw-r--r--piwik/vendor/maxmind/web-service-common/src/Exception/InsufficientFundsException.php10
-rw-r--r--piwik/vendor/maxmind/web-service-common/src/Exception/InvalidInputException.php12
-rw-r--r--piwik/vendor/maxmind/web-service-common/src/Exception/InvalidRequestException.php37
-rw-r--r--piwik/vendor/maxmind/web-service-common/src/Exception/IpAddressNotFoundException.php7
-rw-r--r--piwik/vendor/maxmind/web-service-common/src/Exception/PermissionRequiredException.php10
-rw-r--r--piwik/vendor/maxmind/web-service-common/src/Exception/WebServiceException.php10
-rw-r--r--piwik/vendor/maxmind/web-service-common/src/WebService/Client.php472
-rw-r--r--piwik/vendor/maxmind/web-service-common/src/WebService/Http/CurlRequest.php110
-rw-r--r--piwik/vendor/maxmind/web-service-common/src/WebService/Http/Request.php29
-rw-r--r--piwik/vendor/maxmind/web-service-common/src/WebService/Http/RequestFactory.php26
-rw-r--r--piwik/vendor/php-di/php-di/benchmarks/DI/ContainerBench.php70
-rw-r--r--piwik/vendor/php-di/php-di/change-log.md24
-rw-r--r--piwik/vendor/php-di/php-di/composer.json1
-rw-r--r--piwik/vendor/php-di/php-di/phpbench.json3
-rw-r--r--piwik/vendor/php-di/php-di/src/DI/Container.php26
-rw-r--r--piwik/vendor/php-di/php-di/src/DI/Definition/Resolver/DecoratorResolver.php2
402 files changed, 29471 insertions, 4484 deletions
diff --git a/piwik/CHANGELOG.md b/piwik/CHANGELOG.md
index 3c8c487..0d1b266 100644
--- a/piwik/CHANGELOG.md
+++ b/piwik/CHANGELOG.md
@@ -4,6 +4,21 @@ This is the Developer Changelog for Matomo platform developers. All changes in o
The Product Changelog at **[matomo.org/changelog](https://matomo.org/changelog)** lets you see more details about any Matomo release, such as the list of new guides and FAQs, security fixes, and links to all closed issues.
+## Matomo 3.5.0
+
+### Breaking Changes
+
+* Flattened action url reports now always include a leading `/` and will no longer include the `default_action_name`. e.g. `path/to/index` will now be `/path/to/`. This might affect configured custom alerts, as this plugin uses the flattened url reports for comparison.
+
+### New APIs
+
+* New JavaScript tracker functions to [ask for consent](https://developer.matomo.org/guides/tracking-javascript-guide#asking-for-consent): `requireConsent`, `rememberConsentGiven`, `setConsentGiven`, `forgetConsentGiven`.
+* New events `PrivacyManager.deleteLogsOlderThan`, `PrivacyManager.exportDataSubjects` and `PrivacyManager.deleteDataSubjects` to enable plugins to be GDPR compliant.
+* New event `AssetManager.addStylesheets` to add additional less styles which are not located in a file.
+* New event `Archiving.getIdSitesToMarkArchivesAsInvalidated` that lets plugins customize the behaviour of report invalidations.
+* Reports and visualizations can now disable the 'all' rows limit selector: `$view->config->disable_all_rows_filter_limit`.
+* New settings form field UI component "Multi Tuple" that lets users enter multiple values for one setting
+
## Matomo 3.4.0
### Breaking Changes
diff --git a/piwik/LEGALNOTICE b/piwik/LEGALNOTICE
index f2a8bda..6135c0a 100644
--- a/piwik/LEGALNOTICE
+++ b/piwik/LEGALNOTICE
@@ -270,11 +270,11 @@ THIRD-PARTY CONTENT
License: GPL
By: Alessandro Rei - http://www.kde-look.org/usermanager/search.php?username=mentalrey
- Name: Material icons ("icon-info2", "icon-outline", "icon-settings", "icon-form", "icon-play", "icon-pause", "icon-replay", "icon-skip-next", "icon-skip-forward", "icon-stop", "icon-fast-forward", "icon-fast-rewind") in plugins/Morpheus/fonts
+ Name: Material icons ("icon-info2", "icon-outline", "icon-settings", "icon-form", "icon-play", "icon-pause", "icon-replay", "icon-skip-next", "icon-skip-forward", "icon-stop", "icon-fast-forward", "icon-fast-rewind", "icon-bug", "icon-upload") in plugins/Morpheus/fonts
Link: https://design.google.com/icons/
License: Apache License Version 2.0
- Name: IcoMoon - Free icons ("icon-funnel", "icon-lab", "icon-archive") in plugins/Morpheus/fonts
+ Name: IcoMoon - Free icons ("icon-funnel", "icon-lab", "icon-archive", "icon-rocket", "icon-embed") in plugins/Morpheus/fonts
Link: https://icomoon.io/#icons-icomoon
License: GPL
diff --git a/piwik/composer.json b/piwik/composer.json
index 6121e1a..dfef0d8 100644
--- a/piwik/composer.json
+++ b/piwik/composer.json
@@ -46,7 +46,8 @@
"tecnickcom/tcpdf": "~6.0",
"piwik/piwik-php-tracker": "^1.0",
"composer/semver": "~1.3.0",
- "szymach/c-pchart": "^2.0"
+ "szymach/c-pchart": "^2.0",
+ "geoip2/geoip2": "^2.8"
},
"require-dev": {
"aws/aws-sdk-php": "2.7.1",
diff --git a/piwik/composer.lock b/piwik/composer.lock
index 528dfe4..710e23c 100644
--- a/piwik/composer.lock
+++ b/piwik/composer.lock
@@ -1,12 +1,68 @@
{
"_readme": [
"This file locks the dependencies of your project to a known state",
- "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
+ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "09fe6cb3a6b305cd0013ee7cb97e4635",
+ "content-hash": "ed95573aa1d50a430cc55428d46160b6",
"packages": [
{
+ "name": "composer/ca-bundle",
+ "version": "1.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/composer/ca-bundle.git",
+ "reference": "d2c0a83b7533d6912e8d516756ebd34f893e9169"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/composer/ca-bundle/zipball/d2c0a83b7533d6912e8d516756ebd34f893e9169",
+ "reference": "d2c0a83b7533d6912e8d516756ebd34f893e9169",
+ "shasum": ""
+ },
+ "require": {
+ "ext-openssl": "*",
+ "ext-pcre": "*",
+ "php": "^5.3.2 || ^7.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5",
+ "psr/log": "^1.0",
+ "symfony/process": "^2.5 || ^3.0 || ^4.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Composer\\CaBundle\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "http://seld.be"
+ }
+ ],
+ "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.",
+ "keywords": [
+ "cabundle",
+ "cacert",
+ "certificate",
+ "ssl",
+ "tls"
+ ],
+ "time": "2018-03-29T19:57:20+00:00"
+ },
+ {
"name": "composer/semver",
"version": "1.3.0",
"source": {
@@ -170,6 +226,59 @@
"time": "2016-10-29T11:16:17+00:00"
},
{
+ "name": "geoip2/geoip2",
+ "version": "v2.8.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/maxmind/GeoIP2-php.git",
+ "reference": "63b0d87d47ee8c9431bff70244401db5ced82bd9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/maxmind/GeoIP2-php/zipball/63b0d87d47ee8c9431bff70244401db5ced82bd9",
+ "reference": "63b0d87d47ee8c9431bff70244401db5ced82bd9",
+ "shasum": ""
+ },
+ "require": {
+ "maxmind-db/reader": "~1.0",
+ "maxmind/web-service-common": "~0.4",
+ "php": ">=5.4"
+ },
+ "require-dev": {
+ "apigen/apigen": "*",
+ "friendsofphp/php-cs-fixer": "2.*",
+ "phpunit/phpunit": "4.*",
+ "squizlabs/php_codesniffer": "3.*"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "GeoIp2\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "Apache-2.0"
+ ],
+ "authors": [
+ {
+ "name": "Gregory J. Oschwald",
+ "email": "goschwald@maxmind.com",
+ "homepage": "http://www.maxmind.com/"
+ }
+ ],
+ "description": "MaxMind GeoIP2 PHP API",
+ "homepage": "https://github.com/maxmind/GeoIP2-php",
+ "keywords": [
+ "IP",
+ "geoip",
+ "geoip2",
+ "geolocation",
+ "maxmind"
+ ],
+ "time": "2018-01-18T21:30:24+00:00"
+ },
+ {
"name": "leafo/lessphp",
"version": "v0.5.0",
"source": {
@@ -261,6 +370,108 @@
"time": "2018-02-20T14:04:26+00:00"
},
{
+ "name": "maxmind-db/reader",
+ "version": "v1.3.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/maxmind/MaxMind-DB-Reader-php.git",
+ "reference": "e042b4f8a2dff41e19019faf16427178b07fbd58"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/maxmind/MaxMind-DB-Reader-php/zipball/e042b4f8a2dff41e19019faf16427178b07fbd58",
+ "reference": "e042b4f8a2dff41e19019faf16427178b07fbd58",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.4"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "2.*",
+ "phpunit/phpunit": "4.* || 5.*",
+ "satooshi/php-coveralls": "1.0.*",
+ "squizlabs/php_codesniffer": "3.*"
+ },
+ "suggest": {
+ "ext-bcmath": "bcmath or gmp is required for decoding larger integers with the pure PHP decoder",
+ "ext-gmp": "bcmath or gmp is required for decoding larger integers with the pure PHP decoder",
+ "ext-maxminddb": "A C-based database decoder that provides significantly faster lookups"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "MaxMind\\Db\\": "src/MaxMind/Db"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "Apache-2.0"
+ ],
+ "authors": [
+ {
+ "name": "Gregory J. Oschwald",
+ "email": "goschwald@maxmind.com",
+ "homepage": "http://www.maxmind.com/"
+ }
+ ],
+ "description": "MaxMind DB Reader API",
+ "homepage": "https://github.com/maxmind/MaxMind-DB-Reader-php",
+ "keywords": [
+ "database",
+ "geoip",
+ "geoip2",
+ "geolocation",
+ "maxmind"
+ ],
+ "time": "2018-02-21T21:23:33+00:00"
+ },
+ {
+ "name": "maxmind/web-service-common",
+ "version": "v0.5.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/maxmind/web-service-common-php.git",
+ "reference": "61a9836fa3bb1743ab89752bae5005d71e78c73b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/maxmind/web-service-common-php/zipball/61a9836fa3bb1743ab89752bae5005d71e78c73b",
+ "reference": "61a9836fa3bb1743ab89752bae5005d71e78c73b",
+ "shasum": ""
+ },
+ "require": {
+ "composer/ca-bundle": "^1.0.3",
+ "ext-curl": "*",
+ "ext-json": "*",
+ "php": ">=5.4"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "2.*",
+ "phpunit/phpunit": "4.*",
+ "squizlabs/php_codesniffer": "3.*"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "MaxMind\\Exception\\": "src/Exception",
+ "MaxMind\\WebService\\": "src/WebService"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "Apache-2.0"
+ ],
+ "authors": [
+ {
+ "name": "Gregory Oschwald",
+ "email": "goschwald@maxmind.com"
+ }
+ ],
+ "description": "Internal MaxMind Web Service API",
+ "homepage": "https://github.com/maxmind/web-service-common-php",
+ "time": "2018-02-12T22:31:54+00:00"
+ },
+ {
"name": "monolog/monolog",
"version": "1.22.1",
"source": {
@@ -642,16 +853,16 @@
},
{
"name": "php-di/php-di",
- "version": "5.4.3",
+ "version": "5.4.6",
"source": {
"type": "git",
"url": "https://github.com/PHP-DI/PHP-DI.git",
- "reference": "8ecded470bb0255c93f2996f78bb3b644c06599a"
+ "reference": "3f9255659595f3e289f473778bb6c51aa72abbbd"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PHP-DI/PHP-DI/zipball/8ecded470bb0255c93f2996f78bb3b644c06599a",
- "reference": "8ecded470bb0255c93f2996f78bb3b644c06599a",
+ "url": "https://api.github.com/repos/PHP-DI/PHP-DI/zipball/3f9255659595f3e289f473778bb6c51aa72abbbd",
+ "reference": "3f9255659595f3e289f473778bb6c51aa72abbbd",
"shasum": ""
},
"require": {
@@ -673,6 +884,7 @@
"doctrine/cache": "~1.4",
"mnapoli/phpunit-easymock": "~0.2.0",
"ocramius/proxy-manager": "~1.0|~2.0",
+ "phpbench/phpbench": "@dev",
"phpunit/phpunit": "~4.5"
},
"suggest": {
@@ -700,7 +912,7 @@
"dependency injection",
"di"
],
- "time": "2017-04-11T19:42:20+00:00"
+ "time": "2017-12-03T08:20:27+00:00"
},
{
"name": "php-di/phpdoc-reader",
@@ -970,12 +1182,12 @@
],
"authors": [
{
- "name": "The Matomo Team",
+ "name": "The Piwik Team",
"email": "hello@piwik.org",
"homepage": "http://piwik.org/the-piwik-team/"
}
],
- "description": "PHP Client for Matomo Analytics Tracking API",
+ "description": "PHP Client for Piwik Analytics Tracking API",
"homepage": "http://piwik.org",
"keywords": [
"analytics",
@@ -1642,7 +1854,7 @@
"performance",
"profiling"
],
- "time": "2015-02-26 14:37:51"
+ "time": "2015-02-26T14:37:51+00:00"
},
{
"name": "guzzle/guzzle",
diff --git a/piwik/config/global.ini.php b/piwik/config/global.ini.php
index c6e26ef..e48bfd6 100644
--- a/piwik/config/global.ini.php
+++ b/piwik/config/global.ini.php
@@ -21,6 +21,25 @@ port = 3306
adapter = PDO\MYSQL
type = InnoDB
schema = Mysql
+
+; Database SSL Options START
+; Turn on or off SSL connection to database, possible values for enable_ssl: 1 or 0
+enable_ssl = 0
+; Direct path to server CA file, CA bundle supported (required for ssl connection)
+ssl_ca =
+; Direct path to client cert file (optional)
+ssl_cert =
+; Direct path to client key file (optional)
+ssl_key =
+; Direct path to CA cert files directory (optional)
+ssl_ca_path =
+; List of one or more ciphers for SSL encryption, in OpenSSL format (optional)
+ssl_cipher =
+; Whether to skip verification of self signed certificates (optional, only supported
+; w/ specific PHP versions, and is mostly for testing purposes)
+ssl_no_verify =
+; Database SSL Options END
+
; if charset is set to utf8, Matomo will ensure that it is storing its data using UTF8 charset.
; it will add a sql query SET at each page view.
; Matomo should work correctly without this setting but we recommend to have a charset set.
@@ -37,6 +56,13 @@ adapter = PDO\MYSQL
type = InnoDB
schema = Mysql
charset = utf8
+enable_ssl = 0
+ssl_ca =
+ssl_cert =
+ssl_key =
+ssl_ca_path =
+ssl_cipher =
+ssl_no_verify = 1
[tests]
; needed in order to run tests.
@@ -442,7 +468,7 @@ datatable_archiving_maximum_rows_subtable_actions = 100
; maximum number of rows for any of the Events tables (Categories, Actions, Names)
datatable_archiving_maximum_rows_events = 500
; maximum number of rows for sub-tables of the Events tables (eg. for the subtables Categories>Actions or Categories>Names).
-datatable_archiving_maximum_rows_subtable_events = 100
+datatable_archiving_maximum_rows_subtable_events = 500
; maximum number of rows for other tables (Providers, User settings configurations)
datatable_archiving_maximum_rows_standard = 500
@@ -847,6 +873,7 @@ Plugins[] = Ecommerce
Plugins[] = SEO
Plugins[] = Events
Plugins[] = UserCountry
+Plugins[] = GeoIp2
Plugins[] = VisitsSummary
Plugins[] = VisitFrequency
Plugins[] = VisitTime
@@ -903,4 +930,3 @@ SDK_batch_size = 10
SDK_interval_value = 30
; NOTE: do not directly edit this file! See notice at the top
-
diff --git a/piwik/config/global.php b/piwik/config/global.php
index e50e239..ca25ead 100644
--- a/piwik/config/global.php
+++ b/piwik/config/global.php
@@ -94,6 +94,8 @@ return array(
'config/manifest.inc.php',
'misc/*.dat',
'misc/*.dat.gz',
+ 'misc/*.mmdb',
+ 'misc/*.mmdb.gz',
'misc/*.bin',
'misc/user/*png',
'misc/user/*js',
diff --git a/piwik/config/manifest.inc.php b/piwik/config/manifest.inc.php
index ecdb611..5fd36e2 100644
--- a/piwik/config/manifest.inc.php
+++ b/piwik/config/manifest.inc.php
@@ -4,21 +4,21 @@ namespace Piwik;
class Manifest {
static $files=array(
"bower.json" => array("998", "da2c0d740c89260d170343048cbc55ee"),
- "CHANGELOG.md" => array("62158", "f5248adfe35f3b34157326c80f6eb8ea"),
- "composer.json" => array("3652", "716fb8d9433f24ddb9fdca8424e66829"),
- "composer.lock" => array("106410", "26b42bdb8ac9af134642ffe09fcfea3c"),
+ "CHANGELOG.md" => array("63339", "a896d11fe0dcd2fbfafb6c672a94b1c5"),
+ "composer.json" => array("3685", "c68150adff63247ec59de2a23430bd53"),
+ "composer.lock" => array("114213", "4f948ea6c40c96fb3715b2a92de1e86b"),
"config/environment/dev.php" => array("416", "27239ab7df09b6997d1503a58fd5f0bf"),
"config/environment/test.php" => array("4195", "920dfa116f70811a9babb54fa61529cd"),
"config/environment/ui-test.php" => array("2364", "a4c82085fd63c8ff5f3bc7af2b4b5fdd"),
- "config/global.ini.php" => array("44599", "f8dea118751610530944567fb8f36f3b"),
- "config/global.php" => array("5577", "d4cce09ccb43f300438e0c40f3d25fa0"),
+ "config/global.ini.php" => array("45389", "8f9a91c4b8fb147364673e4295fb895b"),
+ "config/global.php" => array("5626", "aa48a1790eb93829f874ba8b25262d99"),
"console" => array("689", "b89a89288416184c6fc76e029d746211"),
"CONTRIBUTING.md" => array("928", "865f8f4414c6a94c01625571368d4fa6"),
"core/Access.php" => array("14333", "baca43ba3d1e8b6d0b03cbd641101201"),
"core/API/ApiRenderer.php" => array("3826", "6356acb2476b40b810ff993cc1a3b43b"),
"core/API/CORSHandler.php" => array("978", "dbe53dfe241ef9a3c40cd30f1a0112d5"),
"core/API/DataTableGenericFilter.php" => array("7101", "db930a39de2e38ff50aeca8e206fadfb"),
- "core/API/DataTableManipulator/Flattener.php" => array("4504", "d8de910da1d88408a83c1c5d5012767b"),
+ "core/API/DataTableManipulator/Flattener.php" => array("4539", "c2361d1c45c77190c8d41b6aff57a1cd"),
"core/API/DataTableManipulator/LabelFilter.php" => array("6048", "7a5554ef49ffee709082231f0fccef50"),
"core/API/DataTableManipulator.php" => array("7034", "b9c385c51ddc8896a6d9bc8e3fb8791e"),
"core/API/DataTableManipulator/ReportTotalsCalculator.php" => array("7851", "72fe169c5377fc42ebd67682fcbaf32b"),
@@ -34,7 +34,7 @@ class Manifest {
"core/Application/Kernel/GlobalSettingsProvider.php" => array("2841", "5906966232aa0b97b2d95515e4781ecd"),
"core/Application/Kernel/PluginList.php" => array("6387", "9dd42e52fbaef8701a047ad9d7c679d5"),
"core/Archive/ArchiveInvalidator/InvalidationResult.php" => array("1485", "8eebf5cac5846e865d8ea9b52e6ddabe"),
- "core/Archive/ArchiveInvalidator.php" => array("10512", "ed335369b9aad39d660d9a2180be8ef7"),
+ "core/Archive/ArchiveInvalidator.php" => array("13578", "01647a42662a0166d8b5767b03837b41"),
"core/Archive/ArchivePurger.php" => array("9620", "038dc88337663e38f0d529a85f8371d2"),
"core/Archive/ArchiveQueryFactory.php" => array("4500", "22fb534457fee91f6d4d6267924aac44"),
"core/Archive/ArchiveQuery.php" => array("1130", "1d251132633e772bcb2b3db9e848b199"),
@@ -60,7 +60,7 @@ class Manifest {
"core/AssetManager/UIAsset/InMemoryUIAsset.php" => array("1093", "09d2f65d9226e7a05d975678d34831bb"),
"core/AssetManager/UIAssetMerger/JScriptUIAssetMerger.php" => array("2407", "9af3d4bc649c6af5d3fb1fb0f42d8372"),
"core/AssetManager/UIAssetMerger.php" => array("4180", "fcde84f52bf01ea90711e613d607b7a0"),
- "core/AssetManager/UIAssetMerger/StylesheetUIAssetMerger.php" => array("6796", "bca2adb08c313f7b9612f4498db1c271"),
+ "core/AssetManager/UIAssetMerger/StylesheetUIAssetMerger.php" => array("7295", "48a51b86dab466a074139a94c1663cc4"),
"core/AssetManager/UIAssetMinifier.php" => array("1736", "57bb3ed31f2c5317ab39c7d73c0ee27a"),
"core/AssetManager/UIAsset/OnDiskUIAsset.php" => array("2709", "1dc6a4a6e6956366250adbb05b9c1124"),
"core/AssetManager/UIAsset.php" => array("1202", "1aa6935c82b4bf06c7973898adc18311"),
@@ -75,7 +75,7 @@ class Manifest {
"core/Category/Subcategory.php" => array("4032", "d31bf7d2592000aea6de8ad80bdc8b2a"),
"core/CliMulti/CliPhp.php" => array("2415", "28100e5127c4270a433af26cf2588f88"),
"core/CliMulti/Output.php" => array("1365", "3d6f4f6607f87c0d13f316d14665eb87"),
- "core/CliMulti.php" => array("10887", "8a53fef217addb2e2b20e1f3b3222380"),
+ "core/CliMulti.php" => array("12457", "de424c2cedb2f262b0976d01aa95a4bc"),
"core/CliMulti/Process.php" => array("6286", "5836dcfd9588e8babcc7256abf5bdbbb"),
"core/CliMulti/RequestCommand.php" => array("3629", "65e6f8fca36a7f6d9f3a4763733f784a"),
"core/Columns/ComputedMetricFactory.php" => array("1349", "59b1c19dea4bb0fd3c5d6f3f150a65b3"),
@@ -89,7 +89,7 @@ class Manifest {
"core/Columns/Join/SiteNameJoin.php" => array("392", "5661533c474ff43da3c976ba14a66304"),
"core/Columns/MetricsList.php" => array("5592", "ae552f9d4846ac7d0fd07737c8fd2dbf"),
"core/Columns/Updater.php" => array("15391", "c5f6b79d8e2c351b04e439e4cfdc18bd"),
- "core/Common.php" => array("42080", "40197653098f1759b77ba0ecc40bbc3b"),
+ "core/Common.php" => array("42382", "d7da00d2562f14788bc94c6a2be7ca42"),
"core/Composer/ScriptHandler.php" => array("1069", "3c232a235313a3952f3be1c8e7adf9a8"),
"core/Concurrency/DistributedList.php" => array("4259", "5b26014730d1e9f6cb2c84eaf7d38b0c"),
"core/Config/ConfigNotFoundException.php" => array("296", "3de0a882212918def5458e2ba8406deb"),
@@ -103,9 +103,9 @@ class Manifest {
"core/Context.php" => array("2864", "bf98004320ea0bf9c80fdd1f35c9318e"),
"core/Cookie.php" => array("11461", "8c5d82bf265801980d9f6713a63834f7"),
"core/CronArchive/FixedSiteIds.php" => array("1298", "f9ab6a9bfbf3bea984b7d60d38bd4945"),
- "core/CronArchive.php" => array("65348", "7516a527bde475e20853affcd152b61c"),
+ "core/CronArchive.php" => array("69667", "899ee2adfc9d9512336926318c4ae3e2"),
"core/CronArchive/SegmentArchivingRequestUrlProvider.php" => array("7977", "7e997c70128bbb29606f2d647dd8c516"),
- "core/CronArchive/SharedSiteIds.php" => array("4833", "8e99eb0b10dcd809a4a3d3d39f830d55"),
+ "core/CronArchive/SharedSiteIds.php" => array("5615", "6a2870f359cafa166c35b564d0ab11d3"),
"core/CronArchive/SitesToReprocessDistributedList.php" => array("1015", "ed72a0aecc63d1a7fadbf689da9eff34"),
"core/DataAccess/Actions.php" => array("730", "6a573f3c38217812f0fa321bd58a033b"),
"core/DataAccess/ArchiveSelector.php" => array("13856", "c588db05034f5e4bafa4da4c18d6bbe1"),
@@ -178,16 +178,16 @@ class Manifest {
"core/DataTable/TableNotFoundException.php" => array("236", "d20b1cd593341976965ff239e1d20f07"),
"core/Date.php" => array("30990", "3cbe6164f7979785bdb26f8a7cedc0a4"),
"core/Db/AdapterInterface.php" => array("1376", "b76e32c114c3be1b72da40ac5fdeaa5b"),
- "core/Db/Adapter/Mysqli.php" => array("4963", "0fb6c276285e2e9c3e2c12a76aa137d0"),
+ "core/Db/Adapter/Mysqli.php" => array("6332", "45ecd26c82571ef6c1060668e5241003"),
"core/Db/Adapter/Pdo/Mssql.php" => array("7537", "6dbd56dc5ca816e5ed253b2cb217691b"),
- "core/Db/Adapter/Pdo/Mysql.php" => array("7051", "8705c4d332e861d842fc2a9db9542a21"),
+ "core/Db/Adapter/Pdo/Mysql.php" => array("8573", "b790c74796e7393675de07c9310d0326"),
"core/Db/Adapter/Pdo/Pgsql.php" => array("4717", "afae9926296e42cb6602f22476b93985"),
"core/Db/Adapter.php" => array("3524", "6f4a12cff1e31273130b9098a4fcfbb4"),
- "core/Db/BatchInsert.php" => array("9641", "25eb92922665ad10d3b149440cfca0d9"),
+ "core/Db/BatchInsert.php" => array("10076", "2af70c0aff27e7a466964476e93d8c4b"),
"core/DbHelper.php" => array("5301", "5108c5c1988861d8c3d4b67cf8ecbd09"),
"core/Db.php" => array("27149", "55c0cf6ebb16c7c744abc74fe8fb114f"),
"core/Db/SchemaInterface.php" => array("2201", "1ecdac30e16334d5b777fac696b03d8a"),
- "core/Db/Schema/Mysql.php" => array("21527", "3978b7c881d828fe78aa881163306335"),
+ "core/Db/Schema/Mysql.php" => array("21684", "8858739b97d2f6fa92ab0c1fa233342c"),
"core/Db/Schema.php" => array("4457", "e57fd807adc994ad227b6009ef3a64de"),
"core/Db/Settings.php" => array("803", "2d50ee3e267f89e10f8fe014cdfa8102"),
"core/Development.php" => array("6648", "73aea90822fb126781d480cae708e415"),
@@ -235,7 +235,7 @@ class Manifest {
"core/Measurable/Type.php" => array("1319", "098a884c903740140e1fad74d795c92b"),
"core/Measurable/Type/TypeManager.php" => array("1213", "cd37d70587100cc1dcd7f67a3b3eed68"),
"core/Menu/Group.php" => array("531", "1d168fb585879fe2067f42948658700b"),
- "core/Menu/MenuAbstract.php" => array("11098", "6cf79a8838e30b7f1753d0f31cf75990"),
+ "core/Menu/MenuAbstract.php" => array("11605", "aaaa93182805ef1639917b852102a7e0"),
"core/Menu/MenuAdmin.php" => array("3656", "b1ef5cae5375e673cbdd4ee16e5e5fd4"),
"core/Menu/MenuTop.php" => array("1836", "54769cd1a4b6a4f2cd699641069d676b"),
"core/Metrics/Formatter/Html.php" => array("1320", "e24b8efb23561b391dbfea737180ab69"),
@@ -248,7 +248,7 @@ class Manifest {
"core/Notification/Manager.php" => array("6105", "e55e1dcbde71c2cc07c175b6d6e1a8ff"),
"core/Notification.php" => array("5853", "3d974b7bd54a3a8361d3fe6ac41125e1"),
"core/NumberFormatter.php" => array("11211", "dbb836c9db476f29b9d4a19b1db8d68c"),
- "core/Option.php" => array("7006", "ca958d52506f8437c2990c876cb06e20"),
+ "core/Option.php" => array("7347", "cd757511eacd65e7324038fce2c0efe2"),
"core/Period/Day.php" => array("2194", "ad3c9ebff44b941b4d0ee9e9a3b319d0"),
"core/Period/Factory.php" => array("6120", "9cfb53b7afcbefbc4e275ff00be5a969"),
"core/Period/Month.php" => array("2989", "130dae73ac24f8f3ca9683f860d00c25"),
@@ -264,7 +264,7 @@ class Manifest {
"core/Plugin/Archiver.php" => array("4833", "29648b9b6ecf802cd8ba4cf9440d8f33"),
"core/Plugin/Categories.php" => array("2030", "557d0605eeecfb50e7d8767853f62dae"),
"core/Plugin/ComponentFactory.php" => array("5057", "5666dc9a7a366684967fe778e38ca9ca"),
- "core/Plugin/ComputedMetric.php" => array("8597", "c7bc0850535ac72b9cd93d071c08b5e8"),
+ "core/Plugin/ComputedMetric.php" => array("8717", "b5fac49eb7a1e4318f2fc91994a42e8f"),
"core/Plugin/ConsoleCommand.php" => array("1201", "c8db110e8b5834c43f36c616f06f9d97"),
"core/Plugin/ControllerAdmin.php" => array("14470", "5beb0da3304c1e6e32422933183bb2f4"),
"core/Plugin/Controller.php" => array("39287", "ea4e0081b7a474c5950b8a7dbaa06425"),
@@ -273,7 +273,7 @@ class Manifest {
"core/Plugin/Dimension/ConversionDimension.php" => array("4264", "4d391ffd3f71350278cc8dcd02f3c763"),
"core/Plugin/Dimension/DimensionMetadataProvider.php" => array("4203", "33d90679f6a48d6bf7e909ede737ac88"),
"core/Plugin/Dimension/VisitDimension.php" => array("12048", "3b9f3628dc87603e257765737531a1e6"),
- "core/Plugin/LogTablesProvider.php" => array("1547", "a932edfb5a90eda8716a3216a124a0b6"),
+ "core/Plugin/LogTablesProvider.php" => array("2408", "0ddf935191d21042535e41ccf6825a0c"),
"core/Plugin/Manager.php" => array("42937", "9acdcf2c83d39e81aef7670b98dbb6ef"),
"core/Plugin/Menu.php" => array("10035", "dab1a74670aec39107605a360bb428a1"),
"core/Plugin/MetadataLoader.php" => array("3835", "557e48e446a1e8cf3e5ee4ba538f83de"),
@@ -288,13 +288,13 @@ class Manifest {
"core/Plugin/Segment.php" => array("11039", "6dd380fca335d59bc870102d01eb3192"),
"core/Plugin/SettingsProvider.php" => array("7321", "b19c332ac574be18845e9de2b08137bb"),
"core/Plugin/Tasks.php" => array("5492", "545e000435fbf98641212f167ad9bc07"),
- "core/Plugin/ViewDataTable.php" => array("19251", "9a30b0752acec204fbc1d34a0c90da58"),
+ "core/Plugin/ViewDataTable.php" => array("19449", "00d279056f8964f7f4a166c96ac3be18"),
"core/Plugin/Visualization.php" => array("28644", "50d54dec29c7e093939544a84a8daccc"),
"core/Plugin/WidgetsProvider.php" => array("4654", "ecda01826c7f215d91bc1da65669f617"),
"core/ProfessionalServices/Advertising.php" => array("3452", "a64fc89729c4ffc381db77ee1a9f87f6"),
"core/Profiler.php" => array("11606", "8611862a1a376b47460e2b0f09c06e20"),
"core/ProxyHeaders.php" => array("2209", "3b4911643f8b324a9306478fabf9c7d1"),
- "core/ProxyHttp.php" => array("10896", "c841d4d64760e9cb5809a6108766661b"),
+ "core/ProxyHttp.php" => array("10894", "3f90944575ea880af9503483edb4db99"),
"core/QuickForm2.php" => array("4030", "67a7f96d3361e949f9af570cde78b443"),
"core/RankingQuery.php" => array("12916", "d14ae9f06763299a0f2c864879317f31"),
"core/Registry.php" => array("1246", "90d8f95d29909388b0bc4dcc9448a242"),
@@ -320,7 +320,8 @@ class Manifest {
"core/Session.php" => array("5531", "cb89e58ec3c358f582e03a7b184a0768"),
"core/Session/SaveHandler/DbTable.php" => array("3411", "5ecddc4b18a768d3d676fda9b76dc97f"),
"core/Session/SessionNamespace.php" => array("706", "97c6aecfc5fef6ab7e8719806806f538"),
- "core/Settings/FieldConfig.php" => array("7421", "28f12287e1364818a7351f41be26d6f8"),
+ "core/Settings/FieldConfig/MultiPair.php" => array("2671", "3f5d3c59e614c6d5bf74244ec3ab858c"),
+ "core/Settings/FieldConfig.php" => array("8283", "10a22491210534f4f5bde51a0215120b"),
"core/Settings/Measurable/MeasurableProperty.php" => array("2964", "2fa17b6ca3102beda7756d73ee7ac60b"),
"core/Settings/Measurable/MeasurableSetting.php" => array("2114", "27f1164fb4cc611b43b12ca3ca612705"),
"core/Settings/Measurable/MeasurableSettings.php" => array("4743", "88b66b44cf4c34cffd42558a2ac3add6"),
@@ -331,14 +332,14 @@ class Manifest {
"core/Settings/Plugin/UserSetting.php" => array("2104", "7df973d2f71b1ebe5047edcc9cf07c03"),
"core/Settings/Plugin/UserSettings.php" => array("3253", "2a401653893c29738a12a50c2a2503c9"),
"core/SettingsServer.php" => array("6420", "7e03f907aca733cd850395675ccad7e8"),
- "core/Settings/Setting.php" => array("9537", "caf31044a05685ed1294510198605ab3"),
+ "core/Settings/Setting.php" => array("9927", "c3511a307a535755945858fefec0e9d8"),
"core/Settings/Settings.php" => array("3050", "c72320dabe3cc83b145f0e72819dc1b8"),
"core/Settings/Storage/Backend/BackendInterface.php" => array("1483", "e2e17d335d4332d018470a4352b7a8cb"),
"core/Settings/Storage/Backend/Cache.php" => array("1657", "8e2fb145a638775f752d030c3920e6f4"),
"core/Settings/Storage/Backend/Config.php" => array("1560", "1fb8cb3895f3a9234c3cd8145531fd18"),
- "core/Settings/Storage/Backend/MeasurableSettingsTable.php" => array("4798", "cc3e41778e25e55f6e2a6498d5a27ac3"),
+ "core/Settings/Storage/Backend/MeasurableSettingsTable.php" => array("5889", "0c2ac8eab6d37fc7b9b42fd864e19a4a"),
"core/Settings/Storage/Backend/NullBackend.php" => array("821", "b937ce3ccdf823447e51f3bda674e43a"),
- "core/Settings/Storage/Backend/PluginSettingsTable.php" => array("5280", "b401c11782d1c488ee0bfa8e9614e92e"),
+ "core/Settings/Storage/Backend/PluginSettingsTable.php" => array("6388", "bec7c055a0b382708ee431b6b8deb422"),
"core/Settings/Storage/Backend/SitesTable.php" => array("3084", "de3791c12dc588c14ebd52c5c2f00c70"),
"core/Settings/Storage/Factory.php" => array("4411", "c3dc343e05f36ae771198f1f33e947f2"),
"core/Settings/Storage/Storage.php" => array("3239", "f7687c569c655dda099e359ab9af42f4"),
@@ -353,19 +354,19 @@ class Manifest {
"core/Tracker/Action.php" => array("11984", "ea08ce7ee6150b5bd07b27d9ef82594a"),
"core/Tracker/Cache.php" => array("6400", "c4e6fbe6ce99dbff965f30908c1d3d5d"),
"core/Tracker/Db/DbException.php" => array("275", "bc34a06d73b8485a34dba83a0995047e"),
- "core/Tracker/Db/Mysqli.php" => array("9485", "5562ef42d62b7227353f66bec5c6be82"),
- "core/Tracker/Db/Pdo/Mysql.php" => array("8627", "3049afad5fea103410b463bcb1629556"),
+ "core/Tracker/Db/Mysqli.php" => array("10856", "326ad5fa2be3120ef82f0315259fb56b"),
+ "core/Tracker/Db/Pdo/Mysql.php" => array("9680", "c265aeed2d474ed14b922af1ef4c3325"),
"core/Tracker/Db/Pdo/Pgsql.php" => array("3208", "d33fa635427c3ef2b8b62b10af735c8c"),
"core/Tracker/Db.php" => array("8682", "26fba1411555e123f4f1b1c954f0d6d2"),
- "core/Tracker/GoalManager.php" => array("31558", "b3179f7990144bcc22617f9464d6199d"),
+ "core/Tracker/GoalManager.php" => array("31883", "39c4cedc7f1d5f95a2ab19686b669398"),
"core/Tracker/Handler/Factory.php" => array("1340", "0bed98e2f1edebadedf6f11e8c83aaac"),
"core/Tracker/Handler.php" => array("2767", "98cf921a6b3f3cb7d17816a10473785b"),
"core/Tracker/IgnoreCookie.php" => array("1948", "6e3b8b7fc974724470d598ca3e16fbd1"),
- "core/Tracker/LogTable.php" => array("3277", "ec665c6a9c4c51bac6ba5a095655bbee"),
+ "core/Tracker/LogTable.php" => array("4028", "c2fafb6c6d42e605d210a8fa7c647a55"),
"core/Tracker/Model.php" => array("14979", "01264120211ed47d1b0d77a9401d01dd"),
"core/Tracker/PageUrl.php" => array("12620", "066de9df12eb6f4a15dab173ce4bb0aa"),
"core/Tracker.php" => array("10756", "8a8b84c4d181c85e33b12b3aad099dc6"),
- "core/Tracker/Request.php" => array("26060", "1acebb0705135d1b4a8325ff0916e9e3"),
+ "core/Tracker/Request.php" => array("27466", "5a6b0c4bf55b59b4444577e0e3c6e6c8"),
"core/Tracker/RequestProcessor.php" => array("7384", "bc43cdc2d74865c3e366f9fd974fad7d"),
"core/Tracker/RequestSet.php" => array("6293", "9e7fa289db8cd9af0de8d382d5c97293"),
"core/Tracker/Response.php" => array("5787", "a5bad3d63f48debdc89442bc78376f4a"),
@@ -373,7 +374,7 @@ class Manifest {
"core/Tracker/Settings.php" => array("4326", "d89ea776e9c610345592ac0a49414ffd"),
"core/Tracker/TableLogAction/Cache.php" => array("4075", "2a08dee9d8d8843c0103bf47298b3004"),
"core/Tracker/TableLogAction.php" => array("10331", "18a7fdf2eac03c3638df533799bb7a03"),
- "core/Tracker/TrackerCodeGenerator.php" => array("9237", "6b40cec31b6d143c8fcbe5d8b933d887"),
+ "core/Tracker/TrackerCodeGenerator.php" => array("9368", "5cf922574db87d3256e188885cc01411"),
"core/Tracker/TrackerConfig.php" => array("791", "60712345d7cc78af362d3f114ced2bfa"),
"core/Tracker/VisitExcluded.php" => array("10314", "aa51589a03b16e07f8db56cdddcd5472"),
"core/Tracker/Visit/Factory.php" => array("1441", "d26bc067d88ecf846cc6c159d3a14cb7"),
@@ -381,7 +382,7 @@ class Manifest {
"core/Tracker/VisitorNotFoundInDb.php" => array("240", "3f1ce6ea862903ea111db7bc74068ba2"),
"core/Tracker/Visitor.php" => array("1465", "0fdadbff85b57b51a81624ad801a825c"),
"core/Tracker/VisitorRecognizer.php" => array("10152", "0ff6782ba0d276b1240cc65bd698cdd0"),
- "core/Tracker/Visit.php" => array("19094", "72a7e545d069fd6a8020aeb8eea60687"),
+ "core/Tracker/Visit.php" => array("19095", "e878b1b039a4fa4777ea52421f718bcd"),
"core/Tracker/Visit/ReferrerSpamFilter.php" => array("2240", "60d0444fca2f7c2ec28b7a8f020f486f"),
"core/Tracker/Visit/VisitProperties.php" => array("1584", "ff6899b2d0678289cb183b5c6b9ad16a"),
"core/Translate.php" => array("3125", "c4190ed894e9afb6952365264bebbebc"),
@@ -530,22 +531,36 @@ class Manifest {
"core/Updates/2.7.0-b4.php" => array("587", "0209139d7bde416cf5b31b9fba6b6f2f"),
"core/Updates/2.9.0-b1.php" => array("3098", "5e68072cd3b615cae5f808af53c9eab6"),
"core/Updates/2.9.0-b7.php" => array("2068", "b1907d3fe06ecf7ebe3f791692900b07"),
- "core/Updates/3.0.0-b1.php" => array("17418", "fdad360a045a67d2816033ddc020904f"),
+ "core/Updates/3.0.0-b1.php" => array("17515", "f590471ff9731f8974e660d859d437af"),
"core/Updates/3.0.0-b3.php" => array("1855", "36a08f48c2d31819ef5bae059fc82c18"),
"core/Updates/3.0.0-b4.php" => array("2539", "449fe74e4c0578d03ce9c52ab95bb8e1"),
"core/Updates/3.0.1-b1.php" => array("649", "22747fbe9ff7d54a0beaa39a0e66ec4c"),
+ "core/Updates/3.5.0-b2.php" => array("1967", "d98c087fde7fcfc9fe6a927ef15cbdf0"),
+ "core/Updates/3.5.0-b4.php" => array("992", "b5bb8468852e9381a3c772901971aaa8"),
+ "core/Updates/3.5.0-rc2.php" => array("571", "59496d3014f020db2da8967fee541ca2"),
"core/Updates.php" => array("4977", "daa7beacbf857640474b95c66fd307bd"),
"core/UrlHelper.php" => array("10894", "acd4ca899783e523a4949353e1125535"),
"core/Url.php" => array("23241", "ed9a0802d63a85176a0372063c1d468a"),
- "core/Version.php" => array("771", "0a0594657f8b2959a34c1ffea85ff2b8"),
- "core/ViewDataTable/Config.php" => array("25550", "721f341517c3fd6fa6c6f8a9f5d7c17d"),
+ "core/Validators/BaseValidator.php" => array("1437", "0d7e7f22ea7dc06b73665f2dfbdc822e"),
+ "core/Validators/CharacterLength.php" => array("1244", "707dbf674fd28b7d32e889c7ad96a4d6"),
+ "core/Validators/DateTime.php" => array("788", "3eca426dad575d5cc38d6ff6f7e5b784"),
+ "core/Validators/Email.php" => array("527", "d886ce122400d333f925e7b34495ec23"),
+ "core/Validators/Exception.php" => array("240", "529284b52bc9d49b1ba30d5c33c11654"),
+ "core/Validators/IdSite.php" => array("354", "eb046c9d893c96787b92fb951275668f"),
+ "core/Validators/NotEmpty.php" => array("419", "d492c0c29cef2024d5f32b58197becad"),
+ "core/Validators/NumberRange.php" => array("1266", "c0ca9f1b0639ba15691a3ea3bb2402e8"),
+ "core/Validators/Regex.php" => array("526", "5952c3f32e5b4815d3cc3e260cd03bb2"),
+ "core/Validators/UrlLike.php" => array("459", "3edade727bd36f8cd65355593d1f434b"),
+ "core/Validators/WhitelistedValue.php" => array("853", "a499aa6518361d156f0c6f8f90892573"),
+ "core/Version.php" => array("771", "ec7ca8a746be1d27f400b15264008bbd"),
+ "core/ViewDataTable/Config.php" => array("25768", "6c1e22bc92de18e18e963fd59fa3f79b"),
"core/ViewDataTable/Factory.php" => array("9430", "bba491ec649edf8ff27b02aec384bcc1"),
"core/ViewDataTable/Manager.php" => array("13736", "4db893a51bfc18996fc4d3a4abce4ea0"),
"core/ViewDataTable/RequestConfig.php" => array("9925", "082f98e73dfe37bad01fe68c30b3e243"),
"core/ViewDataTable/Request.php" => array("4255", "0da3ccc7845bb59fb65364f47048a571"),
"core/View/HtmlEmailFooterView.php" => array("509", "67ac4e747c01af72d5ed4a46a869ee92"),
"core/View/HtmlReportEmailHeaderView.php" => array("3830", "fdee31cd6e08c51b0e51e3b5e371e2d2"),
- "core/View/OneClickDone.php" => array("2423", "c37043fbd851cb9a2248fe42c5fa2fde"),
+ "core/View/OneClickDone.php" => array("2421", "66c759844a8ec1d3f65efccecaf96562"),
"core/View.php" => array("15120", "94ac1eff56c76996479ca88cb147ae96"),
"core/View/RenderTokenParser.php" => array("2029", "b5501cae199ae4434b9b304cdf2bcb04"),
"core/View/UIControl.php" => array("4545", "74127c5ca7208bd83810226c785ab825"),
@@ -558,9 +573,9 @@ class Manifest {
"index.php" => array("730", "a401ca678920558c7b9a3a9530d765b6"),
"js/index.php" => array("236", "43ac89baca7c8fbfa63c476653222cff"),
"js/LICENSE.txt" => array("1528", "ae8d0d8f7cd2d6a25f7a208ecf62b7be"),
- "js/piwik.js" => array("325532", "980e7a3bdce7454057a2758d3d640083"),
- "js/piwik.min.js" => array("63970", "1165c21bfde7de7166389e2bfa495f76"),
- "js/README.md" => array("2321", "0bfdd9434faed44fc515d289af3f2450"),
+ "js/piwik.js" => array("335851", "70ae05e549ffbe1673ed349da8d72991"),
+ "js/piwik.min.js" => array("65237", "564d39e4f8cbdffff69ee2c4e8a4ea20"),
+ "js/README.md" => array("2462", "749a17e10feec6b37d9af254b8792421"),
"js/tracker.php" => array("1485", "b80161a5e3fbe1513cb88c91406a3277"),
"lang/am.json" => array("3596", "65bdf2f53b0dd467b40385e97d90dd97"),
"lang/ar.json" => array("30416", "8b96344c8a03566b3a291161463805ed"),
@@ -569,18 +584,18 @@ class Manifest {
"lang/bn.json" => array("4240", "165e4b5a15c49bc7d09f1a74eb9714d4"),
"lang/bs.json" => array("18226", "8270f2c974fdaacd63359e459c1b96b7"),
"lang/ca.json" => array("26770", "13a8e9dcae60cb60f9a5f2056552bc3d"),
- "lang/cs.json" => array("37219", "ea23e9b3b708d4d128d6c39fd7618d3d"),
+ "lang/cs.json" => array("37339", "18a50f86746ffd93f0b3adce1be09236"),
"lang/cy.json" => array("14597", "ec76537d564f60081080da5d1e7ef124"),
- "lang/da.json" => array("35250", "273a9e4ac7627167b2120e4cdbc40dd2"),
- "lang/de.json" => array("41190", "74e931f090df36ec116ee575b8f8b649"),
+ "lang/da.json" => array("35573", "6099270056bd6f518e1ee0a96aaf2cbe"),
+ "lang/de.json" => array("42422", "91a003b37fbaf42441b85d69256d7948"),
"lang/dev.json" => array("79", "5eaab39bc8abfa0e76d3bb72610241b8"),
- "lang/el.json" => array("60598", "8c9d64b446a723ca3dde73dc83407316"),
- "lang/en.json" => array("36970", "db8d0250fdd155fafca0507a3a1a3f65"),
- "lang/es.json" => array("38290", "a33dce22064ae2351aa400b69f9d6f68"),
+ "lang/el.json" => array("62357", "2710b4f04a775813b658f7ded770bd09"),
+ "lang/en.json" => array("38130", "5de4be1e3814b533970259da8707dcb7"),
+ "lang/es.json" => array("39368", "1d40feb6e1190be4f57d244159c2e3d8"),
"lang/et.json" => array("16912", "9da4a51d96db421a63f4de06710846ea"),
"lang/eu.json" => array("6944", "4ac879d6aff0f1928d0a474087585bba"),
"lang/fa.json" => array("36407", "2360f2a26eb579383d0c59e5019e47c2"),
- "lang/fi.json" => array("36558", "4b285438d815b970f6faf2c8d9cdbb76"),
+ "lang/fi.json" => array("36918", "581c61e93eaa7dba3d8f0ed03f1cc1c1"),
"lang/fr.json" => array("41743", "41aab5c9d0c80939d349388014675f6d"),
"lang/gl.json" => array("5980", "76b1bf27b469f03c0597b97b56f7354b"),
"lang/he.json" => array("35460", "cfd189950743f26f9c23ad377a56cf78"),
@@ -598,27 +613,27 @@ class Manifest {
"lang/nb.json" => array("34761", "f87630ccfc324e972d45345d9bfa45bc"),
"lang/nl.json" => array("38933", "42786073af925647f2d452cc58ebe6f1"),
"lang/nn.json" => array("16570", "59d07907795fcdef86a32b49fd98010e"),
- "lang/pl.json" => array("40102", "5a6d39012fa87ff5b96b2ce752ea5ef6"),
- "lang/pt-br.json" => array("37465", "aa3546fbf0ae0b81ca776da9f55e2c26"),
+ "lang/pl.json" => array("41208", "043e2449927345a46e16d8c7aa419875"),
+ "lang/pt-br.json" => array("37461", "5b9a76ea284e2f596971c089cfbe14d3"),
"lang/pt.json" => array("20609", "fedba0761f0c9b4b2252d6972f26ea78"),
"lang/README.md" => array("459", "03e34cb9f2e8e7790c325804a63d729c"),
"lang/ro.json" => array("29147", "6c7242562218ce9ec9a6d154a1cbc6c9"),
"lang/ru.json" => array("53199", "c54ce87df73223db91ea1f1537118578"),
"lang/sk.json" => array("37458", "afdb74def31d0bca06a426b1c53b860b"),
"lang/sl.json" => array("32571", "704ca49bb467fd566554b940d91a98f7"),
- "lang/sq.json" => array("41272", "1179e0d8a62ec85a5e36c67f7f0d2643"),
+ "lang/sq.json" => array("42312", "08eab2c2ae3f8964af4c4e4049bb1a69"),
"lang/sr.json" => array("36149", "bbb66dc10a03f67a026ec5feb3e89efd"),
"lang/sv.json" => array("38505", "50dcb06e744be5bb17dd9ec5eb30205b"),
"lang/ta.json" => array("18780", "26a915ced26c909b3a2063620f0deb07"),
"lang/te.json" => array("6455", "ca4b800eab3a13d397aaead45f29322b"),
"lang/th.json" => array("33734", "db276645c37998b00875305c37dbc0f9"),
"lang/tl.json" => array("28462", "3f91e32fe33b469fbb7f37414cb7dd30"),
- "lang/tr.json" => array("40878", "e830f8fc469c156b84fab72385c8e5ed"),
+ "lang/tr.json" => array("41952", "66866511622b03b938c6a539905ad1ab"),
"lang/uk.json" => array("51706", "53353a57523bd9c87f4a2547c7363cbd"),
"lang/vi.json" => array("34306", "0523231f2644fad5e228b0f8c5083692"),
"lang/zh-cn.json" => array("32383", "72cb9c3f6d0208da9e70333d618023c9"),
"lang/zh-tw.json" => array("35023", "b51303d4f06716a49e0de56c36b18e9c"),
- "LEGALNOTICE" => array("8030", "991b23643e52b76374cdffc1000b9d84"),
+ "LEGALNOTICE" => array("8086", "3f1509a5ccaad135296039da84246a51"),
"libs/bower_components/angular/angular-csp.css" => array("343", "5d7bf1728c2447221cad6c6263557306"),
"libs/bower_components/angular/angular.js" => array("1268263", "badf97a1909c5784be3b1b66d05d5654"),
"libs/bower_components/angular/angular.min.js" => array("168517", "07a72b597f2fc10d6f88c8277d903d94"),
@@ -1223,7 +1238,7 @@ class Manifest {
"libs/Zend/Db/Adapter/Db2.php" => array("27603", "0e3132abd56e493b76df721eb37ad1ce"),
"libs/Zend/Db/Adapter/Exception.php" => array("1595", "51665355378ff8414795d85ccfef5c2e"),
"libs/Zend/Db/Adapter/Mysqli/Exception.php" => array("1192", "9e9e5636095fc47fd3e5c2a75cabd90f"),
- "libs/Zend/Db/Adapter/Mysqli.php" => array("17419", "f9813544420dcd4d92a78e3f8cd3a49d"),
+ "libs/Zend/Db/Adapter/Mysqli.php" => array("18556", "7d3c2ef7ad1715fc0e5a6a1979f8cbdf"),
"libs/Zend/Db/Adapter/Oracle/Exception.php" => array("1994", "6c5110c3729078357759f489dba8ed0c"),
"libs/Zend/Db/Adapter/Oracle.php" => array("21700", "2b190daba528c06706d7a44651e85b32"),
"libs/Zend/Db/Adapter/Pdo/Abstract.php" => array("11914", "9d9ff4dc2c4968da967e580487c5c3c8"),
@@ -1402,15 +1417,15 @@ class Manifest {
"misc/others/widget_example_lastvisits.html" => array("458", "831193c8f741e6f079a12e53fdb3c80a"),
"misc/proxy-hide-piwik-url/README.md" => array("122", "41d686494ba5be91c02b6a1e9fad5135"),
"misc/user/index.html" => array("170", "73f3829f18c01d834a4b734ce42793d0"),
- "piwik.js" => array("63970", "1165c21bfde7de7166389e2bfa495f76"),
+ "piwik.js" => array("65237", "564d39e4f8cbdffff69ee2c4e8a4ea20"),
"piwik.php" => array("2760", "3a8e5721d4c780c2d31b7969488d39f8"),
"plugins/Actions/Actions/ActionClickUrl.php" => array("1919", "ed36b2d616772e8e1e00a84b4892ded8"),
"plugins/Actions/Actions/ActionDownloadUrl.php" => array("998", "ddecea552c6a2f856336c2d3c00472d1"),
"plugins/Actions/Actions/ActionSiteSearch.php" => array("9995", "59524479342c77c8c82face789252ea6"),
"plugins/Actions/Actions.php" => array("6407", "3c688f3828b8f3d3d18e8c61e1f1c2b9"),
- "plugins/Actions/API.php" => array("21211", "add0d5810fed71dc4fa3e72b2177273c"),
+ "plugins/Actions/API.php" => array("21689", "a9d5cd5b87487a7bacf300e5c3990150"),
"plugins/Actions/Archiver.php" => array("21662", "97fc4bfe36d3e9a644b816a28a687019"),
- "plugins/Actions/ArchivingHelper.php" => array("24600", "27067da80ba93e99d0b44e559f338eb7"),
+ "plugins/Actions/ArchivingHelper.php" => array("24597", "7b537342a30d5b620ed6efa521895c9a"),
"plugins/Actions/Categories/DownloadsSubcategory.php" => array("401", "a04e5d4164157dd88918124208d3e250"),
"plugins/Actions/Categories/EntryPagesSubcategory.php" => array("410", "f7826c2b9fce26ac9b4a085ab644f540"),
"plugins/Actions/Categories/ExitPagesSubcategory.php" => array("408", "3e7bae3bfaa5d6df0861d2e376ca72b8"),
@@ -1446,8 +1461,8 @@ class Manifest {
"plugins/Actions/Columns/VisitTotalActions.php" => array("3401", "d07605afd76af40da65fe1143fc682d2"),
"plugins/Actions/Columns/VisitTotalInteractions.php" => array("2896", "765ce98d3b2b2f2ee23db80bab3dc40b"),
"plugins/Actions/Columns/VisitTotalSearches.php" => array("1617", "0b690af82d995437fd208e90504b2356"),
- "plugins/Actions/DataTable/Filter/Actions.php" => array("1292", "16c377eccd19f5f0c60b945c0784773d"),
- "plugins/Actions/javascripts/actionsDataTable.js" => array("14252", "7e0411086e748f4db4256290498a16a7"),
+ "plugins/Actions/DataTable/Filter/Actions.php" => array("2452", "d25c3878058ebc3000930326e2ed3b3e"),
+ "plugins/Actions/javascripts/actionsDataTable.js" => array("14253", "1354fd60377884f4c190cf8740531b3e"),
"plugins/Actions/javascripts/rowactions.js" => array("2417", "f831630404518aaf07fd712dcdd6b3a3"),
"plugins/Actions/lang/am.json" => array("376", "5b399d577eb14f72c95fceeaa6c9f137"),
"plugins/Actions/lang/ar.json" => array("7726", "9be0920f68be8db7f2cb08adc2f69f57"),
@@ -1456,7 +1471,7 @@ class Manifest {
"plugins/Actions/lang/bs.json" => array("5728", "bd12219954d92e7c10e5d5a6075e7c3a"),
"plugins/Actions/lang/ca.json" => array("6294", "1b4961bc19a6d00ba6b97ec3523bc3f6"),
"plugins/Actions/lang/cs.json" => array("7257", "dd5a7c373ce7f7668017eb6a25ebcbc5"),
- "plugins/Actions/lang/da.json" => array("6074", "72ba54288b14994efb8ef6c30482ec3f"),
+ "plugins/Actions/lang/da.json" => array("6234", "014664ebe9dbd92eef24fb66afa26002"),
"plugins/Actions/lang/de.json" => array("7453", "0b69866ffb10a33db77a7aedf7912e49"),
"plugins/Actions/lang/el.json" => array("12652", "4bc680802356ae6a3930f96c99266fc6"),
"plugins/Actions/lang/en.json" => array("7026", "46c00ab9e42988242e93c72f97812563"),
@@ -1673,7 +1688,7 @@ class Manifest {
"plugins/Contents/lang/bg.json" => array("317", "61f1040c48a6d06a71074e32d4e21d82"),
"plugins/Contents/lang/ca.json" => array("104", "c52c0aeeb30bb973edc8bcc52bd0a4b2"),
"plugins/Contents/lang/cs.json" => array("1083", "7f0c576b119271d363e9466fc08b8d81"),
- "plugins/Contents/lang/da.json" => array("959", "c38d86e91d064c46774e883a0dd2d710"),
+ "plugins/Contents/lang/da.json" => array("1050", "7215379bba272f1fee1f417e8e9cf7a4"),
"plugins/Contents/lang/de.json" => array("1200", "692c13615fc76ab65306dca3d0916970"),
"plugins/Contents/lang/el.json" => array("1825", "b14df6c295c2521a6d260ca019c8962a"),
"plugins/Contents/lang/en.json" => array("1106", "26a8c2f9a8f5a0ba7c01760785cbe403"),
@@ -1725,11 +1740,11 @@ class Manifest {
"plugins/CoreAdminHome/Commands/FixDuplicateLogActions.php" => array("8041", "69f41e5a31d7ec0e1138f6274b1e4730"),
"plugins/CoreAdminHome/Commands/InvalidateReportData.php" => array("8239", "40ddcdb8b1c5a17730f65972ce5bee09"),
"plugins/CoreAdminHome/Commands/OptimizeArchiveTables.php" => array("4459", "10c12d00a793604486d7b8ace00cb5ed"),
- "plugins/CoreAdminHome/Commands/PurgeOldArchiveData.php" => array("8319", "ef82ab26547dbc169dd74e4825673f11"),
+ "plugins/CoreAdminHome/Commands/PurgeOldArchiveData.php" => array("8542", "5b13955791c733b9caeb930d7cf8464f"),
"plugins/CoreAdminHome/Commands/RunScheduledTasks.php" => array("2563", "66e9eb6b65454aa1fbe9abf9eda3916f"),
"plugins/CoreAdminHome/Commands/SetConfig/ConfigSettingManipulation.php" => array("4282", "3d14b24d6e4c4426e3774fadef5d2396"),
"plugins/CoreAdminHome/Commands/SetConfig.php" => array("4002", "16b9bbbfc63b50fafca28362452d5290"),
- "plugins/CoreAdminHome/Controller.php" => array("8876", "8fd60159f9f18f9013cba6fe18d639d7"),
+ "plugins/CoreAdminHome/Controller.php" => array("9103", "86be30f26b270f378bd1012086ac1112"),
"plugins/CoreAdminHome/CoreAdminHome.php" => array("2871", "9d00dfbe195df1c807944f0366e84348"),
"plugins/CoreAdminHome/CustomLogo.php" => array("8151", "a512f5793d3a7bc6c75011f81fc4634c"),
"plugins/CoreAdminHome/javascripts/protocolCheck.js" => array("1221", "453d73bc82bcaf44d6732b2272c243a2"),
@@ -1739,12 +1754,12 @@ class Manifest {
"plugins/CoreAdminHome/lang/bs.json" => array("224", "6b7da347d1102daf31ef1c9713d736e2"),
"plugins/CoreAdminHome/lang/ca.json" => array("3333", "b0be85d8bf8773efc8b9dd8ae48d79ba"),
"plugins/CoreAdminHome/lang/cs.json" => array("12312", "030131a718f8c950c4edfcb7baeeae79"),
- "plugins/CoreAdminHome/lang/da.json" => array("11459", "7c077c03b5679cd9a6bab65133cc5b7c"),
+ "plugins/CoreAdminHome/lang/da.json" => array("11542", "7f50fccda8bfba96c989cdc6ab1e9788"),
"plugins/CoreAdminHome/lang/de.json" => array("13558", "2c9ec2731b82d98f443fb49cde8132d8"),
- "plugins/CoreAdminHome/lang/el.json" => array("22034", "fdc6936ef2e2a39ddbfdb72c764cc630"),
- "plugins/CoreAdminHome/lang/en.json" => array("11499", "9ac1caec2c2eb4f0680d9cd861fe2716"),
+ "plugins/CoreAdminHome/lang/el.json" => array("22981", "7ea75e64a4329136325a26eb05bc09e2"),
+ "plugins/CoreAdminHome/lang/en.json" => array("11982", "78ed441c5fbd68f75fda0e5fc571e9f8"),
"plugins/CoreAdminHome/lang/es.json" => array("12629", "92c3faf1c9a5daeee3e5ac8e5f06571c"),
- "plugins/CoreAdminHome/lang/et.json" => array("1746", "eeeecb9b77b01ddd05eeeda0290b6d64"),
+ "plugins/CoreAdminHome/lang/et.json" => array("1789", "d4347af2b3953aa8b56bf55f2ba4befa"),
"plugins/CoreAdminHome/lang/fa.json" => array("8483", "9bd5ca3d545cc20535f32ef973a2d417"),
"plugins/CoreAdminHome/lang/fi.json" => array("9150", "6c0d7beafad3bf27b874cf4bc67f5db9"),
"plugins/CoreAdminHome/lang/fr.json" => array("13178", "d46dacf813d47a533d2a8c85c170ee36"),
@@ -1763,24 +1778,24 @@ class Manifest {
"plugins/CoreAdminHome/lang/nb.json" => array("10208", "9cf915054555b2632df7c18ab5a539e8"),
"plugins/CoreAdminHome/lang/nl.json" => array("11031", "0b179dcd61fce0b8631f8aee3c40e2b9"),
"plugins/CoreAdminHome/lang/nn.json" => array("1608", "84e4b609f92c0dcb992195036253e8aa"),
- "plugins/CoreAdminHome/lang/pl.json" => array("12397", "83d061967e364e9664ed13acbb483df8"),
+ "plugins/CoreAdminHome/lang/pl.json" => array("12951", "8358cc8bf139fea547f9b2ad0437bb9c"),
"plugins/CoreAdminHome/lang/pt-br.json" => array("11089", "4d796fa629659f8fa47fc098bde9bdbe"),
"plugins/CoreAdminHome/lang/pt.json" => array("4574", "26322075483dee0b6175515a575d871d"),
"plugins/CoreAdminHome/lang/ro.json" => array("8571", "0098987167dcb1f0392b62fe7d2e1990"),
"plugins/CoreAdminHome/lang/ru.json" => array("19148", "54c59f1412be4d1db59009450487470b"),
"plugins/CoreAdminHome/lang/sk.json" => array("5172", "203323455d3d5ac7dbab8c7c2a5369ef"),
- "plugins/CoreAdminHome/lang/sl.json" => array("3095", "966bec6f3b0676df1e9a3b288e1ef645"),
- "plugins/CoreAdminHome/lang/sq.json" => array("13435", "b1426470f7923d5f7f38c0f0060c48c2"),
+ "plugins/CoreAdminHome/lang/sl.json" => array("3658", "557ff53ad2aca3cf6d741bbdf9ed49b4"),
+ "plugins/CoreAdminHome/lang/sq.json" => array("13993", "31d80e73dd855596acbe2b1fa2253371"),
"plugins/CoreAdminHome/lang/sr.json" => array("11626", "e0f202a9c036410997506b41487d7b04"),
"plugins/CoreAdminHome/lang/sv.json" => array("11794", "da475dbe40c2e935bd50dca911abfd4e"),
"plugins/CoreAdminHome/lang/ta.json" => array("6124", "a44a1c5022b98cc665682d5d5c2f4846"),
"plugins/CoreAdminHome/lang/te.json" => array("157", "20cf58c9a9f87ed376dd51006742bc12"),
"plugins/CoreAdminHome/lang/th.json" => array("3202", "ad0e2a06af050dd504d0edff583b4915"),
"plugins/CoreAdminHome/lang/tl.json" => array("9224", "0b83f122867f7d7cc9a26c2060eacc3b"),
- "plugins/CoreAdminHome/lang/tr.json" => array("13455", "acd09c91fd54d84118975264de18679b"),
+ "plugins/CoreAdminHome/lang/tr.json" => array("13964", "afb16f0a5be799d2979b43fa5df4090c"),
"plugins/CoreAdminHome/lang/uk.json" => array("18694", "c532eba6021748c3b1cbe7535a6f1f0f"),
"plugins/CoreAdminHome/lang/vi.json" => array("9206", "acb6e570e65e6972c5de8647b72e8479"),
- "plugins/CoreAdminHome/lang/zh-cn.json" => array("10529", "896c082dddc3b646850a7d2b55f48e35"),
+ "plugins/CoreAdminHome/lang/zh-cn.json" => array("10681", "5840458e0825279879f1486e10632452"),
"plugins/CoreAdminHome/lang/zh-tw.json" => array("10854", "d411b64c0b2562119c224de83b0d07f7"),
"plugins/CoreAdminHome/Menu.php" => array("1514", "48211f584fc6dade7b28e9e6a117c2db"),
"plugins/CoreAdminHome/Model/DuplicateActionRemover.php" => array("6400", "6af515924590d21369ebbe345de9e311"),
@@ -1792,7 +1807,7 @@ class Manifest {
"plugins/CoreAdminHome/templates/generalSettings.twig" => array("14283", "76b4644c2dd208f62410754d3eaa3d19"),
"plugins/CoreAdminHome/templates/home.twig" => array("2850", "0a56faa965f78766931190cfc5a4e53a"),
"plugins/CoreAdminHome/templates/optOut.twig" => array("3380", "e89cf4c609f8c1aec060b8ca8dc5e3cc"),
- "plugins/CoreAdminHome/templates/trackingCodeGenerator.twig" => array("16675", "e29967b27d006c5d648fd0977061d17b"),
+ "plugins/CoreAdminHome/templates/trackingCodeGenerator.twig" => array("18407", "0fe62bbd75a615dfc43ba87f1ab21246"),
"plugins/CoreConsole/Commands/ClearCaches.php" => array("1116", "b43bf6af0ab5f862e824a9989d389584"),
"plugins/CoreConsole/Commands/CoreArchiver.php" => array("7770", "c74bdd8c7d10604853199a4551e89374"),
"plugins/CoreConsole/Commands/DevelopmentEnable.php" => array("1619", "407b0ca4826cbf533e1b72f8602cf608"),
@@ -1807,7 +1822,7 @@ class Manifest {
"plugins/CoreConsole/Commands/GenerateController.php" => array("2035", "bcbbc41915ab291d180f454f9db97140"),
"plugins/CoreConsole/Commands/GenerateDimension.php" => array("10430", "b7ce4c30a2ea8df79b30482cc0cd3d15"),
"plugins/CoreConsole/Commands/GenerateMenu.php" => array("1981", "c50510951a7cc7a70b7046e1c63e810a"),
- "plugins/CoreConsole/Commands/GeneratePluginBase.php" => array("14348", "9a33d84c511dbf307c03afcfd4220169"),
+ "plugins/CoreConsole/Commands/GeneratePluginBase.php" => array("14574", "db78e5e24d0be7ca55094391d3022e96"),
"plugins/CoreConsole/Commands/GeneratePlugin.php" => array("7376", "8efba7743589e604f3368e0d2146c65e"),
"plugins/CoreConsole/Commands/GenerateReport.php" => array("11160", "bb04ecfaba33a181fc7420e7bbe9ba3b"),
"plugins/CoreConsole/Commands/GenerateScheduledTask.php" => array("2052", "60b37f5dc1bc893a87dd37dcdc11447a"),
@@ -1828,7 +1843,7 @@ class Manifest {
"plugins/CoreHome/angularjs/alert/alert.directive.js" => array("588", "c2835ff2e587261cdf2307fd293b854d"),
"plugins/CoreHome/angularjs/alert/alert.directive.less" => array("2039", "024dcc670268d17efbee3acc488bd0fa"),
"plugins/CoreHome/angularjs/anchorLinkFix.js" => array("2866", "8e56fdd25f8c036761319f784d35fdca"),
- "plugins/CoreHome/angularjs/common/directives/attributes.js" => array("1708", "2bab682b267436f250aeee97f55ce9ec"),
+ "plugins/CoreHome/angularjs/common/directives/attributes.js" => array("1860", "5bacaadeeb10043a5dd0bef2b7ac6272"),
"plugins/CoreHome/angularjs/common/directives/autocomplete-matched.js" => array("2002", "ef1110fa971179ef53181c760ff23473"),
"plugins/CoreHome/angularjs/common/directives/dialog.js" => array("1646", "7018df32c28d2d5062f463e8a4f0505f"),
"plugins/CoreHome/angularjs/common/directives/directive.module.js" => array("214", "ac6b77adc1c87808df6f9a251f9cd806"),
@@ -1856,16 +1871,16 @@ class Manifest {
"plugins/CoreHome/angularjs/common/filters/ucfirst.js" => array("500", "e6c65f6dde4ccac134a462de0475a594"),
"plugins/CoreHome/angularjs/common/services/global-ajax-queue.js" => array("312", "54063202c79ab11959d310f5296b4b91"),
"plugins/CoreHome/angularjs/common/services/periods.js" => array("8843", "a86cc323dd0e80154dd2356d69202b45"),
- "plugins/CoreHome/angularjs/common/services/piwik-api.js" => array("11250", "f585d4f3cb3f2a61741a24c937c4bd83"),
+ "plugins/CoreHome/angularjs/common/services/piwik-api.js" => array("11383", "55d3d402732084ab29c493b5f12b425b"),
"plugins/CoreHome/angularjs/common/services/piwik-api.spec.js" => array("9340", "5ad12f7790c88fb3da58af213b3683ea"),
"plugins/CoreHome/angularjs/common/services/piwik.js" => array("2437", "30efd6652c9311abbf6d312ee6f5da6c"),
"plugins/CoreHome/angularjs/common/services/piwik.spec.js" => array("1086", "7bcd31b934b7f60cf85ae84e6ffffb79"),
- "plugins/CoreHome/angularjs/common/services/piwik-url.js" => array("1664", "bb1649e68ef9327fdd5fb83a6aa682cd"),
+ "plugins/CoreHome/angularjs/common/services/piwik-url.js" => array("2042", "29660e1208e42e487ca7752748e11284"),
"plugins/CoreHome/angularjs/common/services/reporting-pages-model.js" => array("2314", "2557ca900fe8f295066851a935cfff94"),
"plugins/CoreHome/angularjs/common/services/report-metadata-model.js" => array("1437", "af4c59f991b7ade4577a57601987d4d0"),
"plugins/CoreHome/angularjs/common/services/service.module.js" => array("211", "b556271a166215692f022125fa3f5b23"),
"plugins/CoreHome/angularjs/content-block/content-block.directive.html" => array("461", "438d22b85288a23c5bd5f9cb4e11bc34"),
- "plugins/CoreHome/angularjs/content-block/content-block.directive.js" => array("2997", "2d792001566a8708381f953589061b4f"),
+ "plugins/CoreHome/angularjs/content-block/content-block.directive.js" => array("3215", "099f40ba01037122219c0d96d3bac6a6"),
"plugins/CoreHome/angularjs/content-intro/content-intro.directive.js" => array("563", "4acce2b640277a7debe8c194b832f636"),
"plugins/CoreHome/angularjs/content-table/content-table.directive.js" => array("650", "7b39278864a917cf249fe19b14552099"),
"plugins/CoreHome/angularjs/date-picker/date-picker.directive.js" => array("15626", "1cf5abf71ad3be1db8d874ceed5f23e3"),
@@ -1885,6 +1900,10 @@ class Manifest {
"plugins/CoreHome/angularjs/menudropdown/menudropdown.directive.html" => array("1238", "e1b2949e388d109f7ca60d196b5a60f4"),
"plugins/CoreHome/angularjs/menudropdown/menudropdown.directive.js" => array("2558", "00448f3520e6c9bd6a479ef16576f814"),
"plugins/CoreHome/angularjs/menudropdown/menudropdown.directive.less" => array("1670", "e3071977f7583d679a3359629ac3cade"),
+ "plugins/CoreHome/angularjs/multipairfield/multipairfield.controller.js" => array("3169", "6f4acaef3aa577c569e81bb2de88a472"),
+ "plugins/CoreHome/angularjs/multipairfield/multipairfield.directive.html" => array("1438", "a51f7bd401c19567e5e29cab9245dba6"),
+ "plugins/CoreHome/angularjs/multipairfield/multipairfield.directive.js" => array("2078", "13c09c9d7555ed022e024d1971a7e475"),
+ "plugins/CoreHome/angularjs/multipairfield/multipairfield.directive.less" => array("464", "b4c6be8cf2975d182fb73cdeca0e9c04"),
"plugins/CoreHome/angularjs/notification/notification.controller.js" => array("979", "844362df3c2828ea518d4840a2702ff6"),
"plugins/CoreHome/angularjs/notification/notification.directive.html" => array("340", "eaa588a40c0b019ce90daa2b9873a978"),
"plugins/CoreHome/angularjs/notification/notification.directive.js" => array("3534", "ae7c18b571e9bf71706c087f4b5f8f36"),
@@ -1933,15 +1952,16 @@ class Manifest {
"plugins/CoreHome/angularjs/widget-loader/widgetloader.directive.html" => array("377", "922c615720e25f116f0bf39d64e8819e"),
"plugins/CoreHome/angularjs/widget-loader/widgetloader.directive.js" => array("7362", "7c310c7260097f5c83a5398c37009dc7"),
"plugins/CoreHome/angularjs/widget/widget.directive.html" => array("558", "faadcd1273c40117c7742836caa6c298"),
- "plugins/CoreHome/angularjs/widget/widget.directive.js" => array("4710", "5965d9f3997ac3a1a59bed5e08108b1f"),
+ "plugins/CoreHome/angularjs/widget/widget.directive.js" => array("5404", "06751d1011a574da1fd1719446a9c47d"),
"plugins/CoreHome/Categories/ActionsCategory.php" => array("389", "9cf3e9d805958076dab96ec3accfa97f"),
"plugins/CoreHome/Categories/DevicesSubcategory.php" => array("408", "ecc565282025be5424cbe33b97df20ef"),
"plugins/CoreHome/Categories/EngagementSubcategory.php" => array("413", "4b77c3c22158e469112a4f3f6e454412"),
"plugins/CoreHome/Categories/SoftwareSubcategory.php" => array("410", "77dbfdc229725f3e48a20741f4c20511"),
"plugins/CoreHome/Categories/VisitorsCategory.php" => array("391", "8c006ed3780c0bc86fdbe3ff3644a880"),
"plugins/CoreHome/Categories/VisitorsOverviewSubcategory.php" => array("408", "7944fd90432f59f11843fee8f71b194d"),
- "plugins/CoreHome/Columns/IdSite.php" => array("1636", "b290fb5946b0f51c2cbc3ed8fd8caa6a"),
- "plugins/CoreHome/Columns/LinkVisitActionId.php" => array("1460", "26d4de0043e4c50462a254d658ce9d4e"),
+ "plugins/CoreHome/Columns/IdSite.php" => array("2023", "dc4c175af39126140cbdfab7260928b3"),
+ "plugins/CoreHome/Columns/LinkVisitActionIdPages.php" => array("1368", "21e81405527b1aa30fedf0d86ca1e9cc"),
+ "plugins/CoreHome/Columns/LinkVisitActionId.php" => array("1042", "a5c2bcaee2be9fa736406dad5ee578eb"),
"plugins/CoreHome/Columns/Metrics/ActionsPerVisit.php" => array("1034", "e537ce58bfe370e7130dcdcfa923ae04"),
"plugins/CoreHome/Columns/Metrics/AverageTimeOnSite.php" => array("1267", "a79237ccf0620e99097b91ca76335b7f"),
"plugins/CoreHome/Columns/Metrics/BounceRate.php" => array("1231", "04fea9fa33e9a811026575295d776ec4"),
@@ -1954,7 +1974,7 @@ class Manifest {
"plugins/CoreHome/Columns/UserId.php" => array("3462", "27192e86e8c7b0acc28a325d8b1eb0b8"),
"plugins/CoreHome/Columns/VisitFirstActionMinute.php" => array("1301", "4fff298aa200945205e41054ab822654"),
"plugins/CoreHome/Columns/VisitFirstActionTime.php" => array("1506", "e12ee0ec9ffa66871cd65d17ce491a19"),
- "plugins/CoreHome/Columns/VisitGoalBuyer.php" => array("4493", "c885de7ec70beeac33bc1b423ccf0d11"),
+ "plugins/CoreHome/Columns/VisitGoalBuyer.php" => array("4537", "3f012d228bc8555335811f6e95eb381c"),
"plugins/CoreHome/Columns/VisitGoalConverted.php" => array("2030", "3e8bca4c904df77daed70dfdec1d3265"),
"plugins/CoreHome/Columns/VisitId.php" => array("1577", "7fae37afc273071e4b8afc15704e0f3d"),
"plugins/CoreHome/Columns/VisitIp.php" => array("1489", "75a3ad2601d57c55c37d38b6780d4bf4"),
@@ -1977,9 +1997,9 @@ class Manifest {
"plugins/CoreHome/Columns/VisitTotalTime.php" => array("2711", "130ee7c452f2f54fa21c51f84b776cff"),
"plugins/CoreHome/config/config.php" => array("199", "56a0d120c06028ec881f6e32c67a9ef9"),
"plugins/CoreHome/Controller.php" => array("9945", "d24efc7aef0036f7b7a492135e803579"),
- "plugins/CoreHome/CoreHome.php" => array("25281", "7ac8f6393932a77f10827a4fb07d2fe6"),
+ "plugins/CoreHome/CoreHome.php" => array("25618", "6e8d5d7689eab1faec84ffbf5651fff6"),
"plugins/CoreHome/DataTableRowAction/MultiRowEvolution.php" => array("2138", "cc9fc3ed224716fd952d18dce93cd138"),
- "plugins/CoreHome/DataTableRowAction/RowEvolution.php" => array("12699", "854ee57249fa36ed98f6a668ca795212"),
+ "plugins/CoreHome/DataTableRowAction/RowEvolution.php" => array("12838", "3767e8a0f87d44590e9271f4b38d8864"),
"plugins/CoreHome/images/applePinnedTab.svg" => array("1307", "901e1b0c61aafc6c440227335e58676e"),
"plugins/CoreHome/images/applogo_128.png" => array("1945", "84e5649cea867e5c1a0cf2958dfad6f7"),
"plugins/CoreHome/images/applogo_144.png" => array("2207", "288beed5412c299cf2f67ff97f017ddf"),
@@ -2005,12 +2025,12 @@ class Manifest {
"plugins/CoreHome/javascripts/calendar.js" => array("4311", "6ddb3c0c949348aada9c84c6b8b366fb"),
"plugins/CoreHome/javascripts/color_manager.js" => array("10967", "b353d58b5b4e15661aee335885ee410b"),
"plugins/CoreHome/javascripts/corehome.js" => array("4188", "2ad881a134637d2c59bae8c6ace062ab"),
- "plugins/CoreHome/javascripts/dataTable.js" => array("73158", "09fc7e8962ce0a5202f0d92e4978dd45"),
- "plugins/CoreHome/javascripts/dataTable_rowactions.js" => array("14317", "d2a625d7882fa7c2ecdc560811a7a5ad"),
+ "plugins/CoreHome/javascripts/dataTable.js" => array("73503", "ce9ec038c6b65c482d2877a8138e9e1a"),
+ "plugins/CoreHome/javascripts/dataTable_rowactions.js" => array("14561", "ec56c20ac20f28f6f426ac8b69e183c8"),
"plugins/CoreHome/javascripts/donate.js" => array("5845", "68b91fa072dceb7f26d298136e063557"),
"plugins/CoreHome/javascripts/iframeResizer.min.js" => array("11841", "6f3ca222a9a6149f16c99d0d72860bc0"),
"plugins/CoreHome/javascripts/manifest.json" => array("1013", "071294f59190c410d238a5aa0fd7eaaa"),
- "plugins/CoreHome/javascripts/notification.js" => array("4639", "ce78edc0c831e06ee0b42d8929e13835"),
+ "plugins/CoreHome/javascripts/notification.js" => array("5199", "f907200287215db54b954476b744b66e"),
"plugins/CoreHome/javascripts/notification_parser.js" => array("840", "0355511f49d021a3b3c0ad7671c3f556"),
"plugins/CoreHome/javascripts/numberFormatter.js" => array("4905", "6b3346bc8bcd2049d8318b45ad8abc29"),
"plugins/CoreHome/javascripts/popover.js" => array("9396", "7311afd40b2e5f91247c9962a987df7c"),
@@ -2026,9 +2046,9 @@ class Manifest {
"plugins/CoreHome/lang/bs.json" => array("192", "5777036f79a9811284f2d682a3eaa823"),
"plugins/CoreHome/lang/ca.json" => array("2985", "dfc2b61a8b014e39bc45ba05b2e348b6"),
"plugins/CoreHome/lang/cs.json" => array("6947", "ad3221d46554eec031cdce7cd562e58c"),
- "plugins/CoreHome/lang/da.json" => array("5764", "d7f3773ef7b33d544eb581697edb91db"),
- "plugins/CoreHome/lang/de.json" => array("8293", "f9b4f7bb085ff78c4bef3749d4a81d01"),
- "plugins/CoreHome/lang/el.json" => array("12559", "3d9fa7461fbd8f17e22945ae173e9417"),
+ "plugins/CoreHome/lang/da.json" => array("5765", "8e0ceec558eacedea164dab65c20802c"),
+ "plugins/CoreHome/lang/de.json" => array("8850", "1379a18a8a5a26921b086e43b414f467"),
+ "plugins/CoreHome/lang/el.json" => array("13388", "d39fadd3a384338f601c04ad9d9909cb"),
"plugins/CoreHome/lang/en.json" => array("7771", "b344ab9753ea41e9969a1b557e4a77de"),
"plugins/CoreHome/lang/es.json" => array("6374", "bef0a3f3feeeb82884d1b4a3ee3629fa"),
"plugins/CoreHome/lang/et.json" => array("1949", "252994af888236fe72220f6d1b6d2eed"),
@@ -2052,25 +2072,25 @@ class Manifest {
"plugins/CoreHome/lang/nb.json" => array("5381", "f60747a09d0f7c76cb128996362042fd"),
"plugins/CoreHome/lang/nl.json" => array("6285", "14a41d021dd835b8257bfe12493c069d"),
"plugins/CoreHome/lang/nn.json" => array("1391", "5f102fab8d57e60eb1b62a0f2bdc5b41"),
- "plugins/CoreHome/lang/pl.json" => array("8016", "7d02f3e451bc13a8df3198f164c65b57"),
- "plugins/CoreHome/lang/pt-br.json" => array("5454", "0d3021090979b8557cac27a277a4abe6"),
+ "plugins/CoreHome/lang/pl.json" => array("8598", "d7be3be7430efeafdbcefbe189e016ad"),
+ "plugins/CoreHome/lang/pt-br.json" => array("5526", "699eef206e76def1d60c70dede683653"),
"plugins/CoreHome/lang/pt.json" => array("896", "70b45ea7d6164d54bb8a130d8acc037c"),
"plugins/CoreHome/lang/ro.json" => array("3895", "781a91a133485eb27b02fc98757e5f99"),
"plugins/CoreHome/lang/ru.json" => array("8912", "f9da41a217a1cb2c8f88be70f77dd00f"),
"plugins/CoreHome/lang/sk.json" => array("4618", "a824266222a8fd79ca44fbde625a5623"),
"plugins/CoreHome/lang/sl.json" => array("781", "fa3c197ec810de2c8d267b71171e0516"),
- "plugins/CoreHome/lang/sq.json" => array("8351", "aa6ffaee9b523727150f11fc9deac27b"),
+ "plugins/CoreHome/lang/sq.json" => array("8916", "8b48b8cb8209efbfad93886002e673a9"),
"plugins/CoreHome/lang/sr.json" => array("5964", "352876508729c75f360cd03475f5cc0b"),
"plugins/CoreHome/lang/sv.json" => array("6634", "fa0fe7294315a43be41572e3e9f8c99e"),
"plugins/CoreHome/lang/ta.json" => array("4419", "a035ad7ac5edce93548d74ea18c87182"),
"plugins/CoreHome/lang/te.json" => array("119", "7e9c6ec6465a602b12c4a73bafe260c0"),
"plugins/CoreHome/lang/th.json" => array("1024", "513ca617cc28cbea7837bb254598ae2c"),
"plugins/CoreHome/lang/tl.json" => array("4383", "1dd544f07c74d7b8a0bd03d68933152b"),
- "plugins/CoreHome/lang/tr.json" => array("8315", "4f6af0482bffef7317c2d994a5fe6981"),
+ "plugins/CoreHome/lang/tr.json" => array("8831", "5f7694f15b6ae39bb27d07f78b099417"),
"plugins/CoreHome/lang/uk.json" => array("8489", "6b1f42d58a35b3a2460f02949f8b0a75"),
"plugins/CoreHome/lang/vi.json" => array("4365", "b0e7fa3cb7b88499a0fac3d5330be597"),
"plugins/CoreHome/lang/zh-cn.json" => array("5669", "1e5b5eddb7a36d07dd0e022c5c936af4"),
- "plugins/CoreHome/lang/zh-tw.json" => array("6937", "bf9286f729ed3ccfb7d690a263a3b826"),
+ "plugins/CoreHome/lang/zh-tw.json" => array("7431", "e89e757c747e321e8459dfaa2cedc42c"),
"plugins/CoreHome/LoginWhitelist.php" => array("2133", "1392a4b35dd68f1165af30639f999a64"),
"plugins/CoreHome/Menu.php" => array("1016", "0e5e7bc88d7b805329b633f4d7834adc"),
"plugins/CoreHome/Segment.php" => array("367", "eb86574f0cbe1d33fc9f449bb3ca60b8"),
@@ -2115,7 +2135,7 @@ class Manifest {
"plugins/CoreHome/templates/_indexContent.twig" => array("701", "ba3065acdadd1ec5f7d93c5582595a04"),
"plugins/CoreHome/templates/_javaScriptDisabled.twig" => array("134", "9f7e7b75b3dd7928b0d7db27802cec9e"),
"plugins/CoreHome/templates/_logo.twig" => array("642", "ada2df7d1bbfeda5f852ac3fe72777b6"),
- "plugins/CoreHome/templates/_menu.twig" => array("3865", "43eeee6891b76daed5226622ef93f251"),
+ "plugins/CoreHome/templates/_menu.twig" => array("4497", "397bd3b558938db4f997ebd4b2e6abe7"),
"plugins/CoreHome/templates/_notifications.twig" => array("333", "974e20fdb4837324b61cbfb052d3b911"),
"plugins/CoreHome/templates/_periodSelect.twig" => array("168", "abb48f443d0de1210ad879e504651d1b"),
"plugins/CoreHome/templates/ReportRenderer/_htmlReportBody.twig" => array("4474", "07aa2eda769c3db90476191cf0465f80"),
@@ -2141,7 +2161,7 @@ class Manifest {
"plugins/CoreHome/Widgets/GetPromoVideo.php" => array("1102", "c70f34a3937674843a6e30bc776ee3fd"),
"plugins/CoreHome/Widgets/GetSystemSummary.php" => array("3896", "6d6209dce21fd1aafa98f241e7c1ba75"),
"plugins/CorePluginsAdmin/angularjs/field/field.directive.html" => array("53", "156519ea10fe0c39088e98e60872e0b8"),
- "plugins/CorePluginsAdmin/angularjs/field/field.directive.js" => array("5582", "d36b297c66d744f07ee83e6c4d10dc27"),
+ "plugins/CorePluginsAdmin/angularjs/field/field.directive.js" => array("5863", "ff1f21630bbd60c8d74cdfeead4f2c60"),
"plugins/CorePluginsAdmin/angularjs/form-field/field-checkbox-array.html" => array("802", "09dd1ee9f01ff1bacc744aca39cc0ba2"),
"plugins/CorePluginsAdmin/angularjs/form-field/field-checkbox.html" => array("338", "eb18f4e52df32337e3f67bca8959c7bc"),
"plugins/CorePluginsAdmin/angularjs/form-field/field-expandable-select.html" => array("1855", "22e4652e031d90605271c0a4232952e3"),
@@ -2149,6 +2169,7 @@ class Manifest {
"plugins/CorePluginsAdmin/angularjs/form-field/field-file.html" => array("338", "68e763acb8bd7f5a407d0534069809e1"),
"plugins/CorePluginsAdmin/angularjs/form-field/field-hidden.html" => array("139", "193fe7459d27aaa2370fc29af36bb1ba"),
"plugins/CorePluginsAdmin/angularjs/form-field/field-multiselect.html" => array("365", "6b6d945e3eaedc6197ced278725f5658"),
+ "plugins/CorePluginsAdmin/angularjs/form-field/field-multituple.html" => array("318", "806c03eeff62af808f301ca4002beddb"),
"plugins/CorePluginsAdmin/angularjs/form-field/field-number.html" => array("456", "2239577eca099a82c7d8667d55b32f65"),
"plugins/CorePluginsAdmin/angularjs/form-field/field-radio.html" => array("715", "35e4a3fee2e2dc028cd6b4d48ec74803"),
"plugins/CorePluginsAdmin/angularjs/form-field/field-select.html" => array("345", "16df7f7d879bcaa7a052e09e98bdfa16"),
@@ -2160,8 +2181,8 @@ class Manifest {
"plugins/CorePluginsAdmin/angularjs/form-field/form-field.directive.html" => array("1248", "e58104a64cffa9f60a149e8de12f5eaf"),
"plugins/CorePluginsAdmin/angularjs/form-field/form-field.directive.js" => array("15341", "7e380675bd864af73b0da9f92a3ea986"),
"plugins/CorePluginsAdmin/angularjs/form/form.directive.js" => array("1005", "fa0f07caa9861fd0cc3d4b922c79bd48"),
- "plugins/CorePluginsAdmin/angularjs/plugin-settings/plugin-settings.controller.js" => array("2365", "e5ad0f34591834fa54d47be1ccd486ec"),
- "plugins/CorePluginsAdmin/angularjs/plugin-settings/plugin-settings.directive.html" => array("810", "53e8a51e790fe45dd07289cbc17934e0"),
+ "plugins/CorePluginsAdmin/angularjs/plugin-settings/plugin-settings.controller.js" => array("2454", "5356ebc78710e27f87b044a793bd77db"),
+ "plugins/CorePluginsAdmin/angularjs/plugin-settings/plugin-settings.directive.html" => array("859", "049a5b7648a62af0d9796faf6db0e4b5"),
"plugins/CorePluginsAdmin/angularjs/plugin-settings/plugin-settings.directive.js" => array("1174", "cbdde299b0bccefe0253cd8ba51a4750"),
"plugins/CorePluginsAdmin/angularjs/plugin-settings/plugin-settings.directive.less" => array("120", "b89b252c59b792e944efd74a94945dc1"),
"plugins/CorePluginsAdmin/angularjs/plugins/plugin-filter.directive.js" => array("4488", "890c0074060be93c5828e5d65d9718ce"),
@@ -2169,7 +2190,7 @@ class Manifest {
"plugins/CorePluginsAdmin/angularjs/plugins/plugin-upload.directive.js" => array("1255", "42e1ed77872b753496ed2f6af6cac1a1"),
"plugins/CorePluginsAdmin/angularjs/save-button/save-button.directive.html" => array("296", "2f5f894399f8624311b252b57d2ef684"),
"plugins/CorePluginsAdmin/angularjs/save-button/save-button.directive.js" => array("744", "c4e4cb15f7adae3cb8e21da557677e9e"),
- "plugins/CorePluginsAdmin/API.php" => array("2932", "b0d5031cd483566693e1cf5f89b8063a"),
+ "plugins/CorePluginsAdmin/API.php" => array("3134", "4111a06e7c59dd064398a3b3a7399a3e"),
"plugins/CorePluginsAdmin/Commands/ActivatePlugin.php" => array("1616", "a32ca3a072e925b8217afb4b89c6d3be"),
"plugins/CorePluginsAdmin/Commands/DeactivatePlugin.php" => array("1419", "e16183b95706ccc8571af98d7fd01c4f"),
"plugins/CorePluginsAdmin/Commands/ListPlugins.php" => array("2027", "1aec94cfc890b420d2fa1dab08bc42b9"),
@@ -2234,7 +2255,7 @@ class Manifest {
"plugins/CorePluginsAdmin/Menu.php" => array("1919", "b1f8ceff83bf0e46f848fdf95a78fcbd"),
"plugins/CorePluginsAdmin/PluginInstallerException.php" => array("290", "a4cea1cae2ebced279c90ff6f22a09f5"),
"plugins/CorePluginsAdmin/PluginInstaller.php" => array("11274", "d4de2c1ff167659110b90a213e0d29ad"),
- "plugins/CorePluginsAdmin/SettingsMetadata.php" => array("3805", "ce0340948b55186d98321d3eab358e67"),
+ "plugins/CorePluginsAdmin/SettingsMetadata.php" => array("3977", "1f582f7698615a3e417750189076fb98"),
"plugins/CorePluginsAdmin/stylesheets/plugins_admin.less" => array("2699", "125610c2820a0400172f213ee1fefb23"),
"plugins/CorePluginsAdmin/templates/license.twig" => array("62", "bf2d595751315e4588536133d3a7a9ef"),
"plugins/CorePluginsAdmin/templates/macros.twig" => array("16565", "117dd4b41d70fc47620728e27323cde0"),
@@ -2281,7 +2302,7 @@ class Manifest {
"plugins/CoreUpdater/lang/nb.json" => array("7658", "d916c13bc38722769966bbed5d0681cc"),
"plugins/CoreUpdater/lang/nl.json" => array("8097", "367c9115e15765d4fb5104a6e65f1c93"),
"plugins/CoreUpdater/lang/nn.json" => array("3892", "302f2348ab610c6935421a396e114e8e"),
- "plugins/CoreUpdater/lang/pl.json" => array("9489", "28665cc2747252fb510e8ce59223e401"),
+ "plugins/CoreUpdater/lang/pl.json" => array("9485", "24824a2d9595037aec8b4b1a7b11bbe3"),
"plugins/CoreUpdater/lang/pt-br.json" => array("7716", "cda147503464b7cc366db87521365ed8"),
"plugins/CoreUpdater/lang/pt.json" => array("4568", "e8b333712cfcac151f25eea62949d648"),
"plugins/CoreUpdater/lang/ro.json" => array("5560", "5a0a50d506510f4def92e69b704087d5"),
@@ -2317,13 +2338,6 @@ class Manifest {
"plugins/CoreUpdater/templates/updateHttpError.twig" => array("821", "1b8343396c664b9e817ea6b8289ebb01"),
"plugins/CoreUpdater/templates/updateHttpsError.twig" => array("1703", "b6ab064ce08d3595a3652ab4966cc273"),
"plugins/CoreUpdater/templates/updateSuccess.twig" => array("1454", "c7c3e839b16bee0f1781c6bd8aa09738"),
- "plugins/CoreUpdater/Test/Fixtures/DbUpdaterTestFixture.php" => array("591", "5c88368b42db58530a6123b76c27a3b8"),
- "plugins/CoreUpdater/Test/Fixtures/FailUpdateHttpsFixture.php" => array("610", "3194abee5fc46adb951b414883b141f5"),
- "plugins/CoreUpdater/Test/Integration/Commands/UpdateTest.php" => array("4203", "ef727902af4e09046e794b17a9f797b6"),
- "plugins/CoreUpdater/Test/Integration/ReleaseChannelTest.php" => array("1885", "a77e44353947e8d68d71758c6d548f21"),
- "plugins/CoreUpdater/Test/Integration/UpdateCommunicationTest.php" => array("4922", "a1417479a21d0ca34472cd83f9469879"),
- "plugins/CoreUpdater/Test/Mock/UpdaterMock.php" => array("1713", "af599ca25cb9831d551954127414c875"),
- "plugins/CoreUpdater/Test/Unit/ModelTest.php" => array("1726", "8c9ad2c04e8d53edd59c9d620a3a0e75"),
"plugins/CoreUpdater/UpdateCommunication.php" => array("5094", "ffe8d627ac75f975afddd95f0eca84ce"),
"plugins/CoreUpdater/UpdaterException.php" => array("746", "67b0f028ed004af1d6b8a59933324d6b"),
"plugins/CoreUpdater/Updater.php" => array("11533", "11a19509a999f096959979ebbc57813b"),
@@ -2335,7 +2349,7 @@ class Manifest {
"plugins/CoreVisualizations/javascripts/jqplotEvolutionGraph.js" => array("5179", "95fcfc863dbb4cc31391e70a3499a6f5"),
"plugins/CoreVisualizations/javascripts/jqplot.js" => array("42573", "9050cf784da98d9c8d9eaf45e93b6adc"),
"plugins/CoreVisualizations/javascripts/jqplotPieGraph.js" => array("2721", "2f141f5a36b394da5b73e558364aeda3"),
- "plugins/CoreVisualizations/javascripts/seriesPicker.js" => array("5845", "78e5e2ce9905509a8761795d2bcfb4f9"),
+ "plugins/CoreVisualizations/javascripts/seriesPicker.js" => array("5846", "e4a040f57672b56e2ad0924abc41baf3"),
"plugins/CoreVisualizations/JqplotDataGenerator/Chart.php" => array("3239", "e7ea8f4f1a78f92ab2be703aa56d2898"),
"plugins/CoreVisualizations/JqplotDataGenerator/Evolution.php" => array("5552", "7f51b09498bd54095736aa1e9c9449af"),
"plugins/CoreVisualizations/JqplotDataGenerator.php" => array("4747", "6dacc5f753be936d96706756d490bfaf"),
@@ -2447,7 +2461,7 @@ class Manifest {
"plugins/CustomVariables/lang/ru.json" => array("3180", "687743202b9b87d1de866a1bb7d8a2f5"),
"plugins/CustomVariables/lang/sk.json" => array("304", "2edbab7acbc510eeff67ce71c1406fc5"),
"plugins/CustomVariables/lang/sl.json" => array("81", "1dca80911cb675863506b6c9d48b5574"),
- "plugins/CustomVariables/lang/sq.json" => array("2814", "74f59be1f6f66b098fb9127500f5842e"),
+ "plugins/CustomVariables/lang/sq.json" => array("2815", "b9ff1ee0cdebb922be41ae6d3682f93f"),
"plugins/CustomVariables/lang/sr.json" => array("1836", "efa6978f2d13248faec581ea2c5651e8"),
"plugins/CustomVariables/lang/sv.json" => array("1986", "36a605e3db99785e7d7e3f0ea8fe54d7"),
"plugins/CustomVariables/lang/ta.json" => array("425", "a6bccede35fc81eca5b1983ab9cdde0e"),
@@ -2560,7 +2574,7 @@ class Manifest {
"plugins/DBStats/lang/ca.json" => array("1019", "c8c805d943a0ff65118bfd5ea28bd9ea"),
"plugins/DBStats/lang/cs.json" => array("1094", "2baa945e2edc5e337e688c5a98e8c56d"),
"plugins/DBStats/lang/cy.json" => array("50", "bba7e064e9daadf6065f4d35fac64b28"),
- "plugins/DBStats/lang/da.json" => array("1062", "b9f5c1c85d1df562801efbba7e5a56a3"),
+ "plugins/DBStats/lang/da.json" => array("1060", "8199b1937c60e60436fcccfae9fb1a27"),
"plugins/DBStats/lang/de.json" => array("1090", "c7aa60c8e47e31f7755cba3ac0744499"),
"plugins/DBStats/lang/el.json" => array("1747", "17e05e410dc16d789478f67cf6926500"),
"plugins/DBStats/lang/en.json" => array("1007", "bd62e540ed088eb48ba1e0905c51619b"),
@@ -2706,7 +2720,7 @@ class Manifest {
"plugins/DevicesDetection/lang/bg.json" => array("2740", "0f88e52372535431e77300f90c58109f"),
"plugins/DevicesDetection/lang/ca.json" => array("1067", "b140a7ecbe46951d059e9a7efe46e1c7"),
"plugins/DevicesDetection/lang/cs.json" => array("2739", "b2e5624f3b6b863d0e65c319a0ba5590"),
- "plugins/DevicesDetection/lang/da.json" => array("2261", "46490e52298049b4e0156a405db96bd6"),
+ "plugins/DevicesDetection/lang/da.json" => array("2257", "af7a9ef835088afdff9e1fe8c85615bf"),
"plugins/DevicesDetection/lang/de.json" => array("2528", "a65f89528e2dfbd1b8979248610fa690"),
"plugins/DevicesDetection/lang/el.json" => array("4245", "5513580907e1ccc2a841ebfab0b6e241"),
"plugins/DevicesDetection/lang/en.json" => array("2493", "77103217e65ca7feb04d64bd943a0b8c"),
@@ -2769,11 +2783,12 @@ class Manifest {
"plugins/DevicesDetection/VisitorDetails.php" => array("5746", "2c7c420c4220dcf2313ac4a58a23f361"),
"plugins/Diagnostics/Commands/AnalyzeArchiveTable.php" => array("3373", "a4f0e69a75e019b57a60680e39c75fff"),
"plugins/Diagnostics/Commands/Run.php" => array("3215", "e7e834d8064bfe9c329fe9447da202ec"),
- "plugins/Diagnostics/config/config.php" => array("2170", "2d363402eade49ca3aa82efda940e3f5"),
+ "plugins/Diagnostics/config/config.php" => array("2241", "690590f328cb97f35fcded396133fed5"),
"plugins/Diagnostics/ConfigReader.php" => array("5840", "4a3f29ea654fc0404c21a16183f61c7d"),
"plugins/Diagnostics/Controller.php" => array("2044", "70ea9c19c4c32d0f58cf1a12c0f4f23f"),
"plugins/Diagnostics/Diagnostic/CronArchivingCheck.php" => array("1260", "cd8c2c3c3e5057f80e99065991a32a70"),
"plugins/Diagnostics/Diagnostic/DbAdapterCheck.php" => array("3293", "ce936823d801acfdc20de4092467c48f"),
+ "plugins/Diagnostics/Diagnostic/DbOverSSLCheck.php" => array("2114", "e5facc0c3f55912ae5567abce4e11e4e"),
"plugins/Diagnostics/Diagnostic/Diagnostic.php" => array("1136", "3410ece2566296f015ab5bb72b2ea224"),
"plugins/Diagnostics/Diagnostic/DiagnosticResultItem.php" => array("776", "99f18f55d2eafab1132e2bd19a80f035"),
"plugins/Diagnostics/Diagnostic/DiagnosticResult.php" => array("2355", "01a51938f182851b9db32309d76a816a"),
@@ -2798,6 +2813,7 @@ class Manifest {
"plugins/Diagnostics/Diagnostic/WriteAccessCheck.php" => array("2725", "31ed361cf368e67ff9a5051b0a160a6c"),
"plugins/Diagnostics/lang/ar.json" => array("289", "8660ce2ea366ad22d43cbc202e38a3b9"),
"plugins/Diagnostics/lang/cs.json" => array("585", "bc17674e54a2372ebfb4db36de8bc1e6"),
+ "plugins/Diagnostics/lang/da.json" => array("110", "b70d94fbb56a0fb57ebc10bf0fa9fb05"),
"plugins/Diagnostics/lang/de.json" => array("629", "23eb6dcf2bac833f56a7a54fac9bc8d8"),
"plugins/Diagnostics/lang/el.json" => array("947", "5e6720598ae9c89a253474aa49a53acb"),
"plugins/Diagnostics/lang/en.json" => array("542", "5cec4a85eb1e76b7ae1a13ce5af0ea28"),
@@ -2825,14 +2841,6 @@ class Manifest {
"plugins/Diagnostics/plugin.json" => array("99", "01f8e3cd95ff05a9ab5730e556995056"),
"plugins/Diagnostics/stylesheets/configfile.less" => array("402", "070b240c7c041dbc1cca463cda9762e2"),
"plugins/Diagnostics/templates/configfile.twig" => array("2264", "081011a2bb29bb9bc8cc5f139dc81f4e"),
- "plugins/Diagnostics/Test/Integration/Commands/AnalyzeArchiveTableTest.php" => array("7213", "7cd32d9dcc238c52ad04e32b6d7d6369"),
- "plugins/Diagnostics/Test/Integration/ConfigReaderTest.php" => array("10288", "f7184d4c8fa1f9d1d41b4a4cac6888a8"),
- "plugins/Diagnostics/Test/Mock/DiagnosticWithError.php" => array("538", "1d7a7a0b73e46849aebbe593846884d6"),
- "plugins/Diagnostics/Test/Mock/DiagnosticWithSuccess.php" => array("539", "4ecb50422bda00df5dd8bc80972e7123"),
- "plugins/Diagnostics/Test/Mock/DiagnosticWithWarning.php" => array("544", "d0bbf0be19be9c899786f87efe6ec87c"),
- "plugins/Diagnostics/Test/Unit/Diagnostic/DiagnosticResultTest.php" => array("1370", "2fefafbb819a8360b1bab02375504550"),
- "plugins/Diagnostics/Test/Unit/DiagnosticReportTest.php" => array("1726", "aba4d15208fb3c55bcd62dee82824bdb"),
- "plugins/Diagnostics/Test/Unit/DiagnosticServiceTest.php" => array("1525", "f75442d5559cf68c2946687fd0cc957b"),
"plugins/Ecommerce/Categories/EcommerceCategory.php" => array("394", "04c1ddbab129f2a323843109c6d027c5"),
"plugins/Ecommerce/Categories/EcommerceLogSubcategory.php" => array("406", "54666ba7a4871c54479de9a59e618dcb"),
"plugins/Ecommerce/Categories/EcommerceOverviewSubcategory.php" => array("409", "2bd294b1ade2e6e8b9e645d260744287"),
@@ -2923,7 +2931,7 @@ class Manifest {
"plugins/Events/lang/bg.json" => array("1051", "a37508a3c4f429f6c724d9c3c25c2fc3"),
"plugins/Events/lang/ca.json" => array("531", "471838d4df742724b4a94eee292beee1"),
"plugins/Events/lang/cs.json" => array("1521", "a78c91bb5c725a9d72ac2d513a5ef282"),
- "plugins/Events/lang/da.json" => array("1451", "aea0fdc0c97254983dd79c2499df1bb3"),
+ "plugins/Events/lang/da.json" => array("1705", "70ba1ab441b3cc13f41c30f76cd58bf7"),
"plugins/Events/lang/de.json" => array("1742", "ffef3a592fc2bcc71a2407ea1eba9a99"),
"plugins/Events/lang/el.json" => array("2362", "616aee33a6ee55829bad457d1fe0a70c"),
"plugins/Events/lang/en.json" => array("1565", "f621655ef905edf888687a2923e81980"),
@@ -3004,7 +3012,7 @@ class Manifest {
"plugins/ExampleReport/Reports/GetExampleReport.php" => array("3997", "43a9e6aec331ae6ff070fc068023d303"),
"plugins/ExampleSettingsPlugin/MeasurableSettings.php" => array("1954", "5ae6b4e4a5c82966c9944321e8784e1f"),
"plugins/ExampleSettingsPlugin/plugin.json" => array("168", "0980414e20d2d46e9d173738d8cc0d6a"),
- "plugins/ExampleSettingsPlugin/SystemSettings.php" => array("3268", "d04ffebd61f72c9a7e5a8aee2358a389"),
+ "plugins/ExampleSettingsPlugin/SystemSettings.php" => array("3401", "0f85cfebc7852c1cd6896ccfa3ed5580"),
"plugins/ExampleSettingsPlugin/UserSettings.php" => array("2666", "89368bc0f275a72ca1dfa3f4fd9c5671"),
"plugins/ExampleTheme/CHANGELOG.md" => array("44", "9416978cbe1ca21a4362454668f1293a"),
"plugins/ExampleTheme/docs/faq.md" => array("35", "8f3ce8d37923aed9b41a1591447e2cbd"),
@@ -3070,7 +3078,7 @@ class Manifest {
"plugins/Feedback/lang/bn.json" => array("69", "267c5b50e912af191bb3d14c6add0a85"),
"plugins/Feedback/lang/ca.json" => array("550", "f1b731eec9d03ced9290e22602a06f12"),
"plugins/Feedback/lang/cs.json" => array("3042", "46427676a0cd31b42dc609f400dfcdbc"),
- "plugins/Feedback/lang/da.json" => array("1845", "6e2b5cc94842a7fcc88c0b3a4711afb2"),
+ "plugins/Feedback/lang/da.json" => array("1936", "a225dafa525f3b8ee16b736b6c3f0914"),
"plugins/Feedback/lang/de.json" => array("3323", "68064d9af3ac297abae33c91c87e097d"),
"plugins/Feedback/lang/el.json" => array("4944", "35a0fc946d55f5d3b67e9bf4a5a13187"),
"plugins/Feedback/lang/en.json" => array("2877", "75a0fe0c3c96b79d29a4f4d0de559942"),
@@ -3113,10 +3121,22 @@ class Manifest {
"plugins/Feedback/Menu.php" => array("548", "75f56ab64bb3a2620ed88c6d19be78dc"),
"plugins/Feedback/stylesheets/feedback.less" => array("1524", "dc4b96cc2a44a62aa0fe6029a773bb73"),
"plugins/Feedback/templates/index.twig" => array("9573", "511ef17e18ae7b298b6e32056ea2da1b"),
+ "plugins/GeoIp2/Columns/Region.php" => array("462", "a64d17750b25410a318f82a8ad144414"),
+ "plugins/GeoIp2/Commands/ConvertRegionCodesToIso.php" => array("4397", "4de34d835319a656dff8321b86a731ee"),
+ "plugins/GeoIp2/data/isoRegionNames.php" => array("173439", "481636460defb17475757b48ec0f65a1"),
+ "plugins/GeoIp2/data/regionMapping.php" => array("135174", "52be661ee56a8dfbc30ac70a4e0a5390"),
+ "plugins/GeoIp2/GeoIP2AutoUpdater.php" => array("22611", "2ed4b181e218606e40b8b13138d5bc46"),
+ "plugins/GeoIp2/GeoIp2.php" => array("646", "42aebd9f2c0884c82bd597c93ce4c8a2"),
+ "plugins/GeoIp2/lang/en.json" => array("1362", "1a316aaea4165570d6b44cfec40815b6"),
+ "plugins/GeoIp2/LocationProvider/GeoIp2.php" => array("8596", "5d236d59be7f09aaa51e54dd128f1708"),
+ "plugins/GeoIp2/LocationProvider/GeoIp2/Php.php" => array("11662", "d20e9990494781f5069249f2839daab4"),
+ "plugins/GeoIp2/LocationProvider/GeoIp2/ServerModule.php" => array("11866", "56711c05d7488e0a181f6be9ed04c7b8"),
+ "plugins/GeoIp2/SystemSettings.php" => array("1255", "42e8459a50f3e4bd5b83b5bc9b462d46"),
+ "plugins/GeoIp2/Tasks.php" => array("581", "043f480dc45aeb28f272079f7c4f1d91"),
"plugins/Goals/angularjs/common/directives/goal-page-link.js" => array("1320", "f05806c4daa9195092ffdcabc1a3bfd8"),
"plugins/Goals/angularjs/manage-goals/manage-goals.controller.js" => array("7270", "9a9a4e0abbc29b2a87167688b76a76a9"),
"plugins/Goals/angularjs/manage-goals/manage-goals.directive.js" => array("935", "49252362a94daffe2efb529fff38045d"),
- "plugins/Goals/API.php" => array("28303", "a0ed764afab45a7e7bbe954da73560f4"),
+ "plugins/Goals/API.php" => array("28985", "cc28fe74d87d61cd4b55c3957d7892b7"),
"plugins/Goals/Archiver.php" => array("15402", "792fc1d66c67003bcb81171444869e03"),
"plugins/Goals/Categories/AddANewGoalSubcategory.php" => array("398", "3185aa407eea836f05d2f91c387fe4da"),
"plugins/Goals/Categories/GoalsCategory.php" => array("377", "ab1e0c1f0daf0f63310d50f5c50989fc"),
@@ -3142,7 +3162,7 @@ class Manifest {
"plugins/Goals/Conversions.php" => array("1074", "841047921e1a5d6651257a4e67087ca7"),
"plugins/Goals/DataTable/Filter/AppendNameToColumnNames.php" => array("1544", "6a990a585c5e30871517a07c87dcd2f9"),
"plugins/Goals/GoalDimension.php" => array("905", "0c901f713d676131bafab112a53fd5ae"),
- "plugins/Goals/Goals.php" => array("14238", "50ff74067718fac925f9183e6218dca3"),
+ "plugins/Goals/Goals.php" => array("14780", "f99935063c26cc328cb9e39972d0707f"),
"plugins/Goals/lang/am.json" => array("136", "bd8324497f6c1a1e8147502df8649b5b"),
"plugins/Goals/lang/ar.json" => array("4172", "a5672ffad9603ccf5970700022dbaeab"),
"plugins/Goals/lang/be.json" => array("8557", "b0d9f52e4794623113e173ad5d048e1f"),
@@ -3150,10 +3170,10 @@ class Manifest {
"plugins/Goals/lang/bs.json" => array("389", "448905e1a6a1d0348c6a9482013781aa"),
"plugins/Goals/lang/ca.json" => array("7004", "2699233266739a01e423284e6e00c66a"),
"plugins/Goals/lang/cs.json" => array("8940", "2e24c9e2f2f6dd7d0c8616a11942835a"),
- "plugins/Goals/lang/da.json" => array("8531", "81cc048c3ff82ce19a30725c9b71edc8"),
- "plugins/Goals/lang/de.json" => array("9262", "232152132eb2abe56c9b6f3866d11475"),
- "plugins/Goals/lang/el.json" => array("14578", "b2070c5688c6dfa21a19aa106d211d66"),
- "plugins/Goals/lang/en.json" => array("8592", "cae6e5e6c707b105a882f80347890447"),
+ "plugins/Goals/lang/da.json" => array("8507", "be9f85458777e84184de34c09c29fad6"),
+ "plugins/Goals/lang/de.json" => array("9292", "f400071568316f92c04b7b02ee9e3f04"),
+ "plugins/Goals/lang/el.json" => array("14615", "32b93c1167ba99af771a02e316b865af"),
+ "plugins/Goals/lang/en.json" => array("8622", "c4a33a219c22ebc3908ee2b3c4478edf"),
"plugins/Goals/lang/es.json" => array("9543", "8bfca1aa11d8adcdf7368e6ec2a0453b"),
"plugins/Goals/lang/et.json" => array("3315", "b2e950580563c5395e8fb1856628b4d9"),
"plugins/Goals/lang/eu.json" => array("1017", "35c35745a1403282c2240e1f97b7a87c"),
@@ -3175,26 +3195,26 @@ class Manifest {
"plugins/Goals/lang/nb.json" => array("4990", "c51121c1bbc5b7a9621d6391175e1bf9"),
"plugins/Goals/lang/nl.json" => array("9529", "1381bf46a758729787a7466581fd5ea8"),
"plugins/Goals/lang/nn.json" => array("2005", "df1396787af103b06b465ebd47ce5db8"),
- "plugins/Goals/lang/pl.json" => array("9327", "8b67496cfc2d909a2d8db84c35d21632"),
+ "plugins/Goals/lang/pl.json" => array("9355", "0c6ae98d813f6cfc8a0c1e9364d39230"),
"plugins/Goals/lang/pt-br.json" => array("8788", "9b922444b9778bb632fc52f8718a23a7"),
"plugins/Goals/lang/pt.json" => array("7311", "b7de819c6148911495f85b1455e5fead"),
"plugins/Goals/lang/ro.json" => array("7209", "739528f4df13aaf5723c18a845708e6f"),
"plugins/Goals/lang/ru.json" => array("12609", "eca0fee0644e8cc233a160d2acd87a86"),
"plugins/Goals/lang/sk.json" => array("2861", "8587deae65693e3edd9bb7fe10e49697"),
"plugins/Goals/lang/sl.json" => array("1648", "3f79dfee0f48c91f7ae6d819254efe02"),
- "plugins/Goals/lang/sq.json" => array("9823", "618b44ad8a8ea74ec7a6ce2da59146e0"),
+ "plugins/Goals/lang/sq.json" => array("9810", "4a692acb6f9b2f79224e8256e0aa06b5"),
"plugins/Goals/lang/sr.json" => array("8516", "f7f725c06ba439b4a186aaf81fac0510"),
"plugins/Goals/lang/sv.json" => array("8737", "021c3e8aea5314f4176833fc157cefcd"),
"plugins/Goals/lang/ta.json" => array("1589", "d464ce95ea3915b874b9111850ab8c9d"),
"plugins/Goals/lang/te.json" => array("242", "4c5d0b0576b482bb8391abb7294a7fd3"),
"plugins/Goals/lang/th.json" => array("5001", "074859cb67e60c56e9d1fed439e69034"),
- "plugins/Goals/lang/tr.json" => array("9336", "0bb166d38e53830011cf092225602ab8"),
+ "plugins/Goals/lang/tr.json" => array("9366", "11f54e22b905810bdfa8c789e6e1a495"),
"plugins/Goals/lang/uk.json" => array("12615", "c95a8a0b5635cd242420fd677258c46a"),
"plugins/Goals/lang/vi.json" => array("8301", "dc76f1ef48922d07aba17eeb2013a2ff"),
"plugins/Goals/lang/zh-cn.json" => array("6096", "cac8ce7b75c4e01ccda96d594f2c307b"),
"plugins/Goals/lang/zh-tw.json" => array("7896", "63b59f85a6abee6e87b5e714ad2435fa"),
"plugins/Goals/Menu.php" => array("868", "2d0c325f2f5c11e838d54838da55a1a4"),
- "plugins/Goals/Model.php" => array("2743", "2c4ee0df3d3879cf09c628da9f9fb65f"),
+ "plugins/Goals/Model.php" => array("2928", "e3790dd85c99a2d9ad1466b60d4cbf7e"),
"plugins/Goals/Pages.php" => array("11859", "37f7b32d7f67a75493586d7eb8530863"),
"plugins/Goals/Reports/Base.php" => array("1445", "67b8652386cde6cdc75317d6ff0e1a4a"),
"plugins/Goals/Reports/GetDaysToConversion.php" => array("2076", "3211996a2c56b01efe0917497f7bb5d2"),
@@ -3332,7 +3352,7 @@ class Manifest {
"plugins/Installation/FormDatabaseSetup.php" => array("12519", "fcb22f3659cffd432defe65005ff1f5c"),
"plugins/Installation/FormDefaultSettings.php" => array("508", "d51b3027dc005df92ee2a47faced2c83"),
"plugins/Installation/FormFirstWebsiteSetup.php" => array("3481", "3c47a735811fb3d511906d61cdddc5cb"),
- "plugins/Installation/FormSuperUser.php" => array("4328", "49e04f6c85e869acde7ab3c7cd1a425c"),
+ "plugins/Installation/FormSuperUser.php" => array("4193", "28b5e48e8e1507c423750a316eb6d821"),
"plugins/Installation/Installation.php" => array("4360", "81bac71832826e14380329e57433ab6e"),
"plugins/Installation/javascripts/installation.js" => array("597", "78d7f6ed92a460decae54ee75b4c49d9"),
"plugins/Installation/lang/am.json" => array("3827", "06fde1279a83b60036516aa2bc915566"),
@@ -3343,10 +3363,10 @@ class Manifest {
"plugins/Installation/lang/bs.json" => array("148", "c182a077dbfc8b4879f4746a0cec1a8d"),
"plugins/Installation/lang/ca.json" => array("9642", "2f803da5e02bb99360f1ceb3b29e1aee"),
"plugins/Installation/lang/cs.json" => array("14318", "025c92d891c903465e8ea45d27c51d53"),
- "plugins/Installation/lang/da.json" => array("12403", "3d91db638e12c8d3b55cad0a506b73f0"),
- "plugins/Installation/lang/de.json" => array("16705", "1e531e4671c7f9b4b93ab56664109888"),
- "plugins/Installation/lang/el.json" => array("25572", "368609e2947ab4f43dc8f02dbe8abc11"),
- "plugins/Installation/lang/en.json" => array("14651", "ddb6584618ddfb6027b37a5f7fbd6e21"),
+ "plugins/Installation/lang/da.json" => array("12618", "9ea138d49ddf3f8135956f6184126b73"),
+ "plugins/Installation/lang/de.json" => array("17094", "8ccdac4eb5b4f517baa988eb2dcfb2d9"),
+ "plugins/Installation/lang/el.json" => array("26582", "0651af4650e977ae4e83b5deb3e8682c"),
+ "plugins/Installation/lang/en.json" => array("15226", "5c42b19bc05c6e1a12d76aab6f1eab02"),
"plugins/Installation/lang/es.json" => array("14770", "efa6fdcbaef8e85b6a03ddee2706c343"),
"plugins/Installation/lang/et.json" => array("6733", "5619cacfe74a5b3c862b8fb5b255e743"),
"plugins/Installation/lang/eu.json" => array("4663", "7127b448d671f4dbd9fb9e24b11d62d4"),
@@ -3369,25 +3389,25 @@ class Manifest {
"plugins/Installation/lang/nb.json" => array("13276", "a66f5a3e3f52fb6f382fd9102d3602b8"),
"plugins/Installation/lang/nl.json" => array("14374", "5d0c084ed7e47754f0fdc6fe09abc4e6"),
"plugins/Installation/lang/nn.json" => array("5533", "8fe0484fa22fbc921eec7d50e463e17f"),
- "plugins/Installation/lang/pl.json" => array("16139", "190642d398faf05d8c6ff9f92f161de8"),
+ "plugins/Installation/lang/pl.json" => array("16774", "6002fec408b39ecb34729f102dce2b22"),
"plugins/Installation/lang/pt-br.json" => array("13718", "d56bebeec18342b61898f9b13c3dcb15"),
"plugins/Installation/lang/pt.json" => array("7088", "8cde3b9aa47df9d9631dceb263690f84"),
"plugins/Installation/lang/ro.json" => array("11758", "08288d75c9f2487887d37968cda0492b"),
"plugins/Installation/lang/ru.json" => array("20614", "41123d3528c565977d4a5de3453e8ea0"),
"plugins/Installation/lang/sk.json" => array("5924", "cce6371d20efe4df4ab98e4afa3da4d5"),
"plugins/Installation/lang/sl.json" => array("1263", "6735bce9ee51a3d88ab2bd4a34cae814"),
- "plugins/Installation/lang/sq.json" => array("16479", "3099e8c691358f3b435a32b54cac51ba"),
+ "plugins/Installation/lang/sq.json" => array("17198", "c5254368d006499cb7cfc6193d6435de"),
"plugins/Installation/lang/sr.json" => array("13665", "45b7390f030913966d0b2f89a04d78b8"),
"plugins/Installation/lang/sv.json" => array("14291", "47d572fdea1cb720d87cf89fbb0f4651"),
"plugins/Installation/lang/ta.json" => array("6322", "59bd0a6af4f6bb39a03edb3adeefdde0"),
"plugins/Installation/lang/te.json" => array("634", "3c2a74c59e80cf5f41bb46478533727e"),
"plugins/Installation/lang/th.json" => array("12301", "b11245beea723879015cf6bbb6504904"),
"plugins/Installation/lang/tl.json" => array("12075", "b29d5dfddf3fe3ca8253499cacf4890a"),
- "plugins/Installation/lang/tr.json" => array("16241", "2afc92c4260e1f3ea8ccb42c47e6ce13"),
+ "plugins/Installation/lang/tr.json" => array("16891", "e6f678681b040f49f50e73a2f5ebcb43"),
"plugins/Installation/lang/uk.json" => array("20446", "3e82ab55ef1c911c139dc05b0670511c"),
"plugins/Installation/lang/vi.json" => array("11768", "d6a400f58ed6252e930b3528262c502f"),
"plugins/Installation/lang/zh-cn.json" => array("12644", "997720b7f5045aff89d9c597cd8914ae"),
- "plugins/Installation/lang/zh-tw.json" => array("13856", "929ca3dd2392ac92dede44b4154c49be"),
+ "plugins/Installation/lang/zh-tw.json" => array("14419", "76dba71dff6a1a6735d7fb47c2d1e45f"),
"plugins/Installation/Menu.php" => array("594", "9041123f60ee642e71622c992842b7e7"),
"plugins/Installation/ServerFilesGenerator.php" => array("9595", "18485ac7ea4ad3f6ed0d23f5c1a90c21"),
"plugins/Installation/stylesheets/installation.css" => array("2085", "897623a90ac08f09ec739c51354d6df4"),
@@ -3474,7 +3494,7 @@ class Manifest {
"plugins/LanguagesManager/angularjs/translationsearch/translationsearch.directive.html" => array("1918", "98498e01937d857b4002250e318f0b0f"),
"plugins/LanguagesManager/angularjs/translationsearch/translationsearch.directive.js" => array("885", "b71bf8fbf51de16b778bf0aeac27ae08"),
"plugins/LanguagesManager/API.php" => array("11822", "5599ef069fea2d2d45c99b2d08ce5b31"),
- "plugins/LanguagesManager/Commands/CreatePull.php" => array("8754", "87712ef85275da13192731ad667c5788"),
+ "plugins/LanguagesManager/Commands/CreatePull.php" => array("8756", "1abfc672e319983c3356ec33915eb7c3"),
"plugins/LanguagesManager/Commands/FetchTranslations.php" => array("4683", "b389a1d449084c21f8b4c2deb5a39f2f"),
"plugins/LanguagesManager/Commands/LanguageCodes.php" => array("1035", "9e57c16c0f05523a6b14bbb30aadbad5"),
"plugins/LanguagesManager/Commands/LanguageNames.php" => array("1043", "d2869bebc1206c6877bd8e695004a97f"),
@@ -3534,16 +3554,6 @@ class Manifest {
"plugins/LanguagesManager/Model.php" => array("2690", "50ab4019bc38717c3c8d2cded2df8aef"),
"plugins/LanguagesManager/templates/getLanguagesSelector.twig" => array("916", "518bdb02b3a0836de169f315b5bdf527"),
"plugins/LanguagesManager/templates/searchTranslation.twig" => array("290", "ab14f4bf4d867ad858944e348833146a"),
- "plugins/LanguagesManager/Test/Integration/LanguagesManagerTest.php" => array("8939", "7d3b0a16360e0eefcdc29d68bd75f653"),
- "plugins/LanguagesManager/Test/Integration/ModelTest.php" => array("3607", "aa6bd57ee646745bbe29669a336d3946"),
- "plugins/LanguagesManager/Test/Unit/TranslationWriter/Filter/ByBaseTranslationsTest.php" => array("4581", "d2d5d26fe60f3879944f68ddd2caf1ee"),
- "plugins/LanguagesManager/Test/Unit/TranslationWriter/Filter/ByParameterCountTest.php" => array("3526", "6a477f568286d4c0e259b69ef987faa2"),
- "plugins/LanguagesManager/Test/Unit/TranslationWriter/Filter/EmptyTranslationsTest.php" => array("2683", "23f10cea3196c7d65bf231938c63261e"),
- "plugins/LanguagesManager/Test/Unit/TranslationWriter/Filter/EncodedEntitiesTest.php" => array("3164", "3cf764ed8f0b6258df72a0a9fb234611"),
- "plugins/LanguagesManager/Test/Unit/TranslationWriter/Filter/UnnecassaryWhitespacesTest.php" => array("4634", "f7fc3b6ae6e4850c9617dda02a038bcd"),
- "plugins/LanguagesManager/Test/Unit/TranslationWriter/Validate/CoreTranslationsTest.php" => array("3092", "3339a3e50305dbb54c99aea7e55adec6"),
- "plugins/LanguagesManager/Test/Unit/TranslationWriter/Validate/NoScriptsTest.php" => array("2895", "0c507a2f50543e5ea3bb60f132c45301"),
- "plugins/LanguagesManager/Test/Unit/TranslationWriter/WriterTest.php" => array("8150", "374b3122cd48b6efe846fc8ea1febb7e"),
"plugins/LanguagesManager/TranslationWriter/Filter/ByBaseTranslations.php" => array("1739", "0b905abf6386440f5b1de2c0d7617577"),
"plugins/LanguagesManager/TranslationWriter/Filter/ByParameterCount.php" => array("2478", "3923cea8c0afabc65d1d555201b9387d"),
"plugins/LanguagesManager/TranslationWriter/Filter/EmptyTranslations.php" => array("1168", "772a04a5fa008bfa09c74b580187cdf5"),
@@ -3555,10 +3565,10 @@ class Manifest {
"plugins/LanguagesManager/TranslationWriter/Validate/ValidateAbstract.php" => array("714", "9929224b721d01e578e9bfac137aa72e"),
"plugins/LanguagesManager/TranslationWriter/Writer.php" => array("9648", "5b8b237c2a98c1be73d490b91ad72032"),
"plugins/LanguagesManager/Updates/2.15.1-b1.php" => array("882", "2371502d1afd24c9daf60786e31be967"),
- "plugins/Live/API.php" => array("17217", "84bd1a7ffec589b5c9384196353c6260"),
+ "plugins/Live/API.php" => array("17435", "19b8c95878d52236b5450b08d25a3dae"),
"plugins/Live/Categories/LiveCategory.php" => array("323", "a0c3a946c56f06cda77e7cf73364c0d8"),
"plugins/Live/Categories/VisitorLogSubcategory.php" => array("397", "59b7f3dfb44b4b693bb040a2a02aaf74"),
- "plugins/Live/Controller.php" => array("8078", "d2d9605fd7e8538c4cd0b164deb83a9c"),
+ "plugins/Live/Controller.php" => array("7907", "f4405dde21543bfa7dc95ab5d0c3b391"),
"plugins/Live/images/file0.png" => array("593", "d3bd9b53340629a9ba00ff9d3c295995"),
"plugins/Live/images/file1.png" => array("637", "c1844ec7c1a8acf7573a54f78bf3565a"),
"plugins/Live/images/file2.png" => array("642", "c441ff9c29af20f36c4a2939184b1e7e"),
@@ -3576,12 +3586,12 @@ class Manifest {
"plugins/Live/images/visitorlog-hover.png" => array("1275", "f9f2f1195e80785df8338375864194ee"),
"plugins/Live/images/visitorlog.png" => array("1273", "8b07aad24ebeac1745b75e51ac439816"),
"plugins/Live/images/visitorProfileLaunch.png" => array("661", "60ac00d9db615450c8d6090521f30330"),
- "plugins/Live/javascripts/live.js" => array("9969", "7b8709b1890401df86af5eef3e49b897"),
+ "plugins/Live/javascripts/live.js" => array("10519", "ac55018f9f643bb8a7ac04d54d733a80"),
"plugins/Live/javascripts/rowaction.js" => array("5677", "08e19d4c942d8d5b15db1f3b965713b1"),
"plugins/Live/javascripts/SegmentedVisitorLog.js" => array("4356", "58fa204fa333e2dbefa8928d112d7284"),
"plugins/Live/javascripts/visitorActions.js" => array("2942", "33ece23e49ee0bed415eef98b4295968"),
"plugins/Live/javascripts/visitorLog.js" => array("1315", "bfb5e094ab1e01b31a501b52b9a2fc64"),
- "plugins/Live/javascripts/visitorProfile.js" => array("9558", "06362f49986a5102096f3237b32cb5f1"),
+ "plugins/Live/javascripts/visitorProfile.js" => array("9638", "178cfbcefae6df30352b805b7fa12e05"),
"plugins/Live/lang/ar.json" => array("569", "33d6bec3b301388b39c65055496ede3c"),
"plugins/Live/lang/be.json" => array("1301", "2f4a0544613637c1b46971edfb9c5b96"),
"plugins/Live/lang/bg.json" => array("3148", "93fc6a3744e14022f8c3069ec96b7fd5"),
@@ -3631,7 +3641,7 @@ class Manifest {
"plugins/Live/lang/zh-cn.json" => array("2345", "368d8982d60843107c89bd74f6efe89e"),
"plugins/Live/lang/zh-tw.json" => array("3532", "628273da6d055c18ebc1159a7ec124fa"),
"plugins/Live/Live.php" => array("5348", "f1d201fa040a8d1481fa7e716a839662"),
- "plugins/Live/Model.php" => array("12127", "34166c719360cfb1fd3ae3e8ffad8bf0"),
+ "plugins/Live/Model.php" => array("12375", "c057736cc9d36ecdb960a9f790806516"),
"plugins/Live/ProfileSummary/ImportantVisits.php" => array("814", "e8b12a836cd8ad235a03928057240fdb"),
"plugins/Live/ProfileSummary/ProfileSummaryAbstract.php" => array("1190", "7f15b2f6eff69053a22886917f6746c0"),
"plugins/Live/ProfileSummaryProvider.php" => array("2796", "3bc0d7fce0bc13b9a305ad1a12f41f20"),
@@ -3640,7 +3650,7 @@ class Manifest {
"plugins/Live/Reports/GetLastVisitsDetails.php" => array("1214", "40ffc4c5925a896a0f796874599c99f6"),
"plugins/Live/Reports/GetLastVisits.php" => array("439", "6bfa5fc7d51c2c4d077e1716869070b8"),
"plugins/Live/Reports/GetSimpleLastVisitCount.php" => array("2291", "1a6c55d0b4b6a611aba3110b19dedee9"),
- "plugins/Live/stylesheets/live.less" => array("6308", "14f8b0ed1b54a8b4690d8d8df3099e0d"),
+ "plugins/Live/stylesheets/live.less" => array("6874", "e34add93962aeea77b91a502521fb119"),
"plugins/Live/stylesheets/visitor_profile.less" => array("6622", "4c4adca80226c1e3b768a3b27365c6f4"),
"plugins/Live/templates/_actionCommon.twig" => array("1958", "298c6deece7d864b013b4f26e595f5f2"),
"plugins/Live/templates/_actionEcommerce.twig" => array("3233", "569474cbf443f2120d64a39bf91395ac"),
@@ -3649,7 +3659,7 @@ class Manifest {
"plugins/Live/templates/_actionTooltip.twig" => array("377", "08865f9bf9a075bb8d82d30a89962a96"),
"plugins/Live/templates/ajaxTotalVisitors.twig" => array("41", "5c57d90d62eab1c2c11969f14ff6faaa"),
"plugins/Live/templates/_dataTableViz_visitorLog.twig" => array("2700", "d09324789468782d7ee0f252ead23bd5"),
- "plugins/Live/templates/getLastVisitsStart.twig" => array("11335", "e72196e3ba15be1a63fed50b9a4cf53c"),
+ "plugins/Live/templates/getLastVisitsStart.twig" => array("8098", "ba1af707763cb7c101c6244c29070289"),
"plugins/Live/templates/getSimpleLastVisitCount.twig" => array("1495", "ab295fb6b5505873cedc80050c9f8a01"),
"plugins/Live/templates/getVisitList.twig" => array("1919", "fd4f3aebad6f5b6a92eb7f5ce7222e3b"),
"plugins/Live/templates/getVisitorProfilePopup.twig" => array("5648", "9d9226ab460f7111fd019c808199e966"),
@@ -3658,16 +3668,16 @@ class Manifest {
"plugins/Live/templates/_profileSummary.twig" => array("3384", "225af1841836faf7bdbc10cad46e0bc6"),
"plugins/Live/templates/_profileSummaryVisits.twig" => array("2287", "5ba475ac1373f3079d7033caea898c7a"),
"plugins/Live/templates/_totalVisitors.twig" => array("1171", "c0ea7e433e2c5964047d8253ebc35b51"),
- "plugins/Live/templates/_visitorDetails.twig" => array("1460", "c8ce1fcedd82fa91963e301a431693fd"),
+ "plugins/Live/templates/_visitorDetails.twig" => array("1799", "a3f347b053b85aec0ed2ed304ba6d733"),
"plugins/Live/templates/_visitorLogIcons.twig" => array("5346", "7572a585ac80c4ca049976927c668df3"),
"plugins/Live/VisitorDetailsAbstract.php" => array("7194", "f3bbdcf248c12711b2cd1c5b45963b2f"),
- "plugins/Live/VisitorDetails.php" => array("8900", "d600ff1276a639ad16954b6d0de27a24"),
+ "plugins/Live/VisitorDetails.php" => array("8964", "9e04bf5675403f9230212fbb4e0782b2"),
"plugins/Live/VisitorFactory.php" => array("1605", "0dfa69c67b7655a57034ae68f692b98d"),
"plugins/Live/VisitorInterface.php" => array("379", "3d2df929580b3fbc46622906b33fc02a"),
"plugins/Live/Visitor.php" => array("11721", "2b694dc0004f93c5276aec9becc27a03"),
"plugins/Live/VisitorProfile.php" => array("3013", "403da9651e92c6ef2b2728d934c98e4d"),
"plugins/Live/Visualizations/VisitorLog/Config.php" => array("913", "ea50b1c371907681d7dc5dcb611053a9"),
- "plugins/Live/Visualizations/VisitorLog.php" => array("4296", "a31bf844d83c6b16b8b9723d5534b3ea"),
+ "plugins/Live/Visualizations/VisitorLog.php" => array("4587", "b17085d5320af6082dfb93472549d982"),
"plugins/Live/Widgets/GetVisitorProfilePopup.php" => array("639", "65f70febbcb8db19ce8ab389639a612f"),
"plugins/Live/Widgets/Widget.php" => array("469", "7a2459c69c6dc47ea9e79ea86630f7fb"),
"plugins/Login/Auth.php" => array("5077", "970a8d00b520533fc55ede2ed68f38d0"),
@@ -3683,7 +3693,7 @@ class Manifest {
"plugins/Login/lang/bn.json" => array("1641", "783ba2320076b2b4472df68cebcea1c5"),
"plugins/Login/lang/ca.json" => array("1531", "5f193846cf01eb6c1f786e964e11c0ae"),
"plugins/Login/lang/cs.json" => array("1980", "a30b3a0ffc835243888f267faf9f9f8b"),
- "plugins/Login/lang/da.json" => array("1636", "2fe24a6d415dabbee3a9fd4bb9e56ff8"),
+ "plugins/Login/lang/da.json" => array("1726", "ee63ed3a6cecdc9c121dd31c891571fc"),
"plugins/Login/lang/de.json" => array("2992", "551e6ed2d9159785658d67d279742dfb"),
"plugins/Login/lang/el.json" => array("4861", "1fb1acef27694da0c00a61d9edcc9cf5"),
"plugins/Login/lang/en.json" => array("2637", "fc66058280dad486f504ccbc41ef4181"),
@@ -3733,7 +3743,7 @@ class Manifest {
"plugins/Login/stylesheets/login.less" => array("1729", "a7f9da58e9265474c014849f6553c3e3"),
"plugins/Login/stylesheets/variables.less" => array("36", "14cf6ec689fd1977297f3001a8635047"),
"plugins/Login/templates/_formErrors.twig" => array("314", "f62e7b3544fef5b7bb73cdd6c0b51459"),
- "plugins/Login/templates/login.twig" => array("9105", "7c6bf7f79d733af55b3fd50e7023c127"),
+ "plugins/Login/templates/login.twig" => array("9119", "57b948fdc81858a1750d6215299b5fb5"),
"plugins/Login/templates/resetPassword.twig" => array("157", "f5cd1c27479d8b0082030afd5a235b80"),
"plugins/Marketplace/angularjs/licensekey/licensekey.controller.js" => array("2040", "e4c6804b82f03599a37641b2b42d5cc0"),
"plugins/Marketplace/angularjs/marketplace/marketplace.controller.js" => array("748", "c01ff632d3d3e5fb993d583df7e363fc"),
@@ -3762,7 +3772,7 @@ class Manifest {
"plugins/Marketplace/lang/bs.json" => array("72", "642211a3638c24548d30fd2ee5d3996f"),
"plugins/Marketplace/lang/ca.json" => array("217", "208195e91673b1d1b8fb21f5d9395b8b"),
"plugins/Marketplace/lang/cs.json" => array("10253", "a5c5b7131cdbc26836dc2415f703ac1b"),
- "plugins/Marketplace/lang/da.json" => array("2878", "8173f42e01b1374f02e3fad26e2e4b1c"),
+ "plugins/Marketplace/lang/da.json" => array("3062", "945c2592a3b2bd61ad2dda94b6887b3d"),
"plugins/Marketplace/lang/de.json" => array("10683", "8a54755da1e5ba9502d42142d66a6c7b"),
"plugins/Marketplace/lang/el.json" => array("15373", "cbd50a7a2447c3ea37e5c7aadd074d20"),
"plugins/Marketplace/lang/en.json" => array("9014", "da3424f29b617bc09fd45847bc096a7a"),
@@ -3833,7 +3843,7 @@ class Manifest {
"plugins/Marketplace/Widgets/GetNewPlugins.php" => array("1670", "1e50ba75987c6b9aa55fc610b86af401"),
"plugins/Marketplace/Widgets/GetPremiumFeatures.php" => array("1671", "29ef1688004a8cb69020b19809295dbf"),
"plugins/MobileAppMeasurable/lang/cs.json" => array("246", "b5d8e530894c2740abc9b6186922bb91"),
- "plugins/MobileAppMeasurable/lang/da.json" => array("220", "3f5004e98f282690a73bcb4cc0d03949"),
+ "plugins/MobileAppMeasurable/lang/da.json" => array("219", "3a01657a192c41b0e560fcaa4438c789"),
"plugins/MobileAppMeasurable/lang/de.json" => array("226", "62882982aa1d95060da9e904398542cd"),
"plugins/MobileAppMeasurable/lang/el.json" => array("365", "c5409748789d2881cf25dfe1f087c1ba"),
"plugins/MobileAppMeasurable/lang/en.json" => array("220", "f9a3d201adcbc0cc086b649021d9cd10"),
@@ -3880,7 +3890,7 @@ class Manifest {
"plugins/MobileMessaging/lang/bg.json" => array("4387", "fcd3e9fdc4724d33bc984dbaf3001bbf"),
"plugins/MobileMessaging/lang/ca.json" => array("2159", "71ba342acb78e4dfc1c6d278dbb622ef"),
"plugins/MobileMessaging/lang/cs.json" => array("4384", "bc8774b27f619de7761e14f3294ec0f2"),
- "plugins/MobileMessaging/lang/da.json" => array("3543", "8c5ceb4e62de50aa3fa937734fddaf79"),
+ "plugins/MobileMessaging/lang/da.json" => array("3717", "21ca1d96608e588d0d820c807e9f66dd"),
"plugins/MobileMessaging/lang/de.json" => array("4989", "3d944ed0aeb09622a8fc0fd24d48f7f3"),
"plugins/MobileMessaging/lang/el.json" => array("7761", "5dd085c6543a3d9d788b77f908d6fea4"),
"plugins/MobileMessaging/lang/en.json" => array("4507", "bb80ad4259daca226bf29694840b44e5"),
@@ -3928,7 +3938,7 @@ class Manifest {
"plugins/MobileMessaging/templates/macros.twig" => array("3758", "e65f7f5337dcf911719ff99655e6ed3e"),
"plugins/MobileMessaging/templates/reportParametersScheduledReports.twig" => array("1024", "d5e3da27c67f3e01f1cf0e42b98b3610"),
"plugins/MobileMessaging/templates/SMSReport.twig" => array("2189", "d059a0d95d49a43f6cf07c0c42bb567a"),
- "plugins/Monolog/config/cli.php" => array("1133", "0def0c0bb058f9900d2a2249c901d448"),
+ "plugins/Monolog/config/cli.php" => array("1153", "f6b876e9a30517ab5a21baed83b3ab74"),
"plugins/Monolog/config/config.php" => array("3873", "23ca6b09e161cf82f0a336e7692e7ebd"),
"plugins/Monolog/config/tracker.php" => array("926", "cf2e91823caf54e37005f8296e2ded48"),
"plugins/Monolog/Formatter/LineMessageFormatter.php" => array("2605", "14ee3e16dfbebd13e729cb8ac4a22029"),
@@ -3940,18 +3950,18 @@ class Manifest {
"plugins/Monolog/plugin.json" => array("61", "e824e0f18bcdbff4ae98a6ad1c9290d5"),
"plugins/Monolog/Processor/ClassNameProcessor.php" => array("1941", "9096da098ae7bf3831131914fb3838fa"),
"plugins/Monolog/Processor/ExceptionToTextProcessor.php" => array("1498", "a5ac4a3e78e2593ca72e081c5510faf5"),
- "plugins/Monolog/Processor/RequestIdProcessor.php" => array("743", "d1f7bfaa3dffe589dc41b0d36f9b6850"),
+ "plugins/Monolog/Processor/RequestIdProcessor.php" => array("802", "267b24c7f49e5d741bc21d9073f0d0bf"),
"plugins/Monolog/Processor/SprintfProcessor.php" => array("1031", "49ec19decdb0f30c999cfad4dd331104"),
"plugins/Monolog/Processor/TokenProcessor.php" => array("540", "4e3ab05f6cdb40fc66009675707f31c7"),
"plugins/Morpheus/Controller.php" => array("496", "c9ba2c6f6ac41cf8ec608dbb7ebfb88f"),
- "plugins/Morpheus/fonts/matomo.svg" => array("73921", "83a822f3ca6b774f03858eed0991bdd1"),
- "plugins/Morpheus/fonts/matomo.ttf" => array("25628", "c1eafebfd55b4eb2819421b2493e0023"),
- "plugins/Morpheus/fonts/matomo.woff" => array("25704", "12dce0fd459a04e80da9c8bda665b071"),
+ "plugins/Morpheus/fonts/matomo.svg" => array("75476", "3135d4d86425af7c3a8d80f7cbf8164a"),
+ "plugins/Morpheus/fonts/matomo.ttf" => array("26128", "fc32d1ec66f4e2db0e99a11e0f19d93a"),
+ "plugins/Morpheus/fonts/matomo.woff" => array("26204", "b14257bd95e99c803b9c570ecbe8624a"),
"plugins/Morpheus/fonts/piwik.svg" => array("72507", "6a9e047ba817e4c7de801011562c0edc"),
"plugins/Morpheus/fonts/piwik.ttf" => array("25016", "7d872f0a16ae9949ffaee71bc50503ba"),
"plugins/Morpheus/fonts/piwik.woff" => array("25092", "f56960112a0f048a5a4574da2f2313c8"),
"plugins/Morpheus/fonts/README.md" => array("208", "2402640c560518af3db8d433fb0c10ac"),
- "plugins/Morpheus/fonts/selection.json" => array("119809", "b35eb04f94e8becd22be94874f1c6f19"),
+ "plugins/Morpheus/fonts/selection.json" => array("123297", "296308671df127db7af3f61449e5683c"),
"plugins/Morpheus/icons/dist/brand/3Q.png" => array("1097", "6641d2580b1f91c38b7ec96f58f236fe"),
"plugins/Morpheus/icons/dist/brand/4Good.png" => array("1141", "647a6465407b39fb161d0d4d1d7d4fc0"),
"plugins/Morpheus/icons/dist/brand/Acer.png" => array("963", "c2bf6ca7bfb27a5b8902d2cea0695b36"),
@@ -4470,7 +4480,7 @@ class Manifest {
"plugins/Morpheus/icons/dist/flags/ng.png" => array("191", "952b8834e6cd47a2e07550c3bac75217"),
"plugins/Morpheus/icons/dist/flags/ni.png" => array("470", "6da89b49b4018c6b8f09363f43b86cbf"),
"plugins/Morpheus/icons/dist/flags/nl.png" => array("207", "0eee10ce3a291777595d618fca0144b6"),
- "plugins/Morpheus/icons/dist/flags/no.png" => array("207", "86eb27650e249cd99c4ffc8e17a746a2"),
+ "plugins/Morpheus/icons/dist/flags/no.png" => array("207", "672065fff26f85756aab72ae3f702422"),
"plugins/Morpheus/icons/dist/flags/np.png" => array("897", "2634adefcf8ef170c93ab7e2f0c560d2"),
"plugins/Morpheus/icons/dist/flags/nr.png" => array("413", "25d5e4a46c5362a0de5abf841c3e2477"),
"plugins/Morpheus/icons/dist/flags/nt.png" => array("434", "e060807fa98f26734ecefac48f9d4541"),
@@ -4482,9 +4492,9 @@ class Manifest {
"plugins/Morpheus/icons/dist/flags/pe.png" => array("873", "07f25439843e7960d54d70ca493b87a8"),
"plugins/Morpheus/icons/dist/flags/pf.png" => array("1031", "340cbfa898983218937e0ff1e49073e1"),
"plugins/Morpheus/icons/dist/flags/pg.png" => array("871", "8442d29b1ae13e6abee8fdd6b034df99"),
- "plugins/Morpheus/icons/dist/flags/ph.png" => array("694", "3afbeb51eb82e4647050a37299004151"),
+ "plugins/Morpheus/icons/dist/flags/ph.png" => array("824", "57dd187a28c509cce3ec0648fc5511e9"),
"plugins/Morpheus/icons/dist/flags/pk.png" => array("467", "cafcead016e2a6c3859c6a38748f0a21"),
- "plugins/Morpheus/icons/dist/flags/pl.png" => array("179", "43c15ab4d7241c2a9b6affd34b163e3a"),
+ "plugins/Morpheus/icons/dist/flags/pl.png" => array("179", "8dd73d1c059955a6fa1a3af2772b8df5"),
"plugins/Morpheus/icons/dist/flags/pm.png" => array("205", "46236c1adb5d192b058470ad190d946c"),
"plugins/Morpheus/icons/dist/flags/pn.png" => array("1927", "e6c5940567b6c7fb65a61074adadb6fd"),
"plugins/Morpheus/icons/dist/flags/pr.png" => array("664", "8dd9dcbd7f72a511a8509e976199ef18"),
@@ -4554,7 +4564,7 @@ class Manifest {
"plugins/Morpheus/icons/dist/flags/vn.png" => array("395", "9802908f051de70f8dde756d0bf21570"),
"plugins/Morpheus/icons/dist/flags/vu.png" => array("927", "5cda6b7fd1b4c7053b607a94004da6a3"),
"plugins/Morpheus/icons/dist/flags/wf.png" => array("205", "46236c1adb5d192b058470ad190d946c"),
- "plugins/Morpheus/icons/dist/flags/ws.png" => array("337", "ed3f68cee819c4d9d0be074154799f70"),
+ "plugins/Morpheus/icons/dist/flags/ws.png" => array("403", "2c5a2b90684e5ee5a1deb172c130b6e7"),
"plugins/Morpheus/icons/dist/flags/xx.png" => array("434", "e060807fa98f26734ecefac48f9d4541"),
"plugins/Morpheus/icons/dist/flags/ye.png" => array("207", "369c103a8bd3c3027bbb4ea3434e6adb"),
"plugins/Morpheus/icons/dist/flags/yt.png" => array("205", "46236c1adb5d192b058470ad190d946c"),
@@ -5079,13 +5089,13 @@ class Manifest {
"plugins/Morpheus/images/zoom-out.png" => array("1300", "b598e49632becfb91970083f8a9ff62e"),
"plugins/Morpheus/javascripts/ajaxHelper.js" => array("15262", "d9ade1b7f68395e7b9b3f52abcca803d"),
"plugins/Morpheus/javascripts/layout.js" => array("530", "622bd0e1420674d089d713e8829386c0"),
- "plugins/Morpheus/javascripts/piwikHelper.js" => array("17861", "435f1ad3dfab756f968cf9a54e32a5e0"),
+ "plugins/Morpheus/javascripts/piwikHelper.js" => array("18564", "ffd9bf3e2999e29b3a05b69ea4fd49de"),
"plugins/Morpheus/Menu.php" => array("1524", "b8d7d5db4336ec30f01d5939896bd2cd"),
"plugins/Morpheus/plugin.json" => array("385", "5b148100e81bb6fbc417d34db3db7422"),
"plugins/Morpheus/stylesheets/base/bootstrap.css" => array("4589", "ba3792bc047b164f10c726cd842f671d"),
"plugins/Morpheus/stylesheets/base/colors.less" => array("1616", "217ffc05473287287917755d76154f51"),
"plugins/Morpheus/stylesheets/base/font.css" => array("0", "d41d8cd98f00b204e9800998ecf8427e"),
- "plugins/Morpheus/stylesheets/base/icons.css" => array("6665", "1879111e3c194a89495e0a17e6f97b14"),
+ "plugins/Morpheus/stylesheets/base/icons.css" => array("6849", "d09a82ff72be448d3d8450de7c313f08"),
"plugins/Morpheus/stylesheets/base.less" => array("1085", "c042772bc11a49e6a35afd8a26e43924"),
"plugins/Morpheus/stylesheets/base/mixins.less" => array("2374", "eb2df1ed799e10daee9cb18df65ffa44"),
"plugins/Morpheus/stylesheets/general/_admin.less" => array("680", "533a6c6f9b9b03bf6c06d87725efc7cd"),
@@ -5093,7 +5103,7 @@ class Manifest {
"plugins/Morpheus/stylesheets/general/_form.less" => array("830", "2353d0d57c234d7dc5a1ec274a818bc3"),
"plugins/Morpheus/stylesheets/general/_forms.less" => array("1008", "291886ebdda7df8d1ce7c98c4188eea4"),
"plugins/Morpheus/stylesheets/general/_jqueryUI.less" => array("6406", "87c6a59cd87ff52a3e1faad331a93e58"),
- "plugins/Morpheus/stylesheets/general/_misc.less" => array("533", "c7cdaaf2a15132b6cf3d5b3ba4c9b43d"),
+ "plugins/Morpheus/stylesheets/general/_misc.less" => array("664", "1383e0c8d12b780e4246382f3e48f800"),
"plugins/Morpheus/stylesheets/general/_typography.less" => array("1358", "d33fc5e9ced626ed90fbd34fe5bab01c"),
"plugins/Morpheus/stylesheets/general/_utils.less" => array("321", "5780ad77f689dcbf69e3224189044e22"),
"plugins/Morpheus/stylesheets/main.less" => array("13218", "7943b2fb3590c787a44480c4fb95096b"),
@@ -5107,7 +5117,7 @@ class Manifest {
"plugins/Morpheus/stylesheets/uibase/_loading.less" => array("433", "840100352ab2e6650755d0db83c0554b"),
"plugins/Morpheus/stylesheets/uibase/_periodSelect.less" => array("1311", "f27155502709082b6eb4b714a329b3ae"),
"plugins/Morpheus/stylesheets/ui/_buttons.less" => array("1472", "dbcbb024434117eebdf14ae93fb8514c"),
- "plugins/Morpheus/stylesheets/ui/_cards.less" => array("855", "917250b0d819a9f33608568abe71f819"),
+ "plugins/Morpheus/stylesheets/ui/_cards.less" => array("965", "f89097aa53e8ea19b87c18b152758105"),
"plugins/Morpheus/stylesheets/ui/_charts.less" => array("3113", "cd511d36c99c137e6f5aa6aa0390f574"),
"plugins/Morpheus/stylesheets/ui/_code.less" => array("531", "6a5710ae61d12c648c1227b487bae8cb"),
"plugins/Morpheus/stylesheets/ui/_components.less" => array("7017", "d4b99b6fd3b15673930cd217d7f3227f"),
@@ -5124,11 +5134,11 @@ class Manifest {
"plugins/Morpheus/templates/ajaxMacros.twig" => array("1777", "2f9f7e0c2981a6b97405c598bb87edf9"),
"plugins/Morpheus/templates/contentBlock.twig" => array("530", "95b4e1438013db65323dc24cce7202a3"),
"plugins/Morpheus/templates/dashboard.twig" => array("1878", "3b178791515f37fccd87f21c0127522a"),
- "plugins/Morpheus/templates/demo.twig" => array("30138", "fa1b887487eb016f06e9ad842a60a003"),
+ "plugins/Morpheus/templates/demo.twig" => array("34632", "f5345f22c2ec8965fa64b680ee3c7499"),
"plugins/Morpheus/templates/empty.twig" => array("35", "2c6a1dccfb394fef9ef03849c39a5bec"),
"plugins/Morpheus/templates/genericForm.twig" => array("1476", "2ddaa0d59549276844acb32a90622756"),
"plugins/Morpheus/templates/_iframeBuster.twig" => array("385", "1c780792c51f5d2fecbf53c0ce0d547f"),
- "plugins/Morpheus/templates/javascriptCode.twig" => array("938", "755e0e19f948f5efbaefa785ea474c4f"),
+ "plugins/Morpheus/templates/javascriptCode.twig" => array("942", "bcab1d6864122034db8513c796bce376"),
"plugins/Morpheus/templates/_jsCssIncludes.twig" => array("123", "06ce23308eb531695910b50736dbf171"),
"plugins/Morpheus/templates/_jsGlobalVariables.twig" => array("2239", "6e8d7b1cf491a51cbe6ba9ea3304bfba"),
"plugins/Morpheus/templates/layout.twig" => array("1925", "b7428e474cdff169ba75dddcbb2f43d6"),
@@ -5210,7 +5220,7 @@ class Manifest {
"plugins/MultiSites/Reports/GetAll.php" => array("599", "22226ebefe4a6185f91b9a1a4bdcf9a5"),
"plugins/MultiSites/Reports/GetOne.php" => array("603", "d478f20ddff110c4193f41be3e95e675"),
"plugins/MultiSites/templates/getSitesInfo.twig" => array("1129", "e6df8402a5488fcccc68fdd1f858ed1f"),
- "plugins/Overlay/API.php" => array("4626", "237491732f8c9fe7b0f5db03ce452d97"),
+ "plugins/Overlay/API.php" => array("4773", "afc2cf38537bf07edb3b2037e8f8e857"),
"plugins/Overlay/client/client.css" => array("2595", "ce94cf81bb253e8543807152fe6ff8f6"),
"plugins/Overlay/client/client.js" => array("6442", "954cf72dce903eedd8bff6f7dbbeb6f7"),
"plugins/Overlay/client/close.png" => array("655", "42492684e24356a4081134894eabeb9e"),
@@ -5285,75 +5295,94 @@ class Manifest {
"plugins/Overlay/templates/renderSidebar.twig" => array("1132", "ea598ebaa4843534e0ffdf9c100542a1"),
"plugins/Overlay/templates/showErrorWrongDomain.twig" => array("515", "7ebb5883227f513c7492b2062d296c43"),
"plugins/Overlay/templates/startOverlaySession.twig" => array("1821", "f65949859d4ca787153ad4d312ad4307"),
- "plugins/PrivacyManager/angularjs/anonymize-ip/anonymize-ip.controller.js" => array("1377", "e00908bd59d6edd14810ed52621d5a22"),
+ "plugins/PrivacyManager/angularjs/anonymize-ip/anonymize-ip.controller.js" => array("1513", "d0b055becd51f11e4aa2433abf6ece99"),
+ "plugins/PrivacyManager/angularjs/anonymize-log-data/anonymize-log-data.controller.js" => array("5341", "16be5bb97afa56db215864c36fa96adc"),
+ "plugins/PrivacyManager/angularjs/anonymize-log-data/anonymize-log-data.directive.html" => array("7383", "caa98a1b127ae85a6a3624834b37287d"),
+ "plugins/PrivacyManager/angularjs/anonymize-log-data/anonymize-log-data.directive.js" => array("775", "53c369b17d5211225c9760a630461dc3"),
+ "plugins/PrivacyManager/angularjs/anonymize-log-data/anonymize-log-data.directive.less" => array("234", "c06fc6e05db8f8809492346ed2507ac4"),
"plugins/PrivacyManager/angularjs/delete-old-logs/delete-old-logs.controller.js" => array("1728", "2c439199ad2d3c5b24d930bc56e510e8"),
"plugins/PrivacyManager/angularjs/delete-old-reports/delete-old-reports.controller.js" => array("2323", "bdda11bd597698b216e1634006be3f0a"),
"plugins/PrivacyManager/angularjs/do-not-track-preference/do-not-track-preference.controller.js" => array("1313", "cf04983e450b66cd5e2c6b76abf6516f"),
+ "plugins/PrivacyManager/angularjs/manage-gdpr/managegdpr.controller.js" => array("7512", "38bef58cc5fcd34ab160620a0117d964"),
+ "plugins/PrivacyManager/angularjs/manage-gdpr/managegdpr.directive.html" => array("7690", "00ff0f16e02c95fccb15b6b65a0e71d5"),
+ "plugins/PrivacyManager/angularjs/manage-gdpr/managegdpr.directive.js" => array("735", "43da4ae2122680cb3115f05f27aa4db0"),
+ "plugins/PrivacyManager/angularjs/manage-gdpr/managegdpr.directive.less" => array("141", "0ca5e06f096270441cd70631c3fcb96a"),
"plugins/PrivacyManager/angularjs/opt-out-customizer/opt-out-customizer.controller.js" => array("1816", "b1945fd37cf08837d76c98655c42c2a3"),
- "plugins/PrivacyManager/angularjs/opt-out-customizer/opt-out-customizer.directive.html" => array("2377", "585491d514155dfbaae2820449f80c4b"),
+ "plugins/PrivacyManager/angularjs/opt-out-customizer/opt-out-customizer.directive.html" => array("2401", "27896b98a15323722528f9fc21985f64"),
"plugins/PrivacyManager/angularjs/opt-out-customizer/opt-out-customizer.directive.js" => array("1246", "a8cb1a495d780500f4314233b1cb391a"),
"plugins/PrivacyManager/angularjs/opt-out-customizer/opt-out-customizer.directive.less" => array("284", "04cc3c1010187b5c06b163c39dbf253f"),
"plugins/PrivacyManager/angularjs/report-deletion.model.js" => array("3476", "144a80ceb28a213ea25c6bf72ba6151b"),
"plugins/PrivacyManager/angularjs/schedule-report-deletion/schedule-report-deletion.controller.js" => array("2306", "1cca1098e53f9d9aa1970bba10f70ca0"),
- "plugins/PrivacyManager/API.php" => array("4292", "783601e09397735543d9bd81c3c9da41"),
- "plugins/PrivacyManager/Config.php" => array("3738", "282509f1a10316199332af4eeba0b94d"),
- "plugins/PrivacyManager/Controller.php" => array("13092", "e87cc41b90927a7c7eee6891832a366f"),
+ "plugins/PrivacyManager/API.php" => array("7705", "6c55c15c98d9f6f24fe6bf81e92b0153"),
+ "plugins/PrivacyManager/Commands/AnonymizeRawData.php" => array("6668", "647606f292ee7d26d4f074c7339b3d46"),
+ "plugins/PrivacyManager/Config.php" => array("4100", "a276f9da70893937ab8b7d841394f58c"),
+ "plugins/PrivacyManager/Controller.php" => array("14141", "23d674a21c0b055cb725f4935ab2e611"),
+ "plugins/PrivacyManager/Dao/LogDataAnonymizer.php" => array("10461", "9f801c579ef5e68a368f27953df3ba2e"),
"plugins/PrivacyManager/DoNotTrackHeaderChecker.php" => array("4147", "5c82b47348855c187f8a6632b945b1bd"),
"plugins/PrivacyManager/IPAnonymizer.php" => array("2189", "8ab77a6befebfbbff1469c6006a9d989"),
"plugins/PrivacyManager/lang/ar.json" => array("217", "809314835844e1a2acd3660edb06e308"),
"plugins/PrivacyManager/lang/be.json" => array("1949", "947e5874b654e45151256bd9a83c03ae"),
- "plugins/PrivacyManager/lang/bg.json" => array("8417", "a2bb8b14982833f941a76fcb2b145f67"),
- "plugins/PrivacyManager/lang/ca.json" => array("5579", "1615937cdcc2b21216549c0cec2cfb48"),
- "plugins/PrivacyManager/lang/cs.json" => array("6608", "2f65bc27702ebb7dbb0b629fad792602"),
- "plugins/PrivacyManager/lang/da.json" => array("5919", "8dc5408a9ba5e234429907dd5da98b08"),
- "plugins/PrivacyManager/lang/de.json" => array("8050", "a4f01c85024374debe0f0bd11f20a7ee"),
- "plugins/PrivacyManager/lang/el.json" => array("12852", "cc432b22f1d9e8e6fbda45e66a3173f7"),
- "plugins/PrivacyManager/lang/en.json" => array("6943", "ad66b14b54361c42b6db8456d1f918aa"),
- "plugins/PrivacyManager/lang/es.json" => array("7280", "959337bf55134e9baf9b63594feb9791"),
+ "plugins/PrivacyManager/lang/bg.json" => array("7831", "566c16c0776cf89c012f0e43b8201b4f"),
+ "plugins/PrivacyManager/lang/ca.json" => array("5220", "67c3c2bae271d8d8d199fce5ad6710d8"),
+ "plugins/PrivacyManager/lang/cs.json" => array("6309", "17d9541df5d4d066793b084e2677246f"),
+ "plugins/PrivacyManager/lang/da.json" => array("5872", "364ece4293118fdf6f2e58f501412ed4"),
+ "plugins/PrivacyManager/lang/de.json" => array("8549", "fca298f43f725c5e85359367f1af5085"),
+ "plugins/PrivacyManager/lang/el.json" => array("14279", "efebe898441f5fe299192ac3a5305136"),
+ "plugins/PrivacyManager/lang/en.json" => array("8246", "cbc9721756b0e3df1450a683ad868a92"),
+ "plugins/PrivacyManager/lang/es.json" => array("6886", "844c685fb78d054508339b6f8f28618c"),
"plugins/PrivacyManager/lang/et.json" => array("829", "08f9d37b31e36be51508ecb95bd95ba0"),
"plugins/PrivacyManager/lang/fa.json" => array("6035", "e71e580fb3c93df9d6a1574d19708814"),
- "plugins/PrivacyManager/lang/fi.json" => array("6423", "cae84cd59b8df4e8f67458bdff2c9c01"),
- "plugins/PrivacyManager/lang/fr.json" => array("8434", "a0ed6128c5b45db7e41aee7ee2fff862"),
+ "plugins/PrivacyManager/lang/fi.json" => array("6121", "b53644c37d7f46db75724d78e1a972f7"),
+ "plugins/PrivacyManager/lang/fr.json" => array("8069", "9a499f4de0e1577305439dd79399a3cc"),
"plugins/PrivacyManager/lang/he.json" => array("224", "df7a315985bde3ce28adafecd1073557"),
- "plugins/PrivacyManager/lang/hi.json" => array("10853", "b6a6f082a9fbf883e243223612cbe89c"),
+ "plugins/PrivacyManager/lang/hi.json" => array("10180", "52f41d9f9d15024d55c99ef5f1a28dcd"),
"plugins/PrivacyManager/lang/hr.json" => array("97", "f58ba946aea666e8de8d90d8f51bd1d0"),
"plugins/PrivacyManager/lang/hu.json" => array("246", "ef9e3c9c281550f0d21f6f7bad7824f2"),
- "plugins/PrivacyManager/lang/id.json" => array("5272", "94ef0724ecebd4c0f33c78eccfecdf00"),
+ "plugins/PrivacyManager/lang/id.json" => array("4953", "1ebef4e9983e18279148d31963c24075"),
"plugins/PrivacyManager/lang/is.json" => array("159", "c457a96dc3dc2263bc65ef21c47d0f58"),
- "plugins/PrivacyManager/lang/it.json" => array("6866", "d986528c3d07f9ada3956ff6ad6a26b3"),
- "plugins/PrivacyManager/lang/ja.json" => array("8078", "bba15a66afb3f7535fc3903fd32decc8"),
+ "plugins/PrivacyManager/lang/it.json" => array("6549", "8b1b164da9c92c5e7996d57232b17b7f"),
+ "plugins/PrivacyManager/lang/ja.json" => array("7718", "dcec52416d927dd2e45862ec5034b08c"),
"plugins/PrivacyManager/lang/ka.json" => array("401", "7e76815d9e4f8ebd35e2abf63ca15918"),
- "plugins/PrivacyManager/lang/ko.json" => array("7003", "86e20fb68119c1220f912384a7562b08"),
+ "plugins/PrivacyManager/lang/ko.json" => array("6676", "afa7d28bc4f87e269b755430359eb615"),
"plugins/PrivacyManager/lang/lt.json" => array("633", "862fed853b43f7562f0ac910eb04bd05"),
"plugins/PrivacyManager/lang/lv.json" => array("946", "77e7902ee18aa72a48b4b80947f77d43"),
"plugins/PrivacyManager/lang/nb.json" => array("1469", "65f57b011250200eb9cfd61ec406a468"),
- "plugins/PrivacyManager/lang/nl.json" => array("7071", "e153818dda80fb3f9788372cb5616f3f"),
+ "plugins/PrivacyManager/lang/nl.json" => array("6748", "85afd9cf7e1cded245a583b34e9847f2"),
"plugins/PrivacyManager/lang/nn.json" => array("320", "bd5e881458c7ab1107cd72253b170e63"),
- "plugins/PrivacyManager/lang/pl.json" => array("7689", "71fc4c346e11ba836ad0c2c5d03d1686"),
- "plugins/PrivacyManager/lang/pt-br.json" => array("6924", "472f0ea913752f82c2fdfd640902d06b"),
+ "plugins/PrivacyManager/lang/pl.json" => array("8464", "15a0a866e17d86bac7cacc597593e6dd"),
+ "plugins/PrivacyManager/lang/pt-br.json" => array("6583", "9cb47027b0ac3aa5c4bf1a78f5edb688"),
"plugins/PrivacyManager/lang/pt.json" => array("1376", "dc932a71d80729af4377e84154185172"),
- "plugins/PrivacyManager/lang/ro.json" => array("6293", "a44e7e25355450f5fb4aae37551ebe28"),
- "plugins/PrivacyManager/lang/ru.json" => array("9370", "f08ca949d672e061e7b5f4aed23c53d2"),
+ "plugins/PrivacyManager/lang/ro.json" => array("5969", "c477dcb57e43b1f8d9da475cd7b2ec6c"),
+ "plugins/PrivacyManager/lang/ru.json" => array("8759", "97b0c7e9c3478677ff31d7114983bbff"),
"plugins/PrivacyManager/lang/sk.json" => array("537", "fa7a7770192a4ab152725a80cb0d7ed2"),
- "plugins/PrivacyManager/lang/sl.json" => array("760", "e83135609652c31f8cf7de4143c83265"),
- "plugins/PrivacyManager/lang/sq.json" => array("8278", "6b3dbb9d6f2b6d4fe7845f7423131a00"),
- "plugins/PrivacyManager/lang/sr.json" => array("6581", "f3602fccfdc179d27d98f17a2cd84cc0"),
- "plugins/PrivacyManager/lang/sv.json" => array("6674", "7574a50128d7d20fbe5eb52999993a66"),
+ "plugins/PrivacyManager/lang/sl.json" => array("804", "6c3958410039c6d5716441580085610b"),
+ "plugins/PrivacyManager/lang/sq.json" => array("9168", "d870f66bfe475bfaa7987bbf1f449040"),
+ "plugins/PrivacyManager/lang/sr.json" => array("6285", "72c51aa1fa23b0c2358c60cff812a6fb"),
+ "plugins/PrivacyManager/lang/sv.json" => array("6362", "4045b04896bf9afe6a0c56ad0862b1c2"),
"plugins/PrivacyManager/lang/te.json" => array("228", "0dc1d05f984d24fd3353bd6928956c8d"),
- "plugins/PrivacyManager/lang/th.json" => array("2485", "4f33edfb74adc61d88b226df31e836be"),
- "plugins/PrivacyManager/lang/tl.json" => array("6164", "dc509a1c5f41a48ade8d02b01094ca7c"),
- "plugins/PrivacyManager/lang/tr.json" => array("8105", "5b5c41aff74734d5e99ebc4e82857dec"),
- "plugins/PrivacyManager/lang/uk.json" => array("10451", "b1f789141cf4cf0b4a1e79a9d4776237"),
+ "plugins/PrivacyManager/lang/th.json" => array("1809", "c241783ffbb1d02d8b3d51ec39539654"),
+ "plugins/PrivacyManager/lang/tl.json" => array("5831", "58901a7fd61fb932864766262678333e"),
+ "plugins/PrivacyManager/lang/tr.json" => array("8979", "e401b66b39a31d131e1c81e37ab429d5"),
+ "plugins/PrivacyManager/lang/uk.json" => array("9850", "9c11f841023b19140ceebbfe96e0850d"),
"plugins/PrivacyManager/lang/vi.json" => array("6471", "d5b77a57adfc629f6c5c736bc84b6721"),
- "plugins/PrivacyManager/lang/zh-cn.json" => array("4786", "647813bc61af0cc5b3c6d05829f16306"),
- "plugins/PrivacyManager/lang/zh-tw.json" => array("6484", "02a716aadbd811cb634e06c1a5a7b65e"),
- "plugins/PrivacyManager/LogDataPurger.php" => array("5416", "da519c37356a77632ea1ea30ea4502e5"),
- "plugins/PrivacyManager/Menu.php" => array("601", "5057a814b21b33516a1c020718561410"),
- "plugins/PrivacyManager/PrivacyManager.php" => array("21362", "621f0ac6360df851080848d88d3dc355"),
+ "plugins/PrivacyManager/lang/zh-cn.json" => array("4556", "d35f4363a1cc62be30083f4b9a8fcde0"),
+ "plugins/PrivacyManager/lang/zh-tw.json" => array("6243", "d155aa2fa38c5de21e06bd34732f2f2c"),
+ "plugins/PrivacyManager/LogDataPurger.php" => array("6312", "3c44311b4175b61eae14200f4e3854fb"),
+ "plugins/PrivacyManager/Menu.php" => array("1160", "0fe802bf49ffcf660093caf3505c347c"),
+ "plugins/PrivacyManager/Model/DataSubjects.php" => array("15876", "ad6db93853e17ba837dc310bc3072f7c"),
+ "plugins/PrivacyManager/Model/LogDataAnonymizations.php" => array("12084", "c0bf97de91f8a88428daad13d2623b91"),
+ "plugins/PrivacyManager/PrivacyManager.php" => array("23083", "8d9820edeb71e09a066be475fb66db14"),
"plugins/PrivacyManager/ReportsPurger.php" => array("14850", "ad32d80402f1e78dde30cac6b18f62a0"),
- "plugins/PrivacyManager/Tasks.php" => array("701", "7f52adc528600755f855eed3f0cb1e45"),
+ "plugins/PrivacyManager/stylesheets/gdprOverview.less" => array("158", "3b1fa1ff0fae678f485810275743c481"),
+ "plugins/PrivacyManager/Tasks.php" => array("1448", "dc45e62d29bc540d9fc073274a2f2706"),
+ "plugins/PrivacyManager/templates/askingForConsent.twig" => array("7393", "4ca3daeae2e5fede719d2618a29c1a96"),
+ "plugins/PrivacyManager/templates/gdprOverview.twig" => array("5089", "e537169cc71a3091ed571a3d3830e607"),
+ "plugins/PrivacyManager/templates/gdprTools.twig" => array("164", "b09a687f7477f62503cae9b875119b7e"),
"plugins/PrivacyManager/templates/getDatabaseSize.twig" => array("394", "b20b279686f6084c9b6d1e054711991c"),
- "plugins/PrivacyManager/templates/privacySettings.twig" => array("16789", "5f218b70af6cfe1a20b345d6056e1876"),
+ "plugins/PrivacyManager/templates/privacySettings.twig" => array("19329", "c0a6d54f6e6b9701bc53124d12cbdfcb"),
+ "plugins/PrivacyManager/templates/usersOptOut.twig" => array("1724", "468dec101b6abcceb5424dd8d4852aa0"),
+ "plugins/PrivacyManager/Tracker/RequestProcessor.php" => array("1943", "2afd96f7ed0e7a7a2b9e15eae5115479"),
+ "plugins/PrivacyManager/Validators/VisitsDataSubject.php" => array("847", "3f425203600f8eb20476e13f5bfae702"),
"plugins/ProfessionalServices/config/test.php" => array("358", "ac34f2a35e30535172c4b86376c6f616"),
"plugins/ProfessionalServices/images/promo.png" => array("8091", "2cc23dc7c92c9f7354ed3f7ec2540d19"),
"plugins/ProfessionalServices/lang/en.json" => array("121", "2f29cea8e89b01e095febabd04d6964f"),
@@ -5469,7 +5498,7 @@ class Manifest {
"plugins/Referrers/lang/ca.json" => array("4010", "68251ac8af13aeb4b98a5b881a09036c"),
"plugins/Referrers/lang/cs.json" => array("4604", "7a292b7e48abc009b2b4d44ede3eff9e"),
"plugins/Referrers/lang/cy.json" => array("62", "2afe272bf41b7ebc82c2d3b04cfab1ce"),
- "plugins/Referrers/lang/da.json" => array("4397", "263e23dbca4d74f5e2d527aa8ee32d18"),
+ "plugins/Referrers/lang/da.json" => array("4398", "54558dd25360562be4179b36da97d6a9"),
"plugins/Referrers/lang/de.json" => array("4776", "ccfa713834cdc13acc0c772b8f137a3e"),
"plugins/Referrers/lang/el.json" => array("7683", "6f1cfaaaa36c78d9877df0b8e773560c"),
"plugins/Referrers/lang/en.json" => array("4381", "2484dffbdfe660b1194eeeb31c691d57"),
@@ -5531,7 +5560,7 @@ class Manifest {
"plugins/Referrers/SearchEngine.php" => array("16711", "2c6c4b46b5d670ee21d96c1e32eefb72"),
"plugins/Referrers/Social.php" => array("4954", "dc9ffa6929da5b306a8281f4a55b94bc"),
"plugins/Referrers/Tasks.php" => array("1659", "b9bfc3ef76ba971c1fa6cd9f8e29650f"),
- "plugins/Referrers/templates/_visitorDetails.twig" => array("2599", "9ce844ee6e08e36ea0a090663934a33a"),
+ "plugins/Referrers/templates/_visitorDetails.twig" => array("2608", "26997ecc218f0b22c99f437366c7af08"),
"plugins/Referrers/VisitorDetails.php" => array("3297", "de85e3ae4bc0569e746a206905c98934"),
"plugins/Referrers/Widgets/GetKeywordsForPage.php" => array("562", "88f1c90d6dae63cca4df6eed2d81ff81"),
"plugins/Resolution/API.php" => array("1596", "bc1de72bda535c962bf0e9a318d4a7d9"),
@@ -5612,7 +5641,7 @@ class Manifest {
"plugins/ScheduledReports/lang/bg.json" => array("3756", "f3b422f207d619914a457e920ff2a07f"),
"plugins/ScheduledReports/lang/ca.json" => array("2709", "43dc5657c0eedadc7805f39a747a56b0"),
"plugins/ScheduledReports/lang/cs.json" => array("3945", "c167dab2618701c47e3d4245257b5fc3"),
- "plugins/ScheduledReports/lang/da.json" => array("3246", "51d5bfc90819782ee149dfc2fce969e6"),
+ "plugins/ScheduledReports/lang/da.json" => array("3243", "1c8b83887f3f89dcbd727c767f01f07d"),
"plugins/ScheduledReports/lang/de.json" => array("4004", "f374a8bf14bc15ac2179d633abf9e7c0"),
"plugins/ScheduledReports/lang/el.json" => array("6286", "cfef3b4506b17ad1d4f5c68668348030"),
"plugins/ScheduledReports/lang/en.json" => array("3615", "c1df3c0d09813d2411ac061d31b60c96"),
@@ -5688,7 +5717,7 @@ class Manifest {
"plugins/SegmentEditor/javascripts/Segmentation.js" => array("44748", "0cd02672f0ef1a818cd45141ea163b3f"),
"plugins/SegmentEditor/lang/bg.json" => array("1797", "9acd6349bc3bb3e8c17db1421feadf42"),
"plugins/SegmentEditor/lang/cs.json" => array("3352", "bd230e5e8413393d7ca3a936df093a1c"),
- "plugins/SegmentEditor/lang/da.json" => array("1943", "9334ed21696309db3700b0b5983213b4"),
+ "plugins/SegmentEditor/lang/da.json" => array("2033", "98e474a729cfbf10a8716789e7a2166e"),
"plugins/SegmentEditor/lang/de.json" => array("3561", "1517e23374f406f95c2593ed56a633d3"),
"plugins/SegmentEditor/lang/el.json" => array("5412", "4616758ea4ae6cc7405e9ec5cf783bdf"),
"plugins/SegmentEditor/lang/en.json" => array("3165", "cfcb1c9890a5970ba73589f30bdddcb7"),
@@ -5736,7 +5765,7 @@ class Manifest {
"plugins/SEO/lang/bg.json" => array("679", "81b30e15265e00ce326ec038b1f27066"),
"plugins/SEO/lang/ca.json" => array("336", "35d56f437e43b5979bcd4a03ac3c78ab"),
"plugins/SEO/lang/cs.json" => array("553", "d6b8adccb26174c1955e3724be3274af"),
- "plugins/SEO/lang/da.json" => array("534", "248bc5e368623e1ef0330c6cf290c982"),
+ "plugins/SEO/lang/da.json" => array("538", "c943eb90d9bc58f57b986d01734315cf"),
"plugins/SEO/lang/de.json" => array("536", "b341d76978425b0e4144e66a5cd783eb"),
"plugins/SEO/lang/el.json" => array("750", "40dc7b9b38505eae3e5b1fd8cf575946"),
"plugins/SEO/lang/en.json" => array("498", "d2651d69e5d5818ba74976e07ef5e218"),
@@ -5778,8 +5807,8 @@ class Manifest {
"plugins/SEO/Metric/Aggregator.php" => array("1548", "55c9728b5c455c78760a340889b55f01"),
"plugins/SEO/Metric/Alexa.php" => array("1399", "d0e4e9a858851edbbb26860607d881e7"),
"plugins/SEO/Metric/Bing.php" => array("1515", "3be88ff289db15c1ecffc2617cbe02b0"),
- "plugins/SEO/Metric/DomainAge.php" => array("3905", "877adcea7870c507f86246c23497e9fd"),
- "plugins/SEO/Metric/Google.php" => array("1680", "cb9e56cfc4402243af7f193a9b5c27e5"),
+ "plugins/SEO/Metric/DomainAge.php" => array("3923", "9ce4f6cc2b7001b8da6048e6dfc230ee"),
+ "plugins/SEO/Metric/Google.php" => array("1681", "ec26f9a6ef297c2e6989ce0cdaf64e49"),
"plugins/SEO/Metric/Metric.php" => array("2594", "c7b1d3d18142fd1ffd9cbb132809e63e"),
"plugins/SEO/Metric/MetricsProvider.php" => array("377", "e9f1e43594708cfaca9ab95075412eba"),
"plugins/SEO/Metric/ProviderCache.php" => array("932", "7fb255339d181acbaa5f27f357e0eef3"),
@@ -5794,9 +5823,9 @@ class Manifest {
"plugins/SitesManager/angularjs/sites-manager/multiline-field.directive.js" => array("1418", "9c6ab6cbeb40dc773ee8366b4ed43e0d"),
"plugins/SitesManager/angularjs/sites-manager/sites-manager-admin-sites-model.js" => array("3145", "e6820864ab63930b9414faaca23e625e"),
"plugins/SitesManager/angularjs/sites-manager/sites-manager.controller.js" => array("10086", "3766ce4c4d868996d638699b6fd38db3"),
- "plugins/SitesManager/angularjs/sites-manager/sites-manager-site.controller.js" => array("7782", "70d1325eb1843edd85e7c1e337a57c4e"),
+ "plugins/SitesManager/angularjs/sites-manager/sites-manager-site.controller.js" => array("8612", "2ed96c4a4d2e4077373c8fd95380fd51"),
"plugins/SitesManager/angularjs/sites-manager/sites-manager-type-model.js" => array("1420", "cf90909ae21219b0a8352bc07155fc9d"),
- "plugins/SitesManager/API.php" => array("56945", "76c9fd1d0cf05f3f1d0fb5f786edfec8"),
+ "plugins/SitesManager/API.php" => array("57039", "f0b829d0c5f0d826f10c97dfc1418678"),
"plugins/SitesManager/Controller.php" => array("6550", "cb54058a6acc7766a7e52ff82291875d"),
"plugins/SitesManager/lang/am.json" => array("1486", "36f212cae0e47f317b1b787bcbae8bce"),
"plugins/SitesManager/lang/ar.json" => array("5611", "d077a1917a610e8003156b4a7a8c364b"),
@@ -5807,7 +5836,7 @@ class Manifest {
"plugins/SitesManager/lang/ca.json" => array("6647", "a775f00649102722170879afa963eee0"),
"plugins/SitesManager/lang/cs.json" => array("9748", "30778e7cc05d6849a12587daa88f2bf4"),
"plugins/SitesManager/lang/cy.json" => array("68", "a9847ef3b4ee461e40f655a614c975a1"),
- "plugins/SitesManager/lang/da.json" => array("6913", "faf0ec9c1956342697eeda6996a7dc75"),
+ "plugins/SitesManager/lang/da.json" => array("7762", "5f3bd87cb936958af0eb9f0b973b23bd"),
"plugins/SitesManager/lang/de.json" => array("10443", "1c74c62082ff6c70acf5cf1306839a80"),
"plugins/SitesManager/lang/el.json" => array("17175", "eb3389f3444f7b1ca1187546db696d9b"),
"plugins/SitesManager/lang/en.json" => array("9338", "0554b6149bb42773b84683f5beac59d8"),
@@ -5860,7 +5889,7 @@ class Manifest {
"plugins/SitesManager/templates/dialogs/dialogs.html" => array("85", "4fa9db08714d97aff197ad1e5aa84980"),
"plugins/SitesManager/templates/dialogs/remove-dialog.html" => array("286", "df63b9966b7f91e850d01cf169106cac"),
"plugins/SitesManager/templates/displayJavascriptCode.twig" => array("120", "d033a90ee92a41e18643a90a990007ae"),
- "plugins/SitesManager/templates/_displayJavascriptCode.twig" => array("1499", "786d32ff953b3b9abbb59d265879f681"),
+ "plugins/SitesManager/templates/_displayJavascriptCode.twig" => array("1552", "c3946a9ec882b415c23aac3e4b486bb1"),
"plugins/SitesManager/templates/global-settings.html" => array("5333", "1844dfa5db18f8f2c569df4f44b0706b"),
"plugins/SitesManager/templates/globalSettings.twig" => array("251", "830be014cdd8804fee7b25b65902d6d7"),
"plugins/SitesManager/templates/help/excluded-ip-help.html" => array("245", "16d5361df101c8d5f9557f0590f117a6"),
@@ -5925,9 +5954,9 @@ class Manifest {
"plugins/Transitions/Transitions.php" => array("1113", "2916d6fd161bb8b881597667ccbabe5c"),
"plugins/UserCountry/angularjs/location-provider-selection/location-provider-selection.controller.js" => array("2525", "7e813fdc21fd2f9342edccd5a3e90ebc"),
"plugins/UserCountry/angularjs/location-provider-selection/location-provider-selection.directive.js" => array("940", "071469167f69a9ed7123b516b11c1f09"),
- "plugins/UserCountry/angularjs/location-provider-updater/location-provider-updater.controller.js" => array("5805", "2f324cf6d83b5aa388b847ab7740ca13"),
+ "plugins/UserCountry/angularjs/location-provider-updater/location-provider-updater.controller.js" => array("5824", "3dc63cb998b2afb67a86da2d264be787"),
"plugins/UserCountry/angularjs/location-provider-updater/location-provider-updater.directive.js" => array("1172", "5e076598c0cda4d541369e0dbc44014d"),
- "plugins/UserCountry/API.php" => array("12033", "002061a0bc0f8f18984356eadbed1bd3"),
+ "plugins/UserCountry/API.php" => array("16370", "fabb699f17b47d1fc720d1e3eb7cf89f"),
"plugins/UserCountry/Archiver.php" => array("6582", "7cacc1e82a4df5be2b9a36ea2a3e2ff9"),
"plugins/UserCountry/Categories/LocationsCategory.php" => array("355", "5d797a63e8c1eb8fb841e28a6b89cbba"),
"plugins/UserCountry/Categories/LocationsSubcategory.php" => array("417", "d0eb5be1054ad9c11fc2d1c4d849a669"),
@@ -5938,24 +5967,23 @@ class Manifest {
"plugins/UserCountry/Columns/Latitude.php" => array("2000", "dc5e2040f2489fb60140744eac5bb2bc"),
"plugins/UserCountry/Columns/Longitude.php" => array("1905", "702dc324f26bd4f8a9b1628a9b32ab54"),
"plugins/UserCountry/Columns/Provider.php" => array("1554", "9965f7b321132d014e20be8d518e7701"),
- "plugins/UserCountry/Columns/Region.php" => array("1889", "4b12832006b9d0c592ecf394bb1e50b0"),
+ "plugins/UserCountry/Columns/Region.php" => array("1838", "b9cd2c2e3b5c6f18c6f1110e5e2f4635"),
"plugins/UserCountry/Commands/AttributeHistoricalDataWithLocations.php" => array("7118", "328f3fddd082f0451befe4b7ed31725e"),
"plugins/UserCountry/config/config.php" => array("154", "15ae36c439bf4fe91a5676847723c74d"),
- "plugins/UserCountry/Controller.php" => array("13543", "2beca07b45b1d604eb8baff2a7d77ba8"),
- "plugins/UserCountry/Diagnostic/GeolocationDiagnostic.php" => array("2496", "5bd5ed7b8e03bc8ccaebb3017f0980fa"),
- "plugins/UserCountry/functions.php" => array("5720", "2682d56b7c12275795c37cb574780880"),
- "plugins/UserCountry/GeoIPAutoUpdater.php" => array("23707", "da09f8a2890750f71dba4de11766bd8d"),
- "plugins/UserCountry/javascripts/userCountry.js" => array("188", "c684dcbfd55614288c72136f900eb0bd"),
+ "plugins/UserCountry/Controller.php" => array("19010", "79acb09a25a7bb773c597761a0ed490f"),
+ "plugins/UserCountry/Diagnostic/GeolocationDiagnostic.php" => array("2765", "1ac5a703a7c6a8d567bf34d726f07ec4"),
+ "plugins/UserCountry/functions.php" => array("6552", "27b91daa63df33f7dd69f3a071f37d99"),
+ "plugins/UserCountry/GeoIPAutoUpdater.php" => array("24026", "0b90af0c7c44e2ae8813264f48fa2f57"),
"plugins/UserCountry/lang/am.json" => array("209", "4fe1372aa4aa41e3aeb59dd6ae925542"),
"plugins/UserCountry/lang/ar.json" => array("2229", "fcd980603fae0f7051c3809475f7380a"),
"plugins/UserCountry/lang/be.json" => array("529", "688c6bbec8c9080f2444764fa1f856bd"),
"plugins/UserCountry/lang/bg.json" => array("12905", "87d0e744a12a6ded733c9dd5bf748a9c"),
"plugins/UserCountry/lang/ca.json" => array("10401", "de4798193001aa0bffd7d5ea7fb610df"),
"plugins/UserCountry/lang/cs.json" => array("11036", "b2c2bca09f1256e165ac0e6729fd6241"),
- "plugins/UserCountry/lang/da.json" => array("10563", "8f2d64157fc41974d336890f0c69292d"),
+ "plugins/UserCountry/lang/da.json" => array("10596", "8f8644c0c97bc3fa326f5eca16dfd3cf"),
"plugins/UserCountry/lang/de.json" => array("12033", "91edff05664f32aaa7357d34f42edb56"),
"plugins/UserCountry/lang/el.json" => array("18900", "93a368d68cde760395d027df5f8f879f"),
- "plugins/UserCountry/lang/en.json" => array("10589", "1161670274250186f87ee288f6353b12"),
+ "plugins/UserCountry/lang/en.json" => array("10685", "915f2b341ede39e7d0afa95977328935"),
"plugins/UserCountry/lang/es.json" => array("11524", "d0e321dbaae118dd3a20d59179c3b586"),
"plugins/UserCountry/lang/et.json" => array("1609", "f0e66aea765c7d995827901e0639e0ec"),
"plugins/UserCountry/lang/eu.json" => array("195", "0d2f93219b13b870cb96d505a621e928"),
@@ -5985,7 +6013,7 @@ class Manifest {
"plugins/UserCountry/lang/ru.json" => array("15424", "f90c3a3a3f5a3d38c6b4871d8af30e1d"),
"plugins/UserCountry/lang/sk.json" => array("325", "9d0fce406a63ebfad432f05fbc3cfac9"),
"plugins/UserCountry/lang/sl.json" => array("488", "632d0e5632b77400e892d8d90d04eb7e"),
- "plugins/UserCountry/lang/sq.json" => array("11757", "b0afae54b2d8df450c322f758b847140"),
+ "plugins/UserCountry/lang/sq.json" => array("11756", "9752fc20f4357711dd71052c55d7d488"),
"plugins/UserCountry/lang/sr.json" => array("10299", "7722c68786e671fd96590de39e428382"),
"plugins/UserCountry/lang/sv.json" => array("11049", "de3265e00e936be30bd051a5b9c88859"),
"plugins/UserCountry/lang/ta.json" => array("282", "93670005ee2ef3c0bc3784d4bc4d3142"),
@@ -5998,18 +6026,18 @@ class Manifest {
"plugins/UserCountry/lang/zh-cn.json" => array("9170", "a0bf1b2e79c85b1ead5ccb4f49910e6d"),
"plugins/UserCountry/lang/zh-tw.json" => array("10043", "096fe677f0919ef06ea485d493d658dc"),
"plugins/UserCountry/LocationProvider/DefaultProvider.php" => array("3257", "83a47d5613c8158e9f0412910b37b163"),
- "plugins/UserCountry/LocationProvider/GeoIp/Pecl.php" => array("11157", "79e0d052acf0ba515adba24b6d1b23aa"),
- "plugins/UserCountry/LocationProvider/GeoIp.php" => array("8124", "e9b281d3a677ec1f222302f892fd16d9"),
- "plugins/UserCountry/LocationProvider/GeoIp/Php.php" => array("14577", "a9a0c92069fcf61c20f32e0d2177f423"),
- "plugins/UserCountry/LocationProvider/GeoIp/ServerBased.php" => array("10353", "60d0ae056e799964d3d76cd91b2df506"),
- "plugins/UserCountry/LocationProvider.php" => array("16505", "0b72d12df4cb4d9320f1bb187820ba1b"),
+ "plugins/UserCountry/LocationProvider/GeoIp/Pecl.php" => array("11165", "e281bdc2001e37dadbfcb78d682eaa19"),
+ "plugins/UserCountry/LocationProvider/GeoIp.php" => array("8311", "b27e775d37b92cc23b140482a32db03d"),
+ "plugins/UserCountry/LocationProvider/GeoIp/Php.php" => array("14851", "7f1b638438b56287413d9dd540d01d86"),
+ "plugins/UserCountry/LocationProvider/GeoIp/ServerBased.php" => array("10361", "e8dd15811ebf0d473d16e1a66c45512f"),
+ "plugins/UserCountry/LocationProvider.php" => array("17264", "b57cb9d252d8e07f2d1858c4d5f69276"),
"plugins/UserCountryMap/Categories/RealTimeMapSubcategory.php" => array("420", "22e1a7c15487f119b777de1e38da7980"),
- "plugins/UserCountryMap/Controller.php" => array("13271", "382c2dea63ad9fa46637bca4101802c0"),
+ "plugins/UserCountryMap/Controller.php" => array("13269", "067cb4e03742f0ecce753fb12ede9dba"),
"plugins/UserCountryMap/images/cities.png" => array("1038", "7eaa39f8e0021507b8685e3e0b2c87e9"),
"plugins/UserCountryMap/images/realtimemap-loading.gif" => array("308", "a41ca826560fe6eaeb46dd69b6d9dba2"),
"plugins/UserCountryMap/images/regions.png" => array("1265", "1fdee0b6664804d6525dfbe12931b922"),
"plugins/UserCountryMap/images/zoom-out-disabled.png" => array("1297", "81d56e2c732e3ed4bc1a1c7d94632e7b"),
- "plugins/UserCountryMap/javascripts/realtime-map.js" => array("28189", "db360271d7f75271303a78dbca8b5027"),
+ "plugins/UserCountryMap/javascripts/realtime-map.js" => array("27945", "bbcf0ea6388c8198d0b4055ca33f907c"),
"plugins/UserCountryMap/javascripts/vendor/jquery.qtip.min.js" => array("24441", "9b50d81ac4cb3194777a05429abb39d3"),
"plugins/UserCountryMap/javascripts/vendor/kartograph.min.js" => array("67065", "f38ce35c0217ef1651b5ed297c0c08d2"),
"plugins/UserCountryMap/javascripts/vendor/raphael.min.js" => array("95007", "13556c804dbe4a37db6e8a9be37ba412"),
@@ -6020,7 +6048,7 @@ class Manifest {
"plugins/UserCountryMap/lang/bn.json" => array("74", "ea40df7d18c4ec03990dde1e292b10ee"),
"plugins/UserCountryMap/lang/ca.json" => array("55", "e1103b85f2500b0409fef3e1555b24c6"),
"plugins/UserCountryMap/lang/cs.json" => array("1053", "1ccff2afb609d419fba82b1cf1aafcda"),
- "plugins/UserCountryMap/lang/da.json" => array("1007", "81b1f03c1976a2d71f590eedc887f5ea"),
+ "plugins/UserCountryMap/lang/da.json" => array("1006", "af558a4343c840431071afa94da77363"),
"plugins/UserCountryMap/lang/de.json" => array("1068", "0b69cc7e7f2ca8e186108a546867fe46"),
"plugins/UserCountryMap/lang/el.json" => array("1556", "e4eb04f2f0729a7c7ec7c861ac75017a"),
"plugins/UserCountryMap/lang/en.json" => array("976", "97d903ef5ea29aeec00be157aa595d11"),
@@ -6256,14 +6284,13 @@ class Manifest {
"plugins/UserCountry/Reports/GetRegion.php" => array("1230", "3820bb852c11c36459f1b80d595a3f5f"),
"plugins/UserCountry/stylesheets/userCountry.less" => array("738", "d25905d3897d460cf7c6096fa1b023d3"),
"plugins/UserCountry/Tasks.php" => array("538", "06115453594dcef651291362fcba7cac"),
- "plugins/UserCountry/templates/adminIndex.twig" => array("7958", "32ce788449343f02cd09511a057e8be7"),
+ "plugins/UserCountry/templates/adminIndex.twig" => array("9688", "a696c8e5d8301fdb9612401537de7762"),
"plugins/UserCountry/templates/getDistinctCountries.twig" => array("278", "147da98116da24334369e5f4825fa925"),
- "plugins/UserCountry/templates/getGeoIpUpdaterManageScreen.twig" => array("48", "b3ffc6408921cada77599d32ae546511"),
"plugins/UserCountry/templates/_profileSummary.twig" => array("1939", "c2fad3091e964ca7f8fbdf2470356d39"),
- "plugins/UserCountry/templates/_updaterManage.twig" => array("2714", "a40b25e945dcf4d8048b86b64de57e8a"),
+ "plugins/UserCountry/templates/_updaterManage.twig" => array("2760", "90fa1363780233c983455a78bce5a75a"),
"plugins/UserCountry/templates/_updaterNextRunTime.twig" => array("377", "5499f73721db54521c08328bd1210cd6"),
- "plugins/UserCountry/UserCountry.php" => array("3959", "da94aa5cd4d38a350ee6bfb0ea9b9161"),
- "plugins/UserCountry/VisitorDetails.php" => array("5853", "3d8c9127eff5304b9985595114a63c48"),
+ "plugins/UserCountry/UserCountry.php" => array("3888", "453a34381d1bfa3ac4bc1422bec1ee45"),
+ "plugins/UserCountry/VisitorDetails.php" => array("5737", "6df7ee323b3fab3a996c6138e5e59a66"),
"plugins/UserCountry/VisitorGeolocator.php" => array("10896", "075bb6d924cc2364a42b8f5c89e4760d"),
"plugins/UserId/API.php" => array("1095", "1d5eccc341f2042d53baff9524fdd2ec"),
"plugins/UserId/Archiver.php" => array("4105", "e6bfc50e51dae89e0cea0d2d1b2c1aa7"),
@@ -6278,7 +6305,7 @@ class Manifest {
"plugins/UserId/lang/bg.json" => array("77", "f634edca1fba994347e228a6a9349260"),
"plugins/UserId/lang/ca.json" => array("62", "57a25c6505fd6a3e3ca0c7e3228aa1c5"),
"plugins/UserId/lang/cs.json" => array("153", "a295501ac3a9efcf47807b02225d9b2e"),
- "plugins/UserId/lang/da.json" => array("148", "977b570382326500527ad3a19e7e0ad7"),
+ "plugins/UserId/lang/da.json" => array("147", "4de323247a5b5350b32bcf4bd29856c7"),
"plugins/UserId/lang/de.json" => array("152", "a1cfcdd6964dec1414ebefc525e4ed02"),
"plugins/UserId/lang/el.json" => array("220", "3b1b01271113b96a04e863f4c099d227"),
"plugins/UserId/lang/en.json" => array("139", "9c9adc76306d4ab88a0dcaf19f2a2fa9"),
@@ -6336,7 +6363,7 @@ class Manifest {
"plugins/UserLanguage/lang/bg.json" => array("141", "06cbf050cd902edf4c1a41a6e7359143"),
"plugins/UserLanguage/lang/ca.json" => array("74", "517d9a647ca634e725d934ec3080b4a1"),
"plugins/UserLanguage/lang/cs.json" => array("208", "46b68267c8ed894345aa6b207ca65444"),
- "plugins/UserLanguage/lang/da.json" => array("203", "31a371933ea1723393bdda93c71307d8"),
+ "plugins/UserLanguage/lang/da.json" => array("204", "12eadc36d2dbab6e8981cc4fbde7e9dd"),
"plugins/UserLanguage/lang/de.json" => array("222", "f6960e2af8690d3a534b91b184668858"),
"plugins/UserLanguage/lang/el.json" => array("339", "4cfc41ed7db488ba5dbd54b9e63a528b"),
"plugins/UserLanguage/lang/en.json" => array("204", "fc78445517e40377464d578229eb376c"),
@@ -6403,7 +6430,7 @@ class Manifest {
"plugins/UsersManager/lang/bs.json" => array("97", "4dfd11c5c330b2adf981bc2c1bcbe4c8"),
"plugins/UsersManager/lang/ca.json" => array("3658", "ee7790c8f70a2e2da3aa196fc9923463"),
"plugins/UsersManager/lang/cs.json" => array("8775", "8751f817929e5bf84c2c635533b901db"),
- "plugins/UsersManager/lang/da.json" => array("5528", "35373d6c3be33095a6d0494c2e0e6fdd"),
+ "plugins/UsersManager/lang/da.json" => array("5961", "7f3435e1df3500aca55158570f6920ef"),
"plugins/UsersManager/lang/de.json" => array("9705", "28400ccc964b51ac31d5e008b5141640"),
"plugins/UsersManager/lang/el.json" => array("14612", "701fd4765e974c1cffed4f2b90ef578e"),
"plugins/UsersManager/lang/en.json" => array("8279", "587c117a135b0d7524a50091a749c174"),
@@ -6436,7 +6463,7 @@ class Manifest {
"plugins/UsersManager/lang/ru.json" => array("9176", "5d29fbff6b4867fa2cfe252f3ea3c556"),
"plugins/UsersManager/lang/sk.json" => array("2059", "de3f7f8b897b551b63494bca13fd4afa"),
"plugins/UsersManager/lang/sl.json" => array("1671", "da089d18bd5a37b402634b8fb3e7e22a"),
- "plugins/UsersManager/lang/sq.json" => array("9437", "b0986476191ece0a15dccef0ed332990"),
+ "plugins/UsersManager/lang/sq.json" => array("9438", "d35415b10c7087d57a3ee00ec0894ba1"),
"plugins/UsersManager/lang/sr.json" => array("8444", "a3fe9cd47b680bc6dccb3a6961eba788"),
"plugins/UsersManager/lang/sv.json" => array("9018", "fe11a13582b036e01bc1c75de1a2403e"),
"plugins/UsersManager/lang/ta.json" => array("190", "9979b6abfcecefa85689b816a60ae616"),
@@ -6653,7 +6680,7 @@ class Manifest {
"plugins/VisitTime/lang/cs.json" => array("1682", "cb45dc451f72d2835e57130be96d0861"),
"plugins/VisitTime/lang/cy.json" => array("54", "4d6cda78994d38f239ff62f9e7a44de3"),
"plugins/VisitTime/lang/da.json" => array("823", "d3e939b8bc7091225ea1485938d8564d"),
- "plugins/VisitTime/lang/de.json" => array("2169", "2fc1da08643a20b6426c2284df8c1d35"),
+ "plugins/VisitTime/lang/de.json" => array("2332", "abbf3654d0ecd507a03b7aeddb96c68d"),
"plugins/VisitTime/lang/el.json" => array("3614", "09efb08bf50896104faca0c58c870dd5"),
"plugins/VisitTime/lang/en.json" => array("2247", "b055a0d18b8de2ea5ff36f11684abc25"),
"plugins/VisitTime/lang/es.json" => array("1098", "3077de05dd68f1ce7e1320b3111336f5"),
@@ -6762,7 +6789,7 @@ class Manifest {
"plugins/Widgetize/lang/ca.json" => array("220", "c5d8057f3eaaa093c784ce53fe6d79a3"),
"plugins/Widgetize/lang/cs.json" => array("343", "5d9879f7b35f331c9bc5628a14e50966"),
"plugins/Widgetize/lang/cy.json" => array("83", "244418c080929068ea509c751a7e8245"),
- "plugins/Widgetize/lang/da.json" => array("327", "e35da5f3eb7c9b52da9fc11ba13c7b71"),
+ "plugins/Widgetize/lang/da.json" => array("326", "e6bb6c264b28d6fddcc58513879c24db"),
"plugins/Widgetize/lang/de.json" => array("344", "22289c2d8f31c4d2d33941d2485907a6"),
"plugins/Widgetize/lang/el.json" => array("589", "3f25c7adf419d289a3e36dd45881f9d0"),
"plugins/Widgetize/lang/en.json" => array("301", "5af95751d60b5d44a13057c37ea28ca1"),
@@ -6814,14 +6841,19 @@ class Manifest {
"README.md" => array("5933", "f932459ec50f09337db8903ea56112c6"),
"SECURITY.md" => array("1061", "f5a959c05f2c01e9fe438292044801e4"),
"tests/README.md" => array("10392", "f303cde2808f35bc91f8ed1340e43101"),
- "vendor/composer/autoload_classmap.php" => array("307530", "d6cc65ad391410d4f5091bf6044fbaf8"),
+ "vendor/composer/autoload_classmap.php" => array("317994", "0d322b2f3a7144b5621a36ada84f431d"),
"vendor/composer/autoload_files.php" => array("434", "7c2252c579bfcc85fa08e45a61544775"),
"vendor/composer/autoload_namespaces.php" => array("933", "b032f79b3212858dd17c95351ec703b9"),
- "vendor/composer/autoload_psr4.php" => array("1389", "edd020f048a419d26f2f10857570cfe3"),
- "vendor/composer/autoload_static.php" => array("348632", "3535401b6b64637df939476e5b1d5a7a"),
+ "vendor/composer/autoload_psr4.php" => array("1798", "c2fd9515611e42e922e1ca588225fa32"),
+ "vendor/composer/autoload_static.php" => array("361022", "3efa35cab43e47be4649f07fa689c127"),
+ "vendor/composer/ca-bundle/composer.json" => array("1262", "0b62700b3aab40887e7f6c46fc729bf5"),
+ "vendor/composer/ca-bundle/LICENSE" => array("1052", "783e50a8f248e56536e25b4746d035af"),
+ "vendor/composer/ca-bundle/README.md" => array("2214", "44c45494e4ce909fdd0a6a2a0d7bae5b"),
+ "vendor/composer/ca-bundle/res/cacert.pem" => array("215556", "2c43548519379c083d60dd9e84a1b724"),
+ "vendor/composer/ca-bundle/src/CaBundle.php" => array("14169", "5a9a55f7af7e13bc4c35c2401a56550f"),
"vendor/composer/ClassLoader.php" => array("13420", "7bcd58ef2df6fe97165bea70fe9c7712"),
"vendor/composer/include_paths.php" => array("311", "9b2938881ce7597ff4f18807e52c4c05"),
- "vendor/composer/installed.json" => array("50235", "705226da3378549143d4925ee0bb73d8"),
+ "vendor/composer/installed.json" => array("57508", "a8796363e7daff1a3fa2efc8baf03599"),
"vendor/composer/LICENSE" => array("1070", "955d5fe58c231244f6b49000f383b5e2"),
"vendor/composer/semver/CHANGELOG.md" => array("2488", "1808ecc72dd0f1f96bed0ee15f481e16"),
"vendor/composer/semver/composer.json" => array("1405", "c9d59045b27dbde269b9a306458a0e4d"),
@@ -6881,6 +6913,40 @@ class Manifest {
"vendor/doctrine/cache/phpunit.xml.dist" => array("631", "75b1514dfecaf56961c618f39c1d063e"),
"vendor/doctrine/cache/README.md" => array("695", "7b5db3fa29c926511a6c72395c22f9d9"),
"vendor/doctrine/cache/UPGRADE.md" => array("726", "125ec12b697e4354b91d6e773f736472"),
+ "vendor/geoip2/geoip2/CHANGELOG.md" => array("8235", "ce856e1377308a31936428a4d3523d3d"),
+ "vendor/geoip2/geoip2/composer.json" => array("831", "ae02b7214900f12657196bdbf98d08c1"),
+ "vendor/geoip2/geoip2/LICENSE" => array("11358", "3b83ef96387f14655fc854ddc3c6bd57"),
+ "vendor/geoip2/geoip2/README.md" => array("12909", "4a2a25c0553209e85b0559bc0b3f3cc1"),
+ "vendor/geoip2/geoip2/src/Database/Reader.php" => array("9662", "a6c50a1c416776fa983103500c83d8b5"),
+ "vendor/geoip2/geoip2/src/Exception/AddressNotFoundException.php" => array("145", "f7b42f2f1952b78482e1cc6ae3e9c92e"),
+ "vendor/geoip2/geoip2/src/Exception/AuthenticationException.php" => array("144", "a664ef571be82c82fa584545e66ff1fb"),
+ "vendor/geoip2/geoip2/src/Exception/GeoIp2Exception.php" => array("131", "b14e09b853d258d93f7a0fd50e07b1d3"),
+ "vendor/geoip2/geoip2/src/Exception/HttpException.php" => array("427", "c86ccb666bb3ea3c19fdf7070d0ac0cb"),
+ "vendor/geoip2/geoip2/src/Exception/InvalidRequestException.php" => array("520", "4961bbe3eefdb5ff7f52c99e2578bcbf"),
+ "vendor/geoip2/geoip2/src/Exception/OutOfQueriesException.php" => array("142", "35f4fa482a66d2e424b0f0ca9d19d390"),
+ "vendor/geoip2/geoip2/src/Model/AbstractModel.php" => array("1115", "401fd28f4889ff43a435cca85b00a5e5"),
+ "vendor/geoip2/geoip2/src/Model/AnonymousIp.php" => array("1471", "65ba6d67ebdd9c7cf93cebbcb844680b"),
+ "vendor/geoip2/geoip2/src/Model/Asn.php" => array("1001", "9cda840b9d0aba3110b768cdbe2102dc"),
+ "vendor/geoip2/geoip2/src/Model/City.php" => array("4203", "01ec038be43ed9ca59215c7a9bff4a58"),
+ "vendor/geoip2/geoip2/src/Model/ConnectionType.php" => array("768", "649de5e0533abf2d4ec02151ddfb3022"),
+ "vendor/geoip2/geoip2/src/Model/Country.php" => array("2463", "00a651902332d08f1291b4f35280b495"),
+ "vendor/geoip2/geoip2/src/Model/Domain.php" => array("714", "6e34a41e469abf304a43c6206eb2be6b"),
+ "vendor/geoip2/geoip2/src/Model/Enterprise.php" => array("2256", "84a185363a94f5f6be326b5033faaebc"),
+ "vendor/geoip2/geoip2/src/Model/Insights.php" => array("2256", "8c47c61b8cdf3da3be9d310a56e730ee"),
+ "vendor/geoip2/geoip2/src/Model/Isp.php" => array("1353", "ba941470d9bdadb850aadb5d478190db"),
+ "vendor/geoip2/geoip2/src/ProviderInterface.php" => array("474", "5abfcd7ff82a064e66c7d9bc7b849d15"),
+ "vendor/geoip2/geoip2/src/Record/AbstractPlaceRecord.php" => array("1228", "0b60c4490c2e3a8f9b137fe2605052e4"),
+ "vendor/geoip2/geoip2/src/Record/AbstractRecord.php" => array("1314", "24e06b4117ce60c06c77dcceecb87984"),
+ "vendor/geoip2/geoip2/src/Record/City.php" => array("1044", "1c28af2c83a094beaf45da8ee6860e3b"),
+ "vendor/geoip2/geoip2/src/Record/Continent.php" => array("1065", "9971444c87dfde61aa5b093fe0af2406"),
+ "vendor/geoip2/geoip2/src/Record/Country.php" => array("1544", "fb94b8972c30c1a75a25c911ade6f99a"),
+ "vendor/geoip2/geoip2/src/Record/Location.php" => array("2120", "e110f1597d83898c603876e8fd85464a"),
+ "vendor/geoip2/geoip2/src/Record/MaxMind.php" => array("400", "a544719364369e2b22be90558f0687f0"),
+ "vendor/geoip2/geoip2/src/Record/Postal.php" => array("836", "4dc2628d5022d1198a78d9594030f1e0"),
+ "vendor/geoip2/geoip2/src/Record/RepresentedCountry.php" => array("1605", "3e58561044e8fbb0af6dad7c5036190a"),
+ "vendor/geoip2/geoip2/src/Record/Subdivision.php" => array("1491", "9b06d8ef3b75c289fd1c53b982ecb56c"),
+ "vendor/geoip2/geoip2/src/Record/Traits.php" => array("4922", "3b10486f16c4b4609ae9d7b36dc525f6"),
+ "vendor/geoip2/geoip2/src/WebService/Client.php" => array("11559", "2a0b10c8f382d66b93c5e410a8f9889e"),
"vendor/leafo/lessphp/composer.json" => array("546", "35dd24b2cac6551084bdf16744063267"),
"vendor/leafo/lessphp/docs/docs.md" => array("38664", "559d78269160f4dfed1bbe2e79233382"),
"vendor/leafo/lessphp/lessc.inc.php" => array("94979", "b91341fb580a2f2822e2868752e2b1a0"),
@@ -6900,6 +6966,35 @@ class Manifest {
"vendor/matomo/searchengine-and-social-list/README.md" => array("5815", "0528f98b7d7c67ce9a784a4e1af1c0ff"),
"vendor/matomo/searchengine-and-social-list/SearchEngines.yml" => array("41196", "dbec549da760ea0eba354f4e8d853b81"),
"vendor/matomo/searchengine-and-social-list/Socials.yml" => array("2641", "6c2b8b9d1d530615ffb3e09b3e9ee71a"),
+ "vendor/maxmind-db/reader/CHANGELOG.md" => array("3774", "bb6d45972c8e1fc6ffe2eec421fb68f7"),
+ "vendor/maxmind-db/reader/composer.json" => array("1134", "870a8eff3bd97b171b594624db41c05a"),
+ "vendor/maxmind-db/reader/ext/config.m4" => array("701", "e6d700d321e152a73797148a486c449d"),
+ "vendor/maxmind-db/reader/ext/maxminddb.c" => array("17940", "5bb74160ea33b7568ad59e0c9fb1ed51"),
+ "vendor/maxmind-db/reader/ext/php_maxminddb.h" => array("861", "63d9c99a7e67740fcf34c582b42e84c1"),
+ "vendor/maxmind-db/reader/LICENSE" => array("11358", "3b83ef96387f14655fc854ddc3c6bd57"),
+ "vendor/maxmind-db/reader/README.md" => array("4333", "6d0d98d8f36dbebbab1c877b4a69e782"),
+ "vendor/maxmind-db/reader/src/MaxMind/Db/Reader/Decoder.php" => array("8712", "6ff9a9299dd715c8ec2cfe6abf62d1d5"),
+ "vendor/maxmind-db/reader/src/MaxMind/Db/Reader/InvalidDatabaseException.php" => array("177", "30a5d8369ea2012e747ac1e59f78c76f"),
+ "vendor/maxmind-db/reader/src/MaxMind/Db/Reader/Metadata.php" => array("2828", "9a5a3cba86e689c77b0e7e47e1a26628"),
+ "vendor/maxmind-db/reader/src/MaxMind/Db/Reader.php" => array("10348", "397e95ff62e0e5ca74501a4465af7c5b"),
+ "vendor/maxmind-db/reader/src/MaxMind/Db/Reader/Util.php" => array("702", "67c42bf8daa9c064deddac400cadf3fd"),
+ "vendor/maxmind/web-service-common/CHANGELOG.md" => array("2175", "f4462745aac12e9dbc45661e86593567"),
+ "vendor/maxmind/web-service-common/composer.json" => array("736", "e6a7ea65b946cbeaaf4f13bfc7b554fa"),
+ "vendor/maxmind/web-service-common/dev-bin/release.sh" => array("947", "21a161f1436dfb30628d6fa80c4f6c5a"),
+ "vendor/maxmind/web-service-common/LICENSE" => array("11358", "3b83ef96387f14655fc854ddc3c6bd57"),
+ "vendor/maxmind/web-service-common/README.md" => array("766", "83be6354795a8df517e15178dd796d1f"),
+ "vendor/maxmind/web-service-common/src/Exception/AuthenticationException.php" => array("161", "4b236c4a50a88b6530759f67a5db9481"),
+ "vendor/maxmind/web-service-common/src/Exception/HttpException.php" => array("875", "9434316c23197db770e6c7c6037a6b31"),
+ "vendor/maxmind/web-service-common/src/Exception/InsufficientFundsException.php" => array("160", "14886d684f1be0b4b28a66f4b22e490f"),
+ "vendor/maxmind/web-service-common/src/Exception/InvalidInputException.php" => array("295", "72dc20089eb4a5cfaccafe6e2b17a36e"),
+ "vendor/maxmind/web-service-common/src/Exception/InvalidRequestException.php" => array("957", "0c16475216cb97056385eda43f7174e7"),
+ "vendor/maxmind/web-service-common/src/Exception/IpAddressNotFoundException.php" => array("106", "16313ab0d82195477e1ba071e7696313"),
+ "vendor/maxmind/web-service-common/src/Exception/PermissionRequiredException.php" => array("191", "f832cea2f10902ae2ffa4521e13c73d1"),
+ "vendor/maxmind/web-service-common/src/Exception/WebServiceException.php" => array("148", "6882e0d113e22478202f99caf306bde9"),
+ "vendor/maxmind/web-service-common/src/WebService/Client.php" => array("15823", "61a0136d3b539c17b75623e5d36df349"),
+ "vendor/maxmind/web-service-common/src/WebService/Http/CurlRequest.php" => array("2757", "b7e7704b7a92e40360df29395f4008a0"),
+ "vendor/maxmind/web-service-common/src/WebService/Http/RequestFactory.php" => array("360", "ea623b76279567c2d1017e949eaeaf6b"),
+ "vendor/maxmind/web-service-common/src/WebService/Http/Request.php" => array("381", "978f4b64578cb9aad8bf0745c457f8af"),
"vendor/monolog/monolog/CHANGELOG.md" => array("18812", "f58efa4c065a25a8eb5d581c2669afc4"),
"vendor/monolog/monolog/composer.json" => array("2530", "31efc31a62405fbc4623d26f02a6781f"),
"vendor/monolog/monolog/doc/01-usage.md" => array("8476", "19affbf8e2727bdfed42e3e92000365a"),
@@ -7052,11 +7147,13 @@ class Manifest {
"vendor/php-di/invoker/src/ParameterResolver/TypeHintResolver.php" => array("1094", "38de40078cafd29bc82f32ffa1dc72ea"),
"vendor/php-di/invoker/src/Reflection/CallableReflection.php" => array("1739", "ac3550c7eeb420b2095ad604f1efb0f1"),
"vendor/php-di/php-di/404.md" => array("20", "53eebfedc3afd2e33a7816dd46c5d8c1"),
- "vendor/php-di/php-di/change-log.md" => array("21585", "528a49151067b0f24de9bbcdc22e2fcc"),
- "vendor/php-di/php-di/composer.json" => array("1567", "96894271bd55cbf8769e5c8fd9d59b6e"),
+ "vendor/php-di/php-di/benchmarks/DI/ContainerBench.php" => array("1630", "bb66d9b9c46b8437adb28fc516d0d68b"),
+ "vendor/php-di/php-di/change-log.md" => array("22206", "9e9e5e8c641633cf3cce521ada6c4860"),
+ "vendor/php-di/php-di/composer.json" => array("1604", "62b2380d22e28eb10262b521535e9e87"),
"vendor/php-di/php-di/CONTRIBUTING.md" => array("1418", "6ad4e8ae9f1173958d69193e97e204c6"),
"vendor/php-di/php-di/couscous.yml" => array("4497", "73a4389f9c50cb731975b6b286e25a29"),
"vendor/php-di/php-di/LICENSE" => array("1089", "e9ca821bc26512de64035c2dff023766"),
+ "vendor/php-di/php-di/phpbench.json" => array("42", "0457048e06d2d6c606e25ae4f33c6a11"),
"vendor/php-di/php-di/.phpstorm.meta.php" => array("484", "3827c2375fca4bc5cf967970449301f2"),
"vendor/php-di/php-di/phpunit.xml.dist" => array("846", "68fd99ec416c05fdfbd14ebc01baf79e"),
"vendor/php-di/php-di/README.md" => array("1435", "325a08affd8be04af02044064165a0bb"),
@@ -7064,7 +7161,7 @@ class Manifest {
"vendor/php-di/php-di/src/DI/Annotation/Inject.php" => array("2017", "7f2d6db0345eeffe171bfa98b2ee55ae"),
"vendor/php-di/php-di/src/DI/Cache/ArrayCache.php" => array("1668", "ab711aa2a2a4d70faa92ae70c1845130"),
"vendor/php-di/php-di/src/DI/ContainerBuilder.php" => array("7467", "7c26cd691b90c21bb60706ffad8f61bd"),
- "vendor/php-di/php-di/src/DI/Container.php" => array("11675", "40881ced381066ffbed014be72164e4e"),
+ "vendor/php-di/php-di/src/DI/Container.php" => array("12092", "f6f82c94d5cd5b501d3384f93b57a420"),
"vendor/php-di/php-di/src/DI/Debug.php" => array("505", "0de1df907fc2981169024bbcbb13feb4"),
"vendor/php-di/php-di/src/DI/Definition/AliasDefinition.php" => array("1499", "704b20a0d58c21828191833afdf3b9d9"),
"vendor/php-di/php-di/src/DI/Definition/ArrayDefinitionExtension.php" => array("1187", "91a7fea20ce1b22436a6fa589992ddba"),
@@ -7091,7 +7188,7 @@ class Manifest {
"vendor/php-di/php-di/src/DI/Definition/ObjectDefinition.php" => array("8056", "93aab7220e4fd4a9b4cc30a27af8ec70"),
"vendor/php-di/php-di/src/DI/Definition/ObjectDefinition/PropertyInjection.php" => array("1485", "82e52557b18bde840f3d455ae7a0e662"),
"vendor/php-di/php-di/src/DI/Definition/Resolver/ArrayResolver.php" => array("2020", "8b5f8e69ac1f22fc79eaebba2f1fdee4"),
- "vendor/php-di/php-di/src/DI/Definition/Resolver/DecoratorResolver.php" => array("2481", "76734ad908baa314713381454c5596c6"),
+ "vendor/php-di/php-di/src/DI/Definition/Resolver/DecoratorResolver.php" => array("2494", "31058dda0a2417097990dda82007583a"),
"vendor/php-di/php-di/src/DI/Definition/Resolver/DefinitionResolver.php" => array("1079", "49e595722ab61f2fe283682f9678def1"),
"vendor/php-di/php-di/src/DI/Definition/Resolver/EnvironmentVariableResolver.php" => array("1885", "9b26aca66bd5ddb15f3f74ccee61249b"),
"vendor/php-di/php-di/src/DI/Definition/Resolver/FactoryResolver.php" => array("4129", "4c584fe68230d084ef9e405d4213a254"),
diff --git a/piwik/core/API/DataTableManipulator/Flattener.php b/piwik/core/API/DataTableManipulator/Flattener.php
index 1fc5edc..90aa477 100644
--- a/piwik/core/API/DataTableManipulator/Flattener.php
+++ b/piwik/core/API/DataTableManipulator/Flattener.php
@@ -97,7 +97,7 @@ class Flattener extends DataTableManipulator
$label = trim($label);
if ($this->recursiveLabelSeparator == '/') {
- if (substr($label, 0, 1) == '/') {
+ if (substr($label, 0, 1) == '/' && substr($labelPrefix, -1) == '/') {
$label = substr($label, 1);
} elseif ($rowId === DataTable::ID_SUMMARY_ROW && $labelPrefix && $label != DataTable::LABEL_SUMMARY_ROW) {
$label = ' - ' . $label;
diff --git a/piwik/core/Archive/ArchiveInvalidator.php b/piwik/core/Archive/ArchiveInvalidator.php
index 6ecc5b8..59370cf 100644
--- a/piwik/core/Archive/ArchiveInvalidator.php
+++ b/piwik/core/Archive/ArchiveInvalidator.php
@@ -15,6 +15,7 @@ use Piwik\DataAccess\ArchiveTableCreator;
use Piwik\DataAccess\Model;
use Piwik\Date;
use Piwik\Option;
+use Piwik\Piwik;
use Piwik\Plugins\CoreAdminHome\Tasks\ArchivesToPurgeDistributedList;
use Piwik\Plugins\PrivacyManager\PrivacyManager;
use Piwik\Period;
@@ -59,15 +60,26 @@ class ArchiveInvalidator
public function rememberToInvalidateArchivedReportsLater($idSite, Date $date)
{
- $key = $this->buildRememberArchivedReportId($idSite, $date->toString());
- $value = Option::get($key);
+ // To support multiple transactions at once, look for any other process to have set (and committed)
+ // this report to be invalidated.
+ $key = $this->buildRememberArchivedReportIdForSiteAndDate($idSite, $date->toString());
// we do not really have to get the value first. we could simply always try to call set() and it would update or
// insert the record if needed but we do not want to lock the table (especially since there are still some
// MyISAM installations)
-
- if (false === $value) {
- Option::set($key, '1');
+ $value = Option::getLike($key . '%');
+
+ // In order to support multiple concurrent transactions, add our pid to the end of the key so that it will just insert
+ // rather than waiting on some other process to commit before proceeding.The issue is that with out this, more than
+ // one process is trying to add the exact same value to the table, which causes contention. With the pid suffixed to
+ // the value, each process can successfully enter its own row in the table. The net result will be the same. We could
+ // always just set this, but it would result in a lot of rows in the options table.. more than needed. With this
+ // change you'll have at most N rows per date/site, where N is the number of parallel requests on this same idsite/date
+ // that happen to run in overlapping transactions.
+ $mykey = $this->buildRememberArchivedReportIdProcessSafe($idSite, $date->toString());
+ // getLike() returns an empty array rather than 'false'
+ if (empty($value)) {
+ Option::set($mykey, '1');
}
}
@@ -93,7 +105,12 @@ class ArchiveInvalidator
return $sitesPerDay;
}
- private function buildRememberArchivedReportId($idSite, $date)
+ private function buildRememberArchivedReportIdForSite($idSite)
+ {
+ return $this->rememberArchivedReportIdStart . (int) $idSite;
+ }
+
+ private function buildRememberArchivedReportIdForSiteAndDate($idSite, $date)
{
$id = $this->buildRememberArchivedReportIdForSite($idSite);
$id .= '_' . trim($date);
@@ -101,9 +118,12 @@ class ArchiveInvalidator
return $id;
}
- private function buildRememberArchivedReportIdForSite($idSite)
+ // This version is multi process safe on the insert of a new date to invalidate.
+ private function buildRememberArchivedReportIdProcessSafe($idSite, $date)
{
- return $this->rememberArchivedReportIdStart . (int) $idSite;
+ $id = $this->buildRememberArchivedReportIdForSiteAndDate($idSite, $date);
+ $id .= '_' . getmypid();
+ return $id;
}
public function forgetRememberedArchivedReportsToInvalidateForSite($idSite)
@@ -117,9 +137,11 @@ class ArchiveInvalidator
*/
public function forgetRememberedArchivedReportsToInvalidate($idSite, Date $date)
{
- $id = $this->buildRememberArchivedReportId($idSite, $date->toString());
+ $id = $this->buildRememberArchivedReportIdForSiteAndDate($idSite, $date->toString());
- Option::delete($id);
+ // The process pid is added to the end of the entry in order to support multiple concurrent transactions.
+ // So this must be a deleteLike call to get all the entries, where there used to only be one.
+ Option::deleteLike($id . '%');
}
/**
@@ -135,6 +157,29 @@ class ArchiveInvalidator
{
$invalidationInfo = new InvalidationResult();
+ /**
+ * Triggered when a Matomo user requested the invalidation of some reporting archives. Using this event, plugin
+ * developers can automatically invalidate another site, when a site is being invalidated. A plugin may even
+ * remove an idSite from the list of sites that should be invalidated to prevent it from ever being
+ * invalidated.
+ *
+ * **Example**
+ *
+ * public function getIdSitesToMarkArchivesAsInvalidates(&$idSites)
+ * {
+ * if (in_array(1, $idSites)) {
+ * $idSites[] = 5; // when idSite 1 is being invalidated, also invalidate idSite 5
+ * }
+ * }
+ *
+ * @param array &$idSites An array containing a list of site IDs which are requested to be invalidated.
+ */
+ Piwik::postEvent('Archiving.getIdSitesToMarkArchivesAsInvalidated', array(&$idSites));
+ // we trigger above event on purpose here and it is good that the segment was created like
+ // `new Segment($segmentString, $idSites)` because when a user adds a site via this event, the added idSite
+ // might not have this segment meaning we avoid a possible error. For the workflow to work, any added or removed
+ // idSite does not need to be added to $segment.
+
$datesToInvalidate = $this->removeDatesThatHaveBeenPurged($dates, $invalidationInfo);
if (empty($period)) {
diff --git a/piwik/core/AssetManager/UIAssetMerger/StylesheetUIAssetMerger.php b/piwik/core/AssetManager/UIAssetMerger/StylesheetUIAssetMerger.php
index 3adbb5b..a485a51 100644
--- a/piwik/core/AssetManager/UIAssetMerger/StylesheetUIAssetMerger.php
+++ b/piwik/core/AssetManager/UIAssetMerger/StylesheetUIAssetMerger.php
@@ -68,7 +68,7 @@ class StylesheetUIAssetMerger extends UIAssetMerger
protected function concatenateAssets()
{
- $mergedContent = '';
+ $concatenatedContent = '';
foreach ($this->getAssetCatalog()->getAssets() as $uiAsset) {
$uiAsset->validateFile();
@@ -81,15 +81,25 @@ class StylesheetUIAssetMerger extends UIAssetMerger
if (!empty($path) && Common::stringEndsWith($path, '.css')) {
// to fix #10173
- $mergedContent .= "\n" . $this->getCssStatementForReplacement($path) . "\n";
+ $concatenatedContent .= "\n" . $this->getCssStatementForReplacement($path) . "\n";
$this->cssAssetsToReplace[] = $uiAsset;
} else {
$content = $this->processFileContent($uiAsset);
- $mergedContent .= $this->getFileSeparator() . $content;
+ $concatenatedContent .= $this->getFileSeparator() . $content;
}
}
- $this->mergedContent = $mergedContent;
+ /**
+ * Triggered after all less stylesheets are concatenated into one long string but before it is
+ * minified and merged into one file.
+ *
+ * This event can be used to add less stylesheets that are not located in a file on the disc.
+ *
+ * @param string $concatenatedContent The content of all concatenated less files.
+ */
+ Piwik::postEvent('AssetManager.addStylesheets', array(&$concatenatedContent));
+
+ $this->mergedContent = $concatenatedContent;
}
/**
diff --git a/piwik/core/CliMulti.php b/piwik/core/CliMulti.php
index ef360f0..841386e 100644
--- a/piwik/core/CliMulti.php
+++ b/piwik/core/CliMulti.php
@@ -148,13 +148,18 @@ class CliMulti
$this->outputs[] = $output;
}
- private function buildCommand($hostname, $query, $outputFile)
+ private function buildCommand($hostname, $query, $outputFile, $doEsacpeArg = true)
{
$bin = $this->findPhpBinary();
$superuserCommand = $this->runAsSuperUser ? "--superuser" : "";
+ if ($doEsacpeArg) {
+ $hostname = escapeshellarg($hostname);
+ $query = escapeshellarg($query);
+ }
+
return sprintf('%s %s %s/console climulti:request -q --piwik-domain=%s %s %s > %s 2>&1 &',
- $bin, $this->phpCliOptions, PIWIK_INCLUDE_PATH, escapeshellarg($hostname), $superuserCommand, escapeshellarg($query), $outputFile);
+ $bin, $this->phpCliOptions, PIWIK_INCLUDE_PATH, $hostname, $superuserCommand, $query, $outputFile);
}
private function getResponse()
@@ -266,6 +271,38 @@ class CliMulti
return StaticContainer::get('path.tmp') . '/climulti';
}
+ public function isCommandAlreadyRunning($url)
+ {
+ if (defined('PIWIK_TEST_MODE')) {
+ return false; // skip check in tests as it might result in random failures
+ }
+
+ if (!$this->supportsAsync) {
+ // we cannot detect if web archive is still running
+ return false;
+ }
+
+ $query = UrlHelper::getQueryFromUrl($url, array('pid' => 'removeme'));
+ $hostname = Url::getHost($checkIfTrusted = false);
+ $commandToCheck = $this->buildCommand($hostname, $query, $output = '', $escape = false);
+
+ $currentlyRunningJobs = `ps aux`;
+
+ $posStart = strpos($commandToCheck, 'console climulti');
+ $posPid = strpos($commandToCheck, '&pid='); // the pid is random each time so we need to ignore it.
+ $shortendCommand = substr($commandToCheck, $posStart, $posPid - $posStart);
+ // equals eg console climulti:request -q --piwik-domain= --superuser module=API&method=API.get&idSite=1&period=month&date=2018-04-08,2018-04-30&format=php&trigger=archivephp
+ $shortendCommand = preg_replace("/([&])date=.*?(&|$)/", "", $shortendCommand);
+ $currentlyRunningJobs = preg_replace("/([&])date=.*?(&|$)/", "", $currentlyRunningJobs);
+
+ if (strpos($currentlyRunningJobs, $shortendCommand) !== false) {
+ Log::debug($shortendCommand . ' is already running');
+ return true;
+ }
+
+ return false;
+ }
+
private function executeAsyncCli($url, Output $output, $cmdId)
{
$this->processes[] = new Process($cmdId);
diff --git a/piwik/core/Common.php b/piwik/core/Common.php
index 7430cc6..6d6b05e 100644
--- a/piwik/core/Common.php
+++ b/piwik/core/Common.php
@@ -1143,6 +1143,19 @@ class Common
}
/**
+ * Strips outgoing header.
+ *
+ * @param string $name The header name.
+ */
+ public static function stripHeader($name)
+ {
+ // don't strip header in CLI mode
+ if (!Common::isPhpCliMode() and !headers_sent()) {
+ header_remove($name);
+ }
+ }
+
+ /**
* Sends the given response code if supported.
*
* @param int $code Eg 204
diff --git a/piwik/core/CronArchive.php b/piwik/core/CronArchive.php
index c289559..253a6a0 100644
--- a/piwik/core/CronArchive.php
+++ b/piwik/core/CronArchive.php
@@ -365,19 +365,36 @@ class CronArchive
$this->logSection("START");
$this->logger->info("Starting Matomo reports archiving...");
- do {
+ $numWebsitesScheduled = $this->websites->getNumSites();
+ $numWebsitesArchived = 0;
+ do {
if ($this->isMaintenanceModeEnabled()) {
$this->logger->info("Archiving will stop now because maintenance mode is enabled");
return;
}
$idSite = $this->websites->getNextSiteId();
+ $numWebsitesArchived++;
if (null === $idSite) {
break;
}
+ if ($numWebsitesArchived > $numWebsitesScheduled) {
+ // this is needed because a cron:archive might run for example for 5 hours. Meanwhile 5 other
+ // `cron:archive` have been possibly started... this means meanwhile, within the 5 hours, the
+ // `list of SharedSiteIds` have been potentially emptied and filled again from the beginning.
+ // This means 5 hours later, even though all websites that were originally in the list have been
+ // finished by now, the `cron:archive` will stay active and continue processing because the list of
+ // siteIds to archive was resetted by another `cron:archive` command. Potentially some `cron:archive`
+ // will basically never end because by the time the `cron:archive` finishes, the sharedSideIds have
+ // been resettet. This can eventually lead to some random concurrency issues when there are like
+ // 40 `core:archive` active at the same time.
+ $this->logger->info("Stopping archiving as the initial list of websites has been processed.");
+ return;
+ }
+
flush();
$requestsBefore = $this->requests;
if ($idSite <= 0) {
@@ -612,21 +629,13 @@ class CronArchive
// Skip this day archive if last archive was older than TTL
$existingArchiveIsValid = ($elapsedSinceLastArchiving < $this->todayArchiveTimeToLive);
- $skipDayArchive = $existingArchiveIsValid;
-
- // Invalidate old website forces the archiving for this site
- $skipDayArchive = $skipDayArchive && !$websiteInvalidatedShouldReprocess;
-
- // Also reprocess when day has ended since last run
- if ($dayHasEndedMustReprocess
- // it might have reprocessed for that day by another cron
- && !$this->hasBeenProcessedSinceMidnight($idSite, $lastTimestampWebsiteProcessedDay)
- && !$existingArchiveIsValid) {
- $skipDayArchive = false;
- }
-
- if ($websiteIdIsForced) {
- $skipDayArchive = false;
+ $skipDayArchive = false;
+ if($existingArchiveIsValid
+ && !$websiteIdIsForced
+ && !$websiteInvalidatedShouldReprocess
+ && !$dayHasEndedMustReprocess
+ && $this->hasBeenProcessedSinceMidnight($idSite, $lastTimestampWebsiteProcessedDay)) {
+ $skipDayArchive = true;
}
if ($skipDayArchive) {
@@ -714,6 +723,10 @@ class CronArchive
$date = $this->getApiDateParameter($idSite, $period, $lastTimestampWebsiteProcessedPeriods);
$periodArchiveWasSuccessful = $this->archiveReportsFor($idSite, $period, $date, $archiveSegments = true, $timer);
$success = $periodArchiveWasSuccessful && $success;
+ if(!$success) {
+ // if it failed, we abort the current website processing
+ return $success;
+ }
}
if ($this->shouldProcessPeriod('range')) {
@@ -777,10 +790,6 @@ class CronArchive
$timer = new Timer();
- // Fake that the request is already done, so that other core:archive commands
- // running do not grab the same website from the queue
- Option::set($this->lastRunKey($idSite, "day"), time());
-
// Remove this website from the list of websites to be invalidated
// since it's now just about to being re-processed, makes sure another running cron archiving process
// does not archive the same idSite
@@ -805,6 +814,13 @@ class CronArchive
$this->logArchiveWebsite($idSite, "day", $date);
+ $cliMulti = $this->makeCliMulti();
+ if ($cliMulti->isCommandAlreadyRunning($this->makeRequestUrl($url))) {
+ $this->logger->info("Skipped website id $idSite, such a process is already in progress, " . $timerWebsite->__toString());
+ $this->skipped++;
+ return false;
+ }
+
$content = $this->request($url);
$daysResponse = @unserialize($content);
@@ -812,9 +828,6 @@ class CronArchive
|| !is_array($daysResponse)
|| count($daysResponse) == 0
) {
- // cancel the successful run flag
- Option::set($this->lastRunKey($idSite, "day"), 0);
-
// cancel marking the site as reprocessed
if ($websiteInvalidatedShouldReprocess) {
$store = new SitesToReprocessDistributedList();
@@ -860,9 +873,12 @@ class CronArchive
$this->visitsToday += $visitsToday;
$this->websitesWithVisitsSinceLastRun++;
- $this->archiveReportsFor($idSite, "day", $this->getApiDateParameter($idSite, "day", $processDaysSince), $archiveSegments = true, $timer, $visitsToday, $visitsLastDays);
+ $dayArchiveWasSuccessful = $this->archiveReportsFor($idSite, "day", $this->getApiDateParameter($idSite, "day", $processDaysSince), $archiveSegments = true, $timer, $visitsToday, $visitsLastDays);
- return true;
+ if($dayArchiveWasSuccessful) {
+ Option::set($this->lastRunKey($idSite, "day"), time());
+ }
+ return $dayArchiveWasSuccessful;
}
/**
@@ -915,9 +931,26 @@ class CronArchive
$urls = array();
+ $cliMulti = $this->makeCliMulti();
+
$noSegmentUrl = $url;
+
// already processed above for "day"
if ($period != "day") {
+
+ $periodInProgress = $this->isAlreadyArchivingAnyLowerPeriod($idSite, $period);
+ if ($periodInProgress) {
+ $this->logger->info("- skipping archiving for period '{period}' because processing the period '{periodcheck}' is already in progress.", array('period' => $period, 'periodcheck' => $periodInProgress));
+ $success = false;
+ return $success;
+ }
+
+ if ($cliMulti->isCommandAlreadyRunning($url)) {
+ $this->logArchiveWebsiteAlreadyInProcess($idSite, $period, $date);
+ $success = false;
+ return $success;
+ }
+
$urls[] = $url;
$this->logArchiveWebsite($idSite, $period, $date);
}
@@ -934,7 +967,6 @@ class CronArchive
$this->requests += count($urls);
- $cliMulti = $this->makeCliMulti();
$cliMulti->setConcurrentProcessesLimit($this->getConcurrentRequestsPerWebsite());
$response = $cliMulti->request($urls);
@@ -944,8 +976,10 @@ class CronArchive
if ($noSegmentUrl === $url && $success) {
$stats = @unserialize($content);
+
if (!is_array($stats)) {
$this->logError("Error unserializing the following response from $url: " . $content);
+ $success = false;
}
if ($period == 'range') {
@@ -1117,7 +1151,8 @@ class CronArchive
$sitesPerDays = $this->invalidator->getRememberedArchivedReportsThatShouldBeInvalidated();
foreach ($sitesPerDays as $date => $siteIds) {
- $listSiteIds = implode(',', $siteIds);
+ //Concurrent transaction logic will end up with duplicates set. Adding array_unique to the siteIds.
+ $listSiteIds = implode(',', array_unique($siteIds ));
try {
$this->logger->info('- Will invalidate archived reports for ' . $date . ' for following websites ids: ' . $listSiteIds);
@@ -1691,14 +1726,28 @@ class CronArchive
$segments[] = $segment;
}
+ $cliMulti = $this->makeCliMulti();
+
$segmentCount = count($segments);
$processedSegmentCount = 0;
+
foreach ($segments as $segment) {
$dateParamForSegment = $this->segmentArchivingRequestUrlProvider->getUrlParameterDateString($idSite, $period, $date, $segment);
$urlWithSegment = $this->getVisitsRequestUrl($idSite, $period, $dateParamForSegment, $segment);
$urlWithSegment = $this->makeRequestUrl($urlWithSegment);
+ $periodInProgress = $this->isAlreadyArchivingAnyLowerPeriod($idSite, $period);
+ if ($periodInProgress) {
+ $this->logger->info("- skipping segment archiving for period '{period}' with segment '{segment}' because processing the period '{periodcheck}' is already in progress.", array('segment' => $segment, 'period' => $period, 'periodcheck' => $periodInProgress));
+ continue;
+ }
+
+ if ($cliMulti->isCommandAlreadyRunning($urlWithSegment)) {
+ $this->logger->info("- skipping segment archiving for '{segment}' because such a process is already in progress.", array('segment' => $segment));
+ continue;
+ }
+
$request = new Request($urlWithSegment);
$logger = $this->logger;
$request->before(function () use ($logger, $segment, $segmentCount, &$processedSegmentCount) {
@@ -1717,6 +1766,32 @@ class CronArchive
return $urlsWithSegment;
}
+ private function isAlreadyArchivingAnyLowerPeriod($idSite, $period, $segment = false)
+ {
+ $periodOrder = array('day', 'week', 'month', 'year');
+ $cliMulti = $this->makeCliMulti();
+
+ $index = array_search($period, $periodOrder);
+ if ($index > 0) {
+ // we only need to check for week, month, year if any earlier period is already running
+ // so when period = month, then we check for day and week
+
+ for ($i = 0; $i < $index; $i++) {
+ $periodToCheck = $periodOrder[$i];
+
+ // the date will be ignored in isCommandAlreadyRunning() because it could be any date
+ $urlCheck = $this->getVisitsRequestUrl($idSite, $periodToCheck, 'last2', $segment);
+ $urlCheck = $this->makeRequestUrl($urlCheck);
+
+ if ($cliMulti->isCommandAlreadyRunning($urlCheck)) {
+ return $periodToCheck;
+ }
+ }
+ }
+
+ return false;
+ }
+
private function createSitesToArchiveQueue($websitesIds)
{
// use synchronous, single process queue if --force-idsites is used or sharing site IDs isn't supported
@@ -1748,6 +1823,21 @@ class CronArchive
$this->logger->info('- pre-processing all visits');
}
+ /**
+ * @param $idSite
+ * @param $period
+ * @param $date
+ */
+ private function logArchiveWebsiteAlreadyInProcess($idSite, $period, $date)
+ {
+ $this->logger->info(sprintf(
+ "Will not pre-process for website id = %s, period = %s, date = %s because such a process is already in progress.",
+ $idSite,
+ $period,
+ $date
+ ));
+ }
+
private function shouldSkipSegmentArchiving($segment)
{
if ($this->disableSegmentsArchiving) {
diff --git a/piwik/core/CronArchive/SharedSiteIds.php b/piwik/core/CronArchive/SharedSiteIds.php
index f77f3d3..9577963 100644
--- a/piwik/core/CronArchive/SharedSiteIds.php
+++ b/piwik/core/CronArchive/SharedSiteIds.php
@@ -29,6 +29,7 @@ class SharedSiteIds
private $siteIds = array();
private $currentSiteId;
private $done = false;
+ private $numWebsitesLeftToProcess;
public function __construct($websiteIds, $optionName = self::OPTION_DEFAULT)
{
@@ -52,6 +53,7 @@ class SharedSiteIds
return $websiteIds;
});
+ $this->numWebsitesLeftToProcess = $this->getNumSites();
}
public function getInitialSiteIds()
@@ -154,6 +156,12 @@ class SharedSiteIds
*/
public function getNextSiteId()
{
+ if ($this->done) {
+ // we make sure we don't check again whether there are more sites to be archived as the list of
+ // sharedSiteIds may have been reset by now.
+ return null;
+ }
+
$self = $this;
$this->currentSiteId = $this->runExclusive(function () use ($self) {
@@ -161,9 +169,18 @@ class SharedSiteIds
$siteIds = $self->getAllSiteIdsToArchive();
if (empty($siteIds)) {
+ // done... no sites left to be archived
return null;
}
+ if (count($siteIds) > $self->numWebsitesLeftToProcess) {
+ // done... the number of siteIds in SharedSiteIds is larger than it was initially... therefore it must have
+ // been reset at some point.
+ return null;
+ }
+
+ $self->numWebsitesLeftToProcess = count($siteIds);
+
$nextSiteId = array_shift($siteIds);
$self->setSiteIdsToArchive($siteIds);
@@ -172,6 +189,7 @@ class SharedSiteIds
if (is_null($this->currentSiteId)) {
$this->done = true;
+ $this->numWebsitesLeftToProcess = 0;
}
return $this->currentSiteId;
diff --git a/piwik/core/Db/Adapter/Mysqli.php b/piwik/core/Db/Adapter/Mysqli.php
index 396ab60..f8fe9a0 100644
--- a/piwik/core/Db/Adapter/Mysqli.php
+++ b/piwik/core/Db/Adapter/Mysqli.php
@@ -29,6 +29,28 @@ class Mysqli extends Zend_Db_Adapter_Mysqli implements AdapterInterface
{
// Enable LOAD DATA INFILE
$config['driver_options'][MYSQLI_OPT_LOCAL_INFILE] = true;
+
+ if ($config['enable_ssl']) {
+ if (!empty($config['ssl_key'])) {
+ $config['driver_options']['ssl_key'] = $config['ssl_key'];
+ }
+ if (!empty($config['ssl_cert'])) {
+ $config['driver_options']['ssl_cert'] = $config['ssl_cert'];
+ }
+ if (!empty($config['ssl_ca'])) {
+ $config['driver_options']['ssl_ca'] = $config['ssl_ca'];
+ }
+ if (!empty($config['ssl_ca_path'])) {
+ $config['driver_options']['ssl_ca_path'] = $config['ssl_ca_path'];
+ }
+ if (!empty($config['ssl_cipher'])) {
+ $config['driver_options']['ssl_cipher'] = $config['ssl_cipher'];
+ }
+ if (!empty($config['ssl_no_verify'])) {
+ $config['driver_options']['ssl_no_verify'] = $config['ssl_no_verify'];
+ }
+ }
+
parent::__construct($config);
}
@@ -77,6 +99,24 @@ class Mysqli extends Zend_Db_Adapter_Mysqli implements AdapterInterface
}
/**
+ * Returns the MySQL server version
+ *
+ * @return null|string
+ */
+ public function getServerVersion()
+ {
+ // prioritizing SELECT @@VERSION in case the connection version string is incorrect (which can
+ // occur on Azure)
+ $versionInfo = $this->fetchAll('SELECT @@VERSION');
+
+ if (count($versionInfo)) {
+ return $versionInfo[0]['@@VERSION'];
+ }
+
+ return parent::getServerVersion();
+ }
+
+ /**
* Check client version compatibility against database server
*
* @throws Exception
diff --git a/piwik/core/Db/Adapter/Pdo/Mysql.php b/piwik/core/Db/Adapter/Pdo/Mysql.php
index 360e6a5..b45d718 100644
--- a/piwik/core/Db/Adapter/Pdo/Mysql.php
+++ b/piwik/core/Db/Adapter/Pdo/Mysql.php
@@ -35,6 +35,28 @@ class Mysql extends Zend_Db_Adapter_Pdo_Mysql implements AdapterInterface
if (defined('PDO::MYSQL_ATTR_LOCAL_INFILE')) {
$config['driver_options'][PDO::MYSQL_ATTR_LOCAL_INFILE] = true;
}
+ if ($config['enable_ssl']) {
+ if (!empty($config['ssl_key'])) {
+ $config['driver_options'][PDO::MYSQL_ATTR_SSL_KEY] = $config['ssl_key'];
+ }
+ if (!empty($config['ssl_cert'])) {
+ $config['driver_options'][PDO::MYSQL_ATTR_SSL_CERT] = $config['ssl_cert'];
+ }
+ if (!empty($config['ssl_ca'])) {
+ $config['driver_options'][PDO::MYSQL_ATTR_SSL_CA] = $config['ssl_ca'];
+ }
+ if (!empty($config['ssl_ca_path'])) {
+ $config['driver_options'][PDO::MYSQL_ATTR_SSL_CAPATH] = $config['ssl_ca_path'];
+ }
+ if (!empty($config['ssl_cipher'])) {
+ $config['driver_options'][PDO::MYSQL_ATTR_SSL_CIPHER] = $config['ssl_cipher'];
+ }
+ if (!empty($config['ssl_no_verify'])
+ && defined('PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT')
+ ) {
+ $config['driver_options'][PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT] = false;
+ }
+ }
parent::__construct($config);
}
@@ -113,6 +135,24 @@ class Mysql extends Zend_Db_Adapter_Pdo_Mysql implements AdapterInterface
}
/**
+ * Returns the MySQL server version
+ *
+ * @return null|string
+ */
+ public function getServerVersion()
+ {
+ // prioritizing SELECT @@VERSION in case the connection version string is incorrect (which can
+ // occur on Azure)
+ $versionInfo = $this->fetchAll('SELECT @@VERSION');
+
+ if (count($versionInfo)) {
+ return $versionInfo[0]['@@VERSION'];
+ }
+
+ return parent::getServerVersion();
+ }
+
+ /**
* Check client version compatibility against database server
*
* @throws Exception
diff --git a/piwik/core/Db/BatchInsert.php b/piwik/core/Db/BatchInsert.php
index 6e27f51..a0c6718 100644
--- a/piwik/core/Db/BatchInsert.php
+++ b/piwik/core/Db/BatchInsert.php
@@ -179,7 +179,11 @@ class BatchInsert
* this requires that the db user have the FILE privilege; however, since this is
* a global privilege, it may not be granted due to security concerns
*/
- $keywords = array('');
+ if (Config::getInstance()->General['multi_server_environment']) {
+ $keywords = array(); // don't try 'LOAD DATA INFILE' if in a multi_server_environment
+ } else {
+ $keywords = array('');
+ }
/*
* Second attempt: using the LOCAL keyword means the client reads the file and sends it to the server;
@@ -187,10 +191,12 @@ class BatchInsert
* @see http://bugs.php.net/bug.php?id=54158
*/
$openBaseDir = ini_get('open_basedir');
- $safeMode = ini_get('safe_mode');
+ $isUsingNonBuggyMysqlnd = function_exists('mysqli_get_client_stats') && version_compare(PHP_VERSION, '5.6.17', '>=');
+ $safeMode = ini_get('safe_mode');
- if (empty($openBaseDir) && empty($safeMode)) {
- // php 5.x - LOAD DATA LOCAL INFILE is disabled if open_basedir restrictions or safe_mode enabled
+ if (($isUsingNonBuggyMysqlnd || empty($openBaseDir)) && empty($safeMode)) {
+ // php 5.x - LOAD DATA LOCAL INFILE only used if open_basedir is not set (or we're using a non-buggy version of mysqlnd)
+ // and if safe mode is not enabled
$keywords[] = 'LOCAL ';
}
diff --git a/piwik/core/Db/Schema/Mysql.php b/piwik/core/Db/Schema/Mysql.php
index 7a65c23..09986ab 100644
--- a/piwik/core/Db/Schema/Mysql.php
+++ b/piwik/core/Db/Schema/Mysql.php
@@ -80,6 +80,7 @@ class Mysql implements SchemaInterface
`plugin_name` VARCHAR(60) NOT NULL,
`setting_name` VARCHAR(255) NOT NULL,
`setting_value` LONGTEXT NOT NULL,
+ `json_encoded` TINYINT UNSIGNED NOT NULL DEFAULT 0,
`user_login` VARCHAR(100) NOT NULL DEFAULT '',
INDEX(plugin_name, user_login)
) ENGINE=$engine DEFAULT CHARSET=utf8
@@ -90,6 +91,7 @@ class Mysql implements SchemaInterface
`plugin_name` VARCHAR(60) NOT NULL,
`setting_name` VARCHAR(255) NOT NULL,
`setting_value` LONGTEXT NOT NULL,
+ `json_encoded` TINYINT UNSIGNED NOT NULL DEFAULT 0,
INDEX(idsite, plugin_name)
) ENGINE=$engine DEFAULT CHARSET=utf8
",
@@ -318,7 +320,7 @@ class Mysql implements SchemaInterface
{
$db = $this->getDb();
- $allColumns = $db->fetchAll("SHOW COLUMNS FROM . $tableName");
+ $allColumns = $db->fetchAll("SHOW COLUMNS FROM " . $tableName);
$fields = array();
foreach ($allColumns as $column) {
diff --git a/piwik/core/Menu/MenuAbstract.php b/piwik/core/Menu/MenuAbstract.php
index ca30c02..6ec8d3b 100644
--- a/piwik/core/Menu/MenuAbstract.php
+++ b/piwik/core/Menu/MenuAbstract.php
@@ -101,10 +101,12 @@ abstract class MenuAbstract extends Singleton
* that can be used to build the URL.
* @param int $order The order hint.
* @param bool|string $tooltip An optional tooltip to display or false to display the tooltip.
+ * @param bool|string $icon An icon classname, such as "icon-add". Only supported by admin menu
+ * @param bool|string $onclick Will execute the on click handler instead of executing the link. Only supported by admin menu.
* @since 2.7.0
* @api
*/
- public function addItem($menuName, $subMenuName, $url, $order = 50, $tooltip = false)
+ public function addItem($menuName, $subMenuName, $url, $order = 50, $tooltip = false, $icon = false, $onclick = false)
{
// make sure the idSite value used is numeric (hack-y fix for #3426)
if (isset($url['idSite']) && !is_numeric($url['idSite'])) {
@@ -117,7 +119,9 @@ abstract class MenuAbstract extends Singleton
$subMenuName,
$url,
$order,
- $tooltip
+ $tooltip,
+ $icon,
+ $onclick
);
}
@@ -145,7 +149,7 @@ abstract class MenuAbstract extends Singleton
* @param int $order
* @param bool|string $tooltip Tooltip to display.
*/
- private function buildMenuItem($menuName, $subMenuName, $url, $order = 50, $tooltip = false)
+ private function buildMenuItem($menuName, $subMenuName, $url, $order = 50, $tooltip = false, $icon = false, $onclick = false)
{
if (!isset($this->menu[$menuName])) {
$this->menu[$menuName] = array(
@@ -170,6 +174,8 @@ abstract class MenuAbstract extends Singleton
$this->menu[$menuName][$subMenuName]['_order'] = $order;
$this->menu[$menuName][$subMenuName]['_name'] = $subMenuName;
$this->menu[$menuName][$subMenuName]['_tooltip'] = $tooltip;
+ $this->menu[$menuName][$subMenuName]['_icon'] = $icon;
+ $this->menu[$menuName][$subMenuName]['_onclick'] = $onclick;
$this->menu[$menuName]['_hasSubmenu'] = true;
if (!array_key_exists('_tooltip', $this->menu[$menuName])) {
@@ -184,7 +190,7 @@ abstract class MenuAbstract extends Singleton
private function buildMenu()
{
foreach ($this->menuEntries as $menuEntry) {
- $this->buildMenuItem($menuEntry[0], $menuEntry[1], $menuEntry[2], $menuEntry[3], $menuEntry[4]);
+ $this->buildMenuItem($menuEntry[0], $menuEntry[1], $menuEntry[2], $menuEntry[3], $menuEntry[4], $menuEntry[5], $menuEntry[6]);
}
}
diff --git a/piwik/core/Option.php b/piwik/core/Option.php
index d79df96..c9e01b7 100644
--- a/piwik/core/Option.php
+++ b/piwik/core/Option.php
@@ -190,12 +190,23 @@ class Option
{
$autoLoad = (int)$autoLoad;
- $sql = 'INSERT INTO `' . Common::prefixTable('option') . '` (option_name, option_value, autoload) ' .
- ' VALUES (?, ?, ?) ' .
- ' ON DUPLICATE KEY UPDATE option_value = ?';
- $bind = array($name, $value, $autoLoad, $value);
+ $sql = 'UPDATE `' . Common::prefixTable('option') . '` SET option_value = ?, autoload = ? WHERE option_name = ?';
+ $bind = array($value, $autoLoad, $name);
- Db::query($sql, $bind);
+ $result = Db::query($sql, $bind);
+
+ $rowsUpdated = Db::get()->rowCount($result);
+
+ if (! $rowsUpdated) {
+ try {
+ $sql = 'INSERT INTO `' . Common::prefixTable('option') . '` (option_name, option_value, autoload) ' .
+ 'VALUES (?, ?, ?) ';
+ $bind = array($name, $value, $autoLoad);
+
+ Db::query($sql, $bind);
+ } catch (\Exception $e) {
+ }
+ }
$this->all[$name] = $value;
}
diff --git a/piwik/core/Plugin/ComputedMetric.php b/piwik/core/Plugin/ComputedMetric.php
index 7825fed..5d0e06b 100644
--- a/piwik/core/Plugin/ComputedMetric.php
+++ b/piwik/core/Plugin/ComputedMetric.php
@@ -121,7 +121,12 @@ class ComputedMetric extends ProcessedMetric
$metric1 = $this->getMetric($row, $this->metric1);
$metric2 = $this->getMetric($row, $this->metric2);
- return Piwik::getQuotientSafe($metric1, $metric2, $precision = 2);
+ $precision = 2;
+ if ($this->aggregation === self::AGGREGATION_RATE) {
+ $precision = 3;
+ }
+
+ return Piwik::getQuotientSafe($metric1, $metric2, $precision);
}
private function getDetectedType()
diff --git a/piwik/core/Plugin/LogTablesProvider.php b/piwik/core/Plugin/LogTablesProvider.php
index 92afca1..904e618 100644
--- a/piwik/core/Plugin/LogTablesProvider.php
+++ b/piwik/core/Plugin/LogTablesProvider.php
@@ -9,6 +9,7 @@
namespace Piwik\Plugin;
use Piwik\Container\StaticContainer;
+use Piwik\Piwik;
use Piwik\Tracker\LogTable;
class LogTablesProvider {
@@ -53,10 +54,32 @@ class LogTablesProvider {
if (!isset($this->tablesCache)) {
$tables = $this->pluginManager->findMultipleComponents('Tracker', 'Piwik\\Tracker\\LogTable');
- $this->tablesCache = array();
+ $logTables = array();
+
+ /**
+ * Only used for tests. Triggered to add custom log tables which are not automatically picked up.
+ * In case you need to define a log table, please put them inside the "Tracker" directory of your plugin.
+ * Please note custom log tables are currently not an official API.
+ *
+ * **Example**
+ *
+ * public function addLogTable(&$logTables)
+ * {
+ * $logTables[] = new LogTable();
+ * }
+ *
+ * @param array &$logTables An array containing a list of log entries.
+ *
+ * @deprecated Only used for tests
+ * @ignore
+ */
+ Piwik::postEvent('LogTables.addLogTables', array(&$logTables));
+
foreach ($tables as $table) {
- $this->tablesCache[] = StaticContainer::get($table);
+ $logTables[] = StaticContainer::get($table);
}
+
+ $this->tablesCache = $logTables;
}
return $this->tablesCache;
diff --git a/piwik/core/Plugin/ViewDataTable.php b/piwik/core/Plugin/ViewDataTable.php
index d892021..447775f 100644
--- a/piwik/core/Plugin/ViewDataTable.php
+++ b/piwik/core/Plugin/ViewDataTable.php
@@ -455,7 +455,12 @@ abstract class ViewDataTable implements ViewInterface
protected function getPropertyFromQueryParam($name, $defaultValue)
{
$type = is_numeric($defaultValue) ? 'int' : null;
- return Common::getRequestVar($name, $defaultValue, $type);
+ $value = Common::getRequestVar($name, $defaultValue, $type);
+ // convert comma separated values to arrays if needed
+ if (is_array($defaultValue)) {
+ $value = Piwik::getArrayFromApiParameter($value);
+ }
+ return $value;
}
/**
diff --git a/piwik/core/ProxyHttp.php b/piwik/core/ProxyHttp.php
index bf3bbf4..af0d9ca 100644
--- a/piwik/core/ProxyHttp.php
+++ b/piwik/core/ProxyHttp.php
@@ -217,8 +217,8 @@ class ProxyHttp
public static function overrideCacheControlHeaders($override = null)
{
if ($override || self::isHttps()) {
- Common::sendHeader('Pragma: ');
- Common::sendHeader('Expires: ');
+ Common::stripHeader('Pragma');
+ Common::stripHeader('Expires');
if (in_array($override, array('public', 'private', 'no-cache', 'no-store'))) {
Common::sendHeader("Cache-Control: $override, must-revalidate");
} else {
diff --git a/piwik/core/Settings/FieldConfig.php b/piwik/core/Settings/FieldConfig.php
index 8074db3..3132032 100644
--- a/piwik/core/Settings/FieldConfig.php
+++ b/piwik/core/Settings/FieldConfig.php
@@ -8,6 +8,7 @@
*/
namespace Piwik\Settings;
+use Piwik\Validators\BaseValidator;
/**
* Lets you configure a form field.
@@ -69,6 +70,11 @@ class FieldConfig
const UI_CONTROL_SINGLE_EXPANDABLE_SELECT = 'expandable-select';
/**
+ * Lets a user configure two form fields next to each other, and add multiple entries of those two pairs.
+ */
+ const UI_CONTROL_MULTI_TUPLE = 'multituple';
+
+ /**
* Generates a hidden form field. To use this field assign it to the `$uiControl` property.
*/
const UI_CONTROL_HIDDEN = 'hidden';
@@ -230,4 +236,22 @@ class FieldConfig
*/
public $condition;
+ /**
+ * Here you can add one or multiple instances of `Piwik\Validators\BaseValidator` to avoid having to
+ * write the same validators over and over again in {@link $validate}.
+ *
+ * Examples
+ * Want to require a value to be set?
+ * $fieldConfig->validators[] = new Piwik\Validators\NotEmpty();
+ *
+ * Want to require an email?
+ * $fieldConfig->validators[] = new Piwik\Validators\NotEmpty();
+ * $fieldConfig->validators[] = new Piwik\Validators\Email();
+ *
+ * The core comes with a set of various validators that can be used.
+ *
+ * @var BaseValidator[]
+ */
+ public $validators = [];
+
}
diff --git a/piwik/core/Settings/FieldConfig/MultiPair.php b/piwik/core/Settings/FieldConfig/MultiPair.php
new file mode 100644
index 0000000..ede9477
--- /dev/null
+++ b/piwik/core/Settings/FieldConfig/MultiPair.php
@@ -0,0 +1,89 @@
+<?php
+/**
+ * Piwik - free/libre analytics platform
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+
+namespace Piwik\Settings\FieldConfig;
+
+/**
+ * Lets you configure a multi pair field.
+ *
+ * Usage:
+ *
+ * $field->uiControl = FieldConfig::UI_CONTROL_MULTI_PAIR;
+ * $field1 = new FieldConfig\MultiPair('Index', 'index', FieldConfig::UI_CONTROL_TEXT);
+ * $field2 = new FieldConfig\MultiPair('Value', 'value', FieldConfig::UI_CONTROL_TEXT);
+ * $field->uiControlAttributes['field1'] = $field1->toArray();
+ * $field->uiControlAttributes['field2'] = $field2->toArray();
+ *
+ * @api
+ */
+class MultiPair
+{
+ /**
+ * The name of the key the index should have eg "dimension" will make an index array(array('dimension' => '...'))
+ * @var string
+ */
+ public $key = '';
+
+ /**
+ * Describes what HTML element should be used to manipulate the setting through Piwik's UI.
+ *
+ * See {@link Piwik\Plugin\Settings} for a list of supported control types.
+ *
+ * @var string
+ */
+ public $uiControl = null;
+
+ /**
+ * Defines a custom template file for a UI control. This file should render a UI control and expose the value in a
+ * "formField.value" angular model. For an example see "plugins/CorePluginsAdmin/angularjs/form-field/field-text.html"
+ *
+ * @var string
+ */
+ public $customUiControlTemplateFile = '';
+
+ /**
+ * This setting's display name, for example, `'Refresh Interval'`.
+ *
+ * Be sure to escape any user input as HTML can be used here.
+ *
+ * @var string
+ */
+ public $title = '';
+
+ /**
+ * The list of all available values for this setting. If null, the setting can have any value.
+ *
+ * If supplied, this field should be an array mapping available values with their prettified
+ * display value. Eg, if set to `array('nb_visits' => 'Visits', 'nb_actions' => 'Actions')`,
+ * the UI will display **Visits** and **Actions**, and when the user selects one, Piwik will
+ * set the setting to **nb_visits** or **nb_actions** respectively.
+ *
+ * @var null|array
+ */
+ public $availableValues = null;
+
+ public function __construct($title, $key, $uiControl = 'text')
+ {
+ $this->title = $title;
+ $this->key = $key;
+ $this->uiControl = $uiControl;
+ }
+
+ public function toArray()
+ {
+ return array(
+ 'key' => $this->key,
+ 'title' => $this->title,
+ 'uiControl' => $this->uiControl,
+ 'templateFile' => $this->customUiControlTemplateFile,
+ 'availableValues' => $this->availableValues,
+ );
+ }
+
+}
diff --git a/piwik/core/Settings/Setting.php b/piwik/core/Settings/Setting.php
index c1a3b28..0dc84e3 100644
--- a/piwik/core/Settings/Setting.php
+++ b/piwik/core/Settings/Setting.php
@@ -12,6 +12,7 @@ namespace Piwik\Settings;
use Piwik\Piwik;
use Piwik\Settings\Storage\Storage;
use Exception;
+use Piwik\Validators\BaseValidator;
/**
* Base setting type class.
@@ -237,6 +238,10 @@ class Setting
{
$config = $this->configureField();
+ if (!empty($config->validators)) {
+ BaseValidator::check($config->title, $value, $config->validators);
+ }
+
if ($config->validate && $config->validate instanceof \Closure) {
call_user_func($config->validate, $value, $this);
} elseif (is_array($config->availableValues)) {
@@ -316,6 +321,11 @@ class Setting
throw new Exception('Type must be an array when using a multi select');
}
+ if ($field->uiControl === FieldConfig::UI_CONTROL_MULTI_TUPLE &&
+ $this->type !== FieldConfig::TYPE_ARRAY) {
+ throw new Exception('Type must be an array when using a multi pair');
+ }
+
$types = array(
FieldConfig::TYPE_INT,
FieldConfig::TYPE_FLOAT,
diff --git a/piwik/core/Settings/Storage/Backend/MeasurableSettingsTable.php b/piwik/core/Settings/Storage/Backend/MeasurableSettingsTable.php
index e91a7ac..181505f 100644
--- a/piwik/core/Settings/Storage/Backend/MeasurableSettingsTable.php
+++ b/piwik/core/Settings/Storage/Backend/MeasurableSettingsTable.php
@@ -12,6 +12,7 @@ namespace Piwik\Settings\Storage\Backend;
use Piwik\Common;
use Piwik\Db;
use Exception;
+use Piwik\Version;
/**
* Measurable settings backend. Stores all settings in a "site_setting" database table.
@@ -78,43 +79,64 @@ class MeasurableSettingsTable implements BackendInterface
$this->delete();
foreach ($values as $name => $value) {
- if (!is_array($value)) {
- $value = array($value);
+ if (!isset($value)) {
+ continue;
}
- foreach ($value as $val) {
- if (!isset($val)) {
- continue;
- }
-
- if (is_bool($val)) {
- $val = (int) $val;
+ if (is_array($value) || is_object($value)) {
+ $jsonEncoded = 1;
+ $value = json_encode($value);
+ } else {
+ $jsonEncoded = 0;
+ if (is_bool($value)) {
+ // we are currently not storing booleans as json as it could result in trouble with the UI and regress
+ // preselecting the correct value
+ $value = (int) $value;
}
+ }
- $sql = "INSERT INTO $table (`idsite`, `plugin_name`, `setting_name`, `setting_value`) VALUES (?, ?, ?, ?)";
- $bind = array($this->idSite, $this->pluginName, $name, $val);
+ $sql = "INSERT INTO $table (`idsite`, `plugin_name`, `setting_name`, `setting_value`, `json_encoded`) VALUES (?, ?, ?, ?, ?)";
+ $bind = array($this->idSite, $this->pluginName, $name, $value, $jsonEncoded);
- $this->db->query($sql, $bind);
- }
+ $this->db->query($sql, $bind);
}
}
+ private function jsonEncodedMissingError(Exception $e)
+ {
+ return strpos($e->getMessage(), 'json_encoded') !== false;
+ }
+
public function load()
{
$this->initDbIfNeeded();
$table = $this->getTableName();
- $sql = "SELECT `setting_name`, `setting_value` FROM " . $table . " WHERE idsite = ? and plugin_name = ?";
+ $sql = "SELECT `setting_name`, `setting_value`, `json_encoded` FROM " . $table . " WHERE idsite = ? and plugin_name = ?";
$bind = array($this->idSite, $this->pluginName);
- $settings = $this->db->fetchAll($sql, $bind);
+ try {
+ $settings = $this->db->fetchAll($sql, $bind);
+ } catch (\Exception $e) {
+ // we catch an exception since json_encoded might not be present before matomo is updated to 3.5.0+ but the updater
+ // may run this query
+ if ($this->jsonEncodedMissingError($e)) {
+ $sql = "SELECT `setting_name`, `setting_value` FROM " . $table . " WHERE idsite = ? and plugin_name = ?";
+ $settings = $this->db->fetchAll($sql, $bind);
+ } else {
+ throw $e;
+ }
+
+ }
$flat = array();
foreach ($settings as $setting) {
$name = $setting['setting_name'];
- if (array_key_exists($name, $flat)) {
+ if (!empty($setting['json_encoded'])) {
+ $flat[$name] = json_decode($setting['setting_value'], true);
+ } elseif (array_key_exists($name, $flat)) {
if (!is_array($flat[$name])) {
$flat[$name] = array($flat[$name]);
}
diff --git a/piwik/core/Settings/Storage/Backend/PluginSettingsTable.php b/piwik/core/Settings/Storage/Backend/PluginSettingsTable.php
index 0f49d6b..126460a 100644
--- a/piwik/core/Settings/Storage/Backend/PluginSettingsTable.php
+++ b/piwik/core/Settings/Storage/Backend/PluginSettingsTable.php
@@ -12,6 +12,7 @@ namespace Piwik\Settings\Storage\Backend;
use Piwik\Common;
use Piwik\Db;
use Exception;
+use Piwik\Version;
/**
* Plugin settings backend. Stores all settings in a "plugin_setting" database table.
@@ -77,42 +78,61 @@ class PluginSettingsTable implements BackendInterface
$this->delete();
foreach ($values as $name => $value) {
-
- if (!is_array($value)) {
- $value = array($value);
+ if (!isset($value)) {
+ continue;
}
- foreach ($value as $val) {
- if (!isset($val)) {
- continue;
- }
-
- if (is_bool($val)) {
- $val = (int) $val;
+ if (is_array($value) || is_object($value)) {
+ $jsonEncoded = 1;
+ $value = json_encode($value);
+ } else {
+ $jsonEncoded = 0;
+ if (is_bool($value)) {
+ // we are currently not storing booleans as json as it could result in trouble with the UI and regress
+ // preselecting the correct value
+ $value = (int) $value;
}
+ }
- $sql = "INSERT INTO $table (`plugin_name`, `user_login`, `setting_name`, `setting_value`) VALUES (?, ?, ?, ?)";
- $bind = array($this->pluginName, $this->userLogin, $name, $val);
+ $sql = "INSERT INTO $table (`plugin_name`, `user_login`, `setting_name`, `setting_value`, `json_encoded`) VALUES (?, ?, ?, ?, ?)";
+ $bind = array($this->pluginName, $this->userLogin, $name, $value, $jsonEncoded);
- $this->db->query($sql, $bind);
- }
+ $this->db->query($sql, $bind);
}
}
+ private function jsonEncodedMissingError(Exception $e)
+ {
+ return strpos($e->getMessage(), 'json_encoded') !== false;
+ }
+
public function load()
{
$this->initDbIfNeeded();
- $sql = "SELECT `setting_name`, `setting_value` FROM " . $this->getTableName() . " WHERE plugin_name = ? and user_login = ?";
+ $sql = "SELECT `setting_name`, `setting_value`, `json_encoded` FROM " . $this->getTableName() . " WHERE plugin_name = ? and user_login = ?";
$bind = array($this->pluginName, $this->userLogin);
- $settings = $this->db->fetchAll($sql, $bind);
+ try {
+ $settings = $this->db->fetchAll($sql, $bind);
+ } catch (\Exception $e) {
+ // we catch an exception since json_encoded might not be present before matomo is updated to 3.5.0+ but the updater
+ // may run this query
+ if ($this->jsonEncodedMissingError($e)) {
+ $sql = "SELECT `setting_name`, `setting_value` FROM " . $this->getTableName() . " WHERE plugin_name = ? and user_login = ?";
+ $settings = $this->db->fetchAll($sql, $bind);
+ } else {
+ throw $e;
+ }
+ }
$flat = array();
foreach ($settings as $setting) {
$name = $setting['setting_name'];
- if (array_key_exists($name, $flat)) {
+ if (!empty($setting['json_encoded'])) {
+ $flat[$name] = json_decode($setting['setting_value'], true);
+ } elseif (array_key_exists($name, $flat)) {
if (!is_array($flat[$name])) {
$flat[$name] = array($flat[$name]);
}
diff --git a/piwik/core/Tracker/Db/Mysqli.php b/piwik/core/Tracker/Db/Mysqli.php
index a4e5fcb..113d293 100644
--- a/piwik/core/Tracker/Db/Mysqli.php
+++ b/piwik/core/Tracker/Db/Mysqli.php
@@ -27,6 +27,14 @@ class Mysqli extends Db
protected $charset;
protected $activeTransaction = false;
+ protected $enable_ssl;
+ protected $ssl_key;
+ protected $ssl_cert;
+ protected $ssl_ca;
+ protected $ssl_ca_path;
+ protected $ssl_cipher;
+ protected $ssl_no_verify;
+
/**
* Builds the DB object
*
@@ -52,6 +60,30 @@ class Mysqli extends Db
$this->username = $dbInfo['username'];
$this->password = $dbInfo['password'];
$this->charset = isset($dbInfo['charset']) ? $dbInfo['charset'] : null;
+
+
+ if(!empty($dbInfo['enable_ssl'])){
+ $this->enable_ssl = $dbInfo['enable_ssl'];
+ }
+ if(!empty($dbInfo['ssl_key'])){
+ $this->ssl_key = $dbInfo['ssl_key'];
+ }
+ if(!empty($dbInfo['ssl_cert'])){
+ $this->ssl_cert = $dbInfo['ssl_cert'];
+ }
+ if(!empty($dbInfo['ssl_ca'])){
+ $this->ssl_ca = $dbInfo['ssl_ca'];
+ }
+ if(!empty($dbInfo['ssl_ca_path'])){
+ $this->ssl_ca_path = $dbInfo['ssl_ca_path'];
+ }
+ if(!empty($dbInfo['ssl_cipher'])){
+ $this->ssl_cipher = $dbInfo['ssl_cipher'];
+ }
+ if(!empty($dbInfo['ssl_no_verify'])){
+ $this->ssl_no_verify = $dbInfo['ssl_no_verify'];
+ }
+
}
/**
@@ -75,11 +107,22 @@ class Mysqli extends Db
$this->connection = mysqli_init();
+
+ if($this->enable_ssl){
+ mysqli_ssl_set($this->connection, $this->ssl_key, $this->ssl_cert, $this->ssl_ca, $this->ssl_ca_path, $this->ssl_cipher);
+ }
+
// Make sure MySQL returns all matched rows on update queries including
// rows that actually didn't have to be updated because the values didn't
// change. This matches common behaviour among other database systems.
// See #6296 why this is important in tracker
$flags = MYSQLI_CLIENT_FOUND_ROWS;
+ if ($this->enable_ssl){
+ $flags = $flags | MYSQLI_CLIENT_SSL;
+ }
+ if ($this->ssl_no_verify && defined('MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT')){
+ $flags = $flags | MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT;
+ }
mysqli_real_connect($this->connection, $this->host, $this->username, $this->password, $this->dbname, $this->port, $this->socket, $flags);
if (!$this->connection || mysqli_connect_errno()) {
throw new DbException("Connect failed: " . mysqli_connect_error());
diff --git a/piwik/core/Tracker/Db/Pdo/Mysql.php b/piwik/core/Tracker/Db/Pdo/Mysql.php
index 711f760..36270b7 100644
--- a/piwik/core/Tracker/Db/Pdo/Mysql.php
+++ b/piwik/core/Tracker/Db/Pdo/Mysql.php
@@ -30,6 +30,9 @@ class Mysql extends Db
protected $password;
protected $charset;
+ protected $mysqlOptions = array();
+
+
protected $activeTransaction = false;
/**
@@ -55,6 +58,30 @@ class Mysql extends Db
$this->charset = $dbInfo['charset'];
$this->dsn .= ';charset=' . $this->charset;
}
+
+
+ if ($dbInfo['enable_ssl']) {
+
+ if (!empty($dbInfo['ssl_key'])) {
+ $this->mysqlOptions[PDO::MYSQL_ATTR_SSL_KEY] = $dbInfo['ssl_key'];
+ }
+ if (!empty($dbInfo['ssl_cert'])) {
+ $this->mysqlOptions[PDO::MYSQL_ATTR_SSL_CERT] = $dbInfo['ssl_cert'];
+ }
+ if (!empty($dbInfo['ssl_ca'])) {
+ $this->mysqlOptions[PDO::MYSQL_ATTR_SSL_CA] = $dbInfo['ssl_ca'];
+ }
+ if (!empty($dbInfo['ssl_ca_path'])) {
+ $this->mysqlOptions[PDO::MYSQL_ATTR_SSL_CAPATH] = $dbInfo['ssl_ca_path'];
+ }
+ if (!empty($dbInfo['ssl_cipher'])) {
+ $this->mysqlOptions[PDO::MYSQL_ATTR_SSL_CIPHER] = $dbInfo['ssl_cipher'];
+ }
+ if (!empty($dbInfo['ssl_no_verify']) && defined('PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT')) {
+ $this->mysqlOptions[PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT] = false;
+ }
+ }
+
}
public function __destruct()
@@ -77,12 +104,12 @@ class Mysql extends Db
// rows that actually didn't have to be updated because the values didn't
// change. This matches common behaviour among other database systems.
// See #6296 why this is important in tracker
- $config = array(
- PDO::MYSQL_ATTR_FOUND_ROWS => true,
- PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
- );
+ $this->mysqlOptions[PDO::MYSQL_ATTR_FOUND_ROWS] = true;
+ $this->mysqlOptions[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
+
+
- $this->connection = @new PDO($this->dsn, $this->username, $this->password, $config);
+ $this->connection = @new PDO($this->dsn, $this->username, $this->password, $this->mysqlOptions);
// we may want to setAttribute(PDO::ATTR_TIMEOUT ) to a few seconds (default is 60) in case the DB is locked
// the piwik.php would stay waiting for the database... bad!
diff --git a/piwik/core/Tracker/GoalManager.php b/piwik/core/Tracker/GoalManager.php
index 762d8d3..8f7db89 100644
--- a/piwik/core/Tracker/GoalManager.php
+++ b/piwik/core/Tracker/GoalManager.php
@@ -10,6 +10,7 @@ namespace Piwik\Tracker;
use Exception;
use Piwik\Common;
+use Piwik\Container\StaticContainer;
use Piwik\Date;
use Piwik\Piwik;
use Piwik\Plugin\Dimension\ConversionDimension;
@@ -817,19 +818,12 @@ class GoalManager
* @param $pattern_type
* @param $url
* @return bool
- * @throws Exception
*/
protected function isGoalPatternMatchingUrl($goal, $pattern_type, $url)
{
switch ($pattern_type) {
case 'regex':
- $pattern = $goal['pattern'];
- if (strpos($pattern, '/') !== false
- && strpos($pattern, '\\/') === false
- ) {
- $pattern = str_replace('/', '\\/', $pattern);
- }
- $pattern = '/' . $pattern . '/';
+ $pattern = self::formatRegex($goal['pattern']);
if (!$goal['case_sensitive']) {
$pattern .= 'i';
}
@@ -852,9 +846,29 @@ class GoalManager
$match = ($matched == 0);
break;
default:
- throw new Exception(Piwik::translate('General_ExceptionInvalidGoalPattern', array($pattern_type)));
+ try {
+ StaticContainer::get('Psr\Log\LoggerInterface')->warning(Piwik::translate('General_ExceptionInvalidGoalPattern', array($pattern_type)));
+ } catch (\Exception $e) {
+ }
+ $match = false;
break;
}
return $match;
}
+
+ /**
+ * Formats a goal regex pattern to a usable regex
+ *
+ * @param string $pattern
+ * @return string
+ */
+ public static function formatRegex($pattern)
+ {
+ if (strpos($pattern, '/') !== false
+ && strpos($pattern, '\\/') === false
+ ) {
+ $pattern = str_replace('/', '\\/', $pattern);
+ }
+ return '/' . $pattern . '/';
+ }
}
diff --git a/piwik/core/Tracker/LogTable.php b/piwik/core/Tracker/LogTable.php
index 091258e..e495476 100644
--- a/piwik/core/Tracker/LogTable.php
+++ b/piwik/core/Tracker/LogTable.php
@@ -56,6 +56,21 @@ abstract class LogTable {
}
/**
+ * If a table can neither be joined via idVisit nor idAction, it should be given a way to join with other tables
+ * so the log table can be joined via idvisit through a different table joins.
+ *
+ * For this to work it requires the same column to be present in two tables. If for example you have a table
+ * `log_foo_bar (idlogfoobar, idlogfoo)` and a table `log_foo(idlogfoo, idsite, idvisit)`, then you can in the
+ * log table instance for `log_foo_bar` return `array('log_foo' => 'idlogfoo')`. This tells the core that a join
+ * with that other log table is possible using the specified column.
+ * @return array
+ */
+ public function getWaysToJoinToOtherLogTables()
+ {
+ return array();
+ }
+
+ /**
* Defines whether this table should be joined via a subselect. Return true if a complex join is needed. (eg when
* having visits and needing actions, or when having visits and needing conversions, or vice versa).
* @return bool
diff --git a/piwik/core/Tracker/Request.php b/piwik/core/Tracker/Request.php
index 71bfd30..3733e76 100644
--- a/piwik/core/Tracker/Request.php
+++ b/piwik/core/Tracker/Request.php
@@ -606,6 +606,18 @@ class Request
return (bool)Config::getInstance()->Tracker['use_third_party_id_cookie'];
}
+ public function getThirdPartyCookieVisitorId()
+ {
+ $cookie = $this->makeThirdPartyCookieUID();
+ $idVisitor = $cookie->get(0);
+ if ($idVisitor !== false
+ && strlen($idVisitor) == Tracker::LENGTH_HEX_ID_STRING
+ ) {
+ return $idVisitor;
+ }
+ return null;
+ }
+
/**
* Update the cookie information.
*/
@@ -615,12 +627,12 @@ class Request
return;
}
- Common::printDebug("We manage the cookie...");
-
$cookie = $this->makeThirdPartyCookieUID();
- // idcookie has been generated in handleNewVisit or we simply propagate the old value
- $cookie->set(0, bin2hex($idVisitor));
+ $idVisitor = bin2hex($idVisitor);
+ $cookie->set(0, $idVisitor);
$cookie->save();
+
+ Common::printDebug(sprintf("We set the visitor ID to %s in the 3rd party cookie...", $idVisitor));
}
protected function makeThirdPartyCookieUID()
@@ -672,7 +684,7 @@ class Request
public function getVisitorId()
{
$found = false;
-
+
// If User ID is set it takes precedence
$userId = $this->getForcedUserId();
if ($userId) {
@@ -696,14 +708,10 @@ class Request
// - If set to use 3rd party cookies for Visit ID, read the cookie
if (!$found) {
- // - By default, reads the first party cookie ID
$useThirdPartyCookie = $this->shouldUseThirdPartyCookie();
if ($useThirdPartyCookie) {
- $cookie = $this->makeThirdPartyCookieUID();
- $idVisitor = $cookie->get(0);
- if ($idVisitor !== false
- && strlen($idVisitor) == Tracker::LENGTH_HEX_ID_STRING
- ) {
+ $idVisitor = $this->getThirdPartyCookieVisitorId();
+ if(!empty($idVisitor)) {
$found = true;
}
}
@@ -716,16 +724,45 @@ class Request
}
if ($found) {
- $truncated = $this->truncateIdAsVisitorId($idVisitor);
- $binVisitorId = @Common::hex2bin($truncated);
- if (!empty($binVisitorId)) {
- return $binVisitorId;
+ return $this->getVisitorIdAsBinary($idVisitor);
+ }
+
+ return false;
+ }
+
+ /**
+ * When creating a third party cookie, we want to ensure that the original value set in this 3rd party cookie
+ * sticks and is not overwritten later.
+ */
+ public function getVisitorIdForThirdPartyCookie()
+ {
+ $found = false;
+
+ // For 3rd party cookies, priority is on re-using the existing 3rd party cookie value
+ if (!$found) {
+ $useThirdPartyCookie = $this->shouldUseThirdPartyCookie();
+ if ($useThirdPartyCookie) {
+ $idVisitor = $this->getThirdPartyCookieVisitorId();
+ if(!empty($idVisitor)) {
+ $found = true;
+ }
}
}
+ // If a third party cookie was not found, we default to the first party cookie
+ if (!$found) {
+ $idVisitor = Common::getRequestVar('_id', '', 'string', $this->params);
+ $found = strlen($idVisitor) >= Tracker::LENGTH_HEX_ID_STRING;
+ }
+
+ if ($found) {
+ return $this->getVisitorIdAsBinary($idVisitor);
+ }
+
return false;
}
+
public function getIp()
{
return IPUtils::stringToBinaryIP($this->getIpString());
@@ -838,4 +875,18 @@ class Request
{
return isset($this->requestMetadata[$pluginName][$key]) ? $this->requestMetadata[$pluginName][$key] : null;
}
+
+ /**
+ * @param $idVisitor
+ * @return bool|string
+ */
+ private function getVisitorIdAsBinary($idVisitor)
+ {
+ $truncated = $this->truncateIdAsVisitorId($idVisitor);
+ $binVisitorId = @Common::hex2bin($truncated);
+ if (!empty($binVisitorId)) {
+ return $binVisitorId;
+ }
+ return false;
+ }
}
diff --git a/piwik/core/Tracker/TrackerCodeGenerator.php b/piwik/core/Tracker/TrackerCodeGenerator.php
index fcfe889..5870f09 100644
--- a/piwik/core/Tracker/TrackerCodeGenerator.php
+++ b/piwik/core/Tracker/TrackerCodeGenerator.php
@@ -12,6 +12,7 @@ use Piwik\Common;
use Piwik\Piwik;
use Piwik\Plugins\CustomVariables\CustomVariables;
use Piwik\Plugins\SitesManager\API as APISitesManager;
+use Piwik\SettingsPiwik;
use Piwik\View;
/**
@@ -135,6 +136,11 @@ class TrackerCodeGenerator
'loadAsync' => true,
'trackNoScript' => $trackNoScript
);
+
+ if (SettingsPiwik::isHttpsForced()) {
+ $codeImpl['protocol'] = 'https://';
+ }
+
$parameters = compact('mergeSubdomains', 'groupPageTitlesByDomain', 'mergeAliasUrls', 'visitorCustomVariables',
'pageCustomVariables', 'customCampaignNameQueryParam', 'customCampaignKeywordParam',
'doNotTrack');
diff --git a/piwik/core/Tracker/Visit.php b/piwik/core/Tracker/Visit.php
index cf1089d..06382c2 100644
--- a/piwik/core/Tracker/Visit.php
+++ b/piwik/core/Tracker/Visit.php
@@ -175,7 +175,7 @@ class Visit implements VisitInterface
}
// update the cookie with the new visit information
- $this->request->setThirdPartyCookie($this->visitProperties->getProperty('idvisitor'));
+ $this->request->setThirdPartyCookie($this->request->getVisitorIdForThirdPartyCookie());
foreach ($this->requestProcessors as $processor) {
Common::printDebug("Executing " . get_class($processor) . "::recordLogs()...");
diff --git a/piwik/core/Updates/3.0.0-b1.php b/piwik/core/Updates/3.0.0-b1.php
index 1b08d48..a1561df 100644
--- a/piwik/core/Updates/3.0.0-b1.php
+++ b/piwik/core/Updates/3.0.0-b1.php
@@ -11,7 +11,6 @@ namespace Piwik\Updates;
use Piwik\Access;
use Piwik\Common;
-use Piwik\Container\StaticContainer;
use Piwik\Db;
use Piwik\Option;
use Piwik\Plugins\Installation\ServerFilesGenerator;
@@ -77,9 +76,10 @@ class Updates_3_0_0_b1 extends Updates
$isEnabled = Option::get('enableUpdateCommunicationPlugins');
Access::doAsSuperUser(function () use ($isEnabled) {
- $settings = StaticContainer::get('Piwik\Plugins\CoreUpdater\SystemSettings');
- $settings->sendPluginUpdateEmail->setValue(!empty($isEnabled));
- $settings->save();
+ $table = Common::prefixTable('plugin_setting');
+ $sql = "INSERT INTO $table (`plugin_name`, `user_login`, `setting_name`, `setting_value`) VALUES (?, ?, ?, ?)";
+ $bind = array('CoreUpdater', '', 'enable_plugin_update_communication', (int) !empty($isEnabled));
+ Db::query($sql, $bind);
});
}
diff --git a/piwik/core/Updates/3.5.0-b2.php b/piwik/core/Updates/3.5.0-b2.php
new file mode 100644
index 0000000..e095a2f
--- /dev/null
+++ b/piwik/core/Updates/3.5.0-b2.php
@@ -0,0 +1,57 @@
+<?php
+/**
+ * Piwik - free/libre analytics platform
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+
+namespace Piwik\Updates;
+
+use Piwik\Plugins\PrivacyManager\Model\LogDataAnonymizations;
+use Piwik\Updater;
+use Piwik\Updates as PiwikUpdates;
+use Piwik\Updater\Migration\Factory as MigrationFactory;
+
+class Updates_3_5_0_b2 extends PiwikUpdates
+{
+ /**
+ * @var MigrationFactory
+ */
+ private $migration;
+
+ public function __construct(MigrationFactory $factory)
+ {
+ $this->migration = $factory;
+ }
+
+ public function getMigrations(Updater $updater)
+ {
+ $columns = array(
+ 'idlogdata_anonymization' => 'BIGINT UNSIGNED NOT NULL AUTO_INCREMENT',
+ 'idsites' => 'TEXT NULL DEFAULT NULL',
+ 'date_start' => 'DATETIME NOT NULL',
+ 'date_end' => 'DATETIME NOT NULL',
+ 'anonymize_ip' => 'TINYINT(1) UNSIGNED NOT NULL DEFAULT 0',
+ 'anonymize_location' => 'TINYINT(1) UNSIGNED NOT NULL DEFAULT 0',
+ 'anonymize_userid' => 'TINYINT(1) UNSIGNED NOT NULL DEFAULT 0',
+ 'unset_visit_columns' => "TEXT NOT NULL DEFAULT ''",
+ 'unset_link_visit_action_columns' => "TEXT NOT NULL DEFAULT ''",
+ 'output' => 'MEDIUMTEXT NULL DEFAULT NULL',
+ 'scheduled_date' => 'DATETIME NULL',
+ 'job_start_date' => 'DATETIME NULL',
+ 'job_finish_date' => 'DATETIME NULL',
+ 'requester' => "VARCHAR(100) NOT NULL DEFAULT ''"
+ );
+ return array(
+ $this->migration->db->createTable(LogDataAnonymizations::getDbTableName(), $columns, $primary = 'idlogdata_anonymization'),
+ $this->migration->db->addIndex(LogDataAnonymizations::getDbTableName(), array('job_start_date'))
+ );
+ }
+
+ public function doUpdate(Updater $updater)
+ {
+ $updater->executeMigrations(__FILE__, $this->getMigrations($updater));
+ }
+}
diff --git a/piwik/core/Updates/3.5.0-b4.php b/piwik/core/Updates/3.5.0-b4.php
new file mode 100644
index 0000000..e283041
--- /dev/null
+++ b/piwik/core/Updates/3.5.0-b4.php
@@ -0,0 +1,40 @@
+<?php
+/**
+ * Piwik - free/libre analytics platform
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+
+namespace Piwik\Updates;
+
+use Piwik\Updater;
+use Piwik\Updates as PiwikUpdates;
+use Piwik\Updater\Migration\Factory as MigrationFactory;
+
+class Updates_3_5_0_b4 extends PiwikUpdates
+{
+ /**
+ * @var MigrationFactory
+ */
+ private $migration;
+
+ public function __construct(MigrationFactory $factory)
+ {
+ $this->migration = $factory;
+ }
+
+ public function getMigrations(Updater $updater)
+ {
+ return array(
+ $this->migration->db->addColumn('plugin_setting', 'json_encoded', 'TINYINT UNSIGNED NOT NULL DEFAULT 0'),
+ $this->migration->db->addColumn('site_setting', 'json_encoded', 'TINYINT UNSIGNED NOT NULL DEFAULT 0'),
+ );
+ }
+
+ public function doUpdate(Updater $updater)
+ {
+ $updater->executeMigrations(__FILE__, $this->getMigrations($updater));
+ }
+}
diff --git a/piwik/core/Updates/3.5.0-rc2.php b/piwik/core/Updates/3.5.0-rc2.php
new file mode 100644
index 0000000..54d8419
--- /dev/null
+++ b/piwik/core/Updates/3.5.0-rc2.php
@@ -0,0 +1,25 @@
+<?php
+/**
+ * Piwik - free/libre analytics platform
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+
+namespace Piwik\Updates;
+
+use Piwik\Plugins\PrivacyManager\PrivacyManager;
+use Piwik\Tracker\Cache;
+use Piwik\Updater;
+use Piwik\Updates as PiwikUpdates;
+
+class Updates_3_5_0_rc2 extends PiwikUpdates
+{
+ public function doUpdate(Updater $updater)
+ {
+ // trigger salt for user if being created and stored in database
+ PrivacyManager::getUserIdSalt();
+ Cache::deleteTrackerCache();
+ }
+}
diff --git a/piwik/core/Validators/BaseValidator.php b/piwik/core/Validators/BaseValidator.php
new file mode 100644
index 0000000..e2a8f79
--- /dev/null
+++ b/piwik/core/Validators/BaseValidator.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * Piwik - free/libre analytics platform
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+
+namespace Piwik\Validators;
+
+abstract class BaseValidator
+{
+
+ /**
+ * The method to validate a value. If the value has not an expected format, an instance of
+ * {@link Piwik\Validators\Exception} should be thrown.
+ *
+ * @param $value
+ * @throws Exception
+ */
+ abstract public function validate($value);
+
+ protected function isValueBare($value)
+ {
+ // we allow this value. if it is supposed to be not empty, please use NotEmpty validator on top
+ return $value === false || $value === null || $value === '';
+ }
+
+ /**
+ * Lets you easily check a value against multiple validators.
+ *
+ * @param string $name The name/description of the field you want to validate the value for.
+ * The name will be prefixed in case there is any error.
+ * @param mixed $value The value which needs to be tested
+ * @param BaseValidator[] $validators
+ */
+ public static function check($name, $value, $validators)
+ {
+ foreach ($validators as $validator) {
+ try {
+ $validator->validate($value);
+ } catch (\Exception $e) {
+ throw new Exception(strip_tags($name) . ': ' . $e->getMessage(), $e->getCode(), $e);
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/piwik/core/Validators/CharacterLength.php b/piwik/core/Validators/CharacterLength.php
new file mode 100644
index 0000000..5478e4c
--- /dev/null
+++ b/piwik/core/Validators/CharacterLength.php
@@ -0,0 +1,58 @@
+<?php
+/**
+ * Piwik - free/libre analytics platform
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+
+namespace Piwik\Validators;
+
+use Piwik\Common;
+use Piwik\Piwik;
+
+class CharacterLength extends BaseValidator
+{
+ /**
+ * @var null|int
+ */
+ private $min;
+
+ /**
+ * @var null|int
+ */
+ private $max;
+
+ /**
+ * @param null|int $min
+ * @param null|int $max
+ */
+ public function __construct($min = null, $max = null)
+ {
+ if (isset($min)) {
+ $this->min = (int) $min;
+ }
+ if (isset($max)) {
+ $this->max = (int) $max;
+ }
+ }
+
+ public function validate($value)
+ {
+ if (!is_string($value) && !is_numeric($value)) {
+ return;
+ }
+
+ $lenValue = Common::mb_strlen($value);
+
+ if (isset($this->min) && $this->min > $lenValue) {
+ throw new Exception(Piwik::translate('General_ValidatorErrorCharacterTooShort', array($lenValue, $this->min)));
+ }
+
+ if (isset($this->max) && $this->max < $lenValue) {
+ throw new Exception(Piwik::translate('General_ValidatorErrorCharacterTooLong', array($lenValue, $this->max)));
+ }
+
+ }
+} \ No newline at end of file
diff --git a/piwik/core/Validators/DateTime.php b/piwik/core/Validators/DateTime.php
new file mode 100644
index 0000000..1376be0
--- /dev/null
+++ b/piwik/core/Validators/DateTime.php
@@ -0,0 +1,34 @@
+<?php
+/**
+ * Piwik - free/libre analytics platform
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+
+namespace Piwik\Validators;
+
+use Piwik\Date;
+use Piwik\Piwik;
+
+class DateTime extends BaseValidator
+{
+ public function validate($value)
+ {
+ if ($this->isValueBare($value)) {
+ return;
+ }
+
+ if (!preg_match('/^(\d{4})-(\d{2})-(\d{2})[ T](\d{2}):(\d{2}):(\d{2})Z?$/', $value)) {
+ throw new Exception(Piwik::translate('General_ValidatorErrorInvalidDateTimeFormat', array($value, 'YYYY-MM-DD HH:MM:SS')));
+ }
+
+ try {
+ Date::factory($value);
+ } catch (\Exception $e) {
+ throw new Exception($e->getMessage(), $e->getCode(), $e);
+ }
+
+ }
+} \ No newline at end of file
diff --git a/piwik/core/Validators/Email.php b/piwik/core/Validators/Email.php
new file mode 100644
index 0000000..852c518
--- /dev/null
+++ b/piwik/core/Validators/Email.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Piwik - free/libre analytics platform
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+
+namespace Piwik\Validators;
+
+use Piwik\Piwik;
+
+class Email extends BaseValidator
+{
+ public function validate($value)
+ {
+ if ($this->isValueBare($value)) {
+ return;
+ }
+
+ if (!Piwik::isValidEmailString($value)) {
+ throw new Exception(Piwik::translate('General_ValidatorErrorNotEmailLike', array($value)));
+ }
+ }
+} \ No newline at end of file
diff --git a/piwik/plugins/UserCountry/javascripts/userCountry.js b/piwik/core/Validators/Exception.php
index bbdb5e3..4fb6d43 100755..100644
--- a/piwik/plugins/UserCountry/javascripts/userCountry.js
+++ b/piwik/core/Validators/Exception.php
@@ -1,10 +1,15 @@
-/*!
+<?php
+/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
*/
-$(document).ready(function () {
-
-});
+namespace Piwik\Validators;
+
+class Exception extends \InvalidArgumentException
+{
+
+} \ No newline at end of file
diff --git a/piwik/core/Validators/IdSite.php b/piwik/core/Validators/IdSite.php
new file mode 100644
index 0000000..a40e25c
--- /dev/null
+++ b/piwik/core/Validators/IdSite.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * Piwik - free/libre analytics platform
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+
+namespace Piwik\Validators;
+
+use Piwik\Piwik;
+use Piwik\Site;
+use Piwik\UrlHelper;
+
+class IdSite extends BaseValidator
+{
+ public function validate($value)
+ {
+ new Site($value);
+ }
+} \ No newline at end of file
diff --git a/piwik/core/Validators/NotEmpty.php b/piwik/core/Validators/NotEmpty.php
new file mode 100644
index 0000000..d6e1e4b
--- /dev/null
+++ b/piwik/core/Validators/NotEmpty.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * Piwik - free/libre analytics platform
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+
+namespace Piwik\Validators;
+
+use Piwik\Piwik;
+
+class NotEmpty extends BaseValidator
+{
+ public function validate($value)
+ {
+ if (empty($value)) {
+ throw new Exception(Piwik::translate('General_ValidatorErrorEmptyValue'));
+ }
+ }
+} \ No newline at end of file
diff --git a/piwik/core/Validators/NumberRange.php b/piwik/core/Validators/NumberRange.php
new file mode 100644
index 0000000..c882d3f
--- /dev/null
+++ b/piwik/core/Validators/NumberRange.php
@@ -0,0 +1,57 @@
+<?php
+/**
+ * Piwik - free/libre analytics platform
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+
+namespace Piwik\Validators;
+
+use Piwik\Piwik;
+
+class NumberRange extends BaseValidator
+{
+ const MAX_SMALL_INT_UNSIGNED = 65535;
+ const MAX_MEDIUM_INT_UNSIGNED = 16777215;
+
+ /**
+ * @var null|int
+ */
+ private $min;
+
+ /**
+ * @var null|int
+ */
+ private $max;
+
+ /**
+ * @param null|int $min
+ * @param null|int $max
+ */
+ public function __construct($min = null, $max = null)
+ {
+ $this->min = $min;
+ $this->max = $max;
+ }
+
+ public function validate($value)
+ {
+ if ($this->isValueBare($value)) {
+ return;
+ }
+ if (!is_numeric($value)) {
+ throw new Exception(Piwik::translate('General_ValidatorErrorNotANumber'));
+ }
+
+ if (isset($this->min) && $this->min > $value) {
+ throw new Exception(Piwik::translate('General_ValidatorErrorNumberTooLow', array($value, $this->min)));
+ }
+
+ if (isset($this->max) && $this->max < $value) {
+ throw new Exception(Piwik::translate('General_ValidatorErrorNumberTooHigh', array($value, $this->max)));
+ }
+
+ }
+} \ No newline at end of file
diff --git a/piwik/core/Validators/Regex.php b/piwik/core/Validators/Regex.php
new file mode 100644
index 0000000..e1608f1
--- /dev/null
+++ b/piwik/core/Validators/Regex.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Piwik - free/libre analytics platform
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+
+namespace Piwik\Validators;
+
+use Piwik\Piwik;
+
+class Regex extends BaseValidator
+{
+ public function validate($value)
+ {
+ if ($this->isValueBare($value)) {
+ return;
+ }
+
+ if (@preg_match($value, '') === false) {
+ throw new Exception(Piwik::translate('General_ValidatorErrorNoValidRegex', array($value)));
+ }
+ }
+} \ No newline at end of file
diff --git a/piwik/core/Validators/UrlLike.php b/piwik/core/Validators/UrlLike.php
new file mode 100644
index 0000000..d4cd2af
--- /dev/null
+++ b/piwik/core/Validators/UrlLike.php
@@ -0,0 +1,23 @@
+<?php
+/**
+ * Piwik - free/libre analytics platform
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+
+namespace Piwik\Validators;
+
+use Piwik\Piwik;
+use Piwik\UrlHelper;
+
+class UrlLike extends BaseValidator
+{
+ public function validate($value)
+ {
+ if (!UrlHelper::isLookLikeUrl($value)) {
+ throw new Exception(Piwik::translate('ValidatorErrorNotUrlLike', $value));
+ }
+ }
+} \ No newline at end of file
diff --git a/piwik/core/Validators/WhitelistedValue.php b/piwik/core/Validators/WhitelistedValue.php
new file mode 100644
index 0000000..9e2b4a8
--- /dev/null
+++ b/piwik/core/Validators/WhitelistedValue.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Piwik - free/libre analytics platform
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+
+namespace Piwik\Validators;
+
+use Piwik\Piwik;
+
+class WhitelistedValue extends BaseValidator
+{
+ private $whitelisted = array();
+
+ /**
+ * @param array $whitelistedValues
+ */
+ public function __construct($whitelistedValues)
+ {
+ if (!is_array($whitelistedValues)) {
+ throw new Exception('The whitelisted values need to be an array');
+ }
+ $this->whitelisted = $whitelistedValues;
+ }
+
+ public function validate($value)
+ {
+ if (!in_array($value, $this->whitelisted, true)) {
+ throw new Exception(Piwik::translate('General_ValidatorErrorXNotWhitelisted', array($value, implode(', ', $this->whitelisted))));
+ }
+
+ }
+} \ No newline at end of file
diff --git a/piwik/core/Version.php b/piwik/core/Version.php
index c30cb69..a652d8d 100644
--- a/piwik/core/Version.php
+++ b/piwik/core/Version.php
@@ -20,7 +20,7 @@ final class Version
* The current Matomo version.
* @var string
*/
- const VERSION = '3.4.0';
+ const VERSION = '3.5.0';
public function isStableVersion($version)
{
diff --git a/piwik/core/View/OneClickDone.php b/piwik/core/View/OneClickDone.php
index 6095efb..0079356 100644
--- a/piwik/core/View/OneClickDone.php
+++ b/piwik/core/View/OneClickDone.php
@@ -59,9 +59,9 @@ class OneClickDone
public function render()
{
// set response headers
+ @Common::stripHeader('Pragma');
+ @Common::stripHeader('Expires');
@Common::sendHeader('Content-Type: text/html; charset=UTF-8');
- @Common::sendHeader('Pragma: ');
- @Common::sendHeader('Expires: ');
@Common::sendHeader('Cache-Control: must-revalidate');
@Common::sendHeader('X-Frame-Options: deny');
diff --git a/piwik/core/ViewDataTable/Config.php b/piwik/core/ViewDataTable/Config.php
index 2a2a927..4e5de85 100644
--- a/piwik/core/ViewDataTable/Config.php
+++ b/piwik/core/ViewDataTable/Config.php
@@ -92,7 +92,8 @@ class Config
'show_limit_control',
'pivot_by_dimension',
'pivot_by_column',
- 'pivot_dimension_name'
+ 'pivot_dimension_name',
+ 'disable_all_rows_filter_limit',
);
/**
@@ -473,6 +474,13 @@ class Config
public $hide_annotations_view = true;
/**
+ * Controls whether the 'all' row limit option is shown for the limit selector.
+ *
+ * @var bool
+ */
+ public $disable_all_rows_filter_limit = false;
+
+ /**
* Message to show if not data is available for the report
* Defaults to `CoreHome_ThereIsNoDataForThisReport` if not set
*
diff --git a/piwik/js/README.md b/piwik/js/README.md
index 052607f..9167ebc 100644
--- a/piwik/js/README.md
+++ b/piwik/js/README.md
@@ -31,24 +31,27 @@ The js/ folder contains:
## Deployment
-* piwik.js is minified using YUICompressor 2.4.7.
+* piwik.js is minified using YUICompressor 2.4.8.
To install YUICompressor run:
```bash
$ cd /path/to/piwik/js/
- $ wget https://github.com/downloads/yui/yuicompressor/yuicompressor-2.4.7.zip
- $ unzip yuicompressor-2.4.7.zip
+ $ wget https://github.com/yui/yuicompressor/releases/download/v2.4.8/yuicompressor-2.4.8.zip
+ $ unzip yuicompressor-2.4.8.zip
```
To compress the code containing the evil "eval", run:
```bash
$ cd /path/to/piwik/js/
- $ sed '/<DEBUG>/,/<\/DEBUG>/d' < piwik.js | sed 's/eval/replacedEvilString/' | java -jar yuicompressor-2.4.7/build/yuicompressor-2.4.7.jar --type js --line-break 1000 | sed 's/replacedEvilString/eval/' | sed 's/^[/][*]/\/*!/' > piwik.min.js && cp piwik.min.js ../piwik.js
+ $ sed '/<DEBUG>/,/<\/DEBUG>/d' < piwik.js | sed 's/eval/replacedEvilString/' | java -jar yuicompressor-2.4.8.jar --type js --line-break 1000 | sed 's/replacedEvilString/eval/' | sed 's/^[/][*]/\/*!/' > piwik.min.js && cp piwik.min.js ../piwik.js
```
This will generate the minify /path/to/piwik/js/piwik.min.js and copy it to
/path/to/piwik/piwik.js. Both "js/piwik.min.js" and "piwik.js" need to be committed.
+
+ We recommend to execute this command under Linux. It has not been tested with Windows and
+ MacOS might add a trailing newline which fails tests.
* In a production environment, the tests/javascript folder is not used and can
be removed (if present).
diff --git a/piwik/js/piwik.js b/piwik/js/piwik.js
index 6991b21..4b86e56 100644
--- a/piwik/js/piwik.js
+++ b/piwik/js/piwik.js
@@ -98,9 +98,9 @@ if (typeof JSON_PIWIK !== 'object' && typeof window.JSON === 'object' && window.
// The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical
// results for certain dates in Opera >= 10.53.
isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 &&
- // Safari < 2.0.2 stores the internal millisecond time value correctly,
- // but clips the values returned by the date methods to the range of
- // signed 32-bit integers ([-2 ** 31, 2 ** 31 - 1]).
+ // Safari < 2.0.2 stores the internal millisecond time value correctly,
+ // but clips the values returned by the date methods to the range of
+ // signed 32-bit integers ([-2 ** 31, 2 ** 31 - 1]).
isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708;
} catch (exception) {}
@@ -135,54 +135,54 @@ if (typeof JSON_PIWIK !== 'object' && typeof window.JSON === 'object' && window.
// Firefox 3.1b1 and b2 serialize string, number, and boolean
// primitives as object literals.
stringify(0) === "0" &&
- // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object
- // literals.
+ // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object
+ // literals.
stringify(new Number()) === "0" &&
stringify(new String()) == '""' &&
- // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or
- // does not define a canonical JSON representation (this applies to
- // objects with `toJSON` properties as well, *unless* they are nested
- // within an object or array).
+ // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or
+ // does not define a canonical JSON representation (this applies to
+ // objects with `toJSON` properties as well, *unless* they are nested
+ // within an object or array).
stringify(getClass) === undef &&
- // IE 8 serializes `undefined` as `"undefined"`. Safari <= 5.1.7 and
- // FF 3.1b3 pass this test.
+ // IE 8 serializes `undefined` as `"undefined"`. Safari <= 5.1.7 and
+ // FF 3.1b3 pass this test.
stringify(undef) === undef &&
- // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s,
- // respectively, if the value is omitted entirely.
+ // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s,
+ // respectively, if the value is omitted entirely.
stringify() === undef &&
- // FF 3.1b1, 2 throw an error if the given value is not a number,
- // string, array, object, Boolean, or `null` literal. This applies to
- // objects with custom `toJSON` methods as well, unless they are nested
- // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON`
- // methods entirely.
+ // FF 3.1b1, 2 throw an error if the given value is not a number,
+ // string, array, object, Boolean, or `null` literal. This applies to
+ // objects with custom `toJSON` methods as well, unless they are nested
+ // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON`
+ // methods entirely.
stringify(value) === "1" &&
stringify([value]) == "[1]" &&
- // Prototype <= 1.6.1 serializes `[undefined]` as `"[]"` instead of
- // `"[null]"`.
+ // Prototype <= 1.6.1 serializes `[undefined]` as `"[]"` instead of
+ // `"[null]"`.
stringify([undef]) == "[null]" &&
- // YUI 3.0.0b1 fails to serialize `null` literals.
+ // YUI 3.0.0b1 fails to serialize `null` literals.
stringify(null) == "null" &&
- // FF 3.1b1, 2 halts serialization if an array contains a function:
- // `[1, true, getClass, 1]` serializes as "[1,true,],". FF 3.1b3
- // elides non-JSON values from objects and arrays, unless they
- // define custom `toJSON` methods.
+ // FF 3.1b1, 2 halts serialization if an array contains a function:
+ // `[1, true, getClass, 1]` serializes as "[1,true,],". FF 3.1b3
+ // elides non-JSON values from objects and arrays, unless they
+ // define custom `toJSON` methods.
stringify([undef, getClass, null]) == "[null,null,null]" &&
- // Simple serialization test. FF 3.1b1 uses Unicode escape sequences
- // where character escape codes are expected (e.g., `\b` => `\u0008`).
+ // Simple serialization test. FF 3.1b1 uses Unicode escape sequences
+ // where character escape codes are expected (e.g., `\b` => `\u0008`).
stringify({ "a": [value, true, false, null, "\x00\b\n\f\r\t"] }) == serialized &&
- // FF 3.1b1 and b2 ignore the `filter` and `width` arguments.
+ // FF 3.1b1 and b2 ignore the `filter` and `width` arguments.
stringify(null, value) === "1" &&
stringify([1, 2], null, 1) == "[\n 1,\n 2\n]" &&
- // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly
- // serialize extended years.
+ // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly
+ // serialize extended years.
stringify(new Date(-8.64e15)) == '"-271821-04-20T00:00:00.000Z"' &&
- // The milliseconds are optional in ES 5, but required in 5.1.
+ // The milliseconds are optional in ES 5, but required in 5.1.
stringify(new Date(8.64e15)) == '"+275760-09-13T00:00:00.000Z"' &&
- // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative
- // four-digit years instead of six-digit years. Credits: @Yaffle.
+ // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative
+ // four-digit years instead of six-digit years. Credits: @Yaffle.
stringify(new Date(-621987552e5)) == '"-000001-01-01T00:00:00.000Z"' &&
- // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond
- // values less than 1000. Credits: @Yaffle.
+ // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond
+ // values less than 1000. Credits: @Yaffle.
stringify(new Date(-1)) == '"1969-12-31T23:59:59.999Z"';
} catch (exception) {
stringifySupported = false;
@@ -470,10 +470,10 @@ if (typeof JSON_PIWIK !== 'object' && typeof window.JSON === 'object' && window.
// Serialize extended years correctly.
value = (year <= 0 || year >= 1e4 ? (year < 0 ? "-" : "+") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) +
"-" + toPaddedString(2, month + 1) + "-" + toPaddedString(2, date) +
- // Months, dates, hours, minutes, and seconds should have two
- // digits; milliseconds should have three.
+ // Months, dates, hours, minutes, and seconds should have two
+ // digits; milliseconds should have three.
"T" + toPaddedString(2, hours) + ":" + toPaddedString(2, minutes) + ":" + toPaddedString(2, seconds) +
- // Milliseconds are optional in ES 5.0, but required in 5.1.
+ // Milliseconds are optional in ES 5.0, but required in 5.1.
"." + toPaddedString(3, milliseconds) + "Z";
} else {
value = null;
@@ -986,6 +986,8 @@ if (typeof JSON_PIWIK !== 'object' && typeof window.JSON === 'object' && window.
setReferrerUrl, setCustomUrl, setAPIUrl, setDocumentTitle, getPiwikUrl, getCurrentUrl,
setDownloadClasses, setLinkClasses,
setCampaignNameKey, setCampaignKeywordKey,
+ getConsentRequestsQueue, requireConsent, getRememberedConsent, hasRememberedConsent, setConsentGiven,
+ rememberConsentGiven, forgetConsentGiven, unload, hasConsent,
discardHashTag,
setCookieNamePrefix, setCookieDomain, setCookiePath, setSecureCookie, setVisitorIdCookie, getCookieDomain, hasCookies, setSessionCookie,
setVisitorCookieTimeout, setSessionCookieTimeout, setReferralCookieTimeout, getCookie, getCookiePath, getSessionCookieTimeout,
@@ -1012,7 +1014,7 @@ if (typeof JSON_PIWIK !== 'object' && typeof window.JSON === 'object' && window.
CONTENT_ATTR, CONTENT_CLASS, CONTENT_NAME_ATTR, CONTENT_PIECE_ATTR, CONTENT_PIECE_CLASS,
CONTENT_TARGET_ATTR, CONTENT_TARGET_CLASS, CONTENT_IGNOREINTERACTION_ATTR, CONTENT_IGNOREINTERACTION_CLASS,
trackCallbackOnLoad, trackCallbackOnReady, buildContentImpressionsRequests, wasContentImpressionAlreadyTracked,
- getQuery, getContent, getContentImpressionsRequestsFromNodes, buildContentInteractionTrackingRedirectUrl,
+ getQuery, getContent, setVisitorId, getContentImpressionsRequestsFromNodes, buildContentInteractionTrackingRedirectUrl,
buildContentInteractionRequestNode, buildContentInteractionRequest, buildContentImpressionRequest,
appendContentInteractionToRequestIfPossible, setupInteractionsTracking, trackContentImpressionClickInteraction,
internalIsNodeVisible, clearTrackedContentImpressions, getTrackerUrl, trackAllContentImpressions,
@@ -1027,7 +1029,8 @@ if (typeof JSON_PIWIK !== 'object' && typeof window.JSON === 'object' && window.
getConfigIdPageView, newVisitor, uuid, createTs, visitCount, currentVisitTs, lastVisitTs, lastEcommerceOrderTs,
"", "\b", "\t", "\n", "\f", "\r", "\"", "\\", apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,
getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join, lastIndex, length, parse, prototype, push, replace,
- sort, slice, stringify, test, toJSON, toString, valueOf, objectToJSON, addTracker, removeAllAsyncTrackersButFirst
+ sort, slice, stringify, test, toJSON, toString, valueOf, objectToJSON, addTracker, removeAllAsyncTrackersButFirst,
+ optUserOut, forgetUserOptOut, isUserOptedOut
*/
/*global _paq:true */
/*members push */
@@ -1093,6 +1096,8 @@ if (typeof window.Piwik !== 'object') {
missedPluginTrackerCalls = [],
+ coreConsentCounter = 0,
+
isPageUnloading = false;
/************************************************************
@@ -1668,18 +1673,18 @@ if (typeof window.Piwik !== 'object') {
}
switch (str_len & 3) {
- case 0:
- i = 0x080000000;
- break;
- case 1:
- i = str.charCodeAt(str_len - 1) << 24 | 0x0800000;
- break;
- case 2:
- i = str.charCodeAt(str_len - 2) << 24 | str.charCodeAt(str_len - 1) << 16 | 0x08000;
- break;
- case 3:
- i = str.charCodeAt(str_len - 3) << 24 | str.charCodeAt(str_len - 2) << 16 | str.charCodeAt(str_len - 1) << 8 | 0x80;
- break;
+ case 0:
+ i = 0x080000000;
+ break;
+ case 1:
+ i = str.charCodeAt(str_len - 1) << 24 | 0x0800000;
+ break;
+ case 2:
+ i = str.charCodeAt(str_len - 2) << 24 | str.charCodeAt(str_len - 1) << 16 | 0x08000;
+ break;
+ case 3:
+ i = str.charCodeAt(str_len - 3) << 24 | str.charCodeAt(str_len - 2) << 16 | str.charCodeAt(str_len - 1) << 8 | 0x80;
+ break;
}
word_array.push(i);
@@ -1778,8 +1783,8 @@ if (typeof window.Piwik !== 'object') {
href = getUrlParameter(href, 'u');
hostName = getHostName(href);
} else if (hostName === 'cc.bingj.com' || // Bing
- hostName === 'webcache.googleusercontent.com' || // Google
- hostName.slice(0, 5) === '74.6.') { // Yahoo (via Inktomi 74.6.0.0/16)
+ hostName === 'webcache.googleusercontent.com' || // Google
+ hostName.slice(0, 5) === '74.6.') { // Yahoo (via Inktomi 74.6.0.0/16)
href = documentAlias.links[0].href;
hostName = getHostName(href);
}
@@ -1991,11 +1996,11 @@ if (typeof window.Piwik !== 'object') {
}
if (!isDefined(t) ||
- !isDefined(r) ||
- !isDefined(b) ||
- !isDefined(l) ||
- !isDefined(w) ||
- !isDefined(h)) {
+ !isDefined(r) ||
+ !isDefined(b) ||
+ !isDefined(l) ||
+ !isDefined(w) ||
+ !isDefined(h)) {
t = el.offsetTop;
l = el.offsetLeft;
b = t + el.offsetHeight;
@@ -2016,11 +2021,11 @@ if (typeof window.Piwik !== 'object') {
if (
//-- If the target element is to the right of the parent elm
l + VISIBLE_PADDING > p.offsetWidth + p.scrollLeft ||
- //-- If the target element is to the left of the parent elm
+ //-- If the target element is to the left of the parent elm
l + w - VISIBLE_PADDING < p.scrollLeft ||
- //-- If the target element is under the parent elm
+ //-- If the target element is under the parent elm
t + VISIBLE_PADDING > p.offsetHeight + p.scrollTop ||
- //-- If the target element is above the parent elm
+ //-- If the target element is above the parent elm
t + h - VISIBLE_PADDING < p.scrollTop
) {
//-- Our target element is out of bounds:
@@ -2710,7 +2715,7 @@ if (typeof window.Piwik !== 'object') {
buildImpressionRequestParams: function (name, piece, target)
{
var params = 'c_n=' + encodeWrapper(name) +
- '&c_p=' + encodeWrapper(piece);
+ '&c_p=' + encodeWrapper(piece);
if (target) {
params += '&c_t=' + encodeWrapper(target);
@@ -2904,7 +2909,7 @@ if (typeof window.Piwik !== 'object') {
// check whether we were redirected from the piwik overlay plugin
var referrerRegExp = new RegExp('index\\.php\\?module=Overlay&action=startOverlaySession'
- + '&idSite=([0-9]+)&period=([^&]+)&date=([^&]+)(&segment=.*)?$');
+ + '&idSite=([0-9]+)&period=([^&]+)&date=([^&]+)(&segment=.*)?$');
var match = referrerRegExp.exec(documentAlias.referrer);
@@ -2995,14 +3000,19 @@ if (typeof window.Piwik !== 'object') {
************************************************************/
var
-/*<DEBUG>*/
+ /*<DEBUG>*/
/*
* registered test hooks
*/
registeredHooks = {},
-/*</DEBUG>*/
+ /*</DEBUG>*/
trackerInstance = this,
+
+ // constants
+ CONSENT_COOKIE_NAME = 'mtm_consent',
+ CONSENT_REMOVED_COOKIE_NAME = 'mtm_consent_removed',
+
// Current URL and Referrer URL
locationArray = urlFixup(documentAlias.domain, windowAlias.location.href, getReferrer()),
domainAlias = domainFixup(locationArray[0]),
@@ -3209,7 +3219,14 @@ if (typeof window.Piwik !== 'object') {
// pageview was already tracked or not
numTrackedPageviews = 0,
- configCookiesToDelete = ['id', 'ses', 'cvar', 'ref'];
+ configCookiesToDelete = ['id', 'ses', 'cvar', 'ref'],
+
+ // we always have the concept of consent. by default consent is assumed unless the end user removes it,
+ // or unless a matomo user explicitly requires consent (via requireConsent())
+ configHasConsent = null, // initialized below
+
+ // holds all pending tracking requests that have not been tracked because we need consent
+ consentRequestsQueue = [];
// Document title
try {
@@ -3255,6 +3272,8 @@ if (typeof window.Piwik !== 'object') {
return cookieMatch ? decodeWrapper(cookieMatch[2]) : 0;
}
+ configHasConsent = !getCookie(CONSENT_REMOVED_COOKIE_NAME);
+
/*
* Removes hash tag from the URL
*
@@ -3599,6 +3618,7 @@ if (typeof window.Piwik !== 'object') {
function heartBeatUp(delay) {
if (heartBeatTimeout
|| !configHeartBeatDelay
+ || !configHasConsent
) {
return;
}
@@ -3710,9 +3730,12 @@ if (typeof window.Piwik !== 'object') {
* Send request
*/
function sendRequest(request, delay, callback) {
+ if (!configHasConsent) {
+ consentRequestsQueue.push(request);
+ return;
+ }
if (!configDoNotTrack && request) {
makeSureThereIsAGapAfterFirstTrackingRequestToPreventMultipleVisitorCreation(function () {
-
if (configRequestMethod === 'POST' || String(request).length > 2000) {
sendXmlHttpRequest(request, callback);
} else {
@@ -3722,7 +3745,6 @@ if (typeof window.Piwik !== 'object') {
setExpireDateTime(delay);
});
}
-
if (!heartBeatSetUp) {
setUpHeartBeat(); // setup window events too, but only once
} else {
@@ -3748,6 +3770,11 @@ if (typeof window.Piwik !== 'object') {
return;
}
+ if (!configHasConsent) {
+ consentRequestsQueue.push(requests);
+ return;
+ }
+
var bulk = '{"requests":["?' + requests.join('","?') + '"]}';
makeSureThereIsAGapAfterFirstTrackingRequestToPreventMultipleVisitorCreation(function () {
@@ -4107,7 +4134,7 @@ if (typeof window.Piwik !== 'object') {
for (index = 0; index < configCookiesToDelete.length; index++) {
cookieName = getCookieName(configCookiesToDelete[index]);
- if (0 !== getCookie(cookieName)) {
+ if (cookieName !== CONSENT_REMOVED_COOKIE_NAME && cookieName !== CONSENT_COOKIE_NAME && 0 !== getCookie(cookieName)) {
deleteCookie(cookieName, configCookiePath, configCookieDomain);
}
}
@@ -4267,8 +4294,8 @@ if (typeof window.Piwik !== 'object') {
if (currentReferrerHostName.length && // there is a referrer
!isSiteHostName(currentReferrerHostName) && // domain is not the current domain
(!configConversionAttributionFirstReferrer || // attribute to last known referrer
- !originalReferrerHostName.length || // previously empty
- isSiteHostName(originalReferrerHostName))) { // previously set but in current domain
+ !originalReferrerHostName.length || // previously empty
+ isSiteHostName(originalReferrerHostName))) { // previously set but in current domain
referralUrl = configReferrerUrl;
}
@@ -4289,22 +4316,22 @@ if (typeof window.Piwik !== 'object') {
// build out the rest of the request
request += '&idsite=' + configTrackerSiteId +
- '&rec=1' +
- '&r=' + String(Math.random()).slice(2, 8) + // keep the string to a minimum
- '&h=' + now.getHours() + '&m=' + now.getMinutes() + '&s=' + now.getSeconds() +
- '&url=' + encodeWrapper(purify(currentUrl)) +
- (configReferrerUrl.length ? '&urlref=' + encodeWrapper(purify(configReferrerUrl)) : '') +
- ((configUserId && configUserId.length) ? '&uid=' + encodeWrapper(configUserId) : '') +
- '&_id=' + cookieVisitorIdValues.uuid + '&_idts=' + cookieVisitorIdValues.createTs + '&_idvc=' + cookieVisitorIdValues.visitCount +
- '&_idn=' + cookieVisitorIdValues.newVisitor + // currently unused
- (campaignNameDetected.length ? '&_rcn=' + encodeWrapper(campaignNameDetected) : '') +
- (campaignKeywordDetected.length ? '&_rck=' + encodeWrapper(campaignKeywordDetected) : '') +
- '&_refts=' + referralTs +
- '&_viewts=' + cookieVisitorIdValues.lastVisitTs +
- (String(cookieVisitorIdValues.lastEcommerceOrderTs).length ? '&_ects=' + cookieVisitorIdValues.lastEcommerceOrderTs : '') +
- (String(referralUrl).length ? '&_ref=' + encodeWrapper(purify(referralUrl.slice(0, referralUrlMaxLength))) : '') +
- (charSet ? '&cs=' + encodeWrapper(charSet) : '') +
- '&send_image=0';
+ '&rec=1' +
+ '&r=' + String(Math.random()).slice(2, 8) + // keep the string to a minimum
+ '&h=' + now.getHours() + '&m=' + now.getMinutes() + '&s=' + now.getSeconds() +
+ '&url=' + encodeWrapper(purify(currentUrl)) +
+ (configReferrerUrl.length ? '&urlref=' + encodeWrapper(purify(configReferrerUrl)) : '') +
+ ((configUserId && configUserId.length) ? '&uid=' + encodeWrapper(configUserId) : '') +
+ '&_id=' + cookieVisitorIdValues.uuid + '&_idts=' + cookieVisitorIdValues.createTs + '&_idvc=' + cookieVisitorIdValues.visitCount +
+ '&_idn=' + cookieVisitorIdValues.newVisitor + // currently unused
+ (campaignNameDetected.length ? '&_rcn=' + encodeWrapper(campaignNameDetected) : '') +
+ (campaignKeywordDetected.length ? '&_rck=' + encodeWrapper(campaignKeywordDetected) : '') +
+ '&_refts=' + referralTs +
+ '&_viewts=' + cookieVisitorIdValues.lastVisitTs +
+ (String(cookieVisitorIdValues.lastEcommerceOrderTs).length ? '&_ects=' + cookieVisitorIdValues.lastEcommerceOrderTs : '') +
+ (String(referralUrl).length ? '&_ref=' + encodeWrapper(purify(referralUrl.slice(0, referralUrlMaxLength))) : '') +
+ (charSet ? '&cs=' + encodeWrapper(charSet) : '') +
+ '&send_image=0';
// browser features
for (i in browserFeatures) {
@@ -4477,13 +4504,13 @@ if (typeof window.Piwik !== 'object') {
// Set price to zero
if (!isDefined(ecommerceItems[sku][3])
- || String(ecommerceItems[sku][3]).length === 0) {
+ || String(ecommerceItems[sku][3]).length === 0) {
ecommerceItems[sku][3] = 0;
}
// Set quantity to 1
if (!isDefined(ecommerceItems[sku][4])
- || String(ecommerceItems[sku][4]).length === 0) {
+ || String(ecommerceItems[sku][4]).length === 0) {
ecommerceItems[sku][4] = 1;
}
@@ -4502,7 +4529,7 @@ if (typeof window.Piwik !== 'object') {
function logEcommerceOrder(orderId, grandTotal, subTotal, tax, shipping, discount) {
if (String(orderId).length
- && isDefined(grandTotal)) {
+ && isDefined(grandTotal)) {
logEcommerce(orderId, grandTotal, subTotal, tax, shipping, discount);
}
}
@@ -4558,7 +4585,7 @@ if (typeof window.Piwik !== 'object') {
var downloadPattern = getClassesRegExp(configDownloadClasses, 'download'),
linkPattern = getClassesRegExp(configLinkClasses, 'link'),
- // does file extension indicate that it is a download?
+ // does file extension indicate that it is a download?
downloadExtensionsPattern = new RegExp('\\.(' + configDownloadExtensions.join('|') + ')([?&#]|$)', 'i');
if (linkPattern.test(className)) {
@@ -4582,7 +4609,7 @@ if (typeof window.Piwik !== 'object') {
parentElement = sourceElement.parentNode;
while (parentElement !== null &&
- /* buggy IE5.5 */
+ /* buggy IE5.5 */
isDefined(parentElement)) {
if (query.isLinkElement(sourceElement)) {
@@ -5016,9 +5043,9 @@ if (typeof window.Piwik !== 'object') {
function buildEventRequest(category, action, name, value)
{
return 'e_c=' + encodeWrapper(category)
- + '&e_a=' + encodeWrapper(action)
- + (isDefined(name) ? '&e_n=' + encodeWrapper(name) : '')
- + (isDefined(value) ? '&e_v=' + encodeWrapper(value) : '');
+ + '&e_a=' + encodeWrapper(action)
+ + (isDefined(name) ? '&e_n=' + encodeWrapper(name) : '')
+ + (isDefined(value) ? '&e_v=' + encodeWrapper(value) : '');
}
/*
@@ -5032,10 +5059,10 @@ if (typeof window.Piwik !== 'object') {
return false;
}
var request = getRequest(
- buildEventRequest(category, action, name, value),
- customData,
- 'event'
- );
+ buildEventRequest(category, action, name, value),
+ customData,
+ 'event'
+ );
sendRequest(request, configTrackerPause, callback);
}
@@ -5045,8 +5072,8 @@ if (typeof window.Piwik !== 'object') {
*/
function logSiteSearch(keyword, category, resultsCount, customData) {
var request = getRequest('search=' + encodeWrapper(keyword)
- + (category ? '&search_cat=' + encodeWrapper(category) : '')
- + (isDefined(resultsCount) ? '&search_count=' + resultsCount : ''), customData, 'sitesearch');
+ + (category ? '&search_cat=' + encodeWrapper(category) : '')
+ + (isDefined(resultsCount) ? '&search_count=' + resultsCount : ''), customData, 'sitesearch');
sendRequest(request, configTrackerPause);
}
@@ -5182,8 +5209,8 @@ if (typeof window.Piwik !== 'object') {
targetLink = String(targetLink);
var isOutlink = targetLink.indexOf('//') === 0
- || targetLink.indexOf('http://') === 0
- || targetLink.indexOf('https://') === 0;
+ || targetLink.indexOf('http://') === 0
+ || targetLink.indexOf('https://') === 0;
if (!isOutlink) {
return false;
@@ -5508,9 +5535,9 @@ if (typeof window.Piwik !== 'object') {
// IE6/IE7 navigator.javaEnabled can't be aliased, so test directly
// on Edge navigator.javaEnabled() always returns `true`, so ignore it
if (!((new RegExp('Edge[ /](\\d+[\\.\\d]+)')).test(navigatorAlias.userAgent)) &&
- typeof navigator.javaEnabled !== 'unknown' &&
- isDefined(navigatorAlias.javaEnabled) &&
- navigatorAlias.javaEnabled()) {
+ typeof navigator.javaEnabled !== 'unknown' &&
+ isDefined(navigatorAlias.javaEnabled) &&
+ navigatorAlias.javaEnabled()) {
browserFeatures.java = '1';
}
@@ -5528,7 +5555,7 @@ if (typeof window.Piwik !== 'object') {
browserFeatures.res = parseInt(width, 10) + 'x' + parseInt(height, 10);
}
-/*<DEBUG>*/
+ /*<DEBUG>*/
/*
* Register a test hook. Using eval() permits access to otherwise
* privileged members.
@@ -5550,7 +5577,7 @@ if (typeof window.Piwik !== 'object') {
return hookObj;
}
-/*</DEBUG>*/
+ /*</DEBUG>*/
/************************************************************
* Constructor
@@ -5563,19 +5590,19 @@ if (typeof window.Piwik !== 'object') {
updateDomainHash();
setVisitorIdCookie();
-/*<DEBUG>*/
+ /*<DEBUG>*/
/*
* initialize test plugin
*/
executePluginMethod('run', null, registerHook);
-/*</DEBUG>*/
+ /*</DEBUG>*/
/************************************************************
* Public data and methods
************************************************************/
-/*<DEBUG>*/
+ /*<DEBUG>*/
/*
* Test hook accessors
*/
@@ -5589,6 +5616,9 @@ if (typeof window.Piwik !== 'object') {
this.getContent = function () {
return content;
};
+ this.setVisitorId = function (visitorId) {
+ visitorUUID = visitorId;
+ };
this.buildContentImpressionRequest = buildContentImpressionRequest;
this.buildContentInteractionRequest = buildContentInteractionRequest;
@@ -5638,8 +5668,14 @@ if (typeof window.Piwik !== 'object') {
var firstTracker = asyncTrackers[0];
asyncTrackers = [firstTracker];
};
+ this.getConsentRequestsQueue = function () {
+ return consentRequestsQueue;
+ };
+ this.hasConsent = function () {
+ return configHasConsent;
+ };
this.getRemainingVisitorCookieTimeout = getRemainingVisitorCookieTimeout;
-/*</DEBUG>*/
+ /*</DEBUG>*/
/**
* Get visitor ID (from first party cookie)
@@ -5785,7 +5821,6 @@ if (typeof window.Piwik !== 'object') {
*/
this.resetUserId = function() {
configUserId = '';
- visitorUUID = generateRandomUuid();
};
/**
@@ -5798,7 +5833,6 @@ if (typeof window.Piwik !== 'object') {
return;
}
configUserId = userId;
- visitorUUID = hash(configUserId).substr(0, 16);
};
/**
@@ -5999,7 +6033,7 @@ if (typeof window.Piwik !== 'object') {
}
if (!isDefined(cvar)
- || (cvar && cvar[0] === '')) {
+ || (cvar && cvar[0] === '')) {
return false;
}
@@ -6196,6 +6230,7 @@ if (typeof window.Piwik !== 'object') {
return crossDomainTrackingEnabled;
};
+
/**
* By default, the two visits across domains will be linked together
* when the link is click and the page is loaded within 180 seconds.
@@ -6667,7 +6702,7 @@ if (typeof window.Piwik !== 'object') {
*/
this.disableHeartBeatTimer = function () {
heartBeatDown();
-
+
if (configHeartBeatDelay || heartBeatSetUp) {
if (windowAlias.removeEventListener) {
windowAlias.removeEventListener('focus', heartBeatOnFocus, true);
@@ -6754,6 +6789,7 @@ if (typeof window.Piwik !== 'object') {
*/
this.trackPageView = function (customTitle, customData, callback) {
trackedContentImpressions = [];
+ consentRequestsQueue = [];
if (isOverlaySession(configTrackerSiteId)) {
trackCallback(function () {
@@ -7048,7 +7084,7 @@ if (typeof window.Piwik !== 'object') {
// On a category page, do not track Product name not defined
if ((!isDefined(sku) || !sku.length)
- && (!isDefined(name) || !name.length)) {
+ && (!isDefined(name) || !name.length)) {
return;
}
@@ -7130,6 +7166,163 @@ if (typeof window.Piwik !== 'object') {
});
};
+ /**
+ * If the user has given consent previously and this consent was remembered, it will return the number
+ * in milliseconds since 1970/01/01 which is the date when the user has given consent. Please note that
+ * the returned time depends on the users local time which may not always be correct.
+ *
+ * @returns number|string
+ */
+ this.getRememberedConsent = function () {
+ var value = getCookie(CONSENT_COOKIE_NAME);
+ if (getCookie(CONSENT_REMOVED_COOKIE_NAME)) {
+ // if for some reason the consent_removed cookie is also set with the consent cookie, the
+ // consent_removed cookie overrides the consent one, and we make sure to delete the consent
+ // cookie.
+ if (value) {
+ deleteCookie(CONSENT_COOKIE_NAME, configCookiePath, configCookieDomain);
+ }
+ return null;
+ }
+
+ if (!value || value === 0) {
+ return null;
+ }
+ return value;
+ };
+
+ /**
+ * Detects whether the user has given consent previously.
+ *
+ * @returns bool
+ */
+ this.hasRememberedConsent = function () {
+ return !!this.getRememberedConsent();
+ };
+
+ /**
+ * When called, no tracking request will be sent to the Matomo server until you have called `setConsentGiven()`
+ * unless consent was given previously AND you called {@link rememberConsentGiven()} when the user gave her
+ * or his consent.
+ *
+ * This may be useful when you want to implement for example a popup to ask for consent before tracking the user.
+ * Once the user has given consent, you should call {@link setConsentGiven()} or {@link rememberConsentGiven()}.
+ *
+ * Please note that when consent is required, we will temporarily set cookies but not track any data. Those
+ * cookies will only exist during this page view and deleted as soon as the user navigates to a different page
+ * or closes the browser.
+ *
+ * If you require consent for tracking personal data for example, you should first call
+ * `_paq.push(['requireConsent'])`.
+ *
+ * If the user has already given consent in the past, you can either decide to not call `requireConsent` at all
+ * or call `_paq.push(['setConsentGiven'])` on each page view at any time after calling `requireConsent`.
+ *
+ * When the user gives you the consent to track data, you can also call `_paq.push(['rememberConsentGiven', optionalTimeoutInHours])`
+ * and for the duration while the consent is remembered, any call to `requireConsent` will be automatically ignored until you call `forgetConsentGiven`.
+ * `forgetConsentGiven` needs to be called when the user removes consent for tracking. This means if you call `rememberConsentGiven` at the
+ * time the user gives you consent, you do not need to ever call `_paq.push(['setConsentGiven'])`.
+ */
+ this.requireConsent = function () {
+ configHasConsent = this.hasRememberedConsent();
+ // Piwik.addPlugin might not be defined at this point, we add the plugin directly also to make JSLint happy
+ // We also want to make sure to define an unload listener for each tracker, not only one tracker.
+ coreConsentCounter++;
+ plugins['CoreConsent' + coreConsentCounter] = {
+ unload: function () {
+ if (!configHasConsent) {
+ // we want to make sure to remove all previously set cookies again
+ deleteCookies();
+ }
+ }
+ };
+ };
+
+ /**
+ * Call this method once the user has given consent. This will cause all tracking requests from this
+ * page view to be sent. Please note that the given consent won't be remembered across page views. If you
+ * want to remember consent across page views, call {@link rememberConsentGiven()} instead.
+ */
+ this.setConsentGiven = function () {
+ configHasConsent = true;
+ deleteCookie(CONSENT_REMOVED_COOKIE_NAME, configCookiePath, configCookieDomain);
+ var i, requestType;
+ for (i = 0; i < consentRequestsQueue.length; i++) {
+ requestType = typeof consentRequestsQueue[i];
+ if (requestType === 'string') {
+ sendRequest(consentRequestsQueue[i], configTrackerPause);
+ } else if (requestType === 'object') {
+ sendBulkRequest(consentRequestsQueue[i], configTrackerPause);
+ }
+ }
+ consentRequestsQueue = [];
+ };
+
+ /**
+ * Calling this method will remember that the user has given consent across multiple requests by setting
+ * a cookie. You can optionally define the lifetime of that cookie in milliseconds using a parameter.
+ *
+ * When you call this method, we imply that the user has given consent for this page view, and will also
+ * imply consent for all future page views unless the cookie expires (if timeout defined) or the user
+ * deletes all her or his cookies. This means even if you call {@link requireConsent()}, then all requests
+ * will still be tracked.
+ *
+ * Please note that this feature requires you to set the `cookieDomain` and `cookiePath` correctly and requires
+ * that you do not disable cookies. Please also note that when you call this method, consent will be implied
+ * for all sites that match the configured cookieDomain and cookiePath. Depending on your website structure,
+ * you may need to restrict or widen the scope of the cookie domain/path to ensure the consent is applied
+ * to the sites you want.
+ */
+ this.rememberConsentGiven = function (hoursToExpire) {
+ if (configCookiesDisabled) {
+ logConsoleError('rememberConsentGiven is called but cookies are disabled, consent will not be remembered');
+ return;
+ }
+ if (hoursToExpire) {
+ hoursToExpire = hoursToExpire * 60 * 60 * 1000;
+ }
+ this.setConsentGiven();
+ var now = new Date().getTime();
+ setCookie(CONSENT_COOKIE_NAME, now, hoursToExpire, configCookiePath, configCookieDomain, configCookieIsSecure);
+ };
+
+ /**
+ * Calling this method will remove any previously given consent and during this page view no request
+ * will be sent anymore ({@link requireConsent()}) will be called automatically to ensure the removed
+ * consent will be enforced. You may call this method if the user removes consent manually, or if you
+ * want to re-ask for consent after a specific time period.
+ */
+ this.forgetConsentGiven = function () {
+ if (configCookiesDisabled) {
+ logConsoleError('forgetConsentGiven is called but cookies are disabled, consent will not be forgotten');
+ return;
+ }
+
+ deleteCookie(CONSENT_COOKIE_NAME, configCookiePath, configCookieDomain);
+ setCookie(CONSENT_REMOVED_COOKIE_NAME, new Date().getTime(), 0, configCookiePath, configCookieDomain, configCookieIsSecure);
+ this.requireConsent();
+ };
+
+ /**
+ * Returns true if user is opted out, false if otherwise.
+ *
+ * @returns {boolean}
+ */
+ this.isUserOptedOut = function () {
+ return !configHasConsent;
+ };
+
+ /**
+ * Alias for forgetConsentGiven(). After calling this function, the user will no longer be tracked,
+ * (even if they come back to the site).
+ */
+ this.optUserOut = this.forgetConsentGiven;
+
+ /**
+ * Alias for rememberConsentGiven(). After calling this function, the current user will be tracked.
+ */
+ this.forgetUserOptOut = this.rememberConsentGiven;
+
Piwik.trigger('TrackerSetup', [this]);
}
@@ -7182,7 +7375,7 @@ if (typeof window.Piwik !== 'object') {
* Constructor
************************************************************/
- var applyFirst = ['addTracker', 'disableCookies', 'setTrackerUrl', 'setAPIUrl', 'enableCrossDomainLinking', 'setCrossDomainLinkingTimeout', 'setSecureCookie', 'setCookiePath', 'setCookieDomain', 'setDomains', 'setUserId', 'setSiteId', 'enableLinkTracking'];
+ var applyFirst = ['addTracker', 'disableCookies', 'setTrackerUrl', 'setAPIUrl', 'enableCrossDomainLinking', 'setCrossDomainLinkingTimeout', 'setSecureCookie', 'setCookiePath', 'setCookieDomain', 'setDomains', 'setUserId', 'setSiteId', 'enableLinkTracking', 'requireConsent', 'setConsentGiven'];
function createFirstTracker(piwikUrl, siteId)
{
@@ -7495,12 +7688,12 @@ if (typeof window.Piwik !== 'object') {
window.Piwik.addTracker();
} else {
_paq = {push: function (args) {
- // needed to write it this way for jslint
- var consoleType = typeof console;
- if (consoleType !== 'undefined' && console && console.error) {
- console.error('_paq.push() was used but Piwik tracker was not initialized before the piwik.js file was loaded. Make sure to configure the tracker via _paq.push before loading piwik.js. Alternatively, you can create a tracker via Piwik.addTracker() manually and then use _paq.push but it may not fully work as tracker methods may not be executed in the correct order.', args);
- }
- }};
+ // needed to write it this way for jslint
+ var consoleType = typeof console;
+ if (consoleType !== 'undefined' && console && console.error) {
+ console.error('_paq.push() was used but Piwik tracker was not initialized before the piwik.js file was loaded. Make sure to configure the tracker via _paq.push before loading piwik.js. Alternatively, you can create a tracker via Piwik.addTracker() manually and then use _paq.push but it may not fully work as tracker methods may not be executed in the correct order.', args);
+ }
+ }};
}
}
diff --git a/piwik/js/piwik.min.js b/piwik/js/piwik.min.js
index e7624d6..67f62fe 100644
--- a/piwik/js/piwik.min.js
+++ b/piwik/js/piwik.min.js
@@ -8,7 +8,7 @@
* @license https://piwik.org/free-software/bsd/ BSD-3 Clause (also in js/LICENSE.txt)
* @license magnet:?xt=urn:btih:c80d50af7d3db9be66a4d0a86db0286e4fd33292&dn=bsd-3-clause.txt BSD-3-Clause
*/
-if(typeof JSON_PIWIK!=="object"&&typeof window.JSON==="object"&&window.JSON.stringify&&window.JSON.parse){JSON_PIWIK=window.JSON}else{(function(){var a={};
+;if(typeof JSON_PIWIK!=="object"&&typeof window.JSON==="object"&&window.JSON.stringify&&window.JSON.parse){JSON_PIWIK=window.JSON}else{(function(){var a={};
/*!! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */
(function(){var c=typeof define==="function"&&define.amd;var e={"function":true,object:true};var h=e[typeof a]&&a&&!a.nodeType&&a;var i=e[typeof window]&&window||this,b=h&&e[typeof module]&&module&&!module.nodeType&&typeof global=="object"&&global;if(b&&(b.global===b||b.window===b||b.self===b)){i=b}function j(ab,V){ab||(ab=i.Object());V||(V=i.Object());
var K=ab.Number||i.Number,R=ab.String||i.String,x=ab.Object||i.Object,S=ab.Date||i.Date,T=ab.SyntaxError||i.SyntaxError,aa=ab.TypeError||i.TypeError,J=ab.Math||i.Math,Y=ab.JSON||i.JSON;if(typeof Y=="object"&&Y){V.stringify=Y.stringify;V.parse=Y.parse}var n=x.prototype,u=n.toString,r,m,L;var B=new S(-3509827334573292);try{B=B.getUTCFullYear()==-109252&&B.getUTCMonth()===0&&B.getUTCDate()===1&&B.getUTCHours()==10&&B.getUTCMinutes()==37&&B.getUTCSeconds()==6&&B.getUTCMilliseconds()==708}catch(v){}function o(ac){if(o[ac]!==L){return o[ac]}var ad;if(ac=="bug-string-char-index"){ad="a"[0]!="a"}else{if(ac=="json"){ad=o("json-stringify")&&o("json-parse")}else{var ak,ah='{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';if(ac=="json-stringify"){var ai=V.stringify,aj=typeof ai=="function"&&B;if(aj){(ak=function(){return 1}).toJSON=ak;try{aj=ai(0)==="0"&&ai(new K())==="0"&&ai(new R())=='""'&&ai(u)===L&&ai(L)===L&&ai()===L&&ai(ak)==="1"&&ai([ak])=="[1]"&&ai([L])=="[null]"&&ai(null)=="null"&&ai([L,u,null])=="[null,null,null]"&&ai({a:[ak,true,false,null,"\x00\b\n\f\r\t"]})==ah&&ai(null,ak)==="1"&&ai([1,2],null,1)=="[\n 1,\n 2\n]"&&ai(new S(-8640000000000000))=='"-271821-04-20T00:00:00.000Z"'&&ai(new S(8640000000000000))=='"+275760-09-13T00:00:00.000Z"'&&ai(new S(-62198755200000))=='"-000001-01-01T00:00:00.000Z"'&&ai(new S(-1))=='"1969-12-31T23:59:59.999Z"'
@@ -18,60 +18,60 @@ var I="000000";var t=function(ac,ad){return(I+(ad||0)).slice(-ac)};var z="\\u00"
}else{at=null}}else{if(typeof at.toJSON=="function"&&((ae!=N&&ae!=O&&ae!=E)||r.call(at,"toJSON"))){at=at.toJSON(ai)}}}if(ag){at=ag.call(aA,ai,at)}if(at===null){return"null"}ae=u.call(at);if(ae==A){return""+at}else{if(ae==N){return at>-1/0&&at<1/0?""+at:"null"}else{if(ae==O){return C(""+at)}}}if(typeof at=="object"){for(af=aj.length;af--;){if(aj[af]===at){throw aa()}}aj.push(at);ar=[];av=ac;ac+=ax;if(ae==E){for(ah=0,af=at.length;ah<af;ah++){ad=p(ah,at,ag,al,ax,ac,aj);ar.push(ad===L?"null":ad)}ao=ar.length?(ax?"[\n"+ac+ar.join(",\n"+ac)+"\n"+av+"]":("["+ar.join(",")+"]")):"[]"}else{m(al||at,function(aC){var aB=p(aC,at,ag,al,ax,ac,aj);if(aB!==L){ar.push(C(aC)+":"+(ax?" ":"")+aB)}});ao=ar.length?(ax?"{\n"+ac+ar.join(",\n"+ac)+"\n"+av+"}":("{"+ar.join(",")+"}")):"{}"}aj.pop();return ao}};V.stringify=function(ac,ae,af){var ad,al,aj,ai;if(e[typeof ae]&&ae){if((ai=u.call(ae))==U){al=ae}else{if(ai==E){aj={};for(var ah=0,ag=ae.length,ak;ah<ag;ak=ae[ah++],((ai=u.call(ak)),ai==O||ai==N)&&(aj[ak]=1)){}}}}if(af){if((ai=u.call(af))==N){if((af-=af%1)>0){for(ad="",af>10&&(af=10);
ad.length<af;ad+=" "){}}}else{if(ai==O){ad=af.length<=10?af:af.slice(0,10)}}}return p("",(ak={},ak[""]=ac,ak),al,aj,ad,"",[])}}if(!o("json-parse")){var M=R.fromCharCode;var l={92:"\\",34:'"',47:"/",98:"\b",116:"\t",110:"\n",102:"\f",114:"\r"};var G,X;var H=function(){G=X=null;throw T()};var y=function(){var ah=X,af=ah.length,ag,ae,ac,ai,ad;while(G<af){ad=ah.charCodeAt(G);switch(ad){case 9:case 10:case 13:case 32:G++;break;case 123:case 125:case 91:case 93:case 58:case 44:ag=F?ah.charAt(G):ah[G];G++;return ag;case 34:for(ag="@",G++;G<af;){ad=ah.charCodeAt(G);if(ad<32){H()}else{if(ad==92){ad=ah.charCodeAt(++G);switch(ad){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:ag+=l[ad];G++;break;case 117:ae=++G;for(ac=G+4;G<ac;G++){ad=ah.charCodeAt(G);if(!(ad>=48&&ad<=57||ad>=97&&ad<=102||ad>=65&&ad<=70)){H()}}ag+=M("0x"+ah.slice(ae,G));break;default:H()}}else{if(ad==34){break}ad=ah.charCodeAt(G);ae=G;while(ad>=32&&ad!=92&&ad!=34){ad=ah.charCodeAt(++G)}ag+=ah.slice(ae,G)}}}if(ah.charCodeAt(G)==34){G++;
return ag}H();default:ae=G;if(ad==45){ai=true;ad=ah.charCodeAt(++G)}if(ad>=48&&ad<=57){if(ad==48&&((ad=ah.charCodeAt(G+1)),ad>=48&&ad<=57)){H()}ai=false;for(;G<af&&((ad=ah.charCodeAt(G)),ad>=48&&ad<=57);G++){}if(ah.charCodeAt(G)==46){ac=++G;for(;ac<af&&((ad=ah.charCodeAt(ac)),ad>=48&&ad<=57);ac++){}if(ac==G){H()}G=ac}ad=ah.charCodeAt(G);if(ad==101||ad==69){ad=ah.charCodeAt(++G);if(ad==43||ad==45){G++}for(ac=G;ac<af&&((ad=ah.charCodeAt(ac)),ad>=48&&ad<=57);ac++){}if(ac==G){H()}G=ac}return +ah.slice(ae,G)}if(ai){H()}if(ah.slice(G,G+4)=="true"){G+=4;return true}else{if(ah.slice(G,G+5)=="false"){G+=5;return false}else{if(ah.slice(G,G+4)=="null"){G+=4;return null}}}H()}}return"$"};var W=function(ad){var ac,ae;if(ad=="$"){H()}if(typeof ad=="string"){if((F?ad.charAt(0):ad[0])=="@"){return ad.slice(1)}if(ad=="["){ac=[];for(;;ae||(ae=true)){ad=y();if(ad=="]"){break}if(ae){if(ad==","){ad=y();if(ad=="]"){H()}}else{H()}}if(ad==","){H()}ac.push(W(ad))}return ac}else{if(ad=="{"){ac={};for(;;ae||(ae=true)){ad=y();
-if(ad=="}"){break}if(ae){if(ad==","){ad=y();if(ad=="}"){H()}}else{H()}}if(ad==","||typeof ad!="string"||(F?ad.charAt(0):ad[0])!="@"||y()!=":"){H()}ac[ad.slice(1)]=W(y())}return ac}}H()}return ad};var P=function(ae,ad,af){var ac=w(ae,ad,af);if(ac===L){delete ae[ad]}else{ae[ad]=ac}};var w=function(af,ae,ag){var ad=af[ae],ac;if(typeof ad=="object"&&ad){if(u.call(ad)==E){for(ac=ad.length;ac--;){P(ad,ac,ag)}}else{m(ad,function(ah){P(ad,ah,ag)})}}return ag.call(af,ae,ad)};V.parse=function(ae,af){var ac,ad;G=0;X=""+ae;ac=W(y());if(y()!="$"){H()}G=X=null;return af&&u.call(af)==U?w((ad={},ad[""]=ac,ad),"",af):ac}}}V.runInContext=j;return V}if(h&&!c){j(i,h)}else{var f=i.JSON,k=i.JSON3,d=false;var g=j(i,(i.JSON3={noConflict:function(){if(!d){d=true;i.JSON=f;i.JSON3=k;f=k=null}return g}}));i.JSON={parse:g.parse,stringify:g.stringify}}if(c){define(function(){return g})}}).call(this);JSON_PIWIK=a})()}if(typeof _paq!=="object"){_paq=[]}if(typeof window.Piwik!=="object"){window.Piwik=(function(){var r,b={},x={},F=document,h=navigator,V=screen,S=window,i=S.performance||S.mozPerformance||S.msPerformance||S.webkitPerformance,t=S.encodeURIComponent,R=S.decodeURIComponent,l=unescape,H=[],D,e,ac=[],m=false;
-function p(aj){try{return R(aj)}catch(ak){return unescape(aj)}}function I(ak){var aj=typeof ak;return aj!=="undefined"}function z(aj){return typeof aj==="function"}function U(aj){return typeof aj==="object"}function w(aj){return typeof aj==="string"||aj instanceof String}function A(ak){if(!ak){return true}var aj;var al=true;for(aj in ak){if(Object.prototype.hasOwnProperty.call(ak,aj)){al=false}}return al}function af(aj){var ak=typeof console;if(ak!=="undefined"&&console&&console.error){console.error(aj)}}function ab(){var ao,an,aq,ak,aj;for(ao=0;ao<arguments.length;ao+=1){aj=null;if(arguments[ao]&&arguments[ao].slice){aj=arguments[ao].slice()}ak=arguments[ao];aq=ak.shift();var ap,al;var am=w(aq)&&aq.indexOf("::")>0;if(am){ap=aq.split("::");al=ap[0];aq=ap[1];if("object"===typeof e[al]&&"function"===typeof e[al][aq]){e[al][aq].apply(e[al],ak)}else{if(aj){ac.push(aj)}}}else{for(an=0;an<H.length;an++){if(w(aq)){al=H[an];var ar=aq.indexOf(".")>0;if(ar){ap=aq.split(".");if(al&&"object"===typeof al[ap[0]]){al=al[ap[0]];
-aq=ap[1]}else{if(aj){ac.push(aj);break}}}if(al[aq]){al[aq].apply(al,ak)}else{var at="The method '"+aq+'\' was not found in "_paq" variable. Please have a look at the Piwik tracker documentation: https://developer.piwik.org/api-reference/tracking-javascript';af(at);if(!ar){throw new TypeError(at)}}if(aq==="addTracker"){break}if(aq==="setTrackerUrl"||aq==="setSiteId"){break}}else{aq.apply(H[an],ak)}}}}}function ai(am,al,ak,aj){if(am.addEventListener){am.addEventListener(al,ak,aj);return true}if(am.attachEvent){return am.attachEvent("on"+al,ak)}am["on"+al]=ak}function n(aj){if(F.readyState==="complete"){aj()}else{if(S.addEventListener){S.addEventListener("load",aj)}else{if(S.attachEvent){S.attachEvent("onload",aj)}}}}function q(am){var aj=false;if(F.attachEvent){aj=F.readyState==="complete"}else{aj=F.readyState!=="loading"}if(aj){am();return}var al;if(F.addEventListener){ai(F,"DOMContentLoaded",function ak(){F.removeEventListener("DOMContentLoaded",ak,false);if(!aj){aj=true;am()}})}else{if(F.attachEvent){F.attachEvent("onreadystatechange",function ak(){if(F.readyState==="complete"){F.detachEvent("onreadystatechange",ak);
-if(!aj){aj=true;am()}}});if(F.documentElement.doScroll&&S===S.top){(function ak(){if(!aj){try{F.documentElement.doScroll("left")}catch(an){setTimeout(ak,0);return}aj=true;am()}}())}}}ai(S,"load",function(){if(!aj){aj=true;am()}},false)}function Y(ak,ap,aq){if(!ak){return""}var aj="",am,al,an,ao;for(am in b){if(Object.prototype.hasOwnProperty.call(b,am)){ao=b[am]&&"function"===typeof b[am][ak];if(ao){al=b[am][ak];an=al(ap||{},aq);if(an){aj+=an}}}}return aj}function ad(){var aj;m=true;Y("unload");if(r){do{aj=new Date()}while(aj.getTimeAlias()<r)}}function o(al,ak){var aj=F.createElement("script");aj.type="text/javascript";aj.src=al;if(aj.readyState){aj.onreadystatechange=function(){var am=this.readyState;if(am==="loaded"||am==="complete"){aj.onreadystatechange=null;ak()}}}else{aj.onload=ak}F.getElementsByTagName("head")[0].appendChild(aj)}function J(){var aj="";try{aj=S.top.document.referrer}catch(al){if(S.parent){try{aj=S.parent.document.referrer}catch(ak){aj=""}}}if(aj===""){aj=F.referrer
-}return aj}function s(aj){var al=new RegExp("^([a-z]+):"),ak=al.exec(aj);return ak?ak[1]:null}function d(aj){var al=new RegExp("^(?:(?:https?|ftp):)/*(?:[^@]+@)?([^:/#]+)"),ak=al.exec(aj);return ak?ak[1]:aj}function ae(ak,aj){ak=String(ak);return ak.lastIndexOf(aj,0)===0}function Q(ak,aj){ak=String(ak);return ak.indexOf(aj,ak.length-aj.length)!==-1}function y(ak,aj){ak=String(ak);return ak.indexOf(aj)!==-1}function g(ak,aj){ak=String(ak);return ak.substr(0,ak.length-aj)}function E(am,al,ao){am=String(am);if(!ao){ao=""}var aj=am.indexOf("#");var ap=am.length;if(aj===-1){aj=ap}var an=am.substr(0,aj);var ak=am.substr(aj,ap-aj);if(an.indexOf("?")===-1){an+="?"}else{if(!Q(an,"?")){an+="&"}}return an+t(al)+"="+t(ao)+ak}function k(ak,al){ak=String(ak);if(ak.indexOf("?"+al+"=")===-1&&ak.indexOf("&"+al+"=")===-1){return ak}var am=ak.indexOf("?");if(am===-1){return ak}var aj=ak.substr(am+1);var aq=ak.substr(0,am);if(aj){var ar="";var au=aj.indexOf("#");if(au!==-1){ar=aj.substr(au+1);aj=aj.substr(0,au)
-}var an;var ap=aj.split("&");var ao=ap.length-1;for(ao;ao>=0;ao--){an=ap[ao].split("=")[0];if(an===al){ap.splice(ao,1)}}var at=ap.join("&");if(at){aq=aq+"?"+at}if(ar){aq+="#"+ar}}return aq}function f(al,ak){var aj="[\\?&#]"+ak+"=([^&#]*)";var an=new RegExp(aj);var am=an.exec(al);return am?R(am[1]):""}function a(aj){if(aj&&String(aj)===aj){return aj.replace(/^\s+|\s+$/g,"")}return aj}function C(aj){return unescape(t(aj))}function ah(az){var al=function(aF,aE){return(aF<<aE)|(aF>>>(32-aE))},aA=function(aH){var aF="",aG,aE;for(aG=7;aG>=0;aG--){aE=(aH>>>(aG*4))&15;aF+=aE.toString(16)}return aF},ao,aC,aB,ak=[],at=1732584193,aq=4023233417,ap=2562383102,an=271733878,am=3285377520,ay,ax,aw,av,au,aD,aj,ar=[];az=C(az);aj=az.length;for(aC=0;aC<aj-3;aC+=4){aB=az.charCodeAt(aC)<<24|az.charCodeAt(aC+1)<<16|az.charCodeAt(aC+2)<<8|az.charCodeAt(aC+3);ar.push(aB)}switch(aj&3){case 0:aC=2147483648;break;case 1:aC=az.charCodeAt(aj-1)<<24|8388608;break;case 2:aC=az.charCodeAt(aj-2)<<24|az.charCodeAt(aj-1)<<16|32768;
-break;case 3:aC=az.charCodeAt(aj-3)<<24|az.charCodeAt(aj-2)<<16|az.charCodeAt(aj-1)<<8|128;break}ar.push(aC);while((ar.length&15)!==14){ar.push(0)}ar.push(aj>>>29);ar.push((aj<<3)&4294967295);for(ao=0;ao<ar.length;ao+=16){for(aC=0;aC<16;aC++){ak[aC]=ar[ao+aC]}for(aC=16;aC<=79;aC++){ak[aC]=al(ak[aC-3]^ak[aC-8]^ak[aC-14]^ak[aC-16],1)}ay=at;ax=aq;aw=ap;av=an;au=am;for(aC=0;aC<=19;aC++){aD=(al(ay,5)+((ax&aw)|(~ax&av))+au+ak[aC]+1518500249)&4294967295;au=av;av=aw;aw=al(ax,30);ax=ay;ay=aD}for(aC=20;aC<=39;aC++){aD=(al(ay,5)+(ax^aw^av)+au+ak[aC]+1859775393)&4294967295;au=av;av=aw;aw=al(ax,30);ax=ay;ay=aD}for(aC=40;aC<=59;aC++){aD=(al(ay,5)+((ax&aw)|(ax&av)|(aw&av))+au+ak[aC]+2400959708)&4294967295;au=av;av=aw;aw=al(ax,30);ax=ay;ay=aD}for(aC=60;aC<=79;aC++){aD=(al(ay,5)+(ax^aw^av)+au+ak[aC]+3395469782)&4294967295;au=av;av=aw;aw=al(ax,30);ax=ay;ay=aD}at=(at+ay)&4294967295;aq=(aq+ax)&4294967295;ap=(ap+aw)&4294967295;an=(an+av)&4294967295;am=(am+au)&4294967295}aD=aA(at)+aA(aq)+aA(ap)+aA(an)+aA(am);
-return aD.toLowerCase()}function X(al,aj,ak){if(!al){al=""}if(!aj){aj=""}if(al==="translate.googleusercontent.com"){if(ak===""){ak=aj}aj=f(aj,"u");al=d(aj)}else{if(al==="cc.bingj.com"||al==="webcache.googleusercontent.com"||al.slice(0,5)==="74.6."){aj=F.links[0].href;al=d(aj)}}return[al,aj,ak]}function K(ak){var aj=ak.length;if(ak.charAt(--aj)==="."){ak=ak.slice(0,aj)}if(ak.slice(0,2)==="*."){ak=ak.slice(1)}if(ak.indexOf("/")!==-1){ak=ak.substr(0,ak.indexOf("/"))}return ak}function ag(ak){ak=ak&&ak.text?ak.text:ak;if(!w(ak)){var aj=F.getElementsByTagName("title");if(aj&&I(aj[0])){ak=aj[0].text}}return ak}function O(aj){if(!aj){return[]}if(!I(aj.children)&&I(aj.childNodes)){return aj.children}if(I(aj.children)){return aj.children}return[]}function T(ak,aj){if(!ak||!aj){return false}if(ak.contains){return ak.contains(aj)}if(ak===aj){return true}if(ak.compareDocumentPosition){return !!(ak.compareDocumentPosition(aj)&16)}return false}function L(al,am){if(al&&al.indexOf){return al.indexOf(am)
-}if(!I(al)||al===null){return -1}if(!al.length){return -1}var aj=al.length;if(aj===0){return -1}var ak=0;while(ak<aj){if(al[ak]===am){return ak}ak++}return -1}function j(al){if(!al){return false}function aj(an,ao){if(S.getComputedStyle){return F.defaultView.getComputedStyle(an,null)[ao]}if(an.currentStyle){return an.currentStyle[ao]}}function am(an){an=an.parentNode;while(an){if(an===F){return true}an=an.parentNode}return false}function ak(ap,aw,an,at,aq,au,ar){var ao=ap.parentNode,av=1;if(!am(ap)){return false}if(9===ao.nodeType){return true}if("0"===aj(ap,"opacity")||"none"===aj(ap,"display")||"hidden"===aj(ap,"visibility")){return false}if(!I(aw)||!I(an)||!I(at)||!I(aq)||!I(au)||!I(ar)){aw=ap.offsetTop;aq=ap.offsetLeft;at=aw+ap.offsetHeight;an=aq+ap.offsetWidth;au=ap.offsetWidth;ar=ap.offsetHeight}if(al===ap&&(0===ar||0===au)&&"hidden"===aj(ap,"overflow")){return false}if(ao){if(("hidden"===aj(ao,"overflow")||"scroll"===aj(ao,"overflow"))){if(aq+av>ao.offsetWidth+ao.scrollLeft||aq+au-av<ao.scrollLeft||aw+av>ao.offsetHeight+ao.scrollTop||aw+ar-av<ao.scrollTop){return false
-}}if(ap.offsetParent===ao){aq+=ao.offsetLeft;aw+=ao.offsetTop}return ak(ao,aw,an,at,aq,au,ar)}return true}return ak(al)}var aa={htmlCollectionToArray:function(al){var aj=[],ak;if(!al||!al.length){return aj}for(ak=0;ak<al.length;ak++){aj.push(al[ak])}return aj},find:function(aj){if(!document.querySelectorAll||!aj){return[]}var ak=document.querySelectorAll(aj);return this.htmlCollectionToArray(ak)},findMultiple:function(al){if(!al||!al.length){return[]}var ak,am;var aj=[];for(ak=0;ak<al.length;ak++){am=this.find(al[ak]);aj=aj.concat(am)}aj=this.makeNodesUnique(aj);return aj},findNodesByTagName:function(ak,aj){if(!ak||!aj||!ak.getElementsByTagName){return[]}var al=ak.getElementsByTagName(aj);return this.htmlCollectionToArray(al)},makeNodesUnique:function(aj){var ao=[].concat(aj);aj.sort(function(aq,ap){if(aq===ap){return 0}var at=L(ao,aq);var ar=L(ao,ap);if(at===ar){return 0}return at>ar?-1:1});if(aj.length<=1){return aj}var ak=0;var am=0;var an=[];var al;al=aj[ak++];while(al){if(al===aj[ak]){am=an.push(ak)
-}al=aj[ak++]||null}while(am--){aj.splice(an[am],1)}return aj},getAttributeValueFromNode:function(an,al){if(!this.hasNodeAttribute(an,al)){return}if(an&&an.getAttribute){return an.getAttribute(al)}if(!an||!an.attributes){return}var am=(typeof an.attributes[al]);if("undefined"===am){return}if(an.attributes[al].value){return an.attributes[al].value}if(an.attributes[al].nodeValue){return an.attributes[al].nodeValue}var ak;var aj=an.attributes;if(!aj){return}for(ak=0;ak<aj.length;ak++){if(aj[ak].nodeName===al){return aj[ak].nodeValue}}return null},hasNodeAttributeWithValue:function(ak,aj){var al=this.getAttributeValueFromNode(ak,aj);return !!al},hasNodeAttribute:function(al,aj){if(al&&al.hasAttribute){return al.hasAttribute(aj)}if(al&&al.attributes){var ak=(typeof al.attributes[aj]);return"undefined"!==ak}return false},hasNodeCssClass:function(al,aj){if(al&&aj&&al.className){var ak=typeof al.className==="string"?al.className.split(" "):[];if(-1!==L(ak,aj)){return true}}return false},findNodesHavingAttribute:function(an,al,aj){if(!aj){aj=[]
-}if(!an||!al){return aj}var am=O(an);if(!am||!am.length){return aj}var ak,ao;for(ak=0;ak<am.length;ak++){ao=am[ak];if(this.hasNodeAttribute(ao,al)){aj.push(ao)}aj=this.findNodesHavingAttribute(ao,al,aj)}return aj},findFirstNodeHavingAttribute:function(al,ak){if(!al||!ak){return}if(this.hasNodeAttribute(al,ak)){return al}var aj=this.findNodesHavingAttribute(al,ak);if(aj&&aj.length){return aj[0]}},findFirstNodeHavingAttributeWithValue:function(am,al){if(!am||!al){return}if(this.hasNodeAttributeWithValue(am,al)){return am}var aj=this.findNodesHavingAttribute(am,al);if(!aj||!aj.length){return}var ak;for(ak=0;ak<aj.length;ak++){if(this.getAttributeValueFromNode(aj[ak],al)){return aj[ak]}}},findNodesHavingCssClass:function(an,am,aj){if(!aj){aj=[]}if(!an||!am){return aj}if(an.getElementsByClassName){var ao=an.getElementsByClassName(am);return this.htmlCollectionToArray(ao)}var al=O(an);if(!al||!al.length){return[]}var ak,ap;for(ak=0;ak<al.length;ak++){ap=al[ak];if(this.hasNodeCssClass(ap,am)){aj.push(ap)
-}aj=this.findNodesHavingCssClass(ap,am,aj)}return aj},findFirstNodeHavingClass:function(al,ak){if(!al||!ak){return}if(this.hasNodeCssClass(al,ak)){return al}var aj=this.findNodesHavingCssClass(al,ak);if(aj&&aj.length){return aj[0]}},isLinkElement:function(ak){if(!ak){return false}var aj=String(ak.nodeName).toLowerCase();var am=["a","area"];var al=L(am,aj);return al!==-1},setAnyAttribute:function(ak,aj,al){if(!ak||!aj){return}if(ak.setAttribute){ak.setAttribute(aj,al)}else{ak[aj]=al}}};var v={CONTENT_ATTR:"data-track-content",CONTENT_CLASS:"piwikTrackContent",CONTENT_NAME_ATTR:"data-content-name",CONTENT_PIECE_ATTR:"data-content-piece",CONTENT_PIECE_CLASS:"piwikContentPiece",CONTENT_TARGET_ATTR:"data-content-target",CONTENT_TARGET_CLASS:"piwikContentTarget",CONTENT_IGNOREINTERACTION_ATTR:"data-content-ignoreinteraction",CONTENT_IGNOREINTERACTION_CLASS:"piwikContentIgnoreInteraction",location:undefined,findContentNodes:function(){var ak="."+this.CONTENT_CLASS;var aj="["+this.CONTENT_ATTR+"]";
-var al=aa.findMultiple([ak,aj]);return al},findContentNodesWithinNode:function(am){if(!am){return[]}var ak=aa.findNodesHavingCssClass(am,this.CONTENT_CLASS);var aj=aa.findNodesHavingAttribute(am,this.CONTENT_ATTR);if(aj&&aj.length){var al;for(al=0;al<aj.length;al++){ak.push(aj[al])}}if(aa.hasNodeAttribute(am,this.CONTENT_ATTR)){ak.push(am)}else{if(aa.hasNodeCssClass(am,this.CONTENT_CLASS)){ak.push(am)}}ak=aa.makeNodesUnique(ak);return ak},findParentContentNode:function(ak){if(!ak){return}var al=ak;var aj=0;while(al&&al!==F&&al.parentNode){if(aa.hasNodeAttribute(al,this.CONTENT_ATTR)){return al}if(aa.hasNodeCssClass(al,this.CONTENT_CLASS)){return al}al=al.parentNode;if(aj>1000){break}aj++}},findPieceNode:function(ak){var aj;aj=aa.findFirstNodeHavingAttribute(ak,this.CONTENT_PIECE_ATTR);if(!aj){aj=aa.findFirstNodeHavingClass(ak,this.CONTENT_PIECE_CLASS)}if(aj){return aj}return ak},findTargetNodeNoDefault:function(aj){if(!aj){return}var ak=aa.findFirstNodeHavingAttributeWithValue(aj,this.CONTENT_TARGET_ATTR);
-if(ak){return ak}ak=aa.findFirstNodeHavingAttribute(aj,this.CONTENT_TARGET_ATTR);if(ak){return ak}ak=aa.findFirstNodeHavingClass(aj,this.CONTENT_TARGET_CLASS);if(ak){return ak}},findTargetNode:function(aj){var ak=this.findTargetNodeNoDefault(aj);if(ak){return ak}return aj},findContentName:function(ak){if(!ak){return}var an=aa.findFirstNodeHavingAttributeWithValue(ak,this.CONTENT_NAME_ATTR);if(an){return aa.getAttributeValueFromNode(an,this.CONTENT_NAME_ATTR)}var aj=this.findContentPiece(ak);if(aj){return this.removeDomainIfIsInLink(aj)}if(aa.hasNodeAttributeWithValue(ak,"title")){return aa.getAttributeValueFromNode(ak,"title")}var al=this.findPieceNode(ak);if(aa.hasNodeAttributeWithValue(al,"title")){return aa.getAttributeValueFromNode(al,"title")}var am=this.findTargetNode(ak);if(aa.hasNodeAttributeWithValue(am,"title")){return aa.getAttributeValueFromNode(am,"title")}},findContentPiece:function(ak){if(!ak){return}var am=aa.findFirstNodeHavingAttributeWithValue(ak,this.CONTENT_PIECE_ATTR);
-if(am){return aa.getAttributeValueFromNode(am,this.CONTENT_PIECE_ATTR)}var aj=this.findPieceNode(ak);var al=this.findMediaUrlInNode(aj);if(al){return this.toAbsoluteUrl(al)}},findContentTarget:function(al){if(!al){return}var am=this.findTargetNode(al);if(aa.hasNodeAttributeWithValue(am,this.CONTENT_TARGET_ATTR)){return aa.getAttributeValueFromNode(am,this.CONTENT_TARGET_ATTR)}var ak;if(aa.hasNodeAttributeWithValue(am,"href")){ak=aa.getAttributeValueFromNode(am,"href");return this.toAbsoluteUrl(ak)}var aj=this.findPieceNode(al);if(aa.hasNodeAttributeWithValue(aj,"href")){ak=aa.getAttributeValueFromNode(aj,"href");return this.toAbsoluteUrl(ak)}},isSameDomain:function(aj){if(!aj||!aj.indexOf){return false}if(0===aj.indexOf(this.getLocation().origin)){return true}var ak=aj.indexOf(this.getLocation().host);if(8>=ak&&0<=ak){return true}return false},removeDomainIfIsInLink:function(al){var ak="^https?://[^/]+";var aj="^.*//[^/]+";if(al&&al.search&&-1!==al.search(new RegExp(ak))&&this.isSameDomain(al)){al=al.replace(new RegExp(aj),"");
-if(!al){al="/"}}return al},findMediaUrlInNode:function(an){if(!an){return}var al=["img","embed","video","audio"];var aj=an.nodeName.toLowerCase();if(-1!==L(al,aj)&&aa.findFirstNodeHavingAttributeWithValue(an,"src")){var am=aa.findFirstNodeHavingAttributeWithValue(an,"src");return aa.getAttributeValueFromNode(am,"src")}if(aj==="object"&&aa.hasNodeAttributeWithValue(an,"data")){return aa.getAttributeValueFromNode(an,"data")}if(aj==="object"){var ao=aa.findNodesByTagName(an,"param");if(ao&&ao.length){var ak;for(ak=0;ak<ao.length;ak++){if("movie"===aa.getAttributeValueFromNode(ao[ak],"name")&&aa.hasNodeAttributeWithValue(ao[ak],"value")){return aa.getAttributeValueFromNode(ao[ak],"value")}}}var ap=aa.findNodesByTagName(an,"embed");if(ap&&ap.length){return this.findMediaUrlInNode(ap[0])}}},trim:function(aj){return a(aj)},isOrWasNodeInViewport:function(ao){if(!ao||!ao.getBoundingClientRect||ao.nodeType!==1){return true}var an=ao.getBoundingClientRect();var am=F.documentElement||{};var al=an.top<0;
-if(al&&ao.offsetTop){al=(ao.offsetTop+an.height)>0}var ak=am.clientWidth;if(S.innerWidth&&ak>S.innerWidth){ak=S.innerWidth}var aj=am.clientHeight;if(S.innerHeight&&aj>S.innerHeight){aj=S.innerHeight}return((an.bottom>0||al)&&an.right>0&&an.left<ak&&((an.top<aj)||al))},isNodeVisible:function(ak){var aj=j(ak);var al=this.isOrWasNodeInViewport(ak);return aj&&al},buildInteractionRequestParams:function(aj,ak,al,am){var an="";if(aj){an+="c_i="+t(aj)}if(ak){if(an){an+="&"}an+="c_n="+t(ak)}if(al){if(an){an+="&"}an+="c_p="+t(al)}if(am){if(an){an+="&"}an+="c_t="+t(am)}return an},buildImpressionRequestParams:function(aj,ak,al){var am="c_n="+t(aj)+"&c_p="+t(ak);if(al){am+="&c_t="+t(al)}return am},buildContentBlock:function(al){if(!al){return}var aj=this.findContentName(al);var ak=this.findContentPiece(al);var am=this.findContentTarget(al);aj=this.trim(aj);ak=this.trim(ak);am=this.trim(am);return{name:aj||"Unknown",piece:ak||"Unknown",target:am||""}},collectContent:function(am){if(!am||!am.length){return[]
-}var al=[];var aj,ak;for(aj=0;aj<am.length;aj++){ak=this.buildContentBlock(am[aj]);if(I(ak)){al.push(ak)}}return al},setLocation:function(aj){this.location=aj},getLocation:function(){var aj=this.location||S.location;if(!aj.origin){aj.origin=aj.protocol+"//"+aj.hostname+(aj.port?":"+aj.port:"")}return aj},toAbsoluteUrl:function(ak){if((!ak||String(ak)!==ak)&&ak!==""){return ak}if(""===ak){return this.getLocation().href}if(ak.search(/^\/\//)!==-1){return this.getLocation().protocol+ak}if(ak.search(/:\/\//)!==-1){return ak}if(0===ak.indexOf("#")){return this.getLocation().origin+this.getLocation().pathname+ak}if(0===ak.indexOf("?")){return this.getLocation().origin+this.getLocation().pathname+ak}if(0===ak.search("^[a-zA-Z]{2,11}:")){return ak}if(ak.search(/^\//)!==-1){return this.getLocation().origin+ak}var aj="(.*/)";var al=this.getLocation().origin+this.getLocation().pathname.match(new RegExp(aj))[0];return al+ak},isUrlToCurrentDomain:function(ak){var al=this.toAbsoluteUrl(ak);if(!al){return false
-}var aj=this.getLocation().origin;if(aj===al){return true}if(0===String(al).indexOf(aj)){if(":"===String(al).substr(aj.length,1)){return false}return true}return false},setHrefAttribute:function(ak,aj){if(!ak||!aj){return}aa.setAnyAttribute(ak,"href",aj)},shouldIgnoreInteraction:function(al){var ak=aa.hasNodeAttribute(al,this.CONTENT_IGNOREINTERACTION_ATTR);var aj=aa.hasNodeCssClass(al,this.CONTENT_IGNOREINTERACTION_CLASS);return ak||aj}};function N(ak,an){if(an){return an}ak=v.toAbsoluteUrl(ak);if(y(ak,"?")){var am=ak.indexOf("?");ak=ak.slice(0,am)}if(Q(ak,"piwik.php")){ak=g(ak,"piwik.php".length)}else{if(Q(ak,".php")){var aj=ak.lastIndexOf("/");var al=1;ak=ak.slice(0,aj+al)}}if(Q(ak,"/js/")){ak=g(ak,"js/".length)}return ak}function M(ap){var ar="Piwik_Overlay";var ak=new RegExp("index\\.php\\?module=Overlay&action=startOverlaySession&idSite=([0-9]+)&period=([^&]+)&date=([^&]+)(&segment=.*)?$");var al=ak.exec(F.referrer);if(al){var an=al[1];if(an!==String(ap)){return false}var ao=al[2],aj=al[3],am=al[4];
-if(!am){am=""}else{if(am.indexOf("&segment=")===0){am=am.substr("&segment=".length)}}S.name=ar+"###"+ao+"###"+aj+"###"+am}var aq=S.name.split("###");return aq.length===4&&aq[0]===ar}function W(ak,aq,am){var ap=S.name.split("###"),ao=ap[1],aj=ap[2],an=ap[3],al=N(ak,aq);o(al+"plugins/Overlay/client/client.js?v=1",function(){Piwik_Overlay_Client.initialize(al,am,ao,aj,an)})}function u(){var al;try{al=S.frameElement}catch(ak){return true}if(I(al)){return(al&&String(al.nodeName).toLowerCase()==="iframe")?true:false}try{return S.self!==S.top}catch(aj){return true}}function P(b2,bX){var bw=this,bS=X(F.domain,S.location.href,J()),cE=K(bS[0]),bB=p(bS[1]),bd=p(bS[2]),cC=false,b6="GET",cR=b6,aB="application/x-www-form-urlencoded; charset=UTF-8",cl=aB,ax=b2||"",bv="",cI="",bU=bX||"",bo="",bC="",aW,a9="",cO=["7z","aac","apk","arc","arj","asf","asx","avi","azw3","bin","csv","deb","dmg","doc","docx","epub","exe","flv","gif","gz","gzip","hqx","ibooks","jar","jpg","jpeg","js","mobi","mp2","mp3","mp4","mpg","mpeg","mov","movie","msi","msp","odb","odf","odg","ods","odt","ogg","ogv","pdf","phps","png","ppt","pptx","qt","qtm","ra","ram","rar","rpm","sea","sit","tar","tbz","tbz2","bz","bz2","tgz","torrent","txt","wav","wma","wmv","wpd","xls","xlsx","xml","z","zip"],aq=[cE],bp=[],bz=[],a0=[],bx=500,cu,aX,bF,bD,aj,cf=["pk_campaign","piwik_campaign","utm_campaign","utm_source","utm_medium"],bu=["pk_kwd","piwik_kwd","utm_term"],ba="_pk_",ap="pk_vid",aR=180,cG,bf,bG=false,bb=false,cA,a5,bl,cv=33955200000,cd=1800000,cN=15768000000,aU=true,cb=0,bE=false,aI=false,bZ,bK={},ca={},bc={},bj=200,cJ={},cP={},bY=[],b3=false,co=false,ak=false,cQ=false,cx=false,aG=false,a4=u(),cH=null,b0,aJ,bq,bV=ah,be,aD,cg=0,bk=["id","ses","cvar","ref"];
-try{a9=F.title}catch(cm){a9=""}function cU(c5,c3,c2,c4,c1,c0){if(bb){return}var cZ;if(c2){cZ=new Date();cZ.setTime(cZ.getTime()+c2)}F.cookie=c5+"="+t(c3)+(c2?";expires="+cZ.toGMTString():"")+";path="+(c4||"/")+(c1?";domain="+c1:"")+(c0?";secure":"")}function aw(c1){if(bb){return 0}var cZ=new RegExp("(^|;)[ ]*"+c1+"=([^;]*)"),c0=cZ.exec(F.cookie);return c0?R(c0[2]):0}function bQ(cZ){var c0;cZ=k(cZ,ap);if(bD){c0=new RegExp("#.*");return cZ.replace(c0,"")}return cZ}function bJ(c1,cZ){var c2=s(cZ),c0;if(c2){return cZ}if(cZ.slice(0,1)==="/"){return s(c1)+"://"+d(c1)+cZ}c1=bQ(c1);c0=c1.indexOf("?");if(c0>=0){c1=c1.slice(0,c0)}c0=c1.lastIndexOf("/");if(c0!==c1.length-1){c1=c1.slice(0,c0+1)}return c1+cZ}function ct(c1,cZ){var c0;c1=String(c1).toLowerCase();cZ=String(cZ).toLowerCase();if(c1===cZ){return true}if(cZ.slice(0,1)==="."){if(c1===cZ.slice(1)){return true}c0=c1.length-cZ.length;if((c0>0)&&(c1.slice(c0)===cZ)){return true}}return false}function b9(cZ){var c0=document.createElement("a");if(cZ.indexOf("//")!==0&&cZ.indexOf("http")!==0){if(cZ.indexOf("*")===0){cZ=cZ.substr(1)
-}if(cZ.indexOf(".")===0){cZ=cZ.substr(1)}cZ="http://"+cZ}c0.href=v.toAbsoluteUrl(cZ);if(c0.pathname){return c0.pathname}return""}function aV(c0,cZ){if(!ae(cZ,"/")){cZ="/"+cZ}if(!ae(c0,"/")){c0="/"+c0}var c1=(cZ==="/"||cZ==="/*");if(c1){return true}if(c0===cZ){return true}cZ=String(cZ).toLowerCase();c0=String(c0).toLowerCase();if(Q(cZ,"*")){cZ=cZ.slice(0,-1);c1=(!cZ||cZ==="/");if(c1){return true}if(c0===cZ){return true}return c0.indexOf(cZ)===0}if(!Q(c0,"/")){c0+="/"}if(!Q(cZ,"/")){cZ+="/"}return c0.indexOf(cZ)===0}function am(c3,c5){var c0,cZ,c1,c2,c4;for(c0=0;c0<aq.length;c0++){c2=K(aq[c0]);c4=b9(aq[c0]);if(ct(c3,c2)&&aV(c5,c4)){return true}}return false}function aN(c2){var c0,cZ,c1;for(c0=0;c0<aq.length;c0++){cZ=K(aq[c0].toLowerCase());if(c2===cZ){return true}if(cZ.slice(0,1)==="."){if(c2===cZ.slice(1)){return true}c1=c2.length-cZ.length;if((c1>0)&&(c2.slice(c1)===cZ)){return true}}}return false}function ce(cZ,c1){cZ=cZ.replace("send_image=0","send_image=1");var c0=new Image(1,1);c0.onload=function(){D=0;
-if(typeof c1==="function"){c1()}};c0.src=ax+(ax.indexOf("?")<0?"?":"&")+cZ}function aY(c0){var c4="object"===typeof h&&"function"===typeof h.sendBeacon&&"function"===typeof Blob;if(!c4){return false}var c3={type:"application/x-www-form-urlencoded; charset=UTF-8"};var c2=false;try{var cZ=new Blob([c0],c3);c2=h.sendBeacon(ax,cZ)}catch(c1){return false}return c2}function cM(c0,c1,cZ){if(!I(cZ)||null===cZ){cZ=true}if(m&&aY(c0)){return}setTimeout(function(){if(m&&aY(c0)){return}var c4;try{var c3=S.XMLHttpRequest?new S.XMLHttpRequest():S.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):null;c3.open("POST",ax,true);c3.onreadystatechange=function(){if(this.readyState===4&&!(this.status>=200&&this.status<300)){var c5=m&&aY(c0);if(!c5&&cZ){ce(c0,c1)}}else{if(this.readyState===4&&(typeof c1==="function")){c1()}}};c3.setRequestHeader("Content-Type",cl);c3.send(c0)}catch(c2){c4=m&&aY(c0);if(!c4&&cZ){ce(c0,c1)}}},50)}function b4(c0){var cZ=new Date();var c1=cZ.getTime()+c0;if(!r||c1>r){r=c1}}function cc(cZ){if(b0||!aX){return
-}b0=setTimeout(function c0(){b0=null;if(!a4){a4=(!F.hasFocus||F.hasFocus())}if(!a4){cc(aX);return}if(bF()){return}var c1=new Date(),c2=aX-(c1.getTime()-cH);c2=Math.min(aX,c2);cc(c2)},cZ||aX)}function by(){if(!b0){return}clearTimeout(b0);b0=null}function a2(){a4=true;if(bF()){return}cc()}function ar(){by()}function cW(){if(aG||!aX){return}aG=true;ai(S,"focus",a2);ai(S,"blur",ar);cc()}function cp(c3){var c0=new Date();var cZ=c0.getTime();cH=cZ;if(co&&cZ<co){var c1=co-cZ;setTimeout(c3,c1);b4(c1+50);co+=50;return}if(co===false){var c2=800;co=cZ+c2}c3()}function bt(c0,cZ,c1){if(!cA&&c0){cp(function(){if(cR==="POST"||String(c0).length>2000){cM(c0,c1)}else{ce(c0,c1)}b4(cZ)})}if(!aG){cW()}else{cc()}}function b8(cZ){if(cA){return false}return(cZ&&cZ.length)}function cV(c1,cZ){if(!b8(c1)){return}var c0='{"requests":["?'+c1.join('","?')+'"]}';cp(function(){cM(c0,null,false);b4(cZ)})}function aL(cZ){return ba+cZ+"."+bU+"."+be}function bT(){if(bb){return"0"}if(!I(h.cookieEnabled)){var cZ=aL("testcookie");
-cU(cZ,"1");return aw(cZ)==="1"?"1":"0"}return h.cookieEnabled?"1":"0"}function a8(){be=bV((cG||cE)+(bf||"/")).slice(0,4)}function bL(){var c0=aL("cvar"),cZ=aw(c0);if(cZ.length){cZ=JSON_PIWIK.parse(cZ);if(U(cZ)){return cZ}}return{}}function cq(){if(aI===false){aI=bL()}}function cB(){return bV((h.userAgent||"")+(h.platform||"")+JSON_PIWIK.stringify(cP)+(new Date()).getTime()+Math.random()).slice(0,16)}function at(){return bV((h.userAgent||"")+(h.platform||"")+JSON_PIWIK.stringify(cP)).slice(0,6)}function a6(){return Math.floor((new Date()).getTime()/1000)}function aC(){var c0=a6();var c1=at();var cZ=String(c0)+c1;return cZ}function cL(c1){c1=String(c1);var c4=at();var c2=c4.length;var c3=c1.substr(-1*c2,c2);var c0=parseInt(c1.substr(0,c1.length-c2),10);if(c0&&c3&&c3===c4){var cZ=a6();if(aR<=0){return true}if(cZ>=c0&&cZ<=(c0+aR)){return true}}return false}function cX(cZ){if(!cx){return""}var c3=f(cZ,ap);if(!c3){return""}c3=String(c3);var c1=new RegExp("^[a-zA-Z0-9]+$");if(c3.length===32&&c1.test(c3)){var c0=c3.substr(16,32);
-if(cL(c0)){var c2=c3.substr(0,16);return c2}}return""}function cy(){if(!bC){bC=cX(bB)}var c1=new Date(),cZ=Math.round(c1.getTime()/1000),c0=aL("id"),c4=aw(c0),c3,c2;if(c4){c3=c4.split(".");c3.unshift("0");if(bC.length){c3[1]=bC}return c3}if(bC.length){c2=bC}else{if("0"===bT()){c2=""}else{c2=cB()}}c3=["1",c2,cZ,0,cZ,"",""];return c3}function aP(){var c6=cy(),c2=c6[0],c3=c6[1],c0=c6[2],cZ=c6[3],c4=c6[4],c1=c6[5];if(!I(c6[6])){c6[6]=""}var c5=c6[6];return{newVisitor:c2,uuid:c3,createTs:c0,visitCount:cZ,currentVisitTs:c4,lastVisitTs:c1,lastEcommerceOrderTs:c5}}function aA(){var c2=new Date(),c0=c2.getTime(),c3=aP().createTs;var cZ=parseInt(c3,10);var c1=(cZ*1000)+cv-c0;return c1}function aE(cZ){if(!bU){return}var c1=new Date(),c0=Math.round(c1.getTime()/1000);if(!I(cZ)){cZ=aP()}var c2=cZ.uuid+"."+cZ.createTs+"."+cZ.visitCount+"."+c0+"."+cZ.lastVisitTs+"."+cZ.lastEcommerceOrderTs;cU(aL("id"),c2,aA(),bf,cG,bG)}function bA(){var cZ=aw(aL("ref"));if(cZ.length){try{cZ=JSON_PIWIK.parse(cZ);if(U(cZ)){return cZ
-}}catch(c0){}}return["","",0,""]}function bM(c1,c0,cZ){cU(c1,"",-86400,c0,cZ)}function bm(c0){var cZ="testvalue";cU("test",cZ,10000,null,c0);if(aw("test")===cZ){bM("test",null,c0);return true}return false}function ay(){var c0=bb;bb=false;var cZ,c1;for(cZ=0;cZ<bk.length;cZ++){c1=aL(bk[cZ]);if(0!==aw(c1)){bM(c1,bf,cG)}}bb=c0}function bR(cZ){bU=cZ;aE()}function cY(c3){if(!c3||!U(c3)){return}var c2=[];var c1;for(c1 in c3){if(Object.prototype.hasOwnProperty.call(c3,c1)){c2.push(c1)}}var c4={};c2.sort();var cZ=c2.length;var c0;for(c0=0;c0<cZ;c0++){c4[c2[c0]]=c3[c2[c0]]}return c4}function b1(){cU(aL("ses"),"*",cd,bf,cG,bG)}function a7(){var c2="";var c0="abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";var c1=c0.length;var cZ;for(cZ=0;cZ<6;cZ++){c2+=c0.charAt(Math.floor(Math.random()*c1))}return c2}function ch(c1,dm,dn,c2){var dl,c0=new Date(),c9=Math.round(c0.getTime()/1000),c6,dk,c3=1024,dt,da,di=aI,c4=aL("ses"),dg=aL("ref"),dd=aL("cvar"),de=aw(c4),dj=bA(),dq=aW||bB,c7,cZ;if(bb){ay()
-}if(cA){return""}var df=aP();if(!I(c2)){c2=""}var dc=F.characterSet||F.charset;if(!dc||dc.toLowerCase()==="utf-8"){dc=null}c7=dj[0];cZ=dj[1];c6=dj[2];dk=dj[3];if(!de){var dp=cd/1000;if(!df.lastVisitTs||(c9-df.lastVisitTs)>dp){df.visitCount++;df.lastVisitTs=df.currentVisitTs}if(!bl||!c7.length){for(dl in cf){if(Object.prototype.hasOwnProperty.call(cf,dl)){c7=f(dq,cf[dl]);if(c7.length){break}}}for(dl in bu){if(Object.prototype.hasOwnProperty.call(bu,dl)){cZ=f(dq,bu[dl]);if(cZ.length){break}}}}dt=d(bd);da=dk.length?d(dk):"";if(dt.length&&!aN(dt)&&(!bl||!da.length||aN(da))){dk=bd}if(dk.length||c7.length){c6=c9;dj=[c7,cZ,c6,bQ(dk.slice(0,c3))];cU(dg,JSON_PIWIK.stringify(dj),cN,bf,cG)}}c1+="&idsite="+bU+"&rec=1&r="+String(Math.random()).slice(2,8)+"&h="+c0.getHours()+"&m="+c0.getMinutes()+"&s="+c0.getSeconds()+"&url="+t(bQ(dq))+(bd.length?"&urlref="+t(bQ(bd)):"")+((bo&&bo.length)?"&uid="+t(bo):"")+"&_id="+df.uuid+"&_idts="+df.createTs+"&_idvc="+df.visitCount+"&_idn="+df.newVisitor+(c7.length?"&_rcn="+t(c7):"")+(cZ.length?"&_rck="+t(cZ):"")+"&_refts="+c6+"&_viewts="+df.lastVisitTs+(String(df.lastEcommerceOrderTs).length?"&_ects="+df.lastEcommerceOrderTs:"")+(String(dk).length?"&_ref="+t(bQ(dk.slice(0,c3))):"")+(dc?"&cs="+t(dc):"")+"&send_image=0";
-for(dl in cP){if(Object.prototype.hasOwnProperty.call(cP,dl)){c1+="&"+dl+"="+cP[dl]}}var ds=[];if(dm){for(dl in dm){if(Object.prototype.hasOwnProperty.call(dm,dl)&&/^dimension\d+$/.test(dl)){var c5=dl.replace("dimension","");ds.push(parseInt(c5,10));ds.push(String(c5));c1+="&"+dl+"="+dm[dl];delete dm[dl]}}}if(dm&&A(dm)){dm=null}for(dl in bc){if(Object.prototype.hasOwnProperty.call(bc,dl)){var db=(-1===L(ds,dl));if(db){c1+="&dimension"+dl+"="+bc[dl]}}}if(dm){c1+="&data="+t(JSON_PIWIK.stringify(dm))}else{if(aj){c1+="&data="+t(JSON_PIWIK.stringify(aj))}}function c8(du,dv){var dw=JSON_PIWIK.stringify(du);if(dw.length>2){return"&"+dv+"="+t(dw)}return""}var dr=cY(bK);var dh=cY(ca);c1+=c8(dr,"cvar");c1+=c8(dh,"e_cvar");if(aI){c1+=c8(aI,"_cvar");for(dl in di){if(Object.prototype.hasOwnProperty.call(di,dl)){if(aI[dl][0]===""||aI[dl][1]===""){delete aI[dl]}}}if(bE){cU(dd,JSON_PIWIK.stringify(aI),cd,bf,cG)}}if(aU){if(cb){c1+="&gt_ms="+cb}else{if(i&&i.timing&&i.timing.requestStart&&i.timing.responseEnd){c1+="&gt_ms="+(i.timing.responseEnd-i.timing.requestStart)
-}}}if(aD){c1+="&pv_id="+aD}df.lastEcommerceOrderTs=I(c2)&&String(c2).length?c2:df.lastEcommerceOrderTs;aE(df);b1();c1+=Y(dn,{tracker:bw,request:c1});if(cI.length){c1+="&"+cI}if(z(bZ)){c1=bZ(c1)}return c1}bF=function aZ(){var cZ=new Date();if(cH+aX<=cZ.getTime()){var c0=ch("ping=1",null,"ping");bt(c0,bx);return true}return false};function bg(c2,c1,c7,c3,cZ,da){var c5="idgoal=0",c6,c0=new Date(),c8=[],c9,c4=String(c2).length;if(c4){c5+="&ec_id="+t(c2);c6=Math.round(c0.getTime()/1000)}c5+="&revenue="+c1;if(String(c7).length){c5+="&ec_st="+c7}if(String(c3).length){c5+="&ec_tx="+c3}if(String(cZ).length){c5+="&ec_sh="+cZ}if(String(da).length){c5+="&ec_dt="+da}if(cJ){for(c9 in cJ){if(Object.prototype.hasOwnProperty.call(cJ,c9)){if(!I(cJ[c9][1])){cJ[c9][1]=""}if(!I(cJ[c9][2])){cJ[c9][2]=""}if(!I(cJ[c9][3])||String(cJ[c9][3]).length===0){cJ[c9][3]=0}if(!I(cJ[c9][4])||String(cJ[c9][4]).length===0){cJ[c9][4]=1}c8.push(cJ[c9])}}c5+="&ec_items="+t(JSON_PIWIK.stringify(c8))}c5=ch(c5,aj,"ecommerce",c6);
-bt(c5,bx);if(c4){cJ={}}}function bN(cZ,c3,c2,c1,c0,c4){if(String(cZ).length&&I(c3)){bg(cZ,c3,c2,c1,c0,c4)}}function bi(cZ){if(I(cZ)){bg("",cZ,"","","","")}}function bO(c0,c2,c1){aD=a7();var cZ=ch("action_name="+t(ag(c0||a9)),c2,"log");bt(cZ,bx,c1)}function aS(c1,c0){var c2,cZ="(^| )(piwik[_-]"+c0;if(c1){for(c2=0;c2<c1.length;c2++){cZ+="|"+c1[c2]}}cZ+=")( |$)";return new RegExp(cZ)}function aM(cZ){return(ax&&cZ&&0===String(cZ).indexOf(ax))}function ci(c3,cZ,c4,c0){if(aM(cZ)){return 0}var c2=aS(bz,"download"),c1=aS(a0,"link"),c5=new RegExp("\\.("+cO.join("|")+")([?&#]|$)","i");if(c1.test(c3)){return"link"}if(c0||c2.test(c3)||c5.test(cZ)){return"download"}if(c4){return 0}return"link"}function ao(c0){var cZ;cZ=c0.parentNode;while(cZ!==null&&I(cZ)){if(aa.isLinkElement(c0)){break}c0=cZ;cZ=c0.parentNode}return c0}function cT(c4){c4=ao(c4);if(!aa.hasNodeAttribute(c4,"href")){return}if(!I(c4.href)){return}var c3=aa.getAttributeValueFromNode(c4,"href");if(aM(c3)){return}var c0=c4.pathname||b9(c4.href);
-var c5=c4.hostname||d(c4.href);var c6=c5.toLowerCase();var c1=c4.href.replace(c5,c6);var c2=new RegExp("^(javascript|vbscript|jscript|mocha|livescript|ecmascript|mailto|tel):","i");if(!c2.test(c1)){var cZ=ci(c4.className,c1,am(c6,c0),aa.hasNodeAttribute(c4,"download"));if(cZ){return{type:cZ,href:c1}}}}function aH(cZ,c0,c1,c2){var c3=v.buildInteractionRequestParams(cZ,c0,c1,c2);if(!c3){return}return ch(c3,null,"contentInteraction")}function cw(c1,c2,c6,cZ,c0){if(!I(c1)){return}if(aM(c1)){return c1}var c4=v.toAbsoluteUrl(c1);var c3="redirecturl="+t(c4)+"&";c3+=aH(c2,c6,cZ,(c0||c1));var c5="&";if(ax.indexOf("?")<0){c5="?"}return ax+c5+c3}function a3(cZ,c0){if(!cZ||!c0){return false}var c1=v.findTargetNode(cZ);if(v.shouldIgnoreInteraction(c1)){return false}c1=v.findTargetNodeNoDefault(cZ);if(c1&&!T(c1,c0)){return false}return true}function cj(c1,c0,c3){if(!c1){return}var cZ=v.findParentContentNode(c1);if(!cZ){return}if(!a3(cZ,c1)){return}var c2=v.buildContentBlock(cZ);if(!c2){return}if(!c2.target&&c3){c2.target=c3
-}return v.buildInteractionRequestParams(c0,c2.name,c2.piece,c2.target)}function aO(c0){if(!bY||!bY.length){return false}var cZ,c1;for(cZ=0;cZ<bY.length;cZ++){c1=bY[cZ];if(c1&&c1.name===c0.name&&c1.piece===c0.piece&&c1.target===c0.target){return true}}return false}function bs(c2){if(!c2){return false}var c5=v.findTargetNode(c2);if(!c5||v.shouldIgnoreInteraction(c5)){return false}var c6=cT(c5);if(cQ&&c6&&c6.type){return false}if(aa.isLinkElement(c5)&&aa.hasNodeAttributeWithValue(c5,"href")){var cZ=String(aa.getAttributeValueFromNode(c5,"href"));if(0===cZ.indexOf("#")){return false}if(aM(cZ)){return true}if(!v.isUrlToCurrentDomain(cZ)){return false}var c3=v.buildContentBlock(c2);if(!c3){return}var c1=c3.name;var c7=c3.piece;var c4=c3.target;if(!aa.hasNodeAttributeWithValue(c5,v.CONTENT_TARGET_ATTR)||c5.wasContentTargetAttrReplaced){c5.wasContentTargetAttrReplaced=true;c4=v.toAbsoluteUrl(cZ);aa.setAnyAttribute(c5,v.CONTENT_TARGET_ATTR,c4)}var c0=cw(cZ,"click",c1,c7,c4);v.setHrefAttribute(c5,c0);
-return true}return false}function aF(c0){if(!c0||!c0.length){return}var cZ;for(cZ=0;cZ<c0.length;cZ++){bs(c0[cZ])}}function aQ(cZ){return function(c0){if(!cZ){return}var c3=v.findParentContentNode(cZ);var c4;if(c0){c4=c0.target||c0.srcElement}if(!c4){c4=cZ}if(!a3(c3,c4)){return}b4(bx);if(aa.isLinkElement(cZ)&&aa.hasNodeAttributeWithValue(cZ,"href")&&aa.hasNodeAttributeWithValue(cZ,v.CONTENT_TARGET_ATTR)){var c1=aa.getAttributeValueFromNode(cZ,"href");if(!aM(c1)&&cZ.wasContentTargetAttrReplaced){aa.setAnyAttribute(cZ,v.CONTENT_TARGET_ATTR,"")}}var c8=cT(cZ);if(ak&&c8&&c8.type){return c8.type}if(bs(c3)){return"href"}var c5=v.buildContentBlock(c3);if(!c5){return}var c2=c5.name;var c9=c5.piece;var c7=c5.target;var c6=aH("click",c2,c9,c7);bt(c6,bx);return c6}}function bP(c1){if(!c1||!c1.length){return}var cZ,c0;for(cZ=0;cZ<c1.length;cZ++){c0=v.findTargetNode(c1[cZ]);if(c0&&!c0.contentInteractionTrackingSetupDone){c0.contentInteractionTrackingSetupDone=true;ai(c0,"click",aQ(c0))}}}function bn(c1,c2){if(!c1||!c1.length){return[]
-}var cZ,c0;for(cZ=0;cZ<c1.length;cZ++){if(aO(c1[cZ])){c1.splice(cZ,1);cZ--}else{bY.push(c1[cZ])}}if(!c1||!c1.length){return[]}aF(c2);bP(c2);var c3=[];for(cZ=0;cZ<c1.length;cZ++){c0=ch(v.buildImpressionRequestParams(c1[cZ].name,c1[cZ].piece,c1[cZ].target),undefined,"contentImpressions");if(c0){c3.push(c0)}}return c3}function cn(c0){var cZ=v.collectContent(c0);return bn(cZ,c0)}function a1(c0){if(!c0||!c0.length){return[]}var cZ;for(cZ=0;cZ<c0.length;cZ++){if(!v.isNodeVisible(c0[cZ])){c0.splice(cZ,1);cZ--}}if(!c0||!c0.length){return[]}return cn(c0)}function az(c1,cZ,c0){var c2=v.buildImpressionRequestParams(c1,cZ,c0);return ch(c2,null,"contentImpression")}function cS(c2,c0){if(!c2){return}var cZ=v.findParentContentNode(c2);var c1=v.buildContentBlock(cZ);if(!c1){return}if(!c0){c0="Unknown"}return aH(c0,c1.name,c1.piece,c1.target)}function cz(c0,c2,cZ,c1){return"e_c="+t(c0)+"&e_a="+t(c2)+(I(cZ)?"&e_n="+t(cZ):"")+(I(c1)?"&e_v="+t(c1):"")}function an(c1,c3,cZ,c2,c5,c4){if(a(String(c1)).length===0||a(String(c3)).length===0){af("Error while logging event: Parameters `category` and `action` must not be empty or filled with whitespaces");
-return false}var c0=ch(cz(c1,c3,cZ,c2),c5,"event");bt(c0,bx,c4)}function bW(cZ,c2,c0,c3){var c1=ch("search="+t(cZ)+(c2?"&search_cat="+t(c2):"")+(I(c0)?"&search_count="+c0:""),c3,"sitesearch");bt(c1,bx)}function cD(cZ,c2,c1){var c0=ch("idgoal="+cZ+(c2?"&revenue="+c2:""),c1,"goal");bt(c0,bx)}function cK(c2,cZ,c6,c5,c1){var c4=cZ+"="+t(bQ(c2));var c0=cj(c1,"click",c2);if(c0){c4+="&"+c0}var c3=ch(c4,c6,"link");bt(c3,bx,c5)}function bI(c0,cZ){if(c0!==""){return c0+cZ.charAt(0).toUpperCase()+cZ.slice(1)}return cZ}function b5(c4){var c3,cZ,c2=["","webkit","ms","moz"],c1;if(!a5){for(cZ=0;cZ<c2.length;cZ++){c1=c2[cZ];if(Object.prototype.hasOwnProperty.call(F,bI(c1,"hidden"))){if(F[bI(c1,"visibilityState")]==="prerender"){c3=true}break}}}if(c3){ai(F,c1+"visibilitychange",function c0(){F.removeEventListener(c1+"visibilitychange",c0,false);c4()});return}c4()}function bh(){var c0=aP().uuid;var cZ=aC();return c0+cZ}function b7(cZ){if(!cZ){return}if(!aa.hasNodeAttribute(cZ,"href")){return}var c0=aa.getAttributeValueFromNode(cZ,"href");
-if(!c0||aM(c0)){return}c0=k(c0,ap);if(c0.indexOf("?")>0){c0+="&"}else{c0+="?"}var c1=bh();c0=E(c0,ap,c1);aa.setAnyAttribute(cZ,"href",c0)}function au(c2){var c3=aa.getAttributeValueFromNode(c2,"href");if(!c3){return false}c3=String(c3);var c0=c3.indexOf("//")===0||c3.indexOf("http://")===0||c3.indexOf("https://")===0;if(!c0){return false}var cZ=c2.pathname||b9(c2.href);var c1=(c2.hostname||d(c2.href)).toLowerCase();if(am(c1,cZ)){if(!ct(cE,K(c1))){return true}return false}return false}function cs(cZ){var c0=cT(cZ);if(c0&&c0.type){c0.href=p(c0.href);cK(c0.href,c0.type,undefined,null,cZ);return}if(cx){cZ=ao(cZ);if(au(cZ)){b7(cZ)}}}function ck(){return F.all&&!F.addEventListener}function cF(cZ){var c1=cZ.which;var c0=(typeof cZ.button);if(!c1&&c0!=="undefined"){if(ck()){if(cZ.button&1){c1=1}else{if(cZ.button&2){c1=3}else{if(cZ.button&4){c1=2}}}}else{if(cZ.button===0||cZ.button==="0"){c1=1}else{if(cZ.button&1){c1=2}else{if(cZ.button&2){c1=3}}}}}return c1}function bH(cZ){switch(cF(cZ)){case 1:return"left";
-case 2:return"middle";case 3:return"right"}}function aT(cZ){return cZ.target||cZ.srcElement}function av(cZ){return function(c2){c2=c2||S.event;var c1=bH(c2);var c3=aT(c2);if(c2.type==="click"){var c0=false;if(cZ&&c1==="middle"){c0=true}if(c3&&!c0){cs(c3)}}else{if(c2.type==="mousedown"){if(c1==="middle"&&c3){aJ=c1;bq=c3}else{aJ=bq=null}}else{if(c2.type==="mouseup"){if(c1===aJ&&c3===bq){cs(c3)}aJ=bq=null}else{if(c2.type==="contextmenu"){cs(c3)}}}}}}function al(c1,c0){var cZ=typeof c0;if(cZ==="undefined"){c0=true}ai(c1,"click",av(c0),false);if(c0){ai(c1,"mouseup",av(c0),false);ai(c1,"mousedown",av(c0),false);ai(c1,"contextmenu",av(c0),false)}}function br(c1,c3){ak=true;var c2,c0=aS(bp,"ignore"),c4=F.links,cZ=null,c5=null;if(c4){for(c2=0;c2<c4.length;c2++){cZ=c4[c2];if(!c0.test(cZ.className)){c5=typeof cZ.piwikTrackers;if("undefined"===c5){cZ.piwikTrackers=[]}if(-1===L(cZ.piwikTrackers,c3)){cZ.piwikTrackers.push(c3);al(cZ,c1)}}}}}function aK(c0,c3,c4){if(b3){return true}b3=true;var c5=false;
-var c2,c1;function cZ(){c5=true}n(function(){function c6(c8){setTimeout(function(){if(!b3){return}c5=false;c4.trackVisibleContentImpressions();c6(c8)},c8)}function c7(c8){setTimeout(function(){if(!b3){return}if(c5){c5=false;c4.trackVisibleContentImpressions()}c7(c8)},c8)}if(c0){c2=["scroll","resize"];for(c1=0;c1<c2.length;c1++){if(F.addEventListener){F.addEventListener(c2[c1],cZ)}else{S.attachEvent("on"+c2[c1],cZ)}}c7(100)}if(c3&&c3>0){c3=parseInt(c3,10);c6(c3)}})}function cr(){var c0,c2,c3={pdf:"application/pdf",qt:"video/quicktime",realp:"audio/x-pn-realaudio-plugin",wma:"application/x-mplayer2",dir:"application/x-director",fla:"application/x-shockwave-flash",java:"application/x-java-vm",gears:"application/x-googlegears",ag:"application/x-silverlight"};if(!((new RegExp("MSIE")).test(h.userAgent))){if(h.mimeTypes&&h.mimeTypes.length){for(c0 in c3){if(Object.prototype.hasOwnProperty.call(c3,c0)){c2=h.mimeTypes[c3[c0]];cP[c0]=(c2&&c2.enabledPlugin)?"1":"0"}}}if(!((new RegExp("Edge[ /](\\d+[\\.\\d]+)")).test(h.userAgent))&&typeof navigator.javaEnabled!=="unknown"&&I(h.javaEnabled)&&h.javaEnabled()){cP.java="1"
-}if(z(S.GearsFactory)){cP.gears="1"}cP.cookie=bT()}var c1=parseInt(V.width,10);var cZ=parseInt(V.height,10);cP.res=parseInt(c1,10)+"x"+parseInt(cZ,10)}cr();a8();aE();this.getVisitorId=function(){return aP().uuid};this.getVisitorInfo=function(){return cy()};this.getAttributionInfo=function(){return bA()};this.getAttributionCampaignName=function(){return bA()[0]};this.getAttributionCampaignKeyword=function(){return bA()[1]};this.getAttributionReferrerTimestamp=function(){return bA()[2]};this.getAttributionReferrerUrl=function(){return bA()[3]};this.setTrackerUrl=function(cZ){ax=cZ};this.getTrackerUrl=function(){return ax};this.getPiwikUrl=function(){return N(this.getTrackerUrl(),bv)};this.addTracker=function(cZ,c1){if(!c1){throw new Error("A siteId must be given to add a new tracker")}if(!I(cZ)||null===cZ){cZ=this.getTrackerUrl()}var c0=new P(cZ,c1);H.push(c0);return c0};this.getSiteId=function(){return bU};this.setSiteId=function(cZ){bR(cZ)};this.resetUserId=function(){bo="";bC=cB()};this.setUserId=function(cZ){if(!I(cZ)||!cZ.length){return
-}bo=cZ;bC=bV(bo).substr(0,16)};this.getUserId=function(){return bo};this.setCustomData=function(cZ,c0){if(U(cZ)){aj=cZ}else{if(!aj){aj={}}aj[cZ]=c0}};this.getCustomData=function(){return aj};this.setCustomRequestProcessing=function(cZ){bZ=cZ};this.appendToTrackingUrl=function(cZ){cI=cZ};this.getRequest=function(cZ){return ch(cZ)};this.addPlugin=function(cZ,c0){b[cZ]=c0};this.setCustomDimension=function(cZ,c0){cZ=parseInt(cZ,10);if(cZ>0){if(!I(c0)){c0=""}if(!w(c0)){c0=String(c0)}bc[cZ]=c0}};this.getCustomDimension=function(cZ){cZ=parseInt(cZ,10);if(cZ>0&&Object.prototype.hasOwnProperty.call(bc,cZ)){return bc[cZ]}};this.deleteCustomDimension=function(cZ){cZ=parseInt(cZ,10);if(cZ>0){delete bc[cZ]}};this.setCustomVariable=function(c0,cZ,c3,c1){var c2;if(!I(c1)){c1="visit"}if(!I(cZ)){return}if(!I(c3)){c3=""}if(c0>0){cZ=!w(cZ)?String(cZ):cZ;c3=!w(c3)?String(c3):c3;c2=[cZ.slice(0,bj),c3.slice(0,bj)];if(c1==="visit"||c1===2){cq();aI[c0]=c2}else{if(c1==="page"||c1===3){bK[c0]=c2}else{if(c1==="event"){ca[c0]=c2
-}}}}};this.getCustomVariable=function(c0,c1){var cZ;if(!I(c1)){c1="visit"}if(c1==="page"||c1===3){cZ=bK[c0]}else{if(c1==="event"){cZ=ca[c0]}else{if(c1==="visit"||c1===2){cq();cZ=aI[c0]}}}if(!I(cZ)||(cZ&&cZ[0]==="")){return false}return cZ};this.deleteCustomVariable=function(cZ,c0){if(this.getCustomVariable(cZ,c0)){this.setCustomVariable(cZ,"","",c0)}};this.deleteCustomVariables=function(cZ){if(cZ==="page"||cZ===3){bK={}}else{if(cZ==="event"){ca={}}else{if(cZ==="visit"||cZ===2){aI={}}}}};this.storeCustomVariablesInCookie=function(){bE=true};this.setLinkTrackingTimer=function(cZ){bx=cZ};this.getLinkTrackingTimer=function(){return bx};this.setDownloadExtensions=function(cZ){if(w(cZ)){cZ=cZ.split("|")}cO=cZ};this.addDownloadExtensions=function(c0){var cZ;if(w(c0)){c0=c0.split("|")}for(cZ=0;cZ<c0.length;cZ++){cO.push(c0[cZ])}};this.removeDownloadExtensions=function(c1){var c0,cZ=[];if(w(c1)){c1=c1.split("|")}for(c0=0;c0<cO.length;c0++){if(L(c1,cO[c0])===-1){cZ.push(cO[c0])}}cO=cZ};this.setDomains=function(cZ){aq=w(cZ)?[cZ]:cZ;
-var c3=false,c1=0,c0;for(c1;c1<aq.length;c1++){c0=String(aq[c1]);if(ct(cE,K(c0))){c3=true;break}var c2=b9(c0);if(c2&&c2!=="/"&&c2!=="/*"){c3=true;break}}if(!c3){aq.push(cE)}};this.enableCrossDomainLinking=function(){cx=true};this.disableCrossDomainLinking=function(){cx=false};this.isCrossDomainLinkingEnabled=function(){return cx};this.setCrossDomainLinkingTimeout=function(cZ){aR=cZ};this.getCrossDomainLinkingUrlParameter=function(){return t(ap)+"="+t(bh())};this.setIgnoreClasses=function(cZ){bp=w(cZ)?[cZ]:cZ};this.setRequestMethod=function(cZ){cR=cZ||b6};this.setRequestContentType=function(cZ){cl=cZ||aB};this.setReferrerUrl=function(cZ){bd=cZ};this.setCustomUrl=function(cZ){aW=bJ(bB,cZ)};this.getCurrentUrl=function(){return aW||bB};this.setDocumentTitle=function(cZ){a9=cZ};this.setAPIUrl=function(cZ){bv=cZ};this.setDownloadClasses=function(cZ){bz=w(cZ)?[cZ]:cZ};this.setLinkClasses=function(cZ){a0=w(cZ)?[cZ]:cZ};this.setCampaignNameKey=function(cZ){cf=w(cZ)?[cZ]:cZ};this.setCampaignKeywordKey=function(cZ){bu=w(cZ)?[cZ]:cZ
-};this.discardHashTag=function(cZ){bD=cZ};this.setCookieNamePrefix=function(cZ){ba=cZ;aI=bL()};this.setCookieDomain=function(cZ){var c0=K(cZ);if(bm(c0)){cG=c0;a8()}};this.getCookieDomain=function(){return cG};this.hasCookies=function(){return"1"===bT()};this.setSessionCookie=function(c1,c0,cZ){if(!c1){throw new Error("Missing cookie name")}if(!I(cZ)){cZ=cd}bk.push(c1);cU(aL(c1),c0,cZ,bf,cG)};this.getCookie=function(c0){var cZ=aw(aL(c0));if(cZ===0){return null}return cZ};this.setCookiePath=function(cZ){bf=cZ;a8()};this.getCookiePath=function(cZ){return bf};this.setVisitorCookieTimeout=function(cZ){cv=cZ*1000};this.setSessionCookieTimeout=function(cZ){cd=cZ*1000};this.getSessionCookieTimeout=function(){return cd};this.setReferralCookieTimeout=function(cZ){cN=cZ*1000};this.setConversionAttributionFirstReferrer=function(cZ){bl=cZ};this.setSecureCookie=function(cZ){bG=cZ};this.disableCookies=function(){bb=true;cP.cookie="0";if(bU){ay()}};this.deleteCookies=function(){ay()};this.setDoNotTrack=function(c0){var cZ=h.doNotTrack||h.msDoNotTrack;
-cA=c0&&(cZ==="yes"||cZ==="1");if(cA){this.disableCookies()}};this.addListener=function(c0,cZ){al(c0,cZ)};this.enableLinkTracking=function(c0){cQ=true;var cZ=this;b5(function(){q(function(){br(c0,cZ)})})};this.enableJSErrorTracking=function(){if(cC){return}cC=true;var cZ=S.onerror;S.onerror=function(c4,c2,c1,c3,c0){b5(function(){var c5="JavaScript Errors";var c6=c2+":"+c1;if(c3){c6+=":"+c3}an(c5,c6,c4)});if(cZ){return cZ(c4,c2,c1,c3,c0)}return false}};this.disablePerformanceTracking=function(){aU=false};this.setGenerationTimeMs=function(cZ){cb=parseInt(cZ,10)};this.enableHeartBeatTimer=function(cZ){cZ=Math.max(cZ,1);aX=(cZ||15)*1000;if(cH!==null){cW()}};this.disableHeartBeatTimer=function(){by();if(aX||aG){if(S.removeEventListener){S.removeEventListener("focus",a2,true);S.removeEventListener("blur",ar,true)}else{if(S.detachEvent){S.detachEvent("onfocus",a2);S.detachEvent("onblur",ar)}}}aX=null;aG=false};this.killFrame=function(){if(S.location!==S.top.location){S.top.location=S.location}};
-this.redirectFile=function(cZ){if(S.location.protocol==="file:"){S.location=cZ}};this.setCountPreRendered=function(cZ){a5=cZ};this.trackGoal=function(cZ,c1,c0){b5(function(){cD(cZ,c1,c0)})};this.trackLink=function(c0,cZ,c2,c1){b5(function(){cK(c0,cZ,c2,c1)})};this.getNumTrackedPageViews=function(){return cg};this.trackPageView=function(cZ,c1,c0){bY=[];if(M(bU)){b5(function(){W(ax,bv,bU)})}else{b5(function(){cg++;bO(cZ,c1,c0)})}};this.trackAllContentImpressions=function(){if(M(bU)){return}b5(function(){q(function(){var cZ=v.findContentNodes();var c0=cn(cZ);cV(c0,bx)})})};this.trackVisibleContentImpressions=function(cZ,c0){if(M(bU)){return}if(!I(cZ)){cZ=true}if(!I(c0)){c0=750}aK(cZ,c0,this);b5(function(){n(function(){var c1=v.findContentNodes();var c2=a1(c1);cV(c2,bx)})})};this.trackContentImpression=function(c1,cZ,c0){if(M(bU)){return}c1=a(c1);cZ=a(cZ);c0=a(c0);if(!c1){return}cZ=cZ||"Unknown";b5(function(){var c2=az(c1,cZ,c0);bt(c2,bx)})};this.trackContentImpressionsWithinNode=function(cZ){if(M(bU)||!cZ){return
-}b5(function(){if(b3){n(function(){var c0=v.findContentNodesWithinNode(cZ);var c1=a1(c0);cV(c1,bx)})}else{q(function(){var c0=v.findContentNodesWithinNode(cZ);var c1=cn(c0);cV(c1,bx)})}})};this.trackContentInteraction=function(c1,c2,cZ,c0){if(M(bU)){return}c1=a(c1);c2=a(c2);cZ=a(cZ);c0=a(c0);if(!c1||!c2){return}cZ=cZ||"Unknown";b5(function(){var c3=aH(c1,c2,cZ,c0);bt(c3,bx)})};this.trackContentInteractionNode=function(c0,cZ){if(M(bU)||!c0){return}b5(function(){var c1=cS(c0,cZ);bt(c1,bx)})};this.logAllContentBlocksOnPage=function(){var c1=v.findContentNodes();var cZ=v.collectContent(c1);var c0=typeof console;if(c0!=="undefined"&&console&&console.log){console.log(cZ)}};this.trackEvent=function(c0,c2,cZ,c1,c4,c3){b5(function(){an(c0,c2,cZ,c1,c4,c3)})};this.trackSiteSearch=function(cZ,c1,c0,c2){b5(function(){bW(cZ,c1,c0,c2)})};this.setEcommerceView=function(c2,cZ,c1,c0){if(!I(c1)||!c1.length){c1=""}else{if(c1 instanceof Array){c1=JSON_PIWIK.stringify(c1)}}bK[5]=["_pkc",c1];if(I(c0)&&String(c0).length){bK[2]=["_pkp",c0]
-}if((!I(c2)||!c2.length)&&(!I(cZ)||!cZ.length)){return}if(I(c2)&&c2.length){bK[3]=["_pks",c2]}if(!I(cZ)||!cZ.length){cZ=""}bK[4]=["_pkn",cZ]};this.addEcommerceItem=function(c3,cZ,c1,c0,c2){if(c3.length){cJ[c3]=[c3,cZ,c1,c0,c2]}};this.trackEcommerceOrder=function(cZ,c3,c2,c1,c0,c4){bN(cZ,c3,c2,c1,c0,c4)};this.trackEcommerceCartUpdate=function(cZ){bi(cZ)};this.trackRequest=function(c0,c2,c1,cZ){b5(function(){var c3=ch(c0,c2,cZ);bt(c3,bx,c1)})};e.trigger("TrackerSetup",[this])}function G(){return{push:ab}}function c(ao,an){var ap={};var al,am;for(al=0;al<an.length;al++){var aj=an[al];ap[aj]=1;for(am=0;am<ao.length;am++){if(ao[am]&&ao[am][0]){var ak=ao[am][0];if(aj===ak){ab(ao[am]);delete ao[am];if(ap[ak]>1&&ak!=="addTracker"){af("The method "+ak+' is registered more than once in "_paq" variable. Only the last call has an effect. Please have a look at the multiple Piwik trackers documentation: https://developer.piwik.org/guides/tracking-javascript-guide#multiple-piwik-trackers')}ap[ak]++}}}}return ao
-}var B=["addTracker","disableCookies","setTrackerUrl","setAPIUrl","enableCrossDomainLinking","setCrossDomainLinkingTimeout","setSecureCookie","setCookiePath","setCookieDomain","setDomains","setUserId","setSiteId","enableLinkTracking"];function Z(aj,al){var ak=new P(aj,al);H.push(ak);_paq=c(_paq,B);for(D=0;D<_paq.length;D++){if(_paq[D]){ab(_paq[D])}}_paq=new G();return ak}ai(S,"beforeunload",ad,false);Date.prototype.getTimeAlias=Date.prototype.getTime;e={initialized:false,JSON:JSON_PIWIK,DOM:{addEventListener:function(am,al,ak,aj){var an=typeof aj;if(an==="undefined"){aj=false}ai(am,al,ak,aj)},onLoad:n,onReady:q,isNodeVisible:j,isOrWasNodeVisible:v.isNodeVisible},on:function(ak,aj){if(!x[ak]){x[ak]=[]}x[ak].push(aj)},off:function(al,ak){if(!x[al]){return}var aj=0;for(aj;aj<x[al].length;aj++){if(x[al][aj]===ak){x[al].splice(aj,1)}}},trigger:function(al,am,ak){if(!x[al]){return}var aj=0;for(aj;aj<x[al].length;aj++){x[al][aj].apply(ak||S,am)}},addPlugin:function(aj,ak){b[aj]=ak},getTracker:function(aj,ak){if(!I(ak)){ak=this.getAsyncTracker().getSiteId()
-}if(!I(aj)){aj=this.getAsyncTracker().getTrackerUrl()}return new P(aj,ak)},getAsyncTrackers:function(){return H},addTracker:function(aj,al){var ak;if(!H.length){ak=Z(aj,al)}else{ak=H[0].addTracker(aj,al)}return ak},getAsyncTracker:function(ak,an){var am;if(H&&H.length&&H[0]){am=H[0]}else{return Z(ak,an)}if(!an&&!ak){return am}if((!I(an)||null===an)&&am){an=am.getSiteId()}if((!I(ak)||null===ak)&&am){ak=am.getTrackerUrl()}var al,aj=0;for(aj;aj<H.length;aj++){al=H[aj];if(al&&String(al.getSiteId())===String(an)&&al.getTrackerUrl()===ak){return al}}},retryMissedPluginCalls:function(){var ak=ac;ac=[];var aj=0;for(aj;aj<ak.length;aj++){ab(ak[aj])}}};if(typeof define==="function"&&define.amd){define("piwik",[],function(){return e})}return e}());
+if(ad=="}"){break}if(ae){if(ad==","){ad=y();if(ad=="}"){H()}}else{H()}}if(ad==","||typeof ad!="string"||(F?ad.charAt(0):ad[0])!="@"||y()!=":"){H()}ac[ad.slice(1)]=W(y())}return ac}}H()}return ad};var P=function(ae,ad,af){var ac=w(ae,ad,af);if(ac===L){delete ae[ad]}else{ae[ad]=ac}};var w=function(af,ae,ag){var ad=af[ae],ac;if(typeof ad=="object"&&ad){if(u.call(ad)==E){for(ac=ad.length;ac--;){P(ad,ac,ag)}}else{m(ad,function(ah){P(ad,ah,ag)})}}return ag.call(af,ae,ad)};V.parse=function(ae,af){var ac,ad;G=0;X=""+ae;ac=W(y());if(y()!="$"){H()}G=X=null;return af&&u.call(af)==U?w((ad={},ad[""]=ac,ad),"",af):ac}}}V.runInContext=j;return V}if(h&&!c){j(i,h)}else{var f=i.JSON,k=i.JSON3,d=false;var g=j(i,(i.JSON3={noConflict:function(){if(!d){d=true;i.JSON=f;i.JSON3=k;f=k=null}return g}}));i.JSON={parse:g.parse,stringify:g.stringify}}if(c){define(function(){return g})}}).call(this);JSON_PIWIK=a})()}if(typeof _paq!=="object"){_paq=[]}if(typeof window.Piwik!=="object"){window.Piwik=(function(){var r,b={},y={},G=document,h=navigator,W=screen,T=window,i=T.performance||T.mozPerformance||T.msPerformance||T.webkitPerformance,t=T.encodeURIComponent,S=T.decodeURIComponent,l=unescape,I=[],E,e,ad=[],x=0,m=false;
+function p(ak){try{return S(ak)}catch(al){return unescape(ak)}}function J(al){var ak=typeof al;return ak!=="undefined"}function A(ak){return typeof ak==="function"}function V(ak){return typeof ak==="object"}function w(ak){return typeof ak==="string"||ak instanceof String}function B(al){if(!al){return true}var ak;var am=true;for(ak in al){if(Object.prototype.hasOwnProperty.call(al,ak)){am=false}}return am}function ag(ak){var al=typeof console;if(al!=="undefined"&&console&&console.error){console.error(ak)}}function ac(){var ap,ao,ar,al,ak;for(ap=0;ap<arguments.length;ap+=1){ak=null;if(arguments[ap]&&arguments[ap].slice){ak=arguments[ap].slice()}al=arguments[ap];ar=al.shift();var aq,am;var an=w(ar)&&ar.indexOf("::")>0;if(an){aq=ar.split("::");am=aq[0];ar=aq[1];if("object"===typeof e[am]&&"function"===typeof e[am][ar]){e[am][ar].apply(e[am],al)}else{if(ak){ad.push(ak)}}}else{for(ao=0;ao<I.length;ao++){if(w(ar)){am=I[ao];var at=ar.indexOf(".")>0;if(at){aq=ar.split(".");if(am&&"object"===typeof am[aq[0]]){am=am[aq[0]];
+ar=aq[1]}else{if(ak){ad.push(ak);break}}}if(am[ar]){am[ar].apply(am,al)}else{var au="The method '"+ar+'\' was not found in "_paq" variable. Please have a look at the Piwik tracker documentation: https://developer.piwik.org/api-reference/tracking-javascript';ag(au);if(!at){throw new TypeError(au)}}if(ar==="addTracker"){break}if(ar==="setTrackerUrl"||ar==="setSiteId"){break}}else{ar.apply(I[ao],al)}}}}}function aj(an,am,al,ak){if(an.addEventListener){an.addEventListener(am,al,ak);return true}if(an.attachEvent){return an.attachEvent("on"+am,al)}an["on"+am]=al}function n(ak){if(G.readyState==="complete"){ak()}else{if(T.addEventListener){T.addEventListener("load",ak)}else{if(T.attachEvent){T.attachEvent("onload",ak)}}}}function q(an){var ak=false;if(G.attachEvent){ak=G.readyState==="complete"}else{ak=G.readyState!=="loading"}if(ak){an();return}var am;if(G.addEventListener){aj(G,"DOMContentLoaded",function al(){G.removeEventListener("DOMContentLoaded",al,false);if(!ak){ak=true;an()}})}else{if(G.attachEvent){G.attachEvent("onreadystatechange",function al(){if(G.readyState==="complete"){G.detachEvent("onreadystatechange",al);
+if(!ak){ak=true;an()}}});if(G.documentElement.doScroll&&T===T.top){(function al(){if(!ak){try{G.documentElement.doScroll("left")}catch(ao){setTimeout(al,0);return}ak=true;an()}}())}}}aj(T,"load",function(){if(!ak){ak=true;an()}},false)}function Z(al,aq,ar){if(!al){return""}var ak="",an,am,ao,ap;for(an in b){if(Object.prototype.hasOwnProperty.call(b,an)){ap=b[an]&&"function"===typeof b[an][al];if(ap){am=b[an][al];ao=am(aq||{},ar);if(ao){ak+=ao}}}}return ak}function ae(){var ak;m=true;Z("unload");if(r){do{ak=new Date()}while(ak.getTimeAlias()<r)}}function o(am,al){var ak=G.createElement("script");ak.type="text/javascript";ak.src=am;if(ak.readyState){ak.onreadystatechange=function(){var an=this.readyState;if(an==="loaded"||an==="complete"){ak.onreadystatechange=null;al()}}}else{ak.onload=al}G.getElementsByTagName("head")[0].appendChild(ak)}function K(){var ak="";try{ak=T.top.document.referrer}catch(am){if(T.parent){try{ak=T.parent.document.referrer}catch(al){ak=""}}}if(ak===""){ak=G.referrer
+}return ak}function s(ak){var am=new RegExp("^([a-z]+):"),al=am.exec(ak);return al?al[1]:null}function d(ak){var am=new RegExp("^(?:(?:https?|ftp):)/*(?:[^@]+@)?([^:/#]+)"),al=am.exec(ak);return al?al[1]:ak}function af(al,ak){al=String(al);return al.lastIndexOf(ak,0)===0}function R(al,ak){al=String(al);return al.indexOf(ak,al.length-ak.length)!==-1}function z(al,ak){al=String(al);return al.indexOf(ak)!==-1}function g(al,ak){al=String(al);return al.substr(0,al.length-ak)}function F(an,am,ap){an=String(an);if(!ap){ap=""}var ak=an.indexOf("#");var aq=an.length;if(ak===-1){ak=aq}var ao=an.substr(0,ak);var al=an.substr(ak,aq-ak);if(ao.indexOf("?")===-1){ao+="?"}else{if(!R(ao,"?")){ao+="&"}}return ao+t(am)+"="+t(ap)+al}function k(al,am){al=String(al);if(al.indexOf("?"+am+"=")===-1&&al.indexOf("&"+am+"=")===-1){return al}var an=al.indexOf("?");if(an===-1){return al}var ak=al.substr(an+1);var ar=al.substr(0,an);if(ak){var at="";var av=ak.indexOf("#");if(av!==-1){at=ak.substr(av+1);ak=ak.substr(0,av)
+}var ao;var aq=ak.split("&");var ap=aq.length-1;for(ap;ap>=0;ap--){ao=aq[ap].split("=")[0];if(ao===am){aq.splice(ap,1)}}var au=aq.join("&");if(au){ar=ar+"?"+au}if(at){ar+="#"+at}}return ar}function f(am,al){var ak="[\\?&#]"+al+"=([^&#]*)";var ao=new RegExp(ak);var an=ao.exec(am);return an?S(an[1]):""}function a(ak){if(ak&&String(ak)===ak){return ak.replace(/^\s+|\s+$/g,"")}return ak}function D(ak){return unescape(t(ak))}function ai(aA){var am=function(aG,aF){return(aG<<aF)|(aG>>>(32-aF))},aB=function(aI){var aG="",aH,aF;for(aH=7;aH>=0;aH--){aF=(aI>>>(aH*4))&15;aG+=aF.toString(16)}return aG},ap,aD,aC,al=[],au=1732584193,ar=4023233417,aq=2562383102,ao=271733878,an=3285377520,az,ay,ax,aw,av,aE,ak,at=[];aA=D(aA);ak=aA.length;for(aD=0;aD<ak-3;aD+=4){aC=aA.charCodeAt(aD)<<24|aA.charCodeAt(aD+1)<<16|aA.charCodeAt(aD+2)<<8|aA.charCodeAt(aD+3);at.push(aC)}switch(ak&3){case 0:aD=2147483648;break;case 1:aD=aA.charCodeAt(ak-1)<<24|8388608;break;case 2:aD=aA.charCodeAt(ak-2)<<24|aA.charCodeAt(ak-1)<<16|32768;
+break;case 3:aD=aA.charCodeAt(ak-3)<<24|aA.charCodeAt(ak-2)<<16|aA.charCodeAt(ak-1)<<8|128;break}at.push(aD);while((at.length&15)!==14){at.push(0)}at.push(ak>>>29);at.push((ak<<3)&4294967295);for(ap=0;ap<at.length;ap+=16){for(aD=0;aD<16;aD++){al[aD]=at[ap+aD]}for(aD=16;aD<=79;aD++){al[aD]=am(al[aD-3]^al[aD-8]^al[aD-14]^al[aD-16],1)}az=au;ay=ar;ax=aq;aw=ao;av=an;for(aD=0;aD<=19;aD++){aE=(am(az,5)+((ay&ax)|(~ay&aw))+av+al[aD]+1518500249)&4294967295;av=aw;aw=ax;ax=am(ay,30);ay=az;az=aE}for(aD=20;aD<=39;aD++){aE=(am(az,5)+(ay^ax^aw)+av+al[aD]+1859775393)&4294967295;av=aw;aw=ax;ax=am(ay,30);ay=az;az=aE}for(aD=40;aD<=59;aD++){aE=(am(az,5)+((ay&ax)|(ay&aw)|(ax&aw))+av+al[aD]+2400959708)&4294967295;av=aw;aw=ax;ax=am(ay,30);ay=az;az=aE}for(aD=60;aD<=79;aD++){aE=(am(az,5)+(ay^ax^aw)+av+al[aD]+3395469782)&4294967295;av=aw;aw=ax;ax=am(ay,30);ay=az;az=aE}au=(au+az)&4294967295;ar=(ar+ay)&4294967295;aq=(aq+ax)&4294967295;ao=(ao+aw)&4294967295;an=(an+av)&4294967295}aE=aB(au)+aB(ar)+aB(aq)+aB(ao)+aB(an);
+return aE.toLowerCase()}function Y(am,ak,al){if(!am){am=""}if(!ak){ak=""}if(am==="translate.googleusercontent.com"){if(al===""){al=ak}ak=f(ak,"u");am=d(ak)}else{if(am==="cc.bingj.com"||am==="webcache.googleusercontent.com"||am.slice(0,5)==="74.6."){ak=G.links[0].href;am=d(ak)}}return[am,ak,al]}function L(al){var ak=al.length;if(al.charAt(--ak)==="."){al=al.slice(0,ak)}if(al.slice(0,2)==="*."){al=al.slice(1)}if(al.indexOf("/")!==-1){al=al.substr(0,al.indexOf("/"))}return al}function ah(al){al=al&&al.text?al.text:al;if(!w(al)){var ak=G.getElementsByTagName("title");if(ak&&J(ak[0])){al=ak[0].text}}return al}function P(ak){if(!ak){return[]}if(!J(ak.children)&&J(ak.childNodes)){return ak.children}if(J(ak.children)){return ak.children}return[]}function U(al,ak){if(!al||!ak){return false}if(al.contains){return al.contains(ak)}if(al===ak){return true}if(al.compareDocumentPosition){return !!(al.compareDocumentPosition(ak)&16)}return false}function M(am,an){if(am&&am.indexOf){return am.indexOf(an)
+}if(!J(am)||am===null){return -1}if(!am.length){return -1}var ak=am.length;if(ak===0){return -1}var al=0;while(al<ak){if(am[al]===an){return al}al++}return -1}function j(am){if(!am){return false}function ak(ao,ap){if(T.getComputedStyle){return G.defaultView.getComputedStyle(ao,null)[ap]}if(ao.currentStyle){return ao.currentStyle[ap]}}function an(ao){ao=ao.parentNode;while(ao){if(ao===G){return true}ao=ao.parentNode}return false}function al(aq,ax,ao,au,ar,av,at){var ap=aq.parentNode,aw=1;if(!an(aq)){return false}if(9===ap.nodeType){return true}if("0"===ak(aq,"opacity")||"none"===ak(aq,"display")||"hidden"===ak(aq,"visibility")){return false}if(!J(ax)||!J(ao)||!J(au)||!J(ar)||!J(av)||!J(at)){ax=aq.offsetTop;ar=aq.offsetLeft;au=ax+aq.offsetHeight;ao=ar+aq.offsetWidth;av=aq.offsetWidth;at=aq.offsetHeight}if(am===aq&&(0===at||0===av)&&"hidden"===ak(aq,"overflow")){return false}if(ap){if(("hidden"===ak(ap,"overflow")||"scroll"===ak(ap,"overflow"))){if(ar+aw>ap.offsetWidth+ap.scrollLeft||ar+av-aw<ap.scrollLeft||ax+aw>ap.offsetHeight+ap.scrollTop||ax+at-aw<ap.scrollTop){return false
+}}if(aq.offsetParent===ap){ar+=ap.offsetLeft;ax+=ap.offsetTop}return al(ap,ax,ao,au,ar,av,at)}return true}return al(am)}var ab={htmlCollectionToArray:function(am){var ak=[],al;if(!am||!am.length){return ak}for(al=0;al<am.length;al++){ak.push(am[al])}return ak},find:function(ak){if(!document.querySelectorAll||!ak){return[]}var al=document.querySelectorAll(ak);return this.htmlCollectionToArray(al)},findMultiple:function(am){if(!am||!am.length){return[]}var al,an;var ak=[];for(al=0;al<am.length;al++){an=this.find(am[al]);ak=ak.concat(an)}ak=this.makeNodesUnique(ak);return ak},findNodesByTagName:function(al,ak){if(!al||!ak||!al.getElementsByTagName){return[]}var am=al.getElementsByTagName(ak);return this.htmlCollectionToArray(am)},makeNodesUnique:function(ak){var ap=[].concat(ak);ak.sort(function(ar,aq){if(ar===aq){return 0}var au=M(ap,ar);var at=M(ap,aq);if(au===at){return 0}return au>at?-1:1});if(ak.length<=1){return ak}var al=0;var an=0;var ao=[];var am;am=ak[al++];while(am){if(am===ak[al]){an=ao.push(al)
+}am=ak[al++]||null}while(an--){ak.splice(ao[an],1)}return ak},getAttributeValueFromNode:function(ao,am){if(!this.hasNodeAttribute(ao,am)){return}if(ao&&ao.getAttribute){return ao.getAttribute(am)}if(!ao||!ao.attributes){return}var an=(typeof ao.attributes[am]);if("undefined"===an){return}if(ao.attributes[am].value){return ao.attributes[am].value}if(ao.attributes[am].nodeValue){return ao.attributes[am].nodeValue}var al;var ak=ao.attributes;if(!ak){return}for(al=0;al<ak.length;al++){if(ak[al].nodeName===am){return ak[al].nodeValue}}return null},hasNodeAttributeWithValue:function(al,ak){var am=this.getAttributeValueFromNode(al,ak);return !!am},hasNodeAttribute:function(am,ak){if(am&&am.hasAttribute){return am.hasAttribute(ak)}if(am&&am.attributes){var al=(typeof am.attributes[ak]);return"undefined"!==al}return false},hasNodeCssClass:function(am,ak){if(am&&ak&&am.className){var al=typeof am.className==="string"?am.className.split(" "):[];if(-1!==M(al,ak)){return true}}return false},findNodesHavingAttribute:function(ao,am,ak){if(!ak){ak=[]
+}if(!ao||!am){return ak}var an=P(ao);if(!an||!an.length){return ak}var al,ap;for(al=0;al<an.length;al++){ap=an[al];if(this.hasNodeAttribute(ap,am)){ak.push(ap)}ak=this.findNodesHavingAttribute(ap,am,ak)}return ak},findFirstNodeHavingAttribute:function(am,al){if(!am||!al){return}if(this.hasNodeAttribute(am,al)){return am}var ak=this.findNodesHavingAttribute(am,al);if(ak&&ak.length){return ak[0]}},findFirstNodeHavingAttributeWithValue:function(an,am){if(!an||!am){return}if(this.hasNodeAttributeWithValue(an,am)){return an}var ak=this.findNodesHavingAttribute(an,am);if(!ak||!ak.length){return}var al;for(al=0;al<ak.length;al++){if(this.getAttributeValueFromNode(ak[al],am)){return ak[al]}}},findNodesHavingCssClass:function(ao,an,ak){if(!ak){ak=[]}if(!ao||!an){return ak}if(ao.getElementsByClassName){var ap=ao.getElementsByClassName(an);return this.htmlCollectionToArray(ap)}var am=P(ao);if(!am||!am.length){return[]}var al,aq;for(al=0;al<am.length;al++){aq=am[al];if(this.hasNodeCssClass(aq,an)){ak.push(aq)
+}ak=this.findNodesHavingCssClass(aq,an,ak)}return ak},findFirstNodeHavingClass:function(am,al){if(!am||!al){return}if(this.hasNodeCssClass(am,al)){return am}var ak=this.findNodesHavingCssClass(am,al);if(ak&&ak.length){return ak[0]}},isLinkElement:function(al){if(!al){return false}var ak=String(al.nodeName).toLowerCase();var an=["a","area"];var am=M(an,ak);return am!==-1},setAnyAttribute:function(al,ak,am){if(!al||!ak){return}if(al.setAttribute){al.setAttribute(ak,am)}else{al[ak]=am}}};var v={CONTENT_ATTR:"data-track-content",CONTENT_CLASS:"piwikTrackContent",CONTENT_NAME_ATTR:"data-content-name",CONTENT_PIECE_ATTR:"data-content-piece",CONTENT_PIECE_CLASS:"piwikContentPiece",CONTENT_TARGET_ATTR:"data-content-target",CONTENT_TARGET_CLASS:"piwikContentTarget",CONTENT_IGNOREINTERACTION_ATTR:"data-content-ignoreinteraction",CONTENT_IGNOREINTERACTION_CLASS:"piwikContentIgnoreInteraction",location:undefined,findContentNodes:function(){var al="."+this.CONTENT_CLASS;var ak="["+this.CONTENT_ATTR+"]";
+var am=ab.findMultiple([al,ak]);return am},findContentNodesWithinNode:function(an){if(!an){return[]}var al=ab.findNodesHavingCssClass(an,this.CONTENT_CLASS);var ak=ab.findNodesHavingAttribute(an,this.CONTENT_ATTR);if(ak&&ak.length){var am;for(am=0;am<ak.length;am++){al.push(ak[am])}}if(ab.hasNodeAttribute(an,this.CONTENT_ATTR)){al.push(an)}else{if(ab.hasNodeCssClass(an,this.CONTENT_CLASS)){al.push(an)}}al=ab.makeNodesUnique(al);return al},findParentContentNode:function(al){if(!al){return}var am=al;var ak=0;while(am&&am!==G&&am.parentNode){if(ab.hasNodeAttribute(am,this.CONTENT_ATTR)){return am}if(ab.hasNodeCssClass(am,this.CONTENT_CLASS)){return am}am=am.parentNode;if(ak>1000){break}ak++}},findPieceNode:function(al){var ak;ak=ab.findFirstNodeHavingAttribute(al,this.CONTENT_PIECE_ATTR);if(!ak){ak=ab.findFirstNodeHavingClass(al,this.CONTENT_PIECE_CLASS)}if(ak){return ak}return al},findTargetNodeNoDefault:function(ak){if(!ak){return}var al=ab.findFirstNodeHavingAttributeWithValue(ak,this.CONTENT_TARGET_ATTR);
+if(al){return al}al=ab.findFirstNodeHavingAttribute(ak,this.CONTENT_TARGET_ATTR);if(al){return al}al=ab.findFirstNodeHavingClass(ak,this.CONTENT_TARGET_CLASS);if(al){return al}},findTargetNode:function(ak){var al=this.findTargetNodeNoDefault(ak);if(al){return al}return ak},findContentName:function(al){if(!al){return}var ao=ab.findFirstNodeHavingAttributeWithValue(al,this.CONTENT_NAME_ATTR);if(ao){return ab.getAttributeValueFromNode(ao,this.CONTENT_NAME_ATTR)}var ak=this.findContentPiece(al);if(ak){return this.removeDomainIfIsInLink(ak)}if(ab.hasNodeAttributeWithValue(al,"title")){return ab.getAttributeValueFromNode(al,"title")}var am=this.findPieceNode(al);if(ab.hasNodeAttributeWithValue(am,"title")){return ab.getAttributeValueFromNode(am,"title")}var an=this.findTargetNode(al);if(ab.hasNodeAttributeWithValue(an,"title")){return ab.getAttributeValueFromNode(an,"title")}},findContentPiece:function(al){if(!al){return}var an=ab.findFirstNodeHavingAttributeWithValue(al,this.CONTENT_PIECE_ATTR);
+if(an){return ab.getAttributeValueFromNode(an,this.CONTENT_PIECE_ATTR)}var ak=this.findPieceNode(al);var am=this.findMediaUrlInNode(ak);if(am){return this.toAbsoluteUrl(am)}},findContentTarget:function(am){if(!am){return}var an=this.findTargetNode(am);if(ab.hasNodeAttributeWithValue(an,this.CONTENT_TARGET_ATTR)){return ab.getAttributeValueFromNode(an,this.CONTENT_TARGET_ATTR)}var al;if(ab.hasNodeAttributeWithValue(an,"href")){al=ab.getAttributeValueFromNode(an,"href");return this.toAbsoluteUrl(al)}var ak=this.findPieceNode(am);if(ab.hasNodeAttributeWithValue(ak,"href")){al=ab.getAttributeValueFromNode(ak,"href");return this.toAbsoluteUrl(al)}},isSameDomain:function(ak){if(!ak||!ak.indexOf){return false}if(0===ak.indexOf(this.getLocation().origin)){return true}var al=ak.indexOf(this.getLocation().host);if(8>=al&&0<=al){return true}return false},removeDomainIfIsInLink:function(am){var al="^https?://[^/]+";var ak="^.*//[^/]+";if(am&&am.search&&-1!==am.search(new RegExp(al))&&this.isSameDomain(am)){am=am.replace(new RegExp(ak),"");
+if(!am){am="/"}}return am},findMediaUrlInNode:function(ao){if(!ao){return}var am=["img","embed","video","audio"];var ak=ao.nodeName.toLowerCase();if(-1!==M(am,ak)&&ab.findFirstNodeHavingAttributeWithValue(ao,"src")){var an=ab.findFirstNodeHavingAttributeWithValue(ao,"src");return ab.getAttributeValueFromNode(an,"src")}if(ak==="object"&&ab.hasNodeAttributeWithValue(ao,"data")){return ab.getAttributeValueFromNode(ao,"data")}if(ak==="object"){var ap=ab.findNodesByTagName(ao,"param");if(ap&&ap.length){var al;for(al=0;al<ap.length;al++){if("movie"===ab.getAttributeValueFromNode(ap[al],"name")&&ab.hasNodeAttributeWithValue(ap[al],"value")){return ab.getAttributeValueFromNode(ap[al],"value")}}}var aq=ab.findNodesByTagName(ao,"embed");if(aq&&aq.length){return this.findMediaUrlInNode(aq[0])}}},trim:function(ak){return a(ak)},isOrWasNodeInViewport:function(ap){if(!ap||!ap.getBoundingClientRect||ap.nodeType!==1){return true}var ao=ap.getBoundingClientRect();var an=G.documentElement||{};var am=ao.top<0;
+if(am&&ap.offsetTop){am=(ap.offsetTop+ao.height)>0}var al=an.clientWidth;if(T.innerWidth&&al>T.innerWidth){al=T.innerWidth}var ak=an.clientHeight;if(T.innerHeight&&ak>T.innerHeight){ak=T.innerHeight}return((ao.bottom>0||am)&&ao.right>0&&ao.left<al&&((ao.top<ak)||am))},isNodeVisible:function(al){var ak=j(al);var am=this.isOrWasNodeInViewport(al);return ak&&am},buildInteractionRequestParams:function(ak,al,am,an){var ao="";if(ak){ao+="c_i="+t(ak)}if(al){if(ao){ao+="&"}ao+="c_n="+t(al)}if(am){if(ao){ao+="&"}ao+="c_p="+t(am)}if(an){if(ao){ao+="&"}ao+="c_t="+t(an)}return ao},buildImpressionRequestParams:function(ak,al,am){var an="c_n="+t(ak)+"&c_p="+t(al);if(am){an+="&c_t="+t(am)}return an},buildContentBlock:function(am){if(!am){return}var ak=this.findContentName(am);var al=this.findContentPiece(am);var an=this.findContentTarget(am);ak=this.trim(ak);al=this.trim(al);an=this.trim(an);return{name:ak||"Unknown",piece:al||"Unknown",target:an||""}},collectContent:function(an){if(!an||!an.length){return[]
+}var am=[];var ak,al;for(ak=0;ak<an.length;ak++){al=this.buildContentBlock(an[ak]);if(J(al)){am.push(al)}}return am},setLocation:function(ak){this.location=ak},getLocation:function(){var ak=this.location||T.location;if(!ak.origin){ak.origin=ak.protocol+"//"+ak.hostname+(ak.port?":"+ak.port:"")}return ak},toAbsoluteUrl:function(al){if((!al||String(al)!==al)&&al!==""){return al}if(""===al){return this.getLocation().href}if(al.search(/^\/\//)!==-1){return this.getLocation().protocol+al}if(al.search(/:\/\//)!==-1){return al}if(0===al.indexOf("#")){return this.getLocation().origin+this.getLocation().pathname+al}if(0===al.indexOf("?")){return this.getLocation().origin+this.getLocation().pathname+al}if(0===al.search("^[a-zA-Z]{2,11}:")){return al}if(al.search(/^\//)!==-1){return this.getLocation().origin+al}var ak="(.*/)";var am=this.getLocation().origin+this.getLocation().pathname.match(new RegExp(ak))[0];return am+al},isUrlToCurrentDomain:function(al){var am=this.toAbsoluteUrl(al);if(!am){return false
+}var ak=this.getLocation().origin;if(ak===am){return true}if(0===String(am).indexOf(ak)){if(":"===String(am).substr(ak.length,1)){return false}return true}return false},setHrefAttribute:function(al,ak){if(!al||!ak){return}ab.setAnyAttribute(al,"href",ak)},shouldIgnoreInteraction:function(am){var al=ab.hasNodeAttribute(am,this.CONTENT_IGNOREINTERACTION_ATTR);var ak=ab.hasNodeCssClass(am,this.CONTENT_IGNOREINTERACTION_CLASS);return al||ak}};function O(al,ao){if(ao){return ao}al=v.toAbsoluteUrl(al);if(z(al,"?")){var an=al.indexOf("?");al=al.slice(0,an)}if(R(al,"piwik.php")){al=g(al,"piwik.php".length)}else{if(R(al,".php")){var ak=al.lastIndexOf("/");var am=1;al=al.slice(0,ak+am)}}if(R(al,"/js/")){al=g(al,"js/".length)}return al}function N(aq){var at="Piwik_Overlay";var al=new RegExp("index\\.php\\?module=Overlay&action=startOverlaySession&idSite=([0-9]+)&period=([^&]+)&date=([^&]+)(&segment=.*)?$");var am=al.exec(G.referrer);if(am){var ao=am[1];if(ao!==String(aq)){return false}var ap=am[2],ak=am[3],an=am[4];
+if(!an){an=""}else{if(an.indexOf("&segment=")===0){an=an.substr("&segment=".length)}}T.name=at+"###"+ap+"###"+ak+"###"+an}var ar=T.name.split("###");return ar.length===4&&ar[0]===at}function X(al,ar,an){var aq=T.name.split("###"),ap=aq[1],ak=aq[2],ao=aq[3],am=O(al,ar);o(am+"plugins/Overlay/client/client.js?v=1",function(){Piwik_Overlay_Client.initialize(am,an,ap,ak,ao)})}function u(){var am;try{am=T.frameElement}catch(al){return true}if(J(am)){return(am&&String(am.nodeName).toLowerCase()==="iframe")?true:false}try{return T.self!==T.top}catch(ak){return true}}function Q(b5,b0){var bz=this,a6="mtm_consent",cB="mtm_consent_removed",bV=Y(G.domain,T.location.href,K()),cJ=L(bV[0]),bE=p(bV[1]),bf=p(bV[2]),cH=false,b9="GET",cW=b9,aC="application/x-www-form-urlencoded; charset=UTF-8",co=aC,ay=b5||"",by="",cN="",bX=b0||"",bq="",bF="",aX,bb="",cT=["7z","aac","apk","arc","arj","asf","asx","avi","azw3","bin","csv","deb","dmg","doc","docx","epub","exe","flv","gif","gz","gzip","hqx","ibooks","jar","jpg","jpeg","js","mobi","mp2","mp3","mp4","mpg","mpeg","mov","movie","msi","msp","odb","odf","odg","ods","odt","ogg","ogv","pdf","phps","png","ppt","pptx","qt","qtm","ra","ram","rar","rpm","sea","sit","tar","tbz","tbz2","bz","bz2","tgz","torrent","txt","wav","wma","wmv","wpd","xls","xlsx","xml","z","zip"],ar=[cJ],br=[],bC=[],a1=[],bA=500,cx,aY,bI,bG,ak,ci=["pk_campaign","piwik_campaign","utm_campaign","utm_source","utm_medium"],bx=["pk_kwd","piwik_kwd","utm_term"],bc="_pk_",aq="pk_vid",aS=180,cL,bh,bJ=false,bd=false,cF,a7,bn,cy=33955200000,cg=1800000,cS=15768000000,aV=true,ce=0,bH=false,aJ=false,b2,bN={},cd={},be={},bl=200,cO={},cU={},b1=[],b6=false,cr=false,al=false,cV=false,cC=false,aH=false,a5=u(),cM=null,b3,aK,bs,bY=ai,bg,aE,cj=0,bm=["id","ses","cvar","ref"],bt=null,cz=[];
+try{bb=G.title}catch(cp){bb=""}function cZ(da,c8,c7,c9,c6,c5){if(bd){return}var c4;if(c7){c4=new Date();c4.setTime(c4.getTime()+c7)}G.cookie=da+"="+t(c8)+(c7?";expires="+c4.toGMTString():"")+";path="+(c9||"/")+(c6?";domain="+c6:"")+(c5?";secure":"")}function ax(c6){if(bd){return 0}var c4=new RegExp("(^|;)[ ]*"+c6+"=([^;]*)"),c5=c4.exec(G.cookie);return c5?S(c5[2]):0}bt=!ax(cB);function bT(c4){var c5;c4=k(c4,aq);if(bG){c5=new RegExp("#.*");return c4.replace(c5,"")}return c4}function bM(c6,c4){var c7=s(c4),c5;if(c7){return c4}if(c4.slice(0,1)==="/"){return s(c6)+"://"+d(c6)+c4}c6=bT(c6);c5=c6.indexOf("?");if(c5>=0){c6=c6.slice(0,c5)}c5=c6.lastIndexOf("/");if(c5!==c6.length-1){c6=c6.slice(0,c5+1)}return c6+c4}function cw(c6,c4){var c5;c6=String(c6).toLowerCase();c4=String(c4).toLowerCase();if(c6===c4){return true}if(c4.slice(0,1)==="."){if(c6===c4.slice(1)){return true}c5=c6.length-c4.length;if((c5>0)&&(c6.slice(c5)===c4)){return true}}return false}function cc(c4){var c5=document.createElement("a");
+if(c4.indexOf("//")!==0&&c4.indexOf("http")!==0){if(c4.indexOf("*")===0){c4=c4.substr(1)}if(c4.indexOf(".")===0){c4=c4.substr(1)}c4="http://"+c4}c5.href=v.toAbsoluteUrl(c4);if(c5.pathname){return c5.pathname}return""}function aW(c5,c4){if(!af(c4,"/")){c4="/"+c4}if(!af(c5,"/")){c5="/"+c5}var c6=(c4==="/"||c4==="/*");if(c6){return true}if(c5===c4){return true}c4=String(c4).toLowerCase();c5=String(c5).toLowerCase();if(R(c4,"*")){c4=c4.slice(0,-1);c6=(!c4||c4==="/");if(c6){return true}if(c5===c4){return true}return c5.indexOf(c4)===0}if(!R(c5,"/")){c5+="/"}if(!R(c4,"/")){c4+="/"}return c5.indexOf(c4)===0}function an(c8,da){var c5,c4,c6,c7,c9;for(c5=0;c5<ar.length;c5++){c7=L(ar[c5]);c9=cc(ar[c5]);if(cw(c8,c7)&&aW(da,c9)){return true}}return false}function aO(c7){var c5,c4,c6;for(c5=0;c5<ar.length;c5++){c4=L(ar[c5].toLowerCase());if(c7===c4){return true}if(c4.slice(0,1)==="."){if(c7===c4.slice(1)){return true}c6=c7.length-c4.length;if((c6>0)&&(c7.slice(c6)===c4)){return true}}}return false}function ch(c4,c6){c4=c4.replace("send_image=0","send_image=1");
+var c5=new Image(1,1);c5.onload=function(){E=0;if(typeof c6==="function"){c6()}};c5.src=ay+(ay.indexOf("?")<0?"?":"&")+c4}function aZ(c5){var c9="object"===typeof h&&"function"===typeof h.sendBeacon&&"function"===typeof Blob;if(!c9){return false}var c8={type:"application/x-www-form-urlencoded; charset=UTF-8"};var c7=false;try{var c4=new Blob([c5],c8);c7=h.sendBeacon(ay,c4)}catch(c6){return false}return c7}function cR(c5,c6,c4){if(!J(c4)||null===c4){c4=true}if(m&&aZ(c5)){return}setTimeout(function(){if(m&&aZ(c5)){return}var c9;try{var c8=T.XMLHttpRequest?new T.XMLHttpRequest():T.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):null;c8.open("POST",ay,true);c8.onreadystatechange=function(){if(this.readyState===4&&!(this.status>=200&&this.status<300)){var da=m&&aZ(c5);if(!da&&c4){ch(c5,c6)}}else{if(this.readyState===4&&(typeof c6==="function")){c6()}}};c8.setRequestHeader("Content-Type",co);c8.send(c5)}catch(c7){c9=m&&aZ(c5);if(!c9&&c4){ch(c5,c6)}}},50)}function b7(c5){var c4=new Date();
+var c6=c4.getTime()+c5;if(!r||c6>r){r=c6}}function cf(c4){if(b3||!aY||!bt){return}b3=setTimeout(function c5(){b3=null;if(!a5){a5=(!G.hasFocus||G.hasFocus())}if(!a5){cf(aY);return}if(bI()){return}var c6=new Date(),c7=aY-(c6.getTime()-cM);c7=Math.min(aY,c7);cf(c7)},c4||aY)}function bB(){if(!b3){return}clearTimeout(b3);b3=null}function a3(){a5=true;if(bI()){return}cf()}function at(){bB()}function c1(){if(aH||!aY){return}aH=true;aj(T,"focus",a3);aj(T,"blur",at);cf()}function cs(c8){var c5=new Date();var c4=c5.getTime();cM=c4;if(cr&&c4<cr){var c6=cr-c4;setTimeout(c8,c6);b7(c6+50);cr+=50;return}if(cr===false){var c7=800;cr=c4+c7}c8()}function bw(c5,c4,c6){if(!bt){cz.push(c5);return}if(!cF&&c5){cs(function(){if(cW==="POST"||String(c5).length>2000){cR(c5,c6)}else{ch(c5,c6)}b7(c4)})}if(!aH){c1()}else{cf()}}function cb(c4){if(cF){return false}return(c4&&c4.length)}function c0(c6,c4){if(!cb(c6)){return}if(!bt){cz.push(c6);return}var c5='{"requests":["?'+c6.join('","?')+'"]}';cs(function(){cR(c5,null,false);
+b7(c4)})}function aM(c4){return bc+c4+"."+bX+"."+bg}function bW(){if(bd){return"0"}if(!J(h.cookieEnabled)){var c4=aM("testcookie");cZ(c4,"1");return ax(c4)==="1"?"1":"0"}return h.cookieEnabled?"1":"0"}function ba(){bg=bY((cL||cJ)+(bh||"/")).slice(0,4)}function bO(){var c5=aM("cvar"),c4=ax(c5);if(c4.length){c4=JSON_PIWIK.parse(c4);if(V(c4)){return c4}}return{}}function ct(){if(aJ===false){aJ=bO()}}function cG(){return bY((h.userAgent||"")+(h.platform||"")+JSON_PIWIK.stringify(cU)+(new Date()).getTime()+Math.random()).slice(0,16)}function au(){return bY((h.userAgent||"")+(h.platform||"")+JSON_PIWIK.stringify(cU)).slice(0,6)}function a8(){return Math.floor((new Date()).getTime()/1000)}function aD(){var c5=a8();var c6=au();var c4=String(c5)+c6;return c4}function cQ(c6){c6=String(c6);var c9=au();var c7=c9.length;var c8=c6.substr(-1*c7,c7);var c5=parseInt(c6.substr(0,c6.length-c7),10);if(c5&&c8&&c8===c9){var c4=a8();if(aS<=0){return true}if(c4>=c5&&c4<=(c5+aS)){return true}}return false}function c2(c4){if(!cC){return""
+}var c8=f(c4,aq);if(!c8){return""}c8=String(c8);var c6=new RegExp("^[a-zA-Z0-9]+$");if(c8.length===32&&c6.test(c8)){var c5=c8.substr(16,32);if(cQ(c5)){var c7=c8.substr(0,16);return c7}}return""}function cD(){if(!bF){bF=c2(bE)}var c6=new Date(),c4=Math.round(c6.getTime()/1000),c5=aM("id"),c9=ax(c5),c8,c7;if(c9){c8=c9.split(".");c8.unshift("0");if(bF.length){c8[1]=bF}return c8}if(bF.length){c7=bF}else{if("0"===bW()){c7=""}else{c7=cG()}}c8=["1",c7,c4,0,c4,"",""];return c8}function aQ(){var db=cD(),c7=db[0],c8=db[1],c5=db[2],c4=db[3],c9=db[4],c6=db[5];if(!J(db[6])){db[6]=""}var da=db[6];return{newVisitor:c7,uuid:c8,createTs:c5,visitCount:c4,currentVisitTs:c9,lastVisitTs:c6,lastEcommerceOrderTs:da}}function aB(){var c7=new Date(),c5=c7.getTime(),c8=aQ().createTs;var c4=parseInt(c8,10);var c6=(c4*1000)+cy-c5;return c6}function aF(c4){if(!bX){return}var c6=new Date(),c5=Math.round(c6.getTime()/1000);if(!J(c4)){c4=aQ()}var c7=c4.uuid+"."+c4.createTs+"."+c4.visitCount+"."+c5+"."+c4.lastVisitTs+"."+c4.lastEcommerceOrderTs;
+cZ(aM("id"),c7,aB(),bh,cL,bJ)}function bD(){var c4=ax(aM("ref"));if(c4.length){try{c4=JSON_PIWIK.parse(c4);if(V(c4)){return c4}}catch(c5){}}return["","",0,""]}function bP(c6,c5,c4){cZ(c6,"",-86400,c5,c4)}function bo(c5){var c4="testvalue";cZ("test",c4,10000,null,c5);if(ax("test")===c4){bP("test",null,c5);return true}return false}function az(){var c5=bd;bd=false;var c4,c6;for(c4=0;c4<bm.length;c4++){c6=aM(bm[c4]);if(c6!==cB&&c6!==a6&&0!==ax(c6)){bP(c6,bh,cL)}}bd=c5}function bU(c4){bX=c4;aF()}function c3(c8){if(!c8||!V(c8)){return}var c7=[];var c6;for(c6 in c8){if(Object.prototype.hasOwnProperty.call(c8,c6)){c7.push(c6)}}var c9={};c7.sort();var c4=c7.length;var c5;for(c5=0;c5<c4;c5++){c9[c7[c5]]=c8[c7[c5]]}return c9}function b4(){cZ(aM("ses"),"*",cg,bh,cL,bJ)}function a9(){var c7="";var c5="abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";var c6=c5.length;var c4;for(c4=0;c4<6;c4++){c7+=c5.charAt(Math.floor(Math.random()*c6))}return c7}function ck(c6,ds,dt,c7){var dr,c5=new Date(),de=Math.round(c5.getTime()/1000),db,dq,c8=1024,dy,df,dn=aJ,c9=aM("ses"),dl=aM("ref"),di=aM("cvar"),dj=ax(c9),dp=bD(),dv=aX||bE,dc,c4;
+if(bd){az()}if(cF){return""}var dk=aQ();if(!J(c7)){c7=""}var dh=G.characterSet||G.charset;if(!dh||dh.toLowerCase()==="utf-8"){dh=null}dc=dp[0];c4=dp[1];db=dp[2];dq=dp[3];if(!dj){var du=cg/1000;if(!dk.lastVisitTs||(de-dk.lastVisitTs)>du){dk.visitCount++;dk.lastVisitTs=dk.currentVisitTs}if(!bn||!dc.length){for(dr in ci){if(Object.prototype.hasOwnProperty.call(ci,dr)){dc=f(dv,ci[dr]);if(dc.length){break}}}for(dr in bx){if(Object.prototype.hasOwnProperty.call(bx,dr)){c4=f(dv,bx[dr]);if(c4.length){break}}}}dy=d(bf);df=dq.length?d(dq):"";if(dy.length&&!aO(dy)&&(!bn||!df.length||aO(df))){dq=bf}if(dq.length||dc.length){db=de;dp=[dc,c4,db,bT(dq.slice(0,c8))];cZ(dl,JSON_PIWIK.stringify(dp),cS,bh,cL)}}c6+="&idsite="+bX+"&rec=1&r="+String(Math.random()).slice(2,8)+"&h="+c5.getHours()+"&m="+c5.getMinutes()+"&s="+c5.getSeconds()+"&url="+t(bT(dv))+(bf.length?"&urlref="+t(bT(bf)):"")+((bq&&bq.length)?"&uid="+t(bq):"")+"&_id="+dk.uuid+"&_idts="+dk.createTs+"&_idvc="+dk.visitCount+"&_idn="+dk.newVisitor+(dc.length?"&_rcn="+t(dc):"")+(c4.length?"&_rck="+t(c4):"")+"&_refts="+db+"&_viewts="+dk.lastVisitTs+(String(dk.lastEcommerceOrderTs).length?"&_ects="+dk.lastEcommerceOrderTs:"")+(String(dq).length?"&_ref="+t(bT(dq.slice(0,c8))):"")+(dh?"&cs="+t(dh):"")+"&send_image=0";
+for(dr in cU){if(Object.prototype.hasOwnProperty.call(cU,dr)){c6+="&"+dr+"="+cU[dr]}}var dx=[];if(ds){for(dr in ds){if(Object.prototype.hasOwnProperty.call(ds,dr)&&/^dimension\d+$/.test(dr)){var da=dr.replace("dimension","");dx.push(parseInt(da,10));dx.push(String(da));c6+="&"+dr+"="+ds[dr];delete ds[dr]}}}if(ds&&B(ds)){ds=null}for(dr in be){if(Object.prototype.hasOwnProperty.call(be,dr)){var dg=(-1===M(dx,dr));if(dg){c6+="&dimension"+dr+"="+be[dr]}}}if(ds){c6+="&data="+t(JSON_PIWIK.stringify(ds))}else{if(ak){c6+="&data="+t(JSON_PIWIK.stringify(ak))}}function dd(dz,dA){var dB=JSON_PIWIK.stringify(dz);if(dB.length>2){return"&"+dA+"="+t(dB)}return""}var dw=c3(bN);var dm=c3(cd);c6+=dd(dw,"cvar");c6+=dd(dm,"e_cvar");if(aJ){c6+=dd(aJ,"_cvar");for(dr in dn){if(Object.prototype.hasOwnProperty.call(dn,dr)){if(aJ[dr][0]===""||aJ[dr][1]===""){delete aJ[dr]}}}if(bH){cZ(di,JSON_PIWIK.stringify(aJ),cg,bh,cL)}}if(aV){if(ce){c6+="&gt_ms="+ce}else{if(i&&i.timing&&i.timing.requestStart&&i.timing.responseEnd){c6+="&gt_ms="+(i.timing.responseEnd-i.timing.requestStart)
+}}}if(aE){c6+="&pv_id="+aE}dk.lastEcommerceOrderTs=J(c7)&&String(c7).length?c7:dk.lastEcommerceOrderTs;aF(dk);b4();c6+=Z(dt,{tracker:bz,request:c6});if(cN.length){c6+="&"+cN}if(A(b2)){c6=b2(c6)}return c6}bI=function a0(){var c4=new Date();if(cM+aY<=c4.getTime()){var c5=ck("ping=1",null,"ping");bw(c5,bA);return true}return false};function bi(c7,c6,dc,c8,c4,df){var da="idgoal=0",db,c5=new Date(),dd=[],de,c9=String(c7).length;if(c9){da+="&ec_id="+t(c7);db=Math.round(c5.getTime()/1000)}da+="&revenue="+c6;if(String(dc).length){da+="&ec_st="+dc}if(String(c8).length){da+="&ec_tx="+c8}if(String(c4).length){da+="&ec_sh="+c4}if(String(df).length){da+="&ec_dt="+df}if(cO){for(de in cO){if(Object.prototype.hasOwnProperty.call(cO,de)){if(!J(cO[de][1])){cO[de][1]=""}if(!J(cO[de][2])){cO[de][2]=""}if(!J(cO[de][3])||String(cO[de][3]).length===0){cO[de][3]=0}if(!J(cO[de][4])||String(cO[de][4]).length===0){cO[de][4]=1}dd.push(cO[de])}}da+="&ec_items="+t(JSON_PIWIK.stringify(dd))}da=ck(da,ak,"ecommerce",db);
+bw(da,bA);if(c9){cO={}}}function bQ(c4,c8,c7,c6,c5,c9){if(String(c4).length&&J(c8)){bi(c4,c8,c7,c6,c5,c9)}}function bk(c4){if(J(c4)){bi("",c4,"","","","")}}function bR(c5,c7,c6){aE=a9();var c4=ck("action_name="+t(ah(c5||bb)),c7,"log");bw(c4,bA,c6)}function aT(c6,c5){var c7,c4="(^| )(piwik[_-]"+c5;if(c6){for(c7=0;c7<c6.length;c7++){c4+="|"+c6[c7]}}c4+=")( |$)";return new RegExp(c4)}function aN(c4){return(ay&&c4&&0===String(c4).indexOf(ay))}function cl(c8,c4,c9,c5){if(aN(c4)){return 0}var c7=aT(bC,"download"),c6=aT(a1,"link"),da=new RegExp("\\.("+cT.join("|")+")([?&#]|$)","i");if(c6.test(c8)){return"link"}if(c5||c7.test(c8)||da.test(c4)){return"download"}if(c9){return 0}return"link"}function ap(c5){var c4;c4=c5.parentNode;while(c4!==null&&J(c4)){if(ab.isLinkElement(c5)){break}c5=c4;c4=c5.parentNode}return c5}function cY(c9){c9=ap(c9);if(!ab.hasNodeAttribute(c9,"href")){return}if(!J(c9.href)){return}var c8=ab.getAttributeValueFromNode(c9,"href");if(aN(c8)){return}var c5=c9.pathname||cc(c9.href);
+var da=c9.hostname||d(c9.href);var db=da.toLowerCase();var c6=c9.href.replace(da,db);var c7=new RegExp("^(javascript|vbscript|jscript|mocha|livescript|ecmascript|mailto|tel):","i");if(!c7.test(c6)){var c4=cl(c9.className,c6,an(db,c5),ab.hasNodeAttribute(c9,"download"));if(c4){return{type:c4,href:c6}}}}function aI(c4,c5,c6,c7){var c8=v.buildInteractionRequestParams(c4,c5,c6,c7);if(!c8){return}return ck(c8,null,"contentInteraction")}function cA(c6,c7,db,c4,c5){if(!J(c6)){return}if(aN(c6)){return c6}var c9=v.toAbsoluteUrl(c6);var c8="redirecturl="+t(c9)+"&";c8+=aI(c7,db,c4,(c5||c6));var da="&";if(ay.indexOf("?")<0){da="?"}return ay+da+c8}function a4(c4,c5){if(!c4||!c5){return false}var c6=v.findTargetNode(c4);if(v.shouldIgnoreInteraction(c6)){return false}c6=v.findTargetNodeNoDefault(c4);if(c6&&!U(c6,c5)){return false}return true}function cm(c6,c5,c8){if(!c6){return}var c4=v.findParentContentNode(c6);if(!c4){return}if(!a4(c4,c6)){return}var c7=v.buildContentBlock(c4);if(!c7){return}if(!c7.target&&c8){c7.target=c8
+}return v.buildInteractionRequestParams(c5,c7.name,c7.piece,c7.target)}function aP(c5){if(!b1||!b1.length){return false}var c4,c6;for(c4=0;c4<b1.length;c4++){c6=b1[c4];if(c6&&c6.name===c5.name&&c6.piece===c5.piece&&c6.target===c5.target){return true}}return false}function bv(c7){if(!c7){return false}var da=v.findTargetNode(c7);if(!da||v.shouldIgnoreInteraction(da)){return false}var db=cY(da);if(cV&&db&&db.type){return false}if(ab.isLinkElement(da)&&ab.hasNodeAttributeWithValue(da,"href")){var c4=String(ab.getAttributeValueFromNode(da,"href"));if(0===c4.indexOf("#")){return false}if(aN(c4)){return true}if(!v.isUrlToCurrentDomain(c4)){return false}var c8=v.buildContentBlock(c7);if(!c8){return}var c6=c8.name;var dc=c8.piece;var c9=c8.target;if(!ab.hasNodeAttributeWithValue(da,v.CONTENT_TARGET_ATTR)||da.wasContentTargetAttrReplaced){da.wasContentTargetAttrReplaced=true;c9=v.toAbsoluteUrl(c4);ab.setAnyAttribute(da,v.CONTENT_TARGET_ATTR,c9)}var c5=cA(c4,"click",c6,dc,c9);v.setHrefAttribute(da,c5);
+return true}return false}function aG(c5){if(!c5||!c5.length){return}var c4;for(c4=0;c4<c5.length;c4++){bv(c5[c4])}}function aR(c4){return function(c5){if(!c4){return}var c8=v.findParentContentNode(c4);var c9;if(c5){c9=c5.target||c5.srcElement}if(!c9){c9=c4}if(!a4(c8,c9)){return}b7(bA);if(ab.isLinkElement(c4)&&ab.hasNodeAttributeWithValue(c4,"href")&&ab.hasNodeAttributeWithValue(c4,v.CONTENT_TARGET_ATTR)){var c6=ab.getAttributeValueFromNode(c4,"href");if(!aN(c6)&&c4.wasContentTargetAttrReplaced){ab.setAnyAttribute(c4,v.CONTENT_TARGET_ATTR,"")}}var dd=cY(c4);if(al&&dd&&dd.type){return dd.type}if(bv(c8)){return"href"}var da=v.buildContentBlock(c8);if(!da){return}var c7=da.name;var de=da.piece;var dc=da.target;var db=aI("click",c7,de,dc);bw(db,bA);return db}}function bS(c6){if(!c6||!c6.length){return}var c4,c5;for(c4=0;c4<c6.length;c4++){c5=v.findTargetNode(c6[c4]);if(c5&&!c5.contentInteractionTrackingSetupDone){c5.contentInteractionTrackingSetupDone=true;aj(c5,"click",aR(c5))}}}function bp(c6,c7){if(!c6||!c6.length){return[]
+}var c4,c5;for(c4=0;c4<c6.length;c4++){if(aP(c6[c4])){c6.splice(c4,1);c4--}else{b1.push(c6[c4])}}if(!c6||!c6.length){return[]}aG(c7);bS(c7);var c8=[];for(c4=0;c4<c6.length;c4++){c5=ck(v.buildImpressionRequestParams(c6[c4].name,c6[c4].piece,c6[c4].target),undefined,"contentImpressions");if(c5){c8.push(c5)}}return c8}function cq(c5){var c4=v.collectContent(c5);return bp(c4,c5)}function a2(c5){if(!c5||!c5.length){return[]}var c4;for(c4=0;c4<c5.length;c4++){if(!v.isNodeVisible(c5[c4])){c5.splice(c4,1);c4--}}if(!c5||!c5.length){return[]}return cq(c5)}function aA(c6,c4,c5){var c7=v.buildImpressionRequestParams(c6,c4,c5);return ck(c7,null,"contentImpression")}function cX(c7,c5){if(!c7){return}var c4=v.findParentContentNode(c7);var c6=v.buildContentBlock(c4);if(!c6){return}if(!c5){c5="Unknown"}return aI(c5,c6.name,c6.piece,c6.target)}function cE(c5,c7,c4,c6){return"e_c="+t(c5)+"&e_a="+t(c7)+(J(c4)?"&e_n="+t(c4):"")+(J(c6)?"&e_v="+t(c6):"")}function ao(c6,c8,c4,c7,da,c9){if(a(String(c6)).length===0||a(String(c8)).length===0){ag("Error while logging event: Parameters `category` and `action` must not be empty or filled with whitespaces");
+return false}var c5=ck(cE(c6,c8,c4,c7),da,"event");bw(c5,bA,c9)}function bZ(c4,c7,c5,c8){var c6=ck("search="+t(c4)+(c7?"&search_cat="+t(c7):"")+(J(c5)?"&search_count="+c5:""),c8,"sitesearch");bw(c6,bA)}function cI(c4,c7,c6){var c5=ck("idgoal="+c4+(c7?"&revenue="+c7:""),c6,"goal");bw(c5,bA)}function cP(c7,c4,db,da,c6){var c9=c4+"="+t(bT(c7));var c5=cm(c6,"click",c7);if(c5){c9+="&"+c5}var c8=ck(c9,db,"link");bw(c8,bA,da)}function bL(c5,c4){if(c5!==""){return c5+c4.charAt(0).toUpperCase()+c4.slice(1)}return c4}function b8(c9){var c8,c4,c7=["","webkit","ms","moz"],c6;if(!a7){for(c4=0;c4<c7.length;c4++){c6=c7[c4];if(Object.prototype.hasOwnProperty.call(G,bL(c6,"hidden"))){if(G[bL(c6,"visibilityState")]==="prerender"){c8=true}break}}}if(c8){aj(G,c6+"visibilitychange",function c5(){G.removeEventListener(c6+"visibilitychange",c5,false);c9()});return}c9()}function bj(){var c5=aQ().uuid;var c4=aD();return c5+c4}function ca(c4){if(!c4){return}if(!ab.hasNodeAttribute(c4,"href")){return}var c5=ab.getAttributeValueFromNode(c4,"href");
+if(!c5||aN(c5)){return}c5=k(c5,aq);if(c5.indexOf("?")>0){c5+="&"}else{c5+="?"}var c6=bj();c5=F(c5,aq,c6);ab.setAnyAttribute(c4,"href",c5)}function av(c7){var c8=ab.getAttributeValueFromNode(c7,"href");if(!c8){return false}c8=String(c8);var c5=c8.indexOf("//")===0||c8.indexOf("http://")===0||c8.indexOf("https://")===0;if(!c5){return false}var c4=c7.pathname||cc(c7.href);var c6=(c7.hostname||d(c7.href)).toLowerCase();if(an(c6,c4)){if(!cw(cJ,L(c6))){return true}return false}return false}function cv(c4){var c5=cY(c4);if(c5&&c5.type){c5.href=p(c5.href);cP(c5.href,c5.type,undefined,null,c4);return}if(cC){c4=ap(c4);if(av(c4)){ca(c4)}}}function cn(){return G.all&&!G.addEventListener}function cK(c4){var c6=c4.which;var c5=(typeof c4.button);if(!c6&&c5!=="undefined"){if(cn()){if(c4.button&1){c6=1}else{if(c4.button&2){c6=3}else{if(c4.button&4){c6=2}}}}else{if(c4.button===0||c4.button==="0"){c6=1}else{if(c4.button&1){c6=2}else{if(c4.button&2){c6=3}}}}}return c6}function bK(c4){switch(cK(c4)){case 1:return"left";
+case 2:return"middle";case 3:return"right"}}function aU(c4){return c4.target||c4.srcElement}function aw(c4){return function(c7){c7=c7||T.event;var c6=bK(c7);var c8=aU(c7);if(c7.type==="click"){var c5=false;if(c4&&c6==="middle"){c5=true}if(c8&&!c5){cv(c8)}}else{if(c7.type==="mousedown"){if(c6==="middle"&&c8){aK=c6;bs=c8}else{aK=bs=null}}else{if(c7.type==="mouseup"){if(c6===aK&&c8===bs){cv(c8)}aK=bs=null}else{if(c7.type==="contextmenu"){cv(c8)}}}}}}function am(c6,c5){var c4=typeof c5;if(c4==="undefined"){c5=true}aj(c6,"click",aw(c5),false);if(c5){aj(c6,"mouseup",aw(c5),false);aj(c6,"mousedown",aw(c5),false);aj(c6,"contextmenu",aw(c5),false)}}function bu(c6,c8){al=true;var c7,c5=aT(br,"ignore"),c9=G.links,c4=null,da=null;if(c9){for(c7=0;c7<c9.length;c7++){c4=c9[c7];if(!c5.test(c4.className)){da=typeof c4.piwikTrackers;if("undefined"===da){c4.piwikTrackers=[]}if(-1===M(c4.piwikTrackers,c8)){c4.piwikTrackers.push(c8);am(c4,c6)}}}}}function aL(c5,c8,c9){if(b6){return true}b6=true;var da=false;
+var c7,c6;function c4(){da=true}n(function(){function db(dd){setTimeout(function(){if(!b6){return}da=false;c9.trackVisibleContentImpressions();db(dd)},dd)}function dc(dd){setTimeout(function(){if(!b6){return}if(da){da=false;c9.trackVisibleContentImpressions()}dc(dd)},dd)}if(c5){c7=["scroll","resize"];for(c6=0;c6<c7.length;c6++){if(G.addEventListener){G.addEventListener(c7[c6],c4)}else{T.attachEvent("on"+c7[c6],c4)}}dc(100)}if(c8&&c8>0){c8=parseInt(c8,10);db(c8)}})}function cu(){var c5,c7,c8={pdf:"application/pdf",qt:"video/quicktime",realp:"audio/x-pn-realaudio-plugin",wma:"application/x-mplayer2",dir:"application/x-director",fla:"application/x-shockwave-flash",java:"application/x-java-vm",gears:"application/x-googlegears",ag:"application/x-silverlight"};if(!((new RegExp("MSIE")).test(h.userAgent))){if(h.mimeTypes&&h.mimeTypes.length){for(c5 in c8){if(Object.prototype.hasOwnProperty.call(c8,c5)){c7=h.mimeTypes[c8[c5]];cU[c5]=(c7&&c7.enabledPlugin)?"1":"0"}}}if(!((new RegExp("Edge[ /](\\d+[\\.\\d]+)")).test(h.userAgent))&&typeof navigator.javaEnabled!=="unknown"&&J(h.javaEnabled)&&h.javaEnabled()){cU.java="1"
+}if(A(T.GearsFactory)){cU.gears="1"}cU.cookie=bW()}var c6=parseInt(W.width,10);var c4=parseInt(W.height,10);cU.res=parseInt(c6,10)+"x"+parseInt(c4,10)}cu();ba();aF();this.getVisitorId=function(){return aQ().uuid};this.getVisitorInfo=function(){return cD()};this.getAttributionInfo=function(){return bD()};this.getAttributionCampaignName=function(){return bD()[0]};this.getAttributionCampaignKeyword=function(){return bD()[1]};this.getAttributionReferrerTimestamp=function(){return bD()[2]};this.getAttributionReferrerUrl=function(){return bD()[3]};this.setTrackerUrl=function(c4){ay=c4};this.getTrackerUrl=function(){return ay};this.getPiwikUrl=function(){return O(this.getTrackerUrl(),by)};this.addTracker=function(c4,c6){if(!c6){throw new Error("A siteId must be given to add a new tracker")}if(!J(c4)||null===c4){c4=this.getTrackerUrl()}var c5=new Q(c4,c6);I.push(c5);return c5};this.getSiteId=function(){return bX};this.setSiteId=function(c4){bU(c4)};this.resetUserId=function(){bq=""};this.setUserId=function(c4){if(!J(c4)||!c4.length){return
+}bq=c4};this.getUserId=function(){return bq};this.setCustomData=function(c4,c5){if(V(c4)){ak=c4}else{if(!ak){ak={}}ak[c4]=c5}};this.getCustomData=function(){return ak};this.setCustomRequestProcessing=function(c4){b2=c4};this.appendToTrackingUrl=function(c4){cN=c4};this.getRequest=function(c4){return ck(c4)};this.addPlugin=function(c4,c5){b[c4]=c5};this.setCustomDimension=function(c4,c5){c4=parseInt(c4,10);if(c4>0){if(!J(c5)){c5=""}if(!w(c5)){c5=String(c5)}be[c4]=c5}};this.getCustomDimension=function(c4){c4=parseInt(c4,10);if(c4>0&&Object.prototype.hasOwnProperty.call(be,c4)){return be[c4]}};this.deleteCustomDimension=function(c4){c4=parseInt(c4,10);if(c4>0){delete be[c4]}};this.setCustomVariable=function(c5,c4,c8,c6){var c7;if(!J(c6)){c6="visit"}if(!J(c4)){return}if(!J(c8)){c8=""}if(c5>0){c4=!w(c4)?String(c4):c4;c8=!w(c8)?String(c8):c8;c7=[c4.slice(0,bl),c8.slice(0,bl)];if(c6==="visit"||c6===2){ct();aJ[c5]=c7}else{if(c6==="page"||c6===3){bN[c5]=c7}else{if(c6==="event"){cd[c5]=c7}}}}};this.getCustomVariable=function(c5,c6){var c4;
+if(!J(c6)){c6="visit"}if(c6==="page"||c6===3){c4=bN[c5]}else{if(c6==="event"){c4=cd[c5]}else{if(c6==="visit"||c6===2){ct();c4=aJ[c5]}}}if(!J(c4)||(c4&&c4[0]==="")){return false}return c4};this.deleteCustomVariable=function(c4,c5){if(this.getCustomVariable(c4,c5)){this.setCustomVariable(c4,"","",c5)}};this.deleteCustomVariables=function(c4){if(c4==="page"||c4===3){bN={}}else{if(c4==="event"){cd={}}else{if(c4==="visit"||c4===2){aJ={}}}}};this.storeCustomVariablesInCookie=function(){bH=true};this.setLinkTrackingTimer=function(c4){bA=c4};this.getLinkTrackingTimer=function(){return bA};this.setDownloadExtensions=function(c4){if(w(c4)){c4=c4.split("|")}cT=c4};this.addDownloadExtensions=function(c5){var c4;if(w(c5)){c5=c5.split("|")}for(c4=0;c4<c5.length;c4++){cT.push(c5[c4])}};this.removeDownloadExtensions=function(c6){var c5,c4=[];if(w(c6)){c6=c6.split("|")}for(c5=0;c5<cT.length;c5++){if(M(c6,cT[c5])===-1){c4.push(cT[c5])}}cT=c4};this.setDomains=function(c4){ar=w(c4)?[c4]:c4;var c8=false,c6=0,c5;
+for(c6;c6<ar.length;c6++){c5=String(ar[c6]);if(cw(cJ,L(c5))){c8=true;break}var c7=cc(c5);if(c7&&c7!=="/"&&c7!=="/*"){c8=true;break}}if(!c8){ar.push(cJ)}};this.enableCrossDomainLinking=function(){cC=true};this.disableCrossDomainLinking=function(){cC=false};this.isCrossDomainLinkingEnabled=function(){return cC};this.setCrossDomainLinkingTimeout=function(c4){aS=c4};this.getCrossDomainLinkingUrlParameter=function(){return t(aq)+"="+t(bj())};this.setIgnoreClasses=function(c4){br=w(c4)?[c4]:c4};this.setRequestMethod=function(c4){cW=c4||b9};this.setRequestContentType=function(c4){co=c4||aC};this.setReferrerUrl=function(c4){bf=c4};this.setCustomUrl=function(c4){aX=bM(bE,c4)};this.getCurrentUrl=function(){return aX||bE};this.setDocumentTitle=function(c4){bb=c4};this.setAPIUrl=function(c4){by=c4};this.setDownloadClasses=function(c4){bC=w(c4)?[c4]:c4};this.setLinkClasses=function(c4){a1=w(c4)?[c4]:c4};this.setCampaignNameKey=function(c4){ci=w(c4)?[c4]:c4};this.setCampaignKeywordKey=function(c4){bx=w(c4)?[c4]:c4
+};this.discardHashTag=function(c4){bG=c4};this.setCookieNamePrefix=function(c4){bc=c4;aJ=bO()};this.setCookieDomain=function(c4){var c5=L(c4);if(bo(c5)){cL=c5;ba()}};this.getCookieDomain=function(){return cL};this.hasCookies=function(){return"1"===bW()};this.setSessionCookie=function(c6,c5,c4){if(!c6){throw new Error("Missing cookie name")}if(!J(c4)){c4=cg}bm.push(c6);cZ(aM(c6),c5,c4,bh,cL)};this.getCookie=function(c5){var c4=ax(aM(c5));if(c4===0){return null}return c4};this.setCookiePath=function(c4){bh=c4;ba()};this.getCookiePath=function(c4){return bh};this.setVisitorCookieTimeout=function(c4){cy=c4*1000};this.setSessionCookieTimeout=function(c4){cg=c4*1000};this.getSessionCookieTimeout=function(){return cg};this.setReferralCookieTimeout=function(c4){cS=c4*1000};this.setConversionAttributionFirstReferrer=function(c4){bn=c4};this.setSecureCookie=function(c4){bJ=c4};this.disableCookies=function(){bd=true;cU.cookie="0";if(bX){az()}};this.deleteCookies=function(){az()};this.setDoNotTrack=function(c5){var c4=h.doNotTrack||h.msDoNotTrack;
+cF=c5&&(c4==="yes"||c4==="1");if(cF){this.disableCookies()}};this.addListener=function(c5,c4){am(c5,c4)};this.enableLinkTracking=function(c5){cV=true;var c4=this;b8(function(){q(function(){bu(c5,c4)})})};this.enableJSErrorTracking=function(){if(cH){return}cH=true;var c4=T.onerror;T.onerror=function(c9,c7,c6,c8,c5){b8(function(){var da="JavaScript Errors";var db=c7+":"+c6;if(c8){db+=":"+c8}ao(da,db,c9)});if(c4){return c4(c9,c7,c6,c8,c5)}return false}};this.disablePerformanceTracking=function(){aV=false};this.setGenerationTimeMs=function(c4){ce=parseInt(c4,10)};this.enableHeartBeatTimer=function(c4){c4=Math.max(c4,1);aY=(c4||15)*1000;if(cM!==null){c1()}};this.disableHeartBeatTimer=function(){bB();if(aY||aH){if(T.removeEventListener){T.removeEventListener("focus",a3,true);T.removeEventListener("blur",at,true)}else{if(T.detachEvent){T.detachEvent("onfocus",a3);T.detachEvent("onblur",at)}}}aY=null;aH=false};this.killFrame=function(){if(T.location!==T.top.location){T.top.location=T.location}};
+this.redirectFile=function(c4){if(T.location.protocol==="file:"){T.location=c4}};this.setCountPreRendered=function(c4){a7=c4};this.trackGoal=function(c4,c6,c5){b8(function(){cI(c4,c6,c5)})};this.trackLink=function(c5,c4,c7,c6){b8(function(){cP(c5,c4,c7,c6)})};this.getNumTrackedPageViews=function(){return cj};this.trackPageView=function(c4,c6,c5){b1=[];cz=[];if(N(bX)){b8(function(){X(ay,by,bX)})}else{b8(function(){cj++;bR(c4,c6,c5)})}};this.trackAllContentImpressions=function(){if(N(bX)){return}b8(function(){q(function(){var c4=v.findContentNodes();var c5=cq(c4);c0(c5,bA)})})};this.trackVisibleContentImpressions=function(c4,c5){if(N(bX)){return}if(!J(c4)){c4=true}if(!J(c5)){c5=750}aL(c4,c5,this);b8(function(){n(function(){var c6=v.findContentNodes();var c7=a2(c6);c0(c7,bA)})})};this.trackContentImpression=function(c6,c4,c5){if(N(bX)){return}c6=a(c6);c4=a(c4);c5=a(c5);if(!c6){return}c4=c4||"Unknown";b8(function(){var c7=aA(c6,c4,c5);bw(c7,bA)})};this.trackContentImpressionsWithinNode=function(c4){if(N(bX)||!c4){return
+}b8(function(){if(b6){n(function(){var c5=v.findContentNodesWithinNode(c4);var c6=a2(c5);c0(c6,bA)})}else{q(function(){var c5=v.findContentNodesWithinNode(c4);var c6=cq(c5);c0(c6,bA)})}})};this.trackContentInteraction=function(c6,c7,c4,c5){if(N(bX)){return}c6=a(c6);c7=a(c7);c4=a(c4);c5=a(c5);if(!c6||!c7){return}c4=c4||"Unknown";b8(function(){var c8=aI(c6,c7,c4,c5);bw(c8,bA)})};this.trackContentInteractionNode=function(c5,c4){if(N(bX)||!c5){return}b8(function(){var c6=cX(c5,c4);bw(c6,bA)})};this.logAllContentBlocksOnPage=function(){var c6=v.findContentNodes();var c4=v.collectContent(c6);var c5=typeof console;if(c5!=="undefined"&&console&&console.log){console.log(c4)}};this.trackEvent=function(c5,c7,c4,c6,c9,c8){b8(function(){ao(c5,c7,c4,c6,c9,c8)})};this.trackSiteSearch=function(c4,c6,c5,c7){b8(function(){bZ(c4,c6,c5,c7)})};this.setEcommerceView=function(c7,c4,c6,c5){if(!J(c6)||!c6.length){c6=""}else{if(c6 instanceof Array){c6=JSON_PIWIK.stringify(c6)}}bN[5]=["_pkc",c6];if(J(c5)&&String(c5).length){bN[2]=["_pkp",c5]
+}if((!J(c7)||!c7.length)&&(!J(c4)||!c4.length)){return}if(J(c7)&&c7.length){bN[3]=["_pks",c7]}if(!J(c4)||!c4.length){c4=""}bN[4]=["_pkn",c4]};this.addEcommerceItem=function(c8,c4,c6,c5,c7){if(c8.length){cO[c8]=[c8,c4,c6,c5,c7]}};this.trackEcommerceOrder=function(c4,c8,c7,c6,c5,c9){bQ(c4,c8,c7,c6,c5,c9)};this.trackEcommerceCartUpdate=function(c4){bk(c4)};this.trackRequest=function(c5,c7,c6,c4){b8(function(){var c8=ck(c5,c7,c4);bw(c8,bA,c6)})};this.getRememberedConsent=function(){var c4=ax(a6);if(ax(cB)){if(c4){bP(a6,bh,cL)}return null}if(!c4||c4===0){return null}return c4};this.hasRememberedConsent=function(){return !!this.getRememberedConsent()};this.requireConsent=function(){bt=this.hasRememberedConsent();x++;b["CoreConsent"+x]={unload:function(){if(!bt){az()}}}};this.setConsentGiven=function(){bt=true;bP(cB,bh,cL);var c5,c4;for(c5=0;c5<cz.length;c5++){c4=typeof cz[c5];if(c4==="string"){bw(cz[c5],bA)}else{if(c4==="object"){c0(cz[c5],bA)}}}cz=[]};this.rememberConsentGiven=function(c5){if(bd){ag("rememberConsentGiven is called but cookies are disabled, consent will not be remembered");
+return}if(c5){c5=c5*60*60*1000}this.setConsentGiven();var c4=new Date().getTime();cZ(a6,c4,c5,bh,cL,bJ)};this.forgetConsentGiven=function(){if(bd){ag("forgetConsentGiven is called but cookies are disabled, consent will not be forgotten");return}bP(a6,bh,cL);cZ(cB,new Date().getTime(),0,bh,cL,bJ);this.requireConsent()};this.isUserOptedOut=function(){return !bt};this.optUserOut=this.forgetConsentGiven;this.forgetUserOptOut=this.rememberConsentGiven;e.trigger("TrackerSetup",[this])}function H(){return{push:ac}}function c(ap,ao){var aq={};var am,an;for(am=0;am<ao.length;am++){var ak=ao[am];aq[ak]=1;for(an=0;an<ap.length;an++){if(ap[an]&&ap[an][0]){var al=ap[an][0];if(ak===al){ac(ap[an]);delete ap[an];if(aq[al]>1&&al!=="addTracker"){ag("The method "+al+' is registered more than once in "_paq" variable. Only the last call has an effect. Please have a look at the multiple Piwik trackers documentation: https://developer.piwik.org/guides/tracking-javascript-guide#multiple-piwik-trackers')}aq[al]++
+}}}}return ap}var C=["addTracker","disableCookies","setTrackerUrl","setAPIUrl","enableCrossDomainLinking","setCrossDomainLinkingTimeout","setSecureCookie","setCookiePath","setCookieDomain","setDomains","setUserId","setSiteId","enableLinkTracking","requireConsent","setConsentGiven"];function aa(ak,am){var al=new Q(ak,am);I.push(al);_paq=c(_paq,C);for(E=0;E<_paq.length;E++){if(_paq[E]){ac(_paq[E])}}_paq=new H();return al}aj(T,"beforeunload",ae,false);Date.prototype.getTimeAlias=Date.prototype.getTime;e={initialized:false,JSON:JSON_PIWIK,DOM:{addEventListener:function(an,am,al,ak){var ao=typeof ak;if(ao==="undefined"){ak=false}aj(an,am,al,ak)},onLoad:n,onReady:q,isNodeVisible:j,isOrWasNodeVisible:v.isNodeVisible},on:function(al,ak){if(!y[al]){y[al]=[]}y[al].push(ak)},off:function(am,al){if(!y[am]){return}var ak=0;for(ak;ak<y[am].length;ak++){if(y[am][ak]===al){y[am].splice(ak,1)}}},trigger:function(am,an,al){if(!y[am]){return}var ak=0;for(ak;ak<y[am].length;ak++){y[am][ak].apply(al||T,an)}},addPlugin:function(ak,al){b[ak]=al
+},getTracker:function(ak,al){if(!J(al)){al=this.getAsyncTracker().getSiteId()}if(!J(ak)){ak=this.getAsyncTracker().getTrackerUrl()}return new Q(ak,al)},getAsyncTrackers:function(){return I},addTracker:function(ak,am){var al;if(!I.length){al=aa(ak,am)}else{al=I[0].addTracker(ak,am)}return al},getAsyncTracker:function(al,ao){var an;if(I&&I.length&&I[0]){an=I[0]}else{return aa(al,ao)}if(!ao&&!al){return an}if((!J(ao)||null===ao)&&an){ao=an.getSiteId()}if((!J(al)||null===al)&&an){al=an.getTrackerUrl()}var am,ak=0;for(ak;ak<I.length;ak++){am=I[ak];if(am&&String(am.getSiteId())===String(ao)&&am.getTrackerUrl()===al){return am}}},retryMissedPluginCalls:function(){var al=ad;ad=[];var ak=0;for(ak;ak<al.length;ak++){ac(al[ak])}}};if(typeof define==="function"&&define.amd){define("piwik",[],function(){return e})}return e}())}
/*!!! pluginTrackerHook */
-}(function(){function b(){if("object"!==typeof _paq){return false}var c=typeof _paq.length;if("undefined"===c){return false}return !!_paq.length}if(window&&"object"===typeof window.piwikPluginAsyncInit&&window.piwikPluginAsyncInit.length){var a=0;
+(function(){function b(){if("object"!==typeof _paq){return false}var c=typeof _paq.length;if("undefined"===c){return false}return !!_paq.length}if(window&&"object"===typeof window.piwikPluginAsyncInit&&window.piwikPluginAsyncInit.length){var a=0;
for(a;a<window.piwikPluginAsyncInit.length;a++){if(typeof window.piwikPluginAsyncInit[a]==="function"){window.piwikPluginAsyncInit[a]()}}}if(window&&window.piwikAsyncInit){window.piwikAsyncInit()}if(!window.Piwik.getAsyncTrackers().length){if(b()){window.Piwik.addTracker()}else{_paq={push:function(c){var d=typeof console;if(d!=="undefined"&&console&&console.error){console.error("_paq.push() was used but Piwik tracker was not initialized before the piwik.js file was loaded. Make sure to configure the tracker via _paq.push before loading piwik.js. Alternatively, you can create a tracker via Piwik.addTracker() manually and then use _paq.push but it may not fully work as tracker methods may not be executed in the correct order.",c)}}}}}window.Piwik.trigger("PiwikInitialized",[]);window.Piwik.initialized=true}());(function(){var a=(typeof AnalyticsTracker);if(a==="undefined"){AnalyticsTracker=window.Piwik}}());if(typeof piwik_log!=="function"){piwik_log=function(b,f,d,g){function a(h){try{if(window["piwik_"+h]){return window["piwik_"+h]
-}}catch(i){}return}var c,e=window.Piwik.getTracker(d,f);e.setDocumentTitle(b);e.setCustomData(g);c=a("tracker_pause");if(c){e.setLinkTrackingTimer(c)}c=a("download_extensions");if(c){e.setDownloadExtensions(c)}c=a("hosts_alias");if(c){e.setDomains(c)}c=a("ignore_classes");if(c){e.setIgnoreClasses(c)}e.trackPageView();if(a("install_tracker")){piwik_track=function(i,k,j,h){e.setSiteId(k);e.setTrackerUrl(j);e.trackLink(i,h)};e.enableLinkTracking()}};
-/*!! @license-end */
-}; \ No newline at end of file
+}}catch(i){}return}var c,e=window.Piwik.getTracker(d,f);e.setDocumentTitle(b);e.setCustomData(g);c=a("tracker_pause");if(c){e.setLinkTrackingTimer(c)}c=a("download_extensions");if(c){e.setDownloadExtensions(c)}c=a("hosts_alias");if(c){e.setDomains(c)}c=a("ignore_classes");if(c){e.setIgnoreClasses(c)}e.trackPageView();if(a("install_tracker")){piwik_track=function(i,k,j,h){e.setSiteId(k);e.setTrackerUrl(j);e.trackLink(i,h)};e.enableLinkTracking()}}}
+/*!! @license-end */;
diff --git a/piwik/lang/cs.json b/piwik/lang/cs.json
index cbe3c97..6719638 100644
--- a/piwik/lang/cs.json
+++ b/piwik/lang/cs.json
@@ -20,6 +20,7 @@
"AverageOrderValue": "Průměrná hodnota objednávky",
"AveragePrice": "Průměrná cena",
"AverageQuantity": "Průměrné množství",
+ "AverageX": "Prům. %s",
"BackToPiwik": "Zpět do Matomou",
"Broken": "Rozbité",
"BrokenDownReportDocumentation": "Je členěn do různých hlášení, která jsou zobrazena v dolní části stránky. Vybraný graf můžete zvětšit tak, že na něj kliknete.",
@@ -84,6 +85,7 @@
"ColumnViewedAfterSearchDocumentation": "Počet návštěv této stránky poté, co návštěvník provedl vyhledávání a kliknul na tuto stránku.",
"ColumnVisitDuration": "Doba návštěvy (v sekundách)",
"ColumnVisitsWithConversions": "Návštěvy s převodem",
+ "ComputedMetricAverage": "Prům. %1$s za %2$s",
"ComputedMetricSum": "Celkem %s",
"ComputedMetricMax": "Max %s",
"ComputedMetricMaxDocumentation": "Maximální hodnota pro %s",
@@ -217,6 +219,7 @@
"IP": "IP",
"JsTrackingTag": "JavaScriptový zaznamenávací tag",
"Language": "Jazyk",
+ "Languages": "Jazyky",
"LastDays": "Posledních %s dní (včetně dneška)",
"LastDaysShort": "Posledních %s dní",
"LearnMore": "%1$sdozvědět se více%2$s",
diff --git a/piwik/lang/da.json b/piwik/lang/da.json
index aa7f410..0f016ed 100644
--- a/piwik/lang/da.json
+++ b/piwik/lang/da.json
@@ -9,21 +9,22 @@
"Add": "Tilføj",
"AfterEntry": "efter indtastning her",
"All": "Alle",
- "AllowPiwikArchivingToTriggerBrowser": "Arkiver rapporter når de er set i browseren",
+ "AllowPiwikArchivingToTriggerBrowser": "Arkiver rapporter mens de ses i browseren",
"AllWebsitesDashboard": "Kontrolpanel for alle hjemmesider",
"And": "og",
"API": "API",
"Apply": "Tilføj",
"ArchivingInlineHelp": "For hjemmesider med medium til høj trafik anbefales det at deaktivere Matomo-arkivering udløst fra browseren. I stedet anbefales det at køre et cron job hver time til at behandle Matomo rapporter.",
"ArchivingTriggerDescription": "Til større Matomo installationer anbefales det, at %1$soprette et cron job%2$s til at behandle rapporterne automatisk.",
- "AuthenticationMethodSmtp": "Godkenselsesmetode til SMTP",
+ "AuthenticationMethodSmtp": "Godkendelsesmetode til SMTP",
"AverageOrderValue": "Gennemsnitlig ordreværdi",
- "AveragePrice": "Gennemsnitlige pris",
+ "AveragePrice": "Gennemsnitlig pris",
"AverageQuantity": "Gennemsnitlige mængder",
+ "AverageX": "Gns. %s",
"BackToPiwik": "Tilbage til Matomo",
"Broken": "I stykker",
"BrokenDownReportDocumentation": "er opdelt i forskellige rapporter, som vises i minidiagrammer nederst på siden. Du kan forstørre diagrammerne ved at klikke på den rapport, du gerne se.",
- "Cancel": "Fortryd",
+ "Cancel": "Annuller",
"CannotUnzipFile": "Kan ikke udpakke filen %1$s: %2$s",
"ChangePassword": "Skift adgangskode",
"ChangeTagCloudView": "Bemærk, at du kan få vist rapporten på andre måder end som en emnesky. Brug kontrolelementerne nederst i rapporten for at gøre det.",
@@ -31,6 +32,7 @@
"ChooseLanguage": "Vælg sprog",
"ChoosePeriod": "Vælg periode",
"ClickHere": "Klik her for yderligere oplysninger.",
+ "DoubleClickToChangePeriod": "Dobbeltklik for at anvende denne periode.",
"Close": "Luk",
"ClickToSearch": "Klik for at søge",
"ColumnActionsPerVisit": "Handlinger pr. besøg",
@@ -45,19 +47,19 @@
"ColumnBounceRateDocumentation": "Procentdel af besøg, der kun havde en enkelt sidevisning. Det betyder, at den besøgende forlod webstedet direkte fra indgangen side.",
"ColumnBounces": "Afvisninger",
"ColumnBouncesDocumentation": "Antal besøg, der startede og sluttede på siden. Det betyder, at den besøgende forlod hjemmesiden efter kun at have set denne side.",
- "ColumnConversionRate": "Omregningsfrekvens",
+ "ColumnConversionRate": "Konverteringsfrekvens",
"ColumnConversionRateDocumentation": "Procentdelen af besøg, der udløste en mål konvertering.",
"ColumnDestinationPage": "Destinationsside",
"ColumnEntrances": "Indgange",
"ColumnEntrancesDocumentation": "Antal besøg, der startede på siden.",
- "ColumnExitRate": "Udgangs %",
+ "ColumnExitRate": "Udgangs-%",
"ColumnExitRateDocumentation": "Procentdel af besøg, der forlod hjemmesiden efter at have set denne side.",
"ColumnExits": "Udgange",
"ColumnExitsDocumentation": "Antal besøg, der sluttede på siden.",
"ColumnGenerationTime": "Genereringstid",
"ColumnKeyword": "Søgeord",
"ColumnLabel": "Etiket",
- "ColumnMaxActions": "Max handlinger i et enkelt besøg",
+ "ColumnMaxActions": "Maks. handlinger i et enkelt besøg",
"ColumnNbActions": "Handlinger",
"ColumnNbActionsDocumentation": "Antal handlinger, der udføres af besøgende. Handlinger kan være sidevisninger, filhentninger eller udgående links.",
"ColumnNbUniqVisitors": "Unikke besøgende",
@@ -82,11 +84,12 @@
"ColumnViewedAfterSearchDocumentation": "Antallet af gange denne side er blevet besøgt efter en besøgende lavede en søgning på hjemmesiden, og klikkede på denne side i søgeresultaterne.",
"ColumnVisitDuration": "Besøgsvarighed (i sekunder)",
"ColumnVisitsWithConversions": "Besøg med konverteringer",
+ "ComputedMetricAverage": "Gns. %1$s pr. %2$s",
"ConfigFileIsNotWritable": "Matomo konfigurationsfilen %1$s er skrivebeskyttet, nogle af ændringerne vil ikke blive gemt. %2$s Skift tilladelser til konfigurationsfilen for at gøre den skrivebar.",
"Continue": "Fortsæt",
"ContinueToPiwik": "Fortsæt til Matomo",
- "CurrentlyUsingUnsecureHttp": "Du bruger i øjeblikket Matomo på en usikker HTTP forbindelse, som kan være risikabelt. Vi anbefaler, at du sætter Matomo op til at bruge SSL (HTTPS) for forbedret sikkerhed.",
- "CreatedByUser": "oprettet a %s",
+ "CurrentlyUsingUnsecureHttp": "Du bruger i øjeblikket Matomo på en usikker HTTP-forbindelse, hvilket kan være risikabelt. Vi anbefaler, at du sætter Matomo op til at bruge SSL (HTTPS) for at øge sikkerheden.",
+ "CreatedByUser": "oprettet af %s",
"CurrentMonth": "Denne måned",
"CurrentWeek": "Nuværende uge",
"CurrentYear": "Dette år",
@@ -131,7 +134,7 @@
"EcommerceVisitStatusDesc": "E-handel status ved afslutningen af ​​besøget",
"EcommerceVisitStatusEg": "For eksempel, for at vælge alle besøg, der har lavet en E-handel ordre, vil API-anmodningen indeholde %s",
"Edit": "Rediger",
- "EncryptedSmtpTransport": "Indtast tranportlag krypteringen, som kræves af SMTP serveren.",
+ "EncryptedSmtpTransport": "Indtast tranportlagskrypteringen, som kræves af SMTP-serveren.",
"Error": "Fejl",
"Errors": "Fejl",
"ErrorRequest": "Ups… der var et problem i løbet af anmodningen. Måske serveren havde et midlertidigt problem, eller måske du har anmodet om en rapport med for mange data. Prøv igen. Hvis fejlen opstår gentagne gange %1$skontakt din Matomo administrator%2$s for at få hjælp.",
@@ -144,7 +147,7 @@
"ExceptionConfigurationFilePleaseCheckReadableByUser": "Tjek venligst at %1$s er læsbar for brugeren '%2$s'.",
"ExceptionDatabaseVersion": "%1$s version er %2$s, men Matomo behøver mindst version %3$s.",
"ExceptionDatabaseVersionNewerThanCodebase": "Matomo kodebase kører den gamle version %1$s, og Matomo databasen er allerede blevet opgraderet til den nyere version %2$s.",
- "ExceptionDatabaseVersionNewerThanCodebaseWait": "Måske er Matomo administratoren i øjeblikket ved at færdigbehandle opgraderingsprocessen. Prøv igen om et par minutter.",
+ "ExceptionDatabaseVersionNewerThanCodebaseWait": "Måske er Matomo-administratoren i øjeblikket ved at færdigbehandle opgraderingsprocessen. Prøv igen om et par minutter.",
"ExceptionFileIntegrity": "Integritetstjek mislykkedes: %s",
"ExceptionFilesizeMismatch": "Fil størrelse passer ikke: %1$s (forventet længde: %2$s, fundet: %3$s)",
"ExceptionIncompatibleClientServerVersions": "%1$s klient version er %2$s, som er uforenelig med server version %3$s.",
@@ -185,10 +188,10 @@
"FileIntegrityWarningReuploadBis": "Prøv at uploade alle Matomo filerne i BINARY mode.",
"First": "Første",
"Flatten": "Udjævn",
- "ForExampleShort": "fx.",
+ "ForExampleShort": "fx",
"Forums": "Forum",
"FromReferrer": "fra",
- "GeneralInformation": "General Information",
+ "GeneralInformation": "Generel information",
"GeneralSettings": "Generelle indstillinger",
"GetStarted": "Kom i gang",
"GiveUsYourFeedback": "Tilbagemelding!",
@@ -204,11 +207,12 @@
"IfArchivingIsFastYouCanSetupCronRunMoreOften": "Forudsat arkivering er hurtig på din installation, kan crontab sættes til at køre oftere.",
"InfoFor": "Info om %s",
"Installed": "Installeret",
- "InvalidDateRange": "Ugyldig datointerval, prøv igen",
+ "InvalidDateRange": "Ugyldigt datointerval, prøv igen",
"InvalidResponse": "Modtagende data er ugyldige.",
"IP": "IP",
"JsTrackingTag": "JavaScript sporingskode",
"Language": "Sprog",
+ "Languages": "Sprog",
"LastDays": "Sidste %s dage (inklusiv i dag)",
"LastDaysShort": "Sidste %s dage",
"LearnMore": "%1$sLær mere%2$s",
@@ -232,17 +236,18 @@
"Monthly": "Månedlig",
"MonthlyReport": "månedligt",
"MonthlyReports": "Månedlige rapporter",
- "More": "Mer",
+ "More": "Mere",
"MoreDetails": "Flere detaljer",
"MoreLowerCase": "mere",
"MultiSitesSummary": "Alle hjemmesider",
"Name": "Navn",
"NbActions": "Antal handlinger",
- "NbInteractions": "Antal af interaktioner",
- "NbSearches": "Antal af interne søgning",
+ "NbInteractions": "Antal interaktioner",
+ "NbSearches": "Antal interne søgninger",
"NeedMoreHelp": "Behøver du mere hjælp?",
"Never": "Aldrig",
- "NewReportsWillBeProcessedByCron": "Når Matomo arkivering ikke udløses af browseren, vil nye rapporter blive behandlet af crontab.",
+ "New": "Ny",
+ "NewReportsWillBeProcessedByCron": "Når Matomo-arkivering ikke udløses af browseren, vil nye rapporter blive behandlet af crontab.",
"NewUpdatePiwikX": "Ny opdatering: Matomo %s",
"NewVisitor": "Ny besøgende",
"NewVisits": "Nye besøg",
@@ -275,14 +280,14 @@
"OperationIsNot": "Er ikke",
"OperationLessThan": "Mindre end",
"OperationNotEquals": "Ikke lig med",
- "OperationStartsWith": "Start med",
+ "OperationStartsWith": "Starter med",
"OperationEndsWith": "Slutter med",
"OptionalSmtpPort": "Valgfri: Standard 25 for ukrypteret og TLS SMTP og 465 for SSL SMTP.",
"Options": "Indstillinger",
"Or": "eller",
"OrCancel": "eller %1$s Fortryd %2$s",
"Others": "Andre",
- "Outlink": "Udgående links",
+ "Outlink": "Udgående link",
"Outlinks": "Udgående links",
"OverlayRowActionTooltip": "Se analysedata direkte på hjemmesiden (åbner ny fane)",
"OverlayRowActionTooltipTitle": "Åbn sideoverlejring",
@@ -306,7 +311,7 @@
"PreviousDays": "Forrige %s dage (ikke inklusive i dag)",
"PreviousDaysShort": "Forrige %s dage",
"Price": "Pris",
- "ProductConversionRate": "Produkt konverteringsfrekvens",
+ "ProductConversionRate": "Produktkonverteringsrate",
"ProductRevenue": "Produkt Omsætning",
"Measurable": "Målbar",
"Measurables": "Målbare",
@@ -325,7 +330,7 @@
"ReportGeneratedFrom": "Denne rapport blev genereret med data fra %s.",
"ReportRatioTooltip": "'%1$s' repræsenterer %2$s af %3$s %4$s med %5$s.",
"Reports": "Rapporter",
- "ReportsContainingTodayWillBeProcessedAtMostEvery": "Arkivrapporter højst hvert X sekender",
+ "ReportsContainingTodayWillBeProcessedAtMostEvery": "Arkiver rapporter med højst X sekunders mellemrum",
"RearchiveTimeIntervalOnlyForTodayReports": "Dette berører kun rapporter for i dag (eller et andet datointerval inklusive i dag)",
"ReportsWillBeProcessedAtMostEveryHour": "Rapporterne vil derfor blive behandlet højst hver time.",
"RequestTimedOut": "En anmodning til %s fik timeout. Prøv igen.",
@@ -353,9 +358,9 @@
"SmallTrafficYouCanLeaveDefault": "For hjemmesider med lidt trafik brug standard %s sekunder og få adgang til alle rapporter i realtid.",
"SmtpEncryption": "SMTP-kryptering",
"SmtpPassword": "SMTP-adgangskode",
- "SmtpPort": "SMTP port",
- "SmtpServerAddress": "SMTP server adresse",
- "SmtpUsername": "SMTP brugernavn",
+ "SmtpPort": "SMTP-port",
+ "SmtpServerAddress": "SMTP-serveradresse",
+ "SmtpUsername": "SMTP-brugernavn",
"Source": "Kilde",
"StatisticsAreNotRecorded": "Matomo besøgssporing er i øjeblikket deaktiveret! Genaktiver sporing ved at sætte record_statistics = 1 i config\/config.ini.php filen.",
"Subtotal": "Subtotal",
@@ -382,9 +387,10 @@
"Unknown": "Ukendt",
"Upload": "Overfør",
"UsePlusMinusIconsDocumentation": "Brug plus og minus ikonerne til venstre til at navigere.",
- "UserId": "Bruger ID",
+ "UserId": "Bruger-id",
+ "UserIds": "Bruger-id’er",
"Username": "Brugernavn",
- "UseSMTPServerForEmail": "Brug SMTP server til e-mail",
+ "UseSMTPServerForEmail": "Brug SMTP-server til e-mail",
"Value": "Værdi",
"VBarGraph": "Søjlediagram",
"View": "Vis",
@@ -401,15 +407,16 @@
"VisitsWith": "Besøg med %s",
"VisitorSettings": "Besøgendes indstillinger",
"VisitType": "Besøgstype",
+ "VisitTypes": "Besøgstyper",
"VisitTypeExample": "F. eks., for at vælge alle besøgende, som er vendt tilbage til hjemmesiden, herunder dem, der har købt noget i deres tidligere besøg, vil API-anmodningen indeholde %s",
"Warning": "Advarsel",
"Warnings": "Advarsler",
- "WarningPhpVersionXIsTooOld": "PHP version %s har nået slutningen af ​​sin levetid (EOL). Du opfordres kraftigt til at opgradere til den aktuelle version, fordi brug af denne version kan udsætte dig for sikkerhedshuller og fejl, som er blevet rettet i nyere versioner af PHP.",
+ "WarningPhpVersionXIsTooOld": "PHP-version %s har nået slutningen af ​​sin levetid (EOL). Du opfordres kraftigt til at opgradere til den aktuelle version, fordi brug af denne version kan udsætte dig for sikkerhedshuller og fejl, som er blevet rettet i nyere versioner af PHP.",
"WarningPiwikWillStopSupportingPHPVersion": "Matomo ophører med at understøtte PHP %1$s i den næste store opdatering. Opgrader din PHP mindst PHP %2$s før det er for sent!",
- "YouMustUpgradePhpVersionToReceiveLatestPiwik": "Du skal opgradere din PHP version for at kunne modtage seneste Matomo opdatering.",
- "PiwikCannotBeUpgradedBecausePhpIsTooOld": "Matomo kan ikke opgraderes til seneste større version da din PHP version er for gammel.",
- "PleaseUpgradeYourPhpVersionSoYourPiwikDataStaysSecure": "Opgrader venligst din PHP version til seneste PHP %s så dine Matomo analytics data forbliver sikre.",
- "WarningFileIntegrityNoManifest": "Fil integritetstjek kunne ikke udføres på grund af manglende manifest.inc.php.",
+ "YouMustUpgradePhpVersionToReceiveLatestPiwik": "Du skal opgradere din PHP-version for at kunne installere den seneste Matomo-opdatering.",
+ "PiwikCannotBeUpgradedBecausePhpIsTooOld": "Matomo kan ikke opgraderes til seneste hovedversion, da din PHP-version er for gammel.",
+ "PleaseUpgradeYourPhpVersionSoYourPiwikDataStaysSecure": "Opgrader venligst din PHP-version til seneste PHP %s, så dine Matomo statistikdata forbliver sikre.",
+ "WarningFileIntegrityNoManifest": "Filintegritetstjek kunne ikke udføres på grund af manglende manifest.inc.php.",
"WarningFileIntegrityNoManifestDeployingFromGit": "Hvis du implementerer Matomo fra Git, er meddelelsen normal.",
"WarningFileIntegrityNoMd5file": "Fil integritetstjek kunne ikke gennemføres pga. manglende md5_file () funktion.",
"WarningPasswordStored": "%1$sAdvarsel:%2$s Adgangskoden bliver gemt i konfigurationsfilen synlig for alle, der har adgang til den.",
@@ -442,27 +449,27 @@
"AnonymousAccess": "Anonym adgang",
"AnonymousTracking": "Anonym sporing",
"AskForAnonymousTrackingPermission": "Når aktiveret, vil Matomo Mobile sende anonyme data om brugen til Matomo.org. Formålet er at bruge disse data til at hjælpe Matomo Mobile udviklerne, med at få et indblik i hvordan applikationen bruges. Information som sendes: klik i menuen og på indstillinger, styresystemets navn og version, enhver fejl som vises i Matomo Mobile. Vi sender INGEN af dine analyse data. Disse anonyme data vil aldrig blive offentliggjort. Du kan deaktivere\/aktivere anonym sporing i Indstillinger til enhver tid.",
- "ChooseHttpTimeout": "Vælg HTTP timeoutværdi",
+ "ChooseHttpTimeout": "Vælg HTTP-timeoutværdi",
"ChooseMetric": "Vælg målinger",
"ChooseReport": "Vælg en rapport",
"ChooseSegment": "Vælg segment",
"ConfirmRemoveAccount": "Fjern kontoen?",
- "DefaultReportDate": "Rapport dato",
+ "DefaultReportDate": "Rapportdato",
"EmailUs": "E-mail os",
"EnableGraphsLabel": "Vis grafer",
"EvolutionGraph": "Historisk graf",
"HelpUsToImprovePiwikMobile": "Aktiver anonyme forbrugsdata i Matomo Mobile ?",
"HowtoDeleteAnAccount": "Langt tryk for at fjerne en konto.",
"HowtoDeleteAnAccountOniOS": "Svirp fra venstre til højre for at slette en konto",
- "HowtoLoginAnonymous": "Efterlad brugernavn og kodeord tomt for anonym log ind",
+ "HowtoLoginAnonymous": "Efterlad brugernavn og adgangskode tomme for anonym indlogning",
"HttpIsNotSecureWarning": "Matomo tilladelse token (token_auth) sendes i klar tekst, hvis der bruges \"HTTP\". Af denne grund anbefales HTTPS til sikker transport af data over internettet. Vil du fortsætte?",
- "HttpTimeout": "HTTP Timeout",
+ "HttpTimeout": "HTTP-timeout",
"IncompatiblePiwikVersion": "Matomo versionen er uforenelig med Matomo mobil 2 Opdater Matomo og prøv igen eller installer Matomo Mobile 1",
"LastUpdated": "Sidst opdateret: %s",
"LoadingReport": "Indlæser %s",
"LoginCredentials": "Legitimationsoplysninger",
"LoginToPiwikToChangeSettings": "Log ind på Matomo serveren for at oprette og opdatere hjemmesider, brugere, eller til at ændre Generelle indstillinger som \"Standard rapport\" og \"Standard rapportdato\".",
- "LoginUseHttps": "Brug https",
+ "LoginUseHttps": "Brug HTTPS",
"MultiChartLabel": "Vis minidiagrammer",
"NavigationBack": "Tilbage",
"NetworkError": "Netværksfejl",
@@ -471,26 +478,26 @@
"NetworkNotReachable": "Netværk ikke tilgængeligt",
"NoAccountIsSelected": "Du er nødt til at vælge en konto. Tilføj en ny konto, hvis du ikke har konfigureret en.",
"NoDataShort": "Ingen data",
- "NoPiwikAccount": "Ingen Matomo konto?",
+ "NoPiwikAccount": "Ingen Matomo-konto?",
"NoReportsShort": "Ingen rapporter",
"NoVisitorFound": "Ingen besøgende fundet",
"NoVisitorsShort": "Ingen besøgende",
- "NoWebsiteFound": "Ingen hjemmesider fundet",
+ "NoWebsiteFound": "Ingen hjemmeside fundet",
"NoWebsitesShort": "Ingen websteder",
"PullDownToRefresh": "Træk ned for at opdatere...",
- "PossibleSslError": "Mulig SSL certifikat fejl",
+ "PossibleSslError": "Mulig SSL-certifikatfejl",
"PossibleSslErrorExplanation": "Der opstod en fejl, som kan skyldes et ugyldigt eller selvsigneret certifikat: \"%s\". Log ind virker måske, selvom SSL validering ignoreres, men det er mindre sikker. SSL validering kan til enhver tid ændres i indstillingerne.",
- "IgnoreSslError": "Ignorer SSL fejl",
+ "IgnoreSslError": "Ignorer SSL-fejl",
"RatingDontRemindMe": "Påmind mig ikke",
"RatingNotNow": "Senere",
- "RatingNow": "OK, jeg vil bedømme nu",
+ "RatingNow": "Ok, jeg vil bedømme nu",
"RatingPleaseRateUs": "Matomo Mobile app er gratis software. Vi vil sætte stor pris på, at du bruger 1 minut på at bedømme app'en i %1$s. Hvis du har forslag til nye features eller fejlrapporter, så kontakt %2$s",
"ReleaseToRefresh": "Slip for at opdatere...",
"Reloading": "Genindlæser...",
"RequestTimedOutShort": "Netværk timeout-fejl",
"RestrictedCompatibility": "Begrænset kompatibilitet",
"RestrictedCompatibilityExplanation": "Matomo version %s understøttes ikke fuldt ud af Matomo Mobile 2. Der kan forekomme fejl. Det anbefales enten at opdatere Matomo til den nyeste version eller at bruge Matomo Mobile 1",
- "SaveSuccessError": "Matomo URL eller brugernavn og adgangskode er forkert.",
+ "SaveSuccessError": "Matomo-URL eller brugernavn og adgangskode er forkert.",
"SearchWebsite": "Søg hjemmesider",
"ShowAll": "Vis alle",
"ShowLess": "Vis mindre",
@@ -510,7 +517,7 @@
"ComparingRecords": "Sammenligner %s rækker",
"Documentation": "Klik på målinger for at få vist udviklingen på en stor graf. Brug shift-klik for at vise flere målinger samtidigt.",
"MetricBetweenText": "mellem %1$s og %2$s",
- "MetricChangeText": "%s over perioden",
+ "MetricChangeText": "%s ændring over perioden",
"MetricMinMax": "%1$s varierede mellem %2$s og %3$s over perioden",
"MetricsFor": "Målinger for %s",
"MultiRowEvolutionTitle": "Udviklingen i flere rækker",
diff --git a/piwik/lang/de.json b/piwik/lang/de.json
index 104e9bd..49eeafd 100644
--- a/piwik/lang/de.json
+++ b/piwik/lang/de.json
@@ -173,6 +173,7 @@
"ExceptionInvalidAggregateReportsFormat": "Aggregiertes Berichtsformat '%1$s' ungültig. Versuchen Sie eines der folgenden: %2$s.",
"ExceptionInvalidArchiveTimeToLive": "Die Archivierungszeit von Live-Berichten muss eine Zahl in Sekunden (größer als Null) sein.",
"ExceptionInvalidDateFormat": "Das Datumsformat muss %1$s oder eine andere, von der Funktion %2$s unterstützte Zeichenkette sein. (Besuchen Sie %3$s für nähere Informationen)",
+ "ExceptionInvalidDateBeforeFirstWebsite": "Das Datum '%1$s' ist vor dem Datum an dem die erste Website online ging. Versuchen Sie ein Datum dass nach dem %2$s (Timestamp %3$s) liegt.",
"ExceptionInvalidDateRange": "Das Datum '%1$s' ist keine korrekte Zeitspanne. Es sollte das folgende Format haben: %2$s",
"ExceptionInvalidPeriod": "Der Zeitraum '%1$s' wird nicht unterstützt. Versuchen Sie es stattdessen mit einem der folgenden: %2$s",
"ExceptionInvalidRendererFormat": "Das Renderer-Format '%1$s' ist ungültig. Versuchen Sie stattdessen eines der folgenden Formate: %2$s.",
@@ -218,6 +219,7 @@
"GiveUsYourFeedback": "Feedback geben!",
"Goal": "Ziel",
"GoTo": "Gehe zu %s",
+ "GoTo2": "Gehe zu",
"GraphHelp": "Mehr Informationen über die Darstellung von Graphen in Matomo.",
"HelloUser": "Hallo, %s!",
"Help": "Hilfe",
@@ -440,6 +442,16 @@
"YouMustUpgradePhpVersionToReceiveLatestPiwik": "Sie müssen ihre PHP Version aktualisieren, um das aktuellste Matomo Update zu erhalten.",
"PiwikCannotBeUpgradedBecausePhpIsTooOld": "Matomo kann nicht auf die letzte Hauptversion aktualisiert werden, weil Ihre PHP Version zu alt ist.",
"PleaseUpgradeYourPhpVersionSoYourPiwikDataStaysSecure": "Bitte aktualisieren Sie PHP auf mindestens Version %s damit Ihre Matomo analytics Daten weiterhin sicher sind.",
+ "ValidatorErrorEmptyValue": "Es muss ein Wert angegeben werden.",
+ "ValidatorErrorNotANumber": "Der Wert ist keine Zahl.",
+ "ValidatorErrorNumberTooLow": "Der Wert \"%1$s\" ist zu niedrig. Er muss mindestens %2$s betragen.",
+ "ValidatorErrorNumberTooHigh": "Der Wert \"%1$s\" ist zu hoch. Er sollte höchstens %2$s betragen",
+ "ValidatorErrorCharacterTooShort": "Der Wert enthält \"%1$s\" Zeichen, muss jedoch mindestens %2$s Zeichen enthalten.",
+ "ValidatorErrorNotUrlLike": "Der Wert \"%s\" sieht nicht wie eine URL aus.",
+ "ValidatorErrorNotEmailLike": "Der Wert \"%s\" ist keine gültige E-Mail-Adresse.",
+ "ValidatorErrorNoValidRegex": "Der Wert \"%s\" ist kein gültiger regulärer Ausdruck.",
+ "ValidatorErrorXNotWhitelisted": "Der Wert \"%1$s\" ist nicht erlaubt. Verwenden Sie einen der folgenden Werte: %2$s.",
+ "ValidatorErrorInvalidDateTimeFormat": "Das Datum \"%1$s\" hat nicht das korrekte Format. Bitte verwenden Sie %2$s",
"WarningFileIntegrityNoManifest": "Aufgrund der fehlenden Datei manifest.inc.php konnte die Integritätsprüfung nicht durchgeführt werden.",
"WarningFileIntegrityNoManifestDeployingFromGit": "Wenn Sie Matomo von Git deployen ist diese Nachricht normal.",
"WarningFileIntegrityNoMd5file": "Durch die fehlende md5_file() Funktion konnte die Integritätsprüfung nicht durchgeführt werden.",
diff --git a/piwik/lang/el.json b/piwik/lang/el.json
index c828e52..3307a74 100644
--- a/piwik/lang/el.json
+++ b/piwik/lang/el.json
@@ -219,6 +219,7 @@
"GiveUsYourFeedback": "Έχετε παρατηρήσεις;",
"Goal": "Στόχος",
"GoTo": "Μετάβαση στο %s",
+ "GoTo2": "Μετάβαση σε",
"GraphHelp": "Περισσότερες πληροφορίες για την προβολή γραφικών στο Matomo.",
"HelloUser": "Γεια σου, %s!",
"Help": "Βοήθεια",
@@ -338,6 +339,7 @@
"ProductRevenue": "Πρόσοδος Προϊόντος",
"Measurable": "Μπορεί να μετρηθεί",
"Measurables": "Μπορούν να μετρηθούν",
+ "MeasurableId": "Μετρήσιμο Αναγνωριστικό",
"PurchasedProducts": "Αγορασμένα Προϊόντα",
"Quantity": "Ποσότητα",
"RangeReports": "Προσαρμοσμένα χρονικά εύρη",
@@ -441,6 +443,17 @@
"YouMustUpgradePhpVersionToReceiveLatestPiwik": "Πρέπει να αναβαθμίσετε την έκδοση της PHP σας προτού λάβετε την τελευταία ενημέρωση του Matomo.",
"PiwikCannotBeUpgradedBecausePhpIsTooOld": "Το Matomo δεν μπορεί να αναβαθμιστεί στην τελευταία κύρια έκδοση επειδή η έκδοση της PHP σας είναι πολύ παλιά.",
"PleaseUpgradeYourPhpVersionSoYourPiwikDataStaysSecure": "Ενημερώστε την έκδοση της PHP σας σε τουλάχιστον PHP %s ώστε τα δεδομένα αναλυτικών του Matomo σας να παραμείνουν ασφαλή.",
+ "ValidatorErrorEmptyValue": "Πρέπει να δοθεί τιμή.",
+ "ValidatorErrorNotANumber": "Η τιμή δεν είναι αριθμός.",
+ "ValidatorErrorNumberTooLow": "Η τιμή \"%1$s\" είναι πολύ μικρή. Η τιμή θα πρέπει να είναι τουλάχιστον %2$s.",
+ "ValidatorErrorNumberTooHigh": "Η τιμή \"%1$s\" είναι πολύ μεγάλη. Η τιμή θα πρέπει να είναι το πολύ %2$s.",
+ "ValidatorErrorCharacterTooShort": "Η τιμή περιέχει \"%1$s\" χαρακτήρες αλλά πρέπει να περιέχει τουλάχιστον %2$s χαρακτήρες.",
+ "ValidatorErrorCharacterTooLong": "Η τιμή περιέχει \"%1$s\" χαρακτήρες αλλά πρέπει να περιέχει το πολύ %2$s χαρακτήρες.",
+ "ValidatorErrorNotUrlLike": "Η τιμή \"%s\" δεν φαίνεται να είναι διεύθυνση URL.",
+ "ValidatorErrorNotEmailLike": "Η τιμή \"%s\" δεν φαίνεται να είναι έγκυρη διεύθυνση ηλεκτρονικού ταχυδρομείου.",
+ "ValidatorErrorNoValidRegex": "Η τιμή \"%s\" δεν είναι έγκυρη κανονική έκφραση.",
+ "ValidatorErrorXNotWhitelisted": "Η τιμή \"%1$s\" δεν επιτρέπεται, χρησιμοποιήστε ένα από τα: %2$s.",
+ "ValidatorErrorInvalidDateTimeFormat": "Η ημερομηνία \"%1$s\" δεν έχει έγκυρη μορφή, παρακαλούμε χρησιμοποιήστε %2$s",
"WarningFileIntegrityNoManifest": "Ο έλεγχος ακεραιότητας αρχείου δεν μπορεί να πραγματοποιηθεί επειδή λείπει το αρχείο manifest.inc.php.",
"WarningFileIntegrityNoManifestDeployingFromGit": "Αν εγκαθιστάτε το Matomo από το Git, το μήνυμα αυτό είναι φυσιολογικό.",
"WarningFileIntegrityNoMd5file": "Ο έλεγχος ακεραιότητας αρχείου δεν μπορεί να ολοκληρωθεί γιατί είναι ανενεργή η συνάρτηση md5_file().",
diff --git a/piwik/lang/en.json b/piwik/lang/en.json
index 5610706..601cb56 100644
--- a/piwik/lang/en.json
+++ b/piwik/lang/en.json
@@ -219,6 +219,7 @@
"GiveUsYourFeedback": "Give us Feedback!",
"Goal": "Goal",
"GoTo": "Go to %s",
+ "GoTo2": "Go to",
"GraphHelp": "More information about displaying graphs in Matomo.",
"HelloUser": "Hello, %s!",
"Help": "Help",
@@ -338,6 +339,7 @@
"ProductRevenue": "Product Revenue",
"Measurable": "Measurable",
"Measurables": "Measurables",
+ "MeasurableId": "Measurable ID",
"PurchasedProducts": "Purchased Products",
"Quantity": "Quantity",
"RangeReports": "Custom date ranges",
@@ -441,6 +443,17 @@
"YouMustUpgradePhpVersionToReceiveLatestPiwik": "You must upgrade your PHP version in order to receive the latest Matomo update.",
"PiwikCannotBeUpgradedBecausePhpIsTooOld": "Matomo cannot be upgraded to the latest major version because your PHP version is too old.",
"PleaseUpgradeYourPhpVersionSoYourPiwikDataStaysSecure": "Please upgrade your PHP version to at least PHP %s so your Matomo analytics data stays secure.",
+ "ValidatorErrorEmptyValue": "A value needs to be provided.",
+ "ValidatorErrorNotANumber": "The value is not a number.",
+ "ValidatorErrorNumberTooLow": "The value \"%1$s\" is too low. The value needs to be at least %2$s.",
+ "ValidatorErrorNumberTooHigh": "The value \"%1$s\" is too high. The value should be at most %2$s",
+ "ValidatorErrorCharacterTooShort": "The value contains \"%1$s\" characters but needs to contain at least %2$s characters.",
+ "ValidatorErrorCharacterTooLong": "The value contains \"%1$s\" characters but should contain at most %2$s characters.",
+ "ValidatorErrorNotUrlLike": "The value \"%s\" does not look like a URL.",
+ "ValidatorErrorNotEmailLike": "The value \"%s\" does not look like a valid email.",
+ "ValidatorErrorNoValidRegex": "The value \"%s\" is not a valid regular expression.",
+ "ValidatorErrorXNotWhitelisted": "The value \"%1$s\" is not allowed, use one of: %2$s.",
+ "ValidatorErrorInvalidDateTimeFormat": "The date \"%1$s\" does not have the correct format, please use %2$s",
"WarningFileIntegrityNoManifest": "File integrity check could not be performed due to missing manifest.inc.php.",
"WarningFileIntegrityNoManifestDeployingFromGit": "If you are deploying Matomo from Git, this message is normal.",
"WarningFileIntegrityNoMd5file": "File integrity check could not be completed due to missing md5_file() function.",
diff --git a/piwik/lang/es.json b/piwik/lang/es.json
index 4881707..f3384d1 100644
--- a/piwik/lang/es.json
+++ b/piwik/lang/es.json
@@ -20,6 +20,7 @@
"AverageOrderValue": "Valor promedio por pedido",
"AveragePrice": "Precio promedio",
"AverageQuantity": "Cantidad promedio",
+ "AverageX": "Promedio %s",
"BackToPiwik": "Volver a Matomo",
"Broken": "Roto",
"BrokenDownReportDocumentation": "Está dividido entre varios reportes, que están mostrados en pequeños gráficos al final de la página. Puede agrandar los gráficos haciendo clic en el reporte que le gustaría ver.",
@@ -31,6 +32,7 @@
"ChooseLanguage": "Elegir idioma",
"ChoosePeriod": "Elegir periodo",
"ClickHere": "Haga clic aquí para más información.",
+ "DoubleClickToChangePeriod": "Doble clic para aplicar este período.",
"Close": "Cerrar",
"ClickToSearch": "Clic para buscar",
"ColumnActionsPerVisit": "Acciones por visita",
@@ -55,6 +57,7 @@
"ColumnExits": "Salidas",
"ColumnExitsDocumentation": "Número de visitas que finalizaron en esta página.",
"ColumnGenerationTime": "Tiempo de generación",
+ "ColumnPageGenerationTime": "Tiempo de generación de la página",
"ColumnKeyword": "Palabra clave",
"ColumnLabel": "Etiqueta",
"ColumnMaxActions": "Acciones máximas en una visita",
@@ -82,6 +85,8 @@
"ColumnViewedAfterSearchDocumentation": "El número de veces que esta página fue visitada después que un visitante hizo una búsqueda en su sitio, he hizo clic en esta página en los resultados de la búsqueda.",
"ColumnVisitDuration": "Duración de la visita (en segundos)",
"ColumnVisitsWithConversions": "Visitas con conversiones",
+ "ComputedMetricAverage": "Promedio %1$s por %2$s",
+ "ComputedMetricCountDocumentation": "Número de %s",
"ConfigFileIsNotWritable": "El archivo de configuración de Matomo %1$s no tiene permisos de escritura, algunos de los cambios no se guardarán. %2$s Por favor, cambie los permisos del archivo de configuración para que sea modificable.",
"Continue": "Continuar",
"ContinueToPiwik": "Ir a Matomo",
@@ -209,6 +214,7 @@
"IP": "IP",
"JsTrackingTag": "Código de seguimiento JavaScript",
"Language": "Idioma",
+ "Languages": "Idiomas",
"LastDays": "Últimos %s días (incluyendo hoy)",
"LastDaysShort": "Últimos %s días",
"LearnMore": "%1$saprender más%2$s",
@@ -242,6 +248,7 @@
"NbSearches": "Número de búsquedas internas",
"NeedMoreHelp": "Necesita más ayuda?",
"Never": "Nunca",
+ "New": "Nuevo",
"NewReportsWillBeProcessedByCron": "Cuando el archivado de Matomo no es activado por el navegador, los nuevos informes serán procesados por el crontab.",
"NewUpdatePiwikX": "Nueva actualización: Matomo %s",
"NewVisitor": "Nuevo visitante",
@@ -294,6 +301,7 @@
"Password": "Contraseña",
"Period": "Periodo",
"Piechart": "Gráfica circular",
+ "MatomoIsACollaborativeProjectYouCanContributeAndDonateNextRelease": "%1$sMatomo%2$s, anteriormente conocido como Piwik, es un proyecto colaboratido dispuesto para tí por los %7$sMatomo team%8$s miebros y por muchos más colaboradores alrededor del mundo. <br\/> Si eres un fan de Matomo, puedes ayudar: averigua %3$s¿Cómo participar en Matomo?%4$s, o %5$s¡Haz una donación ahora mismo%6$s para ayudar con los fondos para la siguiente gran versión de Matomo!",
"PiwikXIsAvailablePleaseNotifyPiwikAdmin": "%1$s está disponible. Por favor alerte al %2$s administrador Matomo%3$s.",
"PiwikXIsAvailablePleaseUpdateNow": "Matomo %1$s está disponible. %2$s ¡Por favor, actualice ahora!%3$s (ver %4$scambios%5$s).",
"PleaseContactYourPiwikAdministrator": "Por favor contáctese con su administrador Matomo.",
@@ -383,6 +391,7 @@
"Upload": "Subir",
"UsePlusMinusIconsDocumentation": "Use los iconos de más y menos a la izquierda para navegar.",
"UserId": "ID de usuario",
+ "UserIds": "IDs de Usuario",
"Username": "Nombre de usuario",
"UseSMTPServerForEmail": "Use el servidor SMTP para el correo electrónico",
"Value": "Valor",
@@ -390,6 +399,7 @@
"View": "Ver",
"ViewDocumentationFor": "Ver documentación para %1$s",
"Visit": "Visita",
+ "VisitId": "ID de visitas",
"VisitConvertedGoal": "Visitas que han cumplido como mínimo un Objetivo",
"VisitConvertedGoalId": "Visita convirtió una Meta ID específica",
"VisitConvertedNGoals": "La visita cumplió %s objetivos",
@@ -397,10 +407,12 @@
"Visitor": "Visitante",
"VisitorID": "ID del visitante",
"VisitorIP": "IP del visitante",
+ "VisitorIPs": "IPs de visitantes",
"Visitors": "Visitantes",
"VisitsWith": "Visitas con %s",
"VisitorSettings": "Configuración de visitantes",
"VisitType": "Tipo de visita",
+ "VisitTypes": "Tipos de visitas",
"VisitTypeExample": "Por ejemplo, para seleccionar todos los visitantes que han vuelto al sitio, incluyendo a aquellos que han comprado algo en sus anteriores visitas, la solicitud de la API debe contener %s",
"Warning": "Advertencia",
"Warnings": "Advertencias",
@@ -428,6 +440,7 @@
"YearsDays": "%1$s años %2$s días",
"Yes": "Sí",
"YouAreCurrentlyUsing": "Actualmente está utilizando Matomo %s.",
+ "YouAreViewingDemoMessage": "Estás viendo una demo de %1$sMatomo%2$s",
"YouMustBeLoggedIn": "Debe ingresar para acceder a esta funcionalidad.",
"YourChangesHaveBeenSaved": "Se han guardado los cambios."
},
diff --git a/piwik/lang/fi.json b/piwik/lang/fi.json
index 71607aa..1bdee9b 100644
--- a/piwik/lang/fi.json
+++ b/piwik/lang/fi.json
@@ -3,7 +3,7 @@
"12HourClock": "12-tuntinen kello",
"24HourClock": "24-tuntinen kello",
"AbandonedCarts": "Hylätyt ostoskorit",
- "AboutPiwikX": "Tietoja Matomoistä %s",
+ "AboutPiwikX": "Tietoja Matomosta %s",
"Action": "Toiminto",
"Actions": "Toiminnot",
"Add": "Lisää",
@@ -21,7 +21,7 @@
"AveragePrice": "Keskihinta",
"AverageQuantity": "Määrän keskiarvo",
"AverageX": "Keskimäärin %s",
- "BackToPiwik": "Takaisin Matomoiin",
+ "BackToPiwik": "Takaisin Matomoon",
"Broken": "Rikki",
"BrokenDownReportDocumentation": "Se on pilkottu eri raportteihin, jotka näytetään viivagraafeina sivun alareunassa. Voit suurentaa kuvaajan klikkaamalla raporttia jonka haluat nähdä.",
"Cancel": "Peruuta",
@@ -86,10 +86,15 @@
"ColumnViewedAfterSearchDocumentation": "Kävijöiden lukumäärä tällä sivulla, kun kävijä on tehnyt haun verkkosivullasi ja klikannut tätä sivua hakutuloksissa.",
"ColumnVisitDuration": "Käynnin kesto (sekunteja)",
"ColumnVisitsWithConversions": "Käyntejä, joissa keskusteluja",
+ "ComputedMetricAverage": "Keskim. %1$s \/ %2$s",
+ "ComputedMetricAverageDocumentation": "Keskiarvo \"%1$s\" \/ \"%2$s\".",
"ComputedMetricAverageShortDocumentation": "Keskiarvo \"%1$s\":stä.",
"ComputedMetricRate": "%s Tapahtumatiheys",
"ComputedMetricRateDocumentation": "Suhde \"%1$s\" \/ \"%2$s\".",
+ "ComputedMetricRateShortDocumentation": "Prosenttiosuus arvosta \"%1$s\".",
+ "ComputedMetricCountDocumentation": "Lukumäärä %s",
"ComputedMetricSum": "Yhteensä %s",
+ "ComputedMetricSumDocumentation": "Kokonaismäärä (summa) %s:stä",
"ComputedMetricMax": "Maks. %s",
"ComputedMetricMaxDocumentation": "Korkein arvo %s:lle",
"ComputedMetricMin": "Väh. %s",
@@ -97,10 +102,10 @@
"ComputedMetricUniqueCount": "Uniikki %s",
"ComputedMetricUniqueCountDocumentation": "Uniikki määrä %s:stä",
"ComputedMetricCountWithValue": "Arvot %s:llä",
- "ConfigFileIsNotWritable": "Matomo asetustiedostoon %1$s ei voi kirjoittaa. Kaikkia muutoksia ei voi tallentaa. %2$s Muuta tiedoston oikeuksia niin, että kirjoittaminen on sallittua.",
+ "ConfigFileIsNotWritable": "Matomon asetustiedostoon %1$s ei voi kirjoittaa. Kaikkia muutoksia ei voi tallentaa. %2$s Muuta tiedoston oikeuksia niin, että kirjoittaminen on sallittua.",
"Continue": "Jatka",
- "ContinueToPiwik": "Jatka Matomoiin",
- "CurrentlyUsingUnsecureHttp": "Käytät Matomoiä epäturvallisen HTTP:n yli. Suosittelemme säätämään Matomoin käyttämään SSL:ää (HTTPS).",
+ "ContinueToPiwik": "Jatka Matomoon",
+ "CurrentlyUsingUnsecureHttp": "Käytät Matomoa epäturvallisen HTTP:n yli. Suosittelemme säätämään Matomon käyttämään SSL:ää (HTTPS).",
"CreatedByUser": "luoja %s",
"CurrentMonth": "Tämä kuukausi",
"CurrentWeek": "Tämä viikko",
@@ -149,17 +154,17 @@
"EncryptedSmtpTransport": "Valitse SMTP-palvelimen vaatima salaus.",
"Error": "Virhe",
"Errors": "Virheet",
- "ErrorRequest": "Hups, ongelma pyyntöäsi käsitellessä. Palvelimella on voinut olla tilapäinen ongelma tai ehkä pyytämäsi raportti sisälsi liikaa tietoa. Ole hyvä ja yritä uudelleen. Jos ongelma jatkuu, ole hyvä ja %1$sota yhteyttä Matomo ylläpitäjääsi%2$s avun saamiseksi.",
+ "ErrorRequest": "Hups, ongelma pyyntöäsi käsitellessä. Palvelimella on voinut olla tilapäinen ongelma tai ehkä pyytämäsi raportti sisälsi liikaa tietoa. Ole hyvä ja yritä uudelleen. Jos ongelma jatkuu, ole hyvä ja %1$sota yhteyttä Matomo-ylläpitäjääsi%2$s avun saamiseksi.",
"EvolutionOverPeriod": "Muutos aikajaksolla",
"EvolutionSummaryGeneric": "%1$s %2$s:ssa verrattuna %3$s %4$s:ssa. Evoluutio: %5$s",
- "ExceptionContactSupportGeneric": "Jos ongelma jatkuu, ole hyvä ja %1$sota yhteyttä Matomo ylläpitääsi%2$s avun saamiseksi.",
+ "ExceptionContactSupportGeneric": "Jos ongelma jatkuu, ole hyvä ja %1$sota yhteyttä Matomo-ylläpitäjääsi%2$s avun saamiseksi.",
"ExceptionCheckUserHasSuperUserAccessOrIsTheUser": "Käyttäjän täytyy olla joko Superkäyttäjä tai '%s' käyttäjä.",
"ExceptionConfigurationFileNotFound": "Asetustiedostoa {%s} ei ole.",
"ExceptionConfigurationFileExistsButNotReadable": "Asetustiedosto %s vaikuttaisi olevan olemassa, mutta Matomo ei voi lukea sitä.",
"ExceptionConfigurationFilePleaseCheckReadableByUser": "Tarkista, että %1$s on käyttäjän '%2$s' luettavissa.",
"ExceptionDatabaseVersion": "Ohjelman %1$s versio on %2$s mutta Matomo tarvitsee vähintään %3$s",
"ExceptionDatabaseVersionNewerThanCodebase": "Matomo-asennuksesi ohjelmisto on vanha versio (%1$s) ja havaitsimme tietokantasi olevan jo päivitetty uuteen versioon (%2$s).",
- "ExceptionDatabaseVersionNewerThanCodebaseWait": "Ehkä Matomo ylläpito on juuri viimeistelemässä päivitysprosessia. Ole hyvä ja yritä uudelleen muutaman minuutin kuluttua.",
+ "ExceptionDatabaseVersionNewerThanCodebaseWait": "Ehkä Matomon ylläpito on juuri viimeistelemässä päivitysprosessia. Ole hyvä ja yritä uudelleen muutaman minuutin kuluttua.",
"ExceptionFileIntegrity": "Eheystarkistus epäonnistui: %s",
"ExceptionFilesizeMismatch": "Tiedoston koko ei täsmää: %1$s (koon pitäisi olla %2$s, oli %3$s).",
"ExceptionIncompatibleClientServerVersions": "Ohjelman %1$s asiakasohjelman versio on %2$s, joka on epäyhteensopiva palvelimen version %3$s kanssa.",
@@ -197,7 +202,7 @@
"Faq": "UKK",
"FileIntegrityWarning": "Tiedostojen eheystarkistus epäonnistui ja raportoi jokusen virheen. Sinun olisi suotavaa korjata tämä asiaa ja päivittää tätä sivua sivua, kunnes virheitä ei enää näy.",
"FileIntegrityWarningReupload": "Alla näkyvä virheet voivat johtua Matomo-tiedostojen keskenjääneestä tai kokonaan epäonnistuneesta siirrosta.",
- "FileIntegrityWarningReuploadBis": "Yritä siirtää kaikki Matomo tiedostot uudelleen BINARY-tilassa.",
+ "FileIntegrityWarningReuploadBis": "Yritä siirtää kaikki Matomo-tiedostot uudelleen BINARY-tilassa.",
"First": "Ensimmäinen",
"Flatten": "Puristettu",
"ForExampleShort": "esim.",
@@ -209,10 +214,10 @@
"GiveUsYourFeedback": "Anna palautetta!",
"Goal": "Tavoite",
"GoTo": "Mene %s",
- "GraphHelp": "Lisätietoa Matomoin kuvaajista.",
+ "GraphHelp": "Lisätietoa Matomon kuvaajista.",
"HelloUser": "Hei, %s!",
"Help": "Apua",
- "HelpTranslatePiwik": "Haluatko %1$sauttaa parantamaan Matomoin käännöksiä?%2$s?",
+ "HelpTranslatePiwik": "Haluatko %1$sauttaa parantamaan Matomon käännöksiä?%2$s?",
"Hide": "piilota",
"HoursMinutes": "%1$s tuntia %2$s minuuttia",
"Id": "Id",
@@ -259,7 +264,7 @@
"NeedMoreHelp": "Tarvitsetko lisää apua?",
"Never": "Ei koskaan",
"New": "Uusi",
- "NewReportsWillBeProcessedByCron": "Kun Matomoin arkistointia ei käynnistetä selaimesta, uudet raportit luodaan cronilla.",
+ "NewReportsWillBeProcessedByCron": "Kun Matomon arkistointia ei käynnistetä selaimesta, uudet raportit luodaan cronilla.",
"NewUpdatePiwikX": "Uusi päivitys: Matomo %s",
"NewVisitor": "Uusi kävijä",
"NewVisits": "Uudet käynnit",
@@ -311,7 +316,7 @@
"Password": "Salasana",
"Period": "Aikaväli",
"Piechart": "Ympyräkaavio",
- "PiwikXIsAvailablePleaseNotifyPiwikAdmin": "%1$s on saatavissa. Ole hyvä ja ilmoita %2$sMatomo ylläpitäjälle%3$s.",
+ "PiwikXIsAvailablePleaseNotifyPiwikAdmin": "%1$s on saatavissa. Ole hyvä ja ilmoita %2$sMatomo-ylläpitäjälle%3$s.",
"PiwikXIsAvailablePleaseUpdateNow": "Matomo %1$s on saatavilla. %2$s Päivitä nyt!%3$s (katso %4$s muutokset%5$s).",
"PleaseContactYourPiwikAdministrator": "Ota yhteyttä Matomo-ylläpitääjäsi.",
"PleaseSpecifyValue": "Ole hyvä ja anna arvo kentälle '%s'.",
@@ -374,7 +379,7 @@
"SmtpServerAddress": "SMTP-palvelimen osoite",
"SmtpUsername": "SMTP-käyttäjätunnus",
"Source": "Lähde",
- "StatisticsAreNotRecorded": "Matomo Kävijäseuranta ei ole käytössä tällä hetkellä! Aktivoi seuranta asettamalla record_statistics = 1 tiedostossa config\/config.ini.php.",
+ "StatisticsAreNotRecorded": "Matomon Kävijäseuranta ei ole käytössä tällä hetkellä! Aktivoi seuranta asettamalla record_statistics = 1 tiedostossa config\/config.ini.php.",
"Subtotal": "Yhteensä",
"Summary": "Yhteenveto",
"Table": "Taulukko",
@@ -428,10 +433,10 @@
"WarningPhpVersionXIsTooOld": "Käyttämäsi PHP versio %s on ohittanut EOL (End of Life) ajankohdan. Suosittelemme vakavasti ohjelmiston päivittämistä uudempaan versioon, sillä käyttämäsi versio voi altistaa sivuston tietoturva-aukoille ja virheille, jotka ovat korjattu PHP:n uudemmissa versioissa.",
"WarningPiwikWillStopSupportingPHPVersion": "Matomo lopettaa PHP-version %1$s tukemisen seuraavassa isommassa julkaisussa. Päivitä PHP vähintään versioon %2$s, ennen kuin on liian myöhäistä!",
"YouMustUpgradePhpVersionToReceiveLatestPiwik": "Sinun täytyy päivittää PHP-versiosi saadaksesi uusimmat Matomo-päivitykset.",
- "PiwikCannotBeUpgradedBecausePhpIsTooOld": "Matomo ei voi päivittää viimeisimpään versioon, koska PHP-versiosi on liian vanha.",
+ "PiwikCannotBeUpgradedBecausePhpIsTooOld": "Matomoa ei voi päivittää viimeisimpään versioon, koska PHP-versiosi on liian vanha.",
"PleaseUpgradeYourPhpVersionSoYourPiwikDataStaysSecure": "Päivitä PHP-versiosi ainakin versioon %s, jotta Matomo-analytiikkatietosi pysyvät turvassa.",
"WarningFileIntegrityNoManifest": "Tiedostojen eheystarkistusta ei voida suorittaa, tiedosto manifest.inc.php puuttuu",
- "WarningFileIntegrityNoManifestDeployingFromGit": "Jos olet ottanut Matomoin käyttöön Git-järjestelmän kautta, tämä viesti on normaali.",
+ "WarningFileIntegrityNoManifestDeployingFromGit": "Jos olet ottanut Matomon käyttöön Git-järjestelmän kautta, tämä viesti on normaali.",
"WarningFileIntegrityNoMd5file": "Tiedostojen eheystarkistusta ei voi suorittaa, funktio md5_file() puuttuu.",
"WarningPasswordStored": "%1$sVaroitus:%2$s tämä salasana tallennetaan salaamattomana asetustiedostoon. Kaikki joilla on pääsy tiedostoon näkevät salasanan.",
"Website": "Verkkosivu",
@@ -454,11 +459,11 @@
},
"Mobile": {
"AboutPiwikMobile": "Tietoja Matomo Mobilesta",
- "AccessUrlLabel": "Matomo osoite",
+ "AccessUrlLabel": "Matomon osoite",
"Account": "Tili",
"Accounts": "Tilit",
"AddAccount": "Lisää tili",
- "AddPiwikDemo": "Lisää Matomoin demo",
+ "AddPiwikDemo": "Lisää Matomon demo",
"Advanced": "Lisäasetukset",
"AnonymousAccess": "Anonyymi pääsy",
"AnonymousTracking": "Anonyymi seuranta",
@@ -478,11 +483,11 @@
"HowtoLoginAnonymous": "Anonyymi kirjautuminen: jätä käyttäjätunnus ja salasana tyhjiksi",
"HttpIsNotSecureWarning": "Matomo autentikointiavain (\"token_auth\") lähetetään salaamattomana jos käytät http:tä. Suosittelemmen salatun https:n käyttöä. Haluatko jatkaa?",
"HttpTimeout": "HTTP:n aikakatkaisu",
- "IncompatiblePiwikVersion": "Käyttämäsi Matomo versio ei sovi yhteen Matomo Mobile 2 kanssa. Päivitä Matomo asennuksesi ja yritä uudestaan tai asenna Matomo Mobile 1.",
+ "IncompatiblePiwikVersion": "Käyttämäsi Matomo-versio ei sovi yhteen Matomo Mobile 2:n kanssa. Päivitä Matomo-asennuksesi ja yritä uudestaan tai asenna Matomo Mobile 1.",
"LastUpdated": "Edellinen päivitys: %s",
"LoadingReport": "Ladataan %s",
"LoginCredentials": "Kirjautumistiedot",
- "LoginToPiwikToChangeSettings": "Kirjaudu Matomo palvelimeesi luodaksesi ja päivittääksesi verkkosivuja, käyttäjiä tai muuttaaksesi yleisiä asetuksia, kuten \"Oletuksena tallennettavat raportit\".",
+ "LoginToPiwikToChangeSettings": "Kirjaudu Matomo-palvelimeesi luodaksesi ja päivittääksesi verkkosivuja, käyttäjiä tai muuttaaksesi yleisiä asetuksia, kuten \"Oletuksena tallennettavat raportit\".",
"LoginUseHttps": "Käytä https:ää",
"MultiChartLabel": "Näytä pikkukuvat",
"NavigationBack": "Takaisin",
@@ -510,7 +515,7 @@
"Reloading": "Päivitetään...",
"RequestTimedOutShort": "Verkon aikakatkaisuvirhe",
"RestrictedCompatibility": "Rajoitettu yhteensopivuus",
- "RestrictedCompatibilityExplanation": "Käyttämäsi Matomo versio %s ei ole täysin Matomo Mobile 2:n tukema. Saatat havaita joitain bugeja. Suosittelemme joko päivittämään Matomoin viimeisimpään versioon tai käyttämään Matomo Mobile 1:tä.",
+ "RestrictedCompatibilityExplanation": "Käyttämäsi Matomo-versio %s ei ole täysin Matomo Mobile 2:n tukema. Saatat havaita joitain bugeja. Suosittelemme joko päivittämään Matomon viimeisimpään versioon tai käyttämään Matomo Mobile 1:tä.",
"SaveSuccessError": "Tarkista asetukset",
"SearchWebsite": "Hae verkkosivuja",
"ShowAll": "Näytä kaikki",
diff --git a/piwik/lang/pl.json b/piwik/lang/pl.json
index 3a86bae..e3a6899 100644
--- a/piwik/lang/pl.json
+++ b/piwik/lang/pl.json
@@ -219,6 +219,7 @@
"GiveUsYourFeedback": "Zdaj relację!",
"Goal": "Cel",
"GoTo": "Idź do %s",
+ "GoTo2": "Idź do",
"GraphHelp": "Więcej informacji na temat wyświetlania grafik znajdziesz na stronach Matomo.",
"HelloUser": "Witaj, %s!",
"Help": "Pomoc",
@@ -338,6 +339,7 @@
"ProductRevenue": "Przychody ze sprzedaży produktów",
"Measurable": "Wartość mierzalna",
"Measurables": "Wartości mierzalne",
+ "MeasurableId": "ID wskaźnika",
"PurchasedProducts": "Zakupione produkty",
"Quantity": "Ilość",
"RangeReports": "Niestandardowe zakresy dat",
@@ -441,6 +443,16 @@
"YouMustUpgradePhpVersionToReceiveLatestPiwik": "Musisz zaktualizować PHP, aby zainstalować najnowszą aktualizację Matomoa.",
"PiwikCannotBeUpgradedBecausePhpIsTooOld": "Matomo nie może zostać zaktualizowany do najnowszej wersji, ponieważ Twoja wersja PHP jest za stara.",
"PleaseUpgradeYourPhpVersionSoYourPiwikDataStaysSecure": "Proszę zaktualizuj PHP przynajmniej do wersji %s, tak aby statystyki Matomo pozostały bezpieczne.",
+ "ValidatorErrorEmptyValue": "Należy podać wartość.",
+ "ValidatorErrorNotANumber": "Wartość nie jest liczbą.",
+ "ValidatorErrorNumberTooLow": "Wartość \"%1$s\" jest za mała. Wartość musi być większa lub równa od %2$s.",
+ "ValidatorErrorNumberTooHigh": "Wartość \"%1$s\" jest za duża. Wartość nie powinna być większa niż %2$s",
+ "ValidatorErrorCharacterTooShort": "Wartość zawiera \"%1$s\" znaków, a musi zawierać przynajmniej %2$s znaków.",
+ "ValidatorErrorCharacterTooLong": "Wartość zawiera \"%1$s\" znaków, a powinna zawierać do %2$s znaków.",
+ "ValidatorErrorNotUrlLike": "Wartość \"%s\" nie jest poprawnym adresem URL.",
+ "ValidatorErrorNotEmailLike": "Wartość \"%s\" nie jest poprawnym adresem email.",
+ "ValidatorErrorXNotWhitelisted": "Wartość \"%1$s\" nie jest dozwolona, proszę użyj jednej z: %2$s.",
+ "ValidatorErrorInvalidDateTimeFormat": "Data \"%1$s\" zapisana jest w niepoprawnym formacie, proszę użyj %2$s",
"WarningFileIntegrityNoManifest": "Weryfikacja integralności plików nie mogła zostać przeprowadzona z powodu braku pliku manifest.inc.php.",
"WarningFileIntegrityNoManifestDeployingFromGit": "W przypadku wdrażania Matomo z Git, komunikat ten jest prawidłowy.",
"WarningFileIntegrityNoMd5file": "Weryfikacja integralności plików nie mogła zostać zakończona z powodu braku funkcji md5_file().",
diff --git a/piwik/lang/pt-br.json b/piwik/lang/pt-br.json
index ac14872..cb59018 100644
--- a/piwik/lang/pt-br.json
+++ b/piwik/lang/pt-br.json
@@ -453,7 +453,7 @@
"EvolutionGraph": "Gráfico histórico",
"HelpUsToImprovePiwikMobile": "Gostaria de ativar o acompanhamento de uso anônimo em Matomo Mobile?",
"HowtoDeleteAnAccount": "Clique para remover a conta.",
- "HowtoDeleteAnAccountOniOS": "Deslize para a esquerda para a direita para apagar uma conta",
+ "HowtoDeleteAnAccountOniOS": "Deslize da direita para a esquerda para apagar uma conta",
"HowtoLoginAnonymous": "Deixe nome de usuário e senha em branco para fazer login anônimo",
"HttpIsNotSecureWarning": "Seu token de autorização Matomo (token_auth) é enviada em texto simples, se você usar 'HTTP'. Por este motivo, recomendamos HTTPS para o transporte seguro de dados através da internet. Você quer continuar?",
"HttpTimeout": "Timeout HTTP",
diff --git a/piwik/lang/sq.json b/piwik/lang/sq.json
index 36ed60a..e508ae9 100644
--- a/piwik/lang/sq.json
+++ b/piwik/lang/sq.json
@@ -219,6 +219,7 @@
"GiveUsYourFeedback": "Jepnani Përshtypjet!",
"Goal": "Objektiv",
"GoTo": "Shko te %s",
+ "GoTo2": "Shko te",
"GraphHelp": "Më tepër të dhëna rreth shfaqjes së grafikëve në Matomo.",
"HelloUser": "Tungjatjeta, %s!",
"Help": "Ndihmë",
@@ -441,6 +442,16 @@
"YouMustUpgradePhpVersionToReceiveLatestPiwik": "Që të merrni përditësimin më të ri të Matomo-s duhet të përmirësoni versionin tuaj të PHP-së.",
"PiwikCannotBeUpgradedBecausePhpIsTooOld": "Mamoto s’përmirësohet dot me versionin më të ri kryesor, ngaqë versioni juaj për PHP-në është shumë i vjetër.",
"PleaseUpgradeYourPhpVersionSoYourPiwikDataStaysSecure": "Ju lutemi, përmirësoni versionin tuaj për PHP-në të paktën me PHP %s që kështu të dhënat tuaja analitike Matomo të mbeten të sigurta.",
+ "ValidatorErrorEmptyValue": "Duhet dhënë një vlerë.",
+ "ValidatorErrorNotANumber": "Vlera s’është numër.",
+ "ValidatorErrorNumberTooLow": "Vlera \"%1$s\" është shumë e vogël. Vlera duhet të jetë të paktën %2$s.",
+ "ValidatorErrorNumberTooHigh": "Vlera \"%1$s\" është shumë e madhe. Vlera duhet të jetë e shumta %2$s",
+ "ValidatorErrorCharacterTooShort": "Vlera përmban \"%1$s\" shenja, por duhet të përmbajë të paktën %2$s shenja.",
+ "ValidatorErrorCharacterTooLong": "Vlera përmban \"%1$s\" shenja, por duhet të përmbajë të paktën %2$s shenja.",
+ "ValidatorErrorNotUrlLike": "Vlera \"%s\" nuk duket si URL.",
+ "ValidatorErrorNotEmailLike": "Vlera \"%s\" s’duket si email i vlefshëm.",
+ "ValidatorErrorXNotWhitelisted": "Vlera \"%1$s\" s’është e lejuar, përdorni një nga: %2$s.",
+ "ValidatorErrorInvalidDateTimeFormat": "Data \"%1$s\" s’është në formatin e saktë, ju lutemi, përdorni %2$s",
"WarningFileIntegrityNoManifest": "Kontrolli i pacenueshmërisë së kartelës s’u krye dot për shkak të mungesës së manifest.inc.php.",
"WarningFileIntegrityNoManifestDeployingFromGit": "Nëse po kryeni instalim të Matomo-s nga Git, ky mesazh është normal.",
"WarningFileIntegrityNoMd5file": "Kontrolli i pacenueshmërisë së kartelës nuk u plotësua dot për shkak të mungesës së funksionit md5_file().",
diff --git a/piwik/lang/tr.json b/piwik/lang/tr.json
index aa3131f..defb8b9 100644
--- a/piwik/lang/tr.json
+++ b/piwik/lang/tr.json
@@ -219,6 +219,7 @@
"GiveUsYourFeedback": "Geri Bildirimde Bulunun!",
"Goal": "Hedef",
"GoTo": "%s ögesine git",
+ "GoTo2": "Şuraya Git",
"GraphHelp": "Matomo çizelgelerinin görüntülenmesi hakkında ayrıntılı bilgi.",
"HelloUser": "Merhaba, %s!",
"Help": "Yardım",
@@ -338,6 +339,7 @@
"ProductRevenue": "Ürün Geliri",
"Measurable": "Ölçülebilir",
"Measurables": "Ölçülebilirler",
+ "MeasurableId": "Ölçülebilir Kod",
"PurchasedProducts": "Satın Alınan Ürünler",
"Quantity": "Adet",
"RangeReports": "Özel tarih aralıkları",
@@ -441,6 +443,16 @@
"YouMustUpgradePhpVersionToReceiveLatestPiwik": "Son Matomo güncellemesini alabilmek için PHP sürümünüzü yükseltmelisiniz.",
"PiwikCannotBeUpgradedBecausePhpIsTooOld": "PHP sürümünüz çok eski olduğundan Matomo sonraki ana sürüme güncellenemez.",
"PleaseUpgradeYourPhpVersionSoYourPiwikDataStaysSecure": "Matomo istatistik verllerinizin güvende kalması için en az PHP %s sürümüne yükseltin.",
+ "ValidatorErrorEmptyValue": "Bir değer belirtilmelidir.",
+ "ValidatorErrorNotANumber": "Değer bir sayı değil.",
+ "ValidatorErrorNumberTooLow": "\"%1$s\" değeri çok küçük. Değer en az %2$s olmalı.",
+ "ValidatorErrorNumberTooHigh": "\"%1$s\" değeri çok büyük. Değer en fazla %2$s olmalı.",
+ "ValidatorErrorCharacterTooShort": "Değerde \"%1$s\" karakter var ancak en az %2$s karakter olmalı.",
+ "ValidatorErrorCharacterTooLong": "Değerde \"%1$s\" karakter var ancak en fazla %2$s karakter olmalı.",
+ "ValidatorErrorNotUrlLike": "\"%s\" değeri geçerli bir İnternet adresi gibi görünmüyor.",
+ "ValidatorErrorNotEmailLike": "\"%s\" değeri geçerli bir e-posta adresi gibi görünmüyor.",
+ "ValidatorErrorXNotWhitelisted": "\"%1$s\" değeri kullanılamaz. Şunlardan birini kullanın: %2$s.",
+ "ValidatorErrorInvalidDateTimeFormat": "\"%1$s\" tarih biçimi geçersiz. Lütfen %2$s biçimini kullanın",
"WarningFileIntegrityNoManifest": "manifest.inc.php dosyası bulunamadığı için dosya bütünlüğü denetimi yapılamadı.",
"WarningFileIntegrityNoManifestDeployingFromGit": "Matomo uygulamasını Git üzerinden yüklüyorsanız bu ileti normaldir.",
"WarningFileIntegrityNoMd5file": "md5_file() işlevi bulunamadığı için dosya bütünlüğü denetimi yapılamadı.",
diff --git a/piwik/libs/Zend/Db/Adapter/Mysqli.php b/piwik/libs/Zend/Db/Adapter/Mysqli.php
index 84dd9ca..e94ec26 100644
--- a/piwik/libs/Zend/Db/Adapter/Mysqli.php
+++ b/piwik/libs/Zend/Db/Adapter/Mysqli.php
@@ -299,9 +299,21 @@ class Zend_Db_Adapter_Mysqli extends Zend_Db_Adapter_Abstract
$this->_connection = mysqli_init();
+ $enable_ssl = false;
+ $ssl_options = array (
+ 'ssl_ca' => null,
+ 'ssl_ca_path' => null,
+ 'ssl_cert' => null,
+ 'ssl_cipher' => null,
+ 'ssl_key' => null,
+ );
+
if(!empty($this->_config['driver_options'])) {
foreach($this->_config['driver_options'] as $option=>$value) {
- if(is_string($option)) {
+ if(array_key_exists($option, $ssl_options)) {
+ $ssl_options[$option] = $value;
+ $enable_ssl = true;
+ } elseif(is_string($option)) {
// Suppress warnings here
// Ignore it if it's not a valid constant
$option = @constant(strtoupper($option));
@@ -312,6 +324,28 @@ class Zend_Db_Adapter_Mysqli extends Zend_Db_Adapter_Abstract
}
}
+
+ if ($enable_ssl) {
+ mysqli_ssl_set(
+ $this->_connection,
+ $ssl_options['ssl_key'],
+ $ssl_options['ssl_cert'],
+ $ssl_options['ssl_ca'],
+ $ssl_options['ssl_ca_path'],
+ $ssl_options['ssl_cipher']
+ );
+ }
+
+ $flags = null;
+ if ($enable_ssl) {
+ $flags = MYSQLI_CLIENT_SSL;
+ if (!empty($this->_config['driver_options']['ssl_no_verify'])
+ && defined('MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT')
+ ) {
+ $flags = MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT;
+ }
+ }
+
// Suppress connection warnings here.
// Throw an exception instead.
$_isConnected = @mysqli_real_connect(
@@ -320,7 +354,9 @@ class Zend_Db_Adapter_Mysqli extends Zend_Db_Adapter_Abstract
$this->_config['username'],
$this->_config['password'],
$this->_config['dbname'],
- $port
+ $port,
+ $socket = null,
+ $enable_ssl ? $flags : null
);
if ($_isConnected === false || mysqli_connect_errno()) {
diff --git a/piwik/piwik.js b/piwik/piwik.js
index e7624d6..67f62fe 100644
--- a/piwik/piwik.js
+++ b/piwik/piwik.js
@@ -8,7 +8,7 @@
* @license https://piwik.org/free-software/bsd/ BSD-3 Clause (also in js/LICENSE.txt)
* @license magnet:?xt=urn:btih:c80d50af7d3db9be66a4d0a86db0286e4fd33292&dn=bsd-3-clause.txt BSD-3-Clause
*/
-if(typeof JSON_PIWIK!=="object"&&typeof window.JSON==="object"&&window.JSON.stringify&&window.JSON.parse){JSON_PIWIK=window.JSON}else{(function(){var a={};
+;if(typeof JSON_PIWIK!=="object"&&typeof window.JSON==="object"&&window.JSON.stringify&&window.JSON.parse){JSON_PIWIK=window.JSON}else{(function(){var a={};
/*!! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */
(function(){var c=typeof define==="function"&&define.amd;var e={"function":true,object:true};var h=e[typeof a]&&a&&!a.nodeType&&a;var i=e[typeof window]&&window||this,b=h&&e[typeof module]&&module&&!module.nodeType&&typeof global=="object"&&global;if(b&&(b.global===b||b.window===b||b.self===b)){i=b}function j(ab,V){ab||(ab=i.Object());V||(V=i.Object());
var K=ab.Number||i.Number,R=ab.String||i.String,x=ab.Object||i.Object,S=ab.Date||i.Date,T=ab.SyntaxError||i.SyntaxError,aa=ab.TypeError||i.TypeError,J=ab.Math||i.Math,Y=ab.JSON||i.JSON;if(typeof Y=="object"&&Y){V.stringify=Y.stringify;V.parse=Y.parse}var n=x.prototype,u=n.toString,r,m,L;var B=new S(-3509827334573292);try{B=B.getUTCFullYear()==-109252&&B.getUTCMonth()===0&&B.getUTCDate()===1&&B.getUTCHours()==10&&B.getUTCMinutes()==37&&B.getUTCSeconds()==6&&B.getUTCMilliseconds()==708}catch(v){}function o(ac){if(o[ac]!==L){return o[ac]}var ad;if(ac=="bug-string-char-index"){ad="a"[0]!="a"}else{if(ac=="json"){ad=o("json-stringify")&&o("json-parse")}else{var ak,ah='{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';if(ac=="json-stringify"){var ai=V.stringify,aj=typeof ai=="function"&&B;if(aj){(ak=function(){return 1}).toJSON=ak;try{aj=ai(0)==="0"&&ai(new K())==="0"&&ai(new R())=='""'&&ai(u)===L&&ai(L)===L&&ai()===L&&ai(ak)==="1"&&ai([ak])=="[1]"&&ai([L])=="[null]"&&ai(null)=="null"&&ai([L,u,null])=="[null,null,null]"&&ai({a:[ak,true,false,null,"\x00\b\n\f\r\t"]})==ah&&ai(null,ak)==="1"&&ai([1,2],null,1)=="[\n 1,\n 2\n]"&&ai(new S(-8640000000000000))=='"-271821-04-20T00:00:00.000Z"'&&ai(new S(8640000000000000))=='"+275760-09-13T00:00:00.000Z"'&&ai(new S(-62198755200000))=='"-000001-01-01T00:00:00.000Z"'&&ai(new S(-1))=='"1969-12-31T23:59:59.999Z"'
@@ -18,60 +18,60 @@ var I="000000";var t=function(ac,ad){return(I+(ad||0)).slice(-ac)};var z="\\u00"
}else{at=null}}else{if(typeof at.toJSON=="function"&&((ae!=N&&ae!=O&&ae!=E)||r.call(at,"toJSON"))){at=at.toJSON(ai)}}}if(ag){at=ag.call(aA,ai,at)}if(at===null){return"null"}ae=u.call(at);if(ae==A){return""+at}else{if(ae==N){return at>-1/0&&at<1/0?""+at:"null"}else{if(ae==O){return C(""+at)}}}if(typeof at=="object"){for(af=aj.length;af--;){if(aj[af]===at){throw aa()}}aj.push(at);ar=[];av=ac;ac+=ax;if(ae==E){for(ah=0,af=at.length;ah<af;ah++){ad=p(ah,at,ag,al,ax,ac,aj);ar.push(ad===L?"null":ad)}ao=ar.length?(ax?"[\n"+ac+ar.join(",\n"+ac)+"\n"+av+"]":("["+ar.join(",")+"]")):"[]"}else{m(al||at,function(aC){var aB=p(aC,at,ag,al,ax,ac,aj);if(aB!==L){ar.push(C(aC)+":"+(ax?" ":"")+aB)}});ao=ar.length?(ax?"{\n"+ac+ar.join(",\n"+ac)+"\n"+av+"}":("{"+ar.join(",")+"}")):"{}"}aj.pop();return ao}};V.stringify=function(ac,ae,af){var ad,al,aj,ai;if(e[typeof ae]&&ae){if((ai=u.call(ae))==U){al=ae}else{if(ai==E){aj={};for(var ah=0,ag=ae.length,ak;ah<ag;ak=ae[ah++],((ai=u.call(ak)),ai==O||ai==N)&&(aj[ak]=1)){}}}}if(af){if((ai=u.call(af))==N){if((af-=af%1)>0){for(ad="",af>10&&(af=10);
ad.length<af;ad+=" "){}}}else{if(ai==O){ad=af.length<=10?af:af.slice(0,10)}}}return p("",(ak={},ak[""]=ac,ak),al,aj,ad,"",[])}}if(!o("json-parse")){var M=R.fromCharCode;var l={92:"\\",34:'"',47:"/",98:"\b",116:"\t",110:"\n",102:"\f",114:"\r"};var G,X;var H=function(){G=X=null;throw T()};var y=function(){var ah=X,af=ah.length,ag,ae,ac,ai,ad;while(G<af){ad=ah.charCodeAt(G);switch(ad){case 9:case 10:case 13:case 32:G++;break;case 123:case 125:case 91:case 93:case 58:case 44:ag=F?ah.charAt(G):ah[G];G++;return ag;case 34:for(ag="@",G++;G<af;){ad=ah.charCodeAt(G);if(ad<32){H()}else{if(ad==92){ad=ah.charCodeAt(++G);switch(ad){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:ag+=l[ad];G++;break;case 117:ae=++G;for(ac=G+4;G<ac;G++){ad=ah.charCodeAt(G);if(!(ad>=48&&ad<=57||ad>=97&&ad<=102||ad>=65&&ad<=70)){H()}}ag+=M("0x"+ah.slice(ae,G));break;default:H()}}else{if(ad==34){break}ad=ah.charCodeAt(G);ae=G;while(ad>=32&&ad!=92&&ad!=34){ad=ah.charCodeAt(++G)}ag+=ah.slice(ae,G)}}}if(ah.charCodeAt(G)==34){G++;
return ag}H();default:ae=G;if(ad==45){ai=true;ad=ah.charCodeAt(++G)}if(ad>=48&&ad<=57){if(ad==48&&((ad=ah.charCodeAt(G+1)),ad>=48&&ad<=57)){H()}ai=false;for(;G<af&&((ad=ah.charCodeAt(G)),ad>=48&&ad<=57);G++){}if(ah.charCodeAt(G)==46){ac=++G;for(;ac<af&&((ad=ah.charCodeAt(ac)),ad>=48&&ad<=57);ac++){}if(ac==G){H()}G=ac}ad=ah.charCodeAt(G);if(ad==101||ad==69){ad=ah.charCodeAt(++G);if(ad==43||ad==45){G++}for(ac=G;ac<af&&((ad=ah.charCodeAt(ac)),ad>=48&&ad<=57);ac++){}if(ac==G){H()}G=ac}return +ah.slice(ae,G)}if(ai){H()}if(ah.slice(G,G+4)=="true"){G+=4;return true}else{if(ah.slice(G,G+5)=="false"){G+=5;return false}else{if(ah.slice(G,G+4)=="null"){G+=4;return null}}}H()}}return"$"};var W=function(ad){var ac,ae;if(ad=="$"){H()}if(typeof ad=="string"){if((F?ad.charAt(0):ad[0])=="@"){return ad.slice(1)}if(ad=="["){ac=[];for(;;ae||(ae=true)){ad=y();if(ad=="]"){break}if(ae){if(ad==","){ad=y();if(ad=="]"){H()}}else{H()}}if(ad==","){H()}ac.push(W(ad))}return ac}else{if(ad=="{"){ac={};for(;;ae||(ae=true)){ad=y();
-if(ad=="}"){break}if(ae){if(ad==","){ad=y();if(ad=="}"){H()}}else{H()}}if(ad==","||typeof ad!="string"||(F?ad.charAt(0):ad[0])!="@"||y()!=":"){H()}ac[ad.slice(1)]=W(y())}return ac}}H()}return ad};var P=function(ae,ad,af){var ac=w(ae,ad,af);if(ac===L){delete ae[ad]}else{ae[ad]=ac}};var w=function(af,ae,ag){var ad=af[ae],ac;if(typeof ad=="object"&&ad){if(u.call(ad)==E){for(ac=ad.length;ac--;){P(ad,ac,ag)}}else{m(ad,function(ah){P(ad,ah,ag)})}}return ag.call(af,ae,ad)};V.parse=function(ae,af){var ac,ad;G=0;X=""+ae;ac=W(y());if(y()!="$"){H()}G=X=null;return af&&u.call(af)==U?w((ad={},ad[""]=ac,ad),"",af):ac}}}V.runInContext=j;return V}if(h&&!c){j(i,h)}else{var f=i.JSON,k=i.JSON3,d=false;var g=j(i,(i.JSON3={noConflict:function(){if(!d){d=true;i.JSON=f;i.JSON3=k;f=k=null}return g}}));i.JSON={parse:g.parse,stringify:g.stringify}}if(c){define(function(){return g})}}).call(this);JSON_PIWIK=a})()}if(typeof _paq!=="object"){_paq=[]}if(typeof window.Piwik!=="object"){window.Piwik=(function(){var r,b={},x={},F=document,h=navigator,V=screen,S=window,i=S.performance||S.mozPerformance||S.msPerformance||S.webkitPerformance,t=S.encodeURIComponent,R=S.decodeURIComponent,l=unescape,H=[],D,e,ac=[],m=false;
-function p(aj){try{return R(aj)}catch(ak){return unescape(aj)}}function I(ak){var aj=typeof ak;return aj!=="undefined"}function z(aj){return typeof aj==="function"}function U(aj){return typeof aj==="object"}function w(aj){return typeof aj==="string"||aj instanceof String}function A(ak){if(!ak){return true}var aj;var al=true;for(aj in ak){if(Object.prototype.hasOwnProperty.call(ak,aj)){al=false}}return al}function af(aj){var ak=typeof console;if(ak!=="undefined"&&console&&console.error){console.error(aj)}}function ab(){var ao,an,aq,ak,aj;for(ao=0;ao<arguments.length;ao+=1){aj=null;if(arguments[ao]&&arguments[ao].slice){aj=arguments[ao].slice()}ak=arguments[ao];aq=ak.shift();var ap,al;var am=w(aq)&&aq.indexOf("::")>0;if(am){ap=aq.split("::");al=ap[0];aq=ap[1];if("object"===typeof e[al]&&"function"===typeof e[al][aq]){e[al][aq].apply(e[al],ak)}else{if(aj){ac.push(aj)}}}else{for(an=0;an<H.length;an++){if(w(aq)){al=H[an];var ar=aq.indexOf(".")>0;if(ar){ap=aq.split(".");if(al&&"object"===typeof al[ap[0]]){al=al[ap[0]];
-aq=ap[1]}else{if(aj){ac.push(aj);break}}}if(al[aq]){al[aq].apply(al,ak)}else{var at="The method '"+aq+'\' was not found in "_paq" variable. Please have a look at the Piwik tracker documentation: https://developer.piwik.org/api-reference/tracking-javascript';af(at);if(!ar){throw new TypeError(at)}}if(aq==="addTracker"){break}if(aq==="setTrackerUrl"||aq==="setSiteId"){break}}else{aq.apply(H[an],ak)}}}}}function ai(am,al,ak,aj){if(am.addEventListener){am.addEventListener(al,ak,aj);return true}if(am.attachEvent){return am.attachEvent("on"+al,ak)}am["on"+al]=ak}function n(aj){if(F.readyState==="complete"){aj()}else{if(S.addEventListener){S.addEventListener("load",aj)}else{if(S.attachEvent){S.attachEvent("onload",aj)}}}}function q(am){var aj=false;if(F.attachEvent){aj=F.readyState==="complete"}else{aj=F.readyState!=="loading"}if(aj){am();return}var al;if(F.addEventListener){ai(F,"DOMContentLoaded",function ak(){F.removeEventListener("DOMContentLoaded",ak,false);if(!aj){aj=true;am()}})}else{if(F.attachEvent){F.attachEvent("onreadystatechange",function ak(){if(F.readyState==="complete"){F.detachEvent("onreadystatechange",ak);
-if(!aj){aj=true;am()}}});if(F.documentElement.doScroll&&S===S.top){(function ak(){if(!aj){try{F.documentElement.doScroll("left")}catch(an){setTimeout(ak,0);return}aj=true;am()}}())}}}ai(S,"load",function(){if(!aj){aj=true;am()}},false)}function Y(ak,ap,aq){if(!ak){return""}var aj="",am,al,an,ao;for(am in b){if(Object.prototype.hasOwnProperty.call(b,am)){ao=b[am]&&"function"===typeof b[am][ak];if(ao){al=b[am][ak];an=al(ap||{},aq);if(an){aj+=an}}}}return aj}function ad(){var aj;m=true;Y("unload");if(r){do{aj=new Date()}while(aj.getTimeAlias()<r)}}function o(al,ak){var aj=F.createElement("script");aj.type="text/javascript";aj.src=al;if(aj.readyState){aj.onreadystatechange=function(){var am=this.readyState;if(am==="loaded"||am==="complete"){aj.onreadystatechange=null;ak()}}}else{aj.onload=ak}F.getElementsByTagName("head")[0].appendChild(aj)}function J(){var aj="";try{aj=S.top.document.referrer}catch(al){if(S.parent){try{aj=S.parent.document.referrer}catch(ak){aj=""}}}if(aj===""){aj=F.referrer
-}return aj}function s(aj){var al=new RegExp("^([a-z]+):"),ak=al.exec(aj);return ak?ak[1]:null}function d(aj){var al=new RegExp("^(?:(?:https?|ftp):)/*(?:[^@]+@)?([^:/#]+)"),ak=al.exec(aj);return ak?ak[1]:aj}function ae(ak,aj){ak=String(ak);return ak.lastIndexOf(aj,0)===0}function Q(ak,aj){ak=String(ak);return ak.indexOf(aj,ak.length-aj.length)!==-1}function y(ak,aj){ak=String(ak);return ak.indexOf(aj)!==-1}function g(ak,aj){ak=String(ak);return ak.substr(0,ak.length-aj)}function E(am,al,ao){am=String(am);if(!ao){ao=""}var aj=am.indexOf("#");var ap=am.length;if(aj===-1){aj=ap}var an=am.substr(0,aj);var ak=am.substr(aj,ap-aj);if(an.indexOf("?")===-1){an+="?"}else{if(!Q(an,"?")){an+="&"}}return an+t(al)+"="+t(ao)+ak}function k(ak,al){ak=String(ak);if(ak.indexOf("?"+al+"=")===-1&&ak.indexOf("&"+al+"=")===-1){return ak}var am=ak.indexOf("?");if(am===-1){return ak}var aj=ak.substr(am+1);var aq=ak.substr(0,am);if(aj){var ar="";var au=aj.indexOf("#");if(au!==-1){ar=aj.substr(au+1);aj=aj.substr(0,au)
-}var an;var ap=aj.split("&");var ao=ap.length-1;for(ao;ao>=0;ao--){an=ap[ao].split("=")[0];if(an===al){ap.splice(ao,1)}}var at=ap.join("&");if(at){aq=aq+"?"+at}if(ar){aq+="#"+ar}}return aq}function f(al,ak){var aj="[\\?&#]"+ak+"=([^&#]*)";var an=new RegExp(aj);var am=an.exec(al);return am?R(am[1]):""}function a(aj){if(aj&&String(aj)===aj){return aj.replace(/^\s+|\s+$/g,"")}return aj}function C(aj){return unescape(t(aj))}function ah(az){var al=function(aF,aE){return(aF<<aE)|(aF>>>(32-aE))},aA=function(aH){var aF="",aG,aE;for(aG=7;aG>=0;aG--){aE=(aH>>>(aG*4))&15;aF+=aE.toString(16)}return aF},ao,aC,aB,ak=[],at=1732584193,aq=4023233417,ap=2562383102,an=271733878,am=3285377520,ay,ax,aw,av,au,aD,aj,ar=[];az=C(az);aj=az.length;for(aC=0;aC<aj-3;aC+=4){aB=az.charCodeAt(aC)<<24|az.charCodeAt(aC+1)<<16|az.charCodeAt(aC+2)<<8|az.charCodeAt(aC+3);ar.push(aB)}switch(aj&3){case 0:aC=2147483648;break;case 1:aC=az.charCodeAt(aj-1)<<24|8388608;break;case 2:aC=az.charCodeAt(aj-2)<<24|az.charCodeAt(aj-1)<<16|32768;
-break;case 3:aC=az.charCodeAt(aj-3)<<24|az.charCodeAt(aj-2)<<16|az.charCodeAt(aj-1)<<8|128;break}ar.push(aC);while((ar.length&15)!==14){ar.push(0)}ar.push(aj>>>29);ar.push((aj<<3)&4294967295);for(ao=0;ao<ar.length;ao+=16){for(aC=0;aC<16;aC++){ak[aC]=ar[ao+aC]}for(aC=16;aC<=79;aC++){ak[aC]=al(ak[aC-3]^ak[aC-8]^ak[aC-14]^ak[aC-16],1)}ay=at;ax=aq;aw=ap;av=an;au=am;for(aC=0;aC<=19;aC++){aD=(al(ay,5)+((ax&aw)|(~ax&av))+au+ak[aC]+1518500249)&4294967295;au=av;av=aw;aw=al(ax,30);ax=ay;ay=aD}for(aC=20;aC<=39;aC++){aD=(al(ay,5)+(ax^aw^av)+au+ak[aC]+1859775393)&4294967295;au=av;av=aw;aw=al(ax,30);ax=ay;ay=aD}for(aC=40;aC<=59;aC++){aD=(al(ay,5)+((ax&aw)|(ax&av)|(aw&av))+au+ak[aC]+2400959708)&4294967295;au=av;av=aw;aw=al(ax,30);ax=ay;ay=aD}for(aC=60;aC<=79;aC++){aD=(al(ay,5)+(ax^aw^av)+au+ak[aC]+3395469782)&4294967295;au=av;av=aw;aw=al(ax,30);ax=ay;ay=aD}at=(at+ay)&4294967295;aq=(aq+ax)&4294967295;ap=(ap+aw)&4294967295;an=(an+av)&4294967295;am=(am+au)&4294967295}aD=aA(at)+aA(aq)+aA(ap)+aA(an)+aA(am);
-return aD.toLowerCase()}function X(al,aj,ak){if(!al){al=""}if(!aj){aj=""}if(al==="translate.googleusercontent.com"){if(ak===""){ak=aj}aj=f(aj,"u");al=d(aj)}else{if(al==="cc.bingj.com"||al==="webcache.googleusercontent.com"||al.slice(0,5)==="74.6."){aj=F.links[0].href;al=d(aj)}}return[al,aj,ak]}function K(ak){var aj=ak.length;if(ak.charAt(--aj)==="."){ak=ak.slice(0,aj)}if(ak.slice(0,2)==="*."){ak=ak.slice(1)}if(ak.indexOf("/")!==-1){ak=ak.substr(0,ak.indexOf("/"))}return ak}function ag(ak){ak=ak&&ak.text?ak.text:ak;if(!w(ak)){var aj=F.getElementsByTagName("title");if(aj&&I(aj[0])){ak=aj[0].text}}return ak}function O(aj){if(!aj){return[]}if(!I(aj.children)&&I(aj.childNodes)){return aj.children}if(I(aj.children)){return aj.children}return[]}function T(ak,aj){if(!ak||!aj){return false}if(ak.contains){return ak.contains(aj)}if(ak===aj){return true}if(ak.compareDocumentPosition){return !!(ak.compareDocumentPosition(aj)&16)}return false}function L(al,am){if(al&&al.indexOf){return al.indexOf(am)
-}if(!I(al)||al===null){return -1}if(!al.length){return -1}var aj=al.length;if(aj===0){return -1}var ak=0;while(ak<aj){if(al[ak]===am){return ak}ak++}return -1}function j(al){if(!al){return false}function aj(an,ao){if(S.getComputedStyle){return F.defaultView.getComputedStyle(an,null)[ao]}if(an.currentStyle){return an.currentStyle[ao]}}function am(an){an=an.parentNode;while(an){if(an===F){return true}an=an.parentNode}return false}function ak(ap,aw,an,at,aq,au,ar){var ao=ap.parentNode,av=1;if(!am(ap)){return false}if(9===ao.nodeType){return true}if("0"===aj(ap,"opacity")||"none"===aj(ap,"display")||"hidden"===aj(ap,"visibility")){return false}if(!I(aw)||!I(an)||!I(at)||!I(aq)||!I(au)||!I(ar)){aw=ap.offsetTop;aq=ap.offsetLeft;at=aw+ap.offsetHeight;an=aq+ap.offsetWidth;au=ap.offsetWidth;ar=ap.offsetHeight}if(al===ap&&(0===ar||0===au)&&"hidden"===aj(ap,"overflow")){return false}if(ao){if(("hidden"===aj(ao,"overflow")||"scroll"===aj(ao,"overflow"))){if(aq+av>ao.offsetWidth+ao.scrollLeft||aq+au-av<ao.scrollLeft||aw+av>ao.offsetHeight+ao.scrollTop||aw+ar-av<ao.scrollTop){return false
-}}if(ap.offsetParent===ao){aq+=ao.offsetLeft;aw+=ao.offsetTop}return ak(ao,aw,an,at,aq,au,ar)}return true}return ak(al)}var aa={htmlCollectionToArray:function(al){var aj=[],ak;if(!al||!al.length){return aj}for(ak=0;ak<al.length;ak++){aj.push(al[ak])}return aj},find:function(aj){if(!document.querySelectorAll||!aj){return[]}var ak=document.querySelectorAll(aj);return this.htmlCollectionToArray(ak)},findMultiple:function(al){if(!al||!al.length){return[]}var ak,am;var aj=[];for(ak=0;ak<al.length;ak++){am=this.find(al[ak]);aj=aj.concat(am)}aj=this.makeNodesUnique(aj);return aj},findNodesByTagName:function(ak,aj){if(!ak||!aj||!ak.getElementsByTagName){return[]}var al=ak.getElementsByTagName(aj);return this.htmlCollectionToArray(al)},makeNodesUnique:function(aj){var ao=[].concat(aj);aj.sort(function(aq,ap){if(aq===ap){return 0}var at=L(ao,aq);var ar=L(ao,ap);if(at===ar){return 0}return at>ar?-1:1});if(aj.length<=1){return aj}var ak=0;var am=0;var an=[];var al;al=aj[ak++];while(al){if(al===aj[ak]){am=an.push(ak)
-}al=aj[ak++]||null}while(am--){aj.splice(an[am],1)}return aj},getAttributeValueFromNode:function(an,al){if(!this.hasNodeAttribute(an,al)){return}if(an&&an.getAttribute){return an.getAttribute(al)}if(!an||!an.attributes){return}var am=(typeof an.attributes[al]);if("undefined"===am){return}if(an.attributes[al].value){return an.attributes[al].value}if(an.attributes[al].nodeValue){return an.attributes[al].nodeValue}var ak;var aj=an.attributes;if(!aj){return}for(ak=0;ak<aj.length;ak++){if(aj[ak].nodeName===al){return aj[ak].nodeValue}}return null},hasNodeAttributeWithValue:function(ak,aj){var al=this.getAttributeValueFromNode(ak,aj);return !!al},hasNodeAttribute:function(al,aj){if(al&&al.hasAttribute){return al.hasAttribute(aj)}if(al&&al.attributes){var ak=(typeof al.attributes[aj]);return"undefined"!==ak}return false},hasNodeCssClass:function(al,aj){if(al&&aj&&al.className){var ak=typeof al.className==="string"?al.className.split(" "):[];if(-1!==L(ak,aj)){return true}}return false},findNodesHavingAttribute:function(an,al,aj){if(!aj){aj=[]
-}if(!an||!al){return aj}var am=O(an);if(!am||!am.length){return aj}var ak,ao;for(ak=0;ak<am.length;ak++){ao=am[ak];if(this.hasNodeAttribute(ao,al)){aj.push(ao)}aj=this.findNodesHavingAttribute(ao,al,aj)}return aj},findFirstNodeHavingAttribute:function(al,ak){if(!al||!ak){return}if(this.hasNodeAttribute(al,ak)){return al}var aj=this.findNodesHavingAttribute(al,ak);if(aj&&aj.length){return aj[0]}},findFirstNodeHavingAttributeWithValue:function(am,al){if(!am||!al){return}if(this.hasNodeAttributeWithValue(am,al)){return am}var aj=this.findNodesHavingAttribute(am,al);if(!aj||!aj.length){return}var ak;for(ak=0;ak<aj.length;ak++){if(this.getAttributeValueFromNode(aj[ak],al)){return aj[ak]}}},findNodesHavingCssClass:function(an,am,aj){if(!aj){aj=[]}if(!an||!am){return aj}if(an.getElementsByClassName){var ao=an.getElementsByClassName(am);return this.htmlCollectionToArray(ao)}var al=O(an);if(!al||!al.length){return[]}var ak,ap;for(ak=0;ak<al.length;ak++){ap=al[ak];if(this.hasNodeCssClass(ap,am)){aj.push(ap)
-}aj=this.findNodesHavingCssClass(ap,am,aj)}return aj},findFirstNodeHavingClass:function(al,ak){if(!al||!ak){return}if(this.hasNodeCssClass(al,ak)){return al}var aj=this.findNodesHavingCssClass(al,ak);if(aj&&aj.length){return aj[0]}},isLinkElement:function(ak){if(!ak){return false}var aj=String(ak.nodeName).toLowerCase();var am=["a","area"];var al=L(am,aj);return al!==-1},setAnyAttribute:function(ak,aj,al){if(!ak||!aj){return}if(ak.setAttribute){ak.setAttribute(aj,al)}else{ak[aj]=al}}};var v={CONTENT_ATTR:"data-track-content",CONTENT_CLASS:"piwikTrackContent",CONTENT_NAME_ATTR:"data-content-name",CONTENT_PIECE_ATTR:"data-content-piece",CONTENT_PIECE_CLASS:"piwikContentPiece",CONTENT_TARGET_ATTR:"data-content-target",CONTENT_TARGET_CLASS:"piwikContentTarget",CONTENT_IGNOREINTERACTION_ATTR:"data-content-ignoreinteraction",CONTENT_IGNOREINTERACTION_CLASS:"piwikContentIgnoreInteraction",location:undefined,findContentNodes:function(){var ak="."+this.CONTENT_CLASS;var aj="["+this.CONTENT_ATTR+"]";
-var al=aa.findMultiple([ak,aj]);return al},findContentNodesWithinNode:function(am){if(!am){return[]}var ak=aa.findNodesHavingCssClass(am,this.CONTENT_CLASS);var aj=aa.findNodesHavingAttribute(am,this.CONTENT_ATTR);if(aj&&aj.length){var al;for(al=0;al<aj.length;al++){ak.push(aj[al])}}if(aa.hasNodeAttribute(am,this.CONTENT_ATTR)){ak.push(am)}else{if(aa.hasNodeCssClass(am,this.CONTENT_CLASS)){ak.push(am)}}ak=aa.makeNodesUnique(ak);return ak},findParentContentNode:function(ak){if(!ak){return}var al=ak;var aj=0;while(al&&al!==F&&al.parentNode){if(aa.hasNodeAttribute(al,this.CONTENT_ATTR)){return al}if(aa.hasNodeCssClass(al,this.CONTENT_CLASS)){return al}al=al.parentNode;if(aj>1000){break}aj++}},findPieceNode:function(ak){var aj;aj=aa.findFirstNodeHavingAttribute(ak,this.CONTENT_PIECE_ATTR);if(!aj){aj=aa.findFirstNodeHavingClass(ak,this.CONTENT_PIECE_CLASS)}if(aj){return aj}return ak},findTargetNodeNoDefault:function(aj){if(!aj){return}var ak=aa.findFirstNodeHavingAttributeWithValue(aj,this.CONTENT_TARGET_ATTR);
-if(ak){return ak}ak=aa.findFirstNodeHavingAttribute(aj,this.CONTENT_TARGET_ATTR);if(ak){return ak}ak=aa.findFirstNodeHavingClass(aj,this.CONTENT_TARGET_CLASS);if(ak){return ak}},findTargetNode:function(aj){var ak=this.findTargetNodeNoDefault(aj);if(ak){return ak}return aj},findContentName:function(ak){if(!ak){return}var an=aa.findFirstNodeHavingAttributeWithValue(ak,this.CONTENT_NAME_ATTR);if(an){return aa.getAttributeValueFromNode(an,this.CONTENT_NAME_ATTR)}var aj=this.findContentPiece(ak);if(aj){return this.removeDomainIfIsInLink(aj)}if(aa.hasNodeAttributeWithValue(ak,"title")){return aa.getAttributeValueFromNode(ak,"title")}var al=this.findPieceNode(ak);if(aa.hasNodeAttributeWithValue(al,"title")){return aa.getAttributeValueFromNode(al,"title")}var am=this.findTargetNode(ak);if(aa.hasNodeAttributeWithValue(am,"title")){return aa.getAttributeValueFromNode(am,"title")}},findContentPiece:function(ak){if(!ak){return}var am=aa.findFirstNodeHavingAttributeWithValue(ak,this.CONTENT_PIECE_ATTR);
-if(am){return aa.getAttributeValueFromNode(am,this.CONTENT_PIECE_ATTR)}var aj=this.findPieceNode(ak);var al=this.findMediaUrlInNode(aj);if(al){return this.toAbsoluteUrl(al)}},findContentTarget:function(al){if(!al){return}var am=this.findTargetNode(al);if(aa.hasNodeAttributeWithValue(am,this.CONTENT_TARGET_ATTR)){return aa.getAttributeValueFromNode(am,this.CONTENT_TARGET_ATTR)}var ak;if(aa.hasNodeAttributeWithValue(am,"href")){ak=aa.getAttributeValueFromNode(am,"href");return this.toAbsoluteUrl(ak)}var aj=this.findPieceNode(al);if(aa.hasNodeAttributeWithValue(aj,"href")){ak=aa.getAttributeValueFromNode(aj,"href");return this.toAbsoluteUrl(ak)}},isSameDomain:function(aj){if(!aj||!aj.indexOf){return false}if(0===aj.indexOf(this.getLocation().origin)){return true}var ak=aj.indexOf(this.getLocation().host);if(8>=ak&&0<=ak){return true}return false},removeDomainIfIsInLink:function(al){var ak="^https?://[^/]+";var aj="^.*//[^/]+";if(al&&al.search&&-1!==al.search(new RegExp(ak))&&this.isSameDomain(al)){al=al.replace(new RegExp(aj),"");
-if(!al){al="/"}}return al},findMediaUrlInNode:function(an){if(!an){return}var al=["img","embed","video","audio"];var aj=an.nodeName.toLowerCase();if(-1!==L(al,aj)&&aa.findFirstNodeHavingAttributeWithValue(an,"src")){var am=aa.findFirstNodeHavingAttributeWithValue(an,"src");return aa.getAttributeValueFromNode(am,"src")}if(aj==="object"&&aa.hasNodeAttributeWithValue(an,"data")){return aa.getAttributeValueFromNode(an,"data")}if(aj==="object"){var ao=aa.findNodesByTagName(an,"param");if(ao&&ao.length){var ak;for(ak=0;ak<ao.length;ak++){if("movie"===aa.getAttributeValueFromNode(ao[ak],"name")&&aa.hasNodeAttributeWithValue(ao[ak],"value")){return aa.getAttributeValueFromNode(ao[ak],"value")}}}var ap=aa.findNodesByTagName(an,"embed");if(ap&&ap.length){return this.findMediaUrlInNode(ap[0])}}},trim:function(aj){return a(aj)},isOrWasNodeInViewport:function(ao){if(!ao||!ao.getBoundingClientRect||ao.nodeType!==1){return true}var an=ao.getBoundingClientRect();var am=F.documentElement||{};var al=an.top<0;
-if(al&&ao.offsetTop){al=(ao.offsetTop+an.height)>0}var ak=am.clientWidth;if(S.innerWidth&&ak>S.innerWidth){ak=S.innerWidth}var aj=am.clientHeight;if(S.innerHeight&&aj>S.innerHeight){aj=S.innerHeight}return((an.bottom>0||al)&&an.right>0&&an.left<ak&&((an.top<aj)||al))},isNodeVisible:function(ak){var aj=j(ak);var al=this.isOrWasNodeInViewport(ak);return aj&&al},buildInteractionRequestParams:function(aj,ak,al,am){var an="";if(aj){an+="c_i="+t(aj)}if(ak){if(an){an+="&"}an+="c_n="+t(ak)}if(al){if(an){an+="&"}an+="c_p="+t(al)}if(am){if(an){an+="&"}an+="c_t="+t(am)}return an},buildImpressionRequestParams:function(aj,ak,al){var am="c_n="+t(aj)+"&c_p="+t(ak);if(al){am+="&c_t="+t(al)}return am},buildContentBlock:function(al){if(!al){return}var aj=this.findContentName(al);var ak=this.findContentPiece(al);var am=this.findContentTarget(al);aj=this.trim(aj);ak=this.trim(ak);am=this.trim(am);return{name:aj||"Unknown",piece:ak||"Unknown",target:am||""}},collectContent:function(am){if(!am||!am.length){return[]
-}var al=[];var aj,ak;for(aj=0;aj<am.length;aj++){ak=this.buildContentBlock(am[aj]);if(I(ak)){al.push(ak)}}return al},setLocation:function(aj){this.location=aj},getLocation:function(){var aj=this.location||S.location;if(!aj.origin){aj.origin=aj.protocol+"//"+aj.hostname+(aj.port?":"+aj.port:"")}return aj},toAbsoluteUrl:function(ak){if((!ak||String(ak)!==ak)&&ak!==""){return ak}if(""===ak){return this.getLocation().href}if(ak.search(/^\/\//)!==-1){return this.getLocation().protocol+ak}if(ak.search(/:\/\//)!==-1){return ak}if(0===ak.indexOf("#")){return this.getLocation().origin+this.getLocation().pathname+ak}if(0===ak.indexOf("?")){return this.getLocation().origin+this.getLocation().pathname+ak}if(0===ak.search("^[a-zA-Z]{2,11}:")){return ak}if(ak.search(/^\//)!==-1){return this.getLocation().origin+ak}var aj="(.*/)";var al=this.getLocation().origin+this.getLocation().pathname.match(new RegExp(aj))[0];return al+ak},isUrlToCurrentDomain:function(ak){var al=this.toAbsoluteUrl(ak);if(!al){return false
-}var aj=this.getLocation().origin;if(aj===al){return true}if(0===String(al).indexOf(aj)){if(":"===String(al).substr(aj.length,1)){return false}return true}return false},setHrefAttribute:function(ak,aj){if(!ak||!aj){return}aa.setAnyAttribute(ak,"href",aj)},shouldIgnoreInteraction:function(al){var ak=aa.hasNodeAttribute(al,this.CONTENT_IGNOREINTERACTION_ATTR);var aj=aa.hasNodeCssClass(al,this.CONTENT_IGNOREINTERACTION_CLASS);return ak||aj}};function N(ak,an){if(an){return an}ak=v.toAbsoluteUrl(ak);if(y(ak,"?")){var am=ak.indexOf("?");ak=ak.slice(0,am)}if(Q(ak,"piwik.php")){ak=g(ak,"piwik.php".length)}else{if(Q(ak,".php")){var aj=ak.lastIndexOf("/");var al=1;ak=ak.slice(0,aj+al)}}if(Q(ak,"/js/")){ak=g(ak,"js/".length)}return ak}function M(ap){var ar="Piwik_Overlay";var ak=new RegExp("index\\.php\\?module=Overlay&action=startOverlaySession&idSite=([0-9]+)&period=([^&]+)&date=([^&]+)(&segment=.*)?$");var al=ak.exec(F.referrer);if(al){var an=al[1];if(an!==String(ap)){return false}var ao=al[2],aj=al[3],am=al[4];
-if(!am){am=""}else{if(am.indexOf("&segment=")===0){am=am.substr("&segment=".length)}}S.name=ar+"###"+ao+"###"+aj+"###"+am}var aq=S.name.split("###");return aq.length===4&&aq[0]===ar}function W(ak,aq,am){var ap=S.name.split("###"),ao=ap[1],aj=ap[2],an=ap[3],al=N(ak,aq);o(al+"plugins/Overlay/client/client.js?v=1",function(){Piwik_Overlay_Client.initialize(al,am,ao,aj,an)})}function u(){var al;try{al=S.frameElement}catch(ak){return true}if(I(al)){return(al&&String(al.nodeName).toLowerCase()==="iframe")?true:false}try{return S.self!==S.top}catch(aj){return true}}function P(b2,bX){var bw=this,bS=X(F.domain,S.location.href,J()),cE=K(bS[0]),bB=p(bS[1]),bd=p(bS[2]),cC=false,b6="GET",cR=b6,aB="application/x-www-form-urlencoded; charset=UTF-8",cl=aB,ax=b2||"",bv="",cI="",bU=bX||"",bo="",bC="",aW,a9="",cO=["7z","aac","apk","arc","arj","asf","asx","avi","azw3","bin","csv","deb","dmg","doc","docx","epub","exe","flv","gif","gz","gzip","hqx","ibooks","jar","jpg","jpeg","js","mobi","mp2","mp3","mp4","mpg","mpeg","mov","movie","msi","msp","odb","odf","odg","ods","odt","ogg","ogv","pdf","phps","png","ppt","pptx","qt","qtm","ra","ram","rar","rpm","sea","sit","tar","tbz","tbz2","bz","bz2","tgz","torrent","txt","wav","wma","wmv","wpd","xls","xlsx","xml","z","zip"],aq=[cE],bp=[],bz=[],a0=[],bx=500,cu,aX,bF,bD,aj,cf=["pk_campaign","piwik_campaign","utm_campaign","utm_source","utm_medium"],bu=["pk_kwd","piwik_kwd","utm_term"],ba="_pk_",ap="pk_vid",aR=180,cG,bf,bG=false,bb=false,cA,a5,bl,cv=33955200000,cd=1800000,cN=15768000000,aU=true,cb=0,bE=false,aI=false,bZ,bK={},ca={},bc={},bj=200,cJ={},cP={},bY=[],b3=false,co=false,ak=false,cQ=false,cx=false,aG=false,a4=u(),cH=null,b0,aJ,bq,bV=ah,be,aD,cg=0,bk=["id","ses","cvar","ref"];
-try{a9=F.title}catch(cm){a9=""}function cU(c5,c3,c2,c4,c1,c0){if(bb){return}var cZ;if(c2){cZ=new Date();cZ.setTime(cZ.getTime()+c2)}F.cookie=c5+"="+t(c3)+(c2?";expires="+cZ.toGMTString():"")+";path="+(c4||"/")+(c1?";domain="+c1:"")+(c0?";secure":"")}function aw(c1){if(bb){return 0}var cZ=new RegExp("(^|;)[ ]*"+c1+"=([^;]*)"),c0=cZ.exec(F.cookie);return c0?R(c0[2]):0}function bQ(cZ){var c0;cZ=k(cZ,ap);if(bD){c0=new RegExp("#.*");return cZ.replace(c0,"")}return cZ}function bJ(c1,cZ){var c2=s(cZ),c0;if(c2){return cZ}if(cZ.slice(0,1)==="/"){return s(c1)+"://"+d(c1)+cZ}c1=bQ(c1);c0=c1.indexOf("?");if(c0>=0){c1=c1.slice(0,c0)}c0=c1.lastIndexOf("/");if(c0!==c1.length-1){c1=c1.slice(0,c0+1)}return c1+cZ}function ct(c1,cZ){var c0;c1=String(c1).toLowerCase();cZ=String(cZ).toLowerCase();if(c1===cZ){return true}if(cZ.slice(0,1)==="."){if(c1===cZ.slice(1)){return true}c0=c1.length-cZ.length;if((c0>0)&&(c1.slice(c0)===cZ)){return true}}return false}function b9(cZ){var c0=document.createElement("a");if(cZ.indexOf("//")!==0&&cZ.indexOf("http")!==0){if(cZ.indexOf("*")===0){cZ=cZ.substr(1)
-}if(cZ.indexOf(".")===0){cZ=cZ.substr(1)}cZ="http://"+cZ}c0.href=v.toAbsoluteUrl(cZ);if(c0.pathname){return c0.pathname}return""}function aV(c0,cZ){if(!ae(cZ,"/")){cZ="/"+cZ}if(!ae(c0,"/")){c0="/"+c0}var c1=(cZ==="/"||cZ==="/*");if(c1){return true}if(c0===cZ){return true}cZ=String(cZ).toLowerCase();c0=String(c0).toLowerCase();if(Q(cZ,"*")){cZ=cZ.slice(0,-1);c1=(!cZ||cZ==="/");if(c1){return true}if(c0===cZ){return true}return c0.indexOf(cZ)===0}if(!Q(c0,"/")){c0+="/"}if(!Q(cZ,"/")){cZ+="/"}return c0.indexOf(cZ)===0}function am(c3,c5){var c0,cZ,c1,c2,c4;for(c0=0;c0<aq.length;c0++){c2=K(aq[c0]);c4=b9(aq[c0]);if(ct(c3,c2)&&aV(c5,c4)){return true}}return false}function aN(c2){var c0,cZ,c1;for(c0=0;c0<aq.length;c0++){cZ=K(aq[c0].toLowerCase());if(c2===cZ){return true}if(cZ.slice(0,1)==="."){if(c2===cZ.slice(1)){return true}c1=c2.length-cZ.length;if((c1>0)&&(c2.slice(c1)===cZ)){return true}}}return false}function ce(cZ,c1){cZ=cZ.replace("send_image=0","send_image=1");var c0=new Image(1,1);c0.onload=function(){D=0;
-if(typeof c1==="function"){c1()}};c0.src=ax+(ax.indexOf("?")<0?"?":"&")+cZ}function aY(c0){var c4="object"===typeof h&&"function"===typeof h.sendBeacon&&"function"===typeof Blob;if(!c4){return false}var c3={type:"application/x-www-form-urlencoded; charset=UTF-8"};var c2=false;try{var cZ=new Blob([c0],c3);c2=h.sendBeacon(ax,cZ)}catch(c1){return false}return c2}function cM(c0,c1,cZ){if(!I(cZ)||null===cZ){cZ=true}if(m&&aY(c0)){return}setTimeout(function(){if(m&&aY(c0)){return}var c4;try{var c3=S.XMLHttpRequest?new S.XMLHttpRequest():S.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):null;c3.open("POST",ax,true);c3.onreadystatechange=function(){if(this.readyState===4&&!(this.status>=200&&this.status<300)){var c5=m&&aY(c0);if(!c5&&cZ){ce(c0,c1)}}else{if(this.readyState===4&&(typeof c1==="function")){c1()}}};c3.setRequestHeader("Content-Type",cl);c3.send(c0)}catch(c2){c4=m&&aY(c0);if(!c4&&cZ){ce(c0,c1)}}},50)}function b4(c0){var cZ=new Date();var c1=cZ.getTime()+c0;if(!r||c1>r){r=c1}}function cc(cZ){if(b0||!aX){return
-}b0=setTimeout(function c0(){b0=null;if(!a4){a4=(!F.hasFocus||F.hasFocus())}if(!a4){cc(aX);return}if(bF()){return}var c1=new Date(),c2=aX-(c1.getTime()-cH);c2=Math.min(aX,c2);cc(c2)},cZ||aX)}function by(){if(!b0){return}clearTimeout(b0);b0=null}function a2(){a4=true;if(bF()){return}cc()}function ar(){by()}function cW(){if(aG||!aX){return}aG=true;ai(S,"focus",a2);ai(S,"blur",ar);cc()}function cp(c3){var c0=new Date();var cZ=c0.getTime();cH=cZ;if(co&&cZ<co){var c1=co-cZ;setTimeout(c3,c1);b4(c1+50);co+=50;return}if(co===false){var c2=800;co=cZ+c2}c3()}function bt(c0,cZ,c1){if(!cA&&c0){cp(function(){if(cR==="POST"||String(c0).length>2000){cM(c0,c1)}else{ce(c0,c1)}b4(cZ)})}if(!aG){cW()}else{cc()}}function b8(cZ){if(cA){return false}return(cZ&&cZ.length)}function cV(c1,cZ){if(!b8(c1)){return}var c0='{"requests":["?'+c1.join('","?')+'"]}';cp(function(){cM(c0,null,false);b4(cZ)})}function aL(cZ){return ba+cZ+"."+bU+"."+be}function bT(){if(bb){return"0"}if(!I(h.cookieEnabled)){var cZ=aL("testcookie");
-cU(cZ,"1");return aw(cZ)==="1"?"1":"0"}return h.cookieEnabled?"1":"0"}function a8(){be=bV((cG||cE)+(bf||"/")).slice(0,4)}function bL(){var c0=aL("cvar"),cZ=aw(c0);if(cZ.length){cZ=JSON_PIWIK.parse(cZ);if(U(cZ)){return cZ}}return{}}function cq(){if(aI===false){aI=bL()}}function cB(){return bV((h.userAgent||"")+(h.platform||"")+JSON_PIWIK.stringify(cP)+(new Date()).getTime()+Math.random()).slice(0,16)}function at(){return bV((h.userAgent||"")+(h.platform||"")+JSON_PIWIK.stringify(cP)).slice(0,6)}function a6(){return Math.floor((new Date()).getTime()/1000)}function aC(){var c0=a6();var c1=at();var cZ=String(c0)+c1;return cZ}function cL(c1){c1=String(c1);var c4=at();var c2=c4.length;var c3=c1.substr(-1*c2,c2);var c0=parseInt(c1.substr(0,c1.length-c2),10);if(c0&&c3&&c3===c4){var cZ=a6();if(aR<=0){return true}if(cZ>=c0&&cZ<=(c0+aR)){return true}}return false}function cX(cZ){if(!cx){return""}var c3=f(cZ,ap);if(!c3){return""}c3=String(c3);var c1=new RegExp("^[a-zA-Z0-9]+$");if(c3.length===32&&c1.test(c3)){var c0=c3.substr(16,32);
-if(cL(c0)){var c2=c3.substr(0,16);return c2}}return""}function cy(){if(!bC){bC=cX(bB)}var c1=new Date(),cZ=Math.round(c1.getTime()/1000),c0=aL("id"),c4=aw(c0),c3,c2;if(c4){c3=c4.split(".");c3.unshift("0");if(bC.length){c3[1]=bC}return c3}if(bC.length){c2=bC}else{if("0"===bT()){c2=""}else{c2=cB()}}c3=["1",c2,cZ,0,cZ,"",""];return c3}function aP(){var c6=cy(),c2=c6[0],c3=c6[1],c0=c6[2],cZ=c6[3],c4=c6[4],c1=c6[5];if(!I(c6[6])){c6[6]=""}var c5=c6[6];return{newVisitor:c2,uuid:c3,createTs:c0,visitCount:cZ,currentVisitTs:c4,lastVisitTs:c1,lastEcommerceOrderTs:c5}}function aA(){var c2=new Date(),c0=c2.getTime(),c3=aP().createTs;var cZ=parseInt(c3,10);var c1=(cZ*1000)+cv-c0;return c1}function aE(cZ){if(!bU){return}var c1=new Date(),c0=Math.round(c1.getTime()/1000);if(!I(cZ)){cZ=aP()}var c2=cZ.uuid+"."+cZ.createTs+"."+cZ.visitCount+"."+c0+"."+cZ.lastVisitTs+"."+cZ.lastEcommerceOrderTs;cU(aL("id"),c2,aA(),bf,cG,bG)}function bA(){var cZ=aw(aL("ref"));if(cZ.length){try{cZ=JSON_PIWIK.parse(cZ);if(U(cZ)){return cZ
-}}catch(c0){}}return["","",0,""]}function bM(c1,c0,cZ){cU(c1,"",-86400,c0,cZ)}function bm(c0){var cZ="testvalue";cU("test",cZ,10000,null,c0);if(aw("test")===cZ){bM("test",null,c0);return true}return false}function ay(){var c0=bb;bb=false;var cZ,c1;for(cZ=0;cZ<bk.length;cZ++){c1=aL(bk[cZ]);if(0!==aw(c1)){bM(c1,bf,cG)}}bb=c0}function bR(cZ){bU=cZ;aE()}function cY(c3){if(!c3||!U(c3)){return}var c2=[];var c1;for(c1 in c3){if(Object.prototype.hasOwnProperty.call(c3,c1)){c2.push(c1)}}var c4={};c2.sort();var cZ=c2.length;var c0;for(c0=0;c0<cZ;c0++){c4[c2[c0]]=c3[c2[c0]]}return c4}function b1(){cU(aL("ses"),"*",cd,bf,cG,bG)}function a7(){var c2="";var c0="abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";var c1=c0.length;var cZ;for(cZ=0;cZ<6;cZ++){c2+=c0.charAt(Math.floor(Math.random()*c1))}return c2}function ch(c1,dm,dn,c2){var dl,c0=new Date(),c9=Math.round(c0.getTime()/1000),c6,dk,c3=1024,dt,da,di=aI,c4=aL("ses"),dg=aL("ref"),dd=aL("cvar"),de=aw(c4),dj=bA(),dq=aW||bB,c7,cZ;if(bb){ay()
-}if(cA){return""}var df=aP();if(!I(c2)){c2=""}var dc=F.characterSet||F.charset;if(!dc||dc.toLowerCase()==="utf-8"){dc=null}c7=dj[0];cZ=dj[1];c6=dj[2];dk=dj[3];if(!de){var dp=cd/1000;if(!df.lastVisitTs||(c9-df.lastVisitTs)>dp){df.visitCount++;df.lastVisitTs=df.currentVisitTs}if(!bl||!c7.length){for(dl in cf){if(Object.prototype.hasOwnProperty.call(cf,dl)){c7=f(dq,cf[dl]);if(c7.length){break}}}for(dl in bu){if(Object.prototype.hasOwnProperty.call(bu,dl)){cZ=f(dq,bu[dl]);if(cZ.length){break}}}}dt=d(bd);da=dk.length?d(dk):"";if(dt.length&&!aN(dt)&&(!bl||!da.length||aN(da))){dk=bd}if(dk.length||c7.length){c6=c9;dj=[c7,cZ,c6,bQ(dk.slice(0,c3))];cU(dg,JSON_PIWIK.stringify(dj),cN,bf,cG)}}c1+="&idsite="+bU+"&rec=1&r="+String(Math.random()).slice(2,8)+"&h="+c0.getHours()+"&m="+c0.getMinutes()+"&s="+c0.getSeconds()+"&url="+t(bQ(dq))+(bd.length?"&urlref="+t(bQ(bd)):"")+((bo&&bo.length)?"&uid="+t(bo):"")+"&_id="+df.uuid+"&_idts="+df.createTs+"&_idvc="+df.visitCount+"&_idn="+df.newVisitor+(c7.length?"&_rcn="+t(c7):"")+(cZ.length?"&_rck="+t(cZ):"")+"&_refts="+c6+"&_viewts="+df.lastVisitTs+(String(df.lastEcommerceOrderTs).length?"&_ects="+df.lastEcommerceOrderTs:"")+(String(dk).length?"&_ref="+t(bQ(dk.slice(0,c3))):"")+(dc?"&cs="+t(dc):"")+"&send_image=0";
-for(dl in cP){if(Object.prototype.hasOwnProperty.call(cP,dl)){c1+="&"+dl+"="+cP[dl]}}var ds=[];if(dm){for(dl in dm){if(Object.prototype.hasOwnProperty.call(dm,dl)&&/^dimension\d+$/.test(dl)){var c5=dl.replace("dimension","");ds.push(parseInt(c5,10));ds.push(String(c5));c1+="&"+dl+"="+dm[dl];delete dm[dl]}}}if(dm&&A(dm)){dm=null}for(dl in bc){if(Object.prototype.hasOwnProperty.call(bc,dl)){var db=(-1===L(ds,dl));if(db){c1+="&dimension"+dl+"="+bc[dl]}}}if(dm){c1+="&data="+t(JSON_PIWIK.stringify(dm))}else{if(aj){c1+="&data="+t(JSON_PIWIK.stringify(aj))}}function c8(du,dv){var dw=JSON_PIWIK.stringify(du);if(dw.length>2){return"&"+dv+"="+t(dw)}return""}var dr=cY(bK);var dh=cY(ca);c1+=c8(dr,"cvar");c1+=c8(dh,"e_cvar");if(aI){c1+=c8(aI,"_cvar");for(dl in di){if(Object.prototype.hasOwnProperty.call(di,dl)){if(aI[dl][0]===""||aI[dl][1]===""){delete aI[dl]}}}if(bE){cU(dd,JSON_PIWIK.stringify(aI),cd,bf,cG)}}if(aU){if(cb){c1+="&gt_ms="+cb}else{if(i&&i.timing&&i.timing.requestStart&&i.timing.responseEnd){c1+="&gt_ms="+(i.timing.responseEnd-i.timing.requestStart)
-}}}if(aD){c1+="&pv_id="+aD}df.lastEcommerceOrderTs=I(c2)&&String(c2).length?c2:df.lastEcommerceOrderTs;aE(df);b1();c1+=Y(dn,{tracker:bw,request:c1});if(cI.length){c1+="&"+cI}if(z(bZ)){c1=bZ(c1)}return c1}bF=function aZ(){var cZ=new Date();if(cH+aX<=cZ.getTime()){var c0=ch("ping=1",null,"ping");bt(c0,bx);return true}return false};function bg(c2,c1,c7,c3,cZ,da){var c5="idgoal=0",c6,c0=new Date(),c8=[],c9,c4=String(c2).length;if(c4){c5+="&ec_id="+t(c2);c6=Math.round(c0.getTime()/1000)}c5+="&revenue="+c1;if(String(c7).length){c5+="&ec_st="+c7}if(String(c3).length){c5+="&ec_tx="+c3}if(String(cZ).length){c5+="&ec_sh="+cZ}if(String(da).length){c5+="&ec_dt="+da}if(cJ){for(c9 in cJ){if(Object.prototype.hasOwnProperty.call(cJ,c9)){if(!I(cJ[c9][1])){cJ[c9][1]=""}if(!I(cJ[c9][2])){cJ[c9][2]=""}if(!I(cJ[c9][3])||String(cJ[c9][3]).length===0){cJ[c9][3]=0}if(!I(cJ[c9][4])||String(cJ[c9][4]).length===0){cJ[c9][4]=1}c8.push(cJ[c9])}}c5+="&ec_items="+t(JSON_PIWIK.stringify(c8))}c5=ch(c5,aj,"ecommerce",c6);
-bt(c5,bx);if(c4){cJ={}}}function bN(cZ,c3,c2,c1,c0,c4){if(String(cZ).length&&I(c3)){bg(cZ,c3,c2,c1,c0,c4)}}function bi(cZ){if(I(cZ)){bg("",cZ,"","","","")}}function bO(c0,c2,c1){aD=a7();var cZ=ch("action_name="+t(ag(c0||a9)),c2,"log");bt(cZ,bx,c1)}function aS(c1,c0){var c2,cZ="(^| )(piwik[_-]"+c0;if(c1){for(c2=0;c2<c1.length;c2++){cZ+="|"+c1[c2]}}cZ+=")( |$)";return new RegExp(cZ)}function aM(cZ){return(ax&&cZ&&0===String(cZ).indexOf(ax))}function ci(c3,cZ,c4,c0){if(aM(cZ)){return 0}var c2=aS(bz,"download"),c1=aS(a0,"link"),c5=new RegExp("\\.("+cO.join("|")+")([?&#]|$)","i");if(c1.test(c3)){return"link"}if(c0||c2.test(c3)||c5.test(cZ)){return"download"}if(c4){return 0}return"link"}function ao(c0){var cZ;cZ=c0.parentNode;while(cZ!==null&&I(cZ)){if(aa.isLinkElement(c0)){break}c0=cZ;cZ=c0.parentNode}return c0}function cT(c4){c4=ao(c4);if(!aa.hasNodeAttribute(c4,"href")){return}if(!I(c4.href)){return}var c3=aa.getAttributeValueFromNode(c4,"href");if(aM(c3)){return}var c0=c4.pathname||b9(c4.href);
-var c5=c4.hostname||d(c4.href);var c6=c5.toLowerCase();var c1=c4.href.replace(c5,c6);var c2=new RegExp("^(javascript|vbscript|jscript|mocha|livescript|ecmascript|mailto|tel):","i");if(!c2.test(c1)){var cZ=ci(c4.className,c1,am(c6,c0),aa.hasNodeAttribute(c4,"download"));if(cZ){return{type:cZ,href:c1}}}}function aH(cZ,c0,c1,c2){var c3=v.buildInteractionRequestParams(cZ,c0,c1,c2);if(!c3){return}return ch(c3,null,"contentInteraction")}function cw(c1,c2,c6,cZ,c0){if(!I(c1)){return}if(aM(c1)){return c1}var c4=v.toAbsoluteUrl(c1);var c3="redirecturl="+t(c4)+"&";c3+=aH(c2,c6,cZ,(c0||c1));var c5="&";if(ax.indexOf("?")<0){c5="?"}return ax+c5+c3}function a3(cZ,c0){if(!cZ||!c0){return false}var c1=v.findTargetNode(cZ);if(v.shouldIgnoreInteraction(c1)){return false}c1=v.findTargetNodeNoDefault(cZ);if(c1&&!T(c1,c0)){return false}return true}function cj(c1,c0,c3){if(!c1){return}var cZ=v.findParentContentNode(c1);if(!cZ){return}if(!a3(cZ,c1)){return}var c2=v.buildContentBlock(cZ);if(!c2){return}if(!c2.target&&c3){c2.target=c3
-}return v.buildInteractionRequestParams(c0,c2.name,c2.piece,c2.target)}function aO(c0){if(!bY||!bY.length){return false}var cZ,c1;for(cZ=0;cZ<bY.length;cZ++){c1=bY[cZ];if(c1&&c1.name===c0.name&&c1.piece===c0.piece&&c1.target===c0.target){return true}}return false}function bs(c2){if(!c2){return false}var c5=v.findTargetNode(c2);if(!c5||v.shouldIgnoreInteraction(c5)){return false}var c6=cT(c5);if(cQ&&c6&&c6.type){return false}if(aa.isLinkElement(c5)&&aa.hasNodeAttributeWithValue(c5,"href")){var cZ=String(aa.getAttributeValueFromNode(c5,"href"));if(0===cZ.indexOf("#")){return false}if(aM(cZ)){return true}if(!v.isUrlToCurrentDomain(cZ)){return false}var c3=v.buildContentBlock(c2);if(!c3){return}var c1=c3.name;var c7=c3.piece;var c4=c3.target;if(!aa.hasNodeAttributeWithValue(c5,v.CONTENT_TARGET_ATTR)||c5.wasContentTargetAttrReplaced){c5.wasContentTargetAttrReplaced=true;c4=v.toAbsoluteUrl(cZ);aa.setAnyAttribute(c5,v.CONTENT_TARGET_ATTR,c4)}var c0=cw(cZ,"click",c1,c7,c4);v.setHrefAttribute(c5,c0);
-return true}return false}function aF(c0){if(!c0||!c0.length){return}var cZ;for(cZ=0;cZ<c0.length;cZ++){bs(c0[cZ])}}function aQ(cZ){return function(c0){if(!cZ){return}var c3=v.findParentContentNode(cZ);var c4;if(c0){c4=c0.target||c0.srcElement}if(!c4){c4=cZ}if(!a3(c3,c4)){return}b4(bx);if(aa.isLinkElement(cZ)&&aa.hasNodeAttributeWithValue(cZ,"href")&&aa.hasNodeAttributeWithValue(cZ,v.CONTENT_TARGET_ATTR)){var c1=aa.getAttributeValueFromNode(cZ,"href");if(!aM(c1)&&cZ.wasContentTargetAttrReplaced){aa.setAnyAttribute(cZ,v.CONTENT_TARGET_ATTR,"")}}var c8=cT(cZ);if(ak&&c8&&c8.type){return c8.type}if(bs(c3)){return"href"}var c5=v.buildContentBlock(c3);if(!c5){return}var c2=c5.name;var c9=c5.piece;var c7=c5.target;var c6=aH("click",c2,c9,c7);bt(c6,bx);return c6}}function bP(c1){if(!c1||!c1.length){return}var cZ,c0;for(cZ=0;cZ<c1.length;cZ++){c0=v.findTargetNode(c1[cZ]);if(c0&&!c0.contentInteractionTrackingSetupDone){c0.contentInteractionTrackingSetupDone=true;ai(c0,"click",aQ(c0))}}}function bn(c1,c2){if(!c1||!c1.length){return[]
-}var cZ,c0;for(cZ=0;cZ<c1.length;cZ++){if(aO(c1[cZ])){c1.splice(cZ,1);cZ--}else{bY.push(c1[cZ])}}if(!c1||!c1.length){return[]}aF(c2);bP(c2);var c3=[];for(cZ=0;cZ<c1.length;cZ++){c0=ch(v.buildImpressionRequestParams(c1[cZ].name,c1[cZ].piece,c1[cZ].target),undefined,"contentImpressions");if(c0){c3.push(c0)}}return c3}function cn(c0){var cZ=v.collectContent(c0);return bn(cZ,c0)}function a1(c0){if(!c0||!c0.length){return[]}var cZ;for(cZ=0;cZ<c0.length;cZ++){if(!v.isNodeVisible(c0[cZ])){c0.splice(cZ,1);cZ--}}if(!c0||!c0.length){return[]}return cn(c0)}function az(c1,cZ,c0){var c2=v.buildImpressionRequestParams(c1,cZ,c0);return ch(c2,null,"contentImpression")}function cS(c2,c0){if(!c2){return}var cZ=v.findParentContentNode(c2);var c1=v.buildContentBlock(cZ);if(!c1){return}if(!c0){c0="Unknown"}return aH(c0,c1.name,c1.piece,c1.target)}function cz(c0,c2,cZ,c1){return"e_c="+t(c0)+"&e_a="+t(c2)+(I(cZ)?"&e_n="+t(cZ):"")+(I(c1)?"&e_v="+t(c1):"")}function an(c1,c3,cZ,c2,c5,c4){if(a(String(c1)).length===0||a(String(c3)).length===0){af("Error while logging event: Parameters `category` and `action` must not be empty or filled with whitespaces");
-return false}var c0=ch(cz(c1,c3,cZ,c2),c5,"event");bt(c0,bx,c4)}function bW(cZ,c2,c0,c3){var c1=ch("search="+t(cZ)+(c2?"&search_cat="+t(c2):"")+(I(c0)?"&search_count="+c0:""),c3,"sitesearch");bt(c1,bx)}function cD(cZ,c2,c1){var c0=ch("idgoal="+cZ+(c2?"&revenue="+c2:""),c1,"goal");bt(c0,bx)}function cK(c2,cZ,c6,c5,c1){var c4=cZ+"="+t(bQ(c2));var c0=cj(c1,"click",c2);if(c0){c4+="&"+c0}var c3=ch(c4,c6,"link");bt(c3,bx,c5)}function bI(c0,cZ){if(c0!==""){return c0+cZ.charAt(0).toUpperCase()+cZ.slice(1)}return cZ}function b5(c4){var c3,cZ,c2=["","webkit","ms","moz"],c1;if(!a5){for(cZ=0;cZ<c2.length;cZ++){c1=c2[cZ];if(Object.prototype.hasOwnProperty.call(F,bI(c1,"hidden"))){if(F[bI(c1,"visibilityState")]==="prerender"){c3=true}break}}}if(c3){ai(F,c1+"visibilitychange",function c0(){F.removeEventListener(c1+"visibilitychange",c0,false);c4()});return}c4()}function bh(){var c0=aP().uuid;var cZ=aC();return c0+cZ}function b7(cZ){if(!cZ){return}if(!aa.hasNodeAttribute(cZ,"href")){return}var c0=aa.getAttributeValueFromNode(cZ,"href");
-if(!c0||aM(c0)){return}c0=k(c0,ap);if(c0.indexOf("?")>0){c0+="&"}else{c0+="?"}var c1=bh();c0=E(c0,ap,c1);aa.setAnyAttribute(cZ,"href",c0)}function au(c2){var c3=aa.getAttributeValueFromNode(c2,"href");if(!c3){return false}c3=String(c3);var c0=c3.indexOf("//")===0||c3.indexOf("http://")===0||c3.indexOf("https://")===0;if(!c0){return false}var cZ=c2.pathname||b9(c2.href);var c1=(c2.hostname||d(c2.href)).toLowerCase();if(am(c1,cZ)){if(!ct(cE,K(c1))){return true}return false}return false}function cs(cZ){var c0=cT(cZ);if(c0&&c0.type){c0.href=p(c0.href);cK(c0.href,c0.type,undefined,null,cZ);return}if(cx){cZ=ao(cZ);if(au(cZ)){b7(cZ)}}}function ck(){return F.all&&!F.addEventListener}function cF(cZ){var c1=cZ.which;var c0=(typeof cZ.button);if(!c1&&c0!=="undefined"){if(ck()){if(cZ.button&1){c1=1}else{if(cZ.button&2){c1=3}else{if(cZ.button&4){c1=2}}}}else{if(cZ.button===0||cZ.button==="0"){c1=1}else{if(cZ.button&1){c1=2}else{if(cZ.button&2){c1=3}}}}}return c1}function bH(cZ){switch(cF(cZ)){case 1:return"left";
-case 2:return"middle";case 3:return"right"}}function aT(cZ){return cZ.target||cZ.srcElement}function av(cZ){return function(c2){c2=c2||S.event;var c1=bH(c2);var c3=aT(c2);if(c2.type==="click"){var c0=false;if(cZ&&c1==="middle"){c0=true}if(c3&&!c0){cs(c3)}}else{if(c2.type==="mousedown"){if(c1==="middle"&&c3){aJ=c1;bq=c3}else{aJ=bq=null}}else{if(c2.type==="mouseup"){if(c1===aJ&&c3===bq){cs(c3)}aJ=bq=null}else{if(c2.type==="contextmenu"){cs(c3)}}}}}}function al(c1,c0){var cZ=typeof c0;if(cZ==="undefined"){c0=true}ai(c1,"click",av(c0),false);if(c0){ai(c1,"mouseup",av(c0),false);ai(c1,"mousedown",av(c0),false);ai(c1,"contextmenu",av(c0),false)}}function br(c1,c3){ak=true;var c2,c0=aS(bp,"ignore"),c4=F.links,cZ=null,c5=null;if(c4){for(c2=0;c2<c4.length;c2++){cZ=c4[c2];if(!c0.test(cZ.className)){c5=typeof cZ.piwikTrackers;if("undefined"===c5){cZ.piwikTrackers=[]}if(-1===L(cZ.piwikTrackers,c3)){cZ.piwikTrackers.push(c3);al(cZ,c1)}}}}}function aK(c0,c3,c4){if(b3){return true}b3=true;var c5=false;
-var c2,c1;function cZ(){c5=true}n(function(){function c6(c8){setTimeout(function(){if(!b3){return}c5=false;c4.trackVisibleContentImpressions();c6(c8)},c8)}function c7(c8){setTimeout(function(){if(!b3){return}if(c5){c5=false;c4.trackVisibleContentImpressions()}c7(c8)},c8)}if(c0){c2=["scroll","resize"];for(c1=0;c1<c2.length;c1++){if(F.addEventListener){F.addEventListener(c2[c1],cZ)}else{S.attachEvent("on"+c2[c1],cZ)}}c7(100)}if(c3&&c3>0){c3=parseInt(c3,10);c6(c3)}})}function cr(){var c0,c2,c3={pdf:"application/pdf",qt:"video/quicktime",realp:"audio/x-pn-realaudio-plugin",wma:"application/x-mplayer2",dir:"application/x-director",fla:"application/x-shockwave-flash",java:"application/x-java-vm",gears:"application/x-googlegears",ag:"application/x-silverlight"};if(!((new RegExp("MSIE")).test(h.userAgent))){if(h.mimeTypes&&h.mimeTypes.length){for(c0 in c3){if(Object.prototype.hasOwnProperty.call(c3,c0)){c2=h.mimeTypes[c3[c0]];cP[c0]=(c2&&c2.enabledPlugin)?"1":"0"}}}if(!((new RegExp("Edge[ /](\\d+[\\.\\d]+)")).test(h.userAgent))&&typeof navigator.javaEnabled!=="unknown"&&I(h.javaEnabled)&&h.javaEnabled()){cP.java="1"
-}if(z(S.GearsFactory)){cP.gears="1"}cP.cookie=bT()}var c1=parseInt(V.width,10);var cZ=parseInt(V.height,10);cP.res=parseInt(c1,10)+"x"+parseInt(cZ,10)}cr();a8();aE();this.getVisitorId=function(){return aP().uuid};this.getVisitorInfo=function(){return cy()};this.getAttributionInfo=function(){return bA()};this.getAttributionCampaignName=function(){return bA()[0]};this.getAttributionCampaignKeyword=function(){return bA()[1]};this.getAttributionReferrerTimestamp=function(){return bA()[2]};this.getAttributionReferrerUrl=function(){return bA()[3]};this.setTrackerUrl=function(cZ){ax=cZ};this.getTrackerUrl=function(){return ax};this.getPiwikUrl=function(){return N(this.getTrackerUrl(),bv)};this.addTracker=function(cZ,c1){if(!c1){throw new Error("A siteId must be given to add a new tracker")}if(!I(cZ)||null===cZ){cZ=this.getTrackerUrl()}var c0=new P(cZ,c1);H.push(c0);return c0};this.getSiteId=function(){return bU};this.setSiteId=function(cZ){bR(cZ)};this.resetUserId=function(){bo="";bC=cB()};this.setUserId=function(cZ){if(!I(cZ)||!cZ.length){return
-}bo=cZ;bC=bV(bo).substr(0,16)};this.getUserId=function(){return bo};this.setCustomData=function(cZ,c0){if(U(cZ)){aj=cZ}else{if(!aj){aj={}}aj[cZ]=c0}};this.getCustomData=function(){return aj};this.setCustomRequestProcessing=function(cZ){bZ=cZ};this.appendToTrackingUrl=function(cZ){cI=cZ};this.getRequest=function(cZ){return ch(cZ)};this.addPlugin=function(cZ,c0){b[cZ]=c0};this.setCustomDimension=function(cZ,c0){cZ=parseInt(cZ,10);if(cZ>0){if(!I(c0)){c0=""}if(!w(c0)){c0=String(c0)}bc[cZ]=c0}};this.getCustomDimension=function(cZ){cZ=parseInt(cZ,10);if(cZ>0&&Object.prototype.hasOwnProperty.call(bc,cZ)){return bc[cZ]}};this.deleteCustomDimension=function(cZ){cZ=parseInt(cZ,10);if(cZ>0){delete bc[cZ]}};this.setCustomVariable=function(c0,cZ,c3,c1){var c2;if(!I(c1)){c1="visit"}if(!I(cZ)){return}if(!I(c3)){c3=""}if(c0>0){cZ=!w(cZ)?String(cZ):cZ;c3=!w(c3)?String(c3):c3;c2=[cZ.slice(0,bj),c3.slice(0,bj)];if(c1==="visit"||c1===2){cq();aI[c0]=c2}else{if(c1==="page"||c1===3){bK[c0]=c2}else{if(c1==="event"){ca[c0]=c2
-}}}}};this.getCustomVariable=function(c0,c1){var cZ;if(!I(c1)){c1="visit"}if(c1==="page"||c1===3){cZ=bK[c0]}else{if(c1==="event"){cZ=ca[c0]}else{if(c1==="visit"||c1===2){cq();cZ=aI[c0]}}}if(!I(cZ)||(cZ&&cZ[0]==="")){return false}return cZ};this.deleteCustomVariable=function(cZ,c0){if(this.getCustomVariable(cZ,c0)){this.setCustomVariable(cZ,"","",c0)}};this.deleteCustomVariables=function(cZ){if(cZ==="page"||cZ===3){bK={}}else{if(cZ==="event"){ca={}}else{if(cZ==="visit"||cZ===2){aI={}}}}};this.storeCustomVariablesInCookie=function(){bE=true};this.setLinkTrackingTimer=function(cZ){bx=cZ};this.getLinkTrackingTimer=function(){return bx};this.setDownloadExtensions=function(cZ){if(w(cZ)){cZ=cZ.split("|")}cO=cZ};this.addDownloadExtensions=function(c0){var cZ;if(w(c0)){c0=c0.split("|")}for(cZ=0;cZ<c0.length;cZ++){cO.push(c0[cZ])}};this.removeDownloadExtensions=function(c1){var c0,cZ=[];if(w(c1)){c1=c1.split("|")}for(c0=0;c0<cO.length;c0++){if(L(c1,cO[c0])===-1){cZ.push(cO[c0])}}cO=cZ};this.setDomains=function(cZ){aq=w(cZ)?[cZ]:cZ;
-var c3=false,c1=0,c0;for(c1;c1<aq.length;c1++){c0=String(aq[c1]);if(ct(cE,K(c0))){c3=true;break}var c2=b9(c0);if(c2&&c2!=="/"&&c2!=="/*"){c3=true;break}}if(!c3){aq.push(cE)}};this.enableCrossDomainLinking=function(){cx=true};this.disableCrossDomainLinking=function(){cx=false};this.isCrossDomainLinkingEnabled=function(){return cx};this.setCrossDomainLinkingTimeout=function(cZ){aR=cZ};this.getCrossDomainLinkingUrlParameter=function(){return t(ap)+"="+t(bh())};this.setIgnoreClasses=function(cZ){bp=w(cZ)?[cZ]:cZ};this.setRequestMethod=function(cZ){cR=cZ||b6};this.setRequestContentType=function(cZ){cl=cZ||aB};this.setReferrerUrl=function(cZ){bd=cZ};this.setCustomUrl=function(cZ){aW=bJ(bB,cZ)};this.getCurrentUrl=function(){return aW||bB};this.setDocumentTitle=function(cZ){a9=cZ};this.setAPIUrl=function(cZ){bv=cZ};this.setDownloadClasses=function(cZ){bz=w(cZ)?[cZ]:cZ};this.setLinkClasses=function(cZ){a0=w(cZ)?[cZ]:cZ};this.setCampaignNameKey=function(cZ){cf=w(cZ)?[cZ]:cZ};this.setCampaignKeywordKey=function(cZ){bu=w(cZ)?[cZ]:cZ
-};this.discardHashTag=function(cZ){bD=cZ};this.setCookieNamePrefix=function(cZ){ba=cZ;aI=bL()};this.setCookieDomain=function(cZ){var c0=K(cZ);if(bm(c0)){cG=c0;a8()}};this.getCookieDomain=function(){return cG};this.hasCookies=function(){return"1"===bT()};this.setSessionCookie=function(c1,c0,cZ){if(!c1){throw new Error("Missing cookie name")}if(!I(cZ)){cZ=cd}bk.push(c1);cU(aL(c1),c0,cZ,bf,cG)};this.getCookie=function(c0){var cZ=aw(aL(c0));if(cZ===0){return null}return cZ};this.setCookiePath=function(cZ){bf=cZ;a8()};this.getCookiePath=function(cZ){return bf};this.setVisitorCookieTimeout=function(cZ){cv=cZ*1000};this.setSessionCookieTimeout=function(cZ){cd=cZ*1000};this.getSessionCookieTimeout=function(){return cd};this.setReferralCookieTimeout=function(cZ){cN=cZ*1000};this.setConversionAttributionFirstReferrer=function(cZ){bl=cZ};this.setSecureCookie=function(cZ){bG=cZ};this.disableCookies=function(){bb=true;cP.cookie="0";if(bU){ay()}};this.deleteCookies=function(){ay()};this.setDoNotTrack=function(c0){var cZ=h.doNotTrack||h.msDoNotTrack;
-cA=c0&&(cZ==="yes"||cZ==="1");if(cA){this.disableCookies()}};this.addListener=function(c0,cZ){al(c0,cZ)};this.enableLinkTracking=function(c0){cQ=true;var cZ=this;b5(function(){q(function(){br(c0,cZ)})})};this.enableJSErrorTracking=function(){if(cC){return}cC=true;var cZ=S.onerror;S.onerror=function(c4,c2,c1,c3,c0){b5(function(){var c5="JavaScript Errors";var c6=c2+":"+c1;if(c3){c6+=":"+c3}an(c5,c6,c4)});if(cZ){return cZ(c4,c2,c1,c3,c0)}return false}};this.disablePerformanceTracking=function(){aU=false};this.setGenerationTimeMs=function(cZ){cb=parseInt(cZ,10)};this.enableHeartBeatTimer=function(cZ){cZ=Math.max(cZ,1);aX=(cZ||15)*1000;if(cH!==null){cW()}};this.disableHeartBeatTimer=function(){by();if(aX||aG){if(S.removeEventListener){S.removeEventListener("focus",a2,true);S.removeEventListener("blur",ar,true)}else{if(S.detachEvent){S.detachEvent("onfocus",a2);S.detachEvent("onblur",ar)}}}aX=null;aG=false};this.killFrame=function(){if(S.location!==S.top.location){S.top.location=S.location}};
-this.redirectFile=function(cZ){if(S.location.protocol==="file:"){S.location=cZ}};this.setCountPreRendered=function(cZ){a5=cZ};this.trackGoal=function(cZ,c1,c0){b5(function(){cD(cZ,c1,c0)})};this.trackLink=function(c0,cZ,c2,c1){b5(function(){cK(c0,cZ,c2,c1)})};this.getNumTrackedPageViews=function(){return cg};this.trackPageView=function(cZ,c1,c0){bY=[];if(M(bU)){b5(function(){W(ax,bv,bU)})}else{b5(function(){cg++;bO(cZ,c1,c0)})}};this.trackAllContentImpressions=function(){if(M(bU)){return}b5(function(){q(function(){var cZ=v.findContentNodes();var c0=cn(cZ);cV(c0,bx)})})};this.trackVisibleContentImpressions=function(cZ,c0){if(M(bU)){return}if(!I(cZ)){cZ=true}if(!I(c0)){c0=750}aK(cZ,c0,this);b5(function(){n(function(){var c1=v.findContentNodes();var c2=a1(c1);cV(c2,bx)})})};this.trackContentImpression=function(c1,cZ,c0){if(M(bU)){return}c1=a(c1);cZ=a(cZ);c0=a(c0);if(!c1){return}cZ=cZ||"Unknown";b5(function(){var c2=az(c1,cZ,c0);bt(c2,bx)})};this.trackContentImpressionsWithinNode=function(cZ){if(M(bU)||!cZ){return
-}b5(function(){if(b3){n(function(){var c0=v.findContentNodesWithinNode(cZ);var c1=a1(c0);cV(c1,bx)})}else{q(function(){var c0=v.findContentNodesWithinNode(cZ);var c1=cn(c0);cV(c1,bx)})}})};this.trackContentInteraction=function(c1,c2,cZ,c0){if(M(bU)){return}c1=a(c1);c2=a(c2);cZ=a(cZ);c0=a(c0);if(!c1||!c2){return}cZ=cZ||"Unknown";b5(function(){var c3=aH(c1,c2,cZ,c0);bt(c3,bx)})};this.trackContentInteractionNode=function(c0,cZ){if(M(bU)||!c0){return}b5(function(){var c1=cS(c0,cZ);bt(c1,bx)})};this.logAllContentBlocksOnPage=function(){var c1=v.findContentNodes();var cZ=v.collectContent(c1);var c0=typeof console;if(c0!=="undefined"&&console&&console.log){console.log(cZ)}};this.trackEvent=function(c0,c2,cZ,c1,c4,c3){b5(function(){an(c0,c2,cZ,c1,c4,c3)})};this.trackSiteSearch=function(cZ,c1,c0,c2){b5(function(){bW(cZ,c1,c0,c2)})};this.setEcommerceView=function(c2,cZ,c1,c0){if(!I(c1)||!c1.length){c1=""}else{if(c1 instanceof Array){c1=JSON_PIWIK.stringify(c1)}}bK[5]=["_pkc",c1];if(I(c0)&&String(c0).length){bK[2]=["_pkp",c0]
-}if((!I(c2)||!c2.length)&&(!I(cZ)||!cZ.length)){return}if(I(c2)&&c2.length){bK[3]=["_pks",c2]}if(!I(cZ)||!cZ.length){cZ=""}bK[4]=["_pkn",cZ]};this.addEcommerceItem=function(c3,cZ,c1,c0,c2){if(c3.length){cJ[c3]=[c3,cZ,c1,c0,c2]}};this.trackEcommerceOrder=function(cZ,c3,c2,c1,c0,c4){bN(cZ,c3,c2,c1,c0,c4)};this.trackEcommerceCartUpdate=function(cZ){bi(cZ)};this.trackRequest=function(c0,c2,c1,cZ){b5(function(){var c3=ch(c0,c2,cZ);bt(c3,bx,c1)})};e.trigger("TrackerSetup",[this])}function G(){return{push:ab}}function c(ao,an){var ap={};var al,am;for(al=0;al<an.length;al++){var aj=an[al];ap[aj]=1;for(am=0;am<ao.length;am++){if(ao[am]&&ao[am][0]){var ak=ao[am][0];if(aj===ak){ab(ao[am]);delete ao[am];if(ap[ak]>1&&ak!=="addTracker"){af("The method "+ak+' is registered more than once in "_paq" variable. Only the last call has an effect. Please have a look at the multiple Piwik trackers documentation: https://developer.piwik.org/guides/tracking-javascript-guide#multiple-piwik-trackers')}ap[ak]++}}}}return ao
-}var B=["addTracker","disableCookies","setTrackerUrl","setAPIUrl","enableCrossDomainLinking","setCrossDomainLinkingTimeout","setSecureCookie","setCookiePath","setCookieDomain","setDomains","setUserId","setSiteId","enableLinkTracking"];function Z(aj,al){var ak=new P(aj,al);H.push(ak);_paq=c(_paq,B);for(D=0;D<_paq.length;D++){if(_paq[D]){ab(_paq[D])}}_paq=new G();return ak}ai(S,"beforeunload",ad,false);Date.prototype.getTimeAlias=Date.prototype.getTime;e={initialized:false,JSON:JSON_PIWIK,DOM:{addEventListener:function(am,al,ak,aj){var an=typeof aj;if(an==="undefined"){aj=false}ai(am,al,ak,aj)},onLoad:n,onReady:q,isNodeVisible:j,isOrWasNodeVisible:v.isNodeVisible},on:function(ak,aj){if(!x[ak]){x[ak]=[]}x[ak].push(aj)},off:function(al,ak){if(!x[al]){return}var aj=0;for(aj;aj<x[al].length;aj++){if(x[al][aj]===ak){x[al].splice(aj,1)}}},trigger:function(al,am,ak){if(!x[al]){return}var aj=0;for(aj;aj<x[al].length;aj++){x[al][aj].apply(ak||S,am)}},addPlugin:function(aj,ak){b[aj]=ak},getTracker:function(aj,ak){if(!I(ak)){ak=this.getAsyncTracker().getSiteId()
-}if(!I(aj)){aj=this.getAsyncTracker().getTrackerUrl()}return new P(aj,ak)},getAsyncTrackers:function(){return H},addTracker:function(aj,al){var ak;if(!H.length){ak=Z(aj,al)}else{ak=H[0].addTracker(aj,al)}return ak},getAsyncTracker:function(ak,an){var am;if(H&&H.length&&H[0]){am=H[0]}else{return Z(ak,an)}if(!an&&!ak){return am}if((!I(an)||null===an)&&am){an=am.getSiteId()}if((!I(ak)||null===ak)&&am){ak=am.getTrackerUrl()}var al,aj=0;for(aj;aj<H.length;aj++){al=H[aj];if(al&&String(al.getSiteId())===String(an)&&al.getTrackerUrl()===ak){return al}}},retryMissedPluginCalls:function(){var ak=ac;ac=[];var aj=0;for(aj;aj<ak.length;aj++){ab(ak[aj])}}};if(typeof define==="function"&&define.amd){define("piwik",[],function(){return e})}return e}());
+if(ad=="}"){break}if(ae){if(ad==","){ad=y();if(ad=="}"){H()}}else{H()}}if(ad==","||typeof ad!="string"||(F?ad.charAt(0):ad[0])!="@"||y()!=":"){H()}ac[ad.slice(1)]=W(y())}return ac}}H()}return ad};var P=function(ae,ad,af){var ac=w(ae,ad,af);if(ac===L){delete ae[ad]}else{ae[ad]=ac}};var w=function(af,ae,ag){var ad=af[ae],ac;if(typeof ad=="object"&&ad){if(u.call(ad)==E){for(ac=ad.length;ac--;){P(ad,ac,ag)}}else{m(ad,function(ah){P(ad,ah,ag)})}}return ag.call(af,ae,ad)};V.parse=function(ae,af){var ac,ad;G=0;X=""+ae;ac=W(y());if(y()!="$"){H()}G=X=null;return af&&u.call(af)==U?w((ad={},ad[""]=ac,ad),"",af):ac}}}V.runInContext=j;return V}if(h&&!c){j(i,h)}else{var f=i.JSON,k=i.JSON3,d=false;var g=j(i,(i.JSON3={noConflict:function(){if(!d){d=true;i.JSON=f;i.JSON3=k;f=k=null}return g}}));i.JSON={parse:g.parse,stringify:g.stringify}}if(c){define(function(){return g})}}).call(this);JSON_PIWIK=a})()}if(typeof _paq!=="object"){_paq=[]}if(typeof window.Piwik!=="object"){window.Piwik=(function(){var r,b={},y={},G=document,h=navigator,W=screen,T=window,i=T.performance||T.mozPerformance||T.msPerformance||T.webkitPerformance,t=T.encodeURIComponent,S=T.decodeURIComponent,l=unescape,I=[],E,e,ad=[],x=0,m=false;
+function p(ak){try{return S(ak)}catch(al){return unescape(ak)}}function J(al){var ak=typeof al;return ak!=="undefined"}function A(ak){return typeof ak==="function"}function V(ak){return typeof ak==="object"}function w(ak){return typeof ak==="string"||ak instanceof String}function B(al){if(!al){return true}var ak;var am=true;for(ak in al){if(Object.prototype.hasOwnProperty.call(al,ak)){am=false}}return am}function ag(ak){var al=typeof console;if(al!=="undefined"&&console&&console.error){console.error(ak)}}function ac(){var ap,ao,ar,al,ak;for(ap=0;ap<arguments.length;ap+=1){ak=null;if(arguments[ap]&&arguments[ap].slice){ak=arguments[ap].slice()}al=arguments[ap];ar=al.shift();var aq,am;var an=w(ar)&&ar.indexOf("::")>0;if(an){aq=ar.split("::");am=aq[0];ar=aq[1];if("object"===typeof e[am]&&"function"===typeof e[am][ar]){e[am][ar].apply(e[am],al)}else{if(ak){ad.push(ak)}}}else{for(ao=0;ao<I.length;ao++){if(w(ar)){am=I[ao];var at=ar.indexOf(".")>0;if(at){aq=ar.split(".");if(am&&"object"===typeof am[aq[0]]){am=am[aq[0]];
+ar=aq[1]}else{if(ak){ad.push(ak);break}}}if(am[ar]){am[ar].apply(am,al)}else{var au="The method '"+ar+'\' was not found in "_paq" variable. Please have a look at the Piwik tracker documentation: https://developer.piwik.org/api-reference/tracking-javascript';ag(au);if(!at){throw new TypeError(au)}}if(ar==="addTracker"){break}if(ar==="setTrackerUrl"||ar==="setSiteId"){break}}else{ar.apply(I[ao],al)}}}}}function aj(an,am,al,ak){if(an.addEventListener){an.addEventListener(am,al,ak);return true}if(an.attachEvent){return an.attachEvent("on"+am,al)}an["on"+am]=al}function n(ak){if(G.readyState==="complete"){ak()}else{if(T.addEventListener){T.addEventListener("load",ak)}else{if(T.attachEvent){T.attachEvent("onload",ak)}}}}function q(an){var ak=false;if(G.attachEvent){ak=G.readyState==="complete"}else{ak=G.readyState!=="loading"}if(ak){an();return}var am;if(G.addEventListener){aj(G,"DOMContentLoaded",function al(){G.removeEventListener("DOMContentLoaded",al,false);if(!ak){ak=true;an()}})}else{if(G.attachEvent){G.attachEvent("onreadystatechange",function al(){if(G.readyState==="complete"){G.detachEvent("onreadystatechange",al);
+if(!ak){ak=true;an()}}});if(G.documentElement.doScroll&&T===T.top){(function al(){if(!ak){try{G.documentElement.doScroll("left")}catch(ao){setTimeout(al,0);return}ak=true;an()}}())}}}aj(T,"load",function(){if(!ak){ak=true;an()}},false)}function Z(al,aq,ar){if(!al){return""}var ak="",an,am,ao,ap;for(an in b){if(Object.prototype.hasOwnProperty.call(b,an)){ap=b[an]&&"function"===typeof b[an][al];if(ap){am=b[an][al];ao=am(aq||{},ar);if(ao){ak+=ao}}}}return ak}function ae(){var ak;m=true;Z("unload");if(r){do{ak=new Date()}while(ak.getTimeAlias()<r)}}function o(am,al){var ak=G.createElement("script");ak.type="text/javascript";ak.src=am;if(ak.readyState){ak.onreadystatechange=function(){var an=this.readyState;if(an==="loaded"||an==="complete"){ak.onreadystatechange=null;al()}}}else{ak.onload=al}G.getElementsByTagName("head")[0].appendChild(ak)}function K(){var ak="";try{ak=T.top.document.referrer}catch(am){if(T.parent){try{ak=T.parent.document.referrer}catch(al){ak=""}}}if(ak===""){ak=G.referrer
+}return ak}function s(ak){var am=new RegExp("^([a-z]+):"),al=am.exec(ak);return al?al[1]:null}function d(ak){var am=new RegExp("^(?:(?:https?|ftp):)/*(?:[^@]+@)?([^:/#]+)"),al=am.exec(ak);return al?al[1]:ak}function af(al,ak){al=String(al);return al.lastIndexOf(ak,0)===0}function R(al,ak){al=String(al);return al.indexOf(ak,al.length-ak.length)!==-1}function z(al,ak){al=String(al);return al.indexOf(ak)!==-1}function g(al,ak){al=String(al);return al.substr(0,al.length-ak)}function F(an,am,ap){an=String(an);if(!ap){ap=""}var ak=an.indexOf("#");var aq=an.length;if(ak===-1){ak=aq}var ao=an.substr(0,ak);var al=an.substr(ak,aq-ak);if(ao.indexOf("?")===-1){ao+="?"}else{if(!R(ao,"?")){ao+="&"}}return ao+t(am)+"="+t(ap)+al}function k(al,am){al=String(al);if(al.indexOf("?"+am+"=")===-1&&al.indexOf("&"+am+"=")===-1){return al}var an=al.indexOf("?");if(an===-1){return al}var ak=al.substr(an+1);var ar=al.substr(0,an);if(ak){var at="";var av=ak.indexOf("#");if(av!==-1){at=ak.substr(av+1);ak=ak.substr(0,av)
+}var ao;var aq=ak.split("&");var ap=aq.length-1;for(ap;ap>=0;ap--){ao=aq[ap].split("=")[0];if(ao===am){aq.splice(ap,1)}}var au=aq.join("&");if(au){ar=ar+"?"+au}if(at){ar+="#"+at}}return ar}function f(am,al){var ak="[\\?&#]"+al+"=([^&#]*)";var ao=new RegExp(ak);var an=ao.exec(am);return an?S(an[1]):""}function a(ak){if(ak&&String(ak)===ak){return ak.replace(/^\s+|\s+$/g,"")}return ak}function D(ak){return unescape(t(ak))}function ai(aA){var am=function(aG,aF){return(aG<<aF)|(aG>>>(32-aF))},aB=function(aI){var aG="",aH,aF;for(aH=7;aH>=0;aH--){aF=(aI>>>(aH*4))&15;aG+=aF.toString(16)}return aG},ap,aD,aC,al=[],au=1732584193,ar=4023233417,aq=2562383102,ao=271733878,an=3285377520,az,ay,ax,aw,av,aE,ak,at=[];aA=D(aA);ak=aA.length;for(aD=0;aD<ak-3;aD+=4){aC=aA.charCodeAt(aD)<<24|aA.charCodeAt(aD+1)<<16|aA.charCodeAt(aD+2)<<8|aA.charCodeAt(aD+3);at.push(aC)}switch(ak&3){case 0:aD=2147483648;break;case 1:aD=aA.charCodeAt(ak-1)<<24|8388608;break;case 2:aD=aA.charCodeAt(ak-2)<<24|aA.charCodeAt(ak-1)<<16|32768;
+break;case 3:aD=aA.charCodeAt(ak-3)<<24|aA.charCodeAt(ak-2)<<16|aA.charCodeAt(ak-1)<<8|128;break}at.push(aD);while((at.length&15)!==14){at.push(0)}at.push(ak>>>29);at.push((ak<<3)&4294967295);for(ap=0;ap<at.length;ap+=16){for(aD=0;aD<16;aD++){al[aD]=at[ap+aD]}for(aD=16;aD<=79;aD++){al[aD]=am(al[aD-3]^al[aD-8]^al[aD-14]^al[aD-16],1)}az=au;ay=ar;ax=aq;aw=ao;av=an;for(aD=0;aD<=19;aD++){aE=(am(az,5)+((ay&ax)|(~ay&aw))+av+al[aD]+1518500249)&4294967295;av=aw;aw=ax;ax=am(ay,30);ay=az;az=aE}for(aD=20;aD<=39;aD++){aE=(am(az,5)+(ay^ax^aw)+av+al[aD]+1859775393)&4294967295;av=aw;aw=ax;ax=am(ay,30);ay=az;az=aE}for(aD=40;aD<=59;aD++){aE=(am(az,5)+((ay&ax)|(ay&aw)|(ax&aw))+av+al[aD]+2400959708)&4294967295;av=aw;aw=ax;ax=am(ay,30);ay=az;az=aE}for(aD=60;aD<=79;aD++){aE=(am(az,5)+(ay^ax^aw)+av+al[aD]+3395469782)&4294967295;av=aw;aw=ax;ax=am(ay,30);ay=az;az=aE}au=(au+az)&4294967295;ar=(ar+ay)&4294967295;aq=(aq+ax)&4294967295;ao=(ao+aw)&4294967295;an=(an+av)&4294967295}aE=aB(au)+aB(ar)+aB(aq)+aB(ao)+aB(an);
+return aE.toLowerCase()}function Y(am,ak,al){if(!am){am=""}if(!ak){ak=""}if(am==="translate.googleusercontent.com"){if(al===""){al=ak}ak=f(ak,"u");am=d(ak)}else{if(am==="cc.bingj.com"||am==="webcache.googleusercontent.com"||am.slice(0,5)==="74.6."){ak=G.links[0].href;am=d(ak)}}return[am,ak,al]}function L(al){var ak=al.length;if(al.charAt(--ak)==="."){al=al.slice(0,ak)}if(al.slice(0,2)==="*."){al=al.slice(1)}if(al.indexOf("/")!==-1){al=al.substr(0,al.indexOf("/"))}return al}function ah(al){al=al&&al.text?al.text:al;if(!w(al)){var ak=G.getElementsByTagName("title");if(ak&&J(ak[0])){al=ak[0].text}}return al}function P(ak){if(!ak){return[]}if(!J(ak.children)&&J(ak.childNodes)){return ak.children}if(J(ak.children)){return ak.children}return[]}function U(al,ak){if(!al||!ak){return false}if(al.contains){return al.contains(ak)}if(al===ak){return true}if(al.compareDocumentPosition){return !!(al.compareDocumentPosition(ak)&16)}return false}function M(am,an){if(am&&am.indexOf){return am.indexOf(an)
+}if(!J(am)||am===null){return -1}if(!am.length){return -1}var ak=am.length;if(ak===0){return -1}var al=0;while(al<ak){if(am[al]===an){return al}al++}return -1}function j(am){if(!am){return false}function ak(ao,ap){if(T.getComputedStyle){return G.defaultView.getComputedStyle(ao,null)[ap]}if(ao.currentStyle){return ao.currentStyle[ap]}}function an(ao){ao=ao.parentNode;while(ao){if(ao===G){return true}ao=ao.parentNode}return false}function al(aq,ax,ao,au,ar,av,at){var ap=aq.parentNode,aw=1;if(!an(aq)){return false}if(9===ap.nodeType){return true}if("0"===ak(aq,"opacity")||"none"===ak(aq,"display")||"hidden"===ak(aq,"visibility")){return false}if(!J(ax)||!J(ao)||!J(au)||!J(ar)||!J(av)||!J(at)){ax=aq.offsetTop;ar=aq.offsetLeft;au=ax+aq.offsetHeight;ao=ar+aq.offsetWidth;av=aq.offsetWidth;at=aq.offsetHeight}if(am===aq&&(0===at||0===av)&&"hidden"===ak(aq,"overflow")){return false}if(ap){if(("hidden"===ak(ap,"overflow")||"scroll"===ak(ap,"overflow"))){if(ar+aw>ap.offsetWidth+ap.scrollLeft||ar+av-aw<ap.scrollLeft||ax+aw>ap.offsetHeight+ap.scrollTop||ax+at-aw<ap.scrollTop){return false
+}}if(aq.offsetParent===ap){ar+=ap.offsetLeft;ax+=ap.offsetTop}return al(ap,ax,ao,au,ar,av,at)}return true}return al(am)}var ab={htmlCollectionToArray:function(am){var ak=[],al;if(!am||!am.length){return ak}for(al=0;al<am.length;al++){ak.push(am[al])}return ak},find:function(ak){if(!document.querySelectorAll||!ak){return[]}var al=document.querySelectorAll(ak);return this.htmlCollectionToArray(al)},findMultiple:function(am){if(!am||!am.length){return[]}var al,an;var ak=[];for(al=0;al<am.length;al++){an=this.find(am[al]);ak=ak.concat(an)}ak=this.makeNodesUnique(ak);return ak},findNodesByTagName:function(al,ak){if(!al||!ak||!al.getElementsByTagName){return[]}var am=al.getElementsByTagName(ak);return this.htmlCollectionToArray(am)},makeNodesUnique:function(ak){var ap=[].concat(ak);ak.sort(function(ar,aq){if(ar===aq){return 0}var au=M(ap,ar);var at=M(ap,aq);if(au===at){return 0}return au>at?-1:1});if(ak.length<=1){return ak}var al=0;var an=0;var ao=[];var am;am=ak[al++];while(am){if(am===ak[al]){an=ao.push(al)
+}am=ak[al++]||null}while(an--){ak.splice(ao[an],1)}return ak},getAttributeValueFromNode:function(ao,am){if(!this.hasNodeAttribute(ao,am)){return}if(ao&&ao.getAttribute){return ao.getAttribute(am)}if(!ao||!ao.attributes){return}var an=(typeof ao.attributes[am]);if("undefined"===an){return}if(ao.attributes[am].value){return ao.attributes[am].value}if(ao.attributes[am].nodeValue){return ao.attributes[am].nodeValue}var al;var ak=ao.attributes;if(!ak){return}for(al=0;al<ak.length;al++){if(ak[al].nodeName===am){return ak[al].nodeValue}}return null},hasNodeAttributeWithValue:function(al,ak){var am=this.getAttributeValueFromNode(al,ak);return !!am},hasNodeAttribute:function(am,ak){if(am&&am.hasAttribute){return am.hasAttribute(ak)}if(am&&am.attributes){var al=(typeof am.attributes[ak]);return"undefined"!==al}return false},hasNodeCssClass:function(am,ak){if(am&&ak&&am.className){var al=typeof am.className==="string"?am.className.split(" "):[];if(-1!==M(al,ak)){return true}}return false},findNodesHavingAttribute:function(ao,am,ak){if(!ak){ak=[]
+}if(!ao||!am){return ak}var an=P(ao);if(!an||!an.length){return ak}var al,ap;for(al=0;al<an.length;al++){ap=an[al];if(this.hasNodeAttribute(ap,am)){ak.push(ap)}ak=this.findNodesHavingAttribute(ap,am,ak)}return ak},findFirstNodeHavingAttribute:function(am,al){if(!am||!al){return}if(this.hasNodeAttribute(am,al)){return am}var ak=this.findNodesHavingAttribute(am,al);if(ak&&ak.length){return ak[0]}},findFirstNodeHavingAttributeWithValue:function(an,am){if(!an||!am){return}if(this.hasNodeAttributeWithValue(an,am)){return an}var ak=this.findNodesHavingAttribute(an,am);if(!ak||!ak.length){return}var al;for(al=0;al<ak.length;al++){if(this.getAttributeValueFromNode(ak[al],am)){return ak[al]}}},findNodesHavingCssClass:function(ao,an,ak){if(!ak){ak=[]}if(!ao||!an){return ak}if(ao.getElementsByClassName){var ap=ao.getElementsByClassName(an);return this.htmlCollectionToArray(ap)}var am=P(ao);if(!am||!am.length){return[]}var al,aq;for(al=0;al<am.length;al++){aq=am[al];if(this.hasNodeCssClass(aq,an)){ak.push(aq)
+}ak=this.findNodesHavingCssClass(aq,an,ak)}return ak},findFirstNodeHavingClass:function(am,al){if(!am||!al){return}if(this.hasNodeCssClass(am,al)){return am}var ak=this.findNodesHavingCssClass(am,al);if(ak&&ak.length){return ak[0]}},isLinkElement:function(al){if(!al){return false}var ak=String(al.nodeName).toLowerCase();var an=["a","area"];var am=M(an,ak);return am!==-1},setAnyAttribute:function(al,ak,am){if(!al||!ak){return}if(al.setAttribute){al.setAttribute(ak,am)}else{al[ak]=am}}};var v={CONTENT_ATTR:"data-track-content",CONTENT_CLASS:"piwikTrackContent",CONTENT_NAME_ATTR:"data-content-name",CONTENT_PIECE_ATTR:"data-content-piece",CONTENT_PIECE_CLASS:"piwikContentPiece",CONTENT_TARGET_ATTR:"data-content-target",CONTENT_TARGET_CLASS:"piwikContentTarget",CONTENT_IGNOREINTERACTION_ATTR:"data-content-ignoreinteraction",CONTENT_IGNOREINTERACTION_CLASS:"piwikContentIgnoreInteraction",location:undefined,findContentNodes:function(){var al="."+this.CONTENT_CLASS;var ak="["+this.CONTENT_ATTR+"]";
+var am=ab.findMultiple([al,ak]);return am},findContentNodesWithinNode:function(an){if(!an){return[]}var al=ab.findNodesHavingCssClass(an,this.CONTENT_CLASS);var ak=ab.findNodesHavingAttribute(an,this.CONTENT_ATTR);if(ak&&ak.length){var am;for(am=0;am<ak.length;am++){al.push(ak[am])}}if(ab.hasNodeAttribute(an,this.CONTENT_ATTR)){al.push(an)}else{if(ab.hasNodeCssClass(an,this.CONTENT_CLASS)){al.push(an)}}al=ab.makeNodesUnique(al);return al},findParentContentNode:function(al){if(!al){return}var am=al;var ak=0;while(am&&am!==G&&am.parentNode){if(ab.hasNodeAttribute(am,this.CONTENT_ATTR)){return am}if(ab.hasNodeCssClass(am,this.CONTENT_CLASS)){return am}am=am.parentNode;if(ak>1000){break}ak++}},findPieceNode:function(al){var ak;ak=ab.findFirstNodeHavingAttribute(al,this.CONTENT_PIECE_ATTR);if(!ak){ak=ab.findFirstNodeHavingClass(al,this.CONTENT_PIECE_CLASS)}if(ak){return ak}return al},findTargetNodeNoDefault:function(ak){if(!ak){return}var al=ab.findFirstNodeHavingAttributeWithValue(ak,this.CONTENT_TARGET_ATTR);
+if(al){return al}al=ab.findFirstNodeHavingAttribute(ak,this.CONTENT_TARGET_ATTR);if(al){return al}al=ab.findFirstNodeHavingClass(ak,this.CONTENT_TARGET_CLASS);if(al){return al}},findTargetNode:function(ak){var al=this.findTargetNodeNoDefault(ak);if(al){return al}return ak},findContentName:function(al){if(!al){return}var ao=ab.findFirstNodeHavingAttributeWithValue(al,this.CONTENT_NAME_ATTR);if(ao){return ab.getAttributeValueFromNode(ao,this.CONTENT_NAME_ATTR)}var ak=this.findContentPiece(al);if(ak){return this.removeDomainIfIsInLink(ak)}if(ab.hasNodeAttributeWithValue(al,"title")){return ab.getAttributeValueFromNode(al,"title")}var am=this.findPieceNode(al);if(ab.hasNodeAttributeWithValue(am,"title")){return ab.getAttributeValueFromNode(am,"title")}var an=this.findTargetNode(al);if(ab.hasNodeAttributeWithValue(an,"title")){return ab.getAttributeValueFromNode(an,"title")}},findContentPiece:function(al){if(!al){return}var an=ab.findFirstNodeHavingAttributeWithValue(al,this.CONTENT_PIECE_ATTR);
+if(an){return ab.getAttributeValueFromNode(an,this.CONTENT_PIECE_ATTR)}var ak=this.findPieceNode(al);var am=this.findMediaUrlInNode(ak);if(am){return this.toAbsoluteUrl(am)}},findContentTarget:function(am){if(!am){return}var an=this.findTargetNode(am);if(ab.hasNodeAttributeWithValue(an,this.CONTENT_TARGET_ATTR)){return ab.getAttributeValueFromNode(an,this.CONTENT_TARGET_ATTR)}var al;if(ab.hasNodeAttributeWithValue(an,"href")){al=ab.getAttributeValueFromNode(an,"href");return this.toAbsoluteUrl(al)}var ak=this.findPieceNode(am);if(ab.hasNodeAttributeWithValue(ak,"href")){al=ab.getAttributeValueFromNode(ak,"href");return this.toAbsoluteUrl(al)}},isSameDomain:function(ak){if(!ak||!ak.indexOf){return false}if(0===ak.indexOf(this.getLocation().origin)){return true}var al=ak.indexOf(this.getLocation().host);if(8>=al&&0<=al){return true}return false},removeDomainIfIsInLink:function(am){var al="^https?://[^/]+";var ak="^.*//[^/]+";if(am&&am.search&&-1!==am.search(new RegExp(al))&&this.isSameDomain(am)){am=am.replace(new RegExp(ak),"");
+if(!am){am="/"}}return am},findMediaUrlInNode:function(ao){if(!ao){return}var am=["img","embed","video","audio"];var ak=ao.nodeName.toLowerCase();if(-1!==M(am,ak)&&ab.findFirstNodeHavingAttributeWithValue(ao,"src")){var an=ab.findFirstNodeHavingAttributeWithValue(ao,"src");return ab.getAttributeValueFromNode(an,"src")}if(ak==="object"&&ab.hasNodeAttributeWithValue(ao,"data")){return ab.getAttributeValueFromNode(ao,"data")}if(ak==="object"){var ap=ab.findNodesByTagName(ao,"param");if(ap&&ap.length){var al;for(al=0;al<ap.length;al++){if("movie"===ab.getAttributeValueFromNode(ap[al],"name")&&ab.hasNodeAttributeWithValue(ap[al],"value")){return ab.getAttributeValueFromNode(ap[al],"value")}}}var aq=ab.findNodesByTagName(ao,"embed");if(aq&&aq.length){return this.findMediaUrlInNode(aq[0])}}},trim:function(ak){return a(ak)},isOrWasNodeInViewport:function(ap){if(!ap||!ap.getBoundingClientRect||ap.nodeType!==1){return true}var ao=ap.getBoundingClientRect();var an=G.documentElement||{};var am=ao.top<0;
+if(am&&ap.offsetTop){am=(ap.offsetTop+ao.height)>0}var al=an.clientWidth;if(T.innerWidth&&al>T.innerWidth){al=T.innerWidth}var ak=an.clientHeight;if(T.innerHeight&&ak>T.innerHeight){ak=T.innerHeight}return((ao.bottom>0||am)&&ao.right>0&&ao.left<al&&((ao.top<ak)||am))},isNodeVisible:function(al){var ak=j(al);var am=this.isOrWasNodeInViewport(al);return ak&&am},buildInteractionRequestParams:function(ak,al,am,an){var ao="";if(ak){ao+="c_i="+t(ak)}if(al){if(ao){ao+="&"}ao+="c_n="+t(al)}if(am){if(ao){ao+="&"}ao+="c_p="+t(am)}if(an){if(ao){ao+="&"}ao+="c_t="+t(an)}return ao},buildImpressionRequestParams:function(ak,al,am){var an="c_n="+t(ak)+"&c_p="+t(al);if(am){an+="&c_t="+t(am)}return an},buildContentBlock:function(am){if(!am){return}var ak=this.findContentName(am);var al=this.findContentPiece(am);var an=this.findContentTarget(am);ak=this.trim(ak);al=this.trim(al);an=this.trim(an);return{name:ak||"Unknown",piece:al||"Unknown",target:an||""}},collectContent:function(an){if(!an||!an.length){return[]
+}var am=[];var ak,al;for(ak=0;ak<an.length;ak++){al=this.buildContentBlock(an[ak]);if(J(al)){am.push(al)}}return am},setLocation:function(ak){this.location=ak},getLocation:function(){var ak=this.location||T.location;if(!ak.origin){ak.origin=ak.protocol+"//"+ak.hostname+(ak.port?":"+ak.port:"")}return ak},toAbsoluteUrl:function(al){if((!al||String(al)!==al)&&al!==""){return al}if(""===al){return this.getLocation().href}if(al.search(/^\/\//)!==-1){return this.getLocation().protocol+al}if(al.search(/:\/\//)!==-1){return al}if(0===al.indexOf("#")){return this.getLocation().origin+this.getLocation().pathname+al}if(0===al.indexOf("?")){return this.getLocation().origin+this.getLocation().pathname+al}if(0===al.search("^[a-zA-Z]{2,11}:")){return al}if(al.search(/^\//)!==-1){return this.getLocation().origin+al}var ak="(.*/)";var am=this.getLocation().origin+this.getLocation().pathname.match(new RegExp(ak))[0];return am+al},isUrlToCurrentDomain:function(al){var am=this.toAbsoluteUrl(al);if(!am){return false
+}var ak=this.getLocation().origin;if(ak===am){return true}if(0===String(am).indexOf(ak)){if(":"===String(am).substr(ak.length,1)){return false}return true}return false},setHrefAttribute:function(al,ak){if(!al||!ak){return}ab.setAnyAttribute(al,"href",ak)},shouldIgnoreInteraction:function(am){var al=ab.hasNodeAttribute(am,this.CONTENT_IGNOREINTERACTION_ATTR);var ak=ab.hasNodeCssClass(am,this.CONTENT_IGNOREINTERACTION_CLASS);return al||ak}};function O(al,ao){if(ao){return ao}al=v.toAbsoluteUrl(al);if(z(al,"?")){var an=al.indexOf("?");al=al.slice(0,an)}if(R(al,"piwik.php")){al=g(al,"piwik.php".length)}else{if(R(al,".php")){var ak=al.lastIndexOf("/");var am=1;al=al.slice(0,ak+am)}}if(R(al,"/js/")){al=g(al,"js/".length)}return al}function N(aq){var at="Piwik_Overlay";var al=new RegExp("index\\.php\\?module=Overlay&action=startOverlaySession&idSite=([0-9]+)&period=([^&]+)&date=([^&]+)(&segment=.*)?$");var am=al.exec(G.referrer);if(am){var ao=am[1];if(ao!==String(aq)){return false}var ap=am[2],ak=am[3],an=am[4];
+if(!an){an=""}else{if(an.indexOf("&segment=")===0){an=an.substr("&segment=".length)}}T.name=at+"###"+ap+"###"+ak+"###"+an}var ar=T.name.split("###");return ar.length===4&&ar[0]===at}function X(al,ar,an){var aq=T.name.split("###"),ap=aq[1],ak=aq[2],ao=aq[3],am=O(al,ar);o(am+"plugins/Overlay/client/client.js?v=1",function(){Piwik_Overlay_Client.initialize(am,an,ap,ak,ao)})}function u(){var am;try{am=T.frameElement}catch(al){return true}if(J(am)){return(am&&String(am.nodeName).toLowerCase()==="iframe")?true:false}try{return T.self!==T.top}catch(ak){return true}}function Q(b5,b0){var bz=this,a6="mtm_consent",cB="mtm_consent_removed",bV=Y(G.domain,T.location.href,K()),cJ=L(bV[0]),bE=p(bV[1]),bf=p(bV[2]),cH=false,b9="GET",cW=b9,aC="application/x-www-form-urlencoded; charset=UTF-8",co=aC,ay=b5||"",by="",cN="",bX=b0||"",bq="",bF="",aX,bb="",cT=["7z","aac","apk","arc","arj","asf","asx","avi","azw3","bin","csv","deb","dmg","doc","docx","epub","exe","flv","gif","gz","gzip","hqx","ibooks","jar","jpg","jpeg","js","mobi","mp2","mp3","mp4","mpg","mpeg","mov","movie","msi","msp","odb","odf","odg","ods","odt","ogg","ogv","pdf","phps","png","ppt","pptx","qt","qtm","ra","ram","rar","rpm","sea","sit","tar","tbz","tbz2","bz","bz2","tgz","torrent","txt","wav","wma","wmv","wpd","xls","xlsx","xml","z","zip"],ar=[cJ],br=[],bC=[],a1=[],bA=500,cx,aY,bI,bG,ak,ci=["pk_campaign","piwik_campaign","utm_campaign","utm_source","utm_medium"],bx=["pk_kwd","piwik_kwd","utm_term"],bc="_pk_",aq="pk_vid",aS=180,cL,bh,bJ=false,bd=false,cF,a7,bn,cy=33955200000,cg=1800000,cS=15768000000,aV=true,ce=0,bH=false,aJ=false,b2,bN={},cd={},be={},bl=200,cO={},cU={},b1=[],b6=false,cr=false,al=false,cV=false,cC=false,aH=false,a5=u(),cM=null,b3,aK,bs,bY=ai,bg,aE,cj=0,bm=["id","ses","cvar","ref"],bt=null,cz=[];
+try{bb=G.title}catch(cp){bb=""}function cZ(da,c8,c7,c9,c6,c5){if(bd){return}var c4;if(c7){c4=new Date();c4.setTime(c4.getTime()+c7)}G.cookie=da+"="+t(c8)+(c7?";expires="+c4.toGMTString():"")+";path="+(c9||"/")+(c6?";domain="+c6:"")+(c5?";secure":"")}function ax(c6){if(bd){return 0}var c4=new RegExp("(^|;)[ ]*"+c6+"=([^;]*)"),c5=c4.exec(G.cookie);return c5?S(c5[2]):0}bt=!ax(cB);function bT(c4){var c5;c4=k(c4,aq);if(bG){c5=new RegExp("#.*");return c4.replace(c5,"")}return c4}function bM(c6,c4){var c7=s(c4),c5;if(c7){return c4}if(c4.slice(0,1)==="/"){return s(c6)+"://"+d(c6)+c4}c6=bT(c6);c5=c6.indexOf("?");if(c5>=0){c6=c6.slice(0,c5)}c5=c6.lastIndexOf("/");if(c5!==c6.length-1){c6=c6.slice(0,c5+1)}return c6+c4}function cw(c6,c4){var c5;c6=String(c6).toLowerCase();c4=String(c4).toLowerCase();if(c6===c4){return true}if(c4.slice(0,1)==="."){if(c6===c4.slice(1)){return true}c5=c6.length-c4.length;if((c5>0)&&(c6.slice(c5)===c4)){return true}}return false}function cc(c4){var c5=document.createElement("a");
+if(c4.indexOf("//")!==0&&c4.indexOf("http")!==0){if(c4.indexOf("*")===0){c4=c4.substr(1)}if(c4.indexOf(".")===0){c4=c4.substr(1)}c4="http://"+c4}c5.href=v.toAbsoluteUrl(c4);if(c5.pathname){return c5.pathname}return""}function aW(c5,c4){if(!af(c4,"/")){c4="/"+c4}if(!af(c5,"/")){c5="/"+c5}var c6=(c4==="/"||c4==="/*");if(c6){return true}if(c5===c4){return true}c4=String(c4).toLowerCase();c5=String(c5).toLowerCase();if(R(c4,"*")){c4=c4.slice(0,-1);c6=(!c4||c4==="/");if(c6){return true}if(c5===c4){return true}return c5.indexOf(c4)===0}if(!R(c5,"/")){c5+="/"}if(!R(c4,"/")){c4+="/"}return c5.indexOf(c4)===0}function an(c8,da){var c5,c4,c6,c7,c9;for(c5=0;c5<ar.length;c5++){c7=L(ar[c5]);c9=cc(ar[c5]);if(cw(c8,c7)&&aW(da,c9)){return true}}return false}function aO(c7){var c5,c4,c6;for(c5=0;c5<ar.length;c5++){c4=L(ar[c5].toLowerCase());if(c7===c4){return true}if(c4.slice(0,1)==="."){if(c7===c4.slice(1)){return true}c6=c7.length-c4.length;if((c6>0)&&(c7.slice(c6)===c4)){return true}}}return false}function ch(c4,c6){c4=c4.replace("send_image=0","send_image=1");
+var c5=new Image(1,1);c5.onload=function(){E=0;if(typeof c6==="function"){c6()}};c5.src=ay+(ay.indexOf("?")<0?"?":"&")+c4}function aZ(c5){var c9="object"===typeof h&&"function"===typeof h.sendBeacon&&"function"===typeof Blob;if(!c9){return false}var c8={type:"application/x-www-form-urlencoded; charset=UTF-8"};var c7=false;try{var c4=new Blob([c5],c8);c7=h.sendBeacon(ay,c4)}catch(c6){return false}return c7}function cR(c5,c6,c4){if(!J(c4)||null===c4){c4=true}if(m&&aZ(c5)){return}setTimeout(function(){if(m&&aZ(c5)){return}var c9;try{var c8=T.XMLHttpRequest?new T.XMLHttpRequest():T.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):null;c8.open("POST",ay,true);c8.onreadystatechange=function(){if(this.readyState===4&&!(this.status>=200&&this.status<300)){var da=m&&aZ(c5);if(!da&&c4){ch(c5,c6)}}else{if(this.readyState===4&&(typeof c6==="function")){c6()}}};c8.setRequestHeader("Content-Type",co);c8.send(c5)}catch(c7){c9=m&&aZ(c5);if(!c9&&c4){ch(c5,c6)}}},50)}function b7(c5){var c4=new Date();
+var c6=c4.getTime()+c5;if(!r||c6>r){r=c6}}function cf(c4){if(b3||!aY||!bt){return}b3=setTimeout(function c5(){b3=null;if(!a5){a5=(!G.hasFocus||G.hasFocus())}if(!a5){cf(aY);return}if(bI()){return}var c6=new Date(),c7=aY-(c6.getTime()-cM);c7=Math.min(aY,c7);cf(c7)},c4||aY)}function bB(){if(!b3){return}clearTimeout(b3);b3=null}function a3(){a5=true;if(bI()){return}cf()}function at(){bB()}function c1(){if(aH||!aY){return}aH=true;aj(T,"focus",a3);aj(T,"blur",at);cf()}function cs(c8){var c5=new Date();var c4=c5.getTime();cM=c4;if(cr&&c4<cr){var c6=cr-c4;setTimeout(c8,c6);b7(c6+50);cr+=50;return}if(cr===false){var c7=800;cr=c4+c7}c8()}function bw(c5,c4,c6){if(!bt){cz.push(c5);return}if(!cF&&c5){cs(function(){if(cW==="POST"||String(c5).length>2000){cR(c5,c6)}else{ch(c5,c6)}b7(c4)})}if(!aH){c1()}else{cf()}}function cb(c4){if(cF){return false}return(c4&&c4.length)}function c0(c6,c4){if(!cb(c6)){return}if(!bt){cz.push(c6);return}var c5='{"requests":["?'+c6.join('","?')+'"]}';cs(function(){cR(c5,null,false);
+b7(c4)})}function aM(c4){return bc+c4+"."+bX+"."+bg}function bW(){if(bd){return"0"}if(!J(h.cookieEnabled)){var c4=aM("testcookie");cZ(c4,"1");return ax(c4)==="1"?"1":"0"}return h.cookieEnabled?"1":"0"}function ba(){bg=bY((cL||cJ)+(bh||"/")).slice(0,4)}function bO(){var c5=aM("cvar"),c4=ax(c5);if(c4.length){c4=JSON_PIWIK.parse(c4);if(V(c4)){return c4}}return{}}function ct(){if(aJ===false){aJ=bO()}}function cG(){return bY((h.userAgent||"")+(h.platform||"")+JSON_PIWIK.stringify(cU)+(new Date()).getTime()+Math.random()).slice(0,16)}function au(){return bY((h.userAgent||"")+(h.platform||"")+JSON_PIWIK.stringify(cU)).slice(0,6)}function a8(){return Math.floor((new Date()).getTime()/1000)}function aD(){var c5=a8();var c6=au();var c4=String(c5)+c6;return c4}function cQ(c6){c6=String(c6);var c9=au();var c7=c9.length;var c8=c6.substr(-1*c7,c7);var c5=parseInt(c6.substr(0,c6.length-c7),10);if(c5&&c8&&c8===c9){var c4=a8();if(aS<=0){return true}if(c4>=c5&&c4<=(c5+aS)){return true}}return false}function c2(c4){if(!cC){return""
+}var c8=f(c4,aq);if(!c8){return""}c8=String(c8);var c6=new RegExp("^[a-zA-Z0-9]+$");if(c8.length===32&&c6.test(c8)){var c5=c8.substr(16,32);if(cQ(c5)){var c7=c8.substr(0,16);return c7}}return""}function cD(){if(!bF){bF=c2(bE)}var c6=new Date(),c4=Math.round(c6.getTime()/1000),c5=aM("id"),c9=ax(c5),c8,c7;if(c9){c8=c9.split(".");c8.unshift("0");if(bF.length){c8[1]=bF}return c8}if(bF.length){c7=bF}else{if("0"===bW()){c7=""}else{c7=cG()}}c8=["1",c7,c4,0,c4,"",""];return c8}function aQ(){var db=cD(),c7=db[0],c8=db[1],c5=db[2],c4=db[3],c9=db[4],c6=db[5];if(!J(db[6])){db[6]=""}var da=db[6];return{newVisitor:c7,uuid:c8,createTs:c5,visitCount:c4,currentVisitTs:c9,lastVisitTs:c6,lastEcommerceOrderTs:da}}function aB(){var c7=new Date(),c5=c7.getTime(),c8=aQ().createTs;var c4=parseInt(c8,10);var c6=(c4*1000)+cy-c5;return c6}function aF(c4){if(!bX){return}var c6=new Date(),c5=Math.round(c6.getTime()/1000);if(!J(c4)){c4=aQ()}var c7=c4.uuid+"."+c4.createTs+"."+c4.visitCount+"."+c5+"."+c4.lastVisitTs+"."+c4.lastEcommerceOrderTs;
+cZ(aM("id"),c7,aB(),bh,cL,bJ)}function bD(){var c4=ax(aM("ref"));if(c4.length){try{c4=JSON_PIWIK.parse(c4);if(V(c4)){return c4}}catch(c5){}}return["","",0,""]}function bP(c6,c5,c4){cZ(c6,"",-86400,c5,c4)}function bo(c5){var c4="testvalue";cZ("test",c4,10000,null,c5);if(ax("test")===c4){bP("test",null,c5);return true}return false}function az(){var c5=bd;bd=false;var c4,c6;for(c4=0;c4<bm.length;c4++){c6=aM(bm[c4]);if(c6!==cB&&c6!==a6&&0!==ax(c6)){bP(c6,bh,cL)}}bd=c5}function bU(c4){bX=c4;aF()}function c3(c8){if(!c8||!V(c8)){return}var c7=[];var c6;for(c6 in c8){if(Object.prototype.hasOwnProperty.call(c8,c6)){c7.push(c6)}}var c9={};c7.sort();var c4=c7.length;var c5;for(c5=0;c5<c4;c5++){c9[c7[c5]]=c8[c7[c5]]}return c9}function b4(){cZ(aM("ses"),"*",cg,bh,cL,bJ)}function a9(){var c7="";var c5="abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";var c6=c5.length;var c4;for(c4=0;c4<6;c4++){c7+=c5.charAt(Math.floor(Math.random()*c6))}return c7}function ck(c6,ds,dt,c7){var dr,c5=new Date(),de=Math.round(c5.getTime()/1000),db,dq,c8=1024,dy,df,dn=aJ,c9=aM("ses"),dl=aM("ref"),di=aM("cvar"),dj=ax(c9),dp=bD(),dv=aX||bE,dc,c4;
+if(bd){az()}if(cF){return""}var dk=aQ();if(!J(c7)){c7=""}var dh=G.characterSet||G.charset;if(!dh||dh.toLowerCase()==="utf-8"){dh=null}dc=dp[0];c4=dp[1];db=dp[2];dq=dp[3];if(!dj){var du=cg/1000;if(!dk.lastVisitTs||(de-dk.lastVisitTs)>du){dk.visitCount++;dk.lastVisitTs=dk.currentVisitTs}if(!bn||!dc.length){for(dr in ci){if(Object.prototype.hasOwnProperty.call(ci,dr)){dc=f(dv,ci[dr]);if(dc.length){break}}}for(dr in bx){if(Object.prototype.hasOwnProperty.call(bx,dr)){c4=f(dv,bx[dr]);if(c4.length){break}}}}dy=d(bf);df=dq.length?d(dq):"";if(dy.length&&!aO(dy)&&(!bn||!df.length||aO(df))){dq=bf}if(dq.length||dc.length){db=de;dp=[dc,c4,db,bT(dq.slice(0,c8))];cZ(dl,JSON_PIWIK.stringify(dp),cS,bh,cL)}}c6+="&idsite="+bX+"&rec=1&r="+String(Math.random()).slice(2,8)+"&h="+c5.getHours()+"&m="+c5.getMinutes()+"&s="+c5.getSeconds()+"&url="+t(bT(dv))+(bf.length?"&urlref="+t(bT(bf)):"")+((bq&&bq.length)?"&uid="+t(bq):"")+"&_id="+dk.uuid+"&_idts="+dk.createTs+"&_idvc="+dk.visitCount+"&_idn="+dk.newVisitor+(dc.length?"&_rcn="+t(dc):"")+(c4.length?"&_rck="+t(c4):"")+"&_refts="+db+"&_viewts="+dk.lastVisitTs+(String(dk.lastEcommerceOrderTs).length?"&_ects="+dk.lastEcommerceOrderTs:"")+(String(dq).length?"&_ref="+t(bT(dq.slice(0,c8))):"")+(dh?"&cs="+t(dh):"")+"&send_image=0";
+for(dr in cU){if(Object.prototype.hasOwnProperty.call(cU,dr)){c6+="&"+dr+"="+cU[dr]}}var dx=[];if(ds){for(dr in ds){if(Object.prototype.hasOwnProperty.call(ds,dr)&&/^dimension\d+$/.test(dr)){var da=dr.replace("dimension","");dx.push(parseInt(da,10));dx.push(String(da));c6+="&"+dr+"="+ds[dr];delete ds[dr]}}}if(ds&&B(ds)){ds=null}for(dr in be){if(Object.prototype.hasOwnProperty.call(be,dr)){var dg=(-1===M(dx,dr));if(dg){c6+="&dimension"+dr+"="+be[dr]}}}if(ds){c6+="&data="+t(JSON_PIWIK.stringify(ds))}else{if(ak){c6+="&data="+t(JSON_PIWIK.stringify(ak))}}function dd(dz,dA){var dB=JSON_PIWIK.stringify(dz);if(dB.length>2){return"&"+dA+"="+t(dB)}return""}var dw=c3(bN);var dm=c3(cd);c6+=dd(dw,"cvar");c6+=dd(dm,"e_cvar");if(aJ){c6+=dd(aJ,"_cvar");for(dr in dn){if(Object.prototype.hasOwnProperty.call(dn,dr)){if(aJ[dr][0]===""||aJ[dr][1]===""){delete aJ[dr]}}}if(bH){cZ(di,JSON_PIWIK.stringify(aJ),cg,bh,cL)}}if(aV){if(ce){c6+="&gt_ms="+ce}else{if(i&&i.timing&&i.timing.requestStart&&i.timing.responseEnd){c6+="&gt_ms="+(i.timing.responseEnd-i.timing.requestStart)
+}}}if(aE){c6+="&pv_id="+aE}dk.lastEcommerceOrderTs=J(c7)&&String(c7).length?c7:dk.lastEcommerceOrderTs;aF(dk);b4();c6+=Z(dt,{tracker:bz,request:c6});if(cN.length){c6+="&"+cN}if(A(b2)){c6=b2(c6)}return c6}bI=function a0(){var c4=new Date();if(cM+aY<=c4.getTime()){var c5=ck("ping=1",null,"ping");bw(c5,bA);return true}return false};function bi(c7,c6,dc,c8,c4,df){var da="idgoal=0",db,c5=new Date(),dd=[],de,c9=String(c7).length;if(c9){da+="&ec_id="+t(c7);db=Math.round(c5.getTime()/1000)}da+="&revenue="+c6;if(String(dc).length){da+="&ec_st="+dc}if(String(c8).length){da+="&ec_tx="+c8}if(String(c4).length){da+="&ec_sh="+c4}if(String(df).length){da+="&ec_dt="+df}if(cO){for(de in cO){if(Object.prototype.hasOwnProperty.call(cO,de)){if(!J(cO[de][1])){cO[de][1]=""}if(!J(cO[de][2])){cO[de][2]=""}if(!J(cO[de][3])||String(cO[de][3]).length===0){cO[de][3]=0}if(!J(cO[de][4])||String(cO[de][4]).length===0){cO[de][4]=1}dd.push(cO[de])}}da+="&ec_items="+t(JSON_PIWIK.stringify(dd))}da=ck(da,ak,"ecommerce",db);
+bw(da,bA);if(c9){cO={}}}function bQ(c4,c8,c7,c6,c5,c9){if(String(c4).length&&J(c8)){bi(c4,c8,c7,c6,c5,c9)}}function bk(c4){if(J(c4)){bi("",c4,"","","","")}}function bR(c5,c7,c6){aE=a9();var c4=ck("action_name="+t(ah(c5||bb)),c7,"log");bw(c4,bA,c6)}function aT(c6,c5){var c7,c4="(^| )(piwik[_-]"+c5;if(c6){for(c7=0;c7<c6.length;c7++){c4+="|"+c6[c7]}}c4+=")( |$)";return new RegExp(c4)}function aN(c4){return(ay&&c4&&0===String(c4).indexOf(ay))}function cl(c8,c4,c9,c5){if(aN(c4)){return 0}var c7=aT(bC,"download"),c6=aT(a1,"link"),da=new RegExp("\\.("+cT.join("|")+")([?&#]|$)","i");if(c6.test(c8)){return"link"}if(c5||c7.test(c8)||da.test(c4)){return"download"}if(c9){return 0}return"link"}function ap(c5){var c4;c4=c5.parentNode;while(c4!==null&&J(c4)){if(ab.isLinkElement(c5)){break}c5=c4;c4=c5.parentNode}return c5}function cY(c9){c9=ap(c9);if(!ab.hasNodeAttribute(c9,"href")){return}if(!J(c9.href)){return}var c8=ab.getAttributeValueFromNode(c9,"href");if(aN(c8)){return}var c5=c9.pathname||cc(c9.href);
+var da=c9.hostname||d(c9.href);var db=da.toLowerCase();var c6=c9.href.replace(da,db);var c7=new RegExp("^(javascript|vbscript|jscript|mocha|livescript|ecmascript|mailto|tel):","i");if(!c7.test(c6)){var c4=cl(c9.className,c6,an(db,c5),ab.hasNodeAttribute(c9,"download"));if(c4){return{type:c4,href:c6}}}}function aI(c4,c5,c6,c7){var c8=v.buildInteractionRequestParams(c4,c5,c6,c7);if(!c8){return}return ck(c8,null,"contentInteraction")}function cA(c6,c7,db,c4,c5){if(!J(c6)){return}if(aN(c6)){return c6}var c9=v.toAbsoluteUrl(c6);var c8="redirecturl="+t(c9)+"&";c8+=aI(c7,db,c4,(c5||c6));var da="&";if(ay.indexOf("?")<0){da="?"}return ay+da+c8}function a4(c4,c5){if(!c4||!c5){return false}var c6=v.findTargetNode(c4);if(v.shouldIgnoreInteraction(c6)){return false}c6=v.findTargetNodeNoDefault(c4);if(c6&&!U(c6,c5)){return false}return true}function cm(c6,c5,c8){if(!c6){return}var c4=v.findParentContentNode(c6);if(!c4){return}if(!a4(c4,c6)){return}var c7=v.buildContentBlock(c4);if(!c7){return}if(!c7.target&&c8){c7.target=c8
+}return v.buildInteractionRequestParams(c5,c7.name,c7.piece,c7.target)}function aP(c5){if(!b1||!b1.length){return false}var c4,c6;for(c4=0;c4<b1.length;c4++){c6=b1[c4];if(c6&&c6.name===c5.name&&c6.piece===c5.piece&&c6.target===c5.target){return true}}return false}function bv(c7){if(!c7){return false}var da=v.findTargetNode(c7);if(!da||v.shouldIgnoreInteraction(da)){return false}var db=cY(da);if(cV&&db&&db.type){return false}if(ab.isLinkElement(da)&&ab.hasNodeAttributeWithValue(da,"href")){var c4=String(ab.getAttributeValueFromNode(da,"href"));if(0===c4.indexOf("#")){return false}if(aN(c4)){return true}if(!v.isUrlToCurrentDomain(c4)){return false}var c8=v.buildContentBlock(c7);if(!c8){return}var c6=c8.name;var dc=c8.piece;var c9=c8.target;if(!ab.hasNodeAttributeWithValue(da,v.CONTENT_TARGET_ATTR)||da.wasContentTargetAttrReplaced){da.wasContentTargetAttrReplaced=true;c9=v.toAbsoluteUrl(c4);ab.setAnyAttribute(da,v.CONTENT_TARGET_ATTR,c9)}var c5=cA(c4,"click",c6,dc,c9);v.setHrefAttribute(da,c5);
+return true}return false}function aG(c5){if(!c5||!c5.length){return}var c4;for(c4=0;c4<c5.length;c4++){bv(c5[c4])}}function aR(c4){return function(c5){if(!c4){return}var c8=v.findParentContentNode(c4);var c9;if(c5){c9=c5.target||c5.srcElement}if(!c9){c9=c4}if(!a4(c8,c9)){return}b7(bA);if(ab.isLinkElement(c4)&&ab.hasNodeAttributeWithValue(c4,"href")&&ab.hasNodeAttributeWithValue(c4,v.CONTENT_TARGET_ATTR)){var c6=ab.getAttributeValueFromNode(c4,"href");if(!aN(c6)&&c4.wasContentTargetAttrReplaced){ab.setAnyAttribute(c4,v.CONTENT_TARGET_ATTR,"")}}var dd=cY(c4);if(al&&dd&&dd.type){return dd.type}if(bv(c8)){return"href"}var da=v.buildContentBlock(c8);if(!da){return}var c7=da.name;var de=da.piece;var dc=da.target;var db=aI("click",c7,de,dc);bw(db,bA);return db}}function bS(c6){if(!c6||!c6.length){return}var c4,c5;for(c4=0;c4<c6.length;c4++){c5=v.findTargetNode(c6[c4]);if(c5&&!c5.contentInteractionTrackingSetupDone){c5.contentInteractionTrackingSetupDone=true;aj(c5,"click",aR(c5))}}}function bp(c6,c7){if(!c6||!c6.length){return[]
+}var c4,c5;for(c4=0;c4<c6.length;c4++){if(aP(c6[c4])){c6.splice(c4,1);c4--}else{b1.push(c6[c4])}}if(!c6||!c6.length){return[]}aG(c7);bS(c7);var c8=[];for(c4=0;c4<c6.length;c4++){c5=ck(v.buildImpressionRequestParams(c6[c4].name,c6[c4].piece,c6[c4].target),undefined,"contentImpressions");if(c5){c8.push(c5)}}return c8}function cq(c5){var c4=v.collectContent(c5);return bp(c4,c5)}function a2(c5){if(!c5||!c5.length){return[]}var c4;for(c4=0;c4<c5.length;c4++){if(!v.isNodeVisible(c5[c4])){c5.splice(c4,1);c4--}}if(!c5||!c5.length){return[]}return cq(c5)}function aA(c6,c4,c5){var c7=v.buildImpressionRequestParams(c6,c4,c5);return ck(c7,null,"contentImpression")}function cX(c7,c5){if(!c7){return}var c4=v.findParentContentNode(c7);var c6=v.buildContentBlock(c4);if(!c6){return}if(!c5){c5="Unknown"}return aI(c5,c6.name,c6.piece,c6.target)}function cE(c5,c7,c4,c6){return"e_c="+t(c5)+"&e_a="+t(c7)+(J(c4)?"&e_n="+t(c4):"")+(J(c6)?"&e_v="+t(c6):"")}function ao(c6,c8,c4,c7,da,c9){if(a(String(c6)).length===0||a(String(c8)).length===0){ag("Error while logging event: Parameters `category` and `action` must not be empty or filled with whitespaces");
+return false}var c5=ck(cE(c6,c8,c4,c7),da,"event");bw(c5,bA,c9)}function bZ(c4,c7,c5,c8){var c6=ck("search="+t(c4)+(c7?"&search_cat="+t(c7):"")+(J(c5)?"&search_count="+c5:""),c8,"sitesearch");bw(c6,bA)}function cI(c4,c7,c6){var c5=ck("idgoal="+c4+(c7?"&revenue="+c7:""),c6,"goal");bw(c5,bA)}function cP(c7,c4,db,da,c6){var c9=c4+"="+t(bT(c7));var c5=cm(c6,"click",c7);if(c5){c9+="&"+c5}var c8=ck(c9,db,"link");bw(c8,bA,da)}function bL(c5,c4){if(c5!==""){return c5+c4.charAt(0).toUpperCase()+c4.slice(1)}return c4}function b8(c9){var c8,c4,c7=["","webkit","ms","moz"],c6;if(!a7){for(c4=0;c4<c7.length;c4++){c6=c7[c4];if(Object.prototype.hasOwnProperty.call(G,bL(c6,"hidden"))){if(G[bL(c6,"visibilityState")]==="prerender"){c8=true}break}}}if(c8){aj(G,c6+"visibilitychange",function c5(){G.removeEventListener(c6+"visibilitychange",c5,false);c9()});return}c9()}function bj(){var c5=aQ().uuid;var c4=aD();return c5+c4}function ca(c4){if(!c4){return}if(!ab.hasNodeAttribute(c4,"href")){return}var c5=ab.getAttributeValueFromNode(c4,"href");
+if(!c5||aN(c5)){return}c5=k(c5,aq);if(c5.indexOf("?")>0){c5+="&"}else{c5+="?"}var c6=bj();c5=F(c5,aq,c6);ab.setAnyAttribute(c4,"href",c5)}function av(c7){var c8=ab.getAttributeValueFromNode(c7,"href");if(!c8){return false}c8=String(c8);var c5=c8.indexOf("//")===0||c8.indexOf("http://")===0||c8.indexOf("https://")===0;if(!c5){return false}var c4=c7.pathname||cc(c7.href);var c6=(c7.hostname||d(c7.href)).toLowerCase();if(an(c6,c4)){if(!cw(cJ,L(c6))){return true}return false}return false}function cv(c4){var c5=cY(c4);if(c5&&c5.type){c5.href=p(c5.href);cP(c5.href,c5.type,undefined,null,c4);return}if(cC){c4=ap(c4);if(av(c4)){ca(c4)}}}function cn(){return G.all&&!G.addEventListener}function cK(c4){var c6=c4.which;var c5=(typeof c4.button);if(!c6&&c5!=="undefined"){if(cn()){if(c4.button&1){c6=1}else{if(c4.button&2){c6=3}else{if(c4.button&4){c6=2}}}}else{if(c4.button===0||c4.button==="0"){c6=1}else{if(c4.button&1){c6=2}else{if(c4.button&2){c6=3}}}}}return c6}function bK(c4){switch(cK(c4)){case 1:return"left";
+case 2:return"middle";case 3:return"right"}}function aU(c4){return c4.target||c4.srcElement}function aw(c4){return function(c7){c7=c7||T.event;var c6=bK(c7);var c8=aU(c7);if(c7.type==="click"){var c5=false;if(c4&&c6==="middle"){c5=true}if(c8&&!c5){cv(c8)}}else{if(c7.type==="mousedown"){if(c6==="middle"&&c8){aK=c6;bs=c8}else{aK=bs=null}}else{if(c7.type==="mouseup"){if(c6===aK&&c8===bs){cv(c8)}aK=bs=null}else{if(c7.type==="contextmenu"){cv(c8)}}}}}}function am(c6,c5){var c4=typeof c5;if(c4==="undefined"){c5=true}aj(c6,"click",aw(c5),false);if(c5){aj(c6,"mouseup",aw(c5),false);aj(c6,"mousedown",aw(c5),false);aj(c6,"contextmenu",aw(c5),false)}}function bu(c6,c8){al=true;var c7,c5=aT(br,"ignore"),c9=G.links,c4=null,da=null;if(c9){for(c7=0;c7<c9.length;c7++){c4=c9[c7];if(!c5.test(c4.className)){da=typeof c4.piwikTrackers;if("undefined"===da){c4.piwikTrackers=[]}if(-1===M(c4.piwikTrackers,c8)){c4.piwikTrackers.push(c8);am(c4,c6)}}}}}function aL(c5,c8,c9){if(b6){return true}b6=true;var da=false;
+var c7,c6;function c4(){da=true}n(function(){function db(dd){setTimeout(function(){if(!b6){return}da=false;c9.trackVisibleContentImpressions();db(dd)},dd)}function dc(dd){setTimeout(function(){if(!b6){return}if(da){da=false;c9.trackVisibleContentImpressions()}dc(dd)},dd)}if(c5){c7=["scroll","resize"];for(c6=0;c6<c7.length;c6++){if(G.addEventListener){G.addEventListener(c7[c6],c4)}else{T.attachEvent("on"+c7[c6],c4)}}dc(100)}if(c8&&c8>0){c8=parseInt(c8,10);db(c8)}})}function cu(){var c5,c7,c8={pdf:"application/pdf",qt:"video/quicktime",realp:"audio/x-pn-realaudio-plugin",wma:"application/x-mplayer2",dir:"application/x-director",fla:"application/x-shockwave-flash",java:"application/x-java-vm",gears:"application/x-googlegears",ag:"application/x-silverlight"};if(!((new RegExp("MSIE")).test(h.userAgent))){if(h.mimeTypes&&h.mimeTypes.length){for(c5 in c8){if(Object.prototype.hasOwnProperty.call(c8,c5)){c7=h.mimeTypes[c8[c5]];cU[c5]=(c7&&c7.enabledPlugin)?"1":"0"}}}if(!((new RegExp("Edge[ /](\\d+[\\.\\d]+)")).test(h.userAgent))&&typeof navigator.javaEnabled!=="unknown"&&J(h.javaEnabled)&&h.javaEnabled()){cU.java="1"
+}if(A(T.GearsFactory)){cU.gears="1"}cU.cookie=bW()}var c6=parseInt(W.width,10);var c4=parseInt(W.height,10);cU.res=parseInt(c6,10)+"x"+parseInt(c4,10)}cu();ba();aF();this.getVisitorId=function(){return aQ().uuid};this.getVisitorInfo=function(){return cD()};this.getAttributionInfo=function(){return bD()};this.getAttributionCampaignName=function(){return bD()[0]};this.getAttributionCampaignKeyword=function(){return bD()[1]};this.getAttributionReferrerTimestamp=function(){return bD()[2]};this.getAttributionReferrerUrl=function(){return bD()[3]};this.setTrackerUrl=function(c4){ay=c4};this.getTrackerUrl=function(){return ay};this.getPiwikUrl=function(){return O(this.getTrackerUrl(),by)};this.addTracker=function(c4,c6){if(!c6){throw new Error("A siteId must be given to add a new tracker")}if(!J(c4)||null===c4){c4=this.getTrackerUrl()}var c5=new Q(c4,c6);I.push(c5);return c5};this.getSiteId=function(){return bX};this.setSiteId=function(c4){bU(c4)};this.resetUserId=function(){bq=""};this.setUserId=function(c4){if(!J(c4)||!c4.length){return
+}bq=c4};this.getUserId=function(){return bq};this.setCustomData=function(c4,c5){if(V(c4)){ak=c4}else{if(!ak){ak={}}ak[c4]=c5}};this.getCustomData=function(){return ak};this.setCustomRequestProcessing=function(c4){b2=c4};this.appendToTrackingUrl=function(c4){cN=c4};this.getRequest=function(c4){return ck(c4)};this.addPlugin=function(c4,c5){b[c4]=c5};this.setCustomDimension=function(c4,c5){c4=parseInt(c4,10);if(c4>0){if(!J(c5)){c5=""}if(!w(c5)){c5=String(c5)}be[c4]=c5}};this.getCustomDimension=function(c4){c4=parseInt(c4,10);if(c4>0&&Object.prototype.hasOwnProperty.call(be,c4)){return be[c4]}};this.deleteCustomDimension=function(c4){c4=parseInt(c4,10);if(c4>0){delete be[c4]}};this.setCustomVariable=function(c5,c4,c8,c6){var c7;if(!J(c6)){c6="visit"}if(!J(c4)){return}if(!J(c8)){c8=""}if(c5>0){c4=!w(c4)?String(c4):c4;c8=!w(c8)?String(c8):c8;c7=[c4.slice(0,bl),c8.slice(0,bl)];if(c6==="visit"||c6===2){ct();aJ[c5]=c7}else{if(c6==="page"||c6===3){bN[c5]=c7}else{if(c6==="event"){cd[c5]=c7}}}}};this.getCustomVariable=function(c5,c6){var c4;
+if(!J(c6)){c6="visit"}if(c6==="page"||c6===3){c4=bN[c5]}else{if(c6==="event"){c4=cd[c5]}else{if(c6==="visit"||c6===2){ct();c4=aJ[c5]}}}if(!J(c4)||(c4&&c4[0]==="")){return false}return c4};this.deleteCustomVariable=function(c4,c5){if(this.getCustomVariable(c4,c5)){this.setCustomVariable(c4,"","",c5)}};this.deleteCustomVariables=function(c4){if(c4==="page"||c4===3){bN={}}else{if(c4==="event"){cd={}}else{if(c4==="visit"||c4===2){aJ={}}}}};this.storeCustomVariablesInCookie=function(){bH=true};this.setLinkTrackingTimer=function(c4){bA=c4};this.getLinkTrackingTimer=function(){return bA};this.setDownloadExtensions=function(c4){if(w(c4)){c4=c4.split("|")}cT=c4};this.addDownloadExtensions=function(c5){var c4;if(w(c5)){c5=c5.split("|")}for(c4=0;c4<c5.length;c4++){cT.push(c5[c4])}};this.removeDownloadExtensions=function(c6){var c5,c4=[];if(w(c6)){c6=c6.split("|")}for(c5=0;c5<cT.length;c5++){if(M(c6,cT[c5])===-1){c4.push(cT[c5])}}cT=c4};this.setDomains=function(c4){ar=w(c4)?[c4]:c4;var c8=false,c6=0,c5;
+for(c6;c6<ar.length;c6++){c5=String(ar[c6]);if(cw(cJ,L(c5))){c8=true;break}var c7=cc(c5);if(c7&&c7!=="/"&&c7!=="/*"){c8=true;break}}if(!c8){ar.push(cJ)}};this.enableCrossDomainLinking=function(){cC=true};this.disableCrossDomainLinking=function(){cC=false};this.isCrossDomainLinkingEnabled=function(){return cC};this.setCrossDomainLinkingTimeout=function(c4){aS=c4};this.getCrossDomainLinkingUrlParameter=function(){return t(aq)+"="+t(bj())};this.setIgnoreClasses=function(c4){br=w(c4)?[c4]:c4};this.setRequestMethod=function(c4){cW=c4||b9};this.setRequestContentType=function(c4){co=c4||aC};this.setReferrerUrl=function(c4){bf=c4};this.setCustomUrl=function(c4){aX=bM(bE,c4)};this.getCurrentUrl=function(){return aX||bE};this.setDocumentTitle=function(c4){bb=c4};this.setAPIUrl=function(c4){by=c4};this.setDownloadClasses=function(c4){bC=w(c4)?[c4]:c4};this.setLinkClasses=function(c4){a1=w(c4)?[c4]:c4};this.setCampaignNameKey=function(c4){ci=w(c4)?[c4]:c4};this.setCampaignKeywordKey=function(c4){bx=w(c4)?[c4]:c4
+};this.discardHashTag=function(c4){bG=c4};this.setCookieNamePrefix=function(c4){bc=c4;aJ=bO()};this.setCookieDomain=function(c4){var c5=L(c4);if(bo(c5)){cL=c5;ba()}};this.getCookieDomain=function(){return cL};this.hasCookies=function(){return"1"===bW()};this.setSessionCookie=function(c6,c5,c4){if(!c6){throw new Error("Missing cookie name")}if(!J(c4)){c4=cg}bm.push(c6);cZ(aM(c6),c5,c4,bh,cL)};this.getCookie=function(c5){var c4=ax(aM(c5));if(c4===0){return null}return c4};this.setCookiePath=function(c4){bh=c4;ba()};this.getCookiePath=function(c4){return bh};this.setVisitorCookieTimeout=function(c4){cy=c4*1000};this.setSessionCookieTimeout=function(c4){cg=c4*1000};this.getSessionCookieTimeout=function(){return cg};this.setReferralCookieTimeout=function(c4){cS=c4*1000};this.setConversionAttributionFirstReferrer=function(c4){bn=c4};this.setSecureCookie=function(c4){bJ=c4};this.disableCookies=function(){bd=true;cU.cookie="0";if(bX){az()}};this.deleteCookies=function(){az()};this.setDoNotTrack=function(c5){var c4=h.doNotTrack||h.msDoNotTrack;
+cF=c5&&(c4==="yes"||c4==="1");if(cF){this.disableCookies()}};this.addListener=function(c5,c4){am(c5,c4)};this.enableLinkTracking=function(c5){cV=true;var c4=this;b8(function(){q(function(){bu(c5,c4)})})};this.enableJSErrorTracking=function(){if(cH){return}cH=true;var c4=T.onerror;T.onerror=function(c9,c7,c6,c8,c5){b8(function(){var da="JavaScript Errors";var db=c7+":"+c6;if(c8){db+=":"+c8}ao(da,db,c9)});if(c4){return c4(c9,c7,c6,c8,c5)}return false}};this.disablePerformanceTracking=function(){aV=false};this.setGenerationTimeMs=function(c4){ce=parseInt(c4,10)};this.enableHeartBeatTimer=function(c4){c4=Math.max(c4,1);aY=(c4||15)*1000;if(cM!==null){c1()}};this.disableHeartBeatTimer=function(){bB();if(aY||aH){if(T.removeEventListener){T.removeEventListener("focus",a3,true);T.removeEventListener("blur",at,true)}else{if(T.detachEvent){T.detachEvent("onfocus",a3);T.detachEvent("onblur",at)}}}aY=null;aH=false};this.killFrame=function(){if(T.location!==T.top.location){T.top.location=T.location}};
+this.redirectFile=function(c4){if(T.location.protocol==="file:"){T.location=c4}};this.setCountPreRendered=function(c4){a7=c4};this.trackGoal=function(c4,c6,c5){b8(function(){cI(c4,c6,c5)})};this.trackLink=function(c5,c4,c7,c6){b8(function(){cP(c5,c4,c7,c6)})};this.getNumTrackedPageViews=function(){return cj};this.trackPageView=function(c4,c6,c5){b1=[];cz=[];if(N(bX)){b8(function(){X(ay,by,bX)})}else{b8(function(){cj++;bR(c4,c6,c5)})}};this.trackAllContentImpressions=function(){if(N(bX)){return}b8(function(){q(function(){var c4=v.findContentNodes();var c5=cq(c4);c0(c5,bA)})})};this.trackVisibleContentImpressions=function(c4,c5){if(N(bX)){return}if(!J(c4)){c4=true}if(!J(c5)){c5=750}aL(c4,c5,this);b8(function(){n(function(){var c6=v.findContentNodes();var c7=a2(c6);c0(c7,bA)})})};this.trackContentImpression=function(c6,c4,c5){if(N(bX)){return}c6=a(c6);c4=a(c4);c5=a(c5);if(!c6){return}c4=c4||"Unknown";b8(function(){var c7=aA(c6,c4,c5);bw(c7,bA)})};this.trackContentImpressionsWithinNode=function(c4){if(N(bX)||!c4){return
+}b8(function(){if(b6){n(function(){var c5=v.findContentNodesWithinNode(c4);var c6=a2(c5);c0(c6,bA)})}else{q(function(){var c5=v.findContentNodesWithinNode(c4);var c6=cq(c5);c0(c6,bA)})}})};this.trackContentInteraction=function(c6,c7,c4,c5){if(N(bX)){return}c6=a(c6);c7=a(c7);c4=a(c4);c5=a(c5);if(!c6||!c7){return}c4=c4||"Unknown";b8(function(){var c8=aI(c6,c7,c4,c5);bw(c8,bA)})};this.trackContentInteractionNode=function(c5,c4){if(N(bX)||!c5){return}b8(function(){var c6=cX(c5,c4);bw(c6,bA)})};this.logAllContentBlocksOnPage=function(){var c6=v.findContentNodes();var c4=v.collectContent(c6);var c5=typeof console;if(c5!=="undefined"&&console&&console.log){console.log(c4)}};this.trackEvent=function(c5,c7,c4,c6,c9,c8){b8(function(){ao(c5,c7,c4,c6,c9,c8)})};this.trackSiteSearch=function(c4,c6,c5,c7){b8(function(){bZ(c4,c6,c5,c7)})};this.setEcommerceView=function(c7,c4,c6,c5){if(!J(c6)||!c6.length){c6=""}else{if(c6 instanceof Array){c6=JSON_PIWIK.stringify(c6)}}bN[5]=["_pkc",c6];if(J(c5)&&String(c5).length){bN[2]=["_pkp",c5]
+}if((!J(c7)||!c7.length)&&(!J(c4)||!c4.length)){return}if(J(c7)&&c7.length){bN[3]=["_pks",c7]}if(!J(c4)||!c4.length){c4=""}bN[4]=["_pkn",c4]};this.addEcommerceItem=function(c8,c4,c6,c5,c7){if(c8.length){cO[c8]=[c8,c4,c6,c5,c7]}};this.trackEcommerceOrder=function(c4,c8,c7,c6,c5,c9){bQ(c4,c8,c7,c6,c5,c9)};this.trackEcommerceCartUpdate=function(c4){bk(c4)};this.trackRequest=function(c5,c7,c6,c4){b8(function(){var c8=ck(c5,c7,c4);bw(c8,bA,c6)})};this.getRememberedConsent=function(){var c4=ax(a6);if(ax(cB)){if(c4){bP(a6,bh,cL)}return null}if(!c4||c4===0){return null}return c4};this.hasRememberedConsent=function(){return !!this.getRememberedConsent()};this.requireConsent=function(){bt=this.hasRememberedConsent();x++;b["CoreConsent"+x]={unload:function(){if(!bt){az()}}}};this.setConsentGiven=function(){bt=true;bP(cB,bh,cL);var c5,c4;for(c5=0;c5<cz.length;c5++){c4=typeof cz[c5];if(c4==="string"){bw(cz[c5],bA)}else{if(c4==="object"){c0(cz[c5],bA)}}}cz=[]};this.rememberConsentGiven=function(c5){if(bd){ag("rememberConsentGiven is called but cookies are disabled, consent will not be remembered");
+return}if(c5){c5=c5*60*60*1000}this.setConsentGiven();var c4=new Date().getTime();cZ(a6,c4,c5,bh,cL,bJ)};this.forgetConsentGiven=function(){if(bd){ag("forgetConsentGiven is called but cookies are disabled, consent will not be forgotten");return}bP(a6,bh,cL);cZ(cB,new Date().getTime(),0,bh,cL,bJ);this.requireConsent()};this.isUserOptedOut=function(){return !bt};this.optUserOut=this.forgetConsentGiven;this.forgetUserOptOut=this.rememberConsentGiven;e.trigger("TrackerSetup",[this])}function H(){return{push:ac}}function c(ap,ao){var aq={};var am,an;for(am=0;am<ao.length;am++){var ak=ao[am];aq[ak]=1;for(an=0;an<ap.length;an++){if(ap[an]&&ap[an][0]){var al=ap[an][0];if(ak===al){ac(ap[an]);delete ap[an];if(aq[al]>1&&al!=="addTracker"){ag("The method "+al+' is registered more than once in "_paq" variable. Only the last call has an effect. Please have a look at the multiple Piwik trackers documentation: https://developer.piwik.org/guides/tracking-javascript-guide#multiple-piwik-trackers')}aq[al]++
+}}}}return ap}var C=["addTracker","disableCookies","setTrackerUrl","setAPIUrl","enableCrossDomainLinking","setCrossDomainLinkingTimeout","setSecureCookie","setCookiePath","setCookieDomain","setDomains","setUserId","setSiteId","enableLinkTracking","requireConsent","setConsentGiven"];function aa(ak,am){var al=new Q(ak,am);I.push(al);_paq=c(_paq,C);for(E=0;E<_paq.length;E++){if(_paq[E]){ac(_paq[E])}}_paq=new H();return al}aj(T,"beforeunload",ae,false);Date.prototype.getTimeAlias=Date.prototype.getTime;e={initialized:false,JSON:JSON_PIWIK,DOM:{addEventListener:function(an,am,al,ak){var ao=typeof ak;if(ao==="undefined"){ak=false}aj(an,am,al,ak)},onLoad:n,onReady:q,isNodeVisible:j,isOrWasNodeVisible:v.isNodeVisible},on:function(al,ak){if(!y[al]){y[al]=[]}y[al].push(ak)},off:function(am,al){if(!y[am]){return}var ak=0;for(ak;ak<y[am].length;ak++){if(y[am][ak]===al){y[am].splice(ak,1)}}},trigger:function(am,an,al){if(!y[am]){return}var ak=0;for(ak;ak<y[am].length;ak++){y[am][ak].apply(al||T,an)}},addPlugin:function(ak,al){b[ak]=al
+},getTracker:function(ak,al){if(!J(al)){al=this.getAsyncTracker().getSiteId()}if(!J(ak)){ak=this.getAsyncTracker().getTrackerUrl()}return new Q(ak,al)},getAsyncTrackers:function(){return I},addTracker:function(ak,am){var al;if(!I.length){al=aa(ak,am)}else{al=I[0].addTracker(ak,am)}return al},getAsyncTracker:function(al,ao){var an;if(I&&I.length&&I[0]){an=I[0]}else{return aa(al,ao)}if(!ao&&!al){return an}if((!J(ao)||null===ao)&&an){ao=an.getSiteId()}if((!J(al)||null===al)&&an){al=an.getTrackerUrl()}var am,ak=0;for(ak;ak<I.length;ak++){am=I[ak];if(am&&String(am.getSiteId())===String(ao)&&am.getTrackerUrl()===al){return am}}},retryMissedPluginCalls:function(){var al=ad;ad=[];var ak=0;for(ak;ak<al.length;ak++){ac(al[ak])}}};if(typeof define==="function"&&define.amd){define("piwik",[],function(){return e})}return e}())}
/*!!! pluginTrackerHook */
-}(function(){function b(){if("object"!==typeof _paq){return false}var c=typeof _paq.length;if("undefined"===c){return false}return !!_paq.length}if(window&&"object"===typeof window.piwikPluginAsyncInit&&window.piwikPluginAsyncInit.length){var a=0;
+(function(){function b(){if("object"!==typeof _paq){return false}var c=typeof _paq.length;if("undefined"===c){return false}return !!_paq.length}if(window&&"object"===typeof window.piwikPluginAsyncInit&&window.piwikPluginAsyncInit.length){var a=0;
for(a;a<window.piwikPluginAsyncInit.length;a++){if(typeof window.piwikPluginAsyncInit[a]==="function"){window.piwikPluginAsyncInit[a]()}}}if(window&&window.piwikAsyncInit){window.piwikAsyncInit()}if(!window.Piwik.getAsyncTrackers().length){if(b()){window.Piwik.addTracker()}else{_paq={push:function(c){var d=typeof console;if(d!=="undefined"&&console&&console.error){console.error("_paq.push() was used but Piwik tracker was not initialized before the piwik.js file was loaded. Make sure to configure the tracker via _paq.push before loading piwik.js. Alternatively, you can create a tracker via Piwik.addTracker() manually and then use _paq.push but it may not fully work as tracker methods may not be executed in the correct order.",c)}}}}}window.Piwik.trigger("PiwikInitialized",[]);window.Piwik.initialized=true}());(function(){var a=(typeof AnalyticsTracker);if(a==="undefined"){AnalyticsTracker=window.Piwik}}());if(typeof piwik_log!=="function"){piwik_log=function(b,f,d,g){function a(h){try{if(window["piwik_"+h]){return window["piwik_"+h]
-}}catch(i){}return}var c,e=window.Piwik.getTracker(d,f);e.setDocumentTitle(b);e.setCustomData(g);c=a("tracker_pause");if(c){e.setLinkTrackingTimer(c)}c=a("download_extensions");if(c){e.setDownloadExtensions(c)}c=a("hosts_alias");if(c){e.setDomains(c)}c=a("ignore_classes");if(c){e.setIgnoreClasses(c)}e.trackPageView();if(a("install_tracker")){piwik_track=function(i,k,j,h){e.setSiteId(k);e.setTrackerUrl(j);e.trackLink(i,h)};e.enableLinkTracking()}};
-/*!! @license-end */
-}; \ No newline at end of file
+}}catch(i){}return}var c,e=window.Piwik.getTracker(d,f);e.setDocumentTitle(b);e.setCustomData(g);c=a("tracker_pause");if(c){e.setLinkTrackingTimer(c)}c=a("download_extensions");if(c){e.setDownloadExtensions(c)}c=a("hosts_alias");if(c){e.setDomains(c)}c=a("ignore_classes");if(c){e.setIgnoreClasses(c)}e.trackPageView();if(a("install_tracker")){piwik_track=function(i,k,j,h){e.setSiteId(k);e.setTrackerUrl(j);e.trackLink(i,h)};e.enableLinkTracking()}}}
+/*!! @license-end */;
diff --git a/piwik/plugins/Actions/API.php b/piwik/plugins/Actions/API.php
index 4a777a0..2f23b98 100644
--- a/piwik/plugins/Actions/API.php
+++ b/piwik/plugins/Actions/API.php
@@ -95,6 +95,17 @@ class API extends \Piwik\Plugin\API
$this->filterActionsDataTable($dataTable);
+ if ($flat) {
+ $dataTable->filter(function(DataTable $dataTable) {
+ foreach ($dataTable->getRows() as $row) {
+ $label = $row->getColumn('label');
+ if (substr($label, 0, 1) !== '/' && $label != Piwik::translate('General_NotDefined', Piwik::translate('Actions_ColumnPageURL'))) {
+ $row->setColumn('label', '/'.$label);
+ }
+ }
+ });
+ }
+
return $dataTable;
}
diff --git a/piwik/plugins/Actions/ArchivingHelper.php b/piwik/plugins/Actions/ArchivingHelper.php
index 15834d7..042815f 100644
--- a/piwik/plugins/Actions/ArchivingHelper.php
+++ b/piwik/plugins/Actions/ArchivingHelper.php
@@ -306,7 +306,7 @@ class ArchivingHelper
public static function reloadConfig()
{
- // for BC, we read the old style delimiter first (see #1067)Row
+ // for BC, we read the old style delimiter first (see #1067)
$actionDelimiter = @Config::getInstance()->General['action_category_delimiter'];
if (empty($actionDelimiter)) {
self::$actionUrlCategoryDelimiter = Config::getInstance()->General['action_url_category_delimiter'];
diff --git a/piwik/plugins/Actions/DataTable/Filter/Actions.php b/piwik/plugins/Actions/DataTable/Filter/Actions.php
index 8d13311..51c24b4 100644
--- a/piwik/plugins/Actions/DataTable/Filter/Actions.php
+++ b/piwik/plugins/Actions/DataTable/Filter/Actions.php
@@ -8,6 +8,8 @@
*/
namespace Piwik\Plugins\Actions\DataTable\Filter;
+use Piwik\Common;
+use Piwik\Config;
use Piwik\DataTable\BaseFilter;
use Piwik\DataTable\Row;
use Piwik\DataTable;
@@ -30,11 +32,32 @@ class Actions extends BaseFilter
public function filter($table)
{
$table->filter(function (DataTable $dataTable) {
+
+ $defaultActionName = Config::getInstance()->General['action_default_name'];
+
+ // for BC, we read the old style delimiter first (see #1067)
+ $actionDelimiter = @Config::getInstance()->General['action_category_delimiter'];
+ if (empty($actionDelimiter)) {
+ $actionDelimiter = Config::getInstance()->General['action_url_category_delimiter'];
+ }
+
foreach ($dataTable->getRows() as $row) {
$url = $row->getMetadata('url');
if ($url) {
$row->setMetadata('segmentValue', urldecode($url));
}
+
+ // remove the default action name 'index' in the end of flattened urls and prepend $actionDelimiter
+ if (Common::getRequestVar('flat', 0)) {
+ $label = $row->getColumn('label');
+ $stringToSearch = $actionDelimiter.$defaultActionName;
+ if (substr($label, -strlen($stringToSearch)) == $stringToSearch) {
+ $label = substr($label, 0, -strlen($defaultActionName));
+ $label = rtrim($label, $actionDelimiter) . $actionDelimiter;
+ $row->setColumn('label', $label);
+ }
+ $dataTable->setLabelsHaveChanged();
+ }
}
});
diff --git a/piwik/plugins/Actions/javascripts/actionsDataTable.js b/piwik/plugins/Actions/javascripts/actionsDataTable.js
index acb3eab..8a1f6da 100644
--- a/piwik/plugins/Actions/javascripts/actionsDataTable.js
+++ b/piwik/plugins/Actions/javascripts/actionsDataTable.js
@@ -112,7 +112,7 @@
},
openSubtableFromSubtableIfOnlyOneSubtableGiven: function (domElem) {
- var hasOnlyOneRow = domElem.length === 1
+ var hasOnlyOneRow = domElem.length === 1;
var hasOnlyOneSubtable = domElem.hasClass('subDataTable');
if (hasOnlyOneRow && hasOnlyOneSubtable) {
diff --git a/piwik/plugins/Actions/lang/da.json b/piwik/plugins/Actions/lang/da.json
index 0cae22d..858554f 100644
--- a/piwik/plugins/Actions/lang/da.json
+++ b/piwik/plugins/Actions/lang/da.json
@@ -2,14 +2,17 @@
"Actions": {
"AvgGenerationTimeTooltip": "Gennemsnit baseret på %1$s hits %2$s mellem %3$s og %4$s",
"ColumnClickedURL": "Klikkede URL",
- "ColumnActionURL": "Handlings URL",
+ "ColumnClickedURLs": "Klikkede URL’er",
+ "ColumnActionURL": "Handlings-URL",
"ColumnClicks": "Klik",
"ColumnClicksDocumentation": "Antal gange linket blev klikket på.",
"ColumnDownloadURL": "Hentet URL",
"ColumnEntryPageTitle": "Indgangssidetitel",
- "ColumnEntryPageURL": "Indgangsside URL",
+ "ColumnEntryPageURL": "Indgangsside-URL",
+ "ColumnEntryPageURLs": "Indgangsside-URL’er",
"ColumnExitPageTitle": "Udgangssidetitel",
- "ColumnExitPageURL": "Udgangsside URL",
+ "ColumnExitPageURL": "Udgangsside-URL",
+ "ColumnExitPageURLs": "Udgangsside-URL’er",
"ColumnNoResultKeyword": "Søgeord uden nogen resultater",
"ColumnPageName": "Sidenavn",
"ColumnPagesPerSearch": "Søgeresultatssider",
diff --git a/piwik/plugins/Contents/lang/da.json b/piwik/plugins/Contents/lang/da.json
index 46e0792..d027fc8 100644
--- a/piwik/plugins/Contents/lang/da.json
+++ b/piwik/plugins/Contents/lang/da.json
@@ -1,11 +1,13 @@
{
"Contents": {
"PluginDescription": "Indhold og banner sporing gør dig i stand til at måle effektiviteten (besøg, klik, CTR) af ethvert indhold på dine sider (bannerreklamer, billeder, hvad som helst).",
- "Impressions": "Indtryk",
+ "Impressions": "Visninger",
+ "ContentImpression": "Indholdsvisning",
"ContentInteraction": "Interaktion med indhold",
"ContentInteractions": "Interaktion med indhold",
"InteractionRate": "Interaktionsfrekvens",
"ContentName": "Indholdsnavn",
+ "ContentNames": "Indholdsnavne",
"ContentPiece": "Indholdsstykke",
"ContentTarget": "Indholdsmål",
"Contents": "Indhold",
diff --git a/piwik/plugins/CoreAdminHome/Commands/PurgeOldArchiveData.php b/piwik/plugins/CoreAdminHome/Commands/PurgeOldArchiveData.php
index de1d587..a37c3ff 100644
--- a/piwik/plugins/CoreAdminHome/Commands/PurgeOldArchiveData.php
+++ b/piwik/plugins/CoreAdminHome/Commands/PurgeOldArchiveData.php
@@ -141,7 +141,12 @@ class PurgeOldArchiveData extends ConsoleCommand
list($year, $month) = explode('_', $tableDate);
- $dates[] = Date::factory($year . '-' . $month . '-' . '01');
+ try {
+ $date = Date::factory($year . '-' . $month . '-' . '01');
+ $dates[] = $date;
+ } catch (\Exception $e) {
+ // this might occur if archive tables like piwik_archive_numeric_1875_09 exist
+ }
}
} else {
$includeYearArchives = $input->getOption('include-year-archives');
diff --git a/piwik/plugins/CoreAdminHome/Controller.php b/piwik/plugins/CoreAdminHome/Controller.php
index 8ca2d69..3fead3f 100644
--- a/piwik/plugins/CoreAdminHome/Controller.php
+++ b/piwik/plugins/CoreAdminHome/Controller.php
@@ -173,6 +173,14 @@ class Controller extends ControllerAdmin
$defaultIdSite = reset($viewableIdSites);
$view->idSite = Common::getRequestVar('idSite', $defaultIdSite, 'int');
+ if ($view->idSite) {
+ try {
+ $view->siteName = Site::getNameFor($view->idSite);
+ } catch (Exception $e) {
+ // ignore if site no longer exists
+ }
+ }
+
$view->defaultReportSiteName = Site::getNameFor($view->idSite);
$view->defaultSiteRevenue = Site::getCurrencySymbolFor($view->idSite);
$view->maxCustomVariables = CustomVariables::getNumUsableCustomVariables();
diff --git a/piwik/plugins/CoreAdminHome/lang/da.json b/piwik/plugins/CoreAdminHome/lang/da.json
index 8fa2e01..cd7df76 100644
--- a/piwik/plugins/CoreAdminHome/lang/da.json
+++ b/piwik/plugins/CoreAdminHome/lang/da.json
@@ -10,7 +10,7 @@
"CustomLogoFeedbackInfo": "Hvis du tilpasser Matomo logoet, kan du også være interesseret i at skjule %1$s linket i topmenuen. For at gøre dette, kan du deaktivere tilbagemeldingsmodulet på %2$sUdvidelsesmodul administration%3$s siden.",
"CustomLogoHelpText": "Du kan tilpasse Matomo logo, der bliver vist i brugergrænsefladen og e-mail rapporter.",
"DevelopmentProcess": "Mens vores %1$sudviklingsproces%2$s omfatter tusindvis af automatiske tests, spiller betatestere en nøglerolle i at opnå \"ingen fejl politikken\" i Matomo.",
- "EmailServerSettings": "E-mail-server indstillinger",
+ "EmailServerSettings": "E-mail-serverindstillinger",
"ForBetaTestersOnly": "Kun for beta testere",
"ImageTracking": "Sporing vha. et billede",
"ImageTrackingIntro1": "Når en besøgende har deaktiveret JavaScript, eller når JavaScript kan ikke bruges, kan sporing vha. et billede bruges til at spore besøgende.",
@@ -50,7 +50,7 @@
"JSTrackingIntro2": "Når du har JavaScript sporingskoden til hjemmesiden, kopier og indsæt den på alle de sider, der skal spores med Matomo.",
"JSTrackingIntro3b": "På de fleste websider, blogs, CMS'er osv., kan du bruge en foruddefineret plugin til at klare det tekniske arbejde for dig. (se hvores %1$sliste over programtilføjelser brugt til at integrere Matomo%2$s). Er der ingen plugin, kan du ændre i din webside skabelon, og tilføje denne kode til &lt;\/head&gt; mærkerne, som ofte er defineret i 'header.php', 'header.tpl' eller lignende skabelon filer.",
"JSTrackingIntro4": "Hvis du ikke ønsker at bruge JavaScript til at spore besøgende,%1$sgenerere et billed sporingslink herunder%2$s.",
- "JSTrackingIntro5": "Hvis du vil gøre mere end at spore sidevisninger, kan du checke %1$sMatomo Javascript sporingsdokumentation%2$s for listen over tilgængelige funktioner. Ved hjælp af disse funktioner kan du spore mål, brugerdefinerede variabler, e-handels ordrer, afbrudte ordrer og meget mere.",
+ "JSTrackingIntro5": "Hvis du vil gøre mere end at spore sidevisninger, kan du tjekke %1$sMatomo Javascript sporingsdokumentation%2$s for listen over tilgængelige funktioner. Ved hjælp af disse funktioner kan du spore mål, brugerdefinerede variabler, e-handelsordrer, afbrudte ordrer og meget mere.",
"FileUploadDisabled": "Overførelse af filer er ikke aktiveret i PHP-konfiguration. For at overføre dit brugerdefinerede logo skal du indstille %s i php.ini og genstarte webserveren.",
"LogoUploadFailed": "Den uploadede fil kunne ikke behandles. Kontroller at filen har et gyldigt format.",
"LogoUpload": "Vælg et logo til overførelse",
@@ -94,7 +94,7 @@
"YouMayOptOut": "Du kan vælge ikke at have en unik web analyse cookie identifikationsnummer tildelt til computeren for at undgå aggregering og analyse af data indsamlet på denne hjemmesider.",
"YouMayOptOutBis": "Vælg muligheden, klik nedenfor for at modtage en opt out-cookie.",
"OptingYouOut": "Vælger dig fra, vent venligst.....",
- "ProtocolNotDetectedCorrectly": "Du ser Matomo kan kun finde en usikker forbindelse på serveren.",
+ "ProtocolNotDetectedCorrectly": "Du benhytter i øjeblikket Matomo over en sikker SSL-forbindelse (via HTTPS), men Matomo kunne kun detektere en ikke-sikker forbindelse på serveren.",
"ProtocolNotDetectedCorrectlySolution": "For at sikre at Matomo behandler anmodninger og dit indhold over HTTPS, skal du måske redigere din %1$s fil og enten konfigurere dine proxy indstillinger, eller du kan tilføje linjen %2$s under sektionen %3$s. %4$sLæs mere%5$s"
}
} \ No newline at end of file
diff --git a/piwik/plugins/CoreAdminHome/lang/el.json b/piwik/plugins/CoreAdminHome/lang/el.json
index 71a92f8..8a7d9ad 100644
--- a/piwik/plugins/CoreAdminHome/lang/el.json
+++ b/piwik/plugins/CoreAdminHome/lang/el.json
@@ -22,6 +22,8 @@
"InvalidPluginsWarning": "Τα παρακάτω πρόσθετα δεν είναι συμβατά με το %1$s και δεν ήταν δυνατό να φορτωθούν: %2$s.",
"InvalidPluginsYouCanUninstall": "Μπορείτε να ενημερώσετε ή απεγκαταστήσετε τα πρόσθετα αυτά στη σελίδα %1$sΔιαχείριση πρόσθετων%2$s.",
"JavaScriptTracking": "Παρακολούθηση με JavaScript",
+ "HttpTrackingApi": "HTTP API Παρακολούθησης",
+ "HttpTrackingApiDescription": "Το %1$sHTTP API Παρακολούθησης%2$s σας επιτρέπει να παρακολουθείτε τα πάντα. Αυτό είναι χρήσιμο στην περίπτωση που χρησιμοποιείτε μια γλώσσα προγραμματισμού για την οποία δεν υπάρχει ακόμη SDK. Μπορεί ακόμη να είναι χρήσιμο αν θέλετε να παρακολουθείτε συσκευές ή εφαρμογές με ειδικό τρόπο.",
"JSTracking_CampaignKwdParam": "Παράμετρος Κλειδιού Καμπάνιας",
"JSTracking_CampaignNameParam": "Παράμετρος Όνομα Καμπάνιας",
"JSTracking_CodeNoteBeforeClosingHead": "Βεβαιωθείτε ότι ο κώδικας αυτός υπάρχει σε κάθε σελίδα του ιστοτόπου σας. Προτείνεται να τον επικολλήσετε προτού κλείσει η σήμανση %1$s.",
@@ -86,6 +88,7 @@
"SystemPluginSettings": "Ρυθμίσεις Συστήματος Πρόσθετου",
"TrackAGoal": "Παρακολούθηση ενός στόχου",
"TrackingCode": "Κώδικας παρακολούθησης",
+ "TrackingCodeIntro": "Το Matomo σας παρέχει διάφορους τρόπους για την ενσωμάτωση του κώδικα παρακολούθησης στον ιστοτόπο σας, εφαρμογή κινητού και σε οποιαδήποτε συσκευή ή εφαρμογή.",
"TrustedHostConfirm": "Είστε βέβαιοι ότι θέλετε να αλλάξετε το διαπιστευμένο όνομα του διακομιστή του Matomo;",
"TrustedHostSettings": "Αξιόπιστο Όνομα Διακομιστή Matomo",
"UpdateSettings": "Ρυθμίσεις ενημέρωσης",
diff --git a/piwik/plugins/CoreAdminHome/lang/en.json b/piwik/plugins/CoreAdminHome/lang/en.json
index 6f98029..0c8e4c8 100644
--- a/piwik/plugins/CoreAdminHome/lang/en.json
+++ b/piwik/plugins/CoreAdminHome/lang/en.json
@@ -22,6 +22,8 @@
"InvalidPluginsWarning": "The following plugins are not compatible with %1$s and could not be loaded: %2$s.",
"InvalidPluginsYouCanUninstall": "You can update or uninstall these plugins on the %1$sManage Plugins%2$s page.",
"JavaScriptTracking": "JavaScript Tracking",
+ "HttpTrackingApi": "HTTP Tracking API",
+ "HttpTrackingApiDescription": "The %1$sHTTP Tracking API%2$s allows you to track anything. This may be useful if you are using a programming language for which no SDK exists yet. It may also be useful when you want to track devices or application in a special way.",
"JSTracking_CampaignKwdParam": "Campaign Keyword parameter",
"JSTracking_CampaignNameParam": "Campaign Name parameter",
"JSTracking_CodeNoteBeforeClosingHead": "Make sure this code is on every page of your website. We recommend to paste it immediately before the closing %1$s tag.",
@@ -86,6 +88,7 @@
"SystemPluginSettings": "System Plugin Settings",
"TrackAGoal": "Track a goal",
"TrackingCode": "Tracking Code",
+ "TrackingCodeIntro": "Matomo offers you various ways to embed the tracking code for your website, mobile app, and even for any device or application.",
"TrustedHostConfirm": "Are you sure you want to change the trusted Matomo hostname?",
"TrustedHostSettings": "Trusted Matomo Hostname",
"UpdateSettings": "Update settings",
diff --git a/piwik/plugins/CoreAdminHome/lang/et.json b/piwik/plugins/CoreAdminHome/lang/et.json
index 3258967..08b60f7 100644
--- a/piwik/plugins/CoreAdminHome/lang/et.json
+++ b/piwik/plugins/CoreAdminHome/lang/et.json
@@ -4,6 +4,7 @@
"Administration": "Administreerimine",
"ArchivingSettings": "Arhiveerimise seaded",
"BrandingSettings": "Brändingu seaded",
+ "ReleaseChannel": "Vabasta kanal",
"ClickHereToOptIn": "Vajuta et lisada valikusse.",
"ClickHereToOptOut": "Vajuta et eemaldada valikust.",
"EmailServerSettings": "E-posti serveri seaded",
diff --git a/piwik/plugins/CoreAdminHome/lang/pl.json b/piwik/plugins/CoreAdminHome/lang/pl.json
index 923d096..9b4d652 100644
--- a/piwik/plugins/CoreAdminHome/lang/pl.json
+++ b/piwik/plugins/CoreAdminHome/lang/pl.json
@@ -22,6 +22,8 @@
"InvalidPluginsWarning": "Poniższe wtyczki nie są kompatybilne z %1$s i nie mogą zostać załadowane: %2$s.",
"InvalidPluginsYouCanUninstall": "Możesz zaktualizować lub odinstalować te pluginy na stronie %1$sObsługa Pluginów%2$s",
"JavaScriptTracking": "Śledzenie JavaScript",
+ "HttpTrackingApi": "API Śledzenia HTTP",
+ "HttpTrackingApiDescription": "%1$sAPI Śledzenia HTTP%2$s pozwala śledzić wszystko. Funkcjonalność ta może sprawdzić się w przypadku pracy z językiem programowania, dla którego jeszcze nie istnieje SDK. Może okazać się również przydatne do śledzenia urządzeń lub aplikacji w specjalny sposób.",
"JSTracking_CampaignKwdParam": "Parametr Słowo Kluczowe kampanii",
"JSTracking_CampaignNameParam": "Parametr Nazwa kampanii",
"JSTracking_CodeNoteBeforeClosingHead": "Dopilnuj, aby ten kod znalazł się na każdej stronie Twojego serwisu. Zalecamy, aby został on umieszczony bezpośrednio przed zamykającym tagiem %1$s.",
@@ -85,6 +87,7 @@
"SystemPluginSettings": "Systemowe ustawienia wtyczek",
"TrackAGoal": "Śledź cel",
"TrackingCode": "Kod śledzenia",
+ "TrackingCodeIntro": "Matomo dostarcza szereg sposobów załączania kodu śledzącego dla Twojej strony, aplikacji mobilnej jak i dla dowolnego urządzenia lub aplikacji.",
"TrustedHostConfirm": "Czy na pewno chcesz zmienić zaufaną nazwę hosta Matomo?",
"TrustedHostSettings": "Zaufana nazwa hosta Matomo",
"UpdateSettings": "Zaktualizuj ustawienia",
diff --git a/piwik/plugins/CoreAdminHome/lang/sl.json b/piwik/plugins/CoreAdminHome/lang/sl.json
index f8f5582..000a856 100644
--- a/piwik/plugins/CoreAdminHome/lang/sl.json
+++ b/piwik/plugins/CoreAdminHome/lang/sl.json
@@ -23,6 +23,9 @@
"MenuDiagnostic": "Diagnostika",
"MenuGeneralSettings": "Splošne nastavitve",
"MenuDevelopment": "Razvoj",
+ "OptOutComplete": "Odjavljeno; vaši obiski spletne strani ne bodo zabeleženi z orodjem za analitiko.",
+ "OptOutCompleteBis": "Upoštevajte, da če izbrišete piškotke, izbrišete tudi piškotek za onemogočanje analitike ali če spremenite računalnike ali spletne brskalnike, morate postopek odjave izvesti še enkrat.",
+ "OptOutDntFound": "Vaš brskalnik sporoča, da ne želite biti sledeni. To je nastavitev brskalnika, zato se ne boste mogli odločiti za sledenje, dokler ne onemogočite funkcije »Ne sledi« v vašem brskalniku.",
"OptOutExplanation": "Matomo želi zagotoviti zasebnost na internetu. Če želite svojim obiskovalcem omogočiti 'opt-out' iz Matomo spletne analitike, potem lahko dodate naslednjo HTML kodo na vašo spletno stran, npr. na stran 'Varovanje zasebnosti'.",
"OptOutForYourVisitors": "'Opt-out' za vaše obiskovalce",
"PiwikIsInstalledAt": "Matomo je nameščen na",
diff --git a/piwik/plugins/CoreAdminHome/lang/sq.json b/piwik/plugins/CoreAdminHome/lang/sq.json
index f56206c..ac0341c 100644
--- a/piwik/plugins/CoreAdminHome/lang/sq.json
+++ b/piwik/plugins/CoreAdminHome/lang/sq.json
@@ -22,6 +22,8 @@
"InvalidPluginsWarning": "Shtojcat vijuese s’janë të përputhshme me %1$s dhe s’u ngarkuan dot: %2$s.",
"InvalidPluginsYouCanUninstall": "Këto shtojca mund t’i përditësoni ose çinstaloni që nga faqja %1$sAdministroni Shtojca%2$s.",
"JavaScriptTracking": "Gjurmim me JavaScript",
+ "HttpTrackingApi": "API Gjurmimi HTTP",
+ "HttpTrackingApiDescription": "%1$sAPI për Gjurmime HTTP%2$s ju lejon të gjurmoni ç’të doni. Kjo mund të jetë e dobishme, nëse po përdorni një gjuhë programimi për të cilën ende s’ka SDK. Mund të jetë e dobishme edhe kur doni të gjurmoni pajisje apo aplikacion në një rrugë të veçantë.",
"JSTracking_CampaignKwdParam": "Parametër Fjalëkyçesh Fushatash",
"JSTracking_CampaignNameParam": "Parametër Emrash Fushatash",
"JSTracking_CodeNoteBeforeClosingHead": "Bëni të mundur që ky kod të gjendet në çdo faqe të sajtit tuaj. Këshillojmë ta ngjitni mu para etiketës mbyllëse %1$s.",
@@ -86,6 +88,7 @@
"SystemPluginSettings": "Rregullime Shtojce Sistemi",
"TrackAGoal": "Gjurmoni një objektiv",
"TrackingCode": "Kod Gjurmimi",
+ "TrackingCodeIntro": "Matomo ju ofron rrugë të ndryshme për të trupëzuar kod në sajtin tuaj, aplikacionin për celular, dhe madje për çfarëdo pajisjeje apo aplikacioni.",
"TrustedHostConfirm": "Jeni i sigurt se doni të ndryshoni strehëemrin e besuar të Matomo-s?",
"TrustedHostSettings": "Strehëemër e Besuar Matomo",
"UpdateSettings": "Rregullime përditësimesh",
diff --git a/piwik/plugins/CoreAdminHome/lang/tr.json b/piwik/plugins/CoreAdminHome/lang/tr.json
index 99c8351..5eacf18 100644
--- a/piwik/plugins/CoreAdminHome/lang/tr.json
+++ b/piwik/plugins/CoreAdminHome/lang/tr.json
@@ -22,6 +22,8 @@
"InvalidPluginsWarning": "Şu uygulama ekleri %1$sile uyumlu olmadığından yüklenemedi: %2$s.",
"InvalidPluginsYouCanUninstall": "Bu uygulama eklerini %1$sUygulama Eki Yönetimi%2$s sayfasından güncelleyebilir ya da kaldırabilirsiniz.",
"JavaScriptTracking": "Javascript İle İzleme",
+ "HttpTrackingApi": "HTTP İzleme API",
+ "HttpTrackingApiDescription": "%1$sHTTP İzleme API%2$s istenilen verinin izlenebilmesini sağlar. Henüz bir SDK uygulaması olmayan bir programlama dili kullanıyorsanız API yararlı olabilir. Ayrıca aygıt ya da uygulamaları özel bir yöntem ile izlemek istiyorsanız işe yarar.",
"JSTracking_CampaignKwdParam": "Kampanya Anahtar Sözcük Parametreleri",
"JSTracking_CampaignNameParam": "Kampanya Adı Parametresi",
"JSTracking_CodeNoteBeforeClosingHead": "Bu kodun web sitenizin her sayfasında bulunduğundan emin olun. Kodu %1$s kapanış kod iminin hemen öncesine yapıştırmanız önerilir.",
@@ -86,6 +88,7 @@
"SystemPluginSettings": "Sistem Uygulama Eki Ayarları",
"TrackAGoal": "Bir hedef izleme",
"TrackingCode": "İzleme Kodu",
+ "TrackingCodeIntro": "Matomo web sitenize, mobil uygulamanıza ve değişik aygıt ve uygulamalara izleme kodunu gömmek için çeşitli yöntemler sunar.",
"TrustedHostConfirm": "Güvenilir Matomo sunucu adınızı değiştirmek istediğinize emin misiniz?",
"TrustedHostSettings": "Güvenilir Matomo Sunucu Adı",
"UpdateSettings": "Ayarları güncelle",
diff --git a/piwik/plugins/CoreAdminHome/lang/zh-cn.json b/piwik/plugins/CoreAdminHome/lang/zh-cn.json
index d31af02..08dd50a 100644
--- a/piwik/plugins/CoreAdminHome/lang/zh-cn.json
+++ b/piwik/plugins/CoreAdminHome/lang/zh-cn.json
@@ -27,6 +27,7 @@
"JSTracking_CodeNoteBeforeClosingHead": "请确保此代码在您网站里的每一个页面。我们建议您马上把它粘贴在%1$s标签之前。",
"JSTracking_CustomCampaignQueryParam": "广告活动名称和关键词使用自定义搜索参数",
"JSTracking_CrossDomain": "用来辨识独立访客的访问者 ID 默认被储存在浏览器的第一方 \u0004Cookies 中,并且只能被相同域名的网页访问。启用跨域链接将能辨识出某位用户在不同域名下的活动和页面访问是同一位用户所为。每当用户点击任何一个您网站的别名地址,都会在网址后方添加参数 pk_vid 来传递访问者 ID。",
+ "JSTracking_CrossDomain_NeedsMultipleDomains": "注意:如果使用跨越链接,请为你的网站指定一个以上的域名(URL)。",
"JSTracking_CustomCampaignQueryParamDesc": "提示:%1$sMatomo 会自动检测谷歌分析(Google Analytics)的参数。%2$s",
"JSTracking_DisableCookies": "禁用所有追踪 Cookies",
"JSTracking_DisableCookiesDesc": "禁用所有第一方 Cookies。这个网站现有的 Matomo cookies 将会在下次页面访问时全部删除。",
diff --git a/piwik/plugins/CoreAdminHome/templates/trackingCodeGenerator.twig b/piwik/plugins/CoreAdminHome/templates/trackingCodeGenerator.twig
index 1ea4a0f..dab8773 100644
--- a/piwik/plugins/CoreAdminHome/templates/trackingCodeGenerator.twig
+++ b/piwik/plugins/CoreAdminHome/templates/trackingCodeGenerator.twig
@@ -5,17 +5,34 @@
<link rel="stylesheet" href="plugins/CoreAdminHome/stylesheets/jsTrackingGenerator.css" />
{% endblock %}
-{% set title %}{{ 'CoreAdminHome_JavaScriptTracking'|translate }}{% endset %}
+{% set title %}{{ 'CoreAdminHome_TrackingCode'|translate }}{% endset %}
{% block content %}
+ <div class="card">
+ <div class="card-content">
+ <h2 piwik-enriched-headline
+ help-url="https://matomo.org/docs/tracking-api/"
+ rate="{{ 'CoreAdminHome_TrackingCode'|translate|e('html_attr') }}">{{ 'CoreAdminHome_TrackingCode'|translate }}</h2>
+ <p style="padding-left: 0;">{{ 'CoreAdminHome_TrackingCodeIntro'|translate }}</p>
+ </div>
+ <div class="card-action">
+ {{ 'General_GoTo2'|translate }}:
+ <a href="#javaScriptTracking">{{ 'CoreAdminHome_JavaScriptTracking'|translate }}</a>
+ <a href="#imageTracking">{{ 'CoreAdminHome_ImageTracking'|translate }}</a>
+ <a href="#importServerLogs">{{ 'CoreAdminHome_ImportingServerLogs'|translate }}</a>
+ <a href="#mobileAppsAndSdks">{{ 'SitesManager_MobileAppsAndSDKs'|translate }}</a>
+ <a href="#trackingApi">{{ 'CoreAdminHome_HttpTrackingApi'|translate }}</a>
+ {{ postEvent('Template.endTrackingCodePageTableOfContents') }}
+ </div>
+ </div>
+
<input type="hidden" name="numMaxCustomVariables"
value="{{ maxCustomVariables|e('html_attr') }}">
<div piwik-content-block
- content-title="{{ title|e('html_attr') }}"
- help-url="https://matomo.org/docs/tracking-api/"
- rate="{{ 'CoreAdminHome_TrackingCode'|translate|e('html_attr') }}">
+ anchor="javaScriptTracking"
+ content-title="{{ 'CoreAdminHome_JavaScriptTracking'|translate|e('html_attr') }}">
<div id="js-code-options" ng-controller="JsTrackingCodeController as jsTrackingCode">
@@ -238,7 +255,8 @@
</div>
</div>
-<div piwik-content-block content-title="{{ 'CoreAdminHome_ImageTracking'|translate|e('html_attr') }}">
+<div piwik-content-block content-title="{{ 'CoreAdminHome_ImageTracking'|translate|e('html_attr') }}"
+ anchor="imageTracking">
<a name="image-tracking-link"></a>
<div id="image-tracking-code-options" ng-controller="ImageTrackingCodeController as imageTrackingCode">
@@ -314,9 +332,21 @@
</div>
</div>
-<div piwik-content-block content-title="{{ 'CoreAdminHome_ImportingServerLogs'|translate|e('html_attr') }}">
+<div piwik-content-block content-title="{{ 'CoreAdminHome_ImportingServerLogs'|translate|e('html_attr') }}"
+ anchor="importServerLogs">
<p>
{{ 'CoreAdminHome_ImportingServerLogsDesc'|translate('<a href="https://matomo.org/log-analytics/" rel="noreferrer" target="_blank">','</a>')|raw }}
</p>
</div>
+
+<div piwik-content-block content-title="{{ 'SitesManager_MobileAppsAndSDKs'|translate }}" anchor="mobileAppsAndSdks">
+ <p>{{ 'SitesManager_MobileAppsAndSDKsDescription'|translate('<a href="https://matomo.org/integrate/#programming-language-platforms-and-frameworks" rel="noreferrer" target="_blank">','</a>')|raw }}</p>
+</div>
+
+<div piwik-content-block content-title="{{ 'CoreAdminHome_HttpTrackingApi'|translate }}" anchor="trackingApi">
+ <p>{{ 'CoreAdminHome_HttpTrackingApiDescription'|translate('<a href="https://developer.matomo.org/api-reference/tracking-api" rel="noreferrer" target="_blank">','</a>')|raw }}</p>
+</div>
+
+{{ postEvent('Template.endTrackingCodePage') }}
+
{% endblock %}
diff --git a/piwik/plugins/CoreConsole/Commands/GeneratePluginBase.php b/piwik/plugins/CoreConsole/Commands/GeneratePluginBase.php
index 61db237..211dc94 100644
--- a/piwik/plugins/CoreConsole/Commands/GeneratePluginBase.php
+++ b/piwik/plugins/CoreConsole/Commands/GeneratePluginBase.php
@@ -67,10 +67,11 @@ abstract class GeneratePluginBase extends ConsoleCommand
*
* @param $pluginName
* @param $translatedText
+ * @param string $translationKey Optional, by default the key will be generated automatically
* @return string Either the generated translation key or the original text if a different translation for this
* generated translation key already exists.
*/
- protected function makeTranslationIfPossible($pluginName, $translatedText)
+ protected function makeTranslationIfPossible($pluginName, $translatedText, $translationKey = '')
{
$defaultLang = array($pluginName => array());
@@ -85,7 +86,11 @@ abstract class GeneratePluginBase extends ConsoleCommand
$translations[$pluginName] = array();
}
- $key = $this->buildTranslationKey($translatedText);
+ if (!empty($translationKey)) {
+ $key = $translationKey;
+ } else {
+ $key = $this->buildTranslationKey($translatedText);
+ }
if (array_key_exists($key, $translations[$pluginName])) {
// we do not want to overwrite any existing translations
diff --git a/piwik/plugins/CoreHome/Columns/IdSite.php b/piwik/plugins/CoreHome/Columns/IdSite.php
index f757b5b..1192954 100644
--- a/piwik/plugins/CoreHome/Columns/IdSite.php
+++ b/piwik/plugins/CoreHome/Columns/IdSite.php
@@ -8,8 +8,10 @@
*/
namespace Piwik\Plugins\CoreHome\Columns;
-use Piwik\Columns\Join\SiteNameJoin;
+use Piwik\Metrics\Formatter;
+use Piwik\Piwik;
use Piwik\Plugin\Dimension\VisitDimension;
+use Piwik\Site;
use Piwik\Tracker\Action;
use Piwik\Tracker\Request;
use Piwik\Tracker\Visitor;
@@ -23,13 +25,10 @@ class IdSite extends VisitDimension
// INDEX(idsite, config_id, visit_last_action_time) and we maybe not be sure whether config_id already exists at
// installing point (we do not know whether visit_last_action_time or idsite column would be added first).
+ protected $nameSingular = 'General_Measurable';
+ protected $namePlural = 'General_Measurables';
protected $type = self::TYPE_TEXT;
- public function getDbColumnJoin()
- {
- return new SiteNameJoin();
- }
-
/**
* @param Request $request
* @param Visitor $visitor
@@ -51,4 +50,14 @@ class IdSite extends VisitDimension
{
return $request->getIdSite();
}
-} \ No newline at end of file
+
+ public function formatValue($value, $idSite, Formatter $formatter)
+ {
+ try {
+ return Site::getNameFor($value);
+ } catch (\Exception $ex) {
+ $formatted = parent::formatValue($value, $idSite, $formatter);
+ return Piwik::translate('General_MeasurableId') . ': ' . $formatted;
+ }
+ }
+}
diff --git a/piwik/plugins/CoreHome/Columns/LinkVisitActionId.php b/piwik/plugins/CoreHome/Columns/LinkVisitActionId.php
index 6cc55c0..664bdeb 100644
--- a/piwik/plugins/CoreHome/Columns/LinkVisitActionId.php
+++ b/piwik/plugins/CoreHome/Columns/LinkVisitActionId.php
@@ -13,9 +13,6 @@ use Piwik\Columns\MetricsList;
use Piwik\Piwik;
use Piwik\Plugin\ArchivedMetric;
use Piwik\Plugin\Dimension\ActionDimension;
-use Piwik\Plugin\Dimension\VisitDimension;
-use Piwik\Plugin\Segment;
-
class LinkVisitActionId extends ActionDimension
{
@@ -32,11 +29,5 @@ class LinkVisitActionId extends ActionDimension
$metric->setTranslatedName(Piwik::translate('General_ColumnHits'));
$metric->setName('hits');
$metricsList->addMetric($metric);
-
- $metric = $dimensionMetricFactory->createMetric(ArchivedMetric::AGGREGATION_UNIQUE);
- $metric->setTranslatedName(Piwik::translate('General_ColumnPageviews'));
- $metric->setDocumentation(Piwik::translate('General_ColumnPageviewsDocumentation'));
- $metric->setName('pageviews');
- $metricsList->addMetric($metric);
}
-} \ No newline at end of file
+}
diff --git a/piwik/plugins/CoreHome/Columns/LinkVisitActionIdPages.php b/piwik/plugins/CoreHome/Columns/LinkVisitActionIdPages.php
new file mode 100644
index 0000000..de724df
--- /dev/null
+++ b/piwik/plugins/CoreHome/Columns/LinkVisitActionIdPages.php
@@ -0,0 +1,44 @@
+<?php
+/**
+ * Piwik - free/libre analytics platform
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+namespace Piwik\Plugins\CoreHome\Columns;
+
+use Piwik\Columns\DimensionMetricFactory;
+use Piwik\Columns\Discriminator;
+use Piwik\Columns\MetricsList;
+use Piwik\Piwik;
+use Piwik\Plugin\ArchivedMetric;
+use Piwik\Plugin\Dimension\ActionDimension;
+use Piwik\Tracker\Action;
+
+class LinkVisitActionIdPages extends ActionDimension
+{
+ protected $columnName = 'idlink_va';
+ protected $category = 'General_Actions';
+ protected $nameSingular = 'General_Actions';