<?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>161300</bug_id>
          
          <creation_ts>2016-08-28 10:34:41 -0700</creation_ts>
          <short_desc>Move RenderMathMLRoot:RootType and RenderMathMLScripts:ScriptsType to element classes</short_desc>
          <delta_ts>2017-12-04 03:31: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>MathML</component>
          <version>WebKit 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>180161</dependson>
          <blocked>180346</blocked>
    
    <blocked>160543</blocked>
    
    <blocked>179682</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Frédéric Wang Nélar">fred.wang</reporter>
          <assigned_to name="Frédéric Wang Nélar">fred.wang</assigned_to>
          <cc>alex</cc>
    
    <cc>darin</cc>
    
    <cc>lambda</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1224075</commentid>
    <comment_count>0</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-08-28 10:34:41 -0700</bug_when>
    <thetext>We have some mapping from tag names to these enums. This could just be performed directly in the constructors of the corresponding element classes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377256</commentid>
    <comment_count>1</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2017-12-01 23:27:08 -0800</bug_when>
    <thetext>*** Bug 180161 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377271</commentid>
    <comment_count>2</comment_count>
      <attachid>328225</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2017-12-02 01:29:48 -0800</bug_when>
    <thetext>Created attachment 328225
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377508</commentid>
    <comment_count>3</comment_count>
      <attachid>328225</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-12-03 14:13:02 -0800</bug_when>
    <thetext>Comment on attachment 328225
Patch

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

&gt; Source/WebCore/rendering/mathml/RenderMathMLRoot.cpp:57
&gt; +    return static_cast&lt;MathMLRootElement&amp;&gt;(nodeForNonAnonymous()).rootType();

Typically, this kind of cast should be a downcast, not a static_cast; but of course this requires adding a way to check the type in debug builds and using some form of the SPECIALIZE_TYPE_TRAITS macro.

It’s more elegant to add a function named element() to a specific renderer class like this, and do the cast there. Then this function becomes just element().rootType(). The benefit for future programmers is that anyone who wants the element for this renderer and has the specific renderer type pointer or reference, will get a specifically typed reference, is likely to get the most efficient version of various functions like the ones that are more efficient in ContainerNode than Node, gets a reference rather than a pointer, etc. Helps cut down on casting too.

If we wanted to follow the pattern from, say, RenderButton, which adds RenderButton::formControlElement and deletes the inherited element function that would be OK, but I think it would also be fine if RenderButton had just defined a function named element with return type HTMLFormControlElement&amp;.

&gt; Source/WebCore/rendering/mathml/RenderMathMLRoot.h:37
&gt; +class MathMLRootElement;
&gt; +enum class RootType { SquareRoot, RootWithIndex };

Should not paragraph this forward declaration together with an actual definition of something in this header. Pleas add a blank line.

&gt; Source/WebCore/rendering/mathml/RenderMathMLScripts.h:37
&gt;  class MathMLScriptsElement;
&gt; +enum class ScriptType { Sub, Super, SubSup, Multiscripts, Under, Over, UnderOver };

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377639</commentid>
    <comment_count>4</comment_count>
      <attachid>328225</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2017-12-04 03:14:38 -0800</bug_when>
    <thetext>Comment on attachment 328225
Patch

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

&gt;&gt; Source/WebCore/rendering/mathml/RenderMathMLRoot.cpp:57
&gt;&gt; +    return static_cast&lt;MathMLRootElement&amp;&gt;(nodeForNonAnonymous()).rootType();
&gt; 
&gt; Typically, this kind of cast should be a downcast, not a static_cast; but of course this requires adding a way to check the type in debug builds and using some form of the SPECIALIZE_TYPE_TRAITS macro.
&gt; 
&gt; It’s more elegant to add a function named element() to a specific renderer class like this, and do the cast there. Then this function becomes just element().rootType(). The benefit for future programmers is that anyone who wants the element for this renderer and has the specific renderer type pointer or reference, will get a specifically typed reference, is likely to get the most efficient version of various functions like the ones that are more efficient in ContainerNode than Node, gets a reference rather than a pointer, etc. Helps cut down on casting too.
&gt; 
&gt; If we wanted to follow the pattern from, say, RenderButton, which adds RenderButton::formControlElement and deletes the inherited element function that would be OK, but I think it would also be fine if RenderButton had just defined a function named element with return type HTMLFormControlElement&amp;.

OK, that seems to be a generic problem in the MathML code. For now, I&apos;ll just introduce override element() and I opened the follow-up bug 180346.

&gt;&gt; Source/WebCore/rendering/mathml/RenderMathMLRoot.h:37
&gt;&gt; +enum class RootType { SquareRoot, RootWithIndex };
&gt; 
&gt; Should not paragraph this forward declaration together with an actual definition of something in this header. Pleas add a blank line.

Done.

&gt;&gt; Source/WebCore/rendering/mathml/RenderMathMLScripts.h:37
&gt;&gt; +enum class ScriptType { Sub, Super, SubSup, Multiscripts, Under, Over, UnderOver };
&gt; 
&gt; Ditto.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377644</commentid>
    <comment_count>5</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2017-12-04 03:30:23 -0800</bug_when>
    <thetext>Committed r225475: &lt;https://trac.webkit.org/changeset/225475&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377646</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-12-04 03:31:41 -0800</bug_when>
    <thetext>&lt;rdar://problem/35826875&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>328225</attachid>
            <date>2017-12-02 01:29:48 -0800</date>
            <delta_ts>2017-12-03 14:13:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-161300-20171202102946.patch</filename>
            <type>text/plain</type>
            <size>43670</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI1Mjc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWUxNWRjNDBkYWRkYWRl
