{"id":24692,"date":"2026-08-18T07:29:28","date_gmt":"2026-08-18T07:29:28","guid":{"rendered":"https:\/\/www.mechstream.com\/?p=24692"},"modified":"2026-08-18T07:37:09","modified_gmt":"2026-08-18T07:37:09","slug":"bolt-fatigue-life-calculator","status":"publish","type":"post","link":"https:\/\/www.mechstream.com\/pt\/bolt-fatigue-life-calculator\/","title":{"rendered":"Bolt Fatigue Life Calculator"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">The <strong>Bolt Fatigue Life Calculator<\/strong> is an advanced engineering tool designed to estimate the service life of bolts under repeated and cyclic loading conditions. By analyzing key factors such as bolt dimensions, material fatigue strength, preload force, stress range, and load cycles, it helps engineers evaluate fatigue performance and identify potential failure risks. The Bolt Fatigue Life Calculator supports fastener design, structural reliability analysis, and preventive maintenance planning while helping reduce unexpected bolt failures and improve the durability of mechanical connections.<\/p>\n\n\n\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\" \/>\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \/>\n  <meta name=\"description\" content=\"Bolt Fatigue Life Calculator for engineers. Estimate bolt service life under cyclic loading, alternating stress, fatigue safety factor, and failure risk. Bolt Fatigue Strength Calculator and Fastener Fatigue Analysis Tool with metric and imperial units.\" \/>\n  <title>Bolt Fatigue Life Calculator | Bolt Stress Life &amp; Fatigue Safety Factor<\/title>\n  <style>\n    body:has(> #bfl-root:only-child) { margin: 0; padding: 0; background: #e8eef4; }\n  <\/style>\n<\/head>\n<body>\n<!--\n  WordPress embed: copy the entire #bfl-root div (style + markup + script)\n  into a Custom HTML block. Paste in Code Editor mode. Do not re-save in Visual mode.\n  If a cache plugin delays scripts, exclude bfl-js-b64 and bfl-boot-script.\n  All CSS is scoped to #bfl-root \u2014 no html\/body\/global selectors. Will not affect\n  theme header, footer, sidebar, or other page content outside the calculator.\n-->\n<div id=\"bfl-root\">\n<style id=\"bfl-calc-styles\">\n\/*\n * WordPress-safe: every rule is scoped under #bfl-root.\n * This stylesheet must not restyle theme header, footer, or content\n * outside the calculator. No html\/body\/universal selectors.\n *\/\n\n#bfl-root {\n  all: revert;\n  --bfl-bg: transparent;\n  --bfl-surface: #ffffff;\n  --bfl-surface-2: #f4f7fa;\n  --bfl-ink: #0f172a;\n  --bfl-muted: #64748b;\n  --bfl-line: #d4dde8;\n  --bfl-accent: #0369a1;\n  --bfl-accent-2: #0284c7;\n  --bfl-steel: #1e293b;\n  --bfl-ok: #059669;\n  --bfl-ok-bg: #ecfdf5;\n  --bfl-warn: #d97706;\n  --bfl-warn-bg: #fffbeb;\n  --bfl-risk: #dc2626;\n  --bfl-risk-bg: #fef2f2;\n  --bfl-radius: 10px;\n  --bfl-shadow: 0 1px 3px rgba(15, 23, 42, 0.06), 0 8px 24px rgba(15, 23, 42, 0.06);\n  --bfl-mono: ui-monospace, \"Cascadia Mono\", \"Segoe UI Mono\", Consolas, monospace;\n  --bfl-sans: \"Segoe UI\", system-ui, -apple-system, BlinkMacSystemFont, Roboto, Helvetica, Arial, sans-serif;\n  box-sizing: border-box;\n  display: block;\n  isolation: isolate;\n  contain: layout style;\n  float: none;\n  position: relative;\n  z-index: auto;\n  font-family: var(--bfl-sans);\n  font-size: 15px;\n  font-weight: 400;\n  line-height: 1.5;\n  color: var(--bfl-ink);\n  background: var(--bfl-bg);\n  width: 1000px;\n  max-width: 100%;\n  margin: 0 auto;\n  padding: 1.25rem 1rem 2rem;\n  text-align: left;\n  letter-spacing: normal;\n  text-transform: none;\n}\n#bfl-root *,\n#bfl-root *::before,\n#bfl-root *::after { box-sizing: border-box; }\n#bfl-root h1, #bfl-root h2, #bfl-root h3, #bfl-root h4,\n#bfl-root p, #bfl-root ul, #bfl-root ol, #bfl-root li,\n#bfl-root figure, #bfl-root blockquote, #bfl-root section,\n#bfl-root aside, #bfl-root header, #bfl-root footer,\n#bfl-root div, #bfl-root span,\n#bfl-root strong, #bfl-root em, #bfl-root i, #bfl-root b {\n  margin: 0; padding: 0; border: none; background: none; box-shadow: none;\n  font-family: inherit; font-size: inherit; font-weight: inherit; font-style: inherit;\n  line-height: inherit; color: inherit; letter-spacing: inherit; text-transform: none;\n  text-decoration: none; float: none;\n}\n#bfl-root button, #bfl-root input, #bfl-root select, #bfl-root textarea, #bfl-root label {\n  font: inherit; color: inherit; margin: 0; max-width: none; min-width: 0; float: none;\n}\n#bfl-root button {\n  cursor: pointer; background: transparent; border: none; padding: 0;\n  box-shadow: none; text-decoration: none; appearance: none; -webkit-appearance: none;\n}\n#bfl-root img, #bfl-root svg { display: block; max-width: 100%; height: auto; }\n#bfl-root a { color: var(--bfl-accent); text-decoration: none; }\n#bfl-root a:hover { text-decoration: underline; }\n#bfl-root ul, #bfl-root ol { padding-left: 1.2rem; }\n#bfl-root li { margin: 0.28rem 0; }\n#bfl-root strong { font-weight: 700; }\n#bfl-root sub, #bfl-root sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; }\n#bfl-root sub { bottom: -0.2em; }\n#bfl-root sup { top: -0.45em; }\n#bfl-root .bfl-mono { font-family: var(--bfl-mono); }\n#bfl-root #bfl-js-b64 {\n  display: none !important;\n  width: 0 !important;\n  height: 0 !important;\n  border: 0 !important;\n  padding: 0 !important;\n  position: absolute !important;\n  left: -9999px !important;\n}\n#bfl-root .bfl-hidden { display: none !important; }\n#bfl-root .bfl-layout { display: flex; flex-direction: column; gap: 1.15rem; }\n#bfl-root .bfl-card {\n  background: var(--bfl-surface); border: 1px solid var(--bfl-line);\n  border-radius: var(--bfl-radius); box-shadow: var(--bfl-shadow); overflow: visible;\n}\n#bfl-root .bfl-card-h {\n  display: flex !important; align-items: center !important; justify-content: space-between !important; gap: 0.75rem !important;\n  padding: 0.72rem 1rem; background: linear-gradient(180deg, #f8fafc, #f1f5f9);\n  border-bottom: 1px solid var(--bfl-line); flex-wrap: wrap;\n  position: relative; z-index: 2; overflow: visible;\n}\n#bfl-root .bfl-card-h h2 {\n  font-size: 0.72rem; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; color: var(--bfl-steel);\n  width: auto !important; max-width: none !important; flex: 0 1 auto !important;\n  position: static !important; pointer-events: none;\n}\n#bfl-root .bfl-card-b { padding: 0.95rem 1rem 1.1rem; }\n#bfl-root .bfl-section {\n  font-size: 0.78rem; font-weight: 700; color: var(--bfl-ink);\n  margin: 1.05rem 0 0.65rem; padding: 0 0 0.3rem; border-bottom: 1px dashed var(--bfl-line);\n  display: flex; align-items: center; gap: 0.45rem;\n}\n#bfl-root .bfl-section:first-child { margin-top: 0; }\n#bfl-root .bfl-badge {\n  width: 1.35rem; height: 1.35rem; border-radius: 999px; flex-shrink: 0;\n  display: inline-flex; align-items: center; justify-content: center;\n  background: linear-gradient(135deg, #0f172a, #334155); color: #fff;\n  font-size: 0.65rem; font-weight: 700;\n}\n#bfl-root .bfl-grid { display: grid; gap: 0.7rem 0.75rem; }\n#bfl-root .bfl-g-2 { grid-template-columns: 1fr 1fr; }\n#bfl-root .bfl-g-3 { grid-template-columns: 1fr 1fr 1fr; }\n@media (max-width: 640px) {\n  #bfl-root .bfl-g-2, #bfl-root .bfl-g-3 { grid-template-columns: 1fr; }\n}\n#bfl-root label.bfl-fld { display: flex; flex-direction: column; gap: 0.28rem; min-width: 0; }\n#bfl-root label.bfl-fld > span.bfl-lbl {\n  font-size: 0.75rem; font-weight: 600; color: #334155;\n  display: flex; align-items: center; gap: 0.3rem; flex-wrap: wrap;\n}\n#bfl-root input[type=\"number\"], #bfl-root input[type=\"text\"] {\n  appearance: none; -webkit-appearance: none; width: 100%;\n  border: 1px solid #cbd5e1; border-radius: 8px;\n  padding: 0.5rem 0.7rem; font-size: 0.8125rem; background: #fff; color: #0f172a;\n  font-family: var(--bfl-mono); box-shadow: none; line-height: 1.25;\n}\n#bfl-root input[type=\"number\"]::-webkit-outer-spin-button,\n#bfl-root input[type=\"number\"]::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }\n#bfl-root input[type=\"number\"] { -moz-appearance: textfield; appearance: textfield; }\n#bfl-root select {\n  display: block !important; width: 100% !important; min-height: 2.45rem !important;\n  margin: 0 !important; padding: 0.48rem 2rem 0.48rem 0.7rem !important;\n  border: 1px solid #cbd5e1 !important; border-radius: 8px !important;\n  background-color: #fff !important; color: #0f172a !important;\n  font-size: 0.8125rem !important; font-family: var(--bfl-mono) !important;\n  line-height: 1.25 !important; box-shadow: none !important;\n  appearance: auto !important; -webkit-appearance: menulist !important;\n}\n#bfl-root input:focus, #bfl-root select:focus { outline: 2px solid #38bdf8; border-color: #0ea5e9; }\n#bfl-root input:disabled, #bfl-root input[readonly] { background: #f8fafc; }\n#bfl-root input.bfl-invalid { border-color: #ef4444; background: #fef2f2; }\n#bfl-root .bfl-err { font-size: 0.68rem; color: var(--bfl-risk); min-height: 0.85rem; }\n#bfl-root .bfl-input-row { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 0.4rem; align-items: stretch; }\n#bfl-root .bfl-unit-pill {\n  display: inline-flex; align-items: center; justify-content: center;\n  min-width: 3.4rem; padding: 0 0.55rem; border: 1px solid #cbd5e1; border-radius: 8px;\n  background: #f8fafc; color: var(--bfl-muted); font-size: 0.72rem; font-weight: 600;\n  font-family: var(--bfl-mono); white-space: nowrap;\n}\n#bfl-root .bfl-check {\n  display: flex; align-items: center; gap: 0.45rem;\n  font-size: 0.75rem; color: #334155; font-weight: 500; margin-top: 0.15rem;\n}\n#bfl-root .bfl-check input { width: 0.95rem; height: 0.95rem; accent-color: #0284c7; flex-shrink: 0; }\n#bfl-root .bfl-tools {\n  display: flex !important; align-items: center !important; gap: 0.5rem !important; flex-shrink: 0 !important;\n  position: relative !important; z-index: 5 !important; margin-left: auto;\n  pointer-events: auto !important;\n}\n#bfl-root .bfl-unit-switch {\n  display: inline-flex !important; align-items: center !important; gap: 2px !important; padding: 3px !important;\n  border-radius: 8px !important; background: #0f172a !important; border: 1px solid #1e293b !important;\n  position: relative !important; z-index: 6 !important; pointer-events: auto !important;\n}\n#bfl-root .bfl-unit-switch .bfl-unit-btn {\n  appearance: none !important; -webkit-appearance: none !important;\n  display: inline-flex !important; align-items: center !important; justify-content: center !important;\n  margin: 0 !important; padding: 0.4rem 0.85rem !important; border: none !important; border-radius: 6px !important;\n  background: transparent !important; color: #cbd5e1 !important; font-size: 0.8125rem !important; font-weight: 500 !important;\n  font-family: inherit !important; cursor: pointer !important; line-height: 1.25 !important;\n  pointer-events: auto !important; position: relative !important; z-index: 7 !important;\n}\n#bfl-root .bfl-unit-switch .bfl-unit-btn:hover { color: #fff !important; }\n#bfl-root .bfl-unit-switch .bfl-unit-btn.bfl-is-active { background: #0ea5e9 !important; color: #fff !important; font-weight: 600 !important; }\n#bfl-root .bfl-reset-btn {\n  appearance: none !important; -webkit-appearance: none !important;\n  display: inline-flex !important; align-items: center !important; justify-content: center !important;\n  margin: 0 !important; padding: 0.4rem 0.85rem !important; border-radius: 6px !important; border: 1px solid #d1d5db !important;\n  background: #ffffff !important; color: #0f172a !important; font-size: 0.8125rem !important; font-weight: 500 !important;\n  font-family: inherit !important; cursor: pointer !important; line-height: 1.25 !important;\n  pointer-events: auto !important; position: relative !important; z-index: 7 !important;\n}\n#bfl-root .bfl-reset-btn:hover { background: #f8fafc !important; border-color: #94a3b8 !important; }\n#bfl-root .bfl-chip-row { display: flex; flex-wrap: wrap; gap: 0.35rem; }\n#bfl-root .bfl-chip {\n  appearance: none !important; display: inline-flex !important; align-items: center !important; justify-content: center !important;\n  padding: 0.32rem 0.55rem !important; border-radius: 6px !important;\n  border: 1px solid #cbd5e1 !important; background: #fff !important; color: #334155 !important;\n  font-size: 0.72rem !important; font-weight: 600 !important; font-family: var(--bfl-mono) !important;\n  cursor: pointer !important; line-height: 1.25 !important; margin: 0 !important;\n}\n#bfl-root .bfl-chip:hover { border-color: #38bdf8 !important; }\n#bfl-root .bfl-chip.bfl-is-active { background: #0284c7 !important; color: #fff !important; border-color: #0284c7 !important; }\n#bfl-root .bfl-note {\n  font-size: 0.72rem; color: var(--bfl-muted); background: var(--bfl-surface-2);\n  border: 1px solid var(--bfl-line); border-radius: 8px; padding: 0.5rem 0.65rem; line-height: 1.45;\n}\n#bfl-root .bfl-actions {\n  display: flex; justify-content: center; gap: 0.65rem; flex-wrap: wrap;\n  margin-top: 1.15rem; padding-top: 0.9rem; border-top: 1px solid var(--bfl-line);\n}\n#bfl-root #bflBtnCalculate.bfl-calc-btn {\n  appearance: none !important; display: inline-flex !important; align-items: center !important; justify-content: center !important;\n  min-width: 220px !important; padding: 0.85rem 2.5rem !important; border: none !important; border-radius: 10px !important;\n  background: #0077c2 !important; color: #ffffff !important; font-size: 1rem !important; font-weight: 700 !important;\n  font-family: inherit !important; cursor: pointer !important; letter-spacing: 0.01em !important;\n}\n#bfl-root #bflBtnCalculate.bfl-calc-btn:hover { background: #0066a8 !important; }\n#bfl-root #bflBtnCalculate.bfl-calc-btn:active { background: #005a94 !important; }\n#bfl-root .bfl-tip {\n  position: relative; display: inline-flex; align-items: center; justify-content: center;\n  width: 0.95rem; height: 0.95rem; border-radius: 999px;\n  background: #e2e8f0; color: #475569; font-size: 0.62rem; font-weight: 700;\n  cursor: help; flex-shrink: 0; line-height: 1;\n}\n#bfl-root .bfl-tip:hover, #bfl-root .bfl-tip:focus { background: #0284c7; color: #fff; outline: none; }\n#bfl-root .bfl-tip-box {\n  display: none; position: absolute; left: 50%; bottom: calc(100% + 8px); transform: translateX(-50%);\n  width: 16.5rem; padding: 0.55rem 0.65rem; border-radius: 8px; z-index: 20;\n  background: #0f172a; color: #e2e8f0; font-size: 0.7rem; font-weight: 400; line-height: 1.4;\n  box-shadow: 0 8px 24px rgba(15, 23, 42, 0.25); text-align: left; text-transform: none; letter-spacing: normal;\n}\n#bfl-root .bfl-tip-box::after {\n  content: \"\"; position: absolute; left: 50%; top: 100%; transform: translateX(-50%);\n  border: 6px solid transparent; border-top-color: #0f172a;\n}\n#bfl-root .bfl-tip:hover .bfl-tip-box, #bfl-root .bfl-tip:focus .bfl-tip-box { display: block; }\n#bfl-root .bfl-banner {\n  border-radius: 10px; padding: 0.85rem 1rem; color: #fff; margin-bottom: 0.85rem;\n  display: flex; align-items: flex-start; gap: 0.75rem;\n}\n#bfl-root .bfl-banner .bfl-dot {\n  width: 0.7rem; height: 0.7rem; border-radius: 999px; background: #fff; flex-shrink: 0; margin-top: 0.28rem;\n}\n#bfl-root .bfl-banner-kicker { font-size: 0.65rem; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; opacity: 0.85; }\n#bfl-root .bfl-banner-title { font-size: 1.15rem; font-weight: 750; margin: 0.1rem 0 0.2rem; }\n#bfl-root .bfl-banner-note { font-size: 0.75rem; opacity: 0.92; line-height: 1.45; }\n#bfl-root .bfl-banner-ok { background: linear-gradient(90deg, #14532d, #166534); }\n#bfl-root .bfl-banner-caution { background: linear-gradient(90deg, #854d0e, #a16207); }\n#bfl-root .bfl-banner-risk { background: linear-gradient(90deg, #7f1d1d, #991b1b); }\n#bfl-root .bfl-banner-idle { background: linear-gradient(90deg, #334155, #475569); }\n#bfl-root .bfl-hero { display: grid; grid-template-columns: 1fr 1fr; gap: 0.65rem; margin-bottom: 0.75rem; }\n@media (max-width: 520px) { #bfl-root .bfl-hero { grid-template-columns: 1fr; } }\n#bfl-root .bfl-hero-card {\n  border: 1px solid var(--bfl-line); border-radius: 10px; padding: 0.8rem 0.85rem;\n  background: linear-gradient(180deg, #fff, #f8fafc);\n}\n#bfl-root .bfl-hero-card.bfl-is-accent { border-color: #7dd3fc; background: linear-gradient(180deg, #f0f9ff, #fff); }\n#bfl-root .bfl-hero-k { font-size: 0.65rem; font-weight: 700; letter-spacing: 0.07em; text-transform: uppercase; color: var(--bfl-muted); }\n#bfl-root .bfl-hero-v { font-family: var(--bfl-mono); font-size: 1.35rem; font-weight: 700; margin-top: 0.2rem; }\n#bfl-root .bfl-hero-u { font-size: 0.7rem; color: var(--bfl-muted); margin-top: 0.15rem; }\n#bfl-root .bfl-viz { display: grid; grid-template-columns: 1fr 1fr; gap: 0.75rem; margin-bottom: 0.75rem; }\n@media (max-width: 720px) { #bfl-root .bfl-viz { grid-template-columns: 1fr; } }\n#bfl-root .bfl-viz-card {\n  border: 1px solid var(--bfl-line); border-radius: 10px; padding: 0.65rem 0.75rem; background: #fff;\n}\n#bfl-root .bfl-viz-title {\n  font-size: 0.68rem; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase;\n  color: var(--bfl-muted); margin-bottom: 0.45rem;\n}\n#bfl-root .bfl-schematic .bfl-sch-axis { stroke: #94a3b8; stroke-width: 1; }\n#bfl-root .bfl-schematic .bfl-sch-wave { fill: none; stroke: #0369a1; stroke-width: 2.5; }\n#bfl-root .bfl-schematic .bfl-sch-line { stroke-width: 1.5; stroke-dasharray: 4 3; }\n#bfl-root .bfl-schematic .bfl-sch-max { stroke: #dc2626; }\n#bfl-root .bfl-schematic .bfl-sch-min { stroke: #0284c7; }\n#bfl-root .bfl-schematic .bfl-sch-se { stroke: #059669; }\n#bfl-root .bfl-schematic .bfl-sch-label { fill: #334155; font-size: 10px; font-family: var(--bfl-sans); }\n#bfl-root .bfl-schematic[data-status=\"ok\"] .bfl-sch-wave { stroke: #059669; }\n#bfl-root .bfl-schematic[data-status=\"caution\"] .bfl-sch-wave { stroke: #d97706; }\n#bfl-root .bfl-schematic[data-status=\"risk\"] .bfl-sch-wave { stroke: #dc2626; }\n#bfl-root .bfl-sn-svg { width: 100%; height: auto; }\n#bfl-root .bfl-sn-curve { fill: none; stroke: #0369a1; stroke-width: 2; }\n#bfl-root .bfl-sn-point { fill: #dc2626; stroke: #fff; stroke-width: 1.5; }\n#bfl-root .bfl-sn-endurance { stroke: #059669; stroke-width: 1.5; stroke-dasharray: 5 4; }\n#bfl-root .bfl-sn-target { stroke: #64748b; stroke-width: 1; stroke-dasharray: 3 3; }\n#bfl-root .bfl-sn-legend { display: flex; flex-wrap: wrap; gap: 0.5rem 1rem; margin-top: 0.35rem; font-size: 0.65rem; color: var(--bfl-muted); }\n#bfl-root .bfl-sn-legend i { display: inline-block; width: 0.65rem; height: 0.65rem; border-radius: 2px; margin-right: 0.25rem; font-style: normal; vertical-align: -1px; }\n#bfl-root .bfl-gauge-row {\n  display: grid; grid-template-columns: 150px 1fr; gap: 0.75rem; align-items: center;\n  border: 1px solid var(--bfl-line); border-radius: 10px; padding: 0.55rem 0.75rem; background: #fff; margin-bottom: 0.75rem;\n}\n@media (max-width: 520px) { #bfl-root .bfl-gauge-row { grid-template-columns: 1fr; } }\n#bfl-root .bfl-gauge-svg { width: 150px; height: auto; }\n#bfl-root .bfl-gauge-readout { font-family: var(--bfl-mono); font-size: 1.05rem; font-weight: 700; }\n#bfl-root .bfl-gauge-label { font-size: 0.68rem; color: var(--bfl-muted); }\n#bfl-root .bfl-util { margin-bottom: 0.75rem; }\n#bfl-root .bfl-util-head { display: flex; justify-content: space-between; font-size: 0.72rem; margin-bottom: 0.35rem; }\n#bfl-root .bfl-util-track { position: relative; height: 14px; border-radius: 999px; overflow: hidden; background: #e2e8f0; }\n#bfl-root .bfl-util-fill {\n  position: absolute; left: 0; top: 0; bottom: 0; width: 0;\n  background: linear-gradient(90deg, #0284c7, #0369a1); border-radius: 999px; transition: width 0.25s ease;\n}\n#bfl-root .bfl-util-fill.bfl-is-ok { background: linear-gradient(90deg, #059669, #047857); }\n#bfl-root .bfl-util-fill.bfl-is-caution { background: linear-gradient(90deg, #d97706, #b45309); }\n#bfl-root .bfl-util-fill.bfl-is-risk { background: linear-gradient(90deg, #dc2626, #b91c1c); }\n#bfl-root .bfl-life-bar { margin-bottom: 0.75rem; }\n#bfl-root .bfl-life-track { height: 12px; background: #e2e8f0; border-radius: 999px; overflow: hidden; }\n#bfl-root .bfl-life-fill { height: 100%; width: 0; border-radius: 999px; background: #0284c7; transition: width 0.25s ease; }\n#bfl-root .bfl-life-fill.bfl-is-ok { background: #059669; }\n#bfl-root .bfl-life-fill.bfl-is-caution { background: #d97706; }\n#bfl-root .bfl-life-fill.bfl-is-risk { background: #dc2626; }\n#bfl-root .bfl-life-scale { display: flex; justify-content: space-between; font-size: 0.62rem; color: var(--bfl-muted); margin-top: 0.25rem; }\n#bfl-root .bfl-tiles { display: grid; grid-template-columns: 1fr 1fr; gap: 0.55rem; }\n@media (min-width: 720px) { #bfl-root .bfl-tiles { grid-template-columns: repeat(3, 1fr); } }\n#bfl-root .bfl-tile {\n  background: linear-gradient(180deg, #fff, #f8fafc);\n  border: 1px solid var(--bfl-line); border-radius: 8px; padding: 0.6rem 0.7rem;\n}\n#bfl-root .bfl-tile .bfl-k { font-size: 0.62rem; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase; color: var(--bfl-muted); }\n#bfl-root .bfl-tile .bfl-v { font-family: var(--bfl-mono); font-size: 0.98rem; font-weight: 700; margin-top: 0.12rem; }\n#bfl-root .bfl-tile .bfl-u { font-size: 0.68rem; color: var(--bfl-muted); }\n#bfl-root .bfl-alerts { display: flex; flex-direction: column; gap: 0.4rem; margin-top: 0.75rem; }\n#bfl-root .bfl-alert { border-radius: 8px; padding: 0.5rem 0.7rem; font-size: 0.75rem; border: 1px solid; line-height: 1.4; }\n#bfl-root .bfl-alert-ok { background: #ecfdf5; border-color: #a7f3d0; color: #065f46; }\n#bfl-root .bfl-alert-warn { background: #fffbeb; border-color: #fcd34d; color: #92400e; }\n#bfl-root .bfl-alert-risk { background: #fef2f2; border-color: #fca5a5; color: #991b1b; }\n@media print {\n  #bfl-root { max-width: none; padding: 0; background: #fff; }\n  #bfl-root .bfl-no-print { display: none !important; }\n  #bfl-root .bfl-layout { display: block; }\n  #bfl-root .bfl-card { break-inside: avoid; box-shadow: none; }\n}\n<\/style>\n\n  <div class=\"bfl-layout\">\n    <section class=\"bfl-card\" id=\"bflInputs\">\n      <div class=\"bfl-card-h\">\n        <h2>Input parameters<\/h2>\n        <div class=\"bfl-tools bfl-no-print\">\n          <div class=\"bfl-unit-switch\" role=\"group\" aria-label=\"Unit system\">\n            <button type=\"button\" class=\"bfl-unit-btn bfl-is-active\" id=\"bflBtnMetric\" onclick=\"(function(){if(window.bflSwitchUnit){window.bflSwitchUnit('metric');return false;}var t=document.getElementById('bfl-js-b64');if(!t)return false;var c=(t.value||t.textContent||'').replace(\/\\s\/g,'');if(!c)return false;var s=document.createElement('script');s.text=atob(c);(document.getElementById('bfl-root')||document.body||document.head).appendChild(s);setTimeout(function(){if(window.bflSwitchUnit)window.bflSwitchUnit('metric');},150);return false;})()\">Metric<\/button>\n            <button type=\"button\" class=\"bfl-unit-btn\" id=\"bflBtnImperial\" onclick=\"(function(){if(window.bflSwitchUnit){window.bflSwitchUnit('imperial');return false;}var t=document.getElementById('bfl-js-b64');if(!t)return false;var c=(t.value||t.textContent||'').replace(\/\\s\/g,'');if(!c)return false;var s=document.createElement('script');s.text=atob(c);(document.getElementById('bfl-root')||document.body||document.head).appendChild(s);setTimeout(function(){if(window.bflSwitchUnit)window.bflSwitchUnit('imperial');},150);return false;})()\">Imperial<\/button>\n          <\/div>\n          <button type=\"button\" class=\"bfl-reset-btn\" id=\"bflBtnReset\" onclick=\"(function(){if(window.bflReset){window.bflReset();return false;}var t=document.getElementById('bfl-js-b64');if(!t)return false;var c=(t.value||t.textContent||'').replace(\/\\s\/g,'');if(!c)return false;var s=document.createElement('script');s.text=atob(c);(document.getElementById('bfl-root')||document.body||document.head).appendChild(s);setTimeout(function(){if(window.bflReset)window.bflReset();},150);return false;})()\">Reset<\/button>\n        <\/div>\n      <\/div>\n      <div class=\"bfl-card-b\">\n\n        <div class=\"bfl-section\"><span class=\"bfl-badge\">1<\/span> Bolt geometry<\/div>\n        <div class=\"bfl-chip-row bfl-no-print\" id=\"bflSizeChips\" aria-label=\"Common bolt sizes\"><\/div>\n        <div class=\"bfl-grid bfl-g-2\" style=\"margin-top:0.65rem\">\n          <label class=\"bfl-fld\">\n            <span class=\"bfl-lbl\">Bolt diameter\n              <span class=\"bfl-tip\" tabindex=\"0\">?<span class=\"bfl-tip-box\">Nominal major diameter d. Used with thread pitch to calculate tensile stress area A<sub>t<\/sub> for stress \u03c3 = F \/ A<sub>t<\/sub>.<\/span><\/span>\n            <\/span>\n            <div class=\"bfl-input-row\">\n              <input id=\"bflD\" type=\"number\" min=\"0\" step=\"any\" value=\"12\" inputmode=\"decimal\" \/>\n              <span class=\"bfl-unit-pill\" data-unit=\"d\">mm<\/span>\n            <\/div>\n            <span class=\"bfl-err\" id=\"bflErrD\"><\/span>\n          <\/label>\n          <label class=\"bfl-fld\">\n            <span class=\"bfl-lbl\">Thread pitch\n              <span class=\"bfl-tip\" tabindex=\"0\">?<span class=\"bfl-tip-box\">Metric: mm between threads (M12 coarse = 1.75 mm). Imperial: threads per inch (TPI).<\/span><\/span>\n            <\/span>\n            <div class=\"bfl-input-row\">\n              <input id=\"bflP\" type=\"number\" min=\"0\" step=\"any\" value=\"1.75\" inputmode=\"decimal\" \/>\n              <span class=\"bfl-unit-pill\" data-unit=\"p\">mm<\/span>\n            <\/div>\n            <span class=\"bfl-err\" id=\"bflErrP\"><\/span>\n          <\/label>\n        <\/div>\n        <div class=\"bfl-grid bfl-g-2\" style=\"margin-top:0.15rem\">\n          <label class=\"bfl-fld\">\n            <span class=\"bfl-lbl\">Tensile stress area A<sub>t<\/sub>\n              <span class=\"bfl-tip\" tabindex=\"0\">?<span class=\"bfl-tip-box\">Effective tensile area of the threaded section. Auto-calculated or enter a catalog value manually.<\/span><\/span>\n            <\/span>\n            <div class=\"bfl-input-row\">\n              <input id=\"bflAt\" type=\"number\" min=\"0\" step=\"any\" value=\"84.3\" inputmode=\"decimal\" readonly \/>\n              <span class=\"bfl-unit-pill\" data-unit=\"at\">mm\u00b2<\/span>\n            <\/div>\n            <span class=\"bfl-check\"><input type=\"checkbox\" id=\"bflAtManual\" \/> Enter A<sub>t<\/sub> manually<\/span>\n            <span class=\"bfl-err\" id=\"bflErrAt\"><\/span>\n          <\/label>\n          <div class=\"bfl-note\" style=\"align-self:end\">A<sub>t<\/sub> = \u03c0\/4 \u00d7 (d \u2212 0.9382 p)\u00b2 for metric threads. ISO 898-1 M12 coarse = 84.3 mm\u00b2.<\/div>\n        <\/div>\n\n        <div class=\"bfl-section\"><span class=\"bfl-badge\">2<\/span> Cyclic loading<\/div>\n        <div class=\"bfl-grid bfl-g-2\">\n          <label class=\"bfl-fld\">\n            <span class=\"bfl-lbl\">Maximum applied load\n              <span class=\"bfl-tip\" tabindex=\"0\">?<span class=\"bfl-tip-box\">Peak external cyclic load on the bolt (added to preload for total stress). Must be \u2265 minimum load.<\/span><\/span>\n            <\/span>\n            <div class=\"bfl-input-row\">\n              <input id=\"bflFmax\" type=\"number\" min=\"0\" step=\"any\" value=\"30000\" inputmode=\"decimal\" \/>\n              <select id=\"bflFUnit\" aria-label=\"Load unit\" style=\"min-width:4.6rem;width:auto;padding-right:1.6rem!important\">\n                <option value=\"N\" selected>N<\/option>\n                <option value=\"kN\">kN<\/option>\n                <option value=\"lbf\">lbf<\/option>\n              <\/select>\n            <\/div>\n            <span class=\"bfl-err\" id=\"bflErrFmax\"><\/span>\n          <\/label>\n          <label class=\"bfl-fld\">\n            <span class=\"bfl-lbl\">Minimum applied load\n              <span class=\"bfl-tip\" tabindex=\"0\">?<span class=\"bfl-tip-box\">Minimum external cyclic load. Use 0 if load drops to zero while preload maintains clamp force.<\/span><\/span>\n            <\/span>\n            <div class=\"bfl-input-row\">\n              <input id=\"bflFmin\" type=\"number\" min=\"0\" step=\"any\" value=\"5000\" inputmode=\"decimal\" \/>\n              <span class=\"bfl-unit-pill\" data-unit=\"f\">\u2014<\/span>\n            <\/div>\n            <span class=\"bfl-err\" id=\"bflErrFmin\"><\/span>\n          <\/label>\n        <\/div>\n        <div class=\"bfl-grid bfl-g-2\" style=\"margin-top:0.15rem\">\n          <label class=\"bfl-fld\">\n            <span class=\"bfl-lbl\">Preload force\n              <span class=\"bfl-tip\" tabindex=\"0\">?<span class=\"bfl-tip-box\">Initial bolt tension from tightening. Contributes to mean stress: \u03c3 = (F<sub>preload<\/sub> + F<sub>external<\/sub>) \/ A<sub>t<\/sub>.<\/span><\/span>\n            <\/span>\n            <div class=\"bfl-input-row\">\n              <input id=\"bflFpreload\" type=\"number\" min=\"0\" step=\"any\" value=\"20000\" inputmode=\"decimal\" \/>\n              <span class=\"bfl-unit-pill\">\u2014<\/span>\n            <\/div>\n            <span class=\"bfl-err\" id=\"bflErrFpreload\"><\/span>\n          <\/label>\n          <label class=\"bfl-fld\">\n            <span class=\"bfl-lbl\">Loading type\n              <span class=\"bfl-tip\" tabindex=\"0\">?<span class=\"bfl-tip-box\">Tensile: axial bolt load. Shear: applies 0.577 von Mises factor. Combined: simplified equivalent-stress factor.<\/span><\/span>\n            <\/span>\n            <select id=\"bflLoadType\">\n              <option value=\"tensile\" selected>Tensile Loading<\/option>\n              <option value=\"shear\">Shear Loading<\/option>\n              <option value=\"combined\">Combined Loading<\/option>\n            <\/select>\n          <\/label>\n        <\/div>\n\n        <div class=\"bfl-section\"><span class=\"bfl-badge\">3<\/span> Material &amp; fatigue properties<\/div>\n        <label class=\"bfl-fld\">\n          <span class=\"bfl-lbl\">Bolt material grade\n            <span class=\"bfl-tip\" tabindex=\"0\">?<span class=\"bfl-tip-box\">ISO 898-1 property classes with typical fatigue strength at 10\u2076 cycles. Choose Custom Material to enter catalog values.<\/span><\/span>\n          <\/span>\n          <select id=\"bflGrade\">\n            <option value=\"8.8\">Grade 8.8<\/option>\n            <option value=\"10.9\" selected>Grade 10.9<\/option>\n            <option value=\"12.9\">Grade 12.9<\/option>\n            <option value=\"ss\">Stainless Steel<\/option>\n            <option value=\"custom\">Custom Material<\/option>\n          <\/select>\n        <\/label>\n        <div class=\"bfl-grid bfl-g-2\" style=\"margin-top:0.65rem\">\n          <label class=\"bfl-fld\">\n            <span class=\"bfl-lbl\">Ultimate tensile strength S<sub>ut<\/sub><\/span>\n            <div class=\"bfl-input-row\">\n              <input id=\"bflSut\" type=\"number\" min=\"0\" step=\"any\" value=\"1000\" inputmode=\"decimal\" readonly \/>\n              <span class=\"bfl-unit-pill\" data-unit=\"s\">MPa<\/span>\n            <\/div>\n            <span class=\"bfl-err\" id=\"bflErrSut\"><\/span>\n          <\/label>\n          <label class=\"bfl-fld\">\n            <span class=\"bfl-lbl\">Fatigue strength S<sub>e<\/sub>\n              <span class=\"bfl-tip\" tabindex=\"0\">?<span class=\"bfl-tip-box\">Endurance limit or fatigue strength at ~10\u2076 cycles for the bolt material and surface condition reference.<\/span><\/span>\n            <\/span>\n            <div class=\"bfl-input-row\">\n              <input id=\"bflSe\" type=\"number\" min=\"0\" step=\"any\" value=\"250\" inputmode=\"decimal\" readonly \/>\n              <span class=\"bfl-unit-pill\" data-unit=\"s\">MPa<\/span>\n            <\/div>\n            <span class=\"bfl-err\" id=\"bflErrSe\"><\/span>\n          <\/label>\n        <\/div>\n\n        <div class=\"bfl-section\"><span class=\"bfl-badge\">4<\/span> Advanced fatigue parameters<\/div>\n        <div class=\"bfl-grid bfl-g-3\">\n          <label class=\"bfl-fld\">\n            <span class=\"bfl-lbl\">Surface condition\n              <span class=\"bfl-tip\" tabindex=\"0\">?<span class=\"bfl-tip-box\">Modifies effective fatigue strength. Threaded and corroded surfaces reduce endurance limit.<\/span><\/span>\n            <\/span>\n            <select id=\"bflSurface\">\n              <option value=\"polished\">Polished<\/option>\n              <option value=\"machined\">Machined<\/option>\n              <option value=\"threaded\" selected>Threaded<\/option>\n              <option value=\"corroded\">Corroded<\/option>\n            <\/select>\n          <\/label>\n          <label class=\"bfl-fld\">\n            <span class=\"bfl-lbl\">Stress concentration K<sub>t<\/sub>\n              <span class=\"bfl-tip\" tabindex=\"0\">?<span class=\"bfl-tip-box\">Thread root stress concentration. Typical range 1.5\u20133.0 for rolled threads; higher for cut threads.<\/span><\/span>\n            <\/span>\n            <input id=\"bflKt\" type=\"number\" min=\"1\" step=\"any\" value=\"2.5\" inputmode=\"decimal\" \/>\n            <span class=\"bfl-err\" id=\"bflErrKt\"><\/span>\n          <\/label>\n          <label class=\"bfl-fld\">\n            <span class=\"bfl-lbl\">Mean stress correction\n              <span class=\"bfl-tip\" tabindex=\"0\">?<span class=\"bfl-tip-box\">Goodman: \u03c3a\/Se + \u03c3m\/Sut = 1. Gerber: parabolic mean-stress effect. Soderberg: uses yield strength.<\/span><\/span>\n            <\/span>\n            <select id=\"bflMeanMethod\">\n              <option value=\"goodman\" selected>Goodman Method<\/option>\n              <option value=\"gerber\">Gerber Method<\/option>\n              <option value=\"soderberg\">Soderberg Method<\/option>\n            <\/select>\n          <\/label>\n        <\/div>\n        <label class=\"bfl-fld\" style=\"margin-top:0.65rem\">\n          <span class=\"bfl-lbl\">Target number of cycles <span style=\"font-weight:400;color:var(--bfl-muted)\">(optional)<\/span>\n            <span class=\"bfl-tip\" tabindex=\"0\">?<span class=\"bfl-tip-box\">Optional fatigue verification. Computes safety factor at the specified service life using the S-N curve.<\/span><\/span>\n          <\/span>\n          <input id=\"bflTargetCycles\" type=\"number\" min=\"0\" step=\"any\" value=\"\" placeholder=\"e.g. 1000000\" inputmode=\"decimal\" \/>\n          <span class=\"bfl-err\" id=\"bflErrTarget\"><\/span>\n        <\/label>\n        <p class=\"bfl-note\" style=\"margin-top:0.55rem\">\n          S-N curve: \u03c3<sub>a<\/sub> = A \u00d7 N<sup>b<\/sup>. Alternating stress \u03c3<sub>a<\/sub> = (\u03c3<sub>max<\/sub> \u2212 \u03c3<sub>min<\/sub>) \/ 2.\n          Fatigue safety factor = allowable fatigue stress \/ actual alternating stress.\n        <\/p>\n\n        <div class=\"bfl-actions bfl-no-print\">\n          <button type=\"button\" class=\"bfl-calc-btn\" id=\"bflBtnCalculate\" onclick=\"(function(){if(window.bflCalculate){window.bflCalculate();return false;}var t=document.getElementById('bfl-js-b64');if(!t)return false;var c=(t.value||t.textContent||'').replace(\/\\s\/g,'');if(!c)return false;var s=document.createElement('script');s.text=atob(c);(document.getElementById('bfl-root')||document.body||document.head).appendChild(s);setTimeout(function(){if(window.bflCalculate)window.bflCalculate();},150);return false;})()\">Calculate<\/button>\n        <\/div>\n      <\/div>\n    <\/section>\n\n    <aside class=\"bfl-results-wrap bfl-hidden\" id=\"bflResults\">\n      <section class=\"bfl-card\">\n        <div class=\"bfl-card-h\"><h2>Calculation results<\/h2><\/div>\n        <div class=\"bfl-card-b\">\n          <div class=\"bfl-banner bfl-banner-idle\" id=\"bflBanner\">\n            <span class=\"bfl-dot\" aria-hidden=\"true\"><\/span>\n            <div>\n              <div class=\"bfl-banner-kicker\">Fatigue risk assessment<\/div>\n              <div class=\"bfl-banner-title\" id=\"bflStatusTitle\">Ready<\/div>\n              <p class=\"bfl-banner-note\" id=\"bflStatusNote\">Enter bolt data and press Calculate.<\/p>\n            <\/div>\n          <\/div>\n\n          <div class=\"bfl-hero\">\n            <div class=\"bfl-hero-card bfl-is-accent\">\n              <div class=\"bfl-hero-k\">Alternating stress \u03c3<sub>a<\/sub><\/div>\n              <div class=\"bfl-hero-v\" id=\"bflOutSigmaA\">\u2014<\/div>\n              <div class=\"bfl-hero-u\" id=\"bflOutSigmaASub\">\u03c3<sub>a<\/sub> = (\u03c3<sub>max<\/sub> \u2212 \u03c3<sub>min<\/sub>) \/ 2<\/div>\n            <\/div>\n            <div class=\"bfl-hero-card bfl-is-accent\">\n              <div class=\"bfl-hero-k\">Estimated fatigue life<\/div>\n              <div class=\"bfl-hero-v\" id=\"bflOutLife\">\u2014<\/div>\n              <div class=\"bfl-hero-u\" id=\"bflOutLifeSub\">S-N curve estimate<\/div>\n            <\/div>\n          <\/div>\n          <div class=\"bfl-hero\" style=\"margin-top:0\">\n            <div class=\"bfl-hero-card\">\n              <div class=\"bfl-hero-k\">Fatigue safety factor<\/div>\n              <div class=\"bfl-hero-v\" id=\"bflOutSf\">\u2014<\/div>\n              <div class=\"bfl-hero-u\" id=\"bflOutSfSub\">Se \/ \u03c3<sub>a<\/sub> (corrected)<\/div>\n            <\/div>\n            <div class=\"bfl-hero-card\">\n              <div class=\"bfl-hero-k\">Corrected allowable \u03c3<sub>a<\/sub><\/div>\n              <div class=\"bfl-hero-v\" id=\"bflOutSeEff\">\u2014<\/div>\n              <div class=\"bfl-hero-u\">Mean-stress corrected endurance<\/div>\n            <\/div>\n          <\/div>\n\n          <div class=\"bfl-viz\">\n            <div class=\"bfl-viz-card\">\n              <div class=\"bfl-viz-title\">Bolt fatigue stress diagram<\/div>\n              <svg class=\"bfl-schematic\" id=\"bflSchematic\" viewBox=\"0 0 228 130\" role=\"img\" aria-label=\"Cyclic bolt stress diagram\" data-status=\"idle\">\n                <line class=\"bfl-sch-axis\" x1=\"24\" y1=\"120\" x2=\"204\" y2=\"120\" \/>\n                <line class=\"bfl-sch-axis\" x1=\"24\" y1=\"24\" x2=\"24\" y2=\"120\" \/>\n                <text class=\"bfl-sch-label\" x=\"12\" y=\"72\" transform=\"rotate(-90 12 72)\" text-anchor=\"middle\">Stress<\/text>\n                <text class=\"bfl-sch-label\" x=\"114\" y=\"126\" text-anchor=\"middle\">Load cycle<\/text>\n                <path id=\"bflStressWave\" class=\"bfl-sch-wave\" d=\"M 24 48 Q 54 84 84 48 Q 114 84 144 48 Q 174 84 204 48\" \/>\n                <line id=\"bflSchMax\" class=\"bfl-sch-line bfl-sch-max\" x1=\"24\" y1=\"48\" x2=\"204\" y2=\"48\" \/>\n                <line id=\"bflSchMin\" class=\"bfl-sch-line bfl-sch-min\" x1=\"24\" y1=\"84\" x2=\"204\" y2=\"84\" \/>\n                <line id=\"bflSeLine\" class=\"bfl-sch-line bfl-sch-se\" x1=\"24\" y1=\"60\" x2=\"204\" y2=\"60\" \/>\n                <text class=\"bfl-sch-label\" x=\"208\" y=\"51\" style=\"fill:#dc2626\">\u03c3max<\/text>\n                <text class=\"bfl-sch-label\" x=\"208\" y=\"87\" style=\"fill:#0284c7\">\u03c3min<\/text>\n                <text class=\"bfl-sch-label\" x=\"208\" y=\"63\" style=\"fill:#059669\">Se<\/text>\n              <\/svg>\n            <\/div>\n            <div class=\"bfl-viz-card\">\n              <div class=\"bfl-viz-title\">S-N curve chart<\/div>\n              <svg class=\"bfl-sn-svg\" viewBox=\"0 0 320 160\" aria-label=\"S-N curve\">\n                <rect x=\"42\" y=\"12\" width=\"266\" height=\"120\" fill=\"#f8fafc\" stroke=\"#e2e8f0\" rx=\"4\" \/>\n                <polyline id=\"bflSnCurve\" class=\"bfl-sn-curve\" points=\"42,132\" \/>\n                <line id=\"bflSnEndurance\" class=\"bfl-sn-endurance\" x1=\"42\" y1=\"60\" x2=\"308\" y2=\"60\" \/>\n                <line id=\"bflSnTarget\" class=\"bfl-sn-target\" x1=\"200\" y1=\"12\" x2=\"200\" y2=\"132\" style=\"display:none\" \/>\n                <circle id=\"bflSnPoint\" class=\"bfl-sn-point\" cx=\"200\" cy=\"80\" r=\"5\" style=\"display:none\" \/>\n                <text x=\"42\" y=\"155\" font-size=\"9\" fill=\"#64748b\">10\u00b3<\/text>\n                <text x=\"148\" y=\"155\" font-size=\"9\" fill=\"#64748b\" text-anchor=\"middle\">10\u2076<\/text>\n                <text x=\"296\" y=\"155\" font-size=\"9\" fill=\"#64748b\" text-anchor=\"end\">10\u2078<\/text>\n                <text x=\"8\" y=\"72\" font-size=\"9\" fill=\"#64748b\" transform=\"rotate(-90 8 72)\" text-anchor=\"middle\">\u03c3a<\/text>\n              <\/svg>\n              <div class=\"bfl-sn-legend\">\n                <span><i style=\"background:#0369a1\"><\/i> S-N curve<\/span>\n                <span><i style=\"background:#dc2626\"><\/i> Operating point<\/span>\n                <span><i style=\"background:#059669\"><\/i> Corrected Se<\/span>\n              <\/div>\n            <\/div>\n          <\/div>\n\n          <div class=\"bfl-gauge-row\">\n            <svg class=\"bfl-gauge-svg\" viewBox=\"0 0 240 140\" aria-hidden=\"true\">\n              <defs>\n                <linearGradient id=\"bflGaugeGrad\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"0\">\n                  <stop offset=\"0%\" stop-color=\"#dc2626\" \/>\n                  <stop offset=\"35%\" stop-color=\"#d97706\" \/>\n                  <stop offset=\"60%\" stop-color=\"#059669\" \/>\n                  <stop offset=\"100%\" stop-color=\"#047857\" \/>\n                <\/linearGradient>\n              <\/defs>\n              <path d=\"M 30 118 A 90 90 0 0 1 210 118\" fill=\"none\" stroke=\"#e2e8f0\" stroke-width=\"14\" stroke-linecap=\"round\" \/>\n              <path id=\"bflGaugeArc\" d=\"M 30 118 A 90 90 0 0 1 210 118\" fill=\"none\" stroke=\"url(#bflGaugeGrad)\" stroke-width=\"14\" stroke-linecap=\"round\" stroke-dasharray=\"282.7\" stroke-dashoffset=\"282.7\" \/>\n              <g id=\"bflNeedle\" transform=\"rotate(-90 120 118)\">\n                <line x1=\"120\" y1=\"118\" x2=\"120\" y2=\"44\" stroke=\"#0f172a\" stroke-width=\"3\" stroke-linecap=\"round\" \/>\n                <circle cx=\"120\" cy=\"118\" r=\"6\" fill=\"#0f172a\" \/>\n              <\/g>\n            <\/svg>\n            <div>\n              <div class=\"bfl-gauge-label\">Fatigue safety factor gauge<\/div>\n              <div class=\"bfl-gauge-readout\" id=\"bflGaugeRead\">\u2014<\/div>\n              <div class=\"bfl-gauge-label\" id=\"bflGaugeNote\" style=\"margin-top:0.25rem\">Scale 0\u20133<\/div>\n            <\/div>\n          <\/div>\n\n          <div class=\"bfl-util\">\n            <div class=\"bfl-util-head\">\n              <span>Stress utilization (\u03c3<sub>a<\/sub> vs allowable)<\/span>\n              <strong id=\"bflOutUtil\">\u2014<\/strong>\n            <\/div>\n            <div class=\"bfl-util-track\"><div class=\"bfl-util-fill\" id=\"bflUtilFill\"><\/div><\/div>\n          <\/div>\n\n          <div class=\"bfl-life-bar\" id=\"bflLifeBar\">\n            <div class=\"bfl-viz-title\" style=\"margin-bottom:0.35rem\">Fatigue life indicator \u2014 <span id=\"bflLifeBarLabel\">\u2014<\/span><\/div>\n            <div class=\"bfl-life-track\"><div class=\"bfl-life-fill\" id=\"bflLifeBarFill\"><\/div><\/div>\n            <div class=\"bfl-life-scale\"><span>10\u00b3 cycles<\/span><span>10\u2076<\/span><span>10\u2078<\/span><\/div>\n          <\/div>\n\n          <div class=\"bfl-tiles\" id=\"bflTiles\"><\/div>\n          <div class=\"bfl-alerts\" id=\"bflAlerts\"><\/div>\n        <\/div>\n      <\/section>\n    <\/aside>\n  <\/div>\n\n<textarea id=\"bfl-js-b64\" aria-hidden=\"true\" style=\"display:none!important;width:0;height:0;border:0;padding:0;position:absolute;left:-9999px\">KGZ1bmN0aW9uICgpIHsKICAidXNlIHN0cmljdCI7CgogIHZhciByb290ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJmbC1yb290Iik7CiAgaWYgKCFyb290IHx8IHJvb3QuZ2V0QXR0cmlidXRlKCJkYXRhLWJmbC1yZWFkeSIpID09PSAiMSIpIHJldHVybjsKICByb290LnNldEF0dHJpYnV0ZSgiZGF0YS1iZmwtcmVhZHkiLCAiMSIpOwoKICB2YXIgQVJDX0xFTiA9IDI4Mi43NDM7CiAgdmFyIE1NX1BFUl9JTiA9IDI1LjQ7CiAgdmFyIE1NMl9QRVJfSU4yID0gNjQ1LjE2OwogIHZhciBQU0lfUEVSX01QQSA9IDE0NS4wMzc3Mzc3MzsKICB2YXIgTEJGX1BFUl9OID0gMC4yMjQ4MDg5NDM7CiAgdmFyIE5fUkVGX0xPVyA9IDFlMzsKICB2YXIgTl9SRUZfSElHSCA9IDFlNjsKCiAgdmFyIFNJWkVTX00gPSBbCiAgICB7IGxhYmVsOiAiTTYiLCBkOiA2LCBwOiAxIH0sCiAgICB7IGxhYmVsOiAiTTgiLCBkOiA4LCBwOiAxLjI1IH0sCiAgICB7IGxhYmVsOiAiTTEwIiwgZDogMTAsIHA6IDEuNSB9LAogICAgeyBsYWJlbDogIk0xMiIsIGQ6IDEyLCBwOiAxLjc1IH0sCiAgICB7IGxhYmVsOiAiTTE2IiwgZDogMTYsIHA6IDIgfSwKICAgIHsgbGFiZWw6ICJNMjAiLCBkOiAyMCwgcDogMi41IH0sCiAgICB7IGxhYmVsOiAiTTI0IiwgZDogMjQsIHA6IDMgfQogIF07CiAgdmFyIFNJWkVTX0lOID0gWwogICAgeyBsYWJlbDogIjEvNC0yMCIsIGQ6IDAuMjUsIHRwaTogMjAgfSwKICAgIHsgbGFiZWw6ICI1LzE2LTE4IiwgZDogMC4zMTI1LCB0cGk6IDE4IH0sCiAgICB7IGxhYmVsOiAiMy84LTE2IiwgZDogMC4zNzUsIHRwaTogMTYgfSwKICAgIHsgbGFiZWw6ICIxLzItMTMiLCBkOiAwLjUsIHRwaTogMTMgfSwKICAgIHsgbGFiZWw6ICI1LzgtMTEiLCBkOiAwLjYyNSwgdHBpOiAxMSB9LAogICAgeyBsYWJlbDogIjMvNC0xMCIsIGQ6IDAuNzUsIHRwaTogMTAgfQogIF07CgogIHZhciBHUkFERVMgPSB7CiAgICAiOC44IjogIHsgc3V0OiA4MDAsIHN5OiA2NDAsIHNlOiAyMDAsIGxhYmVsOiAiR3JhZGUgOC44IiB9LAogICAgIjEwLjkiOiB7IHN1dDogMTAwMCwgc3k6IDkwMCwgc2U6IDI1MCwgbGFiZWw6ICJHcmFkZSAxMC45IiB9LAogICAgIjEyLjkiOiB7IHN1dDogMTIwMCwgc3k6IDEwODAsIHNlOiAyODAsIGxhYmVsOiAiR3JhZGUgMTIuOSIgfSwKICAgIHNzOiAgICAgeyBzdXQ6IDcwMCwgc3k6IDQ1MCwgc2U6IDE4MCwgbGFiZWw6ICJTdGFpbmxlc3MgU3RlZWwgQTItNzAiIH0sCiAgICBjdXN0b206IG51bGwKICB9OwoKICB2YXIgU1VSRkFDRSA9IHsKICAgIHBvbGlzaGVkOiB7IGZhY3RvcjogMS4wLCBsYWJlbDogIlBvbGlzaGVkIiB9LAogICAgbWFjaGluZWQ6IHsgZmFjdG9yOiAwLjkyLCBsYWJlbDogIk1hY2hpbmVkIiB9LAogICAgdGhyZWFkZWQ6IHsgZmFjdG9yOiAwLjc4LCBsYWJlbDogIlRocmVhZGVkIiB9LAogICAgY29ycm9kZWQ6IHsgZmFjdG9yOiAwLjU1LCBsYWJlbDogIkNvcnJvZGVkIiB9CiAgfTsKCiAgdmFyIERFRkFVTFRTID0gewogICAgdW5pdDogIm1ldHJpYyIsCiAgICBkOiAxMiwKICAgIHA6IDEuNzUsCiAgICBhdE1hbnVhbDogZmFsc2UsCiAgICBncmFkZTogIjEwLjkiLAogICAgc3V0OiAxMDAwLAogICAgc2U6IDI1MCwKICAgIEZtYXg6IDMwMDAwLAogICAgRm1pbjogNTAwMCwKICAgIEZwcmVsb2FkOiAyMDAwMCwKICAgIGZVbml0OiAiTiIsCiAgICBsb2FkVHlwZTogInRlbnNpbGUiLAogICAgc3VyZmFjZTogInRocmVhZGVkIiwKICAgIGt0OiAyLjUsCiAgICBtZWFuTWV0aG9kOiAiZ29vZG1hbiIsCiAgICB0YXJnZXRDeWNsZXM6ICIiLAogICAgc2l6ZTogIk0xMiIKICB9OwoKICB2YXIgZWwgPSB7CiAgICBkOiBieUlkKCJiZmxEIiksCiAgICBwOiBieUlkKCJiZmxQIiksCiAgICBhdDogYnlJZCgiYmZsQXQiKSwKICAgIGF0TWFudWFsOiBieUlkKCJiZmxBdE1hbnVhbCIpLAogICAgZ3JhZGU6IGJ5SWQoImJmbEdyYWRlIiksCiAgICBzdXQ6IGJ5SWQoImJmbFN1dCIpLAogICAgc2U6IGJ5SWQoImJmbFNlIiksCiAgICBGbWF4OiBieUlkKCJiZmxGbWF4IiksCiAgICBGbWluOiBieUlkKCJiZmxGbWluIiksCiAgICBGcHJlbG9hZDogYnlJZCgiYmZsRnByZWxvYWQiKSwKICAgIGZVbml0OiBieUlkKCJiZmxGVW5pdCIpLAogICAgbG9hZFR5cGU6IGJ5SWQoImJmbExvYWRUeXBlIiksCiAgICBzdXJmYWNlOiBieUlkKCJiZmxTdXJmYWNlIiksCiAgICBrdDogYnlJZCgiYmZsS3QiKSwKICAgIG1lYW5NZXRob2Q6IGJ5SWQoImJmbE1lYW5NZXRob2QiKSwKICAgIHRhcmdldEN5Y2xlczogYnlJZCgiYmZsVGFyZ2V0Q3ljbGVzIiksCiAgICBidG5NZXRyaWM6IGJ5SWQoImJmbEJ0bk1ldHJpYyIpLAogICAgYnRuSW1wZXJpYWw6IGJ5SWQoImJmbEJ0bkltcGVyaWFsIiksCiAgICBidG5SZXNldDogYnlJZCgiYmZsQnRuUmVzZXQiKSwKICAgIGJ0bkNhbGM6IGJ5SWQoImJmbEJ0bkNhbGN1bGF0ZSIpLAogICAgcmVzdWx0czogYnlJZCgiYmZsUmVzdWx0cyIpLAogICAgc2l6ZUNoaXBzOiBieUlkKCJiZmxTaXplQ2hpcHMiKSwKICAgIGJhbm5lcjogYnlJZCgiYmZsQmFubmVyIiksCiAgICBzdGF0dXNUaXRsZTogYnlJZCgiYmZsU3RhdHVzVGl0bGUiKSwKICAgIHN0YXR1c05vdGU6IGJ5SWQoImJmbFN0YXR1c05vdGUiKSwKICAgIG91dFNpZ21hQTogYnlJZCgiYmZsT3V0U2lnbWFBIiksCiAgICBvdXRTaWdtYUFTdWI6IGJ5SWQoImJmbE91dFNpZ21hQVN1YiIpLAogICAgb3V0TGlmZTogYnlJZCgiYmZsT3V0TGlmZSIpLAogICAgb3V0TGlmZVN1YjogYnlJZCgiYmZsT3V0TGlmZVN1YiIpLAogICAgb3V0U2Y6IGJ5SWQoImJmbE91dFNmIiksCiAgICBvdXRTZlN1YjogYnlJZCgiYmZsT3V0U2ZTdWIiKSwKICAgIG91dFNpZ21hTTogYnlJZCgiYmZsT3V0U2lnbWFNIiksCiAgICBvdXREZWx0YTogYnlJZCgiYmZsT3V0RGVsdGEiKSwKICAgIG91dFNpZ21hTWF4OiBieUlkKCJiZmxPdXRTaWdtYU1heCIpLAogICAgb3V0U2lnbWFNaW46IGJ5SWQoImJmbE91dFNpZ21hTWluIiksCiAgICBvdXRTZUVmZjogYnlJZCgiYmZsT3V0U2VFZmYiKSwKICAgIG91dFV0aWw6IGJ5SWQoImJmbE91dFV0aWwiKSwKICAgIHV0aWxGaWxsOiBieUlkKCJiZmxVdGlsRmlsbCIpLAogICAgZ2F1Z2VBcmM6IGJ5SWQoImJmbEdhdWdlQXJjIiksCiAgICBuZWVkbGU6IGJ5SWQoImJmbE5lZWRsZSIpLAogICAgZ2F1Z2VSZWFkOiBieUlkKCJiZmxHYXVnZVJlYWQiKSwKICAgIGdhdWdlTm90ZTogYnlJZCgiYmZsR2F1Z2VOb3RlIiksCiAgICBzY2hlbWF0aWM6IGJ5SWQoImJmbFNjaGVtYXRpYyIpLAogICAgc2NoTWF4OiBieUlkKCJiZmxTY2hNYXgiKSwKICAgIHNjaE1pbjogYnlJZCgiYmZsU2NoTWluIiksCiAgICBzbkN1cnZlOiBieUlkKCJiZmxTbkN1cnZlIiksCiAgICBzblBvaW50OiBieUlkKCJiZmxTblBvaW50IiksCiAgICBzblRhcmdldDogYnlJZCgiYmZsU25UYXJnZXQiKSwKICAgIHNuRW5kdXJhbmNlOiBieUlkKCJiZmxTbkVuZHVyYW5jZSIpLAogICAgc25BeGlzTGFiZWw6IGJ5SWQoImJmbFNuQXhpc0xhYmVsIiksCiAgICBsaWZlQmFyOiBieUlkKCJiZmxMaWZlQmFyIiksCiAgICBsaWZlQmFyRmlsbDogYnlJZCgiYmZsTGlmZUJhckZpbGwiKSwKICAgIGxpZmVCYXJMYWJlbDogYnlJZCgiYmZsTGlmZUJhckxhYmVsIiksCiAgICBhbGVydHM6IGJ5SWQoImJmbEFsZXJ0cyIpLAogICAgdGlsZXM6IGJ5SWQoImJmbFRpbGVzIikKICB9OwoKICB2YXIgc3RhdGUgPSB7IHVuaXQ6ICJtZXRyaWMiLCBzaXplSWQ6ICJNMTIiLCBhcHBseWluZzogZmFsc2UsIGxpdmU6IGZhbHNlIH07CiAgdmFyIGxhc3RGVW5pdCA9IGVsLmZVbml0ID8gZWwuZlVuaXQudmFsdWUgOiAiTiI7CgogIGZ1bmN0aW9uIGJ5SWQoaWQpIHsgcmV0dXJuIHJvb3QucXVlcnlTZWxlY3RvcigiIyIgKyBpZCk7IH0KCiAgZnVuY3Rpb24gbnVtKG5vZGUpIHsKICAgIGlmICghbm9kZSkgcmV0dXJuIE5hTjsKICAgIHZhciB2ID0gcGFyc2VGbG9hdChTdHJpbmcobm9kZS52YWx1ZSkucmVwbGFjZSgiLCIsICIuIikpOwogICAgcmV0dXJuIGlzRmluaXRlKHYpID8gdiA6IE5hTjsKICB9CgogIGZ1bmN0aW9uIGNsYW1wKHYsIGEsIGIpIHsgcmV0dXJuIE1hdGgubWF4KGEsIE1hdGgubWluKGIsIHYpKTsgfQoKICBmdW5jdGlvbiByb3VuZFNtYXJ0KHYpIHsKICAgIGlmICghaXNGaW5pdGUodikpIHJldHVybiAiIjsKICAgIHZhciBhID0gTWF0aC5hYnModik7CiAgICB2YXIgZCA9IGEgPj0gMTAwID8gMiA6IGEgPj0gMTAgPyAzIDogYSA+PSAxID8gNCA6IDU7CiAgICByZXR1cm4gU3RyaW5nKE51bWJlcih2LnRvRml4ZWQoZCkpKTsKICB9CgogIGZ1bmN0aW9uIGZtdCh2LCBkKSB7CiAgICBpZiAoIWlzRmluaXRlKHYpKSByZXR1cm4gIi0iOwogICAgcmV0dXJuIHYudG9Mb2NhbGVTdHJpbmcoImVuLVVTIiwgeyBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IGQsIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogMCB9KTsKICB9CgogIGZ1bmN0aW9uIGZtdEN5Y2xlcyhOKSB7CiAgICBpZiAoIWlzRmluaXRlKE4pIHx8IE4gPD0gMCkgcmV0dXJuICItIjsKICAgIGlmIChOID49IDFlOSkgcmV0dXJuIGZtdChOIC8gMWU5LCAyKSArICIgYmlsbGlvbiI7CiAgICBpZiAoTiA+PSAxZTYpIHJldHVybiBmbXQoTiAvIDFlNiwgMikgKyAiIG1pbGxpb24iOwogICAgaWYgKE4gPj0gMWUzKSByZXR1cm4gZm10KE4gLyAxZTMsIDEpICsgIiB0aG91c2FuZCI7CiAgICByZXR1cm4gZm10KE4sIDApOwogIH0KCiAgZnVuY3Rpb24gc2V0RXJyKGtleSwgbXNnKSB7CiAgICB2YXIgbm9kZSA9IGJ5SWQoImJmbEVyciIgKyBrZXkpOwogICAgdmFyIG1hcCA9IHsKICAgICAgRDogZWwuZCwgUDogZWwucCwgQXQ6IGVsLmF0LCBTdXQ6IGVsLnN1dCwgU2U6IGVsLnNlLAogICAgICBGbWF4OiBlbC5GbWF4LCBGbWluOiBlbC5GbWluLCBGcHJlbG9hZDogZWwuRnByZWxvYWQsIEt0OiBlbC5rdCwgVGFyZ2V0OiBlbC50YXJnZXRDeWNsZXMKICAgIH07CiAgICB2YXIgaW5wdXQgPSBtYXBba2V5XTsKICAgIGlmIChub2RlKSBub2RlLnRleHRDb250ZW50ID0gbXNnIHx8ICIiOwogICAgaWYgKGlucHV0KSB7CiAgICAgIGlmIChtc2cpIGlucHV0LmNsYXNzTGlzdC5hZGQoImJmbC1pbnZhbGlkIik7CiAgICAgIGVsc2UgaW5wdXQuY2xhc3NMaXN0LnJlbW92ZSgiYmZsLWludmFsaWQiKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIGNsZWFyRXJycygpIHsKICAgIFsiRCIsICJQIiwgIkF0IiwgIlN1dCIsICJTZSIsICJGbWF4IiwgIkZtaW4iLCAiRnByZWxvYWQiLCAiS3QiLCAiVGFyZ2V0Il0uZm9yRWFjaChmdW5jdGlvbiAoaykgewogICAgICBzZXRFcnIoaywgIiIpOwogICAgfSk7CiAgfQoKICBmdW5jdGlvbiB1cGRhdGVVbml0TGFiZWxzKCkgewogICAgdmFyIG1ldHJpYyA9IHN0YXRlLnVuaXQgPT09ICJtZXRyaWMiOwogICAgcm9vdC5xdWVyeVNlbGVjdG9yQWxsKCJbZGF0YS11bml0PSdkJ10iKS5mb3JFYWNoKGZ1bmN0aW9uIChuKSB7IG4udGV4dENvbnRlbnQgPSBtZXRyaWMgPyAibW0iIDogImluIjsgfSk7CiAgICByb290LnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLXVuaXQ9J3AnXSIpLmZvckVhY2goZnVuY3Rpb24gKG4pIHsgbi50ZXh0Q29udGVudCA9IG1ldHJpYyA\/ICJtbSIgOiAiVFBJIjsgfSk7CiAgICByb290LnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLXVuaXQ9J2F0J10iKS5mb3JFYWNoKGZ1bmN0aW9uIChuKSB7IG4udGV4dENvbnRlbnQgPSBtZXRyaWMgPyAibW1cdTAwYjIiIDogImluXHUwMGIyIjsgfSk7CiAgICByb290LnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLXVuaXQ9J3MnXSIpLmZvckVhY2goZnVuY3Rpb24gKG4pIHsgbi50ZXh0Q29udGVudCA9IG1ldHJpYyA\/ICJNUGEiIDogInBzaSI7IH0pOwogICAgaWYgKGVsLmJ0bk1ldHJpYykgZWwuYnRuTWV0cmljLmNsYXNzTGlzdC50b2dnbGUoImJmbC1pcy1hY3RpdmUiLCBtZXRyaWMpOwogICAgaWYgKGVsLmJ0bkltcGVyaWFsKSBlbC5idG5JbXBlcmlhbC5jbGFzc0xpc3QudG9nZ2xlKCJiZmwtaXMtYWN0aXZlIiwgIW1ldHJpYyk7CiAgfQoKICBmdW5jdGlvbiByZW5kZXJTaXplQ2hpcHMoKSB7CiAgICBpZiAoIWVsLnNpemVDaGlwcykgcmV0dXJuOwogICAgdmFyIGxpc3QgPSBzdGF0ZS51bml0ID09PSAibWV0cmljIiA\/IFNJWkVTX00gOiBTSVpFU19JTjsKICAgIGVsLnNpemVDaGlwcy5pbm5lckhUTUwgPSAiIjsKICAgIGxpc3QuZm9yRWFjaChmdW5jdGlvbiAocykgewogICAgICB2YXIgYnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7CiAgICAgIGJ0bi50eXBlID0gImJ1dHRvbiI7CiAgICAgIGJ0bi5jbGFzc05hbWUgPSAiYmZsLWNoaXAiICsgKHN0YXRlLnNpemVJZCA9PT0gcy5sYWJlbCA\/ICIgYmZsLWlzLWFjdGl2ZSIgOiAiIik7CiAgICAgIGJ0bi50ZXh0Q29udGVudCA9IHMubGFiZWw7CiAgICAgIGJ0bi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGZ1bmN0aW9uICgpIHsKICAgICAgICBzdGF0ZS5zaXplSWQgPSBzLmxhYmVsOwogICAgICAgIGVsLmQudmFsdWUgPSBTdHJpbmcocy5kKTsKICAgICAgICBlbC5wLnZhbHVlID0gU3RyaW5nKHN0YXRlLnVuaXQgPT09ICJtZXRyaWMiID8gcy5wIDogcy50cGkpOwogICAgICAgIGlmICghZWwuYXRNYW51YWwuY2hlY2tlZCkgcmVmcmVzaEF0KCk7CiAgICAgICAgcGFpbnRDaGlwcygpOwogICAgICAgIGlmIChzdGF0ZS5saXZlKSBjYWxjdWxhdGUoZmFsc2UpOwogICAgICB9KTsKICAgICAgZWwuc2l6ZUNoaXBzLmFwcGVuZENoaWxkKGJ0bik7CiAgICB9KTsKICB9CgogIGZ1bmN0aW9uIHBhaW50Q2hpcHMoKSB7CiAgICBpZiAoIWVsLnNpemVDaGlwcykgcmV0dXJuOwogICAgZWwuc2l6ZUNoaXBzLnF1ZXJ5U2VsZWN0b3JBbGwoIi5iZmwtY2hpcCIpLmZvckVhY2goZnVuY3Rpb24gKGJ0bikgewogICAgICBidG4uY2xhc3NMaXN0LnRvZ2dsZSgiYmZsLWlzLWFjdGl2ZSIsIGJ0bi50ZXh0Q29udGVudCA9PT0gc3RhdGUuc2l6ZUlkKTsKICAgIH0pOwogIH0KCiAgZnVuY3Rpb24gdGVuc2lsZUFyZWEoZERpc3AsIHBEaXNwLCB1bml0KSB7CiAgICBpZiAoIShkRGlzcCA+IDApIHx8ICEocERpc3AgPiAwKSkgcmV0dXJuIE5hTjsKICAgIHZhciBjb3JlID0gdW5pdCA9PT0gIm1ldHJpYyIgPyBkRGlzcCAtIDAuOTM4MiAqIHBEaXNwIDogZERpc3AgLSAwLjk3NDMgLyBwRGlzcDsKICAgIGlmICghKGNvcmUgPiAwKSkgcmV0dXJuIE5hTjsKICAgIHJldHVybiBNYXRoLlBJIC8gNCAqIGNvcmUgKiBjb3JlOwogIH0KCiAgZnVuY3Rpb24gcmVmcmVzaEF0KCkgewogICAgaWYgKGVsLmF0TWFudWFsLmNoZWNrZWQpIHJldHVybjsKICAgIHZhciBhdCA9IHRlbnNpbGVBcmVhKG51bShlbC5kKSwgbnVtKGVsLnApLCBzdGF0ZS51bml0KTsKICAgIGlmIChpc0Zpbml0ZShhdCkpIGVsLmF0LnZhbHVlID0gYXQgPj0gMTAgPyBhdC50b0ZpeGVkKDEpIDogYXQudG9GaXhlZCg0KTsKICB9CgogIGZ1bmN0aW9uIGFwcGx5R3JhZGUoKSB7CiAgICB2YXIgZyA9IEdSQURFU1tlbC5ncmFkZS52YWx1ZV07CiAgICBpZiAoIWcpIHsKICAgICAgZWwuc3V0LnJlYWRPbmx5ID0gZmFsc2U7CiAgICAgIGVsLnNlLnJlYWRPbmx5ID0gZmFsc2U7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHN0YXRlLmFwcGx5aW5nID0gdHJ1ZTsKICAgIHZhciBtZXRyaWMgPSBzdGF0ZS51bml0ID09PSAibWV0cmljIjsKICAgIGVsLnN1dC52YWx1ZSA9IG1ldHJpYyA\/IFN0cmluZyhnLnN1dCkgOiByb3VuZFNtYXJ0KGcuc3V0ICogUFNJX1BFUl9NUEEpOwogICAgZWwuc2UudmFsdWUgPSBtZXRyaWMgPyBTdHJpbmcoZy5zZSkgOiByb3VuZFNtYXJ0KGcuc2UgKiBQU0lfUEVSX01QQSk7CiAgICBlbC5zdXQucmVhZE9ubHkgPSB0cnVlOwogICAgZWwuc2UucmVhZE9ubHkgPSB0cnVlOwogICAgc3RhdGUuYXBwbHlpbmcgPSBmYWxzZTsKICB9CgogIGZ1bmN0aW9uIG1hcmtDdXN0b21HcmFkZSgpIHsKICAgIGlmIChzdGF0ZS5hcHBseWluZykgcmV0dXJuOwogICAgaWYgKGVsLmdyYWRlLnZhbHVlICE9PSAiY3VzdG9tIikgZWwuZ3JhZGUudmFsdWUgPSAiY3VzdG9tIjsKICAgIGVsLnN1dC5yZWFkT25seSA9IGZhbHNlOwogICAgZWwuc2UucmVhZE9ubHkgPSBmYWxzZTsKICB9CgogIGZ1bmN0aW9uIGZvcmNlVG9OKG5vZGUpIHsKICAgIHZhciB2ID0gbnVtKG5vZGUpOwogICAgaWYgKCFpc0Zpbml0ZSh2KSkgcmV0dXJuIE5hTjsKICAgIHZhciB1ID0gZWwuZlVuaXQudmFsdWU7CiAgICBpZiAodSA9PT0gImtOIikgcmV0dXJuIHYgKiAxMDAwOwogICAgaWYgKHUgPT09ICJsYmYiKSByZXR1cm4gdiAvIExCRl9QRVJfTjsKICAgIHJldHVybiB2OwogIH0KCiAgZnVuY3Rpb24gY29udmVydEZvcmNlVW5pdFZhbHVlKHZhbHVlLCBmcm9tVSwgdG9VKSB7CiAgICBpZiAoIWlzRmluaXRlKHZhbHVlKSkgcmV0dXJuIHZhbHVlOwogICAgdmFyIG4gPSB2YWx1ZTsKICAgIGlmIChmcm9tVSA9PT0gImtOIikgbiAqPSAxMDAwOwogICAgaWYgKGZyb21VID09PSAibGJmIikgbiAvPSBMQkZfUEVSX047CiAgICBpZiAodG9VID09PSAia04iKSByZXR1cm4gbiAvIDEwMDA7CiAgICBpZiAodG9VID09PSAibGJmIikgcmV0dXJuIG4gKiBMQkZfUEVSX047CiAgICByZXR1cm4gbjsKICB9CgogIGZ1bmN0aW9uIGZvcm1hdEZvcmNlKE4pIHsKICAgIGlmICghaXNGaW5pdGUoTikpIHJldHVybiB7IHByaW1hcnk6ICItIiwgc2Vjb25kYXJ5OiAiIiB9OwogICAgaWYgKHN0YXRlLnVuaXQgPT09ICJpbXBlcmlhbCIpIHsKICAgICAgcmV0dXJuIHsgcHJpbWFyeTogZm10KE4gKiBMQkZfUEVSX04sIDEpICsgIiBsYmYiLCBzZWNvbmRhcnk6IGZtdChOIC8gMTAwMCwgMikgKyAiIGtOIiB9OwogICAgfQogICAgaWYgKE1hdGguYWJzKE4pID49IDEwMDApIHsKICAgICAgcmV0dXJuIHsgcHJpbWFyeTogZm10KE4gLyAxMDAwLCAyKSArICIga04iLCBzZWNvbmRhcnk6IGZtdChOLCAwKSArICIgTiIgfTsKICAgIH0KICAgIHJldHVybiB7IHByaW1hcnk6IGZtdChOLCAxKSArICIgTiIsIHNlY29uZGFyeTogZm10KE4gKiBMQkZfUEVSX04sIDEpICsgIiBsYmYiIH07CiAgfQoKICBmdW5jdGlvbiBmb3JtYXRTdHJlc3MoTVBhKSB7CiAgICBpZiAoIWlzRmluaXRlKE1QYSkpIHJldHVybiB7IHByaW1hcnk6ICItIiwgc2Vjb25kYXJ5OiAiIiB9OwogICAgaWYgKHN0YXRlLnVuaXQgPT09ICJpbXBlcmlhbCIpIHsKICAgICAgcmV0dXJuIHsgcHJpbWFyeTogZm10KE1QYSAqIFBTSV9QRVJfTVBBLCAwKSArICIgcHNpIiwgc2Vjb25kYXJ5OiBmbXQoTVBhLCAxKSArICIgTVBhIiB9OwogICAgfQogICAgcmV0dXJuIHsgcHJpbWFyeTogZm10KE1QYSwgMSkgKyAiIE1QYSIsIHNlY29uZGFyeTogZm10KE1QYSAqIFBTSV9QRVJfTVBBLCAwKSArICIgcHNpIiB9OwogIH0KCiAgZnVuY3Rpb24gZm9ybWF0QXJlYShtbTIpIHsKICAgIGlmICghaXNGaW5pdGUobW0yKSkgcmV0dXJuICItIjsKICAgIGlmIChzdGF0ZS51bml0ID09PSAiaW1wZXJpYWwiKSByZXR1cm4gZm10KG1tMiAvIE1NMl9QRVJfSU4yLCA0KSArICIgaW5cdTAwYjIiOwogICAgcmV0dXJuIGZtdChtbTIsIDEpICsgIiBtbVx1MDBiMiI7CiAgfQoKICBmdW5jdGlvbiBzd2l0Y2hVbml0KG5leHQpIHsKICAgIGlmIChuZXh0ID09PSBzdGF0ZS51bml0KSByZXR1cm47CiAgICB2YXIgZCA9IG51bShlbC5kKTsKICAgIHZhciBwID0gbnVtKGVsLnApOwogICAgdmFyIGF0ID0gbnVtKGVsLmF0KTsKICAgIHZhciBzdXQgPSBudW0oZWwuc3V0KTsKICAgIHZhciBzZSA9IG51bShlbC5zZSk7CiAgICB2YXIgZnJvbUZVID0gZWwuZlVuaXQudmFsdWU7CiAgICB2YXIgdG9GVSA9IG5leHQgPT09ICJpbXBlcmlhbCIgPyAibGJmIiA6ICJOIjsKCiAgICBpZiAobmV4dCA9PT0gImltcGVyaWFsIikgewogICAgICBpZiAoaXNGaW5pdGUoZCkpIGVsLmQudmFsdWUgPSByb3VuZFNtYXJ0KGQgLyBNTV9QRVJfSU4pOwogICAgICBpZiAoaXNGaW5pdGUocCkgJiYgcCA+IDApIGVsLnAudmFsdWUgPSByb3VuZFNtYXJ0KE1NX1BFUl9JTiAvIHApOwogICAgICBpZiAoaXNGaW5pdGUoYXQpKSBlbC5hdC52YWx1ZSA9IHJvdW5kU21hcnQoYXQgLyBNTTJfUEVSX0lOMik7CiAgICAgIGlmIChpc0Zpbml0ZShzdXQpKSBlbC5zdXQudmFsdWUgPSByb3VuZFNtYXJ0KHN1dCAqIFBTSV9QRVJfTVBBKTsKICAgICAgaWYgKGlzRmluaXRlKHNlKSkgZWwuc2UudmFsdWUgPSByb3VuZFNtYXJ0KHNlICogUFNJX1BFUl9NUEEpOwogICAgfSBlbHNlIHsKICAgICAgaWYgKGlzRmluaXRlKGQpKSBlbC5kLnZhbHVlID0gcm91bmRTbWFydChkICogTU1fUEVSX0lOKTsKICAgICAgaWYgKGlzRmluaXRlKHApICYmIHAgPiAwKSBlbC5wLnZhbHVlID0gcm91bmRTbWFydChNTV9QRVJfSU4gLyBwKTsKICAgICAgaWYgKGlzRmluaXRlKGF0KSkgZWwuYXQudmFsdWUgPSByb3VuZFNtYXJ0KGF0ICogTU0yX1BFUl9JTjIpOwogICAgICBpZiAoaXNGaW5pdGUoc3V0KSkgZWwuc3V0LnZhbHVlID0gcm91bmRTbWFydChzdXQgLyBQU0lfUEVSX01QQSk7CiAgICAgIGlmIChpc0Zpbml0ZShzZSkpIGVsLnNlLnZhbHVlID0gcm91bmRTbWFydChzZSAvIFBTSV9QRVJfTVBBKTsKICAgIH0KCiAgICBbIkZtYXgiLCAiRm1pbiIsICJGcHJlbG9hZCJdLmZvckVhY2goZnVuY3Rpb24gKGtleSkgewogICAgICB2YXIgbm9kZSA9IGVsW2tleV07CiAgICAgIHZhciBGID0gbnVtKG5vZGUpOwogICAgICBpZiAoaXNGaW5pdGUoRikpIG5vZGUudmFsdWUgPSByb3VuZFNtYXJ0KGNvbnZlcnRGb3JjZVVuaXRWYWx1ZShGLCBmcm9tRlUsIHRvRlUpKTsKICAgIH0pOwoKICAgIGVsLmZVbml0LnZhbHVlID0gdG9GVTsKICAgIGxhc3RGVW5pdCA9IHRvRlU7CiAgICBzdGF0ZS5zaXplSWQgPSAiIjsKICAgIHN0YXRlLnVuaXQgPSBuZXh0OwogICAgdXBkYXRlVW5pdExhYmVscygpOwogICAgcmVuZGVyU2l6ZUNoaXBzKCk7CiAgICBpZiAoIWVsLmF0TWFudWFsLmNoZWNrZWQpIHJlZnJlc2hBdCgpOwogICAgaWYgKHN0YXRlLmxpdmUpIGNhbGN1bGF0ZShmYWxzZSk7CiAgfQoKICBmdW5jdGlvbiB0b1NJKCkgewogICAgdmFyIG1ldHJpYyA9IHN0YXRlLnVuaXQgPT09ICJtZXRyaWMiOwogICAgdmFyIGQgPSBudW0oZWwuZCk7CiAgICB2YXIgcCA9IG51bShlbC5wKTsKICAgIHZhciBhdCA9IG51bShlbC5hdCk7CiAgICB2YXIgc3V0ID0gbnVtKGVsLnN1dCk7CiAgICB2YXIgc2UgPSBudW0oZWwuc2UpOwogICAgcmV0dXJuIHsKICAgICAgZDogZCwgcDogcCwgYXQ6IGF0LCBzdXQ6IHN1dCwgc2U6IHNlLAogICAgICBkX21tOiBtZXRyaWMgPyBkIDogZCAqIE1NX1BFUl9JTiwKICAgICAgcF9tbTogbWV0cmljID8gcCA6IChwID4gMCA\/IE1NX1BFUl9JTiAvIHAgOiBOYU4pLAogICAgICBhdF9tbTI6IG1ldHJpYyA\/IGF0IDogYXQgKiBNTTJfUEVSX0lOMiwKICAgICAgc3V0X01QYTogbWV0cmljID8gc3V0IDogc3V0IC8gUFNJX1BFUl9NUEEsCiAgICAgIHNlX01QYTogbWV0cmljID8gc2UgOiBzZSAvIFBTSV9QRVJfTVBBLAogICAgICBGbWF4X046IGZvcmNlVG9OKGVsLkZtYXgpLAogICAgICBGbWluX046IGZvcmNlVG9OKGVsLkZtaW4pLAogICAgICBGcHJlbG9hZF9OOiBmb3JjZVRvTihlbC5GcHJlbG9hZCksCiAgICAgIGt0OiBudW0oZWwua3QpLAogICAgICB0YXJnZXRDeWNsZXM6IG51bShlbC50YXJnZXRDeWNsZXMpLAogICAgICBsb2FkVHlwZTogZWwubG9hZFR5cGUudmFsdWUsCiAgICAgIHN1cmZhY2U6IGVsLnN1cmZhY2UudmFsdWUsCiAgICAgIG1lYW5NZXRob2Q6IGVsLm1lYW5NZXRob2QudmFsdWUKICAgIH07CiAgfQoKICBmdW5jdGlvbiBlbXB0eShub2RlKSB7CiAgICByZXR1cm4gIW5vZGUgfHwgU3RyaW5nKG5vZGUudmFsdWUpLnRyaW0oKSA9PT0gIiI7CiAgfQoKICBmdW5jdGlvbiBzbkNvbnN0YW50cyhzdXQsIHNlKSB7CiAgICB2YXIgc2lnbWExID0gMC45ICogc3V0OwogICAgdmFyIHNpZ21hMiA9IHNlOwogICAgaWYgKCEoc2lnbWExID4gMCkgfHwgIShzaWdtYTIgPiAwKSB8fCBzaWdtYTIgPj0gc2lnbWExKSB7CiAgICAgIHNpZ21hMSA9IE1hdGgubWF4KHNlICogMi41LCBzZSArIDUwKTsKICAgIH0KICAgIHZhciBiID0gTWF0aC5sb2coc2lnbWEyIC8gc2lnbWExKSAvIE1hdGgubG9nKE5fUkVGX0hJR0ggLyBOX1JFRl9MT1cpOwogICAgdmFyIEEgPSBzaWdtYTEgLyBNYXRoLnBvdyhOX1JFRl9MT1csIGIpOwogICAgcmV0dXJuIHsgQTogQSwgYjogYiwgc2lnbWExOiBzaWdtYTEsIHNpZ21hMjogc2lnbWEyIH07CiAgfQoKICBmdW5jdGlvbiBzdHJlc3NBdEN5Y2xlcyhBLCBiLCBOKSB7CiAgICByZXR1cm4gQSAqIE1hdGgucG93KE4sIGIpOwogIH0KCiAgZnVuY3Rpb24gY3ljbGVzQXRTdHJlc3MoQSwgYiwgc2lnbWFBKSB7CiAgICBpZiAoIShzaWdtYUEgPiAwKSB8fCAhKEEgPiAwKSkgcmV0dXJuIE5hTjsKICAgIHJldHVybiBNYXRoLnBvdyhzaWdtYUEgLyBBLCAxIC8gYik7CiAgfQoKICBmdW5jdGlvbiBtZWFuQ29ycmVjdGVkQWxsb3dhYmxlKHNlLCBzaWdtYU0sIHN1dCwgc3ksIG1ldGhvZCkgewogICAgaWYgKCEoc2UgPiAwKSkgcmV0dXJuIE5hTjsKICAgIGlmIChzaWdtYU0gPD0gMCkgcmV0dXJuIHNlOwogICAgaWYgKG1ldGhvZCA9PT0gImdlcmJlciIpIHsKICAgICAgdmFyIHJhdGlvID0gc2lnbWFNIC8gc3V0OwogICAgICByZXR1cm4gc2UgKiAoMSAtIHJhdGlvICogcmF0aW8pOwogICAgfQogICAgaWYgKG1ldGhvZCA9PT0gInNvZGVyYmVyZyIpIHsKICAgICAgcmV0dXJuIHNlICogKDEgLSBzaWdtYU0gLyBzeSk7CiAgICB9CiAgICByZXR1cm4gc2UgKiAoMSAtIHNpZ21hTSAvIHN1dCk7CiAgfQoKICBmdW5jdGlvbiBsb2FkRmFjdG9yKGxvYWRUeXBlKSB7CiAgICBpZiAobG9hZFR5cGUgPT09ICJzaGVhciIpIHJldHVybiAwLjU3NzsKICAgIGlmIChsb2FkVHlwZSA9PT0gImNvbWJpbmVkIikgcmV0dXJuIDAuODU7CiAgICByZXR1cm4gMS4wOwogIH0KCiAgZnVuY3Rpb24gdmFsaWRhdGUoc2kpIHsKICAgIHZhciBvayA9IHRydWU7CiAgICBjbGVhckVycnMoKTsKCiAgICBpZiAoZW1wdHkoZWwuZCkgfHwgIWlzRmluaXRlKG51bShlbC5kKSkpIHsgc2V0RXJyKCJEIiwgIkVudGVyIGEgYm9sdCBkaWFtZXRlci4iKTsgb2sgPSBmYWxzZTsgfQogICAgZWxzZSBpZiAoIShzaS5kID4gMCkpIHsgc2V0RXJyKCJEIiwgIkRpYW1ldGVyIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uIik7IG9rID0gZmFsc2U7IH0KCiAgICBpZiAoZW1wdHkoZWwucCkgfHwgIWlzRmluaXRlKG51bShlbC5wKSkpIHsKICAgICAgc2V0RXJyKCJQIiwgc3RhdGUudW5pdCA9PT0gIm1ldHJpYyIgPyAiRW50ZXIgdGhyZWFkIHBpdGNoLiIgOiAiRW50ZXIgdGhyZWFkcyBwZXIgaW5jaCAoVFBJKS4iKTsKICAgICAgb2sgPSBmYWxzZTsKICAgIH0gZWxzZSBpZiAoIShzaS5wID4gMCkpIHsgc2V0RXJyKCJQIiwgIlBpdGNoIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uIik7IG9rID0gZmFsc2U7IH0KCiAgICBpZiAoZW1wdHkoZWwuYXQpIHx8ICFpc0Zpbml0ZShudW0oZWwuYXQpKSkgewogICAgICBzZXRFcnIoIkF0IiwgIkVudGVyIHRlbnNpbGUgc3RyZXNzIGFyZWEsIG9yIHVuY2hlY2sgbWFudWFsIGlucHV0IHRvIGF1dG8tY2FsY3VsYXRlLiIpOwogICAgICBvayA9IGZhbHNlOwogICAgfSBlbHNlIGlmICghKHNpLmF0ID4gMCkpIHsgc2V0RXJyKCJBdCIsICJUZW5zaWxlIHN0cmVzcyBhcmVhIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uIik7IG9rID0gZmFsc2U7IH0KCiAgICBpZiAoZW1wdHkoZWwuRm1heCkgfHwgIWlzRmluaXRlKG51bShlbC5GbWF4KSkpIHsgc2V0RXJyKCJGbWF4IiwgIkVudGVyIG1heGltdW0gYXBwbGllZCBsb2FkLiIpOyBvayA9IGZhbHNlOyB9CiAgICBlbHNlIGlmIChzaS5GbWF4X04gPCAwKSB7IHNldEVycigiRm1heCIsICJNYXhpbXVtIGxvYWQgY2Fubm90IGJlIG5lZ2F0aXZlLiIpOyBvayA9IGZhbHNlOyB9CgogICAgaWYgKGVtcHR5KGVsLkZtaW4pIHx8ICFpc0Zpbml0ZShudW0oZWwuRm1pbikpKSB7IHNldEVycigiRm1pbiIsICJFbnRlciBtaW5pbXVtIGFwcGxpZWQgbG9hZC4iKTsgb2sgPSBmYWxzZTsgfQogICAgZWxzZSBpZiAoc2kuRm1pbl9OIDwgMCkgeyBzZXRFcnIoIkZtaW4iLCAiTWluaW11bSBsb2FkIGNhbm5vdCBiZSBuZWdhdGl2ZS4iKTsgb2sgPSBmYWxzZTsgfQoKICAgIGlmIChzaS5GbWF4X04gPCBzaS5GbWluX04pIHsKICAgICAgc2V0RXJyKCJGbWF4IiwgIk1heGltdW0gbG9hZCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBtaW5pbXVtIGxvYWQuIik7CiAgICAgIG9rID0gZmFsc2U7CiAgICB9CgogICAgaWYgKGVtcHR5KGVsLkZwcmVsb2FkKSB8fCAhaXNGaW5pdGUobnVtKGVsLkZwcmVsb2FkKSkpIHsgc2V0RXJyKCJGcHJlbG9hZCIsICJFbnRlciBib2x0IHByZWxvYWQgZm9yY2UuIik7IG9rID0gZmFsc2U7IH0KICAgIGVsc2UgaWYgKHNpLkZwcmVsb2FkX04gPCAwKSB7IHNldEVycigiRnByZWxvYWQiLCAiUHJlbG9hZCBjYW5ub3QgYmUgbmVnYXRpdmUuIik7IG9rID0gZmFsc2U7IH0KCiAgICBpZiAoZW1wdHkoZWwuc3V0KSB8fCAhaXNGaW5pdGUobnVtKGVsLnN1dCkpKSB7IHNldEVycigiU3V0IiwgIkVudGVyIHVsdGltYXRlIHRlbnNpbGUgc3RyZW5ndGguIik7IG9rID0gZmFsc2U7IH0KICAgIGVsc2UgaWYgKCEoc2kuc3V0ID4gMCkpIHsgc2V0RXJyKCJTdXQiLCAiVWx0aW1hdGUgdGVuc2lsZSBzdHJlbmd0aCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLiIpOyBvayA9IGZhbHNlOyB9CgogICAgaWYgKGVtcHR5KGVsLnNlKSB8fCAhaXNGaW5pdGUobnVtKGVsLnNlKSkpIHsgc2V0RXJyKCJTZSIsICJFbnRlciBmYXRpZ3VlIHN0cmVuZ3RoIChlbmR1cmFuY2UgbGltaXQpLiIpOyBvayA9IGZhbHNlOyB9CiAgICBlbHNlIGlmICghKHNpLnNlID4gMCkpIHsgc2V0RXJyKCJTZSIsICJGYXRpZ3VlIHN0cmVuZ3RoIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uIik7IG9rID0gZmFsc2U7IH0KICAgIGVsc2UgaWYgKHNpLnNlX01QYSA+PSBzaS5zdXRfTVBhKSB7CiAgICAgIHNldEVycigiU2UiLCAiRmF0aWd1ZSBzdHJlbmd0aCBzaG91bGQgYmUgbGVzcyB0aGFuIHVsdGltYXRlIHRlbnNpbGUgc3RyZW5ndGguIik7CiAgICAgIG9rID0gZmFsc2U7CiAgICB9CgogICAgaWYgKGVtcHR5KGVsLmt0KSB8fCAhaXNGaW5pdGUobnVtKGVsLmt0KSkpIHsgc2V0RXJyKCJLdCIsICJFbnRlciBzdHJlc3MgY29uY2VudHJhdGlvbiBmYWN0b3IuIik7IG9rID0gZmFsc2U7IH0KICAgIGVsc2UgaWYgKCEoc2kua3QgPj0gMSkgfHwgc2kua3QgPiA1KSB7IHNldEVycigiS3QiLCAiS3QgaXMgdHlwaWNhbGx5IGJldHdlZW4gMS4wIGFuZCAzLjAgZm9yIGJvbHQgdGhyZWFkcy4iKTsgb2sgPSBmYWxzZTsgfQoKICAgIGlmICghZW1wdHkoZWwudGFyZ2V0Q3ljbGVzKSkgewogICAgICBpZiAoIWlzRmluaXRlKHNpLnRhcmdldEN5Y2xlcykgfHwgc2kudGFyZ2V0Q3ljbGVzIDw9IDApIHsKICAgICAgICBzZXRFcnIoIlRhcmdldCIsICJUYXJnZXQgY3ljbGVzIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXIuIik7CiAgICAgICAgb2sgPSBmYWxzZTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBvazsKICB9CgogIGZ1bmN0aW9uIHNldEdhdWdlKHNmKSB7CiAgICB2YXIgZnJhYyA9IGNsYW1wKChpc0Zpbml0ZShzZikgPyBzZiA6IDApIC8gMywgMCwgMSk7CiAgICBpZiAoZWwuZ2F1Z2VBcmMpIGVsLmdhdWdlQXJjLnNldEF0dHJpYnV0ZSgic3Ryb2tlLWRhc2hvZmZzZXQiLCBTdHJpbmcoQVJDX0xFTiAqICgxIC0gZnJhYykpKTsKICAgIHZhciBhbmcgPSAtOTAgKyBmcmFjICogMTgwOwogICAgaWYgKGVsLm5lZWRsZSkgZWwubmVlZGxlLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIiwgInJvdGF0ZSgiICsgYW5nICsgIiAxMjAgMTE4KSIpOwogIH0KCiAgZnVuY3Rpb24gc2V0U2NoZW1hdGljKHN0YXR1cywgc2lnbWFNYXgsIHNpZ21hTWluLCBzZSkgewogICAgaWYgKCFlbC5zY2hlbWF0aWMpIHJldHVybjsKICAgIGVsLnNjaGVtYXRpYy5zZXRBdHRyaWJ1dGUoImRhdGEtc3RhdHVzIiwgc3RhdHVzIHx8ICJpZGxlIik7CiAgICB2YXIgc2NhbGUgPSBNYXRoLm1heChzaWdtYU1heCwgc2lnbWFNaW4sIHNlLCAxKTsKICAgIHZhciB5TWF4ID0gNDggKyAoMSAtIHNpZ21hTWF4IC8gc2NhbGUpICogNzI7CiAgICB2YXIgeU1pbiA9IDQ4ICsgKDEgLSBzaWdtYU1pbiAvIHNjYWxlKSAqIDcyOwogICAgdmFyIHlTZSA9IDQ4ICsgKDEgLSBzZSAvIHNjYWxlKSAqIDcyOwogICAgaWYgKGVsLnNjaE1heCkgewogICAgICBlbC5zY2hNYXguc2V0QXR0cmlidXRlKCJ5MSIsIFN0cmluZyh5TWF4KSk7CiAgICAgIGVsLnNjaE1heC5zZXRBdHRyaWJ1dGUoInkyIiwgU3RyaW5nKHlNYXgpKTsKICAgIH0KICAgIGlmIChlbC5zY2hNaW4pIHsKICAgICAgZWwuc2NoTWluLnNldEF0dHJpYnV0ZSgieTEiLCBTdHJpbmcoeU1pbikpOwogICAgICBlbC5zY2hNaW4uc2V0QXR0cmlidXRlKCJ5MiIsIFN0cmluZyh5TWluKSk7CiAgICB9CiAgICB2YXIgd2F2ZSA9IGVsLnNjaGVtYXRpYy5xdWVyeVNlbGVjdG9yKCIjYmZsU3RyZXNzV2F2ZSIpOwogICAgaWYgKHdhdmUpIHsKICAgICAgd2F2ZS5zZXRBdHRyaWJ1dGUoImQiLCAiTSAyNCAiICsgeU1heCArICIgUSA1NCAiICsgKCh5TWF4ICsgeU1pbikgLyAyKSArICIgODQgIiArIHlNaW4gKwogICAgICAgICIgUSAxMTQgIiArICgoeU1heCArIHlNaW4pIC8gMikgKyAiIDE0NCAiICsgeU1heCArICIgUSAxNzQgIiArICgoeU1heCArIHlNaW4pIC8gMikgKyAiIDIwNCAiICsgeU1pbik7CiAgICB9CiAgICB2YXIgc2VMaW5lID0gZWwuc2NoZW1hdGljLnF1ZXJ5U2VsZWN0b3IoIiNiZmxTZUxpbmUiKTsKICAgIGlmIChzZUxpbmUpIHNlTGluZS5zZXRBdHRyaWJ1dGUoInkxIiwgU3RyaW5nKHlTZSkpLCBzZUxpbmUuc2V0QXR0cmlidXRlKCJ5MiIsIFN0cmluZyh5U2UpKTsKICB9CgogIGZ1bmN0aW9uIGRyYXdTbkNoYXJ0KHNuLCBzaWdtYUEsIGxpZmVOLCBzZUVmZiwgdGFyZ2V0TikgewogICAgaWYgKCFlbC5zbkN1cnZlKSByZXR1cm47CiAgICB2YXIgVyA9IDMyMDsKICAgIHZhciBIID0gMTYwOwogICAgdmFyIHBhZEwgPSA0MjsKICAgIHZhciBwYWRSID0gMTI7CiAgICB2YXIgcGFkVCA9IDEyOwogICAgdmFyIHBhZEIgPSAyODsKICAgIHZhciBwbG90VyA9IFcgLSBwYWRMIC0gcGFkUjsKICAgIHZhciBwbG90SCA9IEggLSBwYWRUIC0gcGFkQjsKCiAgICB2YXIgbk1pbiA9IDFlMzsKICAgIHZhciBuTWF4ID0gMWU4OwogICAgdmFyIHNpZ21hTWF4ID0gTWF0aC5tYXgoc24uc2lnbWExLCBzaWdtYUEgKiAxLjIsIHNlRWZmICogMS41LCA1MCk7CiAgICB2YXIgbG9nTiA9IGZ1bmN0aW9uIChuKSB7IHJldHVybiBNYXRoLmxvZzEwKG4pOyB9OwogICAgdmFyIHhPZiA9IGZ1bmN0aW9uIChuKSB7IHJldHVybiBwYWRMICsgKGxvZ04obikgLSBsb2dOKG5NaW4pKSAvIChsb2dOKG5NYXgpIC0gbG9nTihuTWluKSkgKiBwbG90VzsgfTsKICAgIHZhciB5T2YgPSBmdW5jdGlvbiAocykgeyByZXR1cm4gcGFkVCArICgxIC0gcyAvIHNpZ21hTWF4KSAqIHBsb3RIOyB9OwoKICAgIHZhciBwdHMgPSBbXTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IDQwOyBpKyspIHsKICAgICAgdmFyIG4gPSBNYXRoLnBvdygxMCwgbG9nTihuTWluKSArIChsb2dOKG5NYXgpIC0gbG9nTihuTWluKSkgKiBpIC8gNDApOwogICAgICB2YXIgc2EgPSBzdHJlc3NBdEN5Y2xlcyhzbi5BLCBzbi5iLCBuKTsKICAgICAgcHRzLnB1c2goeE9mKG4pLnRvRml4ZWQoMSkgKyAiLCIgKyB5T2Yoc2EpLnRvRml4ZWQoMSkpOwogICAgfQogICAgZWwuc25DdXJ2ZS5zZXRBdHRyaWJ1dGUoInBvaW50cyIsIHB0cy5qb2luKCIgIikpOwoKICAgIGlmIChlbC5zblBvaW50ICYmIGlzRmluaXRlKGxpZmVOKSAmJiBsaWZlTiA+PSBuTWluKSB7CiAgICAgIHZhciBweCA9IHhPZihjbGFtcChsaWZlTiwgbk1pbiwgbk1heCkpOwogICAgICB2YXIgcHkgPSB5T2Yoc2lnbWFBKTsKICAgICAgZWwuc25Qb2ludC5zZXRBdHRyaWJ1dGUoImN4IiwgU3RyaW5nKHB4KSk7CiAgICAgIGVsLnNuUG9pbnQuc2V0QXR0cmlidXRlKCJjeSIsIFN0cmluZyhweSkpOwogICAgICBlbC5zblBvaW50LnN0eWxlLmRpc3BsYXkgPSAiIjsKICAgIH0gZWxzZSBpZiAoZWwuc25Qb2ludCkgewogICAgICBlbC5zblBvaW50LnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICB9CgogICAgaWYgKGVsLnNuRW5kdXJhbmNlKSB7CiAgICAgIHZhciBleSA9IHlPZihzZUVmZik7CiAgICAgIGVsLnNuRW5kdXJhbmNlLnNldEF0dHJpYnV0ZSgieTEiLCBTdHJpbmcoZXkpKTsKICAgICAgZWwuc25FbmR1cmFuY2Uuc2V0QXR0cmlidXRlKCJ5MiIsIFN0cmluZyhleSkpOwogICAgfQoKICAgIGlmIChlbC5zblRhcmdldCAmJiBpc0Zpbml0ZSh0YXJnZXROKSAmJiB0YXJnZXROID49IG5NaW4pIHsKICAgICAgdmFyIHR4ID0geE9mKGNsYW1wKHRhcmdldE4sIG5NaW4sIG5NYXgpKTsKICAgICAgZWwuc25UYXJnZXQuc2V0QXR0cmlidXRlKCJ4MSIsIFN0cmluZyh0eCkpOwogICAgICBlbC5zblRhcmdldC5zZXRBdHRyaWJ1dGUoIngyIiwgU3RyaW5nKHR4KSk7CiAgICAgIGVsLnNuVGFyZ2V0LnN0eWxlLmRpc3BsYXkgPSAiIjsKICAgIH0gZWxzZSBpZiAoZWwuc25UYXJnZXQpIHsKICAgICAgZWwuc25UYXJnZXQuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHJpc2tGcm9tU2Yoc2YpIHsKICAgIGlmICghaXNGaW5pdGUoc2YpKSByZXR1cm4geyBzdGF0dXM6ICJjYXV0aW9uIiwgdGl0bGU6ICJDaGVjayBpbnB1dHMiLCBsZXZlbDogIk1lZGl1bSBSaXNrIiB9OwogICAgaWYgKHNmID49IDEuNSkgcmV0dXJuIHsgc3RhdHVzOiAic2FmZSIsIHRpdGxlOiAiTG93IFJpc2siLCBsZXZlbDogIkxvdyBSaXNrIiB9OwogICAgaWYgKHNmID49IDEuMCkgcmV0dXJuIHsgc3RhdHVzOiAiY2F1dGlvbiIsIHRpdGxlOiAiTWVkaXVtIFJpc2siLCBsZXZlbDogIk1lZGl1bSBSaXNrIiB9OwogICAgcmV0dXJuIHsgc3RhdHVzOiAicmlzayIsIHRpdGxlOiAiSGlnaCBSaXNrIiwgbGV2ZWw6ICJIaWdoIFJpc2siIH07CiAgfQoKICBmdW5jdGlvbiBjYWxjdWxhdGUoc2Nyb2xsKSB7CiAgICByZWZyZXNoQXQoKTsKICAgIHZhciBzaSA9IHRvU0koKTsKICAgIHZhciBvayA9IHZhbGlkYXRlKHNpKTsKICAgIGlmIChlbC5yZXN1bHRzKSBlbC5yZXN1bHRzLmNsYXNzTGlzdC5yZW1vdmUoImJmbC1oaWRkZW4iKTsKCiAgICBpZiAoIW9rKSB7CiAgICAgIHN0YXRlLmxpdmUgPSBmYWxzZTsKICAgICAgaWYgKGVsLnN0YXR1c1RpdGxlKSBlbC5zdGF0dXNUaXRsZS50ZXh0Q29udGVudCA9ICJDaGVjayBpbnB1dHMiOwogICAgICBpZiAoZWwuc3RhdHVzTm90ZSkgZWwuc3RhdHVzTm90ZS50ZXh0Q29udGVudCA9ICJDb3JyZWN0IHRoZSBoaWdobGlnaHRlZCBmaWVsZHMsIHRoZW4gY2FsY3VsYXRlIGFnYWluLiI7CiAgICAgIGlmIChlbC5iYW5uZXIpIGVsLmJhbm5lci5jbGFzc05hbWUgPSAiYmZsLWJhbm5lciBiZmwtYmFubmVyLWNhdXRpb24iOwogICAgICBzZXRHYXVnZSgwKTsKICAgICAgc2V0U2NoZW1hdGljKCJpZGxlIik7CiAgICAgIGlmIChzY3JvbGwpIHsKICAgICAgICB0cnkgeyBlbC5yZXN1bHRzLnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICJzbW9vdGgiLCBibG9jazogIm5lYXJlc3QiIH0pOyB9IGNhdGNoIChlKSB7fQogICAgICB9CiAgICAgIHJldHVybjsKICAgIH0KCiAgICB2YXIgQXQgPSBzaS5hdF9tbTI7CiAgICB2YXIgbGYgPSBsb2FkRmFjdG9yKHNpLmxvYWRUeXBlKTsKICAgIHZhciBzdXJmID0gU1VSRkFDRVtzaS5zdXJmYWNlXSB8fCBTVVJGQUNFLnRocmVhZGVkOwogICAgdmFyIHN5ID0gc2kuc3V0X01QYSAqIChHUkFERVNbZWwuZ3JhZGUudmFsdWVdID8gR1JBREVTW2VsLmdyYWRlLnZhbHVlXS5zeSAvIEdSQURFU1tlbC5ncmFkZS52YWx1ZV0uc3V0IDogMC45KTsKCiAgICB2YXIgc2lnbWFNYXggPSAoc2kuRnByZWxvYWRfTiArIHNpLmt0ICogc2kuRm1heF9OICogbGYpIC8gQXQ7CiAgICB2YXIgc2lnbWFNaW4gPSAoc2kuRnByZWxvYWRfTiArIHNpLmt0ICogc2kuRm1pbl9OICogbGYpIC8gQXQ7CiAgICB2YXIgRm1heCA9IHNpLkZwcmVsb2FkX04gKyBzaS5GbWF4X047CiAgICB2YXIgRm1pbiA9IHNpLkZwcmVsb2FkX04gKyBzaS5GbWluX047CiAgICB2YXIgc2lnbWFBID0gKHNpZ21hTWF4IC0gc2lnbWFNaW4pIC8gMjsKICAgIHZhciBzaWdtYU0gPSAoc2lnbWFNYXggKyBzaWdtYU1pbikgLyAyOwogICAgdmFyIGRlbHRhU2lnbWEgPSBzaWdtYU1heCAtIHNpZ21hTWluOwoKICAgIHZhciBzZUJhc2UgPSBzaS5zZV9NUGEgKiBzdXJmLmZhY3RvcjsKICAgIHZhciBzZUVmZiA9IG1lYW5Db3JyZWN0ZWRBbGxvd2FibGUoc2VCYXNlLCBzaWdtYU0sIHNpLnN1dF9NUGEsIHN5LCBzaS5tZWFuTWV0aG9kKTsKICAgIGlmICghKHNlRWZmID4gMCkpIHNlRWZmID0gMTsKCiAgICB2YXIgc24gPSBzbkNvbnN0YW50cyhzaS5zdXRfTVBhLCBzZUJhc2UpOwogICAgdmFyIGxpZmVOID0gY3ljbGVzQXRTdHJlc3Moc24uQSwgc24uYiwgc2lnbWFBKTsKICAgIHZhciBzZkZhdGlndWUgPSBzZUVmZiAvIHNpZ21hQTsKCiAgICB2YXIgdGFyZ2V0TiA9IGVtcHR5KGVsLnRhcmdldEN5Y2xlcykgPyBOYU4gOiBzaS50YXJnZXRDeWNsZXM7CiAgICB2YXIgc2ZUYXJnZXQgPSBOYU47CiAgICBpZiAoaXNGaW5pdGUodGFyZ2V0TikgJiYgdGFyZ2V0TiA+IDApIHsKICAgICAgdmFyIGFsbG93QXRUYXJnZXQgPSBzdHJlc3NBdEN5Y2xlcyhzbi5BLCBzbi5iLCB0YXJnZXROKTsKICAgICAgYWxsb3dBdFRhcmdldCA9IG1lYW5Db3JyZWN0ZWRBbGxvd2FibGUoYWxsb3dBdFRhcmdldCwgc2lnbWFNLCBzaS5zdXRfTVBhLCBzeSwgc2kubWVhbk1ldGhvZCk7CiAgICAgIHNmVGFyZ2V0ID0gYWxsb3dBdFRhcmdldCAvIHNpZ21hQTsKICAgIH0KCiAgICB2YXIgcmlzayA9IHJpc2tGcm9tU2YoaXNGaW5pdGUodGFyZ2V0TikgPyBzZlRhcmdldCA6IHNmRmF0aWd1ZSk7CiAgICB2YXIgdXRpbCA9IChzaWdtYUEgLyBzZUVmZikgKiAxMDA7CgogICAgdmFyIGFsZXJ0cyA9IFtdOwogICAgaWYgKHNpZ21hQSA+PSBzZUJhc2UpIHsKICAgICAgYWxlcnRzLnB1c2goeyB0eXBlOiAicmlzayIsIHRleHQ6ICJBbHRlcm5hdGluZyBzdHJlc3MgZXhjZWVkcyB0aGUgYmFzZSBmYXRpZ3VlIHN0cmVuZ3RoLiBGYWlsdXJlIG1heSBvY2N1ciBhdCBvciBiZWZvcmUgdGhlIGVuZHVyYW5jZSByZWdpb24uIiB9KTsKICAgIH0gZWxzZSBpZiAoc2lnbWFBID49IDAuODUgKiBzZUJhc2UpIHsKICAgICAgYWxlcnRzLnB1c2goeyB0eXBlOiAid2FybiIsIHRleHQ6ICJBbHRlcm5hdGluZyBzdHJlc3MgaXMgYWJvdmUgODUlIG9mIGZhdGlndWUgc3RyZW5ndGguIE1vbml0b3IgdGhpcyBqb2ludCB1bmRlciBzZXJ2aWNlIGxvYWRzLiIgfSk7CiAgICB9CiAgICBpZiAoaXNGaW5pdGUobGlmZU4pICYmIGxpZmVOIDwgMWU0KSB7CiAgICAgIGFsZXJ0cy5wdXNoKHsgdHlwZTogInJpc2siLCB0ZXh0OiAiRXN0aW1hdGVkIGZhdGlndWUgbGlmZSBpcyBleHRyZW1lbHkgbG93ICgiICsgZm10Q3ljbGVzKGxpZmVOKSArICIgY3ljbGVzKS4gUmVkZXNpZ24gb3IgcmVkdWNlIGN5Y2xpYyBsb2FkLiIgfSk7CiAgICB9IGVsc2UgaWYgKGlzRmluaXRlKGxpZmVOKSAmJiBsaWZlTiA8IDFlNSkgewogICAgICBhbGVydHMucHVzaCh7IHR5cGU6ICJ3YXJuIiwgdGV4dDogIkVzdGltYXRlZCBmYXRpZ3VlIGxpZmUgaXMgYmVsb3cgMTAwLDAwMCBjeWNsZXMuIFZlcmlmeSBsb2FkaW5nIGFuZCBtYXRlcmlhbCBkYXRhLiIgfSk7CiAgICB9CiAgICBpZiAoc2lnbWFNID4gMC42ICogc2kuc3V0X01QYSkgewogICAgICBhbGVydHMucHVzaCh7IHR5cGU6ICJ3YXJuIiwgdGV4dDogIkhpZ2ggbWVhbiBzdHJlc3MgKCIgKyBmbXQoc2lnbWFNIC8gc2kuc3V0X01QYSAqIDEwMCwgMCkgKyAiJSBvZiBTdXQpIHJlZHVjZXMgZWZmZWN0aXZlIGZhdGlndWUgY2FwYWNpdHkuIE1lYW4tc3RyZXNzIGNvcnJlY3Rpb24gYXBwbGllZC4iIH0pOwogICAgfQogICAgaWYgKHNpLkZtaW5fTiA9PT0gMCAmJiBzaS5GcHJlbG9hZF9OID4gMCkgewogICAgICBhbGVydHMucHVzaCh7IHR5cGU6ICJvayIsIHRleHQ6ICJQcmVsb2FkIG1haW50YWlucyBqb2ludCBjb21wcmVzc2lvbjsgbWluaW11bSBleHRlcm5hbCBsb2FkIGlzIHplcm8gaW4gdGhpcyBjeWNsZS4iIH0pOwogICAgfQogICAgaWYgKHNpLmxvYWRUeXBlID09PSAic2hlYXIiKSB7CiAgICAgIGFsZXJ0cy5wdXNoKHsgdHlwZTogIm9rIiwgdGV4dDogIlNoZWFyIGxvYWRpbmcgdXNlcyAwLjU3NyB0ZW5zaWxlLWVxdWl2YWxlbnQgZmFjdG9yICh2b24gTWlzZXMpLiBDb25maXJtIHRocmVhZCBzaGVhciBhcmVhIGlmIGNyaXRpY2FsLiIgfSk7CiAgICB9CiAgICBpZiAoc2kubG9hZFR5cGUgPT09ICJjb21iaW5lZCIpIHsKICAgICAgYWxlcnRzLnB1c2goeyB0eXBlOiAid2FybiIsIHRleHQ6ICJDb21iaW5lZCBsb2FkaW5nIHVzZXMgYSBzaW1wbGlmaWVkIGVxdWl2YWxlbnQtc3RyZXNzIGZhY3Rvci4gRGV0YWlsZWQgYW5hbHlzaXMgbWF5IGJlIHJlcXVpcmVkLiIgfSk7CiAgICB9CgogICAgdmFyIG5vdGUgPSAiIjsKICAgIGlmIChyaXNrLnN0YXR1cyA9PT0gInNhZmUiKSB7CiAgICAgIG5vdGUgPSAiRmF0aWd1ZSBzYWZldHkgZmFjdG9yIGlzIGFjY2VwdGFibGUgZm9yIHRoZSBzZWxlY3RlZCBtZWFuLXN0cmVzcyBtZXRob2QuIEVzdGltYXRlZCBsaWZlIGlzICIgKyBmbXRDeWNsZXMobGlmZU4pICsgIiBjeWNsZXMuIjsKICAgICAgYWxlcnRzLnVuc2hpZnQoeyB0eXBlOiAib2siLCB0ZXh0OiAiQm9sdCBGYXRpZ3VlIEFuYWx5c2lzIFRvb2wgcmVzdWx0OiAiICsgcmlzay5sZXZlbCArICIuIFNGID0gIiArIGZtdChzZkZhdGlndWUsIDIpICsgIi4iIH0pOwogICAgfSBlbHNlIGlmIChyaXNrLnN0YXR1cyA9PT0gImNhdXRpb24iKSB7CiAgICAgIG5vdGUgPSAiU3RyZXNzIGxldmVsIHJlcXVpcmVzIG1vbml0b3JpbmcuIENvbnNpZGVyIGxhcmdlciBkaWFtZXRlciwgaGlnaGVyIGdyYWRlLCBpbXByb3ZlZCBzdXJmYWNlIGZpbmlzaCwgb3IgcmVkdWNlZCBsb2FkIHZhcmlhdGlvbi4iOwogICAgICBhbGVydHMudW5zaGlmdCh7IHR5cGU6ICJ3YXJuIiwgdGV4dDogIkZhdGlndWUgbWFyZ2luIGlzIGxpbWl0ZWQuIFNGID0gIiArIGZtdChpc0Zpbml0ZSh0YXJnZXROKSA\/IHNmVGFyZ2V0IDogc2ZGYXRpZ3VlLCAyKSArICIuIiB9KTsKICAgIH0gZWxzZSB7CiAgICAgIG5vdGUgPSAiRmF0aWd1ZSBmYWlsdXJlIG1heSBvY2N1ciBiZWZvcmUgZXhwZWN0ZWQgc2VydmljZSBsaWZlLiBSZWR1Y2UgYWx0ZXJuYXRpbmcgc3RyZXNzIG9yIGluY3JlYXNlIGZhc3RlbmVyIGNhcGFjaXR5LiI7CiAgICAgIGFsZXJ0cy51bnNoaWZ0KHsgdHlwZTogInJpc2siLCB0ZXh0OiAiSGlnaCBmYXRpZ3VlIHJpc2sg4oCUIGFsdGVybmF0aW5nIHN0cmVzcyBleGNlZWRzIGNvcnJlY3RlZCBhbGxvd2FibGUgZmF0aWd1ZSBzdHJlc3MuIiB9KTsKICAgIH0KCiAgICB2YXIgc0FGbXQgPSBmb3JtYXRTdHJlc3Moc2lnbWFBKTsKICAgIGlmIChlbC5vdXRTaWdtYUEpIGVsLm91dFNpZ21hQS50ZXh0Q29udGVudCA9IHNBRm10LnByaW1hcnk7CiAgICBpZiAoZWwub3V0U2lnbWFBU3ViKSBlbC5vdXRTaWdtYUFTdWIudGV4dENvbnRlbnQgPSAiXHUwM2MzYSA9IChcdTAzYzNtYXggXHUyMjEyIFx1MDNjM21pbikgLyAyIjsKICAgIGlmIChlbC5vdXRMaWZlKSBlbC5vdXRMaWZlLnRleHRDb250ZW50ID0gZm10Q3ljbGVzKGxpZmVOKTsKICAgIGlmIChlbC5vdXRMaWZlU3ViKSBlbC5vdXRMaWZlU3ViLnRleHRDb250ZW50ID0gaXNGaW5pdGUobGlmZU4pID8gIlMtTiBjdXJ2ZSBlc3RpbWF0ZSIgOiAi4oCUIjsKICAgIGlmIChlbC5vdXRTZikgZWwub3V0U2YudGV4dENvbnRlbnQgPSBmbXQoaXNGaW5pdGUodGFyZ2V0TikgPyBzZlRhcmdldCA6IHNmRmF0aWd1ZSwgMik7CiAgICBpZiAoZWwub3V0U2ZTdWIpIGVsLm91dFNmU3ViLnRleHRDb250ZW50ID0gaXNGaW5pdGUodGFyZ2V0TikgPyAiQXQgIiArIGZtdEN5Y2xlcyh0YXJnZXROKSArICIgdGFyZ2V0IGN5Y2xlcyIgOiAiU2UgLyBcdTAzYzNhIChjb3JyZWN0ZWQpIjsKICAgIGlmIChlbC5vdXRTaWdtYU0pIGVsLm91dFNpZ21hTS50ZXh0Q29udGVudCA9IGZvcm1hdFN0cmVzcyhzaWdtYU0pLnByaW1hcnk7CiAgICBpZiAoZWwub3V0RGVsdGEpIGVsLm91dERlbHRhLnRleHRDb250ZW50ID0gZm9ybWF0U3RyZXNzKGRlbHRhU2lnbWEpLnByaW1hcnk7CiAgICBpZiAoZWwub3V0U2lnbWFNYXgpIGVsLm91dFNpZ21hTWF4LnRleHRDb250ZW50ID0gZm9ybWF0U3RyZXNzKHNpZ21hTWF4KS5wcmltYXJ5OwogICAgaWYgKGVsLm91dFNpZ21hTWluKSBlbC5vdXRTaWdtYU1pbi50ZXh0Q29udGVudCA9IGZvcm1hdFN0cmVzcyhzaWdtYU1pbikucHJpbWFyeTsKICAgIGlmIChlbC5vdXRTZUVmZikgZWwub3V0U2VFZmYudGV4dENvbnRlbnQgPSBmb3JtYXRTdHJlc3Moc2VFZmYpLnByaW1hcnk7CiAgICBpZiAoZWwub3V0VXRpbCkgZWwub3V0VXRpbC50ZXh0Q29udGVudCA9IGZtdCh1dGlsLCAxKSArICIlIG9mIGFsbG93YWJsZSBcdTAzYzNhIjsKICAgIGlmIChlbC51dGlsRmlsbCkgewogICAgICBlbC51dGlsRmlsbC5zdHlsZS53aWR0aCA9IGNsYW1wKHV0aWwsIDAsIDEwMCkgKyAiJSI7CiAgICAgIGVsLnV0aWxGaWxsLmNsYXNzTmFtZSA9ICJiZmwtdXRpbC1maWxsIiArIChyaXNrLnN0YXR1cyA9PT0gInJpc2siID8gIiBiZmwtaXMtcmlzayIgOiByaXNrLnN0YXR1cyA9PT0gImNhdXRpb24iID8gIiBiZmwtaXMtY2F1dGlvbiIgOiAiIGJmbC1pcy1vayIpOwogICAgfQoKICAgIGlmIChlbC5nYXVnZVJlYWQpIGVsLmdhdWdlUmVhZC50ZXh0Q29udGVudCA9IGZtdChpc0Zpbml0ZSh0YXJnZXROKSA\/IHNmVGFyZ2V0IDogc2ZGYXRpZ3VlLCAyKTsKICAgIGlmIChlbC5nYXVnZU5vdGUpIGVsLmdhdWdlTm90ZS50ZXh0Q29udGVudCA9ICJGYXRpZ3VlIFNGIChzY2FsZSAw4oCTMykiOwogICAgc2V0R2F1Z2UoaXNGaW5pdGUodGFyZ2V0TikgPyBzZlRhcmdldCA6IHNmRmF0aWd1ZSk7CgogICAgc2V0U2NoZW1hdGljKHJpc2suc3RhdHVzID09PSAicmlzayIgPyAicmlzayIgOiByaXNrLnN0YXR1cyA9PT0gImNhdXRpb24iID8gImNhdXRpb24iIDogIm9rIiwgc2lnbWFNYXgsIHNpZ21hTWluLCBzZUVmZik7CiAgICBkcmF3U25DaGFydChzbiwgc2lnbWFBLCBsaWZlTiwgc2VFZmYsIHRhcmdldE4pOwoKICAgIGlmIChlbC5saWZlQmFyRmlsbCAmJiBpc0Zpbml0ZShsaWZlTikpIHsKICAgICAgdmFyIGxvZ0xpZmUgPSBNYXRoLmxvZzEwKGNsYW1wKGxpZmVOLCAxZTMsIDFlOCkpOwogICAgICB2YXIgcGN0ID0gKChsb2dMaWZlIC0gMykgLyA1KSAqIDEwMDsKICAgICAgZWwubGlmZUJhckZpbGwuc3R5bGUud2lkdGggPSBjbGFtcChwY3QsIDIsIDEwMCkgKyAiJSI7CiAgICAgIGVsLmxpZmVCYXJGaWxsLmNsYXNzTmFtZSA9ICJiZmwtbGlmZS1maWxsIiArIChyaXNrLnN0YXR1cyA9PT0gInJpc2siID8gIiBiZmwtaXMtcmlzayIgOiByaXNrLnN0YXR1cyA9PT0gImNhdXRpb24iID8gIiBiZmwtaXMtY2F1dGlvbiIgOiAiIGJmbC1pcy1vayIpOwogICAgICBpZiAoZWwubGlmZUJhckxhYmVsKSBlbC5saWZlQmFyTGFiZWwudGV4dENvbnRlbnQgPSBmbXRDeWNsZXMobGlmZU4pICsgIiBjeWNsZXMiOwogICAgfQoKICAgIGlmIChlbC50aWxlcykgewogICAgICBlbC50aWxlcy5pbm5lckhUTUwgPQogICAgICAgIHRpbGUoIlN0cmVzcyByYW5nZSBcdTAzOTRcdTAzYzMiLCBmb3JtYXRTdHJlc3MoZGVsdGFTaWdtYSkucHJpbWFyeSwgIlx1MDM5NFx1MDNjMyA9IFx1MDNjM21heCBcdTIyMTIgXHUwM2MzbWluIikgKwogICAgICAgIHRpbGUoIk1lYW4gc3RyZXNzIFx1MDNjM20iLCBmb3JtYXRTdHJlc3Moc2lnbWFNKS5wcmltYXJ5LCAiSW5jbHVkZXMgcHJlbG9hZCIpICsKICAgICAgICB0aWxlKCJNYXggc3RyZXNzIFx1MDNjM21heCIsIGZvcm1hdFN0cmVzcyhzaWdtYU1heCkucHJpbWFyeSwgIkt0IG9uIGV4dGVybmFsIGxvYWQiKSArCiAgICAgICAgdGlsZSgiTWluIHN0cmVzcyBcdTAzYzNtaW4iLCBmb3JtYXRTdHJlc3Moc2lnbWFNaW4pLnByaW1hcnksIGZvcm1hdEZvcmNlKEZtaW4pLnByaW1hcnkgKyAiIG5vbWluYWwgdG90YWwiKSArCiAgICAgICAgdGlsZSgiQ29ycmVjdGVkIFNlIiwgZm9ybWF0U3RyZXNzKHNlRWZmKS5wcmltYXJ5LCBzaS5tZWFuTWV0aG9kLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc2kubWVhbk1ldGhvZC5zbGljZSgxKSArICIgY29ycmVjdGlvbiIpICsKICAgICAgICB0aWxlKCJUZW5zaWxlIGFyZWEgQXQiLCBmb3JtYXRBcmVhKEF0KSwgZWwuYXRNYW51YWwuY2hlY2tlZCA\/ICJtYW51YWwiIDogImZyb20gZCwgcGl0Y2giKSArCiAgICAgICAgdGlsZSgiUy1OIGV4cG9uZW50IGIiLCBmbXQoc24uYiwgNCksICJNYXRlcmlhbCBjdXJ2ZSBmaXQiKSArCiAgICAgICAgdGlsZSgiTG9hZCB0eXBlIiwgc2kubG9hZFR5cGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzaS5sb2FkVHlwZS5zbGljZSgxKSwgIkt0ID0gIiArIGZtdChzaS5rdCwgMikpICsKICAgICAgICB0aWxlKCJTdXJmYWNlIGZhY3RvciIsIGZtdChzdXJmLmZhY3RvciwgMiksIHN1cmYubGFiZWwpOwogICAgfQoKICAgIGlmIChlbC5zdGF0dXNUaXRsZSkgZWwuc3RhdHVzVGl0bGUudGV4dENvbnRlbnQgPSByaXNrLnRpdGxlOwogICAgaWYgKGVsLnN0YXR1c05vdGUpIGVsLnN0YXR1c05vdGUudGV4dENvbnRlbnQgPSBub3RlOwogICAgaWYgKGVsLmJhbm5lcikgZWwuYmFubmVyLmNsYXNzTmFtZSA9ICJiZmwtYmFubmVyIGJmbC1iYW5uZXItIiArIChyaXNrLnN0YXR1cyA9PT0gInNhZmUiID8gIm9rIiA6IHJpc2suc3RhdHVzID09PSAicmlzayIgPyAicmlzayIgOiAiY2F1dGlvbiIpOwoKICAgIGlmIChlbC5hbGVydHMpIHsKICAgICAgZWwuYWxlcnRzLmlubmVySFRNTCA9ICIiOwogICAgICBhbGVydHMuZm9yRWFjaChmdW5jdGlvbiAoYSkgewogICAgICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICBkaXYuY2xhc3NOYW1lID0gImJmbC1hbGVydCBiZmwtYWxlcnQtIiArIChhLnR5cGUgPT09ICJyaXNrIiA\/ICJyaXNrIiA6IGEudHlwZSA9PT0gIm9rIiA\/ICJvayIgOiAid2FybiIpOwogICAgICAgIGRpdi50ZXh0Q29udGVudCA9IGEudGV4dDsKICAgICAgICBlbC5hbGVydHMuYXBwZW5kQ2hpbGQoZGl2KTsKICAgICAgfSk7CiAgICB9CgogICAgc3RhdGUubGl2ZSA9IHRydWU7CiAgICBpZiAoc2Nyb2xsKSB7CiAgICAgIHRyeSB7IGVsLmJhbm5lci5jbG9zZXN0KCIuYmZsLWNhcmQiKS5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAic21vb3RoIiwgYmxvY2s6ICJuZWFyZXN0IiB9KTsgfSBjYXRjaCAoZSkge30KICAgIH0KICB9CgogIGZ1bmN0aW9uIHRpbGUoaywgdiwgdSkgewogICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJiZmwtdGlsZSI+PGRpdiBjbGFzcz0iYmZsLWsiPicgKyBrICsgJzwvZGl2PjxkaXYgY2xhc3M9ImJmbC12Ij4nICsgdiArICc8L2Rpdj48ZGl2IGNsYXNzPSJiZmwtdSI+JyArIHUgKyAnPC9kaXY+PC9kaXY+JzsKICB9CgogIGZ1bmN0aW9uIHJlc2V0QWxsKCkgewogICAgc3RhdGUudW5pdCA9ICJtZXRyaWMiOwogICAgc3RhdGUuc2l6ZUlkID0gREVGQVVMVFMuc2l6ZTsKICAgIHN0YXRlLmxpdmUgPSBmYWxzZTsKICAgIGVsLmQudmFsdWUgPSBTdHJpbmcoREVGQVVMVFMuZCk7CiAgICBlbC5wLnZhbHVlID0gU3RyaW5nKERFRkFVTFRTLnApOwogICAgZWwuYXRNYW51YWwuY2hlY2tlZCA9IGZhbHNlOwogICAgZWwuYXQucmVhZE9ubHkgPSB0cnVlOwogICAgZWwuZ3JhZGUudmFsdWUgPSBERUZBVUxUUy5ncmFkZTsKICAgIGVsLkZtYXgudmFsdWUgPSBTdHJpbmcoREVGQVVMVFMuRm1heCk7CiAgICBlbC5GbWluLnZhbHVlID0gU3RyaW5nKERFRkFVTFRTLkZtaW4pOwogICAgZWwuRnByZWxvYWQudmFsdWUgPSBTdHJpbmcoREVGQVVMVFMuRnByZWxvYWQpOwogICAgZWwuZlVuaXQudmFsdWUgPSBERUZBVUxUUy5mVW5pdDsKICAgIGxhc3RGVW5pdCA9IERFRkFVTFRTLmZVbml0OwogICAgZWwubG9hZFR5cGUudmFsdWUgPSBERUZBVUxUUy5sb2FkVHlwZTsKICAgIGVsLnN1cmZhY2UudmFsdWUgPSBERUZBVUxUUy5zdXJmYWNlOwogICAgZWwua3QudmFsdWUgPSBTdHJpbmcoREVGQVVMVFMua3QpOwogICAgZWwubWVhbk1ldGhvZC52YWx1ZSA9IERFRkFVTFRTLm1lYW5NZXRob2Q7CiAgICBlbC50YXJnZXRDeWNsZXMudmFsdWUgPSBERUZBVUxUUy50YXJnZXRDeWNsZXM7CiAgICBhcHBseUdyYWRlKCk7CiAgICB1cGRhdGVVbml0TGFiZWxzKCk7CiAgICByZW5kZXJTaXplQ2hpcHMoKTsKICAgIHJlZnJlc2hBdCgpOwogICAgY2xlYXJFcnJzKCk7CiAgICBlbC5yZXN1bHRzLmNsYXNzTGlzdC5hZGQoImJmbC1oaWRkZW4iKTsKICAgIHNldEdhdWdlKDApOwogICAgc2V0U2NoZW1hdGljKCJpZGxlIik7CiAgfQoKICBmdW5jdGlvbiBvblJvb3RDbGljayhlKSB7CiAgICB2YXIgYnRuID0gZS50YXJnZXQgJiYgZS50YXJnZXQuY2xvc2VzdCA\/IGUudGFyZ2V0LmNsb3Nlc3QoImJ1dHRvbiIpIDogbnVsbDsKICAgIGlmICghYnRuIHx8ICFyb290LmNvbnRhaW5zKGJ0bikpIHJldHVybjsKICAgIGlmIChidG4uaWQgPT09ICJiZmxCdG5NZXRyaWMiKSB7IGUucHJldmVudERlZmF1bHQoKTsgc3dpdGNoVW5pdCgibWV0cmljIik7IH0KICAgIGVsc2UgaWYgKGJ0bi5pZCA9PT0gImJmbEJ0bkltcGVyaWFsIikgeyBlLnByZXZlbnREZWZhdWx0KCk7IHN3aXRjaFVuaXQoImltcGVyaWFsIik7IH0KICAgIGVsc2UgaWYgKGJ0bi5pZCA9PT0gImJmbEJ0blJlc2V0IikgeyBlLnByZXZlbnREZWZhdWx0KCk7IHJlc2V0QWxsKCk7IH0KICAgIGVsc2UgaWYgKGJ0bi5pZCA9PT0gImJmbEJ0bkNhbGN1bGF0ZSIpIHsgZS5wcmV2ZW50RGVmYXVsdCgpOyBjYWxjdWxhdGUodHJ1ZSk7IH0KICB9CgogIHJvb3QuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBvblJvb3RDbGljayk7CiAgaWYgKGVsLmJ0bkNhbGMpIGVsLmJ0bkNhbGMuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBmdW5jdGlvbiAoKSB7IGNhbGN1bGF0ZSh0cnVlKTsgfSk7CgogIGVsLmF0TWFudWFsLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIGZ1bmN0aW9uICgpIHsKICAgIGVsLmF0LnJlYWRPbmx5ID0gIWVsLmF0TWFudWFsLmNoZWNrZWQ7CiAgICBpZiAoIWVsLmF0TWFudWFsLmNoZWNrZWQpIHJlZnJlc2hBdCgpOwogICAgaWYgKHN0YXRlLmxpdmUpIGNhbGN1bGF0ZShmYWxzZSk7CiAgfSk7CgogIGVsLmdyYWRlLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIGZ1bmN0aW9uICgpIHsKICAgIGlmIChlbC5ncmFkZS52YWx1ZSA9PT0gImN1c3RvbSIpIHsKICAgICAgZWwuc3V0LnJlYWRPbmx5ID0gZmFsc2U7CiAgICAgIGVsLnNlLnJlYWRPbmx5ID0gZmFsc2U7CiAgICB9IGVsc2UgYXBwbHlHcmFkZSgpOwogICAgaWYgKHN0YXRlLmxpdmUpIGNhbGN1bGF0ZShmYWxzZSk7CiAgfSk7CgogIFsic3V0IiwgInNlIl0uZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7CiAgICBlbFtrZXldLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwgZnVuY3Rpb24gKCkgewogICAgICBtYXJrQ3VzdG9tR3JhZGUoKTsKICAgICAgaWYgKHN0YXRlLmxpdmUpIGNhbGN1bGF0ZShmYWxzZSk7CiAgICB9KTsKICB9KTsKCiAgWyJkIiwgInAiXS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsKICAgIGVsW2tleV0uYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLCBmdW5jdGlvbiAoKSB7CiAgICAgIHN0YXRlLnNpemVJZCA9ICIiOwogICAgICBwYWludENoaXBzKCk7CiAgICAgIGlmICghZWwuYXRNYW51YWwuY2hlY2tlZCkgcmVmcmVzaEF0KCk7CiAgICAgIGlmIChzdGF0ZS5saXZlKSBjYWxjdWxhdGUoZmFsc2UpOwogICAgfSk7CiAgfSk7CgogIFsiYXQiLCAiRm1heCIsICJGbWluIiwgIkZwcmVsb2FkIiwgImt0IiwgInRhcmdldEN5Y2xlcyJdLmZvckVhY2goZnVuY3Rpb24gKGtleSkgewogICAgZWxba2V5XS5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsIGZ1bmN0aW9uICgpIHsKICAgICAgaWYgKHN0YXRlLmxpdmUpIGNhbGN1bGF0ZShmYWxzZSk7CiAgICB9KTsKICB9KTsKCiAgWyJsb2FkVHlwZSIsICJzdXJmYWNlIiwgIm1lYW5NZXRob2QiLCAiZlVuaXQiXS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsKICAgIGVsW2tleV0uYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgZnVuY3Rpb24gKCkgewogICAgICBpZiAoa2V5ID09PSAiZlVuaXQiKSB7CiAgICAgICAgdmFyIG5leHQgPSBlbC5mVW5pdC52YWx1ZTsKICAgICAgICBpZiAobmV4dCAhPT0gbGFzdEZVbml0KSB7CiAgICAgICAgICBbIkZtYXgiLCAiRm1pbiIsICJGcHJlbG9hZCJdLmZvckVhY2goZnVuY3Rpb24gKGZrKSB7CiAgICAgICAgICAgIHZhciBGID0gbnVtKGVsW2ZrXSk7CiAgICAgICAgICAgIGlmIChpc0Zpbml0ZShGKSkgZWxbZmtdLnZhbHVlID0gcm91bmRTbWFydChjb252ZXJ0Rm9yY2VVbml0VmFsdWUoRiwgbGFzdEZVbml0LCBuZXh0KSk7CiAgICAgICAgICB9KTsKICAgICAgICAgIGxhc3RGVW5pdCA9IG5leHQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChzdGF0ZS5saXZlKSBjYWxjdWxhdGUoZmFsc2UpOwogICAgfSk7CiAgfSk7CgogIHJvb3QuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIGZ1bmN0aW9uIChlKSB7CiAgICBpZiAoZS5rZXkgPT09ICJFbnRlciIgJiYgZS50YXJnZXQgJiYgZS50YXJnZXQudGFnTmFtZSA9PT0gIklOUFVUIikgewogICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGNhbGN1bGF0ZSh0cnVlKTsKICAgIH0KICB9KTsKCiAgd2luZG93LmJmbFN3aXRjaFVuaXQgPSBzd2l0Y2hVbml0OwogIHdpbmRvdy5iZmxSZXNldCA9IHJlc2V0QWxsOwogIHdpbmRvdy5iZmxDYWxjdWxhdGUgPSBmdW5jdGlvbiAoKSB7IGNhbGN1bGF0ZSh0cnVlKTsgfTsKCiAgdXBkYXRlVW5pdExhYmVscygpOwogIHJlbmRlclNpemVDaGlwcygpOwogIGFwcGx5R3JhZGUoKTsKICByZWZyZXNoQXQoKTsKfSkoKTsK<\/textarea>\n<script id=\"bfl-boot-script\" type=\"text\/javascript\" data-no-minify=\"1\" data-no-defer=\"1\" data-cfasync=\"false\">\n(function(){\nfunction boot(){\nif(window.bflCalculate){return;}\nvar el=document.getElementById(\"bfl-js-b64\");\nif(!el){return;}\nvar code=el.value;\nif(!code){code=el.textContent;}\nif(!code){return;}\ncode=code.replace(\/\\s\/g,\"\");\nvar js=atob(code);\nvar s=document.createElement(\"script\");\ns.type=\"text\/javascript\";\ns.setAttribute(\"data-no-minify\",\"1\");\ns.setAttribute(\"data-cfasync\",\"false\");\ns.text=js;\nvar p=document.getElementById(\"bfl-root\");\nif(!p){p=document.body;}\nif(!p){p=document.getElementsByTagName(\"head\")[0];}\nif(p){p.appendChild(s);}\n}\nwindow.bflBoot=boot;\nif(document.readyState===\"loading\"){document.addEventListener(\"DOMContentLoaded\",boot);}\nelse{boot();}\n})();\n<\/script>\n\n<\/div>\n<\/body>\n<\/html>\n\n","protected":false},"excerpt":{"rendered":"<p>The Bolt Fatigue Life Calculator is an advanced engineering tool designed to estimate the service life of bolts under repeated and cyclic loading conditions. By&#8230;<\/p>","protected":false},"author":2,"featured_media":24693,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"pmpro_default_level":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[8520],"tags":[8608,8609,8603,8610],"class_list":["post-24692","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-mechanical-basic-component-design","tag-bolt-analysis","tag-bolt-fatigue","tag-fastener-design","tag-fatigue-life","pmpro-has-access"],"acf":[],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/www.mechstream.com\/wp-content\/uploads\/2026\/08\/Bolt-Fatigue-Life-Calculator.png","_links":{"self":[{"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/posts\/24692","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/comments?post=24692"}],"version-history":[{"count":2,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/posts\/24692\/revisions"}],"predecessor-version":[{"id":24695,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/posts\/24692\/revisions\/24695"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/media\/24693"}],"wp:attachment":[{"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/media?parent=24692"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/categories?post=24692"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/tags?post=24692"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}