<?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>228224</bug_id>
          
          <creation_ts>2021-07-23 00:40:26 -0700</creation_ts>
          <short_desc>[GPU Process] Start tracking resource uses for NativeImages and Fonts</short_desc>
          <delta_ts>2021-07-27 18:09:38 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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>228222</dependson>
          <blocked>228216</blocked>
    
    <blocked>228495</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>dino</cc>
    
    <cc>jonlee</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1778998</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-07-23 00:40:26 -0700</bug_when>
    <thetext>[GPU Process] Start tracking resource uses for NativeImages and Fonts</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779000</commentid>
    <comment_count>1</comment_count>
      <attachid>434070</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-07-23 00:45:09 -0700</bug_when>
    <thetext>Created attachment 434070
Patch for reviewing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779001</commentid>
    <comment_count>2</comment_count>
      <attachid>434071</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-07-23 00:46:41 -0700</bug_when>
    <thetext>Created attachment 434071
Patch for EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779675</commentid>
    <comment_count>3</comment_count>
      <attachid>434267</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-07-26 21:04:36 -0700</bug_when>
    <thetext>Created attachment 434267
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779825</commentid>
    <comment_count>4</comment_count>
      <attachid>434309</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-07-27 13:34:09 -0700</bug_when>
    <thetext>Created attachment 434309
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779829</commentid>
    <comment_count>5</comment_count>
      <attachid>434309</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-07-27 13:52:30 -0700</bug_when>
    <thetext>Comment on attachment 434309
Patch

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

