CINXE.COM
Pearson’s Privacy Notices
<!DOCTYPE HTML> <html lang="en" class="no-js"> <head> <meta charset="UTF-8"/> <meta name="template" content="global-store-en-template"/> <link href="https://www.pearson.com/pcp-hed/css/pcp-hed.css" rel='stylesheet'/> <title>Pearson’s Privacy Notices</title> <meta name="viewport" content="width=device-width, initial-scale=1"/> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <meta name="title" content="Pearson’s Privacy Notices"/> <meta name="description" content="Find out about what our products and services do with your personal information."/> <meta property="og:title" content="Pearson’s Privacy Notices"/> <meta property="og:description" content="Find out about what our products and services do with your personal information."/> <meta name="twitter:title" content="Pearson’s Privacy Notices"/> <meta property="og:url" content="https://www.pearson.com/privacy-center/privacy-notices.html"/> <meta name="twitter:description" content="Find out about what our products and services do with your personal information."/> <meta name="article:modified_time" content="2024-08-06T11:53:25.714Z"/> <link rel="stylesheet" href="/etc/clientlibs/platform/aem-core/components/page/page-properties-dialog.min.ACSHASH1de7355ba14c780dbdf61ff69fb685cf.css" type="text/css"> <link rel="shortcut icon" media="(prefers-color-scheme: dark)" href="/conf/pearson/settings/wcm/templates/global-store-en-template/favicon-on-dark.ico"/> <link rel="shortcut icon" media="(prefers-color-scheme: light)" href="/conf/pearson/settings/wcm/templates/global-store-en-template/favicon-on-light.ico"/> <script src="/etc/clientlibs/platform/aem-core/libraries/jquery-3-6-0.min.ACSHASHf7f88c154f8dde28b5bcdd9e1c79f655.js"></script> <script src="/etc/clientlibs/platform/aem-core/libraries/jquery-ui-1-13-2.min.ACSHASH1e2047978946a1d271356d0b557a84a3.js"></script> <script src="/etc/clientlibs/platform/aem-core/libraries/picturefill.min.ACSHASH173a529fee52e78dd3735db343325617.js"></script> <script src="/etc/clientlibs/platform/aem-core/form-validator.min.ACSHASH36c30c0fad3028f0587f00d798961847.js"></script> <script src="/etc.clientlibs/clientlibs/granite/lodash/modern.min.ACSHASH76136ba6e7c9276b178edc785c389ba7.js"></script> <script src="/etc.clientlibs/cq/personalization/clientlib/underscore.min.ACSHASH03540ac0f1ea39be635e17b62c718dd5.js"></script> <script src="/etc.clientlibs/clientlibs/granite/backbone.min.ACSHASHe590febe6539b40e39ec9c983d8e96c0.js"></script> <script src="/etc/clientlibs/platform/aem-core/libraries/template-settings.min.ACSHASH6e38b7e6a576e04396c34830c83f30fc.js"></script> <script src="/etc/clientlibs/platform/aem-core/components.min.ACSHASH5354bee8d264e371dc96ce368e69f55a.js"></script> <script src="/etc/clientlibs/platform/aem-core/libraries/bootstrap-4-3-1.min.ACSHASHcb8bf3d1be0523e7c0bd6ce9a1c7a388.js"></script> <script src="/etc/clientlibs/platform/aem-core/libraries/parsley-2-8.min.ACSHASH556fd9ab479352b3d4b9e80b17f0b476.js"></script> <script src="/etc/clientlibs/one-dot-com/one-dot-com/highered-reimagined.min.ACSHASH8484c9b42a7d840d13f47526d5f50435.js"></script> <link rel="stylesheet" href="/etc/clientlibs/platform/aem-core/libraries/bootstrap-4-3-1.min.ACSHASHcf4d74070a73cdb86117b5ecea837a56.css" type="text/css"> <link rel="stylesheet" href="/etc/clientlibs/platform/aem-core/libraries/font-awesome-4-2.min.ACSHASHbd12c3d96f5473480f04fb430338d21c.css" type="text/css"> <link rel="stylesheet" href="/etc/clientlibs/platform/aem-core/libraries/parsley-2-8.min.ACSHASHca334e633e206e73cb76e8ce5f18875f.css" type="text/css"> <link rel="stylesheet" href="/etc/clientlibs/platform/aem-core/components/content/static-collection.min.ACSHASHd8d236ca379e8a2f4fda3e67ba9e1224.css" type="text/css"> <link rel="stylesheet" href="/etc/clientlibs/platform/aem-core/components/content/video-common.min.ACSHASHb41659e9aebfc61648ef1e6283e6e6ef.css" type="text/css"> <link rel="stylesheet" href="/etc/clientlibs/platform/aem-core/components/content/column-control.min.ACSHASH6371e8f53bc80147ef09e70201ed9df7.css" type="text/css"> <link rel="stylesheet" href="/etc/clientlibs/platform/aem-core/components/content/column-nav.min.ACSHASH72c9c50403bd963fcb6e0e49268c9504.css" type="text/css"> <link rel="stylesheet" href="/etc/clientlibs/platform/aem-core/components/content/youtube-video.min.ACSHASHb4f8a1709ea5e6bebb8f47c1a7a30078.css" type="text/css"> <link rel="stylesheet" href="/etc/clientlibs/platform/aem-core/components/content/modal-window-pop-up.min.ACSHASH9e8a7baff9560796c704601fa9097501.css" type="text/css"> <link rel="stylesheet" href="/etc/clientlibs/platform/aem-core/components/content/events/events-calendar.min.ACSHASH0887ef49815a1b7c07691cecf69b0b86.css" type="text/css"> <link rel="stylesheet" href="/etc/clientlibs/one-dot-com/one-dot-com/static-collection.min.ACSHASH4d4a2616c5ebe9372c4f8a686430979d.css" type="text/css"> <link rel="stylesheet" href="/etc/clientlibs/one-dot-com/one-dot-com/highered-reimagined.min.ACSHASHf91cea1c4b4db1498187a97173294de1.css" type="text/css"> <link rel="stylesheet" href="/etc/clientlibs/platform/aem-core/components/content/global-message.min.ACSHASHf9caedf14ceff1d7ebee18b5b70365b8.css" type="text/css"> <link rel="stylesheet" href="/etc/clientlibs/one-dot-com/one-dot-com/column-control-collapse.min.ACSHASHce2e9e8aa192f718db55e5af9287386c.css" type="text/css"> <link rel="stylesheet" href="/etc/clientlibs/one-dot-com/one-dot-com/hed-navigation/nav-footer.min.ACSHASH89f6f96afc9ac21d2559b3e9250643ec.css" type="text/css"> <link rel="stylesheet" href="/etc/clientlibs/one-dot-com/one-dot-com/hed-navigation/nav-aem-header.min.ACSHASHeeef99282da9bd62c9cde0b17b4e23b3.css" type="text/css"> <link rel="stylesheet" href="/etc/clientlibs/one-dot-com/one-dot-com/he-marketing-block.min.ACSHASH2665c417098669f6210a955d67dcdb18.css" type="text/css"> <link rel="stylesheet" href="/etc/clientlibs/platform/aem-core/components/content/rte-styles-for-ordered-list.min.ACSHASH5f44c4b223bc4ea49340790d743bacd4.css" type="text/css"> <script id="digital-data-layer" type="text/javascript"> dataLayer = [{ "version" : "1.0", "site" : { "siteId" : "pearson.com", "siteLabel" : "global", "domain" : "pearson.com", "siteSection" : "privacy-center", "language" : "en" }, "pageInfo" : { "pageTitle" : "Privacy notices", "pageURL" : "/privacy-center/privacy-notices.html", "pageTemplate" : "/conf/pearson/settings/wcm/templates/global-store-en-template", "dateCreated" : "2024-08-06T11:53:39.083Z", "lastUpdated" : "2024-08-06T11:53:25.714Z", "pageCategory" : "Static", "isBypassEnabled" : false, "loginPageLink" : "/store/login", "breadcrumb" : [ "Home", "Privacy center", "Privacy notices" ], "redirectIfAuthenticatedByIES" : false } }]; </script> <!-- Google Tag Manager New --> <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-MVH69VF');</script> <!-- End Google Tag Manager --> <script src='https://login.pearson.com/v1/piapi/login/js/v2/session.js'></script> <!-- This is the path to script for the current cloud service --> <script src="/etc/cloudservices/geolocation/global-store/_jcr_content/geolocation-context.js" charset="iso-8859-1"></script> <script src="/etc/cloudservices/geolocation/global-store/_jcr_content/geolocation-context.initScript.js"></script> <!-- NR Script Start for www.pearson.com --> <script> window.NREUM || (NREUM = {}); NREUM.init = { distributed_tracing: { enabled: true }, privacy: { cookies_enabled: true }, ajax: { deny_list: ['bam.nr-data.net'] }, }; NREUM.loader_config = { accountID: '1765996', trustKey: '691807', agentID: '1120248489', licenseKey: '068b3faa02', applicationID: '1120248489', }; NREUM.info = { beacon: 'bam.nr-data.net', errorBeacon: 'bam.nr-data.net', licenseKey: '068b3faa02', applicationID: '1120248489', sa: 1, }; /*! For license information please see nr-loader-spa-1.246.1.min.js.LICENSE.txt */ (() => { 'use strict'; var e, t, r = { 234: (e, t, r) => { r.d(t, { P_: () => g, Mt: () => v, C5: () => s, DL: () => A, OP: () => D, lF: () => N, Yu: () => x, Dg: () => m, CX: () => c, GE: () => w, sU: () => j, }); var n = r(8632), i = r(9567); const o = { beacon: n.ce.beacon, errorBeacon: n.ce.errorBeacon, licenseKey: void 0, applicationID: void 0, sa: void 0, queueTime: void 0, applicationTime: void 0, ttGuid: void 0, user: void 0, account: void 0, product: void 0, extra: void 0, jsAttributes: {}, userAttributes: void 0, atts: void 0, transactionName: void 0, tNamePlain: void 0, }, a = {}; function s(e) { if (!e) throw new Error('All info objects require an agent identifier!'); if (!a[e]) throw new Error('Info for '.concat(e, ' was never set')); return a[e]; } function c(e, t) { if (!e) throw new Error('All info objects require an agent identifier!'); (a[e] = (0, i.D)(t, o)), (0, n.Qy)(e, a[e], 'info'); } const u = e => { if (!e || 'string' != typeof e) return !1; try { document.createDocumentFragment().querySelector(e); } catch { return !1; } return !0; }; var d = r(7056), l = r(50); const f = () => { const e = { mask_selector: '*', block_selector: '[data-nr-block]', mask_input_options: { color: !1, date: !1, 'datetime-local': !1, email: !1, month: !1, number: !1, range: !1, search: !1, tel: !1, text: !1, time: !1, url: !1, week: !1, textarea: !1, select: !1, password: !0, }, }; return { feature_flags: [], proxy: { assets: void 0, beacon: void 0 }, privacy: { cookies_enabled: !0 }, ajax: { deny_list: void 0, block_internal: !0, enabled: !0, harvestTimeSeconds: 10, autoStart: !0 }, distributed_tracing: { enabled: void 0, exclude_newrelic_header: void 0, cors_use_newrelic_header: void 0, cors_use_tracecontext_headers: void 0, allowed_origins: void 0, }, session: { domain: void 0, expiresMs: d.oD, inactiveMs: d.Hb }, ssl: void 0, obfuscate: void 0, jserrors: { enabled: !0, harvestTimeSeconds: 10, autoStart: !0 }, metrics: { enabled: !0, autoStart: !0 }, page_action: { enabled: !0, harvestTimeSeconds: 30, autoStart: !0 }, page_view_event: { enabled: !0, autoStart: !0 }, page_view_timing: { enabled: !0, harvestTimeSeconds: 30, long_task: !1, autoStart: !0 }, session_trace: { enabled: !0, harvestTimeSeconds: 10, autoStart: !0 }, harvest: { tooManyRequestsDelay: 60 }, session_replay: { autoStart: !0, enabled: !1, harvestTimeSeconds: 60, sampling_rate: 50, error_sampling_rate: 50, collect_fonts: !1, inline_images: !1, inline_stylesheet: !0, mask_all_inputs: !0, get mask_text_selector() { return e.mask_selector; }, set mask_text_selector(t) { u(t) ? (e.mask_selector = t + ',[data-nr-mask]') : null === t ? (e.mask_selector = t) : (0, l.Z)('An invalid session_replay.mask_selector was provided and will not be used', t); }, get block_class() { return 'nr-block'; }, get ignore_class() { return 'nr-ignore'; }, get mask_text_class() { return 'nr-mask'; }, get block_selector() { return e.block_selector; }, set block_selector(t) { u(t) ? (e.block_selector += ','.concat(t)) : '' !== t && (0, l.Z)('An invalid session_replay.block_selector was provided and will not be used', t); }, get mask_input_options() { return e.mask_input_options; }, set mask_input_options(t) { t && 'object' == typeof t ? (e.mask_input_options = { ...t, password: !0 }) : (0, l.Z)('An invalid session_replay.mask_input_option was provided and will not be used', t); }, }, spa: { enabled: !0, harvestTimeSeconds: 10, autoStart: !0 }, }; }, h = {}, p = 'All configuration objects require an agent identifier!'; function g(e) { if (!e) throw new Error(p); if (!h[e]) throw new Error('Configuration for '.concat(e, ' was never set')); return h[e]; } function m(e, t) { if (!e) throw new Error(p); (h[e] = (0, i.D)(t, f())), (0, n.Qy)(e, h[e], 'config'); } function v(e, t) { if (!e) throw new Error(p); var r = g(e); if (r) { for (var n = t.split('.'), i = 0; i < n.length - 1; i++) if ('object' != typeof (r = r[n[i]])) return; r = r[n[n.length - 1]]; } return r; } const b = { accountID: void 0, trustKey: void 0, agentID: void 0, licenseKey: void 0, applicationID: void 0, xpid: void 0, }, y = {}; function A(e) { if (!e) throw new Error('All loader-config objects require an agent identifier!'); if (!y[e]) throw new Error('LoaderConfig for '.concat(e, ' was never set')); return y[e]; } function w(e, t) { if (!e) throw new Error('All loader-config objects require an agent identifier!'); (y[e] = (0, i.D)(t, b)), (0, n.Qy)(e, y[e], 'loader_config'); } const x = (0, n.mF)().o; var E = r(385), _ = r(6818); const T = { buildEnv: _.Re, customTransaction: void 0, disabled: !1, distMethod: _.gF, isolatedBacklog: !1, loaderType: void 0, maxBytes: 3e4, offset: Math.floor( E._A?.performance?.timeOrigin || E._A?.performance?.timing?.navigationStart || Date.now(), ), onerror: void 0, origin: '' + E._A.location, ptid: void 0, releaseIds: {}, session: void 0, xhrWrappable: 'function' == typeof E._A.XMLHttpRequest?.prototype?.addEventListener, version: _.q4, denyList: void 0, }, S = {}; function D(e) { if (!e) throw new Error('All runtime objects require an agent identifier!'); if (!S[e]) throw new Error('Runtime for '.concat(e, ' was never set')); return S[e]; } function j(e, t) { if (!e) throw new Error('All runtime objects require an agent identifier!'); (S[e] = (0, i.D)(t, T)), (0, n.Qy)(e, S[e], 'runtime'); } function N(e) { return (function (e) { try { const t = s(e); return !!t.licenseKey && !!t.errorBeacon && !!t.applicationID; } catch (e) { return !1; } })(e); } }, 9567: (e, t, r) => { r.d(t, { D: () => i }); var n = r(50); function i(e, t) { try { if (!e || 'object' != typeof e) return (0, n.Z)('Setting a Configurable requires an object as input'); if (!t || 'object' != typeof t) return (0, n.Z)('Setting a Configurable requires a model to set its initial properties'); const r = Object.create(Object.getPrototypeOf(t), Object.getOwnPropertyDescriptors(t)), o = 0 === Object.keys(r).length ? e : r; for (let a in o) if (void 0 !== e[a]) try { Array.isArray(e[a]) && Array.isArray(t[a]) ? (r[a] = Array.from(new Set([...e[a], ...t[a]]))) : 'object' == typeof e[a] && 'object' == typeof t[a] ? (r[a] = i(e[a], t[a])) : (r[a] = e[a]); } catch (e) { (0, n.Z)('An error occurred while setting a property of a Configurable', e); } return r; } catch (e) { (0, n.Z)('An error occured while setting a Configurable', e); } } }, 6818: (e, t, r) => { r.d(t, { Re: () => i, gF: () => o, lF: () => a, q4: () => n }); const n = '1.246.1', i = 'PROD', o = 'CDN', a = '2.0.0-alpha.11'; }, 385: (e, t, r) => { r.d(t, { FN: () => s, IF: () => d, Nk: () => f, Tt: () => c, _A: () => o, cv: () => h, iS: () => a, il: () => n, ux: () => u, v6: () => i, w1: () => l, }); const n = 'undefined' != typeof window && !!window.document, i = 'undefined' != typeof WorkerGlobalScope && (('undefined' != typeof self && self instanceof WorkerGlobalScope && self.navigator instanceof WorkerNavigator) || ('undefined' != typeof globalThis && globalThis instanceof WorkerGlobalScope && globalThis.navigator instanceof WorkerNavigator)), o = n ? window : 'undefined' != typeof WorkerGlobalScope && (('undefined' != typeof self && self instanceof WorkerGlobalScope && self) || ('undefined' != typeof globalThis && globalThis instanceof WorkerGlobalScope && globalThis)), a = Boolean('hidden' === o?.document?.visibilityState), s = '' + o?.location, c = /iPad|iPhone|iPod/.test(o.navigator?.userAgent), u = c && 'undefined' == typeof SharedWorker, d = (() => { const e = o.navigator?.userAgent?.match(/Firefox[/\s](\d+\.\d+)/); return Array.isArray(e) && e.length >= 2 ? +e[1] : 0; })(), l = Boolean(n && window.document.documentMode), f = !!o.navigator?.sendBeacon, h = Math.floor(o?.performance?.timeOrigin || o?.performance?.timing?.navigationStart || Date.now()); }, 1117: (e, t, r) => { r.d(t, { w: () => o }); var n = r(50); const i = { agentIdentifier: '', ee: void 0 }; class o { constructor(e) { try { if ('object' != typeof e) return (0, n.Z)('shared context requires an object as input'); (this.sharedContext = {}), Object.assign(this.sharedContext, i), Object.entries(e).forEach(e => { let [t, r] = e; Object.keys(i).includes(t) && (this.sharedContext[t] = r); }); } catch (e) { (0, n.Z)('An error occured while setting SharedContext', e); } } } }, 8e3: (e, t, r) => { r.d(t, { L: () => d, R: () => c }); var n = r(8325), i = r(1284), o = r(4322), a = r(3325); const s = {}; function c(e, t) { const r = { staged: !1, priority: a.p[t] || 0 }; u(e), s[e].get(t) || s[e].set(t, r); } function u(e) { e && (s[e] || (s[e] = new Map())); } function d() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : '', t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 'feature'; if ((u(e), !e || !s[e].get(t))) return a(t); s[e].get(t).staged = !0; const r = [...s[e]]; function a(t) { const r = e ? n.ee.get(e) : n.ee, a = o.X.handlers; if (r.backlog && a) { var s = r.backlog[t], c = a[t]; if (c) { for (var u = 0; s && u < s.length; ++u) l(s[u], c); (0, i.D)(c, function (e, t) { (0, i.D)(t, function (t, r) { r[0].on(e, r[1]); }); }); } delete a[t], (r.backlog[t] = null), r.emit('drain-' + t, []); } } r.every(e => { let [t, r] = e; return r.staged; }) && (r.sort((e, t) => e[1].priority - t[1].priority), r.forEach(t => { let [r] = t; s[e].delete(r), a(r); })); } function l(e, t) { var r = e[1]; (0, i.D)(t[r], function (t, r) { var n = e[0]; if (r[0] === n) { var i = r[1], o = e[3], a = e[2]; i.apply(o, a); } }); } }, 8325: (e, t, r) => { r.d(t, { A: () => c, ee: () => u }); var n = r(8632), i = r(2210), o = r(234); class a { constructor(e) { this.contextId = e; } } var s = r(3117); const c = 'nr@context:'.concat(s.a), u = (function e(t, r) { var n = {}, s = {}, d = {}, f = !1; try { f = 16 === r.length && (0, o.OP)(r).isolatedBacklog; } catch (e) {} var h = { on: g, addEventListener: g, removeEventListener: function (e, t) { var r = n[e]; if (!r) return; for (var i = 0; i < r.length; i++) r[i] === t && r.splice(i, 1); }, emit: function (e, r, n, i, o) { !1 !== o && (o = !0); if (u.aborted && !i) return; t && o && t.emit(e, r, n); for (var a = p(n), c = m(e), d = c.length, l = 0; l < d; l++) c[l].apply(a, r); var f = b()[s[e]]; f && f.push([h, e, r, a]); return a; }, get: v, listeners: m, context: p, buffer: function (e, t) { const r = b(); if (((t = t || 'feature'), h.aborted)) return; Object.entries(e || {}).forEach(e => { let [n, i] = e; (s[i] = t), t in r || (r[t] = []); }); }, abort: l, aborted: !1, isBuffering: function (e) { return !!b()[s[e]]; }, debugId: r, backlog: f ? {} : t && 'object' == typeof t.backlog ? t.backlog : {}, }; return h; function p(e) { return e && e instanceof a ? e : e ? (0, i.X)(e, c, () => new a(c)) : new a(c); } function g(e, t) { n[e] = m(e).concat(t); } function m(e) { return n[e] || []; } function v(t) { return (d[t] = d[t] || e(h, t)); } function b() { return h.backlog; } })(void 0, 'globalEE'), d = (0, n.fP)(); function l() { (u.aborted = !0), (u.backlog = {}); } d.ee || (d.ee = u); }, 5546: (e, t, r) => { r.d(t, { E: () => n, p: () => i }); var n = r(8325).ee.get('handle'); function i(e, t, r, i, o) { o ? (o.buffer([e], i), o.emit(e, t, r)) : (n.buffer([e], i), n.emit(e, t, r)); } }, 4322: (e, t, r) => { r.d(t, { X: () => o }); var n = r(5546); o.on = a; var i = (o.handlers = {}); function o(e, t, r, o) { a(o || n.E, i, e, t, r); } function a(e, t, r, i, o) { o || (o = 'feature'), e || (e = n.E); var a = (t[o] = t[o] || {}); (a[r] = a[r] || []).push([e, i]); } }, 3239: (e, t, r) => { r.d(t, { bP: () => s, iz: () => c, m$: () => a }); var n = r(385); let i = !1, o = !1; try { const e = { get passive() { return (i = !0), !1; }, get signal() { return (o = !0), !1; }, }; n._A.addEventListener('test', null, e), n._A.removeEventListener('test', null, e); } catch (e) {} function a(e, t) { return i || o ? { capture: !!e, passive: i, signal: t } : !!e; } function s(e, t) { let r = arguments.length > 2 && void 0 !== arguments[2] && arguments[2], n = arguments.length > 3 ? arguments[3] : void 0; window.addEventListener(e, t, a(r, n)); } function c(e, t) { let r = arguments.length > 2 && void 0 !== arguments[2] && arguments[2], n = arguments.length > 3 ? arguments[3] : void 0; document.addEventListener(e, t, a(r, n)); } }, 3117: (e, t, r) => { r.d(t, { a: () => n }); const n = (0, r(4402).Rl)(); }, 4402: (e, t, r) => { r.d(t, { Ht: () => u, M: () => c, Rl: () => a, ky: () => s }); var n = r(385); const i = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'; function o(e, t) { return e ? 15 & e[t] : (16 * Math.random()) | 0; } function a() { const e = n._A?.crypto || n._A?.msCrypto; let t, r = 0; return ( e && e.getRandomValues && (t = e.getRandomValues(new Uint8Array(31))), i .split('') .map(e => ('x' === e ? o(t, ++r).toString(16) : 'y' === e ? ((3 & o()) | 8).toString(16) : e)) .join('') ); } function s(e) { const t = n._A?.crypto || n._A?.msCrypto; let r, i = 0; t && t.getRandomValues && (r = t.getRandomValues(new Uint8Array(31))); const a = []; for (var s = 0; s < e; s++) a.push(o(r, ++i).toString(16)); return a.join(''); } function c() { return s(16); } function u() { return s(32); } }, 7056: (e, t, r) => { r.d(t, { Bq: () => n, Hb: () => o, oD: () => i }); const n = 'NRBA', i = 144e5, o = 18e5; }, 7894: (e, t, r) => { function n() { return Math.round(performance.now()); } r.d(t, { z: () => n }); }, 7243: (e, t, r) => { r.d(t, { e: () => i }); var n = r(385); function i(e) { if (0 === (e || '').indexOf('data:')) return { protocol: 'data' }; try { const t = new URL(e, location.href), r = { port: t.port, hostname: t.hostname, pathname: t.pathname, search: t.search, protocol: t.protocol.slice(0, t.protocol.indexOf(':')), sameOrigin: t.protocol === n._A?.location?.protocol && t.host === n._A?.location?.host, }; return ( (r.port && '' !== r.port) || ('http:' === t.protocol && (r.port = '80'), 'https:' === t.protocol && (r.port = '443')), r.pathname && '' !== r.pathname ? r.pathname.startsWith('/') || (r.pathname = '/'.concat(r.pathname)) : (r.pathname = '/'), r ); } catch (e) { return {}; } } }, 50: (e, t, r) => { function n(e, t) { 'function' == typeof console.warn && (console.warn('New Relic: '.concat(e)), t && console.warn(t)); } r.d(t, { Z: () => n }); }, 2587: (e, t, r) => { r.d(t, { N: () => c, T: () => u }); var n = r(8325), i = r(5546), o = r(3325); const a = { stn: [o.D.sessionTrace], err: [o.D.jserrors, o.D.metrics], ins: [o.D.pageAction], spa: [o.D.spa], sr: [o.D.sessionReplay, o.D.sessionTrace], }, s = new Set(); function c(e, t) { const r = n.ee.get(t); e && 'object' == typeof e && (s.has(t) || Object.entries(e).forEach(e => { let [t, n] = e; a[t] ? a[t].forEach(e => { n ? (0, i.p)('feat-' + t, [], void 0, e, r) : (0, i.p)('block-' + t, [], void 0, e, r), (0, i.p)('rumresp-' + t, [Boolean(n)], void 0, e, r); }) : n && (0, i.p)('feat-' + t, [], void 0, void 0, r), (u[t] = Boolean(n)); }), Object.keys(a).forEach(e => { void 0 === u[e] && (a[e]?.forEach(t => (0, i.p)('rumresp-' + e, [!1], void 0, t, r)), (u[e] = !1)); }), s.add(t)); } const u = {}; }, 2210: (e, t, r) => { r.d(t, { X: () => i }); var n = Object.prototype.hasOwnProperty; function i(e, t, r) { if (n.call(e, t)) return e[t]; var i = r(); if (Object.defineProperty && Object.keys) try { return Object.defineProperty(e, t, { value: i, writable: !0, enumerable: !1 }), i; } catch (e) {} return (e[t] = i), i; } }, 1284: (e, t, r) => { r.d(t, { D: () => n }); const n = (e, t) => Object.entries(e || {}).map(e => { let [r, n] = e; return t(r, n); }); }, 4351: (e, t, r) => { r.d(t, { P: () => o }); var n = r(8325); const i = () => { const e = new WeakSet(); return (t, r) => { if ('object' == typeof r && null !== r) { if (e.has(r)) return; e.add(r); } return r; }; }; function o(e) { try { return JSON.stringify(e, i()); } catch (e) { try { n.ee.emit('internal-error', [e]); } catch (e) {} } } }, 3960: (e, t, r) => { r.d(t, { K: () => a, b: () => o }); var n = r(3239); function i() { return 'undefined' == typeof document || 'complete' === document.readyState; } function o(e, t) { if (i()) return e(); (0, n.bP)('load', e, t); } function a(e) { if (i()) return e(); (0, n.iz)('DOMContentLoaded', e); } }, 8632: (e, t, r) => { r.d(t, { EZ: () => u, Qy: () => c, ce: () => o, fP: () => a, gG: () => d, mF: () => s }); var n = r(7894), i = r(385); const o = { beacon: 'bam.nr-data.net', errorBeacon: 'bam.nr-data.net' }; function a() { return i._A.NREUM || (i._A.NREUM = {}), void 0 === i._A.newrelic && (i._A.newrelic = i._A.NREUM), i._A.NREUM; } function s() { let e = a(); return ( e.o || (e.o = { ST: i._A.setTimeout, SI: i._A.setImmediate, CT: i._A.clearTimeout, XHR: i._A.XMLHttpRequest, REQ: i._A.Request, EV: i._A.Event, PR: i._A.Promise, MO: i._A.MutationObserver, FETCH: i._A.fetch, }), e ); } function c(e, t, r) { let i = a(); const o = i.initializedAgents || {}, s = o[e] || {}; return ( Object.keys(s).length || (s.initializedAt = { ms: (0, n.z)(), date: new Date() }), (i.initializedAgents = { ...o, [e]: { ...s, [r]: t } }), i ); } function u(e, t) { a()[e] = t; } function d() { return ( (function () { let e = a(); const t = e.info || {}; e.info = { beacon: o.beacon, errorBeacon: o.errorBeacon, ...t }; })(), (function () { let e = a(); const t = e.init || {}; e.init = { ...t }; })(), s(), (function () { let e = a(); const t = e.loader_config || {}; e.loader_config = { ...t }; })(), a() ); } }, 7956: (e, t, r) => { r.d(t, { N: () => i }); var n = r(3239); function i(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], r = arguments.length > 2 ? arguments[2] : void 0, i = arguments.length > 3 ? arguments[3] : void 0; (0, n.iz)( 'visibilitychange', function () { if (t) return void ('hidden' === document.visibilityState && e()); e(document.visibilityState); }, r, i, ); } }, 1214: (e, t, r) => { r.d(t, { em: () => b, u5: () => D, QU: () => C, _L: () => I, Gm: () => H, Lg: () => L, BV: () => G, Kf: () => K, }); var n = r(8325), i = r(3117); const o = 'nr@original:'.concat(i.a); var a = Object.prototype.hasOwnProperty, s = !1; function c(e, t) { return ( e || (e = n.ee), (r.inPlace = function (e, t, n, i, o) { n || (n = ''); const a = '-' === n.charAt(0); for (let s = 0; s < t.length; s++) { const c = t[s], u = e[c]; d(u) || (e[c] = r(u, a ? c + n : n, i, c, o)); } }), (r.flag = o), r ); function r(t, r, n, s, c) { return d(t) ? t : (r || (r = ''), (nrWrapper[o] = t), (function (e, t, r) { if (Object.defineProperty && Object.keys) try { return ( Object.keys(e).forEach(function (r) { Object.defineProperty(t, r, { get: function () { return e[r]; }, set: function (t) { return (e[r] = t), t; }, }); }), t ); } catch (e) { u([e], r); } for (var n in e) a.call(e, n) && (t[n] = e[n]); })(t, nrWrapper, e), nrWrapper); function nrWrapper() { var o, a, d, l; try { (a = this), (o = [...arguments]), (d = 'function' == typeof n ? n(o, a) : n || {}); } catch (t) { u([t, '', [o, a, s], d], e); } i(r + 'start', [o, a, s], d, c); try { return (l = t.apply(a, o)); } catch (e) { throw (i(r + 'err', [o, a, e], d, c), e); } finally { i(r + 'end', [o, a, l], d, c); } } } function i(r, n, i, o) { if (!s || t) { var a = s; s = !0; try { e.emit(r, n, i, t, o); } catch (t) { u([t, r, n, i], e); } s = a; } } } function u(e, t) { t || (t = n.ee); try { t.emit('internal-error', e); } catch (e) {} } function d(e) { return !(e && 'function' == typeof e && e.apply && !e[o]); } var l = r(2210), f = r(385); const h = {}, p = f._A.XMLHttpRequest, g = 'addEventListener', m = 'removeEventListener', v = 'nr@wrapped:'.concat(n.A); function b(e) { var t = (function (e) { return (e || n.ee).get('events'); })(e); if (h[t.debugId]++) return t; h[t.debugId] = 1; var r = c(t, !0); function i(e) { r.inPlace(e, [g, m], '-', o); } function o(e, t) { return e[1]; } return ( 'getPrototypeOf' in Object && (f.il && y(document, i), y(f._A, i), y(p.prototype, i)), t.on(g + '-start', function (e, t) { var n = e[1]; if (null !== n && ('function' == typeof n || 'object' == typeof n)) { var i = (0, l.X)(n, v, function () { var e = { object: function () { if ('function' != typeof n.handleEvent) return; return n.handleEvent.apply(n, arguments); }, function: n, }[typeof n]; return e ? r(e, 'fn-', null, e.name || 'anonymous') : n; }); this.wrapped = e[1] = i; } }), t.on(m + '-start', function (e) { e[1] = this.wrapped || e[1]; }), t ); } function y(e, t) { let r = e; for (; 'object' == typeof r && !Object.prototype.hasOwnProperty.call(r, g); ) r = Object.getPrototypeOf(r); for (var n = arguments.length, i = new Array(n > 2 ? n - 2 : 0), o = 2; o < n; o++) i[o - 2] = arguments[o]; r && t(r, ...i); } var A = 'fetch-', w = A + 'body-', x = ['arrayBuffer', 'blob', 'json', 'text', 'formData'], E = f._A.Request, _ = f._A.Response, T = 'prototype'; const S = {}; function D(e) { const t = (function (e) { return (e || n.ee).get('fetch'); })(e); if (!(E && _ && f._A.fetch)) return t; if (S[t.debugId]++) return t; function r(e, r, i) { var o = e[r]; 'function' == typeof o && (e[r] = function () { var e, r = [...arguments], a = {}; t.emit(i + 'before-start', [r], a), a[n.A] && a[n.A].dt && (e = a[n.A].dt); var s = o.apply(this, r); return ( t.emit(i + 'start', [r, e], s), s.then( function (e) { return t.emit(i + 'end', [null, e], s), e; }, function (e) { throw (t.emit(i + 'end', [e], s), e); }, ) ); }); } return ( (S[t.debugId] = 1), x.forEach(e => { r(E[T], e, w), r(_[T], e, w); }), r(f._A, 'fetch', A), t.on(A + 'end', function (e, r) { var n = this; if (r) { var i = r.headers.get('content-length'); null !== i && (n.rxSize = i), t.emit(A + 'done', [null, r], n); } else t.emit(A + 'done', [e], n); }), t ); } const j = {}, N = ['pushState', 'replaceState']; function C(e) { const t = (function (e) { return (e || n.ee).get('history'); })(e); return !f.il || j[t.debugId]++ || ((j[t.debugId] = 1), c(t).inPlace(window.history, N, '-')), t; } var O = r(3239); const P = {}, R = ['appendChild', 'insertBefore', 'replaceChild']; function I(e) { const t = (function (e) { return (e || n.ee).get('jsonp'); })(e); if (!f.il || P[t.debugId]) return t; P[t.debugId] = !0; var r = c(t), i = /[?&](?:callback|cb)=([^&#]+)/, o = /(.*)\.([^.]+)/, a = /^(\w+)(\.|$)(.*)$/; function s(e, t) { if (!e) return t; const r = e.match(a), n = r[1]; return s(r[3], t[n]); } return ( r.inPlace(Node.prototype, R, 'dom-'), t.on('dom-start', function (e) { !(function (e) { if (!e || 'string' != typeof e.nodeName || 'script' !== e.nodeName.toLowerCase()) return; if ('function' != typeof e.addEventListener) return; var n = ((a = e.src), (c = a.match(i)), c ? c[1] : null); var a, c; if (!n) return; var u = (function (e) { var t = e.match(o); if (t && t.length >= 3) return { key: t[2], parent: s(t[1], window) }; return { key: e, parent: window }; })(n); if ('function' != typeof u.parent[u.key]) return; var d = {}; function l() { t.emit('jsonp-end', [], d), e.removeEventListener('load', l, (0, O.m$)(!1)), e.removeEventListener('error', f, (0, O.m$)(!1)); } function f() { t.emit('jsonp-error', [], d), t.emit('jsonp-end', [], d), e.removeEventListener('load', l, (0, O.m$)(!1)), e.removeEventListener('error', f, (0, O.m$)(!1)); } r.inPlace(u.parent, [u.key], 'cb-', d), e.addEventListener('load', l, (0, O.m$)(!1)), e.addEventListener('error', f, (0, O.m$)(!1)), t.emit('new-jsonp', [e.src], d); })(e[0]); }), t ); } const k = {}; function H(e) { const t = (function (e) { return (e || n.ee).get('mutation'); })(e); if (!f.il || k[t.debugId]) return t; k[t.debugId] = !0; var r = c(t), i = f._A.MutationObserver; return ( i && ((window.MutationObserver = function (e) { return this instanceof i ? new i(r(e, 'fn-')) : i.apply(this, arguments); }), (MutationObserver.prototype = i.prototype)), t ); } const z = {}; function L(e) { const t = (function (e) { return (e || n.ee).get('promise'); })(e); if (z[t.debugId]) return t; z[t.debugId] = !0; var r = t.context, i = c(t), a = f._A.Promise; return ( a && (function () { function e(r) { var n = t.context(), o = i(r, 'executor-', n, null, !1); const s = Reflect.construct(a, [o], e); return ( (t.context(s).getCtx = function () { return n; }), s ); } (f._A.Promise = e), Object.defineProperty(e, 'name', { value: 'Promise' }), (e.toString = function () { return a.toString(); }), Object.setPrototypeOf(e, a), ['all', 'race'].forEach(function (r) { const n = a[r]; e[r] = function (e) { let i = !1; [...(e || [])].forEach(e => { this.resolve(e).then(a('all' === r), a(!1)); }); const o = n.apply(this, arguments); return o; function a(e) { return function () { t.emit('propagate', [null, !i], o, !1, !1), (i = i || !e); }; } }; }), ['resolve', 'reject'].forEach(function (r) { const n = a[r]; e[r] = function (e) { const r = n.apply(this, arguments); return e !== r && t.emit('propagate', [e, !0], r, !1, !1), r; }; }), (e.prototype = a.prototype); const n = a.prototype.then; (a.prototype.then = function () { var e = this, o = r(e); o.promise = e; for (var a = arguments.length, s = new Array(a), c = 0; c < a; c++) s[c] = arguments[c]; (s[0] = i(s[0], 'cb-', o, null, !1)), (s[1] = i(s[1], 'cb-', o, null, !1)); const u = n.apply(this, s); return (o.nextPromise = u), t.emit('propagate', [e, !0], u, !1, !1), u; }), (a.prototype.then[o] = n), t.on('executor-start', function (e) { (e[0] = i(e[0], 'resolve-', this, null, !1)), (e[1] = i(e[1], 'resolve-', this, null, !1)); }), t.on('executor-err', function (e, t, r) { e[1](r); }), t.on('cb-end', function (e, r, n) { t.emit('propagate', [n, !0], this.nextPromise, !1, !1); }), t.on('propagate', function (e, r, n) { (this.getCtx && !r) || (this.getCtx = function () { if (e instanceof Promise) var r = t.context(e); return r && r.getCtx ? r.getCtx() : this; }); }); })(), t ); } const M = {}, F = 'setTimeout', B = 'setInterval', U = 'clearTimeout', Z = '-start', V = '-', q = [F, 'setImmediate', B, U, 'clearImmediate']; function G(e) { const t = (function (e) { return (e || n.ee).get('timer'); })(e); if (M[t.debugId]++) return t; M[t.debugId] = 1; var r = c(t); return ( r.inPlace(f._A, q.slice(0, 2), F + V), r.inPlace(f._A, q.slice(2, 3), B + V), r.inPlace(f._A, q.slice(3), U + V), t.on(B + Z, function (e, t, n) { e[0] = r(e[0], 'fn-', null, n); }), t.on(F + Z, function (e, t, n) { (this.method = n), (this.timerDuration = isNaN(e[1]) ? 0 : +e[1]), (e[0] = r(e[0], 'fn-', this, n)); }), t ); } var W = r(50); const X = {}, Q = ['open', 'send']; function K(e) { var t = e || n.ee; const r = (function (e) { return (e || n.ee).get('xhr'); })(t); if (X[r.debugId]++) return r; (X[r.debugId] = 1), b(t); var i = c(r), o = f._A.XMLHttpRequest, a = f._A.MutationObserver, s = f._A.Promise, u = f._A.setInterval, d = 'readystatechange', l = ['onload', 'onerror', 'onabort', 'onloadstart', 'onloadend', 'onprogress', 'ontimeout'], h = [], p = (f._A.XMLHttpRequest = function (e) { const t = new o(e), n = r.context(t); try { r.emit('new-xhr', [t], n), t.addEventListener( d, ((a = n), function () { var e = this; e.readyState > 3 && !a.resolved && ((a.resolved = !0), r.emit('xhr-resolved', [], e)), i.inPlace(e, l, 'fn-', w); }), (0, O.m$)(!1), ); } catch (e) { (0, W.Z)('An error occurred while intercepting XHR', e); try { r.emit('internal-error', [e]); } catch (e) {} } var a; return t; }); function g(e, t) { i.inPlace(t, ['onreadystatechange'], 'fn-', w); } if ( ((function (e, t) { for (var r in e) t[r] = e[r]; })(o, p), (p.prototype = o.prototype), i.inPlace(p.prototype, Q, '-xhr-', w), r.on('send-xhr-start', function (e, t) { g(e, t), (function (e) { h.push(e), a && (m ? m.then(A) : u ? u(A) : ((v = -v), (y.data = v))); })(t); }), r.on('open-xhr-start', g), a) ) { var m = s && s.resolve(); if (!u && !s) { var v = 1, y = document.createTextNode(v); new a(A).observe(y, { characterData: !0 }); } } else t.on('fn-end', function (e) { (e[0] && e[0].type === d) || A(); }); function A() { for (var e = 0; e < h.length; e++) g(0, h[e]); h.length && (h = []); } function w(e, t) { return t; } return r; } }, 7825: (e, t, r) => { r.d(t, { t: () => n }); const n = r(3325).D.ajax; }, 6660: (e, t, r) => { r.d(t, { t: () => n }); const n = r(3325).D.jserrors; }, 3081: (e, t, r) => { r.d(t, { gF: () => o, mY: () => i, t9: () => n, vz: () => s, xS: () => a }); const n = r(3325).D.metrics, i = 'sm', o = 'cm', a = 'storeSupportabilityMetrics', s = 'storeEventMetrics'; }, 4649: (e, t, r) => { r.d(t, { t: () => n }); const n = r(3325).D.pageAction; }, 7633: (e, t, r) => { r.d(t, { t: () => n }); const n = r(3325).D.pageViewEvent; }, 9251: (e, t, r) => { r.d(t, { t: () => n }); const n = r(3325).D.pageViewTiming; }, 7144: (e, t, r) => { r.d(t, { t: () => n }); const n = r(3325).D.sessionReplay; }, 3614: (e, t, r) => { r.d(t, { BST_RESOURCE: () => i, END: () => s, FEATURE_NAME: () => n, FN_END: () => u, FN_START: () => c, PUSH_STATE: () => d, RESOURCE: () => o, START: () => a, }); const n = r(3325).D.sessionTrace, i = 'bstResource', o = 'resource', a = '-start', s = '-end', c = 'fn' + a, u = 'fn' + s, d = 'pushState'; }, 7836: (e, t, r) => { r.d(t, { BODY: () => x, CB_END: () => E, CB_START: () => u, END: () => w, FEATURE_NAME: () => i, FETCH: () => T, FETCH_BODY: () => v, FETCH_DONE: () => m, FETCH_START: () => g, FN_END: () => c, FN_START: () => s, INTERACTION: () => f, INTERACTION_API: () => d, INTERACTION_EVENTS: () => o, JSONP_END: () => b, JSONP_NODE: () => p, JS_TIME: () => _, MAX_TIMER_BUDGET: () => a, REMAINING: () => l, SPA_NODE: () => h, START: () => A, originalSetTimeout: () => y, }); var n = r(234); const i = r(3325).D.spa, o = ['click', 'submit', 'keypress', 'keydown', 'keyup', 'change'], a = 999, s = 'fn-start', c = 'fn-end', u = 'cb-start', d = 'api-ixn-', l = 'remaining', f = 'interaction', h = 'spaNode', p = 'jsonpNode', g = 'fetch-start', m = 'fetch-done', v = 'fetch-body-', b = 'jsonp-end', y = n.Yu.ST, A = '-start', w = '-end', x = '-body', E = 'cb' + w, _ = 'jsTime', T = 'fetch'; }, 5938: (e, t, r) => { r.d(t, { W: () => i }); var n = r(8325); class i { constructor(e, t, r) { (this.agentIdentifier = e), (this.aggregator = t), (this.ee = n.ee.get(e)), (this.featureName = r), (this.blocked = !1); } } }, 7530: (e, t, r) => { r.d(t, { j: () => b }); var n = r(3325), i = r(234), o = r(5546), a = r(8325), s = r(7894), c = r(8e3), u = r(3960), d = r(385), l = r(50), f = r(3081), h = r(8632); function p() { const e = (0, h.gG)(); [ 'setErrorHandler', 'finished', 'addToTrace', 'addRelease', 'addPageAction', 'setCurrentRouteName', 'setPageViewName', 'setCustomAttribute', 'interaction', 'noticeError', 'setUserId', 'setApplicationVersion', 'start', ].forEach(t => { e[t] = function () { for (var r = arguments.length, n = new Array(r), i = 0; i < r; i++) n[i] = arguments[i]; return (function (t) { for (var r = arguments.length, n = new Array(r > 1 ? r - 1 : 0), i = 1; i < r; i++) n[i - 1] = arguments[i]; let o = []; return ( Object.values(e.initializedAgents).forEach(e => { e.exposed && e.api[t] && o.push(e.api[t](...n)); }), o.length > 1 ? o : o[0] ); })(t, ...n); }; }); } var g = r(2587); const m = e => { const t = e.startsWith('http'); (e += '/'), (r.p = t ? e : 'https://' + e); }; let v = !1; function b(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, b = arguments.length > 2 ? arguments[2] : void 0, y = arguments.length > 3 ? arguments[3] : void 0, { init: A, info: w, loader_config: x, runtime: E = { loaderType: b }, exposed: _ = !0 } = t; const T = (0, h.gG)(); w || ((A = T.init), (w = T.info), (x = T.loader_config)), (0, i.Dg)(e, A || {}), (0, i.GE)(e, x || {}), (w.jsAttributes ??= {}), d.v6 && (w.jsAttributes.isWorker = !0), (0, i.CX)(e, w); const S = (0, i.P_)(e), D = [w.beacon, w.errorBeacon]; v || ((v = !0), S.proxy.assets && (m(S.proxy.assets), D.push(S.proxy.assets)), S.proxy.beacon && D.push(S.proxy.beacon)), (E.denyList = [...(S.ajax.deny_list || []), ...(S.ajax.block_internal ? D : [])]), (0, i.sU)(e, E), p(); const j = (function (e, t) { t || (0, c.R)(e, 'api'); const h = {}; var p = a.ee.get(e), g = p.get('tracer'), m = 'api-', v = m + 'ixn-'; function b(t, r, n, o) { const a = (0, i.C5)(e); return ( null === r ? delete a.jsAttributes[t] : (0, i.CX)(e, { ...a, jsAttributes: { ...a.jsAttributes, [t]: r } }), w(m, n, !0, o || null === r ? 'session' : void 0)(t, r) ); } function y() {} ['setErrorHandler', 'finished', 'addToTrace', 'addRelease'].forEach(e => { h[e] = w(m, e, !0, 'api'); }), (h.addPageAction = w(m, 'addPageAction', !0, n.D.pageAction)), (h.setCurrentRouteName = w(m, 'routeName', !0, n.D.spa)), (h.setPageViewName = function (t, r) { if ('string' == typeof t) return ( '/' !== t.charAt(0) && (t = '/' + t), ((0, i.OP)(e).customTransaction = (r || 'http://custom.transaction') + t), w(m, 'setPageViewName', !0)() ); }), (h.setCustomAttribute = function (e, t) { let r = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; if ('string' == typeof e) { if (['string', 'number', 'boolean'].includes(typeof t) || null === t) return b(e, t, 'setCustomAttribute', r); (0, l.Z)( 'Failed to execute setCustomAttribute.\nNon-null value must be a string, number or boolean type, but a type of <'.concat( typeof t, '> was provided.', ), ); } else (0, l.Z)( 'Failed to execute setCustomAttribute.\nName must be a string type, but a type of <'.concat( typeof e, '> was provided.', ), ); }), (h.setUserId = function (e) { if ('string' == typeof e || null === e) return b('enduser.id', e, 'setUserId', !0); (0, l.Z)( 'Failed to execute setUserId.\nNon-null value must be a string type, but a type of <'.concat( typeof e, '> was provided.', ), ); }), (h.setApplicationVersion = function (e) { if ('string' == typeof e || null === e) return b('application.version', e, 'setApplicationVersion', !1); (0, l.Z)( 'Failed to execute setApplicationVersion. Expected <String | null>, but got <'.concat(typeof e, '>.'), ); }), (h.start = e => { try { const t = e ? 'defined' : 'undefined'; (0, o.p)(f.xS, ['API/start/'.concat(t, '/called')], void 0, n.D.metrics, p); const r = Object.values(n.D); if (void 0 === e) e = r; else { if ((e = Array.isArray(e) && e.length ? e : [e]).some(e => !r.includes(e))) return (0, l.Z)('Invalid feature name supplied. Acceptable feature names are: '.concat(r)); e.includes(n.D.pageViewEvent) || e.push(n.D.pageViewEvent); } e.forEach(e => { p.emit(''.concat(e, '-opt-in')); }); } catch (e) { (0, l.Z)('An unexpected issue occurred', e); } }), (h.interaction = function () { return new y().get(); }); var A = (y.prototype = { createTracer: function (e, t) { var r = {}, i = this, a = 'function' == typeof t; return ( (0, o.p)(v + 'tracer', [(0, s.z)(), e, r], i, n.D.spa, p), function () { if ((g.emit((a ? '' : 'no-') + 'fn-start', [(0, s.z)(), i, a], r), a)) try { return t.apply(this, arguments); } catch (e) { throw (g.emit('fn-err', [arguments, this, e], r), e); } finally { g.emit('fn-end', [(0, s.z)()], r); } } ); }, }); function w(e, t, r, i) { return function () { return ( (0, o.p)(f.xS, ['API/' + t + '/called'], void 0, n.D.metrics, p), i && (0, o.p)(e + t, [(0, s.z)(), ...arguments], r ? null : this, i, p), r ? void 0 : this ); }; } function x() { r.e(111) .then(r.bind(r, 7438)) .then(t => { let { setAPI: r } = t; r(e), (0, c.L)(e, 'api'); }) .catch(() => (0, l.Z)('Downloading runtime APIs failed...')); } return ( ['actionText', 'setName', 'setAttribute', 'save', 'ignore', 'onEnd', 'getContext', 'end', 'get'].forEach( e => { A[e] = w(v, e, void 0, n.D.spa); }, ), (h.noticeError = function (e, t) { 'string' == typeof e && (e = new Error(e)), (0, o.p)(f.xS, ['API/noticeError/called'], void 0, n.D.metrics, p), (0, o.p)('err', [e, (0, s.z)(), !1, t], void 0, n.D.jserrors, p); }), d.il ? (0, u.b)(() => x(), !0) : x(), h ); })(e, y); return (0, h.Qy)(e, j, 'api'), (0, h.Qy)(e, _, 'exposed'), (0, h.EZ)('activatedFeatures', g.T), j; } }, 3325: (e, t, r) => { r.d(t, { D: () => n, p: () => i }); const n = { ajax: 'ajax', jserrors: 'jserrors', metrics: 'metrics', pageAction: 'page_action', pageViewEvent: 'page_view_event', pageViewTiming: 'page_view_timing', sessionReplay: 'session_replay', sessionTrace: 'session_trace', spa: 'spa', }, i = { [n.pageViewEvent]: 1, [n.pageViewTiming]: 2, [n.metrics]: 3, [n.jserrors]: 4, [n.ajax]: 5, [n.sessionTrace]: 6, [n.pageAction]: 7, [n.spa]: 8, [n.sessionReplay]: 9, }; }, }, n = {}; function i(e) { var t = n[e]; if (void 0 !== t) return t.exports; var o = (n[e] = { exports: {} }); return r[e](o, o.exports, i), o.exports; } (i.m = r), (i.d = (e, t) => { for (var r in t) i.o(t, r) && !i.o(e, r) && Object.defineProperty(e, r, { enumerable: !0, get: t[r] }); }), (i.f = {}), (i.e = e => Promise.all(Object.keys(i.f).reduce((t, r) => (i.f[r](e, t), t), []))), (i.u = e => ({ 111: 'nr-spa', 164: 'nr-spa-compressor', 433: 'nr-spa-recorder' }[e] + '-1.246.1.min.js')), (i.o = (e, t) => Object.prototype.hasOwnProperty.call(e, t)), (e = {}), (t = 'NRBA-1.246.1.PROD:'), (i.l = (r, n, o, a) => { if (e[r]) e[r].push(n); else { var s, c; if (void 0 !== o) for (var u = document.getElementsByTagName('script'), d = 0; d < u.length; d++) { var l = u[d]; if (l.getAttribute('src') == r || l.getAttribute('data-webpack') == t + o) { s = l; break; } } s || ((c = !0), ((s = document.createElement('script')).charset = 'utf-8'), (s.timeout = 120), i.nc && s.setAttribute('nonce', i.nc), s.setAttribute('data-webpack', t + o), (s.src = r)), (e[r] = [n]); var f = (t, n) => { (s.onerror = s.onload = null), clearTimeout(h); var i = e[r]; if ((delete e[r], s.parentNode && s.parentNode.removeChild(s), i && i.forEach(e => e(n)), t)) return t(n); }, h = setTimeout(f.bind(null, void 0, { type: 'timeout', target: s }), 12e4); (s.onerror = f.bind(null, s.onerror)), (s.onload = f.bind(null, s.onload)), c && document.head.appendChild(s); } }), (i.r = e => { 'undefined' != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, { value: 'Module' }), Object.defineProperty(e, '__esModule', { value: !0 }); }), (i.p = 'https://js-agent.newrelic.com/'), (() => { var e = { 801: 0, 92: 0 }; i.f.j = (t, r) => { var n = i.o(e, t) ? e[t] : void 0; if (0 !== n) if (n) r.push(n[2]); else { var o = new Promise((r, i) => (n = e[t] = [r, i])); r.push((n[2] = o)); var a = i.p + i.u(t), s = new Error(); i.l( a, r => { if (i.o(e, t) && (0 !== (n = e[t]) && (e[t] = void 0), n)) { var o = r && ('load' === r.type ? 'missing' : r.type), a = r && r.target && r.target.src; (s.message = 'Loading chunk ' + t + ' failed.\n(' + o + ': ' + a + ')'), (s.name = 'ChunkLoadError'), (s.type = o), (s.request = a), n[1](s); } }, 'chunk-' + t, t, ); } }; var t = (t, r) => { var n, o, [a, s, c] = r, u = 0; if (a.some(t => 0 !== e[t])) { for (n in s) i.o(s, n) && (i.m[n] = s[n]); if (c) c(i); } for (t && t(r); u < a.length; u++) (o = a[u]), i.o(e, o) && e[o] && e[o][0](), (e[o] = 0); }, r = (self['webpackChunk:NRBA-1.246.1.PROD'] = self['webpackChunk:NRBA-1.246.1.PROD'] || []); r.forEach(t.bind(null, 0)), (r.push = t.bind(null, r.push.bind(r))); })(), (() => { var e = i(50); class t { addPageAction(t, r) { (0, e.Z)('Call to agent api addPageAction failed. The page action feature is not currently initialized.'); } setPageViewName(t, r) { (0, e.Z)('Call to agent api setPageViewName failed. The page view feature is not currently initialized.'); } setCustomAttribute(t, r, n) { (0, e.Z)('Call to agent api setCustomAttribute failed. The js errors feature is not currently initialized.'); } noticeError(t, r) { (0, e.Z)('Call to agent api noticeError failed. The js errors feature is not currently initialized.'); } setUserId(t) { (0, e.Z)('Call to agent api setUserId failed. The js errors feature is not currently initialized.'); } setApplicationVersion(t) { (0, e.Z)('Call to agent api setApplicationVersion failed. The agent is not currently initialized.'); } setErrorHandler(t) { (0, e.Z)('Call to agent api setErrorHandler failed. The js errors feature is not currently initialized.'); } finished(t) { (0, e.Z)('Call to agent api finished failed. The page action feature is not currently initialized.'); } addRelease(t, r) { (0, e.Z)('Call to agent api addRelease failed. The js errors feature is not currently initialized.'); } start(t) { (0, e.Z)('Call to agent api addRelease failed. The agent is not currently initialized.'); } } var r = i(3325), n = i(234); const o = Object.values(r.D); function a(e) { const t = {}; return ( o.forEach(r => { t[r] = (function (e, t) { return !1 !== (0, n.Mt)(t, ''.concat(e, '.enabled')); })(r, e); }), t ); } var s = i(7530); var c = i(8e3), u = i(5938), d = i(3960), l = i(385); class f extends u.W { constructor(e, t, r) { let i = !(arguments.length > 3 && void 0 !== arguments[3]) || arguments[3]; super(e, t, r), (this.auto = i), (this.abortHandler = void 0), (this.featAggregate = void 0), (this.onAggregateImported = void 0), !1 === (0, n.Mt)(this.agentIdentifier, ''.concat(this.featureName, '.autoStart')) && (this.auto = !1), this.auto && (0, c.R)(e, r); } importAggregator() { let t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; if (this.featAggregate) return; if (!this.auto) return void this.ee.on(''.concat(this.featureName, '-opt-in'), () => { (0, c.R)(this.agentIdentifier, this.featureName), (this.auto = !0), this.importAggregator(); }); const r = l.il && !0 === (0, n.Mt)(this.agentIdentifier, 'privacy.cookies_enabled'); let o; this.onAggregateImported = new Promise(e => { o = e; }); const a = async () => { let n; try { if (r) { const { setupAgentSession: e } = await i.e(111).then(i.bind(i, 3228)); n = e(this.agentIdentifier); } } catch (t) { (0, e.Z)( 'A problem occurred when starting up session manager. This page will not start or extend any session.', t, ); } try { if (!this.shouldImportAgg(this.featureName, n)) return (0, c.L)(this.agentIdentifier, this.featureName), void o(!1); const { lazyFeatureLoader: e } = await i.e(111).then(i.bind(i, 8582)), { Aggregate: r } = await e(this.featureName, 'aggregate'); (this.featAggregate = new r(this.agentIdentifier, this.aggregator, t)), o(!0); } catch (t) { (0, e.Z)('Downloading and initializing '.concat(this.featureName, ' failed...'), t), this.abortHandler?.(), (0, c.L)(this.agentIdentifier, this.featureName), o(!1); } }; l.il ? (0, d.b)(() => a(), !0) : a(); } shouldImportAgg(e, t) { return ( e !== r.D.sessionReplay || (!!n.Yu.MO && !1 !== (0, n.Mt)(this.agentIdentifier, 'session_trace.enabled') && (!!t?.isNew || !!t?.state.sessionReplayMode)) ); } } var h = i(7633); class p extends f { static featureName = h.t; constructor(e, t) { let r = !(arguments.length > 2 && void 0 !== arguments[2]) || arguments[2]; super(e, t, h.t, r), this.importAggregator(); } } var g = i(1117), m = i(1284); class v extends g.w { constructor(e) { super(e), (this.aggregatedData = {}); } store(e, t, r, n, i) { var o = this.getBucket(e, t, r, i); return ( (o.metrics = (function (e, t) { t || (t = { count: 0 }); return ( (t.count += 1), (0, m.D)(e, function (e, r) { t[e] = b(r, t[e]); }), t ); })(n, o.metrics)), o ); } merge(e, t, r, n, i) { var o = this.getBucket(e, t, n, i); if (o.metrics) { var a = o.metrics; (a.count += r.count), (0, m.D)(r, function (e, t) { if ('count' !== e) { var n = a[e], i = r[e]; i && !i.c ? (a[e] = b(i.t, n)) : (a[e] = (function (e, t) { if (!t) return e; t.c || (t = y(t.t)); return ( (t.min = Math.min(e.min, t.min)), (t.max = Math.max(e.max, t.max)), (t.t += e.t), (t.sos += e.sos), (t.c += e.c), t ); })(i, a[e])); } }); } else o.metrics = r; } storeMetric(e, t, r, n) { var i = this.getBucket(e, t, r); return (i.stats = b(n, i.stats)), i; } getBucket(e, t, r, n) { this.aggregatedData[e] || (this.aggregatedData[e] = {}); var i = this.aggregatedData[e][t]; return i || ((i = this.aggregatedData[e][t] = { params: r || {} }), n && (i.custom = n)), i; } get(e, t) { return t ? this.aggregatedData[e] && this.aggregatedData[e][t] : this.aggregatedData[e]; } take(e) { for (var t = {}, r = '', n = !1, i = 0; i < e.length; i++) (t[(r = e[i])] = A(this.aggregatedData[r])), t[r].length && (n = !0), delete this.aggregatedData[r]; return n ? t : null; } } function b(e, t) { return null == e ? (function (e) { e ? e.c++ : (e = { c: 1 }); return e; })(t) : t ? (t.c || (t = y(t.t)), (t.c += 1), (t.t += e), (t.sos += e * e), e > t.max && (t.max = e), e < t.min && (t.min = e), t) : { t: e }; } function y(e) { return { t: e, min: e, max: e, sos: e * e, c: 1 }; } function A(e) { return 'object' != typeof e ? [] : (0, m.D)(e, w); } function w(e, t) { return t; } var x = i(8632), E = i(4402), _ = i(4351); var T = i(5546), S = i(7956), D = i(3239), j = i(7894), N = i(9251); class C extends f { static featureName = N.t; constructor(e, t) { let r = !(arguments.length > 2 && void 0 !== arguments[2]) || arguments[2]; super(e, t, N.t, r), l.il && ((0, S.N)(() => (0, T.p)('docHidden', [(0, j.z)()], void 0, N.t, this.ee), !0), (0, D.bP)('pagehide', () => (0, T.p)('winPagehide', [(0, j.z)()], void 0, N.t, this.ee)), this.importAggregator()); } } var O = i(3081); class P extends f { static featureName = O.t9; constructor(e, t) { let r = !(arguments.length > 2 && void 0 !== arguments[2]) || arguments[2]; super(e, t, O.t9, r), this.importAggregator(); } } var R = i(6660); class I { constructor(e, t, r, n) { (this.name = 'UncaughtError'), (this.message = e), (this.sourceURL = t), (this.line = r), (this.column = n); } } class k extends f { static featureName = R.t; #e = new Set(); constructor(e, t) { let n = !(arguments.length > 2 && void 0 !== arguments[2]) || arguments[2]; super(e, t, R.t, n); try { this.removeOnAbort = new AbortController(); } catch (e) {} this.ee.on('fn-err', (e, t, n) => { this.abortHandler && !this.#e.has(n) && (this.#e.add(n), (0, T.p)('err', [this.#t(n), (0, j.z)()], void 0, r.D.jserrors, this.ee)); }), this.ee.on('internal-error', e => { this.abortHandler && (0, T.p)('ierr', [this.#t(e), (0, j.z)(), !0], void 0, r.D.jserrors, this.ee); }), l._A.addEventListener( 'unhandledrejection', e => { this.abortHandler && (0, T.p)( 'err', [this.#r(e), (0, j.z)(), !1, { unhandledPromiseRejection: 1 }], void 0, r.D.jserrors, this.ee, ); }, (0, D.m$)(!1, this.removeOnAbort?.signal), ), l._A.addEventListener( 'error', e => { this.abortHandler && (this.#e.has(e.error) ? this.#e.delete(e.error) : (0, T.p)('err', [this.#n(e), (0, j.z)()], void 0, r.D.jserrors, this.ee)); }, (0, D.m$)(!1, this.removeOnAbort?.signal), ), (this.abortHandler = this.#i), this.importAggregator(); } #i() { this.removeOnAbort?.abort(), this.#e.clear(), (this.abortHandler = void 0); } #t(e) { return e instanceof Error ? e : void 0 !== e?.message ? new I(e.message, e.filename || e.sourceURL, e.lineno || e.line, e.colno || e.col) : new I('string' == typeof e ? e : (0, _.P)(e)); } #r(e) { let t = 'Unhandled Promise Rejection: '; if (e?.reason instanceof Error) try { return (e.reason.message = t + e.reason.message), e.reason; } catch (t) { return e.reason; } if (void 0 === e.reason) return new I(t); const r = this.#t(e.reason); return (r.message = t + r.message), r; } #n(e) { return e.error instanceof Error ? e.error : new I(e.message, e.filename, e.lineno, e.colno); } } var H = i(2210); let z = 1; const L = 'nr@id'; function M(e) { const t = typeof e; return !e || ('object' !== t && 'function' !== t) ? -1 : e === l._A ? 0 : (0, H.X)(e, L, function () { return z++; }); } function F(e) { if ('string' == typeof e && e.length) return e.length; if ('object' == typeof e) { if ('undefined' != typeof ArrayBuffer && e instanceof ArrayBuffer && e.byteLength) return e.byteLength; if ('undefined' != typeof Blob && e instanceof Blob && e.size) return e.size; if (!('undefined' != typeof FormData && e instanceof FormData)) try { return (0, _.P)(e).length; } catch (e) { return; } } } var B = i(1214), U = i(7243); class Z { constructor(e) { this.agentIdentifier = e; } generateTracePayload(e) { if (!this.shouldGenerateTrace(e)) return null; var t = (0, n.DL)(this.agentIdentifier); if (!t) return null; var r = (t.accountID || '').toString() || null, i = (t.agentID || '').toString() || null, o = (t.trustKey || '').toString() || null; if (!r || !i) return null; var a = (0, E.M)(), s = (0, E.Ht)(), c = Date.now(), u = { spanId: a, traceId: s, timestamp: c }; return ( (e.sameOrigin || (this.isAllowedOrigin(e) && this.useTraceContextHeadersForCors())) && ((u.traceContextParentHeader = this.generateTraceContextParentHeader(a, s)), (u.traceContextStateHeader = this.generateTraceContextStateHeader(a, c, r, i, o))), ((e.sameOrigin && !this.excludeNewrelicHeader()) || (!e.sameOrigin && this.isAllowedOrigin(e) && this.useNewrelicHeaderForCors())) && (u.newrelicHeader = this.generateTraceHeader(a, s, c, r, i, o)), u ); } generateTraceContextParentHeader(e, t) { return '00-' + t + '-' + e + '-01'; } generateTraceContextStateHeader(e, t, r, n, i) { return i + '@nr=0-1-' + r + '-' + n + '-' + e + '----' + t; } generateTraceHeader(e, t, r, n, i, o) { if (!('function' == typeof l._A?.btoa)) return null; var a = { v: [0, 1], d: { ty: 'Browser', ac: n, ap: i, id: e, tr: t, ti: r } }; return o && n !== o && (a.d.tk = o), btoa((0, _.P)(a)); } shouldGenerateTrace(e) { return this.isDtEnabled() && this.isAllowedOrigin(e); } isAllowedOrigin(e) { var t = !1, r = {}; if ( ((0, n.Mt)(this.agentIdentifier, 'distributed_tracing') && (r = (0, n.P_)(this.agentIdentifier).distributed_tracing), e.sameOrigin) ) t = !0; else if (r.allowed_origins instanceof Array) for (var i = 0; i < r.allowed_origins.length; i++) { var o = (0, U.e)(r.allowed_origins[i]); if (e.hostname === o.hostname && e.protocol === o.protocol && e.port === o.port) { t = !0; break; } } return t; } isDtEnabled() { var e = (0, n.Mt)(this.agentIdentifier, 'distributed_tracing'); return !!e && !!e.enabled; } excludeNewrelicHeader() { var e = (0, n.Mt)(this.agentIdentifier, 'distributed_tracing'); return !!e && !!e.exclude_newrelic_header; } useNewrelicHeaderForCors() { var e = (0, n.Mt)(this.agentIdentifier, 'distributed_tracing'); return !!e && !1 !== e.cors_use_newrelic_header; } useTraceContextHeadersForCors() { var e = (0, n.Mt)(this.agentIdentifier, 'distributed_tracing'); return !!e && !!e.cors_use_tracecontext_headers; } } var V = i(7825), q = ['load', 'error', 'abort', 'timeout'], G = q.length, W = n.Yu.REQ, X = n.Yu.XHR; class Q extends f { static featureName = V.t; constructor(e, t) { let i = !(arguments.length > 2 && void 0 !== arguments[2]) || arguments[2]; if ((super(e, t, V.t, i), (0, n.OP)(e).xhrWrappable)) { (this.dt = new Z(e)), (this.handler = (e, t, r, n) => (0, T.p)(e, t, r, n, this.ee)); try { const e = { xmlhttprequest: 'xhr', fetch: 'fetch', beacon: 'beacon' }; l._A?.performance?.getEntriesByType('resource').forEach(t => { if (t.initiatorType in e && 0 !== t.responseStatus) { const n = { status: t.responseStatus }, i = { rxSize: t.transferSize, duration: Math.floor(t.duration), cbTime: 0 }; K(n, t.name), this.handler('xhr', [n, i, t.startTime, t.responseEnd, e[t.initiatorType]], void 0, r.D.ajax); } }); } catch (e) {} (0, B.u5)(this.ee), (0, B.Kf)(this.ee), (function (e, t, i, o) { function a(e) { var t = this; (t.totalCbs = 0), (t.called = 0), (t.cbTime = 0), (t.end = x), (t.ended = !1), (t.xhrGuids = {}), (t.lastSize = null), (t.loadCaptureCalled = !1), (t.params = this.params || {}), (t.metrics = this.metrics || {}), e.addEventListener( 'load', function (r) { E(t, e); }, (0, D.m$)(!1), ), l.IF || e.addEventListener( 'progress', function (e) { t.lastSize = e.loaded; }, (0, D.m$)(!1), ); } function s(e) { (this.params = { method: e[0] }), K(this, e[1]), (this.metrics = {}); } function c(t, r) { var i = (0, n.DL)(e); i.xpid && this.sameOrigin && r.setRequestHeader('X-NewRelic-ID', i.xpid); var a = o.generateTracePayload(this.parsedOrigin); if (a) { var s = !1; a.newrelicHeader && (r.setRequestHeader('newrelic', a.newrelicHeader), (s = !0)), a.traceContextParentHeader && (r.setRequestHeader('traceparent', a.traceContextParentHeader), a.traceContextStateHeader && r.setRequestHeader('tracestate', a.traceContextStateHeader), (s = !0)), s && (this.dt = a); } } function u(e, r) { var n = this.metrics, i = e[0], o = this; if (n && i) { var a = F(i); a && (n.txSize = a); } (this.startTime = (0, j.z)()), (this.body = i), (this.listener = function (e) { try { 'abort' !== e.type || o.loadCaptureCalled || (o.params.aborted = !0), ('load' !== e.type || (o.called === o.totalCbs && (o.onloadCalled || 'function' != typeof r.onload) && 'function' == typeof o.end)) && o.end(r); } catch (e) { try { t.emit('internal-error', [e]); } catch (e) {} } }); for (var s = 0; s < G; s++) r.addEventListener(q[s], this.listener, (0, D.m$)(!1)); } function d(e, t, r) { (this.cbTime += e), t ? (this.onloadCalled = !0) : (this.called += 1), this.called !== this.totalCbs || (!this.onloadCalled && 'function' == typeof r.onload) || 'function' != typeof this.end || this.end(r); } function f(e, t) { var r = '' + M(e) + !!t; this.xhrGuids && !this.xhrGuids[r] && ((this.xhrGuids[r] = !0), (this.totalCbs += 1)); } function h(e, t) { var r = '' + M(e) + !!t; this.xhrGuids && this.xhrGuids[r] && (delete this.xhrGuids[r], (this.totalCbs -= 1)); } function p() { this.endTime = (0, j.z)(); } function g(e, r) { r instanceof X && 'load' === e[0] && t.emit('xhr-load-added', [e[1], e[2]], r); } function m(e, r) { r instanceof X && 'load' === e[0] && t.emit('xhr-load-removed', [e[1], e[2]], r); } function v(e, t, r) { t instanceof X && ('onload' === r && (this.onload = !0), ('load' === (e[0] && e[0].type) || this.onload) && (this.xhrCbStart = (0, j.z)())); } function b(e, r) { this.xhrCbStart && t.emit('xhr-cb-time', [(0, j.z)() - this.xhrCbStart, this.onload, r], r); } function y(e) { var t, r = e[1] || {}; if ( ('string' == typeof e[0] ? 0 === (t = e[0]).length && l.il && (t = '' + l._A.location.href) : e[0] && e[0].url ? (t = e[0].url) : l._A?.URL && e[0] && e[0] instanceof URL ? (t = e[0].href) : 'function' == typeof e[0].toString && (t = e[0].toString()), 'string' == typeof t && 0 !== t.length) ) { t && ((this.parsedOrigin = (0, U.e)(t)), (this.sameOrigin = this.parsedOrigin.sameOrigin)); var n = o.generateTracePayload(this.parsedOrigin); if (n && (n.newrelicHeader || n.traceContextParentHeader)) if (e[0] && e[0].headers) s(e[0].headers, n) && (this.dt = n); else { var i = {}; for (var a in r) i[a] = r[a]; (i.headers = new Headers(r.headers || {})), s(i.headers, n) && (this.dt = n), e.length > 1 ? (e[1] = i) : e.push(i); } } function s(e, t) { var r = !1; return ( t.newrelicHeader && (e.set('newrelic', t.newrelicHeader), (r = !0)), t.traceContextParentHeader && (e.set('traceparent', t.traceContextParentHeader), t.traceContextStateHeader && e.set('tracestate', t.traceContextStateHeader), (r = !0)), r ); } } function A(e, t) { (this.params = {}), (this.metrics = {}), (this.startTime = (0, j.z)()), (this.dt = t), e.length >= 1 && (this.target = e[0]), e.length >= 2 && (this.opts = e[1]); var r, n = this.opts || {}, i = this.target; 'string' == typeof i ? (r = i) : 'object' == typeof i && i instanceof W ? (r = i.url) : l._A?.URL && 'object' == typeof i && i instanceof URL && (r = i.href), K(this, r); var o = ('' + ((i && i instanceof W && i.method) || n.method || 'GET')).toUpperCase(); (this.params.method = o), (this.body = n.body), (this.txSize = F(n.body) || 0); } function w(e, t) { var n; (this.endTime = (0, j.z)()), this.params || (this.params = {}), (this.params.status = t ? t.status : 0), 'string' == typeof this.rxSize && this.rxSize.length > 0 && (n = +this.rxSize); var o = { txSize: this.txSize, rxSize: n, duration: (0, j.z)() - this.startTime }; i('xhr', [this.params, o, this.startTime, this.endTime, 'fetch'], this, r.D.ajax); } function x(e) { var t = this.params, n = this.metrics; if (!this.ended) { this.ended = !0; for (var o = 0; o < G; o++) e.removeEventListener(q[o], this.listener, !1); t.aborted || ((n.duration = (0, j.z)() - this.startTime), this.loadCaptureCalled || 4 !== e.readyState ? null == t.status && (t.status = 0) : E(this, e), (n.cbTime = this.cbTime), i('xhr', [t, n, this.startTime, this.endTime, 'xhr'], this, r.D.ajax)); } } function E(e, t) { e.params.status = t.status; var r = (function (e, t) { var r = e.responseType; return 'json' === r && null !== t ? t : 'arraybuffer' === r || 'blob' === r || 'json' === r ? F(e.response) : 'text' === r || '' === r || void 0 === r ? F(e.responseText) : void 0; })(t, e.lastSize); if ((r && (e.metrics.rxSize = r), e.sameOrigin)) { var n = t.getResponseHeader('X-NewRelic-App-Data'); n && (e.params.cat = n.split(', ').pop()); } e.loadCaptureCalled = !0; } t.on('new-xhr', a), t.on('open-xhr-start', s), t.on('open-xhr-end', c), t.on('send-xhr-start', u), t.on('xhr-cb-time', d), t.on('xhr-load-added', f), t.on('xhr-load-removed', h), t.on('xhr-resolved', p), t.on('addEventListener-end', g), t.on('removeEventListener-end', m), t.on('fn-end', b), t.on('fetch-before-start', y), t.on('fetch-start', A), t.on('fn-start', v), t.on('fetch-done', w); })(e, this.ee, this.handler, this.dt), this.importAggregator(); } } } function K(e, t) { var r = (0, U.e)(t), n = e.params || e; (n.hostname = r.hostname), (n.port = r.port), (n.protocol = r.protocol), (n.host = r.hostname + ':' + r.port), (n.pathname = r.pathname), (e.parsedOrigin = r), (e.sameOrigin = r.sameOrigin); } var Y = i(3614); const { BST_RESOURCE: J, RESOURCE: ee, START: te, END: re, FEATURE_NAME: ne, FN_END: ie, FN_START: oe, PUSH_STATE: ae, } = Y; var se = i(7144); class ce extends f { static featureName = se.t; constructor(e, t) { let r = !(arguments.length > 2 && void 0 !== arguments[2]) || arguments[2]; super(e, t, se.t, r), this.importAggregator(); } } var ue = i(7836); const { FEATURE_NAME: de, START: le, END: fe, BODY: he, CB_END: pe, JS_TIME: ge, FETCH: me, FN_START: ve, CB_START: be, FN_END: ye, } = ue; var Ae = i(4649); class we extends f { static featureName = Ae.t; constructor(e, t) { let r = !(arguments.length > 2 && void 0 !== arguments[2]) || arguments[2]; super(e, t, Ae.t, r), this.importAggregator(); } } new (class extends t { constructor(t) { let r = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : (0, E.ky)(16); super(), l._A ? ((this.agentIdentifier = r), (this.sharedAggregator = new v({ agentIdentifier: this.agentIdentifier })), (this.features = {}), (this.desiredFeatures = new Set(t.features || [])), this.desiredFeatures.add(p), Object.assign(this, (0, s.j)(this.agentIdentifier, t, t.loaderType || 'agent')), this.run()) : (0, e.Z)('Failed to initial the agent. Could not determine the runtime environment.'); } get config() { return { info: (0, n.C5)(this.agentIdentifier), init: (0, n.P_)(this.agentIdentifier), loader_config: (0, n.DL)(this.agentIdentifier), runtime: (0, n.OP)(this.agentIdentifier), }; } run() { const t = 'features'; try { const n = a(this.agentIdentifier), i = [...this.desiredFeatures]; i.sort((e, t) => r.p[e.featureName] - r.p[t.featureName]), i.forEach(t => { if (n[t.featureName] || t.featureName === r.D.pageViewEvent) { const i = (function (e) { switch (e) { case r.D.ajax: return [r.D.jserrors]; case r.D.sessionTrace: return [r.D.ajax, r.D.pageViewEvent]; case r.D.sessionReplay: return [r.D.sessionTrace]; case r.D.pageViewTiming: return [r.D.pageViewEvent]; default: return []; } })(t.featureName); i.every(e => n[e]) || (0, e.Z)( '' .concat(t.featureName, ' is enabled but one or more dependent features has been disabled (') .concat((0, _.P)(i), '). This may cause unintended consequences or missing data...'), ), (this.features[t.featureName] = new t(this.agentIdentifier, this.sharedAggregator)); } }), (0, x.Qy)(this.agentIdentifier, this.features, t); } catch (r) { (0, e.Z)('Failed to initialize all enabled instrument classes (agent aborted) -', r); for (const e in this.features) this.features[e].abortHandler?.(); const n = (0, x.fP)(); return ( delete n.initializedAgents[this.agentIdentifier]?.api, delete n.initializedAgents[this.agentIdentifier]?.[t], delete this.sharedAggregator, n.ee?.abort(), delete n.ee?.get(this.agentIdentifier), !1 ); } } addToTrace(t) { (0, e.Z)('Call to agent api addToTrace failed. The session trace feature is not currently initialized.'); } setCurrentRouteName(t) { (0, e.Z)('Call to agent api setCurrentRouteName failed. The spa feature is not currently initialized.'); } interaction() { (0, e.Z)('Call to agent api interaction failed. The spa feature is not currently initialized.'); } })({ features: [ Q, p, C, class extends f { static featureName = ne; constructor(e, t) { if ((super(e, t, ne, !(arguments.length > 2 && void 0 !== arguments[2]) || arguments[2]), !l.il)) return; const n = this.ee; let i; (0, B.QU)(n), (this.eventsEE = (0, B.em)(n)), this.eventsEE.on(oe, function (e, t) { this.bstStart = (0, j.z)(); }), this.eventsEE.on(ie, function (e, t) { (0, T.p)('bst', [e[0], t, this.bstStart, (0, j.z)()], void 0, r.D.sessionTrace, n); }), n.on(ae + te, function (e) { (this.time = (0, j.z)()), (this.startPath = location.pathname + location.hash); }), n.on(ae + re, function (e) { (0, T.p)('bstHist', [location.pathname + location.hash, this.startPath, this.time], void 0, r.D.sessionTrace, n); }); try { (i = new PerformanceObserver(e => { const t = e.getEntries(); (0, T.p)(J, [t], void 0, r.D.sessionTrace, n); })), i.observe({ type: ee, buffered: !0 }); } catch (e) {} this.importAggregator({ resourceObserver: i }); } }, ce, P, we, k, class extends f { static featureName = de; constructor(e, t) { if ((super(e, t, de, !(arguments.length > 2 && void 0 !== arguments[2]) || arguments[2]), !l.il)) return; if (!(0, n.OP)(e).xhrWrappable) return; try { this.removeOnAbort = new AbortController(); } catch (e) {} let r, i = 0; const o = this.ee.get('tracer'), a = (0, B._L)(this.ee), s = (0, B.Lg)(this.ee), c = (0, B.BV)(this.ee), u = (0, B.Kf)(this.ee), d = this.ee.get('events'), f = (0, B.u5)(this.ee), h = (0, B.QU)(this.ee), p = (0, B.Gm)(this.ee); function g(e, t) { h.emit('newURL', ['' + window.location, t]); } function m() { i++, (r = window.location.hash), (this[ve] = (0, j.z)()); } function v() { i--, window.location.hash !== r && g(0, !0); var e = (0, j.z)(); (this[ge] = ~~this[ge] + e - this[ve]), (this[ye] = e); } function b(e, t) { e.on(t, function () { this[t] = (0, j.z)(); }); } this.ee.on(ve, m), s.on(be, m), a.on(be, m), this.ee.on(ye, v), s.on(pe, v), a.on(pe, v), this.ee.buffer([ve, ye, 'xhr-resolved'], this.featureName), d.buffer([ve], this.featureName), c.buffer(['setTimeout' + fe, 'clearTimeout' + le, ve], this.featureName), u.buffer([ve, 'new-xhr', 'send-xhr' + le], this.featureName), f.buffer([me + le, me + '-done', me + he + le, me + he + fe], this.featureName), h.buffer(['newURL'], this.featureName), p.buffer([ve], this.featureName), s.buffer(['propagate', be, pe, 'executor-err', 'resolve' + le], this.featureName), o.buffer([ve, 'no-' + ve], this.featureName), a.buffer(['new-jsonp', 'cb-start', 'jsonp-error', 'jsonp-end'], this.featureName), b(f, me + le), b(f, me + '-done'), b(a, 'new-jsonp'), b(a, 'jsonp-end'), b(a, 'cb-start'), h.on('pushState-end', g), h.on('replaceState-end', g), window.addEventListener('hashchange', g, (0, D.m$)(!0, this.removeOnAbort?.signal)), window.addEventListener('load', g, (0, D.m$)(!0, this.removeOnAbort?.signal)), window.addEventListener( 'popstate', function () { g(0, i > 1); }, (0, D.m$)(!0, this.removeOnAbort?.signal), ), (this.abortHandler = this.#i), this.importAggregator(); } #i() { this.removeOnAbort?.abort(), (this.abortHandler = void 0); } }, ], loaderType: 'spa', }); })(); })(); </script> <!-- NR Script End for www.pearson.com --> <!-- OneTrust Cookies Consent Notice start for www.pearson.com --> <script src="https://cdn.cookielaw.org/scripttemplates/otSDKStub.js" data-document-language="true" type="text/javascript" charset="UTF-8" data-domain-script="0d545d30-0e52-4bd4-bbe4-db2d55525649"></script> <script type="text/javascript"> function OptanonWrapper() { var profile = blueConicClient.profile.getProfile(); if(!OnetrustActiveGroups.includes("C0004")){ profile.permission.setLevel(blueConicClient.permission.level.DO_NOT_TRACK); blueConicClient.profile.updateProfile(); } else { profile.permission.setLevel(blueConicClient.permission.level.PERSONAL); blueConicClient.profile.updateProfile(); } } </script> <!-- OneTrust Cookies Consent Notice end for www.pearson.com --> <!-- Start VWO Async SmartCode --> <script> window._vwo_code = window._vwo_code || (function () { var account_id = 725134, version = 1.5, settings_tolerance = 2000, library_tolerance = 2500, use_existing_jquery = false, is_spa = 1, hide_element = "", hide_element_style = "opacity:0 !important;filter:alpha(opacity=0) !important;background:none !important", /* DO NOT EDIT BELOW THIS LINE */ f = false, d = document, vwoCodeEl = d.querySelector("#vwoCode"), filterToleranceTimer, code = { use_existing_jquery: function () { return use_existing_jquery; }, library_tolerance: function () { return library_tolerance; }, hide_element_style: function () { return "{" + hide_element_style + "}"; }, finish: function () { if (!f) { f = true; var a = d.getElementById("_vis_opt_path_hides"); if (a) a.parentNode.removeChild(a); } }, finished: function () { return f; }, load: function (a) { var b = d.createElement("script"); b.src = a; b.type = "text/javascript"; b.innerText; b.onerror = function () { _vwo_code.finish(); }; d.getElementsByTagName("head")[0].appendChild(b); }, getVersion: function () { return version; }, getMatchedCookies: function (matchPattern) { var matchedCookies = []; if (document.cookie) { matchedCookies = document.cookie.match(matchPattern) || []; } return matchedCookies; }, getCombinationCookie: function () { var matchedCookies = code.getMatchedCookies( /(?:^|;)\s?(_vis_opt_exp_\d+_combi=[^;$]*)/gi ); matchedCookies = matchedCookies.map(function (cookie) { try { var decodedCookie = decodeURIComponent(cookie); if ( !/_vis_opt_exp_\d+_combi=(?:\d+,?)+\s*$/.test(decodedCookie) ) { return ""; } return decodedCookie; } catch (e) { return ""; } }); var combinations = []; matchedCookies.forEach(function (each) { var cookiePair = each.match(/([\d,]+)/g); cookiePair && combinations.push(cookiePair.join("-")); }); return combinations.join("|"); }, init: function () { if (d.URL.indexOf("__vwo_disable__") > -1) return; window.settings_timer = setTimeout(function () { _vwo_code.finish(); _vwo_code.removeLoaderAndOverlay(); }, settings_tolerance); var filterConfig = this.filterConfig; if (!filterConfig || filterConfig.filterTime === "balanced") { var a = d.createElement("style"), b = hide_element ? hide_element + "{" + hide_element_style + "}" : "", h = d.getElementsByTagName("head")[0]; a.setAttribute("id", "_vis_opt_path_hides"); vwoCodeEl && a.setAttribute("nonce", vwoCodeEl.nonce); a.setAttribute("type", "text/css"); if (a.styleSheet) a.styleSheet.cssText = b; else a.appendChild(d.createTextNode(b)); h.appendChild(a); } if (filterConfig && filterConfig.filterTime === "early") { this.removeLoaderAndOverlay(); } var c = this.getCombinationCookie(); this.load( "https://dev.visualwebsiteoptimizer.com/j.php?a=" + account_id + "&u=" + encodeURIComponent(d.URL) + "&f=" + +is_spa + "&vn=" + version + (c ? "&c=" + c : "") ); return settings_timer; }, setFilterConfigAndApplyFilter: function (config) { if (!config) { return; } var state = this.isNonLiveMode(account_id) || config.isConsentGiven(); if (state === "1") { hide_element = "body"; window._vwo_settings_timer = _vwo_code.init(); return; } else if (state === "2") { return; } function clearIntervals(timerIds) { for (var i = 0; i < timerIds.length; i++) { clearInterval(timerIds[i]); } } this.filterConfig = config; var popupTimer = setInterval(function () { if (_vwo_code.applyFilters(config)) { clearInterval(popupTimer); } }, 100); var timer = setInterval(function () { var state = config.isConsentGiven(); var shouldClearAllIntervals; if (state === "1") { _vwo_code.showLoader(); window._vwo_settings_timer = _vwo_code.init(); shouldClearAllIntervals = true; } else if (state === "2") { _vwo_code.filterConfig = undefined; _vwo_code.removeLoaderAndOverlay(); shouldClearAllIntervals = true; } if (shouldClearAllIntervals) { clearIntervals([timer, popupTimer]); clearInterval(filterToleranceTimer); } }, 100); if (config.filterTolerance) { filterToleranceTimer = setTimeout(function () { _vwo_code.removeLoaderAndOverlay(); clearIntervals([timer, popupTimer]); }, config.filterTolerance); } }, showLoader: function () { var vwoOverlay = d.getElementsByClassName("vwo-overlay")[0]; if (!vwoOverlay) return; var vwoContentLoader = d.createElement("div"); vwoContentLoader.classList.add("vwo-content-loader"); vwoOverlay.parentNode.insertBefore( vwoContentLoader, vwoOverlay.nextSibling ); }, applyFilters: function (config) { var popup = d.querySelector(config.popupSelector); var popupZIndex; if (!popup && d.getElementById("_vis_opt_overlay")) { return; } var maxZIndex = 2147483647; if (popup) { var popupStyle = window.getComputedStyle(popup); popupZIndex = popupStyle.getPropertyValue("z-index"); if (!popupZIndex || popupZIndex === "auto") { popupZIndex = maxZIndex; } popup.style.zIndex = popupZIndex; } popupZIndex = popupZIndex || maxZIndex; var vwoFilter = "position: fixed; top: 0; left: 0; right: 0; bottom: 0; height: 100%; width: 100%; -webkit-filter: blur(5px); filter: blur(5px); backdrop-filter: saturate(180%) blur(3px); -webkit-backdrop-filter: saturate(180%) blur(3px); z-index:" + (popupZIndex - 1) + ";", vwoLoaderCss = " .vwo-content-loader{ border: 16px solid #f3f3f3; border-top: 16px solid #3498db; border-radius: 50%; width: 90px; height: 90px; position: fixed; top: 50%; left: 50%; -webkit-transform: translate(-50%, -50%); -ms-transform: translate(-50%, -50%); transform: translate(-50%, -50%); animation: vwo-spin 2s linear infinite; z-index:" + (popupZIndex - 1) + "; }" + "@keyframes vwo-spin { 0% { -webkit-transform: translate(-50%, -50%) rotate(0deg); transform: translate(-50%, -50%) rotate(0deg); } 100% { -webkit-transform: translate(-50%, -50%) rotate(360deg); transform: translate(-50%, -50%) rotate(360deg); } }"; /** * This below written code should not be tweaked * */ var overlayStyleTag = d.getElementById("_vis_opt_overlay"), overlayCSS = ".vwo-overlay{" + vwoFilter + "}" + vwoLoaderCss; if (overlayStyleTag) { if (overlayStyleTag.styleSheet) { overlayStyleTag.styleSheet.cssText = overlayCSS; } else { var _vwo_textNode = d.createTextNode(overlayCSS); overlayStyleTag.appendChild(_vwo_textNode); overlayStyleTag.removeChild(overlayStyleTag.childNodes[0]); } } else { var a = d.createElement("style"), h = d.getElementsByTagName("head")[0], body = d.getElementsByTagName("body")[0]; var vwoOverlay = d.createElement("div"); vwoOverlay.classList.add("vwo-overlay"); body.prepend(vwoOverlay); a.setAttribute("id", "_vis_opt_overlay"); a.setAttribute("type", "text/css"); if (a.styleSheet) a.styleSheet.cssText = overlayCSS; else a.appendChild(d.createTextNode(overlayCSS)); h.appendChild(a); } return !!popup; }, removeLoaderAndOverlay: function () { var overlay = d.getElementsByClassName("vwo-overlay"); var loader = d.getElementsByClassName("vwo-content-loader"); var overlayStyleTag = d.getElementById("_vis_opt_overlay"); overlay && (overlay = overlay[0]) && overlay.parentElement.removeChild(overlay); loader && (loader = loader[0]) && loader.parentElement.removeChild(loader); overlayStyleTag && overlayStyleTag.parentElement.removeChild(overlayStyleTag); }, isNonLiveMode: function (accountId) { var wName = window.name; if (!wName) { return; } return ( (wName.indexOf("_vis_editor") > -1 || wName.indexOf("_vis_preview_" + accountId) > -1 || wName.indexOf("_vis_heatmap_" + accountId) > -1) && "1" ); }, }; return code; })(); _vwo_code.setFilterConfigAndApplyFilter({ popupSelector: "SELECTOR_PATH_OF_POPUP", filterTime: "FILTER_TIME_AS_PER_YOUR_PREFERENCE", isConsentGiven: function () { var consented =document.cookie.indexOf("C0004%3A1"); if(consented >-1) { return '1'; } else if (consented === -1) { return '2'; } else { return '3'; } }, filterTolerance: "HARD_TIMER_FOR_REMOVING_OVERLAY_AND_POPUP", }); </script> <!-- End VWO Async SmartCode --> <!-- BlueConic script start --> <script type="text/javascript" class="optanon-category-C0004" src="https://k244.pearson.com/script.js"></script> <!-- BlueConic script end --> <script type="text/javascript"> var globalProperties = {"siteId":"global-store-en","homePageLevel":3,"sitemapLevel":4,"sitemapIndexLevel":3,"msmSitesLevel":0,"selfReferencingCanonical":false,"extensionRemovalEnabled":false,"sitemapAlternativeLinksEnabled":false,"firstLevelNavEnabled":true,"secondLevelNavEnabled":true,"navContentEnabled":true,"footerFilteringEnabled":true,"useHomePageLevelInBreadcrumbs":true,"automaticMSMCanonicalTagEnabled":true,"columnControlConfigPath":"/etc/config/platform/aem-core/components/content/column-control-v3/columns","excludedContentPathsForSelfReferencingCanonicalTag":[],"navColumnControlConfigPath":"/etc/config/platform/aem-core/components/content/column-control-v3/columns","embedPageConfigPath":"/etc/config/platform/aem-core/components/page/embed-page/column-width-v2","megaNavContentBSVersion":4,"breadcrumbVersion":"v1","seoBreadcrumbEnabled":false,"seoHtmlMarkupEnabled":false,"enablePageLevelBreadcrumb":true,"blogPostConfig":false,"displayViewAllTagsForBlogs":true,"displayViewAllTagsForEvents":true,"rtlPage":false,"displayPastDatesForEvents":true,"walletAddEditEnabled":false,"walletAttemptsLimitationLogic":false,"cartMergeEnabled":false,"cartToHybrisEnabled":false,"manageSubscriptionEnabled":false,"showAutorenew":false,"updateProfileEnabled":false,"seoToolEnabled":true,"masterNodeDisabledForPreviewServer":true,"altTextGenerationEnabled":true,"recaptchValidationEnabled":false,"recaptchaV3Enabled":false,"multicoloredFaviconEnabled":true,"includeHiddenPagesInSitemap":false,"disableChatbotForInternalUsers":false,"contentSelectorExportJsonEnabled":false,"customDropdownEnabled":false,"contentTileNonSemanticMarkupEnabled":true,"tabPanelAccessibleMarkupEnabled":false,"localeSelectionAccessibleMarkupEnabled":true,"youTubeLazyLoadingEnabled":false,"heroSlideVideoBackgroundEnabled":false,"eventHeadingStyle":"h2","globalProperties":[{"download-limit-highrisk":"8"},{"download-limit-lowrisk":"50"},{"ies-server-root":"https://login.pearson.com/v1/piapi"},{"cart-data-host":"https://api-pgi.pearson.com/headless/ecommerce/v2"},{"sign-up-educator-redirect":"/instructor-verification"},{"ies-ispmc":"true"},{"global-property-upsert-url":"https://api-gip-01.pgi.pearsonprd.tech/educator-account-upsert-papi/v1/account_upsert"},{"ies-terms-of-use-url":"/en/legal-information/terms-of-use.html"},{"ies-privacy-policy-url":"/en/legal-information/privacy-policy.html"},{"sift-api-url":"https://apigw-us-gip.pearson.com/sift/api/v205/events"},{"sift-beacon-key":"25bd44c182"},{"sift-api-key":"a39b3061b675f905"},{"sift-script-url":"https://cdn.siftscience.com/s.js"},{"user-restricted-redirect":"/en.html"},{"pagesToRedirectFromAfterLogout":"/store/cart,/store/checkout,/store/my-account,/my-learning"},{"terms-and-conditions-platforms-url":"/content/dam/global-store/global/educator/resources/aivmap.json"},{"brand_name":"pearson"},{"product-not-found-page-url":"/en/legal-information/platforms-terms-and-conditions/product-not-found.html"},{"hybris-logout-url":"/store/logout?autoLogoutFlag=true"},{"ies-server-login-path":"/iesui/signin"},{"ies-server-reset-password-path":"/iesui/forgot-unpw"},{"pmc-services-server-root":"https://service.pearson.com/pmc-services/user-profile-state"},{"progressive-profile-second-step-url":"https://www.pearson.com/en-gb/user/profiling"},{"launchdarkly-client-id":"65314c1b6faa991281047bf6"},{"allowed-return-hosts":"mypearson.com,pearson.com"},{"ies-client-id":"5K06p9cX8Y35wQqBqRMHregkqjUdH5m4"}],"translations":{},"productMetatagNames":[],"navLibsCategories":["global.store.algolia-search.educator","one-dot-com.one-dot-com.he-js-base","dmcp.globalmessage","one-dot-com.one-dot-com.hed-navigation.nav-aem-header","one-dot-com.one-dot-com.hed-navigation.nav-footer"],"localesInfo":[{"en-us":"https://www.pearson.com/en-us.html"},{"en-gb":"https://www.pearson.com/en-gb.html"},{"en-ca":"https://www.pearson.com/en-ca.html"},{"en-au":"https://www.pearson.com/en-au.html"},{"en-nz":"https://www.pearson.com/en-nz.html"}],"suppressedExcludedLibsCategories":[],"standaloneLibsCategories":[]}; </script> <link rel="canonical" href="https://www.pearson.com/en-us/privacy-center/privacy-notices.html"/> <script>!function(e){var n="https://s.go-mpulse.net/boomerang/";if("False"=="True")e.BOOMR_config=e.BOOMR_config||{},e.BOOMR_config.PageParams=e.BOOMR_config.PageParams||{},e.BOOMR_config.PageParams.pci=!0,n="https://s2.go-mpulse.net/boomerang/";if(window.BOOMR_API_key="XCNNJ-G8PCV-U855W-LP259-ULUSU",function(){function e(){if(!r){var e=document.createElement("script");e.id="boomr-scr-as",e.src=window.BOOMR.url,e.async=!0,o.appendChild(e),r=!0}}function t(e){r=!0;var n,t,a,i,d=document,O=window;if(window.BOOMR.snippetMethod=e?"if":"i",t=function(e,n){var t=d.createElement("script");t.id=n||"boomr-if-as",t.src=window.BOOMR.url,BOOMR_lstart=(new Date).getTime(),e=e||d.body,e.appendChild(t)},!window.addEventListener&&window.attachEvent&&navigator.userAgent.match(/MSIE [67]\./))return window.BOOMR.snippetMethod="s",void t(o,"boomr-async");a=document.createElement("IFRAME"),a.src="about:blank",a.title="",a.role="presentation",a.loading="eager",i=(a.frameElement||a).style,i.width=0,i.height=0,i.border=0,i.display="none",o.appendChild(a);try{O=a.contentWindow,d=O.document.open()}catch(_){n=document.domain,a.src="javascript:var d=document.open();d.domain='"+n+"';void 0;",O=a.contentWindow,d=O.document.open()}if(n)d._boomrl=function(){this.domain=n,t()},d.write("<bo"+"dy onload='document._boomrl();'>");else if(O._boomrl=function(){t()},O.addEventListener)O.addEventListener("load",O._boomrl,!1);else if(O.attachEvent)O.attachEvent("onload",O._boomrl);d.close()}function a(e){window.BOOMR_onload=e&&e.timeStamp||(new Date).getTime()}if(!window.BOOMR||!window.BOOMR.version&&!window.BOOMR.snippetExecuted){window.BOOMR=window.BOOMR||{},window.BOOMR.snippetStart=(new Date).getTime(),window.BOOMR.snippetExecuted=!0,window.BOOMR.snippetVersion=14,window.BOOMR.url=n+"XCNNJ-G8PCV-U855W-LP259-ULUSU";var i=document.currentScript||document.getElementsByTagName("script")[0],o=i.parentNode,r=!1,d=document.createElement("link");if(d.relList&&"function"==typeof d.relList.supports&&d.relList.supports("preload")&&"as"in d)window.BOOMR.snippetMethod="p",d.href=window.BOOMR.url,d.rel="preload",d.as="script",d.addEventListener("load",e),d.addEventListener("error",function(){t(!0)}),setTimeout(function(){if(!r)t(!0)},3e3),BOOMR_lstart=(new Date).getTime(),o.appendChild(d);else t(!1);if(window.addEventListener)window.addEventListener("load",a,!1);else if(window.attachEvent)window.attachEvent("onload",a)}}(),"".length>0)if(e&&"performance"in e&&e.performance&&"function"==typeof e.performance.setResourceTimingBufferSize)e.performance.setResourceTimingBufferSize();!function(){if(BOOMR=e.BOOMR||{},BOOMR.plugins=BOOMR.plugins||{},!BOOMR.plugins.AK){var n=""=="true"?1:0,t="",a="bdpnbevydq2gsz2hl46a-f-5e7a17c35-clientnsv4-s.akamaihd.net",i="false"=="true"?2:1,o={"ak.v":"39","ak.cp":"797525","ak.ai":parseInt("503985",10),"ak.ol":"0","ak.cr":4,"ak.ipv":4,"ak.proto":"http/1.1","ak.rid":"ac84d86","ak.r":23331,"ak.a2":n,"ak.m":"x","ak.n":"essl","ak.bpcip":"8.222.208.0","ak.cport":56824,"ak.gh":"23.50.232.140","ak.quicv":"","ak.tlsv":"tls1.2","ak.0rtt":"","ak.0rtt.ed":"","ak.csrc":"-","ak.acc":"reno","ak.t":"1732730684","ak.ak":"hOBiQwZUYzCg5VSAfCLimQ==OxXt2IzW7rYLZ0A/kjLnnn3ToOmK9M6RNNi0FTIOwbDV7tUEI3BN9JOjs6+BfxK+1gviyHsAelqVVd/o0xSGlCcREKTxvy33uBZzgCyCN8vz/YcQCOUuUmzQV/ywkngm6BIkIDbT94mbDYxI8bxUlPuAVeiLQAUXcOF0O7Lfwo4ge/bp4/cTMJsw/Gv8uZ/KypBTZG4oDpqN5a5gJP37m4ZNcosXPGQY5j6z61JeenSEZmsIO+W3BCwzOKusr+lDlpEzS52SX/ZQGv6gFugkG1ibyyCif88diBJYhfby64gnAw/ji8xYk+w6JE228XjWAxeJs+ty3/Bs8+V/Xug/qCJk8RuhCFpTKEB/mrZaNYXfXrK5VMAO2KjQGhrCSTRMiXqZfAdrhX5Kpdvxf5VEiJMkBYBV5AN76JF6KxP/hGo=","ak.pv":"153","ak.dpoabenc":"","ak.tf":i};if(""!==t)o["ak.ruds"]=t;var r={i:!1,av:function(n){var t="http.initiator";if(n&&(!n[t]||"spa_hard"===n[t]))o["ak.feo"]=void 0!==e.aFeoApplied?1:0,BOOMR.addVar(o)},rv:function(){var e=["ak.bpcip","ak.cport","ak.cr","ak.csrc","ak.gh","ak.ipv","ak.m","ak.n","ak.ol","ak.proto","ak.quicv","ak.tlsv","ak.0rtt","ak.0rtt.ed","ak.r","ak.acc","ak.t","ak.tf"];BOOMR.removeVar(e)}};BOOMR.plugins.AK={akVars:o,akDNSPreFetchDomain:a,init:function(){if(!r.i){var e=BOOMR.subscribe;e("before_beacon",r.av,null,null),e("onbeacon",r.rv,null,null),r.i=!0}return this},is_complete:function(){return!0}}}}()}(window);</script></head> <body data-breadcrumb="true" class="page basicpage dots-lrDown-textureLight" id="page-ccc0f4bd42"> <script src="/etc/clientlibs/platform/aem-core/ies-session.min.ACSHASH70b4b3c7e053d633c2d7be7163e8646a.js"></script> <header> <div class="aem-Grid aem-Grid--12 aem-Grid--default--12 "> <!-- Getting class names set from developer configurations and combining it with the one configured in the style tab --> <div class="iparsys parsys aem-GridColumn aem-GridColumn--default--12"><div class="section"><div class="new"></div> </div><div class="iparys_inherited"><div class="iparsys parsys"><div class="experiencefragment section"> <div class="xf-content-height"> <div class="aem-Grid aem-Grid--12 aem-Grid--default--12 "> </div> </div> </div> </div> </div> </div> <!-- Getting class names set from developer configurations and combining it with the one configured in the style tab --> <div class="iparsys parsys aem-GridColumn aem-GridColumn--default--12"><div class="section"><div class="new"></div> </div><div class="iparys_inherited"><div class="iparsys parsys"><div class="experiencefragment section"> <div class="xf-content-height"> <div class="aem-Grid aem-Grid--12 aem-Grid--default--12 "> <!-- Getting class names set from developer configurations and combining it with the one configured in the style tab --> <section class="column-control aem-GridColumn aem-GridColumn--default--12 he-navigation-topnav"> <div class="container"> <div class="row"><div class="col-sm-9 col-xs-12"><div role="navigation" class="mega-nav navbar navbar-default section"> <div class="navbar-header"> <button aria-label=" items" data-toggle="collapse" data-target="#navbar-collapse-grid" class="navbar-toggle" aria-expanded="false"><span class="fa fa-bars"></span></button> </div> <div id="navbar-collapse-grid" class="navbar-collapse collapse"> <ul class="nav navbar-nav"> <li class="dropdown mega-nav-full-width"> <a href="https://www.pearson.com/schools.html" role="link" target="_self" aria-label="for-school" class="dropdown-toggle js-opacity-0"> For School </a> </li> <li class="dropdown mega-nav-full-width"> <a href="https://www.pearson.com/higher-education.html" role="link" target="_self" aria-label="for-college" class="dropdown-toggle js-opacity-0"> For College </a> </li> <li class="dropdown mega-nav-full-width"> <a href="https://www.pearson.com/work.html" role="link" target="_self" aria-label="for-work" class="dropdown-toggle js-opacity-0"> For Work </a> </li> <li class="dropdown mega-nav-full-width"> <a href="https://www.pearson.com/explore-pearson.html" role="link" target="_self" aria-label="all-pearson" class="dropdown-toggle js-opacity-0"> Explore Pearson </a> </li> </ul> </div> </div> </div><div class=" col-sm-3 col-xs-12"><div class="locale-selection section"> <div> <button class="locale-selection__button selected_en" aria-haspopup="true" aria-label="Locale Selection. Currently selected: All countries" aria-expanded="false" aria-controls="locale-selection-dropdown"> All countries </button> <div class="locale-selection__dropdown" aria-describedby="locale-selection-description" id="locale-selection-dropdown"> <ul role="menu" aria-label="Locale Selection"> <li role="none"> <a role="menuitem" lang="en-US" hreflang="en-US" href="https://www.pearson.com/en-us.html"> United States </a> </li> <li role="none"> <a role="menuitem" lang="en-CA" hreflang="en-CA" href="https://www.pearson.com/en-ca.html"> Canada </a> </li> <li role="none"> <a role="menuitem" lang="en-GB" hreflang="en-GB" href="https://www.pearson.com/en-gb.html"> United Kingdom </a> </li> <li role="none"> <a role="menuitem" lang="en" hreflang="en" href="https://www.pearson.com/location-selector.html" aria-selected="true"> All countries </a> </li> </ul> </div> </div> </div> </div></div> </div> </section> </div> </div> </div> </div> </div> </div> <!-- Getting class names set from developer configurations and combining it with the one configured in the style tab --> <div class="iparsys parsys aem-GridColumn aem-GridColumn--default--12"><div class="section"><div class="new"></div> </div><div class="iparys_inherited"><div class="iparsys parsys"><div class="experiencefragment section"> <div class="xf-content-height"> <div class="aem-Grid aem-Grid--12 aem-Grid--default--12 "> <!-- Getting class names set from developer configurations and combining it with the one configured in the style tab --> <section class="column-control he-pr-nav__wrapper layout-default clipping-default clip-target-default default-texture default-animation default-gutters has-padding-top--none has-padding-bottom--none default-padding-horizontal default-min-height default-rule default-corner-radius default-shadow aem-GridColumn nav-content-selector aem-GridColumn--default--12 isAuthenticated"> <div class="container"> <div class="row"><div class="col-12"><div role="navigation" class="mega-nav navbar navbar-default he-header-mobile-nav he-drop-down-nav section"> <div data-aria-label-nav="Menu"></div> <div class="navbar-header"> <button aria-label="Menu items" data-toggle="collapse" data-target="#navbar-collapse-grid" class="navbar-toggle" aria-expanded="false"><span class="fa fa-bars"></span></button> </div> <div id="navbar-collapse-grid" class="navbar-collapse collapse"> <div class="mega-nav-items-container"> <ul class="nav navbar-nav"> <li class="dropdown mega-nav-full-width"> <a href="#" role="button" target="_self" aria-label="for-school" aria-controls="menu-item--forschool" class="dropdown-toggle js-opacity-0" data-toggle="dropdown"> For School <span class="caret"></span> </a> <div id="menu-item--forschool" class="dropdown-menu"> <div class="text he-nav--mobile-only mobile-nav--back section"> <p><a href="#">Back to main menu</a></p> </div> <div class="text he-nav--mobile-only section"> <h2>FOR SCHOOL</h2> </div> <div class="text explore-link-text he-nav--mobile-only section"> <p><a href="https://www.pearson.com/schools.html">Explore for School</a></p> </div> <div role="navigation" class="mega-nav navbar navbar-default he-nav--arrow-links section"> </div> <div class="ghost section"> </div> </div> </li> <li class="dropdown mega-nav-full-width"> <a href="#" role="button" target="_self" aria-label="for-college" aria-controls="menu-item--forcollege" class="dropdown-toggle js-opacity-0" data-toggle="dropdown"> For College <span class="caret"></span> </a> <div id="menu-item--forcollege" class="dropdown-menu"> <div class="text he-nav--mobile-only mobile-nav--back section"> <p><a href="#">Back to main menu</a></p> </div> <div class="text he-nav--mobile-only section"> <h2>FOR COLLEGE</h2> </div> <div class="text explore-link-text he-nav--mobile-only section"> <p><a href="https://www.pearson.com/higher-education.html">Explore for College</a></p> </div> <div role="navigation" class="mega-nav navbar navbar-default he-nav--arrow-links section"> </div> <div class="ghost section"> </div> <div class="ghost section"> </div> </div> </li> <li class="dropdown mega-nav-full-width"> <a href="#" role="button" target="_self" aria-label="for-work" aria-controls="menu-item--forwork" class="dropdown-toggle js-opacity-0" data-toggle="dropdown"> For Work <span class="caret"></span> </a> <div id="menu-item--forwork" class="dropdown-menu"> <div class="text he-nav--mobile-only mobile-nav--back section"> <p><a href="#">Back to main menu</a></p> </div> <div class="text he-nav--mobile-only section"> <h2>FOR WORK</h2> </div> <div class="text explore-link-text he-nav--mobile-only section"> <p><a href="https://www.pearson.com/work.html">Explore for work</a></p> </div> <div role="navigation" class="mega-nav navbar navbar-default he-nav--arrow-links section"> </div> <div class="ghost section"> </div> </div> </li> <li class="dropdown mega-nav-full-width"> <a href="https://www.pearson.com/explore-pearson.html" role="link" target="_self" aria-label="all-pearson" class="dropdown-toggle js-opacity-0"> Explore Pearson </a> </li> </ul> <div class="text he-nav--mobile-only cart-link-text section"> <p><a href="/store/cart" title="Cart" class="cart-link">Cart</a></p> </div> <div class="ghost section"> </div> </div> </div> </div> <div class="logo-v2 header__logo section"> <a id="logo" href="https://www.pearson.com/en.html" aria-label="Pearson Logo"> <picture> <source media="(max-width: 414px)" srcset="/content/dam/help/hedReimagined/logos/logo-hed--on-dark.svg"/> <img src="/content/dam/help/hedReimagined/logos/logo-hed--on-dark.svg" alt="Pearson"/> </picture> </a> </div> <div role="navigation" class="mega-nav navbar navbar-default section he-header-desktop-nav"> </div> <div class="function-panel section function-panel educator-nav__search c-nav__search aem-GridColumn aem-GridColumn--default--12"> <div class="facet__auto_suggest" data-fp-attributes="{"productsTitle":"PRODUCTS","suggestedTitle":"SUGGESTED SEARCHES"}" data-hide-tags="true"></div> </div> <section class="column-control layout-default clipping-default clip-target-default default-texture default-animation default-gutters has-padding-top--none has-padding-bottom--none default-padding-horizontal default-min-height default-rule default-corner-radius default-shadow he-header-icon-navigation section"> <div class="row"><div class="col-12"><div class="parsys section"><div class="ghost section"> </div> <div class="ghost section"> </div> <div class="ghost section"> </div> </div> </div></div> </section> </div></div> </div> </section> </div> </div> </div> <nav class="breadcrumb-wrapper-nav-hide c-breadcrumb__wrapper section"> <nav class="breadcrumb c-breadcrumb__nav section" aria-label="Breadcrumb"> <ol class="c-breadcrumb__list"> <li class="c-breadcrumb__item"> <a href="https://www.pearson.com/en.html">Home Page</a> <span>></span> </li> <li class="c-breadcrumb__item"> <a href="https://www.pearson.com/privacy-center.html">Privacy center</a> <span>></span> </li> <li class="c-breadcrumb__item" aria-current="page"> <p>Privacy notices</p> </li> </ol> </nav> </nav> </div> </div> </div> </div> </header> <main role="main"><div> <div class="aem-Grid aem-Grid--12 aem-Grid--default--12 "> <!-- Getting class names set from developer configurations and combining it with the one configured in the style tab --> <section class="column-control flex-layout--vertically-centered bgcolor--background-dark dots-lrUp-textureDark default-gutters has-padding-top--none has-padding-bottom--none aem-GridColumn aem-GridColumn--default--12"> <div class="container"> <div class="row"><div class="col-md-6 col-12"><div class="content-tile content-tile-landscape--83-17 vertically-centered pad-eq-vertical--30__caption color--text-primary-inverse section"> <div class="content-tile-container"> <div class="content-tile__figure"> <div class="content-tile__figcaption"> <h1 class="content-tile__title">Privacy notices</h1> <div class="content-tile-text rte-container"><p>Our commitment to privacy<br /> </p> </div> </div> </div> </div> </div> </div><div class="col-md-6 col-12"><section class="column-control min-height--400 section"> <style> .bg568060028 { background-image: url('/content/dam/global-store/global/privacy-center/1600x800-offset-713070.jpg'); background-size: ; background-position: top; background-repeat: repeat; } @media (max-width:320px) { .bg568060028 { background-image: url('/content/dam/global-store/global/privacy-center/1600x800-offset-713070.jpg.transform/tiny-size-xs/img.jpeg'); } } @media (max-width:480px) { .bg568060028 { background-image: url('/content/dam/global-store/global/privacy-center/1600x800-offset-713070.jpg.transform/tiny-size-xl/img.jpeg'); } } @media (max-width:991px) { .bg568060028 { background-image: url('/content/dam/global-store/global/privacy-center/1600x800-offset-713070.jpg.transform/medium-size/img.jpeg'); } } @media (max-width:1199px) { .bg568060028 { background-image: url('/content/dam/global-store/global/privacy-center/1600x800-offset-713070.jpg.transform/big-size-xs/img.jpeg'); } } @media (min-width:1200px) { .bg568060028 { background-image: url('/content/dam/global-store/global/privacy-center/1600x800-offset-713070.jpg.transform/big-size-xl/img.jpeg'); } } </style> <div class="column-control--bg bg568060028 "></div> <div class="row"><div class="col-12"></div></div> </section> </div></div> </div> </section> <!-- Getting class names set from developer configurations and combining it with the one configured in the style tab --> <section class="column-control has-padding-bottom--15 aem-GridColumn aem-GridColumn--default--12"> <div class="container"> <div class="row"><div class="col-md-8 col-12"><div class="content-tile section"> <div class="content-tile-container"> <div class="content-tile__figure"> <div class="content-tile__figcaption"> <div class="content-tile-text rte-container"><h2>Pearson Privacy Statement</h2> <h3>1. Introduction<br /> </h3> <p>Welcome to the Pearson Privacy Center. This page summarizes how Pearson and its group of companies ("Pearson", "we", "us", "our") use personal data. This page is a summary, it is important you read the Pearson Privacy Center Notice and the privacy information we share whilst you use our services (just in time notices) so that you have a clear understanding about how we use information about you. </p> <p>For any question regarding how we use your personal data, you can contact us at:</p> <p>Data Protection Officer: 80 Strand, London, WC2R 0RL </p> <p>EU Representative: Pearson Benelux B.V. (PIB) Kabelweg 37, Amsterdam, 1014 BA Netherlands</p> <p>You may also email us at <a href="mailto:dataprivacy@pearson.com">dataprivacy@pearson.com</a>. </p> <h3>2. What do we do?</h3> <p>Pearson provides education, training and assessment/verification services around the world (our "Services"). We work directly with individuals such as students, parents, teachers, and other professionals, and provide our Services to institutions (such as schools, universities, employers). More information about this is included in section 1 of the Pearson Privacy Center Notice. </p> <h3>3. What personal data do we collect and use? </h3> <p>The personal data we collect and use broadly falls into the following categories: </p> <ul> <li>Registration, profile, proof of identity and purchase information</li> <li>Information collected as part of Examinations and certifications and Educational Courses and Tutoring </li> <li>Customer service and educational/enrolment support information</li> <li>User generated data (e.g. your participation in forums)</li> <li>Data generated by AI (e.g. as part of assessment scoring)</li> <li>Video, image and audio recordings (e.g. collected during virtual classrooms or as part of exam proctoring)</li> <li>Activity and usage information</li> <li>Location, application and systems log data</li> <li>Special category data (e.g. relating to health for access arrangements, biometric face and voice technology to prevent cheating, and other sensitive information for equality monitoring);</li> </ul> <p>More information as to the types of data falling under these categories can be found in section 2 of the Pearson Privacy Center Notice. </p> <h3>4. Why do we collect your personal data? </h3> <p>Subject to the Service you use, the main ways we use personal data are for the purpose of bringing you the best possible experience when using our Services helping you track your lifetime of learning – whether that be to facilitate account registration, communicate with you (including marketing), market research and service improvement, personalizing your experience, to prevent fraud, managing integrations with third party technologies and to comply with laws and regulations and defend and exercise our legal rights. </p> <p>For more detailed descriptions please see section 5 of the Pearson Privacy Centre Notice.</p> <h3>5. Children's data </h3> <p>The nature of our Services means we often process information about users under the age of 18. We recognize our responsibility to keep children safe online and have put additional protections in place to ensure this. We do this by working closely with parents, and schools, please see section 4 of the Pearson Privacy Center Notice for more information. </p> <h3>6. Use of AI technologies </h3> <p>We use artificial intelligence technologies (for instance, when collecting your video and audio recordings during tests or as part of our scoring processes) in order to, amongst other purposes, drive consistency, eliminate bias and detect instances of cheating. Some of these activities would be carried out automatically and may require the use of your biometric data. For more information about these processing activities please see section 6 and section 8 of the Pearson Privacy Center Notice.</p> <h3>7. How long does Pearson keep my personal data for?</h3> <p>Only for as long as necessary to fulfil the purposes for which it was requested. Some types of information such as those relating to qualifications and virtual schools need to be retained for long periods of time. More information about this is included in section 10of the Pearson Privacy Center Notice. </p> <h3>8. Does Pearson share my personal data with anyone?</h3> <p>Yes. We share personal data with our group members who help us to deliver and improve our Services. Depending on the Service in question, we also share user personal data with their academic institutions, instructors, employers and/or parent or guardians as appropriate. Your personal data is shared with our suppliers who help us to provide the Services to you. We may also share your personal data with regulators, law enforcement, courts, with our professional advisors, or with other third parties for example in connection with the sale of or investment in our business. More information about this is included in section 11 of the Pearson Privacy Center Notice. </p> <h3>9. Will your personal data stay in your country?</h3> <p>We are part of a global organisation and use global service providers. This means your personal data may be processed outside of the country in which you live. We will only do this in compliance with local laws. For example, for residents in the UK and EU, Pearson complies with legal requirements to enter into Standard Contractual Clauses (and the UK addendum) with data importers. More information about this is included in section 11 of the Pearson Privacy Center Notice. </p> <h3>10. What rights do you have?</h3> <p>Depending on the country you are in, you may have different rights in relation to your personal data. Section 12 of the Pearson Privacy Center Notice includes a detailed description of the rights available to individuals in the European Union or United Kingdom. These include rights to access data, to correct inaccurate data, to object to or request restriction of our processing, to request deletion of data, to request that we transfer your data to another, to opt-out of marketing or to withdraw consent. You also have the right to complain to a local supervisory authority. </p> <h3>11. Who is the controller of my personal data?</h3> <p>For Services in the United Kingdom and Europe, Pearson Education Limited is normally the Pearson controlling entity, and in the United States and Asia Pacific it is normally either Pearson Education Inc or NCS Pearson Inc. Please refer to the terms and conditions for your service for details. Please note, there may be occasions where the data controller is your employer, or academic institution (i.e. school or university) rather than Pearson, this will be explained to you during your use of the Services. </p> <p><a href="https://www.pearson.com/en-us/legal-information/privacy-policy/california-supplement.html">SUPPLEMENTAL PRIVACY STATEMENT FOR CALIFORNIA RESIDENTS</a></p> <p><a class="new-window" aria-label="SUPPLEMENTALNOTICE FOR TURKEY. Opens new tab." href="/content/dam/global-store/global/legal/Supplemental-Turkey-1.pdf" target="_blank">SUPPLEMENTAL PRIVACY NOTICE FOR TURKISH RESIDENTS</a></p> <p><a href="https://www.pearson.com/privacy-center/privacy-notices/full-privacy-notice.html">PRIVACY NOTICE</a></p> <p><a href="https://www.pearson.com/privacy-center.html">PRIVACY CENTER</a><br /> </p> <p><b>Last updated: August 1, 2024</b></p> </div> </div> </div> </div> </div> </div><div class="col-md-4 col-12"><div class="accordion section"> <section class="accordion-panel"> <h2 class="accordion-panel-header"> <button aria-controls="-1749211392-1" aria-expanded="false"> <span>Translated versions of this notice</span> <span class="pull-right fa fa-plus"></span> </button> </h2> <div class="accordion-panel-content accordion-panel-hide" id="-1749211392-1"> <div class="link-list section"> <div> <ul id="mn-root--1708465638"> <li> <a href="/content/dam/global-store/global/legal/Pearson-Privacy-Notice-Arabic.pdf" target="_blank" class="new-window" rel="noreferrer">Arabic - عربي </a> </li> <li> <a href="/content/dam/global-store/global/legal/Pearson-Privacy-Notice-SimplifiedChinese.pdf" target="_blank" class="new-window" rel="noreferrer">Chinese Simplified - 简体中文 </a> </li> <li> <a href="/content/dam/global-store/global/legal/Pearson-Privacy-Notice-TraditionalChinese.pdf" target="_blank" class="new-window" rel="noreferrer">Chinese Traditional - 中國傳統的 </a> </li> <li> <a href="/content/dam/global-store/global/legal/Pearson-Privacy-Notice-Czech.pdf" target="_blank" class="new-window" rel="noreferrer">Czech - čeština </a> </li> <li> <a href="/content/dam/global-store/global/legal/Pearson-Privacy-Notice-Dutch.pdf" target="_blank" class="new-window" rel="noreferrer">Dutch - Nederlands </a> </li> <li> <a href="/content/dam/global-store/global/legal/Pearson-Privacy-Notice-French.pdf" target="_blank" class="new-window" rel="noreferrer">French - Français </a> </li> <li> <a href="/content/dam/global-store/global/legal/Pearson-Privacy-Notice-French-Canadian.pdf" target="_blank" class="new-window" rel="noreferrer">French Canadian - Français Canadien </a> </li> <li> <a href="/content/dam/global-store/global/legal/Pearson-Privacy-Notice-German-1.pdf" target="_blank" class="new-window" rel="noreferrer">German - Deutsch </a> </li> <li> <a href="/content/dam/global-store/global/legal/Pearson-Privacy-Notice-Hindi.pdf" target="_blank" class="new-window" rel="noreferrer">Hindi - हिंदी </a> </li> <li> <a href="/content/dam/global-store/global/legal/Pearson-Privacy-Notice-Indonesian.pdf" target="_blank" class="new-window" rel="noreferrer">Indonesian - bahasa Indonesia </a> </li> <li> <a href="/content/dam/global-store/global/legal/Pearson-Privacy-Notice-Italian.pdf" target="_blank" class="new-window" rel="noreferrer">Italian - Italiano </a> </li> <li> <a href="/content/dam/global-store/global/legal/Pearson-Privacy-Notice-Japanese.pdf" target="_blank" class="new-window" rel="noreferrer">Japanese - 日本語 </a> </li> <li> <a href="/content/dam/global-store/global/legal/Pearson-Privacy-Notice-Korean.pdf" target="_blank" class="new-window" rel="noreferrer">Korean - 한국인 </a> </li> <li> <a href="/content/dam/global-store/global/legal/Pearson-Privacy-Notice-Polish.pdf" target="_blank" class="new-window" rel="noreferrer">Polish - Polski </a> </li> <li> <a href="/content/dam/global-store/global/legal/Pearson-Privacy-Notice-Potuguese.pdf" target="_blank" class="new-window" rel="noreferrer">Portuguese - Português </a> </li> <li> <a href="/content/dam/global-store/global/legal/Pearson-Privacy-Notice-Punjabi.pdf" target="_blank" class="new-window" rel="noreferrer">Punjabi - ਪੰਜਾਬੀ </a> </li> <li> <a href="/content/dam/global-store/global/legal/Pearson-Privacy-Statement-SerbianCyrl.pdf" target="_blank" class="new-window" rel="noreferrer">Serbian Cyrillic - српска ћирилица </a> </li> <li> <a href="/content/dam/global-store/global/legal/Pearson-Privacy-Notice-SerbianLatin.pdf" target="_blank" class="new-window" rel="noreferrer">Serbian Latin - српска латиница </a> </li> <li> <a href="/content/dam/global-store/global/legal/Pearson-Privacy-Notice-Spanish-1.pdf" target="_blank" class="new-window" rel="noreferrer">Spanish - Español </a> </li> <li> <a href="/content/dam/global-store/global/legal/Pearson-Privacy-Notice-Thai.pdf" target="_blank" class="new-window" rel="noreferrer">Thai - แบบไทย </a> </li> <li> <a href="/content/dam/global-store/global/legal/Pearson-Privacy-Notice-Turkish-1.pdf" target="_blank" class="new-window" rel="noreferrer">Turkish - Türkçe </a> </li> <li> <a href="/content/dam/global-store/global/legal/Pearson-Privacy-Notice-Ukrainian.pdf" target="_blank" class="new-window" rel="noreferrer">Ukrainian - українська </a> </li> <li> <a href="/content/dam/global-store/global/legal/Pearson-Privacy-Notice-Vietnamese.pdf" target="_blank" class="new-window" rel="noreferrer">Vietnamese - Tiếng Việt </a> </li> </ul> </div> </div> </div> </section> </div> </div></div> </div> </section> <!-- Getting class names set from developer configurations and combining it with the one configured in the style tab --> <section class="column-control flex-layout--pin-cta has-padding-top--15 has-padding-bottom--15 aem-GridColumn aem-GridColumn--default--12"> <div class="container"> <div class="row"><div class="col-md-6 col-12"><div class="content-tile content-tile-panel-item-main behavior--none content-tile-portrait default-layout-alignment default-offset bgcolor--default text-primary-link default-btn-type default-btn-size default-btn-width pad--default__figure pad-eq-vertical--default__caption pad-eq-horizontal--default__caption default-color title-typesize--h5 default-title-typefamily default-title-typeweight default-title-color default-subtitle-typesize default-subtitle-typefamily default-subtitle-typeweight default-subtitle-color default-content-tile-text--col-count default-rule default-corner-radius default-shadow section"> <div class="content-tile-container"> <div class="content-tile__figure"> <div class="content-tile__figcaption"> <h3 class="content-tile__title">Full Privacy Notice</h3> <div class="content-tile-text rte-container"><p><a href="https://www.pearson.com/privacy-center/privacy-notices/full-privacy-notice.html">View privacy notice</a><br /> </p> </div> </div> </div> </div> </div> </div><div class="col-md-6 col-12"><div class="content-tile content-tile-panel-item-main behavior--none content-tile-portrait default-layout-alignment default-offset bgcolor--default text-primary-link default-btn-type default-btn-size default-btn-width pad--default__figure pad-eq-vertical--default__caption pad-eq-horizontal--default__caption default-color title-typesize--h5 default-title-typefamily default-title-typeweight default-title-color default-subtitle-typesize default-subtitle-typefamily default-subtitle-typeweight default-subtitle-color default-content-tile-text--col-count default-rule default-corner-radius default-shadow section"> <div class="content-tile-container"> <div class="content-tile__figure"> <div class="content-tile__figcaption"> <h3 class="content-tile__title">Privacy notice for children</h3> <div class="content-tile-text rte-container"><p>Privacy notice tailored to our younger users<br /> </p> <p><a href="/content/dam/global-store/global/privacy-center/childrens-privacy-notice.pdf" target="_blank">View privacy notice</a></p> </div> </div> </div> </div> </div> </div></div> </div> </section> <!-- Getting class names set from developer configurations and combining it with the one configured in the style tab --> <section class="column-control flex-layout--pin-cta has-padding-top--15 has-padding-bottom--15 aem-GridColumn aem-GridColumn--default--12"> <div class="container"> <div class="row"><div class="col-md-6 col-12"><div class="content-tile content-tile-panel-item-main behavior--none content-tile-portrait default-layout-alignment default-offset bgcolor--default text-primary-link default-btn-type default-btn-size default-btn-width pad--default__figure pad-eq-vertical--default__caption pad-eq-horizontal--default__caption default-color title-typesize--h5 default-title-typefamily default-title-typeweight default-title-color default-subtitle-typesize default-subtitle-typefamily default-subtitle-typeweight default-subtitle-color default-content-tile-text--col-count default-rule default-corner-radius default-shadow section"> <div class="content-tile-container"> <div class="content-tile__figure"> <div class="content-tile__figcaption"> <h3 class="content-tile__title">Credly Privacy Notice</h3> <div class="content-tile-text rte-container"><p><a href="https://info.credly.com/privacy-policy" target="_blank" class="new-window" aria-label="View Credly privacy notice. Opens new tab.">View Credly privacy notice</a><br /> </p> </div> </div> </div> </div> </div> </div><div class="col-md-6 col-12"><div class="content-tile content-tile-panel-item-main behavior--none content-tile-portrait default-layout-alignment default-offset bgcolor--default text-primary-link default-btn-type default-btn-size default-btn-width pad--default__figure pad-eq-vertical--default__caption pad-eq-horizontal--default__caption default-color title-typesize--h5 default-title-typefamily default-title-typeweight default-title-color default-subtitle-typesize default-subtitle-typefamily default-subtitle-typeweight default-subtitle-color default-content-tile-text--col-count default-rule default-corner-radius default-shadow section"> <div class="content-tile-container"> <div class="content-tile__figure"> <div class="content-tile__figcaption"> <h3 class="content-tile__title">Mondly Privacy Notice</h3> <div class="content-tile-text rte-container"><p><a href="https://www.mondly.com/privacy" target="_blank" class="new-window" aria-label="View Mondly privacy notice. Opens new tab.">View Mondly privacy notice</a><br /> </p> </div> </div> </div> </div> </div> </div></div> </div> </section> <!-- Getting class names set from developer configurations and combining it with the one configured in the style tab --> <section class="column-control flex-layout--pin-cta has-padding-top--15 aem-GridColumn aem-GridColumn--default--12"> <div class="container"> <div class="row"><div class="col-md-6 col-12"><div class="content-tile content-tile-panel-item-main behavior--none content-tile-portrait default-layout-alignment default-offset bgcolor--default text-primary-link default-btn-type default-btn-size default-btn-width pad--default__figure pad-eq-vertical--default__caption pad-eq-horizontal--default__caption default-color title-typesize--h5 default-title-typefamily default-title-typeweight default-title-color default-subtitle-typesize default-subtitle-typefamily default-subtitle-typeweight default-subtitle-color default-content-tile-text--col-count default-rule default-corner-radius default-shadow section"> <div class="content-tile-container"> <div class="content-tile__figure"> <div class="content-tile__figcaption"> <h3 class="content-tile__title">Edexcel and regulated qualifications</h3> <div class="content-tile-text rte-container"><p>I am a customer for assessments/qualifications<br /> </p> <p><a href="https://qualifications.pearson.com/en/privacy-policy.html" target="_blank">View privacy notice</a></p> </div> </div> </div> </div> </div> </div><div class="col-md-6 col-12"><div class="content-tile content-tile-panel-item-main behavior--none content-tile-portrait default-layout-alignment default-offset bgcolor--default text-primary-link default-btn-type default-btn-size default-btn-width pad--default__figure pad-eq-vertical--default__caption pad-eq-horizontal--default__caption default-color title-typesize--h5 default-title-typefamily default-title-typeweight default-title-color default-subtitle-typesize default-subtitle-typefamily default-subtitle-typeweight default-subtitle-color default-content-tile-text--col-count default-rule default-corner-radius default-shadow section"> <div class="content-tile-container"> <div class="content-tile__figure"> <div class="content-tile__figcaption"> <h3 class="content-tile__title">Legacy Privacy Notices</h3> <div class="content-tile-text rte-container"><p><a href="https://www.pearson.com/privacy-center/legacy-privacy-notices.html">View legacy privacy notices</a><br /> </p> </div> </div> </div> </div> </div> </div></div> </div> </section> <!-- Getting class names set from developer configurations and combining it with the one configured in the style tab --> <section class="column-control bgcolor--ui-01 aem-GridColumn aem-GridColumn--default--12"> <div class="container"> <div class="row"><div class="col-md-2 col-12"></div><div class="col-md-8 col-12"><div class="content-tile section"> <div class="content-tile-container"> <div class="content-tile__figure"> <div class="content-tile__figcaption"> <div class="content-tile-text rte-container"><h2 style="text-align: center;">Cookies</h2> <p>We and our third-party partners use cookies and similar technologies to run the website. Some cookies are strictly necessary. We also use optional cookies to provide a more personalized experience, improve the way our websites work and support our marketing operations. Optional cookies will only be set with your consent. For more information see our <a href="https://www.pearson.com/en-us/legal-information/cookie-policy.html">Cookie Notice</a></p> </div> </div> </div> </div> </div> </div><div class="col-md-2 col-12"></div></div> </div> </section> <!-- Getting class names set from developer configurations and combining it with the one configured in the style tab --> <div class="embed aem-GridColumn aem-GridColumn--default--12"> <div class="aem-Grid aem-Grid--12 aem-Grid--default--12 "> <!-- Getting class names set from developer configurations and combining it with the one configured in the style tab --> <section class="column-control content-filter-container bgcolor--background-medium default-padding-top default-padding-bottom aem-GridColumn aem-GridColumn--default--12"> <div class="container"> <div class="row"><div class="col-md-6 col-12"><div class="content-tile section"> <div class="content-tile-container"> <div class="content-tile__figure"> <picture style="--original-image-ratio: 2"> <source srcset="/content/dam/global-store/global/privacy-center/1600x800-offset-832222.jpg.transform/tiny-size-xs/img.jpeg" media="(max-width:320px)"/> <source srcset="/content/dam/global-store/global/privacy-center/1600x800-offset-832222.jpg.transform/tiny-size-xl/img.jpeg" media="(max-width:480px)"/> <source srcset="/content/dam/global-store/global/privacy-center/1600x800-offset-832222.jpg.transform/medium-size/img.jpeg" media="(max-width:991px)"/> <source srcset="/content/dam/global-store/global/privacy-center/1600x800-offset-832222.jpg.transform/big-size-xs/img.jpeg" media="(max-width:1199px)"/> <source srcset="/content/dam/global-store/global/privacy-center/1600x800-offset-832222.jpg.transform/big-size-xl/img.jpeg" media="(min-width:1200px)"/> <img loading='lazy' src="/content/dam/global-store/global/privacy-center/1600x800-offset-832222.jpg" alt="" role="presentation"/> </picture> </div> </div> </div> </div><div class="col-md-6 col-12"><div class="content-tile pad-bottom--0__pad-top--30__caption pad-eq-horizontal--60__caption section"> <div class="content-tile-container"> <div class="content-tile__figure"> <div class="content-tile__figcaption"> <h2 class="content-tile__title">Contact us</h2> <div class="content-tile-text rte-container"><p><a href="mailto:dataprivacy@pearson.com">dataprivacy@pearson.com</a><br /> </p> <p> </p> </div> </div> </div> </div> </div> <div class="content-tile use-button-tertiary default-btn-size default-btn-width pad-bottom--0__pad-top--15__caption pad-eq-horizontal--60__caption section"> <div class="content-tile-container"> <div class="content-tile__figure"> <div class="content-tile__figcaption"> <div class="content-tile-text rte-container"><p><a href="https://support.pearson.com/getsupport/s/" target="_blank">Customer Support Portal</a></p> </div> </div> </div> </div> </div> </div></div> </div> </section> </div> </div> </div> </div> </main> <footer><div> <div class="aem-Grid aem-Grid--12 aem-Grid--default--12 "> <!-- Getting class names set from developer configurations and combining it with the one configured in the style tab --> <div class="iparsys parsys aem-GridColumn aem-GridColumn--default--12"><div class="section"><div class="new"></div> </div><div class="iparys_inherited"><div class="iparsys parsys"><div class="experiencefragment section"> <div class="aem-Grid aem-Grid--12 aem-Grid--default--12 "> <!-- Getting class names set from developer configurations and combining it with the one configured in the style tab --> <section class="column-control he-footer-global layout-default bgcolor--default clipping-default gradients-default default-animation default-gutters has-padding-top--none has-padding-bottom--none default-padding-horizontal default-min-height default-rule default-corner-radius default-shadow aem-GridColumn aem-GridColumn--default--12"> <div class="container"> <div class="row"><div class="col-12"><section class="column-control layout-default bgcolor--default clipping-default gradients-default default-animation default-gutters default-padding-top default-padding-bottom default-padding-horizontal default-min-height default-rule default-corner-radius default-shadow section c-footer__main"> <div class="row"><div class="col-md-3 col-12"><div class="logo-v2 section c-footer__logo"> <a id="footer__vCake-logo" href="https://www.pearson.com/en.html"> <picture> <source media="(max-width: 800px)" srcset="/content/dam/help/hedReimagined/logos/logo-hed--on-dark.svg"/> <img src="/content/dam/help/hedReimagined/logos/logo-hed--on-dark.svg" alt="Pearson Home"/> </picture> </a> </div> <div class="social-links c-footer__social-links section"> <link rel="stylesheet" href="/etc/clientlibs/platform/aem-core/components/content/social-links.min.ACSHASHda4fe63359349df9709a7c55ffa945e7.css" type="text/css"> <ul class="social-links__list"> <li class="social-links__item"> <a href="https://www.facebook.com/PearsonNorthAmerica" target="_blank" rel="noopener noreferrer" aria-label="Facebook" class="social-links--facebook"></a> </li> <li class="social-links__item"> <a href="https://twitter.com/PearsonNorthAm" target="_blank" rel="noopener noreferrer" aria-label="Twitter" class="social-links--twitter"></a> </li> <li class="social-links__item"> <a href="https://www.youtube.com/c/PearsonNorthAmerica" target="_blank" rel="noopener noreferrer" aria-label="Youtube" class="social-links--youtube"></a> </li> <li class="social-links__item"> <a href="https://www.linkedin.com/showcase/pearson-north-america/" target="_blank" rel="noopener noreferrer" aria-label="LinkedIn" class="social-links--linkedin"></a> </li> <li class="social-links__item"> <a href="https://www.instagram.com/pearsonofficial/" target="_blank" rel="noopener noreferrer" aria-label="Instagram" class="social-links--instagram"></a> </li> </ul> </div> <div class="parsys section"><div class="parsys section"><div class="parsys section"><div class="locale-selection he-nav--mobile-only section"> <div> <button class="locale-selection__button selected_en" aria-haspopup="true" aria-label="Locale Selection. Currently selected: All countries" aria-expanded="false" aria-controls="locale-selection-dropdown"> All countries </button> <div class="locale-selection__dropdown" aria-describedby="locale-selection-description" id="locale-selection-dropdown"> <ul role="menu" aria-label="Locale Selection"> <li role="none"> <a role="menuitem" lang="en-US" hreflang="en-US" href="https://www.pearson.com/en-us.html"> United States </a> </li> <li role="none"> <a role="menuitem" lang="en-CA" hreflang="en-CA" href="https://www.pearson.com/en-ca.html"> Canada </a> </li> <li role="none"> <a role="menuitem" lang="en-GB" hreflang="en-GB" href="https://www.pearson.com/en-gb.html"> United Kingdom </a> </li> <li role="none"> <a role="menuitem" lang="en" hreflang="en" href="https://www.pearson.com/location-selector.html" aria-selected="true"> All countries </a> </li> </ul> </div> </div> </div> </div> <div class="parsys section"><div class="parsys section"></div> </div> </div> </div> <div class="parsys section"></div> </div><div class="col-md-9 col-12"><section class="column-control layout-default bgcolor--default clipping-default gradients-default default-animation default-gutters has-padding-top--none has-padding-bottom--none default-padding-horizontal default-min-height default-rule default-corner-radius default-shadow section c-footer__navigation"> <div class="row"><div class="col-20pct col-12"><div class="accordion acord section"> <section class="accordion-panel"> <h3 class="accordion-panel-header"> <button aria-controls="-2033578333-1" aria-expanded="false"> <span>Explore</span> <span class="pull-right fa fa-plus"></span> </button> </h3> <div class="accordion-panel-content accordion-panel-hide" id="-2033578333-1"> <div class="link-list default section c-footer__link-list"> <div> <ul id="mn-root--842179"> <li> <a href="https://www.pearson.com/schools.html">Schools </a> </li> <li> <a href="https://www.pearson.com/higher-education.html">College </a> </li> <li> <a href="https://www.pearson.com/work.html">Work </a> </li> </ul> </div> </div> </div> </section> </div> </div><div class="col-20pct col-12"><div class="accordion section"> <section class="accordion-panel"> <h3 class="accordion-panel-header"> <button aria-controls="1750854786-1" aria-expanded="false"> <span>Major businesses</span> <span class="pull-right fa fa-plus"></span> </button> </h3> <div class="accordion-panel-content accordion-panel-hide" id="1750854786-1"> <div class="link-list default section c-footer__link-list"> <div> <ul id="mn-root--1808689700"> <li> <a href="https://www.pearsonassessments.com/" target="_blank" class="new-window" rel="noreferrer">Assessments </a> </li> <li> <a href="https://www.pearson.com/languages" target="_blank" class="new-window" rel="noreferrer">Pearson Languages </a> </li> <li> <a href="https://www.pearson.com/international-schools" target="_blank" class="new-window" rel="noreferrer">International Schools </a> </li> <li> <a href="https://home.pearsonvue.com/" target="_blank" class="new-window" rel="noreferrer">Pearson VUE </a> </li> <li> <a href="http://www.connectionseducation.com/" target="_blank" class="new-window" rel="noreferrer">Virtual Schools </a> </li> </ul> </div> </div> <div class="ghost section"> </div> </div> </section> </div> </div><div class="col-20pct col-12"><div class="accordion section"> <section class="accordion-panel"> <h3 class="accordion-panel-header"> <button aria-controls="1074786963-1" aria-expanded="false"> <span>About us</span> <span class="pull-right fa fa-plus"></span> </button> </h3> <div class="accordion-panel-content accordion-panel-hide" id="1074786963-1"> <div class="link-list default section c-footer__link-list"> <div> <ul id="mn-root-473564321"> <li> <a href="https://pearson.jobs/" target="_blank" class="new-window" rel="noreferrer">Careers </a> </li> <li> <a href="https://www.pearson.com/efficacy.html">Efficacy at Pearson </a> </li> <li> <a href="https://plc.pearson.com/investors" target="_blank" class="new-window" rel="noreferrer">Investor Relations </a> </li> <li> <a href="https://plc.pearson.com/company" target="_blank" class="new-window" rel="noreferrer">Our Company </a> </li> <li> <a href="https://www.pearson.com">Pearson.com </a> </li> <li> <a href="https://www.pearson.com/report-piracy.html">Report Piracy </a> </li> </ul> </div> </div> <div class="ghost section"> </div> </div> </section> </div> </div><div class="col-20pct col-12"><div class="ghost section"> </div> </div><div class="col-20pct col-12"><div class="ghost section"> </div> </div></div> </section> </div></div> </section> <section class="column-control layout-default bgcolor--default clipping-default gradients-default default-animation default-gutters has-padding-top--30 has-padding-bottom--30 default-padding-horizontal default-min-height default-rule default-corner-radius default-shadow section c-footer__main c-footer__bottom"> <div class="row"><div class="col-12"><div class="link-list default section c-footer__link-list"> <div> <ul id="mn-root-2107762321"> <li> <a href="https://www.pearson.com/legal-information/terms-of-use.html">Terms of Use </a> </li> <li> <a href="https://www.pearson.com/privacy-center/privacy-notices.html">Privacy </a> </li> <li> <a href="https://www.pearson.com/legal-information/cookie-policy.html" aria-label="Cookie Settings" id="open-ot-preference-modal">Cookies </a> </li> <li> <a href="https://www.pearson.com/legal-information/cookie-policy.html#do-not-sell-or-share-my-data">Do Not Sell Or Share My Personal Information </a> </li> <li> <a href="https://www.pearson.com/legal-information/accessibility.html">Accessibility </a> </li> <li> <a href="https://www.pearson.com/legal-information/patent-notice.html">Patent Notice </a> </li> </ul> </div> </div> <div class="text section c-footer__bottom-copyright"> <p>© 1996–2024 Pearson All rights reserved.</p> </div> </div></div> </section> </div></div> </div> </section> </div> </div> </div> </div> </div> </div> </div> </footer> <script src="/etc/clientlibs/global-store/parse-data-layer.min.ACSHASHf33cc89d499e9552305582b58c89767d.js"></script> <script src="/etc/clientlibs/one-dot-com/one-dot-com/he-js-base.min.ACSHASH911bcaf7fe95ad924b4d5441f7b59a72.js"></script> <script src="/etc/clientlibs/one-dot-com/one-dot-com/column-control-collapse.min.ACSHASHedfe505c62d117a26f847348e9799da0.js"></script> <script src="/etc/clientlibs/one-dot-com/one-dot-com/hed-navigation/nav-footer.min.ACSHASH7dd356d31b898e675466aa6dcdb753d3.js"></script> <script src="/etc/clientlibs/one-dot-com/one-dot-com/hed-navigation/nav-aem-header.min.ACSHASHe9fe6611a4cf481434e820d55dd5325b.js"></script> <script src="/etc/clientlibs/one-dot-com/one-dot-com/he-ies-signin-modal.min.ACSHASH241772f65f00a3abe7fe627720819e23.js"></script> <div class="cloudservice pearson-data-layer"> <script src="/etc/clientlibs/platform/aem-core/data-layer/user-info.min.ACSHASHca102e1b1b56cceaaa7c112f1b42d549.js"></script> </div> <div class="cloudservice gtm"> <!-- Google Tag Manager (noscript) --> <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-MVH69VF" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> <!-- End Google Tag Manager (noscript) --> </div> <div class="cloudservice ecommerce-service-component"> <script src="https://www.pearson.com/store/_ui/addons/b2bacceleratoraddon/responsive/common/js/acc.orderform.js"></script> <script src="https://www.pearson.com/store/_ui/addons/pmciamaddon/responsive/common/js/pmciamaddon.js"></script> <div id="expectedMarkup" data-expected-markup="userNav"></div> <script src="/etc/clientlibs/platform/aem-core/components/content/ecommerce-header.min.ACSHASH0b52cc84ef21ee9597e975519ebcf164.js"></script> </div> <div class="cloudservice geolocation-service-component"></div> <div class="cloudservice script-include-service"> </div> </body> </html>