<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "http://bugs.gentoo.org/bugzilla.dtd">

<bugzilla version="2.22.7"
          urlbase="http://bugs.gentoo.org/"
          maintainer="bugzilla@gentoo.org"
>

    <bug>
          <bug_id>198229</bug_id>
          
          <creation_ts>2007-11-06 02:13 0000</creation_ts>
          <short_desc>app-text/texlive-core Multiple issues in dviljk</short_desc>
          <delta_ts>2007-11-13 01:18:22 0000</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>Gentoo Security</product>
          <component>Vulnerabilities</component>
          <version>unspecified</version>
          <rep_platform>All</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <status_whiteboard>~2 [noglsa]</status_whiteboard>
          
          <priority>P2</priority>
          <bug_severity>trivial</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>rbu@gentoo.org</reporter>
          <assigned_to>security@gentoo.org</assigned_to>
          <cc>aballier@gentoo.org</cc>
    
    <cc>tex@gentoo.org</cc>

      

      
          <long_desc isprivate="0">
            <who>rbu@gentoo.org</who>
            <bug_when>2007-11-06 02:13:50 0000</bug_when>
            <thetext>dviljk as shipped in app-text/texlive-core-2007-r4 is vulnerable to multiple buffer overflows and insecure temporary file creation. See attached patch for details.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>rbu@gentoo.org</who>
            <bug_when>2007-11-06 02:15:09 0000</bug_when>
            <thetext>Created an attachment (id=135304)
dviljk-security-fixes

Extracted from Debian&apos;s texlive package.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>rbu@gentoo.org</who>
            <bug_when>2007-11-06 02:15:40 0000</bug_when>
            <thetext>Alexis, please advise.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>aballier@gentoo.org</who>
            <bug_when>2007-11-06 09:32:46 0000</bug_when>
            <thetext>wow this patch is ugly, lots of cosmetics changes. I &apos;ll have to clean it a bit first.

