· 6 years ago · Nov 23, 2019, 11:22 AM
1
2<!doctype html>
3<html>
4
5<head>
6<script>
7 window.BOOMR_config = window.BOOMR_config || {};
8
9 // set global options
10 window.BOOMR_config.autorun = false;
11 window.BOOMR_config.instrument_xhr = true;
12
13 // set a plugin's options
14 window.BOOMR_config.History = {
15 enabled: true,
16 auto: true
17 };
18 (function (apiKey) {
19 // Boomerang Loader Snippet version 12
20 if (window.BOOMR && (window.BOOMR.version || window.BOOMR.snippetExecuted)) {
21 return;
22 }
23
24 window.BOOMR = window.BOOMR || {};
25 window.BOOMR.snippetStart = new Date().getTime();
26 window.BOOMR.snippetExecuted = true;
27 window.BOOMR.snippetVersion = 12;
28
29
30 // NOTE: Set mPulse API Key
31 window.BOOMR.url = "//c.go-mpulse.net/boomerang/" + apiKey;
32
33 var // document.currentScript is supported in all browsers other than IE
34 where = document.currentScript || document.getElementsByTagName("script")[0],
35 // Whether or not Preload method has worked
36 promoted = false,
37 // How long to wait for Preload to work before falling back to iframe method
38 LOADER_TIMEOUT = 3000;
39
40 // Tells the browser to execute the Preloaded script by adding it to the DOM
41 function promote() {
42 if (promoted) {
43 return;
44 }
45
46 var script = document.createElement("script");
47 script.id = "boomr-scr-as";
48 script.src = window.BOOMR.url;
49
50 // Not really needed since dynamic scripts are async by default and the script is already in cache at this point,
51 // but some naive parsers will see a missing async attribute and think we're not async
52 script.async = true;
53
54 where.parentNode.appendChild(script);
55
56 promoted = true;
57 }
58
59 // Non-blocking iframe loader (fallback for non-Preload scenarios) for all recent browsers.
60 // For IE 6/7, falls back to dynamic script node.
61 function iframeLoader(wasFallback) {
62 promoted = true;
63
64 var dom, doc = document, bootstrap, iframe, iframeStyle, win = window;
65
66 window.BOOMR.snippetMethod = wasFallback ? "if" : "i";
67
68 // Adds Boomerang within the iframe
69 bootstrap = function (parent, scriptId) {
70 var script = doc.createElement("script");
71 script.id = scriptId || "boomr-if-as";
72 script.src = window.BOOMR.url;
73
74 BOOMR_lstart = new Date().getTime();
75
76 parent = parent || doc.body;
77 parent.appendChild(script);
78 };
79
80 // For IE 6/7, we'll just load the script in the current frame, as those browsers don't support 'about:blank'
81 // for an iframe src (it triggers warnings on secure sites). This means loading on IE 6/7 may cause SPoF.
82 if (!window.addEventListener && window.attachEvent && navigator.userAgent.match(/MSIE [67]\./)) {
83 window.BOOMR.snippetMethod = "s";
84
85 bootstrap(where.parentNode, "boomr-async");
86 return;
87 }
88
89 // The rest of this function is IE8+ and other browsers that don't support Preload hints but will work with CSP & iframes
90 iframe = document.createElement("IFRAME");
91
92 // An empty frame
93 iframe.src = "about:blank";
94
95 // We set title and role appropriately to play nicely with screen readers and other assistive technologies
96 iframe.title = "";
97 iframe.role = "presentation";
98
99 // Ensure we're not loaded lazily
100 iframe.loading = "eager";
101
102 // Hide the iframe
103 iframeStyle = (iframe.frameElement || iframe).style;
104 iframeStyle.width = 0;
105 iframeStyle.height = 0;
106 iframeStyle.border = 0;
107 iframeStyle.display = "none";
108
109 // Append to the end of the current block
110 where.parentNode.appendChild(iframe);
111
112 // Try to get the iframe's document object
113 try {
114 win = iframe.contentWindow;
115 doc = win.document.open();
116 }
117 catch (e) {
118 // document.domain has been changed and we're on an old version of IE, so we got an access denied.
119 // Note: the only browsers that have this problem also do not have CSP support.
120
121 // Get document.domain of the parent window
122 dom = document.domain;
123
124 // Set the src of the iframe to a JavaScript URL that will immediately set its document.domain to match the parent.
125 // This lets us access the iframe document long enough to inject our script.
126 // Our script may need to do more domain massaging later.
127 iframe.src = "javascript:var d=document.open();d.domain='" + dom + "';void(0);";
128 win = iframe.contentWindow;
129
130 doc = win.document.open();
131 }
132
133 if (dom) {
134 // Unsafe version for IE8 compatability. If document.domain has changed, we can't use win, but we can use doc.
135 doc._boomrl = function () {
136 this.domain = dom;
137 bootstrap();
138 };
139
140 // Run our function at load.
141 // Split the string so HTML code injectors don't get confused and add code here.
142 doc.write("<bo" + "dy onload='document._boomrl();'>");
143 }
144 else {
145 // document.domain hasn't changed, regular method should be OK
146 win._boomrl = function () {
147 bootstrap();
148 };
149
150 if (win.addEventListener) {
151 win.addEventListener("load", win._boomrl, false);
152 }
153 else if (win.attachEvent) {
154 win.attachEvent("onload", win._boomrl);
155 }
156 }
157
158 // Finish the document
159 doc.close();
160 }
161
162 // See if Preload is supported or not
163 var link = document.createElement("link");
164
165 if (link.relList &&
166 typeof link.relList.supports === "function" &&
167 link.relList.supports("preload") &&
168 ("as" in link)) {
169 window.BOOMR.snippetMethod = "p";
170
171 // Set attributes to trigger a Preload
172 link.href = window.BOOMR.url;
173 link.rel = "preload";
174 link.as = "script";
175
176 // Add our script tag if successful, fallback to iframe if not
177 link.addEventListener("load", promote);
178 link.addEventListener("error", function () {
179 iframeLoader(true);
180 });
181
182 // Have a fallback in case Preload does nothing or is slow
183 setTimeout(function () {
184 if (!promoted) {
185 iframeLoader(true);
186 }
187 }, LOADER_TIMEOUT);
188
189 // Note the timestamp we started trying to Preload
190 BOOMR_lstart = new Date().getTime();
191
192 // Append our link tag
193 where.parentNode.appendChild(link);
194 }
195 else {
196 // No Preload support, use iframe loader
197 iframeLoader(false);
198 }
199
200 // Save when the onload event happened, in case this is a non-NavigationTiming browser
201 function boomerangSaveLoadTime(e) {
202 window.BOOMR_onload = (e && e.timeStamp) || new Date().getTime();
203 }
204
205 if (window.addEventListener) {
206 window.addEventListener("load", boomerangSaveLoadTime, false);
207 }
208 else if (window.attachEvent) {
209 window.attachEvent("onload", boomerangSaveLoadTime);
210 }
211 })('R6SH7-84RFL-GQQ8S-CW6MF-W5RWR');
212</script>
213<script type='text/javascript'>
214 var WindowEvent, VisibilityType; (function (n) { n.Load = "load"; n.BeforeUnload = "beforeunload"; n.Abort = "abort"; n.Error = "error"; n.Unload = "unload" })(WindowEvent || (WindowEvent = {})), function (n) { n[n.Focus = 0] = "Focus"; n[n.Blur = 1] = "Blur" }(VisibilityType || (VisibilityType = {})); var AjaxTiming = function () { function n(n, t, i, r) { var u = this; this.getPerformanceTimings = function (n) { u.connect = n.connectEnd - n.connectStart; u.dns = n.domainLookupEnd - n.domainLookupStart; u.duration = n.duration; u.load = n.responseEnd - n.responseStart; u.wait = n.responseStart - n.requestStart; u.start = n.startTime; u.redirect = n.redirectEnd - n.redirectStart; n.secureConnectionStart && (u.ssl = n.connectEnd - n.secureConnectionStart) }; this.url = n; this.method = t; this.isAsync = i; this.open = r } return n }(), ProfilerJsError = function () { function n(n, t, i) { this.count = 0; this.message = n; this.url = t; this.lineNumber = i } return n.createText = function (n, t, i) { return [n, t, i].join(":") }, n.prototype.getText = function () { return n.createText(this.message, this.url, this.lineNumber) }, n }(), ProfilerEventManager = function () { function n() { this.events = []; this.hasAttachEvent = !!window.attachEvent } return n.prototype.add = function (n, t, i) { this.events.push({ type: n, target: t, func: i }); this.hasAttachEvent ? t.attachEvent("on" + n, i) : t.addEventListener(n, i, !1) }, n.prototype.remove = function (n, t, i) { this.hasAttachEvent ? t.detachEvent(n, i) : t.removeEventListener(n, i, !1); var r = this.events.indexOf({ type: n, target: t, func: i }); r !== 1 && this.events.splice(r, 1) }, n.prototype.clear = function () { for (var t, n = 0, i = this.events; n < i.length; n++)t = i[n], this.remove(t.type, t.target, t.func); this.events = [] }, n }(), RProfiler = function () { function n() { function e(n) { var i = n.target || n.srcElement; return i.nodeType == 3 && (i = i.parentNode), t("N/A", i.src || i.URL, -1), !1 } var n = this, t, i, f; this.restUrl = "g.3gl.net/jp/2597/v3.2.4/M"; this.startTime = (new Date).getTime(); this.eventsTimingHandler = new EventsTimingHandler; this.inputDelay = new InputDelayHandler; this.version = "v3.2.4"; this.info = {}; this.hasInsight = !1; this.data = { start: this.startTime, jsCount: 0, jsErrors: [], loadTime: -1, loadFired: window.document.readyState == "complete", ajax: [] }; this.eventManager = new ProfilerEventManager; this.startAjaxCapture = function () { var i = XMLHttpRequest.prototype, o = i.open, s = i.send, r = [], u = {}, e = n.data.ajax, h = 25, f = typeof performance == "object" && typeof window.performance.now == "function" && typeof window.performance.getEntriesByType == "function", t; f && typeof window.performance.setResourceTimingBufferSize == "function" && window.performance.setResourceTimingBufferSize(300); t = function () { return f ? window.performance.now() : (new Date).getTime() }; i.open = function (n, i, u, f, e) { u === void 0 && (u = !0); this.rpIndex = r.length; r.push(new AjaxTiming(i, n, u, t())); o.call(this, n, i, u, f, e) }; i.send = function (n) { var i = this, c = this.onreadystatechange, o; (this.onreadystatechange = function (n) { var o = r[i.rpIndex], l, s; if (o) { l = i.readyState; switch (l) { case 1: o.connectionEstablished = t(); break; case 2: o.requestReceived = t(); break; case 3: o.processingTime = t(); break; case 4: o.complete = t(); s = !!(i.response && i.response != null && i.response != undefined); switch (i.responseType) { case "text": case "": typeof i.responseText == "string" && (o.responseSize = i.responseText.length); break; case "json": s && typeof i.response.toString == "function" && (o.responseSize = i.response.toString().length); break; case "arraybuffer": s && typeof i.response.byteLength == "number" && (o.responseSize = i.response.byteLength); break; case "blob": s && typeof i.response.size == "number" && (o.responseSize = i.response.size) }(function (n) { setTimeout(function () { var r, s, h, c, o; if (f) { var i = n.url, t = [], l = performance.getEntriesByType("resource"); for (r = 0, s = l; r < s.length; r++)h = s[r], h.name == i && t.push(h); if (e.push(n), t.length != 0) { if (u[i] || (u[i] = []), t.length == 1) { n.getPerformanceTimings(t[0]); u[i].push(0); return } c = u[i]; for (o in t) if (c.indexOf(o) == -1) { n.getPerformanceTimings(t[o]); c.push(o); return } n.getPerformanceTimings(t[0]) } } }, h) })(o, e) }typeof c == "function" && c.call(i, n) } }, o = r[this.rpIndex], o) && (n && !isNaN(n.length) && (o.sendSize = n.length), o.send = t(), s.call(this, n)) } }; this.recordPageLoad = function () { n.data.loadTime = (new Date).getTime(); n.data.loadFired = !0 }; this.addError = function (t, i, r) { var s, f, u, e, o; for (n.data.jsCount++ , s = ProfilerJsError.createText(t, i, r), f = n.data.jsErrors, u = 0, e = f; u < e.length; u++)if (o = e[u], o.getText() == s) { o.count++; return } f.push(new ProfilerJsError(t, i, r)) }; this.addInfo = function (t, i, r) { if (!n.isNullOrEmpty(t)) { if (n.isNullOrEmpty(r)) n.info[t] = i; else { if (n.isNullOrEmpty(i)) return; n.isNullOrEmpty(n.info[t]) && (n.info[t] = {}); n.info[t][i] = r } n.hasInsight = !0 } }; this.clearInfo = function () { n.info = {}; n.hasInsight = !1 }; this.clearErrors = function () { n.data.jsCount = 0; n.data.jsErrors = [] }; this.clearAjax = function () { n.data.ajax = [] }; this.getInfo = function () { return n.hasInsight ? n.info : null }; this.getEventTimingHandler = function () { return n.eventsTimingHandler }; this.getInputDelay = function () { return n.inputDelay }; this.eventManager.add(WindowEvent.Load, window, this.recordPageLoad); t = this.addError; this.startAjaxCapture(); window.opera ? this.eventManager.add(WindowEvent.Error, document, e) : "onerror" in window && (i = window.onerror, window.onerror = function (n, r, u) { return (t(n, r, u), !!i) ? i(n, r, u) : !1 }); !window.__cpCdnPath || (this.restUrl = window.__cpCdnPath.trim()); var o = window.location.protocol, r = document.createElement("iframe"), u = r.style; u.position = "absolute"; u.top = "-10000px"; u.left = "-1000px"; r.addEventListener("load", function (t) { var r = t.currentTarget, u, i; r && r.contentDocument && (u = r.contentDocument, i = u.createElement("script"), i.type = "text/javascript", i.src = o + "//" + n.restUrl, u.body.appendChild(i)) }); f = document.getElementsByTagName("script")[0]; f.parentNode.insertBefore(r, f) } return n.prototype.isNullOrEmpty = function (n) { if (n === undefined || n === null) return !0; if (typeof n == "string") { var t = n; return t.trim().length == 0 } return !1 }, n.prototype.dispatchCustomEvent = function (n) { (function (n) { function t(n, t) { t = t || { bubbles: !1, cancelable: !1, detail: undefined }; var i = document.createEvent("CustomEvent"); return i.initCustomEvent(n, t.bubbles, t.cancelable, t.detail), i } if (typeof n.CustomEvent == "function") return !1; t.prototype = Event.prototype; n.CustomEvent = t })(window); var t = new CustomEvent(n); window.dispatchEvent(t) }, n }(), InputDelayHandler = function () { function n() { var n = this; this.firstInputDelay = 0; this.firstInputTimeStamp = 0; this.startTime = 0; this.delay = 0; this.profileManager = new ProfilerEventManager; this.eventTypes = ["click", "mousedown", "keydown", "touchstart", "pointerdown",]; this.addEventListeners = function () { n.eventTypes.forEach(function (t) { n.profileManager.add(t, document, n.onInput) }) }; this.now = function () { return (new Date).getTime() }; this.removeEventListeners = function () { n.eventTypes.forEach(function (t) { n.profileManager.remove(t, document, n.onInput) }) }; this.onInput = function (t) { var i, r, u; t.cancelable && (i = t.timeStamp > 1e12, n.firstInputTimeStamp = n.now(), r = i || !window.performance, u = r ? n.firstInputTimeStamp : window.performance.now(), n.delay = u - t.timeStamp, t.type == "pointerdown" ? n.onPointerDown() : (n.removeEventListeners(), n.updateFirstInputDelay())) }; this.onPointerUp = function () { n.removeEventListeners(); n.updateFirstInputDelay() }; this.onPointerCancel = function () { n.removePointerEventListeners() }; this.removePointerEventListeners = function () { n.profileManager.remove("pointerup", document, n.onPointerUp); n.profileManager.remove("pointercancel", document, n.onPointerCancel) }; this.updateFirstInputDelay = function () { n.delay >= 0 && n.delay < n.firstInputTimeStamp - n.startTime && (n.firstInputDelay = Math.round(n.delay)) }; this.startSoftNavigationCapture = function () { n.resetSoftNavigationCapture() }; this.resetSoftNavigationCapture = function () { n.resetFirstInputDelay(); n.addEventListeners() }; this.resetFirstInputDelay = function () { n.delay = 0; n.firstInputDelay = 0; n.startTime = 0; n.firstInputTimeStamp = 0 }; this.startTime = this.now(); this.addEventListeners() } return n.prototype.onPointerDown = function () { this.profileManager.add("pointerup", document, this.onPointerUp); this.profileManager.add("pointercancel", document, this.onPointerCancel) }, n.prototype.getFirstInputDelay = function () { return this.firstInputDelay }, n }(), EventsTimingHandler = function () { function n() { var n = this; this.hiddenStrings = ["hidden", "msHidden", "webkitHidden", "mozHidden"]; this.visibilityStrings = ["visibilitychange", "msvisibilitychange", "webkitvisibilitychange", "mozvisibilitychange"]; this.captureSoftNavigation = !1; this.hidden = "hidden"; this.visibilityChange = "visibilitychange"; this.visibilityEvents = []; this.eventManager = new ProfilerEventManager; this.engagementTimeIntervalMs = 1e3; this.engagementTime = 0; this.firstEngagementTime = 0; this.lastEventTimeStamp = 0; this.timeoutId = undefined; this.now = function () { return (new Date).getTime() }; this.startVisibilityCapture = function () { n.initializeVisibilityProperties(); document.addEventListener(n.visibilityChange, n.captureFocusEvent, !1) }; this.initializeVisibilityProperties = function () { for (var r = n.hiddenStrings, i = 0, t = 0; t < r.length; t++)typeof document[r[t]] != "undefined" && (i = t); n.visibilityChange = n.visibilityStrings[i]; n.hidden = n.hiddenStrings[i] }; this.captureFocusEvent = function () { n.updateVisibilityChangeTime(); document[n.hidden] || n.captureEngagementTime() }; this.updateVisibilityChangeTime = function () { document[n.hidden] ? n.captureVisibilityEvent(VisibilityType.Blur) : n.captureVisibilityEvent(VisibilityType.Focus) }; this.onBlur = function () { n.captureVisibilityEvent(VisibilityType.Blur) }; this.onFocus = function () { n.captureVisibilityEvent(VisibilityType.Focus) }; this.captureVisibilityEvent = function (t) { n.visibilityEvents.push({ type: t, time: n.now() }) }; this.captureEngagementTime = function (t) { if (t === void 0 && (t = !0), !n.lastEventTimeStamp) { n.engagementTime = n.engagementTimeIntervalMs; n.lastEventTimeStamp = n.now(); return } var i = n.now() - n.lastEventTimeStamp; if (n.lastEventTimeStamp = n.now(), t && n.firstEngagementTime === 0 && (n.firstEngagementTime = n.now()), i > 0 && i < n.engagementTimeIntervalMs) { clearTimeout(n.timeoutId); n.engagementTime += i; return } n.startTimer() }; this.captureMouseMove = function () { n.captureEngagementTime(!1) }; this.startTimer = function () { n.timeoutId = setTimeout(function () { n.engagementTime += n.engagementTimeIntervalMs }, n.engagementTimeIntervalMs) }; this.getFocusAwayTime = function () { var i = n.visibilityEvents, t = -1, s, h, o; if (i.length === 0) return 0; for (var r = t, u = 0, f = t, e = 0; u < i.length;)i[u].type === VisibilityType.Blur && r === t && (r = u), s = f === t && r !== t, i[u].type === VisibilityType.Focus && s && (f = u), h = r !== t && f !== t, h && (o = i[f].time - i[r].time, o > 0 && (e += o), r = t, f = t), u = u + 1; return r === i.length - 1 && (e += n.now() - i[r].time), e }; this.getEngagementTime = function () { return n.engagementTime }; this.getFirstEngagementTime = function () { return n.firstEngagementTime }; this.startSoftNavigationCapture = function () { n.captureSoftNavigation = !0 }; this.resetSoftNavigationCapture = function () { n.resetEngagementMetrics(); n.visibilityEvents = [] }; this.resetEngagementMetrics = function () { n.engagementTime = 0; n.lastEventTimeStamp = n.now(); n.firstEngagementTime = 0 }; this.clear = function () { n.eventManager.clear() }; this.captureEngagementTime(!1); this.eventManager.add("scroll", document, this.captureEngagementTime); this.eventManager.add("resize", window, this.captureEngagementTime); this.eventManager.add("mouseup", document, this.captureEngagementTime); this.eventManager.add("keyup", document, this.captureEngagementTime); this.eventManager.add("mousemove", document, this.captureMouseMove); this.eventManager.add("focus", window, this.onFocus); this.eventManager.add("blur", window, this.onBlur); this.eventManager.add("focus", document, this.onFocus); this.eventManager.add("blur", document, this.onBlur) } return n }(), profiler = new RProfiler; window.RProfiler = profiler; window.WindowEvent = WindowEvent; profiler.dispatchCustomEvent("GlimpseLoaded");
215</script>
216 <meta charset="utf-8">
217 <title>
218 Nike SNKRS
219 </title>
220 <base href="/">
221
222 <meta
223 name="viewport"
224 content="width=device-width, initial-scale=1, maximum-scale=1"
225 >
226 <link
227 rel="icon"
228 type="image/x-icon"
229 href="favicon.ico"
230 >
231<link rel="stylesheet" href="styles.608e6d93841645ef782f.css"></head>
232
233<body>
234 <esw-root></esw-root>
235<script type="text/javascript" src="runtime.930bd0f44a1228399aec.js"></script><script type="text/javascript" src="es2015-polyfills.c5f7230bf9ec92ab9318.js" nomodule></script><script type="text/javascript" src="polyfills.4340c4792f6e1e35b38b.js"></script><script type="text/javascript" src="vendor.184e71e4fad2d16fa76d.js"></script><script type="text/javascript" src="main.ed1ef332f9c72993f834.js"></script><script type="text/javascript" >var _cf = _cf || []; _cf.push(['_setFsp', true]); _cf.push(['_setBm', true]); _cf.push(['_setAu', '/assets/07456bfd203b75fdd1612239e2d2']);</script><script type="text/javascript" src="/assets/07456bfd203b75fdd1612239e2d2"></script></body>
236
237</html>