<?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>131906</bug_id>
          
          <creation_ts>2014-04-19 21:53:16 -0700</creation_ts>
          <short_desc>Take block execution count estimates into account when voting double</short_desc>
          <delta_ts>2014-04-21 11:44:46 -0700</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>atrick</cc>
    
    <cc>barraclough</cc>
    
    <cc>bunhere</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>juergen</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>rakuco</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1002337</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-04-19 21:53:16 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1002338</commentid>
    <comment_count>1</comment_count>
      <attachid>229754</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-04-19 22:03:41 -0700</bug_when>
    <thetext>Created attachment 229754
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1002339</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-04-19 22:05:15 -0700</bug_when>
    <thetext>Attachment 229754 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGVariableAccessData.cpp:100:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGVariableAccessData.cpp:114:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGVariableAccessData.cpp:119:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGVariableAccessData.cpp:124:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGVariableAccessData.cpp:138:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGVariableAccessData.cpp:148:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGVariableAccessData.h:202:  The parameter name &quot;doubleFormatState&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 7 in 14 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>1002392</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-04-20 10:11:34 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Attachment 229754 [details] did not pass style-queue:
&gt; 
&gt; 
&gt; ERROR: Source/JavaScriptCore/dfg/DFGVariableAccessData.cpp:100:  Multi line control clauses should use braces.  [whitespace/braces] [4]
&gt; ERROR: Source/JavaScriptCore/dfg/DFGVariableAccessData.cpp:114:  Multi line control clauses should use braces.  [whitespace/braces] [4]
&gt; ERROR: Source/JavaScriptCore/dfg/DFGVariableAccessData.cpp:119:  Multi line control clauses should use braces.  [whitespace/braces] [4]
&gt; ERROR: Source/JavaScriptCore/dfg/DFGVariableAccessData.cpp:124:  Multi line control clauses should use braces.  [whitespace/braces] [4]
&gt; ERROR: Source/JavaScriptCore/dfg/DFGVariableAccessData.cpp:138:  Multi line control clauses should use braces.  [whitespace/braces] [4]
&gt; ERROR: Source/JavaScriptCore/dfg/DFGVariableAccessData.cpp:148:  Multi line control clauses should use braces.  [whitespace/braces] [4]

No.

&gt; ERROR: Source/JavaScriptCore/dfg/DFGVariableAccessData.h:202:  The parameter name &quot;doubleFormatState&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]

Fixed.

&gt; Total errors found: 7 in 14 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1002407</commentid>
    <comment_count>4</comment_count>
      <attachid>229754</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-04-20 11:20:39 -0700</bug_when>
    <thetext>Comment on attachment 229754
the patch

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

r=me

&gt; Source/JavaScriptCore/dfg/DFGNodeFlags.h:63
&gt; +#define NodeBytecodeReallyWantsInt       0x2000 // The result of this computation is known to be used in a context that strongly prefers integer values, to the point that we should avoid using doubles if at all possible.

I&apos;m not a big fan of this name. &quot;Really&quot; doesn&apos;t do much to explain the difference from UsesAsInt.

How about &quot;NodeBytecodeUsesAsArrayIndex&quot;?

&gt; Source/JavaScriptCore/dfg/DFGOSREntrypointCreationPhase.cpp:86
&gt; -        BasicBlock* newRoot = insertionSet.insert(0, PNaN);
&gt; +        BasicBlock* newRoot = insertionSet.insert(0, 1);

Why 1 instead of NaN? I thought one goal of this patch was to keep the entry point as NaN, and require clients to be NaN-friendly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1002465</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-04-20 21:52:30 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 229754 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=229754&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGNodeFlags.h:63
&gt; &gt; +#define NodeBytecodeReallyWantsInt       0x2000 // The result of this computation is known to be used in a context that strongly prefers integer values, to the point that we should avoid using doubles if at all possible.
&gt; 
&gt; I&apos;m not a big fan of this name. &quot;Really&quot; doesn&apos;t do much to explain the difference from UsesAsInt.
&gt; 
&gt; How about &quot;NodeBytecodeUsesAsArrayIndex&quot;?

Yeah, that&apos;s better.  I&apos;ll change.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGOSREntrypointCreationPhase.cpp:86
&gt; &gt; -        BasicBlock* newRoot = insertionSet.insert(0, PNaN);
&gt; &gt; +        BasicBlock* newRoot = insertionSet.insert(0, 1);
&gt; 
&gt; Why 1 instead of NaN? I thought one goal of this patch was to keep the entry point as NaN, and require clients to be NaN-friendly.

:-/  One of the goals of this patch is indeed to ensure that if you use executionCount, you should have a sensible default if it&apos;s NaN.  One of the places where it *should* be NaN is for injected loop pre-headers and broken critical edges, because: (1) these blocks are synthetic so we don&apos;t know for sure how frequently they execute and we wouldn&apos;t know even if we had bytecode-level execution count profiling, and (2) these blocks contain no real code so it wouldn&apos;t be worth it to put effort towards trying to measure or recover an execution count for them.

In this code, the OSR entrypoint phase is creating a different kind of block, that is neither a broken critical edge nor a loop pre-header.  It&apos;s the entrypoint itself.  And we know for sure that under the definition of &quot;executionCount&quot; the entrypoint executes once, since &quot;1&quot; means &quot;1 execution per invocation&quot; - so the entrypoint is definitely something that executes once.

On the other hand, it&apos;s true that using NaN here would be fine because it would signal to the clients of executionCount to figure it out for themselves and currently the clients of this data use NaN to mean &quot;it didn&apos;t execute a lot&quot;.  Using 0 would be fine, too.  Basically, using anything that means &quot;it didn&apos;t execute a lot&quot; would be fine.  (Strictly speaking, using *any* value would be &quot;correct&quot; since it&apos;s just profiling, but what we want is just a value that indicates that it didn&apos;t run a lot and 1 will do fine.)  However, since we can be sure that under the definition of executionCount, 1 most accurately describes the execution count of this block, we might as well just use that.

I&apos;ll try to sum this up somehow in a comment before I land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1002572</commentid>
    <comment_count>6</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-04-21 11:19:04 -0700</bug_when>
    <thetext>&gt; However, since we can be sure that under the definition of executionCount, 1 most accurately describes the execution count of this block, we might as well just use that.

Makes sense.

I think the thing that could have helped me understand this best would have been:

Your ChangeLog comment, &quot;Realize that OSR entrypoint creation creates blocks that have NaN execution count&quot;. I assumed, wrongly, that the entrypoint itself would be NaN, but actually you meant a loop pre-header created by the entrypoint.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1002582</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-04-21 11:44:28 -0700</bug_when>
    <thetext>Landed in https://trac.webkit.org/r167600</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>229754</attachid>
            <date>2014-04-19 22:03:41 -0700</date>
            <delta_ts>2014-04-20 11:20:38 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>45074</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY3NTYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg2IEBA
