import { c as _c } from "react/compiler-runtime"; import React, { Suspense, use, useState } from 'react'; import { Box, Text } from '../../ink.js'; import { useKeybinding } from '../../keybindings/useKeybinding.js'; import { logEvent } from '../../services/analytics/index.js'; import type { Message } from '../../types/message.js'; import { generatePermissionExplanation, isPermissionExplainerEnabled, type PermissionExplanation as PermissionExplanationType, type RiskLevel } from '../../utils/permissions/permissionExplainer.js'; import { ShimmerChar } from '../Spinner/ShimmerChar.js'; import { useShimmerAnimation } from '../Spinner/useShimmerAnimation.js'; const LOADING_MESSAGE = 'Loading explanation…'; function ShimmerLoadingText() { const $ = _c(7); const [ref, glimmerIndex] = useShimmerAnimation("responding", LOADING_MESSAGE, false); let t0; if ($[0] !== glimmerIndex) { t0 = LOADING_MESSAGE.split("").map((char, index) => ); $[0] = glimmerIndex; $[1] = t0; } else { t0 = $[1]; } let t1; if ($[2] !== t0) { t1 = {t0}; $[2] = t0; $[3] = t1; } else { t1 = $[3]; } let t2; if ($[4] !== ref || $[5] !== t1) { t2 = {t1}; $[4] = ref; $[5] = t1; $[6] = t2; } else { t2 = $[6]; } return t2; } function getRiskColor(riskLevel: RiskLevel): 'success' | 'warning' | 'error' { switch (riskLevel) { case 'LOW': return 'success'; case 'MEDIUM': return 'warning'; case 'HIGH': return 'error'; } } function getRiskLabel(riskLevel: RiskLevel): string { switch (riskLevel) { case 'LOW': return 'Low risk'; case 'MEDIUM': return 'Med risk'; case 'HIGH': return 'High risk'; } } type PermissionExplanationProps = { toolName: string; toolInput: unknown; toolDescription?: string; messages?: Message[]; }; type ExplainerState = { visible: boolean; enabled: boolean; promise: Promise | null; }; /** * Creates an explanation promise that never rejects. * Errors are caught and returned as null. */ function createExplanationPromise(props: PermissionExplanationProps): Promise { return generatePermissionExplanation({ toolName: props.toolName, toolInput: props.toolInput, toolDescription: props.toolDescription, messages: props.messages, signal: new AbortController().signal // Won't abort - request is fast enough }).catch(() => null); } /** * Hook that manages the permission explainer state. * Creates the fetch promise lazily (only when user hits Ctrl+E) * to avoid consuming tokens for explanations users never view. */ export function usePermissionExplainerUI(props) { const $ = _c(9); let t0; if ($[0] === Symbol.for("react.memo_cache_sentinel")) { t0 = isPermissionExplainerEnabled(); $[0] = t0; } else { t0 = $[0]; } const enabled = t0; const [visible, setVisible] = useState(false); const [promise, setPromise] = useState(null); let t1; if ($[1] !== promise || $[2] !== props || $[3] !== visible) { t1 = () => { if (!visible) { logEvent("tengu_permission_explainer_shortcut_used", {}); if (!promise) { setPromise(createExplanationPromise(props)); } } setVisible(_temp); }; $[1] = promise; $[2] = props; $[3] = visible; $[4] = t1; } else { t1 = $[4]; } let t2; if ($[5] === Symbol.for("react.memo_cache_sentinel")) { t2 = { context: "Confirmation", isActive: enabled }; $[5] = t2; } else { t2 = $[5]; } useKeybinding("confirm:toggleExplanation", t1, t2); let t3; if ($[6] !== promise || $[7] !== visible) { t3 = { visible, enabled, promise }; $[6] = promise; $[7] = visible; $[8] = t3; } else { t3 = $[8]; } return t3; } /** * Inner component that uses React 19's use() to read the promise. * Suspends while loading, returns null on error. */ function _temp(v) { return !v; } function ExplanationResult(t0) { const $ = _c(21); const { promise } = t0; const explanation = use(promise); if (!explanation) { let t1; if ($[0] === Symbol.for("react.memo_cache_sentinel")) { t1 = Explanation unavailable; $[0] = t1; } else { t1 = $[0]; } return t1; } let t1; if ($[1] !== explanation.explanation) { t1 = {explanation.explanation}; $[1] = explanation.explanation; $[2] = t1; } else { t1 = $[2]; } let t2; if ($[3] !== explanation.reasoning) { t2 = {explanation.reasoning}; $[3] = explanation.reasoning; $[4] = t2; } else { t2 = $[4]; } let t3; if ($[5] !== explanation.riskLevel) { t3 = getRiskColor(explanation.riskLevel); $[5] = explanation.riskLevel; $[6] = t3; } else { t3 = $[6]; } let t4; if ($[7] !== explanation.riskLevel) { t4 = getRiskLabel(explanation.riskLevel); $[7] = explanation.riskLevel; $[8] = t4; } else { t4 = $[8]; } let t5; if ($[9] !== t3 || $[10] !== t4) { t5 = {t4}:; $[9] = t3; $[10] = t4; $[11] = t5; } else { t5 = $[11]; } let t6; if ($[12] !== explanation.risk) { t6 = {explanation.risk}; $[12] = explanation.risk; $[13] = t6; } else { t6 = $[13]; } let t7; if ($[14] !== t5 || $[15] !== t6) { t7 = {t5}{t6}; $[14] = t5; $[15] = t6; $[16] = t7; } else { t7 = $[16]; } let t8; if ($[17] !== t1 || $[18] !== t2 || $[19] !== t7) { t8 = {t1}{t2}{t7}; $[17] = t1; $[18] = t2; $[19] = t7; $[20] = t8; } else { t8 = $[20]; } return t8; } /** * Content component - shows loading (via Suspense) or explanation when visible */ export function PermissionExplainerContent(t0) { const $ = _c(3); const { visible, promise } = t0; if (!visible || !promise) { return null; } let t1; if ($[0] === Symbol.for("react.memo_cache_sentinel")) { t1 = ; $[0] = t1; } else { t1 = $[0]; } let t2; if ($[1] !== promise) { t2 = ; $[1] = promise; $[2] = t2; } else { t2 = $[2]; } return t2; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIlN1c3BlbnNlIiwidXNlIiwidXNlU3RhdGUiLCJCb3giLCJUZXh0IiwidXNlS2V5YmluZGluZyIsImxvZ0V2ZW50IiwiTWVzc2FnZSIsImdlbmVyYXRlUGVybWlzc2lvbkV4cGxhbmF0aW9uIiwiaXNQZXJtaXNzaW9uRXhwbGFpbmVyRW5hYmxlZCIsIlBlcm1pc3Npb25FeHBsYW5hdGlvbiIsIlBlcm1pc3Npb25FeHBsYW5hdGlvblR5cGUiLCJSaXNrTGV2ZWwiLCJTaGltbWVyQ2hhciIsInVzZVNoaW1tZXJBbmltYXRpb24iLCJMT0FESU5HX01FU1NBR0UiLCJTaGltbWVyTG9hZGluZ1RleHQiLCIkIiwiX2MiLCJyZWYiLCJnbGltbWVySW5kZXgiLCJ0MCIsInNwbGl0IiwibWFwIiwiY2hhciIsImluZGV4IiwidDEiLCJ0MiIsImdldFJpc2tDb2xvciIsInJpc2tMZXZlbCIsImdldFJpc2tMYWJlbCIsIlBlcm1pc3Npb25FeHBsYW5hdGlvblByb3BzIiwidG9vbE5hbWUiLCJ0b29sSW5wdXQiLCJ0b29sRGVzY3JpcHRpb24iLCJtZXNzYWdlcyIsIkV4cGxhaW5lclN0YXRlIiwidmlzaWJsZSIsImVuYWJsZWQiLCJwcm9taXNlIiwiUHJvbWlzZSIsImNyZWF0ZUV4cGxhbmF0aW9uUHJvbWlzZSIsInByb3BzIiwic2lnbmFsIiwiQWJvcnRDb250cm9sbGVyIiwiY2F0Y2giLCJ1c2VQZXJtaXNzaW9uRXhwbGFpbmVyVUkiLCJTeW1ib2wiLCJmb3IiLCJzZXRWaXNpYmxlIiwic2V0UHJvbWlzZSIsIl90ZW1wIiwiY29udGV4dCIsImlzQWN0aXZlIiwidDMiLCJ2IiwiRXhwbGFuYXRpb25SZXN1bHQiLCJleHBsYW5hdGlvbiIsInJlYXNvbmluZyIsInQ0IiwidDUiLCJ0NiIsInJpc2siLCJ0NyIsInQ4IiwiUGVybWlzc2lvbkV4cGxhaW5lckNvbnRlbnQiXSwic291cmNlcyI6WyJQZXJtaXNzaW9uRXhwbGFuYXRpb24udHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyBTdXNwZW5zZSwgdXNlLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQm94LCBUZXh0IH0gZnJvbSAnLi4vLi4vaW5rLmpzJ1xuaW1wb3J0IHsgdXNlS2V5YmluZGluZyB9IGZyb20gJy4uLy4uL2tleWJpbmRpbmdzL3VzZUtleWJpbmRpbmcuanMnXG5pbXBvcnQgeyBsb2dFdmVudCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FuYWx5dGljcy9pbmRleC5qcydcbmltcG9ydCB0eXBlIHsgTWVzc2FnZSB9IGZyb20gJy4uLy4uL3R5cGVzL21lc3NhZ2UuanMnXG5pbXBvcnQge1xuICBnZW5lcmF0ZVBlcm1pc3Npb25FeHBsYW5hdGlvbixcbiAgaXNQZXJtaXNzaW9uRXhwbGFpbmVyRW5hYmxlZCxcbiAgdHlwZSBQZXJtaXNzaW9uRXhwbGFuYXRpb24gYXMgUGVybWlzc2lvbkV4cGxhbmF0aW9uVHlwZSxcbiAgdHlwZSBSaXNrTGV2ZWwsXG59IGZyb20gJy4uLy4uL3V0aWxzL3Blcm1pc3Npb25zL3Blcm1pc3Npb25FeHBsYWluZXIuanMnXG5pbXBvcnQgeyBTaGltbWVyQ2hhciB9IGZyb20gJy4uL1NwaW5uZXIvU2hpbW1lckNoYXIuanMnXG5pbXBvcnQgeyB1c2VTaGltbWVyQW5pbWF0aW9uIH0gZnJvbSAnLi4vU3Bpbm5lci91c2VTaGltbWVyQW5pbWF0aW9uLmpzJ1xuXG5jb25zdCBMT0FESU5HX01FU1NBR0UgPSAnTG9hZGluZyBleHBsYW5hdGlvbuKApidcblxuZnVuY3Rpb24gU2hpbW1lckxvYWRpbmdUZXh0KCk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIGNvbnN0IFtyZWYsIGdsaW1tZXJJbmRleF0gPSB1c2VTaGltbWVyQW5pbWF0aW9uKFxuICAgICdyZXNwb25kaW5nJyxcbiAgICBMT0FESU5HX01FU1NBR0UsXG4gICAgZmFsc2UsXG4gIClcblxuICByZXR1cm4gKFxuICAgIDxCb3ggcmVmPXtyZWZ9PlxuICAgICAgPFRleHQ+XG4gICAgICAgIHtMT0FESU5HX01FU1NBR0Uuc3BsaXQoJycpLm1hcCgoY2hhciwgaW5kZXgpID0+IChcbiAgICAgICAgICA8U2hpbW1lckNoYXJcbiAgICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgICBjaGFyPXtjaGFyfVxuICAgICAgICAgICAgaW5kZXg9e2luZGV4fVxuICAgICAgICAgICAgZ2xpbW1lckluZGV4PXtnbGltbWVySW5kZXh9XG4gICAgICAgICAgICBtZXNzYWdlQ29sb3I9XCJpbmFjdGl2ZVwiXG4gICAgICAgICAgICBzaGltbWVyQ29sb3I9XCJ0ZXh0XCJcbiAgICAgICAgICAvPlxuICAgICAgICApKX1cbiAgICAgIDwvVGV4dD5cbiAgICA8L0JveD5cbiAgKVxufVxuXG5mdW5jdGlvbiBnZXRSaXNrQ29sb3Iocmlza0xldmVsOiBSaXNrTGV2ZWwpOiAnc3VjY2VzcycgfCAnd2FybmluZycgfCAnZXJyb3InIHtcbiAgc3dpdGNoIChyaXNrTGV2ZWwpIHtcbiAgICBjYXNlICdMT1cnOlxuICAgICAgcmV0dXJuICdzdWNjZXNzJ1xuICAgIGNhc2UgJ01FRElVTSc6XG4gICAgICByZXR1cm4gJ3dhcm5pbmcnXG4gICAgY2FzZSAnSElHSCc6XG4gICAgICByZXR1cm4gJ2Vycm9yJ1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFJpc2tMYWJlbChyaXNrTGV2ZWw6IFJpc2tMZXZlbCk6IHN0cmluZyB7XG4gIHN3aXRjaCAocmlza0xldmVsKSB7XG4gICAgY2FzZSAnTE9XJzpcbiAgICAgIHJldHVybiAnTG93IHJpc2snXG4gICAgY2FzZSAnTUVESVVNJzpcbiAgICAgIHJldHVybiAnTWVkIHJpc2snXG4gICAgY2FzZSAnSElHSCc6XG4gICAgICByZXR1cm4gJ0hpZ2ggcmlzaydcbiAgfVxufVxuXG50eXBlIFBlcm1pc3Npb25FeHBsYW5hdGlvblByb3BzID0ge1xuICB0b29sTmFtZTogc3RyaW5nXG4gIHRvb2xJbnB1dDogdW5rbm93blxuICB0b29sRGVzY3JpcHRpb24/OiBzdHJpbmdcbiAgbWVzc2FnZXM/OiBNZXNzYWdlW11cbn1cblxudHlwZSBFeHBsYWluZXJTdGF0ZSA9IHtcbiAgdmlzaWJsZTogYm9vbGVhblxuICBlbmFibGVkOiBib29sZWFuXG4gIHByb21pc2U6IFByb21pc2U8UGVybWlzc2lvbkV4cGxhbmF0aW9uVHlwZSB8IG51bGw+IHwgbnVsbFxufVxuXG4vKipcbiAqIENyZWF0ZXMgYW4gZXhwbGFuYXRpb24gcHJvbWlzZSB0aGF0IG5ldmVyIHJlamVjdHMuXG4gKiBFcnJvcnMgYXJlIGNhdWdodCBhbmQgcmV0dXJuZWQgYXMgbnVsbC5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRXhwbGFuYXRpb25Qcm9taXNlKFxuICBwcm9wczogUGVybWlzc2lvbkV4cGxhbmF0aW9uUHJvcHMsXG4pOiBQcm9taXNlPFBlcm1pc3Npb25FeHBsYW5hdGlvblR5cGUgfCBudWxsPiB7XG4gIHJldHVybiBnZW5lcmF0ZVBlcm1pc3Npb25FeHBsYW5hdGlvbih7XG4gICAgdG9vbE5hbWU6IHByb3BzLnRvb2xOYW1lLFxuICAgIHRvb2xJbnB1dDogcHJvcHMudG9vbElucHV0LFxuICAgIHRvb2xEZXNjcmlwdGlvbjogcHJvcHMudG9vbERlc2NyaXB0aW9uLFxuICAgIG1lc3NhZ2VzOiBwcm9wcy5tZXNzYWdlcyxcbiAgICBzaWduYWw6IG5ldyBBYm9ydENvbnRyb2xsZXIoKS5zaWduYWwsIC8vIFdvbid0IGFib3J0IC0gcmVxdWVzdCBpcyBmYXN0IGVub3VnaFxuICB9KS5jYXRjaCgoKSA9PiBudWxsKVxufVxuXG4vKipcbiAqIEhvb2sgdGhhdCBtYW5hZ2VzIHRoZSBwZXJtaXNzaW9uIGV4cGxhaW5lciBzdGF0ZS5cbiAqIENyZWF0ZXMgdGhlIGZldGNoIHByb21pc2UgbGF6aWx5IChvbmx5IHdoZW4gdXNlciBoaXRzIEN0cmwrRSlcbiAqIHRvIGF2b2lkIGNvbnN1bWluZyB0b2tlbnMgZm9yIGV4cGxhbmF0aW9ucyB1c2VycyBuZXZlciB2aWV3LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlUGVybWlzc2lvbkV4cGxhaW5lclVJKFxuICBwcm9wczogUGVybWlzc2lvbkV4cGxhbmF0aW9uUHJvcHMsXG4pOiBFeHBsYWluZXJTdGF0ZSB7XG4gIGNvbnN0IGVuYWJsZWQgPSBpc1Blcm1pc3Npb25FeHBsYWluZXJFbmFibGVkKClcbiAgY29uc3QgW3Zpc2libGUsIHNldFZpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtwcm9taXNlLCBzZXRQcm9taXNlXSA9XG4gICAgdXNlU3RhdGU8UHJvbWlzZTxQZXJtaXNzaW9uRXhwbGFuYXRpb25UeXBlIHwgbnVsbD4gfCBudWxsPihudWxsKVxuXG4gIC8vIFVzZSBrZXliaW5kaW5nIGZvciBjdHJsK2UgdG9nZ2xlIChjb25maWd1cmFibGUgdmlhIGtleWJpbmRpbmdzLmpzb24pXG4gIHVzZUtleWJpbmRpbmcoXG4gICAgJ2NvbmZpcm06dG9nZ2xlRXhwbGFuYXRpb24nLFxuICAgICgpID0+IHtcbiAgICAgIGlmICghdmlzaWJsZSkge1xuICAgICAgICBsb2dFdmVudCgndGVuZ3VfcGVybWlzc2lvbl9leHBsYWluZXJfc2hvcnRjdXRfdXNlZCcsIHt9KVxuICAgICAgICAvLyBPbmx5IGNyZWF0ZSB0aGUgcHJvbWlzZSBvbiBmaXJzdCB0b2dnbGUgKGxhenkgbG9hZGluZylcbiAgICAgICAgaWYgKCFwcm9taXNlKSB7XG4gICAgICAgICAgc2V0UHJvbWlzZShjcmVhdGVFeHBsYW5hdGlvblByb21pc2UocHJvcHMpKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzZXRWaXNpYmxlKHYgPT4gIXYpXG4gICAgfSxcbiAgICB7IGNvbnRleHQ6ICdDb25maXJtYXRpb24nLCBpc0FjdGl2ZTogZW5hYmxlZCB9LFxuICApXG5cbiAgcmV0dXJuIHsgdmlzaWJsZSwgZW5hYmxlZCwgcHJvbWlzZSB9XG59XG5cbi8qKlxuICogSW5uZXIgY29tcG9uZW50IHRoYXQgdXNlcyBSZWFjdCAxOSdzIHVzZSgpIHRvIHJlYWQgdGhlIHByb21pc2UuXG4gKiBTdXNwZW5kcyB3aGlsZSBsb2FkaW5nLCByZXR1cm5zIG51bGwgb24gZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIEV4cGxhbmF0aW9uUmVzdWx0KHtcbiAgcHJvbWlzZSxcbn06IHtcbiAgcHJvbWlzZTogUHJvbWlzZTxQZXJtaXNzaW9uRXhwbGFuYXRpb25UeXBlIHwgbnVsbD5cbn0pOiBSZWFjdC5SZWFjdE5vZGUge1xuICBjb25zdCBleHBsYW5hdGlvbiA9IHVzZShwcm9taXNlKVxuXG4gIGlmICghZXhwbGFuYXRpb24pIHtcbiAgICByZXR1cm4gKFxuICAgICAgPEJveCBtYXJnaW5Ub3A9ezF9PlxuICAgICAgICA8VGV4dCBkaW1Db2xvcj5FeHBsYW5hdGlvbiB1bmF2YWlsYWJsZTwvVGV4dD5cbiAgICAgIDwvQm94PlxuICAgIClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCIgbWFyZ2luVG9wPXsxfT5cbiAgICAgIDxUZXh0PntleHBsYW5hdGlvbi5leHBsYW5hdGlvbn08L1RleHQ+XG4gICAgICA8Qm94IG1hcmdpblRvcD17MX0+XG4gICAgICAgIDxUZXh0PntleHBsYW5hdGlvbi5yZWFzb25pbmd9PC9UZXh0PlxuICAgICAgPC9Cb3g+XG4gICAgICA8Qm94IG1hcmdpblRvcD17MX0+XG4gICAgICAgIDxUZXh0PlxuICAgICAgICAgIDxUZXh0IGNvbG9yPXtnZXRSaXNrQ29sb3IoZXhwbGFuYXRpb24ucmlza0xldmVsKX0+XG4gICAgICAgICAgICB7Z2V0Umlza0xhYmVsKGV4cGxhbmF0aW9uLnJpc2tMZXZlbCl9OlxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8VGV4dD4ge2V4cGxhbmF0aW9uLnJpc2t9PC9UZXh0PlxuICAgICAgICA8L1RleHQ+XG4gICAgICA8L0JveD5cbiAgICA8L0JveD5cbiAgKVxufVxuXG4vKipcbiAqIENvbnRlbnQgY29tcG9uZW50IC0gc2hvd3MgbG9hZGluZyAodmlhIFN1c3BlbnNlKSBvciBleHBsYW5hdGlvbiB3aGVuIHZpc2libGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFBlcm1pc3Npb25FeHBsYWluZXJDb250ZW50KHtcbiAgdmlzaWJsZSxcbiAgcHJvbWlzZSxcbn06IHtcbiAgdmlzaWJsZTogYm9vbGVhblxuICBwcm9taXNlOiBQcm9taXNlPFBlcm1pc3Npb25FeHBsYW5hdGlvblR5cGUgfCBudWxsPiB8IG51bGxcbn0pOiBSZWFjdC5SZWFjdE5vZGUge1xuICBpZiAoIXZpc2libGUgfHwgIXByb21pc2UpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8U3VzcGVuc2VcbiAgICAgIGZhbGxiYWNrPXtcbiAgICAgICAgPEJveCBtYXJnaW5Ub3A9ezF9PlxuICAgICAgICAgIDxTaGltbWVyTG9hZGluZ1RleHQgLz5cbiAgICAgICAgPC9Cb3g+XG4gICAgICB9XG4gICAgPlxuICAgICAgPEV4cGxhbmF0aW9uUmVzdWx0IHByb21pc2U9e3Byb21pc2V9IC8+XG4gICAgPC9TdXNwZW5zZT5cbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUEsT0FBT0EsS0FBSyxJQUFJQyxRQUFRLEVBQUVDLEdBQUcsRUFBRUMsUUFBUSxRQUFRLE9BQU87QUFDdEQsU0FBU0MsR0FBRyxFQUFFQyxJQUFJLFFBQVEsY0FBYztBQUN4QyxTQUFTQyxhQUFhLFFBQVEsb0NBQW9DO0FBQ2xFLFNBQVNDLFFBQVEsUUFBUSxtQ0FBbUM7QUFDNUQsY0FBY0MsT0FBTyxRQUFRLHdCQUF3QjtBQUNyRCxTQUNFQyw2QkFBNkIsRUFDN0JDLDRCQUE0QixFQUM1QixLQUFLQyxxQkFBcUIsSUFBSUMseUJBQXlCLEVBQ3ZELEtBQUtDLFNBQVMsUUFDVCxnREFBZ0Q7QUFDdkQsU0FBU0MsV0FBVyxRQUFRLDJCQUEyQjtBQUN2RCxTQUFTQyxtQkFBbUIsUUFBUSxtQ0FBbUM7QUFFdkUsTUFBTUMsZUFBZSxHQUFHLHNCQUFzQjtBQUU5QyxTQUFBQyxtQkFBQTtFQUFBLE1BQUFDLENBQUEsR0FBQUMsRUFBQTtFQUNF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