From mboxrd@z Thu Jan 1 00:00:00 1970 From: Casey Schaufler Subject: Re: Network hang after c3f1010b30f7fc611139cfb702a8685741aa6827 with CIPSO & Smack Date: Tue, 5 Jul 2016 18:31:30 -0700 Message-ID: <66709b13-15a7-8d03-9e84-e4be9aab60b5@schaufler-ca.com> References: <7d833f59-c68f-f779-4de4-15bc0b26ac7c@cumulusnetworks.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------E1D4882907180D428CB925FE" Cc: Linux-Netdev , Casey Schaufler To: David Ahern , David Miller , Paul Moore Return-path: Received: from nm3-vm0.bullet.mail.bf1.yahoo.com ([98.139.212.154]:55238 "EHLO nm3-vm0.bullet.mail.bf1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751574AbcGFBif (ORCPT ); Tue, 5 Jul 2016 21:38:35 -0400 In-Reply-To: <7d833f59-c68f-f779-4de4-15bc0b26ac7c@cumulusnetworks.com> Sender: netdev-owner@vger.kernel.org List-ID: This is a multi-part message in MIME format. --------------E1D4882907180D428CB925FE Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit On 7/5/2016 5:49 PM, David Ahern wrote: > On 7/5/16 5:38 PM, Casey Schaufler wrote: >> I have encountered a system hang with my Smack >> networking tests that bisects to the change below. >> I can't say that I have any idea why the change >> would impact the Smack processing, but there appears >> to be some serious packet processing going on. The >> Smack code is using CIPSO on the loopback interface. >> The test is supposed to verify that labels can be >> set on the packets using CIPSO. Unlabeled packets >> do not appear to be impacted. I do not know if SELinux >> is affected, and if not, why not. Smack and SELinux >> use CIPSO differently. > > What are the commands to repeat the test? > There is a tar file attached with the tests. Put the etc/smack/user file into /etc/smack/user. In the tools-2012 directory run make to build the tools. The test in question is called testnetworking.sh and needs to be run as root. You will need to configure Smack in the kernel, of course. --------------E1D4882907180D428CB925FE Content-Type: application/octet-stream; name="smack-tests.tar" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smack-tests.tar" dG9vbHMtMjAxMi8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDA3NTUA MDAwMTc1MAAwMDAxNzUwADAwMDAwMDAwMDAwADEyNzM3MDU1NjY3ADAxMzY0MgAgNQAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAGNzY2hh dWZsZXIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY3NjaGF1ZmxlcgAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0b29scy0yMDEyL3Rlc3Rsb2Fkc2VsZi5zaAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAMDAwMDc1NQAwMDAxNzUwADAwMDE3NTAAMDAwMDAwMDUyNjQA MTI3MzU1NjAyMTMAMDE2NjYzACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAHVzdGFyICAAY3NjaGF1ZmxlcgAAAAAAAAAAAAAAAAAAAAAAAAAAAABj c2NoYXVmbGVyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMh IC9iaW4vc2gKIwojCgphdHRyIC1xIC1TIC1zIFNNQUNLNjQgLVYgJyonIC9kZXYvbnVsbAoK UlVORElSPSIuIgpURVNURElSPS90bXAvbG9hZC1zZWxmLXRlc3QKVVNFUklEPWAvdXNyL2Jp bi9pZCAtdWAKCmlmIFsgIiRVU0VSSUQiICE9ICIwIiBdCnRoZW4KCWVjaG8gVXNlciBJRCAk VVNFUklEIGlzIG5vdCByb290LgoJZXhpdCAxCmZpCgpOT1RST09UPWB0YWlsIC0xIC9ldGMv cGFzc3dkIHwgc2VkIC1lICdzLzouKi8vJ2AKZWNobyBVc2luZyAnIickTk9UUk9PVCciJyBh cyBhIHRlc3QgdXNlci4KCmlmIFsgLWYgL3Byb2Mvc2VsZi9hdHRyL3NtYWNrLmN1cnJlbnQg XQp0aGVuCglDVVJSRU5UPSIvcHJvYy9zZWxmL2F0dHIvc21hY2suY3VycmVudCIKZWxzZQoJ Q1VSUkVOVD0iL3Byb2Mvc2VsZi9hdHRyL2N1cnJlbnQiCmZpCgppZiBbIC1mIC9zeXMvZnMv c21hY2tmcy9sb2FkIF0KdGhlbgoJTE9BRD0vc3lzL2ZzL3NtYWNrZnMvbG9hZAplbHNlCglM T0FEPS9zbWFjay9sb2FkCmZpCgpSVU5BUz1gY2F0ICRDVVJSRU5UYAoKcm0gLXJmICRURVNU RElSCgojCiMgUnVsZSBzZXR0aW5nIHRlc3RzCiMKIyAgICAgICAgICAxICAgICAgICAgMiAg ICAgICAgIDMgICAgICAgICA0ICAgICAgICAgNSAgICAgICAgIDYKIyAxMjM0NTY3ODkwMTIz NDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3 ODkwCiMgc3ViamVjdC1sYWJlbC4uLi4uLi4uLi4gb2JqZWN0LWxhYmVsLi4uLi4uLi4uLi4g cnd4YXQKIwoKIyAgICAgICAgICAgICAgICAgMSAgICAgICAgIDIgICAgICAgICAzCiMgICAg ICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MApTVUJKRUNUPSJTbmFwICAgICAg ICAgICAgICAgICAgICIKU1VCTkFNRT0iU25hcCIKCiMgICAgICAgICAgICAgICAgMSAgICAg ICAgIDIgICAgICAgICAzCiMgICAgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkw Ck9CSkVDVD0iQ3JhY2tsZSAgICAgICAgICAgICAgICAiCk9CTkFNRT0iQ3JhY2tsZSIKCk9M RFJVTEU9YGdyZXAgJ14nIiRTVUJOQU1FIicgJyIkT0JOQU1FIiAkTE9BRGAKCmVjaG8gLW4g IiRTVUJKRUNUIicgJyIkT0JKRUNUIicgJydyd3hhJyA+ICRMT0FEClJVTEU9YGdyZXAgJ14n IiRTVUJOQU1FIicgJyIkT0JOQU1FIiAkTE9BRGAKaWYgWyAieCIiJFJVTEUiICE9ICJ4IiIk U1VCTkFNRSInICciJE9CTkFNRSInIHJ3eGEnIF0KdGhlbgoJZWNobyBTZXR0aW5nIHJ1bGUg d2l0aG91dCAnIid0JyInIHVuZXhwZWN0ZWRseSAnIiciJFJVTEUiJyInLgoJZXhpdCAxCmZp CgojCiMgVmVyaWZ5IGNvcnJlY3QgcmVzdHJpY3Rpb24KIwoKbWtkaXIgJFRFU1RESVIKY2ht b2QgNzc3ICRURVNURElSCmF0dHIgLXEgLVMgLXMgU01BQ0s2NCAtViAkT0JOQU1FICRURVNU RElSCmVjaG8gLW4gIiRTVUJKRUNUIicgJyIkT0JKRUNUIicgJydyd3hhJyA+ICRMT0FECgpU RVNURklMRT0iJFRFU1RESVIiL2ZpbGUKCmVjaG8gIiRTVUJOQU1FIiA+ICRDVVJSRU5UCnN1 ICROT1RST09UIC1jICJlY2hvICdUZXN0IEEnID4gJFRFU1RGSUxFIgphdHRyIC1xIC1TIC1z IFNNQUNLNjQgLVYgJE9CTkFNRSAkVEVTVEZJTEUKc3UgJE5PVFJPT1QgLWMgIiRSVU5ESVIi Ii90ZXN0bG9hZHNlbGYgLS1maWxlICRURVNURklMRSIKc3UgJE5PVFJPT1QgLWMgIiRSVU5E SVIiIi90ZXN0bG9hZHNlbGYgLS1sb2FkLXNlbGYyIC0tZmlsZSAkVEVTVEZJTEUiCmVjaG8g IiRSVU5BUyIgPiAkQ1VSUkVOVAoKcm0gLXJmICRURVNURElSCiMKIyBSZXN0b3JlIG9sZCBs YWJlbCBydWxlLgojCmlmIFsgIngiIiRPTERSVUxFIiAhPSAieCIgXQp0aGVuCglSQVdPTERN T0RFPWBlY2hvICRPTERSVUxFIHwgc2VkIC1lICdzLy4qIC8vJ2AKCglJPWBlY2hvICRSQVdP TERNT0RFIHwgZ3JlcCAncidgCglpZiBbICJ4IiIkSSIgPSAieCIgXQoJdGhlbgoJCU9MRE1P REU9Ii0iCgllbHNlCgkJT0xETU9ERT0iciIKCWZpCglJPWBlY2hvICRSQVdPTERNT0RFIHwg Z3JlcCAndydgCglpZiBbICJ4IiIkSSIgPSAieCIgXQoJdGhlbgoJCU9MRE1PREU9IiRPTERN T0RFIiItIgoJZWxzZQoJCU9MRE1PREU9IiRPTERNT0RFIiJ3IgoJZmkKCUk9YGVjaG8gJFJB V09MRE1PREUgfCBncmVwICd4J2AKCWlmIFsgIngiIiRJIiA9ICJ4IiBdCgl0aGVuCgkJT0xE TU9ERT0iJE9MRE1PREUiIi0iCgllbHNlCgkJT0xETU9ERT0iJE9MRE1PREUiIngiCglmaQoJ ST1gZWNobyAkUkFXT0xETU9ERSB8IGdyZXAgJ2EnYAoJaWYgWyAieCIiJEkiID0gIngiIF0K CXRoZW4KCQlPTERNT0RFPSIkT0xETU9ERSIiLSIKCWVsc2UKCQlPTERNT0RFPSIkT0xETU9E RSIiYSIKCWZpCglJPWBlY2hvICRSQVdPTERNT0RFIHwgZ3JlcCAndCdgCglpZiBbICJ4IiIk SSIgPSAieCIgXQoJdGhlbgoJCU9MRE1PREU9IiRPTERNT0RFIiItIgoJZWxzZQoJCU9MRE1P REU9IiRPTERNT0RFIiJ0IgoJZmkKCgllY2hvIC1uICIkU1VCSkVDVCInICciJE9CSkVDVCIn ICciJE9MRE1PREUiID4gJExPQUQKCSMgZWNobyBSdWxlIHJlc2V0IHRvICciJyIkU1VCTkFN RSInICciJE9CTkFNRSInICciJE9MRE1PREUiJyInCmVsc2UKCWVjaG8gLW4gIiRTVUJKRUNU IicgJyIkT0JKRUNUIicgJyctLS0tLScgPiAkTE9BRAoJIyBlY2hvIFJ1bGUgcmVzZXQgdG8g JyInIiRTVUJOQU1FIicgJyIkT0JOQU1FIicgJyItLS0tLSInIicKZmkKCmVjaG8gIiRSVU5B UyIgPiAkQ1VSUkVOVApybSAtcmYgJFRFU1RESVIKCmV4aXQgMAoAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHRvb2xzLTIw MTIvdGVzdHRyYW5zbXV0ZS5zaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAwNzU1ADAwMDE3NTAA MDAwMTc1MAAwMDAwMDAyMTc1MgAxMjczNTU2MDIxMgAwMTcxMTMAIDAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIgIABjc2NoYXVmbGVyAAAA AAAAAAAAAAAAAAAAAAAAAAAAAGNzY2hhdWZsZXIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAIyEgL2Jpbi9zaAojCiMKClRFU1RESVI9Ii90bXAvdHJhbnNt dXRlLXRlc3QiClRFU1RGSUxFPSIkVEVTVERJUiIvZmlsZQpURVNUU1VCRElSPSIkVEVTVERJ UiIvc3ViZGlyClRFU1RTVUIyRElSPSIkVEVTVFNVQkRJUiIvc3ViZGlyClRFU1RTVUIzRElS PSIkVEVTVFNVQjJESVIiL3N1YmRpcgpVU0VSSUQ9YC91c3IvYmluL2lkIC11YAoKaWYgWyAi JFVTRVJJRCIgIT0gIjAiIF0KdGhlbgoJZWNobyBVc2VyIElEICRVU0VSSUQgaXMgbm90IHJv b3QuCglleGl0IDEKZmkKCk5PVFJPT1Q9YHRhaWwgLTEgL2V0Yy9wYXNzd2QgfCBzZWQgLWUg J3MvOi4qLy8nYAojIGVjaG8gVXNpbmcgJyInJE5PVFJPT1QnIicgYXMgYSB0ZXN0IHVzZXIu CgppZiBbIC1mIC9wcm9jL3NlbGYvYXR0ci9zbWFjay5jdXJyZW50IF0KdGhlbgoJQ1VSUkVO VD0iL3Byb2Mvc2VsZi9hdHRyL3NtYWNrLmN1cnJlbnQiCmVsc2UKCUNVUlJFTlQ9Ii9wcm9j L3NlbGYvYXR0ci9jdXJyZW50IgpmaQoKaWYgWyAtZiAvc3lzL2ZzL3NtYWNrZnMvbG9hZCBd CnRoZW4KCUxPQUQ9L3N5cy9mcy9zbWFja2ZzL2xvYWQKZWxzZQoJTE9BRD0vc21hY2svbG9h ZApmaQoKUlVOQVM9YGNhdCAkQ1VSUkVOVGAKCnJtIC1yZiAkVEVTVERJUgpta2RpciAkVEVT VERJUgpncmVwIGBjYXQgJENVUlJFTlRgICRMT0FECmVjaG8gRGlyOiBgYXR0ciAtcSAtUyAt ZyBTTUFDSzY0ICRURVNURElSIDI+IC9kZXYvbnVsbGAgYGxzIC1pZCAkVEVTVERJUmAgYGF0 dHIgLXEgLVMgLWcgU01BQ0s2NFRSQU5TTVVURSAkVEVTVERJUiAyPiAvZGV2L251bGxgCgoj CiMgU2ltcGxlIHNldC9saXN0L2dldCB0ZXN0cwojClRMQUJFTD1gYXR0ciAtcSAtUyAtZyBT TUFDSzY0VFJBTlNNVVRFICRURVNURElSIDI+IC9kZXYvbnVsbGAKaWYgWyAieCIiJFRMQUJF TCIgIT0gIngiIF0KdGhlbgoJZWNobyBJbml0aWFsIHRyYW5zbXV0ZSBsYWJlbCBpcyB1bmV4 cGVjdGVkbHkgJyInIiRUTEFCRUwiJyInLgoJZXhpdCAxCmZpCgphdHRyIC1xIC1TIC1zIFNN QUNLNjRUUkFOU01VVEUgLVYgV0lMTCAkVEVTVERJUiAyPiAvZGV2L251bGwKVExBQkVMPWBh dHRyIC1xIC1TIC1nIFNNQUNLNjRUUkFOU01VVEUgJFRFU1RESVIgMj4gL2Rldi9udWxsYApp ZiBbICJ4IiIkVExBQkVMIiAhPSAieCIgXQp0aGVuCgllY2hvIFNldHRpbmcgdHJhbnNtdXRl IGxhYmVsIHNob3VsZCBub3QgaGF2ZSBnb3R0ZW4gJyInIiRUTEFCRUwiJyInLgoJZXhpdCAx CmZpCgpUTElTVD1gYXR0ciAtcSAtUyAtbCAkVEVTVERJUiB8IGdyZXAgVFJBTlNNVVRFYApp ZiBbICJ4IiIkVExJU1QiICE9ICJ4IiBdCnRoZW4KCWVjaG8gU2V0dGluZyB0cmFuc211dGUg bGFiZWwgbGlzdGVkIGluY29ycmVjdGx5IGFzICciJyIkVExJU1QiJyInLgoJZXhpdCAxCmZp CgphdHRyIC1xIC1TIC1zIFNNQUNLNjRUUkFOU01VVEUgLVYgVFJVRSAkVEVTVERJUiAyPiAv ZGV2L251bGwKVExBQkVMPWBhdHRyIC1xIC1TIC1nIFNNQUNLNjRUUkFOU01VVEUgJFRFU1RE SVIgMj4gL2Rldi9udWxsYAppZiBbICJ4IiIkVExBQkVMIiAhPSAieFRSVUUiIF0KdGhlbgoJ ZWNobyBTZXR0aW5nIHRyYW5zbXV0ZSBsYWJlbCBzaG91bGQgbm90IGhhdmUgZ290dGVuICci JyIkVExBQkVMIiciJy4KCWV4aXQgMQpmaQoKVExJU1Q9YGF0dHIgLXEgLVMgLWwgJFRFU1RE SVIgfCBncmVwIFRSQU5TTVVURWAKaWYgWyAieCIiJFRMSVNUIiAhPSAieFNNQUNLNjRUUkFO U01VVEUiIF0KdGhlbgoJZWNobyBTZXR0aW5nIHRyYW5zbXV0ZSBsYWJlbCBsaXN0ZWQgaW5j b3JyZWN0bHkgYXMgJyInIiRUTElTVCInIicuCglleGl0IDEKZmkKCmF0dHIgLXEgLVMgLXIg U01BQ0s2NFRSQU5TTVVURSAkVEVTVERJUiAyPiAvZGV2L251bGwKVExBQkVMPWBhdHRyIC1x IC1TIC1nIFNNQUNLNjRUUkFOU01VVEUgJFRFU1RESVIgMj4gL2Rldi9udWxsYAppZiBbICJ4 IiIkVExBQkVMIiAhPSAieCIgXQp0aGVuCgllY2hvIFJlbW92aW5nIHRyYW5zbXV0ZSBsYWJl bCBsZWZ0ICciJyIkVExBQkVMIiciJyBiZWhpbmQuCglleGl0IDEKZmkKCnJtIC1yZiAkVEVT VERJUgoKIwojIFJ1bGUgc2V0dGluZyB0ZXN0cwojCiMgICAgICAgICAgMSAgICAgICAgIDIg ICAgICAgICAzICAgICAgICAgNCAgICAgICAgIDUgICAgICAgICA2CiMgMTIzNDU2Nzg5MDEy MzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2 Nzg5MAojIHN1YmplY3QtbGFiZWwuLi4uLi4uLi4uIG9iamVjdC1sYWJlbC4uLi4uLi4uLi4u IHJ3eGF0CiMKCiMgICAgICAgICAgICAgICAgIDEgICAgICAgICAyICAgICAgICAgMwojICAg ICAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAKU1VCSkVDVD0iU25hcCAgICAg ICAgICAgICAgICAgICAiClNVQk5BTUU9IlNuYXAiCgojICAgICAgICAgICAgICAgIDEgICAg ICAgICAyICAgICAgICAgMwojICAgICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5 MApPQkpFQ1Q9IkNyYWNrbGUgICAgICAgICAgICAgICAgIgpPQk5BTUU9IkNyYWNrbGUiCgpP TERSVUxFPWBncmVwICdeJyIkU1VCTkFNRSInICciJE9CTkFNRSIgJExPQURgCgplY2hvIC1u ICIkU1VCSkVDVCInICciJE9CSkVDVCInICcncnd4YScgPiAkTE9BRApSVUxFPWBncmVwICde JyIkU1VCTkFNRSInICciJE9CTkFNRSIgJExPQURgCmlmIFsgIngiIiRSVUxFIiAhPSAieCIi JFNVQk5BTUUiJyAnIiRPQk5BTUUiJyByd3hhJyBdCnRoZW4KCWVjaG8gU2V0dGluZyBydWxl IHdpdGhvdXQgJyIndCciJyB1bmV4cGVjdGVkbHkgJyInIiRSVUxFIiciJy4KCWV4aXQgMQpm aQoKZWNobyAtbiAiJFNVQkpFQ1QiJyAnIiRPQkpFQ1QiJyAnJ3J3eGF0JyA+ICRMT0FEClJV TEU9YGdyZXAgJ14nIiRTVUJOQU1FIicgJyIkT0JOQU1FIiAkTE9BRGAKaWYgWyAieCIiJFJV TEUiICE9ICJ4IiIkU1VCTkFNRSInICciJE9CTkFNRSInIHJ3eGF0JyBdCnRoZW4KCWVjaG8g U2V0dGluZyBydWxlIHdpdGggJyIndCciJyB1bmV4cGVjdGVkbHkgJyInIiRSVUxFIiciJy4K CWV4aXQgMQpmaQoKIwojIFZlcmlmeSBjb3JyZWN0IGxhYmVsIGJlaGF2aW9yIHdpdGggbmVp dGhlciBhIHRyYW5zbXV0ZQojIGRpcmVjdG9yeSBub3IgYSB0cmFuc211dGUgcnVsZS4KIwoK cm0gLXJmICRURVNURElSCm1rZGlyICRURVNURElSCmdyZXAgYGNhdCAkQ1VSUkVOVGAgJExP QUQKZWNobyBEaXI6IGBhdHRyIC1xIC1TIC1nIFNNQUNLNjQgJFRFU1RESVIgMj4gL2Rldi9u dWxsYCBgbHMgLWlkICRURVNURElSYCBgYXR0ciAtcSAtUyAtZyBTTUFDSzY0VFJBTlNNVVRF ICRURVNURElSIDI+IC9kZXYvbnVsbGAKY2htb2QgNzc3ICRURVNURElSCmF0dHIgLXEgLVMg LXMgU01BQ0s2NCAtViAkT0JOQU1FICRURVNURElSCmVjaG8gLW4gIiRTVUJKRUNUIicgJyIk T0JKRUNUIicgJydyd3hhJyA+ICRMT0FECgplY2hvICIkU1VCTkFNRSIgPiAkQ1VSUkVOVApz dSAtICROT1RST09UIC1jICJkYXRlID4gJFRFU1RGSUxFIgplY2hvICIkUlVOQVMiID4gJENV UlJFTlQKR09UPWBhdHRyIC1xIC1TIC1nIFNNQUNLNjQgJFRFU1RGSUxFYAoKaWYgWyAneCci JFNVQk5BTUUiICE9ICd4JyIkR09UIiBdCnRoZW4KCWVjaG8gRXhwZWN0ZWQgJyInJFNVQk5B TUUnIicgYnV0IGdvdCAnIickR09UJyInLgoJZXhpdCAxCmZpCgojCiMgVmVyaWZ5IGNvcnJl Y3QgbGFiZWwgYmVoYXZpb3Igd2l0aCBhIHRyYW5zbXV0ZQojIGRpcmVjdG9yeSBidXQgbm90 IGEgdHJhbnNtdXRlIHJ1bGUuCiMKCnJtIC1yZiAkVEVTVERJUgpta2RpciAkVEVTVERJUgpn cmVwIGBjYXQgJENVUlJFTlRgICRMT0FECmVjaG8gRGlyOiBgYXR0ciAtcSAtUyAtZyBTTUFD SzY0ICRURVNURElSIDI+IC9kZXYvbnVsbGAgYGxzIC1pZCAkVEVTVERJUmAgYGF0dHIgLXEg LVMgLWcgU01BQ0s2NFRSQU5TTVVURSAkVEVTVERJUiAyPiAvZGV2L251bGxgCmNobW9kIDc3 NyAkVEVTVERJUgphdHRyIC1xIC1TIC1zIFNNQUNLNjQgLVYgJE9CTkFNRSAkVEVTVERJUgph dHRyIC1xIC1TIC1zIFNNQUNLNjRUUkFOU01VVEUgLVYgVFJVRSAkVEVTVERJUgplY2hvIC1u ICIkU1VCSkVDVCInICciJE9CSkVDVCInICcncnd4YScgPiAkTE9BRAoKZWNobyAiJFNVQk5B TUUiID4gJENVUlJFTlQKc3UgLSAkTk9UUk9PVCAtYyAiZGF0ZSA+ICRURVNURklMRSIKZWNo byAiJFJVTkFTIiA+ICRDVVJSRU5UCkdPVD1gYXR0ciAtcSAtUyAtZyBTTUFDSzY0ICRURVNU RklMRWAKCmlmIFsgJ3gnIiRTVUJOQU1FIiAhPSAneCciJEdPVCIgXQp0aGVuCgllY2hvIEV4 cGVjdGVkICciJyRTVUJOQU1FJyInIGJ1dCBnb3QgJyInJEdPVCciJy4KCWV4aXQgMQpmaQoK IwojIFZlcmlmeSBjb3JyZWN0IGxhYmVsIGJlaGF2aW9yIHdpdGhvdXQgIGEgdHJhbnNtdXRl CiMgZGlyZWN0b3J5IGJ1dCB3aXRoIGEgdHJhbnNtdXRlIHJ1bGUuCiMKCnJtIC1yZiAkVEVT VERJUgpta2RpciAkVEVTVERJUgpncmVwIGBjYXQgJENVUlJFTlRgICRMT0FECmVjaG8gRGly OiBgYXR0ciAtcSAtUyAtZyBTTUFDSzY0ICRURVNURElSIDI+IC9kZXYvbnVsbGAgYGxzIC1p ZCAkVEVTVERJUmAgYGF0dHIgLXEgLVMgLWcgU01BQ0s2NFRSQU5TTVVURSAkVEVTVERJUiAy PiAvZGV2L251bGxgCmNobW9kIDc3NyAkVEVTVERJUgphdHRyIC1xIC1TIC1zIFNNQUNLNjQg LVYgJE9CTkFNRSAkVEVTVERJUgplY2hvIC1uICIkU1VCSkVDVCInICciJE9CSkVDVCInICcn cnd4YXQnID4gJExPQUQKCmVjaG8gIiRTVUJOQU1FIiA+ICRDVVJSRU5UCnN1IC0gJE5PVFJP T1QgLWMgImRhdGUgPiAkVEVTVEZJTEUiCmVjaG8gIiRSVU5BUyIgPiAkQ1VSUkVOVApHT1Q9 YGF0dHIgLXEgLVMgLWcgU01BQ0s2NCAkVEVTVEZJTEVgCgppZiBbICd4JyIkU1VCTkFNRSIg IT0gJ3gnIiRHT1QiIF0KdGhlbgoJZWNobyBFeHBlY3RlZCAnIickU1VCTkFNRSciJyBidXQg Z290ICciJyRHT1QnIicuCglleGl0IDEKZmkKCiMKIyBWZXJpZnkgY29ycmVjdCBsYWJlbCBi ZWhhdmlvciB3aXRoIGEgdHJhbnNtdXRlCiMgZGlyZWN0b3J5IGFuZCBhIHRyYW5zbXV0ZSBy dWxlLgojCgpybSAtcmYgJFRFU1RESVIKbWtkaXIgJFRFU1RESVIKZ3JlcCBgY2F0ICRDVVJS RU5UYCAkTE9BRAplY2hvIERpcjogYGF0dHIgLXEgLVMgLWcgU01BQ0s2NCAkVEVTVERJUiAy PiAvZGV2L251bGxgIGBscyAtaWQgJFRFU1RESVJgIGBhdHRyIC1xIC1TIC1nIFNNQUNLNjRU UkFOU01VVEUgJFRFU1RESVIgMj4gL2Rldi9udWxsYApjaG1vZCA3NzcgJFRFU1RESVIKYXR0 ciAtcSAtUyAtcyBTTUFDSzY0IC1WICRPQk5BTUUgJFRFU1RESVIKYXR0ciAtcSAtUyAtcyBT TUFDSzY0VFJBTlNNVVRFIC1WIFRSVUUgJFRFU1RESVIKZ3JlcCBgY2F0ICRDVVJSRU5UYCAk TE9BRAplY2hvIERpcjogYGF0dHIgLXEgLVMgLWcgU01BQ0s2NCAkVEVTVERJUiAyPiAvZGV2 L251bGxgIGBscyAtaWQgJFRFU1RESVJgIGBhdHRyIC1xIC1TIC1nIFNNQUNLNjRUUkFOU01V VEUgJFRFU1RESVIgMj4gL2Rldi9udWxsYAplY2hvIC1uICIkU1VCSkVDVCInICciJE9CSkVD VCInICcncnd4YXQnID4gJExPQUQKCmVjaG8gIiRTVUJOQU1FIiA+ICRDVVJSRU5UCnN1IC0g JE5PVFJPT1QgLWMgImRhdGUgPiAkVEVTVEZJTEUiCmVjaG8gIiRSVU5BUyIgPiAkQ1VSUkVO VApHT1Q9YGF0dHIgLXEgLVMgLWcgU01BQ0s2NCAkVEVTVEZJTEVgCgppZiBbICd4JyIkT0JO QU1FIiAhPSAneCciJEdPVCIgXQp0aGVuCgllY2hvIEV4cGVjdGVkICciJyRPQk5BTUUnIicg YnV0IGdvdCAnIickR09UJyInLgoJYXR0ciAtbCAtUyAkVEVTVERJUgoJYXR0ciAtUyAtZyBT TUFDSzY0ICRURVNURklMRQoJZ3JlcCAnXiciJFNVQk5BTUUiJyAnIiRPQk5BTUUiICRMT0FE CglleGl0IDEKZWxzZQoJZWNobyBFeHBlY3RlZCAnIickT0JOQU1FJyInIGFuZCBnb3QgJyIn JEdPVCciJyBzdWNjZXNzZnVsbHkuCmZpCgojCiMgVmVyaWZ5IGNvcnJlY3QgbGFiZWwgYmVo YXZpb3Igd2l0aCBhIHRyYW5zbXV0ZQojIGRpcmVjdG9yeSBhbmQgc3ViZGlyZWN0b3JpZXMK IwoKZWNobyAiJFNVQk5BTUUiID4gJENVUlJFTlQKcm0gLXJmICRURVNUU1VCRElSCnN1IC0g JE5PVFJPT1QgLWMgIm1rZGlyICRURVNUU1VCRElSIgpncmVwIGBjYXQgJENVUlJFTlRgICRM T0FECmVjaG8gRGlyOiBgYXR0ciAtcSAtUyAtZyBTTUFDSzY0ICRURVNURElSIDI+IC9kZXYv bnVsbGAgYGxzIC1pZCAkVEVTVERJUmAgYGF0dHIgLXEgLVMgLWcgU01BQ0s2NFRSQU5TTVVU RSAkVEVTVERJUiAyPiAvZGV2L251bGxgCmVjaG8gRGlyOiBgYXR0ciAtcSAtUyAtZyBTTUFD SzY0ICRURVNUU1VCRElSIDI+IC9kZXYvbnVsbGAgYGxzIC1pZCAkVEVTVFNVQkRJUmAgYGF0 dHIgLXEgLVMgLWcgU01BQ0s2NFRSQU5TTVVURSAkVEVTVFNVQkRJUiAyPiAvZGV2L251bGxg CmVjaG8gIiRSVU5BUyIgPiAkQ1VSUkVOVApHT1Q9YGF0dHIgLXEgLVMgLWcgU01BQ0s2NCAk VEVTVFNVQkRJUmAKaWYgWyAneCciJE9CTkFNRSIgIT0gJ3gnIiRHT1QiIF0KdGhlbgoJZWNo byBFeHBlY3RlZCAnIickT0JOQU1FJyInIGJ1dCBnb3QgJyInJEdPVCciJy4KZWxzZQoJZWNo byBFeHBlY3RlZCAnIickT0JOQU1FJyInIGFuZCBnb3QgJyInJEdPVCciJyBzdWNjZXNzZnVs bHkuCmZpCgplY2hvICIkU1VCTkFNRSIgPiAkQ1VSUkVOVApybSAtcmYgJFRFU1RTVUIyRElS CnN1IC0gJE5PVFJPT1QgLWMgIm1rZGlyICRURVNUU1VCMkRJUiIKZ3JlcCBgY2F0ICRDVVJS RU5UYCAkTE9BRAplY2hvIERpcjogYGF0dHIgLXEgLVMgLWcgU01BQ0s2NCAkVEVTVERJUiAy PiAvZGV2L251bGxgIGBscyAtaWQgJFRFU1RESVJgIGBhdHRyIC1xIC1TIC1nIFNNQUNLNjRU UkFOU01VVEUgJFRFU1RESVIgMj4gL2Rldi9udWxsYAplY2hvIERpcjogYGF0dHIgLXEgLVMg LWcgU01BQ0s2NCAkVEVTVFNVQkRJUiAyPiAvZGV2L251bGxgIGBscyAtaWQgJFRFU1RTVUJE SVJgIGBhdHRyIC1xIC1TIC1nIFNNQUNLNjRUUkFOU01VVEUgJFRFU1RTVUJESVIgMj4gL2Rl di9udWxsYAplY2hvIERpcjogYGF0dHIgLXEgLVMgLWcgU01BQ0s2NCAkVEVTVFNVQjJESVIg Mj4gL2Rldi9udWxsYCBgbHMgLWlkICRURVNUU1VCMkRJUmAgYGF0dHIgLXEgLVMgLWcgU01B Q0s2NFRSQU5TTVVURSAkVEVTVFNVQjJESVIgMj4gL2Rldi9udWxsYAplY2hvICIkUlVOQVMi ID4gJENVUlJFTlQKR09UPWBhdHRyIC1xIC1TIC1nIFNNQUNLNjQgJFRFU1RTVUIyRElSYApp ZiBbICd4JyIkT0JOQU1FIiAhPSAneCciJEdPVCIgXQp0aGVuCgllY2hvIEV4cGVjdGVkICci JyRPQk5BTUUnIicgYnV0IGdvdCAnIickR09UJyInLgplbHNlCgllY2hvIEV4cGVjdGVkICci JyRPQk5BTUUnIicgYW5kIGdvdCAnIickR09UJyInIHN1Y2Nlc3NmdWxseS4KZmkKCmVjaG8g IiRTVUJOQU1FIiA+ICRDVVJSRU5UCnJtIC1yZiAkVEVTVFNVQjNESVIKc3UgLSAkTk9UUk9P VCAtYyAibWtkaXIgJFRFU1RTVUIzRElSIgpncmVwIGBjYXQgJENVUlJFTlRgICRMT0FECmVj aG8gRGlyOiBgYXR0ciAtcSAtUyAtZyBTTUFDSzY0ICRURVNURElSIDI+IC9kZXYvbnVsbGAg YGxzIC1pZCAkVEVTVERJUmAgYGF0dHIgLXEgLVMgLWcgU01BQ0s2NFRSQU5TTVVURSAkVEVT VERJUiAyPiAvZGV2L251bGxgCmVjaG8gRGlyOiBgYXR0ciAtcSAtUyAtZyBTTUFDSzY0ICRU RVNUU1VCRElSIDI+IC9kZXYvbnVsbGAgYGxzIC1pZCAkVEVTVFNVQkRJUmAgYGF0dHIgLXEg LVMgLWcgU01BQ0s2NFRSQU5TTVVURSAkVEVTVFNVQkRJUiAyPiAvZGV2L251bGxgCmVjaG8g RGlyOiBgYXR0ciAtcSAtUyAtZyBTTUFDSzY0ICRURVNUU1VCMkRJUiAyPiAvZGV2L251bGxg IGBscyAtaWQgJFRFU1RTVUIyRElSYCBgYXR0ciAtcSAtUyAtZyBTTUFDSzY0VFJBTlNNVVRF ICRURVNUU1VCMkRJUiAyPiAvZGV2L251bGxgCmVjaG8gRGlyOiBgYXR0ciAtcSAtUyAtZyBT TUFDSzY0ICRURVNUU1VCM0RJUiAyPiAvZGV2L251bGxgIGBscyAtaWQgJFRFU1RTVUIzRElS YCBgYXR0ciAtcSAtUyAtZyBTTUFDSzY0VFJBTlNNVVRFICRURVNUU1VCM0RJUiAyPiAvZGV2 L251bGxgCmVjaG8gIiRSVU5BUyIgPiAkQ1VSUkVOVApHT1Q9YGF0dHIgLXEgLVMgLWcgU01B Q0s2NCAkVEVTVFNVQjNESVJgCmlmIFsgJ3gnIiRPQk5BTUUiICE9ICd4JyIkR09UIiBdCnRo ZW4KCWVjaG8gRXhwZWN0ZWQgJyInJE9CTkFNRSciJyBidXQgZ290ICciJyRHT1QnIicuCmVs c2UKCWVjaG8gRXhwZWN0ZWQgJyInJE9CTkFNRSciJyBhbmQgZ290ICciJyRHT1QnIicgc3Vj Y2Vzc2Z1bGx5LgpmaQoKcm0gLXJmICRURVNURElSCiMKIyBSZXN0b3JlIG9sZCBsYWJlbCBy dWxlLgojCmlmIFsgIngiIiRPTERSVUxFIiAhPSAieCIgXQp0aGVuCglSQVdPTERNT0RFPWBl Y2hvICRPTERSVUxFIHwgc2VkIC1lICdzLy4qIC8vJ2AKCglJPWBlY2hvICRSQVdPTERNT0RF IHwgZ3JlcCAncidgCglpZiBbICJ4IiIkSSIgPSAieCIgXQoJdGhlbgoJCU9MRE1PREU9Ii0i CgllbHNlCgkJT0xETU9ERT0iciIKCWZpCglJPWBlY2hvICRSQVdPTERNT0RFIHwgZ3JlcCAn dydgCglpZiBbICJ4IiIkSSIgPSAieCIgXQoJdGhlbgoJCU9MRE1PREU9IiRPTERNT0RFIiIt IgoJZWxzZQoJCU9MRE1PREU9IiRPTERNT0RFIiJ3IgoJZmkKCUk9YGVjaG8gJFJBV09MRE1P REUgfCBncmVwICd4J2AKCWlmIFsgIngiIiRJIiA9ICJ4IiBdCgl0aGVuCgkJT0xETU9ERT0i JE9MRE1PREUiIi0iCgllbHNlCgkJT0xETU9ERT0iJE9MRE1PREUiIngiCglmaQoJST1gZWNo byAkUkFXT0xETU9ERSB8IGdyZXAgJ2EnYAoJaWYgWyAieCIiJEkiID0gIngiIF0KCXRoZW4K CQlPTERNT0RFPSIkT0xETU9ERSIiLSIKCWVsc2UKCQlPTERNT0RFPSIkT0xETU9ERSIiYSIK CWZpCglJPWBlY2hvICRSQVdPTERNT0RFIHwgZ3JlcCAndCdgCglpZiBbICJ4IiIkSSIgPSAi eCIgXQoJdGhlbgoJCU9MRE1PREU9IiRPTERNT0RFIiItIgoJZWxzZQoJCU9MRE1PREU9IiRP TERNT0RFIiJ0IgoJZmkKCgllY2hvIC1uICIkU1VCSkVDVCInICciJE9CSkVDVCInICciJE9M RE1PREUiID4gJExPQUQKCSMgZWNobyBSdWxlIHJlc2V0IHRvICciJyIkU1VCTkFNRSInICci JE9CTkFNRSInICciJE9MRE1PREUiJyInCmVsc2UKCWVjaG8gLW4gIiRTVUJKRUNUIicgJyIk T0JKRUNUIicgJyctLS0tLScgPiAkTE9BRAoJIyBlY2hvIFJ1bGUgcmVzZXQgdG8gJyInIiRT VUJOQU1FIicgJyIkT0JOQU1FIicgJyItLS0tLSInIicKZmkKCmVjaG8gIiRSVU5BUyIgPiAk Q1VSUkVOVApybSAtcmYgJFRFU1RESVIKCmV4aXQgMAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA dG9vbHMtMjAxMi9zdG9wcG9seXVkcy5zaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDA3NTUA MDAwMTc1MAAwMDAxNzUwADAwMDAwMDAwMjM0ADEyNzM1NTYwMjEzADAxNjU2NwAgMAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAGNzY2hh dWZsZXIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY3NjaGF1ZmxlcgAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjIS9iaW4vc2gKIwojIENvcHlyaWdodCAoQykg MjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4KIyBDb3B5cmlnaHQgKEMpIDIwMTIgQ2FzZXkgU2No YXVmbGVyIDxjYXNleUBzY2hhdWZsZXItY2EuY29tPgojCgpraWxsYWxsIHNtYWNrdWRzb3V0 CmtpbGxhbGwgc21hY2t1ZHNpbgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHRv b2xzLTIwMTIvc21hY2t1ZHNpbi5jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAwNjQ0ADAw MDE3NTAAMDAwMTc1MAAwMDAwMDAwNTE3NgAxMjczNTU2MDIxMwAwMTYxNDIAIDAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIgIABjc2NoYXVm bGVyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGNzY2hhdWZsZXIAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxz dGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8dW5pc3RkLmg+CgojaW5j bHVkZSA8c3lzL3R5cGVzLmg+CiNpbmNsdWRlIDxzeXMvc3RhdC5oPgojaW5jbHVkZSA8ZmNu dGwuaD4KCiNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CiNpbmNsdWRlIDxuZXRpbmV0L2luLmg+ CiNpbmNsdWRlIDxhcnBhL2luZXQuaD4KI2luY2x1ZGUgPGxpbnV4L2lwLmg+CiNpbmNsdWRl IDxsaW51eC91bi5oPgojaW5jbHVkZSA8bGludXgvdWRwLmg+CiNpbmNsdWRlIDxsaW51eC9u ZXRsaW5rLmg+CiNpbmNsdWRlIDxsaW51eC94YXR0ci5oPgoKI2luY2x1ZGUgInNtYWNrdG9v bHMuaCIKCiNkZWZpbmUgQlVGRkVSX1NJWkUgNTAwCgppbnQKbWFpbihpbnQgYXJnYywgY2hh ciAqYXJndltdKQp7CglpbnQgc29jazsKCXN0cnVjdCBzb2NrYWRkcl91biBzdW47CgljaGFy ICpwYXRoID0gIi90bXAvdGVzdHNtYWNrdWRzIjsKCXN0cnVjdCBpcGhkciAqaXBfaGVhZGVy OwoJc3RydWN0IHVkcGhkciAqdWRwX2hlYWRlcjsKCWludCB0bXA7CglpbnQgbGVuOwoJaW50 IGk7CglpbnQgb2FkZDsKCXVuc2lnbmVkIGNoYXIgKm9hcCA9ICh1bnNpZ25lZCBjaGFyICop Jm9hZGQ7CgljaGFyIHBlZXJbU01BQ0tfTEFCRUxdOwoJY2hhciBjYWxsbm9bU01BQ0tfTEFC RUxdOwoJY2hhciBmcm9tW1NNQUNLX0xBQkVMXTsKCWNoYXIgKmlwaW4gPSBOVUxMOwoJaW50 IHF1aWV0ID0gMDsKCWludCBzcGVjaWFsOwoJaW50IHJpZ2h0ID0gMTsKCWludCBvbmUgPSAx OwoJY2hhciBidWZmZXJbQlVGRkVSX1NJWkVdOwoJY2hhciBjb250cm9sW0JVRkZFUl9TSVpF XTsKCXN0cnVjdCBpb3ZlYyBpb3YgPSB7IGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikgfTsKCXN0 cnVjdCBtc2doZHIgbWVzc2FnZSA9IHsKCQkodm9pZCopJnN1biwgc2l6ZW9mKHN1biksICZp b3YsIDEsIGNvbnRyb2wsIEJVRkZFUl9TSVpFLCAwCgl9OwoKCWZvciAoaSA9IDE7IGkgPCBh cmdjOyBpKyspIHsKCQlpZiAoc3RyY21wKGFyZ3ZbaV0sICItaSIpID09IDAgfHwKCQkgICAg c3RyY21wKGFyZ3ZbaV0sICItLWlwaW4iKSA9PSAwKQoJCQlpcGluID0gYXJndlsrK2ldOwoJ CWlmIChzdHJjbXAoYXJndltpXSwgIi1wIikgPT0gMCB8fAoJCSAgICBzdHJjbXAoYXJndltp XSwgIi0tcGF0aCIpID09IDApCgkJCXBhdGggPSBhcmd2WysraV07CgkJaWYgKHN0cmNtcChh cmd2W2ldLCAiLXEiKSA9PSAwIHx8CgkJICAgIHN0cmNtcChhcmd2W2ldLCAiLS1xdWlldCIp ID09IDApCgkJCXF1aWV0ID0gMTsKCX0KCglpZiAoKHNvY2sgPSBzb2NrZXQoUEZfVU5JWCwg U09DS19ER1JBTSwgMCkpIDwgMCkgeyAKCQlwZXJyb3IoInNvY2tldCIpOwoJCWV4aXQoMSk7 Cgl9CgoJYnplcm8oKGNoYXIgKikmc3VuLCBzaXplb2Yoc3VuKSk7CglzdW4uc3VuX2ZhbWls eSA9IEFGX1VOSVg7CglzdHJjcHkoc3VuLnN1bl9wYXRoLCBwYXRoKTsKCgl1bmxpbmsocGF0 aCk7CgoJaWYgKGJpbmQoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSYgc3VuLCBzaXplb2Yo c3VuKSkgPCAwKSB7CgkJcGVycm9yKCJiaW5kIik7CgkJZXhpdCgxKTsKCX0KCgljaG1vZChw YXRoLCAwNzc3KTsKCiAgICAgICAgaWYgKHNldHNvY2tvcHQoc29jaywgU09MX1NPQ0tFVCwg U09fUEFTU1NFQywgJm9uZSwgc2l6ZW9mKG9uZSkpIDwgMCkgewoJCXBlcnJvcigic2V0c29j a29wdCBJUF9QQVNTRUMiKTsKCQlleGl0KDEpOwoJfQogIAoJaWYgKGlwaW4gIT0gTlVMTCkg ewoJCXRtcCA9IGZzZXR4YXR0cihzb2NrLCAic2VjdXJpdHkuU01BQ0s2NElQSU4iLAoJCQkJ aXBpbiwgc3RybGVuKGlwaW4pKzEsIDApOwoJCWlmICh0bXAgPCAwKQoJCQlwZXJyb3IoImZz ZXR4YXR0ciIpOwoJCWVsc2UKCQkJcHJpbnRmKCJzZWN1cml0eS5TTUFDSzY0SVBJTiBzZXQg PSAlZFxuIiwgdG1wKTsKCX0KCgl3aGlsZSAoIDEgKSB7CgkJbGVuID0gc2l6ZW9mKHN1bik7 CgkJYnplcm8oKGNoYXIgKikmc3VuLCBzaXplb2Yoc3VuKSk7CgkJYnplcm8oYnVmZmVyLCBC VUZGRVJfU0laRSk7CgkJYnplcm8oY29udHJvbCwgQlVGRkVSX1NJWkUpOwoJCXNwZWNpYWwg PSAwOwoKCQltZXNzYWdlLm1zZ19uYW1lbGVuID0gc2l6ZW9mKHN1bik7CgkJbWVzc2FnZS5t c2dfY29udHJvbGxlbiA9IEJVRkZFUl9TSVpFOwoKCQlzdHJjcHkocGVlciwgIlVOQVZBSUxB QkxFIik7CgkJaSA9IHNtYWNrcmVjdm1zZyhzb2NrLCAmbWVzc2FnZSwgMCwgcGVlciwgc2l6 ZW9mKHBlZXIpKTsKCQlpZiAoaSA8IDApCgkJCWZwcmludGYoc3RkZXJyLCAiJXM6JWQgc21h Y2tyZWN2bXNnIGZhaWxlZFxuIiwKCQkJCV9fZnVuY19fLCBfX0xJTkVfXyk7CgoJCWkgPSBz dHJsZW4ocGVlcik7CgkJaWYgKHN0cm5jbXAoYnVmZmVyLCBwZWVyLCBpKSAhPSAwKQoJCQlz cGVjaWFsID0gMTsKCQllbHNlIGlmIChidWZmZXJbaV0gIT0gJyAnICYmIGJ1ZmZlcltpXSAh PSAnXDAnKQoJCQlzcGVjaWFsID0gMTsKCgkJaWYgKHF1aWV0ID09IDAgfHwgc3BlY2lhbCAh PSAwKSB7CgkJCXByaW50ZigiUmVhZCBcIiVzXCIgcGVlciA9IFwiJXNcIiByaWdodCAlZFxu IiwKCQkJCWJ1ZmZlciwgcGVlciwgcmlnaHQpOwoJCX0KCQlpZiAoc3BlY2lhbCAhPSAwKQoJ CQlyaWdodCA9IDA7CgkJZWxzZQoJCQlyaWdodCsrOwoJfQoKCWNsb3NlKHNvY2spOwoKCXJl dHVybiAwOwp9CgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAdG9vbHMtMjAxMi90ZXN0bW1hcC5jAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAADAwMDA2NDQAMDAwMTc1MAAwMDAxNzUwADAwMDAwMDE2NjQyADEyNzM1NTYw MjEzADAxNTYzMwAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAB1c3RhciAgAGNzY2hhdWZsZXIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY3NjaGF1Zmxl cgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvKgogKiBDb3B5 cmlnaHQgKEMpIDIwMTEgQ2FzZXkgU2NoYXVmbGVyIDxjYXNleUBzY2hhdWZsZXItY2EuY29t PgogKgogKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogKgl0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCiAqCiAqIEF1dGhvcjoKICoJQ2FzZXkg U2NoYXVmbGVyIDxjYXNleUBzY2hhdWZsZXItY2EuY29tPgogKi8KI2luY2x1ZGUgPHN5cy90 eXBlcy5oPgojaW5jbHVkZSA8c3lzL3N0YXQuaD4KI2luY2x1ZGUgPHN5cy94YXR0ci5oPgoj aW5jbHVkZSA8c3lzL21tYW4uaD4KI2luY2x1ZGUgPHVuaXN0ZC5oPgojaW5jbHVkZSA8ZmNu dGwuaD4KI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUg PHN0cmluZy5oPgoKI2RlZmluZSBMU0laRSAyMwojZGVmaW5lIEFTSVpFIDUKCiNkZWZpbmUJ TF9GSUxFCQkiT2JqZWN0TGFiZWwiCiNkZWZpbmUJTF9MSUIJCSJMaWJyYXJ5TGFiZWwiCiNk ZWZpbmUJTF9UQVNLCQkiVGFza0xhYmVsIgoKI2RlZmluZSBMT0FET0xECQkiL3NtYWNrL2xv YWQiCiNkZWZpbmUgTE9BRFNFTEZPTEQJIi9zbWFjay9sb2FkLXNlbGYiCiNkZWZpbmUgTE9B RAkJIi9zeXMvZnMvc21hY2tmcy9sb2FkIgojZGVmaW5lIExPQURTRUxGCSIvc3lzL2ZzL3Nt YWNrZnMvbG9hZC1zZWxmIgoKI2RlZmluZSBNTUFQQUJMRQkiL3RtcC90ZXN0bW1hcCIKCmlu dCB3cml0ZXJ1bGUoaW50IGZkLCBjaGFyICpzcCwgY2hhciAqb3AsIGNoYXIgKnJlYWwpCnsK CWNoYXIgcnVsZVtMU0laRSArIExTSVpFICsgQVNJWkUgKyAzXTsKCWludCByYzsKCglzcHJp bnRmKHJ1bGUsICIlLTIzcyAlLTIzcyAlLTVzIiwgc3AsIG9wLCByZWFsKTsKLyoKCXByaW50 Zigid1x0JXNcbiIsIHJ1bGUpOwoqLwoJcmMgPSBsc2VlayhmZCwgMCwgU0VFS19TRVQpOwoJ aWYgKHJjIDwgMCkKCQlwZXJyb3IoImxzZWVrIGluIHdyaXRlcnVsZSIpOwoKCXJjID0gd3Jp dGUoZmQsIHJ1bGUsIExTSVpFICsgTFNJWkUgKyBBU0laRSArIDIpOwoJaWYgKHJjIDwgMCkK CQlwZXJyb3IoIndyaXRlIGluIHdyaXRlcnVsZSIpOwoKCXJldHVybiByYzsKfQoKaW50IG9m ZnNldDsKY2hhciBidWZmZXJbNTEyXTsKCmludCByZWFkc2VsZihpbnQgZmQsIGNoYXIgKnNw LCBjaGFyICpvcCwgY2hhciAqcmVhbCkKewoJaW50IHJlZDsKCWludCByYzsKCglpZiAob2Zm c2V0ID09IDApIHsKCQliemVybyhidWZmZXIsIDUxMik7CgkJcmVkID0gcmVhZChmZCwgYnVm ZmVyLCA1MTIpOwoJCWlmIChyZWQgPCAwKSB7CgkJCXBlcnJvcigicmVhZGluZyAiIExPQURT RUxGKTsKCQkJcmV0dXJuIHJlZDsKCQl9CgkJaWYgKHJlZCA9PSAwKQoJCQlyZXR1cm4gMDsK CQlidWZmZXJbcmVkXSA9ICdcMCc7Cgl9CglpZiAoKHJjID0gc3NjYW5mKGJ1ZmZlciArIG9m ZnNldCwgIiVzICVzICVzIiwgc3AsIG9wLCByZWFsKSkgIT0gMykgewoJCWlmIChyYyA+PSAw KQoJCQlwcmludGYoInNjYW5uZWQgJWRcbiIsIHJjKTsKCQlyYyA9IDA7Cgl9Cgl3aGlsZSAo YnVmZmVyW29mZnNldF0gIT0gJ1xuJyAmJiBidWZmZXJbb2Zmc2V0XSAhPSAnXDAnKQoJCW9m ZnNldCsrOwoJaWYgKGJ1ZmZlcltvZmZzZXRdID09ICdcbicpCgkJb2Zmc2V0Kys7CglpZiAo YnVmZmVyW29mZnNldF0gPT0gJ1wwJykKCQlvZmZzZXQgPSAwOwoJaWYgKG9mZnNldCA+PSBy ZWQpCgkJb2Zmc2V0ID0gMDsKCXJldHVybiByYzsKfQoKaW50IG9wZW5sb2FkKGludCBvbGRm ZCkKewoJaW50IGxvYWRmZDsKCglpZiAob2xkZmQgPj0gMCkKCQljbG9zZShvbGRmZCk7CgoJ bG9hZGZkID0gb3BlbihMT0FELCBPX1JEV1IpOwoJaWYgKGxvYWRmZCA8IDApCgkJbG9hZGZk ID0gb3BlbihMT0FET0xELCBPX1JEV1IpOwoJaWYgKGxvYWRmZCA8IDApIHsKCQlwZXJyb3Io Im9wZW5pbmcgIiBMT0FEKTsKCQlleGl0KDEpOwoJfQoJcmV0dXJuIGxvYWRmZDsKfQoKaW50 IG9wZW5sb2Fkc2VsZihpbnQgb2xkZmQpCnsKCWludCBsb2FkZmQ7CgoJaWYgKG9sZGZkID49 IDApCgkJY2xvc2Uob2xkZmQpOwoKCWxvYWRmZCA9IG9wZW4oTE9BRFNFTEYsIE9fUkRXUik7 CglpZiAobG9hZGZkIDwgMCkKCQlsb2FkZmQgPSBvcGVuKExPQURTRUxGT0xELCBPX1JEV1Ip OwoJaWYgKGxvYWRmZCA8IDApIHsKCQlwZXJyb3IoIm9wZW5pbmcgIiBMT0FEU0VMRik7CgkJ ZXhpdCgxKTsKCX0KCXJldHVybiBsb2FkZmQ7Cn0KCmludCBvcGVuY3VycmVudCh2b2lkKQp7 CglpbnQgZmQ7CgoJZmQgPSBvcGVuKCIvcHJvYy9zZWxmL2F0dHIvc21hY2suY3VycmVudCIs IE9fUkRXUik7CglpZiAoZmQgPCAwKQoJCWZkID0gb3BlbigiL3NtYWNrL2N1cnJlbnQiLCBP X1JEV1IpOwoJaWYgKGZkIDwgMCkKCQlmZCA9IG9wZW4oIi9wcm9jL3NlbGYvYXR0ci9jdXJy ZW50IiwgT19SRFdSKTsKCWlmIChmZCA8IDApIHsKCQlwZXJyb3IoIm9wZW5pbmcgL3Byb2Mv c2VsZi9hdHRyL2N1cnJlbnQiKTsKCQlleGl0KDEpOwoJfQoJcmV0dXJuIGZkOwp9Cgp2b2lk IHByb2NsYWJlbChpbnQgY3VycmVudGZkLCBjaGFyICpzbWFjaykKewoJaW50IHJjOwoJY2hh ciAqY3A7CgoJcmMgPSByZWFkKGN1cnJlbnRmZCwgc21hY2ssIExTSVpFKTsKCWlmIChyYyA8 PSAwKSB7CgkJcGVycm9yKCJyZWFkaW5nIC9wcm9jL3NlbGYvYXR0ci9jdXJyZW50Iik7CgkJ ZXhpdCgxKTsKCX0KCXNtYWNrW3JjXSA9IDA7CglpZiAoKGNwID0gc3RyY2hyKHNtYWNrLCAn XG4nKSkgIT0gTlVMTCkKCQkqY3AgPSAnXDAnOwp9CgppbnQgc21hY2tfc2V0X21tYXAoY2hh ciAqcGF0aCwgY2hhciAqbXNtYWNrKQp7CglpbnQgcmM7CgoJcmMgPSBsc2V0eGF0dHIocGF0 aCwgInNlY3VyaXR5LlNNQUNLNjRNTUFQIiwgbXNtYWNrLCBzdHJsZW4obXNtYWNrKSwgMCk7 CglpZiAocmMgPD0gMCkgewoJCXBlcnJvcigic2V0dGluZyBNTUFQIGxhYmVsIik7CgkJZXhp dCgxKTsKCX0KCQp9CgppbnQgc21hY2tfZ2V0X21tYXAoY2hhciAqcGF0aCwgY2hhciAqbXNt YWNrKQp7CglpbnQgcmM7CgoJcmMgPSBsZ2V0eGF0dHIocGF0aCwgInNlY3VyaXR5LlNNQUNL NjRNTUFQIiwgbXNtYWNrLCBMU0laRSk7CglpZiAocmMgPiAwKQoJCW1zbWFja1tyY10gPSAn XDAnOwoJcmV0dXJuIHJjOwp9CgppbnQgc21hY2tfb2ZfZmlsZShjaGFyICpwYXRoLCBjaGFy ICpzbWFjaykKewoJaW50IHJjOwoKCXJjID0gbGdldHhhdHRyKHBhdGgsICJzZWN1cml0eS5T TUFDSzY0Iiwgc21hY2ssIExTSVpFKTsKCWlmIChyYyA+IDApCgkJc21hY2tbcmNdID0gJ1ww JzsKCXJldHVybiByYzsKfQoKaW50IG1tYXBmZChjaGFyICp0ZXh0KQp7CglpbnQgZmQ7Cglp bnQgcmM7CglpbnQgaTsKCglyYyA9IHVubGluayhNTUFQQUJMRSk7CglpZiAocmMgPCAwKQoJ CXBlcnJvcigiTm90ZSBvbiBwcmUtY2xlYW5pbmciKTsKCglmZCA9IG9wZW4oTU1BUEFCTEUs IE9fQ1JFQVQgfCBPX1JEV1IsIFNfSVJXWFUgfCBTX0lSV1hHIHwgU19JUldYTyk7CglpZiAo ZmQgPCAwKSB7CgkJcGVycm9yKCJjcmVhdGluZyBNTUFQIGZpbGUiKTsKCQlleGl0KDEpOwoJ fQoJcmMgPSBjaG1vZChNTUFQQUJMRSwgMDc3Nyk7CglpZiAocmMgPCAwKQoJCXBlcnJvcigi c2V0dGluZyBtb2RlIik7CglyYyA9IGxzZXR4YXR0cihNTUFQQUJMRSwgInNlY3VyaXR5LlNN QUNLNjQiLCBMX0ZJTEUsIHN0cmxlbihMX0ZJTEUpLCAwKTsKCWlmIChyYyA8IDApCgkJcGVy cm9yKCJzZXR0aW5nIG9iamVjdCBsYWJlbCIpOwoJcmMgPSBsc2V0eGF0dHIoTU1BUEFCTEUs ICJzZWN1cml0eS5TTUFDSzY0TU1BUCIsIExfTElCLCBzdHJsZW4oTF9MSUIpLCAwKTsKCWlm IChyYyA8IDApCgkJcGVycm9yKCJzZXR0aW5nIE1NQVAiKTsKCglmb3IgKGkgPSAwOyBpIDwg MTAyNDsgaSArPSByYykgewoJCXJjID0gd3JpdGUoZmQsIHRleHQsIHN0cmxlbih0ZXh0KSk7 CgkJaWYgKHJjIDw9IDApIHsKCQkJcGVycm9yKCJ3cml0aW5nIE1NQVAgZmlsZSIpOwoJCQll eGl0KDEpOwoJCX0KCX0KCglyZXR1cm4gZmQ7Cn0KCnZvaWQgcHJpbnRsaXN0KGludCBmZCwg Y2hhciAqdGl0bGUpCnsKCWNoYXIgc3ViamVjdFtMU0laRSsxXTsKCWNoYXIgb2JqZWN0W0xT SVpFKzFdOwoJY2hhciBhY2Nlc3Nlc1tBU0laRSsxXTsKCWludCByYzsKCglwcmludGYoIiVz OlxuIiwgdGl0bGUpOwoJb2Zmc2V0ID0gMDsKCXJjID0gbHNlZWsoZmQsIDAsIFNFRUtfU0VU KTsKCWlmIChyYyA8IDApCgkJcGVycm9yKCJsc2VlayBpbiBwcmludGxpc3QiKTsKCgl3aGls ZSAocmVhZHNlbGYoZmQsIHN1YmplY3QsIG9iamVjdCwgYWNjZXNzZXMpID4gMCkKCQlwcmlu dGYoIlx0JS0yM3MgJS0yM3MgJS01c1xuIiwgc3ViamVjdCwgb2JqZWN0LCBhY2Nlc3Nlcyk7 Ci8qCgkJcHJpbnRmKCJyXHQlLTIzcyAlLTIzcyAlLTVzXG4iLCBzdWJqZWN0LCBvYmplY3Qs IGFjY2Vzc2VzKTsKKi8KfQoKdm9pZCB0cnlhZGRpbmcoaW50IHJ1bGVmZCwgaW50IG1tZmQs IGNoYXIgKnN1YiwgY2hhciAqb2JqLCBjaGFyICphY2Nlc3MpCnsKCWNoYXIgKnJwOwoJY2hh ciBub3RlWzMwMF07CgoJc3ByaW50Zihub3RlLCAiTmV3IFJ1bGU6ICVzICVzICVzIiwgc3Vi LCBvYmosIGFjY2Vzcyk7CgoJaWYgKHdyaXRlcnVsZShydWxlZmQsIHN1Yiwgb2JqLCBhY2Nl c3MpIDwgMCkKCQlwZXJyb3Iobm90ZSk7Ci8qCglwcmludGxpc3QocnVsZWZkLCBub3RlKTsK Ki8KCglycCA9IG1tYXAoTlVMTCwgMTAyNCwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQ X1NIQVJFRCwgbW1mZCwgMCk7CglpZiAocnAgIT0gTUFQX0ZBSUxFRCkgewoJCW11bm1hcChy cCwgMTAyNCk7CgkJcHJpbnRmKCIlczogU3VjY2Vzc1xuIiwgbm90ZSk7Cgl9CgllbHNlCgkJ cGVycm9yKG5vdGUpOwp9CgppbnQKbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQp7Cglp bnQgcmM7CglpbnQgbG9hZGZkOwoJaW50IHNlbGZmZDsKCWludCBjdXJyZW50ZmQ7CglpbnQg bW1mZDsKCWNoYXIgc3ViamVjdFtMU0laRSsxXTsKCWNoYXIgb2JqZWN0W0xTSVpFKzFdOwoJ Y2hhciBhY2Nlc3Nlc1tBU0laRSsxXTsKCWNoYXIgc2VsZltMU0laRSsxXTsKCWNoYXIgaXRb TFNJWkUrMV07CgljaGFyICpycDsKCglsb2FkZmQgPSBvcGVubG9hZCgtMSk7CglzZWxmZmQg PSBvcGVubG9hZHNlbGYoLTEpOwoJY3VycmVudGZkID0gb3BlbmN1cnJlbnQoKTsKCglyYyA9 IHdyaXRlKGN1cnJlbnRmZCwgTF9UQVNLLCBzdHJsZW4oTF9UQVNLKSk7CglpZiAocmMgPCAw KQoJCXBlcnJvcigid3JpdGUgdG8gY3VycmVudGZkIik7CgoJbW1mZCA9IG1tYXBmZCgiRmly c3QgVGVzdFxuIik7CglpZiAobW1mZCA8IDApCgkJcGVycm9yKCJPcGVuaW5nIHRlc3QgZmls ZSIpOwoKCXByaW50ZigiV3JpdGluZyBnbG9iYWxcbiIpOwoJaWYgKHdyaXRlcnVsZShsb2Fk ZmQsIExfVEFTSywgTF9GSUxFLCAicnctLS0iKSA8IDApCgkJcGVycm9yKCJXcml0aW5nIGds b2JhbCB0YXNrIGZpbGUgcnctLS1cIiIpOwoJaWYgKHdyaXRlcnVsZShsb2FkZmQsIExfTElC LCBMX0ZJTEUsICJydy0tLSIpIDwgMCkKCQlwZXJyb3IoIldyaXRpbmcgZ2xvYmFsIHRhc2sg ZmlsZSBydy0tLVwiIik7CgoJcHJpbnRsaXN0KGxvYWRmZCwgIkluaXRpYWwgZ2xvYmFsIGxp c3QiKTsKCXByaW50bGlzdChzZWxmZmQsICJJbml0aWFsIGxvY2FsIGxpc3QiKTsKCglzZXRy ZXVpZCgwLCA1MDApOwoKCXJwID0gbW1hcChOVUxMLCAxMDI0LCBQUk9UX1JFQUQgfCBQUk9U X1dSSVRFLCBNQVBfU0hBUkVELCBtbWZkLCAwKTsKCWlmIChycCA9PSBNQVBfRkFJTEVEKQoJ CXBlcnJvcigiY29udHJvbCBtbWFwIGZhaWxlZCIpOwoJZWxzZSB7CgkJcHJpbnRmKCJtbWFw IHdpdGggbm8gbG9jYWwgcnVsZXMgc3VjY2VlZGVkXG4iKTsKCQltdW5tYXAocnAsIDEwMjQp OwoJfQoJCgl0cnlhZGRpbmcoc2VsZmZkLCBtbWZkLCBMX1RBU0ssIExfTElCLCAicnctLS0i KTsKCXRyeWFkZGluZyhzZWxmZmQsIG1tZmQsIExfVEFTSywgTF9GSUxFLCAicnctLS0iKTsK CXRyeWFkZGluZyhzZWxmZmQsIG1tZmQsIExfTElCLCBMX1RBU0ssICJydy0tLSIpOwoJdHJ5 YWRkaW5nKHNlbGZmZCwgbW1mZCwgTF9MSUIsIExfRklMRSwgInJ3LS0tIik7Cgl0cnlhZGRp bmcoc2VsZmZkLCBtbWZkLCBMX0ZJTEUsIExfVEFTSywgInJ3LS0tIik7Cgl0cnlhZGRpbmco c2VsZmZkLCBtbWZkLCBMX0ZJTEUsIExfTElCLCAicnctLS0iKTsKCQoJdHJ5YWRkaW5nKHNl bGZmZCwgbW1mZCwgTF9MSUIsIExfRklMRSwgIi0tLS0tIik7Cgl0cnlhZGRpbmcoc2VsZmZk LCBtbWZkLCBMX0xJQiwgTF9GSUxFLCAicnctLS0iKTsKCgl0cnlhZGRpbmcoc2VsZmZkLCBt bWZkLCBMX1RBU0ssIExfTElCLCAiLS0tLS0iKTsKCXRyeWFkZGluZyhzZWxmZmQsIG1tZmQs IExfVEFTSywgTF9GSUxFLCAiLS0tLS0iKTsKCXRyeWFkZGluZyhzZWxmZmQsIG1tZmQsIExf TElCLCBMX1RBU0ssICItLS0tLSIpOwoJdHJ5YWRkaW5nKHNlbGZmZCwgbW1mZCwgTF9MSUIs IExfRklMRSwgIi0tLS0tIik7Cgl0cnlhZGRpbmcoc2VsZmZkLCBtbWZkLCBMX0ZJTEUsIExf VEFTSywgIi0tLS0tIik7Cgl0cnlhZGRpbmcoc2VsZmZkLCBtbWZkLCBMX0ZJTEUsIExfTElC LCAiLS0tLS0iKTsKCQoJdHJ5YWRkaW5nKHNlbGZmZCwgbW1mZCwgTF9UQVNLLCBMX0xJQiwg InJ3LS0tIik7Cgl0cnlhZGRpbmcoc2VsZmZkLCBtbWZkLCBMX0xJQiwgTF9GSUxFLCAicnct LS0iKTsKCXRyeWFkZGluZyhzZWxmZmQsIG1tZmQsIExfTElCLCBMX0ZJTEUsICItLS0tLSIp OwoKCXRyeWFkZGluZyhzZWxmZmQsIG1tZmQsIExfVEFTSywgTF9GSUxFLCAicnctLS0iKTsK CXRyeWFkZGluZyhzZWxmZmQsIG1tZmQsIExfTElCLCBMX0ZJTEUsICJydy0tLSIpOwoJdHJ5 YWRkaW5nKHNlbGZmZCwgbW1mZCwgTF9MSUIsIExfRklMRSwgIi0tLS0tIik7CgoJdHJ5YWRk aW5nKHNlbGZmZCwgbW1mZCwgTF9MSUIsIExfVEFTSywgInJ3LS0tIik7Cgl0cnlhZGRpbmco c2VsZmZkLCBtbWZkLCBMX0xJQiwgTF9GSUxFLCAicnctLS0iKTsKCXRyeWFkZGluZyhzZWxm ZmQsIG1tZmQsIExfTElCLCBMX0ZJTEUsICItLS0tLSIpOwoKCXRyeWFkZGluZyhzZWxmZmQs IG1tZmQsIExfTElCLCBMX0ZJTEUsICJydy0tLSIpOwoJdHJ5YWRkaW5nKHNlbGZmZCwgbW1m ZCwgTF9MSUIsIExfRklMRSwgInJ3LS0tIik7Cgl0cnlhZGRpbmcoc2VsZmZkLCBtbWZkLCBM X0xJQiwgTF9GSUxFLCAiLS0tLS0iKTsKCgl0cnlhZGRpbmcoc2VsZmZkLCBtbWZkLCBMX0ZJ TEUsIExfVEFTSywgInJ3LS0tIik7Cgl0cnlhZGRpbmcoc2VsZmZkLCBtbWZkLCBMX0xJQiwg TF9GSUxFLCAicnctLS0iKTsKCXRyeWFkZGluZyhzZWxmZmQsIG1tZmQsIExfTElCLCBMX0ZJ TEUsICItLS0tLSIpOwoKCXRyeWFkZGluZyhzZWxmZmQsIG1tZmQsIExfRklMRSwgTF9MSUIs ICJydy0tLSIpOwoJdHJ5YWRkaW5nKHNlbGZmZCwgbW1mZCwgTF9MSUIsIExfRklMRSwgInJ3 LS0tIik7Cgl0cnlhZGRpbmcoc2VsZmZkLCBtbWZkLCBMX0xJQiwgTF9GSUxFLCAiLS0tLS0i KTsKCglleGl0KDApOwp9CgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAB0b29scy0yMDEyL25ld3NtYWNrLmMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDY0 NAAwMDAxNzUwADAwMDE3NTAAMDAwMDAwMDUyMTcAMTI3MzU1NjAyMTMAMDE1NjA1ACAwAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAY3Nj aGF1ZmxlcgAAAAAAAAAAAAAAAAAAAAAAAAAAAABjc2NoYXVmbGVyAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC8qCiAqIENvcHlyaWdodCAoQykgMjAxMiBD YXNleSBTY2hhdWZsZXIgPGNhc2V5QHNjaGF1Zmxlci1jYS5jb20+CiAqIENvcHlyaWdodCAo QykgSW50ZWwgQ29ycG9yYXRpb24uCiAqLwoKI2luY2x1ZGUgPHN5cy90eXBlcy5oPgojaW5j bHVkZSA8c3lzL3N0YXQuaD4KI2luY2x1ZGUgPGZjbnRsLmg+CiNpbmNsdWRlIDxzdGRsaWIu aD4KI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPHB3 ZC5oPgojaW5jbHVkZSAic21hY2t0b29scy5oIgoKaW50Cm1haW4oaW50IGFyZ2MsIGNoYXIg KmFyZ3ZbXSkKewoJaW50IGk7CglpbnQgZmQ7CglpbnQgc21hY2tsZW47CglpbnQgdmlvbGF0 aW9ucyA9IDA7CglpbnQgbmV3YXJnYzsKCWNoYXIgKm5ld2FyZ3ZbMjU2XTsgLyogeWVzLCBJ IGtub3cgKi8KCWNoYXIgKnNlbGZpc2gxID0gIi9wcm9jL3NlbGYvYXR0ci9zbWFjay9jdXJy ZW50IjsKCWNoYXIgKnNlbGZpc2gyID0gIi9wcm9jL3NlbGYvYXR0ci9zbWFjay5jdXJyZW50 IjsKCWNoYXIgKnNlbGZpc2gzID0gIi9wcm9jL3NlbGYvYXR0ci9jdXJyZW50IjsKCWNoYXIg KnNtYWNrOwoJc3RydWN0IHBhc3N3ZCAqcHdkcDsKCglpZiAoYXJnYyA8PSAxKSB7CgkJZnBy aW50ZihzdGRlcnIsICIlczogTm8gdmFsdWUgc3BlY2lmaWVkXG4iLCBhcmd2WzBdKTsKCQll eGl0KDEpOwoJfQoJLyoKCSAqIEFyZ3VtZW50cyBmb3IgbmV3c21hY2sgaXRzZWxmCgkgKi8K CWZvciAoaSA9IDE7IGkgPCBhcmdjICYmICphcmd2W2ldID09ICctJzsgaSsrKSB7CgkJaWYg KHN0cmNtcChhcmd2W2ldLCAiLXYiKSA9PSAwKQoJCQl2aW9sYXRpb25zID0gMTsKCQllbHNl IGlmIChzdHJjbXAoYXJndltpXSwgIi12aW9sYXRpb25zIikgPT0gMCkKCQkJdmlvbGF0aW9u cyA9IDE7CgkJZWxzZSB7CgkJCWZwcmludGYoc3RkZXJyLAoJCQkJIiVzOiBVbmtub3duIG9w dGlvbiBcIiVzXCIgc3BlY2lmaWVkXG4iLAoJCQkJYXJndlswXSwgYXJndltpXSk7CgkJCWV4 aXQoMSk7CgkJfQoJfQoKCS8qCgkgKiBUaGVyZSBtdXN0IGJlIGFub3RoZXIgYXJndW1lbnQs IHRoZSBsYWJlbAoJICovCglpZiAoaSA9PSBhcmdjKSB7CgkJZnByaW50ZihzdGRlcnIsICIl czogTm8gdmFsdWUgc3BlY2lmaWVkXG4iLCBhcmd2WzBdKTsKCQlleGl0KDEpOwoJfQoKCXNt YWNrID0gYXJndltpKytdOwoKCWlmICgoc21hY2tsZW4gPSBzdHJsZW4oc21hY2spKSA+PSBT TUFDS19MQUJFTCB8fCBzbWFja2xlbiA8IDEpIHsKCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBC YWQgdmFsdWUgXCIlc1wiIHNwZWNpZmllZFxuIiwKCQkJYXJndlswXSwgc21hY2spOwoJCWV4 aXQoMSk7Cgl9CgoJcHdkcCA9IGdldHB3dWlkKGdldHVpZCgpKTsKCWlmIChwd2RwID09IE5V TEwpIHsKCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBVc2VyIFwiJXNcIiBub3Qga25vd25cbiIs CgkJCWFyZ3ZbMF0sIHB3ZHAtPnB3X25hbWUpOwoJCWV4aXQoMSk7Cgl9CglpZiAoc21hY2tf dXNlcl9hbGxvd2VkKHB3ZHAtPnB3X25hbWUsIHNtYWNrKSAhPSAwKSB7CgkJZnByaW50Zihz dGRlcnIsICIlczogVXNlciBcIiVzXCIgbm90IGFsbG93ZWQgc21hY2sgXCIlc1wiXG4iLAoJ CQlhcmd2WzBdLCBwd2RwLT5wd19uYW1lLCBzbWFjayk7CgkJZXhpdCgxKTsKCX0KCS8qCgkg KiBTdGFydCBhIHNoZWxsIGlmIG5vIGNvbW1hbmQgaXMgc3BlY2lmaWVkCgkgKi8KCglpZiAo aSA9PSBhcmdjKSB7CgkJZnByaW50ZihzdGRlcnIsICIlczogc3RhcnQgYSBzaGVsbCBhdCBc IiVzXCJcbiIsCgkJCWFyZ3ZbMF0sIHNtYWNrKTsKCQluZXdhcmd2WzBdID0gInNoIjsKCQlu ZXdhcmd2WzFdID0gTlVMTDsKCX0KCWVsc2UgewoJCWZvciAobmV3YXJnYyA9IDA7IGkgPCBh cmdjOyBuZXdhcmdjKyssIGkrKykgewoJCQluZXdhcmd2W25ld2FyZ2NdID0gYXJndltpXTsK CQl9CgkJbmV3YXJndltuZXdhcmdjXSA9IE5VTEw7Cgl9CgoKCS8qCgkgKiBJZiB2aW9sYXRp b25zIGFyZSBzZXQgZG8gZXZlcnl0aGluZyB0byBtYWtlIGl0CgkgKiAid29yayIgYW55d2F5 LCB0aGF0IGlzLCBpdCdzIG9rYXkgdG8gcGVyZm9ybQoJICogYWN0cyB0aGF0IHZpb2xhdGUg cmF0aW9uYWwgcG9saWNpZXMuCgkgKi8KCWlmICh2aW9sYXRpb25zKSB7CgkJaWYgKHNldHhh dHRyKCIvcHJvYy9zZWxmL2ZkLzAiLCJzZWN1cml0eS5TTUFDSzY0IiwiKiIsMSwwKSA8IDAp CgkJCXBlcnJvcigic2V0IHNtYWNrIGF0dHIiKTsKCX0KCS8qCgkgKiBTZXQgdGhlIHByb2Nl c3MgbGFiZWwuCgkgKi8KCWlmICgoZmQgPSBvcGVuKHNlbGZpc2gxLCBPX1JEV1IpKSA8IDAg JiYKCSAgICAoZmQgPSBvcGVuKHNlbGZpc2gyLCBPX1JEV1IpKSA8IDAgJiYKCSAgICAoZmQg PSBvcGVuKHNlbGZpc2gzLCBPX1JEV1IpKSA8IDApIHsKCQlmcHJpbnRmKHN0ZGVyciwgIiVz OiBjYW5ub3Qgb3BlbiB0byBzZXQgc21hY2tcbiIsIGFyZ3ZbMF0pOwoJCWV4aXQoMSk7Cgl9 CglpZiAod3JpdGUoZmQsIHNtYWNrLCBzbWFja2xlbikgPCAwKSB7CgkJZnByaW50ZihzdGRl cnIsICIlczogY2Fubm90IHdyaXRlIHRvIHNldCBzbWFja1xuIiwgYXJndlswXSk7CgkJZXhp dCgxKTsKCX0KCWNsb3NlKGZkKTsKCS8qCgkgKiBEbyB0aGUgZXhlYwoJICovCglleGVjdnAo bmV3YXJndlswXSwgbmV3YXJndik7CgoJZnByaW50ZihzdGRlcnIsICIlczogZXhlYyBmYWls dXJlLlxuIiwgYXJndlswXSk7CglleGl0KDApOwp9CgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAHRvb2xzLTIwMTIvdGVzdGxvYWRzZWxmLmMAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAwMDAwNjQ0ADAwMDE3NTAAMDAwMTc1MAAwMDAwMDAxNjAwMgAxMjcz NTU2MDIxMwAwMTY0NjAAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAdXN0YXIgIABjc2NoYXVmbGVyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGNzY2hh dWZsZXIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALyoKICog dGVzdGxvYWRzZWxmIC0gdGVzdCBsb2NhbCBydWxlcwogKgogKiBDb3B5cmlnaHQgKEMpIDIw MTAgQ2FzZXkgU2NoYXVmbGVyIDxjYXNleUBzY2hhdWZsZXItY2EuY29tPgogKiBDb3B5cmln aHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24KICoKICoJVGhpcyBwcm9ncmFtIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICoJ aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBh cyBwdWJsaXNoZWQgYnkKICoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lv biAyLgogKgogKiBBdXRob3I6CiAqCUNhc2V5IFNjaGF1ZmxlciA8Y2FzZXlAc2NoYXVmbGVy LWNhLmNvbT4KICovCiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KI2luY2x1ZGUgPHN5cy9zdGF0 Lmg+CiNpbmNsdWRlIDxzeXMveGF0dHIuaD4KI2luY2x1ZGUgPHVuaXN0ZC5oPgojaW5jbHVk ZSA8ZmNudGwuaD4KI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2lu Y2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSAic21hY2t0b29scy5oIgoKI2RlZmluZSBMU0la RSAyMwojZGVmaW5lIEFTSVpFIDUKI2RlZmluZSBUSUNLWQkiVGlja3lUaWNreVRpY2t5U3Bh dGhhbmdXaG9vIgoKaW50IHdyaXRlc2VsZihpbnQgbG9hZGZkLCBjaGFyICpzcCwgY2hhciAq b3AsIGNoYXIgKnJlYWwpCnsKCWNoYXIgcnVsZVtMU0laRSArIExTSVpFICsgQVNJWkUgKyAz XTsKCglzcHJpbnRmKHJ1bGUsICIlLTIzcyAlLTIzcyAlLTVzIiwgc3AsIG9wLCByZWFsKTsK CglwcmludGYoIndcdCVzXG4iLCBydWxlKTsKCglyZXR1cm4gd3JpdGUobG9hZGZkLCBydWxl LCBMU0laRSArIExTSVpFICsgQVNJWkUgKyAyKTsKfQoKaW50IHdyaXRlc2VsZjIoaW50IGxv YWQyZmQsIGNoYXIgKnNwLCBjaGFyICpvcCwgY2hhciAqcmVhbCkKewoJY2hhciAqcnVsZTsK CWludCBybGVuOwoJCglybGVuID0gc3RybGVuKHNwKSArIHN0cmxlbihvcCkgKyBzdHJsZW4o cmVhbCkgKyA0OwoJaWYgKChydWxlID0gbWFsbG9jKHJsZW4pKSA9PSBOVUxMKQoJCXJldHVy biAtMTsKCXNwcmludGYocnVsZSwgIiVzICVzICVzIiwgc3AsIG9wLCByZWFsKTsKCglwcmlu dGYoIndcdCVzXG4iLCBydWxlKTsKCglybGVuID0gd3JpdGUobG9hZDJmZCwgcnVsZSwgc3Ry bGVuKHJ1bGUpKTsKCWZyZWUocnVsZSk7CglyZXR1cm4gcmxlbjsKfQoKaW50IG9mZnNldDsK Y2hhciBidWZmZXJbMTAyNF07CgppbnQgcmVhZHNlbGYoaW50IGxvYWRmZCwgY2hhciAqc3As IGNoYXIgKm9wLCBjaGFyICpyZWFsKQp7CglpbnQgcmM7CgoJaWYgKG9mZnNldCA9PSAwKSB7 CgkJcmMgPSByZWFkKGxvYWRmZCwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7CgkJaWYgKHJj IDwgMCkgewoJCQlwZXJyb3IoInJlYWRpbmcgL3NtYWNrL2xvYWQtc2VsZiIpOwoJCQlyZXR1 cm4gcmM7CgkJfQoJCWlmIChyYyA9PSAwKQoJCQlyZXR1cm4gMDsKCQlidWZmZXJbcmNdID0g J1wwJzsKCX0KCWlmICgocmMgPSBzc2NhbmYoYnVmZmVyICsgb2Zmc2V0LCAiJXMgJXMgJXMi LCBzcCwgb3AsIHJlYWwpKSAhPSAzKSB7CgkJcHJpbnRmKCJzY2FubmVkICVkXG4iLCByYyk7 CgkJcmMgPSAtMTsKCX0KCXdoaWxlIChidWZmZXJbb2Zmc2V0XSAhPSAnXG4nICYmIGJ1ZmZl cltvZmZzZXRdICE9ICdcMCcpCgkJb2Zmc2V0Kys7CglpZiAoYnVmZmVyW29mZnNldF0gPT0g J1xuJykKCQlvZmZzZXQrKzsKCWlmIChidWZmZXJbb2Zmc2V0XSA9PSAnXDAnKQoJCW9mZnNl dCA9IDA7CglyZXR1cm4gcmM7Cn0KCmludCBvcGVubG9hZChpbnQgb2xkZmQpCnsKCWludCBs b2FkZmQ7CgoJaWYgKG9sZGZkID49IDApCgkJY2xvc2Uob2xkZmQpOwoKCWxvYWRmZCA9IG9w ZW4oIi9zeXMvZnMvc21hY2tmcy9sb2FkLXNlbGYiLCBPX1JEV1IpOwoJaWYgKGxvYWRmZCA8 IDApCgkJbG9hZGZkID0gb3BlbigiL3NtYWNrL2xvYWQtc2VsZiIsIE9fUkRXUik7CglpZiAo bG9hZGZkIDwgMCkgewoJCXBlcnJvcigib3BlbmluZyAvc21hY2svbG9hZC1zZWxmIik7CgkJ ZXhpdCgxKTsKCX0KCXJldHVybiBsb2FkZmQ7Cn0KCmludCBvcGVubG9hZDIoaW50IG9sZGZk KQp7CglpbnQgbG9hZDJmZDsKCglpZiAob2xkZmQgPj0gMCkKCQljbG9zZShvbGRmZCk7CgoJ bG9hZDJmZCA9IG9wZW4oIi9zeXMvZnMvc21hY2tmcy9sb2FkLXNlbGYyIiwgT19SRFdSKTsK CWlmIChsb2FkMmZkIDwgMCkKCQlsb2FkMmZkID0gb3BlbigiL3NtYWNrL2xvYWQtc2VsZjIi LCBPX1JEV1IpOwoJaWYgKGxvYWQyZmQgPCAwKSB7CgkJcGVycm9yKCJvcGVuaW5nIC9zbWFj ay9sb2FkLXNlbGYyIik7CgkJZXhpdCgxKTsKCX0KCXJldHVybiBsb2FkMmZkOwp9CgppbnQg c21hY2tfb2ZfZmlsZShjaGFyICpwYXRoLCBjaGFyICpzbWFjaykKewoJaW50IHJjOwoKCXJj ID0gbGdldHhhdHRyKHBhdGgsICJzZWN1cml0eS5TTUFDSzY0Iiwgc21hY2ssIFNNQUNLX0xB QkVMKTsKCWlmIChyYyA+IDApCgkJc21hY2tbcmNdID0gJ1wwJzsKCXJldHVybiByYzsKfQoK dm9pZCBwcmludGxpc3QoaW50IGxvYWRmZCwgY2hhciAqdGl0bGUsIGludCB1c2UyKQp7Cglj aGFyIHN1YmplY3RbU01BQ0tfTEFCRUxdOwoJY2hhciBvYmplY3RbU01BQ0tfTEFCRUxdOwoJ Y2hhciBhY2Nlc3Nlc1tBU0laRSsxXTsKCglpZiAodXNlMikKCQlsb2FkZmQgPSBvcGVubG9h ZDIobG9hZGZkKTsKCWVsc2UKCQlsb2FkZmQgPSBvcGVubG9hZChsb2FkZmQpOwoJcHJpbnRm KCIlczpcbiIsIHRpdGxlKTsKCXdoaWxlIChyZWFkc2VsZihsb2FkZmQsIHN1YmplY3QsIG9i amVjdCwgYWNjZXNzZXMpID4gMCkKCQlwcmludGYoInJcdCVzICVzICVzXG4iLCBzdWJqZWN0 LCBvYmplY3QsIGFjY2Vzc2VzKTsKfQoKaW50Cm1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3Zb XSkKewoJaW50IGk7CglpbnQgcmM7CglpbnQgbG9hZGZkOwoJaW50IHVzZTIgPSAwOwoJY2hh ciBzdWJqZWN0W1NNQUNLX0xBQkVMXTsKCWNoYXIgb2JqZWN0W1NNQUNLX0xBQkVMXTsKCWNo YXIgYWNjZXNzZXNbQVNJWkUrMV07CgljaGFyIHNlbGZbU01BQ0tfTEFCRUxdOwoJY2hhciBp dFtTTUFDS19MQUJFTF07CgljaGFyICp0ZXN0ZmlsZSA9IE5VTEw7CgoJZm9yIChpID0gMTsg aSA8IGFyZ2M7IGkrKykgewoJCWlmIChzdHJjbXAoYXJndltpXSwgIi0yIikgPT0gMCB8fAoJ CSAgICBzdHJjbXAoYXJndltpXSwgIi1sIikgPT0gMCB8fAoJCSAgICBzdHJjbXAoYXJndltp XSwgIi0tbG9uZyIpID09IDAgfHwKCQkgICAgc3RyY21wKGFyZ3ZbaV0sICItLWxvYWQtc2Vs ZjIiKSA9PSAwKQoJCQl1c2UyID0gMTsKCQlpZiAoc3RyY21wKGFyZ3ZbaV0sICItZiIpID09 IDAgfHwKCQkgICAgc3RyY21wKGFyZ3ZbaV0sICItLWZpbGUiKSA9PSAwKQoJCQl0ZXN0Zmls ZSA9IGFyZ3ZbKytpXTsKCX0KCglsb2FkZmQgPSB1c2UyID8gb3BlbmxvYWQyKC0xKSA6IG9w ZW5sb2FkKC0xKTsKCglwcmludGYoImV1aWQgPSVkLCB1aWQgPSAlZFxuIiwgZ2V0ZXVpZCgp LCBnZXR1aWQoKSk7CglwcmludGxpc3QobG9hZGZkLCAiSW5pdGlhbCBsaXN0IiwgdXNlMik7 CgoJbG9hZGZkID0gdXNlMiA/IG9wZW5sb2FkMihsb2FkZmQpIDogb3BlbmxvYWQobG9hZGZk KTsKCXByaW50ZigiV3JpdGluZ1xuIik7CgoJaWYgKHVzZTIpIHsKCQlpZiAod3JpdGVzZWxm Mihsb2FkZmQsIFRJQ0tZLCAiQ3JhY2tsZSIsICJyd3hhLSIpIDwgMCkKCQkJcGVycm9yKCJX cml0aW5nIFwiIiBUSUNLWSAiIENyYWNrbGUgcnd4YS1cIiIpOwoJCWlmICh3cml0ZXNlbGYy KGxvYWRmZCwgVElDS1ksICJDcmFja2xlIiwgInJ3eC0tIikgPCAwKQoJCQlwZXJyb3IoIldy aXRpbmcgXCIiIFRJQ0tZICIgQ3JhY2tsZSByd3gtLVwiIik7CgkJaWYgKHdyaXRlc2VsZjIo bG9hZGZkLCBUSUNLWSwgIlNuYXAiLCAicnd4YXQiKSA8IDApCgkJCXBlcnJvcigiV3JpdGlu ZyBcIiIgVElDS1kgIiBTbmFwIHJ3eGF0XCIiKTsKCQlpZiAod3JpdGVzZWxmMihsb2FkZmQs IFRJQ0tZLCAiQ3JhY2tsZSIsICJyd3gtLSIpIDwgMCkKCQkJcGVycm9yKCJXcml0aW5nIFwi IiBUSUNLWSAiIENyYWNrbGUgcnd4LS1cIiIpOwoJfSBlbHNlIHsKCQlpZiAod3JpdGVzZWxm KGxvYWRmZCwgIlBvcCIsICJDcmFja2xlIiwgInJ3eGEtIikgPCAwKQoJCQlwZXJyb3IoIldy aXRpbmcgXCJQb3AgQ3JhY2tsZSByd3hhLVwiIik7CgkJaWYgKHdyaXRlc2VsZihsb2FkZmQs ICJQb3AiLCAiQ3JhY2tsZSIsICJyd3gtLSIpIDwgMCkKCQkJcGVycm9yKCJXcml0aW5nIFwi UG9wIENyYWNrbGUgcnd4LS1cIiIpOwoJCWlmICh3cml0ZXNlbGYobG9hZGZkLCAiUG9wIiwg IlNuYXAiLCAicnd4YXQiKSA8IDApCgkJCXBlcnJvcigiV3JpdGluZyBcIlBvcCBTbmFwIHJ3 eGF0XCIiKTsKCQlpZiAod3JpdGVzZWxmKGxvYWRmZCwgIlBvcCIsICJDcmFja2xlIiwgInJ3 eC0tIikgPCAwKQoJCQlwZXJyb3IoIldyaXRpbmcgXCJQb3AgQ3JhY2tsZSByd3gtLVwiIik7 Cgl9CgoJcHJpbnRsaXN0KGxvYWRmZCwgIk5ldyBsaXN0IiwgdXNlMik7CgoJaWYgKHRlc3Rm aWxlID09IE5VTEwpCgkJZXhpdCgwKTsKCglzbWFja19zZWxmKHNlbGYpOwoJcmMgPSBzbWFj a19vZl9maWxlKHRlc3RmaWxlLCBpdCk7CglpZiAocmMgPCAwKSB7CgkJcHJpbnRmKCJDYW5u b3QgZ2V0IGxhYmVsIGZvciAlc1xuIiwgdGVzdGZpbGUpOwoJCWV4aXQoMSk7Cgl9CgkKCWlm IChzdHJjbXAoc2VsZiwgaXQpID09IDApIHsKCQlwcmludGYoIkNhbm5vdCBzZXQgYSBydWxl IHdpdGggJXMgYW5kICVzXG4iLCBzZWxmLCBpdCk7CgkJZXhpdCgxKTsKCX0KCglpZiAodXNl MikgewoJCWxvYWRmZCA9IG9wZW5sb2FkMihsb2FkZmQpOwoJCWlmICh3cml0ZXNlbGYyKGxv YWRmZCwgc2VsZiwgaXQsICItLS0tLSIpIDwgMCkKCQkJcGVycm9yKCJXcml0aW5nIFwic2Vs ZiBpdCAtLS0tLVwiIik7Cgl9IGVsc2UgewoJCWxvYWRmZCA9IG9wZW5sb2FkKGxvYWRmZCk7 CgkJaWYgKHdyaXRlc2VsZihsb2FkZmQsIHNlbGYsIGl0LCAiLS0tLS0iKSA8IDApCgkJCXBl cnJvcigiV3JpdGluZyBcInNlbGYgaXQgLS0tLS1cIiIpOwoJfQoKCXByaW50bGlzdChsb2Fk ZmQsICJVcGRhdGVkIGxpc3QiLCB1c2UyKTsKCglyYyA9IHNtYWNrX29mX2ZpbGUodGVzdGZp bGUsIGl0KTsKCWlmIChyYyA+PSAwKSB7CgkJcHJpbnRmKCJVbmV4cGVjdGVkIGFjY2VzcyBm b3IgJXMgYW5kICVzXG4iLCBzZWxmLCBpdCk7Cgl9CgoJaWYgKHVzZTIpIHsKCQlsb2FkZmQg PSBvcGVubG9hZDIobG9hZGZkKTsKCQlpZiAod3JpdGVzZWxmMihsb2FkZmQsIHNlbGYsIGl0 LCAicnd4YXQiKSA8IDApCgkJCXBlcnJvcigiV3JpdGluZyBcInNlbGYgaXQgcnd4YXRcIiIp OwoJfSBlbHNlIHsKCQlsb2FkZmQgPSBvcGVubG9hZChsb2FkZmQpOwoJCWlmICh3cml0ZXNl bGYobG9hZGZkLCBzZWxmLCBpdCwgInJ3eGF0IikgPCAwKQoJCQlwZXJyb3IoIldyaXRpbmcg XCJzZWxmIGl0IHJ3eGF0XCIiKTsKCX0KCglwcmludGxpc3QobG9hZGZkLCAiVXBkYXRlZCBs aXN0IiwgdXNlMik7CgoJcmMgPSBzbWFja19vZl9maWxlKHRlc3RmaWxlLCBpdCk7CglpZiAo cmMgPCAwKSB7CgkJcHJpbnRmKCJVbmV4cGVjdGVkIGZhaWx1cmUgZm9yICVzIGFuZCAlc1xu Iiwgc2VsZiwgaXQpOwoJfQoKCS8qCgkgKiBJbmhlcml0ZW5jZQoJICovCglyYyA9IGZvcmso KTsKCWlmIChyYyA8IDApIHsKCQlwZXJyb3IoIlVuZXhwZWN0ZWQgZm9yayBmYWlsdXJlLiIp OwoJCWV4aXQoMSk7Cgl9IAoJaWYgKHJjID4gMCkgewoJCS8qCgkJICogUGFyZW50LgoJCSAq LwoJCWlmICh1c2UyKSB7CgkJCWxvYWRmZCA9IG9wZW5sb2FkMihsb2FkZmQpOwoJCQlpZiAo d3JpdGVzZWxmMihsb2FkZmQsICJQYXJlbnQiLCAiT25seSIsICJyd3hhdCIpIDwgMCkKCQkJ CXBlcnJvcigiV3JpdGluZyBcInNlbGYgaXQgcnd4YXRcIiIpOwoJCQlpZiAod3JpdGVzZWxm Mihsb2FkZmQsICJQYXJlbnQiLCAiRXhjbHVzaXZlIiwgInJ3eGF0IikgPCAwKQoJCQkJcGVy cm9yKCJXcml0aW5nIFwic2VsZiBpdCByd3hhdFwiIik7CgkJCWlmICh3cml0ZXNlbGYyKGxv YWRmZCwgIlBhcmVudCIsICJOQzE3IiwgInIteC0tIikgPCAwKQoJCQkJcGVycm9yKCJXcml0 aW5nIFwic2VsZiBpdCByd3hhdFwiIik7CgkJfSBlbHNlIHsKCQkJbG9hZGZkID0gb3Blbmxv YWQobG9hZGZkKTsKCQkJaWYgKHdyaXRlc2VsZihsb2FkZmQsICJQYXJlbnQiLCAiT25seSIs ICJyd3hhdCIpIDwgMCkKCQkJCXBlcnJvcigiV3JpdGluZyBcInNlbGYgaXQgcnd4YXRcIiIp OwoJCQlpZiAod3JpdGVzZWxmKGxvYWRmZCwgIlBhcmVudCIsICJFeGNsdXNpdmUiLCAicnd4 YXQiKSA8IDApCgkJCQlwZXJyb3IoIldyaXRpbmcgXCJzZWxmIGl0IHJ3eGF0XCIiKTsKCQkJ aWYgKHdyaXRlc2VsZihsb2FkZmQsICJQYXJlbnQiLCAiTkMxNyIsICJyLXgtLSIpIDwgMCkK CQkJCXBlcnJvcigiV3JpdGluZyBcInNlbGYgaXQgcnd4YXRcIiIpOwoJCX0KCQlyYyA9IHdh aXQoKTsKCQlwcmludGxpc3QobG9hZGZkLCAiUG9zdC1jaGlsZCBwYXJlbnQgbGlzdCIsIHVz ZTIpOwoKCX0gZWxzZSB7CgkJLyoKCQkgKiBDaGlsZC4KCQkgKi8KCQlwcmludGxpc3QobG9h ZGZkLCAiSW5pdGlhbCBjaGlsZCBsaXN0IiwgdXNlMik7CgkJaWYgKHVzZTIpIHsKCQkJbG9h ZGZkID0gb3BlbmxvYWQyKGxvYWRmZCk7CgkJCWlmICh3cml0ZXNlbGYyKGxvYWRmZCwgIkNo aWxkIiwgIk9ubHkiLCAicnd4YXQiKSA8IDApCgkJCQlwZXJyb3IoIldyaXRpbmcgXCJzZWxm IGl0IHJ3eGF0XCIiKTsKCQkJaWYgKHdyaXRlc2VsZjIobG9hZGZkLCAiQ2hpbGQiLCAiT25s eSIsICJyd3hhLSIpIDwgMCkKCQkJCXBlcnJvcigiV3JpdGluZyBcInNlbGYgaXQgcnd4YXRc IiIpOwoJCX0gZWxzZSB7CgkJCWxvYWRmZCA9IG9wZW5sb2FkKGxvYWRmZCk7CgkJCWlmICh3 cml0ZXNlbGYobG9hZGZkLCAiQ2hpbGQiLCAiT25seSIsICJyd3hhdCIpIDwgMCkKCQkJCXBl cnJvcigiV3JpdGluZyBcInNlbGYgaXQgcnd4YXRcIiIpOwoJCQlpZiAod3JpdGVzZWxmKGxv YWRmZCwgIkNoaWxkIiwgIk9ubHkiLCAicnd4YS0iKSA8IDApCgkJCQlwZXJyb3IoIldyaXRp bmcgXCJzZWxmIGl0IHJ3eGF0XCIiKTsKCQl9CgkJcHJpbnRsaXN0KGxvYWRmZCwgIkxhdGVy IGNoaWxkIGxpc3QiLCB1c2UyKTsKCX0KCWV4aXQoMCk7Cn0KAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAdG9vbHMtMjAxMi9NYWtlZmlsZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAw MDA2NDQAMDAwMTc1MAAwMDAxNzUwADAwMDAwMDAyMjU2ADEyNzM1NTYwMjEzADAxNTI3MQAg MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAg AGNzY2hhdWZsZXIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY3NjaGF1ZmxlcgAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjCiMgQ29weXJpZ2h0IChDKSAyMDEy IEludGVsIENvcnBvcmF0aW9uLgojIENvcHlyaWdodCAoQykgMjAxMiBDYXNleSBTY2hhdWZs ZXIgPGNhc2V5QHNjaGF1Zmxlci1jYS5jb20+CiMKIwoKU0NSSVBUUyA9IFwKCXRlc3Rwb2x5 dWRzLnNoCgpQUk9HUkFNUyA9IFwKCW5ld3NtYWNrIFwKCXNtYWNrdWRzaW4gc21hY2t1ZHNv dXQgXAoJc21hY2tpbiBzbWFja291dCBcCglzbWFja3BvbHlwb3J0IHNtYWNrdG9tdXggc21h Y2tlY2hvIFwKCXRlc3RzcGVlZCBcCgl0ZXN0bG9hZHNlbGYgXAoJdGVzdGFjY2VzcyBcCgl0 ZXN0bW1hcAoKZGVmYXVsdDogJChQUk9HUkFNUykKCmNsZWFuOgoJcm0gJChQUk9HUkFNUykK Cm5ld3NtYWNrOiBuZXdzbWFjay5jIHNtYWNrdXNlci5jIHNtYWNrdG9vbHMuaAoJY2MgLW8g bmV3c21hY2sgbmV3c21hY2suYyBzbWFja3VzZXIuYwoKc21hY2t1ZHNpbjogc21hY2t1ZHNp bi5jIHNtYWNrcmVjdm1zZy5jIHNtYWNrdG9vbHMuaAoJY2MgLW8gc21hY2t1ZHNpbiBzbWFj a3Vkc2luLmMgc21hY2tyZWN2bXNnLmMKCnNtYWNrdWRzb3V0OiBzbWFja3Vkc291dC5jIHNt YWNrdG9vbHMuaAoJY2MgLW8gc21hY2t1ZHNvdXQgc21hY2t1ZHNvdXQuYwoKc21hY2tpbjog c21hY2tpbi5jIHNtYWNrcmVjdm1zZy5jIHNtYWNrdG9vbHMuaAoJY2MgLW8gc21hY2tpbiBz bWFja2luLmMgc21hY2tyZWN2bXNnLmMKCnNtYWNrb3V0OiBzbWFja291dC5jIHNtYWNrdG9v bHMuaAoJY2MgLW8gc21hY2tvdXQgc21hY2tvdXQuYwoKc21hY2twb2x5cG9ydDogc21hY2tw b2x5cG9ydC5jIHNtYWNrdG9vbHMuaAoJY2MgLW8gc21hY2twb2x5cG9ydCBzbWFja3BvbHlw b3J0LmMKCnNtYWNrdG9tdXg6IHNtYWNrdG9tdXguYyBzbWFja3Rvb2xzLmgKCWNjIC1vIHNt YWNrdG9tdXggc21hY2t0b211eC5jCgpzbWFja2VjaG86IHNtYWNrZWNoby5jIHNtYWNrdG9v bHMuaAoJY2MgLW8gc21hY2tlY2hvIHNtYWNrZWNoby5jCgp0ZXN0c3BlZWQ6IHRlc3RzcGVl ZC5jCgljYyAtbyB0ZXN0c3BlZWQgdGVzdHNwZWVkLmMKCnRlc3Rsb2Fkc2VsZjogdGVzdGxv YWRzZWxmLmMKCWNjIC1vIHRlc3Rsb2Fkc2VsZiB0ZXN0bG9hZHNlbGYuYwoKdGVzdGFjY2Vz czogdGVzdGFjY2Vzcy5jCgljYyAtbyB0ZXN0YWNjZXNzIHRlc3RhY2Nlc3MuYwoKdGVzdG1t YXA6IHRlc3RtbWFwLmMKCWNjIC1vIHRlc3RtbWFwIHRlc3RtbWFwLmMKAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAB0b29scy0yMDEyL3Rlc3RzcGVlZC5jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDY0 NAAwMDAxNzUwADAwMDE3NTAAMDAwMDAwMTcwMDYAMTI3MzU1NjAyMTMAMDE1Nzc0ACAwAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAY3Nj aGF1ZmxlcgAAAAAAAAAAAAAAAAAAAAAAAAAAAABjc2NoYXVmbGVyAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC8qCiAqIHRlc3RzcGVlZCAtIHByb3ZpZGUg YSByZWxhdGl2ZSBzbWFjayBzcGVlZCBpbXBhY3QgbnVtYmVyCiAqCiAqIENvcHlyaWdodCAo QykgMjAwNyBDYXNleSBTY2hhdWZsZXIgPGNhc2V5QHNjaGF1Zmxlci1jYS5jb20+CiAqIENv cHlyaWdodCAoQykgMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbi4KICoKICogICAgICBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeQogKiAgICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqICAgICAgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgogKgogKglUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CiAqCVdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK ICoJTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiBTZWUgdGhlIEdOVQogKglHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCiAqCiAqCVlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYwogKglMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBu b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqCUZvdW5kYXRpb24sIEluYy4sIDUx IEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQogKgkwMjExMC0xMzAxIFVT QQogKgogKiBBdXRob3JzOgogKiAgICAgIENhc2V5IFNjaGF1ZmxlciA8Y2FzZXlAc2NoYXVm bGVyLWNhLmNvbT4KICovCgojaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiNpbmNsdWRlIDxzeXMv c3RhdC5oPgojaW5jbHVkZSA8c3lzL3RpbWUuaD4KI2luY2x1ZGUgPHVuaXN0ZC5oPgojaW5j bHVkZSA8ZmNudGwuaD4KI2luY2x1ZGUgPGdldG9wdC5oPgojaW5jbHVkZSA8c3RkaW8uaD4K I2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CiNpbmNsdWRlIDxlcnJu by5oPgoKI2RlZmluZSBMTFNJWkUgMjU1CiNkZWZpbmUgTFNJWkUgMjMKI2RlZmluZSBBU0la RSA1CgojZGVmaW5lIFdSSVRFX0xPTkcgKExMU0laRSArIExMU0laRSArIEFTSVpFICsgMikK I2RlZmluZSBXUklURV9ORVcgKExTSVpFICsgTFNJWkUgKyBBU0laRSArIDIpCiNkZWZpbmUg V1JJVEVfT0xEIChXUklURV9ORVcgLSAxKQoKI2RlZmluZSBTUEVFRFMgMjAwCiNkZWZpbmUg V0hFUkUgIi90bXAvc21hY2stc3BlZWQtdGVzdCIKI2RlZmluZSBMRklYICJjb20uc21hY2st bGFib3JpdG9yaWVzLWR1dHktbm93LWZvci10aGUtZnV0dXJlIgoKaW50CndyaXRlbG9hZCh2 b2lkKQp7CglpbnQgbG9hZGZkOwoJY2hhciBydWxlW1dSSVRFX05FVyArIDFdOwoJaW50IHN1 YjsKCWludCBvYmo7CglpbnQgZXJyOwoJaW50IHdyaXRlc2l6ZSA9IFdSSVRFX05FVzsKCgls b2FkZmQgPSBvcGVuKCIvc3lzL2ZzL3NtYWNrZnMvbG9hZCIsIE9fUkRXUik7CglpZiAobG9h ZGZkIDwgMCkKCQlsb2FkZmQgPSBvcGVuKCIvc21hY2svbG9hZCIsIE9fUkRXUik7CglpZiAo bG9hZGZkIDwgMCkgewoJCXBlcnJvcigib3BlbmluZyAvc21hY2svbG9hZCIpOwoJCXJldHVy biAtMTsKCX0KCglmb3IgKHN1YiA9IDE7IHN1YiA8PSBTUEVFRFM7IHN1YisrKSB7CgkJZm9y IChvYmogPSAxOyBvYmogPD0gU1BFRURTOyBvYmorKykgewoJCQlpZiAoc3ViID09IG9iaikK CQkJCWNvbnRpbnVlOwoJCQlpZiAoc3ViID09IG9iaiArIDEpCgkJCQlzcHJpbnRmKHJ1bGUs ICJzcGVlZC0lLTE3ZCBzcGVlZC0lLTE3ZCByd3hhLVxuIiwKCQkJCQlzdWIsIG9iaik7CgkJ CWVsc2UKCQkJCXNwcmludGYocnVsZSwgInNwZWVkLSUtMTdkIHNwZWVkLSUtMTdkIC0tLS0t XG4iLAoJCQkJCXN1Yiwgb2JqKTsKCgkJCWVyciA9IHdyaXRlKGxvYWRmZCwgcnVsZSwgd3Jp dGVzaXplKTsKCQkJaWYgKGVyciA9PSB3cml0ZXNpemUpCgkJCQljb250aW51ZTsKCgkJCWlm IChlcnIgPT0gLTEgJiYgZXJybm8gPT0gRUlOVkFMICYmCgkJCSAgICB3cml0ZXNpemUgPT0g V1JJVEVfTkVXKSB7CgkJCQl3cml0ZXNpemUgPSBXUklURV9PTEQ7CgkJCQllcnIgPSB3cml0 ZShsb2FkZmQsIHJ1bGUsIHdyaXRlc2l6ZSk7CgkJCQlpZiAoZXJyID09IHdyaXRlc2l6ZSkK CQkJCQljb250aW51ZTsKCQkJfQoJCQlwZXJyb3IoIndyaXRpbmcgL3NtYWNrL2xvYWQiKTsK CQkJZXhpdCgxKTsKCQl9Cgl9CgoJY2xvc2UobG9hZGZkKTsKCXJldHVybiAwOwp9CgppbnQK d3JpdGVsb2FkMih2b2lkKQp7CglpbnQgZmQ7CglpbnQgc3ViOwoJaW50IG9iajsKCWludCBl cnI7CglpbnQgd3JpdGVzaXplOwoJY2hhciAqcnVsZTsKCglydWxlID0gbWFsbG9jKFdSSVRF X0xPTkcpOwoJaWYgKHJ1bGUgPT0gTlVMTCkgewoJCXBlcnJvcigiYWxsb2NhdGluZyBidWZm ZXIiKTsKCQlyZXR1cm4gLTE7Cgl9CglmZCA9IG9wZW4oIi9zeXMvZnMvc21hY2tmcy9sb2Fk MiIsIE9fUkRXUik7CglpZiAoZmQgPCAwKQoJCWZkID0gb3BlbigiL3NtYWNrL2xvYWQyIiwg T19SRFdSKTsKCWlmIChmZCA8IDApIHsKCQlwZXJyb3IoIm9wZW5pbmcgL3NtYWNrL2xvYWQy Iik7CgkJcmV0dXJuIC0xOwoJfQoKCWZvciAoc3ViID0gMTsgc3ViIDw9IFNQRUVEUzsgc3Vi KyspIHsKCQlmb3IgKG9iaiA9IDE7IG9iaiA8PSBTUEVFRFM7IG9iaisrKSB7CgkJCWlmIChz dWIgPT0gb2JqKQoJCQkJY29udGludWU7CgkJCWlmIChzdWIgPT0gb2JqICsgMSkKCQkJCXNw cmludGYocnVsZSwgTEZJWCAiLSVkICIgTEZJWCAiLSVkIHJ3eGEtXG4iLAoJCQkJCXN1Yiwg b2JqKTsKCQkJZWxzZQoJCQkJc3ByaW50ZihydWxlLCBMRklYICItJWQgIiBMRklYICItJWQg LS0tLS1cbiIsCgkJCQkJc3ViLCBvYmopOwoKCQkJd3JpdGVzaXplID0gc3RybGVuKHJ1bGUp OwoJCQllcnIgPSB3cml0ZShmZCwgcnVsZSwgd3JpdGVzaXplKTsKCQkJaWYgKGVyciAhPSB3 cml0ZXNpemUpIHsKCQkJCXBlcnJvcigid3JpdGluZyAvc21hY2svbG9hZDIiKTsKCQkJCWV4 aXQoMSk7CgkJCX0KCQl9Cgl9CgoJY2xvc2UoZmQpOwoJcmV0dXJuIDA7Cn0KCmludAptYWlu KGludCBhcmdjLCBjaGFyICphcmd2W10pCnsKCXN0cnVjdCB0aW1ldmFsIHN0YXJ0X3RpbWU7 CglzdHJ1Y3QgdGltZXZhbCBlbmRfdGltZTsKCXN0cnVjdCBzdGF0IGJ1ZjsKCWNoYXIgcnVu bGFiZWxbMjU2XTsKCWNoYXIgbGFiZWxbMjU2XTsKCWNoYXIgcGF0aFsyNTZdOwoJY2hhciAq Y3A7CglpbnQgc3ViOwoJaW50IG9iajsKCWludCBjZmQ7CglpbnQgcmM7CglpbnQgaTsKCglj ZmQgPSBvcGVuKCIvcHJvYy9zZWxmL2F0dHIvc21hY2svY3VycmVudCIsIE9fUkRXUik7Cglp ZiAoY2ZkIDwgMCkKCQljZmQgPSBvcGVuKCIvcHJvYy9zZWxmL2F0dHIvc21hY2suY3VycmVu dCIsIE9fUkRXUik7CglpZiAoY2ZkIDwgMCkKCQljZmQgPSBvcGVuKCIvcHJvYy9zZWxmL2F0 dHIvY3VycmVudCIsIE9fUkRXUik7CglpZiAoY2ZkIDwgMCkKCQlwZXJyb3IoIlByZXBhcmlu ZyB0byByZWFkIFNtYWNrIGxhYmVsIik7CglyYyA9IHJlYWQoY2ZkLCBydW5sYWJlbCwgc2l6 ZW9mKHJ1bmxhYmVsKSk7CglydW5sYWJlbFtyY10gPSAnXDAnOwoJaWYgKChjcCA9IHN0cmNo cihydW5sYWJlbCwgJ1xuJykpICE9IE5VTEwpCgkJKmNwID0gJ1wwJzsKCWNsb3NlKGNmZCk7 CgoJY2ZkID0gb3BlbigiL3Byb2Mvc2VsZi9hdHRyL3NtYWNrL2N1cnJlbnQiLCBPX1JEV1Ip OwoJaWYgKGNmZCA8IDApCgkJY2ZkID0gb3BlbigiL3Byb2Mvc2VsZi9hdHRyL3NtYWNrLmN1 cnJlbnQiLCBPX1JEV1IpOwoJaWYgKGNmZCA8IDApCgkJY2ZkID0gb3BlbigiL3Byb2Mvc2Vs Zi9hdHRyL2N1cnJlbnQiLCBPX1JEV1IpOwoJaWYgKGNmZCA8IDApCgkJcGVycm9yKCJQcmVw YXJpbmcgdG8gc2V0IFNtYWNrIGxhYmVscyIpOwoKCWlmICh3cml0ZWxvYWQoKSA9PSAtMSkK CQlleGl0KDEpOwoKCXN5c3RlbSgiL2Jpbi9ybSAtcmYgIiBXSEVSRSk7CgoJaWYgKG1rZGly KFdIRVJFLCAwNzc3KSA8IDApIHsKCQlwZXJyb3IoIm1rZGlyIG9mICIgV0hFUkUpOwoJCWV4 aXQoMSk7Cgl9CgoJZm9yIChvYmogPSAxOyBvYmogPD0gU1BFRURTOyBvYmorKykgewoJCXNw cmludGYobGFiZWwsICJzcGVlZC0lZCIsIG9iaik7CgkJc3ByaW50ZihwYXRoLCAiJXMvc3Bl ZWQtJWQiLCBXSEVSRSwgb2JqKTsKCQlpZiAobWtkaXIocGF0aCwgMDc3NykgPCAwKSB7CgkJ CXBlcnJvcihwYXRoKTsKCQkJZXhpdCgxKTsKCQl9CgkJaWYgKHNldHhhdHRyKHBhdGgsICJz ZWN1cml0eS5TTUFDSzY0IiwgbGFiZWwsIHN0cmxlbihsYWJlbCksIDApCgkJICAgIDwgMCkg ewoJCQlwZXJyb3IocGF0aCk7CgkJCWV4aXQoMSk7CgkJfQoJfQoKCWdldHRpbWVvZmRheSgm c3RhcnRfdGltZSwgTlVMTCk7CgoJZm9yIChzdWIgPSAxOyBzdWIgPD0gU1BFRURTOyBzdWIr KykgewoJCXNwcmludGYocGF0aCwgInNwZWVkLSVkIiwgc3ViKTsKCQlpZiAod3JpdGUoY2Zk LCBwYXRoLCBzdHJsZW4ocGF0aCkgKyAxKSA8IDApCgkJCXBlcnJvcigiU2V0dGluZyBwcm9j ZXNzIFNtYWNrIik7CgkJaWYgKHNldGV1aWQoOTkpIDwgMCkgewoJCQlwZXJyb3IoInNldGV1 aWQoOTkpIik7CgkJCWV4aXQoMSk7CgkJfQoJCWZvciAob2JqID0gMTsgb2JqIDw9IFNQRUVE Uzsgb2JqKyspIHsKCQkJc3ByaW50ZihwYXRoLCAiJXMvc3BlZWQtJWQiLCBXSEVSRSwgb2Jq KTsKCQkJcmMgPSBzdGF0KHBhdGgsICZidWYpOwoJCQlpZiAoc3ViID09IG9iaiAmJiByYyA8 IDApCgkJCQlmcHJpbnRmKHN0ZGVyciwKCQkJCQkiVW5leHBlY3RlZCBmYWlsdXJlIGZvciAl ZCAlZFxuIiwKCQkJCQlzdWIsIG9iaik7CgkJCWVsc2UgaWYgKHN1YiA9PSBvYmogKyAxKSB7 CgkJCQlpZiAocmMgPCAwKQoJCQkJCWZwcmludGYoc3RkZXJyLAoJCQkJCSAgICAiVW5leHBl Y3RlZCBmYWlsdXJlIGZvciAlZCAlZFxuIiwKCQkJCQkgICAgc3ViLCBvYmopOwoJCQl9CgkJ CWVsc2UgaWYgKHN1YiAhPSBvYmogJiYgcmMgPj0gMCkKCQkJCWZwcmludGYoc3RkZXJyLAoJ CQkJCSJVbmV4cGVjdGVkIHN1Y2Nlc3MgZm9yICVkICVkXG4iLAoJCQkJCXN1Yiwgb2JqKTsK CQkJLyoKCQkJICogZWxzZQoJCQkgKiAJZnByaW50ZihzdGRlcnIsCgkJCSAqIAkJIkV4cGVj dGVkIHJlc3VsdCBmb3IgJWQgJWRcbiIsCgkJCSAqIAkJc3ViLCBvYmopOwoJCQkgKi8gCgkJ fQoJCWlmIChzZXRldWlkKDApIDwgMCkgewoJCQlwZXJyb3IoInNldGV1aWQoMCkiKTsKCQkJ ZXhpdCgxKTsKCQl9Cgl9CgoJZ2V0dGltZW9mZGF5KCZlbmRfdGltZSwgTlVMTCk7CgoJaWYg KHN0YXJ0X3RpbWUudHZfdXNlYyA+IGVuZF90aW1lLnR2X3VzZWMpIHsKCQllbmRfdGltZS50 dl91c2VjICs9IDEwMDAwMDA7CgkJZW5kX3RpbWUudHZfc2VjIC09IDE7Cgl9CglwcmludGYo IiVzOiBzaG9ydCBsYWJlbCBzcGVlZCBmYWN0b3IgJWQgJWQuJTA2ZCBzZWNvbmRzXG4iLAoJ CWFyZ3ZbMF0sIFNQRUVEUywKCQkoaW50KWVuZF90aW1lLnR2X3NlYyAtIChpbnQpc3RhcnRf dGltZS50dl9zZWMsCgkJKGludCllbmRfdGltZS50dl91c2VjIC0gKGludClzdGFydF90aW1l LnR2X3VzZWMpOwoKCXNldGV1aWQoMCk7Cgl3cml0ZShjZmQsIHJ1bmxhYmVsLCBzdHJsZW4o cnVubGFiZWwpICsgMSk7CglpZiAod3JpdGVsb2FkMigpID09IC0xKQoJCWV4aXQoMSk7CgoJ c3lzdGVtKCIvYmluL3JtIC1yZiAiIFdIRVJFKTsKCWlmIChta2RpcihXSEVSRSwgMDc3Nykg PCAwKSB7CgkJcGVycm9yKCJta2RpciBvZiAiIFdIRVJFKTsKCQlleGl0KDEpOwoJfQoKCWZv ciAob2JqID0gMTsgb2JqIDw9IFNQRUVEUzsgb2JqKyspIHsKCQlzcHJpbnRmKGxhYmVsLCBM RklYICItJWQiLCBvYmopOwoJCXNwcmludGYocGF0aCwgIiVzL3NwZWVkLSVkIiwgV0hFUkUs IG9iaik7CgkJaWYgKG1rZGlyKHBhdGgsIDA3NzcpIDwgMCkgewoJCQlwZXJyb3IocGF0aCk7 CgkJCWV4aXQoMSk7CgkJfQoJCWlmIChzZXR4YXR0cihwYXRoLCAic2VjdXJpdHkuU01BQ0s2 NCIsIGxhYmVsLCBzdHJsZW4obGFiZWwpLCAwKQoJCSAgICA8IDApIHsKCQkJcGVycm9yKHBh dGgpOwoJCQlleGl0KDEpOwoJCX0KCX0KCglnZXR0aW1lb2ZkYXkoJnN0YXJ0X3RpbWUsIE5V TEwpOwoKCWZvciAoc3ViID0gMTsgc3ViIDw9IFNQRUVEUzsgc3ViKyspIHsKCQlzcHJpbnRm KHBhdGgsIExGSVggIi0lZCIsIHN1Yik7CgkJaWYgKHdyaXRlKGNmZCwgcGF0aCwgc3RybGVu KHBhdGgpKSA8IDApCgkJCXBlcnJvcigiU2V0dGluZyBwcm9jZXNzIFNtYWNrIik7CgoJCWlm IChzZXRldWlkKDk5KSA8IDApIHsKCQkJcGVycm9yKCJzZXRldWlkKDk5KSIpOwoJCQlleGl0 KDEpOwoJCX0KCQlmb3IgKG9iaiA9IDE7IG9iaiA8PSBTUEVFRFM7IG9iaisrKSB7CgkJCXNw cmludGYocGF0aCwgIiVzL3NwZWVkLSVkIiwgV0hFUkUsIG9iaik7CgkJCXJjID0gc3RhdChw YXRoLCAmYnVmKTsKCQkJaWYgKHN1YiA9PSBvYmogJiYgcmMgPCAwKSB7CgkJCQlzZXRldWlk KDApOwoJCQkJaSA9IGxnZXR4YXR0cihwYXRoLCAic2VjdXJpdHkuU01BQ0s2NCIsCgkJCQkJ CWxhYmVsLCBzaXplb2YobGFiZWwpKTsKCQkJCXNldGV1aWQoOTkpOwoJCQkJaWYgKGkgPj0g MCkKCQkJCQlsYWJlbFtpXSA9ICdcMCc7CgkJCQllbHNlCgkJCQkJbGFiZWxbMF0gPSAnXDAn OwoJCQkJZnByaW50ZihzdGRlcnIsCgkJCQkJIlVuZXhwZWN0ZWQgZmFpbHVyZSBmb3IgJWQg JWQgKCVzKVxuIiwKCQkJCQlzdWIsIG9iaiwgbGFiZWwpOwoJCQl9CgkJCWVsc2UgaWYgKHN1 YiA9PSBvYmogKyAxKSB7CgkJCQlzZXRldWlkKDApOwoJCQkJaSA9IGxnZXR4YXR0cihwYXRo LCAic2VjdXJpdHkuU01BQ0s2NCIsCgkJCQkJCWxhYmVsLCBzaXplb2YobGFiZWwpKTsKCQkJ CXNldGV1aWQoOTkpOwoJCQkJaWYgKGkgPj0gMCkKCQkJCQlsYWJlbFtpXSA9ICdcMCc7CgkJ CQllbHNlCgkJCQkJbGFiZWxbMF0gPSAnXDAnOwoJCQkJaWYgKHJjIDwgMCkKCQkJCQlmcHJp bnRmKHN0ZGVyciwKCQkJCQkJIlVuZXhwZWN0ZWQgZmFpbHVyZSBmb3IgIgoJCQkJCQkiJWQg JWQgKCVzKVxuIiwKCQkJCQkJc3ViLCBvYmosIGxhYmVsKTsKCQkJfQoJCQllbHNlIGlmIChz dWIgIT0gb2JqICYmIHJjID49IDApCgkJCQlmcHJpbnRmKHN0ZGVyciwKCQkJCQkiVW5leHBl Y3RlZCBzdWNjZXNzIGZvciAlZCAlZFxuIiwKCQkJCQlzdWIsIG9iaik7CgkJfQoJCWlmIChz ZXRldWlkKDApIDwgMCkgewoJCQlwZXJyb3IoInNldGV1aWQoMCkiKTsKCQkJZXhpdCgxKTsK CQl9Cgl9CgoJZ2V0dGltZW9mZGF5KCZlbmRfdGltZSwgTlVMTCk7CgoJaWYgKHN0YXJ0X3Rp bWUudHZfdXNlYyA+IGVuZF90aW1lLnR2X3VzZWMpIHsKCQllbmRfdGltZS50dl91c2VjICs9 IDEwMDAwMDA7CgkJZW5kX3RpbWUudHZfc2VjIC09IDE7Cgl9CglwcmludGYoIiVzOiBsb25n IGxhYmVsIHNwZWVkIGZhY3RvciAlZCAlZC4lMDZkIHNlY29uZHNcbiIsCgkJYXJndlswXSwg U1BFRURTLAoJCShpbnQpZW5kX3RpbWUudHZfc2VjIC0gKGludClzdGFydF90aW1lLnR2X3Nl YywKCQkoaW50KWVuZF90aW1lLnR2X3VzZWMgLSAoaW50KXN0YXJ0X3RpbWUudHZfdXNlYyk7 CgoJc3lzdGVtKCIvYmluL3JtIC1yZiAiIFdIRVJFKTsKCglleGl0KDApOwp9CgAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAdG9vbHMtMjAxMi9zbWFja2luLmMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAADAwMDA2NDQAMDAwMTc1MAAwMDAxNzUwADAwMDAwMDA2MDcxADEyNzM1NTYwMjEyADAx NTQyMAAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1 c3RhciAgAGNzY2hhdWZsZXIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY3NjaGF1ZmxlcgAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvKgogKiBDb3B5cmlnaHQg KEMpIDIwMTIgQ2FzZXkgU2NoYXVmbGVyIDxjYXNleUBzY2hhdWZsZXItY2EuY29tPgogKiBD b3B5cmlnaHQgKEMpIEludGVsIENvcnBvcmF0aW9uLgogKi8KCiNpbmNsdWRlIDxzdGRpby5o PgojaW5jbHVkZSA8c3RkbGliLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPHVu aXN0ZC5oPgoKI2luY2x1ZGUgPHN5cy90eXBlcy5oPgojaW5jbHVkZSA8c3lzL3N0YXQuaD4K I2luY2x1ZGUgPGZjbnRsLmg+CgojaW5jbHVkZSA8c3lzL3NvY2tldC5oPgojaW5jbHVkZSA8 bmV0aW5ldC9pbi5oPgojaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CiNpbmNsdWRlIDxsaW51eC9p cC5oPgojaW5jbHVkZSA8bGludXgvdWRwLmg+CiNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+ CiNpbmNsdWRlIDxsaW51eC94YXR0ci5oPgoKI2luY2x1ZGUgInNtYWNrdG9vbHMuaCIKCiNk ZWZpbmUgQlVGRkVSX1NJWkUgNTAwCgojZGVmaW5lIExPQ0FMX1BPUlQJNzAwMAoKaW50Cm1h aW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKewoJaW50IHNvY2s7CglzdHJ1Y3Qgc29ja2Fk ZHJfaW4gc2luOwoJdW5zaWduZWQgc2hvcnQgbG9jYWxfcG9ydCA9IExPQ0FMX1BPUlQ7Cglz dHJ1Y3QgaXBoZHIgKmlwX2hlYWRlcjsKCXN0cnVjdCB1ZHBoZHIgKnVkcF9oZWFkZXI7Cglp bnQgdG1wOwoJaW50IGxlbjsKCWludCBpOwoJaW50IG9hZGQ7Cgl1bnNpZ25lZCBjaGFyICpv YXAgPSAodW5zaWduZWQgY2hhciAqKSZvYWRkOwoJY2hhciBwZWVyW1NNQUNLX0xBQkVMXTsK CWNoYXIgY3BlZXJbU01BQ0tfTEFCRUxdOwoJY2hhciBycGVlcltTTUFDS19MQUJFTF07Cglj aGFyIGNhbGxub1tTTUFDS19MQUJFTF07CgljaGFyIGZyb21bU01BQ0tfTEFCRUxdOwoJY2hh ciAqaXBpbiA9IE5VTEw7CglpbnQgcXVpZXQgPSAwOwoJaW50IHNwZWNpYWw7CglpbnQgcmln aHQgPSAxOwoJaW50IGlzb25lID0gMTsKCWNoYXIgYnVmZmVyW0JVRkZFUl9TSVpFXTsKCWNo YXIgY29udHJvbFtCVUZGRVJfU0laRV07CglzdHJ1Y3QgaW92ZWMgaW92ID0geyBidWZmZXIs IHNpemVvZihidWZmZXIpIH07CglzdHJ1Y3QgbXNnaGRyIG1lc3NhZ2UgPSB7CgkJKHZvaWQq KSZzaW4sIHNpemVvZihzaW4pLCAmaW92LCAxLCBjb250cm9sLCBCVUZGRVJfU0laRSwgMAoJ fTsKCglmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CgkJaWYgKHN0cmNtcChhcmd2W2ld LCAiLWkiKSA9PSAwIHx8CgkJICAgIHN0cmNtcChhcmd2W2ldLCAiLS1pcGluIikgPT0gMCkK CQkJaXBpbiA9IGFyZ3ZbKytpXTsKCQlpZiAoc3RyY21wKGFyZ3ZbaV0sICItcCIpID09IDAg fHwKCQkgICAgc3RyY21wKGFyZ3ZbaV0sICItLXBvcnQiKSA9PSAwKQoJCQlsb2NhbF9wb3J0 ID0gYXRvaShhcmd2WysraV0pOwoJCWlmIChzdHJjbXAoYXJndltpXSwgIi1xIikgPT0gMCB8 fAoJCSAgICBzdHJjbXAoYXJndltpXSwgIi0tcXVpZXQiKSA9PSAwKQoJCQlxdWlldCA9IDE7 Cgl9CgoJaWYgKChzb2NrID0gc29ja2V0KFBGX0lORVQsIFNPQ0tfREdSQU0sIElQUFJPVE9f VURQKSkgPCAwKSB7IAoJCXBlcnJvcigic29ja2V0Iik7CgkJZXhpdCgxKTsKCX0KCgliemVy bygoY2hhciAqKSZzaW4sIHNpemVvZihzaW4pKTsKCXNpbi5zaW5fZmFtaWx5ID0gQUZfSU5F VDsKCXNpbi5zaW5fcG9ydCA9IGh0b25zKGxvY2FsX3BvcnQpOwoKCWlmIChiaW5kKHNvY2ss IChzdHJ1Y3Qgc29ja2FkZHIgKikmIHNpbiwgc2l6ZW9mKHNpbikpIDwgMCkgewoJCXBlcnJv cigiYmluZCIpOwoJCWV4aXQoMSk7Cgl9CgogICAgICAgIGlmIChzZXRzb2Nrb3B0KHNvY2ss IFNPTF9JUCwgSVBfUEFTU1NFQywgJmlzb25lLCBzaXplb2YoaXNvbmUpKSA8IDApIHsKCQlw ZXJyb3IoInNldHNvY2tvcHQgSVBfUEFTU0VDIik7CgkJZXhpdCgxKTsKCX0KICAKCWlmIChp cGluICE9IE5VTEwpIHsKCQl0bXAgPSBmc2V0eGF0dHIoc29jaywgInNlY3VyaXR5LlNNQUNL NjRJUElOIiwKCQkJCWlwaW4sIHN0cmxlbihpcGluKSsxLCAwKTsKCQlpZiAodG1wIDwgMCkK CQkJcGVycm9yKCJmc2V0eGF0dHIiKTsKCQllbHNlCgkJCXByaW50Zigic2VjdXJpdHkuU01B Q0s2NElQSU4gc2V0ID0gJWRcbiIsIHRtcCk7Cgl9CgoJd2hpbGUgKCAxICkgewoJCWxlbiA9 IHNpemVvZihzaW4pOwoJCWJ6ZXJvKChjaGFyICopJnNpbiwgc2l6ZW9mKHNpbikpOwoJCWJ6 ZXJvKGJ1ZmZlciwgQlVGRkVSX1NJWkUpOwoJCWJ6ZXJvKGNvbnRyb2wsIEJVRkZFUl9TSVpF KTsKCQlzcGVjaWFsID0gMDsKCgkJbWVzc2FnZS5tc2dfbmFtZWxlbiA9IHNpemVvZihzaW4p OwoJCW1lc3NhZ2UubXNnX2NvbnRyb2xsZW4gPSBCVUZGRVJfU0laRTsKCgkJc3RyY3B5KHBl ZXIsICJVTkFWQUlMQUJMRSIpOwoJCWkgPSBzbWFja3JlY3Ztc2coc29jaywgJm1lc3NhZ2Us IDAsIHBlZXIsIHNpemVvZihwZWVyKSk7CgkJaWYgKGkgPCAwKQoJCQlmcHJpbnRmKHN0ZGVy ciwgIiVzOiVkIHNtYWNrcmVjdm1zZyBmYWlsZWRcbiIsCgkJCQlfX2Z1bmNfXywgX19MSU5F X18pOwoJCWkgPSBzbWFja19nZXRfcGVlcihzb2NrLCBjcGVlciwgcnBlZXIpOwoJCWlmIChp IDwgMCkgewoJCQlzdHJjcHkoY3BlZXIsICI8PiIpOwoJCQlzdHJjcHkocnBlZXIsICI8PiIp OwoJCX0KCgkJaSA9IHN0cmxlbihwZWVyKTsKCQlpZiAoc3RybmNtcChidWZmZXIsIHBlZXIs IGkpICE9IDApCgkJCXNwZWNpYWwgPSAxOwoJCWVsc2UgaWYgKGJ1ZmZlcltpXSAhPSAnICcg JiYgYnVmZmVyW2ldICE9ICdcMCcpCgkJCXNwZWNpYWwgPSAxOwoKCQlpZiAocXVpZXQgPT0g MCB8fCBzcGVjaWFsICE9IDApIHsKCQkJb2FkZCA9IHNpbi5zaW5fYWRkci5zX2FkZHI7CgkJ CXByaW50ZigiRnJvbSAldS4ldS4ldS4ldSBwb3J0ICVkICVkIFwiJXNcIiAiCgkJCSAgICAg ICAicGVlciA9IFwiJXNcIiAoXCIlc1wiIFwiJXNcIikiCgkJCSAgICAgICAicmlnaHQgJWRc biIsCgkJCQlvYXBbMF0sIG9hcFsxXSwgb2FwWzJdLCBvYXBbM10sCgkJCQludG9ocyhzaW4u c2luX3BvcnQpLCBpLCBidWZmZXIsIHBlZXIsCgkJCQljcGVlciwgcnBlZXIsIHJpZ2h0KTsK CQl9CgkJaWYgKHNwZWNpYWwgIT0gMCkKCQkJcmlnaHQgPSAwOwoJCWVsc2UKCQkJcmlnaHQr KzsKCX0KCgljbG9zZShzb2NrKTsKCglyZXR1cm4gMDsKfQoAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAHRvb2xzLTIwMTIvc21hY2t0b211eC5jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAw NjQ0ADAwMDE3NTAAMDAwMTc1MAAwMDAwMDAwNTIyMgAxMjczNTU2MDIxMwAwMTYxNjQAIDAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIgIABj c2NoYXVmbGVyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGNzY2hhdWZsZXIAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALyoKICogQ29weXJpZ2h0IChDKSAyMDEy IENhc2V5IFNjaGF1ZmxlciA8Y2FzZXlAc2NoYXVmbGVyLWNhLmNvbT4KICogQ29weXJpZ2h0 IChDKSBJbnRlbCBDb3Jwb3JhdGlvbi4KICovCgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1 ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CiNpbmNsdWRlIDx1bmlzdGQuaD4K I2luY2x1ZGUgPHN5cy90eXBlcy5oPgojaW5jbHVkZSA8c3lzL3N0YXQuaD4KI2luY2x1ZGUg PGZjbnRsLmg+CiNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CiNpbmNsdWRlIDxuZXRpbmV0L2lu Lmg+CiNpbmNsdWRlIDxhcnBhL2luZXQuaD4KI2luY2x1ZGUgPGxpbnV4L2lwLmg+CiNpbmNs dWRlIDxsaW51eC91ZHAuaD4KI2luY2x1ZGUgInNtYWNrdG9vbHMuaCIKCiNkZWZpbmUgQlVG RkVSX1NJWkUgMTUwMAojZGVmaW5lIFJCUyAoQlVGRkVSX1NJWkUgLSAoKHNpemVvZiAoc3Ry dWN0IGlwaGRyKSArIHNpemVvZiAoc3RydWN0IHVkcGhkcikpKSkKCiNkZWZpbmUgTE9DQUxf UE9SVAk4MDAxCiNkZWZpbmUgUkVNT1RFX1BPUlQJODAwMAoKaW50Cm1haW4oaW50IGFyZ2Ms IGNoYXIgKmFyZ3ZbXSkKewoJaW50IHNvY2s7CglzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luOwoJ dW5zaWduZWQgc2hvcnQgbG9jYWxfcG9ydCA9IExPQ0FMX1BPUlQ7Cgl1bnNpZ25lZCBzaG9y dCByZW1vdGVfcG9ydCA9IFJFTU9URV9QT1JUOwoJY2hhciBidWZmZXJbQlVGRkVSX1NJWkVd OwoJY2hhciByYnVmZmVyW0JVRkZFUl9TSVpFXTsKCWNoYXIgKnJlbW90ZV9pcF9zdHIgPSBU SElTX0hPU1Q7CgljaGFyICpjcDsKCWludCBpOwoJaW50IHJlcGx5ID0gMDsKCWludCBuYXAg PSAxOwoJaW50IGNvdW50ID0gMDsKCWludCBudW1iZXIgPSAtMTsKCglmb3IgKGkgPSAxOyBp IDwgYXJnYzsgaSsrKSB7CgkJaWYgKHN0cmNtcChhcmd2W2ldLCAiLWMiKSA9PSAwIHx8CgkJ ICAgIHN0cmNtcChhcmd2W2ldLCAiLS1jb3VudCIpID09IDApCgkJCWNvdW50ID0gMTsKCQll bHNlIGlmIChzdHJjbXAoYXJndltpXSwgIi1oIikgPT0gMCB8fAoJCSAgICBzdHJjbXAoYXJn dltpXSwgIi0taG9zdCIpID09IDApCgkJCXJlbW90ZV9pcF9zdHIgPSBhcmd2WysraV07CgkJ ZWxzZSBpZiAoc3RyY21wKGFyZ3ZbaV0sICItcCIpID09IDAgfHwKCQkJIHN0cmNtcChhcmd2 W2ldLCAiLS1wb3J0IikgPT0gMCkKCQkJcmVtb3RlX3BvcnQgPSBhdG9pKGFyZ3ZbKytpXSk7 CgkJZWxzZSBpZiAoc3RyY21wKGFyZ3ZbaV0sICItcyIpID09IDAgfHwKCQkJIHN0cmNtcChh cmd2W2ldLCAiLS1zbGVlcCIpID09IDApCgkJCW5hcCA9IGF0b2koYXJndlsrK2ldKTsKCQll bHNlIGlmIChzdHJjbXAoYXJndltpXSwgIi1uIikgPT0gMCB8fAoJCQkgc3RyY21wKGFyZ3Zb aV0sICItLW51bWJlciIpID09IDApCgkJCW51bWJlciA9IGF0b2koYXJndlsrK2ldKTsKCQll bHNlIGlmIChzdHJjbXAoYXJndltpXSwgIi1yIikgPT0gMCB8fAoJCSAgICBzdHJjbXAoYXJn dltpXSwgIi0tcmVwbHkiKSA9PSAwKSB7CgkJCXJlcGx5ID0gMTsKCQl9CgkJZWxzZQoJCQlm cHJpbnRmKHN0ZGVyciwgImFyZyBcIiVzXCIgaWdub3JlZFxuIiwgYXJndltpXSk7Cgl9Cgkg CglpZiAoKHNvY2sgPSBzb2NrZXQoUEZfSU5FVCwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQ KSkgPCAwKSB7IAoJCXBlcnJvcigic29ja2V0Iik7CgkJZXhpdCgxKTsKCX0KCgliemVybygo Y2hhciAqKSZzaW4sIHNpemVvZihzaW4pKTsKCXNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsK CXNpbi5zaW5fcG9ydCA9IGh0b25zKGxvY2FsX3BvcnQpOwoKCWZvciAoaSA9IDA7IGkgPCAx MDAwOyBpKyspIHsKCQlpZiAoKGJpbmQoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW4s IHNpemVvZihzaW4pKSkgPj0gMCkKCQkJYnJlYWs7CgkJc2luLnNpbl9wb3J0ID0gaHRvbnMo bG9jYWxfcG9ydCsrKTsKCX0KCglpZiAoaSA+PSAxMDAwKSB7CgkJZnByaW50ZihzdGRlcnIs ICJmYWlsZWQgMTAwMCBiaW5kc1xuIik7CgkJZXhpdCgxKTsKCX0KCgliemVybygoY2hhciAq KSZzaW4sIHNpemVvZihzaW4pKTsKCXNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKCXNpbi5z aW5fcG9ydCA9IGh0b25zKHJlbW90ZV9wb3J0KTsKCXNpbi5zaW5fYWRkci5zX2FkZHIgPSBp bmV0X2FkZHIocmVtb3RlX2lwX3N0cik7CgoJaWYgKGNvbm5lY3Qoc29jaywgKHN0cnVjdCBz b2NrYWRkciAqKSZzaW4sIHNpemVvZihzaW4pKSA8IDApIHsKCQlwZXJyb3IoImNvbm5lY3Qi KTsKCQlleGl0KDEpOwoJfQogIAoJaWYgKChpID0gc21hY2tfc2VsZihidWZmZXIpKSA8IDAp IHsKCQlmcHJpbnRmKHN0ZGVyciwgIkNhbm5vdCByZWFkIHByb2Nlc3MgU21hY2sgbGFiZWwu XG4iKTsKCQlleGl0KDEpOwoJfQoJY3AgPSBidWZmZXIgKyBpOwoKCWZvciAoOyBudW1iZXIg IT0gMDsgbnVtYmVyLS0pIHsKCQlpZiAoY291bnQgIT0gMCkKCQkJc3ByaW50ZihjcCwgIiAl ZCIsIGNvdW50KyspOwoJCWlmIChzZW5kKHNvY2ssIGJ1ZmZlciwgc3RybGVuKGJ1ZmZlcikg KyAxLCAwKSA8IDApCgkJCXBlcnJvcigic2VuZCIpOwoJCWlmIChyZXBseSAhPSAwKSB7CgkJ CWkgPSByZWFkKHNvY2ssIHJidWZmZXIsIFJCUyk7CgkJCXByaW50ZigiUmVwbHk6IFwiJXNc IiwgJWRcbiIsIHJidWZmZXIsIGkpOwoJCX0KCgkJaWYgKG5hcCA+IDApCgkJCXNsZWVwKG5h cCk7Cgl9CgoJY2xvc2Uoc29jayk7CgoJcmV0dXJuIDA7Cn0KAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdG9vbHMtMjAxMi9zbWFja291dC5jAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAADAwMDA2NDQAMDAwMTc1MAAwMDAxNzUwADAwMDAwMDA1NTAyADEy NzM1NTYwMjEzADAxNTYyMAAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAB1c3RhciAgAGNzY2hhdWZsZXIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY3Nj aGF1ZmxlcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvKgog KiBDb3B5cmlnaHQgKEMpIDIwMTIgQ2FzZXkgU2NoYXVmbGVyIDxjYXNleUBzY2hhdWZsZXIt Y2EuY29tPgogKiBDb3B5cmlnaHQgKEMpIEludGVsIENvcnBvcmF0aW9uLgogKi8KCiNpbmNs dWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3RkbGliLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4K I2luY2x1ZGUgPHVuaXN0ZC5oPgoKI2luY2x1ZGUgPHN5cy90eXBlcy5oPgojaW5jbHVkZSA8 c3lzL3N0YXQuaD4KI2luY2x1ZGUgPGZjbnRsLmg+CgojaW5jbHVkZSA8c3lzL3NvY2tldC5o PgojaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgojaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CiNpbmNs dWRlIDxsaW51eC9pcC5oPgojaW5jbHVkZSA8bGludXgvdWRwLmg+CgojaW5jbHVkZSAic21h Y2t0b29scy5oIgoKI2RlZmluZSBMT0NBTF9QT1JUCTcwMDEKI2RlZmluZSBSRU1PVEVfUE9S VAk3MDAwCgppbnQKbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQp7CglpbnQgc29jazsK CXN0cnVjdCBzb2NrYWRkcl9pbiBzaW47Cgl1bnNpZ25lZCBzaG9ydCBsb2NhbF9wb3J0ID0g TE9DQUxfUE9SVDsKCXVuc2lnbmVkIHNob3J0IHJlbW90ZV9wb3J0ID0gUkVNT1RFX1BPUlQ7 CgljaGFyIGJ1ZmZlcls1MDBdOwoJY2hhciAqcmVtb3RlX2lwX3N0ciA9IFRISVNfSE9TVDsK CWNoYXIgKmNwOwoJY2hhciAqb3V0bGFiZWxzWzIwXTsKCWNoYXIgcGxhYmVsW1NNQUNLX0xB QkVMXTsKCWludCBpOwoJaW50IG9sbjsKCWludCBuYXAgPSAxOwoJaW50IGNvdW50ID0gMDsK CWludCBudW1iZXIgPSAtMTsKCWludCBvbGNvdW50ID0gMDsKCglpZiAoKGkgPSBzbWFja19z ZWxmKHBsYWJlbCkpIDwgMCkgewoJCWZwcmludGYoc3RkZXJyLCAiJXM6IHBsYWJlbCByZWFk IGZhaWx1cmVcbiIsIGFyZ3ZbMF0pOwoJCWV4aXQoMSk7Cgl9CglvdXRsYWJlbHNbMF0gPSBw bGFiZWw7CgoJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgewoJCWlmIChzdHJjbXAoYXJn dltpXSwgIi1jIikgPT0gMCB8fAoJCSAgICBzdHJjbXAoYXJndltpXSwgIi0tY291bnQiKSA9 PSAwKQoJCQljb3VudCA9IDE7CgkJZWxzZSBpZiAoc3RyY21wKGFyZ3ZbaV0sICItaCIpID09 IDAgfHwKCQkgICAgc3RyY21wKGFyZ3ZbaV0sICItLWhvc3QiKSA9PSAwKQoJCQlyZW1vdGVf aXBfc3RyID0gYXJndlsrK2ldOwoJCWVsc2UgaWYgKHN0cmNtcChhcmd2W2ldLCAiLXAiKSA9 PSAwIHx8CgkJCSBzdHJjbXAoYXJndltpXSwgIi0tcG9ydCIpID09IDApCgkJCXJlbW90ZV9w b3J0ID0gYXRvaShhcmd2WysraV0pOwoJCWVsc2UgaWYgKHN0cmNtcChhcmd2W2ldLCAiLXMi KSA9PSAwIHx8CgkJCSBzdHJjbXAoYXJndltpXSwgIi0tc2xlZXAiKSA9PSAwKQoJCQluYXAg PSBhdG9pKGFyZ3ZbKytpXSk7CgkJZWxzZSBpZiAoc3RyY21wKGFyZ3ZbaV0sICItbiIpID09 IDAgfHwKCQkJIHN0cmNtcChhcmd2W2ldLCAiLS1udW1iZXIiKSA9PSAwKQoJCQludW1iZXIg PSBhdG9pKGFyZ3ZbKytpXSk7CgkJZWxzZSBpZiAoc3RyY21wKGFyZ3ZbaV0sICItbyIpID09 IDAgfHwKCQkJIHN0cmNtcChhcmd2W2ldLCAiLS1vdXQiKSA9PSAwKQoJCQlvdXRsYWJlbHNb b2xjb3VudCsrXSA9IGFyZ3ZbKytpXTsKCQllbHNlCgkJCWZwcmludGYoc3RkZXJyLCAiYXJn IFwiJXNcIiBpZ25vcmVkXG4iLCBhcmd2W2ldKTsKCX0KCSAKCWlmICgoc29jayA9IHNvY2tl dChQRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCkpIDwgMCkgeyAKCQlwZXJyb3Io InNvY2tldCIpOwoJCWV4aXQoMSk7Cgl9CgoJYnplcm8oKGNoYXIgKikmc2luLCBzaXplb2Yo c2luKSk7CglzaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7CglzaW4uc2luX3BvcnQgPSBodG9u cyhsb2NhbF9wb3J0KTsKCglmb3IgKGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7CgkJaWYgKChi aW5kKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luLCBzaXplb2Yoc2luKSkpID49IDAp CgkJCWJyZWFrOwoJCXNpbi5zaW5fcG9ydCA9IGh0b25zKGxvY2FsX3BvcnQrKyk7Cgl9CgoJ aWYgKGkgPj0gMTAwMCkgewoJCWZwcmludGYoc3RkZXJyLCAiZmFpbGVkIDEwMDAgYmluZHNc biIpOwoJCWV4aXQoMSk7Cgl9CgoJYnplcm8oKGNoYXIgKikmc2luLCBzaXplb2Yoc2luKSk7 CglzaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7CglzaW4uc2luX3BvcnQgPSBodG9ucyhyZW1v dGVfcG9ydCk7CglzaW4uc2luX2FkZHIuc19hZGRyID0gaW5ldF9hZGRyKHJlbW90ZV9pcF9z dHIpOwoKCWZvciAoY3AgPSBvdXRsYWJlbHNbMF0sIG9sbiA9IDA7IG51bWJlciAhPSAwOyBu dW1iZXItLSkgewoJCWlmIChjb3VudCAhPSAwKQoJCQlzcHJpbnRmKGJ1ZmZlciwgIiVzICVk Iiwgb3V0bGFiZWxzW29sbl0sIGNvdW50KyspOwoJCWVsc2UKCQkJc3ByaW50ZihidWZmZXIs ICIlcyIsIG91dGxhYmVsc1tvbG5dKTsKCgkJaSA9IGZzZXR4YXR0cihzb2NrLCAic2VjdXJp dHkuU01BQ0s2NElQT1VUIiwKCQkJb3V0bGFiZWxzW29sbl0sIHN0cmxlbihvdXRsYWJlbHNb b2xuXSkrMSwgMCk7CgkJY3AgPSBvdXRsYWJlbHNbb2xuXTsKCQlpZiAoKytvbG4gPj0gb2xj b3VudCkKCQkJb2xuID0gMDsKCQlpZiAoaSA8IDApIHsKCQkJZnByaW50ZihzdGRlcnIsICJG YWlsZWQgXCIlc1wiICIsIGNwKTsKCQkJcGVycm9yKCJmc2V0eGF0dHIiKTsKCQl9CgkJCQoJ CWlmIChzZW5kdG8oc29jaywgYnVmZmVyLCBzdHJsZW4oYnVmZmVyKSArIDEsIDAsIAoJCQkg ICAoc3RydWN0IHNvY2thZGRyICopICZzaW4sIHNpemVvZihzaW4pKSA8IDApIHsKCQkJZnBy aW50ZihzdGRlcnIsICJGYWlsZWQgXCIlc1wiICIsIGNwKTsKCQkJcGVycm9yKCJzZW5kdG8i KTsKCQl9CgoJCWlmIChuYXAgPiAwKQoJCQlzbGVlcChuYXApOwoJfQoKCWNsb3NlKHNvY2sp OwoKCXJldHVybiAwOwp9CgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0b29scy0yMDEy L3NtYWNrdG9vbHMuaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDY0NAAwMDAxNzUwADAw MDE3NTAAMDAwMDAwMDI1MzcAMTI3MzU1NjAyMTMAMDE2MTYzACAwAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAY3NjaGF1ZmxlcgAAAAAA AAAAAAAAAAAAAAAAAAAAAABjc2NoYXVmbGVyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAC8qCiAqIENvcHlyaWdodCAoQykgMjAxMiBDYXNleSBTY2hhdWZs ZXIgPGNhc2V5QHNjaGF1Zmxlci1jYS5jb20+CiAqIENvcHlyaWdodCAoQykgSW50ZWwgQ29y cG9yYXRpb24uCiAqLwoKI2luY2x1ZGUgPHN5cy90eXBlcy5oPgojaW5jbHVkZSA8c3lzL3Nv Y2tldC5oPgojaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgojaW5jbHVkZSA8YXJwYS9pbmV0Lmg+ CiNpbmNsdWRlIDxsaW51eC9pcC5oPgojaW5jbHVkZSA8bGludXgvdWRwLmg+CiNpbmNsdWRl IDxzeXMvc3RhdC5oPgojaW5jbHVkZSA8ZmNudGwuaD4KI2luY2x1ZGUgPHVuaXN0ZC5oPgoK I2RlZmluZSBUSElTX0hPU1QJIjEyNy4wLjAuMSIKI2RlZmluZSBJUF9QQVNTU0VDCTE4CiNk ZWZpbmUgU01BQ0tfTEFCRUwJMjU2Ci8qCiAqIFRoaXMgYXJlIGZvdW5kIGluIGxpbnV4L3Nv Y2tldC5oIGJ1dCB0aGUgY29kZSBoZXJlCiAqIG5lZWRzIHN5cy9zb2NrZXQuaCBhbmQgdGhl eSBjb25mbGljdC4KICovCiNpZm5kZWYgU0NNX1NFQ1VSSVRZCiNkZWZpbmUgU0NNX1NFQ1VS SVRZCTB4MDMJLyogcnc6IHNlY3VyaXR5IGxhYmVsICovCiNlbmRpZgoKc3RhdGljIGlubGlu ZSBpbnQgc21hY2tfc2VsZihjaGFyICpzbWFjaykKewoJaW50IGZkOwoJaW50IGk7CgljaGFy ICpjcDsKCglmZCA9IG9wZW4oIi9wcm9jL3NlbGYvYXR0ci9zbWFjay9jdXJyZW50IiwgT19S RE9OTFkpOwoJaWYgKGZkIDwgMCkKCQlmZCA9IG9wZW4oIi9wcm9jL3NlbGYvYXR0ci9zbWFj ay5jdXJyZW50IiwgT19SRE9OTFkpOwoJaWYgKGZkIDwgMCkKCQlmZCA9IG9wZW4oIi9wcm9j L3NlbGYvYXR0ci9jdXJyZW50IiwgT19SRE9OTFkpOwoJaWYgKGZkIDwgMCkKCQlyZXR1cm4g LTE7CglpID0gcmVhZChmZCwgc21hY2ssIFNNQUNLX0xBQkVMKTsKCWlmIChpID49IDApCgkJ c21hY2tbaV0gPSAnXDAnOwoJaWYgKChjcCA9IHN0cmNocihzbWFjaywgJ1xuJykpICE9IE5V TEwpCgkJKmNwID0gJ1wwJzsKCgljbG9zZShmZCk7CglyZXR1cm4gaTsKfQoKc3RhdGljIGlu bGluZSBpbnQgc21hY2tfZ2V0X3BlZXIoaW50IHNvY2ssIGNoYXIgKnBlZXIsIGNoYXIgKnJh d3BlZXIpCnsKCWNoYXIgcmF3W1NNQUNLX0xBQkVMICogMl07CglpbnQgcmF3bGVuID0gc2l6 ZW9mKHJhdyk7CgoJaWYgKGdldHNvY2tvcHQoc29jaywgU09MX1NPQ0tFVCwgU09fUEVFUlNF QywgcmF3LCAmcmF3bGVuKSA8IDApIHsKCQlwZXJyb3IoImdldHNvY2tvcHQgU09fUEVFUlNF QyIpOwoJCXJldHVybiAtMTsKCX0KCglpZiAocmF3cGVlciAhPSBOVUxMKQoJCXN0cmNweShy YXdwZWVyLCByYXcpOwoJaWYgKHNzY2FuZihyYXcsICJzbWFjaz0nJVteJ10nIiwgcGVlcikg IT0gMSkKCQlzdHJjcHkocGVlciwgcmF3KTsKCglyZXR1cm4gMDsKfQoAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHRvb2xzLTIwMTIvc21h Y2t1c2VyLmMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAwNjQ0ADAwMDE3NTAAMDAwMTc1 MAAwMDAwMDAwMzc2MgAxMjczNTU2MDIxMgAwMTU3NzQAIDAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIgIABjc2NoYXVmbGVyAAAAAAAAAAAA AAAAAAAAAAAAAAAAAGNzY2hhdWZsZXIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAALyoKICogICBTbWFjayB1c2VyIGZ1bmN0aW9ucwogKgogKiBDb3B5cmln aHQgMjAwNyBDYXNleSBTY2hhdWZsZXIgPGNhc2V5QHNjaGF1Zmxlci1jYS5jb20+CiAqLwoj aW5jbHVkZSA8c3lzL3R5cGVzLmg+CiNpbmNsdWRlIDxzeXMvc3RhdC5oPgojaW5jbHVkZSA8 ZmNudGwuaD4KI2luY2x1ZGUgPHVuaXN0ZC5oPgojaW5jbHVkZSA8c3RkbGliLmg+CiNpbmNs dWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CiNpbmNsdWRlIDxsaW51eC94YXR0 ci5oPgojaW5jbHVkZSAic21hY2t0b29scy5oIgoKI2RlZmluZSBTTUFDS1VTRVJGSUxFCSIv ZXRjL3NtYWNrL3VzZXIiCiNkZWZpbmUgU01BQ0tGSUxFTElORQk0MDk2CgppbnQgc21hY2tf dXNlcl9kZWZhdWx0KGNvbnN0IGNoYXIgKnVzZXIsIGNoYXIgKnJlc3VsdCwgaW50IGxlbikK ewoJY2hhciBsaW5lW1NNQUNLRklMRUxJTkVdOwoJY2hhciBydXNlcltTTUFDS0ZJTEVMSU5F XTsKCWNoYXIgcnNtYWNrW1NNQUNLRklMRUxJTkVdOwoJRklMRSAqZnA7CgoJZnAgPSBmb3Bl bihTTUFDS1VTRVJGSUxFLCAiciIpOwoJaWYgKGZwID09IE5VTEwpCgkJcmV0dXJuIC0xOwoK CXdoaWxlIChmZ2V0cyhsaW5lLCBTTUFDS0ZJTEVMSU5FLCBmcCkgIT0gTlVMTCkgewoJCWlm IChsaW5lWzBdID09ICcjJyB8fCBsaW5lWzBdID09ICdcbicpCgkJCWNvbnRpbnVlOwoJCWlm IChzc2NhbmYobGluZSwgIiVzICVzIiwgcnVzZXIsIHJzbWFjaykgIT0gMikKCQkJY29udGlu dWU7CgkJaWYgKHN0cmNtcChydXNlciwgdXNlcikgIT0gMCkKCQkJY29udGludWU7CgkJaWYg KHN0cmxlbihyc21hY2spID49IGxlbikKCQkJcmV0dXJuIC0xOwoJCXN0cmNweShyZXN1bHQs IHJzbWFjayk7CgkJcmV0dXJuIDA7Cgl9CglyZXR1cm4gLTE7Cn0KCmludCBzbWFja191c2Vy X2FsbG93ZWQoY29uc3QgY2hhciAqdXNlciwgY29uc3QgY2hhciAqc21hY2spCnsKCWNoYXIg bGluZVtTTUFDS0ZJTEVMSU5FXTsKCWNoYXIgKnJ1c2VyOwoJY2hhciAqcnNtYWNrOwoJRklM RSAqZnA7CglpbnQgcmMgPSAxOwoKCWZwID0gZm9wZW4oU01BQ0tVU0VSRklMRSwgInIiKTsK CWlmIChmcCA9PSBOVUxMKQoJCXJldHVybiAtMTsKCgl3aGlsZSAocmMgPT0gMSAmJiBmZ2V0 cyhsaW5lLCBTTUFDS0ZJTEVMSU5FLCBmcCkgIT0gTlVMTCkgewoJCWlmIChsaW5lWzBdID09 ICcjJyB8fCBsaW5lWzBdID09ICdcbicpCgkJCWNvbnRpbnVlOwoKCQlydXNlciA9IHN0cnRv ayhsaW5lLCAiIFx0XG4iKTsKCQlpZiAocnVzZXIgPT0gTlVMTCkKCQkJY29udGludWU7CgoJ CWlmIChzdHJjbXAocnVzZXIsIHVzZXIpICE9IDApCgkJCWNvbnRpbnVlOwoKCQl3aGlsZSAo cmMgPT0gMSAmJiAocnNtYWNrID0gc3RydG9rKE5VTEwsICIgXHRcbiIpKSAhPSBOVUxMKSB7 CgkJCWlmIChzdHJjbXAocnNtYWNrLCBzbWFjaykgPT0gMCB8fAoJCQkgICAgc3RyY21wKHJz bWFjaywgIisiKSA9PSAwKQoJCQkJcmMgPSAwOwoJCX0KCX0KCWZjbG9zZShmcCk7CglyZXR1 cm4gKHJjID09IDEpID8gLTEgOiByYzsKfQoKaW50IHNtYWNrX3VzZXJfYWRkKGNvbnN0IGNo YXIgKnVzZXIsIGNvbnN0IGNoYXIgKnNtYWNrKQp7CgljaGFyIGxpbmVbU01BQ0tGSUxFTElO RV07CgljaGFyICpydXNlcjsKCUZJTEUgKmZwOwoJaW50IHJjID0gMDsKCglmcCA9IGZvcGVu KFNNQUNLVVNFUkZJTEUsICJhKyIpOwoJaWYgKGZwID09IE5VTEwpCgkJcmV0dXJuIC0xOwoK CXdoaWxlIChmZ2V0cyhsaW5lLCBTTUFDS0ZJTEVMSU5FLCBmcCkgIT0gTlVMTCkgewoJCWlm IChsaW5lWzBdID09ICcjJyB8fCBsaW5lWzBdID09ICdcbicpCgkJCWNvbnRpbnVlOwoKCQly dXNlciA9IHN0cnRvayhsaW5lLCAiIFx0XG4iKTsKCQlpZiAocnVzZXIgPT0gTlVMTCkKCQkJ Y29udGludWU7CgoJCWlmIChzdHJjbXAocnVzZXIsIHVzZXIpID09IDApIHsKCQkJcmMgPSAt MTsKCQkJYnJlYWs7CgkJfQoJfQoKCWlmIChyYyA9PSAwKQoJCWZwcmludGYoZnAsICIlcyAl c1xuIiwgdXNlciwgc21hY2spOwoKCWZjbG9zZShmcCk7CglyZXR1cm4gcmM7Cn0KAAAAAAAA AAAAAAAAAAB0b29scy0yMDEyL3Rlc3RuZXR3b3JraW5nLnNoAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA MDAwMDc1NQAwMDAxNzUwADAwMDE3NTAAMDAwMDAwMDAzMTQAMTI3MzU1NjAyMTIAMDE3MjQ3 ACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFy ICAAY3NjaGF1ZmxlcgAAAAAAAAAAAAAAAAAAAAAAAAAAAABjc2NoYXVmbGVyAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMhL2Jpbi9zaAojCiMgQ29weXJp Z2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLgojIENvcHlyaWdodCAoQykgMjAxMiBD YXNleSBTY2hhdWZsZXIgPGNhc2V5QHNjaGF1Zmxlci1jYS5jb20+CiMKCi4vdGVzdHBvbHlp cGxvY2FsLnNoCi4vdGVzdHBvbHl1ZHMuc2gKCnNsZWVwIDMwCgouL3N0b3Bwb2x5aXBsb2Nh bC5zaAouL3N0b3Bwb2x5dWRzLnNoCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAdG9vbHMtMjAxMi9zbWFja2VjaG8uYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAw MDA2NDQAMDAwMTc1MAAwMDAxNzUwADAwMDAwMDA1NjczADEyNzM1NTYwMjEyADAxNTczNwAg MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAg AGNzY2hhdWZsZXIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY3NjaGF1ZmxlcgAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvKgogKiBDb3B5cmlnaHQgKEMpIDIw MTIgQ2FzZXkgU2NoYXVmbGVyIDxjYXNleUBzY2hhdWZsZXItY2EuY29tPgogKiBDb3B5cmln aHQgKEMpIEludGVsIENvcnBvcmF0aW9uLgogKi8KCiNpbmNsdWRlIDxzdGRpby5oPgojaW5j bHVkZSA8c3RkbGliLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPHVuaXN0ZC5o PgojaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiNpbmNsdWRlIDxzeXMvc3RhdC5oPgojaW5jbHVk ZSA8ZmNudGwuaD4KI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KI2luY2x1ZGUgPG5ldGluZXQv aW4uaD4KI2luY2x1ZGUgPGFycGEvaW5ldC5oPgojaW5jbHVkZSA8bGludXgvaXAuaD4KI2lu Y2x1ZGUgPGxpbnV4L3VkcC5oPgojaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgojaW5jbHVk ZSA8bGludXgveGF0dHIuaD4KI2luY2x1ZGUgInNtYWNrdG9vbHMuaCIKCiNkZWZpbmUgQlVG RkVSX1NJWkUJMjAwMAojZGVmaW5lIExPQ0FMX1BPUlQJODAwMAoKaW50Cm1haW4oaW50IGFy Z2MsIGNoYXIgKmFyZ3ZbXSkKewoJaW50IGZpcnN0c29jazsKCWludCBzb2NrOwoJc3RydWN0 IHNvY2thZGRyX2luIHNpbjsKCXVuc2lnbmVkIHNob3J0IGxvY2FsX3BvcnQgPSBMT0NBTF9Q T1JUOwoJaW50IGxlbjsKCWludCBpOwoJaW50IG9hZGQ7Cgl1bnNpZ25lZCBjaGFyICpvYXAg PSAodW5zaWduZWQgY2hhciAqKSZvYWRkOwoJY2hhciBwZWVyW1NNQUNLX0xBQkVMXTsKCWNo YXIgcmF3cGVlcltTTUFDS19MQUJFTF07CgljaGFyIGNhbGxub1tTTUFDS19MQUJFTF07Cglj aGFyIGZyb21bU01BQ0tfTEFCRUxdOwoJaW50IHF1aWV0ID0gMDsKCWludCBzcGVjaWFsOwoJ aW50IGlzb25lID0gMTsKCWNoYXIgYnVmZmVyW0JVRkZFUl9TSVpFXTsKCWNoYXIgY29udHJv bFtCVUZGRVJfU0laRV07CglzdHJ1Y3QgaW92ZWMgaW92ID0geyBidWZmZXIsIHNpemVvZihi dWZmZXIpIH07CglzdHJ1Y3QgbXNnaGRyIG1lc3NhZ2UgPSB7CgkJKHZvaWQqKSZzaW4sIHNp emVvZihzaW4pLCAmaW92LCAxLCBjb250cm9sLCBCVUZGRVJfU0laRSwgMAoJfTsKCglmb3Ig KGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CgkJaWYgKHN0cmNtcChhcmd2W2ldLCAiLXAiKSA9 PSAwIHx8CgkJICAgIHN0cmNtcChhcmd2W2ldLCAiLS1wb3J0IikgPT0gMCkKCQkJbG9jYWxf cG9ydCA9IGF0b2koYXJndlsrK2ldKTsKCQlpZiAoc3RyY21wKGFyZ3ZbaV0sICItcSIpID09 IDAgfHwKCQkgICAgc3RyY21wKGFyZ3ZbaV0sICItLXF1aWV0IikgPT0gMCkKCQkJcXVpZXQg PSAxOwoJfQoKCWlmICgoZmlyc3Rzb2NrID0gc29ja2V0KFBGX0lORVQsIFNPQ0tfU1RSRUFN LCBJUFBST1RPX1RDUCkpIDwgMCkgeyAKCQlwZXJyb3IoInNvY2tldCIpOwoJCWV4aXQoMSk7 Cgl9CgoJYnplcm8oKGNoYXIgKikmc2luLCBzaXplb2Yoc2luKSk7CglzaW4uc2luX2ZhbWls eSA9IEFGX0lORVQ7CglzaW4uc2luX3BvcnQgPSBodG9ucyhsb2NhbF9wb3J0KTsKCXNpbi5z aW5fYWRkci5zX2FkZHIgPSBJTkFERFJfQU5ZOwoKCWlmIChiaW5kKGZpcnN0c29jaywgKHN0 cnVjdCBzb2NrYWRkciAqKSZzaW4sIHNpemVvZihzaW4pKSA8IDApIHsKCQlwZXJyb3IoImJp bmQiKTsKCQlleGl0KDEpOwoJfQoKCXdoaWxlICggMSApIHsKCQlpZiAobGlzdGVuKGZpcnN0 c29jaywgMCkgPCAwKSB7CgkJCXBlcnJvcigibGlzdGVuIik7CgkJCWV4aXQoMSk7CgkJfQoK CQlsZW4gPSBzaXplb2Yoc2luKTsKCQlpZiAoKHNvY2sgPSBhY2NlcHQoZmlyc3Rzb2NrLCAo c3RydWN0IHNvY2thZGRyICopJnNpbiwKCQkJCSAgICZsZW4pKSA8IDApIHsKCQkJcGVycm9y KCJhY2NlcHQiKTsKCQkJZXhpdCgxKTsKCQl9CgoJCWkgPSBzbWFja19nZXRfcGVlcihzb2Nr LCBwZWVyLCByYXdwZWVyKTsKCQlsZW4gPSBzaXplb2YocGVlcik7CgkJaWYgKGkgPCAwKQoJ CQlleGl0KDEpOwoKCQlpZiAoZm9yaygpID09IDApIHsKCQkJY2xvc2UoZmlyc3Rzb2NrKTsK CQkJYnJlYWs7CgkJfQoJCWNsb3NlKHNvY2spOwoJfQoKCXdoaWxlICggMSApIHsKCQliemVy bygoY2hhciAqKSZzaW4sIHNpemVvZihzaW4pKTsKCQliemVybyhidWZmZXIsIEJVRkZFUl9T SVpFKTsKCQliemVybyhjb250cm9sLCBCVUZGRVJfU0laRSk7CgkJc3BlY2lhbCA9IDA7CgoJ CW1lc3NhZ2UubXNnX25hbWVsZW4gPSBzaXplb2Yoc2luKTsKCQltZXNzYWdlLm1zZ19jb250 cm9sbGVuID0gQlVGRkVSX1NJWkU7CgoJCWkgPSByZWN2bXNnKHNvY2ssICZtZXNzYWdlLCAw KTsKCQlpZiAoaSA8IDApIHsKCQkJZnByaW50ZihzdGRlcnIsICIlczolZCByZWN2bXNnIGZh aWxlZFxuIiwKCQkJCV9fZnVuY19fLCBfX0xJTkVfXyk7CgkJCWJyZWFrOwoJCX0KCQlpZiAo aSA9PSAwKSB7CgkJCWZwcmludGYoc3RkZXJyLCAiJXM6JWQgcmVjdm1zZyByZXR1cm5lZCAw XG4iLAoJCQkJX19mdW5jX18sIF9fTElORV9fKTsKCQkJYnJlYWs7CgkJfQoKCQlsZW4gPSBz dHJsZW4ocGVlcik7CgkJaWYgKHN0cm5jbXAoYnVmZmVyLCBwZWVyLCBsZW4pICE9IDApCgkJ CXNwZWNpYWwgPSAxOwoJCWVsc2UgaWYgKGJ1ZmZlcltsZW5dICE9ICcgJyAmJiBidWZmZXJb bGVuXSAhPSAnXDAnKQoJCQlzcGVjaWFsID0gMTsKCgkJaWYgKHF1aWV0ID09IDAgfHwgc3Bl Y2lhbCAhPSAwKSB7CgkJCW9hZGQgPSBzaW4uc2luX2FkZHIuc19hZGRyOwoJCQlwcmludGYo IkZyb20gJXUuJXUuJXUuJXUgcG9ydCAlZCAlZCBcIiVzXCIgIgoJCQkgICAgICAgInBlZXIg PSBcIiVzXCIgKFwiJXNcIilcbiIsCgkJCQlvYXBbMF0sIG9hcFsxXSwgb2FwWzJdLCBvYXBb M10sCgkJCQludG9ocyhzaW4uc2luX3BvcnQpLCBsZW4sIGJ1ZmZlciwKCQkJCXBlZXIsIHJh d3BlZXIpOwoJCX0KCgkJaSA9IHdyaXRlKHNvY2ssIHBlZXIsIGxlbik7CgkJaWYgKGkgIT0g bGVuKSB7CgkJCWZwcmludGYoc3RkZXJyLCAiJXM6JWQgd3JpdGUgcmV0dXJuZWQgJWRcbiIs CgkJCQlfX2Z1bmNfXywgX19MSU5FX18sIGkpOwoJCX0KCX0KCgljbG9zZShzb2NrKTsKCgly ZXR1cm4gMDsKfQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0b29scy0yMDEyL3NtYWNrcG9seXBvcnQuYwAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAMDAwMDY0NAAwMDAxNzUwADAwMDE3NTAAMDAwMDAwMTY1MTIA MTI3MzU1NjAyMTIAMDE2NzAzACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAHVzdGFyICAAY3NjaGF1ZmxlcgAAAAAAAAAAAAAAAAAAAAAAAAAAAABj c2NoYXVmbGVyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC8q CiAqIENvcHlyaWdodCAoQykgMjAxMiBDYXNleSBTY2hhdWZsZXIgPGNhc2V5QHNjaGF1Zmxl ci1jYS5jb20+CiAqIENvcHlyaWdodCAoQykgSW50ZWwgQ29ycG9yYXRpb24uCiAqLwoKI2lu Y2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5o PgojaW5jbHVkZSA8dW5pc3RkLmg+CgojaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiNpbmNsdWRl IDxzeXMvc3RhdC5oPgojaW5jbHVkZSA8ZmNudGwuaD4KCiNpbmNsdWRlIDxzeXMvc29ja2V0 Lmg+CiNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CiNpbmNsdWRlIDxhcnBhL2luZXQuaD4KI2lu Y2x1ZGUgPGxpbnV4L2lwLmg+CiNpbmNsdWRlIDxsaW51eC91ZHAuaD4KI2luY2x1ZGUgPGxp bnV4L25ldGxpbmsuaD4KCiNpbmNsdWRlIDxsaW51eC94YXR0ci5oPgoKI2luY2x1ZGUgInNt YWNrdG9vbHMuaCIKCiNkZWZpbmUgQlVGRkVSX1NJWkUJMjAwMAoKI2RlZmluZSBUSElTX0hP U1QJIjEyNy4wLjAuMSIKI2RlZmluZSBBVFRSX0lOCQkic2VjdXJpdHkuU01BQ0s2NElQSU4i CiNkZWZpbmUgQVRUUl9PVVQJInNlY3VyaXR5LlNNQUNLNjRJUE9VVCIKCi8qCiAqIEEgcGVl ciBjYW4gYmUgZWl0aGVyIGEgY2xpZW50IG9yIGEgc2VydmVyLgogKi8Kc3RydWN0IHBlZXIg ewoJc3RydWN0IHBlZXIJKm5leHQ7CQkJLyogaW4gdGhlIGxpc3QgKi8KCWNoYXIJCXNtYWNr W1NNQUNLX0xBQkVMXTsJLyogU21hY2sgbGFiZWwgKi8KCWludAkJcG9ydDsJCQkvKiBUQ1Ag cG9ydCAqLwoJaW50CQlzb2NrZXQ7CQkJLyogVGhlIHNvY2tldCAqLwp9OwoKc3RydWN0IHBl ZXIgKnBlZXJfbGlzdDsKCnN0cnVjdCBwZWVyICphbGxvY19wZWVyKGNoYXIgKnNtYWNrLCBp bnQgcG9ydCwgaW50IHNvY2tldCwgaW50IGxpc3QpCnsKCXN0cnVjdCBwZWVyICpyZXN1bHQ7 CgoJcmVzdWx0ID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGVlcikpOwoJaWYgKHJlc3VsdCA9 PSBOVUxMKQoJCXJldHVybiBOVUxMOwoJaWYgKHNtYWNrID09IE5VTEwpCgkJcmVzdWx0LT5z bWFja1swXSA9ICdcMCc7CgllbHNlCgkJc3RybmNweShyZXN1bHQtPnNtYWNrLCBzbWFjaywg U01BQ0tfTEFCRUwpOwoJcmVzdWx0LT5wb3J0ID0gcG9ydDsKCXJlc3VsdC0+c29ja2V0ID0g c29ja2V0OwoJaWYgKGxpc3QpIHsKCQlyZXN1bHQtPm5leHQgPSBwZWVyX2xpc3Q7CgkJcGVl cl9saXN0ID0gcmVzdWx0OwoJfQoJZWxzZQoJCXJlc3VsdC0+bmV4dCA9IE5VTEw7CgoJcmV0 dXJuIHJlc3VsdDsKfQoKc3RydWN0IHBlZXIgKmZpbmRfc2VydmVyKGNoYXIgKnNtYWNrKQp7 CglzdHJ1Y3QgcGVlciAqcHA7CgoJZm9yIChwcCA9IHBlZXJfbGlzdDsgcHAgIT0gTlVMTDsg cHAgPSBwcC0+bmV4dCkKCQlpZiAoc3RyY21wKHBwLT5zbWFjaywgc21hY2spID09IDApCgkJ CWJyZWFrOwoKCXJldHVybiBwcDsKfQoKaW50Cm1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3Zb XSkKewoJc3RydWN0IHBlZXIgKmNsaWVudCA9IE5VTEw7CglzdHJ1Y3QgcGVlciAqbWFzdGVy ID0gTlVMTDsKCXN0cnVjdCBwZWVyICpzZXJ2ZXIgPSBOVUxMOwoJc3RydWN0IHNvY2thZGRy X2luIHNpbjsKCWNoYXIgY2J1ZmZbQlVGRkVSX1NJWkVdOwoJY2hhciBzYnVmZltCVUZGRVJf U0laRV07CgljaGFyICpzZXJ2ZXJob3N0ID0gVEhJU19IT1NUOwoJY2hhciAqY3A7CglpbnQg dmVyYm9zZSA9IDA7CglpbnQgbGVuOwoJaW50IGk7CglpbnQgY3BuOwoJaW50IHNwbjsKCWlu dCBzbGVuOwoJaW50IHN0YXJfc29ja2V0OwkvKiBmb3IgbGlzdGVuaW5nICovCglpbnQgbnNv Y2s7CQkvKiBmb3Igc2VsZWN0ICovCglmZF9zZXQgc29ja3NldDsJCS8qIGZvciBzZWxlY3Qg Ki8KCglmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CgkJaWYgKHN0cmNtcChhcmd2W2ld LCAiLWMiKSA9PSAwIHx8CgkJICAgIHN0cmNtcChhcmd2W2ldLCAiLS1jbGllbnQiKSA9PSAw IHx8CgkJICAgIHN0cmNtcChhcmd2W2ldLCAiLS1jbGllbnRwb3J0IikgPT0gMCkgewoJCQlp ZiAoY2xpZW50ICE9IE5VTEwpIHsKCQkJCWZwcmludGYoc3RkZXJyLAoJCQkJCSIlczogbXVs dGlwbGUgY2xpZW50IHBvcnQgXCIlc1wiIgoJCQkJCSIgaW52YWxpZFxuIiwgYXJndlswXSwg YXJndltpXSk7CgkJCQlleGl0KDEpOwoJCQl9CgkJCWkrKzsKCQkJY2xpZW50ID0gYWxsb2Nf cGVlcihOVUxMLCBhdG9pKGFyZ3ZbaV0pLCAtMSwgMCk7CgkJfQoJCWVsc2UgaWYgKHN0cmNt cChhcmd2W2ldLCAiLW0iKSA9PSAwIHx8CgkJCSBzdHJjbXAoYXJndltpXSwgIi0tbWFzdGVy IikgPT0gMCB8fAoJCQkgc3RyY21wKGFyZ3ZbaV0sICItLW1hc3RlcnNlcnZlciIpID09IDAp IHsKCQkJaSsrOwoJCQljcCA9IHN0cmNocihhcmd2W2ldLCAnOicpOwoJCQlpZiAoY3AgPT0g TlVMTCkgewoJCQkJZnByaW50ZihzdGRlcnIsICIlczogbWFzdGVyIFwiJXNcIiBpbnZhbGlk XG4iLAoJCQkJCWFyZ3ZbMF0sIGFyZ3ZbaV0pOwoJCQkJZXhpdCgxKTsKCQkJfQoJCQljcCsr OwoJCQlpZiAoc3RybGVuKGNwKSA8IDEpIHsKCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IG1h c3RlciBcIiVzXCIgaW52YWxpZFxuIiwKCQkJCQlhcmd2WzBdLCBhcmd2W2ldKTsKCQkJCWV4 aXQoMSk7CgkJCX0KCQkJbWFzdGVyID0gYWxsb2NfcGVlcihjcCwgYXRvaShhcmd2W2ldKSwg LTEsIDApOwoJCX0KCQllbHNlIGlmIChzdHJjbXAoYXJndltpXSwgIi1zIikgPT0gMCB8fAoJ CQkgc3RyY21wKGFyZ3ZbaV0sICItLXNlcnZlciIpID09IDAgfHwKCQkJIHN0cmNtcChhcmd2 W2ldLCAiLS1zbWFjayIpID09IDAgfHwKCQkJIHN0cmNtcChhcmd2W2ldLCAiLS1zZXJ2ZXJz bWFjayIpID09IDApIHsKCQkJaSsrOwoJCQljcCA9IHN0cmNocihhcmd2W2ldLCAnOicpOwoJ CQlpZiAoY3AgPT0gTlVMTCkgewoJCQkJZnByaW50ZihzdGRlcnIsICIlczogc2VydmVyIFwi JXNcIiBpbnZhbGlkXG4iLAoJCQkJCWFyZ3ZbMF0sIGFyZ3ZbaV0pOwoJCQkJZXhpdCgxKTsK CQkJfQoJCQljcCsrOwoJCQlpZiAoc3RybGVuKGNwKSA8IDEpIHsKCQkJCWZwcmludGYoc3Rk ZXJyLCAiJXM6IHNlcnZlciBcIiVzXCIgaW52YWxpZFxuIiwKCQkJCQlhcmd2W2ldLCBhcmd2 WzBdKTsKCQkJCWV4aXQoMSk7CgkJCX0KCQkJYWxsb2NfcGVlcihjcCwgYXRvaShhcmd2W2ld KSwgLTEsIDEpOwoJCX0KCQllbHNlIGlmIChzdHJjbXAoYXJndltpXSwgIi1oIikgPT0gMCB8 fAoJCQkgc3RyY21wKGFyZ3ZbaV0sICItLWhvc3QiKSA9PSAwIHx8CgkJCSBzdHJjbXAoYXJn dltpXSwgIi0tc2VydmVyaG9zdCIpID09IDApIHsKCQkJc2VydmVyaG9zdCA9IGFyZ3ZbKytp XTsKCQl9CgkJZWxzZSBpZiAoc3RyY21wKGFyZ3ZbaV0sICItdiIpID09IDAgfHwKCQkJIHN0 cmNtcChhcmd2W2ldLCAiLS12ZXJib3NlIikgPT0gMCkgewoJCQl2ZXJib3NlID0gMTsKCQl9 Cgl9CgoJaWYgKGNsaWVudCA9PSBOVUxMKSB7CgkJZnByaW50ZihzdGRlcnIsICIlczogY2xp ZW50IHBvcnQgbm90IHNwZWNpZmllZFxuIiwgYXJndlswXSk7CgkJZXhpdCgxKTsKCX0KCWlm IChtYXN0ZXIgPT0gTlVMTCAmJiBwZWVyX2xpc3QgPT0gTlVMTCkgewoJCWZwcmludGYoc3Rk ZXJyLCAiJXM6IHNlcnZlciBkYXRhIG5vdCBzcGVjaWZpZWRcbiIsCgkJCWFyZ3ZbMF0pOwoJ CWV4aXQoMSk7Cgl9CgoJLyoKCSAqIENyZWF0ZSB0aGUgc2VydmljZSBzb2NrZXQgZm9yIGNs aWVudHMgdG8gY29ubmVjdCB0by4KCSAqLwoJaWYgKChzdGFyX3NvY2tldCA9IHNvY2tldChQ Rl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApKSA8IDApIHsgCgkJcGVycm9yKCJs aXN0ZW4gc29ja2V0Iik7CgkJZXhpdCgxKTsKCX0KCglzaW4uc2luX2ZhbWlseSA9IEFGX0lO RVQ7CglzaW4uc2luX3BvcnQgPSBodG9ucyhjbGllbnQtPnBvcnQpOwoJc2luLnNpbl9hZGRy LnNfYWRkciA9IElOQUREUl9BTlk7CgoJaWYgKGJpbmQoc3Rhcl9zb2NrZXQsIChzdHJ1Y3Qg c29ja2FkZHIgKikmc2luLCBzaXplb2Yoc2luKSkgPCAwKSB7CgkJcGVycm9yKCJsaXN0ZW4g YmluZCIpOwoJCWV4aXQoMSk7Cgl9CgoJLyoKCSAqIEdpdmUgdGhlIHNlcnZpY2Ugc29ja2V0 IHRoZSBzdGFyIGxhYmVsLCBhbGxvd2luZyBhbnlvbmUKCSAqIHRvIHRhbGsgdG8gaXQuCgkg Ki8KCWlmIChmc2V0eGF0dHIoc3Rhcl9zb2NrZXQsIEFUVFJfSU4sICIqIiwgMiwgMCkgPCAw KSB7CgkJcGVycm9yKCJsaXN0ZW4gZnNldHhhdHRyIik7CgkJZXhpdCgxKTsKCX0KCgkvKgoJ ICogTWFpbiBsb29wLiBBY2NlcHQgaW5jb21pbmcgcmVxdWVzdHMgYW5kIGRpc3BhdGNoIGNs aWxkcmVuCgkgKiB0byBzZXJ2aWNlIHRoZW0uCgkgKi8KCWZvciAoOzspIHsKCQlpZiAobGlz dGVuKHN0YXJfc29ja2V0LCAwKSA8IDApIHsKCQkJcGVycm9yKCJsaXN0ZW4iKTsKCQkJZXhp dCgxKTsKCQl9CgoJCWxlbiA9IHNpemVvZihzaW4pOwoJCWNsaWVudC0+c29ja2V0ID0gYWNj ZXB0KHN0YXJfc29ja2V0LCAoc3RydWN0IHNvY2thZGRyICopJnNpbiwKCQkJCQkmbGVuKTsK CQlpZiAoY2xpZW50LT5zb2NrZXQgPCAwKSB7CgkJCXBlcnJvcigiYWNjZXB0Iik7CgkJCWV4 aXQoMSk7CgkJfQoKCQkvKgoJCSAqIEdldCB0aGUgU21hY2sgbGFiZWwgZnJvbSB0aGUgb3Ro ZXIgZW5kIGFuZAoJCSAqIGFwcGx5IGl0IHRvIHRoZSBuZXcgc29ja2V0LgoJCSAqLwoJCWxl biA9IFNNQUNLX0xBQkVMOwoJCWlmIChzbWFja19nZXRfcGVlcihjbGllbnQtPnNvY2tldCwg Y2xpZW50LT5zbWFjaywgTlVMTCkgPCAwKQoJCQlleGl0KDEpOwoKCQlzbGVuID0gc3RybGVu KGNsaWVudC0+c21hY2spICsgMTsKCQlpZiAoZnNldHhhdHRyKGNsaWVudC0+c29ja2V0LCBB VFRSX0lOLAoJCQkJY2xpZW50LT5zbWFjaywgc2xlbiwgMCkgPCAwKSB7CgkJCXBlcnJvcigi Y2xpZW50IGZzZXR4YXR0ciIpOwoJCQlleGl0KDEpOwoJCX0KCQlpZiAoZnNldHhhdHRyKGNs aWVudC0+c29ja2V0LCBBVFRSX09VVCwKCQkJCWNsaWVudC0+c21hY2ssIHNsZW4sIDApIDwg MCkgewoJCQlwZXJyb3IoImNsaWVudCBmc2V0eGF0dHIiKTsKCQkJZXhpdCgxKTsKCQl9CgoJ CS8qCgkJICogRmluZCB0aGUgcmlnaHQgc2VydmVyIGZvciB0aGlzIGNsaWVudCdzIGxhYmVs CgkJICovCgkJc2VydmVyID0gZmluZF9zZXJ2ZXIoY2xpZW50LT5zbWFjayk7CgkJaWYgKHNl cnZlciA9PSBOVUxMKQoJCQlzZXJ2ZXIgPSBtYXN0ZXI7CgkJaWYgKHNlcnZlciA9PSBOVUxM KSB7CgkJCWZwcmludGYoc3RkZXJyLCAiTm8gc2VydmVyIGF2YWlsYWJsZSBhdCBcIiVzXCJc biIsCgkJCQljbGllbnQtPnNtYWNrKTsKCQkJY2xvc2UoY2xpZW50LT5zb2NrZXQpOwoJCQlj b250aW51ZTsKCQl9CgoJCS8qCgkJICogQ2hpbGQgZG9lcyB3b3JrLCBwYXJlbnQgZ29lcyB0 byBsaXN0ZW4gc29tZSBtb3JlCgkJICovCgkJaWYgKGZvcmsoKSA9PSAwKSB7CgkJCWNsb3Nl KHN0YXJfc29ja2V0KTsKCQkJYnJlYWs7CgkJfQoJCS8qCgkJICogVGhpcyBpcyB0aGUgcGFy ZW50IGFuZCB0aGUgcGFyZW50IG5vIGxvbmdlcgoJCSAqIGNhcmVzIGFib3V0IHRoaXMgc29j a2V0LCBoYXZpbmcgcGFzc2VkIGl0IG9mZgoJCSAqIGZvciB0aGUgY2hpbGQgdG8gdGFrZSBj YXJlIG9mCgkJICovCgkJY2xvc2UoY2xpZW50LT5zb2NrZXQpOwoJfQoKCS8qCgkgKiBPbmx5 IGNoaWxkcmVuIGV2ZXIgZ2V0IGhlcmUuCgkgKi8KCXNsZW4gPSBzdHJsZW4oY2xpZW50LT5z bWFjaykgKyAxOwoJaWYgKChzZXJ2ZXItPnNvY2tldCA9IHNvY2tldChQRl9JTkVULCBTT0NL X1NUUkVBTSwgSVBQUk9UT19UQ1ApKSA8IDApIHsgCgkJcGVycm9yKCJzZXJ2ZXIgc29ja2V0 Iik7CgkJZXhpdCgxKTsKCX0KCgkvKgoJICogU2V0IHRoZSBzb2NrZXQgbGFiZWxzIHRvIG1h dGNoIHRoYXQgb2YgdGhlIHNlcnZlcgoJICogdG8gZW5zdXJlIGNvbW11bmljYXRpb25zLiBU aGlzIHJlcXVpcmVzIENBUF9NQUNfQURNSU4uCgkgKi8KCWlmIChmc2V0eGF0dHIoc2VydmVy LT5zb2NrZXQsIEFUVFJfSU4sIHNlcnZlci0+c21hY2ssIHNsZW4sIDApIDwgMCkgewoJCXBl cnJvcigic2VydmVyIGZzZXR4YXR0ciIpOwoJCWV4aXQoMSk7Cgl9CgoJaWYgKGZzZXR4YXR0 cihzZXJ2ZXItPnNvY2tldCwgQVRUUl9PVVQsIHNlcnZlci0+c21hY2ssIHNsZW4sIDApIDwg MCkgewoJCXBlcnJvcigic2VydmVyIGZzZXR4YXR0ciIpOwoJCWV4aXQoMSk7Cgl9CgoJYnpl cm8oKGNoYXIgKikmc2luLCBzaXplb2Yoc2luKSk7CglzaW4uc2luX2ZhbWlseSA9IEFGX0lO RVQ7CglzaW4uc2luX3BvcnQgPSBodG9ucyhzZXJ2ZXItPnBvcnQpOwoJc2luLnNpbl9hZGRy LnNfYWRkciA9IGluZXRfYWRkcihzZXJ2ZXJob3N0KTsKCglpZiAoY29ubmVjdChzZXJ2ZXIt PnNvY2tldCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW4sIHNpemVvZihzaW4pKSA8IDApIHsK CQlwZXJyb3IoInNlcnZlciBjb25uZWN0Iik7CgkJZXhpdCgxKTsKCX0KCglpZiAoY2xpZW50 LT5zb2NrZXQgPiBzZXJ2ZXItPnNvY2tldCkKCQluc29jayA9IGNsaWVudC0+c29ja2V0ICsg MTsKCWVsc2UKCQluc29jayA9IHNlcnZlci0+c29ja2V0ICsgMTsKCglmb3IgKDs7KSB7CgkJ RkRfWkVSTygmc29ja3NldCk7CgkJRkRfU0VUKGNsaWVudC0+c29ja2V0LCAmc29ja3NldCk7 CgkJRkRfU0VUKHNlcnZlci0+c29ja2V0LCAmc29ja3NldCk7CgkJaSA9IHNlbGVjdChuc29j aywgJnNvY2tzZXQsIE5VTEwsIE5VTEwsIE5VTEwpOwoJCWlmIChpIDwgMCkgewoJCQlwZXJy b3IoInNlbGVjdCIpOwoJCQlicmVhazsKCQl9CgkJaWYgKHZlcmJvc2UpCgkJCWZwcmludGYo c3RkZXJyLCAic2VsZWN0ZWQgJWRcbiIsIGkpOwoKCQljcG4gPSAwOwoJCXNwbiA9IDA7CgkJ aWYgKEZEX0lTU0VUKGNsaWVudC0+c29ja2V0LCAmc29ja3NldCkpIHsKCQkJY3BuID0gcmVh ZChjbGllbnQtPnNvY2tldCwgY2J1ZmYsIEJVRkZFUl9TSVpFKTsKCQkJaWYgKHZlcmJvc2Up CgkJCQlmcHJpbnRmKHN0ZGVyciwgInJlYWQgJWQgZnJvbSBjbGllbnRcbiIsIGNwbik7CgkJ fQoJCWlmIChGRF9JU1NFVChzZXJ2ZXItPnNvY2tldCwgJnNvY2tzZXQpKSB7CgkJCXNwbiA9 IHJlYWQoc2VydmVyLT5zb2NrZXQsIHNidWZmLCBCVUZGRVJfU0laRSk7CgkJCWlmICh2ZXJi b3NlKQoJCQkJZnByaW50ZihzdGRlcnIsICJyZWFkICVkIGZyb20gc2VydmVyXG4iLCBzcG4p OwoJCX0KCgkJaWYgKGNwbiA+IDApIHsKCQkJaSA9IHNlbmQoc2VydmVyLT5zb2NrZXQsIGNi dWZmLCBjcG4sIDApOwoJCQlpZiAodmVyYm9zZSkKCQkJCWZwcmludGYoc3RkZXJyLCAid3Jv dGUgJWQgdG8gc2VydmVyXG4iLCBpKTsKCQl9CgkJaWYgKHNwbiA+IDApIHsKCQkJaSA9IHNl bmQoY2xpZW50LT5zb2NrZXQsIHNidWZmLCBzcG4sIDApOwoJCQlpZiAodmVyYm9zZSkKCQkJ CWZwcmludGYoc3RkZXJyLCAid3JvdGUgJWQgdG8gY2xpZW50XG4iLCBpKTsKCQl9CgoJCWlm IChjcG4gPD0gMCAmJiBzcG4gPD0gMCkKCQkJYnJlYWs7Cgl9CgljbG9zZShjbGllbnQtPnNv Y2tldCk7CgljbG9zZShzZXJ2ZXItPnNvY2tldCk7CgoJZXhpdCgwKTsKfQoAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAHRvb2xzLTIwMTIvdGVzdGFsbGFjY2Vzcy5zaAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAwMDAwNzU1ADAwMDE3NTAAMDAwMTc1MAAwMDAwMDAwNzYxNQAxMjczNTU2MDIxMgAwMTcw MjUAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0 YXIgIABjc2NoYXVmbGVyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGNzY2hhdWZsZXIAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIyEvYmluL2Jhc2gKIwojIENv cHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4KIyBDb3B5cmlnaHQgKEMpIDIw MTIgQ2FzZXkgU2NoYXVmbGVyIDxjYXNleUBzY2hhdWZsZXItY2EuY29tPgojCmZldGNoPXRh aWwKI2ZldGNoPWNhdApleHBlY3RlZD0wCnVuZXhwZWN0ZWQ9MAoKaWYgWyAtZiAvc3lzL2Zz L3NtYWNrZnMvY2lwc28yIF0KdGhlbgogICAgQ0lQU089L3N5cy9mcy9zbWFja2ZzL2NpcHNv MgplbGlmIFsgLWYgL3NtYWNrL2NpcHNvMiBdCnRoZW4KICAgIENJUFNPPS9zbWFjay9jaXBz bzIKZWxzZQogICAgZWNobyAiTm8gY2lwc28gY29udHJvbCBmaWxlIGZvdW5kIgogICAgZXhp dCAxCmZpCgppZiBbIC1mIC9zeXMvZnMvc21hY2tmcy9sb2FkMiBdCnRoZW4KICAgIExPQUQ9 L3N5cy9mcy9zbWFja2ZzL2xvYWQyCmVsaWYgWyAtZiAvc21hY2svbG9hZDIgXQp0aGVuCiAg ICBMT0FEPS9zbWFjay9sb2FkMgplbHNlCiAgICBlY2hvICJObyBsb2FkIGNvbnRyb2wgZmls ZSBmb3VuZCIKICAgIGV4aXQgMQpmaQoKc2VkIC1lICdzL1woW14gXSpcKSAuKi9cMS8nICRD SVBTTyBcCgl8IGZncmVwIC12ICcqJyBcCgk+IC90bXAvdGVzdGFsbGFjY2Vzcy5saXN0Cgpm b3IgaSBpbiBgJGZldGNoIC90bXAvdGVzdGFsbGFjY2Vzcy5saXN0YCAnKicKZG8KICAgIGZv ciBqIGluIGAkZmV0Y2ggL3RtcC90ZXN0YWxsYWNjZXNzLmxpc3RgICcqJwogICAgZG8KICAg ICAgICBpbnZhbGlkPTAKICAgICAgICBzdWNjZXNzPTAKICAgICAgICBmYWlsdXJlPTAKICAg ICAgICBmb3IgayBpbiByIHJ3IHJ3eCByd3hhIHJ3eGF0ICdyLip4JyAnci4qeGEnICdyLip4 YXQnICdyLiphJyBcCiAgICAgICAgICAgICAgICAgJ3IuKmEuKnQnICdyLip0JyB3IHd4IHd4 YSB3eGF0ICd3eC4qdCcgJ3cuKnQnIHggeGEgXAogICAgICAgICAgICAgICAgIHhhdCAneC4q dCcgYSBhdCB0CiAgICAgICAgZG8KICAgICAgICAgICAga2xlYW49YGVjaG8gIiRrIiB8IHNl ZCAtZSAncy9cLlwqLy9nJ2AKICAgICAgICAgICAgcnVsZT1gZmdyZXAgLW0gMSAiJGkgJGog IiAkTE9BRGAKICAgICAgICAgICAgZ3JlcHJjPSQ/CiAgICAgICAgICAgIHRlc3R0ZXh0PWAu L3Rlc3RhY2Nlc3MgYWNjZXNzICIkaSIgIiRqIiAiJGtsZWFuImAKICAgICAgICAgICAgdGVz dHJjPSQ/CiAgICAgICAgICAgIHRlc3R0ZXh0Mj1gLi90ZXN0YWNjZXNzIGFjY2VzczIgIiRp IiAiJGoiICIka2xlYW4iYAogICAgICAgICAgICB0ZXN0cmMyPSQ/CgogICAgICAgICAgICBp ZiBbICIkaSIgPSAiKiIgXSA7IHRoZW4KICAgICAgICAgICAgICAgIHJ1bGVtb2RlPSItIgoJ CXBmPSJTUyIKICAgICAgICAgICAgZWxpZiBbICIkaSIgPSAiQCIgLW8gIiRqIiA9ICJAIiBd IDsgdGhlbgogICAgICAgICAgICAgICAgcnVsZW1vZGU9InJ3eGF0IgoJCXBmPSJBVCIKICAg ICAgICAgICAgZWxpZiBbICIkaiIgPSAiKiIgXSA7IHRoZW4KICAgICAgICAgICAgICAgIHJ1 bGVtb2RlPSJyd3hhdCIKCQlwZj0iU08iCiAgICAgICAgICAgIGVsaWYgWyAiJGkiID0gIiRq IiBdIDsgdGhlbgogICAgICAgICAgICAgICAgcnVsZW1vZGU9InJ3eGF0IgoJCXBmPSJFUSIK ICAgICAgICAgICAgZWxpZiBbICRncmVwcmMgPSAwIF0gOyB0aGVuCiAgICAgICAgICAgICAg ICBydWxlbW9kZT1gZWNobyAkcnVsZSB8IHNlZCAtZSAncy8uKiAvLydgCgkJcGY9IlJGIgog ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBydWxlbW9kZT0iLSIKCQlwZj0iTlIi CiAgICAgICAgICAgIGZpCgogICAgICAgICAgICBpZiBbICIkaiIgPSAiXyIgXSA7IHRoZW4K ICAgICAgICAgICAgICAgIGlmIFsgIiRrbGVhbiIgPSAiciIgLW8gIiRrbGVhbiIgPSAieCIg LW8gXAogICAgICAgICAgICAgICAgICAgICAiJGtsZWFuIiA9ICJyeCIgLW8gIiRrbGVhbiIg PSAicnQiIC1vIFwKICAgICAgICAgICAgICAgICAgICAgIiRrbGVhbiIgPSAieHQiIC1vICIk a2xlYW4iID0gInJ4dCIgXSA7IHRoZW4KICAgICAgICAgICAgICAgICAgICBydWxlbW9kZT0i JGsiCiAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICBmaQoKICAgICAgICAgICAgaWYg WyAiJGkiID0gIl4iIF0gOyB0aGVuCiAgICAgICAgICAgICAgICBpZiBbICIka2xlYW4iID0g InIiIC1vICIka2xlYW4iID0gIngiIC1vIFwKICAgICAgICAgICAgICAgICAgICAgIiRrbGVh biIgPSAicngiIC1vICIka2xlYW4iID0gInJ0IiAtbyBcCiAgICAgICAgICAgICAgICAgICAg ICIka2xlYW4iID0gInh0IiAtbyAiJGtsZWFuIiA9ICJyeHQiIF0gOyB0aGVuCiAgICAgICAg ICAgICAgICAgICAgcnVsZW1vZGU9IiRrIgogICAgICAgICAgICAgICAgZmkKICAgICAgICAg ICAgZmkKCiAgICAgICAgICAgIGVjaG8gIiRydWxlbW9kZSIgfCBncmVwIC1xICIkayIKICAg ICAgICAgICAgaWYgWyAiJD8iID0gMCBdIDsgdGhlbgogICAgICAgICAgICAgICAgIyBleHBl Y3Qgc3VjY2VzcwogICAgICAgICAgICAgICAgaWYgWyAkdGVzdHJjMiA9IDAgXSA7IHRoZW4K ICAgICAgICAgICAgICAgICAgICBpZiBbICR0ZXN0cmMgPSAwIF0gOyB0aGVuCiAgICAgICAg ICAgICAgICAgICAgICAgIGV4cGVjdGVkPWBleHByICRleHBlY3RlZCArIDFgCiAgICAgICAg ICAgICAgICAgICAgICAgIHN1Y2Nlc3M9YGV4cHIgJHN1Y2Nlc3MgKyAxYAogICAgICAgICAg ICAgICAgICAgIGVsaWYgWyAkdGVzdHJjID0gMiBdIDsgdGhlbgogICAgICAgICAgICAgICAg ICAgICAgICBzdWNjZXNzPWBleHByICRzdWNjZXNzICsgMWAKICAgICAgICAgICAgICAgICAg ICAgICAgZXhwZWN0ZWQ9YGV4cHIgJGV4cGVjdGVkICsgMWAKICAgICAgICAgICAgICAgICAg ICAgICAgaW52YWxpZD1gZXhwciAkaW52YWxpZCArIDFgCiAgICAgICAgICAgICAgICAgICAg ZWxpZiBbICR0ZXN0cmMgPSAxIC1hICR0ZXN0cmMyID0gMCAtYSAiJGkiID0gIl4iIF0gOyB0 aGVuCiAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M9YGV4cHIgJHN1Y2Nlc3MgKyAx YAogICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZD1gZXhwciAkZXhwZWN0ZWQgKyAx YAogICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgdW5l eHBlY3RlZD1gZXhwciAkdW5leHBlY3RlZCArIDFgCiAgICAgICAgICAgICAgICAgICAgICAg IGZhaWx1cmU9YGV4cHIgJGZhaWx1cmUgKyAxYAogICAgICAgICAgICAgICAgICAgICAgICBl Y2hvICIkcGYiIiR0ZXN0cmMiIiR0ZXN0cmMyIiAiJGkiICIkaiIgIiRrIiAiJHRlc3R0eHQi ICIkdGVzdHR4dDIiICIoIiIkZXhwZWN0ZWQiIikiCiAgICAgICAgICAgICAgICAgICAgZmkK ICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICMg ZXhwZWN0IGZhaWx1cmUKICAgICAgICAgICAgICAgIGlmIFsgJHRlc3RyYzIgPSAwIC1vICR0 ZXN0cmMgPSAwIF0gOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgdW5leHBlY3RlZD1gZXhw ciAkdW5leHBlY3RlZCArIDFgCiAgICAgICAgICAgICAgICAgICAgc3VjY2Vzcz1gZXhwciAk c3VjY2VzcyArIDFgCiAgICAgICAgICAgICAgICAgICAgZWNobyAiJHBmIiIkdGVzdHJjIiIk dGVzdHJjMiIgIiRpIiAiJGoiICIkayIgIiR0ZXN0dHh0IiAiJHRlc3R0eHQyIiAiKCIiJGV4 cGVjdGVkIiIpIgogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIGZh aWx1cmU9YGV4cHIgJGZhaWx1cmUgKyAxYAogICAgICAgICAgICAgICAgICAgIGV4cGVjdGVk PWBleHByICRleHBlY3RlZCArIDFgCiAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICBm aQogICAgICAgIGRvbmUKICAgICAgICBlY2hvICIkaSIgIiRqIiAiKCIiJGludmFsaWQiIi8i IiRmYWlsdXJlIiIvIiIkc3VjY2VzcyIiKSIgXAogICAgICAgICAgICAgIigiIiR1bmV4cGVj dGVkIiIvIiIkZXhwZWN0ZWQiIikiCiAgICBkb25lCmRvbmUKZWNobyAiKCIiJHVuZXhwZWN0 ZWQiIi8iIiRleHBlY3RlZCIiKSIKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHRvb2xzLTIwMTIvdGVzdHBvbHl1ZHMuc2gA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAwNzU1ADAwMDE3NTAAMDAwMTc1MAAwMDAwMDAwMDM1 MAAxMjczNTU2MDIxMwAwMTY1NjAAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAdXN0YXIgIABjc2NoYXVmbGVyAAAAAAAAAAAAAAAAAAAAAAAAAAAA AGNzY2hhdWZsZXIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA IyEvYmluL3NoCiMKIyBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uCiMg Q29weXJpZ2h0IChDKSAyMDEyIENhc2V5IFNjaGF1ZmxlciA8Y2FzZXlAc2NoYXVmbGVyLWNh LmNvbT4KIwoKLi9zbWFja3Vkc2luIC1pICcqJyAmCi4vc21hY2t1ZHNvdXQgXAoJLW8gXyBc CgktbyBTbmFwIFwKCS1vIENyYWNrbGUgXAoJLW8gUG9wIFwKCS1vIFRpY2t5VGlja3lUaWNr eVNwYXRoYW5nV2hvbyAmCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0b29scy0yMDEyL3NtYWNrdWRzb3V0LmMAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAMDAwMDY0NAAwMDAxNzUwADAwMDE3NTAAMDAwMDAwMDQ1MTYA MTI3MzU1NjAyMTMAMDE2MzQwACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAHVzdGFyICAAY3NjaGF1ZmxlcgAAAAAAAAAAAAAAAAAAAAAAAAAAAABj c2NoYXVmbGVyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACNp bmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3RkbGliLmg+CiNpbmNsdWRlIDxzdHJpbmcu aD4KI2luY2x1ZGUgPHVuaXN0ZC5oPgoKI2luY2x1ZGUgPHN5cy90eXBlcy5oPgojaW5jbHVk ZSA8c3lzL3N0YXQuaD4KI2luY2x1ZGUgPGZjbnRsLmg+CgojaW5jbHVkZSA8c3lzL3NvY2tl dC5oPgojaW5jbHVkZSA8c3lzL3VuLmg+CiNpbmNsdWRlIDxhcnBhL2luZXQuaD4KI2luY2x1 ZGUgPGxpbnV4L2lwLmg+CiNpbmNsdWRlIDxsaW51eC91ZHAuaD4KCiNpbmNsdWRlICJzbWFj a3Rvb2xzLmgiCgppbnQKbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQp7CglpbnQgc29j azsKCXN0cnVjdCBzb2NrYWRkcl91biBzdW47CgljaGFyIGJ1ZmZlcls1MDBdOwoJY2hhciAq cGF0aCA9ICIvdG1wL3Rlc3RzbWFja3VkcyI7CgljaGFyICpjcDsKCWNoYXIgKm91dGxhYmVs c1syMF07CgljaGFyIHBsYWJlbFtTTUFDS19MQUJFTF07CglpbnQgaTsKCWludCBvbG47Cglp bnQgbmFwID0gMTsKCWludCBjb3VudCA9IDA7CglpbnQgbnVtYmVyID0gLTE7CglpbnQgb2xj b3VudCA9IDA7CgoJb2xuID0gb3BlbigiL3Byb2Mvc2VsZi9hdHRyL3NtYWNrLmN1cnJlbnQi LCBPX1JET05MWSk7CglpZiAob2xuIDwgMCkKCQlvbG4gPSBvcGVuKCIvc21hY2svY3VycmVu dCIsIE9fUkRPTkxZKTsKCWlmIChvbG4gPCAwKQoJCW9sbiA9IG9wZW4oIi9wcm9jL3NlbGYv YXR0ci9jdXJyZW50IiwgT19SRE9OTFkpOwoJaSA9IHJlYWQob2xuLCBwbGFiZWwsIFNNQUNL X0xBQkVMKTsKCWNsb3NlKG9sbik7CglwbGFiZWxbaV0gPSAnXDAnOwoJaWYgKChjcCA9IHN0 cmNocihwbGFiZWwsICdcbicpKSAhPSBOVUxMKQoJCSpjcCA9ICdcMCc7CglvdXRsYWJlbHNb MF0gPSBwbGFiZWw7CgkvKgoJICoJZnByaW50ZihzdGRlcnIsICJwbGFiZWwgXCIlc1wiXG4i LCBwbGFiZWwpOwoJICovCgoJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgewoJCWlmIChz dHJjbXAoYXJndltpXSwgIi1jIikgPT0gMCB8fAoJCSAgICBzdHJjbXAoYXJndltpXSwgIi0t Y291bnQiKSA9PSAwKQoJCQljb3VudCA9IDE7CgkJZWxzZSBpZiAoc3RyY21wKGFyZ3ZbaV0s ICItcyIpID09IDAgfHwKCQkJIHN0cmNtcChhcmd2W2ldLCAiLS1zbGVlcCIpID09IDApCgkJ CW5hcCA9IGF0b2koYXJndlsrK2ldKTsKCQllbHNlIGlmIChzdHJjbXAoYXJndltpXSwgIi1u IikgPT0gMCB8fAoJCQkgc3RyY21wKGFyZ3ZbaV0sICItLW51bWJlciIpID09IDApCgkJCW51 bWJlciA9IGF0b2koYXJndlsrK2ldKTsKCQllbHNlIGlmIChzdHJjbXAoYXJndltpXSwgIi1v IikgPT0gMCB8fAoJCQkgc3RyY21wKGFyZ3ZbaV0sICItLW91dCIpID09IDApCgkJCW91dGxh YmVsc1tvbGNvdW50KytdID0gYXJndlsrK2ldOwoJCWVsc2UgaWYgKHN0cmNtcChhcmd2W2ld LCAiLXAiKSA9PSAwIHx8CgkJCSBzdHJjbXAoYXJndltpXSwgIi0tcGF0aCIpID09IDApCgkJ CXBhdGggPSBhcmd2WysraV07CgkJZWxzZQoJCQlmcHJpbnRmKHN0ZGVyciwgImFyZyBcIiVz XCIgaWdub3JlZFxuIiwgYXJndltpXSk7Cgl9CgkgCglpZiAoKHNvY2sgPSBzb2NrZXQoQUZf VU5JWCwgU09DS19ER1JBTSwgMCkpIDwgMCkgeyAKCQlwZXJyb3IoInNvY2tldCIpOwoJCWV4 aXQoMSk7Cgl9CgoJc3VuLnN1bl9mYW1pbHkgPSBBRl9VTklYOwoJc3RyY3B5KHN1bi5zdW5f cGF0aCwgcGF0aCk7CgoJZm9yIChjcCA9IG91dGxhYmVsc1swXSwgb2xuID0gMDsgbnVtYmVy ICE9IDA7IG51bWJlci0tKSB7CgkJaWYgKGNvdW50ICE9IDApCgkJCXNwcmludGYoYnVmZmVy LCAiJXMgJWQiLCBvdXRsYWJlbHNbb2xuXSwgY291bnQrKyk7CgkJZWxzZQoJCQlzcHJpbnRm KGJ1ZmZlciwgIiVzIiwgb3V0bGFiZWxzW29sbl0pOwoKCQlpZiAob2xjb3VudCA+IDApIHsK CQkJaSA9IGZzZXR4YXR0cihzb2NrLCAic2VjdXJpdHkuU01BQ0s2NElQT1VUIiwKCQkJCW91 dGxhYmVsc1tvbG5dLCBzdHJsZW4ob3V0bGFiZWxzW29sbl0pKzEsIDApOwoJCQljcCA9IG91 dGxhYmVsc1tvbG5dOwoJCQlpZiAoKytvbG4gPj0gb2xjb3VudCkKCQkJCW9sbiA9IDA7CgkJ CWlmIChpIDwgMCkgewoJCQkJZnByaW50ZihzdGRlcnIsICJGYWlsZWQgXCIlc1wiICIsIGNw KTsKCQkJCXBlcnJvcigiZnNldHhhdHRyIik7CgkJCX0KCQl9CgkJCQoJCWlmIChzZW5kdG8o c29jaywgYnVmZmVyLCBzdHJsZW4oYnVmZmVyKSArIDEsIDAsIAoJCQkgICAoc3RydWN0IHNv Y2thZGRyICopICZzdW4sIHNpemVvZihzdW4pKSA8IDApIHsKCQkJZnByaW50ZihzdGRlcnIs ICJGYWlsZWQgXCIlc1wiICIsIGNwKTsKCQkJcGVycm9yKCJzZW5kdG8iKTsKCQl9CgoJCWlm IChuYXAgPiAwKQoJCQlzbGVlcChuYXApOwoJfQoKCWNsb3NlKHNvY2spOwoKCXJldHVybiAw Owp9CgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAB0b29scy0yMDEyL3Rlc3R0Y3Bsb2NhbC5zaAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAMDAwMDc1NQAwMDAxNzUwADAwMDE3NTAAMDAwMDAwMDAyNDQAMTI3MzU1 NjAyMTMAMDE2NjY0ACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAHVzdGFyICAAY3NjaGF1ZmxlcgAAAAAAAAAAAAAAAAAAAAAAAAAAAABjc2NoYXVm bGVyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMhIC9iaW4v YmFzaAojCgouL25ld3NtYWNrIFNuYXAgLi9zbWFja2VjaG8gLXYgLXAgODIwMCAmCi4vbmV3 c21hY2sgU25hcCAuL3NtYWNrdG9tdXggLXIgLW4gMiAtcCA4MjAwCi4vbmV3c21hY2sgUG9w IC4vc21hY2t0b211eCAtciAtbiAyIC1wIDgyMDAKa2lsbGFsbCBzbWFja2VjaG8KAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAdG9vbHMtMjAxMi90ZXN0cG9seWlwbG9jYWwuc2gAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAADAwMDA3NTUAMDAwMTc1MAAwMDAxNzUwADAwMDAwMDAyMjU3ADEyNzM1NTYw MjEyADAxNzQxNwAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAB1c3RhciAgAGNzY2hhdWZsZXIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY3NjaGF1Zmxl cgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjIS9iaW4vc2gK IwojIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4KIyBDb3B5cmlnaHQg KEMpIDIwMTIgQ2FzZXkgU2NoYXVmbGVyIDxjYXNleUBzY2hhdWZsZXItY2EuY29tPgojCiMK Ci4vc21hY2tpbiAtaSAnKicgJgoKLi9zbWFja3BvbHlwb3J0IC1jIDgwMDAgXAoJLXMgODIw MTpTbmFwIFwKCS1zIDgyMDI6Q3JhY2tsZSBcCgktcyA4MjAzOlBvcCBcCgktcyA4MjA0OlRp Y2t5VGlja3lUaWNreVNwYXRoYW5nV2hvbyBcCgktcyA4MjA2OlJpY2UgXAoJLXMgODIwNzpD cmlzcGllcyBcCgktcyA4MjA4OkFuZCBcCgktcyA4MjA5Ok1pbGsgXAoJLW0gODIwNTpfICYK CnNsZWVwIDMKCi4vbmV3c21hY2sgU25hcAkJCQkJLi9zbWFja2VjaG8gLXAgODIwMSAmCi4v bmV3c21hY2sgQ3JhY2tsZQkJCQkuL3NtYWNrZWNobyAtcCA4MjAyICYKLi9uZXdzbWFjayBQ b3AJCQkJCS4vc21hY2tlY2hvIC1wIDgyMDMgJgouL25ld3NtYWNrIFJpY2UJCQkJCS4vc21h Y2tlY2hvIC1wIDgyMDYgJgouL25ld3NtYWNrIENyaXNwaWVzCQkJCS4vc21hY2tlY2hvIC1w IDgyMDcgJgouL25ld3NtYWNrIEFuZAkJCQkJLi9zbWFja2VjaG8gLXAgODIwOCAmCi4vbmV3 c21hY2sgTWlsawkJCQkJLi9zbWFja2VjaG8gLXAgODIwOSAmCi4vbmV3c21hY2sgVGlja3lU aWNreVRpY2t5U3BhdGhhbmdXaG9vCQkuL3NtYWNrZWNobyAtcCA4MjA0ICYKLi9uZXdzbWFj ayBfCQkJCQkuL3NtYWNrZWNobyAtcCA4MjA1ICYKCnNsZWVwIDMKCi4vc21hY2tvdXQgLW8g U25hcCAtbyBDcmFja2xlIC1vIFBvcCAtbyBUaWNreVRpY2t5VGlja3lTcGF0aGFuZ1dob28g LXMgMCAmCgouL25ld3NtYWNrIFNuYXAJCQkJLi9zbWFja3RvbXV4IC1zIDAgJgouL25ld3Nt YWNrIENyYWNrbGUJCQkuL3NtYWNrdG9tdXggLXMgMCAmCi4vbmV3c21hY2sgUG9wCQkJCS4v c21hY2t0b211eCAtcyAwICYKLi9uZXdzbWFjayBSaWNlCQkJCS4vc21hY2t0b211eCAtcyAw ICYKLi9uZXdzbWFjayBDcmlzcGllcwkJCS4vc21hY2t0b211eCAtcyAwICYKLi9uZXdzbWFj ayBBbmQJCQkJLi9zbWFja3RvbXV4IC1zIDAgJgouL25ld3NtYWNrIE1pbGsJCQkJLi9zbWFj a3RvbXV4IC1zIDAgJgouL25ld3NtYWNrIFRpY2t5VGlja3lUaWNreVNwYXRoYW5nV2hvbwku L3NtYWNrdG9tdXggLXMgMCAmCi4vbmV3c21hY2sgXwkJCQkuL3NtYWNrdG9tdXggLXMgMCAm CgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAB0b29scy0yMDEyL3N0b3Bwb2x5aXBsb2NhbC5zaAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAMDAwMDc1NQAwMDAxNzUwADAwMDE3NTAAMDAwMDAwMDAzMjMAMTI3MzU1NjAyMTMA MDE3NDE2ACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AHVzdGFyICAAY3NjaGF1ZmxlcgAAAAAAAAAAAAAAAAAAAAAAAAAAAABjc2NoYXVmbGVyAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMhL2Jpbi9zaAojCiMg Q29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLgojIENvcHlyaWdodCAoQykg MjAxMiBDYXNleSBTY2hhdWZsZXIgPGNhc2V5QHNjaGF1Zmxlci1jYS5jb20+CiMKIwoKa2ls bGFsbCBzbWFja3RvbXV4CmtpbGxhbGwgc21hY2tvdXQKa2lsbGFsbCBzbWFja2VjaG8Ka2ls bGFsbCBzbWFja3BvbHlwb3J0CmtpbGxhbGwgc21hY2tpbgoAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAdG9vbHMtMjAxMi9zbWFja3JlY3Ztc2cuYwAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAADAwMDA2NDQAMDAwMTc1MAAwMDAxNzUwADAwMDAwMDAzMjU0ADEyNzM1NTYwMjEzADAx NjQ2MQAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1 c3RhciAgAGNzY2hhdWZsZXIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY3NjaGF1ZmxlcgAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvKgogKiBDb3B5cmlnaHQg KEMpIDIwMDcgQ2FzZXkgU2NoYXVmbGVyIDxjYXNleUBzY2hhdWZsZXItY2EuY29tPgogKgog KglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQogKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogKgl0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCiAqCiAqIEF1dGhvcnM6CiAqCUNhc2V5IFNjaGF1 ZmxlciA8Y2FzZXlAc2NoYXVmbGVyLWNhLmNvbT4KICoJQWhtZWQgUy4gRGFyd2lzaCA8ZGFy d2lzaC4wN0BnbWFpbC5jb20+CiAqLwoKI2luY2x1ZGUgPHN5cy90eXBlcy5oPgojaW5jbHVk ZSA8c3lzL3NvY2tldC5oPgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0cmluZy5o PgojaW5jbHVkZSA8ZXJybm8uaD4KI2luY2x1ZGUgInNtYWNrdG9vbHMuaCIKCmludCBzbWFj a3JlY3Ztc2coaW50IHNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZ3AsIGludCBmbGFncywKCQkg Y2hhciAqc21hY2ssIGludCBzbWFja2xlbikKewoJc3RydWN0IGNtc2doZHIgKmNocDsKCWNo YXIgKmNwOwoJaW50IHJsZW47CglpbnQgbGVuOwoJaW50IHJjOwoKCXJjID0gcmVjdm1zZyhz b2NrLCBtc2dwLCBmbGFncyk7CglpZiAocmMgPCAwKSB7CgkJcGVycm9yKCJyZWN2bXNnIGVy cm9yIik7CgkJcmV0dXJuIC0xOwoJfQoJaWYgKG1zZ3AtPm1zZ19jb250cm9sbGVuIDw9IHNp emVvZihzdHJ1Y3QgY21zZ2hkcikpIHsKCQlmcHJpbnRmKHN0ZGVyciwgIiVzIG91dCBvZiBj b250cm9sICVkIDw9ICVkXG4iLCBfX2Z1bmNfXywKCQkJbXNncC0+bXNnX2NvbnRyb2xsZW4s IHNpemVvZihzdHJ1Y3QgY21zZ2hkcikpOwoJCXJldHVybiAtMTsKCX0KCWNocCA9IENNU0df RklSU1RIRFIobXNncCk7CglpZiAoY2hwLT5jbXNnX3R5cGUgIT0gU0NNX1NFQ1VSSVRZKSB7 CgkJZnByaW50ZihzdGRlcnIsICIlcyB0eXBlIG5vdCBTQ01fU0VDVVJJVFlcbiIsIF9fZnVu Y19fKTsKCQlyZXR1cm4gLTE7Cgl9CgljcCA9IChjaGFyICopIENNU0dfREFUQShjaHApOwoJ bGVuID0gY2hwLT5jbXNnX2xlbiAtIChjcCAtIChjaGFyICopY2hwKTsKCWlmIChsZW4gPCAx KSB7CgkJZnByaW50ZihzdGRlcnIsICIlcyBjbXNnX2xlbiAlZCB0b28gc21hbGxcbiIsIF9f ZnVuY19fLAoJCQljaHAtPmNtc2dfbGVuKTsKCQlyZXR1cm4gLTE7Cgl9CglybGVuID0gc3Ry bGVuKGNwKTsKCWlmIChybGVuICE9IGxlbiAmJiBybGVuICE9IGxlbiAtIDEpIHsKCQlmcHJp bnRmKHN0ZGVyciwgIiVzIGxlbiAlZCBub3Qgc3RybGVuICVkIFwiJXNcIlxuIiwgX19mdW5j X18sCgkJCWxlbiwgcmxlbiwgY3ApOwoJCXJldHVybiAtMTsKCX0KCWlmIChybGVuID49IHNt YWNrbGVuKSB7CgkJZnByaW50ZihzdGRlcnIsICIlcyBsZW4gJWQgdG9vIHNtYWxsLCBzbWFj ayBpcyAlZFxuIiwgX19mdW5jX18sCgkJCXNtYWNrbGVuLCBybGVuKTsKCQlyZXR1cm4gLTE7 Cgl9CglpZiAoY2hwLT5jbXNnX2xlbiA+PSBzbWFja2xlbikgewoJCWZwcmludGYoc3RkZXJy LCAiJXMgbGVuICVkIHRvbyBzbWFsbCwgbmVlZGVkICVkXG4iLCBfX2Z1bmNfXywKCQkJc21h Y2tsZW4sIGNocC0+Y21zZ19sZW4pOwoJCXJldHVybiAtMTsKCX0KCXN0cmNweShzbWFjaywg Y3ApOwoJcmV0dXJuIDA7Cn0KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHRvb2xzLTIwMTIvdGVzdGFjY2Vz cy5jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAwNjQ0ADAwMDE3NTAAMDAwMTc1MAAwMDAw MDAwNTQyMQAxMjczNTU2MDIxMwAwMTYxMzMAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIgIABjc2NoYXVmbGVyAAAAAAAAAAAAAAAAAAAA AAAAAAAAAGNzY2hhdWZsZXIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAALyoKICogdGVzdGFjY2VzcyAtIFNlZSBpZiAvc21hY2svYWNjZXNzIGFuZCAvc21h Y2svYWNjZXNzMiB3b3JrCiAqCiAqIENvcHlyaWdodCAoQykgMjAwNyBDYXNleSBTY2hhdWZs ZXIgPGNhc2V5QHNjaGF1Zmxlci1jYS5jb20+CiAqIENvcHlyaWdodCAoQykgMjAxMSBJbnRl bCBDb3Jwb3JhdGlvbi4KICoKICogICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogKiAgICAgIGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVi bGlzaGVkIGJ5CiAqICAgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lv biAyLgogKgogKglUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CiAqCVdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICoJTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQogKglHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqCVlvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogKglMaWNl bnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl IFNvZnR3YXJlCiAqCUZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBG bG9vciwgQm9zdG9uLCBNQQogKgkwMjExMC0xMzAxIFVTQQogKgogKiBBdXRob3JzOgogKiAg ICAgIENhc2V5IFNjaGF1ZmxlciA8Y2FzZXlAc2NoYXVmbGVyLWNhLmNvbT4KICovCgojaW5j bHVkZSA8c3lzL3R5cGVzLmg+CiNpbmNsdWRlIDxzeXMvc3RhdC5oPgojaW5jbHVkZSA8c3lz L3RpbWUuaD4KI2luY2x1ZGUgPHVuaXN0ZC5oPgojaW5jbHVkZSA8ZmNudGwuaD4KI2luY2x1 ZGUgPGdldG9wdC5oPgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgoj aW5jbHVkZSA8c3RyaW5nLmg+CiNpbmNsdWRlIDxlcnJuby5oPgoKY2hhciBsaW5lWzEwMjRd OwoKaW50IHdyaXRlbnJlYWQoaW50IGZkLCBjaGFyICpzcCwgY2hhciAqb3AsIGNoYXIgKmFw LCBjaGFyICpmbXQsIGludCAqZXJyKQp7CgljaGFyIGJhY2tbMl07CglpbnQgcmM7CgoJYmFj a1swXSA9ICdcMCc7CgliYWNrWzFdID0gJ1wwJzsKCSplcnIgPSAwOwoKCXNwcmludGYobGlu ZSwgZm10LCBzcCwgb3AsIGFwKTsKCWlmICgocmMgPSB3cml0ZShmZCwgbGluZSwgc3RybGVu KGxpbmUpKSkgPCAwKSB7CgkJKmVyciA9IGVycm5vOwoJCXJldHVybiAtMTsKCX0KCglpZiAo KHJjID0gcmVhZChmZCwgYmFjaywgMikpIDwgMCkgewoJCSplcnIgPSBlcnJubzsKCQlyZXR1 cm4gLTI7Cgl9CgoJaWYgKGJhY2tbMF0gPT0gJzEnICYmIGJhY2tbMV0gPT0gJ1wwJykKCQly ZXR1cm4gMTsKCWlmIChiYWNrWzBdID09ICcwJyAmJiBiYWNrWzFdID09ICdcMCcpCgkJcmV0 dXJuIDA7CglmcHJpbnRmKHN0ZGVyciwgIlJlYWQgcmV0dXJuZWQgJyVjJyVjJywgbm90IFwi MVwiIG9yIFwiMFwiLlxuIiwKCQliYWNrWzBdLCBiYWNrWzFdKTsKCXJldHVybiAtMzsKfQoK aW50Cm1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKewoJaW50IHJjOwoJaW50IHJjMjsK CWludCBmZDsKCWludCBmZDI7CglpbnQgZXI7CglpbnQgZXIyOwoJaW50IGVjID0gMDsKCgoJ aWYgKHN0cmNtcCgiYWNjZXNzIiwgYXJndlsxXSkgPT0gMCkgewoJCWZkID0gb3BlbigiL3N5 cy9mcy9zbWFja2ZzL2FjY2VzcyIsIE9fUkRXUik7CgkJaWYgKGZkIDwgMCkKCQkJZmQgPSBv cGVuKCIvc21hY2svYWNjZXNzIiwgT19SRFdSKTsKCQlpZiAoZmQgPCAwKSB7CgkJCXBlcnJv cigib3BlbmluZyAvc21hY2svYWNjZXNzIik7CgkJCWV4aXQoNSk7CgkJfQoJCXJjID0gd3Jp dGVucmVhZChmZCwgYXJndlsyXSwgYXJndlszXSwgYXJndls0XSwKCQkJIiUtMjNzICUtMjNz ICUtNXMiLCAmZXIpOwoJfSBlbHNlIGlmIChzdHJjbXAoImFjY2VzczIiLCBhcmd2WzFdKSA9 PSAwKSB7CgkJZmQgPSBvcGVuKCIvc3lzL2ZzL3NtYWNrZnMvYWNjZXNzMiIsIE9fUkRXUik7 CgkJaWYgKGZkIDwgMCkKCQkJZmQgPSBvcGVuKCIvc21hY2svYWNjZXNzMiIsIE9fUkRXUik7 CgkJaWYgKGZkIDwgMCkgewoJCQlwZXJyb3IoIm9wZW5pbmcgL3NtYWNrL2FjY2VzczIiKTsK CQkJZXhpdCg1KTsKCQl9CgkJcmMgPSB3cml0ZW5yZWFkKGZkLCBhcmd2WzJdLCBhcmd2WzNd LCBhcmd2WzRdLAoJCQkiJXMgJXMgJXMiLCAmZXIyKTsKCX0gZWxzZSB7CgkJZnByaW50Zihz dGRlcnIsICIlcyB1bnJlY29nbml6ZWRcbiIsIGFyZ3ZbMV0pOwoJCWV4aXQoNSk7Cgl9CgoJ c3dpdGNoIChyYykgewoJY2FzZSAwOgoJCWZwcmludGYoc3Rkb3V0LCAiZGVuaWVkXG4iKTsK CQlleGl0KDEpOwoJCWJyZWFrOwoJY2FzZSAxOgoJCWZwcmludGYoc3Rkb3V0LCAiYWxsb3dl ZFxuIik7CgkJZXhpdCgwKTsKCQlicmVhazsKCWNhc2UgLTE6CgkJZnByaW50ZihzdGRvdXQs ICJ1bndyaXRlYWJsZVxuIik7CgkJZXhpdCgyKTsKCQlicmVhazsKCWNhc2UgLTI6CgkJZnBy aW50ZihzdGRvdXQsICJ1bnJlYWRhYmxlXG4iKTsKCQlleGl0KDMpOwoJCWJyZWFrOwoJY2Fz ZSAtMzoKCQlmcHJpbnRmKHN0ZG91dCwgIm1hbmdsZWRcbiIpOwoJCWV4aXQoNCk7CgkJYnJl YWs7CglkZWZhdWx0OgoJCWZwcmludGYoc3Rkb3V0LCAiaW1wb3NzaWJsZVxuIik7CgkJZXhp dCg1KTsKCQlicmVhazsKCX0KCglleGl0KDApOwp9CgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ZXRjL3NtYWNrL3VzZXIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDA2NDQA MDAwMDAwMAAwMDAwMDAwADAwMDAwMDAwMDMwADEyNzM1NTY0MzAyADAxMjMyNgAgMAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAHJvb3QA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcm9vdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByb290IF8gKwpjc2NoYXVmbGVyIF8gKwoAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAA== --------------E1D4882907180D428CB925FE--