CisyMDE0LTA0LTE5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
VGFrZSBibG9jayBleGVjdXRpb24gY291bnQgZXN0aW1hdGVzIGludG8gYWNjb3VudCB3aGVuIHZv
dGluZyBkb3VibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEzMTkwNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAg
ICAKKyAgICAgICAgVGhpcyB3YXMgYSBkcmFtYSBpbiB0aHJlZSBhY3RzLgorICAgICAgICAKKyAg
ICAgICAgQWN0IEk6IFNsdXJwIGluIEJhc2ljQmxvY2s6OmV4ZWN1dGlvbkNvdW50IGFuZCB1c2Ug
aXQgYXMgYSB3ZWlnaHQgd2hlbiBjb3VudGluZyB0aGUKKyAgICAgICAgICAgIG51bWJlciBvZiB1
c2VzIG9mIGEgdmFyaWFibGUgdGhhdCB3YW50IGRvdWJsZSBvciBub24tZG91YmxlLiBFYXN5IGFz
IHBpZS4gVGhpcworICAgICAgICAgICAgZ2F2ZSBtZSBhIGh1Z2Ugc3BlZWQtdXAgb24gRmxvYXRN
TSBhbmQgYSBodWdlIHNsb3ctZG93biBvbiBiYXNpY2FsbHkgZXZlcnl0aGluZworICAgICAgICAg
ICAgZWxzZS4KKyAgICAgICAgCisgICAgICAgIEFjdCBJSTogUmVhbGl6ZSB0aGF0IHRoZXJlIHdl
cmUgc29tZSBwcm9ncmFtcyB3aGVyZSBvdXIgcHJldmlvdXMgZG91YmxlIHZvdGluZyB3YXMKKyAg
ICAgICAgICAgIGp1c3Qgb24gdGhlIGVkZ2Ugb2YgZGlzYXN0ZXIgYW5kIG1ha2luZyBpdCBtb3Jl
IHByZWNpc2UgdGlwcGVkIGl0IG92ZXIuIEluCisgICAgICAgICAgICBwYXJ0aWN1bGFyLCBpZiB5
b3UgaGFkIGFuIGludGVnZXIgdmFyaWFibGUgdGhhdCB3b3VsZCBpbmZyZXF1ZW50bHkgYmUgdXNl
ZCBpbiBhCisgICAgICAgICAgICBjb21wdXRhdGlvbiB0aGF0IHJlc3VsdGVkIGluIGEgdmFyaWFi
bGUgdGhhdCB3YXMgZnJlcXVlbnRseSB1c2VkIGFzIGFuIGFycmF5IGluZGV4LAorICAgICAgICAg
ICAgdGhlIG91dGVyIGluZnJlcXVlbnRuZXNzIHdvdWxkIGJlIHRoZSB0aGluZyB3ZSdkIHVzZSBp
biB0aGUgdm90ZS4gU28sIGFuIGFycmF5CisgICAgICAgICAgICBpbmRleCB3b3VsZCBiZWNvbWUg
ZG91YmxlLiBXZSBmaXggdGhpcyBieSByZXZpdmluZyBnbG9iYWwgYmFja3dhcmRzIHByb3BhZ2F0
aW9uCisgICAgICAgICAgICBhbmQgaW50cm9kdWNpbmcgdGhlIGNvbmNlcHQgb2YgUmVhbGx5V2Fu
dHNJbnQsIHdoaWNoIGlzIHVzZWQganVzdCBmb3IgYXJyYXkKKyAgICAgICAgICAgIGluZGljZXMu
IEFueSB2YXJpYWJsZSB0cmFuc2l0aXZlbHkgZmxhZ2dlZCBhcyBSZWFsbHlXYW50c0ludCB3aWxs
IG5ldmVyIGJlIGZvcmNlZAorICAgICAgICAgICAgZG91YmxlLiBXZSBuZWVkIHRoYXQgZmxhZyB0
byBiZSBzZXBhcmF0ZSBmcm9tIFVzZWRBc0ludCwgc2luY2UgVXNlZEFzSW50IG5lZWRzIHRvCisg
ICAgICAgICAgICBiZSBzZXQgaW4gYml0b3BzIGZvciBSYWdlQ29udmVyc2lvbiBidXQgdXNpbmcg
aXQgZm9yIGRvdWJsZSBmb3JjaW5nIGlzIHRvbyBtdWNoLgorICAgICAgICAgICAgQmFzaWNhbGx5
LCBpdCdzIGNoZWFwZXIgdG8gaGF2ZSB0byBjb252ZXJ0IGEgZG91YmxlIHRvIGFuIGludCBmb3Ig
YSBiaXRvcCB0aGFuIGl0CisgICAgICAgICAgICBpcyB0byBjb252ZXJ0IGEgZG91YmxlIHRvIGFu
IGludCBmb3IgYW4gYXJyYXkgaW5kZXg7IGFsc28gYSB2YXJpYWJsZSBiZWluZyB1c2VkIGFzCisg
ICAgICAgICAgICBhbiBhcnJheSBpbmRleCBpcyBhIG11Y2ggc3Ryb25nZXIgaGludCB0aGF0IGl0
IG91Z2h0IHRvIGJlIGFuIGludC4gVGhpcyByZWNvdmVyZWQKKyAgICAgICAgICAgIHBlcmZvcm1h
bmNlIG9uIGV2ZXJ5dGhpbmcgZXhjZXB0IHByb2dyYW1zIHRoYXQgdXNlZCBGVEwgT1NSIGVudHJ5
LgorICAgICAgICAKKyAgICAgICAgQWN0IElJSTogUmVhbGl6ZSB0aGF0IE9TUiBlbnRyeXBvaW50
IGNyZWF0aW9uIGNyZWF0ZXMgYmxvY2tzIHRoYXQgaGF2ZSBOYU4gZXhlY3V0aW9uCisgICAgICAg
ICAgICBjb3VudCwgd2hpY2ggdGhlbiBjb21wbGV0ZWx5IHBvbGx1dGVzIHRoZSB3ZWlnaHRpbmcg
LSBlc3NlbnRpYWxseSBhbGwgdm90ZXMgZ28KKyAgICAgICAgICAgIE5hTi4gRml4IHRoaXMgd2l0
aCBzb21lIHN1cmdpY2FsIGRlZmVuc2VzLiBCYXNpY2FsbHksIGFueSBjbGllbnQgb2YgZXhlY3V0
aW9uCisgICAgICAgICAgICBjb3VudHMgc2hvdWxkIGFsbG93IGZvciB0aGVtIHRvIGJlIE5hTiBh
bmQgc2hvdWxkbid0IGNvbXBsZXRlbHkgZmFsbCBvZmYgYSBjbGlmZgorICAgICAgICAgICAgd2hl
biBpdCBoYXBwZW5zLgorICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBhd2Vzb21lLiA3NSUgc3Bl
ZWQtdXAgb24gRmxvYXRNTS4gMTElIHNwZWVkLXVwIG9uIGF1ZGlvLWRmdC4gVGhpcyBsZWFkcyB0
bworICAgICAgICA3JSBzcGVlZC11cCBvbiBBc21CZW5jaCBhbmQgMiUgc3BlZWQtdXAgb24gS3Jh
a2VuLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENv
cmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZGZnL0RGR0JhY2t3YXJk
c1Byb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJhY2t3YXJkc1Byb3Bh
Z2F0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6OkRGRzo6QmFja3dhcmRzUHJvcGFnYXRp
b25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wQmxvY2tIZWFkZXIpOgorICAgICAgICAqIGRmZy9ERkdH
cmFwaC5oOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjp2b3RlTm9kZSk6CisgICAgICAgIChK
U0M6OkRGRzo6R3JhcGg6OnZvdGVDaGlsZHJlbik6CisgICAgICAgICogZGZnL0RGR05vZGVGbGFn
cy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZHVtcE5vZGVGbGFncyk6CisgICAgICAgICogZGZn
L0RGR05vZGVGbGFncy5oOgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25Q
aGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2U6
OnJ1bik6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBs
YW46OmNvbXBpbGVJblRocmVhZEltcGwpOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJv
cGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0
aW9uUGhhc2U6OmRvRG91YmxlVm90aW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZTo6ZG9Sb3VuZE9mRG91YmxlVm90aW5nKToKKyAgICAgICAgKiBkZmcv
REZHVmFyaWFibGVBY2Nlc3NEYXRhLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6VmFy
aWFibGVBY2Nlc3NEYXRhOjpWYXJpYWJsZUFjY2Vzc0RhdGEpOgorICAgICAgICAoSlNDOjpERkc6
OlZhcmlhYmxlQWNjZXNzRGF0YTo6bWVyZ2VJc0NhcHR1cmVkKToKKyAgICAgICAgKEpTQzo6REZH
OjpWYXJpYWJsZUFjY2Vzc0RhdGE6Om1lcmdlU2hvdWxkTmV2ZXJVbmJveCk6CisgICAgICAgIChK
U0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjpwcmVkaWN0KToKKyAgICAgICAgKEpTQzo6REZH
OjpWYXJpYWJsZUFjY2Vzc0RhdGE6Om1lcmdlQXJndW1lbnRBd2FyZVByZWRpY3Rpb24pOgorICAg
ICAgICAoSlNDOjpERkc6OlZhcmlhYmxlQWNjZXNzRGF0YTo6c2hvdWxkVXNlRG91YmxlRm9ybWF0
QWNjb3JkaW5nVG9Wb3RlKToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGE6
OnRhbGx5Vm90ZXNGb3JTaG91bGRVc2VEb3VibGVGb3JtYXQpOgorICAgICAgICAoSlNDOjpERkc6
OlZhcmlhYmxlQWNjZXNzRGF0YTo6bWVyZ2VEb3VibGVGb3JtYXRTdGF0ZSk6CisgICAgICAgIChK
U0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjptYWtlUHJlZGljdGlvbkZvckRvdWJsZUZvcm1h
dCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjpmbHVzaEZvcm1hdCk6
CisgICAgICAgICogZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oOgorICAgICAgICAoSlNDOjpE
Rkc6OlZhcmlhYmxlQWNjZXNzRGF0YTo6dm90ZSk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFi
bGVBY2Nlc3NEYXRhOjpWYXJpYWJsZUFjY2Vzc0RhdGEpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpERkc6OlZhcmlhYmxlQWNjZXNzRGF0YTo6bWVyZ2VJc0NhcHR1cmVkKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGE6Om1lcmdlU2hvdWxkTmV2ZXJVbmJv
eCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjpwcmVk
aWN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGE6Om1l
cmdlQXJndW1lbnRBd2FyZVByZWRpY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6
OlZhcmlhYmxlQWNjZXNzRGF0YTo6c2hvdWxkVXNlRG91YmxlRm9ybWF0QWNjb3JkaW5nVG9Wb3Rl
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGE6OnRhbGx5
Vm90ZXNGb3JTaG91bGRVc2VEb3VibGVGb3JtYXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpE
Rkc6OlZhcmlhYmxlQWNjZXNzRGF0YTo6bWVyZ2VEb3VibGVGb3JtYXRTdGF0ZSk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjptYWtlUHJlZGljdGlvbkZv
ckRvdWJsZUZvcm1hdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nl
c3NEYXRhOjpmbHVzaEZvcm1hdCk6IERlbGV0ZWQuCisKIDIwMTQtMDQtMTkgIEZpbGlwIFBpemxv
ICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBJdCBzaG91bGQgYmUgT0sgdG8gc3RvcmUg
bmV3IGZpZWxkcyBpbnRvIG9iamVjdHMgdGhhdCBoYXZlIG5vIHByb3RvdHlwZXMKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE2NzU0MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTk3LDYg
KzE5Nyw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RGR1VzZUtpbmQu
Y3BwCiAgICAgZGZnL0RGR1ZhbGlkYXRlLmNwcAogICAgIGRmZy9ERkdWYWx1ZVNvdXJjZS5jcHAK
KyAgICBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmNwcAogICAgIGRmZy9ERkdWYXJpYWJsZUFj
Y2Vzc0RhdGFEdW1wLmNwcAogICAgIGRmZy9ERkdWYXJpYWJsZUV2ZW50LmNwcAogICAgIGRmZy9E
RkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNjc1NDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC00NTAsNiArNDUwLDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdVc2VLaW5kLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdWYWxp
ZGF0ZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHVmFsdWVTb3Vy
Y2UuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1ZhcmlhYmxlQWNj
ZXNzRGF0YS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHVmFyaWFi
bGVBY2Nlc3NEYXRhRHVtcC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdc
REZHVmFyaWFibGVFdmVudC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdc
REZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAiIC8+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMTY3NTQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTMy
NSw2ICszMjUsNyBAQAogCQkwRjZCMUNDNjE4NjJDNDc4MDA4NDVEOTcgLyogRlRMVW53aW5kSW5m
by5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2QjFD
QzIxODYyQzQ3ODAwODQ1RDk3IC8qIEZUTFVud2luZEluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjZCMUNDOTE4NjQxREY4MDA4NDVEOTcg
LyogQXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2QjFDQzcxODY0MURGODAwODQ1RDk3IC8qIEFyaXR5
Q2hlY2tGYWlsUmV0dXJuVGh1bmtzLmNwcCAqLzsgfTsKIAkJMEY2QjFDQ0ExODY0MURGODAwODQ1
RDk3IC8qIEFyaXR5Q2hlY2tGYWlsUmV0dXJuVGh1bmtzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZCMUNDODE4NjQxREY4MDA4NDVEOTcgLyogQXJp
dHlDaGVja0ZhaWxSZXR1cm5UaHVua3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRjZFODQ1QTE5MDMwQkVGMDA1NjI3NDEgLyogREZHVmFyaWFi
bGVBY2Nlc3NEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNkU4NDU5MTkwMzBCRUYwMDU2Mjc0MSAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGEu
Y3BwICovOyB9OwogCQkwRjcwMjVBOTE3MTRCMEZBMDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBp
bGVyQ29tbW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGNzAyNUE3MTcxNEIwRjgwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24u
Y3BwICovOyB9OwogCQkwRjcwMjVBQTE3MTRCMEZDMDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBp
bGVyQ29tbW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjcwMjVBODE3MTRCMEY4MDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3MTRD
QTQxNkVBOTJGMDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3MTRDQTExNkVB
OTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwICovOyB9OwpA
QCAtMjEyNyw2ICsyMTI4LDcgQEAKIAkJMEY2QjFDQzIxODYyQzQ3ODAwODQ1RDk3IC8qIEZUTFVu
d2luZEluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMVW53aW5kSW5m
by5oOyBwYXRoID0gZnRsL0ZUTFVud2luZEluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY2QjFDQzcxODY0MURGODAwODQ1RDk3IC8qIEFyaXR5Q2hlY2tGYWlsUmV0dXJuVGh1
bmtzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFyaXR5Q2hlY2tG
YWlsUmV0dXJuVGh1bmtzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2QjFD
QzgxODY0MURGODAwODQ1RDk3IC8qIEFyaXR5Q2hlY2tGYWlsUmV0dXJuVGh1bmtzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFyaXR5Q2hlY2tGYWlsUmV0dXJuVGh1bmtzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNkU4NDU5MTkwMzBCRUYwMDU2Mjc0MSAv
KiBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gREZHVmFyaWFibGVBY2Nlc3NEYXRhLmNwcDsgcGF0aCA9IGRmZy9ERkdWYXJpYWJs
ZUFjY2Vzc0RhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjcwMjVBNzE3
MTRCMEY4MDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHA7
IHBhdGggPSBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY3MDI1QTgxNzE0QjBGODAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21w
aWxlckNvbW1vbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdPU1JFeGl0
Q29tcGlsZXJDb21tb24uaDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3MTRDQTExNkVBOTJFRDAwRjNFQkVCIC8q
IERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHA7IHBhdGggPSBk
ZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC00ODEwLDYgKzQ4MTIsNyBAQAogCQkJCTBGMkJEQzNGMTUyMjgwMTcwMENEODkx
MCAvKiBERkdWYWx1ZVJlY292ZXJ5T3ZlcnJpZGUuaCAqLywKIAkJCQkwRjJCREM0RTE1MjI4QkU3
MDBDRDg5MTAgLyogREZHVmFsdWVTb3VyY2UuY3BwICovLAogCQkJCTBGMkJEQzQwMTUyMjgwMTcw
MENEODkxMCAvKiBERkdWYWx1ZVNvdXJjZS5oICovLAorCQkJCTBGNkU4NDU5MTkwMzBCRUYwMDU2
Mjc0MSAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3BwICovLAogCQkJCTBGNjIwMTcyMTQzRkNE
MkYwMDY4Qjc3QyAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCAqLywKIAkJCQkwRkREQkZCMjE2
NjZFRUQ1MDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5jcHAgKi8sCiAJCQkJ
MEZEREJGQjMxNjY2RUVENTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCAq
LywKQEAgLTcwODgsNiArNzA5MSw3IEBACiAJCQkJMEZCMTRFMUUxODEyNEFDRTAwOUI2QjREIC8q
IEpJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDREQ1MUVC
MEZCOERGNzQwMDRBOEJEQyAvKiBKSVRPcGNvZGVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3
MTIzNkU1MTE5NUYzM0MwMEJEMjE3NCAvKiBKSVRPcGNvZGVzMzJfNjQuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEY2RTg0NUExOTAzMEJFRjAwNTYyNzQxIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0
YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjI0RTU0QzE3RUUyNzQ5MDBBQkIyMTcgLyogSklU
T3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkNDODVDNDBFRTdBODk0MDAyODg2
ODIgLyogSklUUHJvcGVydHlBY2Nlc3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdDMUU4RTQx
MTJFNzJFRjAwQTM3Rjk4IC8qIEpJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwIGluIFNvdXJjZXMg
Ki8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0
aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE2NzU0MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ0LDE3ICs0NCwyMSBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBy
dW4oKQogICAgIHsKLSAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9j
a0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7Ci0gICAgICAgICAg
ICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7Ci0gICAgICAg
ICAgICBpZiAoIWJsb2NrKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICAvLyBQcmV2ZW50IGEgdG93ZXIgb2Ygb3ZlcmZsb3dpbmcgYWRkaXRpb25z
IGZyb20gY3JlYXRpbmcgYSB2YWx1ZSB0aGF0IGlzIG91dCBvZiB0aGUKLSAgICAgICAgICAgIC8v
IHNhZmUgMl40OCByYW5nZS4KLSAgICAgICAgICAgIG1fYWxsb3dOZXN0ZWRPdmVyZmxvd2luZ0Fk
ZGl0aW9ucyA9IGJsb2NrLT5zaXplKCkgPCAoMSA8PCAxNik7CisgICAgICAgIG1fY2hhbmdlZCA9
IHRydWU7CisgICAgICAgIHdoaWxlIChtX2NoYW5nZWQpIHsKKyAgICAgICAgICAgIG1fY2hhbmdl
ZCA9IGZhbHNlOworICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dy
YXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICAgICAgQmFzaWNC
bG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgICAg
IGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgLy8gUHJldmVudCBhIHRvd2VyIG9mIG92ZXJmbG93aW5nIGFkZGl0
aW9ucyBmcm9tIGNyZWF0aW5nIGEgdmFsdWUgdGhhdCBpcyBvdXQgb2YgdGhlCisgICAgICAgICAg
ICAgICAgLy8gc2FmZSAyXjQ4IHJhbmdlLgorICAgICAgICAgICAgICAgIG1fYWxsb3dOZXN0ZWRP
dmVyZmxvd2luZ0FkZGl0aW9ucyA9IGJsb2NrLT5zaXplKCkgPCAoMSA8PCAxNik7CiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gYmxvY2stPnNp
emUoKTsgaW5kZXhJbkJsb2NrLS07KQotICAgICAgICAgICAgICAgIHByb3BhZ2F0ZShibG9jay0+
YXQoaW5kZXhJbkJsb2NrKSk7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleElu
QmxvY2sgPSBibG9jay0+c2l6ZSgpOyBpbmRleEluQmxvY2stLTspCisgICAgICAgICAgICAgICAg
ICAgIHByb3BhZ2F0ZShibG9jay0+YXQoaW5kZXhJbkJsb2NrKSk7CisgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTc0LDcgKzE3OCw4
IEBAIHByaXZhdGU6CiAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICBjYXNl
IEdldExvY2FsOiB7CiAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNj
ZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgdmFyaWFi
bGVBY2Nlc3NEYXRhLT5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGZsYWdzICY9IH5O
b2RlQnl0ZWNvZGVVc2VzQXNJbnQ7IC8vIFdlIGRvbid0IGNhcmUgYWJvdXQgY3Jvc3MtYmxvY2sg
dXNlcy1hcy1pbnQuCisgICAgICAgICAgICBtX2NoYW5nZWQgfD0gdmFyaWFibGVBY2Nlc3NEYXRh
LT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgICAgICAKQEAgLTE4Miw3ICsxODcsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIFZhcmlh
YmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NE
YXRhKCk7CiAgICAgICAgICAgICBpZiAoIXZhcmlhYmxlQWNjZXNzRGF0YS0+aXNMb2FkZWRGcm9t
KCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+
bWVyZ2VGbGFncyhOb2RlQnl0ZWNvZGVVc2VzQXNWYWx1ZSk7CisgICAgICAgICAgICBmbGFncyA9
IHZhcmlhYmxlQWNjZXNzRGF0YS0+ZmxhZ3MoKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KCEoZmxhZ3MgJiB+Tm9kZUJ5dGVjb2RlQmFja1Byb3BNYXNrKSk7CisgICAgICAgICAgICBmbGFn
cyB8PSBOb2RlQnl0ZWNvZGVVc2VzQXNOdW1iZXI7IC8vIEFjY291bnQgZm9yIHRoZSBmYWN0IHRo
YXQgY29udHJvbCBmbG93IG1heSBjYXVzZSBvdmVyZmxvd3MgdGhhdCBvdXIgbW9kZWxpbmcgY2Fu
J3QgaGFuZGxlLgorICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoZmxhZ3Mp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBj
YXNlIEZsdXNoOiB7CisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNj
ZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgbV9jaGFu
Z2VkIHw9IHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVyZ2VGbGFncyhOb2RlQnl0ZWNvZGVVc2VzQXNW
YWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0x
OTksNiArMjEzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBBcml0aElNdWw6IHsKICAgICAg
ICAgICAgIGZsYWdzIHw9IE5vZGVCeXRlY29kZVVzZXNBc0ludDsKICAgICAgICAgICAgIGZsYWdz
ICY9IH4oTm9kZUJ5dGVjb2RlVXNlc0FzTnVtYmVyIHwgTm9kZUJ5dGVjb2RlTmVlZHNOZWdaZXJv
IHwgTm9kZUJ5dGVjb2RlVXNlc0FzT3RoZXIpOworICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVC
eXRlY29kZVJlYWxseVdhbnRzSW50OwogICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCktPm1lcmdl
RmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoZmxh
Z3MpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0yMDYsNyArMjIxLDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIAogICAgICAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6IHsKICAgICAgICAgICAg
IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVCeXRlY29kZVVzZXNBc1ZhbHVlKTsKLSAg
ICAgICAgICAgIG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKE5vZGVCeXRlY29kZVVzZXNBc1Zh
bHVlIHwgTm9kZUJ5dGVjb2RlVXNlc0FzSW50KTsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMigp
LT5tZXJnZUZsYWdzKE5vZGVCeXRlY29kZVVzZXNBc1ZhbHVlIHwgTm9kZUJ5dGVjb2RlVXNlc0Fz
SW50IHwgTm9kZUJ5dGVjb2RlUmVhbGx5V2FudHNJbnQpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMzA1LDE3ICszMjAsMTcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIAogICAgICAgICBjYXNlIEdldEJ5VmFsOiB7CiAgICAgICAgICAgICBub2RlLT5j
aGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlQnl0ZWNvZGVVc2VzQXNWYWx1ZSk7Ci0gICAgICAgICAg
ICBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhOb2RlQnl0ZWNvZGVVc2VzQXNOdW1iZXIgfCBO
b2RlQnl0ZWNvZGVVc2VzQXNPdGhlciB8IE5vZGVCeXRlY29kZVVzZXNBc0ludCk7CisgICAgICAg
ICAgICBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhOb2RlQnl0ZWNvZGVVc2VzQXNOdW1iZXIg
fCBOb2RlQnl0ZWNvZGVVc2VzQXNPdGhlciB8IE5vZGVCeXRlY29kZVVzZXNBc0ludCB8IE5vZGVC
eXRlY29kZVJlYWxseVdhbnRzSW50KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgICAgICAKICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxTYWZlOiB7Ci0gICAg
ICAgICAgICBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlQnl0ZWNvZGVVc2VzQXNOdW1i
ZXIgfCBOb2RlQnl0ZWNvZGVVc2VzQXNPdGhlciB8IE5vZGVCeXRlY29kZVVzZXNBc0ludCk7Cisg
ICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlQnl0ZWNvZGVVc2VzQXNO
dW1iZXIgfCBOb2RlQnl0ZWNvZGVVc2VzQXNPdGhlciB8IE5vZGVCeXRlY29kZVVzZXNBc0ludCB8
IE5vZGVCeXRlY29kZVJlYWxseVdhbnRzSW50KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBOZXdBcnJheVdpdGhTaXplOiB7Ci0gICAg
ICAgICAgICBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlQnl0ZWNvZGVVc2VzQXNWYWx1
ZSB8IE5vZGVCeXRlY29kZVVzZXNBc0ludCk7CisgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+
bWVyZ2VGbGFncyhOb2RlQnl0ZWNvZGVVc2VzQXNWYWx1ZSB8IE5vZGVCeXRlY29kZVVzZXNBc0lu
dCB8IE5vZGVCeXRlY29kZVJlYWxseVdhbnRzSW50KTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgICAgICAKQEAgLTMyMywxMyArMzM4LDEzIEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAvLyBOZWdhdGl2ZSB6ZXJvIGlzIG5vdCBvYnNlcnZhYmxlLiBOYU4gdmVyc3VzIHVu
ZGVmaW5lZCBhcmUgb25seSBvYnNlcnZhYmxlCiAgICAgICAgICAgICAvLyBpbiB0aGF0IHlvdSB3
b3VsZCBnZXQgYSBkaWZmZXJlbnQgZXhjZXB0aW9uIG1lc3NhZ2UuIFNvLCBsaWtlLCB3aGF0ZXZl
cjogd2UKICAgICAgICAgICAgIC8vIGNsYWltIGhlcmUgdGhhdCBOYU4gdi4gdW5kZWZpbmVkIGlz
IG9ic2VydmFibGUuCi0gICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2Rl
Qnl0ZWNvZGVVc2VzQXNJbnQgfCBOb2RlQnl0ZWNvZGVVc2VzQXNOdW1iZXIgfCBOb2RlQnl0ZWNv
ZGVVc2VzQXNPdGhlcik7CisgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhO
b2RlQnl0ZWNvZGVVc2VzQXNJbnQgfCBOb2RlQnl0ZWNvZGVVc2VzQXNOdW1iZXIgfCBOb2RlQnl0
ZWNvZGVVc2VzQXNPdGhlciB8IE5vZGVCeXRlY29kZVJlYWxseVdhbnRzSW50KTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBTdHJpbmdD
aGFyQXQ6IHsKICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVCeXRl
Y29kZVVzZXNBc1ZhbHVlKTsKLSAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdz
KE5vZGVCeXRlY29kZVVzZXNBc1ZhbHVlIHwgTm9kZUJ5dGVjb2RlVXNlc0FzSW50KTsKKyAgICAg
ICAgICAgIG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKE5vZGVCeXRlY29kZVVzZXNBc1ZhbHVl
IHwgTm9kZUJ5dGVjb2RlVXNlc0FzSW50IHwgTm9kZUJ5dGVjb2RlUmVhbGx5V2FudHNJbnQpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMzQ2LDcgKzM2
MSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6CiAgICAgICAgIGNh
c2UgUHV0QnlWYWw6IHsKICAgICAgICAgICAgIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkt
Pm1lcmdlRmxhZ3MoTm9kZUJ5dGVjb2RlVXNlc0FzVmFsdWUpOwotICAgICAgICAgICAgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAxKS0+bWVyZ2VGbGFncyhOb2RlQnl0ZWNvZGVVc2VzQXNOdW1i
ZXIgfCBOb2RlQnl0ZWNvZGVVc2VzQXNPdGhlciB8IE5vZGVCeXRlY29kZVVzZXNBc0ludCk7Cisg
ICAgICAgICAgICBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLT5tZXJnZUZsYWdzKE5vZGVC
eXRlY29kZVVzZXNBc051bWJlciB8IE5vZGVCeXRlY29kZVVzZXNBc090aGVyIHwgTm9kZUJ5dGVj
b2RlVXNlc0FzSW50IHwgTm9kZUJ5dGVjb2RlUmVhbGx5V2FudHNJbnQpOwogICAgICAgICAgICAg
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKS0+bWVyZ2VGbGFncyhOb2RlQnl0ZWNvZGVVc2Vz
QXNWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMzk2LDYgKzQxMSw3
IEBAIHByaXZhdGU6CiAgICAgfQogICAgIAogICAgIGJvb2wgbV9hbGxvd05lc3RlZE92ZXJmbG93
aW5nQWRkaXRpb25zOworICAgIGJvb2wgbV9jaGFuZ2VkOwogfTsKIAogYm9vbCBwZXJmb3JtQmFj
a3dhcmRzUHJvcGFnYXRpb24oR3JhcGgmIGdyYXBoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE2NzU0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTcsNiArMzU3LDggQEAg
dm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdAogdm9pZCBHcmFwaDo6ZHVt
cEJsb2NrSGVhZGVyKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeCwgQmFzaWNC
bG9jayogYmxvY2ssIFBoaU5vZGVEdW1wTW9kZSBwaGlOb2RlRHVtcE1vZGUsIER1bXBDb250ZXh0
KiBjb250ZXh0KQogewogICAgIG91dC5wcmludChwcmVmaXgsICJCbG9jayAiLCAqYmxvY2ssICIg
KCIsIGluQ29udGV4dChibG9jay0+YXQoMCktPm9yaWdpbi5zZW1hbnRpYywgY29udGV4dCksICIp
OiAiLCBibG9jay0+aXNSZWFjaGFibGUgPyAiIiA6ICIoc2tpcHBlZCkiLCBibG9jay0+aXNPU1JU
YXJnZXQgPyAiIChPU1IgdGFyZ2V0KSIgOiAiIiwgIlxuIik7CisgICAgaWYgKGJsb2NrLT5leGVj
dXRpb25Db3VudCA9PSBibG9jay0+ZXhlY3V0aW9uQ291bnQpCisgICAgICAgIG91dC5wcmludChw
cmVmaXgsICIgIEV4ZWN1dGlvbiBjb3VudDogIiwgYmxvY2stPmV4ZWN1dGlvbkNvdW50LCAiXG4i
KTsKICAgICBvdXQucHJpbnQocHJlZml4LCAiICBQcmVkZWNlc3NvcnM6Iik7CiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBibG9jay0+cHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKQogICAgICAg
ICBvdXQucHJpbnQoIiAiLCAqYmxvY2stPnByZWRlY2Vzc29yc1tpXSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNjc1NDIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwMSw3ICs3MDEs
NyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBub2RlLT5jaGlsZHJlbi5jaGlsZChpbmRleCk7
CiAgICAgfQogICAgIAotICAgIHZvaWQgdm90ZU5vZGUoTm9kZSogbm9kZSwgdW5zaWduZWQgYmFs
bG90KQorICAgIHZvaWQgdm90ZU5vZGUoTm9kZSogbm9kZSwgdW5zaWduZWQgYmFsbG90LCBmbG9h
dCB3ZWlnaHQgPSAxKQogICAgIHsKICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAg
ICAgIGNhc2UgVmFsdWVUb0ludDMyOgpAQCAtNzEzLDM1ICs3MTMsMzUgQEAgcHVibGljOgogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkKLSAg
ICAgICAgICAgIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT52b3RlKGJhbGxvdCk7CisgICAg
ICAgICAgICBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+dm90ZShiYWxsb3QsIHdlaWdodCk7
CiAgICAgfQogICAgIAotICAgIHZvaWQgdm90ZU5vZGUoRWRnZSBlZGdlLCB1bnNpZ25lZCBiYWxs
b3QpCisgICAgdm9pZCB2b3RlTm9kZShFZGdlIGVkZ2UsIHVuc2lnbmVkIGJhbGxvdCwgZmxvYXQg
d2VpZ2h0ID0gMSkKICAgICB7Ci0gICAgICAgIHZvdGVOb2RlKGVkZ2Uubm9kZSgpLCBiYWxsb3Qp
OworICAgICAgICB2b3RlTm9kZShlZGdlLm5vZGUoKSwgYmFsbG90LCB3ZWlnaHQpOwogICAgIH0K
ICAgICAKLSAgICB2b2lkIHZvdGVDaGlsZHJlbihOb2RlKiBub2RlLCB1bnNpZ25lZCBiYWxsb3Qp
CisgICAgdm9pZCB2b3RlQ2hpbGRyZW4oTm9kZSogbm9kZSwgdW5zaWduZWQgYmFsbG90LCBmbG9h
dCB3ZWlnaHQgPSAxKQogICAgIHsKICAgICAgICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFz
VmFyQXJncykgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUtPmZp
cnN0Q2hpbGQoKTsKICAgICAgICAgICAgICAgICBjaGlsZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQo
KSArIG5vZGUtPm51bUNoaWxkcmVuKCk7CiAgICAgICAgICAgICAgICAgY2hpbGRJZHgrKykgewog
ICAgICAgICAgICAgICAgIGlmICghIW1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKQotICAgICAg
ICAgICAgICAgICAgICB2b3RlTm9kZShtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSwgYmFsbG90
KTsKKyAgICAgICAgICAgICAgICAgICAgdm90ZU5vZGUobV92YXJBcmdDaGlsZHJlbltjaGlsZElk
eF0sIGJhbGxvdCwgd2VpZ2h0KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKSkKICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgdm90ZU5vZGUobm9kZS0+Y2hpbGQxKCksIGJhbGxvdCk7
CisgICAgICAgIHZvdGVOb2RlKG5vZGUtPmNoaWxkMSgpLCBiYWxsb3QsIHdlaWdodCk7CiAgICAg
ICAgIGlmICghbm9kZS0+Y2hpbGQyKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHZv
dGVOb2RlKG5vZGUtPmNoaWxkMigpLCBiYWxsb3QpOworICAgICAgICB2b3RlTm9kZShub2RlLT5j
aGlsZDIoKSwgYmFsbG90LCB3ZWlnaHQpOwogICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMygpKQog
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB2b3RlTm9kZShub2RlLT5jaGlsZDMoKSwgYmFs
bG90KTsKKyAgICAgICAgdm90ZU5vZGUobm9kZS0+Y2hpbGQzKCksIGJhbGxvdCwgd2VpZ2h0KTsK
ICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gLy8gVCA9IE5vZGUqIG9yIEVk
Z2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUZsYWdzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbGFncy5jcHAJKHJl
dmlzaW9uIDE2NzU0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUZsYWdz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTksNiArOTksOSBAQCB2b2lkIGR1bXBOb2RlRmxhZ3Mo
UHJpbnRTdHJlYW0mIGFjdHVhbE91CiAgICAgCiAgICAgaWYgKGZsYWdzICYgTm9kZUJ5dGVjb2Rl
VXNlc0FzSW50KQogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJVc2VBc0ludCIpOworCisgICAg
aWYgKGZsYWdzICYgTm9kZUJ5dGVjb2RlUmVhbGx5V2FudHNJbnQpCisgICAgICAgIG91dC5wcmlu
dChjb21tYSwgIlJlYWxseVdhbnRzSW50Iik7CiAgICAgCiAgICAgaWYgKCEoZmxhZ3MgJiBOb2Rl
RG9lc05vdEV4aXQpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJDYW5FeGl0Iik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbGFncy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUZsYWdzLmgJKHJldmlzaW9uIDE2NzU0
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUZsYWdzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTUzLDIxICs1MywyMiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CiAjZGVmaW5lIE5vZGVNYXlPdmVyZmxvdyAgICAgICAgICAgICAgICAgIDB4MDA4MAogI2RlZmlu
ZSBOb2RlTWF5TmVnWmVybyAgICAgICAgICAgICAgICAgICAweDAxMDAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgCi0jZGVmaW5lIE5vZGVCeXRlY29kZUJhY2tQcm9wTWFzayAgICAg
ICAgIDB4MUUwMAorI2RlZmluZSBOb2RlQnl0ZWNvZGVCYWNrUHJvcE1hc2sgICAgICAgICAweDNF
MDAKICNkZWZpbmUgTm9kZUJ5dGVjb2RlVXNlQm90dG9tICAgICAgICAgICAgMHgwMDAwCiAjZGVm
aW5lIE5vZGVCeXRlY29kZVVzZXNBc051bWJlciAgICAgICAgIDB4MDIwMCAvLyBUaGUgcmVzdWx0
IG9mIHRoaXMgY29tcHV0YXRpb24gbWF5IGJlIHVzZWQgaW4gYSBjb250ZXh0IHRoYXQgb2JzZXJ2
ZXMgZnJhY3Rpb25hbCwgb3IgYmlnZ2VyLXRoYW4taW50MzIsIHJlc3VsdHMuCiAjZGVmaW5lIE5v
ZGVCeXRlY29kZU5lZWRzTmVnWmVybyAgICAgICAgIDB4MDQwMCAvLyBUaGUgcmVzdWx0IG9mIHRo
aXMgY29tcHV0YXRpb24gbWF5IGJlIHVzZWQgaW4gYSBjb250ZXh0IHRoYXQgb2JzZXJ2ZXMgLTAu
CiAjZGVmaW5lIE5vZGVCeXRlY29kZVVzZXNBc090aGVyICAgICAgICAgIDB4MDgwMCAvLyBUaGUg
cmVzdWx0IG9mIHRoaXMgY29tcHV0YXRpb24gbWF5IGJlIHVzZWQgaW4gYSBjb250ZXh0IHRoYXQg
ZGlzdGluZ3Vpc2hlcyBiZXR3ZWVuIE5hTiBhbmQgb3RoZXIgdGhpbmdzIChsaWtlIHVuZGVmaW5l
ZCkuCiAjZGVmaW5lIE5vZGVCeXRlY29kZVVzZXNBc1ZhbHVlICAgICAgICAgIChOb2RlQnl0ZWNv
ZGVVc2VzQXNOdW1iZXIgfCBOb2RlQnl0ZWNvZGVOZWVkc05lZ1plcm8gfCBOb2RlQnl0ZWNvZGVV
c2VzQXNPdGhlcikKICNkZWZpbmUgTm9kZUJ5dGVjb2RlVXNlc0FzSW50ICAgICAgICAgICAgMHgx
MDAwIC8vIFRoZSByZXN1bHQgb2YgdGhpcyBjb21wdXRhdGlvbiBpcyBrbm93biB0byBiZSB1c2Vk
IGluIGEgY29udGV4dCB0aGF0IHByZWZlcnMsIGJ1dCBkb2VzIG5vdCByZXF1aXJlLCBpbnRlZ2Vy
IHZhbHVlcy4KKyNkZWZpbmUgTm9kZUJ5dGVjb2RlUmVhbGx5V2FudHNJbnQgICAgICAgMHgyMDAw
IC8vIFRoZSByZXN1bHQgb2YgdGhpcyBjb21wdXRhdGlvbiBpcyBrbm93biB0byBiZSB1c2VkIGlu
IGEgY29udGV4dCB0aGF0IHN0cm9uZ2x5IHByZWZlcnMgaW50ZWdlciB2YWx1ZXMsIHRvIHRoZSBw
b2ludCB0aGF0IHdlIHNob3VsZCBhdm9pZCB1c2luZyBkb3VibGVzIGlmIGF0IGFsbCBwb3NzaWJs
ZS4KIAogI2RlZmluZSBOb2RlQXJpdGhGbGFnc01hc2sgICAgICAgICAgICAgICAoTm9kZUJlaGF2
aW9yTWFzayB8IE5vZGVCeXRlY29kZUJhY2tQcm9wTWFzaykKIAotI2RlZmluZSBOb2RlRG9lc05v
dEV4aXQgICAgICAgICAgICAgICAgICAweDIwMDAgLy8gVGhpcyBmbGFnIGlzIG5lZ2F0ZWQgdG8g
bWFrZSBpdCBuYXR1cmFsIGZvciB0aGUgZGVmYXVsdCB0byBiZSB0aGF0IGEgbm9kZSBkb2VzIGV4
aXQuCisjZGVmaW5lIE5vZGVEb2VzTm90RXhpdCAgICAgICAgICAgICAgICAgIDB4NDAwMCAvLyBU
aGlzIGZsYWcgaXMgbmVnYXRlZCB0byBtYWtlIGl0IG5hdHVyYWwgZm9yIHRoZSBkZWZhdWx0IHRv
IGJlIHRoYXQgYSBub2RlIGRvZXMgZXhpdC4KIAotI2RlZmluZSBOb2RlUmVsZXZhbnRUb09TUiAg
ICAgICAgICAgICAgICAweDQwMDAKKyNkZWZpbmUgTm9kZVJlbGV2YW50VG9PU1IgICAgICAgICAg
ICAgICAgMHg4MDAwCiAKLSNkZWZpbmUgTm9kZUlzRmx1c2hlZCAgICAgICAgICAgICAgICAgICAg
MHg4MDAwIC8vIFVzZWQgYnkgR3JhcGg6OmNvbXB1dGVJc0ZsdXNoZWQoKSwgd2lsbCB0ZWxsIHlv
dSB3aGljaCBsb2NhbCBub2RlcyBhcmUgYmFja3dhcmRzLXJlYWNoYWJsZSBmcm9tIGEgRmx1c2gu
CisjZGVmaW5lIE5vZGVJc0ZsdXNoZWQgICAgICAgICAgICAgICAgICAgMHgxMDAwMCAvLyBVc2Vk
IGJ5IEdyYXBoOjpjb21wdXRlSXNGbHVzaGVkKCksIHdpbGwgdGVsbCB5b3Ugd2hpY2ggbG9jYWwg
bm9kZXMgYXJlIGJhY2t3YXJkcy1yZWFjaGFibGUgZnJvbSBhIEZsdXNoLgogCiB0eXBlZGVmIHVp
bnQzMl90IE5vZGVGbGFnczsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAJKHJldmlzaW9u
IDE2NzU0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENy
ZWF0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Myw3ICs4Myw3IEBAIHB1YmxpYzoK
ICAgICAgICAgCiAgICAgICAgIEJsb2NrSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChtX2dyYXBo
KTsKICAgICAgICAgCi0gICAgICAgIEJhc2ljQmxvY2sqIG5ld1Jvb3QgPSBpbnNlcnRpb25TZXQu
aW5zZXJ0KDAsIFBOYU4pOworICAgICAgICBCYXNpY0Jsb2NrKiBuZXdSb290ID0gaW5zZXJ0aW9u
U2V0Lmluc2VydCgwLCAxKTsKICAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4gPSB0YXJnZXQtPmF0
KDApLT5vcmlnaW47CiAgICAgICAgIAogICAgICAgICBWZWN0b3I8Tm9kZSo+IGxvY2FscyhiYXNl
bGluZS0+bV9udW1DYWxsZWVSZWdpc3RlcnMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1BsYW4uY3BwCShyZXZpc2lvbiAxNjc1NDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDksOCArMjA5LDcgQEAgUGxhbjo6
Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgogICAgIHBlcmZvcm1VbmlmaWNhdGlv
bihkZmcpOwogICAgIHBlcmZvcm1QcmVkaWN0aW9uSW5qZWN0aW9uKGRmZyk7CiAgICAgCi0gICAg
aWYgKGlzRlRMKG1vZGUpKQotICAgICAgICBwZXJmb3JtU3RhdGljRXhlY3V0aW9uQ291bnRFc3Rp
bWF0aW9uKGRmZyk7CisgICAgcGVyZm9ybVN0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvbihk
ZmcpOwogICAgIAogICAgIGlmIChtb2RlID09IEZUTEZvck9TUkVudHJ5TW9kZSkgewogICAgICAg
ICBib29sIHJlc3VsdCA9IHBlcmZvcm1PU1JFbnRyeXBvaW50Q3JlYXRpb24oZGZnKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNjc1NDIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjQxLDggKzY0MSwxNCBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfQogICAg
IAotICAgIHZvaWQgZG9Eb3VibGVWb3RpbmcoTm9kZSogbm9kZSkKKyAgICB2b2lkIGRvRG91Ymxl
Vm90aW5nKE5vZGUqIG5vZGUsIGZsb2F0IHdlaWdodCkKICAgICB7CisgICAgICAgIC8vIExvb3Ag
cHJlLWhlYWRlcnMgY3JlYXRlZCBieSBPU1IgZW50cnlwb2ludCBjcmVhdGlvbiBtYXkgaGF2ZSBO
YU4gd2VpZ2h0IHRvIGluZGljYXRlCisgICAgICAgIC8vIHRoYXQgd2UgYWN0dWFsbHkgZG9uJ3Qg
a25vdyB0aGV5IHdlaWdodC4gQXNzdW1lIHRoYXQgdGhleSBleGVjdXRlIG9uY2UuIFRoaXMgdHVy
bnMKKyAgICAgICAgLy8gb3V0IHRvIGJlIGFuIE9LIGFzc3VtcHRpb24gc2luY2UgdGhlIHByZS1o
ZWFkZXIgZG9lc24ndCBoYXZlIGFueSBtZWFuaW5nZnVsIGNvZGUuCisgICAgICAgIGlmICh3ZWln
aHQgIT0gd2VpZ2h0KQorICAgICAgICAgICAgd2VpZ2h0ID0gMTsKKyAgICAgICAgCiAgICAgICAg
IHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICBjYXNlIFZhbHVlQWRkOgogICAgICAgICBj
YXNlIEFyaXRoQWRkOgpAQCAtNjU5LDggKzY2NSw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBl
bHNlCiAgICAgICAgICAgICAgICAgYmFsbG90ID0gVm90ZVZhbHVlOwogICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgbV9ncmFwaC52b3RlTm9kZShub2RlLT5jaGlsZDEoKSwgYmFsbG90KTsK
LSAgICAgICAgICAgIG1fZ3JhcGgudm90ZU5vZGUobm9kZS0+Y2hpbGQyKCksIGJhbGxvdCk7Cisg
ICAgICAgICAgICBtX2dyYXBoLnZvdGVOb2RlKG5vZGUtPmNoaWxkMSgpLCBiYWxsb3QsIHdlaWdo
dCk7CisgICAgICAgICAgICBtX2dyYXBoLnZvdGVOb2RlKG5vZGUtPmNoaWxkMigpLCBiYWxsb3Qs
IHdlaWdodCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgICAg
IApAQCAtNjc3LDggKzY4Myw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgYmFsbG90ID0gVm90ZVZhbHVlOwogICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgbV9ncmFwaC52b3RlTm9kZShub2RlLT5jaGlsZDEoKSwgYmFsbG90KTsKLSAgICAgICAgICAg
IG1fZ3JhcGgudm90ZU5vZGUobm9kZS0+Y2hpbGQyKCksIGJhbGxvdCk7CisgICAgICAgICAgICBt
X2dyYXBoLnZvdGVOb2RlKG5vZGUtPmNoaWxkMSgpLCBiYWxsb3QsIHdlaWdodCk7CisgICAgICAg
ICAgICBtX2dyYXBoLnZvdGVOb2RlKG5vZGUtPmNoaWxkMigpLCBiYWxsb3QsIHdlaWdodCk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC02OTcsOCArNzAzLDggQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBiYWxsb3QgPSBWb3RlVmFsdWU7
CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2dyYXBoLnZvdGVOb2RlKG5vZGUtPmNo
aWxkMSgpLCBiYWxsb3QpOwotICAgICAgICAgICAgbV9ncmFwaC52b3RlTm9kZShub2RlLT5jaGls
ZDIoKSwgYmFsbG90KTsKKyAgICAgICAgICAgIG1fZ3JhcGgudm90ZU5vZGUobm9kZS0+Y2hpbGQx
KCksIGJhbGxvdCwgd2VpZ2h0KTsKKyAgICAgICAgICAgIG1fZ3JhcGgudm90ZU5vZGUobm9kZS0+
Y2hpbGQyKCksIGJhbGxvdCwgd2VpZ2h0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgICAgICAgICAgCkBAIC03MDksMjMgKzcxNSwyMyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVWYWx1ZTsKICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIG1fZ3JhcGgudm90ZU5vZGUobm9kZS0+Y2hpbGQxKCksIGJh
bGxvdCk7CisgICAgICAgICAgICBtX2dyYXBoLnZvdGVOb2RlKG5vZGUtPmNoaWxkMSgpLCBiYWxs
b3QsIHdlaWdodCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBBcml0aFNxcnQ6CiAgICAgICAgIGNhc2UgQXJpdGhDb3M6CiAgICAgICAgIGNhc2Ug
QXJpdGhTaW46Ci0gICAgICAgICAgICBtX2dyYXBoLnZvdGVOb2RlKG5vZGUtPmNoaWxkMSgpLCBW
b3RlRG91YmxlKTsKKyAgICAgICAgICAgIG1fZ3JhcGgudm90ZU5vZGUobm9kZS0+Y2hpbGQxKCks
IFZvdGVEb3VibGUsIHdlaWdodCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgY2FzZSBTZXRMb2NhbDogewogICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUg
cHJlZGljdGlvbiA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICBp
ZiAoaXNEb3VibGVTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKLSAgICAgICAgICAgICAgICBub2Rl
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+dm90ZShWb3RlRG91YmxlKTsKKyAgICAgICAgICAgICAg
ICBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+dm90ZShWb3RlRG91YmxlLCB3ZWlnaHQpOwog
ICAgICAgICAgICAgZWxzZSBpZiAoCiAgICAgICAgICAgICAgICAgIWlzRnVsbE51bWJlclNwZWN1
bGF0aW9uKHByZWRpY3Rpb24pCiAgICAgICAgICAgICAgICAgfHwgaXNJbnQzMlNwZWN1bGF0aW9u
KHByZWRpY3Rpb24pIHx8IGlzTWFjaGluZUludFNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQotICAg
ICAgICAgICAgICAgIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT52b3RlKFZvdGVWYWx1ZSk7
CisgICAgICAgICAgICAgICAgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnZvdGUoVm90ZVZh
bHVlLCB3ZWlnaHQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtNzM1LDE0
ICs3NDEsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAwKTsKICAgICAgICAgICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAxKTsKICAgICAgICAgICAgIEVkZ2UgY2hpbGQzID0gbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAyKTsKLSAgICAgICAgICAgIG1fZ3JhcGgudm90ZU5vZGUoY2hpbGQx
LCBWb3RlVmFsdWUpOwotICAgICAgICAgICAgbV9ncmFwaC52b3RlTm9kZShjaGlsZDIsIFZvdGVW
YWx1ZSk7CisgICAgICAgICAgICBtX2dyYXBoLnZvdGVOb2RlKGNoaWxkMSwgVm90ZVZhbHVlLCB3
ZWlnaHQpOworICAgICAgICAgICAgbV9ncmFwaC52b3RlTm9kZShjaGlsZDIsIFZvdGVWYWx1ZSwg
d2VpZ2h0KTsKICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7
CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6Ci0gICAgICAgICAgICAgICAgbV9ncmFw
aC52b3RlTm9kZShjaGlsZDMsIFZvdGVEb3VibGUpOworICAgICAgICAgICAgICAgIG1fZ3JhcGgu
dm90ZU5vZGUoY2hpbGQzLCBWb3RlRG91YmxlLCB3ZWlnaHQpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGVO
b2RlKGNoaWxkMywgVm90ZVZhbHVlKTsKKyAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGVOb2Rl
KGNoaWxkMywgVm90ZVZhbHVlLCB3ZWlnaHQpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CkBAIC03NTMsNyArNzU5LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICBtX2dyYXBoLnZvdGVDaGlsZHJlbihub2RlLCBWb3RlVmFsdWUpOworICAgICAg
ICAgICAgbV9ncmFwaC52b3RlQ2hpbGRyZW4obm9kZSwgVm90ZVZhbHVlLCB3ZWlnaHQpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CkBAIC03NjksNyArNzc1LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIEFTU0VSVChibG9jay0+aXNSZWFjaGFibGUpOwogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLT5zaXplKCk7ICsraSkgewogICAgICAg
ICAgICAgICAgIG1fY3VycmVudE5vZGUgPSBibG9jay0+YXQoaSk7Ci0gICAgICAgICAgICAgICAg
ZG9Eb3VibGVWb3RpbmcobV9jdXJyZW50Tm9kZSk7CisgICAgICAgICAgICAgICAgZG9Eb3VibGVW
b3RpbmcobV9jdXJyZW50Tm9kZSwgYmxvY2stPmV4ZWN1dGlvbkNvdW50KTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ncmFwaC5t
X3ZhcmlhYmxlQWNjZXNzRGF0YS5zaXplKCk7ICsraSkgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
REZHVmFyaWFibGVBY2Nlc3NEYXRhLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitWYXJpYWJsZUFjY2Vzc0RhdGE6OlZhcmlhYmxl
QWNjZXNzRGF0YSgpCisgICAgOiBtX2xvY2FsKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4o
c3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSkpCisgICAgLCBtX3ByZWRpY3Rpb24oU3Bl
Y05vbmUpCisgICAgLCBtX2FyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKFNwZWNOb25lKQorICAgICwg
bV9mbGFncygwKQorICAgICwgbV9pc0NhcHR1cmVkKGZhbHNlKQorICAgICwgbV9zaG91bGROZXZl
clVuYm94KGZhbHNlKQorICAgICwgbV9pc0FyZ3VtZW50c0FsaWFzKGZhbHNlKQorICAgICwgbV9z
dHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkKGZhbHNlKQorICAgICwgbV9jaGVja0FycmF5SG9p
c3RpbmdGYWlsZWQoZmFsc2UpCisgICAgLCBtX2lzUHJvZml0YWJsZVRvVW5ib3goZmFsc2UpCisg
ICAgLCBtX2lzTG9hZGVkRnJvbShmYWxzZSkKKyAgICAsIG1fZG91YmxlRm9ybWF0U3RhdGUoRW1w
dHlEb3VibGVGb3JtYXRTdGF0ZSkKK3sKKyAgICBjbGVhclZvdGVzKCk7Cit9CisKK1ZhcmlhYmxl
QWNjZXNzRGF0YTo6VmFyaWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxSZWdpc3RlciBsb2NhbCwgYm9v
bCBpc0NhcHR1cmVkKQorICAgIDogbV9sb2NhbChsb2NhbCkKKyAgICAsIG1fcHJlZGljdGlvbihT
cGVjTm9uZSkKKyAgICAsIG1fYXJndW1lbnRBd2FyZVByZWRpY3Rpb24oU3BlY05vbmUpCisgICAg
LCBtX2ZsYWdzKDApCisgICAgLCBtX2lzQ2FwdHVyZWQoaXNDYXB0dXJlZCkKKyAgICAsIG1fc2hv
dWxkTmV2ZXJVbmJveChpc0NhcHR1cmVkKQorICAgICwgbV9pc0FyZ3VtZW50c0FsaWFzKGZhbHNl
KQorICAgICwgbV9zdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkKGZhbHNlKQorICAgICwgbV9j
aGVja0FycmF5SG9pc3RpbmdGYWlsZWQoZmFsc2UpCisgICAgLCBtX2lzUHJvZml0YWJsZVRvVW5i
b3goZmFsc2UpCisgICAgLCBtX2lzTG9hZGVkRnJvbShmYWxzZSkKKyAgICAsIG1fZG91YmxlRm9y
bWF0U3RhdGUoRW1wdHlEb3VibGVGb3JtYXRTdGF0ZSkKK3sKKyAgICBjbGVhclZvdGVzKCk7Cit9
CisKK2Jvb2wgVmFyaWFibGVBY2Nlc3NEYXRhOjptZXJnZUlzQ2FwdHVyZWQoYm9vbCBpc0NhcHR1
cmVkKQoreworICAgIHJldHVybiBjaGVja0FuZFNldChtX3Nob3VsZE5ldmVyVW5ib3gsIG1fc2hv
dWxkTmV2ZXJVbmJveCB8IGlzQ2FwdHVyZWQpCisgICAgICAgIHwgY2hlY2tBbmRTZXQobV9pc0Nh
cHR1cmVkLCBtX2lzQ2FwdHVyZWQgfCBpc0NhcHR1cmVkKTsKK30KKworYm9vbCBWYXJpYWJsZUFj
Y2Vzc0RhdGE6Om1lcmdlU2hvdWxkTmV2ZXJVbmJveChib29sIHNob3VsZE5ldmVyVW5ib3gpCit7
CisgICAgYm9vbCBuZXdTaG91bGROZXZlclVuYm94ID0gbV9zaG91bGROZXZlclVuYm94IHwgc2hv
dWxkTmV2ZXJVbmJveDsKKyAgICBpZiAobmV3U2hvdWxkTmV2ZXJVbmJveCA9PSBtX3Nob3VsZE5l
dmVyVW5ib3gpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBtX3Nob3VsZE5ldmVyVW5ib3gg
PSBuZXdTaG91bGROZXZlclVuYm94OworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFZhcmlh
YmxlQWNjZXNzRGF0YTo6cHJlZGljdChTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKQoreworICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogc2VsZiA9IGZpbmQoKTsKKyAgICBib29sIHJlc3VsdCA9IG1l
cmdlU3BlY3VsYXRpb24oc2VsZi0+bV9wcmVkaWN0aW9uLCBwcmVkaWN0aW9uKTsKKyAgICBpZiAo
cmVzdWx0KQorICAgICAgICBtZXJnZVNwZWN1bGF0aW9uKG1fYXJndW1lbnRBd2FyZVByZWRpY3Rp
b24sIG1fcHJlZGljdGlvbik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBWYXJpYWJs
ZUFjY2Vzc0RhdGE6Om1lcmdlQXJndW1lbnRBd2FyZVByZWRpY3Rpb24oU3BlY3VsYXRlZFR5cGUg
cHJlZGljdGlvbikKK3sKKyAgICByZXR1cm4gbWVyZ2VTcGVjdWxhdGlvbihmaW5kKCktPm1fYXJn
dW1lbnRBd2FyZVByZWRpY3Rpb24sIHByZWRpY3Rpb24pOworfQorCitib29sIFZhcmlhYmxlQWNj
ZXNzRGF0YTo6c2hvdWxkVXNlRG91YmxlRm9ybWF0QWNjb3JkaW5nVG9Wb3RlKCkKK3sKKyAgICAv
LyBXZSBkb24ndCBzdXBwb3J0IHRoaXMgZmFjaWxpdHkgZm9yIGFyZ3VtZW50cywgeWV0LgorICAg
IC8vIEZJWE1FOiBtYWtlIHRoaXMgd29yayBmb3IgYXJndW1lbnRzLgorICAgIGlmIChsb2NhbCgp
LmlzQXJndW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAvLyBJ
ZiB0aGUgdmFyaWFibGUgaXMgbm90IGEgbnVtYmVyIHByZWRpY3Rpb24sIHRoZW4gdGhpcyBkb2Vz
bid0CisgICAgLy8gbWFrZSBhbnkgc2Vuc2UuCisgICAgaWYgKCFpc0Z1bGxOdW1iZXJTcGVjdWxh
dGlvbihwcmVkaWN0aW9uKCkpKSB7CisgICAgICAgIC8vIEZJWE1FOiB3ZSBtYXkgZW5kIHVwIGZv
cmNpbmcgYSBsb2NhbCBpbiBpbmxpbmVkIGFyZ3VtZW50IHBvc2l0aW9uIHRvIGJlIGEgZG91Ymxl
IGV2ZW4KKyAgICAgICAgLy8gaWYgaXQgaXMgc29tZXRpbWVzIG5vdCBldmVuIG51bWVyaWMsIHNp
bmNlIHRoaXMgbmV2ZXIgc2lnbmFscyB0aGUgZmFjdCB0aGF0IGl0IGRvZXNuJ3QKKyAgICAgICAg
Ly8gd2FudCBkb3VibGVzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTA5NTExCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgICAgIAorICAgIC8vIElm
IHRoZSB2YXJpYWJsZSBpcyBwcmVkaWN0ZWQgdG8gaG9sZCBvbmx5IGRvdWJsZXMsIHRoZW4gaXQn
cyBhCisgICAgLy8gbm8tYnJhaW5lcjogaXQgc2hvdWxkIGJlIGZvcm1hdHRlZCBhcyBhIGRvdWJs
ZS4KKyAgICBpZiAoaXNEb3VibGVTcGVjdWxhdGlvbihwcmVkaWN0aW9uKCkpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisgICAgLy8gSWYgdGhlIHZhcmlhYmxlIGlzIGtub3duIHRv
IGJlIHVzZWQgYXMgYW4gaW50ZWdlciwgdGhlbiBiZSBzYWZlIC0KKyAgICAvLyBkb24ndCBmb3Jj
ZSBpdCB0byBiZSBhIGRvdWJsZS4KKyAgICBpZiAoZmxhZ3MoKSAmIE5vZGVCeXRlY29kZVVzZXNB
c0ludCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAvLyBJZiB0aGUgdmFy
aWFibGUgaGFzIGJlZW4gdm90ZWQgdG8gYmVjb21lIGEgZG91YmxlLCB0aGVuIG1ha2UgaXQgYQor
ICAgIC8vIGRvdWJsZS4KKyAgICBpZiAodm90ZVJhdGlvKCkgPj0gT3B0aW9uczo6ZG91YmxlVm90
ZVJhdGlvRm9yRG91YmxlRm9ybWF0KCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgVmFyaWFibGVBY2Nlc3NEYXRhOjp0YWxseVZv
dGVzRm9yU2hvdWxkVXNlRG91YmxlRm9ybWF0KCkKK3sKKyAgICBBU1NFUlQoaXNSb290KCkpOwor
ICAgICAgICAKKyAgICBpZiAobG9jYWwoKS5pc0FyZ3VtZW50KCkgfHwgc2hvdWxkTmV2ZXJVbmJv
eCgpCisgICAgICAgIHx8IChmbGFncygpICYgTm9kZUJ5dGVjb2RlUmVhbGx5V2FudHNJbnQpKQor
ICAgICAgICByZXR1cm4gREZHOjptZXJnZURvdWJsZUZvcm1hdFN0YXRlKG1fZG91YmxlRm9ybWF0
U3RhdGUsIE5vdFVzaW5nRG91YmxlRm9ybWF0KTsKKyAgICAKKyAgICBpZiAobV9kb3VibGVGb3Jt
YXRTdGF0ZSA9PSBDYW50VXNlRG91YmxlRm9ybWF0KQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIAorICAgIGJvb2wgbmV3VmFsdWVPZlNob3VsZFVzZURvdWJsZUZvcm1hdCA9IHNob3Vs
ZFVzZURvdWJsZUZvcm1hdEFjY29yZGluZ1RvVm90ZSgpOworICAgIGlmICghbmV3VmFsdWVPZlNo
b3VsZFVzZURvdWJsZUZvcm1hdCkgeworICAgICAgICAvLyBXZSBtb25vdG9uaWNhbGx5IGNvbnZl
cnQgdG8gZG91YmxlLiBIZW5jZSwgaWYgdGhlIGZpeHBvaW50IGxlYWRzIHVzIHRvIGNvbmNsdWRl
IHRoYXQgd2Ugc2hvdWxkCisgICAgICAgIC8vIHN3aXRjaCBiYWNrIHRvIGludCwgd2UgaW5zdGVh
ZCBpZ25vcmUgdGhpcyBhbmQgc3RpY2sgd2l0aCBkb3VibGUuCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgICAgIAorICAgIGlmIChtX2RvdWJsZUZvcm1hdFN0YXRlID09IFVzaW5n
RG91YmxlRm9ybWF0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgIHJldHVy
biBERkc6Om1lcmdlRG91YmxlRm9ybWF0U3RhdGUobV9kb3VibGVGb3JtYXRTdGF0ZSwgVXNpbmdE
b3VibGVGb3JtYXQpOworfQorCitib29sIFZhcmlhYmxlQWNjZXNzRGF0YTo6bWVyZ2VEb3VibGVG
b3JtYXRTdGF0ZShEb3VibGVGb3JtYXRTdGF0ZSBkb3VibGVGb3JtYXRTdGF0ZSkKK3sKKyAgICBy
ZXR1cm4gREZHOjptZXJnZURvdWJsZUZvcm1hdFN0YXRlKGZpbmQoKS0+bV9kb3VibGVGb3JtYXRT
dGF0ZSwgZG91YmxlRm9ybWF0U3RhdGUpOworfQorCitib29sIFZhcmlhYmxlQWNjZXNzRGF0YTo6
bWFrZVByZWRpY3Rpb25Gb3JEb3VibGVGb3JtYXQoKQoreworICAgIEFTU0VSVChpc1Jvb3QoKSk7
CisgICAgCisgICAgaWYgKG1fZG91YmxlRm9ybWF0U3RhdGUgIT0gVXNpbmdEb3VibGVGb3JtYXQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0g
bV9wcmVkaWN0aW9uOworICAgIGlmICh0eXBlICYgflNwZWNCeXRlY29kZU51bWJlcikKKyAgICAg
ICAgdHlwZSB8PSBTcGVjRG91YmxlUHVyZU5hTjsKKyAgICBpZiAodHlwZSAmIFNwZWNNYWNoaW5l
SW50KQorICAgICAgICB0eXBlIHw9IFNwZWNJbnQ1MkFzRG91YmxlOworICAgIHJldHVybiBjaGVj
a0FuZFNldChtX3ByZWRpY3Rpb24sIHR5cGUpOworfQorCitGbHVzaEZvcm1hdCBWYXJpYWJsZUFj
Y2Vzc0RhdGE6OmZsdXNoRm9ybWF0KCkKK3sKKyAgICBBU1NFUlQoZmluZCgpID09IHRoaXMpOwor
ICAgIAorICAgIGlmIChpc0FyZ3VtZW50c0FsaWFzKCkpCisgICAgICAgIHJldHVybiBGbHVzaGVk
QXJndW1lbnRzOworICAgIAorICAgIGlmICghc2hvdWxkVW5ib3hJZlBvc3NpYmxlKCkpCisgICAg
ICAgIHJldHVybiBGbHVzaGVkSlNWYWx1ZTsKKyAgICAKKyAgICBpZiAoc2hvdWxkVXNlRG91Ymxl
Rm9ybWF0KCkpCisgICAgICAgIHJldHVybiBGbHVzaGVkRG91YmxlOworICAgIAorICAgIFNwZWN1
bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBhcmd1bWVudEF3YXJlUHJlZGljdGlvbigpOworICAgIGlm
IChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbikpCisgICAgICAgIHJldHVybiBGbHVzaGVk
SW50MzI7CisgICAgCisgICAgaWYgKGVuYWJsZUludDUyKCkgJiYgIW1fbG9jYWwuaXNBcmd1bWVu
dCgpICYmIGlzTWFjaGluZUludFNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQorICAgICAgICByZXR1
cm4gRmx1c2hlZEludDUyOworICAgIAorICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbihwcmVkaWN0
aW9uKSkKKyAgICAgICAgcmV0dXJuIEZsdXNoZWRDZWxsOworICAgIAorICAgIGlmIChpc0Jvb2xl
YW5TcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgcmV0dXJuIEZsdXNoZWRCb29sZWFu
OworICAgIAorICAgIHJldHVybiBGbHVzaGVkSlNWYWx1ZTsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAkocmV2aXNp
b24gMTY3NTQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vz
c0RhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDExLTIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw2ICsyNiw4IEBACiAjaWZuZGVm
IERGR1ZhcmlhYmxlQWNjZXNzRGF0YV9oCiAjZGVmaW5lIERGR1ZhcmlhYmxlQWNjZXNzRGF0YV9o
CiAKKyNpZiBFTkFCTEUoREZHX0pJVCkKKwogI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgogI2luY2x1
ZGUgIkRGR0RvdWJsZUZvcm1hdFN0YXRlLmgiCiAjaW5jbHVkZSAiREZHRmx1c2hGb3JtYXQuaCIK
QEAgLTQ1LDM5ICs0Nyw4IEBAIGVudW0gRG91YmxlQmFsbG90IHsgVm90ZVZhbHVlLCBWb3RlRG91
YmwKIAogY2xhc3MgVmFyaWFibGVBY2Nlc3NEYXRhIDogcHVibGljIFVuaW9uRmluZDxWYXJpYWJs
ZUFjY2Vzc0RhdGE+IHsKIHB1YmxpYzoKLSAgICBWYXJpYWJsZUFjY2Vzc0RhdGEoKQotICAgICAg
ICA6IG1fbG9jYWwoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihzdGQ6Om51bWVyaWNfbGlt
aXRzPGludD46Om1pbigpKSkKLSAgICAgICAgLCBtX3ByZWRpY3Rpb24oU3BlY05vbmUpCi0gICAg
ICAgICwgbV9hcmd1bWVudEF3YXJlUHJlZGljdGlvbihTcGVjTm9uZSkKLSAgICAgICAgLCBtX2Zs
YWdzKDApCi0gICAgICAgICwgbV9pc0NhcHR1cmVkKGZhbHNlKQotICAgICAgICAsIG1fc2hvdWxk
TmV2ZXJVbmJveChmYWxzZSkKLSAgICAgICAgLCBtX2lzQXJndW1lbnRzQWxpYXMoZmFsc2UpCi0g
ICAgICAgICwgbV9zdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkKGZhbHNlKQotICAgICAgICAs
IG1fY2hlY2tBcnJheUhvaXN0aW5nRmFpbGVkKGZhbHNlKQotICAgICAgICAsIG1faXNQcm9maXRh
YmxlVG9VbmJveChmYWxzZSkKLSAgICAgICAgLCBtX2lzTG9hZGVkRnJvbShmYWxzZSkKLSAgICAg
ICAgLCBtX2RvdWJsZUZvcm1hdFN0YXRlKEVtcHR5RG91YmxlRm9ybWF0U3RhdGUpCi0gICAgewot
ICAgICAgICBjbGVhclZvdGVzKCk7Ci0gICAgfQotICAgIAotICAgIFZhcmlhYmxlQWNjZXNzRGF0
YShWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIGJvb2wgaXNDYXB0dXJlZCkKLSAgICAgICAgOiBtX2xv
Y2FsKGxvY2FsKQotICAgICAgICAsIG1fcHJlZGljdGlvbihTcGVjTm9uZSkKLSAgICAgICAgLCBt
X2FyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKFNwZWNOb25lKQotICAgICAgICAsIG1fZmxhZ3MoMCkK
LSAgICAgICAgLCBtX2lzQ2FwdHVyZWQoaXNDYXB0dXJlZCkKLSAgICAgICAgLCBtX3Nob3VsZE5l
dmVyVW5ib3goaXNDYXB0dXJlZCkKLSAgICAgICAgLCBtX2lzQXJndW1lbnRzQWxpYXMoZmFsc2Up
Ci0gICAgICAgICwgbV9zdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkKGZhbHNlKQotICAgICAg
ICAsIG1fY2hlY2tBcnJheUhvaXN0aW5nRmFpbGVkKGZhbHNlKQotICAgICAgICAsIG1faXNQcm9m
aXRhYmxlVG9VbmJveChmYWxzZSkKLSAgICAgICAgLCBtX2lzTG9hZGVkRnJvbShmYWxzZSkKLSAg
ICAgICAgLCBtX2RvdWJsZUZvcm1hdFN0YXRlKEVtcHR5RG91YmxlRm9ybWF0U3RhdGUpCi0gICAg
ewotICAgICAgICBjbGVhclZvdGVzKCk7Ci0gICAgfQorICAgIFZhcmlhYmxlQWNjZXNzRGF0YSgp
OworICAgIFZhcmlhYmxlQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIGJvb2wgaXND
YXB0dXJlZCk7CiAgICAgCiAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsKCkKICAgICB7CkBAIC05
MSwxMSArNjIsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX21hY2hpbmVMb2NhbDsKICAg
ICB9CiAKLSAgICBib29sIG1lcmdlSXNDYXB0dXJlZChib29sIGlzQ2FwdHVyZWQpCi0gICAgewot
ICAgICAgICByZXR1cm4gY2hlY2tBbmRTZXQobV9zaG91bGROZXZlclVuYm94LCBtX3Nob3VsZE5l
dmVyVW5ib3ggfCBpc0NhcHR1cmVkKQotICAgICAgICAgICAgfCBjaGVja0FuZFNldChtX2lzQ2Fw
dHVyZWQsIG1faXNDYXB0dXJlZCB8IGlzQ2FwdHVyZWQpOwotICAgIH0KKyAgICBib29sIG1lcmdl
SXNDYXB0dXJlZChib29sIGlzQ2FwdHVyZWQpOwogICAgIAogICAgIGJvb2wgaXNDYXB0dXJlZCgp
CiAgICAgewpAQCAtMTEyLDE0ICs3OSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1faXNQ
cm9maXRhYmxlVG9VbmJveDsKICAgICB9CiAgICAgCi0gICAgYm9vbCBtZXJnZVNob3VsZE5ldmVy
VW5ib3goYm9vbCBzaG91bGROZXZlclVuYm94KQotICAgIHsKLSAgICAgICAgYm9vbCBuZXdTaG91
bGROZXZlclVuYm94ID0gbV9zaG91bGROZXZlclVuYm94IHwgc2hvdWxkTmV2ZXJVbmJveDsKLSAg
ICAgICAgaWYgKG5ld1Nob3VsZE5ldmVyVW5ib3ggPT0gbV9zaG91bGROZXZlclVuYm94KQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBtX3Nob3VsZE5ldmVyVW5ib3ggPSBuZXdT
aG91bGROZXZlclVuYm94OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgYm9vbCBt
ZXJnZVNob3VsZE5ldmVyVW5ib3goYm9vbCBzaG91bGROZXZlclVuYm94KTsKICAgICAKICAgICAv
LyBSZXR1cm5zIHRydWUgaWYgaXQgd291bGQgYmUgdW5zb3VuZCB0byBzdG9yZSB0aGUgdmFsdWUg
aW4gYW4gdW5ib3hlZCBmYXNoaW9uLgogICAgIC8vIElmIHRoaXMgcmV0dXJucyBmYWxzZSwgaXQg
c2ltcGx5IG1lYW5zIHRoYXQgaXQgaXMgc291bmQgdG8gdW5ib3g7IGl0IGRvZXNuJ3QKQEAgLTE4
MywxNCArMTQzLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9pc0xvYWRlZEZyb207CiAg
ICAgfQogICAgIAotICAgIGJvb2wgcHJlZGljdChTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKQot
ICAgIHsKLSAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBzZWxmID0gZmluZCgpOwotICAgICAg
ICBib29sIHJlc3VsdCA9IG1lcmdlU3BlY3VsYXRpb24oc2VsZi0+bV9wcmVkaWN0aW9uLCBwcmVk
aWN0aW9uKTsKLSAgICAgICAgaWYgKHJlc3VsdCkKLSAgICAgICAgICAgIG1lcmdlU3BlY3VsYXRp
b24obV9hcmd1bWVudEF3YXJlUHJlZGljdGlvbiwgbV9wcmVkaWN0aW9uKTsKLSAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICB9CisgICAgYm9vbCBwcmVkaWN0KFNwZWN1bGF0ZWRUeXBlIHByZWRp
Y3Rpb24pOwogICAgIAogICAgIFNwZWN1bGF0ZWRUeXBlIG5vblVuaWZpZWRQcmVkaWN0aW9uKCkK
ICAgICB7CkBAIC0yMDcsMTAgKzE2MCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGZpbmQo
KS0+bV9hcmd1bWVudEF3YXJlUHJlZGljdGlvbjsKICAgICB9CiAgICAgCi0gICAgYm9vbCBtZXJn
ZUFyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24pCi0gICAg
ewotICAgICAgICByZXR1cm4gbWVyZ2VTcGVjdWxhdGlvbihmaW5kKCktPm1fYXJndW1lbnRBd2Fy
ZVByZWRpY3Rpb24sIHByZWRpY3Rpb24pOwotICAgIH0KKyAgICBib29sIG1lcmdlQXJndW1lbnRB
d2FyZVByZWRpY3Rpb24oU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbik7CiAgICAgCiAgICAgdm9p
ZCBjbGVhclZvdGVzKCkKICAgICB7CkBAIC0yMTksMTAgKzE2OSwxMCBAQCBwdWJsaWM6CiAgICAg
ICAgIG1fdm90ZXNbMV0gPSAwOwogICAgIH0KICAgICAKLSAgICB2b2lkIHZvdGUodW5zaWduZWQg
YmFsbG90KQorICAgIHZvaWQgdm90ZSh1bnNpZ25lZCBiYWxsb3QsIGZsb2F0IHdlaWdodCA9IDEp
CiAgICAgewogICAgICAgICBBU1NFUlQoYmFsbG90IDwgMik7Ci0gICAgICAgIG1fdm90ZXNbYmFs
bG90XSsrOworICAgICAgICBtX3ZvdGVzW2JhbGxvdF0gKz0gd2VpZ2h0OwogICAgIH0KICAgICAK
ICAgICBkb3VibGUgdm90ZVJhdGlvKCkKQEAgLTIzMSwzOSArMTgxLDcgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPihtX3ZvdGVzWzFdKSAvIG1fdm90ZXNbMF07
CiAgICAgfQogICAgIAotICAgIGJvb2wgc2hvdWxkVXNlRG91YmxlRm9ybWF0QWNjb3JkaW5nVG9W
b3RlKCkKLSAgICB7Ci0gICAgICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgdGhpcyBmYWNpbGl0eSBm
b3IgYXJndW1lbnRzLCB5ZXQuCi0gICAgICAgIC8vIEZJWE1FOiBtYWtlIHRoaXMgd29yayBmb3Ig
YXJndW1lbnRzLgotICAgICAgICBpZiAobG9jYWwoKS5pc0FyZ3VtZW50KCkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICAvLyBJZiB0aGUgdmFyaWFibGUgaXMg
bm90IGEgbnVtYmVyIHByZWRpY3Rpb24sIHRoZW4gdGhpcyBkb2Vzbid0Ci0gICAgICAgIC8vIG1h
a2UgYW55IHNlbnNlLgotICAgICAgICBpZiAoIWlzRnVsbE51bWJlclNwZWN1bGF0aW9uKHByZWRp
Y3Rpb24oKSkpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiB3ZSBtYXkgZW5kIHVwIGZvcmNpbmcg
YSBsb2NhbCBpbiBpbmxpbmVkIGFyZ3VtZW50IHBvc2l0aW9uIHRvIGJlIGEgZG91YmxlIGV2ZW4K
LSAgICAgICAgICAgIC8vIGlmIGl0IGlzIHNvbWV0aW1lcyBub3QgZXZlbiBudW1lcmljLCBzaW5j
ZSB0aGlzIG5ldmVyIHNpZ25hbHMgdGhlIGZhY3QgdGhhdCBpdCBkb2Vzbid0Ci0gICAgICAgICAg
ICAvLyB3YW50IGRvdWJsZXMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMDk1MTEKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgLy8gSWYgdGhlIHZhcmlhYmxlIGlzIHByZWRpY3RlZCB0byBob2xkIG9ubHkgZG91
YmxlcywgdGhlbiBpdCdzIGEKLSAgICAgICAgLy8gbm8tYnJhaW5lcjogaXQgc2hvdWxkIGJlIGZv
cm1hdHRlZCBhcyBhIGRvdWJsZS4KLSAgICAgICAgaWYgKGlzRG91YmxlU3BlY3VsYXRpb24ocHJl
ZGljdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAKLSAgICAgICAg
Ly8gSWYgdGhlIHZhcmlhYmxlIGlzIGtub3duIHRvIGJlIHVzZWQgYXMgYW4gaW50ZWdlciwgdGhl
biBiZSBzYWZlIC0KLSAgICAgICAgLy8gZG9uJ3QgZm9yY2UgaXQgdG8gYmUgYSBkb3VibGUuCi0g
ICAgICAgIGlmIChmbGFncygpICYgTm9kZUJ5dGVjb2RlVXNlc0FzSW50KQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgLy8gSWYgdGhlIHZhcmlhYmxlIGhhcyBi
ZWVuIHZvdGVkIHRvIGJlY29tZSBhIGRvdWJsZSwgdGhlbiBtYWtlIGl0IGEKLSAgICAgICAgLy8g
ZG91YmxlLgotICAgICAgICBpZiAodm90ZVJhdGlvKCkgPj0gT3B0aW9uczo6ZG91YmxlVm90ZVJh
dGlvRm9yRG91YmxlRm9ybWF0KCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgYm9vbCBzaG91bGRVc2VEb3VibGVG
b3JtYXRBY2NvcmRpbmdUb1ZvdGUoKTsKICAgICAKICAgICBEb3VibGVGb3JtYXRTdGF0ZSBkb3Vi
bGVGb3JtYXRTdGF0ZSgpCiAgICAgewpAQCAtMjc5LDQ4ICsxOTcsMTEgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gZG91YmxlU3RhdGUgJiYgaXNQcm9maXRhYmxlVG9VbmJveCgpOwogICAgIH0K
ICAgICAKLSAgICBib29sIHRhbGx5Vm90ZXNGb3JTaG91bGRVc2VEb3VibGVGb3JtYXQoKQotICAg
IHsKLSAgICAgICAgQVNTRVJUKGlzUm9vdCgpKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChsb2Nh
bCgpLmlzQXJndW1lbnQoKSB8fCBzaG91bGROZXZlclVuYm94KCkpCi0gICAgICAgICAgICByZXR1
cm4gREZHOjptZXJnZURvdWJsZUZvcm1hdFN0YXRlKG1fZG91YmxlRm9ybWF0U3RhdGUsIE5vdFVz
aW5nRG91YmxlRm9ybWF0KTsKLSAgICAgICAgCi0gICAgICAgIGlmIChtX2RvdWJsZUZvcm1hdFN0
YXRlID09IENhbnRVc2VEb3VibGVGb3JtYXQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIAotICAgICAgICBib29sIG5ld1ZhbHVlT2ZTaG91bGRVc2VEb3VibGVGb3JtYXQgPSBz
aG91bGRVc2VEb3VibGVGb3JtYXRBY2NvcmRpbmdUb1ZvdGUoKTsKLSAgICAgICAgaWYgKCFuZXdW
YWx1ZU9mU2hvdWxkVXNlRG91YmxlRm9ybWF0KSB7Ci0gICAgICAgICAgICAvLyBXZSBtb25vdG9u
aWNhbGx5IGNvbnZlcnQgdG8gZG91YmxlLiBIZW5jZSwgaWYgdGhlIGZpeHBvaW50IGxlYWRzIHVz
IHRvIGNvbmNsdWRlIHRoYXQgd2Ugc2hvdWxkCi0gICAgICAgICAgICAvLyBzd2l0Y2ggYmFjayB0
byBpbnQsIHdlIGluc3RlYWQgaWdub3JlIHRoaXMgYW5kIHN0aWNrIHdpdGggZG91YmxlLgotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAo
bV9kb3VibGVGb3JtYXRTdGF0ZSA9PSBVc2luZ0RvdWJsZUZvcm1hdCkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBERkc6Om1lcmdlRG91YmxlRm9y
bWF0U3RhdGUobV9kb3VibGVGb3JtYXRTdGF0ZSwgVXNpbmdEb3VibGVGb3JtYXQpOwotICAgIH0K
KyAgICBib29sIHRhbGx5Vm90ZXNGb3JTaG91bGRVc2VEb3VibGVGb3JtYXQoKTsKICAgICAKLSAg
ICBib29sIG1lcmdlRG91YmxlRm9ybWF0U3RhdGUoRG91YmxlRm9ybWF0U3RhdGUgZG91YmxlRm9y
bWF0U3RhdGUpCi0gICAgewotICAgICAgICByZXR1cm4gREZHOjptZXJnZURvdWJsZUZvcm1hdFN0
YXRlKGZpbmQoKS0+bV9kb3VibGVGb3JtYXRTdGF0ZSwgZG91YmxlRm9ybWF0U3RhdGUpOwotICAg
IH0KKyAgICBib29sIG1lcmdlRG91YmxlRm9ybWF0U3RhdGUoRG91YmxlRm9ybWF0U3RhdGUgZG91
YmxlRm9ybWF0U3RhdGUpOwogICAgIAotICAgIGJvb2wgbWFrZVByZWRpY3Rpb25Gb3JEb3VibGVG
b3JtYXQoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzUm9vdCgpKTsKLSAgICAgICAgCi0gICAg
ICAgIGlmIChtX2RvdWJsZUZvcm1hdFN0YXRlICE9IFVzaW5nRG91YmxlRm9ybWF0KQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgU3BlY3VsYXRlZFR5cGUgdHlw
ZSA9IG1fcHJlZGljdGlvbjsKLSAgICAgICAgaWYgKHR5cGUgJiB+U3BlY0J5dGVjb2RlTnVtYmVy
KQotICAgICAgICAgICAgdHlwZSB8PSBTcGVjRG91YmxlUHVyZU5hTjsKLSAgICAgICAgaWYgKHR5
cGUgJiBTcGVjTWFjaGluZUludCkKLSAgICAgICAgICAgIHR5cGUgfD0gU3BlY0ludDUyQXNEb3Vi
bGU7Ci0gICAgICAgIHJldHVybiBjaGVja0FuZFNldChtX3ByZWRpY3Rpb24sIHR5cGUpOwotICAg
IH0KKyAgICBib29sIG1ha2VQcmVkaWN0aW9uRm9yRG91YmxlRm9ybWF0KCk7CiAgICAgCiAgICAg
Tm9kZUZsYWdzIGZsYWdzKCkgY29uc3QgeyByZXR1cm4gbV9mbGFnczsgfQogICAgIApAQCAtMzI5
LDM0ICsyMTAsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBjaGVja0FuZFNldChtX2ZsYWdz
LCBtX2ZsYWdzIHwgbmV3RmxhZ3MpOwogICAgIH0KICAgICAKLSAgICBGbHVzaEZvcm1hdCBmbHVz
aEZvcm1hdCgpCi0gICAgewotICAgICAgICBBU1NFUlQoZmluZCgpID09IHRoaXMpOwotICAgICAg
ICAKLSAgICAgICAgaWYgKGlzQXJndW1lbnRzQWxpYXMoKSkKLSAgICAgICAgICAgIHJldHVybiBG
bHVzaGVkQXJndW1lbnRzOwotICAgICAgICAKLSAgICAgICAgaWYgKCFzaG91bGRVbmJveElmUG9z
c2libGUoKSkKLSAgICAgICAgICAgIHJldHVybiBGbHVzaGVkSlNWYWx1ZTsKLSAgICAgICAgCi0g
ICAgICAgIGlmIChzaG91bGRVc2VEb3VibGVGb3JtYXQoKSkKLSAgICAgICAgICAgIHJldHVybiBG
bHVzaGVkRG91YmxlOwotICAgICAgICAKLSAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlv
biA9IGFyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKCk7Ci0gICAgICAgIGlmIChpc0ludDMyU3BlY3Vs
YXRpb24ocHJlZGljdGlvbikpCi0gICAgICAgICAgICByZXR1cm4gRmx1c2hlZEludDMyOwotICAg
ICAgICAKLSAgICAgICAgaWYgKGVuYWJsZUludDUyKCkgJiYgIW1fbG9jYWwuaXNBcmd1bWVudCgp
ICYmIGlzTWFjaGluZUludFNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQotICAgICAgICAgICAgcmV0
dXJuIEZsdXNoZWRJbnQ1MjsKLSAgICAgICAgCi0gICAgICAgIGlmIChpc0NlbGxTcGVjdWxhdGlv
bihwcmVkaWN0aW9uKSkKLSAgICAgICAgICAgIHJldHVybiBGbHVzaGVkQ2VsbDsKLSAgICAgICAg
Ci0gICAgICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKLSAgICAgICAg
ICAgIHJldHVybiBGbHVzaGVkQm9vbGVhbjsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBGbHVz
aGVkSlNWYWx1ZTsKLSAgICB9CisgICAgRmx1c2hGb3JtYXQgZmx1c2hGb3JtYXQoKTsKICAgICAK
ICAgICBGbHVzaGVkQXQgZmx1c2hlZEF0KCkKICAgICB7CkBAIC0zODksNCArMjQzLDYgQEAgcHJp
dmF0ZToKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCisjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCisKICNlbmRpZiAvLyBERkdWYXJpYWJsZUFjY2Vzc0RhdGFfaAo=
</data>
<flag name="review"
          id="254125"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>