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=-24.0 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING, NORMAL_HTTP_TO_IP,NUMERIC_HTTP_ADDR,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_GIT 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 2743CC433EF for ; Thu, 23 Sep 2021 10:17:16 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id DDA1360EFF for ; Thu, 23 Sep 2021 10:17:15 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240369AbhIWKSq (ORCPT ); Thu, 23 Sep 2021 06:18:46 -0400 Received: from smtp-fw-33001.amazon.com ([207.171.190.10]:14817 "EHLO smtp-fw-33001.amazon.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240358AbhIWKSp (ORCPT ); Thu, 23 Sep 2021 06:18:45 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.com; i=@amazon.com; q=dns/txt; s=amazon201209; t=1632392235; x=1663928235; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=ZeYPnxvE5onNfK6wTDkE2eUul75mMQCtrslLL08tgus=; b=H7BaHBd59ADZjSJhT6RR0GFJ5XC+0TPqVMFZ7AV9FMjybxHoutPXigLv ZYMoj9ZsMR5qihKQs5LDfcVJ7JRmHYZmE3OxFnslFP57JlaLDkXtUuK2T ZJncG8/as1C90OghJeGE0/J2rCOnKMgO0Nl+LNlt9FB6/yaM/ypBcIqQs Q=; X-IronPort-AV: E=Sophos;i="5.85,316,1624320000"; d="scan'208";a="149564247" Received: from iad12-co-svc-p1-lb1-vlan2.amazon.com (HELO email-inbound-relay-pdx-2b-2520d768.us-west-2.amazon.com) ([10.43.8.2]) by smtp-border-fw-33001.sea14.amazon.com with ESMTP; 23 Sep 2021 10:17:07 +0000 Received: from EX13MTAUWC001.ant.amazon.com (pdx1-ws-svc-p6-lb9-vlan2.pdx.amazon.com [10.236.137.194]) by email-inbound-relay-pdx-2b-2520d768.us-west-2.amazon.com (Postfix) with ESMTPS id A025741AAC; Thu, 23 Sep 2021 10:17:05 +0000 (UTC) Received: from EX13D20UWC001.ant.amazon.com (10.43.162.244) by EX13MTAUWC001.ant.amazon.com (10.43.162.135) with Microsoft SMTP Server (TLS) id 15.0.1497.23; Thu, 23 Sep 2021 10:17:05 +0000 Received: from u79c5a0a55de558.ant.amazon.com (10.43.161.40) by EX13D20UWC001.ant.amazon.com (10.43.162.244) with Microsoft SMTP Server (TLS) id 15.0.1497.23; Thu, 23 Sep 2021 10:17:02 +0000 From: Alexander Graf To: CC: Paolo Bonzini , Daniele Ahmed , Thomas Huth , Sean Christopherson , Andrew Jones Subject: [PATCH] scripts: Add get_maintainer.pl Date: Thu, 23 Sep 2021 12:16:55 +0200 Message-ID: <20210923101655.4250-1-graf@amazon.com> X-Mailer: git-send-email 2.28.0.394.ge197136389 MIME-Version: 1.0 X-Originating-IP: [10.43.161.40] X-ClientProxiedBy: EX13D41UWB002.ant.amazon.com (10.43.161.109) To EX13D20UWC001.ant.amazon.com (10.43.162.244) Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org V2hpbGUgd2UgYWRvcHRlZCB0aGUgTUFJTlRBSU5FUlMgZmlsZSBpbiBrdm0tdW5pdC10ZXN0cywg dGhlIHRvb2wgdG8KZGV0ZXJtaW5lIHdobyB0byBDQyBvbiBwYXRjaCBzdWJtaXNzaW9ucyBpcyBz dGlsbCBtaXNzaW5nLgoKQ29weSBMaW51eCdzIHZlcnNpb24gb3ZlciBhbmQgYWRqdXN0IGl0IHRv IHdvcmsgd2l0aCBhbmQgY2FsbCBvdXQgdGhlCmt2bS11bml0LXRlc3RzIHRyZWUuCgpTaWduZWQt b2ZmLWJ5OiBBbGV4YW5kZXIgR3JhZiA8Z3JhZkBhbWF6b24uY29tPgotLS0KIHNjcmlwdHMvZ2V0 X21haW50YWluZXIucGwgfCAyNTg2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDI1ODYgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1v ZGUgMTAwNzU1IHNjcmlwdHMvZ2V0X21haW50YWluZXIucGwKCmRpZmYgLS1naXQgYS9zY3JpcHRz L2dldF9tYWludGFpbmVyLnBsIGIvc2NyaXB0cy9nZXRfbWFpbnRhaW5lci5wbApuZXcgZmlsZSBt b2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kYWRiYzM0Ci0tLSAvZGV2L251bGwKKysrIGIvc2Ny aXB0cy9nZXRfbWFpbnRhaW5lci5wbApAQCAtMCwwICsxLDI1ODYgQEAKKyMhL3Vzci9iaW4vZW52 IHBlcmwKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKyMKKyMgKGMpIDIwMDcs IEpvZSBQZXJjaGVzIDxqb2VAcGVyY2hlcy5jb20+CisjICAgICAgICAgICBjcmVhdGVkIGZyb20g Y2hlY2twYXRjaC5wbAorIworIyBQcmludCBzZWxlY3RlZCBNQUlOVEFJTkVSUyBpbmZvcm1hdGlv biBmb3IKKyMgdGhlIGZpbGVzIG1vZGlmaWVkIGluIGEgcGF0Y2ggb3IgZm9yIGEgZmlsZQorIwor IyB1c2FnZTogcGVybCBzY3JpcHRzL2dldF9tYWludGFpbmVyLnBsIFtPUFRJT05TXSA8cGF0Y2g+ CisjICAgICAgICBwZXJsIHNjcmlwdHMvZ2V0X21haW50YWluZXIucGwgW09QVElPTlNdIC1mIDxm aWxlPgorCit1c2Ugd2FybmluZ3M7Cit1c2Ugc3RyaWN0OworCitteSAkUCA9ICQwOworbXkgJFYg PSAnMC4yNic7CisKK3VzZSBHZXRvcHQ6OkxvbmcgcXcoOmNvbmZpZyBub19hdXRvX2FiYnJldik7 Cit1c2UgQ3dkOwordXNlIEZpbGU6OkZpbmQ7Cit1c2UgRmlsZTo6U3BlYzo6RnVuY3Rpb25zOwor CitteSAkY3VyX3BhdGggPSBmYXN0Z2V0Y3dkKCkgLiAnLyc7CitteSAkbGtfcGF0aCA9ICIuLyI7 CitteSAkZW1haWwgPSAxOworbXkgJGVtYWlsX3VzZW5hbWUgPSAxOworbXkgJGVtYWlsX21haW50 YWluZXIgPSAxOworbXkgJGVtYWlsX3Jldmlld2VyID0gMTsKK215ICRlbWFpbF9maXhlcyA9IDE7 CitteSAkZW1haWxfbGlzdCA9IDE7CitteSAkZW1haWxfbW9kZXJhdGVkX2xpc3QgPSAxOworbXkg JGVtYWlsX3N1YnNjcmliZXJfbGlzdCA9IDA7CitteSAkZW1haWxfZ2l0X3Blbmd1aW5fY2hpZWZz ID0gMDsKK215ICRlbWFpbF9naXQgPSAwOworbXkgJGVtYWlsX2dpdF9hbGxfc2lnbmF0dXJlX3R5 cGVzID0gMDsKK215ICRlbWFpbF9naXRfYmxhbWUgPSAwOworbXkgJGVtYWlsX2dpdF9ibGFtZV9z aWduYXR1cmVzID0gMTsKK215ICRlbWFpbF9naXRfZmFsbGJhY2sgPSAxOworbXkgJGVtYWlsX2dp dF9taW5fc2lnbmF0dXJlcyA9IDE7CitteSAkZW1haWxfZ2l0X21heF9tYWludGFpbmVycyA9IDU7 CitteSAkZW1haWxfZ2l0X21pbl9wZXJjZW50ID0gNTsKK215ICRlbWFpbF9naXRfc2luY2UgPSAi MS15ZWFyLWFnbyI7CitteSAkZW1haWxfaGdfc2luY2UgPSAiLTM2NSI7CitteSAkaW50ZXJhY3Rp dmUgPSAwOworbXkgJGVtYWlsX3JlbW92ZV9kdXBsaWNhdGVzID0gMTsKK215ICRlbWFpbF91c2Vf bWFpbG1hcCA9IDE7CitteSAkb3V0cHV0X211bHRpbGluZSA9IDE7CitteSAkb3V0cHV0X3NlcGFy YXRvciA9ICIsICI7CitteSAkb3V0cHV0X3JvbGVzID0gMDsKK215ICRvdXRwdXRfcm9sZXN0YXRz ID0gMTsKK215ICRvdXRwdXRfc2VjdGlvbl9tYXhsZW4gPSA1MDsKK215ICRzY20gPSAwOworbXkg JHRyZWUgPSAxOworbXkgJHdlYiA9IDA7CitteSAkc3Vic3lzdGVtID0gMDsKK215ICRzdGF0dXMg PSAwOworbXkgJGxldHRlcnMgPSAiIjsKK215ICRrZXl3b3JkcyA9IDE7CitteSAkc2VjdGlvbnMg PSAwOworbXkgJGVtYWlsX2ZpbGVfZW1haWxzID0gMDsKK215ICRmcm9tX2ZpbGVuYW1lID0gMDsK K215ICRwYXR0ZXJuX2RlcHRoID0gMDsKK215ICRzZWxmX3Rlc3QgPSB1bmRlZjsKK215ICR2ZXJz aW9uID0gMDsKK215ICRoZWxwID0gMDsKK215ICRmaW5kX21haW50YWluZXJfZmlsZXMgPSAwOwor bXkgJG1haW50YWluZXJfcGF0aDsKK215ICR2Y3NfdXNlZCA9IDA7CisKK215ICRleGl0ID0gMDsK KworbXkgQGZpbGVzID0gKCk7CitteSBAZml4ZXMgPSAoKTsJCQkjIElmIGEgcGF0Y2ggZGVzY3Jp cHRpb24gaW5jbHVkZXMgRml4ZXM6IGxpbmVzCitteSBAcmFuZ2UgPSAoKTsKK215IEBrZXl3b3Jk X3R2aSA9ICgpOworbXkgQGZpbGVfZW1haWxzID0gKCk7CisKK215ICVjb21taXRfYXV0aG9yX2hh c2g7CitteSAlY29tbWl0X3NpZ25lcl9oYXNoOworCitteSBAcGVuZ3Vpbl9jaGllZiA9ICgpOwor cHVzaChAcGVuZ3Vpbl9jaGllZiwgIkxpbnVzIFRvcnZhbGRzOnRvcnZhbGRzXEBsaW51eC1mb3Vu ZGF0aW9uLm9yZyIpOworI0FuZHJldyB3YW50cyBpbiBvbiBtb3N0IGV2ZXJ5dGhpbmcgLSAyMDA5 LzAxLzE0CisjcHVzaChAcGVuZ3Vpbl9jaGllZiwgIkFuZHJldyBNb3J0b246YWtwbVxAbGludXgt Zm91bmRhdGlvbi5vcmciKTsKKworbXkgQHBlbmd1aW5fY2hpZWZfbmFtZXMgPSAoKTsKK2ZvcmVh Y2ggbXkgJGNoaWVmIChAcGVuZ3Vpbl9jaGllZikgeworICAgIGlmICgkY2hpZWYgPX4gbS9eKC4q KTooLiopLykgeworCW15ICRjaGllZl9uYW1lID0gJDE7CisJbXkgJGNoaWVmX2FkZHIgPSAkMjsK KwlwdXNoKEBwZW5ndWluX2NoaWVmX25hbWVzLCAkY2hpZWZfbmFtZSk7CisgICAgfQorfQorbXkg JHBlbmd1aW5fY2hpZWZzID0gIlwoIiAuIGpvaW4oInwiLCBAcGVuZ3Vpbl9jaGllZl9uYW1lcykg LiAiXCkiOworCisjIFNpZ25hdHVyZSB0eXBlcyBvZiBwZW9wbGUgd2hvIGFyZSBlaXRoZXIKKyMg CWEpIHJlc3BvbnNpYmxlIGZvciB0aGUgY29kZSBpbiBxdWVzdGlvbiwgb3IKKyMgCWIpIGZhbWls aWFyIGVub3VnaCB3aXRoIGl0IHRvIGdpdmUgcmVsZXZhbnQgZmVlZGJhY2sKK215IEBzaWduYXR1 cmVfdGFncyA9ICgpOworcHVzaChAc2lnbmF0dXJlX3RhZ3MsICJTaWduZWQtb2ZmLWJ5OiIpOwor cHVzaChAc2lnbmF0dXJlX3RhZ3MsICJSZXZpZXdlZC1ieToiKTsKK3B1c2goQHNpZ25hdHVyZV90 YWdzLCAiQWNrZWQtYnk6Iik7CisKK215ICRzaWduYXR1cmVfcGF0dGVybiA9ICJcKCIgLiBqb2lu KCJ8IiwgQHNpZ25hdHVyZV90YWdzKSAuICJcKSI7CisKKyMgcmZjODIyIGVtYWlsIGFkZHJlc3Mg LSBwcmVsb2FkZWQgbWV0aG9kcyBnbyBoZXJlLgorbXkgJHJmYzgyMl9sd3NwID0gIig/Oig/Olxc clxcbik/WyBcXHRdKSI7CitteSAkcmZjODIyX2NoYXIgPSAnW1xcMDAwLVxcMzc3XSc7CisKKyMg VkNTIGNvbW1hbmQgc3VwcG9ydDogY2xhc3MtbGlrZSBmdW5jdGlvbnMgYW5kIHN0cmluZ3MKKwor bXkgJVZDU19jbWRzOworCitteSAlVkNTX2NtZHNfZ2l0ID0gKAorICAgICJleGVjdXRlX2NtZCIg PT4gXCZnaXRfZXhlY3V0ZV9jbWQsCisgICAgImF2YWlsYWJsZSIgPT4gJyh3aGljaCgiZ2l0Iikg bmUgIiIpICYmICgtZSAiLmdpdCIpJywKKyAgICAiZmluZF9zaWduZXJzX2NtZCIgPT4KKwkiZ2l0 IGxvZyAtLW5vLWNvbG9yIC0tZm9sbG93IC0tc2luY2U9XCRlbWFpbF9naXRfc2luY2UgIiAuCisJ ICAgICctLW51bXN0YXQgLS1uby1tZXJnZXMgJyAuCisJICAgICctLWZvcm1hdD0iR2l0Q29tbWl0 OiAlSCVuJyAuCisJCSAgICAgICdHaXRBdXRob3I6ICVhbiA8JWFlPiVuJyAuCisJCSAgICAgICdH aXREYXRlOiAlYUQlbicgLgorCQkgICAgICAnR2l0U3ViamVjdDogJXMlbicgLgorCQkgICAgICAn JWIlbiInIC4KKwkgICAgIiAtLSBcJGZpbGUiLAorICAgICJmaW5kX2NvbW1pdF9zaWduZXJzX2Nt ZCIgPT4KKwkiZ2l0IGxvZyAtLW5vLWNvbG9yICIgLgorCSAgICAnLS1udW1zdGF0ICcgLgorCSAg ICAnLS1mb3JtYXQ9IkdpdENvbW1pdDogJUglbicgLgorCQkgICAgICAnR2l0QXV0aG9yOiAlYW4g PCVhZT4lbicgLgorCQkgICAgICAnR2l0RGF0ZTogJWFEJW4nIC4KKwkJICAgICAgJ0dpdFN1Ympl Y3Q6ICVzJW4nIC4KKwkJICAgICAgJyViJW4iJyAuCisJICAgICIgLTEgXCRjb21taXQiLAorICAg ICJmaW5kX2NvbW1pdF9hdXRob3JfY21kIiA9PgorCSJnaXQgbG9nIC0tbm8tY29sb3IgIiAuCisJ ICAgICctLW51bXN0YXQgJyAuCisJICAgICctLWZvcm1hdD0iR2l0Q29tbWl0OiAlSCVuJyAuCisJ CSAgICAgICdHaXRBdXRob3I6ICVhbiA8JWFlPiVuJyAuCisJCSAgICAgICdHaXREYXRlOiAlYUQl bicgLgorCQkgICAgICAnR2l0U3ViamVjdDogJXMlbiInIC4KKwkgICAgIiAtMSBcJGNvbW1pdCIs CisgICAgImJsYW1lX3JhbmdlX2NtZCIgPT4gImdpdCBibGFtZSAtbCAtTCBcJGRpZmZfc3RhcnQs K1wkZGlmZl9sZW5ndGggXCRmaWxlIiwKKyAgICAiYmxhbWVfZmlsZV9jbWQiID0+ICJnaXQgYmxh bWUgLWwgXCRmaWxlIiwKKyAgICAiY29tbWl0X3BhdHRlcm4iID0+ICJeR2l0Q29tbWl0OiAoWzAt OWEtZl17NDAsNDB9KSIsCisgICAgImJsYW1lX2NvbW1pdF9wYXR0ZXJuIiA9PiAiXihbMC05YS1m XSspICIsCisgICAgImF1dGhvcl9wYXR0ZXJuIiA9PiAiXkdpdEF1dGhvcjogKC4qKSIsCisgICAg InN1YmplY3RfcGF0dGVybiIgPT4gIl5HaXRTdWJqZWN0OiAoLiopIiwKKyAgICAic3RhdF9wYXR0 ZXJuIiA9PiAiXihcXGQrKVxcdChcXGQrKVxcdFwkZmlsZVwkIiwKKyAgICAiZmlsZV9leGlzdHNf Y21kIiA9PiAiZ2l0IGxzLWZpbGVzIFwkZmlsZSIsCisgICAgImxpc3RfZmlsZXNfY21kIiA9PiAi Z2l0IGxzLWZpbGVzIFwkZmlsZSIsCispOworCitteSAlVkNTX2NtZHNfaGcgPSAoCisgICAgImV4 ZWN1dGVfY21kIiA9PiBcJmhnX2V4ZWN1dGVfY21kLAorICAgICJhdmFpbGFibGUiID0+ICcod2hp Y2goImhnIikgbmUgIiIpICYmICgtZCAiLmhnIiknLAorICAgICJmaW5kX3NpZ25lcnNfY21kIiA9 PgorCSJoZyBsb2cgLS1kYXRlPVwkZW1haWxfaGdfc2luY2UgIiAuCisJICAgICItLXRlbXBsYXRl PSdIZ0NvbW1pdDoge25vZGV9XFxuIiAuCisJICAgICAgICAgICAgICAgICJIZ0F1dGhvcjoge2F1 dGhvcn1cXG4iIC4KKwkJCSJIZ1N1YmplY3Q6IHtkZXNjfVxcbiciIC4KKwkgICAgIiAtLSBcJGZp bGUiLAorICAgICJmaW5kX2NvbW1pdF9zaWduZXJzX2NtZCIgPT4KKwkiaGcgbG9nICIgLgorCSAg ICAiLS10ZW1wbGF0ZT0nSGdTdWJqZWN0OiB7ZGVzY31cXG4nIiAuCisJICAgICIgLXIgXCRjb21t aXQiLAorICAgICJmaW5kX2NvbW1pdF9hdXRob3JfY21kIiA9PgorCSJoZyBsb2cgIiAuCisJICAg ICItLXRlbXBsYXRlPSdIZ0NvbW1pdDoge25vZGV9XFxuIiAuCisJCSAgICAgICAgIkhnQXV0aG9y OiB7YXV0aG9yfVxcbiIgLgorCQkJIkhnU3ViamVjdDoge2Rlc2N8Zmlyc3RsaW5lfVxcbiciIC4K KwkgICAgIiAtciBcJGNvbW1pdCIsCisgICAgImJsYW1lX3JhbmdlX2NtZCIgPT4gIiIsCQkjIG5v dCBzdXBwb3J0ZWQKKyAgICAiYmxhbWVfZmlsZV9jbWQiID0+ICJoZyBibGFtZSAtbiBcJGZpbGUi LAorICAgICJjb21taXRfcGF0dGVybiIgPT4gIl5IZ0NvbW1pdDogKFswLTlhLWZdezQwLDQwfSki LAorICAgICJibGFtZV9jb21taXRfcGF0dGVybiIgPT4gIl4oWyAwLTlhLWZdKyk6IiwKKyAgICAi YXV0aG9yX3BhdHRlcm4iID0+ICJeSGdBdXRob3I6ICguKikiLAorICAgICJzdWJqZWN0X3BhdHRl cm4iID0+ICJeSGdTdWJqZWN0OiAoLiopIiwKKyAgICAic3RhdF9wYXR0ZXJuIiA9PiAiXihcXGQr KVx0KFxcZCspXHRcJGZpbGVcJCIsCisgICAgImZpbGVfZXhpc3RzX2NtZCIgPT4gImhnIGZpbGVz IFwkZmlsZSIsCisgICAgImxpc3RfZmlsZXNfY21kIiA9PiAiaGcgbWFuaWZlc3QgLVIgXCRmaWxl IiwKKyk7CisKK215ICRjb25mID0gd2hpY2hfY29uZigiLmdldF9tYWludGFpbmVyLmNvbmYiKTsK K2lmICgtZiAkY29uZikgeworICAgIG15IEBjb25mX2FyZ3M7CisgICAgb3BlbihteSAkY29uZmZp bGUsICc8JywgIiRjb25mIikKKwlvciB3YXJuICIkUDogQ2FuJ3QgZmluZCBhIHJlYWRhYmxlIC5n ZXRfbWFpbnRhaW5lci5jb25mIGZpbGUgJCFcbiI7CisKKyAgICB3aGlsZSAoPCRjb25mZmlsZT4p IHsKKwlteSAkbGluZSA9ICRfOworCisJJGxpbmUgPX4gcy9ccypcbj8kLy9nOworCSRsaW5lID1+ IHMvXlxzKi8vZzsKKwkkbGluZSA9fiBzL1xzKy8gL2c7CisKKwluZXh0IGlmICgkbGluZSA9fiBt L15ccyojLyk7CisJbmV4dCBpZiAoJGxpbmUgPX4gbS9eXHMqJC8pOworCisJbXkgQHdvcmRzID0g c3BsaXQoIiAiLCAkbGluZSk7CisJZm9yZWFjaCBteSAkd29yZCAoQHdvcmRzKSB7CisJICAgIGxh c3QgaWYgKCR3b3JkID1+IG0vXiMvKTsKKwkgICAgcHVzaCAoQGNvbmZfYXJncywgJHdvcmQpOwor CX0KKyAgICB9CisgICAgY2xvc2UoJGNvbmZmaWxlKTsKKyAgICB1bnNoaWZ0KEBBUkdWLCBAY29u Zl9hcmdzKSBpZiBAY29uZl9hcmdzOworfQorCitteSBAaWdub3JlX2VtYWlscyA9ICgpOworbXkg JGlnbm9yZV9maWxlID0gd2hpY2hfY29uZigiLmdldF9tYWludGFpbmVyLmlnbm9yZSIpOworaWYg KC1mICRpZ25vcmVfZmlsZSkgeworICAgIG9wZW4obXkgJGlnbm9yZSwgJzwnLCAiJGlnbm9yZV9m aWxlIikKKwlvciB3YXJuICIkUDogQ2FuJ3QgZmluZCBhIHJlYWRhYmxlIC5nZXRfbWFpbnRhaW5l ci5pZ25vcmUgZmlsZSAkIVxuIjsKKyAgICB3aGlsZSAoPCRpZ25vcmU+KSB7CisJbXkgJGxpbmUg PSAkXzsKKworCSRsaW5lID1+IHMvXHMqXG4/JC8vOworCSRsaW5lID1+IHMvXlxzKi8vOworCSRs aW5lID1+IHMvXHMrJC8vOworCSRsaW5lID1+IHMvIy4qJC8vOworCisJbmV4dCBpZiAoJGxpbmUg PX4gbS9eXHMqJC8pOworCWlmIChyZmM4MjJfdmFsaWQoJGxpbmUpKSB7CisJICAgIHB1c2goQGln bm9yZV9lbWFpbHMsICRsaW5lKTsKKwl9CisgICAgfQorICAgIGNsb3NlKCRpZ25vcmUpOworfQor CitpZiAoJCNBUkdWID4gMCkgeworICAgIGZvcmVhY2ggKEBBUkdWKSB7CisgICAgICAgIGlmICgk XyA9fiAvXi17MSwyfXNlbGYtdGVzdCg/Oj18JCkvKSB7CisgICAgICAgICAgICBkaWUgIiRQOiB1 c2luZyAtLXNlbGYtdGVzdCBkb2VzIG5vdCBhbGxvdyBhbnkgb3RoZXIgb3B0aW9uIG9yIGFyZ3Vt ZW50XG4iOworICAgICAgICB9CisgICAgfQorfQorCitpZiAoIUdldE9wdGlvbnMoCisJCSdlbWFp bCEnID0+IFwkZW1haWwsCisJCSdnaXQhJyA9PiBcJGVtYWlsX2dpdCwKKwkJJ2dpdC1hbGwtc2ln bmF0dXJlLXR5cGVzIScgPT4gXCRlbWFpbF9naXRfYWxsX3NpZ25hdHVyZV90eXBlcywKKwkJJ2dp dC1ibGFtZSEnID0+IFwkZW1haWxfZ2l0X2JsYW1lLAorCQknZ2l0LWJsYW1lLXNpZ25hdHVyZXMh JyA9PiBcJGVtYWlsX2dpdF9ibGFtZV9zaWduYXR1cmVzLAorCQknZ2l0LWZhbGxiYWNrIScgPT4g XCRlbWFpbF9naXRfZmFsbGJhY2ssCisJCSdnaXQtY2hpZWYtcGVuZ3VpbnMhJyA9PiBcJGVtYWls X2dpdF9wZW5ndWluX2NoaWVmcywKKwkJJ2dpdC1taW4tc2lnbmF0dXJlcz1pJyA9PiBcJGVtYWls X2dpdF9taW5fc2lnbmF0dXJlcywKKwkJJ2dpdC1tYXgtbWFpbnRhaW5lcnM9aScgPT4gXCRlbWFp bF9naXRfbWF4X21haW50YWluZXJzLAorCQknZ2l0LW1pbi1wZXJjZW50PWknID0+IFwkZW1haWxf Z2l0X21pbl9wZXJjZW50LAorCQknZ2l0LXNpbmNlPXMnID0+IFwkZW1haWxfZ2l0X3NpbmNlLAor CQknaGctc2luY2U9cycgPT4gXCRlbWFpbF9oZ19zaW5jZSwKKwkJJ2l8aW50ZXJhY3RpdmUhJyA9 PiBcJGludGVyYWN0aXZlLAorCQkncmVtb3ZlLWR1cGxpY2F0ZXMhJyA9PiBcJGVtYWlsX3JlbW92 ZV9kdXBsaWNhdGVzLAorCQknbWFpbG1hcCEnID0+IFwkZW1haWxfdXNlX21haWxtYXAsCisJCSdt IScgPT4gXCRlbWFpbF9tYWludGFpbmVyLAorCQknciEnID0+IFwkZW1haWxfcmV2aWV3ZXIsCisJ CSduIScgPT4gXCRlbWFpbF91c2VuYW1lLAorCQknbCEnID0+IFwkZW1haWxfbGlzdCwKKwkJJ2Zp eGVzIScgPT4gXCRlbWFpbF9maXhlcywKKwkJJ21vZGVyYXRlZCEnID0+IFwkZW1haWxfbW9kZXJh dGVkX2xpc3QsCisJCSdzIScgPT4gXCRlbWFpbF9zdWJzY3JpYmVyX2xpc3QsCisJCSdtdWx0aWxp bmUhJyA9PiBcJG91dHB1dF9tdWx0aWxpbmUsCisJCSdyb2xlcyEnID0+IFwkb3V0cHV0X3JvbGVz LAorCQkncm9sZXN0YXRzIScgPT4gXCRvdXRwdXRfcm9sZXN0YXRzLAorCQknc2VwYXJhdG9yPXMn ID0+IFwkb3V0cHV0X3NlcGFyYXRvciwKKwkJJ3N1YnN5c3RlbSEnID0+IFwkc3Vic3lzdGVtLAor CQknc3RhdHVzIScgPT4gXCRzdGF0dXMsCisJCSdzY20hJyA9PiBcJHNjbSwKKwkJJ3RyZWUhJyA9 PiBcJHRyZWUsCisJCSd3ZWIhJyA9PiBcJHdlYiwKKwkJJ2xldHRlcnM9cycgPT4gXCRsZXR0ZXJz LAorCQkncGF0dGVybi1kZXB0aD1pJyA9PiBcJHBhdHRlcm5fZGVwdGgsCisJCSdrfGtleXdvcmRz IScgPT4gXCRrZXl3b3JkcywKKwkJJ3NlY3Rpb25zIScgPT4gXCRzZWN0aW9ucywKKwkJJ2ZlfGZp bGUtZW1haWxzIScgPT4gXCRlbWFpbF9maWxlX2VtYWlscywKKwkJJ2Z8ZmlsZScgPT4gXCRmcm9t X2ZpbGVuYW1lLAorCQknZmluZC1tYWludGFpbmVyLWZpbGVzJyA9PiBcJGZpbmRfbWFpbnRhaW5l cl9maWxlcywKKwkJJ21wYXRofG1haW50YWluZXItcGF0aD1zJyA9PiBcJG1haW50YWluZXJfcGF0 aCwKKwkJJ3NlbGYtdGVzdDpzJyA9PiBcJHNlbGZfdGVzdCwKKwkJJ3Z8dmVyc2lvbicgPT4gXCR2 ZXJzaW9uLAorCQknaHxoZWxwfHVzYWdlJyA9PiBcJGhlbHAsCisJCSkpIHsKKyAgICBkaWUgIiRQ OiBpbnZhbGlkIGFyZ3VtZW50IC0gdXNlIC0taGVscCBpZiBuZWNlc3NhcnlcbiI7Cit9CisKK2lm ICgkaGVscCAhPSAwKSB7CisgICAgdXNhZ2UoKTsKKyAgICBleGl0IDA7Cit9CisKK2lmICgkdmVy c2lvbiAhPSAwKSB7CisgICAgcHJpbnQoIiR7UH0gJHtWfVxuIik7CisgICAgZXhpdCAwOworfQor CitpZiAoZGVmaW5lZCAkc2VsZl90ZXN0KSB7CisgICAgcmVhZF9hbGxfbWFpbnRhaW5lcl9maWxl cygpOworICAgIHNlbGZfdGVzdCgpOworICAgIGV4aXQgMDsKK30KKworaWYgKC10IFNURElOICYm ICFAQVJHVikgeworICAgICMgV2UncmUgdGFsa2luZyB0byBhIHRlcm1pbmFsLCBidXQgaGF2ZSBu byBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgorICAgIGRpZSAiJFA6IG1pc3NpbmcgcGF0Y2hmaWxl IG9yIC1mIGZpbGUgLSB1c2UgLS1oZWxwIGlmIG5lY2Vzc2FyeVxuIjsKK30KKworJG91dHB1dF9t dWx0aWxpbmUgPSAwIGlmICgkb3V0cHV0X3NlcGFyYXRvciBuZSAiLCAiKTsKKyRvdXRwdXRfcm9s ZXN0YXRzID0gMSBpZiAoJGludGVyYWN0aXZlKTsKKyRvdXRwdXRfcm9sZXMgPSAxIGlmICgkb3V0 cHV0X3JvbGVzdGF0cyk7CisKK2lmICgkc2VjdGlvbnMgfHwgJGxldHRlcnMgbmUgIiIpIHsKKyAg ICAkc2VjdGlvbnMgPSAxOworICAgICRlbWFpbCA9IDA7CisgICAgJGVtYWlsX2xpc3QgPSAwOwor ICAgICRzY20gPSAwOworICAgICRzdGF0dXMgPSAwOworICAgICRzdWJzeXN0ZW0gPSAwOworICAg ICR3ZWIgPSAwOworICAgICRrZXl3b3JkcyA9IDA7CisgICAgJGludGVyYWN0aXZlID0gMDsKK30g ZWxzZSB7CisgICAgbXkgJHNlbGVjdGlvbnMgPSAkZW1haWwgKyAkc2NtICsgJHN0YXR1cyArICRz dWJzeXN0ZW0gKyAkd2ViOworICAgIGlmICgkc2VsZWN0aW9ucyA9PSAwKSB7CisJZGllICIkUDog IE1pc3NpbmcgcmVxdWlyZWQgb3B0aW9uOiBlbWFpbCwgc2NtLCBzdGF0dXMsIHN1YnN5c3RlbSBv ciB3ZWJcbiI7CisgICAgfQorfQorCitpZiAoJGVtYWlsICYmCisgICAgKCRlbWFpbF9tYWludGFp bmVyICsgJGVtYWlsX3Jldmlld2VyICsKKyAgICAgJGVtYWlsX2xpc3QgKyAkZW1haWxfc3Vic2Ny aWJlcl9saXN0ICsKKyAgICAgJGVtYWlsX2dpdCArICRlbWFpbF9naXRfcGVuZ3Vpbl9jaGllZnMg KyAkZW1haWxfZ2l0X2JsYW1lKSA9PSAwKSB7CisgICAgZGllICIkUDogUGxlYXNlIHNlbGVjdCBh dCBsZWFzdCAxIGVtYWlsIG9wdGlvblxuIjsKK30KKworIyMgUmVhZCBNQUlOVEFJTkVSUyBmb3Ig dHlwZS92YWx1ZSBwYWlycworCitteSBAdHlwZXZhbHVlID0gKCk7CitteSAla2V5d29yZF9oYXNo OworbXkgQG1maWxlcyA9ICgpOworbXkgQHNlbGZfdGVzdF9pbmZvID0gKCk7CisKK3N1YiByZWFk X21haW50YWluZXJfZmlsZSB7CisgICAgbXkgKCRmaWxlKSA9IEBfOworCisgICAgb3BlbiAobXkg JG1haW50LCAnPCcsICIkZmlsZSIpCisJb3IgZGllICIkUDogQ2FuJ3Qgb3BlbiBNQUlOVEFJTkVS UyBmaWxlICckZmlsZSc6ICQhXG4iOworICAgIG15ICRpID0gMTsKKyAgICB3aGlsZSAoPCRtYWlu dD4pIHsKKwlteSAkbGluZSA9ICRfOworCWNob21wICRsaW5lOworCisJaWYgKCRsaW5lID1+IG0v XihbQS1aXSk6XHMqKC4qKS8pIHsKKwkgICAgbXkgJHR5cGUgPSAkMTsKKwkgICAgbXkgJHZhbHVl ID0gJDI7CisKKwkgICAgIyNGaWxlbmFtZSBwYXR0ZXJuIG1hdGNoaW5nCisJICAgIGlmICgkdHlw ZSBlcSAiRiIgfHwgJHR5cGUgZXEgIlgiKSB7CisJCSR2YWx1ZSA9fiBzQFwuQFxcXC5AZzsgICAg ICAgIyNDb252ZXJ0IC4gdG8gXC4KKwkJJHZhbHVlID1+IHMvXCovXC5cKi9nOyAgICAgICAjI0Nv bnZlcnQgKiB0byAuKgorCQkkdmFsdWUgPX4gcy9cPy9cLi9nOyAgICAgICAgICMjQ29udmVydCA/ IHRvIC4KKwkJIyNpZiBwYXR0ZXJuIGlzIGEgZGlyZWN0b3J5IGFuZCBpdCBsYWNrcyBhIHRyYWls aW5nIHNsYXNoLCBhZGQgb25lCisJCWlmICgoLWQgJHZhbHVlKSkgeworCQkgICAgJHZhbHVlID1+ IHNAKFteL10pJEAkMS9AOworCQl9CisJICAgIH0gZWxzaWYgKCR0eXBlIGVxICJLIikgeworCQkk a2V5d29yZF9oYXNoe0B0eXBldmFsdWV9ID0gJHZhbHVlOworCSAgICB9CisJICAgIHB1c2goQHR5 cGV2YWx1ZSwgIiR0eXBlOiR2YWx1ZSIpOworCX0gZWxzaWYgKCEoL15ccyokLyB8fCAvXlxzKlwj LykpIHsKKwkgICAgcHVzaChAdHlwZXZhbHVlLCAkbGluZSk7CisJfQorCWlmIChkZWZpbmVkICRz ZWxmX3Rlc3QpIHsKKwkgICAgcHVzaChAc2VsZl90ZXN0X2luZm8sIHtmaWxlPT4kZmlsZSwgbGlu ZW5yPT4kaSwgbGluZT0+JGxpbmV9KTsKKwl9CisJJGkrKzsKKyAgICB9CisgICAgY2xvc2UoJG1h aW50KTsKK30KKworc3ViIGZpbmRfaXNfbWFpbnRhaW5lcl9maWxlIHsKKyAgICBteSAoJGZpbGUp ID0gJF87CisgICAgcmV0dXJuIGlmICgkZmlsZSAhfiBtQC9NQUlOVEFJTkVSUyRAKTsKKyAgICAk ZmlsZSA9ICRGaWxlOjpGaW5kOjpuYW1lOworICAgIHJldHVybiBpZiAoISAtZiAkZmlsZSk7Cisg ICAgcHVzaChAbWZpbGVzLCAkZmlsZSk7Cit9CisKK3N1YiBmaW5kX2lnbm9yZV9naXQgeworICAg IHJldHVybiBncmVwIHsgJF8gIX4gL15cLmdpdCQvOyB9IEBfOworfQorCityZWFkX2FsbF9tYWlu dGFpbmVyX2ZpbGVzKCk7CisKK3N1YiByZWFkX2FsbF9tYWludGFpbmVyX2ZpbGVzIHsKKyAgICBt eSAkcGF0aCA9ICIke2xrX3BhdGh9TUFJTlRBSU5FUlMiOworICAgIGlmIChkZWZpbmVkICRtYWlu dGFpbmVyX3BhdGgpIHsKKwkkcGF0aCA9ICRtYWludGFpbmVyX3BhdGg7CisJIyBQZXJsIENvb2ti b29rIHRpbGRlIGV4cGFuc2lvbiBpZiBuZWNlc3NhcnkKKwkkcGF0aCA9fiBzQF5+KFteL10qKUAg JDEgPyAoZ2V0cHduYW0oJDEpKVs3XSA6ICggJEVOVntIT01FfSB8fCAkRU5We0xPR0RJUn0gfHwg KGdldHB3dWlkKCQ8KSlbN10pQGV4OworICAgIH0KKworICAgIGlmICgtZCAkcGF0aCkgeworCSRw YXRoIC49ICcvJyBpZiAoJHBhdGggIX4gbUAvJEApOworCWlmICgkZmluZF9tYWludGFpbmVyX2Zp bGVzKSB7CisJICAgIGZpbmQoIHsgd2FudGVkID0+IFwmZmluZF9pc19tYWludGFpbmVyX2ZpbGUs CisJCSAgICBwcmVwcm9jZXNzID0+IFwmZmluZF9pZ25vcmVfZ2l0LAorCQkgICAgbm9fY2hkaXIg PT4gMSwKKwkJfSwgIiRwYXRoIik7CisJfSBlbHNlIHsKKwkgICAgb3BlbmRpcihESVIsICIkcGF0 aCIpIG9yIGRpZSAkITsKKwkgICAgbXkgQGZpbGVzID0gcmVhZGRpcihESVIpOworCSAgICBjbG9z ZWRpcihESVIpOworCSAgICBmb3JlYWNoIG15ICRmaWxlIChAZmlsZXMpIHsKKwkJcHVzaChAbWZp bGVzLCAiJHBhdGgkZmlsZSIpIGlmICgkZmlsZSAhfiAvXlwuLyk7CisJICAgIH0KKwl9CisgICAg fSBlbHNpZiAoLWYgIiRwYXRoIikgeworCXB1c2goQG1maWxlcywgIiRwYXRoIik7CisgICAgfSBl bHNlIHsKKwlkaWUgIiRQOiBNQUlOVEFJTkVSIGZpbGUgbm90IGZvdW5kICckcGF0aCdcbiI7Cisg ICAgfQorICAgIGRpZSAiJFA6IE5vIE1BSU5UQUlORVIgZmlsZXMgZm91bmQgaW4gJyRwYXRoJ1xu IiBpZiAoc2NhbGFyKEBtZmlsZXMpID09IDApOworICAgIGZvcmVhY2ggbXkgJGZpbGUgKEBtZmls ZXMpIHsKKwlyZWFkX21haW50YWluZXJfZmlsZSgiJGZpbGUiKTsKKyAgICB9Cit9CisKK3N1YiBt YWludGFpbmVyc19pbl9maWxlIHsKKyAgICBteSAoJGZpbGUpID0gQF87CisKKyAgICByZXR1cm4g aWYgKCRmaWxlID1+IG1AXGJNQUlOVEFJTkVSUyRAKTsKKworICAgIGlmICgtZiAkZmlsZSAmJiAo JGVtYWlsX2ZpbGVfZW1haWxzIHx8ICRmaWxlID1+IC9cLnlhbWwkLykpIHsKKwlvcGVuKG15ICRm LCAnPCcsICRmaWxlKQorCSAgICBvciBkaWUgIiRQOiBDYW4ndCBvcGVuICRmaWxlOiAkIVxuIjsK KwlteSAkdGV4dCA9IGRvIHsgbG9jYWwoJC8pIDsgPCRmPiB9OworCWNsb3NlKCRmKTsKKworCW15 IEBwb3NzX2FkZHIgPSAkdGV4dCA9fiBtJFtBLVphLXrDgC3Dv1wiXCcgXCxcLlwrLV0qXHMqW1ws XSpccypbXChcPFx7XXswLDF9W0EtWmEtejAtOV9cLlwrLV0rXEBbQS1aYS16MC05XC4tXStcLltB LVphLXowLTldK1tcKVw+XH1dezAsMX0kZzsKKwlwdXNoKEBmaWxlX2VtYWlscywgY2xlYW5fZmls ZV9lbWFpbHMoQHBvc3NfYWRkcikpOworICAgIH0KK30KKworIworIyBSZWFkIG1haWwgYWRkcmVz cyBtYXAKKyMKKworbXkgJG1haWxtYXA7CisKK3JlYWRfbWFpbG1hcCgpOworCitzdWIgcmVhZF9t YWlsbWFwIHsKKyAgICAkbWFpbG1hcCA9IHsKKwluYW1lcyA9PiB7fSwKKwlhZGRyZXNzZXMgPT4g e30KKyAgICB9OworCisgICAgcmV0dXJuIGlmICghJGVtYWlsX3VzZV9tYWlsbWFwIHx8ICEoLWYg IiR7bGtfcGF0aH0ubWFpbG1hcCIpKTsKKworICAgIG9wZW4obXkgJG1haWxtYXBfZmlsZSwgJzwn LCAiJHtsa19wYXRofS5tYWlsbWFwIikKKwlvciB3YXJuICIkUDogQ2FuJ3Qgb3BlbiAubWFpbG1h cDogJCFcbiI7CisKKyAgICB3aGlsZSAoPCRtYWlsbWFwX2ZpbGU+KSB7CisJcy8jLiokLy87ICNz dHJpcCBjb21tZW50cworCXMvXlxzK3xccyskLy9nOyAjdHJpbQorCisJbmV4dCBpZiAoL15ccyok Lyk7ICNza2lwIGVtcHR5IGxpbmVzCisJI2VudHJpZXMgaGF2ZSBvbmUgb2YgdGhlIGZvbGxvd2lu ZyBmb3JtYXRzOgorCSMgbmFtZTEgPG1haWwxPgorCSMgPG1haWwxPiA8bWFpbDI+CisJIyBuYW1l MSA8bWFpbDE+IDxtYWlsMj4KKwkjIG5hbWUxIDxtYWlsMT4gbmFtZTIgPG1haWwyPgorCSMgKHNl ZSBtYW4gZ2l0LXNob3J0bG9nKQorCisJaWYgKC9eKFtePF0rKTwoW14+XSspPiQvKSB7CisJICAg IG15ICRyZWFsX25hbWUgPSAkMTsKKwkgICAgbXkgJGFkZHJlc3MgPSAkMjsKKworCSAgICAkcmVh bF9uYW1lID1+IHMvXHMrJC8vOworCSAgICAoJHJlYWxfbmFtZSwgJGFkZHJlc3MpID0gcGFyc2Vf ZW1haWwoIiRyZWFsX25hbWUgPCRhZGRyZXNzPiIpOworCSAgICAkbWFpbG1hcC0+e25hbWVzfS0+ eyRhZGRyZXNzfSA9ICRyZWFsX25hbWU7CisKKwl9IGVsc2lmICgvXjwoW14+XSspPlxzKjwoW14+ XSspPiQvKSB7CisJICAgIG15ICRyZWFsX2FkZHJlc3MgPSAkMTsKKwkgICAgbXkgJHdyb25nX2Fk ZHJlc3MgPSAkMjsKKworCSAgICAkbWFpbG1hcC0+e2FkZHJlc3Nlc30tPnskd3JvbmdfYWRkcmVz c30gPSAkcmVhbF9hZGRyZXNzOworCisJfSBlbHNpZiAoL14oLispPChbXj5dKyk+XHMqPChbXj5d Kyk+JC8pIHsKKwkgICAgbXkgJHJlYWxfbmFtZSA9ICQxOworCSAgICBteSAkcmVhbF9hZGRyZXNz ID0gJDI7CisJICAgIG15ICR3cm9uZ19hZGRyZXNzID0gJDM7CisKKwkgICAgJHJlYWxfbmFtZSA9 fiBzL1xzKyQvLzsKKwkgICAgKCRyZWFsX25hbWUsICRyZWFsX2FkZHJlc3MpID0KKwkJcGFyc2Vf ZW1haWwoIiRyZWFsX25hbWUgPCRyZWFsX2FkZHJlc3M+Iik7CisJICAgICRtYWlsbWFwLT57bmFt ZXN9LT57JHdyb25nX2FkZHJlc3N9ID0gJHJlYWxfbmFtZTsKKwkgICAgJG1haWxtYXAtPnthZGRy ZXNzZXN9LT57JHdyb25nX2FkZHJlc3N9ID0gJHJlYWxfYWRkcmVzczsKKworCX0gZWxzaWYgKC9e KC4rKTwoW14+XSspPlxzKiguKylccyo8KFtePl0rKT4kLykgeworCSAgICBteSAkcmVhbF9uYW1l ID0gJDE7CisJICAgIG15ICRyZWFsX2FkZHJlc3MgPSAkMjsKKwkgICAgbXkgJHdyb25nX25hbWUg PSAkMzsKKwkgICAgbXkgJHdyb25nX2FkZHJlc3MgPSAkNDsKKworCSAgICAkcmVhbF9uYW1lID1+ IHMvXHMrJC8vOworCSAgICAoJHJlYWxfbmFtZSwgJHJlYWxfYWRkcmVzcykgPQorCQlwYXJzZV9l bWFpbCgiJHJlYWxfbmFtZSA8JHJlYWxfYWRkcmVzcz4iKTsKKworCSAgICAkd3JvbmdfbmFtZSA9 fiBzL1xzKyQvLzsKKwkgICAgKCR3cm9uZ19uYW1lLCAkd3JvbmdfYWRkcmVzcykgPQorCQlwYXJz ZV9lbWFpbCgiJHdyb25nX25hbWUgPCR3cm9uZ19hZGRyZXNzPiIpOworCisJICAgIG15ICR3cm9u Z19lbWFpbCA9IGZvcm1hdF9lbWFpbCgkd3JvbmdfbmFtZSwgJHdyb25nX2FkZHJlc3MsIDEpOwor CSAgICAkbWFpbG1hcC0+e25hbWVzfS0+eyR3cm9uZ19lbWFpbH0gPSAkcmVhbF9uYW1lOworCSAg ICAkbWFpbG1hcC0+e2FkZHJlc3Nlc30tPnskd3JvbmdfZW1haWx9ID0gJHJlYWxfYWRkcmVzczsK Kwl9CisgICAgfQorICAgIGNsb3NlKCRtYWlsbWFwX2ZpbGUpOworfQorCisjIyB1c2UgdGhlIGZp bGVuYW1lcyBvbiB0aGUgY29tbWFuZCBsaW5lIG9yIGZpbmQgdGhlIGZpbGVuYW1lcyBpbiB0aGUg cGF0Y2hmaWxlcworCitpZiAoIUBBUkdWKSB7CisgICAgcHVzaChAQVJHViwgIiZTVERJTiIpOwor fQorCitmb3JlYWNoIG15ICRmaWxlIChAQVJHVikgeworICAgIGlmICgkZmlsZSBuZSAiJlNURElO IikgeworCSRmaWxlID0gY2Fub25wYXRoKCRmaWxlKTsKKwkjI2lmICRmaWxlIGlzIGEgZGlyZWN0 b3J5IGFuZCBpdCBsYWNrcyBhIHRyYWlsaW5nIHNsYXNoLCBhZGQgb25lCisJaWYgKCgtZCAkZmls ZSkpIHsKKwkgICAgJGZpbGUgPX4gc0AoW14vXSkkQCQxL0A7CisJfSBlbHNpZiAoISgtZiAkZmls ZSkpIHsKKwkgICAgZGllICIkUDogZmlsZSAnJHtmaWxlfScgbm90IGZvdW5kXG4iOworCX0KKyAg ICB9CisgICAgaWYgKCRmcm9tX2ZpbGVuYW1lICYmICh2Y3NfZXhpc3RzKCkgJiYgIXZjc19maWxl X2V4aXN0cygkZmlsZSkpKSB7CisJd2FybiAiJFA6IGZpbGUgJyRmaWxlJyBub3QgZm91bmQgaW4g dmVyc2lvbiBjb250cm9sICQhXG4iOworICAgIH0KKyAgICBpZiAoJGZyb21fZmlsZW5hbWUgfHwg KCRmaWxlIG5lICImU1RESU4iICYmIHZjc19maWxlX2V4aXN0cygkZmlsZSkpKSB7CisJJGZpbGUg PX4gcy9eXFEke2N1cl9wYXRofVxFLy87CSNzdHJpcCBhbnkgYWJzb2x1dGUgcGF0aAorCSRmaWxl ID1+IHMvXlxRJHtsa19wYXRofVxFLy87CSNvciB0aGUgcGF0aCB0byB0aGUgbGsgdHJlZQorCXB1 c2goQGZpbGVzLCAkZmlsZSk7CisJaWYgKCRmaWxlIG5lICJNQUlOVEFJTkVSUyIgJiYgLWYgJGZp bGUgJiYgJGtleXdvcmRzKSB7CisJICAgIG9wZW4obXkgJGYsICc8JywgJGZpbGUpCisJCW9yIGRp ZSAiJFA6IENhbid0IG9wZW4gJGZpbGU6ICQhXG4iOworCSAgICBteSAkdGV4dCA9IGRvIHsgbG9j YWwoJC8pIDsgPCRmPiB9OworCSAgICBjbG9zZSgkZik7CisJICAgIGlmICgka2V5d29yZHMpIHsK KwkJZm9yZWFjaCBteSAkbGluZSAoa2V5cyAla2V5d29yZF9oYXNoKSB7CisJCSAgICBpZiAoJHRl eHQgPX4gbS8ka2V5d29yZF9oYXNoeyRsaW5lfS94KSB7CisJCQlwdXNoKEBrZXl3b3JkX3R2aSwg JGxpbmUpOworCQkgICAgfQorCQl9CisJICAgIH0KKwl9CisgICAgfSBlbHNlIHsKKwlteSAkZmls ZV9jbnQgPSBAZmlsZXM7CisJbXkgJGxhc3RmaWxlOworCisJb3BlbihteSAkcGF0Y2gsICI8ICRm aWxlIikKKwkgICAgb3IgZGllICIkUDogQ2FuJ3Qgb3BlbiAkZmlsZTogJCFcbiI7CisKKwkjIFdl IGNhbiBjaGVjayBhcmJpdHJhcnkgaW5mb3JtYXRpb24gYmVmb3JlIHRoZSBwYXRjaAorCSMgbGlr ZSB0aGUgY29tbWl0IG1lc3NhZ2UsIG1haWwgaGVhZGVycywgZXRjLi4uCisJIyBUaGlzIGFsbG93 cyB1cyB0byBtYXRjaCBhcmJpdHJhcnkga2V5d29yZHMgYWdhaW5zdCBhbnkgcGFydAorCSMgb2Yg YSBnaXQgZm9ybWF0LXBhdGNoIGdlbmVyYXRlZCBmaWxlIChzdWJqZWN0IHRhZ3MsIGV0Yy4uLikK KworCW15ICRwYXRjaF9wcmVmaXggPSAiIjsJCQkjUGFyc2luZyB0aGUgaW50cm8KKworCXdoaWxl ICg8JHBhdGNoPikgeworCSAgICBteSAkcGF0Y2hfbGluZSA9ICRfOworCSAgICBpZiAobS9eIG1v ZGUgY2hhbmdlIFswLTddKyA9PiBbMC03XSsgKFxTKylccyokLykgeworCQlteSAkZmlsZW5hbWUg PSAkMTsKKwkJcHVzaChAZmlsZXMsICRmaWxlbmFtZSk7CisJICAgIH0gZWxzaWYgKG0vXnJlbmFt ZSAoPzpmcm9tfHRvKSAoXFMrKVxzKiQvKSB7CisJCW15ICRmaWxlbmFtZSA9ICQxOworCQlwdXNo KEBmaWxlcywgJGZpbGVuYW1lKTsKKwkgICAgfSBlbHNpZiAobS9eZGlmZiAtLWdpdCBhXC8oXFMr KSBiXC8oXFMrKVxzKiQvKSB7CisJCW15ICRmaWxlbmFtZTEgPSAkMTsKKwkJbXkgJGZpbGVuYW1l MiA9ICQyOworCQlwdXNoKEBmaWxlcywgJGZpbGVuYW1lMSk7CisJCXB1c2goQGZpbGVzLCAkZmls ZW5hbWUyKTsKKwkgICAgfSBlbHNpZiAobS9eRml4ZXM6XHMrKFswLTlhLWZBLUZdezYsNDB9KS8p IHsKKwkJcHVzaChAZml4ZXMsICQxKSBpZiAoJGVtYWlsX2ZpeGVzKTsKKwkgICAgfSBlbHNpZiAo bS9eXCtcK1wrXHMrKFxTKykvIG9yIG0vXi0tLVxzKyhcUyspLykgeworCQlteSAkZmlsZW5hbWUg PSAkMTsKKwkJJGZpbGVuYW1lID1+IHNAXlteL10qL0BAOworCQkkZmlsZW5hbWUgPX4gc0BcbkBA OworCQkkbGFzdGZpbGUgPSAkZmlsZW5hbWU7CisJCXB1c2goQGZpbGVzLCAkZmlsZW5hbWUpOwor CQkkcGF0Y2hfcHJlZml4ID0gIl5bKy1dLioiOwkjTm93IHBhcnNpbmcgdGhlIGFjdHVhbCBwYXRj aAorCSAgICB9IGVsc2lmIChtL15cQFxAIC0oXGQrKSwoXGQrKS8pIHsKKwkJaWYgKCRlbWFpbF9n aXRfYmxhbWUpIHsKKwkJICAgIHB1c2goQHJhbmdlLCAiJGxhc3RmaWxlOiQxOiQyIik7CisJCX0K KwkgICAgfSBlbHNpZiAoJGtleXdvcmRzKSB7CisJCWZvcmVhY2ggbXkgJGxpbmUgKGtleXMgJWtl eXdvcmRfaGFzaCkgeworCQkgICAgaWYgKCRwYXRjaF9saW5lID1+IG0vJHtwYXRjaF9wcmVmaXh9 JGtleXdvcmRfaGFzaHskbGluZX0veCkgeworCQkJcHVzaChAa2V5d29yZF90dmksICRsaW5lKTsK KwkJICAgIH0KKwkJfQorCSAgICB9CisJfQorCWNsb3NlKCRwYXRjaCk7CisKKwlpZiAoJGZpbGVf Y250ID09IEBmaWxlcykgeworCSAgICB3YXJuICIkUDogZmlsZSAnJHtmaWxlfScgZG9lc24ndCBh cHBlYXIgdG8gYmUgYSBwYXRjaC4gICIKKwkJLiAiQWRkIC1mIHRvIG9wdGlvbnM/XG4iOworCX0K KwlAZmlsZXMgPSBzb3J0X2FuZF91bmlxKEBmaWxlcyk7CisgICAgfQorfQorCitAZmlsZV9lbWFp bHMgPSB1bmlxKEBmaWxlX2VtYWlscyk7CitAZml4ZXMgPSB1bmlxKEBmaXhlcyk7CisKK215ICVl bWFpbF9oYXNoX25hbWU7CitteSAlZW1haWxfaGFzaF9hZGRyZXNzOworbXkgQGVtYWlsX3RvID0g KCk7CitteSAlaGFzaF9saXN0X3RvOworbXkgQGxpc3RfdG8gPSAoKTsKK215IEBzY20gPSAoKTsK K215IEB3ZWIgPSAoKTsKK215IEBzdWJzeXN0ZW0gPSAoKTsKK215IEBzdGF0dXMgPSAoKTsKK215 ICVkZWR1cGxpY2F0ZV9uYW1lX2hhc2ggPSAoKTsKK215ICVkZWR1cGxpY2F0ZV9hZGRyZXNzX2hh c2ggPSAoKTsKKworbXkgQG1haW50YWluZXJzID0gZ2V0X21haW50YWluZXJzKCk7CitpZiAoQG1h aW50YWluZXJzKSB7CisgICAgQG1haW50YWluZXJzID0gbWVyZ2VfZW1haWwoQG1haW50YWluZXJz KTsKKyAgICBvdXRwdXQoQG1haW50YWluZXJzKTsKK30KKworaWYgKCRzY20pIHsKKyAgICBAc2Nt ID0gdW5pcShAc2NtKTsKKyAgICBvdXRwdXQoQHNjbSk7Cit9CisKK2lmICgkc3RhdHVzKSB7Cisg ICAgQHN0YXR1cyA9IHVuaXEoQHN0YXR1cyk7CisgICAgb3V0cHV0KEBzdGF0dXMpOworfQorCitp ZiAoJHN1YnN5c3RlbSkgeworICAgIEBzdWJzeXN0ZW0gPSB1bmlxKEBzdWJzeXN0ZW0pOworICAg IG91dHB1dChAc3Vic3lzdGVtKTsKK30KKworaWYgKCR3ZWIpIHsKKyAgICBAd2ViID0gdW5pcShA d2ViKTsKKyAgICBvdXRwdXQoQHdlYik7Cit9CisKK2V4aXQoJGV4aXQpOworCitzdWIgc2VsZl90 ZXN0IHsKKyAgICBteSBAbHNmaWxlcyA9ICgpOworICAgIG15IEBnb29kX2xpbmtzID0gKCk7Cisg ICAgbXkgQGJhZF9saW5rcyA9ICgpOworICAgIG15IEBzZWN0aW9uX2hlYWRlcnMgPSAoKTsKKyAg ICBteSAkaW5kZXggPSAwOworCisgICAgQGxzZmlsZXMgPSB2Y3NfbGlzdF9maWxlcygkbGtfcGF0 aCk7CisKKyAgICBmb3IgbXkgJHggKEBzZWxmX3Rlc3RfaW5mbykgeworCSRpbmRleCsrOworCisJ IyMgU2VjdGlvbiBoZWFkZXIgZHVwbGljYXRpb24gYW5kIG1pc3Npbmcgc2VjdGlvbiBjb250ZW50 CisJaWYgKCgkc2VsZl90ZXN0IGVxICIiIHx8ICRzZWxmX3Rlc3QgPX4gL1xic2VjdGlvbnNcYi8p ICYmCisJICAgICR4LT57bGluZX0gPX4gL15cU1teOl0vICYmCisJICAgIGRlZmluZWQgJHNlbGZf dGVzdF9pbmZvWyRpbmRleF0gJiYKKwkgICAgJHNlbGZfdGVzdF9pbmZvWyRpbmRleF0tPntsaW5l fSA9fiAvXihbQS1aXSk6XHMqXFMvKSB7CisJICAgIG15ICRoYXNfUyA9IDA7CisJICAgIG15ICRo YXNfRiA9IDA7CisJICAgIG15ICRoYXNfTUwgPSAwOworCSAgICBteSAkc3RhdHVzID0gIiI7CisJ ICAgIGlmIChncmVwKG1AXlxRJHgtPntsaW5lfVxFQCwgQHNlY3Rpb25faGVhZGVycykpIHsKKwkJ cHJpbnQoIiR4LT57ZmlsZX06JHgtPntsaW5lbnJ9OiB3YXJuaW5nOiBkdXBsaWNhdGUgc2VjdGlv biBoZWFkZXJcdCR4LT57bGluZX1cbiIpOworCSAgICB9IGVsc2UgeworCQlwdXNoKEBzZWN0aW9u X2hlYWRlcnMsICR4LT57bGluZX0pOworCSAgICB9CisJICAgIG15ICRuZXh0bGluZSA9ICRpbmRl eDsKKwkgICAgd2hpbGUgKGRlZmluZWQgJHNlbGZfdGVzdF9pbmZvWyRuZXh0bGluZV0gJiYKKwkJ ICAgJHNlbGZfdGVzdF9pbmZvWyRuZXh0bGluZV0tPntsaW5lfSA9fiAvXihbQS1aXSk6XHMqKFxT LiopLykgeworCQlteSAkdHlwZSA9ICQxOworCQlteSAkdmFsdWUgPSAkMjsKKwkJaWYgKCR0eXBl IGVxICJTIikgeworCQkgICAgJGhhc19TID0gMTsKKwkJICAgICRzdGF0dXMgPSAkdmFsdWU7CisJ CX0gZWxzaWYgKCR0eXBlIGVxICJGIiB8fCAkdHlwZSBlcSAiTiIpIHsKKwkJICAgICRoYXNfRiA9 IDE7CisJCX0gZWxzaWYgKCR0eXBlIGVxICJNIiB8fCAkdHlwZSBlcSAiUiIgfHwgJHR5cGUgZXEg IkwiKSB7CisJCSAgICAkaGFzX01MID0gMTsKKwkJfQorCQkkbmV4dGxpbmUrKzsKKwkgICAgfQor CSAgICBpZiAoISRoYXNfTUwgJiYgJHN0YXR1cyAhfiAvb3JwaGFufG9ic29sZXRlL2kpIHsKKwkJ cHJpbnQoIiR4LT57ZmlsZX06JHgtPntsaW5lbnJ9OiB3YXJuaW5nOiBzZWN0aW9uIHdpdGhvdXQg ZW1haWwgYWRkcmVzc1x0JHgtPntsaW5lfVxuIik7CisJICAgIH0KKwkgICAgaWYgKCEkaGFzX1Mp IHsKKwkJcHJpbnQoIiR4LT57ZmlsZX06JHgtPntsaW5lbnJ9OiB3YXJuaW5nOiBzZWN0aW9uIHdp dGhvdXQgc3RhdHVzIFx0JHgtPntsaW5lfVxuIik7CisJICAgIH0KKwkgICAgaWYgKCEkaGFzX0Yp IHsKKwkJcHJpbnQoIiR4LT57ZmlsZX06JHgtPntsaW5lbnJ9OiB3YXJuaW5nOiBzZWN0aW9uIHdp dGhvdXQgZmlsZSBwYXR0ZXJuXHQkeC0+e2xpbmV9XG4iKTsKKwkgICAgfQorCX0KKworCW5leHQg aWYgKCR4LT57bGluZX0gIX4gL14oW0EtWl0pOlxzKiguKikvKTsKKworCW15ICR0eXBlID0gJDE7 CisJbXkgJHZhbHVlID0gJDI7CisKKwkjIyBGaWxlbmFtZSBwYXR0ZXJuIG1hdGNoaW5nCisJaWYg KCgkdHlwZSBlcSAiRiIgfHwgJHR5cGUgZXEgIlgiKSAmJgorCSAgICAoJHNlbGZfdGVzdCBlcSAi IiB8fCAkc2VsZl90ZXN0ID1+IC9cYnBhdHRlcm5zXGIvKSkgeworCSAgICAkdmFsdWUgPX4gc0Bc LkBcXFwuQGc7ICAgICAgICMjQ29udmVydCAuIHRvIFwuCisJICAgICR2YWx1ZSA9fiBzL1wqL1wu XCovZzsgICAgICAgIyNDb252ZXJ0ICogdG8gLioKKwkgICAgJHZhbHVlID1+IHMvXD8vXC4vZzsg ICAgICAgICAjI0NvbnZlcnQgPyB0byAuCisJICAgICMjaWYgcGF0dGVybiBpcyBhIGRpcmVjdG9y eSBhbmQgaXQgbGFja3MgYSB0cmFpbGluZyBzbGFzaCwgYWRkIG9uZQorCSAgICBpZiAoKC1kICR2 YWx1ZSkpIHsKKwkJJHZhbHVlID1+IHNAKFteL10pJEAkMS9AOworCSAgICB9CisJICAgIGlmICgh Z3JlcChtQF4kdmFsdWVALCBAbHNmaWxlcykpIHsKKwkJcHJpbnQoIiR4LT57ZmlsZX06JHgtPnts aW5lbnJ9OiB3YXJuaW5nOiBubyBmaWxlIG1hdGNoZXNcdCR4LT57bGluZX1cbiIpOworCSAgICB9 CisKKwkjIyBMaW5rIHJlYWNoYWJpbGl0eQorCX0gZWxzaWYgKCgkdHlwZSBlcSAiVyIgfHwgJHR5 cGUgZXEgIlEiIHx8ICR0eXBlIGVxICJCIikgJiYKKwkJICR2YWx1ZSA9fiAvXmh0dHBzPzovICYm CisJCSAoJHNlbGZfdGVzdCBlcSAiIiB8fCAkc2VsZl90ZXN0ID1+IC9cYmxpbmtzXGIvKSkgewor CSAgICBuZXh0IGlmIChncmVwKG1AXlxRJHZhbHVlXEUkQCwgQGdvb2RfbGlua3MpKTsKKwkgICAg bXkgJGlzYmFkID0gMDsKKwkgICAgaWYgKGdyZXAobUBeXFEkdmFsdWVcRSRALCBAYmFkX2xpbmtz KSkgeworCSAgICAgICAgJGlzYmFkID0gMTsKKwkgICAgfSBlbHNlIHsKKwkJbXkgJG91dHB1dCA9 IGB3Z2V0IC0tc3BpZGVyIC1xIC0tbm8tY2hlY2stY2VydGlmaWNhdGUgLS10aW1lb3V0IDEwIC0t dHJpZXMgMSAkdmFsdWVgOworCQlpZiAoJD8gPT0gMCkgeworCQkgICAgcHVzaChAZ29vZF9saW5r cywgJHZhbHVlKTsKKwkJfSBlbHNlIHsKKwkJICAgIHB1c2goQGJhZF9saW5rcywgJHZhbHVlKTsK KwkJICAgICRpc2JhZCA9IDE7CisJCX0KKwkgICAgfQorCSAgICBpZiAoJGlzYmFkKSB7CisJICAg ICAgICBwcmludCgiJHgtPntmaWxlfTokeC0+e2xpbmVucn06IHdhcm5pbmc6IHBvc3NpYmxlIGJh ZCBsaW5rXHQkeC0+e2xpbmV9XG4iKTsKKwkgICAgfQorCisJIyMgU0NNIHJlYWNoYWJpbGl0eQor CX0gZWxzaWYgKCR0eXBlIGVxICJUIiAmJgorCQkgKCRzZWxmX3Rlc3QgZXEgIiIgfHwgJHNlbGZf dGVzdCA9fiAvXGJzY21cYi8pKSB7CisJICAgIG5leHQgaWYgKGdyZXAobUBeXFEkdmFsdWVcRSRA LCBAZ29vZF9saW5rcykpOworCSAgICBteSAkaXNiYWQgPSAwOworCSAgICBpZiAoZ3JlcChtQF5c USR2YWx1ZVxFJEAsIEBiYWRfbGlua3MpKSB7CisJICAgICAgICAkaXNiYWQgPSAxOworICAgICAg ICAgICAgfSBlbHNpZiAoJHZhbHVlICF+IC9eKD86Z2l0fHF1aWx0fGhnKVxzK1xTLykgeworCQlw cmludCgiJHgtPntmaWxlfTokeC0+e2xpbmVucn06IHdhcm5pbmc6IG1hbGZvcm1lZCBlbnRyeVx0 JHgtPntsaW5lfVxuIik7CisJICAgIH0gZWxzaWYgKCR2YWx1ZSA9fiAvXmdpdFxzKyhcUyspKFxz KyhbXlwoXStcUyspKT8vKSB7CisJCW15ICR1cmwgPSAkMTsKKwkJbXkgJGJyYW5jaCA9ICIiOwor CQkkYnJhbmNoID0gJDMgaWYgJDM7CisJCW15ICRvdXRwdXQgPSBgZ2l0IGxzLXJlbW90ZSAtLWV4 aXQtY29kZSAtaCAiJHVybCIgJGJyYW5jaCA+IC9kZXYvbnVsbCAyPiYxYDsKKwkJaWYgKCQ/ID09 IDApIHsKKwkJICAgIHB1c2goQGdvb2RfbGlua3MsICR2YWx1ZSk7CisJCX0gZWxzZSB7CisJCSAg ICBwdXNoKEBiYWRfbGlua3MsICR2YWx1ZSk7CisJCSAgICAkaXNiYWQgPSAxOworCQl9CisJICAg IH0gZWxzaWYgKCR2YWx1ZSA9fiAvXig/OnF1aWx0fGhnKVxzKyhodHRwcz86XFMrKS8pIHsKKwkJ bXkgJHVybCA9ICQxOworCQlteSAkb3V0cHV0ID0gYHdnZXQgLS1zcGlkZXIgLXEgLS1uby1jaGVj ay1jZXJ0aWZpY2F0ZSAtLXRpbWVvdXQgMTAgLS10cmllcyAxICR1cmxgOworCQlpZiAoJD8gPT0g MCkgeworCQkgICAgcHVzaChAZ29vZF9saW5rcywgJHZhbHVlKTsKKwkJfSBlbHNlIHsKKwkJICAg IHB1c2goQGJhZF9saW5rcywgJHZhbHVlKTsKKwkJICAgICRpc2JhZCA9IDE7CisJCX0KKwkgICAg fQorCSAgICBpZiAoJGlzYmFkKSB7CisJCXByaW50KCIkeC0+e2ZpbGV9OiR4LT57bGluZW5yfTog d2FybmluZzogcG9zc2libGUgYmFkIGxpbmtcdCR4LT57bGluZX1cbiIpOworCSAgICB9CisJfQor ICAgIH0KK30KKworc3ViIGlnbm9yZV9lbWFpbF9hZGRyZXNzIHsKKyAgICBteSAoJGFkZHJlc3Mp ID0gQF87CisKKyAgICBmb3JlYWNoIG15ICRpZ25vcmUgKEBpZ25vcmVfZW1haWxzKSB7CisJcmV0 dXJuIDEgaWYgKCRpZ25vcmUgZXEgJGFkZHJlc3MpOworICAgIH0KKworICAgIHJldHVybiAwOwor fQorCitzdWIgcmFuZ2VfaXNfbWFpbnRhaW5lZCB7CisgICAgbXkgKCRzdGFydCwgJGVuZCkgPSBA XzsKKworICAgIGZvciAobXkgJGkgPSAkc3RhcnQ7ICRpIDwgJGVuZDsgJGkrKykgeworCW15ICRs aW5lID0gJHR5cGV2YWx1ZVskaV07CisJaWYgKCRsaW5lID1+IG0vXihbQS1aXSk6XHMqKC4qKS8p IHsKKwkgICAgbXkgJHR5cGUgPSAkMTsKKwkgICAgbXkgJHZhbHVlID0gJDI7CisJICAgIGlmICgk dHlwZSBlcSAnUycpIHsKKwkJaWYgKCR2YWx1ZSA9fiAvKG1haW50YWlufHN1cHBvcnQpL2kpIHsK KwkJICAgIHJldHVybiAxOworCQl9CisJICAgIH0KKwl9CisgICAgfQorICAgIHJldHVybiAwOwor fQorCitzdWIgcmFuZ2VfaGFzX21haW50YWluZXIgeworICAgIG15ICgkc3RhcnQsICRlbmQpID0g QF87CisKKyAgICBmb3IgKG15ICRpID0gJHN0YXJ0OyAkaSA8ICRlbmQ7ICRpKyspIHsKKwlteSAk bGluZSA9ICR0eXBldmFsdWVbJGldOworCWlmICgkbGluZSA9fiBtL14oW0EtWl0pOlxzKiguKikv KSB7CisJICAgIG15ICR0eXBlID0gJDE7CisJICAgIG15ICR2YWx1ZSA9ICQyOworCSAgICBpZiAo JHR5cGUgZXEgJ00nKSB7CisJCXJldHVybiAxOworCSAgICB9CisJfQorICAgIH0KKyAgICByZXR1 cm4gMDsKK30KKworc3ViIGdldF9tYWludGFpbmVycyB7CisgICAgJWVtYWlsX2hhc2hfbmFtZSA9 ICgpOworICAgICVlbWFpbF9oYXNoX2FkZHJlc3MgPSAoKTsKKyAgICAlY29tbWl0X2F1dGhvcl9o YXNoID0gKCk7CisgICAgJWNvbW1pdF9zaWduZXJfaGFzaCA9ICgpOworICAgIEBlbWFpbF90byA9 ICgpOworICAgICVoYXNoX2xpc3RfdG8gPSAoKTsKKyAgICBAbGlzdF90byA9ICgpOworICAgIEBz Y20gPSAoKTsKKyAgICBAd2ViID0gKCk7CisgICAgQHN1YnN5c3RlbSA9ICgpOworICAgIEBzdGF0 dXMgPSAoKTsKKyAgICAlZGVkdXBsaWNhdGVfbmFtZV9oYXNoID0gKCk7CisgICAgJWRlZHVwbGlj YXRlX2FkZHJlc3NfaGFzaCA9ICgpOworICAgIGlmICgkZW1haWxfZ2l0X2FsbF9zaWduYXR1cmVf dHlwZXMpIHsKKwkkc2lnbmF0dXJlX3BhdHRlcm4gPSAiKC4rPylbQmJdW1l5XToiOworICAgIH0g ZWxzZSB7CisJJHNpZ25hdHVyZV9wYXR0ZXJuID0gIlwoIiAuIGpvaW4oInwiLCBAc2lnbmF0dXJl X3RhZ3MpIC4gIlwpIjsKKyAgICB9CisKKyAgICAjIEZpbmQgcmVzcG9uc2libGUgcGFydGllcwor CisgICAgbXkgJWV4YWN0X3BhdHRlcm5fbWF0Y2hfaGFzaCA9ICgpOworCisgICAgZm9yZWFjaCBt eSAkZmlsZSAoQGZpbGVzKSB7CisKKwlteSAlaGFzaDsKKwlteSAkdHZpID0gZmluZF9maXJzdF9z ZWN0aW9uKCk7CisJd2hpbGUgKCR0dmkgPCBAdHlwZXZhbHVlKSB7CisJICAgIG15ICRzdGFydCA9 IGZpbmRfc3RhcnRpbmdfaW5kZXgoJHR2aSk7CisJICAgIG15ICRlbmQgPSBmaW5kX2VuZGluZ19p bmRleCgkdHZpKTsKKwkgICAgbXkgJGV4Y2x1ZGUgPSAwOworCSAgICBteSAkaTsKKworCSAgICAj RG8gbm90IG1hdGNoIGV4Y2x1ZGVkIGZpbGUgcGF0dGVybnMKKworCSAgICBmb3IgKCRpID0gJHN0 YXJ0OyAkaSA8ICRlbmQ7ICRpKyspIHsKKwkJbXkgJGxpbmUgPSAkdHlwZXZhbHVlWyRpXTsKKwkJ aWYgKCRsaW5lID1+IG0vXihbQS1aXSk6XHMqKC4qKS8pIHsKKwkJICAgIG15ICR0eXBlID0gJDE7 CisJCSAgICBteSAkdmFsdWUgPSAkMjsKKwkJICAgIGlmICgkdHlwZSBlcSAnWCcpIHsKKwkJCWlm IChmaWxlX21hdGNoX3BhdHRlcm4oJGZpbGUsICR2YWx1ZSkpIHsKKwkJCSAgICAkZXhjbHVkZSA9 IDE7CisJCQkgICAgbGFzdDsKKwkJCX0KKwkJICAgIH0KKwkJfQorCSAgICB9CisKKwkgICAgaWYg KCEkZXhjbHVkZSkgeworCQlmb3IgKCRpID0gJHN0YXJ0OyAkaSA8ICRlbmQ7ICRpKyspIHsKKwkJ ICAgIG15ICRsaW5lID0gJHR5cGV2YWx1ZVskaV07CisJCSAgICBpZiAoJGxpbmUgPX4gbS9eKFtB LVpdKTpccyooLiopLykgeworCQkJbXkgJHR5cGUgPSAkMTsKKwkJCW15ICR2YWx1ZSA9ICQyOwor CQkJaWYgKCR0eXBlIGVxICdGJykgeworCQkJICAgIGlmIChmaWxlX21hdGNoX3BhdHRlcm4oJGZp bGUsICR2YWx1ZSkpIHsKKwkJCQlteSAkdmFsdWVfcGQgPSAoJHZhbHVlID1+IHRyQC9AQCk7CisJ CQkJbXkgJGZpbGVfcGQgPSAoJGZpbGUgID1+IHRyQC9AQCk7CisJCQkJJHZhbHVlX3BkKysgaWYg KHN1YnN0cigkdmFsdWUsLTEsMSkgbmUgIi8iKTsKKwkJCQkkdmFsdWVfcGQgPSAtMSBpZiAoJHZh bHVlID1+IC9eXC5cKi8pOworCQkJCWlmICgkdmFsdWVfcGQgPj0gJGZpbGVfcGQgJiYKKwkJCQkg ICAgcmFuZ2VfaXNfbWFpbnRhaW5lZCgkc3RhcnQsICRlbmQpICYmCisJCQkJICAgIHJhbmdlX2hh c19tYWludGFpbmVyKCRzdGFydCwgJGVuZCkpIHsKKwkJCQkgICAgJGV4YWN0X3BhdHRlcm5fbWF0 Y2hfaGFzaHskZmlsZX0gPSAxOworCQkJCX0KKwkJCQlpZiAoJHBhdHRlcm5fZGVwdGggPT0gMCB8 fAorCQkJCSAgICAoKCRmaWxlX3BkIC0gJHZhbHVlX3BkKSA8ICRwYXR0ZXJuX2RlcHRoKSkgewor CQkJCSAgICAkaGFzaHskdHZpfSA9ICR2YWx1ZV9wZDsKKwkJCQl9CisJCQkgICAgfQorCQkJfSBl bHNpZiAoJHR5cGUgZXEgJ04nKSB7CisJCQkgICAgaWYgKCRmaWxlID1+IG0vJHZhbHVlL3gpIHsK KwkJCQkkaGFzaHskdHZpfSA9IDA7CisJCQkgICAgfQorCQkJfQorCQkgICAgfQorCQl9CisJICAg IH0KKwkgICAgJHR2aSA9ICRlbmQgKyAxOworCX0KKworCWZvcmVhY2ggbXkgJGxpbmUgKHNvcnQg eyRoYXNoeyRifSA8PT4gJGhhc2h7JGF9fSBrZXlzICVoYXNoKSB7CisJICAgIGFkZF9jYXRlZ29y aWVzKCRsaW5lKTsKKwkgICAgaWYgKCRzZWN0aW9ucykgeworCQlteSAkaTsKKwkJbXkgJHN0YXJ0 ID0gZmluZF9zdGFydGluZ19pbmRleCgkbGluZSk7CisJCW15ICRlbmQgPSBmaW5kX2VuZGluZ19p bmRleCgkbGluZSk7CisJCWZvciAoJGkgPSAkc3RhcnQ7ICRpIDwgJGVuZDsgJGkrKykgeworCQkg ICAgbXkgJGxpbmUgPSAkdHlwZXZhbHVlWyRpXTsKKwkJICAgIGlmICgkbGluZSA9fiAvXltGWF06 LykgewkJIyNSZXN0b3JlIGZpbGUgcGF0dGVybnMKKwkJCSRsaW5lID1+IHMvKFteXFxdKVwuKFte XCpdKS8kMVw/JDIvZzsKKwkJCSRsaW5lID1+IHMvKFteXFxdKVwuJC8kMVw/L2c7CSMjQ29udmVy dCAuIGJhY2sgdG8gPworCQkJJGxpbmUgPX4gcy9cXFwuL1wuL2c7ICAgICAgIAkjI0NvbnZlcnQg XC4gdG8gLgorCQkJJGxpbmUgPX4gcy9cLlwqL1wqL2c7ICAgICAgIAkjI0NvbnZlcnQgLiogdG8g KgorCQkgICAgfQorCQkgICAgbXkgJGNvdW50ID0gJGxpbmUgPX4gcy9eKFtBLVpdKTovJDE6XHQv ZzsKKwkJICAgIGlmICgkbGV0dGVycyBlcSAiIiB8fCAoISRjb3VudCB8fCAkbGV0dGVycyA9fiAv JDEvaSkpIHsKKwkJCXByaW50KCIkbGluZVxuIik7CisJCSAgICB9CisJCX0KKwkJcHJpbnQoIlxu Iik7CisJICAgIH0KKwl9CisKKwltYWludGFpbmVyc19pbl9maWxlKCRmaWxlKTsKKyAgICB9CisK KyAgICBpZiAoJGtleXdvcmRzKSB7CisJQGtleXdvcmRfdHZpID0gc29ydF9hbmRfdW5pcShAa2V5 d29yZF90dmkpOworCWZvcmVhY2ggbXkgJGxpbmUgKEBrZXl3b3JkX3R2aSkgeworCSAgICBhZGRf Y2F0ZWdvcmllcygkbGluZSk7CisJfQorICAgIH0KKworICAgIGZvcmVhY2ggbXkgJGVtYWlsIChA ZW1haWxfdG8sIEBsaXN0X3RvKSB7CisJJGVtYWlsLT5bMF0gPSBkZWR1cGxpY2F0ZV9lbWFpbCgk ZW1haWwtPlswXSk7CisgICAgfQorCisgICAgZm9yZWFjaCBteSAkZmlsZSAoQGZpbGVzKSB7CisJ aWYgKCRlbWFpbCAmJgorCSAgICAoJGVtYWlsX2dpdCB8fAorCSAgICAgKCRlbWFpbF9naXRfZmFs bGJhY2sgJiYKKwkgICAgICAkZmlsZSAhfiAvTUFJTlRBSU5FUlMkLyAmJgorCSAgICAgICEkZXhh Y3RfcGF0dGVybl9tYXRjaF9oYXNoeyRmaWxlfSkpKSB7CisJICAgIHZjc19maWxlX3NpZ25vZmZz KCRmaWxlKTsKKwl9CisJaWYgKCRlbWFpbCAmJiAkZW1haWxfZ2l0X2JsYW1lKSB7CisJICAgIHZj c19maWxlX2JsYW1lKCRmaWxlKTsKKwl9CisgICAgfQorCisgICAgaWYgKCRlbWFpbCkgeworCWZv cmVhY2ggbXkgJGNoaWVmIChAcGVuZ3Vpbl9jaGllZikgeworCSAgICBpZiAoJGNoaWVmID1+IG0v XiguKik6KC4qKS8pIHsKKwkJbXkgJGVtYWlsX2FkZHJlc3M7CisKKwkJJGVtYWlsX2FkZHJlc3Mg PSBmb3JtYXRfZW1haWwoJDEsICQyLCAkZW1haWxfdXNlbmFtZSk7CisJCWlmICgkZW1haWxfZ2l0 X3Blbmd1aW5fY2hpZWZzKSB7CisJCSAgICBwdXNoKEBlbWFpbF90bywgWyRlbWFpbF9hZGRyZXNz LCAnY2hpZWYgcGVuZ3VpbiddKTsKKwkJfSBlbHNlIHsKKwkJICAgIEBlbWFpbF90byA9IGdyZXAo JF8tPlswXSAhfiAvJHtlbWFpbF9hZGRyZXNzfS8sIEBlbWFpbF90byk7CisJCX0KKwkgICAgfQor CX0KKworCWZvcmVhY2ggbXkgJGVtYWlsIChAZmlsZV9lbWFpbHMpIHsKKwkgICAgbXkgKCRuYW1l LCAkYWRkcmVzcykgPSBwYXJzZV9lbWFpbCgkZW1haWwpOworCisJICAgIG15ICR0bXBfZW1haWwg PSBmb3JtYXRfZW1haWwoJG5hbWUsICRhZGRyZXNzLCAkZW1haWxfdXNlbmFtZSk7CisJICAgIHB1 c2hfZW1haWxfYWRkcmVzcygkdG1wX2VtYWlsLCAnJyk7CisJICAgIGFkZF9yb2xlKCR0bXBfZW1h aWwsICdpbiBmaWxlJyk7CisJfQorICAgIH0KKworICAgIGZvcmVhY2ggbXkgJGZpeCAoQGZpeGVz KSB7CisJdmNzX2FkZF9jb21taXRfc2lnbmVycygkZml4LCAiYmxhbWVkX2ZpeGVzIik7CisgICAg fQorCisgICAgbXkgQHRvID0gKCk7CisgICAgaWYgKCRlbWFpbCB8fCAkZW1haWxfbGlzdCkgewor CWlmICgkZW1haWwpIHsKKwkgICAgQHRvID0gKEB0bywgQGVtYWlsX3RvKTsKKwl9CisJaWYgKCRl bWFpbF9saXN0KSB7CisJICAgIEB0byA9IChAdG8sIEBsaXN0X3RvKTsKKwl9CisgICAgfQorCisg ICAgaWYgKCRpbnRlcmFjdGl2ZSkgeworCUB0byA9IGludGVyYWN0aXZlX2dldF9tYWludGFpbmVy cyhcQHRvKTsKKyAgICB9CisKKyAgICByZXR1cm4gQHRvOworfQorCitzdWIgZmlsZV9tYXRjaF9w YXR0ZXJuIHsKKyAgICBteSAoJGZpbGUsICRwYXR0ZXJuKSA9IEBfOworICAgIGlmIChzdWJzdHIo JHBhdHRlcm4sIC0xKSBlcSAiLyIpIHsKKwlpZiAoJGZpbGUgPX4gbUBeJHBhdHRlcm5AKSB7CisJ ICAgIHJldHVybiAxOworCX0KKyAgICB9IGVsc2UgeworCWlmICgkZmlsZSA9fiBtQF4kcGF0dGVy bkApIHsKKwkgICAgbXkgJHMxID0gKCRmaWxlID1+IHRyQC9AQCk7CisJICAgIG15ICRzMiA9ICgk cGF0dGVybiA9fiB0ckAvQEApOworCSAgICBpZiAoJHMxID09ICRzMikgeworCQlyZXR1cm4gMTsK KwkgICAgfQorCX0KKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3N1YiB1c2FnZSB7CisgICAg cHJpbnQgPDxFT1Q7Cit1c2FnZTogJFAgW29wdGlvbnNdIHBhdGNoZmlsZQorICAgICAgICRQIFtv cHRpb25zXSAtZiBmaWxlfGRpcmVjdG9yeQordmVyc2lvbjogJFYKKworTUFJTlRBSU5FUiBmaWVs ZCBzZWxlY3Rpb24gb3B0aW9uczoKKyAgLS1lbWFpbCA9PiBwcmludCBlbWFpbCBhZGRyZXNzKGVz KSBpZiBhbnkKKyAgICAtLWdpdCA9PiBpbmNsdWRlIHJlY2VudCBnaXQgXCotYnk6IHNpZ25lcnMK KyAgICAtLWdpdC1hbGwtc2lnbmF0dXJlLXR5cGVzID0+IGluY2x1ZGUgc2lnbmVycyByZWdhcmRs ZXNzIG9mIHNpZ25hdHVyZSB0eXBlCisgICAgICAgIG9yIHVzZSBvbmx5ICR7c2lnbmF0dXJlX3Bh dHRlcm59IHNpZ25lcnMgKGRlZmF1bHQ6ICRlbWFpbF9naXRfYWxsX3NpZ25hdHVyZV90eXBlcykK KyAgICAtLWdpdC1mYWxsYmFjayA9PiB1c2UgZ2l0IHdoZW4gbm8gZXhhY3QgTUFJTlRBSU5FUlMg cGF0dGVybiAoZGVmYXVsdDogJGVtYWlsX2dpdF9mYWxsYmFjaykKKyAgICAtLWdpdC1jaGllZi1w ZW5ndWlucyA9PiBpbmNsdWRlICR7cGVuZ3Vpbl9jaGllZnN9CisgICAgLS1naXQtbWluLXNpZ25h dHVyZXMgPT4gbnVtYmVyIG9mIHNpZ25hdHVyZXMgcmVxdWlyZWQgKGRlZmF1bHQ6ICRlbWFpbF9n aXRfbWluX3NpZ25hdHVyZXMpCisgICAgLS1naXQtbWF4LW1haW50YWluZXJzID0+IG1heGltdW0g bWFpbnRhaW5lcnMgdG8gYWRkIChkZWZhdWx0OiAkZW1haWxfZ2l0X21heF9tYWludGFpbmVycykK KyAgICAtLWdpdC1taW4tcGVyY2VudCA9PiBtaW5pbXVtIHBlcmNlbnRhZ2Ugb2YgY29tbWl0cyBy ZXF1aXJlZCAoZGVmYXVsdDogJGVtYWlsX2dpdF9taW5fcGVyY2VudCkKKyAgICAtLWdpdC1ibGFt ZSA9PiB1c2UgZ2l0IGJsYW1lIHRvIGZpbmQgbW9kaWZpZWQgY29tbWl0cyBmb3IgcGF0Y2ggb3Ig ZmlsZQorICAgIC0tZ2l0LWJsYW1lLXNpZ25hdHVyZXMgPT4gd2hlbiB1c2VkIHdpdGggLS1naXQt YmxhbWUsIGFsc28gaW5jbHVkZSBhbGwgY29tbWl0IHNpZ25lcnMKKyAgICAtLWdpdC1zaW5jZSA9 PiBnaXQgaGlzdG9yeSB0byB1c2UgKGRlZmF1bHQ6ICRlbWFpbF9naXRfc2luY2UpCisgICAgLS1o Zy1zaW5jZSA9PiBoZyBoaXN0b3J5IHRvIHVzZSAoZGVmYXVsdDogJGVtYWlsX2hnX3NpbmNlKQor ICAgIC0taW50ZXJhY3RpdmUgPT4gZGlzcGxheSBhIG1lbnUgKG1vc3RseSB1c2VmdWwgaWYgdXNl ZCB3aXRoIHRoZSAtLWdpdCBvcHRpb24pCisgICAgLS1tID0+IGluY2x1ZGUgbWFpbnRhaW5lcihz KSBpZiBhbnkKKyAgICAtLXIgPT4gaW5jbHVkZSByZXZpZXdlcihzKSBpZiBhbnkKKyAgICAtLW4g PT4gaW5jbHVkZSBuYW1lICdGdWxsIE5hbWUgPGFkZHJcQGRvbWFpbi50bGQ+JworICAgIC0tbCA9 PiBpbmNsdWRlIGxpc3QocykgaWYgYW55CisgICAgLS1tb2RlcmF0ZWQgPT4gaW5jbHVkZSBtb2Rl cmF0ZWQgbGlzdHMocykgaWYgYW55IChkZWZhdWx0OiB0cnVlKQorICAgIC0tcyA9PiBpbmNsdWRl IHN1YnNjcmliZXIgb25seSBsaXN0KHMpIGlmIGFueSAoZGVmYXVsdDogZmFsc2UpCisgICAgLS1y ZW1vdmUtZHVwbGljYXRlcyA9PiBtaW5pbWl6ZSBkdXBsaWNhdGUgZW1haWwgbmFtZXMvYWRkcmVz c2VzCisgICAgLS1yb2xlcyA9PiBzaG93IHJvbGVzIChzdGF0dXM6c3Vic3lzdGVtLCBnaXQtc2ln bmVyLCBsaXN0LCBldGMuLi4pCisgICAgLS1yb2xlc3RhdHMgPT4gc2hvdyByb2xlcyBhbmQgc3Rh dGlzdGljcyAoY29tbWl0cy90b3RhbF9jb21taXRzLCAlKQorICAgIC0tZmlsZS1lbWFpbHMgPT4g YWRkIGVtYWlsIGFkZHJlc3NlcyBmb3VuZCBpbiAtZiBmaWxlIChkZWZhdWx0OiAwIChvZmYpKQor ICAgIC0tZml4ZXMgPT4gZm9yIHBhdGNoZXMsIGFkZCBzaWduYXR1cmVzIG9mIGNvbW1pdHMgd2l0 aCAnRml4ZXM6IDxjb21taXQ+JyAoZGVmYXVsdDogMSAob24pKQorICAtLXNjbSA9PiBwcmludCBT Q00gdHJlZShzKSBpZiBhbnkKKyAgLS1zdGF0dXMgPT4gcHJpbnQgc3RhdHVzIGlmIGFueQorICAt LXN1YnN5c3RlbSA9PiBwcmludCBzdWJzeXN0ZW0gbmFtZSBpZiBhbnkKKyAgLS13ZWIgPT4gcHJp bnQgd2Vic2l0ZShzKSBpZiBhbnkKKworT3V0cHV0IHR5cGUgb3B0aW9uczoKKyAgLS1zZXBhcmF0 b3IgWywgXSA9PiBzZXBhcmF0b3IgZm9yIG11bHRpcGxlIGVudHJpZXMgb24gMSBsaW5lCisgICAg dXNpbmcgLS1zZXBhcmF0b3IgYWxzbyBzZXRzIC0tbm9tdWx0aWxpbmUgaWYgLS1zZXBhcmF0b3Ig aXMgbm90IFssIF0KKyAgLS1tdWx0aWxpbmUgPT4gcHJpbnQgMSBlbnRyeSBwZXIgbGluZQorCitP dGhlciBvcHRpb25zOgorICAtLXBhdHRlcm4tZGVwdGggPT4gTnVtYmVyIG9mIHBhdHRlcm4gZGly ZWN0b3J5IHRyYXZlcnNhbHMgKGRlZmF1bHQ6IDAgKGFsbCkpCisgIC0ta2V5d29yZHMgPT4gc2Nh biBwYXRjaCBmb3Iga2V5d29yZHMgKGRlZmF1bHQ6ICRrZXl3b3JkcykKKyAgLS1zZWN0aW9ucyA9 PiBwcmludCBhbGwgb2YgdGhlIHN1YnN5c3RlbSBzZWN0aW9ucyB3aXRoIHBhdHRlcm4gbWF0Y2hl cworICAtLWxldHRlcnMgPT4gcHJpbnQgYWxsIG1hdGNoaW5nICdsZXR0ZXInIHR5cGVzIGZyb20g YWxsIG1hdGNoaW5nIHNlY3Rpb25zCisgIC0tbWFpbG1hcCA9PiB1c2UgLm1haWxtYXAgZmlsZSAo ZGVmYXVsdDogJGVtYWlsX3VzZV9tYWlsbWFwKQorICAtLW5vLXRyZWUgPT4gcnVuIHdpdGhvdXQg YSBrdm0tdXNlci1zcGFjZSB0cmVlCisgIC0tc2VsZi10ZXN0ID0+IHNob3cgcG90ZW50aWFsIGlz c3VlcyB3aXRoIE1BSU5UQUlORVJTIGZpbGUgY29udGVudAorICAtLXZlcnNpb24gPT4gc2hvdyB2 ZXJzaW9uCisgIC0taGVscCA9PiBzaG93IHRoaXMgaGVscCBpbmZvcm1hdGlvbgorCitEZWZhdWx0 IG9wdGlvbnM6CisgIFstLWVtYWlsIC0tdHJlZSAtLW5vZ2l0IC0tZ2l0LWZhbGxiYWNrIC0tbSAt LXIgLS1uIC0tbCAtLW11bHRpbGluZQorICAgLS1wYXR0ZXJuLWRlcHRoPTAgLS1yZW1vdmUtZHVw bGljYXRlcyAtLXJvbGVzdGF0c10KKworTm90ZXM6CisgIFVzaW5nICItZiBkaXJlY3RvcnkiIG1h eSBnaXZlIHVuZXhwZWN0ZWQgcmVzdWx0czoKKyAgICAgIFVzZWQgd2l0aCAiLS1naXQiLCBnaXQg c2lnbmF0b3JzIGZvciBfYWxsXyBmaWxlcyBpbiBhbmQgYmVsb3cKKyAgICAgICAgICBkaXJlY3Rv cnkgYXJlIGV4YW1pbmVkIGFzIGdpdCByZWN1cnNlcyBkaXJlY3Rvcmllcy4KKyAgICAgICAgICBB bnkgc3BlY2lmaWVkIFg6IChleGNsdWRlKSBwYXR0ZXJuIG1hdGNoZXMgYXJlIF9ub3RfIGlnbm9y ZWQuCisgICAgICBVc2VkIHdpdGggIi0tbm9naXQiLCBkaXJlY3RvcnkgaXMgdXNlZCBhcyBhIHBh dHRlcm4gbWF0Y2gsCisgICAgICAgICAgbm8gaW5kaXZpZHVhbCBmaWxlIHdpdGhpbiB0aGUgZGly ZWN0b3J5IG9yIHN1YmRpcmVjdG9yeQorICAgICAgICAgIGlzIG1hdGNoZWQuCisgICAgICBVc2Vk IHdpdGggIi0tZ2l0LWJsYW1lIiwgZG9lcyBub3QgaXRlcmF0ZSBhbGwgZmlsZXMgaW4gZGlyZWN0 b3J5CisgIFVzaW5nICItLWdpdC1ibGFtZSIgaXMgc2xvdyBhbmQgbWF5IGFkZCBvbGQgY29tbWl0 dGVycyBhbmQgYXV0aG9ycworICAgICAgdGhhdCBhcmUgbm8gbG9uZ2VyIGFjdGl2ZSBtYWludGFp bmVycyB0byB0aGUgb3V0cHV0LgorICBVc2luZyAiLS1yb2xlcyIgb3IgIi0tcm9sZXN0YXRzIiB3 aXRoIGdpdCBzZW5kLWVtYWlsIC0tY2MtY21kIG9yIGFueQorICAgICAgb3RoZXIgYXV0b21hdGVk IHRvb2xzIHRoYXQgZXhwZWN0IG9ubHkgWyJuYW1lIl0gPGVtYWlsIGFkZHJlc3M+CisgICAgICBt YXkgbm90IHdvcmsgYmVjYXVzZSBvZiBhZGRpdGlvbmFsIG91dHB1dCBhZnRlciA8ZW1haWwgYWRk cmVzcz4uCisgIFVzaW5nICItLXJvbGVzdGF0cyIgYW5kICItLWdpdC1ibGFtZSIgc2hvd3MgdGhl ICMvdG90YWw9JSBjb21taXRzLAorICAgICAgbm90IHRoZSBwZXJjZW50YWdlIG9mIHRoZSBlbnRp cmUgZmlsZSBhdXRob3JlZC4gICMgb2YgY29tbWl0cyBpcworICAgICAgbm90IGEgZ29vZCBtZWFz dXJlIG9mIGFtb3VudCBvZiBjb2RlIGF1dGhvcmVkLiAgMSBtYWpvciBjb21taXQgbWF5CisgICAg ICBjb250YWluIGEgdGhvdXNhbmQgbGluZXMsIDUgdHJpdmlhbCBjb21taXRzIG1heSBtb2RpZnkg YSBzaW5nbGUgbGluZS4KKyAgSWYgZ2l0IGlzIG5vdCBpbnN0YWxsZWQsIGJ1dCBtZXJjdXJpYWwg KGhnKSBpcyBpbnN0YWxsZWQgYW5kIGFuIC5oZworICAgICAgcmVwb3NpdG9yeSBleGlzdHMsIHRo ZSBmb2xsb3dpbmcgb3B0aW9ucyBhcHBseSB0byBtZXJjdXJpYWw6CisgICAgICAgICAgLS1naXQs CisgICAgICAgICAgLS1naXQtbWluLXNpZ25hdHVyZXMsIC0tZ2l0LW1heC1tYWludGFpbmVycywg LS1naXQtbWluLXBlcmNlbnQsIGFuZAorICAgICAgICAgIC0tZ2l0LWJsYW1lCisgICAgICBVc2Ug LS1oZy1zaW5jZSBub3QgLS1naXQtc2luY2UgdG8gY29udHJvbCBkYXRlIHNlbGVjdGlvbgorICBG aWxlICIuZ2V0X21haW50YWluZXIuY29uZiIsIGlmIGl0IGV4aXN0cyBpbiB0aGUga3ZtLXVuaXQt dGVzdHMgc291cmNlIHJvb3QKKyAgICAgIGRpcmVjdG9yeSwgY2FuIGNoYW5nZSB3aGF0ZXZlciBn ZXRfbWFpbnRhaW5lciBkZWZhdWx0cyBhcmUgZGVzaXJlZC4KKyAgICAgIEVudHJpZXMgaW4gdGhp cyBmaWxlIGNhbiBiZSBhbnkgY29tbWFuZCBsaW5lIGFyZ3VtZW50LgorICAgICAgVGhpcyBmaWxl IGlzIHByZXBlbmRlZCB0byBhbnkgYWRkaXRpb25hbCBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgor ICAgICAgTXVsdGlwbGUgbGluZXMgYW5kICMgY29tbWVudHMgYXJlIGFsbG93ZWQuCisgIE1vc3Qg b3B0aW9ucyBoYXZlIGJvdGggcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIGZvcm1zLgorICAgICAgVGhl IG5lZ2F0aXZlIGZvcm1zIGZvciAtLTxmb28+IGFyZSAtLW5vPGZvbz4gYW5kIC0tbm8tPGZvbz4u CisKK0VPVAorfQorCitzdWIgcGFyc2VfZW1haWwgeworICAgIG15ICgkZm9ybWF0dGVkX2VtYWls KSA9IEBfOworCisgICAgbXkgJG5hbWUgPSAiIjsKKyAgICBteSAkYWRkcmVzcyA9ICIiOworCisg ICAgaWYgKCRmb3JtYXR0ZWRfZW1haWwgPX4gL14oW148XSspPCguK1xALiopPi4qJC8pIHsKKwkk bmFtZSA9ICQxOworCSRhZGRyZXNzID0gJDI7CisgICAgfSBlbHNpZiAoJGZvcm1hdHRlZF9lbWFp bCA9fiAvXlxzKjwoLitcQFxTKik+LiokLykgeworCSRhZGRyZXNzID0gJDE7CisgICAgfSBlbHNp ZiAoJGZvcm1hdHRlZF9lbWFpbCA9fiAvXiguK1xAXFMqKS4qJC8pIHsKKwkkYWRkcmVzcyA9ICQx OworICAgIH0KKworICAgICRuYW1lID1+IHMvXlxzK3xccyskLy9nOworICAgICRuYW1lID1+IHMv XlwifFwiJC8vZzsKKyAgICAkYWRkcmVzcyA9fiBzL15ccyt8XHMrJC8vZzsKKworICAgIGlmICgk bmFtZSA9fiAvW15cdyBcLV0vaSkgeyAgCSAjI2hhcyAibXVzdCBxdW90ZSIgY2hhcnMKKwkkbmFt ZSA9fiBzLyg/PCFcXCkiL1xcIi9nOyAgICAgICAjI2VzY2FwZSBxdW90ZXMKKwkkbmFtZSA9ICJc IiRuYW1lXCIiOworICAgIH0KKworICAgIHJldHVybiAoJG5hbWUsICRhZGRyZXNzKTsKK30KKwor c3ViIGZvcm1hdF9lbWFpbCB7CisgICAgbXkgKCRuYW1lLCAkYWRkcmVzcywgJHVzZW5hbWUpID0g QF87CisKKyAgICBteSAkZm9ybWF0dGVkX2VtYWlsOworCisgICAgJG5hbWUgPX4gcy9eXHMrfFxz KyQvL2c7CisgICAgJG5hbWUgPX4gcy9eXCJ8XCIkLy9nOworICAgICRhZGRyZXNzID1+IHMvXlxz K3xccyskLy9nOworCisgICAgaWYgKCRuYW1lID1+IC9bXlx3IFwtXS9pKSB7ICAgICAgICAgICMj aGFzICJtdXN0IHF1b3RlIiBjaGFycworCSRuYW1lID1+IHMvKD88IVxcKSIvXFwiL2c7ICAgICAg ICMjZXNjYXBlIHF1b3RlcworCSRuYW1lID0gIlwiJG5hbWVcIiI7CisgICAgfQorCisgICAgaWYg KCR1c2VuYW1lKSB7CisJaWYgKCIkbmFtZSIgZXEgIiIpIHsKKwkgICAgJGZvcm1hdHRlZF9lbWFp bCA9ICIkYWRkcmVzcyI7CisJfSBlbHNlIHsKKwkgICAgJGZvcm1hdHRlZF9lbWFpbCA9ICIkbmFt ZSA8JGFkZHJlc3M+IjsKKwl9CisgICAgfSBlbHNlIHsKKwkkZm9ybWF0dGVkX2VtYWlsID0gJGFk ZHJlc3M7CisgICAgfQorCisgICAgcmV0dXJuICRmb3JtYXR0ZWRfZW1haWw7Cit9CisKK3N1YiBm aW5kX2ZpcnN0X3NlY3Rpb24geworICAgIG15ICRpbmRleCA9IDA7CisKKyAgICB3aGlsZSAoJGlu ZGV4IDwgQHR5cGV2YWx1ZSkgeworCW15ICR0diA9ICR0eXBldmFsdWVbJGluZGV4XTsKKwlpZiAo KCR0diA9fiBtL14oW0EtWl0pOlxzKiguKikvKSkgeworCSAgICBsYXN0OworCX0KKwkkaW5kZXgr KzsKKyAgICB9CisKKyAgICByZXR1cm4gJGluZGV4OworfQorCitzdWIgZmluZF9zdGFydGluZ19p bmRleCB7CisgICAgbXkgKCRpbmRleCkgPSBAXzsKKworICAgIHdoaWxlICgkaW5kZXggPiAwKSB7 CisJbXkgJHR2ID0gJHR5cGV2YWx1ZVskaW5kZXhdOworCWlmICghKCR0diA9fiBtL14oW0EtWl0p OlxzKiguKikvKSkgeworCSAgICBsYXN0OworCX0KKwkkaW5kZXgtLTsKKyAgICB9CisKKyAgICBy ZXR1cm4gJGluZGV4OworfQorCitzdWIgZmluZF9lbmRpbmdfaW5kZXggeworICAgIG15ICgkaW5k ZXgpID0gQF87CisKKyAgICB3aGlsZSAoJGluZGV4IDwgQHR5cGV2YWx1ZSkgeworCW15ICR0diA9 ICR0eXBldmFsdWVbJGluZGV4XTsKKwlpZiAoISgkdHYgPX4gbS9eKFtBLVpdKTpccyooLiopLykp IHsKKwkgICAgbGFzdDsKKwl9CisJJGluZGV4Kys7CisgICAgfQorCisgICAgcmV0dXJuICRpbmRl eDsKK30KKworc3ViIGdldF9zdWJzeXN0ZW1fbmFtZSB7CisgICAgbXkgKCRpbmRleCkgPSBAXzsK KworICAgIG15ICRzdGFydCA9IGZpbmRfc3RhcnRpbmdfaW5kZXgoJGluZGV4KTsKKworICAgIG15 ICRzdWJzeXN0ZW0gPSAkdHlwZXZhbHVlWyRzdGFydF07CisgICAgaWYgKCRvdXRwdXRfc2VjdGlv bl9tYXhsZW4gJiYgbGVuZ3RoKCRzdWJzeXN0ZW0pID4gJG91dHB1dF9zZWN0aW9uX21heGxlbikg eworCSRzdWJzeXN0ZW0gPSBzdWJzdHIoJHN1YnN5c3RlbSwgMCwgJG91dHB1dF9zZWN0aW9uX21h eGxlbiAtIDMpOworCSRzdWJzeXN0ZW0gPX4gcy9ccyokLy87CisJJHN1YnN5c3RlbSA9ICRzdWJz eXN0ZW0gLiAiLi4uIjsKKyAgICB9CisgICAgcmV0dXJuICRzdWJzeXN0ZW07Cit9CisKK3N1YiBn ZXRfbWFpbnRhaW5lcl9yb2xlIHsKKyAgICBteSAoJGluZGV4KSA9IEBfOworCisgICAgbXkgJGk7 CisgICAgbXkgJHN0YXJ0ID0gZmluZF9zdGFydGluZ19pbmRleCgkaW5kZXgpOworICAgIG15ICRl bmQgPSBmaW5kX2VuZGluZ19pbmRleCgkaW5kZXgpOworCisgICAgbXkgJHJvbGUgPSAidW5rbm93 biI7CisgICAgbXkgJHN1YnN5c3RlbSA9IGdldF9zdWJzeXN0ZW1fbmFtZSgkaW5kZXgpOworCisg ICAgZm9yICgkaSA9ICRzdGFydCArIDE7ICRpIDwgJGVuZDsgJGkrKykgeworCW15ICR0diA9ICR0 eXBldmFsdWVbJGldOworCWlmICgkdHYgPX4gbS9eKFtBLVpdKTpccyooLiopLykgeworCSAgICBt eSAkcHR5cGUgPSAkMTsKKwkgICAgbXkgJHB2YWx1ZSA9ICQyOworCSAgICBpZiAoJHB0eXBlIGVx ICJTIikgeworCQkkcm9sZSA9ICRwdmFsdWU7CisJICAgIH0KKwl9CisgICAgfQorCisgICAgJHJv bGUgPSBsYygkcm9sZSk7CisgICAgaWYgICAgICAoJHJvbGUgZXEgInN1cHBvcnRlZCIpIHsKKwkk cm9sZSA9ICJzdXBwb3J0ZXIiOworICAgIH0gZWxzaWYgKCRyb2xlIGVxICJtYWludGFpbmVkIikg eworCSRyb2xlID0gIm1haW50YWluZXIiOworICAgIH0gZWxzaWYgKCRyb2xlIGVxICJvZGQgZml4 ZXMiKSB7CisJJHJvbGUgPSAib2RkIGZpeGVyIjsKKyAgICB9IGVsc2lmICgkcm9sZSBlcSAib3Jw aGFuIikgeworCSRyb2xlID0gIm9ycGhhbiBtaW5kZXIiOworICAgIH0gZWxzaWYgKCRyb2xlIGVx ICJvYnNvbGV0ZSIpIHsKKwkkcm9sZSA9ICJvYnNvbGV0ZSBtaW5kZXIiOworICAgIH0gZWxzaWYg KCRyb2xlIGVxICJidXJpZWQgYWxpdmUgaW4gcmVwb3J0ZXJzIikgeworCSRyb2xlID0gImNoaWVm IHBlbmd1aW4iOworICAgIH0KKworICAgIHJldHVybiAkcm9sZSAuICI6IiAuICRzdWJzeXN0ZW07 Cit9CisKK3N1YiBnZXRfbGlzdF9yb2xlIHsKKyAgICBteSAoJGluZGV4KSA9IEBfOworCisgICAg bXkgJHN1YnN5c3RlbSA9IGdldF9zdWJzeXN0ZW1fbmFtZSgkaW5kZXgpOworCisgICAgaWYgKCRz dWJzeXN0ZW0gZXEgIlRIRSBSRVNUIikgeworCSRzdWJzeXN0ZW0gPSAiIjsKKyAgICB9CisKKyAg ICByZXR1cm4gJHN1YnN5c3RlbTsKK30KKworc3ViIGFkZF9jYXRlZ29yaWVzIHsKKyAgICBteSAo JGluZGV4KSA9IEBfOworCisgICAgbXkgJGk7CisgICAgbXkgJHN0YXJ0ID0gZmluZF9zdGFydGlu Z19pbmRleCgkaW5kZXgpOworICAgIG15ICRlbmQgPSBmaW5kX2VuZGluZ19pbmRleCgkaW5kZXgp OworCisgICAgcHVzaChAc3Vic3lzdGVtLCAkdHlwZXZhbHVlWyRzdGFydF0pOworCisgICAgZm9y ICgkaSA9ICRzdGFydCArIDE7ICRpIDwgJGVuZDsgJGkrKykgeworCW15ICR0diA9ICR0eXBldmFs dWVbJGldOworCWlmICgkdHYgPX4gbS9eKFtBLVpdKTpccyooLiopLykgeworCSAgICBteSAkcHR5 cGUgPSAkMTsKKwkgICAgbXkgJHB2YWx1ZSA9ICQyOworCSAgICBpZiAoJHB0eXBlIGVxICJMIikg eworCQlteSAkbGlzdF9hZGRyZXNzID0gJHB2YWx1ZTsKKwkJbXkgJGxpc3RfYWRkaXRpb25hbCA9 ICIiOworCQlteSAkbGlzdF9yb2xlID0gZ2V0X2xpc3Rfcm9sZSgkaSk7CisKKwkJaWYgKCRsaXN0 X3JvbGUgbmUgIiIpIHsKKwkJICAgICRsaXN0X3JvbGUgPSAiOiIgLiAkbGlzdF9yb2xlOworCQl9 CisJCWlmICgkbGlzdF9hZGRyZXNzID1+IG0vKFteXHNdKylccysoLiopJC8pIHsKKwkJICAgICRs aXN0X2FkZHJlc3MgPSAkMTsKKwkJICAgICRsaXN0X2FkZGl0aW9uYWwgPSAkMjsKKwkJfQorCQlp ZiAoJGxpc3RfYWRkaXRpb25hbCA9fiBtL3N1YnNjcmliZXJzLW9ubHkvKSB7CisJCSAgICBpZiAo JGVtYWlsX3N1YnNjcmliZXJfbGlzdCkgeworCQkJaWYgKCEkaGFzaF9saXN0X3Rve2xjKCRsaXN0 X2FkZHJlc3MpfSkgeworCQkJICAgICRoYXNoX2xpc3RfdG97bGMoJGxpc3RfYWRkcmVzcyl9ID0g MTsKKwkJCSAgICBwdXNoKEBsaXN0X3RvLCBbJGxpc3RfYWRkcmVzcywKKwkJCQkJICAgICJzdWJz Y3JpYmVyIGxpc3Qke2xpc3Rfcm9sZX0iXSk7CisJCQl9CisJCSAgICB9CisJCX0gZWxzZSB7CisJ CSAgICBpZiAoJGVtYWlsX2xpc3QpIHsKKwkJCWlmICghJGhhc2hfbGlzdF90b3tsYygkbGlzdF9h ZGRyZXNzKX0pIHsKKwkJCSAgICBpZiAoJGxpc3RfYWRkaXRpb25hbCA9fiBtL21vZGVyYXRlZC8p IHsKKwkJCQlpZiAoJGVtYWlsX21vZGVyYXRlZF9saXN0KSB7CisJCQkJICAgICRoYXNoX2xpc3Rf dG97bGMoJGxpc3RfYWRkcmVzcyl9ID0gMTsKKwkJCQkgICAgcHVzaChAbGlzdF90bywgWyRsaXN0 X2FkZHJlc3MsCisJCQkJCQkgICAgIm1vZGVyYXRlZCBsaXN0JHtsaXN0X3JvbGV9Il0pOworCQkJ CX0KKwkJCSAgICB9IGVsc2UgeworCQkJCSRoYXNoX2xpc3RfdG97bGMoJGxpc3RfYWRkcmVzcyl9 ID0gMTsKKwkJCQlwdXNoKEBsaXN0X3RvLCBbJGxpc3RfYWRkcmVzcywKKwkJCQkJCSJvcGVuIGxp c3Qke2xpc3Rfcm9sZX0iXSk7CisJCQkgICAgfQorCQkJfQorCQkgICAgfQorCQl9CisJICAgIH0g ZWxzaWYgKCRwdHlwZSBlcSAiTSIpIHsKKwkJaWYgKCRlbWFpbF9tYWludGFpbmVyKSB7CisJCSAg ICBteSAkcm9sZSA9IGdldF9tYWludGFpbmVyX3JvbGUoJGkpOworCQkgICAgcHVzaF9lbWFpbF9h ZGRyZXNzZXMoJHB2YWx1ZSwgJHJvbGUpOworCQl9CisJICAgIH0gZWxzaWYgKCRwdHlwZSBlcSAi UiIpIHsKKwkJaWYgKCRlbWFpbF9yZXZpZXdlcikgeworCQkgICAgbXkgJHN1YnN5c3RlbSA9IGdl dF9zdWJzeXN0ZW1fbmFtZSgkaSk7CisJCSAgICBwdXNoX2VtYWlsX2FkZHJlc3NlcygkcHZhbHVl LCAicmV2aWV3ZXI6JHN1YnN5c3RlbSIpOworCQl9CisJICAgIH0gZWxzaWYgKCRwdHlwZSBlcSAi VCIpIHsKKwkJcHVzaChAc2NtLCAkcHZhbHVlKTsKKwkgICAgfSBlbHNpZiAoJHB0eXBlIGVxICJX IikgeworCQlwdXNoKEB3ZWIsICRwdmFsdWUpOworCSAgICB9IGVsc2lmICgkcHR5cGUgZXEgIlMi KSB7CisJCXB1c2goQHN0YXR1cywgJHB2YWx1ZSk7CisJICAgIH0KKwl9CisgICAgfQorfQorCitz dWIgZW1haWxfaW51c2UgeworICAgIG15ICgkbmFtZSwgJGFkZHJlc3MpID0gQF87CisKKyAgICBy ZXR1cm4gMSBpZiAoKCRuYW1lIGVxICIiKSAmJiAoJGFkZHJlc3MgZXEgIiIpKTsKKyAgICByZXR1 cm4gMSBpZiAoKCRuYW1lIG5lICIiKSAmJiBleGlzdHMoJGVtYWlsX2hhc2hfbmFtZXtsYygkbmFt ZSl9KSk7CisgICAgcmV0dXJuIDEgaWYgKCgkYWRkcmVzcyBuZSAiIikgJiYgZXhpc3RzKCRlbWFp bF9oYXNoX2FkZHJlc3N7bGMoJGFkZHJlc3MpfSkpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N1 YiBwdXNoX2VtYWlsX2FkZHJlc3MgeworICAgIG15ICgkbGluZSwgJHJvbGUpID0gQF87CisKKyAg ICBteSAoJG5hbWUsICRhZGRyZXNzKSA9IHBhcnNlX2VtYWlsKCRsaW5lKTsKKworICAgIGlmICgk YWRkcmVzcyBlcSAiIikgeworCXJldHVybiAwOworICAgIH0KKworICAgIGlmICghJGVtYWlsX3Jl bW92ZV9kdXBsaWNhdGVzKSB7CisJcHVzaChAZW1haWxfdG8sIFtmb3JtYXRfZW1haWwoJG5hbWUs ICRhZGRyZXNzLCAkZW1haWxfdXNlbmFtZSksICRyb2xlXSk7CisgICAgfSBlbHNpZiAoIWVtYWls X2ludXNlKCRuYW1lLCAkYWRkcmVzcykpIHsKKwlwdXNoKEBlbWFpbF90bywgW2Zvcm1hdF9lbWFp bCgkbmFtZSwgJGFkZHJlc3MsICRlbWFpbF91c2VuYW1lKSwgJHJvbGVdKTsKKwkkZW1haWxfaGFz aF9uYW1le2xjKCRuYW1lKX0rKyBpZiAoJG5hbWUgbmUgIiIpOworCSRlbWFpbF9oYXNoX2FkZHJl c3N7bGMoJGFkZHJlc3MpfSsrOworICAgIH0KKworICAgIHJldHVybiAxOworfQorCitzdWIgcHVz aF9lbWFpbF9hZGRyZXNzZXMgeworICAgIG15ICgkYWRkcmVzcywgJHJvbGUpID0gQF87CisKKyAg ICBteSBAYWRkcmVzc19saXN0ID0gKCk7CisKKyAgICBpZiAocmZjODIyX3ZhbGlkKCRhZGRyZXNz KSkgeworCXB1c2hfZW1haWxfYWRkcmVzcygkYWRkcmVzcywgJHJvbGUpOworICAgIH0gZWxzaWYg KEBhZGRyZXNzX2xpc3QgPSByZmM4MjJfdmFsaWRsaXN0KCRhZGRyZXNzKSkgeworCW15ICRhcnJh eV9jb3VudCA9IHNoaWZ0KEBhZGRyZXNzX2xpc3QpOworCXdoaWxlIChteSAkZW50cnkgPSBzaGlm dChAYWRkcmVzc19saXN0KSkgeworCSAgICBwdXNoX2VtYWlsX2FkZHJlc3MoJGVudHJ5LCAkcm9s ZSk7CisJfQorICAgIH0gZWxzZSB7CisJaWYgKCFwdXNoX2VtYWlsX2FkZHJlc3MoJGFkZHJlc3Ms ICRyb2xlKSkgeworCSAgICB3YXJuKCJJbnZhbGlkIE1BSU5UQUlORVJTIGFkZHJlc3M6ICciIC4g JGFkZHJlc3MgLiAiJ1xuIik7CisJfQorICAgIH0KK30KKworc3ViIGFkZF9yb2xlIHsKKyAgICBt eSAoJGxpbmUsICRyb2xlKSA9IEBfOworCisgICAgbXkgKCRuYW1lLCAkYWRkcmVzcykgPSBwYXJz ZV9lbWFpbCgkbGluZSk7CisgICAgbXkgJGVtYWlsID0gZm9ybWF0X2VtYWlsKCRuYW1lLCAkYWRk cmVzcywgJGVtYWlsX3VzZW5hbWUpOworCisgICAgZm9yZWFjaCBteSAkZW50cnkgKEBlbWFpbF90 bykgeworCWlmICgkZW1haWxfcmVtb3ZlX2R1cGxpY2F0ZXMpIHsKKwkgICAgbXkgKCRlbnRyeV9u YW1lLCAkZW50cnlfYWRkcmVzcykgPSBwYXJzZV9lbWFpbCgkZW50cnktPlswXSk7CisJICAgIGlm ICgoJG5hbWUgZXEgJGVudHJ5X25hbWUgfHwgJGFkZHJlc3MgZXEgJGVudHJ5X2FkZHJlc3MpCisJ CSYmICgkcm9sZSBlcSAiIiB8fCAhKCRlbnRyeS0+WzFdID1+IG0vJHJvbGUvKSkKKwkgICAgKSB7 CisJCWlmICgkZW50cnktPlsxXSBlcSAiIikgeworCQkgICAgJGVudHJ5LT5bMV0gPSAiJHJvbGUi OworCQl9IGVsc2UgeworCQkgICAgJGVudHJ5LT5bMV0gPSAiJGVudHJ5LT5bMV0sJHJvbGUiOwor CQl9CisJICAgIH0KKwl9IGVsc2UgeworCSAgICBpZiAoJGVtYWlsIGVxICRlbnRyeS0+WzBdCisJ CSYmICgkcm9sZSBlcSAiIiB8fCAhKCRlbnRyeS0+WzFdID1+IG0vJHJvbGUvKSkKKwkgICAgKSB7 CisJCWlmICgkZW50cnktPlsxXSBlcSAiIikgeworCQkgICAgJGVudHJ5LT5bMV0gPSAiJHJvbGUi OworCQl9IGVsc2UgeworCQkgICAgJGVudHJ5LT5bMV0gPSAiJGVudHJ5LT5bMV0sJHJvbGUiOwor CQl9CisJICAgIH0KKwl9CisgICAgfQorfQorCitzdWIgd2hpY2ggeworICAgIG15ICgkYmluKSA9 IEBfOworCisgICAgZm9yZWFjaCBteSAkcGF0aCAoc3BsaXQoLzovLCAkRU5We1BBVEh9KSkgewor CWlmICgtZSAiJHBhdGgvJGJpbiIpIHsKKwkgICAgcmV0dXJuICIkcGF0aC8kYmluIjsKKwl9Cisg ICAgfQorCisgICAgcmV0dXJuICIiOworfQorCitzdWIgd2hpY2hfY29uZiB7CisgICAgbXkgKCRj b25mKSA9IEBfOworCisgICAgZm9yZWFjaCBteSAkcGF0aCAoc3BsaXQoLzovLCAiLjokRU5We0hP TUV9Oi5zY3JpcHRzIikpIHsKKwlpZiAoLWUgIiRwYXRoLyRjb25mIikgeworCSAgICByZXR1cm4g IiRwYXRoLyRjb25mIjsKKwl9CisgICAgfQorCisgICAgcmV0dXJuICIiOworfQorCitzdWIgbWFp bG1hcF9lbWFpbCB7CisgICAgbXkgKCRsaW5lKSA9IEBfOworCisgICAgbXkgKCRuYW1lLCAkYWRk cmVzcykgPSBwYXJzZV9lbWFpbCgkbGluZSk7CisgICAgbXkgJGVtYWlsID0gZm9ybWF0X2VtYWls KCRuYW1lLCAkYWRkcmVzcywgMSk7CisgICAgbXkgJHJlYWxfbmFtZSA9ICRuYW1lOworICAgIG15 ICRyZWFsX2FkZHJlc3MgPSAkYWRkcmVzczsKKworICAgIGlmIChleGlzdHMgJG1haWxtYXAtPntu YW1lc30tPnskZW1haWx9IHx8CisJZXhpc3RzICRtYWlsbWFwLT57YWRkcmVzc2VzfS0+eyRlbWFp bH0pIHsKKwlpZiAoZXhpc3RzICRtYWlsbWFwLT57bmFtZXN9LT57JGVtYWlsfSkgeworCSAgICAk cmVhbF9uYW1lID0gJG1haWxtYXAtPntuYW1lc30tPnskZW1haWx9OworCX0KKwlpZiAoZXhpc3Rz ICRtYWlsbWFwLT57YWRkcmVzc2VzfS0+eyRlbWFpbH0pIHsKKwkgICAgJHJlYWxfYWRkcmVzcyA9 ICRtYWlsbWFwLT57YWRkcmVzc2VzfS0+eyRlbWFpbH07CisJfQorICAgIH0gZWxzZSB7CisJaWYg KGV4aXN0cyAkbWFpbG1hcC0+e25hbWVzfS0+eyRhZGRyZXNzfSkgeworCSAgICAkcmVhbF9uYW1l ID0gJG1haWxtYXAtPntuYW1lc30tPnskYWRkcmVzc307CisJfQorCWlmIChleGlzdHMgJG1haWxt YXAtPnthZGRyZXNzZXN9LT57JGFkZHJlc3N9KSB7CisJICAgICRyZWFsX2FkZHJlc3MgPSAkbWFp bG1hcC0+e2FkZHJlc3Nlc30tPnskYWRkcmVzc307CisJfQorICAgIH0KKyAgICByZXR1cm4gZm9y bWF0X2VtYWlsKCRyZWFsX25hbWUsICRyZWFsX2FkZHJlc3MsIDEpOworfQorCitzdWIgbWFpbG1h cCB7CisgICAgbXkgKEBhZGRyZXNzZXMpID0gQF87CisKKyAgICBteSBAbWFwcGVkX2VtYWlscyA9 ICgpOworICAgIGZvcmVhY2ggbXkgJGxpbmUgKEBhZGRyZXNzZXMpIHsKKwlwdXNoKEBtYXBwZWRf ZW1haWxzLCBtYWlsbWFwX2VtYWlsKCRsaW5lKSk7CisgICAgfQorICAgIG1lcmdlX2J5X3JlYWxu YW1lKEBtYXBwZWRfZW1haWxzKSBpZiAoJGVtYWlsX3VzZV9tYWlsbWFwKTsKKyAgICByZXR1cm4g QG1hcHBlZF9lbWFpbHM7Cit9CisKK3N1YiBtZXJnZV9ieV9yZWFsbmFtZSB7CisgICAgbXkgJWFk ZHJlc3NfbWFwOworICAgIG15IChAZW1haWxzKSA9IEBfOworCisgICAgZm9yZWFjaCBteSAkZW1h aWwgKEBlbWFpbHMpIHsKKwlteSAoJG5hbWUsICRhZGRyZXNzKSA9IHBhcnNlX2VtYWlsKCRlbWFp bCk7CisJaWYgKGV4aXN0cyAkYWRkcmVzc19tYXB7JG5hbWV9KSB7CisJICAgICRhZGRyZXNzID0g JGFkZHJlc3NfbWFweyRuYW1lfTsKKwkgICAgJGVtYWlsID0gZm9ybWF0X2VtYWlsKCRuYW1lLCAk YWRkcmVzcywgMSk7CisJfSBlbHNlIHsKKwkgICAgJGFkZHJlc3NfbWFweyRuYW1lfSA9ICRhZGRy ZXNzOworCX0KKyAgICB9Cit9CisKK3N1YiBnaXRfZXhlY3V0ZV9jbWQgeworICAgIG15ICgkY21k KSA9IEBfOworICAgIG15IEBsaW5lcyA9ICgpOworCisgICAgbXkgJG91dHB1dCA9IGAkY21kYDsK KyAgICAkb3V0cHV0ID1+IHMvXlxzKi8vZ207CisgICAgQGxpbmVzID0gc3BsaXQoIlxuIiwgJG91 dHB1dCk7CisKKyAgICByZXR1cm4gQGxpbmVzOworfQorCitzdWIgaGdfZXhlY3V0ZV9jbWQgewor ICAgIG15ICgkY21kKSA9IEBfOworICAgIG15IEBsaW5lcyA9ICgpOworCisgICAgbXkgJG91dHB1 dCA9IGAkY21kYDsKKyAgICBAbGluZXMgPSBzcGxpdCgiXG4iLCAkb3V0cHV0KTsKKworICAgIHJl dHVybiBAbGluZXM7Cit9CisKK3N1YiBleHRyYWN0X2Zvcm1hdHRlZF9zaWduYXR1cmVzIHsKKyAg ICBteSAoQHNpZ25hdHVyZV9saW5lcykgPSBAXzsKKworICAgIG15IEB0eXBlID0gQHNpZ25hdHVy ZV9saW5lczsKKworICAgIHMvXHMqKC4qKTouKi8kMS8gZm9yIChAdHlwZSk7CisKKyAgICAjIGN1 dCAtZjItIC1kIjoiCisgICAgcy9ccyouKjpccyooLispXHMqLyQxLyBmb3IgKEBzaWduYXR1cmVf bGluZXMpOworCisjIyBSZWZvcm1hdCBlbWFpbCBhZGRyZXNzZXMgKHdpdGggbmFtZXMpIHRvIGF2 b2lkIGJhZGx5IHdyaXR0ZW4gc2lnbmF0dXJlcworCisgICAgZm9yZWFjaCBteSAkc2lnbmVyIChA c2lnbmF0dXJlX2xpbmVzKSB7CisJJHNpZ25lciA9IGRlZHVwbGljYXRlX2VtYWlsKCRzaWduZXIp OworICAgIH0KKworICAgIHJldHVybiAoXEB0eXBlLCBcQHNpZ25hdHVyZV9saW5lcyk7Cit9CisK K3N1YiB2Y3NfZmluZF9zaWduZXJzIHsKKyAgICBteSAoJGNtZCwgJGZpbGUpID0gQF87CisgICAg bXkgJGNvbW1pdHM7CisgICAgbXkgQGxpbmVzID0gKCk7CisgICAgbXkgQHNpZ25hdHVyZXMgPSAo KTsKKyAgICBteSBAYXV0aG9ycyA9ICgpOworICAgIG15IEBzdGF0cyA9ICgpOworCisgICAgQGxp bmVzID0gJnskVkNTX2NtZHN7ImV4ZWN1dGVfY21kIn19KCRjbWQpOworCisgICAgbXkgJHBhdHRl cm4gPSAkVkNTX2NtZHN7ImNvbW1pdF9wYXR0ZXJuIn07CisgICAgbXkgJGF1dGhvcl9wYXR0ZXJu ID0gJFZDU19jbWRzeyJhdXRob3JfcGF0dGVybiJ9OworICAgIG15ICRzdGF0X3BhdHRlcm4gPSAk VkNTX2NtZHN7InN0YXRfcGF0dGVybiJ9OworCisgICAgJHN0YXRfcGF0dGVybiA9fiBzLyhcJFx3 KykvJDEvZWVnOwkJI2ludGVycG9sYXRlICRzdGF0X3BhdHRlcm4KKworICAgICRjb21taXRzID0g Z3JlcCgvJHBhdHRlcm4vLCBAbGluZXMpOwkjIG9mIGNvbW1pdHMKKworICAgIEBhdXRob3JzID0g Z3JlcCgvJGF1dGhvcl9wYXR0ZXJuLywgQGxpbmVzKTsKKyAgICBAc2lnbmF0dXJlcyA9IGdyZXAo L15bIFx0XSoke3NpZ25hdHVyZV9wYXR0ZXJufS4qXEAuKiQvLCBAbGluZXMpOworICAgIEBzdGF0 cyA9IGdyZXAoLyRzdGF0X3BhdHRlcm4vLCBAbGluZXMpOworCisjICAgIHByaW50KCJzdGF0czog PEBzdGF0cz5cbiIpOworCisgICAgcmV0dXJuICgwLCBcQHNpZ25hdHVyZXMsIFxAYXV0aG9ycywg XEBzdGF0cykgaWYgIUBzaWduYXR1cmVzOworCisgICAgc2F2ZV9jb21taXRzX2J5X2F1dGhvcihA bGluZXMpIGlmICgkaW50ZXJhY3RpdmUpOworICAgIHNhdmVfY29tbWl0c19ieV9zaWduZXIoQGxp bmVzKSBpZiAoJGludGVyYWN0aXZlKTsKKworICAgIGlmICghJGVtYWlsX2dpdF9wZW5ndWluX2No aWVmcykgeworCUBzaWduYXR1cmVzID0gZ3JlcCghLyR7cGVuZ3Vpbl9jaGllZnN9L2ksIEBzaWdu YXR1cmVzKTsKKyAgICB9CisKKyAgICBteSAoJGF1dGhvcl9yZWYsICRhdXRob3JzX3JlZikgPSBl eHRyYWN0X2Zvcm1hdHRlZF9zaWduYXR1cmVzKEBhdXRob3JzKTsKKyAgICBteSAoJHR5cGVzX3Jl ZiwgJHNpZ25lcnNfcmVmKSA9IGV4dHJhY3RfZm9ybWF0dGVkX3NpZ25hdHVyZXMoQHNpZ25hdHVy ZXMpOworCisgICAgcmV0dXJuICgkY29tbWl0cywgJHNpZ25lcnNfcmVmLCAkYXV0aG9yc19yZWYs IFxAc3RhdHMpOworfQorCitzdWIgdmNzX2ZpbmRfYXV0aG9yIHsKKyAgICBteSAoJGNtZCkgPSBA XzsKKyAgICBteSBAbGluZXMgPSAoKTsKKworICAgIEBsaW5lcyA9ICZ7JFZDU19jbWRzeyJleGVj dXRlX2NtZCJ9fSgkY21kKTsKKworICAgIGlmICghJGVtYWlsX2dpdF9wZW5ndWluX2NoaWVmcykg eworCUBsaW5lcyA9IGdyZXAoIS8ke3Blbmd1aW5fY2hpZWZzfS9pLCBAbGluZXMpOworICAgIH0K KworICAgIHJldHVybiBAbGluZXMgaWYgIUBsaW5lczsKKworICAgIG15IEBhdXRob3JzID0gKCk7 CisgICAgZm9yZWFjaCBteSAkbGluZSAoQGxpbmVzKSB7CisJaWYgKCRsaW5lID1+IG0vJFZDU19j bWRzeyJhdXRob3JfcGF0dGVybiJ9LykgeworCSAgICBteSAkYXV0aG9yID0gJDE7CisJICAgIG15 ICgkbmFtZSwgJGFkZHJlc3MpID0gcGFyc2VfZW1haWwoJGF1dGhvcik7CisJICAgICRhdXRob3Ig PSBmb3JtYXRfZW1haWwoJG5hbWUsICRhZGRyZXNzLCAxKTsKKwkgICAgcHVzaChAYXV0aG9ycywg JGF1dGhvcik7CisJfQorICAgIH0KKworICAgIHNhdmVfY29tbWl0c19ieV9hdXRob3IoQGxpbmVz KSBpZiAoJGludGVyYWN0aXZlKTsKKyAgICBzYXZlX2NvbW1pdHNfYnlfc2lnbmVyKEBsaW5lcykg aWYgKCRpbnRlcmFjdGl2ZSk7CisKKyAgICByZXR1cm4gQGF1dGhvcnM7Cit9CisKK3N1YiB2Y3Nf c2F2ZV9jb21taXRzIHsKKyAgICBteSAoJGNtZCkgPSBAXzsKKyAgICBteSBAbGluZXMgPSAoKTsK KyAgICBteSBAY29tbWl0cyA9ICgpOworCisgICAgQGxpbmVzID0gJnskVkNTX2NtZHN7ImV4ZWN1 dGVfY21kIn19KCRjbWQpOworCisgICAgZm9yZWFjaCBteSAkbGluZSAoQGxpbmVzKSB7CisJaWYg KCRsaW5lID1+IG0vJFZDU19jbWRzeyJibGFtZV9jb21taXRfcGF0dGVybiJ9LykgeworCSAgICBw dXNoKEBjb21taXRzLCAkMSk7CisJfQorICAgIH0KKworICAgIHJldHVybiBAY29tbWl0czsKK30K Kworc3ViIHZjc19ibGFtZSB7CisgICAgbXkgKCRmaWxlKSA9IEBfOworICAgIG15ICRjbWQ7Cisg ICAgbXkgQGNvbW1pdHMgPSAoKTsKKworICAgIHJldHVybiBAY29tbWl0cyBpZiAoISgtZiAkZmls ZSkpOworCisgICAgaWYgKEByYW5nZSAmJiAkVkNTX2NtZHN7ImJsYW1lX3JhbmdlX2NtZCJ9IGVx ICIiKSB7CisJbXkgQGFsbF9jb21taXRzID0gKCk7CisKKwkkY21kID0gJFZDU19jbWRzeyJibGFt ZV9maWxlX2NtZCJ9OworCSRjbWQgPX4gcy8oXCRcdyspLyQxL2VlZzsJCSNpbnRlcnBvbGF0ZSAk Y21kCisJQGFsbF9jb21taXRzID0gdmNzX3NhdmVfY29tbWl0cygkY21kKTsKKworCWZvcmVhY2gg bXkgJGZpbGVfcmFuZ2VfZGlmZiAoQHJhbmdlKSB7CisJICAgIG5leHQgaWYgKCEoJGZpbGVfcmFu Z2VfZGlmZiA9fiBtLyguKyk6KC4rKTooLispLykpOworCSAgICBteSAkZGlmZl9maWxlID0gJDE7 CisJICAgIG15ICRkaWZmX3N0YXJ0ID0gJDI7CisJICAgIG15ICRkaWZmX2xlbmd0aCA9ICQzOwor CSAgICBuZXh0IGlmICgiJGZpbGUiIG5lICIkZGlmZl9maWxlIik7CisJICAgIGZvciAobXkgJGkg PSAkZGlmZl9zdGFydDsgJGkgPCAkZGlmZl9zdGFydCArICRkaWZmX2xlbmd0aDsgJGkrKykgewor CQlwdXNoKEBjb21taXRzLCAkYWxsX2NvbW1pdHNbJGldKTsKKwkgICAgfQorCX0KKyAgICB9IGVs c2lmIChAcmFuZ2UpIHsKKwlmb3JlYWNoIG15ICRmaWxlX3JhbmdlX2RpZmYgKEByYW5nZSkgewor CSAgICBuZXh0IGlmICghKCRmaWxlX3JhbmdlX2RpZmYgPX4gbS8oLispOiguKyk6KC4rKS8pKTsK KwkgICAgbXkgJGRpZmZfZmlsZSA9ICQxOworCSAgICBteSAkZGlmZl9zdGFydCA9ICQyOworCSAg ICBteSAkZGlmZl9sZW5ndGggPSAkMzsKKwkgICAgbmV4dCBpZiAoIiRmaWxlIiBuZSAiJGRpZmZf ZmlsZSIpOworCSAgICAkY21kID0gJFZDU19jbWRzeyJibGFtZV9yYW5nZV9jbWQifTsKKwkgICAg JGNtZCA9fiBzLyhcJFx3KykvJDEvZWVnOwkJI2ludGVycG9sYXRlICRjbWQKKwkgICAgcHVzaChA Y29tbWl0cywgdmNzX3NhdmVfY29tbWl0cygkY21kKSk7CisJfQorICAgIH0gZWxzZSB7CisJJGNt ZCA9ICRWQ1NfY21kc3siYmxhbWVfZmlsZV9jbWQifTsKKwkkY21kID1+IHMvKFwkXHcrKS8kMS9l ZWc7CQkjaW50ZXJwb2xhdGUgJGNtZAorCUBjb21taXRzID0gdmNzX3NhdmVfY29tbWl0cygkY21k KTsKKyAgICB9CisKKyAgICBmb3JlYWNoIG15ICRjb21taXQgKEBjb21taXRzKSB7CisJJGNvbW1p dCA9fiBzL15cXi8vZzsKKyAgICB9CisKKyAgICByZXR1cm4gQGNvbW1pdHM7Cit9CisKK215ICRw cmludGVkX25vdmNzID0gMDsKK3N1YiB2Y3NfZXhpc3RzIHsKKyAgICAlVkNTX2NtZHMgPSAlVkNT X2NtZHNfZ2l0OworICAgIHJldHVybiAxIGlmIGV2YWwgJFZDU19jbWRzeyJhdmFpbGFibGUifTsK KyAgICAlVkNTX2NtZHMgPSAlVkNTX2NtZHNfaGc7CisgICAgcmV0dXJuIDIgaWYgZXZhbCAkVkNT X2NtZHN7ImF2YWlsYWJsZSJ9OworICAgICVWQ1NfY21kcyA9ICgpOworICAgIGlmICghJHByaW50 ZWRfbm92Y3MpIHsKKwl3YXJuKCIkUDogTm8gc3VwcG9ydGVkIFZDUyBmb3VuZC4gIEFkZCAtLW5v Z2l0IHRvIG9wdGlvbnM/XG4iKTsKKwl3YXJuKCJVc2luZyBhIGdpdCByZXBvc2l0b3J5IHByb2R1 Y2VzIGJldHRlciByZXN1bHRzLlxuIik7CisJd2FybigiVHJ5IGt2bS11bml0LXRlc3RzJ3MgbGF0 ZXN0IGdpdCByZXBvc2l0b3J5IHVzaW5nOlxuIik7CisJd2FybigiZ2l0IGNsb25lIGh0dHBzOi8v Z2l0bGFiLmNvbS9rdm0tdW5pdC10ZXN0cy9rdm0tdW5pdC10ZXN0c1xuIik7CisJJHByaW50ZWRf bm92Y3MgPSAxOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworc3ViIHZjc19pc19naXQgewor ICAgIHZjc19leGlzdHMoKTsKKyAgICByZXR1cm4gJHZjc191c2VkID09IDE7Cit9CisKK3N1YiB2 Y3NfaXNfaGcgeworICAgIHJldHVybiAkdmNzX3VzZWQgPT0gMjsKK30KKworc3ViIHZjc19hZGRf Y29tbWl0X3NpZ25lcnMgeworICAgIHJldHVybiBpZiAoIXZjc19leGlzdHMoKSk7CisKKyAgICBt eSAoJGNvbW1pdCwgJGRlc2MpID0gQF87CisgICAgbXkgJGNvbW1pdF9jb3VudCA9IDA7CisgICAg bXkgJGNvbW1pdF9hdXRob3JzX3JlZjsKKyAgICBteSAkY29tbWl0X3NpZ25lcnNfcmVmOworICAg IG15ICRzdGF0c19yZWY7CisgICAgbXkgQGNvbW1pdF9hdXRob3JzID0gKCk7CisgICAgbXkgQGNv bW1pdF9zaWduZXJzID0gKCk7CisgICAgbXkgJGNtZDsKKworICAgICRjbWQgPSAkVkNTX2NtZHN7 ImZpbmRfY29tbWl0X3NpZ25lcnNfY21kIn07CisgICAgJGNtZCA9fiBzLyhcJFx3KykvJDEvZWVn Owkjc3Vic3RpdHV0ZSB2YXJpYWJsZXMgaW4gJGNtZAorCisgICAgKCRjb21taXRfY291bnQsICRj b21taXRfc2lnbmVyc19yZWYsICRjb21taXRfYXV0aG9yc19yZWYsICRzdGF0c19yZWYpID0gdmNz X2ZpbmRfc2lnbmVycygkY21kLCAiIik7CisgICAgQGNvbW1pdF9hdXRob3JzID0gQHskY29tbWl0 X2F1dGhvcnNfcmVmfSBpZiBkZWZpbmVkICRjb21taXRfYXV0aG9yc19yZWY7CisgICAgQGNvbW1p dF9zaWduZXJzID0gQHskY29tbWl0X3NpZ25lcnNfcmVmfSBpZiBkZWZpbmVkICRjb21taXRfc2ln bmVyc19yZWY7CisKKyAgICBmb3JlYWNoIG15ICRzaWduZXIgKEBjb21taXRfc2lnbmVycykgewor CSRzaWduZXIgPSBkZWR1cGxpY2F0ZV9lbWFpbCgkc2lnbmVyKTsKKyAgICB9CisKKyAgICB2Y3Nf YXNzaWduKCRkZXNjLCAxLCBAY29tbWl0X3NpZ25lcnMpOworfQorCitzdWIgaW50ZXJhY3RpdmVf Z2V0X21haW50YWluZXJzIHsKKyAgICBteSAoJGxpc3RfcmVmKSA9IEBfOworICAgIG15IEBsaXN0 ID0gQCRsaXN0X3JlZjsKKworICAgIHZjc19leGlzdHMoKTsKKworICAgIG15ICVzZWxlY3RlZDsK KyAgICBteSAlYXV0aG9yZWQ7CisgICAgbXkgJXNpZ25lZDsKKyAgICBteSAkY291bnQgPSAwOwor ICAgIG15ICRtYWludGFpbmVkID0gMDsKKyAgICBmb3JlYWNoIG15ICRlbnRyeSAoQGxpc3QpIHsK KwkkbWFpbnRhaW5lZCA9IDEgaWYgKCRlbnRyeS0+WzFdID1+IC9eKG1haW50YWluZXJ8c3VwcG9y dGVyKS9pKTsKKwkkc2VsZWN0ZWR7JGNvdW50fSA9IDE7CisJJGF1dGhvcmVkeyRjb3VudH0gPSAw OworCSRzaWduZWR7JGNvdW50fSA9IDA7CisJJGNvdW50Kys7CisgICAgfQorCisgICAgI21lbnUg bG9vcAorICAgIG15ICRkb25lID0gMDsKKyAgICBteSAkcHJpbnRfb3B0aW9ucyA9IDA7CisgICAg bXkgJHJlZHJhdyA9IDE7CisgICAgd2hpbGUgKCEkZG9uZSkgeworCSRjb3VudCA9IDA7CisJaWYg KCRyZWRyYXcpIHsKKwkgICAgcHJpbnRmIFNUREVSUiAiXG4lMXMgJTJzICUtNjVzIiwKKwkJCSAg IioiLCAiIyIsICJlbWFpbC9saXN0IGFuZCByb2xlOnN0YXRzIjsKKwkgICAgaWYgKCRlbWFpbF9n aXQgfHwKKwkJKCRlbWFpbF9naXRfZmFsbGJhY2sgJiYgISRtYWludGFpbmVkKSB8fAorCQkkZW1h aWxfZ2l0X2JsYW1lKSB7CisJCXByaW50IFNUREVSUiAiYXV0aCBzaWduIjsKKwkgICAgfQorCSAg ICBwcmludCBTVERFUlIgIlxuIjsKKwkgICAgZm9yZWFjaCBteSAkZW50cnkgKEBsaXN0KSB7CisJ CW15ICRlbWFpbCA9ICRlbnRyeS0+WzBdOworCQlteSAkcm9sZSA9ICRlbnRyeS0+WzFdOworCQlt eSAkc2VsID0gIiI7CisJCSRzZWwgPSAiKiIgaWYgKCRzZWxlY3RlZHskY291bnR9KTsKKwkJbXkg JGNvbW1pdF9hdXRob3IgPSAkY29tbWl0X2F1dGhvcl9oYXNoeyRlbWFpbH07CisJCW15ICRjb21t aXRfc2lnbmVyID0gJGNvbW1pdF9zaWduZXJfaGFzaHskZW1haWx9OworCQlteSAkYXV0aG9yZWQg PSAwOworCQlteSAkc2lnbmVkID0gMDsKKwkJJGF1dGhvcmVkKysgZm9yIChAeyRjb21taXRfYXV0 aG9yfSk7CisJCSRzaWduZWQrKyBmb3IgKEB7JGNvbW1pdF9zaWduZXJ9KTsKKwkJcHJpbnRmIFNU REVSUiAiJTFzICUyZCAlLTY1cyIsICRzZWwsICRjb3VudCArIDEsICRlbWFpbDsKKwkJcHJpbnRm IFNUREVSUiAiJTRkICU0ZCIsICRhdXRob3JlZCwgJHNpZ25lZAorCQkgICAgaWYgKCRhdXRob3Jl ZCA+IDAgfHwgJHNpZ25lZCA+IDApOworCQlwcmludGYgU1RERVJSICJcbiAgICAgJXNcbiIsICRy b2xlOworCQlpZiAoJGF1dGhvcmVkeyRjb3VudH0pIHsKKwkJICAgIG15ICRjb21taXRfYXV0aG9y ID0gJGNvbW1pdF9hdXRob3JfaGFzaHskZW1haWx9OworCQkgICAgZm9yZWFjaCBteSAkcmVmIChA eyRjb21taXRfYXV0aG9yfSkgeworCQkJcHJpbnQgU1RERVJSICIgICAgIEF1dGhvcjogQHskcmVm fVsxXVxuIjsKKwkJICAgIH0KKwkJfQorCQlpZiAoJHNpZ25lZHskY291bnR9KSB7CisJCSAgICBt eSAkY29tbWl0X3NpZ25lciA9ICRjb21taXRfc2lnbmVyX2hhc2h7JGVtYWlsfTsKKwkJICAgIGZv cmVhY2ggbXkgJHJlZiAoQHskY29tbWl0X3NpZ25lcn0pIHsKKwkJCXByaW50IFNUREVSUiAiICAg ICBAeyRyZWZ9WzJdOiBAeyRyZWZ9WzFdXG4iOworCQkgICAgfQorCQl9CisKKwkJJGNvdW50Kys7 CisJICAgIH0KKwl9CisJbXkgJGRhdGVfcmVmID0gXCRlbWFpbF9naXRfc2luY2U7CisJJGRhdGVf cmVmID0gXCRlbWFpbF9oZ19zaW5jZSBpZiAodmNzX2lzX2hnKCkpOworCWlmICgkcHJpbnRfb3B0 aW9ucykgeworCSAgICAkcHJpbnRfb3B0aW9ucyA9IDA7CisJICAgIGlmICh2Y3NfZXhpc3RzKCkp IHsKKwkJcHJpbnQgU1RERVJSIDw8RU9UCisKK1ZlcnNpb24gQ29udHJvbCBvcHRpb25zOgorZyAg dXNlIGdpdCBoaXN0b3J5ICAgICAgWyRlbWFpbF9naXRdCitnZiB1c2UgZ2l0LWZhbGxiYWNrICAg ICBbJGVtYWlsX2dpdF9mYWxsYmFja10KK2IgIHVzZSBnaXQgYmxhbWUgICAgICAgIFskZW1haWxf Z2l0X2JsYW1lXQorYnMgdXNlIGJsYW1lIHNpZ25hdHVyZXMgWyRlbWFpbF9naXRfYmxhbWVfc2ln bmF0dXJlc10KK2MjIG1pbmltdW0gY29tbWl0cyAgICAgIFskZW1haWxfZ2l0X21pbl9zaWduYXR1 cmVzXQorJSMgbWluIHBlcmNlbnQgICAgICAgICAgWyRlbWFpbF9naXRfbWluX3BlcmNlbnRdCitk IyBoaXN0b3J5IHRvIHVzZSAgICAgICBbJCRkYXRlX3JlZl0KK3gjIG1heCBtYWludGFpbmVycyAg ICAgIFskZW1haWxfZ2l0X21heF9tYWludGFpbmVyc10KK3QgIGFsbCBzaWduYXR1cmUgdHlwZXMg IFskZW1haWxfZ2l0X2FsbF9zaWduYXR1cmVfdHlwZXNdCittICB1c2UgLm1haWxtYXAgICAgICAg ICBbJGVtYWlsX3VzZV9tYWlsbWFwXQorRU9UCisJICAgIH0KKwkgICAgcHJpbnQgU1RERVJSIDw8 RU9UCisKK0FkZGl0aW9uYWwgb3B0aW9uczoKKzAgIHRvZ2dsZSBhbGwKK3RtIHRvZ2dsZSBtYWlu dGFpbmVycwordGcgdG9nZ2xlIGdpdCBlbnRyaWVzCit0bCB0b2dnbGUgb3BlbiBsaXN0IGVudHJp ZXMKK3RzIHRvZ2dsZSBzdWJzY3JpYmVyIGxpc3QgZW50cmllcworZiAgZW1haWxzIGluIGZpbGUg ICAgICAgWyRlbWFpbF9maWxlX2VtYWlsc10KK2sgIGtleXdvcmRzIGluIGZpbGUgICAgIFska2V5 d29yZHNdCityICByZW1vdmUgZHVwbGljYXRlcyAgICBbJGVtYWlsX3JlbW92ZV9kdXBsaWNhdGVz XQorcCMgcGF0dGVybiBtYXRjaCBkZXB0aCAgWyRwYXR0ZXJuX2RlcHRoXQorRU9UCisJfQorCXBy aW50IFNUREVSUgorIlxuIyh0b2dnbGUpLCBBIyhhdXRob3IpLCBTIyhzaWduZWQpICooYWxsKSwg Xihub25lKSwgTyhvcHRpb25zKSwgWShhcHByb3ZlKTogIjsKKworCW15ICRpbnB1dCA9IDxTVERJ Tj47CisJY2hvbXAoJGlucHV0KTsKKworCSRyZWRyYXcgPSAxOworCW15ICRyZXJ1biA9IDA7CisJ bXkgQHdpc2ggPSBzcGxpdCgvWywgXSsvLCAkaW5wdXQpOworCWZvcmVhY2ggbXkgJG5yIChAd2lz aCkgeworCSAgICAkbnIgPSBsYygkbnIpOworCSAgICBteSAkc2VsID0gc3Vic3RyKCRuciwgMCwg MSk7CisJICAgIG15ICRzdHIgPSBzdWJzdHIoJG5yLCAxKTsKKwkgICAgbXkgJHZhbCA9IDA7CisJ ICAgICR2YWwgPSAkMSBpZiAkc3RyID1+IC9eKFxkKykkLzsKKworCSAgICBpZiAoJHNlbCBlcSAi eSIpIHsKKwkJJGludGVyYWN0aXZlID0gMDsKKwkJJGRvbmUgPSAxOworCQkkb3V0cHV0X3JvbGVz dGF0cyA9IDA7CisJCSRvdXRwdXRfcm9sZXMgPSAwOworCQlsYXN0OworCSAgICB9IGVsc2lmICgk bnIgPX4gL15cZCskLyAmJiAkbnIgPiAwICYmICRuciA8PSAkY291bnQpIHsKKwkJJHNlbGVjdGVk eyRuciAtIDF9ID0gISRzZWxlY3RlZHskbnIgLSAxfTsKKwkgICAgfSBlbHNpZiAoJHNlbCBlcSAi KiIgfHwgJHNlbCBlcSAnXicpIHsKKwkJbXkgJHRvZ2dsZSA9IDA7CisJCSR0b2dnbGUgPSAxIGlm ICgkc2VsIGVxICcqJyk7CisJCWZvciAobXkgJGkgPSAwOyAkaSA8ICRjb3VudDsgJGkrKykgewor CQkgICAgJHNlbGVjdGVkeyRpfSA9ICR0b2dnbGU7CisJCX0KKwkgICAgfSBlbHNpZiAoJHNlbCBl cSAiMCIpIHsKKwkJZm9yIChteSAkaSA9IDA7ICRpIDwgJGNvdW50OyAkaSsrKSB7CisJCSAgICAk c2VsZWN0ZWR7JGl9ID0gISRzZWxlY3RlZHskaX07CisJCX0KKwkgICAgfSBlbHNpZiAoJHNlbCBl cSAidCIpIHsKKwkJaWYgKGxjKCRzdHIpIGVxICJtIikgeworCQkgICAgZm9yIChteSAkaSA9IDA7 ICRpIDwgJGNvdW50OyAkaSsrKSB7CisJCQkkc2VsZWN0ZWR7JGl9ID0gISRzZWxlY3RlZHskaX0K KwkJCSAgICBpZiAoJGxpc3RbJGldLT5bMV0gPX4gL14obWFpbnRhaW5lcnxzdXBwb3J0ZXIpL2kp OworCQkgICAgfQorCQl9IGVsc2lmIChsYygkc3RyKSBlcSAiZyIpIHsKKwkJICAgIGZvciAobXkg JGkgPSAwOyAkaSA8ICRjb3VudDsgJGkrKykgeworCQkJJHNlbGVjdGVkeyRpfSA9ICEkc2VsZWN0 ZWR7JGl9CisJCQkgICAgaWYgKCRsaXN0WyRpXS0+WzFdID1+IC9eKGF1dGhvcnxjb21taXR8c2ln bmVyKS9pKTsKKwkJICAgIH0KKwkJfSBlbHNpZiAobGMoJHN0cikgZXEgImwiKSB7CisJCSAgICBm b3IgKG15ICRpID0gMDsgJGkgPCAkY291bnQ7ICRpKyspIHsKKwkJCSRzZWxlY3RlZHskaX0gPSAh JHNlbGVjdGVkeyRpfQorCQkJICAgIGlmICgkbGlzdFskaV0tPlsxXSA9fiAvXihvcGVuIGxpc3Qp L2kpOworCQkgICAgfQorCQl9IGVsc2lmIChsYygkc3RyKSBlcSAicyIpIHsKKwkJICAgIGZvciAo bXkgJGkgPSAwOyAkaSA8ICRjb3VudDsgJGkrKykgeworCQkJJHNlbGVjdGVkeyRpfSA9ICEkc2Vs ZWN0ZWR7JGl9CisJCQkgICAgaWYgKCRsaXN0WyRpXS0+WzFdID1+IC9eKHN1YnNjcmliZXIgbGlz dCkvaSk7CisJCSAgICB9CisJCX0KKwkgICAgfSBlbHNpZiAoJHNlbCBlcSAiYSIpIHsKKwkJaWYg KCR2YWwgPiAwICYmICR2YWwgPD0gJGNvdW50KSB7CisJCSAgICAkYXV0aG9yZWR7JHZhbCAtIDF9 ID0gISRhdXRob3JlZHskdmFsIC0gMX07CisJCX0gZWxzaWYgKCRzdHIgZXEgJyonIHx8ICRzdHIg ZXEgJ14nKSB7CisJCSAgICBteSAkdG9nZ2xlID0gMDsKKwkJICAgICR0b2dnbGUgPSAxIGlmICgk c3RyIGVxICcqJyk7CisJCSAgICBmb3IgKG15ICRpID0gMDsgJGkgPCAkY291bnQ7ICRpKyspIHsK KwkJCSRhdXRob3JlZHskaX0gPSAkdG9nZ2xlOworCQkgICAgfQorCQl9CisJICAgIH0gZWxzaWYg KCRzZWwgZXEgInMiKSB7CisJCWlmICgkdmFsID4gMCAmJiAkdmFsIDw9ICRjb3VudCkgeworCQkg ICAgJHNpZ25lZHskdmFsIC0gMX0gPSAhJHNpZ25lZHskdmFsIC0gMX07CisJCX0gZWxzaWYgKCRz dHIgZXEgJyonIHx8ICRzdHIgZXEgJ14nKSB7CisJCSAgICBteSAkdG9nZ2xlID0gMDsKKwkJICAg ICR0b2dnbGUgPSAxIGlmICgkc3RyIGVxICcqJyk7CisJCSAgICBmb3IgKG15ICRpID0gMDsgJGkg PCAkY291bnQ7ICRpKyspIHsKKwkJCSRzaWduZWR7JGl9ID0gJHRvZ2dsZTsKKwkJICAgIH0KKwkJ fQorCSAgICB9IGVsc2lmICgkc2VsIGVxICJvIikgeworCQkkcHJpbnRfb3B0aW9ucyA9IDE7CisJ CSRyZWRyYXcgPSAxOworCSAgICB9IGVsc2lmICgkc2VsIGVxICJnIikgeworCQlpZiAoJHN0ciBl cSAiZiIpIHsKKwkJICAgIGJvb2xfaW52ZXJ0KFwkZW1haWxfZ2l0X2ZhbGxiYWNrKTsKKwkJfSBl bHNlIHsKKwkJICAgIGJvb2xfaW52ZXJ0KFwkZW1haWxfZ2l0KTsKKwkJfQorCQkkcmVydW4gPSAx OworCSAgICB9IGVsc2lmICgkc2VsIGVxICJiIikgeworCQlpZiAoJHN0ciBlcSAicyIpIHsKKwkJ ICAgIGJvb2xfaW52ZXJ0KFwkZW1haWxfZ2l0X2JsYW1lX3NpZ25hdHVyZXMpOworCQl9IGVsc2Ug eworCQkgICAgYm9vbF9pbnZlcnQoXCRlbWFpbF9naXRfYmxhbWUpOworCQl9CisJCSRyZXJ1biA9 IDE7CisJICAgIH0gZWxzaWYgKCRzZWwgZXEgImMiKSB7CisJCWlmICgkdmFsID4gMCkgeworCQkg ICAgJGVtYWlsX2dpdF9taW5fc2lnbmF0dXJlcyA9ICR2YWw7CisJCSAgICAkcmVydW4gPSAxOwor CQl9CisJICAgIH0gZWxzaWYgKCRzZWwgZXEgIngiKSB7CisJCWlmICgkdmFsID4gMCkgeworCQkg ICAgJGVtYWlsX2dpdF9tYXhfbWFpbnRhaW5lcnMgPSAkdmFsOworCQkgICAgJHJlcnVuID0gMTsK KwkJfQorCSAgICB9IGVsc2lmICgkc2VsIGVxICIlIikgeworCQlpZiAoJHN0ciBuZSAiIiAmJiAk dmFsID49IDApIHsKKwkJICAgICRlbWFpbF9naXRfbWluX3BlcmNlbnQgPSAkdmFsOworCQkgICAg JHJlcnVuID0gMTsKKwkJfQorCSAgICB9IGVsc2lmICgkc2VsIGVxICJkIikgeworCQlpZiAodmNz X2lzX2dpdCgpKSB7CisJCSAgICAkZW1haWxfZ2l0X3NpbmNlID0gJHN0cjsKKwkJfSBlbHNpZiAo dmNzX2lzX2hnKCkpIHsKKwkJICAgICRlbWFpbF9oZ19zaW5jZSA9ICRzdHI7CisJCX0KKwkJJHJl cnVuID0gMTsKKwkgICAgfSBlbHNpZiAoJHNlbCBlcSAidCIpIHsKKwkJYm9vbF9pbnZlcnQoXCRl bWFpbF9naXRfYWxsX3NpZ25hdHVyZV90eXBlcyk7CisJCSRyZXJ1biA9IDE7CisJICAgIH0gZWxz aWYgKCRzZWwgZXEgImYiKSB7CisJCWJvb2xfaW52ZXJ0KFwkZW1haWxfZmlsZV9lbWFpbHMpOwor CQkkcmVydW4gPSAxOworCSAgICB9IGVsc2lmICgkc2VsIGVxICJyIikgeworCQlib29sX2ludmVy dChcJGVtYWlsX3JlbW92ZV9kdXBsaWNhdGVzKTsKKwkJJHJlcnVuID0gMTsKKwkgICAgfSBlbHNp ZiAoJHNlbCBlcSAibSIpIHsKKwkJYm9vbF9pbnZlcnQoXCRlbWFpbF91c2VfbWFpbG1hcCk7CisJ CXJlYWRfbWFpbG1hcCgpOworCQkkcmVydW4gPSAxOworCSAgICB9IGVsc2lmICgkc2VsIGVxICJr IikgeworCQlib29sX2ludmVydChcJGtleXdvcmRzKTsKKwkJJHJlcnVuID0gMTsKKwkgICAgfSBl bHNpZiAoJHNlbCBlcSAicCIpIHsKKwkJaWYgKCRzdHIgbmUgIiIgJiYgJHZhbCA+PSAwKSB7CisJ CSAgICAkcGF0dGVybl9kZXB0aCA9ICR2YWw7CisJCSAgICAkcmVydW4gPSAxOworCQl9CisJICAg IH0gZWxzaWYgKCRzZWwgZXEgImgiIHx8ICRzZWwgZXEgIj8iKSB7CisJCXByaW50IFNUREVSUiA8 PEVPVAorCitJbnRlcmFjdGl2ZSBtb2RlIGFsbG93cyB5b3UgdG8gc2VsZWN0IHRoZSB2YXJpb3Vz IG1haW50YWluZXJzLCBzdWJtaXR0ZXJzLAorY29tbWl0IHNpZ25lcnMgYW5kIG1haWxpbmcgbGlz dHMgdGhhdCBjb3VsZCBiZSBDQydkIG9uIGEgcGF0Y2guCisKK0FueSAqJ2QgZW50cnkgaXMgc2Vs ZWN0ZWQuCisKK0lmIHlvdSBoYXZlIGdpdCBvciBoZyBpbnN0YWxsZWQsIHlvdSBjYW4gY2hvb3Nl IHRvIHN1bW1hcml6ZSB0aGUgY29tbWl0CitoaXN0b3J5IG9mIGZpbGVzIGluIHRoZSBwYXRjaC4g IEFsc28sIGVhY2ggbGluZSBvZiB0aGUgY3VycmVudCBmaWxlIGNhbgorYmUgbWF0Y2hlZCB0byBp dHMgY29tbWl0IGF1dGhvciBhbmQgdGhhdCBjb21taXRzIHNpZ25lcnMgd2l0aCBibGFtZS4KKwor VmFyaW91cyBrbm9icyBleGlzdCB0byBjb250cm9sIHRoZSBsZW5ndGggb2YgdGltZSBmb3IgYWN0 aXZlIGNvbW1pdAordHJhY2tpbmcsIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjb21taXQgYXV0aG9y cyBhbmQgc2lnbmVycyB0byBhZGQsCithbmQgc3VjaC4KKworRW50ZXIgc2VsZWN0aW9ucyBhdCB0 aGUgcHJvbXB0IHVudGlsIHlvdSBhcmUgc2F0aXNmaWVkIHRoYXQgdGhlIHNlbGVjdGVkCittYWlu dGFpbmVycyBhcmUgYXBwcm9wcmlhdGUuICBZb3UgbWF5IGVudGVyIG11bHRpcGxlIHNlbGVjdGlv bnMgc2VwYXJhdGVkCitieSBlaXRoZXIgY29tbWFzIG9yIHNwYWNlcy4KKworRU9UCisJICAgIH0g ZWxzZSB7CisJCXByaW50IFNUREVSUiAiaW52YWxpZCBvcHRpb246ICckbnInXG4iOworCQkkcmVk cmF3ID0gMDsKKwkgICAgfQorCX0KKwlpZiAoJHJlcnVuKSB7CisJICAgIHByaW50IFNUREVSUiAi Z2l0LWJsYW1lIGNhbiBiZSB2ZXJ5IHNsb3csIHBsZWFzZSBoYXZlIHBhdGllbmNlLi4uIgorCQlp ZiAoJGVtYWlsX2dpdF9ibGFtZSk7CisJICAgIGdvdG8gJmdldF9tYWludGFpbmVyczsKKwl9Cisg ICAgfQorCisgICAgI2Ryb3Agbm90IHNlbGVjdGVkIGVudHJpZXMKKyAgICAkY291bnQgPSAwOwor ICAgIG15IEBuZXdfZW1haWx0byA9ICgpOworICAgIGZvcmVhY2ggbXkgJGVudHJ5IChAbGlzdCkg eworCWlmICgkc2VsZWN0ZWR7JGNvdW50fSkgeworCSAgICBwdXNoKEBuZXdfZW1haWx0bywgJGxp c3RbJGNvdW50XSk7CisJfQorCSRjb3VudCsrOworICAgIH0KKyAgICByZXR1cm4gQG5ld19lbWFp bHRvOworfQorCitzdWIgYm9vbF9pbnZlcnQgeworICAgIG15ICgkYm9vbF9yZWYpID0gQF87CisK KyAgICBpZiAoJCRib29sX3JlZikgeworCSQkYm9vbF9yZWYgPSAwOworICAgIH0gZWxzZSB7CisJ JCRib29sX3JlZiA9IDE7CisgICAgfQorfQorCitzdWIgZGVkdXBsaWNhdGVfZW1haWwgeworICAg IG15ICgkZW1haWwpID0gQF87CisKKyAgICBteSAkbWF0Y2hlZCA9IDA7CisgICAgbXkgKCRuYW1l LCAkYWRkcmVzcykgPSBwYXJzZV9lbWFpbCgkZW1haWwpOworICAgICRlbWFpbCA9IGZvcm1hdF9l bWFpbCgkbmFtZSwgJGFkZHJlc3MsIDEpOworICAgICRlbWFpbCA9IG1haWxtYXBfZW1haWwoJGVt YWlsKTsKKworICAgIHJldHVybiAkZW1haWwgaWYgKCEkZW1haWxfcmVtb3ZlX2R1cGxpY2F0ZXMp OworCisgICAgKCRuYW1lLCAkYWRkcmVzcykgPSBwYXJzZV9lbWFpbCgkZW1haWwpOworCisgICAg aWYgKCRuYW1lIG5lICIiICYmICRkZWR1cGxpY2F0ZV9uYW1lX2hhc2h7bGMoJG5hbWUpfSkgewor CSRuYW1lID0gJGRlZHVwbGljYXRlX25hbWVfaGFzaHtsYygkbmFtZSl9LT5bMF07CisJJGFkZHJl c3MgPSAkZGVkdXBsaWNhdGVfbmFtZV9oYXNoe2xjKCRuYW1lKX0tPlsxXTsKKwkkbWF0Y2hlZCA9 IDE7CisgICAgfSBlbHNpZiAoJGRlZHVwbGljYXRlX2FkZHJlc3NfaGFzaHtsYygkYWRkcmVzcyl9 KSB7CisJJG5hbWUgPSAkZGVkdXBsaWNhdGVfYWRkcmVzc19oYXNoe2xjKCRhZGRyZXNzKX0tPlsw XTsKKwkkYWRkcmVzcyA9ICRkZWR1cGxpY2F0ZV9hZGRyZXNzX2hhc2h7bGMoJGFkZHJlc3MpfS0+ WzFdOworCSRtYXRjaGVkID0gMTsKKyAgICB9CisgICAgaWYgKCEkbWF0Y2hlZCkgeworCSRkZWR1 cGxpY2F0ZV9uYW1lX2hhc2h7bGMoJG5hbWUpfSA9IFsgJG5hbWUsICRhZGRyZXNzIF07CisJJGRl ZHVwbGljYXRlX2FkZHJlc3NfaGFzaHtsYygkYWRkcmVzcyl9ID0gWyAkbmFtZSwgJGFkZHJlc3Mg XTsKKyAgICB9CisgICAgJGVtYWlsID0gZm9ybWF0X2VtYWlsKCRuYW1lLCAkYWRkcmVzcywgMSk7 CisgICAgJGVtYWlsID0gbWFpbG1hcF9lbWFpbCgkZW1haWwpOworICAgIHJldHVybiAkZW1haWw7 Cit9CisKK3N1YiBzYXZlX2NvbW1pdHNfYnlfYXV0aG9yIHsKKyAgICBteSAoQGxpbmVzKSA9IEBf OworCisgICAgbXkgQGF1dGhvcnMgPSAoKTsKKyAgICBteSBAY29tbWl0cyA9ICgpOworICAgIG15 IEBzdWJqZWN0cyA9ICgpOworCisgICAgZm9yZWFjaCBteSAkbGluZSAoQGxpbmVzKSB7CisJaWYg KCRsaW5lID1+IG0vJFZDU19jbWRzeyJhdXRob3JfcGF0dGVybiJ9LykgeworCSAgICBteSAkYXV0 aG9yID0gJDE7CisJICAgICRhdXRob3IgPSBkZWR1cGxpY2F0ZV9lbWFpbCgkYXV0aG9yKTsKKwkg ICAgcHVzaChAYXV0aG9ycywgJGF1dGhvcik7CisJfQorCXB1c2goQGNvbW1pdHMsICQxKSBpZiAo JGxpbmUgPX4gbS8kVkNTX2NtZHN7ImNvbW1pdF9wYXR0ZXJuIn0vKTsKKwlwdXNoKEBzdWJqZWN0 cywgJDEpIGlmICgkbGluZSA9fiBtLyRWQ1NfY21kc3sic3ViamVjdF9wYXR0ZXJuIn0vKTsKKyAg ICB9CisKKyAgICBmb3IgKG15ICRpID0gMDsgJGkgPCBAYXV0aG9yczsgJGkrKykgeworCW15ICRl eGlzdHMgPSAwOworCWZvcmVhY2ggbXkgJHJlZihAeyRjb21taXRfYXV0aG9yX2hhc2h7JGF1dGhv cnNbJGldfX0pIHsKKwkgICAgaWYgKEB7JHJlZn1bMF0gZXEgJGNvbW1pdHNbJGldICYmCisJCUB7 JHJlZn1bMV0gZXEgJHN1YmplY3RzWyRpXSkgeworCQkkZXhpc3RzID0gMTsKKwkJbGFzdDsKKwkg ICAgfQorCX0KKwlpZiAoISRleGlzdHMpIHsKKwkgICAgcHVzaChAeyRjb21taXRfYXV0aG9yX2hh c2h7JGF1dGhvcnNbJGldfX0sCisJCSBbICgkY29tbWl0c1skaV0sICRzdWJqZWN0c1skaV0pIF0p OworCX0KKyAgICB9Cit9CisKK3N1YiBzYXZlX2NvbW1pdHNfYnlfc2lnbmVyIHsKKyAgICBteSAo QGxpbmVzKSA9IEBfOworCisgICAgbXkgJGNvbW1pdCA9ICIiOworICAgIG15ICRzdWJqZWN0ID0g IiI7CisKKyAgICBmb3JlYWNoIG15ICRsaW5lIChAbGluZXMpIHsKKwkkY29tbWl0ID0gJDEgaWYg KCRsaW5lID1+IG0vJFZDU19jbWRzeyJjb21taXRfcGF0dGVybiJ9Lyk7CisJJHN1YmplY3QgPSAk MSBpZiAoJGxpbmUgPX4gbS8kVkNTX2NtZHN7InN1YmplY3RfcGF0dGVybiJ9Lyk7CisJaWYgKCRs aW5lID1+IC9eWyBcdF0qJHtzaWduYXR1cmVfcGF0dGVybn0uKlxALiokLykgeworCSAgICBteSBA c2lnbmF0dXJlcyA9ICgkbGluZSk7CisJICAgIG15ICgkdHlwZXNfcmVmLCAkc2lnbmVyc19yZWYp ID0gZXh0cmFjdF9mb3JtYXR0ZWRfc2lnbmF0dXJlcyhAc2lnbmF0dXJlcyk7CisJICAgIG15IEB0 eXBlcyA9IEAkdHlwZXNfcmVmOworCSAgICBteSBAc2lnbmVycyA9IEAkc2lnbmVyc19yZWY7CisK KwkgICAgbXkgJHR5cGUgPSAkdHlwZXNbMF07CisJICAgIG15ICRzaWduZXIgPSAkc2lnbmVyc1sw XTsKKworCSAgICAkc2lnbmVyID0gZGVkdXBsaWNhdGVfZW1haWwoJHNpZ25lcik7CisKKwkgICAg bXkgJGV4aXN0cyA9IDA7CisJICAgIGZvcmVhY2ggbXkgJHJlZihAeyRjb21taXRfc2lnbmVyX2hh c2h7JHNpZ25lcn19KSB7CisJCWlmIChAeyRyZWZ9WzBdIGVxICRjb21taXQgJiYKKwkJICAgIEB7 JHJlZn1bMV0gZXEgJHN1YmplY3QgJiYKKwkJICAgIEB7JHJlZn1bMl0gZXEgJHR5cGUpIHsKKwkJ ICAgICRleGlzdHMgPSAxOworCQkgICAgbGFzdDsKKwkJfQorCSAgICB9CisJICAgIGlmICghJGV4 aXN0cykgeworCQlwdXNoKEB7JGNvbW1pdF9zaWduZXJfaGFzaHskc2lnbmVyfX0sCisJCSAgICAg WyAoJGNvbW1pdCwgJHN1YmplY3QsICR0eXBlKSBdKTsKKwkgICAgfQorCX0KKyAgICB9Cit9CisK K3N1YiB2Y3NfYXNzaWduIHsKKyAgICBteSAoJHJvbGUsICRkaXZpc29yLCBAbGluZXMpID0gQF87 CisKKyAgICBteSAlaGFzaDsKKyAgICBteSAkY291bnQgPSAwOworCisgICAgcmV0dXJuIGlmIChA bGluZXMgPD0gMCk7CisKKyAgICBpZiAoJGRpdmlzb3IgPD0gMCkgeworCXdhcm4oIkJhZCBkaXZp c29yIGluICIgLiAoY2FsbGVyKDApKVszXSAuICI6ICRkaXZpc29yXG4iKTsKKwkkZGl2aXNvciA9 IDE7CisgICAgfQorCisgICAgQGxpbmVzID0gbWFpbG1hcChAbGluZXMpOworCisgICAgcmV0dXJu IGlmIChAbGluZXMgPD0gMCk7CisKKyAgICBAbGluZXMgPSBzb3J0KEBsaW5lcyk7CisKKyAgICAj IHVuaXEgLWMKKyAgICAkaGFzaHskX30rKyBmb3IgQGxpbmVzOworCisgICAgIyBzb3J0IC1ybgor ICAgIGZvcmVhY2ggbXkgJGxpbmUgKHNvcnQgeyRoYXNoeyRifSA8PT4gJGhhc2h7JGF9fSBrZXlz ICVoYXNoKSB7CisJbXkgJHNpZ25fb2ZmcyA9ICRoYXNoeyRsaW5lfTsKKwlteSAkcGVyY2VudCA9 ICRzaWduX29mZnMgKiAxMDAgLyAkZGl2aXNvcjsKKworCSRwZXJjZW50ID0gMTAwIGlmICgkcGVy Y2VudCA+IDEwMCk7CisJbmV4dCBpZiAoaWdub3JlX2VtYWlsX2FkZHJlc3MoJGxpbmUpKTsKKwkk Y291bnQrKzsKKwlsYXN0IGlmICgkc2lnbl9vZmZzIDwgJGVtYWlsX2dpdF9taW5fc2lnbmF0dXJl cyB8fAorCQkgJGNvdW50ID4gJGVtYWlsX2dpdF9tYXhfbWFpbnRhaW5lcnMgfHwKKwkJICRwZXJj ZW50IDwgJGVtYWlsX2dpdF9taW5fcGVyY2VudCk7CisJcHVzaF9lbWFpbF9hZGRyZXNzKCRsaW5l LCAnJyk7CisJaWYgKCRvdXRwdXRfcm9sZXN0YXRzKSB7CisJICAgIG15ICRmbXRfcGVyY2VudCA9 IHNwcmludGYoIiUuMGYiLCAkcGVyY2VudCk7CisJICAgIGFkZF9yb2xlKCRsaW5lLCAiJHJvbGU6 JHNpZ25fb2Zmcy8kZGl2aXNvcj0kZm10X3BlcmNlbnQlIik7CisJfSBlbHNlIHsKKwkgICAgYWRk X3JvbGUoJGxpbmUsICRyb2xlKTsKKwl9CisgICAgfQorfQorCitzdWIgdmNzX2ZpbGVfc2lnbm9m ZnMgeworICAgIG15ICgkZmlsZSkgPSBAXzsKKworICAgIG15ICRhdXRob3JzX3JlZjsKKyAgICBt eSAkc2lnbmVyc19yZWY7CisgICAgbXkgJHN0YXRzX3JlZjsKKyAgICBteSBAYXV0aG9ycyA9ICgp OworICAgIG15IEBzaWduZXJzID0gKCk7CisgICAgbXkgQHN0YXRzID0gKCk7CisgICAgbXkgJGNv bW1pdHM7CisKKyAgICAkdmNzX3VzZWQgPSB2Y3NfZXhpc3RzKCk7CisgICAgcmV0dXJuIGlmICgh JHZjc191c2VkKTsKKworICAgIG15ICRjbWQgPSAkVkNTX2NtZHN7ImZpbmRfc2lnbmVyc19jbWQi fTsKKyAgICAkY21kID1+IHMvKFwkXHcrKS8kMS9lZWc7CQkjIGludGVycG9sYXRlICRjbWQKKwor ICAgICgkY29tbWl0cywgJHNpZ25lcnNfcmVmLCAkYXV0aG9yc19yZWYsICRzdGF0c19yZWYpID0g dmNzX2ZpbmRfc2lnbmVycygkY21kLCAkZmlsZSk7CisKKyAgICBAc2lnbmVycyA9IEB7JHNpZ25l cnNfcmVmfSBpZiBkZWZpbmVkICRzaWduZXJzX3JlZjsKKyAgICBAYXV0aG9ycyA9IEB7JGF1dGhv cnNfcmVmfSBpZiBkZWZpbmVkICRhdXRob3JzX3JlZjsKKyAgICBAc3RhdHMgPSBAeyRzdGF0c19y ZWZ9IGlmIGRlZmluZWQgJHN0YXRzX3JlZjsKKworIyAgICBwcmludCgiY29tbWl0czogPCRjb21t aXRzPlxuc2lnbmVyczo8QHNpZ25lcnM+XG5hdXRob3JzOiA8QGF1dGhvcnM+XG5zdGF0czogPEBz dGF0cz5cbiIpOworCisgICAgZm9yZWFjaCBteSAkc2lnbmVyIChAc2lnbmVycykgeworCSRzaWdu ZXIgPSBkZWR1cGxpY2F0ZV9lbWFpbCgkc2lnbmVyKTsKKyAgICB9CisKKyAgICB2Y3NfYXNzaWdu KCJjb21taXRfc2lnbmVyIiwgJGNvbW1pdHMsIEBzaWduZXJzKTsKKyAgICB2Y3NfYXNzaWduKCJh dXRob3JlZCIsICRjb21taXRzLCBAYXV0aG9ycyk7CisgICAgaWYgKCQjYXV0aG9ycyA9PSAkI3N0 YXRzKSB7CisJbXkgJHN0YXRfcGF0dGVybiA9ICRWQ1NfY21kc3sic3RhdF9wYXR0ZXJuIn07CisJ JHN0YXRfcGF0dGVybiA9fiBzLyhcJFx3KykvJDEvZWVnOwkjaW50ZXJwb2xhdGUgJHN0YXRfcGF0 dGVybgorCisJbXkgJGFkZGVkID0gMDsKKwlteSAkZGVsZXRlZCA9IDA7CisJZm9yIChteSAkaSA9 IDA7ICRpIDw9ICQjc3RhdHM7ICRpKyspIHsKKwkgICAgaWYgKCRzdGF0c1skaV0gPX4gLyRzdGF0 X3BhdHRlcm4vKSB7CisJCSRhZGRlZCArPSAkMTsKKwkJJGRlbGV0ZWQgKz0gJDI7CisJICAgIH0K Kwl9CisJbXkgQHRtcF9hdXRob3JzID0gdW5pcShAYXV0aG9ycyk7CisJZm9yZWFjaCBteSAkYXV0 aG9yIChAdG1wX2F1dGhvcnMpIHsKKwkgICAgJGF1dGhvciA9IGRlZHVwbGljYXRlX2VtYWlsKCRh dXRob3IpOworCX0KKwlAdG1wX2F1dGhvcnMgPSB1bmlxKEB0bXBfYXV0aG9ycyk7CisJbXkgQGxp c3RfYWRkZWQgPSAoKTsKKwlteSBAbGlzdF9kZWxldGVkID0gKCk7CisJZm9yZWFjaCBteSAkYXV0 aG9yIChAdG1wX2F1dGhvcnMpIHsKKwkgICAgbXkgJGF1dGhfYWRkZWQgPSAwOworCSAgICBteSAk YXV0aF9kZWxldGVkID0gMDsKKwkgICAgZm9yIChteSAkaSA9IDA7ICRpIDw9ICQjc3RhdHM7ICRp KyspIHsKKwkJaWYgKCRhdXRob3IgZXEgZGVkdXBsaWNhdGVfZW1haWwoJGF1dGhvcnNbJGldKSAm JgorCQkgICAgJHN0YXRzWyRpXSA9fiAvJHN0YXRfcGF0dGVybi8pIHsKKwkJICAgICRhdXRoX2Fk ZGVkICs9ICQxOworCQkgICAgJGF1dGhfZGVsZXRlZCArPSAkMjsKKwkJfQorCSAgICB9CisJICAg IGZvciAobXkgJGkgPSAwOyAkaSA8ICRhdXRoX2FkZGVkOyAkaSsrKSB7CisJCXB1c2goQGxpc3Rf YWRkZWQsICRhdXRob3IpOworCSAgICB9CisJICAgIGZvciAobXkgJGkgPSAwOyAkaSA8ICRhdXRo X2RlbGV0ZWQ7ICRpKyspIHsKKwkJcHVzaChAbGlzdF9kZWxldGVkLCAkYXV0aG9yKTsKKwkgICAg fQorCX0KKwl2Y3NfYXNzaWduKCJhZGRlZF9saW5lcyIsICRhZGRlZCwgQGxpc3RfYWRkZWQpOwor CXZjc19hc3NpZ24oInJlbW92ZWRfbGluZXMiLCAkZGVsZXRlZCwgQGxpc3RfZGVsZXRlZCk7Cisg ICAgfQorfQorCitzdWIgdmNzX2ZpbGVfYmxhbWUgeworICAgIG15ICgkZmlsZSkgPSBAXzsKKwor ICAgIG15IEBzaWduZXJzID0gKCk7CisgICAgbXkgQGFsbF9jb21taXRzID0gKCk7CisgICAgbXkg QGNvbW1pdHMgPSAoKTsKKyAgICBteSAkdG90YWxfY29tbWl0czsKKyAgICBteSAkdG90YWxfbGlu ZXM7CisKKyAgICAkdmNzX3VzZWQgPSB2Y3NfZXhpc3RzKCk7CisgICAgcmV0dXJuIGlmICghJHZj c191c2VkKTsKKworICAgIEBhbGxfY29tbWl0cyA9IHZjc19ibGFtZSgkZmlsZSk7CisgICAgQGNv bW1pdHMgPSB1bmlxKEBhbGxfY29tbWl0cyk7CisgICAgJHRvdGFsX2NvbW1pdHMgPSBAY29tbWl0 czsKKyAgICAkdG90YWxfbGluZXMgPSBAYWxsX2NvbW1pdHM7CisKKyAgICBpZiAoJGVtYWlsX2dp dF9ibGFtZV9zaWduYXR1cmVzKSB7CisJaWYgKHZjc19pc19oZygpKSB7CisJICAgIG15ICRjb21t aXRfY291bnQ7CisJICAgIG15ICRjb21taXRfYXV0aG9yc19yZWY7CisJICAgIG15ICRjb21taXRf c2lnbmVyc19yZWY7CisJICAgIG15ICRzdGF0c19yZWY7CisJICAgIG15IEBjb21taXRfYXV0aG9y cyA9ICgpOworCSAgICBteSBAY29tbWl0X3NpZ25lcnMgPSAoKTsKKwkgICAgbXkgJGNvbW1pdCA9 IGpvaW4oIiAtciAiLCBAY29tbWl0cyk7CisJICAgIG15ICRjbWQ7CisKKwkgICAgJGNtZCA9ICRW Q1NfY21kc3siZmluZF9jb21taXRfc2lnbmVyc19jbWQifTsKKwkgICAgJGNtZCA9fiBzLyhcJFx3 KykvJDEvZWVnOwkjc3Vic3RpdHV0ZSB2YXJpYWJsZXMgaW4gJGNtZAorCisJICAgICgkY29tbWl0 X2NvdW50LCAkY29tbWl0X3NpZ25lcnNfcmVmLCAkY29tbWl0X2F1dGhvcnNfcmVmLCAkc3RhdHNf cmVmKSA9IHZjc19maW5kX3NpZ25lcnMoJGNtZCwgJGZpbGUpOworCSAgICBAY29tbWl0X2F1dGhv cnMgPSBAeyRjb21taXRfYXV0aG9yc19yZWZ9IGlmIGRlZmluZWQgJGNvbW1pdF9hdXRob3JzX3Jl ZjsKKwkgICAgQGNvbW1pdF9zaWduZXJzID0gQHskY29tbWl0X3NpZ25lcnNfcmVmfSBpZiBkZWZp bmVkICRjb21taXRfc2lnbmVyc19yZWY7CisKKwkgICAgcHVzaChAc2lnbmVycywgQGNvbW1pdF9z aWduZXJzKTsKKwl9IGVsc2UgeworCSAgICBmb3JlYWNoIG15ICRjb21taXQgKEBjb21taXRzKSB7 CisJCW15ICRjb21taXRfY291bnQ7CisJCW15ICRjb21taXRfYXV0aG9yc19yZWY7CisJCW15ICRj b21taXRfc2lnbmVyc19yZWY7CisJCW15ICRzdGF0c19yZWY7CisJCW15IEBjb21taXRfYXV0aG9y cyA9ICgpOworCQlteSBAY29tbWl0X3NpZ25lcnMgPSAoKTsKKwkJbXkgJGNtZDsKKworCQkkY21k ID0gJFZDU19jbWRzeyJmaW5kX2NvbW1pdF9zaWduZXJzX2NtZCJ9OworCQkkY21kID1+IHMvKFwk XHcrKS8kMS9lZWc7CSNzdWJzdGl0dXRlIHZhcmlhYmxlcyBpbiAkY21kCisKKwkJKCRjb21taXRf Y291bnQsICRjb21taXRfc2lnbmVyc19yZWYsICRjb21taXRfYXV0aG9yc19yZWYsICRzdGF0c19y ZWYpID0gdmNzX2ZpbmRfc2lnbmVycygkY21kLCAkZmlsZSk7CisJCUBjb21taXRfYXV0aG9ycyA9 IEB7JGNvbW1pdF9hdXRob3JzX3JlZn0gaWYgZGVmaW5lZCAkY29tbWl0X2F1dGhvcnNfcmVmOwor CQlAY29tbWl0X3NpZ25lcnMgPSBAeyRjb21taXRfc2lnbmVyc19yZWZ9IGlmIGRlZmluZWQgJGNv bW1pdF9zaWduZXJzX3JlZjsKKworCQlwdXNoKEBzaWduZXJzLCBAY29tbWl0X3NpZ25lcnMpOwor CSAgICB9CisJfQorICAgIH0KKworICAgIGlmICgkZnJvbV9maWxlbmFtZSkgeworCWlmICgkb3V0 cHV0X3JvbGVzdGF0cykgeworCSAgICBteSBAYmxhbWVfc2lnbmVyczsKKwkgICAgaWYgKHZjc19p c19oZygpKSB7ewkJIyBEb3VibGUgYnJhY2UgZm9yIGxhc3QgZXhpdAorCQlteSAkY29tbWl0X2Nv dW50OworCQlteSBAY29tbWl0X3NpZ25lcnMgPSAoKTsKKwkJQGNvbW1pdHMgPSB1bmlxKEBjb21t aXRzKTsKKwkJQGNvbW1pdHMgPSBzb3J0KEBjb21taXRzKTsKKwkJbXkgJGNvbW1pdCA9IGpvaW4o IiAtciAiLCBAY29tbWl0cyk7CisJCW15ICRjbWQ7CisKKwkJJGNtZCA9ICRWQ1NfY21kc3siZmlu ZF9jb21taXRfYXV0aG9yX2NtZCJ9OworCQkkY21kID1+IHMvKFwkXHcrKS8kMS9lZWc7CSNzdWJz dGl0dXRlIHZhcmlhYmxlcyBpbiAkY21kCisKKwkJbXkgQGxpbmVzID0gKCk7CisKKwkJQGxpbmVz ID0gJnskVkNTX2NtZHN7ImV4ZWN1dGVfY21kIn19KCRjbWQpOworCisJCWlmICghJGVtYWlsX2dp dF9wZW5ndWluX2NoaWVmcykgeworCQkgICAgQGxpbmVzID0gZ3JlcCghLyR7cGVuZ3Vpbl9jaGll ZnN9L2ksIEBsaW5lcyk7CisJCX0KKworCQlsYXN0IGlmICFAbGluZXM7CisKKwkJbXkgQGF1dGhv cnMgPSAoKTsKKwkJZm9yZWFjaCBteSAkbGluZSAoQGxpbmVzKSB7CisJCSAgICBpZiAoJGxpbmUg PX4gbS8kVkNTX2NtZHN7ImF1dGhvcl9wYXR0ZXJuIn0vKSB7CisJCQlteSAkYXV0aG9yID0gJDE7 CisJCQkkYXV0aG9yID0gZGVkdXBsaWNhdGVfZW1haWwoJGF1dGhvcik7CisJCQlwdXNoKEBhdXRo b3JzLCAkYXV0aG9yKTsKKwkJICAgIH0KKwkJfQorCisJCXNhdmVfY29tbWl0c19ieV9hdXRob3Io QGxpbmVzKSBpZiAoJGludGVyYWN0aXZlKTsKKwkJc2F2ZV9jb21taXRzX2J5X3NpZ25lcihAbGlu ZXMpIGlmICgkaW50ZXJhY3RpdmUpOworCisJCXB1c2goQHNpZ25lcnMsIEBhdXRob3JzKTsKKwkg ICAgfX0KKwkgICAgZWxzZSB7CisJCWZvcmVhY2ggbXkgJGNvbW1pdCAoQGNvbW1pdHMpIHsKKwkJ ICAgIG15ICRpOworCQkgICAgbXkgJGNtZCA9ICRWQ1NfY21kc3siZmluZF9jb21taXRfYXV0aG9y X2NtZCJ9OworCQkgICAgJGNtZCA9fiBzLyhcJFx3KykvJDEvZWVnOwkjaW50ZXJwb2xhdGUgJGNt ZAorCQkgICAgbXkgQGF1dGhvciA9IHZjc19maW5kX2F1dGhvcigkY21kKTsKKwkJICAgIG5leHQg aWYgIUBhdXRob3I7CisKKwkJICAgIG15ICRmb3JtYXR0ZWRfYXV0aG9yID0gZGVkdXBsaWNhdGVf ZW1haWwoJGF1dGhvclswXSk7CisKKwkJICAgIG15ICRjb3VudCA9IGdyZXAoLyRjb21taXQvLCBA YWxsX2NvbW1pdHMpOworCQkgICAgZm9yICgkaSA9IDA7ICRpIDwgJGNvdW50IDsgJGkrKykgewor CQkJcHVzaChAYmxhbWVfc2lnbmVycywgJGZvcm1hdHRlZF9hdXRob3IpOworCQkgICAgfQorCQl9 CisJICAgIH0KKwkgICAgaWYgKEBibGFtZV9zaWduZXJzKSB7CisJCXZjc19hc3NpZ24oImF1dGhv cmVkIGxpbmVzIiwgJHRvdGFsX2xpbmVzLCBAYmxhbWVfc2lnbmVycyk7CisJICAgIH0KKwl9CisJ Zm9yZWFjaCBteSAkc2lnbmVyIChAc2lnbmVycykgeworCSAgICAkc2lnbmVyID0gZGVkdXBsaWNh dGVfZW1haWwoJHNpZ25lcik7CisJfQorCXZjc19hc3NpZ24oImNvbW1pdHMiLCAkdG90YWxfY29t bWl0cywgQHNpZ25lcnMpOworICAgIH0gZWxzZSB7CisJZm9yZWFjaCBteSAkc2lnbmVyIChAc2ln bmVycykgeworCSAgICAkc2lnbmVyID0gZGVkdXBsaWNhdGVfZW1haWwoJHNpZ25lcik7CisJfQor CXZjc19hc3NpZ24oIm1vZGlmaWVkIGNvbW1pdHMiLCAkdG90YWxfY29tbWl0cywgQHNpZ25lcnMp OworICAgIH0KK30KKworc3ViIHZjc19maWxlX2V4aXN0cyB7CisgICAgbXkgKCRmaWxlKSA9IEBf OworCisgICAgbXkgJGV4aXN0czsKKworICAgIG15ICR2Y3NfdXNlZCA9IHZjc19leGlzdHMoKTsK KyAgICByZXR1cm4gMCBpZiAoISR2Y3NfdXNlZCk7CisKKyAgICBteSAkY21kID0gJFZDU19jbWRz eyJmaWxlX2V4aXN0c19jbWQifTsKKyAgICAkY21kID1+IHMvKFwkXHcrKS8kMS9lZWc7CQkjIGlu dGVycG9sYXRlICRjbWQKKyAgICAkY21kIC49ICIgMj4mMSI7CisgICAgJGV4aXN0cyA9ICZ7JFZD U19jbWRzeyJleGVjdXRlX2NtZCJ9fSgkY21kKTsKKworICAgIHJldHVybiAwIGlmICgkPyAhPSAw KTsKKworICAgIHJldHVybiAkZXhpc3RzOworfQorCitzdWIgdmNzX2xpc3RfZmlsZXMgeworICAg IG15ICgkZmlsZSkgPSBAXzsKKworICAgIG15IEBsc2ZpbGVzID0gKCk7CisKKyAgICBteSAkdmNz X3VzZWQgPSB2Y3NfZXhpc3RzKCk7CisgICAgcmV0dXJuIDAgaWYgKCEkdmNzX3VzZWQpOworCisg ICAgbXkgJGNtZCA9ICRWQ1NfY21kc3sibGlzdF9maWxlc19jbWQifTsKKyAgICAkY21kID1+IHMv KFwkXHcrKS8kMS9lZWc7ICAgIyBpbnRlcnBvbGF0ZSAkY21kCisgICAgQGxzZmlsZXMgPSAmeyRW Q1NfY21kc3siZXhlY3V0ZV9jbWQifX0oJGNtZCk7CisKKyAgICByZXR1cm4gKCkgaWYgKCQ/ICE9 IDApOworCisgICAgcmV0dXJuIEBsc2ZpbGVzOworfQorCitzdWIgdW5pcSB7CisgICAgbXkgKEBw YXJtcykgPSBAXzsKKworICAgIG15ICVzYXc7CisgICAgQHBhcm1zID0gZ3JlcCghJHNhd3skX30r KywgQHBhcm1zKTsKKyAgICByZXR1cm4gQHBhcm1zOworfQorCitzdWIgc29ydF9hbmRfdW5pcSB7 CisgICAgbXkgKEBwYXJtcykgPSBAXzsKKworICAgIG15ICVzYXc7CisgICAgQHBhcm1zID0gc29y dCBAcGFybXM7CisgICAgQHBhcm1zID0gZ3JlcCghJHNhd3skX30rKywgQHBhcm1zKTsKKyAgICBy ZXR1cm4gQHBhcm1zOworfQorCitzdWIgY2xlYW5fZmlsZV9lbWFpbHMgeworICAgIG15IChAZmls ZV9lbWFpbHMpID0gQF87CisgICAgbXkgQGZtdF9lbWFpbHMgPSAoKTsKKworICAgIGZvcmVhY2gg bXkgJGVtYWlsIChAZmlsZV9lbWFpbHMpIHsKKwkkZW1haWwgPX4gcy9bXChcPFx7XXswLDF9KFtB LVphLXowLTlfXC5cKy1dK1xAW0EtWmEtejAtOVwuLV0rKVtcKVw+XH1dezAsMX0vXDwkMVw+L2c7 CisJbXkgKCRuYW1lLCAkYWRkcmVzcykgPSBwYXJzZV9lbWFpbCgkZW1haWwpOworCWlmICgkbmFt ZSBlcSAnIlssXC5dIicpIHsKKwkgICAgJG5hbWUgPSAiIjsKKwl9CisKKwlteSBAbncgPSBzcGxp dCgvW15BLVphLXrDgC3Dv1wnXCxcLlwrLV0vLCAkbmFtZSk7CisJaWYgKEBudyA+IDIpIHsKKwkg ICAgbXkgJGZpcnN0ID0gJG53W0BudyAtIDNdOworCSAgICBteSAkbWlkZGxlID0gJG53W0BudyAt IDJdOworCSAgICBteSAkbGFzdCA9ICRud1tAbncgLSAxXTsKKworCSAgICBpZiAoKChsZW5ndGgo JGZpcnN0KSA9PSAxICYmICRmaXJzdCA9fiBtL1tBLVphLXpdLykgfHwKKwkJIChsZW5ndGgoJGZp cnN0KSA9PSAyICYmIHN1YnN0cigkZmlyc3QsIC0xKSBlcSAiLiIpKSB8fAorCQkobGVuZ3RoKCRt aWRkbGUpID09IDEgfHwKKwkJIChsZW5ndGgoJG1pZGRsZSkgPT0gMiAmJiBzdWJzdHIoJG1pZGRs ZSwgLTEpIGVxICIuIikpKSB7CisJCSRuYW1lID0gIiRmaXJzdCAkbWlkZGxlICRsYXN0IjsKKwkg ICAgfSBlbHNlIHsKKwkJJG5hbWUgPSAiJG1pZGRsZSAkbGFzdCI7CisJICAgIH0KKwl9CisKKwlp ZiAoc3Vic3RyKCRuYW1lLCAtMSkgPX4gL1ssXC5dLykgeworCSAgICAkbmFtZSA9IHN1YnN0cigk bmFtZSwgMCwgbGVuZ3RoKCRuYW1lKSAtIDEpOworCX0gZWxzaWYgKHN1YnN0cigkbmFtZSwgLTIp ID1+IC9bLFwuXSIvKSB7CisJICAgICRuYW1lID0gc3Vic3RyKCRuYW1lLCAwLCBsZW5ndGgoJG5h bWUpIC0gMikgLiAnIic7CisJfQorCisJaWYgKHN1YnN0cigkbmFtZSwgMCwgMSkgPX4gL1ssXC5d LykgeworCSAgICAkbmFtZSA9IHN1YnN0cigkbmFtZSwgMSwgbGVuZ3RoKCRuYW1lKSAtIDEpOwor CX0gZWxzaWYgKHN1YnN0cigkbmFtZSwgMCwgMikgPX4gLyJbLFwuXS8pIHsKKwkgICAgJG5hbWUg PSAnIicgLiBzdWJzdHIoJG5hbWUsIDIsIGxlbmd0aCgkbmFtZSkgLSAyKTsKKwl9CisKKwlteSAk Zm10X2VtYWlsID0gZm9ybWF0X2VtYWlsKCRuYW1lLCAkYWRkcmVzcywgJGVtYWlsX3VzZW5hbWUp OworCXB1c2goQGZtdF9lbWFpbHMsICRmbXRfZW1haWwpOworICAgIH0KKyAgICByZXR1cm4gQGZt dF9lbWFpbHM7Cit9CisKK3N1YiBtZXJnZV9lbWFpbCB7CisgICAgbXkgQGxpbmVzOworICAgIG15 ICVzYXc7CisKKyAgICBmb3IgKEBfKSB7CisJbXkgKCRhZGRyZXNzLCAkcm9sZSkgPSBAJF87CisJ aWYgKCEkc2F3eyRhZGRyZXNzfSkgeworCSAgICBpZiAoJG91dHB1dF9yb2xlcykgeworCQlwdXNo KEBsaW5lcywgIiRhZGRyZXNzICgkcm9sZSkiKTsKKwkgICAgfSBlbHNlIHsKKwkJcHVzaChAbGlu ZXMsICRhZGRyZXNzKTsKKwkgICAgfQorCSAgICAkc2F3eyRhZGRyZXNzfSA9IDE7CisJfQorICAg IH0KKworICAgIHJldHVybiBAbGluZXM7Cit9CisKK3N1YiBvdXRwdXQgeworICAgIG15IChAcGFy bXMpID0gQF87CisKKyAgICBpZiAoJG91dHB1dF9tdWx0aWxpbmUpIHsKKwlmb3JlYWNoIG15ICRs aW5lIChAcGFybXMpIHsKKwkgICAgcHJpbnQoIiR7bGluZX1cbiIpOworCX0KKyAgICB9IGVsc2Ug eworCXByaW50KGpvaW4oJG91dHB1dF9zZXBhcmF0b3IsIEBwYXJtcykpOworCXByaW50KCJcbiIp OworICAgIH0KK30KKworbXkgJHJmYzgyMnJlOworCitzdWIgbWFrZV9yZmM4MjJyZSB7CisjICAg QmFzaWMgbGV4aWNhbCB0b2tlbnMgYXJlIHNwZWNpYWxzLCBkb21haW5fbGl0ZXJhbCwgcXVvdGVk X3N0cmluZywgYXRvbSwgYW5kCisjICAgY29tbWVudC4gIFdlIG11c3QgYWxsb3cgZm9yIHJmYzgy Ml9sd3NwIChvciBjb21tZW50cykgYWZ0ZXIgZWFjaCBvZiB0aGVzZS4KKyMgICBUaGlzIHJlZ2V4 cCB3aWxsIG9ubHkgd29yayBvbiBhZGRyZXNzZXMgd2hpY2ggaGF2ZSBoYWQgY29tbWVudHMgc3Ry aXBwZWQKKyMgICBhbmQgcmVwbGFjZWQgd2l0aCByZmM4MjJfbHdzcC4KKworICAgIG15ICRzcGVj aWFscyA9ICcoKTw+QCw7OlxcXFwiLlxcW1xcXSc7CisgICAgbXkgJGNvbnRyb2xzID0gJ1xcMDAw LVxcMDM3XFwxNzcnOworCisgICAgbXkgJGR0ZXh0ID0gIlteXFxbXFxdXFxyXFxcXF0iOworICAg IG15ICRkb21haW5fbGl0ZXJhbCA9ICJcXFsoPzokZHRleHR8XFxcXC4pKlxcXSRyZmM4MjJfbHdz cCoiOworCisgICAgbXkgJHF1b3RlZF9zdHJpbmcgPSAiXCIoPzpbXlxcXCJcXHJcXFxcXXxcXFxc LnwkcmZjODIyX2x3c3ApKlwiJHJmYzgyMl9sd3NwKiI7CisKKyMgICBVc2UgemVyby13aWR0aCBh c3NlcnRpb24gdG8gc3BvdCB0aGUgbGltaXQgb2YgYW4gYXRvbS4gIEEgc2ltcGxlCisjICAgJHJm YzgyMl9sd3NwKiBjYXVzZXMgdGhlIHJlZ2V4cCBlbmdpbmUgdG8gaGFuZyBvY2Nhc2lvbmFsbHku CisgICAgbXkgJGF0b20gPSAiW14kc3BlY2lhbHMgJGNvbnRyb2xzXSsoPzokcmZjODIyX2x3c3Ar fFxcWnwoPz1bXFxbXCIkc3BlY2lhbHNdKSkiOworICAgIG15ICR3b3JkID0gIig/OiRhdG9tfCRx dW90ZWRfc3RyaW5nKSI7CisgICAgbXkgJGxvY2FscGFydCA9ICIkd29yZCg/OlxcLiRyZmM4MjJf bHdzcCokd29yZCkqIjsKKworICAgIG15ICRzdWJfZG9tYWluID0gIig/OiRhdG9tfCRkb21haW5f bGl0ZXJhbCkiOworICAgIG15ICRkb21haW4gPSAiJHN1Yl9kb21haW4oPzpcXC4kcmZjODIyX2x3 c3AqJHN1Yl9kb21haW4pKiI7CisKKyAgICBteSAkYWRkcl9zcGVjID0gIiRsb2NhbHBhcnRcQCRy ZmM4MjJfbHdzcCokZG9tYWluIjsKKworICAgIG15ICRwaHJhc2UgPSAiJHdvcmQqIjsKKyAgICBt eSAkcm91dGUgPSAiKD86XEAkZG9tYWluKD86LFxAJHJmYzgyMl9sd3NwKiRkb21haW4pKjokcmZj ODIyX2x3c3AqKSI7CisgICAgbXkgJHJvdXRlX2FkZHIgPSAiXFw8JHJmYzgyMl9sd3NwKiRyb3V0 ZT8kYWRkcl9zcGVjXFw+JHJmYzgyMl9sd3NwKiI7CisgICAgbXkgJG1haWxib3ggPSAiKD86JGFk ZHJfc3BlY3wkcGhyYXNlJHJvdXRlX2FkZHIpIjsKKworICAgIG15ICRncm91cCA9ICIkcGhyYXNl OiRyZmM4MjJfbHdzcCooPzokbWFpbGJveCg/OixcXHMqJG1haWxib3gpKik/O1xccyoiOworICAg IG15ICRhZGRyZXNzID0gIig/OiRtYWlsYm94fCRncm91cCkiOworCisgICAgcmV0dXJuICIkcmZj ODIyX2x3c3AqJGFkZHJlc3MiOworfQorCitzdWIgcmZjODIyX3N0cmlwX2NvbW1lbnRzIHsKKyAg ICBteSAkcyA9IHNoaWZ0OworIyAgIFJlY3Vyc2l2ZWx5IHJlbW92ZSBjb21tZW50cywgYW5kIHJl cGxhY2Ugd2l0aCBhIHNpbmdsZSBzcGFjZS4gIFRoZSBzaW1wbGVyCisjICAgcmVnZXhwcyBpbiB0 aGUgRW1haWwgQWRkcmVzc2luZyBGQVEgYXJlIGltcGVyZmVjdCAtIHRoZXkgd2lsbCBtaXNzIGVz Y2FwZWQKKyMgICBjaGFycyBpbiBhdG9tcywgZm9yIGV4YW1wbGUuCisKKyAgICB3aGlsZSAoJHMg PX4gcy9eKCg/OlteIlxcXXxcXC4pKgorICAgICAgICAgICAgICAgICAgICAoPzoiKD86W14iXFxd fFxcLikqIig/OlteIlxcXXxcXC4pKikqKQorICAgICAgICAgICAgICAgICAgICBcKCg/OlteKClc XF18XFwuKSpcKS8kMSAvb3N4KSB7fQorICAgIHJldHVybiAkczsKK30KKworIyAgIHZhbGlkOiBy ZXR1cm5zIHRydWUgaWYgdGhlIHBhcmFtZXRlciBpcyBhbiBSRkM4MjIgdmFsaWQgYWRkcmVzcwor Iworc3ViIHJmYzgyMl92YWxpZCB7CisgICAgbXkgJHMgPSByZmM4MjJfc3RyaXBfY29tbWVudHMo c2hpZnQpOworCisgICAgaWYgKCEkcmZjODIycmUpIHsKKyAgICAgICAgJHJmYzgyMnJlID0gbWFr ZV9yZmM4MjJyZSgpOworICAgIH0KKworICAgIHJldHVybiAkcyA9fiBtL14kcmZjODIycmUkL3Nv ICYmICRzID1+IG0vXiRyZmM4MjJfY2hhciokLzsKK30KKworIyAgIHZhbGlkbGlzdDogSW4gc2Nh bGFyIGNvbnRleHQsIHJldHVybnMgdHJ1ZSBpZiB0aGUgcGFyYW1ldGVyIGlzIGFuIFJGQzgyMgor IyAgICAgICAgICAgICAgdmFsaWQgbGlzdCBvZiBhZGRyZXNzZXMuCisjCisjICAgICAgICAgICAg ICBJbiBsaXN0IGNvbnRleHQsIHJldHVybnMgYW4gZW1wdHkgbGlzdCBvbiBmYWlsdXJlIChhbiBp bnZhbGlkCisjICAgICAgICAgICAgICBhZGRyZXNzIHdhcyBmb3VuZCk7IG90aGVyd2lzZSBhIGxp c3Qgd2hvc2UgZmlyc3QgZWxlbWVudCBpcyB0aGUKKyMgICAgICAgICAgICAgIG51bWJlciBvZiBh ZGRyZXNzZXMgZm91bmQgYW5kIHdob3NlIHJlbWFpbmluZyBlbGVtZW50cyBhcmUgdGhlCisjICAg ICAgICAgICAgICBhZGRyZXNzZXMuICBUaGlzIGlzIG5lZWRlZCB0byBkaXNhbWJpZ3VhdGUgZmFp bHVyZSAoaW52YWxpZCkKKyMgICAgICAgICAgICAgIGZyb20gc3VjY2VzcyB3aXRoIG5vIGFkZHJl c3NlcyBmb3VuZCwgYmVjYXVzZSBhbiBlbXB0eSBzdHJpbmcgaXMKKyMgICAgICAgICAgICAgIGEg dmFsaWQgbGlzdC4KKworc3ViIHJmYzgyMl92YWxpZGxpc3QgeworICAgIG15ICRzID0gcmZjODIy X3N0cmlwX2NvbW1lbnRzKHNoaWZ0KTsKKworICAgIGlmICghJHJmYzgyMnJlKSB7CisgICAgICAg ICRyZmM4MjJyZSA9IG1ha2VfcmZjODIycmUoKTsKKyAgICB9CisgICAgIyAqIG51bGwgbGlzdCBp dGVtcyBhcmUgdmFsaWQgYWNjb3JkaW5nIHRvIHRoZSBSRkMKKyAgICAjICogdGhlICcxJyBidXNp bmVzcyBpcyB0byBhaWQgaW4gZGlzdGluZ3Vpc2hpbmcgZmFpbHVyZSBmcm9tIG5vIHJlc3VsdHMK KworICAgIG15IEByOworICAgIGlmICgkcyA9fiBtL14oPzokcmZjODIycmUpPyg/OiwoPzokcmZj ODIycmUpPykqJC9zbyAmJgorCSRzID1+IG0vXiRyZmM4MjJfY2hhciokLykgeworICAgICAgICB3 aGlsZSAoJHMgPX4gbS8oPzpefCwkcmZjODIyX2x3c3AqKSgkcmZjODIycmUpL2dvcykgeworICAg ICAgICAgICAgcHVzaChAciwgJDEpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB3YW50YXJy YXkgPyAoc2NhbGFyKEByKSwgQHIpIDogMTsKKyAgICB9CisgICAgcmV0dXJuIHdhbnRhcnJheSA/ ICgpIDogMDsKK30KLS0gCjIuMTYuNAoKCgoKQW1hem9uIERldmVsb3BtZW50IENlbnRlciBHZXJt YW55IEdtYkgKS3JhdXNlbnN0ci4gMzgKMTAxMTcgQmVybGluCkdlc2NoYWVmdHNmdWVocnVuZzog Q2hyaXN0aWFuIFNjaGxhZWdlciwgSm9uYXRoYW4gV2Vpc3MKRWluZ2V0cmFnZW4gYW0gQW10c2dl cmljaHQgQ2hhcmxvdHRlbmJ1cmcgdW50ZXIgSFJCIDE0OTE3MyBCClNpdHo6IEJlcmxpbgpVc3Qt SUQ6IERFIDI4OSAyMzcgODc5CgoK