{"id":24743,"date":"2026-08-27T07:27:57","date_gmt":"2026-08-27T07:27:57","guid":{"rendered":"https:\/\/www.mechstream.com\/?p=24743"},"modified":"2026-08-27T07:28:01","modified_gmt":"2026-08-27T07:28:01","slug":"o-ring-groove-dimensions-calculator","status":"publish","type":"post","link":"https:\/\/www.mechstream.com\/ru\/o-ring-groove-dimensions-calculator\/","title":{"rendered":"O-Ring Groove Dimensions Calculator"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">The <strong>O-Ring Groove Dimensions Calculator<\/strong> is a practical engineering tool designed to determine suitable groove depth, groove width, compression ratio, and gland fill for O-ring sealing applications. By entering O-ring dimensions, seal type, material, and operating conditions, users can quickly optimize groove geometry and evaluate sealing performance. The O-Ring Groove Dimensions Calculator supports hydraulic, pneumatic, automotive, and industrial seal design while helping reduce leakage, excessive compression, extrusion, and premature O-ring failure.<\/p>\n\n\n\n<!-- WordPress Custom HTML Block: copy this entire file content -->\n<style>\n\/* O-Ring Groove Dimensions Calculator \u2014 WordPress-safe scoped styles *\/\n\n.entry-content #oring-groove-calculator,\n.wp-block-html #oring-groove-calculator,\n.elementor-widget-container #oring-groove-calculator,\n#oring-groove-calculator {\n    --ogd-primary: #1e40af;\n    --ogd-primary-light: #3b82f6;\n    --ogd-primary-dark: #1e3a8a;\n    --ogd-success: #16a34a;\n    --ogd-warning: #d97706;\n    --ogd-danger: #dc2626;\n    --ogd-card-bg: #ffffff;\n    --ogd-text: #1e293b;\n    --ogd-text-muted: #64748b;\n    --ogd-border: #e2e8f0;\n    --ogd-shadow: 0 1px 3px rgba(0, 0, 0, 0.08), 0 4px 12px rgba(0, 0, 0, 0.04);\n    --ogd-radius: 10px;\n    --ogd-font: 'Segoe UI', system-ui, -apple-system, BlinkMacSystemFont, sans-serif;\n\n    isolation: isolate;\n    contain: layout style;\n    font-family: var(--ogd-font) !important;\n    font-size: 16px !important;\n    line-height: 1.6 !important;\n    color: var(--ogd-text) !important;\n    box-sizing: border-box !important;\n    width: 100% !important;\n    max-width: 100% !important;\n    background: transparent !important;\n    text-align: left !important;\n    margin: 0 !important;\n    padding: 0 !important;\n    float: none !important;\n    clear: both !important;\n}\n\n.entry-content #oring-groove-calculator *,\n.entry-content #oring-groove-calculator *::before,\n.entry-content #oring-groove-calculator *::after,\n.wp-block-html #oring-groove-calculator *,\n.wp-block-html #oring-groove-calculator *::before,\n.wp-block-html #oring-groove-calculator *::after,\n.elementor-widget-container #oring-groove-calculator *,\n.elementor-widget-container #oring-groove-calculator *::before,\n.elementor-widget-container #oring-groove-calculator *::after,\n#oring-groove-calculator *,\n#oring-groove-calculator *::before,\n#oring-groove-calculator *::after {\n    box-sizing: border-box !important;\n}\n\n.entry-content #oring-groove-calculator section,\n.wp-block-html #oring-groove-calculator section,\n.elementor-widget-container #oring-groove-calculator section,\n#oring-groove-calculator section {\n    margin: 0 !important;\n    padding: 0 !important;\n    border: none !important;\n    background: transparent !important;\n    box-shadow: none !important;\n    float: none !important;\n    width: auto !important;\n    max-width: none !important;\n}\n\n.entry-content #oring-groove-calculator .ogd-container,\n.wp-block-html #oring-groove-calculator .ogd-container,\n.elementor-widget-container #oring-groove-calculator .ogd-container,\n#oring-groove-calculator .ogd-container {\n    max-width: 1000px !important;\n    margin: 0 auto !important;\n    padding: 0 !important;\n    width: 100% !important;\n    float: none !important;\n}\n\n.entry-content #oring-groove-calculator .ogd-layout,\n.wp-block-html #oring-groove-calculator .ogd-layout,\n.elementor-widget-container #oring-groove-calculator .ogd-layout,\n#oring-groove-calculator .ogd-layout {\n    display: flex !important;\n    flex-direction: column !important;\n    gap: 1.25rem !important;\n    align-items: stretch !important;\n    margin: 0 !important;\n    width: 100% !important;\n    float: none !important;\n}\n\n.entry-content #oring-groove-calculator .ogd-card,\n.wp-block-html #oring-groove-calculator .ogd-card,\n.elementor-widget-container #oring-groove-calculator .ogd-card,\n#oring-groove-calculator .ogd-card {\n    background: var(--ogd-card-bg) !important;\n    border-radius: var(--ogd-radius) !important;\n    box-shadow: var(--ogd-shadow) !important;\n    padding: 1.5rem !important;\n    margin: 0 0 1.25rem 0 !important;\n    border: 1px solid var(--ogd-border) !important;\n    width: 100% !important;\n    float: none !important;\n}\n\n.entry-content #oring-groove-calculator .ogd-card h2,\n.wp-block-html #oring-groove-calculator .ogd-card h2,\n.elementor-widget-container #oring-groove-calculator .ogd-card h2,\n#oring-groove-calculator .ogd-card h2 {\n    font-size: 1.1rem !important;\n    font-weight: 600 !important;\n    color: var(--ogd-primary-dark) !important;\n    margin: 0 0 1rem 0 !important;\n    padding: 0 0 0.5rem 0 !important;\n    border: none !important;\n    border-bottom: 2px solid var(--ogd-primary-light) !important;\n    line-height: 1.3 !important;\n    background: transparent !important;\n    text-transform: none !important;\n    letter-spacing: normal !important;\n}\n\n.entry-content #oring-groove-calculator .ogd-card h3,\n.wp-block-html #oring-groove-calculator .ogd-card h3,\n.elementor-widget-container #oring-groove-calculator .ogd-card h3,\n#oring-groove-calculator .ogd-card h3 {\n    font-size: 0.95rem !important;\n    font-weight: 600 !important;\n    color: var(--ogd-text) !important;\n    margin: 0 0 0.75rem 0 !important;\n    padding: 0 !important;\n    line-height: 1.3 !important;\n    border: none !important;\n    background: transparent !important;\n    text-transform: none !important;\n}\n\n.entry-content #oring-groove-calculator .ogd-subsection-title,\n.wp-block-html #oring-groove-calculator .ogd-subsection-title,\n.elementor-widget-container #oring-groove-calculator .ogd-subsection-title,\n#oring-groove-calculator .ogd-subsection-title {\n    font-size: 0.95rem !important;\n    font-weight: 600 !important;\n    color: var(--ogd-primary-dark) !important;\n    margin: 1.25rem 0 0.75rem 0 !important;\n    padding: 0.65rem 0 0.5rem 0 !important;\n    border: none !important;\n    border-top: 1px solid var(--ogd-border) !important;\n    border-bottom: 1px solid rgba(59, 130, 246, 0.25) !important;\n    line-height: 1.3 !important;\n    background: transparent !important;\n    text-transform: none !important;\n}\n\n.entry-content #oring-groove-calculator .ogd-input-section > .ogd-subsection-title:first-of-type,\n.wp-block-html #oring-groove-calculator .ogd-input-section > .ogd-subsection-title:first-of-type,\n.elementor-widget-container #oring-groove-calculator .ogd-input-section > .ogd-subsection-title:first-of-type,\n#oring-groove-calculator .ogd-input-section > .ogd-subsection-title:first-of-type {\n    margin-top: 0 !important;\n    padding-top: 0 !important;\n    border-top: none !important;\n}\n\n.entry-content #oring-groove-calculator .ogd-input-section .ogd-btn-row,\n.wp-block-html #oring-groove-calculator .ogd-input-section .ogd-btn-row,\n.elementor-widget-container #oring-groove-calculator .ogd-input-section .ogd-btn-row,\n#oring-groove-calculator .ogd-input-section .ogd-btn-row {\n    margin-top: 1.25rem !important;\n    padding-top: 1rem !important;\n    border-top: 1px solid var(--ogd-border) !important;\n    justify-content: center !important;\n}\n\n.entry-content #oring-groove-calculator .ogd-input-section .ogd-btn-primary,\n.wp-block-html #oring-groove-calculator .ogd-input-section .ogd-btn-primary,\n.elementor-widget-container #oring-groove-calculator .ogd-input-section .ogd-btn-primary,\n#oring-groove-calculator .ogd-input-section .ogd-btn-primary {\n    min-width: 160px !important;\n    width: auto !important;\n    margin: 0 !important;\n    flex: none !important;\n}\n\n.entry-content #oring-groove-calculator .ogd-input-grid,\n.wp-block-html #oring-groove-calculator .ogd-input-grid,\n.elementor-widget-container #oring-groove-calculator .ogd-input-grid,\n#oring-groove-calculator .ogd-input-grid {\n    display: grid !important;\n    grid-template-columns: 1fr 1fr !important;\n    gap: 0 1.25rem !important;\n    width: 100% !important;\n}\n\n.entry-content #oring-groove-calculator .ogd-input-grid .ogd-form-group,\n.wp-block-html #oring-groove-calculator .ogd-input-grid .ogd-form-group,\n.elementor-widget-container #oring-groove-calculator .ogd-input-grid .ogd-form-group,\n#oring-groove-calculator .ogd-input-grid .ogd-form-group {\n    margin: 0 0 1rem 0 !important;\n    padding: 0 !important;\n    width: auto !important;\n    float: none !important;\n    clear: none !important;\n}\n\n.entry-content #oring-groove-calculator .ogd-form-group.ogd-full-width,\n.wp-block-html #oring-groove-calculator .ogd-form-group.ogd-full-width,\n.elementor-widget-container #oring-groove-calculator .ogd-form-group.ogd-full-width,\n#oring-groove-calculator .ogd-form-group.ogd-full-width {\n    grid-column: 1 \/ -1 !important;\n}\n\n@media (max-width: 640px) {\n    .entry-content #oring-groove-calculator .ogd-input-grid,\n    .wp-block-html #oring-groove-calculator .ogd-input-grid,\n    .elementor-widget-container #oring-groove-calculator .ogd-input-grid,\n    #oring-groove-calculator .ogd-input-grid {\n        grid-template-columns: 1fr !important;\n    }\n}\n\n.entry-content #oring-groove-calculator .ogd-unit-toggle,\n.wp-block-html #oring-groove-calculator .ogd-unit-toggle,\n.elementor-widget-container #oring-groove-calculator .ogd-unit-toggle,\n#oring-groove-calculator .ogd-unit-toggle {\n    display: flex !important;\n    flex-wrap: wrap !important;\n    gap: 1rem !important;\n    width: 100% !important;\n}\n\n.entry-content #oring-groove-calculator .ogd-radio-label,\n.wp-block-html #oring-groove-calculator .ogd-radio-label,\n.elementor-widget-container #oring-groove-calculator .ogd-radio-label,\n#oring-groove-calculator .ogd-radio-label {\n    display: inline-flex !important;\n    align-items: center !important;\n    gap: 0.5rem !important;\n    cursor: pointer !important;\n    padding: 0.5rem 1rem !important;\n    border: 2px solid var(--ogd-border) !important;\n    border-radius: 8px !important;\n    font-size: 0.9rem !important;\n    margin: 0 !important;\n    font-weight: normal !important;\n    background: #fff !important;\n    color: var(--ogd-text) !important;\n    width: auto !important;\n    float: none !important;\n}\n\n.entry-content #oring-groove-calculator .ogd-radio-label:has(input:checked),\n.wp-block-html #oring-groove-calculator .ogd-radio-label:has(input:checked),\n.elementor-widget-container #oring-groove-calculator .ogd-radio-label:has(input:checked),\n#oring-groove-calculator .ogd-radio-label:has(input:checked) {\n    border-color: var(--ogd-primary) !important;\n    background: #eff6ff !important;\n    color: var(--ogd-primary-dark) !important;\n}\n\n.entry-content #oring-groove-calculator .ogd-radio-label input,\n.wp-block-html #oring-groove-calculator .ogd-radio-label input,\n.elementor-widget-container #oring-groove-calculator .ogd-radio-label input,\n#oring-groove-calculator .ogd-radio-label input {\n    accent-color: var(--ogd-primary) !important;\n    margin: 0 !important;\n    width: auto !important;\n    height: auto !important;\n}\n\n.entry-content #oring-groove-calculator .ogd-form-group label,\n.wp-block-html #oring-groove-calculator .ogd-form-group label,\n.elementor-widget-container #oring-groove-calculator .ogd-form-group label,\n#oring-groove-calculator .ogd-form-group label {\n    display: flex !important;\n    align-items: center !important;\n    gap: 0.35rem !important;\n    font-weight: 600 !important;\n    font-size: 0.875rem !important;\n    margin: 0 0 0.4rem 0 !important;\n    padding: 0 !important;\n    color: var(--ogd-text) !important;\n    width: auto !important;\n    float: none !important;\n    line-height: 1.4 !important;\n}\n\n.entry-content #oring-groove-calculator .ogd-form-group.ogd-optional label::after,\n.wp-block-html #oring-groove-calculator .ogd-form-group.ogd-optional label::after,\n.elementor-widget-container #oring-groove-calculator .ogd-form-group.ogd-optional label::after,\n#oring-groove-calculator .ogd-form-group.ogd-optional label::after {\n    content: ' (optional)' !important;\n    font-weight: normal !important;\n    color: var(--ogd-text-muted) !important;\n    font-size: 0.85em !important;\n}\n\n.entry-content #oring-groove-calculator .ogd-input-with-unit,\n.wp-block-html #oring-groove-calculator .ogd-input-with-unit,\n.elementor-widget-container #oring-groove-calculator .ogd-input-with-unit,\n#oring-groove-calculator .ogd-input-with-unit {\n    display: flex !important;\n    align-items: center !important;\n    gap: 0.5rem !important;\n    width: 100% !important;\n}\n\n.entry-content #oring-groove-calculator .ogd-input-with-unit input,\n.entry-content #oring-groove-calculator .ogd-input-with-unit select,\n.entry-content #oring-groove-calculator .ogd-form-group > input[type=\"number\"],\n.wp-block-html #oring-groove-calculator .ogd-input-with-unit input,\n.wp-block-html #oring-groove-calculator .ogd-input-with-unit select,\n.wp-block-html #oring-groove-calculator .ogd-form-group > input[type=\"number\"],\n.elementor-widget-container #oring-groove-calculator .ogd-input-with-unit input,\n.elementor-widget-container #oring-groove-calculator .ogd-input-with-unit select,\n.elementor-widget-container #oring-groove-calculator .ogd-form-group > input[type=\"number\"],\n#oring-groove-calculator .ogd-input-with-unit input,\n#oring-groove-calculator .ogd-input-with-unit select,\n#oring-groove-calculator .ogd-form-group > input[type=\"number\"] {\n    flex: 1 1 0% !important;\n    width: auto !important;\n    min-width: 0 !important;\n    max-width: 100% !important;\n    padding: 0.6rem 0.75rem !important;\n    border: 1.5px solid var(--ogd-border) !important;\n    border-radius: 6px !important;\n    font-size: 0.95rem !important;\n    font-family: inherit !important;\n    line-height: normal !important;\n    background: #fff !important;\n    color: var(--ogd-text) !important;\n    margin: 0 !important;\n    height: auto !important;\n    min-height: 0 !important;\n    box-shadow: none !important;\n    appearance: auto !important;\n    -webkit-appearance: auto !important;\n    display: block !important;\n    float: none !important;\n}\n\n.entry-content #oring-groove-calculator .ogd-input-with-unit input:focus,\n.entry-content #oring-groove-calculator .ogd-input-with-unit select:focus,\n.entry-content #oring-groove-calculator .ogd-form-group > input:focus,\n.wp-block-html #oring-groove-calculator .ogd-input-with-unit input:focus,\n.wp-block-html #oring-groove-calculator .ogd-input-with-unit select:focus,\n.wp-block-html #oring-groove-calculator .ogd-form-group > input:focus,\n.elementor-widget-container #oring-groove-calculator .ogd-input-with-unit input:focus,\n.elementor-widget-container #oring-groove-calculator .ogd-input-with-unit select:focus,\n.elementor-widget-container #oring-groove-calculator .ogd-form-group > input:focus,\n#oring-groove-calculator .ogd-input-with-unit input:focus,\n#oring-groove-calculator .ogd-input-with-unit select:focus,\n#oring-groove-calculator .ogd-form-group > input:focus {\n    outline: none !important;\n    border-color: var(--ogd-primary-light) !important;\n    box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.15) !important;\n}\n\n.entry-content #oring-groove-calculator .ogd-input-with-unit input.ogd-error,\n.wp-block-html #oring-groove-calculator .ogd-input-with-unit input.ogd-error,\n.elementor-widget-container #oring-groove-calculator .ogd-input-with-unit input.ogd-error,\n#oring-groove-calculator .ogd-input-with-unit input.ogd-error {\n    border-color: var(--ogd-danger) !important;\n}\n\n.entry-content #oring-groove-calculator .ogd-unit-label,\n.wp-block-html #oring-groove-calculator .ogd-unit-label,\n.elementor-widget-container #oring-groove-calculator .ogd-unit-label,\n#oring-groove-calculator .ogd-unit-label {\n    min-width: 3rem !important;\n    flex: 0 0 3rem !important;\n    font-size: 0.85rem !important;\n    color: var(--ogd-text-muted) !important;\n    font-weight: 500 !important;\n    text-align: left !important;\n    margin: 0 !important;\n    padding: 0 !important;\n}\n\n.entry-content #oring-groove-calculator .ogd-unit-spacer,\n.wp-block-html #oring-groove-calculator .ogd-unit-spacer,\n.elementor-widget-container #oring-groove-calculator .ogd-unit-spacer,\n#oring-groove-calculator .ogd-unit-spacer {\n    visibility: hidden !important;\n}\n\n.entry-content #oring-groove-calculator .ogd-error-msg,\n.wp-block-html #oring-groove-calculator .ogd-error-msg,\n.elementor-widget-container #oring-groove-calculator .ogd-error-msg,\n#oring-groove-calculator .ogd-error-msg {\n    display: block !important;\n    color: var(--ogd-danger) !important;\n    font-size: 0.8rem !important;\n    margin-top: 0.25rem !important;\n}\n\n.entry-content #oring-groove-calculator .ogd-hidden,\n.wp-block-html #oring-groove-calculator .ogd-hidden,\n.elementor-widget-container #oring-groove-calculator .ogd-hidden,\n#oring-groove-calculator .ogd-hidden {\n    display: none !important;\n}\n\n.entry-content #oring-groove-calculator .ogd-tooltip,\n.wp-block-html #oring-groove-calculator .ogd-tooltip,\n.elementor-widget-container #oring-groove-calculator .ogd-tooltip,\n#oring-groove-calculator .ogd-tooltip {\n    display: inline-flex !important;\n    align-items: center !important;\n    justify-content: center !important;\n    width: 16px !important;\n    height: 16px !important;\n    border-radius: 50% !important;\n    background: var(--ogd-text-muted) !important;\n    color: #fff !important;\n    font-size: 0.65rem !important;\n    font-weight: 700 !important;\n    cursor: help !important;\n    position: relative !important;\n    flex-shrink: 0 !important;\n}\n\n.entry-content #oring-groove-calculator .ogd-tooltip::after,\n.wp-block-html #oring-groove-calculator .ogd-tooltip::after,\n.elementor-widget-container #oring-groove-calculator .ogd-tooltip::after,\n#oring-groove-calculator .ogd-tooltip::after {\n    content: attr(data-tip) !important;\n    position: absolute !important;\n    bottom: calc(100% + 6px) !important;\n    left: 50% !important;\n    transform: translateX(-50%) !important;\n    background: var(--ogd-text) !important;\n    color: #fff !important;\n    padding: 0.5rem 0.75rem !important;\n    border-radius: 6px !important;\n    font-size: 0.75rem !important;\n    font-weight: 400 !important;\n    white-space: normal !important;\n    width: max-content !important;\n    max-width: 240px !important;\n    opacity: 0 !important;\n    visibility: hidden !important;\n    transition: opacity 0.2s !important;\n    z-index: 100 !important;\n    pointer-events: none !important;\n    line-height: 1.4 !important;\n}\n\n.entry-content #oring-groove-calculator .ogd-tooltip:hover::after,\n.wp-block-html #oring-groove-calculator .ogd-tooltip:hover::after,\n.elementor-widget-container #oring-groove-calculator .ogd-tooltip:hover::after,\n#oring-groove-calculator .ogd-tooltip:hover::after {\n    opacity: 1 !important;\n    visibility: visible !important;\n}\n\n.entry-content #oring-groove-calculator .ogd-btn-row,\n.wp-block-html #oring-groove-calculator .ogd-btn-row,\n.elementor-widget-container #oring-groove-calculator .ogd-btn-row,\n#oring-groove-calculator .ogd-btn-row {\n    display: flex !important;\n    flex-wrap: wrap !important;\n    gap: 0.75rem !important;\n    justify-content: center !important;\n    margin-top: 0.5rem !important;\n    width: 100% !important;\n}\n\n.entry-content #oring-groove-calculator .ogd-btn,\n.wp-block-html #oring-groove-calculator .ogd-btn,\n.elementor-widget-container #oring-groove-calculator .ogd-btn,\n#oring-groove-calculator .ogd-btn {\n    display: inline-block !important;\n    padding: 0.75rem 1.5rem !important;\n    border: none !important;\n    border-radius: 8px !important;\n    font-size: 0.95rem !important;\n    font-weight: 600 !important;\n    font-family: inherit !important;\n    line-height: normal !important;\n    cursor: pointer !important;\n    transition: all 0.2s !important;\n    text-align: center !important;\n    text-decoration: none !important;\n    box-shadow: none !important;\n    float: none !important;\n    text-transform: none !important;\n    letter-spacing: normal !important;\n    width: auto !important;\n}\n\n.entry-content #oring-groove-calculator .ogd-btn-primary,\n.wp-block-html #oring-groove-calculator .ogd-btn-primary,\n.elementor-widget-container #oring-groove-calculator .ogd-btn-primary,\n#oring-groove-calculator .ogd-btn-primary {\n    background: var(--ogd-primary) !important;\n    color: #fff !important;\n}\n\n.entry-content #oring-groove-calculator .ogd-btn-primary:hover,\n.wp-block-html #oring-groove-calculator .ogd-btn-primary:hover,\n.elementor-widget-container #oring-groove-calculator .ogd-btn-primary:hover,\n#oring-groove-calculator .ogd-btn-primary:hover {\n    background: var(--ogd-primary-dark) !important;\n    color: #fff !important;\n    transform: translateY(-1px) !important;\n    box-shadow: 0 4px 12px rgba(30, 64, 175, 0.3) !important;\n}\n\n.entry-content #oring-groove-calculator .ogd-status-banner,\n.wp-block-html #oring-groove-calculator .ogd-status-banner,\n.elementor-widget-container #oring-groove-calculator .ogd-status-banner,\n#oring-groove-calculator .ogd-status-banner {\n    display: flex !important;\n    align-items: center !important;\n    gap: 1rem !important;\n    padding: 1rem 1.25rem !important;\n    border-radius: 8px !important;\n    margin-bottom: 1.25rem !important;\n    background: #f1f5f9 !important;\n    border: none !important;\n    border-left: 4px solid var(--ogd-text-muted) !important;\n}\n\n.entry-content #oring-groove-calculator .ogd-status-banner.ogd-status-recommended,\n.wp-block-html #oring-groove-calculator .ogd-status-banner.ogd-status-recommended,\n.elementor-widget-container #oring-groove-calculator .ogd-status-banner.ogd-status-recommended,\n#oring-groove-calculator .ogd-status-banner.ogd-status-recommended {\n    background: #dcfce7 !important;\n    border-left-color: var(--ogd-success) !important;\n}\n\n.entry-content #oring-groove-calculator .ogd-status-banner.ogd-status-review,\n.wp-block-html #oring-groove-calculator .ogd-status-banner.ogd-status-review,\n.elementor-widget-container #oring-groove-calculator .ogd-status-banner.ogd-status-review,\n#oring-groove-calculator .ogd-status-banner.ogd-status-review {\n    background: #fef3c7 !important;\n    border-left-color: var(--ogd-warning) !important;\n}\n\n.entry-content #oring-groove-calculator .ogd-status-banner.ogd-status-high,\n.wp-block-html #oring-groove-calculator .ogd-status-banner.ogd-status-high,\n.elementor-widget-container #oring-groove-calculator .ogd-status-banner.ogd-status-high,\n#oring-groove-calculator .ogd-status-banner.ogd-status-high {\n    background: #fee2e2 !important;\n    border-left-color: var(--ogd-danger) !important;\n}\n\n.entry-content #oring-groove-calculator .ogd-status-icon,\n.wp-block-html #oring-groove-calculator .ogd-status-icon,\n.elementor-widget-container #oring-groove-calculator .ogd-status-icon,\n#oring-groove-calculator .ogd-status-icon {\n    font-size: 1.75rem !important;\n    line-height: 1 !important;\n    font-weight: 700 !important;\n    min-width: 1.75rem !important;\n    text-align: center !important;\n}\n\n.entry-content #oring-groove-calculator .ogd-status-banner strong,\n.wp-block-html #oring-groove-calculator .ogd-status-banner strong,\n.elementor-widget-container #oring-groove-calculator .ogd-status-banner strong,\n#oring-groove-calculator .ogd-status-banner strong {\n    display: block !important;\n    font-size: 1rem !important;\n    font-weight: 600 !important;\n    color: var(--ogd-text) !important;\n}\n\n.entry-content #oring-groove-calculator .ogd-status-banner p,\n.wp-block-html #oring-groove-calculator .ogd-status-banner p,\n.elementor-widget-container #oring-groove-calculator .ogd-status-banner p,\n#oring-groove-calculator .ogd-status-banner p {\n    font-size: 0.85rem !important;\n    color: var(--ogd-text-muted) !important;\n    margin: 0.15rem 0 0 0 !important;\n    padding: 0 !important;\n}\n\n.entry-content #oring-groove-calculator .ogd-range-hint,\n.wp-block-html #oring-groove-calculator .ogd-range-hint,\n.elementor-widget-container #oring-groove-calculator .ogd-range-hint,\n#oring-groove-calculator .ogd-range-hint {\n    font-size: 0.8rem !important;\n    color: var(--ogd-text-muted) !important;\n    margin: 0.25rem 0 0 0 !important;\n    padding: 0 !important;\n    font-style: italic !important;\n}\n\n.entry-content #oring-groove-calculator .ogd-results-grid,\n.wp-block-html #oring-groove-calculator .ogd-results-grid,\n.elementor-widget-container #oring-groove-calculator .ogd-results-grid,\n#oring-groove-calculator .ogd-results-grid {\n    display: grid !important;\n    grid-template-columns: repeat(2, 1fr) !important;\n    gap: 0.75rem !important;\n    width: 100% !important;\n}\n\n@media (max-width: 520px) {\n    .entry-content #oring-groove-calculator .ogd-results-grid,\n    .wp-block-html #oring-groove-calculator .ogd-results-grid,\n    .elementor-widget-container #oring-groove-calculator .ogd-results-grid,\n    #oring-groove-calculator .ogd-results-grid {\n        grid-template-columns: 1fr !important;\n    }\n}\n\n.entry-content #oring-groove-calculator .ogd-result-item,\n.wp-block-html #oring-groove-calculator .ogd-result-item,\n.elementor-widget-container #oring-groove-calculator .ogd-result-item,\n#oring-groove-calculator .ogd-result-item {\n    padding: 0.85rem 1rem !important;\n    background: #f8fafc !important;\n    border-radius: 8px !important;\n    border: 1px solid var(--ogd-border) !important;\n    margin: 0 !important;\n}\n\n.entry-content #oring-groove-calculator .ogd-result-item.ogd-highlight,\n.wp-block-html #oring-groove-calculator .ogd-result-item.ogd-highlight,\n.elementor-widget-container #oring-groove-calculator .ogd-result-item.ogd-highlight,\n#oring-groove-calculator .ogd-result-item.ogd-highlight {\n    grid-column: 1 \/ -1 !important;\n    background: linear-gradient(135deg, #eff6ff 0%, #dbeafe 100%) !important;\n    border-color: var(--ogd-primary-light) !important;\n}\n\n.entry-content #oring-groove-calculator .ogd-result-label,\n.wp-block-html #oring-groove-calculator .ogd-result-label,\n.elementor-widget-container #oring-groove-calculator .ogd-result-label,\n#oring-groove-calculator .ogd-result-label {\n    display: block !important;\n    font-size: 0.78rem !important;\n    color: var(--ogd-text-muted) !important;\n    text-transform: uppercase !important;\n    letter-spacing: 0.03em !important;\n    margin-bottom: 0.25rem !important;\n}\n\n.entry-content #oring-groove-calculator .ogd-result-value,\n.wp-block-html #oring-groove-calculator .ogd-result-value,\n.elementor-widget-container #oring-groove-calculator .ogd-result-value,\n#oring-groove-calculator .ogd-result-value {\n    display: block !important;\n    font-size: 1.25rem !important;\n    font-weight: 700 !important;\n    color: var(--ogd-primary-dark) !important;\n    font-variant-numeric: tabular-nums !important;\n}\n\n.entry-content #oring-groove-calculator .ogd-result-item.ogd-highlight .ogd-result-value,\n.wp-block-html #oring-groove-calculator .ogd-result-item.ogd-highlight .ogd-result-value,\n.elementor-widget-container #oring-groove-calculator .ogd-result-item.ogd-highlight .ogd-result-value,\n#oring-groove-calculator .ogd-result-item.ogd-highlight .ogd-result-value {\n    font-size: 1.5rem !important;\n}\n\n.entry-content #oring-groove-calculator .ogd-result-value.ogd-risk-low,\n.wp-block-html #oring-groove-calculator .ogd-result-value.ogd-risk-low,\n.elementor-widget-container #oring-groove-calculator .ogd-result-value.ogd-risk-low,\n#oring-groove-calculator .ogd-result-value.ogd-risk-low {\n    color: var(--ogd-success) !important;\n}\n\n.entry-content #oring-groove-calculator .ogd-result-value.ogd-risk-caution,\n.wp-block-html #oring-groove-calculator .ogd-result-value.ogd-risk-caution,\n.elementor-widget-container #oring-groove-calculator .ogd-result-value.ogd-risk-caution,\n#oring-groove-calculator .ogd-result-value.ogd-risk-caution {\n    color: var(--ogd-warning) !important;\n}\n\n.entry-content #oring-groove-calculator .ogd-result-value.ogd-risk-high,\n.wp-block-html #oring-groove-calculator .ogd-result-value.ogd-risk-high,\n.elementor-widget-container #oring-groove-calculator .ogd-result-value.ogd-risk-high,\n#oring-groove-calculator .ogd-result-value.ogd-risk-high {\n    color: var(--ogd-danger) !important;\n}\n<\/style>\n\n    <div id=\"oring-groove-calculator\">\n        <div class=\"ogd-container\">\n            <div class=\"ogd-layout\">\n                <section class=\"ogd-card ogd-input-section\">\n                    <h2>Input Parameters<\/h2>\n\n                        <h3 class=\"ogd-subsection-title\">O-Ring Data<\/h3>\n                        <div class=\"ogd-input-grid\">\n                            <div class=\"ogd-form-group ogd-full-width\">\n                                <label>Unit System<\/label>\n                                <div class=\"ogd-unit-toggle\">\n                                    <label class=\"ogd-radio-label\">\n                                        <input type=\"radio\" name=\"ogd-unitSystem\" value=\"metric\" checked>\n                                        <span>Metric (mm, MPa, &deg;C)<\/span>\n                                    <\/label>\n                                    <label class=\"ogd-radio-label\">\n                                        <input type=\"radio\" name=\"ogd-unitSystem\" value=\"imperial\">\n                                        <span>Imperial (inch, psi, &deg;F)<\/span>\n                                    <\/label>\n                                <\/div>\n                            <\/div>\n\n                            <div class=\"ogd-form-group ogd-full-width\">\n                                <label for=\"ogd-sealType\">\n                                    Seal Type\n                                    <span class=\"ogd-tooltip\" data-tip=\"Select sealing configuration: radial piston\/rod, axial face, reciprocating, rotary, or custom.\">?<\/span>\n                                <\/label>\n                                <div class=\"ogd-input-with-unit\">\n                                    <select id=\"ogd-sealType\">\n                                        <option value=\"static-radial-piston\" selected>Static Radial Piston Seal<\/option>\n                                        <option value=\"static-radial-rod\">Static Radial Rod Seal<\/option>\n                                        <option value=\"static-axial\">Static Axial Face Seal<\/option>\n                                        <option value=\"reciprocating\">Reciprocating Dynamic Seal<\/option>\n                                        <option value=\"rotary\">Rotary Dynamic Seal<\/option>\n                                        <option value=\"custom\">Custom Seal<\/option>\n                                    <\/select>\n                                    <span class=\"ogd-unit-label ogd-unit-spacer\" aria-hidden=\"true\"><\/span>\n                                <\/div>\n                            <\/div>\n\n                            <div class=\"ogd-form-group\">\n                                <label for=\"ogd-crossSection\">\n                                    O-Ring Cross-Section Diameter\n                                    <span class=\"ogd-tooltip\" data-tip=\"Nominal O-ring cord diameter (d). Standard AS568: 1.78, 2.62, 3.53, 5.33 mm.\">?<\/span>\n                                <\/label>\n                                <div class=\"ogd-input-with-unit\">\n                                    <input type=\"number\" id=\"ogd-crossSection\" value=\"3.53\" step=\"any\" min=\"0.001\">\n                                    <span class=\"ogd-unit-label\" data-unit=\"length\">mm<\/span>\n                                <\/div>\n                                <span class=\"ogd-error-msg\" id=\"ogd-crossSectionError\"><\/span>\n                            <\/div>\n\n                            <div class=\"ogd-form-group ogd-optional\">\n                                <label for=\"ogd-oringID\">\n                                    O-Ring Inside Diameter\n                                    <span class=\"ogd-tooltip\" data-tip=\"Original O-ring ID for stretch and ID compression calculations.\">?<\/span>\n                                <\/label>\n                                <div class=\"ogd-input-with-unit\">\n                                    <input type=\"number\" id=\"ogd-oringID\" value=\"25\" step=\"any\" min=\"0.001\">\n                                    <span class=\"ogd-unit-label\" data-unit=\"length\">mm<\/span>\n                                <\/div>\n                            <\/div>\n\n                            <div class=\"ogd-form-group\">\n                                <label for=\"ogd-material\">O-Ring Material<\/label>\n                                <div class=\"ogd-input-with-unit\">\n                                    <select id=\"ogd-material\">\n                                        <option value=\"NBR\" selected>NBR<\/option>\n                                        <option value=\"FKM\">FKM<\/option>\n                                        <option value=\"EPDM\">EPDM<\/option>\n                                        <option value=\"Silicone\">Silicone<\/option>\n                                        <option value=\"HNBR\">HNBR<\/option>\n                                        <option value=\"FFKM\">FFKM<\/option>\n                                        <option value=\"PTFE\">PTFE Encapsulated<\/option>\n                                        <option value=\"Custom\">Custom<\/option>\n                                    <\/select>\n                                    <span class=\"ogd-unit-label ogd-unit-spacer\" aria-hidden=\"true\"><\/span>\n                                <\/div>\n                            <\/div>\n\n                            <div class=\"ogd-form-group\">\n                                <label for=\"ogd-hardness\">Hardness<\/label>\n                                <div class=\"ogd-input-with-unit\">\n                                    <select id=\"ogd-hardness\">\n                                        <option value=\"50\">50 Shore A<\/option>\n                                        <option value=\"60\">60 Shore A<\/option>\n                                        <option value=\"70\" selected>70 Shore A<\/option>\n                                        <option value=\"80\">80 Shore A<\/option>\n                                        <option value=\"90\">90 Shore A<\/option>\n                                        <option value=\"custom\">Custom<\/option>\n                                    <\/select>\n                                    <span class=\"ogd-unit-label ogd-unit-spacer\" aria-hidden=\"true\"><\/span>\n                                <\/div>\n                            <\/div>\n\n                            <div class=\"ogd-form-group ogd-hidden ogd-full-width\" id=\"ogd-customHardnessGroup\">\n                                <label for=\"ogd-customHardness\">Custom Hardness (Shore A)<\/label>\n                                <input type=\"number\" id=\"ogd-customHardness\" min=\"30\" max=\"95\" step=\"1\" placeholder=\"30-95\">\n                            <\/div>\n                        <\/div>\n\n                        <h3 class=\"ogd-subsection-title\">Groove Design<\/h3>\n                        <div class=\"ogd-input-grid\">\n                            <div class=\"ogd-form-group\">\n                                <label for=\"ogd-targetCompression\">\n                                    Target Compression Ratio\n                                    <span class=\"ogd-tooltip\" data-tip=\"Desired squeeze: S = (d - H) \/ d \u00d7 100%. Groove depth H = d \u00d7 (1 - squeeze).\">?<\/span>\n                                <\/label>\n                                <div class=\"ogd-input-with-unit\">\n                                    <input type=\"number\" id=\"ogd-targetCompression\" value=\"20\" step=\"any\" min=\"0.1\" max=\"99.9\">\n                                    <span class=\"ogd-unit-label\">%<\/span>\n                                <\/div>\n                                <span class=\"ogd-error-msg\" id=\"ogd-compressionError\"><\/span>\n                                <p class=\"ogd-range-hint\" id=\"ogd-squeezeHint\"><\/p>\n                            <\/div>\n\n                            <div class=\"ogd-form-group\">\n                                <label for=\"ogd-targetGlandFill\">\n                                    Target Gland Fill\n                                    <span class=\"ogd-tooltip\" data-tip=\"Desired gland fill: A_oring \/ A_groove \u00d7 100%. Typical target 65\u201385% to allow expansion volume.\">?<\/span>\n                                <\/label>\n                                <div class=\"ogd-input-with-unit\">\n                                    <input type=\"number\" id=\"ogd-targetGlandFill\" value=\"75\" step=\"any\" min=\"0.1\" max=\"100\">\n                                    <span class=\"ogd-unit-label\">%<\/span>\n                                <\/div>\n                                <span class=\"ogd-error-msg\" id=\"ogd-glandFillError\"><\/span>\n                            <\/div>\n                        <\/div>\n\n                        <h3 class=\"ogd-subsection-title\">Application Conditions<\/h3>\n                        <div class=\"ogd-input-grid\">\n                            <div class=\"ogd-form-group ogd-optional\">\n                                <label for=\"ogd-installDiameter\">\n                                    Installation Diameter\n                                    <span class=\"ogd-tooltip\" data-tip=\"Groove or bore diameter where O-ring is installed. Used for stretch calculation.\">?<\/span>\n                                <\/label>\n                                <div class=\"ogd-input-with-unit\">\n                                    <input type=\"number\" id=\"ogd-installDiameter\" placeholder=\"Optional\" step=\"any\" min=\"0.001\">\n                                    <span class=\"ogd-unit-label\" data-unit=\"length\">mm<\/span>\n                                <\/div>\n                            <\/div>\n\n                            <div class=\"ogd-form-group ogd-optional\">\n                                <label for=\"ogd-radialClearance\">\n                                    Radial Clearance\n                                    <span class=\"ogd-tooltip\" data-tip=\"Extrusion gap between piston\/rod and bore for extrusion risk evaluation.\">?<\/span>\n                                <\/label>\n                                <div class=\"ogd-input-with-unit\">\n                                    <input type=\"number\" id=\"ogd-radialClearance\" placeholder=\"Optional\" step=\"any\" min=\"0\">\n                                    <span class=\"ogd-unit-label\" data-unit=\"length\">mm<\/span>\n                                <\/div>\n                            <\/div>\n\n                            <div class=\"ogd-form-group ogd-optional\">\n                                <label for=\"ogd-pressure\">\n                                    Operating Pressure\n                                    <span class=\"ogd-tooltip\" data-tip=\"System operating pressure for extrusion risk and backup ring assessment.\">?<\/span>\n                                <\/label>\n                                <div class=\"ogd-input-with-unit\">\n                                    <input type=\"number\" id=\"ogd-pressure\" value=\"10\" step=\"any\" min=\"0\">\n                                    <select id=\"ogd-pressureUnit\" aria-label=\"Pressure unit\">\n                                        <option value=\"MPa\" selected>MPa<\/option>\n                                        <option value=\"bar\">bar<\/option>\n                                        <option value=\"psi\">psi<\/option>\n                                    <\/select>\n                                <\/div>\n                            <\/div>\n\n                            <div class=\"ogd-form-group ogd-optional\">\n                                <label for=\"ogd-temperature\">\n                                    Operating Temperature\n                                    <span class=\"ogd-tooltip\" data-tip=\"Operating temperature for material compatibility reference.\">?<\/span>\n                                <\/label>\n                                <div class=\"ogd-input-with-unit\">\n                                    <input type=\"number\" id=\"ogd-temperature\" value=\"60\" step=\"any\">\n                                    <span class=\"ogd-unit-label\" data-unit=\"temperature\">&deg;C<\/span>\n                                <\/div>\n                            <\/div>\n                        <\/div>\n\n                    <div class=\"ogd-btn-row\">\n                        <button type=\"button\" id=\"ogd-calculateBtn\" class=\"ogd-btn ogd-btn-primary\">Calculate<\/button>\n                    <\/div>\n                <\/section>\n\n                <section class=\"ogd-card ogd-hidden\" id=\"ogd-resultsSection\">\n                    <h2>Calculation Results<\/h2>\n\n                        <div class=\"ogd-status-banner\" id=\"ogd-designStatusBanner\">\n                            <span class=\"ogd-status-icon\" id=\"ogd-designStatusIcon\">&mdash;<\/span>\n                            <div>\n                                <strong id=\"ogd-designStatusTitle\">Groove Design Status<\/strong>\n                                <p id=\"ogd-designStatusSub\">Enter values and calculate<\/p>\n                            <\/div>\n                        <\/div>\n\n                        <div class=\"ogd-results-grid\">\n                            <div class=\"ogd-result-item ogd-highlight\">\n                                <span class=\"ogd-result-label\">Recommended Groove Depth<\/span>\n                                <span class=\"ogd-result-value\" id=\"ogd-resultGrooveDepth\">&mdash;<\/span>\n                            <\/div>\n                            <div class=\"ogd-result-item ogd-highlight\">\n                                <span class=\"ogd-result-label\">Recommended Groove Width<\/span>\n                                <span class=\"ogd-result-value\" id=\"ogd-resultGrooveWidth\">&mdash;<\/span>\n                            <\/div>\n                            <div class=\"ogd-result-item\">\n                                <span class=\"ogd-result-label\">Target Compression Ratio<\/span>\n                                <span class=\"ogd-result-value\" id=\"ogd-resultCompression\">&mdash;<\/span>\n                            <\/div>\n                            <div class=\"ogd-result-item\">\n                                <span class=\"ogd-result-label\">Calculated Gland Fill<\/span>\n                                <span class=\"ogd-result-value\" id=\"ogd-resultGlandFill\">&mdash;<\/span>\n                            <\/div>\n                            <div class=\"ogd-result-item\">\n                                <span class=\"ogd-result-label\">O-Ring Stretch<\/span>\n                                <span class=\"ogd-result-value\" id=\"ogd-resultStretch\">&mdash;<\/span>\n                            <\/div>\n                            <div class=\"ogd-result-item\">\n                                <span class=\"ogd-result-label\">Installed Cross-Section (approx.)<\/span>\n                                <span class=\"ogd-result-value\" id=\"ogd-resultInstalledCS\">&mdash;<\/span>\n                            <\/div>\n                            <div class=\"ogd-result-item\">\n                                <span class=\"ogd-result-label\">Extrusion Risk<\/span>\n                                <span class=\"ogd-result-value ogd-risk-low\" id=\"ogd-resultExtrusionRisk\">&mdash;<\/span>\n                            <\/div>\n                            <div class=\"ogd-result-item\">\n                                <span class=\"ogd-result-label\">Groove Design Status<\/span>\n                                <span class=\"ogd-result-value\" id=\"ogd-resultDesignStatus\">&mdash;<\/span>\n                            <\/div>\n                        <\/div>\n                <\/section>\n            <\/div>\n        <\/div>\n    <\/div>\n\n<script>\n(function () {\n    var root = document.getElementById('oring-groove-calculator');\n    if (!root) return;\n    var code = atob('LyoqDQogKiBPLVJpbmcgR3Jvb3ZlIERpbWVuc2lvbnMgQ2FsY3VsYXRvcg0KICogU2NvcGVkIGZvciBXb3JkUHJlc3MgZW1iZWQg4oCUIGFsbCBxdWVyaWVzIGxpbWl0ZWQgdG8gI29yaW5nLWdyb292ZS1jYWxjdWxhdG9yDQogKi8NCg0KKGZ1bmN0aW9uICgpIHsNCiAgICAndXNlIHN0cmljdCc7DQoNCiAgICBjb25zdCBST09UX0lEID0gJ29yaW5nLWdyb292ZS1jYWxjdWxhdG9yJzsNCiAgICBjb25zdCBNTV9UT19JTkNIID0gMSAvIDI1LjQ7DQogICAgY29uc3QgSU5DSF9UT19NTSA9IDI1LjQ7DQogICAgY29uc3QgTVBBX1RPX1BTSSA9IDE0NS4wMzg7DQogICAgY29uc3QgTVBBX1RPX0JBUiA9IDEwOw0KICAgIGNvbnN0IFBTSV9UT19NUEEgPSAxIC8gTVBBX1RPX1BTSTsNCiAgICBjb25zdCBCQVJfVE9fTVBBID0gMC4xOw0KDQogICAgY29uc3QgU1FVRUVaRV9SQU5HRVMgPSB7DQogICAgICAgICdzdGF0aWMtcmFkaWFsLXBpc3Rvbic6IHsgbWluOiAxNSwgbWF4OiAzMCwgbGFiZWw6ICdTdGF0aWMgUmFkaWFsIFBpc3RvbicgfSwNCiAgICAgICAgJ3N0YXRpYy1yYWRpYWwtcm9kJzogeyBtaW46IDE1LCBtYXg6IDMwLCBsYWJlbDogJ1N0YXRpYyBSYWRpYWwgUm9kJyB9LA0KICAgICAgICAnc3RhdGljLWF4aWFsJzogeyBtaW46IDE1LCBtYXg6IDI1LCBsYWJlbDogJ1N0YXRpYyBBeGlhbCBGYWNlJyB9LA0KICAgICAgICAncmVjaXByb2NhdGluZyc6IHsgbWluOiAxMCwgbWF4OiAyMCwgbGFiZWw6ICdSZWNpcHJvY2F0aW5nJyB9LA0KICAgICAgICAncm90YXJ5JzogeyBtaW46IDgsIG1heDogMTYsIGxhYmVsOiAnUm90YXJ5JyB9LA0KICAgICAgICAnY3VzdG9tJzogeyBtaW46IDEwLCBtYXg6IDMwLCBsYWJlbDogJ0N1c3RvbScgfQ0KICAgIH07DQoNCiAgICBsZXQgcm9vdCA9IG51bGw7DQogICAgbGV0IHVuaXRTeXN0ZW0gPSAnbWV0cmljJzsNCiAgICBsZXQgZWxzID0ge307DQoNCiAgICBmdW5jdGlvbiAkKGlkKSB7DQogICAgICAgIHJldHVybiByb290LnF1ZXJ5U2VsZWN0b3IoJyMnICsgaWQpOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGJpbmRFbGVtZW50cygpIHsNCiAgICAgICAgZWxzID0gew0KICAgICAgICAgICAgdW5pdFJhZGlvczogcm9vdC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFtuYW1lPSJvZ2QtdW5pdFN5c3RlbSJdJyksDQogICAgICAgICAgICBzZWFsVHlwZTogJCgnb2dkLXNlYWxUeXBlJyksDQogICAgICAgICAgICBjcm9zc1NlY3Rpb246ICQoJ29nZC1jcm9zc1NlY3Rpb24nKSwNCiAgICAgICAgICAgIG9yaW5nSUQ6ICQoJ29nZC1vcmluZ0lEJyksDQogICAgICAgICAgICB0YXJnZXRDb21wcmVzc2lvbjogJCgnb2dkLXRhcmdldENvbXByZXNzaW9uJyksDQogICAgICAgICAgICB0YXJnZXRHbGFuZEZpbGw6ICQoJ29nZC10YXJnZXRHbGFuZEZpbGwnKSwNCiAgICAgICAgICAgIGluc3RhbGxEaWFtZXRlcjogJCgnb2dkLWluc3RhbGxEaWFtZXRlcicpLA0KICAgICAgICAgICAgcmFkaWFsQ2xlYXJhbmNlOiAkKCdvZ2QtcmFkaWFsQ2xlYXJhbmNlJyksDQogICAgICAgICAgICBwcmVzc3VyZTogJCgnb2dkLXByZXNzdXJlJyksDQogICAgICAgICAgICBwcmVzc3VyZVVuaXQ6ICQoJ29nZC1wcmVzc3VyZVVuaXQnKSwNCiAgICAgICAgICAgIHRlbXBlcmF0dXJlOiAkKCdvZ2QtdGVtcGVyYXR1cmUnKSwNCiAgICAgICAgICAgIG1hdGVyaWFsOiAkKCdvZ2QtbWF0ZXJpYWwnKSwNCiAgICAgICAgICAgIGhhcmRuZXNzOiAkKCdvZ2QtaGFyZG5lc3MnKSwNCiAgICAgICAgICAgIGN1c3RvbUhhcmRuZXNzOiAkKCdvZ2QtY3VzdG9tSGFyZG5lc3MnKSwNCiAgICAgICAgICAgIGN1c3RvbUhhcmRuZXNzR3JvdXA6ICQoJ29nZC1jdXN0b21IYXJkbmVzc0dyb3VwJyksDQogICAgICAgICAgICBjYWxjdWxhdGVCdG46ICQoJ29nZC1jYWxjdWxhdGVCdG4nKSwNCiAgICAgICAgICAgIHNxdWVlemVIaW50OiAkKCdvZ2Qtc3F1ZWV6ZUhpbnQnKSwNCiAgICAgICAgICAgIHJlc3VsdHNTZWN0aW9uOiAkKCdvZ2QtcmVzdWx0c1NlY3Rpb24nKSwNCiAgICAgICAgICAgIGNyb3NzU2VjdGlvbkVycm9yOiAkKCdvZ2QtY3Jvc3NTZWN0aW9uRXJyb3InKSwNCiAgICAgICAgICAgIGNvbXByZXNzaW9uRXJyb3I6ICQoJ29nZC1jb21wcmVzc2lvbkVycm9yJyksDQogICAgICAgICAgICBnbGFuZEZpbGxFcnJvcjogJCgnb2dkLWdsYW5kRmlsbEVycm9yJyksDQogICAgICAgICAgICByZXN1bHRHcm9vdmVEZXB0aDogJCgnb2dkLXJlc3VsdEdyb292ZURlcHRoJyksDQogICAgICAgICAgICByZXN1bHRHcm9vdmVXaWR0aDogJCgnb2dkLXJlc3VsdEdyb292ZVdpZHRoJyksDQogICAgICAgICAgICByZXN1bHRDb21wcmVzc2lvbjogJCgnb2dkLXJlc3VsdENvbXByZXNzaW9uJyksDQogICAgICAgICAgICByZXN1bHRHbGFuZEZpbGw6ICQoJ29nZC1yZXN1bHRHbGFuZEZpbGwnKSwNCiAgICAgICAgICAgIHJlc3VsdFN0cmV0Y2g6ICQoJ29nZC1yZXN1bHRTdHJldGNoJyksDQogICAgICAgICAgICByZXN1bHRJbnN0YWxsZWRDUzogJCgnb2dkLXJlc3VsdEluc3RhbGxlZENTJyksDQogICAgICAgICAgICByZXN1bHRFeHRydXNpb25SaXNrOiAkKCdvZ2QtcmVzdWx0RXh0cnVzaW9uUmlzaycpLA0KICAgICAgICAgICAgcmVzdWx0RGVzaWduU3RhdHVzOiAkKCdvZ2QtcmVzdWx0RGVzaWduU3RhdHVzJyksDQogICAgICAgICAgICBkZXNpZ25TdGF0dXNCYW5uZXI6ICQoJ29nZC1kZXNpZ25TdGF0dXNCYW5uZXInKSwNCiAgICAgICAgICAgIGRlc2lnblN0YXR1c0ljb246ICQoJ29nZC1kZXNpZ25TdGF0dXNJY29uJyksDQogICAgICAgICAgICBkZXNpZ25TdGF0dXNUaXRsZTogJCgnb2dkLWRlc2lnblN0YXR1c1RpdGxlJyksDQogICAgICAgICAgICBkZXNpZ25TdGF0dXNTdWI6ICQoJ29nZC1kZXNpZ25TdGF0dXNTdWInKQ0KICAgICAgICB9Ow0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGdldExlbmd0aFVuaXQoKSB7DQogICAgICAgIHJldHVybiB1bml0U3lzdGVtID09PSAnbWV0cmljJyA\/ICdtbScgOiAnaW4nOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGdldFRlbXBVbml0KCkgew0KICAgICAgICByZXR1cm4gdW5pdFN5c3RlbSA9PT0gJ21ldHJpYycgPyAnXHUwMEIwQycgOiAnXHUwMEIwRic7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gdXBkYXRlVW5pdExhYmVscygpIHsNCiAgICAgICAgcm9vdC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS11bml0PSJsZW5ndGgiXScpLmZvckVhY2goZWwgPT4gew0KICAgICAgICAgICAgZWwudGV4dENvbnRlbnQgPSBnZXRMZW5ndGhVbml0KCk7DQogICAgICAgIH0pOw0KICAgICAgICByb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLXVuaXQ9InRlbXBlcmF0dXJlIl0nKS5mb3JFYWNoKGVsID0+IHsNCiAgICAgICAgICAgIGVsLnRleHRDb250ZW50ID0gZ2V0VGVtcFVuaXQoKTsNCiAgICAgICAgfSk7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gcGFyc2VOdW0odmFsdWUpIHsNCiAgICAgICAgaWYgKHZhbHVlID09PSAnJyB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gbnVsbDsNCiAgICAgICAgY29uc3QgbiA9IHBhcnNlRmxvYXQodmFsdWUpOw0KICAgICAgICByZXR1cm4gaXNOYU4obikgPyBudWxsIDogbjsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiB0b01ldHJpY0xlbmd0aCh2YWx1ZSkgew0KICAgICAgICByZXR1cm4gdW5pdFN5c3RlbSA9PT0gJ21ldHJpYycgPyB2YWx1ZSA6IHZhbHVlICogSU5DSF9UT19NTTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBmcm9tTWV0cmljTGVuZ3RoKHZhbHVlKSB7DQogICAgICAgIHJldHVybiB1bml0U3lzdGVtID09PSAnbWV0cmljJyA\/IHZhbHVlIDogdmFsdWUgKiBNTV9UT19JTkNIOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIHRvTWV0cmljUHJlc3N1cmUodmFsdWUsIHVuaXQpIHsNCiAgICAgICAgaWYgKHVuaXQgPT09ICdNUGEnKSByZXR1cm4gdmFsdWU7DQogICAgICAgIGlmICh1bml0ID09PSAnYmFyJykgcmV0dXJuIHZhbHVlICogQkFSX1RPX01QQTsNCiAgICAgICAgcmV0dXJuIHZhbHVlICogUFNJX1RPX01QQTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBmb3JtYXRMZW5ndGgodmFsdWVNbSkgew0KICAgICAgICBjb25zdCB2ID0gZnJvbU1ldHJpY0xlbmd0aCh2YWx1ZU1tKTsNCiAgICAgICAgY29uc3QgZGVjaW1hbHMgPSB1bml0U3lzdGVtID09PSAnbWV0cmljJyA\/IDMgOiA0Ow0KICAgICAgICByZXR1cm4gdi50b0ZpeGVkKGRlY2ltYWxzKSArICcgJyArIGdldExlbmd0aFVuaXQoKTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBmb3JtYXRQZXJjZW50KHZhbHVlKSB7DQogICAgICAgIHJldHVybiB2YWx1ZS50b0ZpeGVkKDEpICsgJyUnOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGdldEhhcmRuZXNzKCkgew0KICAgICAgICBpZiAoZWxzLmhhcmRuZXNzLnZhbHVlID09PSAnY3VzdG9tJykgew0KICAgICAgICAgICAgcmV0dXJuIHBhcnNlTnVtKGVscy5jdXN0b21IYXJkbmVzcy52YWx1ZSkgfHwgNzA7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIHBhcnNlSW50KGVscy5oYXJkbmVzcy52YWx1ZSwgMTApOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGdldFNxdWVlemVSYW5nZShzZWFsVHlwZSkgew0KICAgICAgICByZXR1cm4gU1FVRUVaRV9SQU5HRVNbc2VhbFR5cGVdIHx8IFNRVUVFWkVfUkFOR0VTWydzdGF0aWMtcmFkaWFsLXBpc3RvbiddOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIHVwZGF0ZVNxdWVlemVIaW50KCkgew0KICAgICAgICBjb25zdCByYW5nZSA9IGdldFNxdWVlemVSYW5nZShlbHMuc2VhbFR5cGUudmFsdWUpOw0KICAgICAgICBlbHMuc3F1ZWV6ZUhpbnQudGV4dENvbnRlbnQgPSAnUmVjb21tZW5kZWQgc3F1ZWV6ZSBmb3IgJyArIHJhbmdlLmxhYmVsICsgJzogJyArDQogICAgICAgICAgICByYW5nZS5taW4gKyAnJSBcdTIwMTMgJyArIHJhbmdlLm1heCArICclJzsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBzdHJldGNoQ29ycmVjdGVkRGlhbWV0ZXIoZE1tLCBzdHJldGNoUGN0KSB7DQogICAgICAgIGlmIChzdHJldGNoUGN0ID09PSBudWxsIHx8IHN0cmV0Y2hQY3QgPD0gMCkgcmV0dXJuIGRNbTsNCiAgICAgICAgcmV0dXJuIGRNbSAvIE1hdGguc3FydCgxICsgc3RyZXRjaFBjdCAvIDEwMCk7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gdmFsaWRhdGVJbnB1dHMoKSB7DQogICAgICAgIGNvbnN0IHdhcm5pbmdzID0gW107DQogICAgICAgIGxldCB2YWxpZCA9IHRydWU7DQoNCiAgICAgICAgZWxzLmNyb3NzU2VjdGlvbkVycm9yLnRleHRDb250ZW50ID0gJyc7DQogICAgICAgIGVscy5jb21wcmVzc2lvbkVycm9yLnRleHRDb250ZW50ID0gJyc7DQogICAgICAgIGVscy5nbGFuZEZpbGxFcnJvci50ZXh0Q29udGVudCA9ICcnOw0KICAgICAgICBlbHMuY3Jvc3NTZWN0aW9uLmNsYXNzTGlzdC5yZW1vdmUoJ29nZC1lcnJvcicpOw0KICAgICAgICBlbHMudGFyZ2V0Q29tcHJlc3Npb24uY2xhc3NMaXN0LnJlbW92ZSgnb2dkLWVycm9yJyk7DQogICAgICAgIGVscy50YXJnZXRHbGFuZEZpbGwuY2xhc3NMaXN0LnJlbW92ZSgnb2dkLWVycm9yJyk7DQoNCiAgICAgICAgY29uc3QgZCA9IHBhcnNlTnVtKGVscy5jcm9zc1NlY3Rpb24udmFsdWUpOw0KICAgICAgICBjb25zdCBzcXVlZXplID0gcGFyc2VOdW0oZWxzLnRhcmdldENvbXByZXNzaW9uLnZhbHVlKTsNCiAgICAgICAgY29uc3QgZ2xhbmRGaWxsVGFyZ2V0ID0gcGFyc2VOdW0oZWxzLnRhcmdldEdsYW5kRmlsbC52YWx1ZSk7DQoNCiAgICAgICAgaWYgKGQgPT09IG51bGwgfHwgZCA8PSAwKSB7DQogICAgICAgICAgICBlbHMuY3Jvc3NTZWN0aW9uRXJyb3IudGV4dENvbnRlbnQgPSAnQ3Jvc3Mtc2VjdGlvbiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLic7DQogICAgICAgICAgICBlbHMuY3Jvc3NTZWN0aW9uLmNsYXNzTGlzdC5hZGQoJ29nZC1lcnJvcicpOw0KICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmIChzcXVlZXplID09PSBudWxsIHx8IHNxdWVlemUgPD0gMCkgew0KICAgICAgICAgICAgZWxzLmNvbXByZXNzaW9uRXJyb3IudGV4dENvbnRlbnQgPSAnVGFyZ2V0IGNvbXByZXNzaW9uIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uJzsNCiAgICAgICAgICAgIGVscy50YXJnZXRDb21wcmVzc2lvbi5jbGFzc0xpc3QuYWRkKCdvZ2QtZXJyb3InKTsNCiAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7DQogICAgICAgIH0gZWxzZSBpZiAoc3F1ZWV6ZSA+PSAxMDApIHsNCiAgICAgICAgICAgIGVscy5jb21wcmVzc2lvbkVycm9yLnRleHRDb250ZW50ID0gJ0NvbXByZXNzaW9uIG11c3QgYmUgbGVzcyB0aGFuIDEwMCUuJzsNCiAgICAgICAgICAgIGVscy50YXJnZXRDb21wcmVzc2lvbi5jbGFzc0xpc3QuYWRkKCdvZ2QtZXJyb3InKTsNCiAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7DQogICAgICAgIH0NCg0KICAgICAgICBpZiAoZ2xhbmRGaWxsVGFyZ2V0ID09PSBudWxsIHx8IGdsYW5kRmlsbFRhcmdldCA8PSAwKSB7DQogICAgICAgICAgICBlbHMuZ2xhbmRGaWxsRXJyb3IudGV4dENvbnRlbnQgPSAnVGFyZ2V0IGdsYW5kIGZpbGwgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4nOw0KICAgICAgICAgICAgZWxzLnRhcmdldEdsYW5kRmlsbC5jbGFzc0xpc3QuYWRkKCdvZ2QtZXJyb3InKTsNCiAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7DQogICAgICAgIH0gZWxzZSBpZiAoZ2xhbmRGaWxsVGFyZ2V0ID4gMTAwKSB7DQogICAgICAgICAgICBlbHMuZ2xhbmRGaWxsRXJyb3IudGV4dENvbnRlbnQgPSAnVGFyZ2V0IGdsYW5kIGZpbGwgY2Fubm90IGV4Y2VlZCAxMDAlLic7DQogICAgICAgICAgICBlbHMudGFyZ2V0R2xhbmRGaWxsLmNsYXNzTGlzdC5hZGQoJ29nZC1lcnJvcicpOw0KICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsNCiAgICAgICAgfQ0KDQogICAgICAgIGNvbnN0IHJjID0gcGFyc2VOdW0oZWxzLnJhZGlhbENsZWFyYW5jZS52YWx1ZSk7DQogICAgICAgIGlmIChyYyAhPT0gbnVsbCAmJiByYyA8IDApIHsNCiAgICAgICAgICAgIHdhcm5pbmdzLnB1c2goJ1JhZGlhbCBjbGVhcmFuY2UgY2Fubm90IGJlIG5lZ2F0aXZlLicpOw0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIHsgdmFsaWQsIHdhcm5pbmdzIH07DQogICAgfQ0KDQogICAgZnVuY3Rpb24gZXZhbHVhdGVFeHRydXNpb25SaXNrKHByZXNzdXJlTXBhLCBjbGVhcmFuY2VNbSwgZE1tLCBoYXJkbmVzcywgc2VhbFR5cGUpIHsNCiAgICAgICAgaWYgKHByZXNzdXJlTXBhID09PSBudWxsIHx8IHByZXNzdXJlTXBhIDw9IDApIHsNCiAgICAgICAgICAgIHJldHVybiB7IGxldmVsOiAnTG93IFJpc2snLCBzY29yZTogMCwgbmVlZHNCYWNrdXA6IGZhbHNlIH07DQogICAgICAgIH0NCg0KICAgICAgICBsZXQgc2NvcmUgPSAwOw0KICAgICAgICBsZXQgbmVlZHNCYWNrdXAgPSBmYWxzZTsNCiAgICAgICAgY29uc3QgY2xlYXJhbmNlUmF0aW8gPSBjbGVhcmFuY2VNbSAhPT0gbnVsbCAmJiBjbGVhcmFuY2VNbSA+PSAwID8gY2xlYXJhbmNlTW0gLyBkTW0gOiBudWxsOw0KDQogICAgICAgIGlmIChoYXJkbmVzcyA8PSA2MCkgc2NvcmUgKz0gMTsNCiAgICAgICAgaWYgKGhhcmRuZXNzIDw9IDcwICYmIHByZXNzdXJlTXBhID4gMTApIHNjb3JlICs9IDE7DQogICAgICAgIGlmIChzZWFsVHlwZSA9PT0gJ3JlY2lwcm9jYXRpbmcnIHx8IHNlYWxUeXBlID09PSAncm90YXJ5Jykgc2NvcmUgKz0gMTsNCg0KICAgICAgICBpZiAoY2xlYXJhbmNlUmF0aW8gIT09IG51bGwpIHsNCiAgICAgICAgICAgIGlmIChwcmVzc3VyZU1wYSA+IDIwICYmIGNsZWFyYW5jZVJhdGlvID4gMC4wNikgc2NvcmUgKz0gMzsNCiAgICAgICAgICAgIGVsc2UgaWYgKHByZXNzdXJlTXBhID4gMTUgJiYgY2xlYXJhbmNlUmF0aW8gPiAwLjA1KSBzY29yZSArPSAzOw0KICAgICAgICAgICAgZWxzZSBpZiAocHJlc3N1cmVNcGEgPiAxMCAmJiBjbGVhcmFuY2VSYXRpbyA+IDAuMDQpIHNjb3JlICs9IDI7DQogICAgICAgICAgICBlbHNlIGlmIChwcmVzc3VyZU1wYSA+IDUgJiYgY2xlYXJhbmNlUmF0aW8gPiAwLjAzKSBzY29yZSArPSAxOw0KDQogICAgICAgICAgICBpZiAocHJlc3N1cmVNcGEgPiA3ICYmIGNsZWFyYW5jZVJhdGlvID4gMC4wMjUpIG5lZWRzQmFja3VwID0gdHJ1ZTsNCiAgICAgICAgICAgIGlmIChwcmVzc3VyZU1wYSA+IDE0ICYmIGNsZWFyYW5jZVJhdGlvID4gMC4wMTUpIG5lZWRzQmFja3VwID0gdHJ1ZTsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmIChwcmVzc3VyZU1wYSA+IDI1KSB7DQogICAgICAgICAgICBzY29yZSArPSAyOw0KICAgICAgICAgICAgbmVlZHNCYWNrdXAgPSB0cnVlOw0KICAgICAgICB9IGVsc2UgaWYgKHByZXNzdXJlTXBhID4gMTYpIHsNCiAgICAgICAgICAgIHNjb3JlICs9IDE7DQogICAgICAgIH0NCg0KICAgICAgICBpZiAoaGFyZG5lc3MgPD0gNzAgJiYgcHJlc3N1cmVNcGEgPiAxMCkgbmVlZHNCYWNrdXAgPSB0cnVlOw0KDQogICAgICAgIGxldCBsZXZlbCA9ICdMb3cgUmlzayc7DQogICAgICAgIGlmIChzY29yZSA+PSA0KSBsZXZlbCA9ICdIaWdoIFJpc2snOw0KICAgICAgICBlbHNlIGlmIChzY29yZSA+PSAyKSBsZXZlbCA9ICdDYXV0aW9uJzsNCg0KICAgICAgICByZXR1cm4geyBsZXZlbCwgc2NvcmUsIG5lZWRzQmFja3VwIH07DQogICAgfQ0KDQogICAgZnVuY3Rpb24gaGlkZVJlc3VsdHMoKSB7DQogICAgICAgIGVscy5yZXN1bHRzU2VjdGlvbi5jbGFzc0xpc3QuYWRkKCdvZ2QtaGlkZGVuJyk7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gY2FsY3VsYXRlKCkgew0KICAgICAgICBjb25zdCB2YWxpZGF0aW9uID0gdmFsaWRhdGVJbnB1dHMoKTsNCiAgICAgICAgaWYgKCF2YWxpZGF0aW9uLnZhbGlkKSB7DQogICAgICAgICAgICBoaWRlUmVzdWx0cygpOw0KICAgICAgICAgICAgcmV0dXJuIG51bGw7DQogICAgICAgIH0NCg0KICAgICAgICBjb25zdCBkID0gdG9NZXRyaWNMZW5ndGgocGFyc2VOdW0oZWxzLmNyb3NzU2VjdGlvbi52YWx1ZSkpOw0KICAgICAgICBjb25zdCBzcXVlZXplUGN0ID0gcGFyc2VOdW0oZWxzLnRhcmdldENvbXByZXNzaW9uLnZhbHVlKTsNCiAgICAgICAgY29uc3Qgc3F1ZWV6ZURlY2ltYWwgPSBzcXVlZXplUGN0IC8gMTAwOw0KICAgICAgICBjb25zdCBnbGFuZEZpbGxUYXJnZXRQY3QgPSBwYXJzZU51bShlbHMudGFyZ2V0R2xhbmRGaWxsLnZhbHVlKTsNCiAgICAgICAgY29uc3QgZ2xhbmRGaWxsRGVjaW1hbCA9IGdsYW5kRmlsbFRhcmdldFBjdCAvIDEwMDsNCiAgICAgICAgY29uc3Qgc2VhbFR5cGUgPSBlbHMuc2VhbFR5cGUudmFsdWU7DQogICAgICAgIGNvbnN0IHJhbmdlID0gZ2V0U3F1ZWV6ZVJhbmdlKHNlYWxUeXBlKTsNCiAgICAgICAgY29uc3QgaGFyZG5lc3MgPSBnZXRIYXJkbmVzcygpOw0KDQogICAgICAgIGNvbnN0IGdyb292ZURlcHRoID0gZCAqICgxIC0gc3F1ZWV6ZURlY2ltYWwpOw0KICAgICAgICBjb25zdCBBb3JpbmcgPSBNYXRoLlBJICogZCAqIGQgLyA0Ow0KDQogICAgICAgIGxldCBzdHJldGNoID0gbnVsbDsNCiAgICAgICAgbGV0IGlkQ29tcHJlc3Npb24gPSBudWxsOw0KICAgICAgICBjb25zdCBvcmluZ0lEID0gcGFyc2VOdW0oZWxzLm9yaW5nSUQudmFsdWUpOw0KICAgICAgICBjb25zdCBpbnN0YWxsRGlhID0gcGFyc2VOdW0oZWxzLmluc3RhbGxEaWFtZXRlci52YWx1ZSk7DQoNCiAgICAgICAgaWYgKG9yaW5nSUQgIT09IG51bGwgJiYgb3JpbmdJRCA+IDAgJiYgaW5zdGFsbERpYSAhPT0gbnVsbCAmJiBpbnN0YWxsRGlhID4gMCkgew0KICAgICAgICAgICAgY29uc3QgaWRNbSA9IHRvTWV0cmljTGVuZ3RoKG9yaW5nSUQpOw0KICAgICAgICAgICAgY29uc3QgaW5zdGFsbE1tID0gdG9NZXRyaWNMZW5ndGgoaW5zdGFsbERpYSk7DQogICAgICAgICAgICBzdHJldGNoID0gKChpbnN0YWxsTW0gLSBpZE1tKSAvIGlkTW0pICogMTAwOw0KICAgICAgICAgICAgaWYgKGluc3RhbGxNbSA8IGlkTW0pIHsNCiAgICAgICAgICAgICAgICBpZENvbXByZXNzaW9uID0gKChpZE1tIC0gaW5zdGFsbE1tKSAvIGlkTW0pICogMTAwOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgY29uc3QgZEluc3RhbGxlZCA9IHN0cmV0Y2hDb3JyZWN0ZWREaWFtZXRlcihkLCBzdHJldGNoKTsNCiAgICAgICAgY29uc3QgQW9yaW5nQ29ycmVjdGVkID0gTWF0aC5QSSAqIGRJbnN0YWxsZWQgKiBkSW5zdGFsbGVkIC8gNDsNCg0KICAgICAgICBjb25zdCBncm9vdmVXaWR0aCA9IEFvcmluZ0NvcnJlY3RlZCAvIChncm9vdmVEZXB0aCAqIGdsYW5kRmlsbERlY2ltYWwpOw0KICAgICAgICBjb25zdCBBZ3Jvb3ZlID0gZ3Jvb3ZlV2lkdGggKiBncm9vdmVEZXB0aDsNCiAgICAgICAgY29uc3QgZ2xhbmRGaWxsID0gQWdyb292ZSA+IDAgPyAoQW9yaW5nQ29ycmVjdGVkIC8gQWdyb292ZSkgKiAxMDAgOiBudWxsOw0KDQogICAgICAgIGNvbnN0IHByZXNzdXJlVmFsID0gcGFyc2VOdW0oZWxzLnByZXNzdXJlLnZhbHVlKTsNCiAgICAgICAgY29uc3QgcHJlc3N1cmVNcGEgPSBwcmVzc3VyZVZhbCAhPT0gbnVsbCA\/IHRvTWV0cmljUHJlc3N1cmUocHJlc3N1cmVWYWwsIGVscy5wcmVzc3VyZVVuaXQudmFsdWUpIDogbnVsbDsNCiAgICAgICAgY29uc3QgcmFkaWFsQ2xlYXJhbmNlID0gcGFyc2VOdW0oZWxzLnJhZGlhbENsZWFyYW5jZS52YWx1ZSk7DQogICAgICAgIGNvbnN0IGNsZWFyYW5jZU1tID0gcmFkaWFsQ2xlYXJhbmNlICE9PSBudWxsID8gdG9NZXRyaWNMZW5ndGgocmFkaWFsQ2xlYXJhbmNlKSA6IG51bGw7DQoNCiAgICAgICAgY29uc3QgZXh0cnVzaW9uID0gZXZhbHVhdGVFeHRydXNpb25SaXNrKHByZXNzdXJlTXBhLCBjbGVhcmFuY2VNbSwgZCwgaGFyZG5lc3MsIHNlYWxUeXBlKTsNCg0KICAgICAgICBjb25zdCB3YXJuaW5ncyA9IFsuLi52YWxpZGF0aW9uLndhcm5pbmdzXTsNCiAgICAgICAgbGV0IGRlc2lnblNjb3JlID0gMDsNCg0KICAgICAgICBpZiAoc3F1ZWV6ZVBjdCA8IHJhbmdlLm1pbiAtIDUpIHsNCiAgICAgICAgICAgIGRlc2lnblNjb3JlICs9IDI7DQogICAgICAgICAgICB3YXJuaW5ncy5wdXNoKCdUYXJnZXQgc3F1ZWV6ZSBpcyBzaWduaWZpY2FudGx5IGJlbG93IHJlY29tbWVuZGVkIHJhbmdlIFx1MjAxNCBsZWFrYWdlIHJpc2suJyk7DQogICAgICAgIH0gZWxzZSBpZiAoc3F1ZWV6ZVBjdCA8IHJhbmdlLm1pbikgew0KICAgICAgICAgICAgZGVzaWduU2NvcmUgKz0gMTsNCiAgICAgICAgICAgIHdhcm5pbmdzLnB1c2goJ1RhcmdldCBzcXVlZXplIGlzIGJlbG93IHJlY29tbWVuZGVkIHJhbmdlIGZvciAnICsgcmFuZ2UubGFiZWwgKyAnLicpOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKHNxdWVlemVQY3QgPiByYW5nZS5tYXggKyAxMCkgew0KICAgICAgICAgICAgZGVzaWduU2NvcmUgKz0gMzsNCiAgICAgICAgICAgIHdhcm5pbmdzLnB1c2goJ1RhcmdldCBzcXVlZXplIGV4Y2VlZHMgcHJhY3RpY2FsIGRlc2lnbiByYW5nZSBcdTIwMTQgaGlnaCBkZWZvcm1hdGlvbiByaXNrLicpOw0KICAgICAgICB9IGVsc2UgaWYgKHNxdWVlemVQY3QgPiByYW5nZS5tYXggKyA1KSB7DQogICAgICAgICAgICBkZXNpZ25TY29yZSArPSAyOw0KICAgICAgICAgICAgd2FybmluZ3MucHVzaCgnVGFyZ2V0IHNxdWVlemUgaXMgZXhjZXNzaXZlIFx1MjAxNCBpbmNyZWFzZWQgZnJpY3Rpb24gYW5kIHdlYXIuJyk7DQogICAgICAgIH0gZWxzZSBpZiAoc3F1ZWV6ZVBjdCA+IHJhbmdlLm1heCkgew0KICAgICAgICAgICAgZGVzaWduU2NvcmUgKz0gMTsNCiAgICAgICAgICAgIHdhcm5pbmdzLnB1c2goJ1RhcmdldCBzcXVlZXplIGlzIGFib3ZlIHJlY29tbWVuZGVkIHJhbmdlLicpOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKHN0cmV0Y2ggIT09IG51bGwpIHsNCiAgICAgICAgICAgIGNvbnN0IG1heFN0cmV0Y2ggPSBzZWFsVHlwZSA9PT0gJ3JvdGFyeScgPyAzIDogNTsNCiAgICAgICAgICAgIGlmIChzdHJldGNoID4gbWF4U3RyZXRjaCArIDMpIHsNCiAgICAgICAgICAgICAgICBkZXNpZ25TY29yZSArPSAyOw0KICAgICAgICAgICAgICAgIHdhcm5pbmdzLnB1c2goJ08tcmluZyBzdHJldGNoICgnICsgc3RyZXRjaC50b0ZpeGVkKDEpICsgJyUpIGlzIGV4Y2Vzc2l2ZSBcdTIwMTQgbWF4IH4nICsgbWF4U3RyZXRjaCArICclIHJlY29tbWVuZGVkLicpOw0KICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJldGNoID4gbWF4U3RyZXRjaCkgew0KICAgICAgICAgICAgICAgIGRlc2lnblNjb3JlICs9IDE7DQogICAgICAgICAgICAgICAgd2FybmluZ3MucHVzaCgnTy1yaW5nIHN0cmV0Y2ggKCcgKyBzdHJldGNoLnRvRml4ZWQoMSkgKyAnJSkgZXhjZWVkcyB0eXBpY2FsIHJlY29tbWVuZGVkIHJhbmdlLicpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKHN0cmV0Y2ggPCAtMikgew0KICAgICAgICAgICAgICAgIHdhcm5pbmdzLnB1c2goJ0luc3RhbGxlZCBkaWFtZXRlciBpcyBzbWFsbGVyIHRoYW4gTy1yaW5nIElEIFx1MjAxNCB2ZXJpZnkgaW5zdGFsbGF0aW9uIGRpYW1ldGVyLicpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKGdsYW5kRmlsbCAhPT0gbnVsbCkgew0KICAgICAgICAgICAgaWYgKGdsYW5kRmlsbCA+IDkwKSB7DQogICAgICAgICAgICAgICAgZGVzaWduU2NvcmUgKz0gMjsNCiAgICAgICAgICAgICAgICB3YXJuaW5ncy5wdXNoKCdDYWxjdWxhdGVkIGdsYW5kIGZpbGwgZXhjZWVkcyA5MCUgXHUyMDE0IGluc3VmZmljaWVudCBleHBhbnNpb24gdm9sdW1lLicpOw0KICAgICAgICAgICAgfSBlbHNlIGlmIChnbGFuZEZpbGwgPiA4NSkgew0KICAgICAgICAgICAgICAgIGRlc2lnblNjb3JlICs9IDE7DQogICAgICAgICAgICAgICAgd2FybmluZ3MucHVzaCgnR2xhbmQgZmlsbCBpcyBoaWdoIFx1MjAxNCBjb25zaWRlciBpbmNyZWFzaW5nIGdyb292ZSB3aWR0aC4nKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIGlmIChncm9vdmVXaWR0aCA8IGQgKiAxLjEpIHsNCiAgICAgICAgICAgIGRlc2lnblNjb3JlICs9IDE7DQogICAgICAgICAgICB3YXJuaW5ncy5wdXNoKCdHcm9vdmUgd2lkdGggbWF5IGJlIHRvbyBuYXJyb3cgZm9yIHByYWN0aWNhbCBnbGFuZCBkZXNpZ24gXHUyMDE0IHZlcmlmeSBhZ2FpbnN0IG1hbnVmYWN0dXJlciB0YWJsZXMuJyk7DQogICAgICAgIH0NCg0KICAgICAgICBpZiAoZXh0cnVzaW9uLmxldmVsID09PSAnSGlnaCBSaXNrJykgZGVzaWduU2NvcmUgKz0gMzsNCiAgICAgICAgZWxzZSBpZiAoZXh0cnVzaW9uLmxldmVsID09PSAnQ2F1dGlvbicpIGRlc2lnblNjb3JlICs9IDE7DQoNCiAgICAgICAgaWYgKGV4dHJ1c2lvbi5sZXZlbCAhPT0gJ0xvdyBSaXNrJyAmJiBjbGVhcmFuY2VNbSAhPT0gbnVsbCkgew0KICAgICAgICAgICAgd2FybmluZ3MucHVzaCgnUmFkaWFsIGNsZWFyYW5jZSBhdCBvcGVyYXRpbmcgcHJlc3N1cmUgaW5kaWNhdGVzIGVsZXZhdGVkIGV4dHJ1c2lvbiByaXNrLicpOw0KICAgICAgICB9DQoNCiAgICAgICAgbGV0IGRlc2lnblN0YXR1cywgc3RhdHVzQ2xhc3M7DQogICAgICAgIGlmIChkZXNpZ25TY29yZSA+PSA0KSB7DQogICAgICAgICAgICBkZXNpZ25TdGF0dXMgPSAnSGlnaCBSaXNrJzsNCiAgICAgICAgICAgIHN0YXR1c0NsYXNzID0gJ29nZC1zdGF0dXMtaGlnaCc7DQogICAgICAgIH0gZWxzZSBpZiAoZGVzaWduU2NvcmUgPj0gMikgew0KICAgICAgICAgICAgZGVzaWduU3RhdHVzID0gJ1Jldmlldyc7DQogICAgICAgICAgICBzdGF0dXNDbGFzcyA9ICdvZ2Qtc3RhdHVzLXJldmlldyc7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBkZXNpZ25TdGF0dXMgPSAnUmVjb21tZW5kZWQnOw0KICAgICAgICAgICAgc3RhdHVzQ2xhc3MgPSAnb2dkLXN0YXR1cy1yZWNvbW1lbmRlZCc7DQogICAgICAgIH0NCg0KICAgICAgICBjb25zdCByZXN1bHRzID0gew0KICAgICAgICAgICAgZCwgZ3Jvb3ZlRGVwdGgsIGdyb292ZVdpZHRoLCBzcXVlZXplUGN0LCBnbGFuZEZpbGwsDQogICAgICAgICAgICBzdHJldGNoLCBpZENvbXByZXNzaW9uLCBkSW5zdGFsbGVkLCBleHRydXNpb24sIGRlc2lnblN0YXR1cywgc3RhdHVzQ2xhc3MsDQogICAgICAgICAgICB3YXJuaW5ncywgcmFuZ2UNCiAgICAgICAgfTsNCg0KICAgICAgICBkaXNwbGF5UmVzdWx0cyhyZXN1bHRzKTsNCiAgICAgICAgZWxzLnJlc3VsdHNTZWN0aW9uLmNsYXNzTGlzdC5yZW1vdmUoJ29nZC1oaWRkZW4nKTsNCiAgICAgICAgcmV0dXJuIHJlc3VsdHM7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gZGlzcGxheVJlc3VsdHMocikgew0KICAgICAgICBlbHMucmVzdWx0R3Jvb3ZlRGVwdGgudGV4dENvbnRlbnQgPSBmb3JtYXRMZW5ndGgoci5ncm9vdmVEZXB0aCk7DQogICAgICAgIGVscy5yZXN1bHRHcm9vdmVXaWR0aC50ZXh0Q29udGVudCA9IGZvcm1hdExlbmd0aChyLmdyb292ZVdpZHRoKTsNCiAgICAgICAgZWxzLnJlc3VsdENvbXByZXNzaW9uLnRleHRDb250ZW50ID0gZm9ybWF0UGVyY2VudChyLnNxdWVlemVQY3QpOw0KICAgICAgICBlbHMucmVzdWx0R2xhbmRGaWxsLnRleHRDb250ZW50ID0gci5nbGFuZEZpbGwgIT09IG51bGwgPyBmb3JtYXRQZXJjZW50KHIuZ2xhbmRGaWxsKSA6ICdcdTIwMTQnOw0KICAgICAgICBlbHMucmVzdWx0U3RyZXRjaC50ZXh0Q29udGVudCA9IHIuc3RyZXRjaCAhPT0gbnVsbCA\/IGZvcm1hdFBlcmNlbnQoci5zdHJldGNoKSA6ICdOL0EnOw0KICAgICAgICBlbHMucmVzdWx0SW5zdGFsbGVkQ1MudGV4dENvbnRlbnQgPSBmb3JtYXRMZW5ndGgoci5kSW5zdGFsbGVkKTsNCg0KICAgICAgICBlbHMucmVzdWx0RXh0cnVzaW9uUmlzay50ZXh0Q29udGVudCA9IHIuZXh0cnVzaW9uLmxldmVsOw0KICAgICAgICBlbHMucmVzdWx0RXh0cnVzaW9uUmlzay5jbGFzc05hbWUgPSAnb2dkLXJlc3VsdC12YWx1ZSBvZ2Qtcmlzay0nICsNCiAgICAgICAgICAgIHIuZXh0cnVzaW9uLmxldmVsLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgnICcsICctJykucmVwbGFjZSgnbG93LXJpc2snLCAnbG93JykucmVwbGFjZSgnaGlnaC1yaXNrJywgJ2hpZ2gnKTsNCg0KICAgICAgICBlbHMucmVzdWx0RGVzaWduU3RhdHVzLnRleHRDb250ZW50ID0gci5kZXNpZ25TdGF0dXM7DQoNCiAgICAgICAgZWxzLmRlc2lnblN0YXR1c1RpdGxlLnRleHRDb250ZW50ID0gJ0dyb292ZSBEZXNpZ24gU3RhdHVzOiAnICsgci5kZXNpZ25TdGF0dXM7DQogICAgICAgIGVscy5kZXNpZ25TdGF0dXNTdWIudGV4dENvbnRlbnQgPSAnRXh0cnVzaW9uIFJpc2s6ICcgKyByLmV4dHJ1c2lvbi5sZXZlbCArDQogICAgICAgICAgICAoci5leHRydXNpb24ubmVlZHNCYWNrdXAgPyAnIFx1MjAxNCBCYWNrdXAgcmluZyByZWNvbW1lbmRlZCcgOiAnJyk7DQogICAgICAgIGVscy5kZXNpZ25TdGF0dXNCYW5uZXIuY2xhc3NOYW1lID0gJ29nZC1zdGF0dXMtYmFubmVyICcgKyByLnN0YXR1c0NsYXNzOw0KDQogICAgICAgIGNvbnN0IGljb25zID0gew0KICAgICAgICAgICAgJ29nZC1zdGF0dXMtcmVjb21tZW5kZWQnOiAnXHUyNzEzJywNCiAgICAgICAgICAgICdvZ2Qtc3RhdHVzLXJldmlldyc6ICchJywNCiAgICAgICAgICAgICdvZ2Qtc3RhdHVzLWhpZ2gnOiAnISEnDQogICAgICAgIH07DQogICAgICAgIGVscy5kZXNpZ25TdGF0dXNJY29uLnRleHRDb250ZW50ID0gaWNvbnNbci5zdGF0dXNDbGFzc10gfHwgJ1x1MjAxNCc7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gY29udmVydElucHV0VmFsdWVzKGZyb21TeXN0ZW0sIHRvU3lzdGVtKSB7DQogICAgICAgIGNvbnN0IGxlbmd0aEZpZWxkcyA9IFsnb2dkLWNyb3NzU2VjdGlvbicsICdvZ2Qtb3JpbmdJRCcsICdvZ2QtaW5zdGFsbERpYW1ldGVyJywgJ29nZC1yYWRpYWxDbGVhcmFuY2UnXTsNCiAgICAgICAgbGVuZ3RoRmllbGRzLmZvckVhY2goaWQgPT4gew0KICAgICAgICAgICAgY29uc3QgZWwgPSAkKGlkKTsNCiAgICAgICAgICAgIGNvbnN0IHZhbCA9IHBhcnNlTnVtKGVsLnZhbHVlKTsNCiAgICAgICAgICAgIGlmICh2YWwgPT09IG51bGwpIHJldHVybjsNCiAgICAgICAgICAgIGNvbnN0IG1tID0gZnJvbVN5c3RlbSA9PT0gJ21ldHJpYycgPyB2YWwgOiB2YWwgKiBJTkNIX1RPX01NOw0KICAgICAgICAgICAgZWwudmFsdWUgPSB0b1N5c3RlbSA9PT0gJ21ldHJpYycNCiAgICAgICAgICAgICAgICA\/IHBhcnNlRmxvYXQobW0udG9GaXhlZCg0KSkNCiAgICAgICAgICAgICAgICA6IHBhcnNlRmxvYXQoKG1tICogTU1fVE9fSU5DSCkudG9GaXhlZCg1KSk7DQogICAgICAgIH0pOw0KDQogICAgICAgIGNvbnN0IHRlbXBWYWwgPSBwYXJzZU51bShlbHMudGVtcGVyYXR1cmUudmFsdWUpOw0KICAgICAgICBpZiAodGVtcFZhbCAhPT0gbnVsbCkgew0KICAgICAgICAgICAgY29uc3QgY2Vsc2l1cyA9IGZyb21TeXN0ZW0gPT09ICdtZXRyaWMnID8gdGVtcFZhbCA6ICh0ZW1wVmFsIC0gMzIpICogNSAvIDk7DQogICAgICAgICAgICBlbHMudGVtcGVyYXR1cmUudmFsdWUgPSB0b1N5c3RlbSA9PT0gJ21ldHJpYycNCiAgICAgICAgICAgICAgICA\/IHBhcnNlRmxvYXQoY2Vsc2l1cy50b0ZpeGVkKDEpKQ0KICAgICAgICAgICAgICAgIDogcGFyc2VGbG9hdCgoY2Vsc2l1cyAqIDkgLyA1ICsgMzIpLnRvRml4ZWQoMSkpOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKGZyb21TeXN0ZW0gIT09IHRvU3lzdGVtKSB7DQogICAgICAgICAgICBjb25zdCBwVmFsID0gcGFyc2VOdW0oZWxzLnByZXNzdXJlLnZhbHVlKTsNCiAgICAgICAgICAgIGlmIChwVmFsICE9PSBudWxsKSB7DQogICAgICAgICAgICAgICAgY29uc3QgbXBhID0gdG9NZXRyaWNQcmVzc3VyZShwVmFsLCBlbHMucHJlc3N1cmVVbml0LnZhbHVlKTsNCiAgICAgICAgICAgICAgICBpZiAodG9TeXN0ZW0gPT09ICdpbXBlcmlhbCcpIHsNCiAgICAgICAgICAgICAgICAgICAgZWxzLnByZXNzdXJlVW5pdC52YWx1ZSA9ICdwc2knOw0KICAgICAgICAgICAgICAgICAgICBlbHMucHJlc3N1cmUudmFsdWUgPSBwYXJzZUZsb2F0KChtcGEgKiBNUEFfVE9fUFNJKS50b0ZpeGVkKDEpKTsNCiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVscy5wcmVzc3VyZVVuaXQudmFsdWUgPT09ICdwc2knKSB7DQogICAgICAgICAgICAgICAgICAgIGVscy5wcmVzc3VyZVVuaXQudmFsdWUgPSAnTVBhJzsNCiAgICAgICAgICAgICAgICAgICAgZWxzLnByZXNzdXJlLnZhbHVlID0gcGFyc2VGbG9hdChtcGEudG9GaXhlZCgyKSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KDQogICAgZnVuY3Rpb24gc3dpdGNoVW5pdFN5c3RlbShuZXdTeXN0ZW0pIHsNCiAgICAgICAgaWYgKG5ld1N5c3RlbSA9PT0gdW5pdFN5c3RlbSkgcmV0dXJuOw0KICAgICAgICBjb252ZXJ0SW5wdXRWYWx1ZXModW5pdFN5c3RlbSwgbmV3U3lzdGVtKTsNCiAgICAgICAgdW5pdFN5c3RlbSA9IG5ld1N5c3RlbTsNCiAgICAgICAgdXBkYXRlVW5pdExhYmVscygpOw0KICAgICAgICBoaWRlUmVzdWx0cygpOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGluaXQoKSB7DQogICAgICAgIHJvb3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChST09UX0lEKTsNCiAgICAgICAgaWYgKCFyb290KSByZXR1cm47DQoNCiAgICAgICAgYmluZEVsZW1lbnRzKCk7DQogICAgICAgIHVwZGF0ZVVuaXRMYWJlbHMoKTsNCiAgICAgICAgdXBkYXRlU3F1ZWV6ZUhpbnQoKTsNCg0KICAgICAgICBlbHMudW5pdFJhZGlvcy5mb3JFYWNoKHJhZGlvID0+IHsNCiAgICAgICAgICAgIHJhZGlvLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsICgpID0+IHsNCiAgICAgICAgICAgICAgICBpZiAocmFkaW8uY2hlY2tlZCkgc3dpdGNoVW5pdFN5c3RlbShyYWRpby52YWx1ZSk7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSk7DQoNCiAgICAgICAgZWxzLmhhcmRuZXNzLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsICgpID0+IHsNCiAgICAgICAgICAgIGVscy5jdXN0b21IYXJkbmVzc0dyb3VwLmNsYXNzTGlzdC50b2dnbGUoJ29nZC1oaWRkZW4nLCBlbHMuaGFyZG5lc3MudmFsdWUgIT09ICdjdXN0b20nKTsNCiAgICAgICAgICAgIGhpZGVSZXN1bHRzKCk7DQogICAgICAgIH0pOw0KDQogICAgICAgIGVscy5zZWFsVHlwZS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoKSA9PiB7DQogICAgICAgICAgICB1cGRhdGVTcXVlZXplSGludCgpOw0KICAgICAgICAgICAgaGlkZVJlc3VsdHMoKTsNCiAgICAgICAgfSk7DQoNCiAgICAgICAgZWxzLmNhbGN1bGF0ZUJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGNhbGN1bGF0ZSk7DQoNCiAgICAgICAgY29uc3QgaW5wdXRGaWVsZHMgPSBbDQogICAgICAgICAgICBlbHMuY3Jvc3NTZWN0aW9uLCBlbHMub3JpbmdJRCwgZWxzLnRhcmdldENvbXByZXNzaW9uLCBlbHMudGFyZ2V0R2xhbmRGaWxsLA0KICAgICAgICAgICAgZWxzLmluc3RhbGxEaWFtZXRlciwgZWxzLnJhZGlhbENsZWFyYW5jZSwgZWxzLnByZXNzdXJlLCBlbHMucHJlc3N1cmVVbml0LA0KICAgICAgICAgICAgZWxzLnRlbXBlcmF0dXJlLCBlbHMubWF0ZXJpYWwsIGVscy5oYXJkbmVzcywgZWxzLmN1c3RvbUhhcmRuZXNzDQogICAgICAgIF07DQogICAgICAgIGlucHV0RmllbGRzLmZvckVhY2goZmllbGQgPT4gew0KICAgICAgICAgICAgZmllbGQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBoaWRlUmVzdWx0cyk7DQogICAgICAgICAgICBmaWVsZC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBoaWRlUmVzdWx0cyk7DQogICAgICAgIH0pOw0KICAgIH0NCg0KICAgIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnbG9hZGluZycpIHsNCiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGluaXQpOw0KICAgIH0gZWxzZSB7DQogICAgICAgIGluaXQoKTsNCiAgICB9DQp9KSgpOw0K');\n    (new Function(code))();\n})();\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>The O-Ring Groove Dimensions Calculator is a practical engineering tool designed to determine suitable groove depth, groove width, compression ratio, and gland fill for O-ring&#8230;<\/p>","protected":false},"author":2,"featured_media":24744,"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":[8634,8633,8632,8631],"class_list":["post-24743","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-mechanical-basic-component-design","tag-groove-design","tag-o-ring-gland","tag-o-ring-groove","tag-seal-design","pmpro-has-access"],"acf":[],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/www.mechstream.com\/wp-content\/uploads\/2026\/08\/O-Ring-Groove-Dimensions-Calculator.png","_links":{"self":[{"href":"https:\/\/www.mechstream.com\/ru\/wp-json\/wp\/v2\/posts\/24743","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mechstream.com\/ru\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mechstream.com\/ru\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/ru\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/ru\/wp-json\/wp\/v2\/comments?post=24743"}],"version-history":[{"count":1,"href":"https:\/\/www.mechstream.com\/ru\/wp-json\/wp\/v2\/posts\/24743\/revisions"}],"predecessor-version":[{"id":24745,"href":"https:\/\/www.mechstream.com\/ru\/wp-json\/wp\/v2\/posts\/24743\/revisions\/24745"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/ru\/wp-json\/wp\/v2\/media\/24744"}],"wp:attachment":[{"href":"https:\/\/www.mechstream.com\/ru\/wp-json\/wp\/v2\/media?parent=24743"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mechstream.com\/ru\/wp-json\/wp\/v2\/categories?post=24743"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mechstream.com\/ru\/wp-json\/wp\/v2\/tags?post=24743"}],"curies":[{"name":"WP","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}