<?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>228240</bug_id>
          
          <creation_ts>2021-07-23 11:28:58 -0700</creation_ts>
          <short_desc>3.5 MB system-wide footprint impact due to thread-locals in libANGLE</short_desc>
          <delta_ts>2021-07-27 14:36:42 -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>ANGLE</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>
          
          <blocked>220896</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dean Jackson">dino</reporter>
          <assigned_to name="Dean Jackson">dino</assigned_to>
          <cc>dino</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>kbr</cc>
    
    <cc>kkinnunen</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1779109</commentid>
    <comment_count>0</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2021-07-23 11:28:58 -0700</bug_when>
    <thetext>From the macOS system memory folks:

Because of the way thread-locals are implemented in dyld today, they are dirty on process launch, even if the process does not use the functionality provided by your framework at all.

/System/Library/PrivateFrameworks/WebCore.framework/Frameworks/libANGLE-shared.dylib has recently added these symbols:

  100.0%: __ZN2gl20gCurrentValidContextE
  97.5%: __ZN3egl14gCurrentThreadE

(gl::gCurrentValidContext and egl::gCurrentThread)

Which are thread-local.

This is a regression in macOS Monterey.

Is it possible to switch to a different mechanism, or to use pthread TLVs manually instead of thread-locals?
Because of this, libANGLE-shared used to be dirty in 172 processes and is now dirtied in 355.

Overall it is a 3.5MB regression.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779111</commentid>
    <comment_count>1</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2021-07-23 11:29:19 -0700</bug_when>
    <thetext>rdar://79504783</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779114</commentid>
    <comment_count>2</comment_count>
      <attachid>434103</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2021-07-23 11:32:21 -0700</bug_when>
    <thetext>Created attachment 434103
WIP

Work in progress to get review. Please ignore the change to WebKit networking code - that was to help a local compile.

I&apos;m not confident in this patch because:
- I&apos;ve never used pthread_key_create before
- I&apos;m worried about a performance regression in querying state on every access (which happens a lot)
- I want a better place to initialise and delete the keys
- This is an invasive patch that will need to be applied each time we update ANGLE

Eventually we&apos;ll fix dyld&apos;s thread_local implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779115</commentid>
    <comment_count>3</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2021-07-23 11:33:17 -0700</bug_when>
    <thetext>Note that there are important steps to take when updating ANGLE. See https://trac.webkit.org/wiki/UpdatingANGLE</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779128</commentid>
    <comment_count>4</comment_count>
      <attachid>434103</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2021-07-23 12:02:35 -0700</bug_when>
    <thetext>Comment on attachment 434103
WIP

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

Looks good overall especially if this significantly reduces binary size, though it&apos;s unfortunate we can&apos;t use the built-in mechanisms.

A few questions / comments, but to unblock this work, r+ now.

&gt; Source/ThirdParty/ANGLE/src/libANGLE/Context.cpp:302
&gt; +void FreeCurrentValidContext()

This and the function above are a little confusingly named. Could you consider:

  InitializeCurrentValidContextTLS
  FreeCurrentValidContextTLS
?

I also noticed that FreeCurrentValidContext isn&apos;t called from anywhere - which is fine because it can really only be called upon unloading of ANGLE or application shutdown. Should a comment be added about when it could plausibly be used?