&gt; Source/WebCore/platform/graphics/displaylists/DisplayListReplayer.cpp:105
&gt; +    if (delegate) {

Maybe an early return will look clearer

if (!delegate)
    return std::nullopt;

&gt; Source/WebCore/platform/graphics/displaylists/DisplayListReplayer.cpp:108
&gt; +        if (changeFlags.contains(GraphicsContextState::StrokePatternChange))
&gt; +            delegate-&gt;recordResourceUse(strokePatternRenderingResourceIdentifier);

Can&apos;t this be written like this:

if (strokePatternRenderingResourceIdentifier)
    delegate-&gt;recordResourceUse(strokePatternRenderingResourceIdentifier);

&gt; Source/WebKit/WebProcess/GPU/graphics/RemoteResourceCacheProxy.cpp:81
&gt;  void RemoteResourceCacheProxy::cacheNativeImage(NativeImage&amp; image)

Maybe we need to choose new names for these functions since they do more than just caching the resources:

cacheNativeImageAndUse()
ensureNativeImageIsCachedAndUse()
recordNativeImageUse()

Or something similar. This may be also done in a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779863</commentid>
    <comment_count>6</comment_count>
      <attachid>434309</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-07-27 15:51:59 -0700</bug_when>
    <thetext>Comment on attachment 434309
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/displaylists/DisplayListReplayer.cpp:108
&gt;&gt; +            delegate-&gt;recordResourceUse(strokePatternRenderingResourceIdentifier);
&gt; 
&gt; Can&apos;t this be written like this:
&gt; 
&gt; if (strokePatternRenderingResourceIdentifier)
&gt;     delegate-&gt;recordResourceUse(strokePatternRenderingResourceIdentifier);

We can! Good catch.

&gt;&gt; Source/WebKit/WebProcess/GPU/graphics/RemoteResourceCacheProxy.cpp:81
&gt;&gt;  void RemoteResourceCacheProxy::cacheNativeImage(NativeImage&amp; image)
&gt; 
&gt; Maybe we need to choose new names for these functions since they do more than just caching the resources:
&gt; 
&gt; cacheNativeImageAndUse()
&gt; ensureNativeImageIsCachedAndUse()
&gt; recordNativeImageUse()
&gt; 
&gt; Or something similar. This may be also done in a separate patch.

Yeah, this is a good idea. I&apos;ll do this in a follow-up patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779865</commentid>
    <comment_count>7</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-07-27 15:53:05 -0700</bug_when>
    <thetext>Committed r280356 (240003@main): &lt;https://commits.webkit.org/240003@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779866</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-07-27 15:54:26 -0700</bug_when>
    <thetext>&lt;rdar://problem/81186859&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779872</commentid>
    <comment_count>9</comment_count>
      <attachid>434309</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-07-27 16:09:04 -0700</bug_when>
    <thetext>Comment on attachment 434309
Patch

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

&gt;&gt;&gt; Source/WebKit/WebProcess/GPU/graphics/RemoteResourceCacheProxy.cpp:81
&gt;&gt;&gt;  void RemoteResourceCacheProxy::cacheNativeImage(NativeImage&amp; image)
&gt;&gt; 
&gt;&gt; Maybe we need to choose new names for these functions since they do more than just caching the resources:
&gt;&gt; 
&gt;&gt; cacheNativeImageAndUse()
&gt;&gt; ensureNativeImageIsCachedAndUse()
&gt;&gt; recordNativeImageUse()
&gt;&gt; 
&gt;&gt; Or something similar. This may be also done in a separate patch.
&gt; 
&gt; Yeah, this is a good idea. I&apos;ll do this in a follow-up patch.

https://bugs.webkit.org/show_bug.cgi?id=228495</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434070</attachid>
            <date>2021-07-23 00:45:09 -0700</date>
            <delta_ts>2021-07-26 18:43:17 -0700</delta_ts>
            <desc>Patch for reviewing</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>18877</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">Y29tbWl0IGE4OWI2OGQxOWE4Njc1NjlhM2NlNTkwZTVjZWExNjJjZDdiODMwMGEKQXV0aG9yOiBN
eWxlcyBDLiBNYXhmaWVsZCA8bW1heGZpZWxkQGFwcGxlLmNvbT4KRGF0ZTogICBGcmkgSnVsIDIz
IDAwOjM2OjM2IDIwMjEgLTA3MDAKCiAgICBTb3VyY2UvV2ViQ29yZToKICAgIFVucmV2aWV3ZWQs
IHJldmVydGluZyAyODAxMzAuCiAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjI4MjEyCiAgICAKICAgIEludHJvZHVjZWQgTW90aW9uTWFyayByZWdyZXNzaW9uCiAg
ICAKICAgIFJldmVydGVkIGNoYW5nZXNldDoKICAgIAogICAgUGF0Y2ggYnkgU2FpZCBBYm91LUhh
bGxhd2EgPHNhaWRAYXBwbGUuY29tPiBvbiAyMDIxLTA3LTIyCiAgICAKICAgICogcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmNwcDoKICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c2ltcGxpZmllZExh
eW91dCk6CiAgICAKICAgIFNvdXJjZS9XZWJLaXQ6CiAgICBbR1BVIFByb2Nlc3NdIFN0YXJ0IHRy
YWNraW5nIHJlc291cmNlIHVzZXMgZm9yIE5hdGl2ZUltYWdlcyBhbmQgRm9udHMKICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjgyMjQKICAgIAogICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAgICAKICAgIFRoaXMgaXMgcGFydCAzIG9mIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjgyMTYuCiAgICAKICAgIFRoaXMgcGF0
Y2ggdHJpZ2dlcnMgdGhlIGluZnJhc3RydWN0dXJlIGFkZGVkIGluIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjgyMjIgYnkgdHJhY2tpbmcKICAgIHJlc291cmNlIHVz
ZSBjb3VudHMgaW4gdGhlIHdlYiBwcm9jZXNzLiBSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkgYWxy
ZWFkeSBpcyBub3RpZmllZCB3aGVuZXZlciBhIHJlc291cmNlCiAgICBpcyB1c2VkLCBzbyBpdCBy
ZWNvcmRzIGhvdyBtYW55IG9mIHRoZXNlIG5vdGlmaWNhdGlvbnMgaXQgcmVjZWl2ZXMsIGFuZCBz
ZW5kcyB0aGF0IGNvdW50IHRvIHRoZSBHUFUgcHJvY2VzcwogICAgd2l0aCB0aGUgcmVsZWFzZSBt
ZXNzYWdlLiBUaGlzIHBhdGNoIGV4dGVuZHMgdGhlIGV4aXN0aW5nIHJlc291cmNlIHRyYWNraW5n
IEhhc2hNYXBzIHVzZWQgaW4KICAgIFJlbW90ZVJlc291cmNlQ2FjaGVQcm94eSB0byBjb250aW51
ZSB0byByZWNvcmQgd2hhdCB0aGV5IHdlcmUgcmVjb3JkaW5nIGJlZm9yZSwgYnV0IGFsc28gaW5j
bHVkZSB0aGlzIG5ldwogICAgcmVzb3VyY2UgdXNlIGNvdW50IGluZm9ybWF0aW9uLgogICAgCiAg
ICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgogICAgCiAgICAqIEdQVVByb2Nlc3MvZ3JhcGhp
Y3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHA6CiAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjpSZXBsYXllckRlbGVnYXRlOjphcHBseSk6CiAgICAqIFdlYlByb2Nlc3MvR1BV
L2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5jcHA6CiAgICAoV2ViS2l0OjpSZW1v
dGVSZXNvdXJjZUNhY2hlUHJveHk6On5SZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkpOgogICAgKFdl
YktpdDo6UmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5OjpjYWNoZU5hdGl2ZUltYWdlKToKICAgIChX
ZWJLaXQ6OlJlbW90ZVJlc291cmNlQ2FjaGVQcm94eTo6Y2FjaGVGb250KToKICAgIChXZWJLaXQ6
OlJlbW90ZVJlc291cmNlQ2FjaGVQcm94eTo6cmVsZWFzZU5hdGl2ZUltYWdlKToKICAgIChXZWJL
aXQ6OlJlbW90ZVJlc291cmNlQ2FjaGVQcm94eTo6Y2xlYXJGb250TWFwKToKICAgIChXZWJLaXQ6
OlJlbW90ZVJlc291cmNlQ2FjaGVQcm94eTo6ZmluYWxpemVSZW5kZXJpbmdVcGRhdGVGb3JGb250
cyk6CiAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGVQcm94
eS5oOgoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwppbmRleCA0OWI3M2E3MzhjNTAuLjhlNWNiYTMwY2VlZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwpAQCAtMSwyOSArMSwzIEBACi0yMDIxLTA3LTIyICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhm
aWVsZEBhcHBsZS5jb20+Ci0KLSAgICAgICAgW0dQVSBQcm9jZXNzXSBBZGQgcmVzb3VyY2UgdXNl
IGNvdW50ZXIgaW5mcmFzdHJ1Y3R1cmUgdG8gUmVtb3RlUmVzb3VyY2VDYWNoZQotICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI4MjIyCi0KLSAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCi0KLSAgICAgICAgVGhpcyBpcyBwYXJ0IDIgb2Yg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyODIxNi4KLQotICAgICAg
ICBVc2luZyBEaXNwbGF5TGlzdDo6UmVwbGF5ZXI6OkRlbGVnYXRlIHRvIHRyYWNrIGhvdyBtYW55
IHRpbWVzIGEgcmVzb3VyY2UgaXMgdXNlZCBpbiBhIGRpc3BsYXkgbGlzdCBpcyBhIG5hdHVyYWwg
Zml0LgotICAgICAgICBIb3dldmVyLCBpZiB0aGUgR1BVIHByb2Nlc3MgZGV0ZXJtaW5lcyB0aGF0
IGEgcmVzb3VyY2UgaGFzIGhpdCBpdHMgdXNlIGxpbWl0IGFuZCBpcyByZWFkeSB0byBiZSBkZXN0
cm95ZWQsIGl0IGNhbid0Ci0gICAgICAgIGFjdHVhbGx5IGRlc3Ryb3kgaXQgaW1tZWRpYXRlbHks
IGJlY2F1c2UgdGhlIGRlbGVnYXRlJ3MgY2FsbGJhY2sgaXMgY2FsbGVkIGJlZm9yZSBhY3R1YWxs
eSBleGVjdXRpbmcgdGhlIGRpc3BsYXkKLSAgICAgICAgbGlzdCBpdGVtICh3aGljaCBuZWVkcyB0
byBzZWUgdGhlIHJlc291cmNlKS4gQW5kIGl0IGhhcyB0byBleGVjdXRlIGJlZm9yZSBleGVjdXRp
bmcgdGhlIGRpc3BsYXkgbGlzdCBpdGVtIGJlY2F1c2UKLSAgICAgICAgdGhlIGRlbGVnYXRlIGFj
dHVhbGx5IGltcGxlbWVudHMgdGhlIGRpc3BsYXkgbGlzdCBpdGVtIGZvciB0aGluZ3MgbGlrZSBn
ZXRJbWFnZURhdGEuIFNvLCB0aGlzIHBhdGNoIGFkZHMgYW5vdGhlcgotICAgICAgICBtZXRob2Qg
dG8gdGhlIGRlbGVnYXRlOiBkaWRDb21wbGV0ZVJlcGxheWluZygpLCB3aGljaCBpcyBjYWxsZWQg
YXQgdGhlIGVuZCBvZiB0aGUgcmVwbGF5LiBUaGUgR1BVIHByb2Nlc3Mgd2lsbAotICAgICAgICBy
ZW1lbWJlciB3aGljaCByZXNvdXJjZXMgd2VyZSB1c2VkIGR1cmluZyB0aGUgcmVwbGF5LCBhbmQg
aW5jcmVtZW50IHRoZSByZWxldmFudCBjb3VudGVycywgYnV0IG9ubHkgb25jZSB0aGUgcmVwbGF5
Ci0gICAgICAgIGhhcyBmaW5pc2hlZCBjYW4gdGhlIEdQVSBwcm9jZXNzIGFjdHVhbGx5IGRlbGV0
ZSB0aGVzZSByZXNvdXJjZXMuIFRoYXQgb2NjdXJzIGluIHRoaXMgbmV3IGRlbGVnYXRlIG1ldGhv
ZC4KLQotICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSB0aGVyZSBpcyBubyBiZWhhdmlvciBj
aGFuZ2UgeWV0LiBUaGlzIHBhdGNoIGlzIGp1c3QgYWRkaW5nIGluZnJhc3RydWN0dXJlLiBGb3Ig
bm93LCBhbGwgdGhlc2UKLSAgICAgICAgdXNlIGNvdW50cyBzZW50IGJ5IHRoZSB3ZWIgcHJvY2Vz
cyBhcmUgMCAtIEknbGwgaW1wbGVtZW50IHRoYXQgcGFydCBpbiAzIGZvbGxvdy11cCBwYXRjaGVz
LgotCi0gICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
UmVwbGF5ZXIuY3BwOgotICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlcGxheWVyOjpy
ZXBsYXkpOgotICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdFJlcGxheWVyLmg6Ci0gICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVwbGF5ZXI6
OkRlbGVnYXRlOjpkaWRDb21wbGV0ZVJlcGxheWluZyk6Ci0KIDIwMjEtMDctMjIgIFNhaWQgQWJv
dS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmV2ZXJ0
aW5nIDI4MDEzMC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggMGYzN2Y0YWEyZWE0Li5mMzZjOWQ1YjkxNWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCkBAIC0xLDU1ICsxLDMxIEBACi0yMDIxLTA3LTIyICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1t
YXhmaWVsZEBhcHBsZS5jb20+CisyMDIxLTA3LTIzICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhm
aWVsZEBhcHBsZS5jb20+CiAKLSAgICAgICAgW0dQVSBQcm9jZXNzXSBBZGQgcmVzb3VyY2UgdXNl
IGNvdW50ZXIgaW5mcmFzdHJ1Y3R1cmUgdG8gUmVtb3RlUmVzb3VyY2VDYWNoZQotICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI4MjIyCisgICAgICAgIFtH
UFUgUHJvY2Vzc10gU3RhcnQgdHJhY2tpbmcgcmVzb3VyY2UgdXNlcyBmb3IgTmF0aXZlSW1hZ2Vz
IGFuZCBGb250cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjI4MjI0CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAKLSAgICAg
ICAgVGhpcyBwYXRjaCBhZGRzIHRoZSBpbmZyYXN0cnVjdHVyZSBmb3IgYXNzb2NpYXRpbmcgYSBj
b3VudGVyIHdpdGggZWFjaCByZXNvdXJjZSBpbiB0aGUgUmVtb3RlUmVzb3VyY2VDYWNoZS4KLSAg
ICAgICAgQXMgdGhlIHdlYiBwcm9jZXNzIHVzZXMgYSByZXNvdXJjZSBkdXJpbmcgZGlzcGxheSBs
aXN0IHJlY29yZGluZywgaXQgaW5jcmVtZW50cyBhIGNvdW50ZXIsIGFuZCBhcyB0aGUgR1BVCi0g
ICAgICAgIHByb2Nlc3MgdXNlcyBhIHJlc291cmNlLCBpdCBpbmNyZW1lbnRzIGEgY291bnRlciBp
biB0aGUgUmVtb3RlUmVzb3VyY2VDYWNoZS4gV2hlbiB0aGUgd2ViIHByb2Nlc3MgaXMgZG9uZQot
ICAgICAgICB3aXRoIGEgcmVzb3VyY2UsIGl0IHNlbmRzIGEgcmVsZWFzZSBtZXNzYWdlIHRvIHRo
ZSBHUFUgcHJvY2VzcyB3aGljaCBjcnVjaWFsbHkgaW5jbHVkZXMgdGhlIHdlYiBwcm9jZXNzJ3MK
LSAgICAgICAgY291bnRlci4gVGhlIEdQVSBwcm9jZXNzIGhhcyB0byB0aGVuIHdhaXQgdG8gYWN0
dWFsbHkgZGVsZXRlIHRoZSByZXNvdXJjZSB1bnRpbCBpdHMgb3duIHVzZSBjb3VudGVyIG1hdGNo
ZXMKLSAgICAgICAgdGhlIG9uZSBpdCByZWNlaXZlZCBmcm9tIHRoZSB3ZWIgcHJvY2Vzcy4gVGhp
cyBwYXRjaCBpbXBsZW1lbnRzIHRoaXMgZGVmZXJyZWQgZGVsZXRpb24gaW5mcmFzdHJ1Y3R1cmUK
LSAgICAgICAgaW4gdGhlIEdQVSBwcm9jZXNzLgorICAgICAgICBUaGlzIGlzIHBhcnQgMyBvZiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI4MjE2LgorCisgICAgICAg
IFRoaXMgcGF0Y2ggdHJpZ2dlcnMgdGhlIGluZnJhc3RydWN0dXJlIGFkZGVkIGluIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjgyMjIgYnkgdHJhY2tpbmcKKyAgICAg
ICAgcmVzb3VyY2UgdXNlIGNvdW50cyBpbiB0aGUgd2ViIHByb2Nlc3MuIFJlbW90ZVJlc291cmNl
Q2FjaGVQcm94eSBhbHJlYWR5IGlzIG5vdGlmaWVkIHdoZW5ldmVyIGEgcmVzb3VyY2UKKyAgICAg
ICAgaXMgdXNlZCwgc28gaXQgcmVjb3JkcyBob3cgbWFueSBvZiB0aGVzZSBub3RpZmljYXRpb25z
IGl0IHJlY2VpdmVzLCBhbmQgc2VuZHMgdGhhdCBjb3VudCB0byB0aGUgR1BVIHByb2Nlc3MKKyAg
ICAgICAgd2l0aCB0aGUgcmVsZWFzZSBtZXNzYWdlLiBUaGlzIHBhdGNoIGV4dGVuZHMgdGhlIGV4
aXN0aW5nIHJlc291cmNlIHRyYWNraW5nIEhhc2hNYXBzIHVzZWQgaW4KKyAgICAgICAgUmVtb3Rl
UmVzb3VyY2VDYWNoZVByb3h5IHRvIGNvbnRpbnVlIHRvIHJlY29yZCB3aGF0IHRoZXkgd2VyZSBy
ZWNvcmRpbmcgYmVmb3JlLCBidXQgYWxzbyBpbmNsdWRlIHRoaXMgbmV3IAorICAgICAgICByZXNv
dXJjZSB1c2UgY291bnQgaW5mb3JtYXRpb24uCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGlu
ZyB0ZXN0cy4KIAogICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZC5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlJl
cGxheWVyRGVsZWdhdGU6OmRpZENvbXBsZXRlUmVwbGF5aW5nKTogU2VlIHRoZSBXZWJDb3JlIENo
YW5nZUxvZyBmb3IgYW4KLSAgICAgICAgZXhwbGFuYXRpb24gb2YgdGhpcy4KLSAgICAgICAgKFdl
YktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6cmVsZWFzZVJlbW90ZVJlc291cmNlKTogUGFz
cyB0aGUgdXNlIGNvdW50IHRvIHRoZSBSZW1vdGVSZXNvdXJjZUNhY2hlLgotICAgICAgICAqIEdQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oOiBBZGQgdGhlIHVzZSBj
b3VudCBmaWVsZC4KLSAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQubWVzc2FnZXMuaW46IERpdHRvLgotICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhp
Y3MvUmVtb3RlUmVzb3VyY2VDYWNoZS5jcHA6Ci0gICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlc291
cmNlQ2FjaGU6OmNhY2hlSW1hZ2VCdWZmZXIpOiBJdCdzIGFjdHVhbGx5IG9rYXkgaWYgdGhlcmUn
cyBhbHJlYWR5IGFuIHJlc291cmNlIGNhY2hlZC4KLSAgICAgICAgVGhhdCBqdXN0IG1lYW5zIHRo
YXQgdGhlIHdlYiBwcm9jZXNzIHN0YXJ0ZWQgdXNpbmcgYSByZXNvdXJjZSBhZ2FpbiBiZWZvcmUg
dGhlIEdQVSBwcm9jZXNzIGNvbnN1bWVkIGFsbAotICAgICAgICBjb21tYW5kcyB0aGF0IHVzZWQg
aXQgdGhlIGZpcnN0IHRpbWUuIEFsbCB3ZSBuZWVkIHRvIGRvIGlzIGluY3JlbWVudCB0aGUgb3Bl
biBjb3VudC4KLSAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVzb3VyY2VDYWNoZTo6Y2FjaGVOYXRp
dmVJbWFnZSk6IERpdHRvLgotICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZXNvdXJjZUNhY2hlOjpj
YWNoZUZvbnQpOiBEaXR0by4KLSAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVzb3VyY2VDYWNoZTo6
aW5jcmVtZW50T3BlbkNvdW50KToKLSAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVzb3VyY2VDYWNo
ZTo6bWF5YmVSZW1vdmVSZXNvdXJjZSk6IFRoaXMgaXMgY2FsbGVkIHdoZW5ldmVyIGl0J3MgcG9z
c2libGUgZm9yIHVzIHRvIGJlIGluCi0gICAgICAgIHNpdHVhdGlvbiB3aGVyZSB3ZSBzaG91bGQg
YmUgcmVtb3ZpbmcgYSByZXNvdXJjZSAoYWthIHdoZW5ldmVyIHRoZSB1c2UgY291bnQgaW5jcmVt
ZW50cykuIEl0IGNoZWNrcyB0byBzZWUKLSAgICAgICAgaWYgd2UgY2FuIHJlbW92ZSB0aGUgcmVz
b3VyY2UsIGFuZCBpZiBpdCBjYW4sIGRvZXMgc28uCi0gICAgICAgIChXZWJLaXQ6OlJlbW90ZVJl
c291cmNlQ2FjaGU6OnJlY29yZFJlc291cmNlVXNlKTogVGhlIGNhbGxiYWNrIHRoYXQgcnVucyBm
b3IgZWFjaCByZXNvdXJjZSB1c2UgZHVyaW5nCi0gICAgICAgIHJlcGxheWluZy4gSXQgY2FuJ3Qg
YWN0dWFsbHkgZGVsZXRlIGFueSByZXNvdXJjZXMsIHNvIGluc3RlYWQgaXQganVzdCByZWNvcmRz
IHdoaWNoIHJlc291cmNlcyBoYWQgdGhlaXIKLSAgICAgICAgdXNlIGNvdW50cyBpbmNyZW1lbnRl
ZCwgYW5kIHdhaXRzIGZvciBwcnVuZSgpIHRvIGFjdHVhbGx5IGNhbGwgbWF5YmVSZW1vdmVSZXNv
dXJjZSgpLgotICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZXNvdXJjZUNhY2hlOjpwcnVuZSk6IEFm
dGVyIHRoZSByZXBsYXkgaXMgY29tcGxldGUsIGNhbGwgbWF5YmVSZW1vdmVSZXNvdXJjZSgpIG9u
IGFsbCB0aGUKLSAgICAgICAgcmVzb3VyY2VzIHdoaWNoIGhhZCB0aGVpciB1c2UgY291bnRlcnMg
dG91Y2hlZC4KLSAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVzb3VyY2VDYWNoZTo6cmVsZWFzZVJl
bW90ZVJlc291cmNlKTogUHV0IHRoZSByZWxldmFudCByZXNvdXJjZSBpbnRvIHRoZSBzdGF0ZSB3
aGVyZSB3ZQotICAgICAgICBhcmUgd2FpdGluZyBmb3IgdGhlIHVzZSBjb3VudGVycyB0byBtYXRj
aCBiZWZvcmUgd2UgY2FuIGRlbGV0ZSB0aGUgcmVzb3VyY2UuIEFsc28sIGNhbGwgbWF5YmVSZW1v
dmVSZXNvdXJjZSgpCi0gICAgICAgIHNvIGl0IGNhbiBiZSBkZWxldGVkIGltbWVkaWF0ZWx5IGlm
IHRoZSBjb3VudGVycyBhbHJlYWR5IG1hdGNoLgotICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhp
Y3MvUmVtb3RlUmVzb3VyY2VDYWNoZS5oOiBBZGQgYSBuZXcgZGF0YSBzdHJ1Y3R1cmUgdG8gaG9s
ZCB0aGUgdXNlIGNvdW50ZXJzLiBUaGVyZSdzCi0gICAgICAgIGEgYmlnIGNvbW1lbnQgaW4gaGVy
ZSB0aGF0IGRlc2NyaWJlcyB3aGF0IHRoZXNlIGZpZWxkcyBtZWFuLgotICAgICAgICAqIFdlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaDoKLSAgICAgICAgKFdl
YktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6flJlbW90ZUltYWdlQnVmZmVyUHJveHkpOiBT
ZW5kIGEgZHVtbXkgdXNlIGNvdW50IGZvciBub3cuIFRoaXMgd2lsbCBiZQotICAgICAgICBpbXBs
ZW1lbnRlZCBpbiBhIGZvbGxvdy11cCBwYXRjaC4KLSAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9n
cmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwOgotICAgICAgICAoV2ViS2l0
OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnJlbGVhc2VSZW1vdGVSZXNvdXJjZSk6IEFk
ZCB0aGUgdXNlQ291bnQgcGFyYW1ldGVyLgotICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBo
aWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oOiBEaXR0by4KKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVwbGF5ZXJEZWxlZ2F0ZTo6YXBwbHkpOgogICAg
ICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5j
cHA6Ci0gICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlc291cmNlQ2FjaGVQcm94eTo6cmVsZWFzZU5h
dGl2ZUltYWdlKTogU2VuZCBhIGR1bW15IHVzZSBjb3VudCBmb3Igbm93LiBUaGlzIHdpbGwgYmUK
LSAgICAgICAgaW1wbGVtZW50ZWQgaW4gYSBmb2xsb3ctdXAgcGF0Y2guCi0gICAgICAgIChXZWJL
aXQ6OlJlbW90ZVJlc291cmNlQ2FjaGVQcm94eTo6Y2xlYXJGb250TWFwKTogRGl0dG8uCi0gICAg
ICAgIChXZWJLaXQ6OlJlbW90ZVJlc291cmNlQ2FjaGVQcm94eTo6ZmluYWxpemVSZW5kZXJpbmdV
cGRhdGVGb3JGb250cyk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZXNvdXJjZUNh
Y2hlUHJveHk6On5SZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVSZXNvdXJjZUNhY2hlUHJveHk6OmNhY2hlTmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHk6OmNhY2hlRm9udCk6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZVJlc291cmNlQ2FjaGVQcm94eTo6cmVsZWFzZU5hdGl2ZUltYWdlKToKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5OjpjbGVhckZvbnRNYXApOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHk6OmZpbmFsaXplUmVuZGVyaW5n
VXBkYXRlRm9yRm9udHMpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90
ZVJlc291cmNlQ2FjaGVQcm94eS5oOgogCiAyMDIxLTA3LTIyICBEZXZpbiBSb3Vzc28gIDxkcm91
c3NvQGFwcGxlLmNvbT4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dy
YXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCmluZGV4IGMxMDZmNDJjYzRm
My4uNDkxY2ExMGJkYjBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCkBAIC0xOTMsNyArMTkz
LDIyIEBAIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlJlcGxheWVyRGVsZWdhdGU6OlJlcGxheWVy
RGVsZWdhdGUoV2ViQ29yZTo6SW1hZ2VCdWZmZXImCiAKIGJvb2wgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6UmVwbGF5ZXJEZWxlZ2F0ZTo6YXBwbHkoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1I
YW5kbGUgaXRlbSwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQpCiB7
Ci0gICAgLy8gRklYTUU6IEluc3BlY3QgdGhlIGl0ZW0gYW5kIHJlY29yZCByZXNvdXJjZSB1c2Ug
aGVyZS4KKyAgICBhdXRvJiByZW1vdGVSZXNvdXJjZUNhY2hlID0gbV9yZW1vdGVSZW5kZXJpbmdC
YWNrZW5kLnJlbW90ZVJlc291cmNlQ2FjaGUoKTsKKworICAgIGlmIChpdGVtLmlzPFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzPigpKQorICAgICAgICByZW1vdGVSZXNvdXJjZUNhY2hl
LnJlY29yZFJlc291cmNlVXNlKGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5
cGhzPigpLmZvbnRJZGVudGlmaWVyKCkpOworICAgIGVsc2UgaWYgKGl0ZW0uaXM8V2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRyYXdQYXR0ZXJuPigpKQorICAgICAgICByZW1vdGVSZXNvdXJjZUNhY2hl
LnJlY29yZFJlc291cmNlVXNlKGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0
dGVybj4oKS5pbWFnZUlkZW50aWZpZXIoKSk7CisgICAgZWxzZSBpZiAoaXRlbS5pczxXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd05hdGl2ZUltYWdlPigpKQorICAgICAgICByZW1vdGVSZXNvdXJj
ZUNhY2hlLnJlY29yZFJlc291cmNlVXNlKGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3TmF0aXZlSW1hZ2U+KCkuaW1hZ2VJZGVudGlmaWVyKCkpOworICAgIGVsc2UgaWYgKGl0ZW0u
aXM8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRlPigpKSB7CisgICAgICAgIGF1dG8mIHNl
dFN0YXRlID0gaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRlPigpOworICAg
ICAgICBhdXRvIGNoYW5nZUZsYWdzID0gc2V0U3RhdGUuc3RhdGVDaGFuZ2UoKS5tX2NoYW5nZUZs
YWdzOworICAgICAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlN0cm9rZVBhdHRlcm5DaGFuZ2UpKQorICAgICAgICAgICAgcmVtb3RlUmVzb3VyY2VDYWNo
ZS5yZWNvcmRSZXNvdXJjZVVzZShzZXRTdGF0ZS5zdHJva2VQYXR0ZXJuSW1hZ2VJZGVudGlmaWVy
KCkpOworICAgICAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkZpbGxQYXR0ZXJuQ2hhbmdlKSkKKyAgICAgICAgICAgIHJlbW90ZVJlc291cmNlQ2FjaGUu
cmVjb3JkUmVzb3VyY2VVc2Uoc2V0U3RhdGUuZmlsbFBhdHRlcm5JbWFnZUlkZW50aWZpZXIoKSk7
CisgICAgfQogCiAgICAgYXV0byBhcHBseSA9IFsmXShhdXRvJiYgZGVzdGluYXRpb24pIHsKICAg
ICAgICAgcmV0dXJuIGRlc3RpbmF0aW9uLmFwcGx5KGl0ZW0sIGdyYXBoaWNzQ29udGV4dCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJl
c291cmNlQ2FjaGVQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBo
aWNzL1JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5jcHAKaW5kZXggNDE0ZTE5OTZlOGJjLi40MGVj
MzkyY2FlNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhp
Y3MvUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5jcHAKQEAgLTQxLDgg
KzQxLDggQEAgUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5OjpSZW1vdGVSZXNvdXJjZUNhY2hlUHJv
eHkoUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5JgogCiBSZW1vdGVSZXNvdXJjZUNhY2hlUHJv
eHk6On5SZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkoKQogewotICAgIGZvciAoYXV0byYgaW1hZ2Ug
OiBtX25hdGl2ZUltYWdlcy52YWx1ZXMoKSkKLSAgICAgICAgaW1hZ2UtPnJlbW92ZU9ic2VydmVy
KCp0aGlzKTsKKyAgICBmb3IgKGF1dG8mIG5hdGl2ZUltYWdlU3RhdGUgOiBtX25hdGl2ZUltYWdl
cy52YWx1ZXMoKSkKKyAgICAgICAgbmF0aXZlSW1hZ2VTdGF0ZS5pbWFnZS0+cmVtb3ZlT2JzZXJ2
ZXIoKnRoaXMpOwogfQogCiB2b2lkIFJlbW90ZVJlc291cmNlQ2FjaGVQcm94eTo6Y2FjaGVJbWFn
ZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIpCkBAIC04MCw4ICs4MCwx
MSBAQCBpbmxpbmUgc3RhdGljIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGNyZWF0ZVNoYXJlYWJs
ZUJpdG1hcEZyb21OYXRpdmVJbWFnZShOYXRpdgogCiB2b2lkIFJlbW90ZVJlc291cmNlQ2FjaGVQ
cm94eTo6Y2FjaGVOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgaW1hZ2UpCiB7Ci0gICAgaWYgKG1f
bmF0aXZlSW1hZ2VzLmNvbnRhaW5zKGltYWdlLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigp
KSkKKyAgICBhdXRvIGl0ZXJhdG9yID0gbV9uYXRpdmVJbWFnZXMuZmluZChpbWFnZS5yZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIoKSk7CisgICAgaWYgKGl0ZXJhdG9yICE9IG1fbmF0aXZlSW1h
Z2VzLmVuZCgpKSB7CisgICAgICAgICsraXRlcmF0b3ItPnZhbHVlLnVzZUNvdW50OwogICAgICAg
ICByZXR1cm47CisgICAgfQogCiAgICAgYXV0byBiaXRtYXAgPSBjcmVhdGVTaGFyZWFibGVCaXRt
YXBGcm9tTmF0aXZlSW1hZ2UoaW1hZ2UpOwogICAgIGlmICghYml0bWFwKQpAQCAtOTIsNyArOTUs
NyBAQCB2b2lkIFJlbW90ZVJlc291cmNlQ2FjaGVQcm94eTo6Y2FjaGVOYXRpdmVJbWFnZShOYXRp
dmVJbWFnZSYgaW1hZ2UpCiAgICAgaWYgKGhhbmRsZS5pc051bGwoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgbV9uYXRpdmVJbWFnZXMuYWRkKGltYWdlLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllcigpLCBtYWtlV2Vha1B0cihpbWFnZSkpOworICAgIG1fbmF0aXZlSW1hZ2VzLmFkZChpbWFn
ZS5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgTmF0aXZlSW1hZ2VTdGF0ZSB7IG1ha2VX
ZWFrUHRyKGltYWdlKSwgMSB9KTsKIAogICAgIC8vIFNldCBpdHNlbGYgYXMgYW4gb2JzZXJ2ZXIg
dG8gTmF0aXZlSW1hZ2UsIHNvIHJlbGVhc2VOYXRpdmVJbWFnZSgpCiAgICAgLy8gZ2V0cyBjYWxs
ZWQgd2hlbiBOYXRpdmVJbWFnZSBpcyBiZWluZyBkZWxlbGV0ZWQuCkBAIC0xMDQsMjQgKzEwNywz
MCBAQCB2b2lkIFJlbW90ZVJlc291cmNlQ2FjaGVQcm94eTo6Y2FjaGVOYXRpdmVJbWFnZShOYXRp
dmVJbWFnZSYgaW1hZ2UpCiAKIHZvaWQgUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5OjpjYWNoZUZv
bnQoRm9udCYgZm9udCkKIHsKLSAgICBhdXRvIHJlc3VsdCA9IG1fZm9udElkZW50aWZpZXJUb0xh
c3RSZW5kZXJpbmdVcGRhdGVWZXJzaW9uTWFwLmVuc3VyZShmb250LnJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcigpLCBbJl0gewotICAgICAgICByZXR1cm4gMDsKKyAgICBhdXRvIHJlc3VsdCA9
IG1fZm9udHMuZW5zdXJlKGZvbnQucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIFsmXSB7
CisgICAgICAgIHJldHVybiBGb250U3RhdGUgeyAwLCAwIH07CiAgICAgfSk7Ci0gICAgYXV0byYg
bGFzdFZlcnNpb24gPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwotICAgIGlmIChsYXN0VmVyc2lv
biAhPSBtX2N1cnJlbnRSZW5kZXJpbmdVcGRhdGVWZXJzaW9uKSB7Ci0gICAgICAgIGxhc3RWZXJz
aW9uID0gbV9jdXJyZW50UmVuZGVyaW5nVXBkYXRlVmVyc2lvbjsKKyAgICBhdXRvJiBjdXJyZW50
U3RhdGUgPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOworICAgIGlmIChjdXJyZW50U3RhdGUubGFz
dFJlbmRlcmluZ1VwZGF0ZVZlcnNpb25Vc2VkV2l0aGluICE9IG1fY3VycmVudFJlbmRlcmluZ1Vw
ZGF0ZVZlcnNpb24pIHsKKyAgICAgICAgY3VycmVudFN0YXRlLmxhc3RSZW5kZXJpbmdVcGRhdGVW
ZXJzaW9uVXNlZFdpdGhpbiA9IG1fY3VycmVudFJlbmRlcmluZ1VwZGF0ZVZlcnNpb247CiAgICAg
ICAgICsrbV9udW1iZXJPZkZvbnRzVXNlZEluQ3VycmVudFJlbmRlcmluZ1VwZGF0ZTsKICAgICB9
CisgICAgKytjdXJyZW50U3RhdGUudXNlQ291bnQ7CiAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5
KQogICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jYWNoZUZvbnQobWFrZVJl
Zihmb250KSk7CiB9CiAKIHZvaWQgUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5OjpyZWxlYXNlTmF0
aXZlSW1hZ2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllcikKIHsKLSAgICBpZiAoIW1fbmF0aXZlSW1hZ2VzLnJlbW92ZShyZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIpKQotICAgICAgICByZXR1cm47CisgICAgYXV0byBpdGVyYXRvciA9IG1f
bmF0aXZlSW1hZ2VzLmZpbmQocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKKyAgICBSRUxF
QVNFX0FTU0VSVChpdGVyYXRvciAhPSBtX25hdGl2ZUltYWdlcy5lbmQoKSk7CisKKyAgICBhdXRv
IHVzZUNvdW50ID0gaXRlcmF0b3ItPnZhbHVlLnVzZUNvdW50OworCisgICAgYXV0byBzdWNjZXNz
ID0gbV9uYXRpdmVJbWFnZXMucmVtb3ZlKGl0ZXJhdG9yKTsKKyAgICBBU1NFUlRfVU5VU0VEKHN1
Y2Nlc3MsIHN1Y2Nlc3MpOwogCi0gICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkucmVs
ZWFzZVJlbW90ZVJlc291cmNlKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgMCk7IC8vIEZJ
WE1FOiBQYXNzIHRoZSByZWFsIHVzZSBjb3VudCBoZXJlLgorICAgIG1fcmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5LnJlbGVhc2VSZW1vdGVSZXNvdXJjZShyZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIsIHVzZUNvdW50KTsKIH0KIAogdm9pZCBSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHk6OnBy
ZXBhcmVGb3JOZXh0UmVuZGVyaW5nVXBkYXRlKCkKQEAgLTEzMiw5ICsxNDEsOSBAQCB2b2lkIFJl
bW90ZVJlc291cmNlQ2FjaGVQcm94eTo6cHJlcGFyZUZvck5leHRSZW5kZXJpbmdVcGRhdGUoKQog
CiB2b2lkIFJlbW90ZVJlc291cmNlQ2FjaGVQcm94eTo6Y2xlYXJGb250TWFwKCkKIHsKLSAgICBm
b3IgKGF1dG8mIGl0ZW0gOiBtX2ZvbnRJZGVudGlmaWVyVG9MYXN0UmVuZGVyaW5nVXBkYXRlVmVy
c2lvbk1hcCkKLSAgICAgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkucmVsZWFzZVJl
bW90ZVJlc291cmNlKGl0ZW0ua2V5LCAwKTsgLy8gRklYTUU6IFBhc3MgdGhlIHJlYWwgdXNlIGNv
dW50IGhlcmUuCi0gICAgbV9mb250SWRlbnRpZmllclRvTGFzdFJlbmRlcmluZ1VwZGF0ZVZlcnNp
b25NYXAuY2xlYXIoKTsKKyAgICBmb3IgKGF1dG8mIGZvbnRTdGF0ZSA6IG1fZm9udHMpCisgICAg
ICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LnJlbGVhc2VSZW1vdGVSZXNvdXJjZShm
b250U3RhdGUua2V5LCBmb250U3RhdGUudmFsdWUudXNlQ291bnQpOworICAgIG1fZm9udHMuY2xl
YXIoKTsKICAgICBtX251bWJlck9mRm9udHNVc2VkSW5DdXJyZW50UmVuZGVyaW5nVXBkYXRlID0g
MDsKIH0KIApAQCAtMTQyLDIwICsxNTEsMjAgQEAgdm9pZCBSZW1vdGVSZXNvdXJjZUNhY2hlUHJv
eHk6OmZpbmFsaXplUmVuZGVyaW5nVXBkYXRlRm9yRm9udHMoKQogewogICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgbWluaW11bVJlbmRlcmluZ1VwZGF0ZUNvdW50VG9LZWVwRm9udEFsaXZl
ID0gNDsKIAotICAgIHVuc2lnbmVkIHRvdGFsRm9udENvdW50ID0gbV9mb250SWRlbnRpZmllclRv
TGFzdFJlbmRlcmluZ1VwZGF0ZVZlcnNpb25NYXAuc2l6ZSgpOworICAgIHVuc2lnbmVkIHRvdGFs
Rm9udENvdW50ID0gbV9mb250cy5zaXplKCk7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9udW1iZXJP
ZkZvbnRzVXNlZEluQ3VycmVudFJlbmRlcmluZ1VwZGF0ZSA8PSB0b3RhbEZvbnRDb3VudCk7CiAg
ICAgaWYgKHRvdGFsRm9udENvdW50ID09IG1fbnVtYmVyT2ZGb250c1VzZWRJbkN1cnJlbnRSZW5k
ZXJpbmdVcGRhdGUpCiAgICAgICAgIHJldHVybjsKIAogICAgIEhhc2hTZXQ8V2ViQ29yZTo6UmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyPiB0b1JlbW92ZTsKLSAgICBmb3IgKGF1dG8mIGl0ZW0g
OiBtX2ZvbnRJZGVudGlmaWVyVG9MYXN0UmVuZGVyaW5nVXBkYXRlVmVyc2lvbk1hcCkgewotICAg
ICAgICBpZiAobV9jdXJyZW50UmVuZGVyaW5nVXBkYXRlVmVyc2lvbiAtIGl0ZW0udmFsdWUgPj0g
bWluaW11bVJlbmRlcmluZ1VwZGF0ZUNvdW50VG9LZWVwRm9udEFsaXZlKSB7CisgICAgZm9yIChh
dXRvJiBpdGVtIDogbV9mb250cykgeworICAgICAgICBpZiAobV9jdXJyZW50UmVuZGVyaW5nVXBk
YXRlVmVyc2lvbiAtIGl0ZW0udmFsdWUubGFzdFJlbmRlcmluZ1VwZGF0ZVZlcnNpb25Vc2VkV2l0
aGluID49IG1pbmltdW1SZW5kZXJpbmdVcGRhdGVDb3VudFRvS2VlcEZvbnRBbGl2ZSkgewogICAg
ICAgICAgICAgdG9SZW1vdmUuYWRkKGl0ZW0ua2V5KTsKLSAgICAgICAgICAgIG1fcmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5LnJlbGVhc2VSZW1vdGVSZXNvdXJjZShpdGVtLmtleSwgMCk7IC8v
IEZJWE1FOiBQYXNzIHRoZSByZWFsIHVzZSBjb3VudCBoZXJlLgorICAgICAgICAgICAgbV9yZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkucmVsZWFzZVJlbW90ZVJlc291cmNlKGl0ZW0ua2V5LCBp
dGVtLnZhbHVlLnVzZUNvdW50KTsKICAgICAgICAgfQogICAgIH0KIAotICAgIG1fZm9udElkZW50
aWZpZXJUb0xhc3RSZW5kZXJpbmdVcGRhdGVWZXJzaW9uTWFwLnJlbW92ZUlmKFsmXShjb25zdCBh
dXRvJiBidWNrZXQpIHsKKyAgICBtX2ZvbnRzLnJlbW92ZUlmKFsmXShjb25zdCBhdXRvJiBidWNr
ZXQpIHsKICAgICAgICAgcmV0dXJuIHRvUmVtb3ZlLmNvbnRhaW5zKGJ1Y2tldC5rZXkpOwogICAg
IH0pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9SZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmgKaW5kZXggNmQ3MzFjNGNjNWVm
Li44ZDExMTljYWI5MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
Z3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkuaApAQCAtNTAs
OCArNTAsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZWxlYXNlSW1hZ2VCdWZmZXIoV2ViQ29yZTo6
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKIAogICAgIHZvaWQgY2FjaGVOYXRpdmVJbWFn
ZShXZWJDb3JlOjpOYXRpdmVJbWFnZSYpOwotCiAgICAgdm9pZCBjYWNoZUZvbnQoV2ViQ29yZTo6
Rm9udCYpOworCiAgICAgdm9pZCBkaWRGaW5hbGl6ZVJlbmRlcmluZ1VwZGF0ZSgpOwogCiAgICAg
dm9pZCByZW1vdGVSZXNvdXJjZUNhY2hlV2FzRGVzdHJveWVkKCk7CkBAIC01OSw3ICs1OSwxOCBA
QCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgdXNpbmcgSW1hZ2VCdWZmZXJIYXNoTWFwID0gSGFz
aE1hcDxXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIFdlYWtQdHI8V2ViQ29y
ZTo6SW1hZ2VCdWZmZXI+PjsKLSAgICB1c2luZyBOYXRpdmVJbWFnZUhhc2hNYXAgPSBIYXNoTWFw
PFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgV2Vha1B0cjxXZWJDb3JlOjpO
YXRpdmVJbWFnZT4+OworCisgICAgc3RydWN0IE5hdGl2ZUltYWdlU3RhdGUgeworICAgICAgICBX
ZWFrUHRyPFdlYkNvcmU6Ok5hdGl2ZUltYWdlPiBpbWFnZTsKKyAgICAgICAgdWludDY0X3QgdXNl
Q291bnQ7CisgICAgfTsKKyAgICB1c2luZyBOYXRpdmVJbWFnZUhhc2hNYXAgPSBIYXNoTWFwPFdl
YkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgTmF0aXZlSW1hZ2VTdGF0ZT47CisK
KyAgICBzdHJ1Y3QgRm9udFN0YXRlIHsKKyAgICAgICAgdWludDY0X3QgbGFzdFJlbmRlcmluZ1Vw
ZGF0ZVZlcnNpb25Vc2VkV2l0aGluOworICAgICAgICB1aW50NjRfdCB1c2VDb3VudDsKKyAgICB9
OworICAgIHVzaW5nIEZvbnRIYXNoTWFwID0gSGFzaE1hcDxXZWJDb3JlOjpSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIsIEZvbnRTdGF0ZT47CiAgICAgCiAgICAgdm9pZCByZWxlYXNlTmF0aXZl
SW1hZ2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSBvdmVycmlkZTsKICAg
ICB2b2lkIGZpbmFsaXplUmVuZGVyaW5nVXBkYXRlRm9yRm9udHMoKTsKQEAgLTY4LDggKzc5LDcg
QEAgcHJpdmF0ZToKIAogICAgIEltYWdlQnVmZmVySGFzaE1hcCBtX2ltYWdlQnVmZmVyczsKICAg
ICBOYXRpdmVJbWFnZUhhc2hNYXAgbV9uYXRpdmVJbWFnZXM7Ci0KLSAgICBIYXNoTWFwPFdlYkNv
cmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgdWludDY0X3Q+IG1fZm9udElkZW50aWZp
ZXJUb0xhc3RSZW5kZXJpbmdVcGRhdGVWZXJzaW9uTWFwOworICAgIEZvbnRIYXNoTWFwIG1fZm9u
dHM7CiAgICAgdW5zaWduZWQgbV9udW1iZXJPZkZvbnRzVXNlZEluQ3VycmVudFJlbmRlcmluZ1Vw
ZGF0ZSB7IDAgfTsKICAgICB1aW50NjRfdCBtX2N1cnJlbnRSZW5kZXJpbmdVcGRhdGVWZXJzaW9u
IHsgMSB9OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434071</attachid>
            <date>2021-07-23 00:46:41 -0700</date>
            <delta_ts>2021-07-26 18:43:13 -0700</delta_ts>
            <desc>Patch for EWS</desc>
            <filename>bug-228224-20210723004640.patch</filename>
            <type>text/plain</type>
            <size>31643</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMjE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDljMzQ2MjdiM2Y4MjljZDVh
YzM1MTllOTBiZjVlYWM5ODBlNGU3YTUuLmYzNmM5ZDViOTE1YTE0NDRkMDQ0NTM3YmY3NzI3ODhj
ZDNjZDM4YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMjEtMDctMjMgIE15bGVzIEMu
IE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IFN0YXJ0IHRyYWNraW5nIHJlc291cmNlIHVzZXMgZm9yIE5hdGl2ZUltYWdlcyBhbmQgRm9udHMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyODIyNAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMg
cGFydCAzIG9mIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjgyMTYu
CisKKyAgICAgICAgVGhpcyBwYXRjaCB0cmlnZ2VycyB0aGUgaW5mcmFzdHJ1Y3R1cmUgYWRkZWQg
aW4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyODIyMiBieSB0cmFj
a2luZworICAgICAgICByZXNvdXJjZSB1c2UgY291bnRzIGluIHRoZSB3ZWIgcHJvY2Vzcy4gUmVt
b3RlUmVzb3VyY2VDYWNoZVByb3h5IGFscmVhZHkgaXMgbm90aWZpZWQgd2hlbmV2ZXIgYSByZXNv
dXJjZQorICAgICAgICBpcyB1c2VkLCBzbyBpdCByZWNvcmRzIGhvdyBtYW55IG9mIHRoZXNlIG5v
dGlmaWNhdGlvbnMgaXQgcmVjZWl2ZXMsIGFuZCBzZW5kcyB0aGF0IGNvdW50IHRvIHRoZSBHUFUg
cHJvY2VzcworICAgICAgICB3aXRoIHRoZSByZWxlYXNlIG1lc3NhZ2UuIFRoaXMgcGF0Y2ggZXh0
ZW5kcyB0aGUgZXhpc3RpbmcgcmVzb3VyY2UgdHJhY2tpbmcgSGFzaE1hcHMgdXNlZCBpbgorICAg
ICAgICBSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkgdG8gY29udGludWUgdG8gcmVjb3JkIHdoYXQg
dGhleSB3ZXJlIHJlY29yZGluZyBiZWZvcmUsIGJ1dCBhbHNvIGluY2x1ZGUgdGhpcyBuZXcgCisg
ICAgICAgIHJlc291cmNlIHVzZSBjb3VudCBpbmZvcm1hdGlvbi4KKworICAgICAgICBDb3ZlcmVk
IGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5n
QmFja2VuZDo6UmVwbGF5ZXJEZWxlZ2F0ZTo6YXBwbHkpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZVJlc291cmNlQ2FjaGVQcm94eTo6flJlbW90ZVJlc291cmNlQ2FjaGVQcm94eSk6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlc291cmNlQ2FjaGVQcm94eTo6Y2FjaGVOYXRpdmVJ
bWFnZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlc291cmNlQ2FjaGVQcm94eTo6Y2FjaGVG
b250KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5OjpyZWxlYXNl
TmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHk6
OmNsZWFyRm9udE1hcCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlc291cmNlQ2FjaGVQcm94
eTo6ZmluYWxpemVSZW5kZXJpbmdVcGRhdGVGb3JGb250cyk6CisgICAgICAgICogV2ViUHJvY2Vz
cy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5Lmg6CisKIDIwMjEtMDctMjIg
IERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgogCiAgICAgICAgIFtMaXZlIFRleHRd
IFtpT1NdIEFuYWx5c2lzIHNob3VsZCBhbHNvIHNlYXJjaCBmb3IgYW55IEFwcCBDbGlwIGNvZGVz
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAKaW5kZXggZjM3MGI0MTE4
ZDAyNDNhMWIyOWJiYTAyMTBmODk3NDcyOTM3YTg1My4uMzU2MWRhMGJkMTIyNmNiYzk1MjdlYWZl
ZDEzNDU3N2RkZjhkM2UzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVy
LmNwcApAQCAtMjMyLDYgKzIzMiw5IEBAIFJlcGxheVJlc3VsdCBSZXBsYXllcjo6cmVwbGF5KGNv
bnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGJvb2wgdHJhY2tSZXBsYXlMaXN0CiAgICAgICAg
IH0KICAgICB9CiAKKyAgICBpZiAobV9kZWxlZ2F0ZSkKKyAgICAgICAgbV9kZWxlZ2F0ZS0+ZGlk
Q29tcGxldGVSZXBsYXlpbmcoKTsKKwogICAgIHJlc3VsdC50cmFja2VkRGlzcGxheUxpc3QgPSBX
VEZNb3ZlKHJlcGxheUxpc3QpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RS
ZXBsYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaAppbmRleCAxNjYyN2EwMjA2ZTMwOTI0M2Y4YjdiZDE4Y2Ri
M2RhNTg2MDc4YThmLi41NzkzOWVlOTc3ZWQ0ZWM0NThhMGQ0NTkyZDlkY2RiNzJhZmNmMDMwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RSZXBsYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmgKQEAgLTY4LDYgKzY4LDcgQEAg
cHVibGljOgogICAgICAgICB2aXJ0dWFsIGJvb2wgYXBwbHkoSXRlbUhhbmRsZSwgR3JhcGhpY3ND
b250ZXh0JikgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGRpZENyZWF0
ZU1hc2tJbWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYpIHsgfQogICAgICAgICB2aXJ0
dWFsIHZvaWQgZGlkUmVzZXRNYXNrSW1hZ2VCdWZmZXIoKSB7IH0KKyAgICAgICAgdmlydHVhbCB2
b2lkIGRpZENvbXBsZXRlUmVwbGF5aW5nKCkgeyB9CiAgICAgfTsKICAgICAKIHByaXZhdGU6CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VC
dWZmZXIuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1
ZmZlci5oCmluZGV4IGQyZjk1YmQ5NmNhYzA0MGY2MTIyY2I0ODBjZTg4YmUxZGFjMGQxZDEuLmNi
M2Y4ZTgzNWQwYzgwYTdhNTI3NjlhNGQ2MjA3ZDc4YTU4ODRiNDIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlci5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlci5oCkBAIC0z
OCw3ICszOCw3IEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogdGVtcGxhdGU8dHlwZW5hbWUgQmFj
a2VuZFR5cGU+Ci1jbGFzcyBSZW1vdGVJbWFnZUJ1ZmZlciA6IHB1YmxpYyBXZWJDb3JlOjpDb25j
cmV0ZUltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPiwgcHVibGljIFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZXBsYXllcjo6RGVsZWdhdGUgeworY2xhc3MgUmVtb3RlSW1hZ2VCdWZmZXIgOiBwdWJsaWMg
V2ViQ29yZTo6Q29uY3JldGVJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT4gewogICAgIHVzaW5nIEJh
c2VDb25jcmV0ZUltYWdlQnVmZmVyID0gV2ViQ29yZTo6Q29uY3JldGVJbWFnZUJ1ZmZlcjxCYWNr
ZW5kVHlwZT47CiAgICAgdXNpbmcgQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXI6OmNvbnRleHQ7CiAg
ICAgdXNpbmcgQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXI6Om1fYmFja2VuZDsKQEAgLTc1LDcgKzc1
LDkgQEAgcHVibGljOgogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgYm9vbCBhcHBseShXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZSBpdGVtLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpIG92ZXJyaWRlCisgICAgZnJpZW5kIGNsYXNzIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ7CisKKyAgICBib29sIGFwcGx5KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlIGl0
ZW0sIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKICAgICB7CiAgICAgICAgIGlm
IChpdGVtLmlzPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpHZXRQaXhlbEJ1ZmZlcj4oKSkgewogICAg
ICAgICAgICAgYXV0byYgZ2V0UGl4ZWxCdWZmZXJJdGVtID0gaXRlbS5nZXQ8V2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkdldFBpeGVsQnVmZmVyPigpOwpAQCAtMTA4LDE2ICsxMTAsNiBAQCBwcml2YXRl
OgogICAgICAgICByZXR1cm4gbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmFwcGx5TWVkaWFJdGVt
KGl0ZW0sIGNvbnRleHQpOwogICAgIH0KIAotICAgIHZvaWQgZGlkQ3JlYXRlTWFza0ltYWdlQnVm
ZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlcikgZmluYWwKLSAgICB7Ci0gICAg
ICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZC5kaWRDcmVhdGVNYXNrSW1hZ2VCdWZmZXIoaW1h
Z2VCdWZmZXIpOwotICAgIH0KLQotICAgIHZvaWQgZGlkUmVzZXRNYXNrSW1hZ2VCdWZmZXIoKSBm
aW5hbAotICAgIHsKLSAgICAgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmRpZFJlc2V0TWFz
a0ltYWdlQnVmZmVyKCk7Ci0gICAgfQotCiAgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCYgbV9y
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOwogICAgIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllciBtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcjsKIH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZC5jcHAKaW5kZXggYTVlZGY5MWE3YjU0MmM1ZjZiZTcyNzgxMDI5ZDhkYTFjNmU2NTJjMi4u
NDkxY2ExMGJkYjBjZGMwODZiNDU1OGI3OWQ4YTVmYTMxYTRlMzUwZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdC
YWNrZW5kLmNwcApAQCAtMTg0LDE2ICsxODQsNjMgQEAgdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBSZW4K
ICAgICAgICAgd2FrZVVwQW5kQXBwbHlEaXNwbGF5TGlzdChzdGQ6OmV4Y2hhbmdlKG1fcGVuZGlu
Z1dha2V1cEluZm8sIHN0ZDo6bnVsbG9wdCktPmFyZ3VtZW50cyk7CiB9CiAKK1JlbW90ZVJlbmRl
cmluZ0JhY2tlbmQ6OlJlcGxheWVyRGVsZWdhdGU6OlJlcGxheWVyRGVsZWdhdGUoV2ViQ29yZTo6
SW1hZ2VCdWZmZXImIGRlc3RpbmF0aW9uLCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kJiByZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kLCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiBncHVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzKQorICAgIDogbV9kZXN0aW5hdGlvbihkZXN0aW5hdGlvbikKKyAgICAsIG1f
cmVtb3RlUmVuZGVyaW5nQmFja2VuZChyZW1vdGVSZW5kZXJpbmdCYWNrZW5kKQorICAgICwgbV9n
cHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MpCit7Cit9
CisKK2Jvb2wgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVwbGF5ZXJEZWxlZ2F0ZTo6YXBwbHko
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGUgaXRlbSwgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0JiBncmFwaGljc0NvbnRleHQpCit7CisgICAgYXV0byYgcmVtb3RlUmVzb3VyY2VDYWNo
ZSA9IG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZC5yZW1vdGVSZXNvdXJjZUNhY2hlKCk7CisKKyAg
ICBpZiAoaXRlbS5pczxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBocz4oKSkKKyAgICAg
ICAgcmVtb3RlUmVzb3VyY2VDYWNoZS5yZWNvcmRSZXNvdXJjZVVzZShpdGVtLmdldDxXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd0dseXBocz4oKS5mb250SWRlbnRpZmllcigpKTsKKyAgICBlbHNl
IGlmIChpdGVtLmlzPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0dGVybj4oKSkKKyAgICAg
ICAgcmVtb3RlUmVzb3VyY2VDYWNoZS5yZWNvcmRSZXNvdXJjZVVzZShpdGVtLmdldDxXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd1BhdHRlcm4+KCkuaW1hZ2VJZGVudGlmaWVyKCkpOworICAgIGVs
c2UgaWYgKGl0ZW0uaXM8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdOYXRpdmVJbWFnZT4oKSkK
KyAgICAgICAgcmVtb3RlUmVzb3VyY2VDYWNoZS5yZWNvcmRSZXNvdXJjZVVzZShpdGVtLmdldDxX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd05hdGl2ZUltYWdlPigpLmltYWdlSWRlbnRpZmllcigp
KTsKKyAgICBlbHNlIGlmIChpdGVtLmlzPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZT4o
KSkgeworICAgICAgICBhdXRvJiBzZXRTdGF0ZSA9IGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTZXRTdGF0ZT4oKTsKKyAgICAgICAgYXV0byBjaGFuZ2VGbGFncyA9IHNldFN0YXRlLnN0
YXRlQ2hhbmdlKCkubV9jaGFuZ2VGbGFnczsKKyAgICAgICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VQYXR0ZXJuQ2hhbmdlKSkKKyAgICAgICAg
ICAgIHJlbW90ZVJlc291cmNlQ2FjaGUucmVjb3JkUmVzb3VyY2VVc2Uoc2V0U3RhdGUuc3Ryb2tl
UGF0dGVybkltYWdlSWRlbnRpZmllcigpKTsKKyAgICAgICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUGF0dGVybkNoYW5nZSkpCisgICAgICAgICAg
ICByZW1vdGVSZXNvdXJjZUNhY2hlLnJlY29yZFJlc291cmNlVXNlKHNldFN0YXRlLmZpbGxQYXR0
ZXJuSW1hZ2VJZGVudGlmaWVyKCkpOworICAgIH0KKworICAgIGF1dG8gYXBwbHkgPSBbJl0oYXV0
byYmIGRlc3RpbmF0aW9uKSB7CisgICAgICAgIHJldHVybiBkZXN0aW5hdGlvbi5hcHBseShpdGVt
LCBncmFwaGljc0NvbnRleHQpOworICAgIH07CisKKyAgICBpZiAobV9kZXN0aW5hdGlvbi5yZW5k
ZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpCisgICAgICAgIHJldHVy
biBhcHBseShzdGF0aWNfY2FzdDxBY2NlbGVyYXRlZFJlbW90ZUltYWdlQnVmZmVyJj4obV9kZXN0
aW5hdGlvbikpOworICAgIHJldHVybiBhcHBseShzdGF0aWNfY2FzdDxVbmFjY2VsZXJhdGVkUmVt
b3RlSW1hZ2VCdWZmZXImPihtX2Rlc3RpbmF0aW9uKSk7Cit9CisKK3ZvaWQgUmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6UmVwbGF5ZXJEZWxlZ2F0ZTo6ZGlkQ3JlYXRlTWFza0ltYWdlQnVmZmVyKFdl
YkNvcmU6OkltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlcikKK3sKKyAgICBtX3JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQuZGlkQ3JlYXRlTWFza0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyKTsKK30KKwordm9p
ZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpSZXBsYXllckRlbGVnYXRlOjpkaWRSZXNldE1hc2tJ
bWFnZUJ1ZmZlcigpCit7CisgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmRpZFJlc2V0TWFz
a0ltYWdlQnVmZmVyKCk7Cit9CisKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVwbGF5
ZXJEZWxlZ2F0ZTo6ZGlkQ29tcGxldGVSZXBsYXlpbmcoKQoreworICAgIGF1dG8gbWVzc2FnZXNB
cmVJbk9yZGVyID0gbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kLnJlbW90ZVJlc291cmNlQ2FjaGUo
KS5wcnVuZSgpOworICAgIE1FU1NBR0VfQ0hFQ0sobWVzc2FnZXNBcmVJbk9yZGVyLCAiV2ViIHBy
b2Nlc3MgdHJpZWQgdG8gcmVsZWFzZSBhIHJlc291cmNlIHRoYXQgd2Fzbid0IGNhY2hlZCIpOwor
fQorCiBEaXNwbGF5TGlzdDo6UmVwbGF5UmVzdWx0IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnN1
Ym1pdChjb25zdCBEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0LCBJbWFnZUJ1
ZmZlciYgZGVzdGluYXRpb24pCiB7CiAgICAgaWYgKGRpc3BsYXlMaXN0LmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIHsgfTsKIAotICAgIERpc3BsYXlMaXN0OjpSZXBsYXllcjo6RGVsZWdhdGUq
IHJlcGxheWVyRGVsZWdhdGUgPSBudWxscHRyOwotICAgIGlmIChkZXN0aW5hdGlvbi5yZW5kZXJp
bmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpCi0gICAgICAgIHJlcGxheWVy
RGVsZWdhdGUgPSBzdGF0aWNfY2FzdDxBY2NlbGVyYXRlZFJlbW90ZUltYWdlQnVmZmVyKj4oJmRl
c3RpbmF0aW9uKTsKLSAgICBlbHNlCi0gICAgICAgIHJlcGxheWVyRGVsZWdhdGUgPSBzdGF0aWNf
Y2FzdDxVbmFjY2VsZXJhdGVkUmVtb3RlSW1hZ2VCdWZmZXIqPigmZGVzdGluYXRpb24pOworICAg
IFJlcGxheWVyRGVsZWdhdGUgcmVwbGF5ZXJEZWxlZ2F0ZShkZXN0aW5hdGlvbiwgKnRoaXMsIG1f
Z3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcyk7CiAKICAgICByZXR1cm4gV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlcGxheWVyIHsKICAgICAgICAgZGVzdGluYXRpb24uY29udGV4dCgpLApAQCAtMjAy
LDcgKzI0OSw3IEBAIERpc3BsYXlMaXN0OjpSZXBsYXlSZXN1bHQgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6c3VibWl0KGNvbnN0IERpc3BsYXlMaXN0OjpEaXNwCiAgICAgICAgICZyZW1vdGVSZXNv
dXJjZUNhY2hlKCkubmF0aXZlSW1hZ2VzKCksCiAgICAgICAgICZyZW1vdGVSZXNvdXJjZUNhY2hl
KCkuZm9udHMoKSwKICAgICAgICAgbV9jdXJyZW50TWFza0ltYWdlQnVmZmVyLmdldCgpLAotICAg
ICAgICByZXBsYXllckRlbGVnYXRlCisgICAgICAgICZyZXBsYXllckRlbGVnYXRlCiAgICAgfS5y
ZXBsYXkoKTsKIH0KIApAQCAtNDgzLDEwICs1MzAsMTEgQEAgdm9pZCBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kOjpkZWxldGVBbGxGb250cygpCiAgICAgbV9yZW1vdGVSZXNvdXJjZUNhY2hlLmRlbGV0
ZUFsbEZvbnRzKCk7CiB9CiAKLXZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6cmVsZWFzZVJl
bW90ZVJlc291cmNlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIpCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnJlbGVhc2VSZW1vdGVS
ZXNvdXJjZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyLCB1aW50NjRfdCB1c2VDb3VudCkKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKLSAgICBtX3JlbW90ZVJlc291cmNlQ2FjaGUucmVsZWFzZVJlbW90ZVJlc291cmNlKHJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CisgICAgYXV0byBzdWNjZXNzID0gbV9yZW1vdGVS
ZXNvdXJjZUNhY2hlLnJlbGVhc2VSZW1vdGVSZXNvdXJjZShyZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIsIHVzZUNvdW50KTsKKyAgICBNRVNTQUdFX0NIRUNLKHN1Y2Nlc3MsICJSZXNvdXJjZSBp
cyBiZWluZyByZWxlYXNlZCBiZWZvcmUgYmVpbmcgY2FjaGVkLiIpOwogICAgIHVwZGF0ZVJlbmRl
cmluZ1Jlc291cmNlUmVxdWVzdCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaAppbmRleCBhMzUx
NjViMTkxMWY5YTkzZjNkNGE4ZGU5MWIxMDFmNzU2OWFiYjIyLi44NzI2MjlmMDI1M2JmNGI2OTM2
ODJiNzAyMjMyODVmZmI2MTM1NmQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKQEAgLTE0NCw5ICsx
NDQsMjQgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNhY2hlTmF0aXZlSW1hZ2UoY29uc3QgU2hhcmVh
YmxlQml0bWFwOjpIYW5kbGUmLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIp
OwogICAgIHZvaWQgY2FjaGVGb250KFJlZjxXZWJDb3JlOjpGb250PiYmKTsKICAgICB2b2lkIGRl
bGV0ZUFsbEZvbnRzKCk7Ci0gICAgdm9pZCByZWxlYXNlUmVtb3RlUmVzb3VyY2UoV2ViQ29yZTo6
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKKyAgICB2b2lkIHJlbGVhc2VSZW1vdGVSZXNv
dXJjZShXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIHVpbnQ2NF90IHVzZUNv
dW50KTsKICAgICB2b2lkIGRpZENyZWF0ZVNoYXJlZERpc3BsYXlMaXN0SGFuZGxlKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciwgY29uc3QgU2hhcmVkTWVtb3J5OjpJ
UENIYW5kbGUmLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgZGVzdGluYXRp
b25CdWZmZXJJZGVudGlmaWVyKTsKIAorICAgIGNsYXNzIFJlcGxheWVyRGVsZWdhdGUgOiBwdWJs
aWMgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlcGxheWVyOjpEZWxlZ2F0ZSB7CisgICAgcHVibGlj
OgorICAgICAgICBSZXBsYXllckRlbGVnYXRlKFdlYkNvcmU6OkltYWdlQnVmZmVyJiwgUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZCYsIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmKTsKKworICAgIHBy
aXZhdGU6CisgICAgICAgIGJvb2wgYXBwbHkoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5k
bGUsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYpIGZpbmFsOworICAgICAgICB2b2lkIGRpZENy
ZWF0ZU1hc2tJbWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYpIGZpbmFsOworICAgICAg
ICB2b2lkIGRpZFJlc2V0TWFza0ltYWdlQnVmZmVyKCkgZmluYWw7CisgICAgICAgIHZvaWQgZGlk
Q29tcGxldGVSZXBsYXlpbmcoKSBmaW5hbDsKKworICAgICAgICBXZWJDb3JlOjpJbWFnZUJ1ZmZl
ciYgbV9kZXN0aW5hdGlvbjsKKyAgICAgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCYgbV9yZW1v
dGVSZW5kZXJpbmdCYWNrZW5kOworICAgICAgICBSZWY8R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cz4gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOworICAgIH07CisKICAgICBzdHJ1Y3QgUGVu
ZGluZ1dha2V1cEluZm9ybWF0aW9uIHsKICAgICAgICAgR1BVUHJvY2Vzc1dha2V1cE1lc3NhZ2VB
cmd1bWVudHMgYXJndW1lbnRzOwogICAgICAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcj4gbWlzc2luZ0NhY2hlZFJlc291cmNlSWRlbnRpZmllcjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBo
aWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KaW5kZXggNGIzZmU5YTAyNjJl
OGE1NDkxODUyYzZkNmEwNDA0NWQ2YTY5NjM5Ny4uZmY2MmFmNTExZjNlMmU1Y2ViZjQ3NDFiYjM1
MDMzODQ5NGUzOGViNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBo
aWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4K
QEAgLTM2LDcgKzM2LDcgQEAgbWVzc2FnZXMgLT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZCB7CiAg
ICAgQ2FjaGVGb250KElQQzo6Rm9udFJlZmVyZW5jZSBmb250KQogICAgIERlbGV0ZUFsbEZvbnRz
KCkKICAgICBEaWRDcmVhdGVTaGFyZWREaXNwbGF5TGlzdEhhbmRsZShXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIgaWRlbnRpZmllciwgV2ViS2l0OjpTaGFyZWRNZW1v
cnk6OklQQ0hhbmRsZSBoYW5kbGUsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ciBkZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZpZXIpCi0gICAgUmVsZWFzZVJlbW90ZVJlc291cmNl
KFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIpCisgICAgUmVsZWFzZVJlbW90ZVJlc291cmNlKFdlYkNvcmU6OlJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIHVpbnQ2NF90IHVz
ZUNvdW50KQogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGUuY3Bw
IGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGUu
Y3BwCmluZGV4IDgxZGRlMGJmZmNmMGJkNmNjMWMyOGU1ZGQyNDYzNzRiMzQ2NDYyNzguLjMxYTE5
NGY0YTI4MTEzNjk0ZmU2MWJhZDRiOGMxMWFiODIzZTBiNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZS5jcHAK
QEAgLTMzLDggKzMzLDEwIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiB2b2lkIFJlbW90
ZVJlc291cmNlQ2FjaGU6OmNhY2hlSW1hZ2VCdWZmZXIoUmVmPEltYWdlQnVmZmVyPiYmIGltYWdl
QnVmZmVyKQogewotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlcnMuYWRkKGltYWdl
QnVmZmVyLT5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgV1RGTW92ZShpbWFnZUJ1ZmZl
cikpOwotICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7
CisgICAgYXV0byByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgPSBpbWFnZUJ1ZmZlci0+cmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCk7CisgICAgbV9pbWFnZUJ1ZmZlcnMuYWRkKHJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciwgV1RGTW92ZShpbWFnZUJ1ZmZlcikpOworCisgICAgaW5j
cmVtZW50T3BlbkNvdW50KHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiB9CiAKIEltYWdl
QnVmZmVyKiBSZW1vdGVSZXNvdXJjZUNhY2hlOjpjYWNoZWRJbWFnZUJ1ZmZlcihSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQpAQCAtNDQsMTQg
KzQ2LDI3IEBAIEltYWdlQnVmZmVyKiBSZW1vdGVSZXNvdXJjZUNhY2hlOjpjYWNoZWRJbWFnZUJ1
ZmZlcihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIKIAogdm9pZCBSZW1vdGVSZXNvdXJjZUNh
Y2hlOjpjYWNoZU5hdGl2ZUltYWdlKFJlZjxOYXRpdmVJbWFnZT4mJiBpbWFnZSkKIHsKLSAgICBh
dXRvIGFkZFJlc3VsdCA9IG1fbmF0aXZlSW1hZ2VzLmFkZChpbWFnZS0+cmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyKCksIFdURk1vdmUoaW1hZ2UpKTsKLSAgICBBU1NFUlRfVU5VU0VEKGFkZFJl
c3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgIGF1dG8gcmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyID0gaW1hZ2UtPnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpOworICAgIG1f
bmF0aXZlSW1hZ2VzLmFkZChyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIFdURk1vdmUoaW1h
Z2UpKTsKKworICAgIGluY3JlbWVudE9wZW5Db3VudChyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIpOwogfQogCiB2b2lkIFJlbW90ZVJlc291cmNlQ2FjaGU6OmNhY2hlRm9udChSZWY8Rm9udD4m
JiBmb250KQogewotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9mb250cy5hZGQoZm9udC0+cmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIFdURk1vdmUoZm9udCkpOwotICAgIEFTU0VSVF9VTlVT
RUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgYXV0byByZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIgPSBmb250LT5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKTsK
KyAgICBtX2ZvbnRzLmFkZChyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIFdURk1vdmUoZm9u
dCkpOworCisgICAgaW5jcmVtZW50T3BlbkNvdW50KHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
cik7Cit9CisKK3ZvaWQgUmVtb3RlUmVzb3VyY2VDYWNoZTo6aW5jcmVtZW50T3BlbkNvdW50KFdl
YkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIpCit7CisgICAgYXV0byByZXN1bHQgPSBtX3Jlc291cmNlVXNlQ291bnRlcnMuZW5zdXJl
KHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgWyZdIHsKKyAgICAgICAgcmV0dXJuIFJlc291
cmNlVXNlQ291bnRlciB7IH07CisgICAgfSk7CisgICAgKytyZXN1bHQuaXRlcmF0b3ItPnZhbHVl
Lm9wZW5Db3VudDsKKyAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuaXRlcmF0b3ItPnZhbHVlLm9w
ZW5Db3VudCk7CiB9CiAKIHZvaWQgUmVtb3RlUmVzb3VyY2VDYWNoZTo6ZGVsZXRlQWxsRm9udHMo
KQpAQCAtNTksMTYgKzc0LDcyIEBAIHZvaWQgUmVtb3RlUmVzb3VyY2VDYWNoZTo6ZGVsZXRlQWxs
Rm9udHMoKQogICAgIG1fZm9udHMuY2xlYXIoKTsKIH0KIAotdm9pZCBSZW1vdGVSZXNvdXJjZUNh
Y2hlOjpyZWxlYXNlUmVtb3RlUmVzb3VyY2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKK2Jvb2wgUmVtb3RlUmVzb3VyY2VDYWNoZTo6bWF5
YmVSZW1vdmVSZXNvdXJjZShXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBSZXNvdXJjZVVzZUNvdW50ZXJzTWFwOjppdGVyYXRv
ciBpdGVyYXRvcikKIHsKKyAgICAvLyBJdCdzIGFjdHVhbGx5IG9rYXkgaWYgdXNlQ291bnQgPiB0
b3RhbFVzZUNvdW50LgorICAgIC8vIEl0IGp1c3QgbWVhbnMgdGhhdCB0aGVyZSdzIGEgY2FjaGUg
bWVzc2FnZSBwZW5kaW5nLCBhbmQgd2UndmUgZWFnZXJseSB1c2VkIGEgcHJldmlvdXNseS1jYWNo
ZWQgcmVzb3VyY2UuCisgICAgLy8gV2hpY2ggaXMgZmluZS4KKyAgICAvLyBGSVhNRTogTWF5YmUg
d2Ugc2hvdWxkbid0IGFjdHVhbGx5IHJlbW92ZSB0aGUgcmVzb3VyY2UgaW4gdGhpcyBzaXR1YXRp
b24/CisgICAgLy8gV2UgbWF5IGFjdHVhbGx5IGJlIGFibGUgdG8gZ2V0IGEgaGVhZCBzdGFydCBv
biBzb21lIGRpc3BsYXkgbGlzdCBpdGVtcyBpZiB0aGV5J3JlIHJlYWR5IGZvciB1cyBhbmQgd2Ug
aGF2ZSB0aGUgcmVzb3VyY2VzIHRoZXkgZGVwZW5kIG9uLgorCisgICAgaWYgKGl0ZXJhdG9yLT52
YWx1ZS5vcGVuQ291bnQgfHwgaXRlcmF0b3ItPnZhbHVlLnVzZUNvdW50IDwgaXRlcmF0b3ItPnZh
bHVlLnRvdGFsVXNlQ291bnQpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGl0ZXJhdG9yLT52
YWx1ZS51c2VDb3VudCAtPSBpdGVyYXRvci0+dmFsdWUudG90YWxVc2VDb3VudDsKKyAgICBpdGVy
YXRvci0+dmFsdWUudG90YWxVc2VDb3VudCA9IDA7CisgICAgaWYgKCFpdGVyYXRvci0+dmFsdWUu
dXNlQ291bnQpCisgICAgICAgIG1fcmVzb3VyY2VVc2VDb3VudGVycy5yZW1vdmUoaXRlcmF0b3Ip
OworCiAgICAgaWYgKG1faW1hZ2VCdWZmZXJzLnJlbW92ZShyZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIGlmICht
X25hdGl2ZUltYWdlcy5yZW1vdmUocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSkKLSAgICAg
ICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBpZiAobV9mb250cy5yZW1vdmUo
cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKwogICAgIC8vIENhY2hpbmcgdGhlIHJlbW90ZSByZXNvdXJjZSBzaG91bGQg
aGF2ZSBoYXBwZW5lZCBiZWZvcmUgcmVsZWFzaW5nIGl0LgotICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZW1vdGVSZXNvdXJjZUNhY2hlOjpy
ZWNvcmRSZXNvdXJjZVVzZShXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQoreworICAgIGF1dG8gaXRlcmF0b3IgPSBtX3Jlc291
cmNlVXNlQ291bnRlcnMuZmluZChyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOworCisgICAg
aWYgKGl0ZXJhdG9yID09IG1fcmVzb3VyY2VVc2VDb3VudGVycy5lbmQoKSkgeworICAgICAgICAv
LyBUaGUgZGlzcGxheSBsaXN0IGl0ZW1zIHdvbiB0aGUgcmFjZSBhZ2FpbnN0IHRoZSBjYWNoZUZv
bnQgbWVzc2FnZS4KKyAgICAgICAgLy8gV2hlbiB3ZSByZWNlaXZlIHRoZSBjYWNoZUZvbnQgbWVz
c2FnZSwgd2Ugd2lsbCByZXRyeSB0aGUgZGlzcGxheSBsaXN0IGl0ZW0uCisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBSZXNvdXJjZVVzZUNvdW50ZXImIHVzZUNvdW50ZXIgPSBpdGVyYXRv
ci0+dmFsdWU7CisgICAgKyt1c2VDb3VudGVyLnVzZUNvdW50OworCisgICAgbV9yZXNvdXJjZXNG
b3JNYXliZVJlbW92aW5nLmFkZChyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOworfQorCiti
b29sIFJlbW90ZVJlc291cmNlQ2FjaGU6OnBydW5lKCkKK3sKKyAgICBmb3IgKGF1dG8gcmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyIDogbV9yZXNvdXJjZXNGb3JNYXliZVJlbW92aW5nKSB7Cisg
ICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX3Jlc291cmNlVXNlQ291bnRlcnMuZmluZChyZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIpOworICAgICAgICBBU1NFUlQoaXRlcmF0b3IgIT0gbV9yZXNv
dXJjZVVzZUNvdW50ZXJzLmVuZCgpKTsKKyAgICAgICAgYXV0byBtZXNzYWdlc0FyZUluT3JkZXIg
PSBtYXliZVJlbW92ZVJlc291cmNlKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgaXRlcmF0
b3IpOworICAgICAgICBpZiAoIW1lc3NhZ2VzQXJlSW5PcmRlcikKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgbV9yZXNvdXJjZXNGb3JNYXliZVJlbW92aW5nLmNsZWFyKCk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUmVtb3RlUmVzb3VyY2VDYWNoZTo6cmVsZWFz
ZVJlbW90ZVJlc291cmNlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIsIHVpbnQ2NF90IHVzZUNvdW50KQoreworICAgIGF1dG8gaXRlcmF0b3Ig
PSBtX3Jlc291cmNlVXNlQ291bnRlcnMuZmluZChyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIp
OworICAgIGlmIChpdGVyYXRvciA9PSBtX3Jlc291cmNlVXNlQ291bnRlcnMuZW5kKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBSZXNvdXJjZVVzZUNvdW50ZXImIHVzZUNvdW50ZXIgPSBp
dGVyYXRvci0+dmFsdWU7CisgICAgaWYgKCFpdGVyYXRvci0+dmFsdWUub3BlbkNvdW50KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgLS11c2VDb3VudGVyLm9wZW5Db3VudDsKKyAgICB1c2VD
b3VudGVyLnRvdGFsVXNlQ291bnQgKz0gdXNlQ291bnQ7CisgICAgcmV0dXJuIG1heWJlUmVtb3Zl
UmVzb3VyY2UocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBpdGVyYXRvcik7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGUuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlLmgKaW5kZXggMmNlZDkwOWY0ODExMGM2NjY1
NmRlMWJmZTM4MTFkYmFiYWFhOWY0Zi4uYWQyNzRkNzNkMTYxMjFkYWNkZWMwOTQ1ZWFiNjg2YTdi
MzIzNGE2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1Jl
bW90ZVJlc291cmNlQ2FjaGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhp
Y3MvUmVtb3RlUmVzb3VyY2VDYWNoZS5oCkBAIC00NiwxNiArNDYsNDUgQEAgcHVibGljOgogICAg
IHZvaWQgY2FjaGVOYXRpdmVJbWFnZShSZWY8V2ViQ29yZTo6TmF0aXZlSW1hZ2U+JiYpOwogICAg
IHZvaWQgY2FjaGVGb250KFJlZjxXZWJDb3JlOjpGb250PiYmKTsKICAgICB2b2lkIGRlbGV0ZUFs
bEZvbnRzKCk7Ci0gICAgdm9pZCByZWxlYXNlUmVtb3RlUmVzb3VyY2UoV2ViQ29yZTo6UmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKKyAgICBib29sIHJlbGVhc2VSZW1vdGVSZXNvdXJjZShX
ZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIHVpbnQ2NF90IHVzZUNvdW50KTsK
KyAgICB2b2lkIHJlY29yZFJlc291cmNlVXNlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllcik7CisgICAgYm9vbCBwcnVuZSgpOwogCiAgICAgY29uc3QgV2ViQ29yZTo6SW1hZ2VC
dWZmZXJIYXNoTWFwJiBpbWFnZUJ1ZmZlcnMoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlQnVmZmVy
czsgfQogICAgIGNvbnN0IFdlYkNvcmU6Ok5hdGl2ZUltYWdlSGFzaE1hcCYgbmF0aXZlSW1hZ2Vz
KCkgY29uc3QgeyByZXR1cm4gbV9uYXRpdmVJbWFnZXM7IH0KICAgICBjb25zdCBXZWJDb3JlOjpG
b250UmVuZGVyaW5nUmVzb3VyY2VNYXAmIGZvbnRzKCkgY29uc3QgeyByZXR1cm4gbV9mb250czsg
fQogCiBwcml2YXRlOgorICAgIC8vIEJlY2F1c2UgdGhlIGNhY2hlL3JlbGVhc2UgbWVzc2FnZXMg
YXJlIHNlbnQgYXN5bmNocm9ub3VzbHkgZnJvbSB0aGUgZGlzcGxheSBsaXN0IGl0ZW1zIHdoaWNo
CisgICAgLy8gcmVmZXJlbmNlIHRoZSByZXNvdXJjZXMsIGl0J3MgdG90YWxseSBwb3NzaWJsZSB0
aGF0IHdlIHNlZSBhIHJlbGVhc2UgbWVzc2FnZSBiZWZvcmUgd2UndmUKKyAgICAvLyBleGVjdXRl
ZCBhbGwgdGhlIGRpc3BsYXkgbGlzdCBpdGVtcyB3aGljaCByZWZlcmVuY2UgdGhlIHJlc291cmNl
LiBUaGUgd2ViIHByb2Nlc3MgdGVsbHMgdXMKKyAgICAvLyBob3cgbWFueSBkaXNwbGF5IGxpc3Qg
aXRlbXMgd2lsbCByZWZlcmVuY2UgdGhpcyByZXNvdXJjZSwgYW5kIHdlIGRlZmVyIGRlbGV0aW9u
IG9mIHRoZSByZXNvdXJjZQorICAgIC8vIHVudGlsIHdlIGV4ZWN1dGUgdGhhdCBtYW55IGRpc3Bs
YXkgbGlzdCBpdGVtcy4KKyAgICAvLworICAgIC8vIEl0J3MgYWN0dWFsbHkgYSBiaXQgd29yc2Ug
dGhhbiB0aGlzLCB0aG91Z2gsIGJlY2F1c2Ugd2UgbWF5IGFjdHVhbGx5IHNlZSBhICpuZXcqIGNh
Y2hlIG1lc3NhZ2UKKyAgICAvLyBkdXJpbmcgdGhlIHRpbWUgd2hlbiBkZWxldGlvbiBpcyBkZWZl
cnJlZCwgc28gd2UgbmVlZCBhIHNlY29uZCBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIGNhY2hlCisg
ICAgLy8gbWVzc2FnZXMgd2hpY2ggZG9uJ3QgaGF2ZSBhbiBhY2NvbXBhbnlpbmcgcmVsZWFzZSBt
ZXNzYWdlcy4KKyAgICAvLworICAgIC8vIFdlIGNhbiBvbmx5IHNhZmVseSBkZWxldGUgYSByZXNv
dXJjZSB3aGVuOgorICAgIC8vIDEuIEFsbCB0aGUgY2FjaGUgbWVzc2FnZXMgaGF2ZSBhbiBhY2Nv
bXBhbnlpbmcgcmVsZWFzZSBtZXNzYWdlLCBhbmQKKyAgICAvLyAyLiBXZSd2ZSBwcm9jZXNzZWQg
YXMgbWFueSBkaXNwbGF5IGxpc3QgaXRlbXMgdGhhdCByZWZlcmVuY2UgYSBwYXJ0aWN1bGFyIHJl
c291cmNlIGFzIHRoZSB3ZWIKKyAgICAvLyBwcm9jZXNzIGhhcyBlbmNvZGVkLgorICAgIHN0cnVj
dCBSZXNvdXJjZVVzZUNvdW50ZXIgeworICAgICAgICB1aW50NjRfdCBvcGVuQ291bnQgeyAwIH07
IC8vIFRoZSBudW1iZXIgb2YgY2FjaGVGb28gbWVzc2FnZXMgd2UndmUgcmVjZWl2ZWQgd2l0aG91
dCBhIGNvcnJlc3BvbmRpbmcgcmVsZWFzZSBtZXNzYWdlCisgICAgICAgIHVpbnQ2NF90IHVzZUNv
dW50IHsgMCB9OyAvLyBUaGUgbnVtYmVyIG9mIHJlbmRlcmluZyBjb21tYW5kcyB3ZSd2ZSBleGVj
dXRlZCB3aGljaCByZWZlcmVuY2UgdGhpcyByZXNvdXJjZQorICAgICAgICB1aW50NjRfdCB0b3Rh
bFVzZUNvdW50IHsgMCB9OyAvLyBPbmNlIHVzZUNvdW50IGhpdHMgdGhpcyBsaW1pdCwgd2UgY2Fu
IGZyZWUgdGhlIHJlc291cmNlCisgICAgfTsKKyAgICB1c2luZyBSZXNvdXJjZVVzZUNvdW50ZXJz
TWFwID0gSGFzaE1hcDxXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIFJlc291
cmNlVXNlQ291bnRlcj47CisKKyAgICBib29sIG1heWJlUmVtb3ZlUmVzb3VyY2UoV2ViQ29yZTo6
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBSZXNvdXJjZVVzZUNvdW50ZXJzTWFwOjppdGVy
YXRvcik7CisgICAgdm9pZCBpbmNyZW1lbnRPcGVuQ291bnQoV2ViQ29yZTo6UmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyKTsKKwogICAgIFdlYkNvcmU6OkltYWdlQnVmZmVySGFzaE1hcCBtX2lt
YWdlQnVmZmVyczsKICAgICBXZWJDb3JlOjpOYXRpdmVJbWFnZUhhc2hNYXAgbV9uYXRpdmVJbWFn
ZXM7CiAgICAgV2ViQ29yZTo6Rm9udFJlbmRlcmluZ1Jlc291cmNlTWFwIG1fZm9udHM7CisKKyAg
ICBSZXNvdXJjZVVzZUNvdW50ZXJzTWFwIG1fcmVzb3VyY2VVc2VDb3VudGVyczsKKyAgICBIYXNo
U2V0PFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gbV9yZXNvdXJjZXNGb3JN
YXliZVJlbW92aW5nOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJv
eHkuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VC
dWZmZXJQcm94eS5oCmluZGV4IGI0NDhiMzdmOTdmZTdhZTY1ZGJlYmIyYTg1YWIwYzk5NGUxZjI2
YmQuLmQ0Y2JjMmMwYzkwMzQzMDU5NjhmMjc3YjU1MzYxYmIyNzQ4MmZlYTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3Rl
SW1hZ2VCdWZmZXJQcm94eS5oCkBAIC03Miw3ICs3Miw3IEBAIHB1YmxpYzoKIAogICAgICAgICBm
bHVzaERyYXdpbmdDb250ZXh0KCk7CiAgICAgICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5LT5yZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkoKS5yZWxlYXNlSW1hZ2VCdWZmZXIobV9yZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwotICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eS0+cmVsZWFzZVJlbW90ZVJlc291cmNlKG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyKTsKKyAgICAgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPnJlbGVhc2VSZW1v
dGVSZXNvdXJjZShtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgMCk7IC8vIEZJWE1FOiBQ
YXNzIHRoZSByZWFsIHVzZSBjb3VudCBoZXJlLgogICAgIH0KIAogICAgIEltYWdlQnVmZmVyQmFj
a2VuZEhhbmRsZSBjcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCmluZGV4IDA5Y2U0YzZlZjZkNmFiZTcxZTAzZWFi
N2ZhOGNkMjE0ZmY2OGIwZmUuLmU5NWYxYWQzOTM0ZjI1NGJkNWY5OWQyM2E1YjQ2NTU1MzVjZTA5
MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKQEAgLTI0OSwx
MiArMjQ5LDEyIEBAIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpkZWxldGVBbGxG
b250cygpCiAgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6RGVsZXRl
QWxsRm9udHMoKSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSwgSVBDOjpTZW5kT3B0aW9u
OjpEaXNwYXRjaE1lc3NhZ2VFdmVuV2hlbldhaXRpbmdGb3JTeW5jUmVwbHkpOwogfQogCi12b2lk
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6cmVsZWFzZVJlbW90ZVJlc291cmNlKFJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCit2b2lk
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6cmVsZWFzZVJlbW90ZVJlc291cmNlKFJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIHVpbnQ2
NF90IHVzZUNvdW50KQogewogICAgIGlmIChyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgPT0g
bV9jdXJyZW50RGVzdGluYXRpb25JbWFnZUJ1ZmZlcklkZW50aWZpZXIpCiAgICAgICAgIG1fY3Vy
cmVudERlc3RpbmF0aW9uSW1hZ2VCdWZmZXJJZGVudGlmaWVyID0gc3RkOjpudWxsb3B0OwogCi0g
ICAgc2VuZChNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVsZWFzZVJlbW90ZVJl
c291cmNlKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciksIHJlbmRlcmluZ0JhY2tlbmRJZGVu
dGlmaWVyKCksIElQQzo6U2VuZE9wdGlvbjo6RGlzcGF0Y2hNZXNzYWdlRXZlbldoZW5XYWl0aW5n
Rm9yU3luY1JlcGx5KTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
OjpSZWxlYXNlUmVtb3RlUmVzb3VyY2UocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCB1c2VD
b3VudCksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCksIElQQzo6U2VuZE9wdGlvbjo6RGlz
cGF0Y2hNZXNzYWdlRXZlbldoZW5XYWl0aW5nRm9yU3luY1JlcGx5KTsKIH0KIAogdm9pZCBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmRpZENyZWF0ZUltYWdlQnVmZmVyQmFja2VuZChJbWFn
ZUJ1ZmZlckJhY2tlbmRIYW5kbGUgaGFuZGxlLCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIg
cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LmgKaW5kZXggNjMxNDk2NzBhMzU5NGUyNWEyZGE1Y2QxOTc2MTE0NjFjNjE3OTc0MC4u
YjJjZTNkOGMyOGFiMTkxMjUzNTE5MDI3ZmM5MDc0ZDIwZWQxNzI4MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCkBAIC0xMDQsNyArMTA0LDcgQEAgcHVibGljOgogICAg
IHZvaWQgY2FjaGVOYXRpdmVJbWFnZShjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYsIFdl
YkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgdm9pZCBjYWNoZUZvbnQo
UmVmPFdlYkNvcmU6OkZvbnQ+JiYpOwogICAgIHZvaWQgZGVsZXRlQWxsRm9udHMoKTsKLSAgICB2
b2lkIHJlbGVhc2VSZW1vdGVSZXNvdXJjZShXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIpOworICAgIHZvaWQgcmVsZWFzZVJlbW90ZVJlc291cmNlKFdlYkNvcmU6OlJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciwgdWludDY0X3QgdXNlQ291bnQpOwogCiAgICAgZW51bSBjbGFz
cyBEaWRSZWNlaXZlQmFja2VuZENyZWF0aW9uUmVzdWx0IDogYm9vbCB7CiAgICAgICAgIFJlY2Vp
dmVkQW55UmVzcG9uc2UsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5jcHAKaW5kZXgg
MDNmMzRiMzNhMjJkZDQ5MjhkNDI2MGU0Nzg2MmQzOTEzNzExMDFhZi4uNDBlYzM5MmNhZTQ2NTRh
MzUzNDJmMzJlYWFjYzQ0YWI3ODViNmZjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZVBy
b3h5LmNwcApAQCAtNDEsOCArNDEsOCBAQCBSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHk6OlJlbW90
ZVJlc291cmNlQ2FjaGVQcm94eShSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkmCiAKIFJlbW90
ZVJlc291cmNlQ2FjaGVQcm94eTo6flJlbW90ZVJlc291cmNlQ2FjaGVQcm94eSgpCiB7Ci0gICAg
Zm9yIChhdXRvJiBpbWFnZSA6IG1fbmF0aXZlSW1hZ2VzLnZhbHVlcygpKQotICAgICAgICBpbWFn
ZS0+cmVtb3ZlT2JzZXJ2ZXIoKnRoaXMpOworICAgIGZvciAoYXV0byYgbmF0aXZlSW1hZ2VTdGF0
ZSA6IG1fbmF0aXZlSW1hZ2VzLnZhbHVlcygpKQorICAgICAgICBuYXRpdmVJbWFnZVN0YXRlLmlt
YWdlLT5yZW1vdmVPYnNlcnZlcigqdGhpcyk7CiB9CiAKIHZvaWQgUmVtb3RlUmVzb3VyY2VDYWNo
ZVByb3h5OjpjYWNoZUltYWdlQnVmZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZl
cikKQEAgLTgwLDggKzgwLDExIEBAIGlubGluZSBzdGF0aWMgUmVmUHRyPFNoYXJlYWJsZUJpdG1h
cD4gY3JlYXRlU2hhcmVhYmxlQml0bWFwRnJvbU5hdGl2ZUltYWdlKE5hdGl2CiAKIHZvaWQgUmVt
b3RlUmVzb3VyY2VDYWNoZVByb3h5OjpjYWNoZU5hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBpbWFn
ZSkKIHsKLSAgICBpZiAobV9uYXRpdmVJbWFnZXMuY29udGFpbnMoaW1hZ2UucmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyKCkpKQorICAgIGF1dG8gaXRlcmF0b3IgPSBtX25hdGl2ZUltYWdlcy5m
aW5kKGltYWdlLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpKTsKKyAgICBpZiAoaXRlcmF0
b3IgIT0gbV9uYXRpdmVJbWFnZXMuZW5kKCkpIHsKKyAgICAgICAgKytpdGVyYXRvci0+dmFsdWUu
dXNlQ291bnQ7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBhdXRvIGJpdG1hcCA9IGNy
ZWF0ZVNoYXJlYWJsZUJpdG1hcEZyb21OYXRpdmVJbWFnZShpbWFnZSk7CiAgICAgaWYgKCFiaXRt
YXApCkBAIC05Miw3ICs5NSw3IEBAIHZvaWQgUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5OjpjYWNo
ZU5hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBpbWFnZSkKICAgICBpZiAoaGFuZGxlLmlzTnVsbCgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBtX25hdGl2ZUltYWdlcy5hZGQoaW1hZ2UucmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIG1ha2VXZWFrUHRyKGltYWdlKSk7CisgICAgbV9uYXRp
dmVJbWFnZXMuYWRkKGltYWdlLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBOYXRpdmVJ
bWFnZVN0YXRlIHsgbWFrZVdlYWtQdHIoaW1hZ2UpLCAxIH0pOwogCiAgICAgLy8gU2V0IGl0c2Vs
ZiBhcyBhbiBvYnNlcnZlciB0byBOYXRpdmVJbWFnZSwgc28gcmVsZWFzZU5hdGl2ZUltYWdlKCkK
ICAgICAvLyBnZXRzIGNhbGxlZCB3aGVuIE5hdGl2ZUltYWdlIGlzIGJlaW5nIGRlbGVsZXRlZC4K
QEAgLTEwNCwyNSArMTA3LDMwIEBAIHZvaWQgUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5OjpjYWNo
ZU5hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBpbWFnZSkKIAogdm9pZCBSZW1vdGVSZXNvdXJjZUNh
Y2hlUHJveHk6OmNhY2hlRm9udChGb250JiBmb250KQogewotICAgIGF1dG8gcmVzdWx0ID0gbV9m
b250SWRlbnRpZmllclRvTGFzdFJlbmRlcmluZ1VwZGF0ZVZlcnNpb25NYXAuZW5zdXJlKGZvbnQu
cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIFsmXSB7Ci0gICAgICAgIHJldHVybiAwOwor
ICAgIGF1dG8gcmVzdWx0ID0gbV9mb250cy5lbnN1cmUoZm9udC5yZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIoKSwgWyZdIHsKKyAgICAgICAgcmV0dXJuIEZvbnRTdGF0ZSB7IDAsIDAgfTsKICAg
ICB9KTsKLSAgICBhdXRvJiBsYXN0VmVyc2lvbiA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7Ci0g
ICAgaWYgKGxhc3RWZXJzaW9uICE9IG1fY3VycmVudFJlbmRlcmluZ1VwZGF0ZVZlcnNpb24pIHsK
LSAgICAgICAgbGFzdFZlcnNpb24gPSBtX2N1cnJlbnRSZW5kZXJpbmdVcGRhdGVWZXJzaW9uOwor
ICAgIGF1dG8mIGN1cnJlbnRTdGF0ZSA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CisgICAgaWYg
KGN1cnJlbnRTdGF0ZS5sYXN0UmVuZGVyaW5nVXBkYXRlVmVyc2lvblVzZWRXaXRoaW4gIT0gbV9j
dXJyZW50UmVuZGVyaW5nVXBkYXRlVmVyc2lvbikgeworICAgICAgICBjdXJyZW50U3RhdGUubGFz
dFJlbmRlcmluZ1VwZGF0ZVZlcnNpb25Vc2VkV2l0aGluID0gbV9jdXJyZW50UmVuZGVyaW5nVXBk
YXRlVmVyc2lvbjsKICAgICAgICAgKyttX251bWJlck9mRm9udHNVc2VkSW5DdXJyZW50UmVuZGVy
aW5nVXBkYXRlOwogICAgIH0KKyAgICArK2N1cnJlbnRTdGF0ZS51c2VDb3VudDsKICAgICBpZiAo
cmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
LmNhY2hlRm9udChtYWtlUmVmKGZvbnQpKTsKIH0KIAogdm9pZCBSZW1vdGVSZXNvdXJjZUNhY2hl
UHJveHk6OnJlbGVhc2VOYXRpdmVJbWFnZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQogewotICAgIGlmICghbV9uYXRpdmVJbWFnZXMucmVt
b3ZlKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikpCi0gICAgICAgIHJldHVybjsKKyAgICBh
dXRvIGl0ZXJhdG9yID0gbV9uYXRpdmVJbWFnZXMuZmluZChyZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIpOworICAgIFJFTEVBU0VfQVNTRVJUKGl0ZXJhdG9yICE9IG1fbmF0aXZlSW1hZ2VzLmVu
ZCgpKTsKKworICAgIGF1dG8gdXNlQ291bnQgPSBpdGVyYXRvci0+dmFsdWUudXNlQ291bnQ7CisK
KyAgICBhdXRvIHN1Y2Nlc3MgPSBtX25hdGl2ZUltYWdlcy5yZW1vdmUoaXRlcmF0b3IpOworICAg
IEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7CiAKLSAgICAvLyBUZWxsIHRoZSBHUFUg
cHJvY2VzcyB0byByZW1vdmUgdGhpcyByZXNvdXJjZS4KLSAgICBtX3JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eS5yZWxlYXNlUmVtb3RlUmVzb3VyY2UocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyKTsKKyAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5yZWxlYXNlUmVtb3RlUmVz
b3VyY2UocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCB1c2VDb3VudCk7CiB9CiAKIHZvaWQg
UmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5OjpwcmVwYXJlRm9yTmV4dFJlbmRlcmluZ1VwZGF0ZSgp
CkBAIC0xMzMsOSArMTQxLDkgQEAgdm9pZCBSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHk6OnByZXBh
cmVGb3JOZXh0UmVuZGVyaW5nVXBkYXRlKCkKIAogdm9pZCBSZW1vdGVSZXNvdXJjZUNhY2hlUHJv
eHk6OmNsZWFyRm9udE1hcCgpCiB7Ci0gICAgZm9yIChhdXRvJiBpdGVtIDogbV9mb250SWRlbnRp
ZmllclRvTGFzdFJlbmRlcmluZ1VwZGF0ZVZlcnNpb25NYXApCi0gICAgICAgIG1fcmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5LnJlbGVhc2VSZW1vdGVSZXNvdXJjZShpdGVtLmtleSk7Ci0gICAg
bV9mb250SWRlbnRpZmllclRvTGFzdFJlbmRlcmluZ1VwZGF0ZVZlcnNpb25NYXAuY2xlYXIoKTsK
KyAgICBmb3IgKGF1dG8mIGZvbnRTdGF0ZSA6IG1fZm9udHMpCisgICAgICAgIG1fcmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5LnJlbGVhc2VSZW1vdGVSZXNvdXJjZShmb250U3RhdGUua2V5LCBm
b250U3RhdGUudmFsdWUudXNlQ291bnQpOworICAgIG1fZm9udHMuY2xlYXIoKTsKICAgICBtX251
bWJlck9mRm9udHNVc2VkSW5DdXJyZW50UmVuZGVyaW5nVXBkYXRlID0gMDsKIH0KIApAQCAtMTQz
LDIwICsxNTEsMjAgQEAgdm9pZCBSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHk6OmZpbmFsaXplUmVu
ZGVyaW5nVXBkYXRlRm9yRm9udHMoKQogewogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
bWluaW11bVJlbmRlcmluZ1VwZGF0ZUNvdW50VG9LZWVwRm9udEFsaXZlID0gNDsKIAotICAgIHVu
c2lnbmVkIHRvdGFsRm9udENvdW50ID0gbV9mb250SWRlbnRpZmllclRvTGFzdFJlbmRlcmluZ1Vw
ZGF0ZVZlcnNpb25NYXAuc2l6ZSgpOworICAgIHVuc2lnbmVkIHRvdGFsRm9udENvdW50ID0gbV9m
b250cy5zaXplKCk7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9udW1iZXJPZkZvbnRzVXNlZEluQ3Vy
cmVudFJlbmRlcmluZ1VwZGF0ZSA8PSB0b3RhbEZvbnRDb3VudCk7CiAgICAgaWYgKHRvdGFsRm9u
dENvdW50ID09IG1fbnVtYmVyT2ZGb250c1VzZWRJbkN1cnJlbnRSZW5kZXJpbmdVcGRhdGUpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIEhhc2hTZXQ8V2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyPiB0b1JlbW92ZTsKLSAgICBmb3IgKGF1dG8mIGl0ZW0gOiBtX2ZvbnRJZGVudGlm
aWVyVG9MYXN0UmVuZGVyaW5nVXBkYXRlVmVyc2lvbk1hcCkgewotICAgICAgICBpZiAobV9jdXJy
ZW50UmVuZGVyaW5nVXBkYXRlVmVyc2lvbiAtIGl0ZW0udmFsdWUgPj0gbWluaW11bVJlbmRlcmlu
Z1VwZGF0ZUNvdW50VG9LZWVwRm9udEFsaXZlKSB7CisgICAgZm9yIChhdXRvJiBpdGVtIDogbV9m
b250cykgeworICAgICAgICBpZiAobV9jdXJyZW50UmVuZGVyaW5nVXBkYXRlVmVyc2lvbiAtIGl0
ZW0udmFsdWUubGFzdFJlbmRlcmluZ1VwZGF0ZVZlcnNpb25Vc2VkV2l0aGluID49IG1pbmltdW1S
ZW5kZXJpbmdVcGRhdGVDb3VudFRvS2VlcEZvbnRBbGl2ZSkgewogICAgICAgICAgICAgdG9SZW1v
dmUuYWRkKGl0ZW0ua2V5KTsKLSAgICAgICAgICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5LnJlbGVhc2VSZW1vdGVSZXNvdXJjZShpdGVtLmtleSk7CisgICAgICAgICAgICBtX3JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5yZWxlYXNlUmVtb3RlUmVzb3VyY2UoaXRlbS5rZXksIGl0
ZW0udmFsdWUudXNlQ291bnQpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgbV9mb250SWRlbnRp
ZmllclRvTGFzdFJlbmRlcmluZ1VwZGF0ZVZlcnNpb25NYXAucmVtb3ZlSWYoWyZdKGNvbnN0IGF1
dG8mIGJ1Y2tldCkgeworICAgIG1fZm9udHMucmVtb3ZlSWYoWyZdKGNvbnN0IGF1dG8mIGJ1Y2tl
dCkgewogICAgICAgICByZXR1cm4gdG9SZW1vdmUuY29udGFpbnMoYnVja2V0LmtleSk7CiAgICAg
fSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L1JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkuaAppbmRleCA2ZDczMWM0Y2M1ZWY2
ZWYzMmMyODAyOWE1YjAzMjQxM2ExNWE1ODkwLi44ZDExMTljYWI5MGU4YWMxZTNkODU4ODljOTI1
NTIxZTIyZDA5ZDZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dy
YXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmgKQEAgLTUwLDgg
KzUwLDggQEAgcHVibGljOgogICAgIHZvaWQgcmVsZWFzZUltYWdlQnVmZmVyKFdlYkNvcmU6OlJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAKICAgICB2b2lkIGNhY2hlTmF0aXZlSW1hZ2Uo
V2ViQ29yZTo6TmF0aXZlSW1hZ2UmKTsKLQogICAgIHZvaWQgY2FjaGVGb250KFdlYkNvcmU6OkZv
bnQmKTsKKwogICAgIHZvaWQgZGlkRmluYWxpemVSZW5kZXJpbmdVcGRhdGUoKTsKIAogICAgIHZv
aWQgcmVtb3RlUmVzb3VyY2VDYWNoZVdhc0Rlc3Ryb3llZCgpOwpAQCAtNTksNyArNTksMTggQEAg
cHVibGljOgogCiBwcml2YXRlOgogICAgIHVzaW5nIEltYWdlQnVmZmVySGFzaE1hcCA9IEhhc2hN
YXA8V2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBXZWFrUHRyPFdlYkNvcmU6
OkltYWdlQnVmZmVyPj47Ci0gICAgdXNpbmcgTmF0aXZlSW1hZ2VIYXNoTWFwID0gSGFzaE1hcDxX
ZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIFdlYWtQdHI8V2ViQ29yZTo6TmF0
aXZlSW1hZ2U+PjsKKworICAgIHN0cnVjdCBOYXRpdmVJbWFnZVN0YXRlIHsKKyAgICAgICAgV2Vh
a1B0cjxXZWJDb3JlOjpOYXRpdmVJbWFnZT4gaW1hZ2U7CisgICAgICAgIHVpbnQ2NF90IHVzZUNv
dW50OworICAgIH07CisgICAgdXNpbmcgTmF0aXZlSW1hZ2VIYXNoTWFwID0gSGFzaE1hcDxXZWJD
b3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIE5hdGl2ZUltYWdlU3RhdGU+OworCisg
ICAgc3RydWN0IEZvbnRTdGF0ZSB7CisgICAgICAgIHVpbnQ2NF90IGxhc3RSZW5kZXJpbmdVcGRh
dGVWZXJzaW9uVXNlZFdpdGhpbjsKKyAgICAgICAgdWludDY0X3QgdXNlQ291bnQ7CisgICAgfTsK
KyAgICB1c2luZyBGb250SGFzaE1hcCA9IEhhc2hNYXA8V2ViQ29yZTo6UmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyLCBGb250U3RhdGU+OwogICAgIAogICAgIHZvaWQgcmVsZWFzZU5hdGl2ZUlt
YWdlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgb3ZlcnJpZGU7CiAgICAg
dm9pZCBmaW5hbGl6ZVJlbmRlcmluZ1VwZGF0ZUZvckZvbnRzKCk7CkBAIC02OCw4ICs3OSw3IEBA
IHByaXZhdGU6CiAKICAgICBJbWFnZUJ1ZmZlckhhc2hNYXAgbV9pbWFnZUJ1ZmZlcnM7CiAgICAg
TmF0aXZlSW1hZ2VIYXNoTWFwIG1fbmF0aXZlSW1hZ2VzOwotCi0gICAgSGFzaE1hcDxXZWJDb3Jl
OjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIHVpbnQ2NF90PiBtX2ZvbnRJZGVudGlmaWVy
VG9MYXN0UmVuZGVyaW5nVXBkYXRlVmVyc2lvbk1hcDsKKyAgICBGb250SGFzaE1hcCBtX2ZvbnRz
OwogICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZGb250c1VzZWRJbkN1cnJlbnRSZW5kZXJpbmdVcGRh
dGUgeyAwIH07CiAgICAgdWludDY0X3QgbV9jdXJyZW50UmVuZGVyaW5nVXBkYXRlVmVyc2lvbiB7
IDEgfTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434267</attachid>
            <date>2021-07-26 21:04:36 -0700</date>
            <delta_ts>2021-07-27 13:34:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228224-20210726210435.patch</filename>
            <type>text/plain</type>
            <size>16264</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMzM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDdkY2Q5ZDNkNDg4MWRi
NTQ2N2U0ZGExZjlkMWRkOTJiMjE4NThiNC4uYWUxY2Y0MWY2ODdjOWRjZTc0OTFhYjc1YmVlODc0
NzgzYzE4MzFkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDIxLTA3LTI2ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0dQVSBQcm9j
ZXNzXSBTdGFydCB0cmFja2luZyByZXNvdXJjZSB1c2VzIGZvciBOYXRpdmVJbWFnZXMgYW5kIEZv
bnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjgy
MjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlz
IGlzIHBhcnQgMyBvZiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI4
MjE2LgorCisgICAgICAgIFRoaXMgcGF0Y2ggdHJpZ2dlcnMgdGhlIGluZnJhc3RydWN0dXJlIGFk
ZGVkIGluIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjgyMjIgYnkg
dHJhY2tpbmcKKyAgICAgICAgcmVzb3VyY2UgdXNlIGNvdW50cyBpbiB0aGUgd2ViIHByb2Nlc3Mu
IFJlbW90ZVJlc291cmNlQ2FjaGVQcm94eSBhbHJlYWR5IGlzIG5vdGlmaWVkIHdoZW5ldmVyIGEg
cmVzb3VyY2UKKyAgICAgICAgaXMgdXNlZCwgc28gaXQgcmVjb3JkcyBob3cgbWFueSBvZiB0aGVz
ZSBub3RpZmljYXRpb25zIGl0IHJlY2VpdmVzLCBhbmQgc2VuZHMgdGhhdCBjb3VudCB0byB0aGUg
R1BVIHByb2Nlc3MKKyAgICAgICAgd2l0aCB0aGUgcmVsZWFzZSBtZXNzYWdlLiBXaGVuIHRoZSBH
UFUgcHJvY2VzcyByZXBsYXlzIHRoZSBkaXNwbGF5IGxpc3RzLCBpdCBhbHNvIGtlZXBzIHRyYWNr
IG9mIGhvdyBtYW55CisgICAgICAgIHVzZXMgaXQgZW5jb3VudGVyZWQgZm9yIHRoZSByZXNvdXJj
ZSwgdmlhIGNhbGxpbmcgdGhyb3VnaCB0aGUgUmVwbGF5ZXI6OkRlbGVnYXRlLgorCisgICAgICAg
IENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6YXBwbHlOYXRpdmVJbWFnZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OmFwcGx5U2V0U3RhdGVJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjphcHBseUZvbnRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZXBsYXllcjo6YXBwbHlJdGVtKToKKwogMjAyMS0wNy0yNiAgTXlsZXMgQy4gTWF4ZmllbGQgIDxt
bWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIFtHUFUgUHJvY2Vzc10gQWRkIHJlc291cmNl
IHVzZSBjb3VudGVyIGluZnJhc3RydWN0dXJlIHRvIFJlbW90ZVJlc291cmNlQ2FjaGUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cK
aW5kZXggZjYyNjdkOGQ1ZTQwZjQyZTkxMmRjMmFhN2JiNDBjMzQ1Yjg3OGUyOC4uZTE0YmYxNzAw
YTE2ZWM5YzdjZWJlOGNjYTgxZTA0MzFjZjkyYmFhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBA
QAorMjAyMS0wNy0yNiAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgor
CisgICAgICAgIFtHUFUgUHJvY2Vzc10gU3RhcnQgdHJhY2tpbmcgcmVzb3VyY2UgdXNlcyBmb3Ig
TmF0aXZlSW1hZ2VzIGFuZCBGb250cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjI4MjI0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBleHRlbmRzIHRoZSBleGlzdGluZyByZXNvdXJjZSB0
cmFja2luZyBIYXNoTWFwcyB1c2VkIGluIFJlbW90ZVJlc291cmNlQ2FjaGVQcm94eSB0byBjb250
aW51ZQorICAgICAgICB0byByZWNvcmQgd2hhdCB0aGV5IHdlcmUgcmVjb3JkaW5nIGJlZm9yZSwg
YnV0IGFsc28gaW5jbHVkZSB0aGlzIG5ldyByZXNvdXJjZSB1c2UgY291bnQgaW5mb3JtYXRpb24u
CisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hl
UHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHk6On5S
ZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZXNvdXJj
ZUNhY2hlUHJveHk6OmNhY2hlTmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVS
ZXNvdXJjZUNhY2hlUHJveHk6OmNhY2hlRm9udCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJl
c291cmNlQ2FjaGVQcm94eTo6cmVsZWFzZU5hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5OjpjbGVhckZvbnRNYXApOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHk6OmZpbmFsaXplUmVuZGVyaW5nVXBkYXRlRm9yRm9u
dHMpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2Fj
aGVQcm94eS5oOgorCiAyMDIxLTA3LTI2ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBh
cHBsZS5jb20+CiAKICAgICAgICAgW0dQVSBQcm9jZXNzXSBBZGQgcmVzb3VyY2UgdXNlIGNvdW50
ZXIgaW5mcmFzdHJ1Y3R1cmUgdG8gUmVtb3RlUmVzb3VyY2VDYWNoZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVw
bGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwCmluZGV4IGYzNzBiNDExOGQwMjQzYTFiMjliYmEwMjEw
Zjg5NzQ3MjkzN2E4NTMuLmU2Nzg5MjFmMDMwNWZlNmMwNjkyZTljM2E0MjA5OWZmZDZmZDlkMTQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdFJlcGxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAKQEAgLTY3LDQ3ICs2
Nyw2MCBAQCBpbmxpbmUgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyPiBhcHBseUltYWdlQnVmZmVySXRlbShHcgogfQogCiB0ZW1wbGF0ZTxjbGFzcyBUPgot
aW5saW5lIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4g
YXBwbHlOYXRpdmVJbWFnZUl0ZW0oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBOYXRp
dmVJbWFnZUhhc2hNYXAmIG5hdGl2ZUltYWdlcywgSXRlbUhhbmRsZSBpdGVtKQoraW5saW5lIHN0
YXRpYyBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gYXBwbHlOYXRp
dmVJbWFnZUl0ZW0oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBOYXRpdmVJbWFnZUhh
c2hNYXAmIG5hdGl2ZUltYWdlcywgSXRlbUhhbmRsZSBpdGVtLCBSZXBsYXllcjo6RGVsZWdhdGUq
IGRlbGVnYXRlKQogewogICAgIGF1dG8mIG5hdGl2ZUltYWdlSXRlbSA9IGl0ZW0uZ2V0PFQ+KCk7
CiAgICAgYXV0byByZXNvdXJjZUlkZW50aWZpZXIgPSBuYXRpdmVJbWFnZUl0ZW0uaW1hZ2VJZGVu
dGlmaWVyKCk7CiAgICAgaWYgKGF1dG8qIGltYWdlID0gbmF0aXZlSW1hZ2VzLmdldChyZXNvdXJj
ZUlkZW50aWZpZXIpKSB7CiAgICAgICAgIG5hdGl2ZUltYWdlSXRlbS5hcHBseShjb250ZXh0LCAq
aW1hZ2UpOworICAgICAgICBpZiAoZGVsZWdhdGUpCisgICAgICAgICAgICBkZWxlZ2F0ZS0+cmVj
b3JkUmVzb3VyY2VVc2UocmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKICAgICB9CiAgICAgcmV0dXJuIHJlc291cmNlSWRlbnRpZmllcjsKIH0KIAotaW5s
aW5lIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gYXBw
bHlTZXRTdGF0ZUl0ZW0oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBOYXRpdmVJbWFn
ZUhhc2hNYXAmIG5hdGl2ZUltYWdlcywgSXRlbUhhbmRsZSBpdGVtKQoraW5saW5lIHN0YXRpYyBz
dGQ6Om9wdGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gYXBwbHlTZXRTdGF0ZUl0
ZW0oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBOYXRpdmVJbWFnZUhhc2hNYXAmIG5h
dGl2ZUltYWdlcywgSXRlbUhhbmRsZSBpdGVtLCBSZXBsYXllcjo6RGVsZWdhdGUqIGRlbGVnYXRl
KQogewogICAgIGF1dG8mIHNldFN0YXRlSXRlbSA9IGl0ZW0uZ2V0PFNldFN0YXRlPigpOwogCisg
ICAgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHN0cm9rZVBhdHRlcm5SZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXI7CiAgICAgTmF0aXZlSW1hZ2UqIHN0cm9rZVBhdHRlcm5JbWFnZSA9IG51
bGxwdHI7CisgICAgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGZpbGxQYXR0ZXJuUmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyOwogICAgIE5hdGl2ZUltYWdlKiBmaWxsUGF0dGVybkltYWdl
ID0gbnVsbHB0cjsKIAotICAgIGlmIChhdXRvIHJlc291cmNlSWRlbnRpZmllciA9IHNldFN0YXRl
SXRlbS5zdHJva2VQYXR0ZXJuSW1hZ2VJZGVudGlmaWVyKCkpIHsKLSAgICAgICAgc3Ryb2tlUGF0
dGVybkltYWdlID0gbmF0aXZlSW1hZ2VzLmdldChyZXNvdXJjZUlkZW50aWZpZXIpOworICAgIGlm
ICgoc3Ryb2tlUGF0dGVyblJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciA9IHNldFN0YXRlSXRl
bS5zdHJva2VQYXR0ZXJuSW1hZ2VJZGVudGlmaWVyKCkpKSB7CisgICAgICAgIHN0cm9rZVBhdHRl
cm5JbWFnZSA9IG5hdGl2ZUltYWdlcy5nZXQoc3Ryb2tlUGF0dGVyblJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcik7CiAgICAgICAgIGlmICghc3Ryb2tlUGF0dGVybkltYWdlKQotICAgICAgICAg
ICAgcmV0dXJuIHJlc291cmNlSWRlbnRpZmllcjsKKyAgICAgICAgICAgIHJldHVybiBzdHJva2VQ
YXR0ZXJuUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyOwogICAgIH0KIAotICAgIGlmIChhdXRv
IHJlc291cmNlSWRlbnRpZmllciA9IHNldFN0YXRlSXRlbS5maWxsUGF0dGVybkltYWdlSWRlbnRp
ZmllcigpKSB7Ci0gICAgICAgIGZpbGxQYXR0ZXJuSW1hZ2UgPSBuYXRpdmVJbWFnZXMuZ2V0KHJl
c291cmNlSWRlbnRpZmllcik7CisgICAgaWYgKChmaWxsUGF0dGVyblJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllciA9IHNldFN0YXRlSXRlbS5maWxsUGF0dGVybkltYWdlSWRlbnRpZmllcigpKSkg
eworICAgICAgICBmaWxsUGF0dGVybkltYWdlID0gbmF0aXZlSW1hZ2VzLmdldChmaWxsUGF0dGVy
blJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgICAgIGlmICghZmlsbFBhdHRlcm5J
bWFnZSkKLSAgICAgICAgICAgIHJldHVybiByZXNvdXJjZUlkZW50aWZpZXI7CisgICAgICAgICAg
ICByZXR1cm4gZmlsbFBhdHRlcm5SZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI7CiAgICAgfQog
CiAgICAgc2V0U3RhdGVJdGVtLmFwcGx5KGNvbnRleHQsIHN0cm9rZVBhdHRlcm5JbWFnZSwgZmls
bFBhdHRlcm5JbWFnZSk7CisgICAgaWYgKGRlbGVnYXRlKSB7CisgICAgICAgIGF1dG8gY2hhbmdl
RmxhZ3MgPSBzZXRTdGF0ZUl0ZW0uc3RhdGVDaGFuZ2UoKS5tX2NoYW5nZUZsYWdzOworICAgICAg
ICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVBh
dHRlcm5DaGFuZ2UpKQorICAgICAgICAgICAgZGVsZWdhdGUtPnJlY29yZFJlc291cmNlVXNlKHN0
cm9rZVBhdHRlcm5SZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOworICAgICAgICBpZiAoY2hh
bmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxQYXR0ZXJuQ2hhbmdl
KSkKKyAgICAgICAgICAgIGRlbGVnYXRlLT5yZWNvcmRSZXNvdXJjZVVzZShmaWxsUGF0dGVyblJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CisgICAgfQogICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIFQ+Ci1pbmxpbmUgc3RhdGljIHN0ZDo6b3B0aW9uYWw8
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyPiBhcHBseUZvbnRJdGVtKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QgRm9udFJlbmRlcmluZ1Jlc291cmNlTWFwJiBmb250cywgSXRlbUhh
bmRsZSBpdGVtKQoraW5saW5lIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcj4gYXBwbHlGb250SXRlbShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0
IEZvbnRSZW5kZXJpbmdSZXNvdXJjZU1hcCYgZm9udHMsIEl0ZW1IYW5kbGUgaXRlbSwgUmVwbGF5
ZXI6OkRlbGVnYXRlKiBkZWxlZ2F0ZSkKIHsKICAgICBhdXRvJiBmb250SXRlbSA9IGl0ZW0uZ2V0
PFQ+KCk7CiAgICAgYXV0byByZXNvdXJjZUlkZW50aWZpZXIgPSBmb250SXRlbS5mb250SWRlbnRp
ZmllcigpOwogICAgIGlmIChhdXRvKiBmb250ID0gZm9udHMuZ2V0KHJlc291cmNlSWRlbnRpZmll
cikpIHsKICAgICAgICAgZm9udEl0ZW0uYXBwbHkoY29udGV4dCwgKmZvbnQpOworICAgICAgICBp
ZiAoZGVsZWdhdGUpCisgICAgICAgICAgICBkZWxlZ2F0ZS0+cmVjb3JkUmVzb3VyY2VVc2UocmVz
b3VyY2VJZGVudGlmaWVyKTsKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICB9CiAg
ICAgcmV0dXJuIHJlc291cmNlSWRlbnRpZmllcjsKQEAgLTEzMSwyNSArMTQ0LDI1IEBAIHN0ZDo6
cGFpcjxzdGQ6Om9wdGlvbmFsPFN0b3BSZXBsYXlSZWFzb24+LCBzdGQ6Om9wdGlvbmFsPFJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpCiAgICAgfQogCiAgICAgaWYgKGl0ZW0uaXM8RHJhd05hdGl2ZUlt
YWdlPigpKSB7Ci0gICAgICAgIGlmIChhdXRvIG1pc3NpbmdDYWNoZWRSZXNvdXJjZUlkZW50aWZp
ZXIgPSBhcHBseU5hdGl2ZUltYWdlSXRlbTxEcmF3TmF0aXZlSW1hZ2U+KGNvbnRleHQoKSwgbV9u
YXRpdmVJbWFnZXMsIGl0ZW0pKQorICAgICAgICBpZiAoYXV0byBtaXNzaW5nQ2FjaGVkUmVzb3Vy
Y2VJZGVudGlmaWVyID0gYXBwbHlOYXRpdmVJbWFnZUl0ZW08RHJhd05hdGl2ZUltYWdlPihjb250
ZXh0KCksIG1fbmF0aXZlSW1hZ2VzLCBpdGVtLCBtX2RlbGVnYXRlKSkKICAgICAgICAgICAgIHJl
dHVybiB7IFN0b3BSZXBsYXlSZWFzb246Ok1pc3NpbmdDYWNoZWRSZXNvdXJjZSwgV1RGTW92ZSht
aXNzaW5nQ2FjaGVkUmVzb3VyY2VJZGVudGlmaWVyKSB9OwogICAgICAgICByZXR1cm4geyBzdGQ6
Om51bGxvcHQsIHN0ZDo6bnVsbG9wdCB9OwogICAgIH0KIAogICAgIGlmIChpdGVtLmlzPERyYXdH
bHlwaHM+KCkpIHsKLSAgICAgICAgaWYgKGF1dG8gbWlzc2luZ0NhY2hlZFJlc291cmNlSWRlbnRp
ZmllciA9IGFwcGx5Rm9udEl0ZW08RHJhd0dseXBocz4oY29udGV4dCgpLCBtX2ZvbnRzLCBpdGVt
KSkKKyAgICAgICAgaWYgKGF1dG8gbWlzc2luZ0NhY2hlZFJlc291cmNlSWRlbnRpZmllciA9IGFw
cGx5Rm9udEl0ZW08RHJhd0dseXBocz4oY29udGV4dCgpLCBtX2ZvbnRzLCBpdGVtLCBtX2RlbGVn
YXRlKSkKICAgICAgICAgICAgIHJldHVybiB7IFN0b3BSZXBsYXlSZWFzb246Ok1pc3NpbmdDYWNo
ZWRSZXNvdXJjZSwgV1RGTW92ZShtaXNzaW5nQ2FjaGVkUmVzb3VyY2VJZGVudGlmaWVyKSB9Owog
ICAgICAgICByZXR1cm4geyBzdGQ6Om51bGxvcHQsIHN0ZDo6bnVsbG9wdCB9OwogICAgIH0KIAog
ICAgIGlmIChpdGVtLmlzPERyYXdQYXR0ZXJuPigpKSB7Ci0gICAgICAgIGlmIChhdXRvIG1pc3Np
bmdDYWNoZWRSZXNvdXJjZUlkZW50aWZpZXIgPSBhcHBseU5hdGl2ZUltYWdlSXRlbTxEcmF3UGF0
dGVybj4oY29udGV4dCgpLCBtX25hdGl2ZUltYWdlcywgaXRlbSkpCisgICAgICAgIGlmIChhdXRv
IG1pc3NpbmdDYWNoZWRSZXNvdXJjZUlkZW50aWZpZXIgPSBhcHBseU5hdGl2ZUltYWdlSXRlbTxE
cmF3UGF0dGVybj4oY29udGV4dCgpLCBtX25hdGl2ZUltYWdlcywgaXRlbSwgbV9kZWxlZ2F0ZSkp
CiAgICAgICAgICAgICByZXR1cm4geyBTdG9wUmVwbGF5UmVhc29uOjpNaXNzaW5nQ2FjaGVkUmVz
b3VyY2UsIFdURk1vdmUobWlzc2luZ0NhY2hlZFJlc291cmNlSWRlbnRpZmllcikgfTsKICAgICAg
ICAgcmV0dXJuIHsgc3RkOjpudWxsb3B0LCBzdGQ6Om51bGxvcHQgfTsKICAgICB9CiAKICAgICBp
ZiAoaXRlbS5pczxTZXRTdGF0ZT4oKSkgewotICAgICAgICBpZiAoYXV0byBtaXNzaW5nQ2FjaGVk
UmVzb3VyY2VJZGVudGlmaWVyID0gYXBwbHlTZXRTdGF0ZUl0ZW0oY29udGV4dCgpLCBtX25hdGl2
ZUltYWdlcywgaXRlbSkpCisgICAgICAgIGlmIChhdXRvIG1pc3NpbmdDYWNoZWRSZXNvdXJjZUlk
ZW50aWZpZXIgPSBhcHBseVNldFN0YXRlSXRlbShjb250ZXh0KCksIG1fbmF0aXZlSW1hZ2VzLCBp
dGVtLCBtX2RlbGVnYXRlKSkKICAgICAgICAgICAgIHJldHVybiB7IFN0b3BSZXBsYXlSZWFzb246
Ok1pc3NpbmdDYWNoZWRSZXNvdXJjZSwgV1RGTW92ZShtaXNzaW5nQ2FjaGVkUmVzb3VyY2VJZGVu
dGlmaWVyKSB9OwogICAgICAgICByZXR1cm4geyBzdGQ6Om51bGxvcHQsIHN0ZDo6bnVsbG9wdCB9
OwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhp
Y3MvUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmNwcAppbmRleCA0MTRlMTk5
NmU4YmMyOTk1YjdmNzA3NmFlNmE1MjE0ZDYzNjc2NjhiLi40MGVjMzkyY2FlNDY1NGEzNTM0MmYz
MmVhYWNjNDRhYjc4NWI2ZmNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkuY3Bw
CkBAIC00MSw4ICs0MSw4IEBAIFJlbW90ZVJlc291cmNlQ2FjaGVQcm94eTo6UmVtb3RlUmVzb3Vy
Y2VDYWNoZVByb3h5KFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSYKIAogUmVtb3RlUmVzb3Vy
Y2VDYWNoZVByb3h5Ojp+UmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5KCkKIHsKLSAgICBmb3IgKGF1
dG8mIGltYWdlIDogbV9uYXRpdmVJbWFnZXMudmFsdWVzKCkpCi0gICAgICAgIGltYWdlLT5yZW1v
dmVPYnNlcnZlcigqdGhpcyk7CisgICAgZm9yIChhdXRvJiBuYXRpdmVJbWFnZVN0YXRlIDogbV9u
YXRpdmVJbWFnZXMudmFsdWVzKCkpCisgICAgICAgIG5hdGl2ZUltYWdlU3RhdGUuaW1hZ2UtPnJl
bW92ZU9ic2VydmVyKCp0aGlzKTsKIH0KIAogdm9pZCBSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHk6
OmNhY2hlSW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyKQpAQCAt
ODAsOCArODAsMTEgQEAgaW5saW5lIHN0YXRpYyBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBjcmVh
dGVTaGFyZWFibGVCaXRtYXBGcm9tTmF0aXZlSW1hZ2UoTmF0aXYKIAogdm9pZCBSZW1vdGVSZXNv
dXJjZUNhY2hlUHJveHk6OmNhY2hlTmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmIGltYWdlKQogewot
ICAgIGlmIChtX25hdGl2ZUltYWdlcy5jb250YWlucyhpbWFnZS5yZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIoKSkpCisgICAgYXV0byBpdGVyYXRvciA9IG1fbmF0aXZlSW1hZ2VzLmZpbmQoaW1h
Z2UucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCkpOworICAgIGlmIChpdGVyYXRvciAhPSBt
X25hdGl2ZUltYWdlcy5lbmQoKSkgeworICAgICAgICArK2l0ZXJhdG9yLT52YWx1ZS51c2VDb3Vu
dDsKICAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIGF1dG8gYml0bWFwID0gY3JlYXRlU2hh
cmVhYmxlQml0bWFwRnJvbU5hdGl2ZUltYWdlKGltYWdlKTsKICAgICBpZiAoIWJpdG1hcCkKQEAg
LTkyLDcgKzk1LDcgQEAgdm9pZCBSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHk6OmNhY2hlTmF0aXZl
SW1hZ2UoTmF0aXZlSW1hZ2UmIGltYWdlKQogICAgIGlmIChoYW5kbGUuaXNOdWxsKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIG1fbmF0aXZlSW1hZ2VzLmFkZChpbWFnZS5yZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIoKSwgbWFrZVdlYWtQdHIoaW1hZ2UpKTsKKyAgICBtX25hdGl2ZUltYWdl
cy5hZGQoaW1hZ2UucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIE5hdGl2ZUltYWdlU3Rh
dGUgeyBtYWtlV2Vha1B0cihpbWFnZSksIDEgfSk7CiAKICAgICAvLyBTZXQgaXRzZWxmIGFzIGFu
IG9ic2VydmVyIHRvIE5hdGl2ZUltYWdlLCBzbyByZWxlYXNlTmF0aXZlSW1hZ2UoKQogICAgIC8v
IGdldHMgY2FsbGVkIHdoZW4gTmF0aXZlSW1hZ2UgaXMgYmVpbmcgZGVsZWxldGVkLgpAQCAtMTA0
LDI0ICsxMDcsMzAgQEAgdm9pZCBSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHk6OmNhY2hlTmF0aXZl
SW1hZ2UoTmF0aXZlSW1hZ2UmIGltYWdlKQogCiB2b2lkIFJlbW90ZVJlc291cmNlQ2FjaGVQcm94
eTo6Y2FjaGVGb250KEZvbnQmIGZvbnQpCiB7Ci0gICAgYXV0byByZXN1bHQgPSBtX2ZvbnRJZGVu
dGlmaWVyVG9MYXN0UmVuZGVyaW5nVXBkYXRlVmVyc2lvbk1hcC5lbnN1cmUoZm9udC5yZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgWyZdIHsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgYXV0
byByZXN1bHQgPSBtX2ZvbnRzLmVuc3VyZShmb250LnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
cigpLCBbJl0geworICAgICAgICByZXR1cm4gRm9udFN0YXRlIHsgMCwgMCB9OwogICAgIH0pOwot
ICAgIGF1dG8mIGxhc3RWZXJzaW9uID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKLSAgICBpZiAo
bGFzdFZlcnNpb24gIT0gbV9jdXJyZW50UmVuZGVyaW5nVXBkYXRlVmVyc2lvbikgewotICAgICAg
ICBsYXN0VmVyc2lvbiA9IG1fY3VycmVudFJlbmRlcmluZ1VwZGF0ZVZlcnNpb247CisgICAgYXV0
byYgY3VycmVudFN0YXRlID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKKyAgICBpZiAoY3VycmVu
dFN0YXRlLmxhc3RSZW5kZXJpbmdVcGRhdGVWZXJzaW9uVXNlZFdpdGhpbiAhPSBtX2N1cnJlbnRS
ZW5kZXJpbmdVcGRhdGVWZXJzaW9uKSB7CisgICAgICAgIGN1cnJlbnRTdGF0ZS5sYXN0UmVuZGVy
aW5nVXBkYXRlVmVyc2lvblVzZWRXaXRoaW4gPSBtX2N1cnJlbnRSZW5kZXJpbmdVcGRhdGVWZXJz
aW9uOwogICAgICAgICArK21fbnVtYmVyT2ZGb250c1VzZWRJbkN1cnJlbnRSZW5kZXJpbmdVcGRh
dGU7CiAgICAgfQorICAgICsrY3VycmVudFN0YXRlLnVzZUNvdW50OwogICAgIGlmIChyZXN1bHQu
aXNOZXdFbnRyeSkKICAgICAgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY2FjaGVG
b250KG1ha2VSZWYoZm9udCkpOwogfQogCiB2b2lkIFJlbW90ZVJlc291cmNlQ2FjaGVQcm94eTo6
cmVsZWFzZU5hdGl2ZUltYWdlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIpCiB7Ci0gICAgaWYgKCFtX25hdGl2ZUltYWdlcy5yZW1vdmUocmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSkKLSAgICAgICAgcmV0dXJuOworICAgIGF1dG8gaXRl
cmF0b3IgPSBtX25hdGl2ZUltYWdlcy5maW5kKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7
CisgICAgUkVMRUFTRV9BU1NFUlQoaXRlcmF0b3IgIT0gbV9uYXRpdmVJbWFnZXMuZW5kKCkpOwor
CisgICAgYXV0byB1c2VDb3VudCA9IGl0ZXJhdG9yLT52YWx1ZS51c2VDb3VudDsKKworICAgIGF1
dG8gc3VjY2VzcyA9IG1fbmF0aXZlSW1hZ2VzLnJlbW92ZShpdGVyYXRvcik7CisgICAgQVNTRVJU
X1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKIAotICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LnJlbGVhc2VSZW1vdGVSZXNvdXJjZShyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIs
IDApOyAvLyBGSVhNRTogUGFzcyB0aGUgcmVhbCB1c2UgY291bnQgaGVyZS4KKyAgICBtX3JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5yZWxlYXNlUmVtb3RlUmVzb3VyY2UocmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyLCB1c2VDb3VudCk7CiB9CiAKIHZvaWQgUmVtb3RlUmVzb3VyY2VDYWNo
ZVByb3h5OjpwcmVwYXJlRm9yTmV4dFJlbmRlcmluZ1VwZGF0ZSgpCkBAIC0xMzIsOSArMTQxLDkg
QEAgdm9pZCBSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHk6OnByZXBhcmVGb3JOZXh0UmVuZGVyaW5n
VXBkYXRlKCkKIAogdm9pZCBSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHk6OmNsZWFyRm9udE1hcCgp
CiB7Ci0gICAgZm9yIChhdXRvJiBpdGVtIDogbV9mb250SWRlbnRpZmllclRvTGFzdFJlbmRlcmlu
Z1VwZGF0ZVZlcnNpb25NYXApCi0gICAgICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
LnJlbGVhc2VSZW1vdGVSZXNvdXJjZShpdGVtLmtleSwgMCk7IC8vIEZJWE1FOiBQYXNzIHRoZSBy
ZWFsIHVzZSBjb3VudCBoZXJlLgotICAgIG1fZm9udElkZW50aWZpZXJUb0xhc3RSZW5kZXJpbmdV
cGRhdGVWZXJzaW9uTWFwLmNsZWFyKCk7CisgICAgZm9yIChhdXRvJiBmb250U3RhdGUgOiBtX2Zv
bnRzKQorICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5yZWxlYXNlUmVtb3Rl
UmVzb3VyY2UoZm9udFN0YXRlLmtleSwgZm9udFN0YXRlLnZhbHVlLnVzZUNvdW50KTsKKyAgICBt
X2ZvbnRzLmNsZWFyKCk7CiAgICAgbV9udW1iZXJPZkZvbnRzVXNlZEluQ3VycmVudFJlbmRlcmlu
Z1VwZGF0ZSA9IDA7CiB9CiAKQEAgLTE0MiwyMCArMTUxLDIwIEBAIHZvaWQgUmVtb3RlUmVzb3Vy
Y2VDYWNoZVByb3h5OjpmaW5hbGl6ZVJlbmRlcmluZ1VwZGF0ZUZvckZvbnRzKCkKIHsKICAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1pbmltdW1SZW5kZXJpbmdVcGRhdGVDb3VudFRvS2Vl
cEZvbnRBbGl2ZSA9IDQ7CiAKLSAgICB1bnNpZ25lZCB0b3RhbEZvbnRDb3VudCA9IG1fZm9udElk
ZW50aWZpZXJUb0xhc3RSZW5kZXJpbmdVcGRhdGVWZXJzaW9uTWFwLnNpemUoKTsKKyAgICB1bnNp
Z25lZCB0b3RhbEZvbnRDb3VudCA9IG1fZm9udHMuc2l6ZSgpOwogICAgIFJFTEVBU0VfQVNTRVJU
KG1fbnVtYmVyT2ZGb250c1VzZWRJbkN1cnJlbnRSZW5kZXJpbmdVcGRhdGUgPD0gdG90YWxGb250
Q291bnQpOwogICAgIGlmICh0b3RhbEZvbnRDb3VudCA9PSBtX251bWJlck9mRm9udHNVc2VkSW5D
dXJyZW50UmVuZGVyaW5nVXBkYXRlKQogICAgICAgICByZXR1cm47CiAKICAgICBIYXNoU2V0PFdl
YkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gdG9SZW1vdmU7Ci0gICAgZm9yIChh
dXRvJiBpdGVtIDogbV9mb250SWRlbnRpZmllclRvTGFzdFJlbmRlcmluZ1VwZGF0ZVZlcnNpb25N
YXApIHsKLSAgICAgICAgaWYgKG1fY3VycmVudFJlbmRlcmluZ1VwZGF0ZVZlcnNpb24gLSBpdGVt
LnZhbHVlID49IG1pbmltdW1SZW5kZXJpbmdVcGRhdGVDb3VudFRvS2VlcEZvbnRBbGl2ZSkgewor
ICAgIGZvciAoYXV0byYgaXRlbSA6IG1fZm9udHMpIHsKKyAgICAgICAgaWYgKG1fY3VycmVudFJl
bmRlcmluZ1VwZGF0ZVZlcnNpb24gLSBpdGVtLnZhbHVlLmxhc3RSZW5kZXJpbmdVcGRhdGVWZXJz
aW9uVXNlZFdpdGhpbiA+PSBtaW5pbXVtUmVuZGVyaW5nVXBkYXRlQ291bnRUb0tlZXBGb250QWxp
dmUpIHsKICAgICAgICAgICAgIHRvUmVtb3ZlLmFkZChpdGVtLmtleSk7Ci0gICAgICAgICAgICBt
X3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5yZWxlYXNlUmVtb3RlUmVzb3VyY2UoaXRlbS5r
ZXksIDApOyAvLyBGSVhNRTogUGFzcyB0aGUgcmVhbCB1c2UgY291bnQgaGVyZS4KKyAgICAgICAg
ICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LnJlbGVhc2VSZW1vdGVSZXNvdXJjZShp
dGVtLmtleSwgaXRlbS52YWx1ZS51c2VDb3VudCk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBt
X2ZvbnRJZGVudGlmaWVyVG9MYXN0UmVuZGVyaW5nVXBkYXRlVmVyc2lvbk1hcC5yZW1vdmVJZihb
Jl0oY29uc3QgYXV0byYgYnVja2V0KSB7CisgICAgbV9mb250cy5yZW1vdmVJZihbJl0oY29uc3Qg
YXV0byYgYnVja2V0KSB7CiAgICAgICAgIHJldHVybiB0b1JlbW92ZS5jb250YWlucyhidWNrZXQu
a2V5KTsKICAgICB9KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5oCmluZGV4IDZk
NzMxYzRjYzVlZjZlZjMyYzI4MDI5YTViMDMyNDEzYTE1YTU4OTAuLjhkMTExOWNhYjkwZThhYzFl
M2Q4NTg4OWM5MjU1MjFlMjJkMDlkNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmgKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlUHJveHku
aApAQCAtNTAsOCArNTAsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZWxlYXNlSW1hZ2VCdWZmZXIo
V2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKIAogICAgIHZvaWQgY2FjaGVO
YXRpdmVJbWFnZShXZWJDb3JlOjpOYXRpdmVJbWFnZSYpOwotCiAgICAgdm9pZCBjYWNoZUZvbnQo
V2ViQ29yZTo6Rm9udCYpOworCiAgICAgdm9pZCBkaWRGaW5hbGl6ZVJlbmRlcmluZ1VwZGF0ZSgp
OwogCiAgICAgdm9pZCByZW1vdGVSZXNvdXJjZUNhY2hlV2FzRGVzdHJveWVkKCk7CkBAIC01OSw3
ICs1OSwxOCBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgdXNpbmcgSW1hZ2VCdWZmZXJIYXNo
TWFwID0gSGFzaE1hcDxXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIFdlYWtQ
dHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+PjsKLSAgICB1c2luZyBOYXRpdmVJbWFnZUhhc2hNYXAg
PSBIYXNoTWFwPFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgV2Vha1B0cjxX
ZWJDb3JlOjpOYXRpdmVJbWFnZT4+OworCisgICAgc3RydWN0IE5hdGl2ZUltYWdlU3RhdGUgewor
ICAgICAgICBXZWFrUHRyPFdlYkNvcmU6Ok5hdGl2ZUltYWdlPiBpbWFnZTsKKyAgICAgICAgdWlu
dDY0X3QgdXNlQ291bnQ7CisgICAgfTsKKyAgICB1c2luZyBOYXRpdmVJbWFnZUhhc2hNYXAgPSBI
YXNoTWFwPFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgTmF0aXZlSW1hZ2VT
dGF0ZT47CisKKyAgICBzdHJ1Y3QgRm9udFN0YXRlIHsKKyAgICAgICAgdWludDY0X3QgbGFzdFJl
bmRlcmluZ1VwZGF0ZVZlcnNpb25Vc2VkV2l0aGluOworICAgICAgICB1aW50NjRfdCB1c2VDb3Vu
dDsKKyAgICB9OworICAgIHVzaW5nIEZvbnRIYXNoTWFwID0gSGFzaE1hcDxXZWJDb3JlOjpSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIEZvbnRTdGF0ZT47CiAgICAgCiAgICAgdm9pZCByZWxl
YXNlTmF0aXZlSW1hZ2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSBvdmVy
cmlkZTsKICAgICB2b2lkIGZpbmFsaXplUmVuZGVyaW5nVXBkYXRlRm9yRm9udHMoKTsKQEAgLTY4
LDggKzc5LDcgQEAgcHJpdmF0ZToKIAogICAgIEltYWdlQnVmZmVySGFzaE1hcCBtX2ltYWdlQnVm
ZmVyczsKICAgICBOYXRpdmVJbWFnZUhhc2hNYXAgbV9uYXRpdmVJbWFnZXM7Ci0KLSAgICBIYXNo
TWFwPFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgdWludDY0X3Q+IG1fZm9u
dElkZW50aWZpZXJUb0xhc3RSZW5kZXJpbmdVcGRhdGVWZXJzaW9uTWFwOworICAgIEZvbnRIYXNo
TWFwIG1fZm9udHM7CiAgICAgdW5zaWduZWQgbV9udW1iZXJPZkZvbnRzVXNlZEluQ3VycmVudFJl
bmRlcmluZ1VwZGF0ZSB7IDAgfTsKICAgICB1aW50NjRfdCBtX2N1cnJlbnRSZW5kZXJpbmdVcGRh
dGVWZXJzaW9uIHsgMSB9OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434309</attachid>
            <date>2021-07-27 13:34:09 -0700</date>
            <delta_ts>2021-07-27 18:09:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228224-20210727133408.patch</filename>
            <type>text/plain</type>
            <size>16490</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMzQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmM3NTQ2MWRhMTlhYjcy
NWIwYjZhMzk4NWYyYmQ1YTFhY2E2N2ZlZi4uNGMyODBjNTk5ZmNhMDg2YTFmMzFlMzU0ZDc4ZDFj
NGZmMzYyNTk0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDIxLTA3LTI3ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0dQVSBQcm9j
ZXNzXSBTdGFydCB0cmFja2luZyByZXNvdXJjZSB1c2VzIGZvciBOYXRpdmVJbWFnZXMgYW5kIEZv
bnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjgy
MjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlz
IGlzIHBhcnQgMyBvZiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI4
MjE2LgorCisgICAgICAgIFRoaXMgcGF0Y2ggdHJpZ2dlcnMgdGhlIGluZnJhc3RydWN0dXJlIGFk
ZGVkIGluIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjgyMjIgYnkg
dHJhY2tpbmcKKyAgICAgICAgcmVzb3VyY2UgdXNlIGNvdW50cyBpbiB0aGUgd2ViIHByb2Nlc3Mu
IFJlbW90ZVJlc291cmNlQ2FjaGVQcm94eSBhbHJlYWR5IGlzIG5vdGlmaWVkIHdoZW5ldmVyIGEg
cmVzb3VyY2UKKyAgICAgICAgaXMgdXNlZCwgc28gaXQgcmVjb3JkcyBob3cgbWFueSBvZiB0aGVz
ZSBub3RpZmljYXRpb25zIGl0IHJlY2VpdmVzLCBhbmQgc2VuZHMgdGhhdCBjb3VudCB0byB0aGUg
R1BVIHByb2Nlc3MKKyAgICAgICAgd2l0aCB0aGUgcmVsZWFzZSBtZXNzYWdlLiBXaGVuIHRoZSBH
UFUgcHJvY2VzcyByZXBsYXlzIHRoZSBkaXNwbGF5IGxpc3RzLCBpdCBhbHNvIGtlZXBzIHRyYWNr
IG9mIGhvdyBtYW55CisgICAgICAgIHVzZXMgaXQgZW5jb3VudGVyZWQgZm9yIHRoZSByZXNvdXJj
ZSwgdmlhIGNhbGxpbmcgdGhyb3VnaCB0aGUgUmVwbGF5ZXI6OkRlbGVnYXRlLgorCisgICAgICAg
IENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6YXBwbHlOYXRpdmVJbWFnZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OmFwcGx5U2V0U3RhdGVJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjphcHBseUZvbnRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZXBsYXllcjo6YXBwbHlJdGVtKToKKwogMjAyMS0wNy0yNyAgQWxleCBDaHJpc3RlbnNlbiAgPGFj
aHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIGRvY3VtZW50LnJlZmVycmVyIHZhbHVl
IGlzIG1pc3NpbmcgdHJhaWxpbmcgc2xhc2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggYmM4ZWM3MzM1OWY2ZGUzMDNj
MjAwNmZiZWJkZGFiY2NmNTE3ZTk2Zi4uN2QyYjY3ZWZhNDZmZWI4ZjdlNDIxYzYyMzc4MzVlMzA1
N2U5OWU3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAyMS0wNy0yNyAgTXlsZXMgQy4g
TWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10g
U3RhcnQgdHJhY2tpbmcgcmVzb3VyY2UgdXNlcyBmb3IgTmF0aXZlSW1hZ2VzIGFuZCBGb250cwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI4MjI0CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBleHRlbmRzIHRoZSBleGlzdGluZyByZXNvdXJjZSB0cmFja2luZyBIYXNoTWFwcyB1c2VkIGlu
IFJlbW90ZVJlc291cmNlQ2FjaGVQcm94eSB0byBjb250aW51ZQorICAgICAgICB0byByZWNvcmQg
d2hhdCB0aGV5IHdlcmUgcmVjb3JkaW5nIGJlZm9yZSwgYnV0IGFsc28gaW5jbHVkZSB0aGlzIG5l
dyByZXNvdXJjZSB1c2UgY291bnQgaW5mb3JtYXRpb24uCisKKyAgICAgICAgKiBXZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHk6On5SZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkp
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHk6OmNhY2hlTmF0aXZl
SW1hZ2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHk6OmNhY2hl
Rm9udCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlc291cmNlQ2FjaGVQcm94eTo6cmVsZWFz
ZU5hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5
OjpjbGVhckZvbnRNYXApOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZXNvdXJjZUNhY2hlUHJv
eHk6OmZpbmFsaXplUmVuZGVyaW5nVXBkYXRlRm9yRm9udHMpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5oOgorCiAyMDIxLTA3LTI3
ICBTYWFnYXIgSmhhICA8c2FhZ2FyQHNhYWdhcmpoYS5jb20+CiAKICAgICAgICAgRml4IFdlYlBy
b2Nlc3Mgc2FuZGJveCBwcm9maWxlIHdoZW4gRU5BQkxFX1NBTkRCT1hfTUVTU0FHRV9GSUxURVIg
aXMgZGlzYWJsZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmNwcAppbmRl
eCBmMzcwYjQxMThkMDI0M2ExYjI5YmJhMDIxMGY4OTc0NzI5MzdhODUzLi5lNjc4OTIxZjAzMDVm
ZTZjMDY5MmU5YzNhNDIwOTlmZmQ2ZmQ5ZDE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0UmVwbGF5ZXIuY3BwCkBAIC02Nyw0NyArNjcsNjAgQEAgaW5saW5lIHN0YXRpYyBzdGQ6Om9w
dGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gYXBwbHlJbWFnZUJ1ZmZlckl0ZW0o
R3IKIH0KIAogdGVtcGxhdGU8Y2xhc3MgVD4KLWlubGluZSBzdGF0aWMgc3RkOjpvcHRpb25hbDxS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI+IGFwcGx5TmF0aXZlSW1hZ2VJdGVtKEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QgTmF0aXZlSW1hZ2VIYXNoTWFwJiBuYXRpdmVJbWFnZXMs
IEl0ZW1IYW5kbGUgaXRlbSkKK2lubGluZSBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXI+IGFwcGx5TmF0aXZlSW1hZ2VJdGVtKEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgY29uc3QgTmF0aXZlSW1hZ2VIYXNoTWFwJiBuYXRpdmVJbWFnZXMsIEl0ZW1IYW5k
bGUgaXRlbSwgUmVwbGF5ZXI6OkRlbGVnYXRlKiBkZWxlZ2F0ZSkKIHsKICAgICBhdXRvJiBuYXRp
dmVJbWFnZUl0ZW0gPSBpdGVtLmdldDxUPigpOwogICAgIGF1dG8gcmVzb3VyY2VJZGVudGlmaWVy
ID0gbmF0aXZlSW1hZ2VJdGVtLmltYWdlSWRlbnRpZmllcigpOwogICAgIGlmIChhdXRvKiBpbWFn
ZSA9IG5hdGl2ZUltYWdlcy5nZXQocmVzb3VyY2VJZGVudGlmaWVyKSkgewogICAgICAgICBuYXRp
dmVJbWFnZUl0ZW0uYXBwbHkoY29udGV4dCwgKmltYWdlKTsKKyAgICAgICAgaWYgKGRlbGVnYXRl
KQorICAgICAgICAgICAgZGVsZWdhdGUtPnJlY29yZFJlc291cmNlVXNlKHJlc291cmNlSWRlbnRp
Zmllcik7CiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgfQogICAgIHJldHVybiBy
ZXNvdXJjZUlkZW50aWZpZXI7CiB9CiAKLWlubGluZSBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI+IGFwcGx5U2V0U3RhdGVJdGVtKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QgTmF0aXZlSW1hZ2VIYXNoTWFwJiBuYXRpdmVJbWFnZXMsIEl0ZW1I
YW5kbGUgaXRlbSkKK2lubGluZSBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXI+IGFwcGx5U2V0U3RhdGVJdGVtKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgTmF0aXZlSW1hZ2VIYXNoTWFwJiBuYXRpdmVJbWFnZXMsIEl0ZW1IYW5kbGUgaXRlbSwg
UmVwbGF5ZXI6OkRlbGVnYXRlKiBkZWxlZ2F0ZSkKIHsKICAgICBhdXRvJiBzZXRTdGF0ZUl0ZW0g
PSBpdGVtLmdldDxTZXRTdGF0ZT4oKTsKIAorICAgIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ciBzdHJva2VQYXR0ZXJuUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyOwogICAgIE5hdGl2ZUlt
YWdlKiBzdHJva2VQYXR0ZXJuSW1hZ2UgPSBudWxscHRyOworICAgIFJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllciBmaWxsUGF0dGVyblJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcjsKICAgICBO
YXRpdmVJbWFnZSogZmlsbFBhdHRlcm5JbWFnZSA9IG51bGxwdHI7CiAKLSAgICBpZiAoYXV0byBy
ZXNvdXJjZUlkZW50aWZpZXIgPSBzZXRTdGF0ZUl0ZW0uc3Ryb2tlUGF0dGVybkltYWdlSWRlbnRp
ZmllcigpKSB7Ci0gICAgICAgIHN0cm9rZVBhdHRlcm5JbWFnZSA9IG5hdGl2ZUltYWdlcy5nZXQo
cmVzb3VyY2VJZGVudGlmaWVyKTsKKyAgICBpZiAoKHN0cm9rZVBhdHRlcm5SZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIgPSBzZXRTdGF0ZUl0ZW0uc3Ryb2tlUGF0dGVybkltYWdlSWRlbnRpZmll
cigpKSkgeworICAgICAgICBzdHJva2VQYXR0ZXJuSW1hZ2UgPSBuYXRpdmVJbWFnZXMuZ2V0KHN0
cm9rZVBhdHRlcm5SZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgICAgICBpZiAoIXN0
cm9rZVBhdHRlcm5JbWFnZSkKLSAgICAgICAgICAgIHJldHVybiByZXNvdXJjZUlkZW50aWZpZXI7
CisgICAgICAgICAgICByZXR1cm4gc3Ryb2tlUGF0dGVyblJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllcjsKICAgICB9CiAKLSAgICBpZiAoYXV0byByZXNvdXJjZUlkZW50aWZpZXIgPSBzZXRTdGF0
ZUl0ZW0uZmlsbFBhdHRlcm5JbWFnZUlkZW50aWZpZXIoKSkgewotICAgICAgICBmaWxsUGF0dGVy
bkltYWdlID0gbmF0aXZlSW1hZ2VzLmdldChyZXNvdXJjZUlkZW50aWZpZXIpOworICAgIGlmICgo
ZmlsbFBhdHRlcm5SZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgPSBzZXRTdGF0ZUl0ZW0uZmls
bFBhdHRlcm5JbWFnZUlkZW50aWZpZXIoKSkpIHsKKyAgICAgICAgZmlsbFBhdHRlcm5JbWFnZSA9
IG5hdGl2ZUltYWdlcy5nZXQoZmlsbFBhdHRlcm5SZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIp
OwogICAgICAgICBpZiAoIWZpbGxQYXR0ZXJuSW1hZ2UpCi0gICAgICAgICAgICByZXR1cm4gcmVz
b3VyY2VJZGVudGlmaWVyOworICAgICAgICAgICAgcmV0dXJuIGZpbGxQYXR0ZXJuUmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyOwogICAgIH0KIAogICAgIHNldFN0YXRlSXRlbS5hcHBseShjb250
ZXh0LCBzdHJva2VQYXR0ZXJuSW1hZ2UsIGZpbGxQYXR0ZXJuSW1hZ2UpOworICAgIGlmIChkZWxl
Z2F0ZSkgeworICAgICAgICBhdXRvIGNoYW5nZUZsYWdzID0gc2V0U3RhdGVJdGVtLnN0YXRlQ2hh
bmdlKCkubV9jaGFuZ2VGbGFnczsKKyAgICAgICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VQYXR0ZXJuQ2hhbmdlKSkKKyAgICAgICAgICAgIGRl
bGVnYXRlLT5yZWNvcmRSZXNvdXJjZVVzZShzdHJva2VQYXR0ZXJuUmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyKTsKKyAgICAgICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpGaWxsUGF0dGVybkNoYW5nZSkpCisgICAgICAgICAgICBkZWxlZ2F0ZS0+cmVj
b3JkUmVzb3VyY2VVc2UoZmlsbFBhdHRlcm5SZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwor
ICAgIH0KICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBUPgot
aW5saW5lIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4g
YXBwbHlGb250SXRlbShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZvbnRSZW5kZXJp
bmdSZXNvdXJjZU1hcCYgZm9udHMsIEl0ZW1IYW5kbGUgaXRlbSkKK2lubGluZSBzdGF0aWMgc3Rk
OjpvcHRpb25hbDxSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI+IGFwcGx5Rm9udEl0ZW0oR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGb250UmVuZGVyaW5nUmVzb3VyY2VNYXAmIGZv
bnRzLCBJdGVtSGFuZGxlIGl0ZW0sIFJlcGxheWVyOjpEZWxlZ2F0ZSogZGVsZWdhdGUpCiB7CiAg
ICAgYXV0byYgZm9udEl0ZW0gPSBpdGVtLmdldDxUPigpOwogICAgIGF1dG8gcmVzb3VyY2VJZGVu
dGlmaWVyID0gZm9udEl0ZW0uZm9udElkZW50aWZpZXIoKTsKICAgICBpZiAoYXV0byogZm9udCA9
IGZvbnRzLmdldChyZXNvdXJjZUlkZW50aWZpZXIpKSB7CiAgICAgICAgIGZvbnRJdGVtLmFwcGx5
KGNvbnRleHQsICpmb250KTsKKyAgICAgICAgaWYgKGRlbGVnYXRlKQorICAgICAgICAgICAgZGVs
ZWdhdGUtPnJlY29yZFJlc291cmNlVXNlKHJlc291cmNlSWRlbnRpZmllcik7CiAgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgfQogICAgIHJldHVybiByZXNvdXJjZUlkZW50aWZpZXI7
CkBAIC0xMzEsMjUgKzE0NCwyNSBAQCBzdGQ6OnBhaXI8c3RkOjpvcHRpb25hbDxTdG9wUmVwbGF5
UmVhc29uPiwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdSZXNvdXJjZUlkZW50aQogICAgIH0KIAog
ICAgIGlmIChpdGVtLmlzPERyYXdOYXRpdmVJbWFnZT4oKSkgewotICAgICAgICBpZiAoYXV0byBt
aXNzaW5nQ2FjaGVkUmVzb3VyY2VJZGVudGlmaWVyID0gYXBwbHlOYXRpdmVJbWFnZUl0ZW08RHJh
d05hdGl2ZUltYWdlPihjb250ZXh0KCksIG1fbmF0aXZlSW1hZ2VzLCBpdGVtKSkKKyAgICAgICAg
aWYgKGF1dG8gbWlzc2luZ0NhY2hlZFJlc291cmNlSWRlbnRpZmllciA9IGFwcGx5TmF0aXZlSW1h
Z2VJdGVtPERyYXdOYXRpdmVJbWFnZT4oY29udGV4dCgpLCBtX25hdGl2ZUltYWdlcywgaXRlbSwg
bV9kZWxlZ2F0ZSkpCiAgICAgICAgICAgICByZXR1cm4geyBTdG9wUmVwbGF5UmVhc29uOjpNaXNz
aW5nQ2FjaGVkUmVzb3VyY2UsIFdURk1vdmUobWlzc2luZ0NhY2hlZFJlc291cmNlSWRlbnRpZmll
cikgfTsKICAgICAgICAgcmV0dXJuIHsgc3RkOjpudWxsb3B0LCBzdGQ6Om51bGxvcHQgfTsKICAg
ICB9CiAKICAgICBpZiAoaXRlbS5pczxEcmF3R2x5cGhzPigpKSB7Ci0gICAgICAgIGlmIChhdXRv
IG1pc3NpbmdDYWNoZWRSZXNvdXJjZUlkZW50aWZpZXIgPSBhcHBseUZvbnRJdGVtPERyYXdHbHlw
aHM+KGNvbnRleHQoKSwgbV9mb250cywgaXRlbSkpCisgICAgICAgIGlmIChhdXRvIG1pc3NpbmdD
YWNoZWRSZXNvdXJjZUlkZW50aWZpZXIgPSBhcHBseUZvbnRJdGVtPERyYXdHbHlwaHM+KGNvbnRl
eHQoKSwgbV9mb250cywgaXRlbSwgbV9kZWxlZ2F0ZSkpCiAgICAgICAgICAgICByZXR1cm4geyBT
dG9wUmVwbGF5UmVhc29uOjpNaXNzaW5nQ2FjaGVkUmVzb3VyY2UsIFdURk1vdmUobWlzc2luZ0Nh
Y2hlZFJlc291cmNlSWRlbnRpZmllcikgfTsKICAgICAgICAgcmV0dXJuIHsgc3RkOjpudWxsb3B0
LCBzdGQ6Om51bGxvcHQgfTsKICAgICB9CiAKICAgICBpZiAoaXRlbS5pczxEcmF3UGF0dGVybj4o
KSkgewotICAgICAgICBpZiAoYXV0byBtaXNzaW5nQ2FjaGVkUmVzb3VyY2VJZGVudGlmaWVyID0g
YXBwbHlOYXRpdmVJbWFnZUl0ZW08RHJhd1BhdHRlcm4+KGNvbnRleHQoKSwgbV9uYXRpdmVJbWFn
ZXMsIGl0ZW0pKQorICAgICAgICBpZiAoYXV0byBtaXNzaW5nQ2FjaGVkUmVzb3VyY2VJZGVudGlm
aWVyID0gYXBwbHlOYXRpdmVJbWFnZUl0ZW08RHJhd1BhdHRlcm4+KGNvbnRleHQoKSwgbV9uYXRp
dmVJbWFnZXMsIGl0ZW0sIG1fZGVsZWdhdGUpKQogICAgICAgICAgICAgcmV0dXJuIHsgU3RvcFJl
cGxheVJlYXNvbjo6TWlzc2luZ0NhY2hlZFJlc291cmNlLCBXVEZNb3ZlKG1pc3NpbmdDYWNoZWRS
ZXNvdXJjZUlkZW50aWZpZXIpIH07CiAgICAgICAgIHJldHVybiB7IHN0ZDo6bnVsbG9wdCwgc3Rk
OjpudWxsb3B0IH07CiAgICAgfQogCiAgICAgaWYgKGl0ZW0uaXM8U2V0U3RhdGU+KCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8gbWlzc2luZ0NhY2hlZFJlc291cmNlSWRlbnRpZmllciA9IGFwcGx5U2V0
U3RhdGVJdGVtKGNvbnRleHQoKSwgbV9uYXRpdmVJbWFnZXMsIGl0ZW0pKQorICAgICAgICBpZiAo
YXV0byBtaXNzaW5nQ2FjaGVkUmVzb3VyY2VJZGVudGlmaWVyID0gYXBwbHlTZXRTdGF0ZUl0ZW0o
Y29udGV4dCgpLCBtX25hdGl2ZUltYWdlcywgaXRlbSwgbV9kZWxlZ2F0ZSkpCiAgICAgICAgICAg
ICByZXR1cm4geyBTdG9wUmVwbGF5UmVhc29uOjpNaXNzaW5nQ2FjaGVkUmVzb3VyY2UsIFdURk1v
dmUobWlzc2luZ0NhY2hlZFJlc291cmNlSWRlbnRpZmllcikgfTsKICAgICAgICAgcmV0dXJuIHsg
c3RkOjpudWxsb3B0LCBzdGQ6Om51bGxvcHQgfTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlc291cmNl
Q2FjaGVQcm94eS5jcHAKaW5kZXggOTQxNzllMDRmZTQ4N2NlMTUwOTU5YTA5ZTY2YjY0NTU0NWQy
MmQ1Yy4uMDAwMGJkZmRiMTFlMzBjZmZmNTE1NWIwNGEzOThkNTU4NWFlNDk2NyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNh
Y2hlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmNwcApAQCAtNDEsOCArNDEsOCBAQCBSZW1vdGVSZXNv
dXJjZUNhY2hlUHJveHk6OlJlbW90ZVJlc291cmNlQ2FjaGVQcm94eShSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkmCiAKIFJlbW90ZVJlc291cmNlQ2FjaGVQcm94eTo6flJlbW90ZVJlc291cmNl
Q2FjaGVQcm94eSgpCiB7Ci0gICAgZm9yIChhdXRvJiBpbWFnZSA6IG1fbmF0aXZlSW1hZ2VzLnZh
bHVlcygpKQotICAgICAgICBpbWFnZS0+cmVtb3ZlT2JzZXJ2ZXIoKnRoaXMpOworICAgIGZvciAo
YXV0byYgbmF0aXZlSW1hZ2VTdGF0ZSA6IG1fbmF0aXZlSW1hZ2VzLnZhbHVlcygpKQorICAgICAg
ICBuYXRpdmVJbWFnZVN0YXRlLmltYWdlLT5yZW1vdmVPYnNlcnZlcigqdGhpcyk7CiB9CiAKIHZv
aWQgUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5OjpjYWNoZUltYWdlQnVmZmVyKFdlYkNvcmU6Oklt
YWdlQnVmZmVyJiBpbWFnZUJ1ZmZlcikKQEAgLTgwLDggKzgwLDExIEBAIGlubGluZSBzdGF0aWMg
UmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gY3JlYXRlU2hhcmVhYmxlQml0bWFwRnJvbU5hdGl2ZUlt
YWdlKE5hdGl2CiAKIHZvaWQgUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5OjpjYWNoZU5hdGl2ZUlt
YWdlKE5hdGl2ZUltYWdlJiBpbWFnZSkKIHsKLSAgICBpZiAobV9uYXRpdmVJbWFnZXMuY29udGFp
bnMoaW1hZ2UucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCkpKQorICAgIGF1dG8gaXRlcmF0
b3IgPSBtX25hdGl2ZUltYWdlcy5maW5kKGltYWdlLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
cigpKTsKKyAgICBpZiAoaXRlcmF0b3IgIT0gbV9uYXRpdmVJbWFnZXMuZW5kKCkpIHsKKyAgICAg
ICAgKytpdGVyYXRvci0+dmFsdWUudXNlQ291bnQ7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAK
ICAgICBhdXRvIGJpdG1hcCA9IGNyZWF0ZVNoYXJlYWJsZUJpdG1hcEZyb21OYXRpdmVJbWFnZShp
bWFnZSk7CiAgICAgaWYgKCFiaXRtYXApCkBAIC05Miw3ICs5NSw3IEBAIHZvaWQgUmVtb3RlUmVz
b3VyY2VDYWNoZVByb3h5OjpjYWNoZU5hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBpbWFnZSkKICAg
ICBpZiAoaGFuZGxlLmlzTnVsbCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX25hdGl2ZUlt
YWdlcy5hZGQoaW1hZ2UucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIG1ha2VXZWFrUHRy
KGltYWdlKSk7CisgICAgbV9uYXRpdmVJbWFnZXMuYWRkKGltYWdlLnJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcigpLCBOYXRpdmVJbWFnZVN0YXRlIHsgbWFrZVdlYWtQdHIoaW1hZ2UpLCAxIH0p
OwogCiAgICAgLy8gU2V0IGl0c2VsZiBhcyBhbiBvYnNlcnZlciB0byBOYXRpdmVJbWFnZSwgc28g
cmVsZWFzZU5hdGl2ZUltYWdlKCkKICAgICAvLyBnZXRzIGNhbGxlZCB3aGVuIE5hdGl2ZUltYWdl
IGlzIGJlaW5nIGRlbGVsZXRlZC4KQEAgLTEwNCw4ICsxMDcsOCBAQCB2b2lkIFJlbW90ZVJlc291
cmNlQ2FjaGVQcm94eTo6Y2FjaGVOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgaW1hZ2UpCiAKIHZv
aWQgUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5OjpjYWNoZUZvbnQoRm9udCYgZm9udCkKIHsKLSAg
ICBhdXRvIHJlc3VsdCA9IG1fZm9udElkZW50aWZpZXJUb0xhc3RSZW5kZXJpbmdVcGRhdGVJRE1h
cC5lbnN1cmUoZm9udC5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgWyZdIHsKLSAgICAg
ICAgcmV0dXJuIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LnJlbmRlcmluZ1VwZGF0ZUlE
KCk7CisgICAgYXV0byByZXN1bHQgPSBtX2ZvbnRzLmVuc3VyZShmb250LnJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcigpLCBbJl0geworICAgICAgICByZXR1cm4gRm9udFN0YXRlIHsgbV9yZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkucmVuZGVyaW5nVXBkYXRlSUQoKSwgMSB9OwogICAgIH0p
OwogCiAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7CkBAIC0xMTQsMTkgKzExNywyNSBAQCB2
b2lkIFJlbW90ZVJlc291cmNlQ2FjaGVQcm94eTo6Y2FjaGVGb250KEZvbnQmIGZvbnQpCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvJiBsYXN0VmVyc2lvbiA9IHJlc3VsdC5pdGVy
YXRvci0+dmFsdWU7Ci0gICAgaWYgKGxhc3RWZXJzaW9uICE9IG1fcmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5LnJlbmRlcmluZ1VwZGF0ZUlEKCkpIHsKLSAgICAgICAgbGFzdFZlcnNpb24gPSBt
X3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5yZW5kZXJpbmdVcGRhdGVJRCgpOworICAgIGF1
dG8mIGN1cnJlbnRTdGF0ZSA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CisgICAgaWYgKGN1cnJl
bnRTdGF0ZS5sYXN0UmVuZGVyaW5nVXBkYXRlVmVyc2lvblVzZWRXaXRoaW4gIT0gbV9yZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkucmVuZGVyaW5nVXBkYXRlSUQoKSkgeworICAgICAgICBjdXJy
ZW50U3RhdGUubGFzdFJlbmRlcmluZ1VwZGF0ZVZlcnNpb25Vc2VkV2l0aGluID0gbV9yZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkucmVuZGVyaW5nVXBkYXRlSUQoKTsKKyAgICAgICAgKytjdXJy
ZW50U3RhdGUudXNlQ291bnQ7CiAgICAgICAgICsrbV9udW1iZXJPZkZvbnRzVXNlZEluQ3VycmVu
dFJlbmRlcmluZ1VwZGF0ZTsKICAgICB9CiB9CiAKIHZvaWQgUmVtb3RlUmVzb3VyY2VDYWNoZVBy
b3h5OjpyZWxlYXNlTmF0aXZlSW1hZ2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcikKIHsKLSAgICBpZiAoIW1fbmF0aXZlSW1hZ2VzLnJlbW92
ZShyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpKQotICAgICAgICByZXR1cm47CisgICAgYXV0
byBpdGVyYXRvciA9IG1fbmF0aXZlSW1hZ2VzLmZpbmQocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyKTsKKyAgICBSRUxFQVNFX0FTU0VSVChpdGVyYXRvciAhPSBtX25hdGl2ZUltYWdlcy5lbmQo
KSk7CisKKyAgICBhdXRvIHVzZUNvdW50ID0gaXRlcmF0b3ItPnZhbHVlLnVzZUNvdW50OworCisg
ICAgYXV0byBzdWNjZXNzID0gbV9uYXRpdmVJbWFnZXMucmVtb3ZlKGl0ZXJhdG9yKTsKKyAgICBB
U1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOwogCi0gICAgbV9yZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkucmVsZWFzZVJlbW90ZVJlc291cmNlKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciwgMCk7IC8vIEZJWE1FOiBQYXNzIHRoZSByZWFsIHVzZSBjb3VudCBoZXJlLgorICAgIG1f
cmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LnJlbGVhc2VSZW1vdGVSZXNvdXJjZShyZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIsIHVzZUNvdW50KTsKIH0KIAogdm9pZCBSZW1vdGVSZXNvdXJj
ZUNhY2hlUHJveHk6OnByZXBhcmVGb3JOZXh0UmVuZGVyaW5nVXBkYXRlKCkKQEAgLTEzNiw5ICsx
NDUsOSBAQCB2b2lkIFJlbW90ZVJlc291cmNlQ2FjaGVQcm94eTo6cHJlcGFyZUZvck5leHRSZW5k
ZXJpbmdVcGRhdGUoKQogCiB2b2lkIFJlbW90ZVJlc291cmNlQ2FjaGVQcm94eTo6Y2xlYXJGb250
TWFwKCkKIHsKLSAgICBmb3IgKGF1dG8mIGl0ZW0gOiBtX2ZvbnRJZGVudGlmaWVyVG9MYXN0UmVu
ZGVyaW5nVXBkYXRlSURNYXApCi0gICAgICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
LnJlbGVhc2VSZW1vdGVSZXNvdXJjZShpdGVtLmtleSwgMCk7IC8vIEZJWE1FOiBQYXNzIHRoZSBy
ZWFsIHVzZSBjb3VudCBoZXJlLgotICAgIG1fZm9udElkZW50aWZpZXJUb0xhc3RSZW5kZXJpbmdV
cGRhdGVJRE1hcC5jbGVhcigpOworICAgIGZvciAoYXV0byYgZm9udFN0YXRlIDogbV9mb250cykK
KyAgICAgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkucmVsZWFzZVJlbW90ZVJlc291
cmNlKGZvbnRTdGF0ZS5rZXksIGZvbnRTdGF0ZS52YWx1ZS51c2VDb3VudCk7CisgICAgbV9mb250
cy5jbGVhcigpOwogICAgIG1fbnVtYmVyT2ZGb250c1VzZWRJbkN1cnJlbnRSZW5kZXJpbmdVcGRh
dGUgPSAwOwogfQogCkBAIC0xNDYsMjEgKzE1NSwyMSBAQCB2b2lkIFJlbW90ZVJlc291cmNlQ2Fj
aGVQcm94eTo6ZmluYWxpemVSZW5kZXJpbmdVcGRhdGVGb3JGb250cygpCiB7CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBtaW5pbXVtUmVuZGVyaW5nVXBkYXRlQ291bnRUb0tlZXBGb250
QWxpdmUgPSA0OwogCi0gICAgdW5zaWduZWQgdG90YWxGb250Q291bnQgPSBtX2ZvbnRJZGVudGlm
aWVyVG9MYXN0UmVuZGVyaW5nVXBkYXRlSURNYXAuc2l6ZSgpOworICAgIHVuc2lnbmVkIHRvdGFs
Rm9udENvdW50ID0gbV9mb250cy5zaXplKCk7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9udW1iZXJP
ZkZvbnRzVXNlZEluQ3VycmVudFJlbmRlcmluZ1VwZGF0ZSA8PSB0b3RhbEZvbnRDb3VudCk7CiAg
ICAgaWYgKHRvdGFsRm9udENvdW50ID09IG1fbnVtYmVyT2ZGb250c1VzZWRJbkN1cnJlbnRSZW5k
ZXJpbmdVcGRhdGUpCiAgICAgICAgIHJldHVybjsKIAogICAgIEhhc2hTZXQ8V2ViQ29yZTo6UmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyPiB0b1JlbW92ZTsKICAgICBhdXRvIHJlbmRlcmluZ1Vw
ZGF0ZUlEID0gbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkucmVuZGVyaW5nVXBkYXRlSUQo
KTsKLSAgICBmb3IgKGF1dG8mIGl0ZW0gOiBtX2ZvbnRJZGVudGlmaWVyVG9MYXN0UmVuZGVyaW5n
VXBkYXRlSURNYXApIHsKLSAgICAgICAgaWYgKHJlbmRlcmluZ1VwZGF0ZUlEIC0gaXRlbS52YWx1
ZSA+PSBtaW5pbXVtUmVuZGVyaW5nVXBkYXRlQ291bnRUb0tlZXBGb250QWxpdmUpIHsKKyAgICBm
b3IgKGF1dG8mIGl0ZW0gOiBtX2ZvbnRzKSB7CisgICAgICAgIGlmIChyZW5kZXJpbmdVcGRhdGVJ
RCAtIGl0ZW0udmFsdWUubGFzdFJlbmRlcmluZ1VwZGF0ZVZlcnNpb25Vc2VkV2l0aGluID49IG1p
bmltdW1SZW5kZXJpbmdVcGRhdGVDb3VudFRvS2VlcEZvbnRBbGl2ZSkgewogICAgICAgICAgICAg
dG9SZW1vdmUuYWRkKGl0ZW0ua2V5KTsKLSAgICAgICAgICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5LnJlbGVhc2VSZW1vdGVSZXNvdXJjZShpdGVtLmtleSwgMCk7IC8vIEZJWE1FOiBQ
YXNzIHRoZSByZWFsIHVzZSBjb3VudCBoZXJlLgorICAgICAgICAgICAgbV9yZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHkucmVsZWFzZVJlbW90ZVJlc291cmNlKGl0ZW0ua2V5LCBpdGVtLnZhbHVl
LnVzZUNvdW50KTsKICAgICAgICAgfQogICAgIH0KIAotICAgIG1fZm9udElkZW50aWZpZXJUb0xh
c3RSZW5kZXJpbmdVcGRhdGVJRE1hcC5yZW1vdmVJZihbJl0oY29uc3QgYXV0byYgYnVja2V0KSB7
CisgICAgbV9mb250cy5yZW1vdmVJZihbJl0oY29uc3QgYXV0byYgYnVja2V0KSB7CiAgICAgICAg
IHJldHVybiB0b1JlbW92ZS5jb250YWlucyhidWNrZXQua2V5KTsKICAgICB9KTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVzb3Vy
Y2VDYWNoZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1Jl
bW90ZVJlc291cmNlQ2FjaGVQcm94eS5oCmluZGV4IDQ0NWMyNGRmNzQ3YjY1ZGFiNzk1ODE1OGRi
YjJjNTY4NTRiYTY4NjIuLjRhNmUzYTBmN2I3MTY0MTVkMmFhNWExZTZlY2E1ZDliNWRmYjEwOGYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3Rl
UmVzb3VyY2VDYWNoZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9n
cmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkuaApAQCAtNTEsOCArNTEsOCBAQCBwdWJs
aWM6CiAgICAgdm9pZCByZWxlYXNlSW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyKTsKIAogICAgIHZvaWQgY2FjaGVOYXRpdmVJbWFnZShXZWJDb3JlOjpOYXRp
dmVJbWFnZSYpOwotCiAgICAgdm9pZCBjYWNoZUZvbnQoV2ViQ29yZTo6Rm9udCYpOworCiAgICAg
dm9pZCBmaW5hbGl6ZVJlbmRlcmluZ1VwZGF0ZSgpOwogCiAgICAgdm9pZCByZW1vdGVSZXNvdXJj
ZUNhY2hlV2FzRGVzdHJveWVkKCk7CkBAIC02MCw3ICs2MCwxOCBAQCBwdWJsaWM6CiAKIHByaXZh
dGU6CiAgICAgdXNpbmcgSW1hZ2VCdWZmZXJIYXNoTWFwID0gSGFzaE1hcDxXZWJDb3JlOjpSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIFdlYWtQdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+PjsK
LSAgICB1c2luZyBOYXRpdmVJbWFnZUhhc2hNYXAgPSBIYXNoTWFwPFdlYkNvcmU6OlJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciwgV2Vha1B0cjxXZWJDb3JlOjpOYXRpdmVJbWFnZT4+OworCisg
ICAgc3RydWN0IE5hdGl2ZUltYWdlU3RhdGUgeworICAgICAgICBXZWFrUHRyPFdlYkNvcmU6Ok5h
dGl2ZUltYWdlPiBpbWFnZTsKKyAgICAgICAgdWludDY0X3QgdXNlQ291bnQ7CisgICAgfTsKKyAg
ICB1c2luZyBOYXRpdmVJbWFnZUhhc2hNYXAgPSBIYXNoTWFwPFdlYkNvcmU6OlJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciwgTmF0aXZlSW1hZ2VTdGF0ZT47CisKKyAgICBzdHJ1Y3QgRm9udFN0
YXRlIHsKKyAgICAgICAgUmVuZGVyaW5nVXBkYXRlSUQgbGFzdFJlbmRlcmluZ1VwZGF0ZVZlcnNp
b25Vc2VkV2l0aGluOworICAgICAgICB1aW50NjRfdCB1c2VDb3VudDsKKyAgICB9OworICAgIHVz
aW5nIEZvbnRIYXNoTWFwID0gSGFzaE1hcDxXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIsIEZvbnRTdGF0ZT47CiAgICAgCiAgICAgdm9pZCByZWxlYXNlTmF0aXZlSW1hZ2UoV2Vi
Q29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSBvdmVycmlkZTsKICAgICB2b2lkIGZp
bmFsaXplUmVuZGVyaW5nVXBkYXRlRm9yRm9udHMoKTsKQEAgLTY5LDggKzgwLDggQEAgcHJpdmF0
ZToKIAogICAgIEltYWdlQnVmZmVySGFzaE1hcCBtX2ltYWdlQnVmZmVyczsKICAgICBOYXRpdmVJ
bWFnZUhhc2hNYXAgbV9uYXRpdmVJbWFnZXM7CisgICAgRm9udEhhc2hNYXAgbV9mb250czsKIAot
ICAgIEhhc2hNYXA8V2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBSZW5kZXJp
bmdVcGRhdGVJRD4gbV9mb250SWRlbnRpZmllclRvTGFzdFJlbmRlcmluZ1VwZGF0ZUlETWFwOwog
ICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZGb250c1VzZWRJbkN1cnJlbnRSZW5kZXJpbmdVcGRhdGUg
eyAwIH07CiAKICAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkmIG1fcmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5Owo=
</data>
<flag name="review"
          id="456758"
          type_id="1"
          status="+"
          setter="sabouhallawa"
    />
    <flag name="commit-queue"
          id="456879"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>