<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>76768</bug_id>
          
          <creation_ts>2012-01-20 21:14:37 -0800</creation_ts>
          <short_desc>DFG should not have code that directly decodes the states of old JIT inline cache data structures</short_desc>
          <delta_ts>2012-01-23 02:01:41 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>76794</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ossy</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>540045</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-01-20 21:14:37 -0800</bug_when>
    <thetext>Doing so means that the DFG is far too tied to the old JIT being the one that does the profiling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540046</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-01-20 21:15:10 -0800</bug_when>
    <thetext>&lt;rdar://problem/10734723&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540048</commentid>
    <comment_count>2</comment_count>
      <attachid>123431</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-01-20 21:20:24 -0800</bug_when>
    <thetext>Created attachment 123431
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540049</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-20 21:22:47 -0800</bug_when>
    <thetext>Attachment 123431 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;S...&quot; exit_code: 1

Source/JavaScriptCore/bytecode/GetByIdStatus.h:40:  One space before end of line comments  [whitespace/comments] [5]
Source/JavaScriptCore/bytecode/GetByIdStatus.h:41:  One space before end of line comments  [whitespace/comments] [5]
Source/JavaScriptCore/bytecode/GetByIdStatus.h:42:  One space before end of line comments  [whitespace/comments] [5]
Source/JavaScriptCore/bytecode/GetByIdStatus.h:43:  One space before end of line comments  [whitespace/comments] [5]
Total errors found: 4 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540051</commentid>
    <comment_count>4</comment_count>
      <attachid>123431</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-01-20 21:30:25 -0800</bug_when>
    <thetext>Comment on attachment 123431
the patch

View in context: https://bugs.webkit.org/attachment.cgi?id=123431&amp;action=review

&gt; Source/JavaScriptCore/bytecode/PutByIdStatus.h:44
&gt; +        NoInformation,
&gt; +        SimpleReplace,
&gt; +        SimpleTransition,
&gt; +        TakesSlowPath