OGFlMGZkMjc1MDRmM2EwMDQyNTllODUxMC4uMDA1YWQxM2FkNjg4MzQ3ZWRmMjkyZmMyOGEzNTBl
MGE2N2UyOTA4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc1IEBACisyMDE3LTEyLTAyICBGcmVk
ZXJpYyBXYW5nICA8ZndhbmdAaWdhbGlhLmNvbT4KKworICAgICAgICBCdWcgMTYxMzAwIC0gTW92
ZSBSZW5kZXJNYXRoTUxSb290OlJvb3RUeXBlIGFuZCBSZW5kZXJNYXRoTUxTY3JpcHRzOlNjcmlw
dHNUeXBlIHRvIGVsZW1lbnQgY2xhc3NlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTYxMzAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgUmVuZGVyTWF0aE1MUm9vdDo6bV9raW5kIGFuZCBSZW5kZXJNYXRo
TUxTY3JpcHRzOjptX3NjcmlwdFR5cGUgYXJlIGluaXRpYWxpemVkIGluIHRoZQorICAgICAgICBj
b25zdHJ1Y3RvcnMgb2YgdGhlIHJlbmRlcmVyIGNsYXNzZXMgZnJvbSB0aGUgdGFnIG5hbWUgb2Yg
dGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMuCisgICAgICAgIFRoaXMgcGF0Y2ggbW92ZXMgdGhl
bSBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnQgY2xhc3NlcyBhbmQgbWFrZXMgdGhlbSBj
b25zdCBtZW1iZXJzCisgICAgICAgIHBhcnNlZCBpbiB0aGUgY29uc3RydWN0b3JzLiBJdCBhbHNv
IGludHJvZHVjZXMgYSBNYXRoTUxSb290RWxlbWVudCBjbGFzcyBkZXJpdmluZyBmcm9tCisgICAg
ICAgIE1hdGhNTFJvd0VsZW1lbnQgdG8gc3RvcmUgdGhlIG5ldyBtZW1iZXIuIEZpbmFsbHksIHRo
ZSB0eXBlcyBhcmUgcmVkZWZpbmVkIGFzIGVudW0gY2xhc3Nlcy4KKworICAgICAgICBObyBuZXcg
dGVzdHMsIGJlaGF2aW9yIHVuY2hhbmdlZCBhbmQgYWxyZWFkeSBjb3ZlcmVkIGJ5IGV4aXN0aW5n
IHRlc3RzLgorCisgICAgICAgICogU291cmNlcy50eHQ6IEFkZCBNYXRoTUxSb290RWxlbWVudCBm
aWxlcy4KKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IERpdHRv
LgorICAgICAgICAqIG1hdGhtbC9NYXRoTUxBbGxJbk9uZS5jcHA6IERpdHRvLgorICAgICAgICAq
IG1hdGhtbC9NYXRoTUxSb290RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyb290VHlw
ZU9mKTogSGVscGVyIGZ1bmN0aW9uIHRvIHBhcnNlIHRoZSByb290IHR5cGUsIG1vdmVkIGZyb20g
UmVuZGVyTWF0aE1MUm9vdC4KKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhNTFJvb3RFbGVtZW50OjpN
YXRoTUxSb290RWxlbWVudCk6IEluaXRpYWxpemUgdGhlIHJvb3QgdHlwZS4KKyAgICAgICAgKFdl
YkNvcmU6Ok1hdGhNTFJvb3RFbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWF0
aE1MUm9vdEVsZW1lbnQ6OmNyZWF0ZUVsZW1lbnRSZW5kZXJlcik6IE1vdmVkIGZyb20gTWF0aE1M
Um93RWxlbWVudC4KKyAgICAgICAgKiBtYXRobWwvTWF0aE1MUm9vdEVsZW1lbnQuaDogTmV3IGNs
YXNzIGRlcml2aW5nIGZyb20gTWF0aE1MUm93RWxlbWVudCwgd2l0aCBhIFJvb3RUeXBlCisgICAg
ICAgIG1lbWJlciBleHBvc2VkIHRvIHRoZSByZW5kZXJlciBjbGFzcy4KKyAgICAgICAgKiBtYXRo
bWwvTWF0aE1MUm93RWxlbWVudC5jcHA6IFJlbW92ZSBoZWFkZXIgZm9yIFJlbmRlck1hdGhNTFJv
b3QuaC4KKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhNTFJvd0VsZW1lbnQ6OmNyZWF0ZUVsZW1lbnRS
ZW5kZXJlcik6IE1vdmVkIHRvIE1hdGhNTFJvb3RFbGVtZW50LgorICAgICAgICAqIG1hdGhtbC9N
YXRoTUxTY3JpcHRzRWxlbWVudC5jcHA6IEludHJvZHVjZSBhIHNjcmlwdCB0eXBlLgorICAgICAg
ICAoV2ViQ29yZTo6c2NyaXB0VHlwZU9mKTogSGVscGVyIGZ1bmN0aW9uIHRvIHBhcnNlIHRoZSBz
Y3JpcHQgdHlwZSwgbW92ZWQgZnJvbQorICAgICAgICBSZW5lck1hdGhNTFNjcmlwdHMuCisgICAg
ICAgIChXZWJDb3JlOjpNYXRoTUxTY3JpcHRzRWxlbWVudDo6TWF0aE1MU2NyaXB0c0VsZW1lbnQp
OiBJbml0aWFsaXplIHRoZSBzY3JpcHQgdHlwZS4KKyAgICAgICAgKiBtYXRobWwvTWF0aE1MU2Ny
aXB0c0VsZW1lbnQuaDogQWRkIG5ldyBzY3JpcHQgdHlwZSBtZW1iZXIuCisgICAgICAgIChXZWJD
b3JlOjpNYXRoTUxTY3JpcHRzRWxlbWVudDo6c2NyaXB0VHlwZSBjb25zdCk6IEV4cG9zZSB0aGUg
c2NyaXB0IHR5cGUgdG8gdGhlIHJlbmRlcmVyCisgICAgICAgIGNsYXNzLgorICAgICAgICAqIG1h
dGhtbC9tYXRodGFncy5pbjogTWFwIDxtc3FydD4gYW5kIDxtcm9vdD4gdG8gTWF0aE1MUm9vdEVs
ZW1lbnQuCisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTFJvb3Q6OlJlbmRlck1hdGhNTFJvb3QpOiBV
c2UgTWF0aE1MUm9vdEVsZW1lbnQgYW5kIHJlbW92ZSBwYXJzaW5nIG9mCisgICAgICAgIHRoZSBy
b290IHR5cGUuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxSb290Ojpyb290VHlwZSBj
b25zdCk6IEhlbHBlciBmdW5jdGlvbiB0byBhY2Nlc3MgdGhlIHJvb3QgdHlwZSBmcm9tCisgICAg
ICAgIHRoZSBlbGVtZW50IGNsYXNzLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MUm9v
dDo6aXNWYWxpZCBjb25zdCk6IFVzZSByb290VHlwZSgpIGFuZCBhZGQgcHJlZml4IGZvciBlbnVt
IGNsYXNzCisgICAgICAgIHZhbHVlcy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTFJv
b3Q6OmdldEJhc2UgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhN
TFJvb3Q6OmdldEluZGV4IGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJN
YXRoTUxSb290Ojpob3Jpem9udGFsUGFyYW1ldGVycyk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTWF0aE1MUm9vdDo6dmVydGljYWxQYXJhbWV0ZXJzKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJNYXRoTUxSb290Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRo
cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MUm9vdDo6bGF5b3V0Qmxv
Y2spOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTFJvb3Q6OnBhaW50KTog
RGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290Lmg6IERl
ZmluZSByb290IHR5cGUgYXMgYW4gZW51bSBjbGFzcywgcmVwbGFjZQorICAgICAgICBNYXRoTUxS
b3dFbGVtZW50IHdpdGggTWF0aE1MUm9vdEVsZW1lbnQsIGRlY2xhcmUgYW5kIHVzZSBuZXcgcm9v
dFR5cGUoKSBmdW5jdGlvbiBhbmQgcmVtb3ZlCisgICAgICAgIHRoZSBtX2tpbmQgbWVtYmVyLgor
ICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MU2NyaXB0cy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxTY3JpcHRzOjpSZW5kZXJNYXRoTUxTY3JpcHRzKTog
UmVtb3ZlIHBhcnNpbmcgb2Ygc2NyaXB0IHR5cGUuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJN
YXRoTUxTY3JpcHRzOjpzY3JpcHRUeXBlIGNvbnN0KTogSGVscGVyIGZ1bmN0aW9uIHRvIGFjY2Vz
cyB0aGUgc2NyaXB0IHR5cGUKKyAgICAgICAgZnJvbSB0aGUgZWxlbWVudCBjbGFzcy4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTFNjcmlwdHM6OnZhbGlkYXRlQW5kR2V0UmVmZXJlbmNl
Q2hpbGRyZW4pOiBVc2Ugc2NyaXB0VHlwZSgpIGFuZCBhZGQKKyAgICAgICAgcHJlZml4IGZvciBl
bnVtIGNsYXNzIHZhbHVlcy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTFNjcmlwdHM6
OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJNYXRoTUxTY3JpcHRzOjp2ZXJ0aWNhbE1ldHJpY3MpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlck1hdGhNTFNjcmlwdHM6OmxheW91dEJsb2NrKTogRGl0dG8uCisgICAg
ICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxTY3JpcHRzLmg6IERlZmluZSByb290
IHR5cGUgYXMgYW4gZW51bSBjbGFzcywgZGVjbGFyZSB0aGUKKyAgICAgICAgc2NyaXB0VHlwZSgp
IGZ1bmN0aW9uIGFuZCByZW1vdmUgdGhlIG1fc2NyaXB0VHlwZSBtZW1iZXIuCisgICAgICAgICog
cmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxVbmRlck92ZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTWF0aE1MVW5kZXJPdmVyOjppc1ZhbGlkIGNvbnN0KTogVXNlIHNjcmlwdFR5
cGUoKSBhbmQgYWRkIHByZWZpeCBmb3IgZW51bQorICAgICAgICBjbGFzcyB2YWx1ZXMuCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxVbmRlck92ZXI6OnVuZGVyIGNvbnN0KTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxVbmRlck92ZXI6Om92ZXIgY29uc3QpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTFVuZGVyT3Zlcjo6Y29tcHV0ZVBy
ZWZlcnJlZExvZ2ljYWxXaWR0aHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1h
dGhNTFVuZGVyT3Zlcjo6aGFzQWNjZW50IGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJNYXRoTUxVbmRlck92ZXI6OmxheW91dEJsb2NrKTogRGl0dG8uCisKIDIwMTctMTEt
MjkgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIExpYldlYlJU
Q1BlZXJDb25uZWN0aW9uQmFja2VuZCBzaG91bGQgY2xlYW4gaXRzIHN0YXRzIHByb21pc2VzIHdo
ZW4gYmVpbmcgY2xlYW5lZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQg
Yi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCA0MzNiODA4NWJjNWUwMzRjOWVkMDhm
YjI4ZDI2OWJlMWFhZTQxMDc0Li41ODk3ZTkxNGU5OWVmZjdjMjgyNmZiYWQ3ZDdjNzQ4ZTk1NmU2
MTFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTI1NCw2ICsxMjU0LDcgQEAgbWF0aG1sL01hdGhNTE9w
ZXJhdG9yRGljdGlvbmFyeS5jcHAKIG1hdGhtbC9NYXRoTUxPcGVyYXRvckVsZW1lbnQuY3BwCiBt
YXRobWwvTWF0aE1MUGFkZGVkRWxlbWVudC5jcHAKIG1hdGhtbC9NYXRoTUxQcmVzZW50YXRpb25F
bGVtZW50LmNwcAorbWF0aG1sL01hdGhNTFJvb3RFbGVtZW50LmNwcAogbWF0aG1sL01hdGhNTFJv
d0VsZW1lbnQuY3BwCiBtYXRobWwvTWF0aE1MU2NyaXB0c0VsZW1lbnQuY3BwCiBtYXRobWwvTWF0
aE1MU2VsZWN0RWxlbWVudC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBhMzc4Mjc0ODFkMDA1NjU0ZWYyYTU2M2MxYzFkMGFj
YmExMGM3ZTBhLi42OWNjOTIzODU1YjI4ZTlhMDAwODI2ODdlZGQ2NjFkZWNlOWIwYWNkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
KysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC00NjYzLDYgKzQ2NjMsNyBAQAogCQlGQTY1NEE2QzExMDhBQkVEMDAyNjE1RTAgLyogTWF0aE1M
VG9rZW5FbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGQTY1NEE2QTExMDhBQkVEMDAyNjE1RTAgLyogTWF0aE1MVG9rZW5FbGVtZW50LmggKi87
IH07CiAJCUZBNjU0QTZDMTEwOEFCRUQwMDI2MTZGMSAvKiBNYXRoTUxPcGVyYXRvckVsZW1lbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZBNjU0QTZB
MTEwOEFCRUQwMDI2MTZGMSAvKiBNYXRoTUxPcGVyYXRvckVsZW1lbnQuaCAqLzsgfTsKIAkJRkE2
NTRBNkMxMTA4QUJFRDAwMjYyNkYxIC8qIE1hdGhNTFVuZGVyT3ZlckVsZW1lbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZBNjU0QTZBMTEwOEFCRUQw
MDI2MjZGMSAvKiBNYXRoTUxVbmRlck92ZXJFbGVtZW50LmggKi87IH07CisJCUZBNzY1QTZDMTEw
OEFCRUQwMDc4MkE1QyAvKiBNYXRoTUxSb290RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkE3NjVBNkExMTA4QUJFRDAwNzgyQTVDIC8qIE1h
dGhNTFJvb3RFbGVtZW50LmggKi87IH07CiAJCUZBNzY1QTZDMTEwOEFCRUQwMDI2MTVFMCAvKiBN
YXRoTUxSb3dFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGQTc2NUE2QTExMDhBQkVEMDAyNjE1RTAgLyogTWF0aE1MUm93RWxlbWVudC5oICov
OyB9OwogCQlGQUJFNzJGNTEwNTlDMUVCMDBEODg4Q0MgLyogTWF0aE1MQW5ub3RhdGlvbkVsZW1l
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZBQkU3
MkVFMTA1OUMxRUIwMEQ4ODhDQyAvKiBNYXRoTUxBbm5vdGF0aW9uRWxlbWVudC5oICovOyB9Owog
CQlGQUJFNzJGNTEwNTlDMUVCMDBEOTk5REQgLyogTWF0aE1MRWxlbWVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkFCRTcyRUUxMDU5QzFFQjAwRDk5
OUREIC8qIE1hdGhNTEVsZW1lbnQuaCAqLzsgfTsKQEAgLTE0MDc5LDYgKzE0MDgwLDggQEAKIAkJ
RkE2NTRBNkExMTA4QUJFRDAwMjYxNkYxIC8qIE1hdGhNTE9wZXJhdG9yRWxlbWVudC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXRoTUxPcGVyYXRvckVsZW1lbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkE2NTRBNkExMTA4QUJFRDAwMjYyNkYxIC8qIE1h
dGhNTFVuZGVyT3ZlckVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TWF0aE1MVW5kZXJPdmVyRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
QTZFNDY2RkNEMDQxOEE5OTY2QTVCNjAgLyogRE5TUmVzb2x2ZVF1ZXVlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEROU1Jlc29sdmVRdWV1ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlGQTc2NUE2OTExMDhBQkVEMDA3ODJBNUMgLyogTWF0aE1MUm9vdEVsZW1l
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWF0aE1MUm9vdEVs
ZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQTc2NUE2QTExMDhBQkVE
MDA3ODJBNUMgLyogTWF0aE1MUm9vdEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTWF0aE1MUm9vdEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkE3NjVBNjkxMTA4QUJFRDAwMjYxNUUwIC8qIE1hdGhNTFJvd0VsZW1lbnQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWF0aE1MUm93RWxlbWVudC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZBNzY1QTZBMTEwOEFCRUQwMDI2MTVFMCAvKiBN
YXRoTUxSb3dFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hdGhN
TFJvd0VsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkFCRTcyRUQxMDU5
QzFFQjAwRDg4OENDIC8qIE1hdGhNTEFubm90YXRpb25FbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hdGhNTEFubm90YXRpb25FbGVtZW50LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1NTQ2LDYgKzI1NTQ5LDggQEAKIAkJCQlCNTlD
QTg0OUQ0MUU2RjY1RDgxMTk4QkMgLyogTWF0aE1MUGFkZGVkRWxlbWVudC5oICovLAogCQkJCUZB
QkU3MkVGMTA1OUMxRUIwMEQ5OTlERCAvKiBNYXRoTUxQcmVzZW50YXRpb25FbGVtZW50LmNwcCAq
LywKIAkJCQlGQUJFNzJGMDEwNTlDMUVCMDBEOTk5REQgLyogTWF0aE1MUHJlc2VudGF0aW9uRWxl
bWVudC5oICovLAorCQkJCUZBNzY1QTY5MTEwOEFCRUQwMDc4MkE1QyAvKiBNYXRoTUxSb290RWxl
bWVudC5jcHAgKi8sCisJCQkJRkE3NjVBNkExMTA4QUJFRDAwNzgyQTVDIC8qIE1hdGhNTFJvb3RF
bGVtZW50LmggKi8sCiAJCQkJRkE3NjVBNjkxMTA4QUJFRDAwMjYxNUUwIC8qIE1hdGhNTFJvd0Vs
ZW1lbnQuY3BwICovLAogCQkJCUZBNzY1QTZBMTEwOEFCRUQwMDI2MTVFMCAvKiBNYXRoTUxSb3dF
bGVtZW50LmggKi8sCiAJCQkJQjU5Q0E1OUFGMTcwRDhGQUE1QjhDOUFEIC8qIE1hdGhNTFNjcmlw
dHNFbGVtZW50LmNwcCAqLywKQEAgLTI4MTkzLDYgKzI4MTk4LDcgQEAKIAkJCQk0NEEyOEFBRjEy
REZCOEJGMDBBRTkyM0IgLyogTWF0aE1MTmFtZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUZBNjU0
QTZDMTEwOEFCRUQwMDI2MTZGMSAvKiBNYXRoTUxPcGVyYXRvckVsZW1lbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUZBQkU3MkY3MTA1OUMxRUIwMEQ5OTlERCAvKiBNYXRoTUxQcmVzZW50YXRpb25F
bGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQlGQTc2NUE2QzExMDhBQkVEMDA3ODJBNUMgLyog
TWF0aE1MUm9vdEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUZBNzY1QTZDMTEwOEFCRUQw
MDI2MTVFMCAvKiBNYXRoTUxSb3dFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk0RkE2NUE2
QzExMDhBQkVEMDAyNjE1RTAgLyogTWF0aE1MU3BhY2VFbGVtZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQk0MzkxNzZFMDEyREEyNUUxN0JBRjgwQTIgLyogTWF0aE1MU3R5bGUuaCBpbiBIZWFkZXJz
ICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTEFsbEluT25lLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxBbGxJbk9uZS5jcHAKaW5kZXggY2MyNTYz
ZDk2ZWVhNTIwOTQ1NGJkZTUzODlkMzJmNjg4MzBhNDQyMy4uY2U2MmZhMDA3YjdhY2QxNTc2ZDYw
NTliYzZiNjAzMzliYWUyMzljYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbWF0aG1sL01h
dGhNTEFsbEluT25lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0aE1MQWxsSW5P
bmUuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiTWF0aE1MT3BlcmF0b3JFbGVtZW50
LmNwcCIKICNpbmNsdWRlICJNYXRoTUxQYWRkZWRFbGVtZW50LmNwcCIKICNpbmNsdWRlICJNYXRo
TUxQcmVzZW50YXRpb25FbGVtZW50LmNwcCIKKyNpbmNsdWRlICJNYXRoTUxSb290RWxlbWVudC5j
cHAiCiAjaW5jbHVkZSAiTWF0aE1MUm93RWxlbWVudC5jcHAiCiAjaW5jbHVkZSAiTWF0aE1MU2Ny
aXB0c0VsZW1lbnQuY3BwIgogI2luY2x1ZGUgIk1hdGhNTFNlbGVjdEVsZW1lbnQuY3BwIgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTFJvb3RFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxSb290RWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWQ3
MmE0MTNlNGFmY2M3ODllYTA4OGU2N2ViYWE4YTU3YjlhMWZhZQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxSb290RWxlbWVudC5jcHAKQEAgLTAsMCArMSw2
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJNYXRoTUxSb290RWxlbWVudC5oIgorCisjaWYgRU5BQkxFKE1BVEhNTCkKKworI2lu
Y2x1ZGUgIlJlbmRlck1hdGhNTFJvb3QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2lu
ZyBuYW1lc3BhY2UgTWF0aE1MTmFtZXM7CisKK3N0YXRpYyBSb290VHlwZSByb290VHlwZU9mKGNv
bnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUpCit7CisgICAgaWYgKHRhZ05hbWUgPT0gbXNxcnRU
YWcpCisgICAgICAgIHJldHVybiBSb290VHlwZTo6U3F1YXJlUm9vdDsKKyAgICBBU1NFUlQodGFn
TmFtZSA9PSBtcm9vdFRhZyk7CisgICAgcmV0dXJuIFJvb3RUeXBlOjpSb290V2l0aEluZGV4Owor
fQorCitpbmxpbmUgTWF0aE1MUm9vdEVsZW1lbnQ6Ok1hdGhNTFJvb3RFbGVtZW50KGNvbnN0IFF1
YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50JiBkb2N1bWVudCkKKyAgICA6IE1hdGhNTFJv
d0VsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpCisgICAgLCBtX3Jvb3RUeXBlKHJvb3RUeXBlT2Yo
dGFnTmFtZSkpCit7Cit9CisKK1JlZjxNYXRoTUxSb290RWxlbWVudD4gTWF0aE1MUm9vdEVsZW1l
bnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCYgZG9jdW1l
bnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTWF0aE1MUm9vdEVsZW1lbnQodGFnTmFt
ZSwgZG9jdW1lbnQpKTsKK30KKworUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IE1hdGhNTFJvb3RF
bGVtZW50OjpjcmVhdGVFbGVtZW50UmVuZGVyZXIoUmVuZGVyU3R5bGUmJiBzdHlsZSwgY29uc3Qg
UmVuZGVyVHJlZVBvc2l0aW9uJikKK3sKKyAgICBBU1NFUlQoaGFzVGFnTmFtZShtc3FydFRhZykg
fHwgaGFzVGFnTmFtZShtcm9vdFRhZykpOworICAgIHJldHVybiBjcmVhdGVSZW5kZXJlcjxSZW5k
ZXJNYXRoTUxSb290PigqdGhpcywgV1RGTW92ZShzdHlsZSkpOworfQorCit9CisKKyNlbmRpZiAv
LyBFTkFCTEUoTUFUSE1MKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhN
TFJvb3RFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0aE1MUm9vdEVsZW1lbnQu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi42OGIxOTI0ZTc4YjQ5ZGRlNDhjNWY0MjEzMzFmODg2OTg3NmQxN2FkCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTFJvb3RFbGVtZW50
LmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5M
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBFTkFCTEUoTUFUSE1MKQorCisjaW5jbHVkZSAiTWF0aE1MUm93RWxlbWVudC5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2VudW0gY2xhc3MgUm9vdFR5cGU7CisKK2NsYXNzIE1h
dGhNTFJvb3RFbGVtZW50IGZpbmFsIDogcHVibGljIE1hdGhNTFJvd0VsZW1lbnQgeworcHVibGlj
OgorICAgIHN0YXRpYyBSZWY8TWF0aE1MUm9vdEVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCYpOworICAgIFJvb3RUeXBlIHJvb3RUeXBlKCkgY29u
c3QgeyByZXR1cm4gbV9yb290VHlwZTsgfQorCitwcml2YXRlOgorICAgIE1hdGhNTFJvb3RFbGVt
ZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50Jik7CisgICAgUmVuZGVy
UHRyPFJlbmRlckVsZW1lbnQ+IGNyZWF0ZUVsZW1lbnRSZW5kZXJlcihSZW5kZXJTdHlsZSYmLCBj
b25zdCBSZW5kZXJUcmVlUG9zaXRpb24mKSBmaW5hbDsKKworICAgIGNvbnN0IFJvb3RUeXBlIG1f
cm9vdFR5cGU7Cit9OworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoTUFUSE1MKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTFJvd0VsZW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvbWF0aG1sL01hdGhNTFJvd0VsZW1lbnQuY3BwCmluZGV4IGEzMWY3MTUyM2YzMGU1YTQw
MzdmYjY0ODI0MzZjZjM5NDFkZDI5NWYuLmIyYzczOTBkNjkyNzJlYjI4Y2VkYjI4MmQ1NGE4NTEz
MGFjMTA3MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxSb3dFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0aE1MUm93RWxlbWVudC5jcHAK
QEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlICJNYXRoTUxPcGVyYXRvckVsZW1lbnQuaCIKICNp
bmNsdWRlICJSZW5kZXJNYXRoTUxGZW5jZWQuaCIKICNpbmNsdWRlICJSZW5kZXJNYXRoTUxNZW5j
bG9zZS5oIgotI2luY2x1ZGUgIlJlbmRlck1hdGhNTFJvb3QuaCIKICNpbmNsdWRlICJSZW5kZXJN
YXRoTUxSb3cuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjEsOSArNjAsNiBAQCB2b2lk
IE1hdGhNTFJvd0VsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZChjb25zdCBDaGlsZENoYW5nZSYgY2hh
bmdlKQogCiBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gTWF0aE1MUm93RWxlbWVudDo6Y3JlYXRl
RWxlbWVudFJlbmRlcmVyKFJlbmRlclN0eWxlJiYgc3R5bGUsIGNvbnN0IFJlbmRlclRyZWVQb3Np
dGlvbiYpCiB7Ci0gICAgaWYgKGhhc1RhZ05hbWUobXNxcnRUYWcpIHx8IGhhc1RhZ05hbWUobXJv
b3RUYWcpKQotICAgICAgICByZXR1cm4gY3JlYXRlUmVuZGVyZXI8UmVuZGVyTWF0aE1MUm9vdD4o
KnRoaXMsIFdURk1vdmUoc3R5bGUpKTsKLQogICAgIGlmIChoYXNUYWdOYW1lKG1mZW5jZWRUYWcp
KQogICAgICAgICByZXR1cm4gY3JlYXRlUmVuZGVyZXI8UmVuZGVyTWF0aE1MRmVuY2VkPigqdGhp
cywgV1RGTW92ZShzdHlsZSkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9tYXRobWwv
TWF0aE1MU2NyaXB0c0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTFNj
cmlwdHNFbGVtZW50LmNwcAppbmRleCAzOTNlZGMxMTI5MzAwOWVhYzVkMDQ0OTg1MWNkM2MyZDc2
Yzk4NDUzLi4yNGRiYzNhY2JmMWMzMGIyN2Y3M2FiMTk4MWEzOGU3MGUyZGE5MTY3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0aE1MU2NyaXB0c0VsZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxTY3JpcHRzRWxlbWVudC5jcHAKQEAgLTM1LDgg
KzM1LDI3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIE1hdGhNTE5h
bWVzOwogCitzdGF0aWMgU2NyaXB0VHlwZSBzY3JpcHRUeXBlT2YoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSkKK3sKKyAgICBpZiAodGFnTmFtZSA9PSBtc3ViVGFnKQorICAgICAgICByZXR1
cm4gU2NyaXB0VHlwZTo6U3ViOworICAgIGlmICh0YWdOYW1lID09IG1zdXBUYWcpCisgICAgICAg
IHJldHVybiBTY3JpcHRUeXBlOjpTdXBlcjsKKyAgICBpZiAodGFnTmFtZSA9PSBtc3Vic3VwVGFn
KQorICAgICAgICByZXR1cm4gU2NyaXB0VHlwZTo6U3ViU3VwOworICAgIGlmICh0YWdOYW1lID09
IG11bmRlclRhZykKKyAgICAgICAgcmV0dXJuIFNjcmlwdFR5cGU6OlVuZGVyOworICAgIGlmICh0
YWdOYW1lID09IG1vdmVyVGFnKQorICAgICAgICByZXR1cm4gU2NyaXB0VHlwZTo6T3ZlcjsKKyAg
ICBpZiAodGFnTmFtZSA9PSBtdW5kZXJvdmVyVGFnKQorICAgICAgICByZXR1cm4gU2NyaXB0VHlw
ZTo6VW5kZXJPdmVyOworICAgIEFTU0VSVCh0YWdOYW1lID09IG1tdWx0aXNjcmlwdHNUYWcpOwor
ICAgIHJldHVybiBTY3JpcHRUeXBlOjpNdWx0aXNjcmlwdHM7Cit9CisKIE1hdGhNTFNjcmlwdHNF
bGVtZW50OjpNYXRoTUxTY3JpcHRzRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1l
LCBEb2N1bWVudCYgZG9jdW1lbnQpCiAgICAgOiBNYXRoTUxQcmVzZW50YXRpb25FbGVtZW50KHRh
Z05hbWUsIGRvY3VtZW50KQorICAgICwgbV9zY3JpcHRUeXBlKHNjcmlwdFR5cGVPZih0YWdOYW1l
KSkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTFNjcmlw
dHNFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0aE1MU2NyaXB0c0VsZW1lbnQu
aAppbmRleCBiNGE2MDg5ZjBkODI5MDBiMGYzNGE1YzU1ZWRjZjQ1ZDdiNTU4MzM5Li42NWU0NTgx
MDc2MDUxMjYyOWNkOWQxMmFmZDMwODJlOWZhZDcxMjhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9tYXRobWwvTWF0aE1MU2NyaXB0c0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9t
YXRobWwvTWF0aE1MU2NyaXB0c0VsZW1lbnQuaApAQCAtMzEsOSArMzEsMTIgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCitlbnVtIGNsYXNzIFNjcmlwdFR5cGU7CisKIGNsYXNzIE1hdGhNTFNj
cmlwdHNFbGVtZW50IDogcHVibGljIE1hdGhNTFByZXNlbnRhdGlvbkVsZW1lbnQgewogcHVibGlj
OgogICAgIHN0YXRpYyBSZWY8TWF0aE1MU2NyaXB0c0VsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFs
aWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCYpOworICAgIFNjcmlwdFR5cGUgc2NyaXB0VHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NyaXB0VHlwZTsgfQogICAgIGNvbnN0IExlbmd0aCYgc3Vi
c2NyaXB0U2hpZnQoKTsKICAgICBjb25zdCBMZW5ndGgmIHN1cGVyc2NyaXB0U2hpZnQoKTsKIApA
QCAtNDQsNiArNDcsNyBAQCBwcml2YXRlOgogICAgIFJlbmRlclB0cjxSZW5kZXJFbGVtZW50PiBj
cmVhdGVFbGVtZW50UmVuZGVyZXIoUmVuZGVyU3R5bGUmJiwgY29uc3QgUmVuZGVyVHJlZVBvc2l0
aW9uJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJikgb3ZlcnJpZGU7CiAKKyAgICBjb25zdCBTY3JpcHRU
eXBlIG1fc2NyaXB0VHlwZTsKICAgICBzdGQ6Om9wdGlvbmFsPExlbmd0aD4gbV9zdWJzY3JpcHRT
aGlmdDsKICAgICBzdGQ6Om9wdGlvbmFsPExlbmd0aD4gbV9zdXBlcnNjcmlwdFNoaWZ0OwogfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL21hdGhtbC9tYXRodGFncy5pbiBiL1NvdXJjZS9X
ZWJDb3JlL21hdGhtbC9tYXRodGFncy5pbgppbmRleCA4ZDBmNzZjZDQzMTFlMWFmMTIzMTVjYWQ3
YzE0NGE4ZjFlOTg4NTJhLi5iY2Y4OTRiOGM5NDJkZjFmMjExNjIxNGE4MmIxMzE2MmZmM2JkOGIz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9tYXRobWwvbWF0aHRhZ3MuaW4KKysrIGIvU291
cmNlL1dlYkNvcmUvbWF0aG1sL21hdGh0YWdzLmluCkBAIC0xOCw4ICsxOCw4IEBAIG1zdHlsZSBp
bnRlcmZhY2VOYW1lPU1hdGhNTFJvd0VsZW1lbnQKIG1vdmVyIGludGVyZmFjZU5hbWU9TWF0aE1M
VW5kZXJPdmVyRWxlbWVudAogbXVuZGVyIGludGVyZmFjZU5hbWU9TWF0aE1MVW5kZXJPdmVyRWxl
bWVudAogbXVuZGVyb3ZlciBpbnRlcmZhY2VOYW1lPU1hdGhNTFVuZGVyT3ZlckVsZW1lbnQKLW1z
cXJ0IGludGVyZmFjZU5hbWU9TWF0aE1MUm93RWxlbWVudAotbXJvb3QgaW50ZXJmYWNlTmFtZT1N
YXRoTUxSb3dFbGVtZW50Cittc3FydCBpbnRlcmZhY2VOYW1lPU1hdGhNTFJvb3RFbGVtZW50Citt
cm9vdCBpbnRlcmZhY2VOYW1lPU1hdGhNTFJvb3RFbGVtZW50CiBtaSBpbnRlcmZhY2VOYW1lPU1h
dGhNTFRva2VuRWxlbWVudAogbW4gaW50ZXJmYWNlTmFtZT1NYXRoTUxUb2tlbkVsZW1lbnQKIG1v
IGludGVyZmFjZU5hbWU9TWF0aE1MT3BlcmF0b3JFbGVtZW50CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcAppbmRleCAwMjJiNDU2
NzBiZjdlMGM4ZmMxNmQwNmYzZGJlN2E0MzRhNDE4M2ZjLi5iOGIyMjg1YjU1MGRiYjllZWU5MGJj
YjZhOTcwZThjODliOWM3ZTEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
bWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHAKQEAgLTMzLDcgKzMzLDcgQEAKICNpbmNsdWRl
ICJGb250Q2FjaGUuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJN
YXRoTUxOYW1lcy5oIgotI2luY2x1ZGUgIk1hdGhNTFJvd0VsZW1lbnQuaCIKKyNpbmNsdWRlICJN
YXRoTUxSb290RWxlbWVudC5oIgogI2luY2x1ZGUgIlBhaW50SW5mby5oIgogI2luY2x1ZGUgIlJl
bmRlckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyTWF0aE1MTWVuY2xvc2UuaCIKQEAgLTQ2
LDI3ICs0NiwyNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFdURl9NQUtFX0lTT19BTExPQ0FU
RURfSU1QTChSZW5kZXJNYXRoTUxSb290KTsKIAotUmVuZGVyTWF0aE1MUm9vdDo6UmVuZGVyTWF0
aE1MUm9vdChNYXRoTUxSb3dFbGVtZW50JiBlbGVtZW50LCBSZW5kZXJTdHlsZSYmIHN0eWxlKQor
UmVuZGVyTWF0aE1MUm9vdDo6UmVuZGVyTWF0aE1MUm9vdChNYXRoTUxSb290RWxlbWVudCYgZWxl
bWVudCwgUmVuZGVyU3R5bGUmJiBzdHlsZSkKICAgICA6IFJlbmRlck1hdGhNTFJvdyhlbGVtZW50
LCBXVEZNb3ZlKHN0eWxlKSkKIHsKLSAgICAvLyBEZXRlcm1pbmUgd2hhdCBraW5kIG9mIGV4cHJl
c3Npb24gd2UgaGF2ZSBieSBlbGVtZW50IG5hbWUKLSAgICBpZiAoZWxlbWVudC5oYXNUYWdOYW1l
KE1hdGhNTE5hbWVzOjptc3FydFRhZykpCi0gICAgICAgIG1fa2luZCA9IFNxdWFyZVJvb3Q7Ci0g
ICAgZWxzZSBpZiAoZWxlbWVudC5oYXNUYWdOYW1lKE1hdGhNTE5hbWVzOjptcm9vdFRhZykpCi0g
ICAgICAgIG1fa2luZCA9IFJvb3RXaXRoSW5kZXg7Ci0KICAgICBtX3JhZGljYWxPcGVyYXRvci5z
ZXRPcGVyYXRvcihSZW5kZXJNYXRoTUxSb290OjpzdHlsZSgpLCBnUmFkaWNhbENoYXJhY3Rlciwg
TWF0aE9wZXJhdG9yOjpUeXBlOjpWZXJ0aWNhbE9wZXJhdG9yKTsKIH0KIAorUm9vdFR5cGUgUmVu
ZGVyTWF0aE1MUm9vdDo6cm9vdFR5cGUoKSBjb25zdAoreworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxNYXRoTUxSb290RWxlbWVudCY+KG5vZGVGb3JOb25Bbm9ueW1vdXMoKSkucm9vdFR5cGUoKTsK
K30KKwogYm9vbCBSZW5kZXJNYXRoTUxSb290Ojppc1ZhbGlkKCkgY29uc3QKIHsKICAgICAvLyBW
ZXJpZnkgd2hldGhlciB0aGUgbGlzdCBvZiBjaGlsZHJlbiBpcyB2YWxpZDoKICAgICAvLyA8bXNx
cnQ+IGNoaWxkMSBjaGlsZDIgLi4uIGNoaWxkTiA8L21zcXJ0PgogICAgIC8vIDxtcm9vdD4gYmFz
ZSBpbmRleCA8L21yb290PgotICAgIGlmIChtX2tpbmQgPT0gU3F1YXJlUm9vdCkKKyAgICBpZiAo
cm9vdFR5cGUoKSA9PSBSb290VHlwZTo6U3F1YXJlUm9vdCkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAKLSAgICBBU1NFUlQobV9raW5kID09IFJvb3RXaXRoSW5kZXgpOworICAgIEFTU0VSVChyb290
VHlwZSgpID09IFJvb3RUeXBlOjpSb290V2l0aEluZGV4KTsKICAgICBhdXRvKiBjaGlsZCA9IGZp
cnN0Q2hpbGRCb3goKTsKICAgICBpZiAoIWNoaWxkKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC03NywxNCArNzYsMTQgQEAgYm9vbCBSZW5kZXJNYXRoTUxSb290Ojppc1ZhbGlkKCkgY29uc3QK
IFJlbmRlckJveCYgUmVuZGVyTWF0aE1MUm9vdDo6Z2V0QmFzZSgpIGNvbnN0CiB7CiAgICAgQVNT
RVJUKGlzVmFsaWQoKSk7Ci0gICAgQVNTRVJUKG1fa2luZCA9PSBSb290V2l0aEluZGV4KTsKKyAg
ICBBU1NFUlQocm9vdFR5cGUoKSA9PSBSb290VHlwZTo6Um9vdFdpdGhJbmRleCk7CiAgICAgcmV0
dXJuICpmaXJzdENoaWxkQm94KCk7CiB9CiAKIFJlbmRlckJveCYgUmVuZGVyTWF0aE1MUm9vdDo6
Z2V0SW5kZXgoKSBjb25zdAogewogICAgIEFTU0VSVChpc1ZhbGlkKCkpOwotICAgIEFTU0VSVCht
X2tpbmQgPT0gUm9vdFdpdGhJbmRleCk7CisgICAgQVNTRVJUKHJvb3RUeXBlKCkgPT0gUm9vdFR5
cGU6OlJvb3RXaXRoSW5kZXgpOwogICAgIHJldHVybiAqZmlyc3RDaGlsZEJveCgpLT5uZXh0U2li
bGluZ0JveCgpOwogfQogCkBAIC05OSw3ICs5OCw3IEBAIFJlbmRlck1hdGhNTFJvb3Q6Okhvcml6
b250YWxQYXJhbWV0ZXJzIFJlbmRlck1hdGhNTFJvb3Q6Omhvcml6b250YWxQYXJhbWV0ZXJzKCkK
ICAgICBIb3Jpem9udGFsUGFyYW1ldGVycyBwYXJhbWV0ZXJzOwogCiAgICAgLy8gU3F1YXJlIHJv
b3RzIGRvIG5vdCByZXF1aXJlIGhvcml6b250YWwgcGFyYW1ldGVycy4KLSAgICBpZiAobV9raW5k
ID09IFNxdWFyZVJvb3QpCisgICAgaWYgKHJvb3RUeXBlKCkgPT0gUm9vdFR5cGU6OlNxdWFyZVJv
b3QpCiAgICAgICAgIHJldHVybiBwYXJhbWV0ZXJzOwogCiAgICAgLy8gV2UgdHJ5IGFuZCByZWFk
IGNvbnN0YW50cyB0byBkcmF3IHRoZSByYWRpY2FsIGZyb20gdGhlIE9wZW5UeXBlIE1BVEggYW5k
IHVzZSBmYWxsYmFjayB2YWx1ZXMgb3RoZXJ3aXNlLgpAQCAtMTI1LDcgKzEyNCw3IEBAIFJlbmRl
ck1hdGhNTFJvb3Q6OlZlcnRpY2FsUGFyYW1ldGVycyBSZW5kZXJNYXRoTUxSb290Ojp2ZXJ0aWNh
bFBhcmFtZXRlcnMoKQogICAgICAgICBwYXJhbWV0ZXJzLnJ1bGVUaGlja25lc3MgPSBtYXRoRGF0
YS0+Z2V0TWF0aENvbnN0YW50KHByaW1hcnlGb250LCBPcGVuVHlwZU1hdGhEYXRhOjpSYWRpY2Fs
UnVsZVRoaWNrbmVzcyk7CiAgICAgICAgIHBhcmFtZXRlcnMudmVydGljYWxHYXAgPSBtYXRoRGF0
YS0+Z2V0TWF0aENvbnN0YW50KHByaW1hcnlGb250LCBtYXRoTUxTdHlsZSgpLmRpc3BsYXlTdHls
ZSgpID8gT3BlblR5cGVNYXRoRGF0YTo6UmFkaWNhbERpc3BsYXlTdHlsZVZlcnRpY2FsR2FwIDog
T3BlblR5cGVNYXRoRGF0YTo6UmFkaWNhbFZlcnRpY2FsR2FwKTsKICAgICAgICAgcGFyYW1ldGVy
cy5leHRyYUFzY2VuZGVyID0gbWF0aERhdGEtPmdldE1hdGhDb25zdGFudChwcmltYXJ5Rm9udCwg
T3BlblR5cGVNYXRoRGF0YTo6UmFkaWNhbEV4dHJhQXNjZW5kZXIpOwotICAgICAgICBpZiAobV9r
aW5kID09IFJvb3RXaXRoSW5kZXgpCisgICAgICAgIGlmIChyb290VHlwZSgpID09IFJvb3RUeXBl
OjpSb290V2l0aEluZGV4KQogICAgICAgICAgICAgcGFyYW1ldGVycy5kZWdyZWVCb3R0b21SYWlz
ZVBlcmNlbnQgPSBtYXRoRGF0YS0+Z2V0TWF0aENvbnN0YW50KHByaW1hcnlGb250LCBPcGVuVHlw
ZU1hdGhEYXRhOjpSYWRpY2FsRGVncmVlQm90dG9tUmFpc2VQZXJjZW50KTsKICAgICB9IGVsc2Ug
ewogICAgICAgICAvLyBSYWRpY2FsVmVydGljYWxHYXA6IFN1Z2dlc3RlZCB2YWx1ZSBpcyA1LzQg
ZGVmYXVsdCBydWxlIHRoaWNrbmVzcy4KQEAgLTEzOSw3ICsxMzgsNyBAQCBSZW5kZXJNYXRoTUxS
b290OjpWZXJ0aWNhbFBhcmFtZXRlcnMgUmVuZGVyTWF0aE1MUm9vdDo6dmVydGljYWxQYXJhbWV0
ZXJzKCkKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcGFyYW1ldGVycy52ZXJ0aWNhbEdhcCA9
IDUgKiBwYXJhbWV0ZXJzLnJ1bGVUaGlja25lc3MgLyA0OwogCi0gICAgICAgIGlmIChtX2tpbmQg
PT0gUm9vdFdpdGhJbmRleCkgeworICAgICAgICBpZiAocm9vdFR5cGUoKSA9PSBSb290VHlwZTo6
Um9vdFdpdGhJbmRleCkgewogICAgICAgICAgICAgcGFyYW1ldGVycy5leHRyYUFzY2VuZGVyID0g
cGFyYW1ldGVycy5ydWxlVGhpY2tuZXNzOwogICAgICAgICAgICAgcGFyYW1ldGVycy5kZWdyZWVC
b3R0b21SYWlzZVBlcmNlbnQgPSAwLjZmOwogICAgICAgICB9CkBAIC0xNTgsMTMgKzE1NywxMyBA
QCB2b2lkIFJlbmRlck1hdGhNTFJvb3Q6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkK
ICAgICB9CiAKICAgICBMYXlvdXRVbml0IHByZWZlcnJlZFdpZHRoID0gMDsKLSAgICBpZiAobV9r
aW5kID09IFNxdWFyZVJvb3QpIHsKKyAgICBpZiAocm9vdFR5cGUoKSA9PSBSb290VHlwZTo6U3F1
YXJlUm9vdCkgewogICAgICAgICBwcmVmZXJyZWRXaWR0aCArPSBtX3JhZGljYWxPcGVyYXRvci5t
YXhQcmVmZXJyZWRXaWR0aCgpOwogICAgICAgICBzZXRQcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGly
dHkodHJ1ZSk7CiAgICAgICAgIFJlbmRlck1hdGhNTFJvdzo6Y29tcHV0ZVByZWZlcnJlZExvZ2lj
YWxXaWR0aHMoKTsKICAgICAgICAgcHJlZmVycmVkV2lkdGggKz0gbV9tYXhQcmVmZXJyZWRMb2dp
Y2FsV2lkdGg7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBSb290V2l0
aEluZGV4KTsKKyAgICAgICAgQVNTRVJUKHJvb3RUeXBlKCkgPT0gUm9vdFR5cGU6OlJvb3RXaXRo
SW5kZXgpOwogICAgICAgICBhdXRvIGhvcml6b250YWwgPSBob3Jpem9udGFsUGFyYW1ldGVycygp
OwogICAgICAgICBwcmVmZXJyZWRXaWR0aCArPSBob3Jpem9udGFsLmtlcm5CZWZvcmVEZWdyZWU7
CiAgICAgICAgIHByZWZlcnJlZFdpZHRoICs9IGdldEluZGV4KCkubWF4UHJlZmVycmVkTG9naWNh
bFdpZHRoKCk7CkBAIC0xOTYsNyArMTk1LDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxSb290OjpsYXlv
dXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQpCiAgICAgLy8gTm90ZTog
UGVyIHRoZSBNYXRoTUwgc3BlY2lmaWNhdGlvbiwgdGhlIGNoaWxkcmVuIG9mIDxtc3FydD4gYXJl
IHdyYXBwZWQgaW4gYW4gaW5mZXJyZWQgPG1yb3c+LCB3aGljaCBpcyB0aGUgZGVzaXJlZCBiYXNl
LgogICAgIExheW91dFVuaXQgYmFzZUFzY2VudCwgYmFzZURlc2NlbnQ7CiAgICAgcmVjb21wdXRl
TG9naWNhbFdpZHRoKCk7Ci0gICAgaWYgKG1fa2luZCA9PSBTcXVhcmVSb290KSB7CisgICAgaWYg
KHJvb3RUeXBlKCkgPT0gUm9vdFR5cGU6OlNxdWFyZVJvb3QpIHsKICAgICAgICAgYmFzZUFzY2Vu
dCA9IGJhc2VEZXNjZW50OwogICAgICAgICBSZW5kZXJNYXRoTUxSb3c6OmNvbXB1dGVMaW5lVmVy
dGljYWxTdHJldGNoKGJhc2VBc2NlbnQsIGJhc2VEZXNjZW50KTsKICAgICAgICAgUmVuZGVyTWF0
aE1MUm93OjpsYXlvdXRSb3dJdGVtcyhiYXNlQXNjZW50LCBiYXNlRGVzY2VudCk7CkBAIC0yMjMs
MTYgKzIyMiwxNiBAQCB2b2lkIFJlbmRlck1hdGhNTFJvb3Q6OmxheW91dEJsb2NrKGJvb2wgcmVs
YXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCkKICAgICBMYXlvdXRVbml0IGFzY2VudCA9IHJhZGlj
YWxBc2NlbnQ7CiAKICAgICAvLyBXZSBzZXQgdGhlIGxvZ2ljYWwgd2lkdGguCi0gICAgaWYgKG1f
a2luZCA9PSBTcXVhcmVSb290KQorICAgIGlmIChyb290VHlwZSgpID09IFJvb3RUeXBlOjpTcXVh
cmVSb290KQogICAgICAgICBzZXRMb2dpY2FsV2lkdGgobV9yYWRpY2FsT3BlcmF0b3Iud2lkdGgo
KSArIG1fYmFzZVdpZHRoKTsKICAgICBlbHNlIHsKLSAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBS
b290V2l0aEluZGV4KTsKKyAgICAgICAgQVNTRVJUKHJvb3RUeXBlKCkgPT0gUm9vdFR5cGU6OlJv
b3RXaXRoSW5kZXgpOwogICAgICAgICBzZXRMb2dpY2FsV2lkdGgoaG9yaXpvbnRhbC5rZXJuQmVm
b3JlRGVncmVlICsgZ2V0SW5kZXgoKS5sb2dpY2FsV2lkdGgoKSArIGhvcml6b250YWwua2VybkFm
dGVyRGVncmVlICsgbV9yYWRpY2FsT3BlcmF0b3Iud2lkdGgoKSArIG1fYmFzZVdpZHRoKTsKICAg
ICB9CiAKICAgICAvLyBGb3IgPG1yb290Piwgd2UgdXBkYXRlIHRoZSBtZXRyaWNzIHRvIHRha2Ug
aW50byBhY2NvdW50IHRoZSBpbmRleC4KICAgICBMYXlvdXRVbml0IGluZGV4QXNjZW50LCBpbmRl
eERlc2NlbnQ7Ci0gICAgaWYgKG1fa2luZCA9PSBSb290V2l0aEluZGV4KSB7CisgICAgaWYgKHJv
b3RUeXBlKCkgPT0gUm9vdFR5cGU6OlJvb3RXaXRoSW5kZXgpIHsKICAgICAgICAgaW5kZXhBc2Nl
bnQgPSBhc2NlbnRGb3JDaGlsZChnZXRJbmRleCgpKTsKICAgICAgICAgaW5kZXhEZXNjZW50ID0g
Z2V0SW5kZXgoKS5sb2dpY2FsSGVpZ2h0KCkgLSBpbmRleEFzY2VudDsKICAgICAgICAgYXNjZW50
ID0gc3RkOjptYXg8TGF5b3V0VW5pdD4ocmFkaWNhbEFzY2VudCwgaW5kZXhCb3R0b21SYWlzZSAr
IGluZGV4RGVzY2VudCArIGluZGV4QXNjZW50IC0gZGVzY2VudCk7CkBAIC0yNDEsMTQgKzI0MCwx
NCBAQCB2b2lkIFJlbmRlck1hdGhNTFJvb3Q6OmxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGls
ZHJlbiwgTGF5b3V0VW5pdCkKICAgICAvLyBXZSBzZXQgdGhlIGZpbmFsIHBvc2l0aW9uIG9mIGNo
aWxkcmVuLgogICAgIG1fcmFkaWNhbE9wZXJhdG9yVG9wID0gYXNjZW50IC0gcmFkaWNhbEFzY2Vu
dCArIHZlcnRpY2FsLmV4dHJhQXNjZW5kZXI7CiAgICAgTGF5b3V0VW5pdCBob3Jpem9udGFsT2Zm
c2V0ID0gbV9yYWRpY2FsT3BlcmF0b3Iud2lkdGgoKTsKLSAgICBpZiAobV9raW5kID09IFJvb3RX
aXRoSW5kZXgpCisgICAgaWYgKHJvb3RUeXBlKCkgPT0gUm9vdFR5cGU6OlJvb3RXaXRoSW5kZXgp
CiAgICAgICAgIGhvcml6b250YWxPZmZzZXQgKz0gaG9yaXpvbnRhbC5rZXJuQmVmb3JlRGVncmVl
ICsgZ2V0SW5kZXgoKS5sb2dpY2FsV2lkdGgoKSArIGhvcml6b250YWwua2VybkFmdGVyRGVncmVl
OwogICAgIExheW91dFBvaW50IGJhc2VMb2NhdGlvbihtaXJyb3JJZk5lZWRlZChob3Jpem9udGFs
T2Zmc2V0LCBtX2Jhc2VXaWR0aCksIGFzY2VudCAtIGJhc2VBc2NlbnQpOwotICAgIGlmIChtX2tp
bmQgPT0gU3F1YXJlUm9vdCkgeworICAgIGlmIChyb290VHlwZSgpID09IFJvb3RUeXBlOjpTcXVh
cmVSb290KSB7CiAgICAgICAgIGZvciAoYXV0byogY2hpbGQgPSBmaXJzdENoaWxkQm94KCk7IGNo
aWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZ0JveCgpKQogICAgICAgICAgICAgY2hpbGQt
PnNldExvY2F0aW9uKGNoaWxkLT5sb2NhdGlvbigpICsgYmFzZUxvY2F0aW9uKTsKICAgICB9IGVs
c2UgewotICAgICAgICBBU1NFUlQobV9raW5kID09IFJvb3RXaXRoSW5kZXgpOworICAgICAgICBB
U1NFUlQocm9vdFR5cGUoKSA9PSBSb290VHlwZTo6Um9vdFdpdGhJbmRleCk7CiAgICAgICAgIGdl
dEJhc2UoKS5zZXRMb2NhdGlvbihiYXNlTG9jYXRpb24pOwogICAgICAgICBMYXlvdXRQb2ludCBp
bmRleExvY2F0aW9uKG1pcnJvcklmTmVlZGVkKGhvcml6b250YWwua2VybkJlZm9yZURlZ3JlZSwg
Z2V0SW5kZXgoKSksIGFzY2VudCArIGRlc2NlbnQgLSBpbmRleEJvdHRvbVJhaXNlIC0gaW5kZXhE
ZXNjZW50IC0gaW5kZXhBc2NlbnQpOwogICAgICAgICBnZXRJbmRleCgpLnNldExvY2F0aW9uKGlu
ZGV4TG9jYXRpb24pOwpAQCAtMjcxLDcgKzI3MCw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MUm9vdDo6
cGFpbnQoUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiAg
ICAgLy8gV2UgZHJhdyB0aGUgcmFkaWNhbCBvcGVyYXRvci4KICAgICBMYXlvdXRQb2ludCByYWRp
Y2FsT3BlcmF0b3JUb3BMZWZ0ID0gcGFpbnRPZmZzZXQgKyBsb2NhdGlvbigpOwogICAgIExheW91
dFVuaXQgaG9yaXpvbnRhbE9mZnNldCA9IDA7Ci0gICAgaWYgKG1fa2luZCA9PSBSb290V2l0aElu
ZGV4KSB7CisgICAgaWYgKHJvb3RUeXBlKCkgPT0gUm9vdFR5cGU6OlJvb3RXaXRoSW5kZXgpIHsK
ICAgICAgICAgYXV0byBob3Jpem9udGFsID0gaG9yaXpvbnRhbFBhcmFtZXRlcnMoKTsKICAgICAg
ICAgaG9yaXpvbnRhbE9mZnNldCA9IGhvcml6b250YWwua2VybkJlZm9yZURlZ3JlZSArIGdldElu
ZGV4KCkubG9naWNhbFdpZHRoKCkgKyBob3Jpem9udGFsLmtlcm5BZnRlckRlZ3JlZTsKICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhN
TFJvb3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm9v
dC5oCmluZGV4IDg5ZmIxNjFlZDZjMWViMjhiMGYwYTEyNmM4YzJhMDVlMWMzMTNhNzcuLjE2YjA2
NDE0YWIzODIxOWY2MGY1ZmFiYmIxOGEzNDVlZWM2YWI1MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5oCkBAIC0zMywxMyArMzMs
MTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBNYXRoTUxSb3dFbGVtZW50Owor
Y2xhc3MgTWF0aE1MUm9vdEVsZW1lbnQ7CitlbnVtIGNsYXNzIFJvb3RUeXBlIHsgU3F1YXJlUm9v
dCwgUm9vdFdpdGhJbmRleCB9OwogCiAvLyBSZW5kZXIgYmFzZV4oMS9pbmRleCksIG9yIHNxcnQo
YmFzZSkgdXNpbmcgcmFkaWNhbCBub3RhdGlvbi4KIGNsYXNzIFJlbmRlck1hdGhNTFJvb3QgZmlu
YWwgOiBwdWJsaWMgUmVuZGVyTWF0aE1MUm93IHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVE
KFJlbmRlck1hdGhNTFJvb3QpOwogcHVibGljOgotICAgIFJlbmRlck1hdGhNTFJvb3QoTWF0aE1M
Um93RWxlbWVudCYsIFJlbmRlclN0eWxlJiYpOworICAgIFJlbmRlck1hdGhNTFJvb3QoTWF0aE1M
Um9vdEVsZW1lbnQmLCBSZW5kZXJTdHlsZSYmKTsKICAgICB2b2lkIHVwZGF0ZVN0eWxlKCk7CiAK
IHByaXZhdGU6CkBAIC00OCw2ICs0OSw3IEBAIHByaXZhdGU6CiAgICAgUmVuZGVyQm94JiBnZXRJ
bmRleCgpIGNvbnN0OwogICAgIGJvb2wgaXNSZW5kZXJNYXRoTUxSb290KCkgY29uc3QgZmluYWwg
eyByZXR1cm4gdHJ1ZTsgfQogICAgIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCBmaW5h
bCB7IHJldHVybiAiUmVuZGVyTWF0aE1MUm9vdCI7IH0KKyAgICBSb290VHlwZSByb290VHlwZSgp
IGNvbnN0OwogCiAgICAgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0
IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkgZmluYWw7CiAKQEAgLTcyLDkgKzc0LDcgQEAgcHJpdmF0
ZToKICAgICBMYXlvdXRVbml0IG1fcmFkaWNhbE9wZXJhdG9yVG9wOwogICAgIExheW91dFVuaXQg
bV9iYXNlV2lkdGg7CiAKLSAgICBlbnVtIFJvb3RUeXBlIHsgU3F1YXJlUm9vdCwgUm9vdFdpdGhJ
bmRleCB9OwotICAgIFJvb3RUeXBlIG1fa2luZDsKLSAgICBib29sIGlzUmVuZGVyTWF0aE1MU3F1
YXJlUm9vdCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fa2luZCA9PSBTcXVhcmVSb290OyB9Cisg
ICAgYm9vbCBpc1JlbmRlck1hdGhNTFNxdWFyZVJvb3QoKSBjb25zdCBmaW5hbCB7IHJldHVybiBy
b290VHlwZSgpID09IFJvb3RUeXBlOjpTcXVhcmVSb290OyB9CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1Jl
bmRlck1hdGhNTFNjcmlwdHMuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9S
ZW5kZXJNYXRoTUxTY3JpcHRzLmNwcAppbmRleCA1OTA2NThmODU4YWMxNjNhNjRiMmM4M2U2OTM3
MjEyODY5ZDM4Mjg0Li4zZTJhNTU5ZDAwNTQ4ODYyMGQxOWE0MzFkYmIwMzU4M2U1OGMwZWE3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFNj
cmlwdHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0
aE1MU2NyaXB0cy5jcHAKQEAgLTQ3LDIzICs0Nyw2IEBAIHN0YXRpYyBib29sIGlzUHJlc2NyaXB0
RGVsaW1pdGVyKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0KQogUmVuZGVyTWF0aE1M
U2NyaXB0czo6UmVuZGVyTWF0aE1MU2NyaXB0cyhNYXRoTUxTY3JpcHRzRWxlbWVudCYgZWxlbWVu
dCwgUmVuZGVyU3R5bGUmJiBzdHlsZSkKICAgICA6IFJlbmRlck1hdGhNTEJsb2NrKGVsZW1lbnQs
IFdURk1vdmUoc3R5bGUpKQogewotICAgIC8vIERldGVybWluZSB3aGF0IGtpbmQgb2Ygc3ViL3N1
cCBleHByZXNzaW9uIHdlIGhhdmUgYnkgZWxlbWVudCBuYW1lCi0gICAgaWYgKGVsZW1lbnQuaGFz
VGFnTmFtZShNYXRoTUxOYW1lczo6bXN1YlRhZykpCi0gICAgICAgIG1fc2NyaXB0VHlwZSA9IFN1
YjsKLSAgICBlbHNlIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUoTWF0aE1MTmFtZXM6Om1zdXBUYWcp
KQotICAgICAgICBtX3NjcmlwdFR5cGUgPSBTdXBlcjsKLSAgICBlbHNlIGlmIChlbGVtZW50Lmhh
c1RhZ05hbWUoTWF0aE1MTmFtZXM6Om1zdWJzdXBUYWcpKQotICAgICAgICBtX3NjcmlwdFR5cGUg
PSBTdWJTdXA7Ci0gICAgZWxzZSBpZiAoZWxlbWVudC5oYXNUYWdOYW1lKE1hdGhNTE5hbWVzOjpt
dW5kZXJUYWcpKQotICAgICAgICBtX3NjcmlwdFR5cGUgPSBVbmRlcjsKLSAgICBlbHNlIGlmIChl
bGVtZW50Lmhhc1RhZ05hbWUoTWF0aE1MTmFtZXM6Om1vdmVyVGFnKSkKLSAgICAgICAgbV9zY3Jp
cHRUeXBlID0gT3ZlcjsKLSAgICBlbHNlIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUoTWF0aE1MTmFt
ZXM6Om11bmRlcm92ZXJUYWcpKQotICAgICAgICBtX3NjcmlwdFR5cGUgPSBVbmRlck92ZXI7Ci0g
ICAgZWxzZSB7Ci0gICAgICAgIEFTU0VSVChlbGVtZW50Lmhhc1RhZ05hbWUoTWF0aE1MTmFtZXM6
Om1tdWx0aXNjcmlwdHNUYWcpKTsKLSAgICAgICAgbV9zY3JpcHRUeXBlID0gTXVsdGlzY3JpcHRz
OwotICAgIH0KIH0KIAogTWF0aE1MU2NyaXB0c0VsZW1lbnQmIFJlbmRlck1hdGhNTFNjcmlwdHM6
OmVsZW1lbnQoKSBjb25zdApAQCAtNzEsNiArNTQsMTEgQEAgTWF0aE1MU2NyaXB0c0VsZW1lbnQm
IFJlbmRlck1hdGhNTFNjcmlwdHM6OmVsZW1lbnQoKSBjb25zdAogICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxNYXRoTUxTY3JpcHRzRWxlbWVudCY+KG5vZGVGb3JOb25Bbm9ueW1vdXMoKSk7CiB9CiAK
K1NjcmlwdFR5cGUgUmVuZGVyTWF0aE1MU2NyaXB0czo6c2NyaXB0VHlwZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGVsZW1lbnQoKS5zY3JpcHRUeXBlKCk7Cit9CisKIFJlbmRlck1hdGhNTE9wZXJh
dG9yKiBSZW5kZXJNYXRoTUxTY3JpcHRzOjp1bmVtYmVsbGlzaGVkT3BlcmF0b3IoKQogewogICAg
IGF1dG8gYmFzZSA9IGZpcnN0Q2hpbGRCb3goKTsKQEAgLTkzLDExICs4MSwxMSBAQCBzdGQ6Om9w
dGlvbmFsPFJlbmRlck1hdGhNTFNjcmlwdHM6OlJlZmVyZW5jZUNoaWxkcmVuPiBSZW5kZXJNYXRo
TUxTY3JpcHRzOjp2YWxpZAogICAgIHJlZmVyZW5jZS5maXJzdFByZVNjcmlwdCA9IG51bGxwdHI7
CiAgICAgcmVmZXJlbmNlLnByZXNjcmlwdERlbGltaXRlciA9IG51bGxwdHI7CiAKLSAgICBzd2l0
Y2ggKG1fc2NyaXB0VHlwZSkgewotICAgIGNhc2UgU3ViOgotICAgIGNhc2UgU3VwZXI6Ci0gICAg
Y2FzZSBVbmRlcjoKLSAgICBjYXNlIE92ZXI6IHsKKyAgICBzd2l0Y2ggKHNjcmlwdFR5cGUoKSkg
eworICAgIGNhc2UgU2NyaXB0VHlwZTo6U3ViOgorICAgIGNhc2UgU2NyaXB0VHlwZTo6U3VwZXI6
CisgICAgY2FzZSBTY3JpcHRUeXBlOjpVbmRlcjoKKyAgICBjYXNlIFNjcmlwdFR5cGU6Ok92ZXI6
IHsKICAgICAgICAgLy8gVGhlc2UgZWxlbWVudHMgbXVzdCBoYXZlIGV4YWN0bHkgdHdvIGNoaWxk
cmVuLgogICAgICAgICAvLyBUaGUgc2Vjb25kIGNoaWxkIGlzIGEgcG9zdHNjcmlwdCBhbmQgdGhl
cmUgYXJlIG5vIHByZXNjcmlwdHMuCiAgICAgICAgIC8vIDxtc3ViPiBiYXNlIHN1YnNjcmlwdCA8
L21zdWI+CkBAIC0xMTAsOCArOTgsOCBAQCBzdGQ6Om9wdGlvbmFsPFJlbmRlck1hdGhNTFNjcmlw
dHM6OlJlZmVyZW5jZUNoaWxkcmVuPiBSZW5kZXJNYXRoTUxTY3JpcHRzOjp2YWxpZAogICAgICAg
ICByZWZlcmVuY2UuZmlyc3RQb3N0U2NyaXB0ID0gc2NyaXB0OwogICAgICAgICByZXR1cm4gcmVm
ZXJlbmNlOwogICAgIH0KLSAgICBjYXNlIFN1YlN1cDoKLSAgICBjYXNlIFVuZGVyT3Zlcjogewor
ICAgIGNhc2UgU2NyaXB0VHlwZTo6U3ViU3VwOgorICAgIGNhc2UgU2NyaXB0VHlwZTo6VW5kZXJP
dmVyOiB7CiAgICAgICAgIC8vIFRoZXNlIGVsZW1lbnRzIG11c3QgaGF2ZSBleGFjdGx5IHRocmVl
IGNoaWxkcmVuLgogICAgICAgICAvLyBUaGUgc2Vjb25kIGFuZCB0aGlyZCBjaGlsZHJlbiBhcmUg
cG9zdHNjcmlwdHMgYW5kIHRoZXJlIGFyZSBubyBwcmVzY3JpcHRzLgogICAgICAgICAvLyA8bXN1
YnN1cD4gYmFzZSBzdWJzY3JpcHQgc3VwZXJzY3JpcHQgPC9tc3Vic3VwPgpAQCAtMTI1LDcgKzEx
Myw3IEBAIHN0ZDo6b3B0aW9uYWw8UmVuZGVyTWF0aE1MU2NyaXB0czo6UmVmZXJlbmNlQ2hpbGRy
ZW4+IFJlbmRlck1hdGhNTFNjcmlwdHM6OnZhbGlkCiAgICAgICAgIHJlZmVyZW5jZS5maXJzdFBv
c3RTY3JpcHQgPSBzdWJTY3JpcHQ7CiAgICAgICAgIHJldHVybiByZWZlcmVuY2U7CiAgICAgfQot
ICAgIGNhc2UgTXVsdGlzY3JpcHRzOiB7CisgICAgY2FzZSBTY3JpcHRUeXBlOjpNdWx0aXNjcmlw
dHM6IHsKICAgICAgICAgLy8gVGhpcyBlbGVtZW50IGFjY2VwdHMgdGhlIGZvbGxvd2luZyBzeW50
YXg6CiAgICAgICAgIC8vCiAgICAgICAgIC8vIDxtbXVsdGlzY3JpcHRzPgpAQCAtMjAwLDIwICsx
ODgsMjAgQEAgdm9pZCBSZW5kZXJNYXRoTUxTY3JpcHRzOjpjb21wdXRlUHJlZmVycmVkTG9naWNh
bFdpZHRocygpCiAgICAgTGF5b3V0VW5pdCBiYXNlSXRhbGljQ29ycmVjdGlvbiA9IHN0ZDo6bWlu
KHJlZmVyZW5jZS5iYXNlLT5tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgoKSwgaXRhbGljQ29ycmVj
dGlvbihyZWZlcmVuY2UpKTsKICAgICBMYXlvdXRVbml0IHNwYWNlID0gc3BhY2VBZnRlclNjcmlw
dCgpOwogCi0gICAgc3dpdGNoIChtX3NjcmlwdFR5cGUpIHsKLSAgICBjYXNlIFN1YjoKLSAgICBj
YXNlIFVuZGVyOgorICAgIHN3aXRjaCAoc2NyaXB0VHlwZSgpKSB7CisgICAgY2FzZSBTY3JpcHRU
eXBlOjpTdWI6CisgICAgY2FzZSBTY3JpcHRUeXBlOjpVbmRlcjoKICAgICAgICAgbV9tYXhQcmVm
ZXJyZWRMb2dpY2FsV2lkdGggKz0gcmVmZXJlbmNlLmJhc2UtPm1heFByZWZlcnJlZExvZ2ljYWxX
aWR0aCgpOwogICAgICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCArPSBzdGQ6Om1heChM
YXlvdXRVbml0KDApLCByZWZlcmVuY2UuZmlyc3RQb3N0U2NyaXB0LT5tYXhQcmVmZXJyZWRMb2dp
Y2FsV2lkdGgoKSAtIGJhc2VJdGFsaWNDb3JyZWN0aW9uICsgc3BhY2UpOwogICAgICAgICBicmVh
azsKLSAgICBjYXNlIFN1cGVyOgotICAgIGNhc2UgT3ZlcjoKKyAgICBjYXNlIFNjcmlwdFR5cGU6
OlN1cGVyOgorICAgIGNhc2UgU2NyaXB0VHlwZTo6T3ZlcjoKICAgICAgICAgbV9tYXhQcmVmZXJy
ZWRMb2dpY2FsV2lkdGggKz0gcmVmZXJlbmNlLmJhc2UtPm1heFByZWZlcnJlZExvZ2ljYWxXaWR0
aCgpOwogICAgICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCArPSBzdGQ6Om1heChMYXlv
dXRVbml0KDApLCByZWZlcmVuY2UuZmlyc3RQb3N0U2NyaXB0LT5tYXhQcmVmZXJyZWRMb2dpY2Fs
V2lkdGgoKSArIHNwYWNlKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTdWJTdXA6Ci0gICAg
Y2FzZSBVbmRlck92ZXI6Ci0gICAgY2FzZSBNdWx0aXNjcmlwdHM6IHsKKyAgICBjYXNlIFNjcmlw
dFR5cGU6OlN1YlN1cDoKKyAgICBjYXNlIFNjcmlwdFR5cGU6OlVuZGVyT3ZlcjoKKyAgICBjYXNl
IFNjcmlwdFR5cGU6Ok11bHRpc2NyaXB0czogewogICAgICAgICBhdXRvIHN1YlNjcmlwdCA9IHJl
ZmVyZW5jZS5maXJzdFByZVNjcmlwdDsKICAgICAgICAgd2hpbGUgKHN1YlNjcmlwdCkgewogICAg
ICAgICAgICAgYXV0byBzdXBTY3JpcHQgPSBzdWJTY3JpcHQtPm5leHRTaWJsaW5nQm94KCk7CkBA
IC0yNzMsNyArMjYxLDcgQEAgUmVuZGVyTWF0aE1MU2NyaXB0czo6VmVydGljYWxNZXRyaWNzIFJl
bmRlck1hdGhNTFNjcmlwdHM6OnZlcnRpY2FsTWV0cmljcyhjb25zdAogCiAgICAgTGF5b3V0VW5p
dCBiYXNlQXNjZW50ID0gYXNjZW50Rm9yQ2hpbGQoKnJlZmVyZW5jZS5iYXNlKTsKICAgICBMYXlv
dXRVbml0IGJhc2VEZXNjZW50ID0gcmVmZXJlbmNlLmJhc2UtPmxvZ2ljYWxIZWlnaHQoKSAtIGJh
c2VBc2NlbnQ7Ci0gICAgaWYgKG1fc2NyaXB0VHlwZSA9PSBTdWIgfHwgbV9zY3JpcHRUeXBlID09
IFN1YlN1cCB8fCBtX3NjcmlwdFR5cGUgPT0gTXVsdGlzY3JpcHRzIHx8IG1fc2NyaXB0VHlwZSA9
PSBVbmRlciB8fCBtX3NjcmlwdFR5cGUgPT0gVW5kZXJPdmVyKSB7CisgICAgaWYgKHNjcmlwdFR5
cGUoKSA9PSBTY3JpcHRUeXBlOjpTdWIgfHwgc2NyaXB0VHlwZSgpID09IFNjcmlwdFR5cGU6OlN1
YlN1cCB8fCBzY3JpcHRUeXBlKCkgPT0gU2NyaXB0VHlwZTo6TXVsdGlzY3JpcHRzIHx8IHNjcmlw
dFR5cGUoKSA9PSBTY3JpcHRUeXBlOjpVbmRlciB8fCBzY3JpcHRUeXBlKCkgPT0gU2NyaXB0VHlw
ZTo6VW5kZXJPdmVyKSB7CiAgICAgICAgIG1ldHJpY3Muc3ViU2hpZnQgPSBzdGQ6Om1heChwYXJh
bWV0ZXJzLnN1YnNjcmlwdFNoaWZ0RG93biwgYmFzZURlc2NlbnQgKyBwYXJhbWV0ZXJzLnN1YnNj
cmlwdEJhc2VsaW5lRHJvcE1pbik7CiAgICAgICAgIGlmICghaXNSZW5kZXJNYXRoTUxVbmRlck92
ZXIoKSkgewogICAgICAgICAgICAgLy8gSXQgaXMgbm90IGNsZWFyIGhvdyB0byBpbnRlcnByZXQg
dGhlIGRlZmF1bHQgc2hpZnQgYW5kIGl0IGlzIG5vdCBhdmFpbGFibGUgeWV0IGFueXdheS4KQEAg
LTI4Miw3ICsyNzAsNyBAQCBSZW5kZXJNYXRoTUxTY3JpcHRzOjpWZXJ0aWNhbE1ldHJpY3MgUmVu
ZGVyTWF0aE1MU2NyaXB0czo6dmVydGljYWxNZXRyaWNzKGNvbnN0CiAgICAgICAgICAgICBtZXRy
aWNzLnN1YlNoaWZ0ID0gc3RkOjptYXgobWV0cmljcy5zdWJTaGlmdCwgc3BlY2lmaWVkTWluU3Vi
U2hpZnQpOwogICAgICAgICB9CiAgICAgfQotICAgIGlmIChtX3NjcmlwdFR5cGUgPT0gU3VwZXIg
fHwgbV9zY3JpcHRUeXBlID09IFN1YlN1cCB8fCBtX3NjcmlwdFR5cGUgPT0gTXVsdGlzY3JpcHRz
ICB8fCBtX3NjcmlwdFR5cGUgPT0gT3ZlciB8fCBtX3NjcmlwdFR5cGUgPT0gVW5kZXJPdmVyKSB7
CisgICAgaWYgKHNjcmlwdFR5cGUoKSA9PSBTY3JpcHRUeXBlOjpTdXBlciB8fCBzY3JpcHRUeXBl
KCkgPT0gU2NyaXB0VHlwZTo6U3ViU3VwIHx8IHNjcmlwdFR5cGUoKSA9PSBTY3JpcHRUeXBlOjpN
dWx0aXNjcmlwdHMgIHx8IHNjcmlwdFR5cGUoKSA9PSBTY3JpcHRUeXBlOjpPdmVyIHx8IHNjcmlw
dFR5cGUoKSA9PSBTY3JpcHRUeXBlOjpVbmRlck92ZXIpIHsKICAgICAgICAgbWV0cmljcy5zdXBT
aGlmdCA9IHN0ZDo6bWF4KHBhcmFtZXRlcnMuc3VwZXJzY3JpcHRTaGlmdFVwLCBiYXNlQXNjZW50
IC0gcGFyYW1ldGVycy5zdXBlclNjcmlwdEJhc2VsaW5lRHJvcE1heCk7CiAgICAgICAgIGlmICgh
aXNSZW5kZXJNYXRoTUxVbmRlck92ZXIoKSkgewogICAgICAgICAgICAgLy8gSXQgaXMgbm90IGNs
ZWFyIGhvdyB0byBpbnRlcnByZXQgdGhlIGRlZmF1bHQgc2hpZnQgYW5kIGl0IGlzIG5vdCBhdmFp
bGFibGUgeWV0IGFueXdheS4KQEAgLTI5MiwyNiArMjgwLDI2IEBAIFJlbmRlck1hdGhNTFNjcmlw
dHM6OlZlcnRpY2FsTWV0cmljcyBSZW5kZXJNYXRoTUxTY3JpcHRzOjp2ZXJ0aWNhbE1ldHJpY3Mo
Y29uc3QKICAgICAgICAgfQogICAgIH0KIAotICAgIHN3aXRjaCAobV9zY3JpcHRUeXBlKSB7Ci0g
ICAgY2FzZSBTdWI6Ci0gICAgY2FzZSBVbmRlcjogeworICAgIHN3aXRjaCAoc2NyaXB0VHlwZSgp
KSB7CisgICAgY2FzZSBTY3JpcHRUeXBlOjpTdWI6CisgICAgY2FzZSBTY3JpcHRUeXBlOjpVbmRl
cjogewogICAgICAgICBMYXlvdXRVbml0IHN1YkFzY2VudCA9IGFzY2VudEZvckNoaWxkKCpyZWZl
cmVuY2UuZmlyc3RQb3N0U2NyaXB0KTsKICAgICAgICAgTGF5b3V0VW5pdCBzdWJEZXNjZW50ID0g
cmVmZXJlbmNlLmZpcnN0UG9zdFNjcmlwdC0+bG9naWNhbEhlaWdodCgpIC0gc3ViQXNjZW50Owog
ICAgICAgICBtZXRyaWNzLmRlc2NlbnQgPSBzdWJEZXNjZW50OwogICAgICAgICBtZXRyaWNzLnN1
YlNoaWZ0ID0gc3RkOjptYXgobWV0cmljcy5zdWJTaGlmdCwgc3ViQXNjZW50IC0gcGFyYW1ldGVy
cy5zdWJzY3JpcHRUb3BNYXgpOwogICAgIH0KICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTdXBl
cjoKLSAgICBjYXNlIE92ZXI6IHsKKyAgICBjYXNlIFNjcmlwdFR5cGU6OlN1cGVyOgorICAgIGNh
c2UgU2NyaXB0VHlwZTo6T3ZlcjogewogICAgICAgICBMYXlvdXRVbml0IHN1cEFzY2VudCA9IGFz
Y2VudEZvckNoaWxkKCpyZWZlcmVuY2UuZmlyc3RQb3N0U2NyaXB0KTsKICAgICAgICAgTGF5b3V0
VW5pdCBzdXBEZXNjZW50ID0gcmVmZXJlbmNlLmZpcnN0UG9zdFNjcmlwdC0+bG9naWNhbEhlaWdo
dCgpIC0gc3VwQXNjZW50OwogICAgICAgICBtZXRyaWNzLmFzY2VudCA9IHN1cEFzY2VudDsKICAg
ICAgICAgbWV0cmljcy5zdXBTaGlmdCA9IHN0ZDo6bWF4KG1ldHJpY3Muc3VwU2hpZnQsIHBhcmFt
ZXRlcnMuc3VwZXJzY3JpcHRCb3R0b21NaW4gKyBzdXBEZXNjZW50KTsKICAgICB9CiAgICAgICAg
IGJyZWFrOwotICAgIGNhc2UgU3ViU3VwOgotICAgIGNhc2UgVW5kZXJPdmVyOgotICAgIGNhc2Ug
TXVsdGlzY3JpcHRzOiB7CisgICAgY2FzZSBTY3JpcHRUeXBlOjpTdWJTdXA6CisgICAgY2FzZSBT
Y3JpcHRUeXBlOjpVbmRlck92ZXI6CisgICAgY2FzZSBTY3JpcHRUeXBlOjpNdWx0aXNjcmlwdHM6
IHsKICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBtb3ZlIHRoZSBjb2RlIHVwZGF0aW5nIFZl
cnRpY2FsTWV0cmljcyBmb3IgZWFjaCBzdWIvc3VwIHBhaXIgaW4gYSBoZWxwZXIKICAgICAgICAg
Ly8gZnVuY3Rpb24uIFRoYXQgd2F5LCBTdWJTdXAvVW5kZXJPdmVyIGNhbiBqdXN0IG1ha2Ugb25l
IGNhbGwgYW5kIHRoZSBsb29wIGZvciBNdWx0aXNjcmlwdHMKICAgICAgICAgLy8gY2FuIGJlIHJl
d3JpdHRlbiBpbiBhIG1vcmUgcmVhZGFibGUuCkBAIC0zODksOSArMzc3LDkgQEAgdm9pZCBSZW5k
ZXJNYXRoTUxTY3JpcHRzOjpsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91
dFVuaXQpCiAgICAgTGF5b3V0VW5pdCBkZXNjZW50ID0gc3RkOjptYXgoYmFzZURlc2NlbnQsIG1l
dHJpY3MuZGVzY2VudCArIG1ldHJpY3Muc3ViU2hpZnQpOwogICAgIHNldExvZ2ljYWxIZWlnaHQo
YXNjZW50ICsgZGVzY2VudCk7CiAKLSAgICBzd2l0Y2ggKG1fc2NyaXB0VHlwZSkgewotICAgIGNh
c2UgU3ViOgotICAgIGNhc2UgVW5kZXI6IHsKKyAgICBzd2l0Y2ggKHNjcmlwdFR5cGUoKSkgewor
ICAgIGNhc2UgU2NyaXB0VHlwZTo6U3ViOgorICAgIGNhc2UgU2NyaXB0VHlwZTo6VW5kZXI6IHsK
ICAgICAgICAgc2V0TG9naWNhbFdpZHRoKHJlZmVyZW5jZS5iYXNlLT5sb2dpY2FsV2lkdGgoKSAr
IHN0ZDo6bWF4KExheW91dFVuaXQoMCksIHJlZmVyZW5jZS5maXJzdFBvc3RTY3JpcHQtPmxvZ2lj
YWxXaWR0aCgpIC0gYmFzZUl0YWxpY0NvcnJlY3Rpb24gKyBzcGFjZSkpOwogICAgICAgICBMYXlv
dXRQb2ludCBiYXNlTG9jYXRpb24obWlycm9ySWZOZWVkZWQoaG9yaXpvbnRhbE9mZnNldCwgKnJl
ZmVyZW5jZS5iYXNlKSwgYXNjZW50IC0gYmFzZUFzY2VudCk7CiAgICAgICAgIHJlZmVyZW5jZS5i
YXNlLT5zZXRMb2NhdGlvbihiYXNlTG9jYXRpb24pOwpAQCAtNDAxLDggKzM4OSw4IEBAIHZvaWQg
UmVuZGVyTWF0aE1MU2NyaXB0czo6bGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuLCBM
YXlvdXRVbml0KQogICAgICAgICByZWZlcmVuY2UuZmlyc3RQb3N0U2NyaXB0LT5zZXRMb2NhdGlv
bihzY3JpcHRMb2NhdGlvbik7CiAgICAgfQogICAgICAgICBicmVhazsKLSAgICBjYXNlIFN1cGVy
OgotICAgIGNhc2UgT3ZlcjogeworICAgIGNhc2UgU2NyaXB0VHlwZTo6U3VwZXI6CisgICAgY2Fz
ZSBTY3JpcHRUeXBlOjpPdmVyOiB7CiAgICAgICAgIHNldExvZ2ljYWxXaWR0aChyZWZlcmVuY2Uu
YmFzZS0+bG9naWNhbFdpZHRoKCkgKyBzdGQ6Om1heChMYXlvdXRVbml0KDApLCByZWZlcmVuY2Uu
Zmlyc3RQb3N0U2NyaXB0LT5sb2dpY2FsV2lkdGgoKSArIHNwYWNlKSk7CiAgICAgICAgIExheW91
dFBvaW50IGJhc2VMb2NhdGlvbihtaXJyb3JJZk5lZWRlZChob3Jpem9udGFsT2Zmc2V0LCAqcmVm
ZXJlbmNlLmJhc2UpLCBhc2NlbnQgLSBiYXNlQXNjZW50KTsKICAgICAgICAgcmVmZXJlbmNlLmJh
c2UtPnNldExvY2F0aW9uKGJhc2VMb2NhdGlvbik7CkBAIC00MTIsOSArNDAwLDkgQEAgdm9pZCBS
ZW5kZXJNYXRoTUxTY3JpcHRzOjpsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExh
eW91dFVuaXQpCiAgICAgICAgIHJlZmVyZW5jZS5maXJzdFBvc3RTY3JpcHQtPnNldExvY2F0aW9u
KHNjcmlwdExvY2F0aW9uKTsKICAgICB9CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgU3ViU3Vw
OgotICAgIGNhc2UgVW5kZXJPdmVyOgotICAgIGNhc2UgTXVsdGlzY3JpcHRzOiB7CisgICAgY2Fz
ZSBTY3JpcHRUeXBlOjpTdWJTdXA6CisgICAgY2FzZSBTY3JpcHRUeXBlOjpVbmRlck92ZXI6Cisg
ICAgY2FzZSBTY3JpcHRUeXBlOjpNdWx0aXNjcmlwdHM6IHsKICAgICAgICAgLy8gQ2FsY3VsYXRl
IHRoZSBsb2dpY2FsIHdpZHRoLgogICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCA9IDA7
CiAgICAgICAgIGF1dG8gc3ViU2NyaXB0ID0gcmVmZXJlbmNlLmZpcnN0UHJlU2NyaXB0OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxTY3Jp
cHRzLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFNjcmlw
dHMuaAppbmRleCBhYTUxODMzNTc0NTE5ODRhYzkxYTFiN2Q0MTgwYjhlMDMzNGFmNTMyLi5jYjkz
NGNjNmExNzQ0YTdkMTM5YWU1ZmI2MWQ1MDQ4OWUyZWU5YmU1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFNjcmlwdHMuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFNjcmlwdHMuaApAQCAtMzQs
NiArMzQsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBNYXRoTUxTY3JpcHRzRWxl
bWVudDsKK2VudW0gY2xhc3MgU2NyaXB0VHlwZSB7IFN1YiwgU3VwZXIsIFN1YlN1cCwgTXVsdGlz
Y3JpcHRzLCBVbmRlciwgT3ZlciwgVW5kZXJPdmVyIH07CiAKIC8vIFJlbmRlciBhIGJhc2Ugd2l0
aCBzY3JpcHRzLgogY2xhc3MgUmVuZGVyTWF0aE1MU2NyaXB0cyA6IHB1YmxpYyBSZW5kZXJNYXRo
TUxCbG9jayB7CkBAIC00NSwxMiArNDYsMTAgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIGJv
b2wgaXNSZW5kZXJNYXRoTUxTY3JpcHRzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsg
fQogICAgIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAi
UmVuZGVyTWF0aE1MU2NyaXB0cyI7IH0KKyAgICBTY3JpcHRUeXBlIHNjcmlwdFR5cGUoKSBjb25z
dDsKICAgICB2b2lkIGNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQgcGFn
ZUxvZ2ljYWxIZWlnaHQgPSAwKSBvdmVycmlkZTsKIAotICAgIGVudW0gU2NyaXB0c1R5cGUgeyBT
dWIsIFN1cGVyLCBTdWJTdXAsIE11bHRpc2NyaXB0cywgVW5kZXIsIE92ZXIsIFVuZGVyT3ZlciB9
OwotICAgIFNjcmlwdHNUeXBlIG1fc2NyaXB0VHlwZTsKLQogcHJpdmF0ZToKICAgICBNYXRoTUxT
Y3JpcHRzRWxlbWVudCYgZWxlbWVudCgpIGNvbnN0OwogICAgIHN0ZDo6b3B0aW9uYWw8aW50PiBm
aXJzdExpbmVCYXNlbGluZSgpIGNvbnN0IGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxVbmRlck92ZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxVbmRlck92ZXIuY3BwCmluZGV4IDQ1
NzFiY2Q0YWY5MmQ3NTU4ZGQyMTM3MDg1OTg5YTdjZjBjZjI1YmEuLjk5OTU3ZDMzNDg2YjY4YmM2
OTdhM2FlYTYxZTFlY2UyMWFjNDljZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9tYXRobWwvUmVuZGVyTWF0aE1MVW5kZXJPdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFVuZGVyT3Zlci5jcHAKQEAgLTkyLDExICs5
MiwxMSBAQCBib29sIFJlbmRlck1hdGhNTFVuZGVyT3Zlcjo6aXNWYWxpZCgpIGNvbnN0CiAgICAg
aWYgKCFjaGlsZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGNoaWxkID0gY2hpbGQtPm5l
eHRTaWJsaW5nQm94KCk7Ci0gICAgc3dpdGNoIChtX3NjcmlwdFR5cGUpIHsKLSAgICBjYXNlIE92
ZXI6Ci0gICAgY2FzZSBVbmRlcjoKKyAgICBzd2l0Y2ggKHNjcmlwdFR5cGUoKSkgeworICAgIGNh
c2UgU2NyaXB0VHlwZTo6T3ZlcjoKKyAgICBjYXNlIFNjcmlwdFR5cGU6OlVuZGVyOgogICAgICAg
ICByZXR1cm4gIWNoaWxkOwotICAgIGNhc2UgVW5kZXJPdmVyOgorICAgIGNhc2UgU2NyaXB0VHlw
ZTo6VW5kZXJPdmVyOgogICAgICAgICByZXR1cm4gY2hpbGQgJiYgIWNoaWxkLT5uZXh0U2libGlu
Z0JveCgpOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAt
MTIwLDE2ICsxMjAsMTYgQEAgUmVuZGVyQm94JiBSZW5kZXJNYXRoTUxVbmRlck92ZXI6OmJhc2Uo
KSBjb25zdAogUmVuZGVyQm94JiBSZW5kZXJNYXRoTUxVbmRlck92ZXI6OnVuZGVyKCkgY29uc3QK
IHsKICAgICBBU1NFUlQoaXNWYWxpZCgpKTsKLSAgICBBU1NFUlQobV9zY3JpcHRUeXBlID09IFVu
ZGVyIHx8IG1fc2NyaXB0VHlwZSA9PSBVbmRlck92ZXIpOworICAgIEFTU0VSVChzY3JpcHRUeXBl
KCkgPT0gU2NyaXB0VHlwZTo6VW5kZXIgfHwgc2NyaXB0VHlwZSgpID09IFNjcmlwdFR5cGU6OlVu
ZGVyT3Zlcik7CiAgICAgcmV0dXJuICpmaXJzdENoaWxkQm94KCktPm5leHRTaWJsaW5nQm94KCk7
CiB9CiAKIFJlbmRlckJveCYgUmVuZGVyTWF0aE1MVW5kZXJPdmVyOjpvdmVyKCkgY29uc3QKIHsK
ICAgICBBU1NFUlQoaXNWYWxpZCgpKTsKLSAgICBBU1NFUlQobV9zY3JpcHRUeXBlID09IE92ZXIg
fHwgbV9zY3JpcHRUeXBlID09IFVuZGVyT3Zlcik7CisgICAgQVNTRVJUKHNjcmlwdFR5cGUoKSA9
PSBTY3JpcHRUeXBlOjpPdmVyIHx8IHNjcmlwdFR5cGUoKSA9PSBTY3JpcHRUeXBlOjpVbmRlck92
ZXIpOwogICAgIGF1dG8qIHNlY29uZENoaWxkID0gZmlyc3RDaGlsZEJveCgpLT5uZXh0U2libGlu
Z0JveCgpOwotICAgIHJldHVybiBtX3NjcmlwdFR5cGUgPT0gT3ZlciA/ICpzZWNvbmRDaGlsZCA6
ICpzZWNvbmRDaGlsZC0+bmV4dFNpYmxpbmdCb3goKTsKKyAgICByZXR1cm4gc2NyaXB0VHlwZSgp
ID09IFNjcmlwdFR5cGU6Ok92ZXIgPyAqc2Vjb25kQ2hpbGQgOiAqc2Vjb25kQ2hpbGQtPm5leHRT
aWJsaW5nQm94KCk7CiB9CiAKIApAQCAtMTUwLDEwICsxNTAsMTAgQEAgdm9pZCBSZW5kZXJNYXRo
TUxVbmRlck92ZXI6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkKIAogICAgIExheW91
dFVuaXQgcHJlZmVycmVkV2lkdGggPSBiYXNlKCkubWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKCk7
CiAKLSAgICBpZiAobV9zY3JpcHRUeXBlID09IFVuZGVyIHx8IG1fc2NyaXB0VHlwZSA9PSBVbmRl
ck92ZXIpCisgICAgaWYgKHNjcmlwdFR5cGUoKSA9PSBTY3JpcHRUeXBlOjpVbmRlciB8fCBzY3Jp
cHRUeXBlKCkgPT0gU2NyaXB0VHlwZTo6VW5kZXJPdmVyKQogICAgICAgICBwcmVmZXJyZWRXaWR0
aCA9IHN0ZDo6bWF4KHByZWZlcnJlZFdpZHRoLCB1bmRlcigpLm1heFByZWZlcnJlZExvZ2ljYWxX
aWR0aCgpKTsKIAotICAgIGlmIChtX3NjcmlwdFR5cGUgPT0gT3ZlciB8fCBtX3NjcmlwdFR5cGUg
PT0gVW5kZXJPdmVyKQorICAgIGlmIChzY3JpcHRUeXBlKCkgPT0gU2NyaXB0VHlwZTo6T3ZlciB8
fCBzY3JpcHRUeXBlKCkgPT0gU2NyaXB0VHlwZTo6VW5kZXJPdmVyKQogICAgICAgICBwcmVmZXJy
ZWRXaWR0aCA9IHN0ZDo6bWF4KHByZWZlcnJlZFdpZHRoLCBvdmVyKCkubWF4UHJlZmVycmVkTG9n
aWNhbFdpZHRoKCkpOwogCiAgICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtX21heFBy
ZWZlcnJlZExvZ2ljYWxXaWR0aCA9IHByZWZlcnJlZFdpZHRoOwpAQCAtMTY4LDcgKzE2OCw3IEBA
IExheW91dFVuaXQgUmVuZGVyTWF0aE1MVW5kZXJPdmVyOjpob3Jpem9udGFsT2Zmc2V0KGNvbnN0
IFJlbmRlckJveCYgY2hpbGQpIGNvbnN0CiAKIGJvb2wgUmVuZGVyTWF0aE1MVW5kZXJPdmVyOjpo
YXNBY2NlbnQoYm9vbCBhY2NlbnRVbmRlcikgY29uc3QKIHsKLSAgICBBU1NFUlQobV9zY3JpcHRU
eXBlID09IFVuZGVyT3ZlciB8fCAoYWNjZW50VW5kZXIgJiYgbV9zY3JpcHRUeXBlID09IFVuZGVy
KSB8fCAoIWFjY2VudFVuZGVyICYmIG1fc2NyaXB0VHlwZSA9PSBPdmVyKSk7CisgICAgQVNTRVJU
KHNjcmlwdFR5cGUoKSA9PSBTY3JpcHRUeXBlOjpVbmRlck92ZXIgfHwgKGFjY2VudFVuZGVyICYm
IHNjcmlwdFR5cGUoKSA9PSBTY3JpcHRUeXBlOjpVbmRlcikgfHwgKCFhY2NlbnRVbmRlciAmJiBz
Y3JpcHRUeXBlKCkgPT0gU2NyaXB0VHlwZTo6T3ZlcikpOwogCiAgICAgY29uc3QgTWF0aE1MRWxl
bWVudDo6Qm9vbGVhblZhbHVlJiBhdHRyaWJ1dGVWYWx1ZSA9IGFjY2VudFVuZGVyID8gZWxlbWVu
dCgpLmFjY2VudFVuZGVyKCkgOiBlbGVtZW50KCkuYWNjZW50KCk7CiAgICAgaWYgKGF0dHJpYnV0
ZVZhbHVlID09IE1hdGhNTEVsZW1lbnQ6OkJvb2xlYW5WYWx1ZTo6VHJ1ZSkKQEAgLTI2NCwxOSAr
MjY0LDE5IEBAIHZvaWQgUmVuZGVyTWF0aE1MVW5kZXJPdmVyOjpsYXlvdXRCbG9jayhib29sIHJl
bGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQgcGFnZUxvCiAgICAgc3RyZXRjaEhvcml6b250YWxP
cGVyYXRvcnNBbmRMYXlvdXRDaGlsZHJlbigpOwogCiAgICAgQVNTRVJUKCFiYXNlKCkubmVlZHNM
YXlvdXQoKSk7Ci0gICAgQVNTRVJUKG1fc2NyaXB0VHlwZSA9PSBPdmVyIHx8ICF1bmRlcigpLm5l
ZWRzTGF5b3V0KCkpOwotICAgIEFTU0VSVChtX3NjcmlwdFR5cGUgPT0gVW5kZXIgfHwgIW92ZXIo
KS5uZWVkc0xheW91dCgpKTsKKyAgICBBU1NFUlQoc2NyaXB0VHlwZSgpID09IFNjcmlwdFR5cGU6
Ok92ZXIgfHwgIXVuZGVyKCkubmVlZHNMYXlvdXQoKSk7CisgICAgQVNTRVJUKHNjcmlwdFR5cGUo
KSA9PSBTY3JpcHRUeXBlOjpVbmRlciB8fCAhb3ZlcigpLm5lZWRzTGF5b3V0KCkpOwogICAgIAog
ICAgIExheW91dFVuaXQgbG9naWNhbFdpZHRoID0gYmFzZSgpLmxvZ2ljYWxXaWR0aCgpOwotICAg
IGlmIChtX3NjcmlwdFR5cGUgPT0gVW5kZXIgfHwgbV9zY3JpcHRUeXBlID09IFVuZGVyT3ZlcikK
KyAgICBpZiAoc2NyaXB0VHlwZSgpID09IFNjcmlwdFR5cGU6OlVuZGVyIHx8IHNjcmlwdFR5cGUo
KSA9PSBTY3JpcHRUeXBlOjpVbmRlck92ZXIpCiAgICAgICAgIGxvZ2ljYWxXaWR0aCA9IHN0ZDo6
bWF4KGxvZ2ljYWxXaWR0aCwgdW5kZXIoKS5sb2dpY2FsV2lkdGgoKSk7Ci0gICAgaWYgKG1fc2Ny
aXB0VHlwZSA9PSBPdmVyIHx8IG1fc2NyaXB0VHlwZSA9PSBVbmRlck92ZXIpCisgICAgaWYgKHNj
cmlwdFR5cGUoKSA9PSBTY3JpcHRUeXBlOjpPdmVyIHx8IHNjcmlwdFR5cGUoKSA9PSBTY3JpcHRU
eXBlOjpVbmRlck92ZXIpCiAgICAgICAgIGxvZ2ljYWxXaWR0aCA9IHN0ZDo6bWF4KGxvZ2ljYWxX
aWR0aCwgb3ZlcigpLmxvZ2ljYWxXaWR0aCgpKTsKICAgICBzZXRMb2dpY2FsV2lkdGgobG9naWNh
bFdpZHRoKTsKIAogICAgIFZlcnRpY2FsUGFyYW1ldGVycyBwYXJhbWV0ZXJzID0gdmVydGljYWxQ
YXJhbWV0ZXJzKCk7CiAgICAgTGF5b3V0VW5pdCB2ZXJ0aWNhbE9mZnNldCA9IDA7Ci0gICAgaWYg
KG1fc2NyaXB0VHlwZSA9PSBPdmVyIHx8IG1fc2NyaXB0VHlwZSA9PSBVbmRlck92ZXIpIHsKKyAg
ICBpZiAoc2NyaXB0VHlwZSgpID09IFNjcmlwdFR5cGU6Ok92ZXIgfHwgc2NyaXB0VHlwZSgpID09
IFNjcmlwdFR5cGU6OlVuZGVyT3ZlcikgewogICAgICAgICB2ZXJ0aWNhbE9mZnNldCArPSBwYXJh
bWV0ZXJzLm92ZXJFeHRyYUFzY2VuZGVyOwogICAgICAgICBvdmVyKCkuc2V0TG9jYXRpb24oTGF5
b3V0UG9pbnQoaG9yaXpvbnRhbE9mZnNldChvdmVyKCkpLCB2ZXJ0aWNhbE9mZnNldCkpOwogICAg
ICAgICBpZiAocGFyYW1ldGVycy51c2VVbmRlck92ZXJCYXJGYWxsQmFjaykgewpAQCAtMjk0LDcg
KzI5NCw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MVW5kZXJPdmVyOjpsYXlvdXRCbG9jayhib29sIHJl
bGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQgcGFnZUxvCiAgICAgfQogICAgIGJhc2UoKS5zZXRM
b2NhdGlvbihMYXlvdXRQb2ludChob3Jpem9udGFsT2Zmc2V0KGJhc2UoKSksIHZlcnRpY2FsT2Zm
c2V0KSk7CiAgICAgdmVydGljYWxPZmZzZXQgKz0gYmFzZSgpLmxvZ2ljYWxIZWlnaHQoKTsKLSAg
ICBpZiAobV9zY3JpcHRUeXBlID09IFVuZGVyIHx8IG1fc2NyaXB0VHlwZSA9PSBVbmRlck92ZXIp
IHsKKyAgICBpZiAoc2NyaXB0VHlwZSgpID09IFNjcmlwdFR5cGU6OlVuZGVyIHx8IHNjcmlwdFR5
cGUoKSA9PSBTY3JpcHRUeXBlOjpVbmRlck92ZXIpIHsKICAgICAgICAgaWYgKHBhcmFtZXRlcnMu
dXNlVW5kZXJPdmVyQmFyRmFsbEJhY2spIHsKICAgICAgICAgICAgIGlmICghaGFzQWNjZW50VW5k
ZXIoKSkKICAgICAgICAgICAgICAgICB2ZXJ0aWNhbE9mZnNldCArPSBwYXJhbWV0ZXJzLnVuZGVy
R2FwTWluOwo=
</data>
<flag name="review"
          id="347421"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>