]> ## crowdsec-unraid-bouncer ### 2026.07.14.1 - Fix settings and service/firewall actions on Unraid 7.3.1 by explicitly including the native WebGUI CSRF token in every POST form. ### 2026.06.19.2 - Add optional CrowdSec Threat Map drops export. The plugin can add rate-limited netfilter LOG rules before CrowdSec DROP rules, collect matching kernel log lines, and write a capped JSONL file for the Threat Map drops panel. - Add WebUI settings for drops export path, prefix, rate limit, burst, and retention. ### 2026.06.19.1 - Merge the installed recovery-notification and WebUI save fixes into the shared Unraid Community Apps source. - Point the plugin update URL and support link to the shared Unraid Community Apps repository. - Restore the persistent ipset package bootstrap used by the shared template. ### 2026.05.11.12 - Start the daemon in a detached session so restarts from WebUI or maintenance shells do not leave a stale stopped pid. ### 2026.05.11.11 - Fix WebUI configuration saves and show action output directly on the settings page. - Keep the existing bouncer API key when the WebUI key field is left empty. ### 2026.05.11.10 - Notify when health recovers after a failed bouncer health check. ### 2026.05.11.8 - Add periodic full stream sync to self-heal missed LAPI deltas. ### 2026.05.11.7 - Avoid noisy ipset create messages on existing sets. ### 2026.05.11.6 - Load Global shield through a temporary ipset and swap it into place. - Quietly ignore IPv6 stream decisions until an IPv6 backend is added. ### 2026.05.11.5 - Clean direct DROP rules when the ipset backend is active. - Increase ipset max entries for Global shield. ### 2026.05.11.4 - Use batched ipset restore for large Global shield updates. ### 2026.05.11.3 - Add v3 protection modes: Essential shield, Global shield, and Custom origins. - Add firewall backend selector: auto, iptables direct, ipset. - Add ipset backend support with a clean refusal when ipset is unavailable. ### 2026.05.11.2 - Switch to real CrowdSec Local API bouncer stream mode. - Add LAPI URL/API key/origin filters in the Unraid web UI. - Add safety guard for direct iptables rule count. ### 2026.05.11 - Initial release. - Sync CrowdSec IP decisions into an Unraid-safe iptables chain. - Protect both host INPUT traffic and Docker-published ports through DOCKER-USER. /dev/null 2>&1; then mkdir -p "${BOOT_DIR}/packages" IPSET_PKG="${BOOT_DIR}/packages/ipset-7.15-x86_64-1.txz" IPSET_URL="https://raw.githubusercontent.com/Railline/unraid-community-apps/main/packages/ipset-7.15-x86_64-1.txz" IPSET_MD5="93508b1dd170d56d71b41116359a45ff" if [ ! -f "$IPSET_PKG" ]; then if command -v curl >/dev/null 2>&1; then curl -fsSL "$IPSET_URL" -o "$IPSET_PKG" elif command -v wget >/dev/null 2>&1; then wget -qO "$IPSET_PKG" "$IPSET_URL" else echo "ipset is missing and neither curl nor wget is available" >&2 exit 1 fi fi if [ "$(md5sum "$IPSET_PKG" | awk '{print $1}')" != "$IPSET_MD5" ]; then echo "ipset package checksum mismatch: $IPSET_PKG" >&2 exit 1 fi installpkg "$IPSET_PKG" fi base64 -d > /usr/local/sbin/crowdsec-unraid-bouncer <<'B64_BIN' IyEvYmluL2Jhc2gKc2V0IC1ldW8gcGlwZWZhaWwKClBMVUdJTl9OQU1FPSJjcm93ZHNlYy11bnJh aWQtYm91bmNlciIKQ09ORklHX0RJUj0iL2Jvb3QvY29uZmlnL3BsdWdpbnMvJHtQTFVHSU5fTkFN RX0iCkNPTkZJR19GSUxFPSIke0NPTkZJR19ESVJ9L2NvbmZpZy5jZmciCkxPR19GSUxFPSIvdmFy L2xvZy8ke1BMVUdJTl9OQU1FfS5sb2ciClJVTl9ESVI9Ii92YXIvcnVuLyR7UExVR0lOX05BTUV9 IgpQSURfRklMRT0iJHtSVU5fRElSfS8ke1BMVUdJTl9OQU1FfS5waWQiCkxPQ0tfRklMRT0iJHtS VU5fRElSfS8ke1BMVUdJTl9OQU1FfS5sb2NrIgpIRUFMVEhfU1RBVEVfRklMRT0iJHtDT05GSUdf RElSfS9oZWFsdGguc3RhdGUiCgpERUZBVUxUX0NPTkZJRz0nRU5BQkxFRD0ieWVzIgpDU19DT05U QUlORVI9ImNyb3dkc2VjIgpMQVBJX1VSTD0iaHR0cDovLzEyNy4wLjAuMTo4MDgyIgpMQVBJX1NU UkVBTV9USU1FT1VUPSIzMDAiCkFQSV9LRVk9IiIKQ1NfQ0hBSU49IkNST1dEU0VDIgpJUFRBQkxF U19DSEFJTlM9IklOUFVUIERPQ0tFUi1VU0VSIgpVUERBVEVfSU5URVJWQUw9IjEwIgpGVUxMX1NZ TkNfSU5URVJWQUw9IjkwMCIKREVDSVNJT05fTElNSVQ9IjEwMDAwMDAiCkxPR19MRVZFTD0iaW5m byIKU0tJUF9QUklWQVRFX0lQVjQ9InllcyIKU1RSRUFNX1NDT1BFUz0iSXAsUmFuZ2UiClNUUkVB TV9PUklHSU5TPSJjcm93ZHNlYyxjc2NsaSIKTUFYX0RJUkVDVF9SVUxFUz0iNTAwMCIKUFJPVEVD VElPTl9NT0RFPSJlc3NlbnRpYWwiCkZJUkVXQUxMX0JBQ0tFTkQ9ImF1dG8iCklQU0VUX05BTUU9 ImNyb3dkc2VjNCIKSEVBTFRIX01BWF9TWU5DX0FHRT0iOTAwIgpIRUFMVEhfTUlOX0lQU0VUX0VO VFJJRVM9IjEiClRFTEVHUkFNX0hUVFBfQ09ORklHPSIvbW50L2NhY2hlL2FwcGRhdGEvY3Jvd2Rz ZWMvbm90aWZpY2F0aW9ucy9odHRwLnlhbWwiCk5PVElGWV9DT09MRE9XTj0iMTgwMCIKTk9USUZZ X1RFTEVHUkFNPSJ5ZXMiCk5PVElGWV9VTlJBSUQ9InllcyIKTk9USUZZX0VOQUJMRUQ9InllcyIK Q1RNX0RST1BTX0VOQUJMRUQ9Im5vIgpDVE1fRFJPUFNfTE9HPSIvbW50L2NhY2hlL2FwcGRhdGEv Y3Jvd2RzZWMtdGhyZWF0LW1hcC9kcm9wcy9kcm9wcy5qc29ubCIKQ1RNX0RST1BTX1BSRUZJWD0i Q1JPV0RTRUNfRFJPUCIKQ1RNX0RST1BTX1JBVEU9IjMwL21pbiIKQ1RNX0RST1BTX0JVUlNUPSI2 MCIKQ1RNX0RST1BTX01BWF9MSU5FUz0iNTAwMCIKJwoKbWtkaXIgLXAgIiRDT05GSUdfRElSIiAi JFJVTl9ESVIiCmlmIFsgISAtZiAiJENPTkZJR19GSUxFIiBdOyB0aGVuCiAgcHJpbnRmICclc1xu JyAiJERFRkFVTFRfQ09ORklHIiA+ICIkQ09ORklHX0ZJTEUiCmZpCgojIHNoZWxsY2hlY2sgc291 cmNlPS9kZXYvbnVsbAouICIkQ09ORklHX0ZJTEUiCgpsb2coKSB7CiAgbG9jYWwgbGV2ZWw9IiQx IgogIHNoaWZ0CiAgcHJpbnRmICdbJXNdIFslc10gJXNcbicgIiQoZGF0ZSAnKyVGICVUJykiICIk bGV2ZWwiICIkKiIgPj4gIiRMT0dfRklMRSIKfQoKanNvbl9zdHJpbmcoKSB7CiAganEgLVJuIC0t YXJnIHYgIiQxIiAnJHYnCn0KCm5vdGlmeV91bnJhaWQoKSB7CiAgWyAiJHtOT1RJRllfVU5SQUlE Oi15ZXN9IiA9ICJ5ZXMiIF0gfHwgcmV0dXJuIDAKICBsb2NhbCBzdWJqZWN0PSIkMSIgZGVzYz0i JDIiIGljb249IiR7MzotYWxlcnR9IgogIGlmIFsgLXggL3Vzci9sb2NhbC9lbWh0dHAvd2ViR3Vp L3NjcmlwdHMvbm90aWZ5IF07IHRoZW4KICAgIC91c3IvbG9jYWwvZW1odHRwL3dlYkd1aS9zY3Jp cHRzL25vdGlmeSAtZSAiQ3Jvd2RTZWMgVW5yYWlkIEJvdW5jZXIiIC1zICIkc3ViamVjdCIgLWQg IiRkZXNjIiAtaSAiJGljb24iIC1sICIvU2V0dGluZ3MvQ3Jvd2RTZWNVbnJhaWRCb3VuY2VyIiA+ L2Rldi9udWxsIDI+JjEgfHwgdHJ1ZQogIGZpCn0KCnRlbGVncmFtX2h0dHBfY29uZmlnKCkgewog IGlmIFsgLW4gIiR7VEVMRUdSQU1fSFRUUF9DT05GSUc6LX0iIF0gJiYgWyAtZiAiJHtURUxFR1JB TV9IVFRQX0NPTkZJR30iIF07IHRoZW4KICAgIHByaW50ZiAnJXNcbicgIiR7VEVMRUdSQU1fSFRU UF9DT05GSUd9IgogICAgcmV0dXJuIDAKICBmaQogIGZvciBmIGluIC9tbnQvY2FjaGUvYXBwZGF0 YS9jcm93ZHNlYy9ub3RpZmljYXRpb25zL2h0dHAueWFtbCAvbW50L3VzZXIvYXBwZGF0YS9jcm93 ZHNlYy9ub3RpZmljYXRpb25zL2h0dHAueWFtbDsgZG8KICAgIFsgLWYgIiRmIiBdICYmIHsgcHJp bnRmICclc1xuJyAiJGYiOyByZXR1cm4gMDsgfQogIGRvbmUKICByZXR1cm4gMQp9Cgpub3RpZnlf dGVsZWdyYW0oKSB7CiAgWyAiJHtOT1RJRllfVEVMRUdSQU06LXllc30iID0gInllcyIgXSB8fCBy ZXR1cm4gMAogIGNvbW1hbmQgLXYganEgPi9kZXYvbnVsbCAyPiYxIHx8IHJldHVybiAwCiAgbG9j YWwgY2ZnIHVybCBjaGF0X2lkIHBheWxvYWQgdGV4dD0iJDEiCiAgY2ZnPSIkKHRlbGVncmFtX2h0 dHBfY29uZmlnIDI+L2Rldi9udWxsIHx8IHRydWUpIgogIFsgLW4gIiRjZmciIF0gfHwgcmV0dXJu IDAKICB1cmw9IiQoYXdrICdCRUdJTntJR05PUkVDQVNFPTF9IC9eW1s6c3BhY2U6XV0qdXJsOltb OnNwYWNlOl1dKi97c3ViKC9eW1s6c3BhY2U6XV0qdXJsOltbOnNwYWNlOl1dKi8sIiIpOyBnc3Vi KC9eWyInXCcnIF0rfFsiJ1wnJyBdKyQvLCIiKTsgcHJpbnQ7IGV4aXR9JyAiJGNmZyIpIgogIGNo YXRfaWQ9IiQoYXdrICdtYXRjaCgkMCwgLyJjaGF0X2lkIltbOnNwYWNlOl1dKjpbWzpzcGFjZTpd XSoiW14iXSsiLyl7cz1zdWJzdHIoJDAsUlNUQVJULFJMRU5HVEgpOyBzdWIoLy4qOltbOnNwYWNl Ol1dKiIvLCIiLHMpOyBzdWIoLyIuKi8sIiIscyk7IHByaW50IHM7IGV4aXR9JyAiJGNmZyIpIgog IFsgLW4gIiR1cmwiIF0gJiYgWyAtbiAiJGNoYXRfaWQiIF0gfHwgcmV0dXJuIDAKICBwYXlsb2Fk PSIkKGpxIC1uYyAtLWFyZyBjaGF0X2lkICIkY2hhdF9pZCIgLS1hcmcgdGV4dCAiJHRleHQiICd7 Y2hhdF9pZDokY2hhdF9pZCx0ZXh0OiR0ZXh0fScpIgogIGN1cmwgLWZzUyAtLWNvbm5lY3QtdGlt ZW91dCA1IC0tbWF4LXRpbWUgMTIgLUggIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbiIg LWQgIiRwYXlsb2FkIiAiJHVybCIgPi9kZXYvbnVsbCAyPiYxIHx8IHRydWUKfQoKbm90aWZ5X3By b2JsZW0oKSB7CiAgWyAiJHtOT1RJRllfRU5BQkxFRDoteWVzfSIgPSAieWVzIiBdIHx8IHJldHVy biAwCiAgbG9jYWwga2V5PSIkMSIgc3ViamVjdD0iJDIiIGRlc2M9IiQzIiBub3cgbGFzdF9maWxl IGxhc3QgY29vbGRvd24KICBjb29sZG93bj0iJHtOT1RJRllfQ09PTERPV046LTE4MDB9IgogIG5v dz0iJChkYXRlICslcykiCiAgbWtkaXIgLXAgIiRSVU5fRElSIgogIGxhc3RfZmlsZT0iJHtSVU5f RElSfS9ub3RpZnktJHtrZXl9Lmxhc3QiCiAgbGFzdD0wCiAgWyAtZiAiJGxhc3RfZmlsZSIgXSAm JiBsYXN0PSIkKGNhdCAiJGxhc3RfZmlsZSIgMj4vZGV2L251bGwgfHwgZWNobyAwKSIKICBpZiBb ICQoKG5vdyAtIGxhc3QpKSAtbHQgIiRjb29sZG93biIgXTsgdGhlbgogICAgcmV0dXJuIDAKICBm aQogIHByaW50ZiAnJXNcbicgIiRub3ciID4gIiRsYXN0X2ZpbGUiCiAgbG9nICJlcnJvciIgIiR7 c3ViamVjdH06ICR7ZGVzY30iCiAgbm90aWZ5X3VucmFpZCAiJHN1YmplY3QiICIkZGVzYyIgImFs ZXJ0IgogIG5vdGlmeV90ZWxlZ3JhbSAiQ3Jvd2RTZWMgVW5yYWlkIEJvdW5jZXIgQUxFUlRcbiR7 c3ViamVjdH1cbiR7ZGVzY30iCn0KCmhlYWx0aF9zdGF0ZV9zZXRfZmFpbGVkKCkgewogIGxvY2Fs IGRlc2M9IiQxIiBub3cgcHJvYmxlbSB0bXAKICBub3c9IiQoZGF0ZSArJXMpIgogIHByb2JsZW09 IiQocHJpbnRmICclcycgIiRkZXNjIiB8IHRyICcKJyAnICcgfCBzZWQgJ3MvW1s6c3BhY2U6XV1c Ky8gL2cnKSIKICBta2RpciAtcCAiJENPTkZJR19ESVIiCiAgaWYgWyAhIC1mICIkSEVBTFRIX1NU QVRFX0ZJTEUiIF0gfHwgISBncmVwIC1xICdeU1RBVFVTPWZhaWxlZCQnICIkSEVBTFRIX1NUQVRF X0ZJTEUiIDI+L2Rldi9udWxsOyB0aGVuCiAgICB7CiAgICAgIHByaW50ZiAnU1RBVFVTPWZhaWxl ZFxuJwogICAgICBwcmludGYgJ0ZBSUxFRF9BVD0lc1xuJyAiJG5vdyIKICAgICAgcHJpbnRmICdM QVNUX1BST0JMRU09JXNcbicgIiRwcm9ibGVtIgogICAgfSA+ICIkSEVBTFRIX1NUQVRFX0ZJTEUi CiAgICBjaG1vZCA2MDAgIiRIRUFMVEhfU1RBVEVfRklMRSIgMj4vZGV2L251bGwgfHwgdHJ1ZQog IGVsc2UKICAgIHRtcD0iJChta3RlbXApIgogICAgYXdrIC12IHByb2JsZW09IiRwcm9ibGVtIiAn CiAgICAgIEJFR0lOe3NlZW49MH0KICAgICAgL15MQVNUX1BST0JMRU09L3twcmludCAiTEFTVF9Q Uk9CTEVNPSIgcHJvYmxlbTsgc2Vlbj0xOyBuZXh0fQogICAgICB7cHJpbnR9CiAgICAgIEVORHtp Zighc2VlbikgcHJpbnQgIkxBU1RfUFJPQkxFTT0iIHByb2JsZW19CiAgICAnICIkSEVBTFRIX1NU QVRFX0ZJTEUiID4gIiR0bXAiCiAgICBtdiAiJHRtcCIgIiRIRUFMVEhfU1RBVEVfRklMRSIKICAg IGNobW9kIDYwMCAiJEhFQUxUSF9TVEFURV9GSUxFIiAyPi9kZXYvbnVsbCB8fCB0cnVlCiAgZmkK fQoKaGVhbHRoX3N0YXRlX2NsZWFyX2lmX3JlY292ZXJlZCgpIHsKICBbICIke05PVElGWV9FTkFC TEVEOi15ZXN9IiA9ICJ5ZXMiIF0gfHwgcmV0dXJuIDAKICBbIC1mICIkSEVBTFRIX1NUQVRFX0ZJ TEUiIF0gfHwgcmV0dXJuIDAKICBncmVwIC1xICdeU1RBVFVTPWZhaWxlZCQnICIkSEVBTFRIX1NU QVRFX0ZJTEUiIDI+L2Rldi9udWxsIHx8IHJldHVybiAwCiAgbG9jYWwgZmFpbGVkX2F0IHByZXZp b3VzIG5vdyBkdXJhdGlvbiBkZXNjCiAgZmFpbGVkX2F0PSIkKGF3ayAtRj0gJyQxPT0iRkFJTEVE X0FUIntwcmludCAkMjsgZXhpdH0nICIkSEVBTFRIX1NUQVRFX0ZJTEUiIDI+L2Rldi9udWxsIHx8 IHRydWUpIgogIHByZXZpb3VzPSIkKGF3ayAtRj0gJyQxPT0iTEFTVF9QUk9CTEVNIntzdWIoL15M QVNUX1BST0JMRU09LywiIik7IHByaW50OyBleGl0fScgIiRIRUFMVEhfU1RBVEVfRklMRSIgMj4v ZGV2L251bGwgfHwgdHJ1ZSkiCiAgbm93PSIkKGRhdGUgKyVzKSIKICBpZiBbIC1uICIke2ZhaWxl ZF9hdDotfSIgXSAmJiBbICIkZmFpbGVkX2F0IiAtZ3QgMCBdIDI+L2Rldi9udWxsOyB0aGVuCiAg ICBkdXJhdGlvbj0iJCgobm93IC0gZmFpbGVkX2F0KSlzIgogIGVsc2UKICAgIGR1cmF0aW9uPSJ1 bmtub3duIgogIGZpCiAgZGVzYz0iSGVhbHRoIGNoZWNrIGlzIE9LIGFnYWluLiBQcmV2aW91cyBw cm9ibGVtOiAke3ByZXZpb3VzOi11bmtub3dufS4gT3V0YWdlIGR1cmF0aW9uOiAke2R1cmF0aW9u fS4iCiAgbG9nICJpbmZvIiAiQ3Jvd2RTZWMgYm91bmNlciBoZWFsdGggcmVjb3ZlcmVkOiAke2Rl c2N9IgogIG5vdGlmeV91bnJhaWQgIkNyb3dkU2VjIGJvdW5jZXIgcmVjb3ZlcmVkIiAiJGRlc2Mi ICJub3JtYWwiCiAgbm90aWZ5X3RlbGVncmFtICJDcm93ZFNlYyBVbnJhaWQgQm91bmNlciBPS1xu SGVhbHRoIHJlY292ZXJlZFxuJHtkZXNjfSIKICBybSAtZiAiJEhFQUxUSF9TVEFURV9GSUxFIgp9 CgpoZWFsdGhfY2hlY2soKSB7CiAgbG9jYWwgbm90aWZ5PSIkezE6LX0iIHByb2JsZW1zPSIiIGNo YWluIGVudHJpZXMgYmFja2VuZCBsYXN0IGFnZSBub3cKICBbICIke0VOQUJMRUQ6LXllc30iID0g InllcyIgXSB8fCByZXR1cm4gMAogIGlmICEgeyBbIC1mICIkUElEX0ZJTEUiIF0gJiYga2lsbCAt MCAiJChjYXQgIiRQSURfRklMRSIpIiAyPi9kZXYvbnVsbDsgfTsgdGhlbiBwcm9ibGVtcz0iJHtw cm9ibGVtc31kYWVtb24gc3RvcHBlZDsgIjsgZmkKICBpZiAhIGN1cmwgLWZzUyAtLWNvbm5lY3Qt dGltZW91dCAzIC0tbWF4LXRpbWUgOCAiJHtMQVBJX1VSTCUvfS9oZWFsdGgiID4vZGV2L251bGwg Mj4mMTsgdGhlbiBwcm9ibGVtcz0iJHtwcm9ibGVtc31Dcm93ZFNlYyBMQVBJIHVucmVhY2hhYmxl OyAiOyBmaQogIGlmICEgaXB0YWJsZXMgLW5MICIkQ1NfQ0hBSU4iID4vZGV2L251bGwgMj4mMTsg dGhlbiBwcm9ibGVtcz0iJHtwcm9ibGVtc31pcHRhYmxlcyBjaGFpbiAke0NTX0NIQUlOfSBtaXNz aW5nOyAiOyBmaQogIGZvciBjaGFpbiBpbiAkSVBUQUJMRVNfQ0hBSU5TOyBkbwogICAgaWYgISBp cHRhYmxlcyAtbkwgIiRjaGFpbiIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIHByb2JsZW1zPSIke3By b2JsZW1zfXByb3RlY3RlZCBjaGFpbiAke2NoYWlufSBtaXNzaW5nOyAiOyBjb250aW51ZTsgZmkK ICAgIGlmIGhhc19jb21tZW50X21vZHVsZTsgdGhlbiBpcHRhYmxlcyAtQyAiJGNoYWluIiAtaiAi JENTX0NIQUlOIiAtbSBjb21tZW50IC0tY29tbWVudCBDUk9XRFNFQy1KVU1QIDI+L2Rldi9udWxs IHx8IHByb2JsZW1zPSIke3Byb2JsZW1zfSR7Y2hhaW59LT4ke0NTX0NIQUlOfSBqdW1wIG1pc3Np bmc7ICI7CiAgICBlbHNlIGlwdGFibGVzIC1DICIkY2hhaW4iIC1qICIkQ1NfQ0hBSU4iIDI+L2Rl di9udWxsIHx8IHByb2JsZW1zPSIke3Byb2JsZW1zfSR7Y2hhaW59LT4ke0NTX0NIQUlOfSBqdW1w IG1pc3Npbmc7ICI7IGZpCiAgZG9uZQogIGJhY2tlbmQ9IiQoZWZmZWN0aXZlX2JhY2tlbmQpIgog IGlmIFsgIiRiYWNrZW5kIiA9ICJpcHNldCIgXTsgdGhlbgogICAgaWYgISBpcHNldCBsaXN0ICIk e0lQU0VUX05BTUU6LWNyb3dkc2VjNH0iID4vZGV2L251bGwgMj4mMTsgdGhlbiBwcm9ibGVtcz0i JHtwcm9ibGVtc31pcHNldCAke0lQU0VUX05BTUU6LWNyb3dkc2VjNH0gbWlzc2luZzsgIgogICAg ZWxzZQogICAgICBsb2NhbCBpcHNldF9zdGF0dXNfZmlsZQogICAgICBpcHNldF9zdGF0dXNfZmls ZT0iJChta3RlbXApIgogICAgICBpcHNldCBsaXN0ICIke0lQU0VUX05BTUU6LWNyb3dkc2VjNH0i ID4gIiRpcHNldF9zdGF0dXNfZmlsZSIgMj4vZGV2L251bGwgfHwgdHJ1ZQogICAgICBlbnRyaWVz PSIkKGF3ayAtRjogJy9OdW1iZXIgb2YgZW50cmllcy97Z3N1YigvIC8sIiIsJDIpOyBwcmludCAk MjsgZXhpdH0nICIkaXBzZXRfc3RhdHVzX2ZpbGUiKSIKICAgICAgcm0gLWYgIiRpcHNldF9zdGF0 dXNfZmlsZSIKICAgICAgZW50cmllcz0iJHtlbnRyaWVzOi0wfSIKCiAgICAgIGlmIFsgIiRlbnRy aWVzIiAtbHQgIiR7SEVBTFRIX01JTl9JUFNFVF9FTlRSSUVTOi0xfSIgXTsgdGhlbiBwcm9ibGVt cz0iJHtwcm9ibGVtc31pcHNldCAke0lQU0VUX05BTUU6LWNyb3dkc2VjNH0gdG9vIHNtYWxsICgk e2VudHJpZXN9KTsgIjsgZmkKICAgIGZpCiAgZmkKICBpZiBbIC1mICIke1JVTl9ESVJ9L2xhc3Rf c3VjY2VzcyIgXTsgdGhlbgogICAgbm93PSIkKGRhdGUgKyVzKSI7IGxhc3Q9IiQoY2F0ICIke1JV Tl9ESVJ9L2xhc3Rfc3VjY2VzcyIgMj4vZGV2L251bGwgfHwgZWNobyAwKSI7IGFnZT0kKChub3cg LSBsYXN0KSkKICAgIGlmIFsgIiRhZ2UiIC1ndCAiJHtIRUFMVEhfTUFYX1NZTkNfQUdFOi05MDB9 IiBdOyB0aGVuIHByb2JsZW1zPSIke3Byb2JsZW1zfWxhc3Qgc3VjY2Vzc2Z1bCBzeW5jIGlzICR7 YWdlfXMgb2xkOyAiOyBmaQogIGZpCiAgaWYgWyAtbiAiJHByb2JsZW1zIiBdOyB0aGVuCiAgICBp ZiBbICIkbm90aWZ5IiA9ICItLW5vdGlmeSIgXTsgdGhlbgogICAgICBoZWFsdGhfc3RhdGVfc2V0 X2ZhaWxlZCAiJHByb2JsZW1zIgogICAgICBub3RpZnlfcHJvYmxlbSAiaGVhbHRoIiAiQ3Jvd2RT ZWMgYm91bmNlciBoZWFsdGggY2hlY2sgZmFpbGVkIiAiJHByb2JsZW1zIgogICAgZmkKICAgIHBy aW50ZiAnRVJST1I6ICVzXG4nICIkcHJvYmxlbXMiCiAgICByZXR1cm4gMQogIGZpCiAgWyAiJG5v dGlmeSIgPSAiLS1ub3RpZnkiIF0gJiYgaGVhbHRoX3N0YXRlX2NsZWFyX2lmX3JlY292ZXJlZAog IHByaW50ZiAnT0s6IENyb3dkU2VjIGJvdW5jZXIgaGVhbHRoIGNoZWNrIHBhc3NlZFxuJwp9Cgp1 c2FnZSgpIHsKICBjYXQgPDxVU0FHRQpVc2FnZTogY3Jvd2RzZWMtdW5yYWlkLWJvdW5jZXIgPGNv bW1hbmQ+CgpDb21tYW5kczoKICBzeW5jICAgICAgIFJ1biBvbmUgc3luY2hyb25pemF0aW9uIG5v dwogIGRhZW1vbiAgICAgS2VlcCBzeW5jaHJvbml6aW5nIGV2ZXJ5IFVQREFURV9JTlRFUlZBTCBz ZWNvbmRzCiAgc3RhdHVzICAgICBTaG93IHNlcnZpY2UgYW5kIGlwdGFibGVzIHN0YXR1cwogIHRl c3QgICAgICAgVmFsaWRhdGUgY29uZmlndXJhdGlvbiB3aXRob3V0IGNoYW5naW5nIGZpcmV3YWxs IHJ1bGVzCiAgaW5zdGFsbCAgICBFbnN1cmUgY2hhaW5zIGFuZCBqdW1wcyBleGlzdAogIGhlYWx0 aCAgICAgQ2hlY2sgYm91bmNlciBoZWFsdGggYW5kIG9wdGlvbmFsbHkgbm90aWZ5ClVTQUdFCn0K Cmhhc19jb21tZW50X21vZHVsZSgpIHsKICBpcHRhYmxlcyAtbSBjb21tZW50IC1oID4vZGV2L251 bGwgMj4mMQp9CgpjdG1fZHJvcHNfZW5hYmxlZCgpIHsKICBbICIke0NUTV9EUk9QU19FTkFCTEVE Oi1ub30iID0gInllcyIgXQp9CgpjdG1fZHJvcHNfcHJlZml4KCkgewogIHByaW50ZiAnJXNcbicg IiR7Q1RNX0RST1BTX1BSRUZJWDotQ1JPV0RTRUNfRFJPUH0iCn0KCnJlbW92ZV9jdG1fZHJvcF9s b2dfcnVsZXMoKSB7CiAgbG9jYWwgc3BlYwogIHdoaWxlIHJlYWQgLXIgc3BlYzsgZG8KICAgIFsg LW4gIiR7c3BlYzotfSIgXSB8fCBjb250aW51ZQogICAgc3BlYz0iJHtzcGVjIy1BICR7Q1NfQ0hB SU59IH0iCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwODYKICAgIGlwdGFibGVzIC1EICIk Q1NfQ0hBSU4iICRzcGVjIDI+L2Rldi9udWxsIHx8IHRydWUKICBkb25lIDwgPChpcHRhYmxlcyAt UyAiJENTX0NIQUlOIiAyPi9kZXYvbnVsbCB8IGdyZXAgLS0gJy0tY29tbWVudCBDUk9XRFNFQy1E Uk9QLUxPRycgfHwgdHJ1ZSkKfQoKZW5zdXJlX2N0bV9pcHNldF9kcm9wX2xvZ19ydWxlKCkgewog IGN0bV9kcm9wc19lbmFibGVkIHx8IHJldHVybiAwCiAgbG9jYWwgc2V0X25hbWUgcHJlZml4IHJh dGUgYnVyc3QKICBzZXRfbmFtZT0iJHtJUFNFVF9OQU1FOi1jcm93ZHNlYzR9IgogIHByZWZpeD0i JChjdG1fZHJvcHNfcHJlZml4KSAiCiAgcmF0ZT0iJHtDVE1fRFJPUFNfUkFURTotMzAvbWlufSIK ICBidXJzdD0iJHtDVE1fRFJPUFNfQlVSU1Q6LTYwfSIKICBpcHRhYmxlcyAtQyAiJENTX0NIQUlO IiAtbSBzZXQgLS1tYXRjaC1zZXQgIiRzZXRfbmFtZSIgc3JjIC1tIGxpbWl0IC0tbGltaXQgIiRy YXRlIiAtLWxpbWl0LWJ1cnN0ICIkYnVyc3QiIC1qIExPRyAtLWxvZy1wcmVmaXggIiRwcmVmaXgi IC0tbG9nLWxldmVsIDQgLW0gY29tbWVudCAtLWNvbW1lbnQgQ1JPV0RTRUMtRFJPUC1MT0cgMj4v ZGV2L251bGwgJiYgcmV0dXJuIDAKICBpcHRhYmxlcyAtSSAiJENTX0NIQUlOIiAxIC1tIHNldCAt LW1hdGNoLXNldCAiJHNldF9uYW1lIiBzcmMgLW0gbGltaXQgLS1saW1pdCAiJHJhdGUiIC0tbGlt aXQtYnVyc3QgIiRidXJzdCIgLWogTE9HIC0tbG9nLXByZWZpeCAiJHByZWZpeCIgLS1sb2ctbGV2 ZWwgNCAtbSBjb21tZW50IC0tY29tbWVudCBDUk9XRFNFQy1EUk9QLUxPRwp9CgplbnN1cmVfY3Rt X2RpcmVjdF9kcm9wX2xvZ19ydWxlKCkgewogIGN0bV9kcm9wc19lbmFibGVkIHx8IHJldHVybiAw CiAgbG9jYWwgaXA9IiQxIiBwcmVmaXggcmF0ZSBidXJzdAogIHByZWZpeD0iJChjdG1fZHJvcHNf cHJlZml4KSAiCiAgcmF0ZT0iJHtDVE1fRFJPUFNfUkFURTotMzAvbWlufSIKICBidXJzdD0iJHtD VE1fRFJPUFNfQlVSU1Q6LTYwfSIKICBpcHRhYmxlcyAtQyAiJENTX0NIQUlOIiAtcyAiJGlwIiAt bSBsaW1pdCAtLWxpbWl0ICIkcmF0ZSIgLS1saW1pdC1idXJzdCAiJGJ1cnN0IiAtaiBMT0cgLS1s b2ctcHJlZml4ICIkcHJlZml4IiAtLWxvZy1sZXZlbCA0IC1tIGNvbW1lbnQgLS1jb21tZW50IENS T1dEU0VDLURST1AtTE9HIDI+L2Rldi9udWxsICYmIHJldHVybiAwCiAgaXB0YWJsZXMgLUkgIiRD U19DSEFJTiIgMSAtcyAiJGlwIiAtbSBsaW1pdCAtLWxpbWl0ICIkcmF0ZSIgLS1saW1pdC1idXJz dCAiJGJ1cnN0IiAtaiBMT0cgLS1sb2ctcHJlZml4ICIkcHJlZml4IiAtLWxvZy1sZXZlbCA0IC1t IGNvbW1lbnQgLS1jb21tZW50IENST1dEU0VDLURST1AtTE9HCn0KCmN0bV9lc2NhcGVfanNvbigp IHsKICBzZWQgJ3MvXFwvXFxcXC9nOyBzLyIvXFwiL2cnCn0KCmN0bV90cmltX2Ryb3BfbG9nKCkg ewogIGxvY2FsIGZpbGU9IiR7Q1RNX0RST1BTX0xPRzotfSIgbWF4IHRtcAogIFsgLW4gIiRmaWxl IiBdIHx8IHJldHVybiAwCiAgbWF4PSIke0NUTV9EUk9QU19NQVhfTElORVM6LTUwMDB9IgogIFsg IiRtYXgiIC1ndCAwIF0gMj4vZGV2L251bGwgfHwgcmV0dXJuIDAKICBbIC1mICIkZmlsZSIgXSB8 fCByZXR1cm4gMAogIGlmIFsgIiQod2MgLWwgPCAiJGZpbGUiIHwgdHIgLWQgJyAnKSIgLWxlICIk bWF4IiBdOyB0aGVuCiAgICByZXR1cm4gMAogIGZpCiAgdG1wPSIkKG1rdGVtcCkiCiAgdGFpbCAt biAiJG1heCIgIiRmaWxlIiA+ICIkdG1wIiAmJiBjYXQgIiR0bXAiID4gIiRmaWxlIgogIHJtIC1m ICIkdG1wIgp9CgpjdG1fd3JpdGVfZHJvcF9ldmVudCgpIHsKICBsb2NhbCBsaW5lPSIkMSIgZmls ZSBkaXIgcHJlZml4IHRzIGlwIGxlbiBpbmlmIG91dGlmIGNoYWluIGJ5dGVzCiAgY3RtX2Ryb3Bz X2VuYWJsZWQgfHwgcmV0dXJuIDAKICBmaWxlPSIke0NUTV9EUk9QU19MT0c6LX0iCiAgWyAtbiAi JGZpbGUiIF0gfHwgcmV0dXJuIDAKICBwcmVmaXg9IiQoY3RtX2Ryb3BzX3ByZWZpeCkiCiAgY2Fz ZSAiJGxpbmUiIGluCiAgICAqIiRwcmVmaXgiKikgOzsKICAgICopIHJldHVybiAwIDs7CiAgZXNh YwogIGlwPSIkKHByaW50ZiAnJXNcbicgIiRsaW5lIiB8IHNlZCAtbiAncy8uKlNSQz1cKFteIF0q XCkuKi9cMS9wJykiCiAgWyAtbiAiJGlwIiBdICYmIGlzX3ZhbGlkX2lwdjRfb3JfY2lkciAiJGlw IiB8fCByZXR1cm4gMAogIGlmIFsgIiR7U0tJUF9QUklWQVRFX0lQVjQ6LXllc30iID0gInllcyIg XSAmJiBpc19wcml2YXRlX29yX2xvY2FsX2lwdjQgIiRpcCI7IHRoZW4KICAgIHJldHVybiAwCiAg ZmkKICBsZW49IiQocHJpbnRmICclc1xuJyAiJGxpbmUiIHwgc2VkIC1uICdzLy4qTEVOPVwoWzAt OV0qXCkuKi9cMS9wJykiCiAgaW5pZj0iJChwcmludGYgJyVzXG4nICIkbGluZSIgfCBzZWQgLW4g J3MvLipJTj1cKFteIF0qXCkuKi9cMS9wJyB8IGN0bV9lc2NhcGVfanNvbikiCiAgb3V0aWY9IiQo cHJpbnRmICclc1xuJyAiJGxpbmUiIHwgc2VkIC1uICdzLy4qT1VUPVwoW14gXSpcKS4qL1wxL3An IHwgY3RtX2VzY2FwZV9qc29uKSIKICBjaGFpbj0iJChwcmludGYgJyVzXG4nICIkbGluZSIgfCBz ZWQgLW4gJ3MvLiotLWNvbW1lbnQgXChbXiBdKlwpLiovXDEvcCcgfCBjdG1fZXNjYXBlX2pzb24p IgogIGJ5dGVzPSIke2xlbjotMH0iCiAgdHM9IiQoZGF0ZSAtdSAnKyVZLSVtLSVkVCVIOiVNOiVT WicpIgogIGRpcj0iJChkaXJuYW1lICIkZmlsZSIpIgogIG1rZGlyIC1wICIkZGlyIgogIHsKICAg IGZsb2NrIC14IDIwMQogICAgcHJpbnRmICd7InRzIjoiJXMiLCJpcCI6IiVzIiwicGFja2V0cyI6 MSwiYnl0ZXMiOiVzLCJjaGFpbiI6IiVzIiwicnVsZSI6ImNyb3dkc2VjLWJhbiIsImludGVyZmFj ZSI6IiVzIiwib3V0X2ludGVyZmFjZSI6IiVzIn1cbicgXAogICAgICAiJHRzIiAiJGlwIiAiJGJ5 dGVzIiAiJHtjaGFpbjotJENTX0NIQUlOfSIgIiRpbmlmIiAiJG91dGlmIiA+PiAiJGZpbGUiCiAg ICBjdG1fdHJpbV9kcm9wX2xvZwogIH0gMjAxPiIke2ZpbGV9LmxvY2siCn0KCmN0bV9kcm9wX2Nv bGxlY3RvcigpIHsKICBjdG1fZHJvcHNfZW5hYmxlZCB8fCByZXR1cm4gMAogIGxvY2FsIHByZWZp eCBzb3VyY2UKICBwcmVmaXg9IiQoY3RtX2Ryb3BzX3ByZWZpeCkiCiAgbG9nICJpbmZvIiAiQ1RN IGRyb3BzIGNvbGxlY3RvciBlbmFibGVkOiAke0NUTV9EUk9QU19MT0c6LXVuc2V0fSIKICBpZiBb IC1mIC92YXIvbG9nL3N5c2xvZyBdOyB0aGVuCiAgICBzb3VyY2U9Ii92YXIvbG9nL3N5c2xvZyIK ICAgIHRhaWwgLW4gMCAtRiAiJHNvdXJjZSIgMj4vZGV2L251bGwgfCB3aGlsZSBJRlM9IHJlYWQg LXIgbGluZTsgZG8KICAgICAgY3RtX3dyaXRlX2Ryb3BfZXZlbnQgIiRsaW5lIgogICAgZG9uZQog IGVsc2UKICAgIGxvZyAid2FybiIgIkNUTSBkcm9wcyBjb2xsZWN0b3IgY291bGQgbm90IGZpbmQg L3Zhci9sb2cvc3lzbG9nIgogICAgd2hpbGUgdHJ1ZTsgZG8gc2xlZXAgMzYwMDsgZG9uZQogIGZp Cn0KCmlzX3ZhbGlkX2lwdjRfb3JfY2lkcigpIHsKICBsb2NhbCBzPSIkMSIgaXAgY2lkciBvCiAg aXA9IiR7cyUlLyp9IgogIGlmIFtbICIkcyIgPT0gKi8qIF1dOyB0aGVuCiAgICBjaWRyPSIke3Mj Ki99IgogICAgW1sgIiRjaWRyIiA9fiBeWzAtOV17MSwyfSQgXV0gfHwgcmV0dXJuIDEKICAgICgo IGNpZHIgPj0gMCAmJiBjaWRyIDw9IDMyICkpIHx8IHJldHVybiAxCiAgZmkKICBJRlM9LiByZWFk IC1yIG8xIG8yIG8zIG80IDw8PCAiJGlwIiB8fCByZXR1cm4gMQogIGZvciBvIGluICIkbzEiICIk bzIiICIkbzMiICIkbzQiOyBkbwogICAgW1sgIiRvIiA9fiBeWzAtOV17MSwzfSQgXV0gfHwgcmV0 dXJuIDEKICAgICgoIG8gPj0gMCAmJiBvIDw9IDI1NSApKSB8fCByZXR1cm4gMQogIGRvbmUKfQoK aXNfcHJpdmF0ZV9vcl9sb2NhbF9pcHY0KCkgewogIGxvY2FsIGlwIG8xIG8yIG8zIG80CiAgaXA9 IiR7MSUlLyp9IgogIElGUz0uIHJlYWQgLXIgbzEgbzIgbzMgbzQgPDw8ICIkaXAiIHx8IHJldHVy biAxCiAgW1sgIiRvMSIgLWVxIDEwIF1dICYmIHJldHVybiAwCiAgW1sgIiRvMSIgLWVxIDE5MiAm JiAiJG8yIiAtZXEgMTY4IF1dICYmIHJldHVybiAwCiAgW1sgIiRvMSIgLWVxIDE3MiAmJiAiJG8y IiAtZ2UgMTYgJiYgIiRvMiIgLWxlIDMxIF1dICYmIHJldHVybiAwCiAgW1sgIiRvMSIgLWVxIDEy NyBdXSAmJiByZXR1cm4gMAogIFtbICIkbzEiIC1lcSAxNjkgJiYgIiRvMiIgLWVxIDI1NCBdXSAm JiByZXR1cm4gMAogIHJldHVybiAxCn0KCm5vcm0zMigpIHsKICBsb2NhbCBzPSIkMSIKICBpZiBb WyAiJHMiID09ICovKiBdXTsgdGhlbgogICAgcHJpbnRmICclc1xuJyAiJHMiCiAgZWxzZQogICAg cHJpbnRmICclcy8zMlxuJyAiJHMiCiAgZmkKfQoKcmVxdWlyZV90b29scygpIHsKICBjb21tYW5k IC12IGlwdGFibGVzID4vZGV2L251bGwgMj4mMSB8fCB7CiAgICBlY2hvICJpcHRhYmxlcyBpcyBt aXNzaW5nIiA+JjIKICAgIHJldHVybiAxCiAgfQogIGNvbW1hbmQgLXYgZG9ja2VyID4vZGV2L251 bGwgMj4mMSB8fCB7CiAgICBlY2hvICJkb2NrZXIgaXMgbWlzc2luZyIgPiYyCiAgICByZXR1cm4g MQogIH0KICBjb21tYW5kIC12IGN1cmwgPi9kZXYvbnVsbCAyPiYxIHx8IHsKICAgIGVjaG8gImN1 cmwgaXMgbWlzc2luZyIgPiYyCiAgICByZXR1cm4gMQogIH0KICBjb21tYW5kIC12IGpxID4vZGV2 L251bGwgMj4mMSB8fCB7CiAgICBlY2hvICJqcSBpcyBtaXNzaW5nIiA+JjIKICAgIHJldHVybiAx CiAgfQogIGRvY2tlciBpbnNwZWN0ICIkQ1NfQ09OVEFJTkVSIiA+L2Rldi9udWxsIDI+JjEgfHwg ewogICAgZWNobyAiQ3Jvd2RTZWMgY29udGFpbmVyICcke0NTX0NPTlRBSU5FUn0nIHdhcyBub3Qg Zm91bmQiID4mMgogICAgcmV0dXJuIDEKICB9Cn0KCnNhdmVfY29uZmlnX3ZhbHVlKCkgewogIGxv Y2FsIGtleT0iJDEiIHZhbHVlPSIkMiIgdG1wCiAgdG1wPSIkKG1rdGVtcCkiCiAgaWYgZ3JlcCAt cSAiXiR7a2V5fT0iICIkQ09ORklHX0ZJTEUiIDI+L2Rldi9udWxsOyB0aGVuCiAgICBzZWQgInN8 XiR7a2V5fT0uKnwke2tleX09XCIke3ZhbHVlfVwifCIgIiRDT05GSUdfRklMRSIgPiAiJHRtcCIK ICBlbHNlCiAgICBjYXQgIiRDT05GSUdfRklMRSIgPiAiJHRtcCIKICAgIHByaW50ZiAnJXM9IiVz IlxuJyAiJGtleSIgIiR2YWx1ZSIgPj4gIiR0bXAiCiAgZmkKICBtdiAiJHRtcCIgIiRDT05GSUdf RklMRSIKICBjaG1vZCA2MDAgIiRDT05GSUdfRklMRSIKfQoKZW5zdXJlX2FwaV9rZXkoKSB7CiAg aWYgWyAtbiAiJHtBUElfS0VZOi19IiBdOyB0aGVuCiAgICByZXR1cm4gMAogIGZpCgogIGxvY2Fs IG91dCBrZXkgbmFtZQogIG5hbWU9ImNyb3dkc2VjLXVucmFpZC1ib3VuY2VyIgogIG91dD0iJChk b2NrZXIgZXhlYyAiJENTX0NPTlRBSU5FUiIgY3NjbGkgYm91bmNlcnMgYWRkICIkbmFtZSIgMj4m MSkiIHx8IHsKICAgIGlmIHByaW50ZiAnJXNcbicgIiRvdXQiIHwgZ3JlcCAtcWkgJ2FscmVhZHkg ZXhpc3RzJzsgdGhlbgogICAgICBuYW1lPSJjcm93ZHNlYy11bnJhaWQtYm91bmNlci0kKGhvc3Ru YW1lKS0kKGRhdGUgKyVzKSIKICAgICAgb3V0PSIkKGRvY2tlciBleGVjICIkQ1NfQ09OVEFJTkVS IiBjc2NsaSBib3VuY2VycyBhZGQgIiRuYW1lIiAyPiYxKSIgfHwgewogICAgICAgIGxvZyAiZXJy b3IiICJmYWlsZWQgdG8gY3JlYXRlIGJvdW5jZXIga2V5OiAke291dH0iCiAgICAgICAgZWNobyAi JG91dCIgPiYyCiAgICAgICAgcmV0dXJuIDEKICAgICAgfQogICAgZWxzZQogICAgICBsb2cgImVy cm9yIiAiZmFpbGVkIHRvIGNyZWF0ZSBib3VuY2VyIGtleTogJHtvdXR9IgogICAgICBlY2hvICIk b3V0IiA+JjIKICAgICAgcmV0dXJuIDEKICAgIGZpCiAgfQogIGtleT0iJChwcmludGYgJyVzXG4n ICIkb3V0IiB8IGF3ayAnL0FQSSBrZXkgZm9yL3tzZWVuPTE7IG5leHR9IHNlZW4gJiYgTkYge2dz dWIoL15bWzpzcGFjZTpdXSt8W1s6c3BhY2U6XV0rJC8sICIiLCAkMCk7IHByaW50OyBleGl0fScp IgogIGlmIFsgLXogIiRrZXkiIF07IHRoZW4KICAgIGxvZyAiZXJyb3IiICJjb3VsZCBub3QgcGFy c2UgYm91bmNlciBrZXkgZnJvbSBjc2NsaSBvdXRwdXQiCiAgICBlY2hvICIkb3V0IiA+JjIKICAg IHJldHVybiAxCiAgZmkKICBBUElfS0VZPSIka2V5IgogIHNhdmVfY29uZmlnX3ZhbHVlICJBUElf S0VZIiAiJEFQSV9LRVkiCiAgbG9nICJpbmZvIiAiQ3JlYXRlZCBDcm93ZFNlYyBMQVBJIGJvdW5j ZXIga2V5ICgke25hbWV9KSIKfQoKZW5zdXJlX2p1bXBfZmlyc3QoKSB7CiAgbG9jYWwgY2hhaW49 IiQxIiBmaXJzdAogIGZpcnN0PSIkKGlwdGFibGVzIC1TICIkY2hhaW4iIDI+L2Rldi9udWxsIHwg YXdrICckMT09Ii1BIiB7cHJpbnQ7IGV4aXR9JykiCiAgY2FzZSAiJGZpcnN0IiBpbgogICAgKiIt aiAke0NTX0NIQUlOfSIqIkNST1dEU0VDLUpVTVAiKnwqIkNST1dEU0VDLUpVTVAiKiItaiAke0NT X0NIQUlOfSIqKSByZXR1cm4gMCA7OwogIGVzYWMKICBpZiBoYXNfY29tbWVudF9tb2R1bGU7IHRo ZW4KICAgIHdoaWxlIGlwdGFibGVzIC1EICIkY2hhaW4iIC1qICIkQ1NfQ0hBSU4iIC1tIGNvbW1l bnQgLS1jb21tZW50IENST1dEU0VDLUpVTVAgMj4vZGV2L251bGw7IGRvIDo7IGRvbmUKICAgIHdo aWxlIGlwdGFibGVzIC1EICIkY2hhaW4iIC1tIGNvbW1lbnQgLS1jb21tZW50IENST1dEU0VDLUpV TVAgLWogIiRDU19DSEFJTiIgMj4vZGV2L251bGw7IGRvIDo7IGRvbmUKICAgIGlwdGFibGVzIC1J ICIkY2hhaW4iIDEgLWogIiRDU19DSEFJTiIgLW0gY29tbWVudCAtLWNvbW1lbnQgQ1JPV0RTRUMt SlVNUAogIGVsc2UKICAgIHdoaWxlIGlwdGFibGVzIC1EICIkY2hhaW4iIC1qICIkQ1NfQ0hBSU4i IDI+L2Rldi9udWxsOyBkbyA6OyBkb25lCiAgICBpcHRhYmxlcyAtSSAiJGNoYWluIiAxIC1qICIk Q1NfQ0hBSU4iCiAgZmkKICBsb2cgImluZm8iICJNb3ZlZCAke2NoYWlufSAtPiAke0NTX0NIQUlO fSBqdW1wIHRvIGZpcnN0IHJ1bGUiCn0KCmVuc3VyZV9jaGFpbl9hbmRfanVtcHMoKSB7CiAgbG9j YWwgY2hhaW4KICBpcHRhYmxlcyAtTiAiJENTX0NIQUlOIiAyPi9kZXYvbnVsbCB8fCB0cnVlCgog IGZvciBjaGFpbiBpbiAkSVBUQUJMRVNfQ0hBSU5TOyBkbwogICAgaWYgISBpcHRhYmxlcyAtbkwg IiRjaGFpbiIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCiAgICAgIGxvZyAid2FybiIgImlwdGFibGVz IGNoYWluICcke2NoYWlufScgZG9lcyBub3QgZXhpc3QsIHNraXBwaW5nIgogICAgICBjb250aW51 ZQogICAgZmkKCiAgICBpZiBoYXNfY29tbWVudF9tb2R1bGU7IHRoZW4KICAgICAgaWYgISBpcHRh YmxlcyAtQyAiJGNoYWluIiAtaiAiJENTX0NIQUlOIiAtbSBjb21tZW50IC0tY29tbWVudCBDUk9X RFNFQy1KVU1QIDI+L2Rldi9udWxsOyB0aGVuCiAgICAgICAgaXB0YWJsZXMgLUkgIiRjaGFpbiIg MSAtaiAiJENTX0NIQUlOIiAtbSBjb21tZW50IC0tY29tbWVudCBDUk9XRFNFQy1KVU1QCiAgICAg ICAgbG9nICJpbmZvIiAiQWRkZWQgJHtjaGFpbn0gLT4gJHtDU19DSEFJTn0iCiAgICAgIGZpCiAg ICBlbHNlCiAgICAgIGlmICEgaXB0YWJsZXMgLUMgIiRjaGFpbiIgLWogIiRDU19DSEFJTiIgMj4v ZGV2L251bGw7IHRoZW4KICAgICAgICBpcHRhYmxlcyAtSSAiJGNoYWluIiAxIC1qICIkQ1NfQ0hB SU4iCiAgICAgICAgbG9nICJpbmZvIiAiQWRkZWQgJHtjaGFpbn0gLT4gJHtDU19DSEFJTn0iCiAg ICAgIGZpCiAgICBmaQogICAgZW5zdXJlX2p1bXBfZmlyc3QgIiRjaGFpbiIKICBkb25lCgogIGlw dGFibGVzIC1DICIkQ1NfQ0hBSU4iIC1qIFJFVFVSTiAyPi9kZXYvbnVsbCB8fCBpcHRhYmxlcyAt QSAiJENTX0NIQUlOIiAtaiBSRVRVUk4KfQoKZWZmZWN0aXZlX29yaWdpbnMoKSB7CiAgY2FzZSAi JHtQUk9URUNUSU9OX01PREU6LWVzc2VudGlhbH0iIGluCiAgICBlc3NlbnRpYWwpIHByaW50ZiAn JXNcbicgIiR7U1RSRUFNX09SSUdJTlM6LWNyb3dkc2VjLGNzY2xpfSIgOzsKICAgIGdsb2JhbCkg cHJpbnRmICclc1xuJyAiY3Jvd2RzZWMsY3NjbGksQ0FQSSxsaXN0cyIgOzsKICAgIGN1c3RvbSkg cHJpbnRmICclc1xuJyAiJHtTVFJFQU1fT1JJR0lOUzotY3Jvd2RzZWMsY3NjbGl9IiA7OwogICAg KikgcHJpbnRmICclc1xuJyAiJHtTVFJFQU1fT1JJR0lOUzotY3Jvd2RzZWMsY3NjbGl9IiA7Owog IGVzYWMKfQoKZWZmZWN0aXZlX2JhY2tlbmQoKSB7CiAgY2FzZSAiJHtGSVJFV0FMTF9CQUNLRU5E Oi1hdXRvfSIgaW4KICAgIGRpcmVjdCkgcHJpbnRmICclc1xuJyAiZGlyZWN0IiA7OwogICAgaXBz ZXQpIHByaW50ZiAnJXNcbicgImlwc2V0IiA7OwogICAgYXV0bykKICAgICAgaWYgWyAiJHtQUk9U RUNUSU9OX01PREU6LWVzc2VudGlhbH0iID0gImdsb2JhbCIgXTsgdGhlbgogICAgICAgIHByaW50 ZiAnJXNcbicgImlwc2V0IgogICAgICBlbHNlCiAgICAgICAgcHJpbnRmICclc1xuJyAiZGlyZWN0 IgogICAgICBmaQogICAgICA7OwogICAgKikgcHJpbnRmICclc1xuJyAiZGlyZWN0IiA7OwogIGVz YWMKfQoKZW5zdXJlX2lwc2V0X2JhY2tlbmQoKSB7CiAgY29tbWFuZCAtdiBpcHNldCA+L2Rldi9u dWxsIDI+JjEgfHwgewogICAgbG9nICJlcnJvciIgImlwc2V0IGJhY2tlbmQgcmVxdWVzdGVkIGJ1 dCBpcHNldCBpcyBub3QgaW5zdGFsbGVkIgogICAgZWNobyAiaXBzZXQgYmFja2VuZCByZXF1ZXN0 ZWQgYnV0IGlwc2V0IGlzIG5vdCBpbnN0YWxsZWQiID4mMgogICAgcmV0dXJuIDEKICB9CiAgaXBz ZXQgbGlzdCAiJHtJUFNFVF9OQU1FOi1jcm93ZHNlYzR9IiA+L2Rldi9udWxsIDI+JjEgfHwKICAg IGlwc2V0IGNyZWF0ZSAiJHtJUFNFVF9OQU1FOi1jcm93ZHNlYzR9IiBoYXNoOm5ldCBmYW1pbHkg aW5ldCBtYXhlbGVtIDI2MjE0NAogIGlmIGhhc19jb21tZW50X21vZHVsZTsgdGhlbgogICAgaXB0 YWJsZXMgLUMgIiRDU19DSEFJTiIgLW0gc2V0IC0tbWF0Y2gtc2V0ICIke0lQU0VUX05BTUU6LWNy b3dkc2VjNH0iIHNyYyAtaiBEUk9QIC1tIGNvbW1lbnQgLS1jb21tZW50IENST1dEU0VDLUJBTi1T RVQgMj4vZGV2L251bGwgfHwKICAgICAgaXB0YWJsZXMgLUkgIiRDU19DSEFJTiIgMSAtbSBzZXQg LS1tYXRjaC1zZXQgIiR7SVBTRVRfTkFNRTotY3Jvd2RzZWM0fSIgc3JjIC1qIERST1AgLW0gY29t bWVudCAtLWNvbW1lbnQgQ1JPV0RTRUMtQkFOLVNFVAogICAgZW5zdXJlX2N0bV9pcHNldF9kcm9w X2xvZ19ydWxlCiAgZWxzZQogICAgaXB0YWJsZXMgLUMgIiRDU19DSEFJTiIgLW0gc2V0IC0tbWF0 Y2gtc2V0ICIke0lQU0VUX05BTUU6LWNyb3dkc2VjNH0iIHNyYyAtaiBEUk9QIDI+L2Rldi9udWxs IHx8CiAgICAgIGlwdGFibGVzIC1JICIkQ1NfQ0hBSU4iIDEgLW0gc2V0IC0tbWF0Y2gtc2V0ICIk e0lQU0VUX05BTUU6LWNyb3dkc2VjNH0iIHNyYyAtaiBEUk9QCiAgZmkKfQoKcmVtb3ZlX2RpcmVj dF9iYW5fcnVsZXMoKSB7CiAgbG9jYWwgaXAKICBpcHRhYmxlcyAtUyAiJENTX0NIQUlOIiAyPi9k ZXYvbnVsbCB8CiAgICBhd2sgJwogICAgICAkMT09Ii1BIiB7CiAgICAgICAgc3JjPSIiOyBkaXJl Y3Q9MDsgc2V0cnVsZT0wOwogICAgICAgIGZvciAoaT0zOyBpPD1ORjsgaSsrKSB7CiAgICAgICAg ICBpZiAoJGk9PSItcyIgJiYgKGkrMSk8PU5GKSBzcmM9JChpKzEpOwogICAgICAgICAgaWYgKCRp PT0iLS1jb21tZW50IiAmJiAoaSsxKTw9TkYgJiYgJChpKzEpPT0iQ1JPV0RTRUMtQkFOIikgZGly ZWN0PTE7CiAgICAgICAgICBpZiAoJGk9PSItLWNvbW1lbnQiICYmIChpKzEpPD1ORiAmJiAkKGkr MSk9PSJDUk9XRFNFQy1CQU4tU0VUIikgc2V0cnVsZT0xOwogICAgICAgIH0KICAgICAgICBpZiAo ZGlyZWN0PT0xICYmIHNldHJ1bGU9PTAgJiYgc3JjIT0iIikgcHJpbnQgc3JjOwogICAgICB9JyB8 CiAgICB3aGlsZSByZWFkIC1yIGlwOyBkbwogICAgICBbIC16ICIke2lwOi19IiBdICYmIGNvbnRp bnVlCiAgICAgIHdoaWxlIGlwdGFibGVzIC1EICIkQ1NfQ0hBSU4iIC1zICIkaXAiIC1qIERST1Ag LW0gY29tbWVudCAtLWNvbW1lbnQgQ1JPV0RTRUMtQkFOIDI+L2Rldi9udWxsOyBkbyA6OyBkb25l CiAgICAgIHdoaWxlIGlwdGFibGVzIC1EICIkQ1NfQ0hBSU4iIC1zICIkaXAiIC1tIGxpbWl0IC0t bGltaXQgIiR7Q1RNX0RST1BTX1JBVEU6LTMwL21pbn0iIC0tbGltaXQtYnVyc3QgIiR7Q1RNX0RS T1BTX0JVUlNUOi02MH0iIC1qIExPRyAtLWxvZy1wcmVmaXggIiQoY3RtX2Ryb3BzX3ByZWZpeCkg IiAtLWxvZy1sZXZlbCA0IC1tIGNvbW1lbnQgLS1jb21tZW50IENST1dEU0VDLURST1AtTE9HIDI+ L2Rldi9udWxsOyBkbyA6OyBkb25lCiAgICAgIHdoaWxlIGlwdGFibGVzIC1EICIkQ1NfQ0hBSU4i IC1zICIkaXAiIC1qIERST1AgMj4vZGV2L251bGw7IGRvIDo7IGRvbmUKICAgIGRvbmUKfQoKc3Ry ZWFtX2RlY2lzaW9ucygpIHsKICBsb2NhbCBzdGFydHVwPSIkMSIgdXJsCiAgZW5zdXJlX2FwaV9r ZXkKICB1cmw9IiR7TEFQSV9VUkwlL30vdjEvZGVjaXNpb25zL3N0cmVhbT9zdGFydHVwPSR7c3Rh cnR1cH0mc2NvcGVzPSR7U1RSRUFNX1NDT1BFUzotSXAsUmFuZ2V9IgogIGN1cmwgLWZzUyAtLWNv bm5lY3QtdGltZW91dCA1IC0tbWF4LXRpbWUgIiR7TEFQSV9TVFJFQU1fVElNRU9VVDotMzAwfSIg XAogICAgLUggIlgtQXBpLUtleTogJHtBUElfS0VZfSIgXAogICAgLUggIlVzZXItQWdlbnQ6IGNy b3dkc2VjLXVucmFpZC1ib3VuY2VyLzIwMjYuMDUuMTEiIFwKICAgICIkdXJsIgp9CgpleHRyYWN0 X3N0cmVhbV92YWx1ZXMoKSB7CiAgbG9jYWwgZmllbGQ9IiQxIgogIGpxIC1yIC0tYXJnIGZpZWxk ICIkZmllbGQiIC0tYXJnIG9yaWdpbnMgIiQoZWZmZWN0aXZlX29yaWdpbnMpIiAnCiAgICBkZWYg b3JpZ2luX2FsbG93ZWQ6CiAgICAgIGlmICgkb3JpZ2lucyA9PSAiIiBvciAoJG9yaWdpbnMgfCBh c2NpaV9kb3duY2FzZSkgPT0gImFsbCIpIHRoZW4gdHJ1ZQogICAgICBlbHNlICgub3JpZ2luIGFz ICRvcmlnaW4gfCAoJG9yaWdpbnMgfCBzcGxpdCgiLCIpIHwgbWFwKGFzY2lpX2Rvd25jYXNlIHwg Z3N1YigiXlxccyt8XFxzKyQiOyAiIikpIHwgaW5kZXgoJG9yaWdpbiB8IGFzY2lpX2Rvd25jYXNl KSkgIT0gbnVsbCkKICAgICAgZW5kOwogICAgKC5bJGZpZWxkXSAvLyBbXSkKICAgIHwgLltdCiAg ICB8IHNlbGVjdCgoLnR5cGUgLy8gIiIgfCBhc2NpaV9kb3duY2FzZSkgPT0gImJhbiIpCiAgICB8 IHNlbGVjdCgoLnNjb3BlIC8vICIiIHwgYXNjaWlfZG93bmNhc2UpID09ICJpcCIgb3IgKC5zY29w ZSAvLyAiIiB8IGFzY2lpX2Rvd25jYXNlKSA9PSAicmFuZ2UiKQogICAgfCBzZWxlY3Qob3JpZ2lu X2FsbG93ZWQpCiAgICB8IC52YWx1ZQogICcgfAogICAgd2hpbGUgcmVhZCAtciBpcDsgZG8KICAg ICAgWyAteiAiJHtpcDotfSIgXSAmJiBjb250aW51ZQogICAgICBpZiBbWyAiJGlwIiA9PSAqOiog XV07IHRoZW4KICAgICAgICBjb250aW51ZQogICAgICBmaQogICAgICBpc192YWxpZF9pcHY0X29y X2NpZHIgIiRpcCIgfHwgewogICAgICAgIGxvZyAid2FybiIgIlNraXBwaW5nIGludmFsaWQgc3Ry ZWFtIGRlY2lzaW9uOiAke2lwfSIKICAgICAgICBjb250aW51ZQogICAgICB9CiAgICAgIGlmIFsg IiR7U0tJUF9QUklWQVRFX0lQVjQ6LXllc30iID0gInllcyIgXSAmJiBpc19wcml2YXRlX29yX2xv Y2FsX2lwdjQgIiRpcCI7IHRoZW4KICAgICAgICBjb250aW51ZQogICAgICBmaQogICAgICBub3Jt MzIgIiRpcCIKICAgIGRvbmUgfAogICAgc29ydCAtdQp9CgpidWlsZF9jdXJyZW50X2ZpbGUoKSB7 CiAgbG9jYWwgY3VycmVudD0iJDEiCiAgaXB0YWJsZXMgLVMgIiRDU19DSEFJTiIgMj4vZGV2L251 bGwgfAogICAgYXdrIC12IGNoYWluPSIkQ1NfQ0hBSU4iICcKICAgICAgJDE9PSItQSIgJiYgJDI9 PWNoYWluIHsKICAgICAgICBzcmM9IiI7IGRyb3A9MDsKICAgICAgICBmb3IgKGk9MzsgaTw9TkY7 IGkrKykgewogICAgICAgICAgaWYgKCRpPT0iLXMiICYmIChpKzEpPD1ORikgc3JjPSQoaSsxKTsK ICAgICAgICAgIGlmICgkaT09Ii1qIiAmJiAoaSsxKTw9TkYgJiYgJChpKzEpPT0iRFJPUCIpIGRy b3A9MTsKICAgICAgICB9CiAgICAgICAgaWYgKGRyb3A9PTEgJiYgc3JjIT0iIikgcHJpbnQgc3Jj OwogICAgICB9JyB8CiAgICB3aGlsZSByZWFkIC1yIGlwOyBkbwogICAgICBbIC16ICIke2lwOi19 IiBdICYmIGNvbnRpbnVlCiAgICAgIG5vcm0zMiAiJGlwIgogICAgZG9uZSB8CiAgICBzb3J0IC11 ID4gIiRjdXJyZW50Igp9CgpzeW5jX2lwc2V0X2JhY2tlbmQoKSB7CiAgbG9jYWwgc3RhcnR1cD0i JDEiIGRlc2lyZWQgZGVsZXRlZCBzdHJlYW0gcmVzdG9yZV9maWxlIG5ld19jb3VudCBkZWxfY291 bnQgaXAgc2V0X25hbWUgdG1wX3NldAogIHNldF9uYW1lPSIke0lQU0VUX05BTUU6LWNyb3dkc2Vj NH0iCiAgdG1wX3NldD0iJHtzZXRfbmFtZX1fbmV3XyQkIgogIGRlc2lyZWQ9IiQobWt0ZW1wKSIK ICBkZWxldGVkPSIkKG1rdGVtcCkiCiAgc3RyZWFtPSIkKG1rdGVtcCkiCiAgcmVzdG9yZV9maWxl PSIkKG1rdGVtcCkiCiAgdHJhcCAncm0gLWYgIiRkZXNpcmVkIiAiJGRlbGV0ZWQiICIkc3RyZWFt IiAiJHJlc3RvcmVfZmlsZSInIFJFVFVSTgoKICBlbnN1cmVfY2hhaW5fYW5kX2p1bXBzCiAgZW5z dXJlX2lwc2V0X2JhY2tlbmQKICByZW1vdmVfZGlyZWN0X2Jhbl9ydWxlcwogIHN0cmVhbV9kZWNp c2lvbnMgIiRzdGFydHVwIiA+ICIkc3RyZWFtIgogIGpxIC1lIC4gIiRzdHJlYW0iID4vZGV2L251 bGwgfHwgeyBsb2cgImVycm9yIiAiaW52YWxpZCBDcm93ZFNlYyBzdHJlYW0gSlNPTjsgcmVmdXNp bmcgdG8gYXBwbHkgaXBzZXQgc3luYyI7IHJldHVybiAxOyB9CiAgZXh0cmFjdF9zdHJlYW1fdmFs dWVzIG5ldyA8ICIkc3RyZWFtIiA+ICIkZGVzaXJlZCIKICBleHRyYWN0X3N0cmVhbV92YWx1ZXMg ZGVsZXRlZCA8ICIkc3RyZWFtIiA+ICIkZGVsZXRlZCIKICBuZXdfY291bnQ9IiQod2MgLWwgPCAi JGRlc2lyZWQiIHwgdHIgLWQgJyAnKSIKICBkZWxfY291bnQ9IiQod2MgLWwgPCAiJGRlbGV0ZWQi IHwgdHIgLWQgJyAnKSIKCiAgaWYgWyAiJHN0YXJ0dXAiID0gInRydWUiIF07IHRoZW4KICAgIGlw c2V0IGRlc3Ryb3kgIiR0bXBfc2V0IiAyPi9kZXYvbnVsbCB8fCB0cnVlCiAgICB7CiAgICAgIHBy aW50ZiAnY3JlYXRlICVzIGhhc2g6bmV0IGZhbWlseSBpbmV0IG1heGVsZW0gMjYyMTQ0XG4nICIk dG1wX3NldCIKICAgICAgcHJpbnRmICdmbHVzaCAlc1xuJyAiJHRtcF9zZXQiCiAgICB9ID4gIiRy ZXN0b3JlX2ZpbGUiCiAgICB3aGlsZSByZWFkIC1yIGlwOyBkbwogICAgICBbIC16ICIke2lwOi19 IiBdICYmIGNvbnRpbnVlCiAgICAgIHByaW50ZiAnYWRkICVzICVzIC1leGlzdFxuJyAiJHRtcF9z ZXQiICIkaXAiID4+ICIkcmVzdG9yZV9maWxlIgogICAgZG9uZSA8ICIkZGVzaXJlZCIKICAgIGlw c2V0IHJlc3RvcmUgLWV4aXN0IDwgIiRyZXN0b3JlX2ZpbGUiCiAgICBpcHNldCBsaXN0ICIkc2V0 X25hbWUiID4vZGV2L251bGwgMj4mMSB8fAogICAgICBpcHNldCBjcmVhdGUgIiRzZXRfbmFtZSIg aGFzaDpuZXQgZmFtaWx5IGluZXQgbWF4ZWxlbSAyNjIxNDQKICAgIGlwc2V0IHN3YXAgIiR0bXBf c2V0IiAiJHNldF9uYW1lIgogICAgaXBzZXQgZGVzdHJveSAiJHRtcF9zZXQiCiAgICBsb2cgImlu Zm8iICJTZXQgc3luYyBzdGFydHVwPXRydWUgYmFja2VuZD1pcHNldCBzZXQ9JHtzZXRfbmFtZX0g ZW50cmllcz0ke25ld19jb3VudH0iCiAgZWxzZQogICAgOiA+ICIkcmVzdG9yZV9maWxlIgogICAg d2hpbGUgcmVhZCAtciBpcDsgZG8KICAgICAgWyAteiAiJHtpcDotfSIgXSAmJiBjb250aW51ZQog ICAgICBwcmludGYgJ2FkZCAlcyAlcyAtZXhpc3RcbicgIiRzZXRfbmFtZSIgIiRpcCIgPj4gIiRy ZXN0b3JlX2ZpbGUiCiAgICBkb25lIDwgIiRkZXNpcmVkIgogICAgd2hpbGUgcmVhZCAtciBpcDsg ZG8KICAgICAgWyAteiAiJHtpcDotfSIgXSAmJiBjb250aW51ZQogICAgICBwcmludGYgJ2RlbCAl cyAlc1xuJyAiJHNldF9uYW1lIiAiJGlwIiA+PiAiJHJlc3RvcmVfZmlsZSIKICAgIGRvbmUgPCAi JGRlbGV0ZWQiCiAgICBpZiBbIC1zICIkcmVzdG9yZV9maWxlIiBdOyB0aGVuCiAgICAgIGlwc2V0 IHJlc3RvcmUgLWV4aXN0IDwgIiRyZXN0b3JlX2ZpbGUiIHx8IHRydWUKICAgIGZpCiAgICBpZiBb ICIkbmV3X2NvdW50IiAtZ3QgMCBdIHx8IFsgIiRkZWxfY291bnQiIC1ndCAwIF07IHRoZW4KICAg ICAgbG9nICJpbmZvIiAiU2V0IHN5bmMgc3RhcnR1cD1mYWxzZSBiYWNrZW5kPWlwc2V0IHNldD0k e3NldF9uYW1lfSBhZGQ9JHtuZXdfY291bnR9IHJlbW92ZT0ke2RlbF9jb3VudH0iCiAgICBmaQog IGZpCn0KCnN5bmNfb25jZSgpIHsKICBsb2NhbCBzdGFydHVwPSIkezE6LXRydWV9IgogIHJlcXVp cmVfdG9vbHMKICBsb2NhbCBiYWNrZW5kCiAgYmFja2VuZD0iJChlZmZlY3RpdmVfYmFja2VuZCki CgogICgKICAgIGZsb2NrIC1uIDIwMCB8fCB7CiAgICAgIGxvZyAiaW5mbyIgIkFub3RoZXIgc3lu YyBpcyBhbHJlYWR5IHJ1bm5pbmciCiAgICAgIGV4aXQgMAogICAgfQoKICAgIGlmIFsgIiRiYWNr ZW5kIiA9ICJpcHNldCIgXTsgdGhlbgogICAgICBzeW5jX2lwc2V0X2JhY2tlbmQgIiRzdGFydHVw IgogICAgICBleGl0IDAKICAgIGZpCgogICAgbG9jYWwgZGVzaXJlZCBjdXJyZW50IGFkZGVkIHJl bW92ZWQgZGVsZXRlZCBzdHJlYW0gZGVzaXJlZF9jb3VudCBjdXJyZW50X2NvdW50IGFkZF9jb3Vu dCByZW1fY291bnQgZGVsX2NvdW50IGlwCiAgICBkZXNpcmVkPSIkKG1rdGVtcCkiCiAgICBjdXJy ZW50PSIkKG1rdGVtcCkiCiAgICBkZWxldGVkPSIkKG1rdGVtcCkiCiAgICBzdHJlYW09IiQobWt0 ZW1wKSIKICAgIHRyYXAgJ3JtIC1mICIkZGVzaXJlZCIgIiRjdXJyZW50IiAiJGRlbGV0ZWQiICIk c3RyZWFtIicgUkVUVVJOCgogICAgZW5zdXJlX2NoYWluX2FuZF9qdW1wcwogICAgaWYgY3RtX2Ry b3BzX2VuYWJsZWQ7IHRoZW4KICAgICAgaWYgWyAiJGJhY2tlbmQiID0gImRpcmVjdCIgXTsgdGhl bgogICAgICAgIHJlbW92ZV9jdG1fZHJvcF9sb2dfcnVsZXMKICAgICAgZmkKICAgIGVsc2UKICAg ICAgcmVtb3ZlX2N0bV9kcm9wX2xvZ19ydWxlcwogICAgZmkKICAgIHN0cmVhbV9kZWNpc2lvbnMg IiRzdGFydHVwIiA+ICIkc3RyZWFtIgogIGpxIC1lIC4gIiRzdHJlYW0iID4vZGV2L251bGwgfHwg eyBsb2cgImVycm9yIiAiaW52YWxpZCBDcm93ZFNlYyBzdHJlYW0gSlNPTjsgcmVmdXNpbmcgdG8g YXBwbHkgZGlyZWN0IHN5bmMiOyByZXR1cm4gMTsgfQogICAgZXh0cmFjdF9zdHJlYW1fdmFsdWVz IG5ldyA8ICIkc3RyZWFtIiA+ICIkZGVzaXJlZCIKICAgIGV4dHJhY3Rfc3RyZWFtX3ZhbHVlcyBk ZWxldGVkIDwgIiRzdHJlYW0iID4gIiRkZWxldGVkIgogICAgYnVpbGRfY3VycmVudF9maWxlICIk Y3VycmVudCIKCiAgICBpZiBbICIkc3RhcnR1cCIgPSAidHJ1ZSIgXTsgdGhlbgogICAgICBhZGRl ZD0iJChjb21tIC0xMyAiJGN1cnJlbnQiICIkZGVzaXJlZCIpIgogICAgICByZW1vdmVkPSIkKGNv bW0gLTIzICIkY3VycmVudCIgIiRkZXNpcmVkIikiCiAgICBlbHNlCiAgICAgIGFkZGVkPSIkKGNv bW0gLTEzICIkY3VycmVudCIgIiRkZXNpcmVkIikiCiAgICAgIHJlbW92ZWQ9IiQoY2F0ICIkZGVs ZXRlZCIpIgogICAgZmkKICAgIGRlc2lyZWRfY291bnQ9IiQod2MgLWwgPCAiJGRlc2lyZWQiIHwg dHIgLWQgJyAnKSIKICAgIGN1cnJlbnRfY291bnQ9IiQod2MgLWwgPCAiJGN1cnJlbnQiIHwgdHIg LWQgJyAnKSIKICAgIGlmIFsgIiR7TUFYX0RJUkVDVF9SVUxFUzotNTAwMH0iIC1ndCAwIF0gJiYg WyAiJGRlc2lyZWRfY291bnQiIC1ndCAiJHtNQVhfRElSRUNUX1JVTEVTOi01MDAwfSIgXTsgdGhl bgogICAgICBsb2cgImVycm9yIiAiUmVmdXNpbmcgdG8gYXBwbHkgJHtkZXNpcmVkX2NvdW50fSBk aXJlY3QgaXB0YWJsZXMgcnVsZXMgKE1BWF9ESVJFQ1RfUlVMRVM9JHtNQVhfRElSRUNUX1JVTEVT fSk7IGNob29zZSBFc3NlbnRpYWwgbW9kZSBvciBpbnN0YWxsL3VzZSBpcHNldCBmb3IgR2xvYmFs IG1vZGUiCiAgICAgIGV4aXQgMQogICAgZmkKICAgIGFkZF9jb3VudD0iJChwcmludGYgJyVzXG4n ICIkYWRkZWQiIHwgc2VkICcvXiQvZCcgfCB3YyAtbCB8IHRyIC1kICcgJykiCiAgICByZW1fY291 bnQ9IiQocHJpbnRmICclc1xuJyAiJHJlbW92ZWQiIHwgc2VkICcvXiQvZCcgfCB3YyAtbCB8IHRy IC1kICcgJykiCiAgICBkZWxfY291bnQ9IiQod2MgLWwgPCAiJGRlbGV0ZWQiIHwgdHIgLWQgJyAn KSIKCiAgICBpZiBbICIkYWRkX2NvdW50IiAtZXEgMCBdICYmIFsgIiRyZW1fY291bnQiIC1lcSAw IF07IHRoZW4KICAgICAgWyAiJHtMT0dfTEVWRUw6LWluZm99IiA9ICJkZWJ1ZyIgXSAmJiBsb2cg ImRlYnVnIiAiTm8gY2hhbmdlcyBuZWVkZWQgKHN0YXJ0dXA9JHtzdGFydHVwfSBuZXc9JHtkZXNp cmVkX2NvdW50fSBkZWxldGVkPSR7ZGVsX2NvdW50fSBjdXJyZW50PSR7Y3VycmVudF9jb3VudH0p IgogICAgICBleGl0IDAKICAgIGZpCgogICAgbG9nICJpbmZvIiAiU3RyZWFtIHN5bmMgc3RhcnR1 cD0ke3N0YXJ0dXB9IGJhY2tlbmQ9ZGlyZWN0IG1vZGU9JHtQUk9URUNUSU9OX01PREU6LWVzc2Vu dGlhbH0gbmV3PSR7ZGVzaXJlZF9jb3VudH0gZGVsZXRlZD0ke2RlbF9jb3VudH0gY3VycmVudD0k e2N1cnJlbnRfY291bnR9IGFkZD0ke2FkZF9jb3VudH0gcmVtb3ZlPSR7cmVtX2NvdW50fSIKCiAg ICBpZiBbICIkcmVtX2NvdW50IiAtZ3QgMCBdOyB0aGVuCiAgICAgIHdoaWxlIHJlYWQgLXIgaXA7 IGRvCiAgICAgICAgWyAteiAiJHtpcDotfSIgXSAmJiBjb250aW51ZQogICAgICAgIGlmIGhhc19j b21tZW50X21vZHVsZTsgdGhlbgogICAgICAgICAgd2hpbGUgaXB0YWJsZXMgLUQgIiRDU19DSEFJ TiIgLXMgIiRpcCIgLWogRFJPUCAtbSBjb21tZW50IC0tY29tbWVudCBDUk9XRFNFQy1CQU4gMj4v ZGV2L251bGw7IGRvIDo7IGRvbmUKICAgICAgICAgIHdoaWxlIGlwdGFibGVzIC1EICIkQ1NfQ0hB SU4iIC1zICIkaXAiIC1tIGxpbWl0IC0tbGltaXQgIiR7Q1RNX0RST1BTX1JBVEU6LTMwL21pbn0i IC0tbGltaXQtYnVyc3QgIiR7Q1RNX0RST1BTX0JVUlNUOi02MH0iIC1qIExPRyAtLWxvZy1wcmVm aXggIiQoY3RtX2Ryb3BzX3ByZWZpeCkgIiAtLWxvZy1sZXZlbCA0IC1tIGNvbW1lbnQgLS1jb21t ZW50IENST1dEU0VDLURST1AtTE9HIDI+L2Rldi9udWxsOyBkbyA6OyBkb25lCiAgICAgICAgZmkK ICAgICAgICB3aGlsZSBpcHRhYmxlcyAtRCAiJENTX0NIQUlOIiAtcyAiJGlwIiAtaiBEUk9QIDI+ L2Rldi9udWxsOyBkbyA6OyBkb25lCiAgICAgIGRvbmUgPDw8ICIkcmVtb3ZlZCIKICAgIGZpCgog ICAgaWYgWyAiJGFkZF9jb3VudCIgLWd0IDAgXTsgdGhlbgogICAgICB3aGlsZSByZWFkIC1yIGlw OyBkbwogICAgICAgIFsgLXogIiR7aXA6LX0iIF0gJiYgY29udGludWUKICAgICAgICBpZiBoYXNf Y29tbWVudF9tb2R1bGU7IHRoZW4KICAgICAgICAgIGlwdGFibGVzIC1DICIkQ1NfQ0hBSU4iIC1z ICIkaXAiIC1qIERST1AgLW0gY29tbWVudCAtLWNvbW1lbnQgQ1JPV0RTRUMtQkFOIDI+L2Rldi9u dWxsICYmIGNvbnRpbnVlCiAgICAgICAgICBpcHRhYmxlcyAtSSAiJENTX0NIQUlOIiAxIC1zICIk aXAiIC1qIERST1AgLW0gY29tbWVudCAtLWNvbW1lbnQgQ1JPV0RTRUMtQkFOCiAgICAgICAgICBl bnN1cmVfY3RtX2RpcmVjdF9kcm9wX2xvZ19ydWxlICIkaXAiCiAgICAgICAgZWxzZQogICAgICAg ICAgaXB0YWJsZXMgLUMgIiRDU19DSEFJTiIgLXMgIiRpcCIgLWogRFJPUCAyPi9kZXYvbnVsbCAm JiBjb250aW51ZQogICAgICAgICAgaXB0YWJsZXMgLUkgIiRDU19DSEFJTiIgMSAtcyAiJGlwIiAt aiBEUk9QCiAgICAgICAgZmkKICAgICAgZG9uZSA8PDwgIiRhZGRlZCIKICAgIGZpCgogICAgaXB0 YWJsZXMgLUMgIiRDU19DSEFJTiIgLWogUkVUVVJOIDI+L2Rldi9udWxsIHx8IGlwdGFibGVzIC1B ICIkQ1NfQ0hBSU4iIC1qIFJFVFVSTgogICkgMjAwPiIkTE9DS19GSUxFIgp9CgpkYWVtb24oKSB7 CiAgaWYgWyAiJHtFTkFCTEVEOi15ZXN9IiAhPSAieWVzIiBdOyB0aGVuCiAgICBsb2cgImluZm8i ICJEaXNhYmxlZCBpbiAke0NPTkZJR19GSUxFfSIKICAgIGV4aXQgMAogIGZpCiAgbG9nICJpbmZv IiAiRGFlbW9uIHN0YXJ0ZWQiCiAgbG9jYWwgY3RtX2NvbGxlY3Rvcl9waWQ9IiIKICBpZiBjdG1f ZHJvcHNfZW5hYmxlZDsgdGhlbgogICAgY3RtX2Ryb3BfY29sbGVjdG9yICYKICAgIGN0bV9jb2xs ZWN0b3JfcGlkPSIkISIKICAgIHRyYXAgJ1sgLW4gIiRjdG1fY29sbGVjdG9yX3BpZCIgXSAmJiBr aWxsICIkY3RtX2NvbGxlY3Rvcl9waWQiIDI+L2Rldi9udWxsIHx8IHRydWUnIEVYSVQgVEVSTSBJ TlQKICBmaQogIGxvY2FsIHN0YXJ0dXA9InRydWUiCiAgbG9jYWwgbGFzdF9mdWxsPTAgbm93CiAg d2hpbGUgdHJ1ZTsgZG8KICAgIG5vdz0iJChkYXRlICslcykiCiAgICBpZiBbICIke0ZVTExfU1lO Q19JTlRFUlZBTDotOTAwfSIgLWd0IDAgXSAmJiBbICIkc3RhcnR1cCIgPSAiZmFsc2UiIF0gJiYg WyAkKChub3cgLSBsYXN0X2Z1bGwpKSAtZ2UgIiR7RlVMTF9TWU5DX0lOVEVSVkFMOi05MDB9IiBd OyB0aGVuCiAgICAgIHN0YXJ0dXA9InRydWUiCiAgICBmaQogICAgaWYgc3luY19vbmNlICIkc3Rh cnR1cCI7IHRoZW4KICAgICAgZGF0ZSArJXMgPiAiJHtSVU5fRElSfS9sYXN0X3N1Y2Nlc3MiCiAg ICAgIFsgIiRzdGFydHVwIiA9ICJ0cnVlIiBdICYmIGxhc3RfZnVsbD0iJG5vdyIKICAgICAgc3Rh cnR1cD0iZmFsc2UiCiAgICBlbHNlCiAgICAgIGxvZyAiZXJyb3IiICJzeW5jIGZhaWxlZCIKICAg IGZpCiAgICBzbGVlcCAiJHtVUERBVEVfSU5URVJWQUw6LTEwfSIKICBkb25lCn0KCnN0YXR1cygp IHsKICBlY2hvICIke1BMVUdJTl9OQU1FfSIKICBlY2hvICJjb25maWc6ICR7Q09ORklHX0ZJTEV9 IgogIGlmIFsgLWYgIiRQSURfRklMRSIgXSAmJiBraWxsIC0wICIkKGNhdCAiJFBJRF9GSUxFIiki IDI+L2Rldi9udWxsOyB0aGVuCiAgICBlY2hvICJkYWVtb246IHJ1bm5pbmcgcGlkICQoY2F0ICIk UElEX0ZJTEUiKSIKICBlbHNlCiAgICBlY2hvICJkYWVtb246IHN0b3BwZWQiCiAgZmkKICBlY2hv CiAgZWNobyAiaXB0YWJsZXMgY2hhaW5zOiIKICBmb3IgY2hhaW4gaW4gJElQVEFCTEVTX0NIQUlO UzsgZG8KICAgIGlmIGlwdGFibGVzIC1uTCAiJGNoYWluIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4K ICAgICAgaXB0YWJsZXMgLXZueEwgIiRjaGFpbiIgLS1saW5lLW51bWJlcnMgfCBzZWQgLW4gJzEs OHAnCiAgICBlbHNlCiAgICAgIGVjaG8gIi0gJHtjaGFpbn06IG1pc3NpbmciCiAgICBmaQogICAg ZWNobwogIGRvbmUKICBpZiBpcHRhYmxlcyAtbkwgIiRDU19DSEFJTiIgPi9kZXYvbnVsbCAyPiYx OyB0aGVuCiAgICBpcHRhYmxlcyAtdm54TCAiJENTX0NIQUlOIiAtLWxpbmUtbnVtYmVycyB8IHNl ZCAtbiAnMSwyMHAnCiAgZWxzZQogICAgZWNobyAiJHtDU19DSEFJTn06IG1pc3NpbmciCiAgZmkK fQoKdGVzdF9jb25maWcoKSB7CiAgcmVxdWlyZV90b29scwogIGVuc3VyZV9hcGlfa2V5CiAgZWNo byAiT0s6IHJlcXVpcmVkIHRvb2xzL2NvbnRhaW5lciBmb3VuZCIKICBlY2hvICJMQVBJIFVSTDog JHtMQVBJX1VSTH0iCiAgZWNobyAiQVBJIGtleTogY29uZmlndXJlZCIKICBlY2hvICJQcm90ZWN0 aW9uIG1vZGU6ICR7UFJPVEVDVElPTl9NT0RFOi1lc3NlbnRpYWx9IgogIGVjaG8gIkZpcmV3YWxs IGJhY2tlbmQ6ICQoZWZmZWN0aXZlX2JhY2tlbmQpIgogIGVjaG8gIlN0cmVhbSBvcmlnaW5zOiAk KGVmZmVjdGl2ZV9vcmlnaW5zKSIKICBpZiBbICIkKGVmZmVjdGl2ZV9iYWNrZW5kKSIgPSAiaXBz ZXQiIF07IHRoZW4KICAgIGNvbW1hbmQgLXYgaXBzZXQgPi9kZXYvbnVsbCAyPiYxICYmIGVjaG8g Imlwc2V0OiBhdmFpbGFibGUiIHx8IGVjaG8gImlwc2V0OiBtaXNzaW5nIgogIGZpCiAgZWNobyAi Q29uZmlndXJlZCBjaGFpbnM6ICR7SVBUQUJMRVNfQ0hBSU5TfSIKICBmb3IgY2hhaW4gaW4gJElQ VEFCTEVTX0NIQUlOUzsgZG8KICAgIGlmIGlwdGFibGVzIC1uTCAiJGNoYWluIiA+L2Rldi9udWxs IDI+JjE7IHRoZW4KICAgICAgZWNobyAiT0s6IGNoYWluICR7Y2hhaW59IGV4aXN0cyIKICAgIGVs c2UKICAgICAgZWNobyAiV0FSTjogY2hhaW4gJHtjaGFpbn0gZG9lcyBub3QgZXhpc3QiCiAgICBm aQogIGRvbmUKICBlY2hvICJDcm93ZFNlYyBzdHJlYW0gdmlzaWJsZToiCiAgc3RyZWFtX2RlY2lz aW9ucyB0cnVlIHwganEgLS1hcmcgb3JpZ2lucyAiJChlZmZlY3RpdmVfb3JpZ2lucykiICcKICAg IGRlZiBvcmlnaW5fYWxsb3dlZDoKICAgICAgaWYgKCRvcmlnaW5zID09ICIiIG9yICgkb3JpZ2lu cyB8IGFzY2lpX2Rvd25jYXNlKSA9PSAiYWxsIikgdGhlbiB0cnVlCiAgICAgIGVsc2UgKC5vcmln aW4gYXMgJG9yaWdpbiB8ICgkb3JpZ2lucyB8IHNwbGl0KCIsIikgfCBtYXAoYXNjaWlfZG93bmNh c2UgfCBnc3ViKCJeXFxzK3xcXHMrJCI7ICIiKSkgfCBpbmRleCgkb3JpZ2luIHwgYXNjaWlfZG93 bmNhc2UpKSAhPSBudWxsKQogICAgICBlbmQ7CiAgICB7CiAgICAgIHJhd19uZXdfY291bnQ6ICgu bmV3IC8vIFtdIHwgbGVuZ3RoKSwKICAgICAgcmF3X2RlbGV0ZWRfY291bnQ6ICguZGVsZXRlZCAv LyBbXSB8IGxlbmd0aCksCiAgICAgIGZpbHRlcmVkX25ld19jb3VudDogKC5uZXcgLy8gW10gfCBt YXAoc2VsZWN0KCgudHlwZSAvLyAiIiB8IGFzY2lpX2Rvd25jYXNlKSA9PSAiYmFuIikgfCBzZWxl Y3QoKC5zY29wZSAvLyAiIiB8IGFzY2lpX2Rvd25jYXNlKSA9PSAiaXAiIG9yICguc2NvcGUgLy8g IiIgfCBhc2NpaV9kb3duY2FzZSkgPT0gInJhbmdlIikgfCBzZWxlY3Qob3JpZ2luX2FsbG93ZWQp KSB8IGxlbmd0aCksCiAgICAgIG9yaWdpbnM6ICgubmV3IC8vIFtdIHwgZ3JvdXBfYnkoLm9yaWdp bikgfCBtYXAoe29yaWdpbjogLlswXS5vcmlnaW4sIGNvdW50OiBsZW5ndGh9KSksCiAgICAgIHNh bXBsZTogKC5uZXcgLy8gW10gfCBtYXAoc2VsZWN0KG9yaWdpbl9hbGxvd2VkKSkgfCAuWzA6NV0p CiAgICB9Jwp9CgpjbWQ9IiR7MTotfSIKY2FzZSAiJGNtZCIgaW4KICBzeW5jKSBzeW5jX29uY2Ug dHJ1ZSA7OwogIGRhZW1vbikgZGFlbW9uIDs7CiAgaGVhbHRoKSBoZWFsdGhfY2hlY2sgIiR7Mjot fSIgOzsKICBpbnN0YWxsKSByZXF1aXJlX3Rvb2xzOyBlbnN1cmVfY2hhaW5fYW5kX2p1bXBzIDs7 CiAgc3RhdHVzKSBzdGF0dXMgOzsKICB0ZXN0KSB0ZXN0X2NvbmZpZyA7OwogIC1ofC0taGVscHxo ZWxwKSB1c2FnZSA7OwogICopIHVzYWdlOyBleGl0IDEgOzsKZXNhYwo= B64_BIN chmod 755 /usr/local/sbin/crowdsec-unraid-bouncer base64 -d > /etc/rc.d/rc.crowdsec-unraid-bouncer <<'B64_RC' IyEvYmluL2Jhc2gKClNFUlZJQ0U9ImNyb3dkc2VjLXVucmFpZC1ib3VuY2VyIgpCSU49Ii91c3Iv bG9jYWwvc2Jpbi8ke1NFUlZJQ0V9IgpSVU5fRElSPSIvdmFyL3J1bi8ke1NFUlZJQ0V9IgpQSURf RklMRT0iJHtSVU5fRElSfS8ke1NFUlZJQ0V9LnBpZCIKTE9HX0ZJTEU9Ii92YXIvbG9nLyR7U0VS VklDRX0ubG9nIgoKbWtkaXIgLXAgIiRSVU5fRElSIgoKaXNfcnVubmluZygpIHsKICBbIC1mICIk UElEX0ZJTEUiIF0gJiYga2lsbCAtMCAiJChjYXQgIiRQSURfRklMRSIpIiAyPi9kZXYvbnVsbAp9 CgpzdGFydCgpIHsKICBpZiBpc19ydW5uaW5nOyB0aGVuCiAgICBlY2hvICIke1NFUlZJQ0V9IGFs cmVhZHkgcnVubmluZyIKICAgIGV4aXQgMAogIGZpCiAgaWYgWyAhIC14ICIkQklOIiBdOyB0aGVu CiAgICBlY2hvICIke0JJTn0gaXMgbWlzc2luZyBvciBub3QgZXhlY3V0YWJsZSIgPiYyCiAgICBl eGl0IDEKICBmaQogIHNldHNpZCAiJEJJTiIgZGFlbW9uID4+ICIkTE9HX0ZJTEUiIDI+JjEgJgog IGVjaG8gJCEgPiAiJFBJRF9GSUxFIgogIGVjaG8gIlN0YXJ0ZWQgJHtTRVJWSUNFfSB3aXRoIHBp ZCAkKGNhdCAiJFBJRF9GSUxFIikiCn0KCnN0b3AoKSB7CiAgaWYgaXNfcnVubmluZzsgdGhlbgog ICAga2lsbCAiJChjYXQgIiRQSURfRklMRSIpIiAyPi9kZXYvbnVsbCB8fCB0cnVlCiAgICBzbGVl cCAxCiAgICBpZiBpc19ydW5uaW5nOyB0aGVuCiAgICAgIGtpbGwgLTkgIiQoY2F0ICIkUElEX0ZJ TEUiKSIgMj4vZGV2L251bGwgfHwgdHJ1ZQogICAgZmkKICBmaQogIHJtIC1mICIkUElEX0ZJTEUi CiAgZWNobyAiU3RvcHBlZCAke1NFUlZJQ0V9Igp9CgpzdGF0dXMoKSB7CiAgaWYgaXNfcnVubmlu ZzsgdGhlbgogICAgZWNobyAiJHtTRVJWSUNFfSBydW5uaW5nIHdpdGggcGlkICQoY2F0ICIkUElE X0ZJTEUiKSIKICBlbHNlCiAgICBlY2hvICIke1NFUlZJQ0V9IHN0b3BwZWQiCiAgZmkKfQoKY2Fz ZSAiJHsxOi19IiBpbgogIHN0YXJ0KSBzdGFydCA7OwogIHN0b3ApIHN0b3AgOzsKICByZXN0YXJ0 KSBzdG9wOyBzdGFydCA7OwogIHN0YXR1cykgc3RhdHVzIDs7CiAgc3luYykgIiRCSU4iIHN5bmMg OzsKICBoZWFsdGgpICIkQklOIiBoZWFsdGggLS1ub3RpZnkgOzsKICAqKSBlY2hvICJVc2FnZTog JDAge3N0YXJ0fHN0b3B8cmVzdGFydHxzdGF0dXN8c3luY3xoZWFsdGh9IjsgZXhpdCAxIDs7CmVz YWMK B64_RC chmod 755 /etc/rc.d/rc.crowdsec-unraid-bouncer base64 -d > "${WEB_DIR}/crowdsec-unraid-bouncer.png" <<'B64_ICON' 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 YVOhOAAAAABJRU5ErkJggg== B64_ICON chmod 644 "${WEB_DIR}/crowdsec-unraid-bouncer.png" base64 -d > "${WEB_DIR}/README.md" <<'B64_README' IyBDcm93ZFNlYyBVbnJhaWQgQm91bmNlcgoKVW5yYWlkIHBsdWdpbiB0aGF0IGFwcGxpZXMgQ3Jv d2RTZWMgSVAgYmFucyB0byB0aGUgaG9zdCBmaXJld2FsbCBhbmQgRG9ja2VyLWV4cG9zZWQgY29u dGFpbmVycy4KCkl0IGV4aXN0cyBiZWNhdXNlIERvY2tlci1wdWJsaXNoZWQgcG9ydHMgdXN1YWxs eSBwYXNzIHRocm91Z2ggYEZPUldBUkRgIGFuZCBgRE9DS0VSLVVTRVJgLCBub3Qgb25seSBgSU5Q VVRgLiBBIGJhbiB0aGF0IGlzIG9ubHkgYXR0YWNoZWQgdG8gYElOUFVUYCBjYW4gcHJvdGVjdCBT U0ggYW5kIGhvc3Qgc2VydmljZXMgd2hpbGUgbGVhdmluZyBEb2NrZXIgY29udGFpbmVycyByZWFj aGFibGUuCgojIyBXaGF0IEl0IERvZXMKCi0gUmVhZHMgYWN0aXZlIENyb3dkU2VjIGJhbiBkZWNp c2lvbnMgZnJvbSBhIGxvY2FsIENyb3dkU2VjIERvY2tlciBjb250YWluZXIuCi0gVXNlcyB0aGUg Q3Jvd2RTZWMgTG9jYWwgQVBJIGJvdW5jZXIgc3RyZWFtIGVuZHBvaW50LgotIENyZWF0ZXMgb3Ig cmV1c2VzIHRoZSBgQ1JPV0RTRUNgIGlwdGFibGVzIGNoYWluLgotIEFkZHMganVtcHMgZnJvbSBg SU5QVVRgIGFuZCBgRE9DS0VSLVVTRVJgIHRvIGBDUk9XRFNFQ2AuCi0gQWRkcy9yZW1vdmVzIGBE Uk9QYCBydWxlcyBmb3IgYWN0aXZlIENyb3dkU2VjIElQIGJhbnMuCi0gUnVucyBhcyBhIHNtYWxs IFVucmFpZCBzZXJ2aWNlIGFuZCBzdGFydHMgYXQgYm9vdC4KLSBLZWVwcyBjb25maWd1cmF0aW9u IG9uIHRoZSBmbGFzaCBkcml2ZS4KCiMjIFJlcXVpcmVtZW50cwoKLSBVbnJhaWQgNi83Ci0gRG9j a2VyIGVuYWJsZWQKLSBBIHJ1bm5pbmcgQ3Jvd2RTZWMgY29udGFpbmVyIHdpdGggYGNzY2xpYCBh dmFpbGFibGUsIGRlZmF1bHQgbmFtZTogYGNyb3dkc2VjYAotIEhvc3QgYGlwdGFibGVzYAoKTm8g YGlwc2V0YCBkZXBlbmRlbmN5IGlzIHJlcXVpcmVkLiBUaGlzIGlzIGludGVudGlvbmFsIGZvciBz dG9jayBVbnJhaWQgc3lzdGVtcy4KCiMjIEluc3RhbGwKCkluc3RhbGwgdGhlIGAucGxnYCBmaWxl IHRocm91Z2ggVW5yYWlkIFBsdWdpbnMsIG9yIGZyb20gYSBzaGVsbDoKCmBgYGJhc2gKcGx1Z2lu IGluc3RhbGwgL2Jvb3QvY29uZmlnL3BsdWdpbnMvY3Jvd2RzZWMtdW5yYWlkLWJvdW5jZXIvY3Jv d2RzZWMtdW5yYWlkLWJvdW5jZXIucGxnCmBgYAoKIyMgQ29uZmlndXJhdGlvbgoKVGhlIHBsdWdp biBhZGRzIGFuIFVucmFpZCBzZXR0aW5ncyBwYWdlOgoKYGBgdGV4dApTZXR0aW5ncyAtPiBDcm93 ZFNlYyBVbnJhaWQgQm91bmNlcgpgYGAKCkZyb20gdGhlIHBhZ2UgeW91IGNhbiBlbmFibGUvZGlz YWJsZSB0aGUgc2VydmljZSwgY2hhbmdlIHRoZSBDcm93ZFNlYyBjb250YWluZXIgbmFtZSwgY2hv b3NlIHByb3RlY3RlZCBpcHRhYmxlcyBjaGFpbnMsIHJ1biBzeW5jL3Rlc3QgYWN0aW9ucywgYW5k IGluc3BlY3Qgc3RhdHVzL2xvZyBvdXRwdXQuCgpDb25maWcgZmlsZToKCmBgYGJhc2gKL2Jvb3Qv Y29uZmlnL3BsdWdpbnMvY3Jvd2RzZWMtdW5yYWlkLWJvdW5jZXIvY29uZmlnLmNmZwpgYGAKCkRl ZmF1bHQgY29uZmlnOgoKYGBgYmFzaApFTkFCTEVEPSJ5ZXMiCkNTX0NPTlRBSU5FUj0iY3Jvd2Rz ZWMiCkxBUElfVVJMPSJodHRwOi8vMTI3LjAuMC4xOjgwODIiCkFQSV9LRVk9IiIKQ1NfQ0hBSU49 IkNST1dEU0VDIgpJUFRBQkxFU19DSEFJTlM9IklOUFVUIERPQ0tFUi1VU0VSIgpVUERBVEVfSU5U RVJWQUw9IjEwIgpGVUxMX1NZTkNfSU5URVJWQUw9IjkwMCIKREVDSVNJT05fTElNSVQ9IjEwMDAw MDAiCkxPR19MRVZFTD0iaW5mbyIKU0tJUF9QUklWQVRFX0lQVjQ9InllcyIKU1RSRUFNX1NDT1BF Uz0iSXAsUmFuZ2UiClNUUkVBTV9PUklHSU5TPSJjcm93ZHNlYyxjc2NsaSIKTUFYX0RJUkVDVF9S VUxFUz0iNTAwMCIKUFJPVEVDVElPTl9NT0RFPSJlc3NlbnRpYWwiCkZJUkVXQUxMX0JBQ0tFTkQ9 ImF1dG8iCklQU0VUX05BTUU9ImNyb3dkc2VjNCIKYGBgCgpJZiB5b3VyIENyb3dkU2VjIGNvbnRh aW5lciBoYXMgYW5vdGhlciBuYW1lLCBjaGFuZ2UgYENTX0NPTlRBSU5FUmAuCklmIGBBUElfS0VZ YCBpcyBlbXB0eSwgdGhlIHBsdWdpbiBjcmVhdGVzIGEgZGVkaWNhdGVkIENyb3dkU2VjIGJvdW5j ZXIga2V5IGF1dG9tYXRpY2FsbHkgYW5kIHN0b3JlcyBpdCBpbiB0aGUgY29uZmlnIGZpbGUuCmBG VUxMX1NZTkNfSU5URVJWQUw9IjkwMCJgIGZvcmNlcyBhIGNvbXBsZXRlIENyb3dkU2VjIHN0cmVh bSByZWxvYWQgZXZlcnkgMTUgbWludXRlcyBzbyBhIG1pc3NlZCBpbmNyZW1lbnRhbCB1cGRhdGUg aXMgY29ycmVjdGVkIGF1dG9tYXRpY2FsbHkuIFNldCBpdCB0byBgMGAgdG8gZGlzYWJsZSB0aGlz IHNhZmV0eSByZWxvYWQuCmBTVFJFQU1fT1JJR0lOUz0iY3Jvd2RzZWMsY3NjbGkiYCBpcyB0aGUg c2FmZSBkZWZhdWx0IGZvciBkaXJlY3QgaXB0YWJsZXMgcnVsZXMuIEdsb2JhbCBDQVBJL2xpc3Qg ZGVjaXNpb25zIGNhbiBiZSB2ZXJ5IGxhcmdlIGFuZCBzaG91bGQgdXNlIGEgc2V0LWJhc2VkIGJh Y2tlbmQgc3VjaCBhcyBpcHNldCBvciBuZnQgc2V0cy4KCiMjIFByb3RlY3Rpb24gTW9kZXMKCi0g KipFc3NlbnRpYWwgc2hpZWxkKio6IGxvY2FsIENyb3dkU2VjIGRlY2lzaW9ucyBwbHVzIG1hbnVh bGx5IGFkZGVkIGBjc2NsaWAgZGVjaXNpb25zLiBUaGlzIGlzIHRoZSBzYWZlIGRlZmF1bHQgYW5k IHdvcmtzIHdpdGggZGlyZWN0IGlwdGFibGVzIHJ1bGVzLgotICoqR2xvYmFsIHNoaWVsZCoqOiBs b2NhbCBkZWNpc2lvbnMgcGx1cyBDQVBJL2xpc3RzLiBUaGlzIGNhbiBiZSB0ZW5zIG9mIHRob3Vz YW5kcyBvZiBlbnRyaWVzIGFuZCByZXF1aXJlcyB0aGUgYGlwc2V0YCBiYWNrZW5kLgotICoqQ3Vz dG9tIG9yaWdpbnMqKjogdXNlcyB0aGUgZXhhY3QgYFNUUkVBTV9PUklHSU5TYCB2YWx1ZS4KCiMj IEJhY2tlbmRzCgotICoqYXV0byoqOiBkaXJlY3QgaXB0YWJsZXMgZm9yIEVzc2VudGlhbC9DdXN0 b20sIGlwc2V0IGZvciBHbG9iYWwuCi0gKippcHRhYmxlcyBkaXJlY3QqKjogb25lIERST1AgcnVs ZSBwZXIgZGVjaXNpb24sIGJlc3QgZm9yIHNtYWxsIGxvY2FsIGRlY2lzaW9uIHNldHMuCi0gKipp cHNldCoqOiBvbmUgaXB0YWJsZXMgcnVsZSBwbHVzIG1hbnkgZW50cmllcyBpbiBhbiBJUCBzZXQs IGJlc3QgZm9yIEdsb2JhbCBzaGllbGQuCgojIyBDcm93ZFNlYyBUaHJlYXQgTWFwIERyb3BzIEV4 cG9ydAoKVGhlIG9wdGlvbmFsICoqQ3Jvd2RTZWMgVGhyZWF0IE1hcCBkcm9wcyBleHBvcnQqKiBz ZXR0aW5nIGFkZHMgdmlzaWJpbGl0eSBmb3IgcGFja2V0cyB0aGF0IGFyZSBhY3R1YWxseSBkcm9w cGVkIGJ5IHRoZSBVbnJhaWQgZmlyZXdhbGwuCgpXaGVuIGVuYWJsZWQsIHRoZSBwbHVnaW46Cgot IGFkZHMgcmF0ZS1saW1pdGVkIG5ldGZpbHRlciBgTE9HYCBydWxlcyBvbmx5IGluIGZyb250IG9m IENyb3dkU2VjLW1hbmFnZWQgYERST1BgIHJ1bGVzOwotIHJlYWRzIG1hdGNoaW5nIGBDUk9XRFNF Q19EUk9QYCBrZXJuZWwvc3lzbG9nIGxpbmVzOwotIHdyaXRlcyBjb21wYWN0IEpTT05MIGV2ZW50 cyBmb3IgQ3Jvd2RTZWMgVGhyZWF0IE1hcDsKLSBjYXBzIHRoZSBKU09OTCBmaWxlIHNvIGl0IGNh bm5vdCBncm93IGZvcmV2ZXIuCgpEZWZhdWx0IG91dHB1dDoKCmBgYGJhc2gKL21udC9jYWNoZS9h cHBkYXRhL2Nyb3dkc2VjLXRocmVhdC1tYXAvZHJvcHMvZHJvcHMuanNvbmwKYGBgCgpUaGUgVGhy ZWF0IE1hcCBjb250YWluZXIgc2hvdWxkIG1vdW50IHRoZSBwYXJlbnQgZm9sZGVyIHJlYWQtb25s eToKCmBgYHRleHQKL21udC9jYWNoZS9hcHBkYXRhL2Nyb3dkc2VjLXRocmVhdC1tYXAvZHJvcHMg LT4gL2Nyb3dkc2VjL2Ryb3BzOnJvCmBgYAoKYW5kIHVzZToKCmBgYHRleHQKRFJPUFNfRU5BQkxF RD10cnVlCkRST1BTX0xPR19QQVRIPS9jcm93ZHNlYy9kcm9wcy9kcm9wcy5qc29ubApgYGAKClRo aXMgZXhwb3J0IGlzIG9wdGlvbmFsIGFuZCBkb2VzIG5vdCBjaGFuZ2UgdGhlIGZpcmV3YWxsIGRl Y2lzaW9uIHNvdXJjZS4gSXQgb25seSByZWNvcmRzIHBhY2tldHMgdGhhdCB3ZXJlIGFscmVhZHkg bWF0Y2hlZCBieSBDcm93ZFNlYyBibG9jayBydWxlcy4gS2VlcCB0aGUgbG9nIHJhdGUgbGltaXQg Y29uc2VydmF0aXZlIHRvIGF2b2lkIHN5c2xvZyBub2lzZSBkdXJpbmcgYXR0YWNrcy4KCiMjIENv bW1hbmRzCgpgYGBiYXNoCi9ldGMvcmMuZC9yYy5jcm93ZHNlYy11bnJhaWQtYm91bmNlciBzdGFy dAovZXRjL3JjLmQvcmMuY3Jvd2RzZWMtdW5yYWlkLWJvdW5jZXIgc3RvcAovZXRjL3JjLmQvcmMu Y3Jvd2RzZWMtdW5yYWlkLWJvdW5jZXIgcmVzdGFydAovZXRjL3JjLmQvcmMuY3Jvd2RzZWMtdW5y YWlkLWJvdW5jZXIgc3RhdHVzCmNyb3dkc2VjLXVucmFpZC1ib3VuY2VyIHRlc3QKY3Jvd2RzZWMt dW5yYWlkLWJvdW5jZXIgc3RhdHVzCmNyb3dkc2VjLXVucmFpZC1ib3VuY2VyIHN5bmMKYGBgCgoj IyBWZXJpZnkKCmBgYGJhc2gKaXB0YWJsZXMgLXZueEwgRE9DS0VSLVVTRVIgLS1saW5lLW51bWJl cnMKaXB0YWJsZXMgLXZueEwgQ1JPV0RTRUMgLS1saW5lLW51bWJlcnMKYGBgCgpZb3Ugc2hvdWxk IHNlZSBgRE9DS0VSLVVTRVJgIGp1bXBpbmcgdG8gYENST1dEU0VDYCwgYW5kIGBDUk9XRFNFQ2Ag c2hvdWxkIGNvbnRhaW4gYWN0aXZlIENyb3dkU2VjIGJhbnMuCgojIyBSZW1vdmUKClVzZSBVbnJh aWQgUGx1Z2luIE1hbmFnZXIsIG9yOgoKYGBgYmFzaApwbHVnaW4gcmVtb3ZlIGNyb3dkc2VjLXVu cmFpZC1ib3VuY2VyLnBsZwpgYGAKClJlbW92YWwgc3RvcHMgdGhlIGRhZW1vbiBhbmQgcmVtb3Zl cyBydW50aW1lIGZpbGVzLiBJdCBsZWF2ZXMgYGNvbmZpZy5jZmdgIGluIHBsYWNlIGJ5IGRlZmF1 bHQgc28gcmVpbnN0YWxsaW5nIGtlZXBzIHNldHRpbmdzLgoKIyMgTm90ZXMKClRoZSBvZmZpY2lh bCBDcm93ZFNlYyBmaXJld2FsbCBib3VuY2VyIGlzIGV4Y2VsbGVudCwgYnV0IGl0cyBpcHRhYmxl cyBtb2RlIGNvbW1vbmx5IGRlcGVuZHMgb24gYGlwc2V0YC4gU3RvY2sgVW5yYWlkIHN5c3RlbXMg bWF5IG5vdCBpbmNsdWRlIGBpcHNldGAsIHNvIHRoaXMgcGx1Z2luIHVzZXMgdGhlIHNhbWUgQ3Jv d2RTZWMgTG9jYWwgQVBJIGRlY2lzaW9uIHN0cmVhbSB3aXRoIGRpcmVjdCBpcHRhYmxlcyBydWxl cyB0aGF0IHdvcmsgb24gYSBjbGVhbiBVbnJhaWQgaW5zdGFsbC4K B64_README base64 -d > "${WEB_DIR}/CrowdSecUnraidBouncer.page" <<'B64_PAGE' TWVudT0iTmV0d29ya1NlcnZpY2VzIgpUaXRsZT0iQ3Jvd2RTZWMgVW5yYWlkIEJvdW5jZXIiCklj b249InNoaWVsZCIKVGFnPSJzaGllbGQiCi0tLQo8P1BIUAokY2ZnRmlsZSA9ICIvYm9vdC9jb25m aWcvcGx1Z2lucy9jcm93ZHNlYy11bnJhaWQtYm91bmNlci9jb25maWcuY2ZnIjsKJGNmZyA9IGZp bGVfZXhpc3RzKCRjZmdGaWxlKSA/IHBhcnNlX2luaV9maWxlKCRjZmdGaWxlKSA6IFtdOwokY3Ny ZlRva2VuID0gaHRtbHNwZWNpYWxjaGFycygkdmFyWyJjc3JmX3Rva2VuIl0gPz8gIiIsIEVOVF9R VU9URVMpOwpmdW5jdGlvbiBjdWJfdmFsdWUoJGNmZywgJGtleSwgJGRlZmF1bHQpIHsKICByZXR1 cm4gaHRtbHNwZWNpYWxjaGFycygkY2ZnWyRrZXldID8/ICRkZWZhdWx0LCBFTlRfUVVPVEVTKTsK fQpmdW5jdGlvbiBjdWJfY2hlY2tlZCgkY2ZnLCAka2V5LCAkdmFsdWUsICRkZWZhdWx0KSB7CiAg cmV0dXJuICgoJGNmZ1ska2V5XSA/PyAkZGVmYXVsdCkgPT0gJHZhbHVlKSA/ICJzZWxlY3RlZCIg OiAiIjsKfQpmdW5jdGlvbiBjdWJfY21kKCRjbWQpIHsKICByZXR1cm4gaHRtbHNwZWNpYWxjaGFy cyh0cmltKHNoZWxsX2V4ZWMoJGNtZCAuICIgMj4mMSIpID8/ICIiKSwgRU5UX1FVT1RFUyk7Cn0K JHNlcnZpY2UgPSBjdWJfY21kKCIvZXRjL3JjLmQvcmMuY3Jvd2RzZWMtdW5yYWlkLWJvdW5jZXIg c3RhdHVzIik7CiRzdW1tYXJ5ID0gY3ViX2NtZCgiY3Jvd2RzZWMtdW5yYWlkLWJvdW5jZXIgc3Rh dHVzIHwgc2VkIC1uICcxLDgwcCciKTsKJGxvZyA9IGN1Yl9jbWQoInRhaWwgLTgwIC92YXIvbG9n L2Nyb3dkc2VjLXVucmFpZC1ib3VuY2VyLmxvZyAyPi9kZXYvbnVsbCIpOwo/PgoKPHN0eWxlPgou Y3ViLWdyaWR7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoYXV0by1m aXQsbWlubWF4KDI2MHB4LDFmcikpO2dhcDoxNnB4O21hcmdpbjoxNnB4IDB9Ci5jdWItYm94e2Jv cmRlcjoxcHggc29saWQgdmFyKC0tdGFibGUtYm9yZGVyLCMzMDM2M2QpO2JvcmRlci1yYWRpdXM6 NnB4O3BhZGRpbmc6MTRweDtiYWNrZ3JvdW5kOnJnYmEoMTI3LDEyNywxMjcsLjA1KX0KLmN1Yi1i b3ggaDN7bWFyZ2luLXRvcDowfQouY3ViLWFjdGlvbnN7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3 cmFwO2dhcDo4cHg7bWFyZ2luLXRvcDoxMnB4fQouY3ViLXByZXttYXgtaGVpZ2h0OjM2MHB4O292 ZXJmbG93OmF1dG87d2hpdGUtc3BhY2U6cHJlLXdyYXA7Zm9udC1mYW1pbHk6bW9ub3NwYWNlO2Jh Y2tncm91bmQ6cmdiYSgwLDAsMCwuMTgpO3BhZGRpbmc6MTJweDtib3JkZXItcmFkaXVzOjZweH0K LmN1Yi1ub3Rle29wYWNpdHk6Ljh9Ci5jdWItZnJhbWV7d2lkdGg6MTAwJTttaW4taGVpZ2h0OjE4 MHB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tdGFibGUtYm9yZGVyLCMzMDM2M2QpO2JvcmRlci1y YWRpdXM6NnB4O2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMTIpfQo8L3N0eWxlPgoKPGRpdiBjbGFz cz0iY3ViLWdyaWQiPgogIDxkaXYgY2xhc3M9ImN1Yi1ib3giPgogICAgPGgzPlNlcnZpY2U8L2gz PgogICAgPHA+PGI+PD89ICRzZXJ2aWNlID86ICJ1bmtub3duIiA/PjwvYj48L3A+CiAgICA8Zm9y bSBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iL3BsdWdpbnMvY3Jvd2RzZWMtdW5yYWlkLWJvdW5jZXIv aW5jbHVkZS9Dcm93ZFNlY1VucmFpZEJvdW5jZXIucGhwIiB0YXJnZXQ9InByb2dyZXNzRnJhbWUi PgogICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjc3JmX3Rva2VuIiB2YWx1ZT0iPD89 ICRjc3JmVG9rZW4gPz4iPgogICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJtb2RlIiB2 YWx1ZT0iYWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0iY3ViLWFjdGlvbnMiPgogICAgICAgIDxp bnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9ImFjdGlvbiIgdmFsdWU9InN0YXJ0Ij4KICAgICAgICA8 aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJhY3Rpb24iIHZhbHVlPSJzdG9wIj4KICAgICAgICA8 aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJhY3Rpb24iIHZhbHVlPSJyZXN0YXJ0Ij4KICAgICAg ICA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJhY3Rpb24iIHZhbHVlPSJzeW5jIj4KICAgICAg ICA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJhY3Rpb24iIHZhbHVlPSJ0ZXN0Ij4KICAgICAg ICA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJhY3Rpb24iIHZhbHVlPSJoZWFsdGgiPgogICAg ICA8L2Rpdj4KICAgIDwvZm9ybT4KICA8L2Rpdj4KCiAgPGRpdiBjbGFzcz0iY3ViLWJveCI+CiAg ICA8aDM+RmlyZXdhbGw8L2gzPgogICAgPHAgY2xhc3M9ImN1Yi1ub3RlIj5Qcm90ZWN0cyBob3N0 IHNlcnZpY2VzIHRocm91Z2ggSU5QVVQgYW5kIERvY2tlciBwdWJsaXNoZWQgcG9ydHMgdGhyb3Vn aCBET0NLRVItVVNFUi48L3A+CiAgICA8Zm9ybSBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iL3BsdWdp bnMvY3Jvd2RzZWMtdW5yYWlkLWJvdW5jZXIvaW5jbHVkZS9Dcm93ZFNlY1VucmFpZEJvdW5jZXIu cGhwIiB0YXJnZXQ9InByb2dyZXNzRnJhbWUiPgogICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBu YW1lPSJjc3JmX3Rva2VuIiB2YWx1ZT0iPD89ICRjc3JmVG9rZW4gPz4iPgogICAgICA8aW5wdXQg dHlwZT0iaGlkZGVuIiBuYW1lPSJtb2RlIiB2YWx1ZT0iYWN0aW9uIj4KICAgICAgPGRpdiBjbGFz cz0iY3ViLWFjdGlvbnMiPgogICAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9ImFjdGlv biIgdmFsdWU9Imluc3RhbGwiPgogICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSJy ZWZyZXNoIiBvbmNsaWNrPSJsb2NhdGlvbi5yZWxvYWQoKSI+CiAgICAgIDwvZGl2PgogICAgPC9m b3JtPgogIDwvZGl2Pgo8L2Rpdj4KCjxmb3JtIG1hcmtkb3duPSIxIiBtZXRob2Q9IlBPU1QiIGFj dGlvbj0iL3BsdWdpbnMvY3Jvd2RzZWMtdW5yYWlkLWJvdW5jZXIvaW5jbHVkZS9Dcm93ZFNlY1Vu cmFpZEJvdW5jZXIucGhwIiB0YXJnZXQ9InByb2dyZXNzRnJhbWUiPgo8aW5wdXQgdHlwZT0iaGlk ZGVuIiBuYW1lPSJjc3JmX3Rva2VuIiB2YWx1ZT0iPD89ICRjc3JmVG9rZW4gPz4iPgo8aW5wdXQg dHlwZT0iaGlkZGVuIiBuYW1lPSJtb2RlIiB2YWx1ZT0ic2F2ZSI+CgpfKEVuYWJsZWQpXzoKOiA8 c2VsZWN0IG5hbWU9IkVOQUJMRUQiPgogICAgPG9wdGlvbiB2YWx1ZT0ieWVzIiA8Pz0gY3ViX2No ZWNrZWQoJGNmZywgIkVOQUJMRUQiLCAieWVzIiwgInllcyIpID8+Pnllczwvb3B0aW9uPgogICAg PG9wdGlvbiB2YWx1ZT0ibm8iIDw/PSBjdWJfY2hlY2tlZCgkY2ZnLCAiRU5BQkxFRCIsICJubyIs ICJ5ZXMiKSA/Pj5ubzwvb3B0aW9uPgogIDwvc2VsZWN0PgogIDxzcGFuIGNsYXNzPSJpbnB1dC1p bnN0cnVjdGlvbnMiPlN0YXJ0cyBvciBkaXNhYmxlcyB0aGUgYm91bmNlciBzZXJ2aWNlLiBMZWF2 ZSB0aGlzIGVuYWJsZWQgdG8ga2VlcCBVbnJhaWQgZmlyZXdhbGwgcHJvdGVjdGlvbiBhY3RpdmUu PC9zcGFuPgoKXyhDcm93ZFNlYyBjb250YWluZXIpXzoKOiA8aW5wdXQgdHlwZT0idGV4dCIgbmFt ZT0iQ1NfQ09OVEFJTkVSIiBtYXhsZW5ndGg9IjgwIiB2YWx1ZT0iPD89IGN1Yl92YWx1ZSgkY2Zn LCAiQ1NfQ09OVEFJTkVSIiwgImNyb3dkc2VjIikgPz4iPgogIDxzcGFuIGNsYXNzPSJpbnB1dC1p bnN0cnVjdGlvbnMiPkRvY2tlciBjb250YWluZXIgbmFtZSB0aGF0IHJ1bnMgQ3Jvd2RTZWMgYW5k IHByb3ZpZGVzIGNzY2xpLiBUaGUgZGVmYXVsdCBpcyB1c3VhbGx5IGNvcnJlY3Qgd2hlbiB0aGUg Y29udGFpbmVyIGlzIG5hbWVkIGNyb3dkc2VjLjwvc3Bhbj4KCl8oTG9jYWwgQVBJIFVSTClfOgo6 IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJMQVBJX1VSTCIgbWF4bGVuZ3RoPSIxNjAiIHZhbHVl PSI8Pz0gY3ViX3ZhbHVlKCRjZmcsICJMQVBJX1VSTCIsICJodHRwOi8vMTI3LjAuMC4xOjgwODIi KSA/PiI+CiAgPHNwYW4gY2xhc3M9ImlucHV0LWluc3RydWN0aW9ucyI+Q3Jvd2RTZWMgTG9jYWwg QVBJIGVuZHBvaW50IHJlYWNoYWJsZSBmcm9tIHRoZSBVbnJhaWQgaG9zdC4gVGhlIHBsdWdpbiB1 c2VzIHRoaXMgQVBJIHN0cmVhbSB0byByZWFkIGxpdmUgYmFuIGRlY2lzaW9ucy48L3NwYW4+Cgpf KEJvdW5jZXIgQVBJIGtleSlfOgo6IDxpbnB1dCB0eXBlPSJwYXNzd29yZCIgbmFtZT0iQVBJX0tF WSIgbWF4bGVuZ3RoPSIxNjAiIHZhbHVlPSIiIHBsYWNlaG9sZGVyPSJ1bmNoYW5nZWQiPgogIDxz cGFuIGNsYXNzPSJpbnB1dC1pbnN0cnVjdGlvbnMiPkFQSSBrZXkgcmVnaXN0ZXJlZCBpbiBDcm93 ZFNlYyBmb3IgdGhpcyBib3VuY2VyLiBMZWF2ZSBlbXB0eSB0byBrZWVwIHRoZSBjdXJyZW50IGtl eTsgZW50ZXIgYSBuZXcga2V5IG9ubHkgdG8gcmVwbGFjZSBpdC48L3NwYW4+CgpfKEZpcmV3YWxs IGNoYWluKV86CjogPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IkNTX0NIQUlOIiBtYXhsZW5ndGg9 IjMyIiB2YWx1ZT0iPD89IGN1Yl92YWx1ZSgkY2ZnLCAiQ1NfQ0hBSU4iLCAiQ1JPV0RTRUMiKSA/ PiI+CiAgPHNwYW4gY2xhc3M9ImlucHV0LWluc3RydWN0aW9ucyI+RGVkaWNhdGVkIGlwdGFibGVz IGNoYWluIG1hbmFnZWQgYnkgdGhlIHBsdWdpbi4gVGhlIGRlZmF1bHQgQ1JPV0RTRUMgY2hhaW4g a2VlcHMgcGx1Z2luIHJ1bGVzIGlzb2xhdGVkIGZyb20gdGhlIHJlc3Qgb2YgdGhlIGZpcmV3YWxs Ljwvc3Bhbj4KCl8oUHJvdGVjdGVkIGNoYWlucylfOgo6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1l PSJJUFRBQkxFU19DSEFJTlMiIG1heGxlbmd0aD0iMTIwIiB2YWx1ZT0iPD89IGN1Yl92YWx1ZSgk Y2ZnLCAiSVBUQUJMRVNfQ0hBSU5TIiwgIklOUFVUIERPQ0tFUi1VU0VSIikgPz4iPgogIDxzcGFu IGNsYXNzPSJpbnB1dC1pbnN0cnVjdGlvbnMiPmlwdGFibGVzIGNoYWlucyB0aGF0IGp1bXAgaW50 byB0aGUgQ3Jvd2RTZWMgY2hhaW4uIElOUFVUIHByb3RlY3RzIGhvc3Qgc2VydmljZXMsIERPQ0tF Ui1VU0VSIHByb3RlY3RzIERvY2tlci1wdWJsaXNoZWQgcG9ydHMuPC9zcGFuPgoKXyhQcm90ZWN0 aW9uIG1vZGUpXzoKOiA8c2VsZWN0IG5hbWU9IlBST1RFQ1RJT05fTU9ERSI+CiAgICA8b3B0aW9u IHZhbHVlPSJlc3NlbnRpYWwiIDw/PSBjdWJfY2hlY2tlZCgkY2ZnLCAiUFJPVEVDVElPTl9NT0RF IiwgImVzc2VudGlhbCIsICJlc3NlbnRpYWwiKSA/Pj5Fc3NlbnRpYWwgc2hpZWxkPC9vcHRpb24+ CiAgICA8b3B0aW9uIHZhbHVlPSJnbG9iYWwiIDw/PSBjdWJfY2hlY2tlZCgkY2ZnLCAiUFJPVEVD VElPTl9NT0RFIiwgImdsb2JhbCIsICJlc3NlbnRpYWwiKSA/Pj5HbG9iYWwgc2hpZWxkPC9vcHRp b24+CiAgICA8b3B0aW9uIHZhbHVlPSJjdXN0b20iIDw/PSBjdWJfY2hlY2tlZCgkY2ZnLCAiUFJP VEVDVElPTl9NT0RFIiwgImN1c3RvbSIsICJlc3NlbnRpYWwiKSA/Pj5DdXN0b20gb3JpZ2luczwv b3B0aW9uPgogIDwvc2VsZWN0PgogIDxzcGFuIGNsYXNzPSJpbnB1dC1pbnN0cnVjdGlvbnMiPkVz c2VudGlhbCB1c2VzIGxvY2FsIENyb3dkU2VjIGFuZCBtYW51YWwgY3NjbGkgZGVjaXNpb25zLiBH bG9iYWwgYWxzbyBpbmNsdWRlcyBDQVBJL2xpc3RzIGFuZCBzaG91bGQgdXNlIGlwc2V0LiBDdXN0 b20gbGV0cyB5b3UgY29udHJvbCBvcmlnaW5zIG1hbnVhbGx5Ljwvc3Bhbj4KCl8oRmlyZXdhbGwg YmFja2VuZClfOgo6IDxzZWxlY3QgbmFtZT0iRklSRVdBTExfQkFDS0VORCI+CiAgICA8b3B0aW9u IHZhbHVlPSJhdXRvIiA8Pz0gY3ViX2NoZWNrZWQoJGNmZywgIkZJUkVXQUxMX0JBQ0tFTkQiLCAi YXV0byIsICJhdXRvIikgPz4+YXV0bzwvb3B0aW9uPgogICAgPG9wdGlvbiB2YWx1ZT0iZGlyZWN0 IiA8Pz0gY3ViX2NoZWNrZWQoJGNmZywgIkZJUkVXQUxMX0JBQ0tFTkQiLCAiZGlyZWN0IiwgImF1 dG8iKSA/Pj5pcHRhYmxlcyBkaXJlY3Q8L29wdGlvbj4KICAgIDxvcHRpb24gdmFsdWU9Imlwc2V0 IiA8Pz0gY3ViX2NoZWNrZWQoJGNmZywgIkZJUkVXQUxMX0JBQ0tFTkQiLCAiaXBzZXQiLCAiYXV0 byIpID8+Pmlwc2V0PC9vcHRpb24+CiAgPC9zZWxlY3Q+CiAgPHNwYW4gY2xhc3M9ImlucHV0LWlu c3RydWN0aW9ucyI+YXV0byBjaG9vc2VzIHRoZSBzYWZlc3QgYmFja2VuZCBmb3IgdGhlIHNlbGVj dGVkIG1vZGUuIGlwc2V0IGlzIHJlY29tbWVuZGVkIGZvciBHbG9iYWwgcHJvdGVjdGlvbiBiZWNh dXNlIGl0IGhhbmRsZXMgbGFyZ2UgbGlzdHMgZWZmaWNpZW50bHkuPC9zcGFuPgoKXyhMQVBJIHN0 cmVhbSB0aW1lb3V0KV86CjogPGlucHV0IHR5cGU9Im51bWJlciIgbmFtZT0iTEFQSV9TVFJFQU1f VElNRU9VVCIgbWluPSIyMCIgbWF4PSI5MDAiIHZhbHVlPSI8Pz0gY3ViX3ZhbHVlKCRjZmcsICJM QVBJX1NUUkVBTV9USU1FT1VUIiwgIjMwMCIpID8+Ij4gc2Vjb25kcwogIDxzcGFuIGNsYXNzPSJp bnB1dC1pbnN0cnVjdGlvbnMiPk1heGltdW0gdGltZSBhbGxvd2VkIGZvciBhIGZ1bGwgZGVjaXNp b24gc3RyZWFtIGRvd25sb2FkLiBHbG9iYWwgcHJvdGVjdGlvbiBjYW4gcmV0dXJuIHRlbnMgb2Yg dGhvdXNhbmRzIG9mIGVudHJpZXMsIHNvIGtlZXAgdGhpcyBoaWdoZXIgdGhhbiBhIG5vcm1hbCBz aG9ydCBIVFRQIHRpbWVvdXQuPC9zcGFuPgoKXyhVcGRhdGUgaW50ZXJ2YWwpXzoKOiA8aW5wdXQg dHlwZT0ibnVtYmVyIiBuYW1lPSJVUERBVEVfSU5URVJWQUwiIG1pbj0iMSIgbWF4PSIzNjAwIiB2 YWx1ZT0iPD89IGN1Yl92YWx1ZSgkY2ZnLCAiVVBEQVRFX0lOVEVSVkFMIiwgIjEwIikgPz4iPiBz ZWNvbmRzCiAgPHNwYW4gY2xhc3M9ImlucHV0LWluc3RydWN0aW9ucyI+SG93IG9mdGVuIHRoZSBk YWVtb24gYXNrcyBDcm93ZFNlYyBmb3IgaW5jcmVtZW50YWwgZGVjaXNpb24gY2hhbmdlcy48L3Nw YW4+CgpfKEZ1bGwgc3luYyBpbnRlcnZhbClfOgo6IDxpbnB1dCB0eXBlPSJudW1iZXIiIG5hbWU9 IkZVTExfU1lOQ19JTlRFUlZBTCIgbWluPSIwIiBtYXg9Ijg2NDAwIiB2YWx1ZT0iPD89IGN1Yl92 YWx1ZSgkY2ZnLCAiRlVMTF9TWU5DX0lOVEVSVkFMIiwgIjkwMCIpID8+Ij4gc2Vjb25kcwogIDxz cGFuIGNsYXNzPSJpbnB1dC1pbnN0cnVjdGlvbnMiPlBlcmlvZGljIGZ1bGwgcmVsb2FkIHVzZWQg dG8gc2VsZi1oZWFsIG1pc3NlZCBzdHJlYW0gdXBkYXRlcy4gU2V0IHRvIDAgb25seSBpZiB5b3Ug aW50ZW50aW9uYWxseSB3YW50IHRvIGRpc2FibGUgc2FmZXR5IHJlbG9hZHMuPC9zcGFuPgoKXyhE ZWNpc2lvbiBsaW1pdClfOgo6IDxpbnB1dCB0eXBlPSJudW1iZXIiIG5hbWU9IkRFQ0lTSU9OX0xJ TUlUIiBtaW49IjEiIG1heD0iNTAwMDAwMCIgdmFsdWU9Ijw/PSBjdWJfdmFsdWUoJGNmZywgIkRF Q0lTSU9OX0xJTUlUIiwgIjEwMDAwMDAiKSA/PiI+CiAgPHNwYW4gY2xhc3M9ImlucHV0LWluc3Ry dWN0aW9ucyI+TWF4aW11bSBudW1iZXIgb2YgZGVjaXNpb25zIHJlcXVlc3RlZCBmcm9tIENyb3dk U2VjIGR1cmluZyBhIGZ1bGwgc3RyZWFtIHN5bmMuPC9zcGFuPgoKXyhTdHJlYW0gc2NvcGVzKV86 CjogPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IlNUUkVBTV9TQ09QRVMiIG1heGxlbmd0aD0iODAi IHZhbHVlPSI8Pz0gY3ViX3ZhbHVlKCRjZmcsICJTVFJFQU1fU0NPUEVTIiwgIklwLFJhbmdlIikg Pz4iPgogIDxzcGFuIGNsYXNzPSJpbnB1dC1pbnN0cnVjdGlvbnMiPkRlY2lzaW9uIHNjb3BlcyB0 byBpbXBvcnQuIElwIGFuZCBSYW5nZSBhcmUgdGhlIHVzZWZ1bCBJUHY0IGZpcmV3YWxsIHNjb3Bl cyBmb3IgdGhpcyBwbHVnaW4uPC9zcGFuPgoKXyhTdHJlYW0gb3JpZ2lucylfOgo6IDxpbnB1dCB0 eXBlPSJ0ZXh0IiBuYW1lPSJTVFJFQU1fT1JJR0lOUyIgbWF4bGVuZ3RoPSIxMjAiIHZhbHVlPSI8 Pz0gY3ViX3ZhbHVlKCRjZmcsICJTVFJFQU1fT1JJR0lOUyIsICJjcm93ZHNlYyxjc2NsaSIpID8+ Ij4KICA8c3BhbiBjbGFzcz0iaW5wdXQtaW5zdHJ1Y3Rpb25zIj5EZWNpc2lvbiBvcmlnaW5zIHVz ZWQgaW4gQ3VzdG9tIG1vZGUuIEtlZXAgY3NjbGkgaWYgeW91IHdhbnQgbWFudWFsIGNzY2xpIGJh bnMgdG8gYmUgZW5mb3JjZWQgYnkgdGhlIGZpcmV3YWxsLjwvc3Bhbj4KCl8oTWF4aW11bSBkaXJl Y3QgcnVsZXMpXzoKOiA8aW5wdXQgdHlwZT0ibnVtYmVyIiBuYW1lPSJNQVhfRElSRUNUX1JVTEVT IiBtaW49IjEwMCIgbWF4PSIyMDAwMDAiIHZhbHVlPSI8Pz0gY3ViX3ZhbHVlKCRjZmcsICJNQVhf RElSRUNUX1JVTEVTIiwgIjUwMDAiKSA/PiI+CiAgPHNwYW4gY2xhc3M9ImlucHV0LWluc3RydWN0 aW9ucyI+U2FmZXR5IGxpbWl0IGZvciBkaXJlY3QgaXB0YWJsZXMgbW9kZS4gSWYgbW9yZSBkZWNp c2lvbnMgZXhpc3QgdGhhbiB0aGlzIHZhbHVlLCBzd2l0Y2ggdG8gaXBzZXQgaW5zdGVhZCBvZiBj cmVhdGluZyB0aG91c2FuZHMgb2YgZGlyZWN0IHJ1bGVzLjwvc3Bhbj4KCl8oSVAgc2V0IG5hbWUp XzoKOiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iSVBTRVRfTkFNRSIgbWF4bGVuZ3RoPSIzMiIg dmFsdWU9Ijw/PSBjdWJfdmFsdWUoJGNmZywgIklQU0VUX05BTUUiLCAiY3Jvd2RzZWM0IikgPz4i PgogIDxzcGFuIGNsYXNzPSJpbnB1dC1pbnN0cnVjdGlvbnMiPk5hbWUgb2YgdGhlIGlwc2V0IHVz ZWQgYnkgdGhlIGlwdGFibGVzIERST1AgcnVsZS4gQ2hhbmdlIHRoaXMgb25seSBpZiBhbm90aGVy IHRvb2wgYWxyZWFkeSB1c2VzIHRoZSBzYW1lIHNldCBuYW1lLjwvc3Bhbj4KCl8oTG9nIGxldmVs KV86CjogPHNlbGVjdCBuYW1lPSJMT0dfTEVWRUwiPgogICAgPG9wdGlvbiB2YWx1ZT0iaW5mbyIg PD89IGN1Yl9jaGVja2VkKCRjZmcsICJMT0dfTEVWRUwiLCAiaW5mbyIsICJpbmZvIikgPz4+aW5m bzwvb3B0aW9uPgogICAgPG9wdGlvbiB2YWx1ZT0iZGVidWciIDw/PSBjdWJfY2hlY2tlZCgkY2Zn LCAiTE9HX0xFVkVMIiwgImRlYnVnIiwgImluZm8iKSA/Pj5kZWJ1Zzwvb3B0aW9uPgogIDwvc2Vs ZWN0PgogIDxzcGFuIGNsYXNzPSJpbnB1dC1pbnN0cnVjdGlvbnMiPk5vcm1hbCBpbmZvIGxvZ3Mg YXJlIGVub3VnaCBmb3IgZGFpbHkgdXNlLiBVc2UgZGVidWcgb25seSB3aGlsZSB0cm91Ymxlc2hv b3RpbmcuPC9zcGFuPgoKXyhOb3RpZmljYXRpb24gc3lzdGVtKV86CjogPHNlbGVjdCBuYW1lPSJO T1RJRllfRU5BQkxFRCI+CiAgICA8b3B0aW9uIHZhbHVlPSJ5ZXMiIDw/PSBjdWJfY2hlY2tlZCgk Y2ZnLCAiTk9USUZZX0VOQUJMRUQiLCAieWVzIiwgInllcyIpID8+Pnllczwvb3B0aW9uPgogICAg PG9wdGlvbiB2YWx1ZT0ibm8iIDw/PSBjdWJfY2hlY2tlZCgkY2ZnLCAiTk9USUZZX0VOQUJMRUQi LCAibm8iLCAieWVzIikgPz4+bm88L29wdGlvbj4KICA8L3NlbGVjdD4KICA8c3BhbiBjbGFzcz0i aW5wdXQtaW5zdHJ1Y3Rpb25zIj5NYXN0ZXIgc3dpdGNoIGZvciBib3VuY2VyIGhlYWx0aCBhbGVy dHMuIFdoZW4gZW5hYmxlZCwgdGhlIHdhdGNoZG9nIHdhcm5zIHlvdSBpZiBwcm90ZWN0aW9uIHN0 b3BzIHdvcmtpbmcuPC9zcGFuPgoKXyhVbnJhaWQgV2ViVUkgYWxlcnRzKV86CjogPHNlbGVjdCBu YW1lPSJOT1RJRllfVU5SQUlEIj4KICAgIDxvcHRpb24gdmFsdWU9InllcyIgPD89IGN1Yl9jaGVj a2VkKCRjZmcsICJOT1RJRllfVU5SQUlEIiwgInllcyIsICJ5ZXMiKSA/Pj55ZXM8L29wdGlvbj4K ICAgIDxvcHRpb24gdmFsdWU9Im5vIiA8Pz0gY3ViX2NoZWNrZWQoJGNmZywgIk5PVElGWV9VTlJB SUQiLCAibm8iLCAieWVzIikgPz4+bm88L29wdGlvbj4KICA8L3NlbGVjdD4KICA8c3BhbiBjbGFz cz0iaW5wdXQtaW5zdHJ1Y3Rpb25zIj5TZW5kcyBjcml0aWNhbCBoZWFsdGggZmFpbHVyZXMgdG8g dGhlIFVucmFpZCBub3RpZmljYXRpb24gc3lzdGVtIHNvIHRoZXkgYXBwZWFyIGluIHRoZSBXZWJV SS48L3NwYW4+CgpfKFRlbGVncmFtIGFsZXJ0cylfOgo6IDxzZWxlY3QgbmFtZT0iTk9USUZZX1RF TEVHUkFNIj4KICAgIDxvcHRpb24gdmFsdWU9InllcyIgPD89IGN1Yl9jaGVja2VkKCRjZmcsICJO T1RJRllfVEVMRUdSQU0iLCAieWVzIiwgInllcyIpID8+Pnllczwvb3B0aW9uPgogICAgPG9wdGlv biB2YWx1ZT0ibm8iIDw/PSBjdWJfY2hlY2tlZCgkY2ZnLCAiTk9USUZZX1RFTEVHUkFNIiwgIm5v IiwgInllcyIpID8+Pm5vPC9vcHRpb24+CiAgPC9zZWxlY3Q+CiAgPHNwYW4gY2xhc3M9ImlucHV0 LWluc3RydWN0aW9ucyI+U2VuZHMgdGhlIHNhbWUgaGVhbHRoIGZhaWx1cmVzIHRocm91Z2ggdGhl IGV4aXN0aW5nIENyb3dkU2VjIFRlbGVncmFtIEhUVFAgd2ViaG9vay48L3NwYW4+CgpfKFRlbGVn cmFtIEhUVFAgY29uZmlnKV86CjogPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IlRFTEVHUkFNX0hU VFBfQ09ORklHIiBtYXhsZW5ndGg9IjE4MCIgdmFsdWU9Ijw/PSBjdWJfdmFsdWUoJGNmZywgIlRF TEVHUkFNX0hUVFBfQ09ORklHIiwgIi9tbnQvY2FjaGUvYXBwZGF0YS9jcm93ZHNlYy9ub3RpZmlj YXRpb25zL2h0dHAueWFtbCIpID8+Ij4KICA8c3BhbiBjbGFzcz0iaW5wdXQtaW5zdHJ1Y3Rpb25z Ij5QYXRoIHRvIENyb3dkU2VjIGh0dHAueWFtbCBjb250YWluaW5nIHlvdXIgVGVsZWdyYW0gYm90 IFVSTCBhbmQgY2hhdF9pZC4gVG9rZW5zIGFyZSByZXVzZWQgZnJvbSB0aGF0IGZpbGUgYW5kIGFy ZSBub3QgZGlzcGxheWVkIGhlcmUuPC9zcGFuPgoKXyhOb3RpZmljYXRpb24gY29vbGRvd24pXzoK OiA8aW5wdXQgdHlwZT0ibnVtYmVyIiBuYW1lPSJOT1RJRllfQ09PTERPV04iIG1pbj0iNjAiIG1h eD0iODY0MDAiIHZhbHVlPSI8Pz0gY3ViX3ZhbHVlKCRjZmcsICJOT1RJRllfQ09PTERPV04iLCAi MTgwMCIpID8+Ij4gc2Vjb25kcwogIDxzcGFuIGNsYXNzPSJpbnB1dC1pbnN0cnVjdGlvbnMiPk1p bmltdW0gdGltZSBiZXR3ZWVuIHJlcGVhdGVkIGhlYWx0aCBhbGVydHMuIFRoaXMgcHJldmVudHMg bm90aWZpY2F0aW9uIHNwYW0gZHVyaW5nIGEgcHJvbG9uZ2VkIG91dGFnZS48L3NwYW4+CgpfKE1h eGltdW0gc3luYyBhZ2UpXzoKOiA8aW5wdXQgdHlwZT0ibnVtYmVyIiBuYW1lPSJIRUFMVEhfTUFY X1NZTkNfQUdFIiBtaW49IjYwIiBtYXg9Ijg2NDAwIiB2YWx1ZT0iPD89IGN1Yl92YWx1ZSgkY2Zn LCAiSEVBTFRIX01BWF9TWU5DX0FHRSIsICI5MDAiKSA/PiI+IHNlY29uZHMKICA8c3BhbiBjbGFz cz0iaW5wdXQtaW5zdHJ1Y3Rpb25zIj5NYXhpbXVtIGFsbG93ZWQgYWdlIG9mIHRoZSBsYXN0IHN1 Y2Nlc3NmdWwgQ3Jvd2RTZWMgc3luY2hyb25pemF0aW9uIGJlZm9yZSB0aGUgd2F0Y2hkb2cgcmFp c2VzIGFuIGFsZXJ0Ljwvc3Bhbj4KCl8oTWluaW11bSBpcHNldCBlbnRyaWVzKV86CjogPGlucHV0 IHR5cGU9Im51bWJlciIgbmFtZT0iSEVBTFRIX01JTl9JUFNFVF9FTlRSSUVTIiBtaW49IjAiIG1h eD0iNTAwMDAwMCIgdmFsdWU9Ijw/PSBjdWJfdmFsdWUoJGNmZywgIkhFQUxUSF9NSU5fSVBTRVRf RU5UUklFUyIsICIxIikgPz4iPgogIDxzcGFuIGNsYXNzPSJpbnB1dC1pbnN0cnVjdGlvbnMiPk1p bmltdW0gZXhwZWN0ZWQgaXBzZXQgc2l6ZSBpbiBpcHNldCBtb2RlLiBVc2UgMSBmb3IgbG9jYWwt b25seSBwcm90ZWN0aW9uOyBHbG9iYWwgbW9kZSBzaG91bGQgbm9ybWFsbHkgYmUgbXVjaCBoaWdo ZXIuPC9zcGFuPgoKXyhDcm93ZFNlYyBUaHJlYXQgTWFwIGRyb3BzIGV4cG9ydClfOgo6IDxzZWxl Y3QgbmFtZT0iQ1RNX0RST1BTX0VOQUJMRUQiPgogICAgPG9wdGlvbiB2YWx1ZT0ibm8iIDw/PSBj dWJfY2hlY2tlZCgkY2ZnLCAiQ1RNX0RST1BTX0VOQUJMRUQiLCAibm8iLCAibm8iKSA/Pj5ubzwv b3B0aW9uPgogICAgPG9wdGlvbiB2YWx1ZT0ieWVzIiA8Pz0gY3ViX2NoZWNrZWQoJGNmZywgIkNU TV9EUk9QU19FTkFCTEVEIiwgInllcyIsICJubyIpID8+Pnllczwvb3B0aW9uPgogIDwvc2VsZWN0 PgogIDxzcGFuIGNsYXNzPSJpbnB1dC1pbnN0cnVjdGlvbnMiPk9wdGlvbmFsLiBXaGVuIGVuYWJs ZWQsIHRoZSBwbHVnaW4gbG9ncyBvbmx5IENyb3dkU2VjLWJsb2NrZWQgcGFja2V0cyB3aXRoIGEg bmV0ZmlsdGVyIHJhdGUgbGltaXQgYW5kIHdyaXRlcyBKU09OTCBldmVudHMgZm9yIENyb3dkU2Vj IFRocmVhdCBNYXAuIFRoaXMgZG9lcyBub3QgcmVwbGFjZSBmaXJld2FsbCBlbmZvcmNlbWVudDsg aXQgb25seSBleHBvcnRzIHZpc2liaWxpdHkgZGF0YS48L3NwYW4+CgpfKENUTSBkcm9wcyBKU09O TCBwYXRoKV86CjogPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IkNUTV9EUk9QU19MT0ciIG1heGxl bmd0aD0iMTgwIiB2YWx1ZT0iPD89IGN1Yl92YWx1ZSgkY2ZnLCAiQ1RNX0RST1BTX0xPRyIsICIv bW50L2NhY2hlL2FwcGRhdGEvY3Jvd2RzZWMtdGhyZWF0LW1hcC9kcm9wcy9kcm9wcy5qc29ubCIp ID8+Ij4KICA8c3BhbiBjbGFzcz0iaW5wdXQtaW5zdHJ1Y3Rpb25zIj5Ib3N0IHBhdGggd3JpdHRl biBieSB0aGlzIHBsdWdpbi4gTW91bnQgdGhlIHBhcmVudCBkaXJlY3RvcnkgaW50byB0aGUgVGhy ZWF0IE1hcCBjb250YWluZXIgYXMgL2Nyb3dkc2VjL2Ryb3BzIGFuZCBzZXQgRFJPUFNfTE9HX1BB VEg9L2Nyb3dkc2VjL2Ryb3BzL2Ryb3BzLmpzb25sLjwvc3Bhbj4KCl8oQ1RNIGRyb3BzIGxvZyBw cmVmaXgpXzoKOiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iQ1RNX0RST1BTX1BSRUZJWCIgbWF4 bGVuZ3RoPSIzMiIgdmFsdWU9Ijw/PSBjdWJfdmFsdWUoJGNmZywgIkNUTV9EUk9QU19QUkVGSVgi LCAiQ1JPV0RTRUNfRFJPUCIpID8+Ij4KICA8c3BhbiBjbGFzcz0iaW5wdXQtaW5zdHJ1Y3Rpb25z Ij5LZXJuZWwgbG9nIHByZWZpeCB1c2VkIHRvIGlkZW50aWZ5IENyb3dkU2VjIGRyb3AgbGluZXMu IENoYW5nZSBvbmx5IGlmIGFub3RoZXIgZmlyZXdhbGwgcnVsZSBhbHJlYWR5IHVzZXMgdGhlIHNh bWUgcHJlZml4Ljwvc3Bhbj4KCl8oQ1RNIGRyb3BzIHJhdGUgbGltaXQpXzoKOiA8aW5wdXQgdHlw ZT0idGV4dCIgbmFtZT0iQ1RNX0RST1BTX1JBVEUiIG1heGxlbmd0aD0iMjQiIHZhbHVlPSI8Pz0g Y3ViX3ZhbHVlKCRjZmcsICJDVE1fRFJPUFNfUkFURSIsICIzMC9taW4iKSA/PiI+CiAgPHNwYW4g Y2xhc3M9ImlucHV0LWluc3RydWN0aW9ucyI+TmV0ZmlsdGVyIExPRyByYXRlIGxpbWl0LiBLZWVw IHRoaXMgY29uc2VydmF0aXZlIHRvIGF2b2lkIHN5c2xvZyBub2lzZSBkdXJpbmcgYXR0YWNrcy4g RXhhbXBsZXM6IDEwL21pbiwgMzAvbWluLCAyL3NlY29uZC48L3NwYW4+CgpfKENUTSBkcm9wcyBi dXJzdClfOgo6IDxpbnB1dCB0eXBlPSJudW1iZXIiIG5hbWU9IkNUTV9EUk9QU19CVVJTVCIgbWlu PSIxIiBtYXg9IjEwMDAwIiB2YWx1ZT0iPD89IGN1Yl92YWx1ZSgkY2ZnLCAiQ1RNX0RST1BTX0JV UlNUIiwgIjYwIikgPz4iPgogIDxzcGFuIGNsYXNzPSJpbnB1dC1pbnN0cnVjdGlvbnMiPlNob3J0 IGJ1cnN0IGFsbG93ZWQgYWJvdmUgdGhlIHJlZ3VsYXIgZHJvcHMgbG9nIHJhdGUuPC9zcGFuPgoK XyhDVE0gZHJvcHMgbWF4IEpTT05MIGxpbmVzKV86CjogPGlucHV0IHR5cGU9Im51bWJlciIgbmFt ZT0iQ1RNX0RST1BTX01BWF9MSU5FUyIgbWluPSIxMDAiIG1heD0iMTAwMDAwMCIgdmFsdWU9Ijw/ PSBjdWJfdmFsdWUoJGNmZywgIkNUTV9EUk9QU19NQVhfTElORVMiLCAiNTAwMCIpID8+Ij4KICA8 c3BhbiBjbGFzcz0iaW5wdXQtaW5zdHJ1Y3Rpb25zIj5UaGUgcGx1Z2luIGtlZXBzIG9ubHkgdGhl IGxhc3QgTiBKU09OTCBsaW5lcyBzbyB0aGUgVGhyZWF0IE1hcCBkcm9wcyBmaWxlIGNhbm5vdCBn cm93IGZvcmV2ZXIuPC9zcGFuPgoKXyhTa2lwIHByaXZhdGUgSVB2NClfOgo6IDxzZWxlY3QgbmFt ZT0iU0tJUF9QUklWQVRFX0lQVjQiPgogICAgPG9wdGlvbiB2YWx1ZT0ieWVzIiA8Pz0gY3ViX2No ZWNrZWQoJGNmZywgIlNLSVBfUFJJVkFURV9JUFY0IiwgInllcyIsICJ5ZXMiKSA/Pj55ZXM8L29w dGlvbj4KICAgIDxvcHRpb24gdmFsdWU9Im5vIiA8Pz0gY3ViX2NoZWNrZWQoJGNmZywgIlNLSVBf UFJJVkFURV9JUFY0IiwgIm5vIiwgInllcyIpID8+Pm5vPC9vcHRpb24+CiAgPC9zZWxlY3Q+CiAg PHNwYW4gY2xhc3M9ImlucHV0LWluc3RydWN0aW9ucyI+QXZvaWQgaW1wb3J0aW5nIHByaXZhdGUg b3IgbG9jYWwgSVB2NCBhZGRyZXNzZXMgaW50byB0aGUgZmlyZXdhbGwgYmxvY2sgc2V0LiBLZWVw IGVuYWJsZWQgdG8gcmVkdWNlIGxvY2tvdXQgcmlzay48L3NwYW4+Cgo6IDxpbnB1dCB0eXBlPSJz dWJtaXQiIHZhbHVlPSJBcHBseSI+CiAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IlJlZnJl c2giIG9uY2xpY2s9ImxvY2F0aW9uLnJlbG9hZCgpIj4KPC9mb3JtPgoKPGRpdiBjbGFzcz0iY3Vi LWdyaWQiPgogIDxkaXYgY2xhc3M9ImN1Yi1ib3giPgogICAgPGgzPkFjdGlvbiByZXN1bHQ8L2gz PgogICAgPGlmcmFtZSBuYW1lPSJwcm9ncmVzc0ZyYW1lIiBpZD0icHJvZ3Jlc3NGcmFtZSIgY2xh c3M9ImN1Yi1mcmFtZSI+PC9pZnJhbWU+CiAgPC9kaXY+CjwvZGl2PgoKPGRpdiBjbGFzcz0iY3Vi LWdyaWQiPgogIDxkaXYgY2xhc3M9ImN1Yi1ib3giPgogICAgPGgzPlN0YXR1czwvaDM+CiAgICA8 cHJlIGNsYXNzPSJjdWItcHJlIj48Pz0gJHN1bW1hcnkgPz48L3ByZT4KICA8L2Rpdj4KICA8ZGl2 IGNsYXNzPSJjdWItYm94Ij4KICAgIDxoMz5Mb2c8L2gzPgogICAgPHByZSBjbGFzcz0iY3ViLXBy ZSI+PD89ICRsb2cgPz48L3ByZT4KICA8L2Rpdj4KPC9kaXY+Cg== B64_PAGE base64 -d > "${WEB_DIR}/include/CrowdSecUnraidBouncer.php" <<'B64_PHP' PD9waHAKJGNmZ0RpciA9ICIvYm9vdC9jb25maWcvcGx1Z2lucy9jcm93ZHNlYy11bnJhaWQtYm91 bmNlciI7CiRjZmdGaWxlID0gIiRjZmdEaXIvY29uZmlnLmNmZyI7CgpmdW5jdGlvbiBjdWJfZmFp bCgkbWVzc2FnZSwgJGNvZGUgPSA0MDApIHsKICBodHRwX3Jlc3BvbnNlX2NvZGUoJGNvZGUpOwog IGVjaG8gaHRtbHNwZWNpYWxjaGFycygkbWVzc2FnZSwgRU5UX1FVT1RFUykgLiAiXG4iOwogIGV4 aXQoMSk7Cn0KCmZ1bmN0aW9uIGN1Yl9jbGVhbl90b2tlbigkdmFsdWUsICRkZWZhdWx0LCAkbWF4 ID0gODApIHsKICAkdmFsdWUgPSB0cmltKChzdHJpbmcpJHZhbHVlKTsKICBpZiAoJHZhbHVlID09 PSAiIikgcmV0dXJuICRkZWZhdWx0OwogIGlmIChzdHJsZW4oJHZhbHVlKSA+ICRtYXggfHwgIXBy ZWdfbWF0Y2goJy9eW0EtWmEtejAtOV8uLV0rJC8nLCAkdmFsdWUpKSB7CiAgICBjdWJfZmFpbCgi SW52YWxpZCB2YWx1ZTogIiAuICR2YWx1ZSk7CiAgfQogIHJldHVybiAkdmFsdWU7Cn0KCmZ1bmN0 aW9uIGN1Yl9jbGVhbl9jaGFpbnMoJHZhbHVlKSB7CiAgJHZhbHVlID0gdHJpbShwcmVnX3JlcGxh Y2UoJy9ccysvJywgJyAnLCAoc3RyaW5nKSR2YWx1ZSkpOwogIGlmICgkdmFsdWUgPT09ICIiKSBy ZXR1cm4gIklOUFVUIERPQ0tFUi1VU0VSIjsKICBpZiAoc3RybGVuKCR2YWx1ZSkgPiAxMjAgfHwg IXByZWdfbWF0Y2goJy9eW0EtWmEtejAtOV8gLV0rJC8nLCAkdmFsdWUpKSB7CiAgICBjdWJfZmFp bCgiSW52YWxpZCBpcHRhYmxlcyBjaGFpbnMgdmFsdWUiKTsKICB9CiAgcmV0dXJuICR2YWx1ZTsK fQoKZnVuY3Rpb24gY3ViX2NsZWFuX3VybCgkdmFsdWUpIHsKICAkdmFsdWUgPSB0cmltKChzdHJp bmcpJHZhbHVlKTsKICBpZiAoJHZhbHVlID09PSAiIikgcmV0dXJuICJodHRwOi8vMTI3LjAuMC4x OjgwODIiOwogIGlmIChzdHJsZW4oJHZhbHVlKSA+IDE2MCB8fCAhcHJlZ19tYXRjaCgnI15odHRw cz86Ly9bQS1aYS16MC05Xy46XFtcXS1dKyQjJywgJHZhbHVlKSkgewogICAgY3ViX2ZhaWwoIklu dmFsaWQgTG9jYWwgQVBJIFVSTCIpOwogIH0KICByZXR1cm4gJHZhbHVlOwp9CgpmdW5jdGlvbiBj dWJfY2xlYW5fa2V5KCR2YWx1ZSkgewogICR2YWx1ZSA9IHRyaW0oKHN0cmluZykkdmFsdWUpOwog IGlmICgkdmFsdWUgPT09ICIiKSByZXR1cm4gIiI7CiAgaWYgKHN0cmxlbigkdmFsdWUpID4gMTYw IHx8ICFwcmVnX21hdGNoKCcjXltBLVphLXowLTlfKy89LV0rJCMnLCAkdmFsdWUpKSB7CiAgICBj dWJfZmFpbCgiSW52YWxpZCBib3VuY2VyIEFQSSBrZXkiKTsKICB9CiAgcmV0dXJuICR2YWx1ZTsK fQoKZnVuY3Rpb24gY3ViX2NsZWFuX2NzdigkdmFsdWUsICRkZWZhdWx0LCAkbGFiZWwsICRtYXgg PSAxMjApIHsKICAkdmFsdWUgPSB0cmltKChzdHJpbmcpJHZhbHVlKTsKICBpZiAoJHZhbHVlID09 PSAiIikgcmV0dXJuICRkZWZhdWx0OwogIGlmIChzdHJsZW4oJHZhbHVlKSA+ICRtYXggfHwgIXBy ZWdfbWF0Y2goJy9eW0EtWmEteiwgXSskLycsICR2YWx1ZSkpIHsKICAgIGN1Yl9mYWlsKCJJbnZh bGlkICIgLiAkbGFiZWwpOwogIH0KICAkcGFydHMgPSBhcnJheV92YWx1ZXMoYXJyYXlfZmlsdGVy KGFycmF5X21hcCgndHJpbScsIGV4cGxvZGUoJywnLCAkdmFsdWUpKSwgJ3N0cmxlbicpKTsKICBp ZiAoISRwYXJ0cykgcmV0dXJuICRkZWZhdWx0OwogIHJldHVybiBpbXBsb2RlKCcsJywgJHBhcnRz KTsKfQoKZnVuY3Rpb24gY3ViX2NsZWFuX3Njb3BlcygkdmFsdWUpIHsKICByZXR1cm4gY3ViX2Ns ZWFuX2NzdigkdmFsdWUsICJJcCxSYW5nZSIsICJzdHJlYW0gc2NvcGVzIiwgODApOwp9CgpmdW5j dGlvbiBjdWJfY2xlYW5fb3JpZ2lucygkdmFsdWUpIHsKICByZXR1cm4gY3ViX2NsZWFuX2Nzdigk dmFsdWUsICJjcm93ZHNlYyxjc2NsaSIsICJzdHJlYW0gb3JpZ2lucyIsIDEyMCk7Cn0KCmZ1bmN0 aW9uIGN1Yl9sb2FkX2NmZygpIHsKICBnbG9iYWwgJGNmZ0ZpbGU7CiAgaWYgKCFpc19maWxlKCRj ZmdGaWxlKSkgcmV0dXJuIFtdOwogICRjZmcgPSBwYXJzZV9pbmlfZmlsZSgkY2ZnRmlsZSk7CiAg cmV0dXJuIGlzX2FycmF5KCRjZmcpID8gJGNmZyA6IFtdOwp9CgpmdW5jdGlvbiBjdWJfY2xlYW5f cGF0aCgkdmFsdWUsICRkZWZhdWx0KSB7CiAgJHZhbHVlID0gdHJpbSgoc3RyaW5nKSR2YWx1ZSk7 CiAgaWYgKCR2YWx1ZSA9PT0gIiIpIHJldHVybiAkZGVmYXVsdDsKICBpZiAoc3RybGVuKCR2YWx1 ZSkgPiAxODAgfHwgIXByZWdfbWF0Y2goJyNeL1tBLVphLXowLTlfLi8gLV0rJCMnLCAkdmFsdWUp KSB7CiAgICBjdWJfZmFpbCgiSW52YWxpZCBmaWxlIHBhdGgiKTsKICB9CiAgcmV0dXJuICR2YWx1 ZTsKfQoKZnVuY3Rpb24gY3ViX2NsZWFuX2ludCgkdmFsdWUsICRkZWZhdWx0LCAkbWluLCAkbWF4 KSB7CiAgaWYgKCFpc19udW1lcmljKCR2YWx1ZSkpIHJldHVybiAkZGVmYXVsdDsKICAkdmFsdWUg PSAoaW50KSR2YWx1ZTsKICByZXR1cm4gbWF4KCRtaW4sIG1pbigkbWF4LCAkdmFsdWUpKTsKfQoK ZnVuY3Rpb24gY3ViX2NsZWFuX3JhdGUoJHZhbHVlLCAkZGVmYXVsdCkgewogICR2YWx1ZSA9IHRy aW0oKHN0cmluZykkdmFsdWUpOwogIGlmICgkdmFsdWUgPT09ICIiKSByZXR1cm4gJGRlZmF1bHQ7 CiAgaWYgKHN0cmxlbigkdmFsdWUpID4gMjQgfHwgIXByZWdfbWF0Y2goJyNeWzAtOV0rLyhzZWNv bmR8bWludXRlfGhvdXJ8ZGF5fHNlY3xtaW58c3xtfGh8ZCkkIycsICR2YWx1ZSkpIHsKICAgIGN1 Yl9mYWlsKCJJbnZhbGlkIG5ldGZpbHRlciBsb2cgcmF0ZSIpOwogIH0KICByZXR1cm4gJHZhbHVl Owp9CgpmdW5jdGlvbiBjdWJfd3JpdGVfY2ZnKCR2YWx1ZXMpIHsKICBnbG9iYWwgJGNmZ0Rpciwg JGNmZ0ZpbGU7CiAgaWYgKCFpc19kaXIoJGNmZ0RpcikgJiYgIW1rZGlyKCRjZmdEaXIsIDA3MDAs IHRydWUpKSB7CiAgICBjdWJfZmFpbCgiVW5hYmxlIHRvIGNyZWF0ZSBjb25maWcgZGlyZWN0b3J5 IiwgNTAwKTsKICB9CiAgJGxpbmVzID0gW107CiAgZm9yZWFjaCAoJHZhbHVlcyBhcyAka2V5ID0+ ICR2YWx1ZSkgewogICAgJHZhbHVlID0gc3RyX3JlcGxhY2UoW2Nocig5MiksIGNocigzNCksIGNo cigxMCksIGNocigxMyldLCBbY2hyKDkyKSAuIGNocig5MiksIGNocig5MikgLiBjaHIoMzQpLCAi IiwgIiJdLCAkdmFsdWUpOwogICAgJGxpbmVzW10gPSAka2V5IC4gJz0iJyAuICR2YWx1ZSAuICci JzsKICB9CiAgJHRtcEZpbGUgPSAkY2ZnRmlsZSAuICIudG1wLiIgLiBnZXRteXBpZCgpOwogICRk YXRhID0gaW1wbG9kZSgiXG4iLCAkbGluZXMpIC4gIlxuIjsKICBpZiAoZmlsZV9wdXRfY29udGVu dHMoJHRtcEZpbGUsICRkYXRhLCBMT0NLX0VYKSA9PT0gZmFsc2UpIHsKICAgIGN1Yl9mYWlsKCJV bmFibGUgdG8gd3JpdGUgdGVtcG9yYXJ5IGNvbmZpZyBmaWxlIiwgNTAwKTsKICB9CiAgY2htb2Qo JHRtcEZpbGUsIDA2MDApOwogIGlmICghcmVuYW1lKCR0bXBGaWxlLCAkY2ZnRmlsZSkpIHsKICAg IEB1bmxpbmsoJHRtcEZpbGUpOwogICAgY3ViX2ZhaWwoIlVuYWJsZSB0byByZXBsYWNlIGNvbmZp ZyBmaWxlIiwgNTAwKTsKICB9CiAgY2htb2QoJGNmZ0ZpbGUsIDA2MDApOwp9CgokbW9kZSA9ICRf UE9TVFsibW9kZSJdID8/ICIiOwplY2hvICI8cHJlPiI7CgppZiAoJG1vZGUgPT09ICJzYXZlIikg ewogICRleGlzdGluZyA9IGN1Yl9sb2FkX2NmZygpOwogICRwb3N0ZWRBcGlLZXkgPSB0cmltKChz dHJpbmcpKCRfUE9TVFsiQVBJX0tFWSJdID8/ICIiKSk7CiAgJHZhbHVlcyA9IFsKICAgICJFTkFC TEVEIiA9PiAoJF9QT1NUWyJFTkFCTEVEIl0gPz8gInllcyIpID09PSAibm8iID8gIm5vIiA6ICJ5 ZXMiLAogICAgIkNTX0NPTlRBSU5FUiIgPT4gY3ViX2NsZWFuX3Rva2VuKCRfUE9TVFsiQ1NfQ09O VEFJTkVSIl0gPz8gImNyb3dkc2VjIiwgImNyb3dkc2VjIiksCiAgICAiTEFQSV9VUkwiID0+IGN1 Yl9jbGVhbl91cmwoJF9QT1NUWyJMQVBJX1VSTCJdID8/ICJodHRwOi8vMTI3LjAuMC4xOjgwODIi KSwKICAgICJMQVBJX1NUUkVBTV9USU1FT1VUIiA9PiAoc3RyaW5nKWN1Yl9jbGVhbl9pbnQoJF9Q T1NUWyJMQVBJX1NUUkVBTV9USU1FT1VUIl0gPz8gMzAwLCAzMDAsIDIwLCA5MDApLAogICAgIkFQ SV9LRVkiID0+IGN1Yl9jbGVhbl9rZXkoJHBvc3RlZEFwaUtleSAhPT0gIiIgPyAkcG9zdGVkQXBp S2V5IDogKCRleGlzdGluZ1siQVBJX0tFWSJdID8/ICIiKSksCiAgICAiQ1NfQ0hBSU4iID0+IGN1 Yl9jbGVhbl90b2tlbigkX1BPU1RbIkNTX0NIQUlOIl0gPz8gIkNST1dEU0VDIiwgIkNST1dEU0VD IiwgMzIpLAogICAgIklQVEFCTEVTX0NIQUlOUyIgPT4gY3ViX2NsZWFuX2NoYWlucygkX1BPU1Rb IklQVEFCTEVTX0NIQUlOUyJdID8/ICJJTlBVVCBET0NLRVItVVNFUiIpLAogICAgIlBST1RFQ1RJ T05fTU9ERSIgPT4gaW5fYXJyYXkoKCRfUE9TVFsiUFJPVEVDVElPTl9NT0RFIl0gPz8gImVzc2Vu dGlhbCIpLCBbImVzc2VudGlhbCIsICJnbG9iYWwiLCAiY3VzdG9tIl0sIHRydWUpID8gJF9QT1NU WyJQUk9URUNUSU9OX01PREUiXSA6ICJlc3NlbnRpYWwiLAogICAgIkZJUkVXQUxMX0JBQ0tFTkQi ID0+IGluX2FycmF5KCgkX1BPU1RbIkZJUkVXQUxMX0JBQ0tFTkQiXSA/PyAiYXV0byIpLCBbImF1 dG8iLCAiZGlyZWN0IiwgImlwc2V0Il0sIHRydWUpID8gJF9QT1NUWyJGSVJFV0FMTF9CQUNLRU5E Il0gOiAiYXV0byIsCiAgICAiVVBEQVRFX0lOVEVSVkFMIiA9PiAoc3RyaW5nKWN1Yl9jbGVhbl9p bnQoJF9QT1NUWyJVUERBVEVfSU5URVJWQUwiXSA/PyAxMCwgMTAsIDEsIDM2MDApLAogICAgIkZV TExfU1lOQ19JTlRFUlZBTCIgPT4gKHN0cmluZyljdWJfY2xlYW5faW50KCRfUE9TVFsiRlVMTF9T WU5DX0lOVEVSVkFMIl0gPz8gOTAwLCA5MDAsIDAsIDg2NDAwKSwKICAgICJERUNJU0lPTl9MSU1J VCIgPT4gKHN0cmluZyljdWJfY2xlYW5faW50KCRfUE9TVFsiREVDSVNJT05fTElNSVQiXSA/PyAx MDAwMDAwLCAxMDAwMDAwLCAxLCA1MDAwMDAwKSwKICAgICJMT0dfTEVWRUwiID0+ICgkX1BPU1Rb IkxPR19MRVZFTCJdID8/ICJpbmZvIikgPT09ICJkZWJ1ZyIgPyAiZGVidWciIDogImluZm8iLAog ICAgIlNLSVBfUFJJVkFURV9JUFY0IiA9PiAoJF9QT1NUWyJTS0lQX1BSSVZBVEVfSVBWNCJdID8/ ICJ5ZXMiKSA9PT0gIm5vIiA/ICJubyIgOiAieWVzIiwKICAgICJTVFJFQU1fU0NPUEVTIiA9PiBj dWJfY2xlYW5fc2NvcGVzKCRfUE9TVFsiU1RSRUFNX1NDT1BFUyJdID8/ICJJcCxSYW5nZSIpLAog ICAgIlNUUkVBTV9PUklHSU5TIiA9PiBjdWJfY2xlYW5fb3JpZ2lucygkX1BPU1RbIlNUUkVBTV9P UklHSU5TIl0gPz8gImNyb3dkc2VjLGNzY2xpIiksCiAgICAiTUFYX0RJUkVDVF9SVUxFUyIgPT4g KHN0cmluZyljdWJfY2xlYW5faW50KCRfUE9TVFsiTUFYX0RJUkVDVF9SVUxFUyJdID8/IDUwMDAs IDUwMDAsIDEwMCwgMjAwMDAwKSwKICAgICJJUFNFVF9OQU1FIiA9PiBjdWJfY2xlYW5fdG9rZW4o JF9QT1NUWyJJUFNFVF9OQU1FIl0gPz8gImNyb3dkc2VjNCIsICJjcm93ZHNlYzQiLCAzMiksCiAg ICAiTk9USUZZX0VOQUJMRUQiID0+ICgkX1BPU1RbIk5PVElGWV9FTkFCTEVEIl0gPz8gInllcyIp ID09PSAibm8iID8gIm5vIiA6ICJ5ZXMiLAogICAgIk5PVElGWV9VTlJBSUQiID0+ICgkX1BPU1Rb Ik5PVElGWV9VTlJBSUQiXSA/PyAieWVzIikgPT09ICJubyIgPyAibm8iIDogInllcyIsCiAgICAi Tk9USUZZX1RFTEVHUkFNIiA9PiAoJF9QT1NUWyJOT1RJRllfVEVMRUdSQU0iXSA/PyAieWVzIikg PT09ICJubyIgPyAibm8iIDogInllcyIsCiAgICAiTk9USUZZX0NPT0xET1dOIiA9PiAoc3RyaW5n KWN1Yl9jbGVhbl9pbnQoJF9QT1NUWyJOT1RJRllfQ09PTERPV04iXSA/PyAxODAwLCAxODAwLCA2 MCwgODY0MDApLAogICAgIlRFTEVHUkFNX0hUVFBfQ09ORklHIiA9PiBjdWJfY2xlYW5fcGF0aCgk X1BPU1RbIlRFTEVHUkFNX0hUVFBfQ09ORklHIl0gPz8gIi9tbnQvY2FjaGUvYXBwZGF0YS9jcm93 ZHNlYy9ub3RpZmljYXRpb25zL2h0dHAueWFtbCIsICIvbW50L2NhY2hlL2FwcGRhdGEvY3Jvd2Rz ZWMvbm90aWZpY2F0aW9ucy9odHRwLnlhbWwiKSwKICAgICJIRUFMVEhfTUlOX0lQU0VUX0VOVFJJ RVMiID0+IChzdHJpbmcpY3ViX2NsZWFuX2ludCgkX1BPU1RbIkhFQUxUSF9NSU5fSVBTRVRfRU5U UklFUyJdID8/IDEsIDEsIDAsIDUwMDAwMDApLAogICAgIkhFQUxUSF9NQVhfU1lOQ19BR0UiID0+ IChzdHJpbmcpY3ViX2NsZWFuX2ludCgkX1BPU1RbIkhFQUxUSF9NQVhfU1lOQ19BR0UiXSA/PyA5 MDAsIDkwMCwgNjAsIDg2NDAwKSwKICAgICJDVE1fRFJPUFNfRU5BQkxFRCIgPT4gKCRfUE9TVFsi Q1RNX0RST1BTX0VOQUJMRUQiXSA/PyAibm8iKSA9PT0gInllcyIgPyAieWVzIiA6ICJubyIsCiAg ICAiQ1RNX0RST1BTX0xPRyIgPT4gY3ViX2NsZWFuX3BhdGgoJF9QT1NUWyJDVE1fRFJPUFNfTE9H Il0gPz8gIi9tbnQvY2FjaGUvYXBwZGF0YS9jcm93ZHNlYy10aHJlYXQtbWFwL2Ryb3BzL2Ryb3Bz Lmpzb25sIiwgIi9tbnQvY2FjaGUvYXBwZGF0YS9jcm93ZHNlYy10aHJlYXQtbWFwL2Ryb3BzL2Ry b3BzLmpzb25sIiksCiAgICAiQ1RNX0RST1BTX1BSRUZJWCIgPT4gY3ViX2NsZWFuX3Rva2VuKCRf UE9TVFsiQ1RNX0RST1BTX1BSRUZJWCJdID8/ICJDUk9XRFNFQ19EUk9QIiwgIkNST1dEU0VDX0RS T1AiLCAzMiksCiAgICAiQ1RNX0RST1BTX1JBVEUiID0+IGN1Yl9jbGVhbl9yYXRlKCRfUE9TVFsi Q1RNX0RST1BTX1JBVEUiXSA/PyAiMzAvbWluIiwgIjMwL21pbiIpLAogICAgIkNUTV9EUk9QU19C VVJTVCIgPT4gKHN0cmluZyljdWJfY2xlYW5faW50KCRfUE9TVFsiQ1RNX0RST1BTX0JVUlNUIl0g Pz8gNjAsIDYwLCAxLCAxMDAwMCksCiAgICAiQ1RNX0RST1BTX01BWF9MSU5FUyIgPT4gKHN0cmlu ZyljdWJfY2xlYW5faW50KCRfUE9TVFsiQ1RNX0RST1BTX01BWF9MSU5FUyJdID8/IDUwMDAsIDUw MDAsIDEwMCwgMTAwMDAwMCksCiAgXTsKICBjdWJfd3JpdGVfY2ZnKCR2YWx1ZXMpOwogIGVjaG8g IkNvbmZpZ3VyYXRpb24gc2F2ZWQuIFJlc3RhcnRpbmcgYm91bmNlci4uLlxuXG4iOwogIHBhc3N0 aHJ1KCIvZXRjL3JjLmQvcmMuY3Jvd2RzZWMtdW5yYWlkLWJvdW5jZXIgcmVzdGFydCAyPiYxIik7 CiAgZWNobyAiXG5TYXZlZCBjb25maWd1cmF0aW9uLlxuIjsKfSBlbHNlaWYgKCRtb2RlID09PSAi YWN0aW9uIikgewogICRhbGxvd2VkID0gWwogICAgInN0YXJ0IiA9PiAiL2V0Yy9yYy5kL3JjLmNy b3dkc2VjLXVucmFpZC1ib3VuY2VyIHN0YXJ0IiwKICAgICJzdG9wIiA9PiAiL2V0Yy9yYy5kL3Jj LmNyb3dkc2VjLXVucmFpZC1ib3VuY2VyIHN0b3AiLAogICAgInJlc3RhcnQiID0+ICIvZXRjL3Jj LmQvcmMuY3Jvd2RzZWMtdW5yYWlkLWJvdW5jZXIgcmVzdGFydCIsCiAgICAic3luYyIgPT4gIi9l dGMvcmMuZC9yYy5jcm93ZHNlYy11bnJhaWQtYm91bmNlciBzeW5jIiwKICAgICJ0ZXN0IiA9PiAi L3Vzci9sb2NhbC9zYmluL2Nyb3dkc2VjLXVucmFpZC1ib3VuY2VyIHRlc3QiLAogICAgImhlYWx0 aCIgPT4gIi91c3IvbG9jYWwvc2Jpbi9jcm93ZHNlYy11bnJhaWQtYm91bmNlciBoZWFsdGggLS1u b3RpZnkiLAogICAgImluc3RhbGwiID0+ICIvdXNyL2xvY2FsL3NiaW4vY3Jvd2RzZWMtdW5yYWlk LWJvdW5jZXIgaW5zdGFsbCIsCiAgXTsKICAkYWN0aW9uID0gJF9QT1NUWyJhY3Rpb24iXSA/PyAi IjsKICBpZiAoIWlzc2V0KCRhbGxvd2VkWyRhY3Rpb25dKSkgY3ViX2ZhaWwoIkludmFsaWQgYWN0 aW9uIik7CiAgcGFzc3RocnUoJGFsbG93ZWRbJGFjdGlvbl0gLiAiIDI+JjEiKTsKfSBlbHNlIHsK ICBjdWJfZmFpbCgiSW52YWxpZCByZXF1ZXN0Iik7Cn0KCmVjaG8gIlxuXG5Eb25lLiBZb3UgY2Fu IHJlZnJlc2ggdGhlIHBsdWdpbiBwYWdlLiI7CmVjaG8gIjwvcHJlPiI7Cg== B64_PHP if [ ! -f "${BOOT_DIR}/config.cfg" ]; then cat > "${BOOT_DIR}/config.cfg" <<'CFG' ENABLED="yes" CS_CONTAINER="crowdsec" LAPI_URL="http://127.0.0.1:8082" API_KEY="" CS_CHAIN="CROWDSEC" IPTABLES_CHAINS="INPUT DOCKER-USER" UPDATE_INTERVAL="10" FULL_SYNC_INTERVAL="900" DECISION_LIMIT="1000000" LOG_LEVEL="info" SKIP_PRIVATE_IPV4="yes" STREAM_SCOPES="Ip,Range" STREAM_ORIGINS="crowdsec,cscli" MAX_DIRECT_RULES="5000" PROTECTION_MODE="essential" FIREWALL_BACKEND="auto" IPSET_NAME="crowdsec4" LAPI_STREAM_TIMEOUT="300" NOTIFY_ENABLED="yes" NOTIFY_UNRAID="yes" NOTIFY_TELEGRAM="yes" NOTIFY_COOLDOWN="1800" TELEGRAM_HTTP_CONFIG="/mnt/cache/appdata/crowdsec/notifications/http.yaml" HEALTH_MIN_IPSET_ENTRIES="1" HEALTH_MAX_SYNC_AGE="900" CFG fi cat > "${BOOT_DIR}/health.cron" <<'CRON' */5 * * * * /etc/rc.d/rc.crowdsec-unraid-bouncer health >/dev/null 2>&1 CRON chmod 600 "${BOOT_DIR}/health.cron" /usr/local/sbin/update_cron >/dev/null 2>&1 || true if command -v logger >/dev/null 2>&1; then logger -t crowdsec-unraid-bouncer "Installed plugin" fi /etc/rc.d/rc.crowdsec-unraid-bouncer restart || true ]]> /dev/null 2>&1; then logger -t crowdsec-unraid-bouncer "Removed plugin runtime files; persistent config kept in /boot/config/plugins/crowdsec-unraid-bouncer" fi ]]>