From owner-freebsd-hackers@FreeBSD.ORG Mon Sep 3 06:01:11 2012 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id B067D106564A; Mon, 3 Sep 2012 06:01:11 +0000 (UTC) (envelope-from yanegomi@gmail.com) Received: from mail-ob0-f182.google.com (mail-ob0-f182.google.com [209.85.214.182]) by mx1.freebsd.org (Postfix) with ESMTP id 5B4D48FC0C; Mon, 3 Sep 2012 06:01:11 +0000 (UTC) Received: by obbun3 with SMTP id un3so11248909obb.13 for ; Sun, 02 Sep 2012 23:01:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:date:message-id:subject:from:to:cc:content-type; bh=mPJ1HHBky1ux+1DNSGl2nsn3gFPP+e2X+JjOZiQc/yQ=; b=Q9fqZdOh1eCq3iIyIKs6OZqYOAtNb4dCUZgWikdQbZtsfmJjkzfyo+WQDWd2TFcDiE cyjgjBtXRna7whfgT0Yt7AOfDNPNxtx0xqU9f09/pO4+YxcZEGFxbQqR/StXcF/lKLNZ iXhh/bZ8kpEiWF18TazJfLOk6Eil9YC69dPDnRrmM1FWLNGhY9LNvKsCmQOJ+7o7b8tq 8+SKJtmCRyq8lf3Q83hj363oUFoYF32gHZ15mlxlhM9I5EaZe+rtyLkfE3APWWpM0bV2 72XKABdcGB79gZVQE7ooJtQXmxLXbgl0PTkhYOcsRCTfMWe50eX76iBLFvlJhREH3wA+ kVKw== MIME-Version: 1.0 Received: by 10.182.218.37 with SMTP id pd5mr13251048obc.24.1346652070443; Sun, 02 Sep 2012 23:01:10 -0700 (PDT) Received: by 10.76.142.201 with HTTP; Sun, 2 Sep 2012 23:01:09 -0700 (PDT) Date: Sun, 2 Sep 2012 23:01:09 -0700 Message-ID: From: Garrett Cooper To: freebsd-hackers@freebsd.org Content-Type: multipart/mixed; boundary=f46d04447dff4b7a4504c8c5de50 Cc: "freebsd-arch@FreeBSD.org Arch" Subject: [CFT/RFC]: refactor bsd.prog.mk to understand multiple programs instead of a singular program X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 03 Sep 2012 06:01:11 -0000 --f46d04447dff4b7a4504c8c5de50 Content-Type: text/plain; charset=ISO-8859-1 Hello, I've been a bit busy working on porting over ATF from NetBSD, and one of the pieces that's currently not available in FreeBSD that's available in NetBSD is the ability to understand and compile multiple programs. In order to do this I had to refactor bsd.prog.mk (a lot). The attached patch is the end result so far, and I was wondering if anyone could please review it and/or test it (outside of me doing so). I wrote over 40 tests, but it's not exercising everything, and I would like for someone to please review/test this out who has an interest in NLS support (ala bsd.nls.mk) in particular. AFAICT this is the only gap that I couldn't resolve right away (there isn't a ton of recent documentation on how to use bsd.nls.mk). I'll run a micro benchmark and buildworld a few times (in progress) with and without the change to measure the performance effect. Any assistance would be much appreciated. Thanks! -Garrett --f46d04447dff4b7a4504c8c5de50 Content-Type: application/octet-stream; name="share-mk-bsd-prog-mk-CURRENT.patch" Content-Disposition: attachment; filename="share-mk-bsd-prog-mk-CURRENT.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h6n5s8au0 LS0tIHNoYXJlL21rL2JzZC5wcm9nLm1rCTIwMTItMDktMDEgMTQ6MzA6MTUuOTIxNzk1NTU0IC0w NzAwCisrKyBzaGFyZS9tay9ic2QucHJvZy5tawkyMDEyLTA5LTAyIDIyOjMxOjU5LjkxNTc0MzI2 OCAtMDcwMApAQCAtNSwxOTUgKzUsMjc3IEBACiAKIC5TVUZGSVhFUzogLm91dCAubyAuYyAuY2Mg LmNwcCAuY3h4IC5DIC5tIC55IC5sIC5sbiAucyAuUyAuYXNtCiAKLSMgWFhYIFRoZSB1c2Ugb2Yg Q09QVFMgaW4gbW9kZXJuIG1ha2VmaWxlcyBpcyBkaXNjb3VyYWdlZC4KLS5pZiBkZWZpbmVkKENP UFRTKQotQ0ZMQUdTKz0ke0NPUFRTfQotLmVuZGlmCisjIExlZ2FjeSBrbm9icworLmlmIGRlZmlu ZWQoUFJPRykgfHwgZGVmaW5lZChQUk9HX0NYWCkKKy4gaWYgZGVmaW5lZChQUk9HKQorUFJPR1M9 CQkke1BST0d9CisuIGVuZGlmCisuIGlmIGRlZmluZWQoUFJPR19DWFgpCitQUk9HUz0JCSR7UFJP R19DWFh9CitQUk9HU19DWFg9CSR7UFJPR19DWFh9CisuIGVuZGlmCisjIExvb3Agb25jZSB0byBr ZWVwIHBhdHRlcm4gYW5kIGF2b2lkIG5hbWVzcGFjZSBwb2xsdXRpb24KKy4gZm9yIF9QIGluICR7 UFJPR1N9CisuICBpZiAhZGVmaW5lZChNQU4pCisuICAgZm9yIHNlY3QgaW4gMSAxYW91dCAyIDMg NCA1IDYgNyA4IDkKKy4gICAgaWYgZGVmaW5lZChNQU4ke3NlY3R9KQorTUFOLiR7X1B9PQkke01B TiR7c2VjdH19CisuICAgIGVuZGlmCisuICAgZW5kZm9yCisuICBlbmRpZiAjICFkZWZpbmVkKE1B TikKK01BTi4ke19QfT89CSR7X1B9LjEKKy4gIGlmIGRlZmluZWQoTkxTTkFNRSkgJiYgIWVtcHR5 KE5MU05BTUUpCitOTFNOQU1FLiR7UH06PQkke05MU05BTUV9CisuICBlbmRpZgorLiAgaWYgZGVm aW5lZChQUkVDSU9VU1BST0cpCitQUkVDSU9VU1BST0cuJHtfUH09CisuICBlbmRpZgorLiAgaWYg ZGVmaW5lZChQUk9HTkFNRSkKK1BST0dOQU1FLiR7X1B9PQkke1BST0dOQU1FfQorLiAgZW5kaWYK Ky4gIGlmIGRlZmluZWQoU1JDUykKK1NSQ1MuJHtfUH06PQkke1NSQ1N9CisuICBlbmRpZgorLiBl bmRmb3IKKy5lbHNlICMgIWRlZmluZWQoUFJPRykgJiYgIWRlZmluZWQoUFJPR19DWFgpCisuIGlm IGRlZmluZWQoUFJPR1NfQ1hYKSAmJiAhZW1wdHkoUFJPR1NfQ1hYKQorUFJPR1MrPQkJJHtQUk9H U19DWFh9CisuIGVuZGlmCisuZW5kaWYgIyBkZWZpbmVkKFBST0cpIHx8IGRlZmluZWQoUFJPR19D WFgpCisKKy5pZiBkZWZpbmVkKFBST0dTX0NYWCkgJiYgIWVtcHR5KFBST0dTX0NYWCkKKy4gZm9y IF9QIGluICR7UFJPR1NfQ1hYfQorUFJPR19DWFguJHtfUH09CisuIGVuZGZvcgorLmVuZGlmCisK KyMgQXZvaWQgcmVjdXJzaXZlIHZhcmlhYmxlcy4gSXQgc2hvdWxkbid0IGJlIHVzZWQgdGhpcyB3 YXkgd2l0aCAke1BST0dTfSBlaXRoZXIKKy51bmRlZiBOTFNOQU1FCisKKyMgU2V0dXAgZ2xvYmFs IENGTEFHUywgQ1hYRkxBR1MsIGFuZCBMREZMQUdTCitDRkxBR1M/PQorQ1hYRkxBR1M/PQorRFBB REQ/PQorTERBREQ/PQorTERGTEFHUz89CiAKLS5pZiAke01LX0FTU0VSVF9ERUJVR30gPT0gIm5v IgotQ0ZMQUdTKz0gLUROREVCVUcKLU5PX1dFUlJPUj0KKy5pZiBkZWZpbmVkKENPUFRTKQorQ0ZM QUdTKz0JJHtDT1BUU30KIC5lbmRpZgogCiAuaWYgZGVmaW5lZChERUJVR19GTEFHUykKLUNGTEFH Uys9JHtERUJVR19GTEFHU30KLUNYWEZMQUdTKz0ke0RFQlVHX0ZMQUdTfQotCi0uaWYgJHtNS19D VEZ9ICE9ICJubyIgJiYgJHtERUJVR19GTEFHUzpNLWd9ICE9ICIiCi1DVEZGTEFHUys9IC1nCi0u ZW5kaWYKKy4gaWYgJHtNS19DVEZ9ICE9ICJubyIgJiYgJHtERUJVR19GTEFHUzpNLWd9ICE9ICIi CitDVEZGTEFHUys9CS1nCisuIGVuZGlmCitDRkxBR1MrPQktRE5ERUJVRworQ0ZMQUdTKz0JJHtE RUJVR19GTEFHU30KK0NYWEZMQUdTKz0JJHtERUJVR19GTEFHU30KIC5lbmRpZgogCi0uaWYgZGVm aW5lZChDUlVOQ0hfQ0ZMQUdTKQotQ0ZMQUdTKz0ke0NSVU5DSF9DRkxBR1N9Ci0uZW5kaWYKK1NU UklQPz0JCS1zCiAKLS5pZiAhZGVmaW5lZChERUJVR19GTEFHUykKLVNUUklQPz0JLXMKLS5lbmRp ZgotCi0uaWYgZGVmaW5lZChOT19TSEFSRUQpICYmICgke05PX1NIQVJFRH0gIT0gIm5vIiAmJiAk e05PX1NIQVJFRH0gIT0gIk5PIikKLUxERkxBR1MrPSAtc3RhdGljCi0uZW5kaWYKLQotLmlmIGRl ZmluZWQoUFJPR19DWFgpCi1QUk9HPQkke1BST0dfQ1hYfQotLmVuZGlmCi0KLS5pZiBkZWZpbmVk KFBST0cpCi0uaWYgZGVmaW5lZChTUkNTKQotCi1PQkpTKz0gICR7U1JDUzpOKi5oOlI6Uy8kLy5v L2d9Ci0KLS5pZiB0YXJnZXQoYmVmb3JlbGlua2luZykKLSR7UFJPR306ICR7T0JKU30gYmVmb3Jl bGlua2luZwotLmVsc2UKLSR7UFJPR306ICR7T0JKU30KLS5lbmRpZgotLmlmIGRlZmluZWQoUFJP R19DWFgpCi0JJHtDWFh9ICR7Q1hYRkxBR1N9ICR7TERGTEFHU30gLW8gJHsuVEFSR0VUfSAke09C SlN9ICR7TERBRER9Ci0uZWxzZQotCSR7Q0N9ICR7Q0ZMQUdTfSAke0xERkxBR1N9IC1vICR7LlRB UkdFVH0gJHtPQkpTfSAke0xEQUREfQotLmVuZGlmCi0uaWYgJHtNS19DVEZ9ICE9ICJubyIKLQkk e0NURk1FUkdFfSAke0NURkZMQUdTfSAtbyAkey5UQVJHRVR9ICR7T0JKU30KKy5pZiAke01LX0FT U0VSVF9ERUJVR30gPT0gIm5vIgorQ0ZMQUdTKz0JLUROREVCVUcKK05PX1dFUlJPUj0KIC5lbmRp ZgogCi0uZWxzZQkjICFkZWZpbmVkKFNSQ1MpCisuZm9yIF9QIGluICR7UFJPR1N9CiAKLS5pZiAh dGFyZ2V0KCR7UFJPR30pCi0uaWYgZGVmaW5lZChQUk9HX0NYWCkKLVNSQ1M9CSR7UFJPR30uY2MK LS5lbHNlCi1TUkNTPQkke1BST0d9LmMKLS5lbmRpZgorQ0ZMQUdTLiR7X1B9CT89CitDWFhGTEFH Uy4ke19QfQk/PQorTERGTEFHUy4ke19QfQk/PQorLiBpZiAhZGVmaW5lZChOTFNESVIuJHtfUH0p CitOTFNESVIuJHtfUH06PQkke05MU0RJUn0KKy4gZW5kaWYKKy4gdW5kZWYgTkxTRElSCisKKy4g aWYgKGRlZmluZWQoTk9fU0hBUkVEKSAmJiAke05PX1NIQVJFRH0gIT0gIm5vIikgfHwgKGRlZmlu ZWQoTk9fU0hBUkVELiR7X1B9KSAmJiAke05PX1NIQVJFRC4ke19QfX0gIT0gIm5vIikKK0xERkxB R1MuJHtfUH0rPSAtc3RhdGljCisuIGVuZGlmCisKKy4gaWYgZGVmaW5lZChTUkNTLiR7X1B9KQor CitPQkpTLiR7X1B9PQkke1NSQ1MuJHtfUH06TiouaDpSOlMvJC8uby9nfQorCisuICBpZiB0YXJn ZXQoYmVmb3JlbGlua2luZykKKyR7X1B9OiAke09CSlMuJHtfUH19IGJlZm9yZWxpbmtpbmcKKy4g IGVsc2UKKyR7X1B9OiAke09CSlMuJHtfUH19CisuICBlbmRpZgorLiAgaWYgZGVmaW5lZChQUk9H X0NYWC4ke19QfSkKKwkke0NYWH0gJHtDWFhGTEFHU30gJHtDWFhGTEFHUy4ke19QfX0gJHtMREZM QUdTfSAke0xERkxBR1MuJHtfUH19IC1vICR7LlRBUkdFVH0gJHtPQkpTLiR7X1B9fSAke0xEQURE fSAke0xEQURELiR7X1B9fQorLiAgZWxzZQorCSR7Q0N9ICR7Q0ZMQUdTfSAke0NGTEFHUy4ke19Q fX0gJHtMREZMQUdTfSAke0xERkxBR1MuJHtfUH19IC1vICR7LlRBUkdFVH0gJHtPQkpTLiR7X1B9 fSAke0xEQUREfSAke0xEQURELiR7X1B9fQorLiAgZW5kaWYKKy4gIGlmICR7TUtfQ1RGfSAhPSAi bm8iCisJJHtDVEZNRVJHRX0gJHtDVEZGTEFHU30gLW8gJHsuVEFSR0VUfSAke09CSlMuJHtfUH19 CisuICBlbmRpZgorCisuIGVsc2UgIyAhZGVmaW5lZChTUkNTLiR7X1B9KQorCisuICBpZiAhdGFy Z2V0KCR7X1B9KQorLiAgIGlmIGRlZmluZWQoUFJPR19DWFguJHtfUH0pCitTUkNTLiR7X1B9Pz0J JHtfUH0uY2MKKy4gICBlbHNlCitTUkNTLiR7X1B9Pz0JJHtfUH0uYworLiAgIGVuZGlmCiAKICMg QWx3YXlzIG1ha2UgYW4gaW50ZXJtZWRpYXRlIG9iamVjdCBmaWxlIGJlY2F1c2U6CiAjIC0gaXQg c2F2ZXMgdGltZSByZWJ1aWxkaW5nIHdoZW4gb25seSB0aGUgbGlicmFyeSBoYXMgY2hhbmdlZAog IyAtIHRoZSBuYW1lIG9mIHRoZSBvYmplY3QgZ2V0cyBwdXQgaW50byB0aGUgZXhlY3V0YWJsZSBz eW1ib2wgdGFibGUgaW5zdGVhZCBvZgogIyAgIHRoZSBuYW1lIG9mIGEgdmFyaWFibGUgdGVtcG9y YXJ5IG9iamVjdC4KICMgLSBpdCdzIHVzZWZ1bCB0byBrZWVwIG9iamVjdHMgYXJvdW5kIGZvciBj cnVuY2hpbmcuCi1PQkpTPQkke1BST0d9Lm8KK09CSlMuJHtfUH09CSR7X1B9Lm8KIAotLmlmIHRh cmdldChiZWZvcmVsaW5raW5nKQotJHtQUk9HfTogJHtPQkpTfSBiZWZvcmVsaW5raW5nCi0uZWxz ZQotJHtQUk9HfTogJHtPQkpTfQotLmVuZGlmCi0uaWYgZGVmaW5lZChQUk9HX0NYWCkKLQkke0NY WH0gJHtDWFhGTEFHU30gJHtMREZMQUdTfSAtbyAkey5UQVJHRVR9ICR7T0JKU30gJHtMREFERH0K LS5lbHNlCi0JJHtDQ30gJHtDRkxBR1N9ICR7TERGTEFHU30gLW8gJHsuVEFSR0VUfSAke09CSlN9 ICR7TERBRER9Ci0uZW5kaWYKLS5pZiAke01LX0NURn0gIT0gIm5vIgotCSR7Q1RGTUVSR0V9ICR7 Q1RGRkxBR1N9IC1vICR7LlRBUkdFVH0gJHtPQkpTfQotLmVuZGlmCi0uZW5kaWYKKy4gICBpZiB0 YXJnZXQoYmVmb3JlbGlua2luZykKKyR7X1B9OiAke09CSlMuJHtfUH19IGJlZm9yZWxpbmtpbmcK Ky4gICBlbHNlCiske19QfTogJHtPQkpTLiR7X1B9fQorLiAgIGVuZGlmICMgdGFyZ2V0KGJlZm9y ZWxpbmtpbmcpCisuICAgaWYgZGVmaW5lZChQUk9HX0NYWC4ke19QfSkKKwkke0NYWH0gJHtDWFhG TEFHU30gJHtDWFhGTEFHUy4ke19QfX0gJHtMREZMQUdTfSAke0xERkxBR1MuJHtfUH19IC1vICR7 LlRBUkdFVH0gJHtPQkpTLiR7X1B9fSAke0xEQUREfSAke0xEQURELiR7X1B9fQorLiAgIGVsc2UK Kwkke0NDfSAke0NGTEFHU30gJHtDRkxBR1MuJHtfUH19ICR7TERGTEFHU30gJHtMREZMQUdTLiR7 X1B9fSAtbyAkey5UQVJHRVR9ICR7T0JKUy4ke19QfX0gJHtMREFERH0gJHtMREFERC4ke19QfX0K Ky4gICBlbmRpZgorLiAgIGlmICR7TUtfQ1RGfSAhPSAibm8iCisJJHtDVEZNRVJHRX0gJHtDVEZG TEFHU30gLW8gJHsuVEFSR0VUfSAke09CSlMuJHtfUH19CisuICAgZW5kaWYKKworLiAgZW5kaWYg IyAhdGFyZ2V0KCR7X1B9KQorCisuIGVuZGlmICMgZGVmaW5lZChTUkNTLiR7X1B9KQorCisjIE5l ZWRlZCBpbiBic2QuZGVwLm1rIC4KKy4gaWYgIWVtcHR5KFNSQ1MuJHtfUH0pCitTUkNTKz0JJHtT UkNTLiR7X1B9fQorLiBlbmRpZgogCi0uZW5kaWYKK0NMRUFORklMRVMrPSAJJHtPQkpTLiR7X1B9 fQogCi0uaWYJJHtNS19NQU59ICE9ICJubyIgJiYgIWRlZmluZWQoTUFOKSAmJiBcCi0JIWRlZmlu ZWQoTUFOMSkgJiYgIWRlZmluZWQoTUFOMikgJiYgIWRlZmluZWQoTUFOMykgJiYgXAotCSFkZWZp bmVkKE1BTjQpICYmICFkZWZpbmVkKE1BTjUpICYmICFkZWZpbmVkKE1BTjYpICYmIFwKLQkhZGVm aW5lZChNQU43KSAmJiAhZGVmaW5lZChNQU44KSAmJiAhZGVmaW5lZChNQU45KSAmJiBcCi0JIWRl ZmluZWQoTUFOMWFvdXQpCi1NQU49CSR7UFJPR30uMQotTUFOMT0JJHtNQU59Ci0uZW5kaWYKLS5l bmRpZgorLmVuZGZvciAjIGZvciBfUCBpbiAke1BST0dTfQorCithbGw6IG9iandhcm4gJHtQUk9H U30gJHtTQ1JJUFRTfQogCi1hbGw6IG9iandhcm4gJHtQUk9HfSAke1NDUklQVFN9CiAuaWYgJHtN S19NQU59ICE9ICJubyIKKy4gZm9yIF9QIGluICR7UFJPR1N9CisuICBpZiBkZWZpbmVkKE1BTi4k e19QfSkKK01BTis9CSR7TUFOLiR7X1B9fQorLiAgZW5kaWYKKy4gZW5kZm9yCiBhbGw6IF9tYW5w YWdlcwogLmVuZGlmCiAKLS5pZiBkZWZpbmVkKFBST0cpCi1DTEVBTkZJTEVTKz0gJHtQUk9HfQot LmVuZGlmCi0KLS5pZiBkZWZpbmVkKE9CSlMpCi1DTEVBTkZJTEVTKz0gJHtPQkpTfQotLmVuZGlm CitDTEVBTkZJTEVTKz0gJHtQUk9HU30KIAogLmluY2x1ZGUgPGJzZC5saWJuYW1lcy5taz4KIAot LmlmIGRlZmluZWQoUFJPRykKIF9FWFRSQURFUEVORDoKLS5pZiBkZWZpbmVkKExERkxBR1MpICYm ICFlbXB0eShMREZMQUdTOk0tbm9zdGRsaWIpCi0uaWYgZGVmaW5lZChEUEFERCkgJiYgIWVtcHR5 KERQQUREKQotCWVjaG8gJHtQUk9HfTogJHtEUEFERH0gPj4gJHtERVBFTkRGSUxFfQotLmVuZGlm Ci0uZWxzZQotCWVjaG8gJHtQUk9HfTogJHtMSUJDfSAke0RQQUREfSA+PiAke0RFUEVOREZJTEV9 Ci0uaWYgZGVmaW5lZChQUk9HX0NYWCkKLS5pZiAhZW1wdHkoQ1hYRkxBR1M6TS1zdGRsaWI9bGli YysrKQotCWVjaG8gJHtQUk9HfTogJHtMSUJDUExVU1BMVVN9ID4+ICR7REVQRU5ERklMRX0KLS5l bHNlCi0JZWNobyAke1BST0d9OiAke0xJQlNURENQTFVTUExVU30gPj4gJHtERVBFTkRGSUxFfQot LmVuZGlmCi0uZW5kaWYKLS5lbmRpZgotLmVuZGlmCisuZm9yIF9QIGluICR7UFJPR1N9CisuIGlm ICFlbXB0eShMREZMQUdTOk0tbm9zdGRsaWIpIHx8IChkZWZpbmVkKExERkxBR1MuJHtfUH0pICYm ICFlbXB0eShMREZMQUdTLiR7X1B9Ok0tbm9zdGRsaWIpKQorCWVjaG8gJHtfUH06ICR7RFBBRER9 ICR7RFBBREQuJHtfUH19ID4+ICR7REVQRU5ERklMRX0KKy4gZWxzZQorCWVjaG8gJHtfUH06ICR7 TElCQ30gJHtEUEFERH0gJHtEUEFERC4ke19QfX0gPj4gJHtERVBFTkRGSUxFfQorLiAgaWYgZGVm aW5lZChQUk9HX0NYWC4ke19QfSkKKy4gICBpZiAhZW1wdHkoQ1hYRkxBR1M6TS1zdGRsaWI9bGli YysrKSB8fCAhZW1wdHkoQ1hYRkxBR1MuJHtfUH06TS1zdGRsaWI9bGliYysrKQorCWVjaG8gJHtf UH06ICR7TElCQ1BMVVNQTFVTfSA+PiAke0RFUEVOREZJTEV9CisuICAgZWxzZQorCWVjaG8gJHtf UH06ICR7TElCU1REQ1BMVVNQTFVTfSA+PiAke0RFUEVOREZJTEV9CisuICAgZW5kaWYKKy4gIGVu ZGlmCisuIGVuZGlmCisuZW5kZm9yCiAKLS5pZiAhdGFyZ2V0KGluc3RhbGwpCisuZm9yIF9QIGlu ICR7UFJPR1N9CitJTlNUQUxMRkxBR1MuJHtfUH0/PSAke0lOU1RBTExGTEFHU30KIAotLmlmIGRl ZmluZWQoUFJFQ0lPVVNQUk9HKQotLmlmICFkZWZpbmVkKE5PX0ZTQ0hHKQotSU5TVEFMTEZMQUdT Kz0gLWZzY2hnCi0uZW5kaWYKLUlOU1RBTExGTEFHUys9IC1TCi0uZW5kaWYKKy4gaWYgIXRhcmdl dChpbnN0YWxsKQorLiAgaWYgZGVmaW5lZChQUkVDSU9VU1BST0cuJHtfUH0pCisuICAgaWYgIWRl ZmluZWQoTk9fRlNDSEcpICYmICFkZWZpbmVkKE5PX0ZTQ0hHLiR7X1B9KQorSU5TVEFMTEZMQUdT LiR7X1B9Kz0gLWZzY2hnCisuICAgZW5kaWYKK0lOU1RBTExGTEFHUy4ke19QfSs9IC1TCisuICBl bmRpZgorLiBlbmRpZgorCitCSU5ESVIuJHtfUH0/PQkJJHtCSU5ESVJ9CitCSU5HUlAuJHtfUH0/ PQkJJHtCSU5HUlB9CitCSU5NT0RFLiR7X1B9Pz0JCSR7QklOTU9ERX0KK0JJTk9XTi4ke19QfT89 CQkke0JJTk9XTn0KIAotX0lOU1RBTExGTEFHUzo9CSR7SU5TVEFMTEZMQUdTfQotLmZvciBpZSBp biAke0lOU1RBTExGTEFHU19FRElUfQotX0lOU1RBTExGTEFHUzo9CSR7X0lOU1RBTExGTEFHUyR7 aWV9fQogLmVuZGZvcgogCi0uaWYgIXRhcmdldChyZWFsaW5zdGFsbCkgJiYgIWRlZmluZWQoSU5U RVJOQUxQUk9HKQotcmVhbGluc3RhbGw6IF9wcm9naW5zdGFsbAotLk9SREVSOiBiZWZvcmVpbnN0 YWxsIF9wcm9naW5zdGFsbAotX3Byb2dpbnN0YWxsOgotLmlmIGRlZmluZWQoUFJPRykKLS5pZiBk ZWZpbmVkKFBST0dOQU1FKQotCSR7SU5TVEFMTH0gJHtTVFJJUH0gLW8gJHtCSU5PV059IC1nICR7 QklOR1JQfSAtbSAke0JJTk1PREV9IFwKLQkgICAgJHtfSU5TVEFMTEZMQUdTfSAke1BST0d9ICR7 REVTVERJUn0ke0JJTkRJUn0vJHtQUk9HTkFNRX0KLS5lbHNlCi0JJHtJTlNUQUxMfSAke1NUUklQ fSAtbyAke0JJTk9XTn0gLWcgJHtCSU5HUlB9IC1tICR7QklOTU9ERX0gXAotCSAgICAke19JTlNU QUxMRkxBR1N9ICR7UFJPR30gJHtERVNURElSfSR7QklORElSfQotLmVuZGlmCi0uZW5kaWYKLS5l bmRpZgkjICF0YXJnZXQocmVhbGluc3RhbGwpCi0KLS5pZiBkZWZpbmVkKFNDUklQVFMpICYmICFl bXB0eShTQ1JJUFRTKQotcmVhbGluc3RhbGw6IF9zY3JpcHRzaW5zdGFsbAotLk9SREVSOiBiZWZv cmVpbnN0YWxsIF9zY3JpcHRzaW5zdGFsbAotCi1TQ1JJUFRTRElSPz0JJHtCSU5ESVJ9Ci1TQ1JJ UFRTT1dOPz0JJHtCSU5PV059Ci1TQ1JJUFRTR1JQPz0JJHtCSU5HUlB9Ci1TQ1JJUFRTTU9ERT89 CSR7QklOTU9ERX0KLQotLmZvciBzY3JpcHQgaW4gJHtTQ1JJUFRTfQotLmlmIGRlZmluZWQoU0NS SVBUU05BTUUpCi1TQ1JJUFRTTkFNRV8ke3NjcmlwdDpUfT89CSR7U0NSSVBUU05BTUV9Ci0uZWxz ZQotU0NSSVBUU05BTUVfJHtzY3JpcHQ6VH0/PQkke3NjcmlwdDpUOlJ9Ci0uZW5kaWYKLVNDUklQ VFNESVJfJHtzY3JpcHQ6VH0/PQkke1NDUklQVFNESVJ9Ci1TQ1JJUFRTT1dOXyR7c2NyaXB0OlR9 Pz0JJHtTQ1JJUFRTT1dOfQotU0NSSVBUU0dSUF8ke3NjcmlwdDpUfT89CSR7U0NSSVBUU0dSUH0K LVNDUklQVFNNT0RFXyR7c2NyaXB0OlR9Pz0JJHtTQ1JJUFRTTU9ERX0KLV9zY3JpcHRzaW5zdGFs bDogX1NDUklQVFNJTlNfJHtzY3JpcHQ6VH0KLV9TQ1JJUFRTSU5TXyR7c2NyaXB0OlR9OiAke3Nj cmlwdH0KKy5pZiAhdGFyZ2V0KGluc3RhbGwpCisKKy4gZm9yIF9QIGluICR7UFJPR1N9CisKKy4g IGlmICFkZWZpbmVkKElOVEVSTkFMUFJPRy4ke19QfSkKKworLk9SREVSOiBiZWZvcmVpbnN0YWxs IF9wcm9naW5zdGFsbC4ke19QfQorX3Byb2dpbnN0YWxsLiR7X1B9OgorLiAgIGlmIGRlZmluZWQo UFJPR05BTUUuJHtfUH0pCisJJHtJTlNUQUxMfSAke1NUUklQfSAtbyAke0JJTk9XTi4ke19QfX0g LWcgJHtCSU5HUlAuJHtfUH19IFwKKwkgICAgLW0gJHtCSU5NT0RFLiR7X1B9fSAke0lOU1RBTExG TEFHUy4ke19QfX0gJHtfUH0gXAorCSAgICAke0RFU1RESVJ9JHtCSU5ESVIuJHtfUH19LyR7UFJP R05BTUUuJHtfUH19CisuICAgZWxzZQorCSR7SU5TVEFMTH0gJHtTVFJJUH0gLW8gJHtCSU5PV04u JHtfUH19IC1nICR7QklOR1JQLiR7X1B9fSBcCisJICAgIC1tICR7QklOTU9ERS4ke19QfX0gJHtJ TlNUQUxMRkxBR1MuJHtfUH19ICR7X1B9IFwKKwkgICAgJHtERVNURElSfSR7QklORElSLiR7X1B9 fQorLiAgIGVuZGlmIAorCityZWFsaW5zdGFsbDogX3Byb2dpbnN0YWxsLiR7X1B9CisKKy4gIGVu ZGlmICMgIWRlZmluZWQoSU5URVJOQUxQUk9HLiR7X1B9KQorCisuIGVuZGZvciAjIGZvciBfUCBp biAke1BST0dTfQorCisuIGlmIGRlZmluZWQoU0NSSVBUUykgJiYgIWVtcHR5KFNDUklQVFMpCitT Q1JJUFRTRElSPz0JCSR7QklORElSfQorU0NSSVBUU09XTj89CQkke0JJTk9XTn0KK1NDUklQVFNH UlA/PQkJJHtCSU5HUlB9CitTQ1JJUFRTTU9ERT89CQkke0JJTk1PREV9CisKK19fc2NyaXB0c2lu c3RhbGw6IC5VU0UKIAkke0lOU1RBTEx9IC1vICR7U0NSSVBUU09XTl8key5BTExTUkM6VH19IFwK LQkgICAgLWcgJHtTQ1JJUFRTR1JQXyR7LkFMTFNSQzpUfX0gLW0gJHtTQ1JJUFRTTU9ERV8key5B TExTUkM6VH19IFwKKwkgICAgLWcgJHtTQ1JJUFRTR1JQXyR7LkFMTFNSQzpUfX0gXAorCSAgICAt bSAke1NDUklQVFNNT0RFXyR7LkFMTFNSQzpUfX0gXAogCSAgICAkey5BTExTUkN9IFwKLQkgICAg JHtERVNURElSfSR7U0NSSVBUU0RJUl8key5BTExTUkM6VH19LyR7U0NSSVBUU05BTUVfJHsuQUxM U1JDOlR9fQotLmVuZGZvcgotLmVuZGlmCisJICAgICR7LlRBUkdFVH0KKworLiAgZm9yIFMgaW4g JHtTQ1JJUFRTfQorCityZWFsaW5zdGFsbDogc2NyaXB0c2luc3RhbGwKKy5PUkRFUjogYmVmb3Jl aW5zdGFsbCBzY3JpcHRzaW5zdGFsbAogCi1OTFNOQU1FPz0JJHtQUk9HfQorLiAgIGlmIGRlZmlu ZWQoU0NSSVBUU05BTUUpCitTQ1JJUFRTTkFNRV8ke1N9Pz0JJHtTQ1JJUFRTTkFNRX0KKy4gICBl bHNlCitTQ1JJUFRTTkFNRV8ke1N9Pz0JJHtTOlQ6Un0KKy4gICBlbmRpZgorCitTQ1JJUFRTRElS XyR7U30/PQkke1NDUklQVFNESVJ9CitTQ1JJUFRTT1dOXyR7U30/PQkke1NDUklQVFNPV059CitT Q1JJUFRTR1JQXyR7U30/PQkke1NDUklQVFNHUlB9CitTQ1JJUFRTTU9ERV8ke1N9Pz0JJHtTQ1JJ UFRTTU9ERX0KKworc2NyaXB0c2luc3RhbGw6ICR7REVTVERJUn0ke1NDUklQVFNESVJfJHtTfX0v JHtTQ1JJUFRTTkFNRV8ke1N9fQorCiske0RFU1RESVJ9JHtTQ1JJUFRTRElSXyR7U319LyR7U0NS SVBUU05BTUVfJHtTfX06IF9fc2NyaXB0c2luc3RhbGwgJHtTfQorCisuICBlbmRmb3IgIyBmb3Ig UyBpbiAke1NDUklQVFN9CisKKy4gZW5kaWYgIyBkZWZpbmVkKFNDUklQVFMpICYmICFlbXB0eShT Q1JJUFRTKQorCisuZW5kaWYgIyAhdGFyZ2V0KGluc3RhbGwpCisKKyMgV3JhcCBic2QubmxzLm1r IGJlY2F1c2UgSSBjYW4ndCBmb3JjZSB0aGF0IE1ha2VmaWxlIHNuaXBwZXQgdG8gd29yayBvbmx5 IHdpdGgKKyMgJHtQUk9HU30uCisuZm9yIF9QIGluICR7UFJPR1N9CitOTFNOQU1FLiR7X1B9Pz0J JHtfUH0KK05MUzo9CQkke05MUy4ke19QfX0KK05MU0RJUjo9CSR7TkxTRElSLiR7X1B9fQorTkxT TkFNRTo9CSR7TkxTTkFNRS4ke19QfX0KIC5pbmNsdWRlIDxic2QubmxzLm1rPgorLmVuZGZvcgog CiAuaW5jbHVkZSA8YnNkLmZpbGVzLm1rPgogLmluY2x1ZGUgPGJzZC5pbmNzLm1rPgpAQCAtMjAy LDI1ICsyODQsMzIgQEAKIC5pZiAke01LX01BTn0gIT0gIm5vIgogcmVhbGluc3RhbGw6IF9tYW5p bnN0YWxsCiAuT1JERVI6IGJlZm9yZWluc3RhbGwgX21hbmluc3RhbGwKLS5lbmRpZgogCisuaW5j bHVkZSA8YnNkLm1hbi5taz4KIC5lbmRpZgogCiAuaWYgIXRhcmdldChsaW50KQotbGludDogJHtT UkNTOk0qLmN9Ci0uaWYgZGVmaW5lZChQUk9HKQotCSR7TElOVH0gJHtMSU5URkxBR1N9ICR7Q0ZM QUdTOk0tW0RJVV0qfSAkey5BTExTUkN9Ci0uZW5kaWYKLS5lbmRpZgorLiBmb3IgX1AgaW4gJHtQ Uk9HU30KKy4gIGlmICF0YXJnZXQobGludC4ke19QfSkKKy4gICBpZiBkZWZpbmVkKFBST0dfQ1hY LiR7X1B9KQorbGludC4ke19QfToKKy4gICBlbHNlCitsaW50LiR7X1B9OiAke1NSQ1MuJHtfUH06 TSouY30KKwkke0xJTlR9ICR7TElOVEZMQUdTfSAke0NGTEFHUzpNLVtESVVdKn0gJHtDRkxBR1Mu JHtfUH06TS1bRElVXSp9ICR7LkFMTFNSQ30KKy4gICBlbmRpZgorLiAgZW5kaWYKIAotLmlmICR7 TUtfTUFOfSAhPSAibm8iCi0uaW5jbHVkZSA8YnNkLm1hbi5taz4KLS5lbmRpZgorbGludDogbGlu dC4ke19QfQorCisuIGVuZGZvcgorLmVuZGlmICMgIXRhcmdldChsaW50KQogCiAuaW5jbHVkZSA8 YnNkLmRlcC5taz4KIAotLmlmIGRlZmluZWQoUFJPRykgJiYgIWV4aXN0cygkey5PQkpESVJ9LyR7 REVQRU5ERklMRX0pCi0ke09CSlN9OiAke1NSQ1M6TSouaH0KKy5pZiAhZXhpc3RzKCR7Lk9CSkRJ Un0vJHtERVBFTkRGSUxFfSkKKy4gZm9yIF9QIGluICR7UFJPR1N9Ciske09CSlMuJHtfUH19OiAk e1NSQ1MuJHtfUH06TSouaH0KKy4gZW5kZm9yCiAuZW5kaWYKIAogLmluY2x1ZGUgPGJzZC5vYmou bWs+Ci0tLSAvdXNyL3NyYy9zaGFyZS9tay9ic2QuUkVBRE1FCTIwMTItMDUtMjAgMTU6Mzc6NDAu ODkzMDkyNTAxIC0wNzAwCisrKyBzaGFyZS9tay9ic2QuUkVBRE1FCTIwMTItMDktMDIgMjI6MjU6 NDguNDEwNzQ1MTYxIC0wNzAwCkBAIC0xLDUgKzEsNSBAQAogIwlAKCMpYnNkLlJFQURNRQk4LjIg KEJlcmtlbGV5KSA0LzIvOTQKLSMgJEZyZWVCU0Q6IHN0YWJsZS85L3NoYXJlL21rL2JzZC5SRUFE TUUgMjM1NTM0IDIwMTItMDUtMTcgMDc6NTk6MTVaIGpsaCAkCisjICRGcmVlQlNEOiBzcmMvc2hh cmUvbWsvYnNkLlJFQURNRSx2IDEuMzcgMjAxMi8wNS8yNCAyMDowMDo1OCBtYXJjZWwgRXhwICQK IAogVGhpcyBpcyB0aGUgUkVBRE1FIGZpbGUgZm9yIHRoZSAiaW5jbHVkZSIgZmlsZXMgZm9yIHRo ZSBGcmVlQlNECiBzb3VyY2UgdHJlZS4gIFRoZSBmaWxlcyBhcmUgaW5zdGFsbGVkIGluIC91c3Iv c2hhcmUvbWssIGFuZCBhcmUgYnkKQEAgLTIwNyw5OCArMjA3LDE1NyBAQAogCiBJdCBzZXRzL3Vz ZXMgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXM6CiAKLUJJTkdSUAkJQmluYXJ5IGdyb3VwLgorVmFy aWFibGVzIGdsb2JhbCB0byBhbGwgcHJvZ3JhbXM6CiAKLUJJTk9XTgkJQmluYXJ5IG93bmVyLgor Q0xFQU5GSUxFUwkJQWRkaXRpb25hbCBmaWxlcyB0byByZW1vdmUgYW5kCitDTEVBTkRJUlMJCWFk ZGl0aW9uYWwgZGlyZWN0b3JpZXMgdG8gcmVtb3ZlIGR1cmluZyBjbGVhbiBhbmQgY2xlYW5kaXIK KwkJCXRhcmdldHMuICAicm0gLWYiIGFuZCAicm0gLXJmIiB1c2VkIHJlc3BlY3RpdmVseS4KKwor REVCVUdfRkxBR1MJCWRlYnVnZ2luZyBzcGVjaWZpYyBDRkxBR1MvTERGTEFHUzsgaWYgc2V0IGFu eSBiaW5hcmllcworIAkJCXByb2R1Y2VkIHdpbGwgbm90IGJlIHN0cmlwcGVkLiAgU2VlIGFsc286 IFdJVEhfQ1RGCisKK0ZJTEVTCQkJQSBsaXN0IG9mIG5vbi1leGVjdXRhYmxlIGZpbGVzLgorCQkJ VGhlIGluc3RhbGxhdGlvbiBpcyBjb250cm9sbGVkIGJ5IHRoZSBGSUxFU05BTUUsIEZJTEVTT1dO LAorCQkJRklMRVNHUlAsIEZJTEVTTU9ERSwgRklMRVNESVIgdmFyaWFibGVzIHRoYXQgY2FuIGJl CisJCQlmdXJ0aGVyIHNwZWNpYWxpemVkIGJ5IEZJTEVTPFZBUj5fPGZpbGU+LgorCitMSU5LUwkJ CVRoZSBsaXN0IG9mIGJpbmFyeSBsaW5rczsgc2hvdWxkIGJlIGZ1bGwgcGF0aG5hbWVzLCB0aGUK KwkJCWxpbmtlZC10byBmaWxlIGNvbWluZyBmaXJzdCwgZm9sbG93ZWQgYnkgdGhlIGxpbmtlZAor CQkJZmlsZS4gIFRoZSBmaWxlcyBhcmUgaGFyZC1saW5rZWQuICBGb3IgZXhhbXBsZSwgdG8gbGlu aworCQkJL2Jpbi90ZXN0IGFuZCAvYmluL1ssIHVzZToKIAotQklOTU9ERQkJQmluYXJ5IG1vZGUu CisJCQlMSU5LUz0JJHtERVNURElSfS9iaW4vdGVzdCAke0RFU1RESVJ9L2Jpbi9bCiAKLUNMRUFO RklMRVMJQWRkaXRpb25hbCBmaWxlcyB0byByZW1vdmUgYW5kCi1DTEVBTkRJUlMJYWRkaXRpb25h bCBkaXJlY3RvcmllcyB0byByZW1vdmUgZHVyaW5nIGNsZWFuIGFuZCBjbGVhbmRpcgotCQl0YXJn ZXRzLiAgInJtIC1mIiBhbmQgInJtIC1yZiIgdXNlZCByZXNwZWN0aXZlbHkuCitQUk9HCQkJVGhl IG5hbWUgb2YgdGhlIHByb2dyYW0gdG8gYnVpbGQuICBJZiBub3Qgc3VwcGxpZWQsCisJCQlub3Ro aW5nIGlzIGJ1aWx0LgogCi1DRkxBR1MJCUZsYWdzIHRvIHRoZSBjb21waWxlciB3aGVuIGNyZWF0 aW5nIEMgb2JqZWN0cy4KK1BST0dfQ1hYCQlJZiBkZWZpbmVkLCB0aGUgbmFtZSBvZiB0aGUgQysr IHByb2dyYW0gdG8gYnVpbGQuICBBbHNvCisJCQljYXVzZXMgPGJzZC5wcm9nLm1rPiB0byBsaW5r IHRoZSBwcm9ncmFtIHdpdGggdGhlCisJCQlzdGFuZGFyZCBDKysgbGlicmFyeS4gIFBST0dfQ1hY IG92ZXJyaWRlcyB0aGUgdmFsdWUKKwkJCW9mIFBST0cgaWYgUFJPRyBpcyBhbHNvIHNldC4KIAot RklMRVMJCUEgbGlzdCBvZiBub24tZXhlY3V0YWJsZSBmaWxlcy4KLQkJVGhlIGluc3RhbGxhdGlv biBpcyBjb250cm9sbGVkIGJ5IHRoZSBGSUxFU05BTUUsIEZJTEVTT1dOLAotCQlGSUxFU0dSUCwg RklMRVNNT0RFLCBGSUxFU0RJUiB2YXJpYWJsZXMgdGhhdCBjYW4gYmUKLQkJZnVydGhlciBzcGVj aWFsaXplZCBieSBGSUxFUzxWQVI+XzxmaWxlPi4KK1NUUklQCQkJVGhlIGZsYWcgcGFzc2VkIHRv IHRoZSBpbnN0YWxsIHByb2dyYW0gdG8gY2F1c2UgdGhlCisJCQliaW5hcnkgdG8gYmUgc3RyaXBw ZWQuICBUaGlzIGlzIHRvIGJlIHVzZWQgd2hlbgorCQkJYnVpbGRpbmcgeW91ciBvd24gaW5zdGFs bCBzY3JpcHQgc28gdGhhdCB0aGUgZW50aXJlCisJCQlzeXN0ZW0gY2FuIGJlIG1hZGUgc3RyaXBw ZWQvbm90LXN0cmlwcGVkIHVzaW5nIGEKKwkJCXNpbmdsZSBrbm9iLgogCi1MREFERAkJQWRkaXRp b25hbCBsb2FkZXIgb2JqZWN0cy4gIFVzdWFsbHkgdXNlZCBmb3IgbGlicmFyaWVzLgotCQlGb3Ig ZXhhbXBsZSwgdG8gbG9hZCB3aXRoIHRoZSBjb21wYXRpYmlsaXR5IGFuZCB1dGlsaXR5Ci0JCWxp YnJhcmllcywgdXNlOgorU1VCRElSCQkJQSBsaXN0IG9mIHN1YmRpcmVjdG9yaWVzIHRoYXQgc2hv dWxkIGJlIGJ1aWx0IGFzIHdlbGwuCisJCQlFYWNoIG9mIHRoZSB0YXJnZXRzIHdpbGwgZXhlY3V0 ZSB0aGUgc2FtZSB0YXJnZXQgaW4gdGhlCisJCQlzdWJkaXJlY3Rvcmllcy4KIAotCQkJTERGSUxF Uz0tbHV0aWwgLWxjb21wYXQKK1RoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGNhbiBiZSB0dW5lZCBm b3Igc3BlY2lmaWMgcHJvZ3JhbSB1c2UgKHlvdSB3aWxsIG5lZWQKK3RvIHN1ZmZpeCB2YXJpYWJs ZSBkZWNsYXJhdGlvbnMgd2l0aCAuJHtQUk9HfSwgZS5nLiBQUk9HPSBmb28gLT4gU1JDUy5mb28p OgogCi1MREZMQUdTCQlBZGRpdGlvbmFsIGxvYWRlciBmbGFncy4KK0JJTkRJUgkJCUJpbmFyeSBk aXJlY3RvcnkuCiAKLUxJTktTCQlUaGUgbGlzdCBvZiBiaW5hcnkgbGlua3M7IHNob3VsZCBiZSBm dWxsIHBhdGhuYW1lcywgdGhlCi0JCWxpbmtlZC10byBmaWxlIGNvbWluZyBmaXJzdCwgZm9sbG93 ZWQgYnkgdGhlIGxpbmtlZAotCQlmaWxlLiAgVGhlIGZpbGVzIGFyZSBoYXJkLWxpbmtlZC4gIEZv ciBleGFtcGxlLCB0byBsaW5rCi0JCS9iaW4vdGVzdCBhbmQgL2Jpbi9bLCB1c2U6CitCSU5HUlAJ CQlCaW5hcnkgZ3JvdXAuCiAKLQkJCUxJTktTPQkke0RFU1RESVJ9L2Jpbi90ZXN0ICR7REVTVERJ Un0vYmluL1sKK0JJTk9XTgkJCUJpbmFyeSBvd25lci4KKworQklOTU9ERQkJCUJpbmFyeSBtb2Rl LgorCitDRkxBR1MJCQlGbGFncyB0byB0aGUgY29tcGlsZXIgd2hlbiBjcmVhdGluZyBDIG9iamVj dHMuCisKK0RQQURECQkJQWRkaXRpb25hbCBkZXBlbmRlbmNpZXMgZm9yIHRoZSBwcm9ncmFtLiAg VXN1YWxseSB1c2VkCisJCQlmb3IgbGlicmFyaWVzLiAgRm9yIGV4YW1wbGUsIHRvIGRlcGVuZCBv biB0aGUKKwkJCWNvbXBhdGliaWxpdHkgYW5kIHV0aWxpdHkgbGlicmFyaWVzIHVzZToKKworCQkJ CURQQUREPSR7TElCQ09NUEFUfSAke0xJQlVUSUx9CisKKwkJCVRoZXJlIGlzIGEgcHJlZGVmaW5l ZCBpZGVudGlmaWVyIGZvciBlYWNoCisJCQkobm9uLXByb2ZpbGVkLCBub24tc2hhcmVkKSBsaWJy YXJ5IGFuZCBvYmplY3QuICBMaWJyYXJ5CisJCQlmaWxlIG5hbWVzIGFyZSB0cmFuc2Zvcm1lZCB0 byBpZGVudGlmaWVycyBieSByZW1vdmluZworCQkJdGhlIGV4dGVuc2lvbiBhbmQgY29udmVydGlu ZyB0byB1cHBlciBjYXNlLgorCisJCQlUaGVyZSBhcmUgbm8gc3BlY2lhbCBpZGVudGlmaWVycyBm b3IgcHJvZmlsZWQgb3Igc2hhcmVkCisJCQlsaWJyYXJpZXMgb3Igb2JqZWN0cy4gIFRoZSBpZGVu dGlmaWVycyBmb3IgdGhlIHN0YW5kYXJkCisJCQlsaWJyYXJpZXMgYXJlIHVzZWQgaW4gRFBBREQu ICBUaGlzIHdvcmtzIGNvcnJlY3RseSBpZmYKKwkJCWFsbCB0aGUgbGlicmFyaWVzIGFyZSBidWls dCBhdCB0aGUgc2FtZSB0aW1lLgorCQkJVW5mb3J0dW5hdGVseSwgaXQgY2F1c2VzIHVubmVjZXNz YXJ5IHJlbGlua3MgdG8gc2hhcmVkCisJCQlsaWJyYXJpZXMgd2hlbiBvbmx5IHRoZSBzdGF0aWMg bGlicmFyaWVzIGhhdmUgY2hhbmdlZC4KKwkJCURlcGVuZGVuY2llcyBvbiBzaGFyZWQgbGlicmFy aWVzIHNob3VsZCBiZSBvbmx5IG9uIHRoZQorCQkJbGlicmFyeSB2ZXJzaW9uIG51bWJlcnMuCisK K0lOU1RBTExGTEFHUwkJaW5zdGFsbCgxKSBmbGFncy4KKworTERBREQJCQlBZGRpdGlvbmFsIGxv YWRlciBvYmplY3RzLiAgVXN1YWxseSB1c2VkIGZvciBsaWJyYXJpZXMuCisJCQlGb3IgZXhhbXBs ZSwgdG8gbG9hZCB3aXRoIHRoZSBjb21wYXRpYmlsaXR5IGFuZCB1dGlsaXR5CisJCQlsaWJyYXJp ZXMsIHVzZToKKworCQkJTERBREQ9LWx1dGlsIC1sY29tcGF0CisKK0xERkxBR1MJCQlBZGRpdGlv bmFsIGxvYWRlciBmbGFncy4KKworTUFOCQkJTWFudWFsIHBhZ2VzIChzaG91bGQgZW5kIGluIC4x IC0gLjkpLiAgSWYgbm8gTUFOCisJCQl2YXJpYWJsZSBpcyBkZWZpbmVkLCAiTUFOPTxQUk9HPi4x IiBpcyBhc3N1bWVkLgorCitOT19GU0NIRwkJRG8gbm90IGNhbGwgaW5zdGFsbCgxKSB3aXRoIC1m IHNjaGcuCisKK1BSRUNJT1VTUFJPRwkJSW5zdGFsbCB3aXRoIC1TIChzYWZlIGNvcHkpIGFuZCBo YW5kbGUgTk9fRlNDSEcKKwkJCXZhcmlhYmxlIGNhc2UgYXMgd2VsbC4KKworUFJPR19DWFgJCUMr KyBhcHBsaWNhdGlvbiBuYW1lKHMpOyB0aGUgc291cmNlcyBmb3IgdGhlCisJCQlhcHBsaWNhdGlv bihzKSBhcmUgY29tcGlsZWQgdmlhICR7Q1hYfQorCitQUk9HTkFNRQkJVGhlIG5hbWUgdGhhdCB0 aGUgYWJvdmUgcHJvZ3JhbSB3aWxsIGJlIGluc3RhbGxlZCwgaWYKKwkJCWRpZmZlcmVudCBmcm9t IDxQUk9HPi4KKworU1JDUwkJCUxpc3Qgb2Ygc291cmNlIGZpbGVzIHRvIGJ1aWxkIHRoZSBwcm9n cmFtLiAgSWYgU1JDUyBpcworCQkJbm90IGRlZmluZWQsIGl0J3MgYXNzdW1lZCB0byBiZSAke1BS T0d9LmMgb3IsIGlmCisJCQlQUk9HX0NYWCBpcyBkZWZpbmVkLCAke1BST0dfQ1hYfS5jYy4KKwor U0NSSVBUUwkJCUEgbGlzdCBvZiBpbnRlcnByZXRlciBzY3JpcHRzIFtmaWxlLntzaCxjc2gscGws YXdrLC4uLn1dLgorCQkJVGhlIGluc3RhbGxhdGlvbiBpcyBjb250cm9sbGVkIGJ5IHRoZSBTQ1JJ UFRTTkFNRSwgU0NSSVBUU09XTiwKKwkJCVNDUklQVFNHUlAsIFNDUklQVFNNT0RFLCBTQ1JJUFRT RElSIHZhcmlhYmxlcyB0aGF0IGNhbiBiZQorCQkJZnVydGhlciBzcGVjaWFsaXplZCBieSBTQ1JJ UFRTPFZBUj5fPHNjcmlwdD4uCisKK1RoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGNhbiBiZSB0dW5l ZCBmb3Igc3BlY2lmaWMgc2NyaXB0czsgeW91IHdpbGwgbmVlZAordG8gc3VmZml4IHZhcmlhYmxl IGRlY2xhcmF0aW9ucyB3aXRoIF88U0NSSVBUPiwgZS5nLgorU0NSSVBUIC0+IGZvbywgLT4gU0NS SVBURElSX2Zvby4gIEluIGFsbCBjYXNlcywgdGhlIHBlci1zY3JpcHQgdmFyaWFibGVzCitkZWZh dWx0IHRvIHRoZSBlcXVpdmFsZW50IGdsb2JhbCBTQ1JJUFQqIHZhcmlhYmxlIGFuZCBmYWxsYmFj ayB0byB0aGUKK0JJTiogZXF1aXZhbGVudHMsIGUuZy4gU0NSSVBURElSX2ZvbyBmYWxscyBiYWNr IHRvIFNDUklQVERJUiBpZiBTQ1JJUFRESVJfZm9vCitpcyBub3QgZGVmaW5lZCwgdGhlbiBCSU5E SVIgaWYgU0NSSVBURElSIGlzIG5vdCBkZWZpbmVkOgorCitTQ1JJUFRTRElSCQlEaXJlY3Rvcnkg dG8gaW5zdGFsbCBhIHNjcmlwdCB0by4KKworU0NSSVBUR1JQCQlHcm91cCB0byBzZXQgZm9yIGEg c2NyaXB0LgorCitTQ1JJUFRNT0RFCQlNb2RlIHRvIGFwcGx5IHRvIGEgc2NyaXB0LgogCi1NQU4J CU1hbnVhbCBwYWdlcyAoc2hvdWxkIGVuZCBpbiAuMSAtIC45KS4gIElmIG5vIE1BTiB2YXJpYWJs ZQotCQlpcyBkZWZpbmVkLCAiTUFOPSR7UFJPR30uMSIgaXMgYXNzdW1lZC4KK1NDUklQVE9XTgkJ T3duZXIgdG8gc2V0IGZvciBhIHNjcmlwdC4KIAotUFJPRwkJVGhlIG5hbWUgb2YgdGhlIHByb2dy YW0gdG8gYnVpbGQuICBJZiBub3Qgc3VwcGxpZWQsIG5vdGhpbmcKLQkJaXMgYnVpbHQuCitMZWdh Y3kgdmFyaWFibGVzIGFyZSBhcyBmb2xsb3dzOgogCi1QUk9HX0NYWAlJZiBkZWZpbmVkLCB0aGUg bmFtZSBvZiB0aGUgcHJvZ3JhbSB0byBidWlsZC4gIEFsc28KLQkJY2F1c2VzIDxic2QucHJvZy5t az4gdG8gbGluayB0aGUgcHJvZ3JhbSB3aXRoIHRoZQotCQlzdGFuZGFyZCBDKysgbGlicmFyeS4g IFBST0dfQ1hYIG92ZXJyaWRlcyB0aGUgdmFsdWUKLQkJb2YgUFJPRyBpZiBQUk9HIGlzIGFsc28g c2V0LgotCi1QUk9HTkFNRQlUaGUgbmFtZSB0aGF0IHRoZSBhYm92ZSBwcm9ncmFtIHdpbGwgYmUg aW5zdGFsbGVkIGFzLCBpZgotCQlkaWZmZXJlbnQgZnJvbSAke1BST0d9LgotCi1TUkNTCQlMaXN0 IG9mIHNvdXJjZSBmaWxlcyB0byBidWlsZCB0aGUgcHJvZ3JhbS4gIElmIFNSQ1MgaXMgbm90Ci0J CWRlZmluZWQsIGl0J3MgYXNzdW1lZCB0byBiZSAke1BST0d9LmMgb3IsIGlmIFBST0dfQ1hYIGlz Ci0JCWRlZmluZWQsICR7UFJPR19DWFh9LmNjLgotCi1EUEFERAkJQWRkaXRpb25hbCBkZXBlbmRl bmNpZXMgZm9yIHRoZSBwcm9ncmFtLiAgVXN1YWxseSB1c2VkIGZvcgotCQlsaWJyYXJpZXMuICBG b3IgZXhhbXBsZSwgdG8gZGVwZW5kIG9uIHRoZSBjb21wYXRpYmlsaXR5IGFuZAotCQl1dGlsaXR5 IGxpYnJhcmllcyB1c2U6Ci0KLQkJCVNSQ0xJQj0ke0xJQkNPTVBBVH0gJHtMSUJVVElMfQotCi0J CVRoZXJlIGlzIGEgcHJlZGVmaW5lZCBpZGVudGlmaWVyIGZvciBlYWNoIChub24tcHJvZmlsZWQs Ci0JCW5vbi1zaGFyZWQpIGxpYnJhcnkgYW5kIG9iamVjdC4gIExpYnJhcnkgZmlsZSBuYW1lcyBh cmUKLQkJdHJhbnNmb3JtZWQgdG8gaWRlbnRpZmllcnMgYnkgcmVtb3ZpbmcgdGhlIGV4dGVuc2lv biBhbmQKLQkJY29udmVydGluZyB0byB1cHBlciBjYXNlLgotCi0JCVRoZXJlIGFyZSBubyBzcGVj aWFsIGlkZW50aWZpZXJzIGZvciBwcm9maWxlZCBvciBzaGFyZWQKLQkJbGlicmFyaWVzIG9yIG9i amVjdHMuICBUaGUgaWRlbnRpZmllcnMgZm9yIHRoZSBzdGFuZGFyZAotCQlsaWJyYXJpZXMgYXJl IHVzZWQgaW4gRFBBREQuICBUaGlzIHdvcmtzIGNvcnJlY3RseSBpZmYgYWxsCi0JCXRoZSBsaWJy YXJpZXMgYXJlIGJ1aWx0IGF0IHRoZSBzYW1lIHRpbWUuICBVbmZvcnR1bmF0ZWx5LAotCQlpdCBj YXVzZXMgdW5uZWNlc3NhcnkgcmVsaW5rcyB0byBzaGFyZWQgbGlicmFyaWVzIHdoZW4KLQkJb25s eSB0aGUgc3RhdGljIGxpYnJhcmllcyBoYXZlIGNoYW5nZWQuICBEZXBlbmRlbmNpZXMgb24KLQkJ c2hhcmVkIGxpYnJhcmllcyBzaG91bGQgYmUgb25seSBvbiB0aGUgbGlicmFyeSB2ZXJzaW9uCi0J CW51bWJlcnMuCi0KLVNUUklQCQlUaGUgZmxhZyBwYXNzZWQgdG8gdGhlIGluc3RhbGwgcHJvZ3Jh bSB0byBjYXVzZSB0aGUgYmluYXJ5Ci0JCXRvIGJlIHN0cmlwcGVkLiAgVGhpcyBpcyB0byBiZSB1 c2VkIHdoZW4gYnVpbGRpbmcgeW91cgotCQlvd24gaW5zdGFsbCBzY3JpcHQgc28gdGhhdCB0aGUg ZW50aXJlIHN5c3RlbSBjYW4gYmUgbWFkZQotCQlzdHJpcHBlZC9ub3Qtc3RyaXBwZWQgdXNpbmcg YSBzaW5nbGUgbm9iLgotCi1TVUJESVIJCUEgbGlzdCBvZiBzdWJkaXJlY3RvcmllcyB0aGF0IHNo b3VsZCBiZSBidWlsdCBhcyB3ZWxsLgotCQlFYWNoIG9mIHRoZSB0YXJnZXRzIHdpbGwgZXhlY3V0 ZSB0aGUgc2FtZSB0YXJnZXQgaW4gdGhlCi0JCXN1YmRpcmVjdG9yaWVzLgotCi1TQ1JJUFRTCQlB IGxpc3Qgb2YgaW50ZXJwcmV0ZXIgc2NyaXB0cyBbZmlsZS57c2gsY3NoLHBsLGF3aywuLi59XS4K LQkJVGhlIGluc3RhbGxhdGlvbiBpcyBjb250cm9sbGVkIGJ5IHRoZSBTQ1JJUFRTTkFNRSwgU0NS SVBUU09XTiwKLQkJU0NSSVBUU0dSUCwgU0NSSVBUU01PREUsIFNDUklQVFNESVIgdmFyaWFibGVz IHRoYXQgY2FuIGJlCi0JCWZ1cnRoZXIgc3BlY2lhbGl6ZWQgYnkgU0NSSVBUUzxWQVI+XzxzY3Jp cHQ+LgorQ09QVFMJCQlPcHRpbWl6YXRpb24gZmxhZ3MgYXBwZW5kZWQgdG8gQ0ZMQUdTOyBoaWdo bHkKKyAJCQlkaXNjb3VyYWdlZCBpbiBtb2Rlcm4gTWFrZWZpbGVzLgorCitQUk9HCQkJTGVnYWN5 IGZvcm0gb2YgYFBST0dTYAorCitQUk9HX0NYWAkJTGVnYWN5IGZvcm0gb2YgYFBST0dTX0NYWGAK KworVGhlIGZvbGxvd2luZyB2YXJpYWJsZXMgYXJlIHdyYXBwZWQgdG8gYmUgbWFkZSBgUFJPR1Mg YXdhcmVgOgorCitOTFMJCQlTZWUgYnNkLm5scy5tayBkZXNjcmlwdGlvbiBmb3IgbW9yZSBkZXRh aWxzLgorTkxTRElSCitOTFNOQU1FCisKK0RldmVsb3BlciBjb252ZW5pZW5jZSB2YXJpYWJsZXM6 CisKK1dJVEhfQVNTRVJUX0RFQlVHCUNvbXBpbGUgd2l0aCBDRkxBR1MrPS1ETkRFQlVHCiAKIFRo ZSBpbmNsdWRlIGZpbGUgPGJzZC5wcm9nLm1rPiBpbmNsdWRlcyB0aGUgZmlsZSBuYW1lZCAiLi4v TWFrZWZpbGUuaW5jIgotaWYgaXQgZXhpc3RzLCBhcyB3ZWxsIGFzIHRoZSBpbmNsdWRlIGZpbGUg PGJzZC5tYW4ubWs+LgoraWYgaXQgZXhpc3RzLCBhcyB3ZWxsIGFzIHRoZSBpbmNsdWRlIGZpbGUg PGJzZC5tYW4ubWs+LiAgRnVydGhlcm1vcmUsIGlmCitXSVRIX05MUyBpcyBkZWZpbmVkIGFuZCBO TFMuPFBST0c+IGlzIGFsc28gZGVmaW5lZCwgdGhlbiBic2QubmxzLm1rIGlzCitpbmNsdWRlZCBh cyB3ZWxsLgogCiBTb21lIHNpbXBsZSBleGFtcGxlczoKIAorMS4gU2luZ2xlIEMgUHJvZ3JhbToK KwogVG8gYnVpbGQgZm9vIGZyb20gZm9vLmMgd2l0aCBhIG1hbnVhbCBwYWdlIGZvby4xLCB1c2U6 CiAKLQlQUk9HPQlmb28KKwlQUk9HUz0JZm9vCiAKIAkuaW5jbHVkZSA8YnNkLnByb2cubWs+CiAK QEAgLTMxNCw2ICszNzMsMzQgQEAKIAogCVNSQ1M9CWEuYyBiLmMgYy5jIGQuYwogCisyLiBTaW5n bGUgQysrIFByb2dyYW06CisKK1RvIGJ1aWxkIGJhciB3aXRoIGJhci5jYyB3aXRoIGEgbWFucGFn ZSBwYWdlIGJhci4xLCB1c2U6CisKKwlQUk9HU19DWFg9CWJhcgorCisJLmluY2x1ZGUgPGJzZC5w cm9nLm1rPgorCitBbGwgb3RoZXIgY29uc3RydWN0cyBhcmUgdGhlIHNhbWUgYXMgaW4gdGhlIFNp bmdsZSBDIFByb2dyYW0gY2FzZS4KKworMy4gTXVsdGlwbGUgQyBwcm9ncmFtczoKKworVG8gYnVp bGQgZm9vIGZyb20gZm9vLmMgYW5kIGJhciB3aXRoIGJhci5jLCB1c2U6CisKKwlQUk9HUz0JZm9v IGJhcgorCisJLmluY2x1ZGUgPGJzZC5wcm9nLm1rPgorCitUbyBidWlsZCBmb28gZnJvbSBiYXIu YyBhbmQgYmFyIHdpdGggZm9vLmMsIHVzZToKKworCVBST0dTPQlmb28gYmFyCisKKwlTUkNTLmZv bz0gYmFyLmMKKworCVNSQ1MuYmFyPSBmb28uYworCisJLmluY2x1ZGUgPGJzZC5wcm9nLm1rPgor CiA9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09 LT0tPS09LT0tPS09LT0tPS09CiAKIFRoZSBpbmNsdWRlIGZpbGUgPGJzZC5zdWJkaXIubWs+IGNv bnRhaW5zIHRoZSBkZWZhdWx0IHRhcmdldHMgZm9yIGJ1aWxkaW5nCg== --f46d04447dff4b7a4504c8c5de50--