Skip to content

Instantly share code, notes, and snippets.

@leehanchung
Last active March 17, 2025 14:18
Show Gist options
  • Save leehanchung/3ba563d2d4b990be165deb446c8bfd6e to your computer and use it in GitHub Desktop.
Save leehanchung/3ba563d2d4b990be165deb446c8bfd6e to your computer and use it in GitHub Desktop.
formatted claude code cli.mjs
This file has been truncated, but you can view the full file.
#!/usr/bin/env -S node --no-warnings=ExperimentalWarning --enable-source-maps
// Claude Code is a Beta product per Anthropic's Commercial Terms of Service.
// By using Claude Code, you agree that all code acceptance or rejection decisions you make,
// and the associated conversations in context, constitute Feedback under Anthropic's Commercial Terms,
// and may be used to improve Anthropic's products, including training models.
// You are responsible for reviewing any code suggestions before use.
// (c) Anthropic PBC. All rights reserved. Use is subject to Anthropic's Commercial Terms of Service (https://www.anthropic.com/legal/commercial-terms).
// Version: 0.2.29
import { createRequire as iv2 } from 'node:module'
var hv2 = Object.create
var { getPrototypeOf: xv2, defineProperty: lt, getOwnPropertyNames: cv2 } = Object
var pv2 = Object.prototype.hasOwnProperty
var X1 = (I, G, Z) => {
Z = I != null ? hv2(xv2(I)) : {}
let d = G || !I || !I.__esModule ? lt(Z, 'default', { value: I, enumerable: !0 }) : Z
for (let W of cv2(I)) if (!pv2.call(d, W)) lt(d, W, { get: () => I[W], enumerable: !0 })
return d
}
var _ = (I, G) => () => (G || I((G = { exports: {} }).exports, G), G.exports)
var rE = (I, G) => {
for (var Z in G)
lt(I, Z, { get: G[Z], enumerable: !0, configurable: !0, set: (d) => (G[Z] = () => d) })
}
var XB = (I, G) => () => (I && (G = I((I = 0))), G)
var A1 = iv2(import.meta.url)
var sZ = _((SQ1) => {
Object.defineProperty(SQ1, '__esModule', { value: !0 })
var EQ1 = Object.prototype.toString
function nv2(I) {
switch (EQ1.call(I)) {
case '[object Error]':
case '[object Exception]':
case '[object DOMException]':
return !0
default:
return mT(I, Error)
}
}
function SN(I, G) {
return EQ1.call(I) === `[object ${G}]`
}
function av2(I) {
return SN(I, 'ErrorEvent')
}
function rv2(I) {
return SN(I, 'DOMError')
}
function sv2(I) {
return SN(I, 'DOMException')
}
function ov2(I) {
return SN(I, 'String')
}
function vQ1(I) {
return (
typeof I === 'object' &&
I !== null &&
'__sentry_template_string__' in I &&
'__sentry_template_values__' in I
)
}
function ev2(I) {
return I === null || vQ1(I) || (typeof I !== 'object' && typeof I !== 'function')
}
function MQ1(I) {
return SN(I, 'Object')
}
function tv2(I) {
return typeof Event !== 'undefined' && mT(I, Event)
}
function IM2(I) {
return typeof Element !== 'undefined' && mT(I, Element)
}
function GM2(I) {
return SN(I, 'RegExp')
}
function ZM2(I) {
return Boolean(I && I.then && typeof I.then === 'function')
}
function dM2(I) {
return MQ1(I) && 'nativeEvent' in I && 'preventDefault' in I && 'stopPropagation' in I
}
function WM2(I) {
return typeof I === 'number' && I !== I
}
function mT(I, G) {
try {
return I instanceof G
} catch (Z) {
return !1
}
}
function wM2(I) {
return !!(typeof I === 'object' && I !== null && (I.__isVue || I._isVue))
}
SQ1.isDOMError = rv2
SQ1.isDOMException = sv2
SQ1.isElement = IM2
SQ1.isError = nv2
SQ1.isErrorEvent = av2
SQ1.isEvent = tv2
SQ1.isInstanceOf = mT
SQ1.isNaN = WM2
SQ1.isParameterizedString = vQ1
SQ1.isPlainObject = MQ1
SQ1.isPrimitive = ev2
SQ1.isRegExp = GM2
SQ1.isString = ov2
SQ1.isSyntheticEvent = dM2
SQ1.isThenable = ZM2
SQ1.isVueViewModel = wM2
})
var sE = _(($Q1) => {
Object.defineProperty($Q1, '__esModule', { value: !0 })
var bT = sZ()
function qM2(I, G = 0) {
if (typeof I !== 'string' || G === 0) return I
return I.length <= G ? I : `${I.slice(0, G)}...`
}
function UM2(I, G) {
let Z = I,
d = Z.length
if (d <= 150) return Z
if (G > d) G = d
let W = Math.max(G - 60, 0)
if (W < 5) W = 0
let w = Math.min(W + 140, d)
if (w > d - 5) w = d
if (w === d) W = Math.max(w - 140, 0)
if (((Z = Z.slice(W, w)), W > 0)) Z = `'{snip} ${Z}`
if (w < d) Z += ' {snip}'
return Z
}
function fM2(I, G) {
if (!Array.isArray(I)) return ''
let Z = []
for (let d = 0; d < I.length; d++) {
let W = I[d]
try {
if (bT.isVueViewModel(W)) Z.push('[VueViewModel]')
else Z.push(String(W))
} catch (w) {
Z.push('[value cannot be serialized]')
}
}
return Z.join(G)
}
function LQ1(I, G, Z = !1) {
if (!bT.isString(I)) return !1
if (bT.isRegExp(G)) return G.test(I)
if (bT.isString(G)) return Z ? I === G : I.includes(G)
return !1
}
function RM2(I, G = [], Z = !1) {
return G.some((d) => LQ1(I, d, Z))
}
$Q1.isMatchingPattern = LQ1
$Q1.safeJoin = fM2
$Q1.snipLine = UM2
$Q1.stringMatchesSomePattern = RM2
$Q1.truncate = qM2
})
var uQ1 = _((OQ1) => {
Object.defineProperty(OQ1, '__esModule', { value: !0 })
var jt = sZ(),
$M2 = sE()
function yM2(I, G, Z = 250, d, W, w, B) {
if (!w.exception || !w.exception.values || !B || !jt.isInstanceOf(B.originalException, Error))
return
let C =
w.exception.values.length > 0 ? w.exception.values[w.exception.values.length - 1] : void 0
if (C)
w.exception.values = PM2(kt(I, G, W, B.originalException, d, w.exception.values, C, 0), Z)
}
function kt(I, G, Z, d, W, w, B, C) {
if (w.length >= Z + 1) return w
let V = [...w]
if (jt.isInstanceOf(d[W], Error)) {
yQ1(B, C)
let A = I(G, d[W]),
X = V.length
PQ1(A, W, X, C), (V = kt(I, G, Z, d[W], W, [A, ...V], A, X))
}
if (Array.isArray(d.errors))
d.errors.forEach((A, X) => {
if (jt.isInstanceOf(A, Error)) {
yQ1(B, C)
let Y = I(G, A),
H = V.length
PQ1(Y, `errors[${X}]`, H, C), (V = kt(I, G, Z, A, W, [Y, ...V], Y, H))
}
})
return V
}
function yQ1(I, G) {
;(I.mechanism = I.mechanism || { type: 'generic', handled: !0 }),
(I.mechanism = {
...I.mechanism,
...(I.type === 'AggregateError' && { is_exception_group: !0 }),
exception_id: G,
})
}
function PQ1(I, G, Z, d) {
;(I.mechanism = I.mechanism || { type: 'generic', handled: !0 }),
(I.mechanism = { ...I.mechanism, type: 'chained', source: G, exception_id: Z, parent_id: d })
}
function PM2(I, G) {
return I.map((Z) => {
if (Z.value) Z.value = $M2.truncate(Z.value, G)
return Z
})
}
OQ1.applyAggregateErrorsToEvent = yM2
})
var q7 = _((TQ1) => {
Object.defineProperty(TQ1, '__esModule', { value: !0 })
function lT(I) {
return I && I.Math == Math ? I : void 0
}
var ht =
(typeof globalThis == 'object' && lT(globalThis)) ||
(typeof window == 'object' && lT(window)) ||
(typeof self == 'object' && lT(self)) ||
(typeof global == 'object' && lT(global)) ||
(function () {
return this
})() ||
{}
function uM2() {
return ht
}
function TM2(I, G, Z) {
let d = Z || ht,
W = (d.__SENTRY__ = d.__SENTRY__ || {})
return W[I] || (W[I] = G())
}
TQ1.GLOBAL_OBJ = ht
TQ1.getGlobalObject = uM2
TQ1.getGlobalSingleton = TM2
})
var xt = _((mQ1) => {
Object.defineProperty(mQ1, '__esModule', { value: !0 })
var jM2 = sZ(),
kM2 = q7(),
LN = kM2.getGlobalObject(),
hM2 = 80
function xM2(I, G = {}) {
if (!I) return '<unknown>'
try {
let Z = I,
d = 5,
W = [],
w = 0,
B = 0,
C = ' > ',
V = C.length,
A,
X = Array.isArray(G) ? G : G.keyAttrs,
Y = (!Array.isArray(G) && G.maxStringLength) || hM2
while (Z && w++ < d) {
if (((A = cM2(Z, X)), A === 'html' || (w > 1 && B + W.length * V + A.length >= Y))) break
W.push(A), (B += A.length), (Z = Z.parentNode)
}
return W.reverse().join(C)
} catch (Z) {
return '<unknown>'
}
}
function cM2(I, G) {
let Z = I,
d = [],
W,
w,
B,
C,
V
if (!Z || !Z.tagName) return ''
if (LN.HTMLElement) {
if (Z instanceof HTMLElement && Z.dataset && Z.dataset.sentryComponent)
return Z.dataset.sentryComponent
}
d.push(Z.tagName.toLowerCase())
let A =
G && G.length ? G.filter((Y) => Z.getAttribute(Y)).map((Y) => [Y, Z.getAttribute(Y)]) : null
if (A && A.length)
A.forEach((Y) => {
d.push(`[${Y[0]}="${Y[1]}"]`)
})
else {
if (Z.id) d.push(`#${Z.id}`)
if (((W = Z.className), W && jM2.isString(W))) {
w = W.split(/\s+/)
for (V = 0; V < w.length; V++) d.push(`.${w[V]}`)
}
}
let X = ['aria-label', 'type', 'name', 'title', 'alt']
for (V = 0; V < X.length; V++)
if (((B = X[V]), (C = Z.getAttribute(B)), C)) d.push(`[${B}="${C}"]`)
return d.join('')
}
function pM2() {
try {
return LN.document.location.href
} catch (I) {
return ''
}
}
function iM2(I) {
if (LN.document && LN.document.querySelector) return LN.document.querySelector(I)
return null
}
function nM2(I) {
if (!LN.HTMLElement) return null
let G = I,
Z = 5
for (let d = 0; d < Z; d++) {
if (!G) return null
if (G instanceof HTMLElement && G.dataset.sentryComponent) return G.dataset.sentryComponent
G = G.parentNode
}
return null
}
mQ1.getComponentName = nM2
mQ1.getDomElement = iM2
mQ1.getLocationHref = pM2
mQ1.htmlTreeAsString = xM2
})
var YB = _((bQ1) => {
Object.defineProperty(bQ1, '__esModule', { value: !0 })
var eM2 = typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__
bQ1.DEBUG_BUILD = eM2
})
var NW = _((jQ1) => {
Object.defineProperty(jQ1, '__esModule', { value: !0 })
var IS2 = YB(),
ct = q7(),
GS2 = 'Sentry Logger ',
pt = ['debug', 'info', 'warn', 'error', 'log', 'assert', 'trace'],
it = {}
function lQ1(I) {
if (!('console' in ct.GLOBAL_OBJ)) return I()
let G = ct.GLOBAL_OBJ.console,
Z = {},
d = Object.keys(it)
d.forEach((W) => {
let w = it[W]
;(Z[W] = G[W]), (G[W] = w)
})
try {
return I()
} finally {
d.forEach((W) => {
G[W] = Z[W]
})
}
}
function ZS2() {
let I = !1,
G = {
enable: () => {
I = !0
},
disable: () => {
I = !1
},
isEnabled: () => I,
}
if (IS2.DEBUG_BUILD)
pt.forEach((Z) => {
G[Z] = (...d) => {
if (I)
lQ1(() => {
ct.GLOBAL_OBJ.console[Z](`${GS2}[${Z}]:`, ...d)
})
}
})
else
pt.forEach((Z) => {
G[Z] = () => {
return
}
})
return G
}
var dS2 = ZS2()
jQ1.CONSOLE_LEVELS = pt
jQ1.consoleSandbox = lQ1
jQ1.logger = dS2
jQ1.originalConsoleMethods = it
})
var nt = _((xQ1) => {
Object.defineProperty(xQ1, '__esModule', { value: !0 })
var VS2 = YB(),
oE = NW(),
AS2 = /^(?:(\w+):)\/\/(?:(\w+)(?::(\w+)?)?@)([\w.-]+)(?::(\d+))?\/(.+)/
function XS2(I) {
return I === 'http' || I === 'https'
}
function YS2(I, G = !1) {
let { host: Z, path: d, pass: W, port: w, projectId: B, protocol: C, publicKey: V } = I
return `${C}://${V}${G && W ? `:${W}` : ''}@${Z}${w ? `:${w}` : ''}/${d ? `${d}/` : d}${B}`
}
function kQ1(I) {
let G = AS2.exec(I)
if (!G) {
oE.consoleSandbox(() => {
console.error(`Invalid Sentry Dsn: ${I}`)
})
return
}
let [Z, d, W = '', w, B = '', C] = G.slice(1),
V = '',
A = C,
X = A.split('/')
if (X.length > 1) (V = X.slice(0, -1).join('/')), (A = X.pop())
if (A) {
let Y = A.match(/^\d+/)
if (Y) A = Y[0]
}
return hQ1({ host: w, pass: W, path: V, projectId: A, port: B, protocol: Z, publicKey: d })
}
function hQ1(I) {
return {
protocol: I.protocol,
publicKey: I.publicKey || '',
pass: I.pass || '',
host: I.host,
port: I.port || '',
path: I.path || '',
projectId: I.projectId,
}
}
function _S2(I) {
if (!VS2.DEBUG_BUILD) return !0
let { port: G, projectId: Z, protocol: d } = I
if (
['protocol', 'publicKey', 'host', 'projectId'].find((B) => {
if (!I[B]) return oE.logger.error(`Invalid Sentry Dsn: ${B} missing`), !0
return !1
})
)
return !1
if (!Z.match(/^\d+$/)) return oE.logger.error(`Invalid Sentry Dsn: Invalid projectId ${Z}`), !1
if (!XS2(d)) return oE.logger.error(`Invalid Sentry Dsn: Invalid protocol ${d}`), !1
if (G && isNaN(parseInt(G, 10)))
return oE.logger.error(`Invalid Sentry Dsn: Invalid port ${G}`), !1
return !0
}
function DS2(I) {
let G = typeof I === 'string' ? kQ1(I) : hQ1(I)
if (!G || !_S2(G)) return
return G
}
xQ1.dsnFromString = kQ1
xQ1.dsnToString = YS2
xQ1.makeDsn = DS2
})
var at = _((pQ1) => {
Object.defineProperty(pQ1, '__esModule', { value: !0 })
class cQ1 extends Error {
constructor(I, G = 'warn') {
super(I)
;(this.message = I),
(this.name = new.target.prototype.constructor.name),
Object.setPrototypeOf(this, new.target.prototype),
(this.logLevel = G)
}
}
pQ1.SentryError = cQ1
})
var oZ = _((eQ1) => {
Object.defineProperty(eQ1, '__esModule', { value: !0 })
var gS2 = xt(),
NS2 = YB(),
$N = sZ(),
zS2 = NW(),
iQ1 = sE()
function QS2(I, G, Z) {
if (!(G in I)) return
let d = I[G],
W = Z(d)
if (typeof W === 'function') sQ1(W, d)
I[G] = W
}
function rQ1(I, G, Z) {
try {
Object.defineProperty(I, G, { value: Z, writable: !0, configurable: !0 })
} catch (d) {
NS2.DEBUG_BUILD && zS2.logger.log(`Failed to add non-enumerable property "${G}" to object`, I)
}
}
function sQ1(I, G) {
try {
let Z = G.prototype || {}
;(I.prototype = G.prototype = Z), rQ1(I, '__sentry_original__', G)
} catch (Z) {}
}
function qS2(I) {
return I.__sentry_original__
}
function US2(I) {
return Object.keys(I)
.map((G) => `${encodeURIComponent(G)}=${encodeURIComponent(I[G])}`)
.join('&')
}
function oQ1(I) {
if ($N.isError(I)) return { message: I.message, name: I.name, stack: I.stack, ...aQ1(I) }
else if ($N.isEvent(I)) {
let G = {
type: I.type,
target: nQ1(I.target),
currentTarget: nQ1(I.currentTarget),
...aQ1(I),
}
if (typeof CustomEvent !== 'undefined' && $N.isInstanceOf(I, CustomEvent)) G.detail = I.detail
return G
} else return I
}
function nQ1(I) {
try {
return $N.isElement(I) ? gS2.htmlTreeAsString(I) : Object.prototype.toString.call(I)
} catch (G) {
return '<unknown>'
}
}
function aQ1(I) {
if (typeof I === 'object' && I !== null) {
let G = {}
for (let Z in I) if (Object.prototype.hasOwnProperty.call(I, Z)) G[Z] = I[Z]
return G
} else return {}
}
function fS2(I, G = 40) {
let Z = Object.keys(oQ1(I))
if ((Z.sort(), !Z.length)) return '[object has no keys]'
if (Z[0].length >= G) return iQ1.truncate(Z[0], G)
for (let d = Z.length; d > 0; d--) {
let W = Z.slice(0, d).join(', ')
if (W.length > G) continue
if (d === Z.length) return W
return iQ1.truncate(W, G)
}
return ''
}
function RS2(I) {
return rt(I, new Map())
}
function rt(I, G) {
if (ES2(I)) {
let Z = G.get(I)
if (Z !== void 0) return Z
let d = {}
G.set(I, d)
for (let W of Object.keys(I)) if (typeof I[W] !== 'undefined') d[W] = rt(I[W], G)
return d
}
if (Array.isArray(I)) {
let Z = G.get(I)
if (Z !== void 0) return Z
let d = []
return (
G.set(I, d),
I.forEach((W) => {
d.push(rt(W, G))
}),
d
)
}
return I
}
function ES2(I) {
if (!$N.isPlainObject(I)) return !1
try {
let G = Object.getPrototypeOf(I).constructor.name
return !G || G === 'Object'
} catch (G) {
return !0
}
}
function vS2(I) {
let G
switch (!0) {
case I === void 0 || I === null:
G = new String(I)
break
case typeof I === 'symbol' || typeof I === 'bigint':
G = Object(I)
break
case $N.isPrimitive(I):
G = new I.constructor(I)
break
default:
G = I
break
}
return G
}
eQ1.addNonEnumerableProperty = rQ1
eQ1.convertToPlainObject = oQ1
eQ1.dropUndefinedKeys = RS2
eQ1.extractExceptionKeysForMessage = fS2
eQ1.fill = QS2
eQ1.getOriginalFunction = qS2
eQ1.markFunctionWrapped = sQ1
eQ1.objectify = vS2
eQ1.urlEncode = US2
})
var jT = _((Iq1) => {
Object.defineProperty(Iq1, '__esModule', { value: !0 })
function tQ1(I, G = !1) {
return (
!(
G ||
(I &&
!I.startsWith('/') &&
!I.match(/^[A-Z]:/) &&
!I.startsWith('.') &&
!I.match(/^[a-zA-Z]([a-zA-Z0-9.\-+])*:\/\//))
) &&
I !== void 0 &&
!I.includes('node_modules/')
)
}
function mS2(I) {
let G = /^\s*[-]{4,}$/,
Z = /at (?:async )?(?:(.+?)\s+\()?(?:(.+):(\d+):(\d+)?|([^)]+))\)?/
return (d) => {
let W = d.match(Z)
if (W) {
let w, B, C, V, A
if (W[1]) {
C = W[1]
let H = C.lastIndexOf('.')
if (C[H - 1] === '.') H--
if (H > 0) {
;(w = C.slice(0, H)), (B = C.slice(H + 1))
let J = w.indexOf('.Module')
if (J > 0) (C = C.slice(J + 1)), (w = w.slice(0, J))
}
V = void 0
}
if (B) (V = w), (A = B)
if (B === '<anonymous>') (A = void 0), (C = void 0)
if (C === void 0) (A = A || '<anonymous>'), (C = V ? `${V}.${A}` : A)
let X = W[2] && W[2].startsWith('file://') ? W[2].slice(7) : W[2],
Y = W[5] === 'native'
if (X && X.match(/\/[A-Z]:/)) X = X.slice(1)
if (!X && W[5] && !Y) X = W[5]
return {
filename: X,
module: I ? I(X) : void 0,
function: C,
lineno: parseInt(W[3], 10) || void 0,
colno: parseInt(W[4], 10) || void 0,
in_app: tQ1(X, Y),
}
}
if (d.match(G)) return { filename: d }
return
}
}
Iq1.filenameIsInApp = tQ1
Iq1.node = mS2
})
var kT = _((Cq1) => {
Object.defineProperty(Cq1, '__esModule', { value: !0 })
var dq1 = jT(),
Wq1 = 50,
Gq1 = /\(error: (.*)\)/,
Zq1 = /captureMessage|captureException/
function wq1(...I) {
let G = I.sort((Z, d) => Z[0] - d[0]).map((Z) => Z[1])
return (Z, d = 0) => {
let W = [],
w = Z.split(`
`)
for (let B = d; B < w.length; B++) {
let C = w[B]
if (C.length > 1024) continue
let V = Gq1.test(C) ? C.replace(Gq1, '$1') : C
if (V.match(/\S*Error: /)) continue
for (let A of G) {
let X = A(V)
if (X) {
W.push(X)
break
}
}
if (W.length >= Wq1) break
}
return Bq1(W)
}
}
function jS2(I) {
if (Array.isArray(I)) return wq1(...I)
return I
}
function Bq1(I) {
if (!I.length) return []
let G = Array.from(I)
if (/sentryWrapped/.test(G[G.length - 1].function || '')) G.pop()
if ((G.reverse(), Zq1.test(G[G.length - 1].function || ''))) {
if ((G.pop(), Zq1.test(G[G.length - 1].function || ''))) G.pop()
}
return G.slice(0, Wq1).map((Z) => ({
...Z,
filename: Z.filename || G[G.length - 1].filename,
function: Z.function || '?',
}))
}
var st = '<anonymous>'
function kS2(I) {
try {
if (!I || typeof I !== 'function') return st
return I.name || st
} catch (G) {
return st
}
}
function hS2(I) {
return [90, dq1.node(I)]
}
Cq1.filenameIsInApp = dq1.filenameIsInApp
Cq1.createStackParser = wq1
Cq1.getFunctionName = kS2
Cq1.nodeStackLineParser = hS2
Cq1.stackParserFromStackParserOptions = jS2
Cq1.stripSentryFramesAndReverse = Bq1
})
var $V = _((Aq1) => {
Object.defineProperty(Aq1, '__esModule', { value: !0 })
var rS2 = YB(),
sS2 = NW(),
oS2 = kT(),
yN = {},
Vq1 = {}
function eS2(I, G) {
;(yN[I] = yN[I] || []), yN[I].push(G)
}
function tS2() {
Object.keys(yN).forEach((I) => {
yN[I] = void 0
})
}
function IL2(I, G) {
if (!Vq1[I]) G(), (Vq1[I] = !0)
}
function GL2(I, G) {
let Z = I && yN[I]
if (!Z) return
for (let d of Z)
try {
d(G)
} catch (W) {
rS2.DEBUG_BUILD &&
sS2.logger.error(
`Error while triggering instrumentation handler.
Type: ${I}
Name: ${oS2.getFunctionName(d)}
Error:`,
W,
)
}
}
Aq1.addHandler = eS2
Aq1.maybeInstrument = IL2
Aq1.resetInstrumentationHandlers = tS2
Aq1.triggerHandlers = GL2
})
var tt = _((Xq1) => {
Object.defineProperty(Xq1, '__esModule', { value: !0 })
var ot = NW(),
BL2 = oZ(),
hT = q7(),
et = $V()
function CL2(I) {
et.addHandler('console', I), et.maybeInstrument('console', VL2)
}
function VL2() {
if (!('console' in hT.GLOBAL_OBJ)) return
ot.CONSOLE_LEVELS.forEach(function (I) {
if (!(I in hT.GLOBAL_OBJ.console)) return
BL2.fill(hT.GLOBAL_OBJ.console, I, function (G) {
return (
(ot.originalConsoleMethods[I] = G),
function (...Z) {
let d = { args: Z, level: I }
et.triggerHandlers('console', d)
let W = ot.originalConsoleMethods[I]
W && W.apply(hT.GLOBAL_OBJ.console, Z)
}
)
})
})
}
Xq1.addConsoleInstrumentationHandler = CL2
})
var eE = _((_q1) => {
Object.defineProperty(_q1, '__esModule', { value: !0 })
var XL2 = oZ(),
I11 = sE(),
YL2 = q7()
function _L2() {
let I = YL2.GLOBAL_OBJ,
G = I.crypto || I.msCrypto,
Z = () => Math.random() * 16
try {
if (G && G.randomUUID) return G.randomUUID().replace(/-/g, '')
if (G && G.getRandomValues)
Z = () => {
let d = new Uint8Array(1)
return G.getRandomValues(d), d[0]
}
} catch (d) {}
return ([1e7] + 1000 + 4000 + 8000 + 100000000000).replace(/[018]/g, (d) =>
(d ^ ((Z() & 15) >> (d / 4))).toString(16),
)
}
function Yq1(I) {
return I.exception && I.exception.values ? I.exception.values[0] : void 0
}
function DL2(I) {
let { message: G, event_id: Z } = I
if (G) return G
let d = Yq1(I)
if (d) {
if (d.type && d.value) return `${d.type}: ${d.value}`
return d.type || d.value || Z || '<unknown>'
}
return Z || '<unknown>'
}
function HL2(I, G, Z) {
let d = (I.exception = I.exception || {}),
W = (d.values = d.values || []),
w = (W[0] = W[0] || {})
if (!w.value) w.value = G || ''
if (!w.type) w.type = Z || 'Error'
}
function FL2(I, G) {
let Z = Yq1(I)
if (!Z) return
let d = { type: 'generic', handled: !0 },
W = Z.mechanism
if (((Z.mechanism = { ...d, ...W, ...G }), G && 'data' in G)) {
let w = { ...(W && W.data), ...G.data }
Z.mechanism.data = w
}
}
var JL2 =
/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/
function KL2(I) {
let G = I.match(JL2) || [],
Z = parseInt(G[1], 10),
d = parseInt(G[2], 10),
W = parseInt(G[3], 10)
return {
buildmetadata: G[5],
major: isNaN(Z) ? void 0 : Z,
minor: isNaN(d) ? void 0 : d,
patch: isNaN(W) ? void 0 : W,
prerelease: G[4],
}
}
function gL2(I, G, Z = 5) {
if (G.lineno === void 0) return
let d = I.length,
W = Math.max(Math.min(d - 1, G.lineno - 1), 0)
;(G.pre_context = I.slice(Math.max(0, W - Z), W).map((w) => I11.snipLine(w, 0))),
(G.context_line = I11.snipLine(I[Math.min(d - 1, W)], G.colno || 0)),
(G.post_context = I.slice(Math.min(W + 1, d), W + 1 + Z).map((w) => I11.snipLine(w, 0)))
}
function NL2(I) {
if (I && I.__sentry_captured__) return !0
try {
XL2.addNonEnumerableProperty(I, '__sentry_captured__', !0)
} catch (G) {}
return !1
}
function zL2(I) {
return Array.isArray(I) ? I : [I]
}
_q1.addContextToFrame = gL2
_q1.addExceptionMechanism = FL2
_q1.addExceptionTypeValue = HL2
_q1.arrayify = zL2
_q1.checkOrSetAlreadyCaught = NL2
_q1.getEventDescription = DL2
_q1.parseSemver = KL2
_q1.uuid4 = _L2
})
var W11 = _((Jq1) => {
Object.defineProperty(Jq1, '__esModule', { value: !0 })
var SL2 = eE(),
xT = oZ(),
LL2 = q7(),
G11 = $V(),
PN = LL2.GLOBAL_OBJ,
$L2 = 1000,
Dq1,
Z11,
d11
function yL2(I) {
G11.addHandler('dom', I), G11.maybeInstrument('dom', Fq1)
}
function Fq1() {
if (!PN.document) return
let I = G11.triggerHandlers.bind(null, 'dom'),
G = Hq1(I, !0)
PN.document.addEventListener('click', G, !1),
PN.document.addEventListener('keypress', G, !1),
['EventTarget', 'Node'].forEach((Z) => {
let d = PN[Z] && PN[Z].prototype
if (!d || !d.hasOwnProperty || !d.hasOwnProperty('addEventListener')) return
xT.fill(d, 'addEventListener', function (W) {
return function (w, B, C) {
if (w === 'click' || w == 'keypress')
try {
let V = this,
A = (V.__sentry_instrumentation_handlers__ =
V.__sentry_instrumentation_handlers__ || {}),
X = (A[w] = A[w] || { refCount: 0 })
if (!X.handler) {
let Y = Hq1(I)
;(X.handler = Y), W.call(this, w, Y, C)
}
X.refCount++
} catch (V) {}
return W.call(this, w, B, C)
}
}),
xT.fill(d, 'removeEventListener', function (W) {
return function (w, B, C) {
if (w === 'click' || w == 'keypress')
try {
let V = this,
A = V.__sentry_instrumentation_handlers__ || {},
X = A[w]
if (X) {
if ((X.refCount--, X.refCount <= 0))
W.call(this, w, X.handler, C), (X.handler = void 0), delete A[w]
if (Object.keys(A).length === 0) delete V.__sentry_instrumentation_handlers__
}
} catch (V) {}
return W.call(this, w, B, C)
}
})
})
}
function PL2(I) {
if (I.type !== Z11) return !1
try {
if (!I.target || I.target._sentryId !== d11) return !1
} catch (G) {}
return !0
}
function OL2(I, G) {
if (I !== 'keypress') return !1
if (!G || !G.tagName) return !0
if (G.tagName === 'INPUT' || G.tagName === 'TEXTAREA' || G.isContentEditable) return !1
return !0
}
function Hq1(I, G = !1) {
return (Z) => {
if (!Z || Z._sentryCaptured) return
let d = uL2(Z)
if (OL2(Z.type, d)) return
if ((xT.addNonEnumerableProperty(Z, '_sentryCaptured', !0), d && !d._sentryId))
xT.addNonEnumerableProperty(d, '_sentryId', SL2.uuid4())
let W = Z.type === 'keypress' ? 'input' : Z.type
if (!PL2(Z))
I({ event: Z, name: W, global: G }), (Z11 = Z.type), (d11 = d ? d._sentryId : void 0)
clearTimeout(Dq1),
(Dq1 = PN.setTimeout(() => {
;(d11 = void 0), (Z11 = void 0)
}, $L2))
}
}
function uL2(I) {
try {
return I.target
} catch (G) {
return null
}
}
Jq1.addClickKeypressInstrumentationHandler = yL2
Jq1.instrumentDOM = Fq1
})
var C11 = _((Kq1) => {
Object.defineProperty(Kq1, '__esModule', { value: !0 })
var bL2 = YB(),
lL2 = NW(),
jL2 = q7(),
cT = jL2.getGlobalObject()
function kL2() {
try {
return new ErrorEvent(''), !0
} catch (I) {
return !1
}
}
function hL2() {
try {
return new DOMError(''), !0
} catch (I) {
return !1
}
}
function xL2() {
try {
return new DOMException(''), !0
} catch (I) {
return !1
}
}
function B11() {
if (!('fetch' in cT)) return !1
try {
return new Request('http://www.example.com'), !0
} catch (I) {
return !1
}
}
function w11(I) {
return I && /^function fetch\(\)\s+\{\s+\[native code\]\s+\}$/.test(I.toString())
}
function cL2() {
if (typeof EdgeRuntime === 'string') return !0
if (!B11()) return !1
if (w11(cT.fetch)) return !0
let I = !1,
G = cT.document
if (G && typeof G.createElement === 'function')
try {
let Z = G.createElement('iframe')
if (((Z.hidden = !0), G.head.appendChild(Z), Z.contentWindow && Z.contentWindow.fetch))
I = w11(Z.contentWindow.fetch)
G.head.removeChild(Z)
} catch (Z) {
bL2.DEBUG_BUILD &&
lL2.logger.warn(
'Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ',
Z,
)
}
return I
}
function pL2() {
return 'ReportingObserver' in cT
}
function iL2() {
if (!B11()) return !1
try {
return new Request('_', { referrerPolicy: 'origin' }), !0
} catch (I) {
return !1
}
}
Kq1.isNativeFetch = w11
Kq1.supportsDOMError = hL2
Kq1.supportsDOMException = xL2
Kq1.supportsErrorEvent = kL2
Kq1.supportsFetch = B11
Kq1.supportsNativeFetch = cL2
Kq1.supportsReferrerPolicy = iL2
Kq1.supportsReportingObserver = pL2
})
var A11 = _((Qq1) => {
Object.defineProperty(Qq1, '__esModule', { value: !0 })
var G$2 = oZ(),
Z$2 = C11(),
gq1 = q7(),
tE = $V()
function d$2(I) {
tE.addHandler('fetch', I), tE.maybeInstrument('fetch', W$2)
}
function W$2() {
if (!Z$2.supportsNativeFetch()) return
G$2.fill(gq1.GLOBAL_OBJ, 'fetch', function (I) {
return function (...G) {
let { method: Z, url: d } = zq1(G),
W = { args: G, fetchData: { method: Z, url: d }, startTimestamp: Date.now() }
return (
tE.triggerHandlers('fetch', { ...W }),
I.apply(gq1.GLOBAL_OBJ, G).then(
(w) => {
let B = { ...W, endTimestamp: Date.now(), response: w }
return tE.triggerHandlers('fetch', B), w
},
(w) => {
let B = { ...W, endTimestamp: Date.now(), error: w }
throw (tE.triggerHandlers('fetch', B), w)
},
)
)
}
})
}
function V11(I, G) {
return !!I && typeof I === 'object' && !!I[G]
}
function Nq1(I) {
if (typeof I === 'string') return I
if (!I) return ''
if (V11(I, 'url')) return I.url
if (I.toString) return I.toString()
return ''
}
function zq1(I) {
if (I.length === 0) return { method: 'GET', url: '' }
if (I.length === 2) {
let [Z, d] = I
return { url: Nq1(Z), method: V11(d, 'method') ? String(d.method).toUpperCase() : 'GET' }
}
let G = I[0]
return { url: Nq1(G), method: V11(G, 'method') ? String(G.method).toUpperCase() : 'GET' }
}
Qq1.addFetchInstrumentationHandler = d$2
Qq1.parseFetchArgs = zq1
})
var _11 = _((qq1) => {
Object.defineProperty(qq1, '__esModule', { value: !0 })
var X11 = q7(),
Y11 = $V(),
pT = null
function C$2(I) {
Y11.addHandler('error', I), Y11.maybeInstrument('error', V$2)
}
function V$2() {
;(pT = X11.GLOBAL_OBJ.onerror),
(X11.GLOBAL_OBJ.onerror = function (I, G, Z, d, W) {
let w = { column: d, error: W, line: Z, msg: I, url: G }
if ((Y11.triggerHandlers('error', w), pT && !pT.__SENTRY_LOADER__))
return pT.apply(this, arguments)
return !1
}),
(X11.GLOBAL_OBJ.onerror.__SENTRY_INSTRUMENTED__ = !0)
}
qq1.addGlobalErrorInstrumentationHandler = C$2
})
var F11 = _((Uq1) => {
Object.defineProperty(Uq1, '__esModule', { value: !0 })
var D11 = q7(),
H11 = $V(),
iT = null
function X$2(I) {
H11.addHandler('unhandledrejection', I), H11.maybeInstrument('unhandledrejection', Y$2)
}
function Y$2() {
;(iT = D11.GLOBAL_OBJ.onunhandledrejection),
(D11.GLOBAL_OBJ.onunhandledrejection = function (I) {
let G = I
if ((H11.triggerHandlers('unhandledrejection', G), iT && !iT.__SENTRY_LOADER__))
return iT.apply(this, arguments)
return !0
}),
(D11.GLOBAL_OBJ.onunhandledrejection.__SENTRY_INSTRUMENTED__ = !0)
}
Uq1.addGlobalUnhandledRejectionInstrumentationHandler = X$2
})
var J11 = _((fq1) => {
Object.defineProperty(fq1, '__esModule', { value: !0 })
var D$2 = q7(),
nT = D$2.getGlobalObject()
function H$2() {
let I = nT.chrome,
G = I && I.app && I.app.runtime,
Z = 'history' in nT && !!nT.history.pushState && !!nT.history.replaceState
return !G && Z
}
fq1.supportsHistory = H$2
})
var K11 = _((Eq1) => {
Object.defineProperty(Eq1, '__esModule', { value: !0 })
var Rq1 = oZ()
YB()
NW()
var J$2 = q7(),
K$2 = J11(),
rT = $V(),
Iv = J$2.GLOBAL_OBJ,
aT
function g$2(I) {
rT.addHandler('history', I), rT.maybeInstrument('history', N$2)
}
function N$2() {
if (!K$2.supportsHistory()) return
let I = Iv.onpopstate
Iv.onpopstate = function (...Z) {
let d = Iv.location.href,
W = aT
aT = d
let w = { from: W, to: d }
if ((rT.triggerHandlers('history', w), I))
try {
return I.apply(this, Z)
} catch (B) {}
}
function G(Z) {
return function (...d) {
let W = d.length > 2 ? d[2] : void 0
if (W) {
let w = aT,
B = String(W)
aT = B
let C = { from: w, to: B }
rT.triggerHandlers('history', C)
}
return Z.apply(this, d)
}
}
Rq1.fill(Iv.history, 'pushState', G), Rq1.fill(Iv.history, 'replaceState', G)
}
Eq1.addHistoryInstrumentationHandler = g$2
})
var g11 = _((Mq1) => {
Object.defineProperty(Mq1, '__esModule', { value: !0 })
var oT = sZ(),
sT = oZ(),
Q$2 = q7(),
eT = $V(),
q$2 = Q$2.GLOBAL_OBJ,
Gv = '__sentry_xhr_v3__'
function U$2(I) {
eT.addHandler('xhr', I), eT.maybeInstrument('xhr', vq1)
}
function vq1() {
if (!q$2.XMLHttpRequest) return
let I = XMLHttpRequest.prototype
sT.fill(I, 'open', function (G) {
return function (...Z) {
let d = Date.now(),
W = oT.isString(Z[0]) ? Z[0].toUpperCase() : void 0,
w = f$2(Z[1])
if (!W || !w) return G.apply(this, Z)
if (
((this[Gv] = { method: W, url: w, request_headers: {} }),
W === 'POST' && w.match(/sentry_key/))
)
this.__sentry_own_request__ = !0
let B = () => {
let C = this[Gv]
if (!C) return
if (this.readyState === 4) {
try {
C.status_code = this.status
} catch (A) {}
let V = { args: [W, w], endTimestamp: Date.now(), startTimestamp: d, xhr: this }
eT.triggerHandlers('xhr', V)
}
}
if ('onreadystatechange' in this && typeof this.onreadystatechange === 'function')
sT.fill(this, 'onreadystatechange', function (C) {
return function (...V) {
return B(), C.apply(this, V)
}
})
else this.addEventListener('readystatechange', B)
return (
sT.fill(this, 'setRequestHeader', function (C) {
return function (...V) {
let [A, X] = V,
Y = this[Gv]
if (Y && oT.isString(A) && oT.isString(X)) Y.request_headers[A.toLowerCase()] = X
return C.apply(this, V)
}
}),
G.apply(this, Z)
)
}
}),
sT.fill(I, 'send', function (G) {
return function (...Z) {
let d = this[Gv]
if (!d) return G.apply(this, Z)
if (Z[0] !== void 0) d.body = Z[0]
let W = { args: [d.method, d.url], startTimestamp: Date.now(), xhr: this }
return eT.triggerHandlers('xhr', W), G.apply(this, Z)
}
})
}
function f$2(I) {
if (oT.isString(I)) return I
try {
return I.toString()
} catch (G) {}
return
}
Mq1.SENTRY_XHR_DATA_KEY = Gv
Mq1.addXhrInstrumentationHandler = U$2
Mq1.instrumentXHR = vq1
})
var Tq1 = _((uq1) => {
Object.defineProperty(uq1, '__esModule', { value: !0 })
var M$2 = YB(),
S$2 = NW(),
Sq1 = tt(),
Lq1 = W11(),
$q1 = A11(),
yq1 = _11(),
Pq1 = F11(),
Oq1 = K11(),
N11 = g11()
function L$2(I, G) {
switch (I) {
case 'console':
return Sq1.addConsoleInstrumentationHandler(G)
case 'dom':
return Lq1.addClickKeypressInstrumentationHandler(G)
case 'xhr':
return N11.addXhrInstrumentationHandler(G)
case 'fetch':
return $q1.addFetchInstrumentationHandler(G)
case 'history':
return Oq1.addHistoryInstrumentationHandler(G)
case 'error':
return yq1.addGlobalErrorInstrumentationHandler(G)
case 'unhandledrejection':
return Pq1.addGlobalUnhandledRejectionInstrumentationHandler(G)
default:
M$2.DEBUG_BUILD && S$2.logger.warn('unknown instrumentation type:', I)
}
}
uq1.addConsoleInstrumentationHandler = Sq1.addConsoleInstrumentationHandler
uq1.addClickKeypressInstrumentationHandler = Lq1.addClickKeypressInstrumentationHandler
uq1.addFetchInstrumentationHandler = $q1.addFetchInstrumentationHandler
uq1.addGlobalErrorInstrumentationHandler = yq1.addGlobalErrorInstrumentationHandler
uq1.addGlobalUnhandledRejectionInstrumentationHandler =
Pq1.addGlobalUnhandledRejectionInstrumentationHandler
uq1.addHistoryInstrumentationHandler = Oq1.addHistoryInstrumentationHandler
uq1.SENTRY_XHR_DATA_KEY = N11.SENTRY_XHR_DATA_KEY
uq1.addXhrInstrumentationHandler = N11.addXhrInstrumentationHandler
uq1.addInstrumentationHandler = L$2
})
var z11 = _((mq1) => {
Object.defineProperty(mq1, '__esModule', { value: !0 })
function j$2() {
return typeof __SENTRY_BROWSER_BUNDLE__ !== 'undefined' && !!__SENTRY_BROWSER_BUNDLE__
}
function k$2() {
return 'npm'
}
mq1.getSDKSource = k$2
mq1.isBrowserBundle = j$2
})
var Q11 = _((bq1, Im) => {
Object.defineProperty(bq1, '__esModule', { value: !0 })
var c$2 = z11()
function p$2() {
return (
!c$2.isBrowserBundle() &&
Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) ===
'[object process]'
)
}
function tT(I, G) {
return I.require(G)
}
function i$2(I) {
let G
try {
G = tT(Im, I)
} catch (Z) {}
try {
let { cwd: Z } = tT(Im, 'process')
G = tT(Im, `${Z()}/node_modules/${I}`)
} catch (Z) {}
return G
}
bq1.dynamicRequire = tT
bq1.isNodeEnv = p$2
bq1.loadModule = i$2
})
var kq1 = _((jq1) => {
Object.defineProperty(jq1, '__esModule', { value: !0 })
var s$2 = Q11(),
lq1 = q7()
function o$2() {
return typeof window !== 'undefined' && (!s$2.isNodeEnv() || e$2())
}
function e$2() {
return lq1.GLOBAL_OBJ.process !== void 0 && lq1.GLOBAL_OBJ.process.type === 'renderer'
}
jq1.isBrowser = o$2
})
var q11 = _((hq1) => {
Object.defineProperty(hq1, '__esModule', { value: !0 })
function Iy2() {
let I = typeof WeakSet === 'function',
G = I ? new WeakSet() : []
function Z(W) {
if (I) {
if (G.has(W)) return !0
return G.add(W), !1
}
for (let w = 0; w < G.length; w++) if (G[w] === W) return !0
return G.push(W), !1
}
function d(W) {
if (I) G.delete(W)
else
for (let w = 0; w < G.length; w++)
if (G[w] === W) {
G.splice(w, 1)
break
}
}
return [Z, d]
}
hq1.memoBuilder = Iy2
})
var Zv = _((pq1) => {
Object.defineProperty(pq1, '__esModule', { value: !0 })
var U11 = sZ(),
Zy2 = q11(),
dy2 = oZ(),
Wy2 = kT()
function xq1(I, G = 100, Z = 1 / 0) {
try {
return Gm('', I, G, Z)
} catch (d) {
return { ERROR: `**non-serializable** (${d})` }
}
}
function cq1(I, G = 3, Z = 102400) {
let d = xq1(I, G)
if (Vy2(d) > Z) return cq1(I, G - 1, Z)
return d
}
function Gm(I, G, Z = 1 / 0, d = 1 / 0, W = Zy2.memoBuilder()) {
let [w, B] = W
if (G == null || (['number', 'boolean', 'string'].includes(typeof G) && !U11.isNaN(G))) return G
let C = wy2(I, G)
if (!C.startsWith('[object ')) return C
if (G.__sentry_skip_normalization__) return G
let V =
typeof G.__sentry_override_normalization_depth__ === 'number'
? G.__sentry_override_normalization_depth__
: Z
if (V === 0) return C.replace('object ', '')
if (w(G)) return '[Circular ~]'
let A = G
if (A && typeof A.toJSON === 'function')
try {
let J = A.toJSON()
return Gm('', J, V - 1, d, W)
} catch (J) {}
let X = Array.isArray(G) ? [] : {},
Y = 0,
H = dy2.convertToPlainObject(G)
for (let J in H) {
if (!Object.prototype.hasOwnProperty.call(H, J)) continue
if (Y >= d) {
X[J] = '[MaxProperties ~]'
break
}
let K = H[J]
;(X[J] = Gm(J, K, V - 1, d, W)), Y++
}
return B(G), X
}
function wy2(I, G) {
try {
if (I === 'domain' && G && typeof G === 'object' && G._events) return '[Domain]'
if (I === 'domainEmitter') return '[DomainEmitter]'
if (typeof global !== 'undefined' && G === global) return '[Global]'
if (typeof window !== 'undefined' && G === window) return '[Window]'
if (typeof document !== 'undefined' && G === document) return '[Document]'
if (U11.isVueViewModel(G)) return '[VueViewModel]'
if (U11.isSyntheticEvent(G)) return '[SyntheticEvent]'
if (typeof G === 'number' && G !== G) return '[NaN]'
if (typeof G === 'function') return `[Function: ${Wy2.getFunctionName(G)}]`
if (typeof G === 'symbol') return `[${String(G)}]`
if (typeof G === 'bigint') return `[BigInt: ${String(G)}]`
let Z = By2(G)
if (/^HTML(\w*)Element$/.test(Z)) return `[HTMLElement: ${Z}]`
return `[object ${Z}]`
} catch (Z) {
return `**non-serializable** (${Z})`
}
}
function By2(I) {
let G = Object.getPrototypeOf(I)
return G ? G.constructor.name : 'null prototype'
}
function Cy2(I) {
return ~-encodeURI(I).split(/%..|./).length
}
function Vy2(I) {
return Cy2(JSON.stringify(I))
}
function Ay2(I, G) {
let Z = G.replace(/\\/g, '/').replace(/[|\\{}()[\]^$+*?.]/g, '\\$&'),
d = I
try {
d = decodeURI(I)
} catch (W) {}
return d
.replace(/\\/g, '/')
.replace(/webpack:\/?/g, '')
.replace(new RegExp(`(file://)?/*${Z}/*`, 'ig'), 'app:///')
}
pq1.normalize = xq1
pq1.normalizeToSize = cq1
pq1.normalizeUrlToBase = Ay2
pq1.walk = Gm
})
var eq1 = _((oq1) => {
Object.defineProperty(oq1, '__esModule', { value: !0 })
function nq1(I, G) {
let Z = 0
for (let d = I.length - 1; d >= 0; d--) {
let W = I[d]
if (W === '.') I.splice(d, 1)
else if (W === '..') I.splice(d, 1), Z++
else if (Z) I.splice(d, 1), Z--
}
if (G) for (; Z--; Z) I.unshift('..')
return I
}
var Hy2 = /^(\S+:\\|\/?)([\s\S]*?)((?:\.{1,2}|[^/\\]+?|)(\.[^./\\]*|))(?:[/\\]*)$/
function aq1(I) {
let G = I.length > 1024 ? `<truncated>${I.slice(-1024)}` : I,
Z = Hy2.exec(G)
return Z ? Z.slice(1) : []
}
function f11(...I) {
let G = '',
Z = !1
for (let d = I.length - 1; d >= -1 && !Z; d--) {
let W = d >= 0 ? I[d] : '/'
if (!W) continue
;(G = `${W}/${G}`), (Z = W.charAt(0) === '/')
}
return (
(G = nq1(
G.split('/').filter((d) => !!d),
!Z,
).join('/')),
(Z ? '/' : '') + G || '.'
)
}
function iq1(I) {
let G = 0
for (; G < I.length; G++) if (I[G] !== '') break
let Z = I.length - 1
for (; Z >= 0; Z--) if (I[Z] !== '') break
if (G > Z) return []
return I.slice(G, Z - G + 1)
}
function Fy2(I, G) {
;(I = f11(I).slice(1)), (G = f11(G).slice(1))
let Z = iq1(I.split('/')),
d = iq1(G.split('/')),
W = Math.min(Z.length, d.length),
w = W
for (let C = 0; C < W; C++)
if (Z[C] !== d[C]) {
w = C
break
}
let B = []
for (let C = w; C < Z.length; C++) B.push('..')
return (B = B.concat(d.slice(w))), B.join('/')
}
function rq1(I) {
let G = sq1(I),
Z = I.slice(-1) === '/',
d = nq1(
I.split('/').filter((W) => !!W),
!G,
).join('/')
if (!d && !G) d = '.'
if (d && Z) d += '/'
return (G ? '/' : '') + d
}
function sq1(I) {
return I.charAt(0) === '/'
}
function Jy2(...I) {
return rq1(I.join('/'))
}
function Ky2(I) {
let G = aq1(I),
Z = G[0],
d = G[1]
if (!Z && !d) return '.'
if (d) d = d.slice(0, d.length - 1)
return Z + d
}
function gy2(I, G) {
let Z = aq1(I)[2]
if (G && Z.slice(G.length * -1) === G) Z = Z.slice(0, Z.length - G.length)
return Z
}
oq1.basename = gy2
oq1.dirname = Ky2
oq1.isAbsolute = sq1
oq1.join = Jy2
oq1.normalizePath = rq1
oq1.relative = Fy2
oq1.resolve = f11
})
var R11 = _((tq1) => {
Object.defineProperty(tq1, '__esModule', { value: !0 })
var Ey2 = sZ(),
yV
;(function (I) {
I[(I.PENDING = 0)] = 'PENDING'
let Z = 1
I[(I.RESOLVED = Z)] = 'RESOLVED'
let d = 2
I[(I.REJECTED = d)] = 'REJECTED'
})(yV || (yV = {}))
function vy2(I) {
return new _B((G) => {
G(I)
})
}
function My2(I) {
return new _B((G, Z) => {
Z(I)
})
}
class _B {
constructor(I) {
_B.prototype.__init.call(this),
_B.prototype.__init2.call(this),
_B.prototype.__init3.call(this),
_B.prototype.__init4.call(this),
(this._state = yV.PENDING),
(this._handlers = [])
try {
I(this._resolve, this._reject)
} catch (G) {
this._reject(G)
}
}
then(I, G) {
return new _B((Z, d) => {
this._handlers.push([
!1,
(W) => {
if (!I) Z(W)
else
try {
Z(I(W))
} catch (w) {
d(w)
}
},
(W) => {
if (!G) d(W)
else
try {
Z(G(W))
} catch (w) {
d(w)
}
},
]),
this._executeHandlers()
})
}
catch(I) {
return this.then((G) => G, I)
}
finally(I) {
return new _B((G, Z) => {
let d, W
return this.then(
(w) => {
if (((W = !1), (d = w), I)) I()
},
(w) => {
if (((W = !0), (d = w), I)) I()
},
).then(() => {
if (W) {
Z(d)
return
}
G(d)
})
})
}
__init() {
this._resolve = (I) => {
this._setResult(yV.RESOLVED, I)
}
}
__init2() {
this._reject = (I) => {
this._setResult(yV.REJECTED, I)
}
}
__init3() {
this._setResult = (I, G) => {
if (this._state !== yV.PENDING) return
if (Ey2.isThenable(G)) {
G.then(this._resolve, this._reject)
return
}
;(this._state = I), (this._value = G), this._executeHandlers()
}
}
__init4() {
this._executeHandlers = () => {
if (this._state === yV.PENDING) return
let I = this._handlers.slice()
;(this._handlers = []),
I.forEach((G) => {
if (G[0]) return
if (this._state === yV.RESOLVED) G[1](this._value)
if (this._state === yV.REJECTED) G[2](this._value)
G[0] = !0
})
}
}
}
tq1.SyncPromise = _B
tq1.rejectedSyncPromise = My2
tq1.resolvedSyncPromise = vy2
})
var GU1 = _((IU1) => {
Object.defineProperty(IU1, '__esModule', { value: !0 })
var yy2 = at(),
E11 = R11()
function Py2(I) {
let G = []
function Z() {
return I === void 0 || G.length < I
}
function d(B) {
return G.splice(G.indexOf(B), 1)[0]
}
function W(B) {
if (!Z())
return E11.rejectedSyncPromise(
new yy2.SentryError('Not adding Promise because buffer limit was reached.'),
)
let C = B()
if (G.indexOf(C) === -1) G.push(C)
return C.then(() => d(C)).then(null, () => d(C).then(null, () => {})), C
}
function w(B) {
return new E11.SyncPromise((C, V) => {
let A = G.length
if (!A) return C(!0)
let X = setTimeout(() => {
if (B && B > 0) C(!1)
}, B)
G.forEach((Y) => {
E11.resolvedSyncPromise(Y).then(() => {
if (!--A) clearTimeout(X), C(!0)
}, V)
})
})
}
return { $: G, add: W, drain: w }
}
IU1.makePromiseBuffer = Py2
})
var dU1 = _((ZU1) => {
Object.defineProperty(ZU1, '__esModule', { value: !0 })
function uy2(I) {
let G = {},
Z = 0
while (Z < I.length) {
let d = I.indexOf('=', Z)
if (d === -1) break
let W = I.indexOf(';', Z)
if (W === -1) W = I.length
else if (W < d) {
Z = I.lastIndexOf(';', d - 1) + 1
continue
}
let w = I.slice(Z, d).trim()
if (G[w] === void 0) {
let B = I.slice(d + 1, W).trim()
if (B.charCodeAt(0) === 34) B = B.slice(1, -1)
try {
G[w] = B.indexOf('%') !== -1 ? decodeURIComponent(B) : B
} catch (C) {
G[w] = B
}
}
Z = W + 1
}
return G
}
ZU1.parseCookie = uy2
})
var v11 = _((WU1) => {
Object.defineProperty(WU1, '__esModule', { value: !0 })
function my2(I) {
if (!I) return {}
let G = I.match(/^(([^:/?#]+):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/)
if (!G) return {}
let Z = G[6] || '',
d = G[8] || ''
return { host: G[4], path: G[5], protocol: G[2], search: Z, hash: d, relative: G[5] + Z + d }
}
function by2(I) {
return I.split(/[\?#]/, 1)[0]
}
function ly2(I) {
return I.split(/\\?\//).filter((G) => G.length > 0 && G !== ',').length
}
function jy2(I) {
let { protocol: G, host: Z, path: d } = I,
W =
(Z &&
Z.replace(/^.*@/, '[filtered]:[filtered]@')
.replace(/(:80)$/, '')
.replace(/(:443)$/, '')) ||
''
return `${G ? `${G}://` : ''}${W}${d}`
}
WU1.getNumberOfUrlSegments = ly2
WU1.getSanitizedUrlString = jy2
WU1.parseUrl = my2
WU1.stripUrlQueryAndFragment = by2
})
var XU1 = _((AU1) => {
Object.defineProperty(AU1, '__esModule', { value: !0 })
var py2 = dU1(),
iy2 = YB(),
wU1 = sZ(),
ny2 = NW(),
ay2 = Zv(),
ry2 = v11(),
sy2 = { ip: !1, request: !0, transaction: !0, user: !0 },
oy2 = ['cookies', 'data', 'headers', 'method', 'query_string', 'url'],
BU1 = ['id', 'username', 'email']
function ey2(I, G, Z) {
if (!I) return
if (!I.metadata.source || I.metadata.source === 'url') {
let [d, W] = Zm(G, { path: !0, method: !0 })
I.updateName(d), I.setMetadata({ source: W })
}
if ((I.setAttribute('url', G.originalUrl || G.url), G.baseUrl))
I.setAttribute('baseUrl', G.baseUrl)
I.setData('query', CU1(G, Z))
}
function Zm(I, G = {}) {
let Z = I.method && I.method.toUpperCase(),
d = '',
W = 'url'
if (G.customRoute || I.route)
(d = G.customRoute || `${I.baseUrl || ''}${I.route && I.route.path}`), (W = 'route')
else if (I.originalUrl || I.url) d = ry2.stripUrlQueryAndFragment(I.originalUrl || I.url || '')
let w = ''
if (G.method && Z) w += Z
if (G.method && G.path) w += ' '
if (G.path && d) w += d
return [w, W]
}
function ty2(I, G) {
switch (G) {
case 'path':
return Zm(I, { path: !0 })[0]
case 'handler':
return (
(I.route && I.route.stack && I.route.stack[0] && I.route.stack[0].name) || '<anonymous>'
)
case 'methodPath':
default: {
let Z = I._reconstructedRoute ? I._reconstructedRoute : void 0
return Zm(I, { path: !0, method: !0, customRoute: Z })[0]
}
}
}
function IP2(I, G) {
let Z = {}
return (
(Array.isArray(G) ? G : BU1).forEach((W) => {
if (I && W in I) Z[W] = I[W]
}),
Z
)
}
function M11(I, G) {
let { include: Z = oy2, deps: d } = G || {},
W = {},
w = I.headers || {},
B = I.method,
C = w.host || I.hostname || I.host || '<no host>',
V = I.protocol === 'https' || (I.socket && I.socket.encrypted) ? 'https' : 'http',
A = I.originalUrl || I.url || '',
X = A.startsWith(V) ? A : `${V}://${C}${A}`
return (
Z.forEach((Y) => {
switch (Y) {
case 'headers': {
if (((W.headers = w), !Z.includes('cookies'))) delete W.headers.cookie
break
}
case 'method': {
W.method = B
break
}
case 'url': {
W.url = X
break
}
case 'cookies': {
W.cookies = I.cookies || (w.cookie && py2.parseCookie(w.cookie)) || {}
break
}
case 'query_string': {
W.query_string = CU1(I, d)
break
}
case 'data': {
if (B === 'GET' || B === 'HEAD') break
if (I.body !== void 0)
W.data = wU1.isString(I.body) ? I.body : JSON.stringify(ay2.normalize(I.body))
break
}
default:
if ({}.hasOwnProperty.call(I, Y)) W[Y] = I[Y]
}
}),
W
)
}
function GP2(I, G, Z) {
let d = { ...sy2, ...(Z && Z.include) }
if (d.request) {
let W = Array.isArray(d.request)
? M11(G, { include: d.request, deps: Z && Z.deps })
: M11(G, { deps: Z && Z.deps })
I.request = { ...I.request, ...W }
}
if (d.user) {
let W = G.user && wU1.isPlainObject(G.user) ? IP2(G.user, d.user) : {}
if (Object.keys(W).length) I.user = { ...I.user, ...W }
}
if (d.ip) {
let W = G.ip || (G.socket && G.socket.remoteAddress)
if (W) I.user = { ...I.user, ip_address: W }
}
if (d.transaction && !I.transaction) I.transaction = ty2(G, d.transaction)
return I
}
function CU1(I, G) {
let Z = I.originalUrl || I.url || ''
if (!Z) return
if (Z.startsWith('/')) Z = `http://dogs.are.great${Z}`
try {
return (
I.query ||
(typeof URL !== 'undefined' && new URL(Z).search.slice(1)) ||
(G && G.url && G.url.parse(Z).query) ||
void 0
)
} catch (d) {
return
}
}
function VU1(I) {
let G = {}
try {
I.forEach((Z, d) => {
if (typeof Z === 'string') G[d] = Z
})
} catch (Z) {
iy2.DEBUG_BUILD &&
ny2.logger.warn(
'Sentry failed extracting headers from a request object. If you see this, please file an issue.',
)
}
return G
}
function ZP2(I) {
let G = VU1(I.headers)
return { method: I.method, url: I.url, headers: G }
}
AU1.DEFAULT_USER_INCLUDES = BU1
AU1.addRequestDataToEvent = GP2
AU1.addRequestDataToTransaction = ey2
AU1.extractPathForTransaction = Zm
AU1.extractRequestData = M11
AU1.winterCGHeadersToDict = VU1
AU1.winterCGRequestToRequestData = ZP2
})
var HU1 = _((DU1) => {
Object.defineProperty(DU1, '__esModule', { value: !0 })
var YU1 = ['fatal', 'error', 'warning', 'log', 'info', 'debug']
function XP2(I) {
return _U1(I)
}
function _U1(I) {
return I === 'warn' ? 'warning' : YU1.includes(I) ? I : 'log'
}
DU1.severityFromString = XP2
DU1.severityLevelFromString = _U1
DU1.validSeverityLevels = YU1
})
var S11 = _((NU1) => {
Object.defineProperty(NU1, '__esModule', { value: !0 })
var FU1 = q7(),
JU1 = 1000
function KU1() {
return Date.now() / JU1
}
function HP2() {
let { performance: I } = FU1.GLOBAL_OBJ
if (!I || !I.now) return KU1
let G = Date.now() - I.now(),
Z = I.timeOrigin == null ? G : I.timeOrigin
return () => {
return (Z + I.now()) / JU1
}
}
var gU1 = HP2(),
FP2 = gU1
NU1._browserPerformanceTimeOriginMode = void 0
var JP2 = (() => {
let { performance: I } = FU1.GLOBAL_OBJ
if (!I || !I.now) {
NU1._browserPerformanceTimeOriginMode = 'none'
return
}
let G = 3600000,
Z = I.now(),
d = Date.now(),
W = I.timeOrigin ? Math.abs(I.timeOrigin + Z - d) : G,
w = W < G,
B = I.timing && I.timing.navigationStart,
V = typeof B === 'number' ? Math.abs(B + Z - d) : G,
A = V < G
if (w || A)
if (W <= V) return (NU1._browserPerformanceTimeOriginMode = 'timeOrigin'), I.timeOrigin
else return (NU1._browserPerformanceTimeOriginMode = 'navigationStart'), B
return (NU1._browserPerformanceTimeOriginMode = 'dateNow'), d
})()
NU1.browserPerformanceTimeOrigin = JP2
NU1.dateTimestampInSeconds = KU1
NU1.timestampInSeconds = gU1
NU1.timestampWithMs = FP2
})
var $11 = _((UU1) => {
Object.defineProperty(UU1, '__esModule', { value: !0 })
var QP2 = YB(),
qP2 = sZ(),
UP2 = NW(),
fP2 = 'baggage',
L11 = 'sentry-',
QU1 = /^sentry-/,
qU1 = 8192
function RP2(I) {
if (!qP2.isString(I) && !Array.isArray(I)) return
let G = {}
if (Array.isArray(I))
G = I.reduce((d, W) => {
let w = zU1(W)
for (let B of Object.keys(w)) d[B] = w[B]
return d
}, {})
else {
if (!I) return
G = zU1(I)
}
let Z = Object.entries(G).reduce((d, [W, w]) => {
if (W.match(QU1)) {
let B = W.slice(L11.length)
d[B] = w
}
return d
}, {})
if (Object.keys(Z).length > 0) return Z
else return
}
function EP2(I) {
if (!I) return
let G = Object.entries(I).reduce((Z, [d, W]) => {
if (W) Z[`${L11}${d}`] = W
return Z
}, {})
return vP2(G)
}
function zU1(I) {
return I.split(',')
.map((G) => G.split('=').map((Z) => decodeURIComponent(Z.trim())))
.reduce((G, [Z, d]) => {
return (G[Z] = d), G
}, {})
}
function vP2(I) {
if (Object.keys(I).length === 0) return
return Object.entries(I).reduce((G, [Z, d], W) => {
let w = `${encodeURIComponent(Z)}=${encodeURIComponent(d)}`,
B = W === 0 ? w : `${G},${w}`
if (B.length > qU1)
return (
QP2.DEBUG_BUILD &&
UP2.logger.warn(
`Not adding key: ${Z} with val: ${d} to baggage header due to exceeding baggage size limits.`,
),
G
)
else return B
}, '')
}
UU1.BAGGAGE_HEADER_NAME = fP2
UU1.MAX_BAGGAGE_STRING_LENGTH = qU1
UU1.SENTRY_BAGGAGE_KEY_PREFIX = L11
UU1.SENTRY_BAGGAGE_KEY_PREFIX_REGEX = QU1
UU1.baggageHeaderToDynamicSamplingContext = RP2
UU1.dynamicSamplingContextToSentryBaggageHeader = EP2
})
var vU1 = _((EU1) => {
Object.defineProperty(EU1, '__esModule', { value: !0 })
var fU1 = $11(),
eZ = eE(),
RU1 = new RegExp('^[ \\t]*([0-9a-f]{32})?-?([0-9a-f]{16})?-?([01])?[ \\t]*$')
function y11(I) {
if (!I) return
let G = I.match(RU1)
if (!G) return
let Z
if (G[3] === '1') Z = !0
else if (G[3] === '0') Z = !1
return { traceId: G[1], parentSampled: Z, parentSpanId: G[2] }
}
function OP2(I, G) {
let Z = y11(I),
d = fU1.baggageHeaderToDynamicSamplingContext(G),
{ traceId: W, parentSpanId: w, parentSampled: B } = Z || {}
if (!Z)
return {
traceparentData: Z,
dynamicSamplingContext: void 0,
propagationContext: { traceId: W || eZ.uuid4(), spanId: eZ.uuid4().substring(16) },
}
else
return {
traceparentData: Z,
dynamicSamplingContext: d || {},
propagationContext: {
traceId: W || eZ.uuid4(),
parentSpanId: w || eZ.uuid4().substring(16),
spanId: eZ.uuid4().substring(16),
sampled: B,
dsc: d || {},
},
}
}
function uP2(I, G) {
let Z = y11(I),
d = fU1.baggageHeaderToDynamicSamplingContext(G),
{ traceId: W, parentSpanId: w, parentSampled: B } = Z || {}
if (!Z) return { traceId: W || eZ.uuid4(), spanId: eZ.uuid4().substring(16) }
else
return {
traceId: W || eZ.uuid4(),
parentSpanId: w || eZ.uuid4().substring(16),
spanId: eZ.uuid4().substring(16),
sampled: B,
dsc: d || {},
}
}
function TP2(I = eZ.uuid4(), G = eZ.uuid4().substring(16), Z) {
let d = ''
if (Z !== void 0) d = Z ? '-1' : '-0'
return `${I}-${G}${d}`
}
EU1.TRACEPARENT_REGEXP = RU1
EU1.extractTraceparentData = y11
EU1.generateSentryTraceHeader = TP2
EU1.propagationContextFromHeaders = uP2
EU1.tracingContextFromHeaders = OP2
})
var O11 = _((LU1) => {
Object.defineProperty(LU1, '__esModule', { value: !0 })
var hP2 = nt(),
xP2 = Zv(),
MU1 = oZ()
function cP2(I, G = []) {
return [I, G]
}
function pP2(I, G) {
let [Z, d] = I
return [Z, [...d, G]]
}
function SU1(I, G) {
let Z = I[1]
for (let d of Z) {
let W = d[0].type
if (G(d, W)) return !0
}
return !1
}
function iP2(I, G) {
return SU1(I, (Z, d) => G.includes(d))
}
function P11(I, G) {
return (G || new TextEncoder()).encode(I)
}
function nP2(I, G) {
let [Z, d] = I,
W = JSON.stringify(Z)
function w(B) {
if (typeof W === 'string') W = typeof B === 'string' ? W + B : [P11(W, G), B]
else W.push(typeof B === 'string' ? P11(B, G) : B)
}
for (let B of d) {
let [C, V] = B
if (
(w(`
${JSON.stringify(C)}
`),
typeof V === 'string' || V instanceof Uint8Array)
)
w(V)
else {
let A
try {
A = JSON.stringify(V)
} catch (X) {
A = JSON.stringify(xP2.normalize(V))
}
w(A)
}
}
return typeof W === 'string' ? W : aP2(W)
}
function aP2(I) {
let G = I.reduce((W, w) => W + w.length, 0),
Z = new Uint8Array(G),
d = 0
for (let W of I) Z.set(W, d), (d += W.length)
return Z
}
function rP2(I, G, Z) {
let d = typeof I === 'string' ? G.encode(I) : I
function W(V) {
let A = d.subarray(0, V)
return (d = d.subarray(V + 1)), A
}
function w() {
let V = d.indexOf(10)
if (V < 0) V = d.length
return JSON.parse(Z.decode(W(V)))
}
let B = w(),
C = []
while (d.length) {
let V = w(),
A = typeof V.length === 'number' ? V.length : void 0
C.push([V, A ? W(A) : w()])
}
return [B, C]
}
function sP2(I, G) {
let Z = typeof I.data === 'string' ? P11(I.data, G) : I.data
return [
MU1.dropUndefinedKeys({
type: 'attachment',
length: Z.length,
filename: I.filename,
content_type: I.contentType,
attachment_type: I.attachmentType,
}),
Z,
]
}
var oP2 = {
session: 'session',
sessions: 'session',
attachment: 'attachment',
transaction: 'transaction',
event: 'error',
client_report: 'internal',
user_report: 'default',
profile: 'profile',
replay_event: 'replay',
replay_recording: 'replay',
check_in: 'monitor',
feedback: 'feedback',
span: 'span',
statsd: 'metric_bucket',
}
function eP2(I) {
return oP2[I]
}
function tP2(I) {
if (!I || !I.sdk) return
let { name: G, version: Z } = I.sdk
return { name: G, version: Z }
}
function IO2(I, G, Z, d) {
let W = I.sdkProcessingMetadata && I.sdkProcessingMetadata.dynamicSamplingContext
return {
event_id: I.event_id,
sent_at: new Date().toISOString(),
...(G && { sdk: G }),
...(!!Z && d && { dsn: hP2.dsnToString(d) }),
...(W && { trace: MU1.dropUndefinedKeys({ ...W }) }),
}
}
LU1.addItemToEnvelope = pP2
LU1.createAttachmentEnvelopeItem = sP2
LU1.createEnvelope = cP2
LU1.createEventEnvelopeHeaders = IO2
LU1.envelopeContainsItemType = iP2
LU1.envelopeItemTypeToDataCategory = eP2
LU1.forEachEnvelopeItem = SU1
LU1.getSdkMetadataForEnvelopeHeader = tP2
LU1.parseEnvelope = rP2
LU1.serializeEnvelope = nP2
})
var yU1 = _(($U1) => {
Object.defineProperty($U1, '__esModule', { value: !0 })
var YO2 = O11(),
_O2 = S11()
function DO2(I, G, Z) {
let d = [
{ type: 'client_report' },
{ timestamp: Z || _O2.dateTimestampInSeconds(), discarded_events: I },
]
return YO2.createEnvelope(G ? { dsn: G } : {}, [d])
}
$U1.createClientReportEnvelope = DO2
})
var mU1 = _((TU1) => {
Object.defineProperty(TU1, '__esModule', { value: !0 })
var PU1 = 60000
function OU1(I, G = Date.now()) {
let Z = parseInt(`${I}`, 10)
if (!isNaN(Z)) return Z * 1000
let d = Date.parse(`${I}`)
if (!isNaN(d)) return d - G
return PU1
}
function uU1(I, G) {
return I[G] || I.all || 0
}
function FO2(I, G, Z = Date.now()) {
return uU1(I, G) > Z
}
function JO2(I, { statusCode: G, headers: Z }, d = Date.now()) {
let W = { ...I },
w = Z && Z['x-sentry-rate-limits'],
B = Z && Z['retry-after']
if (w)
for (let C of w.trim().split(',')) {
let [V, A, , , X] = C.split(':', 5),
Y = parseInt(V, 10),
H = (!isNaN(Y) ? Y : 60) * 1000
if (!A) W.all = d + H
else
for (let J of A.split(';'))
if (J === 'metric_bucket') {
if (!X || X.split(';').includes('custom')) W[J] = d + H
} else W[J] = d + H
}
else if (B) W.all = d + OU1(B, d)
else if (G === 429) W.all = d + 60000
return W
}
TU1.DEFAULT_RETRY_AFTER = PU1
TU1.disabledUntil = uU1
TU1.isRateLimited = FO2
TU1.parseRetryAfterHeader = OU1
TU1.updateRateLimits = JO2
})
var kU1 = _((jU1) => {
Object.defineProperty(jU1, '__esModule', { value: !0 })
function bU1(I, G, Z) {
let d = G.match(/([a-z_]+)\.(.*)/i)
if (d === null) I[G] = Z
else {
let W = I[d[1]]
bU1(W, d[2], Z)
}
}
function qO2(I, G, Z = {}) {
return Array.isArray(G) ? lU1(I, G, Z) : UO2(I, G, Z)
}
function lU1(I, G, Z) {
let d = G.find((W) => W.name === I.name)
if (d) {
for (let [W, w] of Object.entries(Z)) bU1(d, W, w)
return G
}
return [...G, I]
}
function UO2(I, G, Z) {
return (W) => {
let w = G(W)
if (I.allowExclusionByUser) {
if (!w.find((C) => C.name === I.name)) return w
}
return lU1(I, w, Z)
}
}
jU1.addOrUpdateIntegration = qO2
})
var xU1 = _((hU1) => {
Object.defineProperty(hU1, '__esModule', { value: !0 })
function RO2(I) {
let G = [],
Z = {}
return {
add(d, W) {
while (G.length >= I) {
let w = G.shift()
if (w !== void 0) delete Z[w]
}
if (Z[d]) this.delete(d)
G.push(d), (Z[d] = W)
},
clear() {
;(Z = {}), (G = [])
},
get(d) {
return Z[d]
},
size() {
return G.length
},
delete(d) {
if (!Z[d]) return !1
delete Z[d]
for (let W = 0; W < G.length; W++)
if (G[W] === d) {
G.splice(W, 1)
break
}
return !0
},
}
}
hU1.makeFifoCache = RO2
})
var nU1 = _((iU1) => {
Object.defineProperty(iU1, '__esModule', { value: !0 })
var u11 = sZ(),
cU1 = eE(),
vO2 = Zv(),
MO2 = oZ()
function T11(I, G) {
return I(G.stack || '', 1)
}
function pU1(I, G) {
let Z = { type: G.name || G.constructor.name, value: G.message },
d = T11(I, G)
if (d.length) Z.stacktrace = { frames: d }
return Z
}
function SO2(I) {
if ('name' in I && typeof I.name === 'string') {
let G = `'${I.name}' captured as exception`
if ('message' in I && typeof I.message === 'string') G += ` with message '${I.message}'`
return G
} else if ('message' in I && typeof I.message === 'string') return I.message
else return `Object captured as exception with keys: ${MO2.extractExceptionKeysForMessage(I)}`
}
function LO2(I, G, Z, d) {
let W = typeof I === 'function' ? I().getClient() : I,
w = Z,
C = (d && d.data && d.data.mechanism) || { handled: !0, type: 'generic' },
V
if (!u11.isError(Z)) {
if (u11.isPlainObject(Z)) {
let X = W && W.getOptions().normalizeDepth
V = { ['__serialized__']: vO2.normalizeToSize(Z, X) }
let Y = SO2(Z)
;(w = (d && d.syntheticException) || new Error(Y)), (w.message = Y)
} else (w = (d && d.syntheticException) || new Error(Z)), (w.message = Z)
C.synthetic = !0
}
let A = { exception: { values: [pU1(G, w)] } }
if (V) A.extra = V
return (
cU1.addExceptionTypeValue(A, void 0, void 0),
cU1.addExceptionMechanism(A, C),
{ ...A, event_id: d && d.event_id }
)
}
function $O2(I, G, Z = 'info', d, W) {
let w = { event_id: d && d.event_id, level: Z }
if (W && d && d.syntheticException) {
let B = T11(I, d.syntheticException)
if (B.length) w.exception = { values: [{ value: G, stacktrace: { frames: B } }] }
}
if (u11.isParameterizedString(G)) {
let { __sentry_template_string__: B, __sentry_template_values__: C } = G
return (w.logentry = { message: B, params: C }), w
}
return (w.message = G), w
}
iU1.eventFromMessage = $O2
iU1.eventFromUnknownInput = LO2
iU1.exceptionFromError = pU1
iU1.parseStackFrames = T11
})
var rU1 = _((aU1) => {
Object.defineProperty(aU1, '__esModule', { value: !0 })
var TO2 = oZ(),
mO2 = jT()
function bO2(I, G, Z, d) {
let W = I(),
w = !1,
B = !0
return (
setInterval(() => {
let C = W.getTimeMs()
if (w === !1 && C > G + Z) {
if (((w = !0), B)) d()
}
if (C < G + Z) w = !1
}, 20),
{
poll: () => {
W.reset()
},
enabled: (C) => {
B = C
},
}
)
}
function lO2(I, G, Z) {
let d = G ? G.replace(/^file:\/\//, '') : void 0,
W = I.location.columnNumber ? I.location.columnNumber + 1 : void 0,
w = I.location.lineNumber ? I.location.lineNumber + 1 : void 0
return TO2.dropUndefinedKeys({
filename: d,
module: Z(d),
function: I.functionName || '?',
colno: W,
lineno: w,
in_app: d ? mO2.filenameIsInApp(d) : void 0,
})
}
aU1.callFrameToStackFrame = lO2
aU1.watchdogTimer = bO2
})
var eU1 = _((oU1) => {
Object.defineProperty(oU1, '__esModule', { value: !0 })
class sU1 {
constructor(I) {
;(this._maxSize = I), (this._cache = new Map())
}
get size() {
return this._cache.size
}
get(I) {
let G = this._cache.get(I)
if (G === void 0) return
return this._cache.delete(I), this._cache.set(I, G), G
}
set(I, G) {
if (this._cache.size >= this._maxSize) this._cache.delete(this._cache.keys().next().value)
this._cache.set(I, G)
}
remove(I) {
let G = this._cache.get(I)
if (G) this._cache.delete(I)
return G
}
clear() {
this._cache.clear()
}
keys() {
return Array.from(this._cache.keys())
}
values() {
let I = []
return this._cache.forEach((G) => I.push(G)), I
}
}
oU1.LRUMap = sU1
})
var m11 = _((tU1) => {
Object.defineProperty(tU1, '__esModule', { value: !0 })
function xO2(I, G) {
return I != null ? I : G()
}
tU1._nullishCoalesce = xO2
})
var Gf1 = _((If1) => {
Object.defineProperty(If1, '__esModule', { value: !0 })
var pO2 = m11()
async function iO2(I, G) {
return pO2._nullishCoalesce(I, G)
}
If1._asyncNullishCoalesce = iO2
})
var b11 = _((Zf1) => {
Object.defineProperty(Zf1, '__esModule', { value: !0 })
async function aO2(I) {
let G = void 0,
Z = I[0],
d = 1
while (d < I.length) {
let W = I[d],
w = I[d + 1]
if (((d += 2), (W === 'optionalAccess' || W === 'optionalCall') && Z == null)) return
if (W === 'access' || W === 'optionalAccess') (G = Z), (Z = await w(Z))
else if (W === 'call' || W === 'optionalCall')
(Z = await w((...B) => Z.call(G, ...B))), (G = void 0)
}
return Z
}
Zf1._asyncOptionalChain = aO2
})
var Wf1 = _((df1) => {
Object.defineProperty(df1, '__esModule', { value: !0 })
var sO2 = b11()
async function oO2(I) {
let G = await sO2._asyncOptionalChain(I)
return G == null ? !0 : G
}
df1._asyncOptionalChainDelete = oO2
})
var l11 = _((wf1) => {
Object.defineProperty(wf1, '__esModule', { value: !0 })
function tO2(I) {
let G = void 0,
Z = I[0],
d = 1
while (d < I.length) {
let W = I[d],
w = I[d + 1]
if (((d += 2), (W === 'optionalAccess' || W === 'optionalCall') && Z == null)) return
if (W === 'access' || W === 'optionalAccess') (G = Z), (Z = w(Z))
else if (W === 'call' || W === 'optionalCall')
(Z = w((...B) => Z.call(G, ...B))), (G = void 0)
}
return Z
}
wf1._optionalChain = tO2
})
var Cf1 = _((Bf1) => {
Object.defineProperty(Bf1, '__esModule', { value: !0 })
var Gu2 = l11()
function Zu2(I) {
let G = Gu2._optionalChain(I)
return G == null ? !0 : G
}
Bf1._optionalChainDelete = Zu2
})
var Af1 = _((Vf1) => {
Object.defineProperty(Vf1, '__esModule', { value: !0 })
function Wu2(I) {
return I.replace(/[|\\{}()[\]^$+*?.]/g, '\\$&').replace(/-/g, '\\x2d')
}
Vf1.escapeStringForRegex = Wu2
})
var X0 = _((p11) => {
Object.defineProperty(p11, '__esModule', { value: !0 })
var Bu2 = uQ1(),
dm = xt(),
j11 = nt(),
Cu2 = at(),
k11 = q7(),
Vu2 = Tq1(),
U7 = sZ(),
Au2 = kq1(),
Wm = NW(),
Xu2 = q11(),
VY = eE(),
h11 = Q11(),
wm = Zv(),
PV = oZ(),
PF = eq1(),
Yu2 = GU1(),
OF = XU1(),
x11 = HU1(),
Wv = kT(),
wv = sE(),
AY = C11(),
c11 = R11(),
Bv = S11(),
Cv = vU1(),
Xf1 = z11(),
DB = O11(),
_u2 = yU1(),
Vv = mU1(),
ON = $11(),
Bm = v11(),
Du2 = kU1(),
Hu2 = xU1(),
Cm = nU1(),
Yf1 = rU1(),
Fu2 = eU1(),
Ju2 = Gf1(),
Ku2 = b11(),
gu2 = Wf1(),
Nu2 = m11(),
zu2 = l11(),
Qu2 = Cf1(),
qu2 = tt(),
Uu2 = W11(),
_f1 = g11(),
fu2 = A11(),
Ru2 = K11(),
Eu2 = _11(),
vu2 = F11(),
Mu2 = $V(),
Su2 = jT(),
Lu2 = Af1(),
$u2 = J11()
p11.applyAggregateErrorsToEvent = Bu2.applyAggregateErrorsToEvent
p11.getComponentName = dm.getComponentName
p11.getDomElement = dm.getDomElement
p11.getLocationHref = dm.getLocationHref
p11.htmlTreeAsString = dm.htmlTreeAsString
p11.dsnFromString = j11.dsnFromString
p11.dsnToString = j11.dsnToString
p11.makeDsn = j11.makeDsn
p11.SentryError = Cu2.SentryError
p11.GLOBAL_OBJ = k11.GLOBAL_OBJ
p11.getGlobalObject = k11.getGlobalObject
p11.getGlobalSingleton = k11.getGlobalSingleton
p11.addInstrumentationHandler = Vu2.addInstrumentationHandler
p11.isDOMError = U7.isDOMError
p11.isDOMException = U7.isDOMException
p11.isElement = U7.isElement
p11.isError = U7.isError
p11.isErrorEvent = U7.isErrorEvent
p11.isEvent = U7.isEvent
p11.isInstanceOf = U7.isInstanceOf
p11.isNaN = U7.isNaN
p11.isParameterizedString = U7.isParameterizedString
p11.isPlainObject = U7.isPlainObject
p11.isPrimitive = U7.isPrimitive
p11.isRegExp = U7.isRegExp
p11.isString = U7.isString
p11.isSyntheticEvent = U7.isSyntheticEvent
p11.isThenable = U7.isThenable
p11.isVueViewModel = U7.isVueViewModel
p11.isBrowser = Au2.isBrowser
p11.CONSOLE_LEVELS = Wm.CONSOLE_LEVELS
p11.consoleSandbox = Wm.consoleSandbox
p11.logger = Wm.logger
p11.originalConsoleMethods = Wm.originalConsoleMethods
p11.memoBuilder = Xu2.memoBuilder
p11.addContextToFrame = VY.addContextToFrame
p11.addExceptionMechanism = VY.addExceptionMechanism
p11.addExceptionTypeValue = VY.addExceptionTypeValue
p11.arrayify = VY.arrayify
p11.checkOrSetAlreadyCaught = VY.checkOrSetAlreadyCaught
p11.getEventDescription = VY.getEventDescription
p11.parseSemver = VY.parseSemver
p11.uuid4 = VY.uuid4
p11.dynamicRequire = h11.dynamicRequire
p11.isNodeEnv = h11.isNodeEnv
p11.loadModule = h11.loadModule
p11.normalize = wm.normalize
p11.normalizeToSize = wm.normalizeToSize
p11.normalizeUrlToBase = wm.normalizeUrlToBase
p11.walk = wm.walk
p11.addNonEnumerableProperty = PV.addNonEnumerableProperty
p11.convertToPlainObject = PV.convertToPlainObject
p11.dropUndefinedKeys = PV.dropUndefinedKeys
p11.extractExceptionKeysForMessage = PV.extractExceptionKeysForMessage
p11.fill = PV.fill
p11.getOriginalFunction = PV.getOriginalFunction
p11.markFunctionWrapped = PV.markFunctionWrapped
p11.objectify = PV.objectify
p11.urlEncode = PV.urlEncode
p11.basename = PF.basename
p11.dirname = PF.dirname
p11.isAbsolute = PF.isAbsolute
p11.join = PF.join
p11.normalizePath = PF.normalizePath
p11.relative = PF.relative
p11.resolve = PF.resolve
p11.makePromiseBuffer = Yu2.makePromiseBuffer
p11.DEFAULT_USER_INCLUDES = OF.DEFAULT_USER_INCLUDES
p11.addRequestDataToEvent = OF.addRequestDataToEvent
p11.addRequestDataToTransaction = OF.addRequestDataToTransaction
p11.extractPathForTransaction = OF.extractPathForTransaction
p11.extractRequestData = OF.extractRequestData
p11.winterCGHeadersToDict = OF.winterCGHeadersToDict
p11.winterCGRequestToRequestData = OF.winterCGRequestToRequestData
p11.severityFromString = x11.severityFromString
p11.severityLevelFromString = x11.severityLevelFromString
p11.validSeverityLevels = x11.validSeverityLevels
p11.createStackParser = Wv.createStackParser
p11.getFunctionName = Wv.getFunctionName
p11.nodeStackLineParser = Wv.nodeStackLineParser
p11.stackParserFromStackParserOptions = Wv.stackParserFromStackParserOptions
p11.stripSentryFramesAndReverse = Wv.stripSentryFramesAndReverse
p11.isMatchingPattern = wv.isMatchingPattern
p11.safeJoin = wv.safeJoin
p11.snipLine = wv.snipLine
p11.stringMatchesSomePattern = wv.stringMatchesSomePattern
p11.truncate = wv.truncate
p11.isNativeFetch = AY.isNativeFetch
p11.supportsDOMError = AY.supportsDOMError
p11.supportsDOMException = AY.supportsDOMException
p11.supportsErrorEvent = AY.supportsErrorEvent
p11.supportsFetch = AY.supportsFetch
p11.supportsNativeFetch = AY.supportsNativeFetch
p11.supportsReferrerPolicy = AY.supportsReferrerPolicy
p11.supportsReportingObserver = AY.supportsReportingObserver
p11.SyncPromise = c11.SyncPromise
p11.rejectedSyncPromise = c11.rejectedSyncPromise
p11.resolvedSyncPromise = c11.resolvedSyncPromise
Object.defineProperty(p11, '_browserPerformanceTimeOriginMode', {
enumerable: !0,
get: () => Bv._browserPerformanceTimeOriginMode,
})
p11.browserPerformanceTimeOrigin = Bv.browserPerformanceTimeOrigin
p11.dateTimestampInSeconds = Bv.dateTimestampInSeconds
p11.timestampInSeconds = Bv.timestampInSeconds
p11.timestampWithMs = Bv.timestampWithMs
p11.TRACEPARENT_REGEXP = Cv.TRACEPARENT_REGEXP
p11.extractTraceparentData = Cv.extractTraceparentData
p11.generateSentryTraceHeader = Cv.generateSentryTraceHeader
p11.propagationContextFromHeaders = Cv.propagationContextFromHeaders
p11.tracingContextFromHeaders = Cv.tracingContextFromHeaders
p11.getSDKSource = Xf1.getSDKSource
p11.isBrowserBundle = Xf1.isBrowserBundle
p11.addItemToEnvelope = DB.addItemToEnvelope
p11.createAttachmentEnvelopeItem = DB.createAttachmentEnvelopeItem
p11.createEnvelope = DB.createEnvelope
p11.createEventEnvelopeHeaders = DB.createEventEnvelopeHeaders
p11.envelopeContainsItemType = DB.envelopeContainsItemType
p11.envelopeItemTypeToDataCategory = DB.envelopeItemTypeToDataCategory
p11.forEachEnvelopeItem = DB.forEachEnvelopeItem
p11.getSdkMetadataForEnvelopeHeader = DB.getSdkMetadataForEnvelopeHeader
p11.parseEnvelope = DB.parseEnvelope
p11.serializeEnvelope = DB.serializeEnvelope
p11.createClientReportEnvelope = _u2.createClientReportEnvelope
p11.DEFAULT_RETRY_AFTER = Vv.DEFAULT_RETRY_AFTER
p11.disabledUntil = Vv.disabledUntil
p11.isRateLimited = Vv.isRateLimited
p11.parseRetryAfterHeader = Vv.parseRetryAfterHeader
p11.updateRateLimits = Vv.updateRateLimits
p11.BAGGAGE_HEADER_NAME = ON.BAGGAGE_HEADER_NAME
p11.MAX_BAGGAGE_STRING_LENGTH = ON.MAX_BAGGAGE_STRING_LENGTH
p11.SENTRY_BAGGAGE_KEY_PREFIX = ON.SENTRY_BAGGAGE_KEY_PREFIX
p11.SENTRY_BAGGAGE_KEY_PREFIX_REGEX = ON.SENTRY_BAGGAGE_KEY_PREFIX_REGEX
p11.baggageHeaderToDynamicSamplingContext = ON.baggageHeaderToDynamicSamplingContext
p11.dynamicSamplingContextToSentryBaggageHeader = ON.dynamicSamplingContextToSentryBaggageHeader
p11.getNumberOfUrlSegments = Bm.getNumberOfUrlSegments
p11.getSanitizedUrlString = Bm.getSanitizedUrlString
p11.parseUrl = Bm.parseUrl
p11.stripUrlQueryAndFragment = Bm.stripUrlQueryAndFragment
p11.addOrUpdateIntegration = Du2.addOrUpdateIntegration
p11.makeFifoCache = Hu2.makeFifoCache
p11.eventFromMessage = Cm.eventFromMessage
p11.eventFromUnknownInput = Cm.eventFromUnknownInput
p11.exceptionFromError = Cm.exceptionFromError
p11.parseStackFrames = Cm.parseStackFrames
p11.callFrameToStackFrame = Yf1.callFrameToStackFrame
p11.watchdogTimer = Yf1.watchdogTimer
p11.LRUMap = Fu2.LRUMap
p11._asyncNullishCoalesce = Ju2._asyncNullishCoalesce
p11._asyncOptionalChain = Ku2._asyncOptionalChain
p11._asyncOptionalChainDelete = gu2._asyncOptionalChainDelete
p11._nullishCoalesce = Nu2._nullishCoalesce
p11._optionalChain = zu2._optionalChain
p11._optionalChainDelete = Qu2._optionalChainDelete
p11.addConsoleInstrumentationHandler = qu2.addConsoleInstrumentationHandler
p11.addClickKeypressInstrumentationHandler = Uu2.addClickKeypressInstrumentationHandler
p11.SENTRY_XHR_DATA_KEY = _f1.SENTRY_XHR_DATA_KEY
p11.addXhrInstrumentationHandler = _f1.addXhrInstrumentationHandler
p11.addFetchInstrumentationHandler = fu2.addFetchInstrumentationHandler
p11.addHistoryInstrumentationHandler = Ru2.addHistoryInstrumentationHandler
p11.addGlobalErrorInstrumentationHandler = Eu2.addGlobalErrorInstrumentationHandler
p11.addGlobalUnhandledRejectionInstrumentationHandler =
vu2.addGlobalUnhandledRejectionInstrumentationHandler
p11.resetInstrumentationHandlers = Mu2.resetInstrumentationHandlers
p11.filenameIsInApp = Su2.filenameIsInApp
p11.escapeStringForRegex = Lu2.escapeStringForRegex
p11.supportsHistory = $u2.supportsHistory
})
var Q6 = _((Df1) => {
Object.defineProperty(Df1, '__esModule', { value: !0 })
var yb2 = typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__
Df1.DEBUG_BUILD = yb2
})
var uN = _((Hf1) => {
Object.defineProperty(Hf1, '__esModule', { value: !0 })
var Ob2 = 'production'
Hf1.DEFAULT_ENVIRONMENT = Ob2
})
var Av = _((Jf1) => {
Object.defineProperty(Jf1, '__esModule', { value: !0 })
var Vm = X0(),
Tb2 = Q6()
function Ff1() {
return Vm.getGlobalSingleton('globalEventProcessors', () => [])
}
function mb2(I) {
Ff1().push(I)
}
function i11(I, G, Z, d = 0) {
return new Vm.SyncPromise((W, w) => {
let B = I[d]
if (G === null || typeof B !== 'function') W(G)
else {
let C = B({ ...G }, Z)
if (
(Tb2.DEBUG_BUILD &&
B.id &&
C === null &&
Vm.logger.log(`Event processor "${B.id}" dropped event`),
Vm.isThenable(C))
)
C.then((V) => i11(I, V, Z, d + 1).then(W)).then(null, w)
else
i11(I, C, Z, d + 1)
.then(W)
.then(null, w)
}
})
}
Jf1.addGlobalEventProcessor = mb2
Jf1.getGlobalEventProcessors = Ff1
Jf1.notifyEventProcessors = i11
})
var TN = _((Kf1) => {
Object.defineProperty(Kf1, '__esModule', { value: !0 })
var Xv = X0()
function kb2(I) {
let G = Xv.timestampInSeconds(),
Z = {
sid: Xv.uuid4(),
init: !0,
timestamp: G,
started: G,
duration: 0,
status: 'ok',
errors: 0,
ignoreDuration: !1,
toJSON: () => xb2(Z),
}
if (I) n11(Z, I)
return Z
}
function n11(I, G = {}) {
if (G.user) {
if (!I.ipAddress && G.user.ip_address) I.ipAddress = G.user.ip_address
if (!I.did && !G.did) I.did = G.user.id || G.user.email || G.user.username
}
if (((I.timestamp = G.timestamp || Xv.timestampInSeconds()), G.abnormal_mechanism))
I.abnormal_mechanism = G.abnormal_mechanism
if (G.ignoreDuration) I.ignoreDuration = G.ignoreDuration
if (G.sid) I.sid = G.sid.length === 32 ? G.sid : Xv.uuid4()
if (G.init !== void 0) I.init = G.init
if (!I.did && G.did) I.did = `${G.did}`
if (typeof G.started === 'number') I.started = G.started
if (I.ignoreDuration) I.duration = void 0
else if (typeof G.duration === 'number') I.duration = G.duration
else {
let Z = I.timestamp - I.started
I.duration = Z >= 0 ? Z : 0
}
if (G.release) I.release = G.release
if (G.environment) I.environment = G.environment
if (!I.ipAddress && G.ipAddress) I.ipAddress = G.ipAddress
if (!I.userAgent && G.userAgent) I.userAgent = G.userAgent
if (typeof G.errors === 'number') I.errors = G.errors
if (G.status) I.status = G.status
}
function hb2(I, G) {
let Z = {}
if (G) Z = { status: G }
else if (I.status === 'ok') Z = { status: 'exited' }
n11(I, Z)
}
function xb2(I) {
return Xv.dropUndefinedKeys({
sid: `${I.sid}`,
init: I.init,
started: new Date(I.started * 1000).toISOString(),
timestamp: new Date(I.timestamp * 1000).toISOString(),
status: I.status,
errors: I.errors,
did: typeof I.did === 'number' || typeof I.did === 'string' ? `${I.did}` : void 0,
duration: I.duration,
abnormal_mechanism: I.abnormal_mechanism,
attrs: {
release: I.release,
environment: I.environment,
ip_address: I.ipAddress,
user_agent: I.userAgent,
},
})
}
Kf1.closeSession = hb2
Kf1.makeSession = kb2
Kf1.updateSession = n11
})
var iI = _((qf1) => {
Object.defineProperty(qf1, '__esModule', { value: !0 })
var a11 = X0(),
nb2 = 0,
Nf1 = 1
function ab2(I) {
let { spanId: G, traceId: Z } = I.spanContext(),
{ data: d, op: W, parent_span_id: w, status: B, tags: C, origin: V } = zf1(I)
return a11.dropUndefinedKeys({
data: d,
op: W,
parent_span_id: w,
span_id: G,
status: B,
tags: C,
trace_id: Z,
origin: V,
})
}
function rb2(I) {
let { traceId: G, spanId: Z } = I.spanContext(),
d = Qf1(I)
return a11.generateSentryTraceHeader(G, Z, d)
}
function sb2(I) {
if (typeof I === 'number') return gf1(I)
if (Array.isArray(I)) return I[0] + I[1] / 1e9
if (I instanceof Date) return gf1(I.getTime())
return a11.timestampInSeconds()
}
function gf1(I) {
return I > 9999999999 ? I / 1000 : I
}
function zf1(I) {
if (ob2(I)) return I.getSpanJSON()
if (typeof I.toJSON === 'function') return I.toJSON()
return {}
}
function ob2(I) {
return typeof I.getSpanJSON === 'function'
}
function Qf1(I) {
let { traceFlags: G } = I.spanContext()
return Boolean(G & Nf1)
}
qf1.TRACE_FLAG_NONE = nb2
qf1.TRACE_FLAG_SAMPLED = Nf1
qf1.spanIsSampled = Qf1
qf1.spanTimeInputToSeconds = sb2
qf1.spanToJSON = zf1
qf1.spanToTraceContext = ab2
qf1.spanToTraceHeader = rb2
})
var Am = _((vf1) => {
Object.defineProperty(vf1, '__esModule', { value: !0 })
var cG = X0(),
wl2 = uN(),
Uf1 = Av(),
s11 = Ym(),
r11 = Xm(),
Bl2 = iI()
function Cl2(I, G, Z, d, W, w) {
let { normalizeDepth: B = 3, normalizeMaxBreadth: C = 1000 } = I,
V = {
...G,
event_id: G.event_id || Z.event_id || cG.uuid4(),
timestamp: G.timestamp || cG.dateTimestampInSeconds(),
},
A = Z.integrations || I.integrations.map((z) => z.name)
if ((Vl2(V, I), Al2(V, A), G.type === void 0)) Rf1(V, I.stackParser)
let X = Yl2(d, Z.captureContext)
if (Z.mechanism) cG.addExceptionMechanism(V, Z.mechanism)
let Y = W && W.getEventProcessors ? W.getEventProcessors() : [],
H = s11.getGlobalScope().getScopeData()
if (w) {
let z = w.getScopeData()
r11.mergeScopeData(H, z)
}
if (X) {
let z = X.getScopeData()
r11.mergeScopeData(H, z)
}
let J = [...(Z.attachments || []), ...H.attachments]
if (J.length) Z.attachments = J
r11.applyScopeDataToEvent(V, H)
let K = [...Y, ...Uf1.getGlobalEventProcessors(), ...H.eventProcessors]
return Uf1.notifyEventProcessors(K, V, Z).then((z) => {
if (z) Ef1(z)
if (typeof B === 'number' && B > 0) return Xl2(z, B, C)
return z
})
}
function Vl2(I, G) {
let { environment: Z, release: d, dist: W, maxValueLength: w = 250 } = G
if (!('environment' in I)) I.environment = 'environment' in G ? Z : wl2.DEFAULT_ENVIRONMENT
if (I.release === void 0 && d !== void 0) I.release = d
if (I.dist === void 0 && W !== void 0) I.dist = W
if (I.message) I.message = cG.truncate(I.message, w)
let B = I.exception && I.exception.values && I.exception.values[0]
if (B && B.value) B.value = cG.truncate(B.value, w)
let C = I.request
if (C && C.url) C.url = cG.truncate(C.url, w)
}
var ff1 = new WeakMap()
function Rf1(I, G) {
let Z = cG.GLOBAL_OBJ._sentryDebugIds
if (!Z) return
let d,
W = ff1.get(G)
if (W) d = W
else (d = new Map()), ff1.set(G, d)
let w = Object.keys(Z).reduce((B, C) => {
let V,
A = d.get(C)
if (A) V = A
else (V = G(C)), d.set(C, V)
for (let X = V.length - 1; X >= 0; X--) {
let Y = V[X]
if (Y.filename) {
B[Y.filename] = Z[C]
break
}
}
return B
}, {})
try {
I.exception.values.forEach((B) => {
B.stacktrace.frames.forEach((C) => {
if (C.filename) C.debug_id = w[C.filename]
})
})
} catch (B) {}
}
function Ef1(I) {
let G = {}
try {
I.exception.values.forEach((d) => {
d.stacktrace.frames.forEach((W) => {
if (W.debug_id) {
if (W.abs_path) G[W.abs_path] = W.debug_id
else if (W.filename) G[W.filename] = W.debug_id
delete W.debug_id
}
})
})
} catch (d) {}
if (Object.keys(G).length === 0) return
;(I.debug_meta = I.debug_meta || {}), (I.debug_meta.images = I.debug_meta.images || [])
let Z = I.debug_meta.images
Object.keys(G).forEach((d) => {
Z.push({ type: 'sourcemap', code_file: d, debug_id: G[d] })
})
}
function Al2(I, G) {
if (G.length > 0)
(I.sdk = I.sdk || {}), (I.sdk.integrations = [...(I.sdk.integrations || []), ...G])
}
function Xl2(I, G, Z) {
if (!I) return null
let d = {
...I,
...(I.breadcrumbs && {
breadcrumbs: I.breadcrumbs.map((W) => ({
...W,
...(W.data && { data: cG.normalize(W.data, G, Z) }),
})),
}),
...(I.user && { user: cG.normalize(I.user, G, Z) }),
...(I.contexts && { contexts: cG.normalize(I.contexts, G, Z) }),
...(I.extra && { extra: cG.normalize(I.extra, G, Z) }),
}
if (I.contexts && I.contexts.trace && d.contexts) {
if (((d.contexts.trace = I.contexts.trace), I.contexts.trace.data))
d.contexts.trace.data = cG.normalize(I.contexts.trace.data, G, Z)
}
if (I.spans)
d.spans = I.spans.map((W) => {
let w = Bl2.spanToJSON(W).data
if (w) W.data = cG.normalize(w, G, Z)
return W
})
return d
}
function Yl2(I, G) {
if (!G) return I
let Z = I ? I.clone() : new s11.Scope()
return Z.update(G), Z
}
function _l2(I) {
if (!I) return
if (Dl2(I)) return { captureContext: I }
if (Fl2(I)) return { captureContext: I }
return I
}
function Dl2(I) {
return I instanceof s11.Scope || typeof I === 'function'
}
var Hl2 = [
'user',
'level',
'extra',
'contexts',
'tags',
'fingerprint',
'requestSession',
'propagationContext',
]
function Fl2(I) {
return Object.keys(I).some((G) => Hl2.includes(G))
}
vf1.applyDebugIds = Rf1
vf1.applyDebugMeta = Ef1
vf1.parseEventHintOrCaptureContext = _l2
vf1.prepareEvent = Cl2
})
var tZ = _((Lf1) => {
Object.defineProperty(Lf1, '__esModule', { value: !0 })
var OV = X0(),
zl2 = uN(),
_m = Q6(),
w6 = HB(),
o11 = TN(),
Ql2 = Am()
function ql2(I, G) {
return w6.getCurrentHub().captureException(I, Ql2.parseEventHintOrCaptureContext(G))
}
function Ul2(I, G) {
let Z = typeof G === 'string' ? G : void 0,
d = typeof G !== 'string' ? { captureContext: G } : void 0
return w6.getCurrentHub().captureMessage(I, Z, d)
}
function fl2(I, G) {
return w6.getCurrentHub().captureEvent(I, G)
}
function Rl2(I) {
w6.getCurrentHub().configureScope(I)
}
function El2(I, G) {
w6.getCurrentHub().addBreadcrumb(I, G)
}
function vl2(I, G) {
w6.getCurrentHub().setContext(I, G)
}
function Ml2(I) {
w6.getCurrentHub().setExtras(I)
}
function Sl2(I, G) {
w6.getCurrentHub().setExtra(I, G)
}
function Ll2(I) {
w6.getCurrentHub().setTags(I)
}
function $l2(I, G) {
w6.getCurrentHub().setTag(I, G)
}
function yl2(I) {
w6.getCurrentHub().setUser(I)
}
function Mf1(...I) {
let G = w6.getCurrentHub()
if (I.length === 2) {
let [Z, d] = I
if (!Z) return G.withScope(d)
return G.withScope(() => {
return (G.getStackTop().scope = Z), d(Z)
})
}
return G.withScope(I[0])
}
function Pl2(I) {
return w6.runWithAsyncContext(() => {
return I(w6.getIsolationScope())
})
}
function Ol2(I, G) {
return Mf1((Z) => {
return Z.setSpan(I), G(Z)
})
}
function ul2(I, G) {
return w6.getCurrentHub().startTransaction({ ...I }, G)
}
function e11(I, G) {
let Z = Yv(),
d = uF()
if (!d) _m.DEBUG_BUILD && OV.logger.warn('Cannot capture check-in. No client defined.')
else if (!d.captureCheckIn)
_m.DEBUG_BUILD &&
OV.logger.warn('Cannot capture check-in. Client does not support sending check-ins.')
else return d.captureCheckIn(I, G, Z)
return OV.uuid4()
}
function Tl2(I, G, Z) {
let d = e11({ monitorSlug: I, status: 'in_progress' }, Z),
W = OV.timestampInSeconds()
function w(C) {
e11({ monitorSlug: I, status: C, checkInId: d, duration: OV.timestampInSeconds() - W })
}
let B
try {
B = G()
} catch (C) {
throw (w('error'), C)
}
if (OV.isThenable(B))
Promise.resolve(B).then(
() => {
w('ok')
},
() => {
w('error')
},
)
else w('ok')
return B
}
async function ml2(I) {
let G = uF()
if (G) return G.flush(I)
return (
_m.DEBUG_BUILD && OV.logger.warn('Cannot flush events. No client defined.'),
Promise.resolve(!1)
)
}
async function bl2(I) {
let G = uF()
if (G) return G.close(I)
return (
_m.DEBUG_BUILD && OV.logger.warn('Cannot flush events and disable SDK. No client defined.'),
Promise.resolve(!1)
)
}
function ll2() {
return w6.getCurrentHub().lastEventId()
}
function uF() {
return w6.getCurrentHub().getClient()
}
function jl2() {
return !!uF()
}
function Yv() {
return w6.getCurrentHub().getScope()
}
function kl2(I) {
let G = uF(),
Z = w6.getIsolationScope(),
d = Yv(),
{ release: W, environment: w = zl2.DEFAULT_ENVIRONMENT } = (G && G.getOptions()) || {},
{ userAgent: B } = OV.GLOBAL_OBJ.navigator || {},
C = o11.makeSession({
release: W,
environment: w,
user: d.getUser() || Z.getUser(),
...(B && { userAgent: B }),
...I,
}),
V = Z.getSession()
if (V && V.status === 'ok') o11.updateSession(V, { status: 'exited' })
return t11(), Z.setSession(C), d.setSession(C), C
}
function t11() {
let I = w6.getIsolationScope(),
G = Yv(),
Z = G.getSession() || I.getSession()
if (Z) o11.closeSession(Z)
Sf1(), I.setSession(), G.setSession()
}
function Sf1() {
let I = w6.getIsolationScope(),
G = Yv(),
Z = uF(),
d = G.getSession() || I.getSession()
if (d && Z && Z.captureSession) Z.captureSession(d)
}
function hl2(I = !1) {
if (I) {
t11()
return
}
Sf1()
}
Lf1.addBreadcrumb = El2
Lf1.captureCheckIn = e11
Lf1.captureEvent = fl2
Lf1.captureException = ql2
Lf1.captureMessage = Ul2
Lf1.captureSession = hl2
Lf1.close = bl2
Lf1.configureScope = Rl2
Lf1.endSession = t11
Lf1.flush = ml2
Lf1.getClient = uF
Lf1.getCurrentScope = Yv
Lf1.isInitialized = jl2
Lf1.lastEventId = ll2
Lf1.setContext = vl2
Lf1.setExtra = Sl2
Lf1.setExtras = Ml2
Lf1.setTag = $l2
Lf1.setTags = Ll2
Lf1.setUser = yl2
Lf1.startSession = kl2
Lf1.startTransaction = ul2
Lf1.withActiveSpan = Ol2
Lf1.withIsolationScope = Pl2
Lf1.withMonitor = Tl2
Lf1.withScope = Mf1
})
var mN = _(($f1) => {
Object.defineProperty($f1, '__esModule', { value: !0 })
function Fj2(I) {
return I.transaction
}
$f1.getRootSpan = Fj2
})
var TF = _((Of1) => {
Object.defineProperty(Of1, '__esModule', { value: !0 })
var Kj2 = X0(),
gj2 = uN(),
yf1 = tZ(),
Nj2 = mN(),
I01 = iI()
function Pf1(I, G, Z) {
let d = G.getOptions(),
{ publicKey: W } = G.getDsn() || {},
{ segment: w } = (Z && Z.getUser()) || {},
B = Kj2.dropUndefinedKeys({
environment: d.environment || gj2.DEFAULT_ENVIRONMENT,
release: d.release,
user_segment: w,
public_key: W,
trace_id: I,
})
return G.emit && G.emit('createDsc', B), B
}
function zj2(I) {
let G = yf1.getClient()
if (!G) return {}
let Z = Pf1(I01.spanToJSON(I).trace_id || '', G, yf1.getCurrentScope()),
d = Nj2.getRootSpan(I)
if (!d) return Z
let W = d && d._frozenDynamicSamplingContext
if (W) return W
let { sampleRate: w, source: B } = d.metadata
if (w != null) Z.sample_rate = `${w}`
let C = I01.spanToJSON(d)
if (B && B !== 'url') Z.transaction = C.description
return (Z.sampled = String(I01.spanIsSampled(d))), G.emit && G.emit('createDsc', Z), Z
}
Of1.getDynamicSamplingContextFromClient = Pf1
Of1.getDynamicSamplingContextFromSpan = zj2
})
var Xm = _((Tf1) => {
Object.defineProperty(Tf1, '__esModule', { value: !0 })
var _v = X0(),
Uj2 = TF(),
fj2 = mN(),
uf1 = iI()
function Rj2(I, G) {
let { fingerprint: Z, span: d, breadcrumbs: W, sdkProcessingMetadata: w } = G
if ((vj2(I, G), d)) Lj2(I, d)
$j2(I, Z), Mj2(I, W), Sj2(I, w)
}
function Ej2(I, G) {
let {
extra: Z,
tags: d,
user: W,
contexts: w,
level: B,
sdkProcessingMetadata: C,
breadcrumbs: V,
fingerprint: A,
eventProcessors: X,
attachments: Y,
propagationContext: H,
transactionName: J,
span: K,
} = G
if (
(bN(I, 'extra', Z),
bN(I, 'tags', d),
bN(I, 'user', W),
bN(I, 'contexts', w),
bN(I, 'sdkProcessingMetadata', C),
B)
)
I.level = B
if (J) I.transactionName = J
if (K) I.span = K
if (V.length) I.breadcrumbs = [...I.breadcrumbs, ...V]
if (A.length) I.fingerprint = [...I.fingerprint, ...A]
if (X.length) I.eventProcessors = [...I.eventProcessors, ...X]
if (Y.length) I.attachments = [...I.attachments, ...Y]
I.propagationContext = { ...I.propagationContext, ...H }
}
function bN(I, G, Z) {
if (Z && Object.keys(Z).length) {
I[G] = { ...I[G] }
for (let d in Z) if (Object.prototype.hasOwnProperty.call(Z, d)) I[G][d] = Z[d]
}
}
function vj2(I, G) {
let { extra: Z, tags: d, user: W, contexts: w, level: B, transactionName: C } = G,
V = _v.dropUndefinedKeys(Z)
if (V && Object.keys(V).length) I.extra = { ...V, ...I.extra }
let A = _v.dropUndefinedKeys(d)
if (A && Object.keys(A).length) I.tags = { ...A, ...I.tags }
let X = _v.dropUndefinedKeys(W)
if (X && Object.keys(X).length) I.user = { ...X, ...I.user }
let Y = _v.dropUndefinedKeys(w)
if (Y && Object.keys(Y).length) I.contexts = { ...Y, ...I.contexts }
if (B) I.level = B
if (C) I.transaction = C
}
function Mj2(I, G) {
let Z = [...(I.breadcrumbs || []), ...G]
I.breadcrumbs = Z.length ? Z : void 0
}
function Sj2(I, G) {
I.sdkProcessingMetadata = { ...I.sdkProcessingMetadata, ...G }
}
function Lj2(I, G) {
I.contexts = { trace: uf1.spanToTraceContext(G), ...I.contexts }
let Z = fj2.getRootSpan(G)
if (Z) {
I.sdkProcessingMetadata = {
dynamicSamplingContext: Uj2.getDynamicSamplingContextFromSpan(G),
...I.sdkProcessingMetadata,
}
let d = uf1.spanToJSON(Z).description
if (d) I.tags = { transaction: d, ...I.tags }
}
}
function $j2(I, G) {
if (((I.fingerprint = I.fingerprint ? _v.arrayify(I.fingerprint) : []), G))
I.fingerprint = I.fingerprint.concat(G)
if (I.fingerprint && !I.fingerprint.length) delete I.fingerprint
}
Tf1.applyScopeDataToEvent = Rj2
Tf1.mergeAndOverwriteScopeData = bN
Tf1.mergeScopeData = Ej2
})
var Ym = _((lf1) => {
Object.defineProperty(lf1, '__esModule', { value: !0 })
var FB = X0(),
mf1 = Av(),
uj2 = TN(),
Tj2 = Xm(),
mj2 = 100,
Dm
class lN {
constructor() {
;(this._notifyingListeners = !1),
(this._scopeListeners = []),
(this._eventProcessors = []),
(this._breadcrumbs = []),
(this._attachments = []),
(this._user = {}),
(this._tags = {}),
(this._extra = {}),
(this._contexts = {}),
(this._sdkProcessingMetadata = {}),
(this._propagationContext = bf1())
}
static clone(I) {
return I ? I.clone() : new lN()
}
clone() {
let I = new lN()
return (
(I._breadcrumbs = [...this._breadcrumbs]),
(I._tags = { ...this._tags }),
(I._extra = { ...this._extra }),
(I._contexts = { ...this._contexts }),
(I._user = this._user),
(I._level = this._level),
(I._span = this._span),
(I._session = this._session),
(I._transactionName = this._transactionName),
(I._fingerprint = this._fingerprint),
(I._eventProcessors = [...this._eventProcessors]),
(I._requestSession = this._requestSession),
(I._attachments = [...this._attachments]),
(I._sdkProcessingMetadata = { ...this._sdkProcessingMetadata }),
(I._propagationContext = { ...this._propagationContext }),
(I._client = this._client),
I
)
}
setClient(I) {
this._client = I
}
getClient() {
return this._client
}
addScopeListener(I) {
this._scopeListeners.push(I)
}
addEventProcessor(I) {
return this._eventProcessors.push(I), this
}
setUser(I) {
if (
((this._user = I || {
email: void 0,
id: void 0,
ip_address: void 0,
segment: void 0,
username: void 0,
}),
this._session)
)
uj2.updateSession(this._session, { user: I })
return this._notifyScopeListeners(), this
}
getUser() {
return this._user
}
getRequestSession() {
return this._requestSession
}
setRequestSession(I) {
return (this._requestSession = I), this
}
setTags(I) {
return (this._tags = { ...this._tags, ...I }), this._notifyScopeListeners(), this
}
setTag(I, G) {
return (this._tags = { ...this._tags, [I]: G }), this._notifyScopeListeners(), this
}
setExtras(I) {
return (this._extra = { ...this._extra, ...I }), this._notifyScopeListeners(), this
}
setExtra(I, G) {
return (this._extra = { ...this._extra, [I]: G }), this._notifyScopeListeners(), this
}
setFingerprint(I) {
return (this._fingerprint = I), this._notifyScopeListeners(), this
}
setLevel(I) {
return (this._level = I), this._notifyScopeListeners(), this
}
setTransactionName(I) {
return (this._transactionName = I), this._notifyScopeListeners(), this
}
setContext(I, G) {
if (G === null) delete this._contexts[I]
else this._contexts[I] = G
return this._notifyScopeListeners(), this
}
setSpan(I) {
return (this._span = I), this._notifyScopeListeners(), this
}
getSpan() {
return this._span
}
getTransaction() {
let I = this._span
return I && I.transaction
}
setSession(I) {
if (!I) delete this._session
else this._session = I
return this._notifyScopeListeners(), this
}
getSession() {
return this._session
}
update(I) {
if (!I) return this
let G = typeof I === 'function' ? I(this) : I
if (G instanceof lN) {
let Z = G.getScopeData()
if (
((this._tags = { ...this._tags, ...Z.tags }),
(this._extra = { ...this._extra, ...Z.extra }),
(this._contexts = { ...this._contexts, ...Z.contexts }),
Z.user && Object.keys(Z.user).length)
)
this._user = Z.user
if (Z.level) this._level = Z.level
if (Z.fingerprint.length) this._fingerprint = Z.fingerprint
if (G.getRequestSession()) this._requestSession = G.getRequestSession()
if (Z.propagationContext) this._propagationContext = Z.propagationContext
} else if (FB.isPlainObject(G)) {
let Z = I
if (
((this._tags = { ...this._tags, ...Z.tags }),
(this._extra = { ...this._extra, ...Z.extra }),
(this._contexts = { ...this._contexts, ...Z.contexts }),
Z.user)
)
this._user = Z.user
if (Z.level) this._level = Z.level
if (Z.fingerprint) this._fingerprint = Z.fingerprint
if (Z.requestSession) this._requestSession = Z.requestSession
if (Z.propagationContext) this._propagationContext = Z.propagationContext
}
return this
}
clear() {
return (
(this._breadcrumbs = []),
(this._tags = {}),
(this._extra = {}),
(this._user = {}),
(this._contexts = {}),
(this._level = void 0),
(this._transactionName = void 0),
(this._fingerprint = void 0),
(this._requestSession = void 0),
(this._span = void 0),
(this._session = void 0),
this._notifyScopeListeners(),
(this._attachments = []),
(this._propagationContext = bf1()),
this
)
}
addBreadcrumb(I, G) {
let Z = typeof G === 'number' ? G : mj2
if (Z <= 0) return this
let d = { timestamp: FB.dateTimestampInSeconds(), ...I },
W = this._breadcrumbs
return (
W.push(d),
(this._breadcrumbs = W.length > Z ? W.slice(-Z) : W),
this._notifyScopeListeners(),
this
)
}
getLastBreadcrumb() {
return this._breadcrumbs[this._breadcrumbs.length - 1]
}
clearBreadcrumbs() {
return (this._breadcrumbs = []), this._notifyScopeListeners(), this
}
addAttachment(I) {
return this._attachments.push(I), this
}
getAttachments() {
return this.getScopeData().attachments
}
clearAttachments() {
return (this._attachments = []), this
}
getScopeData() {
let {
_breadcrumbs: I,
_attachments: G,
_contexts: Z,
_tags: d,
_extra: W,
_user: w,
_level: B,
_fingerprint: C,
_eventProcessors: V,
_propagationContext: A,
_sdkProcessingMetadata: X,
_transactionName: Y,
_span: H,
} = this
return {
breadcrumbs: I,
attachments: G,
contexts: Z,
tags: d,
extra: W,
user: w,
level: B,
fingerprint: C || [],
eventProcessors: V,
propagationContext: A,
sdkProcessingMetadata: X,
transactionName: Y,
span: H,
}
}
applyToEvent(I, G = {}, Z = []) {
Tj2.applyScopeDataToEvent(I, this.getScopeData())
let d = [...Z, ...mf1.getGlobalEventProcessors(), ...this._eventProcessors]
return mf1.notifyEventProcessors(d, I, G)
}
setSDKProcessingMetadata(I) {
return (this._sdkProcessingMetadata = { ...this._sdkProcessingMetadata, ...I }), this
}
setPropagationContext(I) {
return (this._propagationContext = I), this
}
getPropagationContext() {
return this._propagationContext
}
captureException(I, G) {
let Z = G && G.event_id ? G.event_id : FB.uuid4()
if (!this._client)
return FB.logger.warn('No client configured on scope - will not capture exception!'), Z
let d = new Error('Sentry syntheticException')
return (
this._client.captureException(
I,
{ originalException: I, syntheticException: d, ...G, event_id: Z },
this,
),
Z
)
}
captureMessage(I, G, Z) {
let d = Z && Z.event_id ? Z.event_id : FB.uuid4()
if (!this._client)
return FB.logger.warn('No client configured on scope - will not capture message!'), d
let W = new Error(I)
return (
this._client.captureMessage(
I,
G,
{ originalException: I, syntheticException: W, ...Z, event_id: d },
this,
),
d
)
}
captureEvent(I, G) {
let Z = G && G.event_id ? G.event_id : FB.uuid4()
if (!this._client)
return FB.logger.warn('No client configured on scope - will not capture event!'), Z
return this._client.captureEvent(I, { ...G, event_id: Z }, this), Z
}
_notifyScopeListeners() {
if (!this._notifyingListeners)
(this._notifyingListeners = !0),
this._scopeListeners.forEach((I) => {
I(this)
}),
(this._notifyingListeners = !1)
}
}
function bj2() {
if (!Dm) Dm = new lN()
return Dm
}
function lj2(I) {
Dm = I
}
function bf1() {
return { traceId: FB.uuid4(), spanId: FB.uuid4().substring(16) }
}
lf1.Scope = lN
lf1.getGlobalScope = bj2
lf1.setGlobalScope = lj2
})
var Hm = _((jf1) => {
Object.defineProperty(jf1, '__esModule', { value: !0 })
var xj2 = '7.120.0'
jf1.SDK_VERSION = xj2
})
var HB = _((pf1) => {
Object.defineProperty(pf1, '__esModule', { value: !0 })
var ZI = X0(),
pj2 = uN(),
G01 = Q6(),
kf1 = Ym(),
Z01 = TN(),
ij2 = Hm(),
Fm = parseFloat(ij2.SDK_VERSION),
nj2 = 100
class Hv {
constructor(I, G, Z, d = Fm) {
this._version = d
let W
if (!G) (W = new kf1.Scope()), W.setClient(I)
else W = G
let w
if (!Z) (w = new kf1.Scope()), w.setClient(I)
else w = Z
if (((this._stack = [{ scope: W }]), I)) this.bindClient(I)
this._isolationScope = w
}
isOlderThan(I) {
return this._version < I
}
bindClient(I) {
let G = this.getStackTop()
if (((G.client = I), G.scope.setClient(I), I && I.setupIntegrations)) I.setupIntegrations()
}
pushScope() {
let I = this.getScope().clone()
return this.getStack().push({ client: this.getClient(), scope: I }), I
}
popScope() {
if (this.getStack().length <= 1) return !1
return !!this.getStack().pop()
}
withScope(I) {
let G = this.pushScope(),
Z
try {
Z = I(G)
} catch (d) {
throw (this.popScope(), d)
}
if (ZI.isThenable(Z))
return Z.then(
(d) => {
return this.popScope(), d
},
(d) => {
throw (this.popScope(), d)
},
)
return this.popScope(), Z
}
getClient() {
return this.getStackTop().client
}
getScope() {
return this.getStackTop().scope
}
getIsolationScope() {
return this._isolationScope
}
getStack() {
return this._stack
}
getStackTop() {
return this._stack[this._stack.length - 1]
}
captureException(I, G) {
let Z = (this._lastEventId = G && G.event_id ? G.event_id : ZI.uuid4()),
d = new Error('Sentry syntheticException')
return (
this.getScope().captureException(I, {
originalException: I,
syntheticException: d,
...G,
event_id: Z,
}),
Z
)
}
captureMessage(I, G, Z) {
let d = (this._lastEventId = Z && Z.event_id ? Z.event_id : ZI.uuid4()),
W = new Error(I)
return (
this.getScope().captureMessage(I, G, {
originalException: I,
syntheticException: W,
...Z,
event_id: d,
}),
d
)
}
captureEvent(I, G) {
let Z = G && G.event_id ? G.event_id : ZI.uuid4()
if (!I.type) this._lastEventId = Z
return this.getScope().captureEvent(I, { ...G, event_id: Z }), Z
}
lastEventId() {
return this._lastEventId
}
addBreadcrumb(I, G) {
let { scope: Z, client: d } = this.getStackTop()
if (!d) return
let { beforeBreadcrumb: W = null, maxBreadcrumbs: w = nj2 } =
(d.getOptions && d.getOptions()) || {}
if (w <= 0) return
let C = { timestamp: ZI.dateTimestampInSeconds(), ...I },
V = W ? ZI.consoleSandbox(() => W(C, G)) : C
if (V === null) return
if (d.emit) d.emit('beforeAddBreadcrumb', V, G)
Z.addBreadcrumb(V, w)
}
setUser(I) {
this.getScope().setUser(I), this.getIsolationScope().setUser(I)
}
setTags(I) {
this.getScope().setTags(I), this.getIsolationScope().setTags(I)
}
setExtras(I) {
this.getScope().setExtras(I), this.getIsolationScope().setExtras(I)
}
setTag(I, G) {
this.getScope().setTag(I, G), this.getIsolationScope().setTag(I, G)
}
setExtra(I, G) {
this.getScope().setExtra(I, G), this.getIsolationScope().setExtra(I, G)
}
setContext(I, G) {
this.getScope().setContext(I, G), this.getIsolationScope().setContext(I, G)
}
configureScope(I) {
let { scope: G, client: Z } = this.getStackTop()
if (Z) I(G)
}
run(I) {
let G = d01(this)
try {
I(this)
} finally {
d01(G)
}
}
getIntegration(I) {
let G = this.getClient()
if (!G) return null
try {
return G.getIntegration(I)
} catch (Z) {
return (
G01.DEBUG_BUILD &&
ZI.logger.warn(`Cannot retrieve integration ${I.id} from the current Hub`),
null
)
}
}
startTransaction(I, G) {
let Z = this._callExtensionMethod('startTransaction', I, G)
if (G01.DEBUG_BUILD && !Z)
if (!this.getClient())
ZI.logger.warn(
"Tracing extension 'startTransaction' is missing. You should 'init' the SDK before calling 'startTransaction'",
)
else
ZI.logger
.warn(`Tracing extension 'startTransaction' has not been added. Call 'addTracingExtensions' before calling 'init':
Sentry.addTracingExtensions();
Sentry.init({...});
`)
return Z
}
traceHeaders() {
return this._callExtensionMethod('traceHeaders')
}
captureSession(I = !1) {
if (I) return this.endSession()
this._sendSessionUpdate()
}
endSession() {
let G = this.getStackTop().scope,
Z = G.getSession()
if (Z) Z01.closeSession(Z)
this._sendSessionUpdate(), G.setSession()
}
startSession(I) {
let { scope: G, client: Z } = this.getStackTop(),
{ release: d, environment: W = pj2.DEFAULT_ENVIRONMENT } = (Z && Z.getOptions()) || {},
{ userAgent: w } = ZI.GLOBAL_OBJ.navigator || {},
B = Z01.makeSession({
release: d,
environment: W,
user: G.getUser(),
...(w && { userAgent: w }),
...I,
}),
C = G.getSession && G.getSession()
if (C && C.status === 'ok') Z01.updateSession(C, { status: 'exited' })
return this.endSession(), G.setSession(B), B
}
shouldSendDefaultPii() {
let I = this.getClient(),
G = I && I.getOptions()
return Boolean(G && G.sendDefaultPii)
}
_sendSessionUpdate() {
let { scope: I, client: G } = this.getStackTop(),
Z = I.getSession()
if (Z && G && G.captureSession) G.captureSession(Z)
}
_callExtensionMethod(I, ...G) {
let d = mF().__SENTRY__
if (d && d.extensions && typeof d.extensions[I] === 'function')
return d.extensions[I].apply(this, G)
G01.DEBUG_BUILD && ZI.logger.warn(`Extension method ${I} couldn't be found, doing nothing.`)
}
}
function mF() {
return (
(ZI.GLOBAL_OBJ.__SENTRY__ = ZI.GLOBAL_OBJ.__SENTRY__ || { extensions: {}, hub: void 0 }),
ZI.GLOBAL_OBJ
)
}
function d01(I) {
let G = mF(),
Z = Dv(G)
return Jm(G, I), Z
}
function hf1() {
let I = mF()
if (I.__SENTRY__ && I.__SENTRY__.acs) {
let G = I.__SENTRY__.acs.getCurrentHub()
if (G) return G
}
return xf1(I)
}
function aj2() {
return hf1().getIsolationScope()
}
function xf1(I = mF()) {
if (!cf1(I) || Dv(I).isOlderThan(Fm)) Jm(I, new Hv())
return Dv(I)
}
function rj2(I, G = xf1()) {
if (!cf1(I) || Dv(I).isOlderThan(Fm)) {
let Z = G.getClient(),
d = G.getScope(),
W = G.getIsolationScope()
Jm(I, new Hv(Z, d.clone(), W.clone()))
}
}
function sj2(I) {
let G = mF()
;(G.__SENTRY__ = G.__SENTRY__ || {}), (G.__SENTRY__.acs = I)
}
function oj2(I, G = {}) {
let Z = mF()
if (Z.__SENTRY__ && Z.__SENTRY__.acs) return Z.__SENTRY__.acs.runWithAsyncContext(I, G)
return I()
}
function cf1(I) {
return !!(I && I.__SENTRY__ && I.__SENTRY__.hub)
}
function Dv(I) {
return ZI.getGlobalSingleton('hub', () => new Hv(), I)
}
function Jm(I, G) {
if (!I) return !1
let Z = (I.__SENTRY__ = I.__SENTRY__ || {})
return (Z.hub = G), !0
}
pf1.API_VERSION = Fm
pf1.Hub = Hv
pf1.ensureHubOnCarrier = rj2
pf1.getCurrentHub = hf1
pf1.getHubFromCarrier = Dv
pf1.getIsolationScope = aj2
pf1.getMainCarrier = mF
pf1.makeMain = d01
pf1.runWithAsyncContext = oj2
pf1.setAsyncContextStrategy = sj2
pf1.setHubOnCarrier = Jm
})
var Km = _((nf1) => {
Object.defineProperty(nf1, '__esModule', { value: !0 })
var if1 = X0(),
Ak2 = HB()
function Xk2(I) {
return (I || Ak2.getCurrentHub()).getScope().getTransaction()
}
var Yk2 = if1.extractTraceparentData
nf1.stripUrlQueryAndFragment = if1.stripUrlQueryAndFragment
nf1.extractTraceparentData = Yk2
nf1.getActiveTransaction = Xk2
})
var gm = _((rf1) => {
Object.defineProperty(rf1, '__esModule', { value: !0 })
var W01 = X0(),
Fk2 = Q6(),
Jk2 = Km(),
af1 = !1
function Kk2() {
if (af1) return
;(af1 = !0),
W01.addGlobalErrorInstrumentationHandler(w01),
W01.addGlobalUnhandledRejectionInstrumentationHandler(w01)
}
function w01() {
let I = Jk2.getActiveTransaction()
if (I)
Fk2.DEBUG_BUILD &&
W01.logger.log('[Tracing] Transaction: internal_error -> Global error occured'),
I.setStatus('internal_error')
}
w01.tag = 'sentry_tracingErrorCallback'
rf1.registerErrorInstrumentation = Kk2
})
var jN = _((sf1) => {
Object.defineProperty(sf1, '__esModule', { value: !0 })
sf1.SpanStatus = void 0
;(function (I) {
I.Ok = 'ok'
let Z = 'deadline_exceeded'
I.DeadlineExceeded = Z
let d = 'unauthenticated'
I.Unauthenticated = d
let W = 'permission_denied'
I.PermissionDenied = W
let w = 'not_found'
I.NotFound = w
let B = 'resource_exhausted'
I.ResourceExhausted = B
let C = 'invalid_argument'
I.InvalidArgument = C
let V = 'unimplemented'
I.Unimplemented = V
let A = 'unavailable'
I.Unavailable = A
let X = 'internal_error'
I.InternalError = X
let Y = 'unknown_error'
I.UnknownError = Y
let H = 'cancelled'
I.Cancelled = H
let J = 'already_exists'
I.AlreadyExists = J
let K = 'failed_precondition'
I.FailedPrecondition = K
let g = 'aborted'
I.Aborted = g
let z = 'out_of_range'
I.OutOfRange = z
let f = 'data_loss'
I.DataLoss = f
})(sf1.SpanStatus || (sf1.SpanStatus = {}))
function C01(I) {
if (I < 400 && I >= 100) return 'ok'
if (I >= 400 && I < 500)
switch (I) {
case 401:
return 'unauthenticated'
case 403:
return 'permission_denied'
case 404:
return 'not_found'
case 409:
return 'already_exists'
case 413:
return 'failed_precondition'
case 429:
return 'resource_exhausted'
default:
return 'invalid_argument'
}
if (I >= 500 && I < 600)
switch (I) {
case 501:
return 'unimplemented'
case 503:
return 'unavailable'
case 504:
return 'deadline_exceeded'
default:
return 'internal_error'
}
return 'unknown_error'
}
var Nk2 = C01
function zk2(I, G) {
I.setTag('http.status_code', String(G)), I.setData('http.response.status_code', G)
let Z = C01(G)
if (Z !== 'unknown_error') I.setStatus(Z)
}
sf1.getSpanStatusFromHttpCode = C01
sf1.setHttpStatus = zk2
sf1.spanStatusfromHttpCode = Nk2
})
var V01 = _((of1) => {
Object.defineProperty(of1, '__esModule', { value: !0 })
var fk2 = X0()
function Rk2(I, G, Z = () => {}) {
let d
try {
d = I()
} catch (W) {
throw (G(W), Z(), W)
}
return Ek2(d, G, Z)
}
function Ek2(I, G, Z) {
if (fk2.isThenable(I))
return I.then(
(d) => {
return Z(), d
},
(d) => {
throw (G(d), Z(), d)
},
)
return Z(), I
}
of1.handleCallbackErrors = Rk2
})
var Nm = _((ef1) => {
Object.defineProperty(ef1, '__esModule', { value: !0 })
var Mk2 = tZ()
function Sk2(I) {
if (typeof __SENTRY_TRACING__ === 'boolean' && !__SENTRY_TRACING__) return !1
let G = Mk2.getClient(),
Z = I || (G && G.getOptions())
return !!Z && (Z.enableTracing || 'tracesSampleRate' in Z || 'tracesSampler' in Z)
}
ef1.hasTracingEnabled = Sk2
})
var Um = _((WR1) => {
Object.defineProperty(WR1, '__esModule', { value: !0 })
var Fv = X0(),
$k2 = Q6(),
XY = HB(),
zm = iI()
gm()
jN()
var yk2 = TF(),
kN = tZ(),
A01 = V01(),
tf1 = Nm()
function Pk2(I, G, Z = () => {}, d = () => {}) {
let W = XY.getCurrentHub(),
w = kN.getCurrentScope(),
B = w.getSpan(),
C = qm(I),
V = Qm(W, { parentSpan: B, spanContext: C, forceTransaction: !1, scope: w })
return (
w.setSpan(V),
A01.handleCallbackErrors(
() => G(V),
(A) => {
V && V.setStatus('internal_error'), Z(A, V)
},
() => {
V && V.end(), w.setSpan(B), d()
},
)
)
}
function IR1(I, G) {
let Z = qm(I)
return XY.runWithAsyncContext(() => {
return kN.withScope(I.scope, (d) => {
let W = XY.getCurrentHub(),
w = d.getSpan(),
C =
I.onlyIfParent && !w
? void 0
: Qm(W, {
parentSpan: w,
spanContext: Z,
forceTransaction: I.forceTransaction,
scope: d,
})
return A01.handleCallbackErrors(
() => G(C),
() => {
if (C) {
let { status: V } = zm.spanToJSON(C)
if (!V || V === 'ok') C.setStatus('internal_error')
}
},
() => C && C.end(),
)
})
})
}
var Ok2 = IR1
function uk2(I, G) {
let Z = qm(I)
return XY.runWithAsyncContext(() => {
return kN.withScope(I.scope, (d) => {
let W = XY.getCurrentHub(),
w = d.getSpan(),
C =
I.onlyIfParent && !w
? void 0
: Qm(W, {
parentSpan: w,
spanContext: Z,
forceTransaction: I.forceTransaction,
scope: d,
})
function V() {
C && C.end()
}
return A01.handleCallbackErrors(
() => G(C, V),
() => {
if (C && C.isRecording()) {
let { status: A } = zm.spanToJSON(C)
if (!A || A === 'ok') C.setStatus('internal_error')
}
},
)
})
})
}
function Tk2(I) {
if (!tf1.hasTracingEnabled()) return
let G = qm(I),
Z = XY.getCurrentHub(),
d = I.scope ? I.scope.getSpan() : GR1()
if (I.onlyIfParent && !d) return
let B = (I.scope || kN.getCurrentScope()).clone()
return Qm(Z, { parentSpan: d, spanContext: G, forceTransaction: I.forceTransaction, scope: B })
}
function GR1() {
return kN.getCurrentScope().getSpan()
}
var mk2 = ({ sentryTrace: I, baggage: G }, Z) => {
let d = kN.getCurrentScope(),
{
traceparentData: W,
dynamicSamplingContext: w,
propagationContext: B,
} = Fv.tracingContextFromHeaders(I, G)
if ((d.setPropagationContext(B), $k2.DEBUG_BUILD && W))
Fv.logger.log(`[Tracing] Continuing trace ${W.traceId}.`)
let C = { ...W, metadata: Fv.dropUndefinedKeys({ dynamicSamplingContext: w }) }
if (!Z) return C
return XY.runWithAsyncContext(() => {
return Z(C)
})
}
function Qm(I, { parentSpan: G, spanContext: Z, forceTransaction: d, scope: W }) {
if (!tf1.hasTracingEnabled()) return
let w = XY.getIsolationScope(),
B
if (G && !d) B = G.startChild(Z)
else if (G) {
let C = yk2.getDynamicSamplingContextFromSpan(G),
{ traceId: V, spanId: A } = G.spanContext(),
X = zm.spanIsSampled(G)
B = I.startTransaction({
traceId: V,
parentSpanId: A,
parentSampled: X,
...Z,
metadata: { dynamicSamplingContext: C, ...Z.metadata },
})
} else {
let {
traceId: C,
dsc: V,
parentSpanId: A,
sampled: X,
} = { ...w.getPropagationContext(), ...W.getPropagationContext() }
B = I.startTransaction({
traceId: C,
parentSpanId: A,
parentSampled: X,
...Z,
metadata: { dynamicSamplingContext: V, ...Z.metadata },
})
}
return W.setSpan(B), bk2(B, W, w), B
}
function qm(I) {
if (I.startTime) {
let G = { ...I }
return (G.startTimestamp = zm.spanTimeInputToSeconds(I.startTime)), delete G.startTime, G
}
return I
}
var ZR1 = '_sentryScope',
dR1 = '_sentryIsolationScope'
function bk2(I, G, Z) {
if (I) Fv.addNonEnumerableProperty(I, dR1, Z), Fv.addNonEnumerableProperty(I, ZR1, G)
}
function lk2(I) {
return { scope: I[ZR1], isolationScope: I[dR1] }
}
WR1.continueTrace = mk2
WR1.getActiveSpan = GR1
WR1.getCapturedScopesOnSpan = lk2
WR1.startActiveSpan = Ok2
WR1.startInactiveSpan = Tk2
WR1.startSpan = IR1
WR1.startSpanManual = uk2
WR1.trace = Pk2
})
var Kv = _((BR1) => {
Object.defineProperty(BR1, '__esModule', { value: !0 })
var ak2 = X0()
Q6()
gm()
jN()
var rk2 = Um(),
Jv
function wR1(I) {
return Jv ? Jv.get(I) : void 0
}
function sk2(I) {
let G = wR1(I)
if (!G) return
let Z = {}
for (let [, [d, W]] of G) {
if (!Z[d]) Z[d] = []
Z[d].push(ak2.dropUndefinedKeys(W))
}
return Z
}
function ok2(I, G, Z, d, W, w) {
let B = rk2.getActiveSpan()
if (B) {
let C = wR1(B) || new Map(),
V = `${I}:${G}@${d}`,
A = C.get(w)
if (A) {
let [, X] = A
C.set(w, [
V,
{
min: Math.min(X.min, Z),
max: Math.max(X.max, Z),
count: (X.count += 1),
sum: (X.sum += Z),
tags: X.tags,
},
])
} else C.set(w, [V, { min: Z, max: Z, count: 1, sum: Z, tags: W }])
if (!Jv) Jv = new WeakMap()
Jv.set(B, C)
}
}
BR1.getMetricSummaryJsonForSpan = sk2
BR1.updateMetricSummaryOnActiveSpan = ok2
})
var gv = _((CR1) => {
Object.defineProperty(CR1, '__esModule', { value: !0 })
var Ih2 = 'sentry.source',
Gh2 = 'sentry.sample_rate',
Zh2 = 'sentry.op',
dh2 = 'sentry.origin',
Wh2 = 'profile_id'
CR1.SEMANTIC_ATTRIBUTE_PROFILE_ID = Wh2
CR1.SEMANTIC_ATTRIBUTE_SENTRY_OP = Zh2
CR1.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN = dh2
CR1.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE = Gh2
CR1.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE = Ih2
})
var fm = _((YR1) => {
Object.defineProperty(YR1, '__esModule', { value: !0 })
var bF = X0(),
VR1 = Q6(),
Xh2 = Kv(),
uV = gv(),
AR1 = mN(),
hN = iI(),
Yh2 = jN()
class XR1 {
constructor(I = 1000) {
;(this._maxlen = I), (this.spans = [])
}
add(I) {
if (this.spans.length > this._maxlen) I.spanRecorder = void 0
else this.spans.push(I)
}
}
class X01 {
constructor(I = {}) {
if (
((this._traceId = I.traceId || bF.uuid4()),
(this._spanId = I.spanId || bF.uuid4().substring(16)),
(this._startTime = I.startTimestamp || bF.timestampInSeconds()),
(this.tags = I.tags ? { ...I.tags } : {}),
(this.data = I.data ? { ...I.data } : {}),
(this.instrumenter = I.instrumenter || 'sentry'),
(this._attributes = {}),
this.setAttributes({
[uV.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: I.origin || 'manual',
[uV.SEMANTIC_ATTRIBUTE_SENTRY_OP]: I.op,
...I.attributes,
}),
(this._name = I.name || I.description),
I.parentSpanId)
)
this._parentSpanId = I.parentSpanId
if ('sampled' in I) this._sampled = I.sampled
if (I.status) this._status = I.status
if (I.endTimestamp) this._endTime = I.endTimestamp
if (I.exclusiveTime !== void 0) this._exclusiveTime = I.exclusiveTime
this._measurements = I.measurements ? { ...I.measurements } : {}
}
get name() {
return this._name || ''
}
set name(I) {
this.updateName(I)
}
get description() {
return this._name
}
set description(I) {
this._name = I
}
get traceId() {
return this._traceId
}
set traceId(I) {
this._traceId = I
}
get spanId() {
return this._spanId
}
set spanId(I) {
this._spanId = I
}
set parentSpanId(I) {
this._parentSpanId = I
}
get parentSpanId() {
return this._parentSpanId
}
get sampled() {
return this._sampled
}
set sampled(I) {
this._sampled = I
}
get attributes() {
return this._attributes
}
set attributes(I) {
this._attributes = I
}
get startTimestamp() {
return this._startTime
}
set startTimestamp(I) {
this._startTime = I
}
get endTimestamp() {
return this._endTime
}
set endTimestamp(I) {
this._endTime = I
}
get status() {
return this._status
}
set status(I) {
this._status = I
}
get op() {
return this._attributes[uV.SEMANTIC_ATTRIBUTE_SENTRY_OP]
}
set op(I) {
this.setAttribute(uV.SEMANTIC_ATTRIBUTE_SENTRY_OP, I)
}
get origin() {
return this._attributes[uV.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]
}
set origin(I) {
this.setAttribute(uV.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, I)
}
spanContext() {
let { _spanId: I, _traceId: G, _sampled: Z } = this
return { spanId: I, traceId: G, traceFlags: Z ? hN.TRACE_FLAG_SAMPLED : hN.TRACE_FLAG_NONE }
}
startChild(I) {
let G = new X01({
...I,
parentSpanId: this._spanId,
sampled: this._sampled,
traceId: this._traceId,
})
if (((G.spanRecorder = this.spanRecorder), G.spanRecorder)) G.spanRecorder.add(G)
let Z = AR1.getRootSpan(this)
if (((G.transaction = Z), VR1.DEBUG_BUILD && Z)) {
let d = (I && I.op) || '< unknown op >',
W = hN.spanToJSON(G).description || '< unknown name >',
w = Z.spanContext().spanId,
B = `[Tracing] Starting '${d}' span on transaction '${W}' (${w}).`
bF.logger.log(B), (this._logMessage = B)
}
return G
}
setTag(I, G) {
return (this.tags = { ...this.tags, [I]: G }), this
}
setData(I, G) {
return (this.data = { ...this.data, [I]: G }), this
}
setAttribute(I, G) {
if (G === void 0) delete this._attributes[I]
else this._attributes[I] = G
}
setAttributes(I) {
Object.keys(I).forEach((G) => this.setAttribute(G, I[G]))
}
setStatus(I) {
return (this._status = I), this
}
setHttpStatus(I) {
return Yh2.setHttpStatus(this, I), this
}
setName(I) {
this.updateName(I)
}
updateName(I) {
return (this._name = I), this
}
isSuccess() {
return this._status === 'ok'
}
finish(I) {
return this.end(I)
}
end(I) {
if (this._endTime) return
let G = AR1.getRootSpan(this)
if (VR1.DEBUG_BUILD && G && G.spanContext().spanId !== this._spanId) {
let Z = this._logMessage
if (Z) bF.logger.log(Z.replace('Starting', 'Finishing'))
}
this._endTime = hN.spanTimeInputToSeconds(I)
}
toTraceparent() {
return hN.spanToTraceHeader(this)
}
toContext() {
return bF.dropUndefinedKeys({
data: this._getData(),
description: this._name,
endTimestamp: this._endTime,
op: this.op,
parentSpanId: this._parentSpanId,
sampled: this._sampled,
spanId: this._spanId,
startTimestamp: this._startTime,
status: this._status,
tags: this.tags,
traceId: this._traceId,
})
}
updateWithContext(I) {
return (
(this.data = I.data || {}),
(this._name = I.name || I.description),
(this._endTime = I.endTimestamp),
(this.op = I.op),
(this._parentSpanId = I.parentSpanId),
(this._sampled = I.sampled),
(this._spanId = I.spanId || this._spanId),
(this._startTime = I.startTimestamp || this._startTime),
(this._status = I.status),
(this.tags = I.tags || {}),
(this._traceId = I.traceId || this._traceId),
this
)
}
getTraceContext() {
return hN.spanToTraceContext(this)
}
getSpanJSON() {
return bF.dropUndefinedKeys({
data: this._getData(),
description: this._name,
op: this._attributes[uV.SEMANTIC_ATTRIBUTE_SENTRY_OP],
parent_span_id: this._parentSpanId,
span_id: this._spanId,
start_timestamp: this._startTime,
status: this._status,
tags: Object.keys(this.tags).length > 0 ? this.tags : void 0,
timestamp: this._endTime,
trace_id: this._traceId,
origin: this._attributes[uV.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN],
_metrics_summary: Xh2.getMetricSummaryJsonForSpan(this),
profile_id: this._attributes[uV.SEMANTIC_ATTRIBUTE_PROFILE_ID],
exclusive_time: this._exclusiveTime,
measurements: Object.keys(this._measurements).length > 0 ? this._measurements : void 0,
})
}
isRecording() {
return !this._endTime && !!this._sampled
}
toJSON() {
return this.getSpanJSON()
}
_getData() {
let { data: I, _attributes: G } = this,
Z = Object.keys(I).length > 0,
d = Object.keys(G).length > 0
if (!Z && !d) return
if (Z && d) return { ...I, ...G }
return Z ? I : G
}
}
YR1.Span = X01
YR1.SpanRecorder = XR1
})
var vm = _((FR1) => {
Object.defineProperty(FR1, '__esModule', { value: !0 })
var xN = X0(),
Rm = Q6(),
Hh2 = HB(),
Fh2 = Kv(),
Nv = gv(),
Em = iI(),
_R1 = TF(),
DR1 = fm(),
Jh2 = Um()
class HR1 extends DR1.Span {
constructor(I, G) {
super(I)
;(this._contexts = {}),
(this._hub = G || Hh2.getCurrentHub()),
(this._name = I.name || ''),
(this._metadata = { ...I.metadata }),
(this._trimEnd = I.trimEnd),
(this.transaction = this)
let Z = this._metadata.dynamicSamplingContext
if (Z) this._frozenDynamicSamplingContext = { ...Z }
}
get name() {
return this._name
}
set name(I) {
this.setName(I)
}
get metadata() {
return {
source: 'custom',
spanMetadata: {},
...this._metadata,
...(this._attributes[Nv.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] && {
source: this._attributes[Nv.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE],
}),
...(this._attributes[Nv.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE] && {
sampleRate: this._attributes[Nv.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE],
}),
}
}
set metadata(I) {
this._metadata = I
}
setName(I, G = 'custom') {
;(this._name = I), this.setAttribute(Nv.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, G)
}
updateName(I) {
return (this._name = I), this
}
initSpanRecorder(I = 1000) {
if (!this.spanRecorder) this.spanRecorder = new DR1.SpanRecorder(I)
this.spanRecorder.add(this)
}
setContext(I, G) {
if (G === null) delete this._contexts[I]
else this._contexts[I] = G
}
setMeasurement(I, G, Z = '') {
this._measurements[I] = { value: G, unit: Z }
}
setMetadata(I) {
this._metadata = { ...this._metadata, ...I }
}
end(I) {
let G = Em.spanTimeInputToSeconds(I),
Z = this._finishTransaction(G)
if (!Z) return
return this._hub.captureEvent(Z)
}
toContext() {
let I = super.toContext()
return xN.dropUndefinedKeys({ ...I, name: this._name, trimEnd: this._trimEnd })
}
updateWithContext(I) {
return (
super.updateWithContext(I), (this._name = I.name || ''), (this._trimEnd = I.trimEnd), this
)
}
getDynamicSamplingContext() {
return _R1.getDynamicSamplingContextFromSpan(this)
}
setHub(I) {
this._hub = I
}
getProfileId() {
if (this._contexts !== void 0 && this._contexts.profile !== void 0)
return this._contexts.profile.profile_id
return
}
_finishTransaction(I) {
if (this._endTime !== void 0) return
if (!this._name)
Rm.DEBUG_BUILD &&
xN.logger.warn('Transaction has no name, falling back to `<unlabeled transaction>`.'),
(this._name = '<unlabeled transaction>')
super.end(I)
let G = this._hub.getClient()
if (G && G.emit) G.emit('finishTransaction', this)
if (this._sampled !== !0) {
if (
(Rm.DEBUG_BUILD &&
xN.logger.log(
'[Tracing] Discarding transaction because its trace was not chosen to be sampled.',
),
G)
)
G.recordDroppedEvent('sample_rate', 'transaction')
return
}
let Z = this.spanRecorder
? this.spanRecorder.spans.filter((A) => A !== this && Em.spanToJSON(A).timestamp)
: []
if (this._trimEnd && Z.length > 0) {
let A = Z.map((X) => Em.spanToJSON(X).timestamp).filter(Boolean)
this._endTime = A.reduce((X, Y) => {
return X > Y ? X : Y
})
}
let { scope: d, isolationScope: W } = Jh2.getCapturedScopesOnSpan(this),
{ metadata: w } = this,
{ source: B } = w,
C = {
contexts: { ...this._contexts, trace: Em.spanToTraceContext(this) },
spans: Z,
start_timestamp: this._startTime,
tags: this.tags,
timestamp: this._endTime,
transaction: this._name,
type: 'transaction',
sdkProcessingMetadata: {
...w,
capturedSpanScope: d,
capturedSpanIsolationScope: W,
...xN.dropUndefinedKeys({
dynamicSamplingContext: _R1.getDynamicSamplingContextFromSpan(this),
}),
},
_metrics_summary: Fh2.getMetricSummaryJsonForSpan(this),
...(B && { transaction_info: { source: B } }),
}
if (Object.keys(this._measurements).length > 0)
Rm.DEBUG_BUILD &&
xN.logger.log(
'[Measurements] Adding measurements to transaction',
JSON.stringify(this._measurements, void 0, 2),
),
(C.measurements = this._measurements)
return (
Rm.DEBUG_BUILD &&
xN.logger.log(`[Tracing] Finishing ${this.op} transaction: ${this._name}.`),
C
)
}
}
FR1.Transaction = HR1
})
var _01 = _((KR1) => {
Object.defineProperty(KR1, '__esModule', { value: !0 })
var f7 = X0(),
nI = Q6(),
Mm = iI(),
gh2 = fm(),
Nh2 = vm(),
Sm = { idleTimeout: 1000, finalTimeout: 30000, heartbeatInterval: 5000 },
zh2 = 'finishReason',
cN = [
'heartbeatFailed',
'idleTimeout',
'documentHidden',
'finalTimeout',
'externalFinish',
'cancelled',
]
class Y01 extends gh2.SpanRecorder {
constructor(I, G, Z, d) {
super(d)
;(this._pushActivity = I), (this._popActivity = G), (this.transactionSpanId = Z)
}
add(I) {
if (I.spanContext().spanId !== this.transactionSpanId) {
let G = I.end
if (
((I.end = (...Z) => {
return this._popActivity(I.spanContext().spanId), G.apply(I, Z)
}),
Mm.spanToJSON(I).timestamp === void 0)
)
this._pushActivity(I.spanContext().spanId)
}
super.add(I)
}
}
class JR1 extends Nh2.Transaction {
constructor(
I,
G,
Z = Sm.idleTimeout,
d = Sm.finalTimeout,
W = Sm.heartbeatInterval,
w = !1,
B = !1,
) {
super(I, G)
if (
((this._idleHub = G),
(this._idleTimeout = Z),
(this._finalTimeout = d),
(this._heartbeatInterval = W),
(this._onScope = w),
(this.activities = {}),
(this._heartbeatCounter = 0),
(this._finished = !1),
(this._idleTimeoutCanceledPermanently = !1),
(this._beforeFinishCallbacks = []),
(this._finishReason = cN[4]),
(this._autoFinishAllowed = !B),
w)
)
nI.DEBUG_BUILD &&
f7.logger.log(`Setting idle transaction on scope. Span ID: ${this.spanContext().spanId}`),
G.getScope().setSpan(this)
if (!B) this._restartIdleTimeout()
setTimeout(() => {
if (!this._finished)
this.setStatus('deadline_exceeded'), (this._finishReason = cN[3]), this.end()
}, this._finalTimeout)
}
end(I) {
let G = Mm.spanTimeInputToSeconds(I)
if (((this._finished = !0), (this.activities = {}), this.op === 'ui.action.click'))
this.setAttribute(zh2, this._finishReason)
if (this.spanRecorder) {
nI.DEBUG_BUILD &&
f7.logger.log(
'[Tracing] finishing IdleTransaction',
new Date(G * 1000).toISOString(),
this.op,
)
for (let Z of this._beforeFinishCallbacks) Z(this, G)
;(this.spanRecorder.spans = this.spanRecorder.spans.filter((Z) => {
if (Z.spanContext().spanId === this.spanContext().spanId) return !0
if (!Mm.spanToJSON(Z).timestamp)
Z.setStatus('cancelled'),
Z.end(G),
nI.DEBUG_BUILD &&
f7.logger.log(
'[Tracing] cancelling span since transaction ended early',
JSON.stringify(Z, void 0, 2),
)
let { start_timestamp: d, timestamp: W } = Mm.spanToJSON(Z),
w = d && d < G,
B = (this._finalTimeout + this._idleTimeout) / 1000,
C = W && d && W - d < B
if (nI.DEBUG_BUILD) {
let V = JSON.stringify(Z, void 0, 2)
if (!w)
f7.logger.log(
'[Tracing] discarding Span since it happened after Transaction was finished',
V,
)
else if (!C)
f7.logger.log(
'[Tracing] discarding Span since it finished after Transaction final timeout',
V,
)
}
return w && C
})),
nI.DEBUG_BUILD && f7.logger.log('[Tracing] flushing IdleTransaction')
} else nI.DEBUG_BUILD && f7.logger.log('[Tracing] No active IdleTransaction')
if (this._onScope) {
let Z = this._idleHub.getScope()
if (Z.getTransaction() === this) Z.setSpan(void 0)
}
return super.end(I)
}
registerBeforeFinishCallback(I) {
this._beforeFinishCallbacks.push(I)
}
initSpanRecorder(I) {
if (!this.spanRecorder) {
let G = (d) => {
if (this._finished) return
this._pushActivity(d)
},
Z = (d) => {
if (this._finished) return
this._popActivity(d)
}
;(this.spanRecorder = new Y01(G, Z, this.spanContext().spanId, I)),
nI.DEBUG_BUILD && f7.logger.log('Starting heartbeat'),
this._pingHeartbeat()
}
this.spanRecorder.add(this)
}
cancelIdleTimeout(I, { restartOnChildSpanChange: G } = { restartOnChildSpanChange: !0 }) {
if (((this._idleTimeoutCanceledPermanently = G === !1), this._idleTimeoutID)) {
if (
(clearTimeout(this._idleTimeoutID),
(this._idleTimeoutID = void 0),
Object.keys(this.activities).length === 0 && this._idleTimeoutCanceledPermanently)
)
(this._finishReason = cN[5]), this.end(I)
}
}
setFinishReason(I) {
this._finishReason = I
}
sendAutoFinishSignal() {
if (!this._autoFinishAllowed)
nI.DEBUG_BUILD && f7.logger.log('[Tracing] Received finish signal for idle transaction.'),
this._restartIdleTimeout(),
(this._autoFinishAllowed = !0)
}
_restartIdleTimeout(I) {
this.cancelIdleTimeout(),
(this._idleTimeoutID = setTimeout(() => {
if (!this._finished && Object.keys(this.activities).length === 0)
(this._finishReason = cN[1]), this.end(I)
}, this._idleTimeout))
}
_pushActivity(I) {
this.cancelIdleTimeout(void 0, {
restartOnChildSpanChange: !this._idleTimeoutCanceledPermanently,
}),
nI.DEBUG_BUILD && f7.logger.log(`[Tracing] pushActivity: ${I}`),
(this.activities[I] = !0),
nI.DEBUG_BUILD &&
f7.logger.log('[Tracing] new activities count', Object.keys(this.activities).length)
}
_popActivity(I) {
if (this.activities[I])
nI.DEBUG_BUILD && f7.logger.log(`[Tracing] popActivity ${I}`),
delete this.activities[I],
nI.DEBUG_BUILD &&
f7.logger.log('[Tracing] new activities count', Object.keys(this.activities).length)
if (Object.keys(this.activities).length === 0) {
let G = f7.timestampInSeconds()
if (this._idleTimeoutCanceledPermanently) {
if (this._autoFinishAllowed) (this._finishReason = cN[5]), this.end(G)
} else this._restartIdleTimeout(G + this._idleTimeout / 1000)
}
}
_beat() {
if (this._finished) return
let I = Object.keys(this.activities).join('')
if (I === this._prevHeartbeatString) this._heartbeatCounter++
else this._heartbeatCounter = 1
if (((this._prevHeartbeatString = I), this._heartbeatCounter >= 3)) {
if (this._autoFinishAllowed)
nI.DEBUG_BUILD &&
f7.logger.log('[Tracing] Transaction finished because of no change for 3 heart beats'),
this.setStatus('deadline_exceeded'),
(this._finishReason = cN[0]),
this.end()
} else this._pingHeartbeat()
}
_pingHeartbeat() {
nI.DEBUG_BUILD &&
f7.logger.log(`pinging Heartbeat -> current counter: ${this._heartbeatCounter}`),
setTimeout(() => {
this._beat()
}, this._heartbeatInterval)
}
}
KR1.IdleTransaction = JR1
KR1.IdleTransactionSpanRecorder = Y01
KR1.TRACING_DEFAULTS = Sm
})
var D01 = _((NR1) => {
Object.defineProperty(NR1, '__esModule', { value: !0 })
var lF = X0(),
pN = Q6(),
Lm = gv(),
fh2 = Nm(),
Rh2 = iI()
function Eh2(I, G, Z) {
if (!fh2.hasTracingEnabled(G)) return (I.sampled = !1), I
if (I.sampled !== void 0)
return I.setAttribute(Lm.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, Number(I.sampled)), I
let d
if (typeof G.tracesSampler === 'function')
(d = G.tracesSampler(Z)), I.setAttribute(Lm.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, Number(d))
else if (Z.parentSampled !== void 0) d = Z.parentSampled
else if (typeof G.tracesSampleRate !== 'undefined')
(d = G.tracesSampleRate), I.setAttribute(Lm.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, Number(d))
else (d = 1), I.setAttribute(Lm.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, d)
if (!gR1(d))
return (
pN.DEBUG_BUILD &&
lF.logger.warn('[Tracing] Discarding transaction because of invalid sample rate.'),
(I.sampled = !1),
I
)
if (!d)
return (
pN.DEBUG_BUILD &&
lF.logger.log(
`[Tracing] Discarding transaction because ${typeof G.tracesSampler === 'function' ? 'tracesSampler returned 0 or false' : 'a negative sampling decision was inherited or tracesSampleRate is set to 0'}`,
),
(I.sampled = !1),
I
)
if (((I.sampled = Math.random() < d), !I.sampled))
return (
pN.DEBUG_BUILD &&
lF.logger.log(
`[Tracing] Discarding transaction because it's not included in the random sample (sampling rate = ${Number(d)})`,
),
I
)
return (
pN.DEBUG_BUILD &&
lF.logger.log(`[Tracing] starting ${I.op} transaction - ${Rh2.spanToJSON(I).description}`),
I
)
}
function gR1(I) {
if (lF.isNaN(I) || !(typeof I === 'number' || typeof I === 'boolean'))
return (
pN.DEBUG_BUILD &&
lF.logger.warn(
`[Tracing] Given sample rate is invalid. Sample rate must be a boolean or a number between 0 and 1. Got ${JSON.stringify(I)} of type ${JSON.stringify(typeof I)}.`,
),
!1
)
if (I < 0 || I > 1)
return (
pN.DEBUG_BUILD &&
lF.logger.warn(
`[Tracing] Given sample rate is invalid. Sample rate must be between 0 and 1. Got ${I}.`,
),
!1
)
return !0
}
NR1.isValidSampleRate = gR1
NR1.sampleTransaction = Eh2
})
var H01 = _((QR1) => {
Object.defineProperty(QR1, '__esModule', { value: !0 })
var Sh2 = X0(),
Lh2 = Q6(),
$h2 = HB(),
yh2 = iI(),
Ph2 = gm(),
Oh2 = _01(),
zR1 = D01(),
uh2 = vm()
function Th2() {
let G = this.getScope().getSpan()
return G ? { 'sentry-trace': yh2.spanToTraceHeader(G) } : {}
}
function mh2(I, G) {
let Z = this.getClient(),
d = (Z && Z.getOptions()) || {},
W = d.instrumenter || 'sentry',
w = I.instrumenter || 'sentry'
if (W !== w)
Lh2.DEBUG_BUILD &&
Sh2.logger
.error(`A transaction was started with instrumenter=\`${w}\`, but the SDK is configured with the \`${W}\` instrumenter.
The transaction will not be sampled. Please use the ${W} instrumentation to start transactions.`),
(I.sampled = !1)
let B = new uh2.Transaction(I, this)
if (
((B = zR1.sampleTransaction(B, d, {
name: I.name,
parentSampled: I.parentSampled,
transactionContext: I,
attributes: { ...I.data, ...I.attributes },
...G,
})),
B.isRecording())
)
B.initSpanRecorder(d._experiments && d._experiments.maxSpans)
if (Z && Z.emit) Z.emit('startTransaction', B)
return B
}
function bh2(I, G, Z, d, W, w, B, C = !1) {
let V = I.getClient(),
A = (V && V.getOptions()) || {},
X = new Oh2.IdleTransaction(G, I, Z, d, B, W, C)
if (
((X = zR1.sampleTransaction(X, A, {
name: G.name,
parentSampled: G.parentSampled,
transactionContext: G,
attributes: { ...G.data, ...G.attributes },
...w,
})),
X.isRecording())
)
X.initSpanRecorder(A._experiments && A._experiments.maxSpans)
if (V && V.emit) V.emit('startTransaction', X)
return X
}
function lh2() {
let I = $h2.getMainCarrier()
if (!I.__SENTRY__) return
if (
((I.__SENTRY__.extensions = I.__SENTRY__.extensions || {}),
!I.__SENTRY__.extensions.startTransaction)
)
I.__SENTRY__.extensions.startTransaction = mh2
if (!I.__SENTRY__.extensions.traceHeaders) I.__SENTRY__.extensions.traceHeaders = Th2
Ph2.registerErrorInstrumentation()
}
QR1.addTracingExtensions = lh2
QR1.startIdleTransaction = bh2
})
var UR1 = _((qR1) => {
Object.defineProperty(qR1, '__esModule', { value: !0 })
var hh2 = Km()
function xh2(I, G, Z) {
let d = hh2.getActiveTransaction()
if (d) d.setMeasurement(I, G, Z)
}
qR1.setMeasurement = xh2
})
var F01 = _((fR1) => {
Object.defineProperty(fR1, '__esModule', { value: !0 })
var iN = X0()
function ph2(I, G) {
if (!G) return I
return (
(I.sdk = I.sdk || {}),
(I.sdk.name = I.sdk.name || G.name),
(I.sdk.version = I.sdk.version || G.version),
(I.sdk.integrations = [...(I.sdk.integrations || []), ...(G.integrations || [])]),
(I.sdk.packages = [...(I.sdk.packages || []), ...(G.packages || [])]),
I
)
}
function ih2(I, G, Z, d) {
let W = iN.getSdkMetadataForEnvelopeHeader(Z),
w = {
sent_at: new Date().toISOString(),
...(W && { sdk: W }),
...(!!d && G && { dsn: iN.dsnToString(G) }),
},
B = 'aggregates' in I ? [{ type: 'sessions' }, I] : [{ type: 'session' }, I.toJSON()]
return iN.createEnvelope(w, [B])
}
function nh2(I, G, Z, d) {
let W = iN.getSdkMetadataForEnvelopeHeader(Z),
w = I.type && I.type !== 'replay_event' ? I.type : 'event'
ph2(I, Z && Z.sdk)
let B = iN.createEventEnvelopeHeaders(I, W, d, G)
delete I.sdkProcessingMetadata
let C = [{ type: w }, I]
return iN.createEnvelope(B, [C])
}
fR1.createEventEnvelope = nh2
fR1.createSessionEnvelope = ih2
})
var J01 = _((ER1) => {
Object.defineProperty(ER1, '__esModule', { value: !0 })
var sh2 = X0(),
oh2 = tZ()
class RR1 {
constructor(I, G) {
if (
((this._client = I),
(this.flushTimeout = 60),
(this._pendingAggregates = {}),
(this._isEnabled = !0),
(this._intervalId = setInterval(() => this.flush(), this.flushTimeout * 1000)),
this._intervalId.unref)
)
this._intervalId.unref()
this._sessionAttrs = G
}
flush() {
let I = this.getSessionAggregates()
if (I.aggregates.length === 0) return
;(this._pendingAggregates = {}), this._client.sendSession(I)
}
getSessionAggregates() {
let I = Object.keys(this._pendingAggregates).map((Z) => {
return this._pendingAggregates[parseInt(Z)]
}),
G = { attrs: this._sessionAttrs, aggregates: I }
return sh2.dropUndefinedKeys(G)
}
close() {
clearInterval(this._intervalId), (this._isEnabled = !1), this.flush()
}
incrementSessionStatusCount() {
if (!this._isEnabled) return
let I = oh2.getCurrentScope(),
G = I.getRequestSession()
if (G && G.status)
this._incrementSessionStatusCount(G.status, new Date()), I.setRequestSession(void 0)
}
_incrementSessionStatusCount(I, G) {
let Z = new Date(G).setSeconds(0, 0)
this._pendingAggregates[Z] = this._pendingAggregates[Z] || {}
let d = this._pendingAggregates[Z]
if (!d.started) d.started = new Date(Z).toISOString()
switch (I) {
case 'errored':
return (d.errored = (d.errored || 0) + 1), d.errored
case 'ok':
return (d.exited = (d.exited || 0) + 1), d.exited
default:
return (d.crashed = (d.crashed || 0) + 1), d.crashed
}
}
}
ER1.SessionFlusher = RR1
})
var $m = _((MR1) => {
Object.defineProperty(MR1, '__esModule', { value: !0 })
var K01 = X0(),
th2 = '7'
function vR1(I) {
let G = I.protocol ? `${I.protocol}:` : '',
Z = I.port ? `:${I.port}` : ''
return `${G}//${I.host}${Z}${I.path ? `/${I.path}` : ''}/api/`
}
function Ix2(I) {
return `${vR1(I)}${I.projectId}/envelope/`
}
function Gx2(I, G) {
return K01.urlEncode({
sentry_key: I.publicKey,
sentry_version: th2,
...(G && { sentry_client: `${G.name}/${G.version}` }),
})
}
function Zx2(I, G = {}) {
let Z = typeof G === 'string' ? G : G.tunnel,
d = typeof G === 'string' || !G._metadata ? void 0 : G._metadata.sdk
return Z ? Z : `${Ix2(I)}?${Gx2(I, d)}`
}
function dx2(I, G) {
let Z = K01.makeDsn(I)
if (!Z) return ''
let d = `${vR1(Z)}embed/error-page/`,
W = `dsn=${K01.dsnToString(Z)}`
for (let w in G) {
if (w === 'dsn') continue
if (w === 'onClose') continue
if (w === 'user') {
let B = G.user
if (!B) continue
if (B.name) W += `&name=${encodeURIComponent(B.name)}`
if (B.email) W += `&email=${encodeURIComponent(B.email)}`
} else W += `&${encodeURIComponent(w)}=${encodeURIComponent(G[w])}`
}
return `${d}?${W}`
}
MR1.getEnvelopeEndpointWithUrlEncodedAuth = Zx2
MR1.getReportDialogEndpoint = dx2
})
var TV = _((LR1) => {
Object.defineProperty(LR1, '__esModule', { value: !0 })
var ym = X0(),
g01 = Q6(),
Bx2 = Av(),
Cx2 = tZ(),
Vx2 = HB(),
N01 = []
function Ax2(I) {
let G = {}
return (
I.forEach((Z) => {
let { name: d } = Z,
W = G[d]
if (W && !W.isDefaultInstance && Z.isDefaultInstance) return
G[d] = Z
}),
Object.keys(G).map((Z) => G[Z])
)
}
function Xx2(I) {
let G = I.defaultIntegrations || [],
Z = I.integrations
G.forEach((B) => {
B.isDefaultInstance = !0
})
let d
if (Array.isArray(Z)) d = [...G, ...Z]
else if (typeof Z === 'function') d = ym.arrayify(Z(G))
else d = G
let W = Ax2(d),
w = Hx2(W, (B) => B.name === 'Debug')
if (w !== -1) {
let [B] = W.splice(w, 1)
W.push(B)
}
return W
}
function Yx2(I, G) {
let Z = {}
return (
G.forEach((d) => {
if (d) SR1(I, d, Z)
}),
Z
)
}
function _x2(I, G) {
for (let Z of G) if (Z && Z.afterAllSetup) Z.afterAllSetup(I)
}
function SR1(I, G, Z) {
if (Z[G.name]) {
g01.DEBUG_BUILD &&
ym.logger.log(`Integration skipped because it was already installed: ${G.name}`)
return
}
if (((Z[G.name] = G), N01.indexOf(G.name) === -1))
G.setupOnce(Bx2.addGlobalEventProcessor, Vx2.getCurrentHub), N01.push(G.name)
if (G.setup && typeof G.setup === 'function') G.setup(I)
if (I.on && typeof G.preprocessEvent === 'function') {
let d = G.preprocessEvent.bind(G)
I.on('preprocessEvent', (W, w) => d(W, w, I))
}
if (I.addEventProcessor && typeof G.processEvent === 'function') {
let d = G.processEvent.bind(G),
W = Object.assign((w, B) => d(w, B, I), { id: G.name })
I.addEventProcessor(W)
}
g01.DEBUG_BUILD && ym.logger.log(`Integration installed: ${G.name}`)
}
function Dx2(I) {
let G = Cx2.getClient()
if (!G || !G.addIntegration) {
g01.DEBUG_BUILD &&
ym.logger.warn(`Cannot add integration "${I.name}" because no SDK Client is available.`)
return
}
G.addIntegration(I)
}
function Hx2(I, G) {
for (let Z = 0; Z < I.length; Z++) if (G(I[Z]) === !0) return Z
return -1
}
function Fx2(I, G) {
return Object.assign(
function Z(...d) {
return G(...d)
},
{ id: I },
)
}
function Jx2(I) {
return I
}
LR1.addIntegration = Dx2
LR1.afterSetupIntegrations = _x2
LR1.convertIntegrationFnToClass = Fx2
LR1.defineIntegration = Jx2
LR1.getIntegrationsToSetup = Xx2
LR1.installedIntegrations = N01
LR1.setupIntegration = SR1
LR1.setupIntegrations = Yx2
})
var zv = _(($R1) => {
Object.defineProperty($R1, '__esModule', { value: !0 })
var Rx2 = X0()
function Ex2(I, G, Z, d) {
let W = Object.entries(Rx2.dropUndefinedKeys(d)).sort((w, B) => w[0].localeCompare(B[0]))
return `${I}${G}${Z}${W}`
}
function vx2(I) {
let G = 0
for (let Z = 0; Z < I.length; Z++) {
let d = I.charCodeAt(Z)
;(G = (G << 5) - G + d), (G &= G)
}
return G >>> 0
}
function Mx2(I) {
let G = ''
for (let Z of I) {
let d = Object.entries(Z.tags),
W = d.length > 0 ? `|#${d.map(([w, B]) => `${w}:${B}`).join(',')}` : ''
G += `${Z.name}@${Z.unit}:${Z.metric}|${Z.metricType}${W}|T${Z.timestamp}
`
}
return G
}
function Sx2(I) {
return I.replace(/[^\w]+/gi, '_')
}
function Lx2(I) {
return I.replace(/[^\w\-.]+/gi, '_')
}
function $x2(I) {
return I.replace(/[^\w\-./]+/gi, '')
}
var yx2 = [
[
`
`,
'\\n',
],
['\r', '\\r'],
['\t', '\\t'],
['\\', '\\\\'],
['|', '\\u{7c}'],
[',', '\\u{2c}'],
]
function Px2(I) {
for (let [G, Z] of yx2) if (I === G) return Z
return I
}
function Ox2(I) {
return [...I].reduce((G, Z) => G + Px2(Z), '')
}
function ux2(I) {
let G = {}
for (let Z in I)
if (Object.prototype.hasOwnProperty.call(I, Z)) {
let d = $x2(Z)
G[d] = Ox2(String(I[Z]))
}
return G
}
$R1.getBucketKey = Ex2
$R1.sanitizeMetricKey = Lx2
$R1.sanitizeTags = ux2
$R1.sanitizeUnit = Sx2
$R1.serializeMetricBuckets = Mx2
$R1.simpleHash = vx2
})
var OR1 = _((PR1) => {
Object.defineProperty(PR1, '__esModule', { value: !0 })
var yR1 = X0(),
hx2 = zv()
function xx2(I, G, Z, d) {
let W = { sent_at: new Date().toISOString() }
if (Z && Z.sdk) W.sdk = { name: Z.sdk.name, version: Z.sdk.version }
if (!!d && G) W.dsn = yR1.dsnToString(G)
let w = cx2(I)
return yR1.createEnvelope(W, [w])
}
function cx2(I) {
let G = hx2.serializeMetricBuckets(I)
return [{ type: 'statsd', length: G.length }, G]
}
PR1.createMetricEnvelope = xx2
})
var z01 = _((kR1) => {
Object.defineProperty(kR1, '__esModule', { value: !0 })
var M5 = X0(),
ix2 = $m(),
JB = Q6(),
uR1 = F01(),
nx2 = tZ(),
ax2 = HB(),
Pm = TV(),
rx2 = OR1(),
TR1 = TN(),
sx2 = TF(),
ox2 = Am(),
mR1 = "Not capturing exception because it's already been captured."
class bR1 {
constructor(I) {
if (
((this._options = I),
(this._integrations = {}),
(this._integrationsInitialized = !1),
(this._numProcessing = 0),
(this._outcomes = {}),
(this._hooks = {}),
(this._eventProcessors = []),
I.dsn)
)
this._dsn = M5.makeDsn(I.dsn)
else JB.DEBUG_BUILD && M5.logger.warn('No DSN provided, client will not send events.')
if (this._dsn) {
let G = ix2.getEnvelopeEndpointWithUrlEncodedAuth(this._dsn, I)
this._transport = I.transport({
tunnel: this._options.tunnel,
recordDroppedEvent: this.recordDroppedEvent.bind(this),
...I.transportOptions,
url: G,
})
}
}
captureException(I, G, Z) {
if (M5.checkOrSetAlreadyCaught(I)) {
JB.DEBUG_BUILD && M5.logger.log(mR1)
return
}
let d = G && G.event_id
return (
this._process(
this.eventFromException(I, G)
.then((W) => this._captureEvent(W, G, Z))
.then((W) => {
d = W
}),
),
d
)
}
captureMessage(I, G, Z, d) {
let W = Z && Z.event_id,
w = M5.isParameterizedString(I) ? I : String(I),
B = M5.isPrimitive(I) ? this.eventFromMessage(w, G, Z) : this.eventFromException(I, Z)
return (
this._process(
B.then((C) => this._captureEvent(C, Z, d)).then((C) => {
W = C
}),
),
W
)
}
captureEvent(I, G, Z) {
if (G && G.originalException && M5.checkOrSetAlreadyCaught(G.originalException)) {
JB.DEBUG_BUILD && M5.logger.log(mR1)
return
}
let d = G && G.event_id,
w = (I.sdkProcessingMetadata || {}).capturedSpanScope
return (
this._process(
this._captureEvent(I, G, w || Z).then((B) => {
d = B
}),
),
d
)
}
captureSession(I) {
if (typeof I.release !== 'string')
JB.DEBUG_BUILD &&
M5.logger.warn('Discarded session because of missing or non-string release')
else this.sendSession(I), TR1.updateSession(I, { init: !1 })
}
getDsn() {
return this._dsn
}
getOptions() {
return this._options
}
getSdkMetadata() {
return this._options._metadata
}
getTransport() {
return this._transport
}
flush(I) {
let G = this._transport
if (G) {
if (this.metricsAggregator) this.metricsAggregator.flush()
return this._isClientDoneProcessing(I).then((Z) => {
return G.flush(I).then((d) => Z && d)
})
} else return M5.resolvedSyncPromise(!0)
}
close(I) {
return this.flush(I).then((G) => {
if (((this.getOptions().enabled = !1), this.metricsAggregator))
this.metricsAggregator.close()
return G
})
}
getEventProcessors() {
return this._eventProcessors
}
addEventProcessor(I) {
this._eventProcessors.push(I)
}
setupIntegrations(I) {
if (
(I && !this._integrationsInitialized) ||
(this._isEnabled() && !this._integrationsInitialized)
)
this._setupIntegrations()
}
init() {
if (this._isEnabled()) this._setupIntegrations()
}
getIntegrationById(I) {
return this.getIntegrationByName(I)
}
getIntegrationByName(I) {
return this._integrations[I]
}
getIntegration(I) {
try {
return this._integrations[I.id] || null
} catch (G) {
return (
JB.DEBUG_BUILD &&
M5.logger.warn(`Cannot retrieve integration ${I.id} from the current Client`),
null
)
}
}
addIntegration(I) {
let G = this._integrations[I.name]
if ((Pm.setupIntegration(this, I, this._integrations), !G))
Pm.afterSetupIntegrations(this, [I])
}
sendEvent(I, G = {}) {
this.emit('beforeSendEvent', I, G)
let Z = uR1.createEventEnvelope(I, this._dsn, this._options._metadata, this._options.tunnel)
for (let W of G.attachments || [])
Z = M5.addItemToEnvelope(
Z,
M5.createAttachmentEnvelopeItem(
W,
this._options.transportOptions && this._options.transportOptions.textEncoder,
),
)
let d = this._sendEnvelope(Z)
if (d) d.then((W) => this.emit('afterSendEvent', I, W), null)
}
sendSession(I) {
let G = uR1.createSessionEnvelope(I, this._dsn, this._options._metadata, this._options.tunnel)
this._sendEnvelope(G)
}
recordDroppedEvent(I, G, Z) {
if (this._options.sendClientReports) {
let d = typeof Z === 'number' ? Z : 1,
W = `${I}:${G}`
JB.DEBUG_BUILD && M5.logger.log(`Recording outcome: "${W}"${d > 1 ? ` (${d} times)` : ''}`),
(this._outcomes[W] = (this._outcomes[W] || 0) + d)
}
}
captureAggregateMetrics(I) {
JB.DEBUG_BUILD && M5.logger.log(`Flushing aggregated metrics, number of metrics: ${I.length}`)
let G = rx2.createMetricEnvelope(I, this._dsn, this._options._metadata, this._options.tunnel)
this._sendEnvelope(G)
}
on(I, G) {
if (!this._hooks[I]) this._hooks[I] = []
this._hooks[I].push(G)
}
emit(I, ...G) {
if (this._hooks[I]) this._hooks[I].forEach((Z) => Z(...G))
}
_setupIntegrations() {
let { integrations: I } = this._options
;(this._integrations = Pm.setupIntegrations(this, I)),
Pm.afterSetupIntegrations(this, I),
(this._integrationsInitialized = !0)
}
_updateSessionFromEvent(I, G) {
let Z = !1,
d = !1,
W = G.exception && G.exception.values
if (W) {
d = !0
for (let C of W) {
let V = C.mechanism
if (V && V.handled === !1) {
Z = !0
break
}
}
}
let w = I.status === 'ok'
if ((w && I.errors === 0) || (w && Z))
TR1.updateSession(I, {
...(Z && { status: 'crashed' }),
errors: I.errors || Number(d || Z),
}),
this.captureSession(I)
}
_isClientDoneProcessing(I) {
return new M5.SyncPromise((G) => {
let Z = 0,
d = 1,
W = setInterval(() => {
if (this._numProcessing == 0) clearInterval(W), G(!0)
else if (((Z += d), I && Z >= I)) clearInterval(W), G(!1)
}, d)
})
}
_isEnabled() {
return this.getOptions().enabled !== !1 && this._transport !== void 0
}
_prepareEvent(I, G, Z, d = ax2.getIsolationScope()) {
let W = this.getOptions(),
w = Object.keys(this._integrations)
if (!G.integrations && w.length > 0) G.integrations = w
return (
this.emit('preprocessEvent', I, G),
ox2.prepareEvent(W, I, G, Z, this, d).then((B) => {
if (B === null) return B
let C = { ...d.getPropagationContext(), ...(Z ? Z.getPropagationContext() : void 0) }
if (!(B.contexts && B.contexts.trace) && C) {
let { traceId: A, spanId: X, parentSpanId: Y, dsc: H } = C
B.contexts = { trace: { trace_id: A, span_id: X, parent_span_id: Y }, ...B.contexts }
let J = H ? H : sx2.getDynamicSamplingContextFromClient(A, this, Z)
B.sdkProcessingMetadata = { dynamicSamplingContext: J, ...B.sdkProcessingMetadata }
}
return B
})
)
}
_captureEvent(I, G = {}, Z) {
return this._processEvent(I, G, Z).then(
(d) => {
return d.event_id
},
(d) => {
if (JB.DEBUG_BUILD) {
let W = d
if (W.logLevel === 'log') M5.logger.log(W.message)
else M5.logger.warn(W)
}
return
},
)
}
_processEvent(I, G, Z) {
let d = this.getOptions(),
{ sampleRate: W } = d,
w = jR1(I),
B = lR1(I),
C = I.type || 'error',
V = `before send for type \`${C}\``
if (B && typeof W === 'number' && Math.random() > W)
return (
this.recordDroppedEvent('sample_rate', 'error', I),
M5.rejectedSyncPromise(
new M5.SentryError(
`Discarding event because it's not included in the random sample (sampling rate = ${W})`,
'log',
),
)
)
let A = C === 'replay_event' ? 'replay' : C,
Y = (I.sdkProcessingMetadata || {}).capturedSpanIsolationScope
return this._prepareEvent(I, G, Z, Y)
.then((H) => {
if (H === null)
throw (
(this.recordDroppedEvent('event_processor', A, I),
new M5.SentryError('An event processor returned `null`, will not send event.', 'log'))
)
if (G.data && G.data.__sentry__ === !0) return H
let K = tx2(d, H, G)
return ex2(K, V)
})
.then((H) => {
if (H === null) {
if ((this.recordDroppedEvent('before_send', A, I), w)) {
let z = 1 + (I.spans || []).length
this.recordDroppedEvent('before_send', 'span', z)
}
throw new M5.SentryError(`${V} returned \`null\`, will not send event.`, 'log')
}
let J = Z && Z.getSession()
if (!w && J) this._updateSessionFromEvent(J, H)
if (w) {
let g =
(H.sdkProcessingMetadata && H.sdkProcessingMetadata.spanCountBeforeProcessing) || 0,
z = H.spans ? H.spans.length : 0,
f = g - z
if (f > 0) this.recordDroppedEvent('before_send', 'span', f)
}
let K = H.transaction_info
if (w && K && H.transaction !== I.transaction)
H.transaction_info = { ...K, source: 'custom' }
return this.sendEvent(H, G), H
})
.then(null, (H) => {
if (H instanceof M5.SentryError) throw H
throw (
(this.captureException(H, { data: { __sentry__: !0 }, originalException: H }),
new M5.SentryError(`Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event.
Reason: ${H}`))
)
})
}
_process(I) {
this._numProcessing++,
I.then(
(G) => {
return this._numProcessing--, G
},
(G) => {
return this._numProcessing--, G
},
)
}
_sendEnvelope(I) {
if ((this.emit('beforeEnvelope', I), this._isEnabled() && this._transport))
return this._transport.send(I).then(null, (G) => {
JB.DEBUG_BUILD && M5.logger.error('Error while sending event:', G)
})
else JB.DEBUG_BUILD && M5.logger.error('Transport disabled')
}
_clearOutcomes() {
let I = this._outcomes
return (
(this._outcomes = {}),
Object.keys(I).map((G) => {
let [Z, d] = G.split(':')
return { reason: Z, category: d, quantity: I[G] }
})
)
}
}
function ex2(I, G) {
let Z = `${G} must return \`null\` or a valid event.`
if (M5.isThenable(I))
return I.then(
(d) => {
if (!M5.isPlainObject(d) && d !== null) throw new M5.SentryError(Z)
return d
},
(d) => {
throw new M5.SentryError(`${G} rejected with ${d}`)
},
)
else if (!M5.isPlainObject(I) && I !== null) throw new M5.SentryError(Z)
return I
}
function tx2(I, G, Z) {
let { beforeSend: d, beforeSendTransaction: W } = I
if (lR1(G) && d) return d(G, Z)
if (jR1(G) && W) {
if (G.spans) {
let w = G.spans.length
G.sdkProcessingMetadata = { ...G.sdkProcessingMetadata, spanCountBeforeProcessing: w }
}
return W(G, Z)
}
return G
}
function lR1(I) {
return I.type === void 0
}
function jR1(I) {
return I.type === 'transaction'
}
function Ic2(I) {
let G = nx2.getClient()
if (!G || !G.addEventProcessor) return
G.addEventProcessor(I)
}
kR1.BaseClient = bR1
kR1.addEventProcessor = Ic2
})
var q01 = _((hR1) => {
Object.defineProperty(hR1, '__esModule', { value: !0 })
var Q01 = X0()
function dc2(I, G, Z, d, W) {
let w = { sent_at: new Date().toISOString() }
if (Z && Z.sdk) w.sdk = { name: Z.sdk.name, version: Z.sdk.version }
if (!!d && !!W) w.dsn = Q01.dsnToString(W)
if (G) w.trace = Q01.dropUndefinedKeys(G)
let B = Wc2(I)
return Q01.createEnvelope(w, [B])
}
function Wc2(I) {
return [{ type: 'check_in' }, I]
}
hR1.createCheckInEnvelope = dc2
})
var Qv = _((xR1) => {
Object.defineProperty(xR1, '__esModule', { value: !0 })
var Bc2 = 'c',
Cc2 = 'g',
Vc2 = 's',
Ac2 = 'd',
Xc2 = 5000,
Yc2 = 1e4,
_c2 = 1e4
xR1.COUNTER_METRIC_TYPE = Bc2
xR1.DEFAULT_BROWSER_FLUSH_INTERVAL = Xc2
xR1.DEFAULT_FLUSH_INTERVAL = Yc2
xR1.DISTRIBUTION_METRIC_TYPE = Ac2
xR1.GAUGE_METRIC_TYPE = Cc2
xR1.MAX_WEIGHT = _c2
xR1.SET_METRIC_TYPE = Vc2
})
var v01 = _((cR1) => {
Object.defineProperty(cR1, '__esModule', { value: !0 })
var Om = Qv(),
zc2 = zv()
class U01 {
constructor(I) {
this._value = I
}
get weight() {
return 1
}
add(I) {
this._value += I
}
toString() {
return `${this._value}`
}
}
class f01 {
constructor(I) {
;(this._last = I), (this._min = I), (this._max = I), (this._sum = I), (this._count = 1)
}
get weight() {
return 5
}
add(I) {
if (((this._last = I), I < this._min)) this._min = I
if (I > this._max) this._max = I
;(this._sum += I), this._count++
}
toString() {
return `${this._last}:${this._min}:${this._max}:${this._sum}:${this._count}`
}
}
class R01 {
constructor(I) {
this._value = [I]
}
get weight() {
return this._value.length
}
add(I) {
this._value.push(I)
}
toString() {
return this._value.join(':')
}
}
class E01 {
constructor(I) {
;(this.first = I), (this._value = new Set([I]))
}
get weight() {
return this._value.size
}
add(I) {
this._value.add(I)
}
toString() {
return Array.from(this._value)
.map((I) => (typeof I === 'string' ? zc2.simpleHash(I) : I))
.join(':')
}
}
var Qc2 = {
[Om.COUNTER_METRIC_TYPE]: U01,
[Om.GAUGE_METRIC_TYPE]: f01,
[Om.DISTRIBUTION_METRIC_TYPE]: R01,
[Om.SET_METRIC_TYPE]: E01,
}
cR1.CounterMetric = U01
cR1.DistributionMetric = R01
cR1.GaugeMetric = f01
cR1.METRIC_MAP = Qc2
cR1.SetMetric = E01
})
var aR1 = _((nR1) => {
Object.defineProperty(nR1, '__esModule', { value: !0 })
var pR1 = X0(),
qv = Qv(),
vc2 = v01(),
Mc2 = Kv(),
um = zv()
class iR1 {
constructor(I) {
if (
((this._client = I),
(this._buckets = new Map()),
(this._bucketsTotalWeight = 0),
(this._interval = setInterval(() => this._flush(), qv.DEFAULT_FLUSH_INTERVAL)),
this._interval.unref)
)
this._interval.unref()
;(this._flushShift = Math.floor((Math.random() * qv.DEFAULT_FLUSH_INTERVAL) / 1000)),
(this._forceFlush = !1)
}
add(I, G, Z, d = 'none', W = {}, w = pR1.timestampInSeconds()) {
let B = Math.floor(w),
C = um.sanitizeMetricKey(G),
V = um.sanitizeTags(W),
A = um.sanitizeUnit(d),
X = um.getBucketKey(I, C, A, V),
Y = this._buckets.get(X),
H = Y && I === qv.SET_METRIC_TYPE ? Y.metric.weight : 0
if (Y) {
if ((Y.metric.add(Z), Y.timestamp < B)) Y.timestamp = B
} else
(Y = {
metric: new vc2.METRIC_MAP[I](Z),
timestamp: B,
metricType: I,
name: C,
unit: A,
tags: V,
}),
this._buckets.set(X, Y)
let J = typeof Z === 'string' ? Y.metric.weight - H : Z
if (
(Mc2.updateMetricSummaryOnActiveSpan(I, C, J, A, W, X),
(this._bucketsTotalWeight += Y.metric.weight),
this._bucketsTotalWeight >= qv.MAX_WEIGHT)
)
this.flush()
}
flush() {
;(this._forceFlush = !0), this._flush()
}
close() {
;(this._forceFlush = !0), clearInterval(this._interval), this._flush()
}
_flush() {
if (this._forceFlush) {
;(this._forceFlush = !1),
(this._bucketsTotalWeight = 0),
this._captureMetrics(this._buckets),
this._buckets.clear()
return
}
let I =
Math.floor(pR1.timestampInSeconds()) -
qv.DEFAULT_FLUSH_INTERVAL / 1000 -
this._flushShift,
G = new Map()
for (let [Z, d] of this._buckets)
if (d.timestamp <= I) G.set(Z, d), (this._bucketsTotalWeight -= d.metric.weight)
for (let [Z] of G) this._buckets.delete(Z)
this._captureMetrics(G)
}
_captureMetrics(I) {
if (I.size > 0 && this._client.captureAggregateMetrics) {
let G = Array.from(I).map(([, Z]) => Z)
this._client.captureAggregateMetrics(G)
}
}
}
nR1.MetricsAggregator = iR1
})
var eR1 = _((oR1) => {
Object.defineProperty(oR1, '__esModule', { value: !0 })
var mV = X0(),
Lc2 = z01(),
$c2 = q01(),
Tm = Q6(),
yc2 = tZ(),
Pc2 = aR1(),
Oc2 = J01(),
uc2 = H01(),
Tc2 = iI(),
mc2 = mN()
jN()
var rR1 = TF()
class sR1 extends Lc2.BaseClient {
constructor(I) {
uc2.addTracingExtensions()
super(I)
if (I._experiments && I._experiments.metricsAggregator)
this.metricsAggregator = new Pc2.MetricsAggregator(this)
}
eventFromException(I, G) {
return mV.resolvedSyncPromise(
mV.eventFromUnknownInput(yc2.getClient(), this._options.stackParser, I, G),
)
}
eventFromMessage(I, G = 'info', Z) {
return mV.resolvedSyncPromise(
mV.eventFromMessage(this._options.stackParser, I, G, Z, this._options.attachStacktrace),
)
}
captureException(I, G, Z) {
if (this._options.autoSessionTracking && this._sessionFlusher && Z) {
let d = Z.getRequestSession()
if (d && d.status === 'ok') d.status = 'errored'
}
return super.captureException(I, G, Z)
}
captureEvent(I, G, Z) {
if (this._options.autoSessionTracking && this._sessionFlusher && Z) {
if (
(I.type || 'exception') === 'exception' &&
I.exception &&
I.exception.values &&
I.exception.values.length > 0
) {
let w = Z.getRequestSession()
if (w && w.status === 'ok') w.status = 'errored'
}
}
return super.captureEvent(I, G, Z)
}
close(I) {
if (this._sessionFlusher) this._sessionFlusher.close()
return super.close(I)
}
initSessionFlusher() {
let { release: I, environment: G } = this._options
if (!I)
Tm.DEBUG_BUILD &&
mV.logger.warn(
'Cannot initialise an instance of SessionFlusher if no release is provided!',
)
else this._sessionFlusher = new Oc2.SessionFlusher(this, { release: I, environment: G })
}
captureCheckIn(I, G, Z) {
let d = 'checkInId' in I && I.checkInId ? I.checkInId : mV.uuid4()
if (!this._isEnabled())
return Tm.DEBUG_BUILD && mV.logger.warn('SDK not enabled, will not capture checkin.'), d
let W = this.getOptions(),
{ release: w, environment: B, tunnel: C } = W,
V = {
check_in_id: d,
monitor_slug: I.monitorSlug,
status: I.status,
release: w,
environment: B,
}
if ('duration' in I) V.duration = I.duration
if (G)
V.monitor_config = {
schedule: G.schedule,
checkin_margin: G.checkinMargin,
max_runtime: G.maxRuntime,
timezone: G.timezone,
}
let [A, X] = this._getTraceInfoFromScope(Z)
if (X) V.contexts = { trace: X }
let Y = $c2.createCheckInEnvelope(V, A, this.getSdkMetadata(), C, this.getDsn())
return (
Tm.DEBUG_BUILD && mV.logger.info('Sending checkin:', I.monitorSlug, I.status),
this._sendEnvelope(Y),
d
)
}
_captureRequestSession() {
if (!this._sessionFlusher)
Tm.DEBUG_BUILD &&
mV.logger.warn(
'Discarded request mode session because autoSessionTracking option was disabled',
)
else this._sessionFlusher.incrementSessionStatusCount()
}
_prepareEvent(I, G, Z, d) {
if (this._options.platform) I.platform = I.platform || this._options.platform
if (this._options.runtime)
I.contexts = { ...I.contexts, runtime: (I.contexts || {}).runtime || this._options.runtime }
if (this._options.serverName) I.server_name = I.server_name || this._options.serverName
return super._prepareEvent(I, G, Z, d)
}
_getTraceInfoFromScope(I) {
if (!I) return [void 0, void 0]
let G = I.getSpan()
if (G)
return [
mc2.getRootSpan(G) ? rR1.getDynamicSamplingContextFromSpan(G) : void 0,
Tc2.spanToTraceContext(G),
]
let { traceId: Z, spanId: d, parentSpanId: W, dsc: w } = I.getPropagationContext(),
B = { trace_id: Z, span_id: d, parent_span_id: W }
if (w) return [w, B]
return [rR1.getDynamicSamplingContextFromClient(Z, this, I), B]
}
}
oR1.ServerRuntimeClient = sR1
})
var ZE1 = _((GE1) => {
Object.defineProperty(GE1, '__esModule', { value: !0 })
var tR1 = X0(),
lc2 = Q6(),
jc2 = tZ(),
kc2 = HB()
function hc2(I, G) {
if (G.debug === !0)
if (lc2.DEBUG_BUILD) tR1.logger.enable()
else
tR1.consoleSandbox(() => {
console.warn(
'[Sentry] Cannot initialize SDK with `debug` option using a non-debug bundle.',
)
})
jc2.getCurrentScope().update(G.initialScope)
let d = new I(G)
IE1(d), xc2(d)
}
function IE1(I) {
let Z = kc2.getCurrentHub().getStackTop()
;(Z.client = I), Z.scope.setClient(I)
}
function xc2(I) {
if (I.init) I.init()
else if (I.setupIntegrations) I.setupIntegrations()
}
GE1.initAndBind = hc2
GE1.setCurrentClient = IE1
})
var CE1 = _((BE1) => {
Object.defineProperty(BE1, '__esModule', { value: !0 })
var aI = X0(),
dE1 = Q6(),
wE1 = 30
function ic2(I, G, Z = aI.makePromiseBuffer(I.bufferSize || wE1)) {
let d = {},
W = (B) => Z.drain(B)
function w(B) {
let C = []
if (
(aI.forEachEnvelopeItem(B, (Y, H) => {
let J = aI.envelopeItemTypeToDataCategory(H)
if (aI.isRateLimited(d, J)) {
let K = WE1(Y, H)
I.recordDroppedEvent('ratelimit_backoff', J, K)
} else C.push(Y)
}),
C.length === 0)
)
return aI.resolvedSyncPromise()
let V = aI.createEnvelope(B[0], C),
A = (Y) => {
aI.forEachEnvelopeItem(V, (H, J) => {
let K = WE1(H, J)
I.recordDroppedEvent(Y, aI.envelopeItemTypeToDataCategory(J), K)
})
},
X = () =>
G({ body: aI.serializeEnvelope(V, I.textEncoder) }).then(
(Y) => {
if (Y.statusCode !== void 0 && (Y.statusCode < 200 || Y.statusCode >= 300))
dE1.DEBUG_BUILD &&
aI.logger.warn(`Sentry responded with status code ${Y.statusCode} to sent event.`)
return (d = aI.updateRateLimits(d, Y)), Y
},
(Y) => {
throw (A('network_error'), Y)
},
)
return Z.add(X).then(
(Y) => Y,
(Y) => {
if (Y instanceof aI.SentryError)
return (
dE1.DEBUG_BUILD && aI.logger.error('Skipped sending event because buffer is full.'),
A('queue_overflow'),
aI.resolvedSyncPromise()
)
else throw Y
},
)
}
return (w.__sentry__baseTransport__ = !0), { send: w, flush: W }
}
function WE1(I, G) {
if (G !== 'event' && G !== 'transaction') return
return Array.isArray(I) ? I[1] : void 0
}
BE1.DEFAULT_TRANSPORT_BUFFER_SIZE = wE1
BE1.createTransport = ic2
})
var XE1 = _((AE1) => {
Object.defineProperty(AE1, '__esModule', { value: !0 })
var S01 = X0(),
rc2 = Q6(),
VE1 = 100,
L01 = 5000,
sc2 = 3600000
function M01(I, G) {
rc2.DEBUG_BUILD && S01.logger.info(`[Offline]: ${I}`, G)
}
function oc2(I) {
return (G) => {
let Z = I(G),
d = G.createStore ? G.createStore(G) : void 0,
W = L01,
w
function B(X, Y, H) {
if (S01.envelopeContainsItemType(X, ['replay_event', 'replay_recording', 'client_report']))
return !1
if (G.shouldStore) return G.shouldStore(X, Y, H)
return !0
}
function C(X) {
if (!d) return
if (w) clearTimeout(w)
if (
((w = setTimeout(async () => {
w = void 0
let Y = await d.pop()
if (Y)
M01('Attempting to send previously queued event'),
A(Y).catch((H) => {
M01('Failed to retry sending', H)
})
}, X)),
typeof w !== 'number' && w.unref)
)
w.unref()
}
function V() {
if (w) return
C(W), (W = Math.min(W * 2, sc2))
}
async function A(X) {
try {
let Y = await Z.send(X),
H = VE1
if (Y) {
if (Y.headers && Y.headers['retry-after'])
H = S01.parseRetryAfterHeader(Y.headers['retry-after'])
else if ((Y.statusCode || 0) >= 400) return Y
}
return C(H), (W = L01), Y
} catch (Y) {
if (d && (await B(X, Y, W)))
return await d.insert(X), V(), M01('Error sending. Event queued', Y), {}
else throw Y
}
}
if (G.flushAtStartup) V()
return { send: A, flush: (X) => Z.flush(X) }
}
}
AE1.MIN_DELAY = VE1
AE1.START_DELAY = L01
AE1.makeOfflineTransport = oc2
})
var _E1 = _((YE1) => {
Object.defineProperty(YE1, '__esModule', { value: !0 })
var $01 = X0(),
Gp2 = $m()
function y01(I, G) {
let Z
return (
$01.forEachEnvelopeItem(I, (d, W) => {
if (G.includes(W)) Z = Array.isArray(d) ? d[1] : void 0
return !!Z
}),
Z
)
}
function Zp2(I, G) {
return (Z) => {
let d = I(Z)
return {
...d,
send: async (W) => {
let w = y01(W, ['event', 'transaction', 'profile', 'replay_event'])
if (w) w.release = G
return d.send(W)
},
}
}
}
function dp2(I, G) {
return $01.createEnvelope(G ? { ...I[0], dsn: G } : I[0], I[1])
}
function Wp2(I, G) {
return (Z) => {
let d = I(Z),
W = new Map()
function w(V, A) {
let X = A ? `${V}:${A}` : V,
Y = W.get(X)
if (!Y) {
let H = $01.dsnFromString(V)
if (!H) return
let J = Gp2.getEnvelopeEndpointWithUrlEncodedAuth(H, Z.tunnel)
;(Y = A ? Zp2(I, A)({ ...Z, url: J }) : I({ ...Z, url: J })), W.set(X, Y)
}
return [V, Y]
}
async function B(V) {
function A(H) {
let J = H && H.length ? H : ['event']
return y01(V, J)
}
let X = G({ envelope: V, getEvent: A })
.map((H) => {
if (typeof H === 'string') return w(H, void 0)
else return w(H.dsn, H.release)
})
.filter((H) => !!H)
if (X.length === 0) X.push(['', d])
return (await Promise.all(X.map(([H, J]) => J.send(dp2(V, H)))))[0]
}
async function C(V) {
let A = [await d.flush(V)]
for (let [, X] of W) A.push(await X.flush(V))
return A.every((X) => X)
}
return { send: B, flush: C }
}
}
YE1.eventFromEnvelope = y01
YE1.makeMultiplexedTransport = Wp2
})
var FE1 = _((HE1) => {
Object.defineProperty(HE1, '__esModule', { value: !0 })
var DE1 = X0()
function Cp2(I, G) {
let Z = { sent_at: new Date().toISOString() }
if (G) Z.dsn = DE1.dsnToString(G)
let d = I.map(Vp2)
return DE1.createEnvelope(Z, d)
}
function Vp2(I) {
return [{ type: 'span' }, I]
}
HE1.createSpanEnvelope = Cp2
})
var gE1 = _((KE1) => {
Object.defineProperty(KE1, '__esModule', { value: !0 })
function Xp2(I, G) {
let Z = G && Dp2(G) ? G.getClient() : G,
d = Z && Z.getDsn(),
W = Z && Z.getOptions().tunnel
return _p2(I, d) || Yp2(I, W)
}
function Yp2(I, G) {
if (!G) return !1
return JE1(I) === JE1(G)
}
function _p2(I, G) {
return G ? I.includes(G.host) : !1
}
function JE1(I) {
return I[I.length - 1] === '/' ? I.slice(0, -1) : I
}
function Dp2(I) {
return I.getClient !== void 0
}
KE1.isSentryRequestUrl = Xp2
})
var zE1 = _((NE1) => {
Object.defineProperty(NE1, '__esModule', { value: !0 })
function Fp2(I, ...G) {
let Z = new String(String.raw(I, ...G))
return (
(Z.__sentry_template_string__ = I.join('\x00').replace(/%/g, '%%').replace(/\0/g, '%s')),
(Z.__sentry_template_values__ = G),
Z
)
}
NE1.parameterize = Fp2
})
var UE1 = _((qE1) => {
Object.defineProperty(qE1, '__esModule', { value: !0 })
var QE1 = Hm()
function Kp2(I, G, Z = [G], d = 'npm') {
let W = I._metadata || {}
if (!W.sdk)
W.sdk = {
name: `sentry.javascript.${G}`,
packages: Z.map((w) => ({ name: `${d}:@sentry/${w}`, version: QE1.SDK_VERSION })),
version: QE1.SDK_VERSION,
}
I._metadata = W
}
qE1.applySdkMetadata = Kp2
})
var ME1 = _((vE1) => {
Object.defineProperty(vE1, '__esModule', { value: !0 })
var P01 = X0(),
RE1 = new Map(),
fE1 = new Set()
function Np2(I) {
if (!P01.GLOBAL_OBJ._sentryModuleMetadata) return
for (let G of Object.keys(P01.GLOBAL_OBJ._sentryModuleMetadata)) {
let Z = P01.GLOBAL_OBJ._sentryModuleMetadata[G]
if (fE1.has(G)) continue
fE1.add(G)
let d = I(G)
for (let W of d.reverse())
if (W.filename) {
RE1.set(W.filename, Z)
break
}
}
}
function EE1(I, G) {
return Np2(I), RE1.get(G)
}
function zp2(I, G) {
try {
G.exception.values.forEach((Z) => {
if (!Z.stacktrace) return
for (let d of Z.stacktrace.frames || []) {
if (!d.filename) continue
let W = EE1(I, d.filename)
if (W) d.module_metadata = W
}
})
} catch (Z) {}
}
function Qp2(I) {
try {
I.exception.values.forEach((G) => {
if (!G.stacktrace) return
for (let Z of G.stacktrace.frames || []) delete Z.module_metadata
})
} catch (G) {}
}
vE1.addMetadataToStackFrames = zp2
vE1.getMetadataForUrl = EE1
vE1.stripMetadataFromStackFrames = Qp2
})
var OE1 = _((PE1) => {
Object.defineProperty(PE1, '__esModule', { value: !0 })
var Rp2 = X0(),
LE1 = TV(),
SE1 = ME1(),
$E1 = 'ModuleMetadata',
Ep2 = () => {
return {
name: $E1,
setupOnce() {},
setup(I) {
if (typeof I.on !== 'function') return
I.on('beforeEnvelope', (G) => {
Rp2.forEachEnvelopeItem(G, (Z, d) => {
if (d === 'event') {
let W = Array.isArray(Z) ? Z[1] : void 0
if (W) SE1.stripMetadataFromStackFrames(W), (Z[1] = W)
}
})
})
},
processEvent(I, G, Z) {
let d = Z.getOptions().stackParser
return SE1.addMetadataToStackFrames(d, I), I
},
}
},
yE1 = LE1.defineIntegration(Ep2),
vp2 = LE1.convertIntegrationFnToClass($E1, yE1)
PE1.ModuleMetadata = vp2
PE1.moduleMetadataIntegration = yE1
})
var jE1 = _((lE1) => {
Object.defineProperty(lE1, '__esModule', { value: !0 })
var uE1 = X0(),
TE1 = TV(),
Lp2 = iI(),
O01 = {
include: {
cookies: !0,
data: !0,
headers: !0,
ip: !1,
query_string: !0,
url: !0,
user: { id: !0, username: !0, email: !0 },
},
transactionNamingScheme: 'methodPath',
},
mE1 = 'RequestData',
$p2 = (I = {}) => {
let G = uE1.addRequestDataToEvent,
Z = {
...O01,
...I,
include: {
method: !0,
...O01.include,
...I.include,
user:
I.include && typeof I.include.user === 'boolean'
? I.include.user
: { ...O01.include.user, ...(I.include || {}).user },
},
}
return {
name: mE1,
setupOnce() {},
processEvent(d, W, w) {
let { transactionNamingScheme: B } = Z,
{ sdkProcessingMetadata: C = {} } = d,
V = C.request
if (!V) return d
let A =
C.requestDataOptionsFromExpressHandler ||
C.requestDataOptionsFromGCPWrapper ||
Pp2(Z),
X = G(d, V, A)
if (d.type === 'transaction' || B === 'handler') return X
let H = V._sentryTransaction
if (H) {
let J = Lp2.spanToJSON(H).description || '',
K = Op2(w) === 'sentry.javascript.nextjs' ? J.startsWith('/api') : B !== 'path',
[g] = uE1.extractPathForTransaction(V, { path: !0, method: K, customRoute: J })
X.transaction = g
}
return X
},
}
},
bE1 = TE1.defineIntegration($p2),
yp2 = TE1.convertIntegrationFnToClass(mE1, bE1)
function Pp2(I) {
let {
transactionNamingScheme: G,
include: { ip: Z, user: d, ...W },
} = I,
w = []
for (let [C, V] of Object.entries(W)) if (V) w.push(C)
let B
if (d === void 0) B = !0
else if (typeof d === 'boolean') B = d
else {
let C = []
for (let [V, A] of Object.entries(d)) if (A) C.push(V)
B = C
}
return { include: { ip: Z, user: B, request: w.length !== 0 ? w : void 0, transaction: G } }
}
function Op2(I) {
try {
return I.getOptions()._metadata.sdk.name
} catch (G) {
return
}
}
lE1.RequestData = yp2
lE1.requestDataIntegration = bE1
})
var u01 = _((cE1) => {
Object.defineProperty(cE1, '__esModule', { value: !0 })
var A8 = X0(),
jF = Q6(),
kE1 = TV(),
mp2 = [
/^Script error\.?$/,
/^Javascript error: Script error\.? on line 0$/,
/^ResizeObserver loop completed with undelivered notifications.$/,
/^Cannot redefine property: googletag$/,
],
bp2 = [
/^.*\/healthcheck$/,
/^.*\/healthy$/,
/^.*\/live$/,
/^.*\/ready$/,
/^.*\/heartbeat$/,
/^.*\/health$/,
/^.*\/healthz$/,
],
hE1 = 'InboundFilters',
lp2 = (I = {}) => {
return {
name: hE1,
setupOnce() {},
processEvent(G, Z, d) {
let W = d.getOptions(),
w = kp2(I, W)
return hp2(G, w) ? null : G
},
}
},
xE1 = kE1.defineIntegration(lp2),
jp2 = kE1.convertIntegrationFnToClass(hE1, xE1)
function kp2(I = {}, G = {}) {
return {
allowUrls: [...(I.allowUrls || []), ...(G.allowUrls || [])],
denyUrls: [...(I.denyUrls || []), ...(G.denyUrls || [])],
ignoreErrors: [
...(I.ignoreErrors || []),
...(G.ignoreErrors || []),
...(I.disableErrorDefaults ? [] : mp2),
],
ignoreTransactions: [
...(I.ignoreTransactions || []),
...(G.ignoreTransactions || []),
...(I.disableTransactionDefaults ? [] : bp2),
],
ignoreInternal: I.ignoreInternal !== void 0 ? I.ignoreInternal : !0,
}
}
function hp2(I, G) {
if (G.ignoreInternal && ap2(I))
return (
jF.DEBUG_BUILD &&
A8.logger.warn(`Event dropped due to being internal Sentry Error.
Event: ${A8.getEventDescription(I)}`),
!0
)
if (xp2(I, G.ignoreErrors))
return (
jF.DEBUG_BUILD &&
A8.logger.warn(`Event dropped due to being matched by \`ignoreErrors\` option.
Event: ${A8.getEventDescription(I)}`),
!0
)
if (cp2(I, G.ignoreTransactions))
return (
jF.DEBUG_BUILD &&
A8.logger.warn(`Event dropped due to being matched by \`ignoreTransactions\` option.
Event: ${A8.getEventDescription(I)}`),
!0
)
if (pp2(I, G.denyUrls))
return (
jF.DEBUG_BUILD &&
A8.logger.warn(`Event dropped due to being matched by \`denyUrls\` option.
Event: ${A8.getEventDescription(I)}.
Url: ${mm(I)}`),
!0
)
if (!ip2(I, G.allowUrls))
return (
jF.DEBUG_BUILD &&
A8.logger.warn(`Event dropped due to not being matched by \`allowUrls\` option.
Event: ${A8.getEventDescription(I)}.
Url: ${mm(I)}`),
!0
)
return !1
}
function xp2(I, G) {
if (I.type || !G || !G.length) return !1
return np2(I).some((Z) => A8.stringMatchesSomePattern(Z, G))
}
function cp2(I, G) {
if (I.type !== 'transaction' || !G || !G.length) return !1
let Z = I.transaction
return Z ? A8.stringMatchesSomePattern(Z, G) : !1
}
function pp2(I, G) {
if (!G || !G.length) return !1
let Z = mm(I)
return !Z ? !1 : A8.stringMatchesSomePattern(Z, G)
}
function ip2(I, G) {
if (!G || !G.length) return !0
let Z = mm(I)
return !Z ? !0 : A8.stringMatchesSomePattern(Z, G)
}
function np2(I) {
let G = []
if (I.message) G.push(I.message)
let Z
try {
Z = I.exception.values[I.exception.values.length - 1]
} catch (d) {}
if (Z) {
if (Z.value) {
if ((G.push(Z.value), Z.type)) G.push(`${Z.type}: ${Z.value}`)
}
}
if (jF.DEBUG_BUILD && G.length === 0)
A8.logger.error(`Could not extract message for event ${A8.getEventDescription(I)}`)
return G
}
function ap2(I) {
try {
return I.exception.values[0].type === 'SentryError'
} catch (G) {}
return !1
}
function rp2(I = []) {
for (let G = I.length - 1; G >= 0; G--) {
let Z = I[G]
if (Z && Z.filename !== '<anonymous>' && Z.filename !== '[native code]')
return Z.filename || null
}
return null
}
function mm(I) {
try {
let G
try {
G = I.exception.values[0].stacktrace.frames
} catch (Z) {}
return G ? rp2(G) : null
} catch (G) {
return (
jF.DEBUG_BUILD &&
A8.logger.error(`Cannot extract url for event ${A8.getEventDescription(I)}`),
null
)
}
}
cE1.InboundFilters = jp2
cE1.inboundFiltersIntegration = xE1
})
var T01 = _((sE1) => {
Object.defineProperty(sE1, '__esModule', { value: !0 })
var ep2 = X0(),
tp2 = tZ(),
nE1 = TV(),
pE1,
aE1 = 'FunctionToString',
iE1 = new WeakMap(),
Ii2 = () => {
return {
name: aE1,
setupOnce() {
pE1 = Function.prototype.toString
try {
Function.prototype.toString = function (...I) {
let G = ep2.getOriginalFunction(this),
Z = iE1.has(tp2.getClient()) && G !== void 0 ? G : this
return pE1.apply(Z, I)
}
} catch (I) {}
},
setup(I) {
iE1.set(I, !0)
},
}
},
rE1 = nE1.defineIntegration(Ii2),
Gi2 = nE1.convertIntegrationFnToClass(aE1, rE1)
sE1.FunctionToString = Gi2
sE1.functionToStringIntegration = rE1
})
var m01 = _((Gv1) => {
Object.defineProperty(Gv1, '__esModule', { value: !0 })
var oE1 = X0(),
eE1 = TV(),
Wi2 = 'cause',
wi2 = 5,
tE1 = 'LinkedErrors',
Bi2 = (I = {}) => {
let G = I.limit || wi2,
Z = I.key || Wi2
return {
name: tE1,
setupOnce() {},
preprocessEvent(d, W, w) {
let B = w.getOptions()
oE1.applyAggregateErrorsToEvent(
oE1.exceptionFromError,
B.stackParser,
B.maxValueLength,
Z,
G,
d,
W,
)
},
}
},
Iv1 = eE1.defineIntegration(Bi2),
Ci2 = eE1.convertIntegrationFnToClass(tE1, Iv1)
Gv1.LinkedErrors = Ci2
Gv1.linkedErrorsIntegration = Iv1
})
var dv1 = _((Zv1) => {
Object.defineProperty(Zv1, '__esModule', { value: !0 })
var Xi2 = T01(),
Yi2 = u01(),
_i2 = m01()
Zv1.FunctionToString = Xi2.FunctionToString
Zv1.InboundFilters = Yi2.InboundFilters
Zv1.LinkedErrors = _i2.LinkedErrors
})
var Cv1 = _((Bv1) => {
Object.defineProperty(Bv1, '__esModule', { value: !0 })
var Ji2 = X0(),
Wv1 = Qv(),
Ki2 = v01(),
gi2 = Kv(),
bm = zv()
class wv1 {
constructor(I) {
;(this._client = I),
(this._buckets = new Map()),
(this._interval = setInterval(() => this.flush(), Wv1.DEFAULT_BROWSER_FLUSH_INTERVAL))
}
add(I, G, Z, d = 'none', W = {}, w = Ji2.timestampInSeconds()) {
let B = Math.floor(w),
C = bm.sanitizeMetricKey(G),
V = bm.sanitizeTags(W),
A = bm.sanitizeUnit(d),
X = bm.getBucketKey(I, C, A, V),
Y = this._buckets.get(X),
H = Y && I === Wv1.SET_METRIC_TYPE ? Y.metric.weight : 0
if (Y) {
if ((Y.metric.add(Z), Y.timestamp < B)) Y.timestamp = B
} else
(Y = {
metric: new Ki2.METRIC_MAP[I](Z),
timestamp: B,
metricType: I,
name: C,
unit: A,
tags: V,
}),
this._buckets.set(X, Y)
let J = typeof Z === 'string' ? Y.metric.weight - H : Z
gi2.updateMetricSummaryOnActiveSpan(I, C, J, A, W, X)
}
flush() {
if (this._buckets.size === 0) return
if (this._client.captureAggregateMetrics) {
let I = Array.from(this._buckets).map(([, G]) => G)
this._client.captureAggregateMetrics(I)
}
this._buckets.clear()
}
close() {
clearInterval(this._interval), this.flush()
}
}
Bv1.BrowserMetricsAggregator = wv1
})
var _v1 = _((Yv1) => {
Object.defineProperty(Yv1, '__esModule', { value: !0 })
var Vv1 = TV(),
zi2 = Cv1(),
Av1 = 'MetricsAggregator',
Qi2 = () => {
return {
name: Av1,
setupOnce() {},
setup(I) {
I.metricsAggregator = new zi2.BrowserMetricsAggregator(I)
},
}
},
Xv1 = Vv1.defineIntegration(Qi2),
qi2 = Vv1.convertIntegrationFnToClass(Av1, Xv1)
Yv1.MetricsAggregator = qi2
Yv1.metricsAggregatorIntegration = Xv1
})
var qv1 = _((Qv1) => {
Object.defineProperty(Qv1, '__esModule', { value: !0 })
var Dv1 = X0(),
Hv1 = Q6(),
Fv1 = tZ(),
Ri2 = iI(),
lm = Qv(),
Jv1 = _v1()
function jm(I, G, Z, d = {}) {
let W = Fv1.getClient(),
w = Fv1.getCurrentScope()
if (W) {
if (!W.metricsAggregator) {
Hv1.DEBUG_BUILD &&
Dv1.logger.warn(
'No metrics aggregator enabled. Please add the MetricsAggregator integration to use metrics APIs',
)
return
}
let { unit: B, tags: C, timestamp: V } = d,
{ release: A, environment: X } = W.getOptions(),
Y = w.getTransaction(),
H = {}
if (A) H.release = A
if (X) H.environment = X
if (Y) H.transaction = Ri2.spanToJSON(Y).description || ''
Hv1.DEBUG_BUILD && Dv1.logger.log(`Adding value of ${Z} to ${I} metric ${G}`),
W.metricsAggregator.add(I, G, Z, B, { ...H, ...C }, V)
}
}
function Kv1(I, G = 1, Z) {
jm(lm.COUNTER_METRIC_TYPE, I, G, Z)
}
function gv1(I, G, Z) {
jm(lm.DISTRIBUTION_METRIC_TYPE, I, G, Z)
}
function Nv1(I, G, Z) {
jm(lm.SET_METRIC_TYPE, I, G, Z)
}
function zv1(I, G, Z) {
jm(lm.GAUGE_METRIC_TYPE, I, G, Z)
}
var Ei2 = {
increment: Kv1,
distribution: gv1,
set: Nv1,
gauge: zv1,
MetricsAggregator: Jv1.MetricsAggregator,
metricsAggregatorIntegration: Jv1.metricsAggregatorIntegration,
}
Qv1.distribution = gv1
Qv1.gauge = zv1
Qv1.increment = Kv1
Qv1.metrics = Ei2
Qv1.set = Nv1
})
var Y4 = _((j01) => {
Object.defineProperty(j01, '__esModule', { value: !0 })
var Uv1 = H01(),
fv1 = _01(),
yi2 = fm(),
Pi2 = vm(),
Rv1 = Km(),
km = jN(),
kF = Um(),
Ev1 = TF(),
Oi2 = UR1(),
ui2 = D01(),
Uv = gv(),
vv1 = F01(),
O9 = tZ(),
KB = HB(),
b01 = TN(),
Ti2 = J01(),
l01 = Ym(),
Mv1 = Av(),
Sv1 = $m(),
Lv1 = z01(),
mi2 = eR1(),
$v1 = ZE1(),
bi2 = CE1(),
li2 = XE1(),
ji2 = _E1(),
ki2 = Hm(),
hm = TV(),
yv1 = Xm(),
hi2 = Am(),
xi2 = q01(),
ci2 = FE1(),
pi2 = Nm(),
ii2 = gE1(),
ni2 = V01(),
ai2 = zE1(),
xm = iI(),
ri2 = mN(),
si2 = UE1(),
oi2 = uN(),
Pv1 = OE1(),
Ov1 = jE1(),
uv1 = u01(),
Tv1 = T01(),
mv1 = m01(),
ei2 = dv1(),
ti2 = qv1(),
In2 = ei2
j01.addTracingExtensions = Uv1.addTracingExtensions
j01.startIdleTransaction = Uv1.startIdleTransaction
j01.IdleTransaction = fv1.IdleTransaction
j01.TRACING_DEFAULTS = fv1.TRACING_DEFAULTS
j01.Span = yi2.Span
j01.Transaction = Pi2.Transaction
j01.extractTraceparentData = Rv1.extractTraceparentData
j01.getActiveTransaction = Rv1.getActiveTransaction
Object.defineProperty(j01, 'SpanStatus', { enumerable: !0, get: () => km.SpanStatus })
j01.getSpanStatusFromHttpCode = km.getSpanStatusFromHttpCode
j01.setHttpStatus = km.setHttpStatus
j01.spanStatusfromHttpCode = km.spanStatusfromHttpCode
j01.continueTrace = kF.continueTrace
j01.getActiveSpan = kF.getActiveSpan
j01.startActiveSpan = kF.startActiveSpan
j01.startInactiveSpan = kF.startInactiveSpan
j01.startSpan = kF.startSpan
j01.startSpanManual = kF.startSpanManual
j01.trace = kF.trace
j01.getDynamicSamplingContextFromClient = Ev1.getDynamicSamplingContextFromClient
j01.getDynamicSamplingContextFromSpan = Ev1.getDynamicSamplingContextFromSpan
j01.setMeasurement = Oi2.setMeasurement
j01.isValidSampleRate = ui2.isValidSampleRate
j01.SEMANTIC_ATTRIBUTE_PROFILE_ID = Uv.SEMANTIC_ATTRIBUTE_PROFILE_ID
j01.SEMANTIC_ATTRIBUTE_SENTRY_OP = Uv.SEMANTIC_ATTRIBUTE_SENTRY_OP
j01.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN = Uv.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN
j01.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE = Uv.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE
j01.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE = Uv.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE
j01.createEventEnvelope = vv1.createEventEnvelope
j01.createSessionEnvelope = vv1.createSessionEnvelope
j01.addBreadcrumb = O9.addBreadcrumb
j01.captureCheckIn = O9.captureCheckIn
j01.captureEvent = O9.captureEvent
j01.captureException = O9.captureException
j01.captureMessage = O9.captureMessage
j01.captureSession = O9.captureSession
j01.close = O9.close
j01.configureScope = O9.configureScope
j01.endSession = O9.endSession
j01.flush = O9.flush
j01.getClient = O9.getClient
j01.getCurrentScope = O9.getCurrentScope
j01.isInitialized = O9.isInitialized
j01.lastEventId = O9.lastEventId
j01.setContext = O9.setContext
j01.setExtra = O9.setExtra
j01.setExtras = O9.setExtras
j01.setTag = O9.setTag
j01.setTags = O9.setTags
j01.setUser = O9.setUser
j01.startSession = O9.startSession
j01.startTransaction = O9.startTransaction
j01.withActiveSpan = O9.withActiveSpan
j01.withIsolationScope = O9.withIsolationScope
j01.withMonitor = O9.withMonitor
j01.withScope = O9.withScope
j01.Hub = KB.Hub
j01.ensureHubOnCarrier = KB.ensureHubOnCarrier
j01.getCurrentHub = KB.getCurrentHub
j01.getHubFromCarrier = KB.getHubFromCarrier
j01.getIsolationScope = KB.getIsolationScope
j01.getMainCarrier = KB.getMainCarrier
j01.makeMain = KB.makeMain
j01.runWithAsyncContext = KB.runWithAsyncContext
j01.setAsyncContextStrategy = KB.setAsyncContextStrategy
j01.setHubOnCarrier = KB.setHubOnCarrier
j01.closeSession = b01.closeSession
j01.makeSession = b01.makeSession
j01.updateSession = b01.updateSession
j01.SessionFlusher = Ti2.SessionFlusher
j01.Scope = l01.Scope
j01.getGlobalScope = l01.getGlobalScope
j01.setGlobalScope = l01.setGlobalScope
j01.addGlobalEventProcessor = Mv1.addGlobalEventProcessor
j01.notifyEventProcessors = Mv1.notifyEventProcessors
j01.getEnvelopeEndpointWithUrlEncodedAuth = Sv1.getEnvelopeEndpointWithUrlEncodedAuth
j01.getReportDialogEndpoint = Sv1.getReportDialogEndpoint
j01.BaseClient = Lv1.BaseClient
j01.addEventProcessor = Lv1.addEventProcessor
j01.ServerRuntimeClient = mi2.ServerRuntimeClient
j01.initAndBind = $v1.initAndBind
j01.setCurrentClient = $v1.setCurrentClient
j01.createTransport = bi2.createTransport
j01.makeOfflineTransport = li2.makeOfflineTransport
j01.makeMultiplexedTransport = ji2.makeMultiplexedTransport
j01.SDK_VERSION = ki2.SDK_VERSION
j01.addIntegration = hm.addIntegration
j01.convertIntegrationFnToClass = hm.convertIntegrationFnToClass
j01.defineIntegration = hm.defineIntegration
j01.getIntegrationsToSetup = hm.getIntegrationsToSetup
j01.applyScopeDataToEvent = yv1.applyScopeDataToEvent
j01.mergeScopeData = yv1.mergeScopeData
j01.prepareEvent = hi2.prepareEvent
j01.createCheckInEnvelope = xi2.createCheckInEnvelope
j01.createSpanEnvelope = ci2.createSpanEnvelope
j01.hasTracingEnabled = pi2.hasTracingEnabled
j01.isSentryRequestUrl = ii2.isSentryRequestUrl
j01.handleCallbackErrors = ni2.handleCallbackErrors
j01.parameterize = ai2.parameterize
j01.spanIsSampled = xm.spanIsSampled
j01.spanToJSON = xm.spanToJSON
j01.spanToTraceContext = xm.spanToTraceContext
j01.spanToTraceHeader = xm.spanToTraceHeader
j01.getRootSpan = ri2.getRootSpan
j01.applySdkMetadata = si2.applySdkMetadata
j01.DEFAULT_ENVIRONMENT = oi2.DEFAULT_ENVIRONMENT
j01.ModuleMetadata = Pv1.ModuleMetadata
j01.moduleMetadataIntegration = Pv1.moduleMetadataIntegration
j01.RequestData = Ov1.RequestData
j01.requestDataIntegration = Ov1.requestDataIntegration
j01.InboundFilters = uv1.InboundFilters
j01.inboundFiltersIntegration = uv1.inboundFiltersIntegration
j01.FunctionToString = Tv1.FunctionToString
j01.functionToStringIntegration = Tv1.functionToStringIntegration
j01.LinkedErrors = mv1.LinkedErrors
j01.linkedErrorsIntegration = mv1.linkedErrorsIntegration
j01.metrics = ti2.metrics
j01.Integrations = In2
})
var rI = _((bv1) => {
Object.defineProperty(bv1, '__esModule', { value: !0 })
var Xr2 = typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__
bv1.DEBUG_BUILD = Xr2
})
var YY = _((jv1) => {
var { _optionalChain: lv1 } = X0()
Object.defineProperty(jv1, '__esModule', { value: !0 })
function _r2(I) {
let G = lv1([
I,
'call',
(d) => d(),
'access',
(d) => d.getClient,
'call',
(d) => d(),
'optionalAccess',
(d) => d.getOptions,
'call',
(d) => d(),
])
return (lv1([G, 'optionalAccess', (d) => d.instrumenter]) || 'sentry') !== 'sentry'
}
jv1.shouldDisableAutoInstrumentation = _r2
})
var pv1 = _((cv1) => {
var { _optionalChain: gB } = X0()
Object.defineProperty(cv1, '__esModule', { value: !0 })
var k01 = Y4(),
sI = X0(),
cm = rI(),
Hr2 = YY()
class pm {
static __initStatic() {
this.id = 'Express'
}
constructor(I = {}) {
;(this.name = pm.id),
(this._router = I.router || I.app),
(this._methods = (Array.isArray(I.methods) ? I.methods : []).concat('use'))
}
setupOnce(I, G) {
if (!this._router) {
cm.DEBUG_BUILD && sI.logger.error('ExpressIntegration is missing an Express instance')
return
}
if (Hr2.shouldDisableAutoInstrumentation(G)) {
cm.DEBUG_BUILD &&
sI.logger.log('Express Integration is skipped because of instrumenter configuration.')
return
}
Kr2(this._router, this._methods), gr2(this._router)
}
}
pm.__initStatic()
function kv1(I, G) {
let Z = I.length
switch (Z) {
case 2:
return function (d, W) {
let w = W.__sentry_transaction
if (w) {
let B = w.startChild({
description: I.name,
op: `middleware.express.${G}`,
origin: 'auto.middleware.express',
})
W.once('finish', () => {
B.end()
})
}
return I.call(this, d, W)
}
case 3:
return function (d, W, w) {
let B = W.__sentry_transaction,
C = gB([
B,
'optionalAccess',
(V) => V.startChild,
'call',
(V) =>
V({
description: I.name,
op: `middleware.express.${G}`,
origin: 'auto.middleware.express',
}),
])
I.call(this, d, W, function (...V) {
gB([C, 'optionalAccess', (A) => A.end, 'call', (A) => A()]), w.call(this, ...V)
})
}
case 4:
return function (d, W, w, B) {
let C = w.__sentry_transaction,
V = gB([
C,
'optionalAccess',
(A) => A.startChild,
'call',
(A) =>
A({
description: I.name,
op: `middleware.express.${G}`,
origin: 'auto.middleware.express',
}),
])
I.call(this, d, W, w, function (...A) {
gB([V, 'optionalAccess', (X) => X.end, 'call', (X) => X()]), B.call(this, ...A)
})
}
default:
throw new Error(`Express middleware takes 2-4 arguments. Got: ${Z}`)
}
}
function Fr2(I, G) {
return I.map((Z) => {
if (typeof Z === 'function') return kv1(Z, G)
if (Array.isArray(Z))
return Z.map((d) => {
if (typeof d === 'function') return kv1(d, G)
return d
})
return Z
})
}
function Jr2(I, G) {
let Z = I[G]
return (
(I[G] = function (...d) {
return Z.call(this, ...Fr2(d, G))
}),
I
)
}
function Kr2(I, G = []) {
G.forEach((Z) => Jr2(I, Z))
}
function gr2(I) {
let G = 'settings' in I
if (G && I._router === void 0 && I.lazyrouter) I.lazyrouter()
let Z = G ? I._router : I
if (!Z) {
cm.DEBUG_BUILD &&
sI.logger.debug(
'Cannot instrument router for URL Parameterization (did not find a valid router).',
),
cm.DEBUG_BUILD &&
sI.logger.debug('Routing instrumentation is currently only supported in Express 4.')
return
}
let d = Object.getPrototypeOf(Z),
W = d.process_params
d.process_params = function w(B, C, V, A, X) {
if (!V._reconstructedRoute) V._reconstructedRoute = ''
let { layerRoutePath: Y, isRegex: H, isArray: J, numExtraSegments: K } = Nr2(B)
if (Y || H || J) V._hasParameters = !0
let g
if (Y) g = Y
else g = xv1(V.originalUrl, V._reconstructedRoute, B.path) || ''
let z = g
.split('/')
.filter(($) => $.length > 0 && (H || J || !$.includes('*')))
.join('/')
if (z && z.length > 0) V._reconstructedRoute += `/${z}${H ? '/' : ''}`
let f = sI.getNumberOfUrlSegments(sI.stripUrlQueryAndFragment(V.originalUrl || '')) + K,
S = sI.getNumberOfUrlSegments(V._reconstructedRoute)
if (f === S) {
if (!V._hasParameters) {
if (V._reconstructedRoute !== V.originalUrl)
V._reconstructedRoute = V.originalUrl
? sI.stripUrlQueryAndFragment(V.originalUrl)
: V.originalUrl
}
let $ = A.__sentry_transaction,
L = ($ && k01.spanToJSON($).data) || {}
if ($ && L[k01.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] !== 'custom') {
let T = V._reconstructedRoute || '/',
[m, O] = sI.extractPathForTransaction(V, { path: !0, method: !0, customRoute: T })
$.updateName(m), $.setAttribute(k01.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, O)
}
}
return W.call(this, B, C, V, A, X)
}
}
var hv1 = (I, G, Z) => {
if (
!I ||
!G ||
!Z ||
Object.keys(Z).length === 0 ||
!gB([Z, 'access', (A) => A[0], 'optionalAccess', (A) => A.offset])
)
return
let d = Z.sort((A, X) => A.offset - X.offset),
w = new RegExp(G, `${G.flags}d`).exec(I)
if (!w || !w.indices) return
let [, ...B] = w.indices
if (B.length !== d.length) return
let C = I,
V = 0
return (
B.forEach((A, X) => {
if (A) {
let [Y, H] = A,
J = C.substring(0, Y - V),
K = `:${d[X].name}`,
g = C.substring(H - V)
;(C = J + K + g), (V = V + (H - Y - K.length))
}
}),
C
)
}
function Nr2(I) {
let G = gB([I, 'access', (B) => B.route, 'optionalAccess', (B) => B.path]),
Z = sI.isRegExp(G),
d = Array.isArray(G)
if (!G) {
let [B] = sI.GLOBAL_OBJ.process.versions.node.split('.').map(Number)
if (B >= 16) G = hv1(I.path, I.regexp, I.keys)
}
if (!G) return { isRegex: Z, isArray: d, numExtraSegments: 0 }
let W = d ? Math.max(zr2(G) - sI.getNumberOfUrlSegments(I.path || ''), 0) : 0
return { layerRoutePath: Qr2(d, G), isRegex: Z, isArray: d, numExtraSegments: W }
}
function zr2(I) {
return I.reduce((G, Z) => {
return G + sI.getNumberOfUrlSegments(Z.toString())
}, 0)
}
function Qr2(I, G) {
if (I) return G.map((Z) => Z.toString()).join(',')
return G && G.toString()
}
function xv1(I, G, Z) {
let d = sI.stripUrlQueryAndFragment(I || ''),
W = gB([
d,
'optionalAccess',
(V) => V.split,
'call',
(V) => V('/'),
'access',
(V) => V.filter,
'call',
(V) => V((A) => !!A),
]),
w = 0,
B =
gB([
G,
'optionalAccess',
(V) => V.split,
'call',
(V) => V('/'),
'access',
(V) => V.filter,
'call',
(V) => V((A) => !!A),
'access',
(V) => V.length,
]) || 0
return gB([
Z,
'optionalAccess',
(V) => V.split,
'call',
(V) => V('/'),
'access',
(V) => V.filter,
'call',
(V) =>
V((A) => {
if (gB([W, 'optionalAccess', (X) => X[B + w]]) === A) return (w += 1), !0
return !1
}),
'access',
(V) => V.join,
'call',
(V) => V('/'),
])
}
cv1.Express = pm
cv1.extractOriginalRoute = hv1
cv1.preventDuplicateSegments = xv1
})
var nv1 = _((iv1) => {
var { _optionalChain: nN } = X0()
Object.defineProperty(iv1, '__esModule', { value: !0 })
var aN = X0(),
h01 = rI(),
Rr2 = YY()
class im {
static __initStatic() {
this.id = 'Postgres'
}
constructor(I = {}) {
;(this.name = im.id), (this._usePgNative = !!I.usePgNative), (this._module = I.module)
}
loadDependency() {
return (this._module = this._module || aN.loadModule('pg'))
}
setupOnce(I, G) {
if (Rr2.shouldDisableAutoInstrumentation(G)) {
h01.DEBUG_BUILD &&
aN.logger.log('Postgres Integration is skipped because of instrumenter configuration.')
return
}
let Z = this.loadDependency()
if (!Z) {
h01.DEBUG_BUILD &&
aN.logger.error('Postgres Integration was unable to require `pg` package.')
return
}
let d = this._usePgNative
? nN([Z, 'access', (W) => W.native, 'optionalAccess', (W) => W.Client])
: Z.Client
if (!d) {
h01.DEBUG_BUILD &&
aN.logger.error("Postgres Integration was unable to access 'pg-native' bindings.")
return
}
aN.fill(d.prototype, 'query', function (W) {
return function (w, B, C) {
let A = G().getScope().getSpan(),
X = { 'db.system': 'postgresql' }
try {
if (this.database) X['db.name'] = this.database
if (this.host) X['server.address'] = this.host
if (this.port) X['server.port'] = this.port
if (this.user) X['db.user'] = this.user
} catch (J) {}
let Y = nN([
A,
'optionalAccess',
(J) => J.startChild,
'call',
(J) =>
J({
description: typeof w === 'string' ? w : w.text,
op: 'db',
origin: 'auto.db.postgres',
data: X,
}),
])
if (typeof C === 'function')
return W.call(this, w, B, function (J, K) {
nN([Y, 'optionalAccess', (g) => g.end, 'call', (g) => g()]), C(J, K)
})
if (typeof B === 'function')
return W.call(this, w, function (J, K) {
nN([Y, 'optionalAccess', (g) => g.end, 'call', (g) => g()]), B(J, K)
})
let H = typeof B !== 'undefined' ? W.call(this, w, B) : W.call(this, w)
if (aN.isThenable(H))
return H.then((J) => {
return nN([Y, 'optionalAccess', (K) => K.end, 'call', (K) => K()]), J
})
return nN([Y, 'optionalAccess', (J) => J.end, 'call', (J) => J()]), H
}
})
}
}
im.__initStatic()
iv1.Postgres = im
})
var rv1 = _((av1) => {
var { _optionalChain: vr2 } = X0()
Object.defineProperty(av1, '__esModule', { value: !0 })
var fv = X0(),
x01 = rI(),
Mr2 = YY()
class nm {
static __initStatic() {
this.id = 'Mysql'
}
constructor() {
this.name = nm.id
}
loadDependency() {
return (this._module = this._module || fv.loadModule('mysql/lib/Connection.js'))
}
setupOnce(I, G) {
if (Mr2.shouldDisableAutoInstrumentation(G)) {
x01.DEBUG_BUILD &&
fv.logger.log('Mysql Integration is skipped because of instrumenter configuration.')
return
}
let Z = this.loadDependency()
if (!Z) {
x01.DEBUG_BUILD &&
fv.logger.error('Mysql Integration was unable to require `mysql` package.')
return
}
let d = void 0
try {
Z.prototype.connect = new Proxy(Z.prototype.connect, {
apply(B, C, V) {
if (!d) d = C.config
return B.apply(C, V)
},
})
} catch (B) {
x01.DEBUG_BUILD &&
fv.logger.error('Mysql Integration was unable to instrument `mysql` config.')
}
function W() {
if (!d) return {}
return { 'server.address': d.host, 'server.port': d.port, 'db.user': d.user }
}
function w(B) {
if (!B) return
let C = W()
Object.keys(C).forEach((V) => {
B.setAttribute(V, C[V])
}),
B.end()
}
fv.fill(Z, 'createQuery', function (B) {
return function (C, V, A) {
let Y = G().getScope().getSpan(),
H = vr2([
Y,
'optionalAccess',
(K) => K.startChild,
'call',
(K) =>
K({
description: typeof C === 'string' ? C : C.sql,
op: 'db',
origin: 'auto.db.mysql',
data: { 'db.system': 'mysql' },
}),
])
if (typeof A === 'function')
return B.call(this, C, V, function (K, g, z) {
w(H), A(K, g, z)
})
if (typeof V === 'function')
return B.call(this, C, function (K, g, z) {
w(H), V(K, g, z)
})
let J = B.call(this, C, V)
return (
J.on('end', () => {
w(H)
}),
J
)
}
})
}
}
nm.__initStatic()
av1.Mysql = nm
})
var ev1 = _((ov1) => {
var { _optionalChain: _Y } = X0()
Object.defineProperty(ov1, '__esModule', { value: !0 })
var Rv = X0(),
sv1 = rI(),
Lr2 = YY(),
$r2 = [
'aggregate',
'bulkWrite',
'countDocuments',
'createIndex',
'createIndexes',
'deleteMany',
'deleteOne',
'distinct',
'drop',
'dropIndex',
'dropIndexes',
'estimatedDocumentCount',
'find',
'findOne',
'findOneAndDelete',
'findOneAndReplace',
'findOneAndUpdate',
'indexes',
'indexExists',
'indexInformation',
'initializeOrderedBulkOp',
'insertMany',
'insertOne',
'isCapped',
'mapReduce',
'options',
'parallelCollectionScan',
'rename',
'replaceOne',
'stats',
'updateMany',
'updateOne',
],
yr2 = {
bulkWrite: ['operations'],
countDocuments: ['query'],
createIndex: ['fieldOrSpec'],
createIndexes: ['indexSpecs'],
deleteMany: ['filter'],
deleteOne: ['filter'],
distinct: ['key', 'query'],
dropIndex: ['indexName'],
find: ['query'],
findOne: ['query'],
findOneAndDelete: ['filter'],
findOneAndReplace: ['filter', 'replacement'],
findOneAndUpdate: ['filter', 'update'],
indexExists: ['indexes'],
insertMany: ['docs'],
insertOne: ['doc'],
mapReduce: ['map', 'reduce'],
rename: ['newName'],
replaceOne: ['filter', 'doc'],
updateMany: ['filter', 'update'],
updateOne: ['filter', 'update'],
}
function Pr2(I) {
return I && typeof I === 'object' && I.once && typeof I.once === 'function'
}
class am {
static __initStatic() {
this.id = 'Mongo'
}
constructor(I = {}) {
;(this.name = am.id),
(this._operations = Array.isArray(I.operations) ? I.operations : $r2),
(this._describeOperations = 'describeOperations' in I ? I.describeOperations : !0),
(this._useMongoose = !!I.useMongoose)
}
loadDependency() {
let I = this._useMongoose ? 'mongoose' : 'mongodb'
return (this._module = this._module || Rv.loadModule(I))
}
setupOnce(I, G) {
if (Lr2.shouldDisableAutoInstrumentation(G)) {
sv1.DEBUG_BUILD &&
Rv.logger.log('Mongo Integration is skipped because of instrumenter configuration.')
return
}
let Z = this.loadDependency()
if (!Z) {
let d = this._useMongoose ? 'mongoose' : 'mongodb'
sv1.DEBUG_BUILD &&
Rv.logger.error(`Mongo Integration was unable to require \`${d}\` package.`)
return
}
this._instrumentOperations(Z.Collection, this._operations, G)
}
_instrumentOperations(I, G, Z) {
G.forEach((d) => this._patchOperation(I, d, Z))
}
_patchOperation(I, G, Z) {
if (!(G in I.prototype)) return
let d = this._getSpanContextFromOperationArguments.bind(this)
Rv.fill(I.prototype, G, function (W) {
return function (...w) {
let B = w[w.length - 1],
C = Z(),
V = C.getScope(),
A = C.getClient(),
X = V.getSpan(),
Y = _Y([
A,
'optionalAccess',
(J) => J.getOptions,
'call',
(J) => J(),
'access',
(J) => J.sendDefaultPii,
])
if (typeof B !== 'function' || (G === 'mapReduce' && w.length === 2)) {
let J = _Y([
X,
'optionalAccess',
(g) => g.startChild,
'call',
(g) => g(d(this, G, w, Y)),
]),
K = W.call(this, ...w)
if (Rv.isThenable(K))
return K.then((g) => {
return _Y([J, 'optionalAccess', (z) => z.end, 'call', (z) => z()]), g
})
else if (Pr2(K)) {
let g = K
try {
g.once('close', () => {
_Y([J, 'optionalAccess', (z) => z.end, 'call', (z) => z()])
})
} catch (z) {
_Y([J, 'optionalAccess', (f) => f.end, 'call', (f) => f()])
}
return g
} else return _Y([J, 'optionalAccess', (g) => g.end, 'call', (g) => g()]), K
}
let H = _Y([
X,
'optionalAccess',
(J) => J.startChild,
'call',
(J) => J(d(this, G, w.slice(0, -1))),
])
return W.call(this, ...w.slice(0, -1), function (J, K) {
_Y([H, 'optionalAccess', (g) => g.end, 'call', (g) => g()]), B(J, K)
})
}
})
}
_getSpanContextFromOperationArguments(I, G, Z, d = !1) {
let W = {
'db.system': 'mongodb',
'db.name': I.dbName,
'db.operation': G,
'db.mongodb.collection': I.collectionName,
},
w = { op: 'db', origin: 'auto.db.mongo', description: G, data: W },
B = yr2[G],
C = Array.isArray(this._describeOperations)
? this._describeOperations.includes(G)
: this._describeOperations
if (!B || !C || !d) return w
try {
if (G === 'mapReduce') {
let [V, A] = Z
;(W[B[0]] = typeof V === 'string' ? V : V.name || '<anonymous>'),
(W[B[1]] = typeof A === 'string' ? A : A.name || '<anonymous>')
} else for (let V = 0; V < B.length; V++) W[`db.mongodb.${B[V]}`] = JSON.stringify(Z[V])
} catch (V) {}
return w
}
}
am.__initStatic()
ov1.Mongo = am
})
var GM1 = _((IM1) => {
Object.defineProperty(IM1, '__esModule', { value: !0 })
var c01 = Y4(),
tv1 = X0(),
ur2 = rI(),
Tr2 = YY()
function mr2(I) {
return !!I && !!I.$use
}
class rm {
static __initStatic() {
this.id = 'Prisma'
}
constructor(I = {}) {
if (((this.name = rm.id), mr2(I.client) && !I.client._sentryInstrumented)) {
tv1.addNonEnumerableProperty(I.client, '_sentryInstrumented', !0)
let G = {}
try {
let Z = I.client._engineConfig
if (Z) {
let { activeProvider: d, clientVersion: W } = Z
if (d) G['db.system'] = d
if (W) G['db.prisma.version'] = W
}
} catch (Z) {}
I.client.$use((Z, d) => {
if (Tr2.shouldDisableAutoInstrumentation(c01.getCurrentHub)) return d(Z)
let { action: W, model: w } = Z
return c01.startSpan(
{
name: w ? `${w} ${W}` : W,
onlyIfParent: !0,
op: 'db.prisma',
attributes: { [c01.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.db.prisma' },
data: { ...G, 'db.operation': W },
},
() => d(Z),
)
})
} else
ur2.DEBUG_BUILD &&
tv1.logger.warn(
'Unsupported Prisma client provided to PrismaIntegration. Provided client:',
I.client,
)
}
setupOnce() {}
}
rm.__initStatic()
IM1.Prisma = rm
})
var WM1 = _((dM1) => {
var { _optionalChain: rN } = X0()
Object.defineProperty(dM1, '__esModule', { value: !0 })
var Ev = X0(),
ZM1 = rI(),
lr2 = YY()
class sm {
static __initStatic() {
this.id = 'GraphQL'
}
constructor() {
this.name = sm.id
}
loadDependency() {
return (this._module = this._module || Ev.loadModule('graphql/execution/execute.js'))
}
setupOnce(I, G) {
if (lr2.shouldDisableAutoInstrumentation(G)) {
ZM1.DEBUG_BUILD &&
Ev.logger.log('GraphQL Integration is skipped because of instrumenter configuration.')
return
}
let Z = this.loadDependency()
if (!Z) {
ZM1.DEBUG_BUILD &&
Ev.logger.error('GraphQL Integration was unable to require graphql/execution package.')
return
}
Ev.fill(Z, 'execute', function (d) {
return function (...W) {
let w = G().getScope(),
B = w.getSpan(),
C = rN([
B,
'optionalAccess',
(A) => A.startChild,
'call',
(A) =>
A({
description: 'execute',
op: 'graphql.execute',
origin: 'auto.graphql.graphql',
}),
])
rN([w, 'optionalAccess', (A) => A.setSpan, 'call', (A) => A(C)])
let V = d.call(this, ...W)
if (Ev.isThenable(V))
return V.then((A) => {
return (
rN([C, 'optionalAccess', (X) => X.end, 'call', (X) => X()]),
rN([w, 'optionalAccess', (X) => X.setSpan, 'call', (X) => X(B)]),
A
)
})
return (
rN([C, 'optionalAccess', (A) => A.end, 'call', (A) => A()]),
rN([w, 'optionalAccess', (A) => A.setSpan, 'call', (A) => A(B)]),
V
)
}
})
}
}
sm.__initStatic()
dM1.GraphQL = sm
})
var CM1 = _((BM1) => {
var { _optionalChain: p01 } = X0()
Object.defineProperty(BM1, '__esModule', { value: !0 })
var R7 = X0(),
om = rI(),
kr2 = YY()
class em {
static __initStatic() {
this.id = 'Apollo'
}
constructor(I = { useNestjs: !1 }) {
;(this.name = em.id), (this._useNest = !!I.useNestjs)
}
loadDependency() {
if (this._useNest) this._module = this._module || R7.loadModule('@nestjs/graphql')
else this._module = this._module || R7.loadModule('apollo-server-core')
return this._module
}
setupOnce(I, G) {
if (kr2.shouldDisableAutoInstrumentation(G)) {
om.DEBUG_BUILD &&
R7.logger.log('Apollo Integration is skipped because of instrumenter configuration.')
return
}
if (this._useNest) {
let Z = this.loadDependency()
if (!Z) {
om.DEBUG_BUILD &&
R7.logger.error(
'Apollo-NestJS Integration was unable to require @nestjs/graphql package.',
)
return
}
R7.fill(Z.GraphQLFactory.prototype, 'mergeWithSchema', function (d) {
return function (...W) {
return (
R7.fill(this.resolversExplorerService, 'explore', function (w) {
return function () {
let B = R7.arrayify(w.call(this))
return wM1(B, G)
}
}),
d.call(this, ...W)
)
}
})
} else {
let Z = this.loadDependency()
if (!Z) {
om.DEBUG_BUILD &&
R7.logger.error('Apollo Integration was unable to require apollo-server-core package.')
return
}
R7.fill(Z.ApolloServerBase.prototype, 'constructSchema', function (d) {
return function () {
if (!this.config.resolvers) {
if (om.DEBUG_BUILD) {
if (this.config.schema)
R7.logger.warn(
'Apollo integration is not able to trace `ApolloServer` instances constructed via `schema` property.If you are using NestJS with Apollo, please use `Sentry.Integrations.Apollo({ useNestjs: true })` instead.',
),
R7.logger.warn()
else if (this.config.modules)
R7.logger.warn(
'Apollo integration is not able to trace `ApolloServer` instances constructed via `modules` property.',
)
R7.logger.error(
'Skipping tracing as no resolvers found on the `ApolloServer` instance.',
)
}
return d.call(this)
}
let W = R7.arrayify(this.config.resolvers)
return (this.config.resolvers = wM1(W, G)), d.call(this)
}
})
}
}
}
em.__initStatic()
function wM1(I, G) {
return I.map((Z) => {
return (
Object.keys(Z).forEach((d) => {
Object.keys(Z[d]).forEach((W) => {
if (typeof Z[d][W] !== 'function') return
hr2(Z, d, W, G)
})
}),
Z
)
})
}
function hr2(I, G, Z, d) {
R7.fill(I[G], Z, function (W) {
return function (...w) {
let C = d().getScope().getSpan(),
V = p01([
C,
'optionalAccess',
(X) => X.startChild,
'call',
(X) =>
X({ description: `${G}.${Z}`, op: 'graphql.resolve', origin: 'auto.graphql.apollo' }),
]),
A = W.call(this, ...w)
if (R7.isThenable(A))
return A.then((X) => {
return p01([V, 'optionalAccess', (Y) => Y.end, 'call', (Y) => Y()]), X
})
return p01([V, 'optionalAccess', (X) => X.end, 'call', (X) => X()]), A
}
})
}
BM1.Apollo = em
})
var AM1 = _((VM1, DY) => {
Object.defineProperty(VM1, '__esModule', { value: !0 })
var hF = X0(),
cr2 = [
() => {
return new (hF.dynamicRequire(DY, './apollo').Apollo)()
},
() => {
return new (hF.dynamicRequire(DY, './apollo').Apollo)({ useNestjs: !0 })
},
() => {
return new (hF.dynamicRequire(DY, './graphql').GraphQL)()
},
() => {
return new (hF.dynamicRequire(DY, './mongo').Mongo)()
},
() => {
return new (hF.dynamicRequire(DY, './mongo').Mongo)({ mongoose: !0 })
},
() => {
return new (hF.dynamicRequire(DY, './mysql').Mysql)()
},
() => {
return new (hF.dynamicRequire(DY, './postgres').Postgres)()
},
]
VM1.lazyLoadedNodePerformanceMonitoringIntegrations = cr2
})
var pG = _((XM1) => {
Object.defineProperty(XM1, '__esModule', { value: !0 })
var ir2 = X0(),
nr2 = ir2.GLOBAL_OBJ
XM1.WINDOW = nr2
})
var n01 = _((HM1) => {
Object.defineProperty(HM1, '__esModule', { value: !0 })
var YM1 = Y4(),
_M1 = X0(),
DM1 = rI(),
i01 = pG()
function rr2() {
if (i01.WINDOW.document)
i01.WINDOW.document.addEventListener('visibilitychange', () => {
let I = YM1.getActiveTransaction()
if (i01.WINDOW.document.hidden && I) {
let { op: Z, status: d } = YM1.spanToJSON(I)
if (
(DM1.DEBUG_BUILD &&
_M1.logger.log(
`[Tracing] Transaction: cancelled -> since tab moved to the background, op: ${Z}`,
),
!d)
)
I.setStatus('cancelled')
I.setTag('visibilitychange', 'document.hidden'), I.end()
}
})
else
DM1.DEBUG_BUILD &&
_M1.logger.warn(
'[Tracing] Could not set up background tab detection due to lack of global document',
)
}
HM1.registerBackgroundTabDetection = rr2
})
var sN = _((FM1) => {
Object.defineProperty(FM1, '__esModule', { value: !0 })
var or2 = (I, G, Z) => {
let d, W
return (w) => {
if (G.value >= 0) {
if (w || Z) {
if (((W = G.value - (d || 0)), W || d === void 0)) (d = G.value), (G.delta = W), I(G)
}
}
}
}
FM1.bindReporter = or2
})
var KM1 = _((JM1) => {
Object.defineProperty(JM1, '__esModule', { value: !0 })
var tr2 = () => {
return `v3-${Date.now()}-${Math.floor(Math.random() * 8999999999999) + 1000000000000}`
}
JM1.generateUniqueID = tr2
})
var Mv = _((gM1) => {
Object.defineProperty(gM1, '__esModule', { value: !0 })
var vv = pG(),
Gs2 = () => {
let I = vv.WINDOW.performance.timing,
G = vv.WINDOW.performance.navigation.type,
Z = {
entryType: 'navigation',
startTime: 0,
type: G == 2 ? 'back_forward' : G === 1 ? 'reload' : 'navigate',
}
for (let d in I)
if (d !== 'navigationStart' && d !== 'toJSON') Z[d] = Math.max(I[d] - I.navigationStart, 0)
return Z
},
Zs2 = () => {
if (vv.WINDOW.__WEB_VITALS_POLYFILL__)
return (
vv.WINDOW.performance &&
((performance.getEntriesByType && performance.getEntriesByType('navigation')[0]) || Gs2())
)
else
return (
vv.WINDOW.performance &&
performance.getEntriesByType &&
performance.getEntriesByType('navigation')[0]
)
}
gM1.getNavigationEntry = Zs2
})
var tm = _((NM1) => {
Object.defineProperty(NM1, '__esModule', { value: !0 })
var Ws2 = Mv(),
ws2 = () => {
let I = Ws2.getNavigationEntry()
return (I && I.activationStart) || 0
}
NM1.getActivationStart = ws2
})
var oN = _((QM1) => {
Object.defineProperty(QM1, '__esModule', { value: !0 })
var zM1 = pG(),
Cs2 = KM1(),
Vs2 = tm(),
As2 = Mv(),
Xs2 = (I, G) => {
let Z = As2.getNavigationEntry(),
d = 'navigate'
if (Z)
if (
(zM1.WINDOW.document && zM1.WINDOW.document.prerendering) ||
Vs2.getActivationStart() > 0
)
d = 'prerender'
else d = Z.type.replace(/_/g, '-')
return {
name: I,
value: typeof G === 'undefined' ? -1 : G,
rating: 'good',
delta: 0,
entries: [],
id: Cs2.generateUniqueID(),
navigationType: d,
}
}
QM1.initMetric = Xs2
})
var xF = _((qM1) => {
Object.defineProperty(qM1, '__esModule', { value: !0 })
var _s2 = (I, G, Z) => {
try {
if (PerformanceObserver.supportedEntryTypes.includes(I)) {
let d = new PerformanceObserver((W) => {
G(W.getEntries())
})
return d.observe(Object.assign({ type: I, buffered: !0 }, Z || {})), d
}
} catch (d) {}
return
}
qM1.observe = _s2
})
var eN = _((fM1) => {
Object.defineProperty(fM1, '__esModule', { value: !0 })
var UM1 = pG(),
Hs2 = (I, G) => {
let Z = (d) => {
if (d.type === 'pagehide' || UM1.WINDOW.document.visibilityState === 'hidden') {
if ((I(d), G))
removeEventListener('visibilitychange', Z, !0), removeEventListener('pagehide', Z, !0)
}
}
if (UM1.WINDOW.document)
addEventListener('visibilitychange', Z, !0), addEventListener('pagehide', Z, !0)
}
fM1.onHidden = Hs2
})
var EM1 = _((RM1) => {
Object.defineProperty(RM1, '__esModule', { value: !0 })
var Js2 = sN(),
Ks2 = oN(),
gs2 = xF(),
Ns2 = eN(),
zs2 = (I, G = {}) => {
let Z = Ks2.initMetric('CLS', 0),
d,
W = 0,
w = [],
B = (V) => {
V.forEach((A) => {
if (!A.hadRecentInput) {
let X = w[0],
Y = w[w.length - 1]
if (
W &&
w.length !== 0 &&
A.startTime - Y.startTime < 1000 &&
A.startTime - X.startTime < 5000
)
(W += A.value), w.push(A)
else (W = A.value), (w = [A])
if (W > Z.value) {
if (((Z.value = W), (Z.entries = w), d)) d()
}
}
})
},
C = gs2.observe('layout-shift', B)
if (C) {
d = Js2.bindReporter(I, Z, G.reportAllChanges)
let V = () => {
B(C.takeRecords()), d(!0)
}
return Ns2.onHidden(V), V
}
return
}
RM1.onCLS = zs2
})
var Zb = _((vM1) => {
Object.defineProperty(vM1, '__esModule', { value: !0 })
var Ib = pG(),
qs2 = eN(),
Gb = -1,
Us2 = () => {
if (Ib.WINDOW.document && Ib.WINDOW.document.visibilityState)
Gb =
Ib.WINDOW.document.visibilityState === 'hidden' && !Ib.WINDOW.document.prerendering
? 0
: 1 / 0
},
fs2 = () => {
qs2.onHidden(({ timeStamp: I }) => {
Gb = I
}, !0)
},
Rs2 = () => {
if (Gb < 0) Us2(), fs2()
return {
get firstHiddenTime() {
return Gb
},
}
}
vM1.getVisibilityWatcher = Rs2
})
var SM1 = _((MM1) => {
Object.defineProperty(MM1, '__esModule', { value: !0 })
var vs2 = sN(),
Ms2 = Zb(),
Ss2 = oN(),
Ls2 = xF(),
$s2 = eN(),
ys2 = (I) => {
let G = Ms2.getVisibilityWatcher(),
Z = Ss2.initMetric('FID'),
d,
W = (C) => {
if (C.startTime < G.firstHiddenTime)
(Z.value = C.processingStart - C.startTime), Z.entries.push(C), d(!0)
},
w = (C) => {
C.forEach(W)
},
B = Ls2.observe('first-input', w)
if (((d = vs2.bindReporter(I, Z)), B))
$s2.onHidden(() => {
w(B.takeRecords()), B.disconnect()
}, !0)
}
MM1.onFID = ys2
})
var yM1 = _(($M1) => {
Object.defineProperty($M1, '__esModule', { value: !0 })
var Os2 = xF(),
LM1 = 0,
a01 = 1 / 0,
db = 0,
us2 = (I) => {
I.forEach((G) => {
if (G.interactionId)
(a01 = Math.min(a01, G.interactionId)),
(db = Math.max(db, G.interactionId)),
(LM1 = db ? (db - a01) / 7 + 1 : 0)
})
},
r01,
Ts2 = () => {
return r01 ? LM1 : performance.interactionCount || 0
},
ms2 = () => {
if ('interactionCount' in performance || r01) return
r01 = Os2.observe('event', us2, { type: 'event', buffered: !0, durationThreshold: 0 })
}
$M1.getInteractionCount = Ts2
$M1.initInteractionCountPolyfill = ms2
})
var bM1 = _((mM1) => {
Object.defineProperty(mM1, '__esModule', { value: !0 })
var js2 = sN(),
ks2 = oN(),
hs2 = xF(),
xs2 = eN(),
uM1 = yM1(),
TM1 = () => {
return uM1.getInteractionCount()
},
PM1 = 10,
bV = [],
s01 = {},
OM1 = (I) => {
let G = bV[bV.length - 1],
Z = s01[I.interactionId]
if (Z || bV.length < PM1 || I.duration > G.latency) {
if (Z) Z.entries.push(I), (Z.latency = Math.max(Z.latency, I.duration))
else {
let d = { id: I.interactionId, latency: I.duration, entries: [I] }
;(s01[d.id] = d), bV.push(d)
}
bV.sort((d, W) => W.latency - d.latency),
bV.splice(PM1).forEach((d) => {
delete s01[d.id]
})
}
},
cs2 = () => {
let I = Math.min(bV.length - 1, Math.floor(TM1() / 50))
return bV[I]
},
ps2 = (I, G) => {
;(G = G || {}), uM1.initInteractionCountPolyfill()
let Z = ks2.initMetric('INP'),
d,
W = (B) => {
B.forEach((V) => {
if (V.interactionId) OM1(V)
if (V.entryType === 'first-input') {
if (
!bV.some((X) => {
return X.entries.some((Y) => {
return V.duration === Y.duration && V.startTime === Y.startTime
})
})
)
OM1(V)
}
})
let C = cs2()
if (C && C.latency !== Z.value) (Z.value = C.latency), (Z.entries = C.entries), d()
},
w = hs2.observe('event', W, { durationThreshold: G.durationThreshold || 40 })
if (((d = js2.bindReporter(I, Z, G.reportAllChanges)), w))
w.observe({ type: 'first-input', buffered: !0 }),
xs2.onHidden(() => {
if ((W(w.takeRecords()), Z.value < 0 && TM1() > 0)) (Z.value = 0), (Z.entries = [])
d(!0)
})
}
mM1.onINP = ps2
})
var kM1 = _((jM1) => {
Object.defineProperty(jM1, '__esModule', { value: !0 })
var ns2 = pG(),
as2 = sN(),
rs2 = tm(),
ss2 = Zb(),
os2 = oN(),
es2 = xF(),
ts2 = eN(),
lM1 = {},
Io2 = (I) => {
let G = ss2.getVisibilityWatcher(),
Z = os2.initMetric('LCP'),
d,
W = (B) => {
let C = B[B.length - 1]
if (C) {
let V = Math.max(C.startTime - rs2.getActivationStart(), 0)
if (V < G.firstHiddenTime) (Z.value = V), (Z.entries = [C]), d()
}
},
w = es2.observe('largest-contentful-paint', W)
if (w) {
d = as2.bindReporter(I, Z)
let B = () => {
if (!lM1[Z.id]) W(w.takeRecords()), w.disconnect(), (lM1[Z.id] = !0), d(!0)
}
return (
['keydown', 'click'].forEach((C) => {
if (ns2.WINDOW.document) addEventListener(C, B, { once: !0, capture: !0 })
}),
ts2.onHidden(B, !0),
B
)
}
return
}
jM1.onLCP = Io2
})
var xM1 = _((hM1) => {
Object.defineProperty(hM1, '__esModule', { value: !0 })
var o01 = pG(),
Zo2 = sN(),
do2 = tm(),
Wo2 = Mv(),
wo2 = oN(),
e01 = (I) => {
if (!o01.WINDOW.document) return
if (o01.WINDOW.document.prerendering) addEventListener('prerenderingchange', () => e01(I), !0)
else if (o01.WINDOW.document.readyState !== 'complete')
addEventListener('load', () => e01(I), !0)
else setTimeout(I, 0)
},
Bo2 = (I, G) => {
G = G || {}
let Z = wo2.initMetric('TTFB'),
d = Zo2.bindReporter(I, Z, G.reportAllChanges)
e01(() => {
let W = Wo2.getNavigationEntry()
if (W) {
if (
((Z.value = Math.max(W.responseStart - do2.getActivationStart(), 0)),
Z.value < 0 || Z.value > performance.now())
)
return
;(Z.entries = [W]), d(!0)
}
})
}
hM1.onTTFB = Bo2
})
var Iz = _((eM1) => {
Object.defineProperty(eM1, '__esModule', { value: !0 })
var cM1 = X0(),
Vo2 = rI(),
Ao2 = EM1(),
Xo2 = SM1(),
Yo2 = bM1(),
_o2 = kM1(),
Do2 = xF(),
Ho2 = xM1(),
Sv = {},
Wb = {},
pM1,
iM1,
nM1,
aM1,
rM1
function Fo2(I, G = !1) {
return Lv('cls', I, Qo2, pM1, G)
}
function Jo2(I, G = !1) {
return Lv('lcp', I, Uo2, nM1, G)
}
function Ko2(I) {
return Lv('ttfb', I, fo2, aM1)
}
function go2(I) {
return Lv('fid', I, qo2, iM1)
}
function No2(I) {
return Lv('inp', I, Ro2, rM1)
}
function zo2(I, G) {
if ((sM1(I, G), !Wb[I])) Eo2(I), (Wb[I] = !0)
return oM1(I, G)
}
function tN(I, G) {
let Z = Sv[I]
if (!Z || !Z.length) return
for (let d of Z)
try {
d(G)
} catch (W) {
Vo2.DEBUG_BUILD &&
cM1.logger.error(
`Error while triggering instrumentation handler.
Type: ${I}
Name: ${cM1.getFunctionName(d)}
Error:`,
W,
)
}
}
function Qo2() {
return Ao2.onCLS(
(I) => {
tN('cls', { metric: I }), (pM1 = I)
},
{ reportAllChanges: !0 },
)
}
function qo2() {
return Xo2.onFID((I) => {
tN('fid', { metric: I }), (iM1 = I)
})
}
function Uo2() {
return _o2.onLCP((I) => {
tN('lcp', { metric: I }), (nM1 = I)
})
}
function fo2() {
return Ho2.onTTFB((I) => {
tN('ttfb', { metric: I }), (aM1 = I)
})
}
function Ro2() {
return Yo2.onINP((I) => {
tN('inp', { metric: I }), (rM1 = I)
})
}
function Lv(I, G, Z, d, W = !1) {
sM1(I, G)
let w
if (!Wb[I]) (w = Z()), (Wb[I] = !0)
if (d) G({ metric: d })
return oM1(I, G, W ? w : void 0)
}
function Eo2(I) {
let G = {}
if (I === 'event') G.durationThreshold = 0
Do2.observe(
I,
(Z) => {
tN(I, { entries: Z })
},
G,
)
}
function sM1(I, G) {
;(Sv[I] = Sv[I] || []), Sv[I].push(G)
}
function oM1(I, G, Z) {
return () => {
if (Z) Z()
let d = Sv[I]
if (!d) return
let W = d.indexOf(G)
if (W !== -1) d.splice(W, 1)
}
}
eM1.addClsInstrumentationHandler = Fo2
eM1.addFidInstrumentationHandler = go2
eM1.addInpInstrumentationHandler = No2
eM1.addLcpInstrumentationHandler = Jo2
eM1.addPerformanceInstrumentationHandler = zo2
eM1.addTtfbInstrumentationHandler = Ko2
})
var IS1 = _((tM1) => {
Object.defineProperty(tM1, '__esModule', { value: !0 })
function Po2(I) {
return typeof I === 'number' && isFinite(I)
}
function Oo2(I, { startTimestamp: G, ...Z }) {
if (G && I.startTimestamp > G) I.startTimestamp = G
return I.startChild({ startTimestamp: G, ...Z })
}
tM1._startChild = Oo2
tM1.isMeasurementValue = Po2
})
var G21 = _((wS1) => {
Object.defineProperty(wS1, '__esModule', { value: !0 })
var lV = Y4(),
Q9 = X0(),
iG = rI(),
cF = Iz(),
jV = pG(),
mo2 = Zb(),
kV = IS1(),
bo2 = Mv(),
lo2 = 2147483647
function i6(I) {
return I / 1000
}
function I21() {
return jV.WINDOW && jV.WINDOW.addEventListener && jV.WINDOW.performance
}
var GS1 = 0,
j3 = {},
NB,
$v
function jo2() {
let I = I21()
if (I && Q9.browserPerformanceTimeOrigin) {
if (I.mark) jV.WINDOW.performance.mark('sentry-tracing-init')
let G = io2(),
Z = co2(),
d = po2(),
W = no2()
return () => {
G(), Z(), d(), W()
}
}
return () => {
return
}
}
function ko2() {
cF.addPerformanceInstrumentationHandler('longtask', ({ entries: I }) => {
for (let G of I) {
let Z = lV.getActiveTransaction()
if (!Z) return
let d = i6(Q9.browserPerformanceTimeOrigin + G.startTime),
W = i6(G.duration)
Z.startChild({
description: 'Main UI thread blocked',
op: 'ui.long-task',
origin: 'auto.ui.browser.metrics',
startTimestamp: d,
endTimestamp: d + W,
})
}
})
}
function ho2() {
cF.addPerformanceInstrumentationHandler('event', ({ entries: I }) => {
for (let G of I) {
let Z = lV.getActiveTransaction()
if (!Z) return
if (G.name === 'click') {
let d = i6(Q9.browserPerformanceTimeOrigin + G.startTime),
W = i6(G.duration),
w = {
description: Q9.htmlTreeAsString(G.target),
op: `ui.interaction.${G.name}`,
origin: 'auto.ui.browser.metrics',
startTimestamp: d,
endTimestamp: d + W,
},
B = Q9.getComponentName(G.target)
if (B) w.attributes = { 'ui.component_name': B }
Z.startChild(w)
}
}
})
}
function xo2(I, G) {
if (I21() && Q9.browserPerformanceTimeOrigin) {
let d = ao2(I, G)
return () => {
d()
}
}
return () => {
return
}
}
function co2() {
return cF.addClsInstrumentationHandler(({ metric: I }) => {
let G = I.entries[I.entries.length - 1]
if (!G) return
iG.DEBUG_BUILD && Q9.logger.log('[Measurements] Adding CLS'),
(j3.cls = { value: I.value, unit: '' }),
($v = G)
}, !0)
}
function po2() {
return cF.addLcpInstrumentationHandler(({ metric: I }) => {
let G = I.entries[I.entries.length - 1]
if (!G) return
iG.DEBUG_BUILD && Q9.logger.log('[Measurements] Adding LCP'),
(j3.lcp = { value: I.value, unit: 'millisecond' }),
(NB = G)
}, !0)
}
function io2() {
return cF.addFidInstrumentationHandler(({ metric: I }) => {
let G = I.entries[I.entries.length - 1]
if (!G) return
let Z = i6(Q9.browserPerformanceTimeOrigin),
d = i6(G.startTime)
iG.DEBUG_BUILD && Q9.logger.log('[Measurements] Adding FID'),
(j3.fid = { value: I.value, unit: 'millisecond' }),
(j3['mark.fid'] = { value: Z + d, unit: 'second' })
})
}
function no2() {
return cF.addTtfbInstrumentationHandler(({ metric: I }) => {
if (!I.entries[I.entries.length - 1]) return
iG.DEBUG_BUILD && Q9.logger.log('[Measurements] Adding TTFB'),
(j3.ttfb = { value: I.value, unit: 'millisecond' })
})
}
var ZS1 = {
click: 'click',
pointerdown: 'click',
pointerup: 'click',
mousedown: 'click',
mouseup: 'click',
touchstart: 'click',
touchend: 'click',
mouseover: 'hover',
mouseout: 'hover',
mouseenter: 'hover',
mouseleave: 'hover',
pointerover: 'hover',
pointerout: 'hover',
pointerenter: 'hover',
pointerleave: 'hover',
dragstart: 'drag',
dragend: 'drag',
drag: 'drag',
dragenter: 'drag',
dragleave: 'drag',
dragover: 'drag',
drop: 'drag',
keydown: 'press',
keyup: 'press',
keypress: 'press',
input: 'press',
}
function ao2(I, G) {
return cF.addInpInstrumentationHandler(({ metric: Z }) => {
if (Z.value === void 0) return
let d = Z.entries.find(($) => $.duration === Z.value && ZS1[$.name] !== void 0),
W = lV.getClient()
if (!d || !W) return
let w = ZS1[d.name],
B = W.getOptions(),
C = i6(Q9.browserPerformanceTimeOrigin + d.startTime),
V = i6(Z.value),
A = d.interactionId !== void 0 ? I[d.interactionId] : void 0
if (A === void 0) return
let { routeName: X, parentContext: Y, activeTransaction: H, user: J, replayId: K } = A,
g = J !== void 0 ? J.email || J.id || J.ip_address : void 0,
z = H !== void 0 ? H.getProfileId() : void 0,
f = new lV.Span({
startTimestamp: C,
endTimestamp: C + V,
op: `ui.interaction.${w}`,
name: Q9.htmlTreeAsString(d.target),
attributes: {
release: B.release,
environment: B.environment,
transaction: X,
...(g !== void 0 && g !== '' ? { user: g } : {}),
...(z !== void 0 ? { profile_id: z } : {}),
...(K !== void 0 ? { replay_id: K } : {}),
},
exclusiveTime: Z.value,
measurements: { inp: { value: Z.value, unit: 'millisecond' } },
}),
S = Ge2(Y, B, G)
if (!S) return
if (Math.random() < S) {
let $ = f ? lV.createSpanEnvelope([f], W.getDsn()) : void 0,
L = W && W.getTransport()
if (L && $)
L.send($).then(null, (T) => {
iG.DEBUG_BUILD && Q9.logger.error('Error while sending interaction:', T)
})
return
}
})
}
function ro2(I) {
let G = I21()
if (!G || !jV.WINDOW.performance.getEntries || !Q9.browserPerformanceTimeOrigin) return
iG.DEBUG_BUILD && Q9.logger.log('[Tracing] Adding & adjusting spans using Performance API')
let Z = i6(Q9.browserPerformanceTimeOrigin),
d = G.getEntries(),
{ op: W, start_timestamp: w } = lV.spanToJSON(I)
if (
(d.slice(GS1).forEach((B) => {
let C = i6(B.startTime),
V = i6(B.duration)
if (I.op === 'navigation' && w && Z + C < w) return
switch (B.entryType) {
case 'navigation': {
so2(I, B, Z)
break
}
case 'mark':
case 'paint':
case 'measure': {
dS1(I, B, C, V, Z)
let A = mo2.getVisibilityWatcher(),
X = B.startTime < A.firstHiddenTime
if (B.name === 'first-paint' && X)
iG.DEBUG_BUILD && Q9.logger.log('[Measurements] Adding FP'),
(j3.fp = { value: B.startTime, unit: 'millisecond' })
if (B.name === 'first-contentful-paint' && X)
iG.DEBUG_BUILD && Q9.logger.log('[Measurements] Adding FCP'),
(j3.fcp = { value: B.startTime, unit: 'millisecond' })
break
}
case 'resource': {
WS1(I, B, B.name, C, V, Z)
break
}
}
}),
(GS1 = Math.max(d.length - 1, 0)),
eo2(I),
W === 'pageload')
) {
Ie2(j3),
['fcp', 'fp', 'lcp'].forEach((C) => {
if (!j3[C] || !w || Z >= w) return
let V = j3[C].value,
A = Z + i6(V),
X = Math.abs((A - w) * 1000),
Y = X - V
iG.DEBUG_BUILD &&
Q9.logger.log(`[Measurements] Normalized ${C} from ${V} to ${X} (${Y})`),
(j3[C].value = X)
})
let B = j3['mark.fid']
if (B && j3.fid)
kV._startChild(I, {
description: 'first input delay',
endTimestamp: B.value + i6(j3.fid.value),
op: 'ui.action',
origin: 'auto.ui.browser.metrics',
startTimestamp: B.value,
}),
delete j3['mark.fid']
if (!('fcp' in j3)) delete j3.cls
Object.keys(j3).forEach((C) => {
lV.setMeasurement(C, j3[C].value, j3[C].unit)
}),
to2(I)
}
;(NB = void 0), ($v = void 0), (j3 = {})
}
function dS1(I, G, Z, d, W) {
let w = W + Z,
B = w + d
return (
kV._startChild(I, {
description: G.name,
endTimestamp: B,
op: G.entryType,
origin: 'auto.resource.browser.metrics',
startTimestamp: w,
}),
w
)
}
function so2(I, G, Z) {
;['unloadEvent', 'redirect', 'domContentLoadedEvent', 'loadEvent', 'connect'].forEach((d) => {
wb(I, G, d, Z)
}),
wb(I, G, 'secureConnection', Z, 'TLS/SSL', 'connectEnd'),
wb(I, G, 'fetch', Z, 'cache', 'domainLookupStart'),
wb(I, G, 'domainLookup', Z, 'DNS'),
oo2(I, G, Z)
}
function wb(I, G, Z, d, W, w) {
let B = w ? G[w] : G[`${Z}End`],
C = G[`${Z}Start`]
if (!C || !B) return
kV._startChild(I, {
op: 'browser',
origin: 'auto.browser.browser.metrics',
description: W || Z,
startTimestamp: d + i6(C),
endTimestamp: d + i6(B),
})
}
function oo2(I, G, Z) {
if (G.responseEnd)
kV._startChild(I, {
op: 'browser',
origin: 'auto.browser.browser.metrics',
description: 'request',
startTimestamp: Z + i6(G.requestStart),
endTimestamp: Z + i6(G.responseEnd),
}),
kV._startChild(I, {
op: 'browser',
origin: 'auto.browser.browser.metrics',
description: 'response',
startTimestamp: Z + i6(G.responseStart),
endTimestamp: Z + i6(G.responseEnd),
})
}
function WS1(I, G, Z, d, W, w) {
if (G.initiatorType === 'xmlhttprequest' || G.initiatorType === 'fetch') return
let B = Q9.parseUrl(Z),
C = {}
if (
(t01(C, G, 'transferSize', 'http.response_transfer_size'),
t01(C, G, 'encodedBodySize', 'http.response_content_length'),
t01(C, G, 'decodedBodySize', 'http.decoded_response_content_length'),
'renderBlockingStatus' in G)
)
C['resource.render_blocking_status'] = G.renderBlockingStatus
if (B.protocol) C['url.scheme'] = B.protocol.split(':').pop()
if (B.host) C['server.address'] = B.host
C['url.same_origin'] = Z.includes(jV.WINDOW.location.origin)
let V = w + d,
A = V + W
kV._startChild(I, {
description: Z.replace(jV.WINDOW.location.origin, ''),
endTimestamp: A,
op: G.initiatorType ? `resource.${G.initiatorType}` : 'resource.other',
origin: 'auto.resource.browser.metrics',
startTimestamp: V,
data: C,
})
}
function eo2(I) {
let G = jV.WINDOW.navigator
if (!G) return
let Z = G.connection
if (Z) {
if (Z.effectiveType) I.setTag('effectiveConnectionType', Z.effectiveType)
if (Z.type) I.setTag('connectionType', Z.type)
if (kV.isMeasurementValue(Z.rtt)) j3['connection.rtt'] = { value: Z.rtt, unit: 'millisecond' }
}
if (kV.isMeasurementValue(G.deviceMemory)) I.setTag('deviceMemory', `${G.deviceMemory} GB`)
if (kV.isMeasurementValue(G.hardwareConcurrency))
I.setTag('hardwareConcurrency', String(G.hardwareConcurrency))
}
function to2(I) {
if (NB) {
if ((iG.DEBUG_BUILD && Q9.logger.log('[Measurements] Adding LCP Data'), NB.element))
I.setTag('lcp.element', Q9.htmlTreeAsString(NB.element))
if (NB.id) I.setTag('lcp.id', NB.id)
if (NB.url) I.setTag('lcp.url', NB.url.trim().slice(0, 200))
I.setTag('lcp.size', NB.size)
}
if ($v && $v.sources)
iG.DEBUG_BUILD && Q9.logger.log('[Measurements] Adding CLS Data'),
$v.sources.forEach((G, Z) => I.setTag(`cls.source.${Z + 1}`, Q9.htmlTreeAsString(G.node)))
}
function t01(I, G, Z, d) {
let W = G[Z]
if (W != null && W < lo2) I[d] = W
}
function Ie2(I) {
let G = bo2.getNavigationEntry()
if (!G) return
let { responseStart: Z, requestStart: d } = G
if (d <= Z)
iG.DEBUG_BUILD && Q9.logger.log('[Measurements] Adding TTFB Request Time'),
(I['ttfb.requestTime'] = { value: Z - d, unit: 'millisecond' })
}
function Ge2(I, G, Z) {
if (!lV.hasTracingEnabled(G)) return !1
let d
if (I !== void 0 && typeof G.tracesSampler === 'function')
d = G.tracesSampler({
transactionContext: I,
name: I.name,
parentSampled: I.parentSampled,
attributes: { ...I.data, ...I.attributes },
location: jV.WINDOW.location,
})
else if (I !== void 0 && I.sampled !== void 0) d = I.sampled
else if (typeof G.tracesSampleRate !== 'undefined') d = G.tracesSampleRate
else d = 1
if (!lV.isValidSampleRate(d))
return (
iG.DEBUG_BUILD &&
Q9.logger.warn('[Tracing] Discarding interaction span because of invalid sample rate.'),
!1
)
if (d === !0) return Z
else if (d === !1) return 0
return d * Z
}
wS1._addMeasureSpans = dS1
wS1._addResourceSpans = WS1
wS1.addPerformanceEntries = ro2
wS1.startTrackingINP = xo2
wS1.startTrackingInteractions = ho2
wS1.startTrackingLongTasks = ko2
wS1.startTrackingWebVitals = jo2
})
var Z21 = _((CS1) => {
Object.defineProperty(CS1, '__esModule', { value: !0 })
var zB = Y4(),
pF = X0()
function Ae2(I, G, Z, d, W = 'auto.http.browser') {
if (!zB.hasTracingEnabled() || !I.fetchData) return
let w = G(I.fetchData.url)
if (I.endTimestamp && w) {
let J = I.fetchData.__span
if (!J) return
let K = d[J]
if (K) Ye2(K, I), delete d[J]
return
}
let B = zB.getCurrentScope(),
C = zB.getClient(),
{ method: V, url: A } = I.fetchData,
X = Xe2(A),
Y = X ? pF.parseUrl(X).host : void 0,
H = w
? zB.startInactiveSpan({
name: `${V} ${A}`,
onlyIfParent: !0,
attributes: {
url: A,
type: 'fetch',
'http.method': V,
'http.url': X,
'server.address': Y,
[zB.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: W,
},
op: 'http.client',
})
: void 0
if (H) (I.fetchData.__span = H.spanContext().spanId), (d[H.spanContext().spanId] = H)
if (Z(I.fetchData.url) && C) {
let J = I.args[0]
I.args[1] = I.args[1] || {}
let K = I.args[1]
K.headers = BS1(J, C, B, K, H)
}
return H
}
function BS1(I, G, Z, d, W) {
let w = W || Z.getSpan(),
B = zB.getIsolationScope(),
{
traceId: C,
spanId: V,
sampled: A,
dsc: X,
} = { ...B.getPropagationContext(), ...Z.getPropagationContext() },
Y = w ? zB.spanToTraceHeader(w) : pF.generateSentryTraceHeader(C, V, A),
H = pF.dynamicSamplingContextToSentryBaggageHeader(
X ||
(w
? zB.getDynamicSamplingContextFromSpan(w)
: zB.getDynamicSamplingContextFromClient(C, G, Z)),
),
J =
d.headers ||
(typeof Request !== 'undefined' && pF.isInstanceOf(I, Request) ? I.headers : void 0)
if (!J) return { 'sentry-trace': Y, baggage: H }
else if (typeof Headers !== 'undefined' && pF.isInstanceOf(J, Headers)) {
let K = new Headers(J)
if ((K.append('sentry-trace', Y), H)) K.append(pF.BAGGAGE_HEADER_NAME, H)
return K
} else if (Array.isArray(J)) {
let K = [...J, ['sentry-trace', Y]]
if (H) K.push([pF.BAGGAGE_HEADER_NAME, H])
return K
} else {
let K = 'baggage' in J ? J.baggage : void 0,
g = []
if (Array.isArray(K)) g.push(...K)
else if (K) g.push(K)
if (H) g.push(H)
return { ...J, 'sentry-trace': Y, baggage: g.length > 0 ? g.join(',') : void 0 }
}
}
function Xe2(I) {
try {
return new URL(I).href
} catch (G) {
return
}
}
function Ye2(I, G) {
if (G.response) {
zB.setHttpStatus(I, G.response.status)
let Z = G.response && G.response.headers && G.response.headers.get('content-length')
if (Z) {
let d = parseInt(Z)
if (d > 0) I.setAttribute('http.response_content_length', d)
}
} else if (G.error) I.setStatus('internal_error')
I.end()
}
CS1.addTracingHeadersToFetchRequest = BS1
CS1.instrumentFetchRequest = Ae2
})
var Cb = _((DS1) => {
Object.defineProperty(DS1, '__esModule', { value: !0 })
var zW = Y4(),
QW = X0(),
He2 = Z21(),
Fe2 = Iz(),
Je2 = pG(),
Bb = ['localhost', /^\/(?!\/)/],
d21 = {
traceFetch: !0,
traceXHR: !0,
enableHTTPTimings: !0,
tracingOrigins: Bb,
tracePropagationTargets: Bb,
}
function Ke2(I) {
let {
traceFetch: G,
traceXHR: Z,
tracePropagationTargets: d,
tracingOrigins: W,
shouldCreateSpanForRequest: w,
enableHTTPTimings: B,
} = { traceFetch: d21.traceFetch, traceXHR: d21.traceXHR, ...I },
C = typeof w === 'function' ? w : (X) => !0,
V = (X) => XS1(X, d || W),
A = {}
if (G)
QW.addFetchInstrumentationHandler((X) => {
let Y = He2.instrumentFetchRequest(X, C, V, A)
if (Y) {
let H = _S1(X.fetchData.url),
J = H ? QW.parseUrl(H).host : void 0
Y.setAttributes({ 'http.url': H, 'server.address': J })
}
if (B && Y) VS1(Y)
})
if (Z)
QW.addXhrInstrumentationHandler((X) => {
let Y = YS1(X, C, V, A)
if (B && Y) VS1(Y)
})
}
function ge2(I) {
return (
I.entryType === 'resource' &&
'initiatorType' in I &&
typeof I.nextHopProtocol === 'string' &&
(I.initiatorType === 'fetch' || I.initiatorType === 'xmlhttprequest')
)
}
function VS1(I) {
let { url: G } = zW.spanToJSON(I).data || {}
if (!G || typeof G !== 'string') return
let Z = Fe2.addPerformanceInstrumentationHandler('resource', ({ entries: d }) => {
d.forEach((W) => {
if (ge2(W) && W.name.endsWith(G)) Ne2(W).forEach((B) => I.setAttribute(...B)), setTimeout(Z)
})
})
}
function AS1(I) {
let G = 'unknown',
Z = 'unknown',
d = ''
for (let W of I) {
if (W === '/') {
;[G, Z] = I.split('/')
break
}
if (!isNaN(Number(W))) {
;(G = d === 'h' ? 'http' : d), (Z = I.split(d)[1])
break
}
d += W
}
if (d === I) G = d
return { name: G, version: Z }
}
function QB(I = 0) {
return ((QW.browserPerformanceTimeOrigin || performance.timeOrigin) + I) / 1000
}
function Ne2(I) {
let { name: G, version: Z } = AS1(I.nextHopProtocol),
d = []
if (
(d.push(['network.protocol.version', Z], ['network.protocol.name', G]),
!QW.browserPerformanceTimeOrigin)
)
return d
return [
...d,
['http.request.redirect_start', QB(I.redirectStart)],
['http.request.fetch_start', QB(I.fetchStart)],
['http.request.domain_lookup_start', QB(I.domainLookupStart)],
['http.request.domain_lookup_end', QB(I.domainLookupEnd)],
['http.request.connect_start', QB(I.connectStart)],
['http.request.secure_connection_start', QB(I.secureConnectionStart)],
['http.request.connection_end', QB(I.connectEnd)],
['http.request.request_start', QB(I.requestStart)],
['http.request.response_start', QB(I.responseStart)],
['http.request.response_end', QB(I.responseEnd)],
]
}
function XS1(I, G) {
return QW.stringMatchesSomePattern(I, G || Bb)
}
function YS1(I, G, Z, d) {
let W = I.xhr,
w = W && W[QW.SENTRY_XHR_DATA_KEY]
if (!zW.hasTracingEnabled() || !W || W.__sentry_own_request__ || !w) return
let B = G(w.url)
if (I.endTimestamp && B) {
let J = W.__sentry_xhr_span_id__
if (!J) return
let K = d[J]
if (K && w.status_code !== void 0) zW.setHttpStatus(K, w.status_code), K.end(), delete d[J]
return
}
let C = zW.getCurrentScope(),
V = zW.getIsolationScope(),
A = _S1(w.url),
X = A ? QW.parseUrl(A).host : void 0,
Y = B
? zW.startInactiveSpan({
name: `${w.method} ${w.url}`,
onlyIfParent: !0,
attributes: {
type: 'xhr',
'http.method': w.method,
'http.url': A,
url: w.url,
'server.address': X,
[zW.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.browser',
},
op: 'http.client',
})
: void 0
if (Y) (W.__sentry_xhr_span_id__ = Y.spanContext().spanId), (d[W.__sentry_xhr_span_id__] = Y)
let H = zW.getClient()
if (W.setRequestHeader && Z(w.url) && H) {
let {
traceId: J,
spanId: K,
sampled: g,
dsc: z,
} = { ...V.getPropagationContext(), ...C.getPropagationContext() },
f = Y ? zW.spanToTraceHeader(Y) : QW.generateSentryTraceHeader(J, K, g),
S = QW.dynamicSamplingContextToSentryBaggageHeader(
z ||
(Y
? zW.getDynamicSamplingContextFromSpan(Y)
: zW.getDynamicSamplingContextFromClient(J, H, C)),
)
ze2(W, f, S)
}
return Y
}
function ze2(I, G, Z) {
try {
if ((I.setRequestHeader('sentry-trace', G), Z)) I.setRequestHeader(QW.BAGGAGE_HEADER_NAME, Z)
} catch (d) {}
}
function _S1(I) {
try {
return new URL(I, Je2.WINDOW.location.origin).href
} catch (G) {
return
}
}
DS1.DEFAULT_TRACE_PROPAGATION_TARGETS = Bb
DS1.defaultRequestInstrumentationOptions = d21
DS1.extractNetworkProtocol = AS1
DS1.instrumentOutgoingRequests = Ke2
DS1.shouldAttachHeaders = XS1
DS1.xhrCallback = YS1
})
var JS1 = _((FS1) => {
Object.defineProperty(FS1, '__esModule', { value: !0 })
var yv = X0(),
HS1 = rI(),
Pv = pG()
function ve2(I, G = !0, Z = !0) {
if (!Pv.WINDOW || !Pv.WINDOW.location) {
HS1.DEBUG_BUILD &&
yv.logger.warn('Could not initialize routing instrumentation due to invalid location')
return
}
let d = Pv.WINDOW.location.href,
W
if (G)
W = I({
name: Pv.WINDOW.location.pathname,
startTimestamp: yv.browserPerformanceTimeOrigin
? yv.browserPerformanceTimeOrigin / 1000
: void 0,
op: 'pageload',
origin: 'auto.pageload.browser',
metadata: { source: 'url' },
})
if (Z)
yv.addHistoryInstrumentationHandler(({ to: w, from: B }) => {
if (B === void 0 && d && d.indexOf(w) !== -1) {
d = void 0
return
}
if (B !== w) {
if (((d = void 0), W))
HS1.DEBUG_BUILD &&
yv.logger.log(`[Tracing] Finishing current transaction with op: ${W.op}`),
W.end()
W = I({
name: Pv.WINDOW.location.pathname,
op: 'navigation',
origin: 'auto.navigation.browser',
metadata: { source: 'url' },
})
}
})
}
FS1.instrumentRoutingWithDefaults = ve2
})
var US1 = _((qS1) => {
Object.defineProperty(qS1, '__esModule', { value: !0 })
var qW = Y4(),
hV = X0(),
HY = rI(),
Se2 = n01(),
KS1 = Iz(),
Ov = G21(),
NS1 = Cb(),
Le2 = JS1(),
iF = pG(),
zS1 = 'BrowserTracing',
$e2 = {
...qW.TRACING_DEFAULTS,
markBackgroundTransactions: !0,
routingInstrumentation: Le2.instrumentRoutingWithDefaults,
startTransactionOnLocationChange: !0,
startTransactionOnPageLoad: !0,
enableLongTask: !0,
enableInp: !1,
interactionsSampleRate: 1,
_experiments: {},
...NS1.defaultRequestInstrumentationOptions,
},
gS1 = 10
class QS1 {
constructor(I) {
if (
((this.name = zS1),
(this._hasSetTracePropagationTargets = !1),
qW.addTracingExtensions(),
HY.DEBUG_BUILD)
)
this._hasSetTracePropagationTargets = !!(
I &&
(I.tracePropagationTargets || I.tracingOrigins)
)
if (((this.options = { ...$e2, ...I }), this.options._experiments.enableLongTask !== void 0))
this.options.enableLongTask = this.options._experiments.enableLongTask
if (I && !I.tracePropagationTargets && I.tracingOrigins)
this.options.tracePropagationTargets = I.tracingOrigins
if (
((this._collectWebVitals = Ov.startTrackingWebVitals()),
(this._interactionIdToRouteNameMapping = {}),
this.options.enableInp)
)
Ov.startTrackingINP(
this._interactionIdToRouteNameMapping,
this.options.interactionsSampleRate,
)
if (this.options.enableLongTask) Ov.startTrackingLongTasks()
if (this.options._experiments.enableInteractions) Ov.startTrackingInteractions()
this._latestRoute = { name: void 0, context: void 0 }
}
setupOnce(I, G) {
this._getCurrentHub = G
let d = G().getClient(),
W = d && d.getOptions(),
{
routingInstrumentation: w,
startTransactionOnLocationChange: B,
startTransactionOnPageLoad: C,
markBackgroundTransactions: V,
traceFetch: A,
traceXHR: X,
shouldCreateSpanForRequest: Y,
enableHTTPTimings: H,
_experiments: J,
} = this.options,
K = W && W.tracePropagationTargets,
g = K || this.options.tracePropagationTargets
if (HY.DEBUG_BUILD && this._hasSetTracePropagationTargets && K)
hV.logger.warn(
'[Tracing] The `tracePropagationTargets` option was set in the BrowserTracing integration and top level `Sentry.init`. The top level `Sentry.init` value is being used.',
)
if (
(w(
(z) => {
let f = this._createRouteTransaction(z)
return (
this.options._experiments.onStartRouteTransaction &&
this.options._experiments.onStartRouteTransaction(f, z, G),
f
)
},
C,
B,
),
V)
)
Se2.registerBackgroundTabDetection()
if (J.enableInteractions) this._registerInteractionListener()
if (this.options.enableInp) this._registerInpInteractionListener()
NS1.instrumentOutgoingRequests({
traceFetch: A,
traceXHR: X,
tracePropagationTargets: g,
shouldCreateSpanForRequest: Y,
enableHTTPTimings: H,
})
}
_createRouteTransaction(I) {
if (!this._getCurrentHub) {
HY.DEBUG_BUILD &&
hV.logger.warn(
`[Tracing] Did not create ${I.op} transaction because _getCurrentHub is invalid.`,
)
return
}
let G = this._getCurrentHub(),
{ beforeNavigate: Z, idleTimeout: d, finalTimeout: W, heartbeatInterval: w } = this.options,
B = I.op === 'pageload',
C
if (B) {
let H = B ? W21('sentry-trace') : '',
J = B ? W21('baggage') : void 0,
{
traceId: K,
dsc: g,
parentSpanId: z,
sampled: f,
} = hV.propagationContextFromHeaders(H, J)
C = {
traceId: K,
parentSpanId: z,
parentSampled: f,
...I,
metadata: { ...I.metadata, dynamicSamplingContext: g },
trimEnd: !0,
}
} else C = { trimEnd: !0, ...I }
let V = typeof Z === 'function' ? Z(C) : C,
A = V === void 0 ? { ...C, sampled: !1 } : V
if (
((A.metadata = A.name !== C.name ? { ...A.metadata, source: 'custom' } : A.metadata),
(this._latestRoute.name = A.name),
(this._latestRoute.context = A),
A.sampled === !1)
)
HY.DEBUG_BUILD &&
hV.logger.log(`[Tracing] Will not send ${A.op} transaction because of beforeNavigate.`)
HY.DEBUG_BUILD && hV.logger.log(`[Tracing] Starting ${A.op} transaction on scope`)
let { location: X } = iF.WINDOW,
Y = qW.startIdleTransaction(G, A, d, W, !0, { location: X }, w, B)
if (B) {
if (iF.WINDOW.document) {
if (
(iF.WINDOW.document.addEventListener('readystatechange', () => {
if (['interactive', 'complete'].includes(iF.WINDOW.document.readyState))
Y.sendAutoFinishSignal()
}),
['interactive', 'complete'].includes(iF.WINDOW.document.readyState))
)
Y.sendAutoFinishSignal()
}
}
return (
Y.registerBeforeFinishCallback((H) => {
this._collectWebVitals(), Ov.addPerformanceEntries(H)
}),
Y
)
}
_registerInteractionListener() {
let I,
G = () => {
let { idleTimeout: Z, finalTimeout: d, heartbeatInterval: W } = this.options,
w = 'ui.action.click',
B = qW.getActiveTransaction()
if (B && B.op && ['navigation', 'pageload'].includes(B.op)) {
HY.DEBUG_BUILD &&
hV.logger.warn(
'[Tracing] Did not create ui.action.click transaction because a pageload or navigation transaction is in progress.',
)
return
}
if (I) I.setFinishReason('interactionInterrupted'), I.end(), (I = void 0)
if (!this._getCurrentHub) {
HY.DEBUG_BUILD &&
hV.logger.warn(
'[Tracing] Did not create ui.action.click transaction because _getCurrentHub is invalid.',
)
return
}
if (!this._latestRoute.name) {
HY.DEBUG_BUILD &&
hV.logger.warn(
'[Tracing] Did not create ui.action.click transaction because _latestRouteName is missing.',
)
return
}
let C = this._getCurrentHub(),
{ location: V } = iF.WINDOW,
A = {
name: this._latestRoute.name,
op: 'ui.action.click',
trimEnd: !0,
data: {
[qW.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: this._latestRoute.context
? ye2(this._latestRoute.context)
: 'url',
},
}
I = qW.startIdleTransaction(C, A, Z, d, !0, { location: V }, W)
}
;['click'].forEach((Z) => {
if (iF.WINDOW.document) addEventListener(Z, G, { once: !1, capture: !0 })
})
}
_registerInpInteractionListener() {
let I = ({ entries: G }) => {
let Z = qW.getClient(),
d =
Z !== void 0 && Z.getIntegrationByName !== void 0
? Z.getIntegrationByName('Replay')
: void 0,
W = d !== void 0 ? d.getReplayId() : void 0,
w = qW.getActiveTransaction(),
B = qW.getCurrentScope(),
C = B !== void 0 ? B.getUser() : void 0
G.forEach((V) => {
if (Pe2(V)) {
let A = V.interactionId
if (A === void 0) return
let X = this._interactionIdToRouteNameMapping[A],
Y = V.duration,
H = V.startTime,
J = Object.keys(this._interactionIdToRouteNameMapping),
K =
J.length > 0
? J.reduce((g, z) => {
return this._interactionIdToRouteNameMapping[g].duration <
this._interactionIdToRouteNameMapping[z].duration
? g
: z
})
: void 0
if (V.entryType === 'first-input') {
if (
J.map((z) => this._interactionIdToRouteNameMapping[z]).some((z) => {
return z.duration === Y && z.startTime === H
})
)
return
}
if (!A) return
if (X) X.duration = Math.max(X.duration, Y)
else if (
J.length < gS1 ||
K === void 0 ||
Y > this._interactionIdToRouteNameMapping[K].duration
) {
let g = this._latestRoute.name,
z = this._latestRoute.context
if (g && z) {
if (K && Object.keys(this._interactionIdToRouteNameMapping).length >= gS1)
delete this._interactionIdToRouteNameMapping[K]
this._interactionIdToRouteNameMapping[A] = {
routeName: g,
duration: Y,
parentContext: z,
user: C,
activeTransaction: w,
replayId: W,
startTime: H,
}
}
}
}
})
}
KS1.addPerformanceInstrumentationHandler('event', I),
KS1.addPerformanceInstrumentationHandler('first-input', I)
}
}
function W21(I) {
let G = hV.getDomElement(`meta[name=${I}]`)
return G ? G.getAttribute('content') : void 0
}
function ye2(I) {
let G = I.attributes && I.attributes[qW.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE],
Z = I.data && I.data[qW.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE],
d = I.metadata && I.metadata.source
return G || Z || d
}
function Pe2(I) {
return 'duration' in I
}
qS1.BROWSER_TRACING_INTEGRATION_ID = zS1
qS1.BrowserTracing = QS1
qS1.getMetaContent = W21
})
var $S1 = _((LS1) => {
Object.defineProperty(LS1, '__esModule', { value: !0 })
var B6 = Y4(),
Id = X0(),
FY = rI(),
me2 = n01(),
fS1 = Iz(),
uv = G21(),
ES1 = Cb(),
nG = pG(),
vS1 = 'BrowserTracing',
be2 = {
...B6.TRACING_DEFAULTS,
instrumentNavigation: !0,
instrumentPageLoad: !0,
markBackgroundSpan: !0,
enableLongTask: !0,
enableInp: !1,
interactionsSampleRate: 1,
_experiments: {},
...ES1.defaultRequestInstrumentationOptions,
},
le2 = (I = {}) => {
let G = FY.DEBUG_BUILD ? !!(I.tracePropagationTargets || I.tracingOrigins) : !1
if ((B6.addTracingExtensions(), !I.tracePropagationTargets && I.tracingOrigins))
I.tracePropagationTargets = I.tracingOrigins
let Z = { ...be2, ...I },
d = uv.startTrackingWebVitals(),
W = {}
if (Z.enableInp) uv.startTrackingINP(W, Z.interactionsSampleRate)
if (Z.enableLongTask) uv.startTrackingLongTasks()
if (Z._experiments.enableInteractions) uv.startTrackingInteractions()
let w = { name: void 0, context: void 0 }
function B(C) {
let V = B6.getCurrentHub(),
{ beforeStartSpan: A, idleTimeout: X, finalTimeout: Y, heartbeatInterval: H } = Z,
J = C.op === 'pageload',
K
if (J) {
let S = J ? w21('sentry-trace') : '',
$ = J ? w21('baggage') : void 0,
{
traceId: L,
dsc: T,
parentSpanId: m,
sampled: O,
} = Id.propagationContextFromHeaders(S, $)
K = {
traceId: L,
parentSpanId: m,
parentSampled: O,
...C,
metadata: { ...C.metadata, dynamicSamplingContext: T },
trimEnd: !0,
}
} else K = { trimEnd: !0, ...C }
let g = A ? A(K) : K
if (
((g.metadata = g.name !== K.name ? { ...g.metadata, source: 'custom' } : g.metadata),
(w.name = g.name),
(w.context = g),
g.sampled === !1)
)
FY.DEBUG_BUILD &&
Id.logger.log(`[Tracing] Will not send ${g.op} transaction because of beforeNavigate.`)
FY.DEBUG_BUILD && Id.logger.log(`[Tracing] Starting ${g.op} transaction on scope`)
let { location: z } = nG.WINDOW,
f = B6.startIdleTransaction(V, g, X, Y, !0, { location: z }, H, J)
if (J && nG.WINDOW.document) {
if (
(nG.WINDOW.document.addEventListener('readystatechange', () => {
if (['interactive', 'complete'].includes(nG.WINDOW.document.readyState))
f.sendAutoFinishSignal()
}),
['interactive', 'complete'].includes(nG.WINDOW.document.readyState))
)
f.sendAutoFinishSignal()
}
return (
f.registerBeforeFinishCallback((S) => {
d(), uv.addPerformanceEntries(S)
}),
f
)
}
return {
name: vS1,
setupOnce: () => {},
afterAllSetup(C) {
let V = C.getOptions(),
{
markBackgroundSpan: A,
traceFetch: X,
traceXHR: Y,
shouldCreateSpanForRequest: H,
enableHTTPTimings: J,
_experiments: K,
} = Z,
g = V && V.tracePropagationTargets,
z = g || Z.tracePropagationTargets
if (FY.DEBUG_BUILD && G && g)
Id.logger.warn(
'[Tracing] The `tracePropagationTargets` option was set in the BrowserTracing integration and top level `Sentry.init`. The top level `Sentry.init` value is being used.',
)
let f,
S = nG.WINDOW.location && nG.WINDOW.location.href
if (C.on)
C.on('startNavigationSpan', ($) => {
if (f)
FY.DEBUG_BUILD &&
Id.logger.log(
`[Tracing] Finishing current transaction with op: ${B6.spanToJSON(f).op}`,
),
f.end()
f = B({ op: 'navigation', ...$ })
}),
C.on('startPageLoadSpan', ($) => {
if (f)
FY.DEBUG_BUILD &&
Id.logger.log(
`[Tracing] Finishing current transaction with op: ${B6.spanToJSON(f).op}`,
),
f.end()
f = B({ op: 'pageload', ...$ })
})
if (Z.instrumentPageLoad && C.emit && nG.WINDOW.location) {
let $ = {
name: nG.WINDOW.location.pathname,
startTimestamp: Id.browserPerformanceTimeOrigin
? Id.browserPerformanceTimeOrigin / 1000
: void 0,
origin: 'auto.pageload.browser',
attributes: { [B6.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'url' },
}
MS1(C, $)
}
if (Z.instrumentNavigation && C.emit && nG.WINDOW.location)
Id.addHistoryInstrumentationHandler(({ to: $, from: L }) => {
if (L === void 0 && S && S.indexOf($) !== -1) {
S = void 0
return
}
if (L !== $) {
S = void 0
let T = {
name: nG.WINDOW.location.pathname,
origin: 'auto.navigation.browser',
attributes: { [B6.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'url' },
}
SS1(C, T)
}
})
if (A) me2.registerBackgroundTabDetection()
if (K.enableInteractions) je2(Z, w)
if (Z.enableInp) he2(W, w)
ES1.instrumentOutgoingRequests({
traceFetch: X,
traceXHR: Y,
tracePropagationTargets: z,
shouldCreateSpanForRequest: H,
enableHTTPTimings: J,
})
},
options: Z,
}
}
function MS1(I, G) {
if (!I.emit) return
I.emit('startPageLoadSpan', G)
let Z = B6.getActiveSpan()
return (Z && B6.spanToJSON(Z).op) === 'pageload' ? Z : void 0
}
function SS1(I, G) {
if (!I.emit) return
I.emit('startNavigationSpan', G)
let Z = B6.getActiveSpan()
return (Z && B6.spanToJSON(Z).op) === 'navigation' ? Z : void 0
}
function w21(I) {
let G = Id.getDomElement(`meta[name=${I}]`)
return G ? G.getAttribute('content') : void 0
}
function je2(I, G) {
let Z,
d = () => {
let { idleTimeout: W, finalTimeout: w, heartbeatInterval: B } = I,
C = 'ui.action.click',
V = B6.getActiveTransaction()
if (V && V.op && ['navigation', 'pageload'].includes(V.op)) {
FY.DEBUG_BUILD &&
Id.logger.warn(
'[Tracing] Did not create ui.action.click transaction because a pageload or navigation transaction is in progress.',
)
return
}
if (Z) Z.setFinishReason('interactionInterrupted'), Z.end(), (Z = void 0)
if (!G.name) {
FY.DEBUG_BUILD &&
Id.logger.warn(
'[Tracing] Did not create ui.action.click transaction because _latestRouteName is missing.',
)
return
}
let { location: A } = nG.WINDOW,
X = {
name: G.name,
op: 'ui.action.click',
trimEnd: !0,
data: { [B6.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: G.context ? xe2(G.context) : 'url' },
}
Z = B6.startIdleTransaction(B6.getCurrentHub(), X, W, w, !0, { location: A }, B)
}
;['click'].forEach((W) => {
if (nG.WINDOW.document) addEventListener(W, d, { once: !1, capture: !0 })
})
}
function ke2(I) {
return 'duration' in I
}
var RS1 = 10
function he2(I, G) {
let Z = ({ entries: d }) => {
let W = B6.getClient(),
w =
W !== void 0 && W.getIntegrationByName !== void 0
? W.getIntegrationByName('Replay')
: void 0,
B = w !== void 0 ? w.getReplayId() : void 0,
C = B6.getActiveTransaction(),
V = B6.getCurrentScope(),
A = V !== void 0 ? V.getUser() : void 0
d.forEach((X) => {
if (ke2(X)) {
let Y = X.interactionId
if (Y === void 0) return
let H = I[Y],
J = X.duration,
K = X.startTime,
g = Object.keys(I),
z =
g.length > 0
? g.reduce((f, S) => {
return I[f].duration < I[S].duration ? f : S
})
: void 0
if (X.entryType === 'first-input') {
if (
g
.map((S) => I[S])
.some((S) => {
return S.duration === J && S.startTime === K
})
)
return
}
if (!Y) return
if (H) H.duration = Math.max(H.duration, J)
else if (g.length < RS1 || z === void 0 || J > I[z].duration) {
let { name: f, context: S } = G
if (f && S) {
if (z && Object.keys(I).length >= RS1) delete I[z]
I[Y] = {
routeName: f,
duration: J,
parentContext: S,
user: A,
activeTransaction: C,
replayId: B,
startTime: K,
}
}
}
}
})
}
fS1.addPerformanceInstrumentationHandler('event', Z),
fS1.addPerformanceInstrumentationHandler('first-input', Z)
}
function xe2(I) {
let G = I.attributes && I.attributes[B6.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE],
Z = I.data && I.data[B6.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE],
d = I.metadata && I.metadata.source
return G || Z || d
}
LS1.BROWSER_TRACING_INTEGRATION_ID = vS1
LS1.browserTracingIntegration = le2
LS1.getMetaContent = w21
LS1.startBrowserTracingNavigationSpan = SS1
LS1.startBrowserTracingPageLoadSpan = MS1
})
var OS1 = _((PS1, Tv) => {
Object.defineProperty(PS1, '__esModule', { value: !0 })
var yS1 = Y4(),
Gz = X0()
function re2() {
let I = yS1.getMainCarrier()
if (!I.__SENTRY__) return
let G = {
mongodb() {
return new (Gz.dynamicRequire(Tv, './node/integrations/mongo').Mongo)()
},
mongoose() {
return new (Gz.dynamicRequire(Tv, './node/integrations/mongo').Mongo)()
},
mysql() {
return new (Gz.dynamicRequire(Tv, './node/integrations/mysql').Mysql)()
},
pg() {
return new (Gz.dynamicRequire(Tv, './node/integrations/postgres').Postgres)()
},
},
Z = Object.keys(G)
.filter((d) => !!Gz.loadModule(d))
.map((d) => {
try {
return G[d]()
} catch (W) {
return
}
})
.filter((d) => d)
if (Z.length > 0) I.__SENTRY__.integrations = [...(I.__SENTRY__.integrations || []), ...Z]
}
function se2() {
if ((yS1.addTracingExtensions(), Gz.isNodeEnv())) re2()
}
PS1.addExtensionMethods = se2
})
var C21 = _((lS1) => {
Object.defineProperty(lS1, '__esModule', { value: !0 })
var xV = Y4(),
uS1 = X0(),
ee2 = pv1(),
te2 = nv1(),
It2 = rv1(),
Gt2 = ev1(),
Zt2 = GM1(),
dt2 = WM1(),
Wt2 = CM1(),
wt2 = AM1(),
TS1 = US1(),
B21 = $S1(),
mS1 = Cb(),
Vb = Iz(),
bS1 = Z21(),
Bt2 = OS1()
lS1.IdleTransaction = xV.IdleTransaction
lS1.Span = xV.Span
lS1.SpanStatus = xV.SpanStatus
lS1.Transaction = xV.Transaction
lS1.extractTraceparentData = xV.extractTraceparentData
lS1.getActiveTransaction = xV.getActiveTransaction
lS1.hasTracingEnabled = xV.hasTracingEnabled
lS1.spanStatusfromHttpCode = xV.spanStatusfromHttpCode
lS1.startIdleTransaction = xV.startIdleTransaction
lS1.TRACEPARENT_REGEXP = uS1.TRACEPARENT_REGEXP
lS1.stripUrlQueryAndFragment = uS1.stripUrlQueryAndFragment
lS1.Express = ee2.Express
lS1.Postgres = te2.Postgres
lS1.Mysql = It2.Mysql
lS1.Mongo = Gt2.Mongo
lS1.Prisma = Zt2.Prisma
lS1.GraphQL = dt2.GraphQL
lS1.Apollo = Wt2.Apollo
lS1.lazyLoadedNodePerformanceMonitoringIntegrations =
wt2.lazyLoadedNodePerformanceMonitoringIntegrations
lS1.BROWSER_TRACING_INTEGRATION_ID = TS1.BROWSER_TRACING_INTEGRATION_ID
lS1.BrowserTracing = TS1.BrowserTracing
lS1.browserTracingIntegration = B21.browserTracingIntegration
lS1.startBrowserTracingNavigationSpan = B21.startBrowserTracingNavigationSpan
lS1.startBrowserTracingPageLoadSpan = B21.startBrowserTracingPageLoadSpan
lS1.defaultRequestInstrumentationOptions = mS1.defaultRequestInstrumentationOptions
lS1.instrumentOutgoingRequests = mS1.instrumentOutgoingRequests
lS1.addClsInstrumentationHandler = Vb.addClsInstrumentationHandler
lS1.addFidInstrumentationHandler = Vb.addFidInstrumentationHandler
lS1.addLcpInstrumentationHandler = Vb.addLcpInstrumentationHandler
lS1.addPerformanceInstrumentationHandler = Vb.addPerformanceInstrumentationHandler
lS1.addTracingHeadersToFetchRequest = bS1.addTracingHeadersToFetchRequest
lS1.instrumentFetchRequest = bS1.instrumentFetchRequest
lS1.addExtensionMethods = Bt2.addExtensionMethods
})
var kS1 = _((jS1) => {
Object.defineProperty(jS1, '__esModule', { value: !0 })
var jt2 = C21(),
kt2 = X0()
function ht2() {
let I = jt2.lazyLoadedNodePerformanceMonitoringIntegrations
.map((G) => {
try {
return G()
} catch (Z) {
return
}
})
.filter((G) => !!G)
if (I.length === 0)
kt2.logger.warn('Performance monitoring integrations could not be automatically loaded.')
return I.filter((G) => !!G.loadDependency())
}
jS1.autoDiscoverNodePerformanceMonitoringIntegrations = ht2
})
var V21 = _((cS1) => {
Object.defineProperty(cS1, '__esModule', { value: !0 })
var ct2 = A1('os'),
pt2 = A1('util'),
hS1 = Y4()
class xS1 extends hS1.ServerRuntimeClient {
constructor(I) {
hS1.applySdkMetadata(I, 'node'),
(I.transportOptions = { textEncoder: new pt2.TextEncoder(), ...I.transportOptions })
let G = {
...I,
platform: 'node',
runtime: { name: 'node', version: global.process.version },
serverName: I.serverName || global.process.env.SENTRY_NAME || ct2.hostname(),
}
super(G)
}
}
cS1.NodeClient = xS1
})
var rS1 = _((aS1) => {
var { _nullishCoalesce: pS1 } = X0()
Object.defineProperty(aS1, '__esModule', { value: !0 })
var iS1 = A1('http')
A1('https')
var qB = Symbol('AgentBaseInternalState')
class nS1 extends iS1.Agent {
constructor(I) {
super(I)
this[qB] = {}
}
isSecureEndpoint(I) {
if (I) {
if (typeof I.secureEndpoint === 'boolean') return I.secureEndpoint
if (typeof I.protocol === 'string') return I.protocol === 'https:'
}
let { stack: G } = new Error()
if (typeof G !== 'string') return !1
return G.split(
`
`,
).some((Z) => Z.indexOf('(https.js:') !== -1 || Z.indexOf('node:https:') !== -1)
}
createSocket(I, G, Z) {
let d = { ...G, secureEndpoint: this.isSecureEndpoint(G) }
Promise.resolve()
.then(() => this.connect(I, d))
.then((W) => {
if (W instanceof iS1.Agent) return W.addRequest(I, d)
;(this[qB].currentSocket = W), super.createSocket(I, G, Z)
}, Z)
}
createConnection() {
let I = this[qB].currentSocket
if (((this[qB].currentSocket = void 0), !I))
throw new Error('No socket was returned in the `connect()` function')
return I
}
get defaultPort() {
return pS1(this[qB].defaultPort, () => (this.protocol === 'https:' ? 443 : 80))
}
set defaultPort(I) {
if (this[qB]) this[qB].defaultPort = I
}
get protocol() {
return pS1(this[qB].protocol, () => (this.isSecureEndpoint() ? 'https:' : 'http:'))
}
set protocol(I) {
if (this[qB]) this[qB].protocol = I
}
}
aS1.Agent = nS1
})
var oS1 = _((sS1) => {
Object.defineProperty(sS1, '__esModule', { value: !0 })
var at2 = X0()
function Ab(...I) {
at2.logger.log('[https-proxy-agent:parse-proxy-response]', ...I)
}
function rt2(I) {
return new Promise((G, Z) => {
let d = 0,
W = []
function w() {
let X = I.read()
if (X) A(X)
else I.once('readable', w)
}
function B() {
I.removeListener('end', C), I.removeListener('error', V), I.removeListener('readable', w)
}
function C() {
B(), Ab('onend'), Z(new Error('Proxy connection ended before receiving CONNECT response'))
}
function V(X) {
B(), Ab('onerror %o', X), Z(X)
}
function A(X) {
W.push(X), (d += X.length)
let Y = Buffer.concat(W, d),
H = Y.indexOf(`\r
\r
`)
if (H === -1) {
Ab('have not received end of HTTP headers yet...'), w()
return
}
let J = Y.slice(0, H).toString('ascii').split(`\r
`),
K = J.shift()
if (!K) return I.destroy(), Z(new Error('No header received from proxy CONNECT response'))
let g = K.split(' '),
z = +g[1],
f = g.slice(2).join(' '),
S = {}
for (let $ of J) {
if (!$) continue
let L = $.indexOf(':')
if (L === -1)
return I.destroy(), Z(new Error(`Invalid header from proxy CONNECT response: "${$}"`))
let T = $.slice(0, L).toLowerCase(),
m = $.slice(L + 1).trimStart(),
O = S[T]
if (typeof O === 'string') S[T] = [O, m]
else if (Array.isArray(O)) O.push(m)
else S[T] = m
}
Ab('got proxy server response: %o %o', K, S),
B(),
G({ connect: { statusCode: z, statusText: f, headers: S }, buffered: Y })
}
I.on('error', V), I.on('end', C), w()
})
}
sS1.parseProxyResponse = rt2
})
var GL1 = _((IL1) => {
var { _nullishCoalesce: ot2, _optionalChain: et2 } = X0()
Object.defineProperty(IL1, '__esModule', { value: !0 })
var mv = A1('net'),
eS1 = A1('tls'),
tt2 = A1('url'),
I14 = X0(),
G14 = rS1(),
Z14 = oS1()
function bv(...I) {
I14.logger.log('[https-proxy-agent]', ...I)
}
class A21 extends G14.Agent {
static __initStatic() {
this.protocols = ['http', 'https']
}
constructor(I, G) {
super(G)
;(this.options = {}),
(this.proxy = typeof I === 'string' ? new tt2.URL(I) : I),
(this.proxyHeaders = ot2(et2([G, 'optionalAccess', (W) => W.headers]), () => ({}))),
bv('Creating new HttpsProxyAgent instance: %o', this.proxy.href)
let Z = (this.proxy.hostname || this.proxy.host).replace(/^\[|\]$/g, ''),
d = this.proxy.port
? parseInt(this.proxy.port, 10)
: this.proxy.protocol === 'https:'
? 443
: 80
this.connectOpts = {
ALPNProtocols: ['http/1.1'],
...(G ? tS1(G, 'headers') : null),
host: Z,
port: d,
}
}
async connect(I, G) {
let { proxy: Z } = this
if (!G.host) throw new TypeError('No "host" provided')
let d
if (Z.protocol === 'https:') {
bv('Creating `tls.Socket`: %o', this.connectOpts)
let Y = this.connectOpts.servername || this.connectOpts.host
d = eS1.connect({ ...this.connectOpts, servername: Y && mv.isIP(Y) ? void 0 : Y })
} else bv('Creating `net.Socket`: %o', this.connectOpts), (d = mv.connect(this.connectOpts))
let W =
typeof this.proxyHeaders === 'function' ? this.proxyHeaders() : { ...this.proxyHeaders },
w = mv.isIPv6(G.host) ? `[${G.host}]` : G.host,
B = `CONNECT ${w}:${G.port} HTTP/1.1\r
`
if (Z.username || Z.password) {
let Y = `${decodeURIComponent(Z.username)}:${decodeURIComponent(Z.password)}`
W['Proxy-Authorization'] = `Basic ${Buffer.from(Y).toString('base64')}`
}
if (((W.Host = `${w}:${G.port}`), !W['Proxy-Connection']))
W['Proxy-Connection'] = this.keepAlive ? 'Keep-Alive' : 'close'
for (let Y of Object.keys(W))
B += `${Y}: ${W[Y]}\r
`
let C = Z14.parseProxyResponse(d)
d.write(`${B}\r
`)
let { connect: V, buffered: A } = await C
if ((I.emit('proxyConnect', V), this.emit('proxyConnect', V, I), V.statusCode === 200)) {
if ((I.once('socket', d14), G.secureEndpoint)) {
bv('Upgrading socket connection to TLS')
let Y = G.servername || G.host
return eS1.connect({
...tS1(G, 'host', 'path', 'port'),
socket: d,
servername: mv.isIP(Y) ? void 0 : Y,
})
}
return d
}
d.destroy()
let X = new mv.Socket({ writable: !1 })
return (
(X.readable = !0),
I.once('socket', (Y) => {
bv('Replaying proxy buffer for failed request'), Y.push(A), Y.push(null)
}),
X
)
}
}
A21.__initStatic()
function d14(I) {
I.resume()
}
function tS1(I, ...G) {
let Z = {},
d
for (d in I) if (!G.includes(d)) Z[d] = I[d]
return Z
}
IL1.HttpsProxyAgent = A21
})
var Y21 = _((WL1) => {
var { _nullishCoalesce: X21 } = X0()
Object.defineProperty(WL1, '__esModule', { value: !0 })
var w14 = A1('http'),
B14 = A1('https'),
C14 = A1('stream'),
dL1 = A1('url'),
V14 = A1('zlib'),
ZL1 = Y4(),
A14 = X0(),
X14 = GL1(),
Y14 = 32768
function _14(I) {
return new C14.Readable({
read() {
this.push(I), this.push(null)
},
})
}
function D14(I) {
let G
try {
G = new dL1.URL(I.url)
} catch (V) {
return (
A14.consoleSandbox(() => {
console.warn(
'[@sentry/node]: Invalid dsn or tunnel option, will not send any events. The tunnel option must be a full URL when used.',
)
}),
ZL1.createTransport(I, () => Promise.resolve({}))
)
}
let Z = G.protocol === 'https:',
d = H14(G, I.proxy || (Z ? process.env.https_proxy : void 0) || process.env.http_proxy),
W = Z ? B14 : w14,
w = I.keepAlive === void 0 ? !1 : I.keepAlive,
B = d
? new X14.HttpsProxyAgent(d)
: new W.Agent({ keepAlive: w, maxSockets: 30, timeout: 2000 }),
C = F14(
I,
X21(I.httpModule, () => W),
B,
)
return ZL1.createTransport(I, C)
}
function H14(I, G) {
let { no_proxy: Z } = process.env
if (Z && Z.split(',').some((W) => I.host.endsWith(W) || I.hostname.endsWith(W))) return
else return G
}
function F14(I, G, Z) {
let { hostname: d, pathname: W, port: w, protocol: B, search: C } = new dL1.URL(I.url)
return function V(A) {
return new Promise((X, Y) => {
let H = _14(A.body),
J = { ...I.headers }
if (A.body.length > Y14) (J['content-encoding'] = 'gzip'), (H = H.pipe(V14.createGzip()))
let K = G.request(
{
method: 'POST',
agent: Z,
headers: J,
hostname: d,
path: `${W}${C}`,
port: w,
protocol: B,
ca: I.caCerts,
},
(g) => {
g.on('data', () => {}), g.on('end', () => {}), g.setEncoding('utf8')
let z = X21(g.headers['retry-after'], () => null),
f = X21(g.headers['x-sentry-rate-limits'], () => null)
X({
statusCode: g.statusCode,
headers: { 'retry-after': z, 'x-sentry-rate-limits': Array.isArray(f) ? f[0] : f },
})
},
)
K.on('error', Y), H.pipe(K)
})
}
}
WL1.makeNodeTransport = D14
})
var nF = _((wL1) => {
Object.defineProperty(wL1, '__esModule', { value: !0 })
var K14 = X0(),
g14 = K14.parseSemver(process.versions.node)
wL1.NODE_VERSION = g14
})
var AL1 = _((VL1) => {
var { _optionalChain: z14 } = X0()
Object.defineProperty(VL1, '__esModule', { value: !0 })
var BL1 = A1('domain'),
aF = Y4()
function CL1() {
return BL1.active
}
function Q14() {
let I = CL1()
if (!I) return
return aF.ensureHubOnCarrier(I), aF.getHubFromCarrier(I)
}
function q14(I) {
let G = {}
return aF.ensureHubOnCarrier(G, I), aF.getHubFromCarrier(G)
}
function U14(I, G) {
let Z = CL1()
if (Z && z14([G, 'optionalAccess', (B) => B.reuseExisting])) return I()
let d = BL1.create(),
W = Z ? aF.getHubFromCarrier(Z) : void 0,
w = q14(W)
return (
aF.setHubOnCarrier(d, w),
d.bind(() => {
return I()
})()
)
}
function f14() {
aF.setAsyncContextStrategy({ getCurrentHub: Q14, runWithAsyncContext: U14 })
}
VL1.setDomainAsyncContextStrategy = f14
})
var YL1 = _((XL1) => {
var { _optionalChain: E14 } = X0()
Object.defineProperty(XL1, '__esModule', { value: !0 })
var _21 = Y4(),
v14 = A1('async_hooks'),
Xb
function M14() {
if (!Xb) Xb = new v14.AsyncLocalStorage()
function I() {
return Xb.getStore()
}
function G(d) {
let W = {}
return _21.ensureHubOnCarrier(W, d), _21.getHubFromCarrier(W)
}
function Z(d, W) {
let w = I()
if (w && E14([W, 'optionalAccess', (C) => C.reuseExisting])) return d()
let B = G(w)
return Xb.run(B, () => {
return d()
})
}
_21.setAsyncContextStrategy({ getCurrentHub: I, runWithAsyncContext: Z })
}
XL1.setHooksAsyncContextStrategy = M14
})
var DL1 = _((_L1) => {
Object.defineProperty(_L1, '__esModule', { value: !0 })
var L14 = nF(),
$14 = AL1(),
y14 = YL1()
function P14() {
if (L14.NODE_VERSION.major >= 14) y14.setHooksAsyncContextStrategy()
else $14.setDomainAsyncContextStrategy()
}
_L1.setNodeAsyncContextStrategy = P14
})
var _b = _((KL1) => {
Object.defineProperty(KL1, '__esModule', { value: !0 })
var u14 = A1('util'),
Yb = Y4(),
HL1 = X0(),
FL1 = 'Console',
T14 = () => {
return {
name: FL1,
setupOnce() {},
setup(I) {
HL1.addConsoleInstrumentationHandler(({ args: G, level: Z }) => {
if (Yb.getClient() !== I) return
Yb.addBreadcrumb(
{
category: 'console',
level: HL1.severityLevelFromString(Z),
message: u14.format.apply(void 0, G),
},
{ input: [...G], level: Z },
)
})
},
}
},
JL1 = Yb.defineIntegration(T14),
m14 = Yb.convertIntegrationFnToClass(FL1, JL1)
KL1.Console = m14
KL1.consoleIntegration = JL1
})
var Db = _((vL1) => {
var { _optionalChain: rF } = X0()
Object.defineProperty(vL1, '__esModule', { value: !0 })
var j14 = A1('child_process'),
NL1 = A1('fs'),
Gd = A1('os'),
k14 = A1('path'),
zL1 = A1('util'),
QL1 = Y4(),
qL1 = zL1.promisify(NL1.readFile),
UL1 = zL1.promisify(NL1.readdir),
fL1 = 'Context',
h14 = (I = {}) => {
let G,
Z = { app: !0, os: !0, device: !0, culture: !0, cloudResource: !0, ...I }
async function d(w) {
if (G === void 0) G = W()
let B = c14(await G)
return (
(w.contexts = {
...w.contexts,
app: {
...B.app,
...rF([w, 'access', (C) => C.contexts, 'optionalAccess', (C) => C.app]),
},
os: { ...B.os, ...rF([w, 'access', (C) => C.contexts, 'optionalAccess', (C) => C.os]) },
device: {
...B.device,
...rF([w, 'access', (C) => C.contexts, 'optionalAccess', (C) => C.device]),
},
culture: {
...B.culture,
...rF([w, 'access', (C) => C.contexts, 'optionalAccess', (C) => C.culture]),
},
cloud_resource: {
...B.cloud_resource,
...rF([w, 'access', (C) => C.contexts, 'optionalAccess', (C) => C.cloud_resource]),
},
}),
w
)
}
async function W() {
let w = {}
if (Z.os) w.os = await p14()
if (Z.app) w.app = n14()
if (Z.device) w.device = EL1(Z.device)
if (Z.culture) {
let B = i14()
if (B) w.culture = B
}
if (Z.cloudResource) w.cloud_resource = t14()
return w
}
return {
name: fL1,
setupOnce() {},
processEvent(w) {
return d(w)
},
}
},
RL1 = QL1.defineIntegration(h14),
x14 = QL1.convertIntegrationFnToClass(fL1, RL1)
function c14(I) {
if (rF([I, 'optionalAccess', (G) => G.app, 'optionalAccess', (G) => G.app_memory]))
I.app.app_memory = process.memoryUsage().rss
if (rF([I, 'optionalAccess', (G) => G.device, 'optionalAccess', (G) => G.free_memory]))
I.device.free_memory = Gd.freemem()
return I
}
async function p14() {
let I = Gd.platform()
switch (I) {
case 'darwin':
return o14()
case 'linux':
return e14()
default:
return { name: a14[I] || I, version: Gd.release() }
}
}
function i14() {
try {
if (typeof process.versions.icu !== 'string') return
let I = new Date(900000000)
if (new Intl.DateTimeFormat('es', { month: 'long' }).format(I) === 'enero') {
let Z = Intl.DateTimeFormat().resolvedOptions()
return { locale: Z.locale, timezone: Z.timeZone }
}
} catch (I) {}
return
}
function n14() {
let I = process.memoryUsage().rss
return {
app_start_time: new Date(Date.now() - process.uptime() * 1000).toISOString(),
app_memory: I,
}
}
function EL1(I) {
let G = {},
Z
try {
Z = Gd.uptime && Gd.uptime()
} catch (d) {}
if (typeof Z === 'number') G.boot_time = new Date(Date.now() - Z * 1000).toISOString()
if (((G.arch = Gd.arch()), I === !0 || I.memory))
(G.memory_size = Gd.totalmem()), (G.free_memory = Gd.freemem())
if (I === !0 || I.cpu) {
let d = Gd.cpus()
if (d && d.length) {
let W = d[0]
;(G.processor_count = d.length),
(G.cpu_description = W.model),
(G.processor_frequency = W.speed)
}
}
return G
}
var a14 = {
aix: 'IBM AIX',
freebsd: 'FreeBSD',
openbsd: 'OpenBSD',
sunos: 'SunOS',
win32: 'Windows',
},
r14 = [
{ name: 'fedora-release', distros: ['Fedora'] },
{ name: 'redhat-release', distros: ['Red Hat Linux', 'Centos'] },
{ name: 'redhat_version', distros: ['Red Hat Linux'] },
{ name: 'SuSE-release', distros: ['SUSE Linux'] },
{ name: 'lsb-release', distros: ['Ubuntu Linux', 'Arch Linux'] },
{ name: 'debian_version', distros: ['Debian'] },
{ name: 'debian_release', distros: ['Debian'] },
{ name: 'arch-release', distros: ['Arch Linux'] },
{ name: 'gentoo-release', distros: ['Gentoo Linux'] },
{ name: 'novell-release', distros: ['SUSE Linux'] },
{ name: 'alpine-release', distros: ['Alpine Linux'] },
],
s14 = {
alpine: (I) => I,
arch: (I) => UB(/distrib_release=(.*)/, I),
centos: (I) => UB(/release ([^ ]+)/, I),
debian: (I) => I,
fedora: (I) => UB(/release (..)/, I),
mint: (I) => UB(/distrib_release=(.*)/, I),
red: (I) => UB(/release ([^ ]+)/, I),
suse: (I) => UB(/VERSION = (.*)\n/, I),
ubuntu: (I) => UB(/distrib_release=(.*)/, I),
}
function UB(I, G) {
let Z = I.exec(G)
return Z ? Z[1] : void 0
}
async function o14() {
let I = {
kernel_version: Gd.release(),
name: 'Mac OS X',
version: `10.${Number(Gd.release().split('.')[0]) - 4}`,
}
try {
let G = await new Promise((Z, d) => {
j14.execFile('/usr/bin/sw_vers', (W, w) => {
if (W) {
d(W)
return
}
Z(w)
})
})
;(I.name = UB(/^ProductName:\s+(.*)$/m, G)),
(I.version = UB(/^ProductVersion:\s+(.*)$/m, G)),
(I.build = UB(/^BuildVersion:\s+(.*)$/m, G))
} catch (G) {}
return I
}
function gL1(I) {
return I.split(' ')[0].toLowerCase()
}
async function e14() {
let I = { kernel_version: Gd.release(), name: 'Linux' }
try {
let G = await UL1('/etc'),
Z = r14.find((C) => G.includes(C.name))
if (!Z) return I
let d = k14.join('/etc', Z.name),
W = (await qL1(d, { encoding: 'utf-8' })).toLowerCase(),
{ distros: w } = Z
I.name = w.find((C) => W.indexOf(gL1(C)) >= 0) || w[0]
let B = gL1(I.name)
I.version = s14[B](W)
} catch (G) {}
return I
}
function t14() {
if (process.env.VERCEL)
return { 'cloud.provider': 'vercel', 'cloud.region': process.env.VERCEL_REGION }
else if (process.env.AWS_REGION)
return {
'cloud.provider': 'aws',
'cloud.region': process.env.AWS_REGION,
'cloud.platform': process.env.AWS_EXECUTION_ENV,
}
else if (process.env.GCP_PROJECT) return { 'cloud.provider': 'gcp' }
else if (process.env.ALIYUN_REGION_ID)
return { 'cloud.provider': 'alibaba_cloud', 'cloud.region': process.env.ALIYUN_REGION_ID }
else if (process.env.WEBSITE_SITE_NAME && process.env.REGION_NAME)
return { 'cloud.provider': 'azure', 'cloud.region': process.env.REGION_NAME }
else if (process.env.IBM_CLOUD_REGION)
return { 'cloud.provider': 'ibm_cloud', 'cloud.region': process.env.IBM_CLOUD_REGION }
else if (process.env.TENCENTCLOUD_REGION)
return {
'cloud.provider': 'tencent_cloud',
'cloud.region': process.env.TENCENTCLOUD_REGION,
'cloud.account.id': process.env.TENCENTCLOUD_APPID,
'cloud.availability_zone': process.env.TENCENTCLOUD_ZONE,
}
else if (process.env.NETLIFY) return { 'cloud.provider': 'netlify' }
else if (process.env.FLY_REGION)
return { 'cloud.provider': 'fly.io', 'cloud.region': process.env.FLY_REGION }
else if (process.env.DYNO) return { 'cloud.provider': 'heroku' }
else return
}
vL1.Context = x14
vL1.getDeviceContext = EL1
vL1.nodeContextIntegration = RL1
vL1.readDirAsync = UL1
vL1.readFileAsync = qL1
})
var Fb = _((yL1) => {
var { _optionalChain: D21 } = X0()
Object.defineProperty(yL1, '__esModule', { value: !0 })
var w04 = A1('fs'),
ML1 = Y4(),
SL1 = X0(),
Hb = new SL1.LRUMap(100),
B04 = 7,
LL1 = 'ContextLines'
function C04(I) {
return new Promise((G, Z) => {
w04.readFile(I, 'utf8', (d, W) => {
if (d) Z(d)
else G(W)
})
})
}
var V04 = (I = {}) => {
let G = I.frameContextLines !== void 0 ? I.frameContextLines : B04
return {
name: LL1,
setupOnce() {},
processEvent(Z) {
return X04(Z, G)
},
}
},
$L1 = ML1.defineIntegration(V04),
A04 = ML1.convertIntegrationFnToClass(LL1, $L1)
async function X04(I, G) {
let Z = {},
d = []
if (G > 0 && D21([I, 'access', (W) => W.exception, 'optionalAccess', (W) => W.values]))
for (let W of I.exception.values) {
if (!D21([W, 'access', (w) => w.stacktrace, 'optionalAccess', (w) => w.frames])) continue
for (let w = W.stacktrace.frames.length - 1; w >= 0; w--) {
let B = W.stacktrace.frames[w]
if (B.filename && !Z[B.filename] && !Hb.get(B.filename))
d.push(_04(B.filename)), (Z[B.filename] = 1)
}
}
if (d.length > 0) await Promise.all(d)
if (G > 0 && D21([I, 'access', (W) => W.exception, 'optionalAccess', (W) => W.values])) {
for (let W of I.exception.values)
if (W.stacktrace && W.stacktrace.frames) await Y04(W.stacktrace.frames, G)
}
return I
}
function Y04(I, G) {
for (let Z of I)
if (Z.filename && Z.context_line === void 0) {
let d = Hb.get(Z.filename)
if (d)
try {
SL1.addContextToFrame(d, Z, G)
} catch (W) {}
}
}
async function _04(I) {
let G = Hb.get(I)
if (G === null) return null
if (G !== void 0) return G
let Z = null
try {
Z = (await C04(I)).split(`
`)
} catch (d) {}
return Hb.set(I, Z), Z
}
yL1.ContextLines = A04
yL1.contextLinesIntegration = $L1
})
var lv = _((PL1) => {
Object.defineProperty(PL1, '__esModule', { value: !0 })
var F04 = typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__
PL1.DEBUG_BUILD = F04
})
var mL1 = _((TL1) => {
var { _optionalChain: fB } = X0()
Object.defineProperty(TL1, '__esModule', { value: !0 })
var H21 = A1('url'),
K04 = nF()
function g04(I) {
let { protocol: G, hostname: Z, port: d } = uL1(I),
W = I.path ? I.path : '/'
return `${G}//${Z}${d}${W}`
}
function OL1(I) {
let { protocol: G, hostname: Z, port: d } = uL1(I),
W = I.pathname || '/',
w = I.auth ? N04(I.auth) : ''
return `${G}//${w}${Z}${d}${W}`
}
function N04(I) {
let [G, Z] = I.split(':')
return `${G ? '[Filtered]' : ''}:${Z ? '[Filtered]' : ''}@`
}
function z04(I, G, Z) {
if (!I) return I
let [d, W] = I.split(' ')
if (G.host && !G.protocol)
(G.protocol = fB([Z, 'optionalAccess', (w) => w.agent, 'optionalAccess', (w) => w.protocol])),
(W = OL1(G))
if (fB([W, 'optionalAccess', (w) => w.startsWith, 'call', (w) => w('///')])) W = W.slice(2)
return `${d} ${W}`
}
function F21(I) {
let G = {
protocol: I.protocol,
hostname:
typeof I.hostname === 'string' && I.hostname.startsWith('[')
? I.hostname.slice(1, -1)
: I.hostname,
hash: I.hash,
search: I.search,
pathname: I.pathname,
path: `${I.pathname || ''}${I.search || ''}`,
href: I.href,
}
if (I.port !== '') G.port = Number(I.port)
if (I.username || I.password) G.auth = `${I.username}:${I.password}`
return G
}
function Q04(I, G) {
let Z, d
if (typeof G[G.length - 1] === 'function') Z = G.pop()
if (typeof G[0] === 'string') d = F21(new H21.URL(G[0]))
else if (G[0] instanceof H21.URL) d = F21(G[0])
else {
d = G[0]
try {
let W = new H21.URL(d.path || '', `${d.protocol || 'http:'}//${d.hostname}`)
d = { pathname: W.pathname, search: W.search, hash: W.hash, ...d }
} catch (W) {}
}
if (G.length === 2) d = { ...d, ...G[1] }
if (d.protocol === void 0)
if (K04.NODE_VERSION.major > 8)
d.protocol =
fB([
fB([I, 'optionalAccess', (W) => W.globalAgent]),
'optionalAccess',
(W) => W.protocol,
]) ||
fB([d.agent, 'optionalAccess', (W) => W.protocol]) ||
fB([d._defaultAgent, 'optionalAccess', (W) => W.protocol])
else
d.protocol =
fB([d.agent, 'optionalAccess', (W) => W.protocol]) ||
fB([d._defaultAgent, 'optionalAccess', (W) => W.protocol]) ||
fB([fB([I, 'optionalAccess', (W) => W.globalAgent]), 'optionalAccess', (W) => W.protocol])
if (Z) return [d, Z]
else return [d]
}
function uL1(I) {
let G = I.protocol || '',
Z = I.hostname || I.host || '',
d = !I.port || I.port === 80 || I.port === 443 || /^(.*):(\d+)$/.test(Z) ? '' : `:${I.port}`
return { protocol: G, hostname: Z, port: d }
}
TL1.cleanSpanDescription = z04
TL1.extractRawUrl = g04
TL1.extractUrl = OL1
TL1.normalizeRequestArgs = Q04
TL1.urlToOptions = F21
})
var Jb = _((kL1) => {
var { _optionalChain: Zz } = X0()
Object.defineProperty(kL1, '__esModule', { value: !0 })
var E7 = Y4(),
aG = X0(),
J21 = lv(),
v04 = nF(),
jv = mL1(),
M04 = (I = {}) => {
let { breadcrumbs: G, tracing: Z, shouldCreateSpanForRequest: d } = I,
W = {
breadcrumbs: G,
tracing:
Z === !1
? !1
: aG.dropUndefinedKeys({
enableIfHasTracingEnabled: Z === !0 ? void 0 : !0,
shouldCreateSpanForRequest: d,
}),
}
return new sF(W)
},
S04 = E7.defineIntegration(M04)
class sF {
static __initStatic() {
this.id = 'Http'
}
__init() {
this.name = sF.id
}
constructor(I = {}) {
sF.prototype.__init.call(this),
(this._breadcrumbs = typeof I.breadcrumbs === 'undefined' ? !0 : I.breadcrumbs),
(this._tracing = !I.tracing ? void 0 : I.tracing === !0 ? {} : I.tracing)
}
setupOnce(I, G) {
let Z = Zz([
G,
'call',
(V) => V(),
'access',
(V) => V.getClient,
'call',
(V) => V(),
'optionalAccess',
(V) => V.getOptions,
'call',
(V) => V(),
]),
d = lL1(this._tracing, Z)
if (!this._breadcrumbs && !d) return
if (Z && Z.instrumenter !== 'sentry') {
J21.DEBUG_BUILD &&
aG.logger.log('HTTP Integration is skipped because of instrumenter configuration.')
return
}
let W = jL1(d, this._tracing, Z),
w =
Zz([Z, 'optionalAccess', (V) => V.tracePropagationTargets]) ||
Zz([
this,
'access',
(V) => V._tracing,
'optionalAccess',
(V) => V.tracePropagationTargets,
]),
B = A1('http'),
C = bL1(B, this._breadcrumbs, W, w)
if ((aG.fill(B, 'get', C), aG.fill(B, 'request', C), v04.NODE_VERSION.major > 8)) {
let V = A1('https'),
A = bL1(V, this._breadcrumbs, W, w)
aG.fill(V, 'get', A), aG.fill(V, 'request', A)
}
}
}
sF.__initStatic()
function bL1(I, G, Z, d) {
let W = new aG.LRUMap(100),
w = new aG.LRUMap(100),
B = (A) => {
if (Z === void 0) return !0
let X = W.get(A)
if (X !== void 0) return X
let Y = Z(A)
return W.set(A, Y), Y
},
C = (A) => {
if (d === void 0) return !0
let X = w.get(A)
if (X !== void 0) return X
let Y = aG.stringMatchesSomePattern(A, d)
return w.set(A, Y), Y
}
function V(A, X, Y, H) {
if (!E7.getCurrentHub().getIntegration(sF)) return
E7.addBreadcrumb(
{ category: 'http', data: { status_code: H && H.statusCode, ...X }, type: 'http' },
{ event: A, request: Y, response: H },
)
}
return function A(X) {
return function Y(...H) {
let J = jv.normalizeRequestArgs(I, H),
K = J[0],
g = jv.extractRawUrl(K),
z = jv.extractUrl(K),
f = E7.getClient()
if (E7.isSentryRequestUrl(z, f)) return X.apply(I, J)
let S = E7.getCurrentScope(),
$ = E7.getIsolationScope(),
L = E7.getActiveSpan(),
T = $04(z, K),
m = B(g)
? Zz([
L,
'optionalAccess',
(O) => O.startChild,
'call',
(O) =>
O({
op: 'http.client',
origin: 'auto.http.node.http',
description: `${T['http.method']} ${T.url}`,
data: T,
}),
])
: void 0
if (f && C(g)) {
let {
traceId: O,
spanId: w1,
sampled: b,
dsc: x1,
} = { ...$.getPropagationContext(), ...S.getPropagationContext() },
r1 = m ? E7.spanToTraceHeader(m) : aG.generateSentryTraceHeader(O, w1, b),
$1 = aG.dynamicSamplingContextToSentryBaggageHeader(
x1 ||
(m
? E7.getDynamicSamplingContextFromSpan(m)
: E7.getDynamicSamplingContextFromClient(O, f, S)),
)
L04(K, z, r1, $1)
} else
J21.DEBUG_BUILD &&
aG.logger.log(
`[Tracing] Not adding sentry-trace header to outgoing request (${z}) due to mismatching tracePropagationTargets option.`,
)
return X.apply(I, J)
.once('response', function (O) {
let w1 = this
if (G) V('response', T, w1, O)
if (m) {
if (O.statusCode) E7.setHttpStatus(m, O.statusCode)
m.updateName(
jv.cleanSpanDescription(E7.spanToJSON(m).description || '', K, w1) || '',
),
m.end()
}
})
.once('error', function () {
let O = this
if (G) V('error', T, O)
if (m)
E7.setHttpStatus(m, 500),
m.updateName(
jv.cleanSpanDescription(E7.spanToJSON(m).description || '', K, O) || '',
),
m.end()
})
}
}
}
function L04(I, G, Z, d) {
if ((I.headers || {})['sentry-trace']) return
J21.DEBUG_BUILD &&
aG.logger.log(`[Tracing] Adding sentry-trace header ${Z} to outgoing request to "${G}": `),
(I.headers = {
...I.headers,
'sentry-trace': Z,
...(d && d.length > 0 && { baggage: y04(I, d) }),
})
}
function $04(I, G) {
let Z = G.method || 'GET',
d = { url: I, 'http.method': Z }
if (G.hash) d['http.fragment'] = G.hash.substring(1)
if (G.search) d['http.query'] = G.search.substring(1)
return d
}
function y04(I, G) {
if (!I.headers || !I.headers.baggage) return G
else if (!G) return I.headers.baggage
else if (Array.isArray(I.headers.baggage)) return [...I.headers.baggage, G]
return [I.headers.baggage, G]
}
function lL1(I, G) {
return I === void 0 ? !1 : I.enableIfHasTracingEnabled ? E7.hasTracingEnabled(G) : !0
}
function jL1(I, G, Z) {
return I
? Zz([G, 'optionalAccess', (W) => W.shouldCreateSpanForRequest]) ||
Zz([Z, 'optionalAccess', (W) => W.shouldCreateSpanForRequest])
: () => !1
}
kL1.Http = sF
kL1._getShouldCreateSpanForRequest = jL1
kL1._shouldCreateSpans = lL1
kL1.httpIntegration = S04
})
var cL1 = _((xL1) => {
Object.defineProperty(xL1, '__esModule', { value: !0 })
function m04(I, G, Z) {
let d = 0,
W = 5,
w = 0
return (
setInterval(() => {
if (w === 0) {
if (d > I) {
if (((W *= 2), Z(W), W > 86400)) W = 86400
w = W
}
} else if (((w -= 1), w === 0)) G()
d = 0
}, 1000).unref(),
() => {
d += 1
}
)
}
function K21(I) {
return I !== void 0 && (I.length === 0 || I === '?' || I === '<anonymous>')
}
function b04(I, G) {
return I === G || (K21(I) && K21(G))
}
function hL1(I) {
if (I === void 0) return
return I.slice(-10).reduce((G, Z) => `${G},${Z.function},${Z.lineno},${Z.colno}`, '')
}
function l04(I, G) {
if (G === void 0) return
return hL1(I(G, 1))
}
xL1.createRateLimiter = m04
xL1.functionNamesMatch = b04
xL1.hashFrames = hL1
xL1.hashFromStack = l04
xL1.isAnonymous = K21
})
var rL1 = _((aL1) => {
var { _optionalChain: k3 } = X0()
Object.defineProperty(aL1, '__esModule', { value: !0 })
var g21 = Y4(),
Kb = X0(),
p04 = nF(),
gb = cL1()
function N21(I) {
let G = [],
Z = !1
function d(B) {
if (((G = []), Z)) return
;(Z = !0), I(B)
}
G.push(d)
function W(B) {
G.push(B)
}
function w(B) {
let C = G.pop() || d
try {
C(B)
} catch (V) {
d(B)
}
}
return { add: W, next: w }
}
class pL1 {
constructor() {
let { Session: I } = A1('inspector')
this._session = new I()
}
configureAndConnect(I, G) {
this._session.connect(),
this._session.on('Debugger.paused', (Z) => {
I(Z, () => {
this._session.post('Debugger.resume')
})
}),
this._session.post('Debugger.enable'),
this._session.post('Debugger.setPauseOnExceptions', { state: G ? 'all' : 'uncaught' })
}
setPauseOnExceptions(I) {
this._session.post('Debugger.setPauseOnExceptions', { state: I ? 'all' : 'uncaught' })
}
getLocalVariables(I, G) {
this._getProperties(I, (Z) => {
let { add: d, next: W } = N21(G)
for (let w of Z)
if (
k3([w, 'optionalAccess', (B) => B.value, 'optionalAccess', (B) => B.objectId]) &&
k3([w, 'optionalAccess', (B) => B.value, 'access', (B) => B.className]) === 'Array'
) {
let B = w.value.objectId
d((C) => this._unrollArray(B, w.name, C, W))
} else if (
k3([w, 'optionalAccess', (B) => B.value, 'optionalAccess', (B) => B.objectId]) &&
k3([w, 'optionalAccess', (B) => B.value, 'optionalAccess', (B) => B.className]) ===
'Object'
) {
let B = w.value.objectId
d((C) => this._unrollObject(B, w.name, C, W))
} else if (
k3([w, 'optionalAccess', (B) => B.value, 'optionalAccess', (B) => B.value]) != null ||
k3([w, 'optionalAccess', (B) => B.value, 'optionalAccess', (B) => B.description]) !=
null
)
d((B) => this._unrollOther(w, B, W))
W({})
})
}
_getProperties(I, G) {
this._session.post('Runtime.getProperties', { objectId: I, ownProperties: !0 }, (Z, d) => {
if (Z) G([])
else G(d.result)
})
}
_unrollArray(I, G, Z, d) {
this._getProperties(I, (W) => {
;(Z[G] = W.filter((w) => w.name !== 'length' && !isNaN(parseInt(w.name, 10)))
.sort((w, B) => parseInt(w.name, 10) - parseInt(B.name, 10))
.map((w) => k3([w, 'optionalAccess', (B) => B.value, 'optionalAccess', (B) => B.value]))),
d(Z)
})
}
_unrollObject(I, G, Z, d) {
this._getProperties(I, (W) => {
;(Z[G] = W.map((w) => [
w.name,
k3([w, 'optionalAccess', (B) => B.value, 'optionalAccess', (B) => B.value]),
]).reduce((w, [B, C]) => {
return (w[B] = C), w
}, {})),
d(Z)
})
}
_unrollOther(I, G, Z) {
if (k3([I, 'optionalAccess', (d) => d.value, 'optionalAccess', (d) => d.value]) != null)
G[I.name] = I.value.value
else if (
k3([I, 'optionalAccess', (d) => d.value, 'optionalAccess', (d) => d.description]) != null &&
k3([I, 'optionalAccess', (d) => d.value, 'optionalAccess', (d) => d.type]) !== 'function'
)
G[I.name] = `<${I.value.description}>`
Z(G)
}
}
function i04() {
try {
return new pL1()
} catch (I) {
return
}
}
var iL1 = 'LocalVariables',
n04 = (I = {}, G = i04()) => {
let Z = new Kb.LRUMap(20),
d,
W = !1
function w(V, { params: { reason: A, data: X, callFrames: Y } }, H) {
if (A !== 'exception' && A !== 'promiseRejection') {
H()
return
}
k3([d, 'optionalCall', (z) => z()])
let J = gb.hashFromStack(V, k3([X, 'optionalAccess', (z) => z.description]))
if (J == null) {
H()
return
}
let { add: K, next: g } = N21((z) => {
Z.set(J, z), H()
})
for (let z = 0; z < Math.min(Y.length, 5); z++) {
let { scopeChain: f, functionName: S, this: $ } = Y[z],
L = f.find((m) => m.type === 'local'),
T = $.className === 'global' || !$.className ? S : `${$.className}.${S}`
if (k3([L, 'optionalAccess', (m) => m.object, 'access', (m) => m.objectId]) === void 0)
K((m) => {
;(m[z] = { function: T }), g(m)
})
else {
let m = L.object.objectId
K((O) =>
k3([
G,
'optionalAccess',
(w1) => w1.getLocalVariables,
'call',
(w1) =>
w1(m, (b) => {
;(O[z] = { function: T, vars: b }), g(O)
}),
]),
)
}
}
g([])
}
function B(V) {
let A = gb.hashFrames(
k3([V, 'optionalAccess', (H) => H.stacktrace, 'optionalAccess', (H) => H.frames]),
)
if (A === void 0) return
let X = Z.remove(A)
if (X === void 0) return
let Y = (
k3([V, 'access', (H) => H.stacktrace, 'optionalAccess', (H) => H.frames]) || []
).filter((H) => H.function !== 'new Promise')
for (let H = 0; H < Y.length; H++) {
let J = Y.length - H - 1
if (!Y[J] || !X[H]) break
if (
X[H].vars === void 0 ||
Y[J].in_app === !1 ||
!gb.functionNamesMatch(Y[J].function, X[H].function)
)
continue
Y[J].vars = X[H].vars
}
}
function C(V) {
for (let A of k3([
V,
'optionalAccess',
(X) => X.exception,
'optionalAccess',
(X) => X.values,
]) || [])
B(A)
return V
}
return {
name: iL1,
setupOnce() {
let V = g21.getClient(),
A = k3([V, 'optionalAccess', (X) => X.getOptions, 'call', (X) => X()])
if (G && k3([A, 'optionalAccess', (X) => X.includeLocalVariables])) {
if (p04.NODE_VERSION.major < 18) {
Kb.logger.log('The `LocalVariables` integration is only supported on Node >= v18.')
return
}
let Y = I.captureAllExceptions !== !1
if ((G.configureAndConnect((H, J) => w(A.stackParser, H, J), Y), Y)) {
let H = I.maxExceptionsPerSecond || 50
d = gb.createRateLimiter(
H,
() => {
Kb.logger.log('Local variables rate-limit lifted.'),
k3([G, 'optionalAccess', (J) => J.setPauseOnExceptions, 'call', (J) => J(!0)])
},
(J) => {
Kb.logger.log(
`Local variables rate-limit exceeded. Disabling capturing of caught exceptions for ${J} seconds.`,
),
k3([G, 'optionalAccess', (K) => K.setPauseOnExceptions, 'call', (K) => K(!1)])
},
)
}
W = !0
}
},
processEvent(V) {
if (W) return C(V)
return V
},
_getCachedFramesCount() {
return Z.size
},
_getFirstCachedFrame() {
return Z.values()[0]
},
}
},
nL1 = g21.defineIntegration(n04),
a04 = g21.convertIntegrationFnToClass(iL1, nL1)
aL1.LocalVariablesSync = a04
aL1.createCallbackList = N21
aL1.localVariablesSyncIntegration = nL1
})
var Nb = _((oL1) => {
Object.defineProperty(oL1, '__esModule', { value: !0 })
var sL1 = rL1(),
e04 = sL1.LocalVariablesSync,
t04 = sL1.localVariablesSyncIntegration
oL1.LocalVariables = e04
oL1.localVariablesIntegration = t04
})
var zb = _((d$1) => {
Object.defineProperty(d$1, '__esModule', { value: !0 })
var eL1 = A1('fs'),
tL1 = A1('path'),
I$1 = Y4(),
z21,
G$1 = 'Modules'
function Z24() {
try {
return A1.cache ? Object.keys(A1.cache) : []
} catch (I) {
return []
}
}
function d24() {
let I = (A1.main && A1.main.paths) || [],
G = Z24(),
Z = {},
d = {}
return (
G.forEach((W) => {
let w = W,
B = () => {
let C = w
if (((w = tL1.dirname(C)), !w || C === w || d[C])) return
if (I.indexOf(w) < 0) return B()
let V = tL1.join(C, 'package.json')
if (((d[C] = !0), !eL1.existsSync(V))) return B()
try {
let A = JSON.parse(eL1.readFileSync(V, 'utf8'))
Z[A.name] = A.version
} catch (A) {}
}
B()
}),
Z
)
}
function W24() {
if (!z21) z21 = d24()
return z21
}
var w24 = () => {
return {
name: G$1,
setupOnce() {},
processEvent(I) {
return (I.modules = { ...I.modules, ...W24() }), I
},
}
},
Z$1 = I$1.defineIntegration(w24),
B24 = I$1.convertIntegrationFnToClass(G$1, Z$1)
d$1.Modules = B24
d$1.modulesIntegration = Z$1
})
var q21 = _((W$1) => {
Object.defineProperty(W$1, '__esModule', { value: !0 })
var A24 = Y4(),
Qb = X0(),
Q21 = lv(),
X24 = 2000
function Y24(I) {
Qb.consoleSandbox(() => {
console.error(I)
})
let G = A24.getClient()
if (G === void 0)
Q21.DEBUG_BUILD &&
Qb.logger.warn('No NodeClient was defined, we are exiting the process now.'),
global.process.exit(1)
let Z = G.getOptions(),
d = (Z && Z.shutdownTimeout && Z.shutdownTimeout > 0 && Z.shutdownTimeout) || X24
G.close(d).then(
(W) => {
if (!W)
Q21.DEBUG_BUILD &&
Qb.logger.warn(
'We reached the timeout for emptying the request buffer, still exiting now!',
)
global.process.exit(1)
},
(W) => {
Q21.DEBUG_BUILD && Qb.logger.error(W)
},
)
}
W$1.logAndExitProcess = Y24
})
var Ub = _((A$1) => {
Object.defineProperty(A$1, '__esModule', { value: !0 })
var qb = Y4(),
D24 = X0(),
H24 = lv(),
w$1 = q21(),
B$1 = 'OnUncaughtException',
F24 = (I = {}) => {
let G = { exitEvenIfOtherHandlersAreRegistered: !0, ...I }
return {
name: B$1,
setupOnce() {},
setup(Z) {
global.process.on('uncaughtException', V$1(Z, G))
},
}
},
C$1 = qb.defineIntegration(F24),
J24 = qb.convertIntegrationFnToClass(B$1, C$1)
function V$1(I, G) {
let d = !1,
W = !1,
w = !1,
B,
C = I.getOptions()
return Object.assign(
(V) => {
let A = w$1.logAndExitProcess
if (G.onFatalError) A = G.onFatalError
else if (C.onFatalError) A = C.onFatalError
let Y =
global.process.listeners('uncaughtException').reduce((J, K) => {
if (
K.name === 'domainUncaughtExceptionClear' ||
(K.tag && K.tag === 'sentry_tracingErrorCallback') ||
K._errorHandler
)
return J
else return J + 1
}, 0) === 0,
H = G.exitEvenIfOtherHandlersAreRegistered || Y
if (!d) {
if (((B = V), (d = !0), qb.getClient() === I))
qb.captureException(V, {
originalException: V,
captureContext: { level: 'fatal' },
mechanism: { handled: !1, type: 'onuncaughtexception' },
})
if (!w && H) (w = !0), A(V)
} else if (H) {
if (w)
H24.DEBUG_BUILD &&
D24.logger.warn(
'uncaught exception after calling fatal error shutdown callback - this is bad! forcing shutdown',
),
w$1.logAndExitProcess(V)
else if (!W)
(W = !0),
setTimeout(() => {
if (!w) (w = !0), A(B, V)
}, 2000)
}
},
{ _errorHandler: !0 },
)
}
A$1.OnUncaughtException = J24
A$1.makeErrorHandler = V$1
A$1.onUncaughtExceptionIntegration = C$1
})
var Rb = _((H$1) => {
Object.defineProperty(H$1, '__esModule', { value: !0 })
var fb = Y4(),
X$1 = X0(),
z24 = q21(),
Y$1 = 'OnUnhandledRejection',
Q24 = (I = {}) => {
let G = I.mode || 'warn'
return {
name: Y$1,
setupOnce() {},
setup(Z) {
global.process.on('unhandledRejection', D$1(Z, { mode: G }))
},
}
},
_$1 = fb.defineIntegration(Q24),
q24 = fb.convertIntegrationFnToClass(Y$1, _$1)
function D$1(I, G) {
return function Z(d, W) {
if (fb.getClient() !== I) return
fb.captureException(d, {
originalException: W,
captureContext: { extra: { unhandledPromiseRejection: !0 } },
mechanism: { handled: !1, type: 'onunhandledrejection' },
}),
U24(d, G)
}
}
function U24(I, G) {
let Z =
'This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). The promise rejected with the reason:'
if (G.mode === 'warn')
X$1.consoleSandbox(() => {
console.warn(Z), console.error(I && I.stack ? I.stack : I)
})
else if (G.mode === 'strict')
X$1.consoleSandbox(() => {
console.warn(Z)
}),
z24.logAndExitProcess(I)
}
H$1.OnUnhandledRejection = q24
H$1.makeUnhandledPromiseHandler = D$1
H$1.onUnhandledRejectionIntegration = _$1
})
var Eb = _((N$1) => {
Object.defineProperty(N$1, '__esModule', { value: !0 })
var v24 = A1('http'),
M24 = A1('url'),
F$1 = Y4(),
dz = X0(),
J$1 = 'Spotlight',
S24 = (I = {}) => {
let G = { sidecarUrl: I.sidecarUrl || 'http://localhost:8969/stream' }
return {
name: J$1,
setupOnce() {},
setup(Z) {
if (typeof process === 'object' && process.env)
dz.logger.warn(
"[Spotlight] It seems you're not in dev mode. Do you really want to have Spotlight enabled?",
)
$24(Z, G)
},
}
},
K$1 = F$1.defineIntegration(S24),
L24 = F$1.convertIntegrationFnToClass(J$1, K$1)
function $24(I, G) {
let Z = y24(G.sidecarUrl)
if (!Z) return
let d = 0
if (typeof I.on !== 'function') {
dz.logger.warn(
'[Spotlight] Cannot connect to spotlight due to missing method on SDK client (`client.on`)',
)
return
}
I.on('beforeEnvelope', (W) => {
if (d > 3) {
dz.logger.warn(
'[Spotlight] Disabled Sentry -> Spotlight integration due to too many failed requests',
)
return
}
let w = dz.serializeEnvelope(W),
C = g$1()(
{
method: 'POST',
path: Z.pathname,
hostname: Z.hostname,
port: Z.port,
headers: { 'Content-Type': 'application/x-sentry-envelope' },
},
(V) => {
V.on('data', () => {}), V.on('end', () => {}), V.setEncoding('utf8')
},
)
C.on('error', () => {
d++, dz.logger.warn('[Spotlight] Failed to send envelope to Spotlight Sidecar')
}),
C.write(w),
C.end()
})
}
function y24(I) {
try {
return new M24.URL(`${I}`)
} catch (G) {
dz.logger.warn(`[Spotlight] Invalid sidecar URL: ${I}`)
return
}
}
function g$1() {
let { request: I } = v24
if (P24(I)) return I.__sentry_original__
return I
}
function P24(I) {
return '__sentry_original__' in I
}
N$1.Spotlight = L24
N$1.getNativeHttpRequest = g$1
N$1.spotlightIntegration = K$1
})
var Mb = _((z$1) => {
var { _optionalChain: vb } = X0()
Object.defineProperty(z$1, '__esModule', { value: !0 })
var q6 = Y4(),
oF = X0(),
m24 = nF()
z$1.ChannelName = void 0
;(function (I) {
I.RequestCreate = 'undici:request:create'
let Z = 'undici:request:headers'
I.RequestEnd = Z
let d = 'undici:request:error'
I.RequestError = d
})(z$1.ChannelName || (z$1.ChannelName = {}))
var b24 = (I) => {
return new oI(I)
},
l24 = q6.defineIntegration(b24)
class oI {
static __initStatic() {
this.id = 'Undici'
}
__init() {
this.name = oI.id
}
__init2() {
this._createSpanUrlMap = new oF.LRUMap(100)
}
__init3() {
this._headersUrlMap = new oF.LRUMap(100)
}
constructor(I = {}) {
oI.prototype.__init.call(this),
oI.prototype.__init2.call(this),
oI.prototype.__init3.call(this),
oI.prototype.__init4.call(this),
oI.prototype.__init5.call(this),
oI.prototype.__init6.call(this),
(this._options = {
breadcrumbs: I.breadcrumbs === void 0 ? !0 : I.breadcrumbs,
tracing: I.tracing,
shouldCreateSpanForRequest: I.shouldCreateSpanForRequest,
})
}
setupOnce(I) {
if (m24.NODE_VERSION.major < 16) return
let G
try {
G = A1('diagnostics_channel')
} catch (Z) {}
if (!G || !G.subscribe) return
G.subscribe(z$1.ChannelName.RequestCreate, this._onRequestCreate),
G.subscribe(z$1.ChannelName.RequestEnd, this._onRequestEnd),
G.subscribe(z$1.ChannelName.RequestError, this._onRequestError)
}
_shouldCreateSpan(I) {
if (
this._options.tracing === !1 ||
(this._options.tracing === void 0 && !q6.hasTracingEnabled())
)
return !1
if (this._options.shouldCreateSpanForRequest === void 0) return !0
let G = this._createSpanUrlMap.get(I)
if (G !== void 0) return G
let Z = this._options.shouldCreateSpanForRequest(I)
return this._createSpanUrlMap.set(I, Z), Z
}
__init4() {
this._onRequestCreate = (I) => {
if (
!vb([
q6.getClient,
'call',
(X) => X(),
'optionalAccess',
(X) => X.getIntegration,
'call',
(X) => X(oI),
])
)
return
let { request: G } = I,
Z = G.origin ? G.origin.toString() + G.path : G.path,
d = q6.getClient()
if (!d) return
if (q6.isSentryRequestUrl(Z, d) || G.__sentry_span__ !== void 0) return
let W = d.getOptions(),
w = q6.getCurrentScope(),
B = q6.getIsolationScope(),
C = q6.getActiveSpan(),
V = this._shouldCreateSpan(Z) ? k24(C, G, Z) : void 0
if (V) G.__sentry_span__ = V
if (
((X) => {
if (W.tracePropagationTargets === void 0) return !0
let Y = this._headersUrlMap.get(X)
if (Y !== void 0) return Y
let H = oF.stringMatchesSomePattern(X, W.tracePropagationTargets)
return this._headersUrlMap.set(X, H), H
})(Z)
) {
let {
traceId: X,
spanId: Y,
sampled: H,
dsc: J,
} = { ...B.getPropagationContext(), ...w.getPropagationContext() },
K = V ? q6.spanToTraceHeader(V) : oF.generateSentryTraceHeader(X, Y, H),
g = oF.dynamicSamplingContextToSentryBaggageHeader(
J ||
(V
? q6.getDynamicSamplingContextFromSpan(V)
: q6.getDynamicSamplingContextFromClient(X, d, w)),
)
j24(G, K, g)
}
}
}
__init5() {
this._onRequestEnd = (I) => {
if (
!vb([
q6.getClient,
'call',
(w) => w(),
'optionalAccess',
(w) => w.getIntegration,
'call',
(w) => w(oI),
])
)
return
let { request: G, response: Z } = I,
d = G.origin ? G.origin.toString() + G.path : G.path
if (q6.isSentryRequestUrl(d, q6.getClient())) return
let W = G.__sentry_span__
if (W) q6.setHttpStatus(W, Z.statusCode), W.end()
if (this._options.breadcrumbs)
q6.addBreadcrumb(
{
category: 'http',
data: { method: G.method, status_code: Z.statusCode, url: d },
type: 'http',
},
{ event: 'response', request: G, response: Z },
)
}
}
__init6() {
this._onRequestError = (I) => {
if (
!vb([
q6.getClient,
'call',
(W) => W(),
'optionalAccess',
(W) => W.getIntegration,
'call',
(W) => W(oI),
])
)
return
let { request: G } = I,
Z = G.origin ? G.origin.toString() + G.path : G.path
if (q6.isSentryRequestUrl(Z, q6.getClient())) return
let d = G.__sentry_span__
if (d) d.setStatus('internal_error'), d.end()
if (this._options.breadcrumbs)
q6.addBreadcrumb(
{ category: 'http', data: { method: G.method, url: Z }, level: 'error', type: 'http' },
{ event: 'error', request: G },
)
}
}
}
oI.__initStatic()
function j24(I, G, Z) {
let d
if (Array.isArray(I.headers)) d = I.headers.some((W) => W === 'sentry-trace')
else
d = I.headers
.split(
`\r
`,
)
.some((w) => w.startsWith('sentry-trace:'))
if (d) return
if ((I.addHeader('sentry-trace', G), Z)) I.addHeader('baggage', Z)
}
function k24(I, G, Z) {
let d = oF.parseUrl(Z),
W = G.method || 'GET',
w = { 'http.method': W }
if (d.search) w['http.query'] = d.search
if (d.hash) w['http.fragment'] = d.hash
return vb([
I,
'optionalAccess',
(B) => B.startChild,
'call',
(B) =>
B({
op: 'http.client',
origin: 'auto.http.node.undici',
description: `${W} ${oF.getSanitizedUrlString(d)}`,
data: w,
}),
])
}
z$1.Undici = oI
z$1.nativeNodeFetchintegration = l24
})
var U21 = _((U$1) => {
Object.defineProperty(U$1, '__esModule', { value: !0 })
var Q$1 = A1('path'),
c24 = X0()
function q$1(I) {
return I.replace(/^[A-Z]:/, '').replace(/\\/g, '/')
}
function p24(
I = process.argv[1] ? c24.dirname(process.argv[1]) : process.cwd(),
G = Q$1.sep === '\\',
) {
let Z = G ? q$1(I) : I
return (d) => {
if (!d) return
let W = G ? q$1(d) : d,
{ dir: w, base: B, ext: C } = Q$1.posix.parse(W)
if (C === '.js' || C === '.mjs' || C === '.cjs') B = B.slice(0, C.length * -1)
if (!w) w = '.'
let V = w.lastIndexOf('/node_modules')
if (V > -1) return `${w.slice(V + 14).replace(/\//g, '.')}:${B}`
if (w.startsWith(Z)) {
let A = w.slice(Z.length + 1).replace(/\//g, '.')
if (A) A += ':'
return (A += B), A
}
return B
}
}
U$1.createGetModuleFromFilename = p24
})
var f21 = _((M$1) => {
var { _optionalChain: n24 } = X0()
Object.defineProperty(M$1, '__esModule', { value: !0 })
var Zd = Y4(),
eF = X0(),
a24 = DL1(),
r24 = V21(),
s24 = _b(),
o24 = Db(),
e24 = Fb(),
t24 = Jb(),
I44 = Nb(),
G44 = zb(),
Z44 = Ub(),
d44 = Rb(),
W44 = Eb(),
w44 = Mb(),
B44 = U21(),
C44 = Y21(),
f$1 = [
Zd.inboundFiltersIntegration(),
Zd.functionToStringIntegration(),
Zd.linkedErrorsIntegration(),
Zd.requestDataIntegration(),
s24.consoleIntegration(),
t24.httpIntegration(),
w44.nativeNodeFetchintegration(),
Z44.onUncaughtExceptionIntegration(),
d44.onUnhandledRejectionIntegration(),
e24.contextLinesIntegration(),
I44.localVariablesIntegration(),
o24.nodeContextIntegration(),
G44.modulesIntegration(),
]
function R$1(I) {
let G = Zd.getMainCarrier(),
Z = n24([G, 'access', (d) => d.__SENTRY__, 'optionalAccess', (d) => d.integrations]) || []
return [...f$1, ...Z]
}
function V44(I = {}) {
if ((a24.setNodeAsyncContextStrategy(), I.defaultIntegrations === void 0))
I.defaultIntegrations = R$1()
if (I.dsn === void 0 && process.env.SENTRY_DSN) I.dsn = process.env.SENTRY_DSN
let G = process.env.SENTRY_TRACES_SAMPLE_RATE
if (I.tracesSampleRate === void 0 && G) {
let d = parseFloat(G)
if (isFinite(d)) I.tracesSampleRate = d
}
if (I.release === void 0) {
let d = E$1()
if (d !== void 0) I.release = d
else I.autoSessionTracking = !1
}
if (I.environment === void 0 && process.env.SENTRY_ENVIRONMENT)
I.environment = process.env.SENTRY_ENVIRONMENT
if (I.autoSessionTracking === void 0 && I.dsn !== void 0) I.autoSessionTracking = !0
if (I.instrumenter === void 0) I.instrumenter = 'sentry'
let Z = {
...I,
stackParser: eF.stackParserFromStackParserOptions(I.stackParser || v$1),
integrations: Zd.getIntegrationsToSetup(I),
transport: I.transport || C44.makeNodeTransport,
}
if ((Zd.initAndBind(I.clientClass || r24.NodeClient, Z), I.autoSessionTracking)) X44()
if ((Y44(), I.spotlight)) {
let d = Zd.getClient()
if (d && d.addIntegration) {
let W = d.getOptions().integrations
for (let w of W) d.addIntegration(w)
d.addIntegration(
W44.spotlightIntegration({
sidecarUrl: typeof I.spotlight === 'string' ? I.spotlight : void 0,
}),
)
}
}
}
function A44(I) {
if (I === void 0) return !1
let G = I && I.getOptions()
if (G && G.autoSessionTracking !== void 0) return G.autoSessionTracking
return !1
}
function E$1(I) {
if (process.env.SENTRY_RELEASE) return process.env.SENTRY_RELEASE
if (eF.GLOBAL_OBJ.SENTRY_RELEASE && eF.GLOBAL_OBJ.SENTRY_RELEASE.id)
return eF.GLOBAL_OBJ.SENTRY_RELEASE.id
return (
process.env.GITHUB_SHA ||
process.env.COMMIT_REF ||
process.env.VERCEL_GIT_COMMIT_SHA ||
process.env.VERCEL_GITHUB_COMMIT_SHA ||
process.env.VERCEL_GITLAB_COMMIT_SHA ||
process.env.VERCEL_BITBUCKET_COMMIT_SHA ||
process.env.ZEIT_GITHUB_COMMIT_SHA ||
process.env.ZEIT_GITLAB_COMMIT_SHA ||
process.env.ZEIT_BITBUCKET_COMMIT_SHA ||
process.env.CF_PAGES_COMMIT_SHA ||
I
)
}
var v$1 = eF.createStackParser(eF.nodeStackLineParser(B44.createGetModuleFromFilename()))
function X44() {
Zd.startSession(),
process.on('beforeExit', () => {
let I = Zd.getIsolationScope().getSession()
if (I && !['exited', 'crashed'].includes(I.status)) Zd.endSession()
})
}
function Y44() {
let I = (process.env.SENTRY_USE_ENVIRONMENT || '').toLowerCase()
if (!['false', 'n', 'no', 'off', '0'].includes(I)) {
let G = process.env.SENTRY_TRACE,
Z = process.env.SENTRY_BAGGAGE,
d = eF.propagationContextFromHeaders(G, Z)
Zd.getCurrentScope().setPropagationContext(d)
}
}
M$1.defaultIntegrations = f$1
M$1.defaultStackParser = v$1
M$1.getDefaultIntegrations = R$1
M$1.getSentryRelease = E$1
M$1.init = V44
M$1.isAutoSessionTrackingEnabled = A44
})
var L$1 = _((S$1) => {
Object.defineProperty(S$1, '__esModule', { value: !0 })
var Sb = A1('fs'),
R21 = A1('path')
function g44(I) {
let G = R21.resolve(I)
if (!Sb.existsSync(G))
throw new Error(`Cannot read contents of ${G}. Directory does not exist.`)
if (!Sb.statSync(G).isDirectory())
throw new Error(`Cannot read contents of ${G}, because it is not a directory.`)
let Z = (d) => {
return Sb.readdirSync(d).reduce((W, w) => {
let B = R21.join(d, w)
if (Sb.statSync(B).isDirectory()) return W.concat(Z(B))
return W.push(B), W
}, [])
}
return Z(G).map((d) => R21.relative(G, d))
}
S$1.deepReadDirSync = g44
})
var $$1 = _((z44) => {
/*! @sentry/node 7.120.0 (611282e) | https://github.com/getsentry/sentry-javascript */ z44.base64WorkerScript =
'aW1wb3J0IHsgU2Vzc2lvbiB9IGZyb20gJ2luc3BlY3Rvcic7CmltcG9ydCB7IHdvcmtlckRhdGEsIHBhcmVudFBvcnQgfSBmcm9tICd3b3JrZXJfdGhyZWFkcyc7CmltcG9ydCB7IHBvc2l4LCBzZXAgfSBmcm9tICdwYXRoJzsKaW1wb3J0ICogYXMgaHR0cCBmcm9tICdodHRwJzsKaW1wb3J0ICogYXMgaHR0cHMgZnJvbSAnaHR0cHMnOwppbXBvcnQgeyBSZWFkYWJsZSB9IGZyb20gJ3N0cmVhbSc7CmltcG9ydCB7IFVSTCB9IGZyb20gJ3VybCc7CmltcG9ydCB7IGNyZWF0ZUd6aXAgfSBmcm9tICd6bGliJzsKaW1wb3J0ICogYXMgbmV0IGZyb20gJ25ldCc7CmltcG9ydCAqIGFzIHRscyBmcm9tICd0bHMnOwoKLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZApjb25zdCBvYmplY3RUb1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7CgovKioKICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIG9uZSBvZiBhIGZldyBFcnJvciBvciBFcnJvci1saWtlCiAqIHtAbGluayBpc0Vycm9yfS4KICoKICogQHBhcmFtIHdhdCBBIHZhbHVlIHRvIGJlIGNoZWNrZWQuCiAqIEByZXR1cm5zIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdC4KICovCmZ1bmN0aW9uIGlzRXJyb3Iod2F0KSB7CiAgc3dpdGNoIChvYmplY3RUb1N0cmluZy5jYWxsKHdhdCkpIHsKICAgIGNhc2UgJ1tvYmplY3QgRXJyb3JdJzoKICAgIGNhc2UgJ1tvYmplY3QgRXhjZXB0aW9uXSc6CiAgICBjYXNlICdbb2JqZWN0IERPTUV4Y2VwdGlvbl0nOgogICAgICByZXR1cm4gdHJ1ZTsKICAgIGRlZmF1bHQ6CiAgICAgIHJldHVybiBpc0luc3RhbmNlT2Yod2F0LCBFcnJvcik7CiAgfQp9Ci8qKgogKiBDaGVja3Mgd2hldGhlciBnaXZlbiB2YWx1ZSBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgZ2l2ZW4gYnVpbHQtaW4gY2xhc3MuCiAqCiAqIEBwYXJhbSB3YXQgVGhlIHZhbHVlIHRvIGJlIGNoZWNrZWQKICogQHBhcmFtIGNsYXNzTmFtZQogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc0J1aWx0aW4od2F0LCBjbGFzc05hbWUpIHsKICByZXR1cm4gb2JqZWN0VG9TdHJpbmcuY2FsbCh3YXQpID09PSBgW29iamVjdCAke2NsYXNzTmFtZX1dYDsKfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhIHN0cmluZwogKiB7QGxpbmsgaXNTdHJpbmd9LgogKgogKiBAcGFyYW0gd2F0IEEgdmFsdWUgdG8gYmUgY2hlY2tlZC4KICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LgogKi8KZnVuY3Rpb24gaXNTdHJpbmcod2F0KSB7CiAgcmV0dXJuIGlzQnVpbHRpbih3YXQsICdTdHJpbmcnKTsKfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhbiBvYmplY3QgbGl0ZXJhbCwgb3IgYSBjbGFzcyBpbnN0YW5jZS4KICoge0BsaW5rIGlzUGxhaW5PYmplY3R9LgogKgogKiBAcGFyYW0gd2F0IEEgdmFsdWUgdG8gYmUgY2hlY2tlZC4KICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LgogKi8KZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh3YXQpIHsKICByZXR1cm4gaXNCdWlsdGluKHdhdCwgJ09iamVjdCcpOwp9CgovKioKICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIGFuIEV2ZW50IGluc3RhbmNlCiAqIHtAbGluayBpc0V2ZW50fS4KICoKICogQHBhcmFtIHdhdCBBIHZhbHVlIHRvIGJlIGNoZWNrZWQuCiAqIEByZXR1cm5zIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdC4KICovCmZ1bmN0aW9uIGlzRXZlbnQod2F0KSB7CiAgcmV0dXJuIHR5cGVvZiBFdmVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNJbnN0YW5jZU9mKHdhdCwgRXZlbnQpOwp9CgovKioKICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIGFuIEVsZW1lbnQgaW5zdGFuY2UKICoge0BsaW5rIGlzRWxlbWVudH0uCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc0VsZW1lbnQod2F0KSB7CiAgcmV0dXJuIHR5cGVvZiBFbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBpc0luc3RhbmNlT2Yod2F0LCBFbGVtZW50KTsKfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlIGhhcyBhIHRoZW4gZnVuY3Rpb24uCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKi8KZnVuY3Rpb24gaXNUaGVuYWJsZSh3YXQpIHsKICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzCiAgcmV0dXJuIEJvb2xlYW4od2F0ICYmIHdhdC50aGVuICYmIHR5cGVvZiB3YXQudGhlbiA9PT0gJ2Z1bmN0aW9uJyk7Cn0KCi8qKgogKiBDaGVja3Mgd2hldGhlciBnaXZlbiB2YWx1ZSdzIHR5cGUgaXMgYSBTeW50aGV0aWNFdmVudAogKiB7QGxpbmsgaXNTeW50aGV0aWNFdmVudH0uCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc1N5bnRoZXRpY0V2ZW50KHdhdCkgewogIHJldHVybiBpc1BsYWluT2JqZWN0KHdhdCkgJiYgJ25hdGl2ZUV2ZW50JyBpbiB3YXQgJiYgJ3ByZXZlbnREZWZhdWx0JyBpbiB3YXQgJiYgJ3N0b3BQcm9wYWdhdGlvbicgaW4gd2F0Owp9CgovKioKICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUgaXMgTmFOCiAqIHtAbGluayBpc05hTn0uCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc05hTiQxKHdhdCkgewogIHJldHVybiB0eXBlb2Ygd2F0ID09PSAnbnVtYmVyJyAmJiB3YXQgIT09IHdhdDsKfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhbiBpbnN0YW5jZSBvZiBwcm92aWRlZCBjb25zdHJ1Y3Rvci4KICoge0BsaW5rIGlzSW5zdGFuY2VPZn0uCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcGFyYW0gYmFzZSBBIGNvbnN0cnVjdG9yIHRvIGJlIHVzZWQgaW4gYSBjaGVjay4KICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LgogKi8KZnVuY3Rpb24gaXNJbnN0YW5jZU9mKHdhdCwgYmFzZSkgewogIHRyeSB7CiAgICByZXR1cm4gd2F0IGluc3RhbmNlb2YgYmFzZTsKICB9IGNhdGNoIChfZSkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhIFZ1ZSBWaWV3TW9kZWwuCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc1Z1ZVZpZXdNb2RlbCh3YXQpIHsKICAvLyBOb3QgdXNpbmcgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyBiZWNhdXNlIGluIFZ1ZSAzIGl0IHdvdWxkIHJlYWQgdGhlIGluc3RhbmNlJ3MgU3ltYm9sKFN5bWJvbC50b1N0cmluZ1RhZykgcHJvcGVydHkuCiAgcmV0dXJuICEhKHR5cGVvZiB3YXQgPT09ICdvYmplY3QnICYmIHdhdCAhPT0gbnVsbCAmJiAoKHdhdCApLl9faXNWdWUgfHwgKHdhdCApLl9pc1Z1ZSkpOwp9CgovKiogSW50ZXJuYWwgZ2xvYmFsIHdpdGggY29tbW9uIHByb3BlcnRpZXMgYW5kIFNlbnRyeSBleHRlbnNpb25zICAqLwoKLy8gVGhlIGNvZGUgYmVsb3cgZm9yICdpc0dsb2JhbE9iaicgYW5kICdHTE9CQUxfT0JKJyB3YXMgY29waWVkIGZyb20gY29yZS1qcyBiZWZvcmUgbW9kaWZpY2F0aW9uCi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvMWI5NDRkZjU1MjgyY2RjOTljOTBkYjVmNDllYjBiNmVkYTJjYzBhMy9wYWNrYWdlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwuanMKLy8gY29yZS1qcyBoYXMgdGhlIGZvbGxvd2luZyBsaWNlbmNlOgovLwovLyBDb3B5cmlnaHQgKGMpIDIwMTQtMjAyMiBEZW5pcyBQdXNoa2FyZXYKLy8KLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQovLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAovLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci8vCi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgovLwovLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgovLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgovLyBUSEUgU09GVFdBUkUuCgovKiogUmV0dXJucyAnb2JqJyBpZiBpdCdzIHRoZSBnbG9iYWwgb2JqZWN0LCBvdGhlcndpc2UgcmV0dXJucyB1bmRlZmluZWQgKi8KZnVuY3Rpb24gaXNHbG9iYWxPYmoob2JqKSB7CiAgcmV0dXJuIG9iaiAmJiBvYmouTWF0aCA9PSBNYXRoID8gb2JqIDogdW5kZWZpbmVkOwp9CgovKiogR2V0J3MgdGhlIGdsb2JhbCBvYmplY3QgZm9yIHRoZSBjdXJyZW50IEphdmFTY3JpcHQgcnVudGltZSAqLwpjb25zdCBHTE9CQUxfT0JKID0KICAodHlwZW9mIGdsb2JhbFRoaXMgPT0gJ29iamVjdCcgJiYgaXNHbG9iYWxPYmooZ2xvYmFsVGhpcykpIHx8CiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscwogICh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIGlzR2xvYmFsT2JqKHdpbmRvdykpIHx8CiAgKHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIGlzR2xvYmFsT2JqKHNlbGYpKSB8fAogICh0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGlzR2xvYmFsT2JqKGdsb2JhbCkpIHx8CiAgKGZ1bmN0aW9uICgpIHsKICAgIHJldHVybiB0aGlzOwogIH0pKCkgfHwKICB7fTsKCi8qKgogKiBAZGVwcmVjYXRlZCBVc2UgR0xPQkFMX09CSiBpbnN0ZWFkIG9yIFdJTkRPVyBmcm9tIEBzZW50cnkvYnJvd3Nlci4gVGhpcyB3aWxsIGJlIHJlbW92ZWQgaW4gdjgKICovCmZ1bmN0aW9uIGdldEdsb2JhbE9iamVjdCgpIHsKICByZXR1cm4gR0xPQkFMX09CSiA7Cn0KCi8qKgogKiBSZXR1cm5zIGEgZ2xvYmFsIHNpbmdsZXRvbiBjb250YWluZWQgaW4gdGhlIGdsb2JhbCBgX19TRU5UUllfX2Agb2JqZWN0LgogKgogKiBJZiB0aGUgc2luZ2xldG9uIGRvZXNuJ3QgYWxyZWFkeSBleGlzdCBpbiBgX19TRU5UUllfX2AsIGl0IHdpbGwgYmUgY3JlYXRlZCB1c2luZyB0aGUgZ2l2ZW4gZmFjdG9yeQogKiBmdW5jdGlvbiBhbmQgYWRkZWQgdG8gdGhlIGBfX1NFTlRSWV9fYCBvYmplY3QuCiAqCiAqIEBwYXJhbSBuYW1lIG5hbWUgb2YgdGhlIGdsb2JhbCBzaW5nbGV0b24gb24gX19TRU5UUllfXwogKiBAcGFyYW0gY3JlYXRvciBjcmVhdG9yIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIHRoZSBzaW5nbGV0b24gaWYgaXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0IG9uIGBfX1NFTlRSWV9fYAogKiBAcGFyYW0gb2JqIChPcHRpb25hbCkgVGhlIGdsb2JhbCBvYmplY3Qgb24gd2hpY2ggdG8gbG9vayBmb3IgYF9fU0VOVFJZX19gLCBpZiBub3QgYEdMT0JBTF9PQkpgJ3MgcmV0dXJuIHZhbHVlCiAqIEByZXR1cm5zIHRoZSBzaW5nbGV0b24KICovCmZ1bmN0aW9uIGdldEdsb2JhbFNpbmdsZXRvbihuYW1lLCBjcmVhdG9yLCBvYmopIHsKICBjb25zdCBnYmwgPSAob2JqIHx8IEdMT0JBTF9PQkopIDsKICBjb25zdCBfX1NFTlRSWV9fID0gKGdibC5fX1NFTlRSWV9fID0gZ2JsLl9fU0VOVFJZX18gfHwge30pOwogIGNvbnN0IHNpbmdsZXRvbiA9IF9fU0VOVFJZX19bbmFtZV0gfHwgKF9fU0VOVFJZX19bbmFtZV0gPSBjcmVhdG9yKCkpOwogIHJldHVybiBzaW5nbGV0b247Cn0KCi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgpjb25zdCBXSU5ET1cgPSBnZXRHbG9iYWxPYmplY3QoKTsKCmNvbnN0IERFRkFVTFRfTUFYX1NUUklOR19MRU5HVEggPSA4MDsKCi8qKgogKiBHaXZlbiBhIGNoaWxkIERPTSBlbGVtZW50LCByZXR1cm5zIGEgcXVlcnktc2VsZWN0b3Igc3RhdGVtZW50IGRlc2NyaWJpbmcgdGhhdAogKiBhbmQgaXRzIGFuY2VzdG9ycwogKiBlLmcuIFtIVE1MRWxlbWVudF0gPT4gYm9keSA+IGRpdiA+IGlucHV0I2Zvby5idG5bbmFtZT1iYXpdCiAqIEByZXR1cm5zIGdlbmVyYXRlZCBET00gcGF0aAogKi8KZnVuY3Rpb24gaHRtbFRyZWVBc1N0cmluZygKICBlbGVtLAogIG9wdGlvbnMgPSB7fSwKKSB7CiAgaWYgKCFlbGVtKSB7CiAgICByZXR1cm4gJzx1bmtub3duPic7CiAgfQoKICAvLyB0cnkvY2F0Y2ggYm90aDoKICAvLyAtIGFjY2Vzc2luZyBldmVudC50YXJnZXQgKHNlZSBnZXRzZW50cnkvcmF2ZW4tanMjODM4LCAjNzY4KQogIC8vIC0gYGh0bWxUcmVlQXNTdHJpbmdgIGJlY2F1c2UgaXQncyBjb21wbGV4LCBhbmQganVzdCBhY2Nlc3NpbmcgdGhlIERPTSBpbmNvcnJlY3RseQogIC8vIC0gY2FuIHRocm93IGFuIGV4Y2VwdGlvbiBpbiBzb21lIGNpcmN1bXN0YW5jZXMuCiAgdHJ5IHsKICAgIGxldCBjdXJyZW50RWxlbSA9IGVsZW0gOwogICAgY29uc3QgTUFYX1RSQVZFUlNFX0hFSUdIVCA9IDU7CiAgICBjb25zdCBvdXQgPSBbXTsKICAgIGxldCBoZWlnaHQgPSAwOwogICAgbGV0IGxlbiA9IDA7CiAgICBjb25zdCBzZXBhcmF0b3IgPSAnID4gJzsKICAgIGNvbnN0IHNlcExlbmd0aCA9IHNlcGFyYXRvci5sZW5ndGg7CiAgICBsZXQgbmV4dFN0cjsKICAgIGNvbnN0IGtleUF0dHJzID0gQXJyYXkuaXNBcnJheShvcHRpb25zKSA/IG9wdGlvbnMgOiBvcHRpb25zLmtleUF0dHJzOwogICAgY29uc3QgbWF4U3RyaW5nTGVuZ3RoID0gKCFBcnJheS5pc0FycmF5KG9wdGlvbnMpICYmIG9wdGlvbnMubWF4U3RyaW5nTGVuZ3RoKSB8fCBERUZBVUxUX01BWF9TVFJJTkdfTEVOR1RIOwoKICAgIHdoaWxlIChjdXJyZW50RWxlbSAmJiBoZWlnaHQrKyA8IE1BWF9UUkFWRVJTRV9IRUlHSFQpIHsKICAgICAgbmV4dFN0ciA9IF9odG1sRWxlbWVudEFzU3RyaW5nKGN1cnJlbnRFbGVtLCBrZXlBdHRycyk7CiAgICAgIC8vIGJhaWwgb3V0IGlmCiAgICAgIC8vIC0gbmV4dFN0ciBpcyB0aGUgJ2h0bWwnIGVsZW1lbnQKICAgICAgLy8gLSB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgdGhhdCB3b3VsZCBiZSBjcmVhdGVkIGV4Y2VlZHMgbWF4U3RyaW5nTGVuZ3RoCiAgICAgIC8vICAgKGlnbm9yZSB0aGlzIGxpbWl0IGlmIHdlIGFyZSBvbiB0aGUgZmlyc3QgaXRlcmF0aW9uKQogICAgICBpZiAobmV4dFN0ciA9PT0gJ2h0bWwnIHx8IChoZWlnaHQgPiAxICYmIGxlbiArIG91dC5sZW5ndGggKiBzZXBMZW5ndGggKyBuZXh0U3RyLmxlbmd0aCA+PSBtYXhTdHJpbmdMZW5ndGgpKSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KCiAgICAgIG91dC5wdXNoKG5leHRTdHIpOwoKICAgICAgbGVuICs9IG5leHRTdHIubGVuZ3RoOwogICAgICBjdXJyZW50RWxlbSA9IGN1cnJlbnRFbGVtLnBhcmVudE5vZGU7CiAgICB9CgogICAgcmV0dXJuIG91dC5yZXZlcnNlKCkuam9pbihzZXBhcmF0b3IpOwogIH0gY2F0Y2ggKF9vTykgewogICAgcmV0dXJuICc8dW5rbm93bj4nOwogIH0KfQoKLyoqCiAqIFJldHVybnMgYSBzaW1wbGUsIHF1ZXJ5LXNlbGVjdG9yIHJlcHJlc2VudGF0aW9uIG9mIGEgRE9NIGVsZW1lbnQKICogZS5nLiBbSFRNTEVsZW1lbnRdID0+IGlucHV0I2Zvby5idG5bbmFtZT1iYXpdCiAqIEByZXR1cm5zIGdlbmVyYXRlZCBET00gcGF0aAogKi8KZnVuY3Rpb24gX2h0bWxFbGVtZW50QXNTdHJpbmcoZWwsIGtleUF0dHJzKSB7CiAgY29uc3QgZWxlbSA9IGVsCgo7CgogIGNvbnN0IG91dCA9IFtdOwogIGxldCBjbGFzc05hbWU7CiAgbGV0IGNsYXNzZXM7CiAgbGV0IGtleTsKICBsZXQgYXR0cjsKICBsZXQgaTsKCiAgaWYgKCFlbGVtIHx8ICFlbGVtLnRhZ05hbWUpIHsKICAgIHJldHVybiAnJzsKICB9CgogIC8vIEB0cy1leHBlY3QtZXJyb3IgV0lORE9XIGhhcyBIVE1MRWxlbWVudAogIGlmIChXSU5ET1cuSFRNTEVsZW1lbnQpIHsKICAgIC8vIElmIHVzaW5nIHRoZSBjb21wb25lbnQgbmFtZSBhbm5vdGF0aW9uIHBsdWdpbiwgdGhpcyB2YWx1ZSBtYXkgYmUgYXZhaWxhYmxlIG9uIHRoZSBET00gbm9kZQogICAgaWYgKGVsZW0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBlbGVtLmRhdGFzZXQgJiYgZWxlbS5kYXRhc2V0WydzZW50cnlDb21wb25lbnQnXSkgewogICAgICByZXR1cm4gZWxlbS5kYXRhc2V0WydzZW50cnlDb21wb25lbnQnXTsKICAgIH0KICB9CgogIG91dC5wdXNoKGVsZW0udGFnTmFtZS50b0xvd2VyQ2FzZSgpKTsKCiAgLy8gUGFpcnMgb2YgYXR0cmlidXRlIGtleXMgZGVmaW5lZCBpbiBgc2VyaWFsaXplQXR0cmlidXRlYCBhbmQgdGhlaXIgdmFsdWVzIG9uIGVsZW1lbnQuCiAgY29uc3Qga2V5QXR0clBhaXJzID0KICAgIGtleUF0dHJzICYmIGtleUF0dHJzLmxlbmd0aAogICAgICA/IGtleUF0dHJzLmZpbHRlcihrZXlBdHRyID0+IGVsZW0uZ2V0QXR0cmlidXRlKGtleUF0dHIpKS5tYXAoa2V5QXR0ciA9PiBba2V5QXR0ciwgZWxlbS5nZXRBdHRyaWJ1dGUoa2V5QXR0cildKQogICAgICA6IG51bGw7CgogIGlmIChrZXlBdHRyUGFpcnMgJiYga2V5QXR0clBhaXJzLmxlbmd0aCkgewogICAga2V5QXR0clBhaXJzLmZvckVhY2goa2V5QXR0clBhaXIgPT4gewogICAgICBvdXQucHVzaChgWyR7a2V5QXR0clBhaXJbMF19PSIke2tleUF0dHJQYWlyWzFdfSJdYCk7CiAgICB9KTsKICB9IGVsc2UgewogICAgaWYgKGVsZW0uaWQpIHsKICAgICAgb3V0LnB1c2goYCMke2VsZW0uaWR9YCk7CiAgICB9CgogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdAogICAgY2xhc3NOYW1lID0gZWxlbS5jbGFzc05hbWU7CiAgICBpZiAoY2xhc3NOYW1lICYmIGlzU3RyaW5nKGNsYXNzTmFtZSkpIHsKICAgICAgY2xhc3NlcyA9IGNsYXNzTmFtZS5zcGxpdCgvXHMrLyk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBjbGFzc2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgb3V0LnB1c2goYC4ke2NsYXNzZXNbaV19YCk7CiAgICAgIH0KICAgIH0KICB9CiAgY29uc3QgYWxsb3dlZEF0dHJzID0gWydhcmlhLWxhYmVsJywgJ3R5cGUnLCAnbmFtZScsICd0aXRsZScsICdhbHQnXTsKICBmb3IgKGkgPSAwOyBpIDwgYWxsb3dlZEF0dHJzLmxlbmd0aDsgaSsrKSB7CiAgICBrZXkgPSBhbGxvd2VkQXR0cnNbaV07CiAgICBhdHRyID0gZWxlbS5nZXRBdHRyaWJ1dGUoa2V5KTsKICAgIGlmIChhdHRyKSB7CiAgICAgIG91dC5wdXNoKGBbJHtrZXl9PSIke2F0dHJ9Il1gKTsKICAgIH0KICB9CiAgcmV0dXJuIG91dC5qb2luKCcnKTsKfQoKLyoqCiAqIFRoaXMgc2VydmVzIGFzIGEgYnVpbGQgdGltZSBmbGFnIHRoYXQgd2lsbCBiZSB0cnVlIGJ5IGRlZmF1bHQsIGJ1dCBmYWxzZSBpbiBub24tZGVidWcgYnVpbGRzIG9yIGlmIHVzZXJzIHJlcGxhY2UgYF9fU0VOVFJZX0RFQlVHX19gIGluIHRoZWlyIGdlbmVyYXRlZCBjb2RlLgogKgogKiBBVFRFTlRJT046IFRoaXMgY29uc3RhbnQgbXVzdCBuZXZlciBjcm9zcyBwYWNrYWdlIGJvdW5kYXJpZXMgKGkuZS4gYmUgZXhwb3J0ZWQpIHRvIGd1YXJhbnRlZSB0aGF0IGl0IGNhbiBiZSB1c2VkIGZvciB0cmVlIHNoYWtpbmcuCiAqLwpjb25zdCBERUJVR19CVUlMRCQxID0gKHR5cGVvZiBfX1NFTlRSWV9ERUJVR19fID09PSAndW5kZWZpbmVkJyB8fCBfX1NFTlRSWV9ERUJVR19fKTsKCi8qKiBQcmVmaXggZm9yIGxvZ2dpbmcgc3RyaW5ncyAqLwpjb25zdCBQUkVGSVggPSAnU2VudHJ5IExvZ2dlciAnOwoKY29uc3QgQ09OU09MRV9MRVZFTFMgPSBbCiAgJ2RlYnVnJywKICAnaW5mbycsCiAgJ3dhcm4nLAogICdlcnJvcicsCiAgJ2xvZycsCiAgJ2Fzc2VydCcsCiAgJ3RyYWNlJywKXSA7CgovKiogVGhpcyBtYXkgYmUgbXV0YXRlZCBieSB0aGUgY29uc29sZSBpbnN0cnVtZW50YXRpb24uICovCmNvbnN0IG9yaWdpbmFsQ29uc29sZU1ldGhvZHMKCiA9IHt9OwoKLyoqIEpTRG9jICovCgovKioKICogVGVtcG9yYXJpbHkgZGlzYWJsZSBzZW50cnkgY29uc29sZSBpbnN0cnVtZW50YXRpb25zLgogKgogKiBAcGFyYW0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRvIHJ1biBhZ2FpbnN0IHRoZSBvcmlnaW5hbCBgY29uc29sZWAgbWVzc2FnZXMKICogQHJldHVybnMgVGhlIHJlc3VsdHMgb2YgdGhlIGNhbGxiYWNrCiAqLwpmdW5jdGlvbiBjb25zb2xlU2FuZGJveChjYWxsYmFjaykgewogIGlmICghKCdjb25zb2xlJyBpbiBHTE9CQUxfT0JKKSkgewogICAgcmV0dXJuIGNhbGxiYWNrKCk7CiAgfQoKICBjb25zdCBjb25zb2xlID0gR0xPQkFMX09CSi5jb25zb2xlIDsKICBjb25zdCB3cmFwcGVkRnVuY3MgPSB7fTsKCiAgY29uc3Qgd3JhcHBlZExldmVscyA9IE9iamVjdC5rZXlzKG9yaWdpbmFsQ29uc29sZU1ldGhvZHMpIDsKCiAgLy8gUmVzdG9yZSBhbGwgd3JhcHBlZCBjb25zb2xlIG1ldGhvZHMKICB3cmFwcGVkTGV2ZWxzLmZvckVhY2gobGV2ZWwgPT4gewogICAgY29uc3Qgb3JpZ2luYWxDb25zb2xlTWV0aG9kID0gb3JpZ2luYWxDb25zb2xlTWV0aG9kc1tsZXZlbF0gOwogICAgd3JhcHBlZEZ1bmNzW2xldmVsXSA9IGNvbnNvbGVbbGV2ZWxdIDsKICAgIGNvbnNvbGVbbGV2ZWxdID0gb3JpZ2luYWxDb25zb2xlTWV0aG9kOwogIH0pOwoKICB0cnkgewogICAgcmV0dXJuIGNhbGxiYWNrKCk7CiAgfSBmaW5hbGx5IHsKICAgIC8vIFJldmVydCByZXN0b3JhdGlvbiB0byB3cmFwcGVkIHN0YXRlCiAgICB3cmFwcGVkTGV2ZWxzLmZvckVhY2gobGV2ZWwgPT4gewogICAgICBjb25zb2xlW2xldmVsXSA9IHdyYXBwZWRGdW5jc1tsZXZlbF0gOwogICAgfSk7CiAgfQp9CgpmdW5jdGlvbiBtYWtlTG9nZ2VyKCkgewogIGxldCBlbmFibGVkID0gZmFsc2U7CiAgY29uc3QgbG9nZ2VyID0gewogICAgZW5hYmxlOiAoKSA9PiB7CiAgICAgIGVuYWJsZWQgPSB0cnVlOwogICAgfSwKICAgIGRpc2FibGU6ICgpID0+IHsKICAgICAgZW5hYmxlZCA9IGZhbHNlOwogICAgfSwKICAgIGlzRW5hYmxlZDogKCkgPT4gZW5hYmxlZCwKICB9OwoKICBpZiAoREVCVUdfQlVJTEQkMSkgewogICAgQ09OU09MRV9MRVZFTFMuZm9yRWFjaChuYW1lID0+IHsKICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkKICAgICAgbG9nZ2VyW25hbWVdID0gKC4uLmFyZ3MpID0+IHsKICAgICAgICBpZiAoZW5hYmxlZCkgewogICAgICAgICAgY29uc29sZVNhbmRib3goKCkgPT4gewogICAgICAgICAgICBHTE9CQUxfT0JKLmNvbnNvbGVbbmFtZV0oYCR7UFJFRklYfVske25hbWV9XTpgLCAuLi5hcmdzKTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgIH0pOwogIH0gZWxzZSB7CiAgICBDT05TT0xFX0xFVkVMUy5mb3JFYWNoKG5hbWUgPT4gewogICAgICBsb2dnZXJbbmFtZV0gPSAoKSA9PiB1bmRlZmluZWQ7CiAgICB9KTsKICB9CgogIHJldHVybiBsb2dnZXIgOwp9Cgpjb25zdCBsb2dnZXIgPSBtYWtlTG9nZ2VyKCk7CgovKioKICogUmVuZGVycyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRHNuLgogKgogKiBCeSBkZWZhdWx0LCB0aGlzIHdpbGwgcmVuZGVyIHRoZSBwdWJsaWMgcmVwcmVzZW50YXRpb24gd2l0aG91dCB0aGUgcGFzc3dvcmQKICogY29tcG9uZW50LiBUbyBnZXQgdGhlIGRlcHJlY2F0ZWQgcHJpdmF0ZSByZXByZXNlbnRhdGlvbiwgc2V0IGB3aXRoUGFzc3dvcmRgCiAqIHRvIHRydWUuCiAqCiAqIEBwYXJhbSB3aXRoUGFzc3dvcmQgV2hlbiBzZXQgdG8gdHJ1ZSwgdGhlIHBhc3N3b3JkIHdpbGwgYmUgaW5jbHVkZWQuCiAqLwpmdW5jdGlvbiBkc25Ub1N0cmluZyhkc24sIHdpdGhQYXNzd29yZCA9IGZhbHNlKSB7CiAgY29uc3QgeyBob3N0LCBwYXRoLCBwYXNzLCBwb3J0LCBwcm9qZWN0SWQsIHByb3RvY29sLCBwdWJsaWNLZXkgfSA9IGRzbjsKICByZXR1cm4gKAogICAgYCR7cHJvdG9jb2x9Oi8vJHtwdWJsaWNLZXl9JHt3aXRoUGFzc3dvcmQgJiYgcGFzcyA/IGA6JHtwYXNzfWAgOiAnJ31gICsKICAgIGBAJHtob3N0fSR7cG9ydCA/IGA6JHtwb3J0fWAgOiAnJ30vJHtwYXRoID8gYCR7cGF0aH0vYCA6IHBhdGh9JHtwcm9qZWN0SWR9YAogICk7Cn0KCi8qKiBBbiBlcnJvciBlbWl0dGVkIGJ5IFNlbnRyeSBTREtzIGFuZCByZWxhdGVkIHV0aWxpdGllcy4gKi8KY2xhc3MgU2VudHJ5RXJyb3IgZXh0ZW5kcyBFcnJvciB7CiAgLyoqIERpc3BsYXkgbmFtZSBvZiB0aGlzIGVycm9yIGluc3RhbmNlLiAqLwoKICAgY29uc3RydWN0b3IoIG1lc3NhZ2UsIGxvZ0xldmVsID0gJ3dhcm4nKSB7CiAgICBzdXBlcihtZXNzYWdlKTt0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOwogICAgdGhpcy5uYW1lID0gbmV3LnRhcmdldC5wcm90b3R5cGUuY29uc3RydWN0b3IubmFtZTsKICAgIC8vIFRoaXMgc2V0cyB0aGUgcHJvdG90eXBlIHRvIGJlIGBFcnJvcmAsIG5vdCBgU2VudHJ5RXJyb3JgLiBJdCdzIHVuY2xlYXIgd2h5IHdlIGRvIHRoaXMsIGJ1dCBjb21tZW50aW5nIHRoaXMgbGluZQogICAgLy8gb3V0IGNhdXNlcyB2YXJpb3VzIChzZWVtaW5nbHkgdG90YWxseSB1bnJlbGF0ZWQpIHBsYXl3cmlnaHQgdGVzdHMgY29uc2lzdGVudGx5IHRpbWUgb3V0LiBGWUksIHRoaXMgbWFrZXMKICAgIC8vIGluc3RhbmNlcyBvZiBgU2VudHJ5RXJyb3JgIGZhaWwgYG9iaiBpbnN0YW5jZW9mIFNlbnRyeUVycm9yYCBjaGVja3MuCiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgbmV3LnRhcmdldC5wcm90b3R5cGUpOwogICAgdGhpcy5sb2dMZXZlbCA9IGxvZ0xldmVsOwogIH0KfQoKLyoqCiAqIEVuY29kZXMgZ2l2ZW4gb2JqZWN0IGludG8gdXJsLWZyaWVuZGx5IGZvcm1hdAogKgogKiBAcGFyYW0gb2JqZWN0IEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHNlcmlhbGl6YWJsZSB2YWx1ZXMKICogQHJldHVybnMgc3RyaW5nIEVuY29kZWQKICovCmZ1bmN0aW9uIHVybEVuY29kZShvYmplY3QpIHsKICByZXR1cm4gT2JqZWN0LmtleXMob2JqZWN0KQogICAgLm1hcChrZXkgPT4gYCR7ZW5jb2RlVVJJQ29tcG9uZW50KGtleSl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KG9iamVjdFtrZXldKX1gKQogICAgLmpvaW4oJyYnKTsKfQoKLyoqCiAqIFRyYW5zZm9ybXMgYW55IGBFcnJvcmAgb3IgYEV2ZW50YCBpbnRvIGEgcGxhaW4gb2JqZWN0IHdpdGggYWxsIG9mIHRoZWlyIGVudW1lcmFibGUgcHJvcGVydGllcywgYW5kIHNvbWUgb2YgdGhlaXIKICogbm9uLWVudW1lcmFibGUgcHJvcGVydGllcyBhdHRhY2hlZC4KICoKICogQHBhcmFtIHZhbHVlIEluaXRpYWwgc291cmNlIHRoYXQgd2UgaGF2ZSB0byB0cmFuc2Zvcm0gaW4gb3JkZXIgZm9yIGl0IHRvIGJlIHVzYWJsZSBieSB0aGUgc2VyaWFsaXplcgogKiBAcmV0dXJucyBBbiBFdmVudCBvciBFcnJvciB0dXJuZWQgaW50byBhbiBvYmplY3QgLSBvciB0aGUgdmFsdWUgYXJndXJtZW50IGl0c2VsZiwgd2hlbiB2YWx1ZSBpcyBuZWl0aGVyIGFuIEV2ZW50IG5vcgogKiAgYW4gRXJyb3IuCiAqLwpmdW5jdGlvbiBjb252ZXJ0VG9QbGFpbk9iamVjdCgKICB2YWx1ZSwKKQoKIHsKICBpZiAoaXNFcnJvcih2YWx1ZSkpIHsKICAgIHJldHVybiB7CiAgICAgIG1lc3NhZ2U6IHZhbHVlLm1lc3NhZ2UsCiAgICAgIG5hbWU6IHZhbHVlLm5hbWUsCiAgICAgIHN0YWNrOiB2YWx1ZS5zdGFjaywKICAgICAgLi4uZ2V0T3duUHJvcGVydGllcyh2YWx1ZSksCiAgICB9OwogIH0gZWxzZSBpZiAoaXNFdmVudCh2YWx1ZSkpIHsKICAgIGNvbnN0IG5ld09iagoKID0gewogICAgICB0eXBlOiB2YWx1ZS50eXBlLAogICAgICB0YXJnZXQ6IHNlcmlhbGl6ZUV2ZW50VGFyZ2V0KHZhbHVlLnRhcmdldCksCiAgICAgIGN1cnJlbnRUYXJnZXQ6IHNlcmlhbGl6ZUV2ZW50VGFyZ2V0KHZhbHVlLmN1cnJlbnRUYXJnZXQpLAogICAgICAuLi5nZXRPd25Qcm9wZXJ0aWVzKHZhbHVlKSwKICAgIH07CgogICAgaWYgKHR5cGVvZiBDdXN0b21FdmVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNJbnN0YW5jZU9mKHZhbHVlLCBDdXN0b21FdmVudCkpIHsKICAgICAgbmV3T2JqLmRldGFpbCA9IHZhbHVlLmRldGFpbDsKICAgIH0KCiAgICByZXR1cm4gbmV3T2JqOwogIH0gZWxzZSB7CiAgICByZXR1cm4gdmFsdWU7CiAgfQp9CgovKiogQ3JlYXRlcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGFyZ2V0IG9mIGFuIGBFdmVudGAgb2JqZWN0ICovCmZ1bmN0aW9uIHNlcmlhbGl6ZUV2ZW50VGFyZ2V0KHRhcmdldCkgewogIHRyeSB7CiAgICByZXR1cm4gaXNFbGVtZW50KHRhcmdldCkgPyBodG1sVHJlZUFzU3RyaW5nKHRhcmdldCkgOiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGFyZ2V0KTsKICB9IGNhdGNoIChfb08pIHsKICAgIHJldHVybiAnPHVua25vd24+JzsKICB9Cn0KCi8qKiBGaWx0ZXJzIG91dCBhbGwgYnV0IGFuIG9iamVjdCdzIG93biBwcm9wZXJ0aWVzICovCmZ1bmN0aW9uIGdldE93blByb3BlcnRpZXMob2JqKSB7CiAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIG9iaiAhPT0gbnVsbCkgewogICAgY29uc3QgZXh0cmFjdGVkUHJvcHMgPSB7fTsKICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gb2JqKSB7CiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wZXJ0eSkpIHsKICAgICAgICBleHRyYWN0ZWRQcm9wc1twcm9wZXJ0eV0gPSAob2JqIClbcHJvcGVydHldOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZXh0cmFjdGVkUHJvcHM7CiAgfSBlbHNlIHsKICAgIHJldHVybiB7fTsKICB9Cn0KCi8qKgogKiBHaXZlbiBhbnkgb2JqZWN0LCByZXR1cm4gYSBuZXcgb2JqZWN0IGhhdmluZyByZW1vdmVkIGFsbCBmaWVsZHMgd2hvc2UgdmFsdWUgd2FzIGB1bmRlZmluZWRgLgogKiBXb3JrcyByZWN1cnNpdmVseSBvbiBvYmplY3RzIGFuZCBhcnJheXMuCiAqCiAqIEF0dGVudGlvbjogVGhpcyBmdW5jdGlvbiBrZWVwcyBjaXJjdWxhciByZWZlcmVuY2VzIGluIHRoZSByZXR1cm5lZCBvYmplY3QuCiAqLwpmdW5jdGlvbiBkcm9wVW5kZWZpbmVkS2V5cyhpbnB1dFZhbHVlKSB7CiAgLy8gVGhpcyBtYXAga2VlcHMgdHJhY2sgb2Ygd2hhdCBhbHJlYWR5IHZpc2l0ZWQgbm9kZXMgbWFwIHRvLgogIC8vIE91ciBTZXQgLSBiYXNlZCBtZW1vQnVpbGRlciBkb2Vzbid0IHdvcmsgaGVyZSBiZWNhdXNlIHdlIHdhbnQgdG8gdGhlIG91dHB1dCBvYmplY3QgdG8gaGF2ZSB0aGUgc2FtZSBjaXJjdWxhcgogIC8vIHJlZmVyZW5jZXMgYXMgdGhlIGlucHV0IG9iamVjdC4KICBjb25zdCBtZW1vaXphdGlvbk1hcCA9IG5ldyBNYXAoKTsKCiAgLy8gVGhpcyBmdW5jdGlvbiBqdXN0IHByb3hpZXMgYF9kcm9wVW5kZWZpbmVkS2V5c2AgdG8ga2VlcCB0aGUgYG1lbW9CdWlsZGVyYCBvdXQgb2YgdGhpcyBmdW5jdGlvbidzIEFQSQogIHJldHVybiBfZHJvcFVuZGVmaW5lZEtleXMoaW5wdXRWYWx1ZSwgbWVtb2l6YXRpb25NYXApOwp9CgpmdW5jdGlvbiBfZHJvcFVuZGVmaW5lZEtleXMoaW5wdXRWYWx1ZSwgbWVtb2l6YXRpb25NYXApIHsKICBpZiAoaXNQb2pvKGlucHV0VmFsdWUpKSB7CiAgICAvLyBJZiB0aGlzIG5vZGUgaGFzIGFscmVhZHkgYmVlbiB2aXNpdGVkIGR1ZSB0byBhIGNpcmN1bGFyIHJlZmVyZW5jZSwgcmV0dXJuIHRoZSBvYmplY3QgaXQgd2FzIG1hcHBlZCB0byBpbiB0aGUgbmV3IG9iamVjdAogICAgY29uc3QgbWVtb1ZhbCA9IG1lbW9pemF0aW9uTWFwLmdldChpbnB1dFZhbHVlKTsKICAgIGlmIChtZW1vVmFsICE9PSB1bmRlZmluZWQpIHsKICAgICAgcmV0dXJuIG1lbW9WYWwgOwogICAgfQoKICAgIGNvbnN0IHJldHVyblZhbHVlID0ge307CiAgICAvLyBTdG9yZSB0aGUgbWFwcGluZyBvZiB0aGlzIHZhbHVlIGluIGNhc2Ugd2UgdmlzaXQgaXQgYWdhaW4sIGluIGNhc2Ugb2YgY2lyY3VsYXIgZGF0YQogICAgbWVtb2l6YXRpb25NYXAuc2V0KGlucHV0VmFsdWUsIHJldHVyblZhbHVlKTsKCiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhpbnB1dFZhbHVlKSkgewogICAgICBpZiAodHlwZW9mIGlucHV0VmFsdWVba2V5XSAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICByZXR1cm5WYWx1ZVtrZXldID0gX2Ryb3BVbmRlZmluZWRLZXlzKGlucHV0VmFsdWVba2V5XSwgbWVtb2l6YXRpb25NYXApOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIHJldHVyblZhbHVlIDsKICB9CgogIGlmIChBcnJheS5pc0FycmF5KGlucHV0VmFsdWUpKSB7CiAgICAvLyBJZiB0aGlzIG5vZGUgaGFzIGFscmVhZHkgYmVlbiB2aXNpdGVkIGR1ZSB0byBhIGNpcmN1bGFyIHJlZmVyZW5jZSwgcmV0dXJuIHRoZSBhcnJheSBpdCB3YXMgbWFwcGVkIHRvIGluIHRoZSBuZXcgb2JqZWN0CiAgICBjb25zdCBtZW1vVmFsID0gbWVtb2l6YXRpb25NYXAuZ2V0KGlucHV0VmFsdWUpOwogICAgaWYgKG1lbW9WYWwgIT09IHVuZGVmaW5lZCkgewogICAgICByZXR1cm4gbWVtb1ZhbCA7CiAgICB9CgogICAgY29uc3QgcmV0dXJuVmFsdWUgPSBbXTsKICAgIC8vIFN0b3JlIHRoZSBtYXBwaW5nIG9mIHRoaXMgdmFsdWUgaW4gY2FzZSB3ZSB2aXNpdCBpdCBhZ2FpbiwgaW4gY2FzZSBvZiBjaXJjdWxhciBkYXRhCiAgICBtZW1vaXphdGlvbk1hcC5zZXQoaW5wdXRWYWx1ZSwgcmV0dXJuVmFsdWUpOwoKICAgIGlucHV0VmFsdWUuZm9yRWFjaCgoaXRlbSkgPT4gewogICAgICByZXR1cm5WYWx1ZS5wdXNoKF9kcm9wVW5kZWZpbmVkS2V5cyhpdGVtLCBtZW1vaXphdGlvbk1hcCkpOwogICAgfSk7CgogICAgcmV0dXJuIHJldHVyblZhbHVlIDsKICB9CgogIHJldHVybiBpbnB1dFZhbHVlOwp9CgpmdW5jdGlvbiBpc1Bvam8oaW5wdXQpIHsKICBpZiAoIWlzUGxhaW5PYmplY3QoaW5wdXQpKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICB0cnkgewogICAgY29uc3QgbmFtZSA9IChPYmplY3QuZ2V0UHJvdG90eXBlT2YoaW5wdXQpICkuY29uc3RydWN0b3IubmFtZTsKICAgIHJldHVybiAhbmFtZSB8fCBuYW1lID09PSAnT2JqZWN0JzsKICB9IGNhdGNoIChlKSB7CiAgICByZXR1cm4gdHJ1ZTsKICB9Cn0KCi8qKgogKiBEb2VzIHRoaXMgZmlsZW5hbWUgbG9vayBsaWtlIGl0J3MgcGFydCBvZiB0aGUgYXBwIGNvZGU/CiAqLwpmdW5jdGlvbiBmaWxlbmFtZUlzSW5BcHAoZmlsZW5hbWUsIGlzTmF0aXZlID0gZmFsc2UpIHsKICBjb25zdCBpc0ludGVybmFsID0KICAgIGlzTmF0aXZlIHx8CiAgICAoZmlsZW5hbWUgJiYKICAgICAgLy8gSXQncyBub3QgaW50ZXJuYWwgaWYgaXQncyBhbiBhYnNvbHV0ZSBsaW51eCBwYXRoCiAgICAgICFmaWxlbmFtZS5zdGFydHNXaXRoKCcvJykgJiYKICAgICAgLy8gSXQncyBub3QgaW50ZXJuYWwgaWYgaXQncyBhbiBhYnNvbHV0ZSB3aW5kb3dzIHBhdGgKICAgICAgIWZpbGVuYW1lLm1hdGNoKC9eW0EtWl06LykgJiYKICAgICAgLy8gSXQncyBub3QgaW50ZXJuYWwgaWYgdGhlIHBhdGggaXMgc3RhcnRpbmcgd2l0aCBhIGRvdAogICAgICAhZmlsZW5hbWUuc3RhcnRzV2l0aCgnLicpICYmCiAgICAgIC8vIEl0J3Mgbm90IGludGVybmFsIGlmIHRoZSBmcmFtZSBoYXMgYSBwcm90b2NvbC4gSW4gbm9kZSwgdGhpcyBpcyB1c3VhbGx5IHRoZSBjYXNlIGlmIHRoZSBmaWxlIGdvdCBwcmUtcHJvY2Vzc2VkIHdpdGggYSBidW5kbGVyIGxpa2Ugd2VicGFjawogICAgICAhZmlsZW5hbWUubWF0Y2goL15bYS16QS1aXShbYS16QS1aMC05LlwtK10pKjpcL1wvLykpOyAvLyBTY2hlbWEgZnJvbTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzM2NDE3ODIKCiAgLy8gaW5fYXBwIGlzIGFsbCB0aGF0J3Mgbm90IGFuIGludGVybmFsIE5vZGUgZnVuY3Rpb24gb3IgYSBtb2R1bGUgd2l0aGluIG5vZGVfbW9kdWxlcwogIC8vIG5vdGUgdGhhdCBpc05hdGl2ZSBhcHBlYXJzIHRvIHJldHVybiB0cnVlIGV2ZW4gZm9yIG5vZGUgY29yZSBsaWJyYXJpZXMKICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2dldHNlbnRyeS9yYXZlbi1ub2RlL2lzc3Vlcy8xNzYKCiAgcmV0dXJuICFpc0ludGVybmFsICYmIGZpbGVuYW1lICE9PSB1bmRlZmluZWQgJiYgIWZpbGVuYW1lLmluY2x1ZGVzKCdub2RlX21vZHVsZXMvJyk7Cn0KCmNvbnN0IFNUQUNLVFJBQ0VfRlJBTUVfTElNSVQgPSA1MDsKY29uc3QgU1RSSVBfRlJBTUVfUkVHRVhQID0gL2NhcHR1cmVNZXNzYWdlfGNhcHR1cmVFeGNlcHRpb24vOwoKLyoqCiAqIFJlbW92ZXMgU2VudHJ5IGZyYW1lcyBmcm9tIHRoZSB0b3AgYW5kIGJvdHRvbSBvZiB0aGUgc3RhY2sgaWYgcHJlc2VudCBhbmQgZW5mb3JjZXMgYSBsaW1pdCBvZiBtYXggbnVtYmVyIG9mIGZyYW1lcy4KICogQXNzdW1lcyBzdGFjayBpbnB1dCBpcyBvcmRlcmVkIGZyb20gdG9wIHRvIGJvdHRvbSBhbmQgcmV0dXJucyB0aGUgcmV2ZXJzZSByZXByZXNlbnRhdGlvbiBzbyBjYWxsIHNpdGUgb2YgdGhlCiAqIGZ1bmN0aW9uIHRoYXQgY2F1c2VkIHRoZSBjcmFzaCBpcyB0aGUgbGFzdCBmcmFtZSBpbiB0aGUgYXJyYXkuCiAqIEBoaWRkZW4KICovCmZ1bmN0aW9uIHN0cmlwU2VudHJ5RnJhbWVzQW5kUmV2ZXJzZShzdGFjaykgewogIGlmICghc3RhY2subGVuZ3RoKSB7CiAgICByZXR1cm4gW107CiAgfQoKICBjb25zdCBsb2NhbFN0YWNrID0gQXJyYXkuZnJvbShzdGFjayk7CgogIC8vIElmIHN0YWNrIHN0YXJ0cyB3aXRoIG9uZSBvZiBvdXIgQVBJIGNhbGxzLCByZW1vdmUgaXQgKHN0YXJ0cywgbWVhbmluZyBpdCdzIHRoZSB0b3Agb2YgdGhlIHN0YWNrIC0gYWthIGxhc3QgY2FsbCkKICBpZiAoL3NlbnRyeVdyYXBwZWQvLnRlc3QobG9jYWxTdGFja1tsb2NhbFN0YWNrLmxlbmd0aCAtIDFdLmZ1bmN0aW9uIHx8ICcnKSkgewogICAgbG9jYWxTdGFjay5wb3AoKTsKICB9CgogIC8vIFJldmVyc2luZyBpbiB0aGUgbWlkZGxlIG9mIHRoZSBwcm9jZWR1cmUgYWxsb3dzIHVzIHRvIGp1c3QgcG9wIHRoZSB2YWx1ZXMgb2ZmIHRoZSBzdGFjawogIGxvY2FsU3RhY2sucmV2ZXJzZSgpOwoKICAvLyBJZiBzdGFjayBlbmRzIHdpdGggb25lIG9mIG91ciBpbnRlcm5hbCBBUEkgY2FsbHMsIHJlbW92ZSBpdCAoZW5kcywgbWVhbmluZyBpdCdzIHRoZSBib3R0b20gb2YgdGhlIHN0YWNrIC0gYWthIHRvcC1tb3N0IGNhbGwpCiAgaWYgKFNUUklQX0ZSQU1FX1JFR0VYUC50ZXN0KGxvY2FsU3RhY2tbbG9jYWxTdGFjay5sZW5ndGggLSAxXS5mdW5jdGlvbiB8fCAnJykpIHsKICAgIGxvY2FsU3RhY2sucG9wKCk7CgogICAgLy8gV2hlbiB1c2luZyBzeW50aGV0aWMgZXZlbnRzLCB3ZSB3aWxsIGhhdmUgYSAyIGxldmVscyBkZWVwIHN0YWNrLCBhcyBgbmV3IEVycm9yKCdTZW50cnkgc3ludGhldGljRXhjZXB0aW9uJylgCiAgICAvLyBpcyBwcm9kdWNlZCB3aXRoaW4gdGhlIGh1YiBpdHNlbGYsIG1ha2luZyBpdDoKICAgIC8vCiAgICAvLyAgIFNlbnRyeS5jYXB0dXJlRXhjZXB0aW9uKCkKICAgIC8vICAgZ2V0Q3VycmVudEh1YigpLmNhcHR1cmVFeGNlcHRpb24oKQogICAgLy8KICAgIC8vIGluc3RlYWQgb2YganVzdCB0aGUgdG9wIGBTZW50cnlgIGNhbGwgaXRzZWxmLgogICAgLy8gVGhpcyBmb3JjZXMgdXMgdG8gcG9zc2libHkgc3RyaXAgYW4gYWRkaXRpb25hbCBmcmFtZSBpbiB0aGUgZXhhY3Qgc2FtZSB3YXMgYXMgYWJvdmUuCiAgICBpZiAoU1RSSVBfRlJBTUVfUkVHRVhQLnRlc3QobG9jYWxTdGFja1tsb2NhbFN0YWNrLmxlbmd0aCAtIDFdLmZ1bmN0aW9uIHx8ICcnKSkgewogICAgICBsb2NhbFN0YWNrLnBvcCgpOwogICAgfQogIH0KCiAgcmV0dXJuIGxvY2FsU3RhY2suc2xpY2UoMCwgU1RBQ0tUUkFDRV9GUkFNRV9MSU1JVCkubWFwKGZyYW1lID0+ICh7CiAgICAuLi5mcmFtZSwKICAgIGZpbGVuYW1lOiBmcmFtZS5maWxlbmFtZSB8fCBsb2NhbFN0YWNrW2xvY2FsU3RhY2subGVuZ3RoIC0gMV0uZmlsZW5hbWUsCiAgICBmdW5jdGlvbjogZnJhbWUuZnVuY3Rpb24gfHwgJz8nLAogIH0pKTsKfQoKY29uc3QgZGVmYXVsdEZ1bmN0aW9uTmFtZSA9ICc8YW5vbnltb3VzPic7CgovKioKICogU2FmZWx5IGV4dHJhY3QgZnVuY3Rpb24gbmFtZSBmcm9tIGl0c2VsZgogKi8KZnVuY3Rpb24gZ2V0RnVuY3Rpb25OYW1lKGZuKSB7CiAgdHJ5IHsKICAgIGlmICghZm4gfHwgdHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7CiAgICAgIHJldHVybiBkZWZhdWx0RnVuY3Rpb25OYW1lOwogICAgfQogICAgcmV0dXJuIGZuLm5hbWUgfHwgZGVmYXVsdEZ1bmN0aW9uTmFtZTsKICB9IGNhdGNoIChlKSB7CiAgICAvLyBKdXN0IGFjY2Vzc2luZyBjdXN0b20gcHJvcHMgaW4gc29tZSBTZWxlbml1bSBlbnZpcm9ubWVudHMKICAgIC8vIGNhbiBjYXVzZSBhICJQZXJtaXNzaW9uIGRlbmllZCIgZXhjZXB0aW9uIChzZWUgcmF2ZW4tanMjNDk1KS4KICAgIHJldHVybiBkZWZhdWx0RnVuY3Rpb25OYW1lOwogIH0KfQoKLyoqCiAqIFVVSUQ0IGdlbmVyYXRvcgogKgogKiBAcmV0dXJucyBzdHJpbmcgR2VuZXJhdGVkIFVVSUQ0LgogKi8KZnVuY3Rpb24gdXVpZDQoKSB7CiAgY29uc3QgZ2JsID0gR0xPQkFMX09CSiA7CiAgY29uc3QgY3J5cHRvID0gZ2JsLmNyeXB0byB8fCBnYmwubXNDcnlwdG87CgogIGxldCBnZXRSYW5kb21CeXRlID0gKCkgPT4gTWF0aC5yYW5kb20oKSAqIDE2OwogIHRyeSB7CiAgICBpZiAoY3J5cHRvICYmIGNyeXB0by5yYW5kb21VVUlEKSB7CiAgICAgIHJldHVybiBjcnlwdG8ucmFuZG9tVVVJRCgpLnJlcGxhY2UoLy0vZywgJycpOwogICAgfQogICAgaWYgKGNyeXB0byAmJiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKSB7CiAgICAgIGdldFJhbmRvbUJ5dGUgPSAoKSA9PiB7CiAgICAgICAgLy8gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyBtaWdodCByZXR1cm4gdW5kZWZpbmVkIGluc3RlYWQgb2YgdGhlIHR5cGVkIGFycmF5CiAgICAgICAgLy8gaW4gb2xkIENocm9taXVtIHZlcnNpb25zIChlLmcuIDIzLjAuMTIzNS4wICgxNTE0MjIpKQogICAgICAgIC8vIEhvd2V2ZXIsIGB0eXBlZEFycmF5YCBpcyBzdGlsbCBmaWxsZWQgaW4tcGxhY2UuCiAgICAgICAgLy8gQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQ3J5cHRvL2dldFJhbmRvbVZhbHVlcyN0eXBlZGFycmF5CiAgICAgICAgY29uc3QgdHlwZWRBcnJheSA9IG5ldyBVaW50OEFycmF5KDEpOwogICAgICAgIGNyeXB0by5nZXRSYW5kb21WYWx1ZXModHlwZWRBcnJheSk7CiAgICAgICAgcmV0dXJuIHR5cGVkQXJyYXlbMF07CiAgICAgIH07CiAgICB9CiAgfSBjYXRjaCAoXykgewogICAgLy8gc29tZSBydW50aW1lcyBjYW4gY3Jhc2ggaW52b2tpbmcgY3J5cHRvCiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3NlbnRyeS1qYXZhc2NyaXB0L2lzc3Vlcy84OTM1CiAgfQoKICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzEwNTAzNC9ob3ctdG8tY3JlYXRlLWEtZ3VpZC11dWlkLWluLWphdmFzY3JpcHQvMjExNzUyMyMyMTE3NTIzCiAgLy8gQ29uY2F0ZW5hdGluZyB0aGUgZm9sbG93aW5nIG51bWJlcnMgYXMgc3RyaW5ncyByZXN1bHRzIGluICcxMDAwMDAwMDEwMDA0MDAwODAwMDEwMDAwMDAwMDAwMCcKICByZXR1cm4gKChbMWU3XSApICsgMWUzICsgNGUzICsgOGUzICsgMWUxMSkucmVwbGFjZSgvWzAxOF0vZywgYyA9PgogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2UKICAgICgoYyApIF4gKChnZXRSYW5kb21CeXRlKCkgJiAxNSkgPj4gKChjICkgLyA0KSkpLnRvU3RyaW5nKDE2KSwKICApOwp9CgovKioKICogQ2hlY2tzIHdoZXRoZXIgdGhlIGdpdmVuIGlucHV0IGlzIGFscmVhZHkgYW4gYXJyYXksIGFuZCBpZiBpdCBpc24ndCwgd3JhcHMgaXQgaW4gb25lLgogKgogKiBAcGFyYW0gbWF5YmVBcnJheSBJbnB1dCB0byB0dXJuIGludG8gYW4gYXJyYXksIGlmIG5lY2Vzc2FyeQogKiBAcmV0dXJucyBUaGUgaW5wdXQsIGlmIGFscmVhZHkgYW4gYXJyYXksIG9yIGFuIGFycmF5IHdpdGggdGhlIGlucHV0IGFzIHRoZSBvbmx5IGVsZW1lbnQsIGlmIG5vdAogKi8KZnVuY3Rpb24gYXJyYXlpZnkobWF5YmVBcnJheSkgewogIHJldHVybiBBcnJheS5pc0FycmF5KG1heWJlQXJyYXkpID8gbWF5YmVBcnJheSA6IFttYXliZUFycmF5XTsKfQoKLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzICovCi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi8KCi8qKgogKiBIZWxwZXIgdG8gZGVjeWNsZSBqc29uIG9iamVjdHMKICovCmZ1bmN0aW9uIG1lbW9CdWlsZGVyKCkgewogIGNvbnN0IGhhc1dlYWtTZXQgPSB0eXBlb2YgV2Vha1NldCA9PT0gJ2Z1bmN0aW9uJzsKICBjb25zdCBpbm5lciA9IGhhc1dlYWtTZXQgPyBuZXcgV2Vha1NldCgpIDogW107CiAgZnVuY3Rpb24gbWVtb2l6ZShvYmopIHsKICAgIGlmIChoYXNXZWFrU2V0KSB7CiAgICAgIGlmIChpbm5lci5oYXMob2JqKSkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIGlubmVyLmFkZChvYmopOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3ByZWZlci1mb3Itb2YKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5uZXIubGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgdmFsdWUgPSBpbm5lcltpXTsKICAgICAgaWYgKHZhbHVlID09PSBvYmopIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgaW5uZXIucHVzaChvYmopOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgZnVuY3Rpb24gdW5tZW1vaXplKG9iaikgewogICAgaWYgKGhhc1dlYWtTZXQpIHsKICAgICAgaW5uZXIuZGVsZXRlKG9iaik7CiAgICB9IGVsc2UgewogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlubmVyLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKGlubmVyW2ldID09PSBvYmopIHsKICAgICAgICAgIGlubmVyLnNwbGljZShpLCAxKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KICByZXR1cm4gW21lbW9pemUsIHVubWVtb2l6ZV07Cn0KCi8qKgogKiBSZWN1cnNpdmVseSBub3JtYWxpemVzIHRoZSBnaXZlbiBvYmplY3QuCiAqCiAqIC0gQ3JlYXRlcyBhIGNvcHkgdG8gcHJldmVudCBvcmlnaW5hbCBpbnB1dCBtdXRhdGlvbgogKiAtIFNraXBzIG5vbi1lbnVtZXJhYmxlIHByb3BlcnRpZXMKICogLSBXaGVuIHN0cmluZ2lmeWluZywgY2FsbHMgYHRvSlNPTmAgaWYgaW1wbGVtZW50ZWQKICogLSBSZW1vdmVzIGNpcmN1bGFyIHJlZmVyZW5jZXMKICogLSBUcmFuc2xhdGVzIG5vbi1zZXJpYWxpemFibGUgdmFsdWVzIChgdW5kZWZpbmVkYC9gTmFOYC9mdW5jdGlvbnMpIHRvIHNlcmlhbGl6YWJsZSBmb3JtYXQKICogLSBUcmFuc2xhdGVzIGtub3duIGdsb2JhbCBvYmplY3RzL2NsYXNzZXMgdG8gYSBzdHJpbmcgcmVwcmVzZW50YXRpb25zCiAqIC0gVGFrZXMgY2FyZSBvZiBgRXJyb3JgIG9iamVjdCBzZXJpYWxpemF0aW9uCiAqIC0gT3B0aW9uYWxseSBsaW1pdHMgZGVwdGggb2YgZmluYWwgb3V0cHV0CiAqIC0gT3B0aW9uYWxseSBsaW1pdHMgbnVtYmVyIG9mIHByb3BlcnRpZXMvZWxlbWVudHMgaW5jbHVkZWQgaW4gYW55IHNpbmdsZSBvYmplY3QvYXJyYXkKICoKICogQHBhcmFtIGlucHV0IFRoZSBvYmplY3QgdG8gYmUgbm9ybWFsaXplZC4KICogQHBhcmFtIGRlcHRoIFRoZSBtYXggZGVwdGggdG8gd2hpY2ggdG8gbm9ybWFsaXplIHRoZSBvYmplY3QuIChBbnl0aGluZyBkZWVwZXIgc3RyaW5naWZpZWQgd2hvbGUuKQogKiBAcGFyYW0gbWF4UHJvcGVydGllcyBUaGUgbWF4IG51bWJlciBvZiBlbGVtZW50cyBvciBwcm9wZXJ0aWVzIHRvIGJlIGluY2x1ZGVkIGluIGFueSBzaW5nbGUgYXJyYXkgb3IKICogb2JqZWN0IGluIHRoZSBub3JtYWxsaXplZCBvdXRwdXQuCiAqIEByZXR1cm5zIEEgbm9ybWFsaXplZCB2ZXJzaW9uIG9mIHRoZSBvYmplY3QsIG9yIGAiKipub24tc2VyaWFsaXphYmxlKioiYCBpZiBhbnkgZXJyb3JzIGFyZSB0aHJvd24gZHVyaW5nIG5vcm1hbGl6YXRpb24uCiAqLwovLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueQpmdW5jdGlvbiBub3JtYWxpemUoaW5wdXQsIGRlcHRoID0gMTAwLCBtYXhQcm9wZXJ0aWVzID0gK0luZmluaXR5KSB7CiAgdHJ5IHsKICAgIC8vIHNpbmNlIHdlJ3JlIGF0IHRoZSBvdXRlcm1vc3QgbGV2ZWwsIHdlIGRvbid0IHByb3ZpZGUgYSBrZXkKICAgIHJldHVybiB2aXNpdCgnJywgaW5wdXQsIGRlcHRoLCBtYXhQcm9wZXJ0aWVzKTsKICB9IGNhdGNoIChlcnIpIHsKICAgIHJldHVybiB7IEVSUk9SOiBgKipub24tc2VyaWFsaXphYmxlKiogKCR7ZXJyfSlgIH07CiAgfQp9CgovKioKICogVmlzaXRzIGEgbm9kZSB0byBwZXJmb3JtIG5vcm1hbGl6YXRpb24gb24gaXQKICoKICogQHBhcmFtIGtleSBUaGUga2V5IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIG5vZGUKICogQHBhcmFtIHZhbHVlIFRoZSBub2RlIHRvIGJlIHZpc2l0ZWQKICogQHBhcmFtIGRlcHRoIE9wdGlvbmFsIG51bWJlciBpbmRpY2F0aW5nIHRoZSBtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aAogKiBAcGFyYW0gbWF4UHJvcGVydGllcyBPcHRpb25hbCBtYXhpbXVtIG51bWJlciBvZiBwcm9wZXJ0aWVzL2VsZW1lbnRzIGluY2x1ZGVkIGluIGFueSBzaW5nbGUgb2JqZWN0L2FycmF5CiAqIEBwYXJhbSBtZW1vIE9wdGlvbmFsIE1lbW8gY2xhc3MgaGFuZGxpbmcgZGVjeWNsaW5nCiAqLwpmdW5jdGlvbiB2aXNpdCgKICBrZXksCiAgdmFsdWUsCiAgZGVwdGggPSArSW5maW5pdHksCiAgbWF4UHJvcGVydGllcyA9ICtJbmZpbml0eSwKICBtZW1vID0gbWVtb0J1aWxkZXIoKSwKKSB7CiAgY29uc3QgW21lbW9pemUsIHVubWVtb2l6ZV0gPSBtZW1vOwoKICAvLyBHZXQgdGhlIHNpbXBsZSBjYXNlcyBvdXQgb2YgdGhlIHdheSBmaXJzdAogIGlmICgKICAgIHZhbHVlID09IG51bGwgfHwgLy8gdGhpcyBtYXRjaGVzIG51bGwgYW5kIHVuZGVmaW5lZCAtPiBlcWVxIG5vdCBlcWVxZXEKICAgIChbJ251bWJlcicsICdib29sZWFuJywgJ3N0cmluZyddLmluY2x1ZGVzKHR5cGVvZiB2YWx1ZSkgJiYgIWlzTmFOJDEodmFsdWUpKQogICkgewogICAgcmV0dXJuIHZhbHVlIDsKICB9CgogIGNvbnN0IHN0cmluZ2lmaWVkID0gc3RyaW5naWZ5VmFsdWUoa2V5LCB2YWx1ZSk7CgogIC8vIEFueXRoaW5nIHdlIGNvdWxkIHBvdGVudGlhbGx5IGRpZyBpbnRvIG1vcmUgKG9iamVjdHMgb3IgYXJyYXlzKSB3aWxsIGhhdmUgY29tZSBiYWNrIGFzIGAiW29iamVjdCBYWFhYXSJgLgogIC8vIEV2ZXJ5dGhpbmcgZWxzZSB3aWxsIGhhdmUgYWxyZWFkeSBiZWVuIHNlcmlhbGl6ZWQsIHNvIGlmIHdlIGRvbid0IHNlZSB0aGF0IHBhdHRlcm4sIHdlJ3JlIGRvbmUuCiAgaWYgKCFzdHJpbmdpZmllZC5zdGFydHNXaXRoKCdbb2JqZWN0ICcpKSB7CiAgICByZXR1cm4gc3RyaW5naWZpZWQ7CiAgfQoKICAvLyBGcm9tIGhlcmUgb24sIHdlIGNhbiBhc3NlcnQgdGhhdCBgdmFsdWVgIGlzIGVpdGhlciBhbiBvYmplY3Qgb3IgYW4gYXJyYXkuCgogIC8vIERvIG5vdCBub3JtYWxpemUgb2JqZWN0cyB0aGF0IHdlIGtub3cgaGF2ZSBhbHJlYWR5IGJlZW4gbm9ybWFsaXplZC4gQXMgYSBnZW5lcmFsIHJ1bGUsIHRoZQogIC8vICJfX3NlbnRyeV9za2lwX25vcm1hbGl6YXRpb25fXyIgcHJvcGVydHkgc2hvdWxkIG9ubHkgYmUgdXNlZCBzcGFyaW5nbHkgYW5kIG9ubHkgc2hvdWxkIG9ubHkgYmUgc2V0IG9uIG9iamVjdHMgdGhhdAogIC8vIGhhdmUgYWxyZWFkeSBiZWVuIG5vcm1hbGl6ZWQuCiAgaWYgKCh2YWx1ZSApWydfX3NlbnRyeV9za2lwX25vcm1hbGl6YXRpb25fXyddKSB7CiAgICByZXR1cm4gdmFsdWUgOwogIH0KCiAgLy8gV2UgY2FuIHNldCBgX19zZW50cnlfb3ZlcnJpZGVfbm9ybWFsaXphdGlvbl9kZXB0aF9fYCBvbiBhbiBvYmplY3QgdG8gZW5zdXJlIHRoYXQgZnJvbSB0aGVyZQogIC8vIFdlIGtlZXAgYSBjZXJ0YWluIGFtb3VudCBvZiBkZXB0aC4KICAvLyBUaGlzIHNob3VsZCBiZSB1c2VkIHNwYXJpbmdseSwgZS5nLiB3ZSB1c2UgaXQgZm9yIHRoZSByZWR1eCBpbnRlZ3JhdGlvbiB0byBlbnN1cmUgd2UgZ2V0IGEgY2VydGFpbiBhbW91bnQgb2Ygc3RhdGUuCiAgY29uc3QgcmVtYWluaW5nRGVwdGggPQogICAgdHlwZW9mICh2YWx1ZSApWydfX3NlbnRyeV9vdmVycmlkZV9ub3JtYWxpemF0aW9uX2RlcHRoX18nXSA9PT0gJ251bWJlcicKICAgICAgPyAoKHZhbHVlIClbJ19fc2VudHJ5X292ZXJyaWRlX25vcm1hbGl6YXRpb25fZGVwdGhfXyddICkKICAgICAgOiBkZXB0aDsKCiAgLy8gV2UncmUgYWxzbyBkb25lIGlmIHdlJ3ZlIHJlYWNoZWQgdGhlIG1heCBkZXB0aAogIGlmIChyZW1haW5pbmdEZXB0aCA9PT0gMCkgewogICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBrbm93IGBzZXJpYWxpemVkYCBpcyBhIHN0cmluZyBvZiB0aGUgZm9ybSBgIltvYmplY3QgWFhYWF0iYC4gQ2xlYW4gaXQgdXAgc28gaXQncyBqdXN0IGAiW1hYWFhdImAuCiAgICByZXR1cm4gc3RyaW5naWZpZWQucmVwbGFjZSgnb2JqZWN0ICcsICcnKTsKICB9CgogIC8vIElmIHdlJ3ZlIGFscmVhZHkgdmlzaXRlZCB0aGlzIGJyYW5jaCwgYmFpbCBvdXQsIGFzIGl0J3MgY2lyY3VsYXIgcmVmZXJlbmNlLiBJZiBub3QsIG5vdGUgdGhhdCB3ZSdyZSBzZWVpbmcgaXQgbm93LgogIGlmIChtZW1vaXplKHZhbHVlKSkgewogICAgcmV0dXJuICdbQ2lyY3VsYXIgfl0nOwogIH0KCiAgLy8gSWYgdGhlIHZhbHVlIGhhcyBhIGB0b0pTT05gIG1ldGhvZCwgd2UgY2FsbCBpdCB0byBleHRyYWN0IG1vcmUgaW5mb3JtYXRpb24KICBjb25zdCB2YWx1ZVdpdGhUb0pTT04gPSB2YWx1ZSA7CiAgaWYgKHZhbHVlV2l0aFRvSlNPTiAmJiB0eXBlb2YgdmFsdWVXaXRoVG9KU09OLnRvSlNPTiA9PT0gJ2Z1bmN0aW9uJykgewogICAgdHJ5IHsKICAgICAgY29uc3QganNvblZhbHVlID0gdmFsdWVXaXRoVG9KU09OLnRvSlNPTigpOwogICAgICAvLyBXZSBuZWVkIHRvIG5vcm1hbGl6ZSB0aGUgcmV0dXJuIHZhbHVlIG9mIGAudG9KU09OKClgIGluIGNhc2UgaXQgaGFzIGNpcmN1bGFyIHJlZmVyZW5jZXMKICAgICAgcmV0dXJuIHZpc2l0KCcnLCBqc29uVmFsdWUsIHJlbWFpbmluZ0RlcHRoIC0gMSwgbWF4UHJvcGVydGllcywgbWVtbyk7CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgLy8gcGFzcyAoVGhlIGJ1aWx0LWluIGB0b0pTT05gIGZhaWxlZCwgYnV0IHdlIGNhbiBzdGlsbCB0cnkgdG8gZG8gaXQgb3Vyc2VsdmVzKQogICAgfQogIH0KCiAgLy8gQXQgdGhpcyBwb2ludCB3ZSBrbm93IHdlIGVpdGhlciBoYXZlIGFuIG9iamVjdCBvciBhbiBhcnJheSwgd2UgaGF2ZW4ndCBzZWVuIGl0IGJlZm9yZSwgYW5kIHdlJ3JlIGdvaW5nIHRvIHJlY3Vyc2UKICAvLyBiZWNhdXNlIHdlIGhhdmVuJ3QgeWV0IHJlYWNoZWQgdGhlIG1heCBkZXB0aC4gQ3JlYXRlIGFuIGFjY3VtdWxhdG9yIHRvIGhvbGQgdGhlIHJlc3VsdHMgb2YgdmlzaXRpbmcgZWFjaAogIC8vIHByb3BlcnR5L2VudHJ5LCBhbmQga2VlcCB0cmFjayBvZiB0aGUgbnVtYmVyIG9mIGl0ZW1zIHdlIGFkZCB0byBpdC4KICBjb25zdCBub3JtYWxpemVkID0gKEFycmF5LmlzQXJyYXkodmFsdWUpID8gW10gOiB7fSkgOwogIGxldCBudW1BZGRlZCA9IDA7CgogIC8vIEJlZm9yZSB3ZSBiZWdpbiwgY29udmVydGBFcnJvcmAgYW5kYEV2ZW50YCBpbnN0YW5jZXMgaW50byBwbGFpbiBvYmplY3RzLCBzaW5jZSBzb21lIG9mIGVhY2ggb2YgdGhlaXIgcmVsZXZhbnQKICAvLyBwcm9wZXJ0aWVzIGFyZSBub24tZW51bWVyYWJsZSBhbmQgb3RoZXJ3aXNlIHdvdWxkIGdldCBtaXNzZWQuCiAgY29uc3QgdmlzaXRhYmxlID0gY29udmVydFRvUGxhaW5PYmplY3QodmFsdWUgKTsKCiAgZm9yIChjb25zdCB2aXNpdEtleSBpbiB2aXNpdGFibGUpIHsKICAgIC8vIEF2b2lkIGl0ZXJhdGluZyBvdmVyIGZpZWxkcyBpbiB0aGUgcHJvdG90eXBlIGlmIHRoZXkndmUgc29tZWhvdyBiZWVuIGV4cG9zZWQgdG8gZW51bWVyYXRpb24uCiAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2aXNpdGFibGUsIHZpc2l0S2V5KSkgewogICAgICBjb250aW51ZTsKICAgIH0KCiAgICBpZiAobnVtQWRkZWQgPj0gbWF4UHJvcGVydGllcykgewogICAgICBub3JtYWxpemVkW3Zpc2l0S2V5XSA9ICdbTWF4UHJvcGVydGllcyB+XSc7CiAgICAgIGJyZWFrOwogICAgfQoKICAgIC8vIFJlY3Vyc2l2ZWx5IHZpc2l0IGFsbCB0aGUgY2hpbGQgbm9kZXMKICAgIGNvbnN0IHZpc2l0VmFsdWUgPSB2aXNpdGFibGVbdmlzaXRLZXldOwogICAgbm9ybWFsaXplZFt2aXNpdEtleV0gPSB2aXNpdCh2aXNpdEtleSwgdmlzaXRWYWx1ZSwgcmVtYWluaW5nRGVwdGggLSAxLCBtYXhQcm9wZXJ0aWVzLCBtZW1vKTsKCiAgICBudW1BZGRlZCsrOwogIH0KCiAgLy8gT25jZSB3ZSd2ZSB2aXNpdGVkIGFsbCB0aGUgYnJhbmNoZXMsIHJlbW92ZSB0aGUgcGFyZW50IGZyb20gbWVtbyBzdG9yYWdlCiAgdW5tZW1vaXplKHZhbHVlKTsKCiAgLy8gUmV0dXJuIGFjY3VtdWxhdGVkIHZhbHVlcwogIHJldHVybiBub3JtYWxpemVkOwp9CgovKiBlc2xpbnQtZGlzYWJsZSBjb21wbGV4aXR5ICovCi8qKgogKiBTdHJpbmdpZnkgdGhlIGdpdmVuIHZhbHVlLiBIYW5kbGVzIHZhcmlvdXMga25vd24gc3BlY2lhbCB2YWx1ZXMgYW5kIHR5cGVzLgogKgogKiBOb3QgbWVhbnQgdG8gYmUgdXNlZCBvbiBzaW1wbGUgcHJpbWl0aXZlcyB3aGljaCBhbHJlYWR5IGhhdmUgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24sIGFzIGl0IHdpbGwsIGZvciBleGFtcGxlLCB0dXJuCiAqIHRoZSBudW1iZXIgMTIzMSBpbnRvICJbT2JqZWN0IE51bWJlcl0iLCBub3Igb24gYG51bGxgLCBhcyBpdCB3aWxsIHRocm93LgogKgogKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHN0cmluZ2lmeQogKiBAcmV0dXJucyBBIHN0cmluZ2lmaWVkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiB2YWx1ZQogKi8KZnVuY3Rpb24gc3RyaW5naWZ5VmFsdWUoCiAga2V5LAogIC8vIHRoaXMgdHlwZSBpcyBhIHRpbnkgYml0IG9mIGEgY2hlYXQsIHNpbmNlIHRoaXMgZnVuY3Rpb24gZG9lcyBoYW5kbGUgTmFOICh3aGljaCBpcyB0ZWNobmljYWxseSBhIG51bWJlciksIGJ1dCBmb3IKICAvLyBvdXIgaW50ZXJuYWwgdXNlLCBpdCdsbCBkbwogIHZhbHVlLAopIHsKICB0cnkgewogICAgaWYgKGtleSA9PT0gJ2RvbWFpbicgJiYgdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAodmFsdWUgKS5fZXZlbnRzKSB7CiAgICAgIHJldHVybiAnW0RvbWFpbl0nOwogICAgfQoKICAgIGlmIChrZXkgPT09ICdkb21haW5FbWl0dGVyJykgewogICAgICByZXR1cm4gJ1tEb21haW5FbWl0dGVyXSc7CiAgICB9CgogICAgLy8gSXQncyBzYWZlIHRvIHVzZSBgZ2xvYmFsYCwgYHdpbmRvd2AsIGFuZCBgZG9jdW1lbnRgIGhlcmUgaW4gdGhpcyBtYW5uZXIsIGFzIHdlIGFyZSBhc3NlcnRpbmcgdXNpbmcgYHR5cGVvZmAgZmlyc3QKICAgIC8vIHdoaWNoIHdvbid0IHRocm93IGlmIHRoZXkgYXJlIG5vdCBwcmVzZW50LgoKICAgIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZSA9PT0gZ2xvYmFsKSB7CiAgICAgIHJldHVybiAnW0dsb2JhbF0nOwogICAgfQoKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHMKICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZSA9PT0gd2luZG93KSB7CiAgICAgIHJldHVybiAnW1dpbmRvd10nOwogICAgfQoKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHMKICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlID09PSBkb2N1bWVudCkgewogICAgICByZXR1cm4gJ1tEb2N1bWVudF0nOwogICAgfQoKICAgIGlmIChpc1Z1ZVZpZXdNb2RlbCh2YWx1ZSkpIHsKICAgICAgcmV0dXJuICdbVnVlVmlld01vZGVsXSc7CiAgICB9CgogICAgLy8gUmVhY3QncyBTeW50aGV0aWNFdmVudCB0aGluZ3kKICAgIGlmIChpc1N5bnRoZXRpY0V2ZW50KHZhbHVlKSkgewogICAgICByZXR1cm4gJ1tTeW50aGV0aWNFdmVudF0nOwogICAgfQoKICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlICE9PSB2YWx1ZSkgewogICAgICByZXR1cm4gJ1tOYU5dJzsKICAgIH0KCiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7CiAgICAgIHJldHVybiBgW0Z1bmN0aW9uOiAke2dldEZ1bmN0aW9uTmFtZSh2YWx1ZSl9XWA7CiAgICB9CgogICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N5bWJvbCcpIHsKICAgICAgcmV0dXJuIGBbJHtTdHJpbmcodmFsdWUpfV1gOwogICAgfQoKICAgIC8vIHN0cmluZ2lmaWVkIEJpZ0ludHMgYXJlIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gcmVndWxhciBudW1iZXJzLCBzbyB3ZSBuZWVkIHRvIGxhYmVsIHRoZW0gdG8gYXZvaWQgY29uZnVzaW9uCiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYmlnaW50JykgewogICAgICByZXR1cm4gYFtCaWdJbnQ6ICR7U3RyaW5nKHZhbHVlKX1dYDsKICAgIH0KCiAgICAvLyBOb3cgdGhhdCB3ZSd2ZSBrbm9ja2VkIG91dCBhbGwgdGhlIHNwZWNpYWwgY2FzZXMgYW5kIHRoZSBwcmltaXRpdmVzLCBhbGwgd2UgaGF2ZSBsZWZ0IGFyZSBvYmplY3RzLiBTaW1wbHkgY2FzdGluZwogICAgLy8gdGhlbSB0byBzdHJpbmdzIG1lYW5zIHRoYXQgaW5zdGFuY2VzIG9mIGNsYXNzZXMgd2hpY2ggaGF2ZW4ndCBkZWZpbmVkIHRoZWlyIGB0b1N0cmluZ1RhZ2Agd2lsbCBqdXN0IGNvbWUgb3V0IGFzCiAgICAvLyBgIltvYmplY3QgT2JqZWN0XSJgLiBJZiB3ZSBpbnN0ZWFkIGxvb2sgYXQgdGhlIGNvbnN0cnVjdG9yJ3MgbmFtZSAod2hpY2ggaXMgdGhlIHNhbWUgYXMgdGhlIG5hbWUgb2YgdGhlIGNsYXNzKSwKICAgIC8vIHdlIGNhbiBtYWtlIHN1cmUgdGhhdCBvbmx5IHBsYWluIG9iamVjdHMgY29tZSBvdXQgdGhhdCB3YXkuCiAgICBjb25zdCBvYmpOYW1lID0gZ2V0Q29uc3RydWN0b3JOYW1lKHZhbHVlKTsKCiAgICAvLyBIYW5kbGUgSFRNTCBFbGVtZW50cwogICAgaWYgKC9eSFRNTChcdyopRWxlbWVudCQvLnRlc3Qob2JqTmFtZSkpIHsKICAgICAgcmV0dXJuIGBbSFRNTEVsZW1lbnQ6ICR7b2JqTmFtZX1dYDsKICAgIH0KCiAgICByZXR1cm4gYFtvYmplY3QgJHtvYmpOYW1lfV1gOwogIH0gY2F0Y2ggKGVycikgewogICAgcmV0dXJuIGAqKm5vbi1zZXJpYWxpemFibGUqKiAoJHtlcnJ9KWA7CiAgfQp9Ci8qIGVzbGludC1lbmFibGUgY29tcGxleGl0eSAqLwoKZnVuY3Rpb24gZ2V0Q29uc3RydWN0b3JOYW1lKHZhbHVlKSB7CiAgY29uc3QgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKTsKCiAgcmV0dXJuIHByb3RvdHlwZSA/IHByb3RvdHlwZS5jb25zdHJ1Y3Rvci5uYW1lIDogJ251bGwgcHJvdG90eXBlJzsKfQoKLyoqCiAqIE5vcm1hbGl6ZXMgVVJMcyBpbiBleGNlcHRpb25zIGFuZCBzdGFja3RyYWNlcyB0byBhIGJhc2UgcGF0aCBzbyBTZW50cnkgY2FuIGZpbmdlcnByaW50CiAqIGFjcm9zcyBwbGF0Zm9ybXMgYW5kIHdvcmtpbmcgZGlyZWN0b3J5LgogKgogKiBAcGFyYW0gdXJsIFRoZSBVUkwgdG8gYmUgbm9ybWFsaXplZC4KICogQHBhcmFtIGJhc2VQYXRoIFRoZSBhcHBsaWNhdGlvbiBiYXNlIHBhdGguCiAqIEByZXR1cm5zIFRoZSBub3JtYWxpemVkIFVSTC4KICovCmZ1bmN0aW9uIG5vcm1hbGl6ZVVybFRvQmFzZSh1cmwsIGJhc2VQYXRoKSB7CiAgY29uc3QgZXNjYXBlZEJhc2UgPSBiYXNlUGF0aAogICAgLy8gQmFja3NsYXNoIHRvIGZvcndhcmQKICAgIC5yZXBsYWNlKC9cXC9nLCAnLycpCiAgICAvLyBFc2NhcGUgUmVnRXhwIHNwZWNpYWwgY2hhcmFjdGVycwogICAgLnJlcGxhY2UoL1t8XFx7fSgpW1xdXiQrKj8uXS9nLCAnXFwkJicpOwoKICBsZXQgbmV3VXJsID0gdXJsOwogIHRyeSB7CiAgICBuZXdVcmwgPSBkZWNvZGVVUkkodXJsKTsKICB9IGNhdGNoIChfT28pIHsKICAgIC8vIFNvbWV0aW1lIHRoaXMgYnJlYWtzCiAgfQogIHJldHVybiAoCiAgICBuZXdVcmwKICAgICAgLnJlcGxhY2UoL1xcL2csICcvJykKICAgICAgLnJlcGxhY2UoL3dlYnBhY2s6XC8/L2csICcnKSAvLyBSZW1vdmUgaW50ZXJtZWRpYXRlIGJhc2UgcGF0aAogICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHNlbnRyeS1pbnRlcm5hbC9zZGsvbm8tcmVnZXhwLWNvbnN0cnVjdG9yCiAgICAgIC5yZXBsYWNlKG5ldyBSZWdFeHAoYChmaWxlOi8vKT8vKiR7ZXNjYXBlZEJhc2V9LypgLCAnaWcnKSwgJ2FwcDovLy8nKQogICk7Cn0KCi8vIFNsaWdodGx5IG1vZGlmaWVkIChubyBJRTggc3VwcG9ydCwgRVM2KSBhbmQgdHJhbnNjcmliZWQgdG8gVHlwZVNjcmlwdAoKLy8gU3BsaXQgYSBmaWxlbmFtZSBpbnRvIFtyb290LCBkaXIsIGJhc2VuYW1lLCBleHRdLCB1bml4IHZlcnNpb24KLy8gJ3Jvb3QnIGlzIGp1c3QgYSBzbGFzaCwgb3Igbm90aGluZy4KY29uc3Qgc3BsaXRQYXRoUmUgPSAvXihcUys6XFx8XC8/KShbXHNcU10qPykoKD86XC57MSwyfXxbXi9cXF0rP3wpKFwuW14uL1xcXSp8KSkoPzpbL1xcXSopJC87Ci8qKiBKU0RvYyAqLwpmdW5jdGlvbiBzcGxpdFBhdGgoZmlsZW5hbWUpIHsKICAvLyBUcnVuY2F0ZSBmaWxlcyBuYW1lcyBncmVhdGVyIHRoYW4gMTAyNCBjaGFyYWN0ZXJzIHRvIGF2b2lkIHJlZ2V4IGRvcwogIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvcHVsbC84NzM3I2Rpc2N1c3Npb25fcjEyODU3MTkxNzIKICBjb25zdCB0cnVuY2F0ZWQgPSBmaWxlbmFtZS5sZW5ndGggPiAxMDI0ID8gYDx0cnVuY2F0ZWQ+JHtmaWxlbmFtZS5zbGljZSgtMTAyNCl9YCA6IGZpbGVuYW1lOwogIGNvbnN0IHBhcnRzID0gc3BsaXRQYXRoUmUuZXhlYyh0cnVuY2F0ZWQpOwogIHJldHVybiBwYXJ0cyA/IHBhcnRzLnNsaWNlKDEpIDogW107Cn0KCi8qKiBKU0RvYyAqLwpmdW5jdGlvbiBkaXJuYW1lKHBhdGgpIHsKICBjb25zdCByZXN1bHQgPSBzcGxpdFBhdGgocGF0aCk7CiAgY29uc3Qgcm9vdCA9IHJlc3VsdFswXTsKICBsZXQgZGlyID0gcmVzdWx0WzFdOwoKICBpZiAoIXJvb3QgJiYgIWRpcikgewogICAgLy8gTm8gZGlybmFtZSB3aGF0c29ldmVyCiAgICByZXR1cm4gJy4nOwogIH0KCiAgaWYgKGRpcikgewogICAgLy8gSXQgaGFzIGEgZGlybmFtZSwgc3RyaXAgdHJhaWxpbmcgc2xhc2gKICAgIGRpciA9IGRpci5zbGljZSgwLCBkaXIubGVuZ3RoIC0gMSk7CiAgfQoKICByZXR1cm4gcm9vdCArIGRpcjsKfQoKLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LWZ1bmN0aW9uLXJldHVybi10eXBlICovCgovKiogU3luY1Byb21pc2UgaW50ZXJuYWwgc3RhdGVzICovCnZhciBTdGF0ZXM7IChmdW5jdGlvbiAoU3RhdGVzKSB7CiAgLyoqIFBlbmRpbmcgKi8KICBjb25zdCBQRU5ESU5HID0gMDsgU3RhdGVzW1N0YXRlc1siUEVORElORyJdID0gUEVORElOR10gPSAiUEVORElORyI7CiAgLyoqIFJlc29sdmVkIC8gT0sgKi8KICBjb25zdCBSRVNPTFZFRCA9IDE7IFN0YXRlc1tTdGF0ZXNbIlJFU09MVkVEIl0gPSBSRVNPTFZFRF0gPSAiUkVTT0xWRUQiOwogIC8qKiBSZWplY3RlZCAvIEVycm9yICovCiAgY29uc3QgUkVKRUNURUQgPSAyOyBTdGF0ZXNbU3RhdGVzWyJSRUpFQ1RFRCJdID0gUkVKRUNURURdID0gIlJFSkVDVEVEIjsKfSkoU3RhdGVzIHx8IChTdGF0ZXMgPSB7fSkpOwoKLy8gT3ZlcmxvYWRzIHNvIHdlIGNhbiBjYWxsIHJlc29sdmVkU3luY1Byb21pc2Ugd2l0aG91dCBhcmd1bWVudHMgYW5kIGdlbmVyaWMgYXJndW1lbnQKCi8qKgogKiBDcmVhdGVzIGEgcmVzb2x2ZWQgc3luYyBwcm9taXNlLgogKgogKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIHRvIHJlc29sdmUgdGhlIHByb21pc2Ugd2l0aAogKiBAcmV0dXJucyB0aGUgcmVzb2x2ZWQgc3luYyBwcm9taXNlCiAqLwpmdW5jdGlvbiByZXNvbHZlZFN5bmNQcm9taXNlKHZhbHVlKSB7CiAgcmV0dXJuIG5ldyBTeW5jUHJvbWlzZShyZXNvbHZlID0+IHsKICAgIHJlc29sdmUodmFsdWUpOwogIH0pOwp9CgovKioKICogQ3JlYXRlcyBhIHJlamVjdGVkIHN5bmMgcHJvbWlzZS4KICoKICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZSB0byByZWplY3QgdGhlIHByb21pc2Ugd2l0aAogKiBAcmV0dXJucyB0aGUgcmVqZWN0ZWQgc3luYyBwcm9taXNlCiAqLwpmdW5jdGlvbiByZWplY3RlZFN5bmNQcm9taXNlKHJlYXNvbikgewogIHJldHVybiBuZXcgU3luY1Byb21pc2UoKF8sIHJlamVjdCkgPT4gewogICAgcmVqZWN0KHJlYXNvbik7CiAgfSk7Cn0KCi8qKgogKiBUaGVuYWJsZSBjbGFzcyB0aGF0IGJlaGF2ZXMgbGlrZSBhIFByb21pc2UgYW5kIGZvbGxvd3MgaXQncyBpbnRlcmZhY2UKICogYnV0IGlzIG5vdCBhc3luYyBpbnRlcm5hbGx5CiAqLwpjbGFzcyBTeW5jUHJvbWlzZSB7CgogICBjb25zdHJ1Y3RvcigKICAgIGV4ZWN1dG9yLAogICkge1N5bmNQcm9taXNlLnByb3RvdHlwZS5fX2luaXQuY2FsbCh0aGlzKTtTeW5jUHJvbWlzZS5wcm90b3R5cGUuX19pbml0Mi5jYWxsKHRoaXMpO1N5bmNQcm9taXNlLnByb3RvdHlwZS5fX2luaXQzLmNhbGwodGhpcyk7U3luY1Byb21pc2UucHJvdG90eXBlLl9faW5pdDQuY2FsbCh0aGlzKTsKICAgIHRoaXMuX3N0YXRlID0gU3RhdGVzLlBFTkRJTkc7CiAgICB0aGlzLl9oYW5kbGVycyA9IFtdOwoKICAgIHRyeSB7CiAgICAgIGV4ZWN1dG9yKHRoaXMuX3Jlc29sdmUsIHRoaXMuX3JlamVjdCk7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIHRoaXMuX3JlamVjdChlKTsKICAgIH0KICB9CgogIC8qKiBKU0RvYyAqLwogICB0aGVuKAogICAgb25mdWxmaWxsZWQsCiAgICBvbnJlamVjdGVkLAogICkgewogICAgcmV0dXJuIG5ldyBTeW5jUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CiAgICAgIHRoaXMuX2hhbmRsZXJzLnB1c2goWwogICAgICAgIGZhbHNlLAogICAgICAgIHJlc3VsdCA9PiB7CiAgICAgICAgICBpZiAoIW9uZnVsZmlsbGVkKSB7CiAgICAgICAgICAgIC8vIFRPRE86IMKvXF8o44OEKV8vwq8KICAgICAgICAgICAgLy8gVE9ETzogRklYTUUKICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQgKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgcmVzb2x2ZShvbmZ1bGZpbGxlZChyZXN1bHQpKTsKICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgIHJlamVjdChlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgcmVhc29uID0+IHsKICAgICAgICAgIGlmICghb25yZWplY3RlZCkgewogICAgICAgICAgICByZWplY3QocmVhc29uKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgcmVzb2x2ZShvbnJlamVjdGVkKHJlYXNvbikpOwogICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgcmVqZWN0KGUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgXSk7CiAgICAgIHRoaXMuX2V4ZWN1dGVIYW5kbGVycygpOwogICAgfSk7CiAgfQoKICAvKiogSlNEb2MgKi8KICAgY2F0Y2goCiAgICBvbnJlamVjdGVkLAogICkgewogICAgcmV0dXJuIHRoaXMudGhlbih2YWwgPT4gdmFsLCBvbnJlamVjdGVkKTsKICB9CgogIC8qKiBKU0RvYyAqLwogICBmaW5hbGx5KG9uZmluYWxseSkgewogICAgcmV0dXJuIG5ldyBTeW5jUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CiAgICAgIGxldCB2YWw7CiAgICAgIGxldCBpc1JlamVjdGVkOwoKICAgICAgcmV0dXJuIHRoaXMudGhlbigKICAgICAgICB2YWx1ZSA9PiB7CiAgICAgICAgICBpc1JlamVjdGVkID0gZmFsc2U7CiAgICAgICAgICB2YWwgPSB2YWx1ZTsKICAgICAgICAgIGlmIChvbmZpbmFsbHkpIHsKICAgICAgICAgICAgb25maW5hbGx5KCk7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICByZWFzb24gPT4gewogICAgICAgICAgaXNSZWplY3RlZCA9IHRydWU7CiAgICAgICAgICB2YWwgPSByZWFzb247CiAgICAgICAgICBpZiAob25maW5hbGx5KSB7CiAgICAgICAgICAgIG9uZmluYWxseSgpOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICkudGhlbigoKSA9PiB7CiAgICAgICAgaWYgKGlzUmVqZWN0ZWQpIHsKICAgICAgICAgIHJlamVjdCh2YWwpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgcmVzb2x2ZSh2YWwgKTsKICAgICAgfSk7CiAgICB9KTsKICB9CgogIC8qKiBKU0RvYyAqLwogICAgX19pbml0KCkge3RoaXMuX3Jlc29sdmUgPSAodmFsdWUpID0+IHsKICAgIHRoaXMuX3NldFJlc3VsdChTdGF0ZXMuUkVTT0xWRUQsIHZhbHVlKTsKICB9O30KCiAgLyoqIEpTRG9jICovCiAgICBfX2luaXQyKCkge3RoaXMuX3JlamVjdCA9IChyZWFzb24pID0+IHsKICAgIHRoaXMuX3NldFJlc3VsdChTdGF0ZXMuUkVKRUNURUQsIHJlYXNvbik7CiAgfTt9CgogIC8qKiBKU0RvYyAqLwogICAgX19pbml0MygpIHt0aGlzLl9zZXRSZXN1bHQgPSAoc3RhdGUsIHZhbHVlKSA9PiB7CiAgICBpZiAodGhpcy5fc3RhdGUgIT09IFN0YXRlcy5QRU5ESU5HKSB7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoaXNUaGVuYWJsZSh2YWx1ZSkpIHsKICAgICAgdm9pZCAodmFsdWUgKS50aGVuKHRoaXMuX3Jlc29sdmUsIHRoaXMuX3JlamVjdCk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICB0aGlzLl9zdGF0ZSA9IHN0YXRlOwogICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTsKCiAgICB0aGlzLl9leGVjdXRlSGFuZGxlcnMoKTsKICB9O30KCiAgLyoqIEpTRG9jICovCiAgICBfX2luaXQ0KCkge3RoaXMuX2V4ZWN1dGVIYW5kbGVycyA9ICgpID0+IHsKICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gU3RhdGVzLlBFTkRJTkcpIHsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGNvbnN0IGNhY2hlZEhhbmRsZXJzID0gdGhpcy5faGFuZGxlcnMuc2xpY2UoKTsKICAgIHRoaXMuX2hhbmRsZXJzID0gW107CgogICAgY2FjaGVkSGFuZGxlcnMuZm9yRWFjaChoYW5kbGVyID0+IHsKICAgICAgaWYgKGhhbmRsZXJbMF0pIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gU3RhdGVzLlJFU09MVkVEKSB7CiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1mbG9hdGluZy1wcm9taXNlcwogICAgICAgIGhhbmRsZXJbMV0odGhpcy5fdmFsdWUgKTsKICAgICAgfQoKICAgICAgaWYgKHRoaXMuX3N0YXRlID09PSBTdGF0ZXMuUkVKRUNURUQpIHsKICAgICAgICBoYW5kbGVyWzJdKHRoaXMuX3ZhbHVlKTsKICAgICAgfQoKICAgICAgaGFuZGxlclswXSA9IHRydWU7CiAgICB9KTsKICB9O30KfQoKLyoqCiAqIENyZWF0ZXMgYW4gbmV3IFByb21pc2VCdWZmZXIgb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCBsaW1pdAogKiBAcGFyYW0gbGltaXQgbWF4IG51bWJlciBvZiBwcm9taXNlcyB0aGF0IGNhbiBiZSBzdG9yZWQgaW4gdGhlIGJ1ZmZlcgogKi8KZnVuY3Rpb24gbWFrZVByb21pc2VCdWZmZXIobGltaXQpIHsKICBjb25zdCBidWZmZXIgPSBbXTsKCiAgZnVuY3Rpb24gaXNSZWFkeSgpIHsKICAgIHJldHVybiBsaW1pdCA9PT0gdW5kZWZpbmVkIHx8IGJ1ZmZlci5sZW5ndGggPCBsaW1pdDsKICB9CgogIC8qKgogICAqIFJlbW92ZSBhIHByb21pc2UgZnJvbSB0aGUgcXVldWUuCiAgICoKICAgKiBAcGFyYW0gdGFzayBDYW4gYmUgYW55IFByb21pc2VMaWtlPFQ+CiAgICogQHJldHVybnMgUmVtb3ZlZCBwcm9taXNlLgogICAqLwogIGZ1bmN0aW9uIHJlbW92ZSh0YXNrKSB7CiAgICByZXR1cm4gYnVmZmVyLnNwbGljZShidWZmZXIuaW5kZXhPZih0YXNrKSwgMSlbMF07CiAgfQoKICAvKioKICAgKiBBZGQgYSBwcm9taXNlIChyZXByZXNlbnRpbmcgYW4gaW4tZmxpZ2h0IGFjdGlvbikgdG8gdGhlIHF1ZXVlLCBhbmQgc2V0IGl0IHRvIHJlbW92ZSBpdHNlbGYgb24gZnVsZmlsbG1lbnQuCiAgICoKICAgKiBAcGFyYW0gdGFza1Byb2R1Y2VyIEEgZnVuY3Rpb24gcHJvZHVjaW5nIGFueSBQcm9taXNlTGlrZTxUPjsgSW4gcHJldmlvdXMgdmVyc2lvbnMgdGhpcyB1c2VkIHRvIGJlIGB0YXNrOgogICAqICAgICAgICBQcm9taXNlTGlrZTxUPmAsIGJ1dCB1bmRlciB0aGF0IG1vZGVsLCBQcm9taXNlcyB3ZXJlIGluc3RhbnRseSBjcmVhdGVkIG9uIHRoZSBjYWxsLXNpdGUgYW5kIHRoZWlyIGV4ZWN1dG9yCiAgICogICAgICAgIGZ1bmN0aW9ucyB0aGVyZWZvcmUgcmFuIGltbWVkaWF0ZWx5LiBUaHVzLCBldmVuIGlmIHRoZSBidWZmZXIgd2FzIGZ1bGwsIHRoZSBhY3Rpb24gc3RpbGwgaGFwcGVuZWQuIEJ5CiAgICogICAgICAgIHJlcXVpcmluZyB0aGUgcHJvbWlzZSB0byBiZSB3cmFwcGVkIGluIGEgZnVuY3Rpb24sIHdlIGNhbiBkZWZlciBwcm9taXNlIGNyZWF0aW9uIHVudGlsIGFmdGVyIHRoZSBidWZmZXIKICAgKiAgICAgICAgbGltaXQgY2hlY2suCiAgICogQHJldHVybnMgVGhlIG9yaWdpbmFsIHByb21pc2UuCiAgICovCiAgZnVuY3Rpb24gYWRkKHRhc2tQcm9kdWNlcikgewogICAgaWYgKCFpc1JlYWR5KCkpIHsKICAgICAgcmV0dXJuIHJlamVjdGVkU3luY1Byb21pc2UobmV3IFNlbnRyeUVycm9yKCdOb3QgYWRkaW5nIFByb21pc2UgYmVjYXVzZSBidWZmZXIgbGltaXQgd2FzIHJlYWNoZWQuJykpOwogICAgfQoKICAgIC8vIHN0YXJ0IHRoZSB0YXNrIGFuZCBhZGQgaXRzIHByb21pc2UgdG8gdGhlIHF1ZXVlCiAgICBjb25zdCB0YXNrID0gdGFza1Byb2R1Y2VyKCk7CiAgICBpZiAoYnVmZmVyLmluZGV4T2YodGFzaykgPT09IC0xKSB7CiAgICAgIGJ1ZmZlci5wdXNoKHRhc2spOwogICAgfQogICAgdm9pZCB0YXNrCiAgICAgIC50aGVuKCgpID0+IHJlbW92ZSh0YXNrKSkKICAgICAgLy8gVXNlIGB0aGVuKG51bGwsIHJlamVjdGlvbkhhbmRsZXIpYCByYXRoZXIgdGhhbiBgY2F0Y2gocmVqZWN0aW9uSGFuZGxlcilgIHNvIHRoYXQgd2UgY2FuIHVzZSBgUHJvbWlzZUxpa2VgCiAgICAgIC8vIHJhdGhlciB0aGFuIGBQcm9taXNlYC4gYFByb21pc2VMaWtlYCBkb2Vzbid0IGhhdmUgYSBgLmNhdGNoYCBtZXRob2QsIG1ha2luZyBpdHMgcG9seWZpbGwgc21hbGxlci4gKEVTNSBkaWRuJ3QKICAgICAgLy8gaGF2ZSBwcm9taXNlcywgc28gVFMgaGFzIHRvIHBvbHlmaWxsIHdoZW4gZG93bi1jb21waWxpbmcuKQogICAgICAudGhlbihudWxsLCAoKSA9PgogICAgICAgIHJlbW92ZSh0YXNrKS50aGVuKG51bGwsICgpID0+IHsKICAgICAgICAgIC8vIFdlIGhhdmUgdG8gYWRkIGFub3RoZXIgY2F0Y2ggaGVyZSBiZWNhdXNlIGByZW1vdmUoKWAgc3RhcnRzIGEgbmV3IHByb21pc2UgY2hhaW4uCiAgICAgICAgfSksCiAgICAgICk7CiAgICByZXR1cm4gdGFzazsKICB9CgogIC8qKgogICAqIFdhaXQgZm9yIGFsbCBwcm9taXNlcyBpbiB0aGUgcXVldWUgdG8gcmVzb2x2ZSBvciBmb3IgdGltZW91dCB0byBleHBpcmUsIHdoaWNoZXZlciBjb21lcyBmaXJzdC4KICAgKgogICAqIEBwYXJhbSB0aW1lb3V0IFRoZSB0aW1lLCBpbiBtcywgYWZ0ZXIgd2hpY2ggdG8gcmVzb2x2ZSB0byBgZmFsc2VgIGlmIHRoZSBxdWV1ZSBpcyBzdGlsbCBub24tZW1wdHkuIFBhc3NpbmcgYDBgIChvcgogICAqIG5vdCBwYXNzaW5nIGFueXRoaW5nKSB3aWxsIG1ha2UgdGhlIHByb21pc2Ugd2FpdCBhcyBsb25nIGFzIGl0IHRha2VzIGZvciB0aGUgcXVldWUgdG8gZHJhaW4gYmVmb3JlIHJlc29sdmluZyB0bwogICAqIGB0cnVlYC4KICAgKiBAcmV0dXJucyBBIHByb21pc2Ugd2hpY2ggd2lsbCByZXNvbHZlIHRvIGB0cnVlYCBpZiB0aGUgcXVldWUgaXMgYWxyZWFkeSBlbXB0eSBvciBkcmFpbnMgYmVmb3JlIHRoZSB0aW1lb3V0LCBhbmQKICAgKiBgZmFsc2VgIG90aGVyd2lzZQogICAqLwogIGZ1bmN0aW9uIGRyYWluKHRpbWVvdXQpIHsKICAgIHJldHVybiBuZXcgU3luY1Byb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gewogICAgICBsZXQgY291bnRlciA9IGJ1ZmZlci5sZW5ndGg7CgogICAgICBpZiAoIWNvdW50ZXIpIHsKICAgICAgICByZXR1cm4gcmVzb2x2ZSh0cnVlKTsKICAgICAgfQoKICAgICAgLy8gd2FpdCBmb3IgYHRpbWVvdXRgIG1zIGFuZCB0aGVuIHJlc29sdmUgdG8gYGZhbHNlYCAoaWYgbm90IGNhbmNlbGxlZCBmaXJzdCkKICAgICAgY29uc3QgY2FwdHVyZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgaWYgKHRpbWVvdXQgJiYgdGltZW91dCA+IDApIHsKICAgICAgICAgIHJlc29sdmUoZmFsc2UpOwogICAgICAgIH0KICAgICAgfSwgdGltZW91dCk7CgogICAgICAvLyBpZiBhbGwgcHJvbWlzZXMgcmVzb2x2ZSBpbiB0aW1lLCBjYW5jZWwgdGhlIHRpbWVyIGFuZCByZXNvbHZlIHRvIGB0cnVlYAogICAgICBidWZmZXIuZm9yRWFjaChpdGVtID0+IHsKICAgICAgICB2b2lkIHJlc29sdmVkU3luY1Byb21pc2UoaXRlbSkudGhlbigoKSA9PiB7CiAgICAgICAgICBpZiAoIS0tY291bnRlcikgewogICAgICAgICAgICBjbGVhclRpbWVvdXQoY2FwdHVyZWRTZXRUaW1lb3V0KTsKICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTsKICAgICAgICAgIH0KICAgICAgICB9LCByZWplY3QpOwogICAgICB9KTsKICAgIH0pOwogIH0KCiAgcmV0dXJuIHsKICAgICQ6IGJ1ZmZlciwKICAgIGFkZCwKICAgIGRyYWluLAogIH07Cn0KCmNvbnN0IE9ORV9TRUNPTkRfSU5fTVMgPSAxMDAwOwoKLyoqCiAqIEEgcGFydGlhbCBkZWZpbml0aW9uIG9mIHRoZSBbUGVyZm9ybWFuY2UgV2ViIEFQSV17QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1BlcmZvcm1hbmNlfQogKiBmb3IgYWNjZXNzaW5nIGEgaGlnaC1yZXNvbHV0aW9uIG1vbm90b25pYyBjbG9jay4KICovCgovKioKICogUmV0dXJucyBhIHRpbWVzdGFtcCBpbiBzZWNvbmRzIHNpbmNlIHRoZSBVTklYIGVwb2NoIHVzaW5nIHRoZSBEYXRlIEFQSS4KICoKICogVE9ETyh2OCk6IFJldHVybiB0eXBlIHNob3VsZCBiZSByb3VuZGVkLgogKi8KZnVuY3Rpb24gZGF0ZVRpbWVzdGFtcEluU2Vjb25kcygpIHsKICByZXR1cm4gRGF0ZS5ub3coKSAvIE9ORV9TRUNPTkRfSU5fTVM7Cn0KCi8qKgogKiBSZXR1cm5zIGEgd3JhcHBlciBhcm91bmQgdGhlIG5hdGl2ZSBQZXJmb3JtYW5jZSBBUEkgYnJvd3NlciBpbXBsZW1lbnRhdGlvbiwgb3IgdW5kZWZpbmVkIGZvciBicm93c2VycyB0aGF0IGRvIG5vdAogKiBzdXBwb3J0IHRoZSBBUEkuCiAqCiAqIFdyYXBwaW5nIHRoZSBuYXRpdmUgQVBJIHdvcmtzIGFyb3VuZCBkaWZmZXJlbmNlcyBpbiBiZWhhdmlvciBmcm9tIGRpZmZlcmVudCBicm93c2Vycy4KICovCmZ1bmN0aW9uIGNyZWF0ZVVuaXhUaW1lc3RhbXBJblNlY29uZHNGdW5jKCkgewogIGNvbnN0IHsgcGVyZm9ybWFuY2UgfSA9IEdMT0JBTF9PQkogOwogIGlmICghcGVyZm9ybWFuY2UgfHwgIXBlcmZvcm1hbmNlLm5vdykgewogICAgcmV0dXJuIGRhdGVUaW1lc3RhbXBJblNlY29uZHM7CiAgfQoKICAvLyBTb21lIGJyb3dzZXIgYW5kIGVudmlyb25tZW50cyBkb24ndCBoYXZlIGEgdGltZU9yaWdpbiwgc28gd2UgZmFsbGJhY2sgdG8KICAvLyB1c2luZyBEYXRlLm5vdygpIHRvIGNvbXB1dGUgdGhlIHN0YXJ0aW5nIHRpbWUuCiAgY29uc3QgYXBwcm94U3RhcnRpbmdUaW1lT3JpZ2luID0gRGF0ZS5ub3coKSAtIHBlcmZvcm1hbmNlLm5vdygpOwogIGNvbnN0IHRpbWVPcmlnaW4gPSBwZXJmb3JtYW5jZS50aW1lT3JpZ2luID09IHVuZGVmaW5lZCA/IGFwcHJveFN0YXJ0aW5nVGltZU9yaWdpbiA6IHBlcmZvcm1hbmNlLnRpbWVPcmlnaW47CgogIC8vIHBlcmZvcm1hbmNlLm5vdygpIGlzIGEgbW9ub3RvbmljIGNsb2NrLCB3aGljaCBtZWFucyBpdCBzdGFydHMgYXQgMCB3aGVuIHRoZSBwcm9jZXNzIGJlZ2lucy4gVG8gZ2V0IHRoZSBjdXJyZW50CiAgLy8gd2FsbCBjbG9jayB0aW1lIChhY3R1YWwgVU5JWCB0aW1lc3RhbXApLCB3ZSBuZWVkIHRvIGFkZCB0aGUgc3RhcnRpbmcgdGltZSBvcmlnaW4gYW5kIHRoZSBjdXJyZW50IHRpbWUgZWxhcHNlZC4KICAvLwogIC8vIFRPRE86IFRoaXMgZG9lcyBub3QgYWNjb3VudCBmb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIG1vbm90b25pYyBjbG9jayB0aGF0IHBvd2VycyBwZXJmb3JtYW5jZS5ub3coKSBkcmlmdHMgZnJvbSB0aGUKICAvLyB3YWxsIGNsb2NrIHRpbWUsIHdoaWNoIGNhdXNlcyB0aGUgcmV0dXJuZWQgdGltZXN0YW1wIHRvIGJlIGluYWNjdXJhdGUuIFdlIHNob3VsZCBpbnZlc3RpZ2F0ZSBob3cgdG8gZGV0ZWN0IGFuZAogIC8vIGNvcnJlY3QgZm9yIHRoaXMuCiAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3NlbnRyeS1qYXZhc2NyaXB0L2lzc3Vlcy8yNTkwCiAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vbWRuL2NvbnRlbnQvaXNzdWVzLzQ3MTMKICAvLyBTZWU6IGh0dHBzOi8vZGV2LnRvL25vYW1yL3doZW4tYS1taWxsaXNlY29uZC1pcy1ub3QtYS1taWxsaXNlY29uZC0zaDYKICByZXR1cm4gKCkgPT4gewogICAgcmV0dXJuICh0aW1lT3JpZ2luICsgcGVyZm9ybWFuY2Uubm93KCkpIC8gT05FX1NFQ09ORF9JTl9NUzsKICB9Owp9CgovKioKICogUmV0dXJucyBhIHRpbWVzdGFtcCBpbiBzZWNvbmRzIHNpbmNlIHRoZSBVTklYIGVwb2NoIHVzaW5nIGVpdGhlciB0aGUgUGVyZm9ybWFuY2Ugb3IgRGF0ZSBBUElzLCBkZXBlbmRpbmcgb24gdGhlCiAqIGF2YWlsYWJpbGl0eSBvZiB0aGUgUGVyZm9ybWFuY2UgQVBJLgogKgogKiBCVUc6IE5vdGUgdGhhdCBiZWNhdXNlIG9mIGhvdyBicm93c2VycyBpbXBsZW1lbnQgdGhlIFBlcmZvcm1hbmNlIEFQSSwgdGhlIGNsb2NrIG1pZ2h0IHN0b3Agd2hlbiB0aGUgY29tcHV0ZXIgaXMKICogYXNsZWVwLiBUaGlzIGNyZWF0ZXMgYSBza2V3IGJldHdlZW4gYGRhdGVUaW1lc3RhbXBJblNlY29uZHNgIGFuZCBgdGltZXN0YW1wSW5TZWNvbmRzYC4gVGhlCiAqIHNrZXcgY2FuIGdyb3cgdG8gYXJiaXRyYXJ5IGFtb3VudHMgbGlrZSBkYXlzLCB3ZWVrcyBvciBtb250aHMuCiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3NlbnRyeS1qYXZhc2NyaXB0L2lzc3Vlcy8yNTkwLgogKi8KY29uc3QgdGltZXN0YW1wSW5TZWNvbmRzID0gY3JlYXRlVW5peFRpbWVzdGFtcEluU2Vjb25kc0Z1bmMoKTsKCi8qKgogKiBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZSB0aGUgVU5JWCBlcG9jaC4gVGhpcyB2YWx1ZSBpcyBvbmx5IHVzYWJsZSBpbiBhIGJyb3dzZXIsIGFuZCBvbmx5IHdoZW4gdGhlCiAqIHBlcmZvcm1hbmNlIEFQSSBpcyBhdmFpbGFibGUuCiAqLwooKCkgPT4gewogIC8vIFVuZm9ydHVuYXRlbHkgYnJvd3NlcnMgbWF5IHJlcG9ydCBhbiBpbmFjY3VyYXRlIHRpbWUgb3JpZ2luIGRhdGEsIHRocm91Z2ggZWl0aGVyIHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4gb3IKICAvLyBwZXJmb3JtYW5jZS50aW1pbmcubmF2aWdhdGlvblN0YXJ0LCB3aGljaCByZXN1bHRzIGluIHBvb3IgcmVzdWx0cyBpbiBwZXJmb3JtYW5jZSBkYXRhLiBXZSBvbmx5IHRyZWF0IHRpbWUgb3JpZ2luCiAgLy8gZGF0YSBhcyByZWxpYWJsZSBpZiB0aGV5IGFyZSB3aXRoaW4gYSByZWFzb25hYmxlIHRocmVzaG9sZCBvZiB0aGUgY3VycmVudCB0aW1lLgoKICBjb25zdCB7IHBlcmZvcm1hbmNlIH0gPSBHTE9CQUxfT0JKIDsKICBpZiAoIXBlcmZvcm1hbmNlIHx8ICFwZXJmb3JtYW5jZS5ub3cpIHsKICAgIHJldHVybiB1bmRlZmluZWQ7CiAgfQoKICBjb25zdCB0aHJlc2hvbGQgPSAzNjAwICogMTAwMDsKICBjb25zdCBwZXJmb3JtYW5jZU5vdyA9IHBlcmZvcm1hbmNlLm5vdygpOwogIGNvbnN0IGRhdGVOb3cgPSBEYXRlLm5vdygpOwoKICAvLyBpZiB0aW1lT3JpZ2luIGlzbid0IGF2YWlsYWJsZSBzZXQgZGVsdGEgdG8gdGhyZXNob2xkIHNvIGl0IGlzbid0IHVzZWQKICBjb25zdCB0aW1lT3JpZ2luRGVsdGEgPSBwZXJmb3JtYW5jZS50aW1lT3JpZ2luCiAgICA/IE1hdGguYWJzKHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4gKyBwZXJmb3JtYW5jZU5vdyAtIGRhdGVOb3cpCiAgICA6IHRocmVzaG9sZDsKICBjb25zdCB0aW1lT3JpZ2luSXNSZWxpYWJsZSA9IHRpbWVPcmlnaW5EZWx0YSA8IHRocmVzaG9sZDsKCiAgLy8gV2hpbGUgcGVyZm9ybWFuY2UudGltaW5nLm5hdmlnYXRpb25TdGFydCBpcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4sIHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4KICAvLyBpcyBub3QgYXMgd2lkZWx5IHN1cHBvcnRlZC4gTmFtZWx5LCBwZXJmb3JtYW5jZS50aW1lT3JpZ2luIGlzIHVuZGVmaW5lZCBpbiBTYWZhcmkgYXMgb2Ygd3JpdGluZy4KICAvLyBBbHNvIGFzIG9mIHdyaXRpbmcsIHBlcmZvcm1hbmNlLnRpbWluZyBpcyBub3QgYXZhaWxhYmxlIGluIFdlYiBXb3JrZXJzIGluIG1haW5zdHJlYW0gYnJvd3NlcnMsIHNvIGl0IGlzIG5vdCBhbHdheXMKICAvLyBhIHZhbGlkIGZhbGxiYWNrLiBJbiB0aGUgYWJzZW5jZSBvZiBhbiBpbml0aWFsIHRpbWUgcHJvdmlkZWQgYnkgdGhlIGJyb3dzZXIsIGZhbGxiYWNrIHRvIHRoZSBjdXJyZW50IHRpbWUgZnJvbSB0aGUKICAvLyBEYXRlIEFQSS4KICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICBjb25zdCBuYXZpZ2F0aW9uU3RhcnQgPSBwZXJmb3JtYW5jZS50aW1pbmcgJiYgcGVyZm9ybWFuY2UudGltaW5nLm5hdmlnYXRpb25TdGFydDsKICBjb25zdCBoYXNOYXZpZ2F0aW9uU3RhcnQgPSB0eXBlb2YgbmF2aWdhdGlvblN0YXJ0ID09PSAnbnVtYmVyJzsKICAvLyBpZiBuYXZpZ2F0aW9uU3RhcnQgaXNuJ3QgYXZhaWxhYmxlIHNldCBkZWx0YSB0byB0aHJlc2hvbGQgc28gaXQgaXNuJ3QgdXNlZAogIGNvbnN0IG5hdmlnYXRpb25TdGFydERlbHRhID0gaGFzTmF2aWdhdGlvblN0YXJ0ID8gTWF0aC5hYnMobmF2aWdhdGlvblN0YXJ0ICsgcGVyZm9ybWFuY2VOb3cgLSBkYXRlTm93KSA6IHRocmVzaG9sZDsKICBjb25zdCBuYXZpZ2F0aW9uU3RhcnRJc1JlbGlhYmxlID0gbmF2aWdhdGlvblN0YXJ0RGVsdGEgPCB0aHJlc2hvbGQ7CgogIGlmICh0aW1lT3JpZ2luSXNSZWxpYWJsZSB8fCBuYXZpZ2F0aW9uU3RhcnRJc1JlbGlhYmxlKSB7CiAgICAvLyBVc2UgdGhlIG1vcmUgcmVsaWFibGUgdGltZSBvcmlnaW4KICAgIGlmICh0aW1lT3JpZ2luRGVsdGEgPD0gbmF2aWdhdGlvblN0YXJ0RGVsdGEpIHsKICAgICAgcmV0dXJuIHBlcmZvcm1hbmNlLnRpbWVPcmlnaW47CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbmF2aWdhdGlvblN0YXJ0OwogICAgfQogIH0KICByZXR1cm4gZGF0ZU5vdzsKfSkoKTsKCi8qKgogKiBDcmVhdGVzIGFuIGVudmVsb3BlLgogKiBNYWtlIHN1cmUgdG8gYWx3YXlzIGV4cGxpY2l0bHkgcHJvdmlkZSB0aGUgZ2VuZXJpYyB0byB0aGlzIGZ1bmN0aW9uCiAqIHNvIHRoYXQgdGhlIGVudmVsb3BlIHR5cGVzIHJlc29sdmUgY29ycmVjdGx5LgogKi8KZnVuY3Rpb24gY3JlYXRlRW52ZWxvcGUoaGVhZGVycywgaXRlbXMgPSBbXSkgewogIHJldHVybiBbaGVhZGVycywgaXRlbXNdIDsKfQoKLyoqCiAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGxvb3AgdGhyb3VnaCB0aGUgaXRlbXMgYW5kIGl0ZW0gdHlwZXMgb2YgYW4gZW52ZWxvcGUuCiAqIChUaGlzIGZ1bmN0aW9uIHdhcyBtb3N0bHkgY3JlYXRlZCBiZWNhdXNlIHdvcmtpbmcgd2l0aCBlbnZlbG9wZSB0eXBlcyBpcyBwYWluZnVsIGF0IHRoZSBtb21lbnQpCiAqCiAqIElmIHRoZSBjYWxsYmFjayByZXR1cm5zIHRydWUsIHRoZSByZXN0IG9mIHRoZSBpdGVtcyB3aWxsIGJlIHNraXBwZWQuCiAqLwpmdW5jdGlvbiBmb3JFYWNoRW52ZWxvcGVJdGVtKAogIGVudmVsb3BlLAogIGNhbGxiYWNrLAopIHsKICBjb25zdCBlbnZlbG9wZUl0ZW1zID0gZW52ZWxvcGVbMV07CgogIGZvciAoY29uc3QgZW52ZWxvcGVJdGVtIG9mIGVudmVsb3BlSXRlbXMpIHsKICAgIGNvbnN0IGVudmVsb3BlSXRlbVR5cGUgPSBlbnZlbG9wZUl0ZW1bMF0udHlwZTsKICAgIGNvbnN0IHJlc3VsdCA9IGNhbGxiYWNrKGVudmVsb3BlSXRlbSwgZW52ZWxvcGVJdGVtVHlwZSk7CgogICAgaWYgKHJlc3VsdCkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICB9CgogIHJldHVybiBmYWxzZTsKfQoKLyoqCiAqIEVuY29kZSBhIHN0cmluZyB0byBVVEY4LgogKi8KZnVuY3Rpb24gZW5jb2RlVVRGOChpbnB1dCwgdGV4dEVuY29kZXIpIHsKICBjb25zdCB1dGY4ID0gdGV4dEVuY29kZXIgfHwgbmV3IFRleHRFbmNvZGVyKCk7CiAgcmV0dXJuIHV0ZjguZW5jb2RlKGlucHV0KTsKfQoKLyoqCiAqIFNlcmlhbGl6ZXMgYW4gZW52ZWxvcGUuCiAqLwpmdW5jdGlvbiBzZXJpYWxpemVFbnZlbG9wZShlbnZlbG9wZSwgdGV4dEVuY29kZXIpIHsKICBjb25zdCBbZW52SGVhZGVycywgaXRlbXNdID0gZW52ZWxvcGU7CgogIC8vIEluaXRpYWxseSB3ZSBjb25zdHJ1Y3Qgb3VyIGVudmVsb3BlIGFzIGEgc3RyaW5nIGFuZCBvbmx5IGNvbnZlcnQgdG8gYmluYXJ5IGNodW5rcyBpZiB3ZSBlbmNvdW50ZXIgYmluYXJ5IGRhdGEKICBsZXQgcGFydHMgPSBKU09OLnN0cmluZ2lmeShlbnZIZWFkZXJzKTsKCiAgZnVuY3Rpb24gYXBwZW5kKG5leHQpIHsKICAgIGlmICh0eXBlb2YgcGFydHMgPT09ICdzdHJpbmcnKSB7CiAgICAgIHBhcnRzID0gdHlwZW9mIG5leHQgPT09ICdzdHJpbmcnID8gcGFydHMgKyBuZXh0IDogW2VuY29kZVVURjgocGFydHMsIHRleHRFbmNvZGVyKSwgbmV4dF07CiAgICB9IGVsc2UgewogICAgICBwYXJ0cy5wdXNoKHR5cGVvZiBuZXh0ID09PSAnc3RyaW5nJyA/IGVuY29kZVVURjgobmV4dCwgdGV4dEVuY29kZXIpIDogbmV4dCk7CiAgICB9CiAgfQoKICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHsKICAgIGNvbnN0IFtpdGVtSGVhZGVycywgcGF5bG9hZF0gPSBpdGVtOwoKICAgIGFwcGVuZChgXG4ke0pTT04uc3RyaW5naWZ5KGl0ZW1IZWFkZXJzKX1cbmApOwoKICAgIGlmICh0eXBlb2YgcGF5bG9hZCA9PT0gJ3N0cmluZycgfHwgcGF5bG9hZCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHsKICAgICAgYXBwZW5kKHBheWxvYWQpOwogICAgfSBlbHNlIHsKICAgICAgbGV0IHN0cmluZ2lmaWVkUGF5bG9hZDsKICAgICAgdHJ5IHsKICAgICAgICBzdHJpbmdpZmllZFBheWxvYWQgPSBKU09OLnN0cmluZ2lmeShwYXlsb2FkKTsKICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIC8vIEluIGNhc2UsIGRlc3BpdGUgYWxsIG91ciBlZmZvcnRzIHRvIGtlZXAgYHBheWxvYWRgIGNpcmN1bGFyLWRlcGVuZGVuY3ktZnJlZSwgYEpTT04uc3RyaW5pZnkoKWAgc3RpbGwKICAgICAgICAvLyBmYWlscywgd2UgdHJ5IGFnYWluIGFmdGVyIG5vcm1hbGl6aW5nIGl0IGFnYWluIHdpdGggaW5maW5pdGUgbm9ybWFsaXphdGlvbiBkZXB0aC4gVGhpcyBvZiBjb3Vyc2UgaGFzIGEKICAgICAgICAvLyBwZXJmb3JtYW5jZSBpbXBhY3QgYnV0IGluIHRoaXMgY2FzZSBhIHBlcmZvcm1hbmNlIGhpdCBpcyBiZXR0ZXIgdGhhbiB0aHJvd2luZy4KICAgICAgICBzdHJpbmdpZmllZFBheWxvYWQgPSBKU09OLnN0cmluZ2lmeShub3JtYWxpemUocGF5bG9hZCkpOwogICAgICB9CiAgICAgIGFwcGVuZChzdHJpbmdpZmllZFBheWxvYWQpOwogICAgfQogIH0KCiAgcmV0dXJuIHR5cGVvZiBwYXJ0cyA9PT0gJ3N0cmluZycgPyBwYXJ0cyA6IGNvbmNhdEJ1ZmZlcnMocGFydHMpOwp9CgpmdW5jdGlvbiBjb25jYXRCdWZmZXJzKGJ1ZmZlcnMpIHsKICBjb25zdCB0b3RhbExlbmd0aCA9IGJ1ZmZlcnMucmVkdWNlKChhY2MsIGJ1ZikgPT4gYWNjICsgYnVmLmxlbmd0aCwgMCk7CgogIGNvbnN0IG1lcmdlZCA9IG5ldyBVaW50OEFycmF5KHRvdGFsTGVuZ3RoKTsKICBsZXQgb2Zmc2V0ID0gMDsKICBmb3IgKGNvbnN0IGJ1ZmZlciBvZiBidWZmZXJzKSB7CiAgICBtZXJnZWQuc2V0KGJ1ZmZlciwgb2Zmc2V0KTsKICAgIG9mZnNldCArPSBidWZmZXIubGVuZ3RoOwogIH0KCiAgcmV0dXJuIG1lcmdlZDsKfQoKY29uc3QgSVRFTV9UWVBFX1RPX0RBVEFfQ0FURUdPUllfTUFQID0gewogIHNlc3Npb246ICdzZXNzaW9uJywKICBzZXNzaW9uczogJ3Nlc3Npb24nLAogIGF0dGFjaG1lbnQ6ICdhdHRhY2htZW50JywKICB0cmFuc2FjdGlvbjogJ3RyYW5zYWN0aW9uJywKICBldmVudDogJ2Vycm9yJywKICBjbGllbnRfcmVwb3J0OiAnaW50ZXJuYWwnLAogIHVzZXJfcmVwb3J0OiAnZGVmYXVsdCcsCiAgcHJvZmlsZTogJ3Byb2ZpbGUnLAogIHJlcGxheV9ldmVudDogJ3JlcGxheScsCiAgcmVwbGF5X3JlY29yZGluZzogJ3JlcGxheScsCiAgY2hlY2tfaW46ICdtb25pdG9yJywKICBmZWVkYmFjazogJ2ZlZWRiYWNrJywKICBzcGFuOiAnc3BhbicsCiAgc3RhdHNkOiAnbWV0cmljX2J1Y2tldCcsCn07CgovKioKICogTWFwcyB0aGUgdHlwZSBvZiBhbiBlbnZlbG9wZSBpdGVtIHRvIGEgZGF0YSBjYXRlZ29yeS4KICovCmZ1bmN0aW9uIGVudmVsb3BlSXRlbVR5cGVUb0RhdGFDYXRlZ29yeSh0eXBlKSB7CiAgcmV0dXJuIElURU1fVFlQRV9UT19EQVRBX0NBVEVHT1JZX01BUFt0eXBlXTsKfQoKLyoqIEV4dHJhY3RzIHRoZSBtaW5pbWFsIFNESyBpbmZvIGZyb20gdGhlIG1ldGFkYXRhIG9yIGFuIGV2ZW50cyAqLwpmdW5jdGlvbiBnZXRTZGtNZXRhZGF0YUZvckVudmVsb3BlSGVhZGVyKG1ldGFkYXRhT3JFdmVudCkgewogIGlmICghbWV0YWRhdGFPckV2ZW50IHx8ICFtZXRhZGF0YU9yRXZlbnQuc2RrKSB7CiAgICByZXR1cm47CiAgfQogIGNvbnN0IHsgbmFtZSwgdmVyc2lvbiB9ID0gbWV0YWRhdGFPckV2ZW50LnNkazsKICByZXR1cm4geyBuYW1lLCB2ZXJzaW9uIH07Cn0KCi8qKgogKiBDcmVhdGVzIGV2ZW50IGVudmVsb3BlIGhlYWRlcnMsIGJhc2VkIG9uIGV2ZW50LCBzZGsgaW5mbyBhbmQgdHVubmVsCiAqIE5vdGU6IFRoaXMgZnVuY3Rpb24gd2FzIGV4dHJhY3RlZCBmcm9tIHRoZSBjb3JlIHBhY2thZ2UgdG8gbWFrZSBpdCBhdmFpbGFibGUgaW4gUmVwbGF5CiAqLwpmdW5jdGlvbiBjcmVhdGVFdmVudEVudmVsb3BlSGVhZGVycygKICBldmVudCwKICBzZGtJbmZvLAogIHR1bm5lbCwKICBkc24sCikgewogIGNvbnN0IGR5bmFtaWNTYW1wbGluZ0NvbnRleHQgPSBldmVudC5zZGtQcm9jZXNzaW5nTWV0YWRhdGEgJiYgZXZlbnQuc2RrUHJvY2Vzc2luZ01ldGFkYXRhLmR5bmFtaWNTYW1wbGluZ0NvbnRleHQ7CiAgcmV0dXJuIHsKICAgIGV2ZW50X2lkOiBldmVudC5ldmVudF9pZCAsCiAgICBzZW50X2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksCiAgICAuLi4oc2RrSW5mbyAmJiB7IHNkazogc2RrSW5mbyB9KSwKICAgIC4uLighIXR1bm5lbCAmJiBkc24gJiYgeyBkc246IGRzblRvU3RyaW5nKGRzbikgfSksCiAgICAuLi4oZHluYW1pY1NhbXBsaW5nQ29udGV4dCAmJiB7CiAgICAgIHRyYWNlOiBkcm9wVW5kZWZpbmVkS2V5cyh7IC4uLmR5bmFtaWNTYW1wbGluZ0NvbnRleHQgfSksCiAgICB9KSwKICB9Owp9CgovLyBJbnRlbnRpb25hbGx5IGtlZXBpbmcgdGhlIGtleSBicm9hZCwgYXMgd2UgZG9uJ3Qga25vdyBmb3Igc3VyZSB3aGF0IHJhdGUgbGltaXQgaGVhZGVycyBnZXQgcmV0dXJuZWQgZnJvbSBiYWNrZW5kCgpjb25zdCBERUZBVUxUX1JFVFJZX0FGVEVSID0gNjAgKiAxMDAwOyAvLyA2MCBzZWNvbmRzCgovKioKICogRXh0cmFjdHMgUmV0cnktQWZ0ZXIgdmFsdWUgZnJvbSB0aGUgcmVxdWVzdCBoZWFkZXIgb3IgcmV0dXJucyBkZWZhdWx0IHZhbHVlCiAqIEBwYXJhbSBoZWFkZXIgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mICdSZXRyeS1BZnRlcicgaGVhZGVyCiAqIEBwYXJhbSBub3cgY3VycmVudCB1bml4IHRpbWVzdGFtcAogKgogKi8KZnVuY3Rpb24gcGFyc2VSZXRyeUFmdGVySGVhZGVyKGhlYWRlciwgbm93ID0gRGF0ZS5ub3coKSkgewogIGNvbnN0IGhlYWRlckRlbGF5ID0gcGFyc2VJbnQoYCR7aGVhZGVyfWAsIDEwKTsKICBpZiAoIWlzTmFOKGhlYWRlckRlbGF5KSkgewogICAgcmV0dXJuIGhlYWRlckRlbGF5ICogMTAwMDsKICB9CgogIGNvbnN0IGhlYWRlckRhdGUgPSBEYXRlLnBhcnNlKGAke2hlYWRlcn1gKTsKICBpZiAoIWlzTmFOKGhlYWRlckRhdGUpKSB7CiAgICByZXR1cm4gaGVhZGVyRGF0ZSAtIG5vdzsKICB9CgogIHJldHVybiBERUZBVUxUX1JFVFJZX0FGVEVSOwp9CgovKioKICogR2V0cyB0aGUgdGltZSB0aGF0IHRoZSBnaXZlbiBjYXRlZ29yeSBpcyBkaXNhYmxlZCB1bnRpbCBmb3IgcmF0ZSBsaW1pdGluZy4KICogSW4gY2FzZSBubyBjYXRlZ29yeS1zcGVjaWZpYyBsaW1pdCBpcyBzZXQgYnV0IGEgZ2VuZXJhbCByYXRlIGxpbWl0IGFjcm9zcyBhbGwgY2F0ZWdvcmllcyBpcyBhY3RpdmUsCiAqIHRoYXQgdGltZSBpcyByZXR1cm5lZC4KICoKICogQHJldHVybiB0aGUgdGltZSBpbiBtcyB0aGF0IHRoZSBjYXRlZ29yeSBpcyBkaXNhYmxlZCB1bnRpbCBvciAwIGlmIHRoZXJlJ3Mgbm8gYWN0aXZlIHJhdGUgbGltaXQuCiAqLwpmdW5jdGlvbiBkaXNhYmxlZFVudGlsKGxpbWl0cywgZGF0YUNhdGVnb3J5KSB7CiAgcmV0dXJuIGxpbWl0c1tkYXRhQ2F0ZWdvcnldIHx8IGxpbWl0cy5hbGwgfHwgMDsKfQoKLyoqCiAqIENoZWNrcyBpZiBhIGNhdGVnb3J5IGlzIHJhdGUgbGltaXRlZAogKi8KZnVuY3Rpb24gaXNSYXRlTGltaXRlZChsaW1pdHMsIGRhdGFDYXRlZ29yeSwgbm93ID0gRGF0ZS5ub3coKSkgewogIHJldHVybiBkaXNhYmxlZFVudGlsKGxpbWl0cywgZGF0YUNhdGVnb3J5KSA+IG5vdzsKfQoKLyoqCiAqIFVwZGF0ZSByYXRlbGltaXRzIGZyb20gaW5jb21pbmcgaGVhZGVycy4KICoKICogQHJldHVybiB0aGUgdXBkYXRlZCBSYXRlTGltaXRzIG9iamVjdC4KICovCmZ1bmN0aW9uIHVwZGF0ZVJhdGVMaW1pdHMoCiAgbGltaXRzLAogIHsgc3RhdHVzQ29kZSwgaGVhZGVycyB9LAogIG5vdyA9IERhdGUubm93KCksCikgewogIGNvbnN0IHVwZGF0ZWRSYXRlTGltaXRzID0gewogICAgLi4ubGltaXRzLAogIH07CgogIC8vICJUaGUgbmFtZSBpcyBjYXNlLWluc2Vuc2l0aXZlLiIKICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSGVhZGVycy9nZXQKICBjb25zdCByYXRlTGltaXRIZWFkZXIgPSBoZWFkZXJzICYmIGhlYWRlcnNbJ3gtc2VudHJ5LXJhdGUtbGltaXRzJ107CiAgY29uc3QgcmV0cnlBZnRlckhlYWRlciA9IGhlYWRlcnMgJiYgaGVhZGVyc1sncmV0cnktYWZ0ZXInXTsKCiAgaWYgKHJhdGVMaW1pdEhlYWRlcikgewogICAgLyoqCiAgICAgKiByYXRlIGxpbWl0IGhlYWRlcnMgYXJlIG9mIHRoZSBmb3JtCiAgICAgKiAgICAgPGhlYWRlcj4sPGhlYWRlcj4sLi4KICAgICAqIHdoZXJlIGVhY2ggPGhlYWRlcj4gaXMgb2YgdGhlIGZvcm0KICAgICAqICAgICA8cmV0cnlfYWZ0ZXI+OiA8Y2F0ZWdvcmllcz46IDxzY29wZT46IDxyZWFzb25fY29kZT46IDxuYW1lc3BhY2VzPgogICAgICogd2hlcmUKICAgICAqICAgICA8cmV0cnlfYWZ0ZXI+IGlzIGEgZGVsYXkgaW4gc2Vjb25kcwogICAgICogICAgIDxjYXRlZ29yaWVzPiBpcyB0aGUgZXZlbnQgdHlwZShzKSAoZXJyb3IsIHRyYW5zYWN0aW9uLCBldGMpIGJlaW5nIHJhdGUgbGltaXRlZCBhbmQgaXMgb2YgdGhlIGZvcm0KICAgICAqICAgICAgICAgPGNhdGVnb3J5Pjs8Y2F0ZWdvcnk+Oy4uLgogICAgICogICAgIDxzY29wZT4gaXMgd2hhdCdzIGJlaW5nIGxpbWl0ZWQgKG9yZywgcHJvamVjdCwgb3Iga2V5KSAtIGlnbm9yZWQgYnkgU0RLCiAgICAgKiAgICAgPHJlYXNvbl9jb2RlPiBpcyBhbiBhcmJpdHJhcnkgc3RyaW5nIGxpa2UgIm9yZ19xdW90YSIgLSBpZ25vcmVkIGJ5IFNESwogICAgICogICAgIDxuYW1lc3BhY2VzPiBTZW1pY29sb24tc2VwYXJhdGVkIGxpc3Qgb2YgbWV0cmljIG5hbWVzcGFjZSBpZGVudGlmaWVycy4gRGVmaW5lcyB3aGljaCBuYW1lc3BhY2Uocykgd2lsbCBiZSBhZmZlY3RlZC4KICAgICAqICAgICAgICAgT25seSBwcmVzZW50IGlmIHJhdGUgbGltaXQgYXBwbGllcyB0byB0aGUgbWV0cmljX2J1Y2tldCBkYXRhIGNhdGVnb3J5LgogICAgICovCiAgICBmb3IgKGNvbnN0IGxpbWl0IG9mIHJhdGVMaW1pdEhlYWRlci50cmltKCkuc3BsaXQoJywnKSkgewogICAgICBjb25zdCBbcmV0cnlBZnRlciwgY2F0ZWdvcmllcywgLCAsIG5hbWVzcGFjZXNdID0gbGltaXQuc3BsaXQoJzonLCA1KTsKICAgICAgY29uc3QgaGVhZGVyRGVsYXkgPSBwYXJzZUludChyZXRyeUFmdGVyLCAxMCk7CiAgICAgIGNvbnN0IGRlbGF5ID0gKCFpc05hTihoZWFkZXJEZWxheSkgPyBoZWFkZXJEZWxheSA6IDYwKSAqIDEwMDA7IC8vIDYwc2VjIGRlZmF1bHQKICAgICAgaWYgKCFjYXRlZ29yaWVzKSB7CiAgICAgICAgdXBkYXRlZFJhdGVMaW1pdHMuYWxsID0gbm93ICsgZGVsYXk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZm9yIChjb25zdCBjYXRlZ29yeSBvZiBjYXRlZ29yaWVzLnNwbGl0KCc7JykpIHsKICAgICAgICAgIGlmIChjYXRlZ29yeSA9PT0gJ21ldHJpY19idWNrZXQnKSB7CiAgICAgICAgICAgIC8vIG5hbWVzcGFjZXMgd2lsbCBiZSBwcmVzZW50IHdoZW4gY2F0ZWdvcnkgPT09ICdtZXRyaWNfYnVja2V0JwogICAgICAgICAgICBpZiAoIW5hbWVzcGFjZXMgfHwgbmFtZXNwYWNlcy5zcGxpdCgnOycpLmluY2x1ZGVzKCdjdXN0b20nKSkgewogICAgICAgICAgICAgIHVwZGF0ZWRSYXRlTGltaXRzW2NhdGVnb3J5XSA9IG5vdyArIGRlbGF5OwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB1cGRhdGVkUmF0ZUxpbWl0c1tjYXRlZ29yeV0gPSBub3cgKyBkZWxheTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9IGVsc2UgaWYgKHJldHJ5QWZ0ZXJIZWFkZXIpIHsKICAgIHVwZGF0ZWRSYXRlTGltaXRzLmFsbCA9IG5vdyArIHBhcnNlUmV0cnlBZnRlckhlYWRlcihyZXRyeUFmdGVySGVhZGVyLCBub3cpOwogIH0gZWxzZSBpZiAoc3RhdHVzQ29kZSA9PT0gNDI5KSB7CiAgICB1cGRhdGVkUmF0ZUxpbWl0cy5hbGwgPSBub3cgKyA2MCAqIDEwMDA7CiAgfQoKICByZXR1cm4gdXBkYXRlZFJhdGVMaW1pdHM7Cn0KCi8qKgogKiBBIG5vZGUuanMgd2F0Y2hkb2cgdGltZXIKICogQHBhcmFtIHBvbGxJbnRlcnZhbCBUaGUgaW50ZXJ2YWwgdGhhdCB3ZSBleHBlY3QgdG8gZ2V0IHBvbGxlZCBhdAogKiBAcGFyYW0gYW5yVGhyZXNob2xkIFRoZSB0aHJlc2hvbGQgZm9yIHdoZW4gd2UgY29uc2lkZXIgQU5SCiAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gY2FsbCBmb3IgQU5SCiAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIGBwb2xsYCBhbmQgYGVuYWJsZWRgIGZ1bmN0aW9ucyB7QGxpbmsgV2F0Y2hkb2dSZXR1cm59CiAqLwpmdW5jdGlvbiB3YXRjaGRvZ1RpbWVyKAogIGNyZWF0ZVRpbWVyLAogIHBvbGxJbnRlcnZhbCwKICBhbnJUaHJlc2hvbGQsCiAgY2FsbGJhY2ssCikgewogIGNvbnN0IHRpbWVyID0gY3JlYXRlVGltZXIoKTsKICBsZXQgdHJpZ2dlcmVkID0gZmFsc2U7CiAgbGV0IGVuYWJsZWQgPSB0cnVlOwoKICBzZXRJbnRlcnZhbCgoKSA9PiB7CiAgICBjb25zdCBkaWZmTXMgPSB0aW1lci5nZXRUaW1lTXMoKTsKCiAgICBpZiAodHJpZ2dlcmVkID09PSBmYWxzZSAmJiBkaWZmTXMgPiBwb2xsSW50ZXJ2YWwgKyBhbnJUaHJlc2hvbGQpIHsKICAgICAgdHJpZ2dlcmVkID0gdHJ1ZTsKICAgICAgaWYgKGVuYWJsZWQpIHsKICAgICAgICBjYWxsYmFjaygpOwogICAgICB9CiAgICB9CgogICAgaWYgKGRpZmZNcyA8IHBvbGxJbnRlcnZhbCArIGFuclRocmVzaG9sZCkgewogICAgICB0cmlnZ2VyZWQgPSBmYWxzZTsKICAgIH0KICB9LCAyMCk7CgogIHJldHVybiB7CiAgICBwb2xsOiAoKSA9PiB7CiAgICAgIHRpbWVyLnJlc2V0KCk7CiAgICB9LAogICAgZW5hYmxlZDogKHN0YXRlKSA9PiB7CiAgICAgIGVuYWJsZWQgPSBzdGF0ZTsKICAgIH0sCiAgfTsKfQoKLy8gdHlwZXMgY29waWVkIGZyb20gaW5zcGVjdG9yLmQudHMKCi8qKgogKiBDb252ZXJ0cyBEZWJ1Z2dlci5DYWxsRnJhbWUgdG8gU2VudHJ5IFN0YWNrRnJhbWUKICovCmZ1bmN0aW9uIGNhbGxGcmFtZVRvU3RhY2tGcmFtZSgKICBmcmFtZSwKICB1cmwsCiAgZ2V0TW9kdWxlRnJvbUZpbGVuYW1lLAopIHsKICBjb25zdCBmaWxlbmFtZSA9IHVybCA/IHVybC5yZXBsYWNlKC9eZmlsZTpcL1wvLywgJycpIDogdW5kZWZpbmVkOwoKICAvLyBDYWxsRnJhbWUgcm93L2NvbCBhcmUgMCBiYXNlZCwgd2hlcmVhcyBTdGFja0ZyYW1lIGFyZSAxIGJhc2VkCiAgY29uc3QgY29sbm8gPSBmcmFtZS5sb2NhdGlvbi5jb2x1bW5OdW1iZXIgPyBmcmFtZS5sb2NhdGlvbi5jb2x1bW5OdW1iZXIgKyAxIDogdW5kZWZpbmVkOwogIGNvbnN0IGxpbmVubyA9IGZyYW1lLmxvY2F0aW9uLmxpbmVOdW1iZXIgPyBmcmFtZS5sb2NhdGlvbi5saW5lTnVtYmVyICsgMSA6IHVuZGVmaW5lZDsKCiAgcmV0dXJuIGRyb3BVbmRlZmluZWRLZXlzKHsKICAgIGZpbGVuYW1lLAogICAgbW9kdWxlOiBnZXRNb2R1bGVGcm9tRmlsZW5hbWUoZmlsZW5hbWUpLAogICAgZnVuY3Rpb246IGZyYW1lLmZ1bmN0aW9uTmFtZSB8fCAnPycsCiAgICBjb2xubywKICAgIGxpbmVubywKICAgIGluX2FwcDogZmlsZW5hbWUgPyBmaWxlbmFtZUlzSW5BcHAoZmlsZW5hbWUpIDogdW5kZWZpbmVkLAogIH0pOwp9CgovKioKICogVGhpcyBzZXJ2ZXMgYXMgYSBidWlsZCB0aW1lIGZsYWcgdGhhdCB3aWxsIGJlIHRydWUgYnkgZGVmYXVsdCwgYnV0IGZhbHNlIGluIG5vbi1kZWJ1ZyBidWlsZHMgb3IgaWYgdXNlcnMgcmVwbGFjZSBgX19TRU5UUllfREVCVUdfX2AgaW4gdGhlaXIgZ2VuZXJhdGVkIGNvZGUuCiAqCiAqIEFUVEVOVElPTjogVGhpcyBjb25zdGFudCBtdXN0IG5ldmVyIGNyb3NzIHBhY2thZ2UgYm91bmRhcmllcyAoaS5lLiBiZSBleHBvcnRlZCkgdG8gZ3VhcmFudGVlIHRoYXQgaXQgY2FuIGJlIHVzZWQgZm9yIHRyZWUgc2hha2luZy4KICovCmNvbnN0IERFQlVHX0JVSUxEID0gKHR5cGVvZiBfX1NFTlRSWV9ERUJVR19fID09PSAndW5kZWZpbmVkJyB8fCBfX1NFTlRSWV9ERUJVR19fKTsKCmNvbnN0IERFRkFVTFRfRU5WSVJPTk1FTlQgPSAncHJvZHVjdGlvbic7CgovKioKICogUmV0dXJucyB0aGUgZ2xvYmFsIGV2ZW50IHByb2Nlc3NvcnMuCiAqIEBkZXByZWNhdGVkIEdsb2JhbCBldmVudCBwcm9jZXNzb3JzIHdpbGwgYmUgcmVtb3ZlZCBpbiB2OC4KICovCmZ1bmN0aW9uIGdldEdsb2JhbEV2ZW50UHJvY2Vzc29ycygpIHsKICByZXR1cm4gZ2V0R2xvYmFsU2luZ2xldG9uKCdnbG9iYWxFdmVudFByb2Nlc3NvcnMnLCAoKSA9PiBbXSk7Cn0KCi8qKgogKiBQcm9jZXNzIGFuIGFycmF5IG9mIGV2ZW50IHByb2Nlc3NvcnMsIHJldHVybmluZyB0aGUgcHJvY2Vzc2VkIGV2ZW50IChvciBgbnVsbGAgaWYgdGhlIGV2ZW50IHdhcyBkcm9wcGVkKS4KICovCmZ1bmN0aW9uIG5vdGlmeUV2ZW50UHJvY2Vzc29ycygKICBwcm9jZXNzb3JzLAogIGV2ZW50LAogIGhpbnQsCiAgaW5kZXggPSAwLAopIHsKICByZXR1cm4gbmV3IFN5bmNQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKICAgIGNvbnN0IHByb2Nlc3NvciA9IHByb2Nlc3NvcnNbaW5kZXhdOwogICAgaWYgKGV2ZW50ID09PSBudWxsIHx8IHR5cGVvZiBwcm9jZXNzb3IgIT09ICdmdW5jdGlvbicpIHsKICAgICAgcmVzb2x2ZShldmVudCk7CiAgICB9IGVsc2UgewogICAgICBjb25zdCByZXN1bHQgPSBwcm9jZXNzb3IoeyAuLi5ldmVudCB9LCBoaW50KSA7CgogICAgICBERUJVR19CVUlMRCAmJiBwcm9jZXNzb3IuaWQgJiYgcmVzdWx0ID09PSBudWxsICYmIGxvZ2dlci5sb2coYEV2ZW50IHByb2Nlc3NvciAiJHtwcm9jZXNzb3IuaWR9IiBkcm9wcGVkIGV2ZW50YCk7CgogICAgICBpZiAoaXNUaGVuYWJsZShyZXN1bHQpKSB7CiAgICAgICAgdm9pZCByZXN1bHQKICAgICAgICAgIC50aGVuKGZpbmFsID0+IG5vdGlmeUV2ZW50UHJvY2Vzc29ycyhwcm9jZXNzb3JzLCBmaW5hbCwgaGludCwgaW5kZXggKyAxKS50aGVuKHJlc29sdmUpKQogICAgICAgICAgLnRoZW4obnVsbCwgcmVqZWN0KTsKICAgICAgfSBlbHNlIHsKICAgICAgICB2b2lkIG5vdGlmeUV2ZW50UHJvY2Vzc29ycyhwcm9jZXNzb3JzLCByZXN1bHQsIGhpbnQsIGluZGV4ICsgMSkKICAgICAgICAgIC50aGVuKHJlc29sdmUpCiAgICAgICAgICAudGhlbihudWxsLCByZWplY3QpOwogICAgICB9CiAgICB9CiAgfSk7Cn0KCi8qKgogKiBDcmVhdGVzIGEgbmV3IGBTZXNzaW9uYCBvYmplY3QgYnkgc2V0dGluZyBjZXJ0YWluIGRlZmF1bHQgcGFyYW1ldGVycy4gSWYgb3B0aW9uYWwgQHBhcmFtIGNvbnRleHQKICogaXMgcGFzc2VkLCB0aGUgcGFzc2VkIHByb3BlcnRpZXMgYXJlIGFwcGxpZWQgdG8gdGhlIHNlc3Npb24gb2JqZWN0LgogKgogKiBAcGFyYW0gY29udGV4dCAob3B0aW9uYWwpIGFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBiZSBhcHBsaWVkIHRvIHRoZSByZXR1cm5lZCBzZXNzaW9uIG9iamVjdAogKgogKiBAcmV0dXJucyBhIG5ldyBgU2Vzc2lvbmAgb2JqZWN0CiAqLwpmdW5jdGlvbiBtYWtlU2Vzc2lvbihjb250ZXh0KSB7CiAgLy8gQm90aCB0aW1lc3RhbXAgYW5kIHN0YXJ0ZWQgYXJlIGluIHNlY29uZHMgc2luY2UgdGhlIFVOSVggZXBvY2guCiAgY29uc3Qgc3RhcnRpbmdUaW1lID0gdGltZXN0YW1wSW5TZWNvbmRzKCk7CgogIGNvbnN0IHNlc3Npb24gPSB7CiAgICBzaWQ6IHV1aWQ0KCksCiAgICBpbml0OiB0cnVlLAogICAgdGltZXN0YW1wOiBzdGFydGluZ1RpbWUsCiAgICBzdGFydGVkOiBzdGFydGluZ1RpbWUsCiAgICBkdXJhdGlvbjogMCwKICAgIHN0YXR1czogJ29rJywKICAgIGVycm9yczogMCwKICAgIGlnbm9yZUR1cmF0aW9uOiBmYWxzZSwKICAgIHRvSlNPTjogKCkgPT4gc2Vzc2lvblRvSlNPTihzZXNzaW9uKSwKICB9OwoKICBpZiAoY29udGV4dCkgewogICAgdXBkYXRlU2Vzc2lvbihzZXNzaW9uLCBjb250ZXh0KTsKICB9CgogIHJldHVybiBzZXNzaW9uOwp9CgovKioKICogVXBkYXRlcyBhIHNlc3Npb24gb2JqZWN0IHdpdGggdGhlIHByb3BlcnRpZXMgcGFzc2VkIGluIHRoZSBjb250ZXh0LgogKgogKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBtdXRhdGVzIHRoZSBwYXNzZWQgb2JqZWN0IGFuZCByZXR1cm5zIHZvaWQuCiAqIChIYWQgdG8gZG8gdGhpcyBpbnN0ZWFkIG9mIHJldHVybmluZyBhIG5ldyBhbmQgdXBkYXRlZCBzZXNzaW9uIGJlY2F1c2UgY2xvc2luZyBhbmQgc2VuZGluZyBhIHNlc3Npb24KICogbWFrZXMgYW4gdXBkYXRlIHRvIHRoZSBzZXNzaW9uIGFmdGVyIGl0IHdhcyBwYXNzZWQgdG8gdGhlIHNlbmRpbmcgbG9naWMuCiAqIEBzZWUgQmFzZUNsaWVudC5jYXB0dXJlU2Vzc2lvbiApCiAqCiAqIEBwYXJhbSBzZXNzaW9uIHRoZSBgU2Vzc2lvbmAgdG8gdXBkYXRlCiAqIEBwYXJhbSBjb250ZXh0IHRoZSBgU2Vzc2lvbkNvbnRleHRgIGhvbGRpbmcgdGhlIHByb3BlcnRpZXMgdGhhdCBzaG91bGQgYmUgdXBkYXRlZCBpbiBAcGFyYW0gc2Vzc2lvbgogKi8KLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHkKZnVuY3Rpb24gdXBkYXRlU2Vzc2lvbihzZXNzaW9uLCBjb250ZXh0ID0ge30pIHsKICBpZiAoY29udGV4dC51c2VyKSB7CiAgICBpZiAoIXNlc3Npb24uaXBBZGRyZXNzICYmIGNvbnRleHQudXNlci5pcF9hZGRyZXNzKSB7CiAgICAgIHNlc3Npb24uaXBBZGRyZXNzID0gY29udGV4dC51c2VyLmlwX2FkZHJlc3M7CiAgICB9CgogICAgaWYgKCFzZXNzaW9uLmRpZCAmJiAhY29udGV4dC5kaWQpIHsKICAgICAgc2Vzc2lvbi5kaWQgPSBjb250ZXh0LnVzZXIuaWQgfHwgY29udGV4dC51c2VyLmVtYWlsIHx8IGNvbnRleHQudXNlci51c2VybmFtZTsKICAgIH0KICB9CgogIHNlc3Npb24udGltZXN0YW1wID0gY29udGV4dC50aW1lc3RhbXAgfHwgdGltZXN0YW1wSW5TZWNvbmRzKCk7CgogIGlmIChjb250ZXh0LmFibm9ybWFsX21lY2hhbmlzbSkgewogICAgc2Vzc2lvbi5hYm5vcm1hbF9tZWNoYW5pc20gPSBjb250ZXh0LmFibm9ybWFsX21lY2hhbmlzbTsKICB9CgogIGlmIChjb250ZXh0Lmlnbm9yZUR1cmF0aW9uKSB7CiAgICBzZXNzaW9uLmlnbm9yZUR1cmF0aW9uID0gY29udGV4dC5pZ25vcmVEdXJhdGlvbjsKICB9CiAgaWYgKGNvbnRleHQuc2lkKSB7CiAgICAvLyBHb29kIGVub3VnaCB1dWlkIHZhbGlkYXRpb24uIOKAlCBLYW1pbAogICAgc2Vzc2lvbi5zaWQgPSBjb250ZXh0LnNpZC5sZW5ndGggPT09IDMyID8gY29udGV4dC5zaWQgOiB1dWlkNCgpOwogIH0KICBpZiAoY29udGV4dC5pbml0ICE9PSB1bmRlZmluZWQpIHsKICAgIHNlc3Npb24uaW5pdCA9IGNvbnRleHQuaW5pdDsKICB9CiAgaWYgKCFzZXNzaW9uLmRpZCAmJiBjb250ZXh0LmRpZCkgewogICAgc2Vzc2lvbi5kaWQgPSBgJHtjb250ZXh0LmRpZH1gOwogIH0KICBpZiAodHlwZW9mIGNvbnRleHQuc3RhcnRlZCA9PT0gJ251bWJlcicpIHsKICAgIHNlc3Npb24uc3RhcnRlZCA9IGNvbnRleHQuc3RhcnRlZDsKICB9CiAgaWYgKHNlc3Npb24uaWdub3JlRHVyYXRpb24pIHsKICAgIHNlc3Npb24uZHVyYXRpb24gPSB1bmRlZmluZWQ7CiAgfSBlbHNlIGlmICh0eXBlb2YgY29udGV4dC5kdXJhdGlvbiA9PT0gJ251bWJlcicpIHsKICAgIHNlc3Npb24uZHVyYXRpb24gPSBjb250ZXh0LmR1cmF0aW9uOwogIH0gZWxzZSB7CiAgICBjb25zdCBkdXJhdGlvbiA9IHNlc3Npb24udGltZXN0YW1wIC0gc2Vzc2lvbi5zdGFydGVkOwogICAgc2Vzc2lvbi5kdXJhdGlvbiA9IGR1cmF0aW9uID49IDAgPyBkdXJhdGlvbiA6IDA7CiAgfQogIGlmIChjb250ZXh0LnJlbGVhc2UpIHsKICAgIHNlc3Npb24ucmVsZWFzZSA9IGNvbnRleHQucmVsZWFzZTsKICB9CiAgaWYgKGNvbnRleHQuZW52aXJvbm1lbnQpIHsKICAgIHNlc3Npb24uZW52aXJvbm1lbnQgPSBjb250ZXh0LmVudmlyb25tZW50OwogIH0KICBpZiAoIXNlc3Npb24uaXBBZGRyZXNzICYmIGNvbnRleHQuaXBBZGRyZXNzKSB7CiAgICBzZXNzaW9uLmlwQWRkcmVzcyA9IGNvbnRleHQuaXBBZGRyZXNzOwogIH0KICBpZiAoIXNlc3Npb24udXNlckFnZW50ICYmIGNvbnRleHQudXNlckFnZW50KSB7CiAgICBzZXNzaW9uLnVzZXJBZ2VudCA9IGNvbnRleHQudXNlckFnZW50OwogIH0KICBpZiAodHlwZW9mIGNvbnRleHQuZXJyb3JzID09PSAnbnVtYmVyJykgewogICAgc2Vzc2lvbi5lcnJvcnMgPSBjb250ZXh0LmVycm9yczsKICB9CiAgaWYgKGNvbnRleHQuc3RhdHVzKSB7CiAgICBzZXNzaW9uLnN0YXR1cyA9IGNvbnRleHQuc3RhdHVzOwogIH0KfQoKLyoqCiAqIENsb3NlcyBhIHNlc3Npb24gYnkgc2V0dGluZyBpdHMgc3RhdHVzIGFuZCB1cGRhdGluZyB0aGUgc2Vzc2lvbiBvYmplY3Qgd2l0aCBpdC4KICogSW50ZXJuYWxseSBjYWxscyBgdXBkYXRlU2Vzc2lvbmAgdG8gdXBkYXRlIHRoZSBwYXNzZWQgc2Vzc2lvbiBvYmplY3QuCiAqCiAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIG11dGF0ZXMgdGhlIHBhc3NlZCBzZXNzaW9uIChAc2VlIHVwZGF0ZVNlc3Npb24gZm9yIGV4cGxhbmF0aW9uKS4KICoKICogQHBhcmFtIHNlc3Npb24gdGhlIGBTZXNzaW9uYCBvYmplY3QgdG8gYmUgY2xvc2VkCiAqIEBwYXJhbSBzdGF0dXMgdGhlIGBTZXNzaW9uU3RhdHVzYCB3aXRoIHdoaWNoIHRoZSBzZXNzaW9uIHdhcyBjbG9zZWQuIElmIHlvdSBkb24ndCBwYXNzIGEgc3RhdHVzLAogKiAgICAgICAgICAgICAgIHRoaXMgZnVuY3Rpb24gd2lsbCBrZWVwIHRoZSBwcmV2aW91c2x5IHNldCBzdGF0dXMsIHVubGVzcyBpdCB3YXMgYCdvaydgIGluIHdoaWNoIGNhc2UKICogICAgICAgICAgICAgICBpdCBpcyBjaGFuZ2VkIHRvIGAnZXhpdGVkJ2AuCiAqLwpmdW5jdGlvbiBjbG9zZVNlc3Npb24oc2Vzc2lvbiwgc3RhdHVzKSB7CiAgbGV0IGNvbnRleHQgPSB7fTsKICBpZiAoc3RhdHVzKSB7CiAgICBjb250ZXh0ID0geyBzdGF0dXMgfTsKICB9IGVsc2UgaWYgKHNlc3Npb24uc3RhdHVzID09PSAnb2snKSB7CiAgICBjb250ZXh0ID0geyBzdGF0dXM6ICdleGl0ZWQnIH07CiAgfQoKICB1cGRhdGVTZXNzaW9uKHNlc3Npb24sIGNvbnRleHQpOwp9CgovKioKICogU2VyaWFsaXplcyBhIHBhc3NlZCBzZXNzaW9uIG9iamVjdCB0byBhIEpTT04gb2JqZWN0IHdpdGggYSBzbGlnaHRseSBkaWZmZXJlbnQgc3RydWN0dXJlLgogKiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBTZW50cnkgYmFja2VuZCByZXF1aXJlcyBhIHNsaWdodGx5IGRpZmZlcmVudCBzY2hlbWEgb2YgYSBzZXNzaW9uCiAqIHRoYW4gdGhlIG9uZSB0aGUgSlMgU0RLcyB1c2UgaW50ZXJuYWxseS4KICoKICogQHBhcmFtIHNlc3Npb24gdGhlIHNlc3Npb24gdG8gYmUgY29udmVydGVkCiAqCiAqIEByZXR1cm5zIGEgSlNPTiBvYmplY3Qgb2YgdGhlIHBhc3NlZCBzZXNzaW9uCiAqLwpmdW5jdGlvbiBzZXNzaW9uVG9KU09OKHNlc3Npb24pIHsKICByZXR1cm4gZHJvcFVuZGVmaW5lZEtleXMoewogICAgc2lkOiBgJHtzZXNzaW9uLnNpZH1gLAogICAgaW5pdDogc2Vzc2lvbi5pbml0LAogICAgLy8gTWFrZSBzdXJlIHRoYXQgc2VjIGlzIGNvbnZlcnRlZCB0byBtcyBmb3IgZGF0ZSBjb25zdHJ1Y3RvcgogICAgc3RhcnRlZDogbmV3IERhdGUoc2Vzc2lvbi5zdGFydGVkICogMTAwMCkudG9JU09TdHJpbmcoKSwKICAgIHRpbWVzdGFtcDogbmV3IERhdGUoc2Vzc2lvbi50aW1lc3RhbXAgKiAxMDAwKS50b0lTT1N0cmluZygpLAogICAgc3RhdHVzOiBzZXNzaW9uLnN0YXR1cywKICAgIGVycm9yczogc2Vzc2lvbi5lcnJvcnMsCiAgICBkaWQ6IHR5cGVvZiBzZXNzaW9uLmRpZCA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHNlc3Npb24uZGlkID09PSAnc3RyaW5nJyA/IGAke3Nlc3Npb24uZGlkfWAgOiB1bmRlZmluZWQsCiAgICBkdXJhdGlvbjogc2Vzc2lvbi5kdXJhdGlvbiwKICAgIGFibm9ybWFsX21lY2hhbmlzbTogc2Vzc2lvbi5hYm5vcm1hbF9tZWNoYW5pc20sCiAgICBhdHRyczogewogICAgICByZWxlYXNlOiBzZXNzaW9uLnJlbGVhc2UsCiAgICAgIGVudmlyb25tZW50OiBzZXNzaW9uLmVudmlyb25tZW50LAogICAgICBpcF9hZGRyZXNzOiBzZXNzaW9uLmlwQWRkcmVzcywKICAgICAgdXNlcl9hZ2VudDogc2Vzc2lvbi51c2VyQWdlbnQsCiAgICB9LAogIH0pOwp9Cgpjb25zdCBUUkFDRV9GTEFHX1NBTVBMRUQgPSAweDE7CgovKioKICogQ29udmVydCBhIHNwYW4gdG8gYSB0cmFjZSBjb250ZXh0LCB3aGljaCBjYW4gYmUgc2VudCBhcyB0aGUgYHRyYWNlYCBjb250ZXh0IGluIGFuIGV2ZW50LgogKi8KZnVuY3Rpb24gc3BhblRvVHJhY2VDb250ZXh0KHNwYW4pIHsKICBjb25zdCB7IHNwYW5JZDogc3Bhbl9pZCwgdHJhY2VJZDogdHJhY2VfaWQgfSA9IHNwYW4uc3BhbkNvbnRleHQoKTsKICBjb25zdCB7IGRhdGEsIG9wLCBwYXJlbnRfc3Bhbl9pZCwgc3RhdHVzLCB0YWdzLCBvcmlnaW4gfSA9IHNwYW5Ub0pTT04oc3Bhbik7CgogIHJldHVybiBkcm9wVW5kZWZpbmVkS2V5cyh7CiAgICBkYXRhLAogICAgb3AsCiAgICBwYXJlbnRfc3Bhbl9pZCwKICAgIHNwYW5faWQsCiAgICBzdGF0dXMsCiAgICB0YWdzLAogICAgdHJhY2VfaWQsCiAgICBvcmlnaW4sCiAgfSk7Cn0KCi8qKgogKiBDb252ZXJ0IGEgc3BhbiB0byBhIEpTT04gcmVwcmVzZW50YXRpb24uCiAqIE5vdGUgdGhhdCBhbGwgZmllbGRzIHJldHVybmVkIGhlcmUgYXJlIG9wdGlvbmFsIGFuZCBuZWVkIHRvIGJlIGd1YXJkZWQgYWdhaW5zdC4KICoKICogTm90ZTogQmVjYXVzZSBvZiB0aGlzLCB3ZSBjdXJyZW50bHkgaGF2ZSBhIGNpcmN1bGFyIHR5cGUgZGVwZW5kZW5jeSAod2hpY2ggd2Ugb3B0ZWQgb3V0IG9mIGluIHBhY2thZ2UuanNvbikuCiAqIFRoaXMgaXMgbm90IGF2b2lkYWJsZSBhcyB3ZSBuZWVkIGBzcGFuVG9KU09OYCBpbiBgc3BhblV0aWxzLnRzYCwgd2hpY2ggaW4gdHVybiBpcyBuZWVkZWQgYnkgYHNwYW4udHNgIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KICogQW5kIGBzcGFuVG9KU09OYCBuZWVkcyB0aGUgU3BhbiBjbGFzcyBmcm9tIGBzcGFuLnRzYCB0byBjaGVjayBoZXJlLgogKiBUT0RPIHY4OiBXaGVuIHdlIHJlbW92ZSB0aGUgZGVwcmVjYXRlZCBzdHVmZiBmcm9tIGBzcGFuLnRzYCwgd2UgY2FuIHJlbW92ZSB0aGUgY2lyY3VsYXIgZGVwZW5kZW5jeSBhZ2Fpbi4KICovCmZ1bmN0aW9uIHNwYW5Ub0pTT04oc3BhbikgewogIGlmIChzcGFuSXNTcGFuQ2xhc3Moc3BhbikpIHsKICAgIHJldHVybiBzcGFuLmdldFNwYW5KU09OKCk7CiAgfQoKICAvLyBGYWxsYmFjazogV2UgYWxzbyBjaGVjayBmb3IgYC50b0pTT04oKWAgaGVyZS4uLgogIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogIGlmICh0eXBlb2Ygc3Bhbi50b0pTT04gPT09ICdmdW5jdGlvbicpIHsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgcmV0dXJuIHNwYW4udG9KU09OKCk7CiAgfQoKICByZXR1cm4ge307Cn0KCi8qKgogKiBTYWRseSwgZHVlIHRvIGNpcmN1bGFyIGRlcGVuZGVuY3kgY2hlY2tzIHdlIGNhbm5vdCBhY3R1YWxseSBpbXBvcnQgdGhlIFNwYW4gY2xhc3MgaGVyZSBhbmQgY2hlY2sgZm9yIGluc3RhbmNlb2YuCiAqIDooIFNvIGluc3RlYWQgd2UgYXBwcm94aW1hdGUgdGhpcyBieSBjaGVja2luZyBpZiBpdCBoYXMgdGhlIGBnZXRTcGFuSlNPTmAgbWV0aG9kLgogKi8KZnVuY3Rpb24gc3BhbklzU3BhbkNsYXNzKHNwYW4pIHsKICByZXR1cm4gdHlwZW9mIChzcGFuICkuZ2V0U3BhbkpTT04gPT09ICdmdW5jdGlvbic7Cn0KCi8qKgogKiBSZXR1cm5zIHRydWUgaWYgYSBzcGFuIGlzIHNhbXBsZWQuCiAqIEluIG1vc3QgY2FzZXMsIHlvdSBzaG91bGQganVzdCB1c2UgYHNwYW4uaXNSZWNvcmRpbmcoKWAgaW5zdGVhZC4KICogSG93ZXZlciwgdGhpcyBoYXMgYSBzbGlnaHRseSBkaWZmZXJlbnQgc2VtYW50aWMsIGFzIGl0IGFsc28gcmV0dXJucyBmYWxzZSBpZiB0aGUgc3BhbiBpcyBmaW5pc2hlZC4KICogU28gaW4gdGhlIGNhc2Ugd2hlcmUgdGhpcyBkaXN0aW5jdGlvbiBpcyBpbXBvcnRhbnQsIHVzZSB0aGlzIG1ldGhvZC4KICovCmZ1bmN0aW9uIHNwYW5Jc1NhbXBsZWQoc3BhbikgewogIC8vIFdlIGFsaWduIG91ciB0cmFjZSBmbGFncyB3aXRoIHRoZSBvbmVzIE9wZW5UZWxlbWV0cnkgdXNlCiAgLy8gU28gd2UgYWxzbyBjaGVjayBmb3Igc2FtcGxlZCB0aGUgc2FtZSB3YXkgdGhleSBkby4KICBjb25zdCB7IHRyYWNlRmxhZ3MgfSA9IHNwYW4uc3BhbkNvbnRleHQoKTsKICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZQogIHJldHVybiBCb29sZWFuKHRyYWNlRmxhZ3MgJiBUUkFDRV9GTEFHX1NBTVBMRUQpOwp9CgovKioKICogR2V0IHRoZSBjdXJyZW50bHkgYWN0aXZlIGNsaWVudC4KICovCmZ1bmN0aW9uIGdldENsaWVudCgpIHsKICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICByZXR1cm4gZ2V0Q3VycmVudEh1YigpLmdldENsaWVudCgpOwp9CgovKioKICogR2V0IHRoZSBjdXJyZW50bHkgYWN0aXZlIHNjb3BlLgogKi8KZnVuY3Rpb24gZ2V0Q3VycmVudFNjb3BlKCkgewogIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogIHJldHVybiBnZXRDdXJyZW50SHViKCkuZ2V0U2NvcGUoKTsKfQoKLyoqCiAqIFJldHVybnMgdGhlIHJvb3Qgc3BhbiBvZiBhIGdpdmVuIHNwYW4uCiAqCiAqIEFzIGxvbmcgYXMgd2UgdXNlIGBUcmFuc2FjdGlvbmBzIGludGVybmFsbHksIHRoZSByZXR1cm5lZCByb290IHNwYW4KICogd2lsbCBiZSBhIGBUcmFuc2FjdGlvbmAgYnV0IGJlIGF3YXJlIHRoYXQgdGhpcyBtaWdodCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS4KICoKICogSWYgdGhlIGdpdmVuIHNwYW4gaGFzIG5vIHJvb3Qgc3BhbiBvciB0cmFuc2FjdGlvbiwgYHVuZGVmaW5lZGAgaXMgcmV0dXJuZWQuCiAqLwpmdW5jdGlvbiBnZXRSb290U3BhbihzcGFuKSB7CiAgLy8gVE9ETyAodjgpOiBSZW1vdmUgdGhpcyBjaGVjayBhbmQganVzdCByZXR1cm4gc3BhbgogIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogIHJldHVybiBzcGFuLnRyYW5zYWN0aW9uOwp9CgovKioKICogQ3JlYXRlcyBhIGR5bmFtaWMgc2FtcGxpbmcgY29udGV4dCBmcm9tIGEgY2xpZW50LgogKgogKiBEaXNwYXRjaGVzIHRoZSBgY3JlYXRlRHNjYCBsaWZlY3ljbGUgaG9vayBhcyBhIHNpZGUgZWZmZWN0LgogKi8KZnVuY3Rpb24gZ2V0RHluYW1pY1NhbXBsaW5nQ29udGV4dEZyb21DbGllbnQoCiAgdHJhY2VfaWQsCiAgY2xpZW50LAogIHNjb3BlLAopIHsKICBjb25zdCBvcHRpb25zID0gY2xpZW50LmdldE9wdGlvbnMoKTsKCiAgY29uc3QgeyBwdWJsaWNLZXk6IHB1YmxpY19rZXkgfSA9IGNsaWVudC5nZXREc24oKSB8fCB7fTsKICAvLyBUT0RPKHY4KTogUmVtb3ZlIHNlZ21lbnQgZnJvbSBVc2VyCiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgY29uc3QgeyBzZWdtZW50OiB1c2VyX3NlZ21lbnQgfSA9IChzY29wZSAmJiBzY29wZS5nZXRVc2VyKCkpIHx8IHt9OwoKICBjb25zdCBkc2MgPSBkcm9wVW5kZWZpbmVkS2V5cyh7CiAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5lbnZpcm9ubWVudCB8fCBERUZBVUxUX0VOVklST05NRU5ULAogICAgcmVsZWFzZTogb3B0aW9ucy5yZWxlYXNlLAogICAgdXNlcl9zZWdtZW50LAogICAgcHVibGljX2tleSwKICAgIHRyYWNlX2lkLAogIH0pIDsKCiAgY2xpZW50LmVtaXQgJiYgY2xpZW50LmVtaXQoJ2NyZWF0ZURzYycsIGRzYyk7CgogIHJldHVybiBkc2M7Cn0KCi8qKgogKiBBIFNwYW4gd2l0aCBhIGZyb3plbiBkeW5hbWljIHNhbXBsaW5nIGNvbnRleHQuCiAqLwoKLyoqCiAqIENyZWF0ZXMgYSBkeW5hbWljIHNhbXBsaW5nIGNvbnRleHQgZnJvbSBhIHNwYW4gKGFuZCBjbGllbnQgYW5kIHNjb3BlKQogKgogKiBAcGFyYW0gc3BhbiB0aGUgc3BhbiBmcm9tIHdoaWNoIGEgZmV3IHZhbHVlcyBsaWtlIHRoZSByb290IHNwYW4gbmFtZSBhbmQgc2FtcGxlIHJhdGUgYXJlIGV4dHJhY3RlZC4KICoKICogQHJldHVybnMgYSBkeW5hbWljIHNhbXBsaW5nIGNvbnRleHQKICovCmZ1bmN0aW9uIGdldER5bmFtaWNTYW1wbGluZ0NvbnRleHRGcm9tU3BhbihzcGFuKSB7CiAgY29uc3QgY2xpZW50ID0gZ2V0Q2xpZW50KCk7CiAgaWYgKCFjbGllbnQpIHsKICAgIHJldHVybiB7fTsKICB9CgogIC8vIHBhc3NpbmcgZW1pdD1mYWxzZSBoZXJlIHRvIG9ubHkgZW1pdCBsYXRlciBvbmNlIHRoZSBEU0MgaXMgYWN0dWFsbHkgcG9wdWxhdGVkCiAgY29uc3QgZHNjID0gZ2V0RHluYW1pY1NhbXBsaW5nQ29udGV4dEZyb21DbGllbnQoc3BhblRvSlNPTihzcGFuKS50cmFjZV9pZCB8fCAnJywgY2xpZW50LCBnZXRDdXJyZW50U2NvcGUoKSk7CgogIC8vIFRPRE8gKHY4KTogUmVtb3ZlIHY3RnJvemVuRHNjIGFzIGEgVHJhbnNhY3Rpb24gd2lsbCBubyBsb25nZXIgaGF2ZSBfZnJvemVuRHluYW1pY1NhbXBsaW5nQ29udGV4dAogIGNvbnN0IHR4biA9IGdldFJvb3RTcGFuKHNwYW4pIDsKICBpZiAoIXR4bikgewogICAgcmV0dXJuIGRzYzsKICB9CgogIC8vIFRPRE8gKHY4KTogUmVtb3ZlIHY3RnJvemVuRHNjIGFzIGEgVHJhbnNhY3Rpb24gd2lsbCBubyBsb25nZXIgaGF2ZSBfZnJvemVuRHluYW1pY1NhbXBsaW5nQ29udGV4dAogIC8vIEZvciBub3cgd2UgbmVlZCB0byBhdm9pZCBicmVha2luZyB1c2VycyB3aG8gZGlyZWN0bHkgY3JlYXRlZCBhIHR4biB3aXRoIGEgRFNDLCB3aGVyZSB0aGlzIGZpZWxkIGlzIHN0aWxsIHNldC4KICAvLyBAc2VlIFRyYW5zYWN0aW9uIGNsYXNzIGNvbnN0cnVjdG9yCiAgY29uc3QgdjdGcm96ZW5Ec2MgPSB0eG4gJiYgdHhuLl9mcm96ZW5EeW5hbWljU2FtcGxpbmdDb250ZXh0OwogIGlmICh2N0Zyb3plbkRzYykgewogICAgcmV0dXJuIHY3RnJvemVuRHNjOwogIH0KCiAgLy8gVE9ETyAodjgpOiBSZXBsYWNlIHR4bi5tZXRhZGF0YSB3aXRoIHR4bi5hdHRyaWJ1dGVzW10KICAvLyBXZSBjYW4ndCBkbyB0aGlzIHlldCBiZWNhdXNlIGF0dHJpYnV0ZXMgYXJlbid0IGFsd2F5cyBzZXQgeWV0LgogIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogIGNvbnN0IHsgc2FtcGxlUmF0ZTogbWF5YmVTYW1wbGVSYXRlLCBzb3VyY2UgfSA9IHR4bi5tZXRhZGF0YTsKICBpZiAobWF5YmVTYW1wbGVSYXRlICE9IG51bGwpIHsKICAgIGRzYy5zYW1wbGVfcmF0ZSA9IGAke21heWJlU2FtcGxlUmF0ZX1gOwogIH0KCiAgLy8gV2UgZG9uJ3Qgd2FudCB0byBoYXZlIGEgdHJhbnNhY3Rpb24gbmFtZSBpbiB0aGUgRFNDIGlmIHRoZSBzb3VyY2UgaXMgInVybCIgYmVjYXVzZSBVUkxzIG1pZ2h0IGNvbnRhaW4gUElJCiAgY29uc3QganNvblNwYW4gPSBzcGFuVG9KU09OKHR4bik7CgogIC8vIGFmdGVyIEpTT04gY29udmVyc2lvbiwgdHhuLm5hbWUgYmVjb21lcyBqc29uU3Bhbi5kZXNjcmlwdGlvbgogIGlmIChzb3VyY2UgJiYgc291cmNlICE9PSAndXJsJykgewogICAgZHNjLnRyYW5zYWN0aW9uID0ganNvblNwYW4uZGVzY3JpcHRpb247CiAgfQoKICBkc2Muc2FtcGxlZCA9IFN0cmluZyhzcGFuSXNTYW1wbGVkKHR4bikpOwoKICBjbGllbnQuZW1pdCAmJiBjbGllbnQuZW1pdCgnY3JlYXRlRHNjJywgZHNjKTsKCiAgcmV0dXJuIGRzYzsKfQoKLyoqCiAqIEFwcGxpZXMgZGF0YSBmcm9tIHRoZSBzY29wZSB0byB0aGUgZXZlbnQgYW5kIHJ1bnMgYWxsIGV2ZW50IHByb2Nlc3NvcnMgb24gaXQuCiAqLwpmdW5jdGlvbiBhcHBseVNjb3BlRGF0YVRvRXZlbnQoZXZlbnQsIGRhdGEpIHsKICBjb25zdCB7IGZpbmdlcnByaW50LCBzcGFuLCBicmVhZGNydW1icywgc2RrUHJvY2Vzc2luZ01ldGFkYXRhIH0gPSBkYXRhOwoKICAvLyBBcHBseSBnZW5lcmFsIGRhdGEKICBhcHBseURhdGFUb0V2ZW50KGV2ZW50LCBkYXRhKTsKCiAgLy8gV2Ugd2FudCB0byBzZXQgdGhlIHRyYWNlIGNvbnRleHQgZm9yIG5vcm1hbCBldmVudHMgb25seSBpZiB0aGVyZSBpc24ndCBhbHJlYWR5CiAgLy8gYSB0cmFjZSBjb250ZXh0IG9uIHRoZSBldmVudC4gVGhlcmUgaXMgYSBwcm9kdWN0IGZlYXR1cmUgaW4gcGxhY2Ugd2hlcmUgd2UgbGluawogIC8vIGVycm9ycyB3aXRoIHRyYW5zYWN0aW9uIGFuZCBpdCByZWxpZXMgb24gdGhhdC4KICBpZiAoc3BhbikgewogICAgYXBwbHlTcGFuVG9FdmVudChldmVudCwgc3Bhbik7CiAgfQoKICBhcHBseUZpbmdlcnByaW50VG9FdmVudChldmVudCwgZmluZ2VycHJpbnQpOwogIGFwcGx5QnJlYWRjcnVtYnNUb0V2ZW50KGV2ZW50LCBicmVhZGNydW1icyk7CiAgYXBwbHlTZGtNZXRhZGF0YVRvRXZlbnQoZXZlbnQsIHNka1Byb2Nlc3NpbmdNZXRhZGF0YSk7Cn0KCmZ1bmN0aW9uIGFwcGx5RGF0YVRvRXZlbnQoZXZlbnQsIGRhdGEpIHsKICBjb25zdCB7CiAgICBleHRyYSwKICAgIHRhZ3MsCiAgICB1c2VyLAogICAgY29udGV4dHMsCiAgICBsZXZlbCwKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgdHJhbnNhY3Rpb25OYW1lLAogIH0gPSBkYXRhOwoKICBjb25zdCBjbGVhbmVkRXh0cmEgPSBkcm9wVW5kZWZpbmVkS2V5cyhleHRyYSk7CiAgaWYgKGNsZWFuZWRFeHRyYSAmJiBPYmplY3Qua2V5cyhjbGVhbmVkRXh0cmEpLmxlbmd0aCkgewogICAgZXZlbnQuZXh0cmEgPSB7IC4uLmNsZWFuZWRFeHRyYSwgLi4uZXZlbnQuZXh0cmEgfTsKICB9CgogIGNvbnN0IGNsZWFuZWRUYWdzID0gZHJvcFVuZGVmaW5lZEtleXModGFncyk7CiAgaWYgKGNsZWFuZWRUYWdzICYmIE9iamVjdC5rZXlzKGNsZWFuZWRUYWdzKS5sZW5ndGgpIHsKICAgIGV2ZW50LnRhZ3MgPSB7IC4uLmNsZWFuZWRUYWdzLCAuLi5ldmVudC50YWdzIH07CiAgfQoKICBjb25zdCBjbGVhbmVkVXNlciA9IGRyb3BVbmRlZmluZWRLZXlzKHVzZXIpOwogIGlmIChjbGVhbmVkVXNlciAmJiBPYmplY3Qua2V5cyhjbGVhbmVkVXNlcikubGVuZ3RoKSB7CiAgICBldmVudC51c2VyID0geyAuLi5jbGVhbmVkVXNlciwgLi4uZXZlbnQudXNlciB9OwogIH0KCiAgY29uc3QgY2xlYW5lZENvbnRleHRzID0gZHJvcFVuZGVmaW5lZEtleXMoY29udGV4dHMpOwogIGlmIChjbGVhbmVkQ29udGV4dHMgJiYgT2JqZWN0LmtleXMoY2xlYW5lZENvbnRleHRzKS5sZW5ndGgpIHsKICAgIGV2ZW50LmNvbnRleHRzID0geyAuLi5jbGVhbmVkQ29udGV4dHMsIC4uLmV2ZW50LmNvbnRleHRzIH07CiAgfQoKICBpZiAobGV2ZWwpIHsKICAgIGV2ZW50LmxldmVsID0gbGV2ZWw7CiAgfQoKICBpZiAodHJhbnNhY3Rpb25OYW1lKSB7CiAgICBldmVudC50cmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uTmFtZTsKICB9Cn0KCmZ1bmN0aW9uIGFwcGx5QnJlYWRjcnVtYnNUb0V2ZW50KGV2ZW50LCBicmVhZGNydW1icykgewogIGNvbnN0IG1lcmdlZEJyZWFkY3J1bWJzID0gWy4uLihldmVudC5icmVhZGNydW1icyB8fCBbXSksIC4uLmJyZWFkY3J1bWJzXTsKICBldmVudC5icmVhZGNydW1icyA9IG1lcmdlZEJyZWFkY3J1bWJzLmxlbmd0aCA/IG1lcmdlZEJyZWFkY3J1bWJzIDogdW5kZWZpbmVkOwp9CgpmdW5jdGlvbiBhcHBseVNka01ldGFkYXRhVG9FdmVudChldmVudCwgc2RrUHJvY2Vzc2luZ01ldGFkYXRhKSB7CiAgZXZlbnQuc2RrUHJvY2Vzc2luZ01ldGFkYXRhID0gewogICAgLi4uZXZlbnQuc2RrUHJvY2Vzc2luZ01ldGFkYXRhLAogICAgLi4uc2RrUHJvY2Vzc2luZ01ldGFkYXRhLAogIH07Cn0KCmZ1bmN0aW9uIGFwcGx5U3BhblRvRXZlbnQoZXZlbnQsIHNwYW4pIHsKICBldmVudC5jb250ZXh0cyA9IHsgdHJhY2U6IHNwYW5Ub1RyYWNlQ29udGV4dChzcGFuKSwgLi4uZXZlbnQuY29udGV4dHMgfTsKICBjb25zdCByb290U3BhbiA9IGdldFJvb3RTcGFuKHNwYW4pOwogIGlmIChyb290U3BhbikgewogICAgZXZlbnQuc2RrUHJvY2Vzc2luZ01ldGFkYXRhID0gewogICAgICBkeW5hbWljU2FtcGxpbmdDb250ZXh0OiBnZXREeW5hbWljU2FtcGxpbmdDb250ZXh0RnJvbVNwYW4oc3BhbiksCiAgICAgIC4uLmV2ZW50LnNka1Byb2Nlc3NpbmdNZXRhZGF0YSwKICAgIH07CiAgICBjb25zdCB0cmFuc2FjdGlvbk5hbWUgPSBzcGFuVG9KU09OKHJvb3RTcGFuKS5kZXNjcmlwdGlvbjsKICAgIGlmICh0cmFuc2FjdGlvbk5hbWUpIHsKICAgICAgZXZlbnQudGFncyA9IHsgdHJhbnNhY3Rpb246IHRyYW5zYWN0aW9uTmFtZSwgLi4uZXZlbnQudGFncyB9OwogICAgfQogIH0KfQoKLyoqCiAqIEFwcGxpZXMgZmluZ2VycHJpbnQgZnJvbSB0aGUgc2NvcGUgdG8gdGhlIGV2ZW50IGlmIHRoZXJlJ3Mgb25lLAogKiB1c2VzIG1lc3NhZ2UgaWYgdGhlcmUncyBvbmUgaW5zdGVhZCBvciBnZXQgcmlkIG9mIGVtcHR5IGZpbmdlcnByaW50CiAqLwpmdW5jdGlvbiBhcHBseUZpbmdlcnByaW50VG9FdmVudChldmVudCwgZmluZ2VycHJpbnQpIHsKICAvLyBNYWtlIHN1cmUgaXQncyBhbiBhcnJheSBmaXJzdCBhbmQgd2UgYWN0dWFsbHkgaGF2ZSBzb21ldGhpbmcgaW4gcGxhY2UKICBldmVudC5maW5nZXJwcmludCA9IGV2ZW50LmZpbmdlcnByaW50ID8gYXJyYXlpZnkoZXZlbnQuZmluZ2VycHJpbnQpIDogW107CgogIC8vIElmIHdlIGhhdmUgc29tZXRoaW5nIG9uIHRoZSBzY29wZSwgdGhlbiBtZXJnZSBpdCB3aXRoIGV2ZW50CiAgaWYgKGZpbmdlcnByaW50KSB7CiAgICBldmVudC5maW5nZXJwcmludCA9IGV2ZW50LmZpbmdlcnByaW50LmNvbmNhdChmaW5nZXJwcmludCk7CiAgfQoKICAvLyBJZiB3ZSBoYXZlIG5vIGRhdGEgYXQgYWxsLCByZW1vdmUgZW1wdHkgYXJyYXkgZGVmYXVsdAogIGlmIChldmVudC5maW5nZXJwcmludCAmJiAhZXZlbnQuZmluZ2VycHJpbnQubGVuZ3RoKSB7CiAgICBkZWxldGUgZXZlbnQuZmluZ2VycHJpbnQ7CiAgfQp9CgovKioKICogRGVmYXVsdCB2YWx1ZSBmb3IgbWF4aW11bSBudW1iZXIgb2YgYnJlYWRjcnVtYnMgYWRkZWQgdG8gYW4gZXZlbnQuCiAqLwpjb25zdCBERUZBVUxUX01BWF9CUkVBRENSVU1CUyA9IDEwMDsKCi8qKgogKiBIb2xkcyBhZGRpdGlvbmFsIGV2ZW50IGluZm9ybWF0aW9uLiB7QGxpbmsgU2NvcGUuYXBwbHlUb0V2ZW50fSB3aWxsIGJlCiAqIGNhbGxlZCBieSB0aGUgY2xpZW50IGJlZm9yZSBhbiBldmVudCB3aWxsIGJlIHNlbnQuCiAqLwpjbGFzcyBTY29wZSAgewogIC8qKiBGbGFnIGlmIG5vdGlmeWluZyBpcyBoYXBwZW5pbmcuICovCgogIC8qKiBDYWxsYmFjayBmb3IgY2xpZW50IHRvIHJlY2VpdmUgc2NvcGUgY2hhbmdlcy4gKi8KCiAgLyoqIENhbGxiYWNrIGxpc3QgdGhhdCB3aWxsIGJlIGNhbGxlZCBhZnRlciB7QGxpbmsgYXBwbHlUb0V2ZW50fS4gKi8KCiAgLyoqIEFycmF5IG9mIGJyZWFkY3J1bWJzLiAqLwoKICAvKiogVXNlciAqLwoKICAvKiogVGFncyAqLwoKICAvKiogRXh0cmEgKi8KCiAgLyoqIENvbnRleHRzICovCgogIC8qKiBBdHRhY2htZW50cyAqLwoKICAvKiogUHJvcGFnYXRpb24gQ29udGV4dCBmb3IgZGlzdHJpYnV0ZWQgdHJhY2luZyAqLwoKICAvKioKICAgKiBBIHBsYWNlIHRvIHN0YXNoIGRhdGEgd2hpY2ggaXMgbmVlZGVkIGF0IHNvbWUgcG9pbnQgaW4gdGhlIFNESydzIGV2ZW50IHByb2Nlc3NpbmcgcGlwZWxpbmUgYnV0IHdoaWNoIHNob3VsZG4ndCBnZXQKICAgKiBzZW50IHRvIFNlbnRyeQogICAqLwoKICAvKiogRmluZ2VycHJpbnQgKi8KCiAgLyoqIFNldmVyaXR5ICovCiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCgogIC8qKgogICAqIFRyYW5zYWN0aW9uIE5hbWUKICAgKi8KCiAgLyoqIFNwYW4gKi8KCiAgLyoqIFNlc3Npb24gKi8KCiAgLyoqIFJlcXVlc3QgTW9kZSBTZXNzaW9uIFN0YXR1cyAqLwoKICAvKiogVGhlIGNsaWVudCBvbiB0aGlzIHNjb3BlICovCgogIC8vIE5PVEU6IEFueSBmaWVsZCB3aGljaCBnZXRzIGFkZGVkIGhlcmUgc2hvdWxkIGdldCBhZGRlZCBub3Qgb25seSB0byB0aGUgY29uc3RydWN0b3IgYnV0IGFsc28gdG8gdGhlIGBjbG9uZWAgbWV0aG9kLgoKICAgY29uc3RydWN0b3IoKSB7CiAgICB0aGlzLl9ub3RpZnlpbmdMaXN0ZW5lcnMgPSBmYWxzZTsKICAgIHRoaXMuX3Njb3BlTGlzdGVuZXJzID0gW107CiAgICB0aGlzLl9ldmVudFByb2Nlc3NvcnMgPSBbXTsKICAgIHRoaXMuX2JyZWFkY3J1bWJzID0gW107CiAgICB0aGlzLl9hdHRhY2htZW50cyA9IFtdOwogICAgdGhpcy5fdXNlciA9IHt9OwogICAgdGhpcy5fdGFncyA9IHt9OwogICAgdGhpcy5fZXh0cmEgPSB7fTsKICAgIHRoaXMuX2NvbnRleHRzID0ge307CiAgICB0aGlzLl9zZGtQcm9jZXNzaW5nTWV0YWRhdGEgPSB7fTsKICAgIHRoaXMuX3Byb3BhZ2F0aW9uQ29udGV4dCA9IGdlbmVyYXRlUHJvcGFnYXRpb25Db250ZXh0KCk7CiAgfQoKICAvKioKICAgKiBJbmhlcml0IHZhbHVlcyBmcm9tIHRoZSBwYXJlbnQgc2NvcGUuCiAgICogQGRlcHJlY2F0ZWQgVXNlIGBzY29wZS5jbG9uZSgpYCBhbmQgYG5ldyBTY29wZSgpYCBpbnN0ZWFkLgogICAqLwogICBzdGF0aWMgY2xvbmUoc2NvcGUpIHsKICAgIHJldHVybiBzY29wZSA/IHNjb3BlLmNsb25lKCkgOiBuZXcgU2NvcGUoKTsKICB9CgogIC8qKgogICAqIENsb25lIHRoaXMgc2NvcGUgaW5zdGFuY2UuCiAgICovCiAgIGNsb25lKCkgewogICAgY29uc3QgbmV3U2NvcGUgPSBuZXcgU2NvcGUoKTsKICAgIG5ld1Njb3BlLl9icmVhZGNydW1icyA9IFsuLi50aGlzLl9icmVhZGNydW1ic107CiAgICBuZXdTY29wZS5fdGFncyA9IHsgLi4udGhpcy5fdGFncyB9OwogICAgbmV3U2NvcGUuX2V4dHJhID0geyAuLi50aGlzLl9leHRyYSB9OwogICAgbmV3U2NvcGUuX2NvbnRleHRzID0geyAuLi50aGlzLl9jb250ZXh0cyB9OwogICAgbmV3U2NvcGUuX3VzZXIgPSB0aGlzLl91c2VyOwogICAgbmV3U2NvcGUuX2xldmVsID0gdGhpcy5fbGV2ZWw7CiAgICBuZXdTY29wZS5fc3BhbiA9IHRoaXMuX3NwYW47CiAgICBuZXdTY29wZS5fc2Vzc2lvbiA9IHRoaXMuX3Nlc3Npb247CiAgICBuZXdTY29wZS5fdHJhbnNhY3Rpb25OYW1lID0gdGhpcy5fdHJhbnNhY3Rpb25OYW1lOwogICAgbmV3U2NvcGUuX2ZpbmdlcnByaW50ID0gdGhpcy5fZmluZ2VycHJpbnQ7CiAgICBuZXdTY29wZS5fZXZlbnRQcm9jZXNzb3JzID0gWy4uLnRoaXMuX2V2ZW50UHJvY2Vzc29yc107CiAgICBuZXdTY29wZS5fcmVxdWVzdFNlc3Npb24gPSB0aGlzLl9yZXF1ZXN0U2Vzc2lvbjsKICAgIG5ld1Njb3BlLl9hdHRhY2htZW50cyA9IFsuLi50aGlzLl9hdHRhY2htZW50c107CiAgICBuZXdTY29wZS5fc2RrUHJvY2Vzc2luZ01ldGFkYXRhID0geyAuLi50aGlzLl9zZGtQcm9jZXNzaW5nTWV0YWRhdGEgfTsKICAgIG5ld1Njb3BlLl9wcm9wYWdhdGlvbkNvbnRleHQgPSB7IC4uLnRoaXMuX3Byb3BhZ2F0aW9uQ29udGV4dCB9OwogICAgbmV3U2NvcGUuX2NsaWVudCA9IHRoaXMuX2NsaWVudDsKCiAgICByZXR1cm4gbmV3U2NvcGU7CiAgfQoKICAvKiogVXBkYXRlIHRoZSBjbGllbnQgb24gdGhlIHNjb3BlLiAqLwogICBzZXRDbGllbnQoY2xpZW50KSB7CiAgICB0aGlzLl9jbGllbnQgPSBjbGllbnQ7CiAgfQoKICAvKioKICAgKiBHZXQgdGhlIGNsaWVudCBhc3NpZ25lZCB0byB0aGlzIHNjb3BlLgogICAqCiAgICogSXQgaXMgZ2VuZXJhbGx5IHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgZ2xvYmFsIGZ1bmN0aW9uIGBTZW50cnkuZ2V0Q2xpZW50KClgIGluc3RlYWQsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuCiAgICovCiAgIGdldENsaWVudCgpIHsKICAgIHJldHVybiB0aGlzLl9jbGllbnQ7CiAgfQoKICAvKioKICAgKiBBZGQgaW50ZXJuYWwgb24gY2hhbmdlIGxpc3RlbmVyLiBVc2VkIGZvciBzdWIgU0RLcyB0aGF0IG5lZWQgdG8gc3RvcmUgdGhlIHNjb3BlLgogICAqIEBoaWRkZW4KICAgKi8KICAgYWRkU2NvcGVMaXN0ZW5lcihjYWxsYmFjaykgewogICAgdGhpcy5fc2NvcGVMaXN0ZW5lcnMucHVzaChjYWxsYmFjayk7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqLwogICBhZGRFdmVudFByb2Nlc3NvcihjYWxsYmFjaykgewogICAgdGhpcy5fZXZlbnRQcm9jZXNzb3JzLnB1c2goY2FsbGJhY2spOwogICAgcmV0dXJuIHRoaXM7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqLwogICBzZXRVc2VyKHVzZXIpIHsKICAgIC8vIElmIG51bGwgaXMgcGFzc2VkIHdlIHdhbnQgdG8gdW5zZXQgZXZlcnl0aGluZywgYnV0IHN0aWxsIGRlZmluZSBrZXlzLAogICAgLy8gc28gdGhhdCBsYXRlciBkb3duIGluIHRoZSBwaXBlbGluZSBhbnkgZXhpc3RpbmcgdmFsdWVzIGFyZSBjbGVhcmVkLgogICAgdGhpcy5fdXNlciA9IHVzZXIgfHwgewogICAgICBlbWFpbDogdW5kZWZpbmVkLAogICAgICBpZDogdW5kZWZpbmVkLAogICAgICBpcF9hZGRyZXNzOiB1bmRlZmluZWQsCiAgICAgIHNlZ21lbnQ6IHVuZGVmaW5lZCwKICAgICAgdXNlcm5hbWU6IHVuZGVmaW5lZCwKICAgIH07CgogICAgaWYgKHRoaXMuX3Nlc3Npb24pIHsKICAgICAgdXBkYXRlU2Vzc2lvbih0aGlzLl9zZXNzaW9uLCB7IHVzZXIgfSk7CiAgICB9CgogICAgdGhpcy5fbm90aWZ5U2NvcGVMaXN0ZW5lcnMoKTsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKi8KICAgZ2V0VXNlcigpIHsKICAgIHJldHVybiB0aGlzLl91c2VyOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKi8KICAgZ2V0UmVxdWVzdFNlc3Npb24oKSB7CiAgICByZXR1cm4gdGhpcy5fcmVxdWVzdFNlc3Npb247CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqLwogICBzZXRSZXF1ZXN0U2Vzc2lvbihyZXF1ZXN0U2Vzc2lvbikgewogICAgdGhpcy5fcmVxdWVzdFNlc3Npb24gPSByZXF1ZXN0U2Vzc2lvbjsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKi8KICAgc2V0VGFncyh0YWdzKSB7CiAgICB0aGlzLl90YWdzID0gewogICAgICAuLi50aGlzLl90YWdzLAogICAgICAuLi50YWdzLAogICAgfTsKICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICovCiAgIHNldFRhZyhrZXksIHZhbHVlKSB7CiAgICB0aGlzLl90YWdzID0geyAuLi50aGlzLl90YWdzLCBba2V5XTogdmFsdWUgfTsKICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICovCiAgIHNldEV4dHJhcyhleHRyYXMpIHsKICAgIHRoaXMuX2V4dHJhID0gewogICAgICAuLi50aGlzLl9leHRyYSwKICAgICAgLi4uZXh0cmFzLAogICAgfTsKICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICovCiAgIHNldEV4dHJhKGtleSwgZXh0cmEpIHsKICAgIHRoaXMuX2V4dHJhID0geyAuLi50aGlzLl9leHRyYSwgW2tleV06IGV4dHJhIH07CiAgICB0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpOwogICAgcmV0dXJuIHRoaXM7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqLwogICBzZXRGaW5nZXJwcmludChmaW5nZXJwcmludCkgewogICAgdGhpcy5fZmluZ2VycHJpbnQgPSBmaW5nZXJwcmludDsKICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICovCiAgIHNldExldmVsKAogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICBsZXZlbCwKICApIHsKICAgIHRoaXMuX2xldmVsID0gbGV2ZWw7CiAgICB0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpOwogICAgcmV0dXJuIHRoaXM7CiAgfQoKICAvKioKICAgKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBuYW1lIG9uIHRoZSBzY29wZSBmb3IgZnV0dXJlIGV2ZW50cy4KICAgKi8KICAgc2V0VHJhbnNhY3Rpb25OYW1lKG5hbWUpIHsKICAgIHRoaXMuX3RyYW5zYWN0aW9uTmFtZSA9IG5hbWU7CiAgICB0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpOwogICAgcmV0dXJuIHRoaXM7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqLwogICBzZXRDb250ZXh0KGtleSwgY29udGV4dCkgewogICAgaWYgKGNvbnRleHQgPT09IG51bGwpIHsKICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1keW5hbWljLWRlbGV0ZQogICAgICBkZWxldGUgdGhpcy5fY29udGV4dHNba2V5XTsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuX2NvbnRleHRzW2tleV0gPSBjb250ZXh0OwogICAgfQoKICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8qKgogICAqIFNldHMgdGhlIFNwYW4gb24gdGhlIHNjb3BlLgogICAqIEBwYXJhbSBzcGFuIFNwYW4KICAgKiBAZGVwcmVjYXRlZCBJbnN0ZWFkIG9mIHNldHRpbmcgYSBzcGFuIG9uIGEgc2NvcGUsIHVzZSBgc3RhcnRTcGFuKClgL2BzdGFydFNwYW5NYW51YWwoKWAgaW5zdGVhZC4KICAgKi8KICAgc2V0U3BhbihzcGFuKSB7CiAgICB0aGlzLl9zcGFuID0gc3BhbjsKICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8qKgogICAqIFJldHVybnMgdGhlIGBTcGFuYCBpZiB0aGVyZSBpcyBvbmUuCiAgICogQGRlcHJlY2F0ZWQgVXNlIGBnZXRBY3RpdmVTcGFuKClgIGluc3RlYWQuCiAgICovCiAgIGdldFNwYW4oKSB7CiAgICByZXR1cm4gdGhpcy5fc3BhbjsKICB9CgogIC8qKgogICAqIFJldHVybnMgdGhlIGBUcmFuc2FjdGlvbmAgYXR0YWNoZWQgdG8gdGhlIHNjb3BlIChpZiB0aGVyZSBpcyBvbmUpLgogICAqIEBkZXByZWNhdGVkIFlvdSBzaG91bGQgbm90IHJlbHkgb24gdGhlIHRyYW5zYWN0aW9uLCBidXQganVzdCB1c2UgYHN0YXJ0U3BhbigpYCBBUElzIGluc3RlYWQuCiAgICovCiAgIGdldFRyYW5zYWN0aW9uKCkgewogICAgLy8gT2Z0ZW4sIHRoaXMgc3BhbiAoaWYgaXQgZXhpc3RzIGF0IGFsbCkgd2lsbCBiZSBhIHRyYW5zYWN0aW9uLCBidXQgaXQncyBub3QgZ3VhcmFudGVlZCB0byBiZS4gUmVnYXJkbGVzcywgaXQgd2lsbAogICAgLy8gaGF2ZSBhIHBvaW50ZXIgdG8gdGhlIGN1cnJlbnRseS1hY3RpdmUgdHJhbnNhY3Rpb24uCiAgICBjb25zdCBzcGFuID0gdGhpcy5fc3BhbjsKICAgIC8vIENhbm5vdCByZXBsYWNlIHdpdGggZ2V0Um9vdFNwYW4gYmVjYXVzZSBnZXRSb290U3BhbiByZXR1cm5zIGEgc3Bhbiwgbm90IGEgdHJhbnNhY3Rpb24KICAgIC8vIEFsc28sIHRoaXMgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBhbnl3YXkuCiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgIHJldHVybiBzcGFuICYmIHNwYW4udHJhbnNhY3Rpb247CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqLwogICBzZXRTZXNzaW9uKHNlc3Npb24pIHsKICAgIGlmICghc2Vzc2lvbikgewogICAgICBkZWxldGUgdGhpcy5fc2Vzc2lvbjsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuX3Nlc3Npb24gPSBzZXNzaW9uOwogICAgfQogICAgdGhpcy5fbm90aWZ5U2NvcGVMaXN0ZW5lcnMoKTsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKi8KICAgZ2V0U2Vzc2lvbigpIHsKICAgIHJldHVybiB0aGlzLl9zZXNzaW9uOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKi8KICAgdXBkYXRlKGNhcHR1cmVDb250ZXh0KSB7CiAgICBpZiAoIWNhcHR1cmVDb250ZXh0KSB7CiAgICAgIHJldHVybiB0aGlzOwogICAgfQoKICAgIGNvbnN0IHNjb3BlVG9NZXJnZSA9IHR5cGVvZiBjYXB0dXJlQ29udGV4dCA9PT0gJ2Z1bmN0aW9uJyA/IGNhcHR1cmVDb250ZXh0KHRoaXMpIDogY2FwdHVyZUNvbnRleHQ7CgogICAgaWYgKHNjb3BlVG9NZXJnZSBpbnN0YW5jZW9mIFNjb3BlKSB7CiAgICAgIGNvbnN0IHNjb3BlRGF0YSA9IHNjb3BlVG9NZXJnZS5nZXRTY29wZURhdGEoKTsKCiAgICAgIHRoaXMuX3RhZ3MgPSB7IC4uLnRoaXMuX3RhZ3MsIC4uLnNjb3BlRGF0YS50YWdzIH07CiAgICAgIHRoaXMuX2V4dHJhID0geyAuLi50aGlzLl9leHRyYSwgLi4uc2NvcGVEYXRhLmV4dHJhIH07CiAgICAgIHRoaXMuX2NvbnRleHRzID0geyAuLi50aGlzLl9jb250ZXh0cywgLi4uc2NvcGVEYXRhLmNvbnRleHRzIH07CiAgICAgIGlmIChzY29wZURhdGEudXNlciAmJiBPYmplY3Qua2V5cyhzY29wZURhdGEudXNlcikubGVuZ3RoKSB7CiAgICAgICAgdGhpcy5fdXNlciA9IHNjb3BlRGF0YS51c2VyOwogICAgICB9CiAgICAgIGlmIChzY29wZURhdGEubGV2ZWwpIHsKICAgICAgICB0aGlzLl9sZXZlbCA9IHNjb3BlRGF0YS5sZXZlbDsKICAgICAgfQogICAgICBpZiAoc2NvcGVEYXRhLmZpbmdlcnByaW50Lmxlbmd0aCkgewogICAgICAgIHRoaXMuX2ZpbmdlcnByaW50ID0gc2NvcGVEYXRhLmZpbmdlcnByaW50OwogICAgICB9CiAgICAgIGlmIChzY29wZVRvTWVyZ2UuZ2V0UmVxdWVzdFNlc3Npb24oKSkgewogICAgICAgIHRoaXMuX3JlcXVlc3RTZXNzaW9uID0gc2NvcGVUb01lcmdlLmdldFJlcXVlc3RTZXNzaW9uKCk7CiAgICAgIH0KICAgICAgaWYgKHNjb3BlRGF0YS5wcm9wYWdhdGlvbkNvbnRleHQpIHsKICAgICAgICB0aGlzLl9wcm9wYWdhdGlvbkNvbnRleHQgPSBzY29wZURhdGEucHJvcGFnYXRpb25Db250ZXh0OwogICAgICB9CiAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3Qoc2NvcGVUb01lcmdlKSkgewogICAgICBjb25zdCBzY29wZUNvbnRleHQgPSBjYXB0dXJlQ29udGV4dCA7CiAgICAgIHRoaXMuX3RhZ3MgPSB7IC4uLnRoaXMuX3RhZ3MsIC4uLnNjb3BlQ29udGV4dC50YWdzIH07CiAgICAgIHRoaXMuX2V4dHJhID0geyAuLi50aGlzLl9leHRyYSwgLi4uc2NvcGVDb250ZXh0LmV4dHJhIH07CiAgICAgIHRoaXMuX2NvbnRleHRzID0geyAuLi50aGlzLl9jb250ZXh0cywgLi4uc2NvcGVDb250ZXh0LmNvbnRleHRzIH07CiAgICAgIGlmIChzY29wZUNvbnRleHQudXNlcikgewogICAgICAgIHRoaXMuX3VzZXIgPSBzY29wZUNvbnRleHQudXNlcjsKICAgICAgfQogICAgICBpZiAoc2NvcGVDb250ZXh0LmxldmVsKSB7CiAgICAgICAgdGhpcy5fbGV2ZWwgPSBzY29wZUNvbnRleHQubGV2ZWw7CiAgICAgIH0KICAgICAgaWYgKHNjb3BlQ29udGV4dC5maW5nZXJwcmludCkgewogICAgICAgIHRoaXMuX2ZpbmdlcnByaW50ID0gc2NvcGVDb250ZXh0LmZpbmdlcnByaW50OwogICAgICB9CiAgICAgIGlmIChzY29wZUNvbnRleHQucmVxdWVzdFNlc3Npb24pIHsKICAgICAgICB0aGlzLl9yZXF1ZXN0U2Vzc2lvbiA9IHNjb3BlQ29udGV4dC5yZXF1ZXN0U2Vzc2lvbjsKICAgICAgfQogICAgICBpZiAoc2NvcGVDb250ZXh0LnByb3BhZ2F0aW9uQ29udGV4dCkgewogICAgICAgIHRoaXMuX3Byb3BhZ2F0aW9uQ29udGV4dCA9IHNjb3BlQ29udGV4dC5wcm9wYWdhdGlvbkNvbnRleHQ7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gdGhpczsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICovCiAgIGNsZWFyKCkgewogICAgdGhpcy5fYnJlYWRjcnVtYnMgPSBbXTsKICAgIHRoaXMuX3RhZ3MgPSB7fTsKICAgIHRoaXMuX2V4dHJhID0ge307CiAgICB0aGlzLl91c2VyID0ge307CiAgICB0aGlzLl9jb250ZXh0cyA9IHt9OwogICAgdGhpcy5fbGV2ZWwgPSB1bmRlZmluZWQ7CiAgICB0aGlzLl90cmFuc2FjdGlvbk5hbWUgPSB1bmRlZmluZWQ7CiAgICB0aGlzLl9maW5nZXJwcmludCA9IHVuZGVmaW5lZDsKICAgIHRoaXMuX3JlcXVlc3RTZXNzaW9uID0gdW5kZWZpbmVkOwogICAgdGhpcy5fc3BhbiA9IHVuZGVmaW5lZDsKICAgIHRoaXMuX3Nlc3Npb24gPSB1bmRlZmluZWQ7CiAgICB0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpOwogICAgdGhpcy5fYXR0YWNobWVudHMgPSBbXTsKICAgIHRoaXMuX3Byb3BhZ2F0aW9uQ29udGV4dCA9IGdlbmVyYXRlUHJvcGFnYXRpb25Db250ZXh0KCk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICovCiAgIGFkZEJyZWFkY3J1bWIoYnJlYWRjcnVtYiwgbWF4QnJlYWRjcnVtYnMpIHsKICAgIGNvbnN0IG1heENydW1icyA9IHR5cGVvZiBtYXhCcmVhZGNydW1icyA9PT0gJ251bWJlcicgPyBtYXhCcmVhZGNydW1icyA6IERFRkFVTFRfTUFYX0JSRUFEQ1JVTUJTOwoKICAgIC8vIE5vIGRhdGEgaGFzIGJlZW4gY2hhbmdlZCwgc28gZG9uJ3Qgbm90aWZ5IHNjb3BlIGxpc3RlbmVycwogICAgaWYgKG1heENydW1icyA8PSAwKSB7CiAgICAgIHJldHVybiB0aGlzOwogICAgfQoKICAgIGNvbnN0IG1lcmdlZEJyZWFkY3J1bWIgPSB7CiAgICAgIHRpbWVzdGFtcDogZGF0ZVRpbWVzdGFtcEluU2Vjb25kcygpLAogICAgICAuLi5icmVhZGNydW1iLAogICAgfTsKCiAgICBjb25zdCBicmVhZGNydW1icyA9IHRoaXMuX2JyZWFkY3J1bWJzOwogICAgYnJlYWRjcnVtYnMucHVzaChtZXJnZWRCcmVhZGNydW1iKTsKICAgIHRoaXMuX2JyZWFkY3J1bWJzID0gYnJlYWRjcnVtYnMubGVuZ3RoID4gbWF4Q3J1bWJzID8gYnJlYWRjcnVtYnMuc2xpY2UoLW1heENydW1icykgOiBicmVhZGNydW1iczsKCiAgICB0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpOwoKICAgIHJldHVybiB0aGlzOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKi8KICAgZ2V0TGFzdEJyZWFkY3J1bWIoKSB7CiAgICByZXR1cm4gdGhpcy5fYnJlYWRjcnVtYnNbdGhpcy5fYnJlYWRjcnVtYnMubGVuZ3RoIC0gMV07CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqLwogICBjbGVhckJyZWFkY3J1bWJzKCkgewogICAgdGhpcy5fYnJlYWRjcnVtYnMgPSBbXTsKICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICovCiAgIGFkZEF0dGFjaG1lbnQoYXR0YWNobWVudCkgewogICAgdGhpcy5fYXR0YWNobWVudHMucHVzaChhdHRhY2htZW50KTsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKiBAZGVwcmVjYXRlZCBVc2UgYGdldFNjb3BlRGF0YSgpYCBpbnN0ZWFkLgogICAqLwogICBnZXRBdHRhY2htZW50cygpIHsKICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldFNjb3BlRGF0YSgpOwoKICAgIHJldHVybiBkYXRhLmF0dGFjaG1lbnRzOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKi8KICAgY2xlYXJBdHRhY2htZW50cygpIHsKICAgIHRoaXMuX2F0dGFjaG1lbnRzID0gW107CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8qKiBAaW5oZXJpdERvYyAqLwogICBnZXRTY29wZURhdGEoKSB7CiAgICBjb25zdCB7CiAgICAgIF9icmVhZGNydW1icywKICAgICAgX2F0dGFjaG1lbnRzLAogICAgICBfY29udGV4dHMsCiAgICAgIF90YWdzLAogICAgICBfZXh0cmEsCiAgICAgIF91c2VyLAogICAgICBfbGV2ZWwsCiAgICAgIF9maW5nZXJwcmludCwKICAgICAgX2V2ZW50UHJvY2Vzc29ycywKICAgICAgX3Byb3BhZ2F0aW9uQ29udGV4dCwKICAgICAgX3Nka1Byb2Nlc3NpbmdNZXRhZGF0YSwKICAgICAgX3RyYW5zYWN0aW9uTmFtZSwKICAgICAgX3NwYW4sCiAgICB9ID0gdGhpczsKCiAgICByZXR1cm4gewogICAgICBicmVhZGNydW1iczogX2JyZWFkY3J1bWJzLAogICAgICBhdHRhY2htZW50czogX2F0dGFjaG1lbnRzLAogICAgICBjb250ZXh0czogX2NvbnRleHRzLAogICAgICB0YWdzOiBfdGFncywKICAgICAgZXh0cmE6IF9leHRyYSwKICAgICAgdXNlcjogX3VzZXIsCiAgICAgIGxldmVsOiBfbGV2ZWwsCiAgICAgIGZpbmdlcnByaW50OiBfZmluZ2VycHJpbnQgfHwgW10sCiAgICAgIGV2ZW50UHJvY2Vzc29yczogX2V2ZW50UHJvY2Vzc29ycywKICAgICAgcHJvcGFnYXRpb25Db250ZXh0OiBfcHJvcGFnYXRpb25Db250ZXh0LAogICAgICBzZGtQcm9jZXNzaW5nTWV0YWRhdGE6IF9zZGtQcm9jZXNzaW5nTWV0YWRhdGEsCiAgICAgIHRyYW5zYWN0aW9uTmFtZTogX3RyYW5zYWN0aW9uTmFtZSwKICAgICAgc3BhbjogX3NwYW4sCiAgICB9OwogIH0KCiAgLyoqCiAgICogQXBwbGllcyBkYXRhIGZyb20gdGhlIHNjb3BlIHRvIHRoZSBldmVudCBhbmQgcnVucyBhbGwgZXZlbnQgcHJvY2Vzc29ycyBvbiBpdC4KICAgKgogICAqIEBwYXJhbSBldmVudCBFdmVudAogICAqIEBwYXJhbSBoaW50IE9iamVjdCBjb250YWluaW5nIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9yaWdpbmFsIGV4Y2VwdGlvbiwgZm9yIHVzZSBieSB0aGUgZXZlbnQgcHJvY2Vzc29ycy4KICAgKiBAaGlkZGVuCiAgICogQGRlcHJlY2F0ZWQgVXNlIGBhcHBseVNjb3BlRGF0YVRvRXZlbnQoKWAgZGlyZWN0bHkKICAgKi8KICAgYXBwbHlUb0V2ZW50KAogICAgZXZlbnQsCiAgICBoaW50ID0ge30sCiAgICBhZGRpdGlvbmFsRXZlbnRQcm9jZXNzb3JzID0gW10sCiAgKSB7CiAgICBhcHBseVNjb3BlRGF0YVRvRXZlbnQoZXZlbnQsIHRoaXMuZ2V0U2NvcGVEYXRhKCkpOwoKICAgIC8vIFRPRE8gKHY4KTogVXBkYXRlIHRoaXMgb3JkZXIgdG8gYmU6IEdsb2JhbCA+IENsaWVudCA+IFNjb3BlCiAgICBjb25zdCBldmVudFByb2Nlc3NvcnMgPSBbCiAgICAgIC4uLmFkZGl0aW9uYWxFdmVudFByb2Nlc3NvcnMsCiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgICAuLi5nZXRHbG9iYWxFdmVudFByb2Nlc3NvcnMoKSwKICAgICAgLi4udGhpcy5fZXZlbnRQcm9jZXNzb3JzLAogICAgXTsKCiAgICByZXR1cm4gbm90aWZ5RXZlbnRQcm9jZXNzb3JzKGV2ZW50UHJvY2Vzc29ycywgZXZlbnQsIGhpbnQpOwogIH0KCiAgLyoqCiAgICogQWRkIGRhdGEgd2hpY2ggd2lsbCBiZSBhY2Nlc3NpYmxlIGR1cmluZyBldmVudCBwcm9jZXNzaW5nIGJ1dCB3b24ndCBnZXQgc2VudCB0byBTZW50cnkKICAgKi8KICAgc2V0U0RLUHJvY2Vzc2luZ01ldGFkYXRhKG5ld0RhdGEpIHsKICAgIHRoaXMuX3Nka1Byb2Nlc3NpbmdNZXRhZGF0YSA9IHsgLi4udGhpcy5fc2RrUHJvY2Vzc2luZ01ldGFkYXRhLCAuLi5uZXdEYXRhIH07CgogICAgcmV0dXJuIHRoaXM7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqLwogICBzZXRQcm9wYWdhdGlvbkNvbnRleHQoY29udGV4dCkgewogICAgdGhpcy5fcHJvcGFnYXRpb25Db250ZXh0ID0gY29udGV4dDsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKi8KICAgZ2V0UHJvcGFnYXRpb25Db250ZXh0KCkgewogICAgcmV0dXJuIHRoaXMuX3Byb3BhZ2F0aW9uQ29udGV4dDsKICB9CgogIC8qKgogICAqIENhcHR1cmUgYW4gZXhjZXB0aW9uIGZvciB0aGlzIHNjb3BlLgogICAqCiAgICogQHBhcmFtIGV4Y2VwdGlvbiBUaGUgZXhjZXB0aW9uIHRvIGNhcHR1cmUuCiAgICogQHBhcmFtIGhpbnQgT3B0aW5hbCBhZGRpdGlvbmFsIGRhdGEgdG8gYXR0YWNoIHRvIHRoZSBTZW50cnkgZXZlbnQuCiAgICogQHJldHVybnMgdGhlIGlkIG9mIHRoZSBjYXB0dXJlZCBTZW50cnkgZXZlbnQuCiAgICovCiAgIGNhcHR1cmVFeGNlcHRpb24oZXhjZXB0aW9uLCBoaW50KSB7CiAgICBjb25zdCBldmVudElkID0gaGludCAmJiBoaW50LmV2ZW50X2lkID8gaGludC5ldmVudF9pZCA6IHV1aWQ0KCk7CgogICAgaWYgKCF0aGlzLl9jbGllbnQpIHsKICAgICAgbG9nZ2VyLndhcm4oJ05vIGNsaWVudCBjb25maWd1cmVkIG9uIHNjb3BlIC0gd2lsbCBub3QgY2FwdHVyZSBleGNlcHRpb24hJyk7CiAgICAgIHJldHVybiBldmVudElkOwogICAgfQoKICAgIGNvbnN0IHN5bnRoZXRpY0V4Y2VwdGlvbiA9IG5ldyBFcnJvcignU2VudHJ5IHN5bnRoZXRpY0V4Y2VwdGlvbicpOwoKICAgIHRoaXMuX2NsaWVudC5jYXB0dXJlRXhjZXB0aW9uKAogICAgICBleGNlcHRpb24sCiAgICAgIHsKICAgICAgICBvcmlnaW5hbEV4Y2VwdGlvbjogZXhjZXB0aW9uLAogICAgICAgIHN5bnRoZXRpY0V4Y2VwdGlvbiwKICAgICAgICAuLi5oaW50LAogICAgICAgIGV2ZW50X2lkOiBldmVudElkLAogICAgICB9LAogICAgICB0aGlzLAogICAgKTsKCiAgICByZXR1cm4gZXZlbnRJZDsKICB9CgogIC8qKgogICAqIENhcHR1cmUgYSBtZXNzYWdlIGZvciB0aGlzIHNjb3BlLgogICAqCiAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gY2FwdHVyZS4KICAgKiBAcGFyYW0gbGV2ZWwgQW4gb3B0aW9uYWwgc2V2ZXJpdHkgbGV2ZWwgdG8gcmVwb3J0IHRoZSBtZXNzYWdlIHdpdGguCiAgICogQHBhcmFtIGhpbnQgT3B0aW9uYWwgYWRkaXRpb25hbCBkYXRhIHRvIGF0dGFjaCB0byB0aGUgU2VudHJ5IGV2ZW50LgogICAqIEByZXR1cm5zIHRoZSBpZCBvZiB0aGUgY2FwdHVyZWQgbWVzc2FnZS4KICAgKi8KICAgY2FwdHVyZU1lc3NhZ2UobWVzc2FnZSwgbGV2ZWwsIGhpbnQpIHsKICAgIGNvbnN0IGV2ZW50SWQgPSBoaW50ICYmIGhpbnQuZXZlbnRfaWQgPyBoaW50LmV2ZW50X2lkIDogdXVpZDQoKTsKCiAgICBpZiAoIXRoaXMuX2NsaWVudCkgewogICAgICBsb2dnZXIud2FybignTm8gY2xpZW50IGNvbmZpZ3VyZWQgb24gc2NvcGUgLSB3aWxsIG5vdCBjYXB0dXJlIG1lc3NhZ2UhJyk7CiAgICAgIHJldHVybiBldmVudElkOwogICAgfQoKICAgIGNvbnN0IHN5bnRoZXRpY0V4Y2VwdGlvbiA9IG5ldyBFcnJvcihtZXNzYWdlKTsKCiAgICB0aGlzLl9jbGllbnQuY2FwdHVyZU1lc3NhZ2UoCiAgICAgIG1lc3NhZ2UsCiAgICAgIGxldmVsLAogICAgICB7CiAgICAgICAgb3JpZ2luYWxFeGNlcHRpb246IG1lc3NhZ2UsCiAgICAgICAgc3ludGhldGljRXhjZXB0aW9uLAogICAgICAgIC4uLmhpbnQsCiAgICAgICAgZXZlbnRfaWQ6IGV2ZW50SWQsCiAgICAgIH0sCiAgICAgIHRoaXMsCiAgICApOwoKICAgIHJldHVybiBldmVudElkOwogIH0KCiAgLyoqCiAgICogQ2FwdHVyZXMgYSBtYW51YWxseSBjcmVhdGVkIGV2ZW50IGZvciB0aGlzIHNjb3BlIGFuZCBzZW5kcyBpdCB0byBTZW50cnkuCiAgICoKICAgKiBAcGFyYW0gZXhjZXB0aW9uIFRoZSBldmVudCB0byBjYXB0dXJlLgogICAqIEBwYXJhbSBoaW50IE9wdGlvbmFsIGFkZGl0aW9uYWwgZGF0YSB0byBhdHRhY2ggdG8gdGhlIFNlbnRyeSBldmVudC4KICAgKiBAcmV0dXJucyB0aGUgaWQgb2YgdGhlIGNhcHR1cmVkIGV2ZW50LgogICAqLwogICBjYXB0dXJlRXZlbnQoZXZlbnQsIGhpbnQpIHsKICAgIGNvbnN0IGV2ZW50SWQgPSBoaW50ICYmIGhpbnQuZXZlbnRfaWQgPyBoaW50LmV2ZW50X2lkIDogdXVpZDQoKTsKCiAgICBpZiAoIXRoaXMuX2NsaWVudCkgewogICAgICBsb2dnZXIud2FybignTm8gY2xpZW50IGNvbmZpZ3VyZWQgb24gc2NvcGUgLSB3aWxsIG5vdCBjYXB0dXJlIGV2ZW50IScpOwogICAgICByZXR1cm4gZXZlbnRJZDsKICAgIH0KCiAgICB0aGlzLl9jbGllbnQuY2FwdHVyZUV2ZW50KGV2ZW50LCB7IC4uLmhpbnQsIGV2ZW50X2lkOiBldmVudElkIH0sIHRoaXMpOwoKICAgIHJldHVybiBldmVudElkOwogIH0KCiAgLyoqCiAgICogVGhpcyB3aWxsIGJlIGNhbGxlZCBvbiBldmVyeSBzZXQgY2FsbC4KICAgKi8KICAgX25vdGlmeVNjb3BlTGlzdGVuZXJzKCkgewogICAgLy8gV2UgbmVlZCB0aGlzIGNoZWNrIGZvciB0aGlzLl9ub3RpZnlpbmdMaXN0ZW5lcnMgdG8gYmUgYWJsZSB0byB3b3JrIG9uIHNjb3BlIGR1cmluZyB1cGRhdGVzCiAgICAvLyBJZiB0aGlzIGNoZWNrIGlzIG5vdCBoZXJlIHdlJ2xsIHByb2R1Y2UgZW5kbGVzcyByZWN1cnNpb24gd2hlbiBzb21ldGhpbmcgaXMgZG9uZSB3aXRoIHRoZSBzY29wZQogICAgLy8gZHVyaW5nIHRoZSBjYWxsYmFjay4KICAgIGlmICghdGhpcy5fbm90aWZ5aW5nTGlzdGVuZXJzKSB7CiAgICAgIHRoaXMuX25vdGlmeWluZ0xpc3RlbmVycyA9IHRydWU7CiAgICAgIHRoaXMuX3Njb3BlTGlzdGVuZXJzLmZvckVhY2goY2FsbGJhY2sgPT4gewogICAgICAgIGNhbGxiYWNrKHRoaXMpOwogICAgICB9KTsKICAgICAgdGhpcy5fbm90aWZ5aW5nTGlzdGVuZXJzID0gZmFsc2U7CiAgICB9CiAgfQp9CgpmdW5jdGlvbiBnZW5lcmF0ZVByb3BhZ2F0aW9uQ29udGV4dCgpIHsKICByZXR1cm4gewogICAgdHJhY2VJZDogdXVpZDQoKSwKICAgIHNwYW5JZDogdXVpZDQoKS5zdWJzdHJpbmcoMTYpLAogIH07Cn0KCmNvbnN0IFNES19WRVJTSU9OID0gJzcuMTIwLjAnOwoKLyoqCiAqIEFQSSBjb21wYXRpYmlsaXR5IHZlcnNpb24gb2YgdGhpcyBodWIuCiAqCiAqIFdBUk5JTkc6IFRoaXMgbnVtYmVyIHNob3VsZCBvbmx5IGJlIGluY3JlYXNlZCB3aGVuIHRoZSBnbG9iYWwgaW50ZXJmYWNlCiAqIGNoYW5nZXMgYW5kIG5ldyBtZXRob2RzIGFyZSBpbnRyb2R1Y2VkLgogKgogKiBAaGlkZGVuCiAqLwpjb25zdCBBUElfVkVSU0lPTiA9IHBhcnNlRmxvYXQoU0RLX1ZFUlNJT04pOwoKLyoqCiAqIERlZmF1bHQgbWF4aW11bSBudW1iZXIgb2YgYnJlYWRjcnVtYnMgYWRkZWQgdG8gYW4gZXZlbnQuIENhbiBiZSBvdmVyd3JpdHRlbgogKiB3aXRoIHtAbGluayBPcHRpb25zLm1heEJyZWFkY3J1bWJzfS4KICovCmNvbnN0IERFRkFVTFRfQlJFQURDUlVNQlMgPSAxMDA7CgovKioKICogQGRlcHJlY2F0ZWQgVGhlIGBIdWJgIGNsYXNzIHdpbGwgYmUgcmVtb3ZlZCBpbiB2ZXJzaW9uIDggb2YgdGhlIFNESyBpbiBmYXZvdXIgb2YgYFNjb3BlYCBhbmQgYENsaWVudGAgb2JqZWN0cy4KICoKICogSWYgeW91IHByZXZpb3VzbHkgdXNlZCB0aGUgYEh1YmAgY2xhc3MgZGlyZWN0bHksIHJlcGxhY2UgaXQgd2l0aCBgU2NvcGVgIGFuZCBgQ2xpZW50YCBvYmplY3RzLiBNb3JlIGluZm9ybWF0aW9uOgogKiAtIFtNdWx0aXBsZSBTZW50cnkgSW5zdGFuY2VzXShodHRwczovL2RvY3Muc2VudHJ5LmlvL3BsYXRmb3Jtcy9qYXZhc2NyaXB0L2Jlc3QtcHJhY3RpY2VzL211bHRpcGxlLXNlbnRyeS1pbnN0YW5jZXMvKQogKiAtIFtCcm93c2VyIEV4dGVuc2lvbnNdKGh0dHBzOi8vZG9jcy5zZW50cnkuaW8vcGxhdGZvcm1zL2phdmFzY3JpcHQvYmVzdC1wcmFjdGljZXMvYnJvd3Nlci1leHRlbnNpb25zLykKICoKICogU29tZSBvZiBvdXIgQVBJcyBhcmUgdHlwZWQgd2l0aCB0aGUgSHViIGNsYXNzIGluc3RlYWQgb2YgdGhlIGludGVyZmFjZSAoZS5nLiBgZ2V0Q3VycmVudEh1YmApLiBNb3N0IG9mIHRoZW0gYXJlIGRlcHJlY2F0ZWQKICogdGhlbXNlbHZlcyBhbmQgd2lsbCBhbHNvIGJlIHJlbW92ZWQgaW4gdmVyc2lvbiA4LiBNb3JlIGluZm9ybWF0aW9uOgogKiAtIFtNaWdyYXRpb24gR3VpZGVdKGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvYmxvYi9kZXZlbG9wL01JR1JBVElPTi5tZCNkZXByZWNhdGUtaHViKQogKi8KLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCmNsYXNzIEh1YiAgewogIC8qKiBJcyBhIHtAbGluayBMYXllcn1bXSBjb250YWluaW5nIHRoZSBjbGllbnQgYW5kIHNjb3BlICovCgogIC8qKiBDb250YWlucyB0aGUgbGFzdCBldmVudCBpZCBvZiBhIGNhcHR1cmVkIGV2ZW50LiAgKi8KCiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgaHViLCB3aWxsIHB1c2ggb25lIHtAbGluayBMYXllcn0gaW50byB0aGUKICAgKiBpbnRlcm5hbCBzdGFjayBvbiBjcmVhdGlvbi4KICAgKgogICAqIEBwYXJhbSBjbGllbnQgYm91bmQgdG8gdGhlIGh1Yi4KICAgKiBAcGFyYW0gc2NvcGUgYm91bmQgdG8gdGhlIGh1Yi4KICAgKiBAcGFyYW0gdmVyc2lvbiBudW1iZXIsIGhpZ2hlciBudW1iZXIgbWVhbnMgaGlnaGVyIHByaW9yaXR5LgogICAqCiAgICogQGRlcHJlY2F0ZWQgSW5zdGFudGlhdGlvbiBvZiBIdWIgb2JqZWN0cyBpcyBkZXByZWNhdGVkIGFuZCB0aGUgY29uc3RydWN0b3Igd2lsbCBiZSByZW1vdmVkIGluIHZlcnNpb24gOCBvZiB0aGUgU0RLLgogICAqCiAgICogSWYgeW91IGFyZSBjdXJyZW50bHkgdXNpbmcgdGhlIEh1YiBmb3IgbXVsdGktY2xpZW50IHVzZSBsaWtlIHNvOgogICAqCiAgICogYGBgCiAgICogLy8gT0xECiAgICogY29uc3QgaHViID0gbmV3IEh1YigpOwogICAqIGh1Yi5iaW5kQ2xpZW50KGNsaWVudCk7CiAgICogbWFrZU1haW4oaHViKQogICAqIGBgYAogICAqCiAgICogaW5zdGVhZCBpbml0aWFsaXplIHRoZSBjbGllbnQgYXMgZm9sbG93czoKICAgKgogICAqIGBgYAogICAqIC8vIE5FVwogICAqIFNlbnRyeS53aXRoSXNvbGF0aW9uU2NvcGUoKCkgPT4gewogICAqICAgIFNlbnRyeS5zZXRDdXJyZW50Q2xpZW50KGNsaWVudCk7CiAgICogICAgY2xpZW50LmluaXQoKTsKICAgKiB9KTsKICAgKiBgYGAKICAgKgogICAqIElmIHlvdSBhcmUgdXNpbmcgdGhlIEh1YiB0byBjYXB0dXJlIGV2ZW50cyBsaWtlIHNvOgogICAqCiAgICogYGBgCiAgICogLy8gT0xECiAgICogY29uc3QgY2xpZW50ID0gbmV3IENsaWVudCgpOwogICAqIGNvbnN0IGh1YiA9IG5ldyBIdWIoY2xpZW50KTsKICAgKiBodWIuY2FwdHVyZUV4Y2VwdGlvbigpCiAgICogYGBgCiAgICoKICAgKiBpbnN0ZWFkIGNhcHR1cmUgaXNvbGF0ZWQgZXZlbnRzIGFzIGZvbGxvd3M6CiAgICoKICAgKiBgYGAKICAgKiAvLyBORVcKICAgKiBjb25zdCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7CiAgICogY29uc3Qgc2NvcGUgPSBuZXcgU2NvcGUoKTsKICAgKiBzY29wZS5zZXRDbGllbnQoY2xpZW50KTsKICAgKiBzY29wZS5jYXB0dXJlRXhjZXB0aW9uKCk7CiAgICogYGBgCiAgICovCiAgIGNvbnN0cnVjdG9yKAogICAgY2xpZW50LAogICAgc2NvcGUsCiAgICBpc29sYXRpb25TY29wZSwKICAgICAgX3ZlcnNpb24gPSBBUElfVkVSU0lPTiwKICApIHt0aGlzLl92ZXJzaW9uID0gX3ZlcnNpb247CiAgICBsZXQgYXNzaWduZWRTY29wZTsKICAgIGlmICghc2NvcGUpIHsKICAgICAgYXNzaWduZWRTY29wZSA9IG5ldyBTY29wZSgpOwogICAgICBhc3NpZ25lZFNjb3BlLnNldENsaWVudChjbGllbnQpOwogICAgfSBlbHNlIHsKICAgICAgYXNzaWduZWRTY29wZSA9IHNjb3BlOwogICAgfQoKICAgIGxldCBhc3NpZ25lZElzb2xhdGlvblNjb3BlOwogICAgaWYgKCFpc29sYXRpb25TY29wZSkgewogICAgICBhc3NpZ25lZElzb2xhdGlvblNjb3BlID0gbmV3IFNjb3BlKCk7CiAgICAgIGFzc2lnbmVkSXNvbGF0aW9uU2NvcGUuc2V0Q2xpZW50KGNsaWVudCk7CiAgICB9IGVsc2UgewogICAgICBhc3NpZ25lZElzb2xhdGlvblNjb3BlID0gaXNvbGF0aW9uU2NvcGU7CiAgICB9CgogICAgdGhpcy5fc3RhY2sgPSBbeyBzY29wZTogYXNzaWduZWRTY29wZSB9XTsKCiAgICBpZiAoY2xpZW50KSB7CiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgICB0aGlzLmJpbmRDbGllbnQoY2xpZW50KTsKICAgIH0KCiAgICB0aGlzLl9pc29sYXRpb25TY29wZSA9IGFzc2lnbmVkSXNvbGF0aW9uU2NvcGU7CiAgfQoKICAvKioKICAgKiBDaGVja3MgaWYgdGhpcyBodWIncyB2ZXJzaW9uIGlzIG9sZGVyIHRoYW4gdGhlIGdpdmVuIHZlcnNpb24uCiAgICoKICAgKiBAcGFyYW0gdmVyc2lvbiBBIHZlcnNpb24gbnVtYmVyIHRvIGNvbXBhcmUgdG8uCiAgICogQHJldHVybiBUcnVlIGlmIHRoZSBnaXZlbiB2ZXJzaW9uIGlzIG5ld2VyOyBvdGhlcndpc2UgZmFsc2UuCiAgICoKICAgKiBAZGVwcmVjYXRlZCBUaGlzIHdpbGwgYmUgcmVtb3ZlZCBpbiB2OC4KICAgKi8KICAgaXNPbGRlclRoYW4odmVyc2lvbikgewogICAgcmV0dXJuIHRoaXMuX3ZlcnNpb24gPCB2ZXJzaW9uOwogIH0KCiAgLyoqCiAgICogVGhpcyBiaW5kcyB0aGUgZ2l2ZW4gY2xpZW50IHRvIHRoZSBjdXJyZW50IHNjb3BlLgogICAqIEBwYXJhbSBjbGllbnQgQW4gU0RLIGNsaWVudCAoY2xpZW50KSBpbnN0YW5jZS4KICAgKgogICAqIEBkZXByZWNhdGVkIFVzZSBgaW5pdEFuZEJpbmQoKWAgZGlyZWN0bHksIG9yIGBzZXRDdXJyZW50Q2xpZW50KClgIGFuZC9vciBgY2xpZW50LmluaXQoKWAgaW5zdGVhZC4KICAgKi8KICAgYmluZENsaWVudChjbGllbnQpIHsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgY29uc3QgdG9wID0gdGhpcy5nZXRTdGFja1RvcCgpOwogICAgdG9wLmNsaWVudCA9IGNsaWVudDsKICAgIHRvcC5zY29wZS5zZXRDbGllbnQoY2xpZW50KTsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgaWYgKGNsaWVudCAmJiBjbGllbnQuc2V0dXBJbnRlZ3JhdGlvbnMpIHsKICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICAgIGNsaWVudC5zZXR1cEludGVncmF0aW9ucygpOwogICAgfQogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKgogICAqIEBkZXByZWNhdGVkIFVzZSBgd2l0aFNjb3BlYCBpbnN0ZWFkLgogICAqLwogICBwdXNoU2NvcGUoKSB7CiAgICAvLyBXZSB3YW50IHRvIGNsb25lIHRoZSBjb250ZW50IG9mIHByZXYgc2NvcGUKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgY29uc3Qgc2NvcGUgPSB0aGlzLmdldFNjb3BlKCkuY2xvbmUoKTsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgdGhpcy5nZXRTdGFjaygpLnB1c2goewogICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgICAgY2xpZW50OiB0aGlzLmdldENsaWVudCgpLAogICAgICBzY29wZSwKICAgIH0pOwogICAgcmV0dXJuIHNjb3BlOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKgogICAqIEBkZXByZWNhdGVkIFVzZSBgd2l0aFNjb3BlYCBpbnN0ZWFkLgogICAqLwogICBwb3BTY29wZSgpIHsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgaWYgKHRoaXMuZ2V0U3RhY2soKS5sZW5ndGggPD0gMSkgcmV0dXJuIGZhbHNlOwogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICByZXR1cm4gISF0aGlzLmdldFN0YWNrKCkucG9wKCk7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqCiAgICogQGRlcHJlY2F0ZWQgVXNlIGBTZW50cnkud2l0aFNjb3BlKClgIGluc3RlYWQuCiAgICovCiAgIHdpdGhTY29wZShjYWxsYmFjaykgewogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICBjb25zdCBzY29wZSA9IHRoaXMucHVzaFNjb3BlKCk7CgogICAgbGV0IG1heWJlUHJvbWlzZVJlc3VsdDsKICAgIHRyeSB7CiAgICAgIG1heWJlUHJvbWlzZVJlc3VsdCA9IGNhbGxiYWNrKHNjb3BlKTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICAgIHRoaXMucG9wU2NvcGUoKTsKICAgICAgdGhyb3cgZTsKICAgIH0KCiAgICBpZiAoaXNUaGVuYWJsZShtYXliZVByb21pc2VSZXN1bHQpKSB7CiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBpc1RoZW5hYmxlIHJldHVybnMgdGhlIHdyb25nIHR5cGUKICAgICAgcmV0dXJuIG1heWJlUHJvbWlzZVJlc3VsdC50aGVuKAogICAgICAgIHJlcyA9PiB7CiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgICAgICAgIHRoaXMucG9wU2NvcGUoKTsKICAgICAgICAgIHJldHVybiByZXM7CiAgICAgICAgfSwKICAgICAgICBlID0+IHsKICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgICAgICAgdGhpcy5wb3BTY29wZSgpOwogICAgICAgICAgdGhyb3cgZTsKICAgICAgICB9LAogICAgICApOwogICAgfQoKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgdGhpcy5wb3BTY29wZSgpOwogICAgcmV0dXJuIG1heWJlUHJvbWlzZVJlc3VsdDsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICoKICAgKiBAZGVwcmVjYXRlZCBVc2UgYFNlbnRyeS5nZXRDbGllbnQoKWAgaW5zdGVhZC4KICAgKi8KICAgZ2V0Q2xpZW50KCkgewogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICByZXR1cm4gdGhpcy5nZXRTdGFja1RvcCgpLmNsaWVudCA7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBzY29wZSBvZiB0aGUgdG9wIHN0YWNrLgogICAqCiAgICogQGRlcHJlY2F0ZWQgVXNlIGBTZW50cnkuZ2V0Q3VycmVudFNjb3BlKClgIGluc3RlYWQuCiAgICovCiAgIGdldFNjb3BlKCkgewogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICByZXR1cm4gdGhpcy5nZXRTdGFja1RvcCgpLnNjb3BlOwogIH0KCiAgLyoqCiAgICogQGRlcHJlY2F0ZWQgVXNlIGBTZW50cnkuZ2V0SXNvbGF0aW9uU2NvcGUoKWAgaW5zdGVhZC4KICAgKi8KICAgZ2V0SXNvbGF0aW9uU2NvcGUoKSB7CiAgICByZXR1cm4gdGhpcy5faXNvbGF0aW9uU2NvcGU7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBzY29wZSBzdGFjayBmb3IgZG9tYWlucyBvciB0aGUgcHJvY2Vzcy4KICAgKiBAZGVwcmVjYXRlZCBUaGlzIHdpbGwgYmUgcmVtb3ZlZCBpbiB2OC4KICAgKi8KICAgZ2V0U3RhY2soKSB7CiAgICByZXR1cm4gdGhpcy5fc3RhY2s7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoZSB0b3Btb3N0IHNjb3BlIGxheWVyIGluIHRoZSBvcmRlciBkb21haW4gPiBsb2NhbCA+IHByb2Nlc3MuCiAgICogQGRlcHJlY2F0ZWQgVGhpcyB3aWxsIGJlIHJlbW92ZWQgaW4gdjguCiAgICovCiAgIGdldFN0YWNrVG9wKCkgewogICAgcmV0dXJuIHRoaXMuX3N0YWNrW3RoaXMuX3N0YWNrLmxlbmd0aCAtIDFdOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKgogICAqIEBkZXByZWNhdGVkIFVzZSBgU2VudHJ5LmNhcHR1cmVFeGNlcHRpb24oKWAgaW5zdGVhZC4KICAgKi8KICAgY2FwdHVyZUV4Y2VwdGlvbihleGNlcHRpb24sIGhpbnQpIHsKICAgIGNvbnN0IGV2ZW50SWQgPSAodGhpcy5fbGFzdEV2ZW50SWQgPSBoaW50ICYmIGhpbnQuZXZlbnRfaWQgPyBoaW50LmV2ZW50X2lkIDogdXVpZDQoKSk7CiAgICBjb25zdCBzeW50aGV0aWNFeGNlcHRpb24gPSBuZXcgRXJyb3IoJ1NlbnRyeSBzeW50aGV0aWNFeGNlcHRpb24nKTsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgdGhpcy5nZXRTY29wZSgpLmNhcHR1cmVFeGNlcHRpb24oZXhjZXB0aW9uLCB7CiAgICAgIG9yaWdpbmFsRXhjZXB0aW9uOiBleGNlcHRpb24sCiAgICAgIHN5bnRoZXRpY0V4Y2VwdGlvbiwKICAgICAgLi4uaGludCwKICAgICAgZXZlbnRfaWQ6IGV2ZW50SWQsCiAgICB9KTsKCiAgICByZXR1cm4gZXZlbnRJZDsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICoKICAgKiBAZGVwcmVjYXRlZCBVc2UgIGBTZW50cnkuY2FwdHVyZU1lc3NhZ2UoKWAgaW5zdGVhZC4KICAgKi8KICAgY2FwdHVyZU1lc3NhZ2UoCiAgICBtZXNzYWdlLAogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICBsZXZlbCwKICAgIGhpbnQsCiAgKSB7CiAgICBjb25zdCBldmVudElkID0gKHRoaXMuX2xhc3RFdmVudElkID0gaGludCAmJiBoaW50LmV2ZW50X2lkID8gaGludC5ldmVudF9pZCA6IHV1aWQ0KCkpOwogICAgY29uc3Qgc3ludGhldGljRXhjZXB0aW9uID0gbmV3IEVycm9yKG1lc3NhZ2UpOwogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICB0aGlzLmdldFNjb3BlKCkuY2FwdHVyZU1lc3NhZ2UobWVzc2FnZSwgbGV2ZWwsIHsKICAgICAgb3JpZ2luYWxFeGNlcHRpb246IG1lc3NhZ2UsCiAgICAgIHN5bnRoZXRpY0V4Y2VwdGlvbiwKICAgICAgLi4uaGludCwKICAgICAgZXZlbnRfaWQ6IGV2ZW50SWQsCiAgICB9KTsKCiAgICByZXR1cm4gZXZlbnRJZDsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICoKICAgKiBAZGVwcmVjYXRlZCBVc2UgYFNlbnRyeS5jYXB0dXJlRXZlbnQoKWAgaW5zdGVhZC4KICAgKi8KICAgY2FwdHVyZUV2ZW50KGV2ZW50LCBoaW50KSB7CiAgICBjb25zdCBldmVudElkID0gaGludCAmJiBoaW50LmV2ZW50X2lkID8gaGludC5ldmVudF9pZCA6IHV1aWQ0KCk7CiAgICBpZiAoIWV2ZW50LnR5cGUpIHsKICAgICAgdGhpcy5fbGFzdEV2ZW50SWQgPSBldmVudElkOwogICAgfQogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICB0aGlzLmdldFNjb3BlKCkuY2FwdHVyZUV2ZW50KGV2ZW50LCB7IC4uLmhpbnQsIGV2ZW50X2lkOiBldmVudElkIH0pOwogICAgcmV0dXJuIGV2ZW50SWQ7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqCiAgICogQGRlcHJlY2F0ZWQgVGhpcyB3aWxsIGJlIHJlbW92ZWQgaW4gdjguCiAgICovCiAgIGxhc3RFdmVudElkKCkgewogICAgcmV0dXJuIHRoaXMuX2xhc3RFdmVudElkOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKgogICAqIEBkZXByZWNhdGVkIFVzZSBgU2VudHJ5LmFkZEJyZWFkY3J1bWIoKWAgaW5zdGVhZC4KICAgKi8KICAgYWRkQnJlYWRjcnVtYihicmVhZGNydW1iLCBoaW50KSB7CiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgIGNvbnN0IHsgc2NvcGUsIGNsaWVudCB9ID0gdGhpcy5nZXRTdGFja1RvcCgpOwoKICAgIGlmICghY2xpZW50KSByZXR1cm47CgogICAgY29uc3QgeyBiZWZvcmVCcmVhZGNydW1iID0gbnVsbCwgbWF4QnJlYWRjcnVtYnMgPSBERUZBVUxUX0JSRUFEQ1JVTUJTIH0gPQogICAgICAoY2xpZW50LmdldE9wdGlvbnMgJiYgY2xpZW50LmdldE9wdGlvbnMoKSkgfHwge307CgogICAgaWYgKG1heEJyZWFkY3J1bWJzIDw9IDApIHJldHVybjsKCiAgICBjb25zdCB0aW1lc3RhbXAgPSBkYXRlVGltZXN0YW1wSW5TZWNvbmRzKCk7CiAgICBjb25zdCBtZXJnZWRCcmVhZGNydW1iID0geyB0aW1lc3RhbXAsIC4uLmJyZWFkY3J1bWIgfTsKICAgIGNvbnN0IGZpbmFsQnJlYWRjcnVtYiA9IGJlZm9yZUJyZWFkY3J1bWIKICAgICAgPyAoY29uc29sZVNhbmRib3goKCkgPT4gYmVmb3JlQnJlYWRjcnVtYihtZXJnZWRCcmVhZGNydW1iLCBoaW50KSkgKQogICAgICA6IG1lcmdlZEJyZWFkY3J1bWI7CgogICAgaWYgKGZpbmFsQnJlYWRjcnVtYiA9PT0gbnVsbCkgcmV0dXJuOwoKICAgIGlmIChjbGllbnQuZW1pdCkgewogICAgICBjbGllbnQuZW1pdCgnYmVmb3JlQWRkQnJlYWRjcnVtYicsIGZpbmFsQnJlYWRjcnVtYiwgaGludCk7CiAgICB9CgogICAgLy8gVE9ETyh2OCk6IEkga25vdyB0aGlzIGNvbW1lbnQgZG9lc24ndCBtYWtlIG11Y2ggc2Vuc2UgYmVjYXVzZSB0aGUgaHViIHdpbGwgYmUgZGVwcmVjYXRlZCBidXQgSSBzdGlsbCB3YW50ZWQgdG8KICAgIC8vIHdyaXRlIGl0IGRvd24uIEluIHRoZW9yeSwgd2Ugd291bGQgaGF2ZSB0byBhZGQgdGhlIGJyZWFkY3J1bWJzIHRvIHRoZSBpc29sYXRpb24gc2NvcGUgaGVyZSwgaG93ZXZlciwgdGhhdCB3b3VsZAogICAgLy8gZHVwbGljYXRlIGFsbCBvZiB0aGUgYnJlYWRjcnVtYnMuIFRoZXJlIHdhcyB0aGUgcG9zc2liaWxpdHkgb2YgYWRkaW5nIGJyZWFkY3J1bWJzIHRvIGJvdGgsIHRoZSBpc29sYXRpb24gc2NvcGUKICAgIC8vIGFuZCB0aGUgbm9ybWFsIHNjb3BlLCBhbmQgZGVkdXBsaWNhdGluZyBpdCBkb3duIHRoZSBsaW5lIGluIHRoZSBldmVudCBwcm9jZXNzaW5nIHBpcGVsaW5lLiBIb3dldmVyLCB0aGF0IHdvdWxkCiAgICAvLyBoYXZlIGJlZW4gdmVyeSBmcmFnaWxlLCBiZWNhdXNlIHRoZSBicmVhZGNydW1iIG9iamVjdHMgd291bGQgaGF2ZSBuZWVkZWQgdG8ga2VlcCB0aGVpciBpZGVudGl0eSBhbGwgdGhyb3VnaG91dAogICAgLy8gdGhlIGV2ZW50IHByb2Nlc3NpbmcgcGlwZWxpbmUuCiAgICAvLyBJbiB0aGUgbmV3IGltcGxlbWVudGF0aW9uLCB0aGUgdG9wIGxldmVsIGBTZW50cnkuYWRkQnJlYWRjcnVtYigpYCBzaG91bGQgT05MWSB3cml0ZSB0byB0aGUgaXNvbGF0aW9uIHNjb3BlLgoKICAgIHNjb3BlLmFkZEJyZWFkY3J1bWIoZmluYWxCcmVhZGNydW1iLCBtYXhCcmVhZGNydW1icyk7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqIEBkZXByZWNhdGVkIFVzZSBgU2VudHJ5LnNldFVzZXIoKWAgaW5zdGVhZC4KICAgKi8KICAgc2V0VXNlcih1c2VyKSB7CiAgICAvLyBUT0RPKHY4KTogVGhlIHRvcCBsZXZlbCBgU2VudHJ5LnNldFVzZXIoKWAgZnVuY3Rpb24gc2hvdWxkIHdyaXRlIE9OTFkgdG8gdGhlIGlzb2xhdGlvbiBzY29wZS4KICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgdGhpcy5nZXRTY29wZSgpLnNldFVzZXIodXNlcik7CiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgIHRoaXMuZ2V0SXNvbGF0aW9uU2NvcGUoKS5zZXRVc2VyKHVzZXIpOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKiBAZGVwcmVjYXRlZCBVc2UgYFNlbnRyeS5zZXRUYWdzKClgIGluc3RlYWQuCiAgICovCiAgIHNldFRhZ3ModGFncykgewogICAgLy8gVE9ETyh2OCk6IFRoZSB0b3AgbGV2ZWwgYFNlbnRyeS5zZXRUYWdzKClgIGZ1bmN0aW9uIHNob3VsZCB3cml0ZSBPTkxZIHRvIHRoZSBpc29sYXRpb24gc2NvcGUuCiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgIHRoaXMuZ2V0U2NvcGUoKS5zZXRUYWdzKHRhZ3MpOwogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICB0aGlzLmdldElzb2xhdGlvblNjb3BlKCkuc2V0VGFncyh0YWdzKTsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICogQGRlcHJlY2F0ZWQgVXNlIGBTZW50cnkuc2V0RXh0cmFzKClgIGluc3RlYWQuCiAgICovCiAgIHNldEV4dHJhcyhleHRyYXMpIHsKICAgIC8vIFRPRE8odjgpOiBUaGUgdG9wIGxldmVsIGBTZW50cnkuc2V0RXh0cmFzKClgIGZ1bmN0aW9uIHNob3VsZCB3cml0ZSBPTkxZIHRvIHRoZSBpc29sYXRpb24gc2NvcGUuCiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgIHRoaXMuZ2V0U2NvcGUoKS5zZXRFeHRyYXMoZXh0cmFzKTsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgdGhpcy5nZXRJc29sYXRpb25TY29wZSgpLnNldEV4dHJhcyhleHRyYXMpOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKiBAZGVwcmVjYXRlZCBVc2UgYFNlbnRyeS5zZXRUYWcoKWAgaW5zdGVhZC4KICAgKi8KICAgc2V0VGFnKGtleSwgdmFsdWUpIHsKICAgIC8vIFRPRE8odjgpOiBUaGUgdG9wIGxldmVsIGBTZW50cnkuc2V0VGFnKClgIGZ1bmN0aW9uIHNob3VsZCB3cml0ZSBPTkxZIHRvIHRoZSBpc29sYXRpb24gc2NvcGUuCiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgIHRoaXMuZ2V0U2NvcGUoKS5zZXRUYWcoa2V5LCB2YWx1ZSk7CiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgIHRoaXMuZ2V0SXNvbGF0aW9uU2NvcGUoKS5zZXRUYWcoa2V5LCB2YWx1ZSk7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqIEBkZXByZWNhdGVkIFVzZSBgU2VudHJ5LnNldEV4dHJhKClgIGluc3RlYWQuCiAgICovCiAgIHNldEV4dHJhKGtleSwgZXh0cmEpIHsKICAgIC8vIFRPRE8odjgpOiBUaGUgdG9wIGxldmVsIGBTZW50cnkuc2V0RXh0cmEoKWAgZnVuY3Rpb24gc2hvdWxkIHdyaXRlIE9OTFkgdG8gdGhlIGlzb2xhdGlvbiBzY29wZS4KICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgdGhpcy5nZXRTY29wZSgpLnNldEV4dHJhKGtleSwgZXh0cmEpOwogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICB0aGlzLmdldElzb2xhdGlvblNjb3BlKCkuc2V0RXh0cmEoa2V5LCBleHRyYSk7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqIEBkZXByZWNhdGVkIFVzZSBgU2VudHJ5LnNldENvbnRleHQoKWAgaW5zdGVhZC4KICAgKi8KICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueQogICBzZXRDb250ZXh0KG5hbWUsIGNvbnRleHQpIHsKICAgIC8vIFRPRE8odjgpOiBUaGUgdG9wIGxldmVsIGBTZW50cnkuc2V0Q29udGV4dCgpYCBmdW5jdGlvbiBzaG91bGQgd3JpdGUgT05MWSB0byB0aGUgaXNvbGF0aW9uIHNjb3BlLgogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICB0aGlzLmdldFNjb3BlKCkuc2V0Q29udGV4dChuYW1lLCBjb250ZXh0KTsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgdGhpcy5nZXRJc29sYXRpb25TY29wZSgpLnNldENvbnRleHQobmFtZSwgY29udGV4dCk7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqCiAgICogQGRlcHJlY2F0ZWQgVXNlIGBnZXRTY29wZSgpYCBkaXJlY3RseS4KICAgKi8KICAgY29uZmlndXJlU2NvcGUoY2FsbGJhY2spIHsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgY29uc3QgeyBzY29wZSwgY2xpZW50IH0gPSB0aGlzLmdldFN0YWNrVG9wKCk7CiAgICBpZiAoY2xpZW50KSB7CiAgICAgIGNhbGxiYWNrKHNjb3BlKTsKICAgIH0KICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICovCiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgIHJ1bihjYWxsYmFjaykgewogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICBjb25zdCBvbGRIdWIgPSBtYWtlTWFpbih0aGlzKTsKICAgIHRyeSB7CiAgICAgIGNhbGxiYWNrKHRoaXMpOwogICAgfSBmaW5hbGx5IHsKICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICAgIG1ha2VNYWluKG9sZEh1Yik7CiAgICB9CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqIEBkZXByZWNhdGVkIFVzZSBgU2VudHJ5LmdldENsaWVudCgpLmdldEludGVncmF0aW9uQnlOYW1lKClgIGluc3RlYWQuCiAgICovCiAgIGdldEludGVncmF0aW9uKGludGVncmF0aW9uKSB7CiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgIGNvbnN0IGNsaWVudCA9IHRoaXMuZ2V0Q2xpZW50KCk7CiAgICBpZiAoIWNsaWVudCkgcmV0dXJuIG51bGw7CiAgICB0cnkgewogICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgICAgcmV0dXJuIGNsaWVudC5nZXRJbnRlZ3JhdGlvbihpbnRlZ3JhdGlvbik7CiAgICB9IGNhdGNoIChfb08pIHsKICAgICAgREVCVUdfQlVJTEQgJiYgbG9nZ2VyLndhcm4oYENhbm5vdCByZXRyaWV2ZSBpbnRlZ3JhdGlvbiAke2ludGVncmF0aW9uLmlkfSBmcm9tIHRoZSBjdXJyZW50IEh1YmApOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9CgogIC8qKgogICAqIFN0YXJ0cyBhIG5ldyBgVHJhbnNhY3Rpb25gIGFuZCByZXR1cm5zIGl0LiBUaGlzIGlzIHRoZSBlbnRyeSBwb2ludCB0byBtYW51YWwgdHJhY2luZyBpbnN0cnVtZW50YXRpb24uCiAgICoKICAgKiBBIHRyZWUgc3RydWN0dXJlIGNhbiBiZSBidWlsdCBieSBhZGRpbmcgY2hpbGQgc3BhbnMgdG8gdGhlIHRyYW5zYWN0aW9uLCBhbmQgY2hpbGQgc3BhbnMgdG8gb3RoZXIgc3BhbnMuIFRvIHN0YXJ0IGEKICAgKiBuZXcgY2hpbGQgc3BhbiB3aXRoaW4gdGhlIHRyYW5zYWN0aW9uIG9yIGFueSBzcGFuLCBjYWxsIHRoZSByZXNwZWN0aXZlIGAuc3RhcnRDaGlsZCgpYCBtZXRob2QuCiAgICoKICAgKiBFdmVyeSBjaGlsZCBzcGFuIG11c3QgYmUgZmluaXNoZWQgYmVmb3JlIHRoZSB0cmFuc2FjdGlvbiBpcyBmaW5pc2hlZCwgb3RoZXJ3aXNlIHRoZSB1bmZpbmlzaGVkIHNwYW5zIGFyZSBkaXNjYXJkZWQuCiAgICoKICAgKiBUaGUgdHJhbnNhY3Rpb24gbXVzdCBiZSBmaW5pc2hlZCB3aXRoIGEgY2FsbCB0byBpdHMgYC5lbmQoKWAgbWV0aG9kLCBhdCB3aGljaCBwb2ludCB0aGUgdHJhbnNhY3Rpb24gd2l0aCBhbGwgaXRzCiAgICogZmluaXNoZWQgY2hpbGQgc3BhbnMgd2lsbCBiZSBzZW50IHRvIFNlbnRyeS4KICAgKgogICAqIEBwYXJhbSBjb250ZXh0IFByb3BlcnRpZXMgb2YgdGhlIG5ldyBgVHJhbnNhY3Rpb25gLgogICAqIEBwYXJhbSBjdXN0b21TYW1wbGluZ0NvbnRleHQgSW5mb3JtYXRpb24gZ2l2ZW4gdG8gdGhlIHRyYW5zYWN0aW9uIHNhbXBsaW5nIGZ1bmN0aW9uIChhbG9uZyB3aXRoIGNvbnRleHQtZGVwZW5kZW50CiAgICogZGVmYXVsdCB2YWx1ZXMpLiBTZWUge0BsaW5rIE9wdGlvbnMudHJhY2VzU2FtcGxlcn0uCiAgICoKICAgKiBAcmV0dXJucyBUaGUgdHJhbnNhY3Rpb24gd2hpY2ggd2FzIGp1c3Qgc3RhcnRlZAogICAqCiAgICogQGRlcHJlY2F0ZWQgVXNlIGBzdGFydFNwYW4oKWAsIGBzdGFydFNwYW5NYW51YWwoKWAgb3IgYHN0YXJ0SW5hY3RpdmVTcGFuKClgIGluc3RlYWQuCiAgICovCiAgIHN0YXJ0VHJhbnNhY3Rpb24oY29udGV4dCwgY3VzdG9tU2FtcGxpbmdDb250ZXh0KSB7CiAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9jYWxsRXh0ZW5zaW9uTWV0aG9kKCdzdGFydFRyYW5zYWN0aW9uJywgY29udGV4dCwgY3VzdG9tU2FtcGxpbmdDb250ZXh0KTsKCiAgICBpZiAoREVCVUdfQlVJTEQgJiYgIXJlc3VsdCkgewogICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgICAgY29uc3QgY2xpZW50ID0gdGhpcy5nZXRDbGllbnQoKTsKICAgICAgaWYgKCFjbGllbnQpIHsKICAgICAgICBsb2dnZXIud2FybigKICAgICAgICAgICJUcmFjaW5nIGV4dGVuc2lvbiAnc3RhcnRUcmFuc2FjdGlvbicgaXMgbWlzc2luZy4gWW91IHNob3VsZCAnaW5pdCcgdGhlIFNESyBiZWZvcmUgY2FsbGluZyAnc3RhcnRUcmFuc2FjdGlvbiciLAogICAgICAgICk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbG9nZ2VyLndhcm4oYFRyYWNpbmcgZXh0ZW5zaW9uICdzdGFydFRyYW5zYWN0aW9uJyBoYXMgbm90IGJlZW4gYWRkZWQuIENhbGwgJ2FkZFRyYWNpbmdFeHRlbnNpb25zJyBiZWZvcmUgY2FsbGluZyAnaW5pdCc6ClNlbnRyeS5hZGRUcmFjaW5nRXh0ZW5zaW9ucygpOwpTZW50cnkuaW5pdCh7Li4ufSk7CmApOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICogQGRlcHJlY2F0ZWQgVXNlIGBzcGFuVG9UcmFjZUhlYWRlcigpYCBpbnN0ZWFkLgogICAqLwogICB0cmFjZUhlYWRlcnMoKSB7CiAgICByZXR1cm4gdGhpcy5fY2FsbEV4dGVuc2lvbk1ldGhvZCgndHJhY2VIZWFkZXJzJyk7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqCiAgICogQGRlcHJlY2F0ZWQgVXNlIHRvcCBsZXZlbCBgY2FwdHVyZVNlc3Npb25gIGluc3RlYWQuCiAgICovCiAgIGNhcHR1cmVTZXNzaW9uKGVuZFNlc3Npb24gPSBmYWxzZSkgewogICAgLy8gYm90aCBzZW5kIHRoZSB1cGRhdGUgYW5kIHB1bGwgdGhlIHNlc3Npb24gZnJvbSB0aGUgc2NvcGUKICAgIGlmIChlbmRTZXNzaW9uKSB7CiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgICByZXR1cm4gdGhpcy5lbmRTZXNzaW9uKCk7CiAgICB9CgogICAgLy8gb25seSBzZW5kIHRoZSB1cGRhdGUKICAgIHRoaXMuX3NlbmRTZXNzaW9uVXBkYXRlKCk7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqIEBkZXByZWNhdGVkIFVzZSB0b3AgbGV2ZWwgYGVuZFNlc3Npb25gIGluc3RlYWQuCiAgICovCiAgIGVuZFNlc3Npb24oKSB7CiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgIGNvbnN0IGxheWVyID0gdGhpcy5nZXRTdGFja1RvcCgpOwogICAgY29uc3Qgc2NvcGUgPSBsYXllci5zY29wZTsKICAgIGNvbnN0IHNlc3Npb24gPSBzY29wZS5nZXRTZXNzaW9uKCk7CiAgICBpZiAoc2Vzc2lvbikgewogICAgICBjbG9zZVNlc3Npb24oc2Vzc2lvbik7CiAgICB9CiAgICB0aGlzLl9zZW5kU2Vzc2lvblVwZGF0ZSgpOwoKICAgIC8vIHRoZSBzZXNzaW9uIGlzIG92ZXI7IHRha2UgaXQgb2ZmIG9mIHRoZSBzY29wZQogICAgc2NvcGUuc2V0U2Vzc2lvbigpOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKiBAZGVwcmVjYXRlZCBVc2UgdG9wIGxldmVsIGBzdGFydFNlc3Npb25gIGluc3RlYWQuCiAgICovCiAgIHN0YXJ0U2Vzc2lvbihjb250ZXh0KSB7CiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgIGNvbnN0IHsgc2NvcGUsIGNsaWVudCB9ID0gdGhpcy5nZXRTdGFja1RvcCgpOwogICAgY29uc3QgeyByZWxlYXNlLCBlbnZpcm9ubWVudCA9IERFRkFVTFRfRU5WSVJPTk1FTlQgfSA9IChjbGllbnQgJiYgY2xpZW50LmdldE9wdGlvbnMoKSkgfHwge307CgogICAgLy8gV2lsbCBmZXRjaCB1c2VyQWdlbnQgaWYgY2FsbGVkIGZyb20gYnJvd3NlciBzZGsKICAgIGNvbnN0IHsgdXNlckFnZW50IH0gPSBHTE9CQUxfT0JKLm5hdmlnYXRvciB8fCB7fTsKCiAgICBjb25zdCBzZXNzaW9uID0gbWFrZVNlc3Npb24oewogICAgICByZWxlYXNlLAogICAgICBlbnZpcm9ubWVudCwKICAgICAgdXNlcjogc2NvcGUuZ2V0VXNlcigpLAogICAgICAuLi4odXNlckFnZW50ICYmIHsgdXNlckFnZW50IH0pLAogICAgICAuLi5jb250ZXh0LAogICAgfSk7CgogICAgLy8gRW5kIGV4aXN0aW5nIHNlc3Npb24gaWYgdGhlcmUncyBvbmUKICAgIGNvbnN0IGN1cnJlbnRTZXNzaW9uID0gc2NvcGUuZ2V0U2Vzc2lvbiAmJiBzY29wZS5nZXRTZXNzaW9uKCk7CiAgICBpZiAoY3VycmVudFNlc3Npb24gJiYgY3VycmVudFNlc3Npb24uc3RhdHVzID09PSAnb2snKSB7CiAgICAgIHVwZGF0ZVNlc3Npb24oY3VycmVudFNlc3Npb24sIHsgc3RhdHVzOiAnZXhpdGVkJyB9KTsKICAgIH0KICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgdGhpcy5lbmRTZXNzaW9uKCk7CgogICAgLy8gQWZ0ZXJ3YXJkcyB3ZSBzZXQgdGhlIG5ldyBzZXNzaW9uIG9uIHRoZSBzY29wZQogICAgc2NvcGUuc2V0U2Vzc2lvbihzZXNzaW9uKTsKCiAgICByZXR1cm4gc2Vzc2lvbjsKICB9CgogIC8qKgogICAqIFJldHVybnMgaWYgZGVmYXVsdCBQSUkgc2hvdWxkIGJlIHNlbnQgdG8gU2VudHJ5IGFuZCBwcm9wYWdhdGVkIGluIG91cmdvaW5nIHJlcXVlc3RzCiAgICogd2hlbiBUcmFjaW5nIGlzIHVzZWQuCiAgICoKICAgKiBAZGVwcmVjYXRlZCBVc2UgdG9wLWxldmVsIGBnZXRDbGllbnQoKS5nZXRPcHRpb25zKCkuc2VuZERlZmF1bHRQaWlgIGluc3RlYWQuIFRoaXMgZnVuY3Rpb24KICAgKiBvbmx5IHVubmVjZXNzYXJpbHkgaW5jcmVhc2VkIEFQSSBzdXJmYWNlIGJ1dCBvbmx5IHdyYXBwZWQgYWNjZXNzaW5nIHRoZSBvcHRpb24uCiAgICovCiAgIHNob3VsZFNlbmREZWZhdWx0UGlpKCkgewogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmdldENsaWVudCgpOwogICAgY29uc3Qgb3B0aW9ucyA9IGNsaWVudCAmJiBjbGllbnQuZ2V0T3B0aW9ucygpOwogICAgcmV0dXJuIEJvb2xlYW4ob3B0aW9ucyAmJiBvcHRpb25zLnNlbmREZWZhdWx0UGlpKTsKICB9CgogIC8qKgogICAqIFNlbmRzIHRoZSBjdXJyZW50IFNlc3Npb24gb24gdGhlIHNjb3BlCiAgICovCiAgIF9zZW5kU2Vzc2lvblVwZGF0ZSgpIHsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgY29uc3QgeyBzY29wZSwgY2xpZW50IH0gPSB0aGlzLmdldFN0YWNrVG9wKCk7CgogICAgY29uc3Qgc2Vzc2lvbiA9IHNjb3BlLmdldFNlc3Npb24oKTsKICAgIGlmIChzZXNzaW9uICYmIGNsaWVudCAmJiBjbGllbnQuY2FwdHVyZVNlc3Npb24pIHsKICAgICAgY2xpZW50LmNhcHR1cmVTZXNzaW9uKHNlc3Npb24pOwogICAgfQogIH0KCiAgLyoqCiAgICogQ2FsbHMgZ2xvYmFsIGV4dGVuc2lvbiBtZXRob2QgYW5kIGJpbmRpbmcgY3VycmVudCBpbnN0YW5jZSB0byB0aGUgZnVuY3Rpb24gY2FsbAogICAqLwogIC8vIEB0cy1leHBlY3QtZXJyb3IgRnVuY3Rpb24gbGFja3MgZW5kaW5nIHJldHVybiBzdGF0ZW1lbnQgYW5kIHJldHVybiB0eXBlIGRvZXMgbm90IGluY2x1ZGUgJ3VuZGVmaW5lZCcuIHRzKDIzNjYpCiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkKICAgX2NhbGxFeHRlbnNpb25NZXRob2QobWV0aG9kLCAuLi5hcmdzKSB7CiAgICBjb25zdCBjYXJyaWVyID0gZ2V0TWFpbkNhcnJpZXIoKTsKICAgIGNvbnN0IHNlbnRyeSA9IGNhcnJpZXIuX19TRU5UUllfXzsKICAgIGlmIChzZW50cnkgJiYgc2VudHJ5LmV4dGVuc2lvbnMgJiYgdHlwZW9mIHNlbnRyeS5leHRlbnNpb25zW21ldGhvZF0gPT09ICdmdW5jdGlvbicpIHsKICAgICAgcmV0dXJuIHNlbnRyeS5leHRlbnNpb25zW21ldGhvZF0uYXBwbHkodGhpcywgYXJncyk7CiAgICB9CiAgICBERUJVR19CVUlMRCAmJiBsb2dnZXIud2FybihgRXh0ZW5zaW9uIG1ldGhvZCAke21ldGhvZH0gY291bGRuJ3QgYmUgZm91bmQsIGRvaW5nIG5vdGhpbmcuYCk7CiAgfQp9CgovKioKICogUmV0dXJucyB0aGUgZ2xvYmFsIHNoaW0gcmVnaXN0cnkuCiAqCiAqIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIGlzIHByb2JsZW1hdGljLCBiZWNhdXNlIGRlc3BpdGUgYWx3YXlzIHJldHVybmluZyBhIHZhbGlkIENhcnJpZXIsCiAqIGl0IGhhcyBhbiBvcHRpb25hbCBgX19TRU5UUllfX2AgcHJvcGVydHksIHdoaWNoIHRoZW4gaW4gdHVybiByZXF1aXJlcyB1cyB0byBhbHdheXMgcGVyZm9ybSBhbiB1bm5lY2Vzc2FyeSBjaGVjawogKiBhdCB0aGUgY2FsbC1zaXRlLiBXZSBhbHdheXMgYWNjZXNzIHRoZSBjYXJyaWVyIHRocm91Z2ggdGhpcyBmdW5jdGlvbiwgc28gd2UgY2FuIGd1YXJhbnRlZSB0aGF0IGBfX1NFTlRSWV9fYCBpcyB0aGVyZS4KICoqLwpmdW5jdGlvbiBnZXRNYWluQ2FycmllcigpIHsKICBHTE9CQUxfT0JKLl9fU0VOVFJZX18gPSBHTE9CQUxfT0JKLl9fU0VOVFJZX18gfHwgewogICAgZXh0ZW5zaW9uczoge30sCiAgICBodWI6IHVuZGVmaW5lZCwKICB9OwogIHJldHVybiBHTE9CQUxfT0JKOwp9CgovKioKICogUmVwbGFjZXMgdGhlIGN1cnJlbnQgbWFpbiBodWIgd2l0aCB0aGUgcGFzc2VkIG9uZSBvbiB0aGUgZ2xvYmFsIG9iamVjdAogKgogKiBAcmV0dXJucyBUaGUgb2xkIHJlcGxhY2VkIGh1YgogKgogKiBAZGVwcmVjYXRlZCBVc2UgYHNldEN1cnJlbnRDbGllbnQoKWAgaW5zdGVhZC4KICovCi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgpmdW5jdGlvbiBtYWtlTWFpbihodWIpIHsKICBjb25zdCByZWdpc3RyeSA9IGdldE1haW5DYXJyaWVyKCk7CiAgY29uc3Qgb2xkSHViID0gZ2V0SHViRnJvbUNhcnJpZXIocmVnaXN0cnkpOwogIHNldEh1Yk9uQ2FycmllcihyZWdpc3RyeSwgaHViKTsKICByZXR1cm4gb2xkSHViOwp9CgovKioKICogUmV0dXJucyB0aGUgZGVmYXVsdCBodWIgaW5zdGFuY2UuCiAqCiAqIElmIGEgaHViIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCBpbiB0aGUgZ2xvYmFsIGNhcnJpZXIgYnV0IHRoaXMgbW9kdWxlCiAqIGNvbnRhaW5zIGEgbW9yZSByZWNlbnQgdmVyc2lvbiwgaXQgcmVwbGFjZXMgdGhlIHJlZ2lzdGVyZWQgdmVyc2lvbi4KICogT3RoZXJ3aXNlLCB0aGUgY3VycmVudGx5IHJlZ2lzdGVyZWQgaHViIHdpbGwgYmUgcmV0dXJuZWQuCiAqCiAqIEBkZXByZWNhdGVkIFVzZSB0aGUgcmVzcGVjdGl2ZSByZXBsYWNlbWVudCBtZXRob2QgZGlyZWN0bHkgaW5zdGVhZC4KICovCi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgpmdW5jdGlvbiBnZXRDdXJyZW50SHViKCkgewogIC8vIEdldCBtYWluIGNhcnJpZXIgKGdsb2JhbCBmb3IgZXZlcnkgZW52aXJvbm1lbnQpCiAgY29uc3QgcmVnaXN0cnkgPSBnZXRNYWluQ2FycmllcigpOwoKICBpZiAocmVnaXN0cnkuX19TRU5UUllfXyAmJiByZWdpc3RyeS5fX1NFTlRSWV9fLmFjcykgewogICAgY29uc3QgaHViID0gcmVnaXN0cnkuX19TRU5UUllfXy5hY3MuZ2V0Q3VycmVudEh1YigpOwoKICAgIGlmIChodWIpIHsKICAgICAgcmV0dXJuIGh1YjsKICAgIH0KICB9CgogIC8vIFJldHVybiBodWIgdGhhdCBsaXZlcyBvbiBhIGdsb2JhbCBvYmplY3QKICByZXR1cm4gZ2V0R2xvYmFsSHViKHJlZ2lzdHJ5KTsKfQoKLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCmZ1bmN0aW9uIGdldEdsb2JhbEh1YihyZWdpc3RyeSA9IGdldE1haW5DYXJyaWVyKCkpIHsKICAvLyBJZiB0aGVyZSdzIG5vIGh1Yiwgb3IgaXRzIGFuIG9sZCBBUEksIGFzc2lnbiBhIG5ldyBvbmUKCiAgaWYgKAogICAgIWhhc0h1Yk9uQ2FycmllcihyZWdpc3RyeSkgfHwKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgZ2V0SHViRnJvbUNhcnJpZXIocmVnaXN0cnkpLmlzT2xkZXJUaGFuKEFQSV9WRVJTSU9OKQogICkgewogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICBzZXRIdWJPbkNhcnJpZXIocmVnaXN0cnksIG5ldyBIdWIoKSk7CiAgfQoKICAvLyBSZXR1cm4gaHViIHRoYXQgbGl2ZXMgb24gYSBnbG9iYWwgb2JqZWN0CiAgcmV0dXJuIGdldEh1YkZyb21DYXJyaWVyKHJlZ2lzdHJ5KTsKfQoKLyoqCiAqIFRoaXMgd2lsbCB0ZWxsIHdoZXRoZXIgYSBjYXJyaWVyIGhhcyBhIGh1YiBvbiBpdCBvciBub3QKICogQHBhcmFtIGNhcnJpZXIgb2JqZWN0CiAqLwpmdW5jdGlvbiBoYXNIdWJPbkNhcnJpZXIoY2FycmllcikgewogIHJldHVybiAhIShjYXJyaWVyICYmIGNhcnJpZXIuX19TRU5UUllfXyAmJiBjYXJyaWVyLl9fU0VOVFJZX18uaHViKTsKfQoKLyoqCiAqIFRoaXMgd2lsbCBjcmVhdGUgYSBuZXcge0BsaW5rIEh1Yn0gYW5kIGFkZCB0byB0aGUgcGFzc2VkIG9iamVjdCBvbgogKiBfX1NFTlRSWV9fLmh1Yi4KICogQHBhcmFtIGNhcnJpZXIgb2JqZWN0CiAqIEBoaWRkZW4KICovCi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgpmdW5jdGlvbiBnZXRIdWJGcm9tQ2FycmllcihjYXJyaWVyKSB7CiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgcmV0dXJuIGdldEdsb2JhbFNpbmdsZXRvbignaHViJywgKCkgPT4gbmV3IEh1YigpLCBjYXJyaWVyKTsKfQoKLyoqCiAqIFRoaXMgd2lsbCBzZXQgcGFzc2VkIHtAbGluayBIdWJ9IG9uIHRoZSBwYXNzZWQgb2JqZWN0J3MgX19TRU5UUllfXy5odWIgYXR0cmlidXRlCiAqIEBwYXJhbSBjYXJyaWVyIG9iamVjdAogKiBAcGFyYW0gaHViIEh1YgogKiBAcmV0dXJucyBBIGJvb2xlYW4gaW5kaWNhdGluZyBzdWNjZXNzIG9yIGZhaWx1cmUKICovCi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgpmdW5jdGlvbiBzZXRIdWJPbkNhcnJpZXIoY2FycmllciwgaHViKSB7CiAgaWYgKCFjYXJyaWVyKSByZXR1cm4gZmFsc2U7CiAgY29uc3QgX19TRU5UUllfXyA9IChjYXJyaWVyLl9fU0VOVFJZX18gPSBjYXJyaWVyLl9fU0VOVFJZX18gfHwge30pOwogIF9fU0VOVFJZX18uaHViID0gaHViOwogIHJldHVybiB0cnVlOwp9CgovKioKICogQXBwbHkgU2RrSW5mbyAobmFtZSwgdmVyc2lvbiwgcGFja2FnZXMsIGludGVncmF0aW9ucykgdG8gdGhlIGNvcnJlc3BvbmRpbmcgZXZlbnQga2V5LgogKiBNZXJnZSB3aXRoIGV4aXN0aW5nIGRhdGEgaWYgYW55LgogKiovCmZ1bmN0aW9uIGVuaGFuY2VFdmVudFdpdGhTZGtJbmZvKGV2ZW50LCBzZGtJbmZvKSB7CiAgaWYgKCFzZGtJbmZvKSB7CiAgICByZXR1cm4gZXZlbnQ7CiAgfQogIGV2ZW50LnNkayA9IGV2ZW50LnNkayB8fCB7fTsKICBldmVudC5zZGsubmFtZSA9IGV2ZW50LnNkay5uYW1lIHx8IHNka0luZm8ubmFtZTsKICBldmVudC5zZGsudmVyc2lvbiA9IGV2ZW50LnNkay52ZXJzaW9uIHx8IHNka0luZm8udmVyc2lvbjsKICBldmVudC5zZGsuaW50ZWdyYXRpb25zID0gWy4uLihldmVudC5zZGsuaW50ZWdyYXRpb25zIHx8IFtdKSwgLi4uKHNka0luZm8uaW50ZWdyYXRpb25zIHx8IFtdKV07CiAgZXZlbnQuc2RrLnBhY2thZ2VzID0gWy4uLihldmVudC5zZGsucGFja2FnZXMgfHwgW10pLCAuLi4oc2RrSW5mby5wYWNrYWdlcyB8fCBbXSldOwogIHJldHVybiBldmVudDsKfQoKLyoqIENyZWF0ZXMgYW4gZW52ZWxvcGUgZnJvbSBhIFNlc3Npb24gKi8KZnVuY3Rpb24gY3JlYXRlU2Vzc2lvbkVudmVsb3BlKAogIHNlc3Npb24sCiAgZHNuLAogIG1ldGFkYXRhLAogIHR1bm5lbCwKKSB7CiAgY29uc3Qgc2RrSW5mbyA9IGdldFNka01ldGFkYXRhRm9yRW52ZWxvcGVIZWFkZXIobWV0YWRhdGEpOwogIGNvbnN0IGVudmVsb3BlSGVhZGVycyA9IHsKICAgIHNlbnRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSwKICAgIC4uLihzZGtJbmZvICYmIHsgc2RrOiBzZGtJbmZvIH0pLAogICAgLi4uKCEhdHVubmVsICYmIGRzbiAmJiB7IGRzbjogZHNuVG9TdHJpbmcoZHNuKSB9KSwKICB9OwoKICBjb25zdCBlbnZlbG9wZUl0ZW0gPQogICAgJ2FnZ3JlZ2F0ZXMnIGluIHNlc3Npb24gPyBbeyB0eXBlOiAnc2Vzc2lvbnMnIH0sIHNlc3Npb25dIDogW3sgdHlwZTogJ3Nlc3Npb24nIH0sIHNlc3Npb24udG9KU09OKCldOwoKICByZXR1cm4gY3JlYXRlRW52ZWxvcGUoZW52ZWxvcGVIZWFkZXJzLCBbZW52ZWxvcGVJdGVtXSk7Cn0KCi8qKgogKiBDcmVhdGUgYW4gRW52ZWxvcGUgZnJvbSBhbiBldmVudC4KICovCmZ1bmN0aW9uIGNyZWF0ZUV2ZW50RW52ZWxvcGUoCiAgZXZlbnQsCiAgZHNuLAogIG1ldGFkYXRhLAogIHR1bm5lbCwKKSB7CiAgY29uc3Qgc2RrSW5mbyA9IGdldFNka01ldGFkYXRhRm9yRW52ZWxvcGVIZWFkZXIobWV0YWRhdGEpOwoKICAvKgogICAgTm90ZTogRHVlIHRvIFRTLCBldmVudC50eXBlIG1heSBiZSBgcmVwbGF5X2V2ZW50YCwgdGhlb3JldGljYWxseS4KICAgIEluIHByYWN0aWNlLCB3ZSBuZXZlciBjYWxsIGBjcmVhdGVFdmVudEVudmVsb3BlYCB3aXRoIGByZXBsYXlfZXZlbnRgIHR5cGUsCiAgICBhbmQgd2UnZCBoYXZlIHRvIGFkanV0IGEgbG9vb3Qgb2YgdHlwZXMgdG8gbWFrZSB0aGlzIHdvcmsgcHJvcGVybHkuCiAgICBXZSB3YW50IHRvIGF2b2lkIGNhc3RpbmcgdGhpcyBhcm91bmQsIGFzIHRoYXQgY291bGQgbGVhZCB0byBidWdzIChlLmcuIHdoZW4gd2UgYWRkIGFub3RoZXIgdHlwZSkKICAgIFNvIHRoZSBzYWZlIGNob2ljZSBpcyB0byByZWFsbHkgZ3VhcmQgYWdhaW5zdCB0aGUgcmVwbGF5X2V2ZW50IHR5cGUgaGVyZS4KICAqLwogIGNvbnN0IGV2ZW50VHlwZSA9IGV2ZW50LnR5cGUgJiYgZXZlbnQudHlwZSAhPT0gJ3JlcGxheV9ldmVudCcgPyBldmVudC50eXBlIDogJ2V2ZW50JzsKCiAgZW5oYW5jZUV2ZW50V2l0aFNka0luZm8oZXZlbnQsIG1ldGFkYXRhICYmIG1ldGFkYXRhLnNkayk7CgogIGNvbnN0IGVudmVsb3BlSGVhZGVycyA9IGNyZWF0ZUV2ZW50RW52ZWxvcGVIZWFkZXJzKGV2ZW50LCBzZGtJbmZvLCB0dW5uZWwsIGRzbik7CgogIC8vIFByZXZlbnQgdGhpcyBkYXRhICh3aGljaCwgaWYgaXQgZXhpc3RzLCB3YXMgdXNlZCBpbiBlYXJsaWVyIHN0ZXBzIGluIHRoZSBwcm9jZXNzaW5nIHBpcGVsaW5lKSBmcm9tIGJlaW5nIHNlbnQgdG8KICAvLyBzZW50cnkuIChOb3RlOiBPdXIgdXNlIG9mIHRoaXMgcHJvcGVydHkgY29tZXMgYW5kIGdvZXMgd2l0aCB3aGF0ZXZlciB3ZSBtaWdodCBiZSBkZWJ1Z2dpbmcsIHdoYXRldmVyIGhhY2tzIHdlIG1heQogIC8vIGhhdmUgdGVtcG9yYXJpbHkgYWRkZWQsIGV0Yy4gRXZlbiBpZiB3ZSBkb24ndCBoYXBwZW4gdG8gYmUgdXNpbmcgaXQgYXQgc29tZSBwb2ludCBpbiB0aGUgZnV0dXJlLCBsZXQncyBub3QgZ2V0IHJpZAogIC8vIG9mIHRoaXMgYGRlbGV0ZWAsIGxlc3Qgd2UgbWlzcyBwdXR0aW5nIGl0IGJhY2sgaW4gdGhlIG5leHQgdGltZSB0aGUgcHJvcGVydHkgaXMgaW4gdXNlLikKICBkZWxldGUgZXZlbnQuc2RrUHJvY2Vzc2luZ01ldGFkYXRhOwoKICBjb25zdCBldmVudEl0ZW0gPSBbeyB0eXBlOiBldmVudFR5cGUgfSwgZXZlbnRdOwogIHJldHVybiBjcmVhdGVFbnZlbG9wZShlbnZlbG9wZUhlYWRlcnMsIFtldmVudEl0ZW1dKTsKfQoKY29uc3QgU0VOVFJZX0FQSV9WRVJTSU9OID0gJzcnOwoKLyoqIFJldHVybnMgdGhlIHByZWZpeCB0byBjb25zdHJ1Y3QgU2VudHJ5IGluZ2VzdGlvbiBBUEkgZW5kcG9pbnRzLiAqLwpmdW5jdGlvbiBnZXRCYXNlQXBpRW5kcG9pbnQoZHNuKSB7CiAgY29uc3QgcHJvdG9jb2wgPSBkc24ucHJvdG9jb2wgPyBgJHtkc24ucHJvdG9jb2x9OmAgOiAnJzsKICBjb25zdCBwb3J0ID0gZHNuLnBvcnQgPyBgOiR7ZHNuLnBvcnR9YCA6ICcnOwogIHJldHVybiBgJHtwcm90b2NvbH0vLyR7ZHNuLmhvc3R9JHtwb3J0fSR7ZHNuLnBhdGggPyBgLyR7ZHNuLnBhdGh9YCA6ICcnfS9hcGkvYDsKfQoKLyoqIFJldHVybnMgdGhlIGluZ2VzdCBBUEkgZW5kcG9pbnQgZm9yIHRhcmdldC4gKi8KZnVuY3Rpb24gX2dldEluZ2VzdEVuZHBvaW50KGRzbikgewogIHJldHVybiBgJHtnZXRCYXNlQXBpRW5kcG9pbnQoZHNuKX0ke2Rzbi5wcm9qZWN0SWR9L2VudmVsb3BlL2A7Cn0KCi8qKiBSZXR1cm5zIGEgVVJMLWVuY29kZWQgc3RyaW5nIHdpdGggYXV0aCBjb25maWcgc3VpdGFibGUgZm9yIGEgcXVlcnkgc3RyaW5nLiAqLwpmdW5jdGlvbiBfZW5jb2RlZEF1dGgoZHNuLCBzZGtJbmZvKSB7CiAgcmV0dXJuIHVybEVuY29kZSh7CiAgICAvLyBXZSBzZW5kIG9ubHkgdGhlIG1pbmltdW0gc2V0IG9mIHJlcXVpcmVkIGluZm9ybWF0aW9uLiBTZWUKICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvaXNzdWVzLzI1NzIuCiAgICBzZW50cnlfa2V5OiBkc24ucHVibGljS2V5LAogICAgc2VudHJ5X3ZlcnNpb246IFNFTlRSWV9BUElfVkVSU0lPTiwKICAgIC4uLihzZGtJbmZvICYmIHsgc2VudHJ5X2NsaWVudDogYCR7c2RrSW5mby5uYW1lfS8ke3Nka0luZm8udmVyc2lvbn1gIH0pLAogIH0pOwp9CgovKioKICogUmV0dXJucyB0aGUgZW52ZWxvcGUgZW5kcG9pbnQgVVJMIHdpdGggYXV0aCBpbiB0aGUgcXVlcnkgc3RyaW5nLgogKgogKiBTZW5kaW5nIGF1dGggYXMgcGFydCBvZiB0aGUgcXVlcnkgc3RyaW5nIGFuZCBub3QgYXMgY3VzdG9tIEhUVFAgaGVhZGVycyBhdm9pZHMgQ09SUyBwcmVmbGlnaHQgcmVxdWVzdHMuCiAqLwpmdW5jdGlvbiBnZXRFbnZlbG9wZUVuZHBvaW50V2l0aFVybEVuY29kZWRBdXRoKAogIGRzbiwKICAvLyBUT0RPICh2OCk6IFJlbW92ZSBgdHVubmVsT3JPcHRpb25zYCBpbiBmYXZvciBvZiBgb3B0aW9uc2AsIGFuZCB1c2UgdGhlIHN1YnN0aXR1dGUgY29kZSBiZWxvdwogIC8vIG9wdGlvbnM6IENsaWVudE9wdGlvbnMgPSB7fSBhcyBDbGllbnRPcHRpb25zLAogIHR1bm5lbE9yT3B0aW9ucyA9IHt9ICwKKSB7CiAgLy8gVE9ETyAodjgpOiBVc2UgdGhpcyBjb2RlIGluc3RlYWQKICAvLyBjb25zdCB7IHR1bm5lbCwgX21ldGFkYXRhID0ge30gfSA9IG9wdGlvbnM7CiAgLy8gcmV0dXJuIHR1bm5lbCA/IHR1bm5lbCA6IGAke19nZXRJbmdlc3RFbmRwb2ludChkc24pfT8ke19lbmNvZGVkQXV0aChkc24sIF9tZXRhZGF0YS5zZGspfWA7CgogIGNvbnN0IHR1bm5lbCA9IHR5cGVvZiB0dW5uZWxPck9wdGlvbnMgPT09ICdzdHJpbmcnID8gdHVubmVsT3JPcHRpb25zIDogdHVubmVsT3JPcHRpb25zLnR1bm5lbDsKICBjb25zdCBzZGtJbmZvID0KICAgIHR5cGVvZiB0dW5uZWxPck9wdGlvbnMgPT09ICdzdHJpbmcnIHx8ICF0dW5uZWxPck9wdGlvbnMuX21ldGFkYXRhID8gdW5kZWZpbmVkIDogdHVubmVsT3JPcHRpb25zLl9tZXRhZGF0YS5zZGs7CgogIHJldHVybiB0dW5uZWwgPyB0dW5uZWwgOiBgJHtfZ2V0SW5nZXN0RW5kcG9pbnQoZHNuKX0/JHtfZW5jb2RlZEF1dGgoZHNuLCBzZGtJbmZvKX1gOwp9Cgpjb25zdCBERUZBVUxUX1RSQU5TUE9SVF9CVUZGRVJfU0laRSA9IDMwOwoKLyoqCiAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgYSBTZW50cnkgYFRyYW5zcG9ydGAKICoKICogQHBhcmFtIG9wdGlvbnMKICogQHBhcmFtIG1ha2VSZXF1ZXN0CiAqLwpmdW5jdGlvbiBjcmVhdGVUcmFuc3BvcnQoCiAgb3B0aW9ucywKICBtYWtlUmVxdWVzdCwKICBidWZmZXIgPSBtYWtlUHJvbWlzZUJ1ZmZlcigKICAgIG9wdGlvbnMuYnVmZmVyU2l6ZSB8fCBERUZBVUxUX1RSQU5TUE9SVF9CVUZGRVJfU0laRSwKICApLAopIHsKICBsZXQgcmF0ZUxpbWl0cyA9IHt9OwogIGNvbnN0IGZsdXNoID0gKHRpbWVvdXQpID0+IGJ1ZmZlci5kcmFpbih0aW1lb3V0KTsKCiAgZnVuY3Rpb24gc2VuZChlbnZlbG9wZSkgewogICAgY29uc3QgZmlsdGVyZWRFbnZlbG9wZUl0ZW1zID0gW107CgogICAgLy8gRHJvcCByYXRlIGxpbWl0ZWQgaXRlbXMgZnJvbSBlbnZlbG9wZQogICAgZm9yRWFjaEVudmVsb3BlSXRlbShlbnZlbG9wZSwgKGl0ZW0sIHR5cGUpID0+IHsKICAgICAgY29uc3QgZGF0YUNhdGVnb3J5ID0gZW52ZWxvcGVJdGVtVHlwZVRvRGF0YUNhdGVnb3J5KHR5cGUpOwogICAgICBpZiAoaXNSYXRlTGltaXRlZChyYXRlTGltaXRzLCBkYXRhQ2F0ZWdvcnkpKSB7CiAgICAgICAgY29uc3QgZXZlbnQgPSBnZXRFdmVudEZvckVudmVsb3BlSXRlbShpdGVtLCB0eXBlKTsKICAgICAgICBvcHRpb25zLnJlY29yZERyb3BwZWRFdmVudCgncmF0ZWxpbWl0X2JhY2tvZmYnLCBkYXRhQ2F0ZWdvcnksIGV2ZW50KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBmaWx0ZXJlZEVudmVsb3BlSXRlbXMucHVzaChpdGVtKTsKICAgICAgfQogICAgfSk7CgogICAgLy8gU2tpcCBzZW5kaW5nIGlmIGVudmVsb3BlIGlzIGVtcHR5IGFmdGVyIGZpbHRlcmluZyBvdXQgcmF0ZSBsaW1pdGVkIGV2ZW50cwogICAgaWYgKGZpbHRlcmVkRW52ZWxvcGVJdGVtcy5sZW5ndGggPT09IDApIHsKICAgICAgcmV0dXJuIHJlc29sdmVkU3luY1Byb21pc2UoKTsKICAgIH0KCiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueQogICAgY29uc3QgZmlsdGVyZWRFbnZlbG9wZSA9IGNyZWF0ZUVudmVsb3BlKGVudmVsb3BlWzBdLCBmaWx0ZXJlZEVudmVsb3BlSXRlbXMgKTsKCiAgICAvLyBDcmVhdGVzIGNsaWVudCByZXBvcnQgZm9yIGVhY2ggaXRlbSBpbiBhbiBlbnZlbG9wZQogICAgY29uc3QgcmVjb3JkRW52ZWxvcGVMb3NzID0gKHJlYXNvbikgPT4gewogICAgICBmb3JFYWNoRW52ZWxvcGVJdGVtKGZpbHRlcmVkRW52ZWxvcGUsIChpdGVtLCB0eXBlKSA9PiB7CiAgICAgICAgY29uc3QgZXZlbnQgPSBnZXRFdmVudEZvckVudmVsb3BlSXRlbShpdGVtLCB0eXBlKTsKICAgICAgICBvcHRpb25zLnJlY29yZERyb3BwZWRFdmVudChyZWFzb24sIGVudmVsb3BlSXRlbVR5cGVUb0RhdGFDYXRlZ29yeSh0eXBlKSwgZXZlbnQpOwogICAgICB9KTsKICAgIH07CgogICAgY29uc3QgcmVxdWVzdFRhc2sgPSAoKSA9PgogICAgICBtYWtlUmVxdWVzdCh7IGJvZHk6IHNlcmlhbGl6ZUVudmVsb3BlKGZpbHRlcmVkRW52ZWxvcGUsIG9wdGlvbnMudGV4dEVuY29kZXIpIH0pLnRoZW4oCiAgICAgICAgcmVzcG9uc2UgPT4gewogICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byB0aHJvdyBvbiBOT0sgcmVzcG9uc2VzLCBidXQgd2Ugd2FudCB0byBhdCBsZWFzdCBsb2cgdGhlbQogICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1c0NvZGUgIT09IHVuZGVmaW5lZCAmJiAocmVzcG9uc2Uuc3RhdHVzQ29kZSA8IDIwMCB8fCByZXNwb25zZS5zdGF0dXNDb2RlID49IDMwMCkpIHsKICAgICAgICAgICAgREVCVUdfQlVJTEQgJiYgbG9nZ2VyLndhcm4oYFNlbnRyeSByZXNwb25kZWQgd2l0aCBzdGF0dXMgY29kZSAke3Jlc3BvbnNlLnN0YXR1c0NvZGV9IHRvIHNlbnQgZXZlbnQuYCk7CiAgICAgICAgICB9CgogICAgICAgICAgcmF0ZUxpbWl0cyA9IHVwZGF0ZVJhdGVMaW1pdHMocmF0ZUxpbWl0cywgcmVzcG9uc2UpOwogICAgICAgICAgcmV0dXJuIHJlc3BvbnNlOwogICAgICAgIH0sCiAgICAgICAgZXJyb3IgPT4gewogICAgICAgICAgcmVjb3JkRW52ZWxvcGVMb3NzKCduZXR3b3JrX2Vycm9yJyk7CiAgICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgICB9LAogICAgICApOwoKICAgIHJldHVybiBidWZmZXIuYWRkKHJlcXVlc3RUYXNrKS50aGVuKAogICAgICByZXN1bHQgPT4gcmVzdWx0LAogICAgICBlcnJvciA9PiB7CiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU2VudHJ5RXJyb3IpIHsKICAgICAgICAgIERFQlVHX0JVSUxEICYmIGxvZ2dlci5lcnJvcignU2tpcHBlZCBzZW5kaW5nIGV2ZW50IGJlY2F1c2UgYnVmZmVyIGlzIGZ1bGwuJyk7CiAgICAgICAgICByZWNvcmRFbnZlbG9wZUxvc3MoJ3F1ZXVlX292ZXJmbG93Jyk7CiAgICAgICAgICByZXR1cm4gcmVzb2x2ZWRTeW5jUHJvbWlzZSgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgICB9CiAgICAgIH0sCiAgICApOwogIH0KCiAgLy8gV2UgdXNlIHRoaXMgdG8gaWRlbnRpZmlmeSBpZiB0aGUgdHJhbnNwb3J0IGlzIHRoZSBiYXNlIHRyYW5zcG9ydAogIC8vIFRPRE8gKHY4KTogUmVtb3ZlIHRoaXMgYWdhaW4gYXMgd2UnbGwgbm8gbG9uZ2VyIG5lZWQgaXQKICBzZW5kLl9fc2VudHJ5X19iYXNlVHJhbnNwb3J0X18gPSB0cnVlOwoKICByZXR1cm4gewogICAgc2VuZCwKICAgIGZsdXNoLAogIH07Cn0KCmZ1bmN0aW9uIGdldEV2ZW50Rm9yRW52ZWxvcGVJdGVtKGl0ZW0sIHR5cGUpIHsKICBpZiAodHlwZSAhPT0gJ2V2ZW50JyAmJiB0eXBlICE9PSAndHJhbnNhY3Rpb24nKSB7CiAgICByZXR1cm4gdW5kZWZpbmVkOwogIH0KCiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoaXRlbSkgPyAoaXRlbSApWzFdIDogdW5kZWZpbmVkOwp9CgovKiogbm9ybWFsaXplcyBXaW5kb3dzIHBhdGhzICovCmZ1bmN0aW9uIG5vcm1hbGl6ZVdpbmRvd3NQYXRoKHBhdGgpIHsKICByZXR1cm4gcGF0aAogICAgLnJlcGxhY2UoL15bQS1aXTovLCAnJykgLy8gcmVtb3ZlIFdpbmRvd3Mtc3R5bGUgcHJlZml4CiAgICAucmVwbGFjZSgvXFwvZywgJy8nKTsgLy8gcmVwbGFjZSBhbGwgYFxgIGluc3RhbmNlcyB3aXRoIGAvYAp9CgovKiogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgZ2V0cyB0aGUgbW9kdWxlIG5hbWUgZnJvbSBhIGZpbGVuYW1lICovCmZ1bmN0aW9uIGNyZWF0ZUdldE1vZHVsZUZyb21GaWxlbmFtZSgKICBiYXNlUGF0aCA9IHByb2Nlc3MuYXJndlsxXSA/IGRpcm5hbWUocHJvY2Vzcy5hcmd2WzFdKSA6IHByb2Nlc3MuY3dkKCksCiAgaXNXaW5kb3dzID0gc2VwID09PSAnXFwnLAopIHsKICBjb25zdCBub3JtYWxpemVkQmFzZSA9IGlzV2luZG93cyA/IG5vcm1hbGl6ZVdpbmRvd3NQYXRoKGJhc2VQYXRoKSA6IGJhc2VQYXRoOwoKICByZXR1cm4gKGZpbGVuYW1lKSA9PiB7CiAgICBpZiAoIWZpbGVuYW1lKSB7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBjb25zdCBub3JtYWxpemVkRmlsZW5hbWUgPSBpc1dpbmRvd3MgPyBub3JtYWxpemVXaW5kb3dzUGF0aChmaWxlbmFtZSkgOiBmaWxlbmFtZTsKCiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0CiAgICBsZXQgeyBkaXIsIGJhc2U6IGZpbGUsIGV4dCB9ID0gcG9zaXgucGFyc2Uobm9ybWFsaXplZEZpbGVuYW1lKTsKCiAgICBpZiAoZXh0ID09PSAnLmpzJyB8fCBleHQgPT09ICcubWpzJyB8fCBleHQgPT09ICcuY2pzJykgewogICAgICBmaWxlID0gZmlsZS5zbGljZSgwLCBleHQubGVuZ3RoICogLTEpOwogICAgfQoKICAgIGlmICghZGlyKSB7CiAgICAgIC8vIE5vIGRpcm5hbWUgd2hhdHNvZXZlcgogICAgICBkaXIgPSAnLic7CiAgICB9CgogICAgY29uc3QgbiA9IGRpci5sYXN0SW5kZXhPZignL25vZGVfbW9kdWxlcycpOwogICAgaWYgKG4gPiAtMSkgewogICAgICByZXR1cm4gYCR7ZGlyLnNsaWNlKG4gKyAxNCkucmVwbGFjZSgvXC8vZywgJy4nKX06JHtmaWxlfWA7CiAgICB9CgogICAgLy8gTGV0J3Mgc2VlIGlmIGl0J3MgYSBwYXJ0IG9mIHRoZSBtYWluIG1vZHVsZQogICAgLy8gVG8gYmUgYSBwYXJ0IG9mIG1haW4gbW9kdWxlLCBpdCBoYXMgdG8gc2hhcmUgdGhlIHNhbWUgYmFzZQogICAgaWYgKGRpci5zdGFydHNXaXRoKG5vcm1hbGl6ZWRCYXNlKSkgewogICAgICBsZXQgbW9kdWxlTmFtZSA9IGRpci5zbGljZShub3JtYWxpemVkQmFzZS5sZW5ndGggKyAxKS5yZXBsYWNlKC9cLy9nLCAnLicpOwoKICAgICAgaWYgKG1vZHVsZU5hbWUpIHsKICAgICAgICBtb2R1bGVOYW1lICs9ICc6JzsKICAgICAgfQogICAgICBtb2R1bGVOYW1lICs9IGZpbGU7CgogICAgICByZXR1cm4gbW9kdWxlTmFtZTsKICAgIH0KCiAgICByZXR1cm4gZmlsZTsKICB9Owp9CgpmdW5jdGlvbiBfbnVsbGlzaENvYWxlc2NlJDIobGhzLCByaHNGbikgeyBpZiAobGhzICE9IG51bGwpIHsgcmV0dXJuIGxoczsgfSBlbHNlIHsgcmV0dXJuIHJoc0ZuKCk7IH0gfS8qKgogKiBUaGlzIGNvZGUgd2FzIG9yaWdpbmFsbHkgZm9ya2VkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL1Rvb1RhbGxOYXRlL3Byb3h5LWFnZW50cy90cmVlL2IxMzMyOTVmZDE2ZjY0NzU1NzhiNmIxNWJkOWI0ZTMzZWNiMGQwYjcKICogV2l0aCB0aGUgZm9sbG93aW5nIGxpY2VuY2U6CiAqCiAqIChUaGUgTUlUIExpY2Vuc2UpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxMyBOYXRoYW4gUmFqbGljaCA8bmF0aGFuQHRvb3RhbGxuYXRlLm5ldD4qCiAqCiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwogKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKICogJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwogKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCiAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwogKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOioKICoKICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuKgogKgogKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCiAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKICogQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKICogVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKICogU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAqLwoKY29uc3QgSU5URVJOQUwgPSBTeW1ib2woJ0FnZW50QmFzZUludGVybmFsU3RhdGUnKTsKCmNsYXNzIEFnZW50IGV4dGVuZHMgaHR0cC5BZ2VudCB7CgogIC8vIFNldCBieSBgaHR0cC5BZ2VudGAgLSBtaXNzaW5nIGZyb20gYEB0eXBlcy9ub2RlYAoKICBjb25zdHJ1Y3RvcihvcHRzKSB7CiAgICBzdXBlcihvcHRzKTsKICAgIHRoaXNbSU5URVJOQUxdID0ge307CiAgfQoKICAvKioKICAgKiBEZXRlcm1pbmUgd2hldGhlciB0aGlzIGlzIGFuIGBodHRwYCBvciBgaHR0cHNgIHJlcXVlc3QuCiAgICovCiAgaXNTZWN1cmVFbmRwb2ludChvcHRpb25zKSB7CiAgICBpZiAob3B0aW9ucykgewogICAgICAvLyBGaXJzdCBjaGVjayB0aGUgYHNlY3VyZUVuZHBvaW50YCBwcm9wZXJ0eSBleHBsaWNpdGx5LCBzaW5jZSB0aGlzCiAgICAgIC8vIG1lYW5zIHRoYXQgYSBwYXJlbnQgYEFnZW50YCBpcyAicGFzc2luZyB0aHJvdWdoIiB0byB0aGlzIGluc3RhbmNlLgogICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzCiAgICAgIGlmICh0eXBlb2YgKG9wdGlvbnMgKS5zZWN1cmVFbmRwb2ludCA9PT0gJ2Jvb2xlYW4nKSB7CiAgICAgICAgcmV0dXJuIG9wdGlvbnMuc2VjdXJlRW5kcG9pbnQ7CiAgICAgIH0KCiAgICAgIC8vIElmIG5vIGV4cGxpY2l0IGBzZWN1cmVgIGVuZHBvaW50LCBjaGVjayBpZiBgcHJvdG9jb2xgIHByb3BlcnR5IGlzCiAgICAgIC8vIHNldC4gVGhpcyB3aWxsIHVzdWFsbHkgYmUgdGhlIGNhc2Ugc2luY2UgdXNpbmcgYSBmdWxsIHN0cmluZyBVUkwKICAgICAgLy8gb3IgYFVSTGAgaW5zdGFuY2Ugc2hvdWxkIGJlIHRoZSBtb3N0IGNvbW1vbiB1c2FnZS4KICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnByb3RvY29sID09PSAnc3RyaW5nJykgewogICAgICAgIHJldHVybiBvcHRpb25zLnByb3RvY29sID09PSAnaHR0cHM6JzsKICAgICAgfQogICAgfQoKICAgIC8vIEZpbmFsbHksIGlmIG5vIGBwcm90b2NvbGAgcHJvcGVydHkgd2FzIHNldCwgdGhlbiBmYWxsIGJhY2sgdG8KICAgIC8vIGNoZWNraW5nIHRoZSBzdGFjayB0cmFjZSBvZiB0aGUgY3VycmVudCBjYWxsIHN0YWNrLCBhbmQgdHJ5IHRvCiAgICAvLyBkZXRlY3QgdGhlICJodHRwcyIgbW9kdWxlLgogICAgY29uc3QgeyBzdGFjayB9ID0gbmV3IEVycm9yKCk7CiAgICBpZiAodHlwZW9mIHN0YWNrICE9PSAnc3RyaW5nJykgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHN0YWNrLnNwbGl0KCdcbicpLnNvbWUobCA9PiBsLmluZGV4T2YoJyhodHRwcy5qczonKSAhPT0gLTEgfHwgbC5pbmRleE9mKCdub2RlOmh0dHBzOicpICE9PSAtMSk7CiAgfQoKICBjcmVhdGVTb2NrZXQocmVxLCBvcHRpb25zLCBjYikgewogICAgY29uc3QgY29ubmVjdE9wdHMgPSB7CiAgICAgIC4uLm9wdGlvbnMsCiAgICAgIHNlY3VyZUVuZHBvaW50OiB0aGlzLmlzU2VjdXJlRW5kcG9pbnQob3B0aW9ucyksCiAgICB9OwogICAgUHJvbWlzZS5yZXNvbHZlKCkKICAgICAgLnRoZW4oKCkgPT4gdGhpcy5jb25uZWN0KHJlcSwgY29ubmVjdE9wdHMpKQogICAgICAudGhlbihzb2NrZXQgPT4gewogICAgICAgIGlmIChzb2NrZXQgaW5zdGFuY2VvZiBodHRwLkFnZW50KSB7CiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGBhZGRSZXF1ZXN0KClgIGlzbid0IGRlZmluZWQgaW4gYEB0eXBlcy9ub2RlYAogICAgICAgICAgcmV0dXJuIHNvY2tldC5hZGRSZXF1ZXN0KHJlcSwgY29ubmVjdE9wdHMpOwogICAgICAgIH0KICAgICAgICB0aGlzW0lOVEVSTkFMXS5jdXJyZW50U29ja2V0ID0gc29ja2V0OwogICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgYGNyZWF0ZVNvY2tldCgpYCBpc24ndCBkZWZpbmVkIGluIGBAdHlwZXMvbm9kZWAKICAgICAgICBzdXBlci5jcmVhdGVTb2NrZXQocmVxLCBvcHRpb25zLCBjYik7CiAgICAgIH0sIGNiKTsKICB9CgogIGNyZWF0ZUNvbm5lY3Rpb24oKSB7CiAgICBjb25zdCBzb2NrZXQgPSB0aGlzW0lOVEVSTkFMXS5jdXJyZW50U29ja2V0OwogICAgdGhpc1tJTlRFUk5BTF0uY3VycmVudFNvY2tldCA9IHVuZGVmaW5lZDsKICAgIGlmICghc29ja2V0KSB7CiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gc29ja2V0IHdhcyByZXR1cm5lZCBpbiB0aGUgYGNvbm5lY3QoKWAgZnVuY3Rpb24nKTsKICAgIH0KICAgIHJldHVybiBzb2NrZXQ7CiAgfQoKICBnZXQgZGVmYXVsdFBvcnQoKSB7CiAgICByZXR1cm4gX251bGxpc2hDb2FsZXNjZSQyKHRoaXNbSU5URVJOQUxdLmRlZmF1bHRQb3J0LCAoKSA9PiAoICh0aGlzLnByb3RvY29sID09PSAnaHR0cHM6JyA/IDQ0MyA6IDgwKSkpOwogIH0KCiAgc2V0IGRlZmF1bHRQb3J0KHYpIHsKICAgIGlmICh0aGlzW0lOVEVSTkFMXSkgewogICAgICB0aGlzW0lOVEVSTkFMXS5kZWZhdWx0UG9ydCA9IHY7CiAgICB9CiAgfQoKICBnZXQgcHJvdG9jb2woKSB7CiAgICByZXR1cm4gX251bGxpc2hDb2FsZXNjZSQyKHRoaXNbSU5URVJOQUxdLnByb3RvY29sLCAoKSA9PiAoICh0aGlzLmlzU2VjdXJlRW5kcG9pbnQoKSA/ICdodHRwczonIDogJ2h0dHA6JykpKTsKICB9CgogIHNldCBwcm90b2NvbCh2KSB7CiAgICBpZiAodGhpc1tJTlRFUk5BTF0pIHsKICAgICAgdGhpc1tJTlRFUk5BTF0ucHJvdG9jb2wgPSB2OwogICAgfQogIH0KfQoKZnVuY3Rpb24gZGVidWckMSguLi5hcmdzKSB7CiAgbG9nZ2VyLmxvZygnW2h0dHBzLXByb3h5LWFnZW50OnBhcnNlLXByb3h5LXJlc3BvbnNlXScsIC4uLmFyZ3MpOwp9CgpmdW5jdGlvbiBwYXJzZVByb3h5UmVzcG9uc2Uoc29ja2V0KSB7CiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKICAgIC8vIHdlIG5lZWQgdG8gYnVmZmVyIGFueSBIVFRQIHRyYWZmaWMgdGhhdCBoYXBwZW5zIHdpdGggdGhlIHByb3h5IGJlZm9yZSB3ZSBnZXQKICAgIC8vIHRoZSBDT05ORUNUIHJlc3BvbnNlLCBzbyB0aGF0IGlmIHRoZSByZXNwb25zZSBpcyBhbnl0aGluZyBvdGhlciB0aGFuIGFuICIyMDAiCiAgICAvLyByZXNwb25zZSBjb2RlLCB0aGVuIHdlIGNhbiByZS1wbGF5IHRoZSAiZGF0YSIgZXZlbnRzIG9uIHRoZSBzb2NrZXQgb25jZSB0aGUKICAgIC8vIEhUVFAgcGFyc2VyIGlzIGhvb2tlZCB1cC4uLgogICAgbGV0IGJ1ZmZlcnNMZW5ndGggPSAwOwogICAgY29uc3QgYnVmZmVycyA9IFtdOwoKICAgIGZ1bmN0aW9uIHJlYWQoKSB7CiAgICAgIGNvbnN0IGIgPSBzb2NrZXQucmVhZCgpOwogICAgICBpZiAoYikgb25kYXRhKGIpOwogICAgICBlbHNlIHNvY2tldC5vbmNlKCdyZWFkYWJsZScsIHJlYWQpOwogICAgfQoKICAgIGZ1bmN0aW9uIGNsZWFudXAoKSB7CiAgICAgIHNvY2tldC5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25lbmQpOwogICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25lcnJvcik7CiAgICAgIHNvY2tldC5yZW1vdmVMaXN0ZW5lcigncmVhZGFibGUnLCByZWFkKTsKICAgIH0KCiAgICBmdW5jdGlvbiBvbmVuZCgpIHsKICAgICAgY2xlYW51cCgpOwogICAgICBkZWJ1ZyQxKCdvbmVuZCcpOwogICAgICByZWplY3QobmV3IEVycm9yKCdQcm94eSBjb25uZWN0aW9uIGVuZGVkIGJlZm9yZSByZWNlaXZpbmcgQ09OTkVDVCByZXNwb25zZScpKTsKICAgIH0KCiAgICBmdW5jdGlvbiBvbmVycm9yKGVycikgewogICAgICBjbGVhbnVwKCk7CiAgICAgIGRlYnVnJDEoJ29uZXJyb3IgJW8nLCBlcnIpOwogICAgICByZWplY3QoZXJyKTsKICAgIH0KCiAgICBmdW5jdGlvbiBvbmRhdGEoYikgewogICAgICBidWZmZXJzLnB1c2goYik7CiAgICAgIGJ1ZmZlcnNMZW5ndGggKz0gYi5sZW5ndGg7CgogICAgICBjb25zdCBidWZmZXJlZCA9IEJ1ZmZlci5jb25jYXQoYnVmZmVycywgYnVmZmVyc0xlbmd0aCk7CiAgICAgIGNvbnN0IGVuZE9mSGVhZGVycyA9IGJ1ZmZlcmVkLmluZGV4T2YoJ1xyXG5cclxuJyk7CgogICAgICBpZiAoZW5kT2ZIZWFkZXJzID09PSAtMSkgewogICAgICAgIC8vIGtlZXAgYnVmZmVyaW5nCiAgICAgICAgZGVidWckMSgnaGF2ZSBub3QgcmVjZWl2ZWQgZW5kIG9mIEhUVFAgaGVhZGVycyB5ZXQuLi4nKTsKICAgICAgICByZWFkKCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICBjb25zdCBoZWFkZXJQYXJ0cyA9IGJ1ZmZlcmVkLnNsaWNlKDAsIGVuZE9mSGVhZGVycykudG9TdHJpbmcoJ2FzY2lpJykuc3BsaXQoJ1xyXG4nKTsKICAgICAgY29uc3QgZmlyc3RMaW5lID0gaGVhZGVyUGFydHMuc2hpZnQoKTsKICAgICAgaWYgKCFmaXJzdExpbmUpIHsKICAgICAgICBzb2NrZXQuZGVzdHJveSgpOwogICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKCdObyBoZWFkZXIgcmVjZWl2ZWQgZnJvbSBwcm94eSBDT05ORUNUIHJlc3BvbnNlJykpOwogICAgICB9CiAgICAgIGNvbnN0IGZpcnN0TGluZVBhcnRzID0gZmlyc3RMaW5lLnNwbGl0KCcgJyk7CiAgICAgIGNvbnN0IHN0YXR1c0NvZGUgPSArZmlyc3RMaW5lUGFydHNbMV07CiAgICAgIGNvbnN0IHN0YXR1c1RleHQgPSBmaXJzdExpbmVQYXJ0cy5zbGljZSgyKS5qb2luKCcgJyk7CiAgICAgIGNvbnN0IGhlYWRlcnMgPSB7fTsKICAgICAgZm9yIChjb25zdCBoZWFkZXIgb2YgaGVhZGVyUGFydHMpIHsKICAgICAgICBpZiAoIWhlYWRlcikgY29udGludWU7CiAgICAgICAgY29uc3QgZmlyc3RDb2xvbiA9IGhlYWRlci5pbmRleE9mKCc6Jyk7CiAgICAgICAgaWYgKGZpcnN0Q29sb24gPT09IC0xKSB7CiAgICAgICAgICBzb2NrZXQuZGVzdHJveSgpOwogICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoYEludmFsaWQgaGVhZGVyIGZyb20gcHJveHkgQ09OTkVDVCByZXNwb25zZTogIiR7aGVhZGVyfSJgKSk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGtleSA9IGhlYWRlci5zbGljZSgwLCBmaXJzdENvbG9uKS50b0xvd2VyQ2FzZSgpOwogICAgICAgIGNvbnN0IHZhbHVlID0gaGVhZGVyLnNsaWNlKGZpcnN0Q29sb24gKyAxKS50cmltU3RhcnQoKTsKICAgICAgICBjb25zdCBjdXJyZW50ID0gaGVhZGVyc1trZXldOwogICAgICAgIGlmICh0eXBlb2YgY3VycmVudCA9PT0gJ3N0cmluZycpIHsKICAgICAgICAgIGhlYWRlcnNba2V5XSA9IFtjdXJyZW50LCB2YWx1ZV07CiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGN1cnJlbnQpKSB7CiAgICAgICAgICBjdXJyZW50LnB1c2godmFsdWUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBoZWFkZXJzW2tleV0gPSB2YWx1ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZGVidWckMSgnZ290IHByb3h5IHNlcnZlciByZXNwb25zZTogJW8gJW8nLCBmaXJzdExpbmUsIGhlYWRlcnMpOwogICAgICBjbGVhbnVwKCk7CiAgICAgIHJlc29sdmUoewogICAgICAgIGNvbm5lY3Q6IHsKICAgICAgICAgIHN0YXR1c0NvZGUsCiAgICAgICAgICBzdGF0dXNUZXh0LAogICAgICAgICAgaGVhZGVycywKICAgICAgICB9LAogICAgICAgIGJ1ZmZlcmVkLAogICAgICB9KTsKICAgIH0KCiAgICBzb2NrZXQub24oJ2Vycm9yJywgb25lcnJvcik7CiAgICBzb2NrZXQub24oJ2VuZCcsIG9uZW5kKTsKCiAgICByZWFkKCk7CiAgfSk7Cn0KCmZ1bmN0aW9uIF9udWxsaXNoQ29hbGVzY2UkMShsaHMsIHJoc0ZuKSB7IGlmIChsaHMgIT0gbnVsbCkgeyByZXR1cm4gbGhzOyB9IGVsc2UgeyByZXR1cm4gcmhzRm4oKTsgfSB9IGZ1bmN0aW9uIF9vcHRpb25hbENoYWluJDEob3BzKSB7IGxldCBsYXN0QWNjZXNzTEhTID0gdW5kZWZpbmVkOyBsZXQgdmFsdWUgPSBvcHNbMF07IGxldCBpID0gMTsgd2hpbGUgKGkgPCBvcHMubGVuZ3RoKSB7IGNvbnN0IG9wID0gb3BzW2ldOyBjb25zdCBmbiA9IG9wc1tpICsgMV07IGkgKz0gMjsgaWYgKChvcCA9PT0gJ29wdGlvbmFsQWNjZXNzJyB8fCBvcCA9PT0gJ29wdGlvbmFsQ2FsbCcpICYmIHZhbHVlID09IG51bGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSBpZiAob3AgPT09ICdhY2Nlc3MnIHx8IG9wID09PSAnb3B0aW9uYWxBY2Nlc3MnKSB7IGxhc3RBY2Nlc3NMSFMgPSB2YWx1ZTsgdmFsdWUgPSBmbih2YWx1ZSk7IH0gZWxzZSBpZiAob3AgPT09ICdjYWxsJyB8fCBvcCA9PT0gJ29wdGlvbmFsQ2FsbCcpIHsgdmFsdWUgPSBmbigoLi4uYXJncykgPT4gdmFsdWUuY2FsbChsYXN0QWNjZXNzTEhTLCAuLi5hcmdzKSk7IGxhc3RBY2Nlc3NMSFMgPSB1bmRlZmluZWQ7IH0gfSByZXR1cm4gdmFsdWU7IH0KCmZ1bmN0aW9uIGRlYnVnKC4uLmFyZ3MpIHsKICBsb2dnZXIubG9nKCdbaHR0cHMtcHJveHktYWdlbnRdJywgLi4uYXJncyk7Cn0KCi8qKgogKiBUaGUgYEh0dHBzUHJveHlBZ2VudGAgaW1wbGVtZW50cyBhbiBIVFRQIEFnZW50IHN1YmNsYXNzIHRoYXQgY29ubmVjdHMgdG8KICogdGhlIHNwZWNpZmllZCAiSFRUUChzKSBwcm94eSBzZXJ2ZXIiIGluIG9yZGVyIHRvIHByb3h5IEhUVFBTIHJlcXVlc3RzLgogKgogKiBPdXRnb2luZyBIVFRQIHJlcXVlc3RzIGFyZSBmaXJzdCB0dW5uZWxlZCB0aHJvdWdoIHRoZSBwcm94eSBzZXJ2ZXIgdXNpbmcgdGhlCiAqIGBDT05ORUNUYCBIVFRQIHJlcXVlc3QgbWV0aG9kIHRvIGVzdGFibGlzaCBhIGNvbm5lY3Rpb24gdG8gdGhlIHByb3h5IHNlcnZlciwKICogYW5kIHRoZW4gdGhlIHByb3h5IHNlcnZlciBjb25uZWN0cyB0byB0aGUgZGVzdGluYXRpb24gdGFyZ2V0IGFuZCBpc3N1ZXMgdGhlCiAqIEhUVFAgcmVxdWVzdCBmcm9tIHRoZSBwcm94eSBzZXJ2ZXIuCiAqCiAqIGBodHRwczpgIHJlcXVlc3RzIGhhdmUgdGhlaXIgc29ja2V0IGNvbm5lY3Rpb24gdXBncmFkZWQgdG8gVExTIG9uY2UKICogdGhlIGNvbm5lY3Rpb24gdG8gdGhlIHByb3h5IHNlcnZlciBoYXMgYmVlbiBlc3RhYmxpc2hlZC4KICovCmNsYXNzIEh0dHBzUHJveHlBZ2VudCBleHRlbmRzIEFnZW50IHsKICBzdGF0aWMgX19pbml0U3RhdGljKCkge3RoaXMucHJvdG9jb2xzID0gWydodHRwJywgJ2h0dHBzJ107IH0KCiAgY29uc3RydWN0b3IocHJveHksIG9wdHMpIHsKICAgIHN1cGVyKG9wdHMpOwogICAgdGhpcy5vcHRpb25zID0ge307CiAgICB0aGlzLnByb3h5ID0gdHlwZW9mIHByb3h5ID09PSAnc3RyaW5nJyA/IG5ldyBVUkwocHJveHkpIDogcHJveHk7CiAgICB0aGlzLnByb3h5SGVhZGVycyA9IF9udWxsaXNoQ29hbGVzY2UkMShfb3B0aW9uYWxDaGFpbiQxKFtvcHRzLCAnb3B0aW9uYWxBY2Nlc3MnLCBfMiA9PiBfMi5oZWFkZXJzXSksICgpID0+ICgge30pKTsKICAgIGRlYnVnKCdDcmVhdGluZyBuZXcgSHR0cHNQcm94eUFnZW50IGluc3RhbmNlOiAlbycsIHRoaXMucHJveHkuaHJlZik7CgogICAgLy8gVHJpbSBvZmYgdGhlIGJyYWNrZXRzIGZyb20gSVB2NiBhZGRyZXNzZXMKICAgIGNvbnN0IGhvc3QgPSAodGhpcy5wcm94eS5ob3N0bmFtZSB8fCB0aGlzLnByb3h5Lmhvc3QpLnJlcGxhY2UoL15cW3xcXSQvZywgJycpOwogICAgY29uc3QgcG9ydCA9IHRoaXMucHJveHkucG9ydCA/IHBhcnNlSW50KHRoaXMucHJveHkucG9ydCwgMTApIDogdGhpcy5wcm94eS5wcm90b2NvbCA9PT0gJ2h0dHBzOicgPyA0NDMgOiA4MDsKICAgIHRoaXMuY29ubmVjdE9wdHMgPSB7CiAgICAgIC8vIEF0dGVtcHQgdG8gbmVnb3RpYXRlIGh0dHAvMS4xIGZvciBwcm94eSBzZXJ2ZXJzIHRoYXQgc3VwcG9ydCBodHRwLzIKICAgICAgQUxQTlByb3RvY29sczogWydodHRwLzEuMSddLAogICAgICAuLi4ob3B0cyA/IG9taXQob3B0cywgJ2hlYWRlcnMnKSA6IG51bGwpLAogICAgICBob3N0LAogICAgICBwb3J0LAogICAgfTsKICB9CgogIC8qKgogICAqIENhbGxlZCB3aGVuIHRoZSBub2RlLWNvcmUgSFRUUCBjbGllbnQgbGlicmFyeSBpcyBjcmVhdGluZyBhCiAgICogbmV3IEhUVFAgcmVxdWVzdC4KICAgKi8KICBhc3luYyBjb25uZWN0KHJlcSwgb3B0cykgewogICAgY29uc3QgeyBwcm94eSB9ID0gdGhpczsKCiAgICBpZiAoIW9wdHMuaG9zdCkgewogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdObyAiaG9zdCIgcHJvdmlkZWQnKTsKICAgIH0KCiAgICAvLyBDcmVhdGUgYSBzb2NrZXQgY29ubmVjdGlvbiB0byB0aGUgcHJveHkgc2VydmVyLgogICAgbGV0IHNvY2tldDsKICAgIGlmIChwcm94eS5wcm90b2NvbCA9PT0gJ2h0dHBzOicpIHsKICAgICAgZGVidWcoJ0NyZWF0aW5nIGB0bHMuU29ja2V0YDogJW8nLCB0aGlzLmNvbm5lY3RPcHRzKTsKICAgICAgY29uc3Qgc2VydmVybmFtZSA9IHRoaXMuY29ubmVjdE9wdHMuc2VydmVybmFtZSB8fCB0aGlzLmNvbm5lY3RPcHRzLmhvc3Q7CiAgICAgIHNvY2tldCA9IHRscy5jb25uZWN0KHsKICAgICAgICAuLi50aGlzLmNvbm5lY3RPcHRzLAogICAgICAgIHNlcnZlcm5hbWU6IHNlcnZlcm5hbWUgJiYgbmV0LmlzSVAoc2VydmVybmFtZSkgPyB1bmRlZmluZWQgOiBzZXJ2ZXJuYW1lLAogICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgIGRlYnVnKCdDcmVhdGluZyBgbmV0LlNvY2tldGA6ICVvJywgdGhpcy5jb25uZWN0T3B0cyk7CiAgICAgIHNvY2tldCA9IG5ldC5jb25uZWN0KHRoaXMuY29ubmVjdE9wdHMpOwogICAgfQoKICAgIGNvbnN0IGhlYWRlcnMgPQogICAgICB0eXBlb2YgdGhpcy5wcm94eUhlYWRlcnMgPT09ICdmdW5jdGlvbicgPyB0aGlzLnByb3h5SGVhZGVycygpIDogeyAuLi50aGlzLnByb3h5SGVhZGVycyB9OwogICAgY29uc3QgaG9zdCA9IG5ldC5pc0lQdjYob3B0cy5ob3N0KSA/IGBbJHtvcHRzLmhvc3R9XWAgOiBvcHRzLmhvc3Q7CiAgICBsZXQgcGF5bG9hZCA9IGBDT05ORUNUICR7aG9zdH06JHtvcHRzLnBvcnR9IEhUVFAvMS4xXHJcbmA7CgogICAgLy8gSW5qZWN0IHRoZSBgUHJveHktQXV0aG9yaXphdGlvbmAgaGVhZGVyIGlmIG5lY2Vzc2FyeS4KICAgIGlmIChwcm94eS51c2VybmFtZSB8fCBwcm94eS5wYXNzd29yZCkgewogICAgICBjb25zdCBhdXRoID0gYCR7ZGVjb2RlVVJJQ29tcG9uZW50KHByb3h5LnVzZXJuYW1lKX06JHtkZWNvZGVVUklDb21wb25lbnQocHJveHkucGFzc3dvcmQpfWA7CiAgICAgIGhlYWRlcnNbJ1Byb3h5LUF1dGhvcml6YXRpb24nXSA9IGBCYXNpYyAke0J1ZmZlci5mcm9tKGF1dGgpLnRvU3RyaW5nKCdiYXNlNjQnKX1gOwogICAgfQoKICAgIGhlYWRlcnMuSG9zdCA9IGAke2hvc3R9OiR7b3B0cy5wb3J0fWA7CgogICAgaWYgKCFoZWFkZXJzWydQcm94eS1Db25uZWN0aW9uJ10pIHsKICAgICAgaGVhZGVyc1snUHJveHktQ29ubmVjdGlvbiddID0gdGhpcy5rZWVwQWxpdmUgPyAnS2VlcC1BbGl2ZScgOiAnY2xvc2UnOwogICAgfQogICAgZm9yIChjb25zdCBuYW1lIG9mIE9iamVjdC5rZXlzKGhlYWRlcnMpKSB7CiAgICAgIHBheWxvYWQgKz0gYCR7bmFtZX06ICR7aGVhZGVyc1tuYW1lXX1cclxuYDsKICAgIH0KCiAgICBjb25zdCBwcm94eVJlc3BvbnNlUHJvbWlzZSA9IHBhcnNlUHJveHlSZXNwb25zZShzb2NrZXQpOwoKICAgIHNvY2tldC53cml0ZShgJHtwYXlsb2FkfVxyXG5gKTsKCiAgICBjb25zdCB7IGNvbm5lY3QsIGJ1ZmZlcmVkIH0gPSBhd2FpdCBwcm94eVJlc3BvbnNlUHJvbWlzZTsKICAgIHJlcS5lbWl0KCdwcm94eUNvbm5lY3QnLCBjb25uZWN0KTsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnQKICAgIC8vIEB0cy1pZ25vcmUgTm90IEV2ZW50RW1pdHRlciBpbiBOb2RlIHR5cGVzCiAgICB0aGlzLmVtaXQoJ3Byb3h5Q29ubmVjdCcsIGNvbm5lY3QsIHJlcSk7CgogICAgaWYgKGNvbm5lY3Quc3RhdHVzQ29kZSA9PT0gMjAwKSB7CiAgICAgIHJlcS5vbmNlKCdzb2NrZXQnLCByZXN1bWUpOwoKICAgICAgaWYgKG9wdHMuc2VjdXJlRW5kcG9pbnQpIHsKICAgICAgICAvLyBUaGUgcHJveHkgaXMgY29ubmVjdGluZyB0byBhIFRMUyBzZXJ2ZXIsIHNvIHVwZ3JhZGUKICAgICAgICAvLyB0aGlzIHNvY2tldCBjb25uZWN0aW9uIHRvIGEgVExTIGNvbm5lY3Rpb24uCiAgICAgICAgZGVidWcoJ1VwZ3JhZGluZyBzb2NrZXQgY29ubmVjdGlvbiB0byBUTFMnKTsKICAgICAgICBjb25zdCBzZXJ2ZXJuYW1lID0gb3B0cy5zZXJ2ZXJuYW1lIHx8IG9wdHMuaG9zdDsKICAgICAgICByZXR1cm4gdGxzLmNvbm5lY3QoewogICAgICAgICAgLi4ub21pdChvcHRzLCAnaG9zdCcsICdwYXRoJywgJ3BvcnQnKSwKICAgICAgICAgIHNvY2tldCwKICAgICAgICAgIHNlcnZlcm5hbWU6IG5ldC5pc0lQKHNlcnZlcm5hbWUpID8gdW5kZWZpbmVkIDogc2VydmVybmFtZSwKICAgICAgICB9KTsKICAgICAgfQoKICAgICAgcmV0dXJuIHNvY2tldDsKICAgIH0KCiAgICAvLyBTb21lIG90aGVyIHN0YXR1cyBjb2RlIHRoYXQncyBub3QgMjAwLi4uIG5lZWQgdG8gcmUtcGxheSB0aGUgSFRUUAogICAgLy8gaGVhZGVyICJkYXRhIiBldmVudHMgb250byB0aGUgc29ja2V0IG9uY2UgdGhlIEhUVFAgbWFjaGluZXJ5IGlzCiAgICAvLyBhdHRhY2hlZCBzbyB0aGF0IHRoZSBub2RlIGNvcmUgYGh0dHBgIGNhbiBwYXJzZSBhbmQgaGFuZGxlIHRoZQogICAgLy8gZXJyb3Igc3RhdHVzIGNvZGUuCgogICAgLy8gQ2xvc2UgdGhlIG9yaWdpbmFsIHNvY2tldCwgYW5kIGEgbmV3ICJmYWtlIiBzb2NrZXQgaXMgcmV0dXJuZWQKICAgIC8vIGluc3RlYWQsIHNvIHRoYXQgdGhlIHByb3h5IGRvZXNuJ3QgZ2V0IHRoZSBIVFRQIHJlcXVlc3QKICAgIC8vIHdyaXR0ZW4gdG8gaXQgKHdoaWNoIG1heSBjb250YWluIGBBdXRob3JpemF0aW9uYCBoZWFkZXJzIG9yIG90aGVyCiAgICAvLyBzZW5zaXRpdmUgZGF0YSkuCiAgICAvLwogICAgLy8gU2VlOiBodHRwczovL2hhY2tlcm9uZS5jb20vcmVwb3J0cy81NDE1MDIKICAgIHNvY2tldC5kZXN0cm95KCk7CgogICAgY29uc3QgZmFrZVNvY2tldCA9IG5ldyBuZXQuU29ja2V0KHsgd3JpdGFibGU6IGZhbHNlIH0pOwogICAgZmFrZVNvY2tldC5yZWFkYWJsZSA9IHRydWU7CgogICAgLy8gTmVlZCB0byB3YWl0IGZvciB0aGUgInNvY2tldCIgZXZlbnQgdG8gcmUtcGxheSB0aGUgImRhdGEiIGV2ZW50cy4KICAgIHJlcS5vbmNlKCdzb2NrZXQnLCAocykgPT4gewogICAgICBkZWJ1ZygnUmVwbGF5aW5nIHByb3h5IGJ1ZmZlciBmb3IgZmFpbGVkIHJlcXVlc3QnKTsKICAgICAgLy8gUmVwbGF5IHRoZSAiYnVmZmVyZWQiIEJ1ZmZlciBvbnRvIHRoZSBmYWtlIGBzb2NrZXRgLCBzaW5jZSBhdAogICAgICAvLyB0aGlzIHBvaW50IHRoZSBIVFRQIG1vZHVsZSBtYWNoaW5lcnkgaGFzIGJlZW4gaG9va2VkIHVwIGZvcgogICAgICAvLyB0aGUgdXNlci4KICAgICAgcy5wdXNoKGJ1ZmZlcmVkKTsKICAgICAgcy5wdXNoKG51bGwpOwogICAgfSk7CgogICAgcmV0dXJuIGZha2VTb2NrZXQ7CiAgfQp9IEh0dHBzUHJveHlBZ2VudC5fX2luaXRTdGF0aWMoKTsKCmZ1bmN0aW9uIHJlc3VtZShzb2NrZXQpIHsKICBzb2NrZXQucmVzdW1lKCk7Cn0KCmZ1bmN0aW9uIG9taXQoCiAgb2JqLAogIC4uLmtleXMKKQoKIHsKICBjb25zdCByZXQgPSB7fQoKOwogIGxldCBrZXk7CiAgZm9yIChrZXkgaW4gb2JqKSB7CiAgICBpZiAoIWtleXMuaW5jbHVkZXMoa2V5KSkgewogICAgICByZXRba2V5XSA9IG9ialtrZXldOwogICAgfQogIH0KICByZXR1cm4gcmV0Owp9CgpmdW5jdGlvbiBfbnVsbGlzaENvYWxlc2NlKGxocywgcmhzRm4pIHsgaWYgKGxocyAhPSBudWxsKSB7IHJldHVybiBsaHM7IH0gZWxzZSB7IHJldHVybiByaHNGbigpOyB9IH0KLy8gRXN0aW1hdGVkIG1heGltdW0gc2l6ZSBmb3IgcmVhc29uYWJsZSBzdGFuZGFsb25lIGV2ZW50CmNvbnN0IEdaSVBfVEhSRVNIT0xEID0gMTAyNCAqIDMyOwoKLyoqCiAqIEdldHMgYSBzdHJlYW0gZnJvbSBhIFVpbnQ4QXJyYXkgb3Igc3RyaW5nCiAqIFJlYWRhYmxlLmZyb20gaXMgaWRlYWwgYnV0IHdhcyBhZGRlZCBpbiBub2RlLmpzIHYxMi4zLjAgYW5kIHYxMC4xNy4wCiAqLwpmdW5jdGlvbiBzdHJlYW1Gcm9tQm9keShib2R5KSB7CiAgcmV0dXJuIG5ldyBSZWFkYWJsZSh7CiAgICByZWFkKCkgewogICAgICB0aGlzLnB1c2goYm9keSk7CiAgICAgIHRoaXMucHVzaChudWxsKTsKICAgIH0sCiAgfSk7Cn0KCi8qKgogKiBDcmVhdGVzIGEgVHJhbnNwb3J0IHRoYXQgdXNlcyBuYXRpdmUgdGhlIG5hdGl2ZSAnaHR0cCcgYW5kICdodHRwcycgbW9kdWxlcyB0byBzZW5kIGV2ZW50cyB0byBTZW50cnkuCiAqLwpmdW5jdGlvbiBtYWtlTm9kZVRyYW5zcG9ydChvcHRpb25zKSB7CiAgbGV0IHVybFNlZ21lbnRzOwoKICB0cnkgewogICAgdXJsU2VnbWVudHMgPSBuZXcgVVJMKG9wdGlvbnMudXJsKTsKICB9IGNhdGNoIChlKSB7CiAgICBjb25zb2xlU2FuZGJveCgoKSA9PiB7CiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlCiAgICAgIGNvbnNvbGUud2FybigKICAgICAgICAnW0BzZW50cnkvbm9kZV06IEludmFsaWQgZHNuIG9yIHR1bm5lbCBvcHRpb24sIHdpbGwgbm90IHNlbmQgYW55IGV2ZW50cy4gVGhlIHR1bm5lbCBvcHRpb24gbXVzdCBiZSBhIGZ1bGwgVVJMIHdoZW4gdXNlZC4nLAogICAgICApOwogICAgfSk7CiAgICByZXR1cm4gY3JlYXRlVHJhbnNwb3J0KG9wdGlvbnMsICgpID0+IFByb21pc2UucmVzb2x2ZSh7fSkpOwogIH0KCiAgY29uc3QgaXNIdHRwcyA9IHVybFNlZ21lbnRzLnByb3RvY29sID09PSAnaHR0cHM6JzsKCiAgLy8gUHJveHkgcHJpb3JpdGl6YXRpb246IGh0dHAgPT4gYG9wdGlvbnMucHJveHlgIHwgYHByb2Nlc3MuZW52Lmh0dHBfcHJveHlgCiAgLy8gUHJveHkgcHJpb3JpdGl6YXRpb246IGh0dHBzID0+IGBvcHRpb25zLnByb3h5YCB8IGBwcm9jZXNzLmVudi5odHRwc19wcm94eWAgfCBgcHJvY2Vzcy5lbnYuaHR0cF9wcm94eWAKICBjb25zdCBwcm94eSA9IGFwcGx5Tm9Qcm94eU9wdGlvbigKICAgIHVybFNlZ21lbnRzLAogICAgb3B0aW9ucy5wcm94eSB8fCAoaXNIdHRwcyA/IHByb2Nlc3MuZW52Lmh0dHBzX3Byb3h5IDogdW5kZWZpbmVkKSB8fCBwcm9jZXNzLmVudi5odHRwX3Byb3h5LAogICk7CgogIGNvbnN0IG5hdGl2ZUh0dHBNb2R1bGUgPSBpc0h0dHBzID8gaHR0cHMgOiBodHRwOwogIGNvbnN0IGtlZXBBbGl2ZSA9IG9wdGlvbnMua2VlcEFsaXZlID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IG9wdGlvbnMua2VlcEFsaXZlOwoKICAvLyBUT0RPKHY3KTogRXZhbHVhdGUgaWYgd2UgY2FuIHNldCBrZWVwQWxpdmUgdG8gdHJ1ZS4gVGhpcyB3b3VsZCBpbnZvbHZlIHRlc3RpbmcgZm9yIG1lbW9yeSBsZWFrcyBpbiBvbGRlciBub2RlCiAgLy8gdmVyc2lvbnMoPj0gOCkgYXMgdGhleSBoYWQgbWVtb3J5IGxlYWtzIHdoZW4gdXNpbmcgaXQ6ICMyNTU1CiAgY29uc3QgYWdlbnQgPSBwcm94eQogICAgPyAobmV3IEh0dHBzUHJveHlBZ2VudChwcm94eSkgKQogICAgOiBuZXcgbmF0aXZlSHR0cE1vZHVsZS5BZ2VudCh7IGtlZXBBbGl2ZSwgbWF4U29ja2V0czogMzAsIHRpbWVvdXQ6IDIwMDAgfSk7CgogIGNvbnN0IHJlcXVlc3RFeGVjdXRvciA9IGNyZWF0ZVJlcXVlc3RFeGVjdXRvcihvcHRpb25zLCBfbnVsbGlzaENvYWxlc2NlKG9wdGlvbnMuaHR0cE1vZHVsZSwgKCkgPT4gKCBuYXRpdmVIdHRwTW9kdWxlKSksIGFnZW50KTsKICByZXR1cm4gY3JlYXRlVHJhbnNwb3J0KG9wdGlvbnMsIHJlcXVlc3RFeGVjdXRvcik7Cn0KCi8qKgogKiBIb25vcnMgdGhlIGBub19wcm94eWAgZW52IHZhcmlhYmxlIHdpdGggdGhlIGhpZ2hlc3QgcHJpb3JpdHkgdG8gYWxsb3cgZm9yIGhvc3RzIGV4Y2x1c2lvbi4KICoKICogQHBhcmFtIHRyYW5zcG9ydFVybCBUaGUgVVJMIHRoZSB0cmFuc3BvcnQgaW50ZW5kcyB0byBzZW5kIGV2ZW50cyB0by4KICogQHBhcmFtIHByb3h5IFRoZSBjbGllbnQgY29uZmlndXJlZCBwcm94eS4KICogQHJldHVybnMgQSBwcm94eSB0aGUgdHJhbnNwb3J0IHNob3VsZCB1c2UuCiAqLwpmdW5jdGlvbiBhcHBseU5vUHJveHlPcHRpb24odHJhbnNwb3J0VXJsU2VnbWVudHMsIHByb3h5KSB7CiAgY29uc3QgeyBub19wcm94eSB9ID0gcHJvY2Vzcy5lbnY7CgogIGNvbnN0IHVybElzRXhlbXB0RnJvbVByb3h5ID0KICAgIG5vX3Byb3h5ICYmCiAgICBub19wcm94eQogICAgICAuc3BsaXQoJywnKQogICAgICAuc29tZSgKICAgICAgICBleGVtcHRpb24gPT4gdHJhbnNwb3J0VXJsU2VnbWVudHMuaG9zdC5lbmRzV2l0aChleGVtcHRpb24pIHx8IHRyYW5zcG9ydFVybFNlZ21lbnRzLmhvc3RuYW1lLmVuZHNXaXRoKGV4ZW1wdGlvbiksCiAgICAgICk7CgogIGlmICh1cmxJc0V4ZW1wdEZyb21Qcm94eSkgewogICAgcmV0dXJuIHVuZGVmaW5lZDsKICB9IGVsc2UgewogICAgcmV0dXJuIHByb3h5OwogIH0KfQoKLyoqCiAqIENyZWF0ZXMgYSBSZXF1ZXN0RXhlY3V0b3IgdG8gYmUgdXNlZCB3aXRoIGBjcmVhdGVUcmFuc3BvcnRgLgogKi8KZnVuY3Rpb24gY3JlYXRlUmVxdWVzdEV4ZWN1dG9yKAogIG9wdGlvbnMsCiAgaHR0cE1vZHVsZSwKICBhZ2VudCwKKSB7CiAgY29uc3QgeyBob3N0bmFtZSwgcGF0aG5hbWUsIHBvcnQsIHByb3RvY29sLCBzZWFyY2ggfSA9IG5ldyBVUkwob3B0aW9ucy51cmwpOwogIHJldHVybiBmdW5jdGlvbiBtYWtlUmVxdWVzdChyZXF1ZXN0KSB7CiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gewogICAgICBsZXQgYm9keSA9IHN0cmVhbUZyb21Cb2R5KHJlcXVlc3QuYm9keSk7CgogICAgICBjb25zdCBoZWFkZXJzID0geyAuLi5vcHRpb25zLmhlYWRlcnMgfTsKCiAgICAgIGlmIChyZXF1ZXN0LmJvZHkubGVuZ3RoID4gR1pJUF9USFJFU0hPTEQpIHsKICAgICAgICBoZWFkZXJzWydjb250ZW50LWVuY29kaW5nJ10gPSAnZ3ppcCc7CiAgICAgICAgYm9keSA9IGJvZHkucGlwZShjcmVhdGVHemlwKCkpOwogICAgICB9CgogICAgICBjb25zdCByZXEgPSBodHRwTW9kdWxlLnJlcXVlc3QoCiAgICAgICAgewogICAgICAgICAgbWV0aG9kOiAnUE9TVCcsCiAgICAgICAgICBhZ2VudCwKICAgICAgICAgIGhlYWRlcnMsCiAgICAgICAgICBob3N0bmFtZSwKICAgICAgICAgIHBhdGg6IGAke3BhdGhuYW1lfSR7c2VhcmNofWAsCiAgICAgICAgICBwb3J0LAogICAgICAgICAgcHJvdG9jb2wsCiAgICAgICAgICBjYTogb3B0aW9ucy5jYUNlcnRzLAogICAgICAgIH0sCiAgICAgICAgcmVzID0+IHsKICAgICAgICAgIHJlcy5vbignZGF0YScsICgpID0+IHsKICAgICAgICAgICAgLy8gRHJhaW4gc29ja2V0CiAgICAgICAgICB9KTsKCiAgICAgICAgICByZXMub24oJ2VuZCcsICgpID0+IHsKICAgICAgICAgICAgLy8gRHJhaW4gc29ja2V0CiAgICAgICAgICB9KTsKCiAgICAgICAgICByZXMuc2V0RW5jb2RpbmcoJ3V0ZjgnKTsKCiAgICAgICAgICAvLyAiS2V5LXZhbHVlIHBhaXJzIG9mIGhlYWRlciBuYW1lcyBhbmQgdmFsdWVzLiBIZWFkZXIgbmFtZXMgYXJlIGxvd2VyLWNhc2VkLiIKICAgICAgICAgIC8vIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvaHR0cC5odG1sI2h0dHBfbWVzc2FnZV9oZWFkZXJzCiAgICAgICAgICBjb25zdCByZXRyeUFmdGVySGVhZGVyID0gX251bGxpc2hDb2FsZXNjZShyZXMuaGVhZGVyc1sncmV0cnktYWZ0ZXInXSwgKCkgPT4gKCBudWxsKSk7CiAgICAgICAgICBjb25zdCByYXRlTGltaXRzSGVhZGVyID0gX251bGxpc2hDb2FsZXNjZShyZXMuaGVhZGVyc1sneC1zZW50cnktcmF0ZS1saW1pdHMnXSwgKCkgPT4gKCBudWxsKSk7CgogICAgICAgICAgcmVzb2x2ZSh7CiAgICAgICAgICAgIHN0YXR1c0NvZGU6IHJlcy5zdGF0dXNDb2RlLAogICAgICAgICAgICBoZWFkZXJzOiB7CiAgICAgICAgICAgICAgJ3JldHJ5LWFmdGVyJzogcmV0cnlBZnRlckhlYWRlciwKICAgICAgICAgICAgICAneC1zZW50cnktcmF0ZS1saW1pdHMnOiBBcnJheS5pc0FycmF5KHJhdGVMaW1pdHNIZWFkZXIpID8gcmF0ZUxpbWl0c0hlYWRlclswXSA6IHJhdGVMaW1pdHNIZWFkZXIsCiAgICAgICAgICAgIH0sCiAgICAgICAgICB9KTsKICAgICAgICB9LAogICAgICApOwoKICAgICAgcmVxLm9uKCdlcnJvcicsIHJlamVjdCk7CiAgICAgIGJvZHkucGlwZShyZXEpOwogICAgfSk7CiAgfTsKfQoKZnVuY3Rpb24gX29wdGlvbmFsQ2hhaW4ob3BzKSB7IGxldCBsYXN0QWNjZXNzTEhTID0gdW5kZWZpbmVkOyBsZXQgdmFsdWUgPSBvcHNbMF07IGxldCBpID0gMTsgd2hpbGUgKGkgPCBvcHMubGVuZ3RoKSB7IGNvbnN0IG9wID0gb3BzW2ldOyBjb25zdCBmbiA9IG9wc1tpICsgMV07IGkgKz0gMjsgaWYgKChvcCA9PT0gJ29wdGlvbmFsQWNjZXNzJyB8fCBvcCA9PT0gJ29wdGlvbmFsQ2FsbCcpICYmIHZhbHVlID09IG51bGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSBpZiAob3AgPT09ICdhY2Nlc3MnIHx8IG9wID09PSAnb3B0aW9uYWxBY2Nlc3MnKSB7IGxhc3RBY2Nlc3NMSFMgPSB2YWx1ZTsgdmFsdWUgPSBmbih2YWx1ZSk7IH0gZWxzZSBpZiAob3AgPT09ICdjYWxsJyB8fCBvcCA9PT0gJ29wdGlvbmFsQ2FsbCcpIHsgdmFsdWUgPSBmbigoLi4uYXJncykgPT4gdmFsdWUuY2FsbChsYXN0QWNjZXNzTEhTLCAuLi5hcmdzKSk7IGxhc3RBY2Nlc3NMSFMgPSB1bmRlZmluZWQ7IH0gfSByZXR1cm4gdmFsdWU7IH0KY29uc3Qgb3B0aW9ucyA9IHdvcmtlckRhdGE7CmxldCBzZXNzaW9uOwpsZXQgaGFzU2VudEFuckV2ZW50ID0gZmFsc2U7CgpmdW5jdGlvbiBsb2cobXNnKSB7CiAgaWYgKG9wdGlvbnMuZGVidWcpIHsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlCiAgICBjb25zb2xlLmxvZyhgW0FOUiBXb3JrZXJdICR7bXNnfWApOwogIH0KfQoKY29uc3QgdXJsID0gZ2V0RW52ZWxvcGVFbmRwb2ludFdpdGhVcmxFbmNvZGVkQXV0aChvcHRpb25zLmRzbik7CmNvbnN0IHRyYW5zcG9ydCA9IG1ha2VOb2RlVHJhbnNwb3J0KHsKICB1cmwsCiAgcmVjb3JkRHJvcHBlZEV2ZW50OiAoKSA9PiB7CiAgICAvLwogIH0sCn0pOwoKYXN5bmMgZnVuY3Rpb24gc2VuZEFibm9ybWFsU2Vzc2lvbigpIHsKICAvLyBvZiB3ZSBoYXZlIGFuIGV4aXN0aW5nIHNlc3Npb24gcGFzc2VkIGZyb20gdGhlIG1haW4gdGhyZWFkLCBzZW5kIGl0IGFzIGFibm9ybWFsCiAgaWYgKHNlc3Npb24pIHsKICAgIGxvZygnU2VuZGluZyBhYm5vcm1hbCBzZXNzaW9uJyk7CiAgICB1cGRhdGVTZXNzaW9uKHNlc3Npb24sIHsgc3RhdHVzOiAnYWJub3JtYWwnLCBhYm5vcm1hbF9tZWNoYW5pc206ICdhbnJfZm9yZWdyb3VuZCcgfSk7CgogICAgY29uc3QgZW52ZWxvcGUgPSBjcmVhdGVTZXNzaW9uRW52ZWxvcGUoc2Vzc2lvbiwgb3B0aW9ucy5kc24sIG9wdGlvbnMuc2RrTWV0YWRhdGEpOwogICAgLy8gTG9nIHRoZSBlbnZlbG9wZSBzbyB0byBhaWQgaW4gdGVzdGluZwogICAgbG9nKEpTT04uc3RyaW5naWZ5KGVudmVsb3BlKSk7CgogICAgYXdhaXQgdHJhbnNwb3J0LnNlbmQoZW52ZWxvcGUpOwoKICAgIHRyeSB7CiAgICAgIC8vIE5vdGlmeSB0aGUgbWFpbiBwcm9jZXNzIHRoYXQgdGhlIHNlc3Npb24gaGFzIGVuZGVkIHNvIHRoZSBzZXNzaW9uIGNhbiBiZSBjbGVhcmVkIGZyb20gdGhlIHNjb3BlCiAgICAgIF9vcHRpb25hbENoYWluKFtwYXJlbnRQb3J0LCAnb3B0aW9uYWxBY2Nlc3MnLCBfMiA9PiBfMi5wb3N0TWVzc2FnZSwgJ2NhbGwnLCBfMyA9PiBfMygnc2Vzc2lvbi1lbmRlZCcpXSk7CiAgICB9IGNhdGNoIChfKSB7CiAgICAgIC8vIGlnbm9yZQogICAgfQogIH0KfQoKbG9nKCdTdGFydGVkJyk7CgpmdW5jdGlvbiBwcmVwYXJlU3RhY2tGcmFtZXMoc3RhY2tGcmFtZXMpIHsKICBpZiAoIXN0YWNrRnJhbWVzKSB7CiAgICByZXR1cm4gdW5kZWZpbmVkOwogIH0KCiAgLy8gU3RyaXAgU2VudHJ5IGZyYW1lcyBhbmQgcmV2ZXJzZSB0aGUgc3RhY2sgZnJhbWVzIHNvIHRoZXkgYXJlIGluIHRoZSBjb3JyZWN0IG9yZGVyCiAgY29uc3Qgc3RyaXBwZWRGcmFtZXMgPSBzdHJpcFNlbnRyeUZyYW1lc0FuZFJldmVyc2Uoc3RhY2tGcmFtZXMpOwoKICAvLyBJZiB3ZSBoYXZlIGFuIGFwcCByb290IHBhdGgsIHJld3JpdGUgdGhlIGZpbGVuYW1lcyB0byBiZSByZWxhdGl2ZSB0byB0aGUgYXBwIHJvb3QKICBpZiAob3B0aW9ucy5hcHBSb290UGF0aCkgewogICAgZm9yIChjb25zdCBmcmFtZSBvZiBzdHJpcHBlZEZyYW1lcykgewogICAgICBpZiAoIWZyYW1lLmZpbGVuYW1lKSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KCiAgICAgIGZyYW1lLmZpbGVuYW1lID0gbm9ybWFsaXplVXJsVG9CYXNlKGZyYW1lLmZpbGVuYW1lLCBvcHRpb25zLmFwcFJvb3RQYXRoKTsKICAgIH0KICB9CgogIHJldHVybiBzdHJpcHBlZEZyYW1lczsKfQoKZnVuY3Rpb24gYXBwbHlTY29wZVRvRXZlbnQoZXZlbnQsIHNjb3BlKSB7CiAgYXBwbHlTY29wZURhdGFUb0V2ZW50KGV2ZW50LCBzY29wZSk7CgogIGlmICghX29wdGlvbmFsQ2hhaW4oW2V2ZW50LCAnYWNjZXNzJywgXzQgPT4gXzQuY29udGV4dHMsICdvcHRpb25hbEFjY2VzcycsIF81ID0+IF81LnRyYWNlXSkpIHsKICAgIGNvbnN0IHsgdHJhY2VJZCwgc3BhbklkLCBwYXJlbnRTcGFuSWQgfSA9IHNjb3BlLnByb3BhZ2F0aW9uQ29udGV4dDsKICAgIGV2ZW50LmNvbnRleHRzID0gewogICAgICB0cmFjZTogewogICAgICAgIHRyYWNlX2lkOiB0cmFjZUlkLAogICAgICAgIHNwYW5faWQ6IHNwYW5JZCwKICAgICAgICBwYXJlbnRfc3Bhbl9pZDogcGFyZW50U3BhbklkLAogICAgICB9LAogICAgICAuLi5ldmVudC5jb250ZXh0cywKICAgIH07CiAgfQp9Cgphc3luYyBmdW5jdGlvbiBzZW5kQW5yRXZlbnQoZnJhbWVzLCBzY29wZSkgewogIGlmIChoYXNTZW50QW5yRXZlbnQpIHsKICAgIHJldHVybjsKICB9CgogIGhhc1NlbnRBbnJFdmVudCA9IHRydWU7CgogIGF3YWl0IHNlbmRBYm5vcm1hbFNlc3Npb24oKTsKCiAgbG9nKCdTZW5kaW5nIGV2ZW50Jyk7CgogIGNvbnN0IGV2ZW50ID0gewogICAgZXZlbnRfaWQ6IHV1aWQ0KCksCiAgICBjb250ZXh0czogb3B0aW9ucy5jb250ZXh0cywKICAgIHJlbGVhc2U6IG9wdGlvbnMucmVsZWFzZSwKICAgIGVudmlyb25tZW50OiBvcHRpb25zLmVudmlyb25tZW50LAogICAgZGlzdDogb3B0aW9ucy5kaXN0LAogICAgcGxhdGZvcm06ICdub2RlJywKICAgIGxldmVsOiAnZXJyb3InLAogICAgZXhjZXB0aW9uOiB7CiAgICAgIHZhbHVlczogWwogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICdBcHBsaWNhdGlvbk5vdFJlc3BvbmRpbmcnLAogICAgICAgICAgdmFsdWU6IGBBcHBsaWNhdGlvbiBOb3QgUmVzcG9uZGluZyBmb3IgYXQgbGVhc3QgJHtvcHRpb25zLmFuclRocmVzaG9sZH0gbXNgLAogICAgICAgICAgc3RhY2t0cmFjZTogeyBmcmFtZXM6IHByZXBhcmVTdGFja0ZyYW1lcyhmcmFtZXMpIH0sCiAgICAgICAgICAvLyBUaGlzIGVuc3VyZXMgdGhlIFVJIGRvZXNuJ3Qgc2F5ICdDcmFzaGVkIGluJyBmb3IgdGhlIHN0YWNrIHRyYWNlCiAgICAgICAgICBtZWNoYW5pc206IHsgdHlwZTogJ0FOUicgfSwKICAgICAgICB9LAogICAgICBdLAogICAgfSwKICAgIHRhZ3M6IG9wdGlvbnMuc3RhdGljVGFncywKICB9OwoKICBpZiAoc2NvcGUpIHsKICAgIGFwcGx5U2NvcGVUb0V2ZW50KGV2ZW50LCBzY29wZSk7CiAgfQoKICBjb25zdCBlbnZlbG9wZSA9IGNyZWF0ZUV2ZW50RW52ZWxvcGUoZXZlbnQsIG9wdGlvbnMuZHNuLCBvcHRpb25zLnNka01ldGFkYXRhKTsKICAvLyBMb2cgdGhlIGVudmVsb3BlIHRvIGFpZCBpbiB0ZXN0aW5nCiAgbG9nKEpTT04uc3RyaW5naWZ5KGVudmVsb3BlKSk7CgogIGF3YWl0IHRyYW5zcG9ydC5zZW5kKGVudmVsb3BlKTsKICBhd2FpdCB0cmFuc3BvcnQuZmx1c2goMjAwMCk7CgogIC8vIERlbGF5IGZvciA1IHNlY29uZHMgc28gdGhhdCBzdGRpbyBjYW4gZmx1c2ggaW4gdGhlIG1haW4gZXZlbnQgbG9vcCBldmVyIHJlc3RhcnRzLgogIC8vIFRoaXMgaXMgbWFpbmx5IGZvciB0aGUgYmVuZWZpdCBvZiBsb2dnaW5nL2RlYnVnZ2luZyBpc3N1ZXMuCiAgc2V0VGltZW91dCgoKSA9PiB7CiAgICBwcm9jZXNzLmV4aXQoMCk7CiAgfSwgNTAwMCk7Cn0KCmxldCBkZWJ1Z2dlclBhdXNlOwoKaWYgKG9wdGlvbnMuY2FwdHVyZVN0YWNrVHJhY2UpIHsKICBsb2coJ0Nvbm5lY3RpbmcgdG8gZGVidWdnZXInKTsKCiAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKCkgOwogIHNlc3Npb24uY29ubmVjdFRvTWFpblRocmVhZCgpOwoKICBsb2coJ0Nvbm5lY3RlZCB0byBkZWJ1Z2dlcicpOwoKICAvLyBDb2xsZWN0IHNjcmlwdElkIC0+IHVybCBtYXAgc28gd2UgY2FuIGxvb2sgdXAgdGhlIGZpbGVuYW1lcyBsYXRlcgogIGNvbnN0IHNjcmlwdHMgPSBuZXcgTWFwKCk7CgogIHNlc3Npb24ub24oJ0RlYnVnZ2VyLnNjcmlwdFBhcnNlZCcsIGV2ZW50ID0+IHsKICAgIHNjcmlwdHMuc2V0KGV2ZW50LnBhcmFtcy5zY3JpcHRJZCwgZXZlbnQucGFyYW1zLnVybCk7CiAgfSk7CgogIHNlc3Npb24ub24oJ0RlYnVnZ2VyLnBhdXNlZCcsIGV2ZW50ID0+IHsKICAgIGlmIChldmVudC5wYXJhbXMucmVhc29uICE9PSAnb3RoZXInKSB7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICB0cnkgewogICAgICBsb2coJ0RlYnVnZ2VyIHBhdXNlZCcpOwoKICAgICAgLy8gY29weSB0aGUgZnJhbWVzCiAgICAgIGNvbnN0IGNhbGxGcmFtZXMgPSBbLi4uZXZlbnQucGFyYW1zLmNhbGxGcmFtZXNdOwoKICAgICAgY29uc3QgZ2V0TW9kdWxlTmFtZSA9IG9wdGlvbnMuYXBwUm9vdFBhdGggPyBjcmVhdGVHZXRNb2R1bGVGcm9tRmlsZW5hbWUob3B0aW9ucy5hcHBSb290UGF0aCkgOiAoKSA9PiB1bmRlZmluZWQ7CiAgICAgIGNvbnN0IHN0YWNrRnJhbWVzID0gY2FsbEZyYW1lcy5tYXAoZnJhbWUgPT4KICAgICAgICBjYWxsRnJhbWVUb1N0YWNrRnJhbWUoZnJhbWUsIHNjcmlwdHMuZ2V0KGZyYW1lLmxvY2F0aW9uLnNjcmlwdElkKSwgZ2V0TW9kdWxlTmFtZSksCiAgICAgICk7CgogICAgICAvLyBFdmFsdWF0ZSBhIHNjcmlwdCBpbiB0aGUgY3VycmVudGx5IHBhdXNlZCBjb250ZXh0CiAgICAgIHNlc3Npb24ucG9zdCgKICAgICAgICAnUnVudGltZS5ldmFsdWF0ZScsCiAgICAgICAgewogICAgICAgICAgLy8gR3JhYiB0aGUgdHJhY2UgY29udGV4dCBmcm9tIHRoZSBjdXJyZW50IHNjb3BlCiAgICAgICAgICBleHByZXNzaW9uOiAnZ2xvYmFsLl9fU0VOVFJZX0dFVF9TQ09QRVNfXygpOycsCiAgICAgICAgICAvLyBEb24ndCByZS10cmlnZ2VyIHRoZSBkZWJ1Z2dlciBpZiB0aGlzIGNhdXNlcyBhbiBlcnJvcgogICAgICAgICAgc2lsZW50OiB0cnVlLAogICAgICAgICAgLy8gU2VyaWFsaXplIHRoZSByZXN1bHQgdG8ganNvbiBvdGhlcndpc2Ugb25seSBwcmltaXRpdmVzIGFyZSBzdXBwb3J0ZWQKICAgICAgICAgIHJldHVybkJ5VmFsdWU6IHRydWUsCiAgICAgICAgfSwKICAgICAgICAoZXJyLCBwYXJhbSkgPT4gewogICAgICAgICAgaWYgKGVycikgewogICAgICAgICAgICBsb2coYEVycm9yIGV4ZWN1dGluZyBzY3JpcHQ6ICcke2Vyci5tZXNzYWdlfSdgKTsKICAgICAgICAgIH0KCiAgICAgICAgICBjb25zdCBzY29wZXMgPSBwYXJhbSAmJiBwYXJhbS5yZXN1bHQgPyAocGFyYW0ucmVzdWx0LnZhbHVlICkgOiB1bmRlZmluZWQ7CgogICAgICAgICAgc2Vzc2lvbi5wb3N0KCdEZWJ1Z2dlci5yZXN1bWUnKTsKICAgICAgICAgIHNlc3Npb24ucG9zdCgnRGVidWdnZXIuZGlzYWJsZScpOwoKICAgICAgICAgIHNlbmRBbnJFdmVudChzdGFja0ZyYW1lcywgc2NvcGVzKS50aGVuKG51bGwsICgpID0+IHsKICAgICAgICAgICAgbG9nKCdTZW5kaW5nIEFOUiBldmVudCBmYWlsZWQuJyk7CiAgICAgICAgICB9KTsKICAgICAgICB9LAogICAgICApOwogICAgfSBjYXRjaCAoZSkgewogICAgICBzZXNzaW9uLnBvc3QoJ0RlYnVnZ2VyLnJlc3VtZScpOwogICAgICBzZXNzaW9uLnBvc3QoJ0RlYnVnZ2VyLmRpc2FibGUnKTsKICAgICAgdGhyb3cgZTsKICAgIH0KICB9KTsKCiAgZGVidWdnZXJQYXVzZSA9ICgpID0+IHsKICAgIHRyeSB7CiAgICAgIHNlc3Npb24ucG9zdCgnRGVidWdnZXIuZW5hYmxlJywgKCkgPT4gewogICAgICAgIHNlc3Npb24ucG9zdCgnRGVidWdnZXIucGF1c2UnKTsKICAgICAgfSk7CiAgICB9IGNhdGNoIChfKSB7CiAgICAgIC8vCiAgICB9CiAgfTsKfQoKZnVuY3Rpb24gY3JlYXRlSHJUaW1lcigpIHsKICAvLyBUT0RPICh2OCk6IFdlIGNhbiB1c2UgcHJvY2Vzcy5ocnRpbWUuYmlnaW50KCkgYWZ0ZXIgd2UgZHJvcCBub2RlIHY4CiAgbGV0IGxhc3RQb2xsID0gcHJvY2Vzcy5ocnRpbWUoKTsKCiAgcmV0dXJuIHsKICAgIGdldFRpbWVNczogKCkgPT4gewogICAgICBjb25zdCBbc2Vjb25kcywgbmFub1NlY29uZHNdID0gcHJvY2Vzcy5ocnRpbWUobGFzdFBvbGwpOwogICAgICByZXR1cm4gTWF0aC5mbG9vcihzZWNvbmRzICogMWUzICsgbmFub1NlY29uZHMgLyAxZTYpOwogICAgfSwKICAgIHJlc2V0OiAoKSA9PiB7CiAgICAgIGxhc3RQb2xsID0gcHJvY2Vzcy5ocnRpbWUoKTsKICAgIH0sCiAgfTsKfQoKZnVuY3Rpb24gd2F0Y2hkb2dUaW1lb3V0KCkgewogIGxvZygnV2F0Y2hkb2cgdGltZW91dCcpOwoKICBpZiAoZGVidWdnZXJQYXVzZSkgewogICAgbG9nKCdQYXVzaW5nIGRlYnVnZ2VyIHRvIGNhcHR1cmUgc3RhY2sgdHJhY2UnKTsKICAgIGRlYnVnZ2VyUGF1c2UoKTsKICB9IGVsc2UgewogICAgbG9nKCdDYXB0dXJpbmcgZXZlbnQgd2l0aG91dCBhIHN0YWNrIHRyYWNlJyk7CiAgICBzZW5kQW5yRXZlbnQoKS50aGVuKG51bGwsICgpID0+IHsKICAgICAgbG9nKCdTZW5kaW5nIEFOUiBldmVudCBmYWlsZWQgb24gd2F0Y2hkb2cgdGltZW91dC4nKTsKICAgIH0pOwogIH0KfQoKY29uc3QgeyBwb2xsIH0gPSB3YXRjaGRvZ1RpbWVyKGNyZWF0ZUhyVGltZXIsIG9wdGlvbnMucG9sbEludGVydmFsLCBvcHRpb25zLmFuclRocmVzaG9sZCwgd2F0Y2hkb2dUaW1lb3V0KTsKCl9vcHRpb25hbENoYWluKFtwYXJlbnRQb3J0LCAnb3B0aW9uYWxBY2Nlc3MnLCBfNiA9PiBfNi5vbiwgJ2NhbGwnLCBfNyA9PiBfNygnbWVzc2FnZScsIChtc2cpID0+IHsKICBpZiAobXNnLnNlc3Npb24pIHsKICAgIHNlc3Npb24gPSBtYWtlU2Vzc2lvbihtc2cuc2Vzc2lvbik7CiAgfQoKICBwb2xsKCk7Cn0pXSk7'
})
var $b = _((u$1, T$1) => {
var { _optionalChain: q44, _optionalChainDelete: y$1 } = X0()
Object.defineProperty(u$1, '__esModule', { value: !0 })
var U44 = A1('url'),
cV = Y4(),
Lb = X0(),
E21 = nF(),
f44 = $$1(),
R44 = 50,
E44 = 5000
function v21(I, ...G) {
Lb.logger.log(`[ANR] ${I}`, ...G)
}
function v44() {
return Lb.GLOBAL_OBJ
}
function M44() {
let I = cV.getGlobalScope().getScopeData()
return (
cV.mergeScopeData(I, cV.getIsolationScope().getScopeData()),
cV.mergeScopeData(I, cV.getCurrentScope().getScopeData()),
(I.attachments = []),
(I.eventProcessors = []),
I
)
}
function S44() {
return Lb.dynamicRequire(T$1, 'worker_threads')
}
async function L44(I) {
let G = { message: 'ANR' },
Z = {}
for (let d of I.getEventProcessors()) {
if (G === null) break
G = await d(G, Z)
}
return q44([G, 'optionalAccess', (d) => d.contexts]) || {}
}
var P$1 = 'Anr',
$44 = (I = {}) => {
if (
E21.NODE_VERSION.major < 16 ||
(E21.NODE_VERSION.major === 16 && E21.NODE_VERSION.minor < 17)
)
throw new Error('ANR detection requires Node 16.17.0 or later')
let G,
Z,
d = v44()
return (
(d.__SENTRY_GET_SCOPES__ = M44),
{
name: P$1,
setupOnce() {},
startWorker: () => {
if (G) return
if (Z) G = P44(Z, I)
},
stopWorker: () => {
if (G)
G.then((W) => {
W(), (G = void 0)
})
},
setup(W) {
;(Z = W), setImmediate(() => this.startWorker())
},
}
)
},
O$1 = cV.defineIntegration($44),
y44 = cV.convertIntegrationFnToClass(P$1, O$1)
async function P44(I, G) {
let Z = I.getDsn()
if (!Z) return () => {}
let d = await L44(I)
y$1([d, 'access', (X) => X.app, 'optionalAccess', (X) => delete X.app_memory]),
y$1([d, 'access', (X) => X.device, 'optionalAccess', (X) => delete X.free_memory])
let W = I.getOptions(),
w = I.getSdkMetadata() || {}
if (w.sdk) w.sdk.integrations = W.integrations.map((X) => X.name)
let B = {
debug: Lb.logger.isEnabled(),
dsn: Z,
environment: W.environment || 'production',
release: W.release,
dist: W.dist,
sdkMetadata: w,
appRootPath: G.appRootPath,
pollInterval: G.pollInterval || R44,
anrThreshold: G.anrThreshold || E44,
captureStackTrace: !!G.captureStackTrace,
staticTags: G.staticTags || {},
contexts: d,
}
if (B.captureStackTrace) {
let X = A1('inspector')
if (!X.url()) X.open(0)
}
let { Worker: C } = S44(),
V = new C(new U44.URL(`data:application/javascript;base64,${f44.base64WorkerScript}`), {
workerData: B,
})
process.on('exit', () => {
V.terminate()
})
let A = setInterval(() => {
try {
let X = cV.getCurrentScope().getSession(),
Y = X ? { ...X, toJSON: void 0 } : void 0
V.postMessage({ session: Y })
} catch (X) {}
}, B.pollInterval)
return (
A.unref(),
V.on('message', (X) => {
if (X === 'session-ended')
v21('ANR event sent from ANR worker. Clearing session in this thread.'),
cV.getCurrentScope().setSession(void 0)
}),
V.once('error', (X) => {
clearInterval(A), v21('ANR worker error', X)
}),
V.once('exit', (X) => {
clearInterval(A), v21('ANR worker exit', X)
}),
V.unref(),
() => {
V.terminate(), clearInterval(A)
}
)
}
u$1.Anr = y44
u$1.anrIntegration = O$1
})
var b$1 = _((m$1) => {
Object.defineProperty(m$1, '__esModule', { value: !0 })
var T44 = Y4(),
m44 = $b()
function b44(I) {
let G = T44.getClient()
return new m44.Anr(I).setup(G), Promise.resolve()
}
m$1.enableAnrDetection = b44
})
var M21 = _((k$1) => {
var { _optionalChain: l$1 } = X0()
Object.defineProperty(k$1, '__esModule', { value: !0 })
var wz = Y4(),
j$1 = X0()
function j44(I = {}) {
return function ({ path: G, type: Z, next: d, rawInput: W }) {
let w = l$1([
wz.getClient,
'call',
(A) => A(),
'optionalAccess',
(A) => A.getOptions,
'call',
(A) => A(),
]),
B = wz.getCurrentScope().getTransaction()
if (B) {
B.updateName(`trpc/${G}`),
B.setAttribute(wz.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, 'route'),
(B.op = 'rpc.server')
let A = { procedure_type: Z }
if (
I.attachRpcInput !== void 0
? I.attachRpcInput
: l$1([w, 'optionalAccess', (X) => X.sendDefaultPii])
)
A.input = j$1.normalize(W)
B.setContext('trpc', A)
}
function C(A) {
if (!A.ok)
wz.captureException(A.error, {
mechanism: { handled: !1, data: { function: 'trpcMiddleware' } },
})
}
let V
try {
V = d()
} catch (A) {
throw (
(wz.captureException(A, {
mechanism: { handled: !1, data: { function: 'trpcMiddleware' } },
}),
A)
)
}
if (j$1.isThenable(V))
Promise.resolve(V).then(
(A) => {
C(A)
},
(A) => {
wz.captureException(A, {
mechanism: { handled: !1, data: { function: 'trpcMiddleware' } },
})
},
)
else C(V)
return V
}
}
k$1.trpcMiddleware = j44
})
var c$1 = _((x$1) => {
Object.defineProperty(x$1, '__esModule', { value: !0 })
var h$1 = X0()
function h44(I, G) {
return h$1.extractRequestData(I, { include: G })
}
function x44(I, G, Z = {}) {
return h$1.addRequestDataToEvent(I, G, { include: Z })
}
x$1.extractRequestData = h44
x$1.parseRequest = x44
})
var n$1 = _((i$1) => {
var { _optionalChain: yb } = X0()
Object.defineProperty(i$1, '__esModule', { value: !0 })
var X8 = Y4(),
Bz = X0(),
i44 = lv(),
Pb = f21(),
n44 = M21(),
p$1 = c$1()
function a44() {
return function I(G, Z, d) {
let W = yb([
X8.getClient,
'call',
(X) => X(),
'optionalAccess',
(X) => X.getOptions,
'call',
(X) => X(),
])
if (
!W ||
W.instrumenter !== 'sentry' ||
yb([
G,
'access',
(X) => X.method,
'optionalAccess',
(X) => X.toUpperCase,
'call',
(X) => X(),
]) === 'OPTIONS' ||
yb([
G,
'access',
(X) => X.method,
'optionalAccess',
(X) => X.toUpperCase,
'call',
(X) => X(),
]) === 'HEAD'
)
return d()
let w =
G.headers && Bz.isString(G.headers['sentry-trace']) ? G.headers['sentry-trace'] : void 0,
B = yb([G, 'access', (X) => X.headers, 'optionalAccess', (X) => X.baggage])
if (!X8.hasTracingEnabled(W)) return d()
let [C, V] = Bz.extractPathForTransaction(G, { path: !0, method: !0 }),
A = X8.continueTrace({ sentryTrace: w, baggage: B }, (X) =>
X8.startTransaction(
{
name: C,
op: 'http.server',
origin: 'auto.http.node.tracingHandler',
...X,
data: { [X8.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: V },
metadata: { ...X.metadata, request: G },
},
{ request: Bz.extractRequestData(G) },
),
)
X8.getCurrentScope().setSpan(A),
(Z.__sentry_transaction = A),
Z.once('finish', () => {
setImmediate(() => {
Bz.addRequestDataToTransaction(A, G), X8.setHttpStatus(A, Z.statusCode), A.end()
})
}),
d()
}
}
function r44(I = {}) {
let G
if ('include' in I) G = { include: I.include }
else {
let { ip: Z, request: d, transaction: W, user: w } = I
if (Z || d || W || w)
G = { include: Bz.dropUndefinedKeys({ ip: Z, request: d, transaction: W, user: w }) }
}
return G
}
function s44(I) {
let G = r44(I),
Z = X8.getClient()
if (Z && Pb.isAutoSessionTrackingEnabled(Z)) {
Z.initSessionFlusher()
let d = X8.getCurrentScope()
if (d.getSession()) d.setSession()
}
return function d(W, w, B) {
if (I && I.flushTimeout && I.flushTimeout > 0) {
let C = w.end
w.end = function (V, A, X) {
X8.flush(I.flushTimeout)
.then(() => {
C.call(this, V, A, X)
})
.then(null, (Y) => {
i44.DEBUG_BUILD && Bz.logger.error(Y), C.call(this, V, A, X)
})
}
}
X8.runWithAsyncContext(() => {
let C = X8.getCurrentScope()
C.setSDKProcessingMetadata({ request: W, requestDataOptionsFromExpressHandler: G })
let V = X8.getClient()
if (Pb.isAutoSessionTrackingEnabled(V)) C.setRequestSession({ status: 'ok' })
w.once('finish', () => {
let A = X8.getClient()
if (Pb.isAutoSessionTrackingEnabled(A))
setImmediate(() => {
if (A && A._captureRequestSession) A._captureRequestSession()
})
}),
B()
})
}
}
function o44(I) {
let G = I.status || I.statusCode || I.status_code || (I.output && I.output.statusCode)
return G ? parseInt(G, 10) : 500
}
function e44(I) {
return o44(I) >= 500
}
function t44(I) {
return function G(Z, d, W, w) {
if (((I && I.shouldHandleError) || e44)(Z)) {
X8.withScope((C) => {
C.setSDKProcessingMetadata({ request: d })
let V = W.__sentry_transaction
if (V && !X8.getActiveSpan()) C.setSpan(V)
let A = X8.getClient()
if (A && Pb.isAutoSessionTrackingEnabled(A)) {
if (A._sessionFlusher !== void 0) {
let H = C.getRequestSession()
if (H && H.status !== void 0) H.status = 'crashed'
}
}
let X = X8.captureException(Z, { mechanism: { type: 'middleware', handled: !1 } })
;(W.sentry = X), w(Z)
})
return
}
w(Z)
}
}
var I54 = n44.trpcMiddleware
i$1.extractRequestData = p$1.extractRequestData
i$1.parseRequest = p$1.parseRequest
i$1.errorHandler = t44
i$1.requestHandler = s44
i$1.tracingHandler = a44
i$1.trpcMiddleware = I54
})
var S21 = _((Iy1) => {
Object.defineProperty(Iy1, '__esModule', { value: !0 })
var eI = Y4(),
r$1 = X0()
function a$1(I) {
return I && I.statusCode !== void 0
}
function C54(I) {
return I && I.error !== void 0
}
function V54(I) {
eI.captureException(I, {
mechanism: { type: 'hapi', handled: !1, data: { function: 'hapiErrorPlugin' } },
})
}
var s$1 = {
name: 'SentryHapiErrorPlugin',
version: eI.SDK_VERSION,
register: async function (I) {
I.events.on('request', (Z, d) => {
let W = eI.getActiveTransaction()
if (C54(d)) V54(d.error)
if (W) W.setStatus('internal_error'), W.end()
})
},
},
o$1 = {
name: 'SentryHapiTracingPlugin',
version: eI.SDK_VERSION,
register: async function (I) {
let G = I
G.ext('onPreHandler', (Z, d) => {
let W = eI.continueTrace(
{
sentryTrace: Z.headers['sentry-trace'] || void 0,
baggage: Z.headers.baggage || void 0,
},
(w) => {
return eI.startTransaction({
...w,
op: 'hapi.request',
name: Z.route.path,
description: `${Z.route.method} ${Z.path}`,
})
},
)
return eI.getCurrentScope().setSpan(W), d.continue
}),
G.ext('onPreResponse', (Z, d) => {
let W = eI.getActiveTransaction()
if (Z.response && a$1(Z.response) && W) {
let w = Z.response
w.header('sentry-trace', eI.spanToTraceHeader(W))
let B = r$1.dynamicSamplingContextToSentryBaggageHeader(
eI.getDynamicSamplingContextFromSpan(W),
)
if (B) w.header('baggage', B)
}
return d.continue
}),
G.ext('onPostHandler', (Z, d) => {
let W = eI.getActiveTransaction()
if (W) {
if (Z.response && a$1(Z.response)) eI.setHttpStatus(W, Z.response.statusCode)
W.end()
}
return d.continue
})
},
},
e$1 = 'Hapi',
A54 = (I = {}) => {
let G = I.server
return {
name: e$1,
setupOnce() {
if (!G) return
r$1.fill(G, 'start', (Z) => {
return async function () {
return await this.register(o$1), await this.register(s$1), Z.apply(this)
}
})
},
}
},
t$1 = eI.defineIntegration(A54),
X54 = eI.convertIntegrationFnToClass(e$1, t$1)
Iy1.Hapi = X54
Iy1.hapiErrorPlugin = s$1
Iy1.hapiIntegration = t$1
Iy1.hapiTracingPlugin = o$1
})
var Zy1 = _((Gy1) => {
Object.defineProperty(Gy1, '__esModule', { value: !0 })
var F54 = _b(),
J54 = Jb(),
K54 = Ub(),
g54 = Rb(),
N54 = zb(),
z54 = Fb(),
Q54 = Db(),
q54 = Y4(),
U54 = Nb(),
f54 = Mb(),
R54 = Eb(),
E54 = $b(),
v54 = S21()
Gy1.Console = F54.Console
Gy1.Http = J54.Http
Gy1.OnUncaughtException = K54.OnUncaughtException
Gy1.OnUnhandledRejection = g54.OnUnhandledRejection
Gy1.Modules = N54.Modules
Gy1.ContextLines = z54.ContextLines
Gy1.Context = Q54.Context
Gy1.RequestData = q54.RequestData
Gy1.LocalVariables = U54.LocalVariables
Gy1.Undici = f54.Undici
Gy1.Spotlight = R54.Spotlight
Gy1.Anr = E54.Anr
Gy1.Hapi = v54.Hapi
})
var Wy1 = _((dy1) => {
Object.defineProperty(dy1, '__esModule', { value: !0 })
var tF = C21()
dy1.Apollo = tF.Apollo
dy1.Express = tF.Express
dy1.GraphQL = tF.GraphQL
dy1.Mongo = tF.Mongo
dy1.Mysql = tF.Mysql
dy1.Postgres = tF.Postgres
dy1.Prisma = tF.Prisma
})
var Vy1 = _((Cy1) => {
Object.defineProperty(Cy1, '__esModule', { value: !0 })
var IJ = Y4(),
GJ = X0(),
wy1 = 'CaptureConsole',
a54 = (I = {}) => {
let G = I.levels || GJ.CONSOLE_LEVELS
return {
name: wy1,
setupOnce() {},
setup(Z) {
if (!('console' in GJ.GLOBAL_OBJ)) return
GJ.addConsoleInstrumentationHandler(({ args: d, level: W }) => {
if (IJ.getClient() !== Z || !G.includes(W)) return
s54(d, W)
})
},
}
},
By1 = IJ.defineIntegration(a54),
r54 = IJ.convertIntegrationFnToClass(wy1, By1)
function s54(I, G) {
let Z = { level: GJ.severityLevelFromString(G), extra: { arguments: I } }
IJ.withScope((d) => {
if (
(d.addEventProcessor((B) => {
return (
(B.logger = 'console'), GJ.addExceptionMechanism(B, { handled: !1, type: 'console' }), B
)
}),
G === 'assert' && I[0] === !1)
) {
let B = `Assertion failed: ${GJ.safeJoin(I.slice(1), ' ') || 'console.assert'}`
d.setExtra('arguments', I.slice(1)), IJ.captureMessage(B, Z)
return
}
let W = I.find((B) => B instanceof Error)
if (G === 'error' && W) {
IJ.captureException(W, Z)
return
}
let w = GJ.safeJoin(I, ' ')
IJ.captureMessage(w, Z)
})
}
Cy1.CaptureConsole = r54
Cy1.captureConsoleIntegration = By1
})
var Dy1 = _((_y1) => {
Object.defineProperty(_y1, '__esModule', { value: !0 })
var Ay1 = Y4(),
t54 = X0(),
Xy1 = 'Debug',
I94 = (I = {}) => {
let G = { debugger: !1, stringify: !1, ...I }
return {
name: Xy1,
setupOnce() {},
setup(Z) {
if (!Z.on) return
Z.on('beforeSendEvent', (d, W) => {
if (G.debugger) debugger
t54.consoleSandbox(() => {
if (G.stringify) {
if ((console.log(JSON.stringify(d, null, 2)), W && Object.keys(W).length))
console.log(JSON.stringify(W, null, 2))
} else if ((console.log(d), W && Object.keys(W).length)) console.log(W)
})
})
},
}
},
Yy1 = Ay1.defineIntegration(I94),
G94 = Ay1.convertIntegrationFnToClass(Xy1, Yy1)
_y1.Debug = G94
_y1.debugIntegration = Yy1
})
var kv = _((Hy1) => {
Object.defineProperty(Hy1, '__esModule', { value: !0 })
var W94 = typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__
Hy1.DEBUG_BUILD = W94
})
var fy1 = _((Uy1) => {
Object.defineProperty(Uy1, '__esModule', { value: !0 })
var Ky1 = Y4(),
B94 = X0(),
C94 = kv(),
gy1 = 'Dedupe',
V94 = () => {
let I
return {
name: gy1,
setupOnce() {},
processEvent(G) {
if (G.type) return G
try {
if (zy1(G, I))
return (
C94.DEBUG_BUILD &&
B94.logger.warn(
'Event dropped due to being a duplicate of previously captured event.',
),
null
)
} catch (Z) {}
return (I = G)
},
}
},
Ny1 = Ky1.defineIntegration(V94),
A94 = Ky1.convertIntegrationFnToClass(gy1, Ny1)
function zy1(I, G) {
if (!G) return !1
if (X94(I, G)) return !0
if (Y94(I, G)) return !0
return !1
}
function X94(I, G) {
let Z = I.message,
d = G.message
if (!Z && !d) return !1
if ((Z && !d) || (!Z && d)) return !1
if (Z !== d) return !1
if (!qy1(I, G)) return !1
if (!Qy1(I, G)) return !1
return !0
}
function Y94(I, G) {
let Z = Fy1(G),
d = Fy1(I)
if (!Z || !d) return !1
if (Z.type !== d.type || Z.value !== d.value) return !1
if (!qy1(I, G)) return !1
if (!Qy1(I, G)) return !1
return !0
}
function Qy1(I, G) {
let Z = Jy1(I),
d = Jy1(G)
if (!Z && !d) return !0
if ((Z && !d) || (!Z && d)) return !1
if (((Z = Z), (d = d), d.length !== Z.length)) return !1
for (let W = 0; W < d.length; W++) {
let w = d[W],
B = Z[W]
if (
w.filename !== B.filename ||
w.lineno !== B.lineno ||
w.colno !== B.colno ||
w.function !== B.function
)
return !1
}
return !0
}
function qy1(I, G) {
let Z = I.fingerprint,
d = G.fingerprint
if (!Z && !d) return !0
if ((Z && !d) || (!Z && d)) return !1
;(Z = Z), (d = d)
try {
return Z.join('') === d.join('')
} catch (W) {
return !1
}
}
function Fy1(I) {
return I.exception && I.exception.values && I.exception.values[0]
}
function Jy1(I) {
let G = I.exception
if (G)
try {
return G.values[0].stacktrace.frames
} catch (Z) {
return
}
return
}
Uy1.Dedupe = A94
Uy1._shouldDropEvent = zy1
Uy1.dedupeIntegration = Ny1
})
var Sy1 = _((My1) => {
Object.defineProperty(My1, '__esModule', { value: !0 })
var Ry1 = Y4(),
JY = X0(),
F94 = kv(),
Ey1 = 'ExtraErrorData',
J94 = (I = {}) => {
let G = I.depth || 3,
Z = I.captureErrorCause || !1
return {
name: Ey1,
setupOnce() {},
processEvent(d, W) {
return g94(d, W, G, Z)
},
}
},
vy1 = Ry1.defineIntegration(J94),
K94 = Ry1.convertIntegrationFnToClass(Ey1, vy1)
function g94(I, G = {}, Z, d) {
if (!G.originalException || !JY.isError(G.originalException)) return I
let W = G.originalException.name || G.originalException.constructor.name,
w = N94(G.originalException, d)
if (w) {
let B = { ...I.contexts },
C = JY.normalize(w, Z)
if (JY.isPlainObject(C))
JY.addNonEnumerableProperty(C, '__sentry_skip_normalization__', !0), (B[W] = C)
return { ...I, contexts: B }
}
return I
}
function N94(I, G) {
try {
let Z = [
'name',
'message',
'stack',
'line',
'column',
'fileName',
'lineNumber',
'columnNumber',
'toJSON',
],
d = {}
for (let W of Object.keys(I)) {
if (Z.indexOf(W) !== -1) continue
let w = I[W]
d[W] = JY.isError(w) ? w.toString() : w
}
if (G && I.cause !== void 0) d.cause = JY.isError(I.cause) ? I.cause.toString() : I.cause
if (typeof I.toJSON === 'function') {
let W = I.toJSON()
for (let w of Object.keys(W)) {
let B = W[w]
d[w] = JY.isError(B) ? B.toString() : B
}
}
return d
} catch (Z) {
F94.DEBUG_BUILD && JY.logger.error('Unable to extract extra data from the Error object:', Z)
}
return null
}
My1.ExtraErrorData = K94
My1.extraErrorDataIntegration = vy1
})
var $y1 = _((Ly1, L21) => {
/*!
localForage -- Offline Storage, Improved
Version 1.10.0
https://localforage.github.io/localForage
(c) 2013-2017 Mozilla, Apache License 2.0
*/ ;(function (I) {
if (typeof Ly1 === 'object' && typeof L21 !== 'undefined') L21.exports = I()
else if (typeof define === 'function' && define.amd) define([], I)
else {
var G
if (typeof window !== 'undefined') G = window
else if (typeof global !== 'undefined') G = global
else if (typeof self !== 'undefined') G = self
else G = this
G.localforage = I()
}
})(function () {
var I, G, Z
return (function d(W, w, B) {
function C(X, Y) {
if (!w[X]) {
if (!W[X]) {
var H = A1
if (!Y && H) return H(X, !0)
if (V) return V(X, !0)
var J = new Error("Cannot find module '" + X + "'")
throw ((J.code = 'MODULE_NOT_FOUND'), J)
}
var K = (w[X] = { exports: {} })
W[X][0].call(
K.exports,
function (g) {
var z = W[X][1][g]
return C(z ? z : g)
},
K,
K.exports,
d,
W,
w,
B,
)
}
return w[X].exports
}
var V = A1
for (var A = 0; A < B.length; A++) C(B[A])
return C
})(
{
1: [
function (d, W, w) {
;(function (B) {
var C = B.MutationObserver || B.WebKitMutationObserver,
V
if (C) {
var A = 0,
X = new C(g),
Y = B.document.createTextNode('')
X.observe(Y, { characterData: !0 }),
(V = function () {
Y.data = A = ++A % 2
})
} else if (!B.setImmediate && typeof B.MessageChannel !== 'undefined') {
var H = new B.MessageChannel()
;(H.port1.onmessage = g),
(V = function () {
H.port2.postMessage(0)
})
} else if (
'document' in B &&
'onreadystatechange' in B.document.createElement('script')
)
V = function () {
var f = B.document.createElement('script')
;(f.onreadystatechange = function () {
g(), (f.onreadystatechange = null), f.parentNode.removeChild(f), (f = null)
}),
B.document.documentElement.appendChild(f)
}
else
V = function () {
setTimeout(g, 0)
}
var J,
K = []
function g() {
J = !0
var f,
S,
$ = K.length
while ($) {
;(S = K), (K = []), (f = -1)
while (++f < $) S[f]()
$ = K.length
}
J = !1
}
W.exports = z
function z(f) {
if (K.push(f) === 1 && !J) V()
}
}).call(
this,
typeof global !== 'undefined'
? global
: typeof self !== 'undefined'
? self
: typeof window !== 'undefined'
? window
: {},
)
},
{},
],
2: [
function (d, W, w) {
var B = d(1)
function C() {}
var V = {},
A = ['REJECTED'],
X = ['FULFILLED'],
Y = ['PENDING']
W.exports = H
function H(m) {
if (typeof m !== 'function') throw new TypeError('resolver must be a function')
if (((this.state = Y), (this.queue = []), (this.outcome = void 0), m !== C))
z(this, m)
}
;(H.prototype.catch = function (m) {
return this.then(null, m)
}),
(H.prototype.then = function (m, O) {
if (
(typeof m !== 'function' && this.state === X) ||
(typeof O !== 'function' && this.state === A)
)
return this
var w1 = new this.constructor(C)
if (this.state !== Y) {
var b = this.state === X ? m : O
K(w1, b, this.outcome)
} else this.queue.push(new J(w1, m, O))
return w1
})
function J(m, O, w1) {
if (((this.promise = m), typeof O === 'function'))
(this.onFulfilled = O), (this.callFulfilled = this.otherCallFulfilled)
if (typeof w1 === 'function')
(this.onRejected = w1), (this.callRejected = this.otherCallRejected)
}
;(J.prototype.callFulfilled = function (m) {
V.resolve(this.promise, m)
}),
(J.prototype.otherCallFulfilled = function (m) {
K(this.promise, this.onFulfilled, m)
}),
(J.prototype.callRejected = function (m) {
V.reject(this.promise, m)
}),
(J.prototype.otherCallRejected = function (m) {
K(this.promise, this.onRejected, m)
})
function K(m, O, w1) {
B(function () {
var b
try {
b = O(w1)
} catch (x1) {
return V.reject(m, x1)
}
if (b === m) V.reject(m, new TypeError('Cannot resolve promise with itself'))
else V.resolve(m, b)
})
}
;(V.resolve = function (m, O) {
var w1 = f(g, O)
if (w1.status === 'error') return V.reject(m, w1.value)
var b = w1.value
if (b) z(m, b)
else {
;(m.state = X), (m.outcome = O)
var x1 = -1,
r1 = m.queue.length
while (++x1 < r1) m.queue[x1].callFulfilled(O)
}
return m
}),
(V.reject = function (m, O) {
;(m.state = A), (m.outcome = O)
var w1 = -1,
b = m.queue.length
while (++w1 < b) m.queue[w1].callRejected(O)
return m
})
function g(m) {
var O = m && m.then
if (
m &&
(typeof m === 'object' || typeof m === 'function') &&
typeof O === 'function'
)
return function w1() {
O.apply(m, arguments)
}
}
function z(m, O) {
var w1 = !1
function b(F1) {
if (w1) return
;(w1 = !0), V.reject(m, F1)
}
function x1(F1) {
if (w1) return
;(w1 = !0), V.resolve(m, F1)
}
function r1() {
O(x1, b)
}
var $1 = f(r1)
if ($1.status === 'error') b($1.value)
}
function f(m, O) {
var w1 = {}
try {
;(w1.value = m(O)), (w1.status = 'success')
} catch (b) {
;(w1.status = 'error'), (w1.value = b)
}
return w1
}
H.resolve = S
function S(m) {
if (m instanceof this) return m
return V.resolve(new this(C), m)
}
H.reject = $
function $(m) {
var O = new this(C)
return V.reject(O, m)
}
H.all = L
function L(m) {
var O = this
if (Object.prototype.toString.call(m) !== '[object Array]')
return this.reject(new TypeError('must be an array'))
var w1 = m.length,
b = !1
if (!w1) return this.resolve([])
var x1 = new Array(w1),
r1 = 0,
$1 = -1,
F1 = new this(C)
while (++$1 < w1) n(m[$1], $1)
return F1
function n(C1, u1) {
O.resolve(C1).then(T1, function (e1) {
if (!b) (b = !0), V.reject(F1, e1)
})
function T1(e1) {
if (((x1[u1] = e1), ++r1 === w1 && !b)) (b = !0), V.resolve(F1, x1)
}
}
}
H.race = T
function T(m) {
var O = this
if (Object.prototype.toString.call(m) !== '[object Array]')
return this.reject(new TypeError('must be an array'))
var w1 = m.length,
b = !1
if (!w1) return this.resolve([])
var x1 = -1,
r1 = new this(C)
while (++x1 < w1) $1(m[x1])
return r1
function $1(F1) {
O.resolve(F1).then(
function (n) {
if (!b) (b = !0), V.resolve(r1, n)
},
function (n) {
if (!b) (b = !0), V.reject(r1, n)
},
)
}
}
},
{ 1: 1 },
],
3: [
function (d, W, w) {
;(function (B) {
if (typeof B.Promise !== 'function') B.Promise = d(2)
}).call(
this,
typeof global !== 'undefined'
? global
: typeof self !== 'undefined'
? self
: typeof window !== 'undefined'
? window
: {},
)
},
{ 2: 2 },
],
4: [
function (d, W, w) {
var B =
typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol'
? function (j) {
return typeof j
}
: function (j) {
return j &&
typeof Symbol === 'function' &&
j.constructor === Symbol &&
j !== Symbol.prototype
? 'symbol'
: typeof j
}
function C(j, D1) {
if (!(j instanceof D1)) throw new TypeError('Cannot call a class as a function')
}
function V() {
try {
if (typeof indexedDB !== 'undefined') return indexedDB
if (typeof webkitIndexedDB !== 'undefined') return webkitIndexedDB
if (typeof mozIndexedDB !== 'undefined') return mozIndexedDB
if (typeof OIndexedDB !== 'undefined') return OIndexedDB
if (typeof msIndexedDB !== 'undefined') return msIndexedDB
} catch (j) {
return
}
}
var A = V()
function X() {
try {
if (!A || !A.open) return !1
var j =
typeof openDatabase !== 'undefined' &&
/(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent) &&
!/Chrome/.test(navigator.userAgent) &&
!/BlackBerry/.test(navigator.platform),
D1 =
typeof fetch === 'function' && fetch.toString().indexOf('[native code') !== -1
return (
(!j || D1) &&
typeof indexedDB !== 'undefined' &&
typeof IDBKeyRange !== 'undefined'
)
} catch (I1) {
return !1
}
}
function Y(j, D1) {
;(j = j || []), (D1 = D1 || {})
try {
return new Blob(j, D1)
} catch (v1) {
if (v1.name !== 'TypeError') throw v1
var I1 =
typeof BlobBuilder !== 'undefined'
? BlobBuilder
: typeof MSBlobBuilder !== 'undefined'
? MSBlobBuilder
: typeof MozBlobBuilder !== 'undefined'
? MozBlobBuilder
: WebKitBlobBuilder,
E1 = new I1()
for (var y1 = 0; y1 < j.length; y1 += 1) E1.append(j[y1])
return E1.getBlob(D1.type)
}
}
if (typeof Promise === 'undefined') d(3)
var H = Promise
function J(j, D1) {
if (D1)
j.then(
function (I1) {
D1(null, I1)
},
function (I1) {
D1(I1)
},
)
}
function K(j, D1, I1) {
if (typeof D1 === 'function') j.then(D1)
if (typeof I1 === 'function') j.catch(I1)
}
function g(j) {
if (typeof j !== 'string')
console.warn(j + ' used as a key, but it is not a string.'), (j = String(j))
return j
}
function z() {
if (arguments.length && typeof arguments[arguments.length - 1] === 'function')
return arguments[arguments.length - 1]
}
var f = 'local-forage-detect-blob-support',
S = void 0,
$ = {},
L = Object.prototype.toString,
T = 'readonly',
m = 'readwrite'
function O(j) {
var D1 = j.length,
I1 = new ArrayBuffer(D1),
E1 = new Uint8Array(I1)
for (var y1 = 0; y1 < D1; y1++) E1[y1] = j.charCodeAt(y1)
return I1
}
function w1(j) {
return new H(function (D1) {
var I1 = j.transaction(f, m),
E1 = Y([''])
I1.objectStore(f).put(E1, 'key'),
(I1.onabort = function (y1) {
y1.preventDefault(), y1.stopPropagation(), D1(!1)
}),
(I1.oncomplete = function () {
var y1 = navigator.userAgent.match(/Chrome\/(\d+)/),
v1 = navigator.userAgent.match(/Edge\//)
D1(v1 || !y1 || parseInt(y1[1], 10) >= 43)
})
}).catch(function () {
return !1
})
}
function b(j) {
if (typeof S === 'boolean') return H.resolve(S)
return w1(j).then(function (D1) {
return (S = D1), S
})
}
function x1(j) {
var D1 = $[j.name],
I1 = {}
if (
((I1.promise = new H(function (E1, y1) {
;(I1.resolve = E1), (I1.reject = y1)
})),
D1.deferredOperations.push(I1),
!D1.dbReady)
)
D1.dbReady = I1.promise
else
D1.dbReady = D1.dbReady.then(function () {
return I1.promise
})
}
function r1(j) {
var D1 = $[j.name],
I1 = D1.deferredOperations.pop()
if (I1) return I1.resolve(), I1.promise
}
function $1(j, D1) {
var I1 = $[j.name],
E1 = I1.deferredOperations.pop()
if (E1) return E1.reject(D1), E1.promise
}
function F1(j, D1) {
return new H(function (I1, E1) {
if ((($[j.name] = $[j.name] || e()), j.db))
if (D1) x1(j), j.db.close()
else return I1(j.db)
var y1 = [j.name]
if (D1) y1.push(j.version)
var v1 = A.open.apply(A, y1)
if (D1)
v1.onupgradeneeded = function (d0) {
var Q0 = v1.result
try {
if ((Q0.createObjectStore(j.storeName), d0.oldVersion <= 1))
Q0.createObjectStore(f)
} catch (N0) {
if (N0.name === 'ConstraintError')
console.warn(
'The database "' +
j.name +
'" has been upgraded from version ' +
d0.oldVersion +
' to version ' +
d0.newVersion +
', but the storage "' +
j.storeName +
'" already exists.',
)
else throw N0
}
}
;(v1.onerror = function (d0) {
d0.preventDefault(), E1(v1.error)
}),
(v1.onsuccess = function () {
var d0 = v1.result
;(d0.onversionchange = function (Q0) {
Q0.target.close()
}),
I1(d0),
r1(j)
})
})
}
function n(j) {
return F1(j, !1)
}
function C1(j) {
return F1(j, !0)
}
function u1(j, D1) {
if (!j.db) return !0
var I1 = !j.db.objectStoreNames.contains(j.storeName),
E1 = j.version < j.db.version,
y1 = j.version > j.db.version
if (E1) {
if (j.version !== D1)
console.warn(
'The database "' +
j.name +
`" can't be downgraded from version ` +
j.db.version +
' to version ' +
j.version +
'.',
)
j.version = j.db.version
}
if (y1 || I1) {
if (I1) {
var v1 = j.db.version + 1
if (v1 > j.version) j.version = v1
}
return !0
}
return !1
}
function T1(j) {
return new H(function (D1, I1) {
var E1 = new FileReader()
;(E1.onerror = I1),
(E1.onloadend = function (y1) {
var v1 = btoa(y1.target.result || '')
D1({ __local_forage_encoded_blob: !0, data: v1, type: j.type })
}),
E1.readAsBinaryString(j)
})
}
function e1(j) {
var D1 = O(atob(j.data))
return Y([D1], { type: j.type })
}
function Y0(j) {
return j && j.__local_forage_encoded_blob
}
function v0(j) {
var D1 = this,
I1 = D1._initReady().then(function () {
var E1 = $[D1._dbInfo.name]
if (E1 && E1.dbReady) return E1.dbReady
})
return K(I1, j, j), I1
}
function V0(j) {
x1(j)
var D1 = $[j.name],
I1 = D1.forages
for (var E1 = 0; E1 < I1.length; E1++) {
var y1 = I1[E1]
if (y1._dbInfo.db) y1._dbInfo.db.close(), (y1._dbInfo.db = null)
}
return (
(j.db = null),
n(j)
.then(function (v1) {
if (((j.db = v1), u1(j))) return C1(j)
return v1
})
.then(function (v1) {
j.db = D1.db = v1
for (var d0 = 0; d0 < I1.length; d0++) I1[d0]._dbInfo.db = v1
})
.catch(function (v1) {
throw ($1(j, v1), v1)
})
)
}
function r0(j, D1, I1, E1) {
if (E1 === void 0) E1 = 1
try {
var y1 = j.db.transaction(j.storeName, D1)
I1(null, y1)
} catch (v1) {
if (
E1 > 0 &&
(!j.db || v1.name === 'InvalidStateError' || v1.name === 'NotFoundError')
)
return H.resolve()
.then(function () {
if (
!j.db ||
(v1.name === 'NotFoundError' &&
!j.db.objectStoreNames.contains(j.storeName) &&
j.version <= j.db.version)
) {
if (j.db) j.version = j.db.version + 1
return C1(j)
}
})
.then(function () {
return V0(j).then(function () {
r0(j, D1, I1, E1 - 1)
})
})
.catch(I1)
I1(v1)
}
}
function e() {
return { forages: [], db: null, dbReady: null, deferredOperations: [] }
}
function Z0(j) {
var D1 = this,
I1 = { db: null }
if (j) for (var E1 in j) I1[E1] = j[E1]
var y1 = $[I1.name]
if (!y1) (y1 = e()), ($[I1.name] = y1)
if ((y1.forages.push(D1), !D1._initReady)) (D1._initReady = D1.ready), (D1.ready = v0)
var v1 = []
function d0() {
return H.resolve()
}
for (var Q0 = 0; Q0 < y1.forages.length; Q0++) {
var N0 = y1.forages[Q0]
if (N0 !== D1) v1.push(N0._initReady().catch(d0))
}
var u0 = y1.forages.slice(0)
return H.all(v1)
.then(function () {
return (I1.db = y1.db), n(I1)
})
.then(function (x0) {
if (((I1.db = x0), u1(I1, D1._defaultConfig.version))) return C1(I1)
return x0
})
.then(function (x0) {
;(I1.db = y1.db = x0), (D1._dbInfo = I1)
for (var J2 = 0; J2 < u0.length; J2++) {
var K4 = u0[J2]
if (K4 !== D1) (K4._dbInfo.db = I1.db), (K4._dbInfo.version = I1.version)
}
})
}
function K1(j, D1) {
var I1 = this
j = g(j)
var E1 = new H(function (y1, v1) {
I1.ready()
.then(function () {
r0(I1._dbInfo, T, function (d0, Q0) {
if (d0) return v1(d0)
try {
var N0 = Q0.objectStore(I1._dbInfo.storeName),
u0 = N0.get(j)
;(u0.onsuccess = function () {
var x0 = u0.result
if (x0 === void 0) x0 = null
if (Y0(x0)) x0 = e1(x0)
y1(x0)
}),
(u0.onerror = function () {
v1(u0.error)
})
} catch (x0) {
v1(x0)
}
})
})
.catch(v1)
})
return J(E1, D1), E1
}
function k1(j, D1) {
var I1 = this,
E1 = new H(function (y1, v1) {
I1.ready()
.then(function () {
r0(I1._dbInfo, T, function (d0, Q0) {
if (d0) return v1(d0)
try {
var N0 = Q0.objectStore(I1._dbInfo.storeName),
u0 = N0.openCursor(),
x0 = 1
;(u0.onsuccess = function () {
var J2 = u0.result
if (J2) {
var K4 = J2.value
if (Y0(K4)) K4 = e1(K4)
var a4 = j(K4, J2.key, x0++)
if (a4 !== void 0) y1(a4)
else J2.continue()
} else y1()
}),
(u0.onerror = function () {
v1(u0.error)
})
} catch (J2) {
v1(J2)
}
})
})
.catch(v1)
})
return J(E1, D1), E1
}
function n1(j, D1, I1) {
var E1 = this
j = g(j)
var y1 = new H(function (v1, d0) {
var Q0
E1.ready()
.then(function () {
if (((Q0 = E1._dbInfo), L.call(D1) === '[object Blob]'))
return b(Q0.db).then(function (N0) {
if (N0) return D1
return T1(D1)
})
return D1
})
.then(function (N0) {
r0(E1._dbInfo, m, function (u0, x0) {
if (u0) return d0(u0)
try {
var J2 = x0.objectStore(E1._dbInfo.storeName)
if (N0 === null) N0 = void 0
var K4 = J2.put(N0, j)
;(x0.oncomplete = function () {
if (N0 === void 0) N0 = null
v1(N0)
}),
(x0.onabort = x0.onerror =
function () {
var a4 = K4.error ? K4.error : K4.transaction.error
d0(a4)
})
} catch (a4) {
d0(a4)
}
})
})
.catch(d0)
})
return J(y1, I1), y1
}
function S0(j, D1) {
var I1 = this
j = g(j)
var E1 = new H(function (y1, v1) {
I1.ready()
.then(function () {
r0(I1._dbInfo, m, function (d0, Q0) {
if (d0) return v1(d0)
try {
var N0 = Q0.objectStore(I1._dbInfo.storeName),
u0 = N0.delete(j)
;(Q0.oncomplete = function () {
y1()
}),
(Q0.onerror = function () {
v1(u0.error)
}),
(Q0.onabort = function () {
var x0 = u0.error ? u0.error : u0.transaction.error
v1(x0)
})
} catch (x0) {
v1(x0)
}
})
})
.catch(v1)
})
return J(E1, D1), E1
}
function h(j) {
var D1 = this,
I1 = new H(function (E1, y1) {
D1.ready()
.then(function () {
r0(D1._dbInfo, m, function (v1, d0) {
if (v1) return y1(v1)
try {
var Q0 = d0.objectStore(D1._dbInfo.storeName),
N0 = Q0.clear()
;(d0.oncomplete = function () {
E1()
}),
(d0.onabort = d0.onerror =
function () {
var u0 = N0.error ? N0.error : N0.transaction.error
y1(u0)
})
} catch (u0) {
y1(u0)
}
})
})
.catch(y1)
})
return J(I1, j), I1
}
function r(j) {
var D1 = this,
I1 = new H(function (E1, y1) {
D1.ready()
.then(function () {
r0(D1._dbInfo, T, function (v1, d0) {
if (v1) return y1(v1)
try {
var Q0 = d0.objectStore(D1._dbInfo.storeName),
N0 = Q0.count()
;(N0.onsuccess = function () {
E1(N0.result)
}),
(N0.onerror = function () {
y1(N0.error)
})
} catch (u0) {
y1(u0)
}
})
})
.catch(y1)
})
return J(I1, j), I1
}
function d1(j, D1) {
var I1 = this,
E1 = new H(function (y1, v1) {
if (j < 0) {
y1(null)
return
}
I1.ready()
.then(function () {
r0(I1._dbInfo, T, function (d0, Q0) {
if (d0) return v1(d0)
try {
var N0 = Q0.objectStore(I1._dbInfo.storeName),
u0 = !1,
x0 = N0.openKeyCursor()
;(x0.onsuccess = function () {
var J2 = x0.result
if (!J2) {
y1(null)
return
}
if (j === 0) y1(J2.key)
else if (!u0) (u0 = !0), J2.advance(j)
else y1(J2.key)
}),
(x0.onerror = function () {
v1(x0.error)
})
} catch (J2) {
v1(J2)
}
})
})
.catch(v1)
})
return J(E1, D1), E1
}
function U1(j) {
var D1 = this,
I1 = new H(function (E1, y1) {
D1.ready()
.then(function () {
r0(D1._dbInfo, T, function (v1, d0) {
if (v1) return y1(v1)
try {
var Q0 = d0.objectStore(D1._dbInfo.storeName),
N0 = Q0.openKeyCursor(),
u0 = []
;(N0.onsuccess = function () {
var x0 = N0.result
if (!x0) {
E1(u0)
return
}
u0.push(x0.key), x0.continue()
}),
(N0.onerror = function () {
y1(N0.error)
})
} catch (x0) {
y1(x0)
}
})
})
.catch(y1)
})
return J(I1, j), I1
}
function Q1(j, D1) {
D1 = z.apply(this, arguments)
var I1 = this.config()
if (((j = (typeof j !== 'function' && j) || {}), !j.name))
(j.name = j.name || I1.name), (j.storeName = j.storeName || I1.storeName)
var E1 = this,
y1
if (!j.name) y1 = H.reject('Invalid arguments')
else {
var v1 = j.name === I1.name && E1._dbInfo.db,
d0 = v1
? H.resolve(E1._dbInfo.db)
: n(j).then(function (Q0) {
var N0 = $[j.name],
u0 = N0.forages
N0.db = Q0
for (var x0 = 0; x0 < u0.length; x0++) u0[x0]._dbInfo.db = Q0
return Q0
})
if (!j.storeName)
y1 = d0.then(function (Q0) {
x1(j)
var N0 = $[j.name],
u0 = N0.forages
Q0.close()
for (var x0 = 0; x0 < u0.length; x0++) {
var J2 = u0[x0]
J2._dbInfo.db = null
}
var K4 = new H(function (a4, r4) {
var w9 = A.deleteDatabase(j.name)
;(w9.onerror = function () {
var l9 = w9.result
if (l9) l9.close()
r4(w9.error)
}),
(w9.onblocked = function () {
console.warn(
'dropInstance blocked for database "' +
j.name +
'" until all open connections are closed',
)
}),
(w9.onsuccess = function () {
var l9 = w9.result
if (l9) l9.close()
a4(l9)
})
})
return K4.then(function (a4) {
N0.db = a4
for (var r4 = 0; r4 < u0.length; r4++) {
var w9 = u0[r4]
r1(w9._dbInfo)
}
}).catch(function (a4) {
throw (($1(j, a4) || H.resolve()).catch(function () {}), a4)
})
})
else
y1 = d0.then(function (Q0) {
if (!Q0.objectStoreNames.contains(j.storeName)) return
var N0 = Q0.version + 1
x1(j)
var u0 = $[j.name],
x0 = u0.forages
Q0.close()
for (var J2 = 0; J2 < x0.length; J2++) {
var K4 = x0[J2]
;(K4._dbInfo.db = null), (K4._dbInfo.version = N0)
}
var a4 = new H(function (r4, w9) {
var l9 = A.open(j.name, N0)
;(l9.onerror = function (Z8) {
var SG = l9.result
SG.close(), w9(Z8)
}),
(l9.onupgradeneeded = function () {
var Z8 = l9.result
Z8.deleteObjectStore(j.storeName)
}),
(l9.onsuccess = function () {
var Z8 = l9.result
Z8.close(), r4(Z8)
})
})
return a4
.then(function (r4) {
u0.db = r4
for (var w9 = 0; w9 < x0.length; w9++) {
var l9 = x0[w9]
;(l9._dbInfo.db = r4), r1(l9._dbInfo)
}
})
.catch(function (r4) {
throw (($1(j, r4) || H.resolve()).catch(function () {}), r4)
})
})
}
return J(y1, D1), y1
}
var J1 = {
_driver: 'asyncStorage',
_initStorage: Z0,
_support: X(),
iterate: k1,
getItem: K1,
setItem: n1,
removeItem: S0,
clear: h,
length: r,
key: d1,
keys: U1,
dropInstance: Q1,
}
function m1() {
return typeof openDatabase === 'function'
}
var N1 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',
R1 = '~~local_forage_type~',
j1 = /^~~local_forage_type~([^~]+)~/,
c = '__lfsc__:',
B1 = c.length,
o1 = 'arbf',
z1 = 'blob',
E0 = 'si08',
g0 = 'ui08',
k0 = 'uic8',
n0 = 'si16',
s0 = 'si32',
T2 = 'ur16',
N9 = 'ui32',
h0 = 'fl32',
w2 = 'fl64',
V2 = B1 + o1.length,
A4 = Object.prototype.toString
function X4(j) {
var D1 = j.length * 0.75,
I1 = j.length,
E1,
y1 = 0,
v1,
d0,
Q0,
N0
if (j[j.length - 1] === '=') {
if ((D1--, j[j.length - 2] === '=')) D1--
}
var u0 = new ArrayBuffer(D1),
x0 = new Uint8Array(u0)
for (E1 = 0; E1 < I1; E1 += 4)
(v1 = N1.indexOf(j[E1])),
(d0 = N1.indexOf(j[E1 + 1])),
(Q0 = N1.indexOf(j[E1 + 2])),
(N0 = N1.indexOf(j[E1 + 3])),
(x0[y1++] = (v1 << 2) | (d0 >> 4)),
(x0[y1++] = ((d0 & 15) << 4) | (Q0 >> 2)),
(x0[y1++] = ((Q0 & 3) << 6) | (N0 & 63))
return u0
}
function H5(j) {
var D1 = new Uint8Array(j),
I1 = '',
E1
for (E1 = 0; E1 < D1.length; E1 += 3)
(I1 += N1[D1[E1] >> 2]),
(I1 += N1[((D1[E1] & 3) << 4) | (D1[E1 + 1] >> 4)]),
(I1 += N1[((D1[E1 + 1] & 15) << 2) | (D1[E1 + 2] >> 6)]),
(I1 += N1[D1[E1 + 2] & 63])
if (D1.length % 3 === 2) I1 = I1.substring(0, I1.length - 1) + '='
else if (D1.length % 3 === 1) I1 = I1.substring(0, I1.length - 2) + '=='
return I1
}
function F5(j, D1) {
var I1 = ''
if (j) I1 = A4.call(j)
if (
j &&
(I1 === '[object ArrayBuffer]' ||
(j.buffer && A4.call(j.buffer) === '[object ArrayBuffer]'))
) {
var E1,
y1 = c
if (j instanceof ArrayBuffer) (E1 = j), (y1 += o1)
else if (((E1 = j.buffer), I1 === '[object Int8Array]')) y1 += E0
else if (I1 === '[object Uint8Array]') y1 += g0
else if (I1 === '[object Uint8ClampedArray]') y1 += k0
else if (I1 === '[object Int16Array]') y1 += n0
else if (I1 === '[object Uint16Array]') y1 += T2
else if (I1 === '[object Int32Array]') y1 += s0
else if (I1 === '[object Uint32Array]') y1 += N9
else if (I1 === '[object Float32Array]') y1 += h0
else if (I1 === '[object Float64Array]') y1 += w2
else D1(new Error('Failed to get type for BinaryArray'))
D1(y1 + H5(E1))
} else if (I1 === '[object Blob]') {
var v1 = new FileReader()
;(v1.onload = function () {
var d0 = R1 + j.type + '~' + H5(this.result)
D1(c + z1 + d0)
}),
v1.readAsArrayBuffer(j)
} else
try {
D1(JSON.stringify(j))
} catch (d0) {
console.error("Couldn't convert value into a JSON string: ", j), D1(null, d0)
}
}
function wW(j) {
if (j.substring(0, B1) !== c) return JSON.parse(j)
var D1 = j.substring(V2),
I1 = j.substring(B1, V2),
E1
if (I1 === z1 && j1.test(D1)) {
var y1 = D1.match(j1)
;(E1 = y1[1]), (D1 = D1.substring(y1[0].length))
}
var v1 = X4(D1)
switch (I1) {
case o1:
return v1
case z1:
return Y([v1], { type: E1 })
case E0:
return new Int8Array(v1)
case g0:
return new Uint8Array(v1)
case k0:
return new Uint8ClampedArray(v1)
case n0:
return new Int16Array(v1)
case T2:
return new Uint16Array(v1)
case s0:
return new Int32Array(v1)
case N9:
return new Uint32Array(v1)
case h0:
return new Float32Array(v1)
case w2:
return new Float64Array(v1)
default:
throw new Error('Unkown type: ' + I1)
}
}
var b6 = { serialize: F5, deserialize: wW, stringToBuffer: X4, bufferToString: H5 }
function ZV(j, D1, I1, E1) {
j.executeSql(
'CREATE TABLE IF NOT EXISTS ' +
D1.storeName +
' (id INTEGER PRIMARY KEY, key unique, value)',
[],
I1,
E1,
)
}
function dV(j) {
var D1 = this,
I1 = { db: null }
if (j) for (var E1 in j) I1[E1] = typeof j[E1] !== 'string' ? j[E1].toString() : j[E1]
var y1 = new H(function (v1, d0) {
try {
I1.db = openDatabase(I1.name, String(I1.version), I1.description, I1.size)
} catch (Q0) {
return d0(Q0)
}
I1.db.transaction(function (Q0) {
ZV(
Q0,
I1,
function () {
;(D1._dbInfo = I1), v1()
},
function (N0, u0) {
d0(u0)
},
)
}, d0)
})
return (I1.serializer = b6), y1
}
function H3(j, D1, I1, E1, y1, v1) {
j.executeSql(
I1,
E1,
y1,
function (d0, Q0) {
if (Q0.code === Q0.SYNTAX_ERR)
d0.executeSql(
"SELECT name FROM sqlite_master WHERE type='table' AND name = ?",
[D1.storeName],
function (N0, u0) {
if (!u0.rows.length)
ZV(
N0,
D1,
function () {
N0.executeSql(I1, E1, y1, v1)
},
v1,
)
else v1(N0, Q0)
},
v1,
)
else v1(d0, Q0)
},
v1,
)
}
function qG(j, D1) {
var I1 = this
j = g(j)
var E1 = new H(function (y1, v1) {
I1.ready()
.then(function () {
var d0 = I1._dbInfo
d0.db.transaction(function (Q0) {
H3(
Q0,
d0,
'SELECT * FROM ' + d0.storeName + ' WHERE key = ? LIMIT 1',
[j],
function (N0, u0) {
var x0 = u0.rows.length ? u0.rows.item(0).value : null
if (x0) x0 = d0.serializer.deserialize(x0)
y1(x0)
},
function (N0, u0) {
v1(u0)
},
)
})
})
.catch(v1)
})
return J(E1, D1), E1
}
function BW(j, D1) {
var I1 = this,
E1 = new H(function (y1, v1) {
I1.ready()
.then(function () {
var d0 = I1._dbInfo
d0.db.transaction(function (Q0) {
H3(
Q0,
d0,
'SELECT * FROM ' + d0.storeName,
[],
function (N0, u0) {
var x0 = u0.rows,
J2 = x0.length
for (var K4 = 0; K4 < J2; K4++) {
var a4 = x0.item(K4),
r4 = a4.value
if (r4) r4 = d0.serializer.deserialize(r4)
if (((r4 = j(r4, a4.key, K4 + 1)), r4 !== void 0)) {
y1(r4)
return
}
}
y1()
},
function (N0, u0) {
v1(u0)
},
)
})
})
.catch(v1)
})
return J(E1, D1), E1
}
function F3(j, D1, I1, E1) {
var y1 = this
j = g(j)
var v1 = new H(function (d0, Q0) {
y1.ready()
.then(function () {
if (D1 === void 0) D1 = null
var N0 = D1,
u0 = y1._dbInfo
u0.serializer.serialize(D1, function (x0, J2) {
if (J2) Q0(J2)
else
u0.db.transaction(
function (K4) {
H3(
K4,
u0,
'INSERT OR REPLACE INTO ' +
u0.storeName +
' (key, value) VALUES (?, ?)',
[j, x0],
function () {
d0(N0)
},
function (a4, r4) {
Q0(r4)
},
)
},
function (K4) {
if (K4.code === K4.QUOTA_ERR) {
if (E1 > 0) {
d0(F3.apply(y1, [j, N0, I1, E1 - 1]))
return
}
Q0(K4)
}
},
)
})
})
.catch(Q0)
})
return J(v1, I1), v1
}
function UG(j, D1, I1) {
return F3.apply(this, [j, D1, I1, 1])
}
function fG(j, D1) {
var I1 = this
j = g(j)
var E1 = new H(function (y1, v1) {
I1.ready()
.then(function () {
var d0 = I1._dbInfo
d0.db.transaction(function (Q0) {
H3(
Q0,
d0,
'DELETE FROM ' + d0.storeName + ' WHERE key = ?',
[j],
function () {
y1()
},
function (N0, u0) {
v1(u0)
},
)
})
})
.catch(v1)
})
return J(E1, D1), E1
}
function MZ(j) {
var D1 = this,
I1 = new H(function (E1, y1) {
D1.ready()
.then(function () {
var v1 = D1._dbInfo
v1.db.transaction(function (d0) {
H3(
d0,
v1,
'DELETE FROM ' + v1.storeName,
[],
function () {
E1()
},
function (Q0, N0) {
y1(N0)
},
)
})
})
.catch(y1)
})
return J(I1, j), I1
}
function SZ(j) {
var D1 = this,
I1 = new H(function (E1, y1) {
D1.ready()
.then(function () {
var v1 = D1._dbInfo
v1.db.transaction(function (d0) {
H3(
d0,
v1,
'SELECT COUNT(key) as c FROM ' + v1.storeName,
[],
function (Q0, N0) {
var u0 = N0.rows.item(0).c
E1(u0)
},
function (Q0, N0) {
y1(N0)
},
)
})
})
.catch(y1)
})
return J(I1, j), I1
}
function H7(j, D1) {
var I1 = this,
E1 = new H(function (y1, v1) {
I1.ready()
.then(function () {
var d0 = I1._dbInfo
d0.db.transaction(function (Q0) {
H3(
Q0,
d0,
'SELECT key FROM ' + d0.storeName + ' WHERE id = ? LIMIT 1',
[j + 1],
function (N0, u0) {
var x0 = u0.rows.length ? u0.rows.item(0).key : null
y1(x0)
},
function (N0, u0) {
v1(u0)
},
)
})
})
.catch(v1)
})
return J(E1, D1), E1
}
function LI(j) {
var D1 = this,
I1 = new H(function (E1, y1) {
D1.ready()
.then(function () {
var v1 = D1._dbInfo
v1.db.transaction(function (d0) {
H3(
d0,
v1,
'SELECT key FROM ' + v1.storeName,
[],
function (Q0, N0) {
var u0 = []
for (var x0 = 0; x0 < N0.rows.length; x0++)
u0.push(N0.rows.item(x0).key)
E1(u0)
},
function (Q0, N0) {
y1(N0)
},
)
})
})
.catch(y1)
})
return J(I1, j), I1
}
function e7(j) {
return new H(function (D1, I1) {
j.transaction(
function (E1) {
E1.executeSql(
"SELECT name FROM sqlite_master WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'",
[],
function (y1, v1) {
var d0 = []
for (var Q0 = 0; Q0 < v1.rows.length; Q0++) d0.push(v1.rows.item(Q0).name)
D1({ db: j, storeNames: d0 })
},
function (y1, v1) {
I1(v1)
},
)
},
function (E1) {
I1(E1)
},
)
})
}
function RG(j, D1) {
D1 = z.apply(this, arguments)
var I1 = this.config()
if (((j = (typeof j !== 'function' && j) || {}), !j.name))
(j.name = j.name || I1.name), (j.storeName = j.storeName || I1.storeName)
var E1 = this,
y1
if (!j.name) y1 = H.reject('Invalid arguments')
else
y1 = new H(function (v1) {
var d0
if (j.name === I1.name) d0 = E1._dbInfo.db
else d0 = openDatabase(j.name, '', '', 0)
if (!j.storeName) v1(e7(d0))
else v1({ db: d0, storeNames: [j.storeName] })
}).then(function (v1) {
return new H(function (d0, Q0) {
v1.db.transaction(
function (N0) {
function u0(a4) {
return new H(function (r4, w9) {
N0.executeSql(
'DROP TABLE IF EXISTS ' + a4,
[],
function () {
r4()
},
function (l9, Z8) {
w9(Z8)
},
)
})
}
var x0 = []
for (var J2 = 0, K4 = v1.storeNames.length; J2 < K4; J2++)
x0.push(u0(v1.storeNames[J2]))
H.all(x0)
.then(function () {
d0()
})
.catch(function (a4) {
Q0(a4)
})
},
function (N0) {
Q0(N0)
},
)
})
})
return J(y1, D1), y1
}
var F7 = {
_driver: 'webSQLStorage',
_initStorage: dV,
_support: m1(),
iterate: BW,
getItem: qG,
setItem: UG,
removeItem: fG,
clear: MZ,
length: SZ,
key: H7,
keys: LI,
dropInstance: RG,
}
function WV() {
try {
return (
typeof localStorage !== 'undefined' &&
'setItem' in localStorage &&
!!localStorage.setItem
)
} catch (j) {
return !1
}
}
function EG(j, D1) {
var I1 = j.name + '/'
if (j.storeName !== D1.storeName) I1 += j.storeName + '/'
return I1
}
function wV() {
var j = '_localforage_support_test'
try {
return localStorage.setItem(j, !0), localStorage.removeItem(j), !1
} catch (D1) {
return !0
}
}
function jw() {
return !wV() || localStorage.length > 0
}
function kw(j) {
var D1 = this,
I1 = {}
if (j) for (var E1 in j) I1[E1] = j[E1]
if (((I1.keyPrefix = EG(j, D1._defaultConfig)), !jw())) return H.reject()
return (D1._dbInfo = I1), (I1.serializer = b6), H.resolve()
}
function $8(j) {
var D1 = this,
I1 = D1.ready().then(function () {
var E1 = D1._dbInfo.keyPrefix
for (var y1 = localStorage.length - 1; y1 >= 0; y1--) {
var v1 = localStorage.key(y1)
if (v1.indexOf(E1) === 0) localStorage.removeItem(v1)
}
})
return J(I1, j), I1
}
function LZ(j, D1) {
var I1 = this
j = g(j)
var E1 = I1.ready().then(function () {
var y1 = I1._dbInfo,
v1 = localStorage.getItem(y1.keyPrefix + j)
if (v1) v1 = y1.serializer.deserialize(v1)
return v1
})
return J(E1, D1), E1
}
function BV(j, D1) {
var I1 = this,
E1 = I1.ready().then(function () {
var y1 = I1._dbInfo,
v1 = y1.keyPrefix,
d0 = v1.length,
Q0 = localStorage.length,
N0 = 1
for (var u0 = 0; u0 < Q0; u0++) {
var x0 = localStorage.key(u0)
if (x0.indexOf(v1) !== 0) continue
var J2 = localStorage.getItem(x0)
if (J2) J2 = y1.serializer.deserialize(J2)
if (((J2 = j(J2, x0.substring(d0), N0++)), J2 !== void 0)) return J2
}
})
return J(E1, D1), E1
}
function hw(j, D1) {
var I1 = this,
E1 = I1.ready().then(function () {
var y1 = I1._dbInfo,
v1
try {
v1 = localStorage.key(j)
} catch (d0) {
v1 = null
}
if (v1) v1 = v1.substring(y1.keyPrefix.length)
return v1
})
return J(E1, D1), E1
}
function vG(j) {
var D1 = this,
I1 = D1.ready().then(function () {
var E1 = D1._dbInfo,
y1 = localStorage.length,
v1 = []
for (var d0 = 0; d0 < y1; d0++) {
var Q0 = localStorage.key(d0)
if (Q0.indexOf(E1.keyPrefix) === 0) v1.push(Q0.substring(E1.keyPrefix.length))
}
return v1
})
return J(I1, j), I1
}
function CV(j) {
var D1 = this,
I1 = D1.keys().then(function (E1) {
return E1.length
})
return J(I1, j), I1
}
function xw(j, D1) {
var I1 = this
j = g(j)
var E1 = I1.ready().then(function () {
var y1 = I1._dbInfo
localStorage.removeItem(y1.keyPrefix + j)
})
return J(E1, D1), E1
}
function MG(j, D1, I1) {
var E1 = this
j = g(j)
var y1 = E1.ready().then(function () {
if (D1 === void 0) D1 = null
var v1 = D1
return new H(function (d0, Q0) {
var N0 = E1._dbInfo
N0.serializer.serialize(D1, function (u0, x0) {
if (x0) Q0(x0)
else
try {
localStorage.setItem(N0.keyPrefix + j, u0), d0(v1)
} catch (J2) {
if (
J2.name === 'QuotaExceededError' ||
J2.name === 'NS_ERROR_DOM_QUOTA_REACHED'
)
Q0(J2)
Q0(J2)
}
})
})
})
return J(y1, I1), y1
}
function J7(j, D1) {
if (
((D1 = z.apply(this, arguments)),
(j = (typeof j !== 'function' && j) || {}),
!j.name)
) {
var I1 = this.config()
;(j.name = j.name || I1.name), (j.storeName = j.storeName || I1.storeName)
}
var E1 = this,
y1
if (!j.name) y1 = H.reject('Invalid arguments')
else
y1 = new H(function (v1) {
if (!j.storeName) v1(j.name + '/')
else v1(EG(j, E1._defaultConfig))
}).then(function (v1) {
for (var d0 = localStorage.length - 1; d0 >= 0; d0--) {
var Q0 = localStorage.key(d0)
if (Q0.indexOf(v1) === 0) localStorage.removeItem(Q0)
}
})
return J(y1, D1), y1
}
var cw = {
_driver: 'localStorageWrapper',
_initStorage: kw,
_support: WV(),
iterate: BV,
getItem: LZ,
setItem: MG,
removeItem: xw,
clear: $8,
length: CV,
key: hw,
keys: vG,
dropInstance: J7,
},
G1 = function j(D1, I1) {
return (
D1 === I1 ||
(typeof D1 === 'number' && typeof I1 === 'number' && isNaN(D1) && isNaN(I1))
)
},
o = function j(D1, I1) {
var E1 = D1.length,
y1 = 0
while (y1 < E1) {
if (G1(D1[y1], I1)) return !0
y1++
}
return !1
},
L1 =
Array.isArray ||
function (j) {
return Object.prototype.toString.call(j) === '[object Array]'
},
i1 = {},
b1 = {},
t1 = { INDEXEDDB: J1, WEBSQL: F7, LOCALSTORAGE: cw },
R0 = [t1.INDEXEDDB._driver, t1.WEBSQL._driver, t1.LOCALSTORAGE._driver],
B0 = ['dropInstance'],
J0 = [
'clear',
'getItem',
'iterate',
'key',
'keys',
'length',
'removeItem',
'setItem',
].concat(B0),
w0 = {
description: '',
driver: R0.slice(),
name: 'localforage',
size: 4980736,
storeName: 'keyvaluepairs',
version: 1,
}
function F0(j, D1) {
j[D1] = function () {
var I1 = arguments
return j.ready().then(function () {
return j[D1].apply(j, I1)
})
}
}
function c2() {
for (var j = 1; j < arguments.length; j++) {
var D1 = arguments[j]
if (D1) {
for (var I1 in D1)
if (D1.hasOwnProperty(I1))
if (L1(D1[I1])) arguments[0][I1] = D1[I1].slice()
else arguments[0][I1] = D1[I1]
}
}
return arguments[0]
}
var L2 = (function () {
function j(D1) {
C(this, j)
for (var I1 in t1)
if (t1.hasOwnProperty(I1)) {
var E1 = t1[I1],
y1 = E1._driver
if (((this[I1] = y1), !i1[y1])) this.defineDriver(E1)
}
;(this._defaultConfig = c2({}, w0)),
(this._config = c2({}, this._defaultConfig, D1)),
(this._driverSet = null),
(this._initDriver = null),
(this._ready = !1),
(this._dbInfo = null),
this._wrapLibraryMethodsWithReady(),
this.setDriver(this._config.driver).catch(function () {})
}
return (
(j.prototype.config = function D1(I1) {
if ((typeof I1 === 'undefined' ? 'undefined' : B(I1)) === 'object') {
if (this._ready)
return new Error("Can't call config() after localforage has been used.")
for (var E1 in I1) {
if (E1 === 'storeName') I1[E1] = I1[E1].replace(/\W/g, '_')
if (E1 === 'version' && typeof I1[E1] !== 'number')
return new Error('Database version must be a number.')
this._config[E1] = I1[E1]
}
if ('driver' in I1 && I1.driver) return this.setDriver(this._config.driver)
return !0
} else if (typeof I1 === 'string') return this._config[I1]
else return this._config
}),
(j.prototype.defineDriver = function D1(I1, E1, y1) {
var v1 = new H(function (d0, Q0) {
try {
var N0 = I1._driver,
u0 = new Error(
'Custom driver not compliant; see https://mozilla.github.io/localForage/#definedriver',
)
if (!I1._driver) {
Q0(u0)
return
}
var x0 = J0.concat('_initStorage')
for (var J2 = 0, K4 = x0.length; J2 < K4; J2++) {
var a4 = x0[J2],
r4 = !o(B0, a4)
if ((r4 || I1[a4]) && typeof I1[a4] !== 'function') {
Q0(u0)
return
}
}
var w9 = function Z8() {
var SG = function kg(LG) {
return function () {
var m4 = new Error(
'Method ' + LG + ' is not implemented by the current driver',
),
VV = H.reject(m4)
return J(VV, arguments[arguments.length - 1]), VV
}
}
for (var CW = 0, hX = B0.length; CW < hX; CW++) {
var $Z = B0[CW]
if (!I1[$Z]) I1[$Z] = SG($Z)
}
}
w9()
var l9 = function Z8(SG) {
if (i1[N0]) console.info('Redefining LocalForage driver: ' + N0)
;(i1[N0] = I1), (b1[N0] = SG), d0()
}
if ('_support' in I1)
if (I1._support && typeof I1._support === 'function')
I1._support().then(l9, Q0)
else l9(!!I1._support)
else l9(!0)
} catch (Z8) {
Q0(Z8)
}
})
return K(v1, E1, y1), v1
}),
(j.prototype.driver = function D1() {
return this._driver || null
}),
(j.prototype.getDriver = function D1(I1, E1, y1) {
var v1 = i1[I1] ? H.resolve(i1[I1]) : H.reject(new Error('Driver not found.'))
return K(v1, E1, y1), v1
}),
(j.prototype.getSerializer = function D1(I1) {
var E1 = H.resolve(b6)
return K(E1, I1), E1
}),
(j.prototype.ready = function D1(I1) {
var E1 = this,
y1 = E1._driverSet.then(function () {
if (E1._ready === null) E1._ready = E1._initDriver()
return E1._ready
})
return K(y1, I1, I1), y1
}),
(j.prototype.setDriver = function D1(I1, E1, y1) {
var v1 = this
if (!L1(I1)) I1 = [I1]
var d0 = this._getSupportedDrivers(I1)
function Q0() {
v1._config.driver = v1.driver()
}
function N0(J2) {
return (
v1._extend(J2), Q0(), (v1._ready = v1._initStorage(v1._config)), v1._ready
)
}
function u0(J2) {
return function () {
var K4 = 0
function a4() {
while (K4 < J2.length) {
var r4 = J2[K4]
return (
K4++,
(v1._dbInfo = null),
(v1._ready = null),
v1.getDriver(r4).then(N0).catch(a4)
)
}
Q0()
var w9 = new Error('No available storage method found.')
return (v1._driverSet = H.reject(w9)), v1._driverSet
}
return a4()
}
}
var x0 =
this._driverSet !== null
? this._driverSet.catch(function () {
return H.resolve()
})
: H.resolve()
return (
(this._driverSet = x0
.then(function () {
var J2 = d0[0]
return (
(v1._dbInfo = null),
(v1._ready = null),
v1.getDriver(J2).then(function (K4) {
;(v1._driver = K4._driver),
Q0(),
v1._wrapLibraryMethodsWithReady(),
(v1._initDriver = u0(d0))
})
)
})
.catch(function () {
Q0()
var J2 = new Error('No available storage method found.')
return (v1._driverSet = H.reject(J2)), v1._driverSet
})),
K(this._driverSet, E1, y1),
this._driverSet
)
}),
(j.prototype.supports = function D1(I1) {
return !!b1[I1]
}),
(j.prototype._extend = function D1(I1) {
c2(this, I1)
}),
(j.prototype._getSupportedDrivers = function D1(I1) {
var E1 = []
for (var y1 = 0, v1 = I1.length; y1 < v1; y1++) {
var d0 = I1[y1]
if (this.supports(d0)) E1.push(d0)
}
return E1
}),
(j.prototype._wrapLibraryMethodsWithReady = function D1() {
for (var I1 = 0, E1 = J0.length; I1 < E1; I1++) F0(this, J0[I1])
}),
(j.prototype.createInstance = function D1(I1) {
return new j(I1)
}),
j
)
})(),
q2 = new L2()
W.exports = q2
},
{ 3: 3 },
],
},
{},
[4],
)(4)
})
})
var Py1 = _((yy1) => {
Object.defineProperty(yy1, '__esModule', { value: !0 })
var RB = X0(),
q94 = $y1(),
ZJ = kv(),
KY = RB.GLOBAL_OBJ
class hv {
static __initStatic() {
this.id = 'Offline'
}
constructor(I = {}) {
;(this.name = hv.id),
(this.maxStoredEvents = I.maxStoredEvents || 30),
(this.offlineEventStore = q94.createInstance({ name: 'sentry/offlineEventStore' }))
}
setupOnce(I, G) {
if (((this.hub = G()), 'addEventListener' in KY))
KY.addEventListener('online', () => {
this._sendEvents().catch(() => {
ZJ.DEBUG_BUILD && RB.logger.warn('could not send cached events')
})
})
let Z = (d) => {
if (this.hub && this.hub.getIntegration(hv)) {
if ('navigator' in KY && 'onLine' in KY.navigator && !KY.navigator.onLine)
return (
ZJ.DEBUG_BUILD &&
RB.logger.log('Event dropped due to being a offline - caching instead'),
this._cacheEvent(d)
.then((W) => this._enforceMaxEvents())
.catch((W) => {
ZJ.DEBUG_BUILD && RB.logger.warn('could not cache event while offline')
}),
null
)
}
return d
}
if (
((Z.id = this.name),
I(Z),
'navigator' in KY && 'onLine' in KY.navigator && KY.navigator.onLine)
)
this._sendEvents().catch(() => {
ZJ.DEBUG_BUILD && RB.logger.warn('could not send cached events')
})
}
async _cacheEvent(I) {
return this.offlineEventStore.setItem(RB.uuid4(), RB.normalize(I))
}
async _enforceMaxEvents() {
let I = []
return this.offlineEventStore
.iterate((G, Z, d) => {
I.push({ cacheKey: Z, event: G })
})
.then(() =>
this._purgeEvents(
I.sort((G, Z) => (Z.event.timestamp || 0) - (G.event.timestamp || 0))
.slice(this.maxStoredEvents < I.length ? this.maxStoredEvents : I.length)
.map((G) => G.cacheKey),
),
)
.catch((G) => {
ZJ.DEBUG_BUILD && RB.logger.warn('could not enforce max events')
})
}
async _purgeEvent(I) {
return this.offlineEventStore.removeItem(I)
}
async _purgeEvents(I) {
return Promise.all(I.map((G) => this._purgeEvent(G))).then()
}
async _sendEvents() {
return this.offlineEventStore.iterate((I, G, Z) => {
if (this.hub)
this.hub.captureEvent(I),
this._purgeEvent(G).catch((d) => {
ZJ.DEBUG_BUILD && RB.logger.warn('could not purge event from cache')
})
else ZJ.DEBUG_BUILD && RB.logger.warn('no hub found - could not send cached event')
})
}
}
hv.__initStatic()
yy1.Offline = hv
})
var ly1 = _((by1) => {
Object.defineProperty(by1, '__esModule', { value: !0 })
var xv = Y4(),
uy1 = X0(),
f94 = uy1.GLOBAL_OBJ,
Ty1 = 'ReportingObserver',
Oy1 = new WeakMap(),
R94 = (I = {}) => {
let G = I.types || ['crash', 'deprecation', 'intervention']
function Z(d) {
if (!Oy1.has(xv.getClient())) return
for (let W of d)
xv.withScope((w) => {
w.setExtra('url', W.url)
let B = `ReportingObserver [${W.type}]`,
C = 'No details available'
if (W.body) {
let V = {}
for (let A in W.body) V[A] = W.body[A]
if ((w.setExtra('body', V), W.type === 'crash')) {
let A = W.body
C = [A.crashId || '', A.reason || ''].join(' ').trim() || C
} else C = W.body.message || C
}
xv.captureMessage(`${B}: ${C}`)
})
}
return {
name: Ty1,
setupOnce() {
if (!uy1.supportsReportingObserver()) return
new f94.ReportingObserver(Z, { buffered: !0, types: G }).observe()
},
setup(d) {
Oy1.set(d, !0)
},
}
},
my1 = xv.defineIntegration(R94),
E94 = xv.convertIntegrationFnToClass(Ty1, my1)
by1.ReportingObserver = E94
by1.reportingObserverIntegration = my1
})
var py1 = _((cy1) => {
Object.defineProperty(cy1, '__esModule', { value: !0 })
var ky1 = Y4(),
jy1 = X0(),
hy1 = 'RewriteFrames',
S94 = (I = {}) => {
let G = I.root,
Z = I.prefix || 'app:///',
d =
I.iteratee ||
((B) => {
if (!B.filename) return B
let C =
/^[a-zA-Z]:\\/.test(B.filename) ||
(B.filename.includes('\\') && !B.filename.includes('/')),
V = /^\//.test(B.filename)
if (C || V) {
let A = C ? B.filename.replace(/^[a-zA-Z]:/, '').replace(/\\/g, '/') : B.filename,
X = G ? jy1.relative(G, A) : jy1.basename(A)
B.filename = `${Z}${X}`
}
return B
})
function W(B) {
try {
return {
...B,
exception: {
...B.exception,
values: B.exception.values.map((C) => ({
...C,
...(C.stacktrace && { stacktrace: w(C.stacktrace) }),
})),
},
}
} catch (C) {
return B
}
}
function w(B) {
return { ...B, frames: B && B.frames && B.frames.map((C) => d(C)) }
}
return {
name: hy1,
setupOnce() {},
processEvent(B) {
let C = B
if (B.exception && Array.isArray(B.exception.values)) C = W(C)
return C
},
}
},
xy1 = ky1.defineIntegration(S94),
L94 = ky1.convertIntegrationFnToClass(hy1, xy1)
cy1.RewriteFrames = L94
cy1.rewriteFramesIntegration = xy1
})
var sy1 = _((ry1) => {
Object.defineProperty(ry1, '__esModule', { value: !0 })
var iy1 = Y4(),
ny1 = 'SessionTiming',
P94 = () => {
let I = Date.now()
return {
name: ny1,
setupOnce() {},
processEvent(G) {
let Z = Date.now()
return {
...G,
extra: {
...G.extra,
['session:start']: I,
['session:duration']: Z - I,
['session:end']: Z,
},
}
},
}
},
ay1 = iy1.defineIntegration(P94),
O94 = iy1.convertIntegrationFnToClass(ny1, ay1)
ry1.SessionTiming = O94
ry1.sessionTimingIntegration = ay1
})
var ty1 = _((ey1) => {
Object.defineProperty(ey1, '__esModule', { value: !0 })
var m94 = Y4(),
oy1 = 'Transaction',
b94 = () => {
return {
name: oy1,
setupOnce() {},
processEvent(I) {
let G = j94(I)
for (let Z = G.length - 1; Z >= 0; Z--) {
let d = G[Z]
if (d.in_app === !0) {
I.transaction = k94(d)
break
}
}
return I
},
}
},
l94 = m94.convertIntegrationFnToClass(oy1, b94)
function j94(I) {
let G = I.exception && I.exception.values && I.exception.values[0]
return (G && G.stacktrace && G.stacktrace.frames) || []
}
function k94(I) {
return I.module || I.function ? `${I.module || '?'}/${I.function || '?'}` : '<unknown>'
}
ey1.Transaction = l94
})
var CP1 = _((BP1) => {
Object.defineProperty(BP1, '__esModule', { value: !0 })
var pV = Y4(),
EB = X0(),
Ob = kv(),
IP1 = 'HttpClient',
x94 = (I = {}) => {
let G = { failedRequestStatusCodes: [[500, 599]], failedRequestTargets: [/.*/], ...I }
return {
name: IP1,
setupOnce() {},
setup(Z) {
e94(Z, G), t94(Z, G)
},
}
},
GP1 = pV.defineIntegration(x94),
c94 = pV.convertIntegrationFnToClass(IP1, GP1)
function p94(I, G, Z, d) {
if (dP1(I, Z.status, Z.url)) {
let W = I34(G, d),
w,
B,
C,
V
if (wP1())
[{ headers: w, cookies: C }, { headers: B, cookies: V }] = [
{ cookieHeader: 'Cookie', obj: W },
{ cookieHeader: 'Set-Cookie', obj: Z },
].map(({ cookieHeader: X, obj: Y }) => {
let H = a94(Y.headers),
J
try {
let K = H[X] || H[X.toLowerCase()] || void 0
if (K) J = ZP1(K)
} catch (K) {
Ob.DEBUG_BUILD && EB.logger.log(`Could not extract cookies from header ${X}`)
}
return { headers: H, cookies: J }
})
let A = WP1({
url: W.url,
method: W.method,
status: Z.status,
requestHeaders: w,
responseHeaders: B,
requestCookies: C,
responseCookies: V,
})
pV.captureEvent(A)
}
}
function i94(I, G, Z, d) {
if (dP1(I, G.status, G.responseURL)) {
let W, w, B
if (wP1()) {
try {
let V = G.getResponseHeader('Set-Cookie') || G.getResponseHeader('set-cookie') || void 0
if (V) w = ZP1(V)
} catch (V) {
Ob.DEBUG_BUILD && EB.logger.log('Could not extract cookies from response headers')
}
try {
B = r94(G)
} catch (V) {
Ob.DEBUG_BUILD && EB.logger.log('Could not extract headers from response')
}
W = d
}
let C = WP1({
url: G.responseURL,
method: Z,
status: G.status,
requestHeaders: W,
responseHeaders: B,
responseCookies: w,
})
pV.captureEvent(C)
}
}
function n94(I) {
if (I) {
let G = I['Content-Length'] || I['content-length']
if (G) return parseInt(G, 10)
}
return
}
function ZP1(I) {
return I.split('; ').reduce((G, Z) => {
let [d, W] = Z.split('=')
return (G[d] = W), G
}, {})
}
function a94(I) {
let G = {}
return (
I.forEach((Z, d) => {
G[d] = Z
}),
G
)
}
function r94(I) {
let G = I.getAllResponseHeaders()
if (!G) return {}
return G.split(
`\r
`,
).reduce((Z, d) => {
let [W, w] = d.split(': ')
return (Z[W] = w), Z
}, {})
}
function s94(I, G) {
return I.some((Z) => {
if (typeof Z === 'string') return G.includes(Z)
return Z.test(G)
})
}
function o94(I, G) {
return I.some((Z) => {
if (typeof Z === 'number') return Z === G
return G >= Z[0] && G <= Z[1]
})
}
function e94(I, G) {
if (!EB.supportsNativeFetch()) return
EB.addFetchInstrumentationHandler((Z) => {
if (pV.getClient() !== I) return
let { response: d, args: W } = Z,
[w, B] = W
if (!d) return
p94(G, w, d, B)
})
}
function t94(I, G) {
if (!('XMLHttpRequest' in EB.GLOBAL_OBJ)) return
EB.addXhrInstrumentationHandler((Z) => {
if (pV.getClient() !== I) return
let d = Z.xhr,
W = d[EB.SENTRY_XHR_DATA_KEY]
if (!W) return
let { method: w, request_headers: B } = W
try {
i94(G, d, w, B)
} catch (C) {
Ob.DEBUG_BUILD &&
EB.logger.warn('Error while extracting response event form XHR response', C)
}
})
}
function dP1(I, G, Z) {
return (
o94(I.failedRequestStatusCodes, G) &&
s94(I.failedRequestTargets, Z) &&
!pV.isSentryRequestUrl(Z, pV.getClient())
)
}
function WP1(I) {
let G = `HTTP Client Error with status code: ${I.status}`,
Z = {
message: G,
exception: { values: [{ type: 'Error', value: G }] },
request: {
url: I.url,
method: I.method,
headers: I.requestHeaders,
cookies: I.requestCookies,
},
contexts: {
response: {
status_code: I.status,
headers: I.responseHeaders,
cookies: I.responseCookies,
body_size: n94(I.responseHeaders),
},
},
}
return EB.addExceptionMechanism(Z, { type: 'http.client', handled: !1 }), Z
}
function I34(I, G) {
if (!G && I instanceof Request) return I
if (I instanceof Request && I.bodyUsed) return I
return new Request(I, G)
}
function wP1() {
let I = pV.getClient()
return I ? Boolean(I.getOptions().sendDefaultPii) : !1
}
BP1.HttpClient = c94
BP1.httpClientIntegration = GP1
})
var DP1 = _((_P1) => {
Object.defineProperty(_P1, '__esModule', { value: !0 })
var VP1 = Y4(),
y21 = X0(),
$21 = y21.GLOBAL_OBJ,
d34 = 7,
AP1 = 'ContextLines',
W34 = (I = {}) => {
let G = I.frameContextLines != null ? I.frameContextLines : d34
return {
name: AP1,
setupOnce() {},
processEvent(Z) {
return B34(Z, G)
},
}
},
XP1 = VP1.defineIntegration(W34),
w34 = VP1.convertIntegrationFnToClass(AP1, XP1)
function B34(I, G) {
let Z = $21.document,
d = $21.location && y21.stripUrlQueryAndFragment($21.location.href)
if (!Z || !d) return I
let W = I.exception && I.exception.values
if (!W || !W.length) return I
let w = Z.documentElement.innerHTML
if (!w) return I
let B = [
'<!DOCTYPE html>',
'<html>',
...w.split(`
`),
'</html>',
]
return (
W.forEach((C) => {
let V = C.stacktrace
if (V && V.frames) V.frames = V.frames.map((A) => YP1(A, B, d, G))
}),
I
)
}
function YP1(I, G, Z, d) {
if (I.filename !== Z || !I.lineno || !G.length) return I
return y21.addContextToFrame(G, I, d), I
}
_P1.ContextLines = w34
_P1.applySourceContextToFrame = YP1
_P1.contextLinesIntegration = XP1
})
var fP1 = _((UP1) => {
Object.defineProperty(UP1, '__esModule', { value: !0 })
var HP1 = Vy1(),
FP1 = Dy1(),
JP1 = fy1(),
KP1 = Sy1(),
X34 = Py1(),
gP1 = ly1(),
NP1 = py1(),
zP1 = sy1(),
Y34 = ty1(),
QP1 = CP1(),
qP1 = DP1()
UP1.CaptureConsole = HP1.CaptureConsole
UP1.captureConsoleIntegration = HP1.captureConsoleIntegration
UP1.Debug = FP1.Debug
UP1.debugIntegration = FP1.debugIntegration
UP1.Dedupe = JP1.Dedupe
UP1.dedupeIntegration = JP1.dedupeIntegration
UP1.ExtraErrorData = KP1.ExtraErrorData
UP1.extraErrorDataIntegration = KP1.extraErrorDataIntegration
UP1.Offline = X34.Offline
UP1.ReportingObserver = gP1.ReportingObserver
UP1.reportingObserverIntegration = gP1.reportingObserverIntegration
UP1.RewriteFrames = NP1.RewriteFrames
UP1.rewriteFramesIntegration = NP1.rewriteFramesIntegration
UP1.SessionTiming = zP1.SessionTiming
UP1.sessionTimingIntegration = zP1.sessionTimingIntegration
UP1.Transaction = Y34.Transaction
UP1.HttpClient = QP1.HttpClient
UP1.httpClientIntegration = QP1.httpClientIntegration
UP1.ContextLines = qP1.ContextLines
UP1.contextLinesIntegration = qP1.contextLinesIntegration
})
var ub = _((RP1) => {
Object.defineProperty(RP1, '__esModule', { value: !0 })
var y34 = [
['january', '1'],
['february', '2'],
['march', '3'],
['april', '4'],
['may', '5'],
['june', '6'],
['july', '7'],
['august', '8'],
['september', '9'],
['october', '10'],
['november', '11'],
['december', '12'],
['jan', '1'],
['feb', '2'],
['mar', '3'],
['apr', '4'],
['may', '5'],
['jun', '6'],
['jul', '7'],
['aug', '8'],
['sep', '9'],
['oct', '10'],
['nov', '11'],
['dec', '12'],
['sunday', '0'],
['monday', '1'],
['tuesday', '2'],
['wednesday', '3'],
['thursday', '4'],
['friday', '5'],
['saturday', '6'],
['sun', '0'],
['mon', '1'],
['tue', '2'],
['wed', '3'],
['thu', '4'],
['fri', '5'],
['sat', '6'],
]
function P34(I) {
return y34.reduce((G, [Z, d]) => G.replace(new RegExp(Z, 'gi'), d), I)
}
RP1.replaceCronNames = P34
})
var LP1 = _((SP1) => {
Object.defineProperty(SP1, '__esModule', { value: !0 })
var EP1 = Y4(),
vP1 = ub(),
MP1 = 'Automatic instrumentation of CronJob only supports crontab string'
function u34(I, G) {
let Z = !1
return new Proxy(I, {
construct(d, W) {
let [w, B, C, V, A, ...X] = W
if (typeof w !== 'string') throw new Error(MP1)
if (Z) throw new Error(`A job named '${G}' has already been scheduled`)
Z = !0
let Y = vP1.replaceCronNames(w)
function H(J, K) {
return EP1.withMonitor(
G,
() => {
return B(J, K)
},
{ schedule: { type: 'crontab', value: Y }, timezone: A || void 0 },
)
}
return new d(w, H, C, V, A, ...X)
},
get(d, W) {
if (W === 'from')
return (w) => {
let { cronTime: B, onTick: C, timeZone: V } = w
if (typeof B !== 'string') throw new Error(MP1)
if (Z) throw new Error(`A job named '${G}' has already been scheduled`)
Z = !0
let A = vP1.replaceCronNames(B)
return (
(w.onTick = (X, Y) => {
return EP1.withMonitor(
G,
() => {
return C(X, Y)
},
{ schedule: { type: 'crontab', value: A }, timezone: V || void 0 },
)
}),
d.from(w)
)
}
else return d[W]
},
})
}
SP1.instrumentCron = u34
})
var PP1 = _((yP1) => {
var { _optionalChain: $P1 } = X0()
Object.defineProperty(yP1, '__esModule', { value: !0 })
var m34 = Y4(),
b34 = ub()
function l34(I) {
return new Proxy(I, {
get(G, Z) {
if (Z === 'schedule' && G.schedule)
return new Proxy(G.schedule, {
apply(d, W, w) {
let [B, , C] = w
if (!$P1([C, 'optionalAccess', (V) => V.name]))
throw new Error(
'Missing "name" for scheduled job. A name is required for Sentry check-in monitoring.',
)
return m34.withMonitor(
C.name,
() => {
return d.apply(W, w)
},
{
schedule: { type: 'crontab', value: b34.replaceCronNames(B) },
timezone: $P1([C, 'optionalAccess', (V) => V.timezone]),
},
)
},
})
else return G[Z]
},
})
}
yP1.instrumentNodeCron = l34
})
var uP1 = _((OP1) => {
Object.defineProperty(OP1, '__esModule', { value: !0 })
var k34 = Y4(),
h34 = ub()
function x34(I) {
return new Proxy(I, {
get(G, Z) {
if (Z === 'scheduleJob')
return new Proxy(G.scheduleJob, {
apply(d, W, w) {
let [B, C] = w
if (typeof B !== 'string' || typeof C !== 'string')
throw new Error(
"Automatic instrumentation of 'node-schedule' requires the first parameter of 'scheduleJob' to be a job name string and the second parameter to be a crontab string",
)
let V = B,
A = C
return k34.withMonitor(
V,
() => {
return d.apply(W, w)
},
{ schedule: { type: 'crontab', value: h34.replaceCronNames(A) } },
)
},
})
return G[Z]
},
})
}
OP1.instrumentNodeSchedule = x34
})
var kP1 = _((jP1) => {
Object.defineProperty(jP1, '__esModule', { value: !0 })
var z2 = Y4(),
p34 = kS1(),
i34 = V21(),
n34 = Y21(),
cv = f21(),
P21 = X0(),
a34 = L$1(),
TP1 = U21(),
r34 = b$1(),
s34 = n$1(),
o34 = Zy1(),
e34 = Wy1(),
gY = fP1(),
t34 = _b(),
I64 = Ub(),
G64 = Rb(),
Z64 = zb(),
d64 = Fb(),
W64 = Db(),
w64 = Nb(),
B64 = Eb(),
C64 = $b(),
mP1 = S21(),
bP1 = Mb(),
lP1 = Jb(),
V64 = M21(),
A64 = LP1(),
X64 = PP1(),
Y64 = uP1(),
_64 = TP1.createGetModuleFromFilename(),
D64 = { ...z2.Integrations, ...o34, ...e34 },
H64 = {
instrumentCron: A64.instrumentCron,
instrumentNodeCron: X64.instrumentNodeCron,
instrumentNodeSchedule: Y64.instrumentNodeSchedule,
}
jP1.Hub = z2.Hub
jP1.SDK_VERSION = z2.SDK_VERSION
jP1.SEMANTIC_ATTRIBUTE_SENTRY_OP = z2.SEMANTIC_ATTRIBUTE_SENTRY_OP
jP1.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN = z2.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN
jP1.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE = z2.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE
jP1.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE = z2.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE
jP1.Scope = z2.Scope
jP1.addBreadcrumb = z2.addBreadcrumb
jP1.addEventProcessor = z2.addEventProcessor
jP1.addGlobalEventProcessor = z2.addGlobalEventProcessor
jP1.addIntegration = z2.addIntegration
jP1.captureCheckIn = z2.captureCheckIn
jP1.captureEvent = z2.captureEvent
jP1.captureException = z2.captureException
jP1.captureMessage = z2.captureMessage
jP1.captureSession = z2.captureSession
jP1.close = z2.close
jP1.configureScope = z2.configureScope
jP1.continueTrace = z2.continueTrace
jP1.createTransport = z2.createTransport
jP1.endSession = z2.endSession
jP1.extractTraceparentData = z2.extractTraceparentData
jP1.flush = z2.flush
jP1.functionToStringIntegration = z2.functionToStringIntegration
jP1.getActiveSpan = z2.getActiveSpan
jP1.getActiveTransaction = z2.getActiveTransaction
jP1.getClient = z2.getClient
jP1.getCurrentHub = z2.getCurrentHub
jP1.getCurrentScope = z2.getCurrentScope
jP1.getGlobalScope = z2.getGlobalScope
jP1.getHubFromCarrier = z2.getHubFromCarrier
jP1.getIsolationScope = z2.getIsolationScope
jP1.getSpanStatusFromHttpCode = z2.getSpanStatusFromHttpCode
jP1.inboundFiltersIntegration = z2.inboundFiltersIntegration
jP1.isInitialized = z2.isInitialized
jP1.lastEventId = z2.lastEventId
jP1.linkedErrorsIntegration = z2.linkedErrorsIntegration
jP1.makeMain = z2.makeMain
jP1.metrics = z2.metrics
jP1.parameterize = z2.parameterize
jP1.requestDataIntegration = z2.requestDataIntegration
jP1.runWithAsyncContext = z2.runWithAsyncContext
jP1.setContext = z2.setContext
jP1.setCurrentClient = z2.setCurrentClient
jP1.setExtra = z2.setExtra
jP1.setExtras = z2.setExtras
jP1.setHttpStatus = z2.setHttpStatus
jP1.setMeasurement = z2.setMeasurement
jP1.setTag = z2.setTag
jP1.setTags = z2.setTags
jP1.setUser = z2.setUser
jP1.spanStatusfromHttpCode = z2.spanStatusfromHttpCode
jP1.startActiveSpan = z2.startActiveSpan
jP1.startInactiveSpan = z2.startInactiveSpan
jP1.startSession = z2.startSession
jP1.startSpan = z2.startSpan
jP1.startSpanManual = z2.startSpanManual
jP1.startTransaction = z2.startTransaction
jP1.trace = z2.trace
jP1.withActiveSpan = z2.withActiveSpan
jP1.withIsolationScope = z2.withIsolationScope
jP1.withMonitor = z2.withMonitor
jP1.withScope = z2.withScope
jP1.autoDiscoverNodePerformanceMonitoringIntegrations =
p34.autoDiscoverNodePerformanceMonitoringIntegrations
jP1.NodeClient = i34.NodeClient
jP1.makeNodeTransport = n34.makeNodeTransport
jP1.defaultIntegrations = cv.defaultIntegrations
jP1.defaultStackParser = cv.defaultStackParser
jP1.getDefaultIntegrations = cv.getDefaultIntegrations
jP1.getSentryRelease = cv.getSentryRelease
jP1.init = cv.init
jP1.DEFAULT_USER_INCLUDES = P21.DEFAULT_USER_INCLUDES
jP1.addRequestDataToEvent = P21.addRequestDataToEvent
jP1.extractRequestData = P21.extractRequestData
jP1.deepReadDirSync = a34.deepReadDirSync
jP1.createGetModuleFromFilename = TP1.createGetModuleFromFilename
jP1.enableAnrDetection = r34.enableAnrDetection
jP1.Handlers = s34
jP1.captureConsoleIntegration = gY.captureConsoleIntegration
jP1.debugIntegration = gY.debugIntegration
jP1.dedupeIntegration = gY.dedupeIntegration
jP1.extraErrorDataIntegration = gY.extraErrorDataIntegration
jP1.httpClientIntegration = gY.httpClientIntegration
jP1.reportingObserverIntegration = gY.reportingObserverIntegration
jP1.rewriteFramesIntegration = gY.rewriteFramesIntegration
jP1.sessionTimingIntegration = gY.sessionTimingIntegration
jP1.consoleIntegration = t34.consoleIntegration
jP1.onUncaughtExceptionIntegration = I64.onUncaughtExceptionIntegration
jP1.onUnhandledRejectionIntegration = G64.onUnhandledRejectionIntegration
jP1.modulesIntegration = Z64.modulesIntegration
jP1.contextLinesIntegration = d64.contextLinesIntegration
jP1.nodeContextIntegration = W64.nodeContextIntegration
jP1.localVariablesIntegration = w64.localVariablesIntegration
jP1.spotlightIntegration = B64.spotlightIntegration
jP1.anrIntegration = C64.anrIntegration
jP1.hapiErrorPlugin = mP1.hapiErrorPlugin
jP1.hapiIntegration = mP1.hapiIntegration
jP1.Undici = bP1.Undici
jP1.nativeNodeFetchintegration = bP1.nativeNodeFetchintegration
jP1.Http = lP1.Http
jP1.httpIntegration = lP1.httpIntegration
jP1.trpcMiddleware = V64.trpcMiddleware
jP1.Integrations = D64
jP1.cron = H64
jP1.getModuleFromFilename = _64
})
var HT1 = _((RM9, DT1) => {
DT1.exports = function I(G) {
return G.map(function (Z) {
if (Z && typeof Z === 'object') return Z.op.replace(/(.)/g, '\\$1')
if (/["\s]/.test(Z) && !/'/.test(Z)) return "'" + Z.replace(/(['\\])/g, '\\$1') + "'"
if (/["'\s]/.test(Z)) return '"' + Z.replace(/(["\\$`!])/g, '\\$1') + '"'
return String(Z).replace(/([A-Za-z]:)?([#!"$&'()*,:;<=>?@[\\\]^`{|}])/g, '$1\\$2')
}).join(' ')
}
})
var QT1 = _((EM9, zT1) => {
var NT1 =
'(?:' +
[
'\\|\\|',
'\\&\\&',
';;',
'\\|\\&',
'\\<\\(',
'\\<\\<\\<',
'>>',
'>\\&',
'<\\&',
'[&;()|<>]',
].join('|') +
')',
FT1 = new RegExp('^' + NT1 + '$'),
JT1 = '|&;()<> \\t',
Sw4 = '"((\\\\"|[^"])*?)"',
Lw4 = "'((\\\\'|[^'])*?)'",
$w4 = /^#$/,
KT1 = "'",
gT1 = '"',
c21 = '$',
BJ = '',
yw4 = 4294967296
for (p21 = 0; p21 < 4; p21++) BJ += (yw4 * Math.random()).toString(16)
var p21,
Pw4 = new RegExp('^' + BJ)
function Ow4(I, G) {
var Z = G.lastIndex,
d = [],
W
while ((W = G.exec(I))) if ((d.push(W), G.lastIndex === W.index)) G.lastIndex += 1
return (G.lastIndex = Z), d
}
function uw4(I, G, Z) {
var d = typeof I === 'function' ? I(Z) : I[Z]
if (typeof d === 'undefined' && Z != '') d = ''
else if (typeof d === 'undefined') d = '$'
if (typeof d === 'object') return G + BJ + JSON.stringify(d) + BJ
return G + d
}
function Tw4(I, G, Z) {
if (!Z) Z = {}
var d = Z.escape || '\\',
W = '(\\' + d + `['"` + JT1 + `]|[^\\s'"` + JT1 + '])+',
w = new RegExp(['(' + NT1 + ')', '(' + W + '|' + Sw4 + '|' + Lw4 + ')+'].join('|'), 'g'),
B = Ow4(I, w)
if (B.length === 0) return []
if (!G) G = {}
var C = !1
return B.map(function (V) {
var A = V[0]
if (!A || C) return
if (FT1.test(A)) return { op: A }
var X = !1,
Y = !1,
H = '',
J = !1,
K
function g() {
K += 1
var S,
$,
L = A.charAt(K)
if (L === '{') {
if (((K += 1), A.charAt(K) === '}'))
throw new Error('Bad substitution: ' + A.slice(K - 2, K + 1))
if (((S = A.indexOf('}', K)), S < 0)) throw new Error('Bad substitution: ' + A.slice(K))
;($ = A.slice(K, S)), (K = S)
} else if (/[*@#?$!_-]/.test(L)) ($ = L), (K += 1)
else {
var T = A.slice(K)
if (((S = T.match(/[^\w\d_]/)), !S)) ($ = T), (K = A.length)
else ($ = T.slice(0, S.index)), (K += S.index - 1)
}
return uw4(G, '', $)
}
for (K = 0; K < A.length; K++) {
var z = A.charAt(K)
if (((J = J || (!X && (z === '*' || z === '?'))), Y)) (H += z), (Y = !1)
else if (X)
if (z === X) X = !1
else if (X == KT1) H += z
else if (z === d)
if (((K += 1), (z = A.charAt(K)), z === gT1 || z === d || z === c21)) H += z
else H += d + z
else if (z === c21) H += g()
else H += z
else if (z === gT1 || z === KT1) X = z
else if (FT1.test(z)) return { op: A }
else if ($w4.test(z)) {
C = !0
var f = { comment: I.slice(V.index + K + 1) }
if (H.length) return [H, f]
return [f]
} else if (z === d) Y = !0
else if (z === c21) H += g()
else H += z
}
if (J) return { op: 'glob', pattern: H }
return H
}).reduce(function (V, A) {
return typeof A === 'undefined' ? V : V.concat(A)
}, [])
}
zT1.exports = function I(G, Z, d) {
var W = Tw4(G, Z, d)
if (typeof Z !== 'function') return W
return W.reduce(function (w, B) {
if (typeof B === 'object') return w.concat(B)
var C = B.split(RegExp('(' + BJ + '.*?' + BJ + ')', 'g'))
if (C.length === 1) return w.concat(C[0])
return w.concat(
C.filter(Boolean).map(function (V) {
if (Pw4.test(V)) return JSON.parse(V.split(BJ)[1])
return V
}),
)
}, [])
}
})
var i21 = _((mw4) => {
mw4.quote = HT1()
mw4.parse = QT1()
})
var M1 = _((AB4) => {
var sv = Symbol.for('react.element'),
aw4 = Symbol.for('react.portal'),
rw4 = Symbol.for('react.fragment'),
sw4 = Symbol.for('react.strict_mode'),
ow4 = Symbol.for('react.profiler'),
ew4 = Symbol.for('react.provider'),
tw4 = Symbol.for('react.context'),
IB4 = Symbol.for('react.forward_ref'),
GB4 = Symbol.for('react.suspense'),
ZB4 = Symbol.for('react.memo'),
dB4 = Symbol.for('react.lazy'),
MT1 = Symbol.iterator
function WB4(I) {
if (I === null || typeof I !== 'object') return null
return (I = (MT1 && I[MT1]) || I['@@iterator']), typeof I === 'function' ? I : null
}
var $T1 = {
isMounted: function () {
return !1
},
enqueueForceUpdate: function () {},
enqueueReplaceState: function () {},
enqueueSetState: function () {},
},
yT1 = Object.assign,
PT1 = {}
function Oz(I, G, Z) {
;(this.props = I), (this.context = G), (this.refs = PT1), (this.updater = Z || $T1)
}
Oz.prototype.isReactComponent = {}
Oz.prototype.setState = function (I, G) {
if (typeof I !== 'object' && typeof I !== 'function' && I != null)
throw Error(
'setState(...): takes an object of state variables to update or a function which returns an object of state variables.',
)
this.updater.enqueueSetState(this, I, G, 'setState')
}
Oz.prototype.forceUpdate = function (I) {
this.updater.enqueueForceUpdate(this, I, 'forceUpdate')
}
function OT1() {}
OT1.prototype = Oz.prototype
function G41(I, G, Z) {
;(this.props = I), (this.context = G), (this.refs = PT1), (this.updater = Z || $T1)
}
var Z41 = (G41.prototype = new OT1())
Z41.constructor = G41
yT1(Z41, Oz.prototype)
Z41.isPureReactComponent = !0
var ST1 = Array.isArray,
uT1 = Object.prototype.hasOwnProperty,
d41 = { current: null },
TT1 = { key: !0, ref: !0, __self: !0, __source: !0 }
function mT1(I, G, Z) {
var d,
W = {},
w = null,
B = null
if (G != null)
for (d in (G.ref !== void 0 && (B = G.ref), G.key !== void 0 && (w = '' + G.key), G))
uT1.call(G, d) && !TT1.hasOwnProperty(d) && (W[d] = G[d])
var C = arguments.length - 2
if (C === 1) W.children = Z
else if (1 < C) {
for (var V = Array(C), A = 0; A < C; A++) V[A] = arguments[A + 2]
W.children = V
}
if (I && I.defaultProps) for (d in ((C = I.defaultProps), C)) W[d] === void 0 && (W[d] = C[d])
return { $$typeof: sv, type: I, key: w, ref: B, props: W, _owner: d41.current }
}
function wB4(I, G) {
return { $$typeof: sv, type: I.type, key: G, ref: I.ref, props: I.props, _owner: I._owner }
}
function W41(I) {
return typeof I === 'object' && I !== null && I.$$typeof === sv
}
function BB4(I) {
var G = { '=': '=0', ':': '=2' }
return (
'$' +
I.replace(/[=:]/g, function (Z) {
return G[Z]
})
)
}
var LT1 = /\/+/g
function I41(I, G) {
return typeof I === 'object' && I !== null && I.key != null ? BB4('' + I.key) : G.toString(36)
}
function fl(I, G, Z, d, W) {
var w = typeof I
if (w === 'undefined' || w === 'boolean') I = null
var B = !1
if (I === null) B = !0
else
switch (w) {
case 'string':
case 'number':
B = !0
break
case 'object':
switch (I.$$typeof) {
case sv:
case aw4:
B = !0
}
}
if (B)
return (
(B = I),
(W = W(B)),
(I = d === '' ? '.' + I41(B, 0) : d),
ST1(W)
? ((Z = ''),
I != null && (Z = I.replace(LT1, '$&/') + '/'),
fl(W, G, Z, '', function (A) {
return A
}))
: W != null &&
(W41(W) &&
(W = wB4(
W,
Z +
(!W.key || (B && B.key === W.key) ? '' : ('' + W.key).replace(LT1, '$&/') + '/') +
I,
)),
G.push(W)),
1
)
if (((B = 0), (d = d === '' ? '.' : d + ':'), ST1(I)))
for (var C = 0; C < I.length; C++) {
w = I[C]
var V = d + I41(w, C)
B += fl(w, G, Z, V, W)
}
else if (((V = WB4(I)), typeof V === 'function'))
for (I = V.call(I), C = 0; !(w = I.next()).done; )
(w = w.value), (V = d + I41(w, C++)), (B += fl(w, G, Z, V, W))
else if (w === 'object')
throw (
((G = String(I)),
Error(
'Objects are not valid as a React child (found: ' +
(G === '[object Object]' ? 'object with keys {' + Object.keys(I).join(', ') + '}' : G) +
'). If you meant to render a collection of children, use an array instead.',
))
)
return B
}
function Ul(I, G, Z) {
if (I == null) return I
var d = [],
W = 0
return (
fl(I, d, '', '', function (w) {
return G.call(Z, w, W++)
}),
d
)
}
function CB4(I) {
if (I._status === -1) {
var G = I._result
;(G = G()),
G.then(
function (Z) {
if (I._status === 0 || I._status === -1) (I._status = 1), (I._result = Z)
},
function (Z) {
if (I._status === 0 || I._status === -1) (I._status = 2), (I._result = Z)
},
),
I._status === -1 && ((I._status = 0), (I._result = G))
}
if (I._status === 1) return I._result.default
throw I._result
}
var WI = { current: null },
Rl = { transition: null },
VB4 = { ReactCurrentDispatcher: WI, ReactCurrentBatchConfig: Rl, ReactCurrentOwner: d41 }
function bT1() {
throw Error('act(...) is not supported in production builds of React.')
}
AB4.Children = {
map: Ul,
forEach: function (I, G, Z) {
Ul(
I,
function () {
G.apply(this, arguments)
},
Z,
)
},
count: function (I) {
var G = 0
return (
Ul(I, function () {
G++
}),
G
)
},
toArray: function (I) {
return (
Ul(I, function (G) {
return G
}) || []
)
},
only: function (I) {
if (!W41(I))
throw Error('React.Children.only expected to receive a single React element child.')
return I
},
}
AB4.Component = Oz
AB4.Fragment = rw4
AB4.Profiler = ow4
AB4.PureComponent = G41
AB4.StrictMode = sw4
AB4.Suspense = GB4
AB4.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = VB4
AB4.act = bT1
AB4.cloneElement = function (I, G, Z) {
if (I === null || I === void 0)
throw Error(
'React.cloneElement(...): The argument must be a React element, but you passed ' + I + '.',
)
var d = yT1({}, I.props),
W = I.key,
w = I.ref,
B = I._owner
if (G != null) {
if (
(G.ref !== void 0 && ((w = G.ref), (B = d41.current)),
G.key !== void 0 && (W = '' + G.key),
I.type && I.type.defaultProps)
)
var C = I.type.defaultProps
for (V in G)
uT1.call(G, V) &&
!TT1.hasOwnProperty(V) &&
(d[V] = G[V] === void 0 && C !== void 0 ? C[V] : G[V])
}
var V = arguments.length - 2
if (V === 1) d.children = Z
else if (1 < V) {
C = Array(V)
for (var A = 0; A < V; A++) C[A] = arguments[A + 2]
d.children = C
}
return { $$typeof: sv, type: I.type, key: W, ref: w, props: d, _owner: B }
}
AB4.createContext = function (I) {
return (
(I = {
$$typeof: tw4,
_currentValue: I,
_currentValue2: I,
_threadCount: 0,
Provider: null,
Consumer: null,
_defaultValue: null,
_globalName: null,
}),
(I.Provider = { $$typeof: ew4, _context: I }),
(I.Consumer = I)
)
}
AB4.createElement = mT1
AB4.createFactory = function (I) {
var G = mT1.bind(null, I)
return (G.type = I), G
}
AB4.createRef = function () {
return { current: null }
}
AB4.forwardRef = function (I) {
return { $$typeof: IB4, render: I }
}
AB4.isValidElement = W41
AB4.lazy = function (I) {
return { $$typeof: dB4, _payload: { _status: -1, _result: I }, _init: CB4 }
}
AB4.memo = function (I, G) {
return { $$typeof: ZB4, type: I, compare: G === void 0 ? null : G }
}
AB4.startTransition = function (I) {
var G = Rl.transition
Rl.transition = {}
try {
I()
} finally {
Rl.transition = G
}
}
AB4.unstable_act = bT1
AB4.useCallback = function (I, G) {
return WI.current.useCallback(I, G)
}
AB4.useContext = function (I) {
return WI.current.useContext(I)
}
AB4.useDebugValue = function () {}
AB4.useDeferredValue = function (I) {
return WI.current.useDeferredValue(I)
}
AB4.useEffect = function (I, G) {
return WI.current.useEffect(I, G)
}
AB4.useId = function () {
return WI.current.useId()
}
AB4.useImperativeHandle = function (I, G, Z) {
return WI.current.useImperativeHandle(I, G, Z)
}
AB4.useInsertionEffect = function (I, G) {
return WI.current.useInsertionEffect(I, G)
}
AB4.useLayoutEffect = function (I, G) {
return WI.current.useLayoutEffect(I, G)
}
AB4.useMemo = function (I, G) {
return WI.current.useMemo(I, G)
}
AB4.useReducer = function (I, G, Z) {
return WI.current.useReducer(I, G, Z)
}
AB4.useRef = function (I) {
return WI.current.useRef(I)
}
AB4.useState = function (I) {
return WI.current.useState(I)
}
AB4.useSyncExternalStore = function (I, G, Z) {
return WI.current.useSyncExternalStore(I, G, Z)
}
AB4.useTransition = function () {
return WI.current.useTransition()
}
AB4.version = '18.3.1'
})
var v7 = _((sT1) => {
Object.defineProperty(sT1, '__esModule', { value: !0 })
sT1.Log = sT1.LogLevel = void 0
var CC4 = ' DEBUG ',
VC4 = ' INFO ',
AC4 = ' WARN ',
XC4 = ' ERROR '
function Ml(I) {
return I.unshift('[Statsig]'), I
}
sT1.LogLevel = { None: 0, Error: 1, Warn: 2, Info: 3, Debug: 4 }
class CJ {
static info(...I) {
if (CJ.level >= sT1.LogLevel.Info) console.info(VC4, ...Ml(I))
}
static debug(...I) {
if (CJ.level >= sT1.LogLevel.Debug) console.debug(CC4, ...Ml(I))
}
static warn(...I) {
if (CJ.level >= sT1.LogLevel.Warn) console.warn(AC4, ...Ml(I))
}
static error(...I) {
if (CJ.level >= sT1.LogLevel.Error) console.error(XC4, ...Ml(I))
}
}
sT1.Log = CJ
CJ.level = sT1.LogLevel.Warn
})
var VJ = _((Gm1) => {
var A41, X41, Y41
Object.defineProperty(Gm1, '__esModule', { value: !0 })
Gm1._getInstance = Gm1._getStatsigGlobalFlag = Gm1._getStatsigGlobal = void 0
var YC4 = v7(),
_C4 = () => {
return __STATSIG__ ? __STATSIG__ : Sl
}
Gm1._getStatsigGlobal = _C4
var DC4 = (I) => {
return Gm1._getStatsigGlobal()[I]
}
Gm1._getStatsigGlobalFlag = DC4
var HC4 = (I) => {
let G = Gm1._getStatsigGlobal()
if (!I) {
if (G.instances && Object.keys(G.instances).length > 1)
YC4.Log.warn(
'Call made to Statsig global instance without an SDK key but there is more than one client instance. If you are using mulitple clients, please specify the SDK key.',
)
return G.firstInstance
}
return G.instances && G.instances[I]
}
Gm1._getInstance = HC4
var bz = '__STATSIG__',
eT1 = typeof window !== 'undefined' ? window : {},
tT1 = typeof global !== 'undefined' ? global : {},
Im1 = typeof globalThis !== 'undefined' ? globalThis : {},
Sl =
(Y41 =
(X41 = (A41 = eT1[bz]) !== null && A41 !== void 0 ? A41 : tT1[bz]) !== null &&
X41 !== void 0
? X41
: Im1[bz]) !== null && Y41 !== void 0
? Y41
: { instance: Gm1._getInstance }
eT1[bz] = Sl
tT1[bz] = Sl
Im1[bz] = Sl
})
var $l = _((Zm1) => {
Object.defineProperty(Zm1, '__esModule', { value: !0 })
Zm1.Diagnostics = void 0
var Ll = new Map(),
H41 = 'start',
F41 = 'end',
JC4 = 'statsig::diagnostics'
Zm1.Diagnostics = {
_getMarkers: (I) => {
return Ll.get(I)
},
_markInitOverallStart: (I) => {
jz(I, lz({}, H41, 'overall'))
},
_markInitOverallEnd: (I, G, Z) => {
jz(
I,
lz(
{
success: G,
error: G ? void 0 : { name: 'InitializeError', message: 'Failed to initialize' },
evaluationDetails: Z,
},
F41,
'overall',
),
)
},
_markInitNetworkReqStart: (I, G) => {
jz(I, lz(G, H41, 'initialize', 'network_request'))
},
_markInitNetworkReqEnd: (I, G) => {
jz(I, lz(G, F41, 'initialize', 'network_request'))
},
_markInitProcessStart: (I) => {
jz(I, lz({}, H41, 'initialize', 'process'))
},
_markInitProcessEnd: (I, G) => {
jz(I, lz(G, F41, 'initialize', 'process'))
},
_clearMarkers: (I) => {
Ll.delete(I)
},
_formatError(I) {
if (!(I && typeof I === 'object')) return
return { code: J41(I, 'code'), name: J41(I, 'name'), message: J41(I, 'message') }
},
_getDiagnosticsData(I, G, Z, d) {
var W
return {
success: (I === null || I === void 0 ? void 0 : I.ok) === !0,
statusCode: I === null || I === void 0 ? void 0 : I.status,
sdkRegion:
(W = I === null || I === void 0 ? void 0 : I.headers) === null || W === void 0
? void 0
: W.get('x-statsig-region'),
isDelta: Z.includes('"is_delta":true') === !0 ? !0 : void 0,
attempt: G,
error: Zm1.Diagnostics._formatError(d),
}
},
_enqueueDiagnosticsEvent(I, G, Z, d) {
let W = Zm1.Diagnostics._getMarkers(Z)
if (W == null || W.length <= 0) return -1
let w = W[W.length - 1].timestamp - W[0].timestamp
Zm1.Diagnostics._clearMarkers(Z)
let B = KC4(I, { context: 'initialize', markers: W.slice(), statsigOptions: d })
return G.enqueue(B), w
},
}
function lz(I, G, Z, d) {
return Object.assign({ key: Z, action: G, step: d, timestamp: Date.now() }, I)
}
function KC4(I, G) {
return { eventName: JC4, user: I, value: null, metadata: G, time: Date.now() }
}
function jz(I, G) {
var Z
let d = (Z = Ll.get(I)) !== null && Z !== void 0 ? Z : []
d.push(G), Ll.set(I, d)
}
function J41(I, G) {
if (G in I) return I[G]
return
}
})
var yl = _((dm1) => {
Object.defineProperty(dm1, '__esModule', { value: !0 })
dm1._isTypeMatch = dm1._typeOf = void 0
function gC4(I) {
return Array.isArray(I) ? 'array' : typeof I
}
dm1._typeOf = gC4
function NC4(I, G) {
let Z = (d) => (Array.isArray(d) ? 'array' : typeof d)
return Z(I) === Z(G)
}
dm1._isTypeMatch = NC4
})
var kz = _((wm1) => {
Object.defineProperty(wm1, '__esModule', { value: !0 })
wm1._getSortedObject = wm1._DJB2Object = wm1._DJB2 = void 0
var QC4 = yl(),
qC4 = (I) => {
let G = 0
for (let Z = 0; Z < I.length; Z++) {
let d = I.charCodeAt(Z)
;(G = (G << 5) - G + d), (G = G & G)
}
return String(G >>> 0)
}
wm1._DJB2 = qC4
var UC4 = (I, G) => {
return wm1._DJB2(JSON.stringify(wm1._getSortedObject(I, G)))
}
wm1._DJB2Object = UC4
var fC4 = (I, G) => {
if (I == null) return null
let Z = Object.keys(I).sort(),
d = {}
return (
Z.forEach((W) => {
let w = I[W]
if (G === 0 || QC4._typeOf(w) !== 'object') {
d[W] = w
return
}
d[W] = wm1._getSortedObject(w, G != null ? G - 1 : G)
}),
d
)
}
wm1._getSortedObject = fC4
})
var IM = _((Am1) => {
Object.defineProperty(Am1, '__esModule', { value: !0 })
Am1._getStorageKey = Am1._getUserStorageKey = void 0
var Cm1 = kz()
function Vm1(I, G, Z) {
var d
if (Z) return Z(I, G)
let W = G && G.customIDs ? G.customIDs : {},
w = [
`uid:${(d = G === null || G === void 0 ? void 0 : G.userID) !== null && d !== void 0 ? d : ''}`,
`cids:${Object.keys(W)
.sort((B, C) => B.localeCompare(C))
.map((B) => `${B}-${W[B]}`)
.join(',')}`,
`k:${I}`,
]
return Cm1._DJB2(w.join('|'))
}
Am1._getUserStorageKey = Vm1
function EC4(I, G, Z) {
if (G) return Vm1(I, G, Z)
return Cm1._DJB2(`k:${I}`)
}
Am1._getStorageKey = EC4
})
var GM = _((Ym1) => {
Object.defineProperty(Ym1, '__esModule', { value: !0 })
Ym1.NetworkParam = Ym1.NetworkDefault = Ym1.Endpoint = void 0
Ym1.Endpoint = {
_initialize: 'initialize',
_rgstr: 'rgstr',
_download_config_specs: 'download_config_specs',
}
Ym1.NetworkDefault = {
[Ym1.Endpoint._rgstr]: 'https://prodregistryv2.org/v1',
[Ym1.Endpoint._initialize]: 'https://featureassets.org/v1',
[Ym1.Endpoint._download_config_specs]: 'https://api.statsigcdn.com/v1',
}
Ym1.NetworkParam = {
EventCount: 'ec',
SdkKey: 'k',
SdkType: 'st',
SdkVersion: 'sv',
Time: 't',
SessionID: 'sid',
StatsigEncoded: 'se',
IsGzipped: 'gz',
}
})
var AJ = _((Dm1) => {
Object.defineProperty(Dm1, '__esModule', { value: !0 })
Dm1._getCurrentPageUrlSafe =
Dm1._addDocumentEventListenerSafe =
Dm1._addWindowEventListenerSafe =
Dm1._isServerEnv =
Dm1._getDocumentSafe =
Dm1._getWindowSafe =
void 0
var SC4 = () => {
return typeof window !== 'undefined' ? window : null
}
Dm1._getWindowSafe = SC4
var LC4 = () => {
var I
let G = Dm1._getWindowSafe()
return (I = G === null || G === void 0 ? void 0 : G.document) !== null && I !== void 0
? I
: null
}
Dm1._getDocumentSafe = LC4
var $C4 = () => {
if (Dm1._getDocumentSafe() !== null) return !1
let I =
typeof process !== 'undefined' && process.versions != null && process.versions.node != null
return typeof EdgeRuntime === 'string' || I
}
Dm1._isServerEnv = $C4
var yC4 = (I, G) => {
let Z = Dm1._getWindowSafe()
if (typeof (Z === null || Z === void 0 ? void 0 : Z.addEventListener) === 'function')
Z.addEventListener(I, G)
}
Dm1._addWindowEventListenerSafe = yC4
var PC4 = (I, G) => {
let Z = Dm1._getDocumentSafe()
if (typeof (Z === null || Z === void 0 ? void 0 : Z.addEventListener) === 'function')
Z.addEventListener(I, G)
}
Dm1._addDocumentEventListenerSafe = PC4
var OC4 = () => {
var I
try {
return (I = Dm1._getWindowSafe()) === null || I === void 0
? void 0
: I.location.href.split(/[?#]/)[0]
} catch (G) {
return
}
}
Dm1._getCurrentPageUrlSafe = OC4
})
var N41 = _((gm1) => {
Object.defineProperty(gm1, '__esModule', { value: !0 })
gm1._createLayerParameterExposure =
gm1._createConfigExposure =
gm1._createGateExposure =
gm1._isExposureEvent =
void 0
var Fm1 = 'statsig::config_exposure',
Jm1 = 'statsig::gate_exposure',
Km1 = 'statsig::layer_exposure',
g41 = (I, G, Z, d, W) => {
if (Z.bootstrapMetadata) d.bootstrapMetadata = Z.bootstrapMetadata
return {
eventName: I,
user: G,
value: null,
metadata: hC4(Z, d),
secondaryExposures: W,
time: Date.now(),
}
},
bC4 = ({ eventName: I }) => {
return I === Jm1 || I === Fm1 || I === Km1
}
gm1._isExposureEvent = bC4
var lC4 = (I, G) => {
var Z, d, W
let w = { gate: G.name, gateValue: String(G.value), ruleID: G.ruleID }
if (((Z = G.__evaluation) === null || Z === void 0 ? void 0 : Z.version) != null)
w.configVersion = G.__evaluation.version
return g41(
Jm1,
I,
G.details,
w,
(W = (d = G.__evaluation) === null || d === void 0 ? void 0 : d.secondary_exposures) !==
null && W !== void 0
? W
: [],
)
}
gm1._createGateExposure = lC4
var jC4 = (I, G) => {
var Z, d, W, w
let B = { config: G.name, ruleID: G.ruleID }
if (((Z = G.__evaluation) === null || Z === void 0 ? void 0 : Z.version) != null)
B.configVersion = G.__evaluation.version
if (((d = G.__evaluation) === null || d === void 0 ? void 0 : d.passed) != null)
B.rulePassed = String(G.__evaluation.passed)
return g41(
Fm1,
I,
G.details,
B,
(w = (W = G.__evaluation) === null || W === void 0 ? void 0 : W.secondary_exposures) !==
null && w !== void 0
? w
: [],
)
}
gm1._createConfigExposure = jC4
var kC4 = (I, G, Z) => {
var d, W, w, B
let C = G.__evaluation,
V =
((d = C === null || C === void 0 ? void 0 : C.explicit_parameters) === null || d === void 0
? void 0
: d.includes(Z)) === !0,
A = '',
X =
(W = C === null || C === void 0 ? void 0 : C.undelegated_secondary_exposures) !== null &&
W !== void 0
? W
: []
if (V)
(A = (w = C.allocated_experiment_name) !== null && w !== void 0 ? w : ''),
(X = C.secondary_exposures)
let Y = {
config: G.name,
parameterName: Z,
ruleID: G.ruleID,
allocatedExperiment: A,
isExplicitParameter: String(V),
}
if (((B = G.__evaluation) === null || B === void 0 ? void 0 : B.version) != null)
Y.configVersion = G.__evaluation.version
return g41(Km1, I, G.details, Y, X)
}
gm1._createLayerParameterExposure = kC4
var hC4 = (I, G) => {
if (((G.reason = I.reason), I.lcut)) G.lcut = String(I.lcut)
if (I.receivedAt) G.receivedAt = String(I.receivedAt)
return G
}
})
var sV = _((zm1) => {
Object.defineProperty(zm1, '__esModule', { value: !0 })
zm1._setObjectInStorage = zm1._getObjectFromStorage = zm1.Storage = void 0
var iC4 = v7(),
nC4 = AJ(),
ZM = {},
Q41 = {
isReady: () => !0,
isReadyResolver: () => null,
getProviderName: () => 'InMemory',
getItem: (I) => (ZM[I] ? ZM[I] : null),
setItem: (I, G) => {
ZM[I] = G
},
removeItem: (I) => {
delete ZM[I]
},
getAllKeys: () => Object.keys(ZM),
},
Tl = null
try {
let I = nC4._getWindowSafe()
if (I && I.localStorage && typeof I.localStorage.getItem === 'function')
Tl = {
isReady: () => !0,
isReadyResolver: () => null,
getProviderName: () => 'LocalStorage',
getItem: (G) => I.localStorage.getItem(G),
setItem: (G, Z) => I.localStorage.setItem(G, Z),
removeItem: (G) => I.localStorage.removeItem(G),
getAllKeys: () => Object.keys(I.localStorage),
}
} catch (I) {
iC4.Log.warn('Failed to setup localStorageProvider.')
}
var z41 = Tl !== null && Tl !== void 0 ? Tl : Q41,
SB = z41
function aC4(I) {
try {
return I()
} catch (G) {
if (G instanceof Error && G.name === 'SecurityError')
return zm1.Storage._setProvider(Q41), null
throw G
}
}
zm1.Storage = {
isReady: () => SB.isReady(),
isReadyResolver: () => SB.isReadyResolver(),
getProviderName: () => SB.getProviderName(),
getItem: (I) => aC4(() => SB.getItem(I)),
setItem: (I, G) => SB.setItem(I, G),
removeItem: (I) => SB.removeItem(I),
getAllKeys: () => SB.getAllKeys(),
_setProvider: (I) => {
;(z41 = I), (SB = I)
},
_setDisabled: (I) => {
if (I) SB = Q41
else SB = z41
},
}
function rC4(I) {
let G = zm1.Storage.getItem(I)
return JSON.parse(G !== null && G !== void 0 ? G : 'null')
}
zm1._getObjectFromStorage = rC4
function sC4(I, G) {
zm1.Storage.setItem(I, JSON.stringify(G))
}
zm1._setObjectInStorage = sC4
})
var q41 = _((Um1) => {
Object.defineProperty(Um1, '__esModule', { value: !0 })
Um1.UrlConfiguration = void 0
var bl = GM(),
eC4 = {
[bl.Endpoint._initialize]: 'i',
[bl.Endpoint._rgstr]: 'e',
[bl.Endpoint._download_config_specs]: 'd',
}
class qm1 {
constructor(I, G, Z, d) {
if (
((this.customUrl = null),
(this.fallbackUrls = null),
(this.endpoint = I),
(this.endpointDnsKey = eC4[I]),
G)
)
this.customUrl = G
if (!G && Z) this.customUrl = Z.endsWith('/') ? `${Z}${I}` : `${Z}/${I}`
if (d) this.fallbackUrls = d
let W = bl.NetworkDefault[I]
this.defaultUrl = `${W}/${I}`
}
getUrl() {
var I
return (I = this.customUrl) !== null && I !== void 0 ? I : this.defaultUrl
}
}
Um1.UrlConfiguration = qm1
})
var kl = _((Em1) => {
Object.defineProperty(Em1, '__esModule', { value: !0 })
Em1._notifyVisibilityChanged =
Em1._subscribeToVisiblityChanged =
Em1._isUnloading =
Em1._isCurrentlyVisible =
void 0
var ll = AJ(),
jl = 'foreground',
f41 = 'background',
Rm1 = [],
U41 = jl,
R41 = !1,
tC4 = () => {
return U41 === jl
}
Em1._isCurrentlyVisible = tC4
var IV4 = () => R41
Em1._isUnloading = IV4
var GV4 = (I) => {
Rm1.unshift(I)
}
Em1._subscribeToVisiblityChanged = GV4
var ZV4 = (I) => {
if (I === U41) return
;(U41 = I), Rm1.forEach((G) => G(I))
}
Em1._notifyVisibilityChanged = ZV4
ll._addWindowEventListenerSafe('focus', () => {
;(R41 = !1), Em1._notifyVisibilityChanged(jl)
})
ll._addWindowEventListenerSafe('blur', () => Em1._notifyVisibilityChanged(f41))
ll._addWindowEventListenerSafe('beforeunload', () => {
;(R41 = !0), Em1._notifyVisibilityChanged(f41)
})
ll._addDocumentEventListenerSafe('visibilitychange', () => {
Em1._notifyVisibilityChanged(document.visibilityState === 'visible' ? jl : f41)
})
})
var v41 = _((pz) => {
var xz =
(pz && pz.__awaiter) ||
function (I, G, Z, d) {
function W(w) {
return w instanceof Z
? w
: new Z(function (B) {
B(w)
})
}
return new (Z || (Z = Promise))(function (w, B) {
function C(X) {
try {
A(d.next(X))
} catch (Y) {
B(Y)
}
}
function V(X) {
try {
A(d.throw(X))
} catch (Y) {
B(Y)
}
}
function A(X) {
X.done ? w(X.value) : W(X.value).then(C, V)
}
A((d = d.apply(I, G || [])).next())
})
}
Object.defineProperty(pz, '__esModule', { value: !0 })
pz.EventLogger = void 0
var BV4 = IM(),
CV4 = kz(),
dM = v7(),
vm1 = GM(),
E41 = AJ(),
VV4 = N41(),
cz = sV(),
AV4 = q41(),
Mm1 = kl(),
XV4 = 100,
YV4 = 1e4,
_V4 = 1000,
DV4 = 600000,
HV4 = 500,
Sm1 = 200,
WM = {},
hl = { Startup: 'startup', GainedFocus: 'gained_focus' }
class XJ {
static _safeFlushAndForget(I) {
var G
;(G = WM[I]) === null || G === void 0 || G.flush().catch(() => {})
}
static _safeRetryFailedLogs(I) {
var G
;(G = WM[I]) === null || G === void 0 || G._retryFailedLogs(hl.GainedFocus)
}
constructor(I, G, Z, d) {
var W
;(this._sdkKey = I),
(this._emitter = G),
(this._network = Z),
(this._options = d),
(this._queue = []),
(this._lastExposureTimeMap = {}),
(this._nonExposedChecks = {}),
(this._hasRunQuickFlush = !1),
(this._creationTime = Date.now()),
(this._isLoggingDisabled = (d === null || d === void 0 ? void 0 : d.disableLogging) === !0),
(this._maxQueueSize =
(W = d === null || d === void 0 ? void 0 : d.loggingBufferMaxSize) !== null &&
W !== void 0
? W
: XV4)
let w = d === null || d === void 0 ? void 0 : d.networkConfig
this._logEventUrlConfig = new AV4.UrlConfiguration(
vm1.Endpoint._rgstr,
w === null || w === void 0 ? void 0 : w.logEventUrl,
w === null || w === void 0 ? void 0 : w.api,
w === null || w === void 0 ? void 0 : w.logEventFallbackUrls,
)
}
setLoggingDisabled(I) {
this._isLoggingDisabled = I
}
enqueue(I) {
if (!this._shouldLogEvent(I)) return
if (
(this._normalizeAndAppendEvent(I),
this._quickFlushIfNeeded(),
this._queue.length > this._maxQueueSize)
)
XJ._safeFlushAndForget(this._sdkKey)
}
incrementNonExposureCount(I) {
var G
let Z = (G = this._nonExposedChecks[I]) !== null && G !== void 0 ? G : 0
this._nonExposedChecks[I] = Z + 1
}
reset() {
this._lastExposureTimeMap = {}
}
start() {
if (E41._isServerEnv()) return
;(WM[this._sdkKey] = this),
Mm1._subscribeToVisiblityChanged((I) => {
if (I === 'background') XJ._safeFlushAndForget(this._sdkKey)
else if (I === 'foreground') XJ._safeRetryFailedLogs(this._sdkKey)
}),
this._retryFailedLogs(hl.Startup),
this._startBackgroundFlushInterval()
}
stop() {
return xz(this, void 0, void 0, function* () {
if (this._flushIntervalId)
clearInterval(this._flushIntervalId), (this._flushIntervalId = null)
delete WM[this._sdkKey], yield this.flush()
})
}
flush() {
return xz(this, void 0, void 0, function* () {
if ((this._appendAndResetNonExposedChecks(), this._queue.length === 0)) return
let I = this._queue
;(this._queue = []), yield this._sendEvents(I)
})
}
_quickFlushIfNeeded() {
if (this._hasRunQuickFlush) return
if (((this._hasRunQuickFlush = !0), Date.now() - this._creationTime > Sm1)) return
setTimeout(() => XJ._safeFlushAndForget(this._sdkKey), Sm1)
}
_shouldLogEvent(I) {
if (E41._isServerEnv()) return !1
if (!VV4._isExposureEvent(I)) return !0
let G = I.user ? I.user : { statsigEnvironment: void 0 },
Z = BV4._getUserStorageKey(this._sdkKey, G),
d = I.metadata ? I.metadata : {},
W = [
I.eventName,
Z,
d.gate,
d.config,
d.ruleID,
d.allocatedExperiment,
d.parameterName,
String(d.isExplicitParameter),
d.reason,
].join('|'),
w = this._lastExposureTimeMap[W],
B = Date.now()
if (w && B - w < DV4) return !1
if (Object.keys(this._lastExposureTimeMap).length > _V4) this._lastExposureTimeMap = {}
return (this._lastExposureTimeMap[W] = B), !0
}
_sendEvents(I) {
var G, Z
return xz(this, void 0, void 0, function* () {
if (this._isLoggingDisabled) return this._saveFailedLogsToStorage(I), !1
try {
let W =
Mm1._isUnloading() &&
this._network.isBeaconSupported() &&
((Z = (G = this._options) === null || G === void 0 ? void 0 : G.networkConfig) ===
null || Z === void 0
? void 0
: Z.networkOverrideFunc) == null
if (
(this._emitter({ name: 'pre_logs_flushed', events: I }),
(W ? yield this._sendEventsViaBeacon(I) : yield this._sendEventsViaPost(I)).success)
)
return this._emitter({ name: 'logs_flushed', events: I }), !0
else return dM.Log.warn('Failed to flush events.'), this._saveFailedLogsToStorage(I), !1
} catch (d) {
return dM.Log.warn('Failed to flush events.'), !1
}
})
}
_sendEventsViaPost(I) {
var G
return xz(this, void 0, void 0, function* () {
let Z = yield this._network.post(this._getRequestData(I)),
d = (G = Z === null || Z === void 0 ? void 0 : Z.code) !== null && G !== void 0 ? G : -1
return { success: d >= 200 && d < 300 }
})
}
_sendEventsViaBeacon(I) {
return xz(this, void 0, void 0, function* () {
return { success: yield this._network.beacon(this._getRequestData(I)) }
})
}
_getRequestData(I) {
return {
sdkKey: this._sdkKey,
data: { events: I },
urlConfig: this._logEventUrlConfig,
retries: 3,
isCompressable: !0,
params: { [vm1.NetworkParam.EventCount]: String(I.length) },
}
}
_saveFailedLogsToStorage(I) {
while (I.length > HV4) I.shift()
let G = this._getStorageKey()
try {
cz._setObjectInStorage(G, I)
} catch (Z) {
dM.Log.warn('Unable to save failed logs to storage')
}
}
_retryFailedLogs(I) {
let G = this._getStorageKey()
;(() =>
xz(this, void 0, void 0, function* () {
if (!cz.Storage.isReady()) yield cz.Storage.isReadyResolver()
let Z = cz._getObjectFromStorage(G)
if (!Z) return
if (I === hl.Startup) cz.Storage.removeItem(G)
if ((yield this._sendEvents(Z)) && I === hl.GainedFocus) cz.Storage.removeItem(G)
}))().catch(() => {
dM.Log.warn('Failed to flush stored logs')
})
}
_getStorageKey() {
return `statsig.failed_logs.${CV4._DJB2(this._sdkKey)}`
}
_normalizeAndAppendEvent(I) {
if (I.user) (I.user = Object.assign({}, I.user)), delete I.user.privateAttributes
let G = {},
Z = this._getCurrentPageUrl()
if (Z) G.statsigMetadata = { currentPage: Z }
let d = Object.assign(Object.assign({}, I), G)
dM.Log.debug('Enqueued Event:', d), this._queue.push(d)
}
_appendAndResetNonExposedChecks() {
if (Object.keys(this._nonExposedChecks).length === 0) return
this._normalizeAndAppendEvent({
eventName: 'statsig::non_exposed_checks',
user: null,
time: Date.now(),
metadata: { checks: Object.assign({}, this._nonExposedChecks) },
}),
(this._nonExposedChecks = {})
}
_getCurrentPageUrl() {
var I
if (
((I = this._options) === null || I === void 0
? void 0
: I.includeCurrentPageUrlWithEvents) === !1
)
return
return E41._getCurrentPageUrlSafe()
}
_startBackgroundFlushInterval() {
var I, G
let Z =
(G = (I = this._options) === null || I === void 0 ? void 0 : I.loggingIntervalMs) !==
null && G !== void 0
? G
: YV4,
d = setInterval(() => {
let W = WM[this._sdkKey]
if (!W || W._flushIntervalId !== d) clearInterval(d)
else XJ._safeFlushAndForget(this._sdkKey)
}, Z)
this._flushIntervalId = d
}
}
pz.EventLogger = XJ
})
var wM = _((Lm1) => {
Object.defineProperty(Lm1, '__esModule', { value: !0 })
Lm1.StatsigMetadataProvider = Lm1.SDK_VERSION = void 0
Lm1.SDK_VERSION = '3.12.0'
var M41 = { sdkVersion: Lm1.SDK_VERSION, sdkType: 'js-mono' }
Lm1.StatsigMetadataProvider = {
get: () => M41,
add: (I) => {
M41 = Object.assign(Object.assign({}, M41), I)
},
}
})
var Om1 = _((Pm1) => {
Object.defineProperty(Pm1, '__esModule', { value: !0 })
})
var xl = _((um1) => {
Object.defineProperty(um1, '__esModule', { value: !0 })
um1.getUUID = void 0
function FV4() {
if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function')
return crypto.randomUUID()
let I = new Date().getTime(),
G = (typeof performance !== 'undefined' && performance.now && performance.now() * 1000) || 0
return `xxxxxxxx-xxxx-4xxx-${'89ab'[Math.floor(Math.random() * 4)]}xxx-xxxxxxxxxxxx`.replace(
/[xy]/g,
(d) => {
let W = Math.random() * 16
if (I > 0) (W = (I + W) % 16 | 0), (I = Math.floor(I / 16))
else (W = (G + W) % 16 | 0), (G = Math.floor(G / 16))
return (d === 'x' ? W : (W & 7) | 8).toString(16)
},
)
}
um1.getUUID = FV4
})
var pl = _((jm1) => {
Object.defineProperty(jm1, '__esModule', { value: !0 })
jm1.StableID = void 0
var JV4 = IM(),
KV4 = v7(),
bm1 = sV(),
gV4 = xl(),
cl = {}
jm1.StableID = {
get: (I) => {
if (cl[I] == null) {
let G = NV4(I)
if (G == null) (G = gV4.getUUID()), mm1(G, I)
cl[I] = G
}
return cl[I]
},
setOverride: (I, G) => {
;(cl[G] = I), mm1(I, G)
},
}
function lm1(I) {
return `statsig.stable_id.${JV4._getStorageKey(I)}`
}
function mm1(I, G) {
let Z = lm1(G)
try {
bm1._setObjectInStorage(Z, I)
} catch (d) {
KV4.Log.warn('Failed to save StableID')
}
}
function NV4(I) {
let G = lm1(I)
return bm1._getObjectFromStorage(G)
}
})
var S41 = _((hm1) => {
Object.defineProperty(hm1, '__esModule', { value: !0 })
hm1._getFullUserHash = hm1._normalizeUser = void 0
var zV4 = kz(),
QV4 = v7()
function qV4(I, G, Z) {
try {
let d = JSON.parse(JSON.stringify(I))
if (G != null && G.environment != null) d.statsigEnvironment = G.environment
else if (Z != null) d.statsigEnvironment = { tier: Z }
return d
} catch (d) {
return QV4.Log.error('Failed to JSON.stringify user'), { statsigEnvironment: void 0 }
}
}
hm1._normalizeUser = qV4
function UV4(I) {
return I ? zV4._DJB2Object(I) : null
}
hm1._getFullUserHash = UV4
})
var L41 = _((cm1) => {
Object.defineProperty(cm1, '__esModule', { value: !0 })
cm1._typedJsonParse = void 0
var RV4 = v7()
function EV4(I, G, Z) {
try {
let d = JSON.parse(I)
if (d && typeof d === 'object' && G in d) return d
} catch (d) {}
return RV4.Log.error(`Failed to parse ${Z}`), null
}
cm1._typedJsonParse = EV4
})
var om1 = _((OY) => {
var $41 =
(OY && OY.__awaiter) ||
function (I, G, Z, d) {
function W(w) {
return w instanceof Z
? w
: new Z(function (B) {
B(w)
})
}
return new (Z || (Z = Promise))(function (w, B) {
function C(X) {
try {
A(d.next(X))
} catch (Y) {
B(Y)
}
}
function V(X) {
try {
A(d.throw(X))
} catch (Y) {
B(Y)
}
}
function A(X) {
X.done ? w(X.value) : W(X.value).then(C, V)
}
A((d = d.apply(I, G || [])).next())
})
}
Object.defineProperty(OY, '__esModule', { value: !0 })
OY._makeDataAdapterResult = OY.DataAdapterCore = void 0
var il = v7(),
vV4 = pl(),
nl = S41(),
PY = sV(),
im1 = L41(),
nm1 = 10
class am1 {
constructor(I, G) {
;(this._adapterName = I),
(this._cacheSuffix = G),
(this._options = null),
(this._sdkKey = null),
(this._lastModifiedStoreKey = `statsig.last_modified_time.${G}`),
(this._inMemoryCache = new rm1())
}
attach(I, G) {
;(this._sdkKey = I), (this._options = G)
}
getDataSync(I) {
let G = I && nl._normalizeUser(I, this._options),
Z = this._getCacheKey(G),
d = this._inMemoryCache.get(Z, G)
if (d) return d
let W = this._loadFromCache(Z)
if (W) return this._inMemoryCache.add(Z, W), this._inMemoryCache.get(Z, G)
return null
}
setData(I, G) {
let Z = G && nl._normalizeUser(G, this._options),
d = this._getCacheKey(Z)
this._inMemoryCache.add(d, al('Bootstrap', I, null, Z))
}
_getDataAsyncImpl(I, G, Z) {
return $41(this, void 0, void 0, function* () {
if (!PY.Storage.isReady()) yield PY.Storage.isReadyResolver()
let d = I !== null && I !== void 0 ? I : this.getDataSync(G),
W = [this._fetchAndPrepFromNetwork(d, G, Z)]
if (Z === null || Z === void 0 ? void 0 : Z.timeoutMs)
W.push(
new Promise((w) => setTimeout(w, Z.timeoutMs)).then(() => {
return il.Log.debug('Fetching latest value timed out'), null
}),
)
return yield Promise.race(W)
})
}
_prefetchDataImpl(I, G) {
return $41(this, void 0, void 0, function* () {
let Z = I && nl._normalizeUser(I, this._options),
d = this._getCacheKey(Z),
W = yield this._getDataAsyncImpl(null, Z, G)
if (W)
this._inMemoryCache.add(d, Object.assign(Object.assign({}, W), { source: 'Prefetch' }))
})
}
_fetchAndPrepFromNetwork(I, G, Z) {
return $41(this, void 0, void 0, function* () {
let d = null
if (I && this._isCachedResultValidFor204(I, G)) d = I.data
let W = yield this._fetchFromNetwork(d, G, Z)
if (!W) return il.Log.debug('No response returned for latest value'), null
let w = im1._typedJsonParse(W, 'has_updates', 'Response'),
B = this._getSdkKey(),
C = vV4.StableID.get(B),
V = null
if ((w === null || w === void 0 ? void 0 : w.has_updates) === !0) V = al('Network', W, C, G)
else if (d && (w === null || w === void 0 ? void 0 : w.has_updates) === !1)
V = al('NetworkNotModified', d, C, G)
else return null
let A = this._getCacheKey(G)
return this._inMemoryCache.add(A, V), this._writeToCache(A, V), V
})
}
_getSdkKey() {
if (this._sdkKey != null) return this._sdkKey
return il.Log.error(`${this._adapterName} is not attached to a Client`), ''
}
_loadFromCache(I) {
var G
let Z = (G = PY.Storage.getItem) === null || G === void 0 ? void 0 : G.call(PY.Storage, I)
if (Z == null) return null
let d = im1._typedJsonParse(Z, 'source', 'Cached Result')
return d ? Object.assign(Object.assign({}, d), { source: 'Cache' }) : null
}
_writeToCache(I, G) {
PY.Storage.setItem(I, JSON.stringify(G)), this._runLocalStorageCacheEviction(I)
}
_runLocalStorageCacheEviction(I) {
var G
let Z =
(G = PY._getObjectFromStorage(this._lastModifiedStoreKey)) !== null && G !== void 0 ? G : {}
Z[I] = Date.now()
let d = sm1(Z, nm1)
if (d) delete Z[d], PY.Storage.removeItem(d)
PY._setObjectInStorage(this._lastModifiedStoreKey, Z)
}
}
OY.DataAdapterCore = am1
function al(I, G, Z, d) {
return {
source: I,
data: G,
receivedAt: Date.now(),
stableID: Z,
fullUserHash: nl._getFullUserHash(d),
}
}
OY._makeDataAdapterResult = al
class rm1 {
constructor() {
this._data = {}
}
get(I, G) {
var Z
let d = this._data[I],
W = d === null || d === void 0 ? void 0 : d.stableID,
w =
(Z = G === null || G === void 0 ? void 0 : G.customIDs) === null || Z === void 0
? void 0
: Z.stableID
if (w && W && w !== W) return il.Log.warn("'StatsigUser.customIDs.stableID' mismatch"), null
return d
}
add(I, G) {
let Z = sm1(this._data, nm1 - 1)
if (Z) delete this._data[Z]
this._data[I] = G
}
merge(I) {
this._data = Object.assign(Object.assign({}, this._data), I)
}
}
function sm1(I, G) {
let Z = Object.keys(I)
if (Z.length <= G) return null
return Z.reduce((d, W) => {
let w = I[d],
B = I[W]
if (typeof w === 'object' && typeof B === 'object') return B.receivedAt < w.receivedAt ? W : d
return B < w ? W : d
})
}
})
var tm1 = _((em1) => {
Object.defineProperty(em1, '__esModule', { value: !0 })
})
var rl = _((Gb1) => {
Object.defineProperty(Gb1, '__esModule', { value: !0 })
Gb1.SDKType = void 0
var Ib1 = {},
iz
Gb1.SDKType = {
_get: (I) => {
var G
return (
((G = Ib1[I]) !== null && G !== void 0 ? G : 'js-mono') +
(iz !== null && iz !== void 0 ? iz : '')
)
},
_setClientType(I, G) {
Ib1[I] = G
},
_setBindingType(I) {
if (!iz || iz === '-react') iz = '-' + I
},
}
})
var y41 = _((oV) => {
var MV4 =
(oV && oV.__awaiter) ||
function (I, G, Z, d) {
function W(w) {
return w instanceof Z
? w
: new Z(function (B) {
B(w)
})
}
return new (Z || (Z = Promise))(function (w, B) {
function C(X) {
try {
A(d.next(X))
} catch (Y) {
B(Y)
}
}
function V(X) {
try {
A(d.throw(X))
} catch (Y) {
B(Y)
}
}
function A(X) {
X.done ? w(X.value) : W(X.value).then(C, V)
}
A((d = d.apply(I, G || [])).next())
})
}
Object.defineProperty(oV, '__esModule', { value: !0 })
oV.ErrorBoundary = oV.EXCEPTION_ENDPOINT = void 0
var SV4 = v7(),
LV4 = rl(),
$V4 = wM()
oV.EXCEPTION_ENDPOINT = 'https://statsigapi.net/v1/sdk_exception'
var Wb1 = '[Statsig] UnknownError'
class wb1 {
constructor(I, G, Z, d) {
;(this._sdkKey = I),
(this._options = G),
(this._emitter = Z),
(this._lastSeenError = d),
(this._seen = new Set())
}
wrap(I) {
try {
let G = I
PV4(G).forEach((Z) => {
let d = G[Z]
if ('$EB' in d) return
;(G[Z] = (...W) => {
return this._capture(Z, () => d.apply(I, W))
}),
(G[Z].$EB = !0)
})
} catch (G) {
this._onError('eb:wrap', G)
}
}
logError(I, G) {
this._onError(I, G)
}
getLastSeenErrorAndReset() {
let I = this._lastSeenError
return (this._lastSeenError = void 0), I !== null && I !== void 0 ? I : null
}
attachErrorIfNoneExists(I) {
if (this._lastSeenError) return
this._lastSeenError = db1(I)
}
_capture(I, G) {
try {
let Z = G()
if (Z && Z instanceof Promise) return Z.catch((d) => this._onError(I, d))
return Z
} catch (Z) {
return this._onError(I, Z), null
}
}
_onError(I, G) {
try {
SV4.Log.warn(`Caught error in ${I}`, { error: G }),
(() =>
MV4(this, void 0, void 0, function* () {
var d, W, w, B, C, V, A
let X = G ? G : Error(Wb1),
Y = X instanceof Error,
H = Y ? X.name : 'No Name',
J = db1(X)
if (((this._lastSeenError = J), this._seen.has(H))) return
if (
(this._seen.add(H),
(W = (d = this._options) === null || d === void 0 ? void 0 : d.networkConfig) ===
null || W === void 0
? void 0
: W.preventAllNetworkTraffic)
) {
;(w = this._emitter) === null ||
w === void 0 ||
w.call(this, { name: 'error', error: G, tag: I })
return
}
let K = LV4.SDKType._get(this._sdkKey),
g = $V4.StatsigMetadataProvider.get(),
z = Y ? X.stack : yV4(X),
f = JSON.stringify(
Object.assign(
{ tag: I, exception: H, info: z },
Object.assign(Object.assign({}, g), { sdkType: K }),
),
)
yield (
(V =
(C = (B = this._options) === null || B === void 0 ? void 0 : B.networkConfig) ===
null || C === void 0
? void 0
: C.networkOverrideFunc) !== null && V !== void 0
? V
: fetch
)(oV.EXCEPTION_ENDPOINT, {
method: 'POST',
headers: {
'STATSIG-API-KEY': this._sdkKey,
'STATSIG-SDK-TYPE': String(K),
'STATSIG-SDK-VERSION': String(g.sdkVersion),
'Content-Type': 'application/json',
},
body: f,
}),
(A = this._emitter) === null ||
A === void 0 ||
A.call(this, { name: 'error', error: G, tag: I })
}))()
.then(() => {})
.catch(() => {})
} catch (Z) {}
}
}
oV.ErrorBoundary = wb1
function db1(I) {
if (I instanceof Error) return I
else if (typeof I === 'string') return new Error(I)
else return new Error('An unknown error occurred.')
}
function yV4(I) {
try {
return JSON.stringify(I)
} catch (G) {
return Wb1
}
}
function PV4(I) {
let G = new Set(),
Z = Object.getPrototypeOf(I)
while (Z && Z !== Object.prototype)
Object.getOwnPropertyNames(Z)
.filter((d) => typeof (Z === null || Z === void 0 ? void 0 : Z[d]) === 'function')
.forEach((d) => G.add(d)),
(Z = Object.getPrototypeOf(Z))
return Array.from(G)
}
})
var Cb1 = _((Bb1) => {
Object.defineProperty(Bb1, '__esModule', { value: !0 })
})
var Ab1 = _((Vb1) => {
Object.defineProperty(Vb1, '__esModule', { value: !0 })
})
var Yb1 = _((Xb1) => {
Object.defineProperty(Xb1, '__esModule', { value: !0 })
})
var P41 = _((_b1) => {
Object.defineProperty(_b1, '__esModule', { value: !0 })
_b1.createMemoKey = _b1.MemoPrefix = void 0
_b1.MemoPrefix = {
_gate: 'g',
_dynamicConfig: 'c',
_experiment: 'e',
_layer: 'l',
_paramStore: 'p',
}
var OV4 = new Set([]),
uV4 = new Set(['userPersistedValues'])
function TV4(I, G, Z) {
let d = `${I}|${G}`
if (!Z) return d
for (let W of Object.keys(Z)) {
if (uV4.has(W)) return
if (OV4.has(W)) d += `|${W}=true`
else d += `|${W}=${Z[W]}`
}
return d
}
_b1.createMemoKey = TV4
})
var Hb1 = _((nz) => {
var bV4 =
(nz && nz.__awaiter) ||
function (I, G, Z, d) {
function W(w) {
return w instanceof Z
? w
: new Z(function (B) {
B(w)
})
}
return new (Z || (Z = Promise))(function (w, B) {
function C(X) {
try {
A(d.next(X))
} catch (Y) {
B(Y)
}
}
function V(X) {
try {
A(d.throw(X))
} catch (Y) {
B(Y)
}
}
function A(X) {
X.done ? w(X.value) : W(X.value).then(C, V)
}
A((d = d.apply(I, G || [])).next())
})
}
Object.defineProperty(nz, '__esModule', { value: !0 })
nz._fetchTxtRecords = void 0
var lV4 = new Uint8Array([
0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 13, 102, 101, 97, 116, 117, 114, 101, 97, 115, 115, 101,
116, 115, 3, 111, 114, 103, 0, 0, 16, 0, 1,
]),
jV4 = 'https://cloudflare-dns.com/dns-query',
kV4 = ['i', 'e', 'd'],
hV4 = 200
function xV4(I) {
return bV4(this, void 0, void 0, function* () {
let G = yield I(jV4, {
method: 'POST',
headers: { 'Content-Type': 'application/dns-message', Accept: 'application/dns-message' },
body: lV4,
})
if (!G.ok) {
let W = new Error('Failed to fetch TXT records from DNS')
throw ((W.name = 'DnsTxtFetchError'), W)
}
let Z = yield G.arrayBuffer(),
d = new Uint8Array(Z)
return cV4(d)
})
}
nz._fetchTxtRecords = xV4
function cV4(I) {
let G = I.findIndex(
(d, W) =>
W < hV4 && String.fromCharCode(d) === '=' && kV4.includes(String.fromCharCode(I[W - 1])),
)
if (G === -1) {
let d = new Error('Failed to parse TXT records from DNS')
throw ((d.name = 'DnsTxtParseError'), d)
}
let Z = ''
for (let d = G - 1; d < I.length; d++) Z += String.fromCharCode(I[d])
return Z.split(',')
}
})
var Qb1 = _((uY) => {
var Fb1 =
(uY && uY.__awaiter) ||
function (I, G, Z, d) {
function W(w) {
return w instanceof Z
? w
: new Z(function (B) {
B(w)
})
}
return new (Z || (Z = Promise))(function (w, B) {
function C(X) {
try {
A(d.next(X))
} catch (Y) {
B(Y)
}
}
function V(X) {
try {
A(d.throw(X))
} catch (Y) {
B(Y)
}
}
function A(X) {
X.done ? w(X.value) : W(X.value).then(C, V)
}
A((d = d.apply(I, G || [])).next())
})
}
Object.defineProperty(uY, '__esModule', { value: !0 })
uY._isDomainFailure = uY.NetworkFallbackResolver = void 0
var pV4 = Hb1(),
iV4 = kz(),
nV4 = v7(),
u41 = sV(),
Jb1 = 604800000,
aV4 = 14400000
class gb1 {
constructor(I) {
var G
;(this._fallbackInfo = null),
(this._errorBoundary = null),
(this._dnsQueryCooldowns = {}),
(this._networkOverrideFunc =
(G = I.networkConfig) === null || G === void 0 ? void 0 : G.networkOverrideFunc)
}
setErrorBoundary(I) {
this._errorBoundary = I
}
tryBumpExpiryTime(I, G) {
var Z
let d = (Z = this._fallbackInfo) === null || Z === void 0 ? void 0 : Z[G.endpoint]
if (!d) return
;(d.expiryTime = Date.now() + Jb1),
O41(I, Object.assign(Object.assign({}, this._fallbackInfo), { [G.endpoint]: d }))
}
getActiveFallbackUrl(I, G) {
var Z, d
let W = this._fallbackInfo
if (W == null) (W = (Z = rV4(I)) !== null && Z !== void 0 ? Z : {}), (this._fallbackInfo = W)
let w = W[G.endpoint]
if (!w || Date.now() > ((d = w.expiryTime) !== null && d !== void 0 ? d : 0))
return delete W[G.endpoint], (this._fallbackInfo = W), O41(I, this._fallbackInfo), null
if (w.url) return w.url
return null
}
getFallbackFromProvided(I) {
let G = Kb1(I)
if (G) return I.replace(G, '')
return null
}
tryFetchUpdatedFallbackInfo(I, G, Z, d) {
var W, w
return Fb1(this, void 0, void 0, function* () {
try {
if (!Nb1(Z, d)) return !1
let C =
G.customUrl == null && G.fallbackUrls == null
? yield this._tryFetchFallbackUrlsFromNetwork(G)
: G.fallbackUrls,
V = this._pickNewFallbackUrl(
(W = this._fallbackInfo) === null || W === void 0 ? void 0 : W[G.endpoint],
C,
)
if (!V) return !1
return this._updateFallbackInfoWithNewUrl(I, G.endpoint, V), !0
} catch (B) {
return (
(w = this._errorBoundary) === null ||
w === void 0 ||
w.logError('tryFetchUpdatedFallbackInfo', B),
!1
)
}
})
}
_updateFallbackInfoWithNewUrl(I, G, Z) {
var d, W, w
let B = { url: Z, expiryTime: Date.now() + Jb1, previous: [] },
C = (d = this._fallbackInfo) === null || d === void 0 ? void 0 : d[G]
if (C) B.previous.push(...C.previous)
if (B.previous.length > 10) B.previous = []
let V =
(w = (W = this._fallbackInfo) === null || W === void 0 ? void 0 : W[G]) === null ||
w === void 0
? void 0
: w.url
if (V != null) B.previous.push(V)
;(this._fallbackInfo = Object.assign(Object.assign({}, this._fallbackInfo), { [G]: B })),
O41(I, this._fallbackInfo)
}
_tryFetchFallbackUrlsFromNetwork(I) {
var G
return Fb1(this, void 0, void 0, function* () {
let Z = this._dnsQueryCooldowns[I.endpoint]
if (Z && Date.now() < Z) return null
this._dnsQueryCooldowns[I.endpoint] = Date.now() + aV4
let d = [],
W = yield pV4._fetchTxtRecords(
(G = this._networkOverrideFunc) !== null && G !== void 0 ? G : fetch,
),
w = Kb1(I.defaultUrl)
for (let B of W) {
if (!B.startsWith(I.endpointDnsKey + '=')) continue
let C = B.split('=')
if (C.length > 1) {
let V = C[1]
if (V.endsWith('/')) V = V.slice(0, -1)
d.push(`https://${V}${w}`)
}
}
return d
})
}
_pickNewFallbackUrl(I, G) {
var Z
if (G == null) return null
let d = new Set(
(Z = I === null || I === void 0 ? void 0 : I.previous) !== null && Z !== void 0 ? Z : [],
),
W = I === null || I === void 0 ? void 0 : I.url,
w = null
for (let B of G) {
let C = B.endsWith('/') ? B.slice(0, -1) : B
if (!d.has(B) && C !== W) {
w = C
break
}
}
return w
}
}
uY.NetworkFallbackResolver = gb1
function Nb1(I, G) {
var Z
let d =
(Z = I === null || I === void 0 ? void 0 : I.toLowerCase()) !== null && Z !== void 0 ? Z : ''
return (
G ||
d.includes('uncaught exception') ||
d.includes('failed to fetch') ||
d.includes('networkerror when attempting to fetch resource')
)
}
uY._isDomainFailure = Nb1
function zb1(I) {
return `statsig.network_fallback.${iV4._DJB2(I)}`
}
function O41(I, G) {
let Z = zb1(I)
if (!G || Object.keys(G).length === 0) {
u41.Storage.removeItem(Z)
return
}
u41.Storage.setItem(Z, JSON.stringify(G))
}
function rV4(I) {
let G = zb1(I),
Z = u41.Storage.getItem(G)
if (!Z) return null
try {
return JSON.parse(Z)
} catch (d) {
return nV4.Log.error('Failed to parse FallbackInfo'), null
}
}
function Kb1(I) {
try {
return new URL(I).pathname
} catch (G) {
return null
}
}
})
var ol = _((Mb1) => {
Object.defineProperty(Mb1, '__esModule', { value: !0 })
Mb1.StatsigSession = Mb1.SessionID = void 0
var sV4 = IM(),
oV4 = v7(),
Ub1 = sV(),
fb1 = xl(),
Rb1 = 1800000,
Eb1 = 14400000,
sl = {}
Mb1.SessionID = {
get: (I) => {
return Mb1.StatsigSession.get(I).data.sessionID
},
}
Mb1.StatsigSession = {
get: (I) => {
if (sl[I] == null) sl[I] = eV4(I)
let G = sl[I]
return IA4(G)
},
overrideInitialSessionID: (I, G) => {
sl[G] = tV4(I, G)
},
}
function eV4(I) {
let G = WA4(I),
Z = Date.now()
if (!G) G = { sessionID: fb1.getUUID(), startTime: Z, lastUpdate: Z }
return { data: G, sdkKey: I }
}
function tV4(I, G) {
let Z = Date.now()
return { data: { sessionID: I, startTime: Z, lastUpdate: Z }, sdkKey: G }
}
function IA4(I) {
let G = Date.now(),
Z = I.data
if (GA4(Z) || ZA4(Z)) (Z.sessionID = fb1.getUUID()), (Z.startTime = G)
;(Z.lastUpdate = G),
dA4(Z, I.sdkKey),
clearTimeout(I.idleTimeoutID),
clearTimeout(I.ageTimeoutID)
let d = G - Z.startTime,
W = I.sdkKey
return (I.idleTimeoutID = qb1(W, Rb1)), (I.ageTimeoutID = qb1(W, Eb1 - d)), I
}
function qb1(I, G) {
return setTimeout(() => {
let Z = __STATSIG__ === null || __STATSIG__ === void 0 ? void 0 : __STATSIG__.instance(I)
if (Z) Z.$emt({ name: 'session_expired' })
}, G)
}
function GA4({ lastUpdate: I }) {
return Date.now() - I > Rb1
}
function ZA4({ startTime: I }) {
return Date.now() - I > Eb1
}
function vb1(I) {
return `statsig.session_id.${sV4._getStorageKey(I)}`
}
function dA4(I, G) {
let Z = vb1(G)
try {
Ub1._setObjectInStorage(Z, I)
} catch (d) {
oV4.Log.warn('Failed to save SessionID')
}
}
function WA4(I) {
let G = vb1(I)
return Ub1._getObjectFromStorage(G)
}
})
var m41 = _((Sb1) => {
Object.defineProperty(Sb1, '__esModule', { value: !0 })
Sb1.ErrorTag = void 0
Sb1.ErrorTag = { NetworkError: 'NetworkError' }
})
var bb1 = _((rz) => {
var az =
(rz && rz.__awaiter) ||
function (I, G, Z, d) {
function W(w) {
return w instanceof Z
? w
: new Z(function (B) {
B(w)
})
}
return new (Z || (Z = Promise))(function (w, B) {
function C(X) {
try {
A(d.next(X))
} catch (Y) {
B(Y)
}
}
function V(X) {
try {
A(d.throw(X))
} catch (Y) {
B(Y)
}
}
function A(X) {
X.done ? w(X.value) : W(X.value).then(C, V)
}
A((d = d.apply(I, G || [])).next())
})
}
Object.defineProperty(rz, '__esModule', { value: !0 })
rz.NetworkCore = void 0
VJ()
var BA4 = VJ(),
b41 = $l(),
el = v7(),
LB = GM(),
CA4 = Qb1(),
$b1 = rl(),
VA4 = AJ(),
yb1 = ol(),
AA4 = pl(),
XA4 = m41(),
Pb1 = wM(),
YA4 = kl(),
_A4 = 1e4,
DA4 = 500,
HA4 = 30000,
FA4 = 1000,
Tb1 = 50,
JA4 = Tb1 / FA4,
KA4 = new Set([408, 500, 502, 503, 504, 522, 524, 599])
class mb1 {
constructor(I, G) {
if (
((this._emitter = G),
(this._errorBoundary = null),
(this._timeout = _A4),
(this._netConfig = {}),
(this._options = {}),
(this._leakyBucket = {}),
(this._lastUsedInitUrl = null),
I)
)
this._options = I
if (this._options.networkConfig) this._netConfig = this._options.networkConfig
if (this._netConfig.networkTimeoutMs) this._timeout = this._netConfig.networkTimeoutMs
this._fallbackResolver = new CA4.NetworkFallbackResolver(this._options)
}
setErrorBoundary(I) {
;(this._errorBoundary = I),
this._errorBoundary.wrap(this),
this._errorBoundary.wrap(this._fallbackResolver),
this._fallbackResolver.setErrorBoundary(I)
}
isBeaconSupported() {
return typeof navigator !== 'undefined' && typeof navigator.sendBeacon === 'function'
}
getLastUsedInitUrlAndReset() {
let I = this._lastUsedInitUrl
return (this._lastUsedInitUrl = null), I
}
beacon(I) {
return az(this, void 0, void 0, function* () {
if (!Ob1(I)) return !1
let G = this._getInternalRequestArgs('POST', I),
Z = yield this._getPopulatedBody(G, I.data),
d = yield this._getPopulatedURL(G),
W = navigator
return W.sendBeacon.bind(W)(d, Z)
})
}
post(I) {
return az(this, void 0, void 0, function* () {
let G = this._getInternalRequestArgs('POST', I)
if (((G.body = yield this._getPopulatedBody(G, I.data)), I.isStatsigEncodable))
G.body = this._attemptToEncodeString(G, G.body)
return this._sendRequest(G)
})
}
get(I) {
let G = this._getInternalRequestArgs('GET', I)
return this._sendRequest(G)
}
_sendRequest(I) {
var G, Z, d, W
return az(this, void 0, void 0, function* () {
if (!Ob1(I)) return null
if (this._netConfig.preventAllNetworkTraffic) return null
let { method: w, body: B, retries: C, attempt: V } = I,
A = I.urlConfig.endpoint
if (this._isRateLimited(A))
return (
el.Log.warn(
`Request to ${A} was blocked because you are making requests too frequently.`,
),
null
)
let X = V !== null && V !== void 0 ? V : 1,
Y = typeof AbortController !== 'undefined' ? new AbortController() : null,
H = setTimeout(() => {
Y === null || Y === void 0 || Y.abort(`Timeout of ${this._timeout}ms expired.`)
}, this._timeout),
J = yield this._getPopulatedURL(I),
K = null,
g = YA4._isUnloading()
try {
let z = {
method: w,
body: B,
headers: Object.assign({}, I.headers),
signal: Y === null || Y === void 0 ? void 0 : Y.signal,
priority: I.priority,
keepalive: g,
}
zA4(I, X)
let f = this._leakyBucket[A]
if (f) (f.lastRequestTime = Date.now()), (this._leakyBucket[A] = f)
if (
((K = yield (
(G = this._netConfig.networkOverrideFunc) !== null && G !== void 0 ? G : fetch
)(J, z)),
clearTimeout(H),
!K.ok)
) {
let L = yield K.text().catch(() => 'No Text'),
T = new Error(`NetworkError: ${J} ${L}`)
throw ((T.name = 'NetworkError'), T)
}
let $ = yield K.text()
return (
ub1(I, K, X, $),
this._fallbackResolver.tryBumpExpiryTime(I.sdkKey, I.urlConfig),
{ body: $, code: K.status }
)
} catch (z) {
let f = gA4(Y, z),
S = NA4(Y)
if (
(ub1(I, K, X, '', z),
yield this._fallbackResolver.tryFetchUpdatedFallbackInfo(I.sdkKey, I.urlConfig, f, S))
)
I.fallbackUrl = this._fallbackResolver.getActiveFallbackUrl(I.sdkKey, I.urlConfig)
if (
!C ||
X > C ||
!KA4.has(
(Z = K === null || K === void 0 ? void 0 : K.status) !== null && Z !== void 0
? Z
: 500,
)
) {
;(d = this._emitter) === null ||
d === void 0 ||
d.call(this, {
name: 'error',
error: z,
tag: XA4.ErrorTag.NetworkError,
requestArgs: I,
})
let L = `A networking error occurred during ${w} request to ${J}.`
return (
el.Log.error(L, f, z),
(W = this._errorBoundary) === null || W === void 0 || W.attachErrorIfNoneExists(L),
null
)
}
return (
yield QA4(X),
this._sendRequest(Object.assign(Object.assign({}, I), { retries: C, attempt: X + 1 }))
)
}
})
}
_isRateLimited(I) {
var G
let Z = Date.now(),
d =
(G = this._leakyBucket[I]) !== null && G !== void 0
? G
: { count: 0, lastRequestTime: Z },
W = Z - d.lastRequestTime,
w = Math.floor(W * JA4)
if (((d.count = Math.max(0, d.count - w)), d.count >= Tb1)) return !0
return (d.count += 1), (d.lastRequestTime = Z), (this._leakyBucket[I] = d), !1
}
_getPopulatedURL(I) {
var G
return az(this, void 0, void 0, function* () {
let Z = (G = I.fallbackUrl) !== null && G !== void 0 ? G : I.urlConfig.getUrl()
if (
I.urlConfig.endpoint === LB.Endpoint._initialize ||
I.urlConfig.endpoint === LB.Endpoint._download_config_specs
)
this._lastUsedInitUrl = Z
let d = Object.assign(
{
[LB.NetworkParam.SdkKey]: I.sdkKey,
[LB.NetworkParam.SdkType]: $b1.SDKType._get(I.sdkKey),
[LB.NetworkParam.SdkVersion]: Pb1.SDK_VERSION,
[LB.NetworkParam.Time]: String(Date.now()),
[LB.NetworkParam.SessionID]: yb1.SessionID.get(I.sdkKey),
},
I.params,
),
W = Object.keys(d)
.map((w) => {
return `${encodeURIComponent(w)}=${encodeURIComponent(d[w])}`
})
.join('&')
return `${Z}${W ? `?${W}` : ''}`
})
}
_getPopulatedBody(I, G) {
return az(this, void 0, void 0, function* () {
let { sdkKey: Z, fallbackUrl: d } = I,
W = AA4.StableID.get(Z),
w = yb1.SessionID.get(Z),
B = $b1.SDKType._get(Z)
return JSON.stringify(
Object.assign(Object.assign({}, G), {
statsigMetadata: Object.assign(Object.assign({}, Pb1.StatsigMetadataProvider.get()), {
stableID: W,
sessionID: w,
sdkType: B,
fallbackUrl: d,
}),
}),
)
})
}
_attemptToEncodeString(I, G) {
var Z, d
let W = VA4._getWindowSafe()
if (
this._options.disableStatsigEncoding ||
BA4._getStatsigGlobalFlag('no-encode') != null ||
!(W === null || W === void 0 ? void 0 : W.btoa)
)
return G
try {
let w = (Z = W.btoa(G).split('').reverse().join('')) !== null && Z !== void 0 ? Z : G
return (
(I.params = Object.assign(
Object.assign({}, (d = I.params) !== null && d !== void 0 ? d : {}),
{ [LB.NetworkParam.StatsigEncoded]: '1' },
)),
w
)
} catch (w) {
return el.Log.warn(`Request encoding failed for ${I.urlConfig.getUrl()}`), G
}
}
_getInternalRequestArgs(I, G) {
let Z = this._fallbackResolver.getActiveFallbackUrl(G.sdkKey, G.urlConfig)
return Object.assign(Object.assign({}, G), { method: I, fallbackUrl: Z })
}
}
rz.NetworkCore = mb1
var Ob1 = (I) => {
if (!I.sdkKey) return el.Log.warn('Unable to make request without an SDK key'), !1
return !0
}
function gA4(I, G) {
if (
(I === null || I === void 0 ? void 0 : I.signal.aborted) &&
typeof I.signal.reason === 'string'
)
return I.signal.reason
if (typeof G === 'string') return G
if (G instanceof Error) return `${G.name}: ${G.message}`
return 'Unknown Error'
}
function NA4(I) {
return (
((I === null || I === void 0 ? void 0 : I.signal.aborted) &&
typeof I.signal.reason === 'string' &&
I.signal.reason.includes('Timeout')) ||
!1
)
}
function zA4(I, G) {
if (I.urlConfig.endpoint !== LB.Endpoint._initialize) return
b41.Diagnostics._markInitNetworkReqStart(I.sdkKey, { attempt: G })
}
function ub1(I, G, Z, d, W) {
if (I.urlConfig.endpoint !== LB.Endpoint._initialize) return
b41.Diagnostics._markInitNetworkReqEnd(
I.sdkKey,
b41.Diagnostics._getDiagnosticsData(G, Z, d, W),
)
}
function QA4(I) {
return az(this, void 0, void 0, function* () {
yield new Promise((G) => setTimeout(G, Math.min(DA4 * (I * I), HA4)))
})
}
})
var jb1 = _((lb1) => {
Object.defineProperty(lb1, '__esModule', { value: !0 })
})
var hb1 = _((kb1) => {
Object.defineProperty(kb1, '__esModule', { value: !0 })
})
var cb1 = _((sz) => {
var qA4 =
(sz && sz.__awaiter) ||
function (I, G, Z, d) {
function W(w) {
return w instanceof Z
? w
: new Z(function (B) {
B(w)
})
}
return new (Z || (Z = Promise))(function (w, B) {
function C(X) {
try {
A(d.next(X))
} catch (Y) {
B(Y)
}
}
function V(X) {
try {
A(d.throw(X))
} catch (Y) {
B(Y)
}
}
function A(X) {
X.done ? w(X.value) : W(X.value).then(C, V)
}
A((d = d.apply(I, G || [])).next())
})
}
Object.defineProperty(sz, '__esModule', { value: !0 })
sz.StatsigClientBase = void 0
VJ()
var UA4 = VJ(),
fA4 = y41(),
RA4 = v41(),
l41 = v7(),
EA4 = P41(),
vA4 = AJ(),
MA4 = ol(),
tl = sV(),
SA4 = 3000
class xb1 {
constructor(I, G, Z, d) {
var W
;(this.loadingStatus = 'Uninitialized'),
(this._initializePromise = null),
(this._listeners = {})
let w = this.$emt.bind(this)
;(d === null || d === void 0 ? void 0 : d.logLevel) != null && (l41.Log.level = d.logLevel),
(d === null || d === void 0 ? void 0 : d.disableStorage) && tl.Storage._setDisabled(!0),
(d === null || d === void 0 ? void 0 : d.initialSessionID) &&
MA4.StatsigSession.overrideInitialSessionID(d.initialSessionID, I),
(d === null || d === void 0 ? void 0 : d.storageProvider) &&
tl.Storage._setProvider(d.storageProvider),
(this._sdkKey = I),
(this._options = d !== null && d !== void 0 ? d : {}),
(this._memoCache = {}),
(this.overrideAdapter =
(W = d === null || d === void 0 ? void 0 : d.overrideAdapter) !== null && W !== void 0
? W
: null),
(this._logger = new RA4.EventLogger(I, w, Z, d)),
(this._errorBoundary = new fA4.ErrorBoundary(I, d, w)),
this._errorBoundary.wrap(this),
this._errorBoundary.wrap(G),
this._errorBoundary.wrap(this._logger),
Z.setErrorBoundary(this._errorBoundary),
(this.dataAdapter = G),
this.dataAdapter.attach(I, d),
(this.storageProvider = tl.Storage),
this._primeReadyRipcord(),
LA4(I, this)
}
updateRuntimeOptions(I) {
if (I.disableLogging != null)
(this._options.disableLogging = I.disableLogging),
this._logger.setLoggingDisabled(I.disableLogging)
if (I.disableStorage != null)
(this._options.disableStorage = I.disableStorage), tl.Storage._setDisabled(I.disableStorage)
}
flush() {
return this._logger.flush()
}
shutdown() {
return qA4(this, void 0, void 0, function* () {
this.$emt({ name: 'pre_shutdown' }),
this._setStatus('Uninitialized', null),
(this._initializePromise = null),
yield this._logger.stop()
})
}
on(I, G) {
if (!this._listeners[I]) this._listeners[I] = []
this._listeners[I].push(G)
}
off(I, G) {
if (this._listeners[I]) {
let Z = this._listeners[I].indexOf(G)
if (Z !== -1) this._listeners[I].splice(Z, 1)
}
}
$on(I, G) {
;(G.__isInternal = !0), this.on(I, G)
}
$emt(I) {
var G
let Z = (d) => {
try {
d(I)
} catch (W) {
if (d.__isInternal === !0) {
this._errorBoundary.logError(`__emit:${I.name}`, W)
return
}
l41.Log.error(
'An error occurred in a StatsigClientEvent listener. This is not an issue with Statsig.',
I,
)
}
}
if (this._listeners[I.name]) this._listeners[I.name].forEach((d) => Z(d))
;(G = this._listeners['*']) === null || G === void 0 || G.forEach(Z)
}
_setStatus(I, G) {
;(this.loadingStatus = I),
(this._memoCache = {}),
this.$emt({ name: 'values_updated', status: I, values: G })
}
_enqueueExposure(I, G, Z) {
if ((Z === null || Z === void 0 ? void 0 : Z.disableExposureLog) === !0) {
this._logger.incrementNonExposureCount(I)
return
}
this._logger.enqueue(G)
}
_memoize(I, G) {
return (Z, d) => {
if (this._options.disableEvaluationMemoization) return G(Z, d)
let W = EA4.createMemoKey(I, Z, d)
if (!W) return G(Z, d)
if (!(W in this._memoCache)) {
if (Object.keys(this._memoCache).length >= SA4) this._memoCache = {}
this._memoCache[W] = G(Z, d)
}
return this._memoCache[W]
}
}
}
sz.StatsigClientBase = xb1
function LA4(I, G) {
var Z
if (vA4._isServerEnv()) return
let d = UA4._getStatsigGlobal(),
W = (Z = d.instances) !== null && Z !== void 0 ? Z : {},
w = G
if (W[I] != null)
l41.Log.warn(
'Creating multiple Statsig clients with the same SDK key can lead to unexpected behavior. Multi-instance support requires different SDK keys.',
)
if (((W[I] = w), !d.firstInstance)) d.firstInstance = w
;(d.instances = W), (__STATSIG__ = d)
}
})
var nb1 = _((pb1) => {
Object.defineProperty(pb1, '__esModule', { value: !0 })
pb1.DataAdapterCachePrefix = void 0
pb1.DataAdapterCachePrefix = 'statsig.cached'
})
var rb1 = _((ab1) => {
Object.defineProperty(ab1, '__esModule', { value: !0 })
})
var ob1 = _((sb1) => {
Object.defineProperty(sb1, '__esModule', { value: !0 })
})
var Gl1 = _((tb1) => {
Object.defineProperty(tb1, '__esModule', { value: !0 })
tb1._makeTypedGet =
tb1._mergeOverride =
tb1._makeLayer =
tb1._makeExperiment =
tb1._makeDynamicConfig =
tb1._makeFeatureGate =
void 0
var $A4 = v7(),
yA4 = yl(),
PA4 = 'default'
function j41(I, G, Z, d) {
var W
return {
name: I,
details: G,
ruleID:
(W = Z === null || Z === void 0 ? void 0 : Z.rule_id) !== null && W !== void 0 ? W : PA4,
__evaluation: Z,
value: d,
}
}
function OA4(I, G, Z) {
return j41(I, G, Z, (Z === null || Z === void 0 ? void 0 : Z.value) === !0)
}
tb1._makeFeatureGate = OA4
function eb1(I, G, Z) {
var d
let W = (d = Z === null || Z === void 0 ? void 0 : Z.value) !== null && d !== void 0 ? d : {}
return Object.assign(Object.assign({}, j41(I, G, Z, W)), {
get: Ij(I, Z === null || Z === void 0 ? void 0 : Z.value),
})
}
tb1._makeDynamicConfig = eb1
function uA4(I, G, Z) {
var d
let W = eb1(I, G, Z)
return Object.assign(Object.assign({}, W), {
groupName:
(d = Z === null || Z === void 0 ? void 0 : Z.group_name) !== null && d !== void 0
? d
: null,
})
}
tb1._makeExperiment = uA4
function TA4(I, G, Z, d) {
var W, w
return Object.assign(Object.assign({}, j41(I, G, Z, void 0)), {
get: Ij(I, Z === null || Z === void 0 ? void 0 : Z.value, d),
groupName:
(W = Z === null || Z === void 0 ? void 0 : Z.group_name) !== null && W !== void 0
? W
: null,
__value:
(w = Z === null || Z === void 0 ? void 0 : Z.value) !== null && w !== void 0 ? w : {},
})
}
tb1._makeLayer = TA4
function mA4(I, G, Z, d) {
return Object.assign(Object.assign(Object.assign({}, I), G), { get: Ij(I.name, Z, d) })
}
tb1._mergeOverride = mA4
function Ij(I, G, Z) {
return (d, W) => {
var w
let B = (w = G === null || G === void 0 ? void 0 : G[d]) !== null && w !== void 0 ? w : null
if (B == null) return W !== null && W !== void 0 ? W : null
if (W != null && !yA4._isTypeMatch(B, W))
return (
$A4.Log.warn(
`Parameter type mismatch. '${I}.${d}' was found to be type '${typeof B}' but fallback/return type is '${typeof W}'. See https://docs.statsig.com/client/javascript-sdk/#typed-getters`,
),
W !== null && W !== void 0 ? W : null
)
return Z === null || Z === void 0 || Z(d), B
}
}
tb1._makeTypedGet = Ij
})
var dl1 = _((Zl1) => {
Object.defineProperty(Zl1, '__esModule', { value: !0 })
})
var Bl1 = _((Wl1) => {
Object.defineProperty(Wl1, '__esModule', { value: !0 })
Wl1.UPDATE_DETAIL_ERROR_MESSAGES = Wl1.createUpdateDetails = void 0
var xA4 = (I, G, Z, d, W, w) => {
return { duration: Z, source: G, success: I, error: d, sourceUrl: W, warnings: w }
}
Wl1.createUpdateDetails = xA4
Wl1.UPDATE_DETAIL_ERROR_MESSAGES = {
NO_NETWORK_DATA:
'No data was returned from the network. This may be due to a network timeout if a timeout value was specified in the options or ad blocker error.',
}
})
var Xl1 = _((Vl1) => {
Object.defineProperty(Vl1, '__esModule', { value: !0 })
Vl1.SDKFlags = void 0
var Cl1 = {}
Vl1.SDKFlags = {
setFlags: (I, G) => {
Cl1[I] = G
},
get: (I, G) => {
var Z, d
return (d = (Z = Cl1[I]) === null || Z === void 0 ? void 0 : Z[G]) !== null && d !== void 0
? d
: !1
},
}
})
var TY = _((n2) => {
var pA4 =
(n2 && n2.__createBinding) ||
(Object.create
? function (I, G, Z, d) {
if (d === void 0) d = Z
var W = Object.getOwnPropertyDescriptor(G, Z)
if (!W || ('get' in W ? !G.__esModule : W.writable || W.configurable))
W = {
enumerable: !0,
get: function () {
return G[Z]
},
}
Object.defineProperty(I, d, W)
}
: function (I, G, Z, d) {
if (d === void 0) d = Z
I[d] = G[Z]
}),
x4 =
(n2 && n2.__exportStar) ||
function (I, G) {
for (var Z in I)
if (Z !== 'default' && !Object.prototype.hasOwnProperty.call(G, Z)) pA4(G, I, Z)
}
Object.defineProperty(n2, '__esModule', { value: !0 })
n2.Storage = n2.Log = n2.EventLogger = n2.Diagnostics = void 0
VJ()
var iA4 = $l()
Object.defineProperty(n2, 'Diagnostics', {
enumerable: !0,
get: function () {
return iA4.Diagnostics
},
})
var nA4 = v41()
Object.defineProperty(n2, 'EventLogger', {
enumerable: !0,
get: function () {
return nA4.EventLogger
},
})
var Yl1 = v7()
Object.defineProperty(n2, 'Log', {
enumerable: !0,
get: function () {
return Yl1.Log
},
})
var aA4 = wM(),
rA4 = sV()
Object.defineProperty(n2, 'Storage', {
enumerable: !0,
get: function () {
return rA4.Storage
},
})
x4(VJ(), n2)
x4(IM(), n2)
x4(Om1(), n2)
x4(om1(), n2)
x4($l(), n2)
x4(tm1(), n2)
x4(y41(), n2)
x4(Cb1(), n2)
x4(Ab1(), n2)
x4(kz(), n2)
x4(Yb1(), n2)
x4(v7(), n2)
x4(P41(), n2)
x4(GM(), n2)
x4(bb1(), n2)
x4(jb1(), n2)
x4(hb1(), n2)
x4(AJ(), n2)
x4(rl(), n2)
x4(ol(), n2)
x4(pl(), n2)
x4(cb1(), n2)
x4(m41(), n2)
x4(nb1(), n2)
x4(N41(), n2)
x4(wM(), n2)
x4(rb1(), n2)
x4(ob1(), n2)
x4(Gl1(), n2)
x4(dl1(), n2)
x4(S41(), n2)
x4(sV(), n2)
x4(L41(), n2)
x4(yl(), n2)
x4(q41(), n2)
x4(xl(), n2)
x4(kl(), n2)
x4(Bl1(), n2)
x4(Xl1(), n2)
__STATSIG__ = Object.assign(
Object.assign({}, __STATSIG__ !== null && __STATSIG__ !== void 0 ? __STATSIG__ : {}),
{ Log: Yl1.Log, SDK_VERSION: aA4.SDK_VERSION },
)
})
var Hl1 = _((Dl1) => {
Object.defineProperty(Dl1, '__esModule', { value: !0 })
var mY = TY()
class _l1 {
constructor(I) {
;(this._sdkKey = I),
(this._rawValues = null),
(this._values = null),
(this._source = 'Uninitialized'),
(this._lcut = 0),
(this._receivedAt = 0),
(this._bootstrapMetadata = null),
(this._warnings = new Set())
}
reset() {
;(this._values = null),
(this._rawValues = null),
(this._source = 'Loading'),
(this._lcut = 0),
(this._receivedAt = 0),
(this._bootstrapMetadata = null)
}
finalize() {
if (this._values) return
this._source = 'NoValues'
}
getValues() {
return this._rawValues
? mY._typedJsonParse(this._rawValues, 'has_updates', 'EvaluationStoreValues')
: null
}
setValues(I, G) {
if (!I) return !1
let Z = mY._typedJsonParse(I.data, 'has_updates', 'EvaluationResponse')
if (Z == null) return !1
if (((this._source = I.source), (Z === null || Z === void 0 ? void 0 : Z.has_updates) !== !0))
return !0
if (
((this._rawValues = I.data),
(this._lcut = Z.time),
(this._receivedAt = I.receivedAt),
(this._values = Z),
(this._bootstrapMetadata = this._extractBootstrapMetadata(I.source, Z)),
I.source && Z.user)
)
this._setWarningState(G, Z)
if (Z.sdk_flags) mY.SDKFlags.setFlags(this._sdkKey, Z.sdk_flags)
else mY.SDKFlags.setFlags(this._sdkKey, {})
return !0
}
getWarnings() {
if (this._warnings.size === 0) return
return Array.from(this._warnings)
}
getGate(I) {
var G
return this._getDetailedStoreResult(
(G = this._values) === null || G === void 0 ? void 0 : G.feature_gates,
I,
)
}
getConfig(I) {
var G
return this._getDetailedStoreResult(
(G = this._values) === null || G === void 0 ? void 0 : G.dynamic_configs,
I,
)
}
getLayer(I) {
var G
return this._getDetailedStoreResult(
(G = this._values) === null || G === void 0 ? void 0 : G.layer_configs,
I,
)
}
getParamStore(I) {
var G
return this._getDetailedStoreResult(
(G = this._values) === null || G === void 0 ? void 0 : G.param_stores,
I,
)
}
getSource() {
return this._source
}
_extractBootstrapMetadata(I, G) {
if (I !== 'Bootstrap') return null
let Z = {}
if (G.user) Z.user = G.user
if (G.sdkInfo) Z.generatorSDKInfo = G.sdkInfo
return (Z.lcut = G.time), Z
}
_getDetailedStoreResult(I, G) {
let Z = null
if (I) Z = I[G] ? I[G] : I[mY._DJB2(G)]
return { result: Z, details: this._getDetails(Z == null) }
}
_setWarningState(I, G) {
var Z
let d = mY.StableID.get(this._sdkKey)
if (((Z = I.customIDs) === null || Z === void 0 ? void 0 : Z.stableID) !== d) {
this._warnings.add('StableIDMismatch')
return
}
if ('user' in G) {
let W = G.user
if (mY._getFullUserHash(I) !== mY._getFullUserHash(W))
this._warnings.add('PartialUserMatch')
}
}
getCurrentSourceDetails() {
if (this._source === 'Uninitialized' || this._source === 'NoValues')
return { reason: this._source }
let I = { reason: this._source, lcut: this._lcut, receivedAt: this._receivedAt }
if (this._warnings.size > 0) I.warnings = Array.from(this._warnings)
return I
}
_getDetails(I) {
var G, Z
let d = this.getCurrentSourceDetails(),
W = d.reason,
w = (G = d.warnings) !== null && G !== void 0 ? G : []
if (this._source === 'Bootstrap' && w.length > 0) W = W + w[0]
if (W !== 'Uninitialized' && W !== 'NoValues') W = `${W}:${I ? 'Unrecognized' : 'Recognized'}`
let B =
this._source === 'Bootstrap'
? (Z = this._bootstrapMetadata) !== null && Z !== void 0
? Z
: void 0
: void 0
if (B) d.bootstrapMetadata = B
return Object.assign(Object.assign({}, d), { reason: W })
}
}
Dl1.default = _l1
})
var gl1 = _((Jl1) => {
Object.defineProperty(Jl1, '__esModule', { value: !0 })
Jl1._resolveDeltasResponse = void 0
var Fl1 = TY(),
oA4 = 2
function eA4(I, G) {
let Z = Fl1._typedJsonParse(G, 'checksum', 'DeltasEvaluationResponse')
if (!Z) return { hadBadDeltaChecksum: !0 }
let d = tA4(I, Z),
W = IX4(d),
w = Fl1._DJB2Object(
{
feature_gates: W.feature_gates,
dynamic_configs: W.dynamic_configs,
layer_configs: W.layer_configs,
},
oA4,
)
if (w !== Z.checksumV2)
return {
hadBadDeltaChecksum: !0,
badChecksum: w,
badMergedConfigs: W,
badFullResponse: Z.deltas_full_response,
}
return JSON.stringify(W)
}
Jl1._resolveDeltasResponse = eA4
function tA4(I, G) {
return Object.assign(Object.assign(Object.assign({}, I), G), {
feature_gates: Object.assign(Object.assign({}, I.feature_gates), G.feature_gates),
layer_configs: Object.assign(Object.assign({}, I.layer_configs), G.layer_configs),
dynamic_configs: Object.assign(Object.assign({}, I.dynamic_configs), G.dynamic_configs),
})
}
function IX4(I) {
let G = I
return (
k41(I.deleted_gates, G.feature_gates),
delete G.deleted_gates,
k41(I.deleted_configs, G.dynamic_configs),
delete G.deleted_configs,
k41(I.deleted_layers, G.layer_configs),
delete G.deleted_layers,
G
)
}
function k41(I, G) {
I === null ||
I === void 0 ||
I.forEach((Z) => {
delete G[Z]
})
}
})
var h41 = _((BM) => {
var Nl1 =
(BM && BM.__awaiter) ||
function (I, G, Z, d) {
function W(w) {
return w instanceof Z
? w
: new Z(function (B) {
B(w)
})
}
return new (Z || (Z = Promise))(function (w, B) {
function C(X) {
try {
A(d.next(X))
} catch (Y) {
B(Y)
}
}
function V(X) {
try {
A(d.throw(X))
} catch (Y) {
B(Y)
}
}
function A(X) {
X.done ? w(X.value) : W(X.value).then(C, V)
}
A((d = d.apply(I, G || [])).next())
})
}
Object.defineProperty(BM, '__esModule', { value: !0 })
var Gj = TY(),
GX4 = gl1()
class zl1 extends Gj.NetworkCore {
constructor(I, G) {
super(I, G)
let Z = I === null || I === void 0 ? void 0 : I.networkConfig
this._initializeUrlConfig = new Gj.UrlConfiguration(
Gj.Endpoint._initialize,
Z === null || Z === void 0 ? void 0 : Z.initializeUrl,
Z === null || Z === void 0 ? void 0 : Z.api,
Z === null || Z === void 0 ? void 0 : Z.initializeFallbackUrls,
)
}
fetchEvaluations(I, G, Z, d) {
return Nl1(this, void 0, void 0, function* () {
let W = G ? Gj._typedJsonParse(G, 'has_updates', 'InitializeResponse') : null,
w = { user: d, hash: 'djb2', deltasResponseRequested: !1, full_checksum: null }
if (W === null || W === void 0 ? void 0 : W.has_updates)
w = Object.assign(Object.assign({}, w), {
sinceTime: W.time,
previousDerivedFields: 'derived_fields' in W ? W.derived_fields : {},
deltasResponseRequested: !0,
full_checksum: W.full_checksum,
})
return this._fetchEvaluations(I, W, w, Z)
})
}
_fetchEvaluations(I, G, Z, d) {
var W, w
return Nl1(this, void 0, void 0, function* () {
let B = yield this.post({
sdkKey: I,
urlConfig: this._initializeUrlConfig,
data: Z,
retries: 2,
isStatsigEncodable: !0,
priority: d,
})
if ((B === null || B === void 0 ? void 0 : B.code) === 204) return '{"has_updates": false}'
if ((B === null || B === void 0 ? void 0 : B.code) !== 200)
return (W = B === null || B === void 0 ? void 0 : B.body) !== null && W !== void 0
? W
: null
if (
(G === null || G === void 0 ? void 0 : G.has_updates) !== !0 ||
((w = B.body) === null || w === void 0 ? void 0 : w.includes('"is_delta":true')) !== !0 ||
Z.deltasResponseRequested !== !0
)
return B.body
let C = GX4._resolveDeltasResponse(G, B.body)
if (typeof C === 'string') return C
return this._fetchEvaluations(
I,
G,
Object.assign(Object.assign(Object.assign({}, Z), C), { deltasResponseRequested: !1 }),
d,
)
})
}
}
BM.default = zl1
})
var fl1 = _((ql1) => {
Object.defineProperty(ql1, '__esModule', { value: !0 })
ql1._makeParamStoreGetter = void 0
var Ql1 = TY(),
Zj = { disableExposureLog: !0 }
function dj(I) {
return I == null || I.disableExposureLog === !1
}
function x41(I, G) {
return G != null && !Ql1._isTypeMatch(I, G)
}
function ZX4(I, G) {
return I.value
}
function dX4(I, G, Z) {
if (I.getFeatureGate(G.gate_name, dj(Z) ? void 0 : Zj).value) return G.pass_value
return G.fail_value
}
function WX4(I, G, Z, d) {
let w = I.getDynamicConfig(G.config_name, Zj).get(G.param_name)
if (x41(w, Z)) return Z
if (dj(d)) I.getDynamicConfig(G.config_name)
return w
}
function wX4(I, G, Z, d) {
let w = I.getExperiment(G.experiment_name, Zj).get(G.param_name)
if (x41(w, Z)) return Z
if (dj(d)) I.getExperiment(G.experiment_name)
return w
}
function BX4(I, G, Z, d) {
let w = I.getLayer(G.layer_name, Zj).get(G.param_name)
if (x41(w, Z)) return Z
if (dj(d)) I.getLayer(G.layer_name).get(G.param_name)
return w
}
function CX4(I, G, Z) {
return (d, W) => {
if (G == null) return W
let w = G[d]
if (w == null || (W != null && Ql1._typeOf(W) !== w.param_type)) return W
switch (w.ref_type) {
case 'static':
return ZX4(w, Z)
case 'gate':
return dX4(I, w, Z)
case 'dynamic_config':
return WX4(I, w, W, Z)
case 'experiment':
return wX4(I, w, W, Z)
case 'layer':
return BX4(I, w, W, Z)
default:
return W
}
}
}
ql1._makeParamStoreGetter = CX4
})
var El1 = _((oz) => {
var VX4 =
(oz && oz.__awaiter) ||
function (I, G, Z, d) {
function W(w) {
return w instanceof Z
? w
: new Z(function (B) {
B(w)
})
}
return new (Z || (Z = Promise))(function (w, B) {
function C(X) {
try {
A(d.next(X))
} catch (Y) {
B(Y)
}
}
function V(X) {
try {
A(d.throw(X))
} catch (Y) {
B(Y)
}
}
function A(X) {
X.done ? w(X.value) : W(X.value).then(C, V)
}
A((d = d.apply(I, G || [])).next())
})
}
Object.defineProperty(oz, '__esModule', { value: !0 })
oz.StatsigEvaluationsDataAdapter = void 0
var YJ = TY(),
AX4 = h41()
class Rl1 extends YJ.DataAdapterCore {
constructor() {
super('EvaluationsDataAdapter', 'evaluations')
;(this._network = null), (this._options = null)
}
attach(I, G) {
super.attach(I, G), (this._network = new AX4.default(G !== null && G !== void 0 ? G : {}))
}
getDataAsync(I, G, Z) {
return this._getDataAsyncImpl(I, YJ._normalizeUser(G, this._options), Z)
}
prefetchData(I, G) {
return this._prefetchDataImpl(I, G)
}
setData(I) {
let G = YJ._typedJsonParse(I, 'has_updates', 'data')
if (G && 'user' in G) super.setData(I, G.user)
else
YJ.Log.error(
'StatsigUser not found. You may be using an older server SDK version. Please upgrade your SDK or use setDataLegacy.',
)
}
setDataLegacy(I, G) {
super.setData(I, G)
}
_fetchFromNetwork(I, G, Z) {
var d
return VX4(this, void 0, void 0, function* () {
let W = yield (d = this._network) === null || d === void 0
? void 0
: d.fetchEvaluations(
this._getSdkKey(),
I,
Z === null || Z === void 0 ? void 0 : Z.priority,
G,
)
return W !== null && W !== void 0 ? W : null
})
}
_getCacheKey(I) {
var G
let Z = YJ._getStorageKey(
this._getSdkKey(),
I,
(G = this._options) === null || G === void 0 ? void 0 : G.customUserCacheKeyFunc,
)
return `${YJ.DataAdapterCachePrefix}.${this._cacheSuffix}.${Z}`
}
_isCachedResultValidFor204(I, G) {
return I.fullUserHash != null && I.fullUserHash === YJ._getFullUserHash(G)
}
}
oz.StatsigEvaluationsDataAdapter = Rl1
})
var vl1 = _((CM) => {
var c41 =
(CM && CM.__awaiter) ||
function (I, G, Z, d) {
function W(w) {
return w instanceof Z
? w
: new Z(function (B) {
B(w)
})
}
return new (Z || (Z = Promise))(function (w, B) {
function C(X) {
try {
A(d.next(X))
} catch (Y) {
B(Y)
}
}
function V(X) {
try {
A(d.throw(X))
} catch (Y) {
B(Y)
}
}
function A(X) {
X.done ? w(X.value) : W(X.value).then(C, V)
}
A((d = d.apply(I, G || [])).next())
})
}
Object.defineProperty(CM, '__esModule', { value: !0 })
var t4 = TY(),
XX4 = Hl1(),
YX4 = h41(),
_X4 = fl1(),
DX4 = El1()
class Wj extends t4.StatsigClientBase {
static instance(I) {
let G = t4._getStatsigGlobal().instance(I)
if (G instanceof Wj) return G
return (
t4.Log.warn(
t4._isServerEnv()
? 'StatsigClient.instance is not supported in server environments'
: 'Unable to find StatsigClient instance',
),
new Wj(I !== null && I !== void 0 ? I : '', {})
)
}
constructor(I, G, Z = null) {
var d, W
t4.SDKType._setClientType(I, 'javascript-client')
let w = new YX4.default(Z, (C) => {
this.$emt(C)
})
super(
I,
(d = Z === null || Z === void 0 ? void 0 : Z.dataAdapter) !== null && d !== void 0
? d
: new DX4.StatsigEvaluationsDataAdapter(),
w,
Z,
)
;(this.getFeatureGate = this._memoize(
t4.MemoPrefix._gate,
this._getFeatureGateImpl.bind(this),
)),
(this.getDynamicConfig = this._memoize(
t4.MemoPrefix._dynamicConfig,
this._getDynamicConfigImpl.bind(this),
)),
(this.getExperiment = this._memoize(
t4.MemoPrefix._experiment,
this._getExperimentImpl.bind(this),
)),
(this.getLayer = this._memoize(t4.MemoPrefix._layer, this._getLayerImpl.bind(this))),
(this.getParameterStore = this._memoize(
t4.MemoPrefix._paramStore,
this._getParameterStoreImpl.bind(this),
)),
(this._store = new XX4.default(I)),
(this._network = w),
(this._user = this._configureUser(G, Z))
let B =
(W = Z === null || Z === void 0 ? void 0 : Z.plugins) !== null && W !== void 0 ? W : []
for (let C of B) C.bind(this)
}
initializeSync(I) {
var G
if (this.loadingStatus !== 'Uninitialized')
return t4.createUpdateDetails(!0, this._store.getSource(), -1, null, null, [
'MultipleInitializations',
...((G = this._store.getWarnings()) !== null && G !== void 0 ? G : []),
])
return this._logger.start(), this.updateUserSync(this._user, I)
}
initializeAsync(I) {
return c41(this, void 0, void 0, function* () {
if (this._initializePromise) return this._initializePromise
return (this._initializePromise = this._initializeAsyncImpl(I)), this._initializePromise
})
}
updateUserSync(I, G) {
var Z
let d = performance.now(),
W = [...((Z = this._store.getWarnings()) !== null && Z !== void 0 ? Z : [])]
this._resetForUser(I)
let w = this.dataAdapter.getDataSync(this._user)
if (w == null) W.push('NoCachedValues')
this._store.setValues(w, this._user), this._finalizeUpdate(w)
let B = G === null || G === void 0 ? void 0 : G.disableBackgroundCacheRefresh
if (
B === !0 ||
(B == null && (w === null || w === void 0 ? void 0 : w.source) === 'Bootstrap')
)
return t4.createUpdateDetails(
!0,
this._store.getSource(),
performance.now() - d,
this._errorBoundary.getLastSeenErrorAndReset(),
this._network.getLastUsedInitUrlAndReset(),
W,
)
return (
this._runPostUpdate(w !== null && w !== void 0 ? w : null, this._user),
t4.createUpdateDetails(
!0,
this._store.getSource(),
performance.now() - d,
this._errorBoundary.getLastSeenErrorAndReset(),
this._network.getLastUsedInitUrlAndReset(),
W,
)
)
}
updateUserAsync(I, G) {
return c41(this, void 0, void 0, function* () {
this._resetForUser(I)
let Z = this._user
t4.Diagnostics._markInitOverallStart(this._sdkKey)
let d = this.dataAdapter.getDataSync(Z)
if (
(this._store.setValues(d, this._user),
this._setStatus('Loading', d),
(d = yield this.dataAdapter.getDataAsync(d, Z, G)),
Z !== this._user)
)
return t4.createUpdateDetails(
!1,
this._store.getSource(),
-1,
new Error('User changed during update'),
this._network.getLastUsedInitUrlAndReset(),
)
let W = !1
if (d != null)
t4.Diagnostics._markInitProcessStart(this._sdkKey),
(W = this._store.setValues(d, this._user)),
t4.Diagnostics._markInitProcessEnd(this._sdkKey, { success: W })
if ((this._finalizeUpdate(d), !W))
this._errorBoundary.attachErrorIfNoneExists(
t4.UPDATE_DETAIL_ERROR_MESSAGES.NO_NETWORK_DATA,
),
this.$emt({ name: 'initialization_failure' })
t4.Diagnostics._markInitOverallEnd(this._sdkKey, W, this._store.getCurrentSourceDetails())
let w = t4.Diagnostics._enqueueDiagnosticsEvent(
this._user,
this._logger,
this._sdkKey,
this._options,
)
return t4.createUpdateDetails(
W,
this._store.getSource(),
w,
this._errorBoundary.getLastSeenErrorAndReset(),
this._network.getLastUsedInitUrlAndReset(),
this._store.getWarnings(),
)
})
}
getContext() {
return {
sdkKey: this._sdkKey,
options: this._options,
values: this._store.getValues(),
user: JSON.parse(JSON.stringify(this._user)),
errorBoundary: this._errorBoundary,
session: t4.StatsigSession.get(this._sdkKey),
stableID: t4.StableID.get(this._sdkKey),
}
}
checkGate(I, G) {
return this.getFeatureGate(I, G).value
}
logEvent(I, G, Z) {
let d = typeof I === 'string' ? { eventName: I, value: G, metadata: Z } : I
this._logger.enqueue(
Object.assign(Object.assign({}, d), { user: this._user, time: Date.now() }),
)
}
_primeReadyRipcord() {
this.$on('error', () => {
this.loadingStatus === 'Loading' && this._finalizeUpdate(null)
})
}
_initializeAsyncImpl(I) {
return c41(this, void 0, void 0, function* () {
if (!t4.Storage.isReady()) yield t4.Storage.isReadyResolver()
return this._logger.start(), this.updateUserAsync(this._user, I)
})
}
_finalizeUpdate(I) {
this._store.finalize(), this._setStatus('Ready', I)
}
_runPostUpdate(I, G) {
this.dataAdapter.getDataAsync(I, G, { priority: 'low' }).catch((Z) => {
t4.Log.error('An error occurred after update.', Z)
})
}
_resetForUser(I) {
this._logger.reset(),
this._store.reset(),
(this._user = this._configureUser(I, this._options))
}
_configureUser(I, G) {
var Z
let d = t4._normalizeUser(I, G),
W = (Z = d.customIDs) === null || Z === void 0 ? void 0 : Z.stableID
if (W) t4.StableID.setOverride(W, this._sdkKey)
return d
}
_getFeatureGateImpl(I, G) {
var Z, d
let { result: W, details: w } = this._store.getGate(I),
B = t4._makeFeatureGate(I, w, W),
C =
(d = (Z = this.overrideAdapter) === null || Z === void 0 ? void 0 : Z.getGateOverride) ===
null || d === void 0
? void 0
: d.call(Z, B, this._user, G),
V = C !== null && C !== void 0 ? C : B
return (
this._enqueueExposure(I, t4._createGateExposure(this._user, V), G),
this.$emt({ name: 'gate_evaluation', gate: V }),
V
)
}
_getDynamicConfigImpl(I, G) {
var Z, d
let { result: W, details: w } = this._store.getConfig(I),
B = t4._makeDynamicConfig(I, w, W),
C =
(d =
(Z = this.overrideAdapter) === null || Z === void 0
? void 0
: Z.getDynamicConfigOverride) === null || d === void 0
? void 0
: d.call(Z, B, this._user, G),
V = C !== null && C !== void 0 ? C : B
return (
this._enqueueExposure(I, t4._createConfigExposure(this._user, V), G),
this.$emt({ name: 'dynamic_config_evaluation', dynamicConfig: V }),
V
)
}
_getExperimentImpl(I, G) {
var Z, d
let { result: W, details: w } = this._store.getConfig(I),
B = t4._makeExperiment(I, w, W),
C =
(d =
(Z = this.overrideAdapter) === null || Z === void 0
? void 0
: Z.getExperimentOverride) === null || d === void 0
? void 0
: d.call(Z, B, this._user, G),
V = C !== null && C !== void 0 ? C : B
return (
this._enqueueExposure(I, t4._createConfigExposure(this._user, V), G),
this.$emt({ name: 'experiment_evaluation', experiment: V }),
V
)
}
_getLayerImpl(I, G) {
var Z, d, W
let { result: w, details: B } = this._store.getLayer(I),
C = t4._makeLayer(I, B, w),
V =
(d =
(Z = this.overrideAdapter) === null || Z === void 0 ? void 0 : Z.getLayerOverride) ===
null || d === void 0
? void 0
: d.call(Z, C, this._user, G)
if (G === null || G === void 0 ? void 0 : G.disableExposureLog)
this._logger.incrementNonExposureCount(I)
let A = t4._mergeOverride(
C,
V,
(W = V === null || V === void 0 ? void 0 : V.__value) !== null && W !== void 0
? W
: C.__value,
(X) => {
if (G === null || G === void 0 ? void 0 : G.disableExposureLog) return
this._enqueueExposure(I, t4._createLayerParameterExposure(this._user, A, X), G)
},
)
return this.$emt({ name: 'layer_evaluation', layer: A }), A
}
_getParameterStoreImpl(I, G) {
let { result: Z, details: d } = this._store.getParamStore(I)
return (
this._logger.incrementNonExposureCount(I),
{ name: I, details: d, __configuration: Z, get: _X4._makeParamStoreGetter(this, Z, G) }
)
}
}
CM.default = Wj
})
var Sl1 = _(($B) => {
var HX4 =
($B && $B.__createBinding) ||
(Object.create
? function (I, G, Z, d) {
if (d === void 0) d = Z
var W = Object.getOwnPropertyDescriptor(G, Z)
if (!W || ('get' in W ? !G.__esModule : W.writable || W.configurable))
W = {
enumerable: !0,
get: function () {
return G[Z]
},
}
Object.defineProperty(I, d, W)
}
: function (I, G, Z, d) {
if (d === void 0) d = Z
I[d] = G[Z]
}),
FX4 =
($B && $B.__exportStar) ||
function (I, G) {
for (var Z in I)
if (Z !== 'default' && !Object.prototype.hasOwnProperty.call(G, Z)) HX4(G, I, Z)
}
Object.defineProperty($B, '__esModule', { value: !0 })
$B.StatsigClient = void 0
var Ml1 = vl1()
$B.StatsigClient = Ml1.default
FX4(TY(), $B)
__STATSIG__ = Object.assign(
Object.assign({}, __STATSIG__ !== null && __STATSIG__ !== void 0 ? __STATSIG__ : {}),
{ StatsigClient: Ml1.default },
)
$B.default = __STATSIG__
})
var fj1 = _(($$9, Uj1) => {
var h3 = {}
Uj1.exports = h3
function qj1(I) {
return I < 0 ? -1 : 1
}
function GY4(I) {
if (I % 1 === 0.5 && (I & 1) === 0) return Math.floor(I)
else return Math.round(I)
}
function jY(I, G) {
if (!G.unsigned) --I
let Z = G.unsigned ? 0 : -Math.pow(2, I),
d = Math.pow(2, I) - 1,
W = G.moduloBitLength ? Math.pow(2, G.moduloBitLength) : Math.pow(2, I),
w = G.moduloBitLength ? Math.pow(2, G.moduloBitLength - 1) : Math.pow(2, I - 1)
return function (B, C) {
if (!C) C = {}
let V = +B
if (C.enforceRange) {
if (!Number.isFinite(V)) throw new TypeError('Argument is not a finite number')
if (((V = qj1(V) * Math.floor(Math.abs(V))), V < Z || V > d))
throw new TypeError('Argument is not in byte range')
return V
}
if (!isNaN(V) && C.clamp) {
if (((V = GY4(V)), V < Z)) V = Z
if (V > d) V = d
return V
}
if (!Number.isFinite(V) || V === 0) return 0
if (((V = qj1(V) * Math.floor(Math.abs(V))), (V = V % W), !G.unsigned && V >= w)) return V - W
else if (G.unsigned) {
if (V < 0) V += W
else if (V === -0) return 0
}
return V
}
}
h3.void = function () {
return
}
h3.boolean = function (I) {
return !!I
}
h3.byte = jY(8, { unsigned: !1 })
h3.octet = jY(8, { unsigned: !0 })
h3.short = jY(16, { unsigned: !1 })
h3['unsigned short'] = jY(16, { unsigned: !0 })
h3.long = jY(32, { unsigned: !1 })
h3['unsigned long'] = jY(32, { unsigned: !0 })
h3['long long'] = jY(32, { unsigned: !1, moduloBitLength: 64 })
h3['unsigned long long'] = jY(32, { unsigned: !0, moduloBitLength: 64 })
h3.double = function (I) {
let G = +I
if (!Number.isFinite(G)) throw new TypeError('Argument is not a finite floating-point value')
return G
}
h3['unrestricted double'] = function (I) {
let G = +I
if (isNaN(G)) throw new TypeError('Argument is NaN')
return G
}
h3.float = h3.double
h3['unrestricted float'] = h3['unrestricted double']
h3.DOMString = function (I, G) {
if (!G) G = {}
if (G.treatNullAsEmptyString && I === null) return ''
return String(I)
}
h3.ByteString = function (I, G) {
let Z = String(I),
d = void 0
for (let W = 0; (d = Z.codePointAt(W)) !== void 0; ++W)
if (d > 255) throw new TypeError('Argument is not a valid bytestring')
return Z
}
h3.USVString = function (I) {
let G = String(I),
Z = G.length,
d = []
for (let W = 0; W < Z; ++W) {
let w = G.charCodeAt(W)
if (w < 55296 || w > 57343) d.push(String.fromCodePoint(w))
else if (56320 <= w && w <= 57343) d.push(String.fromCodePoint(65533))
else if (W === Z - 1) d.push(String.fromCodePoint(65533))
else {
let B = G.charCodeAt(W + 1)
if (56320 <= B && B <= 57343) {
let C = w & 1023,
V = B & 1023
d.push(String.fromCodePoint(65536 + 1024 * C + V)), ++W
} else d.push(String.fromCodePoint(65533))
}
}
return d.join('')
}
h3.Date = function (I, G) {
if (!(I instanceof Date)) throw new TypeError('Argument is not a Date object')
if (isNaN(I)) return
return I
}
h3.RegExp = function (I, G) {
if (!(I instanceof RegExp)) I = new RegExp(I)
return I
}
})
var vj1 = _((ZY4, kY) => {
ZY4.mixin = function I(G, Z) {
let d = Object.getOwnPropertyNames(Z)
for (let W = 0; W < d.length; ++W)
Object.defineProperty(G, d[W], Object.getOwnPropertyDescriptor(Z, d[W]))
}
ZY4.wrapperSymbol = Symbol('wrapper')
ZY4.implSymbol = Symbol('impl')
ZY4.wrapperForImpl = function (I) {
return I[ZY4.wrapperSymbol]
}
ZY4.implForWrapper = function (I) {
return I[ZY4.implSymbol]
}
})
var Mj1 = _((y$9, BY4) => {
BY4.exports = [
[[0, 44], 'disallowed_STD3_valid'],
[[45, 46], 'valid'],
[[47, 47], 'disallowed_STD3_valid'],
[[48, 57], 'valid'],
[[58, 64], 'disallowed_STD3_valid'],
[[65, 65], 'mapped', [97]],
[[66, 66], 'mapped', [98]],
[[67, 67], 'mapped', [99]],
[[68, 68], 'mapped', [100]],
[[69, 69], 'mapped', [101]],
[[70, 70], 'mapped', [102]],
[[71, 71], 'mapped', [103]],
[[72, 72], 'mapped', [104]],
[[73, 73], 'mapped', [105]],
[[74, 74], 'mapped', [106]],
[[75, 75], 'mapped', [107]],
[[76, 76], 'mapped', [108]],
[[77, 77], 'mapped', [109]],
[[78, 78], 'mapped', [110]],
[[79, 79], 'mapped', [111]],
[[80, 80], 'mapped', [112]],
[[81, 81], 'mapped', [113]],
[[82, 82], 'mapped', [114]],
[[83, 83], 'mapped', [115]],
[[84, 84], 'mapped', [116]],
[[85, 85], 'mapped', [117]],
[[86, 86], 'mapped', [118]],
[[87, 87], 'mapped', [119]],
[[88, 88], 'mapped', [120]],
[[89, 89], 'mapped', [121]],
[[90, 90], 'mapped', [122]],
[[91, 96], 'disallowed_STD3_valid'],
[[97, 122], 'valid'],
[[123, 127], 'disallowed_STD3_valid'],
[[128, 159], 'disallowed'],
[[160, 160], 'disallowed_STD3_mapped', [32]],
[[161, 167], 'valid', [], 'NV8'],
[[168, 168], 'disallowed_STD3_mapped', [32, 776]],
[[169, 169], 'valid', [], 'NV8'],
[[170, 170], 'mapped', [97]],
[[171, 172], 'valid', [], 'NV8'],
[[173, 173], 'ignored'],
[[174, 174], 'valid', [], 'NV8'],
[[175, 175], 'disallowed_STD3_mapped', [32, 772]],
[[176, 177], 'valid', [], 'NV8'],
[[178, 178], 'mapped', [50]],
[[179, 179], 'mapped', [51]],
[[180, 180], 'disallowed_STD3_mapped', [32, 769]],
[[181, 181], 'mapped', [956]],
[[182, 182], 'valid', [], 'NV8'],
[[183, 183], 'valid'],
[[184, 184], 'disallowed_STD3_mapped', [32, 807]],
[[185, 185], 'mapped', [49]],
[[186, 186], 'mapped', [111]],
[[187, 187], 'valid', [], 'NV8'],
[[188, 188], 'mapped', [49, 8260, 52]],
[[189, 189], 'mapped', [49, 8260, 50]],
[[190, 190], 'mapped', [51, 8260, 52]],
[[191, 191], 'valid', [], 'NV8'],
[[192, 192], 'mapped', [224]],
[[193, 193], 'mapped', [225]],
[[194, 194], 'mapped', [226]],
[[195, 195], 'mapped', [227]],
[[196, 196], 'mapped', [228]],
[[197, 197], 'mapped', [229]],
[[198, 198], 'mapped', [230]],
[[199, 199], 'mapped', [231]],
[[200, 200], 'mapped', [232]],
[[201, 201], 'mapped', [233]],
[[202, 202], 'mapped', [234]],
[[203, 203], 'mapped', [235]],
[[204, 204], 'mapped', [236]],
[[205, 205], 'mapped', [237]],
[[206, 206], 'mapped', [238]],
[[207, 207], 'mapped', [239]],
[[208, 208], 'mapped', [240]],
[[209, 209], 'mapped', [241]],
[[210, 210], 'mapped', [242]],
[[211, 211], 'mapped', [243]],
[[212, 212], 'mapped', [244]],
[[213, 213], 'mapped', [245]],
[[214, 214], 'mapped', [246]],
[[215, 215], 'valid', [], 'NV8'],
[[216, 216], 'mapped', [248]],
[[217, 217], 'mapped', [249]],
[[218, 218], 'mapped', [250]],
[[219, 219], 'mapped', [251]],
[[220, 220], 'mapped', [252]],
[[221, 221], 'mapped', [253]],
[[222, 222], 'mapped', [254]],
[[223, 223], 'deviation', [115, 115]],
[[224, 246], 'valid'],
[[247, 247], 'valid', [], 'NV8'],
[[248, 255], 'valid'],
[[256, 256], 'mapped', [257]],
[[257, 257], 'valid'],
[[258, 258], 'mapped', [259]],
[[259, 259], 'valid'],
[[260, 260], 'mapped', [261]],
[[261, 261], 'valid'],
[[262, 262], 'mapped', [263]],
[[263, 263], 'valid'],
[[264, 264], 'mapped', [265]],
[[265, 265], 'valid'],
[[266, 266], 'mapped', [267]],
[[267, 267], 'valid'],
[[268, 268], 'mapped', [269]],
[[269, 269], 'valid'],
[[270, 270], 'mapped', [271]],
[[271, 271], 'valid'],
[[272, 272], 'mapped', [273]],
[[273, 273], 'valid'],
[[274, 274], 'mapped', [275]],
[[275, 275], 'valid'],
[[276, 276], 'mapped', [277]],
[[277, 277], 'valid'],
[[278, 278], 'mapped', [279]],
[[279, 279], 'valid'],
[[280, 280], 'mapped', [281]],
[[281, 281], 'valid'],
[[282, 282], 'mapped', [283]],
[[283, 283], 'valid'],
[[284, 284], 'mapped', [285]],
[[285, 285], 'valid'],
[[286, 286], 'mapped', [287]],
[[287, 287], 'valid'],
[[288, 288], 'mapped', [289]],
[[289, 289], 'valid'],
[[290, 290], 'mapped', [291]],
[[291, 291], 'valid'],
[[292, 292], 'mapped', [293]],
[[293, 293], 'valid'],
[[294, 294], 'mapped', [295]],
[[295, 295], 'valid'],
[[296, 296], 'mapped', [297]],
[[297, 297], 'valid'],
[[298, 298], 'mapped', [299]],
[[299, 299], 'valid'],
[[300, 300], 'mapped', [301]],
[[301, 301], 'valid'],
[[302, 302], 'mapped', [303]],
[[303, 303], 'valid'],
[[304, 304], 'mapped', [105, 775]],
[[305, 305], 'valid'],
[[306, 307], 'mapped', [105, 106]],
[[308, 308], 'mapped', [309]],
[[309, 309], 'valid'],
[[310, 310], 'mapped', [311]],
[[311, 312], 'valid'],
[[313, 313], 'mapped', [314]],
[[314, 314], 'valid'],
[[315, 315], 'mapped', [316]],
[[316, 316], 'valid'],
[[317, 317], 'mapped', [318]],
[[318, 318], 'valid'],
[[319, 320], 'mapped', [108, 183]],
[[321, 321], 'mapped', [322]],
[[322, 322], 'valid'],
[[323, 323], 'mapped', [324]],
[[324, 324], 'valid'],
[[325, 325], 'mapped', [326]],
[[326, 326], 'valid'],
[[327, 327], 'mapped', [328]],
[[328, 328], 'valid'],
[[329, 329], 'mapped', [700, 110]],
[[330, 330], 'mapped', [331]],
[[331, 331], 'valid'],
[[332, 332], 'mapped', [333]],
[[333, 333], 'valid'],
[[334, 334], 'mapped', [335]],
[[335, 335], 'valid'],
[[336, 336], 'mapped', [337]],
[[337, 337], 'valid'],
[[338, 338], 'mapped', [339]],
[[339, 339], 'valid'],
[[340, 340], 'mapped', [341]],
[[341, 341], 'valid'],
[[342, 342], 'mapped', [343]],
[[343, 343], 'valid'],
[[344, 344], 'mapped', [345]],
[[345, 345], 'valid'],
[[346, 346], 'mapped', [347]],
[[347, 347], 'valid'],
[[348, 348], 'mapped', [349]],
[[349, 349], 'valid'],
[[350, 350], 'mapped', [351]],
[[351, 351], 'valid'],
[[352, 352], 'mapped', [353]],
[[353, 353], 'valid'],
[[354, 354], 'mapped', [355]],
[[355, 355], 'valid'],
[[356, 356], 'mapped', [357]],
[[357, 357], 'valid'],
[[358, 358], 'mapped', [359]],
[[359, 359], 'valid'],
[[360, 360], 'mapped', [361]],
[[361, 361], 'valid'],
[[362, 362], 'mapped', [363]],
[[363, 363], 'valid'],
[[364, 364], 'mapped', [365]],
[[365, 365], 'valid'],
[[366, 366], 'mapped', [367]],
[[367, 367], 'valid'],
[[368, 368], 'mapped', [369]],
[[369, 369], 'valid'],
[[370, 370], 'mapped', [371]],
[[371, 371], 'valid'],
[[372, 372], 'mapped', [373]],
[[373, 373], 'valid'],
[[374, 374], 'mapped', [375]],
[[375, 375], 'valid'],
[[376, 376], 'mapped', [255]],
[[377, 377], 'mapped', [378]],
[[378, 378], 'valid'],
[[379, 379], 'mapped', [380]],
[[380, 380], 'valid'],
[[381, 381], 'mapped', [382]],
[[382, 382], 'valid'],
[[383, 383], 'mapped', [115]],
[[384, 384], 'valid'],
[[385, 385], 'mapped', [595]],
[[386, 386], 'mapped', [387]],
[[387, 387], 'valid'],
[[388, 388], 'mapped', [389]],
[[389, 389], 'valid'],
[[390, 390], 'mapped', [596]],
[[391, 391], 'mapped', [392]],
[[392, 392], 'valid'],
[[393, 393], 'mapped', [598]],
[[394, 394], 'mapped', [599]],
[[395, 395], 'mapped', [396]],
[[396, 397], 'valid'],
[[398, 398], 'mapped', [477]],
[[399, 399], 'mapped', [601]],
[[400, 400], 'mapped', [603]],
[[401, 401], 'mapped', [402]],
[[402, 402], 'valid'],
[[403, 403], 'mapped', [608]],
[[404, 404], 'mapped', [611]],
[[405, 405], 'valid'],
[[406, 406], 'mapped', [617]],
[[407, 407], 'mapped', [616]],
[[408, 408], 'mapped', [409]],
[[409, 411], 'valid'],
[[412, 412], 'mapped', [623]],
[[413, 413], 'mapped', [626]],
[[414, 414], 'valid'],
[[415, 415], 'mapped', [629]],
[[416, 416], 'mapped', [417]],
[[417, 417], 'valid'],
[[418, 418], 'mapped', [419]],
[[419, 419], 'valid'],
[[420, 420], 'mapped', [421]],
[[421, 421], 'valid'],
[[422, 422], 'mapped', [640]],
[[423, 423], 'mapped', [424]],
[[424, 424], 'valid'],
[[425, 425], 'mapped', [643]],
[[426, 427], 'valid'],
[[428, 428], 'mapped', [429]],
[[429, 429], 'valid'],
[[430, 430], 'mapped', [648]],
[[431, 431], 'mapped', [432]],
[[432, 432], 'valid'],
[[433, 433], 'mapped', [650]],
[[434, 434], 'mapped', [651]],
[[435, 435], 'mapped', [436]],
[[436, 436], 'valid'],
[[437, 437], 'mapped', [438]],
[[438, 438], 'valid'],
[[439, 439], 'mapped', [658]],
[[440, 440], 'mapped', [441]],
[[441, 443], 'valid'],
[[444, 444], 'mapped', [445]],
[[445, 451], 'valid'],
[[452, 454], 'mapped', [100, 382]],
[[455, 457], 'mapped', [108, 106]],
[[458, 460], 'mapped', [110, 106]],
[[461, 461], 'mapped', [462]],
[[462, 462], 'valid'],
[[463, 463], 'mapped', [464]],
[[464, 464], 'valid'],
[[465, 465], 'mapped', [466]],
[[466, 466], 'valid'],
[[467, 467], 'mapped', [468]],
[[468, 468], 'valid'],
[[469, 469], 'mapped', [470]],
[[470, 470], 'valid'],
[[471, 471], 'mapped', [472]],
[[472, 472], 'valid'],
[[473, 473], 'mapped', [474]],
[[474, 474], 'valid'],
[[475, 475], 'mapped', [476]],
[[476, 477], 'valid'],
[[478, 478], 'mapped', [479]],
[[479, 479], 'valid'],
[[480, 480], 'mapped', [481]],
[[481, 481], 'valid'],
[[482, 482], 'mapped', [483]],
[[483, 483], 'valid'],
[[484, 484], 'mapped', [485]],
[[485, 485], 'valid'],
[[486, 486], 'mapped', [487]],
[[487, 487], 'valid'],
[[488, 488], 'mapped', [489]],
[[489, 489], 'valid'],
[[490, 490], 'mapped', [491]],
[[491, 491], 'valid'],
[[492, 492], 'mapped', [493]],
[[493, 493], 'valid'],
[[494, 494], 'mapped', [495]],
[[495, 496], 'valid'],
[[497, 499], 'mapped', [100, 122]],
[[500, 500], 'mapped', [501]],
[[501, 501], 'valid'],
[[502, 502], 'mapped', [405]],
[[503, 503], 'mapped', [447]],
[[504, 504], 'mapped', [505]],
[[505, 505], 'valid'],
[[506, 506], 'mapped', [507]],
[[507, 507], 'valid'],
[[508, 508], 'mapped', [509]],
[[509, 509], 'valid'],
[[510, 510], 'mapped', [511]],
[[511, 511], 'valid'],
[[512, 512], 'mapped', [513]],
[[513, 513], 'valid'],
[[514, 514], 'mapped', [515]],
[[515, 515], 'valid'],
[[516, 516], 'mapped', [517]],
[[517, 517], 'valid'],
[[518, 518], 'mapped', [519]],
[[519, 519], 'valid'],
[[520, 520], 'mapped', [521]],
[[521, 521], 'valid'],
[[522, 522], 'mapped', [523]],
[[523, 523], 'valid'],
[[524, 524], 'mapped', [525]],
[[525, 525], 'valid'],
[[526, 526], 'mapped', [527]],
[[527, 527], 'valid'],
[[528, 528], 'mapped', [529]],
[[529, 529], 'valid'],
[[530, 530], 'mapped', [531]],
[[531, 531], 'valid'],
[[532, 532], 'mapped', [533]],
[[533, 533], 'valid'],
[[534, 534], 'mapped', [535]],
[[535, 535], 'valid'],
[[536, 536], 'mapped', [537]],
[[537, 537], 'valid'],
[[538, 538], 'mapped', [539]],
[[539, 539], 'valid'],
[[540, 540], 'mapped', [541]],
[[541, 541], 'valid'],
[[542, 542], 'mapped', [543]],
[[543, 543], 'valid'],
[[544, 544], 'mapped', [414]],
[[545, 545], 'valid'],
[[546, 546], 'mapped', [547]],
[[547, 547], 'valid'],
[[548, 548], 'mapped', [549]],
[[549, 549], 'valid'],
[[550, 550], 'mapped', [551]],
[[551, 551], 'valid'],
[[552, 552], 'mapped', [553]],
[[553, 553], 'valid'],
[[554, 554], 'mapped', [555]],
[[555, 555], 'valid'],
[[556, 556], 'mapped', [557]],
[[557, 557], 'valid'],
[[558, 558], 'mapped', [559]],
[[559, 559], 'valid'],
[[560, 560], 'mapped', [561]],
[[561, 561], 'valid'],
[[562, 562], 'mapped', [563]],
[[563, 563], 'valid'],
[[564, 566], 'valid'],
[[567, 569], 'valid'],
[[570, 570], 'mapped', [11365]],
[[571, 571], 'mapped', [572]],
[[572, 572], 'valid'],
[[573, 573], 'mapped', [410]],
[[574, 574], 'mapped', [11366]],
[[575, 576], 'valid'],
[[577, 577], 'mapped', [578]],
[[578, 578], 'valid'],
[[579, 579], 'mapped', [384]],
[[580, 580], 'mapped', [649]],
[[581, 581], 'mapped', [652]],
[[582, 582], 'mapped', [583]],
[[583, 583], 'valid'],
[[584, 584], 'mapped', [585]],
[[585, 585], 'valid'],
[[586, 586], 'mapped', [587]],
[[587, 587], 'valid'],
[[588, 588], 'mapped', [589]],
[[589, 589], 'valid'],
[[590, 590], 'mapped', [591]],
[[591, 591], 'valid'],
[[592, 680], 'valid'],
[[681, 685], 'valid'],
[[686, 687], 'valid'],
[[688, 688], 'mapped', [104]],
[[689, 689], 'mapped', [614]],
[[690, 690], 'mapped', [106]],
[[691, 691], 'mapped', [114]],
[[692, 692], 'mapped', [633]],
[[693, 693], 'mapped', [635]],
[[694, 694], 'mapped', [641]],
[[695, 695], 'mapped', [119]],
[[696, 696], 'mapped', [121]],
[[697, 705], 'valid'],
[[706, 709], 'valid', [], 'NV8'],
[[710, 721], 'valid'],
[[722, 727], 'valid', [], 'NV8'],
[[728, 728], 'disallowed_STD3_mapped', [32, 774]],
[[729, 729], 'disallowed_STD3_mapped', [32, 775]],
[[730, 730], 'disallowed_STD3_mapped', [32, 778]],
[[731, 731], 'disallowed_STD3_mapped', [32, 808]],
[[732, 732], 'disallowed_STD3_mapped', [32, 771]],
[[733, 733], 'disallowed_STD3_mapped', [32, 779]],
[[734, 734], 'valid', [], 'NV8'],
[[735, 735], 'valid', [], 'NV8'],
[[736, 736], 'mapped', [611]],
[[737, 737], 'mapped', [108]],
[[738, 738], 'mapped', [115]],
[[739, 739], 'mapped', [120]],
[[740, 740], 'mapped', [661]],
[[741, 745], 'valid', [], 'NV8'],
[[746, 747], 'valid', [], 'NV8'],
[[748, 748], 'valid'],
[[749, 749], 'valid', [], 'NV8'],
[[750, 750], 'valid'],
[[751, 767], 'valid', [], 'NV8'],
[[768, 831], 'valid'],
[[832, 832], 'mapped', [768]],
[[833, 833], 'mapped', [769]],
[[834, 834], 'valid'],
[[835, 835], 'mapped', [787]],
[[836, 836], 'mapped', [776, 769]],
[[837, 837], 'mapped', [953]],
[[838, 846], 'valid'],
[[847, 847], 'ignored'],
[[848, 855], 'valid'],
[[856, 860], 'valid'],
[[861, 863], 'valid'],
[[864, 865], 'valid'],
[[866, 866], 'valid'],
[[867, 879], 'valid'],
[[880, 880], 'mapped', [881]],
[[881, 881], 'valid'],
[[882, 882], 'mapped', [883]],
[[883, 883], 'valid'],
[[884, 884], 'mapped', [697]],
[[885, 885], 'valid'],
[[886, 886], 'mapped', [887]],
[[887, 887], 'valid'],
[[888, 889], 'disallowed'],
[[890, 890], 'disallowed_STD3_mapped', [32, 953]],
[[891, 893], 'valid'],
[[894, 894], 'disallowed_STD3_mapped', [59]],
[[895, 895], 'mapped', [1011]],
[[896, 899], 'disallowed'],
[[900, 900], 'disallowed_STD3_mapped', [32, 769]],
[[901, 901], 'disallowed_STD3_mapped', [32, 776, 769]],
[[902, 902], 'mapped', [940]],
[[903, 903], 'mapped', [183]],
[[904, 904], 'mapped', [941]],
[[905, 905], 'mapped', [942]],
[[906, 906], 'mapped', [943]],
[[907, 907], 'disallowed'],
[[908, 908], 'mapped', [972]],
[[909, 909], 'disallowed'],
[[910, 910], 'mapped', [973]],
[[911, 911], 'mapped', [974]],
[[912, 912], 'valid'],
[[913, 913], 'mapped', [945]],
[[914, 914], 'mapped', [946]],
[[915, 915], 'mapped', [947]],
[[916, 916], 'mapped', [948]],
[[917, 917], 'mapped', [949]],
[[918, 918], 'mapped', [950]],
[[919, 919], 'mapped', [951]],
[[920, 920], 'mapped', [952]],
[[921, 921], 'mapped', [953]],
[[922, 922], 'mapped', [954]],
[[923, 923], 'mapped', [955]],
[[924, 924], 'mapped', [956]],
[[925, 925], 'mapped', [957]],
[[926, 926], 'mapped', [958]],
[[927, 927], 'mapped', [959]],
[[928, 928], 'mapped', [960]],
[[929, 929], 'mapped', [961]],
[[930, 930], 'disallowed'],
[[931, 931], 'mapped', [963]],
[[932, 932], 'mapped', [964]],
[[933, 933], 'mapped', [965]],
[[934, 934], 'mapped', [966]],
[[935, 935], 'mapped', [967]],
[[936, 936], 'mapped', [968]],
[[937, 937], 'mapped', [969]],
[[938, 938], 'mapped', [970]],
[[939, 939], 'mapped', [971]],
[[940, 961], 'valid'],
[[962, 962], 'deviation', [963]],
[[963, 974], 'valid'],
[[975, 975], 'mapped', [983]],
[[976, 976], 'mapped', [946]],
[[977, 977], 'mapped', [952]],
[[978, 978], 'mapped', [965]],
[[979, 979], 'mapped', [973]],
[[980, 980], 'mapped', [971]],
[[981, 981], 'mapped', [966]],
[[982, 982], 'mapped', [960]],
[[983, 983], 'valid'],
[[984, 984], 'mapped', [985]],
[[985, 985], 'valid'],
[[986, 986], 'mapped', [987]],
[[987, 987], 'valid'],
[[988, 988], 'mapped', [989]],
[[989, 989], 'valid'],
[[990, 990], 'mapped', [991]],
[[991, 991], 'valid'],
[[992, 992], 'mapped', [993]],
[[993, 993], 'valid'],
[[994, 994], 'mapped', [995]],
[[995, 995], 'valid'],
[[996, 996], 'mapped', [997]],
[[997, 997], 'valid'],
[[998, 998], 'mapped', [999]],
[[999, 999], 'valid'],
[[1000, 1000], 'mapped', [1001]],
[[1001, 1001], 'valid'],
[[1002, 1002], 'mapped', [1003]],
[[1003, 1003], 'valid'],
[[1004, 1004], 'mapped', [1005]],
[[1005, 1005], 'valid'],
[[1006, 1006], 'mapped', [1007]],
[[1007, 1007], 'valid'],
[[1008, 1008], 'mapped', [954]],
[[1009, 1009], 'mapped', [961]],
[[1010, 1010], 'mapped', [963]],
[[1011, 1011], 'valid'],
[[1012, 1012], 'mapped', [952]],
[[1013, 1013], 'mapped', [949]],
[[1014, 1014], 'valid', [], 'NV8'],
[[1015, 1015], 'mapped', [1016]],
[[1016, 1016], 'valid'],
[[1017, 1017], 'mapped', [963]],
[[1018, 1018], 'mapped', [1019]],
[[1019, 1019], 'valid'],
[[1020, 1020], 'valid'],
[[1021, 1021], 'mapped', [891]],
[[1022, 1022], 'mapped', [892]],
[[1023, 1023], 'mapped', [893]],
[[1024, 1024], 'mapped', [1104]],
[[1025, 1025], 'mapped', [1105]],
[[1026, 1026], 'mapped', [1106]],
[[1027, 1027], 'mapped', [1107]],
[[1028, 1028], 'mapped', [1108]],
[[1029, 1029], 'mapped', [1109]],
[[1030, 1030], 'mapped', [1110]],
[[1031, 1031], 'mapped', [1111]],
[[1032, 1032], 'mapped', [1112]],
[[1033, 1033], 'mapped', [1113]],
[[1034, 1034], 'mapped', [1114]],
[[1035, 1035], 'mapped', [1115]],
[[1036, 1036], 'mapped', [1116]],
[[1037, 1037], 'mapped', [1117]],
[[1038, 1038], 'mapped', [1118]],
[[1039, 1039], 'mapped', [1119]],
[[1040, 1040], 'mapped', [1072]],
[[1041, 1041], 'mapped', [1073]],
[[1042, 1042], 'mapped', [1074]],
[[1043, 1043], 'mapped', [1075]],
[[1044, 1044], 'mapped', [1076]],
[[1045, 1045], 'mapped', [1077]],
[[1046, 1046], 'mapped', [1078]],
[[1047, 1047], 'mapped', [1079]],
[[1048, 1048], 'mapped', [1080]],
[[1049, 1049], 'mapped', [1081]],
[[1050, 1050], 'mapped', [1082]],
[[1051, 1051], 'mapped', [1083]],
[[1052, 1052], 'mapped', [1084]],
[[1053, 1053], 'mapped', [1085]],
[[1054, 1054], 'mapped', [1086]],
[[1055, 1055], 'mapped', [1087]],
[[1056, 1056], 'mapped', [1088]],
[[1057, 1057], 'mapped', [1089]],
[[1058, 1058], 'mapped', [1090]],
[[1059, 1059], 'mapped', [1091]],
[[1060, 1060], 'mapped', [1092]],
[[1061, 1061], 'mapped', [1093]],
[[1062, 1062], 'mapped', [1094]],
[[1063, 1063], 'mapped', [1095]],
[[1064, 1064], 'mapped', [1096]],
[[1065, 1065], 'mapped', [1097]],
[[1066, 1066], 'mapped', [1098]],
[[1067, 1067], 'mapped', [1099]],
[[1068, 1068], 'mapped', [1100]],
[[1069, 1069], 'mapped', [1101]],
[[1070, 1070], 'mapped', [1102]],
[[1071, 1071], 'mapped', [1103]],
[[1072, 1103], 'valid'],
[[1104, 1104], 'valid'],
[[1105, 1116], 'valid'],
[[1117, 1117], 'valid'],
[[1118, 1119], 'valid'],
[[1120, 1120], 'mapped', [1121]],
[[1121, 1121], 'valid'],
[[1122, 1122], 'mapped', [1123]],
[[1123, 1123], 'valid'],
[[1124, 1124], 'mapped', [1125]],
[[1125, 1125], 'valid'],
[[1126, 1126], 'mapped', [1127]],
[[1127, 1127], 'valid'],
[[1128, 1128], 'mapped', [1129]],
[[1129, 1129], 'valid'],
[[1130, 1130], 'mapped', [1131]],
[[1131, 1131], 'valid'],
[[1132, 1132], 'mapped', [1133]],
[[1133, 1133], 'valid'],
[[1134, 1134], 'mapped', [1135]],
[[1135, 1135], 'valid'],
[[1136, 1136], 'mapped', [1137]],
[[1137, 1137], 'valid'],
[[1138, 1138], 'mapped', [1139]],
[[1139, 1139], 'valid'],
[[1140, 1140], 'mapped', [1141]],
[[1141, 1141], 'valid'],
[[1142, 1142], 'mapped', [1143]],
[[1143, 1143], 'valid'],
[[1144, 1144], 'mapped', [1145]],
[[1145, 1145], 'valid'],
[[1146, 1146], 'mapped', [1147]],
[[1147, 1147], 'valid'],
[[1148, 1148], 'mapped', [1149]],
[[1149, 1149], 'valid'],
[[1150, 1150], 'mapped', [1151]],
[[1151, 1151], 'valid'],
[[1152, 1152], 'mapped', [1153]],
[[1153, 1153], 'valid'],
[[1154, 1154], 'valid', [], 'NV8'],
[[1155, 1158], 'valid'],
[[1159, 1159], 'valid'],
[[1160, 1161], 'valid', [], 'NV8'],
[[1162, 1162], 'mapped', [1163]],
[[1163, 1163], 'valid'],
[[1164, 1164], 'mapped', [1165]],
[[1165, 1165], 'valid'],
[[1166, 1166], 'mapped', [1167]],
[[1167, 1167], 'valid'],
[[1168, 1168], 'mapped', [1169]],
[[1169, 1169], 'valid'],
[[1170, 1170], 'mapped', [1171]],
[[1171, 1171], 'valid'],
[[1172, 1172], 'mapped', [1173]],
[[1173, 1173], 'valid'],
[[1174, 1174], 'mapped', [1175]],
[[1175, 1175], 'valid'],
[[1176, 1176], 'mapped', [1177]],
[[1177, 1177], 'valid'],
[[1178, 1178], 'mapped', [1179]],
[[1179, 1179], 'valid'],
[[1180, 1180], 'mapped', [1181]],
[[1181, 1181], 'valid'],
[[1182, 1182], 'mapped', [1183]],
[[1183, 1183], 'valid'],
[[1184, 1184], 'mapped', [1185]],
[[1185, 1185], 'valid'],
[[1186, 1186], 'mapped', [1187]],
[[1187, 1187], 'valid'],
[[1188, 1188], 'mapped', [1189]],
[[1189, 1189], 'valid'],
[[1190, 1190], 'mapped', [1191]],
[[1191, 1191], 'valid'],
[[1192, 1192], 'mapped', [1193]],
[[1193, 1193], 'valid'],
[[1194, 1194], 'mapped', [1195]],
[[1195, 1195], 'valid'],
[[1196, 1196], 'mapped', [1197]],
[[1197, 1197], 'valid'],
[[1198, 1198], 'mapped', [1199]],
[[1199, 1199], 'valid'],
[[1200, 1200], 'mapped', [1201]],
[[1201, 1201], 'valid'],
[[1202, 1202], 'mapped', [1203]],
[[1203, 1203], 'valid'],
[[1204, 1204], 'mapped', [1205]],
[[1205, 1205], 'valid'],
[[1206, 1206], 'mapped', [1207]],
[[1207, 1207], 'valid'],
[[1208, 1208], 'mapped', [1209]],
[[1209, 1209], 'valid'],
[[1210, 1210], 'mapped', [1211]],
[[1211, 1211], 'valid'],
[[1212, 1212], 'mapped', [1213]],
[[1213, 1213], 'valid'],
[[1214, 1214], 'mapped', [1215]],
[[1215, 1215], 'valid'],
[[1216, 1216], 'disallowed'],
[[1217, 1217], 'mapped', [1218]],
[[1218, 1218], 'valid'],
[[1219, 1219], 'mapped', [1220]],
[[1220, 1220], 'valid'],
[[1221, 1221], 'mapped', [1222]],
[[1222, 1222], 'valid'],
[[1223, 1223], 'mapped', [1224]],
[[1224, 1224], 'valid'],
[[1225, 1225], 'mapped', [1226]],
[[1226, 1226], 'valid'],
[[1227, 1227], 'mapped', [1228]],
[[1228, 1228], 'valid'],
[[1229, 1229], 'mapped', [1230]],
[[1230, 1230], 'valid'],
[[1231, 1231], 'valid'],
[[1232, 1232], 'mapped', [1233]],
[[1233, 1233], 'valid'],
[[1234, 1234], 'mapped', [1235]],
[[1235, 1235], 'valid'],
[[1236, 1236], 'mapped', [1237]],
[[1237, 1237], 'valid'],
[[1238, 1238], 'mapped', [1239]],
[[1239, 1239], 'valid'],
[[1240, 1240], 'mapped', [1241]],
[[1241, 1241], 'valid'],
[[1242, 1242], 'mapped', [1243]],
[[1243, 1243], 'valid'],
[[1244, 1244], 'mapped', [1245]],
[[1245, 1245], 'valid'],
[[1246, 1246], 'mapped', [1247]],
[[1247, 1247], 'valid'],
[[1248, 1248], 'mapped', [1249]],
[[1249, 1249], 'valid'],
[[1250, 1250], 'mapped', [1251]],
[[1251, 1251], 'valid'],
[[1252, 1252], 'mapped', [1253]],
[[1253, 1253], 'valid'],
[[1254, 1254], 'mapped', [1255]],
[[1255, 1255], 'valid'],
[[1256, 1256], 'mapped', [1257]],
[[1257, 1257], 'valid'],
[[1258, 1258], 'mapped', [1259]],
[[1259, 1259], 'valid'],
[[1260, 1260], 'mapped', [1261]],
[[1261, 1261], 'valid'],
[[1262, 1262], 'mapped', [1263]],
[[1263, 1263], 'valid'],
[[1264, 1264], 'mapped', [1265]],
[[1265, 1265], 'valid'],
[[1266, 1266], 'mapped', [1267]],
[[1267, 1267], 'valid'],
[[1268, 1268], 'mapped', [1269]],
[[1269, 1269], 'valid'],
[[1270, 1270], 'mapped', [1271]],
[[1271, 1271], 'valid'],
[[1272, 1272], 'mapped', [1273]],
[[1273, 1273], 'valid'],
[[1274, 1274], 'mapped', [1275]],
[[1275, 1275], 'valid'],
[[1276, 1276], 'mapped', [1277]],
[[1277, 1277], 'valid'],
[[1278, 1278], 'mapped', [1279]],
[[1279, 1279], 'valid'],
[[1280, 1280], 'mapped', [1281]],
[[1281, 1281], 'valid'],
[[1282, 1282], 'mapped', [1283]],
[[1283, 1283], 'valid'],
[[1284, 1284], 'mapped', [1285]],
[[1285, 1285], 'valid'],
[[1286, 1286], 'mapped', [1287]],
[[1287, 1287], 'valid'],
[[1288, 1288], 'mapped', [1289]],
[[1289, 1289], 'valid'],
[[1290, 1290], 'mapped', [1291]],
[[1291, 1291], 'valid'],
[[1292, 1292], 'mapped', [1293]],
[[1293, 1293], 'valid'],
[[1294, 1294], 'mapped', [1295]],
[[1295, 1295], 'valid'],
[[1296, 1296], 'mapped', [1297]],
[[1297, 1297], 'valid'],
[[1298, 1298], 'mapped', [1299]],
[[1299, 1299], 'valid'],
[[1300, 1300], 'mapped', [1301]],
[[1301, 1301], 'valid'],
[[1302, 1302], 'mapped', [1303]],
[[1303, 1303], 'valid'],
[[1304, 1304], 'mapped', [1305]],
[[1305, 1305], 'valid'],
[[1306, 1306], 'mapped', [1307]],
[[1307, 1307], 'valid'],
[[1308, 1308], 'mapped', [1309]],
[[1309, 1309], 'valid'],
[[1310, 1310], 'mapped', [1311]],
[[1311, 1311], 'valid'],
[[1312, 1312], 'mapped', [1313]],
[[1313, 1313], 'valid'],
[[1314, 1314], 'mapped', [1315]],
[[1315, 1315], 'valid'],
[[1316, 1316], 'mapped', [1317]],
[[1317, 1317], 'valid'],
[[1318, 1318], 'mapped', [1319]],
[[1319, 1319], 'valid'],
[[1320, 1320], 'mapped', [1321]],
[[1321, 1321], 'valid'],
[[1322, 1322], 'mapped', [1323]],
[[1323, 1323], 'valid'],
[[1324, 1324], 'mapped', [1325]],
[[1325, 1325], 'valid'],
[[1326, 1326], 'mapped', [1327]],
[[1327, 1327], 'valid'],
[[1328, 1328], 'disallowed'],
[[1329, 1329], 'mapped', [1377]],
[[1330, 1330], 'mapped', [1378]],
[[1331, 1331], 'mapped', [1379]],
[[1332, 1332], 'mapped', [1380]],
[[1333, 1333], 'mapped', [1381]],
[[1334, 1334], 'mapped', [1382]],
[[1335, 1335], 'mapped', [1383]],
[[1336, 1336], 'mapped', [1384]],
[[1337, 1337], 'mapped', [1385]],
[[1338, 1338], 'mapped', [1386]],
[[1339, 1339], 'mapped', [1387]],
[[1340, 1340], 'mapped', [1388]],
[[1341, 1341], 'mapped', [1389]],
[[1342, 1342], 'mapped', [1390]],
[[1343, 1343], 'mapped', [1391]],
[[1344, 1344], 'mapped', [1392]],
[[1345, 1345], 'mapped', [1393]],
[[1346, 1346], 'mapped', [1394]],
[[1347, 1347], 'mapped', [1395]],
[[1348, 1348], 'mapped', [1396]],
[[1349, 1349], 'mapped', [1397]],
[[1350, 1350], 'mapped', [1398]],
[[1351, 1351], 'mapped', [1399]],
[[1352, 1352], 'mapped', [1400]],
[[1353, 1353], 'mapped', [1401]],
[[1354, 1354], 'mapped', [1402]],
[[1355, 1355], 'mapped', [1403]],
[[1356, 1356], 'mapped', [1404]],
[[1357, 1357], 'mapped', [1405]],
[[1358, 1358], 'mapped', [1406]],
[[1359, 1359], 'mapped', [1407]],
[[1360, 1360], 'mapped', [1408]],
[[1361, 1361], 'mapped', [1409]],
[[1362, 1362], 'mapped', [1410]],
[[1363, 1363], 'mapped', [1411]],
[[1364, 1364], 'mapped', [1412]],
[[1365, 1365], 'mapped', [1413]],
[[1366, 1366], 'mapped', [1414]],
[[1367, 1368], 'disallowed'],
[[1369, 1369], 'valid'],
[[1370, 1375], 'valid', [], 'NV8'],
[[1376, 1376], 'disallowed'],
[[1377, 1414], 'valid'],
[[1415, 1415], 'mapped', [1381, 1410]],
[[1416, 1416], 'disallowed'],
[[1417, 1417], 'valid', [], 'NV8'],
[[1418, 1418], 'valid', [], 'NV8'],
[[1419, 1420], 'disallowed'],
[[1421, 1422], 'valid', [], 'NV8'],
[[1423, 1423], 'valid', [], 'NV8'],
[[1424, 1424], 'disallowed'],
[[1425, 1441], 'valid'],
[[1442, 1442], 'valid'],
[[1443, 1455], 'valid'],
[[1456, 1465], 'valid'],
[[1466, 1466], 'valid'],
[[1467, 1469], 'valid'],
[[1470, 1470], 'valid', [], 'NV8'],
[[1471, 1471], 'valid'],
[[1472, 1472], 'valid', [], 'NV8'],
[[1473, 1474], 'valid'],
[[1475, 1475], 'valid', [], 'NV8'],
[[1476, 1476], 'valid'],
[[1477, 1477], 'valid'],
[[1478, 1478], 'valid', [], 'NV8'],
[[1479, 1479], 'valid'],
[[1480, 1487], 'disallowed'],
[[1488, 1514], 'valid'],
[[1515, 1519], 'disallowed'],
[[1520, 1524], 'valid'],
[[1525, 1535], 'disallowed'],
[[1536, 1539], 'disallowed'],
[[1540, 1540], 'disallowed'],
[[1541, 1541], 'disallowed'],
[[1542, 1546], 'valid', [], 'NV8'],
[[1547, 1547], 'valid', [], 'NV8'],
[[1548, 1548], 'valid', [], 'NV8'],
[[1549, 1551], 'valid', [], 'NV8'],
[[1552, 1557], 'valid'],
[[1558, 1562], 'valid'],
[[1563, 1563], 'valid', [], 'NV8'],
[[1564, 1564], 'disallowed'],
[[1565, 1565], 'disallowed'],
[[1566, 1566], 'valid', [], 'NV8'],
[[1567, 1567], 'valid', [], 'NV8'],
[[1568, 1568], 'valid'],
[[1569, 1594], 'valid'],
[[1595, 1599], 'valid'],
[[1600, 1600], 'valid', [], 'NV8'],
[[1601, 1618], 'valid'],
[[1619, 1621], 'valid'],
[[1622, 1624], 'valid'],
[[1625, 1630], 'valid'],
[[1631, 1631], 'valid'],
[[1632, 1641], 'valid'],
[[1642, 1645], 'valid', [], 'NV8'],
[[1646, 1647], 'valid'],
[[1648, 1652], 'valid'],
[[1653, 1653], 'mapped', [1575, 1652]],
[[1654, 1654], 'mapped', [1608, 1652]],
[[1655, 1655], 'mapped', [1735, 1652]],
[[1656, 1656], 'mapped', [1610, 1652]],
[[1657, 1719], 'valid'],
[[1720, 1721], 'valid'],
[[1722, 1726], 'valid'],
[[1727, 1727], 'valid'],
[[1728, 1742], 'valid'],
[[1743, 1743], 'valid'],
[[1744, 1747], 'valid'],
[[1748, 1748], 'valid', [], 'NV8'],
[[1749, 1756], 'valid'],
[[1757, 1757], 'disallowed'],
[[1758, 1758], 'valid', [], 'NV8'],
[[1759, 1768], 'valid'],
[[1769, 1769], 'valid', [], 'NV8'],
[[1770, 1773], 'valid'],
[[1774, 1775], 'valid'],
[[1776, 1785], 'valid'],
[[1786, 1790], 'valid'],
[[1791, 1791], 'valid'],
[[1792, 1805], 'valid', [], 'NV8'],
[[1806, 1806], 'disallowed'],
[[1807, 1807], 'disallowed'],
[[1808, 1836], 'valid'],
[[1837, 1839], 'valid'],
[[1840, 1866], 'valid'],
[[1867, 1868], 'disallowed'],
[[1869, 1871], 'valid'],
[[1872, 1901], 'valid'],
[[1902, 1919], 'valid'],
[[1920, 1968], 'valid'],
[[1969, 1969], 'valid'],
[[1970, 1983], 'disallowed'],
[[1984, 2037], 'valid'],
[[2038, 2042], 'valid', [], 'NV8'],
[[2043, 2047], 'disallowed'],
[[2048, 2093], 'valid'],
[[2094, 2095], 'disallowed'],
[[2096, 2110], 'valid', [], 'NV8'],
[[2111, 2111], 'disallowed'],
[[2112, 2139], 'valid'],
[[2140, 2141], 'disallowed'],
[[2142, 2142], 'valid', [], 'NV8'],
[[2143, 2207], 'disallowed'],
[[2208, 2208], 'valid'],
[[2209, 2209], 'valid'],
[[2210, 2220], 'valid'],
[[2221, 2226], 'valid'],
[[2227, 2228], 'valid'],
[[2229, 2274], 'disallowed'],
[[2275, 2275], 'valid'],
[[2276, 2302], 'valid'],
[[2303, 2303], 'valid'],
[[2304, 2304], 'valid'],
[[2305, 2307], 'valid'],
[[2308, 2308], 'valid'],
[[2309, 2361], 'valid'],
[[2362, 2363], 'valid'],
[[2364, 2381], 'valid'],
[[2382, 2382], 'valid'],
[[2383, 2383], 'valid'],
[[2384, 2388], 'valid'],
[[2389, 2389], 'valid'],
[[2390, 2391], 'valid'],
[[2392, 2392], 'mapped', [2325, 2364]],
[[2393, 2393], 'mapped', [2326, 2364]],
[[2394, 2394], 'mapped', [2327, 2364]],
[[2395, 2395], 'mapped', [2332, 2364]],
[[2396, 2396], 'mapped', [2337, 2364]],
[[2397, 2397], 'mapped', [2338, 2364]],
[[2398, 2398], 'mapped', [2347, 2364]],
[[2399, 2399], 'mapped', [2351, 2364]],
[[2400, 2403], 'valid'],
[[2404, 2405], 'valid', [], 'NV8'],
[[2406, 2415], 'valid'],
[[2416, 2416], 'valid', [], 'NV8'],
[[2417, 2418], 'valid'],
[[2419, 2423], 'valid'],
[[2424, 2424], 'valid'],
[[2425, 2426], 'valid'],
[[2427, 2428], 'valid'],
[[2429, 2429], 'valid'],
[[2430, 2431], 'valid'],
[[2432, 2432], 'valid'],
[[2433, 2435], 'valid'],
[[2436, 2436], 'disallowed'],
[[2437, 2444], 'valid'],
[[2445, 2446], 'disallowed'],
[[2447, 2448], 'valid'],
[[2449, 2450], 'disallowed'],
[[2451, 2472], 'valid'],
[[2473, 2473], 'disallowed'],
[[2474, 2480], 'valid'],
[[2481, 2481], 'disallowed'],
[[2482, 2482], 'valid'],
[[2483, 2485], 'disallowed'],
[[2486, 2489], 'valid'],
[[2490, 2491], 'disallowed'],
[[2492, 2492], 'valid'],
[[2493, 2493], 'valid'],
[[2494, 2500], 'valid'],
[[2501, 2502], 'disallowed'],
[[2503, 2504], 'valid'],
[[2505, 2506], 'disallowed'],
[[2507, 2509], 'valid'],
[[2510, 2510], 'valid'],
[[2511, 2518], 'disallowed'],
[[2519, 2519], 'valid'],
[[2520, 2523], 'disallowed'],
[[2524, 2524], 'mapped', [2465, 2492]],
[[2525, 2525], 'mapped', [2466, 2492]],
[[2526, 2526], 'disallowed'],
[[2527, 2527], 'mapped', [2479, 2492]],
[[2528, 2531], 'valid'],
[[2532, 2533], 'disallowed'],
[[2534, 2545], 'valid'],
[[2546, 2554], 'valid', [], 'NV8'],
[[2555, 2555], 'valid', [], 'NV8'],
[[2556, 2560], 'disallowed'],
[[2561, 2561], 'valid'],
[[2562, 2562], 'valid'],
[[2563, 2563], 'valid'],
[[2564, 2564], 'disallowed'],
[[2565, 2570], 'valid'],
[[2571, 2574], 'disallowed'],
[[2575, 2576], 'valid'],
[[2577, 2578], 'disallowed'],
[[2579, 2600], 'valid'],
[[2601, 2601], 'disallowed'],
[[2602, 2608], 'valid'],
[[2609, 2609], 'disallowed'],
[[2610, 2610], 'valid'],
[[2611, 2611], 'mapped', [2610, 2620]],
[[2612, 2612], 'disallowed'],
[[2613, 2613], 'valid'],
[[2614, 2614], 'mapped', [2616, 2620]],
[[2615, 2615], 'disallowed'],
[[2616, 2617], 'valid'],
[[2618, 2619], 'disallowed'],
[[2620, 2620], 'valid'],
[[2621, 2621], 'disallowed'],
[[2622, 2626], 'valid'],
[[2627, 2630], 'disallowed'],
[[2631, 2632], 'valid'],
[[2633, 2634], 'disallowed'],
[[2635, 2637], 'valid'],
[[2638, 2640], 'disallowed'],
[[2641, 2641], 'valid'],
[[2642, 2648], 'disallowed'],
[[2649, 2649], 'mapped', [2582, 2620]],
[[2650, 2650], 'mapped', [2583, 2620]],
[[2651, 2651], 'mapped', [2588, 2620]],
[[2652, 2652], 'valid'],
[[2653, 2653], 'disallowed'],
[[2654, 2654], 'mapped', [2603, 2620]],
[[2655, 2661], 'disallowed'],
[[2662, 2676], 'valid'],
[[2677, 2677], 'valid'],
[[2678, 2688], 'disallowed'],
[[2689, 2691], 'valid'],
[[2692, 2692], 'disallowed'],
[[2693, 2699], 'valid'],
[[2700, 2700], 'valid'],
[[2701, 2701], 'valid'],
[[2702, 2702], 'disallowed'],
[[2703, 2705], 'valid'],
[[2706, 2706], 'disallowed'],
[[2707, 2728], 'valid'],
[[2729, 2729], 'disallowed'],
[[2730, 2736], 'valid'],
[[2737, 2737], 'disallowed'],
[[2738, 2739], 'valid'],
[[2740, 2740], 'disallowed'],
[[2741, 2745], 'valid'],
[[2746, 2747], 'disallowed'],
[[2748, 2757], 'valid'],
[[2758, 2758], 'disallowed'],
[[2759, 2761], 'valid'],
[[2762, 2762], 'disallowed'],
[[2763, 2765], 'valid'],
[[2766, 2767], 'disallowed'],
[[2768, 2768], 'valid'],
[[2769, 2783], 'disallowed'],
[[2784, 2784], 'valid'],
[[2785, 2787], 'valid'],
[[2788, 2789], 'disallowed'],
[[2790, 2799], 'valid'],
[[2800, 2800], 'valid', [], 'NV8'],
[[2801, 2801], 'valid', [], 'NV8'],
[[2802, 2808], 'disallowed'],
[[2809, 2809], 'valid'],
[[2810, 2816], 'disallowed'],
[[2817, 2819], 'valid'],
[[2820, 2820], 'disallowed'],
[[2821, 2828], 'valid'],
[[2829, 2830], 'disallowed'],
[[2831, 2832], 'valid'],
[[2833, 2834], 'disallowed'],
[[2835, 2856], 'valid'],
[[2857, 2857], 'disallowed'],
[[2858, 2864], 'valid'],
[[2865, 2865], 'disallowed'],
[[2866, 2867], 'valid'],
[[2868, 2868], 'disallowed'],
[[2869, 2869], 'valid'],
[[2870, 2873], 'valid'],
[[2874, 2875], 'disallowed'],
[[2876, 2883], 'valid'],
[[2884, 2884], 'valid'],
[[2885, 2886], 'disallowed'],
[[2887, 2888], 'valid'],
[[2889, 2890], 'disallowed'],
[[2891, 2893], 'valid'],
[[2894, 2901], 'disallowed'],
[[2902, 2903], 'valid'],
[[2904, 2907], 'disallowed'],
[[2908, 2908], 'mapped', [2849, 2876]],
[[2909, 2909], 'mapped', [2850, 2876]],
[[2910, 2910], 'disallowed'],
[[2911, 2913], 'valid'],
[[2914, 2915], 'valid'],
[[2916, 2917], 'disallowed'],
[[2918, 2927], 'valid'],
[[2928, 2928], 'valid', [], 'NV8'],
[[2929, 2929], 'valid'],
[[2930, 2935], 'valid', [], 'NV8'],
[[2936, 2945], 'disallowed'],
[[2946, 2947], 'valid'],
[[2948, 2948], 'disallowed'],
[[2949, 2954], 'valid'],
[[2955, 2957], 'disallowed'],
[[2958, 2960], 'valid'],
[[2961, 2961], 'disallowed'],
[[2962, 2965], 'valid'],
[[2966, 2968], 'disallowed'],
[[2969, 2970], 'valid'],
[[2971, 2971], 'disallowed'],
[[2972, 2972], 'valid'],
[[2973, 2973], 'disallowed'],
[[2974, 2975], 'valid'],
[[2976, 2978], 'disallowed'],
[[2979, 2980], 'valid'],
[[2981, 2983], 'disallowed'],
[[2984, 2986], 'valid'],
[[2987, 2989], 'disallowed'],
[[2990, 2997], 'valid'],
[[2998, 2998], 'valid'],
[[2999, 3001], 'valid'],
[[3002, 3005], 'disallowed'],
[[3006, 3010], 'valid'],
[[3011, 3013], 'disallowed'],
[[3014, 3016], 'valid'],
[[3017, 3017], 'disallowed'],
[[3018, 3021], 'valid'],
[[3022, 3023], 'disallowed'],
[[3024, 3024], 'valid'],
[[3025, 3030], 'disallowed'],
[[3031, 3031], 'valid'],
[[3032, 3045], 'disallowed'],
[[3046, 3046], 'valid'],
[[3047, 3055], 'valid'],
[[3056, 3058], 'valid', [], 'NV8'],
[[3059, 3066], 'valid', [], 'NV8'],
[[3067, 3071], 'disallowed'],
[[3072, 3072], 'valid'],
[[3073, 3075], 'valid'],
[[3076, 3076], 'disallowed'],
[[3077, 3084], 'valid'],
[[3085, 3085], 'disallowed'],
[[3086, 3088], 'valid'],
[[3089, 3089], 'disallowed'],
[[3090, 3112], 'valid'],
[[3113, 3113], 'disallowed'],
[[3114, 3123], 'valid'],
[[3124, 3124], 'valid'],
[[3125, 3129], 'valid'],
[[3130, 3132], 'disallowed'],
[[3133, 3133], 'valid'],
[[3134, 3140], 'valid'],
[[3141, 3141], 'disallowed'],
[[3142, 3144], 'valid'],
[[3145, 3145], 'disallowed'],
[[3146, 3149], 'valid'],
[[3150, 3156], 'disallowed'],
[[3157, 3158], 'valid'],
[[3159, 3159], 'disallowed'],
[[3160, 3161], 'valid'],
[[3162, 3162], 'valid'],
[[3163, 3167], 'disallowed'],
[[3168, 3169], 'valid'],
[[3170, 3171], 'valid'],
[[3172, 3173], 'disallowed'],
[[3174, 3183], 'valid'],
[[3184, 3191], 'disallowed'],
[[3192, 3199], 'valid', [], 'NV8'],
[[3200, 3200], 'disallowed'],
[[3201, 3201], 'valid'],
[[3202, 3203], 'valid'],
[[3204, 3204], 'disallowed'],
[[3205, 3212], 'valid'],
[[3213, 3213], 'disallowed'],
[[3214, 3216], 'valid'],
[[3217, 3217], 'disallowed'],
[[3218, 3240], 'valid'],
[[3241, 3241], 'disallowed'],
[[3242, 3251], 'valid'],
[[3252, 3252], 'disallowed'],
[[3253, 3257], 'valid'],
[[3258, 3259], 'disallowed'],
[[3260, 3261], 'valid'],
[[3262, 3268], 'valid'],
[[3269, 3269], 'disallowed'],
[[3270, 3272], 'valid'],
[[3273, 3273], 'disallowed'],
[[3274, 3277], 'valid'],
[[3278, 3284], 'disallowed'],
[[3285, 3286], 'valid'],
[[3287, 3293], 'disallowed'],
[[3294, 3294], 'valid'],
[[3295, 3295], 'disallowed'],
[[3296, 3297], 'valid'],
[[3298, 3299], 'valid'],
[[3300, 3301], 'disallowed'],
[[3302, 3311], 'valid'],
[[3312, 3312], 'disallowed'],
[[3313, 3314], 'valid'],
[[3315, 3328], 'disallowed'],
[[3329, 3329], 'valid'],
[[3330, 3331], 'valid'],
[[3332, 3332], 'disallowed'],
[[3333, 3340], 'valid'],
[[3341, 3341], 'disallowed'],
[[3342, 3344], 'valid'],
[[3345, 3345], 'disallowed'],
[[3346, 3368], 'valid'],
[[3369, 3369], 'valid'],
[[3370, 3385], 'valid'],
[[3386, 3386], 'valid'],
[[3387, 3388], 'disallowed'],
[[3389, 3389], 'valid'],
[[3390, 3395], 'valid'],
[[3396, 3396], 'valid'],
[[3397, 3397], 'disallowed'],
[[3398, 3400], 'valid'],
[[3401, 3401], 'disallowed'],
[[3402, 3405], 'valid'],
[[3406, 3406], 'valid'],
[[3407, 3414], 'disallowed'],
[[3415, 3415], 'valid'],
[[3416, 3422], 'disallowed'],
[[3423, 3423], 'valid'],
[[3424, 3425], 'valid'],
[[3426, 3427], 'valid'],
[[3428, 3429], 'disallowed'],
[[3430, 3439], 'valid'],
[[3440, 3445], 'valid', [], 'NV8'],
[[3446, 3448], 'disallowed'],
[[3449, 3449], 'valid', [], 'NV8'],
[[3450, 3455], 'valid'],
[[3456, 3457], 'disallowed'],
[[3458, 3459], 'valid'],
[[3460, 3460], 'disallowed'],
[[3461, 3478], 'valid'],
[[3479, 3481], 'disallowed'],
[[3482, 3505], 'valid'],
[[3506, 3506], 'disallowed'],
[[3507, 3515], 'valid'],
[[3516, 3516], 'disallowed'],
[[3517, 3517], 'valid'],
[[3518, 3519], 'disallowed'],
[[3520, 3526], 'valid'],
[[3527, 3529], 'disallowed'],
[[3530, 3530], 'valid'],
[[3531, 3534], 'disallowed'],
[[3535, 3540], 'valid'],
[[3541, 3541], 'disallowed'],
[[3542, 3542], 'valid'],
[[3543, 3543], 'disallowed'],
[[3544, 3551], 'valid'],
[[3552, 3557], 'disallowed'],
[[3558, 3567], 'valid'],
[[3568, 3569], 'disallowed'],
[[3570, 3571], 'valid'],
[[3572, 3572], 'valid', [], 'NV8'],
[[3573, 3584], 'disallowed'],
[[3585, 3634], 'valid'],
[[3635, 3635], 'mapped', [3661, 3634]],
[[3636, 3642], 'valid'],
[[3643, 3646], 'disallowed'],
[[3647, 3647], 'valid', [], 'NV8'],
[[3648, 3662], 'valid'],
[[3663, 3663], 'valid', [], 'NV8'],
[[3664, 3673], 'valid'],
[[3674, 3675], 'valid', [], 'NV8'],
[[3676, 3712], 'disallowed'],
[[3713, 3714], 'valid'],
[[3715, 3715], 'disallowed'],
[[3716, 3716], 'valid'],
[[3717, 3718], 'disallowed'],
[[3719, 3720], 'valid'],
[[3721, 3721], 'disallowed'],
[[3722, 3722], 'valid'],
[[3723, 3724], 'disallowed'],
[[3725, 3725], 'valid'],
[[3726, 3731], 'disallowed'],
[[3732, 3735], 'valid'],
[[3736, 3736], 'disallowed'],
[[3737, 3743], 'valid'],
[[3744, 3744], 'disallowed'],
[[3745, 3747], 'valid'],
[[3748, 3748], 'disallowed'],
[[3749, 3749], 'valid'],
[[3750, 3750], 'disallowed'],
[[3751, 3751], 'valid'],
[[3752, 3753], 'disallowed'],
[[3754, 3755], 'valid'],
[[3756, 3756], 'disallowed'],
[[3757, 3762], 'valid'],
[[3763, 3763], 'mapped', [3789, 3762]],
[[3764, 3769], 'valid'],
[[3770, 3770], 'disallowed'],
[[3771, 3773], 'valid'],
[[3774, 3775], 'disallowed'],
[[3776, 3780], 'valid'],
[[3781, 3781], 'disallowed'],
[[3782, 3782], 'valid'],
[[3783, 3783], 'disallowed'],
[[3784, 3789], 'valid'],
[[3790, 3791], 'disallowed'],
[[3792, 3801], 'valid'],
[[3802, 3803], 'disallowed'],
[[3804, 3804], 'mapped', [3755, 3737]],
[[3805, 3805], 'mapped', [3755, 3745]],
[[3806, 3807], 'valid'],
[[3808, 3839], 'disallowed'],
[[3840, 3840], 'valid'],
[[3841, 3850], 'valid', [], 'NV8'],
[[3851, 3851], 'valid'],
[[3852, 3852], 'mapped', [3851]],
[[3853, 3863], 'valid', [], 'NV8'],
[[3864, 3865], 'valid'],
[[3866, 3871], 'valid', [], 'NV8'],
[[3872, 3881], 'valid'],
[[3882, 3892], 'valid', [], 'NV8'],
[[3893, 3893], 'valid'],
[[3894, 3894], 'valid', [], 'NV8'],
[[3895, 3895], 'valid'],
[[3896, 3896], 'valid', [], 'NV8'],
[[3897, 3897], 'valid'],
[[3898, 3901], 'valid', [], 'NV8'],
[[3902, 3906], 'valid'],
[[3907, 3907], 'mapped', [3906, 4023]],
[[3908, 3911], 'valid'],
[[3912, 3912], 'disallowed'],
[[3913, 3916], 'valid'],
[[3917, 3917], 'mapped', [3916, 4023]],
[[3918, 3921], 'valid'],
[[3922, 3922], 'mapped', [3921, 4023]],
[[3923, 3926], 'valid'],
[[3927, 3927], 'mapped', [3926, 4023]],
[[3928, 3931], 'valid'],
[[3932, 3932], 'mapped', [3931, 4023]],
[[3933, 3944], 'valid'],
[[3945, 3945], 'mapped', [3904, 4021]],
[[3946, 3946], 'valid'],
[[3947, 3948], 'valid'],
[[3949, 3952], 'disallowed'],
[[3953, 3954], 'valid'],
[[3955, 3955], 'mapped', [3953, 3954]],
[[3956, 3956], 'valid'],
[[3957, 3957], 'mapped', [3953, 3956]],
[[3958, 3958], 'mapped', [4018, 3968]],
[[3959, 3959], 'mapped', [4018, 3953, 3968]],
[[3960, 3960], 'mapped', [4019, 3968]],
[[3961, 3961], 'mapped', [4019, 3953, 3968]],
[[3962, 3968], 'valid'],
[[3969, 3969], 'mapped', [3953, 3968]],
[[3970, 3972], 'valid'],
[[3973, 3973], 'valid', [], 'NV8'],
[[3974, 3979], 'valid'],
[[3980, 3983], 'valid'],
[[3984, 3986], 'valid'],
[[3987, 3987], 'mapped', [3986, 4023]],
[[3988, 3989], 'valid'],
[[3990, 3990], 'valid'],
[[3991, 3991], 'valid'],
[[3992, 3992], 'disallowed'],
[[3993, 3996], 'valid'],
[[3997, 3997], 'mapped', [3996, 4023]],
[[3998, 4001], 'valid'],
[[4002, 4002], 'mapped', [4001, 4023]],
[[4003, 4006], 'valid'],
[[4007, 4007], 'mapped', [4006, 4023]],
[[4008, 4011], 'valid'],
[[4012, 4012], 'mapped', [4011, 4023]],
[[4013, 4013], 'valid'],
[[4014, 4016], 'valid'],
[[4017, 4023], 'valid'],
[[4024, 4024], 'valid'],
[[4025, 4025], 'mapped', [3984, 4021]],
[[4026, 4028], 'valid'],
[[4029, 4029], 'disallowed'],
[[4030, 4037], 'valid', [], 'NV8'],
[[4038, 4038], 'valid'],
[[4039, 4044], 'valid', [], 'NV8'],
[[4045, 4045], 'disallowed'],
[[4046, 4046], 'valid', [], 'NV8'],
[[4047, 4047], 'valid', [], 'NV8'],
[[4048, 4049], 'valid', [], 'NV8'],
[[4050, 4052], 'valid', [], 'NV8'],
[[4053, 4056], 'valid', [], 'NV8'],
[[4057, 4058], 'valid', [], 'NV8'],
[[4059, 4095], 'disallowed'],
[[4096, 4129], 'valid'],
[[4130, 4130], 'valid'],
[[4131, 4135], 'valid'],
[[4136, 4136], 'valid'],
[[4137, 4138], 'valid'],
[[4139, 4139], 'valid'],
[[4140, 4146], 'valid'],
[[4147, 4149], 'valid'],
[[4150, 4153], 'valid'],
[[4154, 4159], 'valid'],
[[4160, 4169], 'valid'],
[[4170, 4175], 'valid', [], 'NV8'],
[[4176, 4185], 'valid'],
[[4186, 4249], 'valid'],
[[4250, 4253], 'valid'],
[[4254, 4255], 'valid', [], 'NV8'],
[[4256, 4293], 'disallowed'],
[[4294, 4294], 'disallowed'],
[[4295, 4295], 'mapped', [11559]],
[[4296, 4300], 'disallowed'],
[[4301, 4301], 'mapped', [11565]],
[[4302, 4303], 'disallowed'],
[[4304, 4342], 'valid'],
[[4343, 4344], 'valid'],
[[4345, 4346], 'valid'],
[[4347, 4347], 'valid', [], 'NV8'],
[[4348, 4348], 'mapped', [4316]],
[[4349, 4351], 'valid'],
[[4352, 4441], 'valid', [], 'NV8'],
[[4442, 4446], 'valid', [], 'NV8'],
[[4447, 4448], 'disallowed'],
[[4449, 4514], 'valid', [], 'NV8'],
[[4515, 4519], 'valid', [], 'NV8'],
[[4520, 4601], 'valid', [], 'NV8'],
[[4602, 4607], 'valid', [], 'NV8'],
[[4608, 4614], 'valid'],
[[4615, 4615], 'valid'],
[[4616, 4678], 'valid'],
[[4679, 4679], 'valid'],
[[4680, 4680], 'valid'],
[[4681, 4681], 'disallowed'],
[[4682, 4685], 'valid'],
[[4686, 4687], 'disallowed'],
[[4688, 4694], 'valid'],
[[4695, 4695], 'disallowed'],
[[4696, 4696], 'valid'],
[[4697, 4697], 'disallowed'],
[[4698, 4701], 'valid'],
[[4702, 4703], 'disallowed'],
[[4704, 4742], 'valid'],
[[4743, 4743], 'valid'],
[[4744, 4744], 'valid'],
[[4745, 4745], 'disallowed'],
[[4746, 4749], 'valid'],
[[4750, 4751], 'disallowed'],
[[4752, 4782], 'valid'],
[[4783, 4783], 'valid'],
[[4784, 4784], 'valid'],
[[4785, 4785], 'disallowed'],
[[4786, 4789], 'valid'],
[[4790, 4791], 'disallowed'],
[[4792, 4798], 'valid'],
[[4799, 4799], 'disallowed'],
[[4800, 4800], 'valid'],
[[4801, 4801], 'disallowed'],
[[4802, 4805], 'valid'],
[[4806, 4807], 'disallowed'],
[[4808, 4814], 'valid'],
[[4815, 4815], 'valid'],
[[4816, 4822], 'valid'],
[[4823, 4823], 'disallowed'],
[[4824, 4846], 'valid'],
[[4847, 4847], 'valid'],
[[4848, 4878], 'valid'],
[[4879, 4879], 'valid'],
[[4880, 4880], 'valid'],
[[4881, 4881], 'disallowed'],
[[4882, 4885], 'valid'],
[[4886, 4887], 'disallowed'],
[[4888, 4894], 'valid'],
[[4895, 4895], 'valid'],
[[4896, 4934], 'valid'],
[[4935, 4935], 'valid'],
[[4936, 4954], 'valid'],
[[4955, 4956], 'disallowed'],
[[4957, 4958], 'valid'],
[[4959, 4959], 'valid'],
[[4960, 4960], 'valid', [], 'NV8'],
[[4961, 4988], 'valid', [], 'NV8'],
[[4989, 4991], 'disallowed'],
[[4992, 5007], 'valid'],
[[5008, 5017], 'valid', [], 'NV8'],
[[5018, 5023], 'disallowed'],
[[5024, 5108], 'valid'],
[[5109, 5109], 'valid'],
[[5110, 5111], 'disallowed'],
[[5112, 5112], 'mapped', [5104]],
[[5113, 5113], 'mapped', [5105]],
[[5114, 5114], 'mapped', [5106]],
[[5115, 5115], 'mapped', [5107]],
[[5116, 5116], 'mapped', [5108]],
[[5117, 5117], 'mapped', [5109]],
[[5118, 5119], 'disallowed'],
[[5120, 5120], 'valid', [], 'NV8'],
[[5121, 5740], 'valid'],
[[5741, 5742], 'valid', [], 'NV8'],
[[5743, 5750], 'valid'],
[[5751, 5759], 'valid'],
[[5760, 5760], 'disallowed'],
[[5761, 5786], 'valid'],
[[5787, 5788], 'valid', [], 'NV8'],
[[5789, 5791], 'disallowed'],
[[5792, 5866], 'valid'],
[[5867, 5872], 'valid', [], 'NV8'],
[[5873, 5880], 'valid'],
[[5881, 5887], 'disallowed'],
[[5888, 5900], 'valid'],
[[5901, 5901], 'disallowed'],
[[5902, 5908], 'valid'],
[[5909, 5919], 'disallowed'],
[[5920, 5940], 'valid'],
[[5941, 5942], 'valid', [], 'NV8'],
[[5943, 5951], 'disallowed'],
[[5952, 5971], 'valid'],
[[5972, 5983], 'disallowed'],
[[5984, 5996], 'valid'],
[[5997, 5997], 'disallowed'],
[[5998, 6000], 'valid'],
[[6001, 6001], 'disallowed'],
[[6002, 6003], 'valid'],
[[6004, 6015], 'disallowed'],
[[6016, 6067], 'valid'],
[[6068, 6069], 'disallowed'],
[[6070, 6099], 'valid'],
[[6100, 6102], 'valid', [], 'NV8'],
[[6103, 6103], 'valid'],
[[6104, 6107], 'valid', [], 'NV8'],
[[6108, 6108], 'valid'],
[[6109, 6109], 'valid'],
[[6110, 6111], 'disallowed'],
[[6112, 6121], 'valid'],
[[6122, 6127], 'disallowed'],
[[6128, 6137], 'valid', [], 'NV8'],
[[6138, 6143], 'disallowed'],
[[6144, 6149], 'valid', [], 'NV8'],
[[6150, 6150], 'disallowed'],
[[6151, 6154], 'valid', [], 'NV8'],
[[6155, 6157], 'ignored'],
[[6158, 6158], 'disallowed'],
[[6159, 6159], 'disallowed'],
[[6160, 6169], 'valid'],
[[6170, 6175], 'disallowed'],
[[6176, 6263], 'valid'],
[[6264, 6271], 'disallowed'],
[[6272, 6313], 'valid'],
[[6314, 6314], 'valid'],
[[6315, 6319], 'disallowed'],
[[6320, 6389], 'valid'],
[[6390, 6399], 'disallowed'],
[[6400, 6428], 'valid'],
[[6429, 6430], 'valid'],
[[6431, 6431], 'disallowed'],
[[6432, 6443], 'valid'],
[[6444, 6447], 'disallowed'],
[[6448, 6459], 'valid'],
[[6460, 6463], 'disallowed'],
[[6464, 6464], 'valid', [], 'NV8'],
[[6465, 6467], 'disallowed'],
[[6468, 6469], 'valid', [], 'NV8'],
[[6470, 6509], 'valid'],
[[6510, 6511], 'disallowed'],
[[6512, 6516], 'valid'],
[[6517, 6527], 'disallowed'],
[[6528, 6569], 'valid'],
[[6570, 6571], 'valid'],
[[6572, 6575], 'disallowed'],
[[6576, 6601], 'valid'],
[[6602, 6607], 'disallowed'],
[[6608, 6617], 'valid'],
[[6618, 6618], 'valid', [], 'XV8'],
[[6619, 6621], 'disallowed'],
[[6622, 6623], 'valid', [], 'NV8'],
[[6624, 6655], 'valid', [], 'NV8'],
[[6656, 6683], 'valid'],
[[6684, 6685], 'disallowed'],
[[6686, 6687], 'valid', [], 'NV8'],
[[6688, 6750], 'valid'],
[[6751, 6751], 'disallowed'],
[[6752, 6780], 'valid'],
[[6781, 6782], 'disallowed'],
[[6783, 6793], 'valid'],
[[6794, 6799], 'disallowed'],
[[6800, 6809], 'valid'],
[[6810, 6815], 'disallowed'],
[[6816, 6822], 'valid', [], 'NV8'],
[[6823, 6823], 'valid'],
[[6824, 6829], 'valid', [], 'NV8'],
[[6830, 6831], 'disallowed'],
[[6832, 6845], 'valid'],
[[6846, 6846], 'valid', [], 'NV8'],
[[6847, 6911], 'disallowed'],
[[6912, 6987], 'valid'],
[[6988, 6991], 'disallowed'],
[[6992, 7001], 'valid'],
[[7002, 7018], 'valid', [], 'NV8'],
[[7019, 7027], 'valid'],
[[7028, 7036], 'valid', [], 'NV8'],
[[7037, 7039], 'disallowed'],
[[7040, 7082], 'valid'],
[[7083, 7085], 'valid'],
[[7086, 7097], 'valid'],
[[7098, 7103], 'valid'],
[[7104, 7155], 'valid'],
[[7156, 7163], 'disallowed'],
[[7164, 7167], 'valid', [], 'NV8'],
[[7168, 7223], 'valid'],
[[7224, 7226], 'disallowed'],
[[7227, 7231], 'valid', [], 'NV8'],
[[7232, 7241], 'valid'],
[[7242, 7244], 'disallowed'],
[[7245, 7293], 'valid'],
[[7294, 7295], 'valid', [], 'NV8'],
[[7296, 7359], 'disallowed'],
[[7360, 7367], 'valid', [], 'NV8'],
[[7368, 7375], 'disallowed'],
[[7376, 7378], 'valid'],
[[7379, 7379], 'valid', [], 'NV8'],
[[7380, 7410], 'valid'],
[[7411, 7414], 'valid'],
[[7415, 7415], 'disallowed'],
[[7416, 7417], 'valid'],
[[7418, 7423], 'disallowed'],
[[7424, 7467], 'valid'],
[[7468, 7468], 'mapped', [97]],
[[7469, 7469], 'mapped', [230]],
[[7470, 7470], 'mapped', [98]],
[[7471, 7471], 'valid'],
[[7472, 7472], 'mapped', [100]],
[[7473, 7473], 'mapped', [101]],
[[7474, 7474], 'mapped', [477]],
[[7475, 7475], 'mapped', [103]],
[[7476, 7476], 'mapped', [104]],
[[7477, 7477], 'mapped', [105]],
[[7478, 7478], 'mapped', [106]],
[[7479, 7479], 'mapped', [107]],
[[7480, 7480], 'mapped', [108]],
[[7481, 7481], 'mapped', [109]],
[[7482, 7482], 'mapped', [110]],
[[7483, 7483], 'valid'],
[[7484, 7484], 'mapped', [111]],
[[7485, 7485], 'mapped', [547]],
[[7486, 7486], 'mapped', [112]],
[[7487, 7487], 'mapped', [114]],
[[7488, 7488], 'mapped', [116]],
[[7489, 7489], 'mapped', [117]],
[[7490, 7490], 'mapped', [119]],
[[7491, 7491], 'mapped', [97]],
[[7492, 7492], 'mapped', [592]],
[[7493, 7493], 'mapped', [593]],
[[7494, 7494], 'mapped', [7426]],
[[7495, 7495], 'mapped', [98]],
[[7496, 7496], 'mapped', [100]],
[[7497, 7497], 'mapped', [101]],
[[7498, 7498], 'mapped', [601]],
[[7499, 7499], 'mapped', [603]],
[[7500, 7500], 'mapped', [604]],
[[7501, 7501], 'mapped', [103]],
[[7502, 7502], 'valid'],
[[7503, 7503], 'mapped', [107]],
[[7504, 7504], 'mapped', [109]],
[[7505, 7505], 'mapped', [331]],
[[7506, 7506], 'mapped', [111]],
[[7507, 7507], 'mapped', [596]],
[[7508, 7508], 'mapped', [7446]],
[[7509, 7509], 'mapped', [7447]],
[[7510, 7510], 'mapped', [112]],
[[7511, 7511], 'mapped', [116]],
[[7512, 7512], 'mapped', [117]],
[[7513, 7513], 'mapped', [7453]],
[[7514, 7514], 'mapped', [623]],
[[7515, 7515], 'mapped', [118]],
[[7516, 7516], 'mapped', [7461]],
[[7517, 7517], 'mapped', [946]],
[[7518, 7518], 'mapped', [947]],
[[7519, 7519], 'mapped', [948]],
[[7520, 7520], 'mapped', [966]],
[[7521, 7521], 'mapped', [967]],
[[7522, 7522], 'mapped', [105]],
[[7523, 7523], 'mapped', [114]],
[[7524, 7524], 'mapped', [117]],
[[7525, 7525], 'mapped', [118]],
[[7526, 7526], 'mapped', [946]],
[[7527, 7527], 'mapped', [947]],
[[7528, 7528], 'mapped', [961]],
[[7529, 7529], 'mapped', [966]],
[[7530, 7530], 'mapped', [967]],
[[7531, 7531], 'valid'],
[[7532, 7543], 'valid'],
[[7544, 7544], 'mapped', [1085]],
[[7545, 7578], 'valid'],
[[7579, 7579], 'mapped', [594]],
[[7580, 7580], 'mapped', [99]],
[[7581, 7581], 'mapped', [597]],
[[7582, 7582], 'mapped', [240]],
[[7583, 7583], 'mapped', [604]],
[[7584, 7584], 'mapped', [102]],
[[7585, 7585], 'mapped', [607]],
[[7586, 7586], 'mapped', [609]],
[[7587, 7587], 'mapped', [613]],
[[7588, 7588], 'mapped', [616]],
[[7589, 7589], 'mapped', [617]],
[[7590, 7590], 'mapped', [618]],
[[7591, 7591], 'mapped', [7547]],
[[7592, 7592], 'mapped', [669]],
[[7593, 7593], 'mapped', [621]],
[[7594, 7594], 'mapped', [7557]],
[[7595, 7595], 'mapped', [671]],
[[7596, 7596], 'mapped', [625]],
[[7597, 7597], 'mapped', [624]],
[[7598, 7598], 'mapped', [626]],
[[7599, 7599], 'mapped', [627]],
[[7600, 7600], 'mapped', [628]],
[[7601, 7601], 'mapped', [629]],
[[7602, 7602], 'mapped', [632]],
[[7603, 7603], 'mapped', [642]],
[[7604, 7604], 'mapped', [643]],
[[7605, 7605], 'mapped', [427]],
[[7606, 7606], 'mapped', [649]],
[[7607, 7607], 'mapped', [650]],
[[7608, 7608], 'mapped', [7452]],
[[7609, 7609], 'mapped', [651]],
[[7610, 7610], 'mapped', [652]],
[[7611, 7611], 'mapped', [122]],
[[7612, 7612], 'mapped', [656]],
[[7613, 7613], 'mapped', [657]],
[[7614, 7614], 'mapped', [658]],
[[7615, 7615], 'mapped', [952]],
[[7616, 7619], 'valid'],
[[7620, 7626], 'valid'],
[[7627, 7654], 'valid'],
[[7655, 7669], 'valid'],
[[7670, 7675], 'disallowed'],
[[7676, 7676], 'valid'],
[[7677, 7677], 'valid'],
[[7678, 7679], 'valid'],
[[7680, 7680], 'mapped', [7681]],
[[7681, 7681], 'valid'],
[[7682, 7682], 'mapped', [7683]],
[[7683, 7683], 'valid'],
[[7684, 7684], 'mapped', [7685]],
[[7685, 7685], 'valid'],
[[7686, 7686], 'mapped', [7687]],
[[7687, 7687], 'valid'],
[[7688, 7688], 'mapped', [7689]],
[[7689, 7689], 'valid'],
[[7690, 7690], 'mapped', [7691]],
[[7691, 7691], 'valid'],
[[7692, 7692], 'mapped', [7693]],
[[7693, 7693], 'valid'],
[[7694, 7694], 'mapped', [7695]],
[[7695, 7695], 'valid'],
[[7696, 7696], 'mapped', [7697]],
[[7697, 7697], 'valid'],
[[7698, 7698], 'mapped', [7699]],
[[7699, 7699], 'valid'],
[[7700, 7700], 'mapped', [7701]],
[[7701, 7701], 'valid'],
[[7702, 7702], 'mapped', [7703]],
[[7703, 7703], 'valid'],
[[7704, 7704], 'mapped', [7705]],
[[7705, 7705], 'valid'],
[[7706, 7706], 'mapped', [7707]],
[[7707, 7707], 'valid'],
[[7708, 7708], 'mapped', [7709]],
[[7709, 7709], 'valid'],
[[7710, 7710], 'mapped', [7711]],
[[7711, 7711], 'valid'],
[[7712, 7712], 'mapped', [7713]],
[[7713, 7713], 'valid'],
[[7714, 7714], 'mapped', [7715]],
[[7715, 7715], 'valid'],
[[7716, 7716], 'mapped', [7717]],
[[7717, 7717], 'valid'],
[[7718, 7718], 'mapped', [7719]],
[[7719, 7719], 'valid'],
[[7720, 7720], 'mapped', [7721]],
[[7721, 7721], 'valid'],
[[7722, 7722], 'mapped', [7723]],
[[7723, 7723], 'valid'],
[[7724, 7724], 'mapped', [7725]],
[[7725, 7725], 'valid'],
[[7726, 7726], 'mapped', [7727]],
[[7727, 7727], 'valid'],
[[7728, 7728], 'mapped', [7729]],
[[7729, 7729], 'valid'],
[[7730, 7730], 'mapped', [7731]],
[[7731, 7731], 'valid'],
[[7732, 7732], 'mapped', [7733]],
[[7733, 7733], 'valid'],
[[7734, 7734], 'mapped', [7735]],
[[7735, 7735], 'valid'],
[[7736, 7736], 'mapped', [7737]],
[[7737, 7737], 'valid'],
[[7738, 7738], 'mapped', [7739]],
[[7739, 7739], 'valid'],
[[7740, 7740], 'mapped', [7741]],
[[7741, 7741], 'valid'],
[[7742, 7742], 'mapped', [7743]],
[[7743, 7743], 'valid'],
[[7744, 7744], 'mapped', [7745]],
[[7745, 7745], 'valid'],
[[7746, 7746], 'mapped', [7747]],
[[7747, 7747], 'valid'],
[[7748, 7748], 'mapped', [7749]],
[[7749, 7749], 'valid'],
[[7750, 7750], 'mapped', [7751]],
[[7751, 7751], 'valid'],
[[7752, 7752], 'mapped', [7753]],
[[7753, 7753], 'valid'],
[[7754, 7754], 'mapped', [7755]],
[[7755, 7755], 'valid'],
[[7756, 7756], 'mapped', [7757]],
[[7757, 7757], 'valid'],
[[7758, 7758], 'mapped', [7759]],
[[7759, 7759], 'valid'],
[[7760, 7760], 'mapped', [7761]],
[[7761, 7761], 'valid'],
[[7762, 7762], 'mapped', [7763]],
[[7763, 7763], 'valid'],
[[7764, 7764], 'mapped', [7765]],
[[7765, 7765], 'valid'],
[[7766, 7766], 'mapped', [7767]],
[[7767, 7767], 'valid'],
[[7768, 7768], 'mapped', [7769]],
[[7769, 7769], 'valid'],
[[7770, 7770], 'mapped', [7771]],
[[7771, 7771], 'valid'],
[[7772, 7772], 'mapped', [7773]],
[[7773, 7773], 'valid'],
[[7774, 7774], 'mapped', [7775]],
[[7775, 7775], 'valid'],
[[7776, 7776], 'mapped', [7777]],
[[7777, 7777], 'valid'],
[[7778, 7778], 'mapped', [7779]],
[[7779, 7779], 'valid'],
[[7780, 7780], 'mapped', [7781]],
[[7781, 7781], 'valid'],
[[7782, 7782], 'mapped', [7783]],
[[7783, 7783], 'valid'],
[[7784, 7784], 'mapped', [7785]],
[[7785, 7785], 'valid'],
[[7786, 7786], 'mapped', [7787]],
[[7787, 7787], 'valid'],
[[7788, 7788], 'mapped', [7789]],
[[7789, 7789], 'valid'],
[[7790, 7790], 'mapped', [7791]],
[[7791, 7791], 'valid'],
[[7792, 7792], 'mapped', [7793]],
[[7793, 7793], 'valid'],
[[7794, 7794], 'mapped', [7795]],
[[7795, 7795], 'valid'],
[[7796, 7796], 'mapped', [7797]],
[[7797, 7797], 'valid'],
[[7798, 7798], 'mapped', [7799]],
[[7799, 7799], 'valid'],
[[7800, 7800], 'mapped', [7801]],
[[7801, 7801], 'valid'],
[[7802, 7802], 'mapped', [7803]],
[[7803, 7803], 'valid'],
[[7804, 7804], 'mapped', [7805]],
[[7805, 7805], 'valid'],
[[7806, 7806], 'mapped', [7807]],
[[7807, 7807], 'valid'],
[[7808, 7808], 'mapped', [7809]],
[[7809, 7809], 'valid'],
[[7810, 7810], 'mapped', [7811]],
[[7811, 7811], 'valid'],
[[7812, 7812], 'mapped', [7813]],
[[7813, 7813], 'valid'],
[[7814, 7814], 'mapped', [7815]],
[[7815, 7815], 'valid'],
[[7816, 7816], 'mapped', [7817]],
[[7817, 7817], 'valid'],
[[7818, 7818], 'mapped', [7819]],
[[7819, 7819], 'valid'],
[[7820, 7820], 'mapped', [7821]],
[[7821, 7821], 'valid'],
[[7822, 7822], 'mapped', [7823]],
[[7823, 7823], 'valid'],
[[7824, 7824], 'mapped', [7825]],
[[7825, 7825], 'valid'],
[[7826, 7826], 'mapped', [7827]],
[[7827, 7827], 'valid'],
[[7828, 7828], 'mapped', [7829]],
[[7829, 7833], 'valid'],
[[7834, 7834], 'mapped', [97, 702]],
[[7835, 7835], 'mapped', [7777]],
[[7836, 7837], 'valid'],
[[7838, 7838], 'mapped', [115, 115]],
[[7839, 7839], 'valid'],
[[7840, 7840], 'mapped', [7841]],
[[7841, 7841], 'valid'],
[[7842, 7842], 'mapped', [7843]],
[[7843, 7843], 'valid'],
[[7844, 7844], 'mapped', [7845]],
[[7845, 7845], 'valid'],
[[7846, 7846], 'mapped', [7847]],
[[7847, 7847], 'valid'],
[[7848, 7848], 'mapped', [7849]],
[[7849, 7849], 'valid'],
[[7850, 7850], 'mapped', [7851]],
[[7851, 7851], 'valid'],
[[7852, 7852], 'mapped', [7853]],
[[7853, 7853], 'valid'],
[[7854, 7854], 'mapped', [7855]],
[[7855, 7855], 'valid'],
[[7856, 7856], 'mapped', [7857]],
[[7857, 7857], 'valid'],
[[7858, 7858], 'mapped', [7859]],
[[7859, 7859], 'valid'],
[[7860, 7860], 'mapped', [7861]],
[[7861, 7861], 'valid'],
[[7862, 7862], 'mapped', [7863]],
[[7863, 7863], 'valid'],
[[7864, 7864], 'mapped', [7865]],
[[7865, 7865], 'valid'],
[[7866, 7866], 'mapped', [7867]],
[[7867, 7867], 'valid'],
[[7868, 7868], 'mapped', [7869]],
[[7869, 7869], 'valid'],
[[7870, 7870], 'mapped', [7871]],
[[7871, 7871], 'valid'],
[[7872, 7872], 'mapped', [7873]],
[[7873, 7873], 'valid'],
[[7874, 7874], 'mapped', [7875]],
[[7875, 7875], 'valid'],
[[7876, 7876], 'mapped', [7877]],
[[7877, 7877], 'valid'],
[[7878, 7878], 'mapped', [7879]],
[[7879, 7879], 'valid'],
[[7880, 7880], 'mapped', [7881]],
[[7881, 7881], 'valid'],
[[7882, 7882], 'mapped', [7883]],
[[7883, 7883], 'valid'],
[[7884, 7884], 'mapped', [7885]],
[[7885, 7885], 'valid'],
[[7886, 7886], 'mapped', [7887]],
[[7887, 7887], 'valid'],
[[7888, 7888], 'mapped', [7889]],
[[7889, 7889], 'valid'],
[[7890, 7890], 'mapped', [7891]],
[[7891, 7891], 'valid'],
[[7892, 7892], 'mapped', [7893]],
[[7893, 7893], 'valid'],
[[7894, 7894], 'mapped', [7895]],
[[7895, 7895], 'valid'],
[[7896, 7896], 'mapped', [7897]],
[[7897, 7897], 'valid'],
[[7898, 7898], 'mapped', [7899]],
[[7899, 7899], 'valid'],
[[7900, 7900], 'mapped', [7901]],
[[7901, 7901], 'valid'],
[[7902, 7902], 'mapped', [7903]],
[[7903, 7903], 'valid'],
[[7904, 7904], 'mapped', [7905]],
[[7905, 7905], 'valid'],
[[7906, 7906], 'mapped', [7907]],
[[7907, 7907], 'valid'],
[[7908, 7908], 'mapped', [7909]],
[[7909, 7909], 'valid'],
[[7910, 7910], 'mapped', [7911]],
[[7911, 7911], 'valid'],
[[7912, 7912], 'mapped', [7913]],
[[7913, 7913], 'valid'],
[[7914, 7914], 'mapped', [7915]],
[[7915, 7915], 'valid'],
[[7916, 7916], 'mapped', [7917]],
[[7917, 7917], 'valid'],
[[7918, 7918], 'mapped', [7919]],
[[7919, 7919], 'valid'],
[[7920, 7920], 'mapped', [7921]],
[[7921, 7921], 'valid'],
[[7922, 7922], 'mapped', [7923]],
[[7923, 7923], 'valid'],
[[7924, 7924], 'mapped', [7925]],
[[7925, 7925], 'valid'],
[[7926, 7926], 'mapped', [7927]],
[[7927, 7927], 'valid'],
[[7928, 7928], 'mapped', [7929]],
[[7929, 7929], 'valid'],
[[7930, 7930], 'mapped', [7931]],
[[7931, 7931], 'valid'],
[[7932, 7932], 'mapped', [7933]],
[[7933, 7933], 'valid'],
[[7934, 7934], 'mapped', [7935]],
[[7935, 7935], 'valid'],
[[7936, 7943], 'valid'],
[[7944, 7944], 'mapped', [7936]],
[[7945, 7945], 'mapped', [7937]],
[[7946, 7946], 'mapped', [7938]],
[[7947, 7947], 'mapped', [7939]],
[[7948, 7948], 'mapped', [7940]],
[[7949, 7949], 'mapped', [7941]],
[[7950, 7950], 'mapped', [7942]],
[[7951, 7951], 'mapped', [7943]],
[[7952, 7957], 'valid'],
[[7958, 7959], 'disallowed'],
[[7960, 7960], 'mapped', [7952]],
[[7961, 7961], 'mapped', [7953]],
[[7962, 7962], 'mapped', [7954]],
[[7963, 7963], 'mapped', [7955]],
[[7964, 7964], 'mapped', [7956]],
[[7965, 7965], 'mapped', [7957]],
[[7966, 7967], 'disallowed'],
[[7968, 7975], 'valid'],
[[7976, 7976], 'mapped', [7968]],
[[7977, 7977], 'mapped', [7969]],
[[7978, 7978], 'mapped', [7970]],
[[7979, 7979], 'mapped', [7971]],
[[7980, 7980], 'mapped', [7972]],
[[7981, 7981], 'mapped', [7973]],
[[7982, 7982], 'mapped', [7974]],
[[7983, 7983], 'mapped', [7975]],
[[7984, 7991], 'valid'],
[[7992, 7992], 'mapped', [7984]],
[[7993, 7993], 'mapped', [7985]],
[[7994, 7994], 'mapped', [7986]],
[[7995, 7995], 'mapped', [7987]],
[[7996, 7996], 'mapped', [7988]],
[[7997, 7997], 'mapped', [7989]],
[[7998, 7998], 'mapped', [7990]],
[[7999, 7999], 'mapped', [7991]],
[[8000, 8005], 'valid'],
[[8006, 8007], 'disallowed'],
[[8008, 8008], 'mapped', [8000]],
[[8009, 8009], 'mapped', [8001]],
[[8010, 8010], 'mapped', [8002]],
[[8011, 8011], 'mapped', [8003]],
[[8012, 8012], 'mapped', [8004]],
[[8013, 8013], 'mapped', [8005]],
[[8014, 8015], 'disallowed'],
[[8016, 8023], 'valid'],
[[8024, 8024], 'disallowed'],
[[8025, 8025], 'mapped', [8017]],
[[8026, 8026], 'disallowed'],
[[8027, 8027], 'mapped', [8019]],
[[8028, 8028], 'disallowed'],
[[8029, 8029], 'mapped', [8021]],
[[8030, 8030], 'disallowed'],
[[8031, 8031], 'mapped', [8023]],
[[8032, 8039], 'valid'],
[[8040, 8040], 'mapped', [8032]],
[[8041, 8041], 'mapped', [8033]],
[[8042, 8042], 'mapped', [8034]],
[[8043, 8043], 'mapped', [8035]],
[[8044, 8044], 'mapped', [8036]],
[[8045, 8045], 'mapped', [8037]],
[[8046, 8046], 'mapped', [8038]],
[[8047, 8047], 'mapped', [8039]],
[[8048, 8048], 'valid'],
[[8049, 8049], 'mapped', [940]],
[[8050, 8050], 'valid'],
[[8051, 8051], 'mapped', [941]],
[[8052, 8052], 'valid'],
[[8053, 8053], 'mapped', [942]],
[[8054, 8054], 'valid'],
[[8055, 8055], 'mapped', [943]],
[[8056, 8056], 'valid'],
[[8057, 8057], 'mapped', [972]],
[[8058, 8058], 'valid'],
[[8059, 8059], 'mapped', [973]],
[[8060, 8060], 'valid'],
[[8061, 8061], 'mapped', [974]],
[[8062, 8063], 'disallowed'],
[[8064, 8064], 'mapped', [7936, 953]],
[[8065, 8065], 'mapped', [7937, 953]],
[[8066, 8066], 'mapped', [7938, 953]],
[[8067, 8067], 'mapped', [7939, 953]],
[[8068, 8068], 'mapped', [7940, 953]],
[[8069, 8069], 'mapped', [7941, 953]],
[[8070, 8070], 'mapped', [7942, 953]],
[[8071, 8071], 'mapped', [7943, 953]],
[[8072, 8072], 'mapped', [7936, 953]],
[[8073, 8073], 'mapped', [7937, 953]],
[[8074, 8074], 'mapped', [7938, 953]],
[[8075, 8075], 'mapped', [7939, 953]],
[[8076, 8076], 'mapped', [7940, 953]],
[[8077, 8077], 'mapped', [7941, 953]],
[[8078, 8078], 'mapped', [7942, 953]],
[[8079, 8079], 'mapped', [7943, 953]],
[[8080, 8080], 'mapped', [7968, 953]],
[[8081, 8081], 'mapped', [7969, 953]],
[[8082, 8082], 'mapped', [7970, 953]],
[[8083, 8083], 'mapped', [7971, 953]],
[[8084, 8084], 'mapped', [7972, 953]],
[[8085, 8085], 'mapped', [7973, 953]],
[[8086, 8086], 'mapped', [7974, 953]],
[[8087, 8087], 'mapped', [7975, 953]],
[[8088, 8088], 'mapped', [7968, 953]],
[[8089, 8089], 'mapped', [7969, 953]],
[[8090, 8090], 'mapped', [7970, 953]],
[[8091, 8091], 'mapped', [7971, 953]],
[[8092, 8092], 'mapped', [7972, 953]],
[[8093, 8093], 'mapped', [7973, 953]],
[[8094, 8094], 'mapped', [7974, 953]],
[[8095, 8095], 'mapped', [7975, 953]],
[[8096, 8096], 'mapped', [8032, 953]],
[[8097, 8097], 'mapped', [8033, 953]],
[[8098, 8098], 'mapped', [8034, 953]],
[[8099, 8099], 'mapped', [8035, 953]],
[[8100, 8100], 'mapped', [8036, 953]],
[[8101, 8101], 'mapped', [8037, 953]],
[[8102, 8102], 'mapped', [8038, 953]],
[[8103, 8103], 'mapped', [8039, 953]],
[[8104, 8104], 'mapped', [8032, 953]],
[[8105, 8105], 'mapped', [8033, 953]],
[[8106, 8106], 'mapped', [8034, 953]],
[[8107, 8107], 'mapped', [8035, 953]],
[[8108, 8108], 'mapped', [8036, 953]],
[[8109, 8109], 'mapped', [8037, 953]],
[[8110, 8110], 'mapped', [8038, 953]],
[[8111, 8111], 'mapped', [8039, 953]],
[[8112, 8113], 'valid'],
[[8114, 8114], 'mapped', [8048, 953]],
[[8115, 8115], 'mapped', [945, 953]],
[[8116, 8116], 'mapped', [940, 953]],
[[8117, 8117], 'disallowed'],
[[8118, 8118], 'valid'],
[[8119, 8119], 'mapped', [8118, 953]],
[[8120, 8120], 'mapped', [8112]],
[[8121, 8121], 'mapped', [8113]],
[[8122, 8122], 'mapped', [8048]],
[[8123, 8123], 'mapped', [940]],
[[8124, 8124], 'mapped', [945, 953]],
[[8125, 8125], 'disallowed_STD3_mapped', [32, 787]],
[[8126, 8126], 'mapped', [953]],
[[8127, 8127], 'disallowed_STD3_mapped', [32, 787]],
[[8128, 8128], 'disallowed_STD3_mapped', [32, 834]],
[[8129, 8129], 'disallowed_STD3_mapped', [32, 776, 834]],
[[8130, 8130], 'mapped', [8052, 953]],
[[8131, 8131], 'mapped', [951, 953]],
[[8132, 8132], 'mapped', [942, 953]],
[[8133, 8133], 'disallowed'],
[[8134, 8134], 'valid'],
[[8135, 8135], 'mapped', [8134, 953]],
[[8136, 8136], 'mapped', [8050]],
[[8137, 8137], 'mapped', [941]],
[[8138, 8138], 'mapped', [8052]],
[[8139, 8139], 'mapped', [942]],
[[8140, 8140], 'mapped', [951, 953]],
[[8141, 8141], 'disallowed_STD3_mapped', [32, 787, 768]],
[[8142, 8142], 'disallowed_STD3_mapped', [32, 787, 769]],
[[8143, 8143], 'disallowed_STD3_mapped', [32, 787, 834]],
[[8144, 8146], 'valid'],
[[8147, 8147], 'mapped', [912]],
[[8148, 8149], 'disallowed'],
[[8150, 8151], 'valid'],
[[8152, 8152], 'mapped', [8144]],
[[8153, 8153], 'mapped', [8145]],
[[8154, 8154], 'mapped', [8054]],
[[8155, 8155], 'mapped', [943]],
[[8156, 8156], 'disallowed'],
[[8157, 8157], 'disallowed_STD3_mapped', [32, 788, 768]],
[[8158, 8158], 'disallowed_STD3_mapped', [32, 788, 769]],
[[8159, 8159], 'disallowed_STD3_mapped', [32, 788, 834]],
[[8160, 8162], 'valid'],
[[8163, 8163], 'mapped', [944]],
[[8164, 8167], 'valid'],
[[8168, 8168], 'mapped', [8160]],
[[8169, 8169], 'mapped', [8161]],
[[8170, 8170], 'mapped', [8058]],
[[8171, 8171], 'mapped', [973]],
[[8172, 8172], 'mapped', [8165]],
[[8173, 8173], 'disallowed_STD3_mapped', [32, 776, 768]],
[[8174, 8174], 'disallowed_STD3_mapped', [32, 776, 769]],
[[8175, 8175], 'disallowed_STD3_mapped', [96]],
[[8176, 8177], 'disallowed'],
[[8178, 8178], 'mapped', [8060, 953]],
[[8179, 8179], 'mapped', [969, 953]],
[[8180, 8180], 'mapped', [974, 953]],
[[8181, 8181], 'disallowed'],
[[8182, 8182], 'valid'],
[[8183, 8183], 'mapped', [8182, 953]],
[[8184, 8184], 'mapped', [8056]],
[[8185, 8185], 'mapped', [972]],
[[8186, 8186], 'mapped', [8060]],
[[8187, 8187], 'mapped', [974]],
[[8188, 8188], 'mapped', [969, 953]],
[[8189, 8189], 'disallowed_STD3_mapped', [32, 769]],
[[8190, 8190], 'disallowed_STD3_mapped', [32, 788]],
[[8191, 8191], 'disallowed'],
[[8192, 8202], 'disallowed_STD3_mapped', [32]],
[[8203, 8203], 'ignored'],
[[8204, 8205], 'deviation', []],
[[8206, 8207], 'disallowed'],
[[8208, 8208], 'valid', [], 'NV8'],
[[8209, 8209], 'mapped', [8208]],
[[8210, 8214], 'valid', [], 'NV8'],
[[8215, 8215], 'disallowed_STD3_mapped', [32, 819]],
[[8216, 8227], 'valid', [], 'NV8'],
[[8228, 8230], 'disallowed'],
[[8231, 8231], 'valid', [], 'NV8'],
[[8232, 8238], 'disallowed'],
[[8239, 8239], 'disallowed_STD3_mapped', [32]],
[[8240, 8242], 'valid', [], 'NV8'],
[[8243, 8243], 'mapped', [8242, 8242]],
[[8244, 8244], 'mapped', [8242, 8242, 8242]],
[[8245, 8245], 'valid', [], 'NV8'],
[[8246, 8246], 'mapped', [8245, 8245]],
[[8247, 8247], 'mapped', [8245, 8245, 8245]],
[[8248, 8251], 'valid', [], 'NV8'],
[[8252, 8252], 'disallowed_STD3_mapped', [33, 33]],
[[8253, 8253], 'valid', [], 'NV8'],
[[8254, 8254], 'disallowed_STD3_mapped', [32, 773]],
[[8255, 8262], 'valid', [], 'NV8'],
[[8263, 8263], 'disallowed_STD3_mapped', [63, 63]],
[[8264, 8264], 'disallowed_STD3_mapped', [63, 33]],
[[8265, 8265], 'disallowed_STD3_mapped', [33, 63]],
[[8266, 8269], 'valid', [], 'NV8'],
[[8270, 8274], 'valid', [], 'NV8'],
[[8275, 8276], 'valid', [], 'NV8'],
[[8277, 8278], 'valid', [], 'NV8'],
[[8279, 8279], 'mapped', [8242, 8242, 8242, 8242]],
[[8280, 8286], 'valid', [], 'NV8'],
[[8287, 8287], 'disallowed_STD3_mapped', [32]],
[[8288, 8288], 'ignored'],
[[8289, 8291], 'disallowed'],
[[8292, 8292], 'ignored'],
[[8293, 8293], 'disallowed'],
[[8294, 8297], 'disallowed'],
[[8298, 8303], 'disallowed'],
[[8304, 8304], 'mapped', [48]],
[[8305, 8305], 'mapped', [105]],
[[8306, 8307], 'disallowed'],
[[8308, 8308], 'mapped', [52]],
[[8309, 8309], 'mapped', [53]],
[[8310, 8310], 'mapped', [54]],
[[8311, 8311], 'mapped', [55]],
[[8312, 8312], 'mapped', [56]],
[[8313, 8313], 'mapped', [57]],
[[8314, 8314], 'disallowed_STD3_mapped', [43]],
[[8315, 8315], 'mapped', [8722]],
[[8316, 8316], 'disallowed_STD3_mapped', [61]],
[[8317, 8317], 'disallowed_STD3_mapped', [40]],
[[8318, 8318], 'disallowed_STD3_mapped', [41]],
[[8319, 8319], 'mapped', [110]],
[[8320, 8320], 'mapped', [48]],
[[8321, 8321], 'mapped', [49]],
[[8322, 8322], 'mapped', [50]],
[[8323, 8323], 'mapped', [51]],
[[8324, 8324], 'mapped', [52]],
[[8325, 8325], 'mapped', [53]],
[[8326, 8326], 'mapped', [54]],
[[8327, 8327], 'mapped', [55]],
[[8328, 8328], 'mapped', [56]],
[[8329, 8329], 'mapped', [57]],
[[8330, 8330], 'disallowed_STD3_mapped', [43]],
[[8331, 8331], 'mapped', [8722]],
[[8332, 8332], 'disallowed_STD3_mapped', [61]],
[[8333, 8333], 'disallowed_STD3_mapped', [40]],
[[8334, 8334], 'disallowed_STD3_mapped', [41]],
[[8335, 8335], 'disallowed'],
[[8336, 8336], 'mapped', [97]],
[[8337, 8337], 'mapped', [101]],
[[8338, 8338], 'mapped', [111]],
[[8339, 8339], 'mapped', [120]],
[[8340, 8340], 'mapped', [601]],
[[8341, 8341], 'mapped', [104]],
[[8342, 8342], 'mapped', [107]],
[[8343, 8343], 'mapped', [108]],
[[8344, 8344], 'mapped', [109]],
[[8345, 8345], 'mapped', [110]],
[[8346, 8346], 'mapped', [112]],
[[8347, 8347], 'mapped', [115]],
[[8348, 8348], 'mapped', [116]],
[[8349, 8351], 'disallowed'],
[[8352, 8359], 'valid', [], 'NV8'],
[[8360, 8360], 'mapped', [114, 115]],
[[8361, 8362], 'valid', [], 'NV8'],
[[8363, 8363], 'valid', [], 'NV8'],
[[8364, 8364], 'valid', [], 'NV8'],
[[8365, 8367], 'valid', [], 'NV8'],
[[8368, 8369], 'valid', [], 'NV8'],
[[8370, 8373], 'valid', [], 'NV8'],
[[8374, 8376], 'valid', [], 'NV8'],
[[8377, 8377], 'valid', [], 'NV8'],
[[8378, 8378], 'valid', [], 'NV8'],
[[8379, 8381], 'valid', [], 'NV8'],
[[8382, 8382], 'valid', [], 'NV8'],
[[8383, 8399], 'disallowed'],
[[8400, 8417], 'valid', [], 'NV8'],
[[8418, 8419], 'valid', [], 'NV8'],
[[8420, 8426], 'valid', [], 'NV8'],
[[8427, 8427], 'valid', [], 'NV8'],
[[8428, 8431], 'valid', [], 'NV8'],
[[8432, 8432], 'valid', [], 'NV8'],
[[8433, 8447], 'disallowed'],
[[8448, 8448], 'disallowed_STD3_mapped', [97, 47, 99]],
[[8449, 8449], 'disallowed_STD3_mapped', [97, 47, 115]],
[[8450, 8450], 'mapped', [99]],
[[8451, 8451], 'mapped', [176, 99]],
[[8452, 8452], 'valid', [], 'NV8'],
[[8453, 8453], 'disallowed_STD3_mapped', [99, 47, 111]],
[[8454, 8454], 'disallowed_STD3_mapped', [99, 47, 117]],
[[8455, 8455], 'mapped', [603]],
[[8456, 8456], 'valid', [], 'NV8'],
[[8457, 8457], 'mapped', [176, 102]],
[[8458, 8458], 'mapped', [103]],
[[8459, 8462], 'mapped', [104]],
[[8463, 8463], 'mapped', [295]],
[[8464, 8465], 'mapped', [105]],
[[8466, 8467], 'mapped', [108]],
[[8468, 8468], 'valid', [], 'NV8'],
[[8469, 8469], 'mapped', [110]],
[[8470, 8470], 'mapped', [110, 111]],
[[8471, 8472], 'valid', [], 'NV8'],
[[8473, 8473], 'mapped', [112]],
[[8474, 8474], 'mapped', [113]],
[[8475, 8477], 'mapped', [114]],
[[8478, 8479], 'valid', [], 'NV8'],
[[8480, 8480], 'mapped', [115, 109]],
[[8481, 8481], 'mapped', [116, 101, 108]],
[[8482, 8482], 'mapped', [116, 109]],
[[8483, 8483], 'valid', [], 'NV8'],
[[8484, 8484], 'mapped', [122]],
[[8485, 8485], 'valid', [], 'NV8'],
[[8486, 8486], 'mapped', [969]],
[[8487, 8487], 'valid', [], 'NV8'],
[[8488, 8488], 'mapped', [122]],
[[8489, 8489], 'valid', [], 'NV8'],
[[8490, 8490], 'mapped', [107]],
[[8491, 8491], 'mapped', [229]],
[[8492, 8492], 'mapped', [98]],
[[8493, 8493], 'mapped', [99]],
[[8494, 8494], 'valid', [], 'NV8'],
[[8495, 8496], 'mapped', [101]],
[[8497, 8497], 'mapped', [102]],
[[8498, 8498], 'disallowed'],
[[8499, 8499], 'mapped', [109]],
[[8500, 8500], 'mapped', [111]],
[[8501, 8501], 'mapped', [1488]],
[[8502, 8502], 'mapped', [1489]],
[[8503, 8503], 'mapped', [1490]],
[[8504, 8504], 'mapped', [1491]],
[[8505, 8505], 'mapped', [105]],
[[8506, 8506], 'valid', [], 'NV8'],
[[8507, 8507], 'mapped', [102, 97, 120]],
[[8508, 8508], 'mapped', [960]],
[[8509, 8510], 'mapped', [947]],
[[8511, 8511], 'mapped', [960]],
[[8512, 8512], 'mapped', [8721]],
[[8513, 8516], 'valid', [], 'NV8'],
[[8517, 8518], 'mapped', [100]],
[[8519, 8519], 'mapped', [101]],
[[8520, 8520], 'mapped', [105]],
[[8521, 8521], 'mapped', [106]],
[[8522, 8523], 'valid', [], 'NV8'],
[[8524, 8524], 'valid', [], 'NV8'],
[[8525, 8525], 'valid', [], 'NV8'],
[[8526, 8526], 'valid'],
[[8527, 8527], 'valid', [], 'NV8'],
[[8528, 8528], 'mapped', [49, 8260, 55]],
[[8529, 8529], 'mapped', [49, 8260, 57]],
[[8530, 8530], 'mapped', [49, 8260, 49, 48]],
[[8531, 8531], 'mapped', [49, 8260, 51]],
[[8532, 8532], 'mapped', [50, 8260, 51]],
[[8533, 8533], 'mapped', [49, 8260, 53]],
[[8534, 8534], 'mapped', [50, 8260, 53]],
[[8535, 8535], 'mapped', [51, 8260, 53]],
[[8536, 8536], 'mapped', [52, 8260, 53]],
[[8537, 8537], 'mapped', [49, 8260, 54]],
[[8538, 8538], 'mapped', [53, 8260, 54]],
[[8539, 8539], 'mapped', [49, 8260, 56]],
[[8540, 8540], 'mapped', [51, 8260, 56]],
[[8541, 8541], 'mapped', [53, 8260, 56]],
[[8542, 8542], 'mapped', [55, 8260, 56]],
[[8543, 8543], 'mapped', [49, 8260]],
[[8544, 8544], 'mapped', [105]],
[[8545, 8545], 'mapped', [105, 105]],
[[8546, 8546], 'mapped', [105, 105, 105]],
[[8547, 8547], 'mapped', [105, 118]],
[[8548, 8548], 'mapped', [118]],
[[8549, 8549], 'mapped', [118, 105]],
[[8550, 8550], 'mapped', [118, 105, 105]],
[[8551, 8551], 'mapped', [118, 105, 105, 105]],
[[8552, 8552], 'mapped', [105, 120]],
[[8553, 8553], 'mapped', [120]],
[[8554, 8554], 'mapped', [120, 105]],
[[8555, 8555], 'mapped', [120, 105, 105]],
[[8556, 8556], 'mapped', [108]],
[[8557, 8557], 'mapped', [99]],
[[8558, 8558], 'mapped', [100]],
[[8559, 8559], 'mapped', [109]],
[[8560, 8560], 'mapped', [105]],
[[8561, 8561], 'mapped', [105, 105]],
[[8562, 8562], 'mapped', [105, 105, 105]],
[[8563, 8563], 'mapped', [105, 118]],
[[8564, 8564], 'mapped', [118]],
[[8565, 8565], 'mapped', [118, 105]],
[[8566, 8566], 'mapped', [118, 105, 105]],
[[8567, 8567], 'mapped', [118, 105, 105, 105]],
[[8568, 8568], 'mapped', [105, 120]],
[[8569, 8569], 'mapped', [120]],
[[8570, 8570], 'mapped', [120, 105]],
[[8571, 8571], 'mapped', [120, 105, 105]],
[[8572, 8572], 'mapped', [108]],
[[8573, 8573], 'mapped', [99]],
[[8574, 8574], 'mapped', [100]],
[[8575, 8575], 'mapped', [109]],
[[8576, 8578], 'valid', [], 'NV8'],
[[8579, 8579], 'disallowed'],
[[8580, 8580], 'valid'],
[[8581, 8584], 'valid', [], 'NV8'],
[[8585, 8585], 'mapped', [48, 8260, 51]],
[[8586, 8587], 'valid', [], 'NV8'],
[[8588, 8591], 'disallowed'],
[[8592, 8682], 'valid', [], 'NV8'],
[[8683, 8691], 'valid', [], 'NV8'],
[[8692, 8703], 'valid', [], 'NV8'],
[[8704, 8747], 'valid', [], 'NV8'],
[[8748, 8748], 'mapped', [8747, 8747]],
[[8749, 8749], 'mapped', [8747, 8747, 8747]],
[[8750, 8750], 'valid', [], 'NV8'],
[[8751, 8751], 'mapped', [8750, 8750]],
[[8752, 8752], 'mapped', [8750, 8750, 8750]],
[[8753, 8799], 'valid', [], 'NV8'],
[[8800, 8800], 'disallowed_STD3_valid'],
[[8801, 8813], 'valid', [], 'NV8'],
[[8814, 8815], 'disallowed_STD3_valid'],
[[8816, 8945], 'valid', [], 'NV8'],
[[8946, 8959], 'valid', [], 'NV8'],
[[8960, 8960], 'valid', [], 'NV8'],
[[8961, 8961], 'valid', [], 'NV8'],
[[8962, 9000], 'valid', [], 'NV8'],
[[9001, 9001], 'mapped', [12296]],
[[9002, 9002], 'mapped', [12297]],
[[9003, 9082], 'valid', [], 'NV8'],
[[9083, 9083], 'valid', [], 'NV8'],
[[9084, 9084], 'valid', [], 'NV8'],
[[9085, 9114], 'valid', [], 'NV8'],
[[9115, 9166], 'valid', [], 'NV8'],
[[9167, 9168], 'valid', [], 'NV8'],
[[9169, 9179], 'valid', [], 'NV8'],
[[9180, 9191], 'valid', [], 'NV8'],
[[9192, 9192], 'valid', [], 'NV8'],
[[9193, 9203], 'valid', [], 'NV8'],
[[9204, 9210], 'valid', [], 'NV8'],
[[9211, 9215], 'disallowed'],
[[9216, 9252], 'valid', [], 'NV8'],
[[9253, 9254], 'valid', [], 'NV8'],
[[9255, 9279], 'disallowed'],
[[9280, 9290], 'valid', [], 'NV8'],
[[9291, 9311], 'disallowed'],
[[9312, 9312], 'mapped', [49]],
[[9313, 9313], 'mapped', [50]],
[[9314, 9314], 'mapped', [51]],
[[9315, 9315], 'mapped', [52]],
[[9316, 9316], 'mapped', [53]],
[[9317, 9317], 'mapped', [54]],
[[9318, 9318], 'mapped', [55]],
[[9319, 9319], 'mapped', [56]],
[[9320, 9320], 'mapped', [57]],
[[9321, 9321], 'mapped', [49, 48]],
[[9322, 9322], 'mapped', [49, 49]],
[[9323, 9323], 'mapped', [49, 50]],
[[9324, 9324], 'mapped', [49, 51]],
[[9325, 9325], 'mapped', [49, 52]],
[[9326, 9326], 'mapped', [49, 53]],
[[9327, 9327], 'mapped', [49, 54]],
[[9328, 9328], 'mapped', [49, 55]],
[[9329, 9329], 'mapped', [49, 56]],
[[9330, 9330], 'mapped', [49, 57]],
[[9331, 9331], 'mapped', [50, 48]],
[[9332, 9332], 'disallowed_STD3_mapped', [40, 49, 41]],
[[9333, 9333], 'disallowed_STD3_mapped', [40, 50, 41]],
[[9334, 9334], 'disallowed_STD3_mapped', [40, 51, 41]],
[[9335, 9335], 'disallowed_STD3_mapped', [40, 52, 41]],
[[9336, 9336], 'disallowed_STD3_mapped', [40, 53, 41]],
[[9337, 9337], 'disallowed_STD3_mapped', [40, 54, 41]],
[[9338, 9338], 'disallowed_STD3_mapped', [40, 55, 41]],
[[9339, 9339], 'disallowed_STD3_mapped', [40, 56, 41]],
[[9340, 9340], 'disallowed_STD3_mapped', [40, 57, 41]],
[[9341, 9341], 'disallowed_STD3_mapped', [40, 49, 48, 41]],
[[9342, 9342], 'disallowed_STD3_mapped', [40, 49, 49, 41]],
[[9343, 9343], 'disallowed_STD3_mapped', [40, 49, 50, 41]],
[[9344, 9344], 'disallowed_STD3_mapped', [40, 49, 51, 41]],
[[9345, 9345], 'disallowed_STD3_mapped', [40, 49, 52, 41]],
[[9346, 9346], 'disallowed_STD3_mapped', [40, 49, 53, 41]],
[[9347, 9347], 'disallowed_STD3_mapped', [40, 49, 54, 41]],
[[9348, 9348], 'disallowed_STD3_mapped', [40, 49, 55, 41]],
[[9349, 9349], 'disallowed_STD3_mapped', [40, 49, 56, 41]],
[[9350, 9350], 'disallowed_STD3_mapped', [40, 49, 57, 41]],
[[9351, 9351], 'disallowed_STD3_mapped', [40, 50, 48, 41]],
[[9352, 9371], 'disallowed'],
[[9372, 9372], 'disallowed_STD3_mapped', [40, 97, 41]],
[[9373, 9373], 'disallowed_STD3_mapped', [40, 98, 41]],
[[9374, 9374], 'disallowed_STD3_mapped', [40, 99, 41]],
[[9375, 9375], 'disallowed_STD3_mapped', [40, 100, 41]],
[[9376, 9376], 'disallowed_STD3_mapped', [40, 101, 41]],
[[9377, 9377], 'disallowed_STD3_mapped', [40, 102, 41]],
[[9378, 9378], 'disallowed_STD3_mapped', [40, 103, 41]],
[[9379, 9379], 'disallowed_STD3_mapped', [40, 104, 41]],
[[9380, 9380], 'disallowed_STD3_mapped', [40, 105, 41]],
[[9381, 9381], 'disallowed_STD3_mapped', [40, 106, 41]],
[[9382, 9382], 'disallowed_STD3_mapped', [40, 107, 41]],
[[9383, 9383], 'disallowed_STD3_mapped', [40, 108, 41]],
[[9384, 9384], 'disallowed_STD3_mapped', [40, 109, 41]],
[[9385, 9385], 'disallowed_STD3_mapped', [40, 110, 41]],
[[9386, 9386], 'disallowed_STD3_mapped', [40, 111, 41]],
[[9387, 9387], 'disallowed_STD3_mapped', [40, 112, 41]],
[[9388, 9388], 'disallowed_STD3_mapped', [40, 113, 41]],
[[9389, 9389], 'disallowed_STD3_mapped', [40, 114, 41]],
[[9390, 9390], 'disallowed_STD3_mapped', [40, 115, 41]],
[[9391, 9391], 'disallowed_STD3_mapped', [40, 116, 41]],
[[9392, 9392], 'disallowed_STD3_mapped', [40, 117, 41]],
[[9393, 9393], 'disallowed_STD3_mapped', [40, 118, 41]],
[[9394, 9394], 'disallowed_STD3_mapped', [40, 119, 41]],
[[9395, 9395], 'disallowed_STD3_mapped', [40, 120, 41]],
[[9396, 9396], 'disallowed_STD3_mapped', [40, 121, 41]],
[[9397, 9397], 'disallowed_STD3_mapped', [40, 122, 41]],
[[9398, 9398], 'mapped', [97]],
[[9399, 9399], 'mapped', [98]],
[[9400, 9400], 'mapped', [99]],
[[9401, 9401], 'mapped', [100]],
[[9402, 9402], 'mapped', [101]],
[[9403, 9403], 'mapped', [102]],
[[9404, 9404], 'mapped', [103]],
[[9405, 9405], 'mapped', [104]],
[[9406, 9406], 'mapped', [105]],
[[9407, 9407], 'mapped', [106]],
[[9408, 9408], 'mapped', [107]],
[[9409, 9409], 'mapped', [108]],
[[9410, 9410], 'mapped', [109]],
[[9411, 9411], 'mapped', [110]],
[[9412, 9412], 'mapped', [111]],
[[9413, 9413], 'mapped', [112]],
[[9414, 9414], 'mapped', [113]],
[[9415, 9415], 'mapped', [114]],
[[9416, 9416], 'mapped', [115]],
[[9417, 9417], 'mapped', [116]],
[[9418, 9418], 'mapped', [117]],
[[9419, 9419], 'mapped', [118]],
[[9420, 9420], 'mapped', [119]],
[[9421, 9421], 'mapped', [120]],
[[9422, 9422], 'mapped', [121]],
[[9423, 9423], 'mapped', [122]],
[[9424, 9424], 'mapped', [97]],
[[9425, 9425], 'mapped', [98]],
[[9426, 9426], 'mapped', [99]],
[[9427, 9427], 'mapped', [100]],
[[9428, 9428], 'mapped', [101]],
[[9429, 9429], 'mapped', [102]],
[[9430, 9430], 'mapped', [103]],
[[9431, 9431], 'mapped', [104]],
[[9432, 9432], 'mapped', [105]],
[[9433, 9433], 'mapped', [106]],
[[9434, 9434], 'mapped', [107]],
[[9435, 9435], 'mapped', [108]],
[[9436, 9436], 'mapped', [109]],
[[9437, 9437], 'mapped', [110]],
[[9438, 9438], 'mapped', [111]],
[[9439, 9439], 'mapped', [112]],
[[9440, 9440], 'mapped', [113]],
[[9441, 9441], 'mapped', [114]],
[[9442, 9442], 'mapped', [115]],
[[9443, 9443], 'mapped', [116]],
[[9444, 9444], 'mapped', [117]],
[[9445, 9445], 'mapped', [118]],
[[9446, 9446], 'mapped', [119]],
[[9447, 9447], 'mapped', [120]],
[[9448, 9448], 'mapped', [121]],
[[9449, 9449], 'mapped', [122]],
[[9450, 9450], 'mapped', [48]],
[[9451, 9470], 'valid', [], 'NV8'],
[[9471, 9471], 'valid', [], 'NV8'],
[[9472, 9621], 'valid', [], 'NV8'],
[[9622, 9631], 'valid', [], 'NV8'],
[[9632, 9711], 'valid', [], 'NV8'],
[[9712, 9719], 'valid', [], 'NV8'],
[[9720, 9727], 'valid', [], 'NV8'],
[[9728, 9747], 'valid', [], 'NV8'],
[[9748, 9749], 'valid', [], 'NV8'],
[[9750, 9751], 'valid', [], 'NV8'],
[[9752, 9752], 'valid', [], 'NV8'],
[[9753, 9753], 'valid', [], 'NV8'],
[[9754, 9839], 'valid', [], 'NV8'],
[[9840, 9841], 'valid', [], 'NV8'],
[[9842, 9853], 'valid', [], 'NV8'],
[[9854, 9855], 'valid', [], 'NV8'],
[[9856, 9865], 'valid', [], 'NV8'],
[[9866, 9873], 'valid', [], 'NV8'],
[[9874, 9884], 'valid', [], 'NV8'],
[[9885, 9885], 'valid', [], 'NV8'],
[[9886, 9887], 'valid', [], 'NV8'],
[[9888, 9889], 'valid', [], 'NV8'],
[[9890, 9905], 'valid', [], 'NV8'],
[[9906, 9906], 'valid', [], 'NV8'],
[[9907, 9916], 'valid', [], 'NV8'],
[[9917, 9919], 'valid', [], 'NV8'],
[[9920, 9923], 'valid', [], 'NV8'],
[[9924, 9933], 'valid', [], 'NV8'],
[[9934, 9934], 'valid', [], 'NV8'],
[[9935, 9953], 'valid', [], 'NV8'],
[[9954, 9954], 'valid', [], 'NV8'],
[[9955, 9955], 'valid', [], 'NV8'],
[[9956, 9959], 'valid', [], 'NV8'],
[[9960, 9983], 'valid', [], 'NV8'],
[[9984, 9984], 'valid', [], 'NV8'],
[[9985, 9988], 'valid', [], 'NV8'],
[[9989, 9989], 'valid', [], 'NV8'],
[[9990, 9993], 'valid', [], 'NV8'],
[[9994, 9995], 'valid', [], 'NV8'],
[[9996, 10023], 'valid', [], 'NV8'],
[[10024, 10024], 'valid', [], 'NV8'],
[[10025, 10059], 'valid', [], 'NV8'],
[[10060, 10060], 'valid', [], 'NV8'],
[[10061, 10061], 'valid', [], 'NV8'],
[[10062, 10062], 'valid', [], 'NV8'],
[[10063, 10066], 'valid', [], 'NV8'],
[[10067, 10069], 'valid', [], 'NV8'],
[[10070, 10070], 'valid', [], 'NV8'],
[[10071, 10071], 'valid', [], 'NV8'],
[[10072, 10078], 'valid', [], 'NV8'],
[[10079, 10080], 'valid', [], 'NV8'],
[[10081, 10087], 'valid', [], 'NV8'],
[[10088, 10101], 'valid', [], 'NV8'],
[[10102, 10132], 'valid', [], 'NV8'],
[[10133, 10135], 'valid', [], 'NV8'],
[[10136, 10159], 'valid', [], 'NV8'],
[[10160, 10160], 'valid', [], 'NV8'],
[[10161, 10174], 'valid', [], 'NV8'],
[[10175, 10175], 'valid', [], 'NV8'],
[[10176, 10182], 'valid', [], 'NV8'],
[[10183, 10186], 'valid', [], 'NV8'],
[[10187, 10187], 'valid', [], 'NV8'],
[[10188, 10188], 'valid', [], 'NV8'],
[[10189, 10189], 'valid', [], 'NV8'],
[[10190, 10191], 'valid', [], 'NV8'],
[[10192, 10219], 'valid', [], 'NV8'],
[[10220, 10223], 'valid', [], 'NV8'],
[[10224, 10239], 'valid', [], 'NV8'],
[[10240, 10495], 'valid', [], 'NV8'],
[[10496, 10763], 'valid', [], 'NV8'],
[[10764, 10764], 'mapped', [8747, 8747, 8747, 8747]],
[[10765, 10867], 'valid', [], 'NV8'],
[[10868, 10868], 'disallowed_STD3_mapped', [58, 58, 61]],
[[10869, 10869], 'disallowed_STD3_mapped', [61, 61]],
[[10870, 10870], 'disallowed_STD3_mapped', [61, 61, 61]],
[[10871, 10971], 'valid', [], 'NV8'],
[[10972, 10972], 'mapped', [10973, 824]],
[[10973, 11007], 'valid', [], 'NV8'],
[[11008, 11021], 'valid', [], 'NV8'],
[[11022, 11027], 'valid', [], 'NV8'],
[[11028, 11034], 'valid', [], 'NV8'],
[[11035, 11039], 'valid', [], 'NV8'],
[[11040, 11043], 'valid', [], 'NV8'],
[[11044, 11084], 'valid', [], 'NV8'],
[[11085, 11087], 'valid', [], 'NV8'],
[[11088, 11092], 'valid', [], 'NV8'],
[[11093, 11097], 'valid', [], 'NV8'],
[[11098, 11123], 'valid', [], 'NV8'],
[[11124, 11125], 'disallowed'],
[[11126, 11157], 'valid', [], 'NV8'],
[[11158, 11159], 'disallowed'],
[[11160, 11193], 'valid', [], 'NV8'],
[[11194, 11196], 'disallowed'],
[[11197, 11208], 'valid', [], 'NV8'],
[[11209, 11209], 'disallowed'],
[[11210, 11217], 'valid', [], 'NV8'],
[[11218, 11243], 'disallowed'],
[[11244, 11247], 'valid', [], 'NV8'],
[[11248, 11263], 'disallowed'],
[[11264, 11264], 'mapped', [11312]],
[[11265, 11265], 'mapped', [11313]],
[[11266, 11266], 'mapped', [11314]],
[[11267, 11267], 'mapped', [11315]],
[[11268, 11268], 'mapped', [11316]],
[[11269, 11269], 'mapped', [11317]],
[[11270, 11270], 'mapped', [11318]],
[[11271, 11271], 'mapped', [11319]],
[[11272, 11272], 'mapped', [11320]],
[[11273, 11273], 'mapped', [11321]],
[[11274, 11274], 'mapped', [11322]],
[[11275, 11275], 'mapped', [11323]],
[[11276, 11276], 'mapped', [11324]],
[[11277, 11277], 'mapped', [11325]],
[[11278, 11278], 'mapped', [11326]],
[[11279, 11279], 'mapped', [11327]],
[[11280, 11280], 'mapped', [11328]],
[[11281, 11281], 'mapped', [11329]],
[[11282, 11282], 'mapped', [11330]],
[[11283, 11283], 'mapped', [11331]],
[[11284, 11284], 'mapped', [11332]],
[[11285, 11285], 'mapped', [11333]],
[[11286, 11286], 'mapped', [11334]],
[[11287, 11287], 'mapped', [11335]],
[[11288, 11288], 'mapped', [11336]],
[[11289, 11289], 'mapped', [11337]],
[[11290, 11290], 'mapped', [11338]],
[[11291, 11291], 'mapped', [11339]],
[[11292, 11292], 'mapped', [11340]],
[[11293, 11293], 'mapped', [11341]],
[[11294, 11294], 'mapped', [11342]],
[[11295, 11295], 'mapped', [11343]],
[[11296, 11296], 'mapped', [11344]],
[[11297, 11297], 'mapped', [11345]],
[[11298, 11298], 'mapped', [11346]],
[[11299, 11299], 'mapped', [11347]],
[[11300, 11300], 'mapped', [11348]],
[[11301, 11301], 'mapped', [11349]],
[[11302, 11302], 'mapped', [11350]],
[[11303, 11303], 'mapped', [11351]],
[[11304, 11304], 'mapped', [11352]],
[[11305, 11305], 'mapped', [11353]],
[[11306, 11306], 'mapped', [11354]],
[[11307, 11307], 'mapped', [11355]],
[[11308, 11308], 'mapped', [11356]],
[[11309, 11309], 'mapped', [11357]],
[[11310, 11310], 'mapped', [11358]],
[[11311, 11311], 'disallowed'],
[[11312, 11358], 'valid'],
[[11359, 11359], 'disallowed'],
[[11360, 11360], 'mapped', [11361]],
[[11361, 11361], 'valid'],
[[11362, 11362], 'mapped', [619]],
[[11363, 11363], 'mapped', [7549]],
[[11364, 11364], 'mapped', [637]],
[[11365, 11366], 'valid'],
[[11367, 11367], 'mapped', [11368]],
[[11368, 11368], 'valid'],
[[11369, 11369], 'mapped', [11370]],
[[11370, 11370], 'valid'],
[[11371, 11371], 'mapped', [11372]],
[[11372, 11372], 'valid'],
[[11373, 11373], 'mapped', [593]],
[[11374, 11374], 'mapped', [625]],
[[11375, 11375], 'mapped', [592]],
[[11376, 11376], 'mapped', [594]],
[[11377, 11377], 'valid'],
[[11378, 11378], 'mapped', [11379]],
[[11379, 11379], 'valid'],
[[11380, 11380], 'valid'],
[[11381, 11381], 'mapped', [11382]],
[[11382, 11383], 'valid'],
[[11384, 11387], 'valid'],
[[11388, 11388], 'mapped', [106]],
[[11389, 11389], 'mapped', [118]],
[[11390, 11390], 'mapped', [575]],
[[11391, 11391], 'mapped', [576]],
[[11392, 11392], 'mapped', [11393]],
[[11393, 11393], 'valid'],
[[11394, 11394], 'mapped', [11395]],
[[11395, 11395], 'valid'],
[[11396, 11396], 'mapped', [11397]],
[[11397, 11397], 'valid'],
[[11398, 11398], 'mapped', [11399]],
[[11399, 11399], 'valid'],
[[11400, 11400], 'mapped', [11401]],
[[11401, 11401], 'valid'],
[[11402, 11402], 'mapped', [11403]],
[[11403, 11403], 'valid'],
[[11404, 11404], 'mapped', [11405]],
[[11405, 11405], 'valid'],
[[11406, 11406], 'mapped', [11407]],
[[11407, 11407], 'valid'],
[[11408, 11408], 'mapped', [11409]],
[[11409, 11409], 'valid'],
[[11410, 11410], 'mapped', [11411]],
[[11411, 11411], 'valid'],
[[11412, 11412], 'mapped', [11413]],
[[11413, 11413], 'valid'],
[[11414, 11414], 'mapped', [11415]],
[[11415, 11415], 'valid'],
[[11416, 11416], 'mapped', [11417]],
[[11417, 11417], 'valid'],
[[11418, 11418], 'mapped', [11419]],
[[11419, 11419], 'valid'],
[[11420, 11420], 'mapped', [11421]],
[[11421, 11421], 'valid'],
[[11422, 11422], 'mapped', [11423]],
[[11423, 11423], 'valid'],
[[11424, 11424], 'mapped', [11425]],
[[11425, 11425], 'valid'],
[[11426, 11426], 'mapped', [11427]],
[[11427, 11427], 'valid'],
[[11428, 11428], 'mapped', [11429]],
[[11429, 11429], 'valid'],
[[11430, 11430], 'mapped', [11431]],
[[11431, 11431], 'valid'],
[[11432, 11432], 'mapped', [11433]],
[[11433, 11433], 'valid'],
[[11434, 11434], 'mapped', [11435]],
[[11435, 11435], 'valid'],
[[11436, 11436], 'mapped', [11437]],
[[11437, 11437], 'valid'],
[[11438, 11438], 'mapped', [11439]],
[[11439, 11439], 'valid'],
[[11440, 11440], 'mapped', [11441]],
[[11441, 11441], 'valid'],
[[11442, 11442], 'mapped', [11443]],
[[11443, 11443], 'valid'],
[[11444, 11444], 'mapped', [11445]],
[[11445, 11445], 'valid'],
[[11446, 11446], 'mapped', [11447]],
[[11447, 11447], 'valid'],
[[11448, 11448], 'mapped', [11449]],
[[11449, 11449], 'valid'],
[[11450, 11450], 'mapped', [11451]],
[[11451, 11451], 'valid'],
[[11452, 11452], 'mapped', [11453]],
[[11453, 11453], 'valid'],
[[11454, 11454], 'mapped', [11455]],
[[11455, 11455], 'valid'],
[[11456, 11456], 'mapped', [11457]],
[[11457, 11457], 'valid'],
[[11458, 11458], 'mapped', [11459]],
[[11459, 11459], 'valid'],
[[11460, 11460], 'mapped', [11461]],
[[11461, 11461], 'valid'],
[[11462, 11462], 'mapped', [11463]],
[[11463, 11463], 'valid'],
[[11464, 11464], 'mapped', [11465]],
[[11465, 11465], 'valid'],
[[11466, 11466], 'mapped', [11467]],
[[11467, 11467], 'valid'],
[[11468, 11468], 'mapped', [11469]],
[[11469, 11469], 'valid'],
[[11470, 11470], 'mapped', [11471]],
[[11471, 11471], 'valid'],
[[11472, 11472], 'mapped', [11473]],
[[11473, 11473], 'valid'],
[[11474, 11474], 'mapped', [11475]],
[[11475, 11475], 'valid'],
[[11476, 11476], 'mapped', [11477]],
[[11477, 11477], 'valid'],
[[11478, 11478], 'mapped', [11479]],
[[11479, 11479], 'valid'],
[[11480, 11480], 'mapped', [11481]],
[[11481, 11481], 'valid'],
[[11482, 11482], 'mapped', [11483]],
[[11483, 11483], 'valid'],
[[11484, 11484], 'mapped', [11485]],
[[11485, 11485], 'valid'],
[[11486, 11486], 'mapped', [11487]],
[[11487, 11487], 'valid'],
[[11488, 11488], 'mapped', [11489]],
[[11489, 11489], 'valid'],
[[11490, 11490], 'mapped', [11491]],
[[11491, 11492], 'valid'],
[[11493, 11498], 'valid', [], 'NV8'],
[[11499, 11499], 'mapped', [11500]],
[[11500, 11500], 'valid'],
[[11501, 11501], 'mapped', [11502]],
[[11502, 11505], 'valid'],
[[11506, 11506], 'mapped', [11507]],
[[11507, 11507], 'valid'],
[[11508, 11512], 'disallowed'],
[[11513, 11519], 'valid', [], 'NV8'],
[[11520, 11557], 'valid'],
[[11558, 11558], 'disallowed'],
[[11559, 11559], 'valid'],
[[11560, 11564], 'disallowed'],
[[11565, 11565], 'valid'],
[[11566, 11567], 'disallowed'],
[[11568, 11621], 'valid'],
[[11622, 11623], 'valid'],
[[11624, 11630], 'disallowed'],
[[11631, 11631], 'mapped', [11617]],
[[11632, 11632], 'valid', [], 'NV8'],
[[11633, 11646], 'disallowed'],
[[11647, 11647], 'valid'],
[[11648, 11670], 'valid'],
[[11671, 11679], 'disallowed'],
[[11680, 11686], 'valid'],
[[11687, 11687], 'disallowed'],
[[11688, 11694], 'valid'],
[[11695, 11695], 'disallowed'],
[[11696, 11702], 'valid'],
[[11703, 11703], 'disallowed'],
[[11704, 11710], 'valid'],
[[11711, 11711], 'disallowed'],
[[11712, 11718], 'valid'],
[[11719, 11719], 'disallowed'],
[[11720, 11726], 'valid'],
[[11727, 11727], 'disallowed'],
[[11728, 11734], 'valid'],
[[11735, 11735], 'disallowed'],
[[11736, 11742], 'valid'],
[[11743, 11743], 'disallowed'],
[[11744, 11775], 'valid'],
[[11776, 11799], 'valid', [], 'NV8'],
[[11800, 11803], 'valid', [], 'NV8'],
[[11804, 11805], 'valid', [], 'NV8'],
[[11806, 11822], 'valid', [], 'NV8'],
[[11823, 11823], 'valid'],
[[11824, 11824], 'valid', [], 'NV8'],
[[11825, 11825], 'valid', [], 'NV8'],
[[11826, 11835], 'valid', [], 'NV8'],
[[11836, 11842], 'valid', [], 'NV8'],
[[11843, 11903], 'disallowed'],
[[11904, 11929], 'valid', [], 'NV8'],
[[11930, 11930], 'disallowed'],
[[11931, 11934], 'valid', [], 'NV8'],
[[11935, 11935], 'mapped', [27597]],
[[11936, 12018], 'valid', [], 'NV8'],
[[12019, 12019], 'mapped', [40863]],
[[12020, 12031], 'disallowed'],
[[12032, 12032], 'mapped', [19968]],
[[12033, 12033], 'mapped', [20008]],
[[12034, 12034], 'mapped', [20022]],
[[12035, 12035], 'mapped', [20031]],
[[12036, 12036], 'mapped', [20057]],
[[12037, 12037], 'mapped', [20101]],
[[12038, 12038], 'mapped', [20108]],
[[12039, 12039], 'mapped', [20128]],
[[12040, 12040], 'mapped', [20154]],
[[12041, 12041], 'mapped', [20799]],
[[12042, 12042], 'mapped', [20837]],
[[12043, 12043], 'mapped', [20843]],
[[12044, 12044], 'mapped', [20866]],
[[12045, 12045], 'mapped', [20886]],
[[12046, 12046], 'mapped', [20907]],
[[12047, 12047], 'mapped', [20960]],
[[12048, 12048], 'mapped', [20981]],
[[12049, 12049], 'mapped', [20992]],
[[12050, 12050], 'mapped', [21147]],
[[12051, 12051], 'mapped', [21241]],
[[12052, 12052], 'mapped', [21269]],
[[12053, 12053], 'mapped', [21274]],
[[12054, 12054], 'mapped', [21304]],
[[12055, 12055], 'mapped', [21313]],
[[12056, 12056], 'mapped', [21340]],
[[12057, 12057], 'mapped', [21353]],
[[12058, 12058], 'mapped', [21378]],
[[12059, 12059], 'mapped', [21430]],
[[12060, 12060], 'mapped', [21448]],
[[12061, 12061], 'mapped', [21475]],
[[12062, 12062], 'mapped', [22231]],
[[12063, 12063], 'mapped', [22303]],
[[12064, 12064], 'mapped', [22763]],
[[12065, 12065], 'mapped', [22786]],
[[12066, 12066], 'mapped', [22794]],
[[12067, 12067], 'mapped', [22805]],
[[12068, 12068], 'mapped', [22823]],
[[12069, 12069], 'mapped', [22899]],
[[12070, 12070], 'mapped', [23376]],
[[12071, 12071], 'mapped', [23424]],
[[12072, 12072], 'mapped', [23544]],
[[12073, 12073], 'mapped', [23567]],
[[12074, 12074], 'mapped', [23586]],
[[12075, 12075], 'mapped', [23608]],
[[12076, 12076], 'mapped', [23662]],
[[12077, 12077], 'mapped', [23665]],
[[12078, 12078], 'mapped', [24027]],
[[12079, 12079], 'mapped', [24037]],
[[12080, 12080], 'mapped', [24049]],
[[12081, 12081], 'mapped', [24062]],
[[12082, 12082], 'mapped', [24178]],
[[12083, 12083], 'mapped', [24186]],
[[12084, 12084], 'mapped', [24191]],
[[12085, 12085], 'mapped', [24308]],
[[12086, 12086], 'mapped', [24318]],
[[12087, 12087], 'mapped', [24331]],
[[12088, 12088], 'mapped', [24339]],
[[12089, 12089], 'mapped', [24400]],
[[12090, 12090], 'mapped', [24417]],
[[12091, 12091], 'mapped', [24435]],
[[12092, 12092], 'mapped', [24515]],
[[12093, 12093], 'mapped', [25096]],
[[12094, 12094], 'mapped', [25142]],
[[12095, 12095], 'mapped', [25163]],
[[12096, 12096], 'mapped', [25903]],
[[12097, 12097], 'mapped', [25908]],
[[12098, 12098], 'mapped', [25991]],
[[12099, 12099], 'mapped', [26007]],
[[12100, 12100], 'mapped', [26020]],
[[12101, 12101], 'mapped', [26041]],
[[12102, 12102], 'mapped', [26080]],
[[12103, 12103], 'mapped', [26085]],
[[12104, 12104], 'mapped', [26352]],
[[12105, 12105], 'mapped', [26376]],
[[12106, 12106], 'mapped', [26408]],
[[12107, 12107], 'mapped', [27424]],
[[12108, 12108], 'mapped', [27490]],
[[12109, 12109], 'mapped', [27513]],
[[12110, 12110], 'mapped', [27571]],
[[12111, 12111], 'mapped', [27595]],
[[12112, 12112], 'mapped', [27604]],
[[12113, 12113], 'mapped', [27611]],
[[12114, 12114], 'mapped', [27663]],
[[12115, 12115], 'mapped', [27668]],
[[12116, 12116], 'mapped', [27700]],
[[12117, 12117], 'mapped', [28779]],
[[12118, 12118], 'mapped', [29226]],
[[12119, 12119], 'mapped', [29238]],
[[12120, 12120], 'mapped', [29243]],
[[12121, 12121], 'mapped', [29247]],
[[12122, 12122], 'mapped', [29255]],
[[12123, 12123], 'mapped', [29273]],
[[12124, 12124], 'mapped', [29275]],
[[12125, 12125], 'mapped', [29356]],
[[12126, 12126], 'mapped', [29572]],
[[12127, 12127], 'mapped', [29577]],
[[12128, 12128], 'mapped', [29916]],
[[12129, 12129], 'mapped', [29926]],
[[12130, 12130], 'mapped', [29976]],
[[12131, 12131], 'mapped', [29983]],
[[12132, 12132], 'mapped', [29992]],
[[12133, 12133], 'mapped', [30000]],
[[12134, 12134], 'mapped', [30091]],
[[12135, 12135], 'mapped', [30098]],
[[12136, 12136], 'mapped', [30326]],
[[12137, 12137], 'mapped', [30333]],
[[12138, 12138], 'mapped', [30382]],
[[12139, 12139], 'mapped', [30399]],
[[12140, 12140], 'mapped', [30446]],
[[12141, 12141], 'mapped', [30683]],
[[12142, 12142], 'mapped', [30690]],
[[12143, 12143], 'mapped', [30707]],
[[12144, 12144], 'mapped', [31034]],
[[12145, 12145], 'mapped', [31160]],
[[12146, 12146], 'mapped', [31166]],
[[12147, 12147], 'mapped', [31348]],
[[12148, 12148], 'mapped', [31435]],
[[12149, 12149], 'mapped', [31481]],
[[12150, 12150], 'mapped', [31859]],
[[12151, 12151], 'mapped', [31992]],
[[12152, 12152], 'mapped', [32566]],
[[12153, 12153], 'mapped', [32593]],
[[12154, 12154], 'mapped', [32650]],
[[12155, 12155], 'mapped', [32701]],
[[12156, 12156], 'mapped', [32769]],
[[12157, 12157], 'mapped', [32780]],
[[12158, 12158], 'mapped', [32786]],
[[12159, 12159], 'mapped', [32819]],
[[12160, 12160], 'mapped', [32895]],
[[12161, 12161], 'mapped', [32905]],
[[12162, 12162], 'mapped', [33251]],
[[12163, 12163], 'mapped', [33258]],
[[12164, 12164], 'mapped', [33267]],
[[12165, 12165], 'mapped', [33276]],
[[12166, 12166], 'mapped', [33292]],
[[12167, 12167], 'mapped', [33307]],
[[12168, 12168], 'mapped', [33311]],
[[12169, 12169], 'mapped', [33390]],
[[12170, 12170], 'mapped', [33394]],
[[12171, 12171], 'mapped', [33400]],
[[12172, 12172], 'mapped', [34381]],
[[12173, 12173], 'mapped', [34411]],
[[12174, 12174], 'mapped', [34880]],
[[12175, 12175], 'mapped', [34892]],
[[12176, 12176], 'mapped', [34915]],
[[12177, 12177], 'mapped', [35198]],
[[12178, 12178], 'mapped', [35211]],
[[12179, 12179], 'mapped', [35282]],
[[12180, 12180], 'mapped', [35328]],
[[12181, 12181], 'mapped', [35895]],
[[12182, 12182], 'mapped', [35910]],
[[12183, 12183], 'mapped', [35925]],
[[12184, 12184], 'mapped', [35960]],
[[12185, 12185], 'mapped', [35997]],
[[12186, 12186], 'mapped', [36196]],
[[12187, 12187], 'mapped', [36208]],
[[12188, 12188], 'mapped', [36275]],
[[12189, 12189], 'mapped', [36523]],
[[12190, 12190], 'mapped', [36554]],
[[12191, 12191], 'mapped', [36763]],
[[12192, 12192], 'mapped', [36784]],
[[12193, 12193], 'mapped', [36789]],
[[12194, 12194], 'mapped', [37009]],
[[12195, 12195], 'mapped', [37193]],
[[12196, 12196], 'mapped', [37318]],
[[12197, 12197], 'mapped', [37324]],
[[12198, 12198], 'mapped', [37329]],
[[12199, 12199], 'mapped', [38263]],
[[12200, 12200], 'mapped', [38272]],
[[12201, 12201], 'mapped', [38428]],
[[12202, 12202], 'mapped', [38582]],
[[12203, 12203], 'mapped', [38585]],
[[12204, 12204], 'mapped', [38632]],
[[12205, 12205], 'mapped', [38737]],
[[12206, 12206], 'mapped', [38750]],
[[12207, 12207], 'mapped', [38754]],
[[12208, 12208], 'mapped', [38761]],
[[12209, 12209], 'mapped', [38859]],
[[12210, 12210], 'mapped', [38893]],
[[12211, 12211], 'mapped', [38899]],
[[12212, 12212], 'mapped', [38913]],
[[12213, 12213], 'mapped', [39080]],
[[12214, 12214], 'mapped', [39131]],
[[12215, 12215], 'mapped', [39135]],
[[12216, 12216], 'mapped', [39318]],
[[12217, 12217], 'mapped', [39321]],
[[12218, 12218], 'mapped', [39340]],
[[12219, 12219], 'mapped', [39592]],
[[12220, 12220], 'mapped', [39640]],
[[12221, 12221], 'mapped', [39647]],
[[12222, 12222], 'mapped', [39717]],
[[12223, 12223], 'mapped', [39727]],
[[12224, 12224], 'mapped', [39730]],
[[12225, 12225], 'mapped', [39740]],
[[12226, 12226], 'mapped', [39770]],
[[12227, 12227], 'mapped', [40165]],
[[12228, 12228], 'mapped', [40565]],
[[12229, 12229], 'mapped', [40575]],
[[12230, 12230], 'mapped', [40613]],
[[12231, 12231], 'mapped', [40635]],
[[12232, 12232], 'mapped', [40643]],
[[12233, 12233], 'mapped', [40653]],
[[12234, 12234], 'mapped', [40657]],
[[12235, 12235], 'mapped', [40697]],
[[12236, 12236], 'mapped', [40701]],
[[12237, 12237], 'mapped', [40718]],
[[12238, 12238], 'mapped', [40723]],
[[12239, 12239], 'mapped', [40736]],
[[12240, 12240], 'mapped', [40763]],
[[12241, 12241], 'mapped', [40778]],
[[12242, 12242], 'mapped', [40786]],
[[12243, 12243], 'mapped', [40845]],
[[12244, 12244], 'mapped', [40860]],
[[12245, 12245], 'mapped', [40864]],
[[12246, 12271], 'disallowed'],
[[12272, 12283], 'disallowed'],
[[12284, 12287], 'disallowed'],
[[12288, 12288], 'disallowed_STD3_mapped', [32]],
[[12289, 12289], 'valid', [], 'NV8'],
[[12290, 12290], 'mapped', [46]],
[[12291, 12292], 'valid', [], 'NV8'],
[[12293, 12295], 'valid'],
[[12296, 12329], 'valid', [], 'NV8'],
[[12330, 12333], 'valid'],
[[12334, 12341], 'valid', [], 'NV8'],
[[12342, 12342], 'mapped', [12306]],
[[12343, 12343], 'valid', [], 'NV8'],
[[12344, 12344], 'mapped', [21313]],
[[12345, 12345], 'mapped', [21316]],
[[12346, 12346], 'mapped', [21317]],
[[12347, 12347], 'valid', [], 'NV8'],
[[12348, 12348], 'valid'],
[[12349, 12349], 'valid', [], 'NV8'],
[[12350, 12350], 'valid', [], 'NV8'],
[[12351, 12351], 'valid', [], 'NV8'],
[[12352, 12352], 'disallowed'],
[[12353, 12436], 'valid'],
[[12437, 12438], 'valid'],
[[12439, 12440], 'disallowed'],
[[12441, 12442], 'valid'],
[[12443, 12443], 'disallowed_STD3_mapped', [32, 12441]],
[[12444, 12444], 'disallowed_STD3_mapped', [32, 12442]],
[[12445, 12446], 'valid'],
[[12447, 12447], 'mapped', [12424, 12426]],
[[12448, 12448], 'valid', [], 'NV8'],
[[12449, 12542], 'valid'],
[[12543, 12543], 'mapped', [12467, 12488]],
[[12544, 12548], 'disallowed'],
[[12549, 12588], 'valid'],
[[12589, 12589], 'valid'],
[[12590, 12592], 'disallowed'],
[[12593, 12593], 'mapped', [4352]],
[[12594, 12594], 'mapped', [4353]],
[[12595, 12595], 'mapped', [4522]],
[[12596, 12596], 'mapped', [4354]],
[[12597, 12597], 'mapped', [4524]],
[[12598, 12598], 'mapped', [4525]],
[[12599, 12599], 'mapped', [4355]],
[[12600, 12600], 'mapped', [4356]],
[[12601, 12601], 'mapped', [4357]],
[[12602, 12602], 'mapped', [4528]],
[[12603, 12603], 'mapped', [4529]],
[[12604, 12604], 'mapped', [4530]],
[[12605, 12605], 'mapped', [4531]],
[[12606, 12606], 'mapped', [4532]],
[[12607, 12607], 'mapped', [4533]],
[[12608, 12608], 'mapped', [4378]],
[[12609, 12609], 'mapped', [4358]],
[[12610, 12610], 'mapped', [4359]],
[[12611, 12611], 'mapped', [4360]],
[[12612, 12612], 'mapped', [4385]],
[[12613, 12613], 'mapped', [4361]],
[[12614, 12614], 'mapped', [4362]],
[[12615, 12615], 'mapped', [4363]],
[[12616, 12616], 'mapped', [4364]],
[[12617, 12617], 'mapped', [4365]],
[[12618, 12618], 'mapped', [4366]],
[[12619, 12619], 'mapped', [4367]],
[[12620, 12620], 'mapped', [4368]],
[[12621, 12621], 'mapped', [4369]],
[[12622, 12622], 'mapped', [4370]],
[[12623, 12623], 'mapped', [4449]],
[[12624, 12624], 'mapped', [4450]],
[[12625, 12625], 'mapped', [4451]],
[[12626, 12626], 'mapped', [4452]],
[[12627, 12627], 'mapped', [4453]],
[[12628, 12628], 'mapped', [4454]],
[[12629, 12629], 'mapped', [4455]],
[[12630, 12630], 'mapped', [4456]],
[[12631, 12631], 'mapped', [4457]],
[[12632, 12632], 'mapped', [4458]],
[[12633, 12633], 'mapped', [4459]],
[[12634, 12634], 'mapped', [4460]],
[[12635, 12635], 'mapped', [4461]],
[[12636, 12636], 'mapped', [4462]],
[[12637, 12637], 'mapped', [4463]],
[[12638, 12638], 'mapped', [4464]],
[[12639, 12639], 'mapped', [4465]],
[[12640, 12640], 'mapped', [4466]],
[[12641, 12641], 'mapped', [4467]],
[[12642, 12642], 'mapped', [4468]],
[[12643, 12643], 'mapped', [4469]],
[[12644, 12644], 'disallowed'],
[[12645, 12645], 'mapped', [4372]],
[[12646, 12646], 'mapped', [4373]],
[[12647, 12647], 'mapped', [4551]],
[[12648, 12648], 'mapped', [4552]],
[[12649, 12649], 'mapped', [4556]],
[[12650, 12650], 'mapped', [4558]],
[[12651, 12651], 'mapped', [4563]],
[[12652, 12652], 'mapped', [4567]],
[[12653, 12653], 'mapped', [4569]],
[[12654, 12654], 'mapped', [4380]],
[[12655, 12655], 'mapped', [4573]],
[[12656, 12656], 'mapped', [4575]],
[[12657, 12657], 'mapped', [4381]],
[[12658, 12658], 'mapped', [4382]],
[[12659, 12659], 'mapped', [4384]],
[[12660, 12660], 'mapped', [4386]],
[[12661, 12661], 'mapped', [4387]],
[[12662, 12662], 'mapped', [4391]],
[[12663, 12663], 'mapped', [4393]],
[[12664, 12664], 'mapped', [4395]],
[[12665, 12665], 'mapped', [4396]],
[[12666, 12666], 'mapped', [4397]],
[[12667, 12667], 'mapped', [4398]],
[[12668, 12668], 'mapped', [4399]],
[[12669, 12669], 'mapped', [4402]],
[[12670, 12670], 'mapped', [4406]],
[[12671, 12671], 'mapped', [4416]],
[[12672, 12672], 'mapped', [4423]],
[[12673, 12673], 'mapped', [4428]],
[[12674, 12674], 'mapped', [4593]],
[[12675, 12675], 'mapped', [4594]],
[[12676, 12676], 'mapped', [4439]],
[[12677, 12677], 'mapped', [4440]],
[[12678, 12678], 'mapped', [4441]],
[[12679, 12679], 'mapped', [4484]],
[[12680, 12680], 'mapped', [4485]],
[[12681, 12681], 'mapped', [4488]],
[[12682, 12682], 'mapped', [4497]],
[[12683, 12683], 'mapped', [4498]],
[[12684, 12684], 'mapped', [4500]],
[[12685, 12685], 'mapped', [4510]],
[[12686, 12686], 'mapped', [4513]],
[[12687, 12687], 'disallowed'],
[[12688, 12689], 'valid', [], 'NV8'],
[[12690, 12690], 'mapped', [19968]],
[[12691, 12691], 'mapped', [20108]],
[[12692, 12692], 'mapped', [19977]],
[[12693, 12693], 'mapped', [22235]],
[[12694, 12694], 'mapped', [19978]],
[[12695, 12695], 'mapped', [20013]],
[[12696, 12696], 'mapped', [19979]],
[[12697, 12697], 'mapped', [30002]],
[[12698, 12698], 'mapped', [20057]],
[[12699, 12699], 'mapped', [19993]],
[[12700, 12700], 'mapped', [19969]],
[[12701, 12701], 'mapped', [22825]],
[[12702, 12702], 'mapped', [22320]],
[[12703, 12703], 'mapped', [20154]],
[[12704, 12727], 'valid'],
[[12728, 12730], 'valid'],
[[12731, 12735], 'disallowed'],
[[12736, 12751], 'valid', [], 'NV8'],
[[12752, 12771], 'valid', [], 'NV8'],
[[12772, 12783], 'disallowed'],
[[12784, 12799], 'valid'],
[[12800, 12800], 'disallowed_STD3_mapped', [40, 4352, 41]],
[[12801, 12801], 'disallowed_STD3_mapped', [40, 4354, 41]],
[[12802, 12802], 'disallowed_STD3_mapped', [40, 4355, 41]],
[[12803, 12803], 'disallowed_STD3_mapped', [40, 4357, 41]],
[[12804, 12804], 'disallowed_STD3_mapped', [40, 4358, 41]],
[[12805, 12805], 'disallowed_STD3_mapped', [40, 4359, 41]],
[[12806, 12806], 'disallowed_STD3_mapped', [40, 4361, 41]],
[[12807, 12807], 'disallowed_STD3_mapped', [40, 4363, 41]],
[[12808, 12808], 'disallowed_STD3_mapped', [40, 4364, 41]],
[[12809, 12809], 'disallowed_STD3_mapped', [40, 4366, 41]],
[[12810, 12810], 'disallowed_STD3_mapped', [40, 4367, 41]],
[[12811, 12811], 'disallowed_STD3_mapped', [40, 4368, 41]],
[[12812, 12812], 'disallowed_STD3_mapped', [40, 4369, 41]],
[[12813, 12813], 'disallowed_STD3_mapped', [40, 4370, 41]],
[[12814, 12814], 'disallowed_STD3_mapped', [40, 44032, 41]],
[[12815, 12815], 'disallowed_STD3_mapped', [40, 45208, 41]],
[[12816, 12816], 'disallowed_STD3_mapped', [40, 45796, 41]],
[[12817, 12817], 'disallowed_STD3_mapped', [40, 46972, 41]],
[[12818, 12818], 'disallowed_STD3_mapped', [40, 47560, 41]],
[[12819, 12819], 'disallowed_STD3_mapped', [40, 48148, 41]],
[[12820, 12820], 'disallowed_STD3_mapped', [40, 49324, 41]],
[[12821, 12821], 'disallowed_STD3_mapped', [40, 50500, 41]],
[[12822, 12822], 'disallowed_STD3_mapped', [40, 51088, 41]],
[[12823, 12823], 'disallowed_STD3_mapped', [40, 52264, 41]],
[[12824, 12824], 'disallowed_STD3_mapped', [40, 52852, 41]],
[[12825, 12825], 'disallowed_STD3_mapped', [40, 53440, 41]],
[[12826, 12826], 'disallowed_STD3_mapped', [40, 54028, 41]],
[[12827, 12827], 'disallowed_STD3_mapped', [40, 54616, 41]],
[[12828, 12828], 'disallowed_STD3_mapped', [40, 51452, 41]],
[[12829, 12829], 'disallowed_STD3_mapped', [40, 50724, 51204, 41]],
[[12830, 12830], 'disallowed_STD3_mapped', [40, 50724, 54980, 41]],
[[12831, 12831], 'disallowed'],
[[12832, 12832], 'disallowed_STD3_mapped', [40, 19968, 41]],
[[12833, 12833], 'disallowed_STD3_mapped', [40, 20108, 41]],
[[12834, 12834], 'disallowed_STD3_mapped', [40, 19977, 41]],
[[12835, 12835], 'disallowed_STD3_mapped', [40, 22235, 41]],
[[12836, 12836], 'disallowed_STD3_mapped', [40, 20116, 41]],
[[12837, 12837], 'disallowed_STD3_mapped', [40, 20845, 41]],
[[12838, 12838], 'disallowed_STD3_mapped', [40, 19971, 41]],
[[12839, 12839], 'disallowed_STD3_mapped', [40, 20843, 41]],
[[12840, 12840], 'disallowed_STD3_mapped', [40, 20061, 41]],
[[12841, 12841], 'disallowed_STD3_mapped', [40, 21313, 41]],
[[12842, 12842], 'disallowed_STD3_mapped', [40, 26376, 41]],
[[12843, 12843], 'disallowed_STD3_mapped', [40, 28779, 41]],
[[12844, 12844], 'disallowed_STD3_mapped', [40, 27700, 41]],
[[12845, 12845], 'disallowed_STD3_mapped', [40, 26408, 41]],
[[12846, 12846], 'disallowed_STD3_mapped', [40, 37329, 41]],
[[12847, 12847], 'disallowed_STD3_mapped', [40, 22303, 41]],
[[12848, 12848], 'disallowed_STD3_mapped', [40, 26085, 41]],
[[12849, 12849], 'disallowed_STD3_mapped', [40, 26666, 41]],
[[12850, 12850], 'disallowed_STD3_mapped', [40, 26377, 41]],
[[12851, 12851], 'disallowed_STD3_mapped', [40, 31038, 41]],
[[12852, 12852], 'disallowed_STD3_mapped', [40, 21517, 41]],
[[12853, 12853], 'disallowed_STD3_mapped', [40, 29305, 41]],
[[12854, 12854], 'disallowed_STD3_mapped', [40, 36001, 41]],
[[12855, 12855], 'disallowed_STD3_mapped', [40, 31069, 41]],
[[12856, 12856], 'disallowed_STD3_mapped', [40, 21172, 41]],
[[12857, 12857], 'disallowed_STD3_mapped', [40, 20195, 41]],
[[12858, 12858], 'disallowed_STD3_mapped', [40, 21628, 41]],
[[12859, 12859], 'disallowed_STD3_mapped', [40, 23398, 41]],
[[12860, 12860], 'disallowed_STD3_mapped', [40, 30435, 41]],
[[12861, 12861], 'disallowed_STD3_mapped', [40, 20225, 41]],
[[12862, 12862], 'disallowed_STD3_mapped', [40, 36039, 41]],
[[12863, 12863], 'disallowed_STD3_mapped', [40, 21332, 41]],
[[12864, 12864], 'disallowed_STD3_mapped', [40, 31085, 41]],
[[12865, 12865], 'disallowed_STD3_mapped', [40, 20241, 41]],
[[12866, 12866], 'disallowed_STD3_mapped', [40, 33258, 41]],
[[12867, 12867], 'disallowed_STD3_mapped', [40, 33267, 41]],
[[12868, 12868], 'mapped', [21839]],
[[12869, 12869], 'mapped', [24188]],
[[12870, 12870], 'mapped', [25991]],
[[12871, 12871], 'mapped', [31631]],
[[12872, 12879], 'valid', [], 'NV8'],
[[12880, 12880], 'mapped', [112, 116, 101]],
[[12881, 12881], 'mapped', [50, 49]],
[[12882, 12882], 'mapped', [50, 50]],
[[12883, 12883], 'mapped', [50, 51]],
[[12884, 12884], 'mapped', [50, 52]],
[[12885, 12885], 'mapped', [50, 53]],
[[12886, 12886], 'mapped', [50, 54]],
[[12887, 12887], 'mapped', [50, 55]],
[[12888, 12888], 'mapped', [50, 56]],
[[12889, 12889], 'mapped', [50, 57]],
[[12890, 12890], 'mapped', [51, 48]],
[[12891, 12891], 'mapped', [51, 49]],
[[12892, 12892], 'mapped', [51, 50]],
[[12893, 12893], 'mapped', [51, 51]],
[[12894, 12894], 'mapped', [51, 52]],
[[12895, 12895], 'mapped', [51, 53]],
[[12896, 12896], 'mapped', [4352]],
[[12897, 12897], 'mapped', [4354]],
[[12898, 12898], 'mapped', [4355]],
[[12899, 12899], 'mapped', [4357]],
[[12900, 12900], 'mapped', [4358]],
[[12901, 12901], 'mapped', [4359]],
[[12902, 12902], 'mapped', [4361]],
[[12903, 12903], 'mapped', [4363]],
[[12904, 12904], 'mapped', [4364]],
[[12905, 12905], 'mapped', [4366]],
[[12906, 12906], 'mapped', [4367]],
[[12907, 12907], 'mapped', [4368]],
[[12908, 12908], 'mapped', [4369]],
[[12909, 12909], 'mapped', [4370]],
[[12910, 12910], 'mapped', [44032]],
[[12911, 12911], 'mapped', [45208]],
[[12912, 12912], 'mapped', [45796]],
[[12913, 12913], 'mapped', [46972]],
[[12914, 12914], 'mapped', [47560]],
[[12915, 12915], 'mapped', [48148]],
[[12916, 12916], 'mapped', [49324]],
[[12917, 12917], 'mapped', [50500]],
[[12918, 12918], 'mapped', [51088]],
[[12919, 12919], 'mapped', [52264]],
[[12920, 12920], 'mapped', [52852]],
[[12921, 12921], 'mapped', [53440]],
[[12922, 12922], 'mapped', [54028]],
[[12923, 12923], 'mapped', [54616]],
[[12924, 12924], 'mapped', [52280, 44256]],
[[12925, 12925], 'mapped', [51452, 51032]],
[[12926, 12926], 'mapped', [50864]],
[[12927, 12927], 'valid', [], 'NV8'],
[[12928, 12928], 'mapped', [19968]],
[[12929, 12929], 'mapped', [20108]],
[[12930, 12930], 'mapped', [19977]],
[[12931, 12931], 'mapped', [22235]],
[[12932, 12932], 'mapped', [20116]],
[[12933, 12933], 'mapped', [20845]],
[[12934, 12934], 'mapped', [19971]],
[[12935, 12935], 'mapped', [20843]],
[[12936, 12936], 'mapped', [20061]],
[[12937, 12937], 'mapped', [21313]],
[[12938, 12938], 'mapped', [26376]],
[[12939, 12939], 'mapped', [28779]],
[[12940, 12940], 'mapped', [27700]],
[[12941, 12941], 'mapped', [26408]],
[[12942, 12942], 'mapped', [37329]],
[[12943, 12943], 'mapped', [22303]],
[[12944, 12944], 'mapped', [26085]],
[[12945, 12945], 'mapped', [26666]],
[[12946, 12946], 'mapped', [26377]],
[[12947, 12947], 'mapped', [31038]],
[[12948, 12948], 'mapped', [21517]],
[[12949, 12949], 'mapped', [29305]],
[[12950, 12950], 'mapped', [36001]],
[[12951, 12951], 'mapped', [31069]],
[[12952, 12952], 'mapped', [21172]],
[[12953, 12953], 'mapped', [31192]],
[[12954, 12954], 'mapped', [30007]],
[[12955, 12955], 'mapped', [22899]],
[[12956, 12956], 'mapped', [36969]],
[[12957, 12957], 'mapped', [20778]],
[[12958, 12958], 'mapped', [21360]],
[[12959, 12959], 'mapped', [27880]],
[[12960, 12960], 'mapped', [38917]],
[[12961, 12961], 'mapped', [20241]],
[[12962, 12962], 'mapped', [20889]],
[[12963, 12963], 'mapped', [27491]],
[[12964, 12964], 'mapped', [19978]],
[[12965, 12965], 'mapped', [20013]],
[[12966, 12966], 'mapped', [19979]],
[[12967, 12967], 'mapped', [24038]],
[[12968, 12968], 'mapped', [21491]],
[[12969, 12969], 'mapped', [21307]],
[[12970, 12970], 'mapped', [23447]],
[[12971, 12971], 'mapped', [23398]],
[[12972, 12972], 'mapped', [30435]],
[[12973, 12973], 'mapped', [20225]],
[[12974, 12974], 'mapped', [36039]],
[[12975, 12975], 'mapped', [21332]],
[[12976, 12976], 'mapped', [22812]],
[[12977, 12977], 'mapped', [51, 54]],
[[12978, 12978], 'mapped', [51, 55]],
[[12979, 12979], 'mapped', [51, 56]],
[[12980, 12980], 'mapped', [51, 57]],
[[12981, 12981], 'mapped', [52, 48]],
[[12982, 12982], 'mapped', [52, 49]],
[[12983, 12983], 'mapped', [52, 50]],
[[12984, 12984], 'mapped', [52, 51]],
[[12985, 12985], 'mapped', [52, 52]],
[[12986, 12986], 'mapped', [52, 53]],
[[12987, 12987], 'mapped', [52, 54]],
[[12988, 12988], 'mapped', [52, 55]],
[[12989, 12989], 'mapped', [52, 56]],
[[12990, 12990], 'mapped', [52, 57]],
[[12991, 12991], 'mapped', [53, 48]],
[[12992, 12992], 'mapped', [49, 26376]],
[[12993, 12993], 'mapped', [50, 26376]],
[[12994, 12994], 'mapped', [51, 26376]],
[[12995, 12995], 'mapped', [52, 26376]],
[[12996, 12996], 'mapped', [53, 26376]],
[[12997, 12997], 'mapped', [54, 26376]],
[[12998, 12998], 'mapped', [55, 26376]],
[[12999, 12999], 'mapped', [56, 26376]],
[[13000, 13000], 'mapped', [57, 26376]],
[[13001, 13001], 'mapped', [49, 48, 26376]],
[[13002, 13002], 'mapped', [49, 49, 26376]],
[[13003, 13003], 'mapped', [49, 50, 26376]],
[[13004, 13004], 'mapped', [104, 103]],
[[13005, 13005], 'mapped', [101, 114, 103]],
[[13006, 13006], 'mapped', [101, 118]],
[[13007, 13007], 'mapped', [108, 116, 100]],
[[13008, 13008], 'mapped', [12450]],
[[13009, 13009], 'mapped', [12452]],
[[13010, 13010], 'mapped', [12454]],
[[13011, 13011], 'mapped', [12456]],
[[13012, 13012], 'mapped', [12458]],
[[13013, 13013], 'mapped', [12459]],
[[13014, 13014], 'mapped', [12461]],
[[13015, 13015], 'mapped', [12463]],
[[13016, 13016], 'mapped', [12465]],
[[13017, 13017], 'mapped', [12467]],
[[13018, 13018], 'mapped', [12469]],
[[13019, 13019], 'mapped', [12471]],
[[13020, 13020], 'mapped', [12473]],
[[13021, 13021], 'mapped', [12475]],
[[13022, 13022], 'mapped', [12477]],
[[13023, 13023], 'mapped', [12479]],
[[13024, 13024], 'mapped', [12481]],
[[13025, 13025], 'mapped', [12484]],
[[13026, 13026], 'mapped', [12486]],
[[13027, 13027], 'mapped', [12488]],
[[13028, 13028], 'mapped', [12490]],
[[13029, 13029], 'mapped', [12491]],
[[13030, 13030], 'mapped', [12492]],
[[13031, 13031], 'mapped', [12493]],
[[13032, 13032], 'mapped', [12494]],
[[13033, 13033], 'mapped', [12495]],
[[13034, 13034], 'mapped', [12498]],
[[13035, 13035], 'mapped', [12501]],
[[13036, 13036], 'mapped', [12504]],
[[13037, 13037], 'mapped', [12507]],
[[13038, 13038], 'mapped', [12510]],
[[13039, 13039], 'mapped', [12511]],
[[13040, 13040], 'mapped', [12512]],
[[13041, 13041], 'mapped', [12513]],
[[13042, 13042], 'mapped', [12514]],
[[13043, 13043], 'mapped', [12516]],
[[13044, 13044], 'mapped', [12518]],
[[13045, 13045], 'mapped', [12520]],
[[13046, 13046], 'mapped', [12521]],
[[13047, 13047], 'mapped', [12522]],
[[13048, 13048], 'mapped', [12523]],
[[13049, 13049], 'mapped', [12524]],
[[13050, 13050], 'mapped', [12525]],
[[13051, 13051], 'mapped', [12527]],
[[13052, 13052], 'mapped', [12528]],
[[13053, 13053], 'mapped', [12529]],
[[13054, 13054], 'mapped', [12530]],
[[13055, 13055], 'disallowed'],
[[13056, 13056], 'mapped', [12450, 12497, 12540, 12488]],
[[13057, 13057], 'map
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment