From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-lj1-x242.google.com (mail-lj1-x242.google.com [IPv6:2a00:1450:4864:20::242]) by sourceware.org (Postfix) with ESMTPS id 72D0E3851C29 for ; Tue, 15 Jun 2021 20:22:22 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 72D0E3851C29 Received: by mail-lj1-x242.google.com with SMTP id b37so422530ljr.13 for ; Tue, 15 Jun 2021 13:22:22 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=JDAYBxe/z09N3JDVUtv8YYhTTH7K8ZYsfi6hCScjRdI=; b=txYON4TT3X8LTlyBBjTEjGaArgj9WGlz/2fykd4XKIZluPqbeQy89Bi6BLfVLxxr8V CHg8lqZn88t40OK9M7zO3rH0oydr5e1M2+y3JsjmbDcUIkBG9EMKGCBCZhgRSSUIXyEc r/mfDmL8wX3oHAPl0wsWckKJIAOYjQwvM8mLMxecCpZpqL+juQXG17GNunqTQ0203/j0 uPwYP+GK42zarV4ZO2Icr2XL3+t17DlwFRPmV59pbUWe7ZHCWcF+47X/EQM8B52c8qPO y16amUGIiGSZjbqqtp0V/8k3bAuetLEW1XJPS3rZAmRLO1CqPAjLpb4XPt43XVwI//yV mabg== X-Gm-Message-State: AOAM5316mT6c/kXmq1gK2rD34eUuaZrcEosOkRN7tXo0x63AGcT1q0Uq 17jtHJgpd1VgLHCL6xkYy1HtksmQrtn+DsmbEQEhtZE8RtNtOQ== X-Google-Smtp-Source: ABdhPJzRm4NYm9Z0JTKtTdvUfSN48hBv1KEzldzRR26fN1hbvcJ3NIM54T59kPk+v20sLONyOUCHCRgDhUB0uMxk22w= X-Received: by 2002:a2e:6e06:: with SMTP id j6mr1248536ljc.3.1623788540614; Tue, 15 Jun 2021 13:22:20 -0700 (PDT) MIME-Version: 1.0 From: Amit Choudhary Date: Wed, 16 Jun 2021 01:52:08 +0530 Message-ID: Subject: [Confirmed for long needles] Fastest String Search Algorithm. To: GNU C Library Content-Type: multipart/mixed; boundary="00000000000028759105c4d3bbe6" X-Spam-Status: No, score=0.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM, KAM_ASCII_DIVIDERS, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=no autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 15 Jun 2021 20:22:24 -0000 --00000000000028759105c4d3bbe6 Content-Type: text/plain; charset="UTF-8" Hi, In case someone is interested, else please ignore (just sending on public domain for other people if they do web search) [Tested on latest glibc - glibc-2.33]. I have done final testing with long needles. I modified bench-strstr.c and included my algorithm in it. Attached are the diff, analysis.xlsx, and original bench-strstr.out. Below is my code: ============================================================================================== // Choudhary algorithm static char * chal(char *text, char *pattern) { #define false 0 #define true 1 #define ALPHABET_SIZE 256 long i = 0; long index = 0; long end_index = 0; int not_found = false; long text_len = strlen(text); long pattern_len = strlen(pattern); long pi_44 = pattern_len - 1; long pi_34 = (3 * pattern_len) / 4; long pi_24 = pattern_len / 2; long pi_14 = pattern_len / 4; long fps = 0; long skip_table[ALPHABET_SIZE] = {0}; // preprocess pattern and fill skip_table for (i = 0; i < pattern_len; i++) { skip_table[(int)(pattern[i])] = pattern_len - 1 - i; } // now search for (i = 0; i < text_len; i++) { if ((text_len - i) < pattern_len) { //printf("\tfps = %ld\n", fps); return NULL; //return -1; } if (pattern[pi_44] != text[i + pi_44]) { if (skip_table[(int)(text[i + pi_44])] > 0) { i = i + skip_table[(int)(text[i + pi_44])] - 1; } continue; } if (pattern[0] != text[i]) { continue; } if (pattern[pi_24] != text[i + pi_24]) { continue; } if (pattern[pi_34] != text[i + pi_34]) { continue; } if (pattern[pi_14] != text[i + pi_14]) { continue; } fps = fps + 1; end_index = i + pi_44; not_found = false; for (index = i; index <= end_index; index++) { if (text[index] != pattern[index - i]) { not_found = true; break; } } // end of inner for loop if (not_found == false) { // match is found //printf("\tfps = %ld\n", fps); return (text + i); //return i; } } // end of outer for loop //printf("\tfps = %ld\n", fps); return NULL; //return -1; } // end of chal ============================================================================================== Amit --00000000000028759105c4d3bbe6 Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; name="analysis.xlsx" Content-Disposition: attachment; filename="analysis.xlsx" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kpyhow980 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 --00000000000028759105c4d3bbe6 Content-Type: text/x-patch; charset="US-ASCII"; name="glibc-2.33.diff" Content-Disposition: attachment; filename="glibc-2.33.diff" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kpyhpjae1 ZGlmZiAtcnUgZ2xpYmMtMi4zMy5vcmlnL2JlbmNodGVzdHMvYmVuY2gtc3Ryc3RyLmMgZ2xpYmMt Mi4zMy9iZW5jaHRlc3RzL2JlbmNoLXN0cnN0ci5jCi0tLSBnbGliYy0yLjMzLm9yaWcvYmVuY2h0 ZXN0cy9iZW5jaC1zdHJzdHIuYwkyMDIxLTAyLTAxIDIyOjQ1OjMzLjAwMDAwMDAwMCArMDUzMAor KysgZ2xpYmMtMi4zMy9iZW5jaHRlc3RzL2JlbmNoLXN0cnN0ci5jCTIwMjEtMDYtMTYgMDE6MjI6 MzQuMzIwOTEyMzUyICswNTMwCkBAIC00NSw2ICs0NSw4IEBACiAibGlicmFyeSBmdW5jdGlvbnMs IGFuZCBfd2hlcmVfIGluIHRoaXMgbWFudWFsIHlvdSBjYW4gZmluZCBtb3JlIHNwZWNpZmljICIK ICJpbmZvcm1hdGlvbiBhYm91dCB0aGVtLlxuIjsKIAorc3RhdGljIGNoYXIgKmNoYWwoY2hhciAq dGV4dCwgY2hhciAqcGF0dGVybik7CisKIC8qIFNpbXBsZSB5ZXQgZWZmaWNpZW50IHN0cnN0ciAt IGZvciBuZWVkbGVzIDwgMzIgYnl0ZXMgaXQgaXMgMi00IHRpbWVzCiAgICBmYXN0ZXIgdGhhbiB0 aGUgb3B0aW1pemVkIHR3b3dheV9zdHJzdHIuICAqLwogc3RhdGljIGNoYXIgKgpAQCAtMTI1LDYg KzEyNyw3IEBACiB0eXBlZGVmIGNoYXIgKigqcHJvdG9fdCkgKGNvbnN0IGNoYXIgKiwgY29uc3Qg Y2hhciAqKTsKIAogSU1QTCAoc3Ryc3RyLCAxKQorSU1QTCAoY2hhbCwgMCkKIElNUEwgKHR3b3dh eV9zdHJzdHIsIDApCiBJTVBMIChiYXNpY19zdHJzdHIsIDApCiAKQEAgLTIxMCw2ICsyMTMsNyBA QAogICAgaW5jcmVhc2luZyBuZWVkbGUgc2l6ZXMuICBUaGUgc2xvd2VzdCBjYXNlcyBvZiB0aGUg dHdvIGltcGxlbWVudGF0aW9ucyBhcmUKICAgIHdpdGhpbiBhIGZhY3RvciBvZiAyIG9uIHNldmVy YWwgZGlmZmVyZW50IG1pY3JvYXJjaGl0ZWN0dXJlcy4gICovCiAKKyNpZiAwCiBzdGF0aWMgdm9p ZAogdGVzdF9oYXJkX25lZWRsZSAoc2l6ZV90IG5lX2xlbiwgc2l6ZV90IGhzX2xlbikKIHsKQEAg LTI3OCw2ICsyODIsOTQgQEAKICAgICBwdXRjaGFyICgnXG4nKTsKICAgfQogfQorI2VuZGlmCisK Ky8vIENob3VkaGFyeSBhbGdvcml0aG0KK3N0YXRpYyBjaGFyICoKK2NoYWwoY2hhciAqdGV4dCwg Y2hhciAqcGF0dGVybikKK3sKKworI2RlZmluZSBmYWxzZSAwCisjZGVmaW5lIHRydWUgMQorI2Rl ZmluZSBBTFBIQUJFVF9TSVpFIDI1NgorCisgICAgbG9uZyBpID0gMDsKKyAgICBsb25nIGluZGV4 ID0gMDsKKyAgICBsb25nIGVuZF9pbmRleCA9IDA7CisgICAgaW50IG5vdF9mb3VuZCA9IGZhbHNl OworCisgICAgbG9uZyB0ZXh0X2xlbiA9IHN0cmxlbih0ZXh0KTsKKyAgICBsb25nIHBhdHRlcm5f bGVuID0gc3RybGVuKHBhdHRlcm4pOworCisgICAgbG9uZyBwaV80NCA9IHBhdHRlcm5fbGVuIC0g MTsKKyAgICBsb25nIHBpXzM0ID0gKDMgKiBwYXR0ZXJuX2xlbikgLyA0OworICAgIGxvbmcgcGlf MjQgPSBwYXR0ZXJuX2xlbiAvIDI7CisgICAgbG9uZyBwaV8xNCA9IHBhdHRlcm5fbGVuIC8gNDsK KworICAgIGxvbmcgZnBzID0gMDsKKyAgICBsb25nIHNraXBfdGFibGVbQUxQSEFCRVRfU0laRV0g PSB7MH07CisKKyAgICAvLyBwcmVwcm9jZXNzIHBhdHRlcm4gYW5kIGZpbGwgc2tpcF90YWJsZQor ICAgIGZvciAoaSA9IDA7IGkgPCBwYXR0ZXJuX2xlbjsgaSsrKSB7CisgICAgICAgIHNraXBfdGFi bGVbKGludCkocGF0dGVybltpXSldID0gcGF0dGVybl9sZW4gLSAxIC0gaTsKKyAgICB9CisKKyAg ICAvLyBub3cgc2VhcmNoCisgICAgZm9yIChpID0gMDsgaSA8IHRleHRfbGVuOyBpKyspIHsKKwor ICAgICAgICBpZiAoKHRleHRfbGVuIC0gaSkgPCBwYXR0ZXJuX2xlbikgeworICAgICAgICAgICAg ICAgIC8vcHJpbnRmKCJcdGZwcyA9ICVsZFxuIiwgZnBzKTsKKyAgICAgICAgICAgIHJldHVybiBO VUxMOworICAgICAgICAgICAgLy9yZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBpZiAo cGF0dGVybltwaV80NF0gIT0gdGV4dFtpICsgcGlfNDRdKSB7CisgICAgICAgICAgICBpZiAoc2tp cF90YWJsZVsoaW50KSh0ZXh0W2kgKyBwaV80NF0pXSA+IDApIHsKKyAgICAgICAgICAgICAgICBp ID0gaSArIHNraXBfdGFibGVbKGludCkodGV4dFtpICsgcGlfNDRdKV0gLSAxOworICAgICAgICAg ICAgfQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAocGF0 dGVyblswXSAhPSB0ZXh0W2ldKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQor CisgICAgICAgIGlmIChwYXR0ZXJuW3BpXzI0XSAhPSB0ZXh0W2kgKyBwaV8yNF0pIHsKKyAgICAg ICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHBhdHRlcm5bcGlfMzRd ICE9IHRleHRbaSArIHBpXzM0XSkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0K KworICAgICAgICBpZiAocGF0dGVybltwaV8xNF0gIT0gdGV4dFtpICsgcGlfMTRdKSB7CisgICAg ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGZwcyA9IGZwcyArIDE7Cisg ICAgICAgIGVuZF9pbmRleCA9IGkgKyBwaV80NDsKKyAgICAgICAgbm90X2ZvdW5kID0gZmFsc2U7 CisKKyAgICAgICAgZm9yIChpbmRleCA9IGk7IGluZGV4IDw9IGVuZF9pbmRleDsgaW5kZXgrKykg eworICAgICAgICAgICAgaWYgKHRleHRbaW5kZXhdICE9IHBhdHRlcm5baW5kZXggLSBpXSkgewor ICAgICAgICAgICAgICAgIG5vdF9mb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICAgICB9CisgICAgICAgIH0gLy8gZW5kIG9mIGlubmVyIGZvciBsb29wCisKKyAg ICAgICAgaWYgKG5vdF9mb3VuZCA9PSBmYWxzZSkgeyAvLyBtYXRjaCBpcyBmb3VuZAorICAgICAg ICAgICAgLy9wcmludGYoIlx0ZnBzID0gJWxkXG4iLCBmcHMpOworICAgICAgICAgICAgcmV0dXJu ICh0ZXh0ICsgaSk7CisgICAgICAgICAgICAvL3JldHVybiBpOworICAgICAgICB9CisKKyAgICB9 IC8vIGVuZCBvZiBvdXRlciBmb3IgbG9vcAorCisgICAgICAgICAgICAgICAgLy9wcmludGYoIlx0 ZnBzID0gJWxkXG4iLCBmcHMpOworICAgIHJldHVybiBOVUxMOworICAgIC8vcmV0dXJuIC0xOwor Cit9IC8vIGVuZCBvZiBjaGFsCiAKIHN0YXRpYyBpbnQKIHRlc3RfbWFpbiAodm9pZCkKQEAgLTI5 MiwyMCArMzg0LDIxIEBACiAgIGZvciAoc2l6ZV90IGhsZW4gPSA2NDsgaGxlbiA8PSAyNTY7IGhs ZW4gKz0gMzIpCiAgICAgZm9yIChzaXplX3Qga2xlbiA9IDE7IGtsZW4gPD0gMTY7IGtsZW4rKykK ICAgICAgIHsKLQlkb190ZXN0ICgxLCAzLCBobGVuLCBrbGVuLCAwKTsKLQlkb190ZXN0ICgwLCA5 LCBobGVuLCBrbGVuLCAxKTsKKwkvL2RvX3Rlc3QgKDEsIDMsIGhsZW4sIGtsZW4sIDApOworCS8v ZG9fdGVzdCAoMCwgOSwgaGxlbiwga2xlbiwgMSk7CiAgICAgICB9CiAKLSAgZm9yIChzaXplX3Qg aGxlbiA9IDI1NjsgaGxlbiA8PSA2NTUzNjsgaGxlbiAqPSAyKQotICAgIGZvciAoc2l6ZV90IGts ZW4gPSAxNjsga2xlbiA8PSAyNTY7IGtsZW4gKj0gMikKKyAgZm9yIChzaXplX3QgaGxlbiA9IDEw MjQ7IGhsZW4gPD0gNjU1MzY7IGhsZW4gKj0gMikKKyAgICAvL2ZvciAoc2l6ZV90IGtsZW4gPSAx Njsga2xlbiA8PSAyNTY7IGtsZW4gKj0gMikKKyAgICBmb3IgKHNpemVfdCBrbGVuID0gMTAyNDsg a2xlbiA8PSBobGVuOyBrbGVuICo9IDIpCiAgICAgICB7CiAJZG9fdGVzdCAoMSwgMTEsIGhsZW4s IGtsZW4sIDApOwogCWRvX3Rlc3QgKDE0LCA1LCBobGVuLCBrbGVuLCAxKTsKICAgICAgIH0KIAot ICB0ZXN0X2hhcmRfbmVlZGxlICg2NCwgNjU1MzYpOwotICB0ZXN0X2hhcmRfbmVlZGxlICgyNTYs IDY1NTM2KTsKLSAgdGVzdF9oYXJkX25lZWRsZSAoMTAyNCwgNjU1MzYpOworICAvL3Rlc3RfaGFy ZF9uZWVkbGUgKDY0LCA2NTUzNik7CisgIC8vdGVzdF9oYXJkX25lZWRsZSAoMjU2LCA2NTUzNik7 CisgIC8vdGVzdF9oYXJkX25lZWRsZSAoMTAyNCwgNjU1MzYpOwogCiAgIHJldHVybiByZXQ7CiB9 Cg== --00000000000028759105c4d3bbe6 Content-Type: application/octet-stream; name="bench-strstr.out" Content-Disposition: attachment; filename="bench-strstr.out" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kpyhqhwk2 ICAgICAgICAgICAgICAgICAgICAgICAJYmFzaWNfc3Ryc3RyCXR3b3dheV9zdHJzdHIJY2hhbAlf X3N0cnN0cl9zc2UyX3VuYWxpZ25lZAlfX3N0cnN0cl9zc2UyCkxlbmd0aCAxMDI0LzEwMjQsIGFs aWdubWVudCAgMS8xMSwgZm91bmQ6CTIwODkuMDYJNDI4LjEyNQkxMjI1NS41CTQ1NjEuNzIJNDI5 LjY4OApMZW5ndGggMTAyNC8xMDI0LCBhbGlnbm1lbnQgMTQvIDUsIGZhaWwgOgk0NTM2LjcyCTI5 OS4yMTkJOTExMy4yOAk5NzQuMjE5CTIyNC4yMTkKTGVuZ3RoIDIwNDgvMTAyNCwgYWxpZ25tZW50 ICAxLzExLCBmb3VuZDoJOTU5OC40NAkyMDg4Ni43CTEyOTA5LjQJMzkyNQkyMDg2Ni40Ckxlbmd0 aCAyMDQ4LzEwMjQsIGFsaWdubWVudCAxNC8gNSwgZmFpbCA6CTEyMzQxLjQJMTg5NzIuNwk4NjI4 LjkxCTMxMDMuOTEJMTkyODEuMgpMZW5ndGggMjA0OC8yMDQ4LCBhbGlnbm1lbnQgIDEvMTEsIGZv dW5kOgk0NDc2LjU2CTYyNQkyMTg2MS43CTg0MjEuODgJNjUxLjU2MgpMZW5ndGggMjA0OC8yMDQ4 LCBhbGlnbm1lbnQgMTQvIDUsIGZhaWwgOgkxNDk5Ni45CTM0MC42MjUJMTgxMDkuNAk5ODkyLjk3 CTM4OS44NDQKTGVuZ3RoIDQwOTYvMTAyNCwgYWxpZ25tZW50ICAxLzExLCBmb3VuZDoJMTQ5NzIu NwkyMjExNy4yCTE0OTY4LjgJNjA1OC41OQkyMjMyMi43Ckxlbmd0aCA0MDk2LzEwMjQsIGFsaWdu bWVudCAxNC8gNSwgZmFpbCA6CTE3MjkxLjQJMjA0NDUuMwkxMTAyMS45CTQ2ODIuODEJMjA1NDEu NApMZW5ndGggNDA5Ni8yMDQ4LCBhbGlnbm1lbnQgIDEvMTEsIGZvdW5kOgkxNjg5Ni4xCTM5NTMy LjgJMjQyMjIuNwk0MzMzNy41CTQwOTk2LjkKTGVuZ3RoIDQwOTYvMjA0OCwgYWxpZ25tZW50IDE0 LyA1LCBmYWlsIDoJMzA3MjEuMQkzOTg2MS43CTE4NDg2LjcJODM5NC41MwkzODQ2OApMZW5ndGgg NDA5Ni80MDk2LCBhbGlnbm1lbnQgIDEvMTEsIGZvdW5kOgk5MjcwLjMxCTE0MTkuNTMJNTAxODIJ MTYyOTUuMwkxMjgyLjgxCkxlbmd0aCA0MDk2LzQwOTYsIGFsaWdubWVudCAxNC8gNSwgZmFpbCA6 CTM3MTg1LjkJNjAzLjEyNQkxMTM2My4zCTEwNDc1CTk3NQpMZW5ndGggODE5Mi8xMDI0LCBhbGln bm1lbnQgIDEvMTEsIGZvdW5kOgk3OTE1NS41CTQ0MjQ4LjQJMTUyNzQuMgkxNzcwNC43CTI2MTM1 LjIKTGVuZ3RoIDgxOTIvMTAyNCwgYWxpZ25tZW50IDE0LyA1LCBmYWlsIDoJNzE2NDMJMjEwMjgu OQkxMDI1NwkxNjk0MwkzNDY2OS41Ckxlbmd0aCA4MTkyLzIwNDgsIGFsaWdubWVudCAgMS8xMSwg Zm91bmQ6CTU5NjI4LjkJMzUzODIuOAkxMjIzOS4xCTE1MjE2LjQJMzU3OTguNApMZW5ndGggODE5 Mi8yMDQ4LCBhbGlnbm1lbnQgMTQvIDUsIGZhaWwgOgkzNzU3NQkyNDc1MAk3NDYwLjE2CTE1MTMx LjIJMjExNDQuNQpMZW5ndGggODE5Mi80MDk2LCBhbGlnbm1lbnQgIDEvMTEsIGZvdW5kOgk0Mjg3 MS45CTc2MTIzLjQJMzM3NTguNgkzNzI5NS4zCTMxNzY5LjUKTGVuZ3RoIDgxOTIvNDA5NiwgYWxp Z25tZW50IDE0LyA1LCBmYWlsIDoJMzkyMDMuOQk0MDE3MS45CTEwNjAxLjYJMzYwMzIJMzIxMDUu NQpMZW5ndGggODE5Mi84MTkyLCBhbGlnbm1lbnQgIDEvMTEsIGZvdW5kOgkxMzI1Ny44CTIxODgu MjgJNDE4ODQuNAkyMjk5NC41CTE3ODUuOTQKTGVuZ3RoIDgxOTIvODE5MiwgYWxpZ25tZW50IDE0 LyA1LCBmYWlsIDoJNDM0ODQuNAk4MDAuNzgxCTIyODYwLjkJMTAyNTMuMQk3NzIuNjU2Ckxlbmd0 aCAxNjM4NC8xMDI0LCBhbGlnbm1lbnQgIDEvMTEsIGZvdW5kOgk1NDY1Mi4zCTIzNDUwLjgJMTYw MzMuNgkxNjAzMgkyMDkyMC4zCkxlbmd0aCAxNjM4NC8xMDI0LCBhbGlnbm1lbnQgMTQvIDUsIGZh aWwgOgk1NTk1MAkyMDgxOAkxNDcyMS45CTE1OTYwLjIJMTk3MjUuOApMZW5ndGggMTYzODQvMjA0 OCwgYWxpZ25tZW50ICAxLzExLCBmb3VuZDoJMzM5NzQuMgkzMDY5OC40CTE0ODQxLjQJMTY5MzYu NwkyOTEyMy40Ckxlbmd0aCAxNjM4NC8yMDQ4LCBhbGlnbm1lbnQgMTQvIDUsIGZhaWwgOgk0MzYw OS40CTU0MDA3LjgJMTU4MzIuOAkyODE2Mi41CTMxNjgyCkxlbmd0aCAxNjM4NC80MDk2LCBhbGln bm1lbnQgIDEvMTEsIGZvdW5kOgk0NTUwOS40CTUxOTg0LjQJMjUzNDAuNgk2NDE3OC4xCTQwNDA3 Ckxlbmd0aCAxNjM4NC80MDk2LCBhbGlnbm1lbnQgMTQvIDUsIGZhaWwgOgk0NDY5NS4zCTQ3NTYz LjMJMTg3OTMJNDAwMjUuOAkzODQ3Ni42Ckxlbmd0aCAxNjM4NC84MTkyLCBhbGlnbm1lbnQgIDEv MTEsIGZvdW5kOgk3NjAxMC45CTg4ODAwLjgJMjg5MjEuMQk4Mjk1MAk2NzU3OC4xCkxlbmd0aCAx NjM4NC84MTkyLCBhbGlnbm1lbnQgMTQvIDUsIGZhaWwgOgkxMTE4NzIJMTA4NzkxCTI5NzMyCTc5 ODA4LjYJODAzNzEuMQpMZW5ndGggMTYzODQvMTYzODQsIGFsaWdubWVudCAgMS8xMSwgZm91bmQ6 CTI1NjYzLjMJMjc3OC45MQk1NDgxNC4xCTMyODMxLjIJMjc2NC4wNgpMZW5ndGggMTYzODQvMTYz ODQsIGFsaWdubWVudCAxNC8gNSwgZmFpbCA6CTE3MTQ5OAkxNjUwCTM4NjQ5LjIJMjA0NzEuMQkx Mzc4LjEyCkxlbmd0aCAzMjc2OC8xMDI0LCBhbGlnbm1lbnQgIDEvMTEsIGZvdW5kOgkxMTQxMTIJ Mzc5MjQuMgkyNDQyOS43CTMyODA5LjQJMzYyMDAKTGVuZ3RoIDMyNzY4LzEwMjQsIGFsaWdubWVu dCAxNC8gNSwgZmFpbCA6CTExNTQwOQkzNTc1Ny44CTIzNjc3LjMJMjI4MTcuMgkzNTY0MC42Ckxl bmd0aCAzMjc2OC8yMDQ4LCBhbGlnbm1lbnQgIDEvMTEsIGZvdW5kOgkxMTE0NjQJMjk5MTgJMjI0 NDAuNgk1NzkxMC4yCTI5MzU3LjgKTGVuZ3RoIDMyNzY4LzIwNDgsIGFsaWdubWVudCAxNC8gNSwg ZmFpbCA6CTEyMjc4MAkzODM0My44CTMxNzAzLjkJNzA2MzcuNQkyODg3OC45Ckxlbmd0aCAzMjc2 OC80MDk2LCBhbGlnbm1lbnQgIDEvMTEsIGZvdW5kOgkxNjE2MjMJODYzMTEuNwk0MDAyMS4xCTYx NTczLjQJODM3ODYuNwpMZW5ndGggMzI3NjgvNDA5NiwgYWxpZ25tZW50IDE0LyA1LCBmYWlsIDoJ MTY4NjQ4CTk0MDgxLjIJNjIwNDEuNAk1NzA1Ni4yCTU0MDY0LjgKTGVuZ3RoIDMyNzY4LzgxOTIs IGFsaWdubWVudCAgMS8xMSwgZm91bmQ6CTE5MDc4NgkxNTM4NDUJNTE0NTMuOQkxMjAyNzcJOTMy MjQuMgpMZW5ndGggMzI3NjgvODE5MiwgYWxpZ25tZW50IDE0LyA1LCBmYWlsIDoJMjI0MjcxCTEz NzA1NQk1MDY4OS4xCTEwOTM4OAk4NTI2MC45Ckxlbmd0aCAzMjc2OC8xNjM4NCwgYWxpZ25tZW50 ICAxLzExLCBmb3VuZDoJMjkxMzUxCTIzODUyNwk1OTQ5MwkxNjIzNjEJMTM4Njk4Ckxlbmd0aCAz Mjc2OC8xNjM4NCwgYWxpZ25tZW50IDE0LyA1LCBmYWlsIDoJMzYzMDcwCTE5NTAyOAk4NTQzOC4z CTE5MjgyNAkxNjgzMzcKTGVuZ3RoIDMyNzY4LzMyNzY4LCBhbGlnbm1lbnQgIDEvMTEsIGZvdW5k OgkzMzA3MC4zCTU1NDIuOTcJMzQ5NTMxCTgwNzQzLjgJNjA5Ni44OApMZW5ndGggMzI3NjgvMzI3 NjgsIGFsaWdubWVudCAxNC8gNSwgZmFpbCA6CTk5MTg0MQk0NDg5Ljg0CTI4ODU3Mwk3Mzc0Ni45 CTUxNjkuNTMKTGVuZ3RoIDY1NTM2LzEwMjQsIGFsaWdubWVudCAgMS8xMSwgZm91bmQ6CTI2MDg5 MQk2MTU4Ny41CTM3NzIyLjcJNTEwNDcuNwk5MDc4NS45Ckxlbmd0aCA2NTUzNi8xMDI0LCBhbGln bm1lbnQgMTQvIDUsIGZhaWwgOgkzNTU1MzgJNTQ0NjUuNgkyNzk5NS4zCTYxMTMyCTQ3ODYwLjIK TGVuZ3RoIDY1NTM2LzIwNDgsIGFsaWdubWVudCAgMS8xMSwgZm91bmQ6CTI1Mjc5OAk4MDAxMC45 CTQzMDAwLjgJODE1MjMuNAk5MTgzMgpMZW5ndGggNjU1MzYvMjA0OCwgYWxpZ25tZW50IDE0LyA1 LCBmYWlsIDoJMzczOTA1CTkxNTI0LjIJNDE4OTQuNQk3NTQ4MS4yCTczNjYyLjUKTGVuZ3RoIDY1 NTM2LzQwOTYsIGFsaWdubWVudCAgMS8xMSwgZm91bmQ6CTMzODA0NAkxMDQ4NTkJNzAxNjguOAk5 NzEyNQkxMTg0MTYKTGVuZ3RoIDY1NTM2LzQwOTYsIGFsaWdubWVudCAxNC8gNSwgZmFpbCA6CTM2 NjMwOAk5NzQxMi41CTY1NDMyLjgJOTMzMjQuMgk5NzUyMS4xCkxlbmd0aCA2NTUzNi84MTkyLCBh bGlnbm1lbnQgIDEvMTEsIGZvdW5kOgkzNjg5OTcJMTYyMTY0CTE0NDk0MAkxMzExOTkJMTI0NDc5 Ckxlbmd0aCA2NTUzNi84MTkyLCBhbGlnbm1lbnQgMTQvIDUsIGZhaWwgOgkzMzcwNTUJMTM1OTg0 CTExNDM5NQkxMzM0MDkJMTk2NzM2Ckxlbmd0aCA2NTUzNi8xNjM4NCwgYWxpZ25tZW50ICAxLzEx LCBmb3VuZDoJNTI1MTY5CTUwOTg3OAkzNzI3MzIJNDUwODAwCTQ0NDkwNQpMZW5ndGggNjU1MzYv MTYzODQsIGFsaWdubWVudCAxNC8gNSwgZmFpbCA6CTYyMzQ3OAk0ODQ2NzcJMzkxNjQ0CTQ2MDE3 Mgk0MjcxNDAKTGVuZ3RoIDY1NTM2LzMyNzY4LCBhbGlnbm1lbnQgIDEvMTEsIGZvdW5kOgk5ODEw NjYJNzk3ODQzCTM0ODI0OAk1OTg2NDAJNTgyMTc2Ckxlbmd0aCA2NTUzNi8zMjc2OCwgYWxpZ25t ZW50IDE0LyA1LCBmYWlsIDoJODk3NTM1CTU3MDEzMwk0Njk0NzQJNTM3MjgwCTQ5NjIwOApMZW5n dGggNjU1MzYvNjU1MzYsIGFsaWdubWVudCAgMS8xMSwgZm91bmQ6CTY3ODQ3LjcJMTA3MTQuOAk2 NDYyNzAJMTUxNTc4CTEwODAwCkxlbmd0aCA2NTUzNi82NTUzNiwgYWxpZ25tZW50IDE0LyA1LCBm YWlsIDoJMi45MTI1OGUrMDYJNTI4Ny41CTU1Mjk5OAkxNTIwMzQJOTU1OC41OQo= --00000000000028759105c4d3bbe6--