Besides that, I&apos;ll have to check it very carfuly; somethings concern me:
+        if ( include_file ) {

include_file is a pointer, initialized to NULL so imho tests to zero should be replaced by test to be different of NULL (and sometimes its tested against NULL, some others against zero)

otherwise, as a first read, patch seems sane.
</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>rbu@gentoo.org</who>
            <bug_when>2007-11-06 09:50:42 0000</bug_when>
            <thetext>(In reply to comment #3)
&gt; wow this patch is ugly, lots of cosmetics changes. I &apos;ll have to clean it a bit
&gt; first.

Sorry, it&apos;s they way upstream committed it.


&gt; Besides that, I&apos;ll have to check it very carfuly; somethings concern me:
&gt; +        if ( include_file ) {
&gt; 
&gt; include_file is a pointer, initialized to NULL so imho tests to zero should be
&gt; replaced by test to be different of NULL (and sometimes its tested against
&gt; NULL, some others against zero)

Isn&apos;t 0 == NULL ?

</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>aballier@gentoo.org</who>
            <bug_when>2007-11-06 09:52:58 0000</bug_when>
            <thetext>(In reply to comment #4)
&gt; &gt; Besides that, I&apos;ll have to check it very carfuly; somethings concern me:
&gt; &gt; +        if ( include_file ) {
&gt; &gt; 
&gt; &gt; include_file is a pointer, initialized to NULL so imho tests to zero should be
&gt; &gt; replaced by test to be different of NULL (and sometimes its tested against
&gt; &gt; NULL, some others against zero)
&gt; 
&gt; Isn&apos;t 0 == NULL ?


usually yes, but iirc the standards dont specify it. I&apos;ll check that.
</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>aballier@gentoo.org</who>
            <bug_when>2007-11-06 23:28:37 0000</bug_when>
            <thetext>after checking, if(mypointer) is perfectly valid for checking against null. that&apos;s mypointer=0 that is not.


fixed in -r5, I removed most of the cosmetic changes.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>rbu@gentoo.org</who>
            <bug_when>2007-11-07 13:57:23 0000</bug_when>
            <thetext>Created an attachment (id=135423)
texlive-core-2007-dviljk-security-fixes.patch

Just for reference, the cleaned up patch Alexis applied.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>rbu@gentoo.org</who>
            <bug_when>2007-11-13 01:18:22 0000</bug_when>
            <thetext>*texlive-core-2007-r5 (06 Nov 2007)

  06 Nov 2007; Alexis Ballier &lt;aballier@gentoo.org&gt;
  -texlive-core-2007-r3.ebuild, -texlive-core-2007-r4.ebuild,
  +texlive-core-2007-r5.ebuild:
  fixes for buffer overflow in dviljk, bug #198229
</thetext>
          </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135304</attachid>
            <date>2007-11-06 02:15 0000</date>
            <desc>dviljk-security-fixes</desc>
            <filename>dviljk-security-fixes</filename>
            <type>text/plain</type>
            <data encoding="base64">c2VjdXJpdHkgZml4ZXMgZnJvbSBKb2FjaGltIFNjaHJvZCA8anNjaHJvZEBhY20ub3JnPgoocHJl
c2VudCBpbiB0aGUgc2VjdXJpdHkgYnJhbmNoIG9mIFRlWCBMaXZlIDIwMDcgYnJhbmNoMjAwNykK
VGhpcyB1cGRhdGUgaXMgYWxsIGFib3V0IHNlY3VyaXR5IGZpeGVzOgogMSkgZHZpbGprIGRpZCBu
b3QgY2hlY2sgYW55IG1lbW9yeSBib3VuZHMuIEFueSByZWFkIG9wZXJhdGlvbiwgYW55CiAgICBz
dHJpbmcgaGFuZGxpbmcgd2FzIGRvbmUgd2l0aG91dCBib3VuZHMgY2hlY2tpbmcgYW5kIGNvdWxk
IGJlCiAgICBleHBsb2l0ZWQgZm9yIGJ1ZmZlciBvdmVyZmxvd3MuCgogICAgSSBkaXNjb3ZlcmVk
IGNhLiAzMCBwbGFjZXMgd2hlcmUgdGhpcyBoYXBwZW5zIGFuZCBmaXhlZCBhbGwgb2YKICAgIHRo
ZW0uIEkgZGlkIG5vdCBkbyBhIGZ1bGwgY29kZSByZXZpZXcgYW5kIHRoZXJlZm9yZSBjYW4gbm90
CiAgICBwcm9taXNlIHRoYXQgdGhlcmUgYXJlIGV2ZW4gbW9yZSwgYnV0IGFsbCBvY2N1cmVuY2Vz
IG9mIGZyZWFkKCkKICAgIHdpdGggYXJiaXRyYXJ5IGxlbmd0aHMsIHN0cmNweSBhbmQgZnJpZW5k
cywgc3RyaW5nIGNvcHlpbmcgYnkKICAgICIqZGVzdCsrID0gKnNyYysrIiwgYW5kIG90aGVyIGZp
eGVkIGFycmF5IGFjY2Vzc2VzIGFyZSBub3cKICAgIGNoZWNrZWQuCgogMikgZHZpbGprIGhhZCBh
IHRlbXBmaWxlIGNyZWF0aW9uIHJhY2UgY29uZGl0aW9uLCBkdWUgdG8gdGhlIHVzYWdlIG9mCiAg
ICB0bXBuYW0oKS4gKFRoZXJlIGFyZSBtb3JlIGNhc2VzIGluIHRoZSB0ZXhrIHNvdXJjZSB0cmVl
LCBidHcuKQogICAgU2luY2UgbWtzdGVtcCgpIGNhbm5vdCBiZSB1dGlsaXplZCBoZXJlLCBJIGNo
YW5nZWQgdGhlIGNvZGUgdG8gdXNlCiAgICBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgY3JlYXRlZCB3
aXRoIG1rZHRlbXAoKS4gKElmIG1rZHRlbXAoKSBpcyBub3QKICAgIGF2YWlsYWJsZSwgSSBmYWxs
IGJhY2sgdG8gdXNlIHRtcG5hbSgpOyBpdCdzIG5vdCB3b3JzZSB0aGFuCiAgICBiZWZvcmUuKSBB
dCB0aGUgc2FtZSB0aW1lLCB0aGUgdGVtcG9yYXJ5IGZpbGVzIChhbmQgZGlyZWN0b3J5KSBhcmUK
ICAgIGRlbGV0ZWQgbm93IGF0IHRoZSBlbmQgb2YgdGhlIHByb2dyYW0gcnVuLgotLS0KIGJ1aWxk
L3NvdXJjZS90ZXhrL2R2aWxqay9DaGFuZ2VMb2cgICAgfCAgIDQ3ICsKIGJ1aWxkL3NvdXJjZS90
ZXhrL2R2aWxqay9jLWF1dG8uaW4gICAgfCAgIDI2IAogYnVpbGQvc291cmNlL3RleGsvZHZpbGpr
L2NvbmZpZy5oICAgICB8ICAgMjggLQogYnVpbGQvc291cmNlL3RleGsvZHZpbGprL2NvbmZpZ3Vy
ZSAgICB8ICAgNTYgKysKIGJ1aWxkL3NvdXJjZS90ZXhrL2R2aWxqay9jb25maWd1cmUuaW4gfCAg
ICAyIAogYnVpbGQvc291cmNlL3RleGsvZHZpbGprL2R2aTJ4eC5jICAgICB8ICA4ODkgKysrKysr
KysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLQogYnVpbGQvc291cmNlL3RleGsvZHZpbGprL2R2
aTJ4eC5oICAgICB8ICAgMzAgLQogNyBmaWxlcyBjaGFuZ2VkLCA2MzEgaW5zZXJ0aW9ucygrKSwg
NDQ3IGRlbGV0aW9ucygtKQoKSW5kZXg6IHRleGxpdmUtYmluLTIwMDcvYnVpbGQvc291cmNlL3Rl
eGsvZHZpbGprL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB0ZXhsaXZlLWJpbi0yMDA3Lm9yaWcv
YnVpbGQvc291cmNlL3RleGsvZHZpbGprL0NoYW5nZUxvZwkyMDA3LTA3LTAzIDEzOjQ0OjE5LjAw
MDAwMDAwMCArMDIwMAorKysgdGV4bGl2ZS1iaW4tMjAwNy9idWlsZC9zb3VyY2UvdGV4ay9kdmls
amsvQ2hhbmdlTG9nCTIwMDctMDctMDMgMTM6NDU6MTAuMDAwMDAwMDAwICswMjAwCkBAIC0xLDMg
KzEsNDIgQEAKKzIwMDctMDctMDIgIEpvYWNoaW0gU2Nocm9kICA8anNjaHJvZEBhY20ub3JnPgor
CisJKiBkdmkyeHguYyAoRG9TcGVjaWFsKTogU2VjdXJpdHkgaXNzdWU6IHVzYWdlIG9mIHRtcG5h
bSgpIGNhdXNlZAorCXRlbXBmaWxlIHJhY2UgY29uZGl0aW9uLiBJIHVzZSBta2R0ZW1wKCkgaWYg
aXQncyBhdmFpbGFibGUgYW5kCisJZmFsbCBiYWNrIHRvIHRtcG5hbS4KKworCVNwZWNpYWwgcGFy
c2luZyBvZiBpbmNsdWRlIGZpbGVzIHdhcyBpbmNvbnNpc3RlbnQsIHVuaWZ5IGl0LiBUaGUKKwlj
dXJyZW50IHBhcnNpbmcgY29kZSBzdGlsbCBhbGxvd3MgbG90cyBvZiBub24tc2Vuc2ljYWwgc3Bl
Y2lhbAorCWNvbW1hbmRzLCBidXQgYXQgbGVhc3QgaXQgZG9lc24ndCBhY2Nlc3MgdW5yZWxhdGVk
IHZhcmlhYmxlcyBhbnkKKwltb3JlLgorCisyMDA3LTA2LTI4ICBKb2FjaGltIFNjaHJvZCAgPGpz
Y2hyb2RAYWNtLm9yZz4KKworCSogZHZpMnh4LmM6IEZpeGVkIGEgd2hvbGUgYnVuY2ggb2YgYnVm
ZmVyIG92ZXJmbG93czogVGhlIHByb2dyYW0KKwlkaWQgbm90IGNoZWNrIG1lbW9yeSBib3VuZHMg
Zm9yIGFueSBzdHJpbmcgb3BlcmF0aW9uLiBBbGwgcGxhY2VzCisJd2hlcmUgc3RyaW5ncyBhcmUg
Y29waWVkIHdpdGggc3RyY3B5IGFyZSByZXBsYWNlZCBieSBkeW5hbWljYWxseQorCWFsbG9jYXRl
ZCBzdHJpbmdzICh3aXRoIHhzdHJkdXAgZnJvbSBrcGF0aHNlYSkgb3IgYm91bmRlZCBzdHJpbmcK
KwlvcGVyYXRpb25zLiBGaXhlZCBhbHNvIG1hbnVhbCBzdHJpbmcgY29weSBvcGVyYXRpb25zIG9u
IHNwZWNpYWwKKwlzdHJpbmdzLiBGaXhlZCBhcnJheSBidWZmZXIgb3ZlcmZsb3cgaW4gZGVmcG9p
bnQgYW5kIGZpbGwgc3BlY2lhbAorCW9wZXJhdGlvbnMuCisJKERvU3BlY2lhbCk6IENhbGwgb2Yg
Z2hvc3RzY3JpcHQgZm9yIHBzZmlsZSBzcGVjaWFsIGhhZCBhbHNvIGEKKwlwb3RlbnRpYWwgYnVm
ZmVyIG92ZXJmbG93IGNhdXNlZCBieSB1bmNoZWNrZWQgdXNhZ2Ugb2Ygc3ByaW50Zi4KKwlGaXgg
Y29yZSBkdW1wOiBDaGVjayBpZiBhbGwgcmVxdWlyZWQgcGFyYW1ldGVycyBvZiBwc2ZpbGUgc3Bl
Y2lhbAorCWFyZSBwYXNzZWQuCisKKwlCdW1wZWQgdmVyc2lvbiBudW1iZXIgdXAgdG8gMi42cDMu
CisKKwkqIGR2aTJ4eC5oOiBTb21lIGZpeGVkIHNpemVkIHN0cmluZyBhcnJheXMgYXJlIHBvaW50
ZXJzIG5vdywgdGhleQorCWdldCBkeW5hbWljYWxseSBhbGxvY2F0ZWQuCisJKEdldEJ5dGVzKTog
QW5vdGhlciBidWZmZXIgb3ZlcmZsb3c6IENoZWNrIHRoYXQgdGhlIGJ1ZmZlciBzaXplIGlzCisJ
c3VmZmljaWVudCB0byBzdG9yZSB0aGUgcmVhZCBieXRlcy4gVGhhdCByZWxpZXMgb24gdGhlIGlu
dmFyaWFudAorCXRoYXQgdGhlIEdldEJ5dGVzIG1hY3JvIGlzIGFsd2F5cyBjYWxsZWQgd2l0aCBh
biBhcnJheSBhcyBhcmd1bWVudAorCWFuZCBub3Qgd2l0aCBhIHBvaW50ZXIuCisKKwkqIGNvbmZp
Zy5oOiBUaHJvdyBhbiBlcnJvciBpZiBrcGF0aHNlYSBpcyBub3QgdXNlZC4gZHZpMnh4LmMKKwlo
YWQgcHJldmlvdXNseSBhbHJlYWR5IGtwYXRoc2VhIGRlcGVuZGVuY2llcyB3aXRob3V0IHByb3Rl
Y3RpbmcKKwl0aGVtIHdpdGggI2lmIEtQQVRIU0VBLiBXZSBnbyB0aGF0IHJvYWQgZnVydGhlciBz
aW5jZSB1cHN0cmVhbQorCWRvZXMgbm90IGV4aXN0IGFueSBtb3JlLgorCiAyMDA2LTA1LTI5ICBL
YXJsIEJlcnJ5ICA8a2FybEB0dWcub3JnPgogCiAJKiBNYWtlZmlsZS5pbiAoaW5zdGFsbC1leGVj
KTogY2QgJChiaW5kaXIpIGluIGNhc2Ugd2UgYXJlIGRvaW5nCkBAIC0xNyw3ICs1Niw3IEBACiAJ
T2xhZiBXZWJlcgogU2F0IEphbiAxNyAxNTowOTo1OSAxOTk4ICBTZWJhc3RpYW4gUmFodHogIDxz
LnJhaHR6QGVsc2V2aWVyLmNvLnVrPgogCi0JKiBhc3NvcnRlZCBwYXRjaGVzIGZyb20gUGV0ZXIg
QnJlaXRlbmxvaG5lciwgT2xhZiBXZWJlciwgCisJKiBhc3NvcnRlZCBwYXRjaGVzIGZyb20gUGV0
ZXIgQnJlaXRlbmxvaG5lciwgT2xhZiBXZWJlciwKICAJRWxpIFphcmV0c2tpaSwgRmFicmljZSBQ
b3BpbmVhdSBldGMuIEhvcGUgaXQgYWxsIHN0aWxsIHdvcmtzLgogCiAKQEAgLTU0LDcgKzkzLDcg
QEAKIE1vbiBEZWMgIDkgMDA6NTM6MzAgMTk5NiAgVWxyaWsgVmlldGggIDx2aWV0aEB0aHBoeS51
bmktZHVlc3NlbGRvcmYuZGU+CiAKIAkqIGR2aWhwOiBVc2UgYGJhc2VuYW1lICQwYCBpbiB1c2Fn
ZSBhbmQgdmVyc2lvbiBtZXNzYWdlcyBmb3IKLSAJY29uc2lzdGVuY3kgd2l0aCBvdGhlciBwcm9n
cmFtcyBhbmQgc2NyaXB0cy4gIAorIAljb25zaXN0ZW5jeSB3aXRoIG90aGVyIHByb2dyYW1zIGFu
ZCBzY3JpcHRzLgogCUFsc28gYWNjZXB0IC1oZWxwLCAtdmVyc2lvbiBpbiBhZGRpdGlvbiB0byAt
LWhlbHAsIC0tdmVyc2lvbi4KIAogU2F0IERlYyAgNyAxNzoxNTo1NCAxOTk2ICBLYXJsIEJlcnJ5
ICA8a2FybEBjcy51bWIuZWR1PgpAQCAtMjE4LDcgKzI1Nyw3IEBACiBGcmkgRGVjIDMwIDE1OjI1
OjU0IDE5OTQgIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CiAKICAgICAgICAgKiBNYWtl
ZmlsZS5pbiAoaW5zdGFsbC1leGVjKTogRG9uJ3QgZGVwZW5kIG9uIGRlZmF1bHQsIHNvIGR2aWxq
NAotICAgICAgICBkb2Vzbid0IGdldCBtYWRlIGlmIHRoZSB1c2VyIGRpZG4ndCB3YW50IGl0LiAK
KyAgICAgICAgZG9lc24ndCBnZXQgbWFkZSBpZiB0aGUgdXNlciBkaWRuJ3Qgd2FudCBpdC4KICAg
ICAgICAgKGluc3RhbGwtZGF0YSk6IG1rZGlyY2hhaW4gb24gdGV4aW5wdXRkaXIgYW5kIGZvbnRk
aXIuCiAgICAgICAgIEZyb20gSm9hY2hpbS4KIApAQCAtMzI1LDcgKzM2NCw3IEBACiAgICAgICAg
ICogY29uZmlnLmggKFJFU09MVVRJT04sIE1GTU9ERSkgW0xKNExdOiBTZXQgdG8gMzAwL2N4IGZv
ciB0aGlzIG5ldwogICAgICAgICBzeW1ib2wuCiAKLSAgICAgICAgKiBkdmkyeHguYyAoRGVjb2Rl
QXJncyk6IEFsd2F5cyBzY2FsZSBwZ3Npel9kb3RzLiAKKyAgICAgICAgKiBkdmkyeHguYyAoRGVj
b2RlQXJncyk6IEFsd2F5cyBzY2FsZSBwZ3Npel9kb3RzLgogICAgICAgICAobWFpbikgW0xKNF06
IERvbid0IGhhcmR3aXJlIDYwMGRwaS4KICAgICAgICAgVGhlc2UgZml4ZXMgZnJvbSBhanBAZW5n
LmNhbS5hYy51ay4KIApJbmRleDogdGV4bGl2ZS1iaW4tMjAwNy9idWlsZC9zb3VyY2UvdGV4ay9k
dmlsamsvYy1hdXRvLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHRleGxpdmUtYmluLTIwMDcub3JpZy9idWls
ZC9zb3VyY2UvdGV4ay9kdmlsamsvYy1hdXRvLmluCTIwMDctMDctMDMgMTM6NDQ6MzUuMDAwMDAw
MDAwICswMjAwCisrKyB0ZXhsaXZlLWJpbi0yMDA3L2J1aWxkL3NvdXJjZS90ZXhrL2R2aWxqay9j
LWF1dG8uaW4JMjAwNy0wNy0wMyAxMzo0NToxMC4wMDAwMDAwMDAgKzAyMDAKQEAgLTEsOSArMSwy
MyBAQAotLyogYy1hdXRvLmluLiAgR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgZnJvbSBjb25maWd1
cmUuaW4gYnkgYXV0b2hlYWRlci4gICovCisvKiBjLWF1dG8uaW4uICBHZW5lcmF0ZWQgZnJvbSBj
b25maWd1cmUuaW4gYnkgYXV0b2hlYWRlci4gICovCisvKiBhY2NvbmZpZy5oIC0tIHVzZWQgYnkg
YXV0b2hlYWRlciB3aGVuIGdlbmVyYXRpbmcgYy1hdXRvLmluLgogCi0vKiBEZWZpbmUgaWYgdHlw
ZSBjaGFyIGlzIHVuc2lnbmVkIGFuZCB5b3UgYXJlIG5vdCB1c2luZyBnY2MuICAqLwotI2lmbmRl
ZiBfX0NIQVJfVU5TSUdORURfXwotI3VuZGVmIF9fQ0hBUl9VTlNJR05FRF9fCi0jZW5kaWYKKyAg
IElmIHlvdSdyZSB0aGlua2luZyBvZiBlZGl0aW5nIGFjY29uZmlnLmggdG8gZml4IGEgY29uZmln
dXJhdGlvbgorICAgcHJvYmxlbSwgZG9uJ3QuIEVkaXQgdGhlIGMtYXV0by5oIGZpbGUgY3JlYXRl
ZCBieSBjb25maWd1cmUsCisgICBpbnN0ZWFkLiAgRXZlbiBiZXR0ZXIsIGZpeCBjb25maWd1cmUg
dG8gZ2l2ZSB0aGUgcmlnaHQgYW5zd2VyLiAgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhh
dmUgdGhlIGBta2R0ZW1wJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX01LRFRFTVAKKworLyog
RGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBybWRpcicgZnVuY3Rpb24uICovCisjdW5kZWYg
SEFWRV9STURJUgogCi0vKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGluIGEgbG9uZy4gICovCisvKiBE
ZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHVubGluaycgZnVuY3Rpb24uICovCisjdW5kZWYg
SEFWRV9VTkxJTksKKworLyogVGhlIHNpemUgb2YgYSBgbG9uZycsIGFzIGNvbXB1dGVkIGJ5IHNp
emVvZi4gKi8KICN1bmRlZiBTSVpFT0ZfTE9ORworCisvKiBEZWZpbmUgdG8gMSBpZiB0eXBlIGBj
aGFyJyBpcyB1bnNpZ25lZCBhbmQgeW91IGFyZSBub3QgdXNpbmcgZ2NjLiAgKi8KKyNpZm5kZWYg
X19DSEFSX1VOU0lHTkVEX18KKyMgdW5kZWYgX19DSEFSX1VOU0lHTkVEX18KKyNlbmRpZgpJbmRl
eDogdGV4bGl2ZS1iaW4tMjAwNy9idWlsZC9zb3VyY2UvdGV4ay9kdmlsamsvY29uZmlnLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gdGV4bGl2ZS1iaW4tMjAwNy5vcmlnL2J1aWxkL3NvdXJjZS90ZXhrL2R2aWxq
ay9jb25maWcuaAkyMDA3LTA3LTAzIDEzOjQ0OjI3LjAwMDAwMDAwMCArMDIwMAorKysgdGV4bGl2
ZS1iaW4tMjAwNy9idWlsZC9zb3VyY2UvdGV4ay9kdmlsamsvY29uZmlnLmgJMjAwNy0wNy0wMyAx
Mzo0NToxMC4wMDAwMDAwMDAgKzAyMDAKQEAgLTIxNiwxMiArMjE2LDcgQEAKICNlbmRpZgogCiAj
aWZuZGVmIEtQQVRIU0VBCi1leHRlcm4gYm9vbCBmaW5kZmlsZSgKLSNpZiBOZWVkRnVuY3Rpb25Q
cm90b3R5cGVzCi1jaGFyIHBhdGhbXSwgY2hhciBuW10sIGxvbmc0IGZvbnRtYWcsIGNoYXIgbmFt
ZVtdLCAKLQkgICAgICBib29sIHRmbSwgaW50IGxldmVsCi0jZW5kaWYKLSAgICApOworI2Vycm9y
ICJXb3VsZCBuZWVkIGNoYW5nZWQgZmluZGZpbGUsIGR2aWxqayBoYXMgY2hhbmdlZCBhbGxvY2F0
aW9uIHNlbWFudGljIG9mIG5hbWUgbWVtYmVyIGluIHRmb250cHRyIgogI2VuZGlmCiAKIApAQCAt
NDQ0LDMgKzQzOSwyNCBAQAogLyogSWYgd2UgaGF2ZSBuZWl0aGVyLCBzaG91bGQgZmFsbCBiYWNr
IHRvIGZwcmludGYgd2l0aCBmaXhlZCBhcmdzLiAgKi8KICNlbmRpZgogI2VuZGlmCisKKy8qIElm
IHVubGluayBhbmQgcm1kaXIgYXJlIG5vdCB0aGVyZSwgd2UgZG9uJ3QgZGVsZXRlIHRoZSB0ZW1w
b3JhcnkgZmlsZXMuICovCisjaWZuZGVmIEhBVkVfUk1ESVIKKyNkZWZpbmUgcm1kaXIoZGlyKQor
I2VuZGlmCisjaWZuZGVmIEhBVkVfVU5MSU5LCisjZGVmaW5lIHVubGluayhmaWxlKQorI2VuZGlm
CisKKy8qIElmIG1rZHRlbXAoKSBkb2VzIG5vdCBleGlzdCwgd2UgaGF2ZSB0byB1c2UgdG1wbmFt
KCkuICovCisjaWZuZGVmIEhBVkVfTUtEVEVNUAorI2RlZmluZSBta2R0ZW1wKGRpcikgKHRtcG5h
bShkaXIpID8gXAorCQkgICAgICAoIG1rZGlyKGRpciwgMDcwMCkgPT0gLTEgPyBOVUxMIDogZGly
ICkgOglcCisJCSAgICAgICggZXJybm8gPSBFSU5WQUwsIE5VTEwgKSApCisjZW5kaWYKKworI2lm
bmRlZiBLUEFUSFNFQQorLyogRklYTUU6IFNob3VsZCBwcm92aWRlIGEgc3RyZHVwIGZ1bmN0aW9u
LiBCdXQgY3VycmVudGx5IHRoaXMgdHJlZSBpcworICAgb25seSB1c2VkIGluIGNvbm5lY3Rpb24g
d2l0aCBrcGF0aHNlYSBhbnlob3cuICovCisjZXJyb3IgIk5lZWQgeHN0cmR1cCBhbmQgeG1hbGxv
YyBmdW5jdGlvbiwgZS5nLiBmcm9tIGtwYXRoc2VhIgorI2VuZGlmCkluZGV4OiB0ZXhsaXZlLWJp
bi0yMDA3L2J1aWxkL3NvdXJjZS90ZXhrL2R2aWxqay9jb25maWd1cmUKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
dGV4bGl2ZS1iaW4tMjAwNy5vcmlnL2J1aWxkL3NvdXJjZS90ZXhrL2R2aWxqay9jb25maWd1cmUJ
MjAwNy0wNy0wMyAxMzo0Mzo1NC4wMDAwMDAwMDAgKzAyMDAKKysrIHRleGxpdmUtYmluLTIwMDcv
YnVpbGQvc291cmNlL3RleGsvZHZpbGprL2NvbmZpZ3VyZQkyMDA3LTA3LTAzIDEzOjQ1OjEwLjAw
MDAwMDAwMCArMDIwMApAQCAtMTI4Myw2ICsxMjgzLDYyIEBACiAKIAogCitmb3IgYWNfZnVuYyBp
biBybWRpciB1bmxpbmsgbWtkdGVtcAorZG8KK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciAkYWNf
ZnVuYyIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MTI5MDogY2hlY2tpbmcgZm9y
ICRhY19mdW5jIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9mdW5jXyRh
Y19mdW5jJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFj
X2MiIDE+JjYKK2Vsc2UKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMTI5
NSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisvKiBTeXN0ZW0gaGVhZGVyIHRv
IGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAg
d2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYygpOyBiZWxvdy4gICovCisjaW5j
bHVkZSA8YXNzZXJ0Lmg+CisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUg
dG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQg
bWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRz
IGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyICRhY19mdW5j
KCk7CisKK2ludCBtYWluKCkgeworCisvKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMg
Zm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCisgICAgdG8gYWx3YXlzIGZhaWwgd2l0
aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKKyAgICBzb21ldGhp
bmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8K
KyNpZiBkZWZpbmVkIChfX3N0dWJfJGFjX2Z1bmMpIHx8IGRlZmluZWQgKF9fc3R1Yl9fXyRhY19m
dW5jKQorY2hva2UgbWUKKyNlbHNlCiskYWNfZnVuYygpOworI2VuZGlmCisKKzsgcmV0dXJuIDA7
IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxMzE4OiBcIiRhY19saW5rXCIpIDE+
JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4
dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9mdW5jXyRhY19mdW5j
PXllcyIKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUK
KyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAi
YWNfY3ZfZnVuY18kYWNfZnVuYz1ubyIKK2ZpCitybSAtZiBjb25mdGVzdCoKK2ZpCisKK2lmIGV2
YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2Z1bmNfJyRhY19mdW5jYFwiID0geWVzIjsgdGhlbgor
ICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisgICAgYWNfdHJfZnVuYz1IQVZFX2BlY2hvICRhY19m
dW5jIHwgdHIgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JyAnQUJDREVGR0hJSktMTU5PUFFS
U1RVVldYWVonYAorICBjYXQgPj4gY29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSAkYWNfdHJfZnVu
YyAxCitFT0YKKyAKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorZG9uZQorCisK
IGFjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyBNYWtlZmlsZSIKIAogdHJhcCAnJyAx
IDIgMTUKSW5kZXg6IHRleGxpdmUtYmluLTIwMDcvYnVpbGQvc291cmNlL3RleGsvZHZpbGprL2Nv
bmZpZ3VyZS5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSB0ZXhsaXZlLWJpbi0yMDA3Lm9yaWcvYnVpbGQvc291
cmNlL3RleGsvZHZpbGprL2NvbmZpZ3VyZS5pbgkyMDA3LTA3LTAzIDEzOjQ0OjA5LjAwMDAwMDAw
MCArMDIwMAorKysgdGV4bGl2ZS1iaW4tMjAwNy9idWlsZC9zb3VyY2UvdGV4ay9kdmlsamsvY29u
ZmlndXJlLmluCTIwMDctMDctMDMgMTM6NDU6MTAuMDAwMDAwMDAwICswMjAwCkBAIC0xNCw1ICsx
NCw3IEBACiBBQ19DX0NIQVJfVU5TSUdORUQKIEFDX0NIRUNLX1NJWkVPRihsb25nKQogCitBQ19D
SEVDS19GVU5DUyhybWRpciB1bmxpbmsgbWtkdGVtcCkKKwogS1BTRV9DT05GSUdfRklMRVMoW01h
a2VmaWxlXSkKIEFDX09VVFBVVApJbmRleDogdGV4bGl2ZS1iaW4tMjAwNy9idWlsZC9zb3VyY2Uv
dGV4ay9kdmlsamsvZHZpMnh4LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gdGV4bGl2ZS1iaW4tMjAwNy5vcmln
L2J1aWxkL3NvdXJjZS90ZXhrL2R2aWxqay9kdmkyeHguYwkyMDA3LTA3LTAzIDEzOjQ0OjQzLjAw
MDAwMDAwMCArMDIwMAorKysgdGV4bGl2ZS1iaW4tMjAwNy9idWlsZC9zb3VyY2UvdGV4ay9kdmls
amsvZHZpMnh4LmMJMjAwNy0wNy0wMyAxMzo0NToxMC4wMDAwMDAwMDAgKzAyMDAKQEAgLTEsNSAr
MSw1IEBACiAvKiAkSWQ6IGR2aTJ4eC5jLHYgMi41IDE5OTcvMTIvMDggMjA6NTI6MjAgbmV1bWFu
biBFeHAgJCAqLwotI2RlZmluZSBWRVJTSU9OICIyLjZwMiAoZHZpbGprKSIKKyNkZWZpbmUgVkVS
U0lPTiAiZHZpbGprICh2ZXJzaW9uIDIuNnAzKSIKIC8qCiAjZGVmaW5lIERFQlVHR1MgMQogKi8K
QEAgLTE2NSw3ICsxNjUsNyBAQAogIyBlbmRpZgogI2VuZGlmCiAKLSAgLyogSW5pdGlhbGl6ZSBw
aXhlbF9maWxlcyAqLyAgIAorICAvKiBJbml0aWFsaXplIHBpeGVsX2ZpbGVzICovCiAgIGZvciAo
aSA9IDA7IGkgPD0gTUFYT1BFTjsgaSsrKQogICAgIHBpeGVsX2ZpbGVzW2ldLnBpeGVsX2ZpbGVf
aWQgPSBGUE5VTEw7CiAKQEAgLTE3Myw3ICsxNzMsNyBAQAogICB5X29yaWdpbiA9IFlERUZBVUxU
T0ZGOyAvKiB5LW9yaWdpbiBpbiBkb3RzICAgICAgICAgICAgICAgICAgICAqLwogCiAgIHNldGJ1
ZihFUlJfU1RSRUFNLCBOVUxMKTsKLSAgKHZvaWQpIHN0cmNweShHX3Byb2duYW1lLCBhcmd2WzBd
KTsKKyAgR19wcm9nbmFtZSA9IGFyZ3ZbMF07CiAjaWZkZWYgS1BBVEhTRUEKICAga3BzZV9zZXRf
cHJvZ25hbWUoYXJndlswXSk7CiAgIGtwc2Vfc2V0X3Byb2dyYW1fZW5hYmxlZCAoa3BzZV9wa19m
b3JtYXQsIE1BS0VfVEVYX1BLX0JZX0RFRkFVTFQsIGtwc2Vfc3JjX2NvbXBpbGUpOwpAQCAtMjc1
LDcgKzI3NSw3IEBACiAgIEVNSVQxKCJAUEpMIFNFVCBQQUdFUFJPVEVDVD1PRkZcMDEyIik7CiAg
IEVNSVQxKCJAUEpMIEVOVEVSIExBTkdVQUdFPVBDTFwwMTIiKTsKICAgaWYgKGVjb25vTW9kZSAm
JiBMSjYpCi0gICAgICBFTUlUMSgiQFBKTCBTRVQgRUNPTk9NT0RFPU9OXDAxMiIpOyAgCisgICAg
ICBFTUlUMSgiQFBKTCBTRVQgRUNPTk9NT0RFPU9OXDAxMiIpOwogICBFTUlUMygiXDAzMyZ1JWRE
XDAzMyp0JWRSIixSRVNPTFVUSU9OLFJFU09MVVRJT04pOwogICBpZiAoZWNvbm9Nb2RlICYmICFM
SjYpCiAgICAgRU1JVDEoIlwwMzMqdjFUIik7CkBAIC00MzEsOCArNDMxLDggQEAKICAgICAgICAg
ICAvKgogICAgICAgICAgICAgZnByaW50ZihFUlJfU1RSRUFNLCJGaXJzdFBhcnRcbiBjb3VudCAl
ZCwgbW9kICVkLCBwcCAlZFxuIiwoaW50KWNvdW50WzBdLChpbnQpY291bnRbMF0lMixQYWdlUGFy
aXR5KTsKICAgICAgICAgICAgICovCi0gICAgICAgICAgU2tpcE1vZGUgPSAKLSAgICAgICAgICAg
IChib29sKShQYWdlUGFyaXR5ICE9IChzaG9ydCkoKGNvdW50WzBdPDAgPyAKKyAgICAgICAgICBT
a2lwTW9kZSA9CisgICAgICAgICAgICAoYm9vbCkoUGFnZVBhcml0eSAhPSAoc2hvcnQpKChjb3Vu
dFswXTwwID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYnMo
Y291bnRbMF0pKzEgOiBjb3VudFswXSklMikpOwogICAgICAgICAgIGlmIChjb3VudFswXSA9PSAw
KSBTa2lwTW9kZSA9IChib29sKSFTa2lwTW9kZTsKICAgICAgICAgfQpAQCAtNjQxLDcgKzY0MSw3
IEBACiAgICBpcyBub3QgYnVmZmVyZWQuICovCiAKIC8qIHJlYWQgYSBidWZmZXJlZCBieXRlICov
Ci1jaGFyIAorY2hhcgogI2lmIE5lZWRGdW5jdGlvblByb3RvdHlwZXMKIGJfcmVhZChGSUxFUFRS
IHNwZnApCiAjZWxzZQpAQCAtNjYxLDcgKzY2MSw3IEBACiB9CiAKICNpZmRlZiBSSVNDX0JVRkZF
Ugotdm9pZCAKK3ZvaWQKICNpZiBOZWVkRnVuY3Rpb25Qcm90b3R5cGVzCiBiX3dyaXRlKEZJTEVQ
VFIgc3BmcCwgY2hhciBjKSAvKiB3cml0ZSBhIGJ1ZmZlcmVkIGJ5dGUgKi8KICNlbHNlCkBAIC02
NzcsNyArNjc3LDcgQEAKICAgYnVmZm91dFtib2FjdCsrXSA9IGM7CiB9CiAKLXZvaWQgCit2b2lk
CiAjaWYgTmVlZEZ1bmN0aW9uUHJvdG90eXBlcwogYl93cnRtdWx0KEZJTEVQVFIgc3BmcCwgY2hh
ciAqYnVmLCBpbnQgbGVuKSAvKiB3cml0ZSBhIHNlcXVlbmNlIG9mIGJ5dGVzIHRvIHRoZSBvdXRw
dXQgYnVmZmVyICovCiAjZWxzZQpAQCAtNjkzLDIyICs2OTMsMjIgQEAKICAgICB3cml0ZV9tdWx0
aShidWZmb3V0LDEsYm9hY3Qsc3BmcCk7CiAgICAgLyogQ29weSBvbmx5IHNtYWxsIGJsb2Nrczsg
bGFyZ2Ugb25lcyBhcmUgd3JpdHRlbiBkaXJlY3RseSAqLwogICAgIGlmIChsZW4gPCAoQlVGRlNJ
WkUvNCkpIHsKLSAgICAgIGZvciAoaSA9IDA7IGk8bGVuOyBpKyspIAorICAgICAgZm9yIChpID0g
MDsgaTxsZW47IGkrKykKICAgICAgICAgYnVmZm91dFtpXSA9IGJ1ZltpXTsKICAgICAgIGJvYWN0
ID0gbGVuOwogICAgIH0gZWxzZSB7Ci0gICAgICB3cml0ZV9tdWx0aShidWYsMSxsZW4sc3BmcCk7
IAorICAgICAgd3JpdGVfbXVsdGkoYnVmLDEsbGVuLHNwZnApOwogICAgICAgYm9hY3QgPSAwOwog
ICAgIH0KICAgfQogICBlbHNlIHsKLSAgICBmb3IgKGkgPSAwOyBpPGxlbjsgaSsrKSAKKyAgICBm
b3IgKGkgPSAwOyBpPGxlbjsgaSsrKQogICAgICAgYnVmZm91dFtib2FjdCsrXSA9IGJ1ZltpXTsK
ICAgfQogfQogCiAvKiBmbHVzaCB0aGUgb3V0cHV0IGJ1ZmZlciAqLwotdm9pZCAKK3ZvaWQKICNp
ZiBOZWVkRnVuY3Rpb25Qcm90b3R5cGVzCiBiX29mbHVzaChGSUxFUFRSIHNwZnApCiAjZWxzZQpA
QCAtNzYyLDkgKzc2Miw5IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogQ29weUhQ
RmlsZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lm
IE5lZWRGdW5jdGlvblByb3RvdHlwZXMKLWludCBnZXRudW0oRklMRVBUUiBzcGZwLCBjaGFyICp0
LCBjaGFyICpudW1zdHIpIAoraW50IGdldG51bShGSUxFUFRSIHNwZnAsIGNoYXIgKnQsIGNoYXIg
Km51bXN0cikKICNlbHNlCi1pbnQgZ2V0bnVtKHNwZnAsIHQsIG51bXN0cikgCitpbnQgZ2V0bnVt
KHNwZnAsIHQsIG51bXN0cikKIEZJTEVQVFIgc3BmcDsKIGNoYXIgKnQsICpudW1zdHI7CiAjZW5k
aWYKQEAgLTc3NywzMCArNzc3LDMwIEBACiB9CiAKICNpZiBOZWVkRnVuY3Rpb25Qcm90b3R5cGVz
Ci12b2lkIHNldE9mZnNldChjaGFyIGRpciwgY2hhciBzaWduLCBpbnQgcG9zKSAKK3ZvaWQgc2V0
T2Zmc2V0KGNoYXIgZGlyLCBjaGFyIHNpZ24sIGludCBwb3MpCiAjZWxzZQotdm9pZCBzZXRPZmZz
ZXQoZGlyLCBzaWduLCBwb3MsIGZpcnN0KSAKK3ZvaWQgc2V0T2Zmc2V0KGRpciwgc2lnbiwgcG9z
LCBmaXJzdCkKIGNoYXIgZGlyLCBzaWduOwogaW50IHBvczsKICNlbmRpZgogewogICBpZiAoKHNp
Z24gPT0gJysnIHx8IHNpZ24gPT0gJy0nKSAmJiBwb3MgPiAwICkgewogICAgIEVNSVQ0KCJcMDMz
KnAlYyVkJWMiLHNpZ24scG9zLGRpcik7Ci0jaWZkZWYgREVCVUdHUyAgIAorI2lmZGVmIERFQlVH
R1MKICAgICBmcHJpbnRmKHN0ZGVyciwgInJlbGF0aXZlOiAqcCVjJWQlY1xuIiwgc2lnbiwgcG9z
LCBkaXIpOwogI2VuZGlmCiAgIH0gZWxzZSBpZiAocG9zPjApIHsKICAgICBFTUlUMygiXDAzMypw
JWQlYyIscG9zLGRpcik7Ci0jaWZkZWYgREVCVUdHUyAgIAorI2lmZGVmIERFQlVHR1MKICAgICBm
cHJpbnRmKHN0ZGVyciwgImFic29sdXRlOiAqcCVkJWNcbiIsIHBvcywgZGlyKTsKICNlbmRpZgot
ICAgIGlmIChkaXIgPT0gJ1gnKSAKKyAgICBpZiAoZGlyID09ICdYJykKICAgICAgIGxhc3Rfcngg
PSBwb3M7Ci0gICAgZWxzZSAKKyAgICBlbHNlCiAgICAgICBsYXN0X3J5ID0gcG9zOwogICB9IGVs
c2UgewogICAgIC8qRU1JVDMoIlwwMzMqcCVkJWMiLHBvcyxkaXIpOyovCi0jaWZkZWYgREVCVUdH
UyAgIAorI2lmZGVmIERFQlVHR1MKICAgICBmcHJpbnRmKHN0ZGVyciwgIlJlbGF0aXZlOiAqcCVk
JWNcbiIsIHBvcywgZGlyKTsKICNlbmRpZgogICB9CkBAIC04MzIsNyArODMyLDcgQEAKICAgICAg
dW53YW50ZWQgY29tbWFuZHMgZnJvbSB0aGUgaW5wdXQgZmlsZSBhbmQgb3V0cHV0cyB0aGUgcmVz
dCAqLwogCiAgIC8qIHJlc2V0IHRoZSBpbnB1dCBidWZmZXIgKi8KLSAgYmludW1iZXIgPSAwOyAK
KyAgYmludW1iZXIgPSAwOwogICBiaWFjdCA9IDA7CiAKICAgcWZwcmludGYoRVJSX1NUUkVBTSwi
IFslcyIsIHN0cik7CkBAIC04NTMsMTYgKzg1MywxNiBAQAogICAgICAgICAgIC8qIG9mIHRoZSBj
b21tYW5kcyAoeCBmaXJzdCwgeSBmaXJzdCkgKi8KIAogICAgICAgICAgIGlmICh0PT0nWScgfHwg
dD09J3knKSB7Ci0gICAgICAgICAgICBpZiAobnVtc3RyWzBdIT0nKycgJiYgbnVtc3RyWzBdIT0n
LScgJiYgbnVtPG1pbnkpIAorICAgICAgICAgICAgaWYgKG51bXN0clswXSE9JysnICYmIG51bXN0
clswXSE9Jy0nICYmIG51bTxtaW55KQogICAgICAgICAgICAgICBtaW55ID0gbnVtOwogICAgICAg
ICAgICAgaWYgKHQ9PSd5JykgewogICAgICAgICAgICAgICBudW0gPSBnZXRudW0oc3BmcCwgJnQs
IG51bXN0cik7Ci0gICAgICAgICAgICAgIGlmIChudW1zdHJbMF0hPScrJyAmJiBudW1zdHJbMF0h
PSctJyAmJiBudW08bWlueCkgCisgICAgICAgICAgICAgIGlmIChudW1zdHJbMF0hPScrJyAmJiBu
dW1zdHJbMF0hPSctJyAmJiBudW08bWlueCkKICAgICAgICAgICAgICAgICBtaW54ID0gbnVtOwog
ICAgICAgICAgICAgfQogICAgICAgICAgIH0KICAgICAgICAgICBpZiAodD09J1gnIHx8IHQ9PSd4
JykgewotICAgICAgICAgICAgaWYgKG51bXN0clswXSE9JysnICYmIG51bXN0clswXSE9Jy0nICYm
IG51bTxtaW54KSAKKyAgICAgICAgICAgIGlmIChudW1zdHJbMF0hPScrJyAmJiBudW1zdHJbMF0h
PSctJyAmJiBudW08bWlueCkKICAgICAgICAgICAgICAgbWlueCA9IG51bTsKIAogICAgICAgICAg
ICAgaWYgKHQ9PSd4JykgewpAQCAtOTIwLDE2ICs5MjAsMTYgQEAKICAgfQogICBxZnByaW50ZihF
UlJfU1RSRUFNLCIgWyVzIiwgc3RyKTsKICAgLyogcmVzZXQgaW5wdXQgYnVmZmVyIGFnYWluICov
Ci0gIGJpbnVtYmVyID0gMDsgCisgIGJpbnVtYmVyID0gMDsKICAgYmlhY3QgPSAwOwogCiAKICAg
LyogUGFzcyB0aHJvdWdoIHRoZSBpbnB1dCBmaWxlIGFnYWluIGJ1dCB0aGlzIHRpbWUgb3V0cHV0
IHRoZSAqLwogICAvKiByZXRhaW5lZCBQQ0wgY29tbWFuZHMgKi8KLSNpZmRlZiBERUJVR0dTICAg
Ci0gIGZwcmludGYoc3RkZXJyLCJcbm1pbng9JWQsIG1pbnk9JWQsIHhnPSVkLCB5Zz0lZFxuIiwg
CisjaWZkZWYgREVCVUdHUworICBmcHJpbnRmKHN0ZGVyciwiXG5taW54PSVkLCBtaW55PSVkLCB4
Zz0lZCwgeWc9JWRcbiIsCiAgICAgICAgICAgbWlueCwgbWlueSwgeF9nb2Zmc2V0LCB5X2dvZmZz
ZXQpOwotI2VuZGlmICAKKyNlbmRpZgogICBkbyB7CiAgICAgdCA9IChjaGFyKWJfcmVhZChzcGZw
KTsKICAgICBpZiAodD09MHgxQikgewpAQCAtOTQ4LDcgKzk0OCw3IEBACiAgICAgICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgICBzZXRPZmZzZXQoJ1knLG51bXN0clswXSwgbnVtKTsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAodCA9PSAneScpIHsK
ICAgICAgICAgICAgICAgbnVtID0gZ2V0bnVtKHNwZnAsICZ0LG51bXN0cik7CiAgICAgICAgICAg
ICAgIGlmIChudW1zdHJbMF0hPScrJyAmJiBudW1zdHJbMF0hPSctJykgewpAQCAtOTYwLDE2ICs5
NjAsMTYgQEAKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgIH0KLSAg
ICAgICAgICAgIAorCiAgICAgICAgICAgaWYgKHQ9PSdYJyB8fCB0PT0neCcpIHsKICAgICAgICAg
ICAgIGlmIChudW1zdHJbMF0hPScrJyAmJiBudW1zdHJbMF0hPSctJykgewogICAgICAgICAgICAg
ICAvKkFkZCBpbiB0aGUgY29ycmVjdCBob3Jpem9udGFsIG9mZnNldCovCiAgICAgICAgICAgICAg
IHNldE9mZnNldCgnWCcsbnVtc3RyWzBdLAogICAgICAgICAgICAgICAgICAgICAgICAgbnVtIC0g
bWlueCArIChpbnQpUElYUk9VTkQoaCxoY29udikgKyB4X2dvZmZzZXQpOwotICAgICAgICAgICAg
fSBlbHNlIHsgCisgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICBzZXRPZmZzZXQo
J1gnLG51bXN0clswXSwgbnVtKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAg
ICAgICAgICBpZiAodD09J3gnKSB7CiAgICAgICAgICAgICAgIG51bSA9IGdldG51bShzcGZwLCAm
dCxudW1zdHIpOwogICAgICAgICAgICAgICBpZiAobnVtc3RyWzBdIT0nKycgJiYgbnVtc3RyWzBd
IT0nLScpIHsKQEAgLTEwMjcsNyArMTAyNyw3IEBACiAgICAgICAgIGNhc2UoMHg2Myk6CiAgICAg
ICAgICAgLyogUmVjdGFuZ3VsYXIgZHJhdyBjb21tYW5kcyAqLwogICAgICAgICAgIEVNSVQxKCJc
MDMzKmMiKTsKLSAgICAgICAgICBmb3IgKHQgPSAoY2hhciliX3JlYWQoc3BmcCk7IHQ8MHg0MCB8
fCB0PjB4NjA7IAorICAgICAgICAgIGZvciAodCA9IChjaGFyKWJfcmVhZChzcGZwKTsgdDwweDQw
IHx8IHQ+MHg2MDsKICAgICAgICAgICAgICAgIHQgPSAoY2hhciliX3JlYWQoc3BmcCkpCiAgICAg
ICAgICAgICBFTUlUQyh0KTsKICAgICAgICAgICBFTUlUQyh0KTsKQEAgLTExMTAsNyArMTExMCw3
IEBACiAgIGxvbmc0IHggPSAwOyAgICAgIC8qIG51bWJlciBiZWluZyBjb25zdHJ1Y3RlZCAqLwog
ICB1bnNpZ25lZCBjaGFyIGg7CiAgIHdoaWxlIChuLS0pIHsKLSAgICB4IDw8PSA4OyAKKyAgICB4
IDw8PSA4OwogICAgIHJlYWRfYnl0ZShmcCxoKTsKICAgICB4IHw9IGg7CiAgIH0KQEAgLTExNDMs
NyArMTE0Myw3IEBACiAjaWZkZWYgU0lHTl9ERUJVRwogICBsb25nNCAgICB4MDsgICAgICAvKiBj
b3B5IG9mIHggICovCiAjZW5kaWYKLSAgcmVhZF9ieXRlKGZwLGgpOyAKKyAgcmVhZF9ieXRlKGZw
LGgpOwogICB4ID0gaDsgLyogZ2V0IGZpcnN0IChoaWdoLW9yZGVyKSBieXRlICovCiAgIG4xID0g
bi0tOwogICB3aGlsZSAobi0tKSB7CkBAIC0xMjk2LDcgKzEyOTYsNyBAQAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC0tLT4gcmVzdWx0IGluIERYICAgICAgICov
CiAKICAgaWYgKCAgKHJlZ3MuaC5kbCAmIDB4ODApICAgICAgICAgICAgICAvKiBmaWxlIGhhbmRs
ZSBwb2ludHMgdG8gYSBkZXZpY2UgKi8KLSAgICAgICAgJiYgIShyZWdzLmguZGwgJiAweDA3KSAp
IHsgICAgICAvKiBuZWl0aGVyIGNvbnNvbGUgaS9vIG9yIG51bGwgICAgKi8gCisgICAgICAgICYm
ICEocmVncy5oLmRsICYgMHgwNykgKSB7ICAgICAgLyogbmVpdGhlciBjb25zb2xlIGkvbyBvciBu
dWxsICAgICovCiAKICAgICByZWdzLmguZGwgIHw9IDB4MjA7ICAgICAgICAgICAgICAgICAvKiBz
ZXQgQklOQVJZIGJpdCBpbiBkZXZpY2UgaW5mbyAgKi8KICAgICByZWdzLmguYWggPSAodW5zaWdu
ZWQgY2hhcikgMHg0NDsgICAvKiBJT0NUTCAgICAgICAgICAgICAgICAgICovCkBAIC0xNTAxLDIw
ICsxNTAxLDIwIEBACiAgICAgLyogRm9yIENPTVBSRVNTRUQgQ0hBUlMgKi8KICAgICBpZiAoUHJl
dlNpemUgPCBuYnBsKSB7CiAgICAgICBQcmV2U2l6ZSA9IG5icGw7Ci0gICAgICBpZiAoUHJldkxp
bmUgIT0gTlVMTCkgCisgICAgICBpZiAoUHJldkxpbmUgIT0gTlVMTCkKICAgICAgICAgZnJlZShQ
cmV2TGluZSk7Ci0gICAgICBpZiAoKFByZXZMaW5lID0gKHVuc2lnbmVkIGNoYXIqKW1hbGxvYyhQ
cmV2U2l6ZSpzaXplb2YoY2hhcikpKSAKKyAgICAgIGlmICgoUHJldkxpbmUgPSAodW5zaWduZWQg
Y2hhciopbWFsbG9jKFByZXZTaXplKnNpemVvZihjaGFyKSkpCiAgICAgICAgICAgPT0gTlVMTCkg
ewotICAgICAgICBQcmV2U2l6ZSA9IDA7IAorICAgICAgICBQcmV2U2l6ZSA9IDA7CiAgICAgICAg
IEZhdGFsKCJFbWl0Q2hhcjogT3V0IG9mIG1lbW9yeSBlcnJvciFcbiIpOwogICAgICAgfQogICAg
IH0KICAgICAvKiBDbGVhciBzZWVkIGxpbmUgKi8KLSAgICBmb3IgKGkgPSAwOyBpPG5icGw7IGkr
KykgCisgICAgZm9yIChpID0gMDsgaTxuYnBsOyBpKyspCiAgICAgICBQcmV2TGluZVtpXSA9IDA7
Ci0gICAgQ0NoYXJfT2ZmID0gMDsgCisgICAgQ0NoYXJfT2ZmID0gMDsKICAgICBDQ2hhcl9MYXN0
ID0gLTE7Ci0gICAgCisKICAgICAvKiBUaGlzIGJpdCBjb3BpZWQgZnJvbSBiZWxvdy4uLiAqLwog
IyAgaWZkZWYgVVNFUFhMCiAgICAgaWYgKGZvbnRwdHItPmlkID09IHBrODkpCkBAIC0xNTMwLDEx
ICsxNTMwLDExIEBACiAgICAgICAgIENvbXByZXNzZWRDaGFyTGluZShjZSxuYnBsLHNsKTsKICAg
ICAgIH0KICMgIGVsc2UKLSAgICBmb3IgKGkgPSBudW1fcm93czsgaSA+IDA7IGktLSkgCisgICAg
Zm9yIChpID0gbnVtX3Jvd3M7IGkgPiAwOyBpLS0pCiAgICAgICBDb21wcmVzc2VkQ2hhckxpbmUo
Y2UsbmJwbCwoYml0cyArIChpLTEpKm5icGwpKTsKICMgIGVuZGlmIC8qIFVTRVBYTCAqLwogICB9
Ci0gIGVsc2UgCisgIGVsc2UKICAgICBDQ2hhcl9PZmYgPSAtMTsKICMgZW5kaWYgLyogTEo0ICov
CiAKQEAgLTE1NDQsMTAgKzE1NDQsMTAgQEAKICMgaWZkZWYgTEo0CiAgIC8qIHByaW50ZigicmF3
OiAlZCAoJWQgKiAlZCksIGNvbXA6ICVkXG4iLAogICAgICB0b3RhbCxjZS0+d2lkdGgsY2UtPmhl
aWdodCxDQ2hhcl9PZmYpOyAqLwotICAvKiBDaGFyYWN0ZXJzIHRoYXQgZG9uJ3QgY29tcHJlc3Mg
d2VsbCBhcmUgdXN1YWxseSByYXRoZXIgc21hbGwgc28gCi0gICAgIHJlYWRpbmcgdGhlbSBhZ2Fp
biBhbmQgd3JpdGluZyB0aGVtIHVuY29tcHJlc3NlZCB3b24ndCB0YWtlIAorICAvKiBDaGFyYWN0
ZXJzIHRoYXQgZG9uJ3QgY29tcHJlc3Mgd2VsbCBhcmUgdXN1YWxseSByYXRoZXIgc21hbGwgc28K
KyAgICAgcmVhZGluZyB0aGVtIGFnYWluIGFuZCB3cml0aW5nIHRoZW0gdW5jb21wcmVzc2VkIHdv
bid0IHRha2UKICAgICAgbXVjaCB0aW1lIGFueXdheS4gKi8KLSAgaWYgKENDaGFyX09mZiA+IHRv
dGFsKSAKKyAgaWYgKENDaGFyX09mZiA+IHRvdGFsKQogICAgIENDaGFyX09mZiA9IC0xOwogICBp
ZiAoQ0NoYXJfT2ZmID49IDApIHsKICAgICBFTUlUNCgiXDAzMypjJXNkJWRFXDAzMyhzJWxkVyIs
IGNudl9idWZmZXIsCkBAIC0xNjA2LDcgKzE2MDYsNyBAQAogICAgICAgfQogI2VuZGlmCiAgICAg
fQotICAgIAorCiAjaWZkZWYgSUJNMzgxMgogI2lmZGVmIFVTRVBYTAogICB1c2VkX2ZvbnRzdG9y
YWdlICs9IChsb25nNCljZS0+aGVpZ2h0ICogKChjZS0+d2lkdGggKyAxNSkgPj4gNCkgKiAyICsg
MTQ7CkBAIC0xNjUyLDcgKzE2NTIsNyBAQAogaW50ICAgICByZXBlYXRjb3VudDsKIAogdm9pZCAg
ICAgICAgICAgICAvKiA8UmVhZCBhbmQgdHJhbnNsYXRlIHJhc3RlciBkZXNjcmlwdGlvbkA+Ki8K
LSNpZiBOZWVkRnVuY3Rpb25Qcm90b3R5cGVzIAorI2lmIE5lZWRGdW5jdGlvblByb3RvdHlwZXMK
IFBrUmFzdGVyKHN0cnVjdCBjaGFyX2VudHJ5ICpjZSwgaW50IHJhc3RlcikKICNlbHNlCiBQa1Jh
c3RlcihjZSwgcmFzdGVyKQpAQCAtMTczNSw3ICsxNzM1LDcgQEAKICAgICAgIGlmICh3b3Jkd2Vp
Z2h0IDwgMzEpIHsKICNpZmRlZiBDT01NRU5UCiAjIGlmZGVmIERSQVdHTFlQSAotICAgICAgICB7
IAorICAgICAgICB7CiAgICAgICAgICAgaW50IGs7CiAgICAgICAgICAgZm9yIChrID0gMTU7IGs+
PTA7IGstLSkgewogICAgICAgICAgICAgaWYgKChwb3dlcltrXSAmIHdvcmQpIT0wKSBwcmludGYo
IloiKTsKQEAgLTE3NDksNyArMTc0OSw3IEBACiAgICAgICAgIGZvciAoaiA9IDM7IGogPj0gKHdv
cmR3aWR0aCAqIDQgLSAobG9uZzQpbmJwbCk7IGotLSkgewogICAgICAgICAgIE9VVENIQVIoKCh3
b3JkID4+IChqIDw8IDMpKSAmIDB4ZmYpKTsKICNpZmRlZiBEUkFXR0xZUEgKLSAgICAgICAgICB7
IAorICAgICAgICAgIHsKICAgICAgICAgICAgIGludCBrOwogICAgICAgICAgICAgZm9yIChrID0g
Nzsgaz49MDsgay0tKSB7CiAgICAgICAgICAgICAgIGlmICgocG93ZXJba10gJiAoKHdvcmQgPj4g
KGogPDwgMykpICYgMHhmZikpIT0wKSBwcmludGYoIk0iKTsKQEAgLTE3NjAsOSArMTc2MCw5IEBA
CiAgICAgICAgIH0KIAogICAgICAgfQotICAgICAgICAKKwogICAgICAgc3dpdGNoIChyYXN0ZXIp
IHsKLSAgICAgIGNhc2UgMTogCisgICAgICBjYXNlIDE6CiAgICAgICAgIFJhc3RlckxpbmUoY2Us
IG5icGwsIGN1cnJlbnRfbGluZSwgcmFzdGVyX2xpbmVfYnVmKTsKICAgICAgICAgY3VycmVudF9s
aW5lKys7CiAgICAgICAgIGJyZWFrOwpAQCAtMTgyNiw3ICsxODI2LDcgQEAKICAgICAgICAgICAg
IE9VVENIQVIoKHRsICAgICAgICYgMHhGRikpOwogCiAjaWZkZWYgRFJBV0dMWVBICi0gICAgICAg
ICAgICB7IAorICAgICAgICAgICAgewogICAgICAgICAgICAgICBpbnQgazsKICAgICAgICAgICAg
ICAgZm9yIChrID0gMzE7IGs+PTA7IGstLSkgewogICAgICAgICAgICAgICAgIGlmICgocG93ZXJb
a10gJiByb3dbaWldKSE9MCkgcHJpbnRmKCJNIik7CkBAIC0xODM5LDcgKzE4MzksNyBAQAogICAg
ICAgICAgIGZvciAoaiA9IDM7IGogPj0gKHdvcmR3aWR0aCAqNCAtIChsb25nNCluYnBsKTsgai0t
KSB7CiAgICAgICAgICAgICBPVVRDSEFSKCgodGwgPj4gKGogPDwgMykpICYgMHhmZikpOwogI2lm
ZGVmIERSQVdHTFlQSAotICAgICAgICAgICAgeyAKKyAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgaW50IGs7CiAgICAgICAgICAgICAgIGZvciAoayA9IDc7IGs+PTA7IGstLSkgewogICAgICAg
ICAgICAgICAgIGlmICgocG93ZXJba10gJiAoKHRsID4+IChqIDw8IDMpKSAmIDB4ZmYpKSE9MCkg
cHJpbnRmKCJNIik7CkBAIC0xODUwLDcgKzE4NTAsNyBAQAogICAgICAgICAgIH0KIAogICAgICAg
ICAgIHN3aXRjaCAocmFzdGVyKSB7Ci0gICAgICAgICAgY2FzZSAxOiAKKyAgICAgICAgICBjYXNl
IDE6CiAgICAgICAgICAgICBSYXN0ZXJMaW5lKGNlLCAodW5zaWduZWQgaW50KW5icGwsIGN1cnJl
bnRfbGluZSwgcmFzdGVyX2xpbmVfYnVmKTsKICAgICAgICAgICAgIGN1cnJlbnRfbGluZSsrOwog
ICAgICAgICAgICAgYnJlYWs7CkBAIC0xOTY5LDcgKzE5NjksNyBAQAogCiAjaWZkZWYgTEo0CiAv
KiBDb21wcmVzcyBhIHJhc3RlciBsaW5lIGluIGNvbXByZXNzaW9uIG1vZGUgMiAqLwotaW50IAor
aW50CiAjaWYgTmVlZEZ1bmN0aW9uUHJvdG90eXBlcwogQ29tcHJlc3NMaW5lMih1bnNpZ25lZCBj
aGFyICpidWZmZXIsIHVuc2lnbmVkIGNoYXIgKmJ1ZmZvdXQsIGludCBlbWl0Ynl0ZXMpCiAjZWxz
ZQpAQCAtMTk4NCwxMyArMTk4NCwxMyBAQAogICBjaGFyIGxhc3QsYzsKIAogICAvKiB0cmFwIGVt
cHR5IGxpbmVzIChvdGhlcndpc2UgcHJvYmxlbXMgd2l0aCBQYWNrYml0cykgKi8KLSAgaWYgKGVt
aXRieXRlcyA9PSAwKSAKKyAgaWYgKGVtaXRieXRlcyA9PSAwKQogICAgIHJldHVybigwKTsKICAg
LyogVXNlIFBhY2tiaXRzIGNvbXByZXNzaW9uIChtb2RlIDIpIG9uIHJhc3RlciBsaW5lICovCi0g
IHBvcyA9IGJ1ZmZlcjsgCi0gIGxpdHBvcyA9IGJ1ZmZlcjsgCi0gIHBhY2sgPSAxOyAKLSAgcHBv
cyA9IGJ1ZmZvdXQ7IAorICBwb3MgPSBidWZmZXI7CisgIGxpdHBvcyA9IGJ1ZmZlcjsKKyAgcGFj
ayA9IDE7CisgIHBwb3MgPSBidWZmb3V0OwogICBsYXN0ID0gKnBvcysrOwogICB1cHBlciA9IGJ1
ZmZlciArIGVtaXRieXRlczsKICAgd2hpbGUgKHBvcyA8IHVwcGVyKSB7CkBAIC0yMDAwLDE0ICsy
MDAwLDE0IEBACiAgICAgICAvKiBBdCBsZWFzdCB0aHJlZSBlcXVhbCBieXRlcyA9PT4gd3JpdGUg
b3V0IHByZWNlZGluZyBsaXRlcmFsIHNlcXVlbmNlICovCiAgICAgICBpZiAoKHBhY2sgPT0gMykg
JiYgKChsaXQgPSAoaW50KShwb3MgLSBsaXRwb3MgLSAzKSkgIT0gMCkpIHsKICAgICAgICAgd2hp
bGUgKGxpdCA+PSAxMjgpIHsKLSAgICAgICAgICAqcHBvcysrID0gMTI3OyAKLSAgICAgICAgICBm
b3IgKGkgPSAxOyBpPD0xMjg7IGkrKykgCisgICAgICAgICAgKnBwb3MrKyA9IDEyNzsKKyAgICAg
ICAgICBmb3IgKGkgPSAxOyBpPD0xMjg7IGkrKykKICAgICAgICAgICAgICpwcG9zKysgPSAqbGl0
cG9zKys7CiAgICAgICAgICAgbGl0IC09IDEyODsKICAgICAgICAgfQogICAgICAgICBpZiAobGl0
ICE9IDApIHsKLSAgICAgICAgICAqcHBvcysrID0gbGl0LTE7IAotICAgICAgICAgIHdoaWxlICgo
bGl0LS0pID4gMCkgCisgICAgICAgICAgKnBwb3MrKyA9IGxpdC0xOworICAgICAgICAgIHdoaWxl
ICgobGl0LS0pID4gMCkKICAgICAgICAgICAgICpwcG9zKysgPSAqbGl0cG9zKys7CiAgICAgICAg
ICAgLyogbGl0cG9zIGlzIG5vdyBwb3MtMyAoaS5lLiBmaXJzdCBvZiB0aGUgc2VxdWVuY2UpICov
CiAgICAgICAgIH0KQEAgLTIwMTUsMTkgKzIwMTUsMTkgQEAKICAgICB9CiAgICAgZWxzZSB7CiAg
ICAgICB3aGlsZSAocGFjayA+PSAxMjgpIHsKLSAgICAgICAgKnBwb3MrKyA9IDEyOTsgCi0gICAg
ICAgICpwcG9zKysgPSBsYXN0OyAKLSAgICAgICAgbGl0cG9zICs9IDEyODsgCisgICAgICAgICpw
cG9zKysgPSAxMjk7CisgICAgICAgICpwcG9zKysgPSBsYXN0OworICAgICAgICBsaXRwb3MgKz0g
MTI4OwogICAgICAgICBwYWNrIC09IDEyODsKICAgICAgIH0KICAgICAgIC8qIEF0IGxlYXN0IDMg
ZXF1YWwgYnl0ZXMgb3IgMiB0aGF0IGRvbid0IGJyZWFrIGEgbGl0ZXJhbCBzZXF1ZW5jZQogICAg
ICAgICAgPT0+IHdyaXRlIG91dCBwYWNrZWQgc2VxdWVuY2UgKi8KICAgICAgIGlmICgocGFjayA+
PSAzKSB8fCAoKHBhY2sgPT0gMikgJiYgKGxpdHBvcyA9PSBwb3MtMykpKSB7Ci0gICAgICAgICpw
cG9zKysgPSAyNTcgLSBwYWNrOyAKLSAgICAgICAgKnBwb3MrKyA9IGxhc3Q7IAorICAgICAgICAq
cHBvcysrID0gMjU3IC0gcGFjazsKKyAgICAgICAgKnBwb3MrKyA9IGxhc3Q7CiAgICAgICAgIGxp
dHBvcyArPSBwYWNrOwogICAgICAgfQotICAgICAgcGFjayA9IDE7IAorICAgICAgcGFjayA9IDE7
CiAgICAgICBsYXN0ID0gYzsKICAgICB9CiAgICAgaWYgKHBwb3MgPiAoYnVmZm91dCArIEJVRkZT
SVpFLzIgLSAxMjkpKSB7CkBAIC0yMDM2LDI4ICsyMDM2LDI4IEBACiAgICAgICByZXR1cm4oMCk7
CiAgICAgfQogICB9Ci0gIAorCiAgIHdoaWxlIChwYWNrID49IDEyOCkgewotICAgICpwcG9zKysg
PSAxMjk7IAotICAgICpwcG9zKysgPSBsYXN0OyAKLSAgICBsaXRwb3MgKz0gMTI4OyAKKyAgICAq
cHBvcysrID0gMTI5OworICAgICpwcG9zKysgPSBsYXN0OworICAgIGxpdHBvcyArPSAxMjg7CiAg
ICAgcGFjayAtPSAxMjg7CiAgIH0KICAgaWYgKChwYWNrID49IDMpIHx8ICgocGFjayA9PSAyKSAm
JiAobGl0cG9zID09IHBvcy0zKSkpIHsKLSAgICAqcHBvcysrID0gMjU3IC0gcGFjazsgCi0gICAg
KnBwb3MrKyA9IGxhc3Q7IAorICAgICpwcG9zKysgPSAyNTcgLSBwYWNrOworICAgICpwcG9zKysg
PSBsYXN0OwogICAgIGxpdHBvcyArPSBwYWNrOwogICB9CiAgIGVsc2UgaWYgKChsaXQgPSAoaW50
KShwb3MgLSBsaXRwb3MpKSAhPSAwKSB7CiAgICAgd2hpbGUgKGxpdCA+PSAxMjgpIHsKLSAgICAg
ICpwcG9zKysgPSAxMjc7IAotICAgICAgZm9yIChpID0gMTsgaTw9MTI4OyBpKyspIAorICAgICAg
KnBwb3MrKyA9IDEyNzsKKyAgICAgIGZvciAoaSA9IDE7IGk8PTEyODsgaSsrKQogICAgICAgICAq
cHBvcysrID0gKmxpdHBvcysrOwogICAgICAgbGl0IC09IDEyODsKICAgICB9CiAgICAgaWYgKGxp
dCAhPSAwKSB7Ci0gICAgICAqcHBvcysrID0gbGl0LTE7IAotICAgICAgd2hpbGUgKChsaXQtLSkg
PiAwKSAKKyAgICAgICpwcG9zKysgPSBsaXQtMTsKKyAgICAgIHdoaWxlICgobGl0LS0pID4gMCkK
ICAgICAgICAgKnBwb3MrKyA9ICpsaXRwb3MrKzsKICAgICB9CiAgIH0KQEAgLTIwNzksMjQgKzIw
NzksMjQgQEAKICAgaW50IGxpdCxpLHBhY2s7CiAKICAgLyogVXNlIGNvbXByZXNzaW9uIG1vZGUg
MyAqLwotICBwb3MgPSBidWZmZXI7IAotICBwcG9zID0gYnVmZm91dDsgCi0gIHVwcGVyID0gYnVm
ZmVyICsgZW1pdGJ5dGVzOyAKKyAgcG9zID0gYnVmZmVyOworICBwcG9zID0gYnVmZm91dDsKKyAg
dXBwZXIgPSBidWZmZXIgKyBlbWl0Ynl0ZXM7CiAgIHByZXYgPSBQcmV2TGluZTsKICAgd2hpbGUo
cG9zIDwgdXBwZXIpIHsKICAgICBsaXRwb3MgPSBwb3M7CiAgICAgd2hpbGUgKCgqcHJldiA9PSAq
cG9zKSAmJiAocG9zIDwgdXBwZXIpKSB7Ci0gICAgICBwcmV2Kys7IAorICAgICAgcHJldisrOwog
ICAgICAgcG9zKys7CiAgICAgfQogICAgIGlmIChwb3MgPCB1cHBlcikgewotICAgICAgcGFjayA9
IChpbnQpKHBvcyAtIGxpdHBvcyk7IAorICAgICAgcGFjayA9IChpbnQpKHBvcyAtIGxpdHBvcyk7
CiAgICAgICBsaXRwb3MgPSBwb3M7Ci0gICAgICBpID0gdXBwZXIgLSBwb3M7IAotICAgICAgaWYg
KGkgPiA4KSAKKyAgICAgIGkgPSB1cHBlciAtIHBvczsKKyAgICAgIGlmIChpID4gOCkKICAgICAg
ICAgaSA9IDg7CiAgICAgICB3aGlsZSAoKCpwb3MgIT0gKnByZXYpICYmIChpID4gMCkpIHsKLSAg
ICAgICAgKnByZXYrKyA9ICpwb3MrKzsgCisgICAgICAgICpwcmV2KysgPSAqcG9zKys7CiAgICAg
ICAgIGktLTsKICAgICAgIH0KICAgICAgIGkgPSAoaW50KShwb3MgLSBsaXRwb3MgLSAxKTsKQEAg
LTIxMDUsMTYgKzIxMDUsMTYgQEAKICAgICAgICAgKnBwb3MrKyA9IGxpdCArIHBhY2s7CiAgICAg
ICB9CiAgICAgICBlbHNlIHsKLSAgICAgICAgKnBwb3MrKyA9IGxpdCArIDMxOyAKKyAgICAgICAg
KnBwb3MrKyA9IGxpdCArIDMxOwogICAgICAgICBwYWNrIC09IDMxOwogICAgICAgICB3aGlsZSAo
cGFjayA+PSAyNTUpIHsKLSAgICAgICAgICAqcHBvcysrID0gMjU1OyAKKyAgICAgICAgICAqcHBv
cysrID0gMjU1OwogICAgICAgICAgIHBhY2sgLT0gMjU1OwogICAgICAgICB9CiAgICAgICAgICpw
cG9zKysgPSBwYWNrOwogICAgICAgfQogICAgICAgd2hpbGUgKGkgPj0gMCkgewotICAgICAgICAq
cHBvcysrID0gKmxpdHBvcysrOyAKKyAgICAgICAgKnBwb3MrKyA9ICpsaXRwb3MrKzsKICAgICAg
ICAgaS0tOwogICAgICAgfQogICAgIH0KQEAgLTIxMzQsNyArMjEzNCw3IEBACiAvKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKi8KIHZvaWQKICNpZiBOZWVkRnVuY3Rpb25Qcm90b3R5cGVzCi1SYXN0ZXJMaW5lKHN0cnVj
dCBjaGFyX2VudHJ5ICpjZSwgdW5zaWduZWQgaW50IG5icGwsIAorUmFzdGVyTGluZShzdHJ1Y3Qg
Y2hhcl9lbnRyeSAqY2UsIHVuc2lnbmVkIGludCBuYnBsLAogICAgICAgICAgICB1bnNpZ25lZCBp
bnQgY3VycmVudF9saW5lLCB1bnNpZ25lZCBjaGFyICpidWZmZXIpCiAjZWxzZQogUmFzdGVyTGlu
ZShjZSwgbmJwbCwgY3VycmVudF9saW5lLCBidWZmZXIpCkBAIC0yMjA4LDIxICsyMjA4LDIxIEBA
CiAgICAgRU1JVDIoIlwwMzMqYiVkVyIsIGVtaXRieXRlcyk7CiAgICAgRU1JVEwoZW1pdGJ5dGVz
LCBidWZmZXIpOwogICAgIGJyZWFrOwotIAorCiAgIGNhc2UgMjoKICAgICBpID0gQ29tcHJlc3NM
aW5lMihidWZmZXIsYnVmZmluLGVtaXRieXRlcyk7CiAgICAgRU1JVDIoIlwwMzMqYiVkVyIsIGkp
OwogICAgIEVNSVRMKGksYnVmZmluKTsKICAgICBicmVhazsKLSAKKwogICBjYXNlIDM6CiAgICAg
aSA9IENvbXByZXNzTGluZTMoYnVmZmVyLGJ1ZmZpbiArIEJVRkZTSVpFLzIsKGludCluYnBsKTsK
ICAgICBFTUlUMigiXDAzMypiJWRXIiwgaSk7CiAgICAgRU1JVEwoaSxidWZmaW4gKyBCVUZGU0la
RS8yKTsKICAgICBicmVhazsKLSAKLSAgZGVmYXVsdDogCi0gICAgZnByaW50ZihFUlJfU1RSRUFN
LCJVbnN1cHBvcnRlZCBjb21wcmVzc2lvbiBtb2RlIVxuIik7IAorCisgIGRlZmF1bHQ6CisgICAg
ZnByaW50ZihFUlJfU1RSRUFNLCJVbnN1cHBvcnRlZCBjb21wcmVzc2lvbiBtb2RlIVxuIik7CiAg
IH0KICMgZWxzZQogICBFTUlUMigiXDAzMypiJWRXIiwgZW1pdGJ5dGVzKTsKQEAgLTIyODAsMTAg
KzIyODAsMTAgQEAKICAgaWYgKENvbXByZXNzQ2hhck1vZGUgPT0gMykgewogICAgIC8qIENoZWNr
IGlmIFByZXZMaW5lIGJpZyBlbm91Z2g7IGNsYWltIG1vcmUgc3BhY2UgaWYgbm90ICovCiAgICAg
aWYgKCgoaW50KW5icGwpID4gUHJldlNpemUpIHsKLSAgICAgIGlmIChQcmV2TGluZSAhPSBOVUxM
KSAKKyAgICAgIGlmIChQcmV2TGluZSAhPSBOVUxMKQogICAgICAgICBmcmVlKFByZXZMaW5lKTsK
ICAgICAgIGlmICgoUHJldkxpbmUgPSAodW5zaWduZWQgY2hhciAqKW1hbGxvYyhuYnBsKnNpemVv
ZihjaGFyKSkpID09IE5VTEwpIHsKLSAgICAgICAgUHJldlNpemUgPSAwOyAKKyAgICAgICAgUHJl
dlNpemUgPSAwOwogICAgICAgICBGYXRhbCgiUmFzdGVyQ2hhcjogb3V0IG9mIG1lbW9yeSFcbiIp
OwogICAgICAgfQogICAgICAgUHJldlNpemUgPSAoaW50KW5icGw7CkBAIC0yNDE5LDcgKzI0MTks
NyBAQAogICBpZiAoYnl0ZXMgPiAwKSB7CiAgICAgLyogZG8gTk9UIGxvYWQgSHVnZSBjaGFyYWN0
ZXJzICovCiAgICAgaWYgKChieXRlcyA+IEhVR0VfQ0hBUl9QQVRURVJOKSAmJiAoZm9udHB0ci0+
aWQgIT0gcGs4OSkpIHsKLSAgICAgIHFmcHJpbnRmKEVSUl9TVFJFQU0sIkh1Z2UgQ2hhcmFjdGVy
IDwlYz4gKCVsZCBCeXRlcylcbiIsIAorICAgICAgcWZwcmludGYoRVJSX1NUUkVBTSwiSHVnZSBD
aGFyYWN0ZXIgPCVjPiAoJWxkIEJ5dGVzKVxuIiwKICAgICAgICAgICAgICAgIChjaGFyKWMsIGJ5
dGVzKTsKICAgICAgIHB0ci0+Y2hhcnNpemUgPSBIVUdFX1NJWkU7CiAgICAgICBwdHItPndoZXJl
LmlzbG9hZGVkID0gX0ZBTFNFOwpAQCAtMjUwNSw3ICsyNTA1LDcgQEAKICAgICBTZXRQb3NuKGgs
IHYpOwogICB9CiAKLSAgLyogIAorICAvKgogICAgIGZwcmludGYoRVJSX1NUUkVBTSwKICAgICAg
ICAgICAgICIoJWQpIGhoPSVsZCAoKyVsZC8rJWxkKSwgaD0lbGQsIHhoPSVsZCx4aGg9JWxkLCBb
JWxkfCVsZF0gLT4lZFxuIiwKICAgICAgICAgICAgIChpbnQpZG9fcG9zbixoaCwobG9uZzQpcHRy
LT5jdywobG9uZzQpcHRyLT5jdyoobG9uZzQpaGNvbnYsaCwKQEAgLTI1NTMsNyArMjU1Myw3IEBA
CiAgICAgICBpbnQgICAgIHRtcDsKICAgICAgIGNoYXIgICAgc2lnbjsKIAotICAgICAgaWYgKCFk
b19wb3NuKSAKKyAgICAgIGlmICghZG9fcG9zbikKICAgICAgICAgU2V0UG9zbihoLCB2KTsKIAog
I2lmZGVmIFVTRVBYTApAQCAtMjU2Myw3ICsyNTYzLDcgQEAKICNlbmRpZgogICAgICAgaWYgKHRt
cCAhPSAwKSB7CiAgICAgICAgIGlmICh0bXAgPCAwKSB7Ci0gICAgICAgICAgc2lnbiA9ICctJzsg
CisgICAgICAgICAgc2lnbiA9ICctJzsKICAgICAgICAgICB0bXAgPSAtdG1wOwogICAgICAgICB9
IGVsc2UKICAgICAgICAgICBzaWduID0gJysnOwpAQCAtMjU3Niw3ICsyNTc2LDcgQEAKICNlbmRp
ZgogICAgICAgaWYgKHRtcCAhPSAwKSB7CiAgICAgICAgIGlmICh0bXAgPCAwKSB7Ci0gICAgICAg
ICAgc2lnbiA9ICctJzsgCisgICAgICAgICAgc2lnbiA9ICctJzsKICAgICAgICAgICB0bXAgPSAt
dG1wOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICBzaWduID0gJysnOwpAQCAtMjY0NCw3ICsy
NjQ0LDcgQEAKICAgICBmcHJpbnRmKHN0ZGVyciwiLS0+IGhoKCVsZCkgKz0gY3coJWxkKSAqIGhj
b252KCVsZCkiLAogICAgICAgICAgICAgKGxvbmcpaGgsIChsb25nKXB0ci0+Y3csIChsb25nKSBo
Y29udik7CiAgICAgICAgICAgICAqLwotI2lmZGVmIExKICAgIAorI2lmZGVmIExKCiAgICAgLyog
dGhlIGd1ZXNzZWQgcG9zaXRpb24gbXVzdCBiZSBhIG11bHRpcGxlIG9mIHBpeGVscyAqLwogICAg
IGlmIChSRVNPTFVUSU9OID09IDMwMCkKICAgICAgIGhoICs9IChsb25nNCkgKChwdHItPmN3KS80
KSo0Kmhjb252OwpAQCAtMjY2MSw3ICsyNjYxLDcgQEAKICAgaWYgKGNvbW1hbmQgPD0gU0VUNCkK
ICAgICBoICs9IHB0ci0+dGZtdzsKIAotICBpZiAocG9zX2FmdGVyKSAKKyAgaWYgKHBvc19hZnRl
cikKICAgICBTZXRQb3NuKGgsIHYpOwogICBlbHNlCiAgICAgbGFzdF9yeCA9IChpbnQpUElYUk9V
TkQoaCwgaGNvbnYpICsgeF9nb2Zmc2V0OwpAQCAtMjY4Miw3ICsyNjgyLDcgQEAKICAgfQogICBm
b250c191c2VkX29uX3RoaXNfcGFnZSA9IDA7CiAjZW5kaWYKLSAgZm9yIChwID0gaGZvbnRwdHI7
IHA7IHAgPSBwLT5uZXh0KSAKKyAgZm9yIChwID0gaGZvbnRwdHI7IHA7IHAgPSBwLT5uZXh0KQog
ICAgIHAtPnVzZWRfb25fdGhpc19wYWdlID0gX0ZBTFNFOwogfQogCkBAIC0yNzQwLDcgKzI3NDAs
NyBAQAogICByeCA9IChpbnQpUElYUk9VTkQoeCwgaGNvbnYpICsgeF9nb2Zmc2V0OwogICByeSA9
IChpbnQpUElYUk9VTkQoeSwgdmNvbnYpICsgeV9nb2Zmc2V0OwogCi0gIC8qICAKKyAgLyoKICAg
ZnByaW50ZihFUlJfU1RSRUFNLAogCSAgInNldHBvc24gdG8gJWxkLyVsZCwgJWQvJWQsIGxhc3Q6
ICVkLyVkXG4iLAogCSAgKGxvbmcpeCwobG9uZyl5LApAQCAtMjgwNCwxMyArMjgwNCwxMyBAQAog
ICAgb2Zmc2V0IGluIHRoZSBidWZmZXIsIENDaGFyX0xhc3QgaXMgdGhlIGZpcnN0IGJ5dGUgb2Yg
dGhlIGxhc3QKICAgIGNvbXBhY3RlZCByb3cgKGxpbmUgcmVwZWF0IGNvdW50KS4gIFVwZGF0ZXMg
dGhlIHByZXZpb3VzIGxpbmUKICAgIChQcmV2TGluZSkgaWYgbmVjZXNzYXJ5LiAqLwotdm9pZCAK
K3ZvaWQKICNpZiBOZWVkRnVuY3Rpb25Qcm90b3R5cGVzCiBDb21wcmVzc2VkQ2hhckxpbmUoc3Ry
dWN0IGNoYXJfZW50cnkgKmNlLCBpbnQgbmJwbCwgdW5zaWduZWQgY2hhciAqYnVmZmVyKQogI2Vs
c2UKIENvbXByZXNzZWRDaGFyTGluZShjZSwgbmJwbCwgYnVmZmVyKQogc3RydWN0IGNoYXJfZW50
cnkgKmNlOwotaW50IG5icGw7IAoraW50IG5icGw7CiB1bnNpZ25lZCBjaGFyICpidWZmZXI7CiAj
ZW5kaWYKIHsKQEAgLTI4MjEsMzEgKzI4MjEsMzEgQEAKICAgICBpbnQgdCxtb2RlLG1heDsKICAg
ICByZWdpc3RlciBpbnQgeCx5LGk7CiAKLSAgICBwcmV2ID0gUHJldkxpbmU7IAotICAgIG9idWYg
PSBidWZmZXI7IAotICAgIGVuZCA9IGJ1ZmZlciArIG5icGw7IAorICAgIHByZXYgPSBQcmV2TGlu
ZTsKKyAgICBvYnVmID0gYnVmZmVyOworICAgIGVuZCA9IGJ1ZmZlciArIG5icGw7CiAgICAgeCA9
IDA7CiAgICAgd2hpbGUgKG9idWYgPCBlbmQpIHsKICAgICAgIGlmICgqb2J1ZiAhPSAqcHJldikg
ewotICAgICAgICAqcHJldiA9ICpvYnVmOyAKKyAgICAgICAgKnByZXYgPSAqb2J1ZjsKICAgICAg
ICAgeCA9IDE7CiAgICAgICB9Ci0gICAgICBvYnVmKys7IAorICAgICAgb2J1ZisrOwogICAgICAg
cHJldisrOwogICAgIH0KICAgICBpZiAoeCA9PSAwICYmIENDaGFyX0xhc3QgPj0gMCkgewotICAg
ICAgKGJ1ZmZpbltDQ2hhcl9MYXN0XSkrKzsgCisgICAgICAoYnVmZmluW0NDaGFyX0xhc3RdKSsr
OwogICAgICAgcmV0dXJuOyAvKiBsaW5lIHJlcGVhdCBjb3VudCArMSAqLwogICAgIH0KIAotICAg
IGVuZCA9IGJ1ZmZpbiArIEJVRkZTSVpFIC0gMTY7IAotICAgIG9idWYgPSBidWZmaW4gKyBDQ2hh
cl9PZmY7IAorICAgIGVuZCA9IGJ1ZmZpbiArIEJVRkZTSVpFIC0gMTY7CisgICAgb2J1ZiA9IGJ1
ZmZpbiArIENDaGFyX09mZjsKICAgICBidWZmID0gYnVmZmVyOwogICAgICpvYnVmKysgPSAwOyAv
KiBMaW5lIHJlcGVhdCBjb3VudCA9IDAgKi8KICAgICB0ID0gMDsKICAgICBDQ2hhcl9MYXN0ID0g
Q0NoYXJfT2ZmOyAvKiBOZXh0IGxpbmUgKi8KLSAgICBtb2RlID0gMDsgCi0gICAgeSA9ICpidWZm
Kys7IAorICAgIG1vZGUgPSAwOworICAgIHkgPSAqYnVmZisrOwogICAgIGkgPSA3OyAvKiBpID0g
Y3VycmVudCBiaXQgKi8KICAgICB3aGlsZSAoKHQgPCBjZS0+d2lkdGgpICYmIChvYnVmIDwgZW5k
KSkgewogICAgICAgbWF4ID0gY2UtPndpZHRoIC0gdDsgLyogbWF4aW11bSBwaXhlbHMgbGVmdCB0
byBkbyAqLwpAQCAtMjg1MywxMyArMjg1MywxMyBAQAogICAgICAgaWYgKG1vZGUgPT0gMCkgewog
ICAgICAgICAvKiB3aGl0ZSBydW4gKi8KICAgICAgICAgd2hpbGUgKCh5ICYgKDE8PGkpKSA9PSAw
ICYmIHggPCBtYXgpIHsKLSAgICAgICAgICB4Kys7IAotICAgICAgICAgIGktLTsgCisgICAgICAg
ICAgeCsrOworICAgICAgICAgIGktLTsKICAgICAgICAgICBpZiAoaSA8IDApIHsKLSAgICAgICAg
ICAgIGkgPSA3OyAKLSAgICAgICAgICAgIHkgPSAqYnVmZisrOyAKKyAgICAgICAgICAgIGkgPSA3
OworICAgICAgICAgICAgeSA9ICpidWZmKys7CiAgICAgICAgICAgICB3aGlsZSAoeSA9PSAwICYm
IHggPCBtYXgpIHsKLSAgICAgICAgICAgICAgeCArPSA4OyAKKyAgICAgICAgICAgICAgeCArPSA4
OwogICAgICAgICAgICAgICB5ID0gKmJ1ZmYrKzsKICAgICAgICAgICAgIH0KICAgICAgICAgICB9
CkBAIC0yODY5LDI2ICsyODY5LDI2IEBACiAgICAgICBlbHNlIHsKICAgICAgICAgLyogYmxhY2sg
cnVuICovCiAgICAgICAgIHdoaWxlICgoeSAmICgxPDxpKSkgIT0gMCAmJiB4IDwgbWF4KSB7Ci0g
ICAgICAgICAgeCsrOyAKLSAgICAgICAgICBpLS07IAorICAgICAgICAgIHgrKzsKKyAgICAgICAg
ICBpLS07CiAgICAgICAgICAgaWYgKGkgPCAwKSB7Ci0gICAgICAgICAgICBpID0gNzsgCi0gICAg
ICAgICAgICB5ID0gKmJ1ZmYrKzsgCisgICAgICAgICAgICBpID0gNzsKKyAgICAgICAgICAgIHkg
PSAqYnVmZisrOwogICAgICAgICAgICAgd2hpbGUgKHkgPT0gMHhmZiAmJiB4IDwgbWF4KSB7Ci0g
ICAgICAgICAgICAgIHggKz0gODsgCisgICAgICAgICAgICAgIHggKz0gODsKICAgICAgICAgICAg
ICAgeSA9ICpidWZmKys7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgICAgIG1vZGUgPSAwOwogICAgICAgfQotICAgICAgaWYgKHggPiBtYXgpIAorICAgICAgaWYg
KHggPiBtYXgpCiAgICAgICAgIHggPSBtYXg7CiAgICAgICB0ICs9IHg7CiAgICAgICAvKiBtYWtl
IHByZWNhdXRpb25zIGZvciB2ZXJ5IGxvbmcgcnVucyAqLwogICAgICAgd2hpbGUgKHggPiAweGZm
KSB7Ci0gICAgICAgICpvYnVmKysgPSAweGZmOyAKLSAgICAgICAgKm9idWYrKyA9IDA7IAorICAg
ICAgICAqb2J1ZisrID0gMHhmZjsKKyAgICAgICAgKm9idWYrKyA9IDA7CiAgICAgICAgIHggLT0g
MHhmZjsKICAgICAgIH0KICAgICAgICpvYnVmKysgPSB4OwpAQCAtMjk2OCw4ICsyOTY4LDggQEAK
ICNlbmRpZgogewogICBpbnQgICAgIGFyZ2luZDsgICAgICAgICAgICAvKiBhcmd1bWVudCBpbmRl
eCBmb3IgZmxhZ3MgICAgICAqLwotICBjaGFyICAgIGN1cmFyZWFbU1RSU0laRV07ICAvKiBjdXJy
ZW50IGZpbGUgYXJlYSAgICAgICAgICAgICAqLwotICBjaGFyICAgIGN1cm5hbWVbU1RSU0laRV07
ICAvKiBjdXJyZW50IGZpbGUgbmFtZSAgICAgICAgICAgICAqLworICBjaGFyICAgICpjdXJhcmVh
OwkgICAgIC8qIGN1cnJlbnQgZmlsZSBhcmVhICAgICAgICAgICAgICovCisgIGNoYXIgICAgKmN1
cm5hbWU7ICAgCSAgICAgLyogY3VycmVudCBmaWxlIG5hbWUgICAgICAgICAgICAgKi8KICAgY2hh
ciAgICAqdGNwLCAqdGNwMTsgICAgICAgLyogdGVtcG9yYXJ5IGNoYXJhY3RlciBwb2ludGVycyAg
Ki8KICAgY2hhciAgICAqdGhpc19hcmc7CiAgIGRvdWJsZSAgeF9vZmZzZXQgPSAwLjAsIHlfb2Zm
c2V0ID0gMC4wOwpAQCAtMjk4OCw5ICsyOTg4LDkgQEAKICNlbmRpZgogI2VuZGlmCiAKLSAgaWYg
KGFyZ2MgPT0gMiAmJiAoc3RyY21wIChhcmd2WzFdLCAiLS12ZXJzaW9uIikgPT0gMCkpIHsKKyAg
aWYgKGFyZ2MgPT0gMiAmJiBFUShhcmd2WzFdLCAiLS12ZXJzaW9uIikpIHsKICAgICBleHRlcm4g
S1BTRURMTCBjaGFyICprcGF0aHNlYV92ZXJzaW9uX3N0cmluZzsKLSAgICBwdXRzICgiZHZpbGoo
aykgMi42Iik7CisgICAgcHV0cyAoVkVSU0lPTik7CiAgICAgcHV0cyAoa3BhdGhzZWFfdmVyc2lv
bl9zdHJpbmcpOwogICAgIHB1dHMgKCJDb3B5cmlnaHQgKEMpIDE5OTcgR3VzdGFmIE5ldW1hbm4u
XG5cCiBUaGVyZSBpcyBOTyB3YXJyYW50eS4gIFlvdSBtYXkgcmVkaXN0cmlidXRlIHRoaXMgc29m
dHdhcmVcblwKQEAgLTI5OTgsNyArMjk5OCw3IEBACiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91
dCB0aGVzZSBtYXR0ZXJzLCBzZWUgdGhlIGZpbGVzXG5cCiBuYW1lZCBDT1BZSU5HIGFuZCBkdmky
eHguYy5cblwKIFByaW1hcnkgYXV0aG9yIG9mIER2aTJ4eDogR3VzdGFmIE5ldW1hbm47IC1rIG1h
aW50YWluZXI6IEsuIEJlcnJ5LiIpOwotICAgIGV4aXQgKDApOyAKKyAgICBleGl0ICgwKTsKICAg
fQogCiAjaWZkZWYgTEo0CkBAIC0zMDQ4LDkgKzMwNDgsOSBAQAogI2lmZGVmIExKMlAKICAgICAg
IGNhc2UgJ2QnOiAgICAgICAvKiBkIHNlbGVjdHMgRFVQTEVYIG1vZGUgICovCiAgICAgICAgIHRj
cCsrOwotICAgICAgICBpZiAoKnRjcCA9PSAnMScgKSAKKyAgICAgICAgaWYgKCp0Y3AgPT0gJzEn
ICkKICAgICAgICAgICBEdXBsZXhNb2RlID0gMTsKLSAgICAgICAgZWxzZSBpZiAoKnRjcCA9PSAn
MicpIAorICAgICAgICBlbHNlIGlmICgqdGNwID09ICcyJykKICAgICAgICAgICBEdXBsZXhNb2Rl
ID0gMjsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgV2FybmluZygiSW52YWxpZCBEVVBMRVgg
bW9kZSwgYXNzdW1pbmcgRFVQTEVYPTEsIExvbmctRWRnZSBCaW5kaW5nIik7CkBAIC0zMDYyLDEz
ICszMDYyLDEzIEBACiAgICAgICAgIERvdWJsZVBhZ2UgPSBfVFJVRTsKICAgICAgICAgdGNwKys7
CiAgICAgICAgIGlmICgqdGNwID09ICcxJyB8fCAqdGNwID09ICcyJykgewotICAgICAgICAgIGlm
ICgqdGNwID09ICcyJykgCisgICAgICAgICAgaWYgKCp0Y3AgPT0gJzInKQogICAgICAgICAgICAg
UHJpbnRGaXJzdFBhcnQgPSBfRkFMU0U7Ci0gICAgICAgICAgZWxzZSAgICAgICAgICAgICAKKyAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICBQcmludFNlY29uZFBhcnQgPSBfRkFMU0U7CiAgICAg
ICAgICAgdGNwKys7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCp0Y3AgPT0gJy0nKSAKKyAgICAg
ICAgaWYgKCp0Y3AgPT0gJy0nKQogICAgICAgICAgIFByaW50RW1wdHlQYWdlcyA9IF9GQUxTRTsK
ICAgICAgICAgYnJlYWs7CiAjaWZkZWYgTEo0CkBAIC0zMjU2LDE0ICszMjU2LDE0IEBACiAjaWZk
ZWYgTEoKICAgICAgIGNhc2UgJ1YnOiAgIC8qIGJ1Z2ZpeGVzIGZvciB2YXJpb3VzIHZlbmRvcidz
IFBDTCBlbXVsYXRpb25zICovCiAgICAgICAgIHRjcCsrOwotICAgICAgICBpZiAoKnRjcCA9PSAn
SycgfHwgKnRjcCA9PSAnaycpIAorICAgICAgICBpZiAoKnRjcCA9PSAnSycgfHwgKnRjcCA9PSAn
aycpCiAgICAgICAgICAga3lvY2VyYV9tb2RlID0gX1RSVUU7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICBpZiAoKnRjcCA9PSAnQicgfHwgKnRjcCA9PSAnYicpIAorICAgICAgICAgIGlmICgqdGNw
ID09ICdCJyB8fCAqdGNwID09ICdiJykKICAgICAgICAgICAgIGJyb3RoZXJfbW9kZSA9IF9UUlVF
OwogIyBpZmRlZiBMSjQKIAllbHNlCi0gICAgICAgIGlmICgqdGNwID09ICc2JyB8fCAqdGNwID09
ICc2JykgCisgICAgICAgIGlmICgqdGNwID09ICc2JyB8fCAqdGNwID09ICc2JykKIAkgICAgTEo2
ID0gX1RSVUU7CiAjIGVuZGlmCiAgICAgICAgIGJyZWFrOwpAQCAtMzMwNiw3ICszMzA2LDcgQEAK
ICNlbmRpZgogI2lmZGVmIF9fcmlzY29zCiAgICAgICBjYXNlICdpJzogLyogbmFtZSBvZiBkaXJl
Y3RvcnkgdG8gc3RvcmUgZGlhZ3JhbXMgaW4gKi8KLSAgICAgICAgdGNwKys7IAorICAgICAgICB0
Y3ArKzsKICAgICAgICAgZGRpID0gMDsKICAgICAgICAgd2hpbGUgKCp0Y3AgIT0gJyAnICYmICp0
Y3AgIT0gJ1wwJyAmJiBkZGkgPCBESUFHRElSU0laRS0xKSB7CiAgICAgICAgICAgZGlhZ2Rpcltk
ZGkrK10gPSAqdGNwKys7CkBAIC0zMzI4LDggKzMzMjgsOCBAQAogICAgICAgfQogICAgIH0gZWxz
ZSB7CiAKLSAgICAgICh2b2lkKSBzdHJjcHkoZmlsZW5hbWUsIHRjcCk7Ci0gICAgICBpZiAoIXN0
cmNtcChmaWxlbmFtZSwgIi0iKSkgeworICAgICAgZmlsZW5hbWUgPSB0Y3A7CisgICAgICBpZiAo
RVEoZmlsZW5hbWUsICItIikpIHsKICAgICAgICAgRW1pdEZpbGVOYW1lID0gIi0iOwogI2lmZGVm
IFJJU0NfVVNFX09TTAogICAgICAgICBkdmlmcCA9IEJJTk9QRU4oIktiZDoiKTsKQEAgLTMzMzks
NTcgKzMzMzksNjggQEAKIAkgIEFzc3VyZUJpbmFyeShmaWxlbm8oZHZpZnApKTsKICNlbmRpZgog
ICAgICAgfSBlbHNlIHsKKwkvKiBTaW5jZSB0aGlzIGNvZGUgaXMgdXNlZCBvbmx5IG9uY2UgZHVy
aW5nIHN0YXJ0dXAsIHdlIGRvbid0IGNhcmUKKwkgICBhYm91dCBmcmVlKClpbmcgdGhlIGFsbG9j
YXRlZCBzdHJpbmdzIHRoYXQgcmVwcmVzZW50IGZpbGVuYW1lcy4KKwkgICBJdCB3aWxsIGJlIG1v
cmUgd29yayB0byByZWFsaXplIHByb3BlciBkZWFsbG9jYXRpb24gaGFuZGxpbmcgdGhhbgorCSAg
IGl0J3Mgd29ydGggaW4gdGVybXMgb2Ygc2F2aW5nIGEgZmV3IGJ5dGVzLiBXZSBjb25zaWRlciB0
aGVzZQorCSAgIGJ5dGVzIGFjdHVhbGx5IHN0YXRpYyBtZW1vcnkgd2hlcmUgd2UgZG9uJ3Qga25v
dyB0aGUgc2l6ZSBpbgorCSAgIGFkdmFuY2UgYW5kIGRvbid0IGFkZCB0aGVtIHRvIHRoZSBhbGxv
Y2F0ZWRfc3RvcmFnZSBjb3VudC4KKwkgICBbMjcgSnVuIDA3IC1qc10gKi8KICNpZmRlZiBLUEFU
SFNFQQogICAgICAgICAvKiBzcGxpdCBpbnRvIGRpcmVjdG9yeSArIGZpbGUgbmFtZSAqLwogCWlu
dCB0Y3BsZW4sIGFyZ3ZsZW47CiAJdGNwID0gKGNoYXIgKil4YmFzZW5hbWUoYXJndlthcmdpbmRd
KTsvKiB0aGlzIGtub3dzIGFib3V0IGFueSBraW5kIG9mIHNsYXNoZXMgKi8KIAl0Y3BsZW4gPSBz
dHJsZW4odGNwKTsKKwlpZiAoIHRjcGxlbiA9PSAwICkgeworCSAgLyogVGhpcyBoYXBwZW5zIHdo
ZW4gdGhlIERWSSBmaWxlIG5hbWUgaGFzIGEgdHJhaWxpbmcgc2xhc2g7IHRoaXMKKwkgICAgIGlz
IG5vdCBhIHZhbGlkIG5hbWUuIFRoZW4gd2UgdGVybWluYXRlIHRoZSBhcmd1bWVudCBwYXJzaW5n
CisJICAgICBsb29wLCBhIHVzYWdlIG1lc3NhZ2Ugd2lsbCBiZSBvdXRwdXQgYmVsb3cuICovCisJ
ICBicmVhazsKKwl9CiAJYXJndmxlbiA9IHN0cmxlbihhcmd2W2FyZ2luZF0pOwogCWlmICh0Y3Bs
ZW4gPT0gYXJndmxlbikKLQkgIGN1cmFyZWFbMF0gPSAnXDAnOworCSAgY3VyYXJlYSA9ICIiOwog
CWVsc2UgewotCSAgKHZvaWQpIHN0cmNweShjdXJhcmVhLCBhcmd2W2FyZ2luZF0pOworCSAgY3Vy
YXJlYSA9IHhzdHJkdXAoYXJndlthcmdpbmRdKTsKIAkgIGN1cmFyZWFbYXJndmxlbi10Y3BsZW5d
ID0gJ1wwJzsKIAl9CiAjZWxzZQogICAgICAgICB0Y3AgPSBzdHJyY2hyKGFyZ3ZbYXJnaW5kXSwg
Jy8nKTsKICAgICAgICAgLyogc3BsaXQgaW50byBkaXJlY3RvcnkgKyBmaWxlIG5hbWUgKi8KICAg
ICAgICAgaWYgKHRjcCA9PSBOVUxMKSB7Ci0gICAgICAgICAgY3VyYXJlYVswXSA9ICdcMCc7Cisg
ICAgICAgICAgY3VyYXJlYVswXSA9ICIiOwogICAgICAgICAgIHRjcCA9IGFyZ3ZbYXJnaW5kXTsK
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAodm9pZCkgc3RyY3B5KGN1cmFyZWEsIGFyZ3Zb
YXJnaW5kXSk7CisJICBjdXJhcmVhID0geHN0cmR1cChhcmd2W2FyZ2luZF0pOwogICAgICAgICAg
IGN1cmFyZWFbdGNwLWFyZ3ZbYXJnaW5kXSsxXSA9ICdcMCc7CiAgICAgICAgICAgdGNwICs9IDE7
CiAgICAgICAgIH0KICNlbmRpZgogCi0gICAgICAgICh2b2lkKSBzdHJjcHkoY3VybmFtZSwgdGNw
KTsKKyAgICAgICAgY3VybmFtZSA9IChjaGFyICopIHhtYWxsb2Moc3RybGVuKHRjcCkrNSk7ICAv
KiArIHNwYWNlIGZvciAiLmR2aSIgKi8KKwkodm9pZCkgc3RyY3B5KGN1cm5hbWUsIHRjcCk7CiAg
ICAgICAgIC8qIHNwbGl0IGludG8gZmlsZSBuYW1lICsgZXh0ZW5zaW9uICovCi0gICAgICAgIHRj
cDEgPSBzdHJyY2hyKHRjcCwgJy4nKTsKKyAgICAgICAgdGNwMSA9IHN0cnJjaHIoY3VybmFtZSwg
Jy4nKTsKICAgICAgICAgaWYgKHRjcDEgPT0gTlVMTCkgewotICAgICAgICAgICh2b2lkKSBzdHJj
cHkocm9vdG5hbWUsIGN1cm5hbWUpOworICAgICAgICAgIHJvb3RuYW1lID0geHN0cmR1cChjdXJu
YW1lKTsKICAgICAgICAgICBzdHJjYXQoY3VybmFtZSwgIi5kdmkiKTsKICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAqdGNwMSA9ICdcMCc7Ci0gICAgICAgICAgKHZvaWQpIHN0cmNweShyb290
bmFtZSwgY3VybmFtZSk7CisgICAgICAgICAgcm9vdG5hbWUgPSB4c3RyZHVwKGN1cm5hbWUpOwog
ICAgICAgICAgICp0Y3AxID0gJy4nOwogICAgICAgICB9CiAKKwlmaWxlbmFtZSA9IChjaGFyICop
IHhtYWxsb2Moc3RybGVuKGN1cmFyZWEpK3N0cmxlbihjdXJuYW1lKSsxKTsKICAgICAgICAgKHZv
aWQpIHN0cmNweShmaWxlbmFtZSwgY3VyYXJlYSk7CiAgICAgICAgICh2b2lkKSBzdHJjYXQoZmls
ZW5hbWUsIGN1cm5hbWUpOwogCiAgICAgICAgIGlmICgoZHZpZnAgPSBCSU5PUEVOKGZpbGVuYW1l
KSkgPT0gRlBOVUxMKSB7CiAgICAgICAgICAgLyogZG8gbm90IGluc2lzdCBvbiAuZHZpICovCiAg
ICAgICAgICAgaWYgKHRjcDEgPT0gTlVMTCkgewotICAgICAgICAgICAgaW50IGwgPSBzdHJsZW4o
Y3VybmFtZSk7Ci0gICAgICAgICAgICBpZiAobCA+IDQpCi0gICAgICAgICAgICAgIGN1cm5hbWVb
bCAtIDRdID0gJ1wwJzsKLSAgICAgICAgICAgIGwgPSBzdHJsZW4oZmlsZW5hbWUpOwotICAgICAg
ICAgICAgaWYgKGwgPiA0KQotICAgICAgICAgICAgICBmaWxlbmFtZVtsIC0gNF0gPSAnXDAnOwor
CSAgICBmaWxlbmFtZVtzdHJsZW4oZmlsZW5hbWUpIC0gNF0gPSAnXDAnOworCSAgICBkdmlmcCA9
IEJJTk9QRU4oZmlsZW5hbWUpOwogICAgICAgICAgIH0KLSAgICAgICAgICBpZiAodGNwMSAhPSBO
VUxMIHx8IChkdmlmcCA9IEJJTk9QRU4oZmlsZW5hbWUpKSA9PSBGUE5VTEwpIHsKKyAgICAgICAg
ICBpZiAoZHZpZnAgPT0gRlBOVUxMKSB7CiAjaWZkZWYgTVNDNQogICAgICAgICAgICAgRmF0YWwo
IiVzOiBjYW4ndCBmaW5kIERWSSBmaWxlIFwiJXNcIlxuXG4iLAogICAgICAgICAgICAgICAgICAg
R19wcm9nbmFtZSwgZmlsZW5hbWUpOwpAQCAtMzQxMSw3ICszNDIyLDcgQEAKICAgeV9nb2Zmc2V0
ID0gKHNob3J0KSBNTV9UT19QWEwoeV9vZmZzZXQpICsgeV9vcmlnaW47CiAKICAgaWYgKGR2aWZw
ID09IEZQTlVMTCkgewotICAgIGZwcmludGYoRVJSX1NUUkVBTSwiXG5UaGlzIGlzIHRoZSBEVkkg
dG8gJXMgY29udmVydGVyIHZlcnNpb24gJXMiLAorICAgIGZwcmludGYoRVJSX1NUUkVBTSwiXG5U
aGlzIGlzIHRoZSBEVkkgdG8gJXMgY29udmVydGVyICVzIiwKICAgICAgICAgICAgIFBSSU5URVIs
IFZFUlNJT04pOwogI2lmZGVmIFNFVkVOQklUCiAgICAgZnByaW50ZihFUlJfU1RSRUFNLCIsIDdi
aXQiKTsKQEAgLTM1MDcsMTMgKzM1MTgsOCBAQAogICAgIGV4aXQoMSk7CiAgIH0KICAgaWYgKEVR
KEVtaXRGaWxlTmFtZSwgIiIpKSB7Ci0gICAgaWYgKChFbWl0RmlsZU5hbWUgPSAoY2hhciAqKW1h
bGxvYyggU1RSU0laRSApKSAhPSBOVUxMKQotICAgICAgYWxsb2NhdGVkX3N0b3JhZ2UgKz0gU1RS
U0laRTsKLSAgICBlbHNlCi0gICAgICBGYXRhbCgiQ2FuJ3QgYWxsb2NhdGUgc3RvcmFnZSBvZiAl
ZCBieXRlc1xuIixTVFJTSVpFKTsKLSAgICAodm9pZCkgc3RyY3B5KEVtaXRGaWxlTmFtZSwgY3Vy
bmFtZSk7Ci0gICAgaWYgKCh0Y3AxID0gc3RycmNocihFbWl0RmlsZU5hbWUsICcuJykpKQotICAg
ICAgKnRjcDEgPSAnXDAnOworICAgIEVtaXRGaWxlTmFtZSA9IChjaGFyICopIHhtYWxsb2Moc3Ry
bGVuKHJvb3RuYW1lKStzaXplb2YoRU1JVEZJTEVfRVhURU5TSU9OKSk7CisgICAgKHZvaWQpIHN0
cmNweShFbWl0RmlsZU5hbWUsIHJvb3RuYW1lKTsKICAgICBzdHJjYXQoRW1pdEZpbGVOYW1lLCBF
TUlURklMRV9FWFRFTlNJT04pOwogICB9CiAgIGlmIChHX3F1aWV0KQpAQCAtMzY2OCw3ICszNjc0
LDcgQEAKICAgaWYgKFByaW50VGVzdFBhZ2UpIEVNSVQxKCJcMDMzeiIpOwogI2lmZGVmIHZtcwog
ICAvKiBsYXN0IHJlY29yZCBpcyBub3QgZmx1c2hlZCB0byBmaWxlLCB1bmxlc3MgaXQgaXMgY29t
cGxldGVseSBmaWxsZWQgKi8KLSAgZm9yIChrayA9IChpbnQpKCgqb3V0ZnApLT5fY250KTsga2sg
PiAwOyAtLWtrKSAKKyAgZm9yIChrayA9IChpbnQpKCgqb3V0ZnApLT5fY250KTsga2sgPiAwOyAt
LWtrKQogICAgIHB1dGMoJ1wwJyxvdXRmcCk7CiAgIGZmbHVzaChvdXRmcCk7CiAjZW5kaWYKQEAg
LTM2OTgsNiArMzcwNCw4IEBACiAjZW5kaWYKICAgfQogICBDbG9zZUZpbGVzKCk7CisgIGlmICgg
dG1wX2RpclswXSAhPSAnXDAnICkKKyAgICBybWRpciAodG1wX2Rpcik7CQkJLyogaWdub3JlIGVy
cm9ycyAqLwogICBleGl0KEdfZXJyZW5jKTsKIH0KIApAQCAtMzc2NCwxNSArMzc3MiwxNSBAQAog
I2VuZGlmCiB7CiAgIGNoYXIgKmEsKmI7Ci0gIAotICBhID0gczE7IAorCisgIGEgPSBzMTsKICAg
YiA9IHMyOwogICB3aGlsZSAoKmEgIT0gJ1wwJykgewogICAgIGlmICh0b2xvd2VyKCphKSAhPSB0
b2xvd2VyKCpiKSkgcmV0dXJuKF9GQUxTRSk7Ci0gICAgYSsrOyAKKyAgICBhKys7CiAgICAgYisr
OwogICB9Ci0gICplbmQgPSBiOyAKKyAgKmVuZCA9IGI7CiAgIHJldHVybihfVFJVRSk7CiB9CiAK
QEAgLTM3OTEsMTggKzM3OTksMTggQEAKIHsKICAgY2hhciAqczsKICAgaW50IGNvdW50ID0gMDsK
LSAgCisKICAgcyA9IHN0cjsKICAgd2hpbGUgKCgqcyAhPSAnXDAnKSAmJiAoY291bnQgPCBudW1i
ZXIpKSB7Ci0gICAgd2hpbGUgKCgqcyA9PSAnICcpIHx8ICgqcyA9PSAnLCcpIHx8ICgqcyA9PSAn
PScpKSAKKyAgICB3aGlsZSAoKCpzID09ICcgJykgfHwgKCpzID09ICcsJykgfHwgKCpzID09ICc9
JykpCiAgICAgICBzKys7CiAgICAgaWYgKCpzICE9ICdcMCcpIHsKICAgICAgIHJlc3VsdFtjb3Vu
dCsrXSA9IHN0cnRvZChzLCZzKTsKICAgICB9CiAgIH0KLSAgd2hpbGUgKCgqcyA9PSAnICcpIHx8
ICgqcyA9PSAnLCcpIHx8ICgqcyA9PSAnPScpKSAKKyAgd2hpbGUgKCgqcyA9PSAnICcpIHx8ICgq
cyA9PSAnLCcpIHx8ICgqcyA9PSAnPScpKQogICAgIHMrKzsKLSAgKmVuZCA9IHM7IAorICAqZW5k
ID0gczsKICAgcmV0dXJuKGNvdW50KTsKIH0KIApAQCAtMzgyMiwyMiArMzgzMCwyMiBAQAogICBp
bnQgcmVzdWx0c1s0XSxubzsKIAogICBzID0gc3RyOwotICB3aGlsZSAoKnMgPT0gJyAnKSAKKyAg
d2hpbGUgKCpzID09ICcgJykKICAgICBzKys7CiAgIGlmICgoU3RyQ29tcGFyZSgiZHJhd2ZpbGUi
LHMsJnMpKSB8fCAoU3RyQ29tcGFyZSgiRFZJdmlld19kaWFncmFtIixzLCZzKSkpIHsKIAotICAg
IGlmIChwcmludGRpYWcgPT0gX0ZBTFNFKSAKKyAgICBpZiAocHJpbnRkaWFnID09IF9GQUxTRSkK
ICAgICAgIHJldHVybihfVFJVRSk7IC8qIGl0J3MgYSBkaWFncmFtLCBidXQgZG9uJ3QgcHJpbnQg
Ki8KIAotICAgIHdoaWxlICgoKnMgPT0gJyAnKSB8fCAoKnMgPT0gJz0nKSkgCisgICAgd2hpbGUg
KCgqcyA9PSAnICcpIHx8ICgqcyA9PSAnPScpKQogICAgICAgcysrOyAvKiBzcGFjZSBvciAnPScg
c2VwYXJhdGVzIGtleXdvcmQva2V5dmFsICovCiAKICAgICBpZiAoKnMgPT0gJ1wwJykgewotICAg
ICAgZnByaW50ZihFUlJfU1RSRUFNLCJObyBmaWxlbmFtZSBnaXZlbiBmb3IgXFxzcGVjaWFsLWRp
YWdyYW0hXG4iKTsgCisgICAgICBmcHJpbnRmKEVSUl9TVFJFQU0sIk5vIGZpbGVuYW1lIGdpdmVu
IGZvciBcXHNwZWNpYWwtZGlhZ3JhbSFcbiIpOwogICAgICAgcmV0dXJuKF9UUlVFKTsKICAgICB9
CiAgICAgc2ggPSBkaWFnbmFtZTsKLSAgICB3aGlsZSAoKCpzICE9ICcgJykgJiYgKCpzICE9ICcs
JykgJiYgKCpzICE9ICdcMCcpKSAKKyAgICB3aGlsZSAoKCpzICE9ICcgJykgJiYgKCpzICE9ICcs
JykgJiYgKCpzICE9ICdcMCcpKQogICAgICAgKnNoKysgPSAqcysrOwogICAgICpzaCA9ICdcMCc7
CiAKQEAgLTM4NDUsNyArMzg1Myw3IEBACiAgICAgZHQuc2NhbGV4ID0gZHQuc2NhbGV5ID0gMTAw
OwogICAgIGR0LmNyb3BsID0gZHQuY3JvcGIgPSBkdC5jcm9wciA9IGR0LmNyb3B0ID0gMDsKICAg
ICB3aGlsZSAoKnMgIT0gJ1wwJykgewotICAgICAgd2hpbGUgKCgqcyA9PSAnICcpIHx8ICgqcyA9
PSAnLCcpKSAKKyAgICAgIHdoaWxlICgoKnMgPT0gJyAnKSB8fCAoKnMgPT0gJywnKSkKICAgICAg
ICAgcysrOwogICAgICAgaWYgKCpzICE9ICdcMCcpIHsKICAgICAgICAgaWYgKFN0ckNvbXBhcmUo
InNjYWxlIixzLCZzKSkgewpAQCAtMzg1Myw3ICszODYxLDcgQEAKICAgICAgICAgICAgIGZwcmlu
dGYoRVJSX1NUUkVBTSwKICAgICAgICAgICAgICAgICAgICAiVG9vIGZldyBhcmd1bWVudHMgKCVk
KSBnaXZlbiBmb3IgPHNjYWxlPiAtIGlnbm9yZWQuXG4iLG5vKTsKICAgICAgICAgICB9Ci0gICAg
ICAgICAgZHQuc2NhbGV4ID0gcmVzdWx0c1swXTsgCisgICAgICAgICAgZHQuc2NhbGV4ID0gcmVz
dWx0c1swXTsKICAgICAgICAgICBkdC5zY2FsZXkgPSByZXN1bHRzWzFdOwogICAgICAgICB9CiAg
ICAgICAgIGVsc2UgaWYgKFN0ckNvbXBhcmUoImNyb3AiLHMsJnMpKSB7CkBAIC0zODYxLDE1ICsz
ODY5LDE1IEBACiAgICAgICAgICAgICBmcHJpbnRmKEVSUl9TVFJFQU0sCiAgICAgICAgICAgICAg
ICAgICAgIlRvbyBmZXcgYXJndW1lbnRzICglZCkgZ2l2ZW4gZm9yIDxjcm9wPiAtIGlnbm9yZWQu
XG4iLG5vKTsKICAgICAgICAgICB9Ci0gICAgICAgICAgZHQuY3JvcGwgPSByZXN1bHRzWzBdOyAK
KyAgICAgICAgICBkdC5jcm9wbCA9IHJlc3VsdHNbMF07CiAgICAgICAgICAgZHQuY3JvcHIgPSBy
ZXN1bHRzWzFdOwotICAgICAgICAgIGR0LmNyb3B0ID0gcmVzdWx0c1syXTsgCisgICAgICAgICAg
ZHQuY3JvcHQgPSByZXN1bHRzWzJdOwogICAgICAgICAgIGR0LmNyb3BiID0gcmVzdWx0c1szXTsK
ICAgICAgICAgfQogICAgICAgICBlbHNlIHsKICAgICAgICAgICBmcHJpbnRmKEVSUl9TVFJFQU0s
IkJhZCBcXHNwZWNpYWwga2V5d29yZCAtIDwlcz4gaWdub3JlZFxuIixzKTsKICAgICAgICAgICAv
KiBza2lwIG92ZXIgdGhpcyB3b3JkICovCi0gICAgICAgICAgd2hpbGUgKCgqcyAhPSAnICcpICYm
ICgqcyAhPSAnLCcpICYmICgqcyAhPSAnPScpICYmICgqcyAhPSAnXDAnKSkgCisgICAgICAgICAg
d2hpbGUgKCgqcyAhPSAnICcpICYmICgqcyAhPSAnLCcpICYmICgqcyAhPSAnPScpICYmICgqcyAh
PSAnXDAnKSkKICAgICAgICAgICAgIHMrKzsKICAgICAgICAgfQogICAgICAgfQpAQCAtMzg3OSw3
ICszODg3LDcgQEAKICAgICBkaWFncmFtKGRpYWduYW1lLCZkdCk7CiAgICAgcmV0dXJuKF9UUlVF
KTsKICAgfQotICBlbHNlIAorICBlbHNlCiAgICAgcmV0dXJuKF9GQUxTRSk7CiB9CiAjIGVuZGlm
IC8qIExKICovCkBAIC0zODk1LDcwICszOTAzLDU4IEBACiBpbnQgIG47CiAjZW5kaWYKIHsKLSAg
Y2hhciAgICBzcGJ1ZltTVFJTSVpFXSwgeHNbU1RSU0laRV0sIHlzW1NUUlNJWkVdOwotICBjaGFy
ICAgICpzZiA9IE5VTEwsICpwc2ZpbGUgPSBOVUxMOworICBjaGFyICAgIHhzW1NUUlNJWkVdLCB5
c1tTVFJTSVpFXTsKKyAgY2hhciAgICAqaW5jbHVkZV9maWxlID0gTlVMTDsKKyAgZW51bSAgICB7
IFZlcmJGaWxlLCBIUEZpbGUsIFBTRmlsZSB9IGZpbGVfdHlwZTsKICAgZmxvYXQgICB4LHk7CiAg
IGxvbmc0ICAgeF9wb3MsIHlfcG9zOwogICBLZXlXb3JkIGs7CiAgIGludCAgICAgaSwgaiwgajE7
CiAgIHN0YXRpYyAgaW50ICAgR3JheVNjYWxlID0gMTAsIFBhdHRlcm4gPSAxOwogICBzdGF0aWMg
IGJvb2wgIEdyYXlGaWxsID0gX1RSVUU7Ci0gIHN0YXRpYyAgbG9uZzQgcF94WzgwXSwgcF95Wzgw
XTsKLSAgaW50IGxseD0wLCBsbHk9MCwgdXJ4PTAsIHVyeT0wLCByd2k9MCwgcmhpPTA7Ci0jaWZk
ZWYgV0lOMzIKLSAgY2hhciAgICAqZ3NfcGF0aDsKLSNlbmRpZgorICBzdGF0aWMgIGxvbmc0IHBf
eFtNQVhfU1BFQ0lBTF9ERUZQT0lOVFNdLCBwX3lbTUFYX1NQRUNJQUxfREVGUE9JTlRTXTsKKyAg
aW50IGxseD0wLCBsbHk9MCwgdXJ4PTAsIHVyeT0wLCByd2k9MDsKIAogICBzdHJbbl0gPSAnXDAn
OwotICBzcGJ1ZlswXSA9ICdcMCc7CisgIGZvciAoIGk9MCA7IGk8TUFYX1NQRUNJQUxfREVGUE9J
TlRTIDsgaSsrICkKKyAgICBwX3hbaV0gPSBwX3lbaV0gPSAtMTsKIAogICBTZXRQb3NuKGgsIHYp
OwogI2lmZGVmIF9fcmlzY29zCiAjaWZkZWYgTEoKLSAgaWYgKFBhcnNlRGlhZ3JhbShzdHIpKSAK
KyAgaWYgKFBhcnNlRGlhZ3JhbShzdHIpKQogICAgIHJldHVybjsKICNlbmRpZgogI2VuZGlmCi0g
CisKICAgd2hpbGUgKCAoc3RyID0gR2V0S2V5U3RyKHN0ciwgJmspKSAhPSBOVUxMICkgewogICAg
IC8qIGdldCBhbGwga2V5d29yZC12YWx1ZSBwYWlycyAqLwogICAgIC8qIGZvciBjb21wYXRpYmls
aXR5LCBzaW5nbGUgd29yZHMgYXJlIHRha2VuIGFzIGZpbGUgbmFtZXMgKi8KICAgICBpZiAoIGsu
dnQgPT0gTm9uZSAmJiBhY2Nlc3Moay5LZXksIDApID09IDApIHsKLSAgICAgIGlmICggc2YKLSNp
ZmRlZiBLUEFUSFNFQQotICAgICAgICAgICAmJiAha3BzZV90ZXhfaHVzaCAoInNwZWNpYWwiKQot
I2VuZGlmCi0gICAgICAgICApCi0gICAgICAgIFdhcm5pbmcoIk1vcmUgdGhhbiBvbmUgXFxzcGVj
aWFsIGZpbGUgbmFtZSBnaXZlbi4gJXMgaWdub3JlZCIsIHNmKTsKLSAgICAgICh2b2lkKSBzdHJj
cHkoc3BidWYsIGsuS2V5KTsKLSAgICAgIHNmID0gc3BidWY7Ci0gICAgICAvKgotICAgICAgICBm
b3IgKGogPSAxOyAoKHNmW2pdPT0nLycgPyBzZltqXT0nXFwnOnNmW2pdKSAhPSAnXDAnKTsgaisr
KTsKLSAgICAgICAgKi8KLSAgICB9IGVsc2UgaWYgKCBHZXRLZXlWYWwoICZrLCBLZXlUYWIsIE5L
RVlTLCAmaSApICYmIGkgIT0gLTEgKQorICAgICAgaWYgKCBpbmNsdWRlX2ZpbGUgJiYgIWtwc2Vf
dGV4X2h1c2ggKCJzcGVjaWFsIikgKSB7CisgICAgICAgIFdhcm5pbmcoIk1vcmUgdGhhbiBvbmUg
XFxzcGVjaWFsIGZpbGUgbmFtZSBnaXZlbi4gJXMgaWdub3JlZCIsIGluY2x1ZGVfZmlsZSk7CisJ
ZnJlZSAoaW5jbHVkZV9maWxlKTsKKyAgICAgIH0KKyAgICAgIGluY2x1ZGVfZmlsZSA9IHhzdHJk
dXAoay5LZXkpOworICAgICAgZmlsZV90eXBlID0gVmVyYkZpbGU7CisgICAgfSBlbHNlIGlmICgg
R2V0S2V5VmFsKCAmaywgS2V5VGFiLCBOS0VZUywgJmkgKSAmJiBpICE9IC0xICkgewogICAgICAg
c3dpdGNoIChpKSB7CiAgICAgICBjYXNlIFBTRklMRToKLSAgICAgICAgaWYgKHNmCi0jaWZkZWYg
S1BBVEhTRUEKLSAgICAgICAgICAgICYmICFrcHNlX3RleF9odXNoICgic3BlY2lhbCIpCi0jZW5k
aWYKLSAgICAgICAgICAgICkKLSAgICAgICAgICAgIFdhcm5pbmcoIk1vcmUgdGhhbiBvbmUgXFxz
cGVjaWFsIGZpbGUgbmFtZSBnaXZlbi4gJXMgaWdub3JlZCIsIHNmKTsKLSAgICAgICAgKHZvaWQp
IHN0cmNweShzcGJ1Ziwgay5WYWwpOwotICAgICAgICBwc2ZpbGUgPSBzcGJ1ZjsKLSAgICAgICAg
LyoKLSAgICAgICAgICBmb3IgKGo9MTsgKChzZltqXT09Jy8nID8gc2Zbal09J1xcJzpzZltqXSkg
IT0gJ1wwJyk7IGorKyk7Ci0gICAgICAgICAgKi8KKyAgICAgICAgaWYgKCBpbmNsdWRlX2ZpbGUg
KSB7CisJICBXYXJuaW5nKCJNb3JlIHRoYW4gb25lIFxcc3BlY2lhbCBmaWxlIG5hbWUgZ2l2ZW4u
ICVzIGlnbm9yZWQiLCBpbmNsdWRlX2ZpbGUpOworCSAgZnJlZShpbmNsdWRlX2ZpbGUpOworCX0K
KyAgICAgICAgaW5jbHVkZV9maWxlID0geHN0cmR1cChrLlZhbCk7CisJZmlsZV90eXBlID0gUFNG
aWxlOwogICAgICAgICBicmVhazsKLSAgICAgICAgCisKICAgICAgIGNhc2UgSFBGSUxFOgotICAg
ICAgICBpZiAoc2YpCi0gICAgICAgICAgICBXYXJuaW5nKCJNb3JlIHRoYW4gb25lIFxcc3BlY2lh
bCBmaWxlIG5hbWUgZ2l2ZW4uICVzIGlnbm9yZWQiLCBzZik7Ci0gICAgICAgICh2b2lkKSBzdHJj
cHkoc3BidWYsIGsuVmFsKTsKLSAgICAgICAgc2YgPSBzcGJ1ZjsKLSAgICAgICAgLyoKLSAgICAg
ICAgICBmb3IgKGo9MTsgKChzZltqXT09Jy8nID8gc2Zbal09J1xcJzpzZltqXSkgIT0gJ1wwJyk7
IGorKyk7Ci0gICAgICAgICAgKi8KKyAgICAgICAgaWYgKCBpbmNsdWRlX2ZpbGUgJiYgIWtwc2Vf
dGV4X2h1c2ggKCJzcGVjaWFsIikgKSB7CisJICBXYXJuaW5nKCJNb3JlIHRoYW4gb25lIFxcc3Bl
Y2lhbCBmaWxlIG5hbWUgZ2l2ZW4uICVzIGlnbm9yZWQiLCBpbmNsdWRlX2ZpbGUpOworCSAgZnJl
ZShpbmNsdWRlX2ZpbGUpOworCX0KKyAgICAgICAgaW5jbHVkZV9maWxlID0geHN0cmR1cChrLlZh
bCk7CisJZmlsZV90eXBlID0gSFBGaWxlOwogICAgICAgICBicmVhazsKIAogICAgICAgY2FzZSBP
UklFTlRBVElPTjoKQEAgLTM5NzcsMjQgKzM5NzMsMjYgQEAKICAgICAgICAgICBFTUlUMigiXDAz
MyZsJWRPXDAzMypyRiIsICh1bnNpZ25lZCBjaGFyKWsudi5pKTsKICAgICAgICAgfQogI2VuZGlm
Ci0gICAgICAgIGVsc2UKLSNpZmRlZiBLUEFUSFNFQQotICAgICAgICAgICBpZiAoIWtwc2VfdGV4
X2h1c2ggKCJzcGVjaWFsIikpCi0jZW5kaWYKLSAgICAgICAgICBXYXJuaW5nKCAiSW52YWxpZCBv
cmllbnRhdGlvbiAoJWQpZ2l2ZW47IGlnbm9yZWQuIiwgay52LmkpOworICAgICAgICBlbHNlIHsK
KwkgIFdhcm5pbmcoICJJbnZhbGlkIG9yaWVudGF0aW9uICglZCkgZ2l2ZW47IGlnbm9yZWQuIiwg
ay52LmkpOworCX0KICAgICAgICAgYnJlYWs7CiAKICAgICAgIGNhc2UgUkVTRVRQT0lOVFM6Ci0g
ICAgICAgICh2b2lkKSBzdHJjcHkoc3BidWYsIGsuVmFsKTsKLQotICAgICAgICBzZiA9IE5VTEw7
CisJZm9yICggaT0wIDsgaTxNQVhfU1BFQ0lBTF9ERUZQT0lOVFMgOyBpKysgKQorCSAgcF94W2ld
ID0gcF95W2ldID0gLTE7CiAgICAgICAgIGJyZWFrOwogCiAgICAgICBjYXNlIERFRlBPSU5UOgot
ICAgICAgICAodm9pZCkgc3RyY3B5KHNwYnVmLCBrLlZhbCk7Ci0gICAgICAgIGkgPSBzc2NhbmYo
c3BidWYsIiVkKCVbXixdLCVzKSIsJmoseHMseXMpOworCS8qIDI1NCBpcyBTVFJTSVpFLTEuIGNw
cCBzaG91bGQgYmUgdXNlZCB0byBjb25zdHJ1Y3QgdGhhdCBudW1iZXIuICovCisgICAgICAgIGkg
PSBzc2NhbmYoay5WYWwsIiVkKCUyNTRbXixdLCUyNTRzKSIsJmoseHMseXMpOwogICAgICAgICBp
ZiAoaT4wKSB7Ci0gICAgICAgICAgeF9wb3MgPSBoOyAKKwkgIGlmICggaiA8IDAgIHx8ICBqID49
IE1BWF9TUEVDSUFMX0RFRlBPSU5UUyApIHsKKwkgICAgV2FybmluZyAoImRlZnBvaW50ICVkIGln
bm9yZWQsIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAlZCIsCisJCSAgICAgaiwgTUFYX1NQRUNJQUxf
REVGUE9JTlRTKTsKKwkgICAgYnJlYWs7CisJICB9CisgICAgICAgICAgeF9wb3MgPSBoOwogICAg
ICAgICAgIHlfcG9zID0gdjsKICAgICAgICAgICBpZiAoaT4xKSB7CiAgICAgICAgICAgICBpZiAo
c3NjYW5mKHhzLCIlZnB0IiwmeCk+MCkgewpAQCAtNDAxMCwyMCArNDAwOCwzNCBAQAogICAgICAg
ICAgIH0KICAgICAgICAgICBwX3hbal09eF9wb3M7CiAgICAgICAgICAgcF95W2pdPXlfcG9zOwot
ICAgICAgICB9IGVsc2UKLSNpZmRlZiBLUEFUSFNFQQotICAgICAgICAgICAgICBpZiAoIWtwc2Vf
dGV4X2h1c2ggKCJzcGVjaWFsIikpCi0jZW5kaWYKLSAgICAgICAgICBXYXJuaW5nKCJpbnZhbGlk
IHBvaW50IGRlZmluaXRpb25cbiIpOwotCi0gICAgICAgIHNmID0gTlVMTDsKKyAgICAgICAgfSBl
bHNlIHsKKwkgIFdhcm5pbmcoImludmFsaWQgcG9pbnQgZGVmaW5pdGlvbiIpOworCX0KICAgICAg
ICAgYnJlYWs7CiAKICAgICAgIGNhc2UgRklMTDoKLSAgICAgICAgKHZvaWQpIHN0cmNweShzcGJ1
Ziwgay5WYWwpOwotICAgICAgICBpID0gc3NjYW5mKHNwYnVmLCIlZC8lZCAlcyIsJmosJmoxLHhz
KTsKKwkvKiAyNTQgaXMgU1RSU0laRS0xLiBjcHAgc2hvdWxkIGJlIHVzZWQgdG8gY29uc3RydWN0
IHRoYXQgbnVtYmVyLiAqLworICAgICAgICBpID0gc3NjYW5mKGsuVmFsLCIlZC8lZCAlMjU0cyIs
JmosJmoxLHhzKTsKICAgICAgICAgaWYgKGk+MSkgewogI2lmZGVmIExKCisJICBpZiAoIGogPCAw
IHx8IGogPj0gTUFYX1NQRUNJQUxfREVGUE9JTlRTICkgeworCSAgICBXYXJuaW5nICgiZmlsbCBp
Z25vcmVkLCBwb2ludCAlZCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgJWQiLAorCQkgICAgIGosIE1B
WF9TUEVDSUFMX0RFRlBPSU5UUyk7CisJICAgIGJyZWFrOworCSAgfQorCSAgaWYgKCBwX3hbal0g
PT0gLTEgKSB7CisJICAgIFdhcm5pbmcgKCJmaWxsIGlnbm9yZWQsIHBvaW50ICVkIGlzIHVuZGVm
aW5lZFxuIiwgaik7CisJICAgIGJyZWFrOworCSAgfQorCSAgaWYgKCBqMSA8IDAgfHwgajEgPj0g
TUFYX1NQRUNJQUxfREVGUE9JTlRTICkgeworCSAgICBXYXJuaW5nICgiZmlsbCBpZ25vcmVkLCBw
b2ludCAlZCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgJWQiLAorCQkgICAgIGoxLCBNQVhfU1BFQ0lB
TF9ERUZQT0lOVFMpOworCSAgICBicmVhazsKKwkgIH0KKwkgIGlmICggcF94W2oxXSA9PSAtMSAp
IHsKKwkgICAgV2FybmluZyAoImZpbGwgaWdub3JlZCwgcG9pbnQgJWQgaXMgdW5kZWZpbmVkXG4i
LCBqMSk7CisJICAgIGJyZWFrOworCSAgfQogICAgICAgICAgIFNldFBvc24ocF94W2pdLCBwX3lb
al0pOwogICAgICAgICAgIHhfcG9zID0gKGxvbmc0KVBJWFJPVU5EKHBfeFtqMV0tcF94W2pdLCBo
Y29udik7CiAgICAgICAgICAgeV9wb3MgPSAobG9uZzQpUElYUk9VTkQocF95W2oxXS1wX3lbal0s
IHZjb252KTsKQEAgLTQwNDMsMjIgKzQwNTUsMTggQEAKICAgICAgICAgaWYgKChrLnYuaSA+PSAw
KSAmJiAoay52LmkgPCAxMDEpKSB7CiAgICAgICAgICAgR3JheVNjYWxlID0gay52Lmk7CiAgICAg
ICAgICAgR3JheUZpbGwgPSBfVFJVRTsKLSAgICAgICAgfSBlbHNlCi0jaWZkZWYgS1BBVEhTRUEK
LSAgICAgICAgICAgaWYgKCFrcHNlX3RleF9odXNoICgic3BlY2lhbCIpKQotI2VuZGlmCisgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgV2FybmluZyggIkludmFsaWQgZ3JheSBzY2FsZSAoJWQp
IGdpdmVuOyBpZ25vcmVkLiIsIGsudi5pKTsKKwl9CiAgICAgICAgIGJyZWFrOwogCiAgICAgICBj
YXNlIFBBVFRFUk46CiAgICAgICAgIGlmICgoay52LmkgPj0gMCkgJiYgKGsudi5pIDwgNykpIHsK
ICAgICAgICAgICBQYXR0ZXJuID0gay52Lmk7CiAgICAgICAgICAgR3JheUZpbGwgPSBfRkFMU0U7
Ci0gICAgICAgIH0gZWxzZQotI2lmZGVmIEtQQVRIU0VBCi0gICAgICAgICAgIGlmICgha3BzZV90
ZXhfaHVzaCAoInNwZWNpYWwiKSkKLSNlbmRpZgorICAgICAgICB9IGVsc2UgewogICAgICAgICAg
IFdhcm5pbmcoICJJbnZhbGlkIHBhdHRlcm4gKCVkKSBnaXZlbjsgaWdub3JlZC4iLCBrLnYuaSk7
CisJfQogICAgICAgICBicmVhazsKIAogICAgICAgY2FzZSBMTFg6IGxseCA9IGsudi5pOyBicmVh
azsKQEAgLTQwNjYsMTAzICs0MDc0LDE2MSBAQAogICAgICAgY2FzZSBVUlg6IHVyeCA9IGsudi5p
OyBicmVhazsKICAgICAgIGNhc2UgVVJZOiB1cnkgPSBrLnYuaTsgYnJlYWs7CiAgICAgICBjYXNl
IFJXSTogcndpID0gay52Lmk7IGJyZWFrOwotICAgICAgY2FzZSBSSEk6IHJoaSA9IGsudi5pOyBi
cmVhazsKKyAgICAgIGNhc2UgUkhJOgorCWlmICgha3BzZV90ZXhfaHVzaCAoInNwZWNpYWwiKSkK
KwkgIFdhcm5pbmcoIldoYXRldmVyIHJoaSB3YXMgZ29vZCBmb3Igb25jZSwgaXQgaXMgaWdub3Jl
ZCBub3cuIik7CisJYnJlYWs7CiAKICAgICAgIGRlZmF1bHQ6Ci0jaWZkZWYgS1BBVEhTRUEKLSAg
ICAgICAgICAgaWYgKCFrcHNlX3RleF9odXNoICgic3BlY2lhbCIpKQotI2VuZGlmCi0gICAgICAg
IFdhcm5pbmcoIkNhbid0IGhhbmRsZSAlcz0lcyBjb21tYW5kOyBpZ25vcmVkLiIsIGsuS2V5LCBr
LlZhbCk7CisJaWYgKCAha3BzZV90ZXhfaHVzaCAoInNwZWNpYWwiKSApCisJICBXYXJuaW5nKCJD
YW4ndCBoYW5kbGUgJXM9JXMgY29tbWFuZDsgaWdub3JlZC4iLCBrLktleSwgay5WYWwpOwogICAg
ICAgICBicmVhazsKICAgICAgIH0KLSAgICAgIAotICAgIGVsc2UKLSNpZmRlZiBLUEFUSFNFQQot
ICAgICAgICAgICBpZiAoIWtwc2VfdGV4X2h1c2ggKCJzcGVjaWFsIikpCi0jZW5kaWYKKworICAg
IH0gZWxzZSBpZiAoIWtwc2VfdGV4X2h1c2ggKCJzcGVjaWFsIikpIHsKICAgICAgIFdhcm5pbmco
IkludmFsaWQga2V5d29yZCBvciB2YWx1ZSBpbiBcXHNwZWNpYWwgLSA8JXM+IGlnbm9yZWQiLCBr
LktleSk7CisgICAgfQorCisgICAgZnJlZSAoay5LZXkpOworICAgIGlmICggay5WYWwgIT0gTlVM
TCApICBmcmVlKGsuVmFsKTsKICAgfQogCi0gIGlmICggc2YgfHwgcHNmaWxlICkgeworICBpZiAo
IGluY2x1ZGVfZmlsZSApIHsKICAgICBsYXN0X3J4ID0gbGFzdF9yeSA9IFVOS05PV047CiAjaWZk
ZWYgSUJNMzgxMgogICAgIFBNUGZsdXNoOwogI2VuZGlmCi0gICAgaWYgKHNmKSB7Ci0gICAgICBp
ZiAoaSA9PSBIUEZJTEUpIAotICAgICAgICBDb3B5SFBGaWxlKCBzZiApOwotICAgICAgZWxzZSAK
LSAgICAgICAgQ29weUZpbGUoIHNmICk7Ci0gICAgfQotICAgIGVsc2UKKwogI2lmZGVmIExKCi0g
ICAgICBpZiAocHNmaWxlKSB7Ci0gICAgICAgIC8qIGludCBoZWlnaHQgPSByd2kgKiAodXJ4IC0g
bGx4KSAvICh1cnkgLSBsbHkpOyovCi0gICAgICAgIGludCB3aWR0aCAgPSB1cnggLSBsbHg7Ci0g
ICAgICAgIGludCBoZWlnaHQgPSB1cnkgLSBsbHk7Ci0gICAgICAgIGNoYXIgY21kWzI1NV07Ci0g
ICAgICAgIGludCBzY2FsZV9mYWN0b3IgICAgPSAzMDAwICogd2lkdGggLyByd2k7Ci0gICAgICAg
IGludCBhZGp1c3RlZF9oZWlnaHQgPSBoZWlnaHQgKiAzMDAvc2NhbGVfZmFjdG9yOwotICAgICAg
ICBpbnQgYWRqdXN0ZWRfbGx4ICAgID0gbGx4ICAgICogMzAwL3NjYWxlX2ZhY3RvcjsKLSAgICAg
ICAgY2hhciAqcHJpbnRlciA9ICJsamV0cGx1cyI7IC8qIHVzZSB0aGUgbW9zdCBzdHVwaWQgb25l
ICovCi0KLQotICAgICAgICBjaGFyIHNjYWxlX2ZpbGVfbmFtZVsyNTVdOwotICAgICAgICBjaGFy
ICpzY2FsZV9maWxlID0gdG1wbmFtKHNjYWxlX2ZpbGVfbmFtZSk7Ci0gICAgICAgIGNoYXIgKnBj
bF9maWxlID0gdG1wbmFtKE5VTEwpOyAgCi0gICAgICAgIEZJTEVQVFIgc2NhbGVmOwotCi0gICAg
ICAgIGlmICggKHNjYWxlZiA9IEJPVVRPUEVOKHNjYWxlX2ZpbGUpKSA9PSBGUE5VTEwgKSB7Ci0g
ICAgICAgICAgV2FybmluZygiVW5hYmxlIHRvIG9wZW4gZmlsZSAlcyBmb3Igd3JpdGluZyIsIHNj
YWxlX2ZpbGUgKTsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgZnByaW50
ZihzY2FsZWYsICIlLjJmICUuMmYgc2NhbGVcbiVkICVkIHRyYW5zbGF0ZVxuIiwgIAotICAgICAg
ICAgICAgICAgIDMwMC4wL3NjYWxlX2ZhY3RvciwgMzAwLjAvc2NhbGVfZmFjdG9yLAotICAgICAg
ICAgICAgICAgIDAsIGFkanVzdGVkX2hlaWdodCA9PSBoZWlnaHQgPyAwIDogdXJ5KTsKLSAgICAg
ICAgQkNMT1NFKCBzY2FsZWYgKTsKKyAgICBpZiAoIGZpbGVfdHlwZSA9PSBQU0ZpbGUpIHsKKyAg
ICAgIC8qIGludCBoZWlnaHQgPSByd2kgKiAodXJ4IC0gbGx4KSAvICh1cnkgLSBsbHkpOyovCisg
ICAgICBpbnQgd2lkdGggID0gdXJ4IC0gbGx4OworICAgICAgaW50IGhlaWdodCA9IHVyeSAtIGxs
eTsKKyAgICAgIGNoYXIgY21kWzI1NV07CisgICAgICBjaGFyICpjbWRfZm9ybWF0ID0gIiVzIC1x
IC1kU0lNUExFIC1kU0FGRVIgLWROT1BBVVNFIC1zREVWSUNFPSVzIC1zT3V0cHV0RmlsZT0lcyAl
cyAlcyBzaG93cGFnZS5wcyAtYyBxdWl0IjsKKyAgICAgIGNoYXIgKmdzX2NtZDsKKyAgICAgIGlu
dCBzY2FsZV9mYWN0b3IsIGFkanVzdGVkX2hlaWdodCwgYWRqdXN0ZWRfbGx4OworICAgICAgY2hh
ciAqcHJpbnRlciA9ICJsamV0cGx1cyI7IC8qIHVzZSB0aGUgbW9zdCBzdHVwaWQgb25lICovCisK
KyAgICAgIGNoYXIgcGNsX2ZpbGVbU1RSU0laRV07CisgICAgICBjaGFyIHNjYWxlX2ZpbGVbU1RS
U0laRV07CisgICAgICBGSUxFUFRSIHNjYWxlZjsKKworICAgICAgaWYgKCB1cnggPT0gMCB8fCB1
cnkgPT0gMCB8fCByd2kgPT0gMCApIHsKKwkvKiBTaW5jZSBkdmlwcycgcHNmaWxlIHNwZWNpYWwg
aGFzIGEgZGlmZmVyZW50IHN5bnRheCwgdGhpcyBtaWdodAorCSAgIHdlbGwgYmUgb25lIG9mIHRo
b3NlIHNwZWNpYWxzLCBpLmUuLCBhIG5vbi1kdmlsamsgc3BlY2lhbC4gVGhlbgorCSAgIHRoZSBX
YXJuaW5nIHNob3VsZCBiZSBzdXBwcmVzc2FibGUuICovCisJaWYgKCAha3BzZV90ZXhfaHVzaCAo
InNwZWNpYWwiKSApCisJICBXYXJuaW5nICgiSWdub3JpbmcgcHNmaWxlIHNwZWNpYWwgd2l0aG91
dCB1cngsIHVyeSBhbmQgcndpIGF0dHJpYnV0ZXMiKTsKKwlmcmVlIChpbmNsdWRlX2ZpbGUpOwor
CXJldHVybjsKKyAgICAgIH0KKyAgICAgIHNjYWxlX2ZhY3RvciAgICA9IDMwMDAgKiB3aWR0aCAv
IHJ3aTsKKyAgICAgIGFkanVzdGVkX2hlaWdodCA9IGhlaWdodCAqIDMwMC9zY2FsZV9mYWN0b3I7
CisgICAgICBhZGp1c3RlZF9sbHggICAgPSBsbHggICAgKiAzMDAvc2NhbGVfZmFjdG9yOworCisg
ICAgICAvKiBXZSBjYW5ub3QgdXNlIG1rc3RlbXAsIGFzIHdlIGNhbm5vdCBwYXNzIHR3byBvcGVu
IGZpbGUgZGVzY3JpcHRvcnMKKwkgcG9ydGFibHkgdG8gR2hvc3RzY3JpcHQuIFdlIGRvbid0IHdh
bnQgdG8gdXNlIHRtcG5hbSgpIG9yIHRlbXBuYW0oKQorCSBlaXRoZXIsIGFzIHRoZXkgaGF2ZSB0
ZW1wZmlsZSBjcmVhdGlvbiByYWNlIGNvbmRpdGlvbnMuIEluc3RlYWQgd2UKKwkgY3JlYXRlIGEg
dGVtcG9yYXJ5IGRpcmVjdG9yeSB3aXRoIG1rZHRlbXAoKSAtLSBpZiB0aGF0J3MgYXZhaWxhYmxl
LgorCSBJZiBub3QsIHdlIGFyZSB0aHJvd24gYmFjayB0byB0ZW1wbmFtKCksIHRvIGdldCBvdXIg
ZnVuY3Rpb25hbGl0eQorCSBhdCBhbGwuIFdlIG5lZWQgdG8gY3JlYXRlIHRoZSB0ZW1wb3Jhcnkg
ZGlyZWN0b3J5IG9ubHkgb25jZSBwZXIKKwkgcnVuOyBpdCB3aWxsIGJlIGRlbGV0ZWQgaW4gQWxs
RG9uZSgpLiAqLworICAgICAgaWYgKCB0bXBfZGlyWzBdID09ICdcMCcgKSB7CisJY2hhciAqIGJh
c2VfZGlyOworCWlmICggKGJhc2VfZGlyID0gZ2V0ZW52KCJUTVBESVIiKSkgPT0gTlVMTCApIHsK
KwkgIGJhc2VfZGlyID0gIi90bXAiOworCX0gZWxzZSBpZiAoIHN0cmxlbihiYXNlX2RpcikgPiBT
VFJTSVpFIC0gc2l6ZW9mKCIvZHZpbGprWFhYWFhYL2luY2x1ZGUucGNsIikgKSB7CisJICBXYXJu
aW5nICgiVE1QRElSICVzIGlzIHRvbyBsb25nLCB1c2luZyAvdG1wIGluc3RlYWQiLCBiYXNlX2Rp
cik7CisJICBiYXNlX2RpciA9ICIvdG1wIjsKKwl9CisJaWYgKCBiYXNlX2RpclswXSA9PSAnLycg
ICYmIGJhc2VfZGlyWzFdID09ICdcMCcgKSB7CisJICBXYXJuaW5nICgiRmVlbGluZyBuYXVnaHR5
LCBkbyB3ZT8gLyBpcyBubyB0ZW1wb3JhcnkgZGlyZWN0b3J5LCBkdWRlIik7CisJICBiYXNlX2Rp
ciA9ICIvdG1wIjsKKwl9CisJc3RyY3B5ICh0bXBfZGlyLCBiYXNlX2Rpcik7CisJc3RyY2F0ICh0
bXBfZGlyLCAiL2R2aWxqa1hYWFhYWCIpOworCWlmICggbWtkdGVtcCh0bXBfZGlyKSA9PSBOVUxM
ICkgeworCSAgV2FybmluZyAoIkNvdWxkIG5vdCBjcmVhdGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSAl
cywgZXJybm8gPSAlZDsgaWdub3JpbmcgaW5jbHVkZSBmaWxlIHNwZWNpYWwiLAorCQkgICB0bXBf
ZGlyLCBlcnJubyk7CisJICByZXR1cm47CisJfQorICAgICAgfQorICAgICAgc3RyY3B5KHBjbF9m
aWxlLCB0bXBfZGlyKTsKKyAgICAgIHN0cmNhdChwY2xfZmlsZSwgIi9pbmNsdWRlLnBjbCIpOwor
ICAgICAgc3RyY3B5KHNjYWxlX2ZpbGUsIHRtcF9kaXIpOworICAgICAgc3RyY2F0KHNjYWxlX2Zp
bGUsICIvc2NhbGUucHMiKTsKKworICAgICAgaWYgKCAoc2NhbGVmID0gQk9VVE9QRU4oc2NhbGVf
ZmlsZSkpID09IEZQTlVMTCApIHsKKwlXYXJuaW5nKCJVbmFibGUgdG8gb3BlbiBmaWxlICVzIGZv
ciB3cml0aW5nIiwgc2NhbGVfZmlsZSApOworCWZyZWUgKGluY2x1ZGVfZmlsZSk7CisJdW5saW5r
KHNjYWxlX2ZpbGUpOwkJLyogaWdub3JlIGVycm9yICovCisJcmV0dXJuOworICAgICAgfQorICAg
ICAgZnByaW50ZihzY2FsZWYsICIlLjJmICUuMmYgc2NhbGVcbiVkICVkIHRyYW5zbGF0ZVxuIiwK
KwkgICAgICAzMDAuMC9zY2FsZV9mYWN0b3IsIDMwMC4wL3NjYWxlX2ZhY3RvciwKKwkgICAgICAw
LCBhZGp1c3RlZF9oZWlnaHQgPT0gaGVpZ2h0ID8gMCA6IHVyeSk7CisgICAgICBCQ0xPU0UoIHNj
YWxlZiApOwogCiAjaWZkZWYgV0lOMzIKLQlnc19wYXRoID0gZ2V0ZW52KCJHU19QQVRIIik7Ci0J
aWYgKCFnc19wYXRoKQotCSAgZ3NfcGF0aCA9ICJnc3dpbjMyYy5leGUiOwotICAgICAgICBzcHJp
bnRmKGNtZCwiJXMgLXEgLWRTSU1QTEUgLWRTQUZFUiAtZE5PUEFVU0UgLXNERVZJQ0U9JXMgLXNP
dXRwdXRGaWxlPSVzICVzICVzIHNob3dwYWdlLnBzIC1jIHF1aXQiLAotCQlnc19wYXRoLCBwcmlu
dGVyLCBwY2xfZmlsZSwgc2NhbGVfZmlsZSwgcHNmaWxlKTsKLSNlbHNlCi0gICAgICAgIHNwcmlu
dGYoY21kLCJncyAtcSAtZFNJTVBMRSAtZFNBRkVSIC1kTk9QQVVTRSAtc0RFVklDRT0lcyAtc091
dHB1dEZpbGU9JXMgJXMgJXMgc2hvd3BhZ2UucHMgLWMgcXVpdCIsCi0gICAgICAgICAgICAgICAg
cHJpbnRlciwgcGNsX2ZpbGUsIHNjYWxlX2ZpbGUsIHBzZmlsZSk7Ci0jZW5kaWYKLSNpZmRlZiBE
RUJVR0dTICAgCi0gICAgICAgIGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICJQUy1maWxlICcl
cycgdz0lZCwgaD0lZCwgdXJ4PSVkLCB1cnk9JWQsIGxseD0lZCwgbGx5PSVkLCByd2k9JWRcbiIs
Ci0gICAgICAgICAgICAgICAgcHNmaWxlLCB1cnggLSBsbHgsIGhlaWdodCwgdXJ4LHVyeSxsbHgs
bGx5LCByd2kpOwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwiJXNcbiIsY21kKTsKKyAgICAgIGlm
ICggKGdzX2NtZCA9IGdldGVudigiR1NfUEFUSCIpKSA9PSBOVUxMICkKKwlnc19jbWQgPSAiZ3N3
aW4zMmMuZXhlIjsKKyNlbHNlCisgICAgICBnc19jbWQgPSAiZ3MiOwogI2VuZGlmCi0gICAgICAg
IGlmIChzeXN0ZW0oY21kKSkgewotICAgICAgICAgIFdhcm5pbmcoImV4ZWN1dGlvbiBvZiAnJXMn
IHJldHVybmVkIGFuIGVycm9yIiwgY21kKTsKLSAgICAgICAgfSBlbHNlIHsKLSNpZmRlZiBERUJV
R0dTICAgCi0gICAgICAgICAgZnByaW50ZihzdGRlcnIsICJvPSVkLCBoPSVkLCBzbz0lZCwgc2g9
JWRcbiIsIAotICAgICAgICAgICAgICAgICAgbGx4LCBoZWlnaHQsIGFkanVzdGVkX2xseCwgYWRq
dXN0ZWRfaGVpZ2h0KTsKLSAgICAgICAgICAKLSAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIk9M
RCB4PSVkLCB5PSVkXG4iLCAKLSAgICAgICAgICAgICAgICAgIChpbnQpUElYUk9VTkQoaCwgaGNv
bnYpICsgeF9nb2Zmc2V0LAotICAgICAgICAgICAgICAgICAgKGludClQSVhST1VORCh2LCB2Y29u
dikgKyB5X2dvZmZzZXQpOwotI2VuZGlmICAKLSAgICAgICAgICB2IC09IDY1NTM2bCphZGp1c3Rl
ZF9oZWlnaHQ7IC8qKjMwMC9zY2FsZV9mYWN0b3I7Ki8KLSAgICAgICAgICBoIC09IDY1NTM2bCph
ZGp1c3RlZF9sbHg7IC8qICozMDAvc2NhbGVfZmFjdG9yOyovCi0gICAgICAgICAgU2V0UG9zbiho
LCB2KTsKLSNpZmRlZiBERUJVR0dTICAgCi0gICAgICAgICAgZnByaW50ZihzdGRlcnIsICJORVcg
eD0lZCwgeT0lZFxuIiwgCi0gICAgICAgICAgICAgICAgICAoaW50KVBJWFJPVU5EKGgsIGhjb252
KSArIHhfZ29mZnNldCwKLSAgICAgICAgICAgICAgICAgIChpbnQpUElYUk9VTkQodiwgdmNvbnYp
ICsgeV9nb2Zmc2V0KTsKLSNlbmRpZgotCi0gICAgICAgICAgQ29weUhQRmlsZSggcGNsX2ZpbGUg
KTsKLSAgICAgICAgICAvKiB1bmxpbmsocGNsX2ZpbGUpOyAqLwotICAgICAgICAgIC8qIHVubGlu
ayhzY2FsZV9maWxlKTsgKi8KLSAgICAgICAgfQorICAgICAgaWYgKCBzdHJsZW4oY21kX2Zvcm1h
dCktMTAgKyBzdHJsZW4oZ3NfY21kKSArIHN0cmxlbihwcmludGVyKSArCisJICAgICAgIHN0cmxl
bihwY2xfZmlsZSkgKyBzdHJsZW4oc2NhbGVfZmlsZSkgKyBzdHJsZW4oaW5jbHVkZV9maWxlKSAr
MSA+CisJICAgc2l6ZW9mKGNtZCkgKSB7CisJV2FybmluZyAoIkdob3N0c2NyaXB0IGNvbW1hbmQg
Zm9yICVzIHdvdWxkIGJlIHRvbyBsb25nLCBza2lwcGluZyBzcGVjaWFsIiwgaW5jbHVkZV9maWxl
KTsKKwlmcmVlIChpbmNsdWRlX2ZpbGUpOworCXVubGluayhzY2FsZV9maWxlKTsJCS8qIGlnbm9y
ZSBlcnJvcnMgKi8KKwl1bmxpbmsocGNsX2ZpbGUpOworCXJldHVybjsKKyAgICAgIH0KKyAgICAg
IHNwcmludGYoY21kLCBjbWRfZm9ybWF0LAorCSAgICAgIGdzX2NtZCwgcHJpbnRlciwgcGNsX2Zp
bGUsIHNjYWxlX2ZpbGUsIGluY2x1ZGVfZmlsZSk7CisjaWZkZWYgREVCVUdHUworICAgICAgZnBy
aW50ZihzdGRlcnIsCisJIlBTLWZpbGUgJyVzJyB3PSVkLCBoPSVkLCB1cng9JWQsIHVyeT0lZCwg
bGx4PSVkLCBsbHk9JWQsIHJ3aT0lZFxuIiwKKwkgICAgICBpbmNsdWRlX2ZpbGUsIHVyeCAtIGxs
eCwgaGVpZ2h0LCB1cngsdXJ5LGxseCxsbHksIHJ3aSk7CisgICAgICBmcHJpbnRmKHN0ZGVyciwi
JXNcbiIsY21kKTsKKyNlbmRpZgorICAgICAgaWYgKHN5c3RlbShjbWQpKSB7CisJV2FybmluZygi
ZXhlY3V0aW9uIG9mICclcycgcmV0dXJuZWQgYW4gZXJyb3IiLCBjbWQpOworICAgICAgfSBlbHNl
IHsKKyNpZmRlZiBERUJVR0dTCisJZnByaW50ZihzdGRlcnIsICJvPSVkLCBoPSVkLCBzbz0lZCwg
c2g9JWRcbiIsCisJCWxseCwgaGVpZ2h0LCBhZGp1c3RlZF9sbHgsIGFkanVzdGVkX2hlaWdodCk7
CisKKwlmcHJpbnRmKHN0ZGVyciwgIk9MRCB4PSVkLCB5PSVkXG4iLAorCQkoaW50KVBJWFJPVU5E
KGgsIGhjb252KSArIHhfZ29mZnNldCwKKwkJKGludClQSVhST1VORCh2LCB2Y29udikgKyB5X2dv
ZmZzZXQpOworI2VuZGlmCisJdiAtPSA2NTUzNmwqYWRqdXN0ZWRfaGVpZ2h0OyAvKiozMDAvc2Nh
bGVfZmFjdG9yOyovCisJaCAtPSA2NTUzNmwqYWRqdXN0ZWRfbGx4OyAvKiAqMzAwL3NjYWxlX2Zh
Y3RvcjsqLworCVNldFBvc24oaCwgdik7CisjaWZkZWYgREVCVUdHUworCWZwcmludGYoc3RkZXJy
LCAiTkVXIHg9JWQsIHk9JWRcbiIsCisJCShpbnQpUElYUk9VTkQoaCwgaGNvbnYpICsgeF9nb2Zm
c2V0LAorCQkoaW50KVBJWFJPVU5EKHYsIHZjb252KSArIHlfZ29mZnNldCk7CisjZW5kaWYKKwor
CUNvcHlIUEZpbGUoIHBjbF9maWxlICk7CiAgICAgICB9CisgICAgICB1bmxpbmsoc2NhbGVfZmls
ZSk7CQkvKiBpZ25vcmUgZXJyb3JzICovCisgICAgICB1bmxpbmsocGNsX2ZpbGUpOworICAgIH0K
KyAgICBlbHNlCiAjZW5kaWYgLyogTEogKi8KKworICAgIGlmICggZmlsZV90eXBlID09IEhQRmls
ZSApCisgICAgICBDb3B5SFBGaWxlKCBpbmNsdWRlX2ZpbGUgKTsKKyAgICBlbHNlIGlmICggZmls
ZV90eXBlID09IFZlcmJGaWxlICkKKyAgICAgIENvcHlGaWxlKCBpbmNsdWRlX2ZpbGUgKTsKKyAg
ICBlbHNlCisgICAgICBXYXJuaW5nICgiVGhpcyBjYW4ndCBoYXBwZW46IHVua25vd24gZmlsZV90
eXBlIHZhbHVlICVkIiwgZmlsZV90eXBlKTsKKworICAgIGlmICggaW5jbHVkZV9maWxlICE9IE5V
TEwgKSAgZnJlZShpbmNsdWRlX2ZpbGUpOwogICB9CiB9CiAKQEAgLTQxNzMsMTIgKzQyMzksMTEg
QEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqICBHZXRL
ZXlTdHIgICoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8q
IGV4dHJhY3QgZmlyc3Qga2V5d29yZC12YWx1ZSBwYWlyIGZyb20gc3RyaW5nICh2YWx1ZSBwYXJ0
IG1heSBiZSBudWxsKQotICogcmV0dXJuIHBvaW50ZXIgdG8gcmVtYWluZGVyIG9mIHN0cmluZwot
ICogcmV0dXJuIE5VTEwgaWYgbm9uZSBmb3VuZAorLyogRXh0cmFjdCBmaXJzdCBrZXl3b3JkLXZh
bHVlIHBhaXIgZnJvbSBzdHJpbmcgKHZhbHVlIHBhcnQgbWF5IGJlIG51bGwpLAorICoga2V5d29y
ZCBhbmQgdmFsdWUgYXJlIGFsbG9jYXRlZCBhbmQgbXVzdCBiZSBmcmVlIGJ5IGNhbGxlci4KKyAq
IFJldHVybiBwb2ludGVyIHRvIHJlbWFpbmRlciBvZiBzdHJpbmcsCisgKiByZXR1cm4gTlVMTCBp
ZiBub25lIGZvdW5kLgogICovCi1jaGFyICAgIEtleVN0cltTVFJTSVpFXTsKLWNoYXIgICAgVmFs
U3RyW1NUUlNJWkVdOwogI2lmIE5lZWRGdW5jdGlvblByb3RvdHlwZXMKIGNoYXIgKkdldEtleVN0
cihjaGFyICpzdHIsIEtleVdvcmQgKmt3ICkKICNlbHNlCkBAIC00MTg3LDM5ICs0MjUyLDQ2IEBA
CiBLZXlXb3JkICprdzsKICNlbmRpZgogewotICBjaGFyICAgICpzLCAqaywgKnYsIHQ7CisgIGNo
YXIgKnMsICpzdGFydDsKKyAgY2hhciBzYXZlX2NoYXIsIHF1b3RlX2NoYXI7CiAgIGlmICggIXN0
ciApCiAgICAgcmV0dXJuKCBOVUxMICk7CiAgIGZvciAocyA9IHN0cjsgKnMgPT0gJyAnOyBzKysp
CiAgICAgOyAgICAgICAgICAvKiBza2lwIG92ZXIgYmxhbmtzICovCiAgIGlmICgqcyA9PSAnXDAn
KQogICAgIHJldHVybiggTlVMTCApOwotICBmb3IgKGsgPSBLZXlTdHI7IC8qIGV4dHJhY3Qga2V5
d29yZCBwb3J0aW9uICovCi0gICAgICAgKnMgIT0gJyAnICYmICpzICE9ICdcMCcgJiYgKnMgIT0g
Jz0nOwotICAgICAgICprKysgPSAqcysrKQotICAgIDsKLSAgKmsgPSAnXDAnOwotICBrdy0+S2V5
ID0gS2V5U3RyOwotICBrdy0+VmFsID0gdiA9IE5VTEw7CisgIHN0YXJ0ID0gcysrOwkJCQkvKiBz
dGFydCBvZiBrZXl3b3JkICovCisgIHdoaWxlICggKnMgIT0gJyAnICYmICpzICE9ICdcMCcgJiYg
KnMgIT0gJz0nICkgIC8qIGxvY2F0ZSBlbmQgKi8KKyAgICBzKys7CisgIHNhdmVfY2hhciA9ICpz
OworICAqcyA9ICdcMCc7CisgIGt3LT5LZXkgPSB4c3RyZHVwKHN0YXJ0KTsKKyAga3ctPlZhbCA9
IE5VTEw7CiAgIGt3LT52dCA9IE5vbmU7Ci0gIGZvciAoIDsgKnMgPT0gJyAnOyBzKyspCi0gICAg
OyAgICAgICAgICAgIC8qIHNraXAgb3ZlciBibGFua3MgKi8KLSAgaWYgKCAqcyAhPSAnPScgKSAg
ICAgICAgIC8qIGxvb2sgZm9yICI9IiAqLworICBpZiAoIHNhdmVfY2hhciA9PSAnXDAnICkJCS8q
IHNob3J0Y3V0IHdoZW4gd2UncmUgYXQgdGhlIGVuZCAqLworICAgIHJldHVybiAocyk7CisgICpz
ID0gc2F2ZV9jaGFyOwkJCS8qIHJlc3RvcmUga2V5d29yZCBlbmQgY2hhciAqLworICB3aGlsZSAo
ICpzID09ICcgJyApIHMrKyA7CQkvKiBza2lwIG92ZXIgYmxhbmtzICovCisgIGlmICggKnMgIT0g
Jz0nICkJCQkvKiBubyAiPSIgbWVhbnMgbm8gdmFsdWUgKi8KICAgICByZXR1cm4oIHMgKTsKLSAg
Zm9yIChzKys7ICpzID09ICcgJzsgcysrKTsgICAgICAvKiBza2lwIG92ZXIgYmxhbmtzICovCi0g
IGlmICggKnMgPT0gJ1wnJyB8fCAqcyA9PSAnXCInICkgIC8qIGdldCBzdHJpbmcgZGVsaW1pdGVy
ICovCi0gICAgdCA9ICpzKys7CisgIGZvciAocysrOyAqcyA9PSAnICc7IHMrKykKKyAgICA7CQkJ
CQkvKiBza2lwIG92ZXIgYmxhbmtzICovCisgIGlmICggKnMgPT0gJ1wnJyB8fCAqcyA9PSAnXCIn
ICkJLyogZ2V0IHN0cmluZyBkZWxpbWl0ZXIgKi8KKyAgICBxdW90ZV9jaGFyID0gKnMrKzsKICAg
ZWxzZQotICAgIHQgPSAnICc7Ci0gIGZvciAodiA9IFZhbFN0cjsgLyogY29weSB2YWx1ZSBwb3J0
aW9uIHVwIHRvIGRlbGltICovCi0gICAgICAgKnMgIT0gdCAmJiAqcyAhPSAnXDAnOwotICAgICAg
ICp2KysgPSAqcysrKQotICAgIDsKLSAgaWYgKCB0ICE9ICcgJyAmJiAqcyA9PSB0ICkKLSAgICBz
Kys7Ci0gICp2ID0gJ1wwJzsKLSAga3ctPlZhbCA9IFZhbFN0cjsKKyAgICBxdW90ZV9jaGFyID0g
JyAnOworICBzdGFydCA9IHM7CQkJCS8qIG5vIGluY3JlbWVudCwgbWlnaHQgYmUgIiIgYXMgdmFs
dWUgKi8KKyAgd2hpbGUgKCAqcyAhPSBxdW90ZV9jaGFyICYmICpzICE9ICdcMCcgKQorICAgIHMr
KzsJCQkgIC8qIGxvY2F0ZSBlbmQgb2YgdmFsdWUgcG9ydGlvbiAqLworICBzYXZlX2NoYXIgPSAq
czsKKyAgKnMgPSAnXDAnOworICBrdy0+VmFsID0geHN0cmR1cChzdGFydCk7CiAgIGt3LT52dCA9
IFN0cmluZzsKKyAgaWYgKCBzYXZlX2NoYXIgIT0gJ1wwJyApIHsJCS8qIHNhdmVfY2hhciBpcyBu
b3cgcXVvdGVfY2hhciAqLworICAgICpzID0gc2F2ZV9jaGFyOworICAgIGlmICggcXVvdGVfY2hh
ciAhPSAnICcgKQkJLyogd2UgaGFkIHJlYWwgcXVvdGUgY2hhcnMgKi8KKyAgICAgIHMrKzsKKyAg
fQogICByZXR1cm4oIHMgKTsKIH0KIApAQCAtNDI4MSw3ICs0MzUzLDcgQEAKICNlbmRpZgogewog
ICBjaGFyICp4LCAqeTsKLSAgCisKICAgZm9yICh4ID0gYSwgeSA9IGI7ICphOyBhKyssIGIrKykK
ICAgICBpZiAoIHRvbG93ZXIoKmEpICE9IHRvbG93ZXIoKmIpICkKICAgICAgIHJldHVybiggX0ZB
TFNFICk7CkBAIC00NDY5LDEwICs0NTQxLDEwIEBACiAgICAgICAgKiAgIHByb2Nlc3MgZm9yIHNp
bXBsaWNpdHkgYWx3YXlzIGhvcml6b250YWxseQogICAgICAgICovCiAKLSAgICAgIC8qIAorICAg
ICAgLyoKICAgICAgICAgIGZwcmludGYoRVJSX1NUUkVBTSwibGFyZ2UgYm94OiB3PSVkLHg9JWQs
eT0lZFxuIiwoaW50KXl5LChpbnQpeHgsMCk7CiAgICAgICAgICAqLwotICAgICAgCisKICAgICAg
IGhvcl9vZmZzZXQgID0gSE9SX0hBTEYoMzApOwogICAgICAgTW92ZUhvcihob3Jfb2Zmc2V0KTsK
ICAgICAgIHZlcnRfb2Zmc2V0ID0gVkVSVF9IQUxGKDMwKTsKQEAgLTQ1NDcsNyArNDYxOSw3IEBA
CiAgICAgICB5eSArPSAobG9uZzQpcGdzaXpfZG90cyAtIChsb25nNClsYXN0X3J5OwogCiAgICAg
aWYgKCh5eT4wKSAmJiAoeHg+MCkpCi0gICAgICBFTUlUNCgiXDAzMypwLSVsZFlcMDMzKmMlbGRh
JWxkYlAiLCAKKyAgICAgIEVNSVQ0KCJcMDMzKnAtJWxkWVwwMzMqYyVsZGElbGRiUCIsCiAgICAg
ICAgICAgICAobG9uZyl5eSAtIDEsIChsb25nKXh4LCAobG9uZyl5eSk7CiAjZW5kaWYKICAgICBs
YXN0X3J4ID0gbGFzdF9yeSA9IFVOS05PV047ICAgICAgIC8qIG5leHQgdGltZSBmdWxsIHBvc2l0
aW9uaW5nICovCkBAIC00NzA4LDcgKzQ3ODAsNyBAQAogICAgICAgaWYgKChmaWQgPSBwaXhlbF9m
aWxlc1tsZWFzdF91c2VkXS5waXhlbF9maWxlX2lkKSAhPSBOT19GSUxFKSB7CiAgICAgICAgIC8q
IG1hcmsgZmlsZSBhcyBiZWluZyBjbG9zZWQgaW4gdGhlIGVudHJ5ICovCiAgICAgICAgIGZwID0g
aGZvbnRwdHI7Ci0gICAgICAgIHdoaWxlIChmcCAhPSBOVUxMICYmIGZwLT5mb250X2ZpbGVfaWQg
IT0gZmlkKSAKKyAgICAgICAgd2hpbGUgKGZwICE9IE5VTEwgJiYgZnAtPmZvbnRfZmlsZV9pZCAh
PSBmaWQpCiAgICAgICAgICAgZnAgPSBmcC0+bmV4dDsKICAgICAgICAgaWYgKGZwID09IE5VTEwp
CiAgICAgICAgICAgRmF0YWwoIk9wZW4gZmlsZSAleCBub3QgZm91bmQgaW4gZm9udCBlbnRyeSBs
aXN0LlxuIiwgZmlkKTsKQEAgLTQ3NjMsOSArNDgzNSw5IEBACiAgICAgICB3aGlsZSAoKGZwICE9
IE5VTEwpICYmIChmcC0+Zm9udF9maWxlX2lkICE9IGYpKQogICAgICAgICBmcCA9IGZwLT5uZXh0
OwogCi0gICAgICBpZiAoZnAgPT0gTlVMTCkgCisgICAgICBpZiAoZnAgPT0gTlVMTCkKICAgICAg
ICAgRmF0YWwoIk9wZW4gZmlsZSAleCBub3QgZm91bmQgaW4gZm9udCBlbnRyeSBsaXN0LlxuIixm
KTsKLSAgICAgIGVsc2UgCisgICAgICBlbHNlCiAgICAgICAgIGZwLT5mb250X2ZpbGVfaWQgPSBG
UE5VTEw7CiAgICAgfQogICAgIEJDTE9TRShmKTsKQEAgLTQ4MTksMTMgKzQ4OTEsMTQgQEAKICAg
ICAgdGhlIHJlc2lkZW50IGZvbnRzLiAgKi8KICAgaWYgKHRmbV9yZWFkX2luZm8oZm9udHB0ci0+
biwgJnRmbV9pbmZvKQogICAgICAgJiYgdGZtX2luZm8uZmFtaWx5WzBdCi0gICAgICAmJiBzdHJj
bXAoKGNoYXIgKil0Zm1faW5mby5mYW1pbHksICJIUEFVVE9URk0iKSA9PSAwKSB7CisgICAgICAm
JiBFUSgoY2hhciAqKXRmbV9pbmZvLmZhbWlseSwgIkhQQVVUT1RGTSIpKSB7CiAgICAgdW5zaWdu
ZWQgaTsKICAgICBkb3VibGUgZmFjdG9yID0gZm9udHB0ci0+cyAvIChkb3VibGUpMHgxMDAwMDA7
CiAKICAgICByZXNpZGVudF9jb3VudCsrOwogICAgIGZvbnRwdHItPnJlc2lkZW50X3AgPSBfVFJV
RTsKLSAgICBzdHJjcHkoZm9udHB0ci0+c3ltYm9sX3NldCwgKGNoYXIgKil0Zm1faW5mby5jb2Rp
bmdfc2NoZW1lKTsKKyAgICBzdHJuY3B5KGZvbnRwdHItPnN5bWJvbF9zZXQsIChjaGFyICopdGZt
X2luZm8uY29kaW5nX3NjaGVtZSwgMzkpOworICAgIGZvbnRwdHItPnN5bWJvbF9zZXRbMzldID0g
J1wwJzsKICAgICBmb250cHRyLT5yZXNpZCA9IHRmbV9pbmZvLnR5cGVmYWNlX2lkOwogICAgIGZv
bnRwdHItPnNwYWNpbmcgPSB0Zm1faW5mby5zcGFjaW5nOwogICAgIGZvbnRwdHItPnN0eWxlID0g
dGZtX2luZm8uc3R5bGU7CkBAIC00ODc4LDcgKzQ5NTEsNyBAQAogICAgIGZvbnRwdHItPnJlc2lk
ZW50X3AgPSBfRkFMU0U7CiAKICAgICBpZiAodGZtX2luZm8uZmFtaWx5WzBdCi0gICAgICAgICYm
IHN0cmNtcCgoY2hhciAqKXRmbV9pbmZvLmZhbWlseSwgIlVOU1BFQ0lGSUVEIikgPT0gMCkgewor
ICAgICAgICAmJiBFUSgoY2hhciAqKXRmbV9pbmZvLmZhbWlseSwgIlVOU1BFQ0lGSUVEIikpIHsK
ICAgICAgIFdhcm5pbmcoImZvbnQgZmFtaWx5IGZvciAlcyBpcyBVTlNQRUNJRklFRDsgbmVlZCB0
byBydW4gZHZpY29weT8iLAogICAgICAgICAgICAgICBmb250cHRyLT5uKTsKICAgICAgIGZvbnRw
dHItPmZvbnRfZmlsZV9pZCA9IE5PX0ZJTEU7CkBAIC01MDA1LDcgKzUwNzgsNyBAQAogICBHZXRC
eXRlcyhkdmlmcCwgdGZvbnRwdHItPm4sIHRmb250cHRyLT5hICsgdGZvbnRwdHItPmwpOwogICB0
Zm9udHB0ci0+blt0Zm9udHB0ci0+YSt0Zm9udHB0ci0+bF0gPSAnXDAnOwogCi0gIHRmb250cHRy
LT5mb250X21hZyA9IAorICB0Zm9udHB0ci0+Zm9udF9tYWcgPQogICAgIChsb25nNCkoKEFjdHVh
bEZhY3RvcigobG9uZzQpKDEwMDAuMCp0Zm9udHB0ci0+cy8oZG91YmxlKXRmb250cHRyLT5kKzAu
NSkpCiAgICAgICAgICAgICAgKiBBY3R1YWxGYWN0b3IobWFnKQogI2lmZGVmIFVTRVBYTApAQCAt
NTAzMSwxMCArNTEwNCw5IEBACiAgIGlmICh0Zm9udHB0ci0+cmVzaWRlbnRfcCkKICAgICByZXR1
cm47CiAKLSAgaWYgKCEocmVzaWRlbnRfZm9udF9sb2NhdGVkKSkgeworICBpZiAoIShyZXNpZGVu
dF9mb250X2xvY2F0ZWQpKQogI2VuZGlmCiAKLSNpZmRlZiBLUEFUSFNFQQogICAgIHsKICAgICAg
IGtwc2VfZ2x5cGhfZmlsZV90eXBlIGZvbnRfcmV0OwogICAgICAgY2hhciAqbmFtZTsKQEAgLTUw
NDIsMTQgKzUxMTQsMTQgQEAKICAgICAgICAgPSBrcHNlX21hZ3N0ZXBfZml4ICgodW5zaWduZWQp
ICh0Zm9udHB0ci0+Zm9udF9tYWcgLyA1LjAgKyAuNSksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUkVTT0xVVElPTiwgTlVMTCk7CiAgICAgICB0Zm9udHB0ci0+Zm9udF9tYWcgPSBkcGkg
KiA1OyAvKiBzYXZlIGNvcnJlY3QgZHBpICovCi0gICAgICAKKwogICAgICAgbmFtZSA9IGtwc2Vf
ZmluZF9wayAodGZvbnRwdHItPm4sIGRwaSwgJmZvbnRfcmV0KTsKICAgICAgIGlmIChuYW1lKQog
ICAgICAgICB7CiAgICAgICAgICAgZm9udF9mb3VuZCA9IF9UUlVFOwotICAgICAgICAgIHN0cmNw
eSAodGZvbnRwdHItPm5hbWUsIG5hbWUpOwotICAgICAgICAgIGZyZWUgKG5hbWUpOwotICAgICAg
ICAgIAorICAgICAgICAgIHRmb250cHRyLT5uYW1lID0gbmFtZTsKKyAgICAgICAgICBhbGxvY2F0
ZWRfc3RvcmFnZSArPSBzdHJsZW4obmFtZSkrMTsKKwogICAgICAgICAgIGlmICghRklMRVNUUkNB
U0VFUSAodGZvbnRwdHItPm4sIGZvbnRfcmV0Lm5hbWUpKSB7CiAgICAgICAgICAgICAgIGZwcmlu
dGYgKHN0ZGVyciwKICAgICAgICAgICAgICAgICAgICAgICAgImR2aWxqOiBGb250ICVzIG5vdCBm
b3VuZCwgdXNpbmcgJXMgYXQgJWQgaW5zdGVhZC5cbiIsCkBAIC01MDcxLDI5ICs1MTQzLDYgQEAK
ICAgICAgICAgICAgIHRmb250cHRyLT5uLCBkcGkpOwogICAgICAgICB9CiAgICAgfQotI2Vsc2Ug
Lyogbm90IEtQQVRIU0VBICovCi0gICAgaWYgKCEoZmluZGZpbGUoUFhMcGF0aCwKLSAgICAgICAg
ICAgICAgICAgICB0Zm9udHB0ci0+biwKLSAgICAgICAgICAgICAgICAgICB0Zm9udHB0ci0+Zm9u
dF9tYWcsCi0gICAgICAgICAgICAgICAgICAgdGZvbnRwdHItPm5hbWUsCi0gICAgICAgICAgICAg
ICAgICAgX0ZBTFNFLAotICAgICAgICAgICAgICAgICAgIDApKSkgewotICAgICAgV2FybmluZyh0
Zm9udHB0ci0+bmFtZSk7IC8qIGNvbnRhaW5zIGVycm9yIG1lc3NzYWdlICovCi0gICAgICB0Zm9u
dHB0ci0+Zm9udF9maWxlX2lkID0gTk9fRklMRTsKLSNpZmRlZiBfX3Jpc2NvcwotICAgICAgTWFr
ZU1ldGFmb250RmlsZShQWExwYXRoLCB0Zm9udHB0ci0+biwgdGZvbnRwdHItPmZvbnRfbWFnKTsK
LSNlbmRpZgotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgIGZvbnRfZm91bmQgPSBfVFJVRTsKLSAg
ICAgIGlmIChHX3ZlcmJvc2UpCi0gICAgICAgIGZwcmludGYoRVJSX1NUUkVBTSwiJWQ6IHVzaW5n
IGZvbnQgPCVzPlxuIiwgcGx1c2lkLCB0Zm9udHB0ci0+bmFtZSk7Ci0gICAgfQotI2VuZGlmIC8q
IG5vdCBLUEFUSFNFQSAqLwotCi0jaWZkZWYgTEpfUkVTSURFTlRfRk9OVFMKLSAgfQotI2VuZGlm
CiAKICAgdGZvbnRwdHItPnBsdXNpZCA9IHBsdXNpZDsKICAgcGx1c2lkKys7CkBAIC01MTA3LDcg
KzUxNTYsNyBAQAogICAgICAgICAgIEhBTkRMRV9NQVhfRk9OVFMpOwogI2VuZGlmCiAgIGlmICh0
Zm9udHB0ciAhPSBwZm9udHB0cikgewotICAgIGlmIChmb250X2ZvdW5kKSAKKyAgICBpZiAoZm9u
dF9mb3VuZCkKICAgICAgIE9wZW5Gb250RmlsZSgpOwogICAgIGVsc2UKICAgICAgIHB4bGZwID0g
Tk9fRklMRTsKQEAgLTUxNDYsNyArNTE5NSw3IEBACiAgICAgaWYgKHQgPT0gUEtfUFJFKSB7CiAg
ICAgICB1bnNpZ25lZCBjaGFyICAgdGVtcF9ieXRlOwogICAgICAgdGVtcF9ieXRlID0gKHVuc2ln
bmVkIGNoYXIpIE5vU2lnbkV4dGVuZChweGxmcCwgMSk7Ci0gICAgICBpZiAodGVtcF9ieXRlICE9
IFBLX0lEKSAKKyAgICAgIGlmICh0ZW1wX2J5dGUgIT0gUEtfSUQpCiAgICAgICAgIEZhdGFsKCAi
V3JvbmcgVmVyc2lvbiBvZiBwayBmaWxlISAgKCVkIHNob3VsZCBiZSA4OSlcbiIsCiAgICAgICAg
ICAgICAgICAoaW50KXRlbXBfYnl0ZSk7CiAgICAgICBlbHNlCkBAIC01MTYzLDcgKzUyMTIsNyBA
QAogCiAgICAgdGZvbnRwdHItPm1hZ25pZmljYXRpb24gPSBOb1NpZ25FeHRlbmQocHhsZnAsIDQp
OwogICAgIHRmb250cHRyLT5kZXNpZ25zaXplICAgID0gTm9TaWduRXh0ZW5kKHB4bGZwLCA0KTsK
LSAgICAgICAgCisKICAgICBpZiAodGZvbnRwdHItPmlkID09IGlkMTAwMSkKICAgICAgIEZTRUVL
KHB4bGZwLCAobG9uZykoTm9TaWduRXh0ZW5kKHB4bGZwLCA0KSAqIDQpLCBTRUVLX1NFVCk7CiAg
ICAgZWxzZQpAQCAtNTIzMiw3ICs1MjgxLDcgQEAKICAgICBocHBwID0gTm9TaWduRXh0ZW5kKHB4
bGZwLCA0KTsKICAgICB2cHBwID0gTm9TaWduRXh0ZW5kKHB4bGZwLCA0KTsKICAgICBpZiAoaHBw
cCAhPSB2cHBwKQotICAgICAgV2FybmluZygiYXNwZWN0IHJhdGlvIGlzICVsZDolbGQgKHNob3Vs
ZCBiZSAxOjEpISIsIAorICAgICAgV2FybmluZygiYXNwZWN0IHJhdGlvIGlzICVsZDolbGQgKHNo
b3VsZCBiZSAxOjEpISIsCiAgICAgICAgICAgICAgIChsb25nKWhwcHAsIChsb25nKXZwcHApOwog
ICAgIHRmb250cHRyLT5tYWduaWZpY2F0aW9uID0gKGxvbmc0KShocHBwICogNzIuMjcgKiA1IC8g
NjU1MzZsICsgMC41KTsKIApAQCAtNTUxNSw3ICs1NTY0LDcgQEAKIHsKICAgaW50ICAgICBhLCBs
OwogICBjaGFyICAgIG5bU1RSU0laRV07Ci0gIAorCiAgICh2b2lkKSBOb1NpZ25FeHRlbmQoZHZp
ZnAsIDQpOwogICAodm9pZCkgTm9TaWduRXh0ZW5kKGR2aWZwLCA0KTsKICAgKHZvaWQpIE5vU2ln
bkV4dGVuZChkdmlmcCwgNCk7CkBAIC01NTI0LDcgKzU1NzMsNyBAQAogICBHZXRCeXRlcyhkdmlm
cCwgbiwgYSArIGwpOwogfQogCi0gICAgCisKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
ZW5kIGR2aWZvbnQuYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtNTU5
OCw3ICs1NjQ3LDcgQEAKICNlbmRpZgogICBpZiAoIEdfbm93YXJuIHx8IEdfcXVpZXQgKQogICAg
IHJldHVybjsKLSAgCisKICAgZnByaW50ZihFUlJfU1RSRUFNLCAiJXM6IHdhcm5pbmc6ICIsIEdf
cHJvZ25hbWUpOwogICB2ZnByaW50ZihFUlJfU1RSRUFNLCBmbXQsIGFyZ3MpOwogICBmcHJpbnRm
KEVSUl9TVFJFQU0sICJcbiIpOwpJbmRleDogdGV4bGl2ZS1iaW4tMjAwNy9idWlsZC9zb3VyY2Uv
dGV4ay9kdmlsamsvZHZpMnh4LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gdGV4bGl2ZS1iaW4tMjAwNy5vcmln
L2J1aWxkL3NvdXJjZS90ZXhrL2R2aWxqay9kdmkyeHguaAkyMDA3LTA3LTAzIDEzOjQ0OjUxLjAw
MDAwMDAwMCArMDIwMAorKysgdGV4bGl2ZS1iaW4tMjAwNy9idWlsZC9zb3VyY2UvdGV4ay9kdmls
amsvZHZpMnh4LmgJMjAwNy0wNy0wMyAxMzo0NToxMC4wMDAwMDAwMDAgKzAyMDAKQEAgLTEwLDgg
KzEwLDggQEAKIAogI2lmZGVmIEtQQVRIU0VBCiAjaW5jbHVkZSA8a3BhdGhzZWEvY29uZmlnLmg+
CisjaW5jbHVkZSA8a3BhdGhzZWEvYy1zdGQuaD4KICNpbmNsdWRlIDxrcGF0aHNlYS9jLWxpbWl0
cy5oPgotI2luY2x1ZGUgPGtwYXRoc2VhL2MtbWVtc3RyLmg+CiAjaW5jbHVkZSA8a3BhdGhzZWEv
bWFnc3RlcC5oPgogI2luY2x1ZGUgPGtwYXRoc2VhL3Byb2dpbml0Lmg+CiAjaW5jbHVkZSA8a3Bh
dGhzZWEvcHJvZ25hbWUuaD4KQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxzdHJpbmcuaD4K
ICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHVuaXN0
ZC5oPgogI2lmZGVmICB1bml4CiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjZW5kaWYKQEAgLTQxLDkg
KzQyLDYgQEAKICNpZmRlZiBNU0M1CiAjaW5jbHVkZSA8ZG9zLmg+ICAgICAvKiBvbmx5IGZvciBi
aW5hcnlvcGVuIG9uIGRldmljZSAgKi8KICNlbmRpZgotI2lmIGRlZmluZWQgKHVuaXgpICYmICFk
ZWZpbmVkIChLUEFUSFNFQSkKLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbmRpZgogCiAKICNpbmNs
dWRlICJjb25maWcuaCIKQEAgLTExNiw2ICsxMTQsNyBAQAogI2RlZmluZSAgSFVHRV9TSVpFICAo
dW5zaWduZWQgY2hhcikgMgogI2RlZmluZSAgSFVHRV9DSEFSX1BBVFRFUk4gMzI3NjdsCiAjZGVm
aW5lICBCWVRFU19QRVJfUElYRUxfTElORSA1MDAgICAgLyogbWF4IG51bWJlciBvZiBieXRlcyBw
ZXIgcGl4ZWwgbGluZSAqLworI2RlZmluZSAgTUFYX1NQRUNJQUxfREVGUE9JTlRTIDgwICAgIC8q
IG1heCBudW1iZXIgb2YgZGVmcG9pbnQgc3BlY2lhbHMgKi8KIAogCiAjZGVmaW5lIFBLX1BPU1Qg
MjQ1CkBAIC0yODEsNyArMjgwLDE0IEBACiAjZGVmaW5lIFZpc0NoYXIoYykgKHVuc2lnbmVkIGNo
YXIpKGMpCiAjZW5kaWYKIAotI2RlZmluZSBHZXRCeXRlcyhmcCxidWYsbikgcmVhZF9tdWx0aShi
dWYsMSxuLGZwKSAvKiB1c2VkIHRvIGJlIGEgZnVuY3Rpb24gKi8KKy8qIFVzZWQgdG8gYmUgYSBm
dW5jdGlvbi4gYnVmIGlzIGFsd2F5cyBhbiBhcnJheSwgbmV2ZXIgYSBwb2ludGVyLgorICAgV2l0
aG91dCB0aGF0IGludmFyaWFudCwgd2Ugd291bGQgaGF2ZSB0byBpbnRyb2R1Y2UgZnVsbCBkeW5h
bWljCisgICBtZW1vcnkgbWFuYWdlbWVudCBpbiB0aGlzIGRyaXZlciAtLSBwcm9iYWJseSBpdCB3
b3VsZCBiZSBlYXNpZXIgdG8KKyAgIHdyaXRlIGEgbmV3IG9uZS4gWzI3IEp1biAwNyAtanNdICov
CisjZGVmaW5lIEdldEJ5dGVzKGZwLGJ1ZixuKSBcCisgICAgKCBzaXplb2YoYnVmKSAhPSBzaXpl
b2Yodm9pZCAqKSAmJiBzaXplb2YoYnVmKSA+IG4gPyBcCisgICAgICAgIHJlYWRfbXVsdGkoYnVm
LCAxLCBuLCBmcCkgXAorICAgICAgOiBGYXRhbCgiVHJ5IHRvIHJlYWQgJWQgYnl0ZXMgaW4gYW4g
YXJyYXkgb2Ygc2l6ZSAlZCIsIG4sIHNpemVvZihidWYpKSApCiAKIAogLyoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov
CkBAIC0zMDcsNiArMzEzLDcgQEAKIGludCAgICAgc3NjYW5mKCk7CiBpbnQgICAgIHN0cmNtcCgp
OwogY2hhciAgICpzdHJjcHkoKTsKK2NoYXIgICAqc3RybmNweSgpOwogIyAgIGlmZGVmIE1TQzUK
IHVuc2lnbmVkIGludCBzdHJsZW4oKTsKICMgICBlbmRpZgpAQCAtMzkzLDcgKzQwMCw3IEBACiAg
ICAgY2hhciBuW1NUUlNJWkVdOyAgICAgICAgICAvKiBGTlRfREVGIGNvbW1hbmQgcGFyYW1ldGVy
cyAgICAgICAgICAgICAgICAqLwogICAgIGxvbmc0ICAgIGZvbnRfbWFnOyAgICAgICAgIC8qIGNv
bXB1dGVkIGZyb20gRk5UX0RFRiBzIGFuZCBkIHBhcmFtZXRlcnMgICovCiAgICAgLypjaGFyIHBz
bmFtZVtTVFJTSVpFXTsqLyAvKiBQb3N0U2NyaXB0IG5hbWUgb2YgdGhlIGZvbnQgICAgICAgICAg
ICAgICAqLwotICAgIGNoYXIgICAgbmFtZVtTVFJTSVpFXTsgICAgLyogZnVsbCBuYW1lIG9mIFBY
TCBmaWxlICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBjaGFyICAgICpuYW1lOwkgICAgICAg
LyogZnVsbCBuYW1lIG9mIFBYTCBmaWxlICAgICAgICAgICAgICAgICAgICAgKi8KICAgICBGSUxF
UFRSIGZvbnRfZmlsZV9pZDsgICAgICAvKiBmaWxlIGlkZW50aWZpZXIgKE5PX0ZJTEUgaWYgbm9u
ZSkgICAgICAgICAqLwogI2lmZGVmIFVTRVBYTAogICAgIGxvbmc0ICAgIG1hZ25pZmljYXRpb247
ICAgIC8qIG1hZ25pZmljYXRpb24gcmVhZCBmcm9tIFBYTCBmaWxlICAgICAgICAgICovCkBAIC00
ODcsOCArNDk0LDggQEAKIGxvbmc0ICAgTm9TaWduRXh0ZW5kIERWSVBST1RPKChGSUxFUFRSLCBp
bnQpKTsKIHZvaWQgICAgT3BlbkZvbnRGaWxlIERWSVBST1RPKCh2b2lkKSk7CiBsb25nNCAgIFBp
eFJvdW5kIERWSVBST1RPKChsb25nNCwgbG9uZzQpKTsKLXZvaWQgICAgUGtSYXN0ZXIgRFZJUFJP
VE8oKHN0cnVjdCBjaGFyX2VudHJ5ICosIGludCkpOyAKLXZvaWQgICAgUmFzdGVyTGluZSBEVklQ
Uk9UTygoc3RydWN0IGNoYXJfZW50cnkgKiwgdW5zaWduZWQgaW50LCAKK3ZvaWQgICAgUGtSYXN0
ZXIgRFZJUFJPVE8oKHN0cnVjdCBjaGFyX2VudHJ5ICosIGludCkpOwordm9pZCAgICBSYXN0ZXJM
aW5lIERWSVBST1RPKChzdHJ1Y3QgY2hhcl9lbnRyeSAqLCB1bnNpZ25lZCBpbnQsCiAJCQkgICAg
IHVuc2lnbmVkIGludCwgdW5zaWduZWQgY2hhciAqKSk7CiB2b2lkICAgIFJhc3RlckNoYXIgRFZJ
UFJPVE8oKHN0cnVjdCBjaGFyX2VudHJ5ICopKTsKIHZvaWQgICAgUmVhZEZvbnREZWYgRFZJUFJP
VE8oKGxvbmc0KSk7CkBAIC01MzQsMTEgKzU0MSwxMiBAQAogI2lmbmRlZiBLUEFUSFNFQQogY2hh
ciAgICpQWExwYXRoID0gRk9OVEFSRUE7CiAjZW5kaWYKLWNoYXIgICAgR19wcm9nbmFtZVtTVFJT
SVpFXTsgICAgIC8qIHByb2dyYW0gbmFtZSAgICAgICAgICAgICAgICAgICAgICAgICovCi1jaGFy
ICAgIGZpbGVuYW1lW1NUUlNJWkVdOyAgICAgICAvKiBEVkkgZmlsZSBuYW1lICAgICAgICAgICAg
ICAgICAgICAgICAqLwotY2hhciAgICByb290bmFtZVtTVFJTSVpFXTsgICAgICAgLyogRFZJIGZp
bGVuYW1lIHdpdGhvdXQgZXh0ZW5zaW9uICAgICAgKi8KK2NoYXIgICAqR19wcm9nbmFtZTsJCSAv
KiBwcm9ncmFtIG5hbWUgICAgICAgICAgICAgICAgICAgICAgICAqLworY2hhciAgICpmaWxlbmFt
ZTsJICAgICAgICAgLyogRFZJIGZpbGUgbmFtZSAgICAgICAgICAgICAgICAgICAgICAgKi8KK2No
YXIgICAqcm9vdG5hbWU7CQkgLyogRFZJIGZpbGVuYW1lIHdpdGhvdXQgZXh0ZW5zaW9uICAgICAg
Ki8KIGNoYXIgICAqSGVhZGVyRmlsZU5hbWUgPSAiIjsgICAgIC8qIGZpbGUgbmFtZSAmIHBhdGgg
b2YgSGVhZGVyZmlsZSAgICAgICovCiBjaGFyICAgKkVtaXRGaWxlTmFtZSA9ICIiOyAgICAgICAv
KiBmaWxlIG5hbWUgJiBwYXRoIGZvciBvdXRwdXQgICAgICAgICAqLworY2hhciAgICB0bXBfZGly
W1NUUlNJWkVdID0gIiI7CSAvKiB0ZW1wb3JhcnkgZGlyZWN0b3J5IGZvciBhdXhpbGxpYXJ5IGZp
bGVzICovCiAjaWZkZWYgSUJNMzgxMgogYm9vbCAgICBGaXJzdEFsdGVybmF0ZSA9IF9GQUxTRTsg
LyogZmlyc3QgcGFnZSBmcm9tIGFsdGVybmF0ZSBjYXNldHRlID8gICAqLwogI2VuZGlmCg==
</data>        

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135423</attachid>
            <date>2007-11-07 13:57 0000</date>
            <desc>texlive-core-2007-dviljk-security-fixes.patch</desc>
            <filename>texlive-core-2007-dviljk-security-fixes.patch</filename>
            <type>text/plain</type>
            <data encoding="base64">SW5kZXg6IHdvcmsvdGV4ay9kdmlsamsvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHdvcmsub3Jp
Zy90ZXhrL2R2aWxqay9DaGFuZ2VMb2cKKysrIHdvcmsvdGV4ay9kdmlsamsvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNDIgQEAKKzIwMDctMDctMDIgIEpvYWNoaW0gU2Nocm9kICA8anNjaHJvZEBhY20u
b3JnPgorCisJKiBkdmkyeHguYyAoRG9TcGVjaWFsKTogU2VjdXJpdHkgaXNzdWU6IHVzYWdlIG9m
IHRtcG5hbSgpIGNhdXNlZAorCXRlbXBmaWxlIHJhY2UgY29uZGl0aW9uLiBJIHVzZSBta2R0ZW1w
KCkgaWYgaXQncyBhdmFpbGFibGUgYW5kCisJZmFsbCBiYWNrIHRvIHRtcG5hbS4KKworCVNwZWNp
YWwgcGFyc2luZyBvZiBpbmNsdWRlIGZpbGVzIHdhcyBpbmNvbnNpc3RlbnQsIHVuaWZ5IGl0LiBU
aGUKKwljdXJyZW50IHBhcnNpbmcgY29kZSBzdGlsbCBhbGxvd3MgbG90cyBvZiBub24tc2Vuc2lj
YWwgc3BlY2lhbAorCWNvbW1hbmRzLCBidXQgYXQgbGVhc3QgaXQgZG9lc24ndCBhY2Nlc3MgdW5y
ZWxhdGVkIHZhcmlhYmxlcyBhbnkKKwltb3JlLgorCisyMDA3LTA2LTI4ICBKb2FjaGltIFNjaHJv
ZCAgPGpzY2hyb2RAYWNtLm9yZz4KKworCSogZHZpMnh4LmM6IEZpeGVkIGEgd2hvbGUgYnVuY2gg
b2YgYnVmZmVyIG92ZXJmbG93czogVGhlIHByb2dyYW0KKwlkaWQgbm90IGNoZWNrIG1lbW9yeSBi
b3VuZHMgZm9yIGFueSBzdHJpbmcgb3BlcmF0aW9uLiBBbGwgcGxhY2VzCisJd2hlcmUgc3RyaW5n
cyBhcmUgY29waWVkIHdpdGggc3RyY3B5IGFyZSByZXBsYWNlZCBieSBkeW5hbWljYWxseQorCWFs
bG9jYXRlZCBzdHJpbmdzICh3aXRoIHhzdHJkdXAgZnJvbSBrcGF0aHNlYSkgb3IgYm91bmRlZCBz
dHJpbmcKKwlvcGVyYXRpb25zLiBGaXhlZCBhbHNvIG1hbnVhbCBzdHJpbmcgY29weSBvcGVyYXRp
b25zIG9uIHNwZWNpYWwKKwlzdHJpbmdzLiBGaXhlZCBhcnJheSBidWZmZXIgb3ZlcmZsb3cgaW4g
ZGVmcG9pbnQgYW5kIGZpbGwgc3BlY2lhbAorCW9wZXJhdGlvbnMuCisJKERvU3BlY2lhbCk6IENh
bGwgb2YgZ2hvc3RzY3JpcHQgZm9yIHBzZmlsZSBzcGVjaWFsIGhhZCBhbHNvIGEKKwlwb3RlbnRp
YWwgYnVmZmVyIG92ZXJmbG93IGNhdXNlZCBieSB1bmNoZWNrZWQgdXNhZ2Ugb2Ygc3ByaW50Zi4K
KwlGaXggY29yZSBkdW1wOiBDaGVjayBpZiBhbGwgcmVxdWlyZWQgcGFyYW1ldGVycyBvZiBwc2Zp
bGUgc3BlY2lhbAorCWFyZSBwYXNzZWQuCisKKwlCdW1wZWQgdmVyc2lvbiBudW1iZXIgdXAgdG8g
Mi42cDMuCisKKwkqIGR2aTJ4eC5oOiBTb21lIGZpeGVkIHNpemVkIHN0cmluZyBhcnJheXMgYXJl
IHBvaW50ZXJzIG5vdywgdGhleQorCWdldCBkeW5hbWljYWxseSBhbGxvY2F0ZWQuCisJKEdldEJ5
dGVzKTogQW5vdGhlciBidWZmZXIgb3ZlcmZsb3c6IENoZWNrIHRoYXQgdGhlIGJ1ZmZlciBzaXpl
IGlzCisJc3VmZmljaWVudCB0byBzdG9yZSB0aGUgcmVhZCBieXRlcy4gVGhhdCByZWxpZXMgb24g
dGhlIGludmFyaWFudAorCXRoYXQgdGhlIEdldEJ5dGVzIG1hY3JvIGlzIGFsd2F5cyBjYWxsZWQg
d2l0aCBhbiBhcnJheSBhcyBhcmd1bWVudAorCWFuZCBub3Qgd2l0aCBhIHBvaW50ZXIuCisKKwkq
IGNvbmZpZy5oOiBUaHJvdyBhbiBlcnJvciBpZiBrcGF0aHNlYSBpcyBub3QgdXNlZC4gZHZpMnh4
LmMKKwloYWQgcHJldmlvdXNseSBhbHJlYWR5IGtwYXRoc2VhIGRlcGVuZGVuY2llcyB3aXRob3V0
IHByb3RlY3RpbmcKKwl0aGVtIHdpdGggI2lmIEtQQVRIU0VBLiBXZSBnbyB0aGF0IHJvYWQgZnVy
dGhlciBzaW5jZSB1cHN0cmVhbQorCWRvZXMgbm90IGV4aXN0IGFueSBtb3JlLgorCiAyMDA2LTA1
LTI5ICBLYXJsIEJlcnJ5ICA8a2FybEB0dWcub3JnPgogCiAJKiBNYWtlZmlsZS5pbiAoaW5zdGFs
bC1leGVjKTogY2QgJChiaW5kaXIpIGluIGNhc2Ugd2UgYXJlIGRvaW5nCkluZGV4OiB3b3JrL3Rl
eGsvZHZpbGprL2MtYXV0by5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB3b3JrLm9yaWcvdGV4ay9kdmlsamsv
Yy1hdXRvLmluCisrKyB3b3JrL3RleGsvZHZpbGprL2MtYXV0by5pbgpAQCAtMSw5ICsxLDIzIEBA
Ci0vKiBjLWF1dG8uaW4uICBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBmcm9tIGNvbmZpZ3VyZS5p
biBieSBhdXRvaGVhZGVyLiAgKi8KKy8qIGMtYXV0by5pbi4gIEdlbmVyYXRlZCBmcm9tIGNvbmZp
Z3VyZS5pbiBieSBhdXRvaGVhZGVyLiAgKi8KKy8qIGFjY29uZmlnLmggLS0gdXNlZCBieSBhdXRv
aGVhZGVyIHdoZW4gZ2VuZXJhdGluZyBjLWF1dG8uaW4uCiAKLS8qIERlZmluZSBpZiB0eXBlIGNo
YXIgaXMgdW5zaWduZWQgYW5kIHlvdSBhcmUgbm90IHVzaW5nIGdjYy4gICovCi0jaWZuZGVmIF9f
Q0hBUl9VTlNJR05FRF9fCi0jdW5kZWYgX19DSEFSX1VOU0lHTkVEX18KLSNlbmRpZgorICAgSWYg
eW91J3JlIHRoaW5raW5nIG9mIGVkaXRpbmcgYWNjb25maWcuaCB0byBmaXggYSBjb25maWd1cmF0
aW9uCisgICBwcm9ibGVtLCBkb24ndC4gRWRpdCB0aGUgYy1hdXRvLmggZmlsZSBjcmVhdGVkIGJ5
IGNvbmZpZ3VyZSwKKyAgIGluc3RlYWQuICBFdmVuIGJldHRlciwgZml4IGNvbmZpZ3VyZSB0byBn
aXZlIHRoZSByaWdodCBhbnN3ZXIuICAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0
aGUgYG1rZHRlbXAnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfTUtEVEVNUAorCisvKiBEZWZp
bmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHJtZGlyJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZF
X1JNRElSCiAKLS8qIFRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gYSBsb25nLiAgKi8KKy8qIERlZmlu
ZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdW5saW5rJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZF
X1VOTElOSworCisvKiBUaGUgc2l6ZSBvZiBhIGBsb25nJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9m
LiAqLwogI3VuZGVmIFNJWkVPRl9MT05HCisKKy8qIERlZmluZSB0byAxIGlmIHR5cGUgYGNoYXIn
IGlzIHVuc2lnbmVkIGFuZCB5b3UgYXJlIG5vdCB1c2luZyBnY2MuICAqLworI2lmbmRlZiBfX0NI
QVJfVU5TSUdORURfXworIyB1bmRlZiBfX0NIQVJfVU5TSUdORURfXworI2VuZGlmCkluZGV4OiB3
b3JrL3RleGsvZHZpbGprL2NvbmZpZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHdvcmsub3JpZy90ZXhrL2R2
aWxqay9jb25maWcuaAorKysgd29yay90ZXhrL2R2aWxqay9jb25maWcuaApAQCAtMjE2LDEyICsy
MTYsNyBAQCB0eXBlZGVmIFNDSEFSX1RZUEUgc2lnbmVkX2NoYXI7CiAjZW5kaWYKIAogI2lmbmRl
ZiBLUEFUSFNFQQotZXh0ZXJuIGJvb2wgZmluZGZpbGUoCi0jaWYgTmVlZEZ1bmN0aW9uUHJvdG90
eXBlcwotY2hhciBwYXRoW10sIGNoYXIgbltdLCBsb25nNCBmb250bWFnLCBjaGFyIG5hbWVbXSwg
Ci0JICAgICAgYm9vbCB0Zm0sIGludCBsZXZlbAotI2VuZGlmCi0gICAgKTsKKyNlcnJvciAiV291
bGQgbmVlZCBjaGFuZ2VkIGZpbmRmaWxlLCBkdmlsamsgaGFzIGNoYW5nZWQgYWxsb2NhdGlvbiBz
ZW1hbnRpYyBvZiBuYW1lIG1lbWJlciBpbiB0Zm9udHB0ciIKICNlbmRpZgogCiAKQEAgLTQ0NCwz
ICs0MzksMjQgQEAgdHlwZWRlZiAgRklMRSAqRklMRVBUUjsKIC8qIElmIHdlIGhhdmUgbmVpdGhl
ciwgc2hvdWxkIGZhbGwgYmFjayB0byBmcHJpbnRmIHdpdGggZml4ZWQgYXJncy4gICovCiAjZW5k
aWYKICNlbmRpZgorCisvKiBJZiB1bmxpbmsgYW5kIHJtZGlyIGFyZSBub3QgdGhlcmUsIHdlIGRv
bid0IGRlbGV0ZSB0aGUgdGVtcG9yYXJ5IGZpbGVzLiAqLworI2lmbmRlZiBIQVZFX1JNRElSCisj
ZGVmaW5lIHJtZGlyKGRpcikKKyNlbmRpZgorI2lmbmRlZiBIQVZFX1VOTElOSworI2RlZmluZSB1
bmxpbmsoZmlsZSkKKyNlbmRpZgorCisvKiBJZiBta2R0ZW1wKCkgZG9lcyBub3QgZXhpc3QsIHdl
IGhhdmUgdG8gdXNlIHRtcG5hbSgpLiAqLworI2lmbmRlZiBIQVZFX01LRFRFTVAKKyNkZWZpbmUg
bWtkdGVtcChkaXIpICh0bXBuYW0oZGlyKSA/IFwKKwkJICAgICAgKCBta2RpcihkaXIsIDA3MDAp
ID09IC0xID8gTlVMTCA6IGRpciApIDoJXAorCQkgICAgICAoIGVycm5vID0gRUlOVkFMLCBOVUxM
ICkgKQorI2VuZGlmCisKKyNpZm5kZWYgS1BBVEhTRUEKKy8qIEZJWE1FOiBTaG91bGQgcHJvdmlk
ZSBhIHN0cmR1cCBmdW5jdGlvbi4gQnV0IGN1cnJlbnRseSB0aGlzIHRyZWUgaXMKKyAgIG9ubHkg
dXNlZCBpbiBjb25uZWN0aW9uIHdpdGgga3BhdGhzZWEgYW55aG93LiAqLworI2Vycm9yICJOZWVk
IHhzdHJkdXAgYW5kIHhtYWxsb2MgZnVuY3Rpb24sIGUuZy4gZnJvbSBrcGF0aHNlYSIKKyNlbmRp
ZgpJbmRleDogd29yay90ZXhrL2R2aWxqay9jb25maWd1cmUKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gd29yay5v
cmlnL3RleGsvZHZpbGprL2NvbmZpZ3VyZQorKysgd29yay90ZXhrL2R2aWxqay9jb25maWd1cmUK
QEAgLTEyODMsNiArMTI4Myw2MiBAQCBFT0YKIAogCiAKK2ZvciBhY19mdW5jIGluIHJtZGlyIHVu
bGluayBta2R0ZW1wCitkbworZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRhY19mdW5jIiIuLi4g
JGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZToxMjkwOiBjaGVja2luZyBmb3IgJGFjX2Z1bmMi
ID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2Z1bmNfJGFjX2Z1bmMnK3Nl
dH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgor
ZWxzZQorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSAxMjk1ICJjb25maWd1
cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9f
c3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICB3aGljaCBjYW4g
Y29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jKCk7IGJlbG93LiAgKi8KKyNpbmNsdWRlIDxhc3Nl
cnQuaD4KKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBh
biBlcnJvci4gICovCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUg
cmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQg
cHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KK2NoYXIgJGFjX2Z1bmMoKTsKKworaW50
IG1haW4oKSB7CisKKy8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rp
b25zIHdoaWNoIGl0IGltcGxlbWVudHMKKyAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4g
IFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAorICAgIHNvbWV0aGluZyBzdGFydGlu
ZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworI2lmIGRlZmlu
ZWQgKF9fc3R1Yl8kYWNfZnVuYykgfHwgZGVmaW5lZCAoX19zdHViX19fJGFjX2Z1bmMpCitjaG9r
ZSBtZQorI2Vsc2UKKyRhY19mdW5jKCk7CisjZW5kaWYKKworOyByZXR1cm4gMDsgfQorRU9GCitp
ZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjEzMTg6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwg
JGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgor
ICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2Z1bmNfJGFjX2Z1bmM9eWVzIgorZWxz
ZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29u
ZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9mdW5j
XyRhY19mdW5jPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorZmkKKworaWYgZXZhbCAidGVzdCBc
ImBlY2hvICckYWNfY3ZfZnVuY18nJGFjX2Z1bmNgXCIgPSB5ZXMiOyB0aGVuCisgIGVjaG8gIiRh
Y190IiJ5ZXMiIDE+JjYKKyAgICBhY190cl9mdW5jPUhBVkVfYGVjaG8gJGFjX2Z1bmMgfCB0ciAn
YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWidg
CisgIGNhdCA+PiBjb25mZGVmcy5oIDw8RU9GCisjZGVmaW5lICRhY190cl9mdW5jIDEKK0VPRgor
IAorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCitkb25lCisKKwogYWNfY29uZmln
X2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIE1ha2VmaWxlIgogCiB0cmFwICcnIDEgMiAxNQpJbmRl
eDogd29yay90ZXhrL2R2aWxqay9jb25maWd1cmUuaW4KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gd29yay5vcmln
L3RleGsvZHZpbGprL2NvbmZpZ3VyZS5pbgorKysgd29yay90ZXhrL2R2aWxqay9jb25maWd1cmUu
aW4KQEAgLTE0LDUgKzE0LDcgQEAgZG5sIFRoZXNlIHRlc3RzIHByZXZlbnQgcmVsaWFibGUgY3Jv
c3MtYwogQUNfQ19DSEFSX1VOU0lHTkVECiBBQ19DSEVDS19TSVpFT0YobG9uZykKIAorQUNfQ0hF
Q0tfRlVOQ1Mocm1kaXIgdW5saW5rIG1rZHRlbXApCisKIEtQU0VfQ09ORklHX0ZJTEVTKFtNYWtl
ZmlsZV0pCiBBQ19PVVRQVVQKSW5kZXg6IHdvcmsvdGV4ay9kdmlsamsvZHZpMnh4LmMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gd29yay5vcmlnL3RleGsvZHZpbGprL2R2aTJ4eC5jCisrKyB3b3JrL3RleGsvZHZp
bGprL2R2aTJ4eC5jCkBAIC0xLDUgKzEsNSBAQAogLyogJElkOiBkdmkyeHguYyx2IDIuNSAxOTk3
LzEyLzA4IDIwOjUyOjIwIG5ldW1hbm4gRXhwICQgKi8KLSNkZWZpbmUgVkVSU0lPTiAiMi42cDIg
KGR2aWxqaykiCisjZGVmaW5lIFZFUlNJT04gImR2aWxqayAodmVyc2lvbiAyLjZwMykiCiAvKgog
I2RlZmluZSBERUJVR0dTIDEKICovCkBAIC0xNzMsNyArMTczLDcgQEAgY2hhciAgICAqYXJndltd
OwogICB5X29yaWdpbiA9IFlERUZBVUxUT0ZGOyAvKiB5LW9yaWdpbiBpbiBkb3RzICAgICAgICAg
ICAgICAgICAgICAqLwogCiAgIHNldGJ1ZihFUlJfU1RSRUFNLCBOVUxMKTsKLSAgKHZvaWQpIHN0
cmNweShHX3Byb2duYW1lLCBhcmd2WzBdKTsKKyAgR19wcm9nbmFtZSA9IGFyZ3ZbMF07CiAjaWZk
ZWYgS1BBVEhTRUEKICAga3BzZV9zZXRfcHJvZ25hbWUoYXJndlswXSk7CiAgIGtwc2Vfc2V0X3By
b2dyYW1fZW5hYmxlZCAoa3BzZV9wa19mb3JtYXQsIE1BS0VfVEVYX1BLX0JZX0RFRkFVTFQsIGtw
c2Vfc3JjX2NvbXBpbGUpOwpAQCAtMjk2OCw4ICsyOTY4LDggQEAgY2hhciAgICAqYXJndltdOwog
I2VuZGlmCiB7CiAgIGludCAgICAgYXJnaW5kOyAgICAgICAgICAgIC8qIGFyZ3VtZW50IGluZGV4
IGZvciBmbGFncyAgICAgICovCi0gIGNoYXIgICAgY3VyYXJlYVtTVFJTSVpFXTsgIC8qIGN1cnJl
bnQgZmlsZSBhcmVhICAgICAgICAgICAgICovCi0gIGNoYXIgICAgY3VybmFtZVtTVFJTSVpFXTsg
IC8qIGN1cnJlbnQgZmlsZSBuYW1lICAgICAgICAgICAgICovCisgIGNoYXIgICAgKmN1cmFyZWE7
CSAgICAgLyogY3VycmVudCBmaWxlIGFyZWEgICAgICAgICAgICAgKi8KKyAgY2hhciAgICAqY3Vy
bmFtZTsgICAJICAgICAvKiBjdXJyZW50IGZpbGUgbmFtZSAgICAgICAgICAgICAqLwogICBjaGFy
ICAgICp0Y3AsICp0Y3AxOyAgICAgICAvKiB0ZW1wb3JhcnkgY2hhcmFjdGVyIHBvaW50ZXJzICAq
LwogICBjaGFyICAgICp0aGlzX2FyZzsKICAgZG91YmxlICB4X29mZnNldCA9IDAuMCwgeV9vZmZz
ZXQgPSAwLjA7CkBAIC0yOTg4LDkgKzI5ODgsOSBAQCBjaGFyICAgICphcmd2W107CiAjZW5kaWYK
ICNlbmRpZgogCi0gIGlmIChhcmdjID09IDIgJiYgKHN0cmNtcCAoYXJndlsxXSwgIi0tdmVyc2lv
biIpID09IDApKSB7CisgIGlmIChhcmdjID09IDIgJiYgRVEoYXJndlsxXSwgIi0tdmVyc2lvbiIp
KSB7CiAgICAgZXh0ZXJuIEtQU0VETEwgY2hhciAqa3BhdGhzZWFfdmVyc2lvbl9zdHJpbmc7Ci0g
ICAgcHV0cyAoImR2aWxqKGspIDIuNiIpOworICAgIHB1dHMgKFZFUlNJT04pOwogICAgIHB1dHMg
KGtwYXRoc2VhX3ZlcnNpb25fc3RyaW5nKTsKICAgICBwdXRzICgiQ29weXJpZ2h0IChDKSAxOTk3
IEd1c3RhZiBOZXVtYW5uLlxuXAogVGhlcmUgaXMgTk8gd2FycmFudHkuICBZb3UgbWF5IHJlZGlz
dHJpYnV0ZSB0aGlzIHNvZnR3YXJlXG5cCkBAIC0zMzI4LDggKzMzMjgsOCBAQCBQcmltYXJ5IGF1
dGhvciBvZiBEdmkyeHg6IEd1c3RhZiBOZXVtYW5uCiAgICAgICB9CiAgICAgfSBlbHNlIHsKIAot
ICAgICAgKHZvaWQpIHN0cmNweShmaWxlbmFtZSwgdGNwKTsKLSAgICAgIGlmICghc3RyY21wKGZp
bGVuYW1lLCAiLSIpKSB7CisgICAgICBmaWxlbmFtZSA9IHRjcDsKKyAgICAgIGlmIChFUShmaWxl
bmFtZSwgIi0iKSkgewogICAgICAgICBFbWl0RmlsZU5hbWUgPSAiLSI7CiAjaWZkZWYgUklTQ19V
U0VfT1NMCiAgICAgICAgIGR2aWZwID0gQklOT1BFTigiS2JkOiIpOwpAQCAtMzMzOSw1NyArMzMz
OSw2OCBAQCBQcmltYXJ5IGF1dGhvciBvZiBEdmkyeHg6IEd1c3RhZiBOZXVtYW5uCiAJICBBc3N1
cmVCaW5hcnkoZmlsZW5vKGR2aWZwKSk7CiAjZW5kaWYKICAgICAgIH0gZWxzZSB7CisJLyogU2lu
Y2UgdGhpcyBjb2RlIGlzIHVzZWQgb25seSBvbmNlIGR1cmluZyBzdGFydHVwLCB3ZSBkb24ndCBj
YXJlCisJICAgYWJvdXQgZnJlZSgpaW5nIHRoZSBhbGxvY2F0ZWQgc3RyaW5ncyB0aGF0IHJlcHJl
c2VudCBmaWxlbmFtZXMuCisJICAgSXQgd2lsbCBiZSBtb3JlIHdvcmsgdG8gcmVhbGl6ZSBwcm9w
ZXIgZGVhbGxvY2F0aW9uIGhhbmRsaW5nIHRoYW4KKwkgICBpdCdzIHdvcnRoIGluIHRlcm1zIG9m
IHNhdmluZyBhIGZldyBieXRlcy4gV2UgY29uc2lkZXIgdGhlc2UKKwkgICBieXRlcyBhY3R1YWxs
eSBzdGF0aWMgbWVtb3J5IHdoZXJlIHdlIGRvbid0IGtub3cgdGhlIHNpemUgaW4KKwkgICBhZHZh
bmNlIGFuZCBkb24ndCBhZGQgdGhlbSB0byB0aGUgYWxsb2NhdGVkX3N0b3JhZ2UgY291bnQuCisJ
ICAgWzI3IEp1biAwNyAtanNdICovCiAjaWZkZWYgS1BBVEhTRUEKICAgICAgICAgLyogc3BsaXQg
aW50byBkaXJlY3RvcnkgKyBmaWxlIG5hbWUgKi8KIAlpbnQgdGNwbGVuLCBhcmd2bGVuOwogCXRj
cCA9IChjaGFyICopeGJhc2VuYW1lKGFyZ3ZbYXJnaW5kXSk7LyogdGhpcyBrbm93cyBhYm91dCBh
bnkga2luZCBvZiBzbGFzaGVzICovCiAJdGNwbGVuID0gc3RybGVuKHRjcCk7CisJaWYgKCB0Y3Bs
ZW4gPT0gMCApIHsKKwkgIC8qIFRoaXMgaGFwcGVucyB3aGVuIHRoZSBEVkkgZmlsZSBuYW1lIGhh
cyBhIHRyYWlsaW5nIHNsYXNoOyB0aGlzCisJICAgICBpcyBub3QgYSB2YWxpZCBuYW1lLiBUaGVu
IHdlIHRlcm1pbmF0ZSB0aGUgYXJndW1lbnQgcGFyc2luZworCSAgICAgbG9vcCwgYSB1c2FnZSBt
ZXNzYWdlIHdpbGwgYmUgb3V0cHV0IGJlbG93LiAqLworCSAgYnJlYWs7CisJfQogCWFyZ3ZsZW4g
PSBzdHJsZW4oYXJndlthcmdpbmRdKTsKIAlpZiAodGNwbGVuID09IGFyZ3ZsZW4pCi0JICBjdXJh
cmVhWzBdID0gJ1wwJzsKKwkgIGN1cmFyZWEgPSAiIjsKIAllbHNlIHsKLQkgICh2b2lkKSBzdHJj
cHkoY3VyYXJlYSwgYXJndlthcmdpbmRdKTsKKwkgIGN1cmFyZWEgPSB4c3RyZHVwKGFyZ3ZbYXJn
aW5kXSk7CiAJICBjdXJhcmVhW2FyZ3ZsZW4tdGNwbGVuXSA9ICdcMCc7CiAJfQogI2Vsc2UKICAg
ICAgICAgdGNwID0gc3RycmNocihhcmd2W2FyZ2luZF0sICcvJyk7CiAgICAgICAgIC8qIHNwbGl0
IGludG8gZGlyZWN0b3J5ICsgZmlsZSBuYW1lICovCiAgICAgICAgIGlmICh0Y3AgPT0gTlVMTCkg
ewotICAgICAgICAgIGN1cmFyZWFbMF0gPSAnXDAnOworICAgICAgICAgIGN1cmFyZWFbMF0gPSAi
IjsKICAgICAgICAgICB0Y3AgPSBhcmd2W2FyZ2luZF07CiAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgKHZvaWQpIHN0cmNweShjdXJhcmVhLCBhcmd2W2FyZ2luZF0pOworCSAgY3VyYXJlYSA9
IHhzdHJkdXAoYXJndlthcmdpbmRdKTsKICAgICAgICAgICBjdXJhcmVhW3RjcC1hcmd2W2FyZ2lu
ZF0rMV0gPSAnXDAnOwogICAgICAgICAgIHRjcCArPSAxOwogICAgICAgICB9CiAjZW5kaWYKIAor
ICAgICAgICBjdXJuYW1lID0gKGNoYXIgKikgeG1hbGxvYyhzdHJsZW4odGNwKSs1KTsgIC8qICsg
c3BhY2UgZm9yICIuZHZpIiAqLwogICAgICAgICAodm9pZCkgc3RyY3B5KGN1cm5hbWUsIHRjcCk7
CiAgICAgICAgIC8qIHNwbGl0IGludG8gZmlsZSBuYW1lICsgZXh0ZW5zaW9uICovCi0gICAgICAg
IHRjcDEgPSBzdHJyY2hyKHRjcCwgJy4nKTsKKyAgICAgICAgdGNwMSA9IHN0cnJjaHIoY3VybmFt
ZSwgJy4nKTsKICAgICAgICAgaWYgKHRjcDEgPT0gTlVMTCkgewotICAgICAgICAgICh2b2lkKSBz
dHJjcHkocm9vdG5hbWUsIGN1cm5hbWUpOworICAgICAgICAgIHJvb3RuYW1lID0geHN0cmR1cChj
dXJuYW1lKTsKICAgICAgICAgICBzdHJjYXQoY3VybmFtZSwgIi5kdmkiKTsKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAqdGNwMSA9ICdcMCc7Ci0gICAgICAgICAgKHZvaWQpIHN0cmNweShy
b290bmFtZSwgY3VybmFtZSk7CisgICAgICAgICAgcm9vdG5hbWUgPSB4c3RyZHVwKGN1cm5hbWUp
OwogICAgICAgICAgICp0Y3AxID0gJy4nOwogICAgICAgICB9CiAKKwlmaWxlbmFtZSA9IChjaGFy
ICopIHhtYWxsb2Moc3RybGVuKGN1cmFyZWEpK3N0cmxlbihjdXJuYW1lKSsxKTsKICAgICAgICAg
KHZvaWQpIHN0cmNweShmaWxlbmFtZSwgY3VyYXJlYSk7CiAgICAgICAgICh2b2lkKSBzdHJjYXQo
ZmlsZW5hbWUsIGN1cm5hbWUpOwogCiAgICAgICAgIGlmICgoZHZpZnAgPSBCSU5PUEVOKGZpbGVu
YW1lKSkgPT0gRlBOVUxMKSB7CiAgICAgICAgICAgLyogZG8gbm90IGluc2lzdCBvbiAuZHZpICov
CiAgICAgICAgICAgaWYgKHRjcDEgPT0gTlVMTCkgewotICAgICAgICAgICAgaW50IGwgPSBzdHJs
ZW4oY3VybmFtZSk7Ci0gICAgICAgICAgICBpZiAobCA+IDQpCi0gICAgICAgICAgICAgIGN1cm5h
bWVbbCAtIDRdID0gJ1wwJzsKLSAgICAgICAgICAgIGwgPSBzdHJsZW4oZmlsZW5hbWUpOwotICAg
ICAgICAgICAgaWYgKGwgPiA0KQotICAgICAgICAgICAgICBmaWxlbmFtZVtsIC0gNF0gPSAnXDAn
OworCSAgICBmaWxlbmFtZVtzdHJsZW4oZmlsZW5hbWUpIC0gNF0gPSAnXDAnOworCSAgICBkdmlm
cCA9IEJJTk9QRU4oZmlsZW5hbWUpOwogICAgICAgICAgIH0KLSAgICAgICAgICBpZiAodGNwMSAh
PSBOVUxMIHx8IChkdmlmcCA9IEJJTk9QRU4oZmlsZW5hbWUpKSA9PSBGUE5VTEwpIHsKKyAgICAg
ICAgICBpZiAoZHZpZnAgPT0gRlBOVUxMKSB7CiAjaWZkZWYgTVNDNQogICAgICAgICAgICAgRmF0
YWwoIiVzOiBjYW4ndCBmaW5kIERWSSBmaWxlIFwiJXNcIlxuXG4iLAogICAgICAgICAgICAgICAg
ICAgR19wcm9nbmFtZSwgZmlsZW5hbWUpOwpAQCAtMzQxMSw3ICszNDIyLDcgQEAgUHJpbWFyeSBh
dXRob3Igb2YgRHZpMnh4OiBHdXN0YWYgTmV1bWFubgogICB5X2dvZmZzZXQgPSAoc2hvcnQpIE1N
X1RPX1BYTCh5X29mZnNldCkgKyB5X29yaWdpbjsKIAogICBpZiAoZHZpZnAgPT0gRlBOVUxMKSB7
Ci0gICAgZnByaW50ZihFUlJfU1RSRUFNLCJcblRoaXMgaXMgdGhlIERWSSB0byAlcyBjb252ZXJ0
ZXIgdmVyc2lvbiAlcyIsCisgICAgZnByaW50ZihFUlJfU1RSRUFNLCJcblRoaXMgaXMgdGhlIERW
SSB0byAlcyBjb252ZXJ0ZXIgJXMiLAogICAgICAgICAgICAgUFJJTlRFUiwgVkVSU0lPTik7CiAj
aWZkZWYgU0VWRU5CSVQKICAgICBmcHJpbnRmKEVSUl9TVFJFQU0sIiwgN2JpdCIpOwpAQCAtMzUw
NywxMyArMzUxOCw4IEBAIFByaW1hcnkgYXV0aG9yIG9mIER2aTJ4eDogR3VzdGFmIE5ldW1hbm4K
ICAgICBleGl0KDEpOwogICB9CiAgIGlmIChFUShFbWl0RmlsZU5hbWUsICIiKSkgewotICAgIGlm
ICgoRW1pdEZpbGVOYW1lID0gKGNoYXIgKiltYWxsb2MoIFNUUlNJWkUgKSkgIT0gTlVMTCkKLSAg
ICAgIGFsbG9jYXRlZF9zdG9yYWdlICs9IFNUUlNJWkU7Ci0gICAgZWxzZQotICAgICAgRmF0YWwo
IkNhbid0IGFsbG9jYXRlIHN0b3JhZ2Ugb2YgJWQgYnl0ZXNcbiIsU1RSU0laRSk7Ci0gICAgKHZv
aWQpIHN0cmNweShFbWl0RmlsZU5hbWUsIGN1cm5hbWUpOwotICAgIGlmICgodGNwMSA9IHN0cnJj
aHIoRW1pdEZpbGVOYW1lLCAnLicpKSkKLSAgICAgICp0Y3AxID0gJ1wwJzsKKyAgICBFbWl0Rmls
ZU5hbWUgPSAoY2hhciAqKSB4bWFsbG9jKHN0cmxlbihyb290bmFtZSkrc2l6ZW9mKEVNSVRGSUxF
X0VYVEVOU0lPTikpOworICAgICh2b2lkKSBzdHJjcHkoRW1pdEZpbGVOYW1lLCByb290bmFtZSk7
CiAgICAgc3RyY2F0KEVtaXRGaWxlTmFtZSwgRU1JVEZJTEVfRVhURU5TSU9OKTsKICAgfQogICBp
ZiAoR19xdWlldCkKQEAgLTM2OTgsNiArMzcwNCw4IEBAIGJvb2wgUEZsYWc7CiAjZW5kaWYKICAg
fQogICBDbG9zZUZpbGVzKCk7CisgIGlmICggdG1wX2RpclswXSAhPSAnXDAnICkKKyAgICBybWRp
ciAodG1wX2Rpcik7CQkJLyogaWdub3JlIGVycm9ycyAqLwogICBleGl0KEdfZXJyZW5jKTsKIH0K
IApAQCAtMzg5NSwyMiArMzkwMywyMSBAQCBjaGFyICpzdHI7CiBpbnQgIG47CiAjZW5kaWYKIHsK
LSAgY2hhciAgICBzcGJ1ZltTVFJTSVpFXSwgeHNbU1RSU0laRV0sIHlzW1NUUlNJWkVdOwotICBj
aGFyICAgICpzZiA9IE5VTEwsICpwc2ZpbGUgPSBOVUxMOworICBjaGFyICAgIHhzW1NUUlNJWkVd
LCB5c1tTVFJTSVpFXTsKKyAgY2hhciAgICAqaW5jbHVkZV9maWxlID0gTlVMTDsKKyAgZW51bSAg
ICB7IFZlcmJGaWxlLCBIUEZpbGUsIFBTRmlsZSB9IGZpbGVfdHlwZTsKICAgZmxvYXQgICB4LHk7
CiAgIGxvbmc0ICAgeF9wb3MsIHlfcG9zOwogICBLZXlXb3JkIGs7CiAgIGludCAgICAgaSwgaiwg
ajE7CiAgIHN0YXRpYyAgaW50ICAgR3JheVNjYWxlID0gMTAsIFBhdHRlcm4gPSAxOwogICBzdGF0
aWMgIGJvb2wgIEdyYXlGaWxsID0gX1RSVUU7Ci0gIHN0YXRpYyAgbG9uZzQgcF94WzgwXSwgcF95
WzgwXTsKLSAgaW50IGxseD0wLCBsbHk9MCwgdXJ4PTAsIHVyeT0wLCByd2k9MCwgcmhpPTA7Ci0j
aWZkZWYgV0lOMzIKLSAgY2hhciAgICAqZ3NfcGF0aDsKLSNlbmRpZgorICBzdGF0aWMgIGxvbmc0
IHBfeFtNQVhfU1BFQ0lBTF9ERUZQT0lOVFNdLCBwX3lbTUFYX1NQRUNJQUxfREVGUE9JTlRTXTsK
KyAgaW50IGxseD0wLCBsbHk9MCwgdXJ4PTAsIHVyeT0wLCByd2k9MDsKIAogICBzdHJbbl0gPSAn
XDAnOwotICBzcGJ1ZlswXSA9ICdcMCc7CisgIGZvciAoIGk9MCA7IGk8TUFYX1NQRUNJQUxfREVG
UE9JTlRTIDsgaSsrICkKKyAgICBwX3hbaV0gPSBwX3lbaV0gPSAtMTsKIAogICBTZXRQb3NuKGgs
IHYpOwogI2lmZGVmIF9fcmlzY29zCkBAIC0zOTI0LDQxICszOTMxLDMwIEBAIGludCAgbjsKICAg
ICAvKiBnZXQgYWxsIGtleXdvcmQtdmFsdWUgcGFpcnMgKi8KICAgICAvKiBmb3IgY29tcGF0aWJp
bGl0eSwgc2luZ2xlIHdvcmRzIGFyZSB0YWtlbiBhcyBmaWxlIG5hbWVzICovCiAgICAgaWYgKCBr
LnZ0ID09IE5vbmUgJiYgYWNjZXNzKGsuS2V5LCAwKSA9PSAwKSB7Ci0gICAgICBpZiAoIHNmCi0j
aWZkZWYgS1BBVEhTRUEKLSAgICAgICAgICAgJiYgIWtwc2VfdGV4X2h1c2ggKCJzcGVjaWFsIikK
LSNlbmRpZgotICAgICAgICAgKQotICAgICAgICBXYXJuaW5nKCJNb3JlIHRoYW4gb25lIFxcc3Bl
Y2lhbCBmaWxlIG5hbWUgZ2l2ZW4uICVzIGlnbm9yZWQiLCBzZik7Ci0gICAgICAodm9pZCkgc3Ry
Y3B5KHNwYnVmLCBrLktleSk7Ci0gICAgICBzZiA9IHNwYnVmOwotICAgICAgLyoKLSAgICAgICAg
Zm9yIChqID0gMTsgKChzZltqXT09Jy8nID8gc2Zbal09J1xcJzpzZltqXSkgIT0gJ1wwJyk7IGor
Kyk7Ci0gICAgICAgICovCi0gICAgfSBlbHNlIGlmICggR2V0S2V5VmFsKCAmaywgS2V5VGFiLCBO
S0VZUywgJmkgKSAmJiBpICE9IC0xICkKKyAgICAgIGlmICggaW5jbHVkZV9maWxlICYmICFrcHNl
X3RleF9odXNoICgic3BlY2lhbCIpICkgeworICAgICAgICBXYXJuaW5nKCJNb3JlIHRoYW4gb25l
IFxcc3BlY2lhbCBmaWxlIG5hbWUgZ2l2ZW4uICVzIGlnbm9yZWQiLCBpbmNsdWRlX2ZpbGUpOwor
CWZyZWUgKGluY2x1ZGVfZmlsZSk7CisgICAgICB9CisgICAgICBpbmNsdWRlX2ZpbGUgPSB4c3Ry
ZHVwKGsuS2V5KTsKKyAgICAgIGZpbGVfdHlwZSA9IFZlcmJGaWxlOworICAgIH0gZWxzZSBpZiAo
IEdldEtleVZhbCggJmssIEtleVRhYiwgTktFWVMsICZpICkgJiYgaSAhPSAtMSApIHsKICAgICAg
IHN3aXRjaCAoaSkgewogICAgICAgY2FzZSBQU0ZJTEU6Ci0gICAgICAgIGlmIChzZgotI2lmZGVm
IEtQQVRIU0VBCi0gICAgICAgICAgICAmJiAha3BzZV90ZXhfaHVzaCAoInNwZWNpYWwiKQotI2Vu
ZGlmCi0gICAgICAgICAgICApCi0gICAgICAgICAgICBXYXJuaW5nKCJNb3JlIHRoYW4gb25lIFxc
c3BlY2lhbCBmaWxlIG5hbWUgZ2l2ZW4uICVzIGlnbm9yZWQiLCBzZik7Ci0gICAgICAgICh2b2lk
KSBzdHJjcHkoc3BidWYsIGsuVmFsKTsKLSAgICAgICAgcHNmaWxlID0gc3BidWY7Ci0gICAgICAg
IC8qCi0gICAgICAgICAgZm9yIChqPTE7ICgoc2Zbal09PScvJyA/IHNmW2pdPSdcXCc6c2Zbal0p
ICE9ICdcMCcpOyBqKyspOwotICAgICAgICAgICovCisgICAgICAgIGlmICggaW5jbHVkZV9maWxl
ICkgeworCSAgV2FybmluZygiTW9yZSB0aGFuIG9uZSBcXHNwZWNpYWwgZmlsZSBuYW1lIGdpdmVu
LiAlcyBpZ25vcmVkIiwgaW5jbHVkZV9maWxlKTsKKwkgIGZyZWUoaW5jbHVkZV9maWxlKTsKKwl9
CisgICAgICAgIGluY2x1ZGVfZmlsZSA9IHhzdHJkdXAoay5WYWwpOworCWZpbGVfdHlwZSA9IFBT
RmlsZTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgICAgY2FzZSBIUEZJTEU6Ci0gICAg
ICAgIGlmIChzZikKLSAgICAgICAgICAgIFdhcm5pbmcoIk1vcmUgdGhhbiBvbmUgXFxzcGVjaWFs
IGZpbGUgbmFtZSBnaXZlbi4gJXMgaWdub3JlZCIsIHNmKTsKLSAgICAgICAgKHZvaWQpIHN0cmNw
eShzcGJ1Ziwgay5WYWwpOwotICAgICAgICBzZiA9IHNwYnVmOwotICAgICAgICAvKgotICAgICAg
ICAgIGZvciAoaj0xOyAoKHNmW2pdPT0nLycgPyBzZltqXT0nXFwnOnNmW2pdKSAhPSAnXDAnKTsg
aisrKTsKLSAgICAgICAgICAqLworICAgICAgICBpZiAoIGluY2x1ZGVfZmlsZSAmJiAha3BzZV90
ZXhfaHVzaCAoInNwZWNpYWwiKSApIHsKKwkgIFdhcm5pbmcoIk1vcmUgdGhhbiBvbmUgXFxzcGVj
aWFsIGZpbGUgbmFtZSBnaXZlbi4gJXMgaWdub3JlZCIsIGluY2x1ZGVfZmlsZSk7CisJICBmcmVl
KGluY2x1ZGVfZmlsZSk7CisJfQorICAgICAgICBpbmNsdWRlX2ZpbGUgPSB4c3RyZHVwKGsuVmFs
KTsKKwlmaWxlX3R5cGUgPSBIUEZpbGU7CiAgICAgICAgIGJyZWFrOwogCiAgICAgICBjYXNlIE9S
SUVOVEFUSU9OOgpAQCAtMzk3OCwyMyArMzk3NCwyNCBAQCBpbnQgIG47CiAgICAgICAgIH0KICNl
bmRpZgogICAgICAgICBlbHNlCi0jaWZkZWYgS1BBVEhTRUEKLSAgICAgICAgICAgaWYgKCFrcHNl
X3RleF9odXNoICgic3BlY2lhbCIpKQotI2VuZGlmCiAgICAgICAgICAgV2FybmluZyggIkludmFs
aWQgb3JpZW50YXRpb24gKCVkKWdpdmVuOyBpZ25vcmVkLiIsIGsudi5pKTsKICAgICAgICAgYnJl
YWs7CiAKICAgICAgIGNhc2UgUkVTRVRQT0lOVFM6Ci0gICAgICAgICh2b2lkKSBzdHJjcHkoc3Bi
dWYsIGsuVmFsKTsKLQotICAgICAgICBzZiA9IE5VTEw7CisJZm9yICggaT0wIDsgaTxNQVhfU1BF
Q0lBTF9ERUZQT0lOVFMgOyBpKysgKQorCSAgcF94W2ldID0gcF95W2ldID0gLTE7CiAgICAgICAg
IGJyZWFrOwogCiAgICAgICBjYXNlIERFRlBPSU5UOgotICAgICAgICAodm9pZCkgc3RyY3B5KHNw
YnVmLCBrLlZhbCk7Ci0gICAgICAgIGkgPSBzc2NhbmYoc3BidWYsIiVkKCVbXixdLCVzKSIsJmos
eHMseXMpOworCS8qIDI1NCBpcyBTVFJTSVpFLTEuIGNwcCBzaG91bGQgYmUgdXNlZCB0byBjb25z
dHJ1Y3QgdGhhdCBudW1iZXIuICovCisgICAgICAgIGkgPSBzc2NhbmYoay5WYWwsIiVkKCUyNTRb
XixdLCUyNTRzKSIsJmoseHMseXMpOwogICAgICAgICBpZiAoaT4wKSB7Ci0gICAgICAgICAgeF9w
b3MgPSBoOyAKKwkgIGlmICggaiA8IDAgIHx8ICBqID49IE1BWF9TUEVDSUFMX0RFRlBPSU5UUyAp
IHsKKwkgICAgV2FybmluZyAoImRlZnBvaW50ICVkIGlnbm9yZWQsIG11c3QgYmUgYmV0d2VlbiAw
IGFuZCAlZCIsCisJCSAgICAgaiwgTUFYX1NQRUNJQUxfREVGUE9JTlRTKTsKKwkgICAgYnJlYWs7
CisJICB9CisgICAgICAgICAgeF9wb3MgPSBoOwogICAgICAgICAgIHlfcG9zID0gdjsKICAgICAg
ICAgICBpZiAoaT4xKSB7CiAgICAgICAgICAgICBpZiAoc3NjYW5mKHhzLCIlZnB0IiwmeCk+MCkg
ewpAQCAtNDAxMSwxOSArNDAwOCwzMiBAQCBpbnQgIG47CiAgICAgICAgICAgcF94W2pdPXhfcG9z
OwogICAgICAgICAgIHBfeVtqXT15X3BvczsKICAgICAgICAgfSBlbHNlCi0jaWZkZWYgS1BBVEhT
RUEKLSAgICAgICAgICAgICAgaWYgKCFrcHNlX3RleF9odXNoICgic3BlY2lhbCIpKQotI2VuZGlm
CiAgICAgICAgICAgV2FybmluZygiaW52YWxpZCBwb2ludCBkZWZpbml0aW9uXG4iKTsKLQotICAg
ICAgICBzZiA9IE5VTEw7CiAgICAgICAgIGJyZWFrOwogCiAgICAgICBjYXNlIEZJTEw6Ci0gICAg
ICAgICh2b2lkKSBzdHJjcHkoc3BidWYsIGsuVmFsKTsKLSAgICAgICAgaSA9IHNzY2FuZihzcGJ1
ZiwiJWQvJWQgJXMiLCZqLCZqMSx4cyk7CisJLyogMjU0IGlzIFNUUlNJWkUtMS4gY3BwIHNob3Vs
ZCBiZSB1c2VkIHRvIGNvbnN0cnVjdCB0aGF0IG51bWJlci4gKi8KKyAgICAgICAgaSA9IHNzY2Fu
ZihrLlZhbCwiJWQvJWQgJTI1NHMiLCZqLCZqMSx4cyk7CiAgICAgICAgIGlmIChpPjEpIHsKICNp
ZmRlZiBMSgorCSAgaWYgKCBqIDwgMCB8fCBqID49IE1BWF9TUEVDSUFMX0RFRlBPSU5UUyApIHsK
KwkgICAgV2FybmluZyAoImZpbGwgaWdub3JlZCwgcG9pbnQgJWQgbXVzdCBiZSBiZXR3ZWVuIDAg
YW5kICVkIiwKKwkJICAgICBqLCBNQVhfU1BFQ0lBTF9ERUZQT0lOVFMpOworCSAgICBicmVhazsK
KwkgIH0KKwkgIGlmICggcF94W2pdID09IC0xICkgeworCSAgICBXYXJuaW5nICgiZmlsbCBpZ25v
cmVkLCBwb2ludCAlZCBpcyB1bmRlZmluZWRcbiIsIGopOworCSAgICBicmVhazsKKwkgIH0KKwkg
IGlmICggajEgPCAwIHx8IGoxID49IE1BWF9TUEVDSUFMX0RFRlBPSU5UUyApIHsKKwkgICAgV2Fy
bmluZyAoImZpbGwgaWdub3JlZCwgcG9pbnQgJWQgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kICVkIiwK
KwkJICAgICBqMSwgTUFYX1NQRUNJQUxfREVGUE9JTlRTKTsKKwkgICAgYnJlYWs7CisJICB9CisJ
ICBpZiAoIHBfeFtqMV0gPT0gLTEgKSB7CisJICAgIFdhcm5pbmcgKCJmaWxsIGlnbm9yZWQsIHBv
aW50ICVkIGlzIHVuZGVmaW5lZFxuIiwgajEpOworCSAgICBicmVhazsKKwkgIH0KICAgICAgICAg
ICBTZXRQb3NuKHBfeFtqXSwgcF95W2pdKTsKICAgICAgICAgICB4X3BvcyA9IChsb25nNClQSVhS
T1VORChwX3hbajFdLXBfeFtqXSwgaGNvbnYpOwogICAgICAgICAgIHlfcG9zID0gKGxvbmc0KVBJ
WFJPVU5EKHBfeVtqMV0tcF95W2pdLCB2Y29udik7CkBAIC00MDQ0LDkgKzQwNTQsNiBAQCBpbnQg
IG47CiAgICAgICAgICAgR3JheVNjYWxlID0gay52Lmk7CiAgICAgICAgICAgR3JheUZpbGwgPSBf
VFJVRTsKICAgICAgICAgfSBlbHNlCi0jaWZkZWYgS1BBVEhTRUEKLSAgICAgICAgICAgaWYgKCFr
cHNlX3RleF9odXNoICgic3BlY2lhbCIpKQotI2VuZGlmCiAgICAgICAgICAgV2FybmluZyggIklu
dmFsaWQgZ3JheSBzY2FsZSAoJWQpIGdpdmVuOyBpZ25vcmVkLiIsIGsudi5pKTsKICAgICAgICAg
YnJlYWs7CiAKQEAgLTQwNTUsOSArNDA2Miw2IEBAIGludCAgbjsKICAgICAgICAgICBQYXR0ZXJu
ID0gay52Lmk7CiAgICAgICAgICAgR3JheUZpbGwgPSBfRkFMU0U7CiAgICAgICAgIH0gZWxzZQot
I2lmZGVmIEtQQVRIU0VBCi0gICAgICAgICAgIGlmICgha3BzZV90ZXhfaHVzaCAoInNwZWNpYWwi
KSkKLSNlbmRpZgogICAgICAgICAgIFdhcm5pbmcoICJJbnZhbGlkIHBhdHRlcm4gKCVkKSBnaXZl
bjsgaWdub3JlZC4iLCBrLnYuaSk7CiAgICAgICAgIGJyZWFrOwogCkBAIC00MDY2LDc1ICs0MDcw
LDEyMyBAQCBpbnQgIG47CiAgICAgICBjYXNlIFVSWDogdXJ4ID0gay52Lmk7IGJyZWFrOwogICAg
ICAgY2FzZSBVUlk6IHVyeSA9IGsudi5pOyBicmVhazsKICAgICAgIGNhc2UgUldJOiByd2kgPSBr
LnYuaTsgYnJlYWs7Ci0gICAgICBjYXNlIFJISTogcmhpID0gay52Lmk7IGJyZWFrOworICAgICAg
Y2FzZSBSSEk6CisJaWYgKCFrcHNlX3RleF9odXNoICgic3BlY2lhbCIpKQorICAgICAgICAgICAg
V2FybmluZygiV2hhdGV2ZXIgcmhpIHdhcyBnb29kIGZvciBvbmNlLCBpdCBpcyBpZ25vcmVkIG5v
dy4iKTsKKwlicmVhazsKIAogICAgICAgZGVmYXVsdDoKLSNpZmRlZiBLUEFUSFNFQQotICAgICAg
ICAgICBpZiAoIWtwc2VfdGV4X2h1c2ggKCJzcGVjaWFsIikpCi0jZW5kaWYKKwlpZiAoICFrcHNl
X3RleF9odXNoICgic3BlY2lhbCIpICkKICAgICAgICAgV2FybmluZygiQ2FuJ3QgaGFuZGxlICVz
PSVzIGNvbW1hbmQ7IGlnbm9yZWQuIiwgay5LZXksIGsuVmFsKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgICB9Ci0gICAgICAKLSAgICBlbHNlCi0jaWZkZWYgS1BBVEhTRUEKLSAgICAgICAgICAgaWYg
KCFrcHNlX3RleF9odXNoICgic3BlY2lhbCIpKQotI2VuZGlmCisKKyAgICB9IGVsc2UgaWYgKCFr
cHNlX3RleF9odXNoICgic3BlY2lhbCIpKSB7CiAgICAgICBXYXJuaW5nKCJJbnZhbGlkIGtleXdv
cmQgb3IgdmFsdWUgaW4gXFxzcGVjaWFsIC0gPCVzPiBpZ25vcmVkIiwgay5LZXkpOworICAgIH0K
KworICAgIGZyZWUgKGsuS2V5KTsKKyAgICBpZiAoIGsuVmFsICE9IE5VTEwgKSAgZnJlZShrLlZh
bCk7CiAgIH0KIAotICBpZiAoIHNmIHx8IHBzZmlsZSApIHsKKyAgaWYgKCBpbmNsdWRlX2ZpbGUg
KSB7CiAgICAgbGFzdF9yeCA9IGxhc3RfcnkgPSBVTktOT1dOOwogI2lmZGVmIElCTTM4MTIKICAg
ICBQTVBmbHVzaDsKICNlbmRpZgotICAgIGlmIChzZikgewotICAgICAgaWYgKGkgPT0gSFBGSUxF
KSAKLSAgICAgICAgQ29weUhQRmlsZSggc2YgKTsKLSAgICAgIGVsc2UgCi0gICAgICAgIENvcHlG
aWxlKCBzZiApOwotICAgIH0KLSAgICBlbHNlCisKICNpZmRlZiBMSgotICAgICAgaWYgKHBzZmls
ZSkgeworICAgICAgaWYgKCBmaWxlX3R5cGUgPT0gUFNGaWxlKSB7CiAgICAgICAgIC8qIGludCBo
ZWlnaHQgPSByd2kgKiAodXJ4IC0gbGx4KSAvICh1cnkgLSBsbHkpOyovCiAgICAgICAgIGludCB3
aWR0aCAgPSB1cnggLSBsbHg7CiAgICAgICAgIGludCBoZWlnaHQgPSB1cnkgLSBsbHk7CiAgICAg
ICAgIGNoYXIgY21kWzI1NV07Ci0gICAgICAgIGludCBzY2FsZV9mYWN0b3IgICAgPSAzMDAwICog
d2lkdGggLyByd2k7Ci0gICAgICAgIGludCBhZGp1c3RlZF9oZWlnaHQgPSBoZWlnaHQgKiAzMDAv
c2NhbGVfZmFjdG9yOwotICAgICAgICBpbnQgYWRqdXN0ZWRfbGx4ICAgID0gbGx4ICAgICogMzAw
L3NjYWxlX2ZhY3RvcjsKKyAgICAgICAgY2hhciAqY21kX2Zvcm1hdCA9ICIlcyAtcSAtZFNJTVBM
RSAtZFNBRkVSIC1kTk9QQVVTRSAtc0RFVklDRT0lcyAtc091dHB1dEZpbGU9JXMgJXMgJXMgc2hv
d3BhZ2UucHMgLWMgcXVpdCI7CisgICAgICAgIGNoYXIgKmdzX2NtZDsKKyAgICAgICAgaW50IHNj
YWxlX2ZhY3RvciwgYWRqdXN0ZWRfaGVpZ2h0LCBhZGp1c3RlZF9sbHg7CiAgICAgICAgIGNoYXIg
KnByaW50ZXIgPSAibGpldHBsdXMiOyAvKiB1c2UgdGhlIG1vc3Qgc3R1cGlkIG9uZSAqLwogCi0K
LSAgICAgICAgY2hhciBzY2FsZV9maWxlX25hbWVbMjU1XTsKLSAgICAgICAgY2hhciAqc2NhbGVf
ZmlsZSA9IHRtcG5hbShzY2FsZV9maWxlX25hbWUpOwotICAgICAgICBjaGFyICpwY2xfZmlsZSA9
IHRtcG5hbShOVUxMKTsgIAorICAgICAgICBjaGFyIHBjbF9maWxlW1NUUlNJWkVdOworICAgICAg
ICBjaGFyIHNjYWxlX2ZpbGVbU1RSU0laRV07CiAgICAgICAgIEZJTEVQVFIgc2NhbGVmOwogCi0g
ICAgICAgIGlmICggKHNjYWxlZiA9IEJPVVRPUEVOKHNjYWxlX2ZpbGUpKSA9PSBGUE5VTEwgKSB7
Ci0gICAgICAgICAgV2FybmluZygiVW5hYmxlIHRvIG9wZW4gZmlsZSAlcyBmb3Igd3JpdGluZyIs
IHNjYWxlX2ZpbGUgKTsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgZnBy
aW50ZihzY2FsZWYsICIlLjJmICUuMmYgc2NhbGVcbiVkICVkIHRyYW5zbGF0ZVxuIiwgIAotICAg
ICAgICAgICAgICAgIDMwMC4wL3NjYWxlX2ZhY3RvciwgMzAwLjAvc2NhbGVfZmFjdG9yLAotICAg
ICAgICAgICAgICAgIDAsIGFkanVzdGVkX2hlaWdodCA9PSBoZWlnaHQgPyAwIDogdXJ5KTsKLSAg
ICAgICAgQkNMT1NFKCBzY2FsZWYgKTsKKyAgICAgICAgaWYgKCB1cnggPT0gMCB8fCB1cnkgPT0g
MCB8fCByd2kgPT0gMCApIHsKKyAgCS8qIFNpbmNlIGR2aXBzJyBwc2ZpbGUgc3BlY2lhbCBoYXMg
YSBkaWZmZXJlbnQgc3ludGF4LCB0aGlzIG1pZ2h0CisgIAkgICB3ZWxsIGJlIG9uZSBvZiB0aG9z
ZSBzcGVjaWFscywgaS5lLiwgYSBub24tZHZpbGprIHNwZWNpYWwuIFRoZW4KKyAgCSAgIHRoZSBX
YXJuaW5nIHNob3VsZCBiZSBzdXBwcmVzc2FibGUuICovCisgIAlpZiAoICFrcHNlX3RleF9odXNo
ICgic3BlY2lhbCIpICkKKyAgCSAgV2FybmluZyAoIklnbm9yaW5nIHBzZmlsZSBzcGVjaWFsIHdp
dGhvdXQgdXJ4LCB1cnkgYW5kIHJ3aSBhdHRyaWJ1dGVzIik7CisJZnJlZSAoaW5jbHVkZV9maWxl
KTsKKwlyZXR1cm47CisgICAgICB9CisgICAgICBzY2FsZV9mYWN0b3IgICAgPSAzMDAwICogd2lk
dGggLyByd2k7CisgICAgICBhZGp1c3RlZF9oZWlnaHQgPSBoZWlnaHQgKiAzMDAvc2NhbGVfZmFj
dG9yOworICAgICAgYWRqdXN0ZWRfbGx4ICAgID0gbGx4ICAgICogMzAwL3NjYWxlX2ZhY3RvcjsK
KworICAgICAgLyogV2UgY2Fubm90IHVzZSBta3N0ZW1wLCBhcyB3ZSBjYW5ub3QgcGFzcyB0d28g
b3BlbiBmaWxlIGRlc2NyaXB0b3JzCisJIHBvcnRhYmx5IHRvIEdob3N0c2NyaXB0LiBXZSBkb24n
dCB3YW50IHRvIHVzZSB0bXBuYW0oKSBvciB0ZW1wbmFtKCkKKwkgZWl0aGVyLCBhcyB0aGV5IGhh
dmUgdGVtcGZpbGUgY3JlYXRpb24gcmFjZSBjb25kaXRpb25zLiBJbnN0ZWFkIHdlCisJIGNyZWF0
ZSBhIHRlbXBvcmFyeSBkaXJlY3Rvcnkgd2l0aCBta2R0ZW1wKCkgLS0gaWYgdGhhdCdzIGF2YWls
YWJsZS4KKwkgSWYgbm90LCB3ZSBhcmUgdGhyb3duIGJhY2sgdG8gdGVtcG5hbSgpLCB0byBnZXQg
b3VyIGZ1bmN0aW9uYWxpdHkKKwkgYXQgYWxsLiBXZSBuZWVkIHRvIGNyZWF0ZSB0aGUgdGVtcG9y
YXJ5IGRpcmVjdG9yeSBvbmx5IG9uY2UgcGVyCisJIHJ1bjsgaXQgd2lsbCBiZSBkZWxldGVkIGlu
IEFsbERvbmUoKS4gKi8KKyAgICAgIGlmICggdG1wX2RpclswXSA9PSAnXDAnICkgeworCWNoYXIg
KiBiYXNlX2RpcjsKKwlpZiAoIChiYXNlX2RpciA9IGdldGVudigiVE1QRElSIikpID09IE5VTEwg
KSB7CisJICBiYXNlX2RpciA9ICIvdG1wIjsKKwl9IGVsc2UgaWYgKCBzdHJsZW4oYmFzZV9kaXIp
ID4gU1RSU0laRSAtIHNpemVvZigiL2R2aWxqa1hYWFhYWC9pbmNsdWRlLnBjbCIpICkgeworCSAg
V2FybmluZyAoIlRNUERJUiAlcyBpcyB0b28gbG9uZywgdXNpbmcgL3RtcCBpbnN0ZWFkIiwgYmFz
ZV9kaXIpOworCSAgYmFzZV9kaXIgPSAiL3RtcCI7CisJfQorCWlmICggYmFzZV9kaXJbMF0gPT0g
Jy8nICAmJiBiYXNlX2RpclsxXSA9PSAnXDAnICkgeworCSAgV2FybmluZyAoIkZlZWxpbmcgbmF1
Z2h0eSwgZG8gd2U/IC8gaXMgbm8gdGVtcG9yYXJ5IGRpcmVjdG9yeSwgZHVkZSIpOworCSAgYmFz
ZV9kaXIgPSAiL3RtcCI7CisJfQorCXN0cmNweSAodG1wX2RpciwgYmFzZV9kaXIpOworCXN0cmNh
dCAodG1wX2RpciwgIi9kdmlsamtYWFhYWFgiKTsKKwlpZiAoIG1rZHRlbXAodG1wX2RpcikgPT0g
TlVMTCApIHsKKwkgIFdhcm5pbmcgKCJDb3VsZCBub3QgY3JlYXRlIHRlbXBvcmFyeSBkaXJlY3Rv
cnkgJXMsIGVycm5vID0gJWQ7IGlnbm9yaW5nIGluY2x1ZGUgZmlsZSBzcGVjaWFsIiwKKwkJICAg
dG1wX2RpciwgZXJybm8pOworCSAgcmV0dXJuOworCX0KKyAgICAgIH0KKyAgICAgIHN0cmNweShw
Y2xfZmlsZSwgdG1wX2Rpcik7CisgICAgICBzdHJjYXQocGNsX2ZpbGUsICIvaW5jbHVkZS5wY2wi
KTsKKyAgICAgIHN0cmNweShzY2FsZV9maWxlLCB0bXBfZGlyKTsKKyAgICAgIHN0cmNhdChzY2Fs
ZV9maWxlLCAiL3NjYWxlLnBzIik7CisKKyAgICAgIGlmICggKHNjYWxlZiA9IEJPVVRPUEVOKHNj
YWxlX2ZpbGUpKSA9PSBGUE5VTEwgKSB7CisJV2FybmluZygiVW5hYmxlIHRvIG9wZW4gZmlsZSAl
cyBmb3Igd3JpdGluZyIsIHNjYWxlX2ZpbGUgKTsKKwlmcmVlIChpbmNsdWRlX2ZpbGUpOworCXVu
bGluayhzY2FsZV9maWxlKTsJCS8qIGlnbm9yZSBlcnJvciAqLworCXJldHVybjsKKyAgICAgIH0K
KyAgICAgIGZwcmludGYoc2NhbGVmLCAiJS4yZiAlLjJmIHNjYWxlXG4lZCAlZCB0cmFuc2xhdGVc
biIsCisJICAgICAgMzAwLjAvc2NhbGVfZmFjdG9yLCAzMDAuMC9zY2FsZV9mYWN0b3IsCisJICAg
ICAgMCwgYWRqdXN0ZWRfaGVpZ2h0ID09IGhlaWdodCA/IDAgOiB1cnkpOworICAgICAgQkNMT1NF
KCBzY2FsZWYgKTsKIAogI2lmZGVmIFdJTjMyCi0JZ3NfcGF0aCA9IGdldGVudigiR1NfUEFUSCIp
OwotCWlmICghZ3NfcGF0aCkKLQkgIGdzX3BhdGggPSAiZ3N3aW4zMmMuZXhlIjsKLSAgICAgICAg
c3ByaW50ZihjbWQsIiVzIC1xIC1kU0lNUExFIC1kU0FGRVIgLWROT1BBVVNFIC1zREVWSUNFPSVz
IC1zT3V0cHV0RmlsZT0lcyAlcyAlcyBzaG93cGFnZS5wcyAtYyBxdWl0IiwKLQkJZ3NfcGF0aCwg
cHJpbnRlciwgcGNsX2ZpbGUsIHNjYWxlX2ZpbGUsIHBzZmlsZSk7CisgICAgICBpZiAoIChnc19j
bWQgPSBnZXRlbnYoIkdTX1BBVEgiKSkgPT0gTlVMTCApCisJZ3NfY21kID0gImdzd2luMzJjLmV4
ZSI7CiAjZWxzZQotICAgICAgICBzcHJpbnRmKGNtZCwiZ3MgLXEgLWRTSU1QTEUgLWRTQUZFUiAt
ZE5PUEFVU0UgLXNERVZJQ0U9JXMgLXNPdXRwdXRGaWxlPSVzICVzICVzIHNob3dwYWdlLnBzIC1j
IHF1aXQiLAotICAgICAgICAgICAgICAgIHByaW50ZXIsIHBjbF9maWxlLCBzY2FsZV9maWxlLCBw
c2ZpbGUpOworICAgICAgZ3NfY21kID0gImdzIjsKICNlbmRpZgorICAgICAgaWYgKCBzdHJsZW4o
Y21kX2Zvcm1hdCktMTAgKyBzdHJsZW4oZ3NfY21kKSArIHN0cmxlbihwcmludGVyKSArCisJICAg
ICAgIHN0cmxlbihwY2xfZmlsZSkgKyBzdHJsZW4oc2NhbGVfZmlsZSkgKyBzdHJsZW4oaW5jbHVk
ZV9maWxlKSArMSA+CisJICAgc2l6ZW9mKGNtZCkgKSB7CisJV2FybmluZyAoIkdob3N0c2NyaXB0
IGNvbW1hbmQgZm9yICVzIHdvdWxkIGJlIHRvbyBsb25nLCBza2lwcGluZyBzcGVjaWFsIiwgaW5j
bHVkZV9maWxlKTsKKwlmcmVlIChpbmNsdWRlX2ZpbGUpOworCXVubGluayhzY2FsZV9maWxlKTsJ
CS8qIGlnbm9yZSBlcnJvcnMgKi8KKwl1bmxpbmsocGNsX2ZpbGUpOworCXJldHVybjsKKyAgICAg
IH0KKyAgICAgIHNwcmludGYoY21kLCBjbWRfZm9ybWF0LAorCSAgICAgIGdzX2NtZCwgcHJpbnRl
ciwgcGNsX2ZpbGUsIHNjYWxlX2ZpbGUsIGluY2x1ZGVfZmlsZSk7CiAjaWZkZWYgREVCVUdHUyAg
IAogICAgICAgICBmcHJpbnRmKHN0ZGVyciwKICAgICAgICAgICAiUFMtZmlsZSAnJXMnIHc9JWQs
IGg9JWQsIHVyeD0lZCwgdXJ5PSVkLCBsbHg9JWQsIGxseT0lZCwgcndpPSVkXG4iLAotICAgICAg
ICAgICAgICAgIHBzZmlsZSwgdXJ4IC0gbGx4LCBoZWlnaHQsIHVyeCx1cnksbGx4LGxseSwgcndp
KTsKKwkgICAgICBpbmNsdWRlX2ZpbGUsIHVyeCAtIGxseCwgaGVpZ2h0LCB1cngsdXJ5LGxseCxs
bHksIHJ3aSk7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCIlc1xuIixjbWQpOwogI2VuZGlmCiAg
ICAgICAgIGlmIChzeXN0ZW0oY21kKSkgewpAQCAtNDE1OCwxMSArNDIxMCwyMSBAQCBpbnQgIG47
CiAjZW5kaWYKIAogICAgICAgICAgIENvcHlIUEZpbGUoIHBjbF9maWxlICk7Ci0gICAgICAgICAg
LyogdW5saW5rKHBjbF9maWxlKTsgKi8KLSAgICAgICAgICAvKiB1bmxpbmsoc2NhbGVfZmlsZSk7
ICovCi0gICAgICAgIH0KICAgICAgIH0KKyAgICAgIHVubGluayhzY2FsZV9maWxlKTsJCS8qIGln
bm9yZSBlcnJvcnMgKi8KKyAgICAgIHVubGluayhwY2xfZmlsZSk7CisgICAgfQorICAgIGVsc2UK
ICNlbmRpZiAvKiBMSiAqLworCisgICAgaWYgKCBmaWxlX3R5cGUgPT0gSFBGaWxlICkKKyAgICAg
IENvcHlIUEZpbGUoIGluY2x1ZGVfZmlsZSApOworICAgIGVsc2UgaWYgKCBmaWxlX3R5cGUgPT0g
VmVyYkZpbGUgKQorICAgICAgQ29weUZpbGUoIGluY2x1ZGVfZmlsZSApOworICAgIGVsc2UKKyAg
ICAgIFdhcm5pbmcgKCJUaGlzIGNhbid0IGhhcHBlbjogdW5rbm93biBmaWxlX3R5cGUgdmFsdWUg
JWQiLCBmaWxlX3R5cGUpOworCisgICAgaWYgKCBpbmNsdWRlX2ZpbGUgIT0gTlVMTCApICBmcmVl
KGluY2x1ZGVfZmlsZSk7CiAgIH0KIH0KIApAQCAtNDE3MywxMiArNDIzNSwxMSBAQCBpbnQgIG47
CiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgR2V0S2V5
U3RyICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBl
eHRyYWN0IGZpcnN0IGtleXdvcmQtdmFsdWUgcGFpciBmcm9tIHN0cmluZyAodmFsdWUgcGFydCBt
YXkgYmUgbnVsbCkKLSAqIHJldHVybiBwb2ludGVyIHRvIHJlbWFpbmRlciBvZiBzdHJpbmcKLSAq
IHJldHVybiBOVUxMIGlmIG5vbmUgZm91bmQKKy8qIEV4dHJhY3QgZmlyc3Qga2V5d29yZC12YWx1
ZSBwYWlyIGZyb20gc3RyaW5nICh2YWx1ZSBwYXJ0IG1heSBiZSBudWxsKSwKKyAqIGtleXdvcmQg
YW5kIHZhbHVlIGFyZSBhbGxvY2F0ZWQgYW5kIG11c3QgYmUgZnJlZSBieSBjYWxsZXIuCisgKiBS
ZXR1cm4gcG9pbnRlciB0byByZW1haW5kZXIgb2Ygc3RyaW5nLAorICogcmV0dXJuIE5VTEwgaWYg
bm9uZSBmb3VuZC4KICAqLwotY2hhciAgICBLZXlTdHJbU1RSU0laRV07Ci1jaGFyICAgIFZhbFN0
cltTVFJTSVpFXTsKICNpZiBOZWVkRnVuY3Rpb25Qcm90b3R5cGVzCiBjaGFyICpHZXRLZXlTdHIo
Y2hhciAqc3RyLCBLZXlXb3JkICprdyApCiAjZWxzZQpAQCAtNDE4NywzOSArNDI0OCw0NiBAQCBj
aGFyICAgICpzdHI7CiBLZXlXb3JkICprdzsKICNlbmRpZgogewotICBjaGFyICAgICpzLCAqaywg
KnYsIHQ7CisgIGNoYXIgKnMsICpzdGFydDsKKyAgY2hhciBzYXZlX2NoYXIsIHF1b3RlX2NoYXI7
CiAgIGlmICggIXN0ciApCiAgICAgcmV0dXJuKCBOVUxMICk7CiAgIGZvciAocyA9IHN0cjsgKnMg
PT0gJyAnOyBzKyspCiAgICAgOyAgICAgICAgICAvKiBza2lwIG92ZXIgYmxhbmtzICovCiAgIGlm
ICgqcyA9PSAnXDAnKQogICAgIHJldHVybiggTlVMTCApOwotICBmb3IgKGsgPSBLZXlTdHI7IC8q
IGV4dHJhY3Qga2V5d29yZCBwb3J0aW9uICovCi0gICAgICAgKnMgIT0gJyAnICYmICpzICE9ICdc
MCcgJiYgKnMgIT0gJz0nOwotICAgICAgICprKysgPSAqcysrKQotICAgIDsKLSAgKmsgPSAnXDAn
OwotICBrdy0+S2V5ID0gS2V5U3RyOwotICBrdy0+VmFsID0gdiA9IE5VTEw7CisgIHN0YXJ0ID0g
cysrOwkJCQkvKiBzdGFydCBvZiBrZXl3b3JkICovCisgIHdoaWxlICggKnMgIT0gJyAnICYmICpz
ICE9ICdcMCcgJiYgKnMgIT0gJz0nICkgIC8qIGxvY2F0ZSBlbmQgKi8KKyAgICBzKys7CisgIHNh
dmVfY2hhciA9ICpzOworICAqcyA9ICdcMCc7CisgIGt3LT5LZXkgPSB4c3RyZHVwKHN0YXJ0KTsK
KyAga3ctPlZhbCA9IE5VTEw7CiAgIGt3LT52dCA9IE5vbmU7Ci0gIGZvciAoIDsgKnMgPT0gJyAn
OyBzKyspCi0gICAgOyAgICAgICAgICAgIC8qIHNraXAgb3ZlciBibGFua3MgKi8KLSAgaWYgKCAq
cyAhPSAnPScgKSAgICAgICAgIC8qIGxvb2sgZm9yICI9IiAqLworICBpZiAoIHNhdmVfY2hhciA9
PSAnXDAnICkJCS8qIHNob3J0Y3V0IHdoZW4gd2UncmUgYXQgdGhlIGVuZCAqLworICAgIHJldHVy
biAocyk7CisgICpzID0gc2F2ZV9jaGFyOwkJCS8qIHJlc3RvcmUga2V5d29yZCBlbmQgY2hhciAq
LworICB3aGlsZSAoICpzID09ICcgJyApIHMrKyA7CQkvKiBza2lwIG92ZXIgYmxhbmtzICovCisg
IGlmICggKnMgIT0gJz0nICkJCQkvKiBubyAiPSIgbWVhbnMgbm8gdmFsdWUgKi8KICAgICByZXR1
cm4oIHMgKTsKLSAgZm9yIChzKys7ICpzID09ICcgJzsgcysrKTsgICAgICAvKiBza2lwIG92ZXIg
YmxhbmtzICovCi0gIGlmICggKnMgPT0gJ1wnJyB8fCAqcyA9PSAnXCInICkgIC8qIGdldCBzdHJp
bmcgZGVsaW1pdGVyICovCi0gICAgdCA9ICpzKys7CisgIGZvciAocysrOyAqcyA9PSAnICc7IHMr
KykKKyAgICA7CQkJCQkvKiBza2lwIG92ZXIgYmxhbmtzICovCisgIGlmICggKnMgPT0gJ1wnJyB8
fCAqcyA9PSAnXCInICkJLyogZ2V0IHN0cmluZyBkZWxpbWl0ZXIgKi8KKyAgICBxdW90ZV9jaGFy
ID0gKnMrKzsKICAgZWxzZQotICAgIHQgPSAnICc7Ci0gIGZvciAodiA9IFZhbFN0cjsgLyogY29w
eSB2YWx1ZSBwb3J0aW9uIHVwIHRvIGRlbGltICovCi0gICAgICAgKnMgIT0gdCAmJiAqcyAhPSAn
XDAnOwotICAgICAgICp2KysgPSAqcysrKQotICAgIDsKLSAgaWYgKCB0ICE9ICcgJyAmJiAqcyA9
PSB0ICkKLSAgICBzKys7Ci0gICp2ID0gJ1wwJzsKLSAga3ctPlZhbCA9IFZhbFN0cjsKKyAgICBx
dW90ZV9jaGFyID0gJyAnOworICBzdGFydCA9IHM7CQkJCS8qIG5vIGluY3JlbWVudCwgbWlnaHQg
YmUgIiIgYXMgdmFsdWUgKi8KKyAgd2hpbGUgKCAqcyAhPSBxdW90ZV9jaGFyICYmICpzICE9ICdc
MCcgKQorICAgIHMrKzsJCQkgIC8qIGxvY2F0ZSBlbmQgb2YgdmFsdWUgcG9ydGlvbiAqLworICBz
YXZlX2NoYXIgPSAqczsKKyAgKnMgPSAnXDAnOworICBrdy0+VmFsID0geHN0cmR1cChzdGFydCk7
CiAgIGt3LT52dCA9IFN0cmluZzsKKyAgaWYgKCBzYXZlX2NoYXIgIT0gJ1wwJyApIHsJCS8qIHNh
dmVfY2hhciBpcyBub3cgcXVvdGVfY2hhciAqLworICAgICpzID0gc2F2ZV9jaGFyOworICAgIGlm
ICggcXVvdGVfY2hhciAhPSAnICcgKQkJLyogd2UgaGFkIHJlYWwgcXVvdGUgY2hhcnMgKi8KKyAg
ICAgIHMrKzsKKyAgfQogICByZXR1cm4oIHMgKTsKIH0KIApAQCAtNDgxOSwxMyArNDg4NywxNCBA
QCBzdHJ1Y3QgZm9udF9lbnRyeSAqZm9udHB0cjsKICAgICAgdGhlIHJlc2lkZW50IGZvbnRzLiAg
Ki8KICAgaWYgKHRmbV9yZWFkX2luZm8oZm9udHB0ci0+biwgJnRmbV9pbmZvKQogICAgICAgJiYg
dGZtX2luZm8uZmFtaWx5WzBdCi0gICAgICAmJiBzdHJjbXAoKGNoYXIgKil0Zm1faW5mby5mYW1p
bHksICJIUEFVVE9URk0iKSA9PSAwKSB7CisgICAgICAmJiBFUSgoY2hhciAqKXRmbV9pbmZvLmZh
bWlseSwgIkhQQVVUT1RGTSIpKSB7CiAgICAgdW5zaWduZWQgaTsKICAgICBkb3VibGUgZmFjdG9y
ID0gZm9udHB0ci0+cyAvIChkb3VibGUpMHgxMDAwMDA7CiAKICAgICByZXNpZGVudF9jb3VudCsr
OwogICAgIGZvbnRwdHItPnJlc2lkZW50X3AgPSBfVFJVRTsKLSAgICBzdHJjcHkoZm9udHB0ci0+
c3ltYm9sX3NldCwgKGNoYXIgKil0Zm1faW5mby5jb2Rpbmdfc2NoZW1lKTsKKyAgICBzdHJuY3B5
KGZvbnRwdHItPnN5bWJvbF9zZXQsIChjaGFyICopdGZtX2luZm8uY29kaW5nX3NjaGVtZSwgMzkp
OworICAgIGZvbnRwdHItPnN5bWJvbF9zZXRbMzldID0gJ1wwJzsKICAgICBmb250cHRyLT5yZXNp
ZCA9IHRmbV9pbmZvLnR5cGVmYWNlX2lkOwogICAgIGZvbnRwdHItPnNwYWNpbmcgPSB0Zm1faW5m
by5zcGFjaW5nOwogICAgIGZvbnRwdHItPnN0eWxlID0gdGZtX2luZm8uc3R5bGU7CkBAIC00ODc4
LDcgKzQ5NDcsNyBAQCBzdHJ1Y3QgZm9udF9lbnRyeSAqZm9udHB0cjsKICAgICBmb250cHRyLT5y
ZXNpZGVudF9wID0gX0ZBTFNFOwogCiAgICAgaWYgKHRmbV9pbmZvLmZhbWlseVswXQotICAgICAg
ICAmJiBzdHJjbXAoKGNoYXIgKil0Zm1faW5mby5mYW1pbHksICJVTlNQRUNJRklFRCIpID09IDAp
IHsKKyAgICAgICAgJiYgRVEoKGNoYXIgKil0Zm1faW5mby5mYW1pbHksICJVTlNQRUNJRklFRCIp
KSB7CiAgICAgICBXYXJuaW5nKCJmb250IGZhbWlseSBmb3IgJXMgaXMgVU5TUEVDSUZJRUQ7IG5l
ZWQgdG8gcnVuIGR2aWNvcHk/IiwKICAgICAgICAgICAgICAgZm9udHB0ci0+bik7CiAgICAgICBm
b250cHRyLT5mb250X2ZpbGVfaWQgPSBOT19GSUxFOwpAQCAtNTAzMSwxMCArNTEwMCw5IEBAIHBy
aW50ZigiWyVsZF09JWxmICogJWxmICogJWxmICsgMC41ID0gJWwKICAgaWYgKHRmb250cHRyLT5y
ZXNpZGVudF9wKQogICAgIHJldHVybjsKIAotICBpZiAoIShyZXNpZGVudF9mb250X2xvY2F0ZWQp
KSB7CisgIGlmICghKHJlc2lkZW50X2ZvbnRfbG9jYXRlZCkpCiAjZW5kaWYKIAotI2lmZGVmIEtQ
QVRIU0VBCiAgICAgewogICAgICAga3BzZV9nbHlwaF9maWxlX3R5cGUgZm9udF9yZXQ7CiAgICAg
ICBjaGFyICpuYW1lOwpAQCAtNTA0Nyw5ICs1MTE1LDkgQEAgcHJpbnRmKCJbJWxkXT0lbGYgKiAl
bGYgKiAlbGYgKyAwLjUgPSAlbAogICAgICAgaWYgKG5hbWUpCiAgICAgICAgIHsKICAgICAgICAg
ICBmb250X2ZvdW5kID0gX1RSVUU7Ci0gICAgICAgICAgc3RyY3B5ICh0Zm9udHB0ci0+bmFtZSwg
bmFtZSk7Ci0gICAgICAgICAgZnJlZSAobmFtZSk7Ci0gICAgICAgICAgCisgICAgICAgICAgdGZv
bnRwdHItPm5hbWUgPSBuYW1lOworICAgICAgICAgIGFsbG9jYXRlZF9zdG9yYWdlICs9IHN0cmxl
bihuYW1lKSsxOworCiAgICAgICAgICAgaWYgKCFGSUxFU1RSQ0FTRUVRICh0Zm9udHB0ci0+biwg
Zm9udF9yZXQubmFtZSkpIHsKICAgICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLAogICAgICAg
ICAgICAgICAgICAgICAgICAiZHZpbGo6IEZvbnQgJXMgbm90IGZvdW5kLCB1c2luZyAlcyBhdCAl
ZCBpbnN0ZWFkLlxuIiwKQEAgLTUwNzEsMjkgKzUxMzksNiBAQCBwcmludGYoIlslbGRdPSVsZiAq
ICVsZiAqICVsZiArIDAuNSA9ICVsCiAgICAgICAgICAgICB0Zm9udHB0ci0+biwgZHBpKTsKICAg
ICAgICAgfQogICAgIH0KLSNlbHNlIC8qIG5vdCBLUEFUSFNFQSAqLwotICAgIGlmICghKGZpbmRm
aWxlKFBYTHBhdGgsCi0gICAgICAgICAgICAgICAgICAgdGZvbnRwdHItPm4sCi0gICAgICAgICAg
ICAgICAgICAgdGZvbnRwdHItPmZvbnRfbWFnLAotICAgICAgICAgICAgICAgICAgIHRmb250cHRy
LT5uYW1lLAotICAgICAgICAgICAgICAgICAgIF9GQUxTRSwKLSAgICAgICAgICAgICAgICAgICAw
KSkpIHsKLSAgICAgIFdhcm5pbmcodGZvbnRwdHItPm5hbWUpOyAvKiBjb250YWlucyBlcnJvciBt
ZXNzc2FnZSAqLwotICAgICAgdGZvbnRwdHItPmZvbnRfZmlsZV9pZCA9IE5PX0ZJTEU7Ci0jaWZk
ZWYgX19yaXNjb3MKLSAgICAgIE1ha2VNZXRhZm9udEZpbGUoUFhMcGF0aCwgdGZvbnRwdHItPm4s
IHRmb250cHRyLT5mb250X21hZyk7Ci0jZW5kaWYKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICBm
b250X2ZvdW5kID0gX1RSVUU7Ci0gICAgICBpZiAoR192ZXJib3NlKQotICAgICAgICBmcHJpbnRm
KEVSUl9TVFJFQU0sIiVkOiB1c2luZyBmb250IDwlcz5cbiIsIHBsdXNpZCwgdGZvbnRwdHItPm5h
bWUpOwotICAgIH0KLSNlbmRpZiAvKiBub3QgS1BBVEhTRUEgKi8KLQotI2lmZGVmIExKX1JFU0lE
RU5UX0ZPTlRTCi0gIH0KLSNlbmRpZgogCiAgIHRmb250cHRyLT5wbHVzaWQgPSBwbHVzaWQ7CiAg
IHBsdXNpZCsrOwpJbmRleDogd29yay90ZXhrL2R2aWxqay9kdmkyeHguaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSB3b3JrLm9yaWcvdGV4ay9kdmlsamsvZHZpMnh4LmgKKysrIHdvcmsvdGV4ay9kdmlsamsvZHZp
Mnh4LmgKQEAgLTEwLDggKzEwLDggQEAKIAogI2lmZGVmIEtQQVRIU0VBCiAjaW5jbHVkZSA8a3Bh
dGhzZWEvY29uZmlnLmg+CisjaW5jbHVkZSA8a3BhdGhzZWEvYy1zdGQuaD4KICNpbmNsdWRlIDxr
cGF0aHNlYS9jLWxpbWl0cy5oPgotI2luY2x1ZGUgPGtwYXRoc2VhL2MtbWVtc3RyLmg+CiAjaW5j
bHVkZSA8a3BhdGhzZWEvbWFnc3RlcC5oPgogI2luY2x1ZGUgPGtwYXRoc2VhL3Byb2dpbml0Lmg+
CiAjaW5jbHVkZSA8a3BhdGhzZWEvcHJvZ25hbWUuaD4KQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNs
dWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgor
I2luY2x1ZGUgPHVuaXN0ZC5oPgogI2lmZGVmICB1bml4CiAjaW5jbHVkZSA8bGltaXRzLmg+CiAj
ZW5kaWYKQEAgLTQxLDkgKzQyLDYgQEAKICNpZmRlZiBNU0M1CiAjaW5jbHVkZSA8ZG9zLmg+ICAg
ICAvKiBvbmx5IGZvciBiaW5hcnlvcGVuIG9uIGRldmljZSAgKi8KICNlbmRpZgotI2lmIGRlZmlu
ZWQgKHVuaXgpICYmICFkZWZpbmVkIChLUEFUSFNFQSkKLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNl
bmRpZgogCiAKICNpbmNsdWRlICJjb25maWcuaCIKQEAgLTExNiw2ICsxMTQsNyBAQAogI2RlZmlu
ZSAgSFVHRV9TSVpFICAodW5zaWduZWQgY2hhcikgMgogI2RlZmluZSAgSFVHRV9DSEFSX1BBVFRF
Uk4gMzI3NjdsCiAjZGVmaW5lICBCWVRFU19QRVJfUElYRUxfTElORSA1MDAgICAgLyogbWF4IG51
bWJlciBvZiBieXRlcyBwZXIgcGl4ZWwgbGluZSAqLworI2RlZmluZSAgTUFYX1NQRUNJQUxfREVG
UE9JTlRTIDgwICAgIC8qIG1heCBudW1iZXIgb2YgZGVmcG9pbnQgc3BlY2lhbHMgKi8KIAogCiAj
ZGVmaW5lIFBLX1BPU1QgMjQ1CkBAIC0yODEsNyArMjgwLDE0IEBAIGNoYXIgKk1GTU9ERSAgICAg
PSBNRk1PREU2MDA7CiAjZGVmaW5lIFZpc0NoYXIoYykgKHVuc2lnbmVkIGNoYXIpKGMpCiAjZW5k
aWYKIAotI2RlZmluZSBHZXRCeXRlcyhmcCxidWYsbikgcmVhZF9tdWx0aShidWYsMSxuLGZwKSAv
KiB1c2VkIHRvIGJlIGEgZnVuY3Rpb24gKi8KKy8qIFVzZWQgdG8gYmUgYSBmdW5jdGlvbi4gYnVm
IGlzIGFsd2F5cyBhbiBhcnJheSwgbmV2ZXIgYSBwb2ludGVyLgorICAgV2l0aG91dCB0aGF0IGlu
dmFyaWFudCwgd2Ugd291bGQgaGF2ZSB0byBpbnRyb2R1Y2UgZnVsbCBkeW5hbWljCisgICBtZW1v
cnkgbWFuYWdlbWVudCBpbiB0aGlzIGRyaXZlciAtLSBwcm9iYWJseSBpdCB3b3VsZCBiZSBlYXNp
ZXIgdG8KKyAgIHdyaXRlIGEgbmV3IG9uZS4gWzI3IEp1biAwNyAtanNdICovCisjZGVmaW5lIEdl
dEJ5dGVzKGZwLGJ1ZixuKSBcCisgICAgKCBzaXplb2YoYnVmKSAhPSBzaXplb2Yodm9pZCAqKSAm
JiBzaXplb2YoYnVmKSA+IG4gPyBcCisgICAgICAgIHJlYWRfbXVsdGkoYnVmLCAxLCBuLCBmcCkg
XAorICAgICAgOiBGYXRhbCgiVHJ5IHRvIHJlYWQgJWQgYnl0ZXMgaW4gYW4gYXJyYXkgb2Ygc2l6
ZSAlZCIsIG4sIHNpemVvZihidWYpKSApCiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0zMDcsNiAr
MzEzLDcgQEAgaW50ICAgICBwcmludGYoKTsKIGludCAgICAgc3NjYW5mKCk7CiBpbnQgICAgIHN0
cmNtcCgpOwogY2hhciAgICpzdHJjcHkoKTsKK2NoYXIgICAqc3RybmNweSgpOwogIyAgIGlmZGVm
IE1TQzUKIHVuc2lnbmVkIGludCBzdHJsZW4oKTsKICMgICBlbmRpZgpAQCAtMzkzLDcgKzQwMCw3
IEBAIHN0cnVjdCBmb250X2VudHJ5IHsgICAgLyogZm9udCBlbnRyeSAqLwogICAgIGNoYXIgbltT
VFJTSVpFXTsgICAgICAgICAgLyogRk5UX0RFRiBjb21tYW5kIHBhcmFtZXRlcnMgICAgICAgICAg
ICAgICAgKi8KICAgICBsb25nNCAgICBmb250X21hZzsgICAgICAgICAvKiBjb21wdXRlZCBmcm9t
IEZOVF9ERUYgcyBhbmQgZCBwYXJhbWV0ZXJzICAqLwogICAgIC8qY2hhciBwc25hbWVbU1RSU0la
RV07Ki8gLyogUG9zdFNjcmlwdCBuYW1lIG9mIHRoZSBmb250ICAgICAgICAgICAgICAgKi8KLSAg
ICBjaGFyICAgIG5hbWVbU1RSU0laRV07ICAgIC8qIGZ1bGwgbmFtZSBvZiBQWEwgZmlsZSAgICAg
ICAgICAgICAgICAgICAgICovCisgICAgY2hhciAgICAqbmFtZTsJICAgICAgIC8qIGZ1bGwgbmFt
ZSBvZiBQWEwgZmlsZSAgICAgICAgICAgICAgICAgICAgICovCiAgICAgRklMRVBUUiBmb250X2Zp
bGVfaWQ7ICAgICAgLyogZmlsZSBpZGVudGlmaWVyIChOT19GSUxFIGlmIG5vbmUpICAgICAgICAg
Ki8KICNpZmRlZiBVU0VQWEwKICAgICBsb25nNCAgICBtYWduaWZpY2F0aW9uOyAgICAvKiBtYWdu
aWZpY2F0aW9uIHJlYWQgZnJvbSBQWEwgZmlsZSAgICAgICAgICAqLwpAQCAtNDg3LDggKzQ5NCw4
IEBAIHZvaWQgICAgTG9hZEFDaGFyIERWSVBST1RPKChsb25nNCwgcmVnaXMKIGxvbmc0ICAgTm9T
aWduRXh0ZW5kIERWSVBST1RPKChGSUxFUFRSLCBpbnQpKTsKIHZvaWQgICAgT3BlbkZvbnRGaWxl
IERWSVBST1RPKCh2b2lkKSk7CiBsb25nNCAgIFBpeFJvdW5kIERWSVBST1RPKChsb25nNCwgbG9u
ZzQpKTsKLXZvaWQgICAgUGtSYXN0ZXIgRFZJUFJPVE8oKHN0cnVjdCBjaGFyX2VudHJ5ICosIGlu
dCkpOyAKLXZvaWQgICAgUmFzdGVyTGluZSBEVklQUk9UTygoc3RydWN0IGNoYXJfZW50cnkgKiwg
dW5zaWduZWQgaW50LCAKK3ZvaWQgICAgUGtSYXN0ZXIgRFZJUFJPVE8oKHN0cnVjdCBjaGFyX2Vu
dHJ5ICosIGludCkpOwordm9pZCAgICBSYXN0ZXJMaW5lIERWSVBST1RPKChzdHJ1Y3QgY2hhcl9l
bnRyeSAqLCB1bnNpZ25lZCBpbnQsCiAJCQkgICAgIHVuc2lnbmVkIGludCwgdW5zaWduZWQgY2hh
ciAqKSk7CiB2b2lkICAgIFJhc3RlckNoYXIgRFZJUFJPVE8oKHN0cnVjdCBjaGFyX2VudHJ5ICop
KTsKIHZvaWQgICAgUmVhZEZvbnREZWYgRFZJUFJPVE8oKGxvbmc0KSk7CkBAIC01MzQsMTEgKzU0
MSwxMiBAQCBib29sICAgIExhc3RQYWdlU3BlY2lmaWVkID0gX0ZBTFNFOwogI2lmbmRlZiBLUEFU
SFNFQQogY2hhciAgICpQWExwYXRoID0gRk9OVEFSRUE7CiAjZW5kaWYKLWNoYXIgICAgR19wcm9n
bmFtZVtTVFJTSVpFXTsgICAgIC8qIHByb2dyYW0gbmFtZSAgICAgICAgICAgICAgICAgICAgICAg
ICovCi1jaGFyICAgIGZpbGVuYW1lW1NUUlNJWkVdOyAgICAgICAvKiBEVkkgZmlsZSBuYW1lICAg
ICAgICAgICAgICAgICAgICAgICAqLwotY2hhciAgICByb290bmFtZVtTVFJTSVpFXTsgICAgICAg
LyogRFZJIGZpbGVuYW1lIHdpdGhvdXQgZXh0ZW5zaW9uICAgICAgKi8KK2NoYXIgICAqR19wcm9n
bmFtZTsJCSAvKiBwcm9ncmFtIG5hbWUgICAgICAgICAgICAgICAgICAgICAgICAqLworY2hhciAg
ICpmaWxlbmFtZTsJICAgICAgICAgLyogRFZJIGZpbGUgbmFtZSAgICAgICAgICAgICAgICAgICAg
ICAgKi8KK2NoYXIgICAqcm9vdG5hbWU7CQkgLyogRFZJIGZpbGVuYW1lIHdpdGhvdXQgZXh0ZW5z
aW9uICAgICAgKi8KIGNoYXIgICAqSGVhZGVyRmlsZU5hbWUgPSAiIjsgICAgIC8qIGZpbGUgbmFt
ZSAmIHBhdGggb2YgSGVhZGVyZmlsZSAgICAgICovCiBjaGFyICAgKkVtaXRGaWxlTmFtZSA9ICIi
OyAgICAgICAvKiBmaWxlIG5hbWUgJiBwYXRoIGZvciBvdXRwdXQgICAgICAgICAqLworY2hhciAg
ICB0bXBfZGlyW1NUUlNJWkVdID0gIiI7CSAvKiB0ZW1wb3JhcnkgZGlyZWN0b3J5IGZvciBhdXhp
bGxpYXJ5IGZpbGVzICovCiAjaWZkZWYgSUJNMzgxMgogYm9vbCAgICBGaXJzdEFsdGVybmF0ZSA9
IF9GQUxTRTsgLyogZmlyc3QgcGFnZSBmcm9tIGFsdGVybmF0ZSBjYXNldHRlID8gICAqLwogI2Vu
ZGlmCg==
</data>        

          </attachment>
    </bug>

</bugzilla>