<?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>47423</bug_id>
          
          <creation_ts>2010-10-08 10:30:21 -0700</creation_ts>
          <short_desc>[chromium] Update WebBlobData to adapt to BlobData change in terms of handling string data item</short_desc>
          <delta_ts>2010-10-12 17:42:39 -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>WebKit Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jian Li">jianli</reporter>
          <assigned_to name="Jian Li">jianli</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>fishd</cc>
    
    <cc>levin</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>291750</commentid>
    <comment_count>0</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-10-08 10:30:21 -0700</bug_when>
    <thetext>We need to update WebKit implementation WebBlobData to adapt to BlobData change introduced in https://bugs.webkit.org/show_bug.cgi?id=46543.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291758</commentid>
    <comment_count>1</comment_count>
      <attachid>70268</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-10-08 10:48:45 -0700</bug_when>
    <thetext>Created attachment 70268
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291805</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-08 12:23:56 -0700</bug_when>
    <thetext>Attachment 70268 did not build on chromium:
Build output: http://queues.webkit.org/results/4192152</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292198</commentid>
    <comment_count>3</comment_count>
      <attachid>70268</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-10-09 14:11:33 -0700</bug_when>
    <thetext>Comment on attachment 70268
Proposed Patch

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

&gt; WebKit/chromium/public/WebBlobData.h:48
&gt; +class WebRawData {

please put this in a separate header file.  one class/struct per header please.

i would give this a better name because we already have WebData.  what you have
here it seems is a container for a |const char*| and a length.  that means this
class does not own the data.  WebDependentData or WebDataPiece might be good
names.

&gt; WebKit/chromium/public/WebBlobData.h:56
&gt; +    WEBKIT_API void reset()

note: these do not need WEBKIT_API since they are implemented inline.  you
only need WEBKIT_API on methods that need to be exported from webkit.dll.

&gt; WebKit/chromium/public/WebBlobData.h:86
&gt; +        WebRawData data;

have you considered using WebData here instead?  why do you want this
class to not own the data?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292552</commentid>
    <comment_count>4</comment_count>
      <attachid>70452</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-10-11 10:51:51 -0700</bug_when>
    <thetext>Created attachment 70452
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292554</commentid>
    <comment_count>5</comment_count>
      <attachid>70453</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-10-11 10:56:14 -0700</bug_when>
    <thetext>Created attachment 70453
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292557</commentid>
    <comment_count>6</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-10-11 11:01:10 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 70268 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=70268&amp;action=review
&gt; 
&gt; &gt; WebKit/chromium/public/WebBlobData.h:48
&gt; &gt; +class WebRawData {
&gt; 
&gt; please put this in a separate header file.  one class/struct per header please.
&gt; 
&gt; i would give this a better name because we already have WebData.  what you have
&gt; here it seems is a container for a |const char*| and a length.  that means this
&gt; class does not own the data.  WebDependentData or WebDataPiece might be good
&gt; names.

Renamed to WebDependentData and moved to a separate file.

&gt; 
&gt; &gt; WebKit/chromium/public/WebBlobData.h:56
&gt; &gt; +    WEBKIT_API void reset()
&gt; 
&gt; note: these do not need WEBKIT_API since they are implemented inline.  you
&gt; only need WEBKIT_API on methods that need to be exported from webkit.dll.

Done.

&gt; 
&gt; &gt; WebKit/chromium/public/WebBlobData.h:86
&gt; &gt; +        WebRawData data;
&gt; 
&gt; have you considered using WebData here instead?  why do you want this
&gt; class to not own the data?

Yes, I have looked into WebData, but decided not to use it because we want to avoid copying the string data. Since the lifetime of the string data is controlled by the BlobData and thus WebBlobData, we do not need to use WebData to copy it over.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292609</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-11 12:19:01 -0700</bug_when>
    <thetext>Attachment 70453 did not build on chromium:
Build output: http://queues.webkit.org/results/4278027</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292680</commentid>
    <comment_count>8</comment_count>
      <attachid>70453</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-10-11 14:57:23 -0700</bug_when>
    <thetext>Comment on attachment 70453
Proposed Patch

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

&gt; WebKit/chromium/public/WebBlobData.h:51
&gt; +        WebDependentData data;

This scares me because you are putting a memory address into a data structure,
and relying on the guy who created the WebBlobData to keep the memory address
valid.  It would be much better to use WebData.

Why don&apos;t you change WebCore::BlobDataItem::data to be of type RefPtr&lt;SharedBuffer&gt;
instead of CString?  Then, the conversion from WebData to RefPtr&lt;SharedBuffer&gt;
would be super cheap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292687</commentid>
    <comment_count>9</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-10-11 15:06:59 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 70453 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=70453&amp;action=review
&gt; 
&gt; &gt; WebKit/chromium/public/WebBlobData.h:51
&gt; &gt; +        WebDependentData data;
&gt; 
&gt; This scares me because you are putting a memory address into a data structure,
&gt; and relying on the guy who created the WebBlobData to keep the memory address
&gt; valid.  It would be much better to use WebData.
&gt; 
&gt; Why don&apos;t you change WebCore::BlobDataItem::data to be of type RefPtr&lt;SharedBuffer&gt;
&gt; instead of CString?  Then, the conversion from WebData to RefPtr&lt;SharedBuffer&gt;
&gt; would be super cheap.

I can&apos;t use SharedBuffer since it is not thread-safe. I have to make the representation of string data be thread-safe so that the blob data can be passed from worker thread to main thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293002</commentid>
    <comment_count>10</comment_count>
      <attachid>70544</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-10-12 11:15:32 -0700</bug_when>
    <thetext>Created attachment 70544
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293003</commentid>
    <comment_count>11</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-10-12 11:16:26 -0700</bug_when>
    <thetext>&gt; Why don&apos;t you change WebCore::BlobDataItem::data to be of type RefPtr&lt;SharedBuffer&gt;
&gt; instead of CString?  Then, the conversion from WebData to RefPtr&lt;SharedBuffer&gt;
&gt; would be super cheap.

Changed to do something similar to WebData by introducing WebThreadSafeData to wrap RawData.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293029</commentid>
    <comment_count>12</comment_count>
      <attachid>70544</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-10-12 12:01:25 -0700</bug_when>
    <thetext>Comment on attachment 70544
Proposed Patch

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

&gt; WebKit/chromium/public/WebThreadSafeData.h:37
&gt; +namespace WebCore { class RawData; }

where is RawData defined?  i cannot find it in the source tree.

&gt; WebKit/chromium/public/WebThreadSafeData.h:84
&gt; +    WebThreadSafeDataPrivate* m_private;

please take advantage of WebPrivatePtr&lt;T&gt;.  that is the new way of wrapping
a reference counted WebCore type.  see WebNode.h for example.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293072</commentid>
    <comment_count>13</comment_count>
      <attachid>70558</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-10-12 12:55:16 -0700</bug_when>
    <thetext>Created attachment 70558
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293074</commentid>
    <comment_count>14</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-10-12 12:57:00 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 70544 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=70544&amp;action=review
&gt; 
&gt; &gt; WebKit/chromium/public/WebThreadSafeData.h:37
&gt; &gt; +namespace WebCore { class RawData; }
&gt; 
&gt; where is RawData defined?  i cannot find it in the source tree.

It is defined in BlobData.h in the patch for bug 46543 (https://bugs.webkit.org/show_bug.cgi?id=46543).
Note that I am going to update this patch to move RawData out of &quot;struct BlobDataItem&quot; to allow forward declaration.

&gt; 
&gt; &gt; WebKit/chromium/public/WebThreadSafeData.h:84
&gt; &gt; +    WebThreadSafeDataPrivate* m_private;
&gt; 
&gt; please take advantage of WebPrivatePtr&lt;T&gt;.  that is the new way of wrapping
&gt; a reference counted WebCore type.  see WebNode.h for example.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293098</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-12 13:43:52 -0700</bug_when>
    <thetext>Attachment 70558 did not build on chromium:
Build output: http://queues.webkit.org/results/4373012</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293162</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-12 16:09:43 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/69611 might have broken Chromium Win Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293221</commentid>
    <comment_count>17</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-10-12 17:42:39 -0700</bug_when>
    <thetext>Committed as http://trac.webkit.org/changeset/69611.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70268</attachid>
            <date>2010-10-08 10:48:45 -0700</date>
            <delta_ts>2010-10-11 10:51:51 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>47423</filename>
            <type>text/plain</type>
            <size>13244</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IDQzZTE4ZWMuLmMxY2JjZjggMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDI2IEBACisyMDEwLTEwLTA4ICBKaWFuIExpICA8amlhbmxpQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIFVw
ZGF0ZSBXZWJCbG9iRGF0YSB0byBhZGFwdCB0byBCbG9iRGF0YSBjaGFuZ2UgaW4gdGVybXMgb2YK
KyAgICAgICAgaGFuZGxpbmcgc3RyaW5nIGRhdGEgaXRlbS4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3NDIzCisKKyAgICAgICAgQWxzbyByZW1vdmUg
dW5uZWVkZWQgbWV0aG9kcyBpbiBXZWJCbG9iRGF0YS4gV2ViQmxvYlN0b3JhZ2VEYXRhLiogYXJl
CisgICAgICAgIGFsc28gcmVtb3ZlZCBzaW5jZSB0aGV5J3JlIG5vdCBsb25nZXIgbmVlZGVkLgor
CisgICAgICAgICogV2ViS2l0Lmd5cDoKKyAgICAgICAgKiBwdWJsaWMvV2ViQmxvYkRhdGEuaDoK
KyAgICAgICAgKFdlYktpdDo6V2ViUmF3RGF0YTo6V2ViUmF3RGF0YSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlJhd0RhdGE6OnJlc2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUmF3RGF0YTo6YXNz
aWduKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmF3RGF0YTo6aXNFbXB0eSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlJhd0RhdGE6Om9wZXJhdG9yIHN0ZDo6c3RyaW5nKToKKyAgICAgICAgKiBwdWJs
aWMvV2ViQmxvYlN0b3JhZ2VEYXRhLmg6IFJlbW92ZWQuCisgICAgICAgICogc3JjL1dlYkJsb2JE
YXRhLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQmxvYkRhdGE6Oml0ZW1BdCk6CisgICAgICAg
ICogc3JjL1dlYkJsb2JTdG9yYWdlRGF0YS5jcHA6IFJlbW92ZWQuCisKIDIwMTAtMTAtMDcgIFpo
ZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsIGNo
cm9taXVtIHRvIHI2MTkwMi4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lw
IGIvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKaW5kZXggM2ZhZTdlMS4uNzkzYzEyYyAxMDA2
NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIvV2ViS2l0L2Nocm9taXVt
L1dlYktpdC5neXAKQEAgLTExMiw3ICsxMTIsNiBAQAogICAgICAgICAgICAgICAgICdwdWJsaWMv
V2ViQmluZGluZ3MuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJCbG9iRGF0YS5oJywK
ICAgICAgICAgICAgICAgICAncHVibGljL1dlYkJsb2JSZWdpc3RyeS5oJywKLSAgICAgICAgICAg
ICAgICAncHVibGljL1dlYkJsb2JTdG9yYWdlRGF0YS5oJywKICAgICAgICAgICAgICAgICAncHVi
bGljL1dlYkNhY2hlLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQ2FudmFzLmgnLAog
ICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQ2xpcGJvYXJkLmgnLApAQCAtMzg5LDcgKzM4OCw2
IEBACiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJBdHRyaWJ1dGUuY3BwJywKICAgICAgICAgICAg
ICAgICAnc3JjL1dlYkJpbmRpbmdzLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJCbG9i
RGF0YS5jcHAnLAotICAgICAgICAgICAgICAgICdzcmMvV2ViQmxvYlN0b3JhZ2VEYXRhLmNwcCcs
CiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJDYWNoZS5jcHAnLAogICAgICAgICAgICAgICAgICdz
cmMvV2ViQ29sb3IuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkNvbW1vbi5jcHAnLApk
aWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJCbG9iRGF0YS5oIGIvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJCbG9iRGF0YS5oCmluZGV4IDhjMGUxYWEuLmRmODMzOWQgMTAw
NjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQmxvYkRhdGEuaAorKysgYi9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYkJsb2JEYXRhLmgKQEAgLTMxLDcgKzMxLDYgQEAKICNpZm5k
ZWYgV2ViQmxvYkRhdGFfaAogI2RlZmluZSBXZWJCbG9iRGF0YV9oCiAKLSNpbmNsdWRlICJXZWJD
U3RyaW5nLmgiCiAjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCiAjaW5jbHVkZSAiV2ViVVJMLmgiCiAK
QEAgLTQ0LDExICs0Myw0NyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViQmxvYkRh
dGFQcml2YXRlOwogCisvLyBUaGlzIG9ubHkgYWN0cyBhcyBhIHdyYXBwZXIgcG9pbnRpbmcgdG8g
dGhlIG9yaWdpbmFsIGRhdGEuIFdlIHNob3VsZCBlbnN1cmUgdGhhdAorLy8gdGhlIG9yaWdpbmFs
IGRhdGEgcmVtYWlucyB2YWxpZCB3aGVuIHRoaXMgd3JhcHBlciBpcyB1c2VkLgorY2xhc3MgV2Vi
UmF3RGF0YSB7CitwdWJsaWM6CisgICAgV2ViUmF3RGF0YSgpCisgICAgICAgIDogbV9kYXRhKDAp
CisgICAgICAgICwgbV9sZW5ndGgoMCkKKyAgICB7CisgICAgfQorCisgICAgV0VCS0lUX0FQSSB2
b2lkIHJlc2V0KCkKKyAgICB7CisgICAgICAgIG1fZGF0YSA9IDA7CisgICAgICAgIG1fbGVuZ3Ro
ID0gMDsKKyAgICB9CisKKyAgICBXRUJLSVRfQVBJIHZvaWQgYXNzaWduKGNvbnN0IGNoYXIqIGRh
dGEsIHNpemVfdCBsZW5ndGgpCisgICAgeworICAgICAgICBtX2RhdGEgPSBkYXRhOworICAgICAg
ICBtX2xlbmd0aCA9IGxlbmd0aDsKKyAgICB9CisKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7
IHJldHVybiAhbV9sZW5ndGg7IH0KKworI2lmICFXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyAgICBv
cGVyYXRvciBzdGQ6OnN0cmluZygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9sZW5n
dGggPyBzdGQ6OnN0cmluZyhtX2RhdGEsIG1fbGVuZ3RoKSA6IHN0ZDo6c3RyaW5nKCk7CisgICAg
fQorI2VuZGlmCisKK3ByaXZhdGU6CisgICAgY29uc3QgY2hhciogbV9kYXRhOworICAgIHNpemVf
dCBtX2xlbmd0aDsKK307CisKIGNsYXNzIFdlYkJsb2JEYXRhIHsKIHB1YmxpYzoKICAgICBzdHJ1
Y3QgSXRlbSB7CiAgICAgICAgIGVudW0geyBUeXBlRGF0YSwgVHlwZUZpbGUsIFR5cGVCbG9iIH0g
dHlwZTsKLSAgICAgICAgV2ViQ1N0cmluZyBkYXRhOworICAgICAgICBXZWJSYXdEYXRhIGRhdGE7
CiAgICAgICAgIFdlYlN0cmluZyBmaWxlUGF0aDsKICAgICAgICAgV2ViVVJMIGJsb2JVUkw7CiAg
ICAgICAgIGxvbmcgbG9uZyBvZmZzZXQ7CkBAIC03MiwxNyArMTA3LDkgQEAgcHVibGljOgogICAg
IC8vIGluZGV4IGlzIG91dCBvZiBib3VuZHMuCiAgICAgV0VCS0lUX0FQSSBib29sIGl0ZW1BdChz
aXplX3QgaW5kZXgsIEl0ZW0mIHJlc3VsdCkgY29uc3Q7CiAKLSAgICAvLyBBcHBlbmRzIHRvIHRo
ZSBsaXN0IG9mIGl0ZW1zLgotICAgIFdFQktJVF9BUEkgdm9pZCBhcHBlbmREYXRhKGNvbnN0IFdl
YkNTdHJpbmcmKTsKLSAgICBXRUJLSVRfQVBJIHZvaWQgYXBwZW5kRmlsZShjb25zdCBXZWJTdHJp
bmcmIGZpbGVQYXRoKTsKLSAgICBXRUJLSVRfQVBJIHZvaWQgYXBwZW5kRmlsZShjb25zdCBXZWJT
dHJpbmcmIGZpbGVQYXRoLCBsb25nIGxvbmcgb2Zmc2V0LCBsb25nIGxvbmcgbGVuZ3RoLCBkb3Vi
bGUgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lKTsKLSAgICBXRUJLSVRfQVBJIHZvaWQgYXBwZW5k
QmxvYihjb25zdCBXZWJVUkwmIGJsb2JVUkwsIGxvbmcgbG9uZyBvZmZzZXQsIGxvbmcgbG9uZyBs
ZW5ndGgpOwotCiAgICAgV0VCS0lUX0FQSSBXZWJTdHJpbmcgY29udGVudFR5cGUoKSBjb25zdDsK
LSAgICBXRUJLSVRfQVBJIHZvaWQgc2V0Q29udGVudFR5cGUoY29uc3QgV2ViU3RyaW5nJik7CiAK
ICAgICBXRUJLSVRfQVBJIFdlYlN0cmluZyBjb250ZW50RGlzcG9zaXRpb24oKSBjb25zdDsKLSAg
ICBXRUJLSVRfQVBJIHZvaWQgc2V0Q29udGVudERpc3Bvc2l0aW9uKGNvbnN0IFdlYlN0cmluZyYp
OwogCiAjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCiAgICAgV2ViQmxvYkRhdGEoY29uc3QgV1RG
OjpQYXNzT3duUHRyPFdlYkNvcmU6OkJsb2JEYXRhPiYpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJCbG9iU3RvcmFnZURhdGEuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViQmxvYlN0b3JhZ2VEYXRhLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5
YzBjOGIuLjAwMDAwMDAKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJCbG9iU3RvcmFn
ZURhdGEuaAorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgot
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFdlYkJsb2JTdG9y
YWdlRGF0YV9oCi0jZGVmaW5lIFdlYkJsb2JTdG9yYWdlRGF0YV9oCi0KLSNpbmNsdWRlICJXZWJC
bG9iRGF0YS5oIgotI2luY2x1ZGUgIldlYkRhdGEuaCIKLSNpbmNsdWRlICJXZWJGaWxlSW5mby5o
IgotI2luY2x1ZGUgIldlYlN0cmluZy5oIgotCi0jaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCi1u
YW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIEJsb2JTdG9yYWdlRGF0YTsgfQotbmFtZXNwYWNlIFdU
RiB7IHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBQYXNzUmVmUHRyOyB9Ci0jZW5kaWYKLQot
bmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYkJsb2JTdG9yYWdlRGF0YVByaXZhdGU7Ci0K
LWNsYXNzIFdlYkJsb2JTdG9yYWdlRGF0YSB7Ci1wdWJsaWM6Ci0gICAgfldlYkJsb2JTdG9yYWdl
RGF0YSgpIHsgcmVzZXQoKTsgfQotCi0gICAgV2ViQmxvYlN0b3JhZ2VEYXRhKCkgOiBtX3ByaXZh
dGUoMCkgeyB9Ci0KLSAgICBXRUJLSVRfQVBJIHZvaWQgcmVzZXQoKTsKLQotICAgIGJvb2wgaXNO
dWxsKCkgY29uc3QgeyByZXR1cm4gIW1fcHJpdmF0ZTsgfQotCi0gICAgLy8gUmV0dXJucyB0aGUg
bnVtYmVyIG9mIGl0ZW1zLgotICAgIFdFQktJVF9BUEkgc2l6ZV90IGl0ZW1Db3VudCgpIGNvbnN0
OwotCi0gICAgLy8gUmV0cmlldmVzIHRoZSB2YWx1ZXMgb2YgdGhlIGl0ZW0gYXQgdGhlIGdpdmVu
IGluZGV4LiBSZXR1cm5zIGZhbHNlIGlmCi0gICAgLy8gaW5kZXggaXMgb3V0IG9mIGJvdW5kcy4K
LSAgICBXRUJLSVRfQVBJIGJvb2wgaXRlbUF0KHNpemVfdCBpbmRleCwgV2ViQmxvYkRhdGE6Okl0
ZW0mIHJlc3VsdCkgY29uc3Q7Ci0KLSAgICBXRUJLSVRfQVBJIFdlYlN0cmluZyBjb250ZW50VHlw
ZSgpIGNvbnN0OwotICAgIFdFQktJVF9BUEkgV2ViU3RyaW5nIGNvbnRlbnREaXNwb3NpdGlvbigp
IGNvbnN0OwotCi0jaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCi0gICAgV2ViQmxvYlN0b3JhZ2VE
YXRhKGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpCbG9iU3RvcmFnZURhdGE+Jik7Ci0g
ICAgV2ViQmxvYlN0b3JhZ2VEYXRhJiBvcGVyYXRvcj0oY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdl
YkNvcmU6OkJsb2JTdG9yYWdlRGF0YT4mKTsKLSAgICBvcGVyYXRvciBXVEY6OlBhc3NSZWZQdHI8
V2ViQ29yZTo6QmxvYlN0b3JhZ2VEYXRhPigpIGNvbnN0OwotI2VuZGlmCi0KLXByaXZhdGU6Ci0j
aWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCi0gICAgdm9pZCBhc3NpZ24oY29uc3QgV1RGOjpQYXNz
UmVmUHRyPFdlYkNvcmU6OkJsb2JTdG9yYWdlRGF0YT4mKTsKLSNlbmRpZgotICAgIFdlYkJsb2JT
dG9yYWdlRGF0YVByaXZhdGUqIG1fcHJpdmF0ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktp
dAotCi0jZW5kaWYgLy8gV2ViQmxvYlN0b3JhZ2VEYXRhX2gKZGlmZiAtLWdpdCBhL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViQmxvYkRhdGEuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJCbG9i
RGF0YS5jcHAKaW5kZXggNGNkMWQ2Ny4uMGI2ZDQzYiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJCbG9iRGF0YS5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJCbG9i
RGF0YS5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJXZWJCbG9iRGF0YS5oIgogCiAj
aW5jbHVkZSAiQmxvYkRhdGEuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCiB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtNzQsNyArNzUsNyBAQCBib29sIFdlYkJsb2JEYXRh
OjppdGVtQXQoc2l6ZV90IGluZGV4LCBJdGVtJiByZXN1bHQpIGNvbnN0CiAgICAgc3dpdGNoIChp
dGVtLnR5cGUpIHsKICAgICBjYXNlIEJsb2JEYXRhSXRlbTo6RGF0YToKICAgICAgICAgcmVzdWx0
LnR5cGUgPSBJdGVtOjpUeXBlRGF0YTsKLSAgICAgICAgcmVzdWx0LmRhdGEgPSBpdGVtLmRhdGE7
CisgICAgICAgIHJlc3VsdC5kYXRhLmFzc2lnbihpdGVtLmRhdGEtPmRhdGEoKSwgaXRlbS5kYXRh
LT5sZW5ndGgoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGNhc2UgQmxvYkRhdGFJdGVt
OjpGaWxlOgogICAgICAgICByZXN1bHQudHlwZSA9IEl0ZW06OlR5cGVGaWxlOwpAQCAtODksNTQg
KzkwLDE4IEBAIGJvb2wgV2ViQmxvYkRhdGE6Oml0ZW1BdChzaXplX3QgaW5kZXgsIEl0ZW0mIHJl
c3VsdCkgY29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgV2ViQmxvYkRhdGE6OmFw
cGVuZERhdGEoY29uc3QgV2ViQ1N0cmluZyYgZGF0YSkKLXsKLSAgICBBU1NFUlQoIWlzTnVsbCgp
KTsKLSAgICBtX3ByaXZhdGUtPmFwcGVuZERhdGEoZGF0YSk7Ci19Ci0KLXZvaWQgV2ViQmxvYkRh
dGE6OmFwcGVuZEZpbGUoY29uc3QgV2ViU3RyaW5nJiBmaWxlUGF0aCkKLXsKLSAgICBBU1NFUlQo
IWlzTnVsbCgpKTsKLSAgICBtX3ByaXZhdGUtPmFwcGVuZEZpbGUoZmlsZVBhdGgpOwotfQotCi12
b2lkIFdlYkJsb2JEYXRhOjphcHBlbmRGaWxlKGNvbnN0IFdlYlN0cmluZyYgZmlsZVBhdGgsIGxv
bmcgbG9uZyBvZmZzZXQsIGxvbmcgbG9uZyBsZW5ndGgsIGRvdWJsZSBleHBlY3RlZE1vZGlmaWNh
dGlvblRpbWUpCi17Ci0gICAgQVNTRVJUKCFpc051bGwoKSk7Ci0gICAgbV9wcml2YXRlLT5hcHBl
bmRGaWxlKGZpbGVQYXRoLCBvZmZzZXQsIGxlbmd0aCwgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1l
KTsKLX0KLQotdm9pZCBXZWJCbG9iRGF0YTo6YXBwZW5kQmxvYihjb25zdCBXZWJVUkwmIGJsb2JV
UkwsIGxvbmcgbG9uZyBvZmZzZXQsIGxvbmcgbG9uZyBsZW5ndGgpCi17Ci0gICAgQVNTRVJUKCFp
c051bGwoKSk7Ci0gICAgbV9wcml2YXRlLT5hcHBlbmRCbG9iKGJsb2JVUkwsIG9mZnNldCwgbGVu
Z3RoKTsKLX0KLQogV2ViU3RyaW5nIFdlYkJsb2JEYXRhOjpjb250ZW50VHlwZSgpIGNvbnN0CiB7
CiAgICAgQVNTRVJUKCFpc051bGwoKSk7CiAgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Y29udGVudFR5
cGUoKTsKIH0KIAotdm9pZCBXZWJCbG9iRGF0YTo6c2V0Q29udGVudFR5cGUoY29uc3QgV2ViU3Ry
aW5nJiBjb250ZW50VHlwZSkKLXsKLSAgICBBU1NFUlQoIWlzTnVsbCgpKTsKLSAgICBtX3ByaXZh
dGUtPnNldENvbnRlbnRUeXBlKGNvbnRlbnRUeXBlKTsKLX0KLQogV2ViU3RyaW5nIFdlYkJsb2JE
YXRhOjpjb250ZW50RGlzcG9zaXRpb24oKSBjb25zdAogewogICAgIEFTU0VSVCghaXNOdWxsKCkp
OwogICAgIHJldHVybiBtX3ByaXZhdGUtPmNvbnRlbnREaXNwb3NpdGlvbigpOwogfQogCi12b2lk
IFdlYkJsb2JEYXRhOjpzZXRDb250ZW50RGlzcG9zaXRpb24oY29uc3QgV2ViU3RyaW5nJiBjb250
ZW50RGlzcG9zaXRpb24pCi17Ci0gICAgQVNTRVJUKCFpc051bGwoKSk7Ci0gICAgbV9wcml2YXRl
LT5zZXRDb250ZW50RGlzcG9zaXRpb24oY29udGVudERpc3Bvc2l0aW9uKTsKLX0KLQogV2ViQmxv
YkRhdGE6OldlYkJsb2JEYXRhKGNvbnN0IFBhc3NPd25QdHI8QmxvYkRhdGE+JiBkYXRhKQogICAg
IDogbV9wcml2YXRlKDApCiB7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkJs
b2JTdG9yYWdlRGF0YS5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkJsb2JTdG9yYWdlRGF0
YS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4YTI1ZmUuLjAwMDAwMDAKLS0t
IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJCbG9iU3RvcmFnZURhdGEuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMTEzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViQmxv
YlN0b3JhZ2VEYXRhLmgiCi0KLSNpbmNsdWRlICJCbG9iU3RvcmFnZURhdGEuaCIKLQotdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJCbG9i
U3RvcmFnZURhdGFQcml2YXRlIDogcHVibGljIEJsb2JTdG9yYWdlRGF0YSB7Ci19OwotCi12b2lk
IFdlYkJsb2JTdG9yYWdlRGF0YTo6cmVzZXQoKQotewotICAgIGFzc2lnbigwKTsKLX0KLQotc2l6
ZV90IFdlYkJsb2JTdG9yYWdlRGF0YTo6aXRlbUNvdW50KCkgY29uc3QKLXsKLSAgICBBU1NFUlQo
IWlzTnVsbCgpKTsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5pdGVtcygpLnNpemUoKTsKLX0KLQot
Ym9vbCBXZWJCbG9iU3RvcmFnZURhdGE6Oml0ZW1BdChzaXplX3QgaW5kZXgsIFdlYkJsb2JEYXRh
OjpJdGVtJiByZXN1bHQpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFpc051bGwoKSk7Ci0KLSAgICBp
ZiAoaW5kZXggPj0gbV9wcml2YXRlLT5pdGVtcygpLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgY29uc3QgQmxvYkRhdGFJdGVtJiBpdGVtID0gbV9wcml2YXRlLT5pdGVtcygp
W2luZGV4XTsKLSAgICByZXN1bHQub2Zmc2V0ID0gaXRlbS5vZmZzZXQ7Ci0gICAgcmVzdWx0Lmxl
bmd0aCA9IGl0ZW0ubGVuZ3RoOwotICAgIHJlc3VsdC5leHBlY3RlZE1vZGlmaWNhdGlvblRpbWUg
PSBpdGVtLmV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZTsKLSAgICBpZiAoaXRlbS50eXBlID09IEJs
b2JEYXRhSXRlbTo6RGF0YSkgewotICAgICAgICByZXN1bHQudHlwZSA9IFdlYkJsb2JEYXRhOjpJ
dGVtOjpUeXBlRGF0YTsKLSAgICAgICAgcmVzdWx0LmRhdGEuYXNzaWduKGl0ZW0uZGF0YS5kYXRh
KCksIHN0YXRpY19jYXN0PHNpemVfdD4oaXRlbS5kYXRhLmxlbmd0aCgpKSk7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVChpdGVtLnR5cGUgPT0gQmxv
YkRhdGFJdGVtOjpGaWxlKTsKLSAgICAgICAgcmVzdWx0LnR5cGUgPSBXZWJCbG9iRGF0YTo6SXRl
bTo6VHlwZUZpbGU7Ci0gICAgICAgIHJlc3VsdC5maWxlUGF0aCA9IGl0ZW0ucGF0aDsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotfQotCi1XZWJTdHJpbmcgV2ViQmxvYlN0b3JhZ2VEYXRh
Ojpjb250ZW50VHlwZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFpc051bGwoKSk7Ci0gICAgcmV0
dXJuIG1fcHJpdmF0ZS0+Y29udGVudFR5cGUoKTsKLX0KLQotV2ViU3RyaW5nIFdlYkJsb2JTdG9y
YWdlRGF0YTo6Y29udGVudERpc3Bvc2l0aW9uKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIWlzTnVs
bCgpKTsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5jb250ZW50RGlzcG9zaXRpb24oKTsKLX0KLQot
V2ViQmxvYlN0b3JhZ2VEYXRhOjpXZWJCbG9iU3RvcmFnZURhdGEoY29uc3QgUGFzc1JlZlB0cjxC
bG9iU3RvcmFnZURhdGE+JiBkYXRhKQotICAgIDogbV9wcml2YXRlKDApCi17Ci0gICAgYXNzaWdu
KGRhdGEpOwotfQotCi1XZWJCbG9iU3RvcmFnZURhdGEmIFdlYkJsb2JTdG9yYWdlRGF0YTo6b3Bl
cmF0b3I9KGNvbnN0IFBhc3NSZWZQdHI8QmxvYlN0b3JhZ2VEYXRhPiYgZGF0YSkKLXsKLSAgICBh
c3NpZ24oZGF0YSk7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1XZWJCbG9iU3RvcmFnZURhdGE6
Om9wZXJhdG9yIFBhc3NSZWZQdHI8QmxvYlN0b3JhZ2VEYXRhPigpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1fcHJpdmF0ZTsKLX0KLQotdm9pZCBXZWJCbG9iU3RvcmFnZURhdGE6OmFzc2lnbihjb25z
dCBQYXNzUmVmUHRyPEJsb2JTdG9yYWdlRGF0YT4mIGRhdGEpCi17Ci0gICAgaWYgKG1fcHJpdmF0
ZSkKLSAgICAgICAgbV9wcml2YXRlLT5kZXJlZigpOwotICAgIG1fcHJpdmF0ZSA9IHN0YXRpY19j
YXN0PFdlYkJsb2JTdG9yYWdlRGF0YVByaXZhdGUqPihkYXRhLmxlYWtSZWYoKSk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYktpdAo=
</data>
<flag name="review"
          id="60089"
          type_id="1"
          status="-"
          setter="fishd"
    />
    <flag name="commit-queue"
          id="60090"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70452</attachid>
            <date>2010-10-11 10:51:51 -0700</date>
            <delta_ts>2010-10-11 10:56:14 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>47423_2</filename>
            <type>text/plain</type>
            <size>15426</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IDg2MDgxZWQuLmY0YzQyNmQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDIyIEBACisyMDEwLTEwLTExICBKaWFuIExpICA8amlhbmxpQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIFVw
ZGF0ZSBXZWJCbG9iRGF0YSB0byBhZGFwdCB0byBCbG9iRGF0YSBjaGFuZ2UgaW4gdGVybXMgb2YK
KyAgICAgICAgaGFuZGxpbmcgc3RyaW5nIGRhdGEgaXRlbS4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3NDIzCisKKyAgICAgICAgQWxzbyByZW1vdmUg
dW5uZWVkZWQgbWV0aG9kcyBpbiBXZWJCbG9iRGF0YS4gV2ViQmxvYlN0b3JhZ2VEYXRhLiogYXJl
CisgICAgICAgIGFsc28gcmVtb3ZlZCBzaW5jZSB0aGV5J3JlIG5vdCBsb25nZXIgbmVlZGVkLgor
CisgICAgICAgICogV2ViS2l0Lmd5cDoKKyAgICAgICAgKiBwdWJsaWMvV2ViQmxvYkRhdGEuaDoK
KyAgICAgICAgKiBwdWJsaWMvV2ViQmxvYlN0b3JhZ2VEYXRhLmg6IFJlbW92ZWQuCisgICAgICAg
ICogcHVibGljL1dlYkRlcGVuZGVudERhdGEuaDogQWRkZWQuCisgICAgICAgICogc3JjL1dlYkJs
b2JEYXRhLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQmxvYkRhdGE6Oml0ZW1BdCk6CisgICAg
ICAgICogc3JjL1dlYkJsb2JTdG9yYWdlRGF0YS5jcHA6IFJlbW92ZWQuCisKIDIwMTAtMTAtMTEg
IEtpbnVrbyBZYXN1ZGEgIDxraW51a29AZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBEYXZpZCBMZXZpbi4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwIGIv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKaW5kZXggM2ZhZTdlMS4uMjNjNzY5MyAxMDA2NDQK
LS0tIGEvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIvV2ViS2l0L2Nocm9taXVtL1dl
YktpdC5neXAKQEAgLTExMiw3ICsxMTIsNiBAQAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2Vi
QmluZGluZ3MuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJCbG9iRGF0YS5oJywKICAg
ICAgICAgICAgICAgICAncHVibGljL1dlYkJsb2JSZWdpc3RyeS5oJywKLSAgICAgICAgICAgICAg
ICAncHVibGljL1dlYkJsb2JTdG9yYWdlRGF0YS5oJywKICAgICAgICAgICAgICAgICAncHVibGlj
L1dlYkNhY2hlLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQ2FudmFzLmgnLAogICAg
ICAgICAgICAgICAgICdwdWJsaWMvV2ViQ2xpcGJvYXJkLmgnLApAQCAtMTI4LDYgKzEyNyw3IEBA
CiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENh
Y2hlLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQ1N0cmluZy5oJywKICAgICAgICAg
ICAgICAgICAncHVibGljL1dlYkN1cnNvckluZm8uaCcsCisgICAgICAgICAgICAgICAgJ3B1Ymxp
Yy9XZWJEZXBlbmRlbnREYXRhLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViRE9NRXZl
bnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJET01FdmVudExpc3RlbmVyLmgnLAog
ICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViRE9NTW91c2VFdmVudC5oJywKQEAgLTM4OSw3ICsz
ODksNiBAQAogICAgICAgICAgICAgICAgICdzcmMvV2ViQXR0cmlidXRlLmNwcCcsCiAgICAgICAg
ICAgICAgICAgJ3NyYy9XZWJCaW5kaW5ncy5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2Vi
QmxvYkRhdGEuY3BwJywKLSAgICAgICAgICAgICAgICAnc3JjL1dlYkJsb2JTdG9yYWdlRGF0YS5j
cHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViQ2FjaGUuY3BwJywKICAgICAgICAgICAgICAg
ICAnc3JjL1dlYkNvbG9yLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJDb21tb24uY3Bw
JywKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQmxvYkRhdGEuaCBiL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQmxvYkRhdGEuaAppbmRleCA4YzBlMWFhLi4wYTMzZjAy
IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkJsb2JEYXRhLmgKKysrIGIv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJCbG9iRGF0YS5oCkBAIC0zMSw3ICszMSw3IEBACiAj
aWZuZGVmIFdlYkJsb2JEYXRhX2gKICNkZWZpbmUgV2ViQmxvYkRhdGFfaAogCi0jaW5jbHVkZSAi
V2ViQ1N0cmluZy5oIgorI2luY2x1ZGUgIldlYkRlcGVuZGVudERhdGEuaCIKICNpbmNsdWRlICJX
ZWJTdHJpbmcuaCIKICNpbmNsdWRlICJXZWJVUkwuaCIKIApAQCAtNDgsNyArNDgsNyBAQCBjbGFz
cyBXZWJCbG9iRGF0YSB7CiBwdWJsaWM6CiAgICAgc3RydWN0IEl0ZW0gewogICAgICAgICBlbnVt
IHsgVHlwZURhdGEsIFR5cGVGaWxlLCBUeXBlQmxvYiB9IHR5cGU7Ci0gICAgICAgIFdlYkNTdHJp
bmcgZGF0YTsKKyAgICAgICAgV2ViRGVwZW5kZW50RGF0YSBkYXRhOwogICAgICAgICBXZWJTdHJp
bmcgZmlsZVBhdGg7CiAgICAgICAgIFdlYlVSTCBibG9iVVJMOwogICAgICAgICBsb25nIGxvbmcg
b2Zmc2V0OwpAQCAtNzIsMTcgKzcyLDkgQEAgcHVibGljOgogICAgIC8vIGluZGV4IGlzIG91dCBv
ZiBib3VuZHMuCiAgICAgV0VCS0lUX0FQSSBib29sIGl0ZW1BdChzaXplX3QgaW5kZXgsIEl0ZW0m
IHJlc3VsdCkgY29uc3Q7CiAKLSAgICAvLyBBcHBlbmRzIHRvIHRoZSBsaXN0IG9mIGl0ZW1zLgot
ICAgIFdFQktJVF9BUEkgdm9pZCBhcHBlbmREYXRhKGNvbnN0IFdlYkNTdHJpbmcmKTsKLSAgICBX
RUJLSVRfQVBJIHZvaWQgYXBwZW5kRmlsZShjb25zdCBXZWJTdHJpbmcmIGZpbGVQYXRoKTsKLSAg
ICBXRUJLSVRfQVBJIHZvaWQgYXBwZW5kRmlsZShjb25zdCBXZWJTdHJpbmcmIGZpbGVQYXRoLCBs
b25nIGxvbmcgb2Zmc2V0LCBsb25nIGxvbmcgbGVuZ3RoLCBkb3VibGUgZXhwZWN0ZWRNb2RpZmlj
YXRpb25UaW1lKTsKLSAgICBXRUJLSVRfQVBJIHZvaWQgYXBwZW5kQmxvYihjb25zdCBXZWJVUkwm
IGJsb2JVUkwsIGxvbmcgbG9uZyBvZmZzZXQsIGxvbmcgbG9uZyBsZW5ndGgpOwotCiAgICAgV0VC
S0lUX0FQSSBXZWJTdHJpbmcgY29udGVudFR5cGUoKSBjb25zdDsKLSAgICBXRUJLSVRfQVBJIHZv
aWQgc2V0Q29udGVudFR5cGUoY29uc3QgV2ViU3RyaW5nJik7CiAKICAgICBXRUJLSVRfQVBJIFdl
YlN0cmluZyBjb250ZW50RGlzcG9zaXRpb24oKSBjb25zdDsKLSAgICBXRUJLSVRfQVBJIHZvaWQg
c2V0Q29udGVudERpc3Bvc2l0aW9uKGNvbnN0IFdlYlN0cmluZyYpOwogCiAjaWYgV0VCS0lUX0lN
UExFTUVOVEFUSU9OCiAgICAgV2ViQmxvYkRhdGEoY29uc3QgV1RGOjpQYXNzT3duUHRyPFdlYkNv
cmU6OkJsb2JEYXRhPiYpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJC
bG9iU3RvcmFnZURhdGEuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQmxvYlN0b3JhZ2VE
YXRhLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5YzBjOGIuLjAwMDAwMDAKLS0t
IGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJCbG9iU3RvcmFnZURhdGEuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDgzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFdlYkJsb2JTdG9yYWdlRGF0YV9oCi0jZGVmaW5l
IFdlYkJsb2JTdG9yYWdlRGF0YV9oCi0KLSNpbmNsdWRlICJXZWJCbG9iRGF0YS5oIgotI2luY2x1
ZGUgIldlYkRhdGEuaCIKLSNpbmNsdWRlICJXZWJGaWxlSW5mby5oIgotI2luY2x1ZGUgIldlYlN0
cmluZy5oIgotCi0jaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCi1uYW1lc3BhY2UgV2ViQ29yZSB7
IGNsYXNzIEJsb2JTdG9yYWdlRGF0YTsgfQotbmFtZXNwYWNlIFdURiB7IHRlbXBsYXRlIDx0eXBl
bmFtZSBUPiBjbGFzcyBQYXNzUmVmUHRyOyB9Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci0KLWNsYXNzIFdlYkJsb2JTdG9yYWdlRGF0YVByaXZhdGU7Ci0KLWNsYXNzIFdlYkJsb2JTdG9y
YWdlRGF0YSB7Ci1wdWJsaWM6Ci0gICAgfldlYkJsb2JTdG9yYWdlRGF0YSgpIHsgcmVzZXQoKTsg
fQotCi0gICAgV2ViQmxvYlN0b3JhZ2VEYXRhKCkgOiBtX3ByaXZhdGUoMCkgeyB9Ci0KLSAgICBX
RUJLSVRfQVBJIHZvaWQgcmVzZXQoKTsKLQotICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1
cm4gIW1fcHJpdmF0ZTsgfQotCi0gICAgLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGl0ZW1zLgot
ICAgIFdFQktJVF9BUEkgc2l6ZV90IGl0ZW1Db3VudCgpIGNvbnN0OwotCi0gICAgLy8gUmV0cmll
dmVzIHRoZSB2YWx1ZXMgb2YgdGhlIGl0ZW0gYXQgdGhlIGdpdmVuIGluZGV4LiBSZXR1cm5zIGZh
bHNlIGlmCi0gICAgLy8gaW5kZXggaXMgb3V0IG9mIGJvdW5kcy4KLSAgICBXRUJLSVRfQVBJIGJv
b2wgaXRlbUF0KHNpemVfdCBpbmRleCwgV2ViQmxvYkRhdGE6Okl0ZW0mIHJlc3VsdCkgY29uc3Q7
Ci0KLSAgICBXRUJLSVRfQVBJIFdlYlN0cmluZyBjb250ZW50VHlwZSgpIGNvbnN0OwotICAgIFdF
QktJVF9BUEkgV2ViU3RyaW5nIGNvbnRlbnREaXNwb3NpdGlvbigpIGNvbnN0OwotCi0jaWYgV0VC
S0lUX0lNUExFTUVOVEFUSU9OCi0gICAgV2ViQmxvYlN0b3JhZ2VEYXRhKGNvbnN0IFdURjo6UGFz
c1JlZlB0cjxXZWJDb3JlOjpCbG9iU3RvcmFnZURhdGE+Jik7Ci0gICAgV2ViQmxvYlN0b3JhZ2VE
YXRhJiBvcGVyYXRvcj0oY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkJsb2JTdG9yYWdl
RGF0YT4mKTsKLSAgICBvcGVyYXRvciBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6QmxvYlN0b3Jh
Z2VEYXRhPigpIGNvbnN0OwotI2VuZGlmCi0KLXByaXZhdGU6Ci0jaWYgV0VCS0lUX0lNUExFTUVO
VEFUSU9OCi0gICAgdm9pZCBhc3NpZ24oY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkJs
b2JTdG9yYWdlRGF0YT4mKTsKLSNlbmRpZgotICAgIFdlYkJsb2JTdG9yYWdlRGF0YVByaXZhdGUq
IG1fcHJpdmF0ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gV2Vi
QmxvYlN0b3JhZ2VEYXRhX2gKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
RGVwZW5kZW50RGF0YS5oIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJEZXBlbmRlbnREYXRh
LmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjUwM2NmOQotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRGVwZW5kZW50RGF0YS5oCkBAIC0w
LDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIFdlYkRlcGVuZGVudERhdGFfaAorI2RlZmluZSBXZWJEZXBlbmRl
bnREYXRhX2gKKworI2luY2x1ZGUgIldlYkNvbW1vbi5oIgorCisjaWYgIVdFQktJVF9JTVBMRU1F
TlRBVElPTgorI2luY2x1ZGUgPHN0cmluZz4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworLy8gVGhpcyBvbmx5IGFjdHMgYXMgYSB3cmFwcGVyIHBvaW50aW5nIHRvIHRoZSBvcmlnaW5h
bCBkYXRhLiBXZSBzaG91bGQgZW5zdXJlCisvLyB0aGF0IHRoZSBvcmlnaW5hbCBkYXRhIHJlbWFp
bnMgdmFsaWQgd2hlbiB0aGlzIHdyYXBwZXIgaXMgdXNlZC4KK2NsYXNzIFdlYkRlcGVuZGVudERh
dGEgeworcHVibGljOgorICAgIFdlYkRlcGVuZGVudERhdGEoKQorICAgICAgICA6IG1fZGF0YSgw
KQorICAgICAgICAsIG1fbGVuZ3RoKDApCisgICAgeworICAgIH0KKworICAgIHZvaWQgcmVzZXQo
KQorICAgIHsKKyAgICAgICAgbV9kYXRhID0gMDsKKyAgICAgICAgbV9sZW5ndGggPSAwOworICAg
IH0KKworICAgIHZvaWQgYXNzaWduKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpCisg
ICAgeworICAgICAgICBtX2RhdGEgPSBkYXRhOworICAgICAgICBtX2xlbmd0aCA9IGxlbmd0aDsK
KyAgICB9CisKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhbV9sZW5ndGg7IH0K
KworI2lmICFXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyAgICBvcGVyYXRvciBzdGQ6OnN0cmluZygp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9sZW5ndGggPyBzdGQ6OnN0cmluZyhtX2Rh
dGEsIG1fbGVuZ3RoKSA6IHN0ZDo6c3RyaW5nKCk7CisgICAgfQorI2VuZGlmCisKK3ByaXZhdGU6
CisgICAgY29uc3QgY2hhciogbV9kYXRhOworICAgIHNpemVfdCBtX2xlbmd0aDsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViRGVwZW5kZW50RGF0YV9oCmRpZmYg
LS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkJsb2JEYXRhLmNwcCBiL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViQmxvYkRhdGEuY3BwCmluZGV4IDRjZDFkNjcuLjBiNmQ0M2IgMTAwNjQ0Ci0t
LSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQmxvYkRhdGEuY3BwCisrKyBiL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViQmxvYkRhdGEuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiV2Vi
QmxvYkRhdGEuaCIKIAogI2luY2x1ZGUgIkJsb2JEYXRhLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NP
d25QdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTc0LDcgKzc1LDcgQEAg
Ym9vbCBXZWJCbG9iRGF0YTo6aXRlbUF0KHNpemVfdCBpbmRleCwgSXRlbSYgcmVzdWx0KSBjb25z
dAogICAgIHN3aXRjaCAoaXRlbS50eXBlKSB7CiAgICAgY2FzZSBCbG9iRGF0YUl0ZW06OkRhdGE6
CiAgICAgICAgIHJlc3VsdC50eXBlID0gSXRlbTo6VHlwZURhdGE7Ci0gICAgICAgIHJlc3VsdC5k
YXRhID0gaXRlbS5kYXRhOworICAgICAgICByZXN1bHQuZGF0YS5hc3NpZ24oaXRlbS5kYXRhLT5k
YXRhKCksIGl0ZW0uZGF0YS0+bGVuZ3RoKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBj
YXNlIEJsb2JEYXRhSXRlbTo6RmlsZToKICAgICAgICAgcmVzdWx0LnR5cGUgPSBJdGVtOjpUeXBl
RmlsZTsKQEAgLTg5LDU0ICs5MCwxOCBAQCBib29sIFdlYkJsb2JEYXRhOjppdGVtQXQoc2l6ZV90
IGluZGV4LCBJdGVtJiByZXN1bHQpIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lk
IFdlYkJsb2JEYXRhOjphcHBlbmREYXRhKGNvbnN0IFdlYkNTdHJpbmcmIGRhdGEpCi17Ci0gICAg
QVNTRVJUKCFpc051bGwoKSk7Ci0gICAgbV9wcml2YXRlLT5hcHBlbmREYXRhKGRhdGEpOwotfQot
Ci12b2lkIFdlYkJsb2JEYXRhOjphcHBlbmRGaWxlKGNvbnN0IFdlYlN0cmluZyYgZmlsZVBhdGgp
Ci17Ci0gICAgQVNTRVJUKCFpc051bGwoKSk7Ci0gICAgbV9wcml2YXRlLT5hcHBlbmRGaWxlKGZp
bGVQYXRoKTsKLX0KLQotdm9pZCBXZWJCbG9iRGF0YTo6YXBwZW5kRmlsZShjb25zdCBXZWJTdHJp
bmcmIGZpbGVQYXRoLCBsb25nIGxvbmcgb2Zmc2V0LCBsb25nIGxvbmcgbGVuZ3RoLCBkb3VibGUg
ZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lKQotewotICAgIEFTU0VSVCghaXNOdWxsKCkpOwotICAg
IG1fcHJpdmF0ZS0+YXBwZW5kRmlsZShmaWxlUGF0aCwgb2Zmc2V0LCBsZW5ndGgsIGV4cGVjdGVk
TW9kaWZpY2F0aW9uVGltZSk7Ci19Ci0KLXZvaWQgV2ViQmxvYkRhdGE6OmFwcGVuZEJsb2IoY29u
c3QgV2ViVVJMJiBibG9iVVJMLCBsb25nIGxvbmcgb2Zmc2V0LCBsb25nIGxvbmcgbGVuZ3RoKQot
ewotICAgIEFTU0VSVCghaXNOdWxsKCkpOwotICAgIG1fcHJpdmF0ZS0+YXBwZW5kQmxvYihibG9i
VVJMLCBvZmZzZXQsIGxlbmd0aCk7Ci19Ci0KIFdlYlN0cmluZyBXZWJCbG9iRGF0YTo6Y29udGVu
dFR5cGUoKSBjb25zdAogewogICAgIEFTU0VSVCghaXNOdWxsKCkpOwogICAgIHJldHVybiBtX3By
aXZhdGUtPmNvbnRlbnRUeXBlKCk7CiB9CiAKLXZvaWQgV2ViQmxvYkRhdGE6OnNldENvbnRlbnRU
eXBlKGNvbnN0IFdlYlN0cmluZyYgY29udGVudFR5cGUpCi17Ci0gICAgQVNTRVJUKCFpc051bGwo
KSk7Ci0gICAgbV9wcml2YXRlLT5zZXRDb250ZW50VHlwZShjb250ZW50VHlwZSk7Ci19Ci0KIFdl
YlN0cmluZyBXZWJCbG9iRGF0YTo6Y29udGVudERpc3Bvc2l0aW9uKCkgY29uc3QKIHsKICAgICBB
U1NFUlQoIWlzTnVsbCgpKTsKICAgICByZXR1cm4gbV9wcml2YXRlLT5jb250ZW50RGlzcG9zaXRp
b24oKTsKIH0KIAotdm9pZCBXZWJCbG9iRGF0YTo6c2V0Q29udGVudERpc3Bvc2l0aW9uKGNvbnN0
IFdlYlN0cmluZyYgY29udGVudERpc3Bvc2l0aW9uKQotewotICAgIEFTU0VSVCghaXNOdWxsKCkp
OwotICAgIG1fcHJpdmF0ZS0+c2V0Q29udGVudERpc3Bvc2l0aW9uKGNvbnRlbnREaXNwb3NpdGlv
bik7Ci19Ci0KIFdlYkJsb2JEYXRhOjpXZWJCbG9iRGF0YShjb25zdCBQYXNzT3duUHRyPEJsb2JE
YXRhPiYgZGF0YSkKICAgICA6IG1fcHJpdmF0ZSgwKQogewpkaWZmIC0tZ2l0IGEvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJCbG9iU3RvcmFnZURhdGEuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJCbG9iU3RvcmFnZURhdGEuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOGEy
NWZlLi4wMDAwMDAwCi0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQmxvYlN0b3JhZ2VEYXRh
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIldlYkJsb2JTdG9yYWdlRGF0YS5oIgotCi0jaW5jbHVkZSAiQmxvYlN0b3JhZ2VE
YXRhLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsK
LQotY2xhc3MgV2ViQmxvYlN0b3JhZ2VEYXRhUHJpdmF0ZSA6IHB1YmxpYyBCbG9iU3RvcmFnZURh
dGEgewotfTsKLQotdm9pZCBXZWJCbG9iU3RvcmFnZURhdGE6OnJlc2V0KCkKLXsKLSAgICBhc3Np
Z24oMCk7Ci19Ci0KLXNpemVfdCBXZWJCbG9iU3RvcmFnZURhdGE6Oml0ZW1Db3VudCgpIGNvbnN0
Ci17Ci0gICAgQVNTRVJUKCFpc051bGwoKSk7Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXRlbXMo
KS5zaXplKCk7Ci19Ci0KLWJvb2wgV2ViQmxvYlN0b3JhZ2VEYXRhOjppdGVtQXQoc2l6ZV90IGlu
ZGV4LCBXZWJCbG9iRGF0YTo6SXRlbSYgcmVzdWx0KSBjb25zdAotewotICAgIEFTU0VSVCghaXNO
dWxsKCkpOwotCi0gICAgaWYgKGluZGV4ID49IG1fcHJpdmF0ZS0+aXRlbXMoKS5zaXplKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNvbnN0IEJsb2JEYXRhSXRlbSYgaXRlbSA9IG1f
cHJpdmF0ZS0+aXRlbXMoKVtpbmRleF07Ci0gICAgcmVzdWx0Lm9mZnNldCA9IGl0ZW0ub2Zmc2V0
OwotICAgIHJlc3VsdC5sZW5ndGggPSBpdGVtLmxlbmd0aDsKLSAgICByZXN1bHQuZXhwZWN0ZWRN
b2RpZmljYXRpb25UaW1lID0gaXRlbS5leHBlY3RlZE1vZGlmaWNhdGlvblRpbWU7Ci0gICAgaWYg
KGl0ZW0udHlwZSA9PSBCbG9iRGF0YUl0ZW06OkRhdGEpIHsKLSAgICAgICAgcmVzdWx0LnR5cGUg
PSBXZWJCbG9iRGF0YTo6SXRlbTo6VHlwZURhdGE7Ci0gICAgICAgIHJlc3VsdC5kYXRhLmFzc2ln
bihpdGVtLmRhdGEuZGF0YSgpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGl0ZW0uZGF0YS5sZW5ndGgo
KSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgICBBU1NFUlQo
aXRlbS50eXBlID09IEJsb2JEYXRhSXRlbTo6RmlsZSk7Ci0gICAgICAgIHJlc3VsdC50eXBlID0g
V2ViQmxvYkRhdGE6Okl0ZW06OlR5cGVGaWxlOwotICAgICAgICByZXN1bHQuZmlsZVBhdGggPSBp
dGVtLnBhdGg7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLX0KLQotV2ViU3RyaW5nIFdl
YkJsb2JTdG9yYWdlRGF0YTo6Y29udGVudFR5cGUoKSBjb25zdAotewotICAgIEFTU0VSVCghaXNO
dWxsKCkpOwotICAgIHJldHVybiBtX3ByaXZhdGUtPmNvbnRlbnRUeXBlKCk7Ci19Ci0KLVdlYlN0
cmluZyBXZWJCbG9iU3RvcmFnZURhdGE6OmNvbnRlbnREaXNwb3NpdGlvbigpIGNvbnN0Ci17Ci0g
ICAgQVNTRVJUKCFpc051bGwoKSk7Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+Y29udGVudERpc3Bv
c2l0aW9uKCk7Ci19Ci0KLVdlYkJsb2JTdG9yYWdlRGF0YTo6V2ViQmxvYlN0b3JhZ2VEYXRhKGNv
bnN0IFBhc3NSZWZQdHI8QmxvYlN0b3JhZ2VEYXRhPiYgZGF0YSkKLSAgICA6IG1fcHJpdmF0ZSgw
KQotewotICAgIGFzc2lnbihkYXRhKTsKLX0KLQotV2ViQmxvYlN0b3JhZ2VEYXRhJiBXZWJCbG9i
U3RvcmFnZURhdGE6Om9wZXJhdG9yPShjb25zdCBQYXNzUmVmUHRyPEJsb2JTdG9yYWdlRGF0YT4m
IGRhdGEpCi17Ci0gICAgYXNzaWduKGRhdGEpOwotICAgIHJldHVybiAqdGhpczsKLX0KLQotV2Vi
QmxvYlN0b3JhZ2VEYXRhOjpvcGVyYXRvciBQYXNzUmVmUHRyPEJsb2JTdG9yYWdlRGF0YT4oKSBj
b25zdAotewotICAgIHJldHVybiBtX3ByaXZhdGU7Ci19Ci0KLXZvaWQgV2ViQmxvYlN0b3JhZ2VE
YXRhOjphc3NpZ24oY29uc3QgUGFzc1JlZlB0cjxCbG9iU3RvcmFnZURhdGE+JiBkYXRhKQotewot
ICAgIGlmIChtX3ByaXZhdGUpCi0gICAgICAgIG1fcHJpdmF0ZS0+ZGVyZWYoKTsKLSAgICBtX3By
aXZhdGUgPSBzdGF0aWNfY2FzdDxXZWJCbG9iU3RvcmFnZURhdGFQcml2YXRlKj4oZGF0YS5sZWFr
UmVmKCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>
<flag name="commit-queue"
          id="60299"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70453</attachid>
            <date>2010-10-11 10:56:14 -0700</date>
            <delta_ts>2010-10-12 11:15:32 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>47423_3</filename>
            <type>text/plain</type>
            <size>15835</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IDg2MDgxZWQuLjM4MmE2MTQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDIzIEBACisyMDEwLTEwLTExICBKaWFuIExpICA8amlhbmxpQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIFVw
ZGF0ZSBXZWJCbG9iRGF0YSB0byBhZGFwdCB0byBCbG9iRGF0YSBjaGFuZ2UgaW4gdGVybXMgb2YK
KyAgICAgICAgaGFuZGxpbmcgc3RyaW5nIGRhdGEgaXRlbS4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3NDIzCisKKyAgICAgICAgQWxzbyByZW1vdmUg
dW5uZWVkZWQgbWV0aG9kcyBpbiBXZWJCbG9iRGF0YS4gV2ViQmxvYlN0b3JhZ2VEYXRhLiogYXJl
CisgICAgICAgIGFsc28gcmVtb3ZlZCBzaW5jZSB0aGV5J3JlIG5vdCBsb25nZXIgbmVlZGVkLgor
CisgICAgICAgICogV2ViS2l0Lmd5cDoKKyAgICAgICAgKiBwdWJsaWMvV2ViQmxvYkRhdGEuaDoK
KyAgICAgICAgKiBwdWJsaWMvV2ViQmxvYlJlZ2lzdHJ5Lmg6CisgICAgICAgICogcHVibGljL1dl
YkJsb2JTdG9yYWdlRGF0YS5oOiBSZW1vdmVkLgorICAgICAgICAqIHB1YmxpYy9XZWJEZXBlbmRl
bnREYXRhLmg6IEFkZGVkLgorICAgICAgICAqIHNyYy9XZWJCbG9iRGF0YS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYkJsb2JEYXRhOjppdGVtQXQpOgorICAgICAgICAqIHNyYy9XZWJCbG9iU3Rv
cmFnZURhdGEuY3BwOiBSZW1vdmVkLgorCiAyMDEwLTEwLTExICBLaW51a28gWWFzdWRhICA8a2lu
dWtvQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgTGV2aW4uCmRpZmYg
LS1naXQgYS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cCBiL1dlYktpdC9jaHJvbWl1bS9XZWJL
aXQuZ3lwCmluZGV4IDNmYWU3ZTEuLjIzYzc2OTMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCkBAIC0xMTIsNyAr
MTEyLDYgQEAKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkJpbmRpbmdzLmgnLAogICAgICAg
ICAgICAgICAgICdwdWJsaWMvV2ViQmxvYkRhdGEuaCcsCiAgICAgICAgICAgICAgICAgJ3B1Ymxp
Yy9XZWJCbG9iUmVnaXN0cnkuaCcsCi0gICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJCbG9iU3Rv
cmFnZURhdGEuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJDYWNoZS5oJywKICAgICAg
ICAgICAgICAgICAncHVibGljL1dlYkNhbnZhcy5oJywKICAgICAgICAgICAgICAgICAncHVibGlj
L1dlYkNsaXBib2FyZC5oJywKQEAgLTEyOCw2ICsxMjcsNyBAQAogICAgICAgICAgICAgICAgICdw
dWJsaWMvV2ViQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5oJywKICAgICAgICAgICAg
ICAgICAncHVibGljL1dlYkNTdHJpbmcuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJD
dXJzb3JJbmZvLmgnLAorICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViRGVwZW5kZW50RGF0YS5o
JywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkRPTUV2ZW50LmgnLAogICAgICAgICAgICAg
ICAgICdwdWJsaWMvV2ViRE9NRXZlbnRMaXN0ZW5lci5oJywKICAgICAgICAgICAgICAgICAncHVi
bGljL1dlYkRPTU1vdXNlRXZlbnQuaCcsCkBAIC0zODksNyArMzg5LDYgQEAKICAgICAgICAgICAg
ICAgICAnc3JjL1dlYkF0dHJpYnV0ZS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViQmlu
ZGluZ3MuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkJsb2JEYXRhLmNwcCcsCi0gICAg
ICAgICAgICAgICAgJ3NyYy9XZWJCbG9iU3RvcmFnZURhdGEuY3BwJywKICAgICAgICAgICAgICAg
ICAnc3JjL1dlYkNhY2hlLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJDb2xvci5jcHAn
LAogICAgICAgICAgICAgICAgICdzcmMvV2ViQ29tbW9uLmNwcCcsCmRpZmYgLS1naXQgYS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYkJsb2JEYXRhLmggYi9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYkJsb2JEYXRhLmgKaW5kZXggOGMwZTFhYS4uMGEzM2YwMiAxMDA2NDQKLS0tIGEvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJCbG9iRGF0YS5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViQmxvYkRhdGEuaApAQCAtMzEsNyArMzEsNyBAQAogI2lmbmRlZiBXZWJCbG9iRGF0YV9o
CiAjZGVmaW5lIFdlYkJsb2JEYXRhX2gKIAotI2luY2x1ZGUgIldlYkNTdHJpbmcuaCIKKyNpbmNs
dWRlICJXZWJEZXBlbmRlbnREYXRhLmgiCiAjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCiAjaW5jbHVk
ZSAiV2ViVVJMLmgiCiAKQEAgLTQ4LDcgKzQ4LDcgQEAgY2xhc3MgV2ViQmxvYkRhdGEgewogcHVi
bGljOgogICAgIHN0cnVjdCBJdGVtIHsKICAgICAgICAgZW51bSB7IFR5cGVEYXRhLCBUeXBlRmls
ZSwgVHlwZUJsb2IgfSB0eXBlOwotICAgICAgICBXZWJDU3RyaW5nIGRhdGE7CisgICAgICAgIFdl
YkRlcGVuZGVudERhdGEgZGF0YTsKICAgICAgICAgV2ViU3RyaW5nIGZpbGVQYXRoOwogICAgICAg
ICBXZWJVUkwgYmxvYlVSTDsKICAgICAgICAgbG9uZyBsb25nIG9mZnNldDsKQEAgLTcyLDE3ICs3
Miw5IEBAIHB1YmxpYzoKICAgICAvLyBpbmRleCBpcyBvdXQgb2YgYm91bmRzLgogICAgIFdFQktJ
VF9BUEkgYm9vbCBpdGVtQXQoc2l6ZV90IGluZGV4LCBJdGVtJiByZXN1bHQpIGNvbnN0OwogCi0g
ICAgLy8gQXBwZW5kcyB0byB0aGUgbGlzdCBvZiBpdGVtcy4KLSAgICBXRUJLSVRfQVBJIHZvaWQg
YXBwZW5kRGF0YShjb25zdCBXZWJDU3RyaW5nJik7Ci0gICAgV0VCS0lUX0FQSSB2b2lkIGFwcGVu
ZEZpbGUoY29uc3QgV2ViU3RyaW5nJiBmaWxlUGF0aCk7Ci0gICAgV0VCS0lUX0FQSSB2b2lkIGFw
cGVuZEZpbGUoY29uc3QgV2ViU3RyaW5nJiBmaWxlUGF0aCwgbG9uZyBsb25nIG9mZnNldCwgbG9u
ZyBsb25nIGxlbmd0aCwgZG91YmxlIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSk7Ci0gICAgV0VC
S0lUX0FQSSB2b2lkIGFwcGVuZEJsb2IoY29uc3QgV2ViVVJMJiBibG9iVVJMLCBsb25nIGxvbmcg
b2Zmc2V0LCBsb25nIGxvbmcgbGVuZ3RoKTsKLQogICAgIFdFQktJVF9BUEkgV2ViU3RyaW5nIGNv
bnRlbnRUeXBlKCkgY29uc3Q7Ci0gICAgV0VCS0lUX0FQSSB2b2lkIHNldENvbnRlbnRUeXBlKGNv
bnN0IFdlYlN0cmluZyYpOwogCiAgICAgV0VCS0lUX0FQSSBXZWJTdHJpbmcgY29udGVudERpc3Bv
c2l0aW9uKCkgY29uc3Q7Ci0gICAgV0VCS0lUX0FQSSB2b2lkIHNldENvbnRlbnREaXNwb3NpdGlv
bihjb25zdCBXZWJTdHJpbmcmKTsKIAogI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgogICAgIFdl
YkJsb2JEYXRhKGNvbnN0IFdURjo6UGFzc093blB0cjxXZWJDb3JlOjpCbG9iRGF0YT4mKTsKZGlm
ZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQmxvYlJlZ2lzdHJ5LmggYi9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYkJsb2JSZWdpc3RyeS5oCmluZGV4IGNiZDlhOTkuLjMwOGQ3
MmUgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQmxvYlJlZ2lzdHJ5LmgK
KysrIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJCbG9iUmVnaXN0cnkuaApAQCAtMzEsOCAr
MzEsNiBAQAogI2lmbmRlZiBXZWJCbG9iUmVnaXN0cnlfaAogI2RlZmluZSBXZWJCbG9iUmVnaXN0
cnlfaAogCi0jaW5jbHVkZSAiV2ViQmxvYlN0b3JhZ2VEYXRhLmgiCi0KIG5hbWVzcGFjZSBXZWJL
aXQgewogCiBjbGFzcyBXZWJCbG9iRGF0YTsKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViQmxvYlN0b3JhZ2VEYXRhLmggYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkJs
b2JTdG9yYWdlRGF0YS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOWMwYzhiLi4w
MDAwMDAwCi0tLSBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQmxvYlN0b3JhZ2VEYXRhLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXZWJCbG9iU3RvcmFnZURhdGFf
aAotI2RlZmluZSBXZWJCbG9iU3RvcmFnZURhdGFfaAotCi0jaW5jbHVkZSAiV2ViQmxvYkRhdGEu
aCIKLSNpbmNsdWRlICJXZWJEYXRhLmgiCi0jaW5jbHVkZSAiV2ViRmlsZUluZm8uaCIKLSNpbmNs
dWRlICJXZWJTdHJpbmcuaCIKLQotI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgotbmFtZXNwYWNl
IFdlYkNvcmUgeyBjbGFzcyBCbG9iU3RvcmFnZURhdGE7IH0KLW5hbWVzcGFjZSBXVEYgeyB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgUGFzc1JlZlB0cjsgfQotI2VuZGlmCi0KLW5hbWVzcGFj
ZSBXZWJLaXQgewotCi1jbGFzcyBXZWJCbG9iU3RvcmFnZURhdGFQcml2YXRlOwotCi1jbGFzcyBX
ZWJCbG9iU3RvcmFnZURhdGEgewotcHVibGljOgotICAgIH5XZWJCbG9iU3RvcmFnZURhdGEoKSB7
IHJlc2V0KCk7IH0KLQotICAgIFdlYkJsb2JTdG9yYWdlRGF0YSgpIDogbV9wcml2YXRlKDApIHsg
fQotCi0gICAgV0VCS0lUX0FQSSB2b2lkIHJlc2V0KCk7Ci0KLSAgICBib29sIGlzTnVsbCgpIGNv
bnN0IHsgcmV0dXJuICFtX3ByaXZhdGU7IH0KLQotICAgIC8vIFJldHVybnMgdGhlIG51bWJlciBv
ZiBpdGVtcy4KLSAgICBXRUJLSVRfQVBJIHNpemVfdCBpdGVtQ291bnQoKSBjb25zdDsKLQotICAg
IC8vIFJldHJpZXZlcyB0aGUgdmFsdWVzIG9mIHRoZSBpdGVtIGF0IHRoZSBnaXZlbiBpbmRleC4g
UmV0dXJucyBmYWxzZSBpZgotICAgIC8vIGluZGV4IGlzIG91dCBvZiBib3VuZHMuCi0gICAgV0VC
S0lUX0FQSSBib29sIGl0ZW1BdChzaXplX3QgaW5kZXgsIFdlYkJsb2JEYXRhOjpJdGVtJiByZXN1
bHQpIGNvbnN0OwotCi0gICAgV0VCS0lUX0FQSSBXZWJTdHJpbmcgY29udGVudFR5cGUoKSBjb25z
dDsKLSAgICBXRUJLSVRfQVBJIFdlYlN0cmluZyBjb250ZW50RGlzcG9zaXRpb24oKSBjb25zdDsK
LQotI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgotICAgIFdlYkJsb2JTdG9yYWdlRGF0YShjb25z
dCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6QmxvYlN0b3JhZ2VEYXRhPiYpOwotICAgIFdlYkJs
b2JTdG9yYWdlRGF0YSYgb3BlcmF0b3I9KGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpC
bG9iU3RvcmFnZURhdGE+Jik7Ci0gICAgb3BlcmF0b3IgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6
OkJsb2JTdG9yYWdlRGF0YT4oKSBjb25zdDsKLSNlbmRpZgotCi1wcml2YXRlOgotI2lmIFdFQktJ
VF9JTVBMRU1FTlRBVElPTgotICAgIHZvaWQgYXNzaWduKGNvbnN0IFdURjo6UGFzc1JlZlB0cjxX
ZWJDb3JlOjpCbG9iU3RvcmFnZURhdGE+Jik7Ci0jZW5kaWYKLSAgICBXZWJCbG9iU3RvcmFnZURh
dGFQcml2YXRlKiBtX3ByaXZhdGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2Vu
ZGlmIC8vIFdlYkJsb2JTdG9yYWdlRGF0YV9oCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYkRlcGVuZGVudERhdGEuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRGVw
ZW5kZW50RGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY1MDNjZjkK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkRlcGVuZGVudERh
dGEuaApAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJEZXBlbmRlbnREYXRhX2gKKyNkZWZpbmUg
V2ViRGVwZW5kZW50RGF0YV9oCisKKyNpbmNsdWRlICJXZWJDb21tb24uaCIKKworI2lmICFXRUJL
SVRfSU1QTEVNRU5UQVRJT04KKyNpbmNsdWRlIDxzdHJpbmc+CisjZW5kaWYKKworbmFtZXNwYWNl
IFdlYktpdCB7CisKKy8vIFRoaXMgb25seSBhY3RzIGFzIGEgd3JhcHBlciBwb2ludGluZyB0byB0
aGUgb3JpZ2luYWwgZGF0YS4gV2Ugc2hvdWxkIGVuc3VyZQorLy8gdGhhdCB0aGUgb3JpZ2luYWwg
ZGF0YSByZW1haW5zIHZhbGlkIHdoZW4gdGhpcyB3cmFwcGVyIGlzIHVzZWQuCitjbGFzcyBXZWJE
ZXBlbmRlbnREYXRhIHsKK3B1YmxpYzoKKyAgICBXZWJEZXBlbmRlbnREYXRhKCkKKyAgICAgICAg
OiBtX2RhdGEoMCkKKyAgICAgICAgLCBtX2xlbmd0aCgwKQorICAgIHsKKyAgICB9CisKKyAgICB2
b2lkIHJlc2V0KCkKKyAgICB7CisgICAgICAgIG1fZGF0YSA9IDA7CisgICAgICAgIG1fbGVuZ3Ro
ID0gMDsKKyAgICB9CisKKyAgICB2b2lkIGFzc2lnbihjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qg
bGVuZ3RoKQorICAgIHsKKyAgICAgICAgbV9kYXRhID0gZGF0YTsKKyAgICAgICAgbV9sZW5ndGgg
PSBsZW5ndGg7CisgICAgfQorCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIW1f
bGVuZ3RoOyB9CisKKyNpZiAhV0VCS0lUX0lNUExFTUVOVEFUSU9OCisgICAgb3BlcmF0b3Igc3Rk
OjpzdHJpbmcoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbGVuZ3RoID8gc3RkOjpz
dHJpbmcobV9kYXRhLCBtX2xlbmd0aCkgOiBzdGQ6OnN0cmluZygpOworICAgIH0KKyNlbmRpZgor
Citwcml2YXRlOgorICAgIGNvbnN0IGNoYXIqIG1fZGF0YTsKKyAgICBzaXplX3QgbV9sZW5ndGg7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYkRlcGVuZGVudERh
dGFfaApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJCbG9iRGF0YS5jcHAgYi9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkJsb2JEYXRhLmNwcAppbmRleCA0Y2QxZDY3Li4wYjZkNDNi
IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkJsb2JEYXRhLmNwcAorKysgYi9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkJsb2JEYXRhLmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2lu
Y2x1ZGUgIldlYkJsb2JEYXRhLmgiCiAKICNpbmNsdWRlICJCbG9iRGF0YS5oIgorI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC03NCw3
ICs3NSw3IEBAIGJvb2wgV2ViQmxvYkRhdGE6Oml0ZW1BdChzaXplX3QgaW5kZXgsIEl0ZW0mIHJl
c3VsdCkgY29uc3QKICAgICBzd2l0Y2ggKGl0ZW0udHlwZSkgewogICAgIGNhc2UgQmxvYkRhdGFJ
dGVtOjpEYXRhOgogICAgICAgICByZXN1bHQudHlwZSA9IEl0ZW06OlR5cGVEYXRhOwotICAgICAg
ICByZXN1bHQuZGF0YSA9IGl0ZW0uZGF0YTsKKyAgICAgICAgcmVzdWx0LmRhdGEuYXNzaWduKGl0
ZW0uZGF0YS0+ZGF0YSgpLCBpdGVtLmRhdGEtPmxlbmd0aCgpKTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgY2FzZSBCbG9iRGF0YUl0ZW06OkZpbGU6CiAgICAgICAgIHJlc3VsdC50eXBlID0g
SXRlbTo6VHlwZUZpbGU7CkBAIC04OSw1NCArOTAsMTggQEAgYm9vbCBXZWJCbG9iRGF0YTo6aXRl
bUF0KHNpemVfdCBpbmRleCwgSXRlbSYgcmVzdWx0KSBjb25zdAogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotdm9pZCBXZWJCbG9iRGF0YTo6YXBwZW5kRGF0YShjb25zdCBXZWJDU3RyaW5nJiBkYXRh
KQotewotICAgIEFTU0VSVCghaXNOdWxsKCkpOwotICAgIG1fcHJpdmF0ZS0+YXBwZW5kRGF0YShk
YXRhKTsKLX0KLQotdm9pZCBXZWJCbG9iRGF0YTo6YXBwZW5kRmlsZShjb25zdCBXZWJTdHJpbmcm
IGZpbGVQYXRoKQotewotICAgIEFTU0VSVCghaXNOdWxsKCkpOwotICAgIG1fcHJpdmF0ZS0+YXBw
ZW5kRmlsZShmaWxlUGF0aCk7Ci19Ci0KLXZvaWQgV2ViQmxvYkRhdGE6OmFwcGVuZEZpbGUoY29u
c3QgV2ViU3RyaW5nJiBmaWxlUGF0aCwgbG9uZyBsb25nIG9mZnNldCwgbG9uZyBsb25nIGxlbmd0
aCwgZG91YmxlIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSkKLXsKLSAgICBBU1NFUlQoIWlzTnVs
bCgpKTsKLSAgICBtX3ByaXZhdGUtPmFwcGVuZEZpbGUoZmlsZVBhdGgsIG9mZnNldCwgbGVuZ3Ro
LCBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUpOwotfQotCi12b2lkIFdlYkJsb2JEYXRhOjphcHBl
bmRCbG9iKGNvbnN0IFdlYlVSTCYgYmxvYlVSTCwgbG9uZyBsb25nIG9mZnNldCwgbG9uZyBsb25n
IGxlbmd0aCkKLXsKLSAgICBBU1NFUlQoIWlzTnVsbCgpKTsKLSAgICBtX3ByaXZhdGUtPmFwcGVu
ZEJsb2IoYmxvYlVSTCwgb2Zmc2V0LCBsZW5ndGgpOwotfQotCiBXZWJTdHJpbmcgV2ViQmxvYkRh
dGE6OmNvbnRlbnRUeXBlKCkgY29uc3QKIHsKICAgICBBU1NFUlQoIWlzTnVsbCgpKTsKICAgICBy
ZXR1cm4gbV9wcml2YXRlLT5jb250ZW50VHlwZSgpOwogfQogCi12b2lkIFdlYkJsb2JEYXRhOjpz
ZXRDb250ZW50VHlwZShjb25zdCBXZWJTdHJpbmcmIGNvbnRlbnRUeXBlKQotewotICAgIEFTU0VS
VCghaXNOdWxsKCkpOwotICAgIG1fcHJpdmF0ZS0+c2V0Q29udGVudFR5cGUoY29udGVudFR5cGUp
OwotfQotCiBXZWJTdHJpbmcgV2ViQmxvYkRhdGE6OmNvbnRlbnREaXNwb3NpdGlvbigpIGNvbnN0
CiB7CiAgICAgQVNTRVJUKCFpc051bGwoKSk7CiAgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Y29udGVu
dERpc3Bvc2l0aW9uKCk7CiB9CiAKLXZvaWQgV2ViQmxvYkRhdGE6OnNldENvbnRlbnREaXNwb3Np
dGlvbihjb25zdCBXZWJTdHJpbmcmIGNvbnRlbnREaXNwb3NpdGlvbikKLXsKLSAgICBBU1NFUlQo
IWlzTnVsbCgpKTsKLSAgICBtX3ByaXZhdGUtPnNldENvbnRlbnREaXNwb3NpdGlvbihjb250ZW50
RGlzcG9zaXRpb24pOwotfQotCiBXZWJCbG9iRGF0YTo6V2ViQmxvYkRhdGEoY29uc3QgUGFzc093
blB0cjxCbG9iRGF0YT4mIGRhdGEpCiAgICAgOiBtX3ByaXZhdGUoMCkKIHsKZGlmZiAtLWdpdCBh
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQmxvYlN0b3JhZ2VEYXRhLmNwcCBiL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViQmxvYlN0b3JhZ2VEYXRhLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMzhhMjVmZS4uMDAwMDAwMAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkJsb2JT
dG9yYWdlRGF0YS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMTMgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmli
dXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJXZWJCbG9iU3RvcmFnZURhdGEuaCIKLQotI2luY2x1ZGUgIkJs
b2JTdG9yYWdlRGF0YS5oIgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNl
IFdlYktpdCB7Ci0KLWNsYXNzIFdlYkJsb2JTdG9yYWdlRGF0YVByaXZhdGUgOiBwdWJsaWMgQmxv
YlN0b3JhZ2VEYXRhIHsKLX07Ci0KLXZvaWQgV2ViQmxvYlN0b3JhZ2VEYXRhOjpyZXNldCgpCi17
Ci0gICAgYXNzaWduKDApOwotfQotCi1zaXplX3QgV2ViQmxvYlN0b3JhZ2VEYXRhOjppdGVtQ291
bnQoKSBjb25zdAotewotICAgIEFTU0VSVCghaXNOdWxsKCkpOwotICAgIHJldHVybiBtX3ByaXZh
dGUtPml0ZW1zKCkuc2l6ZSgpOwotfQotCi1ib29sIFdlYkJsb2JTdG9yYWdlRGF0YTo6aXRlbUF0
KHNpemVfdCBpbmRleCwgV2ViQmxvYkRhdGE6Okl0ZW0mIHJlc3VsdCkgY29uc3QKLXsKLSAgICBB
U1NFUlQoIWlzTnVsbCgpKTsKLQotICAgIGlmIChpbmRleCA+PSBtX3ByaXZhdGUtPml0ZW1zKCku
c2l6ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjb25zdCBCbG9iRGF0YUl0ZW0m
IGl0ZW0gPSBtX3ByaXZhdGUtPml0ZW1zKClbaW5kZXhdOwotICAgIHJlc3VsdC5vZmZzZXQgPSBp
dGVtLm9mZnNldDsKLSAgICByZXN1bHQubGVuZ3RoID0gaXRlbS5sZW5ndGg7Ci0gICAgcmVzdWx0
LmV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSA9IGl0ZW0uZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1l
OwotICAgIGlmIChpdGVtLnR5cGUgPT0gQmxvYkRhdGFJdGVtOjpEYXRhKSB7Ci0gICAgICAgIHJl
c3VsdC50eXBlID0gV2ViQmxvYkRhdGE6Okl0ZW06OlR5cGVEYXRhOwotICAgICAgICByZXN1bHQu
ZGF0YS5hc3NpZ24oaXRlbS5kYXRhLmRhdGEoKSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihpdGVtLmRh
dGEubGVuZ3RoKCkpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgQVNTRVJUKGl0ZW0udHlwZSA9PSBCbG9iRGF0YUl0ZW06OkZpbGUpOwotICAgICAgICByZXN1
bHQudHlwZSA9IFdlYkJsb2JEYXRhOjpJdGVtOjpUeXBlRmlsZTsKLSAgICAgICAgcmVzdWx0LmZp
bGVQYXRoID0gaXRlbS5wYXRoOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci19Ci0KLVdl
YlN0cmluZyBXZWJCbG9iU3RvcmFnZURhdGE6OmNvbnRlbnRUeXBlKCkgY29uc3QKLXsKLSAgICBB
U1NFUlQoIWlzTnVsbCgpKTsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5jb250ZW50VHlwZSgpOwot
fQotCi1XZWJTdHJpbmcgV2ViQmxvYlN0b3JhZ2VEYXRhOjpjb250ZW50RGlzcG9zaXRpb24oKSBj
b25zdAotewotICAgIEFTU0VSVCghaXNOdWxsKCkpOwotICAgIHJldHVybiBtX3ByaXZhdGUtPmNv
bnRlbnREaXNwb3NpdGlvbigpOwotfQotCi1XZWJCbG9iU3RvcmFnZURhdGE6OldlYkJsb2JTdG9y
YWdlRGF0YShjb25zdCBQYXNzUmVmUHRyPEJsb2JTdG9yYWdlRGF0YT4mIGRhdGEpCi0gICAgOiBt
X3ByaXZhdGUoMCkKLXsKLSAgICBhc3NpZ24oZGF0YSk7Ci19Ci0KLVdlYkJsb2JTdG9yYWdlRGF0
YSYgV2ViQmxvYlN0b3JhZ2VEYXRhOjpvcGVyYXRvcj0oY29uc3QgUGFzc1JlZlB0cjxCbG9iU3Rv
cmFnZURhdGE+JiBkYXRhKQotewotICAgIGFzc2lnbihkYXRhKTsKLSAgICByZXR1cm4gKnRoaXM7
Ci19Ci0KLVdlYkJsb2JTdG9yYWdlRGF0YTo6b3BlcmF0b3IgUGFzc1JlZlB0cjxCbG9iU3RvcmFn
ZURhdGE+KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlOwotfQotCi12b2lkIFdlYkJs
b2JTdG9yYWdlRGF0YTo6YXNzaWduKGNvbnN0IFBhc3NSZWZQdHI8QmxvYlN0b3JhZ2VEYXRhPiYg
ZGF0YSkKLXsKLSAgICBpZiAobV9wcml2YXRlKQotICAgICAgICBtX3ByaXZhdGUtPmRlcmVmKCk7
Ci0gICAgbV9wcml2YXRlID0gc3RhdGljX2Nhc3Q8V2ViQmxvYlN0b3JhZ2VEYXRhUHJpdmF0ZSo+
KGRhdGEubGVha1JlZigpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>
<flag name="review"
          id="60300"
          type_id="1"
          status="-"
          setter="fishd"
    />
    <flag name="commit-queue"
          id="60301"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70544</attachid>
            <date>2010-10-12 11:15:32 -0700</date>
            <delta_ts>2010-10-12 12:55:16 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>47423_4</filename>
            <type>text/plain</type>
            <size>19676</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IGEzOTI3YjUuLmE5ZGY3N2MgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDIzIEBACisyMDEwLTEwLTEyICBKaWFuIExpICA8amlhbmxpQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIFVw
ZGF0ZSBXZWJCbG9iRGF0YSB0byBhZGFwdCB0byBCbG9iRGF0YSBjaGFuZ2UgaW4gdGVybXMgb2YK
KyAgICAgICAgaGFuZGxpbmcgc3RyaW5nIGRhdGEgaXRlbS4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3NDIzCisKKyAgICAgICAgQWxzbyByZW1vdmUg
dW5uZWVkZWQgbWV0aG9kcyBpbiBXZWJCbG9iRGF0YS4gV2ViQmxvYlN0b3JhZ2VEYXRhLiogYXJl
CisgICAgICAgIGFsc28gcmVtb3ZlZCBzaW5jZSB0aGV5J3JlIG5vdCBsb25nZXIgbmVlZGVkLgor
CisgICAgICAgICogV2ViS2l0Lmd5cDoKKyAgICAgICAgKiBwdWJsaWMvV2ViQmxvYkRhdGEuaDoK
KyAgICAgICAgKiBwdWJsaWMvV2ViQmxvYlJlZ2lzdHJ5Lmg6CisgICAgICAgICogcHVibGljL1dl
YkJsb2JTdG9yYWdlRGF0YS5oOiBSZW1vdmVkLgorICAgICAgICAqIHB1YmxpYy9XZWJUaHJlYWRT
YWZlRGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvV2ViQmxvYkRhdGEuY3BwOgorICAgICAg
ICAqIHNyYy9XZWJCbG9iU3RvcmFnZURhdGEuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9X
ZWJUaHJlYWRTYWZlRGF0YS5jcHA6IEFkZGVkLgorCiAyMDEwLTEwLTA3ICBTdGVwaGVuIFdoaXRl
ICA8c2Vub3JibGFuY29AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEphbWVz
IFJvYmluc29uLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAgYi9XZWJL
aXQvY2hyb21pdW0vV2ViS2l0Lmd5cAppbmRleCBlMTNiODNiLi43NDg2ODgxIDEwMDY0NAotLS0g
YS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAorKysgYi9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cApAQCAtMTEyLDcgKzExMiw2IEBACiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJCaW5k
aW5ncy5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkJsb2JEYXRhLmgnLAogICAgICAg
ICAgICAgICAgICdwdWJsaWMvV2ViQmxvYlJlZ2lzdHJ5LmgnLAotICAgICAgICAgICAgICAgICdw
dWJsaWMvV2ViQmxvYlN0b3JhZ2VEYXRhLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2Vi
Q2FjaGUuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJDYW52YXMuaCcsCiAgICAgICAg
ICAgICAgICAgJ3B1YmxpYy9XZWJDbGlwYm9hcmQuaCcsCkBAIC0yNjUsNiArMjY0LDcgQEAKICAg
ICAgICAgICAgICAgICAncHVibGljL1dlYlRleHREaXJlY3Rpb24uaCcsCiAgICAgICAgICAgICAg
ICAgJ3B1YmxpYy9XZWJUZXh0SW5wdXRUeXBlLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMv
V2ViVGV4dFJ1bi5oJywKKyAgICAgICAgICAgICAgICAncHVibGljL1dlYlRocmVhZFNhZmVEYXRh
LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViVVJMLmgnLAogICAgICAgICAgICAgICAg
ICdwdWJsaWMvV2ViVVJMRXJyb3IuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJVUkxM
b2FkZXIuaCcsCkBAIC0zOTAsNyArMzkwLDYgQEAKICAgICAgICAgICAgICAgICAnc3JjL1dlYkF0
dHJpYnV0ZS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViQmluZGluZ3MuY3BwJywKICAg
ICAgICAgICAgICAgICAnc3JjL1dlYkJsb2JEYXRhLmNwcCcsCi0gICAgICAgICAgICAgICAgJ3Ny
Yy9XZWJCbG9iU3RvcmFnZURhdGEuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkNhY2hl
LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJDb2xvci5jcHAnLAogICAgICAgICAgICAg
ICAgICdzcmMvV2ViQ29tbW9uLmNwcCcsCkBAIC01MjMsNiArNTIyLDcgQEAKICAgICAgICAgICAg
ICAgICAnc3JjL1dlYlN0b3JhZ2VOYW1lc3BhY2VJbXBsLmgnLAogICAgICAgICAgICAgICAgICdz
cmMvV2ViU3RyaW5nLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJUZXh0UnVuLmNwcCcs
CisgICAgICAgICAgICAgICAgJ3NyYy9XZWJUaHJlYWRTYWZlRGF0YS5jcHAnLAogICAgICAgICAg
ICAgICAgICdzcmMvV2ViVVJMLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJVUkxMb2Fk
VGltaW5nLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJVUkxSZXF1ZXN0LmNwcCcsCmRp
ZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkJsb2JEYXRhLmggYi9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYkJsb2JEYXRhLmgKaW5kZXggOGMwZTFhYS4uNjdiNmNkNiAxMDA2
NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJCbG9iRGF0YS5oCisrKyBiL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViQmxvYkRhdGEuaApAQCAtMzEsNyArMzEsNyBAQAogI2lmbmRl
ZiBXZWJCbG9iRGF0YV9oCiAjZGVmaW5lIFdlYkJsb2JEYXRhX2gKIAotI2luY2x1ZGUgIldlYkNT
dHJpbmcuaCIKKyNpbmNsdWRlICJXZWJUaHJlYWRTYWZlRGF0YS5oIgogI2luY2x1ZGUgIldlYlN0
cmluZy5oIgogI2luY2x1ZGUgIldlYlVSTC5oIgogCkBAIC00OCw3ICs0OCw3IEBAIGNsYXNzIFdl
YkJsb2JEYXRhIHsKIHB1YmxpYzoKICAgICBzdHJ1Y3QgSXRlbSB7CiAgICAgICAgIGVudW0geyBU
eXBlRGF0YSwgVHlwZUZpbGUsIFR5cGVCbG9iIH0gdHlwZTsKLSAgICAgICAgV2ViQ1N0cmluZyBk
YXRhOworICAgICAgICBXZWJUaHJlYWRTYWZlRGF0YSBkYXRhOwogICAgICAgICBXZWJTdHJpbmcg
ZmlsZVBhdGg7CiAgICAgICAgIFdlYlVSTCBibG9iVVJMOwogICAgICAgICBsb25nIGxvbmcgb2Zm
c2V0OwpAQCAtNzIsMTcgKzcyLDkgQEAgcHVibGljOgogICAgIC8vIGluZGV4IGlzIG91dCBvZiBi
b3VuZHMuCiAgICAgV0VCS0lUX0FQSSBib29sIGl0ZW1BdChzaXplX3QgaW5kZXgsIEl0ZW0mIHJl
c3VsdCkgY29uc3Q7CiAKLSAgICAvLyBBcHBlbmRzIHRvIHRoZSBsaXN0IG9mIGl0ZW1zLgotICAg
IFdFQktJVF9BUEkgdm9pZCBhcHBlbmREYXRhKGNvbnN0IFdlYkNTdHJpbmcmKTsKLSAgICBXRUJL
SVRfQVBJIHZvaWQgYXBwZW5kRmlsZShjb25zdCBXZWJTdHJpbmcmIGZpbGVQYXRoKTsKLSAgICBX
RUJLSVRfQVBJIHZvaWQgYXBwZW5kRmlsZShjb25zdCBXZWJTdHJpbmcmIGZpbGVQYXRoLCBsb25n
IGxvbmcgb2Zmc2V0LCBsb25nIGxvbmcgbGVuZ3RoLCBkb3VibGUgZXhwZWN0ZWRNb2RpZmljYXRp
b25UaW1lKTsKLSAgICBXRUJLSVRfQVBJIHZvaWQgYXBwZW5kQmxvYihjb25zdCBXZWJVUkwmIGJs
b2JVUkwsIGxvbmcgbG9uZyBvZmZzZXQsIGxvbmcgbG9uZyBsZW5ndGgpOwotCiAgICAgV0VCS0lU
X0FQSSBXZWJTdHJpbmcgY29udGVudFR5cGUoKSBjb25zdDsKLSAgICBXRUJLSVRfQVBJIHZvaWQg
c2V0Q29udGVudFR5cGUoY29uc3QgV2ViU3RyaW5nJik7CiAKICAgICBXRUJLSVRfQVBJIFdlYlN0
cmluZyBjb250ZW50RGlzcG9zaXRpb24oKSBjb25zdDsKLSAgICBXRUJLSVRfQVBJIHZvaWQgc2V0
Q29udGVudERpc3Bvc2l0aW9uKGNvbnN0IFdlYlN0cmluZyYpOwogCiAjaWYgV0VCS0lUX0lNUExF
TUVOVEFUSU9OCiAgICAgV2ViQmxvYkRhdGEoY29uc3QgV1RGOjpQYXNzT3duUHRyPFdlYkNvcmU6
OkJsb2JEYXRhPiYpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJCbG9i
UmVnaXN0cnkuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQmxvYlJlZ2lzdHJ5LmgKaW5k
ZXggY2JkOWE5OS4uMzA4ZDcyZSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJCbG9iUmVnaXN0cnkuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkJsb2JSZWdp
c3RyeS5oCkBAIC0zMSw4ICszMSw2IEBACiAjaWZuZGVmIFdlYkJsb2JSZWdpc3RyeV9oCiAjZGVm
aW5lIFdlYkJsb2JSZWdpc3RyeV9oCiAKLSNpbmNsdWRlICJXZWJCbG9iU3RvcmFnZURhdGEuaCIK
LQogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYkJsb2JEYXRhOwpkaWZmIC0tZ2l0IGEv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJCbG9iU3RvcmFnZURhdGEuaCBiL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViQmxvYlN0b3JhZ2VEYXRhLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGE5YzBjOGIuLjAwMDAwMDAKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJC
bG9iU3RvcmFnZURhdGEuaAorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJp
YnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFdl
YkJsb2JTdG9yYWdlRGF0YV9oCi0jZGVmaW5lIFdlYkJsb2JTdG9yYWdlRGF0YV9oCi0KLSNpbmNs
dWRlICJXZWJCbG9iRGF0YS5oIgotI2luY2x1ZGUgIldlYkRhdGEuaCIKLSNpbmNsdWRlICJXZWJG
aWxlSW5mby5oIgotI2luY2x1ZGUgIldlYlN0cmluZy5oIgotCi0jaWYgV0VCS0lUX0lNUExFTUVO
VEFUSU9OCi1uYW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIEJsb2JTdG9yYWdlRGF0YTsgfQotbmFt
ZXNwYWNlIFdURiB7IHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBQYXNzUmVmUHRyOyB9Ci0j
ZW5kaWYKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYkJsb2JTdG9yYWdlRGF0YVBy
aXZhdGU7Ci0KLWNsYXNzIFdlYkJsb2JTdG9yYWdlRGF0YSB7Ci1wdWJsaWM6Ci0gICAgfldlYkJs
b2JTdG9yYWdlRGF0YSgpIHsgcmVzZXQoKTsgfQotCi0gICAgV2ViQmxvYlN0b3JhZ2VEYXRhKCkg
OiBtX3ByaXZhdGUoMCkgeyB9Ci0KLSAgICBXRUJLSVRfQVBJIHZvaWQgcmVzZXQoKTsKLQotICAg
IGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gIW1fcHJpdmF0ZTsgfQotCi0gICAgLy8gUmV0
dXJucyB0aGUgbnVtYmVyIG9mIGl0ZW1zLgotICAgIFdFQktJVF9BUEkgc2l6ZV90IGl0ZW1Db3Vu
dCgpIGNvbnN0OwotCi0gICAgLy8gUmV0cmlldmVzIHRoZSB2YWx1ZXMgb2YgdGhlIGl0ZW0gYXQg
dGhlIGdpdmVuIGluZGV4LiBSZXR1cm5zIGZhbHNlIGlmCi0gICAgLy8gaW5kZXggaXMgb3V0IG9m
IGJvdW5kcy4KLSAgICBXRUJLSVRfQVBJIGJvb2wgaXRlbUF0KHNpemVfdCBpbmRleCwgV2ViQmxv
YkRhdGE6Okl0ZW0mIHJlc3VsdCkgY29uc3Q7Ci0KLSAgICBXRUJLSVRfQVBJIFdlYlN0cmluZyBj
b250ZW50VHlwZSgpIGNvbnN0OwotICAgIFdFQktJVF9BUEkgV2ViU3RyaW5nIGNvbnRlbnREaXNw
b3NpdGlvbigpIGNvbnN0OwotCi0jaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCi0gICAgV2ViQmxv
YlN0b3JhZ2VEYXRhKGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpCbG9iU3RvcmFnZURh
dGE+Jik7Ci0gICAgV2ViQmxvYlN0b3JhZ2VEYXRhJiBvcGVyYXRvcj0oY29uc3QgV1RGOjpQYXNz
UmVmUHRyPFdlYkNvcmU6OkJsb2JTdG9yYWdlRGF0YT4mKTsKLSAgICBvcGVyYXRvciBXVEY6OlBh
c3NSZWZQdHI8V2ViQ29yZTo6QmxvYlN0b3JhZ2VEYXRhPigpIGNvbnN0OwotI2VuZGlmCi0KLXBy
aXZhdGU6Ci0jaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCi0gICAgdm9pZCBhc3NpZ24oY29uc3Qg
V1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkJsb2JTdG9yYWdlRGF0YT4mKTsKLSNlbmRpZgotICAg
IFdlYkJsb2JTdG9yYWdlRGF0YVByaXZhdGUqIG1fcHJpdmF0ZTsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYktpdAotCi0jZW5kaWYgLy8gV2ViQmxvYlN0b3JhZ2VEYXRhX2gKZGlmZiAtLWdpdCBh
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVGhyZWFkU2FmZURhdGEuaCBiL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViVGhyZWFkU2FmZURhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRl
eCAwMDAwMDAwLi4xOWU1OGFlCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJUaHJlYWRTYWZlRGF0YS5oCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlRocmVh
ZFNhZmVEYXRhX2gKKyNkZWZpbmUgV2ViVGhyZWFkU2FmZURhdGFfaAorCisjaW5jbHVkZSAiV2Vi
Q29tbW9uLmgiCisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KK25hbWVzcGFjZSBXZWJDb3Jl
IHsgY2xhc3MgUmF3RGF0YTsgfQorbmFtZXNwYWNlIFdURiB7IHRlbXBsYXRlIDx0eXBlbmFtZSBU
PiBjbGFzcyBQYXNzUmVmUHRyOyB9CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2Ns
YXNzIFdlYlRocmVhZFNhZmVEYXRhUHJpdmF0ZTsKKworLy8gQSBjb250YWluZXIgZm9yIHJhdyBi
eXRlcy4gIEl0IGlzIGluZXhwZW5zaXZlIHRvIGNvcHkgYSBXZWJUaHJlYWRTYWZlRGF0YSBvYmpl
Y3QuCisvLyBJdCBpcyBzYWZlIHRvIHBhc3MgYSBXZWJUaHJlYWRTYWZlRGF0YSBhY3Jvc3MgdGhy
ZWFkcyEhIQorLy8KK2NsYXNzIFdlYlRocmVhZFNhZmVEYXRhIHsKK3B1YmxpYzoKKyAgICB+V2Vi
VGhyZWFkU2FmZURhdGEoKSB7IHJlc2V0KCk7IH0KKworICAgIFdlYlRocmVhZFNhZmVEYXRhKCkg
OiBtX3ByaXZhdGUoMCkgeyB9CisKKyAgICBXZWJUaHJlYWRTYWZlRGF0YShjb25zdCBXZWJUaHJl
YWRTYWZlRGF0YSYgZCkgOiBtX3ByaXZhdGUoMCkgeyBhc3NpZ24oZCk7IH0KKworICAgIFdlYlRo
cmVhZFNhZmVEYXRhJiBvcGVyYXRvcj0oY29uc3QgV2ViVGhyZWFkU2FmZURhdGEmIGQpCisgICAg
eworICAgICAgICBhc3NpZ24oZCk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAg
ICBXRUJLSVRfQVBJIHZvaWQgcmVzZXQoKTsKKyAgICBXRUJLSVRfQVBJIHZvaWQgYXNzaWduKGNv
bnN0IFdlYlRocmVhZFNhZmVEYXRhJik7CisKKyAgICBXRUJLSVRfQVBJIHNpemVfdCBzaXplKCkg
Y29uc3Q7CisgICAgV0VCS0lUX0FQSSBjb25zdCBjaGFyKiBkYXRhKCkgY29uc3Q7CisKKyAgICBi
b29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhc2l6ZSgpOyB9CisKKyNpZiBXRUJLSVRfSU1Q
TEVNRU5UQVRJT04KKyAgICBXZWJUaHJlYWRTYWZlRGF0YShjb25zdCBXVEY6OlBhc3NSZWZQdHI8
V2ViQ29yZTo6UmF3RGF0YT4mKTsKKyAgICBXZWJUaHJlYWRTYWZlRGF0YSYgb3BlcmF0b3I9KGNv
bnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpSYXdEYXRhPiYpOworICAgIG9wZXJhdG9yIFdU
Rjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpSYXdEYXRhPigpIGNvbnN0OworI2Vsc2UKKyAgICBvcGVy
YXRvciBzdGQ6OnN0cmluZygpIGNvbnN0CisgICAgeworICAgICAgICBzaXplX3QgbGVuID0gc2l6
ZSgpOworICAgICAgICByZXR1cm4gbGVuID8gc3RkOjpzdHJpbmcoZGF0YSgpLCBsZW4pIDogc3Rk
OjpzdHJpbmcoKTsKKyAgICB9CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICB2b2lkIGFzc2lnbihX
ZWJUaHJlYWRTYWZlRGF0YVByaXZhdGUqKTsKKyAgICBXZWJUaHJlYWRTYWZlRGF0YVByaXZhdGUq
IG1fcHJpdmF0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQmxvYkRhdGEuY3BwIGIvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJCbG9iRGF0YS5jcHAKaW5kZXggNGNkMWQ2Ny4uNDIwMThkZCAxMDA2NDQKLS0t
IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJCbG9iRGF0YS5jcHAKKysrIGIvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJCbG9iRGF0YS5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJXZWJC
bG9iRGF0YS5oIgogCiAjaW5jbHVkZSAiQmxvYkRhdGEuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtODksNTQgKzkwLDE4IEBA
IGJvb2wgV2ViQmxvYkRhdGE6Oml0ZW1BdChzaXplX3QgaW5kZXgsIEl0ZW0mIHJlc3VsdCkgY29u
c3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgV2ViQmxvYkRhdGE6OmFwcGVuZERhdGEo
Y29uc3QgV2ViQ1N0cmluZyYgZGF0YSkKLXsKLSAgICBBU1NFUlQoIWlzTnVsbCgpKTsKLSAgICBt
X3ByaXZhdGUtPmFwcGVuZERhdGEoZGF0YSk7Ci19Ci0KLXZvaWQgV2ViQmxvYkRhdGE6OmFwcGVu
ZEZpbGUoY29uc3QgV2ViU3RyaW5nJiBmaWxlUGF0aCkKLXsKLSAgICBBU1NFUlQoIWlzTnVsbCgp
KTsKLSAgICBtX3ByaXZhdGUtPmFwcGVuZEZpbGUoZmlsZVBhdGgpOwotfQotCi12b2lkIFdlYkJs
b2JEYXRhOjphcHBlbmRGaWxlKGNvbnN0IFdlYlN0cmluZyYgZmlsZVBhdGgsIGxvbmcgbG9uZyBv
ZmZzZXQsIGxvbmcgbG9uZyBsZW5ndGgsIGRvdWJsZSBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUp
Ci17Ci0gICAgQVNTRVJUKCFpc051bGwoKSk7Ci0gICAgbV9wcml2YXRlLT5hcHBlbmRGaWxlKGZp
bGVQYXRoLCBvZmZzZXQsIGxlbmd0aCwgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lKTsKLX0KLQot
dm9pZCBXZWJCbG9iRGF0YTo6YXBwZW5kQmxvYihjb25zdCBXZWJVUkwmIGJsb2JVUkwsIGxvbmcg
bG9uZyBvZmZzZXQsIGxvbmcgbG9uZyBsZW5ndGgpCi17Ci0gICAgQVNTRVJUKCFpc051bGwoKSk7
Ci0gICAgbV9wcml2YXRlLT5hcHBlbmRCbG9iKGJsb2JVUkwsIG9mZnNldCwgbGVuZ3RoKTsKLX0K
LQogV2ViU3RyaW5nIFdlYkJsb2JEYXRhOjpjb250ZW50VHlwZSgpIGNvbnN0CiB7CiAgICAgQVNT
RVJUKCFpc051bGwoKSk7CiAgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Y29udGVudFR5cGUoKTsKIH0K
IAotdm9pZCBXZWJCbG9iRGF0YTo6c2V0Q29udGVudFR5cGUoY29uc3QgV2ViU3RyaW5nJiBjb250
ZW50VHlwZSkKLXsKLSAgICBBU1NFUlQoIWlzTnVsbCgpKTsKLSAgICBtX3ByaXZhdGUtPnNldENv
bnRlbnRUeXBlKGNvbnRlbnRUeXBlKTsKLX0KLQogV2ViU3RyaW5nIFdlYkJsb2JEYXRhOjpjb250
ZW50RGlzcG9zaXRpb24oKSBjb25zdAogewogICAgIEFTU0VSVCghaXNOdWxsKCkpOwogICAgIHJl
dHVybiBtX3ByaXZhdGUtPmNvbnRlbnREaXNwb3NpdGlvbigpOwogfQogCi12b2lkIFdlYkJsb2JE
YXRhOjpzZXRDb250ZW50RGlzcG9zaXRpb24oY29uc3QgV2ViU3RyaW5nJiBjb250ZW50RGlzcG9z
aXRpb24pCi17Ci0gICAgQVNTRVJUKCFpc051bGwoKSk7Ci0gICAgbV9wcml2YXRlLT5zZXRDb250
ZW50RGlzcG9zaXRpb24oY29udGVudERpc3Bvc2l0aW9uKTsKLX0KLQogV2ViQmxvYkRhdGE6Oldl
YkJsb2JEYXRhKGNvbnN0IFBhc3NPd25QdHI8QmxvYkRhdGE+JiBkYXRhKQogICAgIDogbV9wcml2
YXRlKDApCiB7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkJsb2JTdG9yYWdl
RGF0YS5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkJsb2JTdG9yYWdlRGF0YS5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4YTI1ZmUuLjAwMDAwMDAKLS0tIGEvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJCbG9iU3RvcmFnZURhdGEuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
MTEzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1l
dDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViQmxvYlN0b3JhZ2VE
YXRhLmgiCi0KLSNpbmNsdWRlICJCbG9iU3RvcmFnZURhdGEuaCIKLQotdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJCbG9iU3RvcmFnZURh
dGFQcml2YXRlIDogcHVibGljIEJsb2JTdG9yYWdlRGF0YSB7Ci19OwotCi12b2lkIFdlYkJsb2JT
dG9yYWdlRGF0YTo6cmVzZXQoKQotewotICAgIGFzc2lnbigwKTsKLX0KLQotc2l6ZV90IFdlYkJs
b2JTdG9yYWdlRGF0YTo6aXRlbUNvdW50KCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIWlzTnVsbCgp
KTsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5pdGVtcygpLnNpemUoKTsKLX0KLQotYm9vbCBXZWJC
bG9iU3RvcmFnZURhdGE6Oml0ZW1BdChzaXplX3QgaW5kZXgsIFdlYkJsb2JEYXRhOjpJdGVtJiBy
ZXN1bHQpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFpc051bGwoKSk7Ci0KLSAgICBpZiAoaW5kZXgg
Pj0gbV9wcml2YXRlLT5pdGVtcygpLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgY29uc3QgQmxvYkRhdGFJdGVtJiBpdGVtID0gbV9wcml2YXRlLT5pdGVtcygpW2luZGV4XTsK
LSAgICByZXN1bHQub2Zmc2V0ID0gaXRlbS5vZmZzZXQ7Ci0gICAgcmVzdWx0Lmxlbmd0aCA9IGl0
ZW0ubGVuZ3RoOwotICAgIHJlc3VsdC5leHBlY3RlZE1vZGlmaWNhdGlvblRpbWUgPSBpdGVtLmV4
cGVjdGVkTW9kaWZpY2F0aW9uVGltZTsKLSAgICBpZiAoaXRlbS50eXBlID09IEJsb2JEYXRhSXRl
bTo6RGF0YSkgewotICAgICAgICByZXN1bHQudHlwZSA9IFdlYkJsb2JEYXRhOjpJdGVtOjpUeXBl
RGF0YTsKLSAgICAgICAgcmVzdWx0LmRhdGEuYXNzaWduKGl0ZW0uZGF0YS5kYXRhKCksIHN0YXRp
Y19jYXN0PHNpemVfdD4oaXRlbS5kYXRhLmxlbmd0aCgpKSk7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVChpdGVtLnR5cGUgPT0gQmxvYkRhdGFJdGVt
OjpGaWxlKTsKLSAgICAgICAgcmVzdWx0LnR5cGUgPSBXZWJCbG9iRGF0YTo6SXRlbTo6VHlwZUZp
bGU7Ci0gICAgICAgIHJlc3VsdC5maWxlUGF0aCA9IGl0ZW0ucGF0aDsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotfQotCi1XZWJTdHJpbmcgV2ViQmxvYlN0b3JhZ2VEYXRhOjpjb250ZW50
VHlwZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFpc051bGwoKSk7Ci0gICAgcmV0dXJuIG1fcHJp
dmF0ZS0+Y29udGVudFR5cGUoKTsKLX0KLQotV2ViU3RyaW5nIFdlYkJsb2JTdG9yYWdlRGF0YTo6
Y29udGVudERpc3Bvc2l0aW9uKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIWlzTnVsbCgpKTsKLSAg
ICByZXR1cm4gbV9wcml2YXRlLT5jb250ZW50RGlzcG9zaXRpb24oKTsKLX0KLQotV2ViQmxvYlN0
b3JhZ2VEYXRhOjpXZWJCbG9iU3RvcmFnZURhdGEoY29uc3QgUGFzc1JlZlB0cjxCbG9iU3RvcmFn
ZURhdGE+JiBkYXRhKQotICAgIDogbV9wcml2YXRlKDApCi17Ci0gICAgYXNzaWduKGRhdGEpOwot
fQotCi1XZWJCbG9iU3RvcmFnZURhdGEmIFdlYkJsb2JTdG9yYWdlRGF0YTo6b3BlcmF0b3I9KGNv
bnN0IFBhc3NSZWZQdHI8QmxvYlN0b3JhZ2VEYXRhPiYgZGF0YSkKLXsKLSAgICBhc3NpZ24oZGF0
YSk7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1XZWJCbG9iU3RvcmFnZURhdGE6Om9wZXJhdG9y
IFBhc3NSZWZQdHI8QmxvYlN0b3JhZ2VEYXRhPigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJp
dmF0ZTsKLX0KLQotdm9pZCBXZWJCbG9iU3RvcmFnZURhdGE6OmFzc2lnbihjb25zdCBQYXNzUmVm
UHRyPEJsb2JTdG9yYWdlRGF0YT4mIGRhdGEpCi17Ci0gICAgaWYgKG1fcHJpdmF0ZSkKLSAgICAg
ICAgbV9wcml2YXRlLT5kZXJlZigpOwotICAgIG1fcHJpdmF0ZSA9IHN0YXRpY19jYXN0PFdlYkJs
b2JTdG9yYWdlRGF0YVByaXZhdGUqPihkYXRhLmxlYWtSZWYoKSk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJUaHJlYWRTYWZl
RGF0YS5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlRocmVhZFNhZmVEYXRhLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41YjAzMzVkCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJUaHJlYWRTYWZlRGF0YS5jcHAKQEAgLTAsMCArMSw5
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
IAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJUaHJlYWRTYWZlRGF0YS5o
IgorCisjaW5jbHVkZSAiQmxvYkRhdGEuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJUaHJlYWRTYWZlRGF0YVByaXZhdGUgOiBw
dWJsaWMgUmF3RGF0YSB7Cit9OworCit2b2lkIFdlYlRocmVhZFNhZmVEYXRhOjpyZXNldCgpCit7
CisgICAgaWYgKG1fcHJpdmF0ZSkgeworICAgICAgICBtX3ByaXZhdGUtPmRlcmVmKCk7CisgICAg
ICAgIG1fcHJpdmF0ZSA9IDA7CisgICAgfQorfQorCit2b2lkIFdlYlRocmVhZFNhZmVEYXRhOjph
c3NpZ24oY29uc3QgV2ViVGhyZWFkU2FmZURhdGEmIG90aGVyKQoreworICAgIFdlYlRocmVhZFNh
ZmVEYXRhUHJpdmF0ZSogcCA9IGNvbnN0X2Nhc3Q8V2ViVGhyZWFkU2FmZURhdGFQcml2YXRlKj4o
b3RoZXIubV9wcml2YXRlKTsKKyAgICBpZiAocCkKKyAgICAgICAgcC0+cmVmKCk7CisgICAgYXNz
aWduKHApOworfQorCitzaXplX3QgV2ViVGhyZWFkU2FmZURhdGE6OnNpemUoKSBjb25zdAorewor
ICAgIGlmICghbV9wcml2YXRlKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY29uc3Rf
Y2FzdDxXZWJUaHJlYWRTYWZlRGF0YVByaXZhdGUqPihtX3ByaXZhdGUpLT5sZW5ndGgoKTsKK30K
KworY29uc3QgY2hhciogV2ViVGhyZWFkU2FmZURhdGE6OmRhdGEoKSBjb25zdAoreworICAgIGlm
ICghbV9wcml2YXRlKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY29uc3RfY2FzdDxX
ZWJUaHJlYWRTYWZlRGF0YVByaXZhdGUqPihtX3ByaXZhdGUpLT5kYXRhKCk7Cit9CisKK1dlYlRo
cmVhZFNhZmVEYXRhOjpXZWJUaHJlYWRTYWZlRGF0YShjb25zdCBQYXNzUmVmUHRyPFJhd0RhdGE+
JiBidWZmZXIpCisgICAgOiBtX3ByaXZhdGUoc3RhdGljX2Nhc3Q8V2ViVGhyZWFkU2FmZURhdGFQ
cml2YXRlKj4oYnVmZmVyLnJlbGVhc2VSZWYoKSkpCit7Cit9CisKK1dlYlRocmVhZFNhZmVEYXRh
JiBXZWJUaHJlYWRTYWZlRGF0YTo6b3BlcmF0b3I9KGNvbnN0IFBhc3NSZWZQdHI8UmF3RGF0YT4m
IGJ1ZmZlcikKK3sKKyAgICBhc3NpZ24oc3RhdGljX2Nhc3Q8V2ViVGhyZWFkU2FmZURhdGFQcml2
YXRlKj4oYnVmZmVyLnJlbGVhc2VSZWYoKSkpOworICAgIHJldHVybiAqdGhpczsKK30KKworV2Vi
VGhyZWFkU2FmZURhdGE6Om9wZXJhdG9yIFBhc3NSZWZQdHI8UmF3RGF0YT4oKSBjb25zdAorewor
ICAgIHJldHVybiBQYXNzUmVmUHRyPFJhd0RhdGE+KGNvbnN0X2Nhc3Q8V2ViVGhyZWFkU2FmZURh
dGFQcml2YXRlKj4obV9wcml2YXRlKSk7Cit9CisKK3ZvaWQgV2ViVGhyZWFkU2FmZURhdGE6OmFz
c2lnbihXZWJUaHJlYWRTYWZlRGF0YVByaXZhdGUqIHApCit7CisgICAgLy8gcCBpcyBhbHJlYWR5
IHJlZidkIGZvciB1cyBieSB0aGUgY2FsbGVyCisgICAgaWYgKG1fcHJpdmF0ZSkKKyAgICAgICAg
bV9wcml2YXRlLT5kZXJlZigpOworICAgIG1fcHJpdmF0ZSA9IHA7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAo=
</data>
<flag name="review"
          id="60405"
          type_id="1"
          status="-"
          setter="fishd"
    />
    <flag name="commit-queue"
          id="60406"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70558</attachid>
            <date>2010-10-12 12:55:16 -0700</date>
            <delta_ts>2010-10-12 14:42:49 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>47423_5</filename>
            <type>text/plain</type>
            <size>18542</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IGEzOTI3YjUuLmE5ZGY3N2MgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDIzIEBACisyMDEwLTEwLTEyICBKaWFuIExpICA8amlhbmxpQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIFVw
ZGF0ZSBXZWJCbG9iRGF0YSB0byBhZGFwdCB0byBCbG9iRGF0YSBjaGFuZ2UgaW4gdGVybXMgb2YK
KyAgICAgICAgaGFuZGxpbmcgc3RyaW5nIGRhdGEgaXRlbS4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3NDIzCisKKyAgICAgICAgQWxzbyByZW1vdmUg
dW5uZWVkZWQgbWV0aG9kcyBpbiBXZWJCbG9iRGF0YS4gV2ViQmxvYlN0b3JhZ2VEYXRhLiogYXJl
CisgICAgICAgIGFsc28gcmVtb3ZlZCBzaW5jZSB0aGV5J3JlIG5vdCBsb25nZXIgbmVlZGVkLgor
CisgICAgICAgICogV2ViS2l0Lmd5cDoKKyAgICAgICAgKiBwdWJsaWMvV2ViQmxvYkRhdGEuaDoK
KyAgICAgICAgKiBwdWJsaWMvV2ViQmxvYlJlZ2lzdHJ5Lmg6CisgICAgICAgICogcHVibGljL1dl
YkJsb2JTdG9yYWdlRGF0YS5oOiBSZW1vdmVkLgorICAgICAgICAqIHB1YmxpYy9XZWJUaHJlYWRT
YWZlRGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvV2ViQmxvYkRhdGEuY3BwOgorICAgICAg
ICAqIHNyYy9XZWJCbG9iU3RvcmFnZURhdGEuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9X
ZWJUaHJlYWRTYWZlRGF0YS5jcHA6IEFkZGVkLgorCiAyMDEwLTEwLTA3ICBTdGVwaGVuIFdoaXRl
ICA8c2Vub3JibGFuY29AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEphbWVz
IFJvYmluc29uLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAgYi9XZWJL
aXQvY2hyb21pdW0vV2ViS2l0Lmd5cAppbmRleCBlMTNiODNiLi43NDg2ODgxIDEwMDY0NAotLS0g
YS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAorKysgYi9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cApAQCAtMTEyLDcgKzExMiw2IEBACiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJCaW5k
aW5ncy5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkJsb2JEYXRhLmgnLAogICAgICAg
ICAgICAgICAgICdwdWJsaWMvV2ViQmxvYlJlZ2lzdHJ5LmgnLAotICAgICAgICAgICAgICAgICdw
dWJsaWMvV2ViQmxvYlN0b3JhZ2VEYXRhLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2Vi
Q2FjaGUuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJDYW52YXMuaCcsCiAgICAgICAg
ICAgICAgICAgJ3B1YmxpYy9XZWJDbGlwYm9hcmQuaCcsCkBAIC0yNjUsNiArMjY0LDcgQEAKICAg
ICAgICAgICAgICAgICAncHVibGljL1dlYlRleHREaXJlY3Rpb24uaCcsCiAgICAgICAgICAgICAg
ICAgJ3B1YmxpYy9XZWJUZXh0SW5wdXRUeXBlLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMv
V2ViVGV4dFJ1bi5oJywKKyAgICAgICAgICAgICAgICAncHVibGljL1dlYlRocmVhZFNhZmVEYXRh
LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViVVJMLmgnLAogICAgICAgICAgICAgICAg
ICdwdWJsaWMvV2ViVVJMRXJyb3IuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJVUkxM
b2FkZXIuaCcsCkBAIC0zOTAsNyArMzkwLDYgQEAKICAgICAgICAgICAgICAgICAnc3JjL1dlYkF0
dHJpYnV0ZS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViQmluZGluZ3MuY3BwJywKICAg
ICAgICAgICAgICAgICAnc3JjL1dlYkJsb2JEYXRhLmNwcCcsCi0gICAgICAgICAgICAgICAgJ3Ny
Yy9XZWJCbG9iU3RvcmFnZURhdGEuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkNhY2hl
LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJDb2xvci5jcHAnLAogICAgICAgICAgICAg
ICAgICdzcmMvV2ViQ29tbW9uLmNwcCcsCkBAIC01MjMsNiArNTIyLDcgQEAKICAgICAgICAgICAg
ICAgICAnc3JjL1dlYlN0b3JhZ2VOYW1lc3BhY2VJbXBsLmgnLAogICAgICAgICAgICAgICAgICdz
cmMvV2ViU3RyaW5nLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJUZXh0UnVuLmNwcCcs
CisgICAgICAgICAgICAgICAgJ3NyYy9XZWJUaHJlYWRTYWZlRGF0YS5jcHAnLAogICAgICAgICAg
ICAgICAgICdzcmMvV2ViVVJMLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJVUkxMb2Fk
VGltaW5nLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJVUkxSZXF1ZXN0LmNwcCcsCmRp
ZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkJsb2JEYXRhLmggYi9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYkJsb2JEYXRhLmgKaW5kZXggOGMwZTFhYS4uNjdiNmNkNiAxMDA2
NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJCbG9iRGF0YS5oCisrKyBiL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViQmxvYkRhdGEuaApAQCAtMzEsNyArMzEsNyBAQAogI2lmbmRl
ZiBXZWJCbG9iRGF0YV9oCiAjZGVmaW5lIFdlYkJsb2JEYXRhX2gKIAotI2luY2x1ZGUgIldlYkNT
dHJpbmcuaCIKKyNpbmNsdWRlICJXZWJUaHJlYWRTYWZlRGF0YS5oIgogI2luY2x1ZGUgIldlYlN0
cmluZy5oIgogI2luY2x1ZGUgIldlYlVSTC5oIgogCkBAIC00OCw3ICs0OCw3IEBAIGNsYXNzIFdl
YkJsb2JEYXRhIHsKIHB1YmxpYzoKICAgICBzdHJ1Y3QgSXRlbSB7CiAgICAgICAgIGVudW0geyBU
eXBlRGF0YSwgVHlwZUZpbGUsIFR5cGVCbG9iIH0gdHlwZTsKLSAgICAgICAgV2ViQ1N0cmluZyBk
YXRhOworICAgICAgICBXZWJUaHJlYWRTYWZlRGF0YSBkYXRhOwogICAgICAgICBXZWJTdHJpbmcg
ZmlsZVBhdGg7CiAgICAgICAgIFdlYlVSTCBibG9iVVJMOwogICAgICAgICBsb25nIGxvbmcgb2Zm
c2V0OwpAQCAtNzIsMTcgKzcyLDkgQEAgcHVibGljOgogICAgIC8vIGluZGV4IGlzIG91dCBvZiBi
b3VuZHMuCiAgICAgV0VCS0lUX0FQSSBib29sIGl0ZW1BdChzaXplX3QgaW5kZXgsIEl0ZW0mIHJl
c3VsdCkgY29uc3Q7CiAKLSAgICAvLyBBcHBlbmRzIHRvIHRoZSBsaXN0IG9mIGl0ZW1zLgotICAg
IFdFQktJVF9BUEkgdm9pZCBhcHBlbmREYXRhKGNvbnN0IFdlYkNTdHJpbmcmKTsKLSAgICBXRUJL
SVRfQVBJIHZvaWQgYXBwZW5kRmlsZShjb25zdCBXZWJTdHJpbmcmIGZpbGVQYXRoKTsKLSAgICBX
RUJLSVRfQVBJIHZvaWQgYXBwZW5kRmlsZShjb25zdCBXZWJTdHJpbmcmIGZpbGVQYXRoLCBsb25n
IGxvbmcgb2Zmc2V0LCBsb25nIGxvbmcgbGVuZ3RoLCBkb3VibGUgZXhwZWN0ZWRNb2RpZmljYXRp
b25UaW1lKTsKLSAgICBXRUJLSVRfQVBJIHZvaWQgYXBwZW5kQmxvYihjb25zdCBXZWJVUkwmIGJs
b2JVUkwsIGxvbmcgbG9uZyBvZmZzZXQsIGxvbmcgbG9uZyBsZW5ndGgpOwotCiAgICAgV0VCS0lU
X0FQSSBXZWJTdHJpbmcgY29udGVudFR5cGUoKSBjb25zdDsKLSAgICBXRUJLSVRfQVBJIHZvaWQg
c2V0Q29udGVudFR5cGUoY29uc3QgV2ViU3RyaW5nJik7CiAKICAgICBXRUJLSVRfQVBJIFdlYlN0
cmluZyBjb250ZW50RGlzcG9zaXRpb24oKSBjb25zdDsKLSAgICBXRUJLSVRfQVBJIHZvaWQgc2V0
Q29udGVudERpc3Bvc2l0aW9uKGNvbnN0IFdlYlN0cmluZyYpOwogCiAjaWYgV0VCS0lUX0lNUExF
TUVOVEFUSU9OCiAgICAgV2ViQmxvYkRhdGEoY29uc3QgV1RGOjpQYXNzT3duUHRyPFdlYkNvcmU6
OkJsb2JEYXRhPiYpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJCbG9i
UmVnaXN0cnkuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQmxvYlJlZ2lzdHJ5LmgKaW5k
ZXggY2JkOWE5OS4uMzA4ZDcyZSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJCbG9iUmVnaXN0cnkuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkJsb2JSZWdp
c3RyeS5oCkBAIC0zMSw4ICszMSw2IEBACiAjaWZuZGVmIFdlYkJsb2JSZWdpc3RyeV9oCiAjZGVm
aW5lIFdlYkJsb2JSZWdpc3RyeV9oCiAKLSNpbmNsdWRlICJXZWJCbG9iU3RvcmFnZURhdGEuaCIK
LQogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYkJsb2JEYXRhOwpkaWZmIC0tZ2l0IGEv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJCbG9iU3RvcmFnZURhdGEuaCBiL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViQmxvYlN0b3JhZ2VEYXRhLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGE5YzBjOGIuLjAwMDAwMDAKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJC
bG9iU3RvcmFnZURhdGEuaAorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJp
YnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFdl
YkJsb2JTdG9yYWdlRGF0YV9oCi0jZGVmaW5lIFdlYkJsb2JTdG9yYWdlRGF0YV9oCi0KLSNpbmNs
dWRlICJXZWJCbG9iRGF0YS5oIgotI2luY2x1ZGUgIldlYkRhdGEuaCIKLSNpbmNsdWRlICJXZWJG
aWxlSW5mby5oIgotI2luY2x1ZGUgIldlYlN0cmluZy5oIgotCi0jaWYgV0VCS0lUX0lNUExFTUVO
VEFUSU9OCi1uYW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIEJsb2JTdG9yYWdlRGF0YTsgfQotbmFt
ZXNwYWNlIFdURiB7IHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBQYXNzUmVmUHRyOyB9Ci0j
ZW5kaWYKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYkJsb2JTdG9yYWdlRGF0YVBy
aXZhdGU7Ci0KLWNsYXNzIFdlYkJsb2JTdG9yYWdlRGF0YSB7Ci1wdWJsaWM6Ci0gICAgfldlYkJs
b2JTdG9yYWdlRGF0YSgpIHsgcmVzZXQoKTsgfQotCi0gICAgV2ViQmxvYlN0b3JhZ2VEYXRhKCkg
OiBtX3ByaXZhdGUoMCkgeyB9Ci0KLSAgICBXRUJLSVRfQVBJIHZvaWQgcmVzZXQoKTsKLQotICAg
IGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gIW1fcHJpdmF0ZTsgfQotCi0gICAgLy8gUmV0
dXJucyB0aGUgbnVtYmVyIG9mIGl0ZW1zLgotICAgIFdFQktJVF9BUEkgc2l6ZV90IGl0ZW1Db3Vu
dCgpIGNvbnN0OwotCi0gICAgLy8gUmV0cmlldmVzIHRoZSB2YWx1ZXMgb2YgdGhlIGl0ZW0gYXQg
dGhlIGdpdmVuIGluZGV4LiBSZXR1cm5zIGZhbHNlIGlmCi0gICAgLy8gaW5kZXggaXMgb3V0IG9m
IGJvdW5kcy4KLSAgICBXRUJLSVRfQVBJIGJvb2wgaXRlbUF0KHNpemVfdCBpbmRleCwgV2ViQmxv
YkRhdGE6Okl0ZW0mIHJlc3VsdCkgY29uc3Q7Ci0KLSAgICBXRUJLSVRfQVBJIFdlYlN0cmluZyBj
b250ZW50VHlwZSgpIGNvbnN0OwotICAgIFdFQktJVF9BUEkgV2ViU3RyaW5nIGNvbnRlbnREaXNw
b3NpdGlvbigpIGNvbnN0OwotCi0jaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCi0gICAgV2ViQmxv
YlN0b3JhZ2VEYXRhKGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpCbG9iU3RvcmFnZURh
dGE+Jik7Ci0gICAgV2ViQmxvYlN0b3JhZ2VEYXRhJiBvcGVyYXRvcj0oY29uc3QgV1RGOjpQYXNz
UmVmUHRyPFdlYkNvcmU6OkJsb2JTdG9yYWdlRGF0YT4mKTsKLSAgICBvcGVyYXRvciBXVEY6OlBh
c3NSZWZQdHI8V2ViQ29yZTo6QmxvYlN0b3JhZ2VEYXRhPigpIGNvbnN0OwotI2VuZGlmCi0KLXBy
aXZhdGU6Ci0jaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCi0gICAgdm9pZCBhc3NpZ24oY29uc3Qg
V1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkJsb2JTdG9yYWdlRGF0YT4mKTsKLSNlbmRpZgotICAg
IFdlYkJsb2JTdG9yYWdlRGF0YVByaXZhdGUqIG1fcHJpdmF0ZTsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYktpdAotCi0jZW5kaWYgLy8gV2ViQmxvYlN0b3JhZ2VEYXRhX2gKZGlmZiAtLWdpdCBh
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVGhyZWFkU2FmZURhdGEuaCBiL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViVGhyZWFkU2FmZURhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRl
eCAwMDAwMDAwLi40N2FlOTYwCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJUaHJlYWRTYWZlRGF0YS5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlRocmVh
ZFNhZmVEYXRhX2gKKyNkZWZpbmUgV2ViVGhyZWFkU2FmZURhdGFfaAorCisjaW5jbHVkZSAiV2Vi
Q29tbW9uLmgiCisjaW5jbHVkZSAiV2ViUHJpdmF0ZVB0ci5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7IGNsYXNzIFJhd0RhdGE7IH0KKworbmFtZXNwYWNlIFdlYktpdCB7CisKKy8vIEEgY29udGFp
bmVyIGZvciByYXcgYnl0ZXMuICBJdCBpcyBpbmV4cGVuc2l2ZSB0byBjb3B5IGEgV2ViVGhyZWFk
U2FmZURhdGEgb2JqZWN0LgorLy8gSXQgaXMgc2FmZSB0byBwYXNzIGEgV2ViVGhyZWFkU2FmZURh
dGEgYWNyb3NzIHRocmVhZHMhISEKK2NsYXNzIFdlYlRocmVhZFNhZmVEYXRhIHsKK3B1YmxpYzoK
KyAgICBXZWJUaHJlYWRTYWZlRGF0YSgpIHsgfQorICAgIH5XZWJUaHJlYWRTYWZlRGF0YSgpIHsg
cmVzZXQoKTsgfQorCisgICAgV0VCS0lUX0FQSSB2b2lkIGFzc2lnbihjb25zdCBXZWJUaHJlYWRT
YWZlRGF0YSYpOworICAgIFdFQktJVF9BUEkgdm9pZCByZXNldCgpOworCisgICAgV0VCS0lUX0FQ
SSBzaXplX3Qgc2l6ZSgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgY29uc3QgY2hhciogZGF0YSgp
IGNvbnN0OworCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIXNpemUoKTsgfQor
CisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisgICAgV2ViVGhyZWFkU2FmZURhdGEoY29uc3Qg
V1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OlJhd0RhdGE+Jik7CisgICAgV2ViVGhyZWFkU2FmZURh
dGEmIG9wZXJhdG9yPShjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6UmF3RGF0YT4mKTsK
KyNlbHNlCisgICAgb3BlcmF0b3Igc3RkOjpzdHJpbmcoKSBjb25zdAorICAgIHsKKyAgICAgICAg
c2l6ZV90IGxlbiA9IHNpemUoKTsKKyAgICAgICAgcmV0dXJuIGxlbiA/IHN0ZDo6c3RyaW5nKGRh
dGEoKSwgbGVuKSA6IHN0ZDo6c3RyaW5nKCk7CisgICAgfQorI2VuZGlmCisKK3ByaXZhdGU6Cisg
ICAgV2ViUHJpdmF0ZVB0cjxXZWJDb3JlOjpSYXdEYXRhPiBtX3ByaXZhdGU7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkJsb2JEYXRhLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQmxvYkRhdGEuY3Bw
CmluZGV4IDRjZDFkNjcuLjQyMDE4ZGQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViQmxvYkRhdGEuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQmxvYkRhdGEuY3Bw
CkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiV2ViQmxvYkRhdGEuaCIKIAogI2luY2x1ZGUg
IkJsb2JEYXRhLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAogdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CiAKQEAgLTg5LDU0ICs5MCwxOCBAQCBib29sIFdlYkJsb2JEYXRhOjppdGVt
QXQoc2l6ZV90IGluZGV4LCBJdGVtJiByZXN1bHQpIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi12b2lkIFdlYkJsb2JEYXRhOjphcHBlbmREYXRhKGNvbnN0IFdlYkNTdHJpbmcmIGRhdGEp
Ci17Ci0gICAgQVNTRVJUKCFpc051bGwoKSk7Ci0gICAgbV9wcml2YXRlLT5hcHBlbmREYXRhKGRh
dGEpOwotfQotCi12b2lkIFdlYkJsb2JEYXRhOjphcHBlbmRGaWxlKGNvbnN0IFdlYlN0cmluZyYg
ZmlsZVBhdGgpCi17Ci0gICAgQVNTRVJUKCFpc051bGwoKSk7Ci0gICAgbV9wcml2YXRlLT5hcHBl
bmRGaWxlKGZpbGVQYXRoKTsKLX0KLQotdm9pZCBXZWJCbG9iRGF0YTo6YXBwZW5kRmlsZShjb25z
dCBXZWJTdHJpbmcmIGZpbGVQYXRoLCBsb25nIGxvbmcgb2Zmc2V0LCBsb25nIGxvbmcgbGVuZ3Ro
LCBkb3VibGUgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lKQotewotICAgIEFTU0VSVCghaXNOdWxs
KCkpOwotICAgIG1fcHJpdmF0ZS0+YXBwZW5kRmlsZShmaWxlUGF0aCwgb2Zmc2V0LCBsZW5ndGgs
IGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSk7Ci19Ci0KLXZvaWQgV2ViQmxvYkRhdGE6OmFwcGVu
ZEJsb2IoY29uc3QgV2ViVVJMJiBibG9iVVJMLCBsb25nIGxvbmcgb2Zmc2V0LCBsb25nIGxvbmcg
bGVuZ3RoKQotewotICAgIEFTU0VSVCghaXNOdWxsKCkpOwotICAgIG1fcHJpdmF0ZS0+YXBwZW5k
QmxvYihibG9iVVJMLCBvZmZzZXQsIGxlbmd0aCk7Ci19Ci0KIFdlYlN0cmluZyBXZWJCbG9iRGF0
YTo6Y29udGVudFR5cGUoKSBjb25zdAogewogICAgIEFTU0VSVCghaXNOdWxsKCkpOwogICAgIHJl
dHVybiBtX3ByaXZhdGUtPmNvbnRlbnRUeXBlKCk7CiB9CiAKLXZvaWQgV2ViQmxvYkRhdGE6OnNl
dENvbnRlbnRUeXBlKGNvbnN0IFdlYlN0cmluZyYgY29udGVudFR5cGUpCi17Ci0gICAgQVNTRVJU
KCFpc051bGwoKSk7Ci0gICAgbV9wcml2YXRlLT5zZXRDb250ZW50VHlwZShjb250ZW50VHlwZSk7
Ci19Ci0KIFdlYlN0cmluZyBXZWJCbG9iRGF0YTo6Y29udGVudERpc3Bvc2l0aW9uKCkgY29uc3QK
IHsKICAgICBBU1NFUlQoIWlzTnVsbCgpKTsKICAgICByZXR1cm4gbV9wcml2YXRlLT5jb250ZW50
RGlzcG9zaXRpb24oKTsKIH0KIAotdm9pZCBXZWJCbG9iRGF0YTo6c2V0Q29udGVudERpc3Bvc2l0
aW9uKGNvbnN0IFdlYlN0cmluZyYgY29udGVudERpc3Bvc2l0aW9uKQotewotICAgIEFTU0VSVCgh
aXNOdWxsKCkpOwotICAgIG1fcHJpdmF0ZS0+c2V0Q29udGVudERpc3Bvc2l0aW9uKGNvbnRlbnRE
aXNwb3NpdGlvbik7Ci19Ci0KIFdlYkJsb2JEYXRhOjpXZWJCbG9iRGF0YShjb25zdCBQYXNzT3du
UHRyPEJsb2JEYXRhPiYgZGF0YSkKICAgICA6IG1fcHJpdmF0ZSgwKQogewpkaWZmIC0tZ2l0IGEv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJCbG9iU3RvcmFnZURhdGEuY3BwIGIvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJCbG9iU3RvcmFnZURhdGEuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAzOGEyNWZlLi4wMDAwMDAwCi0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQmxvYlN0
b3JhZ2VEYXRhLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1
dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIldlYkJsb2JTdG9yYWdlRGF0YS5oIgotCi0jaW5jbHVkZSAiQmxv
YlN0b3JhZ2VEYXRhLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2Ug
V2ViS2l0IHsKLQotY2xhc3MgV2ViQmxvYlN0b3JhZ2VEYXRhUHJpdmF0ZSA6IHB1YmxpYyBCbG9i
U3RvcmFnZURhdGEgewotfTsKLQotdm9pZCBXZWJCbG9iU3RvcmFnZURhdGE6OnJlc2V0KCkKLXsK
LSAgICBhc3NpZ24oMCk7Ci19Ci0KLXNpemVfdCBXZWJCbG9iU3RvcmFnZURhdGE6Oml0ZW1Db3Vu
dCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFpc051bGwoKSk7Ci0gICAgcmV0dXJuIG1fcHJpdmF0
ZS0+aXRlbXMoKS5zaXplKCk7Ci19Ci0KLWJvb2wgV2ViQmxvYlN0b3JhZ2VEYXRhOjppdGVtQXQo
c2l6ZV90IGluZGV4LCBXZWJCbG9iRGF0YTo6SXRlbSYgcmVzdWx0KSBjb25zdAotewotICAgIEFT
U0VSVCghaXNOdWxsKCkpOwotCi0gICAgaWYgKGluZGV4ID49IG1fcHJpdmF0ZS0+aXRlbXMoKS5z
aXplKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNvbnN0IEJsb2JEYXRhSXRlbSYg
aXRlbSA9IG1fcHJpdmF0ZS0+aXRlbXMoKVtpbmRleF07Ci0gICAgcmVzdWx0Lm9mZnNldCA9IGl0
ZW0ub2Zmc2V0OwotICAgIHJlc3VsdC5sZW5ndGggPSBpdGVtLmxlbmd0aDsKLSAgICByZXN1bHQu
ZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lID0gaXRlbS5leHBlY3RlZE1vZGlmaWNhdGlvblRpbWU7
Ci0gICAgaWYgKGl0ZW0udHlwZSA9PSBCbG9iRGF0YUl0ZW06OkRhdGEpIHsKLSAgICAgICAgcmVz
dWx0LnR5cGUgPSBXZWJCbG9iRGF0YTo6SXRlbTo6VHlwZURhdGE7Ci0gICAgICAgIHJlc3VsdC5k
YXRhLmFzc2lnbihpdGVtLmRhdGEuZGF0YSgpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGl0ZW0uZGF0
YS5sZW5ndGgoKSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBBU1NFUlQoaXRlbS50eXBlID09IEJsb2JEYXRhSXRlbTo6RmlsZSk7Ci0gICAgICAgIHJlc3Vs
dC50eXBlID0gV2ViQmxvYkRhdGE6Okl0ZW06OlR5cGVGaWxlOwotICAgICAgICByZXN1bHQuZmls
ZVBhdGggPSBpdGVtLnBhdGg7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLX0KLQotV2Vi
U3RyaW5nIFdlYkJsb2JTdG9yYWdlRGF0YTo6Y29udGVudFR5cGUoKSBjb25zdAotewotICAgIEFT
U0VSVCghaXNOdWxsKCkpOwotICAgIHJldHVybiBtX3ByaXZhdGUtPmNvbnRlbnRUeXBlKCk7Ci19
Ci0KLVdlYlN0cmluZyBXZWJCbG9iU3RvcmFnZURhdGE6OmNvbnRlbnREaXNwb3NpdGlvbigpIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKCFpc051bGwoKSk7Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+Y29u
dGVudERpc3Bvc2l0aW9uKCk7Ci19Ci0KLVdlYkJsb2JTdG9yYWdlRGF0YTo6V2ViQmxvYlN0b3Jh
Z2VEYXRhKGNvbnN0IFBhc3NSZWZQdHI8QmxvYlN0b3JhZ2VEYXRhPiYgZGF0YSkKLSAgICA6IG1f
cHJpdmF0ZSgwKQotewotICAgIGFzc2lnbihkYXRhKTsKLX0KLQotV2ViQmxvYlN0b3JhZ2VEYXRh
JiBXZWJCbG9iU3RvcmFnZURhdGE6Om9wZXJhdG9yPShjb25zdCBQYXNzUmVmUHRyPEJsb2JTdG9y
YWdlRGF0YT4mIGRhdGEpCi17Ci0gICAgYXNzaWduKGRhdGEpOwotICAgIHJldHVybiAqdGhpczsK
LX0KLQotV2ViQmxvYlN0b3JhZ2VEYXRhOjpvcGVyYXRvciBQYXNzUmVmUHRyPEJsb2JTdG9yYWdl
RGF0YT4oKSBjb25zdAotewotICAgIHJldHVybiBtX3ByaXZhdGU7Ci19Ci0KLXZvaWQgV2ViQmxv
YlN0b3JhZ2VEYXRhOjphc3NpZ24oY29uc3QgUGFzc1JlZlB0cjxCbG9iU3RvcmFnZURhdGE+JiBk
YXRhKQotewotICAgIGlmIChtX3ByaXZhdGUpCi0gICAgICAgIG1fcHJpdmF0ZS0+ZGVyZWYoKTsK
LSAgICBtX3ByaXZhdGUgPSBzdGF0aWNfY2FzdDxXZWJCbG9iU3RvcmFnZURhdGFQcml2YXRlKj4o
ZGF0YS5sZWFrUmVmKCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVGhyZWFkU2FmZURhdGEuY3BwIGIvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJUaHJlYWRTYWZlRGF0YS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXgg
MDAwMDAwMC4uZmFjYWJhMwotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViVGhyZWFkU2FmZURhdGEuY3BwCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV2ViVGhyZWFkU2FmZURhdGEuaCIKKworI2luY2x1ZGUgIkJsb2JEYXRh
LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
dm9pZCBXZWJUaHJlYWRTYWZlRGF0YTo6cmVzZXQoKQoreworICAgIG1fcHJpdmF0ZS5yZXNldCgp
OworfQorCit2b2lkIFdlYlRocmVhZFNhZmVEYXRhOjphc3NpZ24oY29uc3QgV2ViVGhyZWFkU2Fm
ZURhdGEmIG90aGVyKQoreworICAgIG1fcHJpdmF0ZSA9IG90aGVyLm1fcHJpdmF0ZTsKK30KKwor
c2l6ZV90IFdlYlRocmVhZFNhZmVEYXRhOjpzaXplKCkgY29uc3QKK3sKKyAgICBpZiAobV9wcml2
YXRlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5s
ZW5ndGgoKTsKK30KKworY29uc3QgY2hhciogV2ViVGhyZWFkU2FmZURhdGE6OmRhdGEoKSBjb25z
dAoreworICAgIGlmIChtX3ByaXZhdGUuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiAwOworICAg
IHJldHVybiBtX3ByaXZhdGUtPmRhdGEoKTsKK30KKworV2ViVGhyZWFkU2FmZURhdGE6OldlYlRo
cmVhZFNhZmVEYXRhKGNvbnN0IFBhc3NSZWZQdHI8UmF3RGF0YT4mIGRhdGEpCisgICAgOiBtX3By
aXZhdGUoZGF0YS5yZWxlYXNlUmVmKCkpCit7Cit9CisKK1dlYlRocmVhZFNhZmVEYXRhJiBXZWJU
aHJlYWRTYWZlRGF0YTo6b3BlcmF0b3I9KGNvbnN0IFBhc3NSZWZQdHI8UmF3RGF0YT4mIGRhdGEp
Cit7CisgICAgbV9wcml2YXRlID0gZGF0YTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAo=
</data>
<flag name="review"
          id="60416"
          type_id="1"
          status="+"
          setter="fishd"
    />
    <flag name="commit-queue"
          id="60417"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
      

    </bug>

</bugzilla>