&gt; Source/ThirdParty/ANGLE/src/libGLESv2/global_state.cpp:49
&gt; +    if (!initialized) {

Is it necessary to do this double-checking? The documentation indicates that the correct usage is just to call dispatch_once unconditionally.
https://developer.apple.com/documentation/dispatch/1447169-dispatch_once

&gt; Source/ThirdParty/ANGLE/src/libGLESv2/global_state.cpp:99
&gt; +bool InitializeCurrentThreadTLS()

The naming convention between the CurrentThread and CurrentValidContext should match. So maybe here:

InitializeCurrentThreadTLSIndex
FreeCurrentThreadTLSIndex
GetCurrentThreadTLS
SetCurrentThreadTLS

and use TLSIndex / TLS in the CurrentValidContext functions above.

&gt; Source/ThirdParty/ANGLE/src/libGLESv2/global_state.cpp:119
&gt; +    if (!initialized) {

Same question about the double-checked initialization, though I do see this is on the hot path.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779142</commentid>
    <comment_count>5</comment_count>
      <attachid>434103</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2021-07-23 12:32:32 -0700</bug_when>
    <thetext>Comment on attachment 434103
WIP

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

I appreciate Kenneth&apos;s review but I&apos;m gonna be a little more explicit and say r- because I see a bug.

&gt; Source/ThirdParty/ANGLE/src/libGLESv2/global_state.cpp:47
&gt; +    static dispatch_once_t once = 0;

Better to leave off the = 0 and accept whatever the platform says is the default linker-initialized value.

&gt;&gt; Source/ThirdParty/ANGLE/src/libGLESv2/global_state.cpp:49
&gt;&gt; +    static bool initialized = false;
&gt;&gt; +    if (!initialized) {
&gt; 
&gt; Is it necessary to do this double-checking? The documentation indicates that the correct usage is just to call dispatch_once unconditionally.
&gt; https://developer.apple.com/documentation/dispatch/1447169-dispatch_once

Kenneth is right. This is a bug. Because &apos;initialized&apos; lacks any synchronization or memory barrier, it can read as true when it is still logically false.

I suggest removing the initialized variable and always calling dispatch_once. dispatch_once is fast (and inlined) in the &quot;already dispatched&quot; case.

&gt;&gt; Source/ThirdParty/ANGLE/src/libGLESv2/global_state.cpp:119
&gt;&gt; +    if (!initialized) {
&gt; 
&gt; Same question about the double-checked initialization, though I do see this is on the hot path.

Same comments as above.

&gt; Source/WebKit/NetworkProcess/webrtc/NetworkRTCUDPSocketCocoa.mm:282
&gt; +#if defined(NW_HAS_SHARE_LISTENER_PORT) &amp;&amp; NW_HAS_SHARE_LISTENER_PORT &amp;&amp; 0

Revert?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779257</commentid>
    <comment_count>6</comment_count>
      <attachid>434103</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2021-07-23 17:07:00 -0700</bug_when>
    <thetext>Comment on attachment 434103
WIP

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

&gt;&gt; Source/ThirdParty/ANGLE/src/libANGLE/Context.cpp:302
&gt;&gt; +void FreeCurrentValidContext()
&gt; 
&gt; This and the function above are a little confusingly named. Could you consider:
&gt; 
&gt;   InitializeCurrentValidContextTLS
&gt;   FreeCurrentValidContextTLS
&gt; ?
&gt; 
&gt; I also noticed that FreeCurrentValidContext isn&apos;t called from anywhere - which is fine because it can really only be called upon unloading of ANGLE or application shutdown. Should a comment be added about when it could plausibly be used?

Done!

(The reason I prefixed the thread form with TLS was because there was already a method called GetCurrentThread()).

&gt;&gt; Source/ThirdParty/ANGLE/src/libGLESv2/global_state.cpp:47
&gt;&gt; +    static dispatch_once_t once = 0;
&gt; 
&gt; Better to leave off the = 0 and accept whatever the platform says is the default linker-initialized value.

Done

&gt;&gt;&gt; Source/ThirdParty/ANGLE/src/libGLESv2/global_state.cpp:49
&gt;&gt;&gt; +    if (!initialized) {
&gt;&gt; 
&gt;&gt; Is it necessary to do this double-checking? The documentation indicates that the correct usage is just to call dispatch_once unconditionally.
&gt;&gt; https://developer.apple.com/documentation/dispatch/1447169-dispatch_once
&gt; 
&gt; Kenneth is right. This is a bug. Because &apos;initialized&apos; lacks any synchronization or memory barrier, it can read as true when it is still logically false.
&gt; 
&gt; I suggest removing the initialized variable and always calling dispatch_once. dispatch_once is fast (and inlined) in the &quot;already dispatched&quot; case.

Removed (although, question... even if it was read as true, the code would still hit the dispatch_once and sync there right?)

&gt;&gt; Source/ThirdParty/ANGLE/src/libGLESv2/global_state.cpp:99
&gt;&gt; +bool InitializeCurrentThreadTLS()
&gt; 
&gt; The naming convention between the CurrentThread and CurrentValidContext should match. So maybe here:
&gt; 
&gt; InitializeCurrentThreadTLSIndex
&gt; FreeCurrentThreadTLSIndex
&gt; GetCurrentThreadTLS
&gt; SetCurrentThreadTLS
&gt; 
&gt; and use TLSIndex / TLS in the CurrentValidContext functions above.

Done.

&gt;&gt;&gt; Source/ThirdParty/ANGLE/src/libGLESv2/global_state.cpp:119
&gt;&gt;&gt; +    if (!initialized) {
&gt;&gt; 
&gt;&gt; Same question about the double-checked initialization, though I do see this is on the hot path.
&gt; 
&gt; Same comments as above.

Done. I also moved the initialization call into the Get/Set function to make it less confusing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779264</commentid>
    <comment_count>7</comment_count>
      <attachid>434148</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2021-07-23 17:23:27 -0700</bug_when>
    <thetext>Created attachment 434148
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779271</commentid>
    <comment_count>8</comment_count>
      <attachid>434148</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2021-07-23 17:43:08 -0700</bug_when>
    <thetext>Comment on attachment 434148
Patch

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

This revision looks better to me. Since Geoff had concerns earlier, please sync up with him too. r+ with two small nits.

&gt; Source/ThirdParty/ANGLE/src/libANGLE/Context.cpp:297
&gt; +TLSIndex CurrentValidContextIndex = TLS_INVALID_INDEX;

Nit: did you want to put this in an anonymous namespace, make it static, etc. to hide the symbol&apos;s visibility?

&gt; Source/ThirdParty/ANGLE/src/libGLESv2/global_state.cpp:94
&gt; +TLSIndex CurrentThreadIndex = TLS_INVALID_INDEX;

Same question here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779479</commentid>
    <comment_count>9</comment_count>
      <attachid>434148</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2021-07-26 11:02:37 -0700</bug_when>
    <thetext>Comment on attachment 434148
Patch

r=me too; also agree that we should use static for CurrentValidContextIndex and CurrentThreadIndex.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779787</commentid>
    <comment_count>10</comment_count>
      <attachid>434148</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2021-07-27 11:06:30 -0700</bug_when>
    <thetext>Comment on attachment 434148
Patch

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

&gt;&gt; Source/ThirdParty/ANGLE/src/libANGLE/Context.cpp:297
&gt;&gt; +TLSIndex CurrentValidContextIndex = TLS_INVALID_INDEX;
&gt; 
&gt; Nit: did you want to put this in an anonymous namespace, make it static, etc. to hide the symbol&apos;s visibility?

Yes, thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779788</commentid>
    <comment_count>11</comment_count>
      <attachid>434148</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2021-07-27 11:06:31 -0700</bug_when>
    <thetext>Comment on attachment 434148
Patch

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

&gt;&gt; Source/ThirdParty/ANGLE/src/libANGLE/Context.cpp:297
&gt;&gt; +TLSIndex CurrentValidContextIndex = TLS_INVALID_INDEX;
&gt; 
&gt; Nit: did you want to put this in an anonymous namespace, make it static, etc. to hide the symbol&apos;s visibility?

Yes, thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779843</commentid>
    <comment_count>12</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2021-07-27 14:36:42 -0700</bug_when>
    <thetext>Committed r280349 (239996@main): &lt;https://commits.webkit.org/239996@main&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434103</attachid>
            <date>2021-07-23 11:32:21 -0700</date>
            <delta_ts>2021-07-23 17:23:20 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>thread-local.patch</filename>
            <type>text/plain</type>
            <size>8721</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9Db250ZXh0
LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9Db250ZXh0LmNwcApp
bmRleCA1Yjg3ZDRmZGZmNDUuLjA3NzJmMmJiY2YwNyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9Db250ZXh0LmNwcApAQCAtNDYsNiArNDYsMTEgQEAKICNp
bmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9Gb3JtYXQuaCIKICNpbmNsdWRlICJsaWJBTkdMRS92
YWxpZGF0aW9uRVMuaCIKIAorI2lmIGRlZmluZWQoQU5HTEVfUExBVEZPUk1fQVBQTEUpCisjaW5j
bHVkZSAiY29tbW9uL3Rscy5oIgorI2luY2x1ZGUgPGRpc3BhdGNoL2Rpc3BhdGNoLmg+CisjZW5k
aWYKKwogbmFtZXNwYWNlIGdsCiB7CiBuYW1lc3BhY2UKQEAgLTI4Myw3ICsyODgsNDAgQEAgYm9v
bCBJc0NvbG9yTWFza2VkT3V0KGNvbnN0IEJsZW5kU3RhdGVFeHQgJmJsZW5kU3RhdGVFeHQsIGNv
bnN0IEdMaW50IGRyYXdidWZmZXIKIH0KIH0gIC8vIGFub255bW91cyBuYW1lc3BhY2UKIAorI2lm
IGRlZmluZWQoQU5HTEVfUExBVEZPUk1fQVBQTEUpCitUTFNJbmRleCBDdXJyZW50VmFsaWRDb250
ZXh0SW5kZXggPSBUTFNfSU5WQUxJRF9JTkRFWDsKKworYm9vbCBJbml0aWFsaXplQ3VycmVudFZh
bGlkQ29udGV4dCgpCit7CisgICAgQVNTRVJUKEN1cnJlbnRWYWxpZENvbnRleHRJbmRleCA9PSBU
TFNfSU5WQUxJRF9JTkRFWCk7CisKKyAgICBDdXJyZW50VmFsaWRDb250ZXh0SW5kZXggPSBDcmVh
dGVUTFNJbmRleCgpOworICAgIHJldHVybiBDdXJyZW50VmFsaWRDb250ZXh0SW5kZXggIT0gVExT
X0lOVkFMSURfSU5ERVg7Cit9CisKK3ZvaWQgRnJlZUN1cnJlbnRWYWxpZENvbnRleHQoKQorewor
ICAgIEFTU0VSVChDdXJyZW50VmFsaWRDb250ZXh0SW5kZXggIT0gVExTX0lOVkFMSURfSU5ERVgp
OworCisgICAgRGVzdHJveVRMU0luZGV4KEN1cnJlbnRWYWxpZENvbnRleHRJbmRleCk7CisgICAg
Q3VycmVudFZhbGlkQ29udGV4dEluZGV4ID0gVExTX0lOVkFMSURfSU5ERVg7Cit9CisKK0NvbnRl
eHQgKkdldEN1cnJlbnRWYWxpZENvbnRleHQoKQoreworICAgIEFTU0VSVChDdXJyZW50VmFsaWRD
b250ZXh0SW5kZXggIT0gVExTX0lOVkFMSURfSU5ERVgpOworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxDb250ZXh0ICo+KEdldFRMU1ZhbHVlKEN1cnJlbnRWYWxpZENvbnRleHRJbmRleCkpOworfQor
Cit2b2lkIFNldEN1cnJlbnRWYWxpZENvbnRleHQoQ29udGV4dCAqY29udGV4dCkKK3sKKyAgICBB
U1NFUlQoQ3VycmVudFZhbGlkQ29udGV4dEluZGV4ICE9IFRMU19JTlZBTElEX0lOREVYKTsKKyAg
ICBTZXRUTFNWYWx1ZShDdXJyZW50VmFsaWRDb250ZXh0SW5kZXgsIGNvbnRleHQpOworfQorCisj
ZWxzZQogdGhyZWFkX2xvY2FsIENvbnRleHQgKmdDdXJyZW50VmFsaWRDb250ZXh0ID0gbnVsbHB0
cjsKKyNlbmRpZgogCiBDb250ZXh0OjpDb250ZXh0KGVnbDo6RGlzcGxheSAqZGlzcGxheSwKICAg
ICAgICAgICAgICAgICAgY29uc3QgZWdsOjpDb25maWcgKmNvbmZpZywKQEAgLTI1NjcsNyArMjYw
NSwxMSBAQCB2b2lkIENvbnRleHQ6OnNldENvbnRleHRMb3N0KCkKICAgICBtU2tpcFZhbGlkYXRp
b24gPSBmYWxzZTsKIAogICAgIC8vIE1ha2Ugc3VyZSB3ZSB1cGRhdGUgVExTLgorI2lmIGRlZmlu
ZWQoQU5HTEVfUExBVEZPUk1fQVBQTEUpCisgICAgU2V0Q3VycmVudFZhbGlkQ29udGV4dChudWxs
cHRyKTsKKyNlbHNlCiAgICAgZ0N1cnJlbnRWYWxpZENvbnRleHQgPSBudWxscHRyOworI2VuZGlm
CiB9CiAKIEdMZW51bSBDb250ZXh0OjpnZXRHcmFwaGljc1Jlc2V0U3RhdHVzKCkKQEAgLTkxNjQs
NCArOTIwNiw1IEBAIHZvaWQgU3RhdGVDYWNoZTo6dXBkYXRlQ2FuRHJhdyhDb250ZXh0ICpjb250
ZXh0KQogICAgICAgICAgICAgICAgICAgICAgIChjb250ZXh0LT5nZXRTdGF0ZSgpLmdldFByb2dy
YW1FeGVjdXRhYmxlKCkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+Z2V0U3Rh
dGUoKS5nZXRQcm9ncmFtRXhlY3V0YWJsZSgpLT5oYXNWZXJ0ZXhBbmRGcmFnbWVudFNoYWRlcigp
KSk7CiB9CisKIH0gIC8vIG5hbWVzcGFjZSBnbApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkFOR0xFL0NvbnRleHQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJBTkdMRS9Db250ZXh0LmgKaW5kZXggZmExY2E0YmNkMDZkLi5kNDAyODhkNjg0MjIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9Db250ZXh0
LmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL0NvbnRleHQuaApA
QCAtODA0LDcgKzgwNCwxMyBAQCBjbGFzcyBDb250ZXh0IGZpbmFsIDogcHVibGljIGVnbDo6TGFi
ZWxlZE9iamVjdCwgYW5nbGU6Ok5vbkNvcHlhYmxlLCBwdWJsaWMgYW5nbAogfTsKIAogLy8gVGhy
ZWFkLWxvY2FsIGN1cnJlbnQgdmFsaWQgY29udGV4dCBib3VuZCB0byB0aGUgdGhyZWFkLgorI2lm
IGRlZmluZWQoQU5HTEVfUExBVEZPUk1fQVBQTEUpCitleHRlcm4gYm9vbCBJbml0aWFsaXplQ3Vy
cmVudFZhbGlkQ29udGV4dCgpOworZXh0ZXJuIENvbnRleHQgKkdldEN1cnJlbnRWYWxpZENvbnRl
eHQoKTsKK2V4dGVybiB2b2lkIFNldEN1cnJlbnRWYWxpZENvbnRleHQoQ29udGV4dCAqY29udGV4
dCk7CisjZWxzZQogZXh0ZXJuIHRocmVhZF9sb2NhbCBDb250ZXh0ICpnQ3VycmVudFZhbGlkQ29u
dGV4dDsKKyNlbmRpZgogCiB9ICAvLyBuYW1lc3BhY2UgZ2wKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9nbG9iYWxfc3RhdGUuY3BwIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9nbG9iYWxfc3RhdGUuY3BwCmluZGV4IDk3
NmY4NTNkODAyYS4uMTE0MTNlNjg0Y2Y4IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL2dsb2JhbF9zdGF0ZS5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9nbG9iYWxfc3RhdGUuY3BwCkBAIC0xNiw2ICsxNiwxMCBA
QAogCiAjaW5jbHVkZSA8YXRvbWljPgogCisjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9BUFBM
RSkKKyNpbmNsdWRlIDxkaXNwYXRjaC9kaXNwYXRjaC5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBl
Z2wKIHsKIG5hbWVzcGFjZQpAQCAtMzgsMTMgKzQyLDMxIEBAIHZvaWQgU2V0Q29udGV4dFRvQW5k
cm9pZE9wZW5HTFRMU1Nsb3QoZ2w6OkNvbnRleHQgKnZhbHVlKQogCiBUaHJlYWQgKkFsbG9jYXRl
Q3VycmVudFRocmVhZCgpCiB7Ci0gICAgZ0N1cnJlbnRUaHJlYWQgPSBuZXcgVGhyZWFkKCk7Cisg
ICAgVGhyZWFkICp0aHJlYWQgPSBuZXcgVGhyZWFkKCk7CisjaWYgZGVmaW5lZChBTkdMRV9QTEFU
Rk9STV9BUFBMRSkKKyAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2UgPSAwOworICAgIHN0
YXRpYyBib29sIGluaXRpYWxpemVkID0gZmFsc2U7CisgICAgaWYgKCFpbml0aWFsaXplZCkgewor
ICAgICAgICBkaXNwYXRjaF9vbmNlKCZvbmNlLCBeeworICAgICAgICAgICAgZ2w6OkluaXRpYWxp
emVDdXJyZW50VmFsaWRDb250ZXh0KCk7CisgICAgICAgICAgICBpbml0aWFsaXplZCA9IHRydWU7
CisgICAgICAgIH0pOworICAgIH0KKworICAgIFNldEN1cnJlbnRUaHJlYWRUTFModGhyZWFkKTsK
KyNlbHNlCisgICAgZ0N1cnJlbnRUaHJlYWQgPSB0aHJlYWQ7CisjZW5kaWYKIAogICAgIC8vIElu
aXRpYWxpemUgZmFzdCBUTFMgc2xvdAogICAgIFNldENvbnRleHRUb0FuZHJvaWRPcGVuR0xUTFNT
bG90KG51bGxwdHIpOworI2lmIGRlZmluZWQoQU5HTEVfUExBVEZPUk1fQVBQTEUpCisgICAgZ2w6
OlNldEN1cnJlbnRWYWxpZENvbnRleHQobnVsbHB0cik7CisjZWxzZQogICAgIGdsOjpnQ3VycmVu
dFZhbGlkQ29udGV4dCA9IG51bGxwdHI7CisjZW5kaWYKIAotICAgIHJldHVybiBnQ3VycmVudFRo
cmVhZDsKKyAgICByZXR1cm4gdGhyZWFkOwogfQogCiB2b2lkIEFsbG9jYXRlRGVidWcoKQpAQCAt
NzEsNyArOTMsNDggQEAgdm9pZCBBbGxvY2F0ZU11dGV4KCkKIAogfSAgLy8gYW5vbnltb3VzIG5h
bWVzcGFjZQogCisjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9BUFBMRSkKK1RMU0luZGV4IEN1
cnJlbnRUaHJlYWRJbmRleCA9IFRMU19JTlZBTElEX0lOREVYOworCitib29sIEluaXRpYWxpemVD
dXJyZW50VGhyZWFkVExTKCkKK3sKKyAgICBBU1NFUlQoQ3VycmVudFRocmVhZEluZGV4ID09IFRM
U19JTlZBTElEX0lOREVYKTsKKworICAgIEN1cnJlbnRUaHJlYWRJbmRleCA9IENyZWF0ZVRMU0lu
ZGV4KCk7CisgICAgcmV0dXJuIEN1cnJlbnRUaHJlYWRJbmRleCAhPSBUTFNfSU5WQUxJRF9JTkRF
WDsKK30KKwordm9pZCBGcmVlQ3VycmVudFRocmVhZFRMUygpCit7CisgICAgQVNTRVJUKEN1cnJl
bnRUaHJlYWRJbmRleCAhPSBUTFNfSU5WQUxJRF9JTkRFWCk7CisKKyAgICBEZXN0cm95VExTSW5k
ZXgoQ3VycmVudFRocmVhZEluZGV4KTsKKyAgICBDdXJyZW50VGhyZWFkSW5kZXggPSBUTFNfSU5W
QUxJRF9JTkRFWDsKK30KKworVGhyZWFkICpHZXRDdXJyZW50VGhyZWFkVExTKCkKK3sKKyAgICBz
dGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2UgPSAwOworICAgIHN0YXRpYyBib29sIGluaXRpYWxp
emVkID0gZmFsc2U7CisgICAgaWYgKCFpbml0aWFsaXplZCkgeworICAgICAgICBkaXNwYXRjaF9v
bmNlKCZvbmNlLCBeeworICAgICAgICAgICAgSW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRUTFMoKTsK
KyAgICAgICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICAgICAgfSk7CisgICAgfQorCisg
ICAgQVNTRVJUKEN1cnJlbnRUaHJlYWRJbmRleCAhPSBUTFNfSU5WQUxJRF9JTkRFWCk7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFRocmVhZCAqPihHZXRUTFNWYWx1ZShDdXJyZW50VGhyZWFkSW5k
ZXgpKTsKK30KKwordm9pZCBTZXRDdXJyZW50VGhyZWFkVExTKFRocmVhZCAqdGhyZWFkKQorewor
ICAgIEFTU0VSVChDdXJyZW50VGhyZWFkSW5kZXggIT0gVExTX0lOVkFMSURfSU5ERVgpOworICAg
IFNldFRMU1ZhbHVlKEN1cnJlbnRUaHJlYWRJbmRleCwgdGhyZWFkKTsKK30KKyNlbHNlCiB0aHJl
YWRfbG9jYWwgVGhyZWFkICpnQ3VycmVudFRocmVhZCA9IG51bGxwdHI7CisjZW5kaWYKIAogYW5n
bGU6Okdsb2JhbE11dGV4ICZHZXRHbG9iYWxNdXRleCgpCiB7CkBAIC04MSw3ICsxNDQsMTEgQEAg
YW5nbGU6Okdsb2JhbE11dGV4ICZHZXRHbG9iYWxNdXRleCgpCiAKIFRocmVhZCAqR2V0Q3VycmVu
dFRocmVhZCgpCiB7CisjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9BUFBMRSkKKyAgICBUaHJl
YWQgKmN1cnJlbnQgPSBHZXRDdXJyZW50VGhyZWFkVExTKCk7CisjZWxzZQogICAgIFRocmVhZCAq
Y3VycmVudCA9IGdDdXJyZW50VGhyZWFkOworI2VuZGlmCiAgICAgcmV0dXJuIChjdXJyZW50ID8g
Y3VycmVudCA6IEFsbG9jYXRlQ3VycmVudFRocmVhZCgpKTsKIH0KIApAQCAtOTMsMTAgKzE2MCwx
OSBAQCBEZWJ1ZyAqR2V0RGVidWcoKQogCiB2b2lkIFNldENvbnRleHRDdXJyZW50KFRocmVhZCAq
dGhyZWFkLCBnbDo6Q29udGV4dCAqY29udGV4dCkKIHsKLSAgICBBU1NFUlQoZ0N1cnJlbnRUaHJl
YWQpOwotICAgIGdDdXJyZW50VGhyZWFkLT5zZXRDdXJyZW50KGNvbnRleHQpOworI2lmIGRlZmlu
ZWQoQU5HTEVfUExBVEZPUk1fQVBQTEUpCisgICAgVGhyZWFkICpjdXJyZW50VGhyZWFkID0gR2V0
Q3VycmVudFRocmVhZFRMUygpOworI2Vsc2UKKyAgICBUaHJlYWQgKmN1cnJlbnRUaHJlYWQgPSBn
Q3VycmVudFRocmVhZDsKKyNlbmRpZgorICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKTsKKyAgICBj
dXJyZW50VGhyZWFkLT5zZXRDdXJyZW50KGNvbnRleHQpOwogICAgIFNldENvbnRleHRUb0FuZHJv
aWRPcGVuR0xUTFNTbG90KGNvbnRleHQpOworI2lmIGRlZmluZWQoQU5HTEVfUExBVEZPUk1fQVBQ
TEUpCisgICAgZ2w6OlNldEN1cnJlbnRWYWxpZENvbnRleHQoY29udGV4dCk7CisjZWxzZQogICAg
IGdsOjpnQ3VycmVudFZhbGlkQ29udGV4dCA9IGNvbnRleHQ7CisjZW5kaWYKIH0KIH0gIC8vIG5h
bWVzcGFjZSBlZ2wKIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9nbG9iYWxfc3RhdGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvZ2xvYmFsX3N0YXRlLmgKaW5kZXggYjRlNWVjNGM4MTRlLi5kZTZlZGNkNDA0ZWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvZ2xvYmFsX3N0
YXRlLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9nbG9iYWxf
c3RhdGUuaApAQCAtMTQsNiArMTQsMTAgQEAKICNpbmNsdWRlICJsaWJBTkdMRS9UaHJlYWQuaCIK
ICNpbmNsdWRlICJsaWJBTkdMRS9mZWF0dXJlcy5oIgogCisjaWYgZGVmaW5lZChBTkdMRV9QTEFU
Rk9STV9BUFBMRSkKKyNpbmNsdWRlICJjb21tb24vdGxzLmgiCisjZW5kaWYKKwogI2luY2x1ZGUg
PG11dGV4PgogCiBuYW1lc3BhY2UgYW5nbGUKQEAgLTg5LDcgKzkzLDEzIEBAIG5hbWVzcGFjZSBl
Z2wKIGNsYXNzIERlYnVnOwogY2xhc3MgVGhyZWFkOwogCisjaWYgZGVmaW5lZChBTkdMRV9QTEFU
Rk9STV9BUFBMRSkKK2V4dGVybiBib29sIEluaXRpYWxpemVDdXJyZW50VGhyZWFkVExTKCk7Citl
eHRlcm4gVGhyZWFkICpHZXRDdXJyZW50VGhyZWFkVExTKCk7CitleHRlcm4gdm9pZCBTZXRDdXJy
ZW50VGhyZWFkVExTKFRocmVhZCAqdGhyZWFkKTsKKyNlbHNlCiBleHRlcm4gdGhyZWFkX2xvY2Fs
IFRocmVhZCAqZ0N1cnJlbnRUaHJlYWQ7CisjZW5kaWYKIAogYW5nbGU6Okdsb2JhbE11dGV4ICZH
ZXRHbG9iYWxNdXRleCgpOwogVGhyZWFkICpHZXRDdXJyZW50VGhyZWFkKCk7CkBAIC0xMTIsOCAr
MTIyLDEzIEBAIEFOR0xFX0lOTElORSBDb250ZXh0ICpHZXRHbG9iYWxDb250ZXh0KCkKICAgICB9
CiAjZW5kaWYKIAotICAgIEFTU0VSVChlZ2w6OmdDdXJyZW50VGhyZWFkKTsKLSAgICByZXR1cm4g
ZWdsOjpnQ3VycmVudFRocmVhZC0+Z2V0Q29udGV4dCgpOworI2lmIGRlZmluZWQoQU5HTEVfUExB
VEZPUk1fQVBQTEUpCisgICAgZWdsOjpUaHJlYWQgKmN1cnJlbnRUaHJlYWQgPSBlZ2w6OkdldEN1
cnJlbnRUaHJlYWRUTFMoKTsKKyNlbHNlCisgICAgZWdsOjpUaHJlYWQgKmN1cnJlbnRUaHJlYWQg
PSBlZ2w6OmdDdXJyZW50VGhyZWFkOworI2VuZGlmCisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQp
OworICAgIHJldHVybiBjdXJyZW50VGhyZWFkLT5nZXRDb250ZXh0KCk7CiB9CiAKIEFOR0xFX0lO
TElORSBDb250ZXh0ICpHZXRWYWxpZEdsb2JhbENvbnRleHQoKQpAQCAtMTMxLDcgKzE0NiwxMSBA
QCBBTkdMRV9JTkxJTkUgQ29udGV4dCAqR2V0VmFsaWRHbG9iYWxDb250ZXh0KCkKICAgICB9CiAj
ZW5kaWYKIAorI2lmIGRlZmluZWQoQU5HTEVfUExBVEZPUk1fQVBQTEUpCisgICAgcmV0dXJuIEdl
dEN1cnJlbnRWYWxpZENvbnRleHQoKTsKKyNlbHNlCiAgICAgcmV0dXJuIGdDdXJyZW50VmFsaWRD
b250ZXh0OworI2VuZGlmCiB9CiAKIC8vIEdlbmVyYXRlIGEgY29udGV4dCBsb3N0IGVycm9yIG9u
IHRoZSBjb250ZXh0IGlmIGl0IGlzIG5vbi1udWxsIGFuZCBsb3N0LgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1VEUFNvY2tldENvY29h
Lm1tIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1VEUFNv
Y2tldENvY29hLm1tCmluZGV4IDdmN2RjOWM3OGY4Zi4uNTZiYzQzYzE3ZDZmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDVURQU29ja2V0
Q29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29y
a1JUQ1VEUFNvY2tldENvY29hLm1tCkBAIC0yNzksNyArMjc5LDcgQEAgUmV0YWluUHRyPG53X2Nv
bm5lY3Rpb25fdD4gTmV0d29ya1JUQ1VEUFNvY2tldENvY29hQ29ubmVjdGlvbnM6OmNyZWF0ZU5X
Q29ubmVjdGkKICAgICAgICAgYXV0byBob3N0QWRkcmVzcyA9IG1fYWRkcmVzcy5pcGFkZHIoKS5U
b1N0cmluZygpOwogICAgICAgICBpZiAobV9hZGRyZXNzLmlwYWRkcigpLklzTmlsKCkpCiAgICAg
ICAgICAgICBob3N0QWRkcmVzcyA9IG1fYWRkcmVzcy5ob3N0bmFtZSgpOwotI2lmIGRlZmluZWQo
TldfSEFTX1NIQVJFX0xJU1RFTkVSX1BPUlQpICYmIE5XX0hBU19TSEFSRV9MSVNURU5FUl9QT1JU
CisjaWYgZGVmaW5lZChOV19IQVNfU0hBUkVfTElTVEVORVJfUE9SVCkgJiYgTldfSEFTX1NIQVJF
X0xJU1RFTkVSX1BPUlQgJiYgMAogICAgICAgICBud19wYXJhbWV0ZXJzX2FsbG93X3NoYXJpbmdf
cG9ydF93aXRoX2xpc3RlbmVyKHBhcmFtZXRlcnMuZ2V0KCksIG1fbndMaXN0ZW5lci5nZXQoKSk7
CiAgICAgICAgIGF1dG8gcG9ydFN0cmluZyA9IFN0cmluZzo6bnVtYmVyKG1fYWRkcmVzcy5wb3J0
KCkpOwogICAgICAgICBhdXRvIHBvcnRWYWx1ZSA9IHBvcnRTdHJpbmcudXRmOCgpLmRhdGEoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434148</attachid>
            <date>2021-07-23 17:23:27 -0700</date>
            <delta_ts>2021-07-23 17:43:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228240-20210724102325.patch</filename>
            <type>text/plain</type>
            <size>10516</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMjExCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9DaGFuZ2VMb2cgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cKaW5k
ZXggZjQ5MWRlOTU5YTRlYmQzYzA4MDEzZjY3MDgwOTAxZTQ3YTNlNTgxNy4uOTA2Y2JmZjQ1MjZk
ZGIyZTZlYmViYzAxYWMxNTI1ZWUwZjdjZDc4NSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDM4IEBACisyMDIxLTA3LTIzICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxl
LmNvbT4KKworICAgICAgICAzLjUgTUIgc3lzdGVtLXdpZGUgZm9vdHByaW50IGltcGFjdCBkdWUg
dG8gdGhyZWFkLWxvY2FscyBpbiBsaWJBTkdMRQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI4MjQwCisgICAgICAgIHJkYXI6Ly83OTUwNDc4MworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFwcGxlJ3MgZHls
ZCBoYXMgYSBidWcgd2hlcmUgdGhyZWFkX2xvY2FsIHZhcmlhYmxlcyBhcmUgZGlydGllZCBvbgor
ICAgICAgICBwcm9jZXNzIGxhdW5jaCwgY2F1c2luZyBhIG1lbW9yeSByZWdyZXNzaW9uLiBXb3Jr
IGFyb3VuZCB0aGlzCisgICAgICAgIHRlbXBvcmFyaWx5IGluIEFOR0xFIGJ5IHVzaW5nIHB0aHJl
YWQgdGhyZWFkIGxvY2FsIHN0b3JhZ2UuCisKKyAgICAgICAgSSBkb24ndCBleHBlY3QgdGhpcyB0
byBiZSB1cHN0cmVhbWVkIHRvIEFOR0xFIHVubGVzcyB0aGV5CisgICAgICAgIHdhbnQgaXQuIElm
IGl0IGlzbid0LCB0aGlzIHBhdGNoIHdpbGwgaGF2ZSB0byBiZSBhcHBsaWVkIHVudGlsCisgICAg
ICAgIHRoZSBkeWxkIGJ1ZyBpcyBmaXhlZC4KKworICAgICAgICAqIHNyYy9saWJBTkdMRS9Db250
ZXh0LmNwcDogSW1wbGVtZW50IHNvbWUgbWV0aG9kcyB0byBnZXQvc2V0IHdoYXQgd2FzCisgICAg
ICAgIHRoZSBnbG9iYWwgdmFyaWFibGUgZ0N1cnJlbnRWYWxpZENvbnRleHQuCisgICAgICAgIChn
bDo6SW5pdGlhbGl6ZUN1cnJlbnRWYWxpZENvbnRleHRUTFNJbmRleElmTmVjZXNzYXJ5KToKKyAg
ICAgICAgKGdsOjpGcmVlQ3VycmVudFZhbGlkQ29udGV4dFRMU0luZGV4KToKKyAgICAgICAgKGds
OjpHZXRDdXJyZW50VmFsaWRDb250ZXh0VExTKToKKyAgICAgICAgKGdsOjpTZXRDdXJyZW50VmFs
aWRDb250ZXh0VExTKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRDb250ZXh0TG9zdCk6Cisg
ICAgICAgICogc3JjL2xpYkFOR0xFL0NvbnRleHQuaDoKKyAgICAgICAgKiBzcmMvbGliR0xFU3Yy
L2dsb2JhbF9zdGF0ZS5jcHA6IERpdHRvLCBidXQgZm9yIGdDdXJyZW50VGhyZWFkLgorICAgICAg
ICAoZWdsOjpJbml0aWFsaXplQ3VycmVudFRocmVhZFRMU0luZGV4SWZOZWNlc3NhcnkpOgorICAg
ICAgICAoZWdsOjpGcmVlQ3VycmVudFRocmVhZFRMU0luZGV4KToKKyAgICAgICAgKGVnbDo6R2V0
Q3VycmVudFRocmVhZFRMUyk6CisgICAgICAgIChlZ2w6OlNldEN1cnJlbnRUaHJlYWRUTFMpOgor
ICAgICAgICAoZWdsOjpHZXRDdXJyZW50VGhyZWFkKToKKyAgICAgICAgKGVnbDo6U2V0Q29udGV4
dEN1cnJlbnQpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvZ2xvYmFsX3N0YXRlLmg6CisgICAg
ICAgIChnbDo6R2V0R2xvYmFsQ29udGV4dCk6CisgICAgICAgIChnbDo6R2V0VmFsaWRHbG9iYWxD
b250ZXh0KToKKwogMjAyMS0wNy0xNiAgS3lsZSBQaWRkaW5ndG9uICA8a3BpZGRpbmd0b25AYXBw
bGUuY29tPgogCiAgICAgICAgIEJ1aWxkIERlZmF1bHQgTWV0YWwgbGlicmFyeSBvZmZsaW5lCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvQ29udGV4dC5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvQ29udGV4dC5jcHAKaW5k
ZXggNWI4N2Q0ZmRmZjQ1ZWY0ZGMzMGU1ODk0OGRlZjY0NzI1ODI5MDE0Ny4uNmU4Njc0NGRjOTEz
Y2QyZDJkOGQwOThhMWRmOGE0ZDJlYWU2NDhmMCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkFOR0xFL0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJBTkdMRS9Db250ZXh0LmNwcApAQCAtNDYsNiArNDYsMTEgQEAKICNpbmNs
dWRlICJsaWJBTkdMRS9yZW5kZXJlci9Gb3JtYXQuaCIKICNpbmNsdWRlICJsaWJBTkdMRS92YWxp
ZGF0aW9uRVMuaCIKIAorI2lmIGRlZmluZWQoQU5HTEVfUExBVEZPUk1fQVBQTEUpCisjaW5jbHVk
ZSAiY29tbW9uL3Rscy5oIgorI2luY2x1ZGUgPGRpc3BhdGNoL2Rpc3BhdGNoLmg+CisjZW5kaWYK
KwogbmFtZXNwYWNlIGdsCiB7CiBuYW1lc3BhY2UKQEAgLTI4Myw3ICsyODgsNTEgQEAgYm9vbCBJ
c0NvbG9yTWFza2VkT3V0KGNvbnN0IEJsZW5kU3RhdGVFeHQgJmJsZW5kU3RhdGVFeHQsIGNvbnN0
IEdMaW50IGRyYXdidWZmZXIKIH0KIH0gIC8vIGFub255bW91cyBuYW1lc3BhY2UKIAorI2lmIGRl
ZmluZWQoQU5HTEVfUExBVEZPUk1fQVBQTEUpCisKKy8vIE5PVEU6IER1ZSB0byBhIGJ1ZyBpbiBB
cHBsZSdzIGR5bGQgbG9hZGVyLCBgdGhyZWFkX2xvY2FsYCB3aWxsIGNhdXNlCisvLyBleGNlc3Np
dmUgbWVtb3J5IHVzZS4gVGVtcG9yYXJpbHkgYXZvaWQgaXQgYnkgdXNpbmcgcHRocmVhZCdzIHRo
cmVhZAorLy8gbG9jYWwgc3RvcmFnZSBpbnN0ZWFkLgorCitUTFNJbmRleCBDdXJyZW50VmFsaWRD
b250ZXh0SW5kZXggPSBUTFNfSU5WQUxJRF9JTkRFWDsKKworYm9vbCBJbml0aWFsaXplQ3VycmVu
dFZhbGlkQ29udGV4dFRMU0luZGV4SWZOZWNlc3NhcnkoKQoreworICAgIHN0YXRpYyBkaXNwYXRj
aF9vbmNlX3Qgb25jZTsKKyAgICBkaXNwYXRjaF9vbmNlKCZvbmNlLCBeeworICAgICAgICBBU1NF
UlQoQ3VycmVudFZhbGlkQ29udGV4dEluZGV4ID09IFRMU19JTlZBTElEX0lOREVYKTsKKyAgICAg
ICAgQ3VycmVudFZhbGlkQ29udGV4dEluZGV4ID0gQ3JlYXRlVExTSW5kZXgoKTsKKyAgICB9KTsK
KyAgICByZXR1cm4gQ3VycmVudFZhbGlkQ29udGV4dEluZGV4ICE9IFRMU19JTlZBTElEX0lOREVY
OworfQorCisvLyBOT1RFOiBUaGlzIGlzIG5vdCBjYWxsZWQgZnJvbSBhbnl3aGVyZSBhdCB0aGUg
bW9tZW50LiBUaGlzIGlzCisvLyBvayBiZWNhdXNlIGl0IHdvdWxkIGJlIGF0IHRoZSB0aW1lIHRo
ZSBwcm9jZXNzIGlzIGV4aXRpbmcsIGJ1dAorLy8gaWYgdGhhdCBjaGFuZ2VzIHRoZW4gdGhpcyBt
ZXRob2Qgd2lsbCBoYXZlIHRvIGJlIHVzZWQuCit2b2lkIEZyZWVDdXJyZW50VmFsaWRDb250ZXh0
VExTSW5kZXgoKQoreworICAgIEFTU0VSVChDdXJyZW50VmFsaWRDb250ZXh0SW5kZXggIT0gVExT
X0lOVkFMSURfSU5ERVgpOworICAgIERlc3Ryb3lUTFNJbmRleChDdXJyZW50VmFsaWRDb250ZXh0
SW5kZXgpOworICAgIEN1cnJlbnRWYWxpZENvbnRleHRJbmRleCA9IFRMU19JTlZBTElEX0lOREVY
OworfQorCitDb250ZXh0ICpHZXRDdXJyZW50VmFsaWRDb250ZXh0VExTKCkKK3sKKyAgICBJbml0
aWFsaXplQ3VycmVudFZhbGlkQ29udGV4dFRMU0luZGV4SWZOZWNlc3NhcnkoKTsKKyAgICBBU1NF
UlQoQ3VycmVudFZhbGlkQ29udGV4dEluZGV4ICE9IFRMU19JTlZBTElEX0lOREVYKTsKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Q29udGV4dCAqPihHZXRUTFNWYWx1ZShDdXJyZW50VmFsaWRDb250
ZXh0SW5kZXgpKTsKK30KKwordm9pZCBTZXRDdXJyZW50VmFsaWRDb250ZXh0VExTKENvbnRleHQg
KmNvbnRleHQpCit7CisgICAgSW5pdGlhbGl6ZUN1cnJlbnRWYWxpZENvbnRleHRUTFNJbmRleElm
TmVjZXNzYXJ5KCk7CisgICAgQVNTRVJUKEN1cnJlbnRWYWxpZENvbnRleHRJbmRleCAhPSBUTFNf
SU5WQUxJRF9JTkRFWCk7CisgICAgU2V0VExTVmFsdWUoQ3VycmVudFZhbGlkQ29udGV4dEluZGV4
LCBjb250ZXh0KTsKK30KKworI2Vsc2UKIHRocmVhZF9sb2NhbCBDb250ZXh0ICpnQ3VycmVudFZh
bGlkQ29udGV4dCA9IG51bGxwdHI7CisjZW5kaWYKIAogQ29udGV4dDo6Q29udGV4dChlZ2w6OkRp
c3BsYXkgKmRpc3BsYXksCiAgICAgICAgICAgICAgICAgIGNvbnN0IGVnbDo6Q29uZmlnICpjb25m
aWcsCkBAIC0yNTY3LDcgKzI2MTYsMTEgQEAgdm9pZCBDb250ZXh0OjpzZXRDb250ZXh0TG9zdCgp
CiAgICAgbVNraXBWYWxpZGF0aW9uID0gZmFsc2U7CiAKICAgICAvLyBNYWtlIHN1cmUgd2UgdXBk
YXRlIFRMUy4KKyNpZiBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX0FQUExFKQorICAgIFNldEN1cnJl
bnRWYWxpZENvbnRleHRUTFMobnVsbHB0cik7CisjZWxzZQogICAgIGdDdXJyZW50VmFsaWRDb250
ZXh0ID0gbnVsbHB0cjsKKyNlbmRpZgogfQogCiBHTGVudW0gQ29udGV4dDo6Z2V0R3JhcGhpY3NS
ZXNldFN0YXR1cygpCkBAIC05MTY0LDQgKzkyMTcsNSBAQCB2b2lkIFN0YXRlQ2FjaGU6OnVwZGF0
ZUNhbkRyYXcoQ29udGV4dCAqY29udGV4dCkKICAgICAgICAgICAgICAgICAgICAgICAoY29udGV4
dC0+Z2V0U3RhdGUoKS5nZXRQcm9ncmFtRXhlY3V0YWJsZSgpICYmCiAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmdldFN0YXRlKCkuZ2V0UHJvZ3JhbUV4ZWN1dGFibGUoKS0+aGFzVmVy
dGV4QW5kRnJhZ21lbnRTaGFkZXIoKSkpOwogfQorCiB9ICAvLyBuYW1lc3BhY2UgZ2wKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9Db250ZXh0LmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvQ29udGV4dC5oCmluZGV4IGZhMWNh
NGJjZDA2ZGY3MGVmN2I2MjJiZjc1NGY0YjFlODgzMGExNDguLjQwZTZkMWQ5NTE4ZWQwNDBkZGQz
MWQxOTA4ODdjZTE3ZjMyYzkzZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJBTkdMRS9Db250ZXh0LmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkFOR0xFL0NvbnRleHQuaApAQCAtODA0LDcgKzgwNCwxMiBAQCBjbGFzcyBDb250ZXh0IGZp
bmFsIDogcHVibGljIGVnbDo6TGFiZWxlZE9iamVjdCwgYW5nbGU6Ok5vbkNvcHlhYmxlLCBwdWJs
aWMgYW5nbAogfTsKIAogLy8gVGhyZWFkLWxvY2FsIGN1cnJlbnQgdmFsaWQgY29udGV4dCBib3Vu
ZCB0byB0aGUgdGhyZWFkLgorI2lmIGRlZmluZWQoQU5HTEVfUExBVEZPUk1fQVBQTEUpCitleHRl
cm4gQ29udGV4dCAqR2V0Q3VycmVudFZhbGlkQ29udGV4dFRMUygpOworZXh0ZXJuIHZvaWQgU2V0
Q3VycmVudFZhbGlkQ29udGV4dFRMUyhDb250ZXh0ICpjb250ZXh0KTsKKyNlbHNlCiBleHRlcm4g
dGhyZWFkX2xvY2FsIENvbnRleHQgKmdDdXJyZW50VmFsaWRDb250ZXh0OworI2VuZGlmCiAKIH0g
IC8vIG5hbWVzcGFjZSBnbAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL2dsb2JhbF9zdGF0ZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL2dsb2JhbF9zdGF0ZS5jcHAKaW5kZXggOTc2Zjg1M2Q4MDJhMzQ4MDQ1ZDJl
YWM5NzcyNGEyYjU0MzVjZTRiOC4uMjYzZjg2ZjRkMzdiM2NmMGI3ZjEzYWEzNzY1ZjgzZDdlN2Yy
NjgwMCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9n
bG9iYWxfc3RhdGUuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvZ2xvYmFsX3N0YXRlLmNwcApAQCAtMTYsNiArMTYsMTAgQEAKIAogI2luY2x1ZGUgPGF0b21p
Yz4KIAorI2lmIGRlZmluZWQoQU5HTEVfUExBVEZPUk1fQVBQTEUpCisjaW5jbHVkZSA8ZGlzcGF0
Y2gvZGlzcGF0Y2guaD4KKyNlbmRpZgorCiBuYW1lc3BhY2UgZWdsCiB7CiBuYW1lc3BhY2UKQEAg
LTM4LDEzICs0MiwyMyBAQCB2b2lkIFNldENvbnRleHRUb0FuZHJvaWRPcGVuR0xUTFNTbG90KGds
OjpDb250ZXh0ICp2YWx1ZSkKIAogVGhyZWFkICpBbGxvY2F0ZUN1cnJlbnRUaHJlYWQoKQogewot
ICAgIGdDdXJyZW50VGhyZWFkID0gbmV3IFRocmVhZCgpOworICAgIFRocmVhZCAqdGhyZWFkID0g
bmV3IFRocmVhZCgpOworI2lmIGRlZmluZWQoQU5HTEVfUExBVEZPUk1fQVBQTEUpCisgICAgU2V0
Q3VycmVudFRocmVhZFRMUyh0aHJlYWQpOworI2Vsc2UKKyAgICBnQ3VycmVudFRocmVhZCA9IHRo
cmVhZDsKKyNlbmRpZgogCiAgICAgLy8gSW5pdGlhbGl6ZSBmYXN0IFRMUyBzbG90CiAgICAgU2V0
Q29udGV4dFRvQW5kcm9pZE9wZW5HTFRMU1Nsb3QobnVsbHB0cik7CisKKyNpZiBkZWZpbmVkKEFO
R0xFX1BMQVRGT1JNX0FQUExFKQorICAgIGdsOjpTZXRDdXJyZW50VmFsaWRDb250ZXh0VExTKG51
bGxwdHIpOworI2Vsc2UKICAgICBnbDo6Z0N1cnJlbnRWYWxpZENvbnRleHQgPSBudWxscHRyOwor
I2VuZGlmCiAKLSAgICByZXR1cm4gZ0N1cnJlbnRUaHJlYWQ7CisgICAgcmV0dXJuIHRocmVhZDsK
IH0KIAogdm9pZCBBbGxvY2F0ZURlYnVnKCkKQEAgLTcxLDcgKzg1LDUwIEBAIHZvaWQgQWxsb2Nh
dGVNdXRleCgpCiAKIH0gIC8vIGFub255bW91cyBuYW1lc3BhY2UKIAorI2lmIGRlZmluZWQoQU5H
TEVfUExBVEZPUk1fQVBQTEUpCisKKy8vIE5PVEU6IER1ZSB0byBhIGJ1ZyBpbiBBcHBsZSdzIGR5
bGQgbG9hZGVyLCBgdGhyZWFkX2xvY2FsYCB3aWxsIGNhdXNlCisvLyBleGNlc3NpdmUgbWVtb3J5
IHVzZS4gVGVtcG9yYXJpbHkgYXZvaWQgaXQgYnkgdXNpbmcgcHRocmVhZCdzIHRocmVhZAorLy8g
bG9jYWwgc3RvcmFnZSBpbnN0ZWFkLgorCitUTFNJbmRleCBDdXJyZW50VGhyZWFkSW5kZXggPSBU
TFNfSU5WQUxJRF9JTkRFWDsKKworYm9vbCBJbml0aWFsaXplQ3VycmVudFRocmVhZFRMU0luZGV4
SWZOZWNlc3NhcnkoKQoreworICAgIHN0YXRpYyBkaXNwYXRjaF9vbmNlX3Qgb25jZTsKKyAgICBk
aXNwYXRjaF9vbmNlKCZvbmNlLCBeeworICAgICAgICBBU1NFUlQoQ3VycmVudFRocmVhZEluZGV4
ID09IFRMU19JTlZBTElEX0lOREVYKTsKKyAgICAgICAgQ3VycmVudFRocmVhZEluZGV4ID0gQ3Jl
YXRlVExTSW5kZXgoKTsKKyAgICB9KTsKKyAgICByZXR1cm4gQ3VycmVudFRocmVhZEluZGV4ICE9
IFRMU19JTlZBTElEX0lOREVYOworfQorCisvLyBOT1RFOiBUaGlzIGlzIG5vdCBjYWxsZWQgZnJv
bSBhbnl3aGVyZSBhdCB0aGUgbW9tZW50LiBUaGlzIGlzCisvLyBvayBiZWNhdXNlIGl0IHdvdWxk
IGJlIGF0IHRoZSB0aW1lIHRoZSBwcm9jZXNzIGlzIGV4aXRpbmcsIGJ1dAorLy8gaWYgdGhhdCBj
aGFuZ2VzIHRoZW4gdGhpcyBtZXRob2Qgd2lsbCBoYXZlIHRvIGJlIHVzZWQuCit2b2lkIEZyZWVD
dXJyZW50VGhyZWFkVExTSW5kZXgoKQoreworICAgIEFTU0VSVChDdXJyZW50VGhyZWFkSW5kZXgg
IT0gVExTX0lOVkFMSURfSU5ERVgpOworICAgIERlc3Ryb3lUTFNJbmRleChDdXJyZW50VGhyZWFk
SW5kZXgpOworICAgIEN1cnJlbnRUaHJlYWRJbmRleCA9IFRMU19JTlZBTElEX0lOREVYOworfQor
CitUaHJlYWQgKkdldEN1cnJlbnRUaHJlYWRUTFMoKQoreworICAgIEluaXRpYWxpemVDdXJyZW50
VGhyZWFkVExTSW5kZXhJZk5lY2Vzc2FyeSgpOworICAgIEFTU0VSVChDdXJyZW50VGhyZWFkSW5k
ZXggIT0gVExTX0lOVkFMSURfSU5ERVgpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUaHJlYWQg
Kj4oR2V0VExTVmFsdWUoQ3VycmVudFRocmVhZEluZGV4KSk7Cit9CisKK3ZvaWQgU2V0Q3VycmVu
dFRocmVhZFRMUyhUaHJlYWQgKnRocmVhZCkKK3sKKyAgICBJbml0aWFsaXplQ3VycmVudFRocmVh
ZFRMU0luZGV4SWZOZWNlc3NhcnkoKTsKKyAgICBBU1NFUlQoQ3VycmVudFRocmVhZEluZGV4ICE9
IFRMU19JTlZBTElEX0lOREVYKTsKKyAgICBTZXRUTFNWYWx1ZShDdXJyZW50VGhyZWFkSW5kZXgs
IHRocmVhZCk7Cit9CisjZWxzZQogdGhyZWFkX2xvY2FsIFRocmVhZCAqZ0N1cnJlbnRUaHJlYWQg
PSBudWxscHRyOworI2VuZGlmCiAKIGFuZ2xlOjpHbG9iYWxNdXRleCAmR2V0R2xvYmFsTXV0ZXgo
KQogewpAQCAtODEsNyArMTM4LDExIEBAIGFuZ2xlOjpHbG9iYWxNdXRleCAmR2V0R2xvYmFsTXV0
ZXgoKQogCiBUaHJlYWQgKkdldEN1cnJlbnRUaHJlYWQoKQogeworI2lmIGRlZmluZWQoQU5HTEVf
UExBVEZPUk1fQVBQTEUpCisgICAgVGhyZWFkICpjdXJyZW50ID0gR2V0Q3VycmVudFRocmVhZFRM
UygpOworI2Vsc2UKICAgICBUaHJlYWQgKmN1cnJlbnQgPSBnQ3VycmVudFRocmVhZDsKKyNlbmRp
ZgogICAgIHJldHVybiAoY3VycmVudCA/IGN1cnJlbnQgOiBBbGxvY2F0ZUN1cnJlbnRUaHJlYWQo
KSk7CiB9CiAKQEAgLTkzLDEwICsxNTQsMTkgQEAgRGVidWcgKkdldERlYnVnKCkKIAogdm9pZCBT
ZXRDb250ZXh0Q3VycmVudChUaHJlYWQgKnRocmVhZCwgZ2w6OkNvbnRleHQgKmNvbnRleHQpCiB7
Ci0gICAgQVNTRVJUKGdDdXJyZW50VGhyZWFkKTsKLSAgICBnQ3VycmVudFRocmVhZC0+c2V0Q3Vy
cmVudChjb250ZXh0KTsKKyNpZiBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX0FQUExFKQorICAgIFRo
cmVhZCAqY3VycmVudFRocmVhZCA9IEdldEN1cnJlbnRUaHJlYWRUTFMoKTsKKyNlbHNlCisgICAg
VGhyZWFkICpjdXJyZW50VGhyZWFkID0gZ0N1cnJlbnRUaHJlYWQ7CisjZW5kaWYKKyAgICBBU1NF
UlQoY3VycmVudFRocmVhZCk7CisgICAgY3VycmVudFRocmVhZC0+c2V0Q3VycmVudChjb250ZXh0
KTsKICAgICBTZXRDb250ZXh0VG9BbmRyb2lkT3BlbkdMVExTU2xvdChjb250ZXh0KTsKKyNpZiBk
ZWZpbmVkKEFOR0xFX1BMQVRGT1JNX0FQUExFKQorICAgIGdsOjpTZXRDdXJyZW50VmFsaWRDb250
ZXh0VExTKGNvbnRleHQpOworI2Vsc2UKICAgICBnbDo6Z0N1cnJlbnRWYWxpZENvbnRleHQgPSBj
b250ZXh0OworI2VuZGlmCiB9CiB9ICAvLyBuYW1lc3BhY2UgZWdsCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvZ2xvYmFsX3N0YXRlLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2dsb2JhbF9zdGF0ZS5oCmluZGV4IGI0
ZTVlYzRjODE0ZTQyNDI1NzVkZTZjOWJhYjY0MjU4NmI1YzA2NWUuLmU1NTcwMThmYjYyZTllMjFk
MTMxODhmNDg0ZDBlNWZhMTlkZjhjMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvZ2xvYmFsX3N0YXRlLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9nbG9iYWxfc3RhdGUuaApAQCAtMTQsNiArMTQsMTAgQEAKICNp
bmNsdWRlICJsaWJBTkdMRS9UaHJlYWQuaCIKICNpbmNsdWRlICJsaWJBTkdMRS9mZWF0dXJlcy5o
IgogCisjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9BUFBMRSkKKyNpbmNsdWRlICJjb21tb24v
dGxzLmgiCisjZW5kaWYKKwogI2luY2x1ZGUgPG11dGV4PgogCiBuYW1lc3BhY2UgYW5nbGUKQEAg
LTg5LDcgKzkzLDEyIEBAIG5hbWVzcGFjZSBlZ2wKIGNsYXNzIERlYnVnOwogY2xhc3MgVGhyZWFk
OwogCisjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9BUFBMRSkKK2V4dGVybiBUaHJlYWQgKkdl
dEN1cnJlbnRUaHJlYWRUTFMoKTsKK2V4dGVybiB2b2lkIFNldEN1cnJlbnRUaHJlYWRUTFMoVGhy
ZWFkICp0aHJlYWQpOworI2Vsc2UKIGV4dGVybiB0aHJlYWRfbG9jYWwgVGhyZWFkICpnQ3VycmVu
dFRocmVhZDsKKyNlbmRpZgogCiBhbmdsZTo6R2xvYmFsTXV0ZXggJkdldEdsb2JhbE11dGV4KCk7
CiBUaHJlYWQgKkdldEN1cnJlbnRUaHJlYWQoKTsKQEAgLTExMiw4ICsxMjEsMTMgQEAgQU5HTEVf
SU5MSU5FIENvbnRleHQgKkdldEdsb2JhbENvbnRleHQoKQogICAgIH0KICNlbmRpZgogCi0gICAg
QVNTRVJUKGVnbDo6Z0N1cnJlbnRUaHJlYWQpOwotICAgIHJldHVybiBlZ2w6OmdDdXJyZW50VGhy
ZWFkLT5nZXRDb250ZXh0KCk7CisjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9BUFBMRSkKKyAg
ICBlZ2w6OlRocmVhZCAqY3VycmVudFRocmVhZCA9IGVnbDo6R2V0Q3VycmVudFRocmVhZFRMUygp
OworI2Vsc2UKKyAgICBlZ2w6OlRocmVhZCAqY3VycmVudFRocmVhZCA9IGVnbDo6Z0N1cnJlbnRU
aHJlYWQ7CisjZW5kaWYKKyAgICBBU1NFUlQoY3VycmVudFRocmVhZCk7CisgICAgcmV0dXJuIGN1
cnJlbnRUaHJlYWQtPmdldENvbnRleHQoKTsKIH0KIAogQU5HTEVfSU5MSU5FIENvbnRleHQgKkdl
dFZhbGlkR2xvYmFsQ29udGV4dCgpCkBAIC0xMzEsNyArMTQ1LDExIEBAIEFOR0xFX0lOTElORSBD
b250ZXh0ICpHZXRWYWxpZEdsb2JhbENvbnRleHQoKQogICAgIH0KICNlbmRpZgogCisjaWYgZGVm
aW5lZChBTkdMRV9QTEFURk9STV9BUFBMRSkKKyAgICByZXR1cm4gR2V0Q3VycmVudFZhbGlkQ29u
dGV4dFRMUygpOworI2Vsc2UKICAgICByZXR1cm4gZ0N1cnJlbnRWYWxpZENvbnRleHQ7CisjZW5k
aWYKIH0KIAogLy8gR2VuZXJhdGUgYSBjb250ZXh0IGxvc3QgZXJyb3Igb24gdGhlIGNvbnRleHQg
aWYgaXQgaXMgbm9uLW51bGwgYW5kIGxvc3QuCg==
</data>
<flag name="review"
          id="456552"
          type_id="1"
          status="+"
          setter="kbr"
    />
          </attachment>
      

    </bug>

</bugzilla>