{"id":496912,"date":"2026-10-01T12:29:15","date_gmt":"2026-10-01T12:29:15","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=496912"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=496912","title":{"rendered":"2 100 \u043f\u0438\u0441\u0435\u043c \u0438 \u043d\u043e\u043b\u044c \u043e\u0442\u0432\u0435\u0442\u043e\u0432: \u0440\u0430\u0437\u0431\u043e\u0440 \u0445\u043e\u043b\u043e\u0434\u043d\u043e\u0439 \u0440\u0430\u0441\u0441\u044b\u043b\u043a\u0438 \u0432 \u0431\u0430\u043d\u043a\u0438 \u0438 \u0444\u043e\u043d\u0434\u044b"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h2>2 100 \u043f\u0438\u0441\u0435\u043c \u0438 \u043d\u043e\u043b\u044c \u043e\u0442\u0432\u0435\u0442\u043e\u0432: \u0440\u0430\u0437\u0431\u043e\u0440 \u0445\u043e\u043b\u043e\u0434\u043d\u043e\u0439 \u0440\u0430\u0441\u0441\u044b\u043b\u043a\u0438 \u0432 \u0431\u0430\u043d\u043a\u0438 \u0438 \u0444\u043e\u043d\u0434\u044b<\/h2>\n<p>\u0412 \u043a\u043e\u043d\u0446\u0435 \u043b\u0435\u0442\u0430 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u043e\u0441\u044c \u0437\u0430\u0434\u0430\u0442\u044c \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u0430\u043c \u043f\u043e \u0440\u0438\u0441\u043a\u0430\u043c \u0432 \u0431\u0430\u043d\u043a\u0430\u0445 \u0438 \u0438\u043d\u0432\u0435\u0441\u0442\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0444\u043e\u043d\u0434\u0430\u0445. \u041e\u043f\u0440\u043e\u0441 \u0431\u044b\u043b \u043e\u0442\u0440\u0430\u0441\u043b\u0435\u0432\u043e\u0439: \u043a\u0430\u043a\u0438\u043c\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u043e\u043d\u0438 \u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0431\u043e\u0442\u044b \u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u043d\u0430 Excel, \u0433\u0434\u0435 \u0431\u0443\u043a\u0441\u0443\u044e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b. \u0413\u043e\u0442\u043e\u0432\u0443\u044e \u0431\u0430\u0437\u0443 \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u043d\u0435 \u043f\u043e\u043a\u0443\u043f\u0430\u0442\u044c \u0438 \u0441\u043e\u0431\u0440\u0430\u043b\u0438 \u0430\u0434\u0440\u0435\u0441\u0430\u0442\u043e\u0432 \u0441\u0430\u043c\u0438, \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0438\u0437 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u0440\u0435\u0435\u0441\u0442\u0440\u043e\u0432. \u0417\u0430 \u0434\u0432\u0435 \u043d\u0435\u0434\u0435\u043b\u0438 \u0443\u0448\u043b\u043e \u043e\u043a\u043e\u043b\u043e 2 100 \u043f\u0438\u0441\u0435\u043c. \u0418\u0437 \u0445\u043e\u043b\u043e\u0434\u043d\u043e\u0439 \u0440\u0430\u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0435 \u043e\u0442\u0432\u0435\u0442\u0438\u043b \u043d\u0438\u043a\u0442\u043e. \u0412\u0441\u0435 \u0434\u0435\u0441\u044f\u0442\u044c \u043e\u0442\u0432\u0435\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c, \u043f\u0440\u0438\u0448\u043b\u0438 \u0447\u0435\u0440\u0435\u0437 \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0445.<\/p>\n<p>\u041d\u0438\u0436\u0435 \u0440\u0430\u0437\u0431\u043e\u0440 \u043f\u043e \u0448\u0430\u0433\u0430\u043c: \u043e\u0442\u043a\u0443\u0434\u0430 \u0431\u0440\u0430\u043b\u0438 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438, \u043a\u0430\u043a \u0438\u0441\u043a\u0430\u043b\u0438 \u0441\u0430\u0439\u0442\u044b \u0438 \u0430\u0434\u0440\u0435\u0441\u0430, \u043d\u0430 \u0447\u0451\u043c \u0441\u043f\u043e\u0442\u043a\u043d\u0443\u043b\u0430\u0441\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 DNS, \u043f\u043e\u0447\u0435\u043c\u0443 \u043f\u043e\u0447\u0442\u043e\u0432\u044b\u0435 \u0448\u043b\u044e\u0437\u044b \u0431\u0430\u043d\u043a\u043e\u0432 \u043e\u0442\u0431\u0438\u043b\u0438 \u043f\u0435\u0440\u0432\u0443\u044e \u0432\u043e\u043b\u043d\u0443 \u0438 \u043a\u0430\u043a \u0440\u0430\u0441\u0441\u044b\u043b\u043a\u0430 \u043e\u0434\u043d\u0430\u0436\u0434\u044b \u00ab\u0443\u0441\u043f\u0435\u0448\u043d\u043e\u00bb \u043d\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0438\u0441\u044c\u043c\u0430. \u041a\u043e\u0434 \u043d\u0430 Python, \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b \u0432\u0437\u044f\u0442\u044b \u0438\u0437 \u043d\u0430\u0448\u0435\u0433\u043e \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u0438 \u043c\u0435\u0441\u0442\u0430\u043c\u0438 \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u044b.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/49\/45\/96\/494596b617ed98b25db5351d38e95cac.png\" alt=\"\u041e\u043a\u043e\u043b\u043e 2 100 \u043f\u0438\u0441\u0435\u043c \u0438 10 \u043e\u0442\u0432\u0435\u0442\u043e\u0432\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/49\/45\/96\/494596b617ed98b25db5351d38e95cac.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/49\/45\/96\/494596b617ed98b25db5351d38e95cac.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041e\u043a\u043e\u043b\u043e 2 100 \u043f\u0438\u0441\u0435\u043c \u0438 10 \u043e\u0442\u0432\u0435\u0442\u043e\u0432<\/figcaption><\/div>\n<\/figure>\n<h3>\u041e\u0442\u043a\u0443\u0434\u0430 \u0431\u0440\u0430\u0442\u044c \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438: GLEIF<\/h3>\n<p>\u041d\u0443\u0436\u0435\u043d \u0431\u044b\u043b \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u0445 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0439 \u043f\u043e \u043c\u043d\u043e\u0433\u0438\u043c \u0441\u0442\u0440\u0430\u043d\u0430\u043c, \u0441 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u043c (\u0431\u0430\u043d\u043a, \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0430\u044f \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f, \u0444\u043e\u043d\u0434) \u0438 \u0430\u0434\u0440\u0435\u0441\u043e\u043c. \u0421\u0430\u043c\u044b\u0439 \u043f\u043e\u043b\u043d\u044b\u0439 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0442\u0430\u043a\u043e\u0433\u043e \u0440\u043e\u0434\u0430 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f GLEIF. \u042d\u0442\u043e \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0435\u0441\u0442\u0440 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 \u044e\u0440\u043b\u0438\u0446 (LEI). LEI \u043d\u0443\u0436\u0435\u043d \u043b\u044e\u0431\u043e\u0439 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0441\u0434\u0435\u043b\u043a\u0438 \u043d\u0430 \u0440\u0435\u0433\u0443\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u0445 \u0440\u044b\u043d\u043a\u0430\u0445, \u0442\u0430\u043a \u0447\u0442\u043e \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u0439 \u0441\u0435\u043a\u0442\u043e\u0440 \u0442\u0430\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043f\u043e\u0447\u0442\u0438 \u0446\u0435\u043b\u0438\u043a\u043e\u043c. \u0423 GLEIF \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 JSON API \u0431\u0435\u0437 \u043a\u043b\u044e\u0447\u0430.<\/p>\n<p>\u0417\u0430\u043f\u0440\u043e\u0441 \u043f\u043e \u0441\u0442\u0440\u0430\u043d\u0435 \u0438 \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u043c\u0443 \u0441\u043b\u043e\u0432\u0443:<\/p>\n<pre><code class=\"python\">GLEIF_API = \"https:\/\/api.gleif.org\/api\/v1\/lei-records\"def gleif_page(country: str, keyword: str | None, page: int) -&gt; list[dict]:    params = {        \"filter[entity.legalAddress.country]\": country,        \"page[size]\": 200,        \"page[number]\": page,    }    if keyword:        params[\"filter[fulltext]\"] = keyword       # \"bank\", \"asset management\", ...    else:        params[\"filter[entity.category]\"] = \"FUND\"    return get_json(GLEIF_API, params).get(\"data\", [])<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper\"><\/span><\/a><\/div><\/pre>\n<p>\u0427\u0442\u043e \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0443\u0447\u0435\u0441\u0442\u044c:<\/p>\n<ul>\n<li>\n<p><strong>\u041f\u043e\u043b\u043d\u043e\u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u043f\u043e\u0438\u0441\u043a \u0438\u0449\u0435\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044e.<\/strong> \u0417\u0430\u043f\u0440\u043e\u0441 <code>bank<\/code> \u043f\u043e \u041e\u0410\u042d \u0432\u0435\u0440\u043d\u0443\u043b \u043a\u043e\u043d\u0441\u0430\u043b\u0442\u0438\u043d\u0433\u043e\u0432\u0443\u044e \u043a\u043e\u043d\u0442\u043e\u0440\u0443 \u0438 \u0442\u043e\u0440\u0433\u043e\u0432\u0443\u044e \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044e: \u0441\u043b\u043e\u0432\u043e \u043d\u0430\u0448\u043b\u043e\u0441\u044c \u0432 \u0430\u0434\u0440\u0435\u0441\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u0430\u0436\u0434\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0432\u0442\u043e\u0440\u043e\u0439 \u0440\u0430\u0437, \u0443\u0436\u0435 \u043f\u043e \u0441\u0430\u043c\u043e\u043c\u0443 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044e, \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u043c\u0430\u0440\u043a\u0435\u0440\u043e\u0432 \u0432\u0440\u043e\u0434\u0435 <code>bank<\/code>, <code>capital<\/code>, <code>asset<\/code>, <code>insur<\/code>, <code>banque<\/code>, <code>banca<\/code>.<\/p>\n<\/li>\n<li>\n<p><strong>\u0421\u0442\u0430\u0442\u0443\u0441.<\/strong> \u0411\u0435\u0440\u0451\u043c \u0442\u043e\u043b\u044c\u043a\u043e <code>entity.status == ACTIVE<\/code> \u0438 \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0432 \u0441\u0442\u0430\u0442\u0443\u0441\u0435 <code>LAPSED<\/code>: LEI \u043d\u0435 \u043f\u0440\u043e\u0434\u043b\u0451\u043d, \u0437\u0430 \u0437\u0430\u043f\u0438\u0441\u044c\u044e \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0441\u043b\u0435\u0434\u0438\u0442.<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u043e\u0434\u0444\u043e\u043d\u0434\u044b.<\/strong> \u0423 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u0434\u0444\u043e\u043d\u0434\u0430 \u043f\u0430\u0435\u0432\u043e\u0439 \u043b\u0438\u043d\u0435\u0439\u043a\u0438 \u0441\u0432\u043e\u0439 LEI, \u043d\u043e \u043d\u0438 \u0441\u0430\u0439\u0442\u0430, \u043d\u0438 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043e\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0443 \u043d\u0435\u0433\u043e \u043d\u0435\u0442. \u0422\u043e\u043b\u044c\u043a\u043e \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f <code>FUND<\/code> \u0434\u0430\u043b\u0430 21 056 \u0437\u0430\u043f\u0438\u0441\u0435\u0439. \u041e\u0442\u0441\u0435\u043a\u0430\u0435\u043c \u0438\u0445 \u043f\u043e \u043c\u0430\u0440\u043a\u0435\u0440\u0430\u043c <code>sub-fund<\/code>, <code>compartment<\/code>, <code>teilfonds<\/code> \u0438 \u0442. \u043f.<\/p>\n<\/li>\n<li>\n<p><strong>\u041c\u0430\u0442\u0435\u0440\u0438\u043d\u0441\u043a\u0430\u044f \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f \u0431\u0435\u0437 \u043b\u0438\u0448\u043d\u0435\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430.<\/strong> GLEIF \u043a\u043b\u0430\u0434\u0451\u0442 LEI \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u043f\u0440\u044f\u043c\u043e \u0432 URL \u0441\u0432\u044f\u0437\u0438 <code>...\/lei-records\/{LEI}\/ultimate-parent-relationship<\/code>. \u0415\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043d\u0443\u0442\u044c \u0438\u0437 \u043e\u0442\u0432\u0435\u0442\u0430, \u0430 \u043d\u0435 \u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u043a\u0430\u0436\u0434\u0443\u044e \u0438\u0437 \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0432 \u0442\u044b\u0441\u044f\u0447 \u0437\u0430\u043f\u0438\u0441\u0435\u0439. \u041d\u0443\u0436\u043d\u043e \u044d\u0442\u043e \u0434\u043b\u044f \u0434\u0435\u0434\u0443\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0433\u0440\u0443\u043f\u043f: \u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u043f\u044f\u0442\u044c \u0434\u043e\u0447\u0435\u043a \u043e\u0434\u043d\u043e\u0433\u043e \u0431\u0430\u043d\u043a\u0430 \u0431\u0435\u0441\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u043e.<\/p>\n<\/li>\n<li>\n<p><strong>\u042e\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u0434\u0440\u0435\u0441 \u043d\u0435 \u0440\u0430\u0432\u0435\u043d \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c\u0443.<\/strong> \u0424\u0438\u043b\u044c\u0442\u0440 \u043f\u043e \u0441\u0442\u0440\u0430\u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e <code>legalAddress<\/code>. \u0423 \u043a\u0440\u0443\u043f\u043d\u043e\u0433\u043e \u0431\u0430\u043d\u043a\u0430 \u0438\u0437 \u041e\u0410\u042d \u043d\u0430\u0448\u043b\u0430\u0441\u044c \u0437\u0430\u043f\u0438\u0441\u044c \u0441 \u044e\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u0432\u043e \u0424\u0440\u0430\u043d\u0446\u0438\u0438 \u0438 \u0448\u0442\u0430\u0431-\u043a\u0432\u0430\u0440\u0442\u0438\u0440\u043e\u0439 \u0432 \u0410\u0431\u0443-\u0414\u0430\u0431\u0438. \u0415\u0441\u043b\u0438 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0443 \u043f\u043e \u044e\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043a\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443, \u043f\u0438\u0441\u044c\u043c\u043e \u043f\u0440\u0438\u0434\u0451\u0442 \u0432 \u043f\u0430\u0440\u0438\u0436\u0441\u043a\u043e\u0435 \u0443\u0442\u0440\u043e \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0436\u0438\u0432\u0451\u0442 \u043f\u043e \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u0447\u0430\u0441\u043e\u0432\u043e\u043c\u0443 \u043f\u043e\u044f\u0441\u0443. \u0421\u0442\u0440\u0430\u043d\u0443 \u0431\u0435\u0440\u0451\u043c \u0438\u0437 <code>headquartersAddress<\/code>, \u0430 \u044e\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u0434\u0440\u0435\u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u0430\u043a \u0437\u0430\u043f\u0430\u0441\u043d\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442.<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"python\">hq = (ent.get(\"headquartersAddress\") or {}).get(\"country\") or \"\"legal = (ent.get(\"legalAddress\") or {}).get(\"country\") or \"\"real_country = hq or legal or queried_country<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041f\u043e 95 \u0441\u0442\u0440\u0430\u043d\u0430\u043c \u0432\u044b\u0448\u043b\u043e \u043e\u043a\u043e\u043b\u043e 27 \u0442\u044b\u0441\u044f\u0447 \u0436\u0438\u0432\u044b\u0445 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0439. \u041f\u043e\u0441\u043b\u0435 \u0434\u0435\u0434\u0443\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u043e \u0433\u0440\u0443\u043f\u043f\u0430\u043c \u0438 \u043f\u043e\u0442\u043e\u043b\u043a\u0430 \u0432 250 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0439 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0443 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c 13 511. \u0412 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a GLEIF \u043f\u043e \u0421\u0428\u0410 \u0431\u0440\u0430\u043b\u0438 EDGAR (\u0440\u0435\u0435\u0441\u0442\u0440 SEC) \u043f\u043e \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u043c \u043a\u043e\u0434\u0430\u043c SIC. SEC \u0442\u0440\u0435\u0431\u0443\u0435\u0442 <code>User-Agent<\/code> \u0441 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u043c \u0438 \u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u0440\u0435\u0434\u0435\u043b 10 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443. \u0417\u0430 \u043d\u0430\u0440\u0443\u0448\u0435\u043d\u0438\u0435 \u0431\u0430\u043d\u044f\u0442 \u043f\u043e IP, \u0438 \u0442\u043e\u0433\u0434\u0430 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u043f\u0440\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0446\u0435\u043b\u0438\u043a\u043e\u043c.<\/p>\n<h3>\u0420\u0435\u0435\u0441\u0442\u0440 \u043d\u0435 \u0437\u043d\u0430\u0435\u0442 \u0441\u0430\u0439\u0442\u0430<\/h3>\n<p>\u0423 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 GLEIF \u0435\u0441\u0442\u044c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435, \u0430\u0434\u0440\u0435\u0441 \u0438 \u0441\u0435\u0433\u043c\u0435\u043d\u0442, \u043d\u043e \u043d\u0435\u0442 \u043d\u0438 \u0441\u0430\u0439\u0442\u0430, \u043d\u0438 \u043f\u043e\u0447\u0442\u044b. \u0411\u0435\u0437 \u0441\u0430\u0439\u0442\u0430 \u043d\u0435 \u043d\u0430\u0439\u0442\u0438 \u0430\u0434\u0440\u0435\u0441, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u043b\u044c\u0448\u0435 \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u044e\u0440\u043b\u0438\u0446\u043e \u0441 \u0434\u043e\u043c\u0435\u043d\u043e\u043c.<\/p>\n<p><strong>Wikidata<\/strong> \u0431\u044b\u043b\u0430 \u043f\u0435\u0440\u0432\u043e\u0439 \u043f\u043e\u043f\u044b\u0442\u043a\u043e\u0439: SPARQL-\u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u0430\u0447\u043a\u0430\u043c\u0438 \u0447\u0435\u0440\u0435\u0437 <code>VALUES<\/code> \u0441 \u0442\u043e\u0447\u043d\u044b\u043c \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435\u043c <code>rdfs:label<\/code>. \u041d\u0430 \u044e\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f\u0445 \u044d\u0442\u043e \u043f\u043e\u0447\u0442\u0438 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442: \u0432 \u0440\u0435\u0435\u0441\u0442\u0440\u0435 <code>FIRST ABU DHABI BANK P.J.S.C.<\/code>, \u0432 Wikidata <code>First Abu Dhabi Bank<\/code>. \u0412\u0442\u043e\u0440\u043e\u0439 \u043f\u0440\u043e\u0445\u043e\u0434 \u043e\u0442\u0440\u0435\u0437\u0430\u043b \u044e\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0444\u043e\u0440\u043c\u0443 \u0441 \u043a\u043e\u043d\u0446\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 (<code>Ltd<\/code>, <code>Inc<\/code>, <code>PJSC<\/code>), \u043d\u043e \u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u043b <code>Group<\/code> \u0438 <code>Holding<\/code>, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u0438 \u0431\u044b\u0432\u0430\u044e\u0442 \u0447\u0430\u0441\u0442\u044c\u044e \u0431\u0440\u0435\u043d\u0434\u0430. \u0414\u0432\u0430 \u043f\u0440\u043e\u0445\u043e\u0434\u0430 \u0432\u043c\u0435\u0441\u0442\u0435 \u0434\u0430\u043b\u0438 220 \u0434\u043e\u043c\u0435\u043d\u043e\u0432 \u0438\u0437 13 511, \u043c\u0435\u043d\u044c\u0448\u0435 2 %.<\/p>\n<p><strong>\u0410\u0432\u0442\u043e\u043a\u043e\u043c\u043f\u043b\u0438\u0442 Clearbit<\/strong> \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u043d\u0430 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u043f\u043e\u043b\u0435\u0437\u043d\u0435\u0435. \u041f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442 <code>autocomplete.clearbit.com\/v1\/companies\/suggest<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0442\u043e\u0438\u0442 \u0443 \u043d\u0438\u0445 \u043d\u0430 \u0444\u043e\u0440\u043c\u0430\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438, \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0440\u043e\u0433\u043e\u043d\u0430 \u043e\u0442\u0432\u0435\u0447\u0430\u043b \u0431\u0435\u0437 \u043a\u043b\u044e\u0447\u0430. \u041e\u043d \u043d\u0430\u0448\u0451\u043b \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0434\u043b\u044f 30 % \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0439. \u041d\u043e \u043f\u0435\u0440\u0432\u043e\u043c\u0443 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0443 \u0432\u044b\u0434\u0430\u0447\u0438 \u0432\u0435\u0440\u0438\u0442\u044c \u043d\u0435\u043b\u044c\u0437\u044f: \u0440\u0430\u043d\u0436\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u043f\u043e\u0434 \u0430\u0432\u0442\u043e\u043a\u043e\u043c\u043f\u043b\u0438\u0442, \u0430 \u043d\u0435 \u043f\u043e\u0434 \u0442\u043e\u0447\u043d\u043e\u0435 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u044e\u0440\u043b\u0438\u0446. \u0414\u043b\u044f <code>Angel Capital<\/code> \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0434\u043e\u043c\u0435\u043d \u0441\u0442\u043e\u044f\u043b \u0447\u0435\u0442\u0432\u0451\u0440\u0442\u044b\u043c, \u0430 \u043f\u0435\u0440\u0432\u044b\u043c \u0448\u043b\u0430 <code>Angel Capital Association<\/code>, \u0434\u0440\u0443\u0433\u0430\u044f \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f.<\/p>\n<p>\u041b\u0443\u0447\u0448\u0435\u0433\u043e \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u0430 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u043f\u043e \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0443 \u0416\u0430\u043a\u043a\u0430\u0440\u0430 \u043d\u0430 \u0437\u043d\u0430\u0447\u0438\u043c\u044b\u0445 \u0441\u043b\u043e\u0432\u0430\u0445. \u0420\u043e\u0434\u043e\u0432\u044b\u0435 \u0441\u043b\u043e\u0432\u0430 (<code>capital<\/code>, <code>bank<\/code>, <code>fund<\/code>, <code>group<\/code>, <code>holding<\/code>, <code>ltd<\/code>\u2026) \u0438\u0437 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0432\u044b\u043a\u0438\u043d\u0443\u0442\u044b, \u0438\u043d\u0430\u0447\u0435 <code>424 Capital<\/code> \u0441\u043e\u0432\u043f\u0430\u0434\u0451\u0442 \u0441 <code>Capital One<\/code> \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u0441\u043b\u043e\u0432\u0443 <code>capital<\/code>:<\/p>\n<pre><code class=\"python\">def best_match(query_name: str, results: list[dict]) -&gt; str:    q = tokens(query_name)                        # \u0431\u0435\u0437 \u0440\u043e\u0434\u043e\u0432\u044b\u0445 \u0441\u043b\u043e\u0432    best, best_score = \"\", 0.0    for cand in results:        if not isinstance(cand, dict):            # \u0438\u043d\u043e\u0433\u0434\u0430 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0441\u0442\u0440\u043e\u043a\u0430            continue        c = tokens(cand.get(\"name\", \"\"))        if not (q &amp; c):            continue        score = len(q &amp; c) \/ len(q | c)           # \u0448\u0442\u0440\u0430\u0444 \u0437\u0430 \u043b\u0438\u0448\u043d\u0438\u0435 \u0441\u043b\u043e\u0432\u0430 \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u0430        if score &gt; best_score:            best, best_score = cand.get(\"domain\", \"\"), score    if best_score &lt; 0.5 or best in MEGA_BRAND_DOMAINS:        return \"\"    return best<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 <code>isinstance<\/code> \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043f\u043e\u0441\u043b\u0435 \u043f\u0430\u0434\u0435\u043d\u0438\u044f \u043d\u0430 9 201-\u0439 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u0437 13 291: \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u0445 \u0430\u0432\u0442\u043e\u043a\u043e\u043c\u043f\u043b\u0438\u0442 \u043e\u0442\u0434\u0430\u0451\u0442 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0433\u043e\u043b\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430. \u0410 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043c\u0435\u0433\u0430\u0431\u0440\u0435\u043d\u0434\u043e\u0432 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u043f\u043e\u0441\u043b\u0435 <code>AMAZON INSURANCE<\/code>. \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0441\u043e\u0432\u043f\u0430\u043b\u043e \u0441 \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u043e\u043c \u043f\u043e\u0447\u0442\u0438 \u0434\u043e\u0441\u043b\u043e\u0432\u043d\u043e, \u0416\u0430\u043a\u043a\u0430\u0440 \u0442\u0430\u043a\u043e\u0435 \u043d\u0435 \u043e\u0442\u0441\u0435\u0438\u0432\u0430\u0435\u0442, \u043d\u043e <code>amazon.be<\/code> \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u0440\u0438\u0442\u0435\u0439\u043b\u0435\u0440\u0443, \u0430 \u043d\u0435 \u0441\u0442\u0440\u0430\u0445\u043e\u0432\u043e\u043c\u0443 \u0431\u0440\u043e\u043a\u0435\u0440\u0443.<\/p>\n<p>\u041d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0439 \u0434\u043e\u043c\u0435\u043d \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u043e\u043c. \u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u0442 \u0435\u0433\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0448\u0430\u0433: \u0430\u0434\u0440\u0435\u0441, \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0441\u0430\u0439\u0442\u0435.<\/p>\n<h3>\u0410\u0434\u0440\u0435\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b<\/h3>\n<p>\u0427\u0430\u0441\u0442\u044c \u0431\u0430\u0437\u044b \u0434\u043e\u0441\u0442\u0430\u043b\u0430\u0441\u044c \u043d\u0430\u043c \u0432 \u0432\u0438\u0434\u0435 \u0433\u043e\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 \u0438\u0437 1 909 \u0430\u0434\u0440\u0435\u0441\u043e\u0432. \u0412 \u043d\u0451\u043c \u0431\u044b\u043b\u043e \u0432\u0441\u0435\u0433\u043e 350 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0447\u0430\u0441\u0442\u0435\u0439, \u0430 <code>info@<\/code> \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u043b\u0441\u044f 761 \u0440\u0430\u0437, 39,9 %. \u042d\u0442\u043e \u043e\u0442\u043f\u0435\u0447\u0430\u0442\u043e\u043a \u0441\u043f\u0438\u0441\u043a\u0430, \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u0443: \u0431\u0435\u0440\u0443\u0442 \u0434\u043e\u043c\u0435\u043d \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0438 \u0434\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442 <code>info@<\/code>. \u0428\u0435\u0441\u0442\u044c \u0442\u0430\u043a\u0438\u0445 \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u043c\u044b \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u043b\u0438 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043d\u0430 \u043f\u0440\u043e\u0431\u0443. \u0412\u0441\u0435 \u0448\u0435\u0441\u0442\u044c \u0432\u0435\u0440\u043d\u0443\u043b\u0438\u0441\u044c \u0441 <code>550 User Unknown<\/code>.<\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0441\u043e\u0447\u0438\u043d\u044f\u0435\u043c, \u0430 \u0431\u0435\u0440\u0451\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e, \u0447\u0442\u043e \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b\u0430 \u0441\u0430\u043c\u0430: <code>mailto:<\/code>-\u0441\u0441\u044b\u043b\u043a\u0438 \u0438 \u0430\u0434\u0440\u0435\u0441\u0430 \u0432 \u0442\u0435\u043a\u0441\u0442\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432. \u041d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043d\u0430\u0448\u043b\u043e\u0441\u044c, \u0437\u043d\u0430\u0447\u0438\u0442, \u0430\u0434\u0440\u0435\u0441\u0430 \u043d\u0435\u0442. \u0414\u043e\u0433\u0430\u0434\u043a\u043e\u0439 \u043f\u0443\u0441\u0442\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u043d\u0435 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c.<\/p>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043e\u0442\u0440\u0435\u0437\u0432\u043b\u044f\u0435\u0442. \u0418\u0437 1 682 \u043e\u0431\u043e\u0439\u0434\u0451\u043d\u043d\u044b\u0445 \u0441\u0430\u0439\u0442\u043e\u0432 \u0430\u0434\u0440\u0435\u0441 \u043d\u0430\u0448\u0451\u043b\u0441\u044f \u043d\u0430 438, \u044d\u0442\u043e 26 %. \u0421\u0430\u043c\u044b\u0435 \u0447\u0430\u0441\u0442\u044b\u0435 \u0438\u0437 1 301 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u043e\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u0430 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u044b \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0435.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/2b\/84\/c3\/2b84c3c2aeda11ed85bdc66d8c10944b.png\" alt=\"\u041a\u0430\u043a\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u0435 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u044e\u0442 \u0441\u0430\u043c\u0438\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/2b\/84\/c3\/2b84c3c2aeda11ed85bdc66d8c10944b.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/2b\/84\/c3\/2b84c3c2aeda11ed85bdc66d8c10944b.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041a\u0430\u043a\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u0435 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u044e\u0442 \u0441\u0430\u043c\u0438<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u0440\u0435\u0441\u0441-\u0441\u043b\u0443\u0436\u0431\u0430, \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u0441 \u0438\u043d\u0432\u0435\u0441\u0442\u043e\u0440\u0430\u043c\u0438, \u043a\u0430\u0434\u0440\u044b, \u0436\u0430\u043b\u043e\u0431\u044b, \u043a\u043e\u043c\u043f\u043b\u0430\u0435\u043d\u0441. \u0410\u0434\u0440\u0435\u0441\u043e\u0432 \u0441\u043e \u0441\u043b\u043e\u0432\u0430\u043c\u0438 <code>risk<\/code>, <code>treasury<\/code>, <code>quant<\/code> \u0438\u043b\u0438 <code>portfolio<\/code> \u0441\u0440\u0435\u0434\u0438 \u043d\u0438\u0445 \u043d\u043e\u043b\u044c. \u041b\u044e\u0434\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u044b \u0445\u043e\u0442\u0435\u043b\u0438 \u0441\u043f\u0440\u043e\u0441\u0438\u0442\u044c, \u0441\u0432\u043e\u044e \u043f\u043e\u0447\u0442\u0443 \u043d\u0430 \u0441\u0430\u0439\u0442\u0430\u0445 \u043d\u0435 \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u044e\u0442. \u0410 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043e\u043f\u0440\u043e\u0441 \u043f\u0440\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0440\u0438\u0441\u043a-\u043c\u0435\u043d\u0435\u0434\u0436\u043c\u0435\u043d\u0442\u0430 \u043d\u0430 <code>careers@<\/code> \u0431\u0435\u0441\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u0444\u0438\u043b\u044c\u0442\u0440 \u043d\u0435\u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u044f\u0449\u0438\u043a\u043e\u0432:<\/p>\n<pre><code class=\"python\">UNSUITABLE_LOCAL = frozenset({    \"whistleblowing\", \"compliance\", \"complaints\", \"privacy\", \"dpo\", \"legal\",    \"fraud\", \"security\", \"careers\", \"jobs\", \"recruitment\", \"hr\",    \"noreply\", \"donotreply\", \"hse\", \"safety\", ...})def is_suitable(email: str) -&gt; bool:    local = email.split(\"@\")[0].lower()    squashed = local.replace(\".\", \"\").replace(\"_\", \"\").replace(\"-\", \"\")    ...<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0421\u043a\u043b\u0435\u0439\u043a\u0430 \u0431\u0435\u0437 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0435\u0439 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u043f\u043e\u0441\u043b\u0435 <code>do_not_reply@<\/code>: \u0440\u0430\u0437\u0431\u043e\u0440 \u043f\u043e \u043f\u0435\u0440\u0432\u043e\u043c\u0443 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0443 \u0434\u0430\u0432\u0430\u043b \u0441\u0442\u0435\u0431\u0435\u043b\u044c <code>do<\/code>, \u0438 \u0430\u0434\u0440\u0435\u0441 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b \u0444\u0438\u043b\u044c\u0442\u0440. \u0412 \u0441\u043f\u0438\u0441\u043e\u043a \u0437\u0430\u0433\u043b\u0443\u0448\u0435\u043a (<code>firstname<\/code>, <code>yourname<\/code>, <code>example<\/code>\u2026) \u043a\u043e\u0433\u0434\u0430-\u0442\u043e \u043f\u043e\u043f\u0430\u043b \u0438 <code>mail<\/code>. \u042d\u0442\u043e \u0431\u044b\u043b\u043e \u043e\u0448\u0438\u0431\u043a\u043e\u0439: \u0443 \u043c\u043d\u043e\u0433\u0438\u0445 \u0435\u0432\u0440\u043e\u043f\u0435\u0439\u0441\u043a\u0438\u0445 \u0431\u0430\u043d\u043a\u043e\u0432 <code>mail@<\/code> \u0438 \u0435\u0441\u0442\u044c \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u043e\u0431\u0449\u0438\u0439 \u044f\u0449\u0438\u043a.<\/p>\n<h3>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0434\u043e\u043c\u0435\u043d\u0430 \u0438 \u043b\u043e\u0432\u0443\u0448\u043a\u0430 fake-ip<\/h3>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0441\u043b\u0430\u0442\u044c, \u0441\u0442\u043e\u0438\u0442 \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0434\u043e\u043c\u0435\u043d \u0432\u043e\u043e\u0431\u0449\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043f\u043e\u0447\u0442\u0443. \u0421\u043c\u043e\u0442\u0440\u0438\u043c MX-\u0437\u0430\u043f\u0438\u0441\u044c, \u0430 \u0435\u0441\u043b\u0438 \u0435\u0451 \u043d\u0435\u0442, A-\u0437\u0430\u043f\u0438\u0441\u044c: \u043f\u043e RFC 5321 \u043f\u0440\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438 MX \u043f\u043e\u0447\u0442\u0430 \u0438\u0434\u0451\u0442 \u043d\u0430 \u0441\u0430\u043c \u0445\u043e\u0441\u0442 (implicit MX).<\/p>\n<pre><code class=\"python\">for record in (\"MX\", \"A\"):    out = run([\"dig\", \"+short\", \"+time=3\", \"+tries=2\", record, domain])    if out:        return record, out[0]return \"NONE\", \"\"<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0412 \u043a\u044d\u0448\u0435 \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 1 680 \u0434\u043e\u043c\u0435\u043d\u043e\u0432. \u0423 1 616 \u043d\u0430\u0448\u043b\u0430\u0441\u044c MX, \u0443 64 \u0442\u043e\u043b\u044c\u043a\u043e A-\u0437\u0430\u043f\u0438\u0441\u044c. \u0412\u0441\u0435 64 \u0430\u0434\u0440\u0435\u0441\u0430 \u0438\u0437 \u044d\u0442\u0438\u0445 A-\u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u043b\u0435\u0436\u0430\u0442 \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 <code>198.18.0.0\/15<\/code>. \u042d\u0442\u043e \u043d\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u043f\u043e\u0447\u0442\u043e\u0432\u044b\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432. \u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d \u043f\u043e\u0434 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f (RFC 2544), \u0438 \u0435\u0433\u043e \u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043f\u0440\u043e\u043a\u0441\u0438 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 fake-ip: \u043e\u043d\u0438 \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0442 \u0432\u044b\u0434\u0443\u043c\u0430\u043d\u043d\u044b\u043c \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u043d\u0430 \u043b\u044e\u0431\u043e\u0439 A-\u0437\u0430\u043f\u0440\u043e\u0441, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0442\u043e\u043c \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0438\u0442\u044c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435.<\/p>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u0440\u043e\u0441\u0442\u0430:<\/p>\n<pre><code>$ dig +short A nonexistent-zz9q7-test-domain-xyz.com198.18.26.171$ dig +short MX nonexistent-zz9q7-test-domain-xyz.com$<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041d\u0430 \u043c\u0430\u0448\u0438\u043d\u0435, \u0433\u0434\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430, \u0441\u0442\u043e\u044f\u043b \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u043a\u0441\u0438. \u041d\u0430 MX-\u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043e\u043d \u0447\u0435\u0441\u0442\u043d\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u043b \u043f\u0443\u0441\u0442\u043e\u0442\u043e\u0439, \u0430 \u043d\u0430 A-\u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043e\u0442\u0432\u0435\u0447\u0430\u043b \u0447\u0435\u043c \u0443\u0433\u043e\u0434\u043d\u043e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u00ab\u0434\u043e\u043c\u0435\u043d \u0431\u0435\u0437 MX, \u043d\u043e \u0441 A-\u0437\u0430\u043f\u0438\u0441\u044c\u044e\u00bb \u043d\u0430 \u044d\u0442\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 \u0437\u043d\u0430\u0447\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u043e: MX \u043d\u0435\u0442. \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u043b\u0430 \u043e\u0442\u0441\u0435\u0438\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0434\u043e\u043c\u0435\u043d\u044b, \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u043b\u0430 \u043b\u044e\u0431\u043e\u0439 \u0434\u043e\u043c\u0435\u043d \u0431\u0435\u0437 MX, \u0434\u0430\u0436\u0435 \u0432\u044b\u0434\u0443\u043c\u0430\u043d\u043d\u044b\u0439. \u0412\u044b\u0432\u043e\u0434 \u0431\u0430\u043d\u0430\u043b\u044c\u043d\u044b\u0439, \u043d\u043e \u043c\u044b \u0435\u0433\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u043b\u0438: \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c DNS, \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0441\u0432\u043e\u0439 \u0440\u0435\u0437\u043e\u043b\u0432\u0435\u0440 \u043d\u0430 \u0437\u0430\u0432\u0435\u0434\u043e\u043c\u043e \u043d\u0435\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c \u0438\u043c\u0435\u043d\u0438.<\/p>\n<p>\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043b\u0438 \u0441\u0430\u043c \u044f\u0449\u0438\u043a, DNS \u043d\u0435 \u0441\u043a\u0430\u0436\u0435\u0442. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0435\u0441\u0442\u044c SMTP-\u0434\u0438\u0430\u043b\u043e\u0433 \u0431\u0435\u0437 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u043f\u0438\u0441\u044c\u043c\u0430: <code>EHLO<\/code>, <code>MAIL FROM<\/code>, <code>RCPT TO:&lt;\u0430\u0434\u0440\u0435\u0441&gt;<\/code>, <code>QUIT<\/code>. \u0412\u0435\u0440\u0434\u0438\u043a\u0442\u043e\u043c \u0441\u043b\u0443\u0436\u0438\u0442 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 <code>RCPT TO<\/code>, \u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 <code>DATA<\/code> \u043d\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0438\u043a\u043e\u0433\u0434\u0430. \u041d\u0430\u0438\u0432\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u043b\u043e\u043c\u0430\u0435\u0442 catch-all: \u0442\u0430\u043a\u043e\u0439 \u0434\u043e\u043c\u0435\u043d \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 <code>250<\/code> \u043d\u0430 \u043b\u044e\u0431\u043e\u0439 \u0430\u0434\u0440\u0435\u0441. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0434\u043e\u043c\u0435\u043d\u0435 \u0441\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c \u0432\u0442\u043e\u0440\u043e\u0439, \u0437\u0430\u0432\u0435\u0434\u043e\u043c\u043e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441. \u0415\u0441\u043b\u0438 \u043e\u0442\u0432\u0435\u0442\u044b \u0441\u043e\u0432\u043f\u0430\u043b\u0438, \u0432\u0435\u0440\u0434\u0438\u043a\u0442 \u00ab\u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043d\u0435\u043b\u044c\u0437\u044f\u00bb, \u0430 \u043d\u0435 \u00ab\u0430\u0434\u0440\u0435\u0441 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442\u00bb:<\/p>\n<pre><code class=\"python\">real = rcpt(mx, address)fake = rcpt(mx, f\"{random_local(16)}@{domain}\")if real == fake == 250:    return CATCHALLreturn VALID if real == 250 else INVALID if real in (550, 551, 553) else UNKNOWN<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u044d\u0442\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0442\u0430\u043c, \u0433\u0434\u0435 \u043e\u0442\u043a\u0440\u044b\u0442 \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0439 25-\u0439 \u043f\u043e\u0440\u0442. \u0414\u043e\u043c\u0430\u0448\u043d\u0438\u0435 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u044b \u0438 \u043c\u043d\u043e\u0433\u0438\u0435 \u043e\u0431\u043b\u0430\u043a\u0430 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u044e\u0442 \u0435\u0433\u043e \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e.<\/p>\n<p>\u041f\u043e\u043f\u0443\u0442\u043d\u043e \u0438\u0437 MX-\u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0432\u0438\u0434\u043d\u043e, \u043a\u0442\u043e \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043f\u043e\u0447\u0442\u0443 \u043d\u0430 \u0442\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ac\/12\/06\/ac1206708341a9ae1f5d7001d16013fc.png\" alt=\"\u041a\u0442\u043e \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043f\u043e\u0447\u0442\u0443 \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044f\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/ac\/12\/06\/ac1206708341a9ae1f5d7001d16013fc.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/ac\/12\/06\/ac1206708341a9ae1f5d7001d16013fc.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041a\u0442\u043e \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043f\u043e\u0447\u0442\u0443 \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044f<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u043e\u0447\u0442\u0438 \u0434\u0432\u0435 \u0442\u0440\u0435\u0442\u0438 \u0434\u043e\u043c\u0435\u043d\u043e\u0432 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u044e\u0442 Microsoft 365 \u0438\u043b\u0438 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u044b: Proofpoint, Mimecast, Cisco. \u041f\u0438\u0441\u044c\u043c\u043e \u043e\u0442 \u0434\u043e\u043c\u0435\u043d\u0430 \u0431\u0435\u0437 \u0440\u0435\u043f\u0443\u0442\u0430\u0446\u0438\u0438 \u0438 \u0441 \u043d\u0435\u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e\u0439 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0435\u0439 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 \u043d\u0438\u0445 \u0441 \u0442\u0440\u0443\u0434\u043e\u043c. \u042d\u0442\u043e \u0438 \u043f\u0440\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0432\u043e\u043b\u043d\u0435.<\/p>\n<h3>\u041f\u0435\u0440\u0432\u0430\u044f \u0432\u043e\u043b\u043d\u0430: Gmail \u0438 DMARC<\/h3>\n<p>31 \u0430\u0432\u0433\u0443\u0441\u0442\u0430 \u043e\u043a\u043e\u043b\u043e 190 \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u0439 \u0443\u0448\u043b\u0438 \u0438\u0437 Gmail \u0447\u0435\u0440\u0435\u0437 \u00ab\u041e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u0430\u043a\u00bb: \u043f\u0438\u0441\u044c\u043c\u043e \u0443\u0445\u043e\u0434\u0438\u0442 \u0438\u0437 \u0432\u0430\u0448\u0435\u0433\u043e Gmail, \u043d\u043e \u0432 \u043f\u043e\u043b\u0435 From \u0441\u0442\u043e\u0438\u0442 \u0430\u0434\u0440\u0435\u0441 \u043d\u0430 \u0441\u0432\u043e\u0451\u043c \u0434\u043e\u043c\u0435\u043d\u0435. \u0414\u043b\u044f \u043b\u0438\u0447\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u043a\u0438 \u044d\u0442\u043e \u0443\u0434\u043e\u0431\u043d\u043e. \u0414\u043b\u044f \u043f\u0438\u0441\u0435\u043c \u0432 \u0431\u0430\u043d\u043a \u043d\u0435 \u0433\u043e\u0434\u0438\u0442\u0441\u044f.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/4f\/49\/0f\/4f490f1e16617fe2f8f4126865f7933a.png\" alt=\"\u041f\u043e\u0447\u0435\u043c\u0443 \u0448\u043b\u044e\u0437 \u0431\u0430\u043d\u043a\u0430 \u043d\u0435 \u043f\u0440\u0438\u043d\u044f\u043b \u043f\u0438\u0441\u044c\u043c\u043e \u0438\u0437 Gmail\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/4f\/49\/0f\/4f490f1e16617fe2f8f4126865f7933a.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/4f\/49\/0f\/4f490f1e16617fe2f8f4126865f7933a.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041f\u043e\u0447\u0435\u043c\u0443 \u0448\u043b\u044e\u0437 \u0431\u0430\u043d\u043a\u0430 \u043d\u0435 \u043f\u0440\u0438\u043d\u044f\u043b \u043f\u0438\u0441\u044c\u043c\u043e \u0438\u0437 Gmail<\/figcaption><\/div>\n<\/figure>\n<p>\u0427\u0442\u043e \u0431\u044b\u043b\u043e \u043d\u0435 \u0442\u0430\u043a:<\/p>\n<ul>\n<li>\n<p><strong>DKIM.<\/strong> Gmail \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0442\u0430\u043a\u043e\u0435 \u043f\u0438\u0441\u044c\u043c\u043e \u0441\u0432\u043e\u0438\u043c \u0434\u043e\u043c\u0435\u043d\u043e\u043c: <code>d=gmail.com<\/code>. \u0414\u043e\u043c\u0435\u043d \u0432 From \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0430\u0448.<\/p>\n<\/li>\n<li>\n<p><strong>Return-Path.<\/strong> \u041e\u0431\u0440\u0430\u0442\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0442\u043e\u0436\u0435 \u043d\u0430 <code>gmail.com<\/code>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 SPF \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0434\u043b\u044f gmail.com, \u0430 \u043d\u0435 \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u0434\u043e\u043c\u0435\u043d\u0430. \u0421\u0430\u043c SPF \u043d\u0430\u0448\u0435\u0433\u043e \u0434\u043e\u043c\u0435\u043d\u0430 \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u0440\u0432\u0438\u0441 \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u0439 \u043f\u0435\u0440\u0435\u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u0438, \u043f\u0440\u043e Gmail \u0442\u0430\u043c \u043d\u0435 \u0431\u044b\u043b\u043e \u043d\u0438 \u0441\u043b\u043e\u0432\u0430.<\/p>\n<\/li>\n<li>\n<p><strong>DMARC<\/strong> \u0442\u0440\u0435\u0431\u0443\u0435\u0442, \u0447\u0442\u043e\u0431\u044b \u0434\u043e\u043c\u0435\u043d \u0432 From \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u043b \u0441 \u0434\u043e\u043c\u0435\u043d\u043e\u043c \u0438\u0437 \u043f\u0440\u043e\u0448\u0435\u0434\u0448\u0435\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 DKIM \u0438\u043b\u0438 SPF. \u041d\u0435 \u0441\u043e\u0432\u043f\u0430\u043b \u043d\u0438 \u043e\u0434\u0438\u043d.<\/p>\n<\/li>\n<\/ul>\n<p>\u0428\u043b\u044e\u0437\u044b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0431\u0430\u043d\u043a\u043e\u0432 \u043e\u0442\u0432\u0435\u0447\u0430\u043b\u0438 <code>451 Temporary recipient validation error<\/code>, \u0442\u0440\u0438 \u0434\u043d\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u0438 \u0441\u0434\u0430\u0432\u0430\u043b\u0438\u0441\u044c. \u041f\u0440\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u043a\u043b\u0430\u0441\u0441 \u043e\u0442\u043a\u0430\u0437\u043e\u0432 \u0443\u0436\u0435 \u0431\u044b\u043b\u043e \u0432\u044b\u0448\u0435: <code>550<\/code> \u043d\u0430 \u0443\u0433\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u0430\u0434\u0440\u0435\u0441\u0430.<\/p>\n<p>\u041b\u0435\u0447\u0438\u0442\u0441\u044f \u044d\u0442\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u043e\u0439 \u0447\u0435\u0440\u0435\u0437 \u0441\u0435\u0440\u0432\u0438\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043f\u0438\u0441\u044c\u043c\u0430 \u043a\u043b\u044e\u0447\u043e\u043c \u0432\u0430\u0448\u0435\u0433\u043e \u0434\u043e\u043c\u0435\u043d\u0430 \u0438 \u0441\u0442\u0430\u0432\u0438\u0442 Return-Path \u043d\u0430 \u0432\u0430\u0448 \u043f\u043e\u0434\u0434\u043e\u043c\u0435\u043d. \u0423 \u043d\u0430\u0441 \u044d\u0442\u043e Resend, \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e\u0432\u0435\u0440\u0445 Amazon SES. \u041f\u0435\u0440\u0435\u0434 \u0440\u0430\u0441\u0441\u044b\u043b\u043a\u043e\u0439 \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0442\u0440\u0438 \u0437\u0430\u043f\u0438\u0441\u0438:<\/p>\n<pre><code>$ dig +short TXT send.example.com                # SPF \u043f\u043e\u0434\u0434\u043e\u043c\u0435\u043d\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0442\u043e\u0438\u0442 \u0432 Return-Path$ dig +short TXT resend._domainkey.example.com   # \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 DKIM$ dig +short TXT _dmarc.example.com              # \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0430 DMARC \u0438 \u0430\u0434\u0440\u0435\u0441 \u0434\u043b\u044f \u043e\u0442\u0447\u0451\u0442\u043e\u0432<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0418 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0441\u0435\u0431\u0435 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0435 \u043f\u0438\u0441\u044c\u043c\u043e: \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 <code>Authentication-Results<\/code> \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u0442\u043e\u044f\u0442\u044c <code>dkim=pass<\/code>, <code>spf=pass<\/code> \u0438 <code>dmarc=pass<\/code>. \u0415\u0449\u0451 \u0434\u0432\u0430 \u043f\u0443\u043d\u043a\u0442\u0430 \u0438\u0437 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438. \u0410\u0434\u0440\u0435\u0441 <code>no-reply@<\/code> \u0432 From \u0441\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435 \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 \u043c\u0430\u0441\u0441\u043e\u0432\u0443\u044e \u0440\u0430\u0441\u0441\u044b\u043b\u043a\u0443, \u043b\u0443\u0447\u0448\u0435 \u0436\u0438\u0432\u043e\u0439 \u0430\u0434\u0440\u0435\u0441 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430. \u0410 Gmail \u0438 Yahoo \u0441 2024 \u0433\u043e\u0434\u0430 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u043e\u0442 \u043c\u0430\u0441\u0441\u043e\u0432\u044b\u0445 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u0435\u0439 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 <code>List-Unsubscribe<\/code> \u0441 \u043e\u0442\u043f\u0438\u0441\u043a\u043e\u0439 \u0432 \u043e\u0434\u0438\u043d \u043a\u043b\u0438\u043a (RFC 8058).<\/p>\n<h3>\u0412\u0442\u043e\u0440\u0430\u044f \u0432\u043e\u043b\u043d\u0430: \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u0435, \u043a\u0432\u043e\u0442\u044b, \u0438\u0434\u0435\u043c\u043f\u043e\u0442\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u044c<\/h3>\n<p>\u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 ~1 900 \u043f\u0438\u0441\u0435\u043c \u0443\u0448\u043b\u0438 \u0447\u0435\u0440\u0435\u0437 \u0441\u0435\u0440\u0432\u0438\u0441 \u0440\u0430\u0441\u0441\u044b\u043b\u043a\u0438: \u043f\u0435\u0440\u0432\u044b\u0435 200 \u0441 \u0440\u0430\u0431\u043e\u0447\u0435\u0439 \u043c\u0430\u0448\u0438\u043d\u044b, \u0434\u0430\u043b\u044c\u0448\u0435 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043f\u043e \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u044e. \u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0435\u0442\u0430\u043b\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u0432\u0430\u0436\u043d\u0435\u0435, \u0447\u0435\u043c \u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c.<\/p>\n<p><strong>\u041f\u0440\u043e\u0433\u0440\u0435\u0432 \u0434\u043e\u043c\u0435\u043d\u0430.<\/strong> \u0423 \u043d\u043e\u0432\u043e\u0433\u043e \u0434\u043e\u043c\u0435\u043d\u0430 \u043d\u0435\u0442 \u0440\u0435\u043f\u0443\u0442\u0430\u0446\u0438\u0438, \u0438 \u0434\u0432\u0435 \u0442\u044b\u0441\u044f\u0447\u0438 \u043f\u0438\u0441\u0435\u043c \u0432 \u043f\u0435\u0440\u0432\u044b\u0439 \u0434\u0435\u043d\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u044f\u0442 \u0435\u0433\u043e \u0432 \u0441\u043f\u0430\u043c. \u0421\u0443\u0442\u043e\u0447\u043d\u044b\u0435 \u043f\u043e\u0440\u0446\u0438\u0438 \u0440\u0430\u0441\u0442\u0443\u0442 \u043f\u043e \u043b\u0435\u0441\u0442\u043d\u0438\u0446\u0435:<\/p>\n<pre><code class=\"python\">WARMUP_RAMP = (50, 100, 200, 350, 500, 700, 900)  # \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442\u0441\u044f<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p><strong>\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044f.<\/strong> \u041f\u0440\u043e\u0433\u0440\u0435\u0432 \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0434\u0435\u043d\u044c, \u0430 \u0447\u0430\u0441\u043e\u0432\u043e\u0439 \u043f\u043e\u044f\u0441 \u0441\u0442\u0440\u0430\u043d\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0447\u0430\u0441 \u0432\u043d\u0443\u0442\u0440\u0438 \u0434\u043d\u044f. \u041f\u0435\u0440\u0432\u044b\u0439 \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u0434\u0435\u043d\u044c \u043d\u0435\u0434\u0435\u043b\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u044b: \u0432 \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u0438\u0441\u044c\u043c\u043e \u0442\u043e\u043d\u0435\u0442 \u0432 \u043d\u0430\u043a\u043e\u043f\u0438\u0432\u0448\u0435\u043c\u0441\u044f \u0437\u0430 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435, \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0435\u0433\u043e \u0447\u0438\u0442\u0430\u044e\u0442 \u0432\u043f\u043e\u043b\u0433\u043b\u0430\u0437\u0430. \u041f\u0440\u0438 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0445 \u0432 \u0441\u0443\u0431\u0431\u043e\u0442\u0443 \u0438 \u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435 \u043f\u0438\u0441\u044c\u043c\u0430 \u0443\u0445\u043e\u0434\u044f\u0442 \u0441\u043e \u0432\u0442\u043e\u0440\u043d\u0438\u043a\u0430 \u043f\u043e \u0447\u0435\u0442\u0432\u0435\u0440\u0433, \u0430 \u0432 \u0441\u0442\u0440\u0430\u043d\u0430\u0445, \u0433\u0434\u0435 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u043f\u044f\u0442\u043d\u0438\u0446\u0430 \u0438 \u0441\u0443\u0431\u0431\u043e\u0442\u0430, \u0441 \u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a\u0430 \u043f\u043e \u0441\u0440\u0435\u0434\u0443. \u0412\u043d\u0443\u0442\u0440\u0438 \u043e\u043a\u043d\u0430 \u043f\u0438\u0441\u044c\u043c\u0430 \u0440\u0430\u0437\u0431\u0440\u043e\u0441\u0430\u043d\u044b \u043d\u0430 110 \u043c\u0438\u043d\u0443\u0442: \u0437\u0430\u043b\u043f \u0438\u0437 \u0441\u043e\u0442\u043d\u0438 \u043f\u0438\u0441\u0435\u043c \u0432 09:30:00 \u0444\u0438\u043b\u044c\u0442\u0440\u044b \u0443\u0437\u043d\u0430\u044e\u0442 \u0441\u0440\u0430\u0437\u0443. \u0421\u0434\u0432\u0438\u0433 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u0445\u0435\u0448\u0430 \u0430\u0434\u0440\u0435\u0441\u0430\u0442\u0430, \u0430 \u043d\u0435 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0440\u0430\u0441\u0447\u0451\u0442 \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0435\u0433\u043e \u043d\u0435 \u0434\u0432\u0438\u0433\u0430\u0435\u0442.<\/p>\n<p>\u0417\u0434\u0435\u0441\u044c \u043c\u044b \u043f\u043e\u0439\u043c\u0430\u043b\u0438 \u0441\u0430\u043c\u044b\u0439 \u043e\u0431\u0438\u0434\u043d\u044b\u0439 \u0431\u0430\u0433 \u043a\u0430\u043c\u043f\u0430\u043d\u0438\u0438. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u0435\u043d\u044c \u043a\u0430\u043c\u043f\u0430\u043d\u0438\u0438 \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u043b\u0441\u044f \u043a \u0434\u0430\u0442\u0435 \u043a\u0430\u043a \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u043d\u044b\u0439 (<code>start + timedelta(days=n)<\/code>), \u0430 \u043f\u043e\u0442\u043e\u043c \u0434\u0430\u0442\u0430 \u0434\u043e\u043a\u0440\u0443\u0447\u0438\u0432\u0430\u043b\u0430\u0441\u044c \u0432\u043f\u0435\u0440\u0451\u0434 \u0434\u043e \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u0434\u043d\u044f. \u041f\u0440\u0438 \u0442\u0440\u0451\u0445 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0434\u043d\u044f\u0445 \u0432 \u043d\u0435\u0434\u0435\u043b\u0435 \u0434\u043d\u0438 3, 4 \u0438 5 \u0434\u043e\u043a\u0440\u0443\u0447\u0438\u0432\u0430\u043b\u0438\u0441\u044c \u043d\u0430 \u043e\u0434\u043d\u0443 \u0438 \u0442\u0443 \u0436\u0435 \u0434\u0430\u0442\u0443, \u0438 1 449 \u043f\u0438\u0441\u0435\u043c \u0438\u0437 1 799 \u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u044b \u043d\u0430 \u043e\u0434\u043d\u0438 \u0441\u0443\u0442\u043a\u0438. \u041f\u0440\u043e\u0433\u0440\u0435\u0432 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043e\u0442\u0447\u0451\u0442\u0435. \u0421\u0447\u0438\u0442\u0430\u0442\u044c \u043d\u0430\u0434\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0434\u043d\u0438, \u0430 \u043d\u0435 \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u043d\u044b\u0435:<\/p>\n<pre><code class=\"python\">def nth_sending_day(start: date, index: int, good_days: frozenset[int]) -&gt; date:    day, seen = start, 0    for _ in range(400):        if day.weekday() in good_days:            if seen == index:                return day            seen += 1        day += timedelta(days=1)    raise RuntimeError(f\"\u043d\u0435 \u043d\u0430\u0448\u0451\u043b\u0441\u044f {index}-\u0439 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0434\u0435\u043d\u044c \u043e\u0442 {start}\")<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p><strong>\u041a\u0432\u043e\u0442\u0430 \u0441\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435, \u0430 \u043d\u0435 \u043f\u0440\u0438 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0435.<\/strong> \u041f\u0438\u0441\u044c\u043c\u0430 \u0443\u0445\u043e\u0434\u044f\u0442 \u0441 \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0439 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u043e\u0439 (<code>scheduled_at<\/code>), \u0438 \u043c\u044b \u0434\u0443\u043c\u0430\u043b\u0438, \u0447\u0442\u043e \u0441\u0443\u0442\u043e\u0447\u043d\u044b\u0439 \u043b\u0438\u043c\u0438\u0442 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u0434\u043d\u044e \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438. \u041d\u0435\u0442: 1 \u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044f \u0441\u0435\u0440\u0432\u0438\u0441 \u043f\u0440\u0438\u043d\u044f\u043b 200 \u043f\u0438\u0441\u0435\u043c, \u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0432\u0435\u0440\u043d\u0443\u043b\u0438 <code>429 daily_quota_exceeded<\/code>, \u0445\u043e\u0442\u044f \u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u043e\u043d\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u043b\u0438 \u0432 \u0434\u0440\u0443\u0433\u0438\u0435 \u0434\u043d\u0438. \u0422\u0435\u043f\u0435\u0440\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0447\u0438\u0442\u0430\u0435\u0442, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0436\u0435 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e \u0437\u0430 \u0441\u0435\u0433\u043e\u0434\u043d\u044f:<\/p>\n<pre><code class=\"python\">today_used = submitted_today()          # \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438, \u043d\u0435 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438room = max(0, max_per_run - today_used)pool = pool[:room]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p><strong>\u0418\u0434\u0435\u043c\u043f\u043e\u0442\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u044c.<\/strong> \u041f\u0430\u0447\u043a\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441 \u043a\u043b\u044e\u0447\u043e\u043c, \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u043c \u043e\u0442 \u0435\u0451 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e. \u0415\u0441\u043b\u0438 \u0441\u0435\u0442\u044c \u043e\u0431\u043e\u0440\u0432\u0430\u043b\u0430\u0441\u044c \u043f\u043e\u0441\u0440\u0435\u0434\u0438 \u043a\u0430\u043c\u043f\u0430\u043d\u0438\u0438 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u043b\u0438, \u0441\u0435\u0440\u0432\u0438\u0441 \u0432\u0435\u0440\u043d\u0451\u0442 \u043f\u0440\u0435\u0436\u043d\u0438\u0435 id, \u0430 \u043d\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442 \u043f\u0438\u0441\u044c\u043c\u0430 \u0432\u0442\u043e\u0440\u043e\u0439 \u0440\u0430\u0437:<\/p>\n<pre><code class=\"python\">def idempotency_key(payloads: list[dict]) -&gt; str:    blob = json.dumps([(p[\"to\"], p[\"scheduled_at\"], p[\"subject\"]) for p in payloads],                      sort_keys=True, ensure_ascii=False)    return hashlib.sha256(blob.encode()).hexdigest()<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p><strong>\u0414\u043e\u043b\u044f \u043e\u0442\u043a\u0430\u0437\u043e\u0432.<\/strong> \u0423 SES \u043f\u0440\u0438 \u0434\u043e\u043b\u0435 \u043e\u0442\u043a\u0430\u0437\u043e\u0432 \u0432\u044b\u0448\u0435 5 % \u0430\u043a\u043a\u0430\u0443\u043d\u0442 \u0443\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443, \u0432\u044b\u0448\u0435 10 % \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0443 \u043c\u043e\u0433\u0443\u0442 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u043e\u0442\u0447\u0451\u0442 \u043f\u043e \u043e\u0442\u043a\u0430\u0437\u0430\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0434\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u0432\u043e\u043b\u043d\u044b, \u0434\u043e \u043f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439. \u0421 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043e\u043d \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043e\u0431 \u044d\u0442\u043e\u043c \u043d\u0438\u0436\u0435.<\/p>\n<h3>\u0423\u0441\u043f\u0435\u0445, \u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043d\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u044b<\/h3>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/8c\/42\/97\/8c42973ed3f1dfdca74cf506a6007195.png\" alt=\"\u041f\u0438\u0441\u044c\u043c\u0430 \u0438 \u043e\u0442\u0432\u0435\u0442\u044b \u043f\u043e \u0434\u043d\u044f\u043c\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/8c\/42\/97\/8c42973ed3f1dfdca74cf506a6007195.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/8c\/42\/97\/8c42973ed3f1dfdca74cf506a6007195.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041f\u0438\u0441\u044c\u043c\u0430 \u0438 \u043e\u0442\u0432\u0435\u0442\u044b \u043f\u043e \u0434\u043d\u044f\u043c<\/figcaption><\/div>\n<\/figure>\n<p>2 \u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044f \u0435\u0436\u0435\u0434\u043d\u0435\u0432\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u043e\u043d \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0441\u044f \u0441 \u043a\u043e\u0434\u043e\u043c 0 \u0438 \u0438\u0442\u043e\u0433\u043e\u043c \u00ab\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e 0, \u0441\u0431\u043e\u0435\u0432 100\u00bb. \u041a\u043b\u044e\u0447 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u043f\u0443\u0441\u0442\u044b\u043c. \u0422\u0430\u0439\u043c\u0435\u0440 systemd \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u043b, \u0441\u0435\u0440\u0432\u0438\u0441 \u0432\u044b\u0448\u0435\u043b \u0431\u0435\u0437 \u043e\u0448\u0438\u0431\u043a\u0438, \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u043c\u043e\u043b\u0447\u0430\u043b.<\/p>\n<p>\u041a\u043e\u0434 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441 \u00ab\u0443\u043f\u0430\u043b \u043b\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u00bb, \u0430 \u043d\u0443\u0436\u0435\u043d \u0431\u044b\u043b \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439: \u00ab\u0443\u0448\u043b\u0438 \u043b\u0438 \u043f\u0438\u0441\u044c\u043c\u0430\u00bb. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u0442\u043e\u0440\u043e\u0436. \u0420\u0430\u0437 \u0432 \u0441\u0443\u0442\u043a\u0438 \u043e\u043d \u0441\u043c\u043e\u0442\u0440\u0438\u0442 \u043d\u0435 \u043d\u0430 \u043a\u043e\u0434 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430, \u0430 \u043d\u0430 \u0441\u043b\u0435\u0434 \u0440\u0430\u0431\u043e\u0442\u044b: \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u043e \u043f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u0432 \u0436\u0443\u0440\u043d\u0430\u043b\u0435 \u0437\u0430 \u0441\u0435\u0433\u043e\u0434\u043d\u044f. \u0418\u0442\u043e\u0433 \u0443\u0445\u043e\u0434\u0438\u0442 \u0441\u0432\u043e\u0434\u043a\u043e\u0439 \u0432 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u0447\u0430\u0442:<\/p>\n<pre><code class=\"python\">def main() -&gt; int:    sent = scheduled_today(log_rows())      # \u0437\u0430\u043f\u0438\u0441\u0438 event=scheduled \u0437\u0430 \u0441\u0435\u0433\u043e\u0434\u043d\u044f (UTC)    post_summary(sent, remaining())    return 0 if sent else 3                 # \u043d\u043e\u043b\u044c \u043f\u0438\u0441\u0435\u043c \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u043e\u0442\u043a\u0430\u0437\u043e\u043c, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0443\u043f\u0430\u043b<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0423 \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0435\u0441\u0442\u044c \u0437\u0430\u0431\u0430\u0432\u043d\u043e\u0435 \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435. \u041e\u0447\u0435\u0440\u0435\u0434\u044c \u043a\u043e\u043d\u0447\u0438\u043b\u0430\u0441\u044c 14 \u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044f, \u0438 \u0441 \u0442\u0435\u0445 \u043f\u043e\u0440 \u0441\u0442\u043e\u0440\u043e\u0436 \u043a\u0430\u0436\u0434\u043e\u0435 \u0443\u0442\u0440\u043e \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442, \u0447\u0442\u043e \u0440\u0430\u0441\u0441\u044b\u043b\u043a\u0430 \u0432\u0441\u0442\u0430\u043b\u0430. \u041f\u043e \u0431\u0443\u043a\u0432\u0435 \u043e\u043d \u043f\u0440\u0430\u0432.<\/p>\n<p>\u0423 \u044d\u0442\u043e\u0433\u043e \u0441\u0442\u043e\u0440\u043e\u0436\u0430 \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u044f \u0441\u043b\u0435\u043f\u0430\u044f \u0437\u043e\u043d\u0430, \u0438 \u043c\u044b \u0432 \u043d\u0435\u0451 \u0442\u043e\u0436\u0435 \u043f\u043e\u043f\u0430\u043b\u0438. \u041d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u043b\u0435\u0436\u0438\u0442 \u043a\u043b\u044e\u0447 \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u043f\u0440\u0430\u0432\u043e\u043c \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438, \u0441\u0442\u0430\u0442\u0443\u0441\u044b \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u0435\u043c\u0443 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b. \u041c\u044b \u0437\u043d\u0430\u0435\u043c, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0438\u0441\u0435\u043c \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0438, \u0438 \u043d\u0435 \u0437\u043d\u0430\u0435\u043c, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u0437 \u043d\u0438\u0445 \u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e, \u043e\u0442\u0431\u0438\u0442\u043e \u0438\u043b\u0438 \u0443\u0448\u043b\u043e \u0432 \u0441\u043f\u0430\u043c. \u041f\u0440\u043e \u0434\u0432\u0435 \u0442\u044b\u0441\u044f\u0447\u0438 \u043f\u0438\u0441\u0435\u043c \u0431\u0435\u0437 \u0441\u0442\u0430\u0442\u0443\u0441\u043e\u0432 \u043f\u043e\u0447\u0442\u0438 \u043d\u0435\u0447\u0435\u0433\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043e\u043d\u0438 \u0431\u044b\u043b\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u044b. \u0415\u0441\u043b\u0438 \u0431\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u043b\u0438 \u0437\u0430\u043d\u043e\u0432\u043e, \u043f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b\u0438 \u0431\u044b \u0432\u0435\u0431\u0445\u0443\u043a\u0438 \u043e \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0435 \u0438 \u043e\u0442\u043a\u0430\u0437\u0430\u0445.<\/p>\n<h3>\u041f\u0440\u0438\u0451\u043c \u043e\u0442\u0432\u0435\u0442\u043e\u0432: curl \u043d\u0435 \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442 \u0431\u0440\u0430\u0443\u0437\u0435\u0440<\/h3>\n<p>\u0424\u043e\u0440\u043c\u0430 \u043e\u043f\u0440\u043e\u0441\u0430 \u043b\u0435\u0436\u0438\u0442 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435\u0439 \u043d\u0430 \u0441\u0432\u043e\u0451\u043c \u043f\u043e\u0434\u0434\u043e\u043c\u0435\u043d\u0435, \u043e\u0442\u0432\u0435\u0442\u044b \u0443\u0445\u043e\u0434\u044f\u0442 POST-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c \u043d\u0430 API. \u041f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043e\u043c\u0435\u043d\u0430 \u043c\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b\u0438 \u043f\u0440\u0438\u0451\u043c curl-\u043e\u043c: <code>200<\/code>, \u0441\u0442\u0440\u043e\u043a\u0430 \u0432 \u0431\u0430\u0437\u0435, \u043a\u0438\u0440\u0438\u043b\u043b\u0438\u0446\u0430 \u0446\u0435\u043b\u0430. \u0418\u0437 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u0444\u043e\u0440\u043c\u0430 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u043b\u0430\u0441\u044c \u0432\u043e\u0432\u0441\u0435: \u0437\u0430\u043f\u0440\u043e\u0441 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043b\u0441\u044f CORS. \u0412 \u043f\u0440\u043e\u0434\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043e\u0431\u0440\u0430\u0437, \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u0434\u043e \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f, \u0438 \u043d\u043e\u0432\u043e\u0433\u043e \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0451\u043d\u043d\u044b\u0445 \u043d\u0435 \u0431\u044b\u043b\u043e. \u0412 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u043d\u0443\u0436\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0443\u0436\u0435 \u0431\u044b\u043b\u0430, \u043d\u043e \u043d\u0430 \u043f\u0440\u043e\u0434 \u0435\u0451 \u043d\u0435 \u0432\u044b\u043a\u0430\u0442\u0438\u043b\u0438.<\/p>\n<p>curl \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0443 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u043d\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0431\u044b\u043b\u0430 \u0432\u0435\u0440\u043d\u043e\u0439 \u0438 \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e. \u0411\u0440\u0430\u0443\u0437\u0435\u0440\u043d\u0443\u044e \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u043c, \u0441 \u0447\u0438\u0441\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0444\u0438\u043b\u044f: CORS, CSP, \u043a\u0443\u043a\u0438, preflight \u0438 \u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442\u044b curl \u043d\u0435 \u0432\u0438\u0434\u0438\u0442.<\/p>\n<p>\u0412\u0442\u043e\u0440\u0430\u044f \u0434\u0435\u0442\u0430\u043b\u044c \u043f\u0440\u0438\u0451\u043c\u0430 \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u0447\u0451\u0442\u0430. \u0410\u043d\u043a\u0435\u0442\u0430 \u043e\u0431\u0435\u0449\u0430\u0435\u0442 \u043d\u0435 \u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u0441\u0440\u0435\u0437, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u0435\u043d\u044c\u0448\u0435 \u043f\u044f\u0442\u0438 \u043e\u0442\u0432\u0435\u0442\u043e\u0432. \u0422\u0430\u043a\u0438\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0441\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u043e\u043a\u0443 \u0441 \u0441\u0443\u043c\u043c\u043e\u0439, \u0430 \u043d\u0435 \u0443\u0434\u0430\u043b\u044f\u044e\u0442\u0441\u044f \u043c\u043e\u043b\u0447\u0430: \u0438\u043d\u0430\u0447\u0435 \u0434\u043e\u043b\u0438 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043d\u0443\u0442 \u0441\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u043a \u0447\u0438\u0441\u043b\u0443 \u043e\u0442\u0432\u0435\u0442\u043e\u0432, \u0438 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u0440\u0435\u0448\u0438\u0442, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435\u0442.<\/p>\n<pre><code class=\"python\">def suppress(distribution: dict[str, int], minimum: int = 5) -&gt; dict[str, int]:    kept = {code: n for code, n in distribution.items() if n &gt;= minimum}    hidden = sum(n for n in distribution.values() if n &lt; minimum)    if hidden:        kept[\"__below_threshold__\"] = hidden    return kept<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041f\u0440\u0438 \u0434\u0435\u0441\u044f\u0442\u0438 \u043e\u0442\u0432\u0435\u0442\u0430\u0445 \u043f\u043e\u0434 \u043f\u043e\u0440\u043e\u0433 \u0443\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0451. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u043e\u043f\u0440\u043e\u0441\u0430 \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043d\u0435\u0442.<\/p>\n<h3>\u041f\u043e\u0447\u0435\u043c\u0443 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u043e\u0442\u0432\u0435\u0442\u0438\u043b<\/h3>\n<p>\u0422\u043e\u0447\u043d\u043e \u043c\u044b \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0437\u043d\u0430\u0435\u043c: \u0431\u0435\u0437 \u0441\u0442\u0430\u0442\u0443\u0441\u043e\u0432 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043e\u0442\u0434\u0435\u043b\u0438\u0442\u044c \u00ab\u043d\u0435 \u0434\u043e\u0448\u043b\u043e\u00bb \u043e\u0442 \u00ab\u0434\u043e\u0448\u043b\u043e \u0438 \u043d\u0435 \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043b\u043e\u00bb. \u0413\u0438\u043f\u043e\u0442\u0435\u0437\u044b \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u0443\u0431\u044b\u0432\u0430\u043d\u0438\u044f \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u0438:<\/p>\n<ol>\n<li>\n<p><strong>\u0410\u0434\u0440\u0435\u0441 \u043d\u0435 \u0442\u043e\u0433\u043e \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430.<\/strong> \u041e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0432\u0435\u0434\u0443\u0442 \u0432 \u043f\u0440\u0435\u0441\u0441-\u0441\u043b\u0443\u0436\u0431\u0443, \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u0441 \u0438\u043d\u0432\u0435\u0441\u0442\u043e\u0440\u0430\u043c\u0438, \u043a\u0430\u0434\u0440\u044b \u0438 \u043d\u0430 \u043e\u0431\u0449\u0438\u0439 \u044f\u0449\u0438\u043a. \u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043f\u0438\u0441\u044c\u043c\u043e \u0434\u043e\u0448\u043b\u043e, \u0435\u0433\u043e \u0447\u0438\u0442\u0430\u0435\u0442 \u043d\u0435 \u0440\u0438\u0441\u043a-\u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440, \u0438 \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u0430\u0442\u044c \u0435\u0433\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u0431\u0430\u043d\u043a\u0430 \u043d\u0435\u043a\u043e\u043c\u0443 \u0438 \u043d\u0435\u0437\u0430\u0447\u0435\u043c.<\/p>\n<\/li>\n<li>\n<p><strong>\u0428\u043b\u044e\u0437\u044b.<\/strong> \u0414\u0432\u0435 \u0442\u0440\u0435\u0442\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u0435\u0439 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442 \u043f\u043e\u0447\u0442\u0443 \u0447\u0435\u0440\u0435\u0437 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u044b, \u0430 \u0443 \u043d\u0430\u0441 \u043d\u043e\u0432\u044b\u0439 \u0434\u043e\u043c\u0435\u043d \u0431\u0435\u0437 \u0440\u0435\u043f\u0443\u0442\u0430\u0446\u0438\u0438. \u041f\u0435\u0440\u0432\u0430\u044f \u0432\u043e\u043b\u043d\u0430 \u043a \u0442\u043e\u043c\u0443 \u0436\u0435 \u043f\u0440\u043e\u0432\u0430\u043b\u0438\u043b\u0430 DMARC.<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u0438\u0441\u044c\u043c\u043e \u043e\u0442 \u043d\u0435\u0437\u043d\u0430\u043a\u043e\u043c\u043e\u0439 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u0435\u0437 \u0438\u043c\u0435\u043d\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044f.<\/strong> \u041f\u0440\u0438\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u0435 \u0432 \u043e\u043f\u0440\u043e\u0441 \u043e\u0442 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a\u0430\u043a \u0440\u0430\u0437 \u043a \u0442\u0435\u043c \u043f\u0438\u0441\u044c\u043c\u0430\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043b\u044e\u0434\u0438 \u0432 \u0440\u0435\u0433\u0443\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f\u0445 \u043f\u0440\u0438\u0443\u0447\u0435\u043d\u044b \u043d\u0435 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c.<\/p>\n<\/li>\n<li>\n<p><strong>\u0422\u0451\u043f\u043b\u044b\u0439 \u043a\u0440\u0443\u0433 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0445\u043e\u043b\u043e\u0434\u043d\u044b\u0439 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/strong> \u0428\u0435\u0441\u0442\u044c \u043e\u0442\u0432\u0435\u0442\u043e\u0432 \u0437\u0430 \u0434\u0432\u0430 \u0434\u043d\u044f \u0434\u0430\u043b\u0438 \u0431\u044b\u0432\u0448\u0438\u0435 \u043a\u043e\u043b\u043b\u0435\u0433\u0438. \u0425\u043e\u043b\u043e\u0434\u043d\u0430\u044f \u0440\u0430\u0441\u0441\u044b\u043b\u043a\u0430 \u0437\u0430 \u0434\u0432\u0435 \u043d\u0435\u0434\u0435\u043b\u0438 \u043d\u0435 \u0434\u0430\u043b\u0430 \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e.<\/p>\n<\/li>\n<\/ol>\n<h3>\u0427\u0442\u043e \u0431\u044b \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0438\u043d\u0430\u0447\u0435<\/h3>\n<ul>\n<li>\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c SPF, DKIM \u0438 DMARC \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0438\u0445 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u043c \u043f\u0438\u0441\u044c\u043c\u043e\u043c \u0434\u043e \u043f\u0435\u0440\u0432\u043e\u0439 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438, \u0430 \u043d\u0435 \u043f\u043e\u0441\u043b\u0435 \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u043e\u0442\u043a\u0430\u0437\u043e\u0432.<\/p>\n<\/li>\n<li>\n<p>\u041d\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u0438\u0447\u0435\u0433\u043e \u0441 \u043a\u043b\u044e\u0447\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0432\u0438\u0434\u0438\u0442 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0443. \u0412\u0435\u0431\u0445\u0443\u043a\u0438 \u043e \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0435 \u0438 \u043e\u0442\u043a\u0430\u0437\u0430\u0445 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0434\u043e \u0441\u0442\u0430\u0440\u0442\u0430.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0440\u0435\u0437\u043e\u043b\u0432\u0435\u0440 \u043d\u0430 \u043d\u0435\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c \u0438\u043c\u0435\u043d\u0438 \u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0434\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 DNS.<\/p>\n<\/li>\n<li>\n<p>\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0431\u043e\u0442\u044b, \u0430 \u043d\u0435 \u043a\u043e\u0434 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0421\u043c\u0438\u0440\u0438\u0442\u044c\u0441\u044f \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0432\u0435\u0434\u0443\u0442 \u043d\u0435 \u043a \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u0430\u043c, \u0438 \u0438\u0441\u043a\u0430\u0442\u044c \u043b\u044e\u0434\u0435\u0439 \u043f\u043e \u0438\u043c\u0435\u043d\u0438 \u0438 \u0440\u043e\u043b\u0438. \u0418\u043b\u0438 \u0447\u0435\u0441\u0442\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0445\u043e\u043b\u043e\u0434\u043d\u0443\u044e \u0440\u0430\u0441\u0441\u044b\u043b\u043a\u0443 \u0432 \u0440\u0435\u0433\u0443\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043b\u043e\u0442\u0435\u0440\u0435\u0435\u0439 \u0441 \u043e\u0447\u0435\u043d\u044c \u043f\u043b\u043e\u0445\u0438\u043c\u0438 \u0448\u0430\u043d\u0441\u0430\u043c\u0438.<\/p>\n<\/li>\n<\/ul>\n<p>\u0410 \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u043e\u043f\u044b\u0442, \u043a\u0430\u043a \u0434\u043e\u0441\u0442\u0443\u0447\u0430\u0442\u044c\u0441\u044f \u0434\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u043e\u0432 \u0432 \u0431\u0430\u043d\u043a\u0430\u0445 \u0438 \u0444\u043e\u043d\u0434\u0430\u0445, \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0438\u0442\u0435 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445. \u0423 \u043d\u0430\u0441 \u043e\u043d \u043f\u043e\u043a\u0430 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439.<\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1089124\/\">https:\/\/habr.com\/ru\/articles\/1089124\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>2 100 \u043f\u0438\u0441\u0435\u043c \u0438 \u043d\u043e\u043b\u044c \u043e\u0442\u0432\u0435\u0442\u043e\u0432: \u0440\u0430\u0437\u0431\u043e\u0440 \u0445\u043e\u043b\u043e\u0434\u043d\u043e\u0439 \u0440\u0430\u0441\u0441\u044b\u043b\u043a\u0438 \u0432 \u0431\u0430\u043d\u043a\u0438 \u0438 \u0444\u043e\u043d\u0434\u044b\u0412 \u043a\u043e\u043d\u0446\u0435 \u043b\u0435\u0442\u0430 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u043e\u0441\u044c \u0437\u0430\u0434\u0430\u0442\u044c \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u0430\u043c \u043f\u043e \u0440\u0438\u0441\u043a\u0430\u043c \u0432 \u0431\u0430\u043d\u043a\u0430\u0445 \u0438 \u0438\u043d\u0432\u0435\u0441\u0442\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0444\u043e\u043d\u0434\u0430\u0445. \u041e\u043f\u0440\u043e\u0441 \u0431\u044b\u043b \u043e\u0442\u0440\u0430\u0441\u043b\u0435\u0432\u043e\u0439: \u043a\u0430\u043a\u0438\u043c\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u043e\u043d\u0438 \u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0431\u043e\u0442\u044b \u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u043d\u0430 Excel, \u0433\u0434\u0435 \u0431\u0443\u043a\u0441\u0443\u044e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b. \u0413\u043e\u0442\u043e\u0432\u0443\u044e \u0431\u0430\u0437\u0443 \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u043d\u0435 \u043f\u043e\u043a\u0443\u043f\u0430\u0442\u044c \u0438 \u0441\u043e\u0431\u0440\u0430\u043b\u0438 \u0430\u0434\u0440\u0435\u0441\u0430\u0442\u043e\u0432 \u0441\u0430\u043c\u0438, \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0438\u0437 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u0440\u0435\u0435\u0441\u0442\u0440\u043e\u0432. \u0417\u0430 \u0434\u0432\u0435 \u043d\u0435\u0434\u0435\u043b\u0438 \u0443\u0448\u043b\u043e \u043e\u043a\u043e\u043b\u043e 2 100 \u043f\u0438\u0441\u0435\u043c. \u0418\u0437 \u0445\u043e\u043b\u043e\u0434\u043d\u043e\u0439 \u0440\u0430\u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0435 \u043e\u0442\u0432\u0435\u0442\u0438\u043b \u043d\u0438\u043a\u0442\u043e. \u0412\u0441\u0435 \u0434\u0435\u0441\u044f\u0442\u044c \u043e\u0442\u0432\u0435\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c, \u043f\u0440\u0438\u0448\u043b\u0438 \u0447\u0435\u0440\u0435\u0437 \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0445.\u041d\u0438\u0436\u0435 \u0440\u0430\u0437\u0431\u043e\u0440 \u043f\u043e \u0448\u0430\u0433\u0430\u043c: \u043e\u0442\u043a\u0443\u0434\u0430 \u0431\u0440\u0430\u043b\u0438 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438, \u043a\u0430\u043a \u0438\u0441\u043a\u0430\u043b\u0438 \u0441\u0430\u0439\u0442\u044b \u0438 \u0430\u0434\u0440\u0435\u0441\u0430, \u043d\u0430 \u0447\u0451\u043c \u0441\u043f\u043e\u0442\u043a\u043d\u0443\u043b\u0430\u0441\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 DNS, \u043f\u043e\u0447\u0435\u043c\u0443 \u043f\u043e\u0447\u0442\u043e\u0432\u044b\u0435 \u0448\u043b\u044e\u0437\u044b \u0431\u0430\u043d\u043a\u043e\u0432 \u043e\u0442\u0431\u0438\u043b\u0438 \u043f\u0435\u0440\u0432\u0443\u044e \u0432\u043e\u043b\u043d\u0443 \u0438 \u043a\u0430\u043a \u0440\u0430\u0441\u0441\u044b\u043b\u043a\u0430 \u043e\u0434\u043d\u0430\u0436\u0434\u044b \u00ab\u0443\u0441\u043f\u0435\u0448\u043d\u043e\u00bb \u043d\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0438\u0441\u044c\u043c\u0430. \u041a\u043e\u0434 \u043d\u0430 Python, \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b \u0432\u0437\u044f\u0442\u044b \u0438\u0437 \u043d\u0430\u0448\u0435\u0433\u043e \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u0438 \u043c\u0435\u0441\u0442\u0430\u043c\u0438 \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u044b.\u041e\u043a\u043e\u043b\u043e 2 100 \u043f\u0438\u0441\u0435\u043c \u0438 10 \u043e\u0442\u0432\u0435\u0442\u043e\u0432\u041e\u0442\u043a\u0443\u0434\u0430 \u0431\u0440\u0430\u0442\u044c \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438: GLEIF\u041d\u0443\u0436\u0435\u043d \u0431\u044b\u043b \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u0445 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0439 \u043f\u043e \u043c\u043d\u043e\u0433\u0438\u043c \u0441\u0442\u0440\u0430\u043d\u0430\u043c, \u0441 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u043c (\u0431\u0430\u043d\u043a, \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0430\u044f \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f, \u0444\u043e\u043d\u0434) \u0438 \u0430\u0434\u0440\u0435\u0441\u043e\u043c. \u0421\u0430\u043c\u044b\u0439 \u043f\u043e\u043b\u043d\u044b\u0439 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0442\u0430\u043a\u043e\u0433\u043e \u0440\u043e\u0434\u0430 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f GLEIF. \u042d\u0442\u043e \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0435\u0441\u0442\u0440 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 \u044e\u0440\u043b\u0438\u0446 (LEI). LEI \u043d\u0443\u0436\u0435\u043d \u043b\u044e\u0431\u043e\u0439 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0441\u0434\u0435\u043b\u043a\u0438 \u043d\u0430 \u0440\u0435\u0433\u0443\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u0445 \u0440\u044b\u043d\u043a\u0430\u0445, \u0442\u0430\u043a \u0447\u0442\u043e \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u0439 \u0441\u0435\u043a\u0442\u043e\u0440 \u0442\u0430\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043f\u043e\u0447\u0442\u0438 \u0446\u0435\u043b\u0438\u043a\u043e\u043c. \u0423 GLEIF \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 JSON API \u0431\u0435\u0437 \u043a\u043b\u044e\u0447\u0430.\u0417\u0430\u043f\u0440\u043e\u0441 \u043f\u043e \u0441\u0442\u0440\u0430\u043d\u0435 \u0438 \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u043c\u0443 \u0441\u043b\u043e\u0432\u0443:GLEIF_API = &#171;https:\/\/api.gleif.org\/api\/v1\/lei-records&#187;def gleif_page(country: str, keyword: str | None, page: int) -&gt; list[dict]:    params = {        &#171;filter[entity.legalAddress.country]&#187;: country,        &#171;page[size]&#187;: 200,        &#171;page[number]&#187;: page,    }    if keyword:        params[&#171;filter[fulltext]&#187;] = keyword       # &#171;bank&#187;, &#171;asset management&#187;, &#8230;    else:        params[&#171;filter[entity.category]&#187;] = &#171;FUND&#187;    return get_json(GLEIF_API, params).get(&#171;data&#187;, [])\u0427\u0442\u043e \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0443\u0447\u0435\u0441\u0442\u044c:\u041f\u043e\u043b\u043d\u043e\u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u043f\u043e\u0438\u0441\u043a \u0438\u0449\u0435\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044e. \u0417\u0430\u043f\u0440\u043e\u0441 bank \u043f\u043e \u041e\u0410\u042d \u0432\u0435\u0440\u043d\u0443\u043b \u043a\u043e\u043d\u0441\u0430\u043b\u0442\u0438\u043d\u0433\u043e\u0432\u0443\u044e \u043a\u043e\u043d\u0442\u043e\u0440\u0443 \u0438 \u0442\u043e\u0440\u0433\u043e\u0432\u0443\u044e \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044e: \u0441\u043b\u043e\u0432\u043e \u043d\u0430\u0448\u043b\u043e\u0441\u044c \u0432 \u0430\u0434\u0440\u0435\u0441\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u0430\u0436\u0434\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0432\u0442\u043e\u0440\u043e\u0439 \u0440\u0430\u0437, \u0443\u0436\u0435 \u043f\u043e \u0441\u0430\u043c\u043e\u043c\u0443 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044e, \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u043c\u0430\u0440\u043a\u0435\u0440\u043e\u0432 \u0432\u0440\u043e\u0434\u0435 bank, capital, asset, insur, banque, banca.\u0421\u0442\u0430\u0442\u0443\u0441. \u0411\u0435\u0440\u0451\u043c \u0442\u043e\u043b\u044c\u043a\u043e entity.status == ACTIVE \u0438 \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0432 \u0441\u0442\u0430\u0442\u0443\u0441\u0435 LAPSED: LEI \u043d\u0435 \u043f\u0440\u043e\u0434\u043b\u0451\u043d, \u0437\u0430 \u0437\u0430\u043f\u0438\u0441\u044c\u044e \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0441\u043b\u0435\u0434\u0438\u0442.\u041f\u043e\u0434\u0444\u043e\u043d\u0434\u044b. \u0423 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u0434\u0444\u043e\u043d\u0434\u0430 \u043f\u0430\u0435\u0432\u043e\u0439 \u043b\u0438\u043d\u0435\u0439\u043a\u0438 \u0441\u0432\u043e\u0439 LEI, \u043d\u043e \u043d\u0438 \u0441\u0430\u0439\u0442\u0430, \u043d\u0438 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043e\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0443 \u043d\u0435\u0433\u043e \u043d\u0435\u0442. \u0422\u043e\u043b\u044c\u043a\u043e \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f FUND \u0434\u0430\u043b\u0430 21 056 \u0437\u0430\u043f\u0438\u0441\u0435\u0439. \u041e\u0442\u0441\u0435\u043a\u0430\u0435\u043c \u0438\u0445 \u043f\u043e \u043c\u0430\u0440\u043a\u0435\u0440\u0430\u043c sub-fund, compartment, teilfonds \u0438 \u0442. \u043f.\u041c\u0430\u0442\u0435\u0440\u0438\u043d\u0441\u043a\u0430\u044f \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f \u0431\u0435\u0437 \u043b\u0438\u0448\u043d\u0435\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430. GLEIF \u043a\u043b\u0430\u0434\u0451\u0442 LEI \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u043f\u0440\u044f\u043c\u043e \u0432 URL \u0441\u0432\u044f\u0437\u0438 &#8230;\/lei-records\/{LEI}\/ultimate-parent-relationship. \u0415\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043d\u0443\u0442\u044c \u0438\u0437 \u043e\u0442\u0432\u0435\u0442\u0430, \u0430 \u043d\u0435 \u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u043a\u0430\u0436\u0434\u0443\u044e \u0438\u0437 \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0432 \u0442\u044b\u0441\u044f\u0447 \u0437\u0430\u043f\u0438\u0441\u0435\u0439. \u041d\u0443\u0436\u043d\u043e \u044d\u0442\u043e \u0434\u043b\u044f \u0434\u0435\u0434\u0443\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0433\u0440\u0443\u043f\u043f: \u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u043f\u044f\u0442\u044c \u0434\u043e\u0447\u0435\u043a \u043e\u0434\u043d\u043e\u0433\u043e \u0431\u0430\u043d\u043a\u0430 \u0431\u0435\u0441\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u043e.\u042e\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u0434\u0440\u0435\u0441 \u043d\u0435 \u0440\u0430\u0432\u0435\u043d \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c\u0443. \u0424\u0438\u043b\u044c\u0442\u0440 \u043f\u043e \u0441\u0442\u0440\u0430\u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e legalAddress. \u0423 \u043a\u0440\u0443\u043f\u043d\u043e\u0433\u043e \u0431\u0430\u043d\u043a\u0430 \u0438\u0437 \u041e\u0410\u042d \u043d\u0430\u0448\u043b\u0430\u0441\u044c \u0437\u0430\u043f\u0438\u0441\u044c \u0441 \u044e\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u0432\u043e \u0424\u0440\u0430\u043d\u0446\u0438\u0438 \u0438 \u0448\u0442\u0430\u0431-\u043a\u0432\u0430\u0440\u0442\u0438\u0440\u043e\u0439 \u0432 \u0410\u0431\u0443-\u0414\u0430\u0431\u0438. \u0415\u0441\u043b\u0438 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0443 \u043f\u043e \u044e\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043a\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443, \u043f\u0438\u0441\u044c\u043c\u043e \u043f\u0440\u0438\u0434\u0451\u0442 \u0432 \u043f\u0430\u0440\u0438\u0436\u0441\u043a\u043e\u0435 \u0443\u0442\u0440\u043e \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0436\u0438\u0432\u0451\u0442 \u043f\u043e \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u0447\u0430\u0441\u043e\u0432\u043e\u043c\u0443 \u043f\u043e\u044f\u0441\u0443. \u0421\u0442\u0440\u0430\u043d\u0443 \u0431\u0435\u0440\u0451\u043c \u0438\u0437 headquartersAddress, \u0430 \u044e\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u0434\u0440\u0435\u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u0430\u043a \u0437\u0430\u043f\u0430\u0441\u043d\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442.hq = (ent.get(&#171;headquartersAddress&#187;) or {}).get(&#171;country&#187;) or &#171;&#187;legal = (ent.get(&#171;legalAddress&#187;) or {}).get(&#171;country&#187;) or &#171;&#187;real_country = hq or legal or queried_country\u041f\u043e 95 \u0441\u0442\u0440\u0430\u043d\u0430\u043c \u0432\u044b\u0448\u043b\u043e \u043e\u043a\u043e\u043b\u043e 27 \u0442\u044b\u0441\u044f\u0447 \u0436\u0438\u0432\u044b\u0445 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0439. \u041f\u043e\u0441\u043b\u0435 \u0434\u0435\u0434\u0443\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u043e \u0433\u0440\u0443\u043f\u043f\u0430\u043c \u0438 \u043f\u043e\u0442\u043e\u043b\u043a\u0430 \u0432 250 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0439 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0443 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c 13 511. \u0412 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a GLEIF \u043f\u043e \u0421\u0428\u0410 \u0431\u0440\u0430\u043b\u0438 EDGAR (\u0440\u0435\u0435\u0441\u0442\u0440 SEC) \u043f\u043e \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u043c \u043a\u043e\u0434\u0430\u043c SIC. SEC \u0442\u0440\u0435\u0431\u0443\u0435\u0442 User-Agent \u0441 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u043c \u0438 \u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u0440\u0435\u0434\u0435\u043b 10 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443. \u0417\u0430 \u043d\u0430\u0440\u0443\u0448\u0435\u043d\u0438\u0435 \u0431\u0430\u043d\u044f\u0442 \u043f\u043e IP, \u0438 \u0442\u043e\u0433\u0434\u0430 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u043f\u0440\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0446\u0435\u043b\u0438\u043a\u043e\u043c.\u0420\u0435\u0435\u0441\u0442\u0440 \u043d\u0435 \u0437\u043d\u0430\u0435\u0442 \u0441\u0430\u0439\u0442\u0430\u0423 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 GLEIF \u0435\u0441\u0442\u044c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435, \u0430\u0434\u0440\u0435\u0441 \u0438 \u0441\u0435\u0433\u043c\u0435\u043d\u0442, \u043d\u043e \u043d\u0435\u0442 \u043d\u0438 \u0441\u0430\u0439\u0442\u0430, \u043d\u0438 \u043f\u043e\u0447\u0442\u044b. \u0411\u0435\u0437 \u0441\u0430\u0439\u0442\u0430 \u043d\u0435 \u043d\u0430\u0439\u0442\u0438 \u0430\u0434\u0440\u0435\u0441, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u043b\u044c\u0448\u0435 \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u044e\u0440\u043b\u0438\u0446\u043e \u0441 \u0434\u043e\u043c\u0435\u043d\u043e\u043c.Wikidata \u0431\u044b\u043b\u0430 \u043f\u0435\u0440\u0432\u043e\u0439 \u043f\u043e\u043f\u044b\u0442\u043a\u043e\u0439: SPARQL-\u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u0430\u0447\u043a\u0430\u043c\u0438 \u0447\u0435\u0440\u0435\u0437 VALUES \u0441 \u0442\u043e\u0447\u043d\u044b\u043c \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435\u043c rdfs:label. \u041d\u0430 \u044e\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f\u0445 \u044d\u0442\u043e \u043f\u043e\u0447\u0442\u0438 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442: \u0432 \u0440\u0435\u0435\u0441\u0442\u0440\u0435 FIRST ABU DHABI BANK P.J.S.C., \u0432 Wikidata First Abu Dhabi Bank. \u0412\u0442\u043e\u0440\u043e\u0439 \u043f\u0440\u043e\u0445\u043e\u0434 \u043e\u0442\u0440\u0435\u0437\u0430\u043b \u044e\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0444\u043e\u0440\u043c\u0443 \u0441 \u043a\u043e\u043d\u0446\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 (Ltd, Inc, PJSC), \u043d\u043e \u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u043b Group \u0438 Holding, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u0438 \u0431\u044b\u0432\u0430\u044e\u0442 \u0447\u0430\u0441\u0442\u044c\u044e \u0431\u0440\u0435\u043d\u0434\u0430. \u0414\u0432\u0430 \u043f\u0440\u043e\u0445\u043e\u0434\u0430 \u0432\u043c\u0435\u0441\u0442\u0435 \u0434\u0430\u043b\u0438 220 \u0434\u043e\u043c\u0435\u043d\u043e\u0432 \u0438\u0437 13 511, \u043c\u0435\u043d\u044c\u0448\u0435 2 %.\u0410\u0432\u0442\u043e\u043a\u043e\u043c\u043f\u043b\u0438\u0442 Clearbit \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u043d\u0430 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u043f\u043e\u043b\u0435\u0437\u043d\u0435\u0435. \u041f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442 autocomplete.clearbit.com\/v1\/companies\/suggest, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0442\u043e\u0438\u0442 \u0443 \u043d\u0438\u0445 \u043d\u0430 \u0444\u043e\u0440\u043c\u0430\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438, \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0440\u043e\u0433\u043e\u043d\u0430 \u043e\u0442\u0432\u0435\u0447\u0430\u043b \u0431\u0435\u0437 \u043a\u043b\u044e\u0447\u0430. \u041e\u043d \u043d\u0430\u0448\u0451\u043b \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0434\u043b\u044f 30 % \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0439. \u041d\u043e \u043f\u0435\u0440\u0432\u043e\u043c\u0443 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0443 \u0432\u044b\u0434\u0430\u0447\u0438 \u0432\u0435\u0440\u0438\u0442\u044c \u043d\u0435\u043b\u044c\u0437\u044f: \u0440\u0430\u043d\u0436\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u043f\u043e\u0434 \u0430\u0432\u0442\u043e\u043a\u043e\u043c\u043f\u043b\u0438\u0442, \u0430 \u043d\u0435 \u043f\u043e\u0434 \u0442\u043e\u0447\u043d\u043e\u0435 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u044e\u0440\u043b\u0438\u0446. \u0414\u043b\u044f Angel Capital \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0434\u043e\u043c\u0435\u043d \u0441\u0442\u043e\u044f\u043b \u0447\u0435\u0442\u0432\u0451\u0440\u0442\u044b\u043c, \u0430 \u043f\u0435\u0440\u0432\u044b\u043c \u0448\u043b\u0430 Angel Capital Association, \u0434\u0440\u0443\u0433\u0430\u044f \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f.\u041b\u0443\u0447\u0448\u0435\u0433\u043e \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u0430 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u043f\u043e \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0443 \u0416\u0430\u043a\u043a\u0430\u0440\u0430 \u043d\u0430 \u0437\u043d\u0430\u0447\u0438\u043c\u044b\u0445 \u0441\u043b\u043e\u0432\u0430\u0445. \u0420\u043e\u0434\u043e\u0432\u044b\u0435 \u0441\u043b\u043e\u0432\u0430 (capital, bank, fund, group, holding, ltd\u2026) \u0438\u0437 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0432\u044b\u043a\u0438\u043d\u0443\u0442\u044b, \u0438\u043d\u0430\u0447\u0435 424 Capital \u0441\u043e\u0432\u043f\u0430\u0434\u0451\u0442 \u0441 Capital One \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u0441\u043b\u043e\u0432\u0443 capital:def best_match(query_name: str, results: list[dict]) -&gt; str:    q = tokens(query_name)                        # \u0431\u0435\u0437 \u0440\u043e\u0434\u043e\u0432\u044b\u0445 \u0441\u043b\u043e\u0432    best, best_score = &#171;&#187;, 0.0    for cand in results:        if not isinstance(cand, dict):            # \u0438\u043d\u043e\u0433\u0434\u0430 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0441\u0442\u0440\u043e\u043a\u0430            continue        c = tokens(cand.get(&#171;name&#187;, &#171;&#187;))        if not (q &amp; c):            continue        score = len(q &amp; c) \/ len(q | c)           # \u0448\u0442\u0440\u0430\u0444 \u0437\u0430 \u043b\u0438\u0448\u043d\u0438\u0435 \u0441\u043b\u043e\u0432\u0430 \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u0430        if score &gt; best_score:            best, best_score = cand.get(&#171;domain&#187;, &#171;&#187;), score    if best_score &lt; 0.5 or best in MEGA_BRAND_DOMAINS:        return &#171;&#187;    return best\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 isinstance \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043f\u043e\u0441\u043b\u0435 \u043f\u0430\u0434\u0435\u043d\u0438\u044f \u043d\u0430 9 201-\u0439 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u0437 13 291: \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u0445 \u0430\u0432\u0442\u043e\u043a\u043e\u043c\u043f\u043b\u0438\u0442 \u043e\u0442\u0434\u0430\u0451\u0442 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0433\u043e\u043b\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430. \u0410 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043c\u0435\u0433\u0430\u0431\u0440\u0435\u043d\u0434\u043e\u0432 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u043f\u043e\u0441\u043b\u0435 AMAZON INSURANCE. \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0441\u043e\u0432\u043f\u0430\u043b\u043e \u0441 \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u043e\u043c \u043f\u043e\u0447\u0442\u0438 \u0434\u043e\u0441\u043b\u043e\u0432\u043d\u043e, \u0416\u0430\u043a\u043a\u0430\u0440 \u0442\u0430\u043a\u043e\u0435 \u043d\u0435 \u043e\u0442\u0441\u0435\u0438\u0432\u0430\u0435\u0442, \u043d\u043e amazon.be \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u0440\u0438\u0442\u0435\u0439\u043b\u0435\u0440\u0443, \u0430 \u043d\u0435 \u0441\u0442\u0440\u0430\u0445\u043e\u0432\u043e\u043c\u0443 \u0431\u0440\u043e\u043a\u0435\u0440\u0443.\u041d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0439 \u0434\u043e\u043c\u0435\u043d \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u043e\u043c. \u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u0442 \u0435\u0433\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0448\u0430\u0433: \u0430\u0434\u0440\u0435\u0441, \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0441\u0430\u0439\u0442\u0435.\u0410\u0434\u0440\u0435\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b\u0427\u0430\u0441\u0442\u044c \u0431\u0430\u0437\u044b \u0434\u043e\u0441\u0442\u0430\u043b\u0430\u0441\u044c \u043d\u0430\u043c \u0432 \u0432\u0438\u0434\u0435 \u0433\u043e\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 \u0438\u0437 1 909 \u0430\u0434\u0440\u0435\u0441\u043e\u0432. \u0412 \u043d\u0451\u043c \u0431\u044b\u043b\u043e \u0432\u0441\u0435\u0433\u043e 350 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0447\u0430\u0441\u0442\u0435\u0439, \u0430 info@ \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u043b\u0441\u044f 761 \u0440\u0430\u0437, 39,9 %. \u042d\u0442\u043e \u043e\u0442\u043f\u0435\u0447\u0430\u0442\u043e\u043a \u0441\u043f\u0438\u0441\u043a\u0430, \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u0443: \u0431\u0435\u0440\u0443\u0442 \u0434\u043e\u043c\u0435\u043d \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0438 \u0434\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442 info@. \u0428\u0435\u0441\u0442\u044c \u0442\u0430\u043a\u0438\u0445 \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u043c\u044b \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u043b\u0438 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043d\u0430 \u043f\u0440\u043e\u0431\u0443. \u0412\u0441\u0435 \u0448\u0435\u0441\u0442\u044c \u0432\u0435\u0440\u043d\u0443\u043b\u0438\u0441\u044c \u0441 550 User Unknown.\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0441\u043e\u0447\u0438\u043d\u044f\u0435\u043c, \u0430 \u0431\u0435\u0440\u0451\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e, \u0447\u0442\u043e \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b\u0430 \u0441\u0430\u043c\u0430: mailto:-\u0441\u0441\u044b\u043b\u043a\u0438 \u0438 \u0430\u0434\u0440\u0435\u0441\u0430 \u0432 \u0442\u0435\u043a\u0441\u0442\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432. \u041d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043d\u0430\u0448\u043b\u043e\u0441\u044c, \u0437\u043d\u0430\u0447\u0438\u0442, \u0430\u0434\u0440\u0435\u0441\u0430 \u043d\u0435\u0442. \u0414\u043e\u0433\u0430\u0434\u043a\u043e\u0439 \u043f\u0443\u0441\u0442\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u043d\u0435 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c.\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043e\u0442\u0440\u0435\u0437\u0432\u043b\u044f\u0435\u0442. \u0418\u0437 1 682 \u043e\u0431\u043e\u0439\u0434\u0451\u043d\u043d\u044b\u0445 \u0441\u0430\u0439\u0442\u043e\u0432 \u0430\u0434\u0440\u0435\u0441 \u043d\u0430\u0448\u0451\u043b\u0441\u044f \u043d\u0430 438, \u044d\u0442\u043e 26 %. \u0421\u0430\u043c\u044b\u0435 \u0447\u0430\u0441\u0442\u044b\u0435 \u0438\u0437 1 301 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u043e\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u0430 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u044b \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0435.\u041a\u0430\u043a\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u0435 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u044e\u0442 \u0441\u0430\u043c\u0438\u041f\u0440\u0435\u0441\u0441-\u0441\u043b\u0443\u0436\u0431\u0430, \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u0441 \u0438\u043d\u0432\u0435\u0441\u0442\u043e\u0440\u0430\u043c\u0438, \u043a\u0430\u0434\u0440\u044b, \u0436\u0430\u043b\u043e\u0431\u044b, \u043a\u043e\u043c\u043f\u043b\u0430\u0435\u043d\u0441. \u0410\u0434\u0440\u0435\u0441\u043e\u0432 \u0441\u043e \u0441\u043b\u043e\u0432\u0430\u043c\u0438 risk, treasury, quant \u0438\u043b\u0438 portfolio \u0441\u0440\u0435\u0434\u0438 \u043d\u0438\u0445 \u043d\u043e\u043b\u044c. \u041b\u044e\u0434\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u044b \u0445\u043e\u0442\u0435\u043b\u0438 \u0441\u043f\u0440\u043e\u0441\u0438\u0442\u044c, \u0441\u0432\u043e\u044e \u043f\u043e\u0447\u0442\u0443 \u043d\u0430 \u0441\u0430\u0439\u0442\u0430\u0445 \u043d\u0435 \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u044e\u0442. \u0410 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043e\u043f\u0440\u043e\u0441 \u043f\u0440\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0440\u0438\u0441\u043a-\u043c\u0435\u043d\u0435\u0434\u0436\u043c\u0435\u043d\u0442\u0430 \u043d\u0430 careers@ \u0431\u0435\u0441\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u0444\u0438\u043b\u044c\u0442\u0440 \u043d\u0435\u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u044f\u0449\u0438\u043a\u043e\u0432:UNSUITABLE_LOCAL = frozenset({    &#171;whistleblowing&#187;, &#171;compliance&#187;, &#171;complaints&#187;, &#171;privacy&#187;, &#171;dpo&#187;, &#171;legal&#187;,    &#171;fraud&#187;, &#171;security&#187;, &#171;careers&#187;, &#171;jobs&#187;, &#171;recruitment&#187;, &#171;hr&#187;,    &#171;noreply&#187;, &#171;donotreply&#187;, &#171;hse&#187;, &#171;safety&#187;, &#8230;})def is_suitable(email: str) -&gt; bool:    local = email.split(&#171;@&#187;)[0].lower()    squashed = local.replace(&#171;.&#187;, &#171;&#187;).replace(&#171;_&#187;, &#171;&#187;).replace(&#171;-&#171;, &#171;&#187;)    &#8230;\u0421\u043a\u043b\u0435\u0439\u043a\u0430 \u0431\u0435\u0437 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0435\u0439 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u043f\u043e\u0441\u043b\u0435 do_not_reply@: \u0440\u0430\u0437\u0431\u043e\u0440 \u043f\u043e \u043f\u0435\u0440\u0432\u043e\u043c\u0443 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0443 \u0434\u0430\u0432\u0430\u043b \u0441\u0442\u0435\u0431\u0435\u043b\u044c do, \u0438 \u0430\u0434\u0440\u0435\u0441 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b \u0444\u0438\u043b\u044c\u0442\u0440. \u0412 \u0441\u043f\u0438\u0441\u043e\u043a \u0437\u0430\u0433\u043b\u0443\u0448\u0435\u043a (firstname, yourname, example\u2026) \u043a\u043e\u0433\u0434\u0430-\u0442\u043e \u043f\u043e\u043f\u0430\u043b \u0438 mail. \u042d\u0442\u043e \u0431\u044b\u043b\u043e \u043e\u0448\u0438\u0431\u043a\u043e\u0439: \u0443 \u043c\u043d\u043e\u0433\u0438\u0445 \u0435\u0432\u0440\u043e\u043f\u0435\u0439\u0441\u043a\u0438\u0445 \u0431\u0430\u043d\u043a\u043e\u0432 mail@ \u0438 \u0435\u0441\u0442\u044c \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u043e\u0431\u0449\u0438\u0439 \u044f\u0449\u0438\u043a.\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0434\u043e\u043c\u0435\u043d\u0430 \u0438 \u043b\u043e\u0432\u0443\u0448\u043a\u0430 fake-ip\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0441\u043b\u0430\u0442\u044c, \u0441\u0442\u043e\u0438\u0442 \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0434\u043e\u043c\u0435\u043d \u0432\u043e\u043e\u0431\u0449\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043f\u043e\u0447\u0442\u0443. \u0421\u043c\u043e\u0442\u0440\u0438\u043c MX-\u0437\u0430\u043f\u0438\u0441\u044c, \u0430 \u0435\u0441\u043b\u0438 \u0435\u0451 \u043d\u0435\u0442, A-\u0437\u0430\u043f\u0438\u0441\u044c: \u043f\u043e RFC 5321 \u043f\u0440\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438 MX \u043f\u043e\u0447\u0442\u0430 \u0438\u0434\u0451\u0442 \u043d\u0430 \u0441\u0430\u043c \u0445\u043e\u0441\u0442 (implicit MX).for record in (&#171;MX&#187;, &#171;A&#187;):    out = run([&#171;dig&#187;, &#171;+short&#187;, &#171;+time=3&#187;, &#171;+tries=2&#187;, record, domain])    if out:        return record, out[0]return &#171;NONE&#187;, &#171;&#187;\u0412 \u043a\u044d\u0448\u0435 \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 1 680 \u0434\u043e\u043c\u0435\u043d\u043e\u0432. \u0423 1 616 \u043d\u0430\u0448\u043b\u0430\u0441\u044c MX, \u0443 64 \u0442\u043e\u043b\u044c\u043a\u043e A-\u0437\u0430\u043f\u0438\u0441\u044c. \u0412\u0441\u0435 64 \u0430\u0434\u0440\u0435\u0441\u0430 \u0438\u0437 \u044d\u0442\u0438\u0445 A-\u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u043b\u0435\u0436\u0430\u0442 \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 198.18.0.0\/15. \u042d\u0442\u043e \u043d\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u043f\u043e\u0447\u0442\u043e\u0432\u044b\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432. \u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d \u043f\u043e\u0434 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f (RFC 2544), \u0438 \u0435\u0433\u043e \u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043f\u0440\u043e\u043a\u0441\u0438 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 fake-ip: \u043e\u043d\u0438 \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0442 \u0432\u044b\u0434\u0443\u043c\u0430\u043d\u043d\u044b\u043c \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u043d\u0430 \u043b\u044e\u0431\u043e\u0439 A-\u0437\u0430\u043f\u0440\u043e\u0441, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0442\u043e\u043c \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0438\u0442\u044c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435.\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u0440\u043e\u0441\u0442\u0430:$ dig +short A nonexistent-zz9q7-test-domain-xyz.com198.18.26.171$ dig +short MX nonexistent-zz9q7-test-domain-xyz.com$\u041d\u0430 \u043c\u0430\u0448\u0438\u043d\u0435, \u0433\u0434\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430, \u0441\u0442\u043e\u044f\u043b \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u043a\u0441\u0438. \u041d\u0430 MX-\u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043e\u043d \u0447\u0435\u0441\u0442\u043d\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u043b \u043f\u0443\u0441\u0442\u043e\u0442\u043e\u0439, \u0430 \u043d\u0430 A-\u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043e\u0442\u0432\u0435\u0447\u0430\u043b \u0447\u0435\u043c \u0443\u0433\u043e\u0434\u043d\u043e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u00ab\u0434\u043e\u043c\u0435\u043d \u0431\u0435\u0437 MX, \u043d\u043e \u0441 A-\u0437\u0430\u043f\u0438\u0441\u044c\u044e\u00bb \u043d\u0430 \u044d\u0442\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 \u0437\u043d\u0430\u0447\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u043e: MX \u043d\u0435\u0442. \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u043b\u0430 \u043e\u0442\u0441\u0435\u0438\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0434\u043e\u043c\u0435\u043d\u044b, \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u043b\u0430 \u043b\u044e\u0431\u043e\u0439 \u0434\u043e\u043c\u0435\u043d \u0431\u0435\u0437 MX, \u0434\u0430\u0436\u0435 \u0432\u044b\u0434\u0443\u043c\u0430\u043d\u043d\u044b\u0439. \u0412\u044b\u0432\u043e\u0434 \u0431\u0430\u043d\u0430\u043b\u044c\u043d\u044b\u0439, \u043d\u043e \u043c\u044b \u0435\u0433\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u043b\u0438: \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c DNS, \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0441\u0432\u043e\u0439 \u0440\u0435\u0437\u043e\u043b\u0432\u0435\u0440 \u043d\u0430 \u0437\u0430\u0432\u0435\u0434\u043e\u043c\u043e \u043d\u0435\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c \u0438\u043c\u0435\u043d\u0438.\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043b\u0438 \u0441\u0430\u043c \u044f\u0449\u0438\u043a, DNS \u043d\u0435 \u0441\u043a\u0430\u0436\u0435\u0442. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0435\u0441\u0442\u044c SMTP-\u0434\u0438\u0430\u043b\u043e\u0433 \u0431\u0435\u0437 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u043f\u0438\u0441\u044c\u043c\u0430: EHLO, MAIL FROM, RCPT TO:&lt;\u0430\u0434\u0440\u0435\u0441&gt;, QUIT. \u0412\u0435\u0440\u0434\u0438\u043a\u0442\u043e\u043c \u0441\u043b\u0443\u0436\u0438\u0442 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 RCPT TO, \u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 DATA \u043d\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0438\u043a\u043e\u0433\u0434\u0430. \u041d\u0430\u0438\u0432\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u043b\u043e\u043c\u0430\u0435\u0442 catch-all: \u0442\u0430\u043a\u043e\u0439 \u0434\u043e\u043c\u0435\u043d \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 250 \u043d\u0430 \u043b\u044e\u0431\u043e\u0439 \u0430\u0434\u0440\u0435\u0441. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0434\u043e\u043c\u0435\u043d\u0435 \u0441\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c \u0432\u0442\u043e\u0440\u043e\u0439, \u0437\u0430\u0432\u0435\u0434\u043e\u043c\u043e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441. \u0415\u0441\u043b\u0438 \u043e\u0442\u0432\u0435\u0442\u044b \u0441\u043e\u0432\u043f\u0430\u043b\u0438, \u0432\u0435\u0440\u0434\u0438\u043a\u0442 \u00ab\u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043d\u0435\u043b\u044c\u0437\u044f\u00bb, \u0430 \u043d\u0435 \u00ab\u0430\u0434\u0440\u0435\u0441 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442\u00bb:real = rcpt(mx, address)fake = rcpt(mx, f&#187;{random_local(16)}@{domain}&#187;)if real == fake == 250:    return CATCHALLreturn VALID if real == 250 else INVALID if real in (550, 551, 553) else UNKNOWN\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u044d\u0442\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0442\u0430\u043c, \u0433\u0434\u0435 \u043e\u0442\u043a\u0440\u044b\u0442 \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0439 25-\u0439 \u043f\u043e\u0440\u0442. \u0414\u043e\u043c\u0430\u0448\u043d\u0438\u0435 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u044b \u0438 \u043c\u043d\u043e\u0433\u0438\u0435 \u043e\u0431\u043b\u0430\u043a\u0430 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u044e\u0442 \u0435\u0433\u043e \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e.\u041f\u043e\u043f\u0443\u0442\u043d\u043e \u0438\u0437 MX-\u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0432\u0438\u0434\u043d\u043e, \u043a\u0442\u043e \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043f\u043e\u0447\u0442\u0443 \u043d\u0430 \u0442\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435.\u041a\u0442\u043e&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-496912","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/496912","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=496912"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/496912\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=496912"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=496912"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=496912"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}