Feed me comments like my brother!

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:-1879
&gt; -            if (stubInfo.seen
&gt; -                &amp;&amp; !m_inlineStackTop-&gt;m_profiledBlock-&gt;likelyToTakeSlowCase(m_currentIndex)
&gt; -                &amp;&amp; !m_inlineStackTop-&gt;m_exitProfile.hasExitSite(m_currentIndex, BadCache)) {

You said this is a bugish thingy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540053</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-01-20 21:40:24 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 123431 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=123431&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/PutByIdStatus.h:44
&gt; &gt; +        NoInformation,
&gt; &gt; +        SimpleReplace,
&gt; &gt; +        SimpleTransition,
&gt; &gt; +        TakesSlowPath
&gt; 
&gt; Feed me comments like my brother!
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:-1879
&gt; &gt; -            if (stubInfo.seen
&gt; &gt; -                &amp;&amp; !m_inlineStackTop-&gt;m_profiledBlock-&gt;likelyToTakeSlowCase(m_currentIndex)
&gt; &gt; -                &amp;&amp; !m_inlineStackTop-&gt;m_exitProfile.hasExitSite(m_currentIndex, BadCache)) {
&gt; 
&gt; You said this is a bugish thingy.

To elaborate: the old code was checking hasExitSite - a DFG-specific query that tells if the DFG&apos;s attempt to optimize this code failed last time.  The new code wasn&apos;t doing this, which was buggish and also a thingy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540197</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-01-21 17:37:20 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/105581</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540226</commentid>
    <comment_count>7</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-01-22 00:38:35 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; Landed in http://trac.webkit.org/changeset/105581

It broke Qt ARM build:
../../../../Source/JavaScriptCore/bytecode/CallLinkStatus.cpp: In static member function &apos;static JSC::CallLinkStatus JSC::CallLinkStatus::computeFor(JSC::CodeBlock*, unsigned int)&apos;:
../../../../Source/JavaScriptCore/bytecode/CallLinkStatus.cpp:38: error: &apos;class JSC::CodeBlock&apos; has no member named &apos;couldTakeSlowCase&apos;

And Qt Windows build:
../../../../Source/JavaScriptCore/bytecode/GetByIdStatus.cpp: In static member function &apos;static JSC::GetByIdStatus JSC::GetByIdStatus::computeFor(JSC::CodeBlock*, unsigned int, JSC::Identifier&amp;)&apos;:
../../../../Source/JavaScriptCore/bytecode/GetByIdStatus.cpp:64:24: error: &apos;class JSC::CodeBlock&apos; has no member named &apos;likelyToTakeSlowCase&apos;
../../../../Source/JavaScriptCore/bytecode/PutByIdStatus.cpp: In static member function &apos;static JSC::PutByIdStatus JSC::PutByIdStatus::computeFor(JSC::CodeBlock*, unsigned int, JSC::Identifier&amp;)&apos;:
../../../../Source/JavaScriptCore/bytecode/PutByIdStatus.cpp:38:24: error: &apos;class JSC::CodeBlock&apos; has no member named &apos;likelyToTakeSlowCase&apos;
../../../../Source/JavaScriptCore/bytecode/CallLinkStatus.cpp: In static member function &apos;static JSC::CallLinkStatus JSC::CallLinkStatus::computeFor(JSC::CodeBlock*, unsigned int)&apos;:
../../../../Source/JavaScriptCore/bytecode/CallLinkStatus.cpp:38:24: error: &apos;class JSC::CodeBlock&apos; has no member named &apos;couldTakeSlowCase&apos;

and Qt SL, MIPS and SH4 too ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540227</commentid>
    <comment_count>8</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-01-22 00:41:33 -0800</bug_when>
    <thetext>Could you guys respect the contributing rules, please? 

http://www.webkit.org/coding/contributing.html
&quot;Keeping the tree green
...
There may be regressions from your change or additional feedback from reviewers after the patch has landed. You can watch the tree at build.webkit.org to make sure your patch builds and passes tests on all platforms.
...
Your change must at least compile on all platforms.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540443</commentid>
    <comment_count>9</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-01-23 02:01:41 -0800</bug_when>
    <thetext>Fixed by http://trac.webkit.org/changeset/105586</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123431</attachid>
            <date>2012-01-20 21:20:24 -0800</date>
            <delta_ts>2012-01-20 21:30:25 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>abstractcache_patch_1.diff</filename>
            <type>text/plain</type>
            <size>76461</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA1NTY4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkzIEBA
CisyMDEyLTAxLTIwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBub3QgaGF2ZSBjb2RlIHRoYXQgZGlyZWN0bHkgZGVjb2RlcyB0aGUgc3RhdGVz
IG9mIG9sZCBKSVQgaW5saW5lCisgICAgICAgIGNhY2hlIGRhdGEgc3RydWN0dXJlcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY3NjgKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIEludHJvZHVj
ZWQgbmV3IGNsYXNzZXMgKGxpa2UgR2V0QnlJZFN0YXR1cykgdGhhdCBlbmNhcHN1bGF0ZSB0aGUg
c2V0IG9mIHRoaW5ncworICAgICAgICB0aGF0IHRoZSBERkcgd291bGQgbGlrZSB0byBrbm93IGFi
b3V0IHByb3BlcnR5IGFjY2Vzc2VzIGFuZCBjYWxscy4gV2hlcmVhcyBpdAorICAgICAgICBwcmV2
aW91c2x5IGdvdCB0aGlzIGluZm9ybWF0aW9uIGJ5IGRpcmVjdGx5IGRlY29kaW5nIHRoZSBkYXRh
IHN0cnVjdHVyZXMgdXNlZAorICAgICAgICBieSB0aGUgb2xkIEpJVCBmb3IgaW5saW5lIGNhY2hp
bmcsIGl0IG5vdyB1c2VzIHRoZXNlIGNsYXNzZXMsIHdoaWNoIGRvIHRoZSB3b3JrCisgICAgICAg
IGZvciBpdC4gVGhpcyBzaG91bGQgbWFrZSBpdCBzb21ld2hhdCBtb3JlIHN0cmFpZ2h0IGZvcndh
cmQgdG8gaW50cm9kdWNlIG5ldworICAgICAgICB3YXlzIG9mIHByb2ZpbGluZyB0aGUgc2FtZSBp
bmZvcm1hdGlvbi4KKyAgICAgICAgCisgICAgICAgIEFsc28gaG9pc3RlZCBTdHJ1Y3R1cmVTZXQg
aW50byBieXRlY29kZS8gZnJvbSBkZmcvLCBiZWNhdXNlIGl0J3Mgbm93IHVzZWQgYnkKKyAgICAg
ICAgY29kZSBpbiBieXRlY29kZS8uCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAg
ICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjcHJv
ai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2o6CisgICAgICAgICogSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUYXJnZXQucHJp
OgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcDogQWRkZWQuCisgICAgICAg
IChKU0M6OkNhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAgKiBieXRlY29kZS9D
YWxsTGlua1N0YXR1cy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0dXM6OkNh
bGxMaW5rU3RhdHVzKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0dXM6OmlzU2V0KToKKyAg
ICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0dXM6Om9wZXJhdG9yISk6CisgICAgICAgIChKU0M6OkNh
bGxMaW5rU3RhdHVzOjpjb3VsZFRha2VTbG93UGF0aCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5r
U3RhdHVzOjpjYWxsVGFyZ2V0KToKKyAgICAgICAgKiBieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNw
cDogQWRkZWQuCisgICAgICAgIChKU0M6OkdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IpOgorICAg
ICAgICAqIGJ5dGVjb2RlL0dldEJ5SWRTdGF0dXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6Okdl
dEJ5SWRTdGF0dXM6OkdldEJ5SWRTdGF0dXMpOgorICAgICAgICAoSlNDOjpHZXRCeUlkU3RhdHVz
OjpzdGF0ZSk6CisgICAgICAgIChKU0M6OkdldEJ5SWRTdGF0dXM6OmlzU2V0KToKKyAgICAgICAg
KEpTQzo6R2V0QnlJZFN0YXR1czo6b3BlcmF0b3IhKToKKyAgICAgICAgKEpTQzo6R2V0QnlJZFN0
YXR1czo6aXNTaW1wbGVEaXJlY3QpOgorICAgICAgICAoSlNDOjpHZXRCeUlkU3RhdHVzOjp0YWtl
c1Nsb3dQYXRoKToKKyAgICAgICAgKEpTQzo6R2V0QnlJZFN0YXR1czo6bWFrZXNDYWxscyk6Cisg
ICAgICAgIChKU0M6OkdldEJ5SWRTdGF0dXM6OnN0cnVjdHVyZVNldCk6CisgICAgICAgIChKU0M6
OkdldEJ5SWRTdGF0dXM6Om9mZnNldCk6CisgICAgICAgICogYnl0ZWNvZGUvTWV0aG9kQ2FsbExp
bmtTdGF0dXMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6TWV0aG9kQ2FsbExpbmtTdGF0dXM6
OmNvbXB1dGVGb3IpOgorICAgICAgICAqIGJ5dGVjb2RlL01ldGhvZENhbGxMaW5rU3RhdHVzLmg6
IEFkZGVkLgorICAgICAgICAoSlNDOjpNZXRob2RDYWxsTGlua1N0YXR1czo6TWV0aG9kQ2FsbExp
bmtTdGF0dXMpOgorICAgICAgICAoSlNDOjpNZXRob2RDYWxsTGlua1N0YXR1czo6aXNTZXQpOgor
ICAgICAgICAoSlNDOjpNZXRob2RDYWxsTGlua1N0YXR1czo6b3BlcmF0b3IhKToKKyAgICAgICAg
KEpTQzo6TWV0aG9kQ2FsbExpbmtTdGF0dXM6Om5lZWRzUHJvdG90eXBlQ2hlY2spOgorICAgICAg
ICAoSlNDOjpNZXRob2RDYWxsTGlua1N0YXR1czo6c3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6
TWV0aG9kQ2FsbExpbmtTdGF0dXM6OnByb3RvdHlwZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6
Ok1ldGhvZENhbGxMaW5rU3RhdHVzOjpmdW5jdGlvbik6CisgICAgICAgIChKU0M6Ok1ldGhvZENh
bGxMaW5rU3RhdHVzOjpwcm90b3R5cGUpOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5SWRTdGF0
dXMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6UHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcik6
CisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6UHV0QnlJZFN0YXR1czo6UHV0QnlJZFN0YXR1cyk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRT
dGF0dXM6OnN0YXRlKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFN0YXR1czo6aXNTZXQpOgorICAg
ICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpvcGVyYXRvciEpOgorICAgICAgICAoSlNDOjpQdXRC
eUlkU3RhdHVzOjppc1NpbXBsZVJlcGxhY2UpOgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVz
Ojppc1NpbXBsZVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjp0YWtl
c1Nsb3dQYXRoKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFN0YXR1czo6b2xkU3RydWN0dXJlKToK
KyAgICAgICAgKEpTQzo6UHV0QnlJZFN0YXR1czo6bmV3U3RydWN0dXJlKToKKyAgICAgICAgKEpT
Qzo6UHV0QnlJZFN0YXR1czo6c3RydWN0dXJlQ2hhaW4pOgorICAgICAgICAoSlNDOjpQdXRCeUlk
U3RhdHVzOjpvZmZzZXQpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVNldC5oOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjpTdHJ1Y3R1cmVTZXQpOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmVTZXQ6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0Ojph
ZGQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OmFkZEFsbCk6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZVNldDo6cmVtb3ZlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0Ojpjb250
YWlucyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNldDo6aXNTdWJzZXRPZik6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZVNldDo6aXNTdXBlcnNldE9mKToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlU2V0OjpzaXplKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjphdCk6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZVNldDo6b3BlcmF0b3JbXSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZVNldDo6bGFzdCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNldDo6cHJlZGljdGlvbkZyb21T
dHJ1Y3R1cmVzKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjpvcGVyYXRvcj09KToKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJh
Y3RWYWx1ZS5oOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwpOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHU3RydWN0
dXJlU2V0Lmg6IFJlbW92ZWQuCisKIDIwMTItMDEtMjAgIERhdmlkIExldmluICA8bGV2aW5AY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIE1ha2UgT3duUHRyPEhEQz4gd29yayBmb3IgdGhlIENocm9t
aXVtIFdpbmRvd3MgcG9ydC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJ
KHJldmlzaW9uIDEwNTUzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTIgKzM1LDE2IEBAIFNFVChKYXZhU2NyaXB0Q29yZV9T
T1VSQ0VTCiAgICAgQVBJL09wYXF1ZUpTU3RyaW5nLmNwcAogCiAgICAgYnl0ZWNvZGUvQ2FsbExp
bmtJbmZvLmNwcAorICAgIGJ5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcAogICAgIGJ5dGVjb2Rl
L0NvZGVCbG9jay5jcHAKICAgICBieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5jcHAKKyAgICBieXRl
Y29kZS9HZXRCeUlkU3RhdHVzLmNwcAogICAgIGJ5dGVjb2RlL0p1bXBUYWJsZS5jcHAKICAgICBi
eXRlY29kZS9NZXRob2RDYWxsTGlua0luZm8uY3BwCisgICAgYnl0ZWNvZGUvTWV0aG9kQ2FsbExp
bmtTdGF0dXMuY3BwCiAgICAgYnl0ZWNvZGUvT3Bjb2RlLmNwcAogICAgIGJ5dGVjb2RlL1ByZWRp
Y3RlZFR5cGUuY3BwCisgICAgYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKICAgICBieXRlY29k
ZS9TYW1wbGluZ1Rvb2wuY3BwCiAgICAgYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCiAg
ICAgYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDEwNTUzOSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC04Myw2ICs4Myw4
IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvWDg2QXNzZW1ibGVyLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9DYWxsTGlua0luZm8uY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2Fs
bExpbmtJbmZvLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0
YXR1cy5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1
cy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbFJldHVybk9mZnNldFRv
Qnl0ZWNvZGVPZmZzZXQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVU
eXBlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwIFwK
QEAgLTkzLDYgKzk1LDggQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RGR0V4aXRQcm9maWxlLmggXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9FdmFsQ29kZUNhY2hlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9FeHByZXNzaW9uUmFuZ2VJbmZvLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0dldEJ5SWRTdGF0dXMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0dsb2JhbFJlc29sdmVJbmZvLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9I
YW5kbGVySW5mby5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rp
b24uaCBcCkBAIC0xMDEsMTEgKzEwNSwxNSBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwK
IAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGluZUluZm8uaCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGhvZENhbGxMaW5rSW5mby5jcHAgXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RDYWxsTGlua0luZm8uaCBcCisJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGhvZENhbGxMaW5rU3RhdHVzLmNwcCBcCisJU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGhvZENhbGxMaW5rU3RhdHVzLmggXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9QcmVkaWN0ZWRUeXBlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1By
ZWRpY3RlZFR5cGUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3Rp
b25UcmFja2VyLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3Rh
dHVzLmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMu
aCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NhbXBsaW5nVG9vbC5jcHAgXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TYW1wbGluZ1Rvb2wuaCBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcCBcCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkocmV2aXNpb24gMTA1NTM5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL1RhcmdldC5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTUwLDEyICs1MCwxNiBAQCBT
T1VSQ0VTICs9IFwKICAgICBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk0uY3BwIFwKICAgICBh
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJTSDQuY3BwIFwKICAgICBieXRlY29kZS9DYWxsTGlua0lu
Zm8uY3BwIFwKKyAgICBieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAgXAogICAgIGJ5dGVjb2Rl
L0NvZGVCbG9jay5jcHAgXAogICAgIGJ5dGVjb2RlL0RGR0V4aXRQcm9maWxlLmNwcCBcCisgICAg
Ynl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAgXAogICAgIGJ5dGVjb2RlL0p1bXBUYWJsZS5jcHAg
XAogICAgIGJ5dGVjb2RlL01ldGhvZENhbGxMaW5rSW5mby5jcHAgXAorICAgIGJ5dGVjb2RlL01l
dGhvZENhbGxMaW5rU3RhdHVzLmNwcCBcCiAgICAgYnl0ZWNvZGUvT3Bjb2RlLmNwcCBcCiAgICAg
Ynl0ZWNvZGUvUHJlZGljdGVkVHlwZS5jcHAgXAorICAgIGJ5dGVjb2RlL1B1dEJ5SWRTdGF0dXMu
Y3BwIFwKICAgICBieXRlY29kZS9TYW1wbGluZ1Rvb2wuY3BwIFwKICAgICBieXRlY29kZS9TdHJ1
Y3R1cmVTdHViSW5mby5jcHAgXAogICAgIGJ5dGVjb2RlL1ZhbHVlUHJvZmlsZS5jcHAgXApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3Byb2oJKHJldmlzaW9uIDEwNTUzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDUwLDYgKzE0NTAsMzggQEAKIAkJCU5hbWU9ImJ5dGVjb2RlIgog
CQkJPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGJ5dGVjb2RlXEdldEJ5SWRT
dGF0dXMuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0i
Li5cLi5cYnl0ZWNvZGVcUHV0QnlJZFN0YXR1cy5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxG
aWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxieXRlY29kZVxDYWxsTGlua1N0YXR1cy5oIgor
CQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxieXRl
Y29kZVxNZXRob2RDYWxsTGlua1N0YXR1cy5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxl
CisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxieXRlY29kZVxHZXRCeUlkU3RhdHVzLmNwcCIKKwkJ
CQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cYnl0ZWNv
ZGVcUHV0QnlJZFN0YXR1cy5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXC4uXGJ5dGVjb2RlXENhbGxMaW5rU3RhdHVzLmNwcCIKKwkJCQk+CisJ
CQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cYnl0ZWNvZGVcTWV0
aG9kQ2FsbExpbmtTdGF0dXMuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJ
UmVsYXRpdmVQYXRoPSIuLlwuLlxieXRlY29kZVxIYW5kbGVySW5mby5oIgogCQkJCT4KIAkJCTwv
RmlsZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMDU1Mzkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtODQsNiArODQsMTUgQEAKIAkJMEY3QjI5NEIx
NEMzQ0QyRjAwN0MzREIxIC8qIERGR0NhcGFiaWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFMUYxNDE3MkMyRjAwMTc5Qzk0IC8qIERG
R0NhcGFiaWxpdGllcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGN0IyOTRDMTRDM0NENDMwMDdDM0RCMSAvKiBERkdCeXRlQ29kZUNhY2hlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVGMDhDQzE0
NkJFNjAyMDAwNDcyQTkgLyogREZHQnl0ZUNvZGVDYWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGN0IyOTREMTRDM0NENEMwMDdDM0RCMSAv
KiBERkdDb21tb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGQzA5NzdFMTQ2OUVCQzQwMENGMjQ0MiAvKiBERkdDb21tb24uaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjkzMzI5RDE0Q0E3REMzMDA4
NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY5MzMyOTMxNENBN0RDMTAwODVGM0M2IC8qIENhbGxMaW5rU3Rh
dHVzLmNwcCAqLzsgfTsKKwkJMEY5MzMyOUUxNENBN0RDNTAwODVGM0M2IC8qIENhbGxMaW5rU3Rh
dHVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkz
MzI5NDE0Q0E3REMxMDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjkzMzI5RjE0Q0E3RENBMDA4NUYz
QzYgLyogR2V0QnlJZFN0YXR1cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjkzMzI5NTE0Q0E3REMxMDA4NUYzQzYgLyogR2V0QnlJZFN0YXR1cy5j
cHAgKi87IH07CisJCTBGOTMzMkEwMTRDQTdEQ0QwMDg1RjNDNiAvKiBHZXRCeUlkU3RhdHVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzMzI5NjE0
Q0E3REMxMDA4NUYzQzYgLyogR2V0QnlJZFN0YXR1cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGOTMzMkExMTRDQTdERDEwMDg1RjNDNiAvKiBN
ZXRob2RDYWxsTGlua1N0YXR1cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjkzMzI5NzE0Q0E3REMxMDA4NUYzQzYgLyogTWV0aG9kQ2FsbExpbmtT
dGF0dXMuY3BwICovOyB9OworCQkwRjkzMzJBMjE0Q0E3REQzMDA4NUYzQzYgLyogTWV0aG9kQ2Fs
bExpbmtTdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGOTMzMjk4MTRDQTdEQzEwMDg1RjNDNiAvKiBNZXRob2RDYWxsTGlua1N0YXR1cy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGOTMzMkEz
MTRDQTdERDcwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMzMjk5MTRDQTdEQzEwMDg1RjNDNiAvKiBQ
dXRCeUlkU3RhdHVzLmNwcCAqLzsgfTsKKwkJMEY5MzMyQTQxNENBN0REOTAwODVGM0M2IC8qIFB1
dEJ5SWRTdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGOTMzMjlBMTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY5MzMyQTUxNENBN0RE
RDAwODVGM0M2IC8qIFN0cnVjdHVyZVNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY5MzMyOUIxNENBN0RDMTAwODVGM0M2IC8qIFN0cnVjdHVyZVNl
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
OTYzQjI3MTNGNzUzQkIwMDAyRDlCMiAvKiBSZWRCbGFja1RyZWUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTYzQjI2MTNGNzUzOTkwMDAyRDlCMiAv
KiBSZWRCbGFja1RyZWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjk2M0IyQzEzRjg1M0VDMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2M0IyQjEz
Rjg1M0M3MDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvci5jcHAgKi87IHNldHRpbmdzID0ge0NPTVBJ
TEVSX0ZMQUdTID0gIi1mbm8tc3RyaWN0LWFsaWFzaW5nIjsgfTsgfTsKIAkJMEY5NjNCMkQxM0Y4
NTQwMjAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTYzQjJBMTNGODUzQkQwMDAyRDlCMiAvKiBNZXRhQWxs
b2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
QEAgLTEyNSw3ICsxMzQsNiBAQAogCQkwRkQ4MkY0QjE0MjgwNkExMDAxNzlDOTQgLyogQml0VmVj
dG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4
MkY0OTE0MjgwNjkyMDAxNzlDOTQgLyogQml0VmVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFMjI4RUQxNDM2QUIyNzAwMTk2QzQ4IC8q
IE9wdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRTIyOEVCMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFMjI4RUUxNDM2QUIyQzAwMTk2QzQ4
IC8qIE9wdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFMjI4RUExNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuY3BwICovOyB9OwotCQkw
RkZGNEJCNDE0Mzk1NUU5MDA2NTVCQzAgLyogREZHU3RydWN0dXJlU2V0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZGNEJCMjE0Mzk1NUU2MDA2NTVC
QzAgLyogREZHU3RydWN0dXJlU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMTQwMDA2NzcxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY3
NjEyQTZGNzgzMDA2NEQxMjMgLyogT1NBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDAwMDY5MzEyQTZGOUUxMDA2NEQxMjMgLyog
T1NBbGxvY2F0b3JQb3NpeC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxNDAwMDY5MjEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5j
cHAgKi87IH07CiAJCTE0MDU2NkM0MTA3RUMyNTUwMDVEQkM4RCAvKiBKU0FQSVZhbHVlV3JhcHBl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzA4
OTRENTBGQUZCQTJEMDAwMDE4NjUgLyogSlNBUElWYWx1ZVdyYXBwZXIuY3BwICovOyB9OwpAQCAt
ODY0LDYgKzg3MiwxNSBAQAogCQkwRjc3MDA4RTE0MDJGREQ2MDA3OEVCMzkgLyogU2FtcGxpbmdD
b3VudGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNhbXBsaW5nQ291bnRl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc3MDA5MTE0MDJGRjI4MDA3OEVC
MzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFNhbXBsaW5nQ291bnRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGN0IyOTQ4MTRDM0NEMjMwMDdDM0RCMSAvKiBERkdDQ2FsbEhlbHBlcnMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ0NhbGxIZWxwZXJzLmg7IHBhdGggPSBkZmcvREZH
Q0NhbGxIZWxwZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTMzMjkzMTRD
QTdEQzEwMDg1RjNDNiAvKiBDYWxsTGlua1N0YXR1cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDYWxsTGlua1N0YXR1cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGOTMzMjk0MTRDQTdEQzEwMDg1RjNDNiAvKiBDYWxsTGlua1N0YXR1cy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxsTGlua1N0YXR1cy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjkzMzI5NTE0Q0E3REMxMDA4NUYzQzYgLyogR2V0QnlJ
ZFN0YXR1cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHZXRCeUlk
U3RhdHVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5MzMyOTYxNENBN0RD
MTAwODVGM0M2IC8qIEdldEJ5SWRTdGF0dXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gR2V0QnlJZFN0YXR1cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjkz
MzI5NzE0Q0E3REMxMDA4NUYzQzYgLyogTWV0aG9kQ2FsbExpbmtTdGF0dXMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWV0aG9kQ2FsbExpbmtTdGF0dXMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjkzMzI5ODE0Q0E3REMxMDA4NUYzQzYgLyog
TWV0aG9kQ2FsbExpbmtTdGF0dXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TWV0aG9kQ2FsbExpbmtTdGF0dXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5
MzMyOTkxNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHV0QnlJZFN0YXR1cy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGOTMzMjlBMTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1dEJ5SWRTdGF0dXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5MzMyOUIxNENBN0RDMTAwODVGM0M2IC8qIFN0
cnVjdHVyZVNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJ1Y3R1cmVT
ZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NjNCMjYxM0Y3NTM5OTAwMDJE
OUIyIC8qIFJlZEJsYWNrVHJlZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZWRCbGFja1RyZWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NjNCMkExM0Y4
NTNCRDAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTWV0YUFsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
Rjk2M0IyQjEzRjg1M0M3MDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZXRhQWxsb2NhdG9yLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTkwNyw3ICs5MjQsNiBAQAogCQkwRkQ4MkY0OTE0MjgwNjkyMDAx
NzlDOTQgLyogQml0VmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJp
dFZlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkUyMjhFQTE0MzZBQjIz
MDAxOTZDNDggLyogT3B0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBPcHRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFMjI4RUIx
NDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkZGNEJCMjE0
Mzk1NUU2MDA2NTVCQzAgLyogREZHU3RydWN0dXJlU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR1N0cnVjdHVyZVNldC5oOyBwYXRoID0gZGZnL0RGR1N0cnVjdHVyZVNl
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDAwMDY3NjEyQTZGNzgzMDA2NEQx
MjMgLyogT1NBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT1NB
bGxvY2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMDA2OTIxMkE2RjlF
MTAwNjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gT1NBbGxvY2F0b3JQb3NpeC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTE0MEQxN0Q2MEU4QUQ0QTkwMDBDRDE3RCAvKiBKU0Jhc2VQcml2YXRlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQmFzZVByaXZhdGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI0NDEsNyArMjQ1Nyw2IEBACiAJCQkJODZFQzlEQzMxMzI4
REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0aXZlSklULmggKi8sCiAJCQkJODY4ODBGMUIxNDMy
OEJCOTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwICovLAogCQkJCTg2ODgw
RjRDMTQzNTNCMjEwMEIwOEQ0MiAvKiBERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCAqLywKLQkJCQkw
RkZGNEJCMjE0Mzk1NUU2MDA2NTVCQzAgLyogREZHU3RydWN0dXJlU2V0LmggKi8sCiAJCQkJMEZD
MDk3OUYxNDZCMjhDNzAwQ0YyNDQyIC8qIERGR1RodW5rcy5jcHAgKi8sCiAJCQkJMEZDMDk3QTAx
NDZCMjhDNzAwQ0YyNDQyIC8qIERGR1RodW5rcy5oICovLAogCQkJCTBGNjIwMTcyMTQzRkNEMkYw
MDY4Qjc3QyAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCAqLywKQEAgLTI1MTAsNiArMjUyNSwx
NSBAQAogCQk5NjlBMDc4RjBFRDFEM0FFMDBGMUY2ODEgLyogYnl0ZWNvZGUgKi8gPSB7CiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGOTMzMjkzMTRDQTdEQzEwMDg1
RjNDNiAvKiBDYWxsTGlua1N0YXR1cy5jcHAgKi8sCisJCQkJMEY5MzMyOTQxNENBN0RDMTAwODVG
M0M2IC8qIENhbGxMaW5rU3RhdHVzLmggKi8sCisJCQkJMEY5MzMyOTUxNENBN0RDMTAwODVGM0M2
IC8qIEdldEJ5SWRTdGF0dXMuY3BwICovLAorCQkJCTBGOTMzMjk2MTRDQTdEQzEwMDg1RjNDNiAv
KiBHZXRCeUlkU3RhdHVzLmggKi8sCisJCQkJMEY5MzMyOTcxNENBN0RDMTAwODVGM0M2IC8qIE1l
dGhvZENhbGxMaW5rU3RhdHVzLmNwcCAqLywKKwkJCQkwRjkzMzI5ODE0Q0E3REMxMDA4NUYzQzYg
LyogTWV0aG9kQ2FsbExpbmtTdGF0dXMuaCAqLywKKwkJCQkwRjkzMzI5OTE0Q0E3REMxMDA4NUYz
QzYgLyogUHV0QnlJZFN0YXR1cy5jcHAgKi8sCisJCQkJMEY5MzMyOUExNENBN0RDMTAwODVGM0M2
IC8qIFB1dEJ5SWRTdGF0dXMuaCAqLywKKwkJCQkwRjkzMzI5QjE0Q0E3REMxMDA4NUYzQzYgLyog
U3RydWN0dXJlU2V0LmggKi8sCiAJCQkJMEYwQjgzQjgxNEJDRjk1QjAwODg1QjRGIC8qIENhbGxS
ZXR1cm5PZmZzZXRUb0J5dGVjb2RlT2Zmc2V0LmggKi8sCiAJCQkJMEYwQjgzQjYxNEJDRjhERjAw
ODg1QjRGIC8qIEdsb2JhbFJlc29sdmVJbmZvLmggKi8sCiAJCQkJMEYwQjgzQjIxNEJDRjg1RTAw
ODg1QjRGIC8qIE1ldGhvZENhbGxMaW5rSW5mby5jcHAgKi8sCkBAIC0yNzI4LDcgKzI3NTIsNiBA
QAogCQkJCTg2QkIwOUMxMTM4RTM4MUIwMDU2NzAyRiAvKiBERkdSZXBhdGNoLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NkVDQTNGQTEzMkRGMjVBMDAyQjJBRDcgLyogREZHU2NvcmVCb2FyZC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODZFQzlERDMxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0
aXZlSklULmggaW4gSGVhZGVycyAqLywKLQkJCQkwRkZGNEJCNDE0Mzk1NUU5MDA2NTVCQzAgLyog
REZHU3RydWN0dXJlU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMwOTdBMjE0NkIyOENDMDBD
RjI0NDIgLyogREZHVGh1bmtzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYyMDE3NDE0M0ZDRDMz
MDA2OEI3N0MgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzNGRDBFMTZGNUNEMDBCMzQ0NjAgLyogRGlzYWxsb3dDVHlwZS5oIGluIEhlYWRlcnMgKi8s
CkBAIC0zMDY5LDYgKzMwOTIsMTEgQEAKIAkJCQkwRjdCMjk0RDE0QzNDRDRDMDA3QzNEQjEgLyog
REZHQ29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MUEzOTA1NjE0QzBGNDcyMDBGNjc5MDEg
LyogVWludDhDbGFtcGVkQXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUY2OUU4NkM0MTRDNkU1
NTEwMDJDMkM2MiAvKiBOdW1iZXJPZkNvcmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjkzMzI5
RTE0Q0E3REM1MDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGOTMzMkEwMTRDQTdEQ0QwMDg1RjNDNiAvKiBHZXRCeUlkU3RhdHVzLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjkzMzJBMjE0Q0E3REQzMDA4NUYzQzYgLyogTWV0aG9kQ2FsbExpbmtTdGF0dXMu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGOTMzMkE0MTRDQTdERDkwMDg1RjNDNiAvKiBQdXRCeUlk
U3RhdHVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjkzMzJBNTE0Q0E3REREMDA4NUYzQzYgLyog
U3RydWN0dXJlU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTM2MDgsNiArMzYzNiwxMCBAQAogCQkJ
CTBGMEI4M0IwMTRCQ0Y3MTYwMDg4NUI0RiAvKiBDYWxsTGlua0luZm8uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEYwQjgzQjQxNEJDRjg2MDAwODg1QjRGIC8qIE1ldGhvZENhbGxMaW5rSW5mby5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlGNjlFODZDMzE0QzZFNTUxMDAyQzJDNjIgLyogTnVtYmVy
T2ZDb3Jlcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjkzMzI5RDE0Q0E3REMzMDA4NUYzQzYg
LyogQ2FsbExpbmtTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY5MzMyOUYxNENBN0RD
QTAwODVGM0M2IC8qIEdldEJ5SWRTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY5MzMy
QTExNENBN0REMTAwODVGM0M2IC8qIE1ldGhvZENhbGxMaW5rU3RhdHVzLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGOTMzMkEzMTRDQTdERDcwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Np
bmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxM
aW5rU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ2FsbExpbmtTdGF0dXMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FsbExpbmtTdGF0dXMuaCIKKworI2luY2x1ZGUg
IkNvZGVCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsKKworQ2FsbExpbmtTdGF0dXMgQ2FsbExp
bmtTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCB1bnNpZ25lZCBi
eXRlY29kZUluZGV4KQoreworI2lmIEVOQUJMRShKSVQpCisgICAgcmV0dXJuIENhbGxMaW5rU3Rh
dHVzKAorICAgICAgICBwcm9maWxlZEJsb2NrLT5nZXRDYWxsTGlua0luZm8oYnl0ZWNvZGVJbmRl
eCkubGFzdFNlZW5DYWxsZWUuZ2V0KCksCisgICAgICAgIHByb2ZpbGVkQmxvY2stPmNvdWxkVGFr
ZVNsb3dDYXNlKGJ5dGVjb2RlSW5kZXgpKTsKKyNlbHNlCisgICAgcmV0dXJuIENhbGxMaW5rU3Rh
dHVzKDAsIGZhbHNlKTsKKyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0
dXMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIENhbGxMaW5rU3RhdHVzX2gKKyNkZWZp
bmUgQ2FsbExpbmtTdGF0dXNfaAorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNGdW5jdGlv
bjsKK2NsYXNzIENvZGVCbG9jazsKKworY2xhc3MgQ2FsbExpbmtTdGF0dXMgeworcHVibGljOgor
ICAgIENhbGxMaW5rU3RhdHVzKCkKKyAgICAgICAgOiBtX2NhbGxUYXJnZXQoMCkKKyAgICAgICAg
LCBtX2NvdWxkVGFrZVNsb3dQYXRoKGZhbHNlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgQ2Fs
bExpbmtTdGF0dXMoSlNGdW5jdGlvbiogY2FsbFRhcmdldCwgYm9vbCBjb3VsZFRha2VTbG93UGF0
aCkKKyAgICAgICAgOiBtX2NhbGxUYXJnZXQoY2FsbFRhcmdldCkKKyAgICAgICAgLCBtX2NvdWxk
VGFrZVNsb3dQYXRoKGNvdWxkVGFrZVNsb3dQYXRoKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
c3RhdGljIENhbGxMaW5rU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwgdW5zaWduZWQgYnl0
ZWNvZGVJbmRleCk7CisgICAgCisgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuICEhbV9j
YWxsVGFyZ2V0OyB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAh
bV9jYWxsVGFyZ2V0OyB9CisgICAgCisgICAgYm9vbCBjb3VsZFRha2VTbG93UGF0aCgpIGNvbnN0
IHsgcmV0dXJuIG1fY291bGRUYWtlU2xvd1BhdGg7IH0KKyAgICAKKyAgICBKU0Z1bmN0aW9uKiBj
YWxsVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9jYWxsVGFyZ2V0OyB9CisgICAgCitwcml2YXRl
OgorICAgIEpTRnVuY3Rpb24qIG1fY2FsbFRhcmdldDsKKyAgICBib29sIG1fY291bGRUYWtlU2xv
d1BhdGg7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIENhbGxMaW5rU3Rh
dHVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0
dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRC
eUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9HZXRCeUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkdldEJ5SWRTdGF0dXMuaCIKKworI2luY2x1ZGUgIkNvZGVCbG9j
ay5oIgorCituYW1lc3BhY2UgSlNDIHsKKworR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpj
b21wdXRlRm9yKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCwgSWRlbnRpZmllciYgaWRlbnQpCit7CisjaWYgRU5BQkxFKEpJVCkKKyAgICAvLyBGaXJzdCBj
aGVjayBpZiBpdCBtYWtlcyBlaXRoZXIgY2FsbHMsIGluIHdoaWNoIGNhc2Ugd2Ugd2FudCB0byBi
ZSBzdXBlciBjYXJlZnVsLCBvcgorICAgIC8vIGlmIGl0J3Mgbm90IHNldCBhdCBhbGwsIGluIHdo
aWNoIGNhc2Ugd2UgcHVudC4KKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBwcm9m
aWxlZEJsb2NrLT5nZXRTdHViSW5mbyhieXRlY29kZUluZGV4KTsKKyAgICBpZiAoIXN0dWJJbmZv
LnNlZW4gfHwgc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpCisgICAgICAgIHJl
dHVybiBHZXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24sIFN0cnVjdHVyZVNldCgpLCBub3RGb3Vu
ZCk7CisgICAgCisgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBsaXN0OworICAg
IGludCBsaXN0U2l6ZTsKKyAgICBzd2l0Y2ggKHN0dWJJbmZvLmFjY2Vzc1R5cGUpIHsKKyAgICBj
YXNlIGFjY2Vzc19nZXRfYnlfaWRfc2VsZl9saXN0OgorICAgICAgICBsaXN0ID0gc3R1YkluZm8u
dS5nZXRCeUlkU2VsZkxpc3Quc3RydWN0dXJlTGlzdDsKKyAgICAgICAgbGlzdFNpemUgPSBzdHVi
SW5mby51LmdldEJ5SWRTZWxmTGlzdC5saXN0U2l6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBhY2Nlc3NfZ2V0X2J5X2lkX3Byb3RvX2xpc3Q6CisgICAgICAgIGxpc3QgPSBzdHViSW5mby51
LmdldEJ5SWRQcm90b0xpc3Quc3RydWN0dXJlTGlzdDsKKyAgICAgICAgbGlzdFNpemUgPSBzdHVi
SW5mby51LmdldEJ5SWRQcm90b0xpc3QubGlzdFNpemU7CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIGxpc3QgPSAwOworICAgICAgICBsaXN0U2l6ZSA9IDA7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpc3RTaXplOyArK2kpIHsK
KyAgICAgICAgaWYgKCFsaXN0LT5saXN0W2ldLmlzRGlyZWN0KQorICAgICAgICAgICAgcmV0dXJu
IEdldEJ5SWRTdGF0dXMoTWFrZXNDYWxscywgU3RydWN0dXJlU2V0KCksIG5vdEZvdW5kKTsKKyAg
ICB9CisgICAgCisgICAgLy8gTmV4dCBjaGVjayBpZiBpdCB0YWtlcyBzbG93IGNhc2UsIGluIHdo
aWNoIGNhc2Ugd2Ugd2FudCB0byBiZSBraW5kIG9mIGNhcmVmdWwuCisgICAgaWYgKHByb2ZpbGVk
QmxvY2stPmxpa2VseVRvVGFrZVNsb3dDYXNlKGJ5dGVjb2RlSW5kZXgpKQorICAgICAgICByZXR1
cm4gR2V0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoLCBTdHJ1Y3R1cmVTZXQoKSwgbm90Rm91bmQp
OworICAgIAorICAgIC8vIEZpbmFsbHkgZmlndXJlIG91dCBpZiB3ZSBjYW4gZGVyaXZlIGFuIGFj
Y2VzcyBzdHJhdGVneS4KKyAgICBHZXRCeUlkU3RhdHVzIHJlc3VsdDsKKyAgICBzd2l0Y2ggKHN0
dWJJbmZvLmFjY2Vzc1R5cGUpIHsKKyAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfc2VsZjogewor
ICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGYuYmFz
ZU9iamVjdFN0cnVjdHVyZS5nZXQoKTsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gc3RydWN0
dXJlLT5nZXQoKnByb2ZpbGVkQmxvY2stPmdsb2JhbERhdGEoKSwgaWRlbnQpOworICAgICAgICAK
KyAgICAgICAgaWYgKHJlc3VsdC5tX29mZnNldCAhPSBub3RGb3VuZCkKKyAgICAgICAgICAgIHJl
c3VsdC5tX3N0cnVjdHVyZVNldC5hZGQoc3RydWN0dXJlKTsKKyAgICAgICAgCisgICAgICAgIGlm
IChyZXN1bHQubV9vZmZzZXQgIT0gbm90Rm91bmQpCisgICAgICAgICAgICBBU1NFUlQocmVzdWx0
Lm1fc3RydWN0dXJlU2V0LnNpemUoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAg
CisgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGZfbGlzdDogeworICAgICAgICBQb2x5bW9y
cGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIGxpc3QgPSBzdHViSW5mby51LmdldEJ5SWRQcm90b0xp
c3Quc3RydWN0dXJlTGlzdDsKKyAgICAgICAgdW5zaWduZWQgc2l6ZSA9IHN0dWJJbmZvLnUuZ2V0
QnlJZFByb3RvTGlzdC5saXN0U2l6ZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHNpemU7ICsraSkgeworICAgICAgICAgICAgQVNTRVJUKGxpc3QtPmxpc3RbaV0uaXNEaXJlY3Qp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGxpc3Qt
Pmxpc3RbaV0uYmFzZS5nZXQoKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQubV9zdHJ1Y3R1cmVT
ZXQuY29udGFpbnMoc3RydWN0dXJlKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgc2l6ZV90IG15T2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQoKnBy
b2ZpbGVkQmxvY2stPmdsb2JhbERhdGEoKSwgaWRlbnQpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBpZiAobXlPZmZzZXQgPT0gbm90Rm91bmQpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQu
bV9vZmZzZXQgPSBub3RGb3VuZDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIWkpCisgICAgICAgICAg
ICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gbXlPZmZzZXQ7CisgICAgICAgICAgICBlbHNlIGlmIChy
ZXN1bHQubV9vZmZzZXQgIT0gbXlPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQubV9v
ZmZzZXQgPSBub3RGb3VuZDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICByZXN1bHQubV9zdHJ1Y3R1cmVTZXQu
YWRkKHN0cnVjdHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
IGlmIChyZXN1bHQubV9vZmZzZXQgIT0gbm90Rm91bmQpCisgICAgICAgICAgICBBU1NFUlQocmVz
dWx0Lm1fc3RydWN0dXJlU2V0LnNpemUoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAg
ICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUKHJlc3VsdC5tX29mZnNldCA9PSBub3RG
b3VuZCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBpZiAocmVzdWx0Lm1fb2Zm
c2V0ID09IG5vdEZvdW5kKSB7CisgICAgICAgIHJlc3VsdC5tX3N0YXRlID0gVGFrZXNTbG93UGF0
aDsKKyAgICAgICAgcmVzdWx0Lm1fc3RydWN0dXJlU2V0LmNsZWFyKCk7CisgICAgfSBlbHNlCisg
ICAgICAgIHJlc3VsdC5tX3N0YXRlID0gU2ltcGxlRGlyZWN0OworICAgIAorICAgIHJldHVybiBy
ZXN1bHQ7CisjZWxzZSAvLyBFTkFCTEUoSklUKQorICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKE5v
SW5mb3JtYXRpb24sIFN0cnVjdHVyZVNldCgpLCBub3RGb3VuZCk7CisjZW5kaWYgLy8gRU5BQkxF
KEpJVCkKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBHZXRCeUlkU3RhdHVzX2gKKyNkZWZpbmUgR2V0QnlJZFN0YXR1c19oCisK
KyNpbmNsdWRlICJTdHJ1Y3R1cmVTZXQuaCIKKyNpbmNsdWRlIDx3dGYvTm90Rm91bmQuaD4KKwor
bmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvZGVCbG9jazsKK2NsYXNzIElkZW50aWZpZXI7CisK
K2NsYXNzIEdldEJ5SWRTdGF0dXMgeworcHVibGljOgorICAgIGVudW0gU3RhdGUgeworICAgICAg
ICBOb0luZm9ybWF0aW9uLCAgLy8gSXQncyB1bmNhY2hlZCBzbyB3ZSBoYXZlIG5vIGluZm9ybWF0
aW9uLgorICAgICAgICBTaW1wbGVEaXJlY3QsICAgLy8gSXQncyBjYWNoZWQgZm9yIGEgZGlyZWN0
IGFjY2VzcyB0byBhIGtub3duIG9iamVjdCBwcm9wZXJ0eS4KKyAgICAgICAgVGFrZXNTbG93UGF0
aCwgIC8vIEl0J3Mga25vd24gdG8gb2Z0ZW4gdGFrZSBzbG93IHBhdGguCisgICAgICAgIE1ha2Vz
Q2FsbHMgICAgICAvLyBJdCdzIGtub3duIHRvIHRha2UgcGF0aHMgdGhhdCBtYWtlIGNhbGxzLgor
ICAgIH07CisKKyAgICBHZXRCeUlkU3RhdHVzKCkKKyAgICAgICAgOiBtX3N0YXRlKE5vSW5mb3Jt
YXRpb24pCisgICAgICAgICwgbV9vZmZzZXQobm90Rm91bmQpCisgICAgeworICAgIH0KKyAgICAK
KyAgICBHZXRCeUlkU3RhdHVzKFN0YXRlIHN0YXRlLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVj
dHVyZVNldCwgc2l6ZV90IG9mZnNldCkKKyAgICAgICAgOiBtX3N0YXRlKHN0YXRlKQorICAgICAg
ICAsIG1fc3RydWN0dXJlU2V0KHN0cnVjdHVyZVNldCkKKyAgICAgICAgLCBtX29mZnNldChvZmZz
ZXQpCisgICAgeworICAgICAgICBBU1NFUlQoKHN0YXRlID09IFNpbXBsZURpcmVjdCkgPT0gKG9m
ZnNldCAhPSBub3RGb3VuZCkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgR2V0QnlJZFN0YXR1
cyBjb21wdXRlRm9yKENvZGVCbG9jayosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIElkZW50aWZp
ZXImKTsKKyAgICAKKyAgICBTdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0K
KyAgICAKKyAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSAhPSBOb0luZm9y
bWF0aW9uOyB9CisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsg
fQorICAgIGJvb2wgaXNTaW1wbGVEaXJlY3QoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IFNp
bXBsZURpcmVjdDsgfQorICAgIGJvb2wgdGFrZXNTbG93UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhdGUgPT0gVGFrZXNTbG93UGF0aCB8fCBtX3N0YXRlID09IE1ha2VzQ2FsbHM7IH0KKyAgICBi
b29sIG1ha2VzQ2FsbHMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IE1ha2VzQ2FsbHM7IH0K
KyAgICAKKyAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RydWN0dXJlU2V0OyB9CisgICAgc2l6ZV90IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJu
IG1fb2Zmc2V0OyB9CisgICAgCitwcml2YXRlOgorICAgIFN0YXRlIG1fc3RhdGU7CisgICAgU3Ry
dWN0dXJlU2V0IG1fc3RydWN0dXJlU2V0OworICAgIHNpemVfdCBtX29mZnNldDsKK307CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gUHJvcGVydHlBY2Nlc3NTdGF0dXNfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9kQ2FsbExpbmtTdGF0dXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RD
YWxsTGlua1N0YXR1cy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvTWV0aG9kQ2FsbExpbmtTdGF0dXMuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNZXRob2RDYWxsTGlua1N0YXR1cy5oIgorCisj
aW5jbHVkZSAiQ29kZUJsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitNZXRob2RDYWxsTGlu
a1N0YXR1cyBNZXRob2RDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sqIHByb2Zp
bGVkQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCit7CisjaWYgRU5BQkxFKEpJVCkKKyAg
ICBNZXRob2RDYWxsTGlua0luZm8mIG1ldGhvZENhbGwgPSBwcm9maWxlZEJsb2NrLT5nZXRNZXRo
b2RDYWxsTGlua0luZm8oYnl0ZWNvZGVJbmRleCk7CisgICAgCisgICAgaWYgKCFtZXRob2RDYWxs
LnNlZW4gfHwgIW1ldGhvZENhbGwuY2FjaGVkU3RydWN0dXJlKQorICAgICAgICByZXR1cm4gTWV0
aG9kQ2FsbExpbmtTdGF0dXMoKTsKKyAgICAKKyAgICBpZiAobWV0aG9kQ2FsbC5jYWNoZWRQcm90
b3R5cGUuZ2V0KCkgPT0gcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCktPm1ldGhvZENhbGxE
dW1teSgpKSB7CisgICAgICAgIHJldHVybiBNZXRob2RDYWxsTGlua1N0YXR1cygKKyAgICAgICAg
ICAgIG1ldGhvZENhbGwuY2FjaGVkU3RydWN0dXJlLmdldCgpLAorICAgICAgICAgICAgMCwKKyAg
ICAgICAgICAgIG1ldGhvZENhbGwuY2FjaGVkRnVuY3Rpb24uZ2V0KCksCisgICAgICAgICAgICAw
KTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIE1ldGhvZENhbGxMaW5rU3RhdHVzKAorICAgICAg
ICBtZXRob2RDYWxsLmNhY2hlZFN0cnVjdHVyZS5nZXQoKSwKKyAgICAgICAgbWV0aG9kQ2FsbC5j
YWNoZWRQcm90b3R5cGVTdHJ1Y3R1cmUuZ2V0KCksCisgICAgICAgIG1ldGhvZENhbGwuY2FjaGVk
RnVuY3Rpb24uZ2V0KCksCisgICAgICAgIG1ldGhvZENhbGwuY2FjaGVkUHJvdG90eXBlLmdldCgp
KTsKKyNlbHNlIC8vIEVOQUJMRShKSVQpCisgICAgcmV0dXJuIE1ldGhvZENhbGxMaW5rU3RhdHVz
KCk7CisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9kQ2FsbExpbmtTdGF0dXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9kQ2FsbExp
bmtTdGF0dXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9NZXRob2RDYWxsTGlua1N0YXR1cy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgTWV0
aG9kQ2FsbExpbmtTdGF0dXNfaAorI2RlZmluZSBNZXRob2RDYWxsTGlua1N0YXR1c19oCisKK25h
bWVzcGFjZSBKU0MgeworCitjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBKU09iamVjdDsKK2NsYXNz
IFN0cnVjdHVyZTsKKworY2xhc3MgTWV0aG9kQ2FsbExpbmtTdGF0dXMgeworcHVibGljOgorICAg
IE1ldGhvZENhbGxMaW5rU3RhdHVzKCkKKyAgICAgICAgOiBtX3N0cnVjdHVyZSgwKQorICAgICAg
ICAsIG1fcHJvdG90eXBlU3RydWN0dXJlKDApCisgICAgICAgICwgbV9mdW5jdGlvbigwKQorICAg
ICAgICAsIG1fcHJvdG90eXBlKDApCisgICAgeworICAgIH0KKyAgICAKKyAgICBNZXRob2RDYWxs
TGlua1N0YXR1cygKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCisgICAgICAgIFN0cnVj
dHVyZSogcHJvdG90eXBlU3RydWN0dXJlLAorICAgICAgICBKU09iamVjdCogZnVuY3Rpb24sCisg
ICAgICAgIEpTT2JqZWN0KiBwcm90b3R5cGUpCisgICAgICAgIDogbV9zdHJ1Y3R1cmUoc3RydWN0
dXJlKQorICAgICAgICAsIG1fcHJvdG90eXBlU3RydWN0dXJlKHByb3RvdHlwZVN0cnVjdHVyZSkK
KyAgICAgICAgLCBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQorICAgICAgICAsIG1fcHJvdG90eXBlKHBy
b3RvdHlwZSkKKyAgICB7CisgICAgICAgIGlmICghbV9mdW5jdGlvbikgeworICAgICAgICAgICAg
QVNTRVJUKCFtX3N0cnVjdHVyZSk7CisgICAgICAgICAgICBBU1NFUlQoIW1fcHJvdG90eXBlU3Ry
dWN0dXJlKTsKKyAgICAgICAgICAgIEFTU0VSVCghbV9wcm90b3R5cGUpOworICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIEFTU0VSVChtX3N0cnVjdHVyZSk7CisgICAgICAgIAorICAgICAgICBB
U1NFUlQoIW1fcHJvdG90eXBlID09ICFtX3Byb3RvdHlwZVN0cnVjdHVyZSk7CisgICAgfQorICAg
IAorICAgIHN0YXRpYyBNZXRob2RDYWxsTGlua1N0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayos
IHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOworCisgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0
dXJuICEhbV9mdW5jdGlvbjsgfQorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4g
IW1fZnVuY3Rpb247IH0KKyAgICAKKyAgICBib29sIG5lZWRzUHJvdG90eXBlQ2hlY2soKSBjb25z
dCB7IHJldHVybiAhIW1fcHJvdG90eXBlOyB9CisgICAgCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUoKSB7IHJldHVybiBtX3N0cnVjdHVyZTsgfQorICAgIFN0cnVjdHVyZSogcHJvdG90eXBlU3Ry
dWN0dXJlKCkgeyByZXR1cm4gbV9wcm90b3R5cGVTdHJ1Y3R1cmU7IH0KKyAgICBKU09iamVjdCog
ZnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2Z1bmN0aW9uOyB9CisgICAgSlNPYmplY3QqIHBy
b3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvdG90eXBlOyB9CisgICAgCitwcml2YXRlOgor
ICAgIFN0cnVjdHVyZSogbV9zdHJ1Y3R1cmU7CisgICAgU3RydWN0dXJlKiBtX3Byb3RvdHlwZVN0
cnVjdHVyZTsKKyAgICBKU09iamVjdCogbV9mdW5jdGlvbjsKKyAgICBKU09iamVjdCogbV9wcm90
b3R5cGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIE1ldGhvZENhbGxM
aW5rU3RhdHVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5
SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9QdXRCeUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUHV0QnlJZFN0YXR1cy5oIgorCisjaW5jbHVkZSAiQ29k
ZUJsb2NrLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlQ2hh
aW4uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK1B1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6
Y29tcHV0ZUZvcihDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXgsIElkZW50aWZpZXImIGlkZW50KQoreworI2lmIEVOQUJMRShKSVQpCisgICAgaWYgKHByb2Zp
bGVkQmxvY2stPmxpa2VseVRvVGFrZVNsb3dDYXNlKGJ5dGVjb2RlSW5kZXgpKQorICAgICAgICBy
ZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoLCAwLCAwLCAwLCBub3RGb3VuZCk7Cisg
ICAgCisgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gcHJvZmlsZWRCbG9jay0+Z2V0
U3R1YkluZm8oYnl0ZWNvZGVJbmRleCk7CisgICAgaWYgKCFzdHViSW5mby5zZWVuKQorICAgICAg
ICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uLCAwLCAwLCAwLCBub3RGb3VuZCk7
CisgICAgCisgICAgc3dpdGNoIChzdHViSW5mby5hY2Nlc3NUeXBlKSB7CisgICAgY2FzZSBhY2Nl
c3NfdW5zZXQ6CisgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24sIDAs
IDAsIDAsIG5vdEZvdW5kKTsKKyAgICAgICAgCisgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3Jl
cGxhY2U6CisgICAgICAgIGlmIChzaXplX3Qgb2Zmc2V0ID0gc3R1YkluZm8udS5wdXRCeUlkUmVw
bGFjZS5iYXNlT2JqZWN0U3RydWN0dXJlLT5nZXQoCisgICAgICAgICAgICAgICAgKnByb2ZpbGVk
QmxvY2stPmdsb2JhbERhdGEoKSwgaWRlbnQpKSB7CisgICAgICAgICAgICByZXR1cm4gUHV0QnlJ
ZFN0YXR1cygKKyAgICAgICAgICAgICAgICBTaW1wbGVSZXBsYWNlLAorICAgICAgICAgICAgICAg
IHN0dWJJbmZvLnUucHV0QnlJZFJlcGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwKKyAg
ICAgICAgICAgICAgICAwLCAwLAorICAgICAgICAgICAgICAgIG9mZnNldCk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCwgMCwgMCwgMCwgbm90
Rm91bmQpOworICAgICAgICAKKyAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9u
b3JtYWw6CisgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0OgorICAg
ICAgICBpZiAoc2l6ZV90IG9mZnNldCA9IHN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24uc3Ry
dWN0dXJlLT5nZXQoCisgICAgICAgICAgICAgICAgKnByb2ZpbGVkQmxvY2stPmdsb2JhbERhdGEo
KSwgaWRlbnQpKSB7CisgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cygKKyAgICAgICAg
ICAgICAgICBTaW1wbGVUcmFuc2l0aW9uLAorICAgICAgICAgICAgICAgIHN0dWJJbmZvLnUucHV0
QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUuZ2V0KCksCisgICAgICAgICAgICAgICAg
c3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUuZ2V0KCksCisgICAgICAgICAg
ICAgICAgc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFpbi5nZXQoKSwKKyAgICAgICAg
ICAgICAgICBvZmZzZXQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVz
KFRha2VzU2xvd1BhdGgsIDAsIDAsIDAsIG5vdEZvdW5kKTsKKyAgICAgICAgCisgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCwgMCwgMCwgMCwg
bm90Rm91bmQpOworICAgIH0KKyNlbHNlIC8vIEVOQUJMRShKSVQpCisgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoTm9JbmZvcm1hdGlvbiwgMCwgMCwgMCwgbm90Rm91bmQpOworI2VuZGlmIC8vIEVO
QUJMRShKSVQpCit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIFB1dEJ5SWRTdGF0dXNfaAorI2RlZmluZSBQdXRCeUlkU3RhdHVz
X2gKKworI2luY2x1ZGUgPHd0Zi9Ob3RGb3VuZC5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xh
c3MgQ29kZUJsb2NrOworY2xhc3MgSWRlbnRpZmllcjsKK2NsYXNzIFN0cnVjdHVyZTsKK2NsYXNz
IFN0cnVjdHVyZUNoYWluOworCitjbGFzcyBQdXRCeUlkU3RhdHVzIHsKK3B1YmxpYzoKKyAgICBl
bnVtIFN0YXRlIHsKKyAgICAgICAgTm9JbmZvcm1hdGlvbiwKKyAgICAgICAgU2ltcGxlUmVwbGFj
ZSwKKyAgICAgICAgU2ltcGxlVHJhbnNpdGlvbiwKKyAgICAgICAgVGFrZXNTbG93UGF0aAorICAg
IH07CisgICAgCisgICAgUHV0QnlJZFN0YXR1cygpCisgICAgICAgIDogbV9zdGF0ZShOb0luZm9y
bWF0aW9uKQorICAgICAgICAsIG1fb2xkU3RydWN0dXJlKDApCisgICAgICAgICwgbV9uZXdTdHJ1
Y3R1cmUoMCkKKyAgICAgICAgLCBtX3N0cnVjdHVyZUNoYWluKDApCisgICAgICAgICwgbV9vZmZz
ZXQobm90Rm91bmQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBQdXRCeUlkU3RhdHVzKAorICAg
ICAgICBTdGF0ZSBzdGF0ZSwKKyAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsCisgICAg
ICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLAorICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogc3Ry
dWN0dXJlQ2hhaW4sCisgICAgICAgIHNpemVfdCBvZmZzZXQpCisgICAgICAgIDogbV9zdGF0ZShz
dGF0ZSkKKyAgICAgICAgLCBtX29sZFN0cnVjdHVyZShvbGRTdHJ1Y3R1cmUpCisgICAgICAgICwg
bV9uZXdTdHJ1Y3R1cmUobmV3U3RydWN0dXJlKQorICAgICAgICAsIG1fc3RydWN0dXJlQ2hhaW4o
c3RydWN0dXJlQ2hhaW4pCisgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKChtX3N0YXRlID09IE5vSW5mb3JtYXRpb24gfHwgbV9zdGF0ZSA9PSBUYWtlc1Ns
b3dQYXRoKSA9PSAhbV9vbGRTdHJ1Y3R1cmUpOworICAgICAgICBBU1NFUlQoKG1fc3RhdGUgIT0g
U2ltcGxlVHJhbnNpdGlvbikgPT0gIW1fbmV3U3RydWN0dXJlKTsKKyAgICAgICAgQVNTRVJUKCht
X3N0YXRlICE9IFNpbXBsZVRyYW5zaXRpb24pID09ICFtX3N0cnVjdHVyZUNoYWluKTsKKyAgICAg
ICAgQVNTRVJUKChtX3N0YXRlID09IE5vSW5mb3JtYXRpb24gfHwgbV9zdGF0ZSA9PSBUYWtlc1Ns
b3dQYXRoKSA9PSAobV9vZmZzZXQgPT0gbm90Rm91bmQpKTsKKyAgICB9CisgICAgCisgICAgc3Rh
dGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29k
ZUluZGV4LCBJZGVudGlmaWVyJik7CisgICAgCisgICAgU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlOyB9CisgICAgCisgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhdGUgIT0gTm9JbmZvcm1hdGlvbjsgfQorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGF0ZSA9PSBOb0luZm9ybWF0aW9uOyB9CisgICAgYm9vbCBpc1NpbXBsZVJlcGxh
Y2UoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IFNpbXBsZVJlcGxhY2U7IH0KKyAgICBib29s
IGlzU2ltcGxlVHJhbnNpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gU2ltcGxlVHJh
bnNpdGlvbjsgfQorICAgIGJvb2wgdGFrZXNTbG93UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGUgPT0gVGFrZXNTbG93UGF0aDsgfQorICAgIAorICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJl
KCkgY29uc3QgeyByZXR1cm4gbV9vbGRTdHJ1Y3R1cmU7IH0KKyAgICBTdHJ1Y3R1cmUqIG5ld1N0
cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmV3U3RydWN0dXJlOyB9CisgICAgU3RydWN0dXJl
Q2hhaW4qIHN0cnVjdHVyZUNoYWluKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmVDaGFpbjsg
fQorICAgIHNpemVfdCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQorICAgIAor
cHJpdmF0ZToKKyAgICBTdGF0ZSBtX3N0YXRlOworICAgIFN0cnVjdHVyZSogbV9vbGRTdHJ1Y3R1
cmU7CisgICAgU3RydWN0dXJlKiBtX25ld1N0cnVjdHVyZTsKKyAgICBTdHJ1Y3R1cmVDaGFpbiog
bV9zdHJ1Y3R1cmVDaGFpbjsKKyAgICBzaXplX3QgbV9vZmZzZXQ7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIFB1dEJ5SWRTdGF0dXNfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDE1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIFN0cnVjdHVyZVNldF9oCisjZGVmaW5lIFN0cnVjdHVyZVNldF9o
CisKKyNpbmNsdWRlICJQcmVkaWN0ZWRUeXBlLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBTdHJ1Y3R1cmU7
CisKK25hbWVzcGFjZSBERkcgeworY2xhc3MgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTsKK30KKwor
Y2xhc3MgU3RydWN0dXJlU2V0IHsKK3B1YmxpYzoKKyAgICBTdHJ1Y3R1cmVTZXQoKSB7IH0KKyAg
ICAKKyAgICBTdHJ1Y3R1cmVTZXQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAg
ICBtX3N0cnVjdHVyZXMuYXBwZW5kKHN0cnVjdHVyZSk7CisgICAgfQorICAgIAorICAgIHZvaWQg
Y2xlYXIoKQorICAgIHsKKyAgICAgICAgbV9zdHJ1Y3R1cmVzLmNsZWFyKCk7CisgICAgfQorICAg
IAorICAgIHZvaWQgYWRkKFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKCFjb250YWlucyhzdHJ1Y3R1cmUpKTsKKyAgICAgICAgbV9zdHJ1Y3R1cmVzLmFwcGVuZChz
dHJ1Y3R1cmUpOworICAgIH0KKyAgICAKKyAgICBib29sIGFkZEFsbChjb25zdCBTdHJ1Y3R1cmVT
ZXQmIG90aGVyKQorICAgIHsKKyAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3RoZXIuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAg
IGlmIChjb250YWlucyhvdGhlcltpXSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICBhZGQob3RoZXJbaV0pOworICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CisgICAgfQorICAgIAorICAgIHZvaWQgcmVt
b3ZlKFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX3N0cnVjdHVyZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChtX3N0
cnVjdHVyZXNbaV0gIT0gc3RydWN0dXJlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBtX3N0cnVjdHVyZXNbaV0gPSBtX3N0cnVjdHVyZXMubGFz
dCgpOworICAgICAgICAgICAgbV9zdHJ1Y3R1cmVzLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBib29sIGNvbnRhaW5zKFN0cnVj
dHVyZSogc3RydWN0dXJlKSBjb25zdAorICAgIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX3N0cnVjdHVyZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChtX3N0cnVj
dHVyZXNbaV0gPT0gc3RydWN0dXJlKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1N1
YnNldE9mKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc3RydWN0dXJlcy5zaXplKCk7ICsraSkgeworICAgICAg
ICAgICAgaWYgKCFvdGhlci5jb250YWlucyhtX3N0cnVjdHVyZXNbaV0pKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgCisgICAgYm9vbCBpc1N1cGVyc2V0T2YoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBvdGhlci5pc1N1YnNldE9mKCp0aGlzKTsKKyAg
ICB9CisgICAgCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZXMu
c2l6ZSgpOyB9CisgICAgCisgICAgU3RydWN0dXJlKiBhdChzaXplX3QgaSkgY29uc3QgeyByZXR1
cm4gbV9zdHJ1Y3R1cmVzLmF0KGkpOyB9CisgICAgCisgICAgU3RydWN0dXJlKiBvcGVyYXRvcltd
KHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBhdChpKTsgfQorICAgIAorICAgIFN0cnVjdHVyZSog
bGFzdCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlcy5sYXN0KCk7IH0KKworICAgIFByZWRp
Y3RlZFR5cGUgcHJlZGljdGlvbkZyb21TdHJ1Y3R1cmVzKCkgY29uc3QKKyAgICB7CisgICAgICAg
IFByZWRpY3RlZFR5cGUgcmVzdWx0ID0gUHJlZGljdE5vbmU7CisgICAgICAgIAorICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc3RydWN0dXJlcy5zaXplKCk7ICsraSkKKyAgICAgICAg
ICAgIG1lcmdlUHJlZGljdGlvbihyZXN1bHQsIHByZWRpY3Rpb25Gcm9tU3RydWN0dXJlKG1fc3Ry
dWN0dXJlc1tpXSkpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cisg
ICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpIGNvbnN0
CisgICAgeworICAgICAgICBpZiAobV9zdHJ1Y3R1cmVzLnNpemUoKSAhPSBvdGhlci5tX3N0cnVj
dHVyZXMuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3N0cnVjdHVyZXMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgICAgIGlmICghb3RoZXIuY29udGFpbnMobV9zdHJ1Y3R1cmVzW2ldKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoRklMRSogb3V0KQorICAgIHsKKyAg
ICAgICAgZnByaW50ZihvdXQsICJbIik7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9zdHJ1Y3R1cmVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoaSkKKyAgICAgICAg
ICAgICAgICBmcHJpbnRmKG91dCwgIiwgIik7CisgICAgICAgICAgICBmcHJpbnRmKG91dCwgIiVw
IiwgbV9zdHJ1Y3R1cmVzW2ldKTsKKyAgICAgICAgfQorICAgICAgICBmcHJpbnRmKG91dCwgIl0i
KTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBERkc6OlN0cnVjdHVy
ZUFic3RyYWN0VmFsdWU7CisgICAgCisgICAgVmVjdG9yPFN0cnVjdHVyZSosIDI+IG1fc3RydWN0
dXJlczsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gU3RydWN0dXJlU2V0
X2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5o
CShyZXZpc2lvbiAxMDU1MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsOSArMzAsOSBAQAogCiAjaWYgRU5BQkxF
KERGR19KSVQpCiAKLSNpbmNsdWRlICJERkdTdHJ1Y3R1cmVTZXQuaCIKICNpbmNsdWRlICJKU0Nl
bGwuaCIKICNpbmNsdWRlICJQcmVkaWN0ZWRUeXBlLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlU2V0
LmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDEw
NTUzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCwxMyBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQp
CiAKKyNpbmNsdWRlICJDYWxsTGlua1N0YXR1cy5oIgorI2luY2x1ZGUgIkNvZGVCbG9jay5oIgog
I2luY2x1ZGUgIkRGR0J5dGVDb2RlQ2FjaGUuaCIKICNpbmNsdWRlICJERkdDYXBhYmlsaXRpZXMu
aCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJHZXRCeUlkU3RhdHVzLmgiCisj
aW5jbHVkZSAiTWV0aG9kQ2FsbExpbmtTdGF0dXMuaCIKKyNpbmNsdWRlICJQdXRCeUlkU3RhdHVz
LmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgogCkBAIC03MTksMjkgKzcyMyw2IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KICAgICAKLSAgICBib29sIHdpbGxOZWVkRmx1c2goU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvKQotICAgIHsKLSAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBs
aXN0OwotICAgICAgICBpbnQgbGlzdFNpemU7Ci0gICAgICAgIHN3aXRjaCAoc3R1YkluZm8uYWNj
ZXNzVHlwZSkgewotICAgICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfc2VsZl9saXN0OgotICAg
ICAgICAgICAgbGlzdCA9IHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGZMaXN0LnN0cnVjdHVyZUxpc3Q7
Ci0gICAgICAgICAgICBsaXN0U2l6ZSA9IHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGZMaXN0Lmxpc3RT
aXplOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9w
cm90b19saXN0OgotICAgICAgICAgICAgbGlzdCA9IHN0dWJJbmZvLnUuZ2V0QnlJZFByb3RvTGlz
dC5zdHJ1Y3R1cmVMaXN0OwotICAgICAgICAgICAgbGlzdFNpemUgPSBzdHViSW5mby51LmdldEJ5
SWRQcm90b0xpc3QubGlzdFNpemU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGxpc3RTaXplOyArK2kpIHsKLSAgICAgICAgICAgIGlmICghbGlzdC0+bGlz
dFtpXS5pc0RpcmVjdCkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAogICAgIHZvaWQgYnVpbGRPcGVyYW5k
TWFwc0lmTmVjZXNzYXJ5KCk7CiAgICAgCiAgICAgSlNHbG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7
CkBAIC05MjgsMTEgKzkwOSwxMyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKElu
dGVycHJlCiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQogICAgIHByaW50ZigiU2xvdyBj
YXNlIGNvdW50IGZvciBjYWxsIGF0IEAlenUgYmMjJXU6ICV1LyV1OyBleGl0IHByb2ZpbGU6ICVk
LlxuIiwgbV9ncmFwaC5zaXplKCksIG1fY3VycmVudEluZGV4LCBtX2lubGluZVN0YWNrVG9wLT5t
X3Byb2ZpbGVkQmxvY2stPnJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG1fY3VycmVu
dEluZGV4KS0+bV9jb3VudGVyLCBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmV4
ZWN1dGlvbkVudHJ5Q291bnQoKSwgbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNF
eGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ2FjaGUpKTsKICNlbmRpZgotICAgICAgICAgICAg
CisgICAgCisgICAgQ2FsbExpbmtTdGF0dXMgY2FsbExpbmtTdGF0dXMgPSBDYWxsTGlua1N0YXR1
czo6Y29tcHV0ZUZvcigKKyAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2Nr
LCBtX2N1cnJlbnRJbmRleCk7CisgICAgCiAgICAgaWYgKG1fZ3JhcGguaXNGdW5jdGlvbkNvbnN0
YW50KG1fY29kZUJsb2NrLCBjYWxsVGFyZ2V0KSkKICAgICAgICAgY2FsbFR5cGUgPSBDb25zdGFu
dEZ1bmN0aW9uOwotICAgIGVsc2UgaWYgKCEhbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJs
b2NrLT5nZXRDYWxsTGlua0luZm8obV9jdXJyZW50SW5kZXgpLmxhc3RTZWVuQ2FsbGVlCi0gICAg
ICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+Y291bGRUYWtl
U2xvd0Nhc2UobV9jdXJyZW50SW5kZXgpCisgICAgZWxzZSBpZiAoY2FsbExpbmtTdGF0dXMuaXNT
ZXQoKSAmJiAhY2FsbExpbmtTdGF0dXMuY291bGRUYWtlU2xvd1BhdGgoKQogICAgICAgICAgICAg
ICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVu
dEluZGV4LCBCYWRDYWNoZSkpCiAgICAgICAgIGNhbGxUeXBlID0gTGlua2VkRnVuY3Rpb247CiAg
ICAgZWxzZQpAQCAtOTYzLDcgKzk0Niw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNh
bGwoSW50ZXJwcmUKICAgICAgICAgICAgIGNlcnRhaW5BYm91dEV4cGVjdGVkRnVuY3Rpb24gPSB0
cnVlOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQVNTRVJUKGNhbGxUeXBlID09IExp
bmtlZEZ1bmN0aW9uKTsKLSAgICAgICAgICAgIGV4cGVjdGVkRnVuY3Rpb24gPSBtX2lubGluZVN0
YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmdldENhbGxMaW5rSW5mbyhtX2N1cnJlbnRJbmRleCku
bGFzdFNlZW5DYWxsZWUuZ2V0KCk7CisgICAgICAgICAgICBleHBlY3RlZEZ1bmN0aW9uID0gY2Fs
bExpbmtTdGF0dXMuY2FsbFRhcmdldCgpOwogICAgICAgICAgICAgaW50cmluc2ljID0gZXhwZWN0
ZWRGdW5jdGlvbi0+ZXhlY3V0YWJsZSgpLT5pbnRyaW5zaWNGb3Ioa2luZCk7CiAgICAgICAgICAg
ICBjZXJ0YWluQWJvdXRFeHBlY3RlZEZ1bmN0aW9uID0gZmFsc2U7CiAgICAgICAgIH0KQEAgLTE3
MjYsMjMgKzE3MDksMjYgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25l
ZAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIG1ldGhvZF9j
aGVjayB3YXMgbW9ub21vcnBoaWMuIElmIHNvLCBlbWl0IGEgQ2hlY2tYWVpNZXRob2QKICAgICAg
ICAgICAgIC8vIG5vZGUsIHdoaWNoIGlzIGEgbG90IG1vcmUgZWZmaWNpZW50LgotICAgICAgICAg
ICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9m
aWxlZEJsb2NrLT5nZXRTdHViSW5mbyhtX2N1cnJlbnRJbmRleCk7Ci0gICAgICAgICAgICBNZXRo
b2RDYWxsTGlua0luZm8mIG1ldGhvZENhbGwgPSBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVk
QmxvY2stPmdldE1ldGhvZENhbGxMaW5rSW5mbyhtX2N1cnJlbnRJbmRleCk7CisgICAgICAgICAg
ICBHZXRCeUlkU3RhdHVzIGdldEJ5SWRTdGF0dXMgPSBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9y
KAorICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywKKyAg
ICAgICAgICAgICAgICBtX2N1cnJlbnRJbmRleCwKKyAgICAgICAgICAgICAgICBtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihpZGVudGlmaWVyKSk7CisgICAgICAgICAgICBNZXRob2RDYWxsTGlua1N0
YXR1cyBtZXRob2RDYWxsU3RhdHVzID0gTWV0aG9kQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3Io
CisgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCBtX2N1
cnJlbnRJbmRleCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChtZXRob2RDYWxsLnNl
ZW4KLSAgICAgICAgICAgICAgICAmJiAhIW1ldGhvZENhbGwuY2FjaGVkU3RydWN0dXJlCi0gICAg
ICAgICAgICAgICAgJiYgIXN0dWJJbmZvLnNlZW4KKyAgICAgICAgICAgIGlmIChtZXRob2RDYWxs
U3RhdHVzLmlzU2V0KCkKKyAgICAgICAgICAgICAgICAmJiAhZ2V0QnlJZFN0YXR1cy5pc1NldCgp
CiAgICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFz
RXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENhY2hlKSkgewogICAgICAgICAgICAgICAgIC8v
IEl0J3MgbW9ub21vcnBoaWMgYXMgZmFyIGFzIHdlIGNhbiB0ZWxsLCBzaW5jZSB0aGUgbWV0aG9k
X2NoZWNrIHdhcyBsaW5rZWQKICAgICAgICAgICAgICAgICAvLyBidXQgdGhlIHNsb3cgcGF0aCAo
aS5lLiB0aGUgbm9ybWFsIGdldF9ieV9pZCkgbmV2ZXIgZmlyZWQuCiAKLSAgICAgICAgICAgICAg
ICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVT
ZXQobWV0aG9kQ2FsbC5jYWNoZWRTdHJ1Y3R1cmUuZ2V0KCkpKSwgYmFzZSk7Ci0gICAgICAgICAg
ICAgICAgaWYgKG1ldGhvZENhbGwuY2FjaGVkUHJvdG90eXBlLmdldCgpICE9IG1faW5saW5lU3Rh
Y2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCktPm1ldGhvZENhbGxEdW1teSgp
KQotICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8o
bV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQobWV0aG9kQ2FsbC5jYWNoZWRQcm90b3R5cGVTdHJ1Y3R1
cmUuZ2V0KCkpKSwgY2VsbENvbnN0YW50KG1ldGhvZENhbGwuY2FjaGVkUHJvdG90eXBlLmdldCgp
KSk7CisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1f
Z3JhcGguYWRkU3RydWN0dXJlU2V0KG1ldGhvZENhbGxTdGF0dXMuc3RydWN0dXJlKCkpKSwgYmFz
ZSk7CisgICAgICAgICAgICAgICAgaWYgKG1ldGhvZENhbGxTdGF0dXMubmVlZHNQcm90b3R5cGVD
aGVjaygpKQorICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBP
cEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQobWV0aG9kQ2FsbFN0YXR1cy5wcm90b3R5cGVT
dHJ1Y3R1cmUoKSkpLCBjZWxsQ29uc3RhbnQobWV0aG9kQ2FsbFN0YXR1cy5wcm90b3R5cGUoKSkp
OwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHNldChnZXRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQsIGNlbGxDb25zdGFudChtZXRob2RDYWxsLmNhY2hlZEZ1bmN0aW9uLmdldCgp
KSk7CisgICAgICAgICAgICAgICAgc2V0KGdldEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgY2Vs
bENvbnN0YW50KG1ldGhvZENhbGxTdGF0dXMuZnVuY3Rpb24oKSkpOwogICAgICAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICAgICAgc2V0KGdldEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRk
VG9HcmFwaCh3aWxsTmVlZEZsdXNoKHN0dWJJbmZvKSA/IEdldEJ5SWRGbHVzaCA6IEdldEJ5SWQs
IE9wSW5mbyhpZGVudGlmaWVyKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBiYXNlKSk7CisgICAgICAg
ICAgICAgICAgc2V0KGdldEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaChnZXRC
eUlkU3RhdHVzLm1ha2VzQ2FsbHMoKSA/IEdldEJ5SWRGbHVzaCA6IEdldEJ5SWQsIE9wSW5mbyhp
ZGVudGlmaWVyKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBiYXNlKSk7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIG1fY3VycmVudEluZGV4ICs9IE9QQ09ERV9MRU5HVEgob3BfbWV0aG9kX2NoZWNr
KSArIE9QQ09ERV9MRU5HVEgob3BfZ2V0X2J5X2lkKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwpA
QCAtMTc3Miw4OCArMTc1OCwzMSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVu
c2lnbmVkCiAgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbV9pbmxpbmVT
dGFja1RvcC0+bV9pZGVudGlmaWVyUmVtYXBbY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFu
ZF07CiAgICAgICAgICAgICAKICAgICAgICAgICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9IG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGlkZW50aWZpZXJOdW1iZXIpOwotICAgICAgICAgICAgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJs
b2NrLT5nZXRTdHViSW5mbyhtX2N1cnJlbnRJbmRleCk7CisgICAgICAgICAgICBHZXRCeUlkU3Rh
dHVzIGdldEJ5SWRTdGF0dXMgPSBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAorICAgICAgICAg
ICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywgbV9jdXJyZW50SW5kZXgs
IGlkZW50aWZpZXIpOwogICAgICAgICAgICAgCiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NF
KQogICAgICAgICAgICAgcHJpbnRmKCJTbG93IGNhc2UgY291bnQgZm9yIEdldEJ5SWQgQCV6dSBi
YyMldTogJXU7IGV4aXQgcHJvZmlsZTogJWRcbiIsIG1fZ3JhcGguc2l6ZSgpLCBtX2N1cnJlbnRJ
bmRleCwgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5yYXJlQ2FzZVByb2ZpbGVG
b3JCeXRlY29kZU9mZnNldChtX2N1cnJlbnRJbmRleCktPm1fY291bnRlciwgbV9pbmxpbmVTdGFj
a1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ2FjaGUp
KTsKICNlbmRpZgogICAgICAgICAgICAgCi0gICAgICAgICAgICBzaXplX3Qgb2Zmc2V0ID0gbm90
Rm91bmQ7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmVTZXQgc3RydWN0dXJlU2V0OwotICAgICAgICAg
ICAgaWYgKHN0dWJJbmZvLnNlZW4KLSAgICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1Rv
cC0+bV9wcm9maWxlZEJsb2NrLT5saWtlbHlUb1Rha2VTbG93Q2FzZShtX2N1cnJlbnRJbmRleCkK
KyAgICAgICAgICAgIGlmIChnZXRCeUlkU3RhdHVzLmlzU2ltcGxlRGlyZWN0KCkKICAgICAgICAg
ICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZSht
X2N1cnJlbnRJbmRleCwgQmFkQ2FjaGUpKSB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChzdHVi
SW5mby5hY2Nlc3NUeXBlKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lk
X3NlbGY6IHsKLSAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHVi
SW5mby51LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCk7Ci0gICAgICAgICAg
ICAgICAgICAgIG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KCptX2dsb2JhbERhdGEsIGlkZW50aWZp
ZXIpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKG9mZnNl
dCAhPSBub3RGb3VuZCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZVNldC5hZGQo
c3RydWN0dXJlKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAob2Zmc2V0ICE9IG5vdEZvdW5k
KQotICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZVNldC5zaXplKCkpOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmX2xp
c3Q6IHsKLSAgICAgICAgICAgICAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0
KiBsaXN0ID0gc3R1YkluZm8udS5nZXRCeUlkUHJvdG9MaXN0LnN0cnVjdHVyZUxpc3Q7Ci0gICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNpemUgPSBzdHViSW5mby51LmdldEJ5SWRQcm90b0xp
c3QubGlzdFNpemU7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbGlzdC0+bGlzdFtp
XS5pc0RpcmVjdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IG5vdEZv
dW5kOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAg
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGxpc3QtPmxpc3RbaV0uYmFzZS5nZXQoKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmVTZXQuY29udGFpbnMoc3RydWN0dXJl
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG15T2Zmc2V0ID0gc3Ry
dWN0dXJlLT5nZXQoKm1fZ2xvYmFsRGF0YSwgaWRlbnRpZmllcik7Ci0gICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG15T2Zmc2V0ID09IG5vdEZvdW5kKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gbm90Rm91bmQ7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IG15T2Zmc2V0OwotICAgICAgICAgICAg
ICAgICAgICAgICAgZWxzZSBpZiAob2Zmc2V0ICE9IG15T2Zmc2V0KSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb2Zmc2V0ID0gbm90Rm91bmQ7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlU2V0LmFkZChzdHJ1Y3R1cmUp
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICBpZiAob2Zmc2V0ICE9IG5vdEZvdW5kKQotICAgICAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKHN0cnVjdHVyZVNldC5zaXplKCkpOwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChvZmZzZXQgPT0gbm90Rm91
bmQpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChvZmZz
ZXQgIT0gbm90Rm91bmQpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlU2V0LnNp
emUoKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGdldEJ5SWRTdGF0dXMuc3RydWN0dXJlU2V0
KCkuc2l6ZSgpKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBUaGUgaW1w
bGVtZW50YXRpb24gb2YgR2V0QnlPZmZzZXQgZG9lcyBub3Qga25vdyB0byB0ZXJtaW5hdGUgc3Bl
Y3VsYXRpdmUKICAgICAgICAgICAgICAgICAvLyBleGVjdXRpb24gaWYgaXQgZG9lc24ndCBoYXZl
IGEgcHJlZGljdGlvbiwgc28gd2UgZG8gaXQgbWFudWFsbHkuCiAgICAgICAgICAgICAgICAgaWYg
KHByZWRpY3Rpb24gPT0gUHJlZGljdE5vbmUpCiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3Jh
cGgoRm9yY2VPU1JFeGl0KTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBhZGRU
b0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoc3Ry
dWN0dXJlU2V0KSksIGJhc2UpOworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1
Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChnZXRCeUlkU3RhdHVzLnN0cnVj
dHVyZVNldCgpKSksIGJhc2UpOwogICAgICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKEdldEJ5T2Zmc2V0LCBPcEluZm8obV9ncmFwaC5t
X3N0b3JhZ2VBY2Nlc3NEYXRhLnNpemUoKSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYWRkVG9HcmFw
aChHZXRQcm9wZXJ0eVN0b3JhZ2UsIGJhc2UpKSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEgc3RvcmFnZUFjY2Vzc0RhdGE7Ci0gICAgICAgICAg
ICAgICAgc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICAgICAgICAg
IHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCA9IGdldEJ5SWRTdGF0dXMub2Zmc2V0KCk7CiAgICAg
ICAgICAgICAgICAgc3RvcmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmllck51bWJlciA9IGlkZW50aWZp
ZXJOdW1iZXI7CiAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLmFw
cGVuZChzdG9yYWdlQWNjZXNzRGF0YSk7CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
ICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaCh3aWxs
TmVlZEZsdXNoKHN0dWJJbmZvKSA/IEdldEJ5SWRGbHVzaCA6IEdldEJ5SWQsIE9wSW5mbyhpZGVu
dGlmaWVyTnVtYmVyKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBiYXNlKSk7CisgICAgICAgICAgICAg
ICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoZ2V0QnlJ
ZFN0YXR1cy5tYWtlc0NhbGxzKCkgPyBHZXRCeUlkRmx1c2ggOiBHZXRCeUlkLCBPcEluZm8oaWRl
bnRpZmllck51bWJlciksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYmFzZSkpOwogCiAgICAgICAgICAg
ICBORVhUX09QQ09ERShvcF9nZXRfYnlfaWQpOwogICAgICAgICB9CkBAIC0xODY0LDg2ICsxNzkz
LDcyIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAg
ICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBtX2lubGluZVN0YWNrVG9wLT5tX2lkZW50
aWZpZXJSZW1hcFtjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kXTsKICAgICAgICAgICAg
IGJvb2wgZGlyZWN0ID0gY3VycmVudEluc3RydWN0aW9uWzhdLnUub3BlcmFuZDsKIAotICAgICAg
ICAgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gbV9pbmxpbmVTdGFja1RvcC0+bV9w
cm9maWxlZEJsb2NrLT5nZXRTdHViSW5mbyhtX2N1cnJlbnRJbmRleCk7Ci0gICAgICAgICAgICBp
ZiAoIXN0dWJJbmZvLnNlZW4pCisgICAgICAgICAgICBQdXRCeUlkU3RhdHVzIHB1dEJ5SWRTdGF0
dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAorICAgICAgICAgICAgICAgIG1faW5saW5l
U3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRJbmRl
eCwKKyAgICAgICAgICAgICAgICBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihpZGVudGlmaWVyTnVt
YmVyKSk7CisgICAgICAgICAgICBpZiAoIXB1dEJ5SWRTdGF0dXMuaXNTZXQoKSkKICAgICAgICAg
ICAgICAgICBhZGRUb0dyYXBoKEZvcmNlT1NSRXhpdCk7CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIGJvb2wgYWxyZWFkeUdlbmVyYXRlZCA9IGZhbHNlOwotICAgICAgICAgICAgCiAjaWYgREZH
X0VOQUJMRShERUJVR19WRVJCT1NFKQogICAgICAgICAgICAgcHJpbnRmKCJTbG93IGNhc2UgY291
bnQgZm9yIFB1dEJ5SWQgQCV6dSBiYyMldTogJXU7IGV4aXQgcHJvZmlsZTogJWRcbiIsIG1fZ3Jh
cGguc2l6ZSgpLCBtX2N1cnJlbnRJbmRleCwgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJs
b2NrLT5yYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChtX2N1cnJlbnRJbmRleCktPm1f
Y291bnRlciwgbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1
cnJlbnRJbmRleCwgQmFkQ2FjaGUpKTsKICNlbmRpZiAgICAgICAgICAgIAogCi0gICAgICAgICAg
ICBpZiAoc3R1YkluZm8uc2VlbgotICAgICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9w
LT5tX3Byb2ZpbGVkQmxvY2stPmxpa2VseVRvVGFrZVNsb3dDYXNlKG1fY3VycmVudEluZGV4KQot
ICAgICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4
aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRDYWNoZSkpIHsKLSAgICAgICAgICAgICAgICBzd2l0
Y2ggKHN0dWJJbmZvLmFjY2Vzc1R5cGUpIHsKLSAgICAgICAgICAgICAgICBjYXNlIGFjY2Vzc19w
dXRfYnlfaWRfcmVwbGFjZTogewotICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IHN0dWJJbmZvLnUucHV0QnlJZFJlcGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQo
KTsKLSAgICAgICAgICAgICAgICAgICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0gbV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoaWRlbnRpZmllck51bWJlcik7Ci0gICAgICAgICAgICAgICAgICAgIHNp
emVfdCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCgqbV9nbG9iYWxEYXRhLCBpZGVudGlmaWVyKTsK
LSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmIChvZmZzZXQgIT0g
bm90Rm91bmQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1
Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpKSwgYmFzZSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dEJ5T2Zmc2V0LCBPcEluZm8o
bV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLnNpemUoKSksIGJhc2UsIGFkZFRvR3JhcGgoR2V0
UHJvcGVydHlTdG9yYWdlLCBiYXNlKSwgdmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSBzdG9yYWdlQWNjZXNz
RGF0YTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCA9
IG9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2VBY2Nlc3NEYXRhLmlkZW50
aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOwotICAgICAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLmFwcGVuZChzdG9yYWdlQWNjZXNzRGF0YSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIGFscmVhZHlH
ZW5lcmF0ZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgotICAg
ICAgICAgICAgICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdDogewot
ICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHByZXZpb3VzU3RydWN0dXJlID0gc3R1Yklu
Zm8udS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZS5nZXQoKTsKLSAgICAgICAg
ICAgICAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBzdHViSW5mby51LnB1dEJ5SWRU
cmFuc2l0aW9uLnN0cnVjdHVyZS5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgICAgIGlmIChwcmV2aW91c1N0cnVjdHVyZS0+cHJvcGVydHlTdG9yYWdlQ2FwYWNp
dHkoKSAhPSBuZXdTdHJ1Y3R1cmUtPnByb3BlcnR5U3RvcmFnZUNhcGFjaXR5KCkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgICAgIFN0cnVjdHVyZUNoYWluKiBzdHJ1Y3R1cmVDaGFpbiA9IHN0dWJJbmZvLnUucHV0
QnlJZFRyYW5zaXRpb24uY2hhaW4uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgICAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihpZGVudGlmaWVyTnVtYmVyKTsKLSAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG9mZnNl
dCA9IG5ld1N0cnVjdHVyZS0+Z2V0KCptX2dsb2JhbERhdGEsIGlkZW50aWZpZXIpOworICAgICAg
ICAgICAgaWYgKHB1dEJ5SWRTdGF0dXMuaXNTaW1wbGVSZXBsYWNlKCkpIHsKKyAgICAgICAgICAg
ICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1
cmVTZXQocHV0QnlJZFN0YXR1cy5vbGRTdHJ1Y3R1cmUoKSkpLCBiYXNlKTsKKyAgICAgICAgICAg
ICAgICBhZGRUb0dyYXBoKFB1dEJ5T2Zmc2V0LCBPcEluZm8obV9ncmFwaC5tX3N0b3JhZ2VBY2Nl
c3NEYXRhLnNpemUoKSksIGJhc2UsIGFkZFRvR3JhcGgoR2V0UHJvcGVydHlTdG9yYWdlLCBiYXNl
KSwgdmFsdWUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFN0b3JhZ2VBY2Nl
c3NEYXRhIHN0b3JhZ2VBY2Nlc3NEYXRhOworICAgICAgICAgICAgICAgIHN0b3JhZ2VBY2Nlc3NE
YXRhLm9mZnNldCA9IHB1dEJ5SWRTdGF0dXMub2Zmc2V0KCk7CisgICAgICAgICAgICAgICAgc3Rv
cmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7CisgICAg
ICAgICAgICAgICAgbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLmFwcGVuZChzdG9yYWdlQWNj
ZXNzRGF0YSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHB1dEJ5SWRTdGF0dXMuaXNTaW1wbGVU
cmFuc2l0aW9uKCkKKyAgICAgICAgICAgICAgICAgICAgICAgJiYgcHV0QnlJZFN0YXR1cy5vbGRT
dHJ1Y3R1cmUoKS0+cHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkoKSA9PSBwdXRCeUlkU3RhdHVzLm5l
d1N0cnVjdHVyZSgpLT5wcm9wZXJ0eVN0b3JhZ2VDYXBhY2l0eSgpCisgICAgICAgICAgICAgICAg
ICAgICAgICYmIHN0cnVjdHVyZUNoYWluSXNTdGlsbFZhbGlkKAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGlyZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0QnlJZFN0YXR1
cy5vbGRTdHJ1Y3R1cmUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dEJ5SWRTdGF0
dXMuc3RydWN0dXJlQ2hhaW4oKSkpIHsKKworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hl
Y2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChwdXRCeUlkU3RhdHVz
Lm9sZFN0cnVjdHVyZSgpKSksIGJhc2UpOworICAgICAgICAgICAgICAgIGlmICghZGlyZWN0KSB7
CisgICAgICAgICAgICAgICAgICAgIGlmICghcHV0QnlJZFN0YXR1cy5vbGRTdHJ1Y3R1cmUoKS0+
c3RvcmVkUHJvdG90eXBlKCkuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRU
b0dyYXBoKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoZWNrU3RydWN0dXJlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChw
dXRCeUlkU3RhdHVzLm9sZFN0cnVjdHVyZSgpLT5zdG9yZWRQcm90b3R5cGUoKS5hc0NlbGwoKS0+
c3RydWN0dXJlKCkpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsQ29uc3RhbnQo
cHV0QnlJZFN0YXR1cy5vbGRTdHJ1Y3R1cmUoKS0+c3RvcmVkUHJvdG90eXBlKCkuYXNDZWxsKCkp
KTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmIChvZmZzZXQg
IT0gbm90Rm91bmQgJiYgc3RydWN0dXJlQ2hhaW5Jc1N0aWxsVmFsaWQoZGlyZWN0LCBwcmV2aW91
c1N0cnVjdHVyZSwgc3RydWN0dXJlQ2hhaW4pKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBh
ZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQo
cHJldmlvdXNTdHJ1Y3R1cmUpKSwgYmFzZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IWRpcmVjdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJldmlvdXNTdHJ1
Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRT
dHJ1Y3R1cmVTZXQocHJldmlvdXNTdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpLmFzQ2VsbCgp
LT5zdHJ1Y3R1cmUoKSkpLCBjZWxsQ29uc3RhbnQocHJldmlvdXNTdHJ1Y3R1cmUtPnN0b3JlZFBy
b3RvdHlwZSgpLmFzQ2VsbCgpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiogaXQg
PSBzdHJ1Y3R1cmVDaGFpbi0+aGVhZCgpOyAqaXQ7ICsraXQpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSAoKml0KS0+c3RvcmVkUHJvdG90eXBl
KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm90b3R5cGUuaXNOdWxs
KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHByb3RvdHlwZS5pc0NlbGwoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUs
IE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChwcm90b3R5cGUuYXNDZWxsKCktPnN0cnVj
dHVyZSgpKSksIGNlbGxDb25zdGFudChwcm90b3R5cGUuYXNDZWxsKCkpKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dFN0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRk
U3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEocHJldmlvdXNT
dHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSkpKSwgYmFzZSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0QnlPZmZzZXQsIE9wSW5m
byhtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuc2l6ZSgpKSwgYmFzZSwgYWRkVG9HcmFwaChH
ZXRQcm9wZXJ0eVN0b3JhZ2UsIGJhc2UpLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhIHN0b3JhZ2VBY2Nl
c3NEYXRhOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0
ID0gb2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZUFjY2Vzc0RhdGEuaWRl
bnRpZmllck51bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuYXBwZW5kKHN0b3JhZ2VBY2Nlc3NEYXRhKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgYWxyZWFk
eUdlbmVyYXRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGZvciAoV3JpdGVCYXJyaWVy
PFN0cnVjdHVyZT4qIGl0ID0gcHV0QnlJZFN0YXR1cy5zdHJ1Y3R1cmVDaGFpbigpLT5oZWFkKCk7
ICppdDsgKytpdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUg
PSAoKml0KS0+c3RvcmVkUHJvdG90eXBlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
cHJvdG90eXBlLmlzTnVsbCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHByb3RvdHlwZS5pc0NlbGwoKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENoZWNrU3RydWN0dXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5m
byhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChwcm90b3R5cGUuYXNDZWxsKCktPnN0cnVjdHVyZSgp
KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbENvbnN0YW50KHByb3RvdHlwZS5h
c0NlbGwoKSkpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWFscmVh
ZHlHZW5lcmF0ZWQpIHsKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKAorICAgICAgICAgICAg
ICAgICAgICBQdXRTdHJ1Y3R1cmUsCisgICAgICAgICAgICAgICAgICAgIE9wSW5mbygKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguYWRkU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dEJ5SWRTdGF0dXMub2xkU3RydWN0dXJlKCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dEJ5SWRTdGF0dXMubmV3U3RydWN0
dXJlKCkpKSksCisgICAgICAgICAgICAgICAgICAgIGJhc2UpOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoCisgICAgICAgICAgICAgICAgICAgIFB1dEJ5T2Zm
c2V0LAorICAgICAgICAgICAgICAgICAgICBPcEluZm8obV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NE
YXRhLnNpemUoKSksCisgICAgICAgICAgICAgICAgICAgIGJhc2UsCisgICAgICAgICAgICAgICAg
ICAgIGFkZFRvR3JhcGgoR2V0UHJvcGVydHlTdG9yYWdlLCBiYXNlKSwKKyAgICAgICAgICAgICAg
ICAgICAgdmFsdWUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFN0b3JhZ2VB
Y2Nlc3NEYXRhIHN0b3JhZ2VBY2Nlc3NEYXRhOworICAgICAgICAgICAgICAgIHN0b3JhZ2VBY2Nl
c3NEYXRhLm9mZnNldCA9IHB1dEJ5SWRTdGF0dXMub2Zmc2V0KCk7CisgICAgICAgICAgICAgICAg
c3RvcmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7Cisg
ICAgICAgICAgICAgICAgbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLmFwcGVuZChzdG9yYWdl
QWNjZXNzRGF0YSk7CisgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGlmIChk
aXJlY3QpCiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0QnlJZERpcmVjdCwgT3BJ
bmZvKGlkZW50aWZpZXJOdW1iZXIpLCBiYXNlLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgZWxz
ZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVTZXQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZVNldC5oCShy
ZXZpc2lvbiAxMDU1MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVy
ZVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgREZHU3RydWN0dXJlU2V0X2gK
LSNkZWZpbmUgREZHU3RydWN0dXJlU2V0X2gKLQotI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgot
Ci0jaWYgRU5BQkxFKERGR19KSVQpCi0KLSNpbmNsdWRlICJQcmVkaWN0ZWRUeXBlLmgiCi0jaW5j
bHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBKU0Mg
ewotCi1jbGFzcyBTdHJ1Y3R1cmU7Ci0KLW5hbWVzcGFjZSBERkcgewotCi1jbGFzcyBTdHJ1Y3R1
cmVBYnN0cmFjdFZhbHVlOwotCi1jbGFzcyBTdHJ1Y3R1cmVTZXQgewotcHVibGljOgotICAgIFN0
cnVjdHVyZVNldCgpIHsgfQotICAgIAotICAgIFN0cnVjdHVyZVNldChTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKLSAgICB7Ci0gICAgICAgIG1fc3RydWN0dXJlcy5hcHBlbmQoc3RydWN0dXJlKTsKLSAg
ICB9Ci0gICAgCi0gICAgdm9pZCBjbGVhcigpCi0gICAgewotICAgICAgICBtX3N0cnVjdHVyZXMu
Y2xlYXIoKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBhZGQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
Ci0gICAgewotICAgICAgICBBU1NFUlQoIWNvbnRhaW5zKHN0cnVjdHVyZSkpOwotICAgICAgICBt
X3N0cnVjdHVyZXMuYXBwZW5kKHN0cnVjdHVyZSk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgYWRk
QWxsKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpCi0gICAgewotICAgICAgICBib29sIGNoYW5n
ZWQgPSBmYWxzZTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvdGhlci5zaXplKCk7
ICsraSkgewotICAgICAgICAgICAgaWYgKGNvbnRhaW5zKG90aGVyW2ldKSkKLSAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGFkZChvdGhlcltpXSk7Ci0gICAgICAgICAgICBj
aGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gY2hhbmdlZDsKLSAgICB9
Ci0gICAgCi0gICAgdm9pZCByZW1vdmUoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc3RydWN0dXJlcy5zaXplKCk7ICsraSkgewot
ICAgICAgICAgICAgaWYgKG1fc3RydWN0dXJlc1tpXSAhPSBzdHJ1Y3R1cmUpCi0gICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fc3RydWN0dXJlc1tp
XSA9IG1fc3RydWN0dXJlcy5sYXN0KCk7Ci0gICAgICAgICAgICBtX3N0cnVjdHVyZXMucmVtb3Zl
TGFzdCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAg
IGJvb2wgY29udGFpbnMoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0Ci0gICAgewotICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc3RydWN0dXJlcy5zaXplKCk7ICsraSkgewotICAg
ICAgICAgICAgaWYgKG1fc3RydWN0dXJlc1tpXSA9PSBzdHJ1Y3R1cmUpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LSAgICAKLSAgICBib29sIGlzU3Vic2V0T2YoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikgY29u
c3QKLSAgICB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zdHJ1Y3R1cmVzLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoIW90aGVyLmNvbnRhaW5zKG1fc3RydWN0dXJl
c1tpXSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICBib29sIGlzU3VwZXJzZXRPZihjb25zdCBT
dHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG90aGVyLmlz
U3Vic2V0T2YoKnRoaXMpOwotICAgIH0KLSAgICAKLSAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RydWN0dXJlcy5zaXplKCk7IH0KLSAgICAKLSAgICBTdHJ1Y3R1cmUqIGF0KHNp
emVfdCBpKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZXMuYXQoaSk7IH0KLSAgICAKLSAgICBT
dHJ1Y3R1cmUqIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIGF0KGkpOyB9Ci0g
ICAgCi0gICAgU3RydWN0dXJlKiBsYXN0KCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmVzLmxh
c3QoKTsgfQotCi0gICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uRnJvbVN0cnVjdHVyZXMoKSBj
b25zdAotICAgIHsKLSAgICAgICAgUHJlZGljdGVkVHlwZSByZXN1bHQgPSBQcmVkaWN0Tm9uZTsK
LSAgICAgICAgCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zdHJ1Y3R1cmVzLnNp
emUoKTsgKytpKQotICAgICAgICAgICAgbWVyZ2VQcmVkaWN0aW9uKHJlc3VsdCwgcHJlZGljdGlv
bkZyb21TdHJ1Y3R1cmUobV9zdHJ1Y3R1cmVzW2ldKSk7Ci0gICAgICAgIAotICAgICAgICByZXR1
cm4gcmVzdWx0OwotICAgIH0KLSAgICAKLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU3RydWN0
dXJlU2V0JiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChtX3N0cnVjdHVyZXMuc2l6
ZSgpICE9IG90aGVyLm1fc3RydWN0dXJlcy5zaXplKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIAotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc3RydWN0dXJl
cy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKCFvdGhlci5jb250YWlucyhtX3N0cnVj
dHVyZXNbaV0pKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotI2lmbmRlZiBOREVCVUcK
LSAgICB2b2lkIGR1bXAoRklMRSogb3V0KQotICAgIHsKLSAgICAgICAgZnByaW50ZihvdXQsICJb
Iik7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zdHJ1Y3R1cmVzLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgICAgICBpZiAoaSkKLSAgICAgICAgICAgICAgICBmcHJpbnRmKG91dCwg
IiwgIik7Ci0gICAgICAgICAgICBmcHJpbnRmKG91dCwgIiVwIiwgbV9zdHJ1Y3R1cmVzW2ldKTsK
LSAgICAgICAgfQotICAgICAgICBmcHJpbnRmKG91dCwgIl0iKTsKLSAgICB9Ci0jZW5kaWYKLSAg
ICAKLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU7Ci0g
ICAgCi0gICAgVmVjdG9yPFN0cnVjdHVyZSosIDI+IG1fc3RydWN0dXJlczsKLX07Ci0KLX0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKLQotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotCi0jZW5k
aWYgLy8gREZHU3RydWN0dXJlU2V0X2gK
</data>
<flag name="review"
          id="124493"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>