Калькулятор химического потребления кислорода (ХПК)
Расчёт массовой концентрации кислорода, необходимого для полного химического окисления органических веществ в пробе воды, титриметрическим методом.
—
Масса O₂ на объём пробы
мг
Как пользоваться калькулятором
1
Выберите метод расчёта: Стандартный (по соли Мора) — если известно, сколько титранта пошло на холостую и рабочую пробы; Дихроматный — если известен объём добавленного дихромата калия и объём соли Мора на обратное титрование.
2
Заполните все поля формы. Указывайте объёмы в миллилитрах (мл), концентрации — в моль/л. Например: объём пробы 20 мл, концентрация соли Мора 0.25 моль/л, холостая проба 25.8 мл, рабочая проба 18.3 мл.
3
Нажмите кнопку «Рассчитать ХПК». Результат появится в правой панели: значение ХПК в мг O₂/л, масса кислорода на объём пробы и класс загрязнённости воды.
4
Для нового расчёта нажмите «Сбросить» — все поля очистятся, результат вернётся к исходному виду. При смене метода поля переключаются автоматически.
Примеры использования
Городские сточные воды (стандартный метод)
Vпробы = 20 мл, C(соли Мора) = 0.25 моль/л, Vхол = 25.8 мл, Vраб = 18.3 мл → ХПК ≈ 750 мг O₂/л (грязные воды, требуют очистки).
Природная вода озера (стандартный метод)
Vпробы = 100 мл, C(соли Мора) = 0.025 моль/л, Vхол = 8.5 мл, Vраб = 7.8 мл → ХПК ≈ 14 мг O₂/л (умеренно загрязнённая, естественный фон organics).
Промышленный сток (дихроматный метод)
Vпробы = 10 мл, C(K₂Cr₂O₇) = 0.25 моль/л, Vдихр = 15 мл, C(соли Мора) = 0.25 моль/л, Vтитр = 7.2 мл → ХПК ≈ 3060 мг O₂/л (очень грязные, требуется разбавление пробы).
Важные нюансы
- ХПК всегда выше БПК. Химическое окисление захватывает больше веществ, чем биохимическое. Для бытовых сточных вод отношение ХПК/БПК₅ обычно составляет 1.5–2.5.
- Мешающее влияние хлоридов. При концентрации хлорид-ионов выше 300 мг/л необходимо добавлять сульфат ртути(II) для связывания хлоридов. Без маскировки результат будет завышен.
- Разбавление пробы. Если ожидаемое ХПК превышает 700–800 мг O₂/л, пробу следует разбавить дистиллированной водой. Калькулятор не учитывает разбавление автоматически — пересчитайте результат вручную, умножив на коэффициент разбавления.
- Точность титрования. Используйте свежеприготовленный раствор соли Мора, так как он постепенно окисляется на воздухе. Ежедневно проверяйте концентрацию по стандартному раствору дихромата.
- Техника безопасности. Работа с концентрированной серной кислотой и дихроматом калия (токсичен, канцерогенен категории 1A) требует вытяжного шкафа, защитных очков, перчаток и лабораторного халата. Нагревание смеси проводите с осторожностью — возможно бурное вскипание.
Формулы расчёта
Все расчёты основаны на стехиометрии окислительно-восстановительных реакций. Используемые константы: молярная масса O₂ = 32 г/моль, эквивалентная масса кислорода = 8 г/моль-экв, фактор пересчёта 8000 = 8 × 1000 мг/г.
Стандартный метод (соль Мора)
ХПК (мг O₂/л) = (Vхол − Vраб) × Cсоли Мора × 8000 / Vпробы
где Vхол — объём титранта на холостую пробу (мл), Vраб — на рабочую (мл), C — концентрация соли Мора (моль/л), 8000 — пересчётный коэффициент (8 г/моль-экв × 1000 мг/г), Vпробы — объём анализируемой воды (мл).
Дихроматный метод (через K₂Cr₂O₇)
ХПК (мг O₂/л) = (6 × Cдихр × Vдихр − Cсм × Vтитр) × 8000 / Vпробы
где Cдихр — концентрация K₂Cr₂O₇ (моль/л), Vдихр — объём добавленного дихромата (мл), Cсм — концентрация соли Мора (моль/л), Vтитр — объём соли Мора на титрование остатка дихромата (мл). Множитель 6 отражает число электронов, принимаемых Cr₂O₇²⁻ в кислой среде.
Вспомогательные соотношения
n(O₂) = n(e⁻)органика / 4
m(O₂) [мг] = n(O₂) [моль] × 32000 [мг/моль]
1 моль O₂ принимает 4 электрона в реакции O₂ + 4H⁺ + 4e⁻ → 2H₂O
Классификация по ХПК: <5 мг/л — очень чистые, 5–15 — чистые, 15–30 — умеренно загрязнённые, 30–100 — загрязнённые, 100–500 — грязные, >500 — очень грязные воды.
Источники данных
- ПНД Ф 14.1:2:4.190-2003 — Методика измерений химического потребления кислорода (ХПК) в пробах природных и сточных вод титриметрическим методом. Федеральный реестр методик РФ.
- ГОСТ 31859-2012 (ISO 6060:1989) — Вода. Метод определения химического потребления кислорода. Межгосударственный стандарт.
- IUPAC Gold Book — Chemical Oxygen Demand (COD). Международный союз теоретической и прикладной химии, doi:10.1351/goldbook.C01025.
- Standard Methods for the Examination of Water and Wastewater (APHA, AWWA, WEF), метод 5220 — Chemical Oxygen Demand. Данные верифицированы через NIST Chemistry WebBook (молярные массы, стехиометрические коэффициенты).
Расчёт основан на стандартных химических формулах окислительно-восстановительной стехиометрии и справочных значениях эквивалентных масс, опубликованных в признанных методических документах.
Калькулятор химического потребления кислорода (ХПК) предназначен для быстрого расчёта концентрации кислорода, эквивалентного количеству органических веществ в пробе воды. Инструмент поддерживает два титриметрических метода: стандартный (по разнице объёмов соли Мора на холостую и рабочую пробы) и дихроматный (через избыток K₂Cr₂O₇ с обратным титрованием). Все расчёты выполняются по официальным формулам с константой 8000, отражающей эквивалентную массу кислорода. Результат включает значение ХПК в мг O₂/л, расчётную массу кислорода и классификацию качества воды. Калькулятор полезен экологам, химикам-аналитикам, сотрудникам лабораторий очистных сооружений и студентам технических специальностей.
CiAgKGZ1bmN0aW9uKCl7CiAgICBjb25zdCBtZXRob2RTZWxlY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWV0aG9kLXNlbGVjdCcpOwogICAgY29uc3QgbWV0aG9kTW9ociA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZXRob2QtbW9ocicpOwogICAgY29uc3QgbWV0aG9kRGljaHJvbWF0ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZXRob2QtZGljaHJvbWF0ZScpOwogICAgY29uc3QgZXJyb3JNc2cgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXJyb3ItbWVzc2FnZScpOwogICAgY29uc3QgY2FsY3VsYXRlQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NhbGN1bGF0ZS1idG4nKTsKICAgIGNvbnN0IHJlc2V0QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc2V0LWJ0bicpOwoKICAgIGNvbnN0IHJlc3VsdENvZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXN1bHQtY29kJyk7CiAgICBjb25zdCByZXN1bHRNYXNzTzIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzdWx0LW1hc3MtbzInKTsKICAgIGNvbnN0IHJlc3VsdENsYXNzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc3VsdC1jbGFzcycpOwoKICAgIGNvbnN0IENPTlNUX0ZBQ1RPUiA9IDgwMDA7CiAgICBjb25zdCBNT0xBUl9NQVNTX08yX01HID0gMzIwMDA7CgogICAgZnVuY3Rpb24gZ2V0RmllbGRWYWx1ZShpZCkgewogICAgICBjb25zdCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKICAgICAgaWYgKCFlbCkgcmV0dXJuIE5hTjsKICAgICAgY29uc3QgdmFsID0gcGFyc2VGbG9hdChlbC52YWx1ZSk7CiAgICAgIHJldHVybiB2YWw7CiAgICB9CgogICAgZnVuY3Rpb24gc2hvd0Vycm9yKG1zZykgewogICAgICBpZiAoZXJyb3JNc2cpIHsKICAgICAgICBlcnJvck1zZy50ZXh0Q29udGVudCA9IG1zZzsKICAgICAgICBlcnJvck1zZy5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGNsZWFyRXJyb3IoKSB7CiAgICAgIGlmIChlcnJvck1zZykgewogICAgICAgIGVycm9yTXNnLnRleHRDb250ZW50ID0gJyc7CiAgICAgICAgZXJyb3JNc2cuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGdldFdhdGVyQ2xhc3MoY29kKSB7CiAgICAgIGlmIChjb2QgPCA1KSByZXR1cm4gJ9Ce0YfQtdC90Ywg0YfQuNGB0YLRi9C1JzsKICAgICAgaWYgKGNvZCA8IDE1KSByZXR1cm4gJ9Cn0LjRgdGC0YvQtSc7CiAgICAgIGlmIChjb2QgPCAzMCkgcmV0dXJuICfQo9C80LXRgNC10L3QvdC+INC30LDQs9GA0Y/Qt9C90ZHQvdC90YvQtSc7CiAgICAgIGlmIChjb2QgPCAxMDApIHJldHVybiAn0JfQsNCz0YDRj9C30L3RkdC90L3Ri9C1JzsKICAgICAgaWYgKGNvZCA8IDUwMCkgcmV0dXJuICfQk9GA0Y/Qt9C90YvQtSc7CiAgICAgIHJldHVybiAn0J7Rh9C10L3RjCDQs9GA0Y/Qt9C90YvQtSc7CiAgICB9CgogICAgZnVuY3Rpb24gdmFsaWRhdGVQb3NpdGl2ZSh2YWx1ZSwgbmFtZSkgewogICAgICBpZiAoaXNOYU4odmFsdWUpIHx8IHZhbHVlIDw9IDApIHsKICAgICAgICByZXR1cm4gJ9Cf0L7Qu9C1IMKrJyArIG5hbWUgKyAnwrsg0LTQvtC70LbQvdC+INCx0YvRgtGMINC/0L7Qu9C+0LbQuNGC0LXQu9GM0L3Ri9C8INGH0LjRgdC70L7QvC4nOwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIGZ1bmN0aW9uIHZhbGlkYXRlTm9uTmVnYXRpdmUodmFsdWUsIG5hbWUpIHsKICAgICAgaWYgKGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA8IDApIHsKICAgICAgICByZXR1cm4gJ9Cf0L7Qu9C1IMKrJyArIG5hbWUgKyAnwrsg0LTQvtC70LbQvdC+INCx0YvRgtGMINC90LXQvtGC0YDQuNGG0LDRgtC10LvRjNC90YvQvCDRh9C40YHQu9C+0LwuJzsKICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBmdW5jdGlvbiBjYWxjdWxhdGVNb2hyKCkgewogICAgICBjb25zdCB2U2FtcGxlID0gZ2V0RmllbGRWYWx1ZSgndm9sdW1lLXNhbXBsZScpOwogICAgICBjb25zdCBjTW9ociA9IGdldEZpZWxkVmFsdWUoJ2NvbmMtbW9ocicpOwogICAgICBjb25zdCB2QmxhbmsgPSBnZXRGaWVsZFZhbHVlKCd2b2x1bWUtYmxhbmsnKTsKICAgICAgY29uc3QgdlNhbXBsZVRpdHIgPSBnZXRGaWVsZFZhbHVlKCd2b2x1bWUtc2FtcGxlLXRpdHJhdGlvbicpOwoKICAgICAgbGV0IGVycm9yID0gdmFsaWRhdGVQb3NpdGl2ZSh2U2FtcGxlLCAn0J7QsdGK0ZHQvCDQv9GA0L7QsdGLJykgfHwKICAgICAgICAgICAgICAgICAgdmFsaWRhdGVQb3NpdGl2ZShjTW9ociwgJ9Ca0L7QvdGG0LXQvdGC0YDQsNGG0LjRjyDRgdC+0LvQuCDQnNC+0YDQsCcpIHx8CiAgICAgICAgICAgICAgICAgIHZhbGlkYXRlTm9uTmVnYXRpdmUodkJsYW5rLCAn0J7QsdGK0ZHQvCDQvdCwINGF0L7Qu9C+0YHRgtGD0Y4g0L/RgNC+0LHRgycpIHx8CiAgICAgICAgICAgICAgICAgIHZhbGlkYXRlTm9uTmVnYXRpdmUodlNhbXBsZVRpdHIsICfQntCx0YrRkdC8INC90LAg0YDQsNCx0L7Rh9GD0Y4g0L/RgNC+0LHRgycpOwogICAgICBpZiAoZXJyb3IpIHsKICAgICAgICBzaG93RXJyb3IoZXJyb3IpOwogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CgogICAgICBpZiAodkJsYW5rIDw9IHZTYW1wbGVUaXRyKSB7CiAgICAgICAgc2hvd0Vycm9yKCfQntCx0YrRkdC8INGC0LjRgtGA0LDQvdGC0LAg0L3QsCDRhdC+0LvQvtGB0YLRg9GOINC/0YDQvtCx0YMg0LTQvtC70LbQtdC9INCx0YvRgtGMINGB0YLRgNC+0LPQviDQsdC+0LvRjNGI0LUg0L7QsdGK0ZHQvNCwINC90LAg0YDQsNCx0L7Rh9GD0Y4g0L/RgNC+0LHRgyAoVtGF0L7QuyA+IFbRgNCw0LEpLiDQn9GA0L7QstC10YDRjNGC0LUg0LTQsNC90L3Ri9C1INGC0LjRgtGA0L7QstCw0L3QuNGPLicpOwogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CgogICAgICBjb25zdCBjb2QgPSAodkJsYW5rIC0gdlNhbXBsZVRpdHIpICogY01vaHIgKiBDT05TVF9GQUNUT1IgLyB2U2FtcGxlOwogICAgICBpZiAoIWlzRmluaXRlKGNvZCkgfHwgY29kIDwgMCkgewogICAgICAgIHNob3dFcnJvcign0J3QtdC60L7RgNGA0LXQutGC0L3Ri9C5INGA0LXQt9GD0LvRjNGC0LDRgiDRgNCw0YHRh9GR0YLQsC4g0J/RgNC+0LLQtdGA0YzRgtC1INCy0LLQtdC00ZHQvdC90YvQtSDQt9C90LDRh9C10L3QuNGPLicpOwogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CgogICAgICBjb25zdCBtYXNzTzJNZyA9IGNvZCAqICh2U2FtcGxlIC8gMTAwMCk7CiAgICAgIHJldHVybiB7IGNvZCwgbWFzc08yTWcgfTsKICAgIH0KCiAgICBmdW5jdGlvbiBjYWxjdWxhdGVEaWNocm9tYXRlKCkgewogICAgICBjb25zdCB2U2FtcGxlID0gZ2V0RmllbGRWYWx1ZSgndm9sdW1lLXNhbXBsZS1kJyk7CiAgICAgIGNvbnN0IGNEaWNociA9IGdldEZpZWxkVmFsdWUoJ2NvbmMtZGljaHJvbWF0ZScpOwogICAgICBjb25zdCB2RGljaHIgPSBnZXRGaWVsZFZhbHVlKCd2b2x1bWUtZGljaHJvbWF0ZScpOwogICAgICBjb25zdCBjTW9ockQgPSBnZXRGaWVsZFZhbHVlKCdjb25jLW1vaHItZCcpOwogICAgICBjb25zdCB2VGl0cmFudCA9IGdldEZpZWxkVmFsdWUoJ3ZvbHVtZS10aXRyYW50LWQnKTsKCiAgICAgIGxldCBlcnJvciA9IHZhbGlkYXRlUG9zaXRpdmUodlNhbXBsZSwgJ9Ce0LHRitGR0Lwg0L/RgNC+0LHRiycpIHx8CiAgICAgICAgICAgICAgICAgIHZhbGlkYXRlUG9zaXRpdmUoY0RpY2hyLCAn0JrQvtC90YbQtdC90YLRgNCw0YbQuNGPIEvigoJDcuKCgk/igocnKSB8fAogICAgICAgICAgICAgICAgICB2YWxpZGF0ZVBvc2l0aXZlKHZEaWNociwgJ9Ce0LHRitGR0Lwg0LTQvtCx0LDQstC70LXQvdC90L7Qs9C+IEvigoJDcuKCgk/igocnKSB8fAogICAgICAgICAgICAgICAgICB2YWxpZGF0ZVBvc2l0aXZlKGNNb2hyRCwgJ9Ca0L7QvdGG0LXQvdGC0YDQsNGG0LjRjyDRgdC+0LvQuCDQnNC+0YDQsCcpIHx8CiAgICAgICAgICAgICAgICAgIHZhbGlkYXRlTm9uTmVnYXRpdmUodlRpdHJhbnQsICfQntCx0YrRkdC8INGB0L7Qu9C4INCc0L7RgNCwINC90LAg0YLQuNGC0YDQvtCy0LDQvdC40LUnKTsKICAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgc2hvd0Vycm9yKGVycm9yKTsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQoKICAgICAgY29uc3QgbnVtZXJhdG9yID0gNiAqIGNEaWNociAqIHZEaWNociAtIGNNb2hyRCAqIHZUaXRyYW50OwogICAgICBpZiAobnVtZXJhdG9yIDw9IDApIHsKICAgICAgICBzaG93RXJyb3IoJ9Ca0L7Qu9C40YfQtdGB0YLQstC+INGN0LvQtdC60YLRgNC+0L3QvtCyINC+0YIg0LTQuNGF0YDQvtC80LDRgtCwINC00L7Qu9C20L3QviDQv9GA0LXQstGL0YjQsNGC0Ywg0LrQvtC70LjRh9C10YHRgtCy0L4sINC/0L7RiNC10LTRiNC10LUg0L3QsCDRgtC40YLRgNC+0LLQsNC90LjQtS4g0J/RgNC+0LLQtdGA0YzRgtC1INC+0LHRitGR0LzRiyDQuCDQutC+0L3RhtC10L3RgtGA0LDRhtC40Lgg4oCUINCy0L7Qt9C80L7QttC90L4sINC00LjRhdGA0L7QvNCw0YLQsCDQsdGL0LvQviDQvdC10LTQvtGB0YLQsNGC0L7Rh9C90L4g0LTQu9GPINC+0LrQuNGB0LvQtdC90LjRjyDQv9GA0L7QsdGLLicpOwogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CgogICAgICBjb25zdCBjb2QgPSBudW1lcmF0b3IgKiBDT05TVF9GQUNUT1IgLyB2U2FtcGxlOwogICAgICBpZiAoIWlzRmluaXRlKGNvZCkgfHwgY29kIDwgMCkgewogICAgICAgIHNob3dFcnJvcign0J3QtdC60L7RgNGA0LXQutGC0L3Ri9C5INGA0LXQt9GD0LvRjNGC0LDRgiDRgNCw0YHRh9GR0YLQsC4g0J/RgNC+0LLQtdGA0YzRgtC1INCy0LLQtdC00ZHQvdC90YvQtSDQt9C90LDRh9C10L3QuNGPLicpOwogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CgogICAgICBjb25zdCBtYXNzTzJNZyA9IGNvZCAqICh2U2FtcGxlIC8gMTAwMCk7CiAgICAgIHJldHVybiB7IGNvZCwgbWFzc08yTWcgfTsKICAgIH0KCiAgICBmdW5jdGlvbiB1cGRhdGVSZXN1bHRzKHJlc3VsdCkgewogICAgICBpZiAoIXJlc3VsdCkgewogICAgICAgIHJlc3VsdENvZC50ZXh0Q29udGVudCA9ICfigJQnOwogICAgICAgIHJlc3VsdE1hc3NPMi50ZXh0Q29udGVudCA9ICfigJQnOwogICAgICAgIHJlc3VsdENsYXNzLnRleHRDb250ZW50ID0gJ+KAlCc7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IGNvZFJvdW5kZWQgPSBNYXRoLnJvdW5kKHJlc3VsdC5jb2QgKiAxMDApIC8gMTAwOwogICAgICBjb25zdCBtYXNzUm91bmRlZCA9IE1hdGgucm91bmQocmVzdWx0Lm1hc3NPMk1nICogMTAwMCkgLyAxMDAwOwogICAgICByZXN1bHRDb2QudGV4dENvbnRlbnQgPSBjb2RSb3VuZGVkOwogICAgICByZXN1bHRNYXNzTzIudGV4dENvbnRlbnQgPSBtYXNzUm91bmRlZDsKICAgICAgcmVzdWx0Q2xhc3MudGV4dENvbnRlbnQgPSBnZXRXYXRlckNsYXNzKHJlc3VsdC5jb2QpOwogICAgfQoKICAgIGZ1bmN0aW9uIGhhbmRsZUNhbGN1bGF0ZSgpIHsKICAgICAgY2xlYXJFcnJvcigpOwogICAgICBjb25zdCBtZXRob2QgPSBtZXRob2RTZWxlY3QgPyBtZXRob2RTZWxlY3QudmFsdWUgOiAnbW9ocic7CiAgICAgIGxldCByZXN1bHQgPSBudWxsOwogICAgICBpZiAobWV0aG9kID09PSAnbW9ocicpIHsKICAgICAgICByZXN1bHQgPSBjYWxjdWxhdGVNb2hyKCk7CiAgICAgIH0gZWxzZSBpZiAobWV0aG9kID09PSAnZGljaHJvbWF0ZScpIHsKICAgICAgICByZXN1bHQgPSBjYWxjdWxhdGVEaWNocm9tYXRlKCk7CiAgICAgIH0KICAgICAgaWYgKHJlc3VsdCAhPT0gbnVsbCkgewogICAgICAgIHVwZGF0ZVJlc3VsdHMocmVzdWx0KTsKICAgICAgfSBlbHNlIHsKICAgICAgICB1cGRhdGVSZXN1bHRzKG51bGwpOwogICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gaGFuZGxlUmVzZXQoKSB7CiAgICAgIGNsZWFyRXJyb3IoKTsKICAgICAgY29uc3QgYWxsSW5wdXRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLm5uLWdlbi1jYWwtZmllbGQnKTsKICAgICAgYWxsSW5wdXRzLmZvckVhY2goZnVuY3Rpb24oaW5wdXQpIHsKICAgICAgICBpZiAoaW5wdXQudGFnTmFtZSA9PT0gJ1NFTEVDVCcpIHsKICAgICAgICAgIGlucHV0LnNlbGVjdGVkSW5kZXggPSAwOwogICAgICAgIH0gZWxzZSBpZiAoaW5wdXQudHlwZSA9PT0gJ251bWJlcicpIHsKICAgICAgICAgIGlucHV0LnZhbHVlID0gJyc7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgdXBkYXRlUmVzdWx0cyhudWxsKTsKICAgICAgaWYgKG1ldGhvZFNlbGVjdCkgewogICAgICAgIG1ldGhvZFNlbGVjdC52YWx1ZSA9ICdtb2hyJzsKICAgICAgICBzd2l0Y2hNZXRob2RGaWVsZHMoJ21vaHInKTsKICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIHN3aXRjaE1ldGhvZEZpZWxkcyhtZXRob2QpIHsKICAgICAgaWYgKG1ldGhvZE1vaHIgJiYgbWV0aG9kRGljaHJvbWF0ZSkgewogICAgICAgIGlmIChtZXRob2QgPT09ICdtb2hyJykgewogICAgICAgICAgbWV0aG9kTW9oci5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICAgICAgICAgIG1ldGhvZERpY2hyb21hdGUuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbWV0aG9kTW9oci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICAgICAgbWV0aG9kRGljaHJvbWF0ZS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICAgICAgICB9CiAgICAgIH0KICAgICAgY2xlYXJFcnJvcigpOwogICAgICB1cGRhdGVSZXN1bHRzKG51bGwpOwogICAgfQoKICAgIGlmIChtZXRob2RTZWxlY3QpIHsKICAgICAgbWV0aG9kU2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZ1bmN0aW9uKCkgewogICAgICAgIHN3aXRjaE1ldGhvZEZpZWxkcyhtZXRob2RTZWxlY3QudmFsdWUpOwogICAgICB9KTsKICAgIH0KCiAgICBpZiAoY2FsY3VsYXRlQnRuKSB7CiAgICAgIGNhbGN1bGF0ZUJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGhhbmRsZUNhbGN1bGF0ZSk7CiAgICB9CgogICAgaWYgKHJlc2V0QnRuKSB7CiAgICAgIHJlc2V0QnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlUmVzZXQpOwogICAgfQoKICAgIHN3aXRjaE1ldGhvZEZpZWxkcygnbW9ocicpOwogICAgdXBkYXRlUmVzdWx0cyhudWxsKTsKICB9KSgpOwo=