REDROOM
PHP 8.2.30
Path:
Logout
Edit File
Size: 60.42 KB
Close
/opt/cloudlinux/venv/lib64/python3.11/site-packages/numpy/polynomial/__pycache__/hermite_e.cpython-311.pyc
Text
Base64
pw0NCgAAAAC8fG9pos0AAOMAAAAAAAAAAAAAAAAFAAAAAAAAAPOwAQAAlwBkAFoAZAFkAmwBWgJkAWQCbANtBFoFAQBkAWQDbAZtB1oHAQBkBGQFbAhtCVoKAQBkBGQGbAttDFoMAQBnAGQHogFaDWUKag4AAAAAAAAAAFoPZAiEAFoQZAmEAFoRAgBlAmoSAAAAAAAAAABkCmQEZwKmAQAAqwEAAAAAAAAAAFoTAgBlAmoSAAAAAAAAAABkAWcBpgEAAKsBAAAAAAAAAABaFAIAZQJqEgAAAAAAAAAAZARnAaYBAACrAQAAAAAAAAAAWhUCAGUCahIAAAAAAAAAAGQBZARnAqYBAACrAQAAAAAAAAAAWhZkC4QAWhdkDIQAWhhkDYQAWhlkDoQAWhpkD4QAWhtkEIQAWhxkEYQAWh1kKGQThAFaHmQpZBSEAVofZARnAGQBZARkAWYFZBWEAVogZCpkF4QBWiFkGIQAWiJkGYQAWiNkGoQAWiRkG4QAWiVkHIQAWiZkHYQAWidkHoQAWihkK2QghAFaKWQhhABaKmQihABaK2QjhABaLGQkhABaLWQlhABaLgIARwBkJoQAZCdlDKYDAACrAwAAAAAAAAAAWi9kAlMAKSxhLgUAAAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ckhlcm1pdGVFIFNlcmllcywgIlByb2JhYmlsaXN0cyIgKDptb2Q6YG51bXB5LnBvbHlub21pYWwuaGVybWl0ZV9lYCkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBudW1iZXIgb2Ygb2JqZWN0cyAobW9zdGx5IGZ1bmN0aW9ucykgdXNlZnVsIGZvcgpkZWFsaW5nIHdpdGggSGVybWl0ZV9lIHNlcmllcywgaW5jbHVkaW5nIGEgYEhlcm1pdGVFYCBjbGFzcyB0aGF0CmVuY2Fwc3VsYXRlcyB0aGUgdXN1YWwgYXJpdGhtZXRpYyBvcGVyYXRpb25zLiAgKEdlbmVyYWwgaW5mb3JtYXRpb24Kb24gaG93IHRoaXMgbW9kdWxlIHJlcHJlc2VudHMgYW5kIHdvcmtzIHdpdGggc3VjaCBwb2x5bm9taWFscyBpcyBpbiB0aGUKZG9jc3RyaW5nIGZvciBpdHMgInBhcmVudCIgc3ViLXBhY2thZ2UsIGBudW1weS5wb2x5bm9taWFsYCkuCgpDbGFzc2VzCi0tLS0tLS0KLi4gYXV0b3N1bW1hcnk6OgogICA6dG9jdHJlZTogZ2VuZXJhdGVkLwoKICAgSGVybWl0ZUUKCkNvbnN0YW50cwotLS0tLS0tLS0KLi4gYXV0b3N1bW1hcnk6OgogICA6dG9jdHJlZTogZ2VuZXJhdGVkLwoKICAgaGVybWVkb21haW4KICAgaGVybWV6ZXJvCiAgIGhlcm1lb25lCiAgIGhlcm1leAoKQXJpdGhtZXRpYwotLS0tLS0tLS0tCi4uIGF1dG9zdW1tYXJ5OjoKICAgOnRvY3RyZWU6IGdlbmVyYXRlZC8KCiAgIGhlcm1lYWRkCiAgIGhlcm1lc3ViCiAgIGhlcm1lbXVseAogICBoZXJtZW11bAogICBoZXJtZWRpdgogICBoZXJtZXBvdwogICBoZXJtZXZhbAogICBoZXJtZXZhbDJkCiAgIGhlcm1ldmFsM2QKICAgaGVybWVncmlkMmQKICAgaGVybWVncmlkM2QKCkNhbGN1bHVzCi0tLS0tLS0tCi4uIGF1dG9zdW1tYXJ5OjoKICAgOnRvY3RyZWU6IGdlbmVyYXRlZC8KCiAgIGhlcm1lZGVyCiAgIGhlcm1laW50CgpNaXNjIEZ1bmN0aW9ucwotLS0tLS0tLS0tLS0tLQouLiBhdXRvc3VtbWFyeTo6CiAgIDp0b2N0cmVlOiBnZW5lcmF0ZWQvCgogICBoZXJtZWZyb21yb290cwogICBoZXJtZXJvb3RzCiAgIGhlcm1ldmFuZGVyCiAgIGhlcm1ldmFuZGVyMmQKICAgaGVybWV2YW5kZXIzZAogICBoZXJtZWdhdXNzCiAgIGhlcm1ld2VpZ2h0CiAgIGhlcm1lY29tcGFuaW9uCiAgIGhlcm1lZml0CiAgIGhlcm1ldHJpbQogICBoZXJtZWxpbmUKICAgaGVybWUycG9seQogICBwb2x5Mmhlcm1lCgpTZWUgYWxzbwotLS0tLS0tLQpgbnVtcHkucG9seW5vbWlhbGAKCukAAAAATikB2hRub3JtYWxpemVfYXhpc19pbmRleOkBAAAAKQHaCXBvbHl1dGlscykB2gtBQkNQb2x5QmFzZSkf2gloZXJtZXplcm/aCGhlcm1lb25l2gZoZXJtZXjaC2hlcm1lZG9tYWlu2gloZXJtZWxpbmXaCGhlcm1lYWRk2ghoZXJtZXN1YtoJaGVybWVtdWx42ghoZXJtZW11bNoIaGVybWVkaXbaCGhlcm1lcG932ghoZXJtZXZhbNoIaGVybWVkZXLaCGhlcm1laW502gpoZXJtZTJwb2x52gpwb2x5Mmhlcm1l2g5oZXJtZWZyb21yb290c9oLaGVybWV2YW5kZXLaCGhlcm1lZml02gloZXJtZXRyaW3aCmhlcm1lcm9vdHPaCEhlcm1pdGVF2gpoZXJtZXZhbDJk2gpoZXJtZXZhbDNk2gtoZXJtZWdyaWQyZNoLaGVybWVncmlkM2TaDWhlcm1ldmFuZGVyMmTaDWhlcm1ldmFuZGVyM2TaDmhlcm1lY29tcGFuaW9u2gpoZXJtZWdhdXNz2gtoZXJtZXdlaWdodGMBAAAAAAAAAAAAAAAGAAAAAwAAAPPKAAAAlwB0AQAAAAAAAAAAAABqAQAAAAAAAAAAfABnAaYBAACrAQAAAAAAAAAAXAEAAH0AdAUAAAAAAAAAAAAAfACmAQAAqwEAAAAAAAAAAGQBegoAAH0BZAJ9AnQHAAAAAAAAAAAAAHwBZANkA6YDAACrAwAAAAAAAAAARABdJX0DdAkAAAAAAAAAAAAAdAsAAAAAAAAAAAAAfAKmAQAAqwEAAAAAAAAAAHwAfAMZAAAAAAAAAAAApgIAAKsCAAAAAAAAAAB9AowmfAJTACkEYYoDAAAKICAgIHBvbHkyaGVybWUocG9sKQoKICAgIENvbnZlcnQgYSBwb2x5bm9taWFsIHRvIGEgSGVybWl0ZSBzZXJpZXMuCgogICAgQ29udmVydCBhbiBhcnJheSByZXByZXNlbnRpbmcgdGhlIGNvZWZmaWNpZW50cyBvZiBhIHBvbHlub21pYWwgKHJlbGF0aXZlCiAgICB0byB0aGUgInN0YW5kYXJkIiBiYXNpcykgb3JkZXJlZCBmcm9tIGxvd2VzdCBkZWdyZWUgdG8gaGlnaGVzdCwgdG8gYW4KICAgIGFycmF5IG9mIHRoZSBjb2VmZmljaWVudHMgb2YgdGhlIGVxdWl2YWxlbnQgSGVybWl0ZSBzZXJpZXMsIG9yZGVyZWQKICAgIGZyb20gbG93ZXN0IHRvIGhpZ2hlc3QgZGVncmVlLgoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIHBvbCA6IGFycmF5X2xpa2UKICAgICAgICAxLUQgYXJyYXkgY29udGFpbmluZyB0aGUgcG9seW5vbWlhbCBjb2VmZmljaWVudHMKCiAgICBSZXR1cm5zCiAgICAtLS0tLS0tCiAgICBjIDogbmRhcnJheQogICAgICAgIDEtRCBhcnJheSBjb250YWluaW5nIHRoZSBjb2VmZmljaWVudHMgb2YgdGhlIGVxdWl2YWxlbnQgSGVybWl0ZQogICAgICAgIHNlcmllcy4KCiAgICBTZWUgQWxzbwogICAgLS0tLS0tLS0KICAgIGhlcm1lMnBvbHkKCiAgICBOb3RlcwogICAgLS0tLS0KICAgIFRoZSBlYXN5IHdheSB0byBkbyBjb252ZXJzaW9ucyBiZXR3ZWVuIHBvbHlub21pYWwgYmFzaXMgc2V0cwogICAgaXMgdG8gdXNlIHRoZSBjb252ZXJ0IG1ldGhvZCBvZiBhIGNsYXNzIGluc3RhbmNlLgoKICAgIEV4YW1wbGVzCiAgICAtLS0tLS0tLQogICAgPj4+IGZyb20gbnVtcHkucG9seW5vbWlhbC5oZXJtaXRlX2UgaW1wb3J0IHBvbHkyaGVybWUKICAgID4+PiBwb2x5Mmhlcm1lKG5wLmFyYW5nZSg0KSkKICAgIGFycmF5KFsgIDIuLCAgMTAuLCAgIDIuLCAgIDMuXSkKCiAgICByBAAAAHICAAAA6f////8pBtoCcHXaCWFzX3Nlcmllc9oDbGVu2gVyYW5nZXIMAAAAcg4AAAApBNoDcG9s2gNkZWfaA3Jlc9oBaXMEAAAAICAgIPpRL29wdC9jbG91ZGxpbnV4L3ZlbnYvbGliNjQvcHl0aG9uMy4xMS9zaXRlLXBhY2thZ2VzL251bXB5L3BvbHlub21pYWwvaGVybWl0ZV9lLnB5chYAAAByFgAAAGEAAABzZwAAAIAA9UwBAA0PjEyYI5gV0Qwf1AwfgUWAU90KDYhjiSiMKJBRiSyAQ9gK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KSArIC4uLiArICBjX24gKiBIZV9uKHgpCgogICAgVGhlIGNvZWZmaWNpZW50IG9mIHRoZSBsYXN0IHRlcm0gaXMgbm90IGdlbmVyYWxseSAxIGZvciBtb25pYwogICAgcG9seW5vbWlhbHMgaW4gSGVybWl0ZUUgZm9ybS4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICByb290cyA6IGFycmF5X2xpa2UKICAgICAgICBTZXF1ZW5jZSBjb250YWluaW5nIHRoZSByb290cy4KCiAgICBSZXR1cm5zCiAgICAtLS0tLS0tCiAgICBvdXQgOiBuZGFycmF5CiAgICAgICAgMS1EIGFycmF5IG9mIGNvZWZmaWNpZW50cy4gIElmIGFsbCByb290cyBhcmUgcmVhbCB0aGVuIGBvdXRgIGlzIGEKICAgICAgICByZWFsIGFycmF5LCBpZiBzb21lIG9mIHRoZSByb290cyBhcmUgY29tcGxleCwgdGhlbiBgb3V0YCBpcyBjb21wbGV4CiAgICAgICAgZXZlbiBpZiBhbGwgdGhlIGNvZWZmaWNpZW50cyBpbiB0aGUgcmVzdWx0IGFyZSByZWFsIChzZWUgRXhhbXBsZXMKICAgICAgICBiZWxvdykuCgogICAgU2VlIEFsc28KICAgIC0tLS0tLS0tCiAgICBudW1weS5wb2x5bm9taWFsLnBvbHlub21pYWwucG9seWZyb21yb290cwogICAgbnVtcHkucG9seW5vbWlhbC5sZWdlbmRyZS5sZWdmcm9tcm9vdHMKICAgIG51bXB5LnBvbHlub21pYWwubGFndWVycmUubGFnZnJvbXJvb3RzCiAgICBudW1weS5wb2x5bm9taWFsLmhlcm1pdGUuaGVybWZyb21yb290cwogICAgbnVtcHkucG9seW5vbWlhbC5jaGVieXNoZXYuY2hlYmZyb21yb290cwoKICAgIEV4YW1wbGVzCiAgICAtLS0tLS0tLQogICAgPj4+IGZyb20gbnVtcHkucG9seW5vbWlhbC5oZXJtaXRlX2UgaW1wb3J0IGhlcm1lZnJvbXJvb3RzLCBoZXJtZXZhbAogICAgPj4+IGNvZWYgPSBoZXJtZWZyb21yb290cygoLTEsIDAsIDEpKQogICAgPj4+IGhl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AAAAAAAAAHwAfAGmAwAAqwMAAAAAAAAAAFMAKQFhOAUAAAogICAgRGl2aWRlIG9uZSBIZXJtaXRlIHNlcmllcyBieSBhbm90aGVyLgoKICAgIFJldHVybnMgdGhlIHF1b3RpZW50LXdpdGgtcmVtYWluZGVyIG9mIHR3byBIZXJtaXRlIHNlcmllcwogICAgYGMxYCAvIGBjMmAuICBUaGUgYXJndW1lbnRzIGFyZSBzZXF1ZW5jZXMgb2YgY29lZmZpY2llbnRzIGZyb20gbG93ZXN0CiAgICBvcmRlciAidGVybSIgdG8gaGlnaGVzdCwgZS5nLiwgWzEsMiwzXSByZXByZXNlbnRzIHRoZSBzZXJpZXMKICAgIGBgUF8wICsgMipQXzEgKyAzKlBfMmBgLgoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIGMxLCBjMiA6IGFycmF5X2xpa2UKICAgICAgICAxLUQgYXJyYXlzIG9mIEhlcm1pdGUgc2VyaWVzIGNvZWZmaWNpZW50cyBvcmRlcmVkIGZyb20gbG93IHRvCiAgICAgICAgaGlnaC4KCiAgICBSZXR1cm5zCiAgICAtLS0tLS0tCiAgICBbcXVvLCByZW1dIDogbmRhcnJheXMKICAgICAgICBPZiBIZXJtaXRlIHNlcmllcyBjb2VmZmljaWVudHMgcmVwcmVzZW50aW5nIHRoZSBxdW90aWVudCBhbmQKICAgICAgICByZW1haW5kZXIuCgogICAgU2VlIEFsc28KICAgIC0tLS0tLS0tCiAgICBoZXJtZWFkZCwgaGVybWVzdWIsIGhlcm1lbXVseCwgaGVybWVtdWwsIGhlcm1lcG93CgogICAgTm90ZXMKICAgIC0tLS0tCiAgICBJbiBnZW5lcmFsLCB0aGUgKHBvbHlub21pYWwpIGRpdmlzaW9uIG9mIG9uZSBIZXJtaXRlIHNlcmllcyBieSBhbm90aGVyCiAgICByZXN1bHRzIGluIHF1b3RpZW50IGFuZCByZW1haW5kZXIgdGVybXMgdGhhdCBhcmUgbm90IGluIHRoZSBIZXJtaXRlCiAgICBwb2x5bm9taWFsIGJhc2lzIHNldC4gIFRodXMsIHRvIGV4cHJlc3MgdGhlc2UgcmVzdWx0cyBhcyBhIEhl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aGlnaCBkZWdyZWUgYWxvbmcgZWFjaAogICAgYXhpcywgZS5nLiwgWzEsMiwzXSByZXByZXNlbnRzIHRoZSBzZXJpZXMgYGAxKkhlXzAgKyAyKkhlXzEgKyAzKkhlXzJgYAogICAgd2hpbGUgW1sxLDJdLFsxLDJdXSByZXByZXNlbnRzIGBgMSpIZV8wKHgpKkhlXzAoeSkgKyAxKkhlXzEoeCkqSGVfMCh5KQogICAgKyAyKkhlXzAoeCkqSGVfMSh5KSArIDIqSGVfMSh4KSpIZV8xKHkpYGAgaWYgYXhpcz0wIGlzIGBgeGBgIGFuZCBheGlzPTEKICAgIGlzIGBgeWBgLgoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIGMgOiBhcnJheV9saWtlCiAgICAgICAgQXJyYXkgb2YgSGVybWl0ZV9lIHNlcmllcyBjb2VmZmljaWVudHMuIElmIGBjYCBpcyBtdWx0aWRpbWVuc2lvbmFsCiAgICAgICAgdGhlIGRpZmZlcmVudCBheGlzIGNvcnJlc3BvbmQgdG8gZGlmZmVyZW50IHZhcmlhYmxlcyB3aXRoIHRoZQogICAgICAgIGRlZ3JlZSBpbiBlYWNoIGF4aXMgZ2l2ZW4gYnkgdGhlIGNvcnJlc3BvbmRpbmcgaW5kZXguCiAgICBtIDogaW50LCBvcHRpb25hbAogICAgICAgIE51bWJlciBvZiBkZXJpdmF0aXZlcyB0YWtlbiwgbXVzdCBiZSBub24tbmVnYXRpdmUuIChEZWZhdWx0OiAxKQogICAgc2NsIDogc2NhbGFyLCBvcHRpb25hbAogICAgICAgIEVhY2ggZGlmZmVyZW50aWF0aW9uIGlzIG11bHRpcGxpZWQgYnkgYHNjbGAuICBUaGUgZW5kIHJlc3VsdCBpcwogICAgICAgIG11bHRpcGxpY2F0aW9uIGJ5IGBgc2NsKiptYGAuICBUaGlzIGlzIGZvciB1c2UgaW4gYSBsaW5lYXIgY2hhbmdlIG9mCiAgICAgICAgdmFyaWFibGUuIChEZWZhdWx0OiAxKQogICAgYXhpcyA6IGludCwgb3B0aW9uYWwKICAgICAgICBBeGlzIG92ZXIgd2hpY2ggdGhlIGRlcml2YXRpdmUgaXMgdGFrZW4uIChEZWZh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UmV0dXJucyB0aGUgSGVybWl0ZV9lIHNlcmllcyBjb2VmZmljaWVudHMgYGNgIGludGVncmF0ZWQgYG1gIHRpbWVzIGZyb20KICAgIGBsYm5kYCBhbG9uZyBgYXhpc2AuIEF0IGVhY2ggaXRlcmF0aW9uIHRoZSByZXN1bHRpbmcgc2VyaWVzIGlzCiAgICAqKm11bHRpcGxpZWQqKiBieSBgc2NsYCBhbmQgYW4gaW50ZWdyYXRpb24gY29uc3RhbnQsIGBrYCwgaXMgYWRkZWQuCiAgICBUaGUgc2NhbGluZyBmYWN0b3IgaXMgZm9yIHVzZSBpbiBhIGxpbmVhciBjaGFuZ2Ugb2YgdmFyaWFibGUuICAoIkJ1eWVyCiAgICBiZXdhcmUiOiBub3RlIHRoYXQsIGRlcGVuZGluZyBvbiB3aGF0IG9uZSBpcyBkb2luZywgb25lIG1heSB3YW50IGBzY2xgCiAgICB0byBiZSB0aGUgcmVjaXByb2NhbCBvZiB3aGF0IG9uZSBtaWdodCBleHBlY3Q7IGZvciBtb3JlIGluZm9ybWF0aW9uLAogICAgc2VlIHRoZSBOb3RlcyBzZWN0aW9uIGJlbG93LikgIFRoZSBhcmd1bWVudCBgY2AgaXMgYW4gYXJyYXkgb2YKICAgIGNvZWZmaWNpZW50cyBmcm9tIGxvdyB0byBoaWdoIGRlZ3JlZSBhbG9uZyBlYWNoIGF4aXMsIGUuZy4sIFsxLDIsM10KICAgIHJlcHJlc2VudHMgdGhlIHNlcmllcyBgYEhfMCArIDIqSF8xICsgMypIXzJgYCB3aGlsZSBbWzEsMl0sWzEsMl1dCiAgICByZXByZXNlbnRzIGBgMSpIXzAoeCkqSF8wKHkpICsgMSpIXzEoeCkqSF8wKHkpICsgMipIXzAoeCkqSF8xKHkpICsKICAgIDIqSF8xKHgpKkhfMSh5KWBgIGlmIGF4aXM9MCBpcyBgYHhgYCBhbmQgYXhpcz0xIGlzIGBgeWBgLgoKICAgIFBhcmFtZXRlcnMKICAgIC0tLS0tLS0tLS0KICAgIGMgOiBhcnJheV9saWtlCiAgICAgICAgQXJyYXkgb2YgSGVybWl0ZV9lIHNlcmllcyBjb2VmZmljaWVudHMuIElmIGMgaXMgbXVsdGlkaW1lbnNpb25hbAogICAgICAgIHRoZSBkaWZmZXJlbnQgYXhpcyBjb3JyZXNwb25kIHRvIGRpZmZlcmVudCB2YXJpYWJsZXMgd2l0aCB0aGUKICAgICAgICBkZWdyZWUgaW4gZWFjaCBheGlzIGdpdmVuIGJ5IHRoZSBjb3JyZXNwb25kaW5nIGluZGV4LgogICAgbSA6IGludCwgb3B0aW9uYWwKICAgICAgICBPcmRlciBvZiBpbnRlZ3JhdGlvbiwgbXVzdCBiZSBwb3NpdGl2ZS4gKERlZmF1bHQ6IDEpCiAgICBrIDoge1tdLCBsaXN0LCBzY2FsYXJ9LCBvcHRpb25hbAogICAgICAgIEludGVncmF0aW9uIGNvbnN0YW50KHMpLiAgVGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBpbnRlZ3JhbCBhdAogICAgICAgIGBgbGJuZGBgIGlzIHRoZSBmaXJzdCB2YWx1ZSBpbiB0aGUgbGlzdCwgdGhlIHZhbHVlIG9mIHRoZSBzZWNvbmQKICAgICAgICBpbnRlZ3JhbCBhdCBgYGxibmRgYCBpcyB0aGUgc2Vjb25kIHZhbHVlLCBldGMuICBJZiBgYGsgPT0gW11gYCAodGhlCiAgICAgICAgZGVmYXVsdCksIGFsbCBjb25zdGFudHMgYXJlIHNldCB0byB6ZXJvLiAgSWYgYGBtID09IDFgYCwgYSBzaW5nbGUKICAgICAgICBzY2FsYXIgY2FuIGJlIGdpdmVuIGluc3RlYWQgb2YgYSBsaXN0LgogICAgbGJuZCA6IHNjYWxhciwgb3B0aW9uYWwKICAgICAgICBUaGUgbG93ZXIgYm91bmQgb2YgdGhlIGludGVncmFsLiAoRGVmYXVsdDogMCkKICAgIHNjbCA6IHNjYWxhciwgb3B0aW9uYWwKICAgICAgICBGb2xsb3dpbmcgZWFjaCBpbnRlZ3JhdGlvbiB0aGUgcmVzdWx0IGlzICptdWx0aXBsaWVkKiBieSBgc2NsYAogICAgICAgIGJlZm9yZSB0aGUgaW50ZWdyYXRpb24gY29uc3RhbnQgaXMgYWRkZWQuIChEZWZhdWx0OiAxKQogICAgYXhpcyA6IGludCwgb3B0aW9uYWwKICAgICAgICBBeGlzIG92ZXIgd2hpY2ggdGhlIGludGVncmFsIGlzIHRha2VuLiAoRGVmYXVsdDogMCkuCgogICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuNy4wCgogICAgUmV0dXJucwogICAgLS0tLS0tLQogICAgUyA6IG5kYXJyYXkKICAgICAgICBIZXJtaXRlX2Ugc2VyaWVzIGNvZWZmaWNpZW50cyBvZiB0aGUgaW50ZWdyYWwuCgogICAgUmFpc2VzCiAgICAtLS0tLS0KICAgIFZhbHVlRXJyb3IKICAgICAgICBJZiBgYG0gPCAwYGAsIGBgbGVuKGspID4gbWBgLCBgYG5wLm5kaW0obGJuZCkgIT0gMGBgLCBvcgogICAgICAgIGBgbnAubmRpbShzY2wpICE9IDBgYC4KCiAgICBTZWUgQWxzbwogICAgLS0tLS0tLS0KICAgIGhlcm1lZGVyCgogICAgTm90ZXMKICAgIC0tLS0tCiAgICBOb3RlIHRoYXQgdGhlIHJlc3VsdCBvZiBlYWNoIGludGVncmF0aW9uIGlzICptdWx0aXBsaWVkKiBieSBgc2NsYC4KICAgIFdoeSBpcyB0aGlzIGltcG9ydGFudCB0byBub3RlPyAgU2F5IG9uZSBpcyBtYWtpbmcgYSBsaW5lYXIgY2hhbmdlIG9mCiAgICB2YXJpYWJsZSA6bWF0aDpgdSA9IGF4ICsgYmAgaW4gYW4gaW50ZWdyYWwgcmVsYXRpdmUgdG8gYHhgLiAgVGhlbgogICAgOm1hdGg6YGR4ID0gZHUvYWAsIHNvIG9uZSB3aWxsIG5lZWQgdG8gc2V0IGBzY2xgIGVxdWFsIHRvCiAgICA6bWF0aDpgMS9hYCAtIHBlcmhhcHMgbm90IHdoYXQgb25lIHdvdWxkIGhhdmUgZmlyc3QgdGhvdWdodC4KCiAgICBBbHNvIG5vdGUgdGhhdCwgaW4gZ2VuZXJhbCwgdGhlIHJlc3VsdCBvZiBpbnRlZ3JhdGluZyBhIEMtc2VyaWVzIG5lZWRzCiAgICB0byBiZSAicmVwcm9qZWN0ZWQiIG9udG8gdGhlIEMtc2VyaWVzIGJhc2lzIHNldC4gIFRodXMsIHR5cGljYWxseSwKICAgIHRoZSByZXN1bHQgb2YgdGhpcyBmdW5jdGlvbiBpcyAidW5pbnR1aXRpdmUsIiBhbGJlaXQgY29ycmVjdDsgc2Vl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bHkgaWYgaXQgaXMgYSB0dXBsZSBvciBhCiAgICBsaXN0LCBvdGhlcndpc2UgaXQgaXMgdHJlYXRlZCBhcyBhIHNjYWxhci4gSW4gZWl0aGVyIGNhc2UsIGVpdGhlciBgeGAKICAgIG9yIGl0cyBlbGVtZW50cyBtdXN0IHN1cHBvcnQgbXVsdGlwbGljYXRpb24gYW5kIGFkZGl0aW9uIGJvdGggd2l0aAogICAgdGhlbXNlbHZlcyBhbmQgd2l0aCB0aGUgZWxlbWVudHMgb2YgYGNgLgoKICAgIElmIGBjYCBpcyBhIDEtRCBhcnJheSwgdGhlbiBgcCh4KWAgd2lsbCBoYXZlIHRoZSBzYW1lIHNoYXBlIGFzIGB4YC4gIElmCiAgICBgY2AgaXMgbXVsdGlkaW1lbnNpb25hbCwgdGhlbiB0aGUgc2hhcGUgb2YgdGhlIHJlc3VsdCBkZXBlbmRzIG9uIHRoZQogICAgdmFsdWUgb2YgYHRlbnNvcmAuIElmIGB0ZW5zb3JgIGlzIHRydWUgdGhlIHNoYXBlIHdpbGwgYmUgYy5zaGFwZVsxOl0gKwogICAgeC5zaGFwZS4gSWYgYHRlbnNvcmAgaXMgZmFsc2UgdGhlIHNoYXBlIHdpbGwgYmUgYy5zaGFwZVsxOl0uIE5vdGUgdGhhdAogICAgc2NhbGFycyBoYXZlIHNoYXBlICgsKS4KCiAgICBUcmFpbGluZyB6ZXJvcyBpbiB0aGUgY29lZmZpY2llbnRzIHdpbGwgYmUgdXNlZCBpbiB0aGUgZXZhbHVhdGlvbiwgc28KICAgIHRoZXkgc2hvdWxkIGJlIGF2b2lkZWQgaWYgZWZmaWNpZW5jeSBpcyBhIGNvbmNlcm4uCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgeCA6IGFycmF5X2xpa2UsIGNvbXBhdGlibGUgb2JqZWN0CiAgICAgICAgSWYgYHhgIGlzIGEgbGlzdCBvciB0dXBsZSwgaXQgaXMgY29udmVydGVkIHRvIGFuIG5kYXJyYXksIG90aGVyd2lzZQogICAgICAgIGl0IGlzIGxlZnQgdW5jaGFuZ2VkIGFuZCB0cmVhdGVkIGFzIGEgc2NhbGFyLiBJbiBlaXRoZXIgY2FzZSwgYHhgCiAgICAgICAgb3IgaXRzIGVsZW1lbnRzIG11c3Qgc3VwcG9ydCBhZGRpdGlvbiBhbmQgbXVsdGlwbGljYXRpb24gd2l0aAogICAgICAgIHdpdGggdGhlbXNlbHZlcyBhbmQgd2l0aCB0aGUgZWxlbWVudHMgb2YgYGNgLgogICAgYyA6IGFycmF5X2xpa2UKICAgICAgICBBcnJheSBvZiBjb2VmZmljaWVudHMgb3JkZXJlZCBzbyB0aGF0IHRoZSBjb2VmZmljaWVudHMgZm9yIHRlcm1zIG9mCiAgICAgICAgZGVncmVlIG4gYXJlIGNvbnRhaW5lZCBpbiBjW25dLiBJZiBgY2AgaXMgbXVsdGlkaW1lbnNpb25hbCB0aGUKICAgICAgICByZW1haW5pbmcgaW5kaWNlcyBlbnVtZXJhdGUgbXVsdGlwbGUgcG9seW5vbWlhbHMuIEluIHRoZSB0d28KICAgICAgICBkaW1lbnNpb25hbCBjYXNlIHRoZSBjb2VmZmljaWVudHMgbWF5IGJlIHRob3VnaHQgb2YgYXMgc3RvcmVkIGluCiAgICAgICAgdGhlIGNvbHVtbnMgb2YgYGNgLgogICAgdGVuc29yIDogYm9vbGVhbiwgb3B0aW9uYWwKICAgICAgICBJZiBUcnVlLCB0aGUgc2hhcGUgb2YgdGhlIGNvZWZmaWNpZW50IGFycmF5IGlzIGV4dGVuZGVkIHdpdGggb25lcwogICAgICAgIG9uIHRoZSByaWdodCwgb25lIGZvciBlYWNoIGRpbWVuc2lvbiBvZiBgeGAuIFNjYWxhcnMgaGF2ZSBkaW1lbnNpb24gMAogICAgICAgIGZvciB0aGlzIGFjdGlvbi4gVGhlIHJlc3VsdCBpcyB0aGF0IGV2ZXJ5IGNvbHVtbiBvZiBjb2VmZmljaWVudHMgaW4KICAgICAgICBgY2AgaXMgZXZhbHVhdGVkIGZvciBldmVyeSBlbGVtZW50IG9mIGB4YC4gSWYgRmFsc2UsIGB4YCBpcyBicm9hZGNhc3QKICAgICAgICBvdmVyIHRoZSBjb2x1bW5zIG9mIGBjYCBmb3IgdGhlIGV2YWx1YXRpb24uICBUaGlzIGtleXdvcmQgaXMgdXNlZnVsCiAgICAgICAgd2hlbiBgY2AgaXMgbXVsdGlkaW1lbnNpb25h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aXRseSBhcHBlbmRlZCB0byBpdHMgc2hhcGUgdG8gbWFrZQogICAgaXQgMi1ELiBUaGUgc2hhcGUgb2YgdGhlIHJlc3VsdCB3aWxsIGJlIGMuc2hhcGVbMjpdICsgeC5zaGFwZS4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICB4LCB5IDogYXJyYXlfbGlrZSwgY29tcGF0aWJsZSBvYmplY3RzCiAgICAgICAgVGhlIHR3byBkaW1lbnNpb25hbCBzZXJpZXMgaXMgZXZhbHVhdGVkIGF0IHRoZSBwb2ludHMgYCh4LCB5KWAsCiAgICAgICAgd2hlcmUgYHhgIGFuZCBgeWAgbXVzdCBoYXZlIHRoZSBzYW1lIHNoYXBlLiBJZiBgeGAgb3IgYHlgIGlzIGEgbGlzdAogICAgICAgIG9yIHR1cGxlLCBpdCBpcyBmaXJzdCBjb252ZXJ0ZWQgdG8gYW4gbmRhcnJheSwgb3RoZXJ3aXNlIGl0IGlzIGxlZnQKICAgICAgICB1bmNoYW5nZWQgYW5kIGlmIGl0IGlzbid0IGFuIG5kYXJyYXkgaXQgaXMgdHJlYXRlZCBhcyBhIHNjYWxhci4KICAgIGMgOiBhcnJheV9saWtlCiAgICAgICAgQXJyYXkgb2YgY29lZmZpY2llbnRzIG9yZGVyZWQgc28gdGhhdCB0aGUgY29lZmZpY2llbnQgb2YgdGhlIHRlcm0KICAgICAgICBvZiBtdWx0aS1kZWdyZWUgaSxqIGlzIGNvbnRhaW5lZCBpbiBgYGNbaSxqXWBgLiBJZiBgY2AgaGFzCiAgICAgICAgZGltZW5zaW9uIGdyZWF0ZXIgdGhhbiB0d28gdGhlIHJlbWFpbmluZyBpbmRpY2VzIGVudW1lcmF0ZSBtdWx0aXBsZQogICAgICAgIHNldHMgb2YgY29lZmZpY2llbnRzLgoKICAgIFJldHVybnMKICAgIC0tLS0tLS0KICAgIHZhbHVlcyA6IG5kYXJyYXksIGNvbXBhdGlibGUgb2JqZWN0CiAgICAgICAgVGhlIHZhbHVlcyBvZiB0aGUgdHdvIGRpbWVuc2lvbmFsIHBvbHlub21pYWwgYXQgcG9pbnRzIGZvcm1lZCB3aXRoCiAgICAgICAgcGFpcnMgb2YgY29ycmVzcG9uZGluZyB2YWx1ZXMgZnJvbSBgeGAgYW5kIGB5YC4KCiAgICBTZWUgQWxzbwogICAgLS0tLS0tLS0KICAgIGhlcm1ldmFsLCBoZXJtZWdyaWQyZCwgaGVybWV2YWwzZCwgaGVybWVncmlkM2QKCiAgICBOb3RlcwogICAgLS0tLS0KCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjcuMAoKICAgIKkDcigAAADaBl92YWxuZHISAAAAqQNyfQAAANoBeXI5AAAAcwMAAAAgICByMAAAAHIdAAAAch0AAAB6AwAAcxsAAACAAPVcAQAMDow5lViYcaAhoFHRCyfUCyfQBCdyMQAAAGMDAAAAAAAAAAAAAAAGAAAAAwAAAPM6AAAAlwB0AQAAAAAAAAAAAABqAQAAAAAAAAAAdAQAAAAAAAAAAAAAfAJ8AHwBpgQAAKsEAAAAAAAAAABTACkBYdcGAAAKICAgIEV2YWx1YXRlIGEgMi1EIEhlcm1pdGVFIHNlcmllcyBvbiB0aGUgQ2FydGVzaWFuIHByb2R1Y3Qgb2YgeCBhbmQgeS4KCiAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHZhbHVlczoKCiAgICAuLiBtYXRoOjogcChhLGIpID0gXHN1bV97aSxqfSBjX3tpLGp9ICogSF9pKGEpICogSF9qKGIpCgogICAgd2hlcmUgdGhlIHBvaW50cyBgKGEsIGIpYCBjb25zaXN0IG9mIGFsbCBwYWlycyBmb3JtZWQgYnkgdGFraW5nCiAgICBgYWAgZnJvbSBgeGAgYW5kIGBiYCBmcm9tIGB5YC4gVGhlIHJlc3VsdGluZyBwb2ludHMgZm9ybSBhIGdyaWQgd2l0aAogICAgYHhgIGluIHRoZSBmaXJzdCBkaW1lbnNpb24gYW5kIGB5YCBpbiB0aGUgc2Vjb25kLgoKICAgIFRoZSBwYXJhbWV0ZXJzIGB4YCBhbmQgYHlgIGFyZSBjb252ZXJ0ZWQgdG8gYXJyYXlzIG9ubHkgaWYgdGhleSBhcmUKICAgIHR1cGxlcyBvciBhIGxpc3RzLCBvdGhlcndpc2UgdGhleSBhcmUgdHJlYXRlZCBhcyBhIHNjYWxhcnMuIEluIGVpdGhlcgogICAgY2FzZSwgZWl0aGVyIGB4YCBhbmQgYHlgIG9yIHRoZWlyIGVsZW1lbnRzIG11c3Qgc3VwcG9ydCBtdWx0aXBsaWNhdGlvbgogICAgYW5kIGFkZGl0aW9uIGJvdGggd2l0aCB0aGVtc2VsdmVzIGFuZCB3aXRoIHRoZSBlbGVtZW50cyBvZiBgY2AuCgogICAgSWYgYGNgIGhhcyBmZXdlciB0aGFuIHR3byBkaW1lbnNpb25zLCBvbmVzIGFyZSBpbXBsaWNpdGx5IGFwcGVuZGVkIHRvCiAgICBpdHMgc2hhcGUgdG8gbWFrZSBpdCAyLUQuIFRoZSBzaGFwZSBvZiB0aGUgcmVzdWx0IHdpbGwgYmUgYy5zaGFwZVsyOl0gKwogICAgeC5zaGFwZS4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICB4LCB5IDogYXJyYXlfbGlrZSwgY29tcGF0aWJsZSBvYmplY3RzCiAgICAgICAgVGhlIHR3byBkaW1lbnNpb25hbCBzZXJpZXMgaXMgZXZhbHVhdGVkIGF0IHRoZSBwb2ludHMgaW4gdGhlCiAgICAgICAgQ2FydGVzaWFuIHByb2R1Y3Qgb2YgYHhgIGFuZCBgeWAuICBJZiBgeGAgb3IgYHlgIGlzIGEgbGlzdCBvcgogICAgICAgIHR1cGxlLCBpdCBpcyBmaXJzdCBjb252ZXJ0ZWQgdG8gYW4gbmRhcnJheSwgb3RoZXJ3aXNlIGl0IGlzIGxlZnQKICAgICAgICB1bmNoYW5nZWQgYW5kLCBpZiBpdCBpc24ndCBhbiBuZGFycmF5LCBpdCBpcyB0cmVhdGVkIGFzIGEgc2NhbGFyLgogICAgYyA6IGFycmF5X2xpa2UKICAgICAgICBBcnJheSBvZiBjb2VmZmljaWVudHMgb3JkZXJlZCBzbyB0aGF0IHRoZSBjb2VmZmljaWVudHMgZm9yIHRlcm1zIG9mCiAgICAgICAgZGVncmVlIGksaiBhcmUgY29udGFpbmVkIGluIGBgY1tpLGpdYGAuIElmIGBjYCBoYXMgZGltZW5zaW9uCiAgICAgICAgZ3JlYXRlciB0aGFuIHR3byB0aGUgcmVtYWluaW5nIGluZGljZXMgZW51bWVyYXRlIG11bHRpcGxlIHNldHMgb2YKICAgICAgICBjb2VmZmljaWVudHMuCgogICAgUmV0dXJucwogICAgLS0tLS0tLQogICAgdmFsdWVzIDogbmRhcnJheSwgY29tcGF0aWJsZSBvYmplY3QKICAgICAgICBUaGUgdmFsdWVzIG9mIHRoZSB0d28gZGltZW5zaW9uYWwgcG9seW5vbWlhbCBhdCBwb2ludHMgaW4gdGhlIENhcnRlc2lhbgogICAgICAgIHByb2R1Y3Qgb2YgYHhgIGFuZCBgeWAuCgogICAgU2VlIEFsc28KICAgIC0tLS0tLS0tCiAgICBoZXJtZXZhbCwgaGVybWV2YWwyZCwgaGVybWV2YWwzZCwgaGVybWVncmlkM2QKCiAgICBOb3RlcwogICAgLS0tLS0KCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjcuMAoKICAgIKkDcigAAADaB19ncmlkbmRyEgAAAHKCAAAAcwMAAAAgICByMAAAAHIfAAAAch8AAACrAwAAcxsAAACAAPVkAQAMDow6lWigAaAxoGHRCyjUCyjQBChyMQAAAGMEAAAAAAAAAAAAAAAHAAAAAwAAAPM8AAAAlwB0AQAAAAAAAAAAAABqAQAAAAAAAAAAdAQAAAAAAAAAAAAAfAN8AHwBfAKmBQAAqwUAAAAAAAAAAFMAKQFhqgYAAAogICAgRXZhbHVhdGUgYSAzLUQgSGVybWl0ZV9lIHNlcmllcyBhdCBwb2ludHMgKHgsIHksIHopLgoKICAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdmFsdWVzOgoKICAgIC4uIG1hdGg6OiBwKHgseSx6KSA9IFxzdW1fe2ksaixrfSBjX3tpLGosa30gKiBIZV9pKHgpICogSGVfaih5KSAqIEhlX2soeikKCiAgICBUaGUgcGFyYW1ldGVycyBgeGAsIGB5YCwgYW5kIGB6YCBhcmUgY29udmVydGVkIHRvIGFycmF5cyBvbmx5IGlmCiAgICB0aGV5IGFyZSB0dXBsZXMgb3IgYSBsaXN0cywgb3RoZXJ3aXNlIHRoZXkgYXJlIHRyZWF0ZWQgYXMgYSBzY2FsYXJzIGFuZAogICAgdGhleSBtdXN0IGhhdmUgdGhlIHNhbWUgc2hhcGUgYWZ0ZXIgY29udmVyc2lvbi4gSW4gZWl0aGVyIGNhc2UsIGVpdGhlcgogICAgYHhgLCBgeWAsIGFuZCBgemAgb3IgdGhlaXIgZWxlbWVudHMgbXVzdCBzdXBwb3J0IG11bHRpcGxpY2F0aW9uIGFuZAogICAgYWRkaXRpb24gYm90aCB3aXRoIHRoZW1zZWx2ZXMgYW5kIHdpdGggdGhlIGVsZW1lbnRzIG9mIGBjYC4KCiAgICBJZiBgY2AgaGFzIGZld2VyIHRoYW4gMyBkaW1lbnNpb25zLCBvbmVzIGFyZSBpbXBsaWNpdGx5IGFwcGVuZGVkIHRvIGl0cwogICAgc2hhcGUgdG8gbWFrZSBpdCAzLUQuIFRoZSBzaGFwZSBvZiB0aGUgcmVzdWx0IHdpbGwgYmUgYy5zaGFwZVszOl0gKwogICAgeC5zaGFwZS4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICB4LCB5LCB6IDogYXJyYXlfbGlrZSwgY29tcGF0aWJsZSBvYmplY3QKICAgICAgICBUaGUgdGhyZWUgZGltZW5zaW9uYWwgc2VyaWVzIGlzIGV2YWx1YXRlZCBhdCB0aGUgcG9pbnRzCiAgICAgICAgYCh4LCB5LCB6KWAsIHdoZXJlIGB4YCwgYHlgLCBhbmQgYHpgIG11c3QgaGF2ZSB0aGUgc2FtZSBzaGFwZS4gIElmCiAgICAgICAgYW55IG9mIGB4YCwgYHlgLCBvciBgemAgaXMgYSBsaXN0IG9yIHR1cGxlLCBpdCBpcyBmaXJzdCBjb252ZXJ0ZWQKICAgICAgICB0byBhbiBuZGFycmF5LCBvdGhlcndpc2UgaXQgaXMgbGVmdCB1bmNoYW5nZWQgYW5kIGlmIGl0IGlzbid0IGFuCiAgICAgICAgbmRhcnJheSBpdCBpcyAgdHJlYXRlZCBhcyBhIHNjYWxhci4KICAgIGMgOiBhcnJheV9saWtlCiAgICAgICAgQXJyYXkgb2YgY29lZmZpY2llbnRzIG9yZGVyZWQgc28gdGhhdCB0aGUgY29lZmZpY2llbnQgb2YgdGhlIHRlcm0gb2YKICAgICAgICBtdWx0aS1kZWdyZWUgaSxqLGsgaXMgY29udGFpbmVkIGluIGBgY1tpLGosa11gYC4gSWYgYGNgIGhhcyBkaW1lbnNpb24KICAgICAgICBncmVhdGVyIHRoYW4gMyB0aGUgcmVtYWluaW5nIGluZGljZXMgZW51bWVyYXRlIG11bHRpcGxlIHNldHMgb2YKICAgICAgICBjb2VmZmljaWVudHMuCgogICAgUmV0dXJucwogICAgLS0tLS0tLQogICAgdmFsdWVzIDogbmRhcnJheSwgY29tcGF0aWJsZSBvYmplY3QKICAgICAgICBUaGUgdmFsdWVzIG9mIHRoZSBtdWx0aWRpbWVuc2lvbmFsIHBvbHlub21pYWwgb24gcG9pbnRzIGZvcm1lZCB3aXRoCiAgICAgICAgdHJpcGxlcyBvZiBjb3JyZXNwb25kaW5nIHZhbHVlcyBmcm9tIGB4YCwgYHlgLCBhbmQgYHpgLgoKICAgIFNlZSBBbHNvCiAgICAtLS0tLS0tLQogICAgaGVybWV2YWwsIGhlcm1ldmFsMmQsIGhlcm1lZ3JpZDJkLCBoZXJtZWdyaWQzZAoKICAgIE5vdGVzCiAgICAtLS0tLQoKICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuNy4wCgogICAgcoAAAACpBHJ9AAAAcoMAAADaAXpyOQAAAHMEAAAAICAgIHIwAAAAch4AAAByHgAAAOADAABzHQAAAIAA9WABAAwOjDmVWJhxoCGgUagB0Qsq1Asq0AQqcjEAAABjBAAAAAAAAAAAAAAABwAAAAMAAADzPAAAAJcAdAEAAAAAAAAAAAAAagEAAAAAAAAAAHQEAAAAAAAAAAAAAHwDfAB8AXwCpgUAAKsFAAAAAAAAAABTACkBYVYHAAAKICAgIEV2YWx1YXRlIGEgMy1EIEhlcm1pdGVFIHNlcmllcyBvbiB0aGUgQ2FydGVzaWFuIHByb2R1Y3Qgb2YgeCwgeSwgYW5kIHouCgogICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB2YWx1ZXM6CgogICAgLi4gbWF0aDo6IHAoYSxiLGMpID0gXHN1bV97aSxqLGt9IGNfe2ksaixrfSAqIEhlX2koYSkgKiBIZV9qKGIpICogSGVfayhjKQoKICAgIHdoZXJlIHRoZSBwb2ludHMgYChhLCBiLCBjKWAgY29uc2lzdCBvZiBhbGwgdHJpcGxlcyBmb3JtZWQgYnkgdGFraW5nCiAgICBgYWAgZnJvbSBgeGAsIGBiYCBmcm9tIGB5YCwgYW5kIGBjYCBmcm9tIGB6YC4gVGhlIHJlc3VsdGluZyBwb2ludHMgZm9ybQogICAgYSBncmlkIHdpdGggYHhgIGluIHRoZSBmaXJzdCBkaW1lbnNpb24sIGB5YCBpbiB0aGUgc2Vjb25kLCBhbmQgYHpgIGluCiAgICB0aGUgdGhpcmQuCgogICAgVGhlIHBhcmFtZXRlcnMgYHhgLCBgeWAsIGFuZCBgemAgYXJlIGNvbnZlcnRlZCB0byBhcnJheXMgb25seSBpZiB0aGV5CiAgICBhcmUgdHVwbGVzIG9yIGEgbGlzdHMsIG90aGVyd2lzZSB0aGV5IGFyZSB0cmVhdGVkIGFzIGEgc2NhbGFycy4gSW4KICAgIGVpdGhlciBjYXNlLCBlaXRoZXIgYHhgLCBgeWAsIGFuZCBgemAgb3IgdGhlaXIgZWxlbWVudHMgbXVzdCBzdXBwb3J0CiAgICBtdWx0aXBsaWNhdGlvbiBhbmQgYWRkaXRpb24gYm90aCB3aXRoIHRoZW1zZWx2ZXMgYW5kIHdpdGggdGhlIGVsZW1lbnRzCiAgICBvZiBgY2AuCgogICAgSWYgYGNgIGhhcyBmZXdlciB0aGFuIHRocmVlIGRpbWVuc2lvbnMsIG9uZXMgYXJlIGltcGxpY2l0bHkgYXBwZW5kZWQgdG8KICAgIGl0cyBzaGFwZSB0byBtYWtlIGl0IDMtRC4gVGhlIHNoYXBlIG9mIHRoZSByZXN1bHQgd2lsbCBiZSBjLnNoYXBlWzM6XSArCiAgICB4LnNoYXBlICsgeS5zaGFwZSArIHouc2hhcGUuCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgeCwgeSwgeiA6IGFycmF5X2xpa2UsIGNvbXBhdGlibGUgb2JqZWN0cwogICAgICAgIFRoZSB0aHJlZSBkaW1lbnNpb25hbCBzZXJpZXMgaXMgZXZhbHVhdGVkIGF0IHRoZSBwb2ludHMgaW4gdGhlCiAgICAgICAgQ2FydGVzaWFuIHByb2R1Y3Qgb2YgYHhgLCBgeWAsIGFuZCBgemAuICBJZiBgeGAsYHlgLCBvciBgemAgaXMgYQogICAgICAgIGxpc3Qgb3IgdHVwbGUsIGl0IGlzIGZpcnN0IGNvbnZlcnRlZCB0byBhbiBuZGFycmF5LCBvdGhlcndpc2UgaXQg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bmcgYW5kIGZvciB0aGUgZXZhbHVhdGlvbiBvZiBhIGxhcmdlCiAgICBudW1iZXIgb2YgSGVybWl0ZUUgc2VyaWVzIG9mIHRoZSBzYW1lIGRlZ3JlZSBhbmQgc2FtcGxlIHBvaW50cy4KCiAgICBQYXJhbWV0ZXJzCiAgICAtLS0tLS0tLS0tCiAgICB4IDogYXJyYXlfbGlrZQogICAgICAgIEFycmF5IG9mIHBvaW50cy4gVGhlIGR0eXBlIGlzIGNvbnZlcnRlZCB0byBmbG9hdDY0IG9yIGNvbXBsZXgxMjgKICAgICAgICBkZXBlbmRpbmcgb24gd2hldGhlciBhbnkgb2YgdGhlIGVsZW1lbnRzIGFyZSBjb21wbGV4LiBJZiBgeGAgaXMKICAgICAgICBzY2FsYXIgaXQgaXMgY29udmVydGVkIHRvIGEgMS1EIGFycmF5LgogICAgZGVnIDogaW50CiAgICAgICAgRGVncmVlIG9mIHRoZSByZXN1bHRpbmcgbWF0cml4LgoKICAgIFJldHVybnMKICAgIC0tLS0tLS0KICAgIHZhbmRlciA6IG5kYXJyYXkKICAgICAgICBUaGUgcHNldWRvLVZhbmRlcm1vbmRlIG1hdHJpeC4gVGhlIHNoYXBlIG9mIHRoZSByZXR1cm5lZCBtYXRyaXggaXMKICAgICAgICBgYHguc2hhcGUgKyAoZGVnICsgMSwpYGAsIHdoZXJlIFRoZSBsYXN0IGluZGV4IGlzIHRoZSBkZWdyZWUgb2YgdGhlCiAgICAgICAgY29ycmVzcG9uZGluZyBIZXJtaXRlRSBwb2x5bm9taWFsLiAgVGhlIGR0eXBlIHdpbGwgYmUgdGhlIHNhbWUgYXMKICAgICAgICB0aGUgY29udmVydGVkIGB4YC4KCiAgICBFeGFtcGxlcwogICAgLS0tLS0tLS0KICAgID4+PiBmcm9tIG51bXB5LnBvbHlub21pYWwuaGVybWl0ZV9lIGltcG9ydCBoZXJtZXZhbmRlcgogICAgPj4+IHggPSBucC5hcnJheShbLTEsIDAsIDFdKQogICAgPj4+IGhlcm1ldmFuZGVyKHgsIDMpCiAgICBhcnJheShbWyAxLiwgLTEuLCAgMC4sICAyLl0sCiAgICAgICAgICAgWyAxLiwgIDAuLCAtMS4sIC0wLl0sCiAgICAgICAgICAgWyAxLiwgIDEuLCAgMC4sIC0yLl1dKQoKICAgIHItAAAAcgIAAAB6GGRlZyBtdXN0IGJlIG5vbi1uZWdhdGl2ZUZyBAAAACkCcmAAAAByXwAAAOcAAAAAAAAAAHJOAAAAcjYAAAByJwAAACkKcigAAAByZgAAAHJnAAAAcj8AAAByQAAAAHJqAAAAck8AAAByUAAAAHIrAAAAcmkAAAApB3J9AAAAci0AAADaBGlkZWfaBGRpbXPaBGR0eXDaAXZyLwAAAHMHAAAAICAgICAgIHIwAAAAchgAAAByGAAAAEsEAABz9wAAAIAA9VgBAAwO1AsfoAOgVdELK9QLK4BE2AcLiGGCeIB43Q4Y0Bkz0Q401A400Ag05QgKjAiQEZgVoGHQCCjRCCjUCCioM9EILoBB2AwQkDGJSIg7mBGcF9ELIIBE2AsMjDeARN0ICowIkBSYVNAIItEIItQIIoBB2AsMiFGJM5ARiTeAQYBhgUTYBwuIYYJ4gHjYDxCIAYghiQTdERaQcZgkoBGZKNERI9QRI/AAAQkv8AABCS+IQdgUFZBhmAGRY5RGmDGRSJhxoBGgMaETnHagcagxoXWZftEULYhBiGGJRIhE3QsNjDuQcZghmFLRCyDUCyDQBCByMQAAAGMDAAAAAAAAAAAAAAAFAAAAAwAAAPNKAAAAlwB0AQAAAAAAAAAAAABqAQAAAAAAAAAAdAQAAAAAAAAAAAAAdAQAAAAAAAAAAAAAZgJ8AHwBZgJ8AqYDAACrAwAAAAAAAAAAUwApAWGaBgAAUHNldWRvLVZhbmRlcm1vbmRlIG1hdHJpeCBvZiBnaXZlbiBkZWdyZWVzLgoKICAgIFJldHVybnMgdGhlIHBzZXVkby1WYW5kZXJtb25kZSBtYXRyaXggb2YgZGVncmVlcyBgZGVnYCBhbmQgc2FtcGxlCiAgICBwb2ludHMgYCh4LCB5KWAuIFRoZSBwc2V1ZG8tVmFuZGVybW9uZGUgbWF0cml4IGlzIGRlZmluZWQgYnkKCiAgICAuLiBtYXRoOjogVlsuLi4sIChkZWdbMV0gKyAxKSppICsgal0gPSBIZV9pKHgpICogSGVfaih5KSwKCiAgICB3aGVyZSBgMCA8PSBpIDw9IGRlZ1swXWAgYW5kIGAwIDw9IGogPD0gZGVnWzFdYC4gVGhlIGxlYWRpbmcgaW5kaWNlcyBvZgogICAgYFZgIGluZGV4IHRoZSBwb2ludHMgYCh4LCB5KWAgYW5kIHRoZSBsYXN0IGluZGV4IGVuY29kZXMgdGhlIGRlZ3JlZXMgb2YKICAgIHRoZSBIZXJtaXRlRSBwb2x5bm9taWFscy4KCiAgICBJZiBgYFYgPSBoZXJtZXZhbmRlcjJkKHgsIHksIFt4ZGVnLCB5ZGVnXSlgYCwgdGhlbiB0aGUgY29sdW1ucyBvZiBgVmAKICAgIGNvcnJlc3BvbmQgdG8gdGhlIGVsZW1lbnRzIG9mIGEgMi1EIGNvZWZmaWNpZW50IGFycmF5IGBjYCBvZiBzaGFwZQogICAgKHhkZWcgKyAxLCB5ZGVnICsgMSkgaW4gdGhlIG9yZGVyCgogICAgLi4gbWF0aDo6IGNfezAwfSwgY197MDF9LCBjX3swMn0gLi4uICwgY197MTB9LCBjX3sxMX0sIGNfezEyfSAuLi4KCiAgICBhbmQgYGBucC5kb3QoViwgYy5mbGF0KWBgIGFuZCBgYGhlcm1ldmFsMmQoeCwgeSwgYylgYCB3aWxsIGJlIHRoZSBzYW1lCiAgICB1cCB0byByb3VuZG9mZi4gVGhpcyBlcXVpdmFsZW5jZSBpcyB1c2VmdWwgYm90aCBmb3IgbGVhc3Qgc3F1YXJlcwogICAgZml0dGluZyBhbmQgZm9yIHRoZSBldmFsdWF0aW9uIG9mIGEgbGFyZ2UgbnVtYmVyIG9mIDItRCBIZXJtaXRlRQogICAgc2VyaWVzIG9mIHRoZSBzYW1lIGRlZ3JlZXMgYW5kIHNhbXBsZSBwb2ludHMuCgogICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgeCwgeSA6IGFycmF5X2xpa2UKICAgICAgICBBcnJheXMgb2YgcG9pbnQgY29vcmRpbmF0ZXMsIGFsbCBvZiB0aGUgc2FtZSBzaGFwZS4gVGhlIGR0eXBlcwogICAgICAgIHdpbGwgYmUgY29udmVydGVkIHRvIGVpdGhlciBmbG9hdDY0IG9yIGNvbXBsZXgxMjggZGVwZW5kaW5nIG9uCiAgICAgICAgd2hldGhlciBhbnkgb2YgdGhlIGVsZW1lbnRzIGFyZSBjb21wbGV4LiBTY2FsYXJzIGFyZSBjb252ZXJ0ZWQgdG8KICAgICAgICAxLUQgYXJyYXlzLgogICAgZGVnIDogbGlzdCBvZiBpbnRzCiAgICAgICAgTGlzdCBvZiBtYXhpbXVtIGRlZ3JlZXMgb2YgdGhlIGZvcm0gW3hfZGVnLCB5X2RlZ10uCgogICAgUmV0dXJucwogICAgLS0tLS0tLQogICAgdmFuZGVyMmQgOiBuZGFycmF5CiAgICAgICAgVGhlIHNoYXBlIG9mIHRoZSByZXR1cm5lZCBtYXRyaXggaXMgYGB4LnNoYXBlICsgKG9yZGVyLClgYCwgd2hlcmUKICAgICAgICA6bWF0aDpgb3JkZXIgPSAoZGVnWzBdKzEpKihkZWdbMV0rMSlgLiAgVGhlIGR0eXBlIHdpbGwgYmUgdGhlIHNhbWUKICAgICAgICBhcyB0aGUgY29udmVydGVkIGB4YCBhbmQgYHlgLgoKICAgIFNlZSBBbHNvCiAgICAtLS0tLS0tLQogICAgaGVybWV2YW5kZXIsIGhlcm1ldmFuZGVyM2QsIGhlcm1ldmFsMmQsIGhlcm1ldmFsM2QKCiAgICBOb3RlcwogICAgLS0tLS0KCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjcuMAoKICAgIKkDcigAAADaD192YW5kZXJfbmRfZmxhdHIYAAAAKQNyfQAAAHKDAAAAci0AAABzAwAAACAgIHIwAAAAciEAAAByIQAAAIcEAABzIwAAAIAA9WQBAAwO1AsdnXutS9AeOLgxuGG4JsAj0QtG1AtG0ARGcjEAAABjBAAAAAAAAAAAAAAABgAAAAMAAADzWAAAAJcAdAEAAAAAAAAAAAAAagEAAAAAAAAAAHQEAAAAAAAAAAAAAHQEAAAAAAAAAAAAAHQEAAAAAAAAAAAAAGYDfAB8AXwCZgN8A6YDAACrAwAAAAAAAAAAUwApAWEmBwAAUHNldWRvLVZhbmRlcm1vbmRlIG1hdHJpeCBvZiBnaXZlbiBkZWdyZWVzLgoKICAgIFJldHVybnMgdGhlIHBzZXVkby1WYW5kZXJtb25kZSBtYXRyaXggb2YgZGVncmVlcyBgZGVnYCBhbmQgc2FtcGxlCiAgICBwb2ludHMgYCh4LCB5LCB6KWAuIElmIGBsLCBtLCBuYCBhcmUgdGhlIGdpdmVuIGRlZ3JlZXMgaW4gYHgsIHksIHpgLAogICAgdGhlbiBIZWhlIHBzZXVkby1WYW5kZXJtb25kZSBtYXRyaXggaXMgZGVmaW5lZCBieQoKICAgIC4uIG1hdGg6OiBWWy4uLiwgKG0rMSkobisxKWkgKyAobisxKWogKyBrXSA9IEhlX2koeCkqSGVfaih5KSpIZV9rKHopLAoKICAgIHdoZXJlIGAwIDw9IGkgPD0gbGAsIGAwIDw9IGogPD0gbWAsIGFuZCBgMCA8PSBqIDw9IG5gLiAgVGhlIGxlYWRpbmcKICAgIGluZGljZXMgb2YgYFZgIGluZGV4IHRoZSBwb2ludHMgYCh4LCB5LCB6KWAgYW5kIHRoZSBsYXN0IGluZGV4IGVuY29kZXMKICAgIHRoZSBkZWdyZWVzIG9mIHRoZSBIZXJtaXRlRSBwb2x5bm9taWFscy4KCiAgICBJZiBgYFYgPSBoZXJtZXZhbmRlcjNkKHgsIHksIHosIFt4ZGVnLCB5ZGVnLCB6ZGVnXSlgYCwgdGhlbiB0aGUgY29sdW1ucwogICAgb2YgYFZgIGNvcnJlc3BvbmQgdG8gdGhlIGVsZW1lbnRzIG9mIGEgMy1EIGNvZWZmaWNpZW50IGFycmF5IGBjYCBvZgogICAgc2hhcGUgKHhkZWcgKyAxLCB5ZGVnICsgMSwgemRlZyArIDEpIGluIHRoZSBvcmRlcgoKICAgIC4uIG1hdGg6OiBjX3swMDB9LCBjX3swMDF9LCBjX3swMDJ9LC4uLiAsIGNfezAxMH0sIGNfezAxMX0sIGNfezAxMn0sLi4uCgogICAgYW5kICBgYG5wLmRvdChWLCBjLmZsYXQpYGAgYW5kIGBgaGVybWV2YWwzZCh4LCB5LCB6LCBjKWBgIHdpbGwgYmUgdGhlCiAgICBzYW1lIHVwIHRvIHJvdW5kb2ZmLiBUaGlzIGVxdWl2YWxlbmNlIGlzIHVzZWZ1bCBib3RoIGZvciBsZWFzdCBzcXVhcmVzCiAgICBmaXR0aW5nIGFuZCBmb3IgdGhlIGV2YWx1YXRpb24gb2YgYSBsYXJnZSBudW1iZXIgb2YgMy1EIEhlcm1pdGVFCiAgICBzZXJpZXMgb2YgdGhlIHNhbWUgZGVncmVlcyBhbmQgc2FtcGxlIHBvaW50cy4K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Y29vcmRpbmF0ZXMgY2FuIGJlIGZpdHRlZCBhdCBvbmNlIGJ5CiAgICAgICAgcGFzc2luZyBpbiBhIDJELWFycmF5IHRoYXQgY29udGFpbnMgb25lIGRhdGFzZXQgcGVyIGNvbHVtbi4KICAgIGRlZyA6IGludCBvciAxLUQgYXJyYXlfbGlrZQogICAgICAgIERlZ3JlZShzKSBvZiB0aGUgZml0dGluZyBwb2x5bm9taWFscy4gSWYgYGRlZ2AgaXMgYSBzaW5nbGUgaW50ZWdlcgogICAgICAgIGFsbCB0ZXJtcyB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZSBgZGVnYCd0aCB0ZXJtIGFyZSBpbmNsdWRlZCBpbiB0aGUKICAgICAgICBmaXQuIEZvciBOdW1QeSB2ZXJzaW9ucyA+PSAxLjExLjAgYSBsaXN0IG9mIGludGVnZXJzIHNwZWNpZnlpbmcgdGhlCiAgICAgICAgZGVncmVlcyBvZiB0aGUgdGVybXMgdG8gaW5jbHVkZSBtYXkgYmUgdXNlZCBpbnN0ZWFkLgogICAgcmNvbmQgOiBmbG9hdCwgb3B0aW9uYWwKICAgICAgICBSZWxhdGl2ZSBjb25kaXRpb24gbnVtYmVyIG9mIHRoZSBmaXQuIFNpbmd1bGFyIHZhbHVlcyBzbWFsbGVyIHRoYW4KICAgICAgICB0aGlzIHJlbGF0aXZlIHRvIHRoZSBsYXJnZXN0IHNpbmd1bGFyIHZhbHVlIHdpbGwgYmUgaWdub3JlZC4gVGhlCiAgICAgICAgZGVmYXVsdCB2YWx1ZSBpcyBsZW4oeCkqZXBzLCB3aGVyZSBlcHMgaXMgdGhlIHJlbGF0aXZlIHByZWNpc2lvbiBvZgogICAgICAgIHRoZSBmbG9hdCB0eXBlLCBhYm91dCAyZS0xNiBpbiBtb3N0IGNhc2VzLgogICAgZnVsbCA6IGJvb2wsIG9wdGlvbmFsCiAgICAgICAgU3dpdGNoIGRldGVybWluaW5nIG5hdHVyZSBvZiByZXR1cm4gdmFsdWUuIFdoZW4gaXQgaXMgRmFsc2UgKHRoZQogICAgICAgIGRlZmF1bHQpIGp1c3QgdGhlIGNvZWZmaWNpZW50cyBhcmUgcmV0dXJuZWQsIHdoZW4gVHJ1ZSBkaWFnbm9zdGljCiAgICAgICAgaW5mb3JtYXRpb24gZnJvbSB0aGUgc2luZ3VsYXIgdmFsdWUgZGVjb21wb3NpdGlvbiBpcyBhbHNvIHJldHVybmVkLgogICAgdyA6IGFycmF5X2xpa2UsIHNoYXBlIChgTWAsKSwgb3B0aW9uYWwKICAgICAgICBXZWlnaHRzLiBJZiBub3QgTm9uZSwgdGhlIHdlaWdodCBgYHdbaV1gYCBhcHBsaWVzIHRvIHRoZSB1bnNxdWFyZWQKICAgICAgICByZXNpZHVhbCBgYHlbaV0gLSB5X2hhdFtpXWBgIGF0IGBgeFtpXWBgLiBJZGVhbGx5IHRoZSB3ZWlnaHRzIGFyZQogICAgICAgIGNob3NlbiBzbyB0aGF0IHRoZSBlcnJvcnMgb2YgdGhlIHByb2R1Y3RzIGBgd1tpXSp5W2ldYGAgYWxsIGhhdmUgdGhlCiAgICAgICAgc2FtZSB2YXJpYW5jZS4gIFdoZW4gdXNpbmcgaW52ZXJzZS12YXJpYW5jZSB3ZWlnaHRpbmcsIHVzZQogICAgICAgIGBgd1tpXSA9IDEvc2lnbWEoeVtpXSlgYC4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIE5vbmUuCgogICAgUmV0dXJucwogICAgLS0tLS0tLQogICAgY29lZiA6IG5kYXJyYXksIHNoYXBlIChNLCkgb3IgKE0sIEspCiAgICAgICAgSGVybWl0ZSBjb2VmZmljaWVudHMgb3JkZXJlZCBmcm9tIGxvdyB0byBoaWdoLiBJZiBgeWAgd2FzIDItRCwKICAgICAgICB0aGUgY29lZmZpY2llbnRzIGZvciB0aGUgZGF0YSBpbiBjb2x1bW4gayAgb2YgYHlgIGFyZSBpbiBjb2x1bW4KICAgICAgICBga2AuCgogICAgW3Jlc2lkdWFscywgcmFuaywgc2luZ3VsYXJfdmFsdWVzLCByY29uZF0gOiBsaXN0CiAgICAgICAgVGhlc2UgdmFsdWVzIGFyZSBvbmx5IHJldHVybmVkIGlmIGBgZnVsbCA9PSBUcnVlYGAKCiAgICAgICAgLSByZXNpZHVhbHMgLS0gc3VtIG9mIHNxdWFyZWQgcmVzaWR1YWxzIG9mIHRoZSBsZWFzdCBzcXVhcmVzIGZpdAogICAgICAgIC0gcmFuayAtLSB0aGUgbnVtZXJpY2FsIHJhbmsgb2YgdGhlIHNjYWxlZCBWYW5kZXJtb25kZSBtYXRyaXgKICAgICAgICAtIHNpbmd1bGFyX3ZhbHVlcyAtLSBzaW5ndWxhciB2YWx1ZXMgb2YgdGhlIHNjYWxlZCBWYW5kZXJtb25kZSBtYXRyaXgKICAgICAgICAtIHJjb25kIC0tIHZhbHVlIG9mIGByY29uZGAuCgogICAgICAgIEZvciBtb3JlIGRldGFpbHMsIHNlZSBgbnVtcHkubGluYWxnLmxzdHNxYC4KCiAgICBXYXJucwogICAgLS0tLS0KICAgIFJhbmtXYXJuaW5nCiAgICAgICAgVGhlIHJhbmsgb2YgdGhlIGNvZWZmaWNpZW50IG1hdHJpeCBpbiB0aGUgbGVhc3Qtc3F1YXJlcyBmaXQgaXMKICAgICAgICBkZWZpY2llbnQuIFRoZSB3YXJuaW5nIGlzIG9ubHkgcmFpc2VkIGlmIGBgZnVsbCA9IEZhbHNlYGAuICBUaGUKICAgICAgICB3YXJuaW5ncyBjYW4gYmUgdHVybmVkIG9mZiBieQoKICAgICAgICA+Pj4gaW1wb3J0IHdhcm5pbmdzCiAgICAgICAgPj4+IHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgbnAuUmFua1dhcm5pbmcpCgogICAgU2VlIEFsc28KICAgIC0tLS0tLS0tCiAgICBudW1weS5wb2x5bm9taWFsLmNoZWJ5c2hldi5jaGViZml0CiAgICBudW1weS5wb2x5bm9taWFsLmxlZ2VuZHJlLmxlZ2ZpdAogICAgbnVtcHkucG9seW5vbWlhbC5wb2x5bm9taWFsLnBvbHlmaXQKICAgIG51bXB5LnBvbHlub21pYWwuaGVybWl0ZS5oZXJtZml0CiAgICBudW1weS5wb2x5bm9taWFsLmxhZ3VlcnJlLmxhZ2ZpdAogICAgaGVybWV2YWwgOiBFdmFsdWF0ZXMgYSBIZXJtaXRlIHNlcmllcy4KICAgIGhlcm1ldmFuZGVyIDogcHNldWRvIFZhbmRlcm1vbmRlIG1hdHJpeCBvZiBIZXJtaXRlIHNlcmllcy4KICAgIGhlcm1ld2VpZ2h0IDogSGVybWl0ZUUgd2VpZ2h0IGZ1bmN0aW9uLgogICAgbnVtcHkubGluYWxnLmxzdHNxIDogQ29tcHV0ZXMgYSBsZWFzdC1zcXVhcmVzIGZpdCBmcm9tIHRoZSBtYXRyaXguCiAgICBzY2lweS5pbnRlcnBvbGF0ZS5Vbml2YXJpYXRlU3BsaW5lIDogQ29tcHV0ZXMgc3BsaW5lIGZpdHMuCgogICAgTm90ZXMKICAgIC0tLS0tCiAgICBUaGUgc29sdXRpb24gaXMgdGhlIGNvZWZmaWNpZW50cyBvZiB0aGUgSGVybWl0ZUUgc2VyaWVzIGBwYCB0aGF0CiAgICBtaW5pbWl6ZXMgdGhlIHN1bSBvZiB0aGUgd2VpZ2h0ZWQgc3F1YXJlZCBlcnJvcnMKCiAgICAuLiBtYXRoOjogRSA9IFxzdW1faiB3X2peMiAqIHx5X2ogLSBwKHhfail8XjIsCgogICAgd2hlcmUgdGhlIDptYXRoOmB3X2pgIGFyZSB0aGUgd2VpZ2h0cy4gVGhpcyBwcm9ibGVtIGlzIHNvbHZlZCBieQogICAgc2V0dGluZyB1cCB0aGUgKHR5cGljYWxseSkgb3ZlcmRldGVybWluZWQgbWF0cml4IGVxdWF0aW9uCgogICAgLi4gbWF0aDo6IFYoeCkgKiBjID0gdyAqIHksCgogICAgd2hlcmUgYFZgIGlzIHRoZSBwc2V1ZG8gVmFuZGVybW9uZGUgbWF0cml4IG9mIGB4YCwgdGhlIGVsZW1lbnRzIG9mIGBjYAogICAgYXJlIHRoZSBjb2VmZmljaWVudHMgdG8gYmUgc29sdmVkIGZvciwgYW5kIHRoZSBlbGVtZW50cyBvZiBgeWAgYXJlIHRoZQogICAgb2JzZXJ2ZWQgdmFsdWVzLiAgVGhpcyBlcXVhdGlvbiBpcyB0aGVuIHNvbHZlZCB1c2luZyB0aGUgc2luZ3VsYXIgdmFsdWUKICAgIGRlY29tcG9zaXRpb24gb2YgYFZgLgoKICAgIElmIHNvbWUgb2YgdGhlIHNpbmd1bGFyIHZhbHVlcyBvZiBgVmAgYXJlIHNvIHNtYWxsIHRoYXQgdGhleSBhcmUKICAgIG5lZ2xlY3RlZCwgdGhlbiBhIGBSYW5rV2FybmluZ2Agd2lsbCBiZSBpc3N1ZWQuIFRoaXMgbWVhbnMgdGhhdCB0aGUKICAgIGNvZWZmaWNpZW50IHZhbHVlcyBtYXkgYmUgcG9vcmx5IGRldGVybWluZWQuIFVzaW5nIGEgbG93ZXIgb3JkZXIgZml0CiAgICB3aWxsIHVzdWFsbHkgZ2V0IHJpZCBvZiB0aGUgd2FybmluZy4gIFRoZSBgcmNvbmRgIHBhcmFtZXRlciBjYW4gYWxzbyBiZQogICAgc2V0IHRvIGEgdmFsdWUgc21hbGxlciB0aGFuIGl0cyBkZWZhdWx0LCBidXQgdGhlIHJlc3VsdGluZyBmaXQgbWF5IGJlCiAgICBzcHVyaW91cyBhbmQgaGF2ZSBsYXJnZSBjb250cmlidXRpb25zIGZyb20gcm91bmRvZmYgZXJyb3IuCgogICAgRml0cyB1c2luZyBIZXJtaXRlRSBzZXJpZXMgYXJlIHByb2JhYmx5IG1vc3QgdXNlZnVsIHdoZW4gdGhlIGRhdGEgY2FuCiAgICBiZSBhcHByb3hpbWF0ZWQgYnkgYGBzcXJ0KHcoeCkpICogcCh4KWBgLCB3aGVyZSBgdyh4KWAgaXMgdGhlIEhlcm1pdGVFCiAgICB3ZWlnaHQuIEluIHRoYXQgY2FzZSB0aGUgd2VpZ2h0IGBgc3FydCh3KHhbaV0pKWBgIHNob3VsZCBiZSB1c2VkCiAgICB0b2dldGhlciB3aXRoIGRhdGEgdmFsdWVzIGBgeVtpXS9zcXJ0KHcoeFtpXSkpYGAuIFRoZSB3ZWlnaHQgZnVuY3Rpb24gaXMKICAgIGF2YWlsYWJsZSBhcyBgaGVybWV3ZWlnaHRgLgoKICAgIFJlZmVyZW5jZXMKICAgIC0tLS0tLS0tLS0KICAgIC4uIFsxXSBXaWtpcGVkaWEsICJDdXJ2ZSBmaXR0aW5nIiwKICAgICAgICAgICBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DdXJ2ZV9maXR0aW5nCgogICAgRXhhbXBsZXMKICAgIC0tLS0tLS0tCiAgICA+Pj4gZnJvbSBudW1weS5wb2x5bm9taWFsLmhlcm1pdGVfZSBpbXBvcnQgaGVybWVmaXQsIGhlcm1ldmFsCiAgICA+Pj4geCA9IG5wLmxpbnNwYWNlKC0xMCwgMTApCiAgICA+Pj4gbnAucmFuZG9tLnNlZWQoMTIzKQogICAgPj4+IGVyciA9IG5wLnJhbmRv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bmlvbgogICAgbWF0cml4LCBSb290cyBmYXIgZnJvbSB0aGUgb3JpZ2luIG9mIHRoZSBjb21wbGV4IHBsYW5lIG1heSBoYXZlIGxhcmdlCiAgICBlcnJvcnMgZHVlIHRvIHRoZSBudW1lcmljYWwgaW5zdGFiaWxpdHkgb2YgdGhlIHNlcmllcyBmb3Igc3VjaAogICAgdmFsdWVzLiBSb290cyB3aXRoIG11bHRpcGxpY2l0eSBncmVhdGVyIHRoYW4gMSB3aWxsIGFsc28gc2hvdyBsYXJnZXIKICAgIGVycm9ycyBhcyB0aGUgdmFsdWUgb2YgdGhlIHNlcmllcyBuZWFyIHN1Y2ggcG9pbnRzIGlzIHJlbGF0aXZlbHkKICAgIGluc2Vuc2l0aXZlIHRvIGVycm9ycyBpbiB0aGUgcm9vdHMuIElzb2xhdGVkIHJvb3RzIG5lYXIgdGhlIG9yaWdpbiBjYW4KICAgIGJlIGltcHJvdmVkIGJ5IGEgZmV3IGl0ZXJhdGlvbnMgb2YgTmV3dG9uJ3MgbWV0aG9kLgoKICAgIFRoZSBIZXJtaXRlRSBzZXJpZXMgYmFzaXMgcG9seW5vbWlhbHMgYXJlbid0IHBvd2VycyBvZiBgeGAgc28gdGhlCiAgICByZXN1bHRzIG9mIHRoaXMgZnVuY3Rpb24gbWF5IHNlZW0gdW5pbnR1aXRpdmUuCgogICAgRXhhbXBsZXMKICAgIC0tLS0tLS0tCiAgICA+Pj4gZnJvbSBudW1weS5wb2x5bm9taWFsLmhlcm1pdGVfZSBpbXBvcnQgaGVybWVyb290cywgaGVybWVmcm9tcm9vdHMKICAgID4+PiBjb2VmID0gaGVybWVmcm9tcm9vdHMoWy0xLCAwLCAxXSkKICAgID4+PiBjb2VmCiAgICBhcnJheShbMC4sIDIuLCAwLiwgMS5dKQogICAgPj4+IGhlcm1lcm9vdHMoY29lZikKICAgIGFycmF5KFstMS4sICAwLiwgIDEuXSkgIyBtYXkgdmFyeQoKICAgIHIEAAAAck4AAAByNgAAAHICAAAATnInAAAAKQpyKAAAAHIpAAAAcioAAAByPwAAAHJAAAAAck8AAAByIwAAANoCbGHaB2VpZ3ZhbHPaBHNvcnQpA3I5AAAAcmsAAADaAXJzAwAAACAgIHIw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ICAgUGFyYW1ldGVycwogICAgLS0tLS0tLS0tLQogICAgY29lZiA6IGFycmF5X2xpa2UKICAgICAgICBIZXJtaXRlRSBjb2VmZmljaWVudHMgaW4gb3JkZXIgb2YgaW5jcmVhc2luZyBkZWdyZWUsIGkuZSwKICAgICAgICBgYCgxLCAyLCAzKWBgIGdpdmVzIGBgMSpIZV8wKHgpICsgMipIZV8xKFgpICsgMypIZV8yKHgpYGAuCiAgICBkb21haW4gOiAoMiwpIGFycmF5X2xpa2UsIG9wdGlvbmFsCiAgICAgICAgRG9tYWluIHRvIHVzZS4gVGhlIGludGVydmFsIGBgW2RvbWFpblswXSwgZG9tYWluWzFdXWBgIGlzIG1hcHBlZAogICAgICAgIHRvIHRoZSBpbnRlcnZhbCBgYFt3aW5kb3dbMF0sIHdpbmRvd1sxXV1gYCBieSBzaGlmdGluZyBhbmQgc2NhbGluZy4KICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBbLTEsIDFdLgogICAgd2luZG93IDogKDIsKSBhcnJheV9saWtlLCBvcHRpb25hbAogICAgICAgIFdpbmRvdywgc2VlIGBkb21haW5gIGZvciBpdHMgdXNlLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBbLTEsIDFdLgoKICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjYuMAogICAgc3ltYm9sIDogc3RyLCBvcHRpb25hbAogICAgICAgIFN5bWJvbCB1c2VkIHRvIHJlcHJlc2VudCB0aGUgaW5kZXBlbmRlbnQgdmFyaWFibGUgaW4gc3RyaW5nCiAgICAgICAgcmVwcmVzZW50YXRpb25zIG9mIHRoZSBwb2x5bm9taWFsIGV4cHJlc3Npb24sIGUuZy4gZm9yIHByaW50aW5nLgogICAgICAgIFRoZSBzeW1ib2wgbXVzdCBiZSBhIHZhbGlkIFB5dGhvbiBpZGVudGlmaWVyLiBEZWZhdWx0IHZhbHVlIGlzICd4Jy4KCiAgICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMS4yNAoKICAgINoCSGVOKSPaCF9fbmFtZV9f2gpfX21vZHVsZV9f2gxfX3F1YWxuYW1lX1/aB19fZG9jX1/aDHN0YXRpY21ldGhv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
Base64 mode: content will be decoded on save.
Save
Close
Exit & Reset
Directory Contents
Dirs: 0 × Files: 10
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
chebyshev.cpython-311.pyc
72.84 KB
lrw-r--r--
2026-02-06 08:07:28
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
hermite.cpython-311.pyc
60.65 KB
lrw-r--r--
2026-02-06 08:07:28
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
hermite_e.cpython-311.pyc
60.42 KB
lrw-r--r--
2026-02-06 08:07:28
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
laguerre.cpython-311.pyc
58.41 KB
lrw-r--r--
2026-02-06 08:07:28
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
legendre.cpython-311.pyc
59.03 KB
lrw-r--r--
2026-02-06 08:07:28
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
polynomial.cpython-311.pyc
55.05 KB
lrw-r--r--
2026-02-06 08:07:28
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
polyutils.cpython-311.pyc
32.05 KB
lrw-r--r--
2026-02-06 08:07:28
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
setup.cpython-311.pyc
873 B
lrw-r--r--
2026-01-20 13:01:48
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
_polybase.cpython-311.pyc
48.85 KB
lrw-r--r--
2026-02-06 08:07:28
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-311.pyc
7.02 KB
lrw-r--r--
2026-02-06 08:07:28
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
Zip Selected
If ZipArchive is unavailable, a
.tar
will be created (no compression).