From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT,WEIRD_QUOTING autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 19F5AC433E1 for ; Tue, 18 Aug 2020 16:10:50 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id B86E2207DA for ; Tue, 18 Aug 2020 16:10:49 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=quicinc.com header.i=@quicinc.com header.b="b0Ry9doP" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B86E2207DA Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=quicinc.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:51096 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k84CG-0007KM-ST for qemu-devel@archiver.kernel.org; Tue, 18 Aug 2020 12:10:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:32972) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k83u1-0008FQ-KJ for qemu-devel@nongnu.org; Tue, 18 Aug 2020 11:51:57 -0400 Received: from alexa-out-sd-02.qualcomm.com ([199.106.114.39]:12947) by eggs.gnu.org with esmtps (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1k83tx-0005sa-2s for qemu-devel@nongnu.org; Tue, 18 Aug 2020 11:51:57 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=quicinc.com; i=@quicinc.com; q=dns/txt; s=qcdkim; t=1597765913; x=1629301913; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=xxRUwtV9seQpocl47f4bhfzv96+ccLFVOhfXGSKbmKk=; b=b0Ry9doPfeIqVUdJKOnxPRZnHT8vQQValXB2Yn8R/vABdV9OwZ7GgkmK 52xGoqdH9Yypv+bshc/9MjgAOmOdetnQhqIA2sVVZK2POW6ohsJFF3uoU f8Q1vzw736hFMSVoOZ4pUkJZwyOZtl6f3PLs176hJp4W4gyxbcHJcXJXM o=; Received: from unknown (HELO ironmsg02-sd.qualcomm.com) ([10.53.140.142]) by alexa-out-sd-02.qualcomm.com with ESMTP; 18 Aug 2020 08:51:00 -0700 Received: from vu-tsimpson-aus.qualcomm.com (HELO vu-tsimpson1-aus.qualcomm.com) ([10.222.150.1]) by ironmsg02-sd.qualcomm.com with ESMTP; 18 Aug 2020 08:50:58 -0700 Received: by vu-tsimpson1-aus.qualcomm.com (Postfix, from userid 47164) id D444A1618; Tue, 18 Aug 2020 10:50:57 -0500 (CDT) From: Taylor Simpson To: qemu-devel@nongnu.org Subject: [RFC PATCH v3 21/34] Hexagon (target/hexagon) generator phase 2 - generate header files Date: Tue, 18 Aug 2020 10:50:34 -0500 Message-Id: <1597765847-16637-22-git-send-email-tsimpson@quicinc.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1597765847-16637-1-git-send-email-tsimpson@quicinc.com> References: <1597765847-16637-1-git-send-email-tsimpson@quicinc.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Received-SPF: pass client-ip=199.106.114.39; envelope-from=tsimpson@qualcomm.com; helo=alexa-out-sd-02.qualcomm.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/08/18 11:50:57 X-ACL-Warn: Detected OS = FreeBSD 9.x or newer [fuzzy] X-Spam_score_int: -32 X-Spam_score: -3.3 X-Spam_bar: --- X-Spam_report: (-3.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001, WEIRD_QUOTING=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: ale@rev.ng, riku.voipio@iki.fi, richard.henderson@linaro.org, laurent@vivier.eu, tsimpson@quicinc.com, philmd@redhat.com, aleksandar.m.mail@gmail.com Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" UHl0aG9uIHNjcmlwdHMgZ2VuZXJhdGUgdGhlIGZvbGxvd2luZyBmaWxlcwogICAgaGVscGVyX3By b3Rvc19nZW5lcmF0ZWQuaAogICAgICAgIEZvciBlYWNoIGluc3RydWN0aW9uIHdlIGNyZWF0ZSBE RUZfSEVMUEVSIGZ1bmN0aW9uIHByb3RvdHlwZQogICAgaGVscGVyX2Z1bmNzX2dlbmVyYXRlZC5o CiAgICAgICAgRm9yIGVhY2ggaW5zdHJ1Y3Rpb24gd2UgY3JlYXRlIHRoZSBoZWxwZXIgZnVuY3Rp b24gZGVmaW5pdGlvbgogICAgdGNnX2Z1bmNzX2dlbmVyYXRlZC5oCiAgICAgICAgRm9yIGVhY2gg aW5zdHJ1Y3Rpb24gd2UgY3JlYXRlIFRDRyBjb2RlIHRvIGdlbmVyYXRlIGNhbGwgdG8gaGVscGVy CiAgICBzaG9ydGNvZGVfZ2VuZXJhdGVkLmgKICAgICAgICBHZW5lcmF0ZSBhIHRhYmxlIG9mIGlu c3RydWN0aW9uICJzaG9ydGNvZGUiIHNlbWFudGljcwogICAgb3Bjb2Rlc19kZWZfZ2VuZXJhdGVk LmgKICAgICAgICBHaXZlcyBhIGxpc3Qgb2YgYWxsIHRoZSBvcGNvZGVzCiAgICBvcF9hdHRyaWJz X2dlbmVyYXRlZC5oCiAgICAgICAgTGlzdHMgYWxsIHRoZSBhdHRyaWJ1dGVzIGFzc29jaWF0ZWQg d2l0aCBlYWNoIGluc3RydWN0aW9uCiAgICBvcF9yZWdzX2dlbmVyYXRlZC5oCiAgICAgICAgTGlz dHMgdGhlIHJlZ2lzdGVyIGFuZCBpbW1lZGlhdGUgb3BlcmFuZHMgZm9yIGVhY2ggaW5zdHJ1Y3Rp b24KICAgIHByaW50aW5zbl9nZW5lcmF0ZWQuaAogICAgICAgIERhdGEgZm9yIHByaW50aW5nIChk aXNhc3NlbWJsaW5nKSBlYWNoIGluc3RydWN0aW9uIChmb3JtYXQKICAgICAgICBzdHJpbmcgKyBv cGVyYW5kcykKClNpZ25lZC1vZmYtYnk6IFRheWxvciBTaW1wc29uIDx0c2ltcHNvbkBxdWljaW5j LmNvbT4KLS0tCiB0YXJnZXQvaGV4YWdvbi9nZW5faGVscGVyX2Z1bmNzLnB5ICB8IDIzMCArKysr KysrKysrKysrKysrKysrKysrKysrKysKIHRhcmdldC9oZXhhZ29uL2dlbl9oZWxwZXJfcHJvdG9z LnB5IHwgMTU4ICsrKysrKysrKysrKysrKysrKysKIHRhcmdldC9oZXhhZ29uL2dlbl9vcF9hdHRy aWJzLnB5ICAgIHwgIDQ2ICsrKysrKwogdGFyZ2V0L2hleGFnb24vZ2VuX29wX3JlZ3MucHkgICAg ICAgfCAxMTkgKysrKysrKysrKysrKysKIHRhcmdldC9oZXhhZ29uL2dlbl9vcGNvZGVzX2RlZi5w eSAgIHwgIDQzICsrKysrKwogdGFyZ2V0L2hleGFnb24vZ2VuX3ByaW50aW5zbi5weSAgICAgfCAx ODIgKysrKysrKysrKysrKysrKysrKysrKwogdGFyZ2V0L2hleGFnb24vZ2VuX3Nob3J0Y29kZS5w eSAgICAgfCAgNzEgKysrKysrKysrCiB0YXJnZXQvaGV4YWdvbi9nZW5fdGNnX2Z1bmNzLnB5ICAg ICB8IDMwMSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHRhcmdldC9oZXhh Z29uL2hleF9jb21tb24ucHkgICAgICAgIHwgMjA0ICsrKysrKysrKysrKysrKysrKysrKysrKwog OSBmaWxlcyBjaGFuZ2VkLCAxMzU0IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDc1NSB0 YXJnZXQvaGV4YWdvbi9nZW5faGVscGVyX2Z1bmNzLnB5CiBjcmVhdGUgbW9kZSAxMDA3NTUgdGFy Z2V0L2hleGFnb24vZ2VuX2hlbHBlcl9wcm90b3MucHkKIGNyZWF0ZSBtb2RlIDEwMDc1NSB0YXJn ZXQvaGV4YWdvbi9nZW5fb3BfYXR0cmlicy5weQogY3JlYXRlIG1vZGUgMTAwNzU1IHRhcmdldC9o ZXhhZ29uL2dlbl9vcF9yZWdzLnB5CiBjcmVhdGUgbW9kZSAxMDA3NTUgdGFyZ2V0L2hleGFnb24v Z2VuX29wY29kZXNfZGVmLnB5CiBjcmVhdGUgbW9kZSAxMDA3NTUgdGFyZ2V0L2hleGFnb24vZ2Vu X3ByaW50aW5zbi5weQogY3JlYXRlIG1vZGUgMTAwNzU1IHRhcmdldC9oZXhhZ29uL2dlbl9zaG9y dGNvZGUucHkKIGNyZWF0ZSBtb2RlIDEwMDc1NSB0YXJnZXQvaGV4YWdvbi9nZW5fdGNnX2Z1bmNz LnB5CiBjcmVhdGUgbW9kZSAxMDA3NTUgdGFyZ2V0L2hleGFnb24vaGV4X2NvbW1vbi5weQoKZGlm ZiAtLWdpdCBhL3RhcmdldC9oZXhhZ29uL2dlbl9oZWxwZXJfZnVuY3MucHkgYi90YXJnZXQvaGV4 YWdvbi9nZW5faGVscGVyX2Z1bmNzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAw MDAuLjQ1OTU4ODcKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvaGV4YWdvbi9nZW5faGVscGVy X2Z1bmNzLnB5CkBAIC0wLDAgKzEsMjMwIEBACisjIS91c3IvYmluL2VudiBweXRob24zCisKKyMj CisjIyAgQ29weXJpZ2h0KGMpIDIwMTktMjAyMCBRdWFsY29tbSBJbm5vdmF0aW9uIENlbnRlciwg SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIyMKKyMjICBUaGlzIHByb2dyYW0gaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyMgIGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlz aGVkIGJ5CisjIyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24g MiBvZiB0aGUgTGljZW5zZSwgb3IKKyMjICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz aW9uLgorIyMKKyMjICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMjICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyMgIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMjICBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIyMKKyMjICBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyMg IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3Jn L2xpY2Vuc2VzLz4uCisjIworCitpbXBvcnQgc3lzCitpbXBvcnQgcmUKK2ltcG9ydCBzdHJpbmcK K2Zyb20gaW8gaW1wb3J0IFN0cmluZ0lPCisKK2Zyb20gaGV4X2NvbW1vbiBpbXBvcnQgKgorCisj IworIyMgSGVscGVycyBmb3IgZ2VuX2hlbHBlcl9mdW5jdGlvbgorIyMKK2RlZiBnZW5fZGVjbF9l YShmKToKKyAgICBmLndyaXRlKCJzaXplNHVfdCBFQTtcbiIpCisKK2RlZiBnZW5faGVscGVyX3Jl dHVybl90eXBlKGYscmVndHlwZSxyZWdpZCxyZWdubyk6CisgICAgaWYgcmVnbm8gPiAxIDogZi53 cml0ZSgiLCAiKQorICAgIGYud3JpdGUoImludDMyX3QiKQorCitkZWYgZ2VuX2hlbHBlcl9yZXR1 cm5fdHlwZV9wYWlyKGYscmVndHlwZSxyZWdpZCxyZWdubyk6CisgICAgaWYgcmVnbm8gPiAxIDog Zi53cml0ZSgiLCAiKQorICAgIGYud3JpdGUoImludDY0X3QiKQorCitkZWYgZ2VuX2hlbHBlcl9h cmcoZixyZWd0eXBlLHJlZ2lkLHJlZ25vKToKKyAgICBpZiByZWdubyA+IDAgOiBmLndyaXRlKCIs ICIgKQorICAgIGYud3JpdGUoImludDMyX3QgJXMlc1YiICUgKHJlZ3R5cGUscmVnaWQpKQorCitk ZWYgZ2VuX2hlbHBlcl9hcmdfbmV3KGYscmVndHlwZSxyZWdpZCxyZWdubyk6CisgICAgaWYgcmVn bm8gPj0gMCA6IGYud3JpdGUoIiwgIiApCisgICAgZi53cml0ZSgiaW50MzJfdCAlcyVzTiIgJSAo cmVndHlwZSxyZWdpZCkpCisKK2RlZiBnZW5faGVscGVyX2FyZ19wYWlyKGYscmVndHlwZSxyZWdp ZCxyZWdubyk6CisgICAgaWYgcmVnbm8gPj0gMCA6IGYud3JpdGUoIiwgIikKKyAgICBmLndyaXRl KCJpbnQ2NF90ICVzJXNWIiAlIChyZWd0eXBlLHJlZ2lkKSkKKworZGVmIGdlbl9oZWxwZXJfYXJn X29wbihmLHJlZ3R5cGUscmVnaWQsaSx0YWcpOgorICAgIGlmIChpc19wYWlyKHJlZ2lkKSk6Cisg ICAgICAgIGdlbl9oZWxwZXJfYXJnX3BhaXIoZixyZWd0eXBlLHJlZ2lkLGkpCisgICAgZWxpZiAo aXNfc2luZ2xlKHJlZ2lkKSk6CisgICAgICAgIGlmIGlzX29sZF92YWwocmVndHlwZSwgcmVnaWQs IHRhZyk6CisgICAgICAgICAgICBnZW5faGVscGVyX2FyZyhmLHJlZ3R5cGUscmVnaWQsaSkKKyAg ICAgICAgZWxpZiBpc19uZXdfdmFsKHJlZ3R5cGUsIHJlZ2lkLCB0YWcpOgorICAgICAgICAgICAg Z2VuX2hlbHBlcl9hcmdfbmV3KGYscmVndHlwZSxyZWdpZCxpKQorICAgICAgICBlbHNlOgorICAg ICAgICAgICAgcHJpbnQoIkJhZCByZWdpc3RlciBwYXJzZTogIixyZWd0eXBlLHJlZ2lkLHRvc3Ms bnVtcmVncykKKyAgICBlbHNlOgorICAgICAgICBwcmludCgiQmFkIHJlZ2lzdGVyIHBhcnNlOiAi LHJlZ3R5cGUscmVnaWQsdG9zcyxudW1yZWdzKQorCitkZWYgZ2VuX2hlbHBlcl9hcmdfaW1tKGYs aW1tbGV0dCk6CisgICAgZi53cml0ZSgiLCBpbnQzMl90ICVzIiAlIChpbW1fbmFtZShpbW1sZXR0 KSkpCisKK2RlZiBnZW5faGVscGVyX2Rlc3RfZGVjbChmLHJlZ3R5cGUscmVnaWQscmVnbm8sc3Vi ZmllbGQ9IiIpOgorICAgIGYud3JpdGUoImludDMyX3QgJXMlc1YlcyA9IDA7XG4iICUgXAorICAg ICAgICAocmVndHlwZSxyZWdpZCxzdWJmaWVsZCkpCisKK2RlZiBnZW5faGVscGVyX2Rlc3RfZGVj bF9wYWlyKGYscmVndHlwZSxyZWdpZCxyZWdubyxzdWJmaWVsZD0iIik6CisgICAgZi53cml0ZSgi aW50NjRfdCAlcyVzViVzID0gMDtcbiIgJSBcCisgICAgICAgIChyZWd0eXBlLHJlZ2lkLHN1YmZp ZWxkKSkKKworZGVmIGdlbl9oZWxwZXJfZGVzdF9kZWNsX29wbihmLHJlZ3R5cGUscmVnaWQsaSk6 CisgICAgaWYgKGlzX3BhaXIocmVnaWQpKToKKyAgICAgICAgZ2VuX2hlbHBlcl9kZXN0X2RlY2xf cGFpcihmLHJlZ3R5cGUscmVnaWQsaSkKKyAgICBlbGlmIChpc19zaW5nbGUocmVnaWQpKToKKyAg ICAgICAgZ2VuX2hlbHBlcl9kZXN0X2RlY2woZixyZWd0eXBlLHJlZ2lkLGkpCisgICAgZWxzZToK KyAgICAgICAgcHJpbnQoIkJhZCByZWdpc3RlciBwYXJzZTogIixyZWd0eXBlLHJlZ2lkLHRvc3Ms bnVtcmVncykKKworZGVmIGdlbl9oZWxwZXJfcmV0dXJuKGYscmVndHlwZSxyZWdpZCxyZWdubyk6 CisgICAgZi53cml0ZSgicmV0dXJuICVzJXNWO1xuIiAlIChyZWd0eXBlLHJlZ2lkKSkKKworZGVm IGdlbl9oZWxwZXJfcmV0dXJuX3BhaXIoZixyZWd0eXBlLHJlZ2lkLHJlZ25vKToKKyAgICBmLndy aXRlKCJyZXR1cm4gJXMlc1Y7XG4iICUgKHJlZ3R5cGUscmVnaWQpKQorCitkZWYgZ2VuX2hlbHBl cl9yZXR1cm5fb3BuKGYsIHJlZ3R5cGUsIHJlZ2lkLCBpKToKKyAgICBpZiAoaXNfcGFpcihyZWdp ZCkpOgorICAgICAgICBnZW5faGVscGVyX3JldHVybl9wYWlyKGYscmVndHlwZSxyZWdpZCxpKQor ICAgIGVsaWYgKGlzX3NpbmdsZShyZWdpZCkpOgorICAgICAgICBnZW5faGVscGVyX3JldHVybihm LHJlZ3R5cGUscmVnaWQsaSkKKyAgICBlbHNlOgorICAgICAgICBwcmludCgiQmFkIHJlZ2lzdGVy IHBhcnNlOiAiLHJlZ3R5cGUscmVnaWQsdG9zcyxudW1yZWdzKQorCisjIworIyMgR2VuZXJhdGUg dGhlIFRDRyBjb2RlIHRvIGNhbGwgdGhlIGhlbHBlcgorIyMgICAgIEZvciBBMl9hZGQ6IFJkMzI9 YWRkKFJzMzIsUnQzMiksIHsgUmRWPVJzVitSdFY7fQorIyMgICAgIFdlIHByb2R1Y2U6CisjIyAg ICAgICAjaWZuZGVmIGZHRU5fVENHX0EyX2FkZAorIyMgICAgICAgaW50MzJfdCBIRUxQRVIoQTJf YWRkKShDUFVIZXhhZ29uU3RhdGUgKmVudiwgaW50MzJfdCBSc1YsIGludDMyX3QgUnRWKQorIyMg ICAgICAgeworIyMgICAgICAgdWludDMyX3Qgc2xvdCBfX2F0dHJpYnV0ZV9fKHVudXNlZCkpID0g NDsKKyMjICAgICAgIGludDMyX3QgUmRWID0gMDsKKyMjICAgICAgIHsgUmRWPVJzVitSdFY7fQor IyMgICAgICAgcmV0dXJuIFJkVjsKKyMjICAgICAgIH0KKyMjICAgICAgICNlbmRpZgorIyMKK2Rl ZiBnZW5faGVscGVyX2Z1bmN0aW9uKGYsIHRhZywgdGFncmVncywgdGFnaW1tcyk6CisgICAgcmVn cyA9IHRhZ3JlZ3NbdGFnXQorICAgIGltbXMgPSB0YWdpbW1zW3RhZ10KKworICAgIGYud3JpdGUo JyNpZm5kZWYgZkdFTl9UQ0dfJXNcbicgJSB0YWcpCisgICAgbnVtcmVzdWx0cyA9IDAKKyAgICBu dW1zY2FsYXJyZXN1bHRzID0gMAorICAgIG51bXNjYWxhcnJlYWR3cml0ZSA9IDAKKyAgICBmb3Ig cmVndHlwZSxyZWdpZCx0b3NzLG51bXJlZ3MgaW4gcmVnczoKKyAgICAgICAgaWYgKGlzX3dyaXR0 ZW4ocmVnaWQpKToKKyAgICAgICAgICAgIG51bXJlc3VsdHMgKz0gMQorICAgICAgICAgICAgaWYg KGlzX3NjYWxhcl9yZWcocmVndHlwZSkpOgorICAgICAgICAgICAgICAgIG51bXNjYWxhcnJlc3Vs dHMgKz0gMQorICAgICAgICBpZiAoaXNfcmVhZHdyaXRlKHJlZ2lkKSk6CisgICAgICAgICAgICBp ZiAoaXNfc2NhbGFyX3JlZyhyZWd0eXBlKSk6CisgICAgICAgICAgICAgICAgbnVtc2NhbGFycmVh ZHdyaXRlICs9IDEKKworICAgIGlmIChudW1zY2FsYXJyZXN1bHRzID4gMSk6CisgICAgICAgICMj IFRoZSBoZWxwZXIgaXMgYm9ndXMgd2hlbiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHJlc3VsdAor ICAgICAgICBmLndyaXRlKCJ2b2lkIEhFTFBFUiglcykoQ1BVSGV4YWdvblN0YXRlICplbnYpIHsg Qk9HVVNfSEVMUEVSKCVzKTsgfVxuIgorICAgICAgICAgICAgICAgICUgKHRhZywgdGFnKSkKKyAg ICBlbHNlOgorICAgICAgICAjIyBUaGUgcmV0dXJuIHR5cGUgb2YgdGhlIGZ1bmN0aW9uIGlzIHRo ZSB0eXBlIG9mIHRoZSBkZXN0aW5hdGlvbgorICAgICAgICAjIyByZWdpc3RlcgorICAgICAgICBp PTAKKyAgICAgICAgZm9yIHJlZ3R5cGUscmVnaWQsdG9zcyxudW1yZWdzIGluIHJlZ3M6CisgICAg ICAgICAgICBpZiAoaXNfd3JpdHRlbihyZWdpZCkpOgorICAgICAgICAgICAgICAgIGlmIChpc19w YWlyKHJlZ2lkKSk6CisgICAgICAgICAgICAgICAgICAgIGdlbl9oZWxwZXJfcmV0dXJuX3R5cGVf cGFpcihmLHJlZ3R5cGUscmVnaWQsaSkKKyAgICAgICAgICAgICAgICBlbGlmIChpc19zaW5nbGUo cmVnaWQpKToKKyAgICAgICAgICAgICAgICAgICAgZ2VuX2hlbHBlcl9yZXR1cm5fdHlwZShmLHJl Z3R5cGUscmVnaWQsaSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAg ICBwcmludCgiQmFkIHJlZ2lzdGVyIHBhcnNlOiAiLHJlZ3R5cGUscmVnaWQsdG9zcyxudW1yZWdz KQorICAgICAgICAgICAgaSArPSAxCisKKyAgICAgICAgaWYgKG51bXNjYWxhcnJlc3VsdHMgPT0g MCk6CisgICAgICAgICAgICBmLndyaXRlKCJ2b2lkIikKKyAgICAgICAgZi53cml0ZSgiIEhFTFBF UiglcykoQ1BVSGV4YWdvblN0YXRlICplbnYiICUgdGFnKQorCisgICAgICAgIGkgPSAxCisKKyAg ICAgICAgIyMgQXJndW1lbnRzIHRvIHRoZSBoZWxwZXIgZnVuY3Rpb24gYXJlIHRoZSBzb3VyY2Ug cmVncyBhbmQgaW1tZWRpYXRlcworICAgICAgICBmb3IgcmVndHlwZSxyZWdpZCx0b3NzLG51bXJl Z3MgaW4gcmVnczoKKyAgICAgICAgICAgIGlmIChpc19yZWFkKHJlZ2lkKSk6CisgICAgICAgICAg ICAgICAgZ2VuX2hlbHBlcl9hcmdfb3BuKGYscmVndHlwZSxyZWdpZCxpLHRhZykKKyAgICAgICAg ICAgICAgICBpICs9IDEKKyAgICAgICAgZm9yIGltbWxldHQsYml0cyxpbW1zaGlmdCBpbiBpbW1z OgorICAgICAgICAgICAgZ2VuX2hlbHBlcl9hcmdfaW1tKGYsaW1tbGV0dCkKKyAgICAgICAgICAg IGkgKz0gMQorICAgICAgICBpZiBuZWVkX3Nsb3QodGFnKToKKyAgICAgICAgICAgIGlmIGkgPiAw OiBmLndyaXRlKCIsICIpCisgICAgICAgICAgICBmLndyaXRlKCJ1aW50MzJfdCBzbG90IikKKyAg ICAgICAgICAgIGkgKz0gMQorICAgICAgICBpZiBuZWVkX3BhcnQxKHRhZyk6CisgICAgICAgICAg ICBpZiBpID4gMDogZi53cml0ZSgiLCAiKQorICAgICAgICAgICAgZi53cml0ZSgidWludDMyX3Qg cGFydDEiKQorICAgICAgICBmLndyaXRlKCIpXG57XG4iKQorICAgICAgICBpZiAobm90IG5lZWRf c2xvdCh0YWcpKToKKyAgICAgICAgICAgIGYud3JpdGUoInVpbnQzMl90IHNsb3QgX19hdHRyaWJ1 dGVfXygodW51c2VkKSkgPSA0O1xuIiApCisgICAgICAgIGlmIG5lZWRfZWEodGFnKTogZ2VuX2Rl Y2xfZWEoZikKKyAgICAgICAgIyMgRGVjbGFyZSB0aGUgcmV0dXJuIHZhcmlhYmxlCisgICAgICAg IGk9MAorICAgICAgICBmb3IgcmVndHlwZSxyZWdpZCx0b3NzLG51bXJlZ3MgaW4gcmVnczoKKyAg ICAgICAgICAgIGlmIChpc193cml0ZW9ubHkocmVnaWQpKToKKyAgICAgICAgICAgICAgICBnZW5f aGVscGVyX2Rlc3RfZGVjbF9vcG4oZixyZWd0eXBlLHJlZ2lkLGkpCisgICAgICAgICAgICBpICs9 IDEKKworICAgICAgICBpZiAnQV9GUE9QJyBpbiBhdHRyaWJkaWN0W3RhZ106CisgICAgICAgICAg ICBmLndyaXRlKCdmRlBPUF9TVEFSVCgpO1xuJyk7CisKKyAgICAgICAgZi53cml0ZShzZW1kaWN0 W3RhZ10pCisgICAgICAgIGYud3JpdGUoIlxuIikKKworICAgICAgICBpZiAnQV9GUE9QJyBpbiBh dHRyaWJkaWN0W3RhZ106CisgICAgICAgICAgICBmLndyaXRlKCdmRlBPUF9FTkQoKTtcbicpOwor CisgICAgICAgICMjIFNhdmUvcmV0dXJuIHRoZSByZXR1cm4gdmFyaWFibGUKKyAgICAgICAgZm9y IHJlZ3R5cGUscmVnaWQsdG9zcyxudW1yZWdzIGluIHJlZ3M6CisgICAgICAgICAgICBpZiAoaXNf d3JpdHRlbihyZWdpZCkpOgorICAgICAgICAgICAgICAgIGdlbl9oZWxwZXJfcmV0dXJuX29wbihm LCByZWd0eXBlLCByZWdpZCwgaSkKKyAgICAgICAgZi53cml0ZSgifVxuIikKKyAgICAgICAgIyMg RW5kIG9mIHRoZSBoZWxwZXIgZGVmaW5pdGlvbgorICAgIGYud3JpdGUoJyNlbmRpZlxuJykKKwor ZGVmIG1haW4oKToKKyAgICByZWFkX3NlbWFudGljc19maWxlKHN5cy5hcmd2WzFdKQorICAgIHJl YWRfYXR0cmlic19maWxlKHN5cy5hcmd2WzJdKQorICAgIGNhbGN1bGF0ZV9hdHRyaWJzKCkKKyAg ICB0YWdyZWdzID0gZ2V0X3RhZ3JlZ3MoKQorICAgIHRhZ2ltbXMgPSBnZXRfdGFnaW1tcygpCisK KyAgICBmID0gU3RyaW5nSU8oKQorCisgICAgZm9yIHRhZyBpbiB0YWdzOgorICAgICAgICAjIyBT a2lwIHRoZSBwcml2IGluc3RydWN0aW9ucworICAgICAgICBpZiAoICJBX1BSSVYiIGluIGF0dHJp YmRpY3RbdGFnXSApIDoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICMjIFNraXAgdGhl IGd1ZXN0IGluc3RydWN0aW9ucworICAgICAgICBpZiAoICJBX0dVRVNUIiBpbiBhdHRyaWJkaWN0 W3RhZ10gKSA6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAjIyBTa2lwIHRoZSBkaWFn IGluc3RydWN0aW9ucworICAgICAgICBpZiAoIHRhZyA9PSAiWTZfZGlhZyIgKSA6CisgICAgICAg ICAgICBjb250aW51ZQorICAgICAgICBpZiAoIHRhZyA9PSAiWTZfZGlhZzAiICkgOgorICAgICAg ICAgICAgY29udGludWUKKyAgICAgICAgaWYgKCB0YWcgPT0gIlk2X2RpYWcxIiApIDoKKyAgICAg ICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgZ2VuX2hlbHBlcl9mdW5jdGlvbihmLCB0YWcsIHRh Z3JlZ3MsIHRhZ2ltbXMpCisKKworICAgIHJlYWxmID0gb3BlbignaGVscGVyX2Z1bmNzX2dlbmVy YXRlZC5oJywndycpCisgICAgcmVhbGYud3JpdGUoZi5nZXR2YWx1ZSgpKQorICAgIHJlYWxmLmNs b3NlKCkKKyAgICBmLmNsb3NlKCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBt YWluKCkKZGlmZiAtLWdpdCBhL3RhcmdldC9oZXhhZ29uL2dlbl9oZWxwZXJfcHJvdG9zLnB5IGIv dGFyZ2V0L2hleGFnb24vZ2VuX2hlbHBlcl9wcm90b3MucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUK aW5kZXggMDAwMDAwMC4uNmQ1YWIwNwotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9oZXhhZ29u L2dlbl9oZWxwZXJfcHJvdG9zLnB5CkBAIC0wLDAgKzEsMTU4IEBACisjIS91c3IvYmluL2VudiBw eXRob24zCisKKyMjCisjIyAgQ29weXJpZ2h0KGMpIDIwMTktMjAyMCBRdWFsY29tbSBJbm5vdmF0 aW9uIENlbnRlciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIyMKKyMjICBUaGlzIHByb2dy YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm eQorIyMgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgYXMgcHVibGlzaGVkIGJ5CisjIyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMjICAoYXQgeW91ciBvcHRpb24pIGFu eSBsYXRlciB2ZXJzaW9uLgorIyMKKyMjICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMjICBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyMgIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMj ICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIyMKKyMjICBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZQorIyMgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDov L3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisjIworCitpbXBvcnQgc3lzCitpbXBvcnQgcmUKK2lt cG9ydCBzdHJpbmcKK2Zyb20gaW8gaW1wb3J0IFN0cmluZ0lPCisKK2Zyb20gaGV4X2NvbW1vbiBp bXBvcnQgKgorCisjIworIyMgSGVscGVycyBmb3IgZ2VuX2hlbHBlcl9wcm90b3R5cGUKKyMjCitk ZWZfaGVscGVyX3R5cGVzID0geworICAgICdOJyA6ICdzMzInLAorICAgICdPJyA6ICdzMzInLAor ICAgICdQJyA6ICdzMzInLAorICAgICdNJyA6ICdzMzInLAorICAgICdDJyA6ICdzMzInLAorICAg ICdSJyA6ICdzMzInLAorICAgICdWJyA6ICdwdHInLAorICAgICdRJyA6ICdwdHInCit9CisKK2Rl Zl9oZWxwZXJfdHlwZXNfcGFpciA9IHsKKyAgICAnUicgOiAnczY0JywKKyAgICAnQycgOiAnczY0 JywKKyAgICAnUycgOiAnczY0JywKKyAgICAnRycgOiAnczY0JywKKyAgICAnVicgOiAncHRyJywK KyAgICAnUScgOiAncHRyJworfQorCitkZWYgZ2VuX2RlZl9oZWxwZXJfb3BuKGYsIHRhZywgcmVn dHlwZSwgcmVnaWQsIHRvc3MsIG51bXJlZ3MsIGkpOgorICAgIGlmIChpc19wYWlyKHJlZ2lkKSk6 CisgICAgICAgIGYud3JpdGUoIiwgJXMiICUgKGRlZl9oZWxwZXJfdHlwZXNfcGFpcltyZWd0eXBl XSkpCisgICAgZWxpZiAoaXNfc2luZ2xlKHJlZ2lkKSk6CisgICAgICAgIGYud3JpdGUoIiwgJXMi ICUgKGRlZl9oZWxwZXJfdHlwZXNbcmVndHlwZV0pKQorICAgIGVsc2U6CisgICAgICAgIHByaW50 KCJCYWQgcmVnaXN0ZXIgcGFyc2U6ICIscmVndHlwZSxyZWdpZCx0b3NzLG51bXJlZ3MpCisKKyMj CisjIyBHZW5lcmF0ZSB0aGUgREVGX0hFTFBFUiBwcm90b3R5cGUgZm9yIGFuIGluc3RydWN0aW9u CisjIyAgICAgRm9yIEEyX2FkZDogUmQzMj1hZGQoUnMzMixSdDMyKQorIyMgICAgIFdlIHByb2R1 Y2U6CisjIyAgICAgICAgICNpZm5kZWYgZkdFTl9UQ0dfQTJfYWRkCisjIyAgICAgICAgIERFRl9I RUxQRVJfMyhBMl9hZGQsIHMzMiwgZW52LCBzMzIsIHMzMikKKyMjICAgICAgICAgI2VuZGlmCisj IworZGVmIGdlbl9oZWxwZXJfcHJvdG90eXBlKGYsIHRhZywgdGFncmVncywgdGFnaW1tcyk6Cisg ICAgcmVncyA9IHRhZ3JlZ3NbdGFnXQorICAgIGltbXMgPSB0YWdpbW1zW3RhZ10KKworICAgIGYu d3JpdGUoJyNpZm5kZWYgZkdFTl9UQ0dfJXNcbicgJSB0YWcpCisgICAgbnVtcmVzdWx0cyA9IDAK KyAgICBudW1zY2FsYXJyZXN1bHRzID0gMAorICAgIG51bXNjYWxhcnJlYWR3cml0ZSA9IDAKKyAg ICBmb3IgcmVndHlwZSxyZWdpZCx0b3NzLG51bXJlZ3MgaW4gcmVnczoKKyAgICAgICAgaWYgKGlz X3dyaXR0ZW4ocmVnaWQpKToKKyAgICAgICAgICAgIG51bXJlc3VsdHMgKz0gMQorICAgICAgICAg ICAgaWYgKGlzX3NjYWxhcl9yZWcocmVndHlwZSkpOgorICAgICAgICAgICAgICAgIG51bXNjYWxh cnJlc3VsdHMgKz0gMQorICAgICAgICBpZiAoaXNfcmVhZHdyaXRlKHJlZ2lkKSk6CisgICAgICAg ICAgICBpZiAoaXNfc2NhbGFyX3JlZyhyZWd0eXBlKSk6CisgICAgICAgICAgICAgICAgbnVtc2Nh bGFycmVhZHdyaXRlICs9IDEKKworICAgIGlmIChudW1zY2FsYXJyZXN1bHRzID4gMSk6CisgICAg ICAgICMjIFRoZSBoZWxwZXIgaXMgYm9ndXMgd2hlbiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHJl c3VsdAorICAgICAgICBmLndyaXRlKCdERUZfSEVMUEVSXzEoJXMsIHZvaWQsIGVudilcbicgJSB0 YWcpCisgICAgZWxzZToKKyAgICAgICAgIyMgRmlndXJlIG91dCBob3cgbWFueSBhcmd1bWVudHMg dGhlIGhlbHBlciB3aWxsIHRha2UKKyAgICAgICAgaWYgKG51bXNjYWxhcnJlc3VsdHMgPT0gMCk6 CisgICAgICAgICAgICBkZWZfaGVscGVyX3NpemUgPSBsZW4ocmVncykrbGVuKGltbXMpK251bXNj YWxhcnJlYWR3cml0ZSsxCisgICAgICAgICAgICBpZiBuZWVkX3BhcnQxKHRhZyk6IGRlZl9oZWxw ZXJfc2l6ZSArPSAxCisgICAgICAgICAgICBpZiBuZWVkX3Nsb3QodGFnKTogZGVmX2hlbHBlcl9z aXplICs9IDEKKyAgICAgICAgICAgIGYud3JpdGUoJ0RFRl9IRUxQRVJfJXMoJXMnICUgKGRlZl9o ZWxwZXJfc2l6ZSwgdGFnKSkKKyAgICAgICAgICAgICMjIFRoZSByZXR1cm4gdHlwZSBpcyB2b2lk CisgICAgICAgICAgICBmLndyaXRlKCcsIHZvaWQnICkKKyAgICAgICAgZWxzZToKKyAgICAgICAg ICAgIGRlZl9oZWxwZXJfc2l6ZSA9IGxlbihyZWdzKStsZW4oaW1tcykrbnVtc2NhbGFycmVhZHdy aXRlCisgICAgICAgICAgICBpZiBuZWVkX3BhcnQxKHRhZyk6IGRlZl9oZWxwZXJfc2l6ZSArPSAx CisgICAgICAgICAgICBpZiBuZWVkX3Nsb3QodGFnKTogZGVmX2hlbHBlcl9zaXplICs9IDEKKyAg ICAgICAgICAgIGYud3JpdGUoJ0RFRl9IRUxQRVJfJXMoJXMnICUgKGRlZl9oZWxwZXJfc2l6ZSwg dGFnKSkKKworICAgICAgICAjIyBHZW5lcmF0ZSB0aGUgcWVtdSBERUZfSEVMUEVSIHR5cGUgZm9y IGVhY2ggcmVzdWx0CisgICAgICAgIGk9MAorICAgICAgICBmb3IgcmVndHlwZSxyZWdpZCx0b3Nz LG51bXJlZ3MgaW4gcmVnczoKKyAgICAgICAgICAgIGlmIChpc193cml0dGVuKHJlZ2lkKSk6Cisg ICAgICAgICAgICAgICAgZ2VuX2RlZl9oZWxwZXJfb3BuKGYsIHRhZywgcmVndHlwZSwgcmVnaWQs IHRvc3MsIG51bXJlZ3MsIGkpCisgICAgICAgICAgICAgICAgaSArPSAxCisKKyAgICAgICAgIyMg UHV0IHRoZSBlbnYgYmV0d2VlbiB0aGUgb3V0cHV0cyBhbmQgaW5wdXRzCisgICAgICAgIGYud3Jp dGUoJywgZW52JyApCisgICAgICAgIGkgKz0gMQorCisgICAgICAgICMjIEdlbmVyYXRlIHRoZSBx ZW11IHR5cGUgZm9yIGVhY2ggaW5wdXQgb3BlcmFuZCAocmVncyBhbmQgaW1tZWRpYXRlcykKKyAg ICAgICAgZm9yIHJlZ3R5cGUscmVnaWQsdG9zcyxudW1yZWdzIGluIHJlZ3M6CisgICAgICAgICAg ICBpZiAoaXNfcmVhZChyZWdpZCkpOgorICAgICAgICAgICAgICAgIGdlbl9kZWZfaGVscGVyX29w bihmLCB0YWcsIHJlZ3R5cGUsIHJlZ2lkLCB0b3NzLCBudW1yZWdzLCBpKQorICAgICAgICAgICAg ICAgIGkgKz0gMQorICAgICAgICBmb3IgaW1tbGV0dCxiaXRzLGltbXNoaWZ0IGluIGltbXM6Cisg ICAgICAgICAgICBmLndyaXRlKCIsIHMzMiIpCisKKyAgICAgICAgIyMgQWRkIHRoZSBhcmd1bWVu dHMgZm9yIHRoZSBpbnN0cnVjdGlvbiBzbG90IGFuZCBwYXJ0MSAoaWYgbmVlZGVkKQorICAgICAg ICBpZiBuZWVkX3Nsb3QodGFnKTogZi53cml0ZSgnLCBpMzInICkKKyAgICAgICAgaWYgbmVlZF9w YXJ0MSh0YWcpOiBmLndyaXRlKCcgLCBpMzInICkKKyAgICAgICAgZi53cml0ZSgnKVxuJykKKyAg ICBmLndyaXRlKCcjZW5kaWZcbicpCisKK2RlZiBtYWluKCk6CisgICAgcmVhZF9zZW1hbnRpY3Nf ZmlsZShzeXMuYXJndlsxXSkKKyAgICByZWFkX2F0dHJpYnNfZmlsZShzeXMuYXJndlsyXSkKKyAg ICBjYWxjdWxhdGVfYXR0cmlicygpCisgICAgdGFncmVncyA9IGdldF90YWdyZWdzKCkKKyAgICB0 YWdpbW1zID0gZ2V0X3RhZ2ltbXMoKQorCisgICAgZiA9IFN0cmluZ0lPKCkKKworICAgIGZvciB0 YWcgaW4gdGFnczoKKyAgICAgICAgIyMgU2tpcCB0aGUgcHJpdiBpbnN0cnVjdGlvbnMKKyAgICAg ICAgaWYgKCAiQV9QUklWIiBpbiBhdHRyaWJkaWN0W3RhZ10gKSA6CisgICAgICAgICAgICBjb250 aW51ZQorICAgICAgICAjIyBTa2lwIHRoZSBndWVzdCBpbnN0cnVjdGlvbnMKKyAgICAgICAgaWYg KCAiQV9HVUVTVCIgaW4gYXR0cmliZGljdFt0YWddICkgOgorICAgICAgICAgICAgY29udGludWUK KyAgICAgICAgIyMgU2tpcCB0aGUgZGlhZyBpbnN0cnVjdGlvbnMKKyAgICAgICAgaWYgKCB0YWcg PT0gIlk2X2RpYWciICkgOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgKCB0YWcg PT0gIlk2X2RpYWcwIiApIDoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmICggdGFn ID09ICJZNl9kaWFnMSIgKSA6CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIGdlbl9o ZWxwZXJfcHJvdG90eXBlKGYsIHRhZywgdGFncmVncywgdGFnaW1tcykKKworICAgIHJlYWxmID0g b3BlbignaGVscGVyX3Byb3Rvc19nZW5lcmF0ZWQuaCcsJ3cnKQorICAgIHJlYWxmLndyaXRlKGYu Z2V0dmFsdWUoKSkKKyAgICByZWFsZi5jbG9zZSgpCisgICAgZi5jbG9zZSgpCisKK2lmIF9fbmFt ZV9fID09ICJfX21haW5fXyI6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS90YXJnZXQvaGV4YWdv bi9nZW5fb3BfYXR0cmlicy5weSBiL3RhcmdldC9oZXhhZ29uL2dlbl9vcF9hdHRyaWJzLnB5Cm5l dyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY2MzI5NmUKLS0tIC9kZXYvbnVsbAor KysgYi90YXJnZXQvaGV4YWdvbi9nZW5fb3BfYXR0cmlicy5weQpAQCAtMCwwICsxLDQ2IEBACisj IS91c3IvYmluL2VudiBweXRob24zCisKKyMjCisjIyAgQ29weXJpZ2h0KGMpIDIwMTktMjAyMCBR dWFsY29tbSBJbm5vdmF0aW9uIENlbnRlciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIyMK KyMjICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQorIyMgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIyAgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMjICAoYXQg eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIyMKKyMjICBUaGlzIHByb2dyYW0gaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMjICBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgorIyMgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUKKyMjICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgorIyMKKyMjICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyMgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBu b3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisjIworCitpbXBvcnQgc3lz CitpbXBvcnQgcmUKK2ltcG9ydCBzdHJpbmcKK2Zyb20gaW8gaW1wb3J0IFN0cmluZ0lPCisKK2Zy b20gaGV4X2NvbW1vbiBpbXBvcnQgKgorCitkZWYgbWFpbigpOgorICAgIHJlYWRfc2VtYW50aWNz X2ZpbGUoc3lzLmFyZ3ZbMV0pCisgICAgcmVhZF9hdHRyaWJzX2ZpbGUoc3lzLmFyZ3ZbMl0pCisg ICAgY2FsY3VsYXRlX2F0dHJpYnMoKQorCisgICAgIyMKKyAgICAjIyBHZW5lcmF0ZSB0aGUgb3Bf YXR0cmlic19nZW5lcmF0ZWQuaCBmaWxlCisgICAgIyMgICAgIExpc3RzIGFsbCB0aGUgYXR0cmli dXRlcyBhc3NvY2lhdGVkIHdpdGggZWFjaCBpbnN0cnVjdGlvbgorICAgICMjCisgICAgZiA9IFN0 cmluZ0lPKCkKKyAgICBmb3IgdGFnIGluIHRhZ3M6CisgICAgICAgIGYud3JpdGUoJ09QX0FUVFJJ QiglcyxBVFRSSUJTKCVzKSlcbicgJSBcCisgICAgICAgICAgICAodGFnLCAnLCcuam9pbihzb3J0 ZWQoYXR0cmliZGljdFt0YWddKSkpKQorICAgIHJlYWxmID0gb3Blbignb3BfYXR0cmlic19nZW5l cmF0ZWQuaCcsICd3dCcpCisgICAgcmVhbGYud3JpdGUoZi5nZXR2YWx1ZSgpKQorICAgIHJlYWxm LmNsb3NlKCkKKyAgICBmLmNsb3NlKCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAg ICBtYWluKCkKZGlmZiAtLWdpdCBhL3RhcmdldC9oZXhhZ29uL2dlbl9vcF9yZWdzLnB5IGIvdGFy Z2V0L2hleGFnb24vZ2VuX29wX3JlZ3MucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAw MDAwMC4uYWJiNzQ0MQotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9oZXhhZ29uL2dlbl9vcF9y ZWdzLnB5CkBAIC0wLDAgKzEsMTE5IEBACisjIS91c3IvYmluL2VudiBweXRob24zCisKKyMjCisj IyAgQ29weXJpZ2h0KGMpIDIwMTktMjAyMCBRdWFsY29tbSBJbm5vdmF0aW9uIENlbnRlciwgSW5j LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIyMKKyMjICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyMgIGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVk IGJ5CisjIyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBv ZiB0aGUgTGljZW5zZSwgb3IKKyMjICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u LgorIyMKKyMjICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKKyMjICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyMgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMjICBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIyMKKyMjICBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyMgIGFs b25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xp Y2Vuc2VzLz4uCisjIworCitpbXBvcnQgc3lzCitpbXBvcnQgcmUKK2ltcG9ydCBzdHJpbmcKK2Zy b20gaW8gaW1wb3J0IFN0cmluZ0lPCisKK2Zyb20gaGV4X2NvbW1vbiBpbXBvcnQgKgorCisjIwor IyMgR2VuZXJhdGUgdGhlIG9wX3JlZ3NfZ2VuZXJhdGVkLmggZmlsZQorIyMgICAgIExpc3RzIHRo ZSByZWdpc3RlciBhbmQgaW1tZWRpYXRlIG9wZXJhbmRzIGZvciBlYWNoIGluc3RydWN0aW9uCisj IworZGVmIGNhbGN1bGF0ZV9yZWdpZF9yZWcodGFnKToKKyAgICBkZWYgbGV0dGVyX2luYyh4KTog cmV0dXJuIGNocihvcmQoeCkrMSkKKyAgICBvcmRlcmVkX2ltcGxyZWdzID0gWyAnU1AnLCdGUCcs J0xSJyBdCisgICAgc3JjZHN0X2xldHQgPSAnWCcKKyAgICBzcmNfbGV0dCA9ICdTJworICAgIGRz dF9sZXR0ID0gJ0QnCisgICAgcmV0c3RyID0gIiIKKyAgICBtYXBkaWN0ID0ge30KKyAgICBmb3Ig cmVnIGluIG9yZGVyZWRfaW1wbHJlZ3M6CisgICAgICAgIHJlZ19yZCA9IDAKKyAgICAgICAgcmVn X3dyID0gMAorICAgICAgICBpZiAoJ0FfSU1QTElDSVRfV1JJVEVTXycrcmVnKSBpbiBhdHRyaWJk aWN0W3RhZ106IHJlZ193ciA9IDEKKyAgICAgICAgaWYgcmVnX3JkIGFuZCByZWdfd3I6CisgICAg ICAgICAgICByZXRzdHIgKz0gc3JjZHN0X2xldHQKKyAgICAgICAgICAgIG1hcGRpY3Rbc3JjZHN0 X2xldHRdID0gcmVnCisgICAgICAgICAgICBzcmNkc3RfbGV0dCA9IGxldHRlcl9pbmMoc3JjZHN0 X2xldHQpCisgICAgICAgIGVsaWYgcmVnX3JkOgorICAgICAgICAgICAgcmV0c3RyICs9IHNyY19s ZXR0CisgICAgICAgICAgICBtYXBkaWN0W3NyY19sZXR0XSA9IHJlZworICAgICAgICAgICAgc3Jj X2xldHQgPSBsZXR0ZXJfaW5jKHNyY19sZXR0KQorICAgICAgICBlbGlmIHJlZ193cjoKKyAgICAg ICAgICAgIHJldHN0ciArPSBkc3RfbGV0dAorICAgICAgICAgICAgbWFwZGljdFtkc3RfbGV0dF0g PSByZWcKKyAgICAgICAgICAgIGRzdF9sZXR0ID0gbGV0dGVyX2luYyhkc3RfbGV0dCkKKyAgICBy ZXR1cm4gcmV0c3RyLG1hcGRpY3QKKworZGVmIGNhbGN1bGF0ZV9yZWdpZF9sZXR0ZXJzKHRhZyk6 CisgICAgcmV0c3RyLG1hcGRpY3QgPSBjYWxjdWxhdGVfcmVnaWRfcmVnKHRhZykKKyAgICByZXR1 cm4gcmV0c3RyCisKK2RlZiBzdHJpcF9yZWdfcHJlZml4KHgpOgorICAgIHk9eC5yZXBsYWNlKCdV UkVHLicsJycpCisgICAgeT15LnJlcGxhY2UoJ01SRUcuJywnJykKKyAgICByZXR1cm4geS5yZXBs YWNlKCdHUkVHLicsJycpCisKK2RlZiBtYWluKCk6CisgICAgcmVhZF9zZW1hbnRpY3NfZmlsZShz eXMuYXJndlsxXSkKKyAgICByZWFkX2F0dHJpYnNfZmlsZShzeXMuYXJndlsyXSkKKyAgICB0YWdy ZWdzID0gZ2V0X3RhZ3JlZ3MoKQorICAgIHRhZ2ltbXMgPSBnZXRfdGFnaW1tcygpCisKKyAgICBm ID0gU3RyaW5nSU8oKQorCisgICAgZm9yIHRhZyBpbiB0YWdzOgorICAgICAgICByZWdzID0gdGFn cmVnc1t0YWddCisgICAgICAgIHJyZWdzID0gW10KKyAgICAgICAgd3JlZ3MgPSBbXQorICAgICAg ICByZWdpZHMgPSAiIgorICAgICAgICBmb3IgcmVndHlwZSxyZWdpZCx0b3NzLG51bXJlZ3MgaW4g cmVnczoKKyAgICAgICAgICAgIGlmIGlzX3JlYWQocmVnaWQpOgorICAgICAgICAgICAgICAgIGlm IHJlZ2lkWzBdIG5vdCBpbiByZWdpZHM6IHJlZ2lkcyArPSByZWdpZFswXQorICAgICAgICAgICAg ICAgIHJyZWdzLmFwcGVuZChyZWd0eXBlK3JlZ2lkK251bXJlZ3MpCisgICAgICAgICAgICBpZiBp c193cml0dGVuKHJlZ2lkKToKKyAgICAgICAgICAgICAgICB3cmVncy5hcHBlbmQocmVndHlwZSty ZWdpZCtudW1yZWdzKQorICAgICAgICAgICAgICAgIGlmIHJlZ2lkWzBdIG5vdCBpbiByZWdpZHM6 IHJlZ2lkcyArPSByZWdpZFswXQorICAgICAgICBmb3IgYXR0cmliIGluIGF0dHJpYmRpY3RbdGFn XToKKyAgICAgICAgICAgIGlmIGF0dHJpYmluZm9bYXR0cmliXVsncnJlZyddOgorICAgICAgICAg ICAgICAgIHJyZWdzLmFwcGVuZChzdHJpcF9yZWdfcHJlZml4KGF0dHJpYmluZm9bYXR0cmliXVsn cnJlZyddKSkKKyAgICAgICAgICAgIGlmIGF0dHJpYmluZm9bYXR0cmliXVsnd3JlZyddOgorICAg ICAgICAgICAgICAgIHdyZWdzLmFwcGVuZChzdHJpcF9yZWdfcHJlZml4KGF0dHJpYmluZm9bYXR0 cmliXVsnd3JlZyddKSkKKyAgICAgICAgcmVnaWRzICs9IGNhbGN1bGF0ZV9yZWdpZF9sZXR0ZXJz KHRhZykKKyAgICAgICAgZi53cml0ZSgnUkVHSU5GTyglcywiJXMiLFx0LypSRDoqL1x0IiVzIixc dC8qV1I6Ki9cdCIlcyIpXG4nICUgXAorICAgICAgICAgICAgKHRhZyxyZWdpZHMsIiwiLmpvaW4o cnJlZ3MpLCIsIi5qb2luKHdyZWdzKSkpCisKKyAgICBmb3IgdGFnIGluIHRhZ3M6CisgICAgICAg IGltbXMgPSB0YWdpbW1zW3RhZ10KKyAgICAgICAgZi53cml0ZSggJ0lNTUlORk8oJXMnICUgdGFn KQorICAgICAgICBpZiBub3QgaW1tczoKKyAgICAgICAgICAgIGYud3JpdGUoJycnLCd1JywwLDAs J1UnLDAsMCcnJykKKyAgICAgICAgZm9yIHNpZ24sc2l6ZSxzaGFtdCBpbiBpbW1zOgorICAgICAg ICAgICAgaWYgc2lnbiA9PSAncic6IHNpZ24gPSAncycKKyAgICAgICAgICAgIGlmIG5vdCBzaGFt dDoKKyAgICAgICAgICAgICAgICBzaGFtdCA9ICIwIgorICAgICAgICAgICAgZi53cml0ZSgnJycs JyVzJywlcywlcycnJyAlIChzaWduLHNpemUsc2hhbXQpKQorICAgICAgICBpZiBsZW4oaW1tcykg PT0gMToKKyAgICAgICAgICAgIGlmIHNpZ24uaXN1cHBlcigpOgorICAgICAgICAgICAgICAgIG15 dSA9ICd1JworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBteXUgPSAnVScKKyAg ICAgICAgICAgIGYud3JpdGUoJycnLCclcycsMCwwJycnICUgbXl1KQorICAgICAgICBmLndyaXRl KCcpXG4nKQorCisgICAgcmVhbGYgPSBvcGVuKCdvcF9yZWdzX2dlbmVyYXRlZC5oJywndycpCisg ICAgcmVhbGYud3JpdGUoZi5nZXR2YWx1ZSgpKQorICAgIHJlYWxmLmNsb3NlKCkKKyAgICBmLmNs b3NlKCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBtYWluKCkKZGlmZiAtLWdp dCBhL3RhcmdldC9oZXhhZ29uL2dlbl9vcGNvZGVzX2RlZi5weSBiL3RhcmdldC9oZXhhZ29uL2dl bl9vcGNvZGVzX2RlZi5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jMzRj MmIxCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2hleGFnb24vZ2VuX29wY29kZXNfZGVmLnB5 CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKKworIyMKKyMjICBDb3B5 cmlnaHQoYykgMjAxOS0yMDIwIFF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMuIEFsbCBS aWdodHMgUmVzZXJ2ZWQuCisjIworIyMgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIyAgaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMj ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBM aWNlbnNlLCBvcgorIyMgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjIwor IyMgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLAorIyMgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyMgIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjIworIyMgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIyAgYWxvbmcgd2l0 aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMv Pi4KKyMjCisKK2ltcG9ydCBzeXMKK2ltcG9ydCByZQoraW1wb3J0IHN0cmluZworZnJvbSBpbyBp bXBvcnQgU3RyaW5nSU8KKworZnJvbSBoZXhfY29tbW9uIGltcG9ydCAqCisKK2RlZiBtYWluKCk6 CisgICAgcmVhZF9zZW1hbnRpY3NfZmlsZShzeXMuYXJndlsxXSkKKworICAgICMjCisgICAgIyMg R2VuZXJhdGUgdGhlIG9wY29kZXNfZGVmX2dlbmVyYXRlZC5oIGZpbGUKKyAgICAjIyAgICAgR2l2 ZXMgYSBsaXN0IG9mIGFsbCB0aGUgb3Bjb2RlcworICAgICMjCisgICAgZiA9IFN0cmluZ0lPKCkK KyAgICBmb3IgdGFnIGluIHRhZ3M6CisgICAgICAgIGYud3JpdGUgKCAiT1BDT0RFKCVzKSxcbiIg JSAodGFnKSApCisgICAgcmVhbGYgPSBvcGVuKCdvcGNvZGVzX2RlZl9nZW5lcmF0ZWQuaCcsICd3 dCcpCisgICAgcmVhbGYud3JpdGUoZi5nZXR2YWx1ZSgpKQorICAgIHJlYWxmLmNsb3NlKCkKKyAg ICBmLmNsb3NlKCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBtYWluKCkKZGlm ZiAtLWdpdCBhL3RhcmdldC9oZXhhZ29uL2dlbl9wcmludGluc24ucHkgYi90YXJnZXQvaGV4YWdv bi9nZW5fcHJpbnRpbnNuLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZm Yjk0MjQKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvaGV4YWdvbi9nZW5fcHJpbnRpbnNuLnB5 CkBAIC0wLDAgKzEsMTgyIEBACisjIS91c3IvYmluL2VudiBweXRob24zCisKKyMjCisjIyAgQ29w eXJpZ2h0KGMpIDIwMTktMjAyMCBRdWFsY29tbSBJbm5vdmF0aW9uIENlbnRlciwgSW5jLiBBbGwg UmlnaHRzIFJlc2VydmVkLgorIyMKKyMjICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyMgIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cisj IyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUg TGljZW5zZSwgb3IKKyMjICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIyMK KyMjICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKKyMjICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyMgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMjICBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIyMKKyMjICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2 ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyMgIGFsb25nIHdp dGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2Vz Lz4uCisjIworCitpbXBvcnQgc3lzCitpbXBvcnQgcmUKK2ltcG9ydCBzdHJpbmcKK2Zyb20gaW8g aW1wb3J0IFN0cmluZ0lPCisKK2Zyb20gaGV4X2NvbW1vbiBpbXBvcnQgKgorCisjIworIyMgR2Vu ZXJhdGUgdGhlIHByaW50aW5zbl9nZW5lcmF0ZWQuaCBmaWxlCisjIyAgICAgRGF0YSBmb3IgcHJp bnRpbmcgZWFjaCBpbnN0cnVjdGlvbiAoZm9ybWF0IHN0cmluZyArIG9wZXJhbmRzKQorIyMKK2Rl ZiByZWdwcmludGVyKG0pOgorICAgIHN0ciA9IG0uZ3JvdXAoMSkKKyAgICBzdHIgKz0gIjoiLmpv aW4oWyIlZCJdKmxlbihtLmdyb3VwKDIpKSkKKyAgICBzdHIgKz0gbS5ncm91cCgzKQorICAgIGlm ICgnUycgaW4gbS5ncm91cCgxKSkgYW5kIChsZW4obS5ncm91cCgyKSkgPT0gMSk6CisgICAgICAg IHN0ciArPSAiLyVzIgorICAgIGVsaWYgKCdDJyBpbiBtLmdyb3VwKDEpKSBhbmQgKGxlbihtLmdy b3VwKDIpKSA9PSAxKToKKyAgICAgICAgc3RyICs9ICIvJXMiCisgICAgcmV0dXJuIHN0cgorCitk ZWYgc3BhY2lmeShzKToKKyAgICAjIFJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IG1hdGNoZXMgYW55 IG9wZXJhdG9yIHRoYXQgY29udGFpbnMgJz0nIGNoYXJhY3RlcjoKKyAgICBvcHN3aXRoZXF1YWxf cmUgPSAnWy0rXiZ8ITw+PV0/PScKKyAgICAjIFJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IG1hdGNo ZXMgYW55IGFzc2lnbm1lbnQgb3BlcmF0b3IuCisgICAgYXNzaWdubWVudF9yZSA9ICdbLSteJnxd Pz0nCisKKyAgICAjIE91dCBvZiB0aGUgb3BlcmF0b3JzIHRoYXQgY29udGFpbiB0aGUgPSBzaWdu LCBpZiB0aGUgb3BlcmF0b3IgaXMgYWxzbyBhbgorICAgICMgYXNzaWdubWVudCwgc3BhY2VzIHdp bGwgYmUgYWRkZWQgYXJvdW5kIGl0LCB1bmxlc3MgaXQncyBlbmNsb3NlZCB3aXRoaW4KKyAgICAj IHBhcmVudGhlc2VzLCBvciBzcGFjZXMgYXJlIGFscmVhZHkgcHJlc2VudC4KKworICAgIGVxdWFs cyA9IHJlLmNvbXBpbGUob3Bzd2l0aGVxdWFsX3JlKQorICAgIGFzc2lnbiA9IHJlLmNvbXBpbGUo YXNzaWdubWVudF9yZSkKKworICAgIHNsZW4gPSBsZW4ocykKKyAgICBwYXJlbl9jb3VudCA9IHt9 CisgICAgaSA9IDAKKyAgICBwYyA9IDAKKyAgICB3aGlsZSBpIDwgc2xlbjoKKyAgICAgICAgYyA9 IHNbaV0KKyAgICAgICAgaWYgYyA9PSAnKCc6CisgICAgICAgICAgICBwYyArPSAxCisgICAgICAg IGVsaWYgYyA9PSAnKSc6CisgICAgICAgICAgICBwYyAtPSAxCisgICAgICAgIHBhcmVuX2NvdW50 W2ldID0gcGMKKyAgICAgICAgaSArPSAxCisKKyAgICAjIEl0ZXJhdGUgb3ZlciBhbGwgb3BlcmF0 b3JzIHRoYXQgY29udGFpbiB0aGUgZXF1YWwgc2lnbi4gSWYgYW55CisgICAgIyBtYXRjaCBpcyBh bHNvIGFuIGFzc2lnbm1lbnQgb3BlcmF0b3IsIGFkZCBzcGFjZXMgYXJvdW5kIGl0IGlmCisgICAg IyB0aGUgcGFyZW50aGVzaXMgY291bnQgaXMgMC4KKyAgICBwb3MgPSAwCisgICAgb3V0ID0gW10K KyAgICBmb3IgbSBpbiBlcXVhbHMuZmluZGl0ZXIocyk6CisgICAgICAgIG1zID0gbS5zdGFydCgp CisgICAgICAgIG1lID0gbS5lbmQoKQorICAgICAgICAjIHQgaXMgdGhlIHN0cmluZyB0aGF0IG1h dGNoZWQgb3Bzd2l0aGVxdWFsX3JlLgorICAgICAgICB0ID0gbS5zdHJpbmdbbXM6bWVdCisgICAg ICAgIG91dCArPSBzW3Bvczptc10KKyAgICAgICAgcG9zID0gbWUKKyAgICAgICAgaWYgcGFyZW5f Y291bnRbbXNdID09IDA6CisgICAgICAgICAgICAjIENoZWNrIGlmIHRoZSBlbnRpcmUgc3RyaW5n IHQgaXMgYW4gYXNzaWdubWVudC4KKyAgICAgICAgICAgIGFtID0gYXNzaWduLm1hdGNoKHQpCisg ICAgICAgICAgICBpZiBhbSBhbmQgbGVuKGFtLmdyb3VwKDApKSA9PSBtZS1tczoKKyAgICAgICAg ICAgICAgICAjIERvbid0IGFkZCBzcGFjZXMgaWYgdGhleSBhcmUgYWxyZWFkeSB0aGVyZS4KKyAg ICAgICAgICAgICAgICBpZiBtcyA+IDAgYW5kIHNbbXMtMV0gIT0gJyAnOgorICAgICAgICAgICAg ICAgICAgICBvdXQuYXBwZW5kKCcgJykKKyAgICAgICAgICAgICAgICBvdXQgKz0gdAorICAgICAg ICAgICAgICAgIGlmIG1lIDwgc2xlbiBhbmQgc1ttZV0gIT0gJyAnOgorICAgICAgICAgICAgICAg ICAgICBvdXQuYXBwZW5kKCcgJykKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAj IElmIHRoaXMgaXMgbm90IGFuIGFzc2lnbm1lbnQsIGp1c3QgYXBwZW5kIGl0IHRvIHRoZSBvdXRw dXQKKyAgICAgICAgIyBzdHJpbmcuCisgICAgICAgIG91dCArPSB0CisKKyAgICAjIEFwcGVuZCB0 aGUgcmVtYWluaW5nIHBhcnQgb2YgdGhlIHN0cmluZy4KKyAgICBvdXQgKz0gc1twb3M6bGVuKHMp XQorICAgIHJldHVybiAnJy5qb2luKG91dCkKKworZGVmIG1haW4oKToKKyAgICByZWFkX3NlbWFu dGljc19maWxlKHN5cy5hcmd2WzFdKQorICAgIHJlYWRfYXR0cmlic19maWxlKHN5cy5hcmd2WzJd KQorCisgICAgaW1tZXh0X2Nhc2VyZSA9IHJlLmNvbXBpbGUocidJTU1FWFRcKChbQS1aYS16XSkn KQorCisgICAgZiA9IFN0cmluZ0lPKCkKKworICAgIGZvciB0YWcgaW4gdGFnczoKKyAgICAgICAg aWYgbm90IGJlaGRpY3RbdGFnXTogY29udGludWUKKyAgICAgICAgZXh0ZW5kYWJsZV91cHBlcl9p bW0gPSBGYWxzZQorICAgICAgICBleHRlbmRhYmxlX2xvd2VyX2ltbSA9IEZhbHNlCisgICAgICAg IG0gPSBpbW1leHRfY2FzZXJlLnNlYXJjaChzZW1kaWN0W3RhZ10pCisgICAgICAgIGlmIG06Cisg ICAgICAgICAgICBpZiBtLmdyb3VwKDEpLmlzdXBwZXIoKToKKyAgICAgICAgICAgICAgICBleHRl bmRhYmxlX3VwcGVyX2ltbSA9IFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAg ICAgZXh0ZW5kYWJsZV9sb3dlcl9pbW0gPSBUcnVlCisgICAgICAgIGJlaCA9IGJlaGRpY3RbdGFn XQorICAgICAgICBiZWggPSByZWdyZS5zdWIocmVncHJpbnRlcixiZWgpCisgICAgICAgIGJlaCA9 IGFic2ltbXJlLnN1YihyIiMlczB4JXgiLGJlaCkKKyAgICAgICAgYmVoID0gcmVsaW1tcmUuc3Vi KHIiUEMrJXMlZCIsYmVoKQorICAgICAgICBiZWggPSBzcGFjaWZ5KGJlaCkKKyAgICAgICAgIyBQ cmludCBvdXQgYSBsaXRlcmFsICIlcyIgYXQgdGhlIGVuZCwgdXNlZCB0byBtYXRjaCBlbXB0eSBz dHJpbmcKKyAgICAgICAgIyBzbyBDIHdvbid0IGNvbXBsYWluIGF0IHVzCisgICAgICAgIGlmICgi QV9WRUNYIiBpbiBhdHRyaWJkaWN0W3RhZ10pOiBtYWNuYW1lID0gIkRFRl9WRUNYX1BSSU5USU5G TyIKKyAgICAgICAgZWxzZTogbWFjbmFtZSA9ICJERUZfUFJJTlRJTkZPIgorICAgICAgICBmLndy aXRlKCclcyglcywiJXMlJXMiJyAlIChtYWNuYW1lLHRhZyxiZWgpKQorICAgICAgICByZWdzX29y X2ltbXMgPSByZWdfb3JfaW1tcmUuZmluZGFsbChiZWhkaWN0W3RhZ10pCisgICAgICAgIHJpID0g MAorICAgICAgICBzZWVucmVncyA9IHt9CisgICAgICAgIGZvciBhbGxyZWdzLGEsYixjLGQsYWxs aW1tLGltbWxldHQsYml0cyxpbW1zaGlmdCBpbiByZWdzX29yX2ltbXM6CisgICAgICAgICAgICBp ZiBhOgorICAgICAgICAgICAgICAgICNyZWdpc3RlcgorICAgICAgICAgICAgICAgIGlmIGIgaW4g c2VlbnJlZ3M6CisgICAgICAgICAgICAgICAgICAgIHJlZ25vID0gc2VlbnJlZ3NbYl0KKyAgICAg ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZWdubyA9IHJpCisgICAgICAg ICAgICAgICAgaWYgbGVuKGIpID09IDE6CisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoJyxS RUdOTyglZCknICUgcmVnbm8pCisgICAgICAgICAgICAgICAgICAgIGlmICdTJyBpbiBhOgorICAg ICAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgnLHNyZWcyc3RyKFJFR05PKCVkKSknICUgcmVn bm8pCisgICAgICAgICAgICAgICAgICAgIGVsaWYgJ0MnIGluIGE6CisgICAgICAgICAgICAgICAg ICAgICAgICBmLndyaXRlKCcsY3JlZzJzdHIoUkVHTk8oJWQpKScgJSByZWdubykKKyAgICAgICAg ICAgICAgICBlbGlmIGxlbihiKSA9PSAyOgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCcs UkVHTk8oJWQpKzEsUkVHTk8oJWQpJyAlIChyZWdubyxyZWdubykpCisgICAgICAgICAgICAgICAg ZWxpZiBsZW4oYikgPT0gNDoKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgnLFJFR05PKCVk KV4zLFJFR05PKCVkKV4yLFJFR05PKCVkKV4xLFJFR05PKCVkKScgJSBcCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKHJlZ25vLHJlZ25vLHJlZ25vLHJlZ25vKSkKKyAgICAgICAgICAgICAg ICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBwcmludCgiUHV0IHNvbWUgc3R1ZmYgdG8gaGFu ZGxlIHF1YWRzIGhlcmUiKQorICAgICAgICAgICAgICAgIGlmIGIgbm90IGluIHNlZW5yZWdzOgor ICAgICAgICAgICAgICAgICAgICBzZWVucmVnc1tiXSA9IHJpCisgICAgICAgICAgICAgICAgICAg IHJpICs9IDEKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgI2ltbWVkaWF0ZQor ICAgICAgICAgICAgICAgIGlmIChpbW1sZXR0LmlzdXBwZXIoKSk6CisgICAgICAgICAgICAgICAg ICAgIGlmIGV4dGVuZGFibGVfdXBwZXJfaW1tOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYg aW1tbGV0dCBpbiAnclInOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoJyxp bnNuLT5leHRlbnNpb25fdmFsaWQ/IiMjIjoiIicpCisgICAgICAgICAgICAgICAgICAgICAgICBl bHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoJyxpbnNuLT5leHRlbnNp b25fdmFsaWQ/IiMiOiIiJykKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAg ICAgICAgICAgICAgIGYud3JpdGUoJywiIicpCisgICAgICAgICAgICAgICAgICAgIGlpID0gMQor ICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGlmIGV4dGVuZGFibGVf bG93ZXJfaW1tOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgaW1tbGV0dCBpbiAnclInOgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoJyxpbnNuLT5leHRlbnNpb25fdmFs aWQ/IiMjIjoiIicpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGYud3JpdGUoJyxpbnNuLT5leHRlbnNpb25fdmFsaWQ/IiMiOiIiJykK KyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGYud3Jp dGUoJywiIicpCisgICAgICAgICAgICAgICAgICAgIGlpID0gMAorICAgICAgICAgICAgICAgIGYu d3JpdGUoJyxJTU1OTyglZCknICUgaWkpCisgICAgICAgICMgYXBwZW5kIGVtcHR5IHN0cmluZyBz byB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgbW9yZSBhcmcKKyAgICAgICAgZi53cml0ZSgnLCIiKVxu JykKKworICAgIHJlYWxmID0gb3BlbigncHJpbnRpbnNuX2dlbmVyYXRlZC5oJywndycpCisgICAg cmVhbGYud3JpdGUoZi5nZXR2YWx1ZSgpKQorICAgIHJlYWxmLmNsb3NlKCkKKyAgICBmLmNsb3Nl KCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBtYWluKCkKZGlmZiAtLWdpdCBh L3RhcmdldC9oZXhhZ29uL2dlbl9zaG9ydGNvZGUucHkgYi90YXJnZXQvaGV4YWdvbi9nZW5fc2hv cnRjb2RlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjMyNTU5NzIKLS0t IC9kZXYvbnVsbAorKysgYi90YXJnZXQvaGV4YWdvbi9nZW5fc2hvcnRjb2RlLnB5CkBAIC0wLDAg KzEsNzEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKKworIyMKKyMjICBDb3B5cmlnaHQoYykg MjAxOS0yMDIwIFF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMuIEFsbCBSaWdodHMgUmVz ZXJ2ZWQuCisjIworIyMgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMjICB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv cgorIyMgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjIworIyMgIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAorIyMgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCisjIyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyMgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCisjIworIyMgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIyAgYWxvbmcgd2l0aCB0aGlzIHBy b2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyMjCisK K2ltcG9ydCBzeXMKK2ltcG9ydCByZQoraW1wb3J0IHN0cmluZworZnJvbSBpbyBpbXBvcnQgU3Ry aW5nSU8KKworZnJvbSBoZXhfY29tbW9uIGltcG9ydCAqCisKK2RlZiBnZW5fc2hvcnRjb2RlKGYs IHRhZyk6CisgICAgZi53cml0ZSgnREVGX1NIT1JUQ09ERSglcywgJXMpXG4nICUgKHRhZyxzZW1k aWN0W3RhZ10pKQorCitkZWYgbWFpbigpOgorICAgIHJlYWRfc2VtYW50aWNzX2ZpbGUoc3lzLmFy Z3ZbMV0pCisgICAgcmVhZF9hdHRyaWJzX2ZpbGUoc3lzLmFyZ3ZbMl0pCisgICAgY2FsY3VsYXRl X2F0dHJpYnMoKQorICAgIHRhZ3JlZ3MgPSBnZXRfdGFncmVncygpCisgICAgdGFnaW1tcyA9IGdl dF90YWdpbW1zKCkKKworICAgICMjCisgICAgIyMgR2VuZXJhdGUgdGhlIHNob3J0Y29kZV9nZW5l cmF0ZWQuaCBmaWxlCisgICAgIyMKKyAgICBmID0gU3RyaW5nSU8oKQorCisgICAgZi53cml0ZSgi I2lmbmRlZiBERUZfU0hPUlRDT0RFXG4iKQorICAgIGYud3JpdGUoIiNkZWZpbmUgREVGX1NIT1JU Q09ERShUQUcsU0hPUlRDT0RFKSAgICAvKiBOb3RoaW5nICovXG4iKQorICAgIGYud3JpdGUoIiNl bmRpZlxuIikKKworICAgIGZvciB0YWcgaW4gdGFnczoKKyAgICAgICAgIyMgU2tpcCB0aGUgcHJp diBpbnN0cnVjdGlvbnMKKyAgICAgICAgaWYgKCAiQV9QUklWIiBpbiBhdHRyaWJkaWN0W3RhZ10g KSA6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAjIyBTa2lwIHRoZSBndWVzdCBpbnN0 cnVjdGlvbnMKKyAgICAgICAgaWYgKCAiQV9HVUVTVCIgaW4gYXR0cmliZGljdFt0YWddICkgOgor ICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgIyMgU2tpcCB0aGUgZGlhZyBpbnN0cnVjdGlv bnMKKyAgICAgICAgaWYgKCB0YWcgPT0gIlk2X2RpYWciICkgOgorICAgICAgICAgICAgY29udGlu dWUKKyAgICAgICAgaWYgKCB0YWcgPT0gIlk2X2RpYWcwIiApIDoKKyAgICAgICAgICAgIGNvbnRp bnVlCisgICAgICAgIGlmICggdGFnID09ICJZNl9kaWFnMSIgKSA6CisgICAgICAgICAgICBjb250 aW51ZQorCisgICAgICAgIGdlbl9zaG9ydGNvZGUoZiwgdGFnKQorCisgICAgZi53cml0ZSgiI3Vu ZGVmIERFRl9TSE9SVENPREVcbiIpCisKKyAgICByZWFsZiA9IG9wZW4oJ3Nob3J0Y29kZV9nZW5l cmF0ZWQuaCcsJ3cnKQorICAgIHJlYWxmLndyaXRlKGYuZ2V0dmFsdWUoKSkKKyAgICByZWFsZi5j bG9zZSgpCisgICAgZi5jbG9zZSgpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAg bWFpbigpCmRpZmYgLS1naXQgYS90YXJnZXQvaGV4YWdvbi9nZW5fdGNnX2Z1bmNzLnB5IGIvdGFy Z2V0L2hleGFnb24vZ2VuX3RjZ19mdW5jcy5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAw MDAwMDAwLi4xYjJlZjViCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2hleGFnb24vZ2VuX3Rj Z19mdW5jcy5weQpAQCAtMCwwICsxLDMwMSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMworCisj IworIyMgIENvcHlyaWdodChjKSAyMDE5LTIwMjAgUXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50ZXIs IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMjCisjIyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMjICBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieQorIyMgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9u IDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIyAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy c2lvbi4KKyMjCisjIyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMjICBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIyAgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMjCisjIyAgWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMj ICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9y Zy9saWNlbnNlcy8+LgorIyMKKworaW1wb3J0IHN5cworaW1wb3J0IHJlCitpbXBvcnQgc3RyaW5n Citmcm9tIGlvIGltcG9ydCBTdHJpbmdJTworCitmcm9tIGhleF9jb21tb24gaW1wb3J0ICoKKwor IyMKKyMjIEhlbHBlcnMgZm9yIGdlbl90Y2dfZnVuYworIyMKK2RlZiBnZW5fZGVjbF9lYV90Y2co Zik6CisgICAgZi53cml0ZSgiREVDTF9FQTtcbiIpCisKK2RlZiBnZW5fZnJlZV9lYV90Y2coZik6 CisgICAgZi53cml0ZSgiRlJFRV9FQTtcbiIpCisKK2RlZiBnZW5wdHJfZGVjbChmLHJlZ3R5cGUs cmVnaWQscmVnbm8pOgorICAgIHJlZ049IiVzJXNOIiAlIChyZWd0eXBlLHJlZ2lkKQorICAgIG1h Y3JvID0gIkRFQ0xfJXNSRUdfJXMiICUgKHJlZ3R5cGUsIHJlZ2lkKQorICAgIGYud3JpdGUoIiVz KCVzJXNWLCAlcywgJWQsIDApO1xuIiAlIFwKKyAgICAgICAgKG1hY3JvLCByZWd0eXBlLCByZWdp ZCwgcmVnTiwgcmVnbm8pKQorCitkZWYgZ2VucHRyX2RlY2xfbmV3KGYscmVndHlwZSxyZWdpZCxy ZWdubyk6CisgICAgcmVnTj0iJXMlc1giICUgKHJlZ3R5cGUscmVnaWQpCisgICAgbWFjcm8gPSAi REVDTF9ORVdfJXNSRUdfJXMiICUgKHJlZ3R5cGUsIHJlZ2lkKQorICAgIGYud3JpdGUoIiVzKCVz JXNOLCAlcywgJWQsIDApO1xuIiAlIFwKKyAgICAgICAgKG1hY3JvLCByZWd0eXBlLCByZWdpZCwg cmVnTiwgcmVnbm8pKQorCitkZWYgZ2VucHRyX2RlY2xfb3BuKGYsIHRhZywgcmVndHlwZSwgcmVn aWQsIHRvc3MsIG51bXJlZ3MsIGkpOgorICAgIGlmIChpc19wYWlyKHJlZ2lkKSk6CisgICAgICAg IGdlbnB0cl9kZWNsKGYscmVndHlwZSxyZWdpZCxpKQorICAgIGVsaWYgKGlzX3NpbmdsZShyZWdp ZCkpOgorICAgICAgICBpZiBpc19vbGRfdmFsKHJlZ3R5cGUsIHJlZ2lkLCB0YWcpOgorICAgICAg ICAgICAgZ2VucHRyX2RlY2woZixyZWd0eXBlLHJlZ2lkLGkpCisgICAgICAgIGVsaWYgaXNfbmV3 X3ZhbChyZWd0eXBlLCByZWdpZCwgdGFnKToKKyAgICAgICAgICAgIGdlbnB0cl9kZWNsX25ldyhm LHJlZ3R5cGUscmVnaWQsaSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50KCJCYWQg cmVnaXN0ZXIgcGFyc2U6ICIscmVndHlwZSxyZWdpZCx0b3NzLG51bXJlZ3MpCisgICAgZWxzZToK KyAgICAgICAgcHJpbnQoIkJhZCByZWdpc3RlciBwYXJzZTogIixyZWd0eXBlLHJlZ2lkLHRvc3Ms bnVtcmVncykKKworZGVmIGdlbnB0cl9kZWNsX2ltbShmLGltbWxldHQpOgorICAgIGlmIChpbW1s ZXR0LmlzdXBwZXIoKSk6CisgICAgICAgIGkgPSAxCisgICAgZWxzZToKKyAgICAgICAgaSA9IDAK KyAgICBmLndyaXRlKCJERUNMX0lNTSglcywlZCk7XG4iICUgKGltbV9uYW1lKGltbWxldHQpLGkp KQorCitkZWYgZ2VucHRyX2ZyZWUoZixyZWd0eXBlLHJlZ2lkLHJlZ25vKToKKyAgICBtYWNybyA9 ICJGUkVFXyVzUkVHXyVzIiAlIChyZWd0eXBlLCByZWdpZCkKKyAgICBmLndyaXRlKCIlcyglcyVz Vik7XG4iICUgKG1hY3JvLCByZWd0eXBlLCByZWdpZCkpCisKK2RlZiBnZW5wdHJfZnJlZV9uZXco ZixyZWd0eXBlLHJlZ2lkLHJlZ25vKToKKyAgICBtYWNybyA9ICJGUkVFX05FV18lc1JFR18lcyIg JSAocmVndHlwZSwgcmVnaWQpCisgICAgZi53cml0ZSgiJXMoJXMlc04pO1xuIiAlIChtYWNybywg cmVndHlwZSwgcmVnaWQpKQorCitkZWYgZ2VucHRyX2ZyZWVfb3BuKGYscmVndHlwZSxyZWdpZCxp LHRhZyk6CisgICAgaWYgKGlzX3BhaXIocmVnaWQpKToKKyAgICAgICAgZ2VucHRyX2ZyZWUoZixy ZWd0eXBlLHJlZ2lkLGkpCisgICAgZWxpZiAoaXNfc2luZ2xlKHJlZ2lkKSk6CisgICAgICAgIGlm IGlzX29sZF92YWwocmVndHlwZSwgcmVnaWQsIHRhZyk6CisgICAgICAgICAgICBnZW5wdHJfZnJl ZShmLHJlZ3R5cGUscmVnaWQsaSkKKyAgICAgICAgZWxpZiBpc19uZXdfdmFsKHJlZ3R5cGUsIHJl Z2lkLCB0YWcpOgorICAgICAgICAgICAgZ2VucHRyX2ZyZWVfbmV3KGYscmVndHlwZSxyZWdpZCxp KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQoIkJhZCByZWdpc3RlciBwYXJzZTog IixyZWd0eXBlLHJlZ2lkLHRvc3MsbnVtcmVncykKKyAgICBlbHNlOgorICAgICAgICBwcmludCgi QmFkIHJlZ2lzdGVyIHBhcnNlOiAiLHJlZ3R5cGUscmVnaWQsdG9zcyxudW1yZWdzKQorCitkZWYg Z2VucHRyX2ZyZWVfaW1tKGYsaW1tbGV0dCk6CisgICAgZi53cml0ZSgiRlJFRV9JTU0oJXMpO1xu IiAlIChpbW1fbmFtZShpbW1sZXR0KSkpCisKK2RlZiBnZW5wdHJfc3JjX3JlYWQoZixyZWd0eXBl LHJlZ2lkKToKKyAgICBtYWNybyA9ICJSRUFEXyVzUkVHXyVzIiAlIChyZWd0eXBlLCByZWdpZCkK KyAgICBmLndyaXRlKCIlcyglcyVzViwgJXMlc04pO1xuIiAlIFwKKyAgICAgICAgKG1hY3JvLHJl Z3R5cGUscmVnaWQscmVndHlwZSxyZWdpZCkpCisKK2RlZiBnZW5wdHJfc3JjX3JlYWRfbmV3KGYs cmVndHlwZSxyZWdpZCk6CisgICAgbWFjcm8gPSAiUkVBRF9ORVdfJXNSRUdfJXMiICUgKHJlZ3R5 cGUsIHJlZ2lkKQorICAgIGYud3JpdGUoIiVzKCVzJXNOLCAlcyVzWCk7XG4iICUgXAorICAgICAg ICAobWFjcm8scmVndHlwZSxyZWdpZCxyZWd0eXBlLHJlZ2lkKSkKKworZGVmIGdlbnB0cl9zcmNf cmVhZF9vcG4oZixyZWd0eXBlLHJlZ2lkLHRhZyk6CisgICAgaWYgKGlzX3BhaXIocmVnaWQpKToK KyAgICAgICAgZ2VucHRyX3NyY19yZWFkKGYscmVndHlwZSxyZWdpZCkKKyAgICBlbGlmIChpc19z aW5nbGUocmVnaWQpKToKKyAgICAgICAgaWYgaXNfb2xkX3ZhbChyZWd0eXBlLCByZWdpZCwgdGFn KToKKyAgICAgICAgICAgIGdlbnB0cl9zcmNfcmVhZChmLHJlZ3R5cGUscmVnaWQpCisgICAgICAg IGVsaWYgaXNfbmV3X3ZhbChyZWd0eXBlLCByZWdpZCwgdGFnKToKKyAgICAgICAgICAgIGdlbnB0 cl9zcmNfcmVhZF9uZXcoZixyZWd0eXBlLHJlZ2lkKQorICAgICAgICBlbHNlOgorICAgICAgICAg ICAgcHJpbnQoIkJhZCByZWdpc3RlciBwYXJzZTogIixyZWd0eXBlLHJlZ2lkLHRvc3MsbnVtcmVn cykKKyAgICBlbHNlOgorICAgICAgICBwcmludCgiQmFkIHJlZ2lzdGVyIHBhcnNlOiAiLHJlZ3R5 cGUscmVnaWQsdG9zcyxudW1yZWdzKQorCitkZWYgZ2VuX2hlbHBlcl9jYWxsX29wbihmLCB0YWcs IHJlZ3R5cGUsIHJlZ2lkLCB0b3NzLCBudW1yZWdzLCBpKToKKyAgICBpZiAoaSA+IDApOiBmLndy aXRlKCIsICIpCisgICAgaWYgKGlzX3BhaXIocmVnaWQpKToKKyAgICAgICAgZi53cml0ZSgiJXMl c1YiICUgKHJlZ3R5cGUscmVnaWQpKQorICAgIGVsaWYgKGlzX3NpbmdsZShyZWdpZCkpOgorICAg ICAgICBpZiBpc19vbGRfdmFsKHJlZ3R5cGUsIHJlZ2lkLCB0YWcpOgorICAgICAgICAgICAgZi53 cml0ZSgiJXMlc1YiICUgKHJlZ3R5cGUscmVnaWQpKQorICAgICAgICBlbGlmIGlzX25ld192YWwo cmVndHlwZSwgcmVnaWQsIHRhZyk6CisgICAgICAgICAgICBmLndyaXRlKCIlcyVzTiIgJSAocmVn dHlwZSxyZWdpZCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCgiQmFkIHJlZ2lz dGVyIHBhcnNlOiAiLHJlZ3R5cGUscmVnaWQsdG9zcyxudW1yZWdzKQorICAgIGVsc2U6CisgICAg ICAgIHByaW50KCJCYWQgcmVnaXN0ZXIgcGFyc2U6ICIscmVndHlwZSxyZWdpZCx0b3NzLG51bXJl Z3MpCisKK2RlZiBnZW5faGVscGVyX2RlY2xfaW1tKGYsaW1tbGV0dCk6CisgICAgZi53cml0ZSgi REVDTF9UQ0dfSU1NKHRjZ3ZfJXMsICVzKTtcbiIgJSBcCisgICAgICAgIChpbW1fbmFtZShpbW1s ZXR0KSwgaW1tX25hbWUoaW1tbGV0dCkpKQorCitkZWYgZ2VuX2hlbHBlcl9jYWxsX2ltbShmLGlt bWxldHQpOgorICAgIGYud3JpdGUoIiwgdGNndl8lcyIgJSBpbW1fbmFtZShpbW1sZXR0KSkKKwor ZGVmIGdlbl9oZWxwZXJfZnJlZV9pbW0oZixpbW1sZXR0KToKKyAgICBmLndyaXRlKCJGUkVFX1RD R19JTU0odGNndl8lcyk7XG4iICUgaW1tX25hbWUoaW1tbGV0dCkpCisKK2RlZiBnZW5wdHJfZHN0 X3dyaXRlKGYscmVndHlwZSwgcmVnaWQpOgorICAgIG1hY3JvID0gIldSSVRFXyVzUkVHXyVzIiAl IChyZWd0eXBlLCByZWdpZCkKKyAgICBmLndyaXRlKCIlcyglcyVzTiwgJXMlc1YpO1xuIiAlICht YWNybywgcmVndHlwZSwgcmVnaWQsIHJlZ3R5cGUsIHJlZ2lkKSkKKworZGVmIGdlbnB0cl9kc3Rf d3JpdGVfb3BuKGYscmVndHlwZSwgcmVnaWQsIHRhZyk6CisgICAgaWYgKGlzX3BhaXIocmVnaWQp KToKKyAgICAgICAgZ2VucHRyX2RzdF93cml0ZShmLCByZWd0eXBlLCByZWdpZCkKKyAgICBlbGlm IChpc19zaW5nbGUocmVnaWQpKToKKyAgICAgICAgZ2VucHRyX2RzdF93cml0ZShmLCByZWd0eXBl LCByZWdpZCkKKyAgICBlbHNlOgorICAgICAgICBwcmludCgiQmFkIHJlZ2lzdGVyIHBhcnNlOiAi LHJlZ3R5cGUscmVnaWQsdG9zcyxudW1yZWdzKQorCisjIworIyMgR2VuZXJhdGUgdGhlIFRDRyBj b2RlIHRvIGNhbGwgdGhlIGhlbHBlcgorIyMgICAgIEZvciBBMl9hZGQ6IFJkMzI9YWRkKFJzMzIs UnQzMiksIHsgUmRWPVJzVitSdFY7fQorIyMgICAgIFdlIHByb2R1Y2U6CisjIyAgICAgICB7Cisj IyAgICAgICAvKiBBMl9hZGQgKi8KKyMjICAgICAgIERFQ0xfUlJFR19kKFJkViwgUmROLCAwLCAw KTsKKyMjICAgICAgIERFQ0xfUlJFR19zKFJzViwgUnNOLCAxLCAwKTsKKyMjICAgICAgIERFQ0xf UlJFR190KFJ0ViwgUnROLCAyLCAwKTsKKyMjICAgICAgIFJFQURfUlJFR19zKFJzViwgUnNOKTsK KyMjICAgICAgIFJFQURfUlJFR190KFJ0ViwgUnROKTsKKyMjICAgICAgICNpZmRlZiBmR0VOX1RD R19BMl9hZGQKKyMjICAgICAgIGZHRU5fVENHX0EyX2FkZCh7IFJkVj1Sc1YrUnRWO30pOworIyMg ICAgICAgI2Vsc2UKKyMjICAgICAgIGdlbl9oZWxwZXJfQTJfYWRkKFJkViwgY3B1X2VudiwgUnNW LCBSdFYpOworIyMgICAgICAgI2VuZGlmCisjIyAgICAgICBXUklURV9SUkVHX2QoUmROLCBSZFYp OworIyMgICAgICAgRlJFRV9SUkVHX2QoUmRWKTsKKyMjICAgICAgIEZSRUVfUlJFR19zKFJzVik7 CisjIyAgICAgICBGUkVFX1JSRUdfdChSdFYpOworIyMgICAgICAgLyogQTJfYWRkICovCisjIyAg ICAgICB9CisjIworZGVmIGdlbl90Y2dfZnVuYyhmLCB0YWcsIHJlZ3MsIGltbXMpOgorICAgIGYu d3JpdGUoJ3tcbicpCisgICAgZi53cml0ZSgnLyogJXMgKi9cbicgJSB0YWcpCisgICAgaWYgbmVl ZF9lYSh0YWcpOiBnZW5fZGVjbF9lYV90Y2coZikKKyAgICBpPTAKKyAgICAjIyBEZWNsYXJlIGFs bCB0aGUgb3BlcmFuZHMgKHJlZ3MgYW5kIGltbWVkaWF0ZXMpCisgICAgZm9yIHJlZ3R5cGUscmVn aWQsdG9zcyxudW1yZWdzIGluIHJlZ3M6CisgICAgICAgIGdlbnB0cl9kZWNsX29wbihmLCB0YWcs IHJlZ3R5cGUsIHJlZ2lkLCB0b3NzLCBudW1yZWdzLCBpKQorICAgICAgICBpICs9IDEKKyAgICBm b3IgaW1tbGV0dCxiaXRzLGltbXNoaWZ0IGluIGltbXM6CisgICAgICAgIGdlbnB0cl9kZWNsX2lt bShmLGltbWxldHQpCisKKyAgICBpZiAnQV9QUklWJyBpbiBhdHRyaWJkaWN0W3RhZ106CisgICAg ICAgIGYud3JpdGUoJ2ZDSEVDS0ZPUlBSSVYoKTtcbicpCisgICAgaWYgJ0FfR1VFU1QnIGluIGF0 dHJpYmRpY3RbdGFnXToKKyAgICAgICAgZi53cml0ZSgnZkNIRUNLRk9SR1VFU1QoKTtcbicpCisg ICAgaWYgJ0FfRlBPUCcgaW4gYXR0cmliZGljdFt0YWddOgorICAgICAgICBmLndyaXRlKCdmRlBP UF9TVEFSVCgpO1xuJyk7CisKKyAgICAjIyBSZWFkIGFsbCB0aGUgaW5wdXRzCisgICAgZm9yIHJl Z3R5cGUscmVnaWQsdG9zcyxudW1yZWdzIGluIHJlZ3M6CisgICAgICAgIGlmIChpc19yZWFkKHJl Z2lkKSk6CisgICAgICAgICAgICBnZW5wdHJfc3JjX3JlYWRfb3BuKGYscmVndHlwZSxyZWdpZCx0 YWcpCisKKyAgICBmLndyaXRlKCIjaWZkZWYgZkdFTl9UQ0dfJXNcbiIgJSB0YWcpCisgICAgZi53 cml0ZSgiZkdFTl9UQ0dfJXMoJXMpO1xuIiAlICh0YWcsIHNlbWRpY3RbdGFnXSkpCisgICAgZi53 cml0ZSgiI2Vsc2VcbiIpCisgICAgIyMgR2VuZXJhdGUgdGhlIGNhbGwgdG8gdGhlIGhlbHBlcgor ICAgIGYud3JpdGUoImRvIHtcbiIpCisgICAgZm9yIGltbWxldHQsYml0cyxpbW1zaGlmdCBpbiBp bW1zOgorICAgICAgICBnZW5faGVscGVyX2RlY2xfaW1tKGYsaW1tbGV0dCkKKyAgICBpZiBuZWVk X3BhcnQxKHRhZyk6IGYud3JpdGUoIlBBUlQxX1dSQVAoIikKKyAgICBpZiBuZWVkX3Nsb3QodGFn KTogZi53cml0ZSgiU0xPVF9XUkFQKCIpCisgICAgZi53cml0ZSgiZ2VuX2hlbHBlcl8lcygiICUg KHRhZykpCisgICAgaT0wCisgICAgIyMgSWYgdGhlcmUgaXMgYSBzY2FsYXIgcmVzdWx0LCBpdCBp cyB0aGUgcmV0dXJuIHR5cGUKKyAgICBmb3IgcmVndHlwZSxyZWdpZCx0b3NzLG51bXJlZ3MgaW4g cmVnczoKKyAgICAgICAgaWYgKGlzX3dyaXR0ZW4ocmVnaWQpKToKKyAgICAgICAgICAgIGdlbl9o ZWxwZXJfY2FsbF9vcG4oZiwgdGFnLCByZWd0eXBlLCByZWdpZCwgdG9zcywgbnVtcmVncywgaSkK KyAgICAgICAgICAgIGkgKz0gMQorICAgIGlmIChpID4gMCk6IGYud3JpdGUoIiwgIikKKyAgICBm LndyaXRlKCJjcHVfZW52IikKKyAgICBpPTEKKyAgICBmb3IgcmVndHlwZSxyZWdpZCx0b3NzLG51 bXJlZ3MgaW4gcmVnczoKKyAgICAgICAgaWYgKGlzX3JlYWQocmVnaWQpKToKKyAgICAgICAgICAg IGdlbl9oZWxwZXJfY2FsbF9vcG4oZiwgdGFnLCByZWd0eXBlLCByZWdpZCwgdG9zcywgbnVtcmVn cywgaSkKKyAgICAgICAgICAgIGkgKz0gMQorICAgIGZvciBpbW1sZXR0LGJpdHMsaW1tc2hpZnQg aW4gaW1tczoKKyAgICAgICAgZ2VuX2hlbHBlcl9jYWxsX2ltbShmLGltbWxldHQpCisKKyAgICBp ZiBuZWVkX3Nsb3QodGFnKTogZi53cml0ZSgiLCBzbG90IikKKyAgICBpZiBuZWVkX3BhcnQxKHRh Zyk6IGYud3JpdGUoIiwgcGFydDEiICkKKyAgICBmLndyaXRlKCIpIikKKyAgICBpZiBuZWVkX3Ns b3QodGFnKTogZi53cml0ZSgiKSIpCisgICAgaWYgbmVlZF9wYXJ0MSh0YWcpOiBmLndyaXRlKCIp IikKKyAgICBmLndyaXRlKCI7XG4iKQorICAgIGZvciBpbW1sZXR0LGJpdHMsaW1tc2hpZnQgaW4g aW1tczoKKyAgICAgICAgZ2VuX2hlbHBlcl9mcmVlX2ltbShmLGltbWxldHQpCisgICAgZi53cml0 ZSgifSB3aGlsZSAoMCk7XG4iKQorICAgIGYud3JpdGUoIiNlbmRpZlxuIikKKworICAgICMjIFdy aXRlIGFsbCB0aGUgb3V0cHV0cworICAgIGZvciByZWd0eXBlLHJlZ2lkLHRvc3MsbnVtcmVncyBp biByZWdzOgorICAgICAgICBpZiAoaXNfd3JpdHRlbihyZWdpZCkpOgorICAgICAgICAgICAgZ2Vu cHRyX2RzdF93cml0ZV9vcG4oZixyZWd0eXBlLCByZWdpZCwgdGFnKQorCisgICAgaWYgJ0FfRlBP UCcgaW4gYXR0cmliZGljdFt0YWddOgorICAgICAgICBmLndyaXRlKCdmRlBPUF9FTkQoKTtcbicp OworCisKKyAgICAjIyBGcmVlIGFsbCB0aGUgb3BlcmFuZHMgKHJlZ3MgYW5kIGltbWVkaWF0ZXMp CisgICAgaWYgbmVlZF9lYSh0YWcpOiBnZW5fZnJlZV9lYV90Y2coZikKKyAgICBmb3IgcmVndHlw ZSxyZWdpZCx0b3NzLG51bXJlZ3MgaW4gcmVnczoKKyAgICAgICAgZ2VucHRyX2ZyZWVfb3BuKGYs cmVndHlwZSxyZWdpZCxpLHRhZykKKyAgICAgICAgaSArPSAxCisgICAgZm9yIGltbWxldHQsYml0 cyxpbW1zaGlmdCBpbiBpbW1zOgorICAgICAgICBnZW5wdHJfZnJlZV9pbW0oZixpbW1sZXR0KQor CisgICAgZi53cml0ZSgiLyogJXMgKi9cbiIgJSB0YWcpCisgICAgZi53cml0ZSgifSIpCisKK2Rl ZiBnZW5fZGVmX3RjZ19mdW5jKGYsIHRhZywgdGFncmVncywgdGFnaW1tcyk6CisgICAgcmVncyA9 IHRhZ3JlZ3NbdGFnXQorICAgIGltbXMgPSB0YWdpbW1zW3RhZ10KKworICAgIGYud3JpdGUoJ0RF Rl9UQ0dfRlVOQyglcywgLyogJXMgKi9cbicgJSAodGFnLHNlbWRpY3RbdGFnXSkpCisgICAgZ2Vu X3RjZ19mdW5jKGYsIHRhZywgcmVncywgaW1tcykKKyAgICBmLndyaXRlKCIpXG4iICkKKworZGVm IG1haW4oKToKKyAgICByZWFkX3NlbWFudGljc19maWxlKHN5cy5hcmd2WzFdKQorICAgIHJlYWRf YXR0cmlic19maWxlKHN5cy5hcmd2WzJdKQorICAgIGNhbGN1bGF0ZV9hdHRyaWJzKCkKKyAgICB0 YWdyZWdzID0gZ2V0X3RhZ3JlZ3MoKQorICAgIHRhZ2ltbXMgPSBnZXRfdGFnaW1tcygpCisKKyAg ICBmID0gU3RyaW5nSU8oKQorCisgICAgZi53cml0ZSgiI2lmbmRlZiBERUZfVENHX0ZVTkNcbiIp CisgICAgZi53cml0ZSgiI2RlZmluZSBERUZfVENHX0ZVTkMoVEFHLEdFTkZOKSAgICAgICAgIC8q IE5vdGhpbmcgKi9cbiIpCisgICAgZi53cml0ZSgiI2VuZGlmXG4iKQorCisgICAgZm9yIHRhZyBp biB0YWdzOgorICAgICAgICAjIyBTa2lwIHRoZSBwcml2IGluc3RydWN0aW9ucworICAgICAgICBp ZiAoICJBX1BSSVYiIGluIGF0dHJpYmRpY3RbdGFnXSApIDoKKyAgICAgICAgICAgIGNvbnRpbnVl CisgICAgICAgICMjIFNraXAgdGhlIGd1ZXN0IGluc3RydWN0aW9ucworICAgICAgICBpZiAoICJB X0dVRVNUIiBpbiBhdHRyaWJkaWN0W3RhZ10gKSA6CisgICAgICAgICAgICBjb250aW51ZQorICAg ICAgICAjIyBTa2lwIHRoZSBkaWFnIGluc3RydWN0aW9ucworICAgICAgICBpZiAoIHRhZyA9PSAi WTZfZGlhZyIgKSA6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBpZiAoIHRhZyA9PSAi WTZfZGlhZzAiICkgOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgKCB0YWcgPT0g Ilk2X2RpYWcxIiApIDoKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgZ2VuX2RlZl90 Y2dfZnVuYyhmLCB0YWcsIHRhZ3JlZ3MsIHRhZ2ltbXMpCisKKyAgICBmLndyaXRlKCIjdW5kZWYg REVGX1RDR19GVU5DXG4iKQorCisgICAgcmVhbGYgPSBvcGVuKCd0Y2dfZnVuY3NfZ2VuZXJhdGVk LmgnLCd3JykKKyAgICByZWFsZi53cml0ZShmLmdldHZhbHVlKCkpCisgICAgcmVhbGYuY2xvc2Uo KQorICAgIGYuY2xvc2UoKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4o KQpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2hleGFnb24vaGV4X2NvbW1vbi5weSBiL3RhcmdldC9oZXhh Z29uL2hleF9jb21tb24ucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDQ1 ZmZhYgotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9oZXhhZ29uL2hleF9jb21tb24ucHkKQEAg LTAsMCArMSwyMDQgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKKworIyMKKyMjICBDb3B5cmln aHQoYykgMjAxOS0yMDIwIFF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMuIEFsbCBSaWdo dHMgUmVzZXJ2ZWQuCisjIworIyMgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIyAgaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMjICB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNl bnNlLCBvcgorIyMgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjIworIyMg IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorIyMgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mCisjIyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyMgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCisjIworIyMgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh IGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIyAgYWxvbmcgd2l0aCB0 aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4K KyMjCisKK2ltcG9ydCBzeXMKK2ltcG9ydCByZQoraW1wb3J0IHN0cmluZworZnJvbSBpbyBpbXBv cnQgU3RyaW5nSU8KKworYmVoZGljdCA9IHt9ICAgICAgICAgICMgdGFnIC0+YmVoYXZpb3IKK3Nl bWRpY3QgPSB7fSAgICAgICAgICAjIHRhZyAtPiBzZW1hbnRpY3MKK2F0dHJpYmRpY3QgPSB7fSAg ICAgICAjIHRhZyAtPiBhdHRyaWJ1dGVzCittYWNyb3MgPSB7fSAgICAgICAgICAgIyBtYWNybyAt PiBtYWNybyBpbmZvcm1hdGlvbi4uLgorYXR0cmliaW5mbyA9IHt9ICAgICAgICMgUmVnaXN0ZXIg aW5mb3JtYXRpb24gYW5kIG1pc2MKK3RhZ3MgPSBbXSAgICAgICAgICAgICAjIGxpc3Qgb2YgYWxs IHRhZ3MKKworIyBXZSBzaG91bGQgZG8gdGhpcyBhcyBhIGhhc2ggZm9yIHBlcmZvcm1hbmNlLAor IyBidXQgdG8ga2VlcCBvcmRlciBsZXQncyBrZWVwIGl0IGFzIGEgbGlzdC4KK2RlZiB1bmlxdWlm eShzZXEpOgorICAgIHNlZW4gPSBzZXQoKQorICAgIHNlZW5fYWRkID0gc2Vlbi5hZGQKKyAgICBy ZXR1cm4gW3ggZm9yIHggaW4gc2VxIGlmIHggbm90IGluIHNlZW4gYW5kIG5vdCBzZWVuX2FkZCh4 KV0KKworcmVncmUgPSByZS5jb21waWxlKAorICAgIHIiKCg/PCFEVVApW01OT1JDUFFYU0dWWkFd KShbc3R1dnd4eXpkZWZnXSspKFsuXT9bTGxIaF0/KShcZCtTPykiKQoraW1tcmUgPSByZS5jb21w aWxlKHIiWyNdKFtyUnNTdVVtXSkoXGQrKSg/Ols6XShcZCspKT8iKQorcmVnX29yX2ltbXJlID0g XAorICAgIHJlLmNvbXBpbGUociIoKCg/PCFEVVApW01OUkNPUFFYU0dWWkFdKShbc3R1dnd4eXpk ZWZnXSspIiArIFwKKyAgICAgICAgICAgICAgICAiKFsuXT9bTGxIaF0/KShcZCtTPykpfChbI10o W3JSc1N1VW1dKShcZCspWzpdPyhcZCspPykiKQorcmVsaW1tcmUgPSByZS5jb21waWxlKHIiWyNd KFtyUl0pKFxkKykoPzpbOl0oXGQrKSk/IikKK2Fic2ltbXJlID0gcmUuY29tcGlsZShyIlsjXShb c1N1VW1dKShcZCspKD86WzpdKFxkKykpPyIpCisKK2ZpbmlzaGVkX21hY3JvcyA9IHNldCgpCisK K2RlZiBleHBhbmRfbWFjcm9fYXR0cmlicyhtYWNybyxhbGxtYWNfcmUpOgorICAgIGlmIG1hY3Jv LmtleSBub3QgaW4gZmluaXNoZWRfbWFjcm9zOgorICAgICAgICAjIEdldCBhIGxpc3Qgb2YgYWxs IHRoaW5ncyB0aGF0IG1pZ2h0IGJlIG1hY3JvcworICAgICAgICBsID0gYWxsbWFjX3JlLmZpbmRh bGwobWFjcm8uYmVoKQorICAgICAgICBmb3Igc3VibWFjcm8gaW4gbDoKKyAgICAgICAgICAgIGlm IG5vdCBzdWJtYWNybzogY29udGludWUKKyAgICAgICAgICAgIGlmIG5vdCBtYWNyb3Nbc3VibWFj cm9dOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiQ291bGRuJ3QgZmluZCBtYWNy bzogPCVzPiIgJSBsKQorICAgICAgICAgICAgbWFjcm8uYXR0cmlicyB8PSBleHBhbmRfbWFjcm9f YXR0cmlicygKKyAgICAgICAgICAgICAgICBtYWNyb3Nbc3VibWFjcm9dLCBhbGxtYWNfcmUpCisg ICAgICAgICAgICBmaW5pc2hlZF9tYWNyb3MuYWRkKG1hY3JvLmtleSkKKyAgICByZXR1cm4gbWFj cm8uYXR0cmlicworCitpbW1leHRyZSA9IHJlLmNvbXBpbGUocidmKE1VU1RfKT9JTU1FWFRbKF0o W1V1U3NScl0pJykKK2RlZiBjYWxjdWxhdGVfYXR0cmlicygpOgorICAgICMgUmVjdXJzZSBkb3du IG1hY3JvcywgZmluZCBhdHRyaWJ1dGVzIGZyb20gc3ViLW1hY3JvcworICAgIG1hY3JvVmFsdWVz ID0gbGlzdChtYWNyb3MudmFsdWVzKCkpCisgICAgYWxsbWFjcm9zX3Jlc3RyID0gInwiLmpvaW4o c2V0KFsgbS5yZS5wYXR0ZXJuIGZvciBtIGluIG1hY3JvVmFsdWVzIF0pKQorICAgIGFsbG1hY3Jv c19yZSA9IHJlLmNvbXBpbGUoYWxsbWFjcm9zX3Jlc3RyKQorICAgIGZvciBtYWNybyBpbiBtYWNy b1ZhbHVlczoKKyAgICAgICAgZXhwYW5kX21hY3JvX2F0dHJpYnMobWFjcm8sYWxsbWFjcm9zX3Jl KQorICAgICMgQXBwZW5kIGF0dHJpYnV0ZXMgdG8gYWxsIGluc3RydWN0aW9ucworICAgIGZvciB0 YWcgaW4gdGFnczoKKyAgICAgICAgZm9yIG1hY25hbWUgaW4gYWxsbWFjcm9zX3JlLmZpbmRhbGwo c2VtZGljdFt0YWddKToKKyAgICAgICAgICAgIGlmIG5vdCBtYWNuYW1lOiBjb250aW51ZQorICAg ICAgICAgICAgbWFjcm8gPSBtYWNyb3NbbWFjbmFtZV0KKyAgICAgICAgICAgIGF0dHJpYmRpY3Rb dGFnXSB8PSBzZXQobWFjcm8uYXR0cmlicykKKworZGVmIFNFTUFOVElDUyh0YWcsIGJlaCwgc2Vt KToKKyAgICAjcHJpbnQgdGFnLGJlaCxzZW0KKyAgICBiZWhkaWN0W3RhZ10gPSBiZWgKKyAgICBz ZW1kaWN0W3RhZ10gPSBzZW0KKyAgICBhdHRyaWJkaWN0W3RhZ10gPSBzZXQoKQorICAgIHRhZ3Mu YXBwZW5kKHRhZykgICAgICAgICMgZGljdHMgaGF2ZSBubyBvcmRlciwgdGhpcyBpcyBmb3Igb3Jk ZXIKKworZGVmIEFUVFJJQlVURVModGFnLCBhdHRyaWJzdHJpbmcpOgorICAgIGF0dHJpYnN0cmlu ZyA9IFwKKyAgICAgICAgYXR0cmlic3RyaW5nLnJlcGxhY2UoIkFUVFJJQlMiLCIiKS5yZXBsYWNl KCIoIiwiIikucmVwbGFjZSgiKSIsIiIpCisgICAgaWYgbm90IGF0dHJpYnN0cmluZzoKKyAgICAg ICAgcmV0dXJuCisgICAgYXR0cmlicyA9IGF0dHJpYnN0cmluZy5zcGxpdCgiLCIpCisgICAgZm9y IGF0dHJpYiBpbiBhdHRyaWJzOgorICAgICAgICBhdHRyaWJkaWN0W3RhZ10uYWRkKGF0dHJpYi5z dHJpcCgpKQorCitjbGFzcyBNYWNybyhvYmplY3QpOgorICAgIF9fc2xvdHNfXyA9IFsna2V5Jywn bmFtZScsICdiZWgnLCAnYXR0cmlicycsICdyZSddCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5h bWUsIGJlaCwgYXR0cmlicyk6CisgICAgICAgIHNlbGYua2V5ID0gbmFtZQorICAgICAgICBzZWxm Lm5hbWUgPSBuYW1lCisgICAgICAgIHNlbGYuYmVoID0gYmVoCisgICAgICAgIHNlbGYuYXR0cmli cyA9IHNldChhdHRyaWJzKQorICAgICAgICBzZWxmLnJlID0gcmUuY29tcGlsZSgiXFxiIiArIG5h bWUgKyAiXFxiIikKKworZGVmIE1BQ1JPQVRUUklCKG1hY25hbWUsYmVoLGF0dHJpYnN0cmluZyk6 CisgICAgYXR0cmlic3RyaW5nID0gYXR0cmlic3RyaW5nLnJlcGxhY2UoIigiLCIiKS5yZXBsYWNl KCIpIiwiIikKKyAgICBpZiBhdHRyaWJzdHJpbmc6CisgICAgICAgIGF0dHJpYnMgPSBhdHRyaWJz dHJpbmcuc3BsaXQoIiwiKQorICAgIGVsc2U6CisgICAgICAgIGF0dHJpYnMgPSBbXQorICAgIG1h Y3Jvc1ttYWNuYW1lXSA9IE1hY3JvKG1hY25hbWUsYmVoLGF0dHJpYnMpCisKK2RlZiBjb21wdXRl X3RhZ19yZWdzKHRhZyk6CisgICAgcmV0dXJuIHVuaXF1aWZ5KHJlZ3JlLmZpbmRhbGwoYmVoZGlj dFt0YWddKSkKKworZGVmIGNvbXB1dGVfdGFnX2ltbWVkaWF0ZXModGFnKToKKyAgICByZXR1cm4g dW5pcXVpZnkoaW1tcmUuZmluZGFsbChiZWhkaWN0W3RhZ10pKQorCisjIworIyMgIHRhZ3JlZ3Mg aXMgdGhlIG1haW4gZGF0YSBzdHJ1Y3R1cmUgd2UnbGwgdXNlCisjIyAgdGFncmVnc1t0YWddIHdp bGwgY29udGFpbiB0aGUgcmVnaXN0ZXJzIHVzZWQgYnkgYW4gaW5zdHJ1Y3Rpb24KKyMjICBXaXRo aW4gZWFjaCBlbnRyeSwgd2UnbGwgdXNlIHRoZSByZWd0eXBlIGFuZCByZWdpZCBmaWVsZHMKKyMj ICAgICAgcmVndHlwZSBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcKKyMjICAgICAgICAgIEMg ICAgICAgICAgICAgICAgY29udHJvbCByZWdpc3RlcgorIyMgICAgICAgICAgTiAgICAgICAgICAg ICAgICBuZXcgcmVnaXN0ZXIgdmFsdWUKKyMjICAgICAgICAgIFAgICAgICAgICAgICAgICAgcHJl ZGljYXRlIHJlZ2lzdGVyCisjIyAgICAgICAgICBSICAgICAgICAgICAgICAgIEdQUiByZWdpc3Rl cgorIyMgICAgICAgICAgTSAgICAgICAgICAgICAgICBtb2RpZmllciByZWdpc3RlcgorIyMgICAg ICByZWdpZCBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcKKyMjICAgICAgICAgIGQsIGUgICAg ICAgICAgICAgZGVzdGluYXRpb24gcmVnaXN0ZXIKKyMjICAgICAgICAgIGRkICAgICAgICAgICAg ICAgZGVzdGluYXRpb24gcmVnaXN0ZXIgcGFpcgorIyMgICAgICAgICAgcywgdCwgdSwgdiwgdyAg ICBzb3VyY2UgcmVnaXN0ZXIKKyMjICAgICAgICAgIHNzLCB0dCwgdXUsIHZ2ICAgc291cmNlIHJl Z2lzdGVyIHBhaXIKKyMjICAgICAgICAgIHgsIHkgICAgICAgICAgICAgcmVhZC13cml0ZSByZWdp c3RlcgorIyMgICAgICAgICAgeHgsIHl5ICAgICAgICAgICByZWFkLXdyaXRlIHJlZ2lzdGVyIHBh aXIKKyMjCitkZWYgZ2V0X3RhZ3JlZ3MoKToKKyAgICByZXR1cm4gZGljdCh6aXAodGFncywgbGlz dChtYXAoY29tcHV0ZV90YWdfcmVncywgdGFncykpKSkKKworZGVmIGdldF90YWdpbW1zKCk6Cisg ICAgcmV0dXJuIGRpY3QoemlwKHRhZ3MsIGxpc3QobWFwKGNvbXB1dGVfdGFnX2ltbWVkaWF0ZXMs IHRhZ3MpKSkpCisKK2RlZiBpc19wYWlyKHJlZ2lkKToKKyAgICByZXR1cm4gbGVuKHJlZ2lkKSA9 PSAyCisKK2RlZiBpc19zaW5nbGUocmVnaWQpOgorICAgIHJldHVybiBsZW4ocmVnaWQpID09IDEK KworZGVmIGlzX3dyaXR0ZW4ocmVnaWQpOgorICAgIHJldHVybiByZWdpZFswXSBpbiAiZGV4eSIK KworZGVmIGlzX3dyaXRlb25seShyZWdpZCk6CisgICAgcmV0dXJuIHJlZ2lkWzBdIGluICJkZSIK KworZGVmIGlzX3JlYWQocmVnaWQpOgorICAgIHJldHVybiByZWdpZFswXSBpbiAic3R1dnd4eSIK KworZGVmIGlzX3JlYWR3cml0ZShyZWdpZCk6CisgICAgcmV0dXJuIHJlZ2lkWzBdIGluICJ4eSIK KworZGVmIGlzX3NjYWxhcl9yZWcocmVndHlwZSk6CisgICAgcmV0dXJuIHJlZ3R5cGUgaW4gIlJQ QyIKKworZGVmIGlzX29sZF92YWwocmVndHlwZSwgcmVnaWQsIHRhZyk6CisgICAgcmV0dXJuIHJl Z3R5cGUrcmVnaWQrJ1YnIGluIHNlbWRpY3RbdGFnXQorCitkZWYgaXNfbmV3X3ZhbChyZWd0eXBl LCByZWdpZCwgdGFnKToKKyAgICByZXR1cm4gcmVndHlwZStyZWdpZCsnTicgaW4gc2VtZGljdFt0 YWddCisKK2RlZiBuZWVkX3Nsb3QodGFnKToKKyAgICBpZiAoJ0FfQ09OREVYRUMnIGluIGF0dHJp YmRpY3RbdGFnXSBvcgorICAgICAgICAnQV9TVE9SRScgaW4gYXR0cmliZGljdFt0YWddIG9yCisg ICAgICAgICdBX0xPQUQnIGluIGF0dHJpYmRpY3RbdGFnXSk6CisgICAgICAgIHJldHVybiAxCisg ICAgZWxzZToKKyAgICAgICAgcmV0dXJuIDAKKworZGVmIG5lZWRfcGFydDEodGFnKToKKyAgICBy ZXR1cm4gcmUuY29tcGlsZShyImZQQVJUMSIpLnNlYXJjaChzZW1kaWN0W3RhZ10pCisKK2RlZiBu ZWVkX2VhKHRhZyk6CisgICAgcmV0dXJuIHJlLmNvbXBpbGUociJcYkVBXGIiKS5zZWFyY2goc2Vt ZGljdFt0YWddKQorCitkZWYgaW1tX25hbWUoaW1tbGV0dCk6CisgICAgcmV0dXJuICIlc2lWIiAl IGltbWxldHQKKworZGVmIHJlYWRfc2VtYW50aWNzX2ZpbGUobmFtZSk6CisgICAgZXZhbF9saW5l ID0gIiIKKyAgICBmb3IgbGluZSBpbiBvcGVuKG5hbWUsICdydCcpLnJlYWRsaW5lcygpOgorICAg ICAgICBpZiBub3QgbGluZS5zdGFydHN3aXRoKCIjIik6CisgICAgICAgICAgICBldmFsX2xpbmUg Kz0gbGluZQorICAgICAgICAgICAgaWYgbGluZS5lbmRzd2l0aCgiXFxcbiIpOgorICAgICAgICAg ICAgICAgIGV2YWxfbGluZS5yc3RyaXAoIlxcXG4iKQorICAgICAgICAgICAgZWxzZToKKyAgICAg ICAgICAgICAgICBldmFsKGV2YWxfbGluZS5zdHJpcCgpKQorICAgICAgICAgICAgICAgIGV2YWxf bGluZSA9ICIiCisKK2RlZiByZWFkX2F0dHJpYnNfZmlsZShuYW1lKToKKyAgICBhdHRyaWJyZSA9 IHJlLmNvbXBpbGUocidERUZfQVRUUklCXCgoW0EtWmEtejAtOV9dKyksIChbXixdKiksICcgKwor ICAgICAgICAgICAgciciKFtBLVphLXowLTlfXC5dKikiLCAiKFtBLVphLXowLTlfXC5dKikiXCkn KQorICAgIGZvciBsaW5lIGluIG9wZW4oc3lzLmFyZ3ZbMl0sICdydCcpLnJlYWRsaW5lcygpOgor ICAgICAgICBpZiBub3QgYXR0cmlicmUubWF0Y2gobGluZSk6CisgICAgICAgICAgICBjb250aW51 ZQorICAgICAgICAoYXR0cmliX2Jhc2UsZGVzY3IscnJlZyx3cmVnKSA9IGF0dHJpYnJlLmZpbmRh bGwobGluZSlbMF0KKyAgICAgICAgYXR0cmliX2Jhc2UgPSAnQV8nICsgYXR0cmliX2Jhc2UKKyAg ICAgICAgYXR0cmliaW5mb1thdHRyaWJfYmFzZV0gPSB7J3JyZWcnOnJyZWcsICd3cmVnJzp3cmVn LCAnZGVzY3InOmRlc2NyfQotLSAKMi43LjQKCg==