CINXE.COM

The Open Group Publications | Templates and Artifacts

<!doctype html> <html lang="en"> <head > <meta charset="utf-8"/><script type="text/javascript">(window.NREUM||(NREUM={})).init={ajax:{deny_list:["bam.nr-data.net"]}};(window.NREUM||(NREUM={})).loader_config={licenseKey:"NRJS-61380f36d568c6a38e5",applicationID:"502041541"};;/*! For license information please see nr-loader-rum-1.274.0.min.js.LICENSE.txt */ (()=>{var e,t,r={8122:(e,t,r)=>{"use strict";r.d(t,{a:()=>i});var n=r(944);function i(e,t){try{if(!e||"object"!=typeof e)return(0,n.R)(3);if(!t||"object"!=typeof t)return(0,n.R)(4);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{if(null===e[a]){r[a]=null;continue}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.R)(1,e)}return r}catch(e){(0,n.R)(2,e)}}},2555:(e,t,r)=>{"use strict";r.d(t,{Vp:()=>c,fn:()=>s,x1:()=>u});var n=r(384),i=r(8122);const o={beacon:n.NT.beacon,errorBeacon:n.NT.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){try{const t=c(e);return!!t.licenseKey&&!!t.errorBeacon&&!!t.applicationID}catch(e){return!1}}function c(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 u(e,t){if(!e)throw new Error("All info objects require an agent identifier!");a[e]=(0,i.a)(t,o);const r=(0,n.nY)(e);r&&(r.info=a[e])}},9417:(e,t,r)=>{"use strict";r.d(t,{D0:()=>g,gD:()=>h,xN:()=>p});var n=r(993);const i=e=>{if(!e||"string"!=typeof e)return!1;try{document.createDocumentFragment().querySelector(e)}catch{return!1}return!0};var o=r(2614),a=r(944),s=r(384),c=r(8122);const u="[data-nr-mask]",d=()=>{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{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},feature_flags:[],generic_events:{enabled:!0,harvestTimeSeconds:30,autoStart:!0},harvest:{tooManyRequestsDelay:60},jserrors:{enabled:!0,harvestTimeSeconds:10,autoStart:!0},logging:{enabled:!0,harvestTimeSeconds:10,autoStart:!0,level:n.p_.INFO},metrics:{enabled:!0,autoStart:!0},obfuscate:void 0,page_action:{enabled:!0},page_view_event:{enabled:!0,autoStart:!0},page_view_timing:{enabled:!0,harvestTimeSeconds:30,autoStart:!0},performance:{capture_marks:!1,capture_measures:!1},privacy:{cookies_enabled:!0},proxy:{assets:void 0,beacon:void 0},session:{expiresMs:o.wk,inactiveMs:o.BB},session_replay:{autoStart:!0,enabled:!1,harvestTimeSeconds:60,preload:!1,sampling_rate:10,error_sampling_rate:100,collect_fonts:!1,inline_images:!1,fix_stylesheets:!0,mask_all_inputs:!0,get mask_text_selector(){return e.mask_selector},set mask_text_selector(t){i(t)?e.mask_selector="".concat(t,",").concat(u):""===t||null===t?e.mask_selector=u:(0,a.R)(5,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){i(t)?e.block_selector+=",".concat(t):""!==t&&(0,a.R)(6,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,a.R)(7,t)}},session_trace:{enabled:!0,harvestTimeSeconds:10,autoStart:!0},soft_navigations:{enabled:!0,harvestTimeSeconds:10,autoStart:!0},spa:{enabled:!0,harvestTimeSeconds:10,autoStart:!0},ssl:void 0,user_actions:{enabled:!0}}},l={},f="All configuration objects require an agent identifier!";function g(e){if(!e)throw new Error(f);if(!l[e])throw new Error("Configuration for ".concat(e," was never set"));return l[e]}function p(e,t){if(!e)throw new Error(f);l[e]=(0,c.a)(t,d());const r=(0,s.nY)(e);r&&(r.init=l[e])}function h(e,t){if(!e)throw new Error(f);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}},3371:(e,t,r)=>{"use strict";r.d(t,{V:()=>f,f:()=>l});var n=r(8122),i=r(384),o=r(6154),a=r(9324);let s=0;const c={buildEnv:a.F3,distMethod:a.Xs,version:a.xv,originTime:o.WN},u={customTransaction:void 0,disabled:!1,isolatedBacklog:!1,loaderType:void 0,maxBytes:3e4,onerror:void 0,ptid:void 0,releaseIds:{},appMetadata:{},session:void 0,denyList:void 0,timeKeeper:void 0,obfuscator:void 0},d={};function l(e){if(!e)throw new Error("All runtime objects require an agent identifier!");if(!d[e])throw new Error("Runtime for ".concat(e," was never set"));return d[e]}function f(e,t){if(!e)throw new Error("All runtime objects require an agent identifier!");d[e]={...(0,n.a)(t,u),...c},Object.hasOwnProperty.call(d[e],"harvestCount")||Object.defineProperty(d[e],"harvestCount",{get:()=>++s});const r=(0,i.nY)(e);r&&(r.runtime=d[e])}},9324:(e,t,r)=>{"use strict";r.d(t,{F3:()=>i,Xs:()=>o,xv:()=>n});const n="1.274.0",i="PROD",o="CDN"},6154:(e,t,r)=>{"use strict";r.d(t,{OF:()=>c,RI:()=>i,WN:()=>d,bv:()=>o,gm:()=>a,mw:()=>s,sb:()=>u});var n=r(1863);const i="undefined"!=typeof window&&!!window.document,o="undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self.navigator instanceof WorkerNavigator||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis.navigator instanceof WorkerNavigator),a=i?window:"undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis),s=Boolean("hidden"===a?.document?.visibilityState),c=/iPad|iPhone|iPod/.test(a.navigator?.userAgent),u=c&&"undefined"==typeof SharedWorker,d=((()=>{const e=a.navigator?.userAgent?.match(/Firefox[/\s](\d+\.\d+)/);Array.isArray(e)&&e.length>=2&&e[1]})(),Date.now()-(0,n.t)())},1687:(e,t,r)=>{"use strict";r.d(t,{Ak:()=>c,Ze:()=>l,x3:()=>u});var n=r(7836),i=r(3606),o=r(860),a=r(2646);const s={};function c(e,t){const r={staged:!1,priority:o.P3[t]||0};d(e),s[e].get(t)||s[e].set(t,r)}function u(e,t){e&&s[e]&&(s[e].get(t)&&s[e].delete(t),g(e,t,!1),s[e].size&&f(e))}function d(e){if(!e)throw new Error("agentIdentifier required");s[e]||(s[e]=new Map)}function l(e="",t="feature",r=!1){if(d(e),!e||!s[e].get(t)||r)return g(e,t);s[e].get(t).staged=!0,f(e)}function f(e){const t=Array.from(s[e]);t.every((([e,t])=>t.staged))&&(t.sort(((e,t)=>e[1].priority-t[1].priority)),t.forEach((([t])=>{s[e].delete(t),g(e,t)})))}function g(e,t,r=!0){const o=e?n.ee.get(e):n.ee,s=i.i.handlers;if(!o.aborted&&o.backlog&&s){if(r){const e=o.backlog[t],r=s[t];if(r){for(let t=0;e&&t<e.length;++t)p(e[t],r);Object.entries(r).forEach((([e,t])=>{Object.values(t||{}).forEach((t=>{t[0]?.on&&t[0]?.context()instanceof a.y&&t[0].on(e,t[1])}))}))}}o.isolatedBacklog||delete s[t],o.backlog[t]=null,o.emit("drain-"+t,[])}}function p(e,t){var r=e[1];Object.values(t[r]||{}).forEach((t=>{var r=e[0];if(t[0]===r){var n=t[1],i=e[3],o=e[2];n.apply(i,o)}}))}},7836:(e,t,r)=>{"use strict";r.d(t,{P:()=>c,ee:()=>u});var n=r(384),i=r(8990),o=r(3371),a=r(2646),s=r(5607);const c="nr@context:".concat(s.W),u=function e(t,r){var n={},s={},d={},l=!1;try{l=16===r.length&&(0,o.f)(r).isolatedBacklog}catch(e){}var f={on:p,addEventListener:p,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=g(n),c=h(e),d=c.length,l=0;l<d;l++)c[l].apply(a,r);var p=m()[s[e]];p&&p.push([f,e,r,a]);return a},get:v,listeners:h,context:g,buffer:function(e,t){const r=m();if(t=t||"feature",f.aborted)return;Object.entries(e||{}).forEach((([e,n])=>{s[n]=t,t in r||(r[t]=[])}))},abort:function(){f._aborted=!0,Object.keys(f.backlog).forEach((e=>{delete f.backlog[e]}))},isBuffering:function(e){return!!m()[s[e]]},debugId:r,backlog:l?{}:t&&"object"==typeof t.backlog?t.backlog:{},isolatedBacklog:l};return Object.defineProperty(f,"aborted",{get:()=>{let e=f._aborted||!1;return e||(t&&(e=t.aborted),e)}}),f;function g(e){return e&&e instanceof a.y?e:e?(0,i.I)(e,c,(()=>new a.y(c))):new a.y(c)}function p(e,t){n[e]=h(e).concat(t)}function h(e){return n[e]||[]}function v(t){return d[t]=d[t]||e(f,t)}function m(){return f.backlog}}(void 0,"globalEE"),d=(0,n.Zm)();d.ee||(d.ee=u)},2646:(e,t,r)=>{"use strict";r.d(t,{y:()=>n});class n{constructor(e){this.contextId=e}}},9908:(e,t,r)=>{"use strict";r.d(t,{d:()=>n,p:()=>i});var n=r(7836).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))}},3606:(e,t,r)=>{"use strict";r.d(t,{i:()=>o});var n=r(9908);o.on=a;var i=o.handlers={};function o(e,t,r,o){a(o||n.d,i,e,t,r)}function a(e,t,r,i,o){o||(o="feature"),e||(e=n.d);var a=t[o]=t[o]||{};(a[r]=a[r]||[]).push([e,i])}},3878:(e,t,r)=>{"use strict";function n(e,t){return{capture:e,passive:!1,signal:t}}function i(e,t,r=!1,i){window.addEventListener(e,t,n(r,i))}function o(e,t,r=!1,i){document.addEventListener(e,t,n(r,i))}r.d(t,{DD:()=>o,jT:()=>n,sp:()=>i})},5607:(e,t,r)=>{"use strict";r.d(t,{W:()=>n});const n=(0,r(9566).bz)()},9566:(e,t,r)=>{"use strict";r.d(t,{LA:()=>s,bz:()=>a});var n=r(6154);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.gm?.crypto||n.gm?.msCrypto;let t,r=0;return e&&e.getRandomValues&&(t=e.getRandomValues(new Uint8Array(30))),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.gm?.crypto||n.gm?.msCrypto;let r,i=0;t&&t.getRandomValues&&(r=t.getRandomValues(new Uint8Array(e)));const a=[];for(var s=0;s<e;s++)a.push(o(r,i++).toString(16));return a.join("")}},2614:(e,t,r)=>{"use strict";r.d(t,{BB:()=>a,H3:()=>n,g:()=>u,iL:()=>c,tS:()=>s,uh:()=>i,wk:()=>o});const n="NRBA",i="SESSION",o=144e5,a=18e5,s={STARTED:"session-started",PAUSE:"session-pause",RESET:"session-reset",RESUME:"session-resume",UPDATE:"session-update"},c={SAME_TAB:"same-tab",CROSS_TAB:"cross-tab"},u={OFF:0,FULL:1,ERROR:2}},1863:(e,t,r)=>{"use strict";function n(){return Math.floor(performance.now())}r.d(t,{t:()=>n})},944:(e,t,r)=>{"use strict";function n(e,t){"function"==typeof console.debug&&console.debug("New Relic Warning: https://github.com/newrelic/newrelic-browser-agent/blob/main/docs/warning-codes.md#".concat(e),t)}r.d(t,{R:()=>n})},5284:(e,t,r)=>{"use strict";r.d(t,{t:()=>c,B:()=>s});var n=r(7836),i=r(6154);const o="newrelic";const a=new Set,s={};function c(e,t){const r=n.ee.get(t);s[t]??={},e&&"object"==typeof e&&(a.has(t)||(r.emit("rumresp",[e]),s[t]=e,a.add(t),function(e={}){try{i.gm.dispatchEvent(new CustomEvent(o,{detail:e}))}catch(e){}}({loaded:!0})))}},8990:(e,t,r)=>{"use strict";r.d(t,{I:()=>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}},6389:(e,t,r)=>{"use strict";function n(e,t=500,r={}){const n=r?.leading||!1;let i;return(...r)=>{n&&void 0===i&&(e.apply(this,r),i=setTimeout((()=>{i=clearTimeout(i)}),t)),n||(clearTimeout(i),i=setTimeout((()=>{e.apply(this,r)}),t))}}function i(e){let t=!1;return(...r)=>{t||(t=!0,e.apply(this,r))}}r.d(t,{J:()=>i,s:()=>n})},5289:(e,t,r)=>{"use strict";r.d(t,{GG:()=>o,sB:()=>a});var n=r(3878);function i(){return"undefined"==typeof document||"complete"===document.readyState}function o(e,t){if(i())return e();(0,n.sp)("load",e,t)}function a(e){if(i())return e();(0,n.DD)("DOMContentLoaded",e)}},384:(e,t,r)=>{"use strict";r.d(t,{NT:()=>o,US:()=>d,Zm:()=>a,bQ:()=>c,dV:()=>s,nY:()=>u,pV:()=>l});var n=r(6154),i=r(1863);const o={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net"};function a(){return n.gm.NREUM||(n.gm.NREUM={}),void 0===n.gm.newrelic&&(n.gm.newrelic=n.gm.NREUM),n.gm.NREUM}function s(){let e=a();return e.o||(e.o={ST:n.gm.setTimeout,SI:n.gm.setImmediate,CT:n.gm.clearTimeout,XHR:n.gm.XMLHttpRequest,REQ:n.gm.Request,EV:n.gm.Event,PR:n.gm.Promise,MO:n.gm.MutationObserver,FETCH:n.gm.fetch,WS:n.gm.WebSocket}),e}function c(e,t){let r=a();r.initializedAgents??={},t.initializedAt={ms:(0,i.t)(),date:new Date},r.initializedAgents[e]=t}function u(e){let t=a();return t.initializedAgents?.[e]}function d(e,t){a()[e]=t}function l(){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()}},2843:(e,t,r)=>{"use strict";r.d(t,{u:()=>i});var n=r(3878);function i(e,t=!1,r,i){(0,n.DD)("visibilitychange",(function(){if(t)return void("hidden"===document.visibilityState&&e());e(document.visibilityState)}),r,i)}},3434:(e,t,r)=>{"use strict";r.d(t,{YM:()=>c});var n=r(7836),i=r(5607);const o="nr@original:".concat(i.W);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])}},993:(e,t,r)=>{"use strict";r.d(t,{ET:()=>o,p_:()=>i});var n=r(860);const i={ERROR:"ERROR",WARN:"WARN",INFO:"INFO",DEBUG:"DEBUG",TRACE:"TRACE"},o="log";n.K7.logging},3969:(e,t,r)=>{"use strict";r.d(t,{TZ:()=>n,XG:()=>s,rs:()=>i,xV:()=>a,z_:()=>o});const n=r(860).K7.metrics,i="sm",o="cm",a="storeSupportabilityMetrics",s="storeEventMetrics"},6630:(e,t,r)=>{"use strict";r.d(t,{T:()=>n});const n=r(860).K7.pageViewEvent},782:(e,t,r)=>{"use strict";r.d(t,{T:()=>n});const n=r(860).K7.pageViewTiming},6344:(e,t,r)=>{"use strict";r.d(t,{G4:()=>i});var n=r(2614);r(860).K7.sessionReplay;const i={RECORD:"recordReplay",PAUSE:"pauseReplay",REPLAY_RUNNING:"replayRunning",ERROR_DURING_REPLAY:"errorDuringReplay"};n.g.ERROR,n.g.FULL,n.g.OFF},4234:(e,t,r)=>{"use strict";r.d(t,{W:()=>o});var n=r(7836),i=r(1687);class o{constructor(e,t){this.agentIdentifier=e,this.ee=n.ee.get(e),this.featureName=t,this.blocked=!1}deregisterDrain(){(0,i.x3)(this.agentIdentifier,this.featureName)}}},7603:(e,t,r)=>{"use strict";r.d(t,{j:()=>P});var n=r(860),i=r(2555),o=r(3371),a=r(9908),s=r(7836),c=r(1687),u=r(5289),d=r(6154),l=r(944),f=r(3969),g=r(384),p=r(6344);const h=["setErrorHandler","finished","addToTrace","addRelease","addPageAction","setCurrentRouteName","setPageViewName","setCustomAttribute","interaction","noticeError","setUserId","setApplicationVersion","start",p.G4.RECORD,p.G4.PAUSE,"log","wrapLogger"],v=["setErrorHandler","finished","addToTrace","addRelease"];var m=r(1863),b=r(2614),y=r(993);var w=r(2646),A=r(3434);function R(e,t,r,n){if("object"!=typeof t||!t||"string"!=typeof r||!r||"function"!=typeof t[r])return(0,l.R)(29);const i=function(e){return(e||s.ee).get("logger")}(e),o=(0,A.YM)(i),a=new w.y(s.P);return a.level=n.level,a.customAttributes=n.customAttributes,o.inPlace(t,[r],"wrap-logger-",a),i}function E(){const e=(0,g.pV)();h.forEach((t=>{e[t]=(...r)=>function(t,...r){let n=[];return Object.values(e.initializedAgents).forEach((e=>{e&&e.api?e.exposed&&e.api[t]&&n.push(e.api[t](...r)):(0,l.R)(38,t)})),n.length>1?n:n[0]}(t,...r)}))}const x={};function _(e,t,g=!1){t||(0,c.Ak)(e,"api");const h={};var w=s.ee.get(e),A=w.get("tracer");x[e]=b.g.OFF,w.on(p.G4.REPLAY_RUNNING,(t=>{x[e]=t}));var E="api-",_=E+"ixn-";function N(t,r,n,o){const a=(0,i.Vp)(e);return null===r?delete a.jsAttributes[t]:(0,i.x1)(e,{...a,jsAttributes:{...a.jsAttributes,[t]:r}}),j(E,n,!0,o||null===r?"session":void 0)(t,r)}function T(){}h.log=function(e,{customAttributes:t={},level:r=y.p_.INFO}={}){(0,a.p)(f.xV,["API/log/called"],void 0,n.K7.metrics,w),function(e,t,r={},i=y.p_.INFO){(0,a.p)(f.xV,["API/logging/".concat(i.toLowerCase(),"/called")],void 0,n.K7.metrics,e),(0,a.p)(y.ET,[(0,m.t)(),t,r,i],void 0,n.K7.logging,e)}(w,e,t,r)},h.wrapLogger=(e,t,{customAttributes:r={},level:i=y.p_.INFO}={})=>{(0,a.p)(f.xV,["API/wrapLogger/called"],void 0,n.K7.metrics,w),R(w,e,t,{customAttributes:r,level:i})},v.forEach((e=>{h[e]=j(E,e,!0,"api")})),h.addPageAction=j(E,"addPageAction",!0,n.K7.genericEvents),h.setPageViewName=function(t,r){if("string"==typeof t)return"/"!==t.charAt(0)&&(t="/"+t),(0,o.f)(e).customTransaction=(r||"http://custom.transaction")+t,j(E,"setPageViewName",!0)()},h.setCustomAttribute=function(e,t,r=!1){if("string"==typeof e){if(["string","number","boolean"].includes(typeof t)||null===t)return N(e,t,"setCustomAttribute",r);(0,l.R)(40,typeof t)}else(0,l.R)(39,typeof e)},h.setUserId=function(e){if("string"==typeof e||null===e)return N("enduser.id",e,"setUserId",!0);(0,l.R)(41,typeof e)},h.setApplicationVersion=function(e){if("string"==typeof e||null===e)return N("application.version",e,"setApplicationVersion",!1);(0,l.R)(42,typeof e)},h.start=()=>{try{(0,a.p)(f.xV,["API/start/called"],void 0,n.K7.metrics,w),w.emit("manual-start-all")}catch(e){(0,l.R)(23,e)}},h[p.G4.RECORD]=function(){(0,a.p)(f.xV,["API/recordReplay/called"],void 0,n.K7.metrics,w),(0,a.p)(p.G4.RECORD,[],void 0,n.K7.sessionReplay,w)},h[p.G4.PAUSE]=function(){(0,a.p)(f.xV,["API/pauseReplay/called"],void 0,n.K7.metrics,w),(0,a.p)(p.G4.PAUSE,[],void 0,n.K7.sessionReplay,w)},h.interaction=function(e){return(new T).get("object"==typeof e?e:{})};const S=T.prototype={createTracer:function(e,t){var r={},i=this,o="function"==typeof t;return(0,a.p)(f.xV,["API/createTracer/called"],void 0,n.K7.metrics,w),g||(0,a.p)(_+"tracer",[(0,m.t)(),e,r],i,n.K7.spa,w),function(){if(A.emit((o?"":"no-")+"fn-start",[(0,m.t)(),i,o],r),o)try{return t.apply(this,arguments)}catch(e){const t="string"==typeof e?new Error(e):e;throw A.emit("fn-err",[arguments,this,t],r),t}finally{A.emit("fn-end",[(0,m.t)()],r)}}}};function j(e,t,r,i){return function(){return(0,a.p)(f.xV,["API/"+t+"/called"],void 0,n.K7.metrics,w),i&&(0,a.p)(e+t,[(0,m.t)(),...arguments],r?null:this,i,w),r?void 0:this}}function k(){r.e(296).then(r.bind(r,8778)).then((({setAPI:t})=>{t(e),(0,c.Ze)(e,"api")})).catch((e=>{(0,l.R)(27,e),w.abort()}))}return["actionText","setName","setAttribute","save","ignore","onEnd","getContext","end","get"].forEach((e=>{S[e]=j(_,e,void 0,g?n.K7.softNav:n.K7.spa)})),h.setCurrentRouteName=g?j(_,"routeName",void 0,n.K7.softNav):j(E,"routeName",!0,n.K7.spa),h.noticeError=function(t,r){"string"==typeof t&&(t=new Error(t)),(0,a.p)(f.xV,["API/noticeError/called"],void 0,n.K7.metrics,w),(0,a.p)("err",[t,(0,m.t)(),!1,r,!!x[e]],void 0,n.K7.jserrors,w)},d.RI?(0,u.GG)((()=>k()),!0):k(),h}var N=r(9417),T=r(8122);const S={accountID:void 0,trustKey:void 0,agentID:void 0,licenseKey:void 0,applicationID:void 0,xpid:void 0},j={};var k=r(5284);const I=e=>{const t=e.startsWith("http");e+="/",r.p=t?e:"https://"+e};let O=!1;function P(e,t={},r,n){let{init:a,info:c,loader_config:u,runtime:l={},exposed:f=!0}=t;l.loaderType=r;const p=(0,g.pV)();c||(a=p.init,c=p.info,u=p.loader_config),(0,N.xN)(e.agentIdentifier,a||{}),function(e,t){if(!e)throw new Error("All loader-config objects require an agent identifier!");j[e]=(0,T.a)(t,S);const r=(0,g.nY)(e);r&&(r.loader_config=j[e])}(e.agentIdentifier,u||{}),c.jsAttributes??={},d.bv&&(c.jsAttributes.isWorker=!0),(0,i.x1)(e.agentIdentifier,c);const h=(0,N.D0)(e.agentIdentifier),v=[c.beacon,c.errorBeacon];O||(h.proxy.assets&&(I(h.proxy.assets),v.push(h.proxy.assets)),h.proxy.beacon&&v.push(h.proxy.beacon),E(),(0,g.US)("activatedFeatures",k.B),e.runSoftNavOverSpa&&=!0===h.soft_navigations.enabled&&h.feature_flags.includes("soft_nav")),l.denyList=[...h.ajax.deny_list||[],...h.ajax.block_internal?v:[]],l.ptid=e.agentIdentifier,(0,o.V)(e.agentIdentifier,l),e.ee=s.ee.get(e.agentIdentifier),void 0===e.api&&(e.api=_(e.agentIdentifier,n,e.runSoftNavOverSpa)),void 0===e.exposed&&(e.exposed=f),O=!0}},8374:(e,t,r)=>{r.nc=(()=>{try{return document?.currentScript?.nonce}catch(e){}return""})()},860:(e,t,r)=>{"use strict";r.d(t,{$J:()=>o,K7:()=>n,P3:()=>i});const n={ajax:"ajax",genericEvents:"generic_events",jserrors:"jserrors",logging:"logging",metrics:"metrics",pageAction:"page_action",pageViewEvent:"page_view_event",pageViewTiming:"page_view_timing",sessionReplay:"session_replay",sessionTrace:"session_trace",softNav:"soft_navigations",spa:"spa"},i={[n.pageViewEvent]:1,[n.pageViewTiming]:2,[n.metrics]:3,[n.jserrors]:4,[n.spa]:5,[n.ajax]:6,[n.sessionTrace]:7,[n.softNav]:8,[n.sessionReplay]:9,[n.logging]:10,[n.genericEvents]:11},o={[n.pageViewTiming]:"events",[n.ajax]:"events",[n.spa]:"events",[n.softNav]:"events",[n.metrics]:"jserrors",[n.jserrors]:"jserrors",[n.sessionTrace]:"browser/blobs",[n.sessionReplay]:"browser/blobs",[n.logging]:"browser/logs",[n.genericEvents]:"ins"}}},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=>"nr-rum-1.274.0.min.js",i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),e={},t="NRBA-1.274.0.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}}if(!s){c=!0;var f={296:"sha512-gkYkZDAwQ9PwaDXs2YM+rNIdRej1Ac1mupWobRJ8eahQcXz6/sunGZCKklrzi5kWxhOGRZr2tn0rEKuLTXzfAA=="};(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,0!==s.src.indexOf(window.location.origin+"/")&&(s.crossOrigin="anonymous"),f[a]&&(s.integrity=f[a])}e[r]=[n];var g=(t,n)=>{s.onerror=s.onload=null,clearTimeout(p);var i=e[r];if(delete e[r],s.parentNode&&s.parentNode.removeChild(s),i&&i.forEach((e=>e(n))),t)return t(n)},p=setTimeout(g.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=g.bind(null,s.onerror),s.onload=g.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={840:0,374: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.274.0.PROD"]=self["webpackChunk:NRBA-1.274.0.PROD"]||[];r.forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))})(),(()=>{"use strict";i(8374);var e=i(944),t=i(6344),r=i(9566);class n{agentIdentifier;constructor(e=(0,r.LA)(16)){this.agentIdentifier=e}#e(t,...r){if("function"==typeof this.api?.[t])return this.api[t](...r);(0,e.R)(35,t)}addPageAction(e,t){return this.#e("addPageAction",e,t)}setPageViewName(e,t){return this.#e("setPageViewName",e,t)}setCustomAttribute(e,t,r){return this.#e("setCustomAttribute",e,t,r)}noticeError(e,t){return this.#e("noticeError",e,t)}setUserId(e){return this.#e("setUserId",e)}setApplicationVersion(e){return this.#e("setApplicationVersion",e)}setErrorHandler(e){return this.#e("setErrorHandler",e)}addRelease(e,t){return this.#e("addRelease",e,t)}log(e,t){return this.#e("log",e,t)}}class o extends n{#e(t,...r){if("function"==typeof this.api?.[t])return this.api[t](...r);(0,e.R)(35,t)}start(){return this.#e("start")}finished(e){return this.#e("finished",e)}recordReplay(){return this.#e(t.G4.RECORD)}pauseReplay(){return this.#e(t.G4.PAUSE)}addToTrace(e){return this.#e("addToTrace",e)}setCurrentRouteName(e){return this.#e("setCurrentRouteName",e)}interaction(){return this.#e("interaction")}wrapLogger(e,t,r){return this.#e("wrapLogger",e,t,r)}}var a=i(860),s=i(9417);const c=Object.values(a.K7);function u(e){const t={};return c.forEach((r=>{t[r]=function(e,t){return!0===(0,s.gD)(t,"".concat(e,".enabled"))}(r,e)})),t}var d=i(7603);var l=i(1687),f=i(4234),g=i(5289),p=i(6154),h=i(384);const v=e=>p.RI&&!0===(0,s.gD)(e,"privacy.cookies_enabled");function m(e){return!!(0,h.dV)().o.MO&&v(e)&&!0===(0,s.gD)(e,"session_trace.enabled")}var b=i(6389);class y extends f.W{constructor(e,t,r=!0){super(e.agentIdentifier,t),this.auto=r,this.abortHandler=void 0,this.featAggregate=void 0,this.onAggregateImported=void 0,!1===e.init[this.featureName].autoStart&&(this.auto=!1),this.auto?(0,l.Ak)(e.agentIdentifier,t):this.ee.on("manual-start-all",(0,b.J)((()=>{(0,l.Ak)(e.agentIdentifier,this.featureName),this.auto=!0,this.importAggregator(e)})))}importAggregator(t,r={}){if(this.featAggregate||!this.auto)return;let n;this.onAggregateImported=new Promise((e=>{n=e}));const o=async()=>{let o;try{if(v(this.agentIdentifier)){const{setupAgentSession:e}=await i.e(296).then(i.bind(i,3861));o=e(t)}}catch(t){(0,e.R)(20,t),this.ee.emit("internal-error",[t]),this.featureName===a.K7.sessionReplay&&this.abortHandler?.()}try{if(t.sharedAggregator)await t.sharedAggregator;else{t.sharedAggregator=i.e(296).then(i.bind(i,9337));const{EventAggregator:e}=await t.sharedAggregator;t.sharedAggregator=new e}if(!this.#t(this.featureName,o))return(0,l.Ze)(this.agentIdentifier,this.featureName),void n(!1);const{lazyFeatureLoader:e}=await i.e(296).then(i.bind(i,6103)),{Aggregate:a}=await e(this.featureName,"aggregate");this.featAggregate=new a(t,r),n(!0)}catch(t){(0,e.R)(34,t),this.abortHandler?.(),(0,l.Ze)(this.agentIdentifier,this.featureName,!0),n(!1),this.ee&&this.ee.abort()}};p.RI?(0,g.GG)((()=>o()),!0):o()}#t(e,t){switch(e){case a.K7.sessionReplay:return m(this.agentIdentifier)&&!!t;case a.K7.sessionTrace:return!!t;default:return!0}}}var w=i(6630);class A extends y{static featureName=w.T;constructor(e,t=!0){super(e,w.T,t),this.importAggregator(e)}}var R=i(9908),E=i(2843),x=i(3878),_=i(782),N=i(1863);class T extends y{static featureName=_.T;constructor(e,t=!0){super(e,_.T,t),p.RI&&((0,E.u)((()=>(0,R.p)("docHidden",[(0,N.t)()],void 0,_.T,this.ee)),!0),(0,x.sp)("pagehide",(()=>(0,R.p)("winPagehide",[(0,N.t)()],void 0,_.T,this.ee))),this.importAggregator(e))}}var S=i(3969);class j extends y{static featureName=S.TZ;constructor(e,t=!0){super(e,S.TZ,t),this.importAggregator(e)}}new class extends o{constructor(t,r){super(r),p.gm?(this.features={},(0,h.bQ)(this.agentIdentifier,this),this.desiredFeatures=new Set(t.features||[]),this.desiredFeatures.add(A),this.runSoftNavOverSpa=[...this.desiredFeatures].some((e=>e.featureName===a.K7.softNav)),(0,d.j)(this,t,t.loaderType||"agent"),this.run()):(0,e.R)(21)}get config(){return{info:this.info,init:this.init,loader_config:this.loader_config,runtime:this.runtime}}run(){try{const t=u(this.agentIdentifier),r=[...this.desiredFeatures];r.sort(((e,t)=>a.P3[e.featureName]-a.P3[t.featureName])),r.forEach((r=>{if(!t[r.featureName]&&r.featureName!==a.K7.pageViewEvent)return;if(this.runSoftNavOverSpa&&r.featureName===a.K7.spa)return;if(!this.runSoftNavOverSpa&&r.featureName===a.K7.softNav)return;const n=function(e){switch(e){case a.K7.ajax:return[a.K7.jserrors];case a.K7.sessionTrace:return[a.K7.ajax,a.K7.pageViewEvent];case a.K7.sessionReplay:return[a.K7.sessionTrace];case a.K7.pageViewTiming:return[a.K7.pageViewEvent];default:return[]}}(r.featureName).filter((e=>!(e in this.features)));n.length>0&&(0,e.R)(36,{targetFeature:r.featureName,missingDependencies:n}),this.features[r.featureName]=new r(this)}))}catch(t){(0,e.R)(22,t);for(const e in this.features)this.features[e].abortHandler?.();const r=(0,h.Zm)();delete r.initializedAgents[this.agentIdentifier]?.api,delete r.initializedAgents[this.agentIdentifier]?.features,delete this.sharedAggregator;return r.ee.get(this.agentIdentifier).abort(),!1}}}({features:[A,T,j],loaderType:"lite"})})()})();</script> <meta name="title" content="The Open Group Publications | Templates and Artifacts"/> <meta name="description" content="Download The Open Group publications"/> <meta name="keywords" content="The Open Group Publications"/> <meta name="robots" content="INDEX,FOLLOW"/> <meta name="viewport" content="width=device-width, initial-scale=1"/> <title>The Open Group Publications | Templates and Artifacts</title> <link rel="stylesheet" type="text/css" media="all" href="https://publications.opengroup.org/static/version1732013752/frontend/Opengroup/publications/en_GB/css/styles.css" /> <link rel="stylesheet" type="text/css" media="all" href="https://publications.opengroup.org/static/version1732013752/frontend/Opengroup/publications/en_GB/StripeIntegration_Payments/css/wallets.css" /> <script type="text/javascript" defer="defer" src="https://publications.opengroup.org/static/version1732013752/frontend/Opengroup/publications/en_GB/Hyva_MagentoDataServices/js/storefront-event-collector.js"></script> <script type="text/javascript" defer="defer" src="https://publications.opengroup.org/static/version1732013752/frontend/Opengroup/publications/en_GB/Hyva_MagentoDataServices/js/storefront-events-sdk.js"></script> <script type="text/javascript" defer="defer" src="https://publications.opengroup.org/static/version1732013752/frontend/Opengroup/publications/en_GB/Hyva_MagentoLiveSearch/js/sdk.js"></script> <script type="text/javascript" defer="defer" src="https://publications.opengroup.org/static/version1732013752/frontend/Opengroup/publications/en_GB/Hyva_MagentoProductRecommendations/js/recs-sdk.js"></script> <link rel="preload" as="font" crossorigin="anonymous" href="https://publications.opengroup.org/static/version1732013752/frontend/Opengroup/publications/en_GB/fonts/nunito-400.woff2" /> <link rel="preload" as="font" crossorigin="anonymous" href="https://publications.opengroup.org/static/version1732013752/frontend/Opengroup/publications/en_GB/fonts/nunito-700.woff2" /> <link rel="canonical" href="https://publications.opengroup.org/more-categories/templates" /> <link rel="icon" type="image/x-icon" href="https://publications.opengroup.org/media/favicon/stores/3/favicon_0.ico" /> <link rel="shortcut icon" type="image/x-icon" href="https://publications.opengroup.org/media/favicon/stores/3/favicon_0.ico" /> <meta name="google-site-verification" content="xCsI0O93TVUMweWBiUueaZ4PcK7sfdkHtTbUvK6DII4" /> <script> var BASE_URL = 'https://publications.opengroup.org/'; var THEME_PATH = 'https://publications.opengroup.org/static/version1732013752/frontend/Opengroup/publications/en_GB'; var COOKIE_CONFIG = { "expires": null, "path": "\u002F", "domain": ".publications.opengroup.org", "secure": true, "lifetime": "3600", "cookie_restriction_enabled": false }; var CURRENT_STORE_CODE = 'publications'; var CURRENT_WEBSITE_ID = '3'; window.hyva = window.hyva || {} window.cookie_consent_groups = window.cookie_consent_groups || {} window.cookie_consent_groups['necessary'] = true; window.cookie_consent_config = window.cookie_consent_config || {}; window.cookie_consent_config['necessary'] = [].concat( window.cookie_consent_config['necessary'] || [], [ 'user_allowed_save_cookie', 'form_key', 'mage-messages', 'private_content_version', 'mage-cache-sessid', 'last_visited_store', 'section_data_ids' ] ); </script> <script> 'use strict'; (function( hyva, undefined ) { function lifetimeToExpires(options, defaults) { const lifetime = options.lifetime || defaults.lifetime; if (lifetime) { const date = new Date; date.setTime(date.getTime() + lifetime * 1000); return date; } return null; } function generateRandomString() { const allowedCharacters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', length = 16; let formKey = '', charactersLength = allowedCharacters.length; for (let i = 0; i < length; i++) { formKey += allowedCharacters[Math.round(Math.random() * (charactersLength - 1))] } return formKey; } const sessionCookieMarker = {noLifetime: true} const cookieTempStorage = {}; const internalCookie = { get(name) { const v = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)'); return v ? v[2] : null; }, set(name, value, days, skipSetDomain) { let expires, path, domain, secure, samesite; const defaultCookieConfig = { expires: null, path: '/', domain: null, secure: false, lifetime: null, samesite: 'lax' }; const cookieConfig = window.COOKIE_CONFIG || {}; expires = days && days !== sessionCookieMarker ? lifetimeToExpires({lifetime: 24 * 60 * 60 * days, expires: null}, defaultCookieConfig) : lifetimeToExpires(window.COOKIE_CONFIG, defaultCookieConfig) || defaultCookieConfig.expires; path = cookieConfig.path || defaultCookieConfig.path; domain = !skipSetDomain && (cookieConfig.domain || defaultCookieConfig.domain); secure = cookieConfig.secure || defaultCookieConfig.secure; samesite = cookieConfig.samesite || defaultCookieConfig.samesite; document.cookie = name + "=" + encodeURIComponent(value) + (expires && days !== sessionCookieMarker ? '; expires=' + expires.toGMTString() : '') + (path ? '; path=' + path : '') + (domain ? '; domain=' + domain : '') + (secure ? '; secure' : '') + (samesite ? '; samesite=' + samesite : 'lax'); }, isWebsiteAllowedToSaveCookie() { const allowedCookies = this.get('user_allowed_save_cookie'); if (allowedCookies) { const allowedWebsites = JSON.parse(unescape(allowedCookies)); return allowedWebsites[CURRENT_WEBSITE_ID] === 1; } return false; }, getGroupByCookieName(name) { const cookieConsentConfig = window.cookie_consent_config || {}; let group = null; for (let prop in cookieConsentConfig) { if (!cookieConsentConfig.hasOwnProperty(prop)) continue; if (cookieConsentConfig[prop].includes(name)) { group = prop; break; } } return group; }, isCookieAllowed(name) { const cookieGroup = this.getGroupByCookieName(name); return cookieGroup ? window.cookie_consent_groups[cookieGroup] : this.isWebsiteAllowedToSaveCookie(); }, saveTempStorageCookies() { for (const [name, data] of Object.entries(cookieTempStorage)) { if (this.isCookieAllowed(name)) { this.set(name, data['value'], data['days'], data['skipSetDomain']); delete cookieTempStorage[name]; } } } }; hyva.getCookie = (name) => { const cookieConfig = window.COOKIE_CONFIG || {}; if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) { return cookieTempStorage[name] ? cookieTempStorage[name]['value'] : null; } return internalCookie.get(name); } hyva.setCookie = (name, value, days, skipSetDomain) => { const cookieConfig = window.COOKIE_CONFIG || {}; if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) { cookieTempStorage[name] = {value, days, skipSetDomain}; return; } return internalCookie.set(name, value, days, skipSetDomain); } hyva.setSessionCookie = (name, value, skipSetDomain) => { return hyva.setCookie(name, value, sessionCookieMarker, skipSetDomain) } hyva.getBrowserStorage = () => { const browserStorage = window.localStorage || window.sessionStorage; if (!browserStorage) { console.warn('Browser Storage is unavailable'); return false; } try { browserStorage.setItem('storage_test', '1'); browserStorage.removeItem('storage_test'); } catch (error) { console.warn('Browser Storage is not accessible', error); return false; } return browserStorage; } hyva.postForm = (postParams) => { const form = document.createElement("form"); let data = postParams.data; if (! postParams.skipUenc && ! data.uenc) { data.uenc = btoa(window.location.href); } form.method = "POST"; form.action = postParams.action; Object.keys(postParams.data).map(key => { const field = document.createElement("input"); field.type = 'hidden' field.value = postParams.data[key]; field.name = key; form.appendChild(field); }); const form_key = document.createElement("input"); form_key.type = 'hidden'; form_key.value = hyva.getFormKey(); form_key.name="form_key"; form.appendChild(form_key); document.body.appendChild(form); form.submit(); } hyva.getFormKey = function () { let formKey = hyva.getCookie('form_key'); if (!formKey) { formKey = generateRandomString(); hyva.setCookie('form_key', formKey); } return formKey; } hyva.formatPrice = (value, showSign, options = {}) => { const formatter = new Intl.NumberFormat( 'en\u002DGB', Object.assign({ style: 'currency', currency: 'USD', signDisplay: showSign ? 'always' : 'auto' }, options) ); return (typeof Intl.NumberFormat.prototype.formatToParts === 'function') ? formatter.formatToParts(value).map(({type, value}) => { switch (type) { case 'currency': return '\u0024' || value; case 'minusSign': return '- '; case 'plusSign': return '+ '; default : return value; } }).reduce((string, part) => string + part) : formatter.format(value); } const formatStr = function (str, nStart) { const args = Array.from(arguments).slice(2); return str.replace(/(%+)([0-9]+)/g, (m, p, n) => { const idx = parseInt(n) - nStart; if (args[idx] === null || args[idx] === void 0) { return m; } return p.length % 2 ? p.slice(0, -1).replace('%%', '%') + args[idx] : p.replace('%%', '%') + n; }) } hyva.str = function (string) { const args = Array.from(arguments); args.splice(1, 0, 1); return formatStr.apply(undefined, args); } hyva.strf = function () { const args = Array.from(arguments); args.splice(1, 0, 0); return formatStr.apply(undefined, args); } /** * Take a html string as `content` parameter and * extract an element from the DOM to replace in * the current page under the same selector, * defined by `targetSelector` */ hyva.replaceDomElement = (targetSelector, content) => { // Parse the content and extract the DOM node using the `targetSelector` const parser = new DOMParser(); const doc = parser.parseFromString(content, 'text/html'); const contentNode = doc.querySelector(targetSelector); // Bail if content can't be found if (!contentNode) { return; } hyva.activateScripts(contentNode) // Replace the old DOM node with the new content document.querySelector(targetSelector).replaceWith(contentNode); // Reload customerSectionData and display cookie-messages if present window.dispatchEvent(new CustomEvent("reload-customer-section-data")); hyva.initMessages(); } hyva.activateScripts = (contentNode) => { // Extract all the script tags from the content. // Script tags won't execute when inserted into a dom-element directly, // therefore we need to inject them to the head of the document. const tmpScripts = contentNode.getElementsByTagName('script'); if (tmpScripts.length > 0) { // Push all script tags into an array // (to prevent dom manipulation while iterating over dom nodes) const scripts = []; for (let i = 0; i < tmpScripts.length; i++) { scripts.push(tmpScripts[i]); } // Iterate over all script tags and duplicate+inject each into the head for (let i = 0; i < scripts.length; i++) { let script = document.createElement('script'); script.innerHTML = scripts[i].innerHTML; document.head.appendChild(script); // Remove the original (non-executing) node from the content scripts[i].parentNode.removeChild(scripts[i]); } } return contentNode; } const replace = {['+']: '-', ['/']: '_', ['=']: ','}; hyva.getUenc = () => btoa(window.location.href).replace(/[+/=]/g, match => replace[match]); let currentTrap; const focusableElements = (rootElement) => { const selector = 'button, [href], input, select, textarea, details, [tabindex]:not([tabindex="-1"]'; return Array.from(rootElement.querySelectorAll(selector)) .filter(el => { return el.style.display !== 'none' && !el.disabled && el.tabIndex !== -1 && (el.offsetWidth || el.offsetHeight || el.getClientRects().length) }) } const focusTrap = (e) => { const isTabPressed = e.key === 'Tab' || e.keyCode === 9; if (!isTabPressed) return; const focusable = focusableElements(currentTrap) const firstFocusableElement = focusable[0] const lastFocusableElement = focusable[focusable.length - 1] e.shiftKey ? document.activeElement === firstFocusableElement && (lastFocusableElement.focus(), e.preventDefault()) : document.activeElement === lastFocusableElement && (firstFocusableElement.focus(), e.preventDefault()) }; hyva.releaseFocus = (rootElement) => { if (currentTrap && (!rootElement || rootElement === currentTrap)) { currentTrap.removeEventListener('keydown', focusTrap) currentTrap = null } } hyva.trapFocus = (rootElement) => { if (!rootElement) return; hyva.releaseFocus() currentTrap = rootElement rootElement.addEventListener('keydown', focusTrap) const firstElement = focusableElements(rootElement)[0] firstElement && firstElement.focus() } hyva.alpineInitialized = (fn) => window.addEventListener('alpine:initialized', fn, {once: true}) window.addEventListener('user-allowed-save-cookie', () => internalCookie.saveTempStorageCookies()) }( window.hyva = window.hyva || {} )); </script> <script> if (!window.IntersectionObserver) { window.IntersectionObserver = function (callback) { this.observe = el => el && callback(this.takeRecords()); this.takeRecords = () => [{isIntersecting: true, intersectionRatio: 1}]; this.disconnect = () => {}; this.unobserve = () => {}; } } </script> <script> window.addEventListener('load', function () { window.magentoStorefrontEvents = magentoStorefrontEvents; magentoStorefrontEvents.context.setStorefrontInstance( {"storeUrl":"https:\/\/publications.opengroup.org\/","websiteId":3,"websiteCode":"publications","storeId":3,"storeCode":"open_group_publications","storeViewId":3,"storeViewCode":"publications","websiteName":"Open Group Publications ","storeName":"Open Group Publications","storeViewName":"Open Group Publications","baseCurrencyCode":"USD","storeViewCurrencyCode":"USD","catalogExtensionVersion":"103.3.14","environmentId":"66688aac-7743-446c-b25c-656e91e7123a","environment":"Production","storefrontTemplate":"Hyva"} ); magentoStorefrontEvents.context.setMagentoExtension({ magentoExtensionVersion: "7.5.0", }); magentoStorefrontEvents.context.setDataServicesExtension({ version: "7.5.0", }); magentoStorefrontEvents.context.setPage({ pageType: "Default" }); magentoStorefrontEvents.context.setContext("pageExtended", { action: "page-view" }); magentoStorefrontEvents.publish.pageView(); }); </script> </head> <body id="html-body" class="page-products categorypath-more-categories-templates category-templates page-layout-2columns-left catalog-category-view page-layout-category-full-width"> <div class="mst-gdpr__cookie-bar-wrapper block relative z-20" id="gdprCookieBar" x-data="initMstGdprCookieBar()" x-init="initDisplay()"> <div class="mst-gdpr__cookie-bar bg-white border border-gray-200 bottom-8 fixed flex items-center left-2 max-w-4xl md:max-w-2xl md:rounded-full px-12 py-8 rounded-xl shadow-md z-50" x-bind:class="{'opacity-70': isLoading}" x-show="isBarVisible" style="display: none"> <div class="consent-text"> Cookies help us deliver our services. By using our services, you agree to our use of cookies. <a href="/privacy-policy-cookie-restriction-mode">Learn more</a> </div> <div class="mst-gdpr__buttons flex flex-col md:flex-row"> <button type="button" class="action btn justify-center md:mr-2 md:px-2 mr-auto px-4 text-sm w-auto xl:px-4" x-bind:class="{'opacity-0': isLoading}" @click="openSettings"> <span>Settings</span> </button> <button class="action btn btn-primary justify-center md:mt-0 md:mr-2 md:px-2 mr-auto mt-4 mx-auto px-4 text-sm w-auto xl:px-4" data-trigger-settings="agree" x-bind:class="{'opacity-0': isLoading}" @click="handleAllow(1)"><span>Agree</span></button> <button class="action btn justify-center md:mt-0 md:px-2 mr-auto mt-4 mx-auto px-4 text-sm w-auto xl:px-4" data-trigger-settings="agree" x-bind:class="{'opacity-0': isLoading}" @click="handleDecline"><span>Decline</span></button> </div> </div> <div class="mst-gdpr__cookie-bar-overlay bg-white fixed h-full left-0 opacity-60 top-0 w-full z-40" style="display: none" id="gdprCookieBarOverlay" x-show="isScreenLocked"></div> </div> <div class="mst-gdpr__cookie-bar-overlay" id="gdprCookieBarOverlay"></div> <script> function initMstGdprCookieBar() { 'use strict'; const barConfig = {"allowUrl":"https:\/\/publications.opengroup.org\/gdpr_cookie\/cookie\/allow\/","declineUrl":"https:\/\/publications.opengroup.org\/gdpr_cookie\/cookie\/decline\/","lockScreen":false,"groupCookieName":"gdpr_cookie_groups","consentCookieName":"gdpr_cookie_consent","barEnabled":true,"googleConsentEnabled":true,"googleConsentTypes":["ad_user_data","ad_personalization","ad_storage","analytics_storage","personalization_storage","functionality_storage","security_storage"],"googleConsentDefault":{"ad_user_data":"denied","ad_personalization":"denied","ad_storage":"denied","analytics_storage":"denied","personalization_storage":"denied","functionality_storage":"denied","security_storage":"denied"}}; return { isLoading: false, isBarVisible: false, isScreenLocked: false, initDisplay: function () { if (barConfig.googleConsentEnabled) { this.initGoogleConsent(); if (!barConfig.barEnabled) { this.sendGoogleConsentUpdate(barConfig.googleConsentDefault); } } if (this.isSaved()) { this.initSavedCookieConsent(); } if (!barConfig.barEnabled && !this.isSaved()) { this.handleAllow(true); } if (this.isAllowed()) { this.hide(); } else { this.show(); } window.addEventListener('mst-gdpr-cookie-settings-save', () => { this.handleAllow(); }) window.addEventListener('mst-gdpr-cookie-open-bar-request', () => { if (barConfig.barEnabled && barConfig.googleConsentEnabled) { this.initGoogleConsent(); } this.show(); }) }, show: function () { this.isBarVisible = true; this.isScreenLocked = window.location.href.indexOf('cookie') === -1 && barConfig.lockScreen; if (this.isScreenLocked) { document.querySelector('body').style.overflow = 'hidden'; } }, hide: function () { this.isBarVisible = false; this.isScreenLocked = false; document.querySelector('body').style.overflow = 'auto'; }, handleAllow: function (agreeAll) { this.isLoading = true; if (barConfig.barEnabled && barConfig.googleConsentEnabled) { this.handleGoogleConsentAllow(agreeAll); } let checkedGroups = []; if (agreeAll) { checkedGroups = document.querySelectorAll('.cookie-group-container .checkbox'); } else { checkedGroups = document.querySelectorAll('.cookie-group-container .checkbox:checked'); } const checked = Array.from(checkedGroups || []); const body = checked.reduce((body, item) => { body.append('group_ids[]', item.dataset.groupId); return body; }, new URLSearchParams({form_key: hyva.getFormKey()})) fetch('https://publications.opengroup.org/gdpr_cookie/cookie/allow/', { method: 'post', body: body, headers: {contentType: 'application/x-www-form-urlencoded; charset=UTF-8'} }) .then(() => this.hide()) .finally(() => this.isLoading = false) }, handleDecline: function () { this.isLoading = true; if (barConfig.barEnabled && barConfig.googleConsentEnabled) { this.handleGoogleConsentDecline(); } const body = new URLSearchParams({form_key: hyva.getFormKey()}); fetch('https://publications.opengroup.org/gdpr_cookie/cookie/decline/', { method: 'post', body: body, headers: {contentType: 'application/x-www-form-urlencoded; charset=UTF-8'} }) .then(() => this.hide()) .finally(() => this.isLoading = false) }, openSettings: function () { window.dispatchEvent(new CustomEvent('mst-gdpr-cookie-settings-open')); }, initSavedCookieConsent: function () { let allowedCookieGroups = unescape(hyva.getCookie(barConfig.groupCookieName)).split(','); let checkboxList = document.querySelectorAll('.group-content .cookie-group-container .checkbox') checkboxList.forEach(function (item) { let groupId = item.getAttribute('data-group-id'); item.checked = allowedCookieGroups.indexOf(groupId.toString()) !== -1; }.bind(this)); }, isSaved: function () { return !!hyva.getCookie(barConfig.groupCookieName) && !!hyva.getCookie(barConfig.consentCookieName); }, isAllowed: function () { return this.isSaved() || !barConfig.barEnabled; }, getLocalStorageGoogleConsent: function () { return localStorage.getItem('mst-gdpr-google-consent-mode'); }, setLocalStorageGoogleConsent: function (consent) { localStorage.setItem('mst-gdpr-google-consent-mode', JSON.stringify(consent)); }, getGoogleConsent: function () { let consent = this.getLocalStorageGoogleConsent(); if (consent) { return JSON.parse(consent); } return barConfig.googleConsentDefault; }, getUserGoogleConsent: function () { let containerSelector = '.group-content .google-consent-container'; let consent = {}; barConfig.googleConsentTypes.forEach(function (consentType) { let elSelector = 'input[type="checkbox"][data-consent-type="' + consentType + '"]'; let el = document.querySelector(containerSelector + ' ' + elSelector); if (el) { consent[consentType] = el.checked ? 'granted' : 'denied'; } else { consent[consentType] = 'denied'; } }) return consent; }, saveGoogleConsent: function (consent) { this.sendGoogleConsentUpdate(consent); this.setLocalStorageGoogleConsent(consent); }, sendGoogleConsentUpdate: function (consent) { if (typeof gtag === "function") { gtag('consent', 'update', consent); } }, initGoogleConsent: function () { let consent = this.getGoogleConsent(); let containerSelector = '.group-content .google-consent-container'; barConfig.googleConsentTypes.forEach(function (consentType) { let elSelector = 'input[type="checkbox"][data-consent-type="' + consentType + '"]'; let el = document.querySelector(containerSelector + ' ' + elSelector); if (el) { el.checked = consent[consentType] === 'granted'; } }); }, handleGoogleConsentAllow: function (agreeAll) { let consent = {}; if (agreeAll) { barConfig.googleConsentTypes.forEach(function (consentType) { consent[consentType] = 'granted'; }); } else { consent = this.getUserGoogleConsent(); } this.saveGoogleConsent(consent); }, handleGoogleConsentDecline: function () { let consent = {}; barConfig.googleConsentTypes.forEach(function (consentType) { consent[consentType] = 'denied'; }); this.saveGoogleConsent(consent); } }; } </script> <script> (function (config) { function deleteDisallowedCookies() { if (!hyva.getCookie(config.consentCookieName)) { return; } const allowedGroups = unescape(hyva.getCookie(config.groupCookieName)).split(','); const groupIds = Object.keys(config.groups || {}); const disallowedGroupIds = groupIds.filter(groupId => !allowedGroups.includes(groupId)); setInterval(() => { disallowedGroupIds.forEach(groupId => { config.groups[groupId].forEach(cookieCode => hyva.setCookie(cookieCode, '', -1)); }); }, 5000); } window.addEventListener('DOMContentLoaded', deleteDisallowedCookies, {once: true}); })({"groups":{"2":["customer_segment_ids","external_no_cache","frontend","guest_view","last_category","last_product","newmessage","no_cache","persistent_shopping_cart"]},"groupCookieName":"gdpr_cookie_groups","consentCookieName":"gdpr_cookie_consent"}) </script> <div class="relative z-30" x-data="initGdprSettingsModal()" x-init="init()"> <div class="fixed w-full h-full flex items-center justify-center" x-show="open"> <div class="absolute bg-black h-full opacity-50 w-full" x-on:click="close" style="display: none" x-show="open"></div> <div class="bg-white border border-gray-200 content h-full lg:max-w-4xl max-w-sm md:h-4/6 md:max-w-md overflow-auto overscroll-contain p-12 rounded-md z-20" style="display: none" x-show.transition.origin.top="open"> <div class="border-b border-gray-500 flex justify-between mb-3 pb-4"> <h3 class="text-3xl">Privacy Overview</h3> <div class="cursor-pointer pt-1" x-on:click="close"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-6 h-6" width="6" height="6" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> <title>x</title></svg> </div> </div> This website uses cookies to improve your experience while you navigate through the website. Out of these cookies, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may have an effect on your browsing experience. <div class="group-content"> <div class="cookie-group-container cookie-group-container-2 border border-gray-300 mt-4 p-3 rounded-2xl shadow-sm" x-data="{open2: false}"> <div class="flex flex justify-between items-center"> <h4 class="title text-lg cursor-pointer" x-on:click="open2 = !open2"> <span x-show="! open2"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="h-6 inline mr-2 w-6" width="4" height="4" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M5 15l7-7 7 7"/> <title>chevron-up</title></svg> </span> <span x-show="open2" style="display: none"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="h-6 inline mr-2 w-6" width="4" height="4" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"/> <title>chevron-down</title></svg> </span> Essential </h4> <input class="checkbox disabled:opacity-40 mr-1 rounded" type="checkbox" value="1" disabled checked data-group-id="2" name="allowed-group-2"> </div> <div class="content mt-4 pl-5" x-show.transition.origin.top="open2" style="display: none"> <div> </div> <div class="cookie-list"> <table> <tr> <th class="p-2">Name</th> <th class="p-2 hidden lg:table-cell">Description</th> <th class="p-2 hidden lg:table-cell">Lifetime</th> </tr> <tr> <td class="p-2">CUSTOMER_SEGMENT_IDS</td> <td class="p-2 hidden lg:table-cell">Stores your Customer Segment ID</td> <td class="p-2 hidden lg:table-cell">1 Year</td> </tr> <tr> <td class="p-2">EXTERNAL_NO_CACHE</td> <td class="p-2 hidden lg:table-cell">A flag that, indicates whether caching is on or off.</td> <td class="p-2 hidden lg:table-cell">1 Year</td> </tr> <tr> <td class="p-2">FRONTEND</td> <td class="p-2 hidden lg:table-cell">Your session ID on the server.</td> <td class="p-2 hidden lg:table-cell">1 Year</td> </tr> <tr> <td class="p-2">GUEST-VIEW</td> <td class="p-2 hidden lg:table-cell">Allows guests to edit their orders.</td> <td class="p-2 hidden lg:table-cell">1 Year</td> </tr> <tr> <td class="p-2">LAST_CATEGORY</td> <td class="p-2 hidden lg:table-cell">The last category you visited.</td> <td class="p-2 hidden lg:table-cell">1 Year</td> </tr> <tr> <td class="p-2">LAST_PRODUCT</td> <td class="p-2 hidden lg:table-cell">The last product you looked at.</td> <td class="p-2 hidden lg:table-cell">1 Year</td> </tr> <tr> <td class="p-2">NEWMESSAGE</td> <td class="p-2 hidden lg:table-cell">Indicates whether a new message has been received.</td> <td class="p-2 hidden lg:table-cell">1 Year</td> </tr> <tr> <td class="p-2">NO_CACHE</td> <td class="p-2 hidden lg:table-cell">Indicates whether it is allowed to use cache.</td> <td class="p-2 hidden lg:table-cell">1 Year</td> </tr> <tr> <td class="p-2">PERSISTENT_SHOPPING_CART</td> <td class="p-2 hidden lg:table-cell">A link to information about your cart and viewing history if you have asked the site.</td> <td class="p-2 hidden lg:table-cell">1 Year</td> </tr> </table> </div> </div> </div> <div class="cookie-group-container cookie-group-container-5 border border-gray-300 mt-4 p-3 rounded-2xl shadow-sm" x-data="{open5: false}"> <div class="flex flex justify-between items-center"> <h4 class="title text-lg cursor-pointer" x-on:click="open5 = !open5"> <span x-show="! open5"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="h-6 inline mr-2 w-6" width="4" height="4" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M5 15l7-7 7 7"/> <title>chevron-up</title></svg> </span> <span x-show="open5" style="display: none"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="h-6 inline mr-2 w-6" width="4" height="4" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"/> <title>chevron-down</title></svg> </span> Marketing </h4> <input class="checkbox disabled:opacity-40 mr-1 rounded" type="checkbox" value="1" checked data-group-id="5" name="allowed-group-5"> </div> <div class="content mt-4 pl-5" x-show.transition.origin.top="open5" style="display: none"> <div> </div> <div class="cookie-list"> <table> <tr> <th class="p-2">Name</th> <th class="p-2 hidden lg:table-cell">Description</th> <th class="p-2 hidden lg:table-cell">Lifetime</th> </tr> </table> </div> </div> </div> <div class="google-consent-container border border-gray-300 mt-4 p-3 rounded-2xl shadow-sm" x-data="{open_google_consent_settings: false}"> <div class="flex flex justify-between"> <h4 class="title text-lg cursor-pointer" x-on:click="open_google_consent_settings = !open_google_consent_settings"> <span x-show="! open_google_consent_settings"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="h-6 inline mr-2 w-6" width="4" height="4" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M5 15l7-7 7 7"/> <title>chevron-up</title></svg> </span> <span x-show="open_google_consent_settings" style="display: none"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="h-6 inline mr-2 w-6" width="4" height="4" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"/> <title>chevron-down</title></svg> </span> Google Consent </h4> </div> <div class="content mt-4 pl-5" x-show.transition.origin.top="open_google_consent_settings" style="display: none"> <div class="cookie-list"> <table> <tr> <td class="p-2">ad_user_data</td> <td class="p-2"> <input class="checkbox disabled:opacity-40" type="checkbox" value="1" name="google_consent_ad_user_data" data-consent-type="ad_user_data"> </td> </tr> <tr> <td class="p-2">ad_personalization</td> <td class="p-2"> <input class="checkbox disabled:opacity-40" type="checkbox" value="1" name="google_consent_ad_personalization" data-consent-type="ad_personalization"> </td> </tr> <tr> <td class="p-2">ad_storage</td> <td class="p-2"> <input class="checkbox disabled:opacity-40" type="checkbox" value="1" name="google_consent_ad_storage" data-consent-type="ad_storage"> </td> </tr> <tr> <td class="p-2">analytics_storage</td> <td class="p-2"> <input class="checkbox disabled:opacity-40" type="checkbox" value="1" name="google_consent_analytics_storage" data-consent-type="analytics_storage"> </td> </tr> <tr> <td class="p-2">personalization_storage</td> <td class="p-2"> <input class="checkbox disabled:opacity-40" type="checkbox" value="1" name="google_consent_personalization_storage" data-consent-type="personalization_storage"> </td> </tr> <tr> <td class="p-2">functionality_storage</td> <td class="p-2"> <input class="checkbox disabled:opacity-40" type="checkbox" value="1" name="google_consent_functionality_storage" data-consent-type="functionality_storage"> </td> </tr> <tr> <td class="p-2">security_storage</td> <td class="p-2"> <input class="checkbox disabled:opacity-40" type="checkbox" value="1" name="google_consent_security_storage" data-consent-type="security_storage"> </td> </tr> </table> </div> </div> </div> </div> <button class="btn btn-primary ml-auto mt-4 text-sm cursor-pointer" x-on:click="save"><span>Apply</span></button></div> </div> </div> <script> function initGdprSettingsModal() { return { open: false, close: function () { this.open = false; document.querySelector('body').style.overflow = 'auto'; }, init: function () { window.addEventListener('mst-gdpr-cookie-settings-open', () => { document.querySelector('body').style.overflow = 'hidden'; this.open = true; }) }, save: function () { window.dispatchEvent(new CustomEvent('mst-gdpr-cookie-settings-save')); this.close(); } }; } </script> <input name="form_key" type="hidden" value="tGkuJucANpzneoVL" /> <noscript> <section class="message global noscript border-b-2 border-blue-500 bg-blue-50 shadow-none m-0 px-0 rounded-none font-normal"> <div class="container text-center"> <p> <strong>JavaScript seems to be disabled in your browser.</strong> <span> For the best experience on our site, be sure to turn on Javascript in your browser. </span> </p> </div> </section> </noscript> <script> document.body.addEventListener('touchstart', () => {}, {passive: true}) </script> <div class="page-wrapper"><header class="page-header"><a class="action skip sr-only focus:not-sr-only focus:absolute focus:z-40 focus:bg-white contentarea" href="#contentarea"> <span> Skip to Content </span> </a> <script> function initHeader () { return { searchOpen: false, cart: {}, isCartOpen: false, getData(data) { if (data.cart) { this.cart = data.cart } }, isCartEmpty() { return !this.cart.summary_count }, toggleCart(event) { if (event.detail && event.detail.isOpen !== undefined) { this.isCartOpen = event.detail.isOpen if (!this.isCartOpen && this.$refs && this.$refs.cartButton) { this.$refs.cartButton.focus() } } else { this.isCartOpen = true } } } } function initCompareHeader() { return { compareProducts: null, itemCount: 0, receiveCompareData(data) { if (data['compare-products']) { this.compareProducts = data['compare-products']; this.itemCount = this.compareProducts.count; } } } } </script> <div id="header" class="relative z-20 w-full border-b shadow bg-blue border-container-lighter" x-data="initHeader()" @private-content-loaded.window="getData(event.detail.data)" > <div class="container gap-x-2 gap-y-3 flex flex-wrap lg:gap-0 lg:flex-nowrap items-center justify-between w-full px-4 py-3 mx-auto mt-0"> <!--Logo--> <div class="flex-1 order-1 sm:order-2 lg:order-1 w-full sm:w-auto lg:flex-none"> <div class="header-logo-pub"> <a class="text-xl font-bold tracking-wide no-underline hover:no-underline font-title" href="https://publications.opengroup.org/" aria-label="Go&#x20;to&#x20;Home&#x20;page" > <img class="h-16 w-auto" src="https://publications.opengroup.org/static/version1732013752/frontend/Opengroup/publications/en_GB/images/logo.svg" alt="The&#x20;Open&#x20;Group" width="240" height="88" /> </a> </div> </div> <!--Search--> <div class="order-3 lg:order-2 w-full lg:w-3/4" id="search-content" > <div x-data="initLiveSearch()" x-init="initPopover()" @close-search.window="handlePopover(false)" @open-search.window="handlePopover(true)"> <div class="lg:container w-full lg:w-3/4 mx-auto text-black"> <form class="form minisearch relative" id="search_mini_form" action="https://publications.opengroup.org/catalogsearch/result/" method="get" > <div> <div class="relative group"> <div class="flex"> <input id="search" class="w-full p-2 text-base leading-normal transition appearance-none border-white focus:outline-none focus:border-primary focus:ring-0 h-10" type="text" x-model="queryPhrase" name="q" value="" placeholder="Search&#x20;for&#x20;a&#x20;product..." maxlength="94" role="combobox" aria-haspopup="false" aria-autocomplete="both" autocomplete="off" aria-expanded="false" @input="getProducts(); $nextTick(() => this.searchOpen = true);" @click.away="searchOpen = false" /> </div> <div class="absolute flex-col z-50 shadow-xl mt-1 bg-white w-full search-autocomplete" :class="{ 'block': searchOpen, 'hidden': !searchOpen }" x-show="true"> <div class="flex"> <template x-if="liveSearchProducts.length >= 1 && queryPhrase !== ''"> <div class="grid lg:grid-cols-2 gap-8 px-4 py-8 lg:p-8 bg-container w-full"> <template x-for="product in liveSearchProducts.slice(0, 8)"> <a class="grid grid-cols-10 justify-center items-center card shadow-md p-0 cursor-pointer" @click="handleProductClick(product)"> <div class="flex justify-center items-center p-1.5 col-span-3"> <img class="max-h-20 w-auto" :src="product.image"/> </div> <div class="flex flex-col gap-2 col-span-7 py-4 px-8 bg-white w-full h-full"> <div x-text="product.name" class=""></div> </div> </a> </template> </div> </template> </div> <template x-if="liveSearchProducts.length >= 1 && queryPhrase !== ''"> <button class="btn btn-primary w-full rounded-none p-4 text-lg" type="submit"> View All </button> </template> </div> </div> </div> <button type="submit" title="Search" class="action search absolute right-0 top-0 h-10 w-10 bg-primary text-white flex items-center justify-center" aria-label="Search" > <span class="label search-label"> Search </span> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="h-6 w-6" width="25" height="25" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"/> <title>search</title></svg> </button> </form> </div> </div> <script> function initLiveSearch() { 'use strict'; return { queryPhrase: '', liveSearchProducts: [], liveSearchSuggestions: [], searchOpen: false, search: null, searchId: "66688aac-7743-446c-b25c-656e91e7123a_" + "publications_" + "open_group_publications_" + "publications", initPopover() { this.search = this.buildSearch(); this.initTogglePopover(); }, buildSearch() { window.magentoStorefrontEvents.context.setSearchExtension({ version: "4.2.1" }); return new MagentoLiveSearch({ environmentId: "66688aac-7743-446c-b25c-656e91e7123a", websiteCode: "publications", storeCode: "open_group_publications", storeViewCode: "publications", apiKey: "search_gql", }); }, // this will open the popover, whenever the search-input has focus initTogglePopover() { const popover = document.getElementById('search'); popover.addEventListener('focus', () => { this.searchOpen = true; }); }, handlePopover(toggleValue) { this.searchOpen = toggleValue; }, handleProductClick(product) { window.magentoStorefrontEvents.context.setSearchResults( window.magentoStorefrontEvents.context.getSearchResults() ); window.magentoStorefrontEvents.publish.searchProductClick("search-bar", `${product.sku}`); // Timeout to prevent submission before event has fired. setTimeout(() => window.location.href = product.url, 500); }, // this will submit the form with the clicked suggestion as the search-phrase searchSuggestion(suggestion, event) { document.getElementById('search').value = suggestion; document.getElementById('search_mini_form').submit(); }, // get products from fetch-request and update liveSearchProducts and liveSearchSuggestions async getProducts() { this.searchOpen = true; const result = await this.getLiveSearchProducts(); let products = []; this.liveSearchProducts = result.data.productSearch.items.map(item => ({ name: item.product.name, price: item.product.price_range.maximum_price.regular_price.value, currency: item.product.price_range.maximum_price.regular_price.currency, image: item.product.image ? item.product.image.url : 'https://publications.opengroup.org/media/catalog/product/placeholder/websites/3/o_symbol_registered_1.png', url: item.product.canonical_url, id: item.product.id, sku: item.product.sku })); this.liveSearchSuggestions = result.data.productSearch.suggestions; //search-results-view }, // retrieve products from magento live search service async getLiveSearchProducts() { this.searchRequestId = Math.random().toString(16).slice(2); if (!this.search) { return []; } const searchCtx = { units: [{ searchUnitId: "search-bar", queryTypes: ["products"], phrase: this.queryPhrase, currentPage: 1, pageSize: 3, filter: [], sort: [{attribute: "relevance", direction: "DESC"}], searchRequestId: this.searchRequestId }] }; window.magentoStorefrontEvents.context.setSearchInput(searchCtx); window.magentoStorefrontEvents.publish.searchRequestSent("search-bar"); const before = Date.now(); const result = await this.search.productSearch({ phrase: this.queryPhrase, data: { products: true, facets: true, suggestions: true } }); const after = Date.now(); const productItems = result.data.productSearch.items || []; const suggestions = result.data.productSearch.suggestions || []; const facets = result.data.productSearch.facets || []; const formattedProductItems = productItems.map((item, key) => ({ name: item.product.name, sku: item.product.sku, url: item.product.canonical_url, imageUrl: item.product.image ? item.product.image.url : 'https://publications.opengroup.org/media/catalog/product/placeholder/websites/3/o_symbol_registered_1.png', price: item.product.price_range.minimum_price.final_price.value, rank: key, })); const formattedSuggestions = suggestions.map((item, key) => ({ suggestion: item, rank: key, })); const formattedFacets = facets.map((facet) => ({ attribute: facet.attribute, title: facet.title, type: facet.type || "PINNED", buckets: facet.buckets.map((bucket) => bucket), })); const searchCtxUpdated = { units: [{ searchUnitId: "search-bar", searchRequestId: this.searchRequestId, executionTime: after - before, products: formattedProductItems, categories: [], suggestions: formattedSuggestions, page: result.data.productSearch.page_info.current_page, perPage: result.data.productSearch.page_info.page_size, facets: formattedFacets }] }; window.magentoStorefrontEvents.context.setSearchResults(searchCtxUpdated); window.magentoStorefrontEvents.publish.searchResponseReceived("search-bar"); return result; } } } </script> </div> <div class="flex gap-8 md:gap-12 justify-end items-center order-2 lg:order-3"> <!--Customer Icon & Dropdown--> <div class="relative inline-block" x-data="{ open: false }" @keyup.escape="open = false" > <button type="button" id="customer-menu" class="block text-white hover:text-primary" @click="open = !open" @click.outside="open = false" :aria-expanded="open ? 'true' : 'false'" aria-label="My&#x20;Account" aria-haspopup="true" > <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="h-8 w-8" width="32" height="32" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" d="M15.75 6a3.75 3.75 0 1 1-7.5 0 3.75 3.75 0 0 1 7.5 0ZM4.501 20.118a7.5 7.5 0 0 1 14.998 0A17.933 17.933 0 0 1 12 21.75c-2.676 0-5.216-.584-7.499-1.632Z"/> </svg> </button> <nav class=" absolute right-0 z-20 w-40 py-2 mt-2 -mr-4 px-1 overflow-auto origin-top-right rounded-sm shadow-lg sm:w-48 lg:mt-3 bg-container-lighter " x-cloak x-show="open" aria-labelledby="customer-menu" @click.outside="open = false" > <a id="customer.header.sign.in.link" class="block px-4 py-2 lg:px-5 lg:py-2 hover:bg-gray-100" href="https://publications.opengroup.org/customer/account/index/?before_auth_url=https%3A%2F%2Fpublications.opengroup.org%2Fmore-categories%2Ftemplates" title="Sign&#x20;In" > Sign In</a> <a id="customer.header.register.link" class="block px-4 py-2 lg:px-5 lg:py-2 hover:bg-gray-100" href="https://publications.opengroup.org/customer/account/create/?before_auth_url=https%3A%2F%2Fpublications.opengroup.org%2Fmore-categories%2Ftemplates" title="Create&#x20;an&#x20;Account" > Create an Account </a> </nav> </div> <div class="flex-1 lg:flex-none lg:hidden" x-data="{ isOpen : false}"> <div class="flex items-baseline menu-icon"> <div class="flex justify-start w-full"> <button @click="isOpen = !isOpen; $dispatch('toggle-mobile-menu')" class="flex items-center justify-start cursor-pointer text-white hover:text-white"> <template x-if="!isOpen"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-8 h-8" width="48" height="48" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M3.75 5.25h16.5m-16.5 4.5h16.5m-16.5 4.5h16.5m-16.5 4.5h16.5"/> <title>bars-4</title></svg> </template> <template x-if="isOpen"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-8 h-8" width="48" height="48" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M6 18 18 6M6 6l12 12"/> <title>x-mark</title></svg> </template> </button> </div> </div> </div> </div> </div> <!--Main Navigation--> <div x-data="initMenuMobile_6743eb0794cfc()" class="absolute w-full z-50 order-2 sm:order-1 lg:order-2 navigation lg:hidden" > <!-- mobile --> <div class="bg-container h-screen overflow-x-hidden overflow-y-auto w-full" :class="{'text-white -left-full hidden' : !open, 'text-black left-0' : open}" @toggle-mobile-menu.window="open = !open" @keydown.window.escape="open=false" x-cloak > <nav class="px-4 text-blue w-full duration-150 ease-in-out transform transition-display bg-container h-full font-bold" :class="{ 'hidden' : !open }" > <div class="level-0"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b" :class="{ '-translate-x-full' : mobileLevelZeroPanelActiveId, 'translate-x-0' : !mobileLevelZeroPanelActiveId }" > <a class="flex items-center w-full py-4 cursor-pointer bg-container level-0 text-blue" href="https://publications.opengroup.org/standards" title="Standards" > <span> Standards </span> </a> <button class="flex cursor-pointer text-blue bg-container" @click="mobileLevelZeroPanelActiveId = mobileLevelZeroPanelActiveId === 'category-node-26' ? 0 : 'category-node-26'" > <span> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="4" stroke="currentColor" class="w-full h-4" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="m8.25 4.5 7.5 7.5-7.5 7.5"/> <title>chevron-right</title></svg> </span> </button> </span> <div class="absolute top-0 right-0 z-10 w-full h-full transition-transform duration-200 ease-in-out translate-x-full transform bg-container level-1 px-4" :class="{ 'translate-x-full' : mobileLevelZeroPanelActiveId !== 'category-node-26', 'translate-x-0' : mobileLevelZeroPanelActiveId === 'category-node-26' }" > <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <button class="flex w-full items-center py-4 cursor-pointer bg-container" @click="mobileLevelZeroPanelActiveId = 0" > <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="4" stroke="currentColor" class="h-4 w-auto" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M15.75 19.5 8.25 12l7.5-7.5"/> <title>chevron-left</title></svg> <span class="ml-4"> Standards </span> </button> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards" title="Standards" class="flex items-center w-full py-4 cursor-pointer bg-container border-container" > <span>View All</span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/agile-standards" title="Agile&#x20;Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Agile Standards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/archimate" title="ArchiMate&#xAE;&#x20;Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> ArchiMate® Standards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/business-architecture" title="Business&#x20;Architecture&#x20;Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Business Architecture Standards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/cloud-computing" title="Cloud&#x20;Computing&#x20;Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Cloud Computing Standards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/commercial-aviation-standards" title="Commercial&#x20;Aviation&#x20;Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Commercial Aviation Standards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/data-mgmt" title="Data&#x20;Management&#x20;Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Data Management Standards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/digital-business-standards" title="Digital&#x20;Business&#x20;Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Digital Business Standards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/dist-computing" title="Distributed&#x20;Computing&#x20;Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Distributed Computing Standards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/emmm" title="EMMM&#x2122;&#x20;Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> EMMM™ Standards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/energistics-standards" title="Energistics&#x20;Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Energistics Standards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/enterprise-architecture" title="Enterprise&#x20;Architecture&#x20;Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Enterprise Architecture Standards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/enterprise-mgmt" title="Enterprise&#x20;Management&#x20;Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Enterprise Management Standards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/face" title="FACE&#xAE;&#x20;Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> FACE® Standards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/healthcare" title="Healthcare&#x20;Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Healthcare Standards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/interworking" title="Interworking&#x20;Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Interworking Standards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/it4it" title="IT4IT&#x2122;&#x20;Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> IT4IT™ Standards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/open-fair-standards" title="Open&#x20;FAIR&#x2122;&#x20;Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Open FAIR™ Standards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/op30" title="Open&#x20;Platform&#x20;3.0&#x2122;&#x20;Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Open Platform 3.0™ Standards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/opa" title="Open&#x20;Process&#x20;Automation&#x2122;&#x20;Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Open Process Automation™ Standards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/preliminary-standards" title="Preliminary&#x20;Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Preliminary Standards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/realtime" title="Real-time&#x20;&amp;&#x20;Embedded&#x20;Systems&#x20;Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Real-time &amp; Embedded Systems Standards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/security" title="Security&#x20;Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Security Standards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/semantic-interop" title="Semantic&#x20;Interoperability&#x20;Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Semantic Interoperability Standards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/snapshots" title="Snapshots" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Snapshots </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/soa" title="SOA&#x20;Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> SOA Standards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/sosa" title="SOSA&#x2122;&#x20;Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> SOSA™ Standards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/corrigenda" title="Technical&#x20;Corrigenda" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Technical Corrigenda </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/togaf" title="TOGAF&#xAE;&#x20;Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> TOGAF® Standards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/trusted-technology" title="Trusted&#x20;Technology&#x20;Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Trusted Technology Standards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/standards/unix" title="UNIX&#xAE;&#x20;&#x20;Standards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> UNIX® Standards </span> </a> </span> </div> </div> </div> <div class="level-0"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b" :class="{ '-translate-x-full' : mobileLevelZeroPanelActiveId, 'translate-x-0' : !mobileLevelZeroPanelActiveId }" > <a class="flex items-center w-full py-4 cursor-pointer bg-container level-0 text-blue" href="https://publications.opengroup.org/certifications" title="Certifications" > <span> Certifications </span> </a> <button class="flex cursor-pointer text-blue bg-container" @click="mobileLevelZeroPanelActiveId = mobileLevelZeroPanelActiveId === 'category-node-33' ? 0 : 'category-node-33'" > <span> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="4" stroke="currentColor" class="w-full h-4" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="m8.25 4.5 7.5 7.5-7.5 7.5"/> <title>chevron-right</title></svg> </span> </button> </span> <div class="absolute top-0 right-0 z-10 w-full h-full transition-transform duration-200 ease-in-out translate-x-full transform bg-container level-1 px-4" :class="{ 'translate-x-full' : mobileLevelZeroPanelActiveId !== 'category-node-33', 'translate-x-0' : mobileLevelZeroPanelActiveId === 'category-node-33' }" > <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <button class="flex w-full items-center py-4 cursor-pointer bg-container" @click="mobileLevelZeroPanelActiveId = 0" > <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="4" stroke="currentColor" class="h-4 w-auto" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M15.75 19.5 8.25 12l7.5-7.5"/> <title>chevron-left</title></svg> <span class="ml-4"> Certifications </span> </button> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/certifications" title="Certifications" class="flex items-center w-full py-4 cursor-pointer bg-container border-container" > <span>View All</span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/certifications/archimate" title="ArchiMate&#xAE;&#x20;Certification" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> ArchiMate® Certification </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/certifications/certification-for-people" title="Certification&#x20;for&#x20;People" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Certification for People </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/certifications/dpbok" title="DPBoK&#x2122;&#x20;Certification" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> DPBoK™ Certification </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/certifications/face" title="FACE&#xAE;&#x20;Training&#x20;&amp;&#x20;Certification" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> FACE® Training &amp; Certification </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/certifications/it4it" title="IT4IT&#x2122;&#x20;Certification" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> IT4IT™ Certification </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/certifications/o-aa-trade-certification" title="O-AA&#x2122;&#x20;Certification" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> O-AA™ Certification </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/certifications/opas-cert" title="O-PAS&#x2122;&#x20;Certification" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> O-PAS™ Certification </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/certifications/open-ca" title="Open&#x20;CA&#x20;Certification" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Open CA Certification </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/certifications/open-cds" title="Open&#x20;CDS&#x20;Certification" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Open CDS Certification </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/certifications/opencitm" title="Open&#x20;CITM&#x20;Certification" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Open CITM Certification </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/certifications/opencts" title="Open&#x20;CTS&#x20;Certification" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Open CTS Certification </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/certifications/octtp" title="Open&#x20;CTTP&#x20;Certification" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Open CTTP Certification </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/certifications/open-fair" title="Open&#x20;FAIR&#x2122;&#x20;Certification" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Open FAIR™ Certification </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/certifications/open-trusted-technology" title="Open&#x20;Trusted&#x20;Technology&#x20;Provider&#x2122;&#x20;Certification" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Open Trusted Technology Provider™ Certification </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/certifications/practice-tests" title="Practice&#x20;Tests" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Practice Tests </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/certifications/professional-certification" title="Professional&#x20;Certification" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Professional Certification </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/certifications/togaf" title="TOGAF&#xAE;&#x20;Certification" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> TOGAF® Certification </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/certifications/the-open-brand" title="The&#x20;Open&#x20;Brand&#x20;Certification" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> The Open Brand Certification </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/certifications/unix" title="UNIX&#xAE;&#x20;Certification" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> UNIX® Certification </span> </a> </span> </div> </div> </div> <div class="level-0"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b" :class="{ '-translate-x-full' : mobileLevelZeroPanelActiveId, 'translate-x-0' : !mobileLevelZeroPanelActiveId }" > <a class="flex items-center w-full py-4 cursor-pointer bg-container level-0 text-blue" href="https://publications.opengroup.org/guides" title="Guides" > <span> Guides </span> </a> <button class="flex cursor-pointer text-blue bg-container" @click="mobileLevelZeroPanelActiveId = mobileLevelZeroPanelActiveId === 'category-node-37' ? 0 : 'category-node-37'" > <span> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="4" stroke="currentColor" class="w-full h-4" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="m8.25 4.5 7.5 7.5-7.5 7.5"/> <title>chevron-right</title></svg> </span> </button> </span> <div class="absolute top-0 right-0 z-10 w-full h-full transition-transform duration-200 ease-in-out translate-x-full transform bg-container level-1 px-4" :class="{ 'translate-x-full' : mobileLevelZeroPanelActiveId !== 'category-node-37', 'translate-x-0' : mobileLevelZeroPanelActiveId === 'category-node-37' }" > <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <button class="flex w-full items-center py-4 cursor-pointer bg-container" @click="mobileLevelZeroPanelActiveId = 0" > <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="4" stroke="currentColor" class="h-4 w-auto" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M15.75 19.5 8.25 12l7.5-7.5"/> <title>chevron-left</title></svg> <span class="ml-4"> Guides </span> </button> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/guides" title="Guides" class="flex items-center w-full py-4 cursor-pointer bg-container border-container" > <span>View All</span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/guides/agile-architecture-guides" title="Agile&#x20;Architecture&#x20;Guides" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Agile Architecture Guides </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/guides/archimate" title="ArchiMate&#xAE;&#x20;Guides" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> ArchiMate® Guides </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/guides/architecture" title="Architecture&#x20;Guides" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Architecture Guides </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/guides/business-architecture" title="Business&#x20;Architecture&#x20;Guides" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Business Architecture Guides </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/guides/cloud-computing" title="Cloud&#x20;Computing&#x20;Guides" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Cloud Computing Guides </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/guides/digital-transformation" title="Digital&#x20;Transformation&#x20;Guides" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Digital Transformation Guides </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/guides/direcnet" title="DirecNet&#xAE;&#x20;Guides" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> DirecNet® Guides </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/guides/electronic-messaging" title="Electronic&#x20;Messaging&#x20;Guides" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Electronic Messaging Guides </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/guides/face" title="FACE&#xAE;&#x20;Guides" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> FACE® Guides </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/guides/healthcare-guides" title="Healthcare&#x20;Guides" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Healthcare Guides </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/guides/identity-management" title="Identity&#x20;Management&#x20;Guides" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Identity Management Guides </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/guides/it4it" title="IT4IT&#x2122;&#x20;Guides" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> IT4IT™ Guides </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/guides/openca" title="Open&#x20;Professions&#x20;Guides" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Open Professions Guides </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/guides/open-fair" title="Open&#x20;FAIR&amp;trade&#x3B;&#x20;Guides" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Open FAIR&trade; Guides </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/guides/open-platform-3" title="Open&#x20;Platform&#x20;3.0&amp;trade&#x3B;&#x20;Guides" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Open Platform 3.0&trade; Guides </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/guides/open-process-automation" title="Open&#x20;Process&#x20;Automation&amp;trade&#x3B;&#x20;Guides" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Open Process Automation&trade; Guides </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/guides/osdu-guides" title="OSDU&#xAE;&#x20;Guides" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> OSDU® Guides </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/guides/security" title="Security&#x20;Guides" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Security Guides </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/guides/soa" title="SOA&#x20;Guides" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> SOA Guides </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/guides/sosa" title="SOSA&#x2122;&#x20;Guides" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> SOSA™ Guides </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/guides/standards-process" title="Standards&#x20;Process&#x20;Guides" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Standards Process Guides </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/guides/togaf" title="TOGAF&#xAE;&#x20;Guides" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> TOGAF® Guides </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/guides/trusted-technology" title="Trusted&#x20;Technology&#x20;Guides" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Trusted Technology Guides </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/guides/unix" title="UNIX&#xAE;&#x20;Guides" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> UNIX® Guides </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/guides/commercial-aviation-guides" title="Commercial&#x20;Aviation&#x20;Guides" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Commercial Aviation Guides </span> </a> </span> </div> </div> </div> <div class="level-0"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b" :class="{ '-translate-x-full' : mobileLevelZeroPanelActiveId, 'translate-x-0' : !mobileLevelZeroPanelActiveId }" > <a class="flex items-center w-full py-4 cursor-pointer bg-container level-0 text-blue" href="https://publications.opengroup.org/data-sheets" title="Data&#x20;Sheets" > <span> Data Sheets </span> </a> </span> </div> <div class="level-0"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b" :class="{ '-translate-x-full' : mobileLevelZeroPanelActiveId, 'translate-x-0' : !mobileLevelZeroPanelActiveId }" > <a class="flex items-center w-full py-4 cursor-pointer bg-container level-0 text-blue" href="https://publications.opengroup.org/webinars" title="Webinars" > <span> Webinars </span> </a> <button class="flex cursor-pointer text-blue bg-container" @click="mobileLevelZeroPanelActiveId = mobileLevelZeroPanelActiveId === 'category-node-44' ? 0 : 'category-node-44'" > <span> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="4" stroke="currentColor" class="w-full h-4" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="m8.25 4.5 7.5 7.5-7.5 7.5"/> <title>chevron-right</title></svg> </span> </button> </span> <div class="absolute top-0 right-0 z-10 w-full h-full transition-transform duration-200 ease-in-out translate-x-full transform bg-container level-1 px-4" :class="{ 'translate-x-full' : mobileLevelZeroPanelActiveId !== 'category-node-44', 'translate-x-0' : mobileLevelZeroPanelActiveId === 'category-node-44' }" > <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <button class="flex w-full items-center py-4 cursor-pointer bg-container" @click="mobileLevelZeroPanelActiveId = 0" > <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="4" stroke="currentColor" class="h-4 w-auto" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M15.75 19.5 8.25 12l7.5-7.5"/> <title>chevron-left</title></svg> <span class="ml-4"> Webinars </span> </button> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/webinars" title="Webinars" class="flex items-center w-full py-4 cursor-pointer bg-container border-container" > <span>View All</span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/webinars/archimate" title="ArchiMate&#xAE;&#x20;Webinars" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> ArchiMate® Webinars </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/webinars/toolkit" title="Architect&#x27;s&#x20;Toolkit&#x20;&#x28;broadcast&#x20;episodes&#x29;" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Architect&#039;s Toolkit (broadcast episodes) </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/webinars/architecture" title="Architecture&#x20;Webinars" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Architecture Webinars </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/webinars/business-architecture-webinars" title="Business&#x20;Architecture&#x20;Webinars" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Business Architecture Webinars </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/webinars/certification-program" title="Certification&#x20;Program&#x20;Webinars" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Certification Program Webinars </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/webinars/cloud-computing" title="Cloud&#x20;Computing&#x20;Webinars" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Cloud Computing Webinars </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/webinars/digital-business" title="Digital&#x20;Business&#x20;Webinars" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Digital Business Webinars </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/webinars/face" title="FACE&#xAE;&#x20;Webinars" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> FACE® Webinars </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/webinars/iot" title="IoT&#x20;Webinars" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> IoT Webinars </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/webinars/it4it" title="IT4IT&#x2122;&#x20;Webinars" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> IT4IT™ Webinars </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/webinars/learning-pathways-series" title="Learning&#x20;Pathways&#x20;Webinar&#x20;Series" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Learning Pathways Webinar Series </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/webinars/open-cits" title="Open&#x20;CITS&#x20;Webinars" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Open CITS Webinars </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/webinars/open-footprint-webinars" title="Open&#x20;Footprint&#xAE;&#x20;Webinars" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Open Footprint® Webinars </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/webinars/open-platform-3-0" title="Open&#x20;Platform&#x20;3.0&#x2122;&#x20;Webinars" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Open Platform 3.0™ Webinars </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/webinars/open-fair" title="Open&#x20;FAIR&#x2122;&#x20;Webinars" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Open FAIR™ Webinars </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/webinars/open-process-automation" title="Open&#x20;Process&#x20;Automation&#x2122;&#x20;Webinars" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Open Process Automation™ Webinars </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/webinars/osdu-trade-webinars" title="OSDU&#xAE;&#x20;Webinars" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> OSDU® Webinars </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/webinars/security" title="Security&#x20;Webinars" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Security Webinars </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/webinars/soa" title="SOA&#x20;Webinars" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> SOA Webinars </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/webinars/sosa" title="SOSA&#x2122;&#x20;Webinars" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> SOSA™ Webinars </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/webinars/togaf" title="TOGAF&#xAE;&#x20;Webinars" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> TOGAF® Webinars </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/webinars/trusted-technology" title="Trusted&#x20;Technology&#x20;Webinars" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Trusted Technology Webinars </span> </a> </span> </div> </div> </div> <div class="level-0"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b" :class="{ '-translate-x-full' : mobileLevelZeroPanelActiveId, 'translate-x-0' : !mobileLevelZeroPanelActiveId }" > <a class="flex items-center w-full py-4 cursor-pointer bg-container level-0 text-blue" href="https://publications.opengroup.org/white-papers" title="White&#x20;Papers" > <span> White Papers </span> </a> <button class="flex cursor-pointer text-blue bg-container" @click="mobileLevelZeroPanelActiveId = mobileLevelZeroPanelActiveId === 'category-node-50' ? 0 : 'category-node-50'" > <span> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="4" stroke="currentColor" class="w-full h-4" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="m8.25 4.5 7.5 7.5-7.5 7.5"/> <title>chevron-right</title></svg> </span> </button> </span> <div class="absolute top-0 right-0 z-10 w-full h-full transition-transform duration-200 ease-in-out translate-x-full transform bg-container level-1 px-4" :class="{ 'translate-x-full' : mobileLevelZeroPanelActiveId !== 'category-node-50', 'translate-x-0' : mobileLevelZeroPanelActiveId === 'category-node-50' }" > <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <button class="flex w-full items-center py-4 cursor-pointer bg-container" @click="mobileLevelZeroPanelActiveId = 0" > <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="4" stroke="currentColor" class="h-4 w-auto" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M15.75 19.5 8.25 12l7.5-7.5"/> <title>chevron-left</title></svg> <span class="ml-4"> White Papers </span> </button> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/white-papers" title="White&#x20;Papers" class="flex items-center w-full py-4 cursor-pointer bg-container border-container" > <span>View All</span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/white-papers/archimate" title="ArchiMate&#xAE;&#x20;White&#x20;Papers" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> ArchiMate® White Papers </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/white-papers/architecture" title="Architecture&#x20;White&#x20;Papers" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Architecture White Papers </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/white-papers/boundaryless-information-flow" title="Boundaryless&#x20;Information&#x20;Flow&#x2122;&#x20;White&#x20;Papers" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Boundaryless Information Flow™ White Papers </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/white-papers/certification-programs" title="Certification&#x20;White&#x20;Papers" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Certification White Papers </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/white-papers/cloud-computing" title="Cloud&#x20;Computing&#x20;White&#x20;Papers" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Cloud Computing White Papers </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/white-papers/commercial-aviation" title="Commercial&#x20;Aviation&#x20;White&#x20;Papers" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Commercial Aviation White Papers </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/white-papers/digital-business" title="Digital&#x20;Business&#x20;White&#x20;Papers" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Digital Business White Papers </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/white-papers/directory" title="Directory&#x20;White&#x20;Papers" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Directory White Papers </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/white-papers/healthcare" title="Healthcare&#x20;White&#x20;Papers" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Healthcare White Papers </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/white-papers/iot" title="IoT&#x20;White&#x20;Papers" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> IoT White Papers </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/white-papers/it4it" title="IT4IT&#x2122;&#x20;White&#x20;Papers" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> IT4IT™ White Papers </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/white-papers/lifecycle-management" title="Lifecycle&#x20;Management&#x20;White&#x20;Papers" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Lifecycle Management White Papers </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/white-papers/network-computing" title="Network&#x20;Computing&#x20;White&#x20;Papers" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Network Computing White Papers </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/white-papers/open-platform-3" title="Open&#x20;Platform&#x20;3.0&#x2122;&#x20;White&#x20;Papers" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Open Platform 3.0™ White Papers </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/white-papers/open-process-automation" title="Open&#x20;Process&#x20;Automation&#x2122;&#x20;White&#x20;Papers" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Open Process Automation™ White Papers </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/white-papers/security" title="Security&#x20;White&#x20;Papers" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Security White Papers </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/white-papers/soa" title="SOA&#x20;White&#x20;Papers" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> SOA White Papers </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/white-papers/togaf" title="TOGAF&#xAE;&#x20;White&#x20;Papers" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> TOGAF® White Papers </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/white-papers/trusted-technology" title="Trusted&#x20;Technology&#x20;White&#x20;Papers" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Trusted Technology White Papers </span> </a> </span> </div> </div> </div> <div class="level-0"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b" :class="{ '-translate-x-full' : mobileLevelZeroPanelActiveId, 'translate-x-0' : !mobileLevelZeroPanelActiveId }" > <a class="flex items-center w-full py-4 cursor-pointer bg-container level-0 text-blue" href="https://publications.opengroup.org/more-categories" title="More..." > <span> More... </span> </a> <button class="flex cursor-pointer text-blue bg-container" @click="mobileLevelZeroPanelActiveId = mobileLevelZeroPanelActiveId === 'category-node-45' ? 0 : 'category-node-45'" > <span> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="4" stroke="currentColor" class="w-full h-4" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="m8.25 4.5 7.5 7.5-7.5 7.5"/> <title>chevron-right</title></svg> </span> </button> </span> <div class="absolute top-0 right-0 z-10 w-full h-full transition-transform duration-200 ease-in-out translate-x-full transform bg-container level-1 px-4" :class="{ 'translate-x-full' : mobileLevelZeroPanelActiveId !== 'category-node-45', 'translate-x-0' : mobileLevelZeroPanelActiveId === 'category-node-45' }" > <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <button class="flex w-full items-center py-4 cursor-pointer bg-container" @click="mobileLevelZeroPanelActiveId = 0" > <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="4" stroke="currentColor" class="h-4 w-auto" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M15.75 19.5 8.25 12l7.5-7.5"/> <title>chevron-left</title></svg> <span class="ml-4"> More... </span> </button> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/more-categories" title="More..." class="flex items-center w-full py-4 cursor-pointer bg-container border-container" > <span>View All</span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/more-categories/agile" title="Agile" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Agile </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/more-categories/archimate-models" title="ArchiMate&#xAE;&#x20;Models" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> ArchiMate® Models </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/more-categories/archimate-stencils" title="ArchiMate&#xAE;&#x20;Stencils" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> ArchiMate® Stencils </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/more-categories/blogs" title="Blogs" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Blogs </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/more-categories/business-scenarios" title="Business&#x20;Scenarios" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Business Scenarios </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/more-categories/case-studies" title="Case&#x20;Studies" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Case Studies </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/more-categories/cde-motif" title="CDE&#x2F;Motif&#x20;Documentation" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> CDE/Motif Documentation </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/more-categories/com-dcom" title="COM&#x2F;DCOM" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> COM/DCOM </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/more-categories/consortium" title="Consortium&#x20;Specifications" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Consortium Specifications </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/more-categories/dce" title="DCE&#x20;Documentation" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> DCE Documentation </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/more-categories/hardcopy-publications" title="Hardcopy&#x20;Publications" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Hardcopy Publications </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/more-categories/open-subsurface-data-universetm" title="Open&#x20;Subsurface&#x20;Data&#x20;Universe&#x2122;&#x20;Forum" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Open Subsurface Data Universe™ Forum </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/more-categories/podcasts" title="Podcasts" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Podcasts </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/more-categories/reports" title="Reports" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Reports </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/more-categories/reference-cards" title="Reference&#x20;Cards" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Reference Cards </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/more-categories/rfps" title="RFPs" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> RFPs </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/more-categories/software-downloads" title="Software&#x20;Downloads" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Software Downloads </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/more-categories/og-press" title="The&#x20;Open&#x20;Group&#x20;Press" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> The Open Group Press </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/more-categories/training-materials" title="Training&#x20;Materials" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Training Materials </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/more-categories/templates" title="Templates" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Templates </span> </a> </span> </div> <div class="level-1"> <span class="flex items-center transition-transform duration-150 ease-in-out transform border-primary border-b"> <a href="https://publications.opengroup.org/more-categories/videos" title="Videos" class="flex relative items-center w-full py-4 cursor-pointer bg-container"> <span class="lg:ml-0"> Videos </span> </a> </span> </div> </div> </div> </nav> </div> </div> <script> 'use strict'; const initMenuMobile_6743eb0794cfc = () => { return { mobileLevelZeroPanelActiveId: null, mobileLevelOnePanelActiveId: null, open: false, } } </script> <div x-data="initMenuDesktop_6743eb07a1498()" class="z-20 order-2 navigation hidden bg-container sm:order-1 lg:order-2 lg:flex" > <!-- desktop --> <div class="container items-center mx-auto w-full"> <nav class="flex w-full relative" > <div class="level-0 flex flex-1 m-0 justify-center items-center transition-all duration-300 ease-in-out group hover:bg-primary" @mouseover.stop="hoverTopPosition = $event.currentTarget.offsetTop + $event.currentTarget.getBoundingClientRect().height" > <a href="https://publications.opengroup.org/standards" @focus="hoverTopPosition = $event.currentTarget.parentNode.offsetTop + $event.currentTarget.parentNode.getBoundingClientRect().height" title="Standards" class="level-0 py-2 px-2 block font-bold text-center text-blue group-hover:text-white"> <span> Standards </span> </a> <div class="absolute container p-0 left-0 top-full z-40 -mt-3 shadow-lg w-full opacity-0 transition-opacity ease-out pointer-events-none group-hover:opacity-100 focus-within:opacity-100 group-hover:pointer-events-auto" :style="`margin-top: 0; top: ${hoverTopPosition}px;`" > <div class="w-full"> <div class="bg-container w-full grid grid-cols-12 gap-8 px-8 py-12 items-start"> <ul class="mega-menu grid flex-1 gap-8 col-span-12 grid-cols-5"> <li class="level-1"> <a href="https://publications.opengroup.org/standards/agile-standards" title="Agile&#x20;Standards" class="level-1 block text-blue font-bold"> Agile Standards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/archimate" title="ArchiMate&#xAE;&#x20;Standards" class="level-1 block text-blue font-bold"> ArchiMate® Standards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/business-architecture" title="Business&#x20;Architecture&#x20;Standards" class="level-1 block text-blue font-bold"> Business Architecture Standards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/cloud-computing" title="Cloud&#x20;Computing&#x20;Standards" class="level-1 block text-blue font-bold"> Cloud Computing Standards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/commercial-aviation-standards" title="Commercial&#x20;Aviation&#x20;Standards" class="level-1 block text-blue font-bold"> Commercial Aviation Standards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/data-mgmt" title="Data&#x20;Management&#x20;Standards" class="level-1 block text-blue font-bold"> Data Management Standards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/digital-business-standards" title="Digital&#x20;Business&#x20;Standards" class="level-1 block text-blue font-bold"> Digital Business Standards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/dist-computing" title="Distributed&#x20;Computing&#x20;Standards" class="level-1 block text-blue font-bold"> Distributed Computing Standards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/emmm" title="EMMM&#x2122;&#x20;Standards" class="level-1 block text-blue font-bold"> EMMM™ Standards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/energistics-standards" title="Energistics&#x20;Standards" class="level-1 block text-blue font-bold"> Energistics Standards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/enterprise-architecture" title="Enterprise&#x20;Architecture&#x20;Standards" class="level-1 block text-blue font-bold"> Enterprise Architecture Standards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/enterprise-mgmt" title="Enterprise&#x20;Management&#x20;Standards" class="level-1 block text-blue font-bold"> Enterprise Management Standards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/face" title="FACE&#xAE;&#x20;Standards" class="level-1 block text-blue font-bold"> FACE® Standards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/healthcare" title="Healthcare&#x20;Standards" class="level-1 block text-blue font-bold"> Healthcare Standards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/interworking" title="Interworking&#x20;Standards" class="level-1 block text-blue font-bold"> Interworking Standards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/it4it" title="IT4IT&#x2122;&#x20;Standards" class="level-1 block text-blue font-bold"> IT4IT™ Standards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/open-fair-standards" title="Open&#x20;FAIR&#x2122;&#x20;Standards" class="level-1 block text-blue font-bold"> Open FAIR™ Standards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/op30" title="Open&#x20;Platform&#x20;3.0&#x2122;&#x20;Standards" class="level-1 block text-blue font-bold"> Open Platform 3.0™ Standards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/opa" title="Open&#x20;Process&#x20;Automation&#x2122;&#x20;Standards" class="level-1 block text-blue font-bold"> Open Process Automation™ Standards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/preliminary-standards" title="Preliminary&#x20;Standards" class="level-1 block text-blue font-bold"> Preliminary Standards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/realtime" title="Real-time&#x20;&amp;&#x20;Embedded&#x20;Systems&#x20;Standards" class="level-1 block text-blue font-bold"> Real-time &amp; Embedded Systems Standards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/security" title="Security&#x20;Standards" class="level-1 block text-blue font-bold"> Security Standards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/semantic-interop" title="Semantic&#x20;Interoperability&#x20;Standards" class="level-1 block text-blue font-bold"> Semantic Interoperability Standards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/snapshots" title="Snapshots" class="level-1 block text-blue font-bold"> Snapshots </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/soa" title="SOA&#x20;Standards" class="level-1 block text-blue font-bold"> SOA Standards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/sosa" title="SOSA&#x2122;&#x20;Standards" class="level-1 block text-blue font-bold"> SOSA™ Standards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/corrigenda" title="Technical&#x20;Corrigenda" class="level-1 block text-blue font-bold"> Technical Corrigenda </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/togaf" title="TOGAF&#xAE;&#x20;Standards" class="level-1 block text-blue font-bold"> TOGAF® Standards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/trusted-technology" title="Trusted&#x20;Technology&#x20;Standards" class="level-1 block text-blue font-bold"> Trusted Technology Standards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/standards/unix" title="UNIX&#xAE;&#x20;&#x20;Standards" class="level-1 block text-blue font-bold"> UNIX® Standards </a> </li> </ul> </div> </div> </div> </div> <div class="level-0 flex flex-1 m-0 justify-center items-center transition-all duration-300 ease-in-out group hover:bg-primary" @mouseover.stop="hoverTopPosition = $event.currentTarget.offsetTop + $event.currentTarget.getBoundingClientRect().height" > <a href="https://publications.opengroup.org/certifications" @focus="hoverTopPosition = $event.currentTarget.parentNode.offsetTop + $event.currentTarget.parentNode.getBoundingClientRect().height" title="Certifications" class="level-0 py-2 px-2 block font-bold text-center text-blue group-hover:text-white"> <span> Certifications </span> </a> <div class="absolute container p-0 left-0 top-full z-40 -mt-3 shadow-lg w-full opacity-0 transition-opacity ease-out pointer-events-none group-hover:opacity-100 focus-within:opacity-100 group-hover:pointer-events-auto" :style="`margin-top: 0; top: ${hoverTopPosition}px;`" > <div class="w-full"> <div class="bg-container w-full grid grid-cols-12 gap-8 px-8 py-12 items-start"> <ul class="mega-menu grid flex-1 gap-8 col-span-12 grid-cols-5"> <li class="level-1"> <a href="https://publications.opengroup.org/certifications/archimate" title="ArchiMate&#xAE;&#x20;Certification" class="level-1 block text-blue font-bold"> ArchiMate® Certification </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/certifications/certification-for-people" title="Certification&#x20;for&#x20;People" class="level-1 block text-blue font-bold"> Certification for People </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/certifications/dpbok" title="DPBoK&#x2122;&#x20;Certification" class="level-1 block text-blue font-bold"> DPBoK™ Certification </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/certifications/face" title="FACE&#xAE;&#x20;Training&#x20;&amp;&#x20;Certification" class="level-1 block text-blue font-bold"> FACE® Training &amp; Certification </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/certifications/it4it" title="IT4IT&#x2122;&#x20;Certification" class="level-1 block text-blue font-bold"> IT4IT™ Certification </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/certifications/o-aa-trade-certification" title="O-AA&#x2122;&#x20;Certification" class="level-1 block text-blue font-bold"> O-AA™ Certification </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/certifications/opas-cert" title="O-PAS&#x2122;&#x20;Certification" class="level-1 block text-blue font-bold"> O-PAS™ Certification </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/certifications/open-ca" title="Open&#x20;CA&#x20;Certification" class="level-1 block text-blue font-bold"> Open CA Certification </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/certifications/open-cds" title="Open&#x20;CDS&#x20;Certification" class="level-1 block text-blue font-bold"> Open CDS Certification </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/certifications/opencitm" title="Open&#x20;CITM&#x20;Certification" class="level-1 block text-blue font-bold"> Open CITM Certification </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/certifications/opencts" title="Open&#x20;CTS&#x20;Certification" class="level-1 block text-blue font-bold"> Open CTS Certification </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/certifications/octtp" title="Open&#x20;CTTP&#x20;Certification" class="level-1 block text-blue font-bold"> Open CTTP Certification </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/certifications/open-fair" title="Open&#x20;FAIR&#x2122;&#x20;Certification" class="level-1 block text-blue font-bold"> Open FAIR™ Certification </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/certifications/open-trusted-technology" title="Open&#x20;Trusted&#x20;Technology&#x20;Provider&#x2122;&#x20;Certification" class="level-1 block text-blue font-bold"> Open Trusted Technology Provider™ Certification </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/certifications/practice-tests" title="Practice&#x20;Tests" class="level-1 block text-blue font-bold"> Practice Tests </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/certifications/professional-certification" title="Professional&#x20;Certification" class="level-1 block text-blue font-bold"> Professional Certification </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/certifications/togaf" title="TOGAF&#xAE;&#x20;Certification" class="level-1 block text-blue font-bold"> TOGAF® Certification </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/certifications/the-open-brand" title="The&#x20;Open&#x20;Brand&#x20;Certification" class="level-1 block text-blue font-bold"> The Open Brand Certification </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/certifications/unix" title="UNIX&#xAE;&#x20;Certification" class="level-1 block text-blue font-bold"> UNIX® Certification </a> </li> </ul> </div> </div> </div> </div> <div class="level-0 flex flex-1 m-0 justify-center items-center transition-all duration-300 ease-in-out group hover:bg-primary" @mouseover.stop="hoverTopPosition = $event.currentTarget.offsetTop + $event.currentTarget.getBoundingClientRect().height" > <a href="https://publications.opengroup.org/guides" @focus="hoverTopPosition = $event.currentTarget.parentNode.offsetTop + $event.currentTarget.parentNode.getBoundingClientRect().height" title="Guides" class="level-0 py-2 px-2 block font-bold text-center text-blue group-hover:text-white"> <span> Guides </span> </a> <div class="absolute container p-0 left-0 top-full z-40 -mt-3 shadow-lg w-full opacity-0 transition-opacity ease-out pointer-events-none group-hover:opacity-100 focus-within:opacity-100 group-hover:pointer-events-auto" :style="`margin-top: 0; top: ${hoverTopPosition}px;`" > <div class="w-full"> <div class="bg-container w-full grid grid-cols-12 gap-8 px-8 py-12 items-start"> <ul class="mega-menu grid flex-1 gap-8 col-span-12 grid-cols-5"> <li class="level-1"> <a href="https://publications.opengroup.org/guides/agile-architecture-guides" title="Agile&#x20;Architecture&#x20;Guides" class="level-1 block text-blue font-bold"> Agile Architecture Guides </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/guides/archimate" title="ArchiMate&#xAE;&#x20;Guides" class="level-1 block text-blue font-bold"> ArchiMate® Guides </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/guides/architecture" title="Architecture&#x20;Guides" class="level-1 block text-blue font-bold"> Architecture Guides </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/guides/business-architecture" title="Business&#x20;Architecture&#x20;Guides" class="level-1 block text-blue font-bold"> Business Architecture Guides </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/guides/cloud-computing" title="Cloud&#x20;Computing&#x20;Guides" class="level-1 block text-blue font-bold"> Cloud Computing Guides </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/guides/digital-transformation" title="Digital&#x20;Transformation&#x20;Guides" class="level-1 block text-blue font-bold"> Digital Transformation Guides </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/guides/direcnet" title="DirecNet&#xAE;&#x20;Guides" class="level-1 block text-blue font-bold"> DirecNet® Guides </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/guides/electronic-messaging" title="Electronic&#x20;Messaging&#x20;Guides" class="level-1 block text-blue font-bold"> Electronic Messaging Guides </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/guides/face" title="FACE&#xAE;&#x20;Guides" class="level-1 block text-blue font-bold"> FACE® Guides </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/guides/healthcare-guides" title="Healthcare&#x20;Guides" class="level-1 block text-blue font-bold"> Healthcare Guides </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/guides/identity-management" title="Identity&#x20;Management&#x20;Guides" class="level-1 block text-blue font-bold"> Identity Management Guides </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/guides/it4it" title="IT4IT&#x2122;&#x20;Guides" class="level-1 block text-blue font-bold"> IT4IT™ Guides </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/guides/openca" title="Open&#x20;Professions&#x20;Guides" class="level-1 block text-blue font-bold"> Open Professions Guides </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/guides/open-fair" title="Open&#x20;FAIR&amp;trade&#x3B;&#x20;Guides" class="level-1 block text-blue font-bold"> Open FAIR&trade; Guides </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/guides/open-platform-3" title="Open&#x20;Platform&#x20;3.0&amp;trade&#x3B;&#x20;Guides" class="level-1 block text-blue font-bold"> Open Platform 3.0&trade; Guides </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/guides/open-process-automation" title="Open&#x20;Process&#x20;Automation&amp;trade&#x3B;&#x20;Guides" class="level-1 block text-blue font-bold"> Open Process Automation&trade; Guides </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/guides/osdu-guides" title="OSDU&#xAE;&#x20;Guides" class="level-1 block text-blue font-bold"> OSDU® Guides </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/guides/security" title="Security&#x20;Guides" class="level-1 block text-blue font-bold"> Security Guides </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/guides/soa" title="SOA&#x20;Guides" class="level-1 block text-blue font-bold"> SOA Guides </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/guides/sosa" title="SOSA&#x2122;&#x20;Guides" class="level-1 block text-blue font-bold"> SOSA™ Guides </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/guides/standards-process" title="Standards&#x20;Process&#x20;Guides" class="level-1 block text-blue font-bold"> Standards Process Guides </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/guides/togaf" title="TOGAF&#xAE;&#x20;Guides" class="level-1 block text-blue font-bold"> TOGAF® Guides </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/guides/trusted-technology" title="Trusted&#x20;Technology&#x20;Guides" class="level-1 block text-blue font-bold"> Trusted Technology Guides </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/guides/unix" title="UNIX&#xAE;&#x20;Guides" class="level-1 block text-blue font-bold"> UNIX® Guides </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/guides/commercial-aviation-guides" title="Commercial&#x20;Aviation&#x20;Guides" class="level-1 block text-blue font-bold"> Commercial Aviation Guides </a> </li> </ul> </div> </div> </div> </div> <div class="level-0 flex flex-1 m-0 justify-center items-center transition-all duration-300 ease-in-out group hover:bg-primary" @mouseover.stop="hoverTopPosition = $event.currentTarget.offsetTop + $event.currentTarget.getBoundingClientRect().height" > <a href="https://publications.opengroup.org/data-sheets" @focus="hoverTopPosition = $event.currentTarget.parentNode.offsetTop + $event.currentTarget.parentNode.getBoundingClientRect().height" title="Data&#x20;Sheets" class="level-0 py-2 px-2 block font-bold text-center text-blue group-hover:text-white"> <span> Data Sheets </span> </a> </div> <div class="level-0 flex flex-1 m-0 justify-center items-center transition-all duration-300 ease-in-out group hover:bg-primary" @mouseover.stop="hoverTopPosition = $event.currentTarget.offsetTop + $event.currentTarget.getBoundingClientRect().height" > <a href="https://publications.opengroup.org/webinars" @focus="hoverTopPosition = $event.currentTarget.parentNode.offsetTop + $event.currentTarget.parentNode.getBoundingClientRect().height" title="Webinars" class="level-0 py-2 px-2 block font-bold text-center text-blue group-hover:text-white"> <span> Webinars </span> </a> <div class="absolute container p-0 left-0 top-full z-40 -mt-3 shadow-lg w-full opacity-0 transition-opacity ease-out pointer-events-none group-hover:opacity-100 focus-within:opacity-100 group-hover:pointer-events-auto" :style="`margin-top: 0; top: ${hoverTopPosition}px;`" > <div class="w-full"> <div class="bg-container w-full grid grid-cols-12 gap-8 px-8 py-12 items-start"> <ul class="mega-menu grid flex-1 gap-8 col-span-12 grid-cols-5"> <li class="level-1"> <a href="https://publications.opengroup.org/webinars/archimate" title="ArchiMate&#xAE;&#x20;Webinars" class="level-1 block text-blue font-bold"> ArchiMate® Webinars </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/webinars/toolkit" title="Architect&#x27;s&#x20;Toolkit&#x20;&#x28;broadcast&#x20;episodes&#x29;" class="level-1 block text-blue font-bold"> Architect&#039;s Toolkit (broadcast episodes) </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/webinars/architecture" title="Architecture&#x20;Webinars" class="level-1 block text-blue font-bold"> Architecture Webinars </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/webinars/business-architecture-webinars" title="Business&#x20;Architecture&#x20;Webinars" class="level-1 block text-blue font-bold"> Business Architecture Webinars </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/webinars/certification-program" title="Certification&#x20;Program&#x20;Webinars" class="level-1 block text-blue font-bold"> Certification Program Webinars </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/webinars/cloud-computing" title="Cloud&#x20;Computing&#x20;Webinars" class="level-1 block text-blue font-bold"> Cloud Computing Webinars </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/webinars/digital-business" title="Digital&#x20;Business&#x20;Webinars" class="level-1 block text-blue font-bold"> Digital Business Webinars </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/webinars/face" title="FACE&#xAE;&#x20;Webinars" class="level-1 block text-blue font-bold"> FACE® Webinars </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/webinars/iot" title="IoT&#x20;Webinars" class="level-1 block text-blue font-bold"> IoT Webinars </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/webinars/it4it" title="IT4IT&#x2122;&#x20;Webinars" class="level-1 block text-blue font-bold"> IT4IT™ Webinars </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/webinars/learning-pathways-series" title="Learning&#x20;Pathways&#x20;Webinar&#x20;Series" class="level-1 block text-blue font-bold"> Learning Pathways Webinar Series </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/webinars/open-cits" title="Open&#x20;CITS&#x20;Webinars" class="level-1 block text-blue font-bold"> Open CITS Webinars </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/webinars/open-footprint-webinars" title="Open&#x20;Footprint&#xAE;&#x20;Webinars" class="level-1 block text-blue font-bold"> Open Footprint® Webinars </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/webinars/open-platform-3-0" title="Open&#x20;Platform&#x20;3.0&#x2122;&#x20;Webinars" class="level-1 block text-blue font-bold"> Open Platform 3.0™ Webinars </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/webinars/open-fair" title="Open&#x20;FAIR&#x2122;&#x20;Webinars" class="level-1 block text-blue font-bold"> Open FAIR™ Webinars </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/webinars/open-process-automation" title="Open&#x20;Process&#x20;Automation&#x2122;&#x20;Webinars" class="level-1 block text-blue font-bold"> Open Process Automation™ Webinars </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/webinars/osdu-trade-webinars" title="OSDU&#xAE;&#x20;Webinars" class="level-1 block text-blue font-bold"> OSDU® Webinars </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/webinars/security" title="Security&#x20;Webinars" class="level-1 block text-blue font-bold"> Security Webinars </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/webinars/soa" title="SOA&#x20;Webinars" class="level-1 block text-blue font-bold"> SOA Webinars </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/webinars/sosa" title="SOSA&#x2122;&#x20;Webinars" class="level-1 block text-blue font-bold"> SOSA™ Webinars </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/webinars/togaf" title="TOGAF&#xAE;&#x20;Webinars" class="level-1 block text-blue font-bold"> TOGAF® Webinars </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/webinars/trusted-technology" title="Trusted&#x20;Technology&#x20;Webinars" class="level-1 block text-blue font-bold"> Trusted Technology Webinars </a> </li> </ul> </div> </div> </div> </div> <div class="level-0 flex flex-1 m-0 justify-center items-center transition-all duration-300 ease-in-out group hover:bg-primary" @mouseover.stop="hoverTopPosition = $event.currentTarget.offsetTop + $event.currentTarget.getBoundingClientRect().height" > <a href="https://publications.opengroup.org/white-papers" @focus="hoverTopPosition = $event.currentTarget.parentNode.offsetTop + $event.currentTarget.parentNode.getBoundingClientRect().height" title="White&#x20;Papers" class="level-0 py-2 px-2 block font-bold text-center text-blue group-hover:text-white"> <span> White Papers </span> </a> <div class="absolute container p-0 left-0 top-full z-40 -mt-3 shadow-lg w-full opacity-0 transition-opacity ease-out pointer-events-none group-hover:opacity-100 focus-within:opacity-100 group-hover:pointer-events-auto" :style="`margin-top: 0; top: ${hoverTopPosition}px;`" > <div class="w-full"> <div class="bg-container w-full grid grid-cols-12 gap-8 px-8 py-12 items-start"> <ul class="mega-menu grid flex-1 gap-8 col-span-12 grid-cols-5"> <li class="level-1"> <a href="https://publications.opengroup.org/white-papers/archimate" title="ArchiMate&#xAE;&#x20;White&#x20;Papers" class="level-1 block text-blue font-bold"> ArchiMate® White Papers </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/white-papers/architecture" title="Architecture&#x20;White&#x20;Papers" class="level-1 block text-blue font-bold"> Architecture White Papers </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/white-papers/boundaryless-information-flow" title="Boundaryless&#x20;Information&#x20;Flow&#x2122;&#x20;White&#x20;Papers" class="level-1 block text-blue font-bold"> Boundaryless Information Flow™ White Papers </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/white-papers/certification-programs" title="Certification&#x20;White&#x20;Papers" class="level-1 block text-blue font-bold"> Certification White Papers </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/white-papers/cloud-computing" title="Cloud&#x20;Computing&#x20;White&#x20;Papers" class="level-1 block text-blue font-bold"> Cloud Computing White Papers </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/white-papers/commercial-aviation" title="Commercial&#x20;Aviation&#x20;White&#x20;Papers" class="level-1 block text-blue font-bold"> Commercial Aviation White Papers </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/white-papers/digital-business" title="Digital&#x20;Business&#x20;White&#x20;Papers" class="level-1 block text-blue font-bold"> Digital Business White Papers </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/white-papers/directory" title="Directory&#x20;White&#x20;Papers" class="level-1 block text-blue font-bold"> Directory White Papers </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/white-papers/healthcare" title="Healthcare&#x20;White&#x20;Papers" class="level-1 block text-blue font-bold"> Healthcare White Papers </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/white-papers/iot" title="IoT&#x20;White&#x20;Papers" class="level-1 block text-blue font-bold"> IoT White Papers </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/white-papers/it4it" title="IT4IT&#x2122;&#x20;White&#x20;Papers" class="level-1 block text-blue font-bold"> IT4IT™ White Papers </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/white-papers/lifecycle-management" title="Lifecycle&#x20;Management&#x20;White&#x20;Papers" class="level-1 block text-blue font-bold"> Lifecycle Management White Papers </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/white-papers/network-computing" title="Network&#x20;Computing&#x20;White&#x20;Papers" class="level-1 block text-blue font-bold"> Network Computing White Papers </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/white-papers/open-platform-3" title="Open&#x20;Platform&#x20;3.0&#x2122;&#x20;White&#x20;Papers" class="level-1 block text-blue font-bold"> Open Platform 3.0™ White Papers </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/white-papers/open-process-automation" title="Open&#x20;Process&#x20;Automation&#x2122;&#x20;White&#x20;Papers" class="level-1 block text-blue font-bold"> Open Process Automation™ White Papers </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/white-papers/security" title="Security&#x20;White&#x20;Papers" class="level-1 block text-blue font-bold"> Security White Papers </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/white-papers/soa" title="SOA&#x20;White&#x20;Papers" class="level-1 block text-blue font-bold"> SOA White Papers </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/white-papers/togaf" title="TOGAF&#xAE;&#x20;White&#x20;Papers" class="level-1 block text-blue font-bold"> TOGAF® White Papers </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/white-papers/trusted-technology" title="Trusted&#x20;Technology&#x20;White&#x20;Papers" class="level-1 block text-blue font-bold"> Trusted Technology White Papers </a> </li> </ul> </div> </div> </div> </div> <div class="level-0 flex flex-1 m-0 justify-center items-center transition-all duration-300 ease-in-out group hover:bg-primary" @mouseover.stop="hoverTopPosition = $event.currentTarget.offsetTop + $event.currentTarget.getBoundingClientRect().height" > <a href="https://publications.opengroup.org/more-categories" @focus="hoverTopPosition = $event.currentTarget.parentNode.offsetTop + $event.currentTarget.parentNode.getBoundingClientRect().height" title="More..." class="level-0 py-2 px-2 block font-bold text-center text-blue group-hover:text-white"> <span> More... </span> </a> <div class="absolute container p-0 left-0 top-full z-40 -mt-3 shadow-lg w-full opacity-0 transition-opacity ease-out pointer-events-none group-hover:opacity-100 focus-within:opacity-100 group-hover:pointer-events-auto" :style="`margin-top: 0; top: ${hoverTopPosition}px;`" > <div class="w-full"> <div class="bg-container w-full grid grid-cols-12 gap-8 px-8 py-12 items-start"> <ul class="mega-menu grid flex-1 gap-8 col-span-12 grid-cols-5"> <li class="level-1"> <a href="https://publications.opengroup.org/more-categories/agile" title="Agile" class="level-1 block text-blue font-bold"> Agile </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/more-categories/archimate-models" title="ArchiMate&#xAE;&#x20;Models" class="level-1 block text-blue font-bold"> ArchiMate® Models </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/more-categories/archimate-stencils" title="ArchiMate&#xAE;&#x20;Stencils" class="level-1 block text-blue font-bold"> ArchiMate® Stencils </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/more-categories/blogs" title="Blogs" class="level-1 block text-blue font-bold"> Blogs </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/more-categories/business-scenarios" title="Business&#x20;Scenarios" class="level-1 block text-blue font-bold"> Business Scenarios </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/more-categories/case-studies" title="Case&#x20;Studies" class="level-1 block text-blue font-bold"> Case Studies </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/more-categories/cde-motif" title="CDE&#x2F;Motif&#x20;Documentation" class="level-1 block text-blue font-bold"> CDE/Motif Documentation </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/more-categories/com-dcom" title="COM&#x2F;DCOM" class="level-1 block text-blue font-bold"> COM/DCOM </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/more-categories/consortium" title="Consortium&#x20;Specifications" class="level-1 block text-blue font-bold"> Consortium Specifications </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/more-categories/dce" title="DCE&#x20;Documentation" class="level-1 block text-blue font-bold"> DCE Documentation </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/more-categories/hardcopy-publications" title="Hardcopy&#x20;Publications" class="level-1 block text-blue font-bold"> Hardcopy Publications </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/more-categories/open-subsurface-data-universetm" title="Open&#x20;Subsurface&#x20;Data&#x20;Universe&#x2122;&#x20;Forum" class="level-1 block text-blue font-bold"> Open Subsurface Data Universe™ Forum </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/more-categories/podcasts" title="Podcasts" class="level-1 block text-blue font-bold"> Podcasts </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/more-categories/reports" title="Reports" class="level-1 block text-blue font-bold"> Reports </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/more-categories/reference-cards" title="Reference&#x20;Cards" class="level-1 block text-blue font-bold"> Reference Cards </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/more-categories/rfps" title="RFPs" class="level-1 block text-blue font-bold"> RFPs </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/more-categories/software-downloads" title="Software&#x20;Downloads" class="level-1 block text-blue font-bold"> Software Downloads </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/more-categories/og-press" title="The&#x20;Open&#x20;Group&#x20;Press" class="level-1 block text-blue font-bold"> The Open Group Press </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/more-categories/training-materials" title="Training&#x20;Materials" class="level-1 block text-blue font-bold"> Training Materials </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/more-categories/templates" title="Templates" class="level-1 block text-blue font-bold"> Templates </a> </li> <li class="level-1"> <a href="https://publications.opengroup.org/more-categories/videos" title="Videos" class="level-1 block text-blue font-bold"> Videos </a> </li> </ul> </div> </div> </div> </div> </nav> </div> </div> <script> 'use strict'; const initMenuDesktop_6743eb07a1498 = () => { return { hoverTopPosition: '100%', } } </script> <!--Cart Drawer--> <script> function initCartDrawer() { return { open: false, isLoading: false, cart: {}, maxItemsToDisplay: 10, itemsCount: 0, totalCartAmount: 0, getData(data) { if (data.cart) { this.cart = data.cart; this.itemsCount = data.cart.items && data.cart.items.length || 0; this.totalCartAmount = this.cart.summary_count; this.setCartItems(); } this.isLoading = false; }, cartItems: [], getItemCountTitle() { return hyva.strf('\u00250\u0020of\u0020\u00251\u0020products\u0020in\u0020cart\u0020displayed', this.maxItemsToDisplay, this.totalCartAmount) }, setCartItems() { this.cartItems = this.cart.items && this.cart.items.sort((a, b) => b.item_id - a.item_id) || []; if (this.maxItemsToDisplay > 0) { this.cartItems = this.cartItems.slice(0, parseInt(this.maxItemsToDisplay, 10)); } }, deleteItemFromCart(itemId) { this.isLoading = true; const formKey = hyva.getFormKey(); const postUrl = BASE_URL + 'checkout/sidebar/removeItem/'; fetch(postUrl, { "headers": { "content-type": "application/x-www-form-urlencoded; charset=UTF-8", }, "body": "form_key=" + formKey + "&item_id=" + itemId, "method": "POST", "mode": "cors", "credentials": "include" }).then(response => { if (response.redirected) { window.location.href = response.url; } else if (response.ok) { return response.json(); } else { window.dispatchMessages && window.dispatchMessages([{ type: 'warning', text: 'Could\u0020not\u0020remove\u0020item\u0020from\u0020quote.' }]); this.isLoading = false; } }).then(result => { window.dispatchMessages && window.dispatchMessages([{ type: result.success ? 'success' : 'error', text: result.success ? 'You\u0020removed\u0020the\u0020item.' : result.error_message }], result.success ? 5000 : 0) window.dispatchEvent(new CustomEvent('reload-customer-section-data')); }); }, toggleCartDrawer(event) { if (event.detail && event.detail.isOpen !== undefined) { if (event.detail.isOpen) { this.openCartDrawer() } else { this.open = false this.$refs && this.$refs.cartDialogContent && hyva.releaseFocus(this.$refs.cartDialogContent) } } else { this.openCartDrawer() } }, openCartDrawer() { this.open = true; this.$nextTick(() => { this.$refs && this.$refs.cartDialogContent && hyva.trapFocus(this.$refs.cartDialogContent) }) }, closeCartDrawer() { this.$dispatch('toggle-cart', { isOpen: false }) } } } </script> <section x-cloak x-show="cart" id="cart-drawer" x-data="initCartDrawer()" @private-content-loaded.window="getData($event.detail.data)" @toggle-cart.window="toggleCartDrawer($event)" @keydown.window.escape="closeCartDrawer" > <div role="dialog" aria-labelledby="cart-drawer-title" aria-modal="true" :aria-hidden="!open" class="fixed inset-y-0 right-0 z-30 flex max-w-full"> <div class="backdrop" x-show="open" x-transition:enter="ease-in-out duration-500" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" x-transition:leave="ease-in-out duration-500" x-transition:leave-start="opacity-100" x-transition:leave-end="opacity-0" role="button" @click="closeCartDrawer" aria-label="Close&#x20;minicart"></div> <div class="relative w-screen max-w-md shadow-2xl" x-show="open" x-transition:enter="transform transition ease-in-out duration-500 sm:duration-700" x-transition:enter-start="translate-x-full" x-transition:enter-end="translate-x-0" x-transition:leave="transform transition ease-in-out duration-500 sm:duration-700" x-transition:leave-start="translate-x-0" x-transition:leave-end="translate-x-full" x-ref="cartDialogContent" role="region" :tabindex="open ? 0 : -1" aria-label="My&#x20;Cart" > <div class="flex flex-col h-full py-6 bg-gray-lightest shadow-xl"> <header class="px-4 sm:px-6"> <h2 id="cart-drawer-title" class="uppercase text-xl leading-7"> <span x-html="itemsCount"></span> <span x-text="itemsCount === 1 ? 'Item in' : 'Items in'"></span> Your Cart <span class="items-total text-xs" x-show="maxItemsToDisplay && maxItemsToDisplay < itemsCount" x-text="getItemCountTitle()"> </span> </h2> </header> <template x-if="!itemsCount"> <div class="relative px-4 py-6 sm:px-6"> Cart is empty </div> </template> <template x-if="itemsCount"> <div> <div class="relative grid gap-8 px-4 pb-8 sm:px-6"> <div class="w-full font-bold text-blue"> <p>Cart Subtotal: <span x-html="cart.subtotal"></span></p> </div> <div class="w-full gap-4"> <div> <a href="https://publications.opengroup.org/checkout/cart/" class="inline-flex btn btn-primary w-full hover:text-black" > View Cart </a> </div> </div> </div> </div> </template> <template x-if="itemsCount"> <div class="relative grid gap-6 px-4 pb-6 overflow-y-auto overscroll-y-contain sm:gap-8 sm:px-6" > <template x-for="item in cartItems"> <div class="flex items-center card shadow-md p-0"> <div class="p-2 w-2/6"> <a :href="item.product_url" :aria-label="hyva.strf('Product\u0020\u0022\u00250\u0022', item.product_name)" > <img :src="item.product_image.src" :width="item.product_image.width" :height="item.product_image.height" loading="lazy" alt="" class="w-full" /> </a> </div> <div class="w-4/6 space-y-2 p-4 bg-white"> <div class="flex flex-col gap-2"> <a :href="item.product_url" :aria-label="hyva.strf('Product\u0020\u0022\u00250\u0022', item.product_name)" > <span x-html="item.qty"></span> x <span x-html="item.product_name"></span> </a> </div> <template x-for="option in item.options"> <div x-data="{ open: false }" > <button class="flex items-center gap-1" x-on:click="open = ! open" > <span>Show Details</span> <span :class="open ? 'hidden' : ''"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="h-4 w-4 [&amp;&gt;*]:stroke-[3px]" width="20" height="20" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"/> </svg> </span> <span :class="open ? '' : 'hidden'"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="h-4 w-4 [&amp;&gt;*]:stroke-[3px]" width="20" height="20" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" d="M5 15l7-7 7 7"/> </svg> </span> </button> <div class="pt-2" x-show="open" > <p class="font-semibold" x-text="option.label + ':'"></p> <p x-html="option.value"></p> </div> </div> </template> <div class="flex justify-between items-center"> <p><span x-html="item.product_price"></span></p> <div> <button type="button" class="inline-flex hover:text-primary" @click="deleteItemFromCart(item.item_id)" :aria-label="hyva.strf('Remove\u0020product\u0020\u0022\u00250\u0022\u0020from\u0020cart', item.product_name)" > <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="h-6 w-6" width="20" height="20" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"/> </svg> </button> </div> </div> </div> </div> </template> </div> </template> </div> <button type="button" @click="closeCartDrawer" aria-label="Close&#x20;minicart" class="absolute top-0 right-0 p-4 mt-2 text-blye transition-colors hover:text-primary" > <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> </svg> </button> </div> <div class="flex flex-row justify-center items-center w-full h-full fixed select-none z-50" style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgba(255,255,255,0.7);" x-show="isLoading" x-cloak x-transition:enter="ease-out duration-200" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" x-transition:leave="ease-in duration-200" x-transition:leave-start="opacity-100" x-transition:leave-end="opacity-0"> <!-- By Sam Herbert (@sherb), for everyone. More @ http://goo.gl/7AJzbL --> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 57 57" stroke="currentColor" class="text-primary" width="57" height="57" role="img"> <g fill="none" fill-rule="evenodd"> <g transform="translate(1 1)" stroke-width="2"> <circle cx="5" cy="50" r="5"> <animate attributeName="cy" begin="0s" dur="2.2s" values="50;5;50;50" calcMode="linear" repeatCount="indefinite"/> <animate attributeName="cx" begin="0s" dur="2.2s" values="5;27;49;5" calcMode="linear" repeatCount="indefinite"/> </circle> <circle cx="27" cy="5" r="5"> <animate attributeName="cy" begin="0s" dur="2.2s" from="5" to="5" values="5;50;50;5" calcMode="linear" repeatCount="indefinite"/> <animate attributeName="cx" begin="0s" dur="2.2s" from="27" to="27" values="27;49;5;27" calcMode="linear" repeatCount="indefinite"/> </circle> <circle cx="49" cy="50" r="5"> <animate attributeName="cy" begin="0s" dur="2.2s" values="50;50;5;50" calcMode="linear" repeatCount="indefinite"/> <animate attributeName="cx" from="49" to="49" begin="0s" dur="2.2s" values="49;5;27;49" calcMode="linear" repeatCount="indefinite"/> </circle> </g> </g> <title>loader</title></svg> <div class="ml-10 text-primary text-xl"> Loading... </div> </div> </div> </section> <!--Authentication Pop-Up--> <script> function initAuthentication() { return { open: false, forceAuthentication: false, checkoutUrl: 'https://publications.opengroup.org/checkout/index/', errors: 0, hasCaptchaToken: 0, displayErrorMessage: false, errorMessages: [], setErrorMessages: function setErrorMessages(messages) { this.errorMessages = [messages]; this.displayErrorMessage = this.errorMessages.length; }, submitForm: function () { // Do not rename $form, the variable is expected to be declared in the recaptcha output const $form = document.querySelector('#login-form'); if (this.errors === 0) { this.dispatchLoginRequest($form); } }, onPrivateContentLoaded: function (data) { const isLoggedIn = data.customer && data.customer.firstname; if (data.cart && !isLoggedIn) { this.forceAuthentication = !data.cart.isGuestCheckoutAllowed; } }, redirectIfAuthenticated: function (event) { if (event.detail && event.detail.url) { this.checkoutUrl = event.detail.url; } if (!this.forceAuthentication) { window.location.href = this.checkoutUrl; } }, dispatchLoginRequest: function(form) { this.isLoading = true; const username = this.$refs['customer-email'].value; const password = this.$refs['customer-password'].value; const formKey = hyva.getFormKey(); const bodyFields = { 'username': username, 'password': password, 'formKey': formKey }; const fieldName = 'g\u002Drecaptcha\u002Dresponse'; const recaptchaField = fieldName && form[fieldName]; if (recaptchaField) { bodyFields[fieldName] = recaptchaField.value; } fetch('https://publications.opengroup.org/customer/ajax/login/', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-Requested-With': 'XMLHttpRequest' }, body: JSON.stringify(bodyFields) } ).then(response => { return response.json() } ).then(data=> { this.isLoading = false; if (data.errors) { dispatchMessages([{ type: 'error', text: data.message }], 5000); this.errors = 1; this.hasCaptchaToken = 0; } else { window.location.href = this.checkoutUrl; } }); } } } </script> <section id="authentication-popup" x-data="initAuthentication()" @private-content-loaded.window="onPrivateContentLoaded($event.detail.data)" @toggle-authentication.window="open = forceAuthentication; redirectIfAuthenticated(event)" @keydown.window.escape="open = false" > <div role="dialog" aria-modal="true" @click.outside="open = false" class="inset-y-0 right-0 z-30 flex max-w-full" :class="{'fixed': open }" x-cloak x-show="open" > <div class="relative w-screen max-w-md pt-16 bg-container-lighter" x-show="open" x-cloak="" x-transition:enter="transform transition ease-in-out duration-500 sm:duration-700" x-transition:enter-start="translate-x-full" x-transition:enter-end="translate-x-0" x-transition:leave="transform transition ease-in-out duration-500 sm:duration-700" x-transition:leave-start="translate-x-0" x-transition:leave-end="translate-x-full" > <div x-show="open" x-cloak="" x-transition:enter="ease-in-out duration-500" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" x-transition:leave="ease-in-out duration-500" x-transition:leave-start="opacity-100" x-transition:leave-end="opacity-0" class="absolute top-0 right-0 flex p-2 mt-2"> <button @click="open = false;" aria-label="Close panel" class="p-2 text-gray-300 transition duration-150 ease-in-out hover:text-black"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> <title>x</title></svg> </button> </div> <div class="flex flex-col h-full space-y-6 bg-white shadow-xl overflow-y-auto"> <div class="block-customer-login mx-4 px-4 pt-0"> <p id="authenticate-customer-login" class="h2 mb-6"> <strong class="font-semibold">Checkout using your account</strong> </p> </p> <form class="form form-login" method="post" @submit.prevent="submitForm();" id="login-form" > <div class="fieldset login"> <div class="field email required"> <label class="label" for="form-login-username" form="login-form" > <span>Email Address</span> </label> <div class="control"> <input name="username" id="form-login-username" x-ref="customer-email" @change="errors = 0" type="email" required class="form-input input-text w-full" > </div> </div> <div class="field password required"> <label for="form-login-password" class="label" form="login-form"> <span>Password</span> </label> <div class="control"> <input name="password" id="form-login-password" type="password" class="form-input input-text w-full" required x-ref="customer-password" @change="errors = 0" > </div> </div> <input name="context" type="hidden" value="checkout" /> <div class="flex flex-col pt-6 pb-6"> <a href="https://publications.opengroup.org/customer/account/forgotpassword/" class="pb-6 font-semibold" > Forgot Your Password? </a> <button type="submit" class="inline-flex btn btn-primary w-full disabled:opacity-75" > Sign In </button> </div> </div> </form> </div> <div class="mx-4"> </div> <div class="block-new-customer mx-4 px-4"> <p id="authenticate-new-customer" class="h2 mb-2"> <strong class="font-semibold">Checkout as a new customer</strong> </p> <div class="block-content"> <p class="mb-1"> Creating an account has many benefits: </p> <ul class="list-disc pl-5"> <li> See order and shipping status</li> <li> Track order history</li> <li> Check out faster</li> </ul> <div class="flex justify-between mt-6 mb-2 items-center"> <a href="https://publications.opengroup.org/customer/account/create/" class="inline-flex btn btn-dark w-full"> Create an Account </a> </div> </div> </div> </div> </div> </div> </section> </div> </header><div class="top-container"><nav class="breadcrumbs text-gray" aria-label="Breadcrumb"> <div class="container"> <ol class="items list-reset py-4 rounded flex flex-wrap text-grey text-sm md:py-7"> <li class="item flex home"> <a href="https://publications.opengroup.org/" class="underline" title="Go&#x20;to&#x20;Home&#x20;Page" >Home</a> <span aria-hidden="true" class="separator flex items-center text-gray px-2"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-4 h-4 text-primary" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="m5.25 4.5 7.5 7.5-7.5 7.5m6-15 7.5 7.5-7.5 7.5"/> <title>chevron-double-right</title></svg> </span> </li> <li class="item flex category45"> <a href="https://publications.opengroup.org/more-categories" class="underline" title="" >More...</a> <span aria-hidden="true" class="separator flex items-center text-gray px-2"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-4 h-4 text-primary" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="m5.25 4.5 7.5 7.5-7.5 7.5m6-15 7.5 7.5-7.5 7.5"/> <title>chevron-double-right</title></svg> </span> </li> <li class="item flex category140"> <span class="text-gray" aria-current="page" >Templates</span> </li> </ol> </div> </nav> </div><div class="page-main"><div class="page messages"><script> function initMessages() { "use strict"; return { messages: window.mageMessages || [], isEmpty() { return this.messages.reduce( function (isEmpty, message) { return isEmpty && message === undefined }, true ) }, removeMessage(messageIndex) { this.messages[messageIndex] = undefined; }, addMessages(messages, hideAfter) { messages.map((message) => { this.messages = this.messages.concat(message); if (hideAfter === undefined && message.type === 'success' && window.defaultSuccessMessageTimeout) { hideAfter = window.defaultSuccessMessageTimeout; } if (hideAfter) { this.setHideTimeOut(this.messages.length -1, hideAfter); } }); }, setHideTimeOut(messageIndex, hideAfter) { setTimeout((messageIndex) => { this.removeMessage(messageIndex); }, hideAfter, messageIndex); }, eventListeners: { ['@messages-loaded.window'](event) { this.addMessages(event.detail.messages, event.detail.hideAfter) }, ['@private-content-loaded.window'](event) { const data = event.detail.data; if ( data.messages && data.messages.messages && data.messages.messages.length ) { this.addMessages(data.messages.messages); } }, ['@clear-messages.window']() { this.messages = []; } } } } </script> <section id="messages" x-data="initMessages()" x-bind="eventListeners" aria-live="assertive" role="alert" > <template x-if="!isEmpty()"> <div class="w-full"> <div class="messages container mx-auto py-3"> <template x-for="(message, index) in messages" :key="index"> <div> <template x-if="message"> <div class="message" :class="message.type" :ui-id="'message-' + message.type" > <span x-html="message.text"></span> <button type="button" class="text-gray-600 hover:text-black" aria-label="Close message" @click.prevent="removeMessage(index)" > <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="stroke-current" width="18" height="18" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> </svg> </button> </div> </template> </div> </template> </div> </div> </template> </section> </div><div class="container"> <div class="flex flex-col md:flex-row flex-wrap mb-5 font-bold"> <h1 class="page-title title-font" > <span class="base" data-ui-id="page-title-wrapper" >Templates</span> </h1> </div> </div> </div><main id="maincontent" class="page-main"><div id="contentarea" tabindex="-1"></div> <div class="columns"><div class="column main"><div x-data="recommendedProducts_above_main_content()" x-init="initProductRecBlock()" id="recs_block_above_main_content" class="container" x-cloak> <template x-if="productBanners"> <div> <template x-for="banner in productBanners"> <div class="product-slider" x-intersect.once="scrollViewEvent(banner.unitId)"> <section class="my-8"> <div class="relative"> <div class="flex flex-col mb-4 md:flex-row"> <h3 x-text='banner.storefrontLabel' class="text-xl font-bold title-font normal-case"></h3> </div> <div class="mx-auto grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-12"> <template x-for="product in banner.products"> <div> <form method="post" x-bind:action="createAddToCartUrl(product.productId)" @submit.prevent="addToCartRecsEvent($event.target, banner.unitId, product.productId)" class="item product product-item product_addtocart_form card bg-white p-0 flex flex-col w-full h-full shadow-none border-0"> <input name="form_key" type="hidden" :value="hyva.getFormKey()"/> <input type="hidden" name="product" x-bind:value="product.productId"> <button @click="recsClickEvent(banner.unitId, product.productId, product.url)" class="product photo product-item-photo flex justify-center items-center p-5 h-full border border-container" tabindex="-1" x-bind:aria-label="product.name" > <img class="hover:shadow-sm object-contain" loading="lazy" x-bind:alt="product.image?.label" x-bind:title="product.image?.label" x-bind:src="product.image?.url" width="360" height="360"> </button> <div class="product-info flex flex-col flex-grow"> <div class="mt-4 mb-2.5 items-center justify-center"> <button class="product-item-link cursor-pointer" @click="recsClickEvent(banner.unitId, product.productId, product.url)" x-text="product.name"></button> </div> <template x-if="product.prices"> <div class="mb-2.5 price-box price-final_price" x-bind:data-product-id="product.productId"> <span class="normal-price"> <span class="price-container price-final_price"> <span x-show="product.prices.minimum.final !== product.prices.maximum.final" class="price-label">As low as</span> <span id="product-price" class="price-wrapper "> <span class="price" x-text="hyva.formatPrice(product.prices.minimum.final)"></span> </span> </span> </span> </div> </template> <template x-if="product.addToCartAllowed"> <div> <button class="btn btn-primary justify-center text-lg font-bold mr-auto w-full" aria-label="Add to Cart"> <span class="whitespace-nowrap "> Add to Cart </span> </button> </div> </template> </div> </form> </div> </template> </div> </div> </section> </div> </template> </div> </template> </div> <script> function recommendedProducts_above_main_content() { return { productBanners: [], pagePreconfiguredDeferred: {}, bannerPlacement: 'above-main-content', initProductRecBlock: function (placement) { let self = this; window.magentoStorefrontEvents.subscribe.recsResponseReceived(function () { let recsData = window.magentoStorefrontEvents.context.getRecommendations(); self.renderProductRecs(recsData); }); }, renderProductRecs: function (recsData) { let self = this; recsData.units.sort((a, b) => a.displayOrder - b.displayOrder); recsData.units.forEach(function (unit, index) { if (unit.pagePlacement === self.bannerPlacement) { self.productBanners.push(unit); /** @todo move event outside of recsResponseReceived event **/ window.magentoStorefrontEvents.publish.recsUnitRender( unit.unitId, magentoStorefrontEvents.context ); } }); }, addToCartRecsEvent: function (e, unitId, productId) { // requires recommendationsContext to be set magentoStorefrontEvents.publish.recsItemAddToCartClick( unitId, productId, magentoStorefrontEvents.context ); // Timeout to prevent submission before event has fired. setTimeout(() => e.submit(), 500); }, scrollViewEvent: function (unitId) { magentoStorefrontEvents.publish.recsUnitView( unitId, magentoStorefrontEvents.context ); }, recsClickEvent: function (unitId, productId, productUrl) { magentoStorefrontEvents.publish.recsItemClick( unitId, productId, magentoStorefrontEvents.context ); // Timeout to prevent submission before event has fired. setTimeout(() => window.location.href = productUrl, 500); }, createAddToCartUrl: function (productId) { const currentLocationUENC = encodeURIComponent( this.encodeUenc(BASE_URL), ); return BASE_URL + "checkout/cart/add/uenc/" + currentLocationUENC + "/product/" + productId }, encodeUenc: function (value) { const regex = /=/gi; return btoa(value).replace(regex, ","); }, } } </script> <section class="md:py-8" id="product-list" aria-label="Product&#x20;list" tabindex="-1"> <script> function initToolbar_6743eabd0e75b() { return { options: {"productListToolbarForm":{"mode":"product_list_mode","direction":"product_list_dir","order":"product_list_order","limit":"product_list_limit","modeDefault":"list","directionDefault":"asc","orderDefault":"publish_date","limitDefault":10,"url":"https:\/\/publications.opengroup.org\/more-categories\/templates","formKey":"tGkuJucANpzneoVL","post":false,"page":"p"}}.productListToolbarForm || {}, getUrlParams: function () { let decode = window.decodeURIComponent, urlPaths = this.options.url.split('?'), urlParams = urlPaths[1] ? urlPaths[1].split('&') : [], params = {}, parameters, i; for (i = 0; i < urlParams.length; i++) { parameters = urlParams[i].split('='); params[decode(parameters[0])] = parameters[1] !== undefined ? decode(parameters[1].replace(/\+/g, '%20')) : ''; } return params; }, getCurrentLimit: function () { return this.getUrlParams()[this.options.limit] || this.options.limitDefault; }, getCurrentPage: function () { return this.getUrlParams()[this.options.page] || 1; }, changeUrl(paramName, paramValue, defaultValue) { let urlPaths = this.options.url.split('?'), baseUrl = urlPaths[0], paramData = this.getUrlParams(), currentPage = this.getCurrentPage(), newPage; /** * calculates the page on which the first item of the current page will * be with the new limit and sets that number as the new page */ if (currentPage > 1 && paramName === this.options.limit) { newPage = Math.floor(this.getCurrentLimit() * (currentPage - 1) / paramValue) + 1; if (newPage > 1) { paramData[this.options.page] = newPage; } else { delete paramData[this.options.page]; } } paramData[paramName] = paramValue; if (this.options.post) { hyva.postForm({action: baseUrl, data: paramData, skipUenc: true}); } else { if (paramValue === defaultValue.toString()) { delete paramData[paramName]; } paramData = Object.keys(paramData).length === 0 ? '' : '?' + (new URLSearchParams(paramData)); location.href = baseUrl + paramData } } } } </script> <div x-data="initToolbar_6743eabd0e75b()" class="toolbar toolbar-products flex gap-10 justify-center items-center flex-wrap lg:justify-between lg:flex-row lg:gap-8 "> <div class="flex items-center justify-center order-2 w-full md:w-auto md:order-1"> <div> <div class="modes flex gap-4 col-span-2 sm:mr-6" aria-label="Products&#x20;view&#x20;mode" > <div class="modes-container"> <strong title="List" class="modes-mode flex items-center active mode-list" role="checkbox" aria-checked="true" data-value="list" aria-label="Products&#x20;view&#x20;mode&#x20;-&#x20;List" > <span class="pl-10">List</span> </strong> <button class="modes-mode flex items-center mode-grid" title="Grid" href="#" @click.prevent="changeUrl( 'product_list_mode', 'grid', options.modeDefault )" data-role="mode-switcher" data-value="grid" role="checkbox" aria-checked="false" aria-label="Products&#x20;view&#x20;mode&#x20;-&#x20;Grid" > <span class="pl-10">Grid</span> </button> </div> </div> </div> <div class="hidden sm:flex"> <p class="toolbar-amount text-sm leading-5 gap-x-1 order-2 grow md:grow-0 md:order-1" id="toolbar-amount"> <span class="toolbar-number">3</span> Items </p> </div> </div> <div class="flex flex-wrap w-full md:w-auto items-center gap-10 order-1 md:order-2"> <div class="hidden md:flex"> <div class="field limiter flex items-center justify-end border-b-2 border-gray-lighter order-3"> <div class="control"> <label class="label"> <span aria-hidden="true">Show</span> <select data-role="limiter" class="form-select limiter-options" @change="changeUrl( 'product_list_limit', $event.currentTarget.options[$event.currentTarget.selectedIndex].value, options.limitDefault )" aria-label="Show&#x20;items&#x20;per&#x20;page" > <option value="5" > 5 </option> <option value="10" selected="selected" > 10 </option> <option value="15" > 15 </option> <option value="20" > 20 </option> <option value="25" > 25 </option> <option value="50" > 50 </option> </select> </label> </div> </div> </div> <div class="w-full md:w-auto"> <div class="toolbar-sorter sorter flex items-center justify-between md:justify-end border-b-2 border-gray-lighter"> <select data-role="sorter" class="form-select sorter-options mr-3 w-full md:w-auto" aria-label="Sort By" @change="changeUrl( 'product_list_order', $event.currentTarget.options[$event.currentTarget.selectedIndex].value, options.orderDefault )"> <option value="name" > Product Name </option> <option value="publish_date" selected="selected" > Published </option> </select> <a title="Set&#x20;Descending&#x20;Direction" href="#" class="action sorter-action sort-asc" @click.prevent="changeUrl('product_list_dir', 'desc', options.directionDefault)" > <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M3 4h13M3 8h9m-9 4h9m5-4v12m0 0l-4-4m4 4l4-4"/> <title>sort-descending</title></svg> </a> </div> </div> </div> </div> <div class="products wrapper mode-list products-list"> <ul role="list" class="mx-auto pt-10 pb-16 grid grid-cols-1 gap-8" > <li> <form method="post" action="https://publications.opengroup.org/downloadable/add/index/uenc/aHR0cHM6Ly9wdWJsaWNhdGlvbnMub3Blbmdyb3VwLm9yZy9tb3JlLWNhdGVnb3JpZXMvdGVtcGxhdGVz/product/64/_form_key/tGkuJucANpzneoVL/useUencPlaceholder/1/" class="item product product-item product_addtocart_form card bg-white p-0 flex flex-col w-full h-full md:flex-row shadow-md" > <input name="form_key" type="hidden" value="tGkuJucANpzneoVL" /> <input type="hidden" name="product" value="64"/> <div class="product-info flex flex-col h-full w-full md:flex-row"> <div class="bg-container md:w-1/3"> <a href="https://publications.opengroup.org/more-categories/templates/i093" class="product photo product-item-photo flex justify-center items-center p-5 h-full md:mb-0 md:shrink-0" tabindex="-1" > <picture class="hover:shadow-sm object-contain product-image-photo"><source type="image/webp" srcset="https://publications.opengroup.org/media/catalog/product/cache/cf0f6f9dc14c6e35d6446649e2272470/t/o/togaf-cmyk_5.webp" loading="eager" fetchpriority="high" width="360" height="360" alt="TOGAF® 9 Template Artifacts and Deliverables, Set 2" title="TOGAF® 9 Template Artifacts and Deliverables, Set 2" @update-gallery-64.window="$root.src = $event.detail"><img class="hover:shadow-sm object-contain product-image-photo" x-data="" @update-gallery-64.window="$root.src = $event.detail" loading="eager" fetchpriority="high" src="https://publications.opengroup.org/media/catalog/product/cache/cf0f6f9dc14c6e35d6446649e2272470/t/o/togaf-cmyk_5.png" width="360" height="360" alt="TOGAF&#xAE;&#x20;9&#x20;Template&#x20;Artifacts&#x20;and&#x20;Deliverables,&#x20;Set&#x20;2" title="TOGAF&#xAE;&#x20;9&#x20;Template&#x20;Artifacts&#x20;and&#x20;Deliverables,&#x20;Set&#x20;2" /></picture> </a> </div> <div class="flex flex-col md:w-2/3 p-5"> <div class="mt-4 mb-2.5 items-center justify-center text-blue md:text-left font-bold"> <a class="product-item-link" href="https://publications.opengroup.org/more-categories/templates/i093" :id="`slide-desc-64-${$id('slider-id')}`" > TOGAF® 9 Template Artifacts and Deliverables, Set 2 </a> </div> <div class="mt-2 mb-1 items-center justify-center text-sm md:text-left"> <b>Templates provided by The Open Group Adoption Strategies Working Group to accompany W102 and W103</b> </div> <div class="mt-4 "> <a class="underline gap-2 font-bold flex items-center justify-end" href="https://publications.opengroup.org/more-categories/templates/i093" aria-label="Learn more about this product"> <span>Learn more</span> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-5 h-5" width="25" height="25" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" d="M13.5 4.5 21 12m0 0-7.5 7.5M21 12H3"/> </svg> </a> </div> <script> function initPriceBox__6743eabd100bb() { return { updatePrice(priceData) { const regularPriceLabel = this.$root.querySelector('.normal-price .price-label'); const regularPriceElement = this.$root.querySelector('.normal-price [data-price-type=finalPrice].price-wrapper .price'); const basePriceElement = this.$root.querySelector('.normal-price [data-price-type=basePrice].price-wrapper .price'); if (priceData.finalPrice.amount < priceData.oldPrice.amount) { regularPriceLabel.classList.add('hidden'); } else { regularPriceLabel.classList.remove('hidden'); } regularPriceElement && (regularPriceElement.innerText = hyva.formatPrice(priceData.finalPrice.amount)); basePriceElement && (basePriceElement.innerText = hyva.formatPrice(priceData.basePrice.amount)); } } } </script> </div> <div class="flex flex-col gap-2.5 bg-container p-5 justify-center items-center md:gap-6"> <div> <a class="btn btn-primary justify-center text-lg font-bold mr-auto md:mr-0 w-auto" aria-label="View&#x20;Product&#x20;TOGAF&#xAE;&#x20;9&#x20;Template&#x20;Artifacts&#x20;and&#x20;Deliverables,&#x20;Set&#x20;2" href="https://publications.opengroup.org/more-categories/templates/i093" > <span class="whitespace-nowrap "> View Product </span> </a> </div> </div> </div> </form> </li> <li> <form method="post" action="https://publications.opengroup.org/downloadable/add/index/uenc/aHR0cHM6Ly9wdWJsaWNhdGlvbnMub3Blbmdyb3VwLm9yZy9tb3JlLWNhdGVnb3JpZXMvdGVtcGxhdGVz/product/73/_form_key/tGkuJucANpzneoVL/useUencPlaceholder/1/" class="item product product-item product_addtocart_form card bg-white p-0 flex flex-col w-full h-full md:flex-row shadow-md" > <input name="form_key" type="hidden" value="tGkuJucANpzneoVL" /> <input type="hidden" name="product" value="73"/> <div class="product-info flex flex-col h-full w-full md:flex-row"> <div class="bg-container md:w-1/3"> <a href="https://publications.opengroup.org/more-categories/templates/i092" class="product photo product-item-photo flex justify-center items-center p-5 h-full md:mb-0 md:shrink-0" tabindex="-1" > <picture class="hover:shadow-sm object-contain product-image-photo"><source type="image/webp" srcset="https://publications.opengroup.org/media/catalog/product/cache/cf0f6f9dc14c6e35d6446649e2272470/t/o/togaf-cmyk_4.webp" loading="eager" fetchpriority="high" width="360" height="360" alt="TOGAF® 9 Template Deliverables, Set 1" title="TOGAF® 9 Template Deliverables, Set 1" @update-gallery-73.window="$root.src = $event.detail"><img class="hover:shadow-sm object-contain product-image-photo" x-data="" @update-gallery-73.window="$root.src = $event.detail" loading="eager" fetchpriority="high" src="https://publications.opengroup.org/media/catalog/product/cache/cf0f6f9dc14c6e35d6446649e2272470/t/o/togaf-cmyk_4.png" width="360" height="360" alt="TOGAF&#xAE;&#x20;9&#x20;Template&#x20;Deliverables,&#x20;Set&#x20;1" title="TOGAF&#xAE;&#x20;9&#x20;Template&#x20;Deliverables,&#x20;Set&#x20;1" /></picture> </a> </div> <div class="flex flex-col md:w-2/3 p-5"> <div class="mt-4 mb-2.5 items-center justify-center text-blue md:text-left font-bold"> <a class="product-item-link" href="https://publications.opengroup.org/more-categories/templates/i092" :id="`slide-desc-73-${$id('slider-id')}`" > TOGAF® 9 Template Deliverables, Set 1 </a> </div> <div class="mt-2 mb-1 items-center justify-center text-sm md:text-left"> This is an example set of templates for TOGAF 9 deliverables. </div> <div class="mt-4 "> <a class="underline gap-2 font-bold flex items-center justify-end" href="https://publications.opengroup.org/more-categories/templates/i092" aria-label="Learn more about this product"> <span>Learn more</span> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-5 h-5" width="25" height="25" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" d="M13.5 4.5 21 12m0 0-7.5 7.5M21 12H3"/> </svg> </a> </div> <script> function initPriceBox__6743eabd18519() { return { updatePrice(priceData) { const regularPriceLabel = this.$root.querySelector('.normal-price .price-label'); const regularPriceElement = this.$root.querySelector('.normal-price [data-price-type=finalPrice].price-wrapper .price'); const basePriceElement = this.$root.querySelector('.normal-price [data-price-type=basePrice].price-wrapper .price'); if (priceData.finalPrice.amount < priceData.oldPrice.amount) { regularPriceLabel.classList.add('hidden'); } else { regularPriceLabel.classList.remove('hidden'); } regularPriceElement && (regularPriceElement.innerText = hyva.formatPrice(priceData.finalPrice.amount)); basePriceElement && (basePriceElement.innerText = hyva.formatPrice(priceData.basePrice.amount)); } } } </script> </div> <div class="flex flex-col gap-2.5 bg-container p-5 justify-center items-center md:gap-6"> <div> <a class="btn btn-primary justify-center text-lg font-bold mr-auto md:mr-0 w-auto" aria-label="View&#x20;Product&#x20;TOGAF&#xAE;&#x20;9&#x20;Template&#x20;Deliverables,&#x20;Set&#x20;1" href="https://publications.opengroup.org/more-categories/templates/i092" > <span class="whitespace-nowrap "> View Product </span> </a> </div> </div> </div> </form> </li> <li> <form method="post" action="https://publications.opengroup.org/downloadable/add/index/uenc/aHR0cHM6Ly9wdWJsaWNhdGlvbnMub3Blbmdyb3VwLm9yZy9tb3JlLWNhdGVnb3JpZXMvdGVtcGxhdGVz/product/2858/_form_key/tGkuJucANpzneoVL/useUencPlaceholder/1/" class="item product product-item product_addtocart_form card bg-white p-0 flex flex-col w-full h-full md:flex-row shadow-md" > <input name="form_key" type="hidden" value="tGkuJucANpzneoVL" /> <input type="hidden" name="product" value="2858"/> <div class="product-info flex flex-col h-full w-full md:flex-row"> <div class="bg-container md:w-1/3"> <a href="https://publications.opengroup.org/more-categories/templates/i094" class="product photo product-item-photo flex justify-center items-center p-5 h-full md:mb-0 md:shrink-0" tabindex="-1" > <picture class="hover:shadow-sm object-contain product-image-photo"><source type="image/webp" srcset="https://publications.opengroup.org/media/catalog/product/cache/cf0f6f9dc14c6e35d6446649e2272470/t/o/togaf-standard-10th-edition-logo_38.webp" loading="eager" fetchpriority="high" width="360" height="360" alt="TOGAF® Standard, 10th Edition Template Deliverables" title="TOGAF® Standard, 10th Edition Template Deliverables" @update-gallery-2858.window="$root.src = $event.detail"><img class="hover:shadow-sm object-contain product-image-photo" x-data="" @update-gallery-2858.window="$root.src = $event.detail" loading="eager" fetchpriority="high" src="https://publications.opengroup.org/media/catalog/product/cache/cf0f6f9dc14c6e35d6446649e2272470/t/o/togaf-standard-10th-edition-logo_38.png" width="360" height="360" alt="TOGAF&#xAE;&#x20;Standard,&#x20;10th&#x20;Edition&#x20;Template&#x20;Deliverables" title="TOGAF&#xAE;&#x20;Standard,&#x20;10th&#x20;Edition&#x20;Template&#x20;Deliverables" /></picture> </a> </div> <div class="flex flex-col md:w-2/3 p-5"> <div class="mt-4 mb-2.5 items-center justify-center text-blue md:text-left font-bold"> <a class="product-item-link" href="https://publications.opengroup.org/more-categories/templates/i094" :id="`slide-desc-2858-${$id('slider-id')}`" > TOGAF® Standard, 10th Edition Template Deliverables </a> </div> <div class="mt-2 mb-1 items-center justify-center text-sm md:text-left"> This is an example set of template deliverables for the TOGAF Standard, 10th Edition. </div> <div class="mt-4 "> <a class="underline gap-2 font-bold flex items-center justify-end" href="https://publications.opengroup.org/more-categories/templates/i094" aria-label="Learn more about this product"> <span>Learn more</span> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-5 h-5" width="25" height="25" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" d="M13.5 4.5 21 12m0 0-7.5 7.5M21 12H3"/> </svg> </a> </div> <script> function initPriceBox__6743eabd1aa56() { return { updatePrice(priceData) { const regularPriceLabel = this.$root.querySelector('.normal-price .price-label'); const regularPriceElement = this.$root.querySelector('.normal-price [data-price-type=finalPrice].price-wrapper .price'); const basePriceElement = this.$root.querySelector('.normal-price [data-price-type=basePrice].price-wrapper .price'); if (priceData.finalPrice.amount < priceData.oldPrice.amount) { regularPriceLabel.classList.add('hidden'); } else { regularPriceLabel.classList.remove('hidden'); } regularPriceElement && (regularPriceElement.innerText = hyva.formatPrice(priceData.finalPrice.amount)); basePriceElement && (basePriceElement.innerText = hyva.formatPrice(priceData.basePrice.amount)); } } } </script> </div> <div class="flex flex-col gap-2.5 bg-container p-5 justify-center items-center md:gap-6"> <div> <a class="btn btn-primary justify-center text-lg font-bold mr-auto md:mr-0 w-auto" aria-label="View&#x20;Product&#x20;TOGAF&#xAE;&#x20;Standard,&#x20;10th&#x20;Edition&#x20;Template&#x20;Deliverables" href="https://publications.opengroup.org/more-categories/templates/i094" > <span class="whitespace-nowrap "> View Product </span> </a> </div> </div> </div> </form> </li> </ul> </div> <script> function initToolbar_6743eabd1c991() { return { options: {"productListToolbarForm":{"mode":"product_list_mode","direction":"product_list_dir","order":"product_list_order","limit":"product_list_limit","modeDefault":"list","directionDefault":"asc","orderDefault":"publish_date","limitDefault":10,"url":"https:\/\/publications.opengroup.org\/more-categories\/templates","formKey":"tGkuJucANpzneoVL","post":false,"page":"p"}}.productListToolbarForm || {}, getUrlParams: function () { let decode = window.decodeURIComponent, urlPaths = this.options.url.split('?'), urlParams = urlPaths[1] ? urlPaths[1].split('&') : [], params = {}, parameters, i; for (i = 0; i < urlParams.length; i++) { parameters = urlParams[i].split('='); params[decode(parameters[0])] = parameters[1] !== undefined ? decode(parameters[1].replace(/\+/g, '%20')) : ''; } return params; }, getCurrentLimit: function () { return this.getUrlParams()[this.options.limit] || this.options.limitDefault; }, getCurrentPage: function () { return this.getUrlParams()[this.options.page] || 1; }, changeUrl(paramName, paramValue, defaultValue) { let urlPaths = this.options.url.split('?'), baseUrl = urlPaths[0], paramData = this.getUrlParams(), currentPage = this.getCurrentPage(), newPage; /** * calculates the page on which the first item of the current page will * be with the new limit and sets that number as the new page */ if (currentPage > 1 && paramName === this.options.limit) { newPage = Math.floor(this.getCurrentLimit() * (currentPage - 1) / paramValue) + 1; if (newPage > 1) { paramData[this.options.page] = newPage; } else { delete paramData[this.options.page]; } } paramData[paramName] = paramValue; if (this.options.post) { hyva.postForm({action: baseUrl, data: paramData, skipUenc: true}); } else { if (paramValue === defaultValue.toString()) { delete paramData[paramName]; } paramData = Object.keys(paramData).length === 0 ? '' : '?' + (new URLSearchParams(paramData)); location.href = baseUrl + paramData } } } } </script> <div x-data="initToolbar_6743eabd1c991()" class="toolbar toolbar-products flex gap-10 justify-center items-center flex-wrap lg:justify-between lg:flex-row lg:gap-8 pb-4"> <p class="toolbar-amount text-sm leading-5 gap-x-1 order-2 grow md:grow-0 md:order-1" id="toolbar-amount"> <span class="toolbar-number">3</span> Items </p> <div class="flex justify-center basis-full order-1 md:order-2 md:basis-0"> </div> <div class="field limiter flex items-center justify-end border-b-2 border-gray-lighter order-3"> <div class="control"> <label class="label"> <span aria-hidden="true">Show</span> <select data-role="limiter" class="form-select limiter-options" @change="changeUrl( 'product_list_limit', $event.currentTarget.options[$event.currentTarget.selectedIndex].value, options.limitDefault )" aria-label="Show&#x20;items&#x20;per&#x20;page" > <option value="5" > 5 </option> <option value="10" selected="selected" > 10 </option> <option value="15" > 15 </option> <option value="20" > 20 </option> <option value="25" > 25 </option> <option value="50" > 50 </option> </select> </label> </div> </div> </div> </section> <script> function hasWebP() { var elem = document.createElement('canvas'); if (!!(elem.getContext && elem.getContext('2d'))) { return elem.toDataURL('image/webp').indexOf('data:image/webp') === 0; } return false; } if (hasWebP()) { document.body.classList.add("webp"); } else { document.body.classList.add("no-webp"); } </script> <script> </script> <script> const rawRequest = "\u007B\u0022query\u0022\u003A\u0022query\u0028\u0024phrase\u003A\u0020String\u0021\u0020\u0024filter\u003A\u0020\u005BSearchClauseInput\u0021\u005D\u0020\u0024sort\u003A\u0020\u005BProductSearchSortInput\u0021\u005D\u0020\u0024current_page\u003A\u0020Int\u0020\u0024page_size\u003A\u0020Int\u0020\u0024context\u003A\u0020QueryContextInput\u0021\u0029\u0020\u007B\u005CnproductSearch\u0028phrase\u003A\u0020\u0024phrase\u0020filter\u003A\u0020\u0024filter\u0020sort\u003A\u0020\u0024sort\u0020current_page\u003A\u0020\u0024current_page\u0020page_size\u003A\u0020\u0024page_size\u0020context\u003A\u0020\u0024context\u0029\u0020\u007B\u005Cntotal_count\u005Cnitems\u0020\u007B\u005Cnproduct\u0020\u007B\u005Cnuid\u005Cnsku\u005Cnname\u005Cncanonical_url\u005Cnimage\u0020\u007B\u005Cnurl\u005Cn\u007D\u005Cnprice_range\u0020\u007B\u005Cnminimum_price\u0020\u007B\u005Cnregular_price\u0020\u007B\u005Cnvalue\u005Cn\u007D\u005Cn\u007D\u005Cn\u007D\u005Cn\u007D\u005Cn\u007D\u005Cnfacets\u0020\u007B\u005Cntitle\u005Cnattribute\u005Cnbuckets\u0020\u007B\u005Cn__typename\u005Cn...\u0020on\u0020ScalarBucket\u0020\u007B\u005Cnid\u005Cncount\u005Cntitle\u005Cn\u007D\u005Cn...\u0020on\u0020StatsBucket\u0020\u007B\u005Cnmin\u005Cnmax\u005Cntitle\u005Cn\u007D\u005Cn...\u0020on\u0020RangeBucket\u0020\u007B\u005Cnfrom\u005Cnto\u005Cncount\u005Cntitle\u005Cn\u007D\u005Cn\u007D\u005Cn\u007D\u005Cn\u007D\u005Cn\u007D\u0022,\u0022variables\u0022\u003A\u007B\u0022phrase\u0022\u003A\u0022\u0022,\u0022filter\u0022\u003A\u005B\u007B\u0022attribute\u0022\u003A\u0022categoryPath\u0022,\u0022eq\u0022\u003A\u0022more\u002Dcategories\u005C\u002Ftemplates\u0022\u007D,\u007B\u0022attribute\u0022\u003A\u0022visibility\u0022,\u0022in\u0022\u003A\u005B\u0022Catalog\u0022,\u0022Catalog,\u0020Search\u0022\u005D\u007D,\u007B\u0022attribute\u0022\u003A\u0022inStock\u0022,\u0022eq\u0022\u003Atrue\u007D\u005D,\u0022sort\u0022\u003A\u005B\u007B\u0022attribute\u0022\u003A\u0022publish_date\u0022,\u0022direction\u0022\u003A\u0022ASC\u0022\u007D\u005D,\u0022current_page\u0022\u003A1,\u0022page_size\u0022\u003A10,\u0022context\u0022\u003A\u007B\u0022customerGroup\u0022\u003A\u0022b6589fc6ab0dc82cf12099d1c2d40ab994e8410c\u0022\u007D\u007D\u007D"; const searchRequest = rawRequest ? JSON.parse(rawRequest) : null; const rawResponse = "\u007B\u0022extensions\u0022\u003A\u007B\u0022request\u002Did\u0022\u003A\u0022JZeu67iowMajMGVk1yKcSdjqAVPjYlmf\u0022\u007D,\u0022data\u0022\u003A\u007B\u0022productSearch\u0022\u003A\u007B\u0022total_count\u0022\u003A3,\u0022items\u0022\u003A\u005B\u007B\u0022product\u0022\u003A\u007B\u0022uid\u0022\u003A\u002264\u0022,\u0022sku\u0022\u003A\u0022I093\u0022,\u0022name\u0022\u003A\u0022TOGAF\u005Cu00ae\u00209\u0020Template\u0020Artifacts\u0020and\u0020Deliverables,\u0020Set\u00202\u0022,\u0022canonical_url\u0022\u003A\u0022\u005C\u002F\u005C\u002Fpublications.opengroup.org\u005C\u002Fi093\u0022,\u0022image\u0022\u003A\u007B\u0022url\u0022\u003A\u0022\u005C\u002F\u005C\u002Fpublications.opengroup.org\u005C\u002Fmedia\u005C\u002Fcatalog\u005C\u002Fproduct\u005C\u002Ft\u005C\u002Fo\u005C\u002Ftogaf\u002Dcmyk_5.png\u0022\u007D,\u0022price_range\u0022\u003A\u007B\u0022minimum_price\u0022\u003A\u007B\u0022regular_price\u0022\u003A\u007B\u0022value\u0022\u003A0\u007D\u007D\u007D\u007D\u007D,\u007B\u0022product\u0022\u003A\u007B\u0022uid\u0022\u003A\u002273\u0022,\u0022sku\u0022\u003A\u0022I092\u0022,\u0022name\u0022\u003A\u0022TOGAF\u005Cu00ae\u00209\u0020Template\u0020Deliverables,\u0020Set\u00201\u0022,\u0022canonical_url\u0022\u003A\u0022\u005C\u002F\u005C\u002Fpublications.opengroup.org\u005C\u002Fi092\u0022,\u0022image\u0022\u003A\u007B\u0022url\u0022\u003A\u0022\u005C\u002F\u005C\u002Fpublications.opengroup.org\u005C\u002Fmedia\u005C\u002Fcatalog\u005C\u002Fproduct\u005C\u002Ft\u005C\u002Fo\u005C\u002Ftogaf\u002Dcmyk_4.png\u0022\u007D,\u0022price_range\u0022\u003A\u007B\u0022minimum_price\u0022\u003A\u007B\u0022regular_price\u0022\u003A\u007B\u0022value\u0022\u003A0\u007D\u007D\u007D\u007D\u007D,\u007B\u0022product\u0022\u003A\u007B\u0022uid\u0022\u003A\u00222858\u0022,\u0022sku\u0022\u003A\u0022I094\u0022,\u0022name\u0022\u003A\u0022TOGAF\u005Cu00ae\u0020Standard,\u002010th\u0020Edition\u0020Template\u0020Deliverables\u0022,\u0022canonical_url\u0022\u003A\u0022\u005C\u002F\u005C\u002Fpublications.opengroup.org\u005C\u002Fi094\u0022,\u0022image\u0022\u003A\u007B\u0022url\u0022\u003A\u0022\u005C\u002F\u005C\u002Fpublications.opengroup.org\u005C\u002Fmedia\u005C\u002Fcatalog\u005C\u002Fproduct\u005C\u002Ft\u005C\u002Fo\u005C\u002Ftogaf\u002Dstandard\u002D10th\u002Dedition\u002Dlogo_38.png\u0022\u007D,\u0022price_range\u0022\u003A\u007B\u0022minimum_price\u0022\u003A\u007B\u0022regular_price\u0022\u003A\u007B\u0022value\u0022\u003A0\u007D\u007D\u007D\u007D\u007D\u005D,\u0022facets\u0022\u003A\u005B\u005D\u007D\u007D,\u0022status\u0022\u003A200\u007D"; const searchResponse = rawResponse ? JSON.parse(rawResponse) : null; const rawExecutionTime = "264.373924"; const executionTime = rawExecutionTime ? parseFloat(rawExecutionTime) : null; const requestId = "6424b30f\u002D391b\u002D4bb8\u002Db1c2\u002D84cff44bf19e"; const rawAttributes = "\u005B\u005D"; const attributes = rawAttributes ? JSON.parse(rawAttributes) : null; const rawPageSize = "10"; const pageSize = rawPageSize ? parseInt(rawPageSize) : null; const customerGroup = "b6589fc6ab0dc82cf12099d1c2d40ab994e8410c"; window.LiveSearchMetrics = { searchRequest, searchResponse, requestId, executionTime, attributes, pageSize, context: { 'customerGroup' : customerGroup } }; window.addEventListener('load', function () { magentoStorefrontEvents.context.setSearchExtension({ version: "4.2.1" }); }) </script> <div x-data="recommendedProducts_below_main_content()" x-init="initProductRecBlock()" id="recs_block_below_main_content" class="container" x-cloak> <template x-if="productBanners"> <div> <template x-for="banner in productBanners"> <div class="product-slider" x-intersect.once="scrollViewEvent(banner.unitId)"> <section class="my-8"> <div class="relative"> <div class="flex flex-col mb-4 md:flex-row"> <h3 x-text='banner.storefrontLabel' class="text-xl font-bold title-font normal-case"></h3> </div> <div class="mx-auto grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-12"> <template x-for="product in banner.products"> <div> <form method="post" x-bind:action="createAddToCartUrl(product.productId)" @submit.prevent="addToCartRecsEvent($event.target, banner.unitId, product.productId)" class="item product product-item product_addtocart_form card bg-white p-0 flex flex-col w-full h-full shadow-none border-0"> <input name="form_key" type="hidden" :value="hyva.getFormKey()"/> <input type="hidden" name="product" x-bind:value="product.productId"> <button @click="recsClickEvent(banner.unitId, product.productId, product.url)" class="product photo product-item-photo flex justify-center items-center p-5 h-full border border-container" tabindex="-1" x-bind:aria-label="product.name" > <img class="hover:shadow-sm object-contain" loading="lazy" x-bind:alt="product.image?.label" x-bind:title="product.image?.label" x-bind:src="product.image?.url" width="360" height="360"> </button> <div class="product-info flex flex-col flex-grow"> <div class="mt-4 mb-2.5 items-center justify-center"> <button class="product-item-link cursor-pointer" @click="recsClickEvent(banner.unitId, product.productId, product.url)" x-text="product.name"></button> </div> <template x-if="product.prices"> <div class="mb-2.5 price-box price-final_price" x-bind:data-product-id="product.productId"> <span class="normal-price"> <span class="price-container price-final_price"> <span x-show="product.prices.minimum.final !== product.prices.maximum.final" class="price-label">As low as</span> <span id="product-price" class="price-wrapper "> <span class="price" x-text="hyva.formatPrice(product.prices.minimum.final)"></span> </span> </span> </span> </div> </template> <template x-if="product.addToCartAllowed"> <div> <button class="btn btn-primary justify-center text-lg font-bold mr-auto w-full" aria-label="Add to Cart"> <span class="whitespace-nowrap "> Add to Cart </span> </button> </div> </template> </div> </form> </div> </template> </div> </div> </section> </div> </template> </div> </template> </div> <script> function recommendedProducts_below_main_content() { return { productBanners: [], pagePreconfiguredDeferred: {}, bannerPlacement: 'below-main-content', initProductRecBlock: function (placement) { let self = this; window.magentoStorefrontEvents.subscribe.recsResponseReceived(function () { let recsData = window.magentoStorefrontEvents.context.getRecommendations(); self.renderProductRecs(recsData); }); }, renderProductRecs: function (recsData) { let self = this; recsData.units.sort((a, b) => a.displayOrder - b.displayOrder); recsData.units.forEach(function (unit, index) { if (unit.pagePlacement === self.bannerPlacement) { self.productBanners.push(unit); /** @todo move event outside of recsResponseReceived event **/ window.magentoStorefrontEvents.publish.recsUnitRender( unit.unitId, magentoStorefrontEvents.context ); } }); }, addToCartRecsEvent: function (e, unitId, productId) { // requires recommendationsContext to be set magentoStorefrontEvents.publish.recsItemAddToCartClick( unitId, productId, magentoStorefrontEvents.context ); // Timeout to prevent submission before event has fired. setTimeout(() => e.submit(), 500); }, scrollViewEvent: function (unitId) { magentoStorefrontEvents.publish.recsUnitView( unitId, magentoStorefrontEvents.context ); }, recsClickEvent: function (unitId, productId, productUrl) { magentoStorefrontEvents.publish.recsItemClick( unitId, productId, magentoStorefrontEvents.context ); // Timeout to prevent submission before event has fired. setTimeout(() => window.location.href = productUrl, 500); }, createAddToCartUrl: function (productId) { const currentLocationUENC = encodeURIComponent( this.encodeUenc(BASE_URL), ); return BASE_URL + "checkout/cart/add/uenc/" + currentLocationUENC + "/product/" + productId }, encodeUenc: function (value) { const regex = /=/gi; return btoa(value).replace(regex, ","); }, } } </script> </div><aside class="sidebar sidebar-additional"> </aside></div></main><div class="page-bottom"> </div><footer class="page-footer"><div class="footer content"><script> addEventListener('DOMContentLoaded', () => { for (const [selector, label] of Object.entries({"aside.sidebar-main":"Sidebar Main","aside.sidebar-additional":"Sidebar Additional"})) { const target = document.querySelector(selector); target && target.setAttribute('aria-label', label); } }, {once: true}) </script> <div class="bg-blue"> <div class="container mx-auto"> <div class="flex flex-wrap order-first gap-y-16"> <div class="w-full flex flex-wrap"> <div class="w-full text-white my-12 grid grid-cols-1 gap-12 md:gap-8 md:grid-cols-4 md:my-0" > <div class="hidden md:flex justify-center items-center py-4"> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:serif="http://www.serif.com/" width="24" height="24" viewBox="0 0 984 1196" version="1.1" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;" class="w-full h-auto max-w-[280px]" role="img"><path d="M791.892,147.133c-89.846,-36.458 -170.575,-18.229 -225.263,45.575c27.346,-18.229 80.729,-74.221 179.688,-36.458c98.958,36.458 117.187,157.55 108.075,221.354c-18.23,259.117 -207.034,748.7 -502.605,768.229c-170.575,18.229 -260.416,-101.562 -269.533,-128.908l-9.112,0c45.57,110.679 161.458,175.783 296.875,175.783c359.375,9.117 628.904,-388.02 610.675,-721.354c-9.113,-194.012 -108.071,-286.458 -188.8,-324.221Z" style="fill:#175e77;fill-rule:nonzero;"/> <path d="M172.1,1053.39c125,45.57 197.917,-9.117 214.842,-27.346c-134.113,65.104 -260.417,-9.117 -269.53,-184.896c-9.116,-240.888 223.959,-804.688 520.834,-804.688c108.071,0 179.687,36.459 242.187,101.563c-27.346,-55.992 -125,-138.021 -269.533,-138.021c-350.258,0 -619.792,351.563 -610.675,721.354c10.417,203.125 91.146,295.571 171.875,332.034Z" style="fill:#175e77;fill-rule:nonzero;"/> <path d="M412.756,665.487l-51.109,-0l1.598,-4.933c12.76,-1.644 14.381,-1.644 17.554,-8.221l46.338,-110.183c-9.587,4.932 -19.174,13.153 -25.566,21.374l-3.196,-3.288c4.794,-4.933 14.381,-16.442 31.935,-24.686c7.989,-4.933 17.576,-6.577 25.566,-6.577c22.37,1.644 33.555,14.798 33.555,32.884c-0,37.816 -36.751,60.835 -55.926,60.835c-6.368,-0 -17.553,-1.644 -20.749,-6.554c-1.598,6.554 -15.979,36.172 -15.979,39.438c0,4.955 11.162,4.955 17.577,4.955l-1.598,4.933l0,0.023Zm17.554,-46.06c23.968,-0 43.119,-42.749 43.119,-60.835c0,-16.442 -9.587,-24.663 -27.164,-23.042l-31.934,77.3c3.196,3.311 9.587,6.577 15.955,6.577l0.024,-0Z" style="fill:#fff;fill-rule:nonzero;"/> <path d="M553.3,594.787c-7.99,13.153 -22.371,27.951 -39.924,27.951c-12.783,0 -19.175,-8.221 -19.175,-19.73c0,-23.019 33.556,-72.368 60.696,-72.368c7.99,0 15.956,3.289 15.956,11.51c-0,19.73 -41.522,36.172 -55.902,44.393c-1.598,3.288 -4.794,16.442 -4.794,19.73c-0,4.933 1.598,9.888 7.989,9.888c12.783,0 25.566,-14.82 31.935,-23.041l3.219,1.644l-0,0.023Zm6.391,-54.258c-0,-3.312 -1.598,-6.577 -6.391,-6.577c-3.219,-0 -7.99,3.265 -11.186,6.577c-9.587,8.221 -20.772,27.951 -25.566,39.46c14.381,-4.932 43.143,-24.663 43.143,-39.46Z" style="fill:#fff;fill-rule:nonzero;"/> <path d="M567.657,621.094c4.794,-11.509 35.13,-70.7 35.13,-77.277c0,-1.644 0,-4.932 -1.598,-4.932c-4.793,-0 -15.978,18.086 -23.945,24.639l-3.195,-1.644c6.391,-8.221 22.37,-31.263 36.728,-31.263c4.793,0 6.391,4.933 6.391,8.244c0,8.198 -9.587,26.307 -14.381,34.528l1.598,0c7.989,-13.153 31.934,-42.749 49.534,-42.749c6.392,0 11.185,1.645 11.185,8.245c0,13.13 -31.957,67.411 -31.957,72.344c-0,-0 -0,1.644 1.598,1.644c4.793,-0 19.174,-16.442 20.772,-19.73l3.196,3.288c-4.771,8.221 -25.543,26.307 -36.728,26.307c-3.196,0 -6.392,-3.288 -6.392,-6.553c0,-8.245 33.533,-62.503 33.533,-72.368c-0,-1.644 -1.598,-4.932 -3.196,-4.932c-20.749,-0 -55.903,62.479 -62.271,82.209l-16.002,-0Z" style="fill:#fff;fill-rule:nonzero;"/> <path d="M354.469,486.247c-15.979,-6.576 -30.337,-3.288 -39.947,8.221c4.793,-3.288 14.381,-13.153 31.934,-6.576c17.577,6.576 20.772,27.951 19.175,39.46c-3.196,46.06 -36.752,133.226 -89.458,136.514c-30.337,3.288 -46.315,-18.109 -47.913,-23.019l-1.621,0c7.989,19.731 28.762,31.24 52.706,31.24c63.892,1.621 111.828,-69.079 108.633,-128.27c-1.598,-34.551 -19.175,-50.993 -33.556,-57.57l0.047,0Z" style="fill:#fff;fill-rule:nonzero;"/> <path d="M244.262,647.424c22.347,8.198 35.13,-1.667 38.325,-4.956c-23.968,11.51 -46.315,-1.621 -47.913,-32.883c-1.597,-42.749 39.924,-143.045 92.631,-143.045c19.174,0 31.934,6.554 43.119,18.086c-4.77,-9.888 -22.347,-24.662 -47.913,-24.662c-62.294,-0 -110.207,62.479 -108.609,128.269c1.598,36.172 15.979,52.637 30.36,59.214l-0,-0.023Z" style="fill:#fff;fill-rule:nonzero;"/> <path d="M721.146,612.178c-0,2.849 0.903,4.748 1.829,5.697l0,0.949c-0.926,0 -1.829,0 -3.682,0.95c-4.608,0.949 -9.217,1.899 -13.825,1.899c-8.314,-0 -16.604,-2.849 -22.139,-8.545c-4.608,-4.748 -6.461,-10.444 -6.461,-17.091c0,-5.673 1.853,-12.343 6.461,-17.09c5.535,-5.697 12.899,-9.494 23.065,-9.494c3.682,-0 7.387,0.949 10.143,1.898l4.609,0c-0,2.849 -0,6.647 0.903,12.343c-0.903,0.95 -1.83,0.95 -2.756,0c-0.926,-7.595 -6.461,-10.444 -13.825,-10.444c-12.922,0 -18.434,9.472 -18.434,21.838c0,5.697 0.927,12.366 4.609,17.09c3.705,4.748 10.143,6.646 13.848,6.646c3.705,0 6.461,-0.949 6.461,-1.898c0.903,-0.95 0.903,-1.899 0.903,-4.748l0,-2.848c0,-3.798 -1.528,-6.013 -4.585,-6.646l-2.779,-0c-0.926,-0.95 -0.926,-1.899 0,-2.849c2.779,0.95 6.461,0.95 11.069,0.95c3.682,-0 6.461,-0 9.217,-0.95c0.926,0.95 0.926,1.899 0,2.849l-0.926,-0c-2.779,-0 -3.682,0.949 -3.682,5.696l-0,3.798l-0.023,0Z" style="fill:#fff;fill-rule:nonzero;"/> <path d="M736.823,581.796c0,-6.647 0,-7.596 -3.682,-7.596l-1.852,-0.95l-0,-1.922c4.608,0 11.069,-0.949 17.53,-0.949c5.535,-0 10.143,0.949 13.848,2.848c3.682,1.899 6.438,5.697 6.438,11.394c-0,6.646 -5.535,9.494 -9.217,11.37l0,0.95c5.535,10.467 9.217,17.09 12.899,19.938c1.853,1.899 4.631,1.899 4.631,1.899c0.927,0 0.927,0.95 0.927,1.899l-5.535,0c-6.461,0 -10.143,-2.825 -14.751,-9.495c-1.853,-3.797 -3.682,-7.595 -5.535,-10.444c-1.829,-1.922 -2.756,-2.848 -4.608,-2.848c-2.779,0 -2.779,0.949 -2.779,1.899l-0,9.495c-0,7.595 0.926,8.545 4.608,8.545l1.853,-0c-0,0.949 -0,1.899 -0.927,2.825c-2.778,-0 -6.46,-0.95 -9.216,-0.95c-3.682,0 -6.461,0.95 -10.143,0.95c-0,-0.95 -0.927,-1.899 -0,-2.825l1.852,-0c3.682,-0 3.682,-0.95 3.682,-8.545l0,-27.535l-0.023,0.047Zm8.314,11.393c-0,1.266 1.227,1.899 3.682,1.899c7.387,-0 10.143,-2.848 10.143,-10.444c-0,-5.697 -3.682,-10.444 -9.217,-10.444c-3.072,-0 -4.608,0.949 -4.608,2.848l-0,16.141Z" style="fill:#fff;fill-rule:nonzero;"/> <path d="M829.06,596.014c-0,14.242 -11.046,25.636 -25.821,25.636c-15.678,-0 -25.821,-12.343 -25.821,-25.636c0,-15.191 11.07,-26.585 26.747,-26.585c16.604,0 24.895,12.343 24.895,26.585Zm-41.499,-1.899c0,10.444 4.609,24.686 16.604,24.686c8.291,0 14.752,-6.646 14.752,-21.837c-0,-11.394 -4.632,-23.737 -15.678,-23.737c-7.387,0 -15.678,4.748 -15.678,20.888Z" style="fill:#fff;fill-rule:nonzero;"/> <path d="M839.203,581.796c-0,-7.596 -0.926,-8.546 -3.705,-8.546l-1.83,0c0,-0.972 0,-1.922 0.927,-2.848c2.778,0.949 5.534,0.949 9.216,0.949c2.779,0 6.461,0 9.24,-0.949c0.926,0.949 0.926,1.899 0.926,2.848l-1.852,0c-3.682,0 -4.585,0.95 -4.585,8.546l-0,17.09c-0,10.444 3.682,18.989 13.825,18.989c9.216,0 12.898,-7.596 12.898,-18.989l0,-9.495c0,-4.747 0,-12.343 -0.926,-14.242c-0.926,-0.949 -1.852,-1.899 -3.682,-1.899l-1.853,0c-0.926,-0.972 0,-1.922 0,-2.848c2.779,0.949 5.535,0.949 8.314,0.949c2.779,0 5.535,0 7.387,-0.949c0.927,0.949 0.927,1.899 0.927,2.848l-1.853,0c-1.829,0 -2.756,0.95 -3.682,1.899c-0.926,1.899 -0.926,8.545 -0.926,14.242l-0,9.495c-0,6.646 -0.927,12.343 -4.609,17.09c-3.682,3.798 -9.216,5.697 -13.848,5.697c-7.387,-0 -11.972,-1.899 -15.678,-4.747c-2.755,-3.798 -4.585,-8.546 -4.585,-16.141l0,-18.989l-0.046,-0Z" style="fill:#fff;fill-rule:nonzero;"/> <path d="M894.526,581.796c0,-6.647 0,-7.596 -3.682,-7.596l-1.852,-0.95c-0.927,0 -0.927,-0.972 -0,-1.922c4.608,0 9.216,-0.949 15.677,-0.949c7.364,-0 11.996,1.899 15.678,3.798c3.682,1.899 5.535,5.696 5.535,10.444c-0,11.37 -10.143,15.191 -15.678,15.191l-1.853,0c-0.926,-0.949 -0.926,-1.899 0,-1.899c6.461,-1.899 8.314,-6.646 8.314,-12.343c-0,-6.646 -3.682,-11.393 -10.143,-11.393c-2.455,-0 -3.682,0.949 -3.682,2.848l-0,32.282c-0,7.595 0.926,8.545 3.682,8.545l2.779,-0c0.926,0.949 0.926,1.899 -0,2.825c-3.682,0 -7.387,-0.949 -10.143,-0.949c-3.682,-0 -7.387,0.949 -10.143,0.949l-0,-2.825l0.926,-0c3.682,-0 4.608,-0.95 4.608,-8.545l0,-27.535l-0.023,0.024Z" style="fill:#fff;fill-rule:nonzero;"/> <path d="M65.879,538.005c-0,-1.884 -0.61,-2.826 -1.83,-2.826l-4.585,0c-6.438,0 -8.267,0.95 -11.023,6.623c0,0.95 -1.829,0 -1.829,0c0.926,-4.724 1.829,-9.471 2.756,-11.347c-0,-0.633 0.308,-0.949 0.926,-0.949l-0,0.949c0.926,1.876 1.852,1.876 6.438,1.876l29.387,-0c3.682,-0 4.585,-0.95 5.511,-1.876c0.926,0 0.926,-0.949 0.926,-0.949c0.927,-0 0.927,0.949 0.927,0.949c-0,2.825 -0.927,9.448 -0.927,11.347c0,0.95 -1.829,0.95 -1.829,0c-0.926,-5.673 -2.756,-6.623 -10.097,-6.623l-4.585,0c-1.235,0 -1.852,0.942 -1.852,2.826l-0,32.142c-0,7.573 0.926,8.522 4.585,8.522l1.829,0c0.926,0.95 0.926,1.876 0,2.825c-3.682,0 -7.341,-0.949 -10.097,-0.949c-3.682,0 -7.341,0.949 -11.949,0.949l0,-2.825l3.682,0c2.756,0 3.682,-0.949 3.682,-8.522l0,-32.142l-0.046,-0Z" style="fill:#fff;fill-rule:nonzero;"/> <path d="M115.482,556.924c-3.682,0 -3.682,0.95 -3.682,2.826l0,10.397c0,7.573 0,8.522 3.682,8.522l2.756,0c0,0.95 0,1.876 -0.926,2.825c-3.682,0 -6.438,-0.949 -10.097,-0.949c-2.756,0 -6.438,0.949 -9.17,0.949l-0,-2.825l0.926,0c3.682,0 4.585,-0.949 4.585,-8.522l0,-27.418c0,-7.573 -0.926,-8.499 -4.585,-8.499l-1.829,-0c-0,-0.95 -0,-1.899 0.926,-2.849c2.756,0.95 6.438,0.95 9.17,0.95c3.682,-0 6.438,-0 9.194,-0.95c0.926,0.95 0.926,1.876 -0,2.849l-0.926,-0c-3.682,-0 -3.682,0.949 -3.682,8.499l-0,9.448c-0,1.266 1.227,1.899 3.682,1.899l16.534,-0c3.682,-0 4.585,-0 4.585,-1.899l0,-9.448c0,-7.573 -0.926,-8.499 -4.585,-8.499l-0.926,-0c-0.926,-0.95 -0.926,-1.899 -0,-2.849c2.756,0.95 6.438,0.95 9.193,0.95c3.682,-0 6.438,-0 10.097,-0.95l0,2.849l-1.853,-0c-2.755,-0 -3.658,0.949 -3.658,8.499l-0,27.418c-0,7.573 0.926,8.522 3.658,8.522l1.853,0c0.926,0.95 0,1.876 0,2.825c-3.682,0 -6.438,-0.949 -10.097,-0.949c-2.755,0 -6.437,0.949 -9.193,0.949c-0.926,-0.949 -0.926,-1.898 -0,-2.825l0.926,0c3.682,0 4.585,-0.949 4.585,-8.522l0,-10.397c0,-1.876 -0.926,-2.826 -4.585,-2.826l-16.558,0Z" style="fill:#fff;fill-rule:nonzero;"/> <path d="M163.233,542.752c0,-7.573 -0.926,-8.499 -3.682,-8.499l-1.829,0c-0,-0.949 -0,-1.899 0.926,-2.848c2.756,0.949 5.512,0.949 9.171,0.949l13.778,0c4.586,0 8.268,0 9.194,-0.949c0.926,1.875 0.926,7.549 1.829,10.397c-0.926,0.95 -1.829,0.95 -2.755,0.95c-0.927,-4.724 -1.83,-6.623 -4.586,-6.623c-1.829,-0.95 -3.682,-0.95 -5.511,-0.95l-4.608,0c-2.44,0 -3.659,1.259 -3.659,3.775l-0,13.246c-0,1.266 0.609,1.899 1.829,1.899l3.659,0c6.438,0 7.341,0 8.267,-3.775l0,-1.899c0.927,-0.949 1.83,-0.949 2.756,0l-0,15.122l-2.756,0l0,-2.825c-0.926,-2.848 -1.829,-3.798 -8.267,-3.798l-3.659,0c-1.829,0 -1.829,0.95 -1.829,2.826l-0,8.521c-0,3.775 -0,6.6 1.829,8.499c0.926,0.95 1.83,0.95 8.267,0.95c9.194,-0 10.097,-1.899 12.853,-7.573c0.926,-0.949 1.829,0 2.756,0c-0.927,3.798 -2.756,9.449 -3.683,11.347c-2.755,0 -9.193,-0.949 -17.46,-0.949l-8.268,0c-3.682,0 -8.267,0.949 -11.023,0.949c-0.926,-0.949 -0.926,-1.898 0,-2.825l2.756,0c2.756,0 3.682,-0.949 3.682,-8.522l0,-27.418l0.023,0.023Z" style="fill:#fff;fill-rule:nonzero;"/> <g><text x="220.826px" y="482.89px" style="font-family:'ArialMT', 'Arial', sans-serif;font-size:31.054px;fill:#fff;">&#xAE;</text></g> <g><text x="442.491px" y="728.476px" style="font-family:'Arial-BoldItalicMT', 'Arial', sans-serif;font-weight:700;font-style:italic;font-size:97.401px;fill:#fff;">Library</text></g> <g><path d="M919.189,733.223c0,0.648 -0.394,1.204 -1.065,1.227c-36.056,1.158 -53.17,2.918 -53.355,2.941c-0.023,0 0.023,0 0.023,0c-0,0 -3.381,0.07 -9.495,0.07c-8.938,-0 -23.829,-0.139 -43.837,-0.834c-0.648,0 -1.204,-0.556 -1.204,-1.227c-0,-4.887 -0.116,-12.691 -0.278,-22.556c-0.232,-15.145 -0.533,-35.385 -0.556,-56.481l-2.269,-0l-0,81.167l114.445,0l-0,-81.167l-2.432,-0l-0,76.86l0.023,-0Z" style="fill:none;fill-rule:nonzero;"/> <path d="M911.084,729.147c-0,0.649 -0.394,1.204 -1.065,1.227c-17.484,0.556 -28.646,2.2 -35.431,3.752c8.545,-0.602 22.694,-1.436 42.17,-2.084l-0,-75.679l-3.821,-0c-0.51,-0 -1.089,-0.324 -1.251,-0.787l-0.602,-0l-0,73.571Z" style="fill:#fff;fill-rule:nonzero;"/> <path d="M902.145,724.284c0,0.648 -0.394,1.204 -1.065,1.227c-22.926,0.741 -31.054,5.211 -33.88,8.129c5.165,-1.83 17.091,-4.794 41.429,-5.651l0,-76.559c-2.431,0 -4.052,0.093 -6.484,0.209l0,72.645Z" style="fill:#fff;fill-rule:nonzero;"/> <path d="M865.626,661.967l-0,69.658c4.052,-3.45 12.991,-7.688 34.088,-8.522l-0,-76.559c-30.846,0.347 -34.088,14.52 -34.088,15.423Zm27.603,51.039c0.116,0.649 -0.324,1.251 -0.949,1.367c-4.516,0.787 -16.859,3.659 -19.823,7.48c-0.231,0.301 -0.579,0.463 -0.926,0.463c-0.255,-0 -0.51,-0.07 -0.718,-0.255c-0.51,-0.394 -0.602,-1.135 -0.208,-1.644c4.098,-5.303 20.563,-8.244 21.258,-8.36c0.625,-0.116 1.251,0.324 1.366,0.949Zm0,-9.564c0,0.649 -0.532,1.181 -1.181,1.181c-1.482,0 -15.909,2.756 -19.707,7.92c-0.231,0.301 -0.579,0.486 -0.949,0.486c-0.232,0 -0.486,-0.069 -0.695,-0.231c-0.509,-0.394 -0.625,-1.112 -0.255,-1.644c4.725,-6.392 20.564,-8.87 21.606,-8.87c0.649,0 1.181,0.533 1.181,1.181l0,-0.023Zm0,-9.772c0,0.648 -0.532,1.181 -1.181,1.181c-3.242,-0 -15.724,2.617 -19.799,8.36c-0.232,0.324 -0.602,0.486 -0.95,0.486c-0.231,-0 -0.463,-0.069 -0.671,-0.208c-0.533,-0.371 -0.649,-1.112 -0.278,-1.645c4.909,-6.901 18.642,-9.355 21.722,-9.355c0.648,-0 1.181,0.532 1.181,1.181l-0.024,-0Zm0,-9.773c0,0.649 -0.532,1.181 -1.181,1.181c-4.33,0 -15.376,2.223 -19.915,8.823c-0.232,0.325 -0.602,0.51 -0.973,0.51c-0.231,-0 -0.463,-0.07 -0.671,-0.209c-0.533,-0.37 -0.672,-1.088 -0.301,-1.621c5.094,-7.433 16.928,-9.842 21.837,-9.842c0.649,0 1.181,0.533 1.181,1.181l0.023,-0.023Zm-1.181,-10.953c0.649,-0 1.181,0.532 1.181,1.181c0,0.648 -0.532,1.181 -1.181,1.181c-6.368,-0 -15.446,2.431 -20.008,9.286c-0.231,0.347 -0.602,0.533 -0.972,0.533c-0.232,-0 -0.44,-0.07 -0.649,-0.209c-0.532,-0.37 -0.694,-1.088 -0.324,-1.621c5.072,-7.619 14.682,-10.328 21.953,-10.328l0,-0.023Zm1.181,-8.592c0,0.649 -0.532,1.181 -1.181,1.181c-9.263,0 -15.839,3.196 -20.123,9.75c-0.232,0.347 -0.603,0.532 -0.973,0.532c-0.209,0 -0.44,-0.069 -0.649,-0.185c-0.532,-0.347 -0.694,-1.088 -0.347,-1.621c4.724,-7.272 11.949,-10.815 22.069,-10.815c0.649,0 1.181,0.533 1.181,1.181l0.023,-0.023Zm-1.181,-10.953c0.649,-0 1.181,0.532 1.181,1.181c0,0.648 -0.532,1.181 -1.181,1.181c-8.684,-0 -14.774,1.667 -20.216,10.212c-0.232,0.348 -0.602,0.533 -0.996,0.533c-0.208,-0 -0.44,-0.07 -0.625,-0.185c-0.556,-0.348 -0.695,-1.066 -0.371,-1.621c5.998,-9.402 12.922,-11.278 22.185,-11.278l0.023,-0.023Z" style="fill:#fff;fill-rule:nonzero;"/> <path d="M923.08,653.931l-3.706,0c-0.139,0 -0.717,-0.88 -1.273,-0.88c-2.386,0 -4.585,0.047 -7.017,0.093l-0,-2.941c-0,-0.672 -0.556,-1.227 -1.227,-1.227c-2.71,-0 -5.28,0.069 -7.712,0.208l0,-3.867c0,-0.672 -0.417,-1.228 -1.111,-1.228c-27.72,0 -35.061,10.282 -37.006,15.169c-3.891,-2.895 -16.419,-6.67 -53.749,-6.67c-0.671,0 -1.505,0.556 -1.505,1.228l-0,0.092l-2.617,0c-0.672,0 -1.459,0.556 -1.459,1.228l0,83.598c0,0.672 0.787,1.228 1.459,1.228l116.899,-0c0.672,-0 0.973,-0.556 0.973,-1.228l0,-83.598c0,-0.672 -0.301,-1.228 -0.973,-1.228l0.024,0.023Zm-111.319,1.112c46.501,0.116 51.433,6.415 51.433,7.017l0,72.923c-1.621,-0 -4.099,0.046 -8.082,0.046c-8.73,0 -23.111,-0.139 -42.494,-0.787c-0,-4.933 -0.162,-12.297 -0.278,-21.421c-0.231,-15.469 -0.579,-36.543 -0.579,-57.755l0,-0.023Zm87.953,-8.476l-0,76.559c-21.097,0.834 -30.036,5.072 -34.088,8.522l-0,-69.658c-0,-0.903 3.242,-15.052 34.088,-15.423Zm8.938,81.422c-24.361,0.857 -36.218,3.821 -41.382,5.651c2.825,-2.918 10.838,-7.388 33.764,-8.129c0.648,0 1.111,-0.555 1.111,-1.227l0,-72.645c2.432,-0.116 4.053,-0.186 6.484,-0.209l0,76.559l0.023,0Zm3.034,-72.413c0.185,0.463 0.741,0.787 1.251,0.787l3.821,-0l-0,75.679c-19.476,0.648 -33.556,1.482 -42.124,2.084c6.785,-1.528 17.831,-3.173 35.315,-3.752c0.649,0 1.112,-0.555 1.112,-1.227l-0,-73.571l0.625,-0Zm9.981,81.954l-114.468,0l0,-81.167l2.27,-0c-0,21.096 0.324,41.336 0.555,56.481c0.139,9.888 0.255,17.669 0.255,22.556c0,0.648 0.51,1.204 1.181,1.227c20.008,0.695 34.875,0.903 43.814,0.903l9.425,0c0.024,0 0.047,-0.069 0.093,-0.069c0.162,-0 17.322,-1.83 53.378,-2.988c0.649,0 1.065,-0.602 1.065,-1.25l0,-76.86l2.432,-0l-0,81.167Z" style="fill:#fff;fill-rule:nonzero;"/> <path d="M812.687,734.219c19.383,0.648 33.695,0.787 42.425,0.787c3.96,0 6.438,-0.023 8.082,-0.046l0,-72.923c0,-0.603 -4.932,-6.901 -51.433,-7.017c0,21.235 0.371,42.309 0.602,57.755c0.139,9.124 0.301,16.488 0.324,21.42l0,0.024Zm7.712,-69.103c1.25,0 30.73,0.024 37.33,2.571c0.602,0.232 0.903,0.903 0.672,1.505c-0.186,0.463 -0.626,0.741 -1.089,0.741c-0.139,0 -0.278,-0.023 -0.417,-0.069c-6.183,-2.385 -36.172,-2.432 -36.473,-2.432c-0.648,0 -1.181,-0.532 -1.181,-1.181c0,-0.648 0.533,-1.181 1.181,-1.181l-0.023,0.046Zm-0,9.703c1.204,0 29.688,-0.092 37.26,2.339c0.626,0.209 0.95,0.857 0.765,1.482c-0.162,0.487 -0.626,0.811 -1.112,0.811c-0.116,-0 -0.231,-0 -0.347,-0.046c-7.225,-2.316 -36.242,-2.223 -36.543,-2.223c-0.648,0.046 -1.181,-0.51 -1.181,-1.158c0,-0.649 0.51,-1.181 1.158,-1.181l-0,-0.024Zm-0,9.68c1.158,0 28.646,-0.231 37.214,2.108c0.625,0.162 0.996,0.81 0.834,1.435c-0.139,0.533 -0.625,0.857 -1.135,0.857c-0.093,0 -0.208,0 -0.301,-0.046c-8.267,-2.246 -36.311,-2.015 -36.589,-2.015c-0.602,0 -1.181,-0.509 -1.181,-1.158c0,-0.648 0.51,-1.181 1.158,-1.181Zm-0,9.796c1.111,0 27.604,-0.394 37.191,1.829c0.625,0.139 1.019,0.741 0.88,1.39c-0.116,0.533 -0.602,0.88 -1.135,0.88c-0.092,-0 -0.185,0.185 -0.278,0.162c-9.309,-2.154 -36.357,-1.621 -36.612,-1.621c-0.648,-0 -1.158,-0.718 -1.181,-1.343c0,-0.649 0.51,-1.274 1.158,-1.297l-0.023,0Zm-0,9.495c1.088,-0 26.562,-0.44 37.168,1.69c0.625,0.116 1.042,0.764 0.926,1.413c-0.116,0.556 -0.602,0.972 -1.158,0.972c-0.069,0 -0.162,-0.185 -0.231,-0.208c-10.352,-2.084 -36.381,-1.783 -36.659,-1.783c-0.625,-0 -1.158,-0.324 -1.181,-0.973c0,-0.648 0.51,-1.088 1.158,-1.111l-0.023,-0Zm-0,9.703c1.042,-0.024 25.543,-0.556 37.145,1.459c0.648,0.115 1.065,0.741 0.949,1.366c-0.092,0.579 -0.602,0.996 -1.158,0.996c-0.069,-0 -0.139,-0.162 -0.208,-0.186c-11.371,-1.991 -36.427,-1.551 -36.682,-1.551l-0.023,-0c-0.625,-0 -1.158,-0.348 -1.181,-0.996c0,-0.648 0.486,-1.112 1.135,-1.112l0.023,0.024Zm-0,9.772c0.996,-0.023 24.501,-0.741 37.122,1.204c0.648,0.093 1.088,0.695 0.972,1.343c-0.092,0.579 -0.579,0.996 -1.158,0.996l-0.185,0c-12.412,-1.899 -36.45,-1.181 -36.682,-1.181c-0.625,0 -1.181,-0.486 -1.204,-1.135c0,-0.648 0.487,-1.181 1.135,-1.204l-0,-0.023Z" style="fill:#fff;fill-rule:nonzero;"/></g><title>logo-footer</title></svg> </div> <div class="md:py-14"> <div class="h4 text-md font-bold text-primary normal-case mb-6"> About </div> <div class="md:flex md:flex-col" :class="{ 'flex': open, 'hidden': ! open }"> <style>#html-body [data-pb-style=YKHVD6V]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;margin:0;padding:0}#html-body [data-pb-style=UNOQFGY]{margin:0;padding:0}</style><div data-content-type="row" data-appearance="full-bleed" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="YKHVD6V"><div data-content-type="text" data-appearance="default" data-element="main" data-pb-style="UNOQFGY"><ul class="space-y-4"> <li><a href="http://www.opengroup.org/aboutus" target="_blank">The Open Group</a></li> <li><a href="http://blog.opengroup.org/" target="_blank">Our Blog</a></li> <li><a href="https://help.opengroup.org/hc/en-us" target="_blank"> Contact </a></li> </ul></div></div> </div> </div> <div class="md:py-14"> <div class="h4 text-md font-bold text-primary normal-case mb-6"> Help &amp; Information </div> <div class="md:flex md:flex-col" :class="{ 'flex': open, 'hidden': ! open }"> <style>#html-body [data-pb-style=SH2J31G]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;margin:0;padding:0}#html-body [data-pb-style=PRT3XN7]{margin:0;padding:0}</style><div data-content-type="row" data-appearance="full-bleed" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="SH2J31G"><div data-content-type="text" data-appearance="default" data-element="main" data-pb-style="PRT3XN7"><ul class="space-y-4"> <li><a href="/about-member-docs">Member Documents</a></li> <li><a href="/free-documents">Free Documents</a></li> <li><a href="/registration-help">Registration Help</a></li> <li><a href="/privacy-policy-cookie-restriction-mode">Privacy Policy</a></li> <li><a href="/customer/account">Sign In</a></li> <li><a href="/downloadable/customer/products">My Download History</a></li> </ul></div></div> </div> </div> <div class="md:py-14 flex flex-col gap-6 justify-center items-start md:items-end"> <div class="flex gap-4 justify-center"> <a href="https://www.linkedin.com/company/the-open-group/" target="_blank" class="bg-primary rounded-full p-3 hover:text-white" aria-label="LinkedIn Link" > <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" data-prefix="fab" data-icon="linkedin-in" class="w-6 h-6" role="img" viewBox="0 0 448 512" width="24" height="24"> <path fill="currentColor" d="M100.28 448H7.4V148.9h92.88zM53.79 108.1C24.09 108.1 0 83.5 0 53.8a53.79 53.79 0 0 1 107.58 0c0 29.7-24.1 54.3-53.79 54.3zM447.9 448h-92.68V302.4c0-34.7-.7-79.2-48.29-79.2-48.29 0-55.69 37.7-55.69 76.7V448h-92.78V148.9h89.08v40.8h1.3c12.4-23.5 42.69-48.3 87.88-48.3 94 0 111.28 61.9 111.28 142.3V448z"/> <title>linked-in</title></svg> </a> <a href="https://www.youtube.com/user/theopengroup/videos" target="_blank" class="bg-primary rounded-full p-3 hover:text-white" aria-label="YouTube Link" > <?xml version="1.0" encoding="utf-8"?> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1" focusable="false" x="0px" y="0px" viewBox="0 0 576 512" fill="currentColor" style="enable-background:new 0 0 576 512;" xml:space="preserve" class="w-6 h-6" width="24" height="24" role="img"> <path d="M549.7,124.1c-6.3-23.7-24.8-42.3-48.3-48.6C458.8,64,288,64,288,64S117.2,64,74.6,75.5c-23.5,6.3-42,24.9-48.3,48.6 C14.9,167,14.9,256.4,14.9,256.4s0,89.4,11.4,132.3c6.3,23.6,24.8,41.5,48.3,47.8C117.2,448,288,448,288,448s170.8,0,213.4-11.5 c23.5-6.3,42-24.2,48.3-47.8c11.4-42.9,11.4-132.3,11.4-132.3S561.1,166.9,549.7,124.1z M232.1,337.6V175.2l142.7,81.2L232.1,337.6 L232.1,337.6z"/> <title>youtube</title></svg> </a> <a href="https://twitter.com/i/flow/login?redirect_after_login=%2Ftheopengroup" target="_blank" class="bg-primary rounded-full p-3 hover:text-white" aria-label="Twitter Link" > <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 512 512" class="w-6 h-6" width="24" height="24" role="img"> <!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--> <path d="M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8L200.7 275.5 26.8 48H172.4L272.9 180.9 389.2 48zM364.4 421.8h39.1L151.1 88h-42L364.4 421.8z"/> <title>twitter</title></svg> </a> </div> <small class="text-white lg:text-right"> &copy; 2024 The Open Group. All Rights Reserved</small> </div> </div> </div> <div class="flex flex-wrap gap-8 pr-4 w-full lg:w-1/4 md:w-1/2"> </div> <div x-data="{ showBar: false }" x-cloak> <div id="toTop" class="flex gap-4 items-center justify-center bg-blue border border-white shadow leading-none h-14 fixed w-14 z-50 right-4 bottom-20 lg:bottom-4 sm:bottom-8 cursor-pointer text-white rounded-full duration-300 transition-all ease-in-out hover:bg-primary" :class="{ 'block' : showBar, 'hidden' : !showBar }" @scroll.window="showBar = (window.scrollY > 100)"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="3" stroke="currentColor" class="w-8 h-8" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="m4.5 15.75 7.5-7.5 7.5 7.5"/> <title>chevron-up</title></svg> </div> </div> <script> { const toTop = document.querySelector('#toTop'); toTop.addEventListener('click', (e) => { e.preventDefault(); window.scroll({ top:0, left:0, behavior: 'smooth'}); }); } </script> </div> </div> </div> </div></footer> <script> function dataServicesShoppingCartContextData() { return { initContext(cartData) { let contextCartItems = []; if (cartData && cartData.items) { cartData.items.forEach(function (item) { contextCartItems.push({ id: item.item_id, formattedPrice: parseFloat(item.product_price_value ? item.product_price_value : 0), quantity: item.qty, product: { productType: item.product_type, productId: item.product_id, name: item.product_name, sku: item.product_sku, mainImageUrl: item.product_image.src }, prices: { price: { value: parseFloat(item.product_price_value ? item.product_price_value : 0) } } }); }); magentoStorefrontEvents.context.setShoppingCart({ id: cartData.dsCartId, totalQuantity: cartData.summary_count, prices: { subtotalExcludingTax: { value: parseFloat(cartData.subtotalAmountExclTax ? cartData.subtotalAmountExclTax : 0) }, subtotalIncludingTax: { value: parseFloat(cartData.subtotalAmount ? cartData.subtotalAmount : 0) } }, items: contextCartItems, possibleOnepageCheckout: cartData.possible_onepage_checkout, giftMessageSelected : false, giftWrappingSelected : false }); } window.dispatchEvent(new Event("shoppingCartContextSet")); } } } </script> <div x-data="dataServicesShoppingCartContextData()" @private-content-loaded.window="initContext($event.detail.data.cart)"></div> <script> (() => { function src_default(Alpine) { Alpine.directive("intersect", (el, { value, expression, modifiers }, { evaluateLater, cleanup }) => { let evaluate = evaluateLater(expression); let options = { rootMargin: getRootMargin(modifiers), threshold: getThreshhold(modifiers) }; let observer = new IntersectionObserver((entries) => { entries.forEach((entry) => { if (entry.isIntersecting === (value === "leave")) return; evaluate(); modifiers.includes("once") && observer.disconnect(); }); }, options); observer.observe(el); cleanup(() => { observer.disconnect(); }); }); } function getThreshhold(modifiers) { if (modifiers.includes("full")) return 0.99; if (modifiers.includes("half")) return 0.5; if (!modifiers.includes("threshold")) return 0; let threshold = modifiers[modifiers.indexOf("threshold") + 1]; if (threshold === "100") return 1; if (threshold === "0") return 0; return Number(`.${threshold}`); } function getLengthValue(rawValue) { let match = rawValue.match(/^(-?[0-9]+)(px|%)?$/); return match ? match[1] + (match[2] || "px") : void 0; } function getRootMargin(modifiers) { const key = "margin"; const fallback = "0px 0px 0px 0px"; const index = modifiers.indexOf(key); if (index === -1) return fallback; let values = []; for (let i = 1; i < 5; i++) { values.push(getLengthValue(modifiers[index + i] || "")); } values = values.filter((v) => v !== void 0); return values.length ? values.join(" ").trim() : fallback; } document.addEventListener("alpine:init", () => { window.Alpine.plugin(src_default); }); })(); </script> <script> for (const [selector, deferUntil] of Object.entries({".product-slider section[x-data]":"intersect",".product-info [x-data]":"intersect","#filters-content [x-data]":"intersect","#review_form":"intersect","section[x-data^=initRecentlyViewedProductsComponent]":"intersect","div[x-data^=initBundleOptions]":"intersect","#product_addtocart_form [x-data]":"intersect","#notice-cookie-block":"intersect"})) { document.querySelectorAll(selector).forEach(el => el.setAttribute('x-defer', `${deferUntil}`)); } </script> <script> (function () { "use strict"; const hasAlpine = new Promise(resolve => { window.addEventListener('alpine:initialized', resolve, {once: true, passive: true}); }); const hasInteract = new Promise(resolve => { (events => { const onInteract = () => { resolve(); events.forEach(type => window.removeEventListener(type, onInteract)); } events.forEach(type => window.addEventListener(type, onInteract, {once: true, passive: true})) })(['touchstart', 'mouseover', 'wheel', 'scroll', 'keydown']) }); const onIntersect = (el) => { return new Promise(resolve => { const observer = new IntersectionObserver(entries => { for (const entry of entries) { if (entry.isIntersecting) { observer.disconnect() resolve(); } } }, {}); observer.observe(el); }); } function runComponent(el) { hasAlpine.then(() => { el.removeAttribute('x-ignore'); queueMicrotask(() => Alpine.initTree(el)); }); } function initDeferredComponents() { document.querySelectorAll('[x-data][x-defer]').forEach(el => { el.setAttribute('x-ignore', ''); const deferUntil = (el.getAttribute('x-defer') || '').trim(); switch (deferUntil) { case 'interact': hasInteract.then(() => runComponent(el)); break; case 'intersect': onIntersect(el).then(() => runComponent(el)) break; case 'idle': window.requestIdleCallback ? window.requestIdleCallback(() => runComponent(el), {timeout: 4000}) : setTimeout(() => runComponent(el), 4000); break; case 'eager': runComponent(el); break; default: if (deferUntil.startsWith('event:') && deferUntil.length > 6) { window.addEventListener(deferUntil.substring(6), () => runComponent(el), {once: true, passive: true}); } } }); } window.addEventListener('alpine:init', initDeferredComponents, {once: true, passive: true}); })() </script> <script type="module" src="https://publications.opengroup.org/static/version1732013752/frontend/Opengroup/publications/en_GB/Hyva_Theme/js/alpine3.min.js" defer crossorigin ></script> <script> 'use strict'; function dispatchMessages(messages, hideAfter) { const messagesEvent = new CustomEvent("messages-loaded", { detail: { messages: messages, hideAfter: hideAfter } }); window.dispatchEvent(messagesEvent); } if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) { console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script"); } (function( hyva, undefined ) { hyva.initFormKey = () => { const inputSelector = 'input[name="form_key"]', formKey = hyva.getFormKey(); Array.from(document.querySelectorAll(inputSelector)).map(function (input) { input.value = formKey }); } hyva.initMessages = () => { try { const messages = hyva.getCookie('mage-messages'); window.mageMessages = messages ? JSON.parse(decodeURIComponent(messages).replace(/\+/g, ' ')) : []; dispatchMessages(window.mageMessages); // empty `mage-messages` cookie const skipSetDomain = true; hyva.setCookie('mage-messages','', -1, skipSetDomain); } catch (error) { console.warn('Error parsing Cookie Messages:', error); } } window.addEventListener('DOMContentLoaded', hyva.initFormKey); hyva.alpineInitialized(hyva.initMessages) }( window.hyva = window.hyva || {} )); </script> <script> 'use strict'; { const private_content_key = 'mage-cache-storage'; const private_content_expire_key = 'mage-cache-timeout'; const private_content_version_key = 'private_content_version'; const section_data_ids_key = 'section_data_ids'; const mage_cache_session_id_key = 'mage-cache-sessid'; const last_visited_store_key = 'last_visited_store'; const ttl = 3600; if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) { console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script"); } function loadSectionData () { const browserStorage = hyva.getBrowserStorage(); if (!browserStorage) { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( [{ type: "warning", text: "Please enable LocalStorage in your browser." }] ); return; } try { let isInvalid = false; if (hyva.getCookie(last_visited_store_key) !== CURRENT_STORE_CODE) { isInvalid = true; } hyva.setCookie(last_visited_store_key, CURRENT_STORE_CODE, false, false); if (!hyva.getCookie(mage_cache_session_id_key)) { isInvalid = true; browserStorage.removeItem(private_content_key); const skipSetDomain = true; const days = false; hyva.setCookie(mage_cache_session_id_key, true, days, skipSetDomain) } const cookieVersion = hyva.getCookie(private_content_version_key); const storageVersion = browserStorage.getItem(private_content_version_key); if (cookieVersion && !storageVersion || cookieVersion !== storageVersion) { isInvalid = true; } const privateContentExpires = browserStorage.getItem(private_content_expire_key); if (privateContentExpires && new Date(privateContentExpires) < new Date()) { browserStorage.removeItem(private_content_key); } if (isInvalid && cookieVersion) { fetchPrivateContent([]); } else if (cookieVersion && storageVersion && cookieVersion === storageVersion) { const privateContent = JSON.parse(browserStorage.getItem(private_content_key)); if ( privateContent && privateContentExpires && privateContent.cart && privateContent.customer ) { dispatchPrivateContent(privateContent); } else { fetchPrivateContent([]); } } else { if (document.getElementById('default-section-data')) { const privateContent = JSON.parse(document.getElementById('default-section-data').innerText.trim()); dispatchPrivateContent(privateContent); } else { dispatchPrivateContent({}); } } } catch (error) { console.warn('Error retrieving Private Content:', error); } } hyva.alpineInitialized(loadSectionData) window.addEventListener('reload-customer-section-data', loadSectionData); function dispatchPrivateContent(data) { const privateContentEvent = new CustomEvent("private-content-loaded", { detail: { data: data } }); window.dispatchEvent(privateContentEvent); } function fetchPrivateContent(sections) { fetch(`${BASE_URL}customer/section/load/?sections=${encodeURIComponent(sections.join(','))}`, { method: 'GET', headers: { 'Content-Type': 'application/json', 'X-Requested-With': 'XMLHttpRequest' } }) .then(response => response.json()) .then( data => { if (data) { try { const browserStorage = hyva.getBrowserStorage(); // merge new data preserving non-invalidated sections const oldSectionData = JSON.parse(browserStorage.getItem(private_content_key) || '{}') || {}; if ((! data.cart || ! data.cart.cartId) && oldSectionData['checkout-data']) { delete oldSectionData['checkout-data']; } const newSectionData = Object.assign(oldSectionData, data); dispatchPrivateContent(newSectionData); // don't persist messages, they've been dispatched already if (newSectionData.messages && newSectionData.messages.messages ) { newSectionData.messages.messages = []; } browserStorage.setItem(private_content_key, JSON.stringify(newSectionData)); const expiresAt = new Date(Date.now() + (ttl * 1000)).toISOString(); browserStorage.setItem(private_content_expire_key, expiresAt); const newCookieVersion = hyva.getCookie(private_content_version_key); browserStorage.setItem(private_content_version_key, newCookieVersion); // We don't need the section_data_ids in Hyvä, but we store them for compatibility // with Luma Fallback. Otherwise, not all sections are loaded in Luma Checkout hyva.setCookie( section_data_ids_key, JSON.stringify( Object.keys(data).reduce((sectionDataIds, sectionKey) => { sectionDataIds[sectionKey] = data[sectionKey]['data_id']; return sectionDataIds; }, {}) ), false, true ); } catch (error) { console.warn("Couldn't store privateContent", error); } } } ); } } </script> <script> (() => { document.addEventListener('submit', event => event.target.action = event.target.action.replace('%25uenc%25', hyva.getUenc())); })() </script> <script> (events => { const dispatchUserInteractionEvent = () => { events.forEach(type => window.removeEventListener(type, dispatchUserInteractionEvent)) window.dispatchEvent(new Event('init-external-scripts')) }; events.forEach(type => window.addEventListener(type, dispatchUserInteractionEvent, {once: true, passive: true})) })(['touchstart', 'mouseover', 'wheel', 'scroll', 'keydown']) </script> <script> if (HTMLScriptElement.supports && HTMLScriptElement.supports('speculationrules')) { const specScript = document.createElement('script'); specScript.type = 'speculationrules'; specRules = { 'prerender': [{ 'where': { 'and': [ { 'href_matches': '/*.html' }, { 'not': {'selector_matches': '.do-not-prerender'}} ] }, 'eagerness': 'moderate' }] }; specScript.textContent = JSON.stringify(specRules); document.body.append(specScript); } </script> <!--dae8f2e668d7157aa4f937fc6f1780b8--> <script> 'use strict'; function GoogleAnalytics () { let self = this; this.config = { isCookieRestrictionModeEnabled: 0, currentWebsite: 3, cookieName: "user_allowed_save_cookie", ordersTrackingData: [], pageTrackingData: {"optPageUrl":"","isAnonymizedIpActive":false,"accountId":"UA-292260-1"}, } this.initGoogleAnalytics = function () { let allowServices = false, allowedCookies, allowedWebsites; if (self.config.isCookieRestrictionModeEnabled) { allowedCookies = hyva.getCookie(self.config.cookieName); if (allowedCookies !== null) { allowedWebsites = JSON.parse(decodeURIComponent(allowedCookies)); if (allowedWebsites[self.config.currentWebsite] === 1) { allowServices = true; } } } else { allowServices = true; } if (allowServices) { (function (i, s, o, g, r, a, m) { i.GoogleAnalyticsObject = r; i[r] = i[r] || function () { (i[r].q = i[r].q || []).push(arguments) }, i[r].l = 1 * new Date(); a = s.createElement(o), m = s.getElementsByTagName(o)[0]; a.defer = 1; a.src = g; m.parentNode.insertBefore(a, m) })(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga'); // Process page info ga('create', self.config.pageTrackingData.accountId, 'auto'); if (self.config.pageTrackingData.isAnonymizedIpActive) { ga('set', 'anonymizeIp', true); } // Process orders data if (self.config.ordersTrackingData.hasOwnProperty('currency')) { ga('require', 'ec', 'ec.js'); ga('set', 'currencyCode', self.config.ordersTrackingData.currency); // Collect product data for GA if (self.config.ordersTrackingData.products) { self.config.ordersTrackingData.products.forEach(function (value) { ga('ec:addProduct', value); }); } // Collect orders data for GA if (self.config.ordersTrackingData.orders) { self.config.ordersTrackingData.orders.forEach(function (value) { ga('ec:setAction', 'purchase', value); }); } ga('send', 'pageview'); } else { // Process Data if not orders ga('send', 'pageview' + self.config.pageTrackingData.optPageUrl); } } }; } window.addEventListener("load", new GoogleAnalytics().initGoogleAnalytics); </script> <script> function initConfigurableOptions(productId, optionConfig) { function findPathParam(key) { const baseUrl = (BASE_URL.substring(0, 2) === '//' ? 'http:' : '') + BASE_URL; const baseUrlParts = (new URL(baseUrl)).pathname.replace(/\/$/, '').split('/'); const pathParts = window.location.pathname.split('/').slice(baseUrlParts.length + 3); for (let i = 0; i < pathParts.length; i += 2) { if (pathParts[i] === key && pathParts.length > i) { return pathParts[i + 1]; } } } return { optionConfig, productId, itemId: (new URLSearchParams(window.location.search)).get('id') || findPathParam('id'), allowedAttributeOptions: [], selectedValues: [], init() { this.findAllowedAttributeOptions(); this.$nextTick(() => { if (typeof this.optionConfig.defaultValues === 'object') { for (const [attributeId, value] of Object.entries(this.optionConfig.defaultValues)) { this.changeOption(attributeId, value + ''); } } }); }, findSimpleIndex() { this.productIndex = this.calculateSimpleIndexForPartialSelection(this.selectedValues); }, calculateSimpleIndexForPartialSelection(selectedValues) { if (selectedValues.length === 0) return 0; let productIndexIds = Object.keys(this.optionConfig.index); Object.keys(this.optionConfig.attributes).forEach((attribute) => { const productsWithAttributeMatch = selectedValues[attribute] ? productIndexIds.filter((productIndex) => { return this.optionConfig.index[productIndex][attribute] === this.selectedValues[attribute] }) : []; productIndexIds = productsWithAttributeMatch.length ? productsWithAttributeMatch : productIndexIds }) return productIndexIds[0]; }, calculateSimpleIndexForFullSelection(selectedValues) { const productIndexes = this.optionConfig.index; return Object.keys(productIndexes).find(productIndex => { const productCandidateOptions = productIndexes[productIndex]; for (const productOption in productCandidateOptions) { if ( ! selectedValues[productOption] || selectedValues[productOption] !== productCandidateOptions[productOption] ) { return false; } } return productIndex; }); }, productIndex: 0, findAllowedAttributeOptions() { this.allowedAttributeOptions = this.calculateAllowedAttributeOptions(this.selectedValues); }, calculateAllowedAttributeOptions(selectedValues) { const allAttributes = this.optionConfig.attributes; const allAttributesSorted = Object.values(allAttributes).sort((a,b) => { return a.position - b.position }); const newAllowedAttributeOptions = []; allAttributesSorted.forEach(attribute => { const selectionWithoutAttr = Object.assign({}, this.removeAttrFromSelection(selectedValues, attribute.id)); const availableIndexes = this.calculateAvailableProductIndexes(selectionWithoutAttr); newAllowedAttributeOptions[attribute.id] = allAttributes[attribute.id].options.filter(option => { return !!option.products.find(product => { return availableIndexes.includes(product); }) }); }); return newAllowedAttributeOptions; }, calculateAvailableProductIndexes(selectedOptions) { if (Object.keys(selectedOptions).length === 0) { if (Object.values(this.optionConfig.salable || {}).length) { return [].concat.apply([], [].concat.apply([], Object.values(this.optionConfig.salable).map(Object.values))).filter((x, i, a) => a.indexOf(x) === i) } return Object.keys(this.optionConfig.index); } const selectedIds = Object.keys(selectedOptions); if (Object.values(this.optionConfig.salable || {}).length) { const selectedOptionIndexes = selectedIds.map(attrId => { const optionValue = selectedOptions[attrId]; return this.optionConfig.salable[attrId] && this.optionConfig.salable[attrId][optionValue] || [] }) return selectedOptionIndexes.reduce((acc, optionIndexes) => { return acc.filter(index => optionIndexes.includes(index)); }); } else { const productIndexes = this.optionConfig.index; return Object.keys(productIndexes).filter(index => { for (const attrId of selectedIds) { if (productIndexes[index][attrId] !== `${selectedOptions[attrId]}`) return false } return true }); } }, findAttributeByOptionId(optionId) { for (const attributeId in this.optionConfig.attributes) { const attributeOptions = this.optionConfig.attributes[attributeId].options || []; if (attributeOptions.find(option => option.id === optionId)) { return attributeId; } } }, getAllowedAttributeOptions(attributeId) { return this.allowedAttributeOptions[attributeId] || [] }, getProductIdsForOption(option) { const attributeId = this.findAttributeByOptionId(option.id); const allOptions = this.optionConfig.attributes[attributeId]; const opt = (allOptions && allOptions.options || []).find(o => o.id === option.id); return opt && opt.products ? opt.products : []; }, findProductIdsForPartialSelection(optionSelection) { const candidateProducts = Object.values(optionSelection).reduce((candidates, optionId) => { const newCandidates = this.getProductIdsForOption({id: optionId}); return candidates === null ? newCandidates : candidates.filter(productId => newCandidates.includes(productId)); }, null); return candidateProducts || []; }, findCheapestProductForPartialSelection(optionSelection) { const candidateProducts = this.findProductIdsForPartialSelection(optionSelection); return candidateProducts.reduce((cheapest, simpleIdx) => { // in the first iteration we start with simpleIdx as the currently cheapest product if (! this.optionConfig.optionPrices[cheapest]) return simpleIdx; const knownCheapestPrice = this.optionConfig.optionPrices[cheapest].finalPrice.amount; return knownCheapestPrice > this.optionConfig.optionPrices[simpleIdx].finalPrice.amount ? simpleIdx : cheapest; }, 0) }, findProductIdToUseForOptionPrice(option) { // try to find a product for a complete selection const attributeId = this.findAttributeByOptionId(option.id); const optionSelection = Object.assign({}, this.selectedValues, {[attributeId]: option.id}); const matchingSimpleIndex = this.calculateSimpleIndexForFullSelection(optionSelection); // if there is no complete selection, use the cheapest product for the option return matchingSimpleIndex || this.findCheapestProductForPartialSelection(optionSelection); }, getAttributeOptionLabel(option) { const optionProduct = this.findProductIdToUseForOptionPrice(option); if ((! optionProduct) || (optionProduct === this.productIndex)) { return option.label; } const currentPrice = this.getOptionPriceAdjustmentBasePrice(); if (this.optionConfig.optionPrices[optionProduct]) { const optionPrice = this.optionConfig.optionPrices[optionProduct].finalPrice.amount; if (optionPrice !== currentPrice){ return option.label + ' ' + hyva.formatPrice(optionPrice - currentPrice, true); } } return option.label; }, getOptionPriceAdjustmentBasePrice() { if (this.optionConfig.optionPrices[this.productIndex]) { return this.optionConfig.optionPrices[this.productIndex].finalPrice.amount } const cheapestForSelection = this.findCheapestProductForPartialSelection(this.selectedValues); return this.optionConfig.optionPrices[cheapestForSelection] ? this.optionConfig.optionPrices[cheapestForSelection].finalPrice.amount : this.optionConfig.prices.finalPrice.amount; // default price if no option selection }, clearOptionIfActive(optionId, value) { if (this.selectedValues[optionId] === value) { this.blurLabel() this.changeOption(optionId, '') } }, removeAttrFromSelection(selectedValues, attributeId) { attributeId = parseInt(attributeId); return selectedValues.reduce((newSelection, val, attr) => { if (attr !== attributeId) { newSelection[attr] = val; } return newSelection; }, []); }, changeOption(attributeId, value) { if (value === '') { this.selectedValues = this.removeAttrFromSelection(this.selectedValues, attributeId) } else if (value && this.getAllowedAttributeOptions(attributeId).find(option => option.id === value)) { this.selectedValues[attributeId] = value; } this.findSimpleIndex(); this.findAllowedAttributeOptions(); this.updatePrices(); this.updateGallery(); window.dispatchEvent( new CustomEvent( 'configurable-selection-changed', { detail: { productId: this.productId, optionId: attributeId, value: value, productIndex: this.productIndex, selectedValues: this.selectedValues, candidates: this.findProductIdsForPartialSelection(this.selectedValues), } } ) ); }, calculateIsMinimalPrice() { return ( this.selectedValues.filter(value => !!value).length < Object.keys(this.optionConfig.attributes).length ); }, updatePrices() { const value = this.productIndex ? this.optionConfig.optionPrices[this.productIndex] : this.optionConfig.prices; window.dispatchEvent( new CustomEvent( "update-prices-" + this.productId, { detail: Object.assign( value, { isMinimalPrice: this.calculateIsMinimalPrice() } ) } ) ); }, updateGallery () { if (this.productIndex) { const images = this.optionConfig.images[this.productIndex]; images && window.dispatchEvent(new CustomEvent( "update-gallery", { detail: this.sortImagesByPosition(images) } )); } else { window.dispatchEvent(new Event("reset-gallery")); } }, sortImagesByPosition(images) { return images.sort((x, y) => { return x.position === y.position ? 0 : (parseInt(x.position) > parseInt(y.position) ? 1 : -1) }); }, onGetCartData(data) { }, preselectCartItems(data) { // pre-select options based on cart data for current (quote) itemId const cart = data && data.cart; if (cart && cart.items) { const cartItem = cart.items.find((item) => { return ( item.item_id === this.itemId && item.product_id === this.productId ) }); if (cartItem && cartItem.options && cartItem.options.length) { cartItem.options.map(option => { this.changeOption(option.option_id, option.option_value); }) } } }, preselectQuerystringItems() { // pre-select option like ?size=167 const urlQueryParams = new URLSearchParams(window.location.search.replace('?','')); this.preselectItemsBasedOnLocation(attribute => urlQueryParams.get(attribute.code)); }, preselectLocationHashItems() { // pre-select option like #144=167 const urlHashParams = new URLSearchParams(window.location.hash.replace('#','')); this.preselectItemsBasedOnLocation(attribute => urlHashParams.get(attribute.id)); }, preselectItemsBasedOnLocation(getLocationValue) { Object.values(this.optionConfig.attributes).map(attribute => { this.changeOption(attribute.id, getLocationValue(attribute)) }); } } } </script> <script> function initSwatchOptions(swatchConfig) { return { swatchConfig, getAttributeSwatchData(attributeId) { const swatchConfig = Object.assign({}, this.swatchConfig[attributeId]); swatchConfig['details'] = JSON.parse(swatchConfig['additional_data']); return swatchConfig; }, getAllAttributeOptions(attributeId) { return ( this.optionConfig.attributes[attributeId] && this.optionConfig.attributes[attributeId].options ) || [] }, optionIsActive(attributeId, optionId) { // return true if a product with this option is in stock return !!this.getAllowedAttributeOptions(attributeId).find( option => option.id === optionId ) }, optionIsEnabled(attributeId, optionId) { // return true if a product with this option is enabled for (const productId in this.optionConfig.index) { if (this.optionConfig.index[productId][attributeId] === optionId) { return true; } } return false; }, mapSwatchTypeNumberToTypeCode(typeNumber) { switch ("" + typeNumber) { case "1": return "color" case "2": return "image" case "3": return "empty" case "0": default: return "text" } }, getTypeOfFirstOption(attributeId) { for (const optionId in this.swatchConfig[attributeId]) { const option = this.swatchConfig[attributeId][optionId]; if (typeof option.type !== 'undefined') { return this.mapSwatchTypeNumberToTypeCode(option.type); } } }, getVisualSwatchType(attributeId, targetOptionId) { // If a type configuration is present for the given option id, use it const config = this.swatchConfig[attributeId]; if (config[targetOptionId] && typeof config[targetOptionId].type !== 'undefined') { return this.mapSwatchTypeNumberToTypeCode(config[targetOptionId].type); } // Otherwise - if no config is present for the target option - use the type of the first option // with a type property from the attribute, thus assuming its the same type as the target option. // (This edge case condition can occur on single swatch products if some options are not salable) return this.getTypeOfFirstOption(attributeId); }, getSwatchType(attributeId, optionId) { // Deserialize the attribute details the first time they are used if (this.swatchConfig[attributeId] && ! this.swatchConfig[attributeId].details) { this.swatchConfig[attributeId] = this.getAttributeSwatchData(attributeId); } const type = this.swatchConfig[attributeId] && this.swatchConfig[attributeId].details && this.swatchConfig[attributeId].details.swatch_input_type || "empty"; return type === 'visual' ? this.getVisualSwatchType(attributeId, optionId) : type; }, isTextSwatch(attributeId, optionId) { return this.getSwatchType(attributeId, optionId) === 'text'; }, isVisualSwatch(attributeId, optionId) { const type = this.getSwatchType(attributeId, optionId); return ['image', 'color'].includes(type); }, getSwatchBackgroundStyle(attributeId, optionId) { const config = this.getSwatchConfig(attributeId, optionId); const type = this.getSwatchType(attributeId, optionId); if (type === "color") { return 'background-color:' + config.value; } else if (type === "image") { return "background: #ffffff url('" + config.value + "') no-repeat center"; } else { return ''; } }, getSwatchText(attributeId, optionId) { const config = this.getSwatchConfig(attributeId, optionId); return config.label || config.value || this.getOptionLabelFromOptionConfig(attributeId, optionId); }, getOptionLabelFromOptionConfig(attributeId, optionId) { // Fallback if no value is present in swatchConfig data // Reference issue https://gitlab.hyva.io/hyva-themes/magento2-default-theme/-/issues/190 const option = this.getAllAttributeOptions(attributeId).filter(option => option.id === optionId); return option && option[0] && option[0].label ||''; }, getSwatchConfig(attributeId, optionId) { return this.swatchConfig[attributeId] && this.swatchConfig[attributeId][optionId] ? this.swatchConfig[attributeId][optionId] : false; }, activeTooltipItem: false, tooltipPositionElement: false, isTooltipVisible() { return this.activeTooltipItem && this.getSwatchConfig( this.activeTooltipItem.attribute, this.activeTooltipItem.item ); }, isFirstItemCol() { return this.activeTooltipItem.index === 0; }, getTooltipImageStyle(attributeId, optionId) { const config = this.getSwatchConfig(attributeId, optionId); const type = this.getSwatchType(attributeId, optionId); if (type === "color") { return 'background-color:' + config.value + '; width: 110px; height: 90px;'; } else if (type === "image") { return "background: #ffffff url('" + config.thumb + "') center center no-repeat; width: 110px; height: 90px;"; } else { return 'display:none'; } }, getTooltipPosition() { return this.tooltipPositionElement ? `top: ${this.tooltipPositionElement.offsetTop}px;` + `left: ${ this.tooltipPositionElement.offsetLeft - ( this.tooltipPositionElement.closest('.snap') && this.tooltipPositionElement.closest('.snap').scrollLeft || 0 ) }px;` : '' }, getTooltipLabel() { return this.getSwatchConfig(this.activeTooltipItem.attribute, this.activeTooltipItem.item).label }, focusedLabel: false, focusLabel(optionId) { this.focusedLabel = optionId; }, blurLabel() { this.focusedLabel = false; }, showSwatches: false, initShowSwatchesIntersect() { if ('IntersectionObserver' in window && !window.scrollY) { let io = new IntersectionObserver( entries => { entries.map(entry => { if (entry.isIntersecting) { this.showSwatches = true; io.unobserve(this.$root); } }) } ); io.observe(this.$root); } else { this.showSwatches = true } } } } </script> <script> 'use strict'; (function () { const modals = []; const excludedFromFocusTrapping = new Set(); function trapFocusInNextModalWithOverlay() { for (let idx = modals.length -1; idx >= 0; idx--) { const nextOnStack = modals[idx]; const nextDialogElement = nextOnStack.instance.$refs[nextOnStack.name]; if (! isOverlayDisabled(nextDialogElement)) { hyva.trapFocus(nextDialogElement); break; } } } function focusables(dialogElement) { const selector = 'button, [href], input, textarea, select, details, [tabindex]:not([tabindex="-1"])'; return Array.from(dialogElement.querySelectorAll(selector)) .filter(el => !el.hasAttribute('disabled')); } function firstVisible(elements) { const a = Array.from(elements); for (let i = 0; i < a.length; i++) { if (a[i].offsetWidth || a[i].offsetHeight || a[i].getClientRects().length) return a[i]; } return null; } function isInViewport(element) { const rect = element && element.getBoundingClientRect(); return rect && rect.top >= 0 && rect.left >= 0 && rect.right <= window.innerWidth && rect.bottom <= window.innerHeight; } function setFocusAfterTransition(dialogElement, duration) { const nested = Array.from(dialogElement.querySelectorAll('[role="dialog"]')); const candidates = Array.from(dialogElement.querySelectorAll('[x-focus-first]')); next: for (let candidate of candidates) { for (let child of nested) { if (child.contains(candidate)) continue next; } setTimeout(() => candidate.focus(), 50); break; } window.setTimeout(() => { const focusElement = firstVisible(dialogElement.querySelectorAll('[x-focus-first]')) || focusables(dialogElement)[0] || null; focusElement && isInViewport(focusElement) && focusElement.focus(); }, Math.max(1, duration)); } function determineTrigger($refs, dialog, trigger) { if (typeof trigger === 'undefined' && typeof dialog === 'object' && dialog.target instanceof HTMLElement) { return dialog.target; } if (typeof dialog === 'string' && typeof trigger === 'object' && trigger.target instanceof HTMLElement) { return trigger.target; } if (typeof trigger === 'string') { try { return $refs[trigger] || document.querySelector(trigger) } catch (e) {} } if (trigger instanceof Element) { return trigger; } return null; } function isOverlayDisabled(dialog) { return dialog && dialog.hasAttribute('x-no-overlay') } function areRemainingModalsWithoutOverlay(modals) { const overflowDisabled = modals.map(modal => modal.instance.$refs[modal.name]).filter(isOverlayDisabled); return overflowDisabled.length === modals.length; } window.hyva.modal = function(options) { const config = Object.assign({ dialog: 'dialog', duration: 300, transitionEnter: 'transition ease-out duration-300', transitionEnterStart: 'opacity-0', transitionEnterEnd: 'opacity-100', transitionLeave: 'transition ease-in duration-300', transitionLeaveStart: 'opacity-100', transitionLeaveEnd: 'opacity-0', }, options); let lastHide = 0; return { opened: {}, show(dialog, trigger) { const focusTargetAfterHide = determineTrigger(this.$refs, dialog, trigger); const name = typeof dialog === 'string' ? dialog : config.dialog; const dialogElement = this.$refs[name]; if (! dialogElement) { return; } const useOverlay = ! dialogElement.hasAttribute('x-no-overlay'); dialogElement.scrollTop = 0; if (this.opened[name]) { return; } if (focusTargetAfterHide) { focusTargetAfterHide.setAttribute('aria-expanded', 'true'); } this.opened[name] = true; useOverlay && this.$nextTick(() => hyva.trapFocus(dialogElement)); setFocusAfterTransition(dialogElement, config.duration); const frame = {name, instance: this, focusTarget: focusTargetAfterHide, time: Date.now()}; modals.push(frame); if (useOverlay) { document.body.classList.add('overflow-hidden'); } return new Promise(resolve => frame.resolve = resolve); }, cancel() { this.hide(false); }, ok() { this.hide(true); }, hide(value) { if (Date.now() - lastHide < config.duration) { return; } lastHide = Date.now(); const modal = modals.pop() || {}; const name = modal.name; this.opened[name] = false; hyva.releaseFocus(modal.instance.$refs[modal.name]) trapFocusInNextModalWithOverlay(); const nextFocusAfterHide = modal.focusTarget; nextFocusAfterHide && setTimeout(() => { nextFocusAfterHide.setAttribute('aria-expanded', 'false'); nextFocusAfterHide.focus() }, config.duration); if (modals.length === 0 || areRemainingModalsWithoutOverlay(modals)) { document.body.classList.remove('overflow-hidden'); } modal.resolve(value); }, overlay(dialog) { const name = typeof dialog === 'string' ? dialog : config.dialog; return { ['x-show']() { return this.opened[name] }, ['x-transition:enter']: config.transitionEnter, ['x-transition:enter-start']: config.transitionEnterStart, ['x-transition:enter-end']: config.transitionEnterEnd, ['x-transition:leave']: config.transitionLeave, ['x-transition:leave-start']: config.transitionLeaveStart, ['x-transition:leave-end']: config.transitionLeaveEnd, ['@hyva-modal-show.window'](event) { event.detail && event.detail.dialog === name && this.show(name, event.detail.focusAfterHide) } }; } }; } window.hyva.modal.peek = () => modals.length > 0 && modals[modals.length -1] window.hyva.modal.pop = function () { if (modals.length > 0) { const modal = modals[modals.length -1]; modal.instance.hide(); } } window.hyva.modal.excludeSelectorsFromFocusTrap = function (selectors) { typeof selectors === 'string' || selectors instanceof String ? excludedFromFocusTrapping.add(selectors) : selectors.map(selector => excludedFromFocusTrapping.add(selector)); } window.hyva.modal.eventListeners = { keydown: event => { if (event.key === 'Escape') { window.hyva.modal.pop(); } }, click: event => { if (modals.length > 0) { const modal = modals[modals.length -1]; const dialog = modal.instance.$refs[modal.name]; if (modal.time + 50 < Date.now() && // if last click processing is more than 50ms ago ! isOverlayDisabled(dialog) && // if dialog has overlay ! dialog.contains(event.target)) { // if click is outside of dialog modal.instance.hide(); } } } }; document.addEventListener('keydown', window.hyva.modal.eventListeners.keydown); document.addEventListener('click', window.hyva.modal.eventListeners.click); })(); </script> <script> 'use strict'; const grecaptchaV2LoadCallbacks = []; function executeRecaptchaLoadCallbacks () { while (window.grecaptcha && grecaptchaV2LoadCallbacks.length > 0) { const callback = grecaptchaV2LoadCallbacks.pop(); typeof callback === 'string' ? window[callback]() : callback(); } } (function() { const loadRecaptchaScript = (event) => { if (window.grecaptcha || !event.target.form) { return; } const url = 'https://www.google.com/recaptcha/api.js?onload=executeRecaptchaLoadCallbacks'; const siteKey = '6LdGOqApAAAAAIS2sUz5vjZ\u002DLJa9y95j02KWYwnW'; const script = document.createElement('script'); script.type = 'text/javascript'; script.src = siteKey ? `${url}&render=${siteKey}` : `${url}&render=explicit`; script.async = true; document.head.appendChild(script); script.addEventListener('load', () => { Array.from(document.querySelectorAll('button[data-recaptcha-btn]:disabled')).forEach(btn => btn.removeAttribute('disabled')); }); } window.forceLoadRecaptchaScript = (form) => { loadRecaptchaScript({target: {form: form || 'dummy'}}); executeRecaptchaLoadCallbacks(); }; document.body.addEventListener('input', loadRecaptchaScript, { once: true }); document.body.addEventListener('focus', loadRecaptchaScript, { once: true }); }()); </script> <script> if (HTMLScriptElement.supports && HTMLScriptElement.supports('speculationrules')) { const specScript = document.createElement('script'); specScript.type = 'speculationrules'; specRules = { "prerender": [{ "where": { "or": [ { "href_matches": "/" }, { "href_matches": "/*.html" }, { "href_matches": "/*" }, ], }, "eagerness": "moderate" }] }; specScript.textContent = JSON.stringify(specRules); document.body.append(specScript); } </script> <script defer> 'use strict'; (() => { const equalizeButtonWidths = (buttons) => { const buttonList = buttons.querySelectorAll('[data-element="link"], [data-element="empty_link"]'); let buttonMinWidth = 0; buttonList.forEach(button => { const buttonWidth = button.offsetWidth; if (buttonWidth > buttonMinWidth) { buttonMinWidth = buttonWidth; } }); buttonList.forEach(button => { button.style.minWidth = `${buttonMinWidth}px`; }); }; window.addEventListener('DOMContentLoaded', () => { document.querySelectorAll('[data-content-type="buttons"][data-same-width="true"]').forEach(buttons => { equalizeButtonWidths(buttons); }); }); })(); </script> <script defer> 'use strict'; (() => { const initCarousels = (elements) => { if (!Glider) { return; } const initProductCarousel = (carousel) => { const gliderElement = carousel.querySelector('[data-role="glider-content"]'); if (!gliderElement) { return; } const gliderDots = carousel.querySelector('.glider-dots'); const gliderPrev = carousel.querySelector('.glider-prev'); const gliderNext = carousel.querySelector('.glider-next'); const glider = new Glider(gliderElement, { slidesToShow: 2, slidesToScroll: 2, scrollLock: true, draggable: true, dragVelocity: 2.5, dots: gliderDots, arrows: { prev: gliderPrev, next: gliderNext, }, responsive: [ { breakpoint: 768, settings: { slidesToShow: 3, slidesToScroll: 3, } }, { breakpoint: 1024, settings: { slidesToShow: 4, slidesToScroll: 4, } }, ], }); carousel.classList.remove('overflow-x-scroll'); gliderPrev.classList.remove('hidden'); gliderNext.classList.remove('hidden'); if (carousel.dataset.autoplay !== 'false') { gliderAutoplay( glider, carousel.dataset.autoplaySpeed, carousel.dataset.infiniteLoop ); } }; const initSliderCarousel = (slider) => { slider.innerHTML = `<div data-role="glider-content">${slider.innerHTML}</div>`; slider.classList.add('glider-contain'); slider.insertAdjacentHTML( 'beforeend', '\u000A\u003Cdiv\u0020class\u003D\u0022carousel\u002Dnav\u0020flex\u0020items\u002Dcenter\u0020justify\u002Dcenter\u0020flex\u002D1\u0020p\u002D4\u0022\u003E\u000A\u0020\u0020\u0020\u0020\u003Cbutton\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020aria\u002Dlabel\u003D\u0022Previous\u0022\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020class\u003D\u0022glider\u002Dprev\u0020w\u002D8\u0020h\u002D8\u0020mr\u002D1\u0020text\u002Dblack\u0020rounded\u002Dfull\u0020outline\u002Dnone\u0020focus\u003Aoutline\u002Dnone\u0020hidden\u0022\u003E\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u003Csvg\u0020viewBox\u003D\u00220\u00200\u00201024\u00201024\u0022\u003E\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u003Cpath\u0020class\u003D\u0022path1\u0022\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020d\u003D\u0022M716.8\u00201024c6.552\u00200\u002013.102\u002D2.499\u002018.101\u002D7.499\u00209.998\u002D9.997\u00209.998\u002D26.206\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u00200\u002D36.203l\u002D442.698\u002D442.698\u0020442.698\u002D442.699c9.998\u002D9.997\u00209.998\u002D26.206\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u00200\u002D36.203s\u002D26.206\u002D9.998\u002D36.203\u00200l\u002D460.8\u0020460.8c\u002D9.998\u00209.997\u002D9.998\u002026.206\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u00200\u002036.203l460.8\u0020460.8c5\u00205\u002011.55\u00207.499\u002018.102\u00207.499z\u0022\u003E\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u003C\u002Fpath\u003E\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u003C\u002Fsvg\u003E\u000A\u0020\u0020\u0020\u0020\u003C\u002Fbutton\u003E\u000A\u0020\u0020\u0020\u0020\u003Cdiv\u0020role\u003D\u0022tablist\u0022\u0020class\u003D\u0022glider\u002Ddots\u0020select\u002Dnone\u0020flex\u0020flex\u002Dwrap\u0020mx\u002D1\u0020justify\u002Dcenter\u0020p\u002D0\u0020focus\u003Aoutline\u002Dnone\u0022\u003E\u003C\u002Fdiv\u003E\u000A\u0020\u0020\u0020\u0020\u003Cbutton\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020aria\u002Dlabel\u003D\u0022Next\u0022\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020class\u003D\u0022glider\u002Dnext\u0020w\u002D8\u0020h\u002D8\u0020ml\u002D1\u0020text\u002Dblack\u0020rounded\u002Dfull\u0020outline\u002Dnone\u0020focus\u003Aoutline\u002Dnone\u0020hidden\u0022\u003E\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u003Csvg\u0020viewBox\u003D\u00220\u00200\u00201024\u00201024\u0022\u003E\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u003Cpath\u0020class\u003D\u0022path1\u0022\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020d\u003D\u0022M256\u00201024c\u002D6.552\u00200\u002D13.102\u002D2.499\u002D18.101\u002D7.499\u002D9.998\u002D9.997\u002D9.998\u002D26.206\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u00200\u002D36.203l442.698\u002D442.698\u002D442.698\u002D442.699c\u002D9.998\u002D9.997\u002D9.998\u002D26.206\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u00200\u002D36.203s26.206\u002D9.998\u002036.203\u00200l460.8\u0020460.8c9.998\u00209.997\u00209.998\u002026.206\u00200\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u002036.203l\u002D460.8\u0020460.8c\u002D5\u00205\u002D11.55\u00207.499\u002D18.102\u00207.499z\u0022\u003E\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u003C\u002Fpath\u003E\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u003C\u002Fsvg\u003E\u000A\u0020\u0020\u0020\u0020\u003C\u002Fbutton\u003E\u000A\u003C\u002Fdiv\u003E\u000A' ); const gliderElement = slider.querySelector('[data-role="glider-content"]'); const gliderDots = slider.querySelector('.glider-dots'); const gliderPrev = slider.querySelector('.glider-prev'); const gliderNext = slider.querySelector('.glider-next'); const glider = new Glider(gliderElement, { slidesToShow: 1, slidesToScroll: 1, scrollLock: true, scrollLockDelay: 250, draggable: true, dragVelocity: 2.5, dots: gliderDots, arrows: { prev: gliderPrev, next: gliderNext, }, }); slider.classList.add('glider-initialized'); if (slider.dataset.showArrows === 'true') { gliderPrev.classList.remove('hidden'); gliderNext.classList.remove('hidden'); } if (slider.dataset.autoplay !== 'false') { gliderAutoplay( glider, slider.dataset.autoplaySpeed, slider.dataset.infiniteLoop ); } }; const gliderAutoplay = (glider, milliseconds, loop) => { const pagesCount = glider.track.childElementCount; let slideTimeout = null; let nextIndex = 1; let paused = false; const slide = () => { slideTimeout = setTimeout( () => { if (loop && nextIndex >= pagesCount) { nextIndex = 0; } glider.scrollItem(nextIndex); }, parseInt(milliseconds) ); }; glider.ele.addEventListener('glider-animated', () => { nextIndex = glider.slide + glider.opt.slidesToScroll; window.clearInterval(slideTimeout); if (!paused && (loop || nextIndex < pagesCount)) { slide(); } }); const pause = () => { if (!paused) { clearInterval(slideTimeout); paused = true; } }; const unpause = () => { if (paused) { slide(); paused = false; } }; glider.ele.parentElement.addEventListener('mouseover', pause, {passive: true}); glider.ele.parentElement.addEventListener('touchstart', pause, {passive: true}); glider.ele.parentElement.addEventListener('mouseout', unpause, {passive: true}); glider.ele.parentElement.addEventListener('touchend', unpause, {passive: true}); slide(); }; elements.forEach(element => { if (element.dataset.contentType === 'products') { initProductCarousel(element); } if (element.dataset.contentType === 'slider') { initSliderCarousel(element); } }); }; window.addEventListener('DOMContentLoaded', () => { const carouselElements = document.querySelectorAll( `[data-content-type="products"][data-appearance="carousel"], [data-content-type="slider"]` ); if (carouselElements.length > 0) { const script = document.createElement('script'); script.type = 'text/javascript'; script.addEventListener('load', () => { initCarousels(carouselElements); }); document.head.appendChild(script); } }); })(); </script> <script defer> 'use strict'; (() => { const initMaps = (elements) => { const renderMap = (element) => { const dataLocations = element.dataset.locations; // Hide map if no locations set if (!dataLocations || dataLocations === '[]') { element.classList.add('hidden'); return; } const map = new google.maps.Map( element, getMapOptions( element.dataset.showControls !== 'true', element.dataset.showControls === 'true' ) ); const locations = JSON.parse(dataLocations); const latitudeLongitudeBounds = new google.maps.LatLngBounds(); const bounds = []; locations.forEach(location => { const position = { lat: parseFloat(location.position.latitude), lng: parseFloat(location.position.longitude), }; bounds.push(position); const infowindow = new google.maps.InfoWindow({ content: getInfoWindowContent(location), }); const marker = new google.maps.Marker({ position: position, map, title: location.location_name, }); marker.addListener('click', () => { infowindow.open(map, marker); }); }); // Set bounds if multiple locations if (bounds.length > 1) { bounds.forEach(function (bound) { latitudeLongitudeBounds.extend(bound); }); map.fitBounds(latitudeLongitudeBounds); } // Center if single location if (bounds.length === 1) { map.setCenter(bounds[0]); } }; const getMapOptions = (disableDefaultUI, mapTypeControl) => { const style = ''; return { zoom: 8, scrollwheel: false, disableDoubleClickZoom: false, mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.DEFAULT, }, styles: style ? JSON.parse(style) : [], disableDefaultUI: disableDefaultUI, mapTypeControl: mapTypeControl, }; }; const getInfoWindowContent = (location) => { const title = location.location_name ? `<h3 class="text-2xl font-medium text-gray-900 title-font">${location.location_name}</h3>` : ''; const comment = location.comment ? `<p class="px-1 pt-3 text-primary">${location.comment}</p>` : ''; const phone = location.phone ? `<p class="px-1 pt-3 text-primary">Phone: ${location.phone}</p>` : ''; const street = location.address ? `${location.address}<br/>` : ''; const city = location.city ? `${location.city}<br/>` : ''; const state = location.state ? `${location.state}<br/>` : ''; const zipCode = location.zipcode ? `${location.zipcode}<br/>` : ''; const country = location.country ? location.country : ''; return `<div> ${title} ${comment} ${phone} <p class="px-1 pt-3 text-primary"> ${street} ${city} ${state} ${zipCode} ${country} </p> </div>`; }; const hideAllMaps = () => { document.querySelectorAll('[data-content-type="map"]').forEach(element => { element.classList.add('hidden'); }); }; window.gm_authFailure = () => { hideAllMaps(); }; if (typeof google.maps === 'undefined') { hideAllMaps(); return; } elements.forEach(element => { if (element.dataset.contentType === 'map') { renderMap(element); } }); }; window.addEventListener('DOMContentLoaded', () => { const mapElements = document.querySelectorAll('[data-content-type="map"]'); if (mapElements.length > 0) { const script = document.createElement('script'); script.type = 'text/javascript'; script.addEventListener('load', () => { initMaps(mapElements); }); script.src = 'https\u003A\u002F\u002Fmaps.googleapis.com\u002Fmaps\u002Fapi\u002Fjs\u003Fv\u003D3\u0026key\u003D'; document.head.appendChild(script); } }); })(); </script> <script defer> 'use strict'; (() => { const initParallaxImage = (element) => { if (!window.jarallax) { return; } element.classList.add('jarallax'); element.dataset.jarallax = ''; const parallaxSpeed = parseFloat(element.dataset.parallaxSpeed) || 0.5; const elementStyle = window.getComputedStyle(element); window.jarallax(element, { imgPosition: elementStyle.backgroundPosition || '50% 50%', imgRepeat: elementStyle.backgroundRepeat || 'no-repeat', imgSize: elementStyle.backgroundSize || 'cover', speed: parallaxSpeed, }); }; const initVideoBackground = (element) => { if (!window.jarallax) { return; } let slider = null; if (element.classList.contains('pagebuilder-slide-wrapper')) { const viewportElement = document.createElement('div'); slider = element.closest('[data-content-type=slider]'); viewportElement.classList.add('jarallax-viewport-element'); element.dataset.elementInViewport = '.jarallax-viewport-element'; element.appendChild(viewportElement); } element.classList.add('jarallax'); element.dataset.jarallax = ''; const parallaxSpeed = parseFloat(element.dataset.parallaxSpeed) || 0.5; window.jarallax(element, { imgSrc: element.dataset.videoFallbackSrc, speed: parallaxSpeed, videoLoop: element.dataset.videoLoop, videoPlayOnlyVisible: element.dataset.videoPlayOnlyVisible, videoLazyLoading: element.dataset.videoLazyLoad, disableVideo: false, elementInViewport: element.dataset.elementInViewport && element.querySelector(element.dataset.elementInViewport), }); if (slider) { if (slider.dataset.afterChangeIsSet) { return; } slider.addEventListener('glider-loaded', () => { slider.querySelectorAll('.jarallax').forEach(videoSlide => { videoSlide.jarallax && videoSlide.jarallax.onScroll(); }); }); slider.addEventListener('glider-animated', () => { slider.querySelectorAll('.jarallax').forEach(videoSlide => { videoSlide.jarallax && videoSlide.jarallax.onScroll(); }); }); slider.dataset.afterChangeIsSet = true; } }; window.addEventListener('DOMContentLoaded', () => { const parallaxImageElements = document.querySelectorAll( `[data-content-type="row"][data-background-type="image"][data-enable-parallax="1"], [data-content-type="row"] > [data-background-type="image"][data-enable-parallax="1"]` ); const videoBackgroundsElements = document.querySelectorAll( `[data-content-type="row"][data-background-type="video"][data-enable-parallax="1"], [data-content-type="row"] > [data-background-type="video"][data-enable-parallax="1"], [data-content-type="banner"] [data-background-type="video"], [data-content-type="slide"] [data-background-type="video"]` ); if (parallaxImageElements.length > 0 || videoBackgroundsElements.length > 0) { const jarallaxScript = document.createElement('script'); jarallaxScript.type = 'text/javascript'; jarallaxScript.addEventListener('load', () => { parallaxImageElements.forEach(row => { initParallaxImage(row); }); const jarallaxVideoScript = document.createElement('script'); jarallaxVideoScript.type = 'text/javascript'; jarallaxVideoScript.addEventListener('load', () => { videoBackgroundsElements.forEach(element => { initVideoBackground(element); }); }); jarallaxVideoScript.src = 'https\u003A\u002F\u002Fpublications.opengroup.org\u002Fstatic\u002Fversion1732013752\u002Ffrontend\u002FOpengroup\u002Fpublications\u002Fen_GB\u002FFoundationCommerce_HyvaPageBuilder\u002Fjs\u002Fjarallax\u002Dvideo.min.js'; document.head.appendChild(jarallaxVideoScript); }); jarallaxScript.src = 'https\u003A\u002F\u002Fpublications.opengroup.org\u002Fstatic\u002Fversion1732013752\u002Ffrontend\u002FOpengroup\u002Fpublications\u002Fen_GB\u002FFoundationCommerce_HyvaPageBuilder\u002Fjs\u002Fjarallax.min.js'; document.head.appendChild(jarallaxScript); } }); })(); </script> <script defer> 'use strict'; (() => { const applyShowOnHover = (element) => { const showOverlayOnHover = (element) => { const overlay = element.querySelector('.pagebuilder-overlay'); const color = overlay.dataset.overlayColor; element.addEventListener('mouseover', () => { overlay.style.backgroundColor = color; }); element.addEventListener('mouseout', () => { overlay.style.backgroundColor = 'transparent'; }); }; const showButtonOnHover = (element) => { const button = element.querySelector('.pagebuilder-banner-button'); element.addEventListener('mouseover', () => { button.style.opacity = '1'; button.style.visibility = 'visible'; }); element.addEventListener('mouseout', () => { button.style.opacity = '0'; button.style.visibility = 'hidden'; }); }; if (element.dataset.showOverlay === 'hover') { showOverlayOnHover(element); } if (element.dataset.showButton === 'hover') { showButtonOnHover(element); } }; window.addEventListener('DOMContentLoaded', () => { document.querySelectorAll('[data-content-type="banner"],[data-content-type="slider"]').forEach(element => { applyShowOnHover(element); }); }); })(); </script> <script defer> 'use strict'; (() => { document.querySelectorAll('[data-content-type="tab-item"]').forEach(tabItem => { tabItem.setAttribute('x-show', `tab === '${tabItem.id}'`); }); document.querySelectorAll('[data-content-type="tabs"]').forEach(tab => { const defaultActiveTab = parseInt(tab.dataset.activeTab) || 0; tab.querySelectorAll('.tab-header').forEach((tabHeader, index) => { const tabLink = tabHeader.querySelector('a'); const tabId = tabLink.getAttribute('href').replace('#', ''); tabHeader.setAttribute(':class', `{ 'active': tab === '${tabId}' }`); tabLink.setAttribute('x-on:click.prevent', `tab = '${tabId}'`); if (index === defaultActiveTab) { tab.setAttribute('x-data', `{ tab: '${tabId}' }`); } }); }); })(); </script> <script defer> 'use strict'; (() => { const initLiteYTVideo = () => { class LiteYTEmbed extends HTMLElement { connectedCallback() { this.videoId = this.getAttribute('videoid'); let playBtnEl = this.querySelector('.lty-playbtn'); // A label for the button takes priority over a [playlabel] attribute on the custom-element this.playLabel = (playBtnEl && playBtnEl.textContent.trim()) || this.getAttribute('playlabel') || 'Play'; /** * Lo, the youtube placeholder image! (aka the thumbnail, poster image, etc) * * See https://github.com/paulirish/lite-youtube-embed/blob/master/youtube-thumbnail-urls.md * * TODO: Do the sddefault->hqdefault fallback * - When doing this, apply referrerpolicy (https://github.com/ampproject/amphtml/pull/3940) * TODO: Consider using webp if supported, falling back to jpg */ if (!this.style.backgroundImage) { this.style.backgroundImage = `url("https://i.ytimg.com/vi/${this.videoId}/hqdefault.jpg")`; } // Set up play button, and its visually hidden label if (!playBtnEl) { playBtnEl = document.createElement('button'); playBtnEl.type = 'button'; playBtnEl.classList.add('lty-playbtn'); this.append(playBtnEl); } if (!playBtnEl.textContent) { const playBtnLabelEl = document.createElement('span'); playBtnLabelEl.className = 'lyt-visually-hidden'; playBtnLabelEl.textContent = this.playLabel; playBtnEl.append(playBtnLabelEl); } // On hover (or tap), warm up the TCP connections we're (likely) about to use. this.addEventListener('pointerover', LiteYTEmbed.warmConnections, {once: true}); // Once the user clicks, add the real iframe and drop our play button // TODO: In the future we could be like amp-youtube and silently swap in the iframe during idle time // We'd want to only do this for in-viewport or near-viewport ones: https://github.com/ampproject/amphtml/pull/5003 this.addEventListener('click', this.addIframe); // Chrome & Edge have no problem with the basic YouTube Embed with ?autoplay=1 // However Safari and Firefox do not successfully track the user gesture of clicking through the creation/loading of the iframe, // so they don't autoplay automatically. Instead we must load an additional 300KB (ungz) of JS for the YT Player API // TODO: chrome android seems to also need this this.needsYTApiForAutoplay = navigator.vendor.includes('Apple') || navigator.userAgent.includes('Firefox'); } // // TODO: Support the the user changing the [videoid] attribute // attributeChangedCallback() { // } /** * Add a <link rel={preload | preconnect} ...> to the head */ static addPrefetch(kind, url, as) { const linkEl = document.createElement('link'); linkEl.rel = kind; linkEl.href = url; if (as) { linkEl.as = as; } document.head.append(linkEl); } /** * Begin pre-connecting to warm up the iframe load * Since the embed's network requests load within its iframe, * preload/prefetch'ing them outside the iframe will only cause double-downloads. * So, the best we can do is warm up a few connections to origins that are in the critical path. * * Maybe `<link rel=preload as=document>` would work, but it's unsupported: http://crbug.com/593267 * But TBH, I don't think it'll happen soon with Site Isolation and split caches adding serious complexity. */ static warmConnections() { if (LiteYTEmbed.preconnected) return; // The iframe document and most of its subresources come right off youtube.com LiteYTEmbed.addPrefetch('preconnect', 'https://www.youtube-nocookie.com'); // The botguard script is fetched off from google.com LiteYTEmbed.addPrefetch('preconnect', 'https://www.google.com'); // Not certain if these ad related domains are in the critical path. Could verify with domain-specific throttling. LiteYTEmbed.addPrefetch('preconnect', 'https://googleads.g.doubleclick.net'); LiteYTEmbed.addPrefetch('preconnect', 'https://static.doubleclick.net'); LiteYTEmbed.preconnected = true; } fetchYTPlayerApi() { if (window.YT || (window.YT && window.YT.Player)) return; this.ytApiPromise = new Promise((res, rej) => { var el = document.createElement('script'); el.src = 'https://www.youtube.com/iframe_api'; el.async = true; el.onload = _ => { YT.ready(res); }; el.onerror = rej; this.append(el); }); } async addYTPlayerIframe(params) { this.fetchYTPlayerApi(); await this.ytApiPromise; const videoPlaceholderEl = document.createElement('div') this.append(videoPlaceholderEl); const paramsObj = Object.fromEntries(params.entries()); new YT.Player(videoPlaceholderEl, { width: '100%', videoId: this.videoId, playerVars: paramsObj, events: { 'onReady': event => { event.target.playVideo(); } } }); } async addIframe(){ if (this.classList.contains('lyt-activated')) return; this.classList.add('lyt-activated'); const params = new URLSearchParams(this.getAttribute('params') || []); params.append('autoplay', '1'); params.append('playsinline', '1'); if (this.needsYTApiForAutoplay) { return this.addYTPlayerIframe(params); } const iframeEl = document.createElement('iframe'); iframeEl.width = 560; iframeEl.height = 315; // No encoding necessary as [title] is safe. https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html#:~:text=Safe%20HTML%20Attributes%20include iframeEl.title = this.playLabel; iframeEl.allow = 'accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture'; iframeEl.allowFullscreen = true; // AFAIK, the encoding here isn't necessary for XSS, but we'll do it only because this is a URL // https://stackoverflow.com/q/64959723/89484 iframeEl.src = `https://www.youtube-nocookie.com/embed/${encodeURIComponent(this.videoId)}?${params.toString()}`; this.append(iframeEl); // Set focus for a11y iframeEl.focus(); } } // Register custom element customElements.define('lite-youtube', LiteYTEmbed); }; window.addEventListener('DOMContentLoaded', () => { const videoList = document.querySelectorAll('[data-content-type="yt_lite_video"]'); if (videoList.length) { initLiteYTVideo(); } }); })(); </script> <script> window.addEventListener('load', function () { magentoStorefrontEvents.context.setPage({ pageType: "Category" }); magentoStorefrontEvents.context.setContext("pageExtended", { action: "category-view" }); magentoStorefrontEvents.context.setCategory({"name":"Templates","urlKey":"templates","urlPath":"more-categories\/templates"}); }); </script> <div x-data="dataServicesAddToCartTracking()" @private-content-loaded.window="checkIfProductIsAddedToBasket($event.detail.data)"></div> <script> window.addEventListener('productAddToCart', function(event) { const browserStorage = hyva.getBrowserStorage(); const product = JSON.parse(browserStorage.getItem('dataservices_product_context')); let shoppingCart = magentoStorefrontEvents.context.getShoppingCart(); let changedProducts = event.detail; magentoStorefrontEvents.context.setProduct(product); if (changedProducts.length > 0) { magentoStorefrontEvents.context.setShoppingCart(shoppingCart); magentoStorefrontEvents.context.setChangedProducts({ items: createCartItems(changedProducts), }); magentoStorefrontEvents.publish.addToCart(); } function getConfigurableOptions(item) { return item.options.map((function(item) { return { id: item.option_id, optionLabel: item.label, valueId: parseInt(item.option_value), valueLabel: item.value } } )) } function getCartItemPrice(cartItem) { const productPrice = cartItem.product_price_value; if (productPrice && productPrice.hasOwnProperty('excl_tax')) { return Number(parseFloat(productPrice.excl_tax).toFixed(2)); } else { return Number(parseFloat(productPrice).toFixed(2)); } } function createCartItems(productList) { if (!Array.isArray(productList)) { console.error('Expected an array for productList, received:', productList); return []; } return productList.map((item) => ({ id: item.item_id, formattedPrice: getCartItemPrice(item), quantity: item.qty, canApplyMsrp: item.canApplyMsrp, configurableOptions: getConfigurableOptions(item), product: { productType: item.product_type, productId: item.product_id, name: item.product_name, sku: item.product_sku, topLevelSku: item.topLevelSku, mainImageUrl: item.product_image.src, }, prices: { price: { value: getCartItemPrice(item), }, }, })); } }); function dataServicesAddToCartTracking() { return { checkIfProductIsAddedToBasket: function (data) { const browserStorage = hyva.getBrowserStorage(); if (!browserStorage || !data.cart) { return; } let cartSummaryCount = data.cart.summary_count || 0; let storageSummaryCount = parseInt(browserStorage.getItem('cart_summary_count'), 10) || 0; browserStorage.setItem('cart_summary_count', cartSummaryCount); browserStorage.setItem('dataservices_product_context', JSON.stringify(data.cart.dataservices_product_context)); let storedData = browserStorage.getItem("mage-cache-storage"); let browserStorageCartItems = storedData ? JSON.parse(storedData).cart && JSON.parse(storedData).cart.items : []; let dataCartItems = data.cart.items || []; if (cartSummaryCount > storageSummaryCount) { const results = this.findChangedItems(browserStorageCartItems, dataCartItems); window.dispatchEvent(new CustomEvent("productAddToCart", { detail: results })); } }, findChangedItems: function (oldItems, newItems) { let changes = []; newItems.forEach(newItem => { const oldItem = oldItems.find(old => old.item_id === newItem.item_id); if (!oldItem || oldItem.qty !== newItem.qty) { changes.push(newItem); } }); return changes; } } } </script> <script> function adobeProductRecsDataFetcher() { "use strict"; return { pagePreconfiguredDeferred: {}, productBanners: '', fetchData: function () { let self = this; let storefrontEvents = window.magentoStorefrontEvents; storefrontEvents.context.setContext("recsContext", { alternateEnvironmentId: "" }); this.pagePreconfiguredDeferred = new Promise((resolve, reject) => { self.pagePreconfiguredDeferred.resolve = resolve; self.pagePreconfiguredDeferred.reject = reject; }) document.addEventListener("recsRequestSent", (function () { storefrontEvents.publish.recsRequestSent(); })); window.addEventListener("recsResponseReceived", (function (n) { let rec = storefrontEvents.context.getRecommendations(); rec = n.detail, storefrontEvents.context.setRecommendations({ units: rec }); storefrontEvents.publish.recsResponseReceived(); })); this.fetchRecommendationsData(); }, fetchRecommendationsData: function () { let client; let promise = new Promise(function(resolve, reject) { let interval = setInterval(() => { client = new RecommendationsClient(); if(client._environmentId !== "") { clearInterval(interval); resolve(); } }, 300); }) .then(() => { document.dispatchEvent(new Event("recsRequestSent")); client.fetchPreconfigured().then(response => { const units = response.data.results; const filteredUnits = units.filter(unit => unit.products.length); const responseEvent = new CustomEvent("recsResponseReceived", { detail: filteredUnits, }); window.dispatchEvent(responseEvent); }); }); } } } </script> <div x-data="adobeProductRecsDataFetcher()" x-init="fetchData()"></div> <script type="application/json" id="default-section-data"> {"messages":[],"customer":[],"compare-products":[],"last-ordered-items":[],"requisition":[],"cart":[],"directory-data":{"AD":{"name":"Andorra"},"AE":{"name":"United Arab Emirates"},"AF":{"name":"Afghanistan"},"AG":{"name":"Antigua & Barbuda"},"AI":{"name":"Anguilla"},"AL":{"name":"Albania","regions":{"485":{"code":"AL-01","name":"Berat"},"488":{"code":"AL-09","name":"Dib\u00ebr"},"491":{"code":"AL-02","name":"Durr\u00ebs"},"494":{"code":"AL-03","name":"Elbasan"},"497":{"code":"AL-04","name":"Fier"},"500":{"code":"AL-05","name":"Gjirokast\u00ebr"},"503":{"code":"AL-06","name":"Kor\u00e7\u00eb"},"506":{"code":"AL-07","name":"Kuk\u00ebs"},"509":{"code":"AL-08","name":"Lezh\u00eb"},"512":{"code":"AL-10","name":"Shkod\u00ebr"},"515":{"code":"AL-11","name":"Tiran\u00eb"},"518":{"code":"AL-12","name":"Vlor\u00eb"}}},"AM":{"name":"Armenia"},"AO":{"name":"Angola"},"AQ":{"name":"Antarctica"},"AR":{"name":"Argentina","regions":{"524":{"code":"AR-B","name":"Buenos Aires"},"527":{"code":"AR-K","name":"Catamarca"},"530":{"code":"AR-H","name":"Chaco"},"533":{"code":"AR-U","name":"Chubut"},"521":{"code":"AR-C","name":"Ciudad Aut\u00f3noma de Buenos Aires"},"536":{"code":"AR-X","name":"C\u00f3rdoba"},"539":{"code":"AR-W","name":"Corrientes"},"542":{"code":"AR-E","name":"Entre R\u00edos"},"545":{"code":"AR-P","name":"Formosa"},"548":{"code":"AR-Y","name":"Jujuy"},"551":{"code":"AR-L","name":"La Pampa"},"554":{"code":"AR-F","name":"La Rioja"},"557":{"code":"AR-M","name":"Mendoza"},"560":{"code":"AR-N","name":"Misiones"},"563":{"code":"AR-Q","name":"Neuqu\u00e9n"},"566":{"code":"AR-R","name":"R\u00edo Negro"},"569":{"code":"AR-A","name":"Salta"},"572":{"code":"AR-J","name":"San Juan"},"575":{"code":"AR-D","name":"San Luis"},"578":{"code":"AR-Z","name":"Santa Cruz"},"581":{"code":"AR-S","name":"Santa Fe"},"584":{"code":"AR-G","name":"Santiago del Estero"},"587":{"code":"AR-V","name":"Tierra del Fuego"},"590":{"code":"AR-T","name":"Tucum\u00e1n"}}},"AS":{"name":"American Samoa"},"AT":{"name":"Austria","regions":{"102":{"code":"BL","name":"Burgenland"},"99":{"code":"KN","name":"K\u00e4rnten"},"96":{"code":"NO","name":"Nieder\u00f6sterreich"},"97":{"code":"OO","name":"Ober\u00f6sterreich"},"98":{"code":"SB","name":"Salzburg"},"100":{"code":"ST","name":"Steiermark"},"101":{"code":"TI","name":"Tirol"},"103":{"code":"VB","name":"Vorarlberg"},"95":{"code":"WI","name":"Wien"}}},"AU":{"name":"Australia"},"AW":{"name":"Aruba"},"AX":{"name":"\u00c5land Islands"},"AZ":{"name":"Azerbaijan"},"BA":{"name":"Bosnia & Herzegovina"},"BB":{"name":"Barbados"},"BD":{"name":"Bangladesh"},"BE":{"name":"Belgium"},"BF":{"name":"Burkina Faso"},"BG":{"name":"Bulgaria","regions":{"620":{"code":"BG-01","name":"Blagoevgrad"},"623":{"code":"BG-02","name":"Burgas"},"641":{"code":"BG-08","name":"Dobrich"},"638":{"code":"BG-07","name":"Gabrovo"},"695":{"code":"BG-26","name":"Haskovo"},"644":{"code":"BG-09","name":"Kardzhali"},"647":{"code":"BG-10","name":"Kyustendil"},"650":{"code":"BG-11","name":"Lovech"},"653":{"code":"BG-12","name":"Montana"},"656":{"code":"BG-13","name":"Pazardzhik"},"659":{"code":"BG-14","name":"Pernik"},"662":{"code":"BG-15","name":"Pleven"},"665":{"code":"BG-16","name":"Plovdiv"},"668":{"code":"BG-17","name":"Razgrad"},"671":{"code":"BG-18","name":"Ruse"},"698":{"code":"BG-27","name":"Shumen"},"674":{"code":"BG-19","name":"Silistra"},"677":{"code":"BG-20","name":"Sliven"},"680":{"code":"BG-21","name":"Smolyan"},"683":{"code":"BG-22","name":"Sofia City"},"686":{"code":"BG-23","name":"Sofia Province"},"689":{"code":"BG-24","name":"Stara Zagora"},"692":{"code":"BG-25","name":"Targovishte"},"626":{"code":"BG-03","name":"Varna"},"629":{"code":"BG-04","name":"Veliko Tarnovo"},"632":{"code":"BG-05","name":"Vidin"},"635":{"code":"BG-06","name":"Vratsa"},"701":{"code":"BG-28","name":"Yambol"}}},"BH":{"name":"Bahrain"},"BI":{"name":"Burundi"},"BJ":{"name":"Benin"},"BL":{"name":"St. Barth\u00e9lemy"},"BM":{"name":"Bermuda"},"BN":{"name":"Brunei"},"BO":{"name":"Bolivia","regions":{"596":{"code":"BO-H","name":"Chuquisaca"},"593":{"code":"BO-C","name":"Cochabamba"},"599":{"code":"BO-B","name":"El Beni"},"602":{"code":"BO-L","name":"La Paz"},"605":{"code":"BO-O","name":"Oruro"},"608":{"code":"BO-N","name":"Pando"},"611":{"code":"BO-P","name":"Potos\u00ed"},"614":{"code":"BO-S","name":"Santa Cruz"},"617":{"code":"BO-T","name":"Tarija"}}},"BR":{"name":"Brazil"},"BS":{"name":"Bahamas"},"BT":{"name":"Bhutan"},"BV":{"name":"Bouvet Island"},"BW":{"name":"Botswana"},"BY":{"name":"Belarus","regions":{"1682":{"code":"BY-BR","name":"Bresckaja voblas\u0107"},"1685":{"code":"BY-HO","name":"Homie\u013askaja voblas\u0107"},"1688":{"code":"BY-HM","name":"Horad Minsk"},"1691":{"code":"BY-HR","name":"Hrodzienskaja voblas\u0107"},"1694":{"code":"BY-MA","name":"Mahilio\u016dskaja voblas\u0107"},"1697":{"code":"BY-MI","name":"Minskaja voblas\u0107"},"1700":{"code":"BY-VI","name":"Viciebskaja voblas\u0107"}}},"BZ":{"name":"Belize"},"CA":{"name":"Canada","regions":{"66":{"code":"AB","name":"Alberta"},"67":{"code":"BC","name":"British Columbia"},"68":{"code":"MB","name":"Manitoba"},"70":{"code":"NB","name":"New Brunswick"},"69":{"code":"NL","name":"Newfoundland and Labrador"},"72":{"code":"NT","name":"Northwest Territories"},"71":{"code":"NS","name":"Nova Scotia"},"73":{"code":"NU","name":"Nunavut"},"74":{"code":"ON","name":"Ontario"},"75":{"code":"PE","name":"Prince Edward Island"},"76":{"code":"QC","name":"Quebec"},"77":{"code":"SK","name":"Saskatchewan"},"78":{"code":"YT","name":"Yukon Territory"}}},"CC":{"name":"Cocos (Keeling) Islands"},"CD":{"name":"Congo - Kinshasa"},"CF":{"name":"Central African Republic"},"CG":{"name":"Congo - Brazzaville"},"CH":{"name":"Switzerland","regions":{"104":{"code":"AG","name":"Aargau"},"106":{"code":"AR","name":"Appenzell Ausserrhoden"},"105":{"code":"AI","name":"Appenzell Innerrhoden"},"108":{"code":"BL","name":"Basel-Landschaft"},"109":{"code":"BS","name":"Basel-Stadt"},"107":{"code":"BE","name":"Bern"},"110":{"code":"FR","name":"Friburg"},"111":{"code":"GE","name":"Geneva"},"112":{"code":"GL","name":"Glarus"},"113":{"code":"GR","name":"Graub\u00fcnden"},"114":{"code":"JU","name":"Jura"},"115":{"code":"LU","name":"Lucerne"},"116":{"code":"NE","name":"Neuch\u00e2tel"},"117":{"code":"NW","name":"Nidwalden"},"118":{"code":"OW","name":"Obwalden"},"120":{"code":"SH","name":"Schaffhausen"},"122":{"code":"SZ","name":"Schwyz"},"121":{"code":"SO","name":"Solothurn"},"119":{"code":"SG","name":"St. Gallen"},"123":{"code":"TG","name":"Thurgau"},"124":{"code":"TI","name":"Ticino"},"125":{"code":"UR","name":"Uri"},"126":{"code":"VD","name":"Vaud"},"127":{"code":"VS","name":"Wallis"},"128":{"code":"ZG","name":"Zug"},"129":{"code":"ZH","name":"Z\u00fcrich"}}},"CI":{"name":"C\u00f4te d\u2019Ivoire"},"CK":{"name":"Cook Islands"},"CL":{"name":"Chile","regions":{"704":{"code":"CL-AI","name":"Ais\u00e9n del General Carlos Iba\u00f1ez del Campo"},"707":{"code":"CL-AN","name":"Antofagasta"},"710":{"code":"CL-AP","name":"Arica y Parinacota"},"716":{"code":"CL-AT","name":"Atacama"},"719":{"code":"CL-BI","name":"Biob\u00edo"},"722":{"code":"CL-CO","name":"Coquimbo"},"713":{"code":"CL-AR","name":"La Araucan\u00eda"},"725":{"code":"CL-LI","name":"Libertador General Bernardo O'Higgins"},"728":{"code":"CL-LL","name":"Los Lagos"},"731":{"code":"CL-LR","name":"Los R\u00edos"},"734":{"code":"CL-MA","name":"Magallanes"},"737":{"code":"CL-ML","name":"Maule"},"740":{"code":"CL-NB","name":"\u00d1uble"},"743":{"code":"CL-RM","name":"Regi\u00f3n Metropolitana de Santiago"},"746":{"code":"CL-TA","name":"Tarapac\u00e1"},"749":{"code":"CL-VS","name":"Valpara\u00edso"}}},"CM":{"name":"Cameroon"},"CN":{"name":"China"},"CO":{"name":"Colombia"},"CR":{"name":"Costa Rica"},"CV":{"name":"Cape Verde"},"CW":{"name":"Cura\u00e7ao"},"CX":{"name":"Christmas Island"},"CY":{"name":"Cyprus"},"CZ":{"name":"Czechia"},"DE":{"name":"Germany","regions":{"80":{"code":"BAW","name":"Baden-W\u00fcrttemberg"},"81":{"code":"BAY","name":"Bayern"},"82":{"code":"BER","name":"Berlin"},"83":{"code":"BRG","name":"Brandenburg"},"84":{"code":"BRE","name":"Bremen"},"85":{"code":"HAM","name":"Hamburg"},"86":{"code":"HES","name":"Hessen"},"87":{"code":"MEC","name":"Mecklenburg-Vorpommern"},"79":{"code":"NDS","name":"Niedersachsen"},"88":{"code":"NRW","name":"Nordrhein-Westfalen"},"89":{"code":"RHE","name":"Rheinland-Pfalz"},"90":{"code":"SAR","name":"Saarland"},"91":{"code":"SAS","name":"Sachsen"},"92":{"code":"SAC","name":"Sachsen-Anhalt"},"93":{"code":"SCN","name":"Schleswig-Holstein"},"94":{"code":"THE","name":"Th\u00fcringen"}}},"DJ":{"name":"Djibouti"},"DK":{"name":"Denmark","regions":{"752":{"code":"DK-84","name":"Hovedstaden"},"755":{"code":"DK-82","name":"Midtjylland"},"758":{"code":"DK-81","name":"Nordjylland"},"761":{"code":"DK-85","name":"Sj\u00e6lland"},"764":{"code":"DK-83","name":"Syddanmark"}}},"DM":{"name":"Dominica"},"DO":{"name":"Dominican Republic"},"DZ":{"name":"Algeria"},"EC":{"name":"Ecuador","regions":{"767":{"code":"EC-A","name":"Azuay"},"770":{"code":"EC-B","name":"Bol\u00edvar"},"773":{"code":"EC-F","name":"Ca\u00f1ar"},"776":{"code":"EC-C","name":"Carchi"},"779":{"code":"EC-H","name":"Chimborazo"},"782":{"code":"EC-X","name":"Cotopaxi"},"785":{"code":"EC-O","name":"El Oro"},"788":{"code":"EC-E","name":"Esmeraldas"},"791":{"code":"EC-W","name":"Gal\u00e1pagos"},"794":{"code":"EC-G","name":"Guayas"},"797":{"code":"EC-I","name":"Imbabura"},"800":{"code":"EC-L","name":"Loja"},"803":{"code":"EC-R","name":"Los R\u00edos"},"806":{"code":"EC-M","name":"Manab\u00ed"},"809":{"code":"EC-S","name":"Morona Santiago"},"812":{"code":"EC-N","name":"Napo"},"815":{"code":"EC-D","name":"Orellana"},"818":{"code":"EC-Y","name":"Pastaza"},"821":{"code":"EC-P","name":"Pichincha"},"824":{"code":"EC-SE","name":"Santa Elena"},"827":{"code":"EC-SD","name":"Santo Domingo de los Ts\u00e1chilas"},"830":{"code":"EC-U","name":"Sucumb\u00edos"},"833":{"code":"EC-T","name":"Tungurahua"},"836":{"code":"EC-Z","name":"Zamora Chinchipe"}}},"EE":{"name":"Estonia","regions":{"340":{"code":"EE-37","name":"Harjumaa"},"341":{"code":"EE-39","name":"Hiiumaa"},"342":{"code":"EE-44","name":"Ida-Virumaa"},"344":{"code":"EE-51","name":"J\u00e4rvamaa"},"343":{"code":"EE-49","name":"J\u00f5gevamaa"},"346":{"code":"EE-59","name":"L\u00e4\u00e4ne-Virumaa"},"345":{"code":"EE-57","name":"L\u00e4\u00e4nemaa"},"348":{"code":"EE-67","name":"P\u00e4rnumaa"},"347":{"code":"EE-65","name":"P\u00f5lvamaa"},"349":{"code":"EE-70","name":"Raplamaa"},"350":{"code":"EE-74","name":"Saaremaa"},"351":{"code":"EE-78","name":"Tartumaa"},"352":{"code":"EE-82","name":"Valgamaa"},"353":{"code":"EE-84","name":"Viljandimaa"},"354":{"code":"EE-86","name":"V\u00f5rumaa"}}},"EG":{"name":"Egypt"},"EH":{"name":"Western Sahara"},"ER":{"name":"Eritrea"},"ES":{"name":"Spain","regions":{"130":{"code":"A Coru\u0441a","name":"A Coru\u00f1a"},"131":{"code":"Alava","name":"Alava"},"132":{"code":"Albacete","name":"Albacete"},"133":{"code":"Alicante","name":"Alicante"},"134":{"code":"Almeria","name":"Almeria"},"135":{"code":"Asturias","name":"Asturias"},"136":{"code":"Avila","name":"Avila"},"137":{"code":"Badajoz","name":"Badajoz"},"138":{"code":"Baleares","name":"Baleares"},"139":{"code":"Barcelona","name":"Barcelona"},"140":{"code":"Burgos","name":"Burgos"},"141":{"code":"Caceres","name":"Caceres"},"142":{"code":"Cadiz","name":"Cadiz"},"143":{"code":"Cantabria","name":"Cantabria"},"144":{"code":"Castellon","name":"Castellon"},"145":{"code":"Ceuta","name":"Ceuta"},"146":{"code":"Ciudad Real","name":"Ciudad Real"},"147":{"code":"Cordoba","name":"Cordoba"},"148":{"code":"Cuenca","name":"Cuenca"},"149":{"code":"Girona","name":"Girona"},"150":{"code":"Granada","name":"Granada"},"151":{"code":"Guadalajara","name":"Guadalajara"},"152":{"code":"Guipuzcoa","name":"Guipuzcoa"},"153":{"code":"Huelva","name":"Huelva"},"154":{"code":"Huesca","name":"Huesca"},"155":{"code":"Jaen","name":"Jaen"},"156":{"code":"La Rioja","name":"La Rioja"},"157":{"code":"Las Palmas","name":"Las Palmas"},"158":{"code":"Leon","name":"Leon"},"159":{"code":"Lleida","name":"Lleida"},"160":{"code":"Lugo","name":"Lugo"},"161":{"code":"Madrid","name":"Madrid"},"162":{"code":"Malaga","name":"Malaga"},"163":{"code":"Melilla","name":"Melilla"},"164":{"code":"Murcia","name":"Murcia"},"165":{"code":"Navarra","name":"Navarra"},"166":{"code":"Ourense","name":"Ourense"},"167":{"code":"Palencia","name":"Palencia"},"168":{"code":"Pontevedra","name":"Pontevedra"},"169":{"code":"Salamanca","name":"Salamanca"},"170":{"code":"Santa Cruz de Tenerife","name":"Santa Cruz de Tenerife"},"171":{"code":"Segovia","name":"Segovia"},"172":{"code":"Sevilla","name":"Sevilla"},"173":{"code":"Soria","name":"Soria"},"174":{"code":"Tarragona","name":"Tarragona"},"175":{"code":"Teruel","name":"Teruel"},"176":{"code":"Toledo","name":"Toledo"},"177":{"code":"Valencia","name":"Valencia"},"178":{"code":"Valladolid","name":"Valladolid"},"179":{"code":"Vizcaya","name":"Vizcaya"},"180":{"code":"Zamora","name":"Zamora"},"181":{"code":"Zaragoza","name":"Zaragoza"}}},"ET":{"name":"Ethiopia"},"FI":{"name":"Finland","regions":{"339":{"code":"Ahvenanmaa","name":"Ahvenanmaa"},"333":{"code":"Etel\u00e4-Karjala","name":"Etel\u00e4-Karjala"},"326":{"code":"Etel\u00e4-Pohjanmaa","name":"Etel\u00e4-Pohjanmaa"},"325":{"code":"Etel\u00e4-Savo","name":"Etel\u00e4-Savo"},"337":{"code":"It\u00e4-Uusimaa","name":"It\u00e4-Uusimaa"},"322":{"code":"Kainuu","name":"Kainuu"},"335":{"code":"Kanta-H\u00e4me","name":"Kanta-H\u00e4me"},"330":{"code":"Keski-Pohjanmaa","name":"Keski-Pohjanmaa"},"331":{"code":"Keski-Suomi","name":"Keski-Suomi"},"338":{"code":"Kymenlaakso","name":"Kymenlaakso"},"320":{"code":"Lappi","name":"Lappi"},"334":{"code":"P\u00e4ij\u00e4t-H\u00e4me","name":"P\u00e4ij\u00e4t-H\u00e4me"},"328":{"code":"Pirkanmaa","name":"Pirkanmaa"},"327":{"code":"Pohjanmaa","name":"Pohjanmaa"},"323":{"code":"Pohjois-Karjala","name":"Pohjois-Karjala"},"321":{"code":"Pohjois-Pohjanmaa","name":"Pohjois-Pohjanmaa"},"324":{"code":"Pohjois-Savo","name":"Pohjois-Savo"},"329":{"code":"Satakunta","name":"Satakunta"},"336":{"code":"Uusimaa","name":"Uusimaa"},"332":{"code":"Varsinais-Suomi","name":"Varsinais-Suomi"}}},"FJ":{"name":"Fiji"},"FK":{"name":"Falkland Islands"},"FM":{"name":"Micronesia"},"FO":{"name":"Faroe Islands"},"FR":{"name":"France","regions":{"182":{"code":"1","name":"Ain"},"183":{"code":"2","name":"Aisne"},"184":{"code":"3","name":"Allier"},"185":{"code":"4","name":"Alpes-de-Haute-Provence"},"187":{"code":"6","name":"Alpes-Maritimes"},"188":{"code":"7","name":"Ard\u00e8che"},"189":{"code":"8","name":"Ardennes"},"190":{"code":"9","name":"Ari\u00e8ge"},"191":{"code":"10","name":"Aube"},"192":{"code":"11","name":"Aude"},"193":{"code":"12","name":"Aveyron"},"249":{"code":"67","name":"Bas-Rhin"},"194":{"code":"13","name":"Bouches-du-Rh\u00f4ne"},"195":{"code":"14","name":"Calvados"},"196":{"code":"15","name":"Cantal"},"197":{"code":"16","name":"Charente"},"198":{"code":"17","name":"Charente-Maritime"},"199":{"code":"18","name":"Cher"},"200":{"code":"19","name":"Corr\u00e8ze"},"201":{"code":"2A","name":"Corse-du-Sud"},"203":{"code":"21","name":"C\u00f4te-d'Or"},"204":{"code":"22","name":"C\u00f4tes-d'Armor"},"205":{"code":"23","name":"Creuse"},"261":{"code":"79","name":"Deux-S\u00e8vres"},"206":{"code":"24","name":"Dordogne"},"207":{"code":"25","name":"Doubs"},"208":{"code":"26","name":"Dr\u00f4me"},"273":{"code":"91","name":"Essonne"},"209":{"code":"27","name":"Eure"},"210":{"code":"28","name":"Eure-et-Loir"},"211":{"code":"29","name":"Finist\u00e8re"},"212":{"code":"30","name":"Gard"},"214":{"code":"32","name":"Gers"},"215":{"code":"33","name":"Gironde"},"250":{"code":"68","name":"Haut-Rhin"},"202":{"code":"2B","name":"Haute-Corse"},"213":{"code":"31","name":"Haute-Garonne"},"225":{"code":"43","name":"Haute-Loire"},"234":{"code":"52","name":"Haute-Marne"},"252":{"code":"70","name":"Haute-Sa\u00f4ne"},"256":{"code":"74","name":"Haute-Savoie"},"269":{"code":"87","name":"Haute-Vienne"},"186":{"code":"5","name":"Hautes-Alpes"},"247":{"code":"65","name":"Hautes-Pyr\u00e9n\u00e9es"},"274":{"code":"92","name":"Hauts-de-Seine"},"216":{"code":"34","name":"H\u00e9rault"},"217":{"code":"35","name":"Ille-et-Vilaine"},"218":{"code":"36","name":"Indre"},"219":{"code":"37","name":"Indre-et-Loire"},"220":{"code":"38","name":"Is\u00e8re"},"221":{"code":"39","name":"Jura"},"222":{"code":"40","name":"Landes"},"223":{"code":"41","name":"Loir-et-Cher"},"224":{"code":"42","name":"Loire"},"226":{"code":"44","name":"Loire-Atlantique"},"227":{"code":"45","name":"Loiret"},"228":{"code":"46","name":"Lot"},"229":{"code":"47","name":"Lot-et-Garonne"},"230":{"code":"48","name":"Loz\u00e8re"},"231":{"code":"49","name":"Maine-et-Loire"},"232":{"code":"50","name":"Manche"},"233":{"code":"51","name":"Marne"},"235":{"code":"53","name":"Mayenne"},"236":{"code":"54","name":"Meurthe-et-Moselle"},"237":{"code":"55","name":"Meuse"},"238":{"code":"56","name":"Morbihan"},"239":{"code":"57","name":"Moselle"},"240":{"code":"58","name":"Ni\u00e8vre"},"241":{"code":"59","name":"Nord"},"242":{"code":"60","name":"Oise"},"243":{"code":"61","name":"Orne"},"257":{"code":"75","name":"Paris"},"244":{"code":"62","name":"Pas-de-Calais"},"245":{"code":"63","name":"Puy-de-D\u00f4me"},"246":{"code":"64","name":"Pyr\u00e9n\u00e9es-Atlantiques"},"248":{"code":"66","name":"Pyr\u00e9n\u00e9es-Orientales"},"251":{"code":"69","name":"Rh\u00f4ne"},"253":{"code":"71","name":"Sa\u00f4ne-et-Loire"},"254":{"code":"72","name":"Sarthe"},"255":{"code":"73","name":"Savoie"},"259":{"code":"77","name":"Seine-et-Marne"},"258":{"code":"76","name":"Seine-Maritime"},"275":{"code":"93","name":"Seine-Saint-Denis"},"262":{"code":"80","name":"Somme"},"263":{"code":"81","name":"Tarn"},"264":{"code":"82","name":"Tarn-et-Garonne"},"272":{"code":"90","name":"Territoire-de-Belfort"},"277":{"code":"95","name":"Val-d'Oise"},"276":{"code":"94","name":"Val-de-Marne"},"265":{"code":"83","name":"Var"},"266":{"code":"84","name":"Vaucluse"},"267":{"code":"85","name":"Vend\u00e9e"},"268":{"code":"86","name":"Vienne"},"270":{"code":"88","name":"Vosges"},"271":{"code":"89","name":"Yonne"},"260":{"code":"78","name":"Yvelines"}}},"GA":{"name":"Gabon"},"GB":{"name":"United Kingdom"},"GD":{"name":"Grenada"},"GE":{"name":"Georgia"},"GF":{"name":"French Guiana"},"GG":{"name":"Guernsey"},"GH":{"name":"Ghana"},"GI":{"name":"Gibraltar"},"GL":{"name":"Greenland"},"GM":{"name":"Gambia"},"GN":{"name":"Guinea"},"GP":{"name":"Guadeloupe"},"GQ":{"name":"Equatorial Guinea"},"GR":{"name":"Greece","regions":{"878":{"code":"GR-69","name":"\u00c1gion \u00d3ros"},"839":{"code":"GR-A","name":"Anatolik\u00ed Makedon\u00eda kai Thr\u00e1ki"},"842":{"code":"GR-I","name":"Attik\u00ed"},"845":{"code":"GR-G","name":"Dytik\u00ed Ell\u00e1da"},"848":{"code":"GR-C","name":"Dytik\u00ed Makedon\u00eda"},"851":{"code":"GR-F","name":"Ion\u00eda N\u00edsia"},"854":{"code":"GR-D","name":"\u00cdpeiros"},"857":{"code":"GR-B","name":"Kentrik\u00ed Makedon\u00eda"},"860":{"code":"GR-M","name":"Kr\u00edti"},"863":{"code":"GR-L","name":"N\u00f3tio Aiga\u00edo"},"866":{"code":"GR-J","name":"Pelop\u00f3nnisos"},"869":{"code":"GR-H","name":"Stere\u00e1 Ell\u00e1da"},"872":{"code":"GR-E","name":"Thessal\u00eda"},"875":{"code":"GR-K","name":"V\u00f3reio Aiga\u00edo"}}},"GS":{"name":"South Georgia & South Sandwich Islands"},"GT":{"name":"Guatemala"},"GU":{"name":"Guam"},"GW":{"name":"Guinea-Bissau"},"GY":{"name":"Guyana","regions":{"881":{"code":"GY-BA","name":"Barima-Waini"},"884":{"code":"GY-CU","name":"Cuyuni-Mazaruni"},"887":{"code":"GY-DE","name":"Demerara-Mahaica"},"890":{"code":"GY-EB","name":"East Berbice-Corentyne"},"893":{"code":"GY-ES","name":"Essequibo Islands-West Demerara"},"896":{"code":"GY-MA","name":"Mahaica-Berbice"},"899":{"code":"GY-PM","name":"Pomeroon-Supenaam"},"902":{"code":"GY-PT","name":"Potaro-Siparuni"},"905":{"code":"GY-UD","name":"Upper Demerara-Berbice"},"908":{"code":"GY-UT","name":"Upper Takutu-Upper Essequibo"}}},"HK":{"name":"Hong Kong SAR China"},"HM":{"name":"Heard & McDonald Islands"},"HN":{"name":"Honduras"},"HR":{"name":"Croatia"},"HT":{"name":"Haiti"},"HU":{"name":"Hungary"},"ID":{"name":"Indonesia"},"IE":{"name":"Ireland"},"IL":{"name":"Israel"},"IM":{"name":"Isle of Man"},"IN":{"name":"India"},"IO":{"name":"British Indian Ocean Territory"},"IQ":{"name":"Iraq"},"IS":{"name":"Iceland","regions":{"929":{"code":"IS-07","name":"Austurland"},"911":{"code":"IS-01","name":"H\u00f6fu\u00f0borgarsv\u00e6\u00f0i"},"926":{"code":"IS-06","name":"Nor\u00f0urland eystra"},"923":{"code":"IS-05","name":"Nor\u00f0urland vestra"},"932":{"code":"IS-08","name":"Su\u00f0urland"},"914":{"code":"IS-02","name":"Su\u00f0urnes"},"920":{"code":"IS-04","name":"Vestfir\u00f0ir"},"917":{"code":"IS-03","name":"Vesturland"}}},"IT":{"name":"Italy","regions":{"935":{"code":"AG","name":"Agrigento"},"938":{"code":"AL","name":"Alessandria"},"941":{"code":"AN","name":"Ancona"},"944":{"code":"AO","name":"Aosta"},"950":{"code":"AR","name":"Arezzo"},"953":{"code":"AP","name":"Ascoli-Piceno"},"956":{"code":"AT","name":"Asti"},"959":{"code":"AV","name":"Avellino"},"962":{"code":"BA","name":"Bari"},"965":{"code":"BT","name":"Barletta-Andria-Trani"},"968":{"code":"BL","name":"Belluno"},"971":{"code":"BN","name":"Benevento"},"974":{"code":"BG","name":"Bergamo"},"977":{"code":"BI","name":"Biella"},"980":{"code":"BO","name":"Bologna"},"983":{"code":"BZ","name":"Bolzano"},"986":{"code":"BS","name":"Brescia"},"989":{"code":"BR","name":"Brindisi"},"992":{"code":"CA","name":"Cagliari"},"995":{"code":"CL","name":"Caltanissetta"},"998":{"code":"CB","name":"Campobasso"},"1001":{"code":"CI","name":"Carbonia Iglesias"},"1004":{"code":"CE","name":"Caserta"},"1007":{"code":"CT","name":"Catania"},"1010":{"code":"CZ","name":"Catanzaro"},"1013":{"code":"CH","name":"Chieti"},"1016":{"code":"CO","name":"Como"},"1019":{"code":"CS","name":"Cosenza"},"1022":{"code":"CR","name":"Cremona"},"1025":{"code":"KR","name":"Crotone"},"1028":{"code":"CN","name":"Cuneo"},"1031":{"code":"EN","name":"Enna"},"1034":{"code":"FM","name":"Fermo"},"1037":{"code":"FE","name":"Ferrara"},"1040":{"code":"FI","name":"Firenze"},"1043":{"code":"FG","name":"Foggia"},"1046":{"code":"FC","name":"Forli-Cesena"},"1049":{"code":"FR","name":"Frosinone"},"1052":{"code":"GE","name":"Genova"},"1055":{"code":"GO","name":"Gorizia"},"1058":{"code":"GR","name":"Grosseto"},"1061":{"code":"IM","name":"Imperia"},"1064":{"code":"IS","name":"Isernia"},"947":{"code":"AQ","name":"L'Aquila"},"1067":{"code":"SP","name":"La-Spezia"},"1070":{"code":"LT","name":"Latina"},"1073":{"code":"LE","name":"Lecce"},"1076":{"code":"LC","name":"Lecco"},"1079":{"code":"LI","name":"Livorno"},"1082":{"code":"LO","name":"Lodi"},"1085":{"code":"LU","name":"Lucca"},"1088":{"code":"MC","name":"Macerata"},"1091":{"code":"MN","name":"Mantova"},"1094":{"code":"MS","name":"Massa-Carrara"},"1097":{"code":"MT","name":"Matera"},"1100":{"code":"VS","name":"Medio Campidano"},"1103":{"code":"ME","name":"Messina"},"1106":{"code":"MI","name":"Milano"},"1109":{"code":"MO","name":"Modena"},"1112":{"code":"MB","name":"Monza-Brianza"},"1115":{"code":"NA","name":"Napoli"},"1118":{"code":"NO","name":"Novara"},"1121":{"code":"NU","name":"Nuoro"},"1124":{"code":"OG","name":"Ogliastra"},"1127":{"code":"OT","name":"Olbia Tempio"},"1130":{"code":"OR","name":"Oristano"},"1133":{"code":"PD","name":"Padova"},"1136":{"code":"PA","name":"Palermo"},"1139":{"code":"PR","name":"Parma"},"1142":{"code":"PV","name":"Pavia"},"1145":{"code":"PG","name":"Perugia"},"1148":{"code":"PU","name":"Pesaro-Urbino"},"1151":{"code":"PE","name":"Pescara"},"1154":{"code":"PC","name":"Piacenza"},"1157":{"code":"PI","name":"Pisa"},"1160":{"code":"PT","name":"Pistoia"},"1163":{"code":"PN","name":"Pordenone"},"1166":{"code":"PZ","name":"Potenza"},"1169":{"code":"PO","name":"Prato"},"1172":{"code":"RG","name":"Ragusa"},"1175":{"code":"RA","name":"Ravenna"},"1178":{"code":"RC","name":"Reggio-Calabria"},"1181":{"code":"RE","name":"Reggio-Emilia"},"1184":{"code":"RI","name":"Rieti"},"1187":{"code":"RN","name":"Rimini"},"1190":{"code":"RM","name":"Roma"},"1193":{"code":"RO","name":"Rovigo"},"1196":{"code":"SA","name":"Salerno"},"1199":{"code":"SS","name":"Sassari"},"1202":{"code":"SV","name":"Savona"},"1205":{"code":"SI","name":"Siena"},"1208":{"code":"SR","name":"Siracusa"},"1211":{"code":"SO","name":"Sondrio"},"1214":{"code":"TA","name":"Taranto"},"1217":{"code":"TE","name":"Teramo"},"1220":{"code":"TR","name":"Terni"},"1223":{"code":"TO","name":"Torino"},"1226":{"code":"TP","name":"Trapani"},"1229":{"code":"TN","name":"Trento"},"1232":{"code":"TV","name":"Treviso"},"1235":{"code":"TS","name":"Trieste"},"1238":{"code":"UD","name":"Udine"},"1241":{"code":"VA","name":"Varese"},"1244":{"code":"VE","name":"Venezia"},"1247":{"code":"VB","name":"Verbania"},"1250":{"code":"VC","name":"Vercelli"},"1253":{"code":"VR","name":"Verona"},"1256":{"code":"VV","name":"Vibo-Valentia"},"1259":{"code":"VI","name":"Vicenza"},"1262":{"code":"VT","name":"Viterbo"}}},"JE":{"name":"Jersey"},"JM":{"name":"Jamaica"},"JO":{"name":"Jordan"},"JP":{"name":"Japan"},"KE":{"name":"Kenya"},"KG":{"name":"Kyrgyzstan"},"KH":{"name":"Cambodia"},"KI":{"name":"Kiribati"},"KM":{"name":"Comoros"},"KN":{"name":"St. Kitts & Nevis"},"KR":{"name":"South Korea"},"KW":{"name":"Kuwait"},"KY":{"name":"Cayman Islands"},"KZ":{"name":"Kazakhstan"},"LA":{"name":"Laos"},"LB":{"name":"Lebanon"},"LC":{"name":"St. Lucia"},"LI":{"name":"Liechtenstein"},"LK":{"name":"Sri Lanka"},"LR":{"name":"Liberia"},"LS":{"name":"Lesotho"},"LT":{"name":"Lithuania","regions":{"475":{"code":"LT-AL","name":"Alytaus Apskritis"},"476":{"code":"LT-KU","name":"Kauno Apskritis"},"477":{"code":"LT-KL","name":"Klaip\u0117dos Apskritis"},"478":{"code":"LT-MR","name":"Marijampol\u0117s Apskritis"},"479":{"code":"LT-PN","name":"Panev\u0117\u017eio Apskritis"},"480":{"code":"LT-SA","name":"\u0160iauli\u0173 Apskritis"},"481":{"code":"LT-TA","name":"Taurag\u0117s Apskritis"},"482":{"code":"LT-TE","name":"Tel\u0161i\u0173 Apskritis"},"483":{"code":"LT-UT","name":"Utenos Apskritis"},"484":{"code":"LT-VL","name":"Vilniaus Apskritis"}}},"LU":{"name":"Luxembourg"},"LV":{"name":"Latvia","regions":{"471":{"code":"\u0100da\u017eu novads","name":"\u0100da\u017eu novads"},"366":{"code":"Aglonas novads","name":"Aglonas novads"},"367":{"code":"LV-AI","name":"Aizkraukles novads"},"368":{"code":"Aizputes novads","name":"Aizputes novads"},"369":{"code":"Akn\u012bstes novads","name":"Akn\u012bstes novads"},"370":{"code":"Alojas novads","name":"Alojas novads"},"371":{"code":"Alsungas novads","name":"Alsungas novads"},"372":{"code":"LV-AL","name":"Al\u016bksnes novads"},"373":{"code":"Amatas novads","name":"Amatas novads"},"374":{"code":"Apes novads","name":"Apes novads"},"375":{"code":"Auces novads","name":"Auces novads"},"376":{"code":"Bab\u012btes novads","name":"Bab\u012btes novads"},"377":{"code":"Baldones novads","name":"Baldones novads"},"378":{"code":"Baltinavas novads","name":"Baltinavas novads"},"379":{"code":"LV-BL","name":"Balvu novads"},"380":{"code":"LV-BU","name":"Bauskas novads"},"381":{"code":"Bever\u012bnas novads","name":"Bever\u012bnas novads"},"382":{"code":"Broc\u0113nu novads","name":"Broc\u0113nu novads"},"383":{"code":"Burtnieku novads","name":"Burtnieku novads"},"384":{"code":"Carnikavas novads","name":"Carnikavas novads"},"387":{"code":"LV-CE","name":"C\u0113su novads"},"385":{"code":"Cesvaines novads","name":"Cesvaines novads"},"386":{"code":"Ciblas novads","name":"Ciblas novads"},"388":{"code":"Dagdas novads","name":"Dagdas novads"},"355":{"code":"LV-DGV","name":"Daugavpils"},"389":{"code":"LV-DA","name":"Daugavpils novads"},"390":{"code":"LV-DO","name":"Dobeles novads"},"391":{"code":"Dundagas novads","name":"Dundagas novads"},"392":{"code":"Durbes novads","name":"Durbes novads"},"393":{"code":"Engures novads","name":"Engures novads"},"472":{"code":"\u0112rg\u013cu novads","name":"\u0112rg\u013cu novads"},"394":{"code":"Garkalnes novads","name":"Garkalnes novads"},"395":{"code":"Grobi\u0146as novads","name":"Grobi\u0146as novads"},"396":{"code":"LV-GU","name":"Gulbenes novads"},"397":{"code":"Iecavas novads","name":"Iecavas novads"},"398":{"code":"Ik\u0161\u0137iles novads","name":"Ik\u0161\u0137iles novads"},"399":{"code":"Il\u016bkstes novads","name":"Il\u016bkstes novads"},"400":{"code":"In\u010dukalna novads","name":"In\u010dukalna novads"},"401":{"code":"Jaunjelgavas novads","name":"Jaunjelgavas novads"},"402":{"code":"Jaunpiebalgas novads","name":"Jaunpiebalgas novads"},"403":{"code":"Jaunpils novads","name":"Jaunpils novads"},"357":{"code":"J\u0113kabpils","name":"J\u0113kabpils"},"405":{"code":"LV-JK","name":"J\u0113kabpils novads"},"356":{"code":"LV-JEL","name":"Jelgava"},"404":{"code":"LV-JL","name":"Jelgavas novads"},"358":{"code":"LV-JUR","name":"J\u016brmala"},"406":{"code":"Kandavas novads","name":"Kandavas novads"},"412":{"code":"K\u0101rsavas novads","name":"K\u0101rsavas novads"},"473":{"code":"\u0136eguma novads","name":"\u0136eguma novads"},"474":{"code":"\u0136ekavas novads","name":"\u0136ekavas novads"},"407":{"code":"Kokneses novads","name":"Kokneses novads"},"410":{"code":"LV-KR","name":"Kr\u0101slavas novads"},"408":{"code":"Krimuldas novads","name":"Krimuldas novads"},"409":{"code":"Krustpils novads","name":"Krustpils novads"},"411":{"code":"LV-KU","name":"Kuld\u012bgas novads"},"413":{"code":"Lielv\u0101rdes novads","name":"Lielv\u0101rdes novads"},"359":{"code":"LV-LPX","name":"Liep\u0101ja"},"360":{"code":"LV-LE","name":"Liep\u0101jas novads"},"417":{"code":"L\u012bgatnes novads","name":"L\u012bgatnes novads"},"414":{"code":"LV-LM","name":"Limba\u017eu novads"},"418":{"code":"L\u012bv\u0101nu novads","name":"L\u012bv\u0101nu novads"},"415":{"code":"Lub\u0101nas novads","name":"Lub\u0101nas novads"},"416":{"code":"LV-LU","name":"Ludzas novads"},"419":{"code":"LV-MA","name":"Madonas novads"},"421":{"code":"M\u0101lpils novads","name":"M\u0101lpils novads"},"422":{"code":"M\u0101rupes novads","name":"M\u0101rupes novads"},"420":{"code":"Mazsalacas novads","name":"Mazsalacas novads"},"423":{"code":"Nauk\u0161\u0113nu novads","name":"Nauk\u0161\u0113nu novads"},"424":{"code":"Neretas novads","name":"Neretas novads"},"425":{"code":"N\u012bcas novads","name":"N\u012bcas novads"},"426":{"code":"LV-OG","name":"Ogres novads"},"427":{"code":"Olaines novads","name":"Olaines novads"},"428":{"code":"Ozolnieku novads","name":"Ozolnieku novads"},"432":{"code":"P\u0101rgaujas novads","name":"P\u0101rgaujas novads"},"433":{"code":"P\u0101vilostas novads","name":"P\u0101vilostas novads"},"434":{"code":"P\u013cavi\u0146u novads","name":"P\u013cavi\u0146u novads"},"429":{"code":"LV-PR","name":"Prei\u013cu novads"},"430":{"code":"Priekules novads","name":"Priekules novads"},"431":{"code":"Prieku\u013cu novads","name":"Prieku\u013cu novads"},"435":{"code":"Raunas novads","name":"Raunas novads"},"361":{"code":"LV-REZ","name":"R\u0113zekne"},"442":{"code":"LV-RE","name":"R\u0113zeknes novads"},"436":{"code":"Riebi\u0146u novads","name":"Riebi\u0146u novads"},"362":{"code":"LV-RIX","name":"R\u012bga"},"363":{"code":"LV-RI","name":"R\u012bgas novads"},"437":{"code":"Rojas novads","name":"Rojas novads"},"438":{"code":"Ropa\u017eu novads","name":"Ropa\u017eu novads"},"439":{"code":"Rucavas novads","name":"Rucavas novads"},"440":{"code":"Rug\u0101ju novads","name":"Rug\u0101ju novads"},"443":{"code":"R\u016bjienas novads","name":"R\u016bjienas novads"},"441":{"code":"Rund\u0101les novads","name":"Rund\u0101les novads"},"444":{"code":"Salacgr\u012bvas novads","name":"Salacgr\u012bvas novads"},"445":{"code":"Salas novads","name":"Salas novads"},"446":{"code":"Salaspils novads","name":"Salaspils novads"},"447":{"code":"LV-SA","name":"Saldus novads"},"448":{"code":"Saulkrastu novads","name":"Saulkrastu novads"},"455":{"code":"S\u0113jas novads","name":"S\u0113jas novads"},"449":{"code":"Siguldas novads","name":"Siguldas novads"},"451":{"code":"Skr\u012bveru novads","name":"Skr\u012bveru novads"},"450":{"code":"Skrundas novads","name":"Skrundas novads"},"452":{"code":"Smiltenes novads","name":"Smiltenes novads"},"453":{"code":"Stopi\u0146u novads","name":"Stopi\u0146u novads"},"454":{"code":"Stren\u010du novads","name":"Stren\u010du novads"},"456":{"code":"LV-TA","name":"Talsu novads"},"458":{"code":"T\u0113rvetes novads","name":"T\u0113rvetes novads"},"457":{"code":"LV-TU","name":"Tukuma novads"},"459":{"code":"Vai\u0146odes novads","name":"Vai\u0146odes novads"},"460":{"code":"LV-VK","name":"Valkas novads"},"364":{"code":"Valmiera","name":"Valmiera"},"461":{"code":"LV-VM","name":"Valmieras novads"},"462":{"code":"Varak\u013c\u0101nu novads","name":"Varak\u013c\u0101nu novads"},"469":{"code":"V\u0101rkavas novads","name":"V\u0101rkavas novads"},"463":{"code":"Vecpiebalgas novads","name":"Vecpiebalgas novads"},"464":{"code":"Vecumnieku novads","name":"Vecumnieku novads"},"365":{"code":"LV-VEN","name":"Ventspils"},"465":{"code":"LV-VE","name":"Ventspils novads"},"466":{"code":"Vies\u012btes novads","name":"Vies\u012btes novads"},"467":{"code":"Vi\u013cakas novads","name":"Vi\u013cakas novads"},"468":{"code":"Vi\u013c\u0101nu novads","name":"Vi\u013c\u0101nu novads"},"470":{"code":"Zilupes novads","name":"Zilupes novads"}}},"MA":{"name":"Morocco"},"MC":{"name":"Monaco"},"MD":{"name":"Moldova"},"ME":{"name":"Montenegro"},"MF":{"name":"St. Martin"},"MG":{"name":"Madagascar"},"MH":{"name":"Marshall Islands"},"MK":{"name":"Macedonia"},"ML":{"name":"Mali"},"MM":{"name":"Myanmar (Burma)"},"MN":{"name":"Mongolia"},"MO":{"name":"Macau SAR China"},"MP":{"name":"Northern Mariana Islands"},"MQ":{"name":"Martinique"},"MR":{"name":"Mauritania"},"MS":{"name":"Montserrat"},"MT":{"name":"Malta"},"MU":{"name":"Mauritius"},"MV":{"name":"Maldives"},"MW":{"name":"Malawi"},"MX":{"name":"Mexico"},"MY":{"name":"Malaysia"},"MZ":{"name":"Mozambique"},"NA":{"name":"Namibia"},"NC":{"name":"New Caledonia"},"NE":{"name":"Niger"},"NF":{"name":"Norfolk Island"},"NG":{"name":"Nigeria"},"NI":{"name":"Nicaragua"},"NL":{"name":"Netherlands"},"NO":{"name":"Norway"},"NP":{"name":"Nepal"},"NR":{"name":"Nauru"},"NU":{"name":"Niue"},"NZ":{"name":"New Zealand"},"OM":{"name":"Oman"},"PA":{"name":"Panama"},"PE":{"name":"Peru","regions":{"1322":{"code":"PE-AMA","name":"Amazonas"},"1325":{"code":"PE-ANC","name":"Ancash"},"1328":{"code":"PE-APU","name":"Apur\u00edmac"},"1331":{"code":"PE-ARE","name":"Arequipa"},"1334":{"code":"PE-AYA","name":"Ayacucho"},"1337":{"code":"PE-CAJ","name":"Cajamarca"},"1340":{"code":"PE-CUS","name":"Cusco"},"1343":{"code":"PE-CAL","name":"El Callao"},"1346":{"code":"PE-HUV","name":"Huancavelica"},"1349":{"code":"PE-HUC","name":"Hu\u00e1nuco"},"1352":{"code":"PE-ICA","name":"Ica"},"1355":{"code":"PE-JUN","name":"Jun\u00edn"},"1358":{"code":"PE-LAL","name":"La Libertad"},"1361":{"code":"PE-LAM","name":"Lambayeque"},"1364":{"code":"PE-LIM","name":"Lima"},"1367":{"code":"PE-LOR","name":"Loreto"},"1370":{"code":"PE-MDD","name":"Madre de Dios"},"1373":{"code":"PE-MOQ","name":"Moquegua"},"1319":{"code":"PE-LMA","name":"Municipalidad Metropolitana de Lima"},"1376":{"code":"PE-PAS","name":"Pasco"},"1379":{"code":"PE-PIU","name":"Piura"},"1382":{"code":"PE-PUN","name":"Puno"},"1385":{"code":"PE-SAM","name":"San Mart\u00edn"},"1388":{"code":"PE-TAC","name":"Tacna"},"1391":{"code":"PE-TUM","name":"Tumbes"},"1394":{"code":"PE-UCA","name":"Ucayali"}}},"PF":{"name":"French Polynesia"},"PG":{"name":"Papua New Guinea"},"PH":{"name":"Philippines"},"PK":{"name":"Pakistan"},"PL":{"name":"Poland"},"PM":{"name":"St. Pierre & Miquelon"},"PN":{"name":"Pitcairn Islands"},"PR":{"name":"Puerto Rico"},"PS":{"name":"Palestinian Territories"},"PT":{"name":"Portugal","regions":{"1397":{"code":"PT-01","name":"Aveiro"},"1400":{"code":"PT-02","name":"Beja"},"1403":{"code":"PT-03","name":"Braga"},"1406":{"code":"PT-04","name":"Bragan\u00e7a"},"1409":{"code":"PT-05","name":"Castelo Branco"},"1412":{"code":"PT-06","name":"Coimbra"},"1415":{"code":"PT-07","name":"\u00c9vora"},"1418":{"code":"PT-08","name":"Faro"},"1421":{"code":"PT-09","name":"Guarda"},"1424":{"code":"PT-10","name":"Leiria"},"1427":{"code":"PT-11","name":"Lisboa"},"1430":{"code":"PT-12","name":"Portalegre"},"1433":{"code":"PT-13","name":"Porto"},"1454":{"code":"PT-30","name":"Regi\u00e3o Aut\u00f3noma da Madeira"},"1451":{"code":"PT-20","name":"Regi\u00e3o Aut\u00f3noma dos A\u00e7ores"},"1436":{"code":"PT-14","name":"Santar\u00e9m"},"1439":{"code":"PT-15","name":"Set\u00fabal"},"1442":{"code":"PT-16","name":"Viana do Castelo"},"1445":{"code":"PT-17","name":"Vila Real"},"1448":{"code":"PT-18","name":"Viseu"}}},"PW":{"name":"Palau"},"PY":{"name":"Paraguay","regions":{"1268":{"code":"PY-16","name":"Alto Paraguay"},"1271":{"code":"PY-10","name":"Alto Paran\u00e1"},"1274":{"code":"PY-13","name":"Amambay"},"1265":{"code":"PY-ASU","name":"Asunci\u00f3n"},"1277":{"code":"PY-19","name":"Boquer\u00f3n"},"1280":{"code":"PY-5","name":"Caaguaz\u00fa"},"1283":{"code":"PY-6","name":"Caazap\u00e1"},"1286":{"code":"PY-14","name":"Canindey\u00fa"},"1289":{"code":"PY-11","name":"Central"},"1292":{"code":"PY-1","name":"Concepci\u00f3n"},"1295":{"code":"PY-3","name":"Cordillera"},"1298":{"code":"PY-4","name":"Guair\u00e1"},"1301":{"code":"PY-7","name":"Itap\u00faa"},"1304":{"code":"PY-8","name":"Misiones"},"1307":{"code":"PY-12","name":"\u00d1eembuc\u00fa"},"1310":{"code":"PY-9","name":"Paraguar\u00ed"},"1313":{"code":"PY-15","name":"Presidente Hayes"},"1316":{"code":"PY-2","name":"San Pedro"}}},"QA":{"name":"Qatar"},"RE":{"name":"R\u00e9union"},"RO":{"name":"Romania","regions":{"278":{"code":"AB","name":"Alba"},"279":{"code":"AR","name":"Arad"},"280":{"code":"AG","name":"Arge\u015f"},"281":{"code":"BC","name":"Bac\u0103u"},"282":{"code":"BH","name":"Bihor"},"283":{"code":"BN","name":"Bistri\u0163a-N\u0103s\u0103ud"},"284":{"code":"BT","name":"Boto\u015fani"},"286":{"code":"BR","name":"Br\u0103ila"},"285":{"code":"BV","name":"Bra\u015fov"},"287":{"code":"B","name":"Bucure\u015fti"},"288":{"code":"BZ","name":"Buz\u0103u"},"290":{"code":"CL","name":"C\u0103l\u0103ra\u015fi"},"289":{"code":"CS","name":"Cara\u015f-Severin"},"291":{"code":"CJ","name":"Cluj"},"292":{"code":"CT","name":"Constan\u0163a"},"293":{"code":"CV","name":"Covasna"},"294":{"code":"DB","name":"D\u00e2mbovi\u0163a"},"295":{"code":"DJ","name":"Dolj"},"296":{"code":"GL","name":"Gala\u0163i"},"297":{"code":"GR","name":"Giurgiu"},"298":{"code":"GJ","name":"Gorj"},"299":{"code":"HR","name":"Harghita"},"300":{"code":"HD","name":"Hunedoara"},"301":{"code":"IL","name":"Ialomi\u0163a"},"302":{"code":"IS","name":"Ia\u015fi"},"303":{"code":"IF","name":"Ilfov"},"304":{"code":"MM","name":"Maramure\u015f"},"305":{"code":"MH","name":"Mehedin\u0163i"},"306":{"code":"MS","name":"Mure\u015f"},"307":{"code":"NT","name":"Neam\u0163"},"308":{"code":"OT","name":"Olt"},"309":{"code":"PH","name":"Prahova"},"311":{"code":"SJ","name":"S\u0103laj"},"310":{"code":"SM","name":"Satu-Mare"},"312":{"code":"SB","name":"Sibiu"},"313":{"code":"SV","name":"Suceava"},"314":{"code":"TR","name":"Teleorman"},"315":{"code":"TM","name":"Timi\u015f"},"316":{"code":"TL","name":"Tulcea"},"318":{"code":"VL","name":"V\u00e2lcea"},"317":{"code":"VS","name":"Vaslui"},"319":{"code":"VN","name":"Vrancea"}}},"RS":{"name":"Serbia"},"RU":{"name":"Russia"},"RW":{"name":"Rwanda"},"SA":{"name":"Saudi Arabia"},"SB":{"name":"Solomon Islands"},"SC":{"name":"Seychelles"},"SE":{"name":"Sweden","regions":{"1487":{"code":"SE-K","name":"Blekinge l\u00e4n"},"1490":{"code":"SE-W","name":"Dalarnas l\u00e4n"},"1496":{"code":"SE-X","name":"G\u00e4vleborgs l\u00e4n"},"1493":{"code":"SE-I","name":"Gotlands l\u00e4n"},"1499":{"code":"SE-N","name":"Hallands l\u00e4n"},"1502":{"code":"SE-Z","name":"J\u00e4mtlands l\u00e4n"},"1505":{"code":"SE-F","name":"J\u00f6nk\u00f6pings l\u00e4n"},"1508":{"code":"SE-H","name":"Kalmar l\u00e4n"},"1511":{"code":"SE-G","name":"Kronobergs l\u00e4n"},"1514":{"code":"SE-BD","name":"Norrbottens l\u00e4n"},"1544":{"code":"SE-T","name":"\u00d6rebro l\u00e4n"},"1547":{"code":"SE-E","name":"\u00d6sterg\u00f6tlands l\u00e4n"},"1517":{"code":"SE-M","name":"Sk\u00e5ne l\u00e4n"},"1523":{"code":"SE-D","name":"S\u00f6dermanlands l\u00e4n"},"1520":{"code":"SE-AB","name":"Stockholms l\u00e4n"},"1526":{"code":"SE-C","name":"Uppsala l\u00e4n"},"1529":{"code":"SE-S","name":"V\u00e4rmlands l\u00e4n"},"1532":{"code":"SE-AC","name":"V\u00e4sterbottens l\u00e4n"},"1535":{"code":"SE-Y","name":"V\u00e4sternorrlands l\u00e4n"},"1538":{"code":"SE-U","name":"V\u00e4stmanlands l\u00e4n"},"1541":{"code":"SE-O","name":"V\u00e4stra G\u00f6talands l\u00e4n"}}},"SG":{"name":"Singapore"},"SH":{"name":"St. Helena"},"SI":{"name":"Slovenia"},"SJ":{"name":"Svalbard & Jan Mayen"},"SK":{"name":"Slovakia"},"SL":{"name":"Sierra Leone"},"SM":{"name":"San Marino"},"SN":{"name":"Senegal"},"SO":{"name":"Somalia"},"SR":{"name":"Suriname","regions":{"1457":{"code":"SR-BR","name":"Brokopondo"},"1460":{"code":"SR-CM","name":"Commewijne"},"1463":{"code":"SR-CR","name":"Coronie"},"1466":{"code":"SR-MA","name":"Marowijne"},"1469":{"code":"SR-NI","name":"Nickerie"},"1472":{"code":"SR-PR","name":"Para"},"1475":{"code":"SR-PM","name":"Paramaribo"},"1478":{"code":"SR-SA","name":"Saramacca"},"1481":{"code":"SR-SI","name":"Sipaliwini"},"1484":{"code":"SR-WA","name":"Wanica"}}},"ST":{"name":"S\u00e3o Tom\u00e9 & Pr\u00edncipe"},"SV":{"name":"El Salvador"},"SZ":{"name":"Swaziland"},"TC":{"name":"Turks & Caicos Islands"},"TD":{"name":"Chad"},"TF":{"name":"French Southern Territories"},"TG":{"name":"Togo"},"TH":{"name":"Thailand"},"TJ":{"name":"Tajikistan"},"TK":{"name":"Tokelau"},"TL":{"name":"Timor-Leste"},"TM":{"name":"Turkmenistan"},"TN":{"name":"Tunisia"},"TO":{"name":"Tonga"},"TR":{"name":"Turkey"},"TT":{"name":"Trinidad & Tobago"},"TV":{"name":"Tuvalu"},"TW":{"name":"Taiwan"},"TZ":{"name":"Tanzania"},"UA":{"name":"Ukraine"},"UG":{"name":"Uganda"},"UM":{"name":"U.S. Outlying Islands"},"US":{"name":"United States","regions":{"1":{"code":"AL","name":"Alabama"},"2":{"code":"AK","name":"Alaska"},"3":{"code":"AS","name":"American Samoa"},"4":{"code":"AZ","name":"Arizona"},"5":{"code":"AR","name":"Arkansas"},"6":{"code":"AF","name":"Armed Forces Africa"},"7":{"code":"AA","name":"Armed Forces Americas"},"8":{"code":"AC","name":"Armed Forces Canada"},"9":{"code":"AE","name":"Armed Forces Europe"},"10":{"code":"AM","name":"Armed Forces Middle East"},"11":{"code":"AP","name":"Armed Forces Pacific"},"12":{"code":"CA","name":"California"},"13":{"code":"CO","name":"Colorado"},"14":{"code":"CT","name":"Connecticut"},"15":{"code":"DE","name":"Delaware"},"16":{"code":"DC","name":"District of Columbia"},"17":{"code":"FM","name":"Federated States Of Micronesia"},"18":{"code":"FL","name":"Florida"},"19":{"code":"GA","name":"Georgia"},"20":{"code":"GU","name":"Guam"},"21":{"code":"HI","name":"Hawaii"},"22":{"code":"ID","name":"Idaho"},"23":{"code":"IL","name":"Illinois"},"24":{"code":"IN","name":"Indiana"},"25":{"code":"IA","name":"Iowa"},"26":{"code":"KS","name":"Kansas"},"27":{"code":"KY","name":"Kentucky"},"28":{"code":"LA","name":"Louisiana"},"29":{"code":"ME","name":"Maine"},"30":{"code":"MH","name":"Marshall Islands"},"31":{"code":"MD","name":"Maryland"},"32":{"code":"MA","name":"Massachusetts"},"33":{"code":"MI","name":"Michigan"},"34":{"code":"MN","name":"Minnesota"},"35":{"code":"MS","name":"Mississippi"},"36":{"code":"MO","name":"Missouri"},"37":{"code":"MT","name":"Montana"},"38":{"code":"NE","name":"Nebraska"},"39":{"code":"NV","name":"Nevada"},"40":{"code":"NH","name":"New Hampshire"},"41":{"code":"NJ","name":"New Jersey"},"42":{"code":"NM","name":"New Mexico"},"43":{"code":"NY","name":"New York"},"44":{"code":"NC","name":"North Carolina"},"45":{"code":"ND","name":"North Dakota"},"46":{"code":"MP","name":"Northern Mariana Islands"},"47":{"code":"OH","name":"Ohio"},"48":{"code":"OK","name":"Oklahoma"},"49":{"code":"OR","name":"Oregon"},"50":{"code":"PW","name":"Palau"},"51":{"code":"PA","name":"Pennsylvania"},"52":{"code":"PR","name":"Puerto Rico"},"53":{"code":"RI","name":"Rhode Island"},"54":{"code":"SC","name":"South Carolina"},"55":{"code":"SD","name":"South Dakota"},"56":{"code":"TN","name":"Tennessee"},"57":{"code":"TX","name":"Texas"},"58":{"code":"UT","name":"Utah"},"59":{"code":"VT","name":"Vermont"},"60":{"code":"VI","name":"Virgin Islands"},"61":{"code":"VA","name":"Virginia"},"62":{"code":"WA","name":"Washington"},"63":{"code":"WV","name":"West Virginia"},"64":{"code":"WI","name":"Wisconsin"},"65":{"code":"WY","name":"Wyoming"}}},"UY":{"name":"Uruguay","regions":{"1550":{"code":"UY-AR","name":"Artigas"},"1553":{"code":"UY-CA","name":"Canelones"},"1556":{"code":"UY-CL","name":"Cerro Largo"},"1559":{"code":"UY-CO","name":"Colonia"},"1562":{"code":"UY-DU","name":"Durazno"},"1565":{"code":"UY-FS","name":"Flores"},"1568":{"code":"UY-FD","name":"Florida"},"1571":{"code":"UY-LA","name":"Lavalleja"},"1574":{"code":"UY-MA","name":"Maldonado"},"1577":{"code":"UY-MO","name":"Montevideo"},"1580":{"code":"UY-PA","name":"Paysandu"},"1583":{"code":"UY-RN","name":"R\u00edo Negro"},"1586":{"code":"UY-RV","name":"Rivera"},"1589":{"code":"UY-RO","name":"Rocha"},"1592":{"code":"UY-SA","name":"Salto"},"1595":{"code":"UY-SJ","name":"San Jos\u00e9"},"1598":{"code":"UY-SO","name":"Soriano"},"1601":{"code":"UY-TA","name":"Tacuaremb\u00f3"},"1604":{"code":"UY-TT","name":"Treinta y Tres"}}},"UZ":{"name":"Uzbekistan"},"VA":{"name":"Vatican City"},"VC":{"name":"St. Vincent & Grenadines"},"VE":{"name":"Venezuela","regions":{"1613":{"code":"VE-Z","name":"Amazonas"},"1616":{"code":"VE-B","name":"Anzo\u00e1tegui"},"1619":{"code":"VE-C","name":"Apure"},"1622":{"code":"VE-D","name":"Aragua"},"1625":{"code":"VE-E","name":"Barinas"},"1628":{"code":"VE-F","name":"Bol\u00edvar"},"1631":{"code":"VE-G","name":"Carabobo"},"1634":{"code":"VE-H","name":"Cojedes"},"1637":{"code":"VE-Y","name":"Delta Amacuro"},"1607":{"code":"VE-W","name":"Dependencias Federales"},"1610":{"code":"VE-A","name":"Distrito Capital"},"1640":{"code":"VE-I","name":"Falc\u00f3n"},"1643":{"code":"VE-J","name":"Gu\u00e1rico"},"1646":{"code":"VE-K","name":"Lara"},"1649":{"code":"VE-L","name":"M\u00e9rida"},"1652":{"code":"VE-M","name":"Miranda"},"1655":{"code":"VE-N","name":"Monagas"},"1658":{"code":"VE-O","name":"Nueva Esparta"},"1661":{"code":"VE-P","name":"Portuguesa"},"1664":{"code":"VE-R","name":"Sucre"},"1667":{"code":"VE-S","name":"T\u00e1chira"},"1670":{"code":"VE-T","name":"Trujillo"},"1673":{"code":"VE-X","name":"Vargas"},"1676":{"code":"VE-U","name":"Yaracuy"},"1679":{"code":"VE-V","name":"Zulia"}}},"VG":{"name":"British Virgin Islands"},"VI":{"name":"U.S. Virgin Islands"},"VN":{"name":"Vietnam"},"VU":{"name":"Vanuatu"},"WF":{"name":"Wallis & Futuna"},"WS":{"name":"Samoa"},"YE":{"name":"Yemen"},"YT":{"name":"Mayotte"},"ZA":{"name":"South Africa"},"ZM":{"name":"Zambia"},"ZW":{"name":"Zimbabwe"},"data_id":1732504253},"captcha":[],"wishlist":{"items":[]},"company":[],"company_authorization":[],"purchase_order":[],"negotiable_quote":[],"instant-purchase":[],"loggedAsCustomer":[],"multiplewishlist":[],"persistent":[],"review":[],"hyva_enterprise":[],"recently_viewed_product":[],"recently_compared_product":[],"product_data_storage":[],"paypal-billing-agreement":[],"magepal-gtm-jsdatalayer":[],"magepal-eegtm-jsdatalayer":[]}</script> </div><script type="text/javascript">window.NREUM||(NREUM={});NREUM.info={"beacon":"bam.nr-data.net","licenseKey":"NRJS-61380f36d568c6a38e5","applicationID":"502041541","transactionName":"YwYGMkFUX0cAUxVcXVpMJQVHXF5aTlMAQVNYDANJUFRFUQZfE0wdQgoBEQ==","queueTime":0,"applicationTime":659,"atts":"T0EFRAlOTEk=","errorBeacon":"bam.nr-data.net","agent":""}</script></body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10