Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sR06d-00Co8t-FM for pgsql-hackers@arkaria.postgresql.org; Tue, 09 Jul 2024 01:57:24 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1sR06c-00Bh24-4R for pgsql-hackers@arkaria.postgresql.org; Tue, 09 Jul 2024 01:57:22 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sR06b-00Bh1v-HN for pgsql-hackers@lists.postgresql.org; Tue, 09 Jul 2024 01:57:21 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sR06X-0018vN-9o for pgsql-hackers@lists.postgresql.org; Tue, 09 Jul 2024 01:57:20 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1720490235; bh=IxulIJbK/3QrepN1h+ypY5zk7yBd1yqudKOEIpiZoDk=; h=Message-ID:Date:User-Agent:Subject:To:Cc:References:From: In-Reply-To:From; b=WGZ4AF+Tx/Ig+3yXKOvYt4ZLjazNkRk5QVtRyxYAX9JUUqR0kEAYa6TJ1HGMSZGv6 u1dW+dTkFiagSzwDakxiGUHpIhU6VC51ILjOyUqLwSE8anVgKW7m21cvHFrau231XP mkhPS1jie8F5J4MRr7V2pq0+swAwx/OZCp0PLzQ8jGfJgci/9hP5OcKIVONO/DMByw aGPBIE6Ppf0IsJfPZaH0vjfXJL5own8YfyMjASh5gb/3zgoiR6fLBQMyi7S5EZh58N d9VgrA3h5U4/XP2MVIMedEUGk+6TWJkMfD9tJCLLIE/kmwvKYq18mLHTgghcaRF+UJ M5+zY1eSzkl1g== Received: from [192.168.113.77] (unknown [176.59.43.77]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (Client did not present a certificate) (Authenticated sender: a.rybakina@postgrespro.ru) by mail.postgrespro.ru (Postfix/587) with ESMTPSA id EDF5E6026F; Tue, 9 Jul 2024 04:57:13 +0300 (MSK) Content-Type: multipart/mixed; boundary="------------0cWM3CzSCNW7AN2YbcHP0bn0" Message-ID: Date: Tue, 9 Jul 2024 04:57:15 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: POC, WIP: OR-clause support for indexes To: Nikolay Shaplov , pgsql-hackers@lists.postgresql.org Cc: Alexander Korotkov , Andrei Lepikhov , jian he , Robert Haas , pgsql-hackers@postgresql.org, Peter Geoghegan , "Finnerty, Jim" , Marcos Pegoraro , teodor@sigaev.ru, Tomas Vondra , Peter Eisentraut , Ranier Vilela References: <567ED6CA.2040504@sigaev.ru> <196b44d5-f4e5-41a0-9a8f-9fbf26a13760@postgrespro.ru> <9736220.CDJkKcVGEf@thinkpad-pgpro> <2193851.QkHrqEjB74@thinkpad-pgpro> Content-Language: en-US From: Alena Rybakina In-Reply-To: <2193851.QkHrqEjB74@thinkpad-pgpro> X-KSMG-AntiPhishing: NotDetected, bases: 2024/07/09 00:55:00 X-KSMG-AntiSpam-Interceptor-Info: not scanned X-KSMG-AntiSpam-Status: not scanned, disabled by settings X-KSMG-AntiVirus: Kaspersky Secure Mail Gateway, version 2.1.0.7854, bases: 2024/07/09 01:08:00 #25913379 X-KSMG-AntiVirus-Status: NotDetected, skipped X-KSMG-LinksScanning: not scanned, disabled by settings X-KSMG-Message-Action: skipped X-KSMG-Rule-ID: 1 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------0cWM3CzSCNW7AN2YbcHP0bn0 Content-Type: multipart/alternative; boundary="------------40s7vvgpEpoGafyTbtOhFyOY" --------------40s7vvgpEpoGafyTbtOhFyOY Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi! Thank you for your review! Sorryforthe delayin responding. Irewrotethe patchasyourequested,butnowI'm facedwiththe problemof processingthe elementsof the or_entries list.For somereason, thepointerto thelistis cleared and I couldn't find the place where it happened.MaybeI'mmissingsomethingsimpleinviewof the heavyworkloadright now,butmaybeyou'll seea problem?Ihave displayedpart of stackbelow. #5 0x00005b0f6d9f6a6a in ExceptionalCondition (conditionName=0x5b0f6dbb74f7 "IsPointerList(list)", fileName=0x5b0f6dbb7418 "list.c", lineNumber=341) at assert.c:66 #6 0x00005b0f6d5dc3ba in lappend (list=0x5b0f6eec5ca0, datum=0x5b0f6eec0d90) at list.c:341 #7 0x00005b0f6d69230c in transform_or_to_any (root=0x5b0f6eeb13c8, orlist=0x5b0f6eec57c0) at initsplan.c:2818 #8 0x00005b0f6d692958 in add_base_clause_to_rel (root=0x5b0f6eeb13c8, relid=1, restrictinfo=0x5b0f6eec5990) at initsplan.c:2982 #9 0x00005b0f6d692e5f in distribute_restrictinfo_to_rels (root=0x5b0f6eeb13c8, restrictinfo=0x5b0f6eec5990) at initsplan.c:3175 #10 0x00005b0f6d691bf2 in distribute_qual_to_rels (root=0x5b0f6eeb13c8, clause=0x5b0f6eec0fc0, jtitem=0x5b0f6eec4330, sjinfo=0x0, security_level=0, qualscope=0x5b0f6eec4730, ojscope=0x0, outerjoin_nonnullable=0x0, incompatible_relids=0x0, allow_equivalence=true, has_clone=false, is_clone=false, postponed_oj_qual_list=0x0) at initsplan.c:2576 #11 0x00005b0f6d69146f in distribute_quals_to_rels (root=0x5b0f6eeb13c8, clauses=0x5b0f6eec0bb0, jtitem=0x5b0f6eec4330, sjinfo=0x0, security_level=0, qualscope=0x5b0f6eec4730, ojscope=0x0, outerjoin_nonnullable=0x0, incompatible_relids=0x0, allow_equivalence=true, has_clone=false, is_clone=false, postponed_oj_qual_list=0x0) at initsplan.c:2144 Thisis stillthe firstiterationof the fixesyouhave proposed,soI have attachedthe patchindiffformat.I rewroteit,asyousuggestedinthe firstletter[0].Icreateda separatefunctionthattriesto forman OrClauseGroup node,butifit failsinthis, it returnsfalse,otherwiseit processesthe generatedelementaccordingtowhat it found-eitheraddsit to thelistasnew,oraddsa constantto anexistingone. Ialsodividedonegenerallistof suitableforconversionandunsuitableintotwodifferentones:appropriate_entriesandor_entries.Nowweare onlylookinginthe listof suitableelementstoformANYexpr. Thishelpsusto get ridofrepetitionsinthe codeyoumentioned. Pleasewriteifthisis notthelogicthatyouhave seenbefore. [0] https://www.postgresql.org/message-id/3381819.e9J7NaK4W3%40thinkpad-pgpro -- Regards, Alena Rybakina Postgres Professional:http://www.postgrespro.com The Russian Postgres Company --------------40s7vvgpEpoGafyTbtOhFyOY Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 7bit

Hi! Thank you for your review! Sorry for the delay in responding.

I rewrote the patch as you requested, but now I'm faced with the problem of processing the elements of the or_entries list. For some reason, the pointer to the list is cleared and I couldn't find the place where it happened. Maybe I'm missing something simple in view of the heavy workload right now, but maybe you'll see a problem? I have displayed part of stack below.

#5 0x00005b0f6d9f6a6a in ExceptionalCondition (conditionName=0x5b0f6dbb74f7 "IsPointerList(list)", fileName=0x5b0f6dbb7418 "list.c", lineNumber=341) at assert.c:66 #6 0x00005b0f6d5dc3ba in lappend (list=0x5b0f6eec5ca0, datum=0x5b0f6eec0d90) at list.c:341 #7 0x00005b0f6d69230c in transform_or_to_any (root=0x5b0f6eeb13c8, orlist=0x5b0f6eec57c0) at initsplan.c:2818 #8 0x00005b0f6d692958 in add_base_clause_to_rel (root=0x5b0f6eeb13c8, relid=1, restrictinfo=0x5b0f6eec5990) at initsplan.c:2982 #9 0x00005b0f6d692e5f in distribute_restrictinfo_to_rels (root=0x5b0f6eeb13c8, restrictinfo=0x5b0f6eec5990) at initsplan.c:3175 #10 0x00005b0f6d691bf2 in distribute_qual_to_rels (root=0x5b0f6eeb13c8, clause=0x5b0f6eec0fc0, jtitem=0x5b0f6eec4330, sjinfo=0x0, security_level=0, qualscope=0x5b0f6eec4730, ojscope=0x0, outerjoin_nonnullable=0x0, incompatible_relids=0x0, allow_equivalence=true, has_clone=false, is_clone=false, postponed_oj_qual_list=0x0) at initsplan.c:2576 #11 0x00005b0f6d69146f in distribute_quals_to_rels (root=0x5b0f6eeb13c8, clauses=0x5b0f6eec0bb0, jtitem=0x5b0f6eec4330, sjinfo=0x0, security_level=0, qualscope=0x5b0f6eec4730, ojscope=0x0, outerjoin_nonnullable=0x0, incompatible_relids=0x0, allow_equivalence=true, has_clone=false, is_clone=false, postponed_oj_qual_list=0x0) at initsplan.c:2144

This is still the first iteration of the fixes you have proposed, so I have attached the patch in diff format. I rewrote it, as you suggested in the first letter [0]. I created a separate function that tries to form an OrClauseGroup node, but if it fails in this, it returns false, otherwise it processes the generated element according to what it found - either adds it to the list as new, or adds a constant to an existing one.

I also divided one general list of suitable for conversion and unsuitable into two different ones: appropriate_entries and or_entries. Now we are only looking in the list of suitable elements to form ANY expr.

This helps us to get rid of repetitions in the code you mentioned. Please write if this is not the logic that you have seen before.

[0] https://www.postgresql.org/message-id/3381819.e9J7NaK4W3%40thinkpad-pgpro

-- 
Regards,
Alena Rybakina
Postgres Professional: http://www.postgrespro.com
The Russian Postgres Company
--------------40s7vvgpEpoGafyTbtOhFyOY-- --------------0cWM3CzSCNW7AN2YbcHP0bn0 Content-Type: text/x-patch; charset=UTF-8; name="or.diff" Content-Disposition: attachment; filename="or.diff" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2luaXRzcGxhbi5jIGIv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vaW5pdHNwbGFuLmMKaW5kZXggZTJjNjhmZTZm OTkuLjFmZGFkYTU0ZTIzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9pbml0c3BsYW4uYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9pbml0c3Bs YW4uYwpAQCAtMTQsOSArMTQsMTMgQEAKICAqLwogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAK KyNpbmNsdWRlICJjYXRhbG9nL25hbWVzcGFjZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdf b3BlcmF0b3IuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKKyNpbmNsdWRlICJj b21tb24vaGFzaGZuLmgiCiAjaW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCiAjaW5jbHVk ZSAibm9kZXMvbm9kZUZ1bmNzLmgiCisjaW5jbHVkZSAibm9kZXMvcXVlcnlqdW1ibGUuaCIK ICNpbmNsdWRlICJvcHRpbWl6ZXIvY2xhdXNlcy5oIgogI2luY2x1ZGUgIm9wdGltaXplci9j b3N0LmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL2luaGVyaXQuaCIKQEAgLTI5LDggKzMzLDEx IEBACiAjaW5jbHVkZSAib3B0aW1pemVyL3BsYW5uZXIuaCIKICNpbmNsdWRlICJvcHRpbWl6 ZXIvcmVzdHJpY3RpbmZvLmgiCiAjaW5jbHVkZSAicGFyc2VyL2FuYWx5emUuaCIKKyNpbmNs dWRlICJwYXJzZXIvcGFyc2VfY29lcmNlLmgiCisjaW5jbHVkZSAicGFyc2VyL3BhcnNlX29w ZXIuaCIKICNpbmNsdWRlICJyZXdyaXRlL3Jld3JpdGVNYW5pcC5oIgogI2luY2x1ZGUgInV0 aWxzL2xzeXNjYWNoZS5oIgorI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCiAjaW5jbHVk ZSAidXRpbHMvcmVsLmgiCiAjaW5jbHVkZSAidXRpbHMvdHlwY2FjaGUuaCIKIApAQCAtMzgs NyArNDUsNiBAQAogaW50CQkJZnJvbV9jb2xsYXBzZV9saW1pdDsKIGludAkJCWpvaW5fY29s bGFwc2VfbGltaXQ7CiAKLQogLyoKICAqIGRlY29uc3RydWN0X2pvaW50cmVlIHJlcXVpcmVz IG11bHRpcGxlIHBhc3NlcyBvdmVyIHRoZSBqb2luIHRyZWUsIGJlY2F1c2Ugd2UKICAqIG5l ZWQgdG8gZmluaXNoIGNvbXB1dGluZyBKb2luRG9tYWlucyBiZWZvcmUgd2Ugc3RhcnQgZGlz dHJpYnV0aW5nIHF1YWxzLgpAQCAtMjYxNyw2ICsyNjIzLDI4NyBAQCBjaGVja19yZWR1bmRh bnRfbnVsbGFiaWxpdHlfcXVhbChQbGFubmVySW5mbyAqcm9vdCwgTm9kZSAqY2xhdXNlKQog CXJldHVybiBmYWxzZTsKIH0KIAorc3RhdGljIGJvb2wKK3RyeV9nZXRfYXBwcm9wcmlhYmxl X2dyb3VwKFJlc3RyaWN0SW5mbyAqcmluZm8sIExpc3QgKiphcHByb3ByaWF0ZV9ncm91cCkK K3sKKwlPcEV4cHIJICAgKm9ycXVhbDsKKwlOb2RlCSAgICpjb25zdF9leHByOworCU5vZGUJ ICAgKm5jb25zdF9leHByOworCU9pZAkJCW9wbm87CisJT2lkCQkJY29uc3R0eXBlOworCU5v ZGUJICAgKmxlZnRvcCwKKwkJCQkqcmlnaHRvcDsKKwlMaXN0Q2VsbCAgICpsYzI7CisJYm9v bCBmb3VuZCA9IGZhbHNlOworCU9yQ2xhdXNlR3JvdXAgKmVudHJ5OworCisJaWYgKCFJc0Eo cmluZm8sIFJlc3RyaWN0SW5mbykgfHwgIUlzQShyaW5mby0+Y2xhdXNlLCBPcEV4cHIpKQor CXsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCW9ycXVhbCA9IChPcEV4cHIgKikgcmluZm8t PmNsYXVzZTsKKwlvcG5vID0gb3JxdWFsLT5vcG5vOworCWlmIChnZXRfb3BfcmV0dHlwZShv cG5vKSAhPSBCT09MT0lEKQorCXsKKwkJLyogT25seSBvcGVyYXRvciByZXR1cm5pbmcgYm9v bGVhbiBzdWl0cyBPUiAtPiBBTlkgdHJhbnNmb3JtYXRpb24gKi8KKwkJcmV0dXJuIGZhbHNl OworCX0KKworCS8qCisJCSogRGV0ZWN0IHRoZSBjb25zdGFudCBzaWRlIG9mIHRoZSBjbGF1 c2UuIFJlY2FsbCBub24tY29uc3RhbnQKKwkJKiBleHByZXNzaW9uIGNhbiBiZSBtYWRlIG5v dCBvbmx5IHdpdGggVmFycywgYnV0IGFsc28gd2l0aCBQYXJhbXMsCisJCSogd2hpY2ggaXMg bm90IGJvbmRlZCB3aXRoIGFueSByZWxhdGlvbi4gVGh1cywgd2UgZGV0ZWN0IHRoZSBjb25z dAorCQkqIHNpZGUgLSBpZiBhbm90aGVyIHNpZGUgaXMgY29uc3RhbnQgdG9vLCB0aGUgb3Jx dWFsIGNvdWxkbid0IGJlIGFuCisJCSogT3BFeHByLiAgR2V0IHBvaW50ZXJzIHRvIGNvbnN0 YW50IGFuZCBleHByZXNzaW9uIHNpZGVzIG9mIHRoZSBxdWFsLgorCQkqLworCWxlZnRvcCA9 IGdldF9sZWZ0b3Aob3JxdWFsKTsKKwlpZiAoSXNBKGxlZnRvcCwgUmVsYWJlbFR5cGUpKQor CQlsZWZ0b3AgPSAoTm9kZSAqKSAoKFJlbGFiZWxUeXBlICopIGxlZnRvcCktPmFyZzsKKwor CXJpZ2h0b3AgPSBnZXRfcmlnaHRvcChvcnF1YWwpOworCWlmIChJc0EocmlnaHRvcCwgUmVs YWJlbFR5cGUpKQorCQlyaWdodG9wID0gKE5vZGUgKikgKChSZWxhYmVsVHlwZSAqKSByaWdo dG9wKS0+YXJnOworCisJaWYgKElzQShsZWZ0b3AsIENvbnN0KSB8fCBJc0EobGVmdG9wLCBQ YXJhbSkpCisJeworCQlvcG5vID0gZ2V0X2NvbW11dGF0b3Iob3Bubyk7CisKKwkJaWYgKCFP aWRJc1ZhbGlkKG9wbm8pKQorCQl7LyogY29tbXV0YXRvciBkb2Vzbid0IGV4aXN0LCB3ZSBj YW4ndCByZXZlcnNlIHRoZSBvcmRlciAqLworCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJ bmNvbnN0X2V4cHIgPSBnZXRfcmlnaHRvcChvcnF1YWwpOworCQljb25zdF9leHByID0gZ2V0 X2xlZnRvcChvcnF1YWwpOworCX0KKwllbHNlIGlmIChJc0EocmlnaHRvcCwgQ29uc3QpIHx8 IElzQShyaWdodG9wLCBQYXJhbSkpCisJeworCQljb25zdF9leHByID0gZ2V0X3JpZ2h0b3Ao b3JxdWFsKTsKKwkJbmNvbnN0X2V4cHIgPSBnZXRfbGVmdG9wKG9ycXVhbCk7CisJfQorCWVs c2UKKwl7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKgorCQkqIEZvcmJpZCB0cmFuc2Zv cm1hdGlvbiBmb3IgY29tcG9zaXRlIHR5cGVzLCByZWNvcmRzLCBhbmQgdm9sYXRpbGUKKwkJ KiBleHByZXNzaW9ucy4KKwkJKi8KKwljb25zdHR5cGUgPSBleHByVHlwZShjb25zdF9leHBy KTsKKwlpZiAodHlwZV9pc19yb3d0eXBlKGV4cHJUeXBlKGNvbnN0X2V4cHIpKSB8fAorCQl0 eXBlX2lzX3Jvd3R5cGUoY29uc3R0eXBlKSB8fAorCQljb250YWluX3ZvbGF0aWxlX2Z1bmN0 aW9ucygoTm9kZSAqKSBuY29uc3RfZXhwcikpCisJeworCQlyZXR1cm4gZmFsc2U7CisJfQor CisJZW50cnkgPSBtYWtlTm9kZShPckNsYXVzZUdyb3VwKTsKKworCWZvcmVhY2gobGMyLCAq YXBwcm9wcmlhdGVfZ3JvdXApCisJeworCisJCWlmICghSXNBKGxmaXJzdChsYzIpLCBPckNs YXVzZUdyb3VwKSkKKwkJCUFzc2VydCgwKTsKKworCQllbnRyeSA9IChPckNsYXVzZUdyb3Vw ICopIGxmaXJzdChsYzIpOworCisJCWlmIChlbnRyeS0+b3BubyA9PSBvcG5vICYmCisJCQll bnRyeS0+Y29uc3R0eXBlID09IGNvbnN0dHlwZSAmJgorCQkJZW50cnktPmlucHV0Y29sbGlk ID09IGV4cHJDb2xsYXRpb24oY29uc3RfZXhwcikgJiYKKwkJCWVxdWFsKGVudHJ5LT5leHBy LCBuY29uc3RfZXhwcikpCisJCXsKKwkJCWZvdW5kID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9 CisJfQorCisJaWYgKCFmb3VuZCkKKwl7CisJCWVudHJ5LT5leHByID0gKEV4cHIgKikgbmNv bnN0X2V4cHI7CisJCWVudHJ5LT5leHBycyA9IGxpc3RfbWFrZTEoKHZvaWQgKikgb3JxdWFs KTsKKwkJZW50cnktPm9wbm8gPSBvcG5vOworCQllbnRyeS0+aW5wdXRjb2xsaWQgPSBleHBy Q29sbGF0aW9uKGNvbnN0X2V4cHIpOworCQllbnRyeS0+Y29uc3R0eXBlID0gY29uc3R0eXBl OworCQllbnRyeS0+Y29uc3RzID0gbGlzdF9tYWtlMShjb25zdF9leHByKTsKKwkJKmFwcHJv cHJpYXRlX2dyb3VwID0gbGFwcGVuZCgqYXBwcm9wcmlhdGVfZ3JvdXAsIGVudHJ5KTsKKwl9 CisJZWxzZQorCXsKKwkJZW50cnktPmNvbnN0cyA9IGxhcHBlbmQoZW50cnktPmNvbnN0cywg Y29uc3RfZXhwcik7CisJCWVudHJ5LT5leHBycyA9IGxhcHBlbmQoZW50cnktPmV4cHJzLCAo dm9pZCAqKSBvcnF1YWwpOworCX0KKworCXJldHVybiB0cnVlOworfQorCisvKgorICogdHJh bnNmb3JtX29yX3RvX2FueSAtCisgKgkgIERpc2NvdmVyIHRoZSBhcmdzIG9mIGFuIE9SIGV4 cHJlc3Npb24gYW5kIHRyeSB0byBncm91cCBzaW1pbGFyIE9SCisgKgkgIGV4cHJlc3Npb25z IHRvIFNBT1AgZXhwcmVzc2lvbnMuCisgKgorICogVGhpcyB0cmFuc2Zvcm1hdGlvbiBncm91 cHMgdHdvLXNpZGVkIGVxdWFsaXR5IGV4cHJlc3Npb24uICBPbmUgc2lkZSBvZgorICogc3Vj aCBhbiBleHByZXNzaW9uIG11c3QgYmUgYSBwbGFpbiBjb25zdGFudCBvciBjb25zdGFudCBl eHByZXNzaW9uLiAgVGhlCisgKiBvdGhlciBzaWRlIG11c3QgYmUgYSB2YXJpYWJsZSBleHBy ZXNzaW9uIHdpdGhvdXQgdm9sYXRpbGUgZnVuY3Rpb25zLgorICogVG8gZ3JvdXAgcXVhbHMs IG9wbm8sIGlucHV0Y29sbGlkIG9mIHZhcmlhYmxlIGV4cHJlc3Npb24sIGFuZCB0eXBlIG9m CisgKiBjb25zdGFudCBleHByZXNzaW9uIG11c3QgYmUgZXF1YWwgdG9vLgorICoKKyAqIFRo ZSBncm91cGluZyB0ZWNobmlxdWUgaXMgYmFzZWQgb24gdGhlIGVxdWl2YWxlbmNlIG9mIHZh cmlhYmxlIHNpZGVzIG9mCisgKiB0aGUgZXhwcmVzc2lvbjogdXNpbmcgZXhwcklkIGFuZCBl cXVhbCgpIHJvdXRpbmUsIGl0IGdyb3VwcyBjb25zdGFudCBzaWRlcworICogb2Ygc2ltaWxh ciBjbGF1c2VzIGludG8gYW4gYXJyYXkuICBBZnRlciB0aGUgZ3JvdXBpbmcgcHJvY2VkdXJl LCBlYWNoCisgKiBjb3VwbGUgKCd2YXJpYWJsZSBleHByZXNzaW9uJyBhbmQgJ2NvbnN0YW50 IGFycmF5JykgZm9ybXMgYSBuZXcgU0FPUAorICogb3BlcmF0aW9uLCB3aGljaCBpcyBhZGRl ZCB0byB0aGUgYXJncyBsaXN0IG9mIHRoZSByZXR1cm5pbmcgZXhwcmVzc2lvbi4KKyAqLwor c3RhdGljIExpc3QgKgordHJhbnNmb3JtX29yX3RvX2FueShQbGFubmVySW5mbyAqcm9vdCwg TGlzdCAqb3JsaXN0KQoreworCUxpc3QJICAgKmFwcHJvcHJpYXRlX2VudHJpZXMgPSBOSUw7 CisJTGlzdAkgICAqb3JfZW50cmllcyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpsYzsKKwlpbnQJ CQlsZW5fb3JzID0gbGlzdF9sZW5ndGgob3JsaXN0KTsKKwlPckNsYXVzZUdyb3VwICplbnRy eSA9IE5VTEw7CisJYm9vbCBmb3VuZDsKKworCUFzc2VydChsZW5fb3JzID49IDIpOworCisJ Zm9yZWFjaChsYywgb3JsaXN0KQorCXsKKwkJUmVzdHJpY3RJbmZvICpyaW5mbyA9IChSZXN0 cmljdEluZm8gKikgbGZpcnN0KGxjKTsKKworCQkvKgorCQkgKiBBZGQgdGhlIGVudHJ5IHRv IHRoZSBsaXN0LiAgSXQgaXMgbmVlZGVkIGV4Y2x1c2l2ZWx5IHRvIG1hbmFnZQorCQkgKiB0 aGUgcHJvYmxlbSB3aXRoIHRoZSBvcmRlciBvZiB0cmFuc2Zvcm1lZCBjbGF1c2VzIGluIGV4 cGxhaW4uCisJCSAqIEhhc2ggdmFsdWUgY2FuIGRlcGVuZCBvbiB0aGUgcGxhdGZvcm0gYW5k IHZlcnNpb24uICBIZW5jZSwKKwkJICogc2VxdWVudGFsIHNjYW4gb2YgdGhlIGhhc2ggdGFi bGUgd291bGQgcHJvbmUgdG8gY2hhbmdlIHRoZQorCQkgKiBvcmRlciBvZiBjbGF1c2VzIGlu IGxpc3RzIGFuZCwgYXMgYSByZXN1bHQsIGJyZWFrIHJlZ3Jlc3Npb24KKwkJICogdGVzdHMg YWNjaWRlbnRpYWxseS4KKwkJICovCisJCWZvdW5kID0gdHJ5X2dldF9hcHByb3ByaWFibGVf Z3JvdXAocmluZm8sICZhcHByb3ByaWF0ZV9lbnRyaWVzKTsKKworCQlpZiAoIWZvdW5kKQor CQkJb3JfZW50cmllcyA9IGxhcHBlbmQob3JfZW50cmllcywgKHZvaWQgKikgcmluZm8tPmNs YXVzZSk7CisJfQorCisJLyogTGV0J3MgY29udmVydCBlYWNoIGdyb3VwIG9mIGNsYXVzZXMg dG8gYW4gQU5ZIGV4cHJlc3Npb24uICovCisKKwkvKgorCSAqIEdvIHRocm91Z2ggdGhlIGxp c3Qgb2YgZ3JvdXBzIGFuZCBjb252ZXJ0IGVhY2gsIHdoZXJlIG51bWJlciBvZiBjb25zdHMK KwkgKiBtb3JlIHRoYW4gMS4gdHJpdmlhbCBncm91cHMgbW92ZSB0byBPUi1saXN0IGFnYWlu CisJICovCisKKwlmb3JlYWNoKGxjLCBhcHByb3ByaWF0ZV9lbnRyaWVzKQorCXsKKwkJT2lk CQkJc2NhbGFyX3R5cGU7CisJCU9pZAkJCWFycmF5X3R5cGU7CisKKwkJaWYgKCFJc0EobGZp cnN0KGxjKSwgT3JDbGF1c2VHcm91cCkpCisJCXsKKwkJCUFzc2VydCgwKTsKKwkJfQorCisJ CWVudHJ5ID0gKE9yQ2xhdXNlR3JvdXAgKikgbGZpcnN0KGxjKTsKKworCQlBc3NlcnQobGlz dF9sZW5ndGgoZW50cnktPmNvbnN0cykgPiAwKTsKKwkJQXNzZXJ0KGxpc3RfbGVuZ3RoKGVu dHJ5LT5leHBycykgPT0gbGlzdF9sZW5ndGgoZW50cnktPmNvbnN0cykpOworCisJCWlmIChs aXN0X2xlbmd0aChlbnRyeS0+Y29uc3RzKSA9PSAxKQorCQl7CisJCQkvKgorCQkJICogT25s eSBvbmUgZWxlbWVudCByZXR1cm5zIG9yaWdpbiBleHByZXNzaW9uIGludG8gdGhlIEJvb2xF eHByCisJCQkgKiBhcmdzIGxpc3QgdW5jaGFuZ2VkLgorCQkJICovCisJCQlsaXN0X2ZyZWUo ZW50cnktPmNvbnN0cyk7CisJCQlvcl9lbnRyaWVzID0gbGFwcGVuZChvcl9lbnRyaWVzLCBs aW5pdGlhbChlbnRyeS0+ZXhwcnMpKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJ ICogRG8gdGhlIHRyYW5zZm9ybWF0aW9uLgorCQkgKi8KKwkJc2NhbGFyX3R5cGUgPSBlbnRy eS0+Y29uc3R0eXBlOworCQlhcnJheV90eXBlID0gT2lkSXNWYWxpZChzY2FsYXJfdHlwZSkg PyBnZXRfYXJyYXlfdHlwZShzY2FsYXJfdHlwZSkgOgorCQkJSW52YWxpZE9pZDsKKworCQlp ZiAoT2lkSXNWYWxpZChhcnJheV90eXBlKSkKKwkJeworCQkJLyoKKwkJCSAqIE9LOiBjb2Vy Y2UgYWxsIHRoZSByaWdodC1oYW5kIG5vbi1WYXIgaW5wdXRzIHRvIHRoZSBjb21tb24gdHlw ZQorCQkJICogYW5kIGJ1aWxkIGFuIEFycmF5RXhwciBmb3IgdGhlbS4KKwkJCSAqLworCQkJ TGlzdAkgICAqYWV4cHJzID0gTklMOworCQkJQXJyYXlFeHByICAqbmV3YSA9IE5VTEw7CisJ CQlTY2FsYXJBcnJheU9wRXhwciAqc2FvcGV4cHIgPSBOVUxMOworCQkJSGVhcFR1cGxlCW9w ZXJ0dXA7CisJCQlGb3JtX3BnX29wZXJhdG9yIG9wZXJmb3JtOworCQkJTGlzdAkgICAqbmFt ZWxpc3QgPSBOSUw7CisJCQlMaXN0Q2VsbCAgICpsYzI7CisKKwkJCWZvcmVhY2gobGMyLCBl bnRyeS0+Y29uc3RzKQorCQkJeworCQkJCU5vZGUJICAgKm5vZGUgPSAoTm9kZSAqKSBsZmly c3QobGMyKTsKKworCQkJCW5vZGUgPSBjb2VyY2VfdG9fY29tbW9uX3R5cGUoTlVMTCwgbm9k ZSwgc2NhbGFyX3R5cGUsCisJCQkJCQkJCQkJCSAiT1IgQU5ZIFRyYW5zZm9ybWF0aW9uIik7 CisJCQkJYWV4cHJzID0gbGFwcGVuZChhZXhwcnMsIG5vZGUpOworCQkJfQorCisJCQluZXdh ID0gbWFrZU5vZGUoQXJyYXlFeHByKTsKKwkJCS8qIGFycmF5X2NvbGxpZCB3aWxsIGJlIHNl dCBieSBwYXJzZV9jb2xsYXRlLmMgKi8KKwkJCW5ld2EtPmVsZW1lbnRfdHlwZWlkID0gc2Nh bGFyX3R5cGU7CisJCQluZXdhLT5hcnJheV90eXBlaWQgPSBhcnJheV90eXBlOworCQkJbmV3 YS0+bXVsdGlkaW1zID0gZmFsc2U7CisJCQluZXdhLT5lbGVtZW50cyA9IGFleHByczsKKwkJ CW5ld2EtPmxvY2F0aW9uID0gLTE7CisKKwkJCS8qCisJCQkgKiBUcnkgdG8gY2FzdCB0aGlz IGV4cHJlc3Npb24gdG8gQ29uc3QuIER1ZSB0byBjdXJyZW50IHN0cmljdAorCQkJICogdHJh bnNmb3JtYXRpb24gcnVsZXMgaXQgc2hvdWxkIGJlIGRvbmUgW2FsbW9zdF0gZXZlcnkgdGlt ZS4KKwkJCSAqLworCQkJbmV3YSA9IChBcnJheUV4cHIgKikgZXZhbF9jb25zdF9leHByZXNz aW9ucyhOVUxMLCAoTm9kZSAqKSBuZXdhKTsKKworCQkJb3BlcnR1cCA9IFNlYXJjaFN5c0Nh Y2hlMShPUEVST0lELAorCQkJCQkJCQkJICBPYmplY3RJZEdldERhdHVtKGVudHJ5LT5vcG5v KSk7CisJCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQob3BlcnR1cCkpCisJCQkJZWxvZyhFUlJP UiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wZXJhdG9yICV1IiwKKwkJCQkJIGVudHJ5 LT5vcG5vKTsKKworCQkJb3BlcmZvcm0gPSAoRm9ybV9wZ19vcGVyYXRvcikgR0VUU1RSVUNU KG9wZXJ0dXApOworCQkJaWYgKCFPcGVyYXRvcklzVmlzaWJsZShlbnRyeS0+b3BubykpCisJ CQkJbmFtZWxpc3QgPSBsYXBwZW5kKG5hbWVsaXN0LCBtYWtlU3RyaW5nKGdldF9uYW1lc3Bh Y2VfbmFtZShvcGVyZm9ybS0+b3BybmFtZXNwYWNlKSkpOworCisJCQluYW1lbGlzdCA9IGxh cHBlbmQobmFtZWxpc3QsIG1ha2VTdHJpbmcocHN0cmR1cChOYW1lU3RyKG9wZXJmb3JtLT5v cHJuYW1lKSkpKTsKKwkJCVJlbGVhc2VTeXNDYWNoZShvcGVydHVwKTsKKworCQkJc2FvcGV4 cHIgPQorCQkJCShTY2FsYXJBcnJheU9wRXhwciAqKQorCQkJCW1ha2Vfc2NhbGFyX2FycmF5 X29wKE5VTEwsCisJCQkJCQkJCQkgbmFtZWxpc3QsCisJCQkJCQkJCQkgdHJ1ZSwKKwkJCQkJ CQkJCSAoTm9kZSAqKSBlbnRyeS0+ZXhwciwKKwkJCQkJCQkJCSAoTm9kZSAqKSBuZXdhLAor CQkJCQkJCQkJIC0xKTsKKwkJCXNhb3BleHByLT5pbnB1dGNvbGxpZCA9IGVudHJ5LT5pbnB1 dGNvbGxpZDsKKworCQkJb3JfZW50cmllcyA9IGxhcHBlbmQob3JfZW50cmllcywgKHZvaWQg Kikgc2FvcGV4cHIpOworCQl9CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCSAqIElmIHRoZSBj b25zdCBub2RlJ3MgKHJpZ2h0IHNpZGUgb2Ygb3BlcmF0b3IgZXhwcmVzc2lvbikgdHlwZQor CQkJICogZG9uJ3QgaGF2ZSDigJx0cnVl4oCdIGFycmF5IHR5cGUsIHRoZW4gd2UgY2Fubm5v dCBkbyB0aGUKKwkJCSAqIHRyYW5zZm9ybWF0aW9uLiBXZSBzaW1wbHkgY29uY2F0ZW5hdGUg dGhlIGV4cHJlc3Npb24gbm9kZS4KKwkJCSAqLworCQkJbGlzdF9mcmVlKGVudHJ5LT5jb25z dHMpOworCQkJb3JfZW50cmllcyA9IGxpc3RfY29uY2F0KG9yX2VudHJpZXMsIGVudHJ5LT5l eHBycyk7CisJCX0KKwl9CisJbGlzdF9mcmVlKGFwcHJvcHJpYXRlX2VudHJpZXMpOworCisJ LyogT25lIG1vcmUgdHJpY2s6IGFzc2VtYmxlIGNvcnJlY3QgY2xhdXNlICovCisJcmV0dXJu IG9yX2VudHJpZXM7Cit9CisKIC8qCiAgKiBhZGRfYmFzZV9jbGF1c2VfdG9fcmVsCiAgKgkJ QWRkICdyZXN0cmljdGluZm8nIGFzIGEgYmFzZXJlc3RyaWN0aW5mbyB0byB0aGUgYmFzZSBy ZWxhdGlvbiBkZW5vdGVkCkBAIC0yNjc3LDYgKzI5NjQsMzYgQEAgYWRkX2Jhc2VfY2xhdXNl X3RvX3JlbChQbGFubmVySW5mbyAqcm9vdCwgSW5kZXggcmVsaWQsCiAJCX0KIAl9CiAKKwlp ZiAocmVzdHJpY3Rpb25faXNfb3JfY2xhdXNlKHJlc3RyaWN0aW5mbykpCisJeworCQlCb29s RXhwciAgICpvckV4cHIgPSAoQm9vbEV4cHIgKikgcmVzdHJpY3RpbmZvLT5vcmNsYXVzZTsK KworCQlBc3NlcnQoaXNfb3JjbGF1c2UocmVzdHJpY3RpbmZvLT5vcmNsYXVzZSkpOworCisJ CWlmIChsaXN0X2xlbmd0aChvckV4cHItPmFyZ3MpID49IDIpCisJCXsKKwkJCUxpc3QgKm9y X2xpc3QgPSB0cmFuc2Zvcm1fb3JfdG9fYW55KHJvb3QsIG9yRXhwci0+YXJncyk7CisJCQlF eHByICpjbGF1c2UgPSBsaXN0X2xlbmd0aChvcl9saXN0KSA+IDEgPworCQkJCQkJCQltYWtl Qm9vbEV4cHIoT1JfRVhQUiwgb3JfbGlzdCwKKwkJCQkJCQkJCQkJICgoQm9vbEV4cHIgKikg cmVzdHJpY3RpbmZvLT5jbGF1c2UpLT5sb2NhdGlvbikgOgorCQkJCQkJCQlsaW5pdGlhbChv cl9saXN0KTsKKworCQkJUmVzdHJpY3RJbmZvICpyaW5mbzsKKwkJCXJpbmZvID0gbWFrZV9y ZXN0cmljdGluZm8ocm9vdCwKKwkJCQkJCQkJCQljbGF1c2UsCisJCQkJCQkJCQkJcmVzdHJp Y3RpbmZvLT5pc19wdXNoZWRfZG93biwKKwkJCQkJCQkJCQlyZXN0cmljdGluZm8tPmhhc19j bG9uZSwKKwkJCQkJCQkJCQlyZXN0cmljdGluZm8tPmlzX2Nsb25lLAorCQkJCQkJCQkJCXJl c3RyaWN0aW5mby0+cHNldWRvY29uc3RhbnQsCisJCQkJCQkJCQkJcmVzdHJpY3RpbmZvLT5z ZWN1cml0eV9sZXZlbCwKKwkJCQkJCQkJCQlyZXN0cmljdGluZm8tPnJlcXVpcmVkX3JlbGlk cywKKwkJCQkJCQkJCQlyZXN0cmljdGluZm8tPmluY29tcGF0aWJsZV9yZWxpZHMsCisJCQkJ CQkJCQkJcmVzdHJpY3RpbmZvLT5vdXRlcl9yZWxpZHMpOworCisJCQlyZXN0cmljdGluZm8g PSByaW5mbzsKKwkJfQorCX0KKwogCS8qIEFkZCBjbGF1c2UgdG8gcmVsJ3MgcmVzdHJpY3Rp b24gbGlzdCAqLwogCXJlbC0+YmFzZXJlc3RyaWN0aW5mbyA9IGxhcHBlbmQocmVsLT5iYXNl cmVzdHJpY3RpbmZvLCByZXN0cmljdGluZm8pOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9ub2Rlcy9wYXRobm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCmlu ZGV4IDE0Y2NmYzFhYzFjLi5mNDhkZGI4YzM4NSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv bm9kZXMvcGF0aG5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgK QEAgLTI3MDgsNiArMjcwOCwzNyBAQCB0eXBlZGVmIHN0cnVjdCBSZXN0cmljdEluZm8KIAlP aWQJCQlyaWdodF9oYXNoZXFvcGVyYXRvciBwZ19ub2RlX2F0dHIoZXF1YWxfaWdub3JlKTsK IH0gUmVzdHJpY3RJbmZvOwogCisvKgorICogVGhlIGdyb3VwIG9mIHNpbWlsYXIgb3BlcmF0 b3IgZXhwcmVzc2lvbnMgaW4gdHJhbnNmb3JtX29yX3RvX2FueSgpLgorICovCit0eXBlZGVm IHN0cnVjdCBPckNsYXVzZUdyb3VwCit7CisJcGdfbm9kZV9hdHRyKG5vZGV0YWdfb25seSkK KworCU5vZGVUYWcJCXR5cGU7CisKKwkvKiBUaGUgZXhwcmVzc2lvbiBvZiB0aGUgdmFyaWFi bGUgc2lkZSBvZiBvcGVyYXRvciAqLworCUV4cHIJICAgKmV4cHI7CisJLyogVGhlIG9wZXJh dG9yIG9mIHRoZSBvcGVyYXRvciBleHByZXNzaW9uICovCisJT2lkCQkJb3BubzsKKwkvKiBU aGUgY29sbGF0aW9uIG9mIHRoZSBvcGVyYXRvciBleHByZXNzaW9uICovCisJT2lkCQkJaW5w dXRjb2xsaWQ7CisJLyogVGhlIHR5cGUgb2YgY29uc3RhbnQgc2lkZSBvZiBvcGVyYXRvciAq LworCU9pZAkJCWNvbnN0dHlwZTsKKworCS8qIFRoZSBsaXN0IG9mIGNvbnN0YW50IHNpZGVz IG9mIG9wZXJhdG9ycyAqLworCUxpc3QJICAgKmNvbnN0czsKKworCS8qCisJICogTGlzdCBv ZiBzb3VyY2UgZXhwcmVzc2lvbnMuICBXZSBuZWVkIHRoaXMgZm9yIGNvbnZlbmllbmNlIGlu IGNhc2Ugd2UKKwkgKiB3aWxsIGdpdmUgdXAgb24gdHJhbnNmb3JtYXRpb24uCisJICovCisJ TGlzdAkgICAqZXhwcnM7CisKKwlOb2RlCSAgICpjb25zdF9leHByOworfSBPckNsYXVzZUdy b3VwOworCisKIC8qCiAgKiBUaGlzIG1hY3JvIGVtYm9kaWVzIHRoZSBjb3JyZWN0IHdheSB0 byB0ZXN0IHdoZXRoZXIgYSBSZXN0cmljdEluZm8gaXMKICAqICJwdXNoZWQgZG93biIgdG8g YSBnaXZlbiBvdXRlciBqb2luLCB0aGF0IGlzLCBzaG91bGQgYmUgdHJlYXRlZCBhcyBhIGZp bHRlcgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcXVlcnlqdW1ibGUuaCBiL3Ny Yy9pbmNsdWRlL25vZGVzL3F1ZXJ5anVtYmxlLmgKaW5kZXggZjFjNTVjODA2N2YuLjU2NDNl ZThmNjUxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9xdWVyeWp1bWJsZS5oCisr KyBiL3NyYy9pbmNsdWRlL25vZGVzL3F1ZXJ5anVtYmxlLmgKQEAgLTY1LDYgKzY1LDcgQEAg ZXh0ZXJuIFBHRExMSU1QT1JUIGludCBjb21wdXRlX3F1ZXJ5X2lkOwogCiBleHRlcm4gY29u c3QgY2hhciAqQ2xlYW5RdWVyeXRleHQoY29uc3QgY2hhciAqcXVlcnksIGludCAqbG9jYXRp b24sIGludCAqbGVuKTsKIGV4dGVybiBKdW1ibGVTdGF0ZSAqSnVtYmxlUXVlcnkoUXVlcnkg KnF1ZXJ5KTsKK2V4dGVybiBKdW1ibGVTdGF0ZSAqSnVtYmxlRXhwcihFeHByICpleHByLCB1 aW50NjQgKmV4cHJJZCk7CiBleHRlcm4gdm9pZCBFbmFibGVRdWVyeUlkKHZvaWQpOwogCiBl eHRlcm4gUEdETExJTVBPUlQgYm9vbCBxdWVyeV9pZF9lbmFibGVkOwpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfaW5kZXgub3V0IGIvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9jcmVhdGVfaW5kZXgub3V0CmluZGV4IGNmNmVhYzU3MzQ5Li40 MjFhNjQ1ZmFlMCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jcmVh dGVfaW5kZXgub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX2lu ZGV4Lm91dApAQCAtMTg0NCwxOCArMTg0NCw3MyBAQCBEUk9QIFRBQkxFIG9uZWtfd2l0aF9u dWxsOwogRVhQTEFJTiAoQ09TVFMgT0ZGKQogU0VMRUNUICogRlJPTSB0ZW5rMQogICBXSEVS RSB0aG91c2FuZCA9IDQyIEFORCAodGVudGhvdXMgPSAxIE9SIHRlbnRob3VzID0gMyBPUiB0 ZW50aG91cyA9IDQyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBCaXRtYXAgSGVhcCBTY2FuIG9u IHRlbmsxCi0gICBSZWNoZWNrIENvbmQ6ICgoKHRob3VzYW5kID0gNDIpIEFORCAodGVudGhv dXMgPSAxKSkgT1IgKCh0aG91c2FuZCA9IDQyKSBBTkQgKHRlbnRob3VzID0gMykpIE9SICgo dGhvdXNhbmQgPSA0MikgQU5EICh0ZW50aG91cyA9IDQyKSkpCi0gICAtPiAgQml0bWFwT3IK LSAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5rMV90aG91c190ZW50aG91 cwotICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKCh0aG91c2FuZCA9IDQyKSBBTkQgKHRl bnRob3VzID0gMSkpCi0gICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFf dGhvdXNfdGVudGhvdXMKLSAgICAgICAgICAgICAgIEluZGV4IENvbmQ6ICgodGhvdXNhbmQg PSA0MikgQU5EICh0ZW50aG91cyA9IDMpKQotICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBT Y2FuIG9uIHRlbmsxX3Rob3VzX3RlbnRob3VzCi0gICAgICAgICAgICAgICBJbmRleCBDb25k OiAoKHRob3VzYW5kID0gNDIpIEFORCAodGVudGhvdXMgPSA0MikpCi0oOSByb3dzKQorICAg UmVjaGVjayBDb25kOiAoKHRob3VzYW5kID0gNDIpIEFORCAodGVudGhvdXMgPSBBTlkgKCd7 MSwzLDQyfSc6OmludGVnZXJbXSkpKQorICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRl bmsxX3Rob3VzX3RlbnRob3VzCisgICAgICAgICBJbmRleCBDb25kOiAoKHRob3VzYW5kID0g NDIpIEFORCAodGVudGhvdXMgPSBBTlkgKCd7MSwzLDQyfSc6OmludGVnZXJbXSkpKQorKDQg cm93cykKKworU0VMRUNUICogRlJPTSB0ZW5rMQorICBXSEVSRSB0aG91c2FuZCA9IDQyIEFO RCAodGVudGhvdXMgPSAxIE9SIHRlbnRob3VzID0gMyBPUiB0ZW50aG91cyA9IDQyKTsKKyB1 bmlxdWUxIHwgdW5pcXVlMiB8IHR3byB8IGZvdXIgfCB0ZW4gfCB0d2VudHkgfCBodW5kcmVk IHwgdGhvdXNhbmQgfCB0d290aG91c2FuZCB8IGZpdmV0aG91cyB8IHRlbnRob3VzIHwgb2Rk IHwgZXZlbiB8IHN0cmluZ3UxIHwgc3RyaW5ndTIgfCBzdHJpbmc0IAorLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLSstLS0tLS0rLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tKy0tLS0tLSst LS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tCisgICAgICA0MiB8ICAgIDU1MzAgfCAg IDAgfCAgICAyIHwgICAyIHwgICAgICAyIHwgICAgICA0MiB8ICAgICAgIDQyIHwgICAgICAg ICAgNDIgfCAgICAgICAgNDIgfCAgICAgICA0MiB8ICA4NCB8ICAgODUgfCBRQkFBQUEgICB8 IFNFSUFBQSAgIHwgT09PT3h4CisoMSByb3cpCisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NF TEVDVCAqIEZST00gdGVuazEKKyAgV0hFUkUgdGhvdXNhbmQgPSA0MiBBTkQgKHRlbnRob3Vz ID0gMSBPUiB0ZW50aG91cyA9IChTRUxFQ1QgMSArIDIpIE9SIHRlbnRob3VzID0gNDIpOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEJpdG1hcCBIZWFwIFNjYW4gb24gdGVu azEKKyAgIFJlY2hlY2sgQ29uZDogKCh0aG91c2FuZCA9IDQyKSBBTkQgKHRlbnRob3VzID0g QU5ZIChBUlJBWVsxLCAoSW5pdFBsYW4gMSkuY29sMSwgNDJdKSkpCisgICBJbml0UGxhbiAx CisgICAgIC0+ICBSZXN1bHQKKyAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5rMV90 aG91c190ZW50aG91cworICAgICAgICAgSW5kZXggQ29uZDogKCh0aG91c2FuZCA9IDQyKSBB TkQgKHRlbnRob3VzID0gQU5ZIChBUlJBWVsxLCAoSW5pdFBsYW4gMSkuY29sMSwgNDJdKSkp CisoNiByb3dzKQorCitTRUxFQ1QgKiBGUk9NIHRlbmsxCisgIFdIRVJFIHRob3VzYW5kID0g NDIgQU5EICh0ZW50aG91cyA9IDEgT1IgdGVudGhvdXMgPSAoU0VMRUNUIDEgKyAyKSBPUiB0 ZW50aG91cyA9IDQyKTsKKyB1bmlxdWUxIHwgdW5pcXVlMiB8IHR3byB8IGZvdXIgfCB0ZW4g fCB0d2VudHkgfCBodW5kcmVkIHwgdGhvdXNhbmQgfCB0d290aG91c2FuZCB8IGZpdmV0aG91 cyB8IHRlbnRob3VzIHwgb2RkIHwgZXZlbiB8IHN0cmluZ3UxIHwgc3RyaW5ndTIgfCBzdHJp bmc0IAorLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLSstLS0tLS0rLS0tLS0rLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tKy0tLS0tKy0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tCisgICAg ICA0MiB8ICAgIDU1MzAgfCAgIDAgfCAgICAyIHwgICAyIHwgICAgICAyIHwgICAgICA0MiB8 ICAgICAgIDQyIHwgICAgICAgICAgNDIgfCAgICAgICAgNDIgfCAgICAgICA0MiB8ICA4NCB8 ICAgODUgfCBRQkFBQUEgICB8IFNFSUFBQSAgIHwgT09PT3h4CisoMSByb3cpCisKK0VYUExB SU4gKENPU1RTIE9GRikKK1NFTEVDVCBjb3VudCgqKSBGUk9NIHRlbmsxCisgIFdIRVJFIGh1 bmRyZWQgPSA0MiBBTkQgKHRob3VzYW5kID0gNDIgT1IgdGhvdXNhbmQgPSA5OSk7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIEFnZ3JlZ2F0ZQorICAgLT4gIEJpdG1hcCBIZWFwIFNjYW4gb24gdGVuazEKKyAg ICAgICAgIFJlY2hlY2sgQ29uZDogKChodW5kcmVkID0gNDIpIEFORCAodGhvdXNhbmQgPSBB TlkgKCd7NDIsOTl9Jzo6aW50ZWdlcltdKSkpCisgICAgICAgICAtPiAgQml0bWFwQW5kCisg ICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFfaHVuZHJlZAor ICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGh1bmRyZWQgPSA0MikKKyAgICAg ICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5rMV90aG91c190ZW50aG91 cworICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKHRob3VzYW5kID0gQU5ZICgn ezQyLDk5fSc6OmludGVnZXJbXSkpCisoOCByb3dzKQorCitTRUxFQ1QgY291bnQoKikgRlJP TSB0ZW5rMQorICBXSEVSRSBodW5kcmVkID0gNDIgQU5EICh0aG91c2FuZCA9IDQyIE9SIHRo b3VzYW5kID0gOTkpOworIGNvdW50IAorLS0tLS0tLQorICAgIDEwCisoMSByb3cpCisKK0VY UExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gdGVuazEKKyAgV0hFUkUgdGhvdXNh bmQgPSA0MiBBTkQgKHRlbnRob3VzID0gMSBPUiB0ZW50aG91cyA9IDMgT1IgdGVudGhvdXMg PSA0Mik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIEJpdG1hcCBIZWFwIFNjYW4gb24gdGVuazEKKyAgIFJlY2hl Y2sgQ29uZDogKCh0aG91c2FuZCA9IDQyKSBBTkQgKHRlbnRob3VzID0gQU5ZICgnezEsMyw0 Mn0nOjppbnRlZ2VyW10pKSkKKyAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5rMV90 aG91c190ZW50aG91cworICAgICAgICAgSW5kZXggQ29uZDogKCh0aG91c2FuZCA9IDQyKSBB TkQgKHRlbnRob3VzID0gQU5ZICgnezEsMyw0Mn0nOjppbnRlZ2VyW10pKSkKKyg0IHJvd3Mp CiAKIFNFTEVDVCAqIEZST00gdGVuazEKICAgV0hFUkUgdGhvdXNhbmQgPSA0MiBBTkQgKHRl bnRob3VzID0gMSBPUiB0ZW50aG91cyA9IDMgT1IgdGVudGhvdXMgPSA0Mik7CkBAIC0xODY3 LDIzICsxOTIyLDEyMyBAQCBTRUxFQ1QgKiBGUk9NIHRlbmsxCiBFWFBMQUlOIChDT1NUUyBP RkYpCiBTRUxFQ1QgY291bnQoKikgRlJPTSB0ZW5rMQogICBXSEVSRSBodW5kcmVkID0gNDIg QU5EICh0aG91c2FuZCA9IDQyIE9SIHRob3VzYW5kID0gOTkpOwotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAg QWdncmVnYXRlCiAgICAtPiAgQml0bWFwIEhlYXAgU2NhbiBvbiB0ZW5rMQotICAgICAgICAg UmVjaGVjayBDb25kOiAoKGh1bmRyZWQgPSA0MikgQU5EICgodGhvdXNhbmQgPSA0MikgT1Ig KHRob3VzYW5kID0gOTkpKSkKKyAgICAgICAgIFJlY2hlY2sgQ29uZDogKChodW5kcmVkID0g NDIpIEFORCAodGhvdXNhbmQgPSBBTlkgKCd7NDIsOTl9Jzo6aW50ZWdlcltdKSkpCiAgICAg ICAgICAtPiAgQml0bWFwQW5kCiAgICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNj YW4gb24gdGVuazFfaHVuZHJlZAogICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDog KGh1bmRyZWQgPSA0MikKKyAgICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBv biB0ZW5rMV90aG91c190ZW50aG91cworICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29u ZDogKHRob3VzYW5kID0gQU5ZICgnezQyLDk5fSc6OmludGVnZXJbXSkpCisoOCByb3dzKQor CitTRUxFQ1QgY291bnQoKikgRlJPTSB0ZW5rMQorICBXSEVSRSBodW5kcmVkID0gNDIgQU5E ICh0aG91c2FuZCA9IDQyIE9SIHRob3VzYW5kID0gOTkpOworIGNvdW50IAorLS0tLS0tLQor ICAgIDEwCisoMSByb3cpCisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBjb3VudCgq KSBGUk9NIHRlbmsxCisgIFdIRVJFIGh1bmRyZWQgPSA0MiBBTkQgKHRob3VzYW5kIDwgNDIg T1IgdGhvdXNhbmQgPCA5OSBPUiA0MyA+IHRob3VzYW5kIE9SIDQyID4gdGhvdXNhbmQpOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBZ2dyZWdhdGUKKyAgIC0+ICBCaXRtYXAgSGVhcCBT Y2FuIG9uIHRlbmsxCisgICAgICAgICBSZWNoZWNrIENvbmQ6ICgoaHVuZHJlZCA9IDQyKSBB TkQgKHRob3VzYW5kIDwgQU5ZICgnezQyLDk5LDQzLDQyfSc6OmludGVnZXJbXSkpKQorICAg ICAgICAgLT4gIEJpdG1hcEFuZAorICAgICAgICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBT Y2FuIG9uIHRlbmsxX2h1bmRyZWQKKyAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6 IChodW5kcmVkID0gNDIpCisgICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4g b24gdGVuazFfdGhvdXNfdGVudGhvdXMKKyAgICAgICAgICAgICAgICAgICAgIEluZGV4IENv bmQ6ICh0aG91c2FuZCA8IEFOWSAoJ3s0Miw5OSw0Myw0Mn0nOjppbnRlZ2VyW10pKQorKDgg cm93cykKKworU0VMRUNUIGNvdW50KCopIEZST00gdGVuazEKKyAgV0hFUkUgaHVuZHJlZCA9 IDQyIEFORCAodGhvdXNhbmQgPCA0MiBPUiB0aG91c2FuZCA8IDk5IE9SIDQzID4gdGhvdXNh bmQgT1IgNDIgPiB0aG91c2FuZCk7CisgY291bnQgCistLS0tLS0tCisgICAgMTAKKygxIHJv dykKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGNvdW50KCopIEZST00gdGVuazEK KyAgV0hFUkUgdGhvdXNhbmQgPSA0MiBBTkQgKHRlbnRob3VzID0gMSBPUiB0ZW50aG91cyA9 IDMpIE9SIHRob3VzYW5kID0gNDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIEFnZ3JlZ2F0ZQorICAgLT4gIEJpdG1hcCBIZWFwIFNjYW4gb24gdGVuazEKKyAgICAg ICAgIFJlY2hlY2sgQ29uZDogKCgoKHRob3VzYW5kID0gNDIpIEFORCAodGVudGhvdXMgPSAx KSkgT1IgKCh0aG91c2FuZCA9IDQyKSBBTkQgKHRlbnRob3VzID0gMykpKSBPUiAodGhvdXNh bmQgPSA0MSkpCisgICAgICAgICAtPiAgQml0bWFwT3IKICAgICAgICAgICAgICAgIC0+ICBC aXRtYXBPcgogICAgICAgICAgICAgICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9u IHRlbmsxX3Rob3VzX3RlbnRob3VzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRl eCBDb25kOiAodGhvdXNhbmQgPSA0MikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIElu ZGV4IENvbmQ6ICgodGhvdXNhbmQgPSA0MikgQU5EICh0ZW50aG91cyA9IDEpKQogICAgICAg ICAgICAgICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX3Rob3VzX3Rl bnRob3VzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodGhvdXNh bmQgPSA5OSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6ICgodGhv dXNhbmQgPSA0MikgQU5EICh0ZW50aG91cyA9IDMpKQorICAgICAgICAgICAgICAgLT4gIEJp dG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX3Rob3VzX3RlbnRob3VzCisgICAgICAgICAgICAg ICAgICAgICBJbmRleCBDb25kOiAodGhvdXNhbmQgPSA0MSkKICgxMSByb3dzKQogCiBTRUxF Q1QgY291bnQoKikgRlJPTSB0ZW5rMQotICBXSEVSRSBodW5kcmVkID0gNDIgQU5EICh0aG91 c2FuZCA9IDQyIE9SIHRob3VzYW5kID0gOTkpOworICBXSEVSRSB0aG91c2FuZCA9IDQyIEFO RCAodGVudGhvdXMgPSAxIE9SIHRlbnRob3VzID0gMykgT1IgdGhvdXNhbmQgPSA0MTsKKyBj b3VudCAKKy0tLS0tLS0KKyAgICAxMAorKDEgcm93KQorCitFWFBMQUlOIChDT1NUUyBPRkYp CitTRUxFQ1QgY291bnQoKikgRlJPTSB0ZW5rMQorICBXSEVSRSBodW5kcmVkID0gNDIgQU5E ICh0aG91c2FuZCA9IDQyIE9SIHRob3VzYW5kID0gOTkgT1IgdGVudGhvdXMgPCAyKSBPUiB0 aG91c2FuZCA9IDQxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBZ2dyZWdhdGUK KyAgIC0+ICBCaXRtYXAgSGVhcCBTY2FuIG9uIHRlbmsxCisgICAgICAgICBSZWNoZWNrIENv bmQ6ICgoKGh1bmRyZWQgPSA0MikgQU5EICgodGhvdXNhbmQgPSA0MikgT1IgKHRob3VzYW5k ID0gOTkpIE9SICh0ZW50aG91cyA8IDIpKSkgT1IgKHRob3VzYW5kID0gNDEpKQorICAgICAg ICAgLT4gIEJpdG1hcE9yCisgICAgICAgICAgICAgICAtPiAgQml0bWFwQW5kCisgICAgICAg ICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFfaHVuZHJlZAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGh1bmRyZWQgPSA0MikK KyAgICAgICAgICAgICAgICAgICAgIC0+ICBCaXRtYXBPcgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX3Rob3VzX3RlbnRob3Vz CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodGhvdXNh bmQgPSA0MikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXgg U2NhbiBvbiB0ZW5rMV90aG91c190ZW50aG91cworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgSW5kZXggQ29uZDogKHRob3VzYW5kID0gOTkpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFfdGhvdXNfdGVudGhv dXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6ICh0ZW50 aG91cyA8IDIpCisgICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVu azFfdGhvdXNfdGVudGhvdXMKKyAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6ICh0 aG91c2FuZCA9IDQxKQorKDE2IHJvd3MpCisKK1NFTEVDVCBjb3VudCgqKSBGUk9NIHRlbmsx CisgIFdIRVJFIGh1bmRyZWQgPSA0MiBBTkQgKHRob3VzYW5kID0gNDIgT1IgdGhvdXNhbmQg PSA5OSBPUiB0ZW50aG91cyA8IDIpIE9SIHRob3VzYW5kID0gNDE7CisgY291bnQgCistLS0t LS0tCisgICAgMjAKKygxIHJvdykKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGNv dW50KCopIEZST00gdGVuazEKKyAgV0hFUkUgaHVuZHJlZCA9IDQyIEFORCAodGhvdXNhbmQg PSA0MiBPUiB0aG91c2FuZCA9IDQxIE9SIHRob3VzYW5kID0gOTkgQU5EIHRlbnRob3VzID0g Mik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFnZ3JlZ2F0 ZQorICAgLT4gIEJpdG1hcCBIZWFwIFNjYW4gb24gdGVuazEKKyAgICAgICAgIFJlY2hlY2sg Q29uZDogKChodW5kcmVkID0gNDIpIEFORCAoKHRob3VzYW5kID0gQU5ZICgnezQyLDQxfSc6 OmludGVnZXJbXSkpIE9SICgodGhvdXNhbmQgPSA5OSkgQU5EICh0ZW50aG91cyA9IDIpKSkp CisgICAgICAgICBGaWx0ZXI6ICgodGhvdXNhbmQgPSA0MikgT1IgKHRob3VzYW5kID0gNDEp IE9SICgodGhvdXNhbmQgPSA5OSkgQU5EICh0ZW50aG91cyA9IDIpKSkKKyAgICAgICAgIC0+ ICBCaXRtYXBBbmQKKyAgICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0 ZW5rMV9odW5kcmVkCisgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaHVuZHJl ZCA9IDQyKQorICAgICAgICAgICAgICAgLT4gIEJpdG1hcE9yCisgICAgICAgICAgICAgICAg ICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFfdGhvdXNfdGVudGhvdXMKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6ICh0aG91c2FuZCA9IEFOWSAo J3s0Miw0MX0nOjppbnRlZ2VyW10pKQorICAgICAgICAgICAgICAgICAgICAgLT4gIEJpdG1h cCBJbmRleCBTY2FuIG9uIHRlbmsxX3Rob3VzX3RlbnRob3VzCisgICAgICAgICAgICAgICAg ICAgICAgICAgICBJbmRleCBDb25kOiAoKHRob3VzYW5kID0gOTkpIEFORCAodGVudGhvdXMg PSAyKSkKKygxMiByb3dzKQorCitTRUxFQ1QgY291bnQoKikgRlJPTSB0ZW5rMQorICBXSEVS RSBodW5kcmVkID0gNDIgQU5EICh0aG91c2FuZCA9IDQyIE9SIHRob3VzYW5kID0gNDEgT1Ig dGhvdXNhbmQgPSA5OSBBTkQgdGVudGhvdXMgPSAyKTsKICBjb3VudCAKIC0tLS0tLS0KICAg ICAxMApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qb2luLm91dCBi L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9pbi5vdXQKaW5kZXggOTE0MmRhYjE3MWYu LjU5ZDI2MTcyOTVmIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pv aW4ub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9pbi5vdXQKQEAgLTQy MzQsNiArNDIzNCw1OCBAQCBzZWxlY3QgKiBmcm9tIHRlbmsxIGEgam9pbiB0ZW5rMSBiIG9u CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodW5pcXVlMiA9IDcp CiAoMTkgcm93cykKIAorZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSB0ZW5r MSBhIGpvaW4gdGVuazEgYiBvbgorICAoYS51bmlxdWUxID0gMSBhbmQgYi51bmlxdWUxID0g Mikgb3IKKyAgKChhLnVuaXF1ZTIgPSAzIG9yIGEudW5pcXVlMiA9IDcpIGFuZCBiLmh1bmRy ZWQgPSA0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9p biBGaWx0ZXI6ICgoKGEudW5pcXVlMSA9IDEpIEFORCAoYi51bmlxdWUxID0gMikpIE9SICgo KGEudW5pcXVlMiA9IDMpIE9SIChhLnVuaXF1ZTIgPSA3KSkgQU5EIChiLmh1bmRyZWQgPSA0 KSkpCisgICAtPiAgQml0bWFwIEhlYXAgU2NhbiBvbiB0ZW5rMSBiCisgICAgICAgICBSZWNo ZWNrIENvbmQ6ICgodW5pcXVlMSA9IDIpIE9SIChodW5kcmVkID0gNCkpCisgICAgICAgICAt PiAgQml0bWFwT3IKKyAgICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0 ZW5rMV91bmlxdWUxCisgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodW5pcXVl MSA9IDIpCisgICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFf aHVuZHJlZAorICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGh1bmRyZWQgPSA0 KQorICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAtPiAgQml0bWFwIEhlYXAgU2NhbiBv biB0ZW5rMSBhCisgICAgICAgICAgICAgICBSZWNoZWNrIENvbmQ6ICgodW5pcXVlMSA9IDEp IE9SICh1bmlxdWUyID0gMykgT1IgKHVuaXF1ZTIgPSA3KSkKKyAgICAgICAgICAgICAgIC0+ ICBCaXRtYXBPcgorICAgICAgICAgICAgICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2Fu IG9uIHRlbmsxX3VuaXF1ZTEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4IENv bmQ6ICh1bmlxdWUxID0gMSkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5k ZXggU2NhbiBvbiB0ZW5rMV91bmlxdWUyCisgICAgICAgICAgICAgICAgICAgICAgICAgICBJ bmRleCBDb25kOiAodW5pcXVlMiA9IDMpCisgICAgICAgICAgICAgICAgICAgICAtPiAgQml0 bWFwIEluZGV4IFNjYW4gb24gdGVuazFfdW5pcXVlMgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgSW5kZXggQ29uZDogKHVuaXF1ZTIgPSA3KQorKDE5IHJvd3MpCisKK2V4cGxhaW4g KGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gdGVuazEgYSBqb2luIHRlbmsxIGIgb24KKyAg KGEudW5pcXVlMSA8IDIwIG9yIGEudW5pcXVlMSA9IDMgb3IgYS51bmlxdWUxID0gMSBhbmQg Yi51bmlxdWUxID0gMikgb3IKKyAgKChhLnVuaXF1ZTIgPSAzIG9yIGEudW5pcXVlMiA9IDcp IGFuZCBiLmh1bmRyZWQgPSA0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9pbiBGaWx0ZXI6ICgoYS51bmlx dWUxIDwgMjApIE9SIChhLnVuaXF1ZTEgPSAzKSBPUiAoKGEudW5pcXVlMSA9IDEpIEFORCAo Yi51bmlxdWUxID0gMikpIE9SICgoKGEudW5pcXVlMiA9IDMpIE9SIChhLnVuaXF1ZTIgPSA3 KSkgQU5EIChiLmh1bmRyZWQgPSA0KSkpCisgICAtPiAgU2VxIFNjYW4gb24gdGVuazEgYgor ICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAtPiAgQml0bWFwIEhlYXAgU2NhbiBvbiB0 ZW5rMSBhCisgICAgICAgICAgICAgICBSZWNoZWNrIENvbmQ6ICgodW5pcXVlMSA8IDIwKSBP UiAodW5pcXVlMSA9IDMpIE9SICh1bmlxdWUxID0gMSkgT1IgKHVuaXF1ZTIgPSAzKSBPUiAo dW5pcXVlMiA9IDcpKQorICAgICAgICAgICAgICAgLT4gIEJpdG1hcE9yCisgICAgICAgICAg ICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFfdW5pcXVlMQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKHVuaXF1ZTEgPCAyMCkKKyAg ICAgICAgICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5rMV91bmlx dWUxCisgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodW5pcXVlMSA9 IDMpCisgICAgICAgICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVu azFfdW5pcXVlMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKHVu aXF1ZTEgPSAxKQorICAgICAgICAgICAgICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2Fu IG9uIHRlbmsxX3VuaXF1ZTIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4IENv bmQ6ICh1bmlxdWUyID0gMykKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5k ZXggU2NhbiBvbiB0ZW5rMV91bmlxdWUyCisgICAgICAgICAgICAgICAgICAgICAgICAgICBJ bmRleCBDb25kOiAodW5pcXVlMiA9IDcpCisoMTcgcm93cykKKwogLS0KIC0tIHRlc3QgcGxh Y2VtZW50IG9mIG1vdmFibGUgcXVhbHMgaW4gYSBwYXJhbWV0ZXJpemVkIGpvaW4gdHJlZQog LS0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3RhdHNfZXh0Lm91 dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3RhdHNfZXh0Lm91dAppbmRleCA4YzRk YTk1NTA4NC4uNzY3ODc0NDE4MWMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvc3RhdHNfZXh0Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N0 YXRzX2V4dC5vdXQKQEAgLTEzMjIsMTkgKzEzMjIsMTkgQEAgU0VMRUNUICogRlJPTSBjaGVj a19lc3RpbWF0ZWRfcm93cygnU0VMRUNUICogRlJPTSBmdW5jdGlvbmFsX2RlcGVuZGVuY2ll cyBXSEVSRQogU0VMRUNUICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygnU0VMRUNUICog RlJPTSBmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyBXSEVSRSAoYSA9IDEgT1IgYSA9IDUxKSBB TkQgYiA9ICcnMScnJyk7CiAgZXN0aW1hdGVkIHwgYWN0dWFsIAogLS0tLS0tLS0tLS0rLS0t LS0tLS0KLSAgICAgICAgOTkgfCAgICAxMDAKKyAgICAgICAxMDAgfCAgICAxMDAKICgxIHJv dykKIAogU0VMRUNUICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygnU0VMRUNUICogRlJP TSBmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyBXSEVSRSAoYSA9IDEgT1IgYSA9IDUxKSBBTkQg KGIgPSAnJzEnJyBPUiBiID0gJycyJycpJyk7CiAgZXN0aW1hdGVkIHwgYWN0dWFsIAogLS0t LS0tLS0tLS0rLS0tLS0tLS0KLSAgICAgICAgOTkgfCAgICAxMDAKKyAgICAgICAxMDAgfCAg ICAxMDAKICgxIHJvdykKIAogU0VMRUNUICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygn U0VMRUNUICogRlJPTSBmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyBXSEVSRSAoYSA9IDEgT1Ig YSA9IDIgT1IgYSA9IDUxIE9SIGEgPSA1MikgQU5EIChiID0gJycxJycgT1IgYiA9ICcnMicn KScpOwogIGVzdGltYXRlZCB8IGFjdHVhbCAKIC0tLS0tLS0tLS0tKy0tLS0tLS0tCi0gICAg ICAgMTk3IHwgICAgMjAwCisgICAgICAgMjAwIHwgICAgMjAwCiAoMSByb3cpCiAKIC0tIE9S IGNsYXVzZXMgcmVmZXJlbmNpbmcgZGlmZmVyZW50IGF0dHJpYnV0ZXMgYXJlIGluY29tcGF0 aWJsZQpAQCAtMTY2NCwxOSArMTY2NCwxOSBAQCBTRUxFQ1QgKiBGUk9NIGNoZWNrX2VzdGlt YXRlZF9yb3dzKCdTRUxFQ1QgKiBGUk9NIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzIFdIRVJF CiBTRUxFQ1QgKiBGUk9NIGNoZWNrX2VzdGltYXRlZF9yb3dzKCdTRUxFQ1QgKiBGUk9NIGZ1 bmN0aW9uYWxfZGVwZW5kZW5jaWVzIFdIRVJFICgoYSAqIDIpID0gMiBPUiAoYSAqIDIpID0g MTAyKSBBTkQgdXBwZXIoYikgPSAnJzEnJycpOwogIGVzdGltYXRlZCB8IGFjdHVhbCAKIC0t LS0tLS0tLS0tKy0tLS0tLS0tCi0gICAgICAgIDk5IHwgICAgMTAwCisgICAgICAgMTAwIHwg ICAgMTAwCiAoMSByb3cpCiAKIFNFTEVDVCAqIEZST00gY2hlY2tfZXN0aW1hdGVkX3Jvd3Mo J1NFTEVDVCAqIEZST00gZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMgV0hFUkUgKChhICogMikg PSAyIE9SIChhICogMikgPSAxMDIpIEFORCAodXBwZXIoYikgPSAnJzEnJyBPUiB1cHBlcihi KSA9ICcnMicnKScpOwogIGVzdGltYXRlZCB8IGFjdHVhbCAKIC0tLS0tLS0tLS0tKy0tLS0t LS0tCi0gICAgICAgIDk5IHwgICAgMTAwCisgICAgICAgMTAwIHwgICAgMTAwCiAoMSByb3cp CiAKIFNFTEVDVCAqIEZST00gY2hlY2tfZXN0aW1hdGVkX3Jvd3MoJ1NFTEVDVCAqIEZST00g ZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMgV0hFUkUgKChhICogMikgPSAyIE9SIChhICogMikg PSA0IE9SIChhICogMikgPSAxMDIgT1IgKGEgKiAyKSA9IDEwNCkgQU5EICh1cHBlcihiKSA9 ICcnMScnIE9SIHVwcGVyKGIpID0gJycyJycpJyk7CiAgZXN0aW1hdGVkIHwgYWN0dWFsIAog LS0tLS0tLS0tLS0rLS0tLS0tLS0KLSAgICAgICAxOTcgfCAgICAyMDAKKyAgICAgICAyMDAg fCAgICAyMDAKICgxIHJvdykKIAogLS0gT1IgY2xhdXNlcyByZWZlcmVuY2luZyBkaWZmZXJl bnQgYXR0cmlidXRlcwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC90 aWRzY2FuLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdGlkc2Nhbi5vdXQKaW5k ZXggZjEzM2I1YTRhYzcuLjBmNmQzZDMyM2Q0IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL3RpZHNjYW4ub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvdGlkc2Nhbi5vdXQKQEAgLTQzLDExICs0MywxMiBAQCBTRUxFQ1QgY3RpZCwgKiBGUk9N IHRpZHNjYW4gV0hFUkUgJygwLDEpJyA9IGN0aWQ7CiAtLSBPUidkIGNsYXVzZXMKIEVYUExB SU4gKENPU1RTIE9GRikKIFNFTEVDVCBjdGlkLCAqIEZST00gdGlkc2NhbiBXSEVSRSBjdGlk ID0gJygwLDIpJyBPUiAnKDAsMSknID0gY3RpZDsKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgCi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAg ICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KICBUaWQgU2NhbiBvbiB0aWRzY2FuCi0gICBUSUQgQ29uZDogKChjdGlk ID0gJygwLDIpJzo6dGlkKSBPUiAoJygwLDEpJzo6dGlkID0gY3RpZCkpCi0oMiByb3dzKQor ICAgVElEIENvbmQ6IChjdGlkID0gQU5ZICgneyIoMCwyKSIsIigwLDEpIn0nOjp0aWRbXSkp CisgICBGaWx0ZXI6ICgoY3RpZCA9ICcoMCwyKSc6OnRpZCkgT1IgKCcoMCwxKSc6OnRpZCA9 IGN0aWQpKQorKDMgcm93cykKIAogU0VMRUNUIGN0aWQsICogRlJPTSB0aWRzY2FuIFdIRVJF IGN0aWQgPSAnKDAsMiknIE9SICcoMCwxKScgPSBjdGlkOwogIGN0aWQgIHwgaWQgCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jcmVhdGVfaW5kZXguc3FsIGIvc3JjL3Rl c3QvcmVncmVzcy9zcWwvY3JlYXRlX2luZGV4LnNxbAppbmRleCBlMjk2ODkxY2FiOC4uZjc0 YWQ0MTVmYmYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9pbmRl eC5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY3JlYXRlX2luZGV4LnNxbApAQCAt NzI2LDYgKzcyNiwyNCBAQCBEUk9QIFRBQkxFIG9uZWtfd2l0aF9udWxsOwogLS0gQ2hlY2sg Yml0bWFwIGluZGV4IHBhdGggcGxhbm5pbmcKIC0tCiAKK0VYUExBSU4gKENPU1RTIE9GRikK K1NFTEVDVCAqIEZST00gdGVuazEKKyAgV0hFUkUgdGhvdXNhbmQgPSA0MiBBTkQgKHRlbnRo b3VzID0gMSBPUiB0ZW50aG91cyA9IDMgT1IgdGVudGhvdXMgPSA0Mik7CitTRUxFQ1QgKiBG Uk9NIHRlbmsxCisgIFdIRVJFIHRob3VzYW5kID0gNDIgQU5EICh0ZW50aG91cyA9IDEgT1Ig dGVudGhvdXMgPSAzIE9SIHRlbnRob3VzID0gNDIpOworCitFWFBMQUlOIChDT1NUUyBPRkYp CitTRUxFQ1QgKiBGUk9NIHRlbmsxCisgIFdIRVJFIHRob3VzYW5kID0gNDIgQU5EICh0ZW50 aG91cyA9IDEgT1IgdGVudGhvdXMgPSAoU0VMRUNUIDEgKyAyKSBPUiB0ZW50aG91cyA9IDQy KTsKK1NFTEVDVCAqIEZST00gdGVuazEKKyAgV0hFUkUgdGhvdXNhbmQgPSA0MiBBTkQgKHRl bnRob3VzID0gMSBPUiB0ZW50aG91cyA9IChTRUxFQ1QgMSArIDIpIE9SIHRlbnRob3VzID0g NDIpOworCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgY291bnQoKikgRlJPTSB0ZW5r MQorICBXSEVSRSBodW5kcmVkID0gNDIgQU5EICh0aG91c2FuZCA9IDQyIE9SIHRob3VzYW5k ID0gOTkpOworU0VMRUNUIGNvdW50KCopIEZST00gdGVuazEKKyAgV0hFUkUgaHVuZHJlZCA9 IDQyIEFORCAodGhvdXNhbmQgPSA0MiBPUiB0aG91c2FuZCA9IDk5KTsKKwogRVhQTEFJTiAo Q09TVFMgT0ZGKQogU0VMRUNUICogRlJPTSB0ZW5rMQogICBXSEVSRSB0aG91c2FuZCA9IDQy IEFORCAodGVudGhvdXMgPSAxIE9SIHRlbnRob3VzID0gMyBPUiB0ZW50aG91cyA9IDQyKTsK QEAgLTczOCw2ICs3NTYsMzAgQEAgU0VMRUNUIGNvdW50KCopIEZST00gdGVuazEKIFNFTEVD VCBjb3VudCgqKSBGUk9NIHRlbmsxCiAgIFdIRVJFIGh1bmRyZWQgPSA0MiBBTkQgKHRob3Vz YW5kID0gNDIgT1IgdGhvdXNhbmQgPSA5OSk7CiAKK0VYUExBSU4gKENPU1RTIE9GRikKK1NF TEVDVCBjb3VudCgqKSBGUk9NIHRlbmsxCisgIFdIRVJFIGh1bmRyZWQgPSA0MiBBTkQgKHRo b3VzYW5kIDwgNDIgT1IgdGhvdXNhbmQgPCA5OSBPUiA0MyA+IHRob3VzYW5kIE9SIDQyID4g dGhvdXNhbmQpOworU0VMRUNUIGNvdW50KCopIEZST00gdGVuazEKKyAgV0hFUkUgaHVuZHJl ZCA9IDQyIEFORCAodGhvdXNhbmQgPCA0MiBPUiB0aG91c2FuZCA8IDk5IE9SIDQzID4gdGhv dXNhbmQgT1IgNDIgPiB0aG91c2FuZCk7CisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVD VCBjb3VudCgqKSBGUk9NIHRlbmsxCisgIFdIRVJFIHRob3VzYW5kID0gNDIgQU5EICh0ZW50 aG91cyA9IDEgT1IgdGVudGhvdXMgPSAzKSBPUiB0aG91c2FuZCA9IDQxOworU0VMRUNUIGNv dW50KCopIEZST00gdGVuazEKKyAgV0hFUkUgdGhvdXNhbmQgPSA0MiBBTkQgKHRlbnRob3Vz ID0gMSBPUiB0ZW50aG91cyA9IDMpIE9SIHRob3VzYW5kID0gNDE7CisKK0VYUExBSU4gKENP U1RTIE9GRikKK1NFTEVDVCBjb3VudCgqKSBGUk9NIHRlbmsxCisgIFdIRVJFIGh1bmRyZWQg PSA0MiBBTkQgKHRob3VzYW5kID0gNDIgT1IgdGhvdXNhbmQgPSA5OSBPUiB0ZW50aG91cyA8 IDIpIE9SIHRob3VzYW5kID0gNDE7CitTRUxFQ1QgY291bnQoKikgRlJPTSB0ZW5rMQorICBX SEVSRSBodW5kcmVkID0gNDIgQU5EICh0aG91c2FuZCA9IDQyIE9SIHRob3VzYW5kID0gOTkg T1IgdGVudGhvdXMgPCAyKSBPUiB0aG91c2FuZCA9IDQxOworCitFWFBMQUlOIChDT1NUUyBP RkYpCitTRUxFQ1QgY291bnQoKikgRlJPTSB0ZW5rMQorICBXSEVSRSBodW5kcmVkID0gNDIg QU5EICh0aG91c2FuZCA9IDQyIE9SIHRob3VzYW5kID0gNDEgT1IgdGhvdXNhbmQgPSA5OSBB TkQgdGVudGhvdXMgPSAyKTsKK1NFTEVDVCBjb3VudCgqKSBGUk9NIHRlbmsxCisgIFdIRVJF IGh1bmRyZWQgPSA0MiBBTkQgKHRob3VzYW5kID0gNDIgT1IgdGhvdXNhbmQgPSA0MSBPUiB0 aG91c2FuZCA9IDk5IEFORCB0ZW50aG91cyA9IDIpOworCiAtLQogLS0gQ2hlY2sgYmVoYXZp b3Igd2l0aCBkdXBsaWNhdGUgaW5kZXggY29sdW1uIGNvbnRlbnRzCiAtLQpkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvam9pbi5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3Nx bC9qb2luLnNxbAppbmRleCBlM2QyNjUyMDgzMi4uY2YwMmNjMzRlZDAgMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pvaW4uc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL2pvaW4uc3FsCkBAIC0xNDA5LDYgKzE0MDksMTUgQEAgc2VsZWN0ICogZnJvbSB0ZW5r MSBhIGpvaW4gdGVuazEgYiBvbgogICAoYS51bmlxdWUxID0gMSBhbmQgYi51bmlxdWUxID0g Mikgb3IKICAgKChhLnVuaXF1ZTIgPSAzIG9yIGEudW5pcXVlMiA9IDcpIGFuZCBiLmh1bmRy ZWQgPSA0KTsKIAorZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSB0ZW5rMSBh IGpvaW4gdGVuazEgYiBvbgorICAoYS51bmlxdWUxID0gMSBhbmQgYi51bmlxdWUxID0gMikg b3IKKyAgKChhLnVuaXF1ZTIgPSAzIG9yIGEudW5pcXVlMiA9IDcpIGFuZCBiLmh1bmRyZWQg PSA0KTsKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gdGVuazEgYSBqb2lu IHRlbmsxIGIgb24KKyAgKGEudW5pcXVlMSA8IDIwIG9yIGEudW5pcXVlMSA9IDMgb3IgYS51 bmlxdWUxID0gMSBhbmQgYi51bmlxdWUxID0gMikgb3IKKyAgKChhLnVuaXF1ZTIgPSAzIG9y IGEudW5pcXVlMiA9IDcpIGFuZCBiLmh1bmRyZWQgPSA0KTsKKwogLS0KIC0tIHRlc3QgcGxh Y2VtZW50IG9mIG1vdmFibGUgcXVhbHMgaW4gYSBwYXJhbWV0ZXJpemVkIGpvaW4gdHJlZQog LS0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BhcnRpdGlvbl9wcnVuZS5z cWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wYXJ0aXRpb25fcHJ1bmUuc3FsCmluZGV4IDQ0 MjQyOGQ5MzdjLi4zZDJjZTA0ZjllMiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9z cWwvcGFydGl0aW9uX3BydW5lLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wYXJ0 aXRpb25fcHJ1bmUuc3FsCkBAIC00MCw2ICs0MCw3IEBAIGV4cGxhaW4gKGNvc3RzIG9mZikg c2VsZWN0ICogZnJvbSBscCB3aGVyZSBhIGlzIG5vdCBudWxsOwogZXhwbGFpbiAoY29zdHMg b2ZmKSBzZWxlY3QgKiBmcm9tIGxwIHdoZXJlIGEgaXMgbnVsbDsKIGV4cGxhaW4gKGNvc3Rz IG9mZikgc2VsZWN0ICogZnJvbSBscCB3aGVyZSBhID0gJ2EnIG9yIGEgPSAnYyc7CiBleHBs YWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gbHAgd2hlcmUgYSBpcyBub3QgbnVsbCBh bmQgKGEgPSAnYScgb3IgYSA9ICdjJyk7CisKIGV4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0 ICogZnJvbSBscCB3aGVyZSBhIDw+ICdnJzsKIGV4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0 ICogZnJvbSBscCB3aGVyZSBhIDw+ICdhJyBhbmQgYSA8PiAnZCc7CiBleHBsYWluIChjb3N0 cyBvZmYpIHNlbGVjdCAqIGZyb20gbHAgd2hlcmUgYSBub3QgaW4gKCdhJywgJ2QnKTsKZGlm ZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggOTMyMGU0ZDgwODAuLjRlYzllMmNlMzJm IDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9z cmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMTcxNSw2ICsxNzE1LDcgQEAg TnVtZXJpY1ZhcgogT01fdWludDMyCiBPUAogT1NBUGVyR3JvdXBTdGF0ZQorT3JDbGF1c2VH cm91cAogT1NBUGVyUXVlcnlTdGF0ZQogT1NJbmZvCiBPU1NMQ2lwaGVyCg== --------------0cWM3CzSCNW7AN2YbcHP0bn0--