<?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>45494</bug_id>
          
          <creation_ts>2010-09-09 15:06:57 -0700</creation_ts>
          <short_desc>Paste should be implemented in WebCore like Copy and Cut for Mac also</short_desc>
          <delta_ts>2010-09-14 04:56:40 -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>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</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>
          
          <blocked>42317</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Enrica Casucci">enrica</reporter>
          <assigned_to name="Enrica Casucci">enrica</assigned_to>
          <cc>andersca</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-ews</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>276784</commentid>
    <comment_count>0</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2010-09-09 15:06:57 -0700</bug_when>
    <thetext>This bug tracks the refactoring work needed to support paste in WebKit2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276799</commentid>
    <comment_count>1</comment_count>
      <attachid>67102</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2010-09-09 15:31:26 -0700</bug_when>
    <thetext>Created attachment 67102
Patch

I&apos;m still trying to build this on Windows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276807</commentid>
    <comment_count>2</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-09-09 15:47:46 -0700</bug_when>
    <thetext>Attachment 67102 did not build on qt:
Build output: http://queues.webkit.org/results/3912393</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276812</commentid>
    <comment_count>3</comment_count>
      <attachid>67102</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-09-09 15:52:28 -0700</bug_when>
    <thetext>Comment on attachment 67102
Patch

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

&gt; WebCore/editing/mac/EditorMac.mm:86
&gt; -
&gt; +    
nit: please don&apos;t add spaces in blank lines.

&gt; WebCore/platform/mac/PasteboardMac.mm:381
&gt; +    
spaces.

&gt; WebCore/platform/mac/PasteboardMac.mm:397
&gt; +    
spaces.

&gt; WebCore/platform/mac/PasteboardMac.mm:422
&gt; +       
spaces.

&gt; WebCore/platform/mac/PasteboardMac.mm:436
&gt; +    
spaces.

&gt; WebCore/platform/mac/PasteboardMac.mm:444
&gt; +    
spaces.

&gt; WebCore/platform/mac/PasteboardMac.mm:468
&gt; +    
spaces.

&gt; WebCore/platform/mac/PasteboardMac.mm:502
&gt; +    
spaces.

&gt; WebCore/platform/mac/PasteboardMac.mm:506
&gt; +    
spaces.

&gt; WebCore/platform/mac/PasteboardMac.mm:510
&gt; +    
spaces.

&gt; WebCore/platform/mac/PasteboardMac.mm:514
&gt; +        
spaces.

&gt; WebCore/platform/mac/PasteboardMac.mm:518
&gt; +    
spaces.

&gt; WebCore/platform/mac/PasteboardMac.mm:524
&gt; +    
spaces.

&gt; WebCore/platform/mac/PasteboardMac.mm:530
&gt; +    
spaces.

&gt; WebKit2/WebProcess/WebCoreSupport/WebEditorClient.cpp:326
&gt; +{      
nit: there are spaes after {

&gt; WebKit/mac/WebCoreSupport/WebEditorClient.mm:367
&gt; +    
spaces.

&gt; WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm:1021
&gt; +bool WebFrameLoaderClient::canShowMIMETypeAsHTML(const String&amp; MIMEType) const
I&apos;m not particularly familiar with this part of the code but why do we need to add new function as supposed to overriding canShowMIMEType?
It&apos;ll be very helpful if you could document that in the change log or add some comment in the base class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276823</commentid>
    <comment_count>4</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2010-09-09 16:11:04 -0700</bug_when>
    <thetext>(In reply to comment #3)
Fixed all the spaces.

&gt; &gt; WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm:1021
&gt; &gt; +bool WebFrameLoaderClient::canShowMIMETypeAsHTML(const String&amp; MIMEType) const
&gt; I&apos;m not particularly familiar with this part of the code but why do we need to add new function as supposed to overriding canShowMIMEType?
&gt; It&apos;ll be very helpful if you could document that in the change log or add some comment in the base class.

I&apos;ve changed this to be platform specific and it should be Mac only. This function returns true only if we can show the gives MIMEType as HTML.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276829</commentid>
    <comment_count>5</comment_count>
      <attachid>67111</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2010-09-09 16:18:42 -0700</bug_when>
    <thetext>Created attachment 67111
Patch2

Remvoed blanks. Made canShowMIMETypeasHTML platform specific.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277432</commentid>
    <comment_count>6</comment_count>
      <attachid>67111</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-09-10 14:25:22 -0700</bug_when>
    <thetext>Comment on attachment 67111
Patch2

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

&gt; WebCore/loader/FrameLoaderClient.h:209
&gt; +#if PLATFORM(MAC)
&gt; +        virtual bool canShowMIMETypeAsHTML(const String&amp; MIMEType) const = 0;
&gt; +#endif
This doesn&apos;t have to be mac specific.

&gt; WebCore/page/EditorClient.h:156
&gt; +    virtual DocumentFragment* documentFromAttributedString(NSAttributedString*, Vector&lt;ArchiveResource*&gt;&amp;) = 0;
This should probably be called documentFragmentFromAttributedString.

&gt; WebCore/platform/mac/PasteboardMac.mm:441
&gt; +PassRefPtr&lt;DocumentFragment&gt; Pasteboard::documentFragmentFromPasteboard(Frame* frame, PassRefPtr&lt;Range&gt; context, bool allowPlainText)
&gt; +{
I think this function should be merged into Pasteboard::documentFragment.


r+ with this changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278391</commentid>
    <comment_count>7</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2010-09-13 12:22:32 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/67403</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278822</commentid>
    <comment_count>8</comment_count>
    <who name="Lucas De Marchi">lucas.de.marchi</who>
    <bug_when>2010-09-14 04:56:40 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 67111 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=67111&amp;action=prettypatch
&gt; 
&gt; &gt; WebCore/loader/FrameLoaderClient.h:209
&gt; &gt; +#if PLATFORM(MAC)
&gt; &gt; +        virtual bool canShowMIMETypeAsHTML(const String&amp; MIMEType) const = 0;
&gt; &gt; +#endif
&gt; This doesn&apos;t have to be mac specific.

The patch applied contains this #if, which breaks EFL port. Please, see https://bugs.webkit.org/show_bug.cgi?id=45728</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67102</attachid>
            <date>2010-09-09 15:31:26 -0700</date>
            <delta_ts>2010-09-09 16:18:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug45494.txt</filename>
            <type>text/plain</type>
            <size>35129</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NzExOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDEgQEAKKzIwMTAtMDktMDkgIEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQ
YXN0ZSBzaG91bGQgYmUgaW1wbGVtZW50ZWQgaW4gV2ViQ29yZSBsaWtlIENvcHkgYW5kIEN1dCBm
b3IgTWFjIGFsc28uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD00NTQ5NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzY2MDUzNz4KKworICAgICAgICBP
biB0aGUgTWFjIHBsYXRmb3JtLCB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIHBhc3RlIG9wZXJh
dGlvbiBpcyBhbGwgZG9uZQorICAgICAgICBhdCB0aGUgV2ViS2l0IGxldmVsLiBJbiBvcmRlciB0
byBzdXBwb3J0IGl0IG9uIFdlYktpdDIgaXQgaXMgbmVjZXNzYXJ5IHRvCisgICAgICAgIHJlZmFj
dG9yIHRoZSBjb2RlIGFuZCBtb3ZlIHRoaXMgZnVuY3Rpb25hbGl0eSBhdCB0aGUgbGV2ZWwgb2Yg
V2ViQ29yZSBsaWtlCisgICAgICAgIHdlIGFscmVhZHkgaGF2ZSBvbiBXaW5kb3dzLgorICAgICAg
ICBUaGUgb3JpZ2luYWwgY29kZSByZWxpZXMgb24gc29tZSBpbiBBcHBLaXQgZnVuY3Rpb25zIHRo
YXQgY2FsbCBiYWNrIGludG8KKyAgICAgICAgV2ViS2l0IGNhdXNpbmcgcHJvYmxlbXMgaW4gV2Vi
S2l0Mi4gQWxsIHRoaXMgZnVuY3Rpb25hbGl0eSBoYXMgYmVlbiBtb3ZlZAorICAgICAgICBhdCB0
aGUgbGV2ZWwgb2YgdGhlIGVkaXRvciBjbGllbnQgd2hlcmUgaXQgY2FuIGJlIGRlYWx0IHdpdGgg
YXBwcm9wcmlhdGVseS4KKyAgICAgICAgCisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzaG91bGRJbnNlcnRGcmFnbWVudCk6CisgICAgICAg
ICogZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tOiBleHRlbmRlZCB0byBzdXBwb3J0IE1haWwgc3Bl
Y2lmaWMgc2NlbmFyaW9zLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpwYXN0ZVdpdGhQYXN0
ZWJvYXJkKToKKyAgICAgICAgKiBsb2FkZXIvRW1wdHlDbGllbnRzLmg6CisgICAgICAgIChXZWJD
b3JlOjpFbXB0eUZyYW1lTG9hZGVyQ2xpZW50OjpjYW5TaG93TUlNRVR5cGVBc0hUTUwpOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5RWRpdG9yQ2xpZW50Ojpkb2N1bWVudEZyb21BdHRy
aWJ1dGVkU3RyaW5nKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpFbXB0eUVkaXRvckNsaWVu
dDo6c2V0SW5zZXJ0aW9uUGFzdGVib2FyZCk6IEFkZGVkIHRvIHN1cHBvcnQgTWFpbC4KKyAgICAg
ICAgKiBsb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaDoKKyAgICAgICAgKiBwYWdlL0VkaXRvckNs
aWVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL1Bhc3RlYm9hcmQuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6
OndyaXRlU2VsZWN0aW9uKTogcmVwbGFjZWQgY2FsbCB0byBBcHBraXQgd2l0aCBvbmUgdGhhdAor
ICAgICAgICBkb2Vzbid0IGNhbGxsIGJhY2sgaW50byBXZWJLaXQuCisgICAgICAgIChXZWJDb3Jl
OjpQYXN0ZWJvYXJkOjpkb2N1bWVudEZyYWdtZW50V2l0aEltYWdlUmVzb3VyY2UpOiBSZS1pbXBs
ZW1lbnRlZCBhdCB0aGUKKyAgICAgICAgV2ViQ29yZSBsZXZlbAorICAgICAgICAoV2ViQ29yZTo6
UGFzdGVib2FyZDo6ZG9jdW1lbnRGcmFnbWVudFdpdGhSdGYpOiBSZS1pbXBsZW1lbnRlZCBhdCB0
aGUgV2ViQ29yZQorICAgICAgICBsZXZlbC4KKyAgICAgICAgKFdlYkNvcmU6OnVuaXF1ZVVSTFdp
dGhSZWxhdGl2ZVBhcnQpOiBBZGRlZAorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6ZG9j
dW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkKTogUmUtaW1wbGVtZW50ZWQgYXQgdGhlCisgICAg
ICAgIFdlYkNvcmUgbGV2ZWwuCisKIDIwMTAtMDktMDkgIFJvYmVydCBIb2dhbiAgPHJvYmVydEB3
ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFuZHJlYXMgS2xpbmcuCkluZGV4OiBX
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcv
RWRpdG9yLmNwcAkocmV2aXNpb24gNjcxMTYpCisrKyBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzM5LDYgKzMzOSw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZUFz
UGxhaW5UZXh0V2l0aFBhc3RlYm8KICAgICAgICAgcGFzdGVBc1BsYWluVGV4dCh0ZXh0LCBjYW5T
bWFydFJlcGxhY2VXaXRoUGFzdGVib2FyZChwYXN0ZWJvYXJkKSk7CiB9CiAKKyNpZiAhUExBVEZP
Uk0oTUFDKQogdm9pZCBFZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCogcGFz
dGVib2FyZCwgYm9vbCBhbGxvd1BsYWluVGV4dCkKIHsKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdl
ID0gc2VsZWN0ZWRSYW5nZSgpOwpAQCAtMzQ3LDYgKzM0OCw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0
ZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm8KICAgICBpZiAoZnJhZ21lbnQgJiYgc2hvdWxkSW5zZXJ0
RnJhZ21lbnQoZnJhZ21lbnQsIHJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb25QYXN0ZWQpKQogICAg
ICAgICBwYXN0ZUFzRnJhZ21lbnQoZnJhZ21lbnQsIGNhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJv
YXJkKHBhc3RlYm9hcmQpLCBjaG9zZVBsYWluVGV4dCk7CiB9CisjZW5kaWYKIAogYm9vbCBFZGl0
b3I6OmNhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQp
CiB7CkBAIC0zNTcsMTAgKzM1OSwxMiBAQCBib29sIEVkaXRvcjo6c2hvdWxkSW5zZXJ0RnJhZ21l
bnQoUGFzc1JlCiB7CiAgICAgaWYgKCFjbGllbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAKLSAgICBOb2RlKiBjaGlsZCA9IGZyYWdtZW50LT5maXJzdENoaWxkKCk7Ci0gICAg
aWYgKGNoaWxkICYmIGZyYWdtZW50LT5sYXN0Q2hpbGQoKSA9PSBjaGlsZCAmJiBjaGlsZC0+aXND
aGFyYWN0ZXJEYXRhTm9kZSgpKQotICAgICAgICByZXR1cm4gY2xpZW50KCktPnNob3VsZEluc2Vy
dFRleHQoc3RhdGljX2Nhc3Q8Q2hhcmFjdGVyRGF0YSo+KGNoaWxkKS0+ZGF0YSgpLCByZXBsYWNp
bmdET01SYW5nZS5nZXQoKSwgZ2l2ZW5BY3Rpb24pOworICAgIAorICAgIGlmIChmcmFnbWVudCkg
eworICAgICAgICBOb2RlKiBjaGlsZCA9IGZyYWdtZW50LT5maXJzdENoaWxkKCk7CisgICAgICAg
IGlmIChjaGlsZCAmJiBmcmFnbWVudC0+bGFzdENoaWxkKCkgPT0gY2hpbGQgJiYgY2hpbGQtPmlz
Q2hhcmFjdGVyRGF0YU5vZGUoKSkKKyAgICAgICAgICAgIHJldHVybiBjbGllbnQoKS0+c2hvdWxk
SW5zZXJ0VGV4dChzdGF0aWNfY2FzdDxDaGFyYWN0ZXJEYXRhKj4oY2hpbGQpLT5kYXRhKCksIHJl
cGxhY2luZ0RPTVJhbmdlLmdldCgpLCBnaXZlbkFjdGlvbik7ICAgICAgICAKKyAgICB9CiAKICAg
ICByZXR1cm4gY2xpZW50KCktPnNob3VsZEluc2VydE5vZGUoZnJhZ21lbnQuZ2V0KCksIHJlcGxh
Y2luZ0RPTVJhbmdlLmdldCgpLCBnaXZlbkFjdGlvbik7CiB9CkBAIC0xMTkwLDggKzExOTQsNiBA
QCB2b2lkIEVkaXRvcjo6Y29weSgpCiAgICAgZGlkV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQo
KTsKIH0KIAotI2lmICFQTEFURk9STShNQUMpCi0KIHZvaWQgRWRpdG9yOjpwYXN0ZSgpCiB7CiAg
ICAgQVNTRVJUKG1fZnJhbWUtPmRvY3VtZW50KCkpOwpAQCAtMTIwOCw4ICsxMjEwLDYgQEAgdm9p
ZCBFZGl0b3I6OnBhc3RlKCkKICAgICBsb2FkZXItPnNldEFsbG93U3RhbGVSZXNvdXJjZXMoZmFs
c2UpOwogfQogCi0jZW5kaWYKLQogdm9pZCBFZGl0b3I6OnBhc3RlQXNQbGFpblRleHQoKQogewog
ICAgIGlmICh0cnlESFRNTFBhc3RlKCkpCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRv
ck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQko
cmV2aXNpb24gNjcxMTYpCisrKyBXZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMjgsOCArMjgsMTMgQEAKIAogI2ltcG9ydCAiQ2xpcGJvYXJkTWFjLmgi
CiAjaW1wb3J0ICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgorI2ltcG9ydCAiRG9jdW1lbnRGcmFn
bWVudC5oIgorI2ltcG9ydCAiRWRpdG9yLmgiCisjaW1wb3J0ICJFZGl0b3JDbGllbnQuaCIKICNp
bXBvcnQgIkZyYW1lLmgiCiAjaW1wb3J0ICJGcmFtZVZpZXcuaCIKKyNpbXBvcnQgIlBhc3RlYm9h
cmQuaCIKKyNpbXBvcnQgIlJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKQEAgLTUzLDIwICs1OCwzMCBAQCB2b2lkIEVkaXRvcjo6c2hvd0NvbG9yUGFu
ZWwoKQogICAgIFtbTlNBcHBsaWNhdGlvbiBzaGFyZWRBcHBsaWNhdGlvbl0gb3JkZXJGcm9udENv
bG9yUGFuZWw6bmlsXTsKIH0KIAotLy8gRklYTUU6IFdlIHdhbnQgdG8gdXNlIHRoZSBwbGF0Zm9y
bS1pbmRlcGVuZGVudCBjb2RlIGluc3RlYWQuIEJ1dCB3aGVuIHdlIGxhc3QKLS8vIHRyaWVkIHRv
IGRvIHNvIGl0IHNlZW1lZCB0aGF0IHdlIGZpcnN0IG5lZWQgdG8gbW92ZSBtb3JlIG9mIHRoZSBs
b2dpYyBmcm9tCi0vLyAtW1dlYkhUTUxWaWV3LmNwcCBfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0
ZWJvYXJkXSBpbnRvIFBhc3RlYm9hcmRNYWMuCi0KLXZvaWQgRWRpdG9yOjpwYXN0ZSgpCit2b2lk
IEVkaXRvcjo6cGFzdGVXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBib29s
IGFsbG93UGxhaW5UZXh0KQogewotICAgIEFTU0VSVChtX2ZyYW1lLT5kb2N1bWVudCgpKTsKLSAg
ICBGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52aWV3KCk7Ci0gICAgaWYgKCF2aWV3KQotICAg
ICAgICByZXR1cm47Ci0gICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGxvYWRlciA9IG1fZnJhbWUt
PmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7Ci0gICAgbG9hZGVyLT5zZXRBbGxv
d1N0YWxlUmVzb3VyY2VzKHRydWUpOwotICAgIFt2aWV3LT5kb2N1bWVudFZpZXcoKSB0cnlUb1Bl
cmZvcm06QHNlbGVjdG9yKHBhc3RlOikgd2l0aDpuaWxdOwotICAgIGxvYWRlci0+c2V0QWxsb3dT
dGFsZVJlc291cmNlcyhmYWxzZSk7CisgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVjdGVk
UmFuZ2UoKTsKKyAgICBtX2ZyYW1lLT5lZGl0b3IoKS0+Y2xpZW50KCktPnNldEluc2VydGlvblBh
c3RlYm9hcmQoW05TUGFzdGVib2FyZCBnZW5lcmFsUGFzdGVib2FyZF0pOworI2lmICFkZWZpbmVk
KEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAh
ZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCisgICAgUmVmUHRyPERvY3VtZW50RnJh
Z21lbnQ+IGZyYWdtZW50ID0gcGFzdGVib2FyZC0+ZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJv
YXJkKG1fZnJhbWUsIHJhbmdlLCBhbGxvd1BsYWluVGV4dCk7CisgICAgaWYgKGZyYWdtZW50ICYm
IHNob3VsZEluc2VydEZyYWdtZW50KGZyYWdtZW50LCByYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9u
UGFzdGVkKSkKKyAgICAgICAgcGFzdGVBc0ZyYWdtZW50KGZyYWdtZW50LCBjYW5TbWFydFJlcGxh
Y2VXaXRoUGFzdGVib2FyZChwYXN0ZWJvYXJkKSwgZmFsc2UpOworI2Vsc2UKKyAgICAvLyBNYWls
IGlzIGlnbm9yaW5nIHRoZSBmcmFtZW50IHBhc3NlZCB0byB0aGUgZGVsZWdhdGUgYW5kIGNyZWF0
ZXMgYSBuZXcgb25lLgorICAgIC8vIFdlIHdhbnQgdG8gYXZvaWQgY3JlYXRpbmcgdGhlIGZyYWdt
ZW50IHR3aWNlLgorICAgIGlmIChhcHBsaWNhdGlvbklzQXBwbGVNYWlsKCkpIHsKKyAgICAgICAg
aWYgKHNob3VsZEluc2VydEZyYWdtZW50KE5VTEwsIHJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb25Q
YXN0ZWQpKSB7CisgICAgICAgICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQg
PSBwYXN0ZWJvYXJkLT5kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQobV9mcmFtZSwgcmFu
Z2UsIGFsbG93UGxhaW5UZXh0KTsKKyAgICAgICAgICAgIGlmIChmcmFnbWVudCkKKyAgICAgICAg
ICAgICAgICBwYXN0ZUFzRnJhZ21lbnQoZnJhZ21lbnQsIGNhblNtYXJ0UmVwbGFjZVdpdGhQYXN0
ZWJvYXJkKHBhc3RlYm9hcmQpLCBmYWxzZSk7CisgICAgICAgIH0gICAgICAgIAorICAgIH0gZWxz
ZSB7CisgICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PmZyYWdtZW50ID0gcGFzdGVib2Fy
ZC0+ZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkKG1fZnJhbWUsIHJhbmdlLCBhbGxvd1Bs
YWluVGV4dCk7CisgICAgICAgIGlmIChmcmFnbWVudCAmJiBzaG91bGRJbnNlcnRGcmFnbWVudChm
cmFnbWVudCwgcmFuZ2UsIEVkaXRvckluc2VydEFjdGlvblBhc3RlZCkpCisgICAgICAgICAgICBw
YXN0ZUFzRnJhZ21lbnQoZnJhZ21lbnQsIGNhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJkKHBh
c3RlYm9hcmQpLCBmYWxzZSk7CisgICAgfQorI2VuZGlmCisgICAgbV9mcmFtZS0+ZWRpdG9yKCkt
PmNsaWVudCgpLT5zZXRJbnNlcnRpb25QYXN0ZWJvYXJkKG5pbCk7CiB9Ci0KKyAgICAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCShyZXZpc2lvbiA2NzEx
NikKKysrIFdlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MDUsNiArMzA1LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGNhbkhhbmRsZVJlcXVl
c3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2
aXJ0dWFsIGJvb2wgY2FuU2hvd01JTUVUeXBlKGNvbnN0IFN0cmluZyYpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGNhblNob3dNSU1FVHlwZUFzSFRNTChjb25zdCBT
dHJpbmcmKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCByZXByZXNl
bnRhdGlvbkV4aXN0c0ZvclVSTFNjaGVtZShjb25zdCBTdHJpbmcmKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogICAgIHZpcnR1YWwgU3RyaW5nIGdlbmVyYXRlZE1JTUVUeXBlRm9yVVJMU2NoZW1l
KGNvbnN0IFN0cmluZyYpIGNvbnN0IHsgcmV0dXJuICIiOyB9CiAKQEAgLTQzNCw2ICs0MzUsOCBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIG1hcmtlZFRleHRBYmFuZG9uZWQoRnJhbWUqKSB7
IH0KIAogICAgIHZpcnR1YWwgTlNTdHJpbmcqIHVzZXJWaXNpYmxlU3RyaW5nKE5TVVJMKikgeyBy
ZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgRG9jdW1lbnRGcmFnbWVudCogZG9jdW1lbnRGcm9tQXR0
cmlidXRlZFN0cmluZyhOU0F0dHJpYnV0ZWRTdHJpbmcqLCBWZWN0b3I8QXJjaGl2ZVJlc291cmNl
Kj4mKSB7IHJldHVybiAwOyB9OworICAgIHZpcnR1YWwgdm9pZCBzZXRJbnNlcnRpb25QYXN0ZWJv
YXJkKE5TUGFzdGVib2FyZCopIHsgfTsKICNpZmRlZiBCVUlMRElOR19PTl9USUdFUgogICAgIHZp
cnR1YWwgTlNBcnJheSogcGFzdGVib2FyZFR5cGVzRm9yU2VsZWN0aW9uKEZyYW1lKikgeyByZXR1
cm4gMDsgfQogI2VuZGlmCkluZGV4OiBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgJKHJldmlz
aW9uIDY3MTE2KQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjA0LDYgKzIwNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAg
ICB2aXJ0dWFsIGJvb2wgY2FuSGFuZGxlUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmKSBj
b25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5TaG93TUlNRVR5cGUoY29uc3QgU3Ry
aW5nJiBNSU1FVHlwZSkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuU2hvd01J
TUVUeXBlQXNIVE1MKGNvbnN0IFN0cmluZyYgTUlNRVR5cGUpIGNvbnN0ID0gMDsKICAgICAgICAg
dmlydHVhbCBib29sIHJlcHJlc2VudGF0aW9uRXhpc3RzRm9yVVJMU2NoZW1lKGNvbnN0IFN0cmlu
ZyYgVVJMU2NoZW1lKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgU3RyaW5nIGdlbmVyYXRl
ZE1JTUVUeXBlRm9yVVJMU2NoZW1lKGNvbnN0IFN0cmluZyYgVVJMU2NoZW1lKSBjb25zdCA9IDA7
CiAKSW5kZXg6IFdlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmgJKHJldmlzaW9uIDY3MTE2KQorKysgV2ViQ29yZS9wYWdl
L0VkaXRvckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMiArMzcsMTYgQEAKICNpZiBQ
TEFURk9STShNQUMpCiAjaWZkZWYgX19PQkpDX18KIEBjbGFzcyBOU0FycmF5OworQGNsYXNzIE5T
QXR0cmlidXRlZFN0cmluZzsKIEBjbGFzcyBOU0RhdGE7CitAY2xhc3MgTlNQYXN0ZWJvYXJkOwog
QGNsYXNzIE5TU3RyaW5nOwogQGNsYXNzIE5TVVJMOwogI2Vsc2UKIGNsYXNzIE5TQXJyYXk7Citj
bGFzcyBOU0F0dHJpYnV0ZWRTdHJpbmc7CiBjbGFzcyBOU0RhdGE7CitjbGFzcyBOU1Bhc3RlYm9h
cmQ7CiBjbGFzcyBOU1N0cmluZzsKIGNsYXNzIE5TVVJMOwogI2VuZGlmCkBAIC01MCw3ICs1NCw5
IEBAIGNsYXNzIE5TVVJMOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEFyY2hpdmVS
ZXNvdXJjZTsKIGNsYXNzIENTU1N0eWxlRGVjbGFyYXRpb247CitjbGFzcyBEb2N1bWVudEZyYWdt
ZW50OwogY2xhc3MgRWRpdENvbW1hbmQ7CiBjbGFzcyBFZGl0b3I7CiBjbGFzcyBFbGVtZW50OwpA
QCAtMTQ3LDYgKzE1Myw4IEBAIHB1YmxpYzoKIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICB2aXJ0
dWFsIE5TU3RyaW5nKiB1c2VyVmlzaWJsZVN0cmluZyhOU1VSTCopID0gMDsKKyAgICB2aXJ0dWFs
IERvY3VtZW50RnJhZ21lbnQqIGRvY3VtZW50RnJvbUF0dHJpYnV0ZWRTdHJpbmcoTlNBdHRyaWJ1
dGVkU3RyaW5nKiwgVmVjdG9yPEFyY2hpdmVSZXNvdXJjZSo+JikgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBzZXRJbnNlcnRpb25QYXN0ZWJvYXJkKE5TUGFzdGVib2FyZCopID0gMDsKICNpZmRlZiBC
VUlMRElOR19PTl9USUdFUgogICAgIHZpcnR1YWwgTlNBcnJheSogcGFzdGVib2FyZFR5cGVzRm9y
U2VsZWN0aW9uKEZyYW1lKikgPSAwOwogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1Bh
c3RlYm9hcmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuaAko
cmV2aXNpb24gNjcxMTYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzksNiArNzksNyBAQCBjbGFzcyBIaXRUZXN0UmVzdWx0OwogY2xhc3MgS1VS
TDsKIGNsYXNzIE5vZGU7CiBjbGFzcyBSYW5nZTsKK2NsYXNzIEFyY2hpdmVSZXNvdXJjZTsKICAg
ICAKIGNsYXNzIFBhc3RlYm9hcmQgOiBwdWJsaWMgTm9uY29weWFibGUgewogcHVibGljOgpAQCAt
OTYsNiArOTcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCB3cml0ZUltYWdlKE5vZGUqLCBjb25zdCBL
VVJMJiwgY29uc3QgU3RyaW5nJiB0aXRsZSk7CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIHZvaWQg
d3JpdGVGaWxlV3JhcHBlckFzUlRGREF0dGFjaG1lbnQoTlNGaWxlV3JhcHBlciopOworICAgIFBh
c3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJk
KEZyYW1lKiBmcmFtZSwgUGFzc1JlZlB0cjxSYW5nZT4gY29udGV4dCwgYm9vbCBhbGxvd1BsYWlu
VGV4dCk7CiAjZW5kaWYKICAgICB2b2lkIGNsZWFyKCk7CiAgICAgYm9vbCBjYW5TbWFydFJlcGxh
Y2UoKTsKQEAgLTExOCw2ICsxMjAsOCBAQCBwcml2YXRlOgogI2lmIFBMQVRGT1JNKE1BQykKICAg
ICBQYXN0ZWJvYXJkKE5TUGFzdGVib2FyZCAqKTsKICAgICBSZXRhaW5QdHI8TlNQYXN0ZWJvYXJk
PiBtX3Bhc3RlYm9hcmQ7CisgICAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBkb2N1bWVu
dEZyYWdtZW50V2l0aEltYWdlUmVzb3VyY2UoRnJhbWUqIGZyYW1lLCBQYXNzUmVmUHRyPEFyY2hp
dmVSZXNvdXJjZT4gcmVzb3VyY2UpOworICAgIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4g
ZG9jdW1lbnRGcmFnbWVudFdpdGhSdGYoRnJhbWUqIGZyYW1lLCBOU1N0cmluZyogcGJvYXJkVHlw
ZSk7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFdJTikKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
bWFjL1Bhc3RlYm9hcmRNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
UGFzdGVib2FyZE1hYy5tbQkocmV2aXNpb24gNjcxMTYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL21h
Yy9QYXN0ZWJvYXJkTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxNiArMzEsMjIgQEAKICNp
bXBvcnQgIkRPTVJhbmdlSW50ZXJuYWwuaCIKICNpbXBvcnQgIkRvY3VtZW50LmgiCiAjaW1wb3J0
ICJEb2N1bWVudEZyYWdtZW50LmgiCisjaW1wb3J0ICJEb2N1bWVudExvYWRlci5oIgogI2ltcG9y
dCAiRWRpdG9yLmgiCiAjaW1wb3J0ICJFZGl0b3JDbGllbnQuaCIKICNpbXBvcnQgIkZyYW1lLmgi
CisjaW1wb3J0ICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2ltcG9ydCAiSGl0VGVzdFJlc3VsdC5o
IgorI2ltcG9ydCAiSFRNTEFuY2hvckVsZW1lbnQuaCIKKyNpbXBvcnQgIkhUTUxOYW1lcy5oIgog
I2ltcG9ydCAiSW1hZ2UuaCIKICNpbXBvcnQgIktVUkwuaCIKICNpbXBvcnQgIkxlZ2FjeVdlYkFy
Y2hpdmUuaCIKICNpbXBvcnQgIkxvYWRlck5TVVJMRXh0cmFzLmgiCiAjaW1wb3J0ICJNSU1FVHlw
ZVJlZ2lzdHJ5LmgiCisjaW1wb3J0ICJQYWdlLmgiCiAjaW1wb3J0ICJSZW5kZXJJbWFnZS5oIgor
I2ltcG9ydCAiVGV4dC5oIgogI2ltcG9ydCAiV2ViQ29yZU5TU3RyaW5nRXh0cmFzLmgiCiAjaW1w
b3J0ICJtYXJrdXAuaCIKIApAQCAtMTM5LDcgKzE0NSw4IEBAIHZvaWQgUGFzdGVib2FyZDo6d3Jp
dGVTZWxlY3Rpb24oTlNQYXN0ZWIKICAgICAgICAgUGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9h
cmQoKTsgLy8gSW5pdGlhbGl6ZXMgcGFzdGVib2FyZCB0eXBlcy4KICAgICBBU1NFUlQoc2VsZWN0
ZWRSYW5nZSk7CiAgICAgCi0gICAgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5n
ID0gW1tbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBfaW5pdFdpdGhET01SYW5nZTpraXQoc2Vs
ZWN0ZWRSYW5nZSldIGF1dG9yZWxlYXNlXTsKKyAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJp
YnV0ZWRTdHJpbmcgPSBbW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5n
OnNlbGVjdGVkUmFuZ2UtPnRleHQoKV0gYXV0b3JlbGVhc2VdOworCiAjaWZkZWYgQlVJTERJTkdf
T05fVElHRVIKICAgICAvLyA0OTMwMTk3OiBNYWlsIG92ZXJyaWRlcyBbV2ViSFRNTFZpZXcgcGFz
dGVib2FyZFR5cGVzRm9yU2VsZWN0aW9uXSBpbiBvcmRlciB0byBhZGQgYW5vdGhlciB0eXBlIHRv
IHRoZSBwYXN0ZWJvYXJkCiAgICAgLy8gYWZ0ZXIgV2ViS2l0IGRvZXMuICBPbiBUaWdlciB3ZSBt
dXN0IGNhbGwgdGhpcyBmdW5jdGlvbiBzbyB0aGF0IE1haWwgY29kZSB3aWxsIGJlIGV4ZWN1dGVk
LCBtZWFuaW5nIHRoYXQgCkBAIC0zNjIsNyArMzY5LDE5MyBAQCBTdHJpbmcgUGFzdGVib2FyZDo6
cGxhaW5UZXh0KEZyYW1lKiBmcmFtCiAgICAgCiAgICAgcmV0dXJuIFN0cmluZygpOyAKIH0KKyAg
ICAKK1Bhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gUGFzdGVib2FyZDo6ZG9jdW1lbnRGcmFn
bWVudFdpdGhJbWFnZVJlc291cmNlKEZyYW1lKiBmcmFtZSwgUGFzc1JlZlB0cjxBcmNoaXZlUmVz
b3VyY2U+IHJlc291cmNlKQoreworICAgIGlmIChEb2N1bWVudExvYWRlciogbG9hZGVyID0gZnJh
bWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpKQorICAgICAgICBsb2FkZXItPmFkZEFyY2hp
dmVSZXNvdXJjZShyZXNvdXJjZS5nZXQoKSk7CisKKyAgICBSZWZQdHI8RWxlbWVudD4gaW1hZ2VF
bGVtZW50ID0gZnJhbWUtPmRvY3VtZW50KCktPmNyZWF0ZUVsZW1lbnQoSFRNTE5hbWVzOjppbWdU
YWcsIGZhbHNlKTsKKyAgICBpZiAoIWltYWdlRWxlbWVudCkKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgCisgICAgTlNVUkwgKlVSTCA9IHJlc291cmNlLT51cmwoKTsKKyAgICBpbWFnZUVsZW1lbnQt
PnNldEF0dHJpYnV0ZShIVE1MTmFtZXM6OnNyY0F0dHIsIFtVUkwgaXNGaWxlVVJMXSA/IFtVUkwg
YWJzb2x1dGVTdHJpbmddIDogcmVzb3VyY2UtPnVybCgpKTsKKyAgICBSZWZQdHI8RG9jdW1lbnRG
cmFnbWVudD4gZnJhZ21lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+Y3JlYXRlRG9jdW1lbnRGcmFn
bWVudCgpOworICAgIGlmIChmcmFnbWVudCkgeworICAgICAgICBFeGNlcHRpb25Db2RlIGVjOwor
ICAgICAgICBmcmFnbWVudC0+YXBwZW5kQ2hpbGQoaW1hZ2VFbGVtZW50LCBlYyk7CisgICAgICAg
IHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7ICAgICAgIAorICAgIH0KKyAgICByZXR1cm4gMDsK
K30KKworUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBQYXN0ZWJvYXJkOjpkb2N1bWVudEZy
YWdtZW50V2l0aFJ0ZihGcmFtZSogZnJhbWUsIE5TU3RyaW5nKiBwYm9hcmRUeXBlKQoreworICAg
IGlmICghZnJhbWUgfHwgIWZyYW1lLT5kb2N1bWVudCgpIHx8ICFmcmFtZS0+ZG9jdW1lbnQoKS0+
aXNIVE1MRG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgTlNBdHRyaWJ1
dGVkU3RyaW5nICpzdHJpbmcgPSBuaWw7CisgICAgaWYgKHBib2FyZFR5cGUgPT0gTlNSVEZEUGJv
YXJkVHlwZSkKKyAgICAgICAgc3RyaW5nID0gW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGlu
aXRXaXRoUlRGRDpbbV9wYXN0ZWJvYXJkLmdldCgpIGRhdGFGb3JUeXBlOk5TUlRGRFBib2FyZFR5
cGVdIGRvY3VtZW50QXR0cmlidXRlczpOVUxMXTsKKyAgICBpZiAoc3RyaW5nID09IG5pbCkKKyAg
ICAgICAgc3RyaW5nID0gW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoUlRGOltt
X3Bhc3RlYm9hcmQuZ2V0KCkgZGF0YUZvclR5cGU6TlNSVEZQYm9hcmRUeXBlXSBkb2N1bWVudEF0
dHJpYnV0ZXM6TlVMTF07CisgICAgaWYgKHN0cmluZyA9PSBuaWwpCisgICAgICAgIHJldHVybiBu
aWw7CisKKyAgICBib29sIHdhc0RlZmVycmluZ0NhbGxiYWNrcyA9IGZyYW1lLT5wYWdlKCktPmRl
ZmVyc0xvYWRpbmcoKTsKKyAgICBpZiAoIXdhc0RlZmVycmluZ0NhbGxiYWNrcykKKyAgICAgICAg
ZnJhbWUtPnBhZ2UoKS0+c2V0RGVmZXJzTG9hZGluZyh0cnVlKTsKKworICAgIFZlY3RvcjxBcmNo
aXZlUmVzb3VyY2UqPiByZXNvdXJjZXM7CisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZy
YWdtZW50ID0gZnJhbWUtPmVkaXRvcigpLT5jbGllbnQoKS0+ZG9jdW1lbnRGcm9tQXR0cmlidXRl
ZFN0cmluZyhzdHJpbmcsIHJlc291cmNlcyk7CisKKyAgICBzaXplX3Qgc2l6ZSA9IHJlc291cmNl
cy5zaXplKCk7CisgICAgaWYgKHNpemUpIHsKKyAgICAgICAgRG9jdW1lbnRMb2FkZXIqIGxvYWRl
ciA9IGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKTsKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgICAgICBsb2FkZXItPmFkZEFyY2hpdmVS
ZXNvdXJjZShyZXNvdXJjZXNbaV0pOyAgICAKKyAgICB9CisKKyAgICBpZiAoIXdhc0RlZmVycmlu
Z0NhbGxiYWNrcykKKyAgICAgICAgZnJhbWUtPnBhZ2UoKS0+c2V0RGVmZXJzTG9hZGluZyhmYWxz
ZSk7CisgICAgICAgCisgICAgW3N0cmluZyByZWxlYXNlXTsKKyAgICByZXR1cm4gZnJhZ21lbnQu
cmVsZWFzZSgpOworfQorCisjZGVmaW5lIFdlYkRhdGFQcm90b2NvbFNjaGVtZSBAIndlYmtpdC1m
YWtlLXVybCIKKworc3RhdGljIE5TVVJMKiB1bmlxdWVVUkxXaXRoUmVsYXRpdmVQYXJ0KE5TU3Ry
aW5nICpyZWxhdGl2ZVBhcnQpCit7CisgICAgQ0ZVVUlEUmVmIFVVSURSZWYgPSBDRlVVSURDcmVh
dGUoa0NGQWxsb2NhdG9yRGVmYXVsdCk7CisgICAgTlNTdHJpbmcgKlVVSURTdHJpbmcgPSAoTlNT
dHJpbmcgKilDRlVVSURDcmVhdGVTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgVVVJRFJlZik7
CisgICAgQ0ZSZWxlYXNlKFVVSURSZWYpOworICAgIE5TVVJMICpVUkwgPSBbTlNVUkwgVVJMV2l0
aFN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVAOi8vJUAvJUAiLCBXZWJEYXRh
UHJvdG9jb2xTY2hlbWUsIFVVSURTdHJpbmcsIHJlbGF0aXZlUGFydF1dOworICAgIENGUmVsZWFz
ZShVVUlEU3RyaW5nKTsKKyAgICAKKyAgICByZXR1cm4gVVJMOworfQorICAgIAorUGFzc1JlZlB0
cjxEb2N1bWVudEZyYWdtZW50PiBQYXN0ZWJvYXJkOjpkb2N1bWVudEZyYWdtZW50RnJvbVBhc3Rl
Ym9hcmQoRnJhbWUqIGZyYW1lLCBQYXNzUmVmUHRyPFJhbmdlPiBjb250ZXh0LCBib29sIGFsbG93
UGxhaW5UZXh0KQoreworICAgIE5TQXJyYXkgKnR5cGVzID0gW21fcGFzdGVib2FyZC5nZXQoKSB0
eXBlc107CisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50OworICAgIAorICAg
IGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6V2ViQXJjaGl2ZVBib2FyZFR5cGVdKSB7CisgICAg
ICAgIFJlZlB0cjxMZWdhY3lXZWJBcmNoaXZlPiBjb3JlQXJjaGl2ZSA9IExlZ2FjeVdlYkFyY2hp
dmU6OmNyZWF0ZShTaGFyZWRCdWZmZXI6OndyYXBOU0RhdGEoW21fcGFzdGVib2FyZC5nZXQoKSBk
YXRhRm9yVHlwZTpXZWJBcmNoaXZlUGJvYXJkVHlwZV0pLmdldCgpKTsKKyAgICAgICAgaWYgKGNv
cmVBcmNoaXZlKSB7CisgICAgICAgICAgICBSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiBtYWluUmVz
b3VyY2UgPSBjb3JlQXJjaGl2ZS0+bWFpblJlc291cmNlKCk7CisgICAgICAgICAgICBpZiAobWFp
blJlc291cmNlKSB7CisgICAgICAgICAgICAgICAgTlNTdHJpbmcgKk1JTUVUeXBlID0gbWFpblJl
c291cmNlLT5taW1lVHlwZSgpOworICAgICAgICAgICAgICAgIGlmICghZnJhbWUgfHwgIWZyYW1l
LT5kb2N1bWVudCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAg
ICAgICBpZiAoZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+Y2FuU2hvd01JTUVUeXBlQXNIVE1M
KE1JTUVUeXBlKSkgeworICAgICAgICAgICAgICAgICAgICBOU1N0cmluZyAqbWFya3VwU3RyaW5n
ID0gW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhEYXRhOlttYWluUmVzb3VyY2UtPmRhdGEoKS0+
Y3JlYXRlTlNEYXRhKCkgYXV0b3JlbGVhc2VdIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5n
XTsKKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IHNlZW1zIHBvb3IgZm9ybSB0byBkbyB0
aGlzIGFzIGEgc2lkZSBlZmZlY3Qgb2YgZ2V0dGluZyBhIGRvY3VtZW50IGZyYWdtZW50CisgICAg
ICAgICAgICAgICAgICAgIGlmIChEb2N1bWVudExvYWRlciogbG9hZGVyID0gZnJhbWUtPmxvYWRl
cigpLT5kb2N1bWVudExvYWRlcigpKQorICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyLT5h
ZGRBbGxBcmNoaXZlUmVzb3VyY2VzKGNvcmVBcmNoaXZlLmdldCgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9t
TWFya3VwKGZyYW1lLT5kb2N1bWVudCgpLCBtYXJrdXBTdHJpbmcsIG1haW5SZXNvdXJjZS0+dXJs
KCksIEZyYWdtZW50U2NyaXB0aW5nTm90QWxsb3dlZCk7CisgICAgICAgICAgICAgICAgICAgIFtt
YXJrdXBTdHJpbmcgcmVsZWFzZV07CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChNSU1FVHlw
ZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGUoTUlNRVR5cGUpKQorICAgICAgICAg
ICAgICAgICAgIGZyYWdtZW50ID0gZG9jdW1lbnRGcmFnbWVudFdpdGhJbWFnZVJlc291cmNlKGZy
YW1lLCBtYWluUmVzb3VyY2UpOyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGZyYWdtZW50KQorICAgICAgICAgICAgcmV0dXJuIGZyYWdt
ZW50LnJlbGVhc2UoKTsKKyAgICB9IAorICAgIAorICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmpl
Y3Q6TlNGaWxlbmFtZXNQYm9hcmRUeXBlXSkgeworICAgICAgICBOU0FycmF5KiBwYXRocyA9IFtt
X3Bhc3RlYm9hcmQuZ2V0KCkgcHJvcGVydHlMaXN0Rm9yVHlwZTpOU0ZpbGVuYW1lc1Bib2FyZFR5
cGVdOworICAgICAgICBOU0VudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBbcGF0aHMgb2JqZWN0RW51
bWVyYXRvcl07CisgICAgICAgIE5TU3RyaW5nKiBwYXRoOworICAgICAgICBWZWN0b3I8IFJlZlB0
cjxOb2RlPiA+IHJlZk5vZGVzVmVjdG9yOworICAgICAgICBWZWN0b3I8Tm9kZSo+IG5vZGVzVmVj
dG9yOworCisgICAgICAgIHdoaWxlICgocGF0aCA9IFtlbnVtZXJhdG9yIG5leHRPYmplY3RdKSAh
PSBuaWwpIHsKKyAgICAgICAgICAgIC8vIE5vbi1pbWFnZSBmaWxlIHR5cGVzOyBfd2ViX3VzZXJW
aXNpYmxlU3RyaW5nIGlzIGFwcHJvcHJpYXRlIGhlcmUgYmVjYXVzZSB0aGlzIHdpbGwKKyAgICAg
ICAgICAgIC8vIGJlIHBhc3RlZCBhcyB2aXNpYmxlIHRleHQuCisgICAgICAgICAgICBOU1N0cmlu
ZyAqdXJsID0gZnJhbWUtPmVkaXRvcigpLT5jbGllbnQoKS0+dXNlclZpc2libGVTdHJpbmcoW05T
VVJMIGZpbGVVUkxXaXRoUGF0aDpwYXRoXSk7CisgICAgICAgICAgICBSZWZQdHI8Tm9kZT4gdGV4
dE5vZGUgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+Y3JlYXRlVGV4dE5vZGUodXJsKTsKKyAgICAgICAg
ICAgIHJlZk5vZGVzVmVjdG9yLmFwcGVuZCh0ZXh0Tm9kZS5nZXQoKSk7CisgICAgICAgICAgICBu
b2Rlc1ZlY3Rvci5hcHBlbmQodGV4dE5vZGUuZ2V0KCkpOworICAgICAgICB9CisgICAgICAgIGZy
YWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tTm9kZXMoZnJhbWUtPmRvY3VtZW50KCksIG5vZGVz
VmVjdG9yKTsKKyAgICAgICAgaWYgKGZyYWdtZW50ICYmIGZyYWdtZW50LT5maXJzdENoaWxkKCkp
CisgICAgICAgICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOworICAgIH0KIAorICAgIGlm
IChbdHlwZXMgY29udGFpbnNPYmplY3Q6TlNIVE1MUGJvYXJkVHlwZV0pIHsKKyAgICAgICAgTlNT
dHJpbmcgKkhUTUxTdHJpbmcgPSBbbV9wYXN0ZWJvYXJkLmdldCgpIHN0cmluZ0ZvclR5cGU6TlNI
VE1MUGJvYXJkVHlwZV07CisgICAgICAgIC8vIFRoaXMgaXMgYSBoYWNrIHRvIG1ha2UgTWljcm9z
b2Z0J3MgSFRNTCBwYXN0ZWJvYXJkIGRhdGEgd29yay4gU2VlIDM3Nzg3ODUuCisgICAgICAgIGlm
IChbSFRNTFN0cmluZyBoYXNQcmVmaXg6QCJWZXJzaW9uOiJdKSB7CisgICAgICAgICAgICBOU1Jh
bmdlIHJhbmdlID0gW0hUTUxTdHJpbmcgcmFuZ2VPZlN0cmluZzpAIjxodG1sIiBvcHRpb25zOk5T
Q2FzZUluc2Vuc2l0aXZlU2VhcmNoXTsKKyAgICAgICAgICAgIGlmIChyYW5nZS5sb2NhdGlvbiAh
PSBOU05vdEZvdW5kKSB7CisgICAgICAgICAgICAgICAgSFRNTFN0cmluZyA9IFtIVE1MU3RyaW5n
IHN1YnN0cmluZ0Zyb21JbmRleDpyYW5nZS5sb2NhdGlvbl07CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKFtIVE1MU3RyaW5nIGxlbmd0aF0gIT0gMCAmJgorICAgICAgICAg
ICAgKGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKGZyYW1lLT5kb2N1bWVudCgp
LCBIVE1MU3RyaW5nLCAiIiwgRnJhZ21lbnRTY3JpcHRpbmdOb3RBbGxvd2VkKSkpCisgICAgICAg
ICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOworICAgIH0KKyAgICAKKyAgICBpZiAoW3R5
cGVzIGNvbnRhaW5zT2JqZWN0Ok5TUlRGRFBib2FyZFR5cGVdICYmCisgICAgICAgIChmcmFnbWVu
dCA9IGRvY3VtZW50RnJhZ21lbnRXaXRoUnRmKGZyYW1lLCBOU1JURkRQYm9hcmRUeXBlKSkpCisg
ICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKKyAgICAKKyAgICBpZiAoW3R5cGVzIGNv
bnRhaW5zT2JqZWN0Ok5TUlRGUGJvYXJkVHlwZV0gJiYKKyAgICAgICAgKGZyYWdtZW50ID0gZG9j
dW1lbnRGcmFnbWVudFdpdGhSdGYoZnJhbWUsIE5TUlRGUGJvYXJkVHlwZSkpKQorICAgICAgICBy
ZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOworICAgIAorICAgIGlmIChbdHlwZXMgY29udGFpbnNP
YmplY3Q6TlNUSUZGUGJvYXJkVHlwZV0gJiYKKyAgICAgICAgKGZyYWdtZW50ID0gZG9jdW1lbnRG
cmFnbWVudFdpdGhJbWFnZVJlc291cmNlKGZyYW1lLCBBcmNoaXZlUmVzb3VyY2U6OmNyZWF0ZShT
aGFyZWRCdWZmZXI6OndyYXBOU0RhdGEoW1tbbV9wYXN0ZWJvYXJkLmdldCgpIGRhdGFGb3JUeXBl
Ok5TVElGRlBib2FyZFR5cGVdIGNvcHldIGF1dG9yZWxlYXNlXSksIHVuaXF1ZVVSTFdpdGhSZWxh
dGl2ZVBhcnQoQCJpbWFnZS50aWZmIiksICJpbWFnZS90aWZmIiwgIiIsICIiKSkpKQorICAgICAg
ICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOworICAgICAgICAKKyAgICBpZiAoW3R5cGVzIGNv
bnRhaW5zT2JqZWN0Ok5TUERGUGJvYXJkVHlwZV0gJiYKKyAgICAgICAgKGZyYWdtZW50ID0gZG9j
dW1lbnRGcmFnbWVudFdpdGhJbWFnZVJlc291cmNlKGZyYW1lLCBBcmNoaXZlUmVzb3VyY2U6OmNy
ZWF0ZShTaGFyZWRCdWZmZXI6OndyYXBOU0RhdGEoW1tbbV9wYXN0ZWJvYXJkLmdldCgpIGRhdGFG
b3JUeXBlOk5TUERGUGJvYXJkVHlwZV0gY29weV0gYXV0b3JlbGVhc2VdKSwgdW5pcXVlVVJMV2l0
aFJlbGF0aXZlUGFydChAImFwcGxpY2F0aW9uLnBkZiIpLCAiYXBwbGljYXRpb24vcGRmIiwgIiIs
ICIiKSkpKQorICAgICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOworICAgIAorI2lmIGRl
ZmluZWQoQlVJTERJTkdfT05fVElHRVIpIHx8IGRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkK
KyAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TUElDVFBib2FyZFR5cGVdICYmCisgICAg
ICAgIChmcmFnbWVudCA9IGRvY3VtZW50RnJhZ21lbnRXaXRoSW1hZ2VSZXNvdXJjZShmcmFtZSwg
QXJjaGl2ZVJlc291cmNlOjpjcmVhdGUoU2hhcmVkQnVmZmVyOjp3cmFwTlNEYXRhKFtbW21fcGFz
dGVib2FyZC5nZXQoKSBkYXRhRm9yVHlwZTpOU1BJQ1RQYm9hcmRUeXBlXSBjb3B5XSBhdXRvcmVs
ZWFzZV0pLCB1bmlxdWVVUkxXaXRoUmVsYXRpdmVQYXJ0KEAiaW1hZ2UucGljdCIpLCAiaW1hZ2Uv
cGljdCIsICIiLCAiIikpKSkKKyAgICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKKyNl
bmRpZgorICAgIAorICAgIC8vIE9ubHkgMTAuNSBhbmQgaGlnaGVyIHN1cHBvcnQgc2V0dGluZyBh
bmQgcmV0cmlldmluZyBwYXN0ZWJvYXJkIHR5cGVzIHdpdGggVVRJcywgYnV0IHdlIGRvbid0IGJl
bGlldmUKKyAgICAvLyB0aGF0IGFueSBhcHBsaWNhdGlvbnMgb24gVGlnZXIgcHV0IHR5cGVzIGZv
ciB3aGljaCB3ZSBvbmx5IGhhdmUgYSBVVEksIGxpa2UgUE5HLCBvbiB0aGUgcGFzdGVib2FyZC4K
KyAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0OihOU1N0cmluZyopa1VUVHlwZVBOR10gJiYK
KyAgICAgICAgKGZyYWdtZW50ID0gZG9jdW1lbnRGcmFnbWVudFdpdGhJbWFnZVJlc291cmNlKGZy
YW1lLCBBcmNoaXZlUmVzb3VyY2U6OmNyZWF0ZShTaGFyZWRCdWZmZXI6OndyYXBOU0RhdGEoW1tb
bV9wYXN0ZWJvYXJkLmdldCgpIGRhdGFGb3JUeXBlOihOU1N0cmluZyopa1VUVHlwZVBOR10gY29w
eV0gYXV0b3JlbGVhc2VdKSwgdW5pcXVlVVJMV2l0aFJlbGF0aXZlUGFydChAImltYWdlLnBuZyIp
LCAiaW1hZ2UvcG5nIiwgIiIsICIiKSkpKQorICAgICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFz
ZSgpOworICAgIAorICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6TlNVUkxQYm9hcmRUeXBl
XSkgeworICAgICAgICBOU1VSTCAqVVJMID0gW05TVVJMIFVSTEZyb21QYXN0ZWJvYXJkOm1fcGFz
dGVib2FyZC5nZXQoKV07CisgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1
bWVudCgpOworICAgICAgICBBU1NFUlQoZG9jdW1lbnQpOworICAgICAgICBpZiAoIWRvY3VtZW50
KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIFJlZlB0cjxFbGVtZW50PiBhbmNob3Ig
PSBkb2N1bWVudC0+Y3JlYXRlRWxlbWVudChIVE1MTmFtZXM6OmFUYWcsIGZhbHNlKTsKKyAgICAg
ICAgTlNTdHJpbmcgKlVSTFN0cmluZyA9IFtVUkwgYWJzb2x1dGVTdHJpbmddOyAvLyBPcmlnaW5h
bCBkYXRhIGlzIEFTQ0lJLW9ubHksIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gcHJlY29tcG9zZS4K
KyAgICAgICAgaWYgKFtVUkxTdHJpbmcgbGVuZ3RoXSA9PSAwKQorICAgICAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICAgICAgTlNTdHJpbmcgKlVSTFRpdGxlU3RyaW5nID0gW1ttX3Bhc3RlYm9hcmQu
Z2V0KCkgc3RyaW5nRm9yVHlwZTpXZWJVUkxOYW1lUGJvYXJkVHlwZV0gcHJlY29tcG9zZWRTdHJp
bmdXaXRoQ2Fub25pY2FsTWFwcGluZ107CisgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAg
ICAgIGFuY2hvci0+c2V0QXR0cmlidXRlKEhUTUxOYW1lczo6aHJlZkF0dHIsIFVSTFN0cmluZyk7
CisgICAgICAgIGFuY2hvci0+YXBwZW5kQ2hpbGQoZG9jdW1lbnQtPmNyZWF0ZVRleHROb2RlKFVS
TFRpdGxlU3RyaW5nKSwgZWMpOworICAgICAgICBmcmFnbWVudCA9IGRvY3VtZW50LT5jcmVhdGVE
b2N1bWVudEZyYWdtZW50KCk7CisgICAgICAgIGlmIChmcmFnbWVudCkgeworICAgICAgICAgICAg
ZnJhZ21lbnQtPmFwcGVuZENoaWxkKGFuY2hvciwgZWMpOworICAgICAgICAgICAgcmV0dXJuIGZy
YWdtZW50LnJlbGVhc2UoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChhbGxvd1BsYWlu
VGV4dCAmJiBbdHlwZXMgY29udGFpbnNPYmplY3Q6TlNTdHJpbmdQYm9hcmRUeXBlXSAmJgorICAg
ICAgICAoZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNvbnRleHQuZ2V0KCksIFtb
bV9wYXN0ZWJvYXJkLmdldCgpIHN0cmluZ0ZvclR5cGU6TlNTdHJpbmdQYm9hcmRUeXBlXSBwcmVj
b21wb3NlZFN0cmluZ1dpdGhDYW5vbmljYWxNYXBwaW5nXSkpKQorICAgICAgICByZXR1cm4gZnJh
Z21lbnQucmVsZWFzZSgpOworCisgICAgcmV0dXJuIDA7Cit9CisgICAgCiBQYXNzUmVmUHRyPERv
Y3VtZW50RnJhZ21lbnQ+IFBhc3RlYm9hcmQ6OmRvY3VtZW50RnJhZ21lbnQoRnJhbWUqIGZyYW1l
LCBQYXNzUmVmUHRyPFJhbmdlPiBjb250ZXh0LCBib29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBj
aG9zZVBsYWluVGV4dCkKIHsKICAgICBOU0FycmF5ICp0eXBlcyA9IFttX3Bhc3RlYm9hcmQuZ2V0
KCkgdHlwZXNdOwpJbmRleDogV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDY3MTE5KQorKysgV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwyNyBAQAorMjAxMC0wOS0wOSAgRW5yaWNhIENhc3VjY2kgIDxl
bnJpY2FAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFBhc3RlIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBpbiBXZWJDb3JlIGxpa2UgQ29w
eSBhbmQgQ3V0IGZvciBNYWMgYWxzby4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQ1NDk0CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83NjYwNTM3Pgor
CisgICAgICAgIE9uIHRoZSBNYWMgcGxhdGZvcm0sIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUg
cGFzdGUgb3BlcmF0aW9uIGlzIGFsbCBkb25lCisgICAgICAgIGF0IHRoZSBXZWJLaXQgbGV2ZWwu
IEluIG9yZGVyIHRvIHN1cHBvcnQgaXQgb24gV2ViS2l0MiBpdCBpcyBuZWNlc3NhcnkgdG8KKyAg
ICAgICAgcmVmYWN0b3IgdGhlIGNvZGUgYW5kIG1vdmUgdGhpcyBmdW5jdGlvbmFsaXR5IGF0IHRo
ZSBsZXZlbCBvZiBXZWJDb3JlIGxpa2UKKyAgICAgICAgd2UgYWxyZWFkeSBoYXZlIG9uIFdpbmRv
d3MuCisgICAgICAgIFRoZSBvcmlnaW5hbCBjb2RlIHJlbGllcyBvbiBzb21lIGluIEFwcEtpdCBm
dW5jdGlvbnMgdGhhdCBjYWxsIGJhY2sgaW50bworICAgICAgICBXZWJLaXQgY2F1c2luZyBwcm9i
bGVtcyBpbiBXZWJLaXQyLiBBbGwgdGhpcyBmdW5jdGlvbmFsaXR5IGhhcyBiZWVuIG1vdmVkCisg
ICAgICAgIGF0IHRoZSBsZXZlbCBvZiB0aGUgZWRpdG9yIGNsaWVudCB3aGVyZSBpdCBjYW4gYmUg
ZGVhbHQgd2l0aCBhcHByb3ByaWF0ZWx5LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JD
bGllbnQ6OmRvY3VtZW50RnJvbUF0dHJpYnV0ZWRTdHJpbmcpOiBBZGRlZC4KKyAgICAgICAgKFdl
YktpdDo6V2ViRWRpdG9yQ2xpZW50OjpzZXRJbnNlcnRpb25QYXN0ZWJvYXJkKTogQWRkZWQuCisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaDoKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNhblNob3dNSU1FVHlw
ZUFzSFRNTCk6IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
RnJhbWVMb2FkZXJDbGllbnQuaDoKKwogMjAxMC0wOS0wOSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJr
aXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFuZGVycyBDYXJsc3Nvbi4KSW5kZXg6IFdl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGll
bnQuY3BwCShyZXZpc2lvbiA2NzExNikKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw4IEBA
CiAjaW5jbHVkZSAiV2ViUGFnZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2VLaW5k
cy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0FyY2hpdmVS
ZXNvdXJjZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnRGcmFnbWVudC5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvRWRpdENvbW1hbmQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9IVE1MSW5wdXRFbGVtZW50Lmg+CkBAIC0zMTMsNiArMzE1LDE3IEBA
IE5TU3RyaW5nKiBXZWJFZGl0b3JDbGllbnQ6OnVzZXJWaXNpYmxlU3QKICAgICByZXR1cm4gbmls
OwogfQogCitEb2N1bWVudEZyYWdtZW50KiBXZWJFZGl0b3JDbGllbnQ6OmRvY3VtZW50RnJvbUF0
dHJpYnV0ZWRTdHJpbmcoTlNBdHRyaWJ1dGVkU3RyaW5nKiwgVmVjdG9yPEFyY2hpdmVSZXNvdXJj
ZSo+JikKK3sKKyAgICAvLyBGSVhNRTogYWRkIGNvZGUgaGVyZSB0byBjcmVhdGUgZmFrZSBXZWJW
aWV3IGFuZCBsb2FkIFdlYktpdCAxCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4g
MDsKK30KKwordm9pZCBXZWJFZGl0b3JDbGllbnQ6OnNldEluc2VydGlvblBhc3RlYm9hcmQoTlNQ
YXN0ZWJvYXJkKikKK3sgICAgICAKK30KKwogI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCiBOU0Fy
cmF5KiBXZWJFZGl0b3JDbGllbnQ6OnBhc3RlYm9hcmRUeXBlc0ZvclNlbGVjdGlvbihGcmFtZSop
CiB7CkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xp
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkVkaXRvckNsaWVudC5oCShyZXZpc2lvbiA2NzExNikKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtOTIsNiAr
OTIsOCBAQCBwcml2YXRlOgogCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIHZpcnR1YWwgTlNTdHJp
bmcqIHVzZXJWaXNpYmxlU3RyaW5nKE5TVVJMKik7CisgICAgdmlydHVhbCBXZWJDb3JlOjpEb2N1
bWVudEZyYWdtZW50KiBkb2N1bWVudEZyb21BdHRyaWJ1dGVkU3RyaW5nKE5TQXR0cmlidXRlZFN0
cmluZyosIFZlY3RvcjxXZWJDb3JlOjpBcmNoaXZlUmVzb3VyY2UqPiYpOworICAgIHZpcnR1YWwg
dm9pZCBzZXRJbnNlcnRpb25QYXN0ZWJvYXJkKE5TUGFzdGVib2FyZCopOwogI2lmZGVmIEJVSUxE
SU5HX09OX1RJR0VSCiAgICAgdmlydHVhbCBOU0FycmF5KiBwYXN0ZWJvYXJkVHlwZXNGb3JTZWxl
Y3Rpb24oV2ViQ29yZTo6RnJhbWUqKTsKICNlbmRpZgpJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3Bw
CShyZXZpc2lvbiA2NzExNikKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJGcmFtZUxvYWRlckNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5MCw2ICs3OTAsMTEg
QEAgYm9vbCBXZWJGcmFtZUxvYWRlckNsaWVudDo6Y2FuU2hvd01JTUVUeQogICAgIHJldHVybiB0
cnVlOwogfQogCitib29sIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjYW5TaG93TUlNRVR5cGVBc0hU
TUwoY29uc3QgU3RyaW5nJiBNSU1FVHlwZSkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KwogYm9vbCBXZWJGcmFtZUxvYWRlckNsaWVudDo6cmVwcmVzZW50YXRpb25FeGlzdHNGb3JVUkxT
Y2hlbWUoY29uc3QgU3RyaW5nJiBVUkxTY2hlbWUpIGNvbnN0CiB7CiAgICAgbm90SW1wbGVtZW50
ZWQoKTsKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxv
YWRlckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5oCShyZXZpc2lvbiA2NzExNikKKysrIFdlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTAsNiArMTUwLDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB2aXJ0dWFsIGJv
b2wgY2FuSGFuZGxlUmVxdWVzdChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKSBjb25z
dDsKICAgICB2aXJ0dWFsIGJvb2wgY2FuU2hvd01JTUVUeXBlKGNvbnN0IFdURjo6U3RyaW5nJiBN
SU1FVHlwZSkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGNhblNob3dNSU1FVHlwZUFzSFRNTChj
b25zdCBTdHJpbmcmIE1JTUVUeXBlKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcmVwcmVzZW50
YXRpb25FeGlzdHNGb3JVUkxTY2hlbWUoY29uc3QgV1RGOjpTdHJpbmcmIFVSTFNjaGVtZSkgY29u
c3Q7CiAgICAgdmlydHVhbCBXVEY6OlN0cmluZyBnZW5lcmF0ZWRNSU1FVHlwZUZvclVSTFNjaGVt
ZShjb25zdCBXVEY6OlN0cmluZyYgVVJMU2NoZW1lKSBjb25zdDsKICAgICAKSW5kZXg6IFdlYktp
dC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZp
c2lvbiA2NzExOSkKKysrIFdlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMzAgQEAKKzIwMTAtMDktMDkgIEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXN0
ZSBzaG91bGQgYmUgaW1wbGVtZW50ZWQgaW4gV2ViQ29yZSBsaWtlIENvcHkgYW5kIEN1dCBmb3Ig
TWFjIGFsc28uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD00NTQ5NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzY2MDUzNz4KKworICAgICAgICBPbiB0
aGUgTWFjIHBsYXRmb3JtLCB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIHBhc3RlIG9wZXJhdGlv
biBpcyBhbGwgZG9uZQorICAgICAgICBhdCB0aGUgV2ViS2l0IGxldmVsLiBJbiBvcmRlciB0byBz
dXBwb3J0IGl0IG9uIFdlYktpdDIgaXQgaXMgbmVjZXNzYXJ5IHRvCisgICAgICAgIHJlZmFjdG9y
IHRoZSBjb2RlIGFuZCBtb3ZlIHRoaXMgZnVuY3Rpb25hbGl0eSBhdCB0aGUgbGV2ZWwgb2YgV2Vi
Q29yZSBsaWtlCisgICAgICAgIHdlIGFscmVhZHkgaGF2ZSBvbiBXaW5kb3dzLgorICAgICAgICBU
aGUgb3JpZ2luYWwgY29kZSByZWxpZXMgb24gc29tZSBpbiBBcHBLaXQgZnVuY3Rpb25zIHRoYXQg
Y2FsbCBiYWNrIGludG8KKyAgICAgICAgV2ViS2l0IGNhdXNpbmcgcHJvYmxlbXMgaW4gV2ViS2l0
Mi4gQWxsIHRoaXMgZnVuY3Rpb25hbGl0eSBoYXMgYmVlbiBtb3ZlZAorICAgICAgICBhdCB0aGUg
bGV2ZWwgb2YgdGhlIGVkaXRvciBjbGllbnQgd2hlcmUgaXQgY2FuIGJlIGRlYWx0IHdpdGggYXBw
cm9wcmlhdGVseS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5o
OgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbToKKyAgICAgICAg
KGV4Y2x1ZGVkRWxlbWVudHNGb3JBdHRyaWJ1dGVkU3RyaW5nQ29udmVyc2lvbik6CisgICAgICAg
IChXZWJFZGl0b3JDbGllbnQ6OmRvY3VtZW50RnJvbUF0dHJpYnV0ZWRTdHJpbmcpOiBBZGRlZC4K
KyAgICAgICAgKFdlYkVkaXRvckNsaWVudDo6c2V0SW5zZXJ0aW9uUGFzdGVib2FyZCk6IEFkZGVk
LgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lmg6CisgICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW06CisgICAgICAgIChX
ZWJGcmFtZUxvYWRlckNsaWVudDo6Y2FuU2hvd01JTUVUeXBlQXNIVE1MKTogUmUtaW1wbGVtZW50
ZWQgYXQgdGhlIGxldmVsCisgICAgICAgIG9mIHRoZSBlZGl0b3IgY2xpZW50LgorICAgICAgICAq
IFdlYlZpZXcvV2ViSFRNTFZpZXcubW06IFJlbW92ZWQgcGFzdGUgbWV0aG9kLgorCiAyMDEwLTA5
LTA4ICBNT1JJVEEgSGFqaW1lICA8bW9ycml0YUBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IFRvbnkgQ2hhbmcuCkluZGV4OiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVk
aXRvckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
RWRpdG9yQ2xpZW50LmgJKHJldmlzaW9uIDY3MTE2KQorKysgV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJFZGl0b3JDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsOCBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZFNldFNlbGVjdGlvblR5cGVzRm9yUGFzdGVib2Fy
ZCgpOwogCiAgICAgdmlydHVhbCBOU1N0cmluZyogdXNlclZpc2libGVTdHJpbmcoTlNVUkwqKTsK
KyAgICB2aXJ0dWFsIFdlYkNvcmU6OkRvY3VtZW50RnJhZ21lbnQqIGRvY3VtZW50RnJvbUF0dHJp
YnV0ZWRTdHJpbmcoTlNBdHRyaWJ1dGVkU3RyaW5nKiwgVmVjdG9yPFdlYkNvcmU6OkFyY2hpdmVS
ZXNvdXJjZSo+Jik7CisgICAgdmlydHVhbCB2b2lkIHNldEluc2VydGlvblBhc3RlYm9hcmQoTlNQ
YXN0ZWJvYXJkKik7CiAjaWZkZWYgQlVJTERJTkdfT05fVElHRVIKICAgICB2aXJ0dWFsIE5TQXJy
YXkqIHBhc3RlYm9hcmRUeXBlc0ZvclNlbGVjdGlvbihXZWJDb3JlOjpGcmFtZSopOwogI2VuZGlm
CkluZGV4OiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQko
cmV2aXNpb24gNjcxMTYpCisrKyBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNs
aWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2ltcG9ydCAiV2ViRWRp
dG9yQ2xpZW50LmgiCiAKICNpbXBvcnQgIkRPTUNTU1N0eWxlRGVjbGFyYXRpb25JbnRlcm5hbC5o
IgorI2ltcG9ydCAiRE9NRG9jdW1lbnRGcmFnbWVudEludGVybmFsLmgiCiAjaW1wb3J0ICJET01I
VE1MRWxlbWVudEludGVybmFsLmgiCiAjaW1wb3J0ICJET01IVE1MSW5wdXRFbGVtZW50SW50ZXJu
YWwuaCIKICNpbXBvcnQgIkRPTUhUTUxUZXh0QXJlYUVsZW1lbnRJbnRlcm5hbC5oIgpAQCAtNDgs
OCArNDksMTEgQEAKICNpbXBvcnQgIldlYktpdFZlcnNpb25DaGVja3MuaCIKICNpbXBvcnQgIldl
YkxvY2FsaXphYmxlU3RyaW5ncy5oIgogI2ltcG9ydCAiV2ViTlNVUkxFeHRyYXMuaCIKKyNpbXBv
cnQgIldlYlJlc291cmNlSW50ZXJuYWwuaCIKICNpbXBvcnQgIldlYlZpZXdJbnRlcm5hbC5oIgor
I2ltcG9ydCA8V2ViQ29yZS9BcmNoaXZlUmVzb3VyY2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvRG9j
dW1lbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRG9jdW1lbnRGcmFnbWVudC5oPgogI2ltcG9ydCA8
V2ViQ29yZS9FZGl0QWN0aW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0VkaXRDb21tYW5kLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL0hUTUxJbnB1dEVsZW1lbnQuaD4KQEAgLTczLDYgKzc3LDExIEBAIHVz
aW5nIG5hbWVzcGFjZSBXVEY7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKK0BpbnRl
cmZhY2UgTlNBdHRyaWJ1dGVkU3RyaW5nIChXZWJOU0F0dHJpYnV0ZWRTdHJpbmdEZXRhaWxzKQor
LSAoaWQpX2luaXRXaXRoRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2U7CistIChET01Eb2N1bWVu
dEZyYWdtZW50ICopX2RvY3VtZW50RnJvbVJhbmdlOihOU1JhbmdlKXJhbmdlIGRvY3VtZW50OihE
T01Eb2N1bWVudCAqKWRvY3VtZW50IGRvY3VtZW50QXR0cmlidXRlczooTlNEaWN0aW9uYXJ5ICop
ZGljdCBzdWJyZXNvdXJjZXM6KE5TQXJyYXkgKiopc3VicmVzb3VyY2VzOworQGVuZAorCiBzdGF0
aWMgV2ViVmlld0luc2VydEFjdGlvbiBraXQoRWRpdG9ySW5zZXJ0QWN0aW9uIGNvcmVBY3Rpb24p
CiB7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYlZpZXdJbnNlcnRBY3Rpb24+KGNvcmVBY3Rp
b24pOwpAQCAtMzMwLDYgKzMzOSw1MiBAQCBOU1N0cmluZyogV2ViRWRpdG9yQ2xpZW50Ojp1c2Vy
VmlzaWJsZVN0CiAgICAgcmV0dXJuIFtVUkwgX3dlYl91c2VyVmlzaWJsZVN0cmluZ107CiB9CiAK
K3N0YXRpYyBOU0FycmF5KiBleGNsdWRlZEVsZW1lbnRzRm9yQXR0cmlidXRlZFN0cmluZ0NvbnZl
cnNpb24oKQoreworICAgIHN0YXRpYyBOU0FycmF5ICplbGVtZW50cyA9IG5pbDsKKyAgICBpZiAo
ZWxlbWVudHMgPT0gbmlsKSB7CisgICAgICAgIGVsZW1lbnRzID0gW1tOU0FycmF5IGFsbG9jXSBp
bml0V2l0aE9iamVjdHM6CisgICAgICAgICAgICAgICAgICAgIC8vIE9taXQgc3R5bGUgc2luY2Ug
d2Ugd2FudCBzdHlsZSB0byBiZSBpbmxpbmUgc28gdGhlIGZyYWdtZW50IGNhbiBiZSBlYXNpbHkg
aW5zZXJ0ZWQuCisgICAgICAgICAgICAgICAgICAgIEAic3R5bGUiLAorICAgICAgICAgICAgICAg
ICAgICAvLyBPbWl0IHhtbCBzbyB0aGUgcmVzdWx0IGlzIG5vdCBYSFRNTC4KKyAgICAgICAgICAg
ICAgICAgICAgQCJ4bWwiLCAKKyAgICAgICAgICAgICAgICAgICAgLy8gT21pdCB0YWdzIHRoYXQg
d2lsbCBnZXQgc3RyaXBwZWQgd2hlbiBjb252ZXJ0ZWQgdG8gYSBmcmFnbWVudCBhbnl3YXkuCisg
ICAgICAgICAgICAgICAgICAgIEAiZG9jdHlwZSIsIEAiaHRtbCIsIEAiaGVhZCIsIEAiYm9keSIs
CisgICAgICAgICAgICAgICAgICAgIC8vIE9taXQgZGVwcmVjYXRlZCB0YWdzLgorICAgICAgICAg
ICAgICAgICAgICBAImFwcGxldCIsIEAiYmFzZWZvbnQiLCBAImNlbnRlciIsIEAiZGlyIiwgQCJm
b250IiwgQCJpc2luZGV4IiwgQCJtZW51IiwgQCJzIiwgQCJzdHJpa2UiLCBAInUiLAorICAgICAg
ICAgICAgICAgICAgICAvLyBPbWl0IG9iamVjdCBzbyBubyBmaWxlIGF0dGFjaG1lbnRzIGFyZSBw
YXJ0IG9mIHRoZSBmcmFnbWVudC4KKyAgICAgICAgICAgICAgICAgICAgQCJvYmplY3QiLCBuaWxd
OworICAgICAgICBDRlJldGFpbihlbGVtZW50cyk7CisgICAgfQorICAgIHJldHVybiBlbGVtZW50
czsKK30KKworRG9jdW1lbnRGcmFnbWVudCogV2ViRWRpdG9yQ2xpZW50Ojpkb2N1bWVudEZyb21B
dHRyaWJ1dGVkU3RyaW5nKE5TQXR0cmlidXRlZFN0cmluZyogc3RyaW5nLCBWZWN0b3I8QXJjaGl2
ZVJlc291cmNlKj4mIHJlc291cmNlcykKK3sKKyAgICBOU0RpY3Rpb25hcnkgKmRpY3Rpb25hcnkg
PSBbW05TRGljdGlvbmFyeSBhbGxvY10gaW5pdFdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNsdWRlZEVsZW1lbnRzRm9yQXR0cmli
dXRlZFN0cmluZ0NvbnZlcnNpb24oKSwgTlNFeGNsdWRlZEVsZW1lbnRzRG9jdW1lbnRBdHRyaWJ1
dGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV93ZWJWaWV3LCBA
IldlYlJlc291cmNlSGFuZGxlciIsIG5pbF07CisgICAgCisgICAgTlNBcnJheSogczsKKyAgICBE
T01Eb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCA9IFtzdHJpbmcgX2RvY3VtZW50RnJvbVJhbmdl
Ok5TTWFrZVJhbmdlKDAsIFtzdHJpbmcgbGVuZ3RoXSkgCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudDpbW21fd2ViVmlldyBtYWlu
RnJhbWVdIERPTURvY3VtZW50XSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZG9jdW1lbnRBdHRyaWJ1dGVzOmRpY3Rpb25hcnkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VicmVzb3VyY2VzOiZzXTsKKyAgICBO
U0VudW1lcmF0b3IgKmUgPSBbcyBvYmplY3RFbnVtZXJhdG9yXTsKKyAgICBXZWJSZXNvdXJjZSAq
cjsKKyAgICB3aGlsZSAoKHIgPSBbZSBuZXh0T2JqZWN0XSkpIHsKKyAgICAgICAgUmVmUHRyPEFy
Y2hpdmVSZXNvdXJjZT4gIGFyID0gW3IgX2NvcmVSZXNvdXJjZV07CisgICAgICAgIHJlc291cmNl
cy5hcHBlbmQoYXIuZ2V0KCkpOworICAgIH0KKyAgICBbZGljdGlvbmFyeSByZWxlYXNlXTsKKyAg
ICByZXR1cm4gY29yZShmcmFnbWVudCk7Cit9CisKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50OjpzZXRJ
bnNlcnRpb25QYXN0ZWJvYXJkKE5TUGFzdGVib2FyZCogcGFzdGVib2FyZCkKK3sKKyAgICBbbV93
ZWJWaWV3IF9zZXRJbnNlcnRpb25QYXN0ZWJvYXJkOnBhc3RlYm9hcmRdOworfQorCiAjaWZkZWYg
QlVJTERJTkdfT05fVElHRVIKIE5TQXJyYXkqIFdlYkVkaXRvckNsaWVudDo6cGFzdGVib2FyZFR5
cGVzRm9yU2VsZWN0aW9uKEZyYW1lKiBzZWxlY3RlZEZyYW1lKQogewpJbmRleDogV2ViS2l0L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuaAkocmV2aXNpb24g
NjcxMTYpCisrKyBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE3Nyw2ICsxNzcsNyBAQCBwcml2YXRlOgogCiAgICAgdmly
dHVhbCBib29sIGNhbkhhbmRsZVJlcXVlc3QoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
JikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGNhblNob3dNSU1FVHlwZShjb25zdCBXVEY6OlN0
cmluZyYgTUlNRVR5cGUpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBjYW5TaG93TUlNRVR5cGVB
c0hUTUwoY29uc3QgV1RGOjpTdHJpbmcmIE1JTUVUeXBlKSBjb25zdDsKICAgICB2aXJ0dWFsIGJv
b2wgcmVwcmVzZW50YXRpb25FeGlzdHNGb3JVUkxTY2hlbWUoY29uc3QgV1RGOjpTdHJpbmcmIFVS
TFNjaGVtZSkgY29uc3Q7CiAgICAgdmlydHVhbCBXVEY6OlN0cmluZyBnZW5lcmF0ZWRNSU1FVHlw
ZUZvclVSTFNjaGVtZShjb25zdCBXVEY6OlN0cmluZyYgVVJMU2NoZW1lKSBjb25zdDsKIApJbmRl
eDogV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50
Lm1tCShyZXZpc2lvbiA2NzExNikKKysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJh
bWVMb2FkZXJDbGllbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTEwMTgsNiArMTAxOCwxMSBAQCBi
b29sIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjYW5TaG93TUlNRVR5CiAgICAgcmV0dXJuIFtnZXRX
ZWJWaWV3KG1fd2ViRnJhbWUuZ2V0KCkpIF9jYW5TaG93TUlNRVR5cGU6TUlNRVR5cGVdOwogfQog
Citib29sIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjYW5TaG93TUlNRVR5cGVBc0hUTUwoY29uc3Qg
U3RyaW5nJiBNSU1FVHlwZSkgY29uc3QKK3sKKyAgICByZXR1cm4gW1dlYlZpZXcgY2FuU2hvd01J
TUVUeXBlQXNIVE1MOk1JTUVUeXBlXTsKK30KKwogYm9vbCBXZWJGcmFtZUxvYWRlckNsaWVudDo6
cmVwcmVzZW50YXRpb25FeGlzdHNGb3JVUkxTY2hlbWUoY29uc3QgU3RyaW5nJiBVUkxTY2hlbWUp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIFtXZWJWaWV3IF9yZXByZXNlbnRhdGlvbkV4aXN0c0ZvclVS
TFNjaGVtZTpVUkxTY2hlbWVdOwpJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQkocmV2
aXNpb24gNjcxMTYpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHdvcmtp
bmcgY29weSkKQEAgLTI1MjksNiArMjUyOSw3IEBAIFdFQkNPUkVfQ09NTUFORChhbGlnbkxlZnQp
CiBXRUJDT1JFX0NPTU1BTkQoYWxpZ25SaWdodCkKIFdFQkNPUkVfQ09NTUFORChjb3B5KQogV0VC
Q09SRV9DT01NQU5EKGN1dCkKK1dFQkNPUkVfQ09NTUFORChwYXN0ZSkKIFdFQkNPUkVfQ09NTUFO
RChkZWxldGUpCiBXRUJDT1JFX0NPTU1BTkQoZGVsZXRlQmFja3dhcmQpCiBXRUJDT1JFX0NPTU1B
TkQoZGVsZXRlQmFja3dhcmRCeURlY29tcG9zaW5nUHJldmlvdXNDaGFyYWN0ZXIpCkBAIC01MTYz
LDI0ICs1MTY0LDYgQEAgLSAoV2ViRnJhbWUgKilfZnJhbWUKICAgICByZXR1cm4gW19wcml2YXRl
LT5kYXRhU291cmNlIHdlYkZyYW1lXTsKIH0KIAotLSAodm9pZClwYXN0ZTooaWQpc2VuZGVyCi17
Ci0gICAgQ09NTUFORF9QUk9MT0dVRQotCi0gICAgUmV0YWluUHRyPFdlYkhUTUxWaWV3PiBzZWxm
UHJvdGVjdG9yID0gc2VsZjsKLSAgICBSZWZQdHI8RnJhbWU+IGNvcmVGcmFtZSA9IGNvcmUoW3Nl
bGYgX2ZyYW1lXSk7Ci0gICAgaWYgKCFjb3JlRnJhbWUpCi0gICAgICAgIHJldHVybjsKLSAgICBp
ZiAoY29yZUZyYW1lLT5lZGl0b3IoKS0+dHJ5REhUTUxQYXN0ZSgpKQotICAgICAgICByZXR1cm47
IC8vIERIVE1MIGRpZCB0aGUgd2hvbGUgb3BlcmF0aW9uCi0gICAgaWYgKCFjb3JlRnJhbWUtPmVk
aXRvcigpLT5jYW5QYXN0ZSgpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKGNvcmVGcmFtZS0+
c2VsZWN0aW9uKCktPmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpCi0gICAgICAgIFtzZWxmIF9w
YXN0ZVdpdGhQYXN0ZWJvYXJkOltOU1Bhc3RlYm9hcmQgZ2VuZXJhbFBhc3RlYm9hcmRdIGFsbG93
UGxhaW5UZXh0OllFU107Ci0gICAgZWxzZQotICAgICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLT5w
YXN0ZUFzUGxhaW5UZXh0QnlwYXNzaW5nREhUTUwoKTsKLX0KLQogLSAodm9pZCljbG9zZUlmTm90
Q3VycmVudFZpZXcKIHsKICAgICBpZiAoW1tbc2VsZiBfZnJhbWVdIGZyYW1lVmlld10gZG9jdW1l
bnRWaWV3XSAhPSBzZWxmKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67111</attachid>
            <date>2010-09-09 16:18:42 -0700</date>
            <delta_ts>2010-09-10 14:25:21 -0700</delta_ts>
            <desc>Patch2</desc>
            <filename>bug45494.txt</filename>
            <type>text/plain</type>
            <size>35085</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NzExOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDEgQEAKKzIwMTAtMDktMDkgIEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQ
YXN0ZSBzaG91bGQgYmUgaW1wbGVtZW50ZWQgaW4gV2ViQ29yZSBsaWtlIENvcHkgYW5kIEN1dCBm
b3IgTWFjIGFsc28uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD00NTQ5NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzY2MDUzNz4KKworICAgICAgICBP
biB0aGUgTWFjIHBsYXRmb3JtLCB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIHBhc3RlIG9wZXJh
dGlvbiBpcyBhbGwgZG9uZQorICAgICAgICBhdCB0aGUgV2ViS2l0IGxldmVsLiBJbiBvcmRlciB0
byBzdXBwb3J0IGl0IG9uIFdlYktpdDIgaXQgaXMgbmVjZXNzYXJ5IHRvCisgICAgICAgIHJlZmFj
dG9yIHRoZSBjb2RlIGFuZCBtb3ZlIHRoaXMgZnVuY3Rpb25hbGl0eSBhdCB0aGUgbGV2ZWwgb2Yg
V2ViQ29yZSBsaWtlCisgICAgICAgIHdlIGFscmVhZHkgaGF2ZSBvbiBXaW5kb3dzLgorICAgICAg
ICBUaGUgb3JpZ2luYWwgY29kZSByZWxpZXMgb24gc29tZSBpbiBBcHBLaXQgZnVuY3Rpb25zIHRo
YXQgY2FsbCBiYWNrIGludG8KKyAgICAgICAgV2ViS2l0IGNhdXNpbmcgcHJvYmxlbXMgaW4gV2Vi
S2l0Mi4gQWxsIHRoaXMgZnVuY3Rpb25hbGl0eSBoYXMgYmVlbiBtb3ZlZAorICAgICAgICBhdCB0
aGUgbGV2ZWwgb2YgdGhlIGVkaXRvciBjbGllbnQgd2hlcmUgaXQgY2FuIGJlIGRlYWx0IHdpdGgg
YXBwcm9wcmlhdGVseS4KKyAgICAgICAgCisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzaG91bGRJbnNlcnRGcmFnbWVudCk6CisgICAgICAg
ICogZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tOiBleHRlbmRlZCB0byBzdXBwb3J0IE1haWwgc3Bl
Y2lmaWMgc2NlbmFyaW9zLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpwYXN0ZVdpdGhQYXN0
ZWJvYXJkKToKKyAgICAgICAgKiBsb2FkZXIvRW1wdHlDbGllbnRzLmg6CisgICAgICAgIChXZWJD
b3JlOjpFbXB0eUZyYW1lTG9hZGVyQ2xpZW50OjpjYW5TaG93TUlNRVR5cGVBc0hUTUwpOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5RWRpdG9yQ2xpZW50Ojpkb2N1bWVudEZyb21BdHRy
aWJ1dGVkU3RyaW5nKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpFbXB0eUVkaXRvckNsaWVu
dDo6c2V0SW5zZXJ0aW9uUGFzdGVib2FyZCk6IEFkZGVkIHRvIHN1cHBvcnQgTWFpbC4KKyAgICAg
ICAgKiBsb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaDoKKyAgICAgICAgKiBwYWdlL0VkaXRvckNs
aWVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL1Bhc3RlYm9hcmQuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6
OndyaXRlU2VsZWN0aW9uKTogcmVwbGFjZWQgY2FsbCB0byBBcHBraXQgd2l0aCBvbmUgdGhhdAor
ICAgICAgICBkb2Vzbid0IGNhbGxsIGJhY2sgaW50byBXZWJLaXQuCisgICAgICAgIChXZWJDb3Jl
OjpQYXN0ZWJvYXJkOjpkb2N1bWVudEZyYWdtZW50V2l0aEltYWdlUmVzb3VyY2UpOiBSZS1pbXBs
ZW1lbnRlZCBhdCB0aGUKKyAgICAgICAgV2ViQ29yZSBsZXZlbAorICAgICAgICAoV2ViQ29yZTo6
UGFzdGVib2FyZDo6ZG9jdW1lbnRGcmFnbWVudFdpdGhSdGYpOiBSZS1pbXBsZW1lbnRlZCBhdCB0
aGUgV2ViQ29yZQorICAgICAgICBsZXZlbC4KKyAgICAgICAgKFdlYkNvcmU6OnVuaXF1ZVVSTFdp
dGhSZWxhdGl2ZVBhcnQpOiBBZGRlZAorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6ZG9j
dW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkKTogUmUtaW1wbGVtZW50ZWQgYXQgdGhlCisgICAg
ICAgIFdlYkNvcmUgbGV2ZWwuCisKIDIwMTAtMDktMDkgIFJvYmVydCBIb2dhbiAgPHJvYmVydEB3
ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFuZHJlYXMgS2xpbmcuCkluZGV4OiBX
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcv
RWRpdG9yLmNwcAkocmV2aXNpb24gNjcxMTYpCisrKyBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzM5LDYgKzMzOSw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZUFz
UGxhaW5UZXh0V2l0aFBhc3RlYm8KICAgICAgICAgcGFzdGVBc1BsYWluVGV4dCh0ZXh0LCBjYW5T
bWFydFJlcGxhY2VXaXRoUGFzdGVib2FyZChwYXN0ZWJvYXJkKSk7CiB9CiAKKyNpZiAhUExBVEZP
Uk0oTUFDKQogdm9pZCBFZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCogcGFz
dGVib2FyZCwgYm9vbCBhbGxvd1BsYWluVGV4dCkKIHsKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdl
ID0gc2VsZWN0ZWRSYW5nZSgpOwpAQCAtMzQ3LDYgKzM0OCw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0
ZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm8KICAgICBpZiAoZnJhZ21lbnQgJiYgc2hvdWxkSW5zZXJ0
RnJhZ21lbnQoZnJhZ21lbnQsIHJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb25QYXN0ZWQpKQogICAg
ICAgICBwYXN0ZUFzRnJhZ21lbnQoZnJhZ21lbnQsIGNhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJv
YXJkKHBhc3RlYm9hcmQpLCBjaG9zZVBsYWluVGV4dCk7CiB9CisjZW5kaWYKIAogYm9vbCBFZGl0
b3I6OmNhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQp
CiB7CkBAIC0zNTcsMTAgKzM1OSwxMiBAQCBib29sIEVkaXRvcjo6c2hvdWxkSW5zZXJ0RnJhZ21l
bnQoUGFzc1JlCiB7CiAgICAgaWYgKCFjbGllbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAKLSAgICBOb2RlKiBjaGlsZCA9IGZyYWdtZW50LT5maXJzdENoaWxkKCk7Ci0gICAg
aWYgKGNoaWxkICYmIGZyYWdtZW50LT5sYXN0Q2hpbGQoKSA9PSBjaGlsZCAmJiBjaGlsZC0+aXND
aGFyYWN0ZXJEYXRhTm9kZSgpKQotICAgICAgICByZXR1cm4gY2xpZW50KCktPnNob3VsZEluc2Vy
dFRleHQoc3RhdGljX2Nhc3Q8Q2hhcmFjdGVyRGF0YSo+KGNoaWxkKS0+ZGF0YSgpLCByZXBsYWNp
bmdET01SYW5nZS5nZXQoKSwgZ2l2ZW5BY3Rpb24pOworICAgIAorICAgIGlmIChmcmFnbWVudCkg
eworICAgICAgICBOb2RlKiBjaGlsZCA9IGZyYWdtZW50LT5maXJzdENoaWxkKCk7CisgICAgICAg
IGlmIChjaGlsZCAmJiBmcmFnbWVudC0+bGFzdENoaWxkKCkgPT0gY2hpbGQgJiYgY2hpbGQtPmlz
Q2hhcmFjdGVyRGF0YU5vZGUoKSkKKyAgICAgICAgICAgIHJldHVybiBjbGllbnQoKS0+c2hvdWxk
SW5zZXJ0VGV4dChzdGF0aWNfY2FzdDxDaGFyYWN0ZXJEYXRhKj4oY2hpbGQpLT5kYXRhKCksIHJl
cGxhY2luZ0RPTVJhbmdlLmdldCgpLCBnaXZlbkFjdGlvbik7ICAgICAgICAKKyAgICB9CiAKICAg
ICByZXR1cm4gY2xpZW50KCktPnNob3VsZEluc2VydE5vZGUoZnJhZ21lbnQuZ2V0KCksIHJlcGxh
Y2luZ0RPTVJhbmdlLmdldCgpLCBnaXZlbkFjdGlvbik7CiB9CkBAIC0xMTkwLDggKzExOTQsNiBA
QCB2b2lkIEVkaXRvcjo6Y29weSgpCiAgICAgZGlkV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQo
KTsKIH0KIAotI2lmICFQTEFURk9STShNQUMpCi0KIHZvaWQgRWRpdG9yOjpwYXN0ZSgpCiB7CiAg
ICAgQVNTRVJUKG1fZnJhbWUtPmRvY3VtZW50KCkpOwpAQCAtMTIwOCw4ICsxMjEwLDYgQEAgdm9p
ZCBFZGl0b3I6OnBhc3RlKCkKICAgICBsb2FkZXItPnNldEFsbG93U3RhbGVSZXNvdXJjZXMoZmFs
c2UpOwogfQogCi0jZW5kaWYKLQogdm9pZCBFZGl0b3I6OnBhc3RlQXNQbGFpblRleHQoKQogewog
ICAgIGlmICh0cnlESFRNTFBhc3RlKCkpCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRv
ck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQko
cmV2aXNpb24gNjcxMTYpCisrKyBXZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMjgsOCArMjgsMTMgQEAKIAogI2ltcG9ydCAiQ2xpcGJvYXJkTWFjLmgi
CiAjaW1wb3J0ICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgorI2ltcG9ydCAiRG9jdW1lbnRGcmFn
bWVudC5oIgorI2ltcG9ydCAiRWRpdG9yLmgiCisjaW1wb3J0ICJFZGl0b3JDbGllbnQuaCIKICNp
bXBvcnQgIkZyYW1lLmgiCiAjaW1wb3J0ICJGcmFtZVZpZXcuaCIKKyNpbXBvcnQgIlBhc3RlYm9h
cmQuaCIKKyNpbXBvcnQgIlJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKQEAgLTUzLDIwICs1OCwzMCBAQCB2b2lkIEVkaXRvcjo6c2hvd0NvbG9yUGFu
ZWwoKQogICAgIFtbTlNBcHBsaWNhdGlvbiBzaGFyZWRBcHBsaWNhdGlvbl0gb3JkZXJGcm9udENv
bG9yUGFuZWw6bmlsXTsKIH0KIAotLy8gRklYTUU6IFdlIHdhbnQgdG8gdXNlIHRoZSBwbGF0Zm9y
bS1pbmRlcGVuZGVudCBjb2RlIGluc3RlYWQuIEJ1dCB3aGVuIHdlIGxhc3QKLS8vIHRyaWVkIHRv
IGRvIHNvIGl0IHNlZW1lZCB0aGF0IHdlIGZpcnN0IG5lZWQgdG8gbW92ZSBtb3JlIG9mIHRoZSBs
b2dpYyBmcm9tCi0vLyAtW1dlYkhUTUxWaWV3LmNwcCBfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0
ZWJvYXJkXSBpbnRvIFBhc3RlYm9hcmRNYWMuCi0KLXZvaWQgRWRpdG9yOjpwYXN0ZSgpCit2b2lk
IEVkaXRvcjo6cGFzdGVXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBib29s
IGFsbG93UGxhaW5UZXh0KQogewotICAgIEFTU0VSVChtX2ZyYW1lLT5kb2N1bWVudCgpKTsKLSAg
ICBGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52aWV3KCk7Ci0gICAgaWYgKCF2aWV3KQotICAg
ICAgICByZXR1cm47Ci0gICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGxvYWRlciA9IG1fZnJhbWUt
PmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7Ci0gICAgbG9hZGVyLT5zZXRBbGxv
d1N0YWxlUmVzb3VyY2VzKHRydWUpOwotICAgIFt2aWV3LT5kb2N1bWVudFZpZXcoKSB0cnlUb1Bl
cmZvcm06QHNlbGVjdG9yKHBhc3RlOikgd2l0aDpuaWxdOwotICAgIGxvYWRlci0+c2V0QWxsb3dT
dGFsZVJlc291cmNlcyhmYWxzZSk7CisgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVjdGVk
UmFuZ2UoKTsKKyAgICBtX2ZyYW1lLT5lZGl0b3IoKS0+Y2xpZW50KCktPnNldEluc2VydGlvblBh
c3RlYm9hcmQoW05TUGFzdGVib2FyZCBnZW5lcmFsUGFzdGVib2FyZF0pOworI2lmICFkZWZpbmVk
KEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAh
ZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCisgICAgUmVmUHRyPERvY3VtZW50RnJh
Z21lbnQ+IGZyYWdtZW50ID0gcGFzdGVib2FyZC0+ZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJv
YXJkKG1fZnJhbWUsIHJhbmdlLCBhbGxvd1BsYWluVGV4dCk7CisgICAgaWYgKGZyYWdtZW50ICYm
IHNob3VsZEluc2VydEZyYWdtZW50KGZyYWdtZW50LCByYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9u
UGFzdGVkKSkKKyAgICAgICAgcGFzdGVBc0ZyYWdtZW50KGZyYWdtZW50LCBjYW5TbWFydFJlcGxh
Y2VXaXRoUGFzdGVib2FyZChwYXN0ZWJvYXJkKSwgZmFsc2UpOworI2Vsc2UKKyAgICAvLyBNYWls
IGlzIGlnbm9yaW5nIHRoZSBmcmFtZW50IHBhc3NlZCB0byB0aGUgZGVsZWdhdGUgYW5kIGNyZWF0
ZXMgYSBuZXcgb25lLgorICAgIC8vIFdlIHdhbnQgdG8gYXZvaWQgY3JlYXRpbmcgdGhlIGZyYWdt
ZW50IHR3aWNlLgorICAgIGlmIChhcHBsaWNhdGlvbklzQXBwbGVNYWlsKCkpIHsKKyAgICAgICAg
aWYgKHNob3VsZEluc2VydEZyYWdtZW50KE5VTEwsIHJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb25Q
YXN0ZWQpKSB7CisgICAgICAgICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQg
PSBwYXN0ZWJvYXJkLT5kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQobV9mcmFtZSwgcmFu
Z2UsIGFsbG93UGxhaW5UZXh0KTsKKyAgICAgICAgICAgIGlmIChmcmFnbWVudCkKKyAgICAgICAg
ICAgICAgICBwYXN0ZUFzRnJhZ21lbnQoZnJhZ21lbnQsIGNhblNtYXJ0UmVwbGFjZVdpdGhQYXN0
ZWJvYXJkKHBhc3RlYm9hcmQpLCBmYWxzZSk7CisgICAgICAgIH0gICAgICAgIAorICAgIH0gZWxz
ZSB7CisgICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PmZyYWdtZW50ID0gcGFzdGVib2Fy
ZC0+ZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkKG1fZnJhbWUsIHJhbmdlLCBhbGxvd1Bs
YWluVGV4dCk7CisgICAgICAgIGlmIChmcmFnbWVudCAmJiBzaG91bGRJbnNlcnRGcmFnbWVudChm
cmFnbWVudCwgcmFuZ2UsIEVkaXRvckluc2VydEFjdGlvblBhc3RlZCkpCisgICAgICAgICAgICBw
YXN0ZUFzRnJhZ21lbnQoZnJhZ21lbnQsIGNhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJkKHBh
c3RlYm9hcmQpLCBmYWxzZSk7CisgICAgfQorI2VuZGlmCisgICAgbV9mcmFtZS0+ZWRpdG9yKCkt
PmNsaWVudCgpLT5zZXRJbnNlcnRpb25QYXN0ZWJvYXJkKG5pbCk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCShyZXZpc2lvbiA2NzExNikKKysr
IFdlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDUsNiAr
MzA1LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGNhbkhhbmRsZVJlcXVlc3QoY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFs
IGJvb2wgY2FuU2hvd01JTUVUeXBlKGNvbnN0IFN0cmluZyYpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgdmlydHVhbCBib29sIGNhblNob3dNSU1FVHlwZUFzSFRNTChjb25zdCBTdHJpbmcm
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCByZXByZXNlbnRhdGlv
bkV4aXN0c0ZvclVSTFNjaGVtZShjb25zdCBTdHJpbmcmKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQogICAgIHZpcnR1YWwgU3RyaW5nIGdlbmVyYXRlZE1JTUVUeXBlRm9yVVJMU2NoZW1lKGNvbnN0
IFN0cmluZyYpIGNvbnN0IHsgcmV0dXJuICIiOyB9CiAKQEAgLTQzNCw2ICs0MzUsOCBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIG1hcmtlZFRleHRBYmFuZG9uZWQoRnJhbWUqKSB7IH0KIAog
ICAgIHZpcnR1YWwgTlNTdHJpbmcqIHVzZXJWaXNpYmxlU3RyaW5nKE5TVVJMKikgeyByZXR1cm4g
MDsgfQorICAgIHZpcnR1YWwgRG9jdW1lbnRGcmFnbWVudCogZG9jdW1lbnRGcm9tQXR0cmlidXRl
ZFN0cmluZyhOU0F0dHJpYnV0ZWRTdHJpbmcqLCBWZWN0b3I8QXJjaGl2ZVJlc291cmNlKj4mKSB7
IHJldHVybiAwOyB9OworICAgIHZpcnR1YWwgdm9pZCBzZXRJbnNlcnRpb25QYXN0ZWJvYXJkKE5T
UGFzdGVib2FyZCopIHsgfTsKICNpZmRlZiBCVUlMRElOR19PTl9USUdFUgogICAgIHZpcnR1YWwg
TlNBcnJheSogcGFzdGVib2FyZFR5cGVzRm9yU2VsZWN0aW9uKEZyYW1lKikgeyByZXR1cm4gMDsg
fQogI2VuZGlmCkluZGV4OiBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgJKHJldmlzaW9uIDY3
MTE2KQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtMjA0LDYgKzIwNCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2aXJ0
dWFsIGJvb2wgY2FuSGFuZGxlUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmKSBjb25zdCA9
IDA7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5TaG93TUlNRVR5cGUoY29uc3QgU3RyaW5nJiBN
SU1FVHlwZSkgY29uc3QgPSAwOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICAgICAgdmlydHVhbCBi
b29sIGNhblNob3dNSU1FVHlwZUFzSFRNTChjb25zdCBTdHJpbmcmIE1JTUVUeXBlKSBjb25zdCA9
IDA7CisjZW5kaWYKICAgICAgICAgdmlydHVhbCBib29sIHJlcHJlc2VudGF0aW9uRXhpc3RzRm9y
VVJMU2NoZW1lKGNvbnN0IFN0cmluZyYgVVJMU2NoZW1lKSBjb25zdCA9IDA7CiAgICAgICAgIHZp
cnR1YWwgU3RyaW5nIGdlbmVyYXRlZE1JTUVUeXBlRm9yVVJMU2NoZW1lKGNvbnN0IFN0cmluZyYg
VVJMU2NoZW1lKSBjb25zdCA9IDA7CiAKSW5kZXg6IFdlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmgJKHJldmlzaW9uIDY3
MTE2KQorKysgV2ViQ29yZS9wYWdlL0VkaXRvckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NywxMiArMzcsMTYgQEAKICNpZiBQTEFURk9STShNQUMpCiAjaWZkZWYgX19PQkpDX18KIEBjbGFz
cyBOU0FycmF5OworQGNsYXNzIE5TQXR0cmlidXRlZFN0cmluZzsKIEBjbGFzcyBOU0RhdGE7CitA
Y2xhc3MgTlNQYXN0ZWJvYXJkOwogQGNsYXNzIE5TU3RyaW5nOwogQGNsYXNzIE5TVVJMOwogI2Vs
c2UKIGNsYXNzIE5TQXJyYXk7CitjbGFzcyBOU0F0dHJpYnV0ZWRTdHJpbmc7CiBjbGFzcyBOU0Rh
dGE7CitjbGFzcyBOU1Bhc3RlYm9hcmQ7CiBjbGFzcyBOU1N0cmluZzsKIGNsYXNzIE5TVVJMOwog
I2VuZGlmCkBAIC01MCw3ICs1NCw5IEBAIGNsYXNzIE5TVVJMOwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKK2NsYXNzIEFyY2hpdmVSZXNvdXJjZTsKIGNsYXNzIENTU1N0eWxlRGVjbGFyYXRpb247
CitjbGFzcyBEb2N1bWVudEZyYWdtZW50OwogY2xhc3MgRWRpdENvbW1hbmQ7CiBjbGFzcyBFZGl0
b3I7CiBjbGFzcyBFbGVtZW50OwpAQCAtMTQ3LDYgKzE1Myw4IEBAIHB1YmxpYzoKIAogI2lmIFBM
QVRGT1JNKE1BQykKICAgICB2aXJ0dWFsIE5TU3RyaW5nKiB1c2VyVmlzaWJsZVN0cmluZyhOU1VS
TCopID0gMDsKKyAgICB2aXJ0dWFsIERvY3VtZW50RnJhZ21lbnQqIGRvY3VtZW50RnJvbUF0dHJp
YnV0ZWRTdHJpbmcoTlNBdHRyaWJ1dGVkU3RyaW5nKiwgVmVjdG9yPEFyY2hpdmVSZXNvdXJjZSo+
JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRJbnNlcnRpb25QYXN0ZWJvYXJkKE5TUGFzdGVi
b2FyZCopID0gMDsKICNpZmRlZiBCVUlMRElOR19PTl9USUdFUgogICAgIHZpcnR1YWwgTlNBcnJh
eSogcGFzdGVib2FyZFR5cGVzRm9yU2VsZWN0aW9uKEZyYW1lKikgPSAwOwogI2VuZGlmCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL1Bhc3RlYm9hcmQuaAkocmV2aXNpb24gNjcxMTYpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L1Bhc3RlYm9hcmQuaAkod29ya2luZyBjb3B5KQpAQCAtNzksNiArNzksNyBAQCBjbGFzcyBIaXRU
ZXN0UmVzdWx0OwogY2xhc3MgS1VSTDsKIGNsYXNzIE5vZGU7CiBjbGFzcyBSYW5nZTsKK2NsYXNz
IEFyY2hpdmVSZXNvdXJjZTsKICAgICAKIGNsYXNzIFBhc3RlYm9hcmQgOiBwdWJsaWMgTm9uY29w
eWFibGUgewogcHVibGljOgpAQCAtOTYsNiArOTcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCB3cml0
ZUltYWdlKE5vZGUqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiB0aXRsZSk7CiAjaWYgUExB
VEZPUk0oTUFDKQogICAgIHZvaWQgd3JpdGVGaWxlV3JhcHBlckFzUlRGREF0dGFjaG1lbnQoTlNG
aWxlV3JhcHBlciopOworICAgIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZG9jdW1lbnRG
cmFnbWVudEZyb21QYXN0ZWJvYXJkKEZyYW1lKiBmcmFtZSwgUGFzc1JlZlB0cjxSYW5nZT4gY29u
dGV4dCwgYm9vbCBhbGxvd1BsYWluVGV4dCk7CiAjZW5kaWYKICAgICB2b2lkIGNsZWFyKCk7CiAg
ICAgYm9vbCBjYW5TbWFydFJlcGxhY2UoKTsKQEAgLTExOCw2ICsxMjAsOCBAQCBwcml2YXRlOgog
I2lmIFBMQVRGT1JNKE1BQykKICAgICBQYXN0ZWJvYXJkKE5TUGFzdGVib2FyZCAqKTsKICAgICBS
ZXRhaW5QdHI8TlNQYXN0ZWJvYXJkPiBtX3Bhc3RlYm9hcmQ7CisgICAgUGFzc1JlZlB0cjxEb2N1
bWVudEZyYWdtZW50PiBkb2N1bWVudEZyYWdtZW50V2l0aEltYWdlUmVzb3VyY2UoRnJhbWUqIGZy
YW1lLCBQYXNzUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4gcmVzb3VyY2UpOworICAgIFBhc3NSZWZQ
dHI8RG9jdW1lbnRGcmFnbWVudD4gZG9jdW1lbnRGcmFnbWVudFdpdGhSdGYoRnJhbWUqIGZyYW1l
LCBOU1N0cmluZyogcGJvYXJkVHlwZSk7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFdJTikKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbQkocmV2aXNpb24gNjcxMTYpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSwxNiArMzEsMjIgQEAKICNpbXBvcnQgIkRPTVJhbmdlSW50ZXJuYWwuaCIKICNpbXBvcnQg
IkRvY3VtZW50LmgiCiAjaW1wb3J0ICJEb2N1bWVudEZyYWdtZW50LmgiCisjaW1wb3J0ICJEb2N1
bWVudExvYWRlci5oIgogI2ltcG9ydCAiRWRpdG9yLmgiCiAjaW1wb3J0ICJFZGl0b3JDbGllbnQu
aCIKICNpbXBvcnQgIkZyYW1lLmgiCisjaW1wb3J0ICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2lt
cG9ydCAiSGl0VGVzdFJlc3VsdC5oIgorI2ltcG9ydCAiSFRNTEFuY2hvckVsZW1lbnQuaCIKKyNp
bXBvcnQgIkhUTUxOYW1lcy5oIgogI2ltcG9ydCAiSW1hZ2UuaCIKICNpbXBvcnQgIktVUkwuaCIK
ICNpbXBvcnQgIkxlZ2FjeVdlYkFyY2hpdmUuaCIKICNpbXBvcnQgIkxvYWRlck5TVVJMRXh0cmFz
LmgiCiAjaW1wb3J0ICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW1wb3J0ICJQYWdlLmgiCiAjaW1w
b3J0ICJSZW5kZXJJbWFnZS5oIgorI2ltcG9ydCAiVGV4dC5oIgogI2ltcG9ydCAiV2ViQ29yZU5T
U3RyaW5nRXh0cmFzLmgiCiAjaW1wb3J0ICJtYXJrdXAuaCIKIApAQCAtMTM5LDcgKzE0NSw4IEBA
IHZvaWQgUGFzdGVib2FyZDo6d3JpdGVTZWxlY3Rpb24oTlNQYXN0ZWIKICAgICAgICAgUGFzdGVi
b2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKTsgLy8gSW5pdGlhbGl6ZXMgcGFzdGVib2FyZCB0eXBl
cy4KICAgICBBU1NFUlQoc2VsZWN0ZWRSYW5nZSk7CiAgICAgCi0gICAgTlNBdHRyaWJ1dGVkU3Ry
aW5nICphdHRyaWJ1dGVkU3RyaW5nID0gW1tbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBfaW5p
dFdpdGhET01SYW5nZTpraXQoc2VsZWN0ZWRSYW5nZSldIGF1dG9yZWxlYXNlXTsKKyAgICBOU0F0
dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmcgPSBbW1tOU0F0dHJpYnV0ZWRTdHJpbmcg
YWxsb2NdIGluaXRXaXRoU3RyaW5nOnNlbGVjdGVkUmFuZ2UtPnRleHQoKV0gYXV0b3JlbGVhc2Vd
OworCiAjaWZkZWYgQlVJTERJTkdfT05fVElHRVIKICAgICAvLyA0OTMwMTk3OiBNYWlsIG92ZXJy
aWRlcyBbV2ViSFRNTFZpZXcgcGFzdGVib2FyZFR5cGVzRm9yU2VsZWN0aW9uXSBpbiBvcmRlciB0
byBhZGQgYW5vdGhlciB0eXBlIHRvIHRoZSBwYXN0ZWJvYXJkCiAgICAgLy8gYWZ0ZXIgV2ViS2l0
IGRvZXMuICBPbiBUaWdlciB3ZSBtdXN0IGNhbGwgdGhpcyBmdW5jdGlvbiBzbyB0aGF0IE1haWwg
Y29kZSB3aWxsIGJlIGV4ZWN1dGVkLCBtZWFuaW5nIHRoYXQgCkBAIC0zNjIsNyArMzY5LDE5MyBA
QCBTdHJpbmcgUGFzdGVib2FyZDo6cGxhaW5UZXh0KEZyYW1lKiBmcmFtCiAgICAgCiAgICAgcmV0
dXJuIFN0cmluZygpOyAKIH0KKyAgICAKK1Bhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gUGFz
dGVib2FyZDo6ZG9jdW1lbnRGcmFnbWVudFdpdGhJbWFnZVJlc291cmNlKEZyYW1lKiBmcmFtZSwg
UGFzc1JlZlB0cjxBcmNoaXZlUmVzb3VyY2U+IHJlc291cmNlKQoreworICAgIGlmIChEb2N1bWVu
dExvYWRlciogbG9hZGVyID0gZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpKQorICAg
ICAgICBsb2FkZXItPmFkZEFyY2hpdmVSZXNvdXJjZShyZXNvdXJjZS5nZXQoKSk7CisKKyAgICBS
ZWZQdHI8RWxlbWVudD4gaW1hZ2VFbGVtZW50ID0gZnJhbWUtPmRvY3VtZW50KCktPmNyZWF0ZUVs
ZW1lbnQoSFRNTE5hbWVzOjppbWdUYWcsIGZhbHNlKTsKKyAgICBpZiAoIWltYWdlRWxlbWVudCkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBOU1VSTCAqVVJMID0gcmVzb3VyY2UtPnVybCgpOwor
ICAgIGltYWdlRWxlbWVudC0+c2V0QXR0cmlidXRlKEhUTUxOYW1lczo6c3JjQXR0ciwgW1VSTCBp
c0ZpbGVVUkxdID8gW1VSTCBhYnNvbHV0ZVN0cmluZ10gOiByZXNvdXJjZS0+dXJsKCkpOworICAg
IFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGZyYW1lLT5kb2N1bWVudCgpLT5j
cmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CisgICAgaWYgKGZyYWdtZW50KSB7CisgICAgICAgIEV4
Y2VwdGlvbkNvZGUgZWM7CisgICAgICAgIGZyYWdtZW50LT5hcHBlbmRDaGlsZChpbWFnZUVsZW1l
bnQsIGVjKTsKKyAgICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsgICAgICAgCisgICAg
fQorICAgIHJldHVybiAwOworfQorCitQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFBhc3Rl
Ym9hcmQ6OmRvY3VtZW50RnJhZ21lbnRXaXRoUnRmKEZyYW1lKiBmcmFtZSwgTlNTdHJpbmcqIHBi
b2FyZFR5cGUpCit7CisgICAgaWYgKCFmcmFtZSB8fCAhZnJhbWUtPmRvY3VtZW50KCkgfHwgIWZy
YW1lLT5kb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIE5TQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nID0gbmlsOworICAgIGlmIChwYm9hcmRUeXBl
ID09IE5TUlRGRFBib2FyZFR5cGUpCisgICAgICAgIHN0cmluZyA9IFtbTlNBdHRyaWJ1dGVkU3Ry
aW5nIGFsbG9jXSBpbml0V2l0aFJURkQ6W21fcGFzdGVib2FyZC5nZXQoKSBkYXRhRm9yVHlwZTpO
U1JURkRQYm9hcmRUeXBlXSBkb2N1bWVudEF0dHJpYnV0ZXM6TlVMTF07CisgICAgaWYgKHN0cmlu
ZyA9PSBuaWwpCisgICAgICAgIHN0cmluZyA9IFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBp
bml0V2l0aFJURjpbbV9wYXN0ZWJvYXJkLmdldCgpIGRhdGFGb3JUeXBlOk5TUlRGUGJvYXJkVHlw
ZV0gZG9jdW1lbnRBdHRyaWJ1dGVzOk5VTExdOworICAgIGlmIChzdHJpbmcgPT0gbmlsKQorICAg
ICAgICByZXR1cm4gbmlsOworCisgICAgYm9vbCB3YXNEZWZlcnJpbmdDYWxsYmFja3MgPSBmcmFt
ZS0+cGFnZSgpLT5kZWZlcnNMb2FkaW5nKCk7CisgICAgaWYgKCF3YXNEZWZlcnJpbmdDYWxsYmFj
a3MpCisgICAgICAgIGZyYW1lLT5wYWdlKCktPnNldERlZmVyc0xvYWRpbmcodHJ1ZSk7CisKKyAg
ICBWZWN0b3I8QXJjaGl2ZVJlc291cmNlKj4gcmVzb3VyY2VzOworICAgIFJlZlB0cjxEb2N1bWVu
dEZyYWdtZW50PiBmcmFnbWVudCA9IGZyYW1lLT5lZGl0b3IoKS0+Y2xpZW50KCktPmRvY3VtZW50
RnJvbUF0dHJpYnV0ZWRTdHJpbmcoc3RyaW5nLCByZXNvdXJjZXMpOworCisgICAgc2l6ZV90IHNp
emUgPSByZXNvdXJjZXMuc2l6ZSgpOworICAgIGlmIChzaXplKSB7CisgICAgICAgIERvY3VtZW50
TG9hZGVyKiBsb2FkZXIgPSBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCk7CisgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICAgICAgbG9hZGVy
LT5hZGRBcmNoaXZlUmVzb3VyY2UocmVzb3VyY2VzW2ldKTsgICAgCisgICAgfQorCisgICAgaWYg
KCF3YXNEZWZlcnJpbmdDYWxsYmFja3MpCisgICAgICAgIGZyYW1lLT5wYWdlKCktPnNldERlZmVy
c0xvYWRpbmcoZmFsc2UpOworCisgICAgW3N0cmluZyByZWxlYXNlXTsKKyAgICByZXR1cm4gZnJh
Z21lbnQucmVsZWFzZSgpOworfQorCisjZGVmaW5lIFdlYkRhdGFQcm90b2NvbFNjaGVtZSBAIndl
YmtpdC1mYWtlLXVybCIKKworc3RhdGljIE5TVVJMKiB1bmlxdWVVUkxXaXRoUmVsYXRpdmVQYXJ0
KE5TU3RyaW5nICpyZWxhdGl2ZVBhcnQpCit7CisgICAgQ0ZVVUlEUmVmIFVVSURSZWYgPSBDRlVV
SURDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCk7CisgICAgTlNTdHJpbmcgKlVVSURTdHJpbmcg
PSAoTlNTdHJpbmcgKilDRlVVSURDcmVhdGVTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgVVVJ
RFJlZik7CisgICAgQ0ZSZWxlYXNlKFVVSURSZWYpOworICAgIE5TVVJMICpVUkwgPSBbTlNVUkwg
VVJMV2l0aFN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVAOi8vJUAvJUAiLCBX
ZWJEYXRhUHJvdG9jb2xTY2hlbWUsIFVVSURTdHJpbmcsIHJlbGF0aXZlUGFydF1dOworICAgIENG
UmVsZWFzZShVVUlEU3RyaW5nKTsKKworICAgIHJldHVybiBVUkw7Cit9CisgICAgCitQYXNzUmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+IFBhc3RlYm9hcmQ6OmRvY3VtZW50RnJhZ21lbnRGcm9tUGFz
dGVib2FyZChGcmFtZSogZnJhbWUsIFBhc3NSZWZQdHI8UmFuZ2U+IGNvbnRleHQsIGJvb2wgYWxs
b3dQbGFpblRleHQpCit7CisgICAgTlNBcnJheSAqdHlwZXMgPSBbbV9wYXN0ZWJvYXJkLmdldCgp
IHR5cGVzXTsKKyAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQ7CisKKyAgICBp
ZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0OldlYkFyY2hpdmVQYm9hcmRUeXBlXSkgeworICAgICAg
ICBSZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4gY29yZUFyY2hpdmUgPSBMZWdhY3lXZWJBcmNoaXZl
OjpjcmVhdGUoU2hhcmVkQnVmZmVyOjp3cmFwTlNEYXRhKFttX3Bhc3RlYm9hcmQuZ2V0KCkgZGF0
YUZvclR5cGU6V2ViQXJjaGl2ZVBib2FyZFR5cGVdKS5nZXQoKSk7CisgICAgICAgIGlmIChjb3Jl
QXJjaGl2ZSkgeworICAgICAgICAgICAgUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4gbWFpblJlc291
cmNlID0gY29yZUFyY2hpdmUtPm1haW5SZXNvdXJjZSgpOworICAgICAgICAgICAgaWYgKG1haW5S
ZXNvdXJjZSkgeworICAgICAgICAgICAgICAgIE5TU3RyaW5nICpNSU1FVHlwZSA9IG1haW5SZXNv
dXJjZS0+bWltZVR5cGUoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWZyYW1lIHx8ICFmcmFtZS0+
ZG9jdW1lbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAg
ICAgaWYgKGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNhblNob3dNSU1FVHlwZUFzSFRNTChN
SU1FVHlwZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgTlNTdHJpbmcgKm1hcmt1cFN0cmluZyA9
IFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoRGF0YTpbbWFpblJlc291cmNlLT5kYXRhKCktPmNy
ZWF0ZU5TRGF0YSgpIGF1dG9yZWxlYXNlXSBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ107
CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBzZWVtcyBwb29yIGZvcm0gdG8gZG8gdGhp
cyBhcyBhIHNpZGUgZWZmZWN0IG9mIGdldHRpbmcgYSBkb2N1bWVudCBmcmFnbWVudAorICAgICAg
ICAgICAgICAgICAgICBpZiAoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciA9IGZyYW1lLT5sb2FkZXIo
KS0+ZG9jdW1lbnRMb2FkZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlci0+YWRk
QWxsQXJjaGl2ZVJlc291cmNlcyhjb3JlQXJjaGl2ZS5nZXQoKSk7CisgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1h
cmt1cChmcmFtZS0+ZG9jdW1lbnQoKSwgbWFya3VwU3RyaW5nLCBtYWluUmVzb3VyY2UtPnVybCgp
LCBGcmFnbWVudFNjcmlwdGluZ05vdEFsbG93ZWQpOworICAgICAgICAgICAgICAgICAgICBbbWFy
a3VwU3RyaW5nIHJlbGVhc2VdOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoTUlNRVR5cGVS
ZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlKE1JTUVUeXBlKSkKKyAgICAgICAgICAg
ICAgICAgICBmcmFnbWVudCA9IGRvY3VtZW50RnJhZ21lbnRXaXRoSW1hZ2VSZXNvdXJjZShmcmFt
ZSwgbWFpblJlc291cmNlKTsgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIGlmIChmcmFnbWVudCkKKyAgICAgICAgICAgIHJldHVybiBmcmFnbWVu
dC5yZWxlYXNlKCk7CisgICAgfSAKKworICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6TlNG
aWxlbmFtZXNQYm9hcmRUeXBlXSkgeworICAgICAgICBOU0FycmF5KiBwYXRocyA9IFttX3Bhc3Rl
Ym9hcmQuZ2V0KCkgcHJvcGVydHlMaXN0Rm9yVHlwZTpOU0ZpbGVuYW1lc1Bib2FyZFR5cGVdOwor
ICAgICAgICBOU0VudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBbcGF0aHMgb2JqZWN0RW51bWVyYXRv
cl07CisgICAgICAgIE5TU3RyaW5nKiBwYXRoOworICAgICAgICBWZWN0b3I8IFJlZlB0cjxOb2Rl
PiA+IHJlZk5vZGVzVmVjdG9yOworICAgICAgICBWZWN0b3I8Tm9kZSo+IG5vZGVzVmVjdG9yOwor
CisgICAgICAgIHdoaWxlICgocGF0aCA9IFtlbnVtZXJhdG9yIG5leHRPYmplY3RdKSAhPSBuaWwp
IHsKKyAgICAgICAgICAgIC8vIE5vbi1pbWFnZSBmaWxlIHR5cGVzOyBfd2ViX3VzZXJWaXNpYmxl
U3RyaW5nIGlzIGFwcHJvcHJpYXRlIGhlcmUgYmVjYXVzZSB0aGlzIHdpbGwKKyAgICAgICAgICAg
IC8vIGJlIHBhc3RlZCBhcyB2aXNpYmxlIHRleHQuCisgICAgICAgICAgICBOU1N0cmluZyAqdXJs
ID0gZnJhbWUtPmVkaXRvcigpLT5jbGllbnQoKS0+dXNlclZpc2libGVTdHJpbmcoW05TVVJMIGZp
bGVVUkxXaXRoUGF0aDpwYXRoXSk7CisgICAgICAgICAgICBSZWZQdHI8Tm9kZT4gdGV4dE5vZGUg
PSBmcmFtZS0+ZG9jdW1lbnQoKS0+Y3JlYXRlVGV4dE5vZGUodXJsKTsKKyAgICAgICAgICAgIHJl
Zk5vZGVzVmVjdG9yLmFwcGVuZCh0ZXh0Tm9kZS5nZXQoKSk7CisgICAgICAgICAgICBub2Rlc1Zl
Y3Rvci5hcHBlbmQodGV4dE5vZGUuZ2V0KCkpOworICAgICAgICB9CisgICAgICAgIGZyYWdtZW50
ID0gY3JlYXRlRnJhZ21lbnRGcm9tTm9kZXMoZnJhbWUtPmRvY3VtZW50KCksIG5vZGVzVmVjdG9y
KTsKKyAgICAgICAgaWYgKGZyYWdtZW50ICYmIGZyYWdtZW50LT5maXJzdENoaWxkKCkpCisgICAg
ICAgICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOworICAgIH0KIAorICAgIGlmIChbdHlw
ZXMgY29udGFpbnNPYmplY3Q6TlNIVE1MUGJvYXJkVHlwZV0pIHsKKyAgICAgICAgTlNTdHJpbmcg
KkhUTUxTdHJpbmcgPSBbbV9wYXN0ZWJvYXJkLmdldCgpIHN0cmluZ0ZvclR5cGU6TlNIVE1MUGJv
YXJkVHlwZV07CisgICAgICAgIC8vIFRoaXMgaXMgYSBoYWNrIHRvIG1ha2UgTWljcm9zb2Z0J3Mg
SFRNTCBwYXN0ZWJvYXJkIGRhdGEgd29yay4gU2VlIDM3Nzg3ODUuCisgICAgICAgIGlmIChbSFRN
TFN0cmluZyBoYXNQcmVmaXg6QCJWZXJzaW9uOiJdKSB7CisgICAgICAgICAgICBOU1JhbmdlIHJh
bmdlID0gW0hUTUxTdHJpbmcgcmFuZ2VPZlN0cmluZzpAIjxodG1sIiBvcHRpb25zOk5TQ2FzZUlu
c2Vuc2l0aXZlU2VhcmNoXTsKKyAgICAgICAgICAgIGlmIChyYW5nZS5sb2NhdGlvbiAhPSBOU05v
dEZvdW5kKSB7CisgICAgICAgICAgICAgICAgSFRNTFN0cmluZyA9IFtIVE1MU3RyaW5nIHN1YnN0
cmluZ0Zyb21JbmRleDpyYW5nZS5sb2NhdGlvbl07CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgaWYgKFtIVE1MU3RyaW5nIGxlbmd0aF0gIT0gMCAmJgorICAgICAgICAgICAgKGZy
YWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKGZyYW1lLT5kb2N1bWVudCgpLCBIVE1M
U3RyaW5nLCAiIiwgRnJhZ21lbnRTY3JpcHRpbmdOb3RBbGxvd2VkKSkpCisgICAgICAgICAgICBy
ZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOworICAgIH0KKworICAgIGlmIChbdHlwZXMgY29udGFp
bnNPYmplY3Q6TlNSVEZEUGJvYXJkVHlwZV0gJiYKKyAgICAgICAgKGZyYWdtZW50ID0gZG9jdW1l
bnRGcmFnbWVudFdpdGhSdGYoZnJhbWUsIE5TUlRGRFBib2FyZFR5cGUpKSkKKyAgICAgICByZXR1
cm4gZnJhZ21lbnQucmVsZWFzZSgpOworCisgICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpO
U1JURlBib2FyZFR5cGVdICYmCisgICAgICAgIChmcmFnbWVudCA9IGRvY3VtZW50RnJhZ21lbnRX
aXRoUnRmKGZyYW1lLCBOU1JURlBib2FyZFR5cGUpKSkKKyAgICAgICAgcmV0dXJuIGZyYWdtZW50
LnJlbGVhc2UoKTsKKworICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6TlNUSUZGUGJvYXJk
VHlwZV0gJiYKKyAgICAgICAgKGZyYWdtZW50ID0gZG9jdW1lbnRGcmFnbWVudFdpdGhJbWFnZVJl
c291cmNlKGZyYW1lLCBBcmNoaXZlUmVzb3VyY2U6OmNyZWF0ZShTaGFyZWRCdWZmZXI6OndyYXBO
U0RhdGEoW1tbbV9wYXN0ZWJvYXJkLmdldCgpIGRhdGFGb3JUeXBlOk5TVElGRlBib2FyZFR5cGVd
IGNvcHldIGF1dG9yZWxlYXNlXSksIHVuaXF1ZVVSTFdpdGhSZWxhdGl2ZVBhcnQoQCJpbWFnZS50
aWZmIiksICJpbWFnZS90aWZmIiwgIiIsICIiKSkpKQorICAgICAgICByZXR1cm4gZnJhZ21lbnQu
cmVsZWFzZSgpOworCisgICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpOU1BERlBib2FyZFR5
cGVdICYmCisgICAgICAgIChmcmFnbWVudCA9IGRvY3VtZW50RnJhZ21lbnRXaXRoSW1hZ2VSZXNv
dXJjZShmcmFtZSwgQXJjaGl2ZVJlc291cmNlOjpjcmVhdGUoU2hhcmVkQnVmZmVyOjp3cmFwTlNE
YXRhKFtbW21fcGFzdGVib2FyZC5nZXQoKSBkYXRhRm9yVHlwZTpOU1BERlBib2FyZFR5cGVdIGNv
cHldIGF1dG9yZWxlYXNlXSksIHVuaXF1ZVVSTFdpdGhSZWxhdGl2ZVBhcnQoQCJhcHBsaWNhdGlv
bi5wZGYiKSwgImFwcGxpY2F0aW9uL3BkZiIsICIiLCAiIikpKSkKKyAgICAgICAgcmV0dXJuIGZy
YWdtZW50LnJlbGVhc2UoKTsKKworI2lmIGRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpIHx8IGRl
ZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKKyAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0
Ok5TUElDVFBib2FyZFR5cGVdICYmCisgICAgICAgIChmcmFnbWVudCA9IGRvY3VtZW50RnJhZ21l
bnRXaXRoSW1hZ2VSZXNvdXJjZShmcmFtZSwgQXJjaGl2ZVJlc291cmNlOjpjcmVhdGUoU2hhcmVk
QnVmZmVyOjp3cmFwTlNEYXRhKFtbW21fcGFzdGVib2FyZC5nZXQoKSBkYXRhRm9yVHlwZTpOU1BJ
Q1RQYm9hcmRUeXBlXSBjb3B5XSBhdXRvcmVsZWFzZV0pLCB1bmlxdWVVUkxXaXRoUmVsYXRpdmVQ
YXJ0KEAiaW1hZ2UucGljdCIpLCAiaW1hZ2UvcGljdCIsICIiLCAiIikpKSkKKyAgICAgICAgcmV0
dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKKyNlbmRpZgorCisgICAgLy8gT25seSAxMC41IGFuZCBo
aWdoZXIgc3VwcG9ydCBzZXR0aW5nIGFuZCByZXRyaWV2aW5nIHBhc3RlYm9hcmQgdHlwZXMgd2l0
aCBVVElzLCBidXQgd2UgZG9uJ3QgYmVsaWV2ZQorICAgIC8vIHRoYXQgYW55IGFwcGxpY2F0aW9u
cyBvbiBUaWdlciBwdXQgdHlwZXMgZm9yIHdoaWNoIHdlIG9ubHkgaGF2ZSBhIFVUSSwgbGlrZSBQ
TkcsIG9uIHRoZSBwYXN0ZWJvYXJkLgorICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6KE5T
U3RyaW5nKilrVVRUeXBlUE5HXSAmJgorICAgICAgICAoZnJhZ21lbnQgPSBkb2N1bWVudEZyYWdt
ZW50V2l0aEltYWdlUmVzb3VyY2UoZnJhbWUsIEFyY2hpdmVSZXNvdXJjZTo6Y3JlYXRlKFNoYXJl
ZEJ1ZmZlcjo6d3JhcE5TRGF0YShbW1ttX3Bhc3RlYm9hcmQuZ2V0KCkgZGF0YUZvclR5cGU6KE5T
U3RyaW5nKilrVVRUeXBlUE5HXSBjb3B5XSBhdXRvcmVsZWFzZV0pLCB1bmlxdWVVUkxXaXRoUmVs
YXRpdmVQYXJ0KEAiaW1hZ2UucG5nIiksICJpbWFnZS9wbmciLCAiIiwgIiIpKSkpCisgICAgICAg
IHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7CisKKyAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2Jq
ZWN0Ok5TVVJMUGJvYXJkVHlwZV0pIHsKKyAgICAgICAgTlNVUkwgKlVSTCA9IFtOU1VSTCBVUkxG
cm9tUGFzdGVib2FyZDptX3Bhc3RlYm9hcmQuZ2V0KCldOworICAgICAgICBEb2N1bWVudCogZG9j
dW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICAgICAgQVNTRVJUKGRvY3VtZW50KTsKKyAg
ICAgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBSZWZQ
dHI8RWxlbWVudD4gYW5jaG9yID0gZG9jdW1lbnQtPmNyZWF0ZUVsZW1lbnQoSFRNTE5hbWVzOjph
VGFnLCBmYWxzZSk7CisgICAgICAgIE5TU3RyaW5nICpVUkxTdHJpbmcgPSBbVVJMIGFic29sdXRl
U3RyaW5nXTsgLy8gT3JpZ2luYWwgZGF0YSBpcyBBU0NJSS1vbmx5LCBzbyB0aGVyZSBpcyBubyBu
ZWVkIHRvIHByZWNvbXBvc2UuCisgICAgICAgIGlmIChbVVJMU3RyaW5nIGxlbmd0aF0gPT0gMCkK
KyAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIE5TU3RyaW5nICpVUkxUaXRsZVN0cmlu
ZyA9IFtbbV9wYXN0ZWJvYXJkLmdldCgpIHN0cmluZ0ZvclR5cGU6V2ViVVJMTmFtZVBib2FyZFR5
cGVdIHByZWNvbXBvc2VkU3RyaW5nV2l0aENhbm9uaWNhbE1hcHBpbmddOworICAgICAgICBFeGNl
cHRpb25Db2RlIGVjOworICAgICAgICBhbmNob3ItPnNldEF0dHJpYnV0ZShIVE1MTmFtZXM6Omhy
ZWZBdHRyLCBVUkxTdHJpbmcpOworICAgICAgICBhbmNob3ItPmFwcGVuZENoaWxkKGRvY3VtZW50
LT5jcmVhdGVUZXh0Tm9kZShVUkxUaXRsZVN0cmluZyksIGVjKTsKKyAgICAgICAgZnJhZ21lbnQg
PSBkb2N1bWVudC0+Y3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOworICAgICAgICBpZiAoZnJhZ21l
bnQpIHsKKyAgICAgICAgICAgIGZyYWdtZW50LT5hcHBlbmRDaGlsZChhbmNob3IsIGVjKTsKKyAg
ICAgICAgICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBpZiAoYWxsb3dQbGFpblRleHQgJiYgW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TU3RyaW5n
UGJvYXJkVHlwZV0gJiYKKyAgICAgICAgKGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4
dChjb250ZXh0LmdldCgpLCBbW21fcGFzdGVib2FyZC5nZXQoKSBzdHJpbmdGb3JUeXBlOk5TU3Ry
aW5nUGJvYXJkVHlwZV0gcHJlY29tcG9zZWRTdHJpbmdXaXRoQ2Fub25pY2FsTWFwcGluZ10pKSkK
KyAgICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKKworICAgIHJldHVybiAwOworfQor
ICAgIAogUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBQYXN0ZWJvYXJkOjpkb2N1bWVudEZy
YWdtZW50KEZyYW1lKiBmcmFtZSwgUGFzc1JlZlB0cjxSYW5nZT4gY29udGV4dCwgYm9vbCBhbGxv
d1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQbGFpblRleHQpCiB7CiAgICAgTlNBcnJheSAqdHlwZXMg
PSBbbV9wYXN0ZWJvYXJkLmdldCgpIHR5cGVzXTsKSW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiA2NzExOSkKKysrIFdlYktp
dDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTAtMDktMDkg
IEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXN0ZSBzaG91bGQgYmUgaW1wbGVtZW50ZWQg
aW4gV2ViQ29yZSBsaWtlIENvcHkgYW5kIEN1dCBmb3IgTWFjIGFsc28uCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTQ5NAorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNzY2MDUzNz4KKworICAgICAgICBPbiB0aGUgTWFjIHBsYXRmb3JtLCB0aGUgaW1w
bGVtZW50YXRpb24gb2YgdGhlIHBhc3RlIG9wZXJhdGlvbiBpcyBhbGwgZG9uZQorICAgICAgICBh
dCB0aGUgV2ViS2l0IGxldmVsLiBJbiBvcmRlciB0byBzdXBwb3J0IGl0IG9uIFdlYktpdDIgaXQg
aXMgbmVjZXNzYXJ5IHRvCisgICAgICAgIHJlZmFjdG9yIHRoZSBjb2RlIGFuZCBtb3ZlIHRoaXMg
ZnVuY3Rpb25hbGl0eSBhdCB0aGUgbGV2ZWwgb2YgV2ViQ29yZSBsaWtlCisgICAgICAgIHdlIGFs
cmVhZHkgaGF2ZSBvbiBXaW5kb3dzLgorICAgICAgICBUaGUgb3JpZ2luYWwgY29kZSByZWxpZXMg
b24gc29tZSBpbiBBcHBLaXQgZnVuY3Rpb25zIHRoYXQgY2FsbCBiYWNrIGludG8KKyAgICAgICAg
V2ViS2l0IGNhdXNpbmcgcHJvYmxlbXMgaW4gV2ViS2l0Mi4gQWxsIHRoaXMgZnVuY3Rpb25hbGl0
eSBoYXMgYmVlbiBtb3ZlZAorICAgICAgICBhdCB0aGUgbGV2ZWwgb2YgdGhlIGVkaXRvciBjbGll
bnQgd2hlcmUgaXQgY2FuIGJlIGRlYWx0IHdpdGggYXBwcm9wcmlhdGVseS4KKworICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50Ojpkb2N1bWVudEZyb21BdHRyaWJ1dGVkU3RyaW5nKTog
QWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6c2V0SW5zZXJ0aW9uUGFz
dGVib2FyZCk6IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
RWRpdG9yQ2xpZW50Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJG
cmFtZUxvYWRlckNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lTG9hZGVyQ2xp
ZW50OjpjYW5TaG93TUlNRVR5cGVBc0hUTUwpOiBBZGRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lmg6CisKIDIwMTAtMDktMDkgIFNh
bSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMg
Q2FybHNzb24uCkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRp
dG9yQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAkocmV2aXNpb24gNjcxMTYpCisrKyBXZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzIsNiArMzIsOCBAQAogI2luY2x1ZGUgIldlYlBhZ2UuaCIKICNpbmNsdWRlICJXZWJQ
YWdlUHJveHlNZXNzYWdlS2luZHMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCisjaW5jbHVk
ZSA8V2ViQ29yZS9BcmNoaXZlUmVzb3VyY2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50
RnJhZ21lbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0VkaXRDb21tYW5kLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9GcmFtZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSFRNTElucHV0RWxlbWVudC5oPgpA
QCAtMzEzLDYgKzMxNSwxNyBAQCBOU1N0cmluZyogV2ViRWRpdG9yQ2xpZW50Ojp1c2VyVmlzaWJs
ZVN0CiAgICAgcmV0dXJuIG5pbDsKIH0KIAorRG9jdW1lbnRGcmFnbWVudCogV2ViRWRpdG9yQ2xp
ZW50Ojpkb2N1bWVudEZyb21BdHRyaWJ1dGVkU3RyaW5nKE5TQXR0cmlidXRlZFN0cmluZyosIFZl
Y3RvcjxBcmNoaXZlUmVzb3VyY2UqPiYpCit7CisgICAgLy8gRklYTUU6IGFkZCBjb2RlIGhlcmUg
dG8gY3JlYXRlIGZha2UgV2ViVmlldyBhbmQgbG9hZCBXZWJLaXQgMQorICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50OjpzZXRJbnNl
cnRpb25QYXN0ZWJvYXJkKE5TUGFzdGVib2FyZCopCit7Cit9CisKICNpZmRlZiBCVUlMRElOR19P
Tl9USUdFUgogTlNBcnJheSogV2ViRWRpdG9yQ2xpZW50OjpwYXN0ZWJvYXJkVHlwZXNGb3JTZWxl
Y3Rpb24oRnJhbWUqKQogewpJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkVkaXRvckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAkocmV2aXNpb24gNjcxMTYpCisrKyBXZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTkyLDYgKzkyLDggQEAgcHJpdmF0ZToKIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICB2
aXJ0dWFsIE5TU3RyaW5nKiB1c2VyVmlzaWJsZVN0cmluZyhOU1VSTCopOworICAgIHZpcnR1YWwg
V2ViQ29yZTo6RG9jdW1lbnRGcmFnbWVudCogZG9jdW1lbnRGcm9tQXR0cmlidXRlZFN0cmluZyhO
U0F0dHJpYnV0ZWRTdHJpbmcqLCBWZWN0b3I8V2ViQ29yZTo6QXJjaGl2ZVJlc291cmNlKj4mKTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0SW5zZXJ0aW9uUGFzdGVib2FyZChOU1Bhc3RlYm9hcmQqKTsK
ICNpZmRlZiBCVUlMRElOR19PTl9USUdFUgogICAgIHZpcnR1YWwgTlNBcnJheSogcGFzdGVib2Fy
ZFR5cGVzRm9yU2VsZWN0aW9uKFdlYkNvcmU6OkZyYW1lKik7CiAjZW5kaWYKSW5kZXg6IFdlYktp
dDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9h
ZGVyQ2xpZW50LmNwcAkocmV2aXNpb24gNjcxMTYpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
OTAsNiArNzkwLDExIEBAIGJvb2wgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNhblNob3dNSU1FVHkK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBXZWJGcmFtZUxvYWRlckNsaWVudDo6Y2FuU2hv
d01JTUVUeXBlQXNIVE1MKGNvbnN0IFN0cmluZyYgTUlNRVR5cGUpIGNvbnN0Cit7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKIGJvb2wgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnJlcHJlc2VudGF0aW9u
RXhpc3RzRm9yVVJMU2NoZW1lKGNvbnN0IFN0cmluZyYgVVJMU2NoZW1lKSBjb25zdAogewogICAg
IG5vdEltcGxlbWVudGVkKCk7CkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuaAkocmV2aXNpb24gNjcxMTYp
CisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGll
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTUwLDYgKzE1MCw3IEBAIHByaXZhdGU6CiAgICAgCiAg
ICAgdmlydHVhbCBib29sIGNhbkhhbmRsZVJlcXVlc3QoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0JikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGNhblNob3dNSU1FVHlwZShjb25zdCBX
VEY6OlN0cmluZyYgTUlNRVR5cGUpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBjYW5TaG93TUlN
RVR5cGVBc0hUTUwoY29uc3QgU3RyaW5nJiBNSU1FVHlwZSkgY29uc3Q7CiAgICAgdmlydHVhbCBi
b29sIHJlcHJlc2VudGF0aW9uRXhpc3RzRm9yVVJMU2NoZW1lKGNvbnN0IFdURjo6U3RyaW5nJiBV
UkxTY2hlbWUpIGNvbnN0OwogICAgIHZpcnR1YWwgV1RGOjpTdHJpbmcgZ2VuZXJhdGVkTUlNRVR5
cGVGb3JVUkxTY2hlbWUoY29uc3QgV1RGOjpTdHJpbmcmIFVSTFNjaGVtZSkgY29uc3Q7CiAgICAg
CkluZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0No
YW5nZUxvZwkocmV2aXNpb24gNjcxMTkpCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDEwLTA5LTA5ICBFbnJpY2EgQ2FzdWNjaSAgPGVu
cmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgUGFzdGUgc2hvdWxkIGJlIGltcGxlbWVudGVkIGluIFdlYkNvcmUgbGlrZSBDb3B5
IGFuZCBDdXQgZm9yIE1hYyBhbHNvLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDU0OTQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc2NjA1Mzc+CisK
KyAgICAgICAgT24gdGhlIE1hYyBwbGF0Zm9ybSwgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBw
YXN0ZSBvcGVyYXRpb24gaXMgYWxsIGRvbmUKKyAgICAgICAgYXQgdGhlIFdlYktpdCBsZXZlbC4g
SW4gb3JkZXIgdG8gc3VwcG9ydCBpdCBvbiBXZWJLaXQyIGl0IGlzIG5lY2Vzc2FyeSB0bworICAg
ICAgICByZWZhY3RvciB0aGUgY29kZSBhbmQgbW92ZSB0aGlzIGZ1bmN0aW9uYWxpdHkgYXQgdGhl
IGxldmVsIG9mIFdlYkNvcmUgbGlrZQorICAgICAgICB3ZSBhbHJlYWR5IGhhdmUgb24gV2luZG93
cy4KKyAgICAgICAgVGhlIG9yaWdpbmFsIGNvZGUgcmVsaWVzIG9uIHNvbWUgaW4gQXBwS2l0IGZ1
bmN0aW9ucyB0aGF0IGNhbGwgYmFjayBpbnRvCisgICAgICAgIFdlYktpdCBjYXVzaW5nIHByb2Js
ZW1zIGluIFdlYktpdDIuIEFsbCB0aGlzIGZ1bmN0aW9uYWxpdHkgaGFzIGJlZW4gbW92ZWQKKyAg
ICAgICAgYXQgdGhlIGxldmVsIG9mIHRoZSBlZGl0b3IgY2xpZW50IHdoZXJlIGl0IGNhbiBiZSBk
ZWFsdCB3aXRoIGFwcHJvcHJpYXRlbHkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJF
ZGl0b3JDbGllbnQuaDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQu
bW06CisgICAgICAgIChleGNsdWRlZEVsZW1lbnRzRm9yQXR0cmlidXRlZFN0cmluZ0NvbnZlcnNp
b24pOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50Ojpkb2N1bWVudEZyb21BdHRyaWJ1dGVkU3Ry
aW5nKTogQWRkZWQuCisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OnNldEluc2VydGlvblBhc3Rl
Ym9hcmQpOiBBZGRlZC4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNs
aWVudC5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1t
OgorICAgICAgICAoV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNhblNob3dNSU1FVHlwZUFzSFRNTCk6
IFJlLWltcGxlbWVudGVkIGF0IHRoZSBsZXZlbAorICAgICAgICBvZiB0aGUgZWRpdG9yIGNsaWVu
dC4KKyAgICAgICAgKiBXZWJWaWV3L1dlYkhUTUxWaWV3Lm1tOiBSZW1vdmVkIHBhc3RlIG1ldGhv
ZC4KKwogMjAxMC0wOS0wOCAgTU9SSVRBIEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBUb255IENoYW5nLgpJbmRleDogV2ViS2l0L21hYy9XZWJDb3Jl
U3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCShyZXZpc2lvbiA2NzExNikKKysrIFdlYktpdC9t
YWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTcx
LDYgKzcxLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaWRTZXRTZWxlY3Rpb25UeXBl
c0ZvclBhc3RlYm9hcmQoKTsKIAogICAgIHZpcnR1YWwgTlNTdHJpbmcqIHVzZXJWaXNpYmxlU3Ry
aW5nKE5TVVJMKik7CisgICAgdmlydHVhbCBXZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50KiBkb2N1
bWVudEZyb21BdHRyaWJ1dGVkU3RyaW5nKE5TQXR0cmlidXRlZFN0cmluZyosIFZlY3RvcjxXZWJD
b3JlOjpBcmNoaXZlUmVzb3VyY2UqPiYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRJbnNlcnRpb25Q
YXN0ZWJvYXJkKE5TUGFzdGVib2FyZCopOwogI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCiAgICAg
dmlydHVhbCBOU0FycmF5KiBwYXN0ZWJvYXJkVHlwZXNGb3JTZWxlY3Rpb24oV2ViQ29yZTo6RnJh
bWUqKTsKICNlbmRpZgpJbmRleDogV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JD
bGllbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0
b3JDbGllbnQubW0JKHJldmlzaW9uIDY3MTE2KQorKysgV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJFZGl0b3JDbGllbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNp
bXBvcnQgIldlYkVkaXRvckNsaWVudC5oIgogCiAjaW1wb3J0ICJET01DU1NTdHlsZURlY2xhcmF0
aW9uSW50ZXJuYWwuaCIKKyNpbXBvcnQgIkRPTURvY3VtZW50RnJhZ21lbnRJbnRlcm5hbC5oIgog
I2ltcG9ydCAiRE9NSFRNTEVsZW1lbnRJbnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NSFRNTElucHV0
RWxlbWVudEludGVybmFsLmgiCiAjaW1wb3J0ICJET01IVE1MVGV4dEFyZWFFbGVtZW50SW50ZXJu
YWwuaCIKQEAgLTQ4LDggKzQ5LDExIEBACiAjaW1wb3J0ICJXZWJLaXRWZXJzaW9uQ2hlY2tzLmgi
CiAjaW1wb3J0ICJXZWJMb2NhbGl6YWJsZVN0cmluZ3MuaCIKICNpbXBvcnQgIldlYk5TVVJMRXh0
cmFzLmgiCisjaW1wb3J0ICJXZWJSZXNvdXJjZUludGVybmFsLmgiCiAjaW1wb3J0ICJXZWJWaWV3
SW50ZXJuYWwuaCIKKyNpbXBvcnQgPFdlYkNvcmUvQXJjaGl2ZVJlc291cmNlLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0RvY3VtZW50RnJhZ21lbnQu
aD4KICNpbXBvcnQgPFdlYkNvcmUvRWRpdEFjdGlvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9FZGl0
Q29tbWFuZC5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MSW5wdXRFbGVtZW50Lmg+CkBAIC03Myw2
ICs3NywxMSBAQCB1c2luZyBuYW1lc3BhY2UgV1RGOwogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5h
bWVzOwogCitAaW50ZXJmYWNlIE5TQXR0cmlidXRlZFN0cmluZyAoV2ViTlNBdHRyaWJ1dGVkU3Ry
aW5nRGV0YWlscykKKy0gKGlkKV9pbml0V2l0aERPTVJhbmdlOihET01SYW5nZSAqKXJhbmdlOwor
LSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZyb21SYW5nZTooTlNSYW5nZSlyYW5n
ZSBkb2N1bWVudDooRE9NRG9jdW1lbnQgKilkb2N1bWVudCBkb2N1bWVudEF0dHJpYnV0ZXM6KE5T
RGljdGlvbmFyeSAqKWRpY3Qgc3VicmVzb3VyY2VzOihOU0FycmF5ICoqKXN1YnJlc291cmNlczsK
K0BlbmQKKwogc3RhdGljIFdlYlZpZXdJbnNlcnRBY3Rpb24ga2l0KEVkaXRvckluc2VydEFjdGlv
biBjb3JlQWN0aW9uKQogewogICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJWaWV3SW5zZXJ0QWN0
aW9uPihjb3JlQWN0aW9uKTsKQEAgLTMzMCw2ICszMzksNTIgQEAgTlNTdHJpbmcqIFdlYkVkaXRv
ckNsaWVudDo6dXNlclZpc2libGVTdAogICAgIHJldHVybiBbVVJMIF93ZWJfdXNlclZpc2libGVT
dHJpbmddOwogfQogCitzdGF0aWMgTlNBcnJheSogZXhjbHVkZWRFbGVtZW50c0ZvckF0dHJpYnV0
ZWRTdHJpbmdDb252ZXJzaW9uKCkKK3sKKyAgICBzdGF0aWMgTlNBcnJheSAqZWxlbWVudHMgPSBu
aWw7CisgICAgaWYgKGVsZW1lbnRzID09IG5pbCkgeworICAgICAgICBlbGVtZW50cyA9IFtbTlNB
cnJheSBhbGxvY10gaW5pdFdpdGhPYmplY3RzOgorICAgICAgICAgICAgICAgICAgICAvLyBPbWl0
IHN0eWxlIHNpbmNlIHdlIHdhbnQgc3R5bGUgdG8gYmUgaW5saW5lIHNvIHRoZSBmcmFnbWVudCBj
YW4gYmUgZWFzaWx5IGluc2VydGVkLgorICAgICAgICAgICAgICAgICAgICBAInN0eWxlIiwKKyAg
ICAgICAgICAgICAgICAgICAgLy8gT21pdCB4bWwgc28gdGhlIHJlc3VsdCBpcyBub3QgWEhUTUwu
CisgICAgICAgICAgICAgICAgICAgIEAieG1sIiwgCisgICAgICAgICAgICAgICAgICAgIC8vIE9t
aXQgdGFncyB0aGF0IHdpbGwgZ2V0IHN0cmlwcGVkIHdoZW4gY29udmVydGVkIHRvIGEgZnJhZ21l
bnQgYW55d2F5LgorICAgICAgICAgICAgICAgICAgICBAImRvY3R5cGUiLCBAImh0bWwiLCBAImhl
YWQiLCBAImJvZHkiLAorICAgICAgICAgICAgICAgICAgICAvLyBPbWl0IGRlcHJlY2F0ZWQgdGFn
cy4KKyAgICAgICAgICAgICAgICAgICAgQCJhcHBsZXQiLCBAImJhc2Vmb250IiwgQCJjZW50ZXIi
LCBAImRpciIsIEAiZm9udCIsIEAiaXNpbmRleCIsIEAibWVudSIsIEAicyIsIEAic3RyaWtlIiwg
QCJ1IiwKKyAgICAgICAgICAgICAgICAgICAgLy8gT21pdCBvYmplY3Qgc28gbm8gZmlsZSBhdHRh
Y2htZW50cyBhcmUgcGFydCBvZiB0aGUgZnJhZ21lbnQuCisgICAgICAgICAgICAgICAgICAgIEAi
b2JqZWN0IiwgbmlsXTsKKyAgICAgICAgQ0ZSZXRhaW4oZWxlbWVudHMpOworICAgIH0KKyAgICBy
ZXR1cm4gZWxlbWVudHM7Cit9CisKK0RvY3VtZW50RnJhZ21lbnQqIFdlYkVkaXRvckNsaWVudDo6
ZG9jdW1lbnRGcm9tQXR0cmlidXRlZFN0cmluZyhOU0F0dHJpYnV0ZWRTdHJpbmcqIHN0cmluZywg
VmVjdG9yPEFyY2hpdmVSZXNvdXJjZSo+JiByZXNvdXJjZXMpCit7CisgICAgTlNEaWN0aW9uYXJ5
ICpkaWN0aW9uYXJ5ID0gW1tOU0RpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoT2JqZWN0c0FuZEtl
eXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjbHVkZWRFbGVt
ZW50c0ZvckF0dHJpYnV0ZWRTdHJpbmdDb252ZXJzaW9uKCksIE5TRXhjbHVkZWRFbGVtZW50c0Rv
Y3VtZW50QXR0cmlidXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fd2ViVmlldywgQCJXZWJSZXNvdXJjZUhhbmRsZXIiLCBuaWxdOworICAgIAorICAgIE5TQXJy
YXkqIHM7CisgICAgRE9NRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQgPSBbc3RyaW5nIF9kb2N1
bWVudEZyb21SYW5nZTpOU01ha2VSYW5nZSgwLCBbc3RyaW5nIGxlbmd0aF0pIAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQ6W1tt
X3dlYlZpZXcgbWFpbkZyYW1lXSBET01Eb2N1bWVudF0gCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50QXR0cmlidXRlczpkaWN0aW9uYXJ5CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJlc291cmNl
czomc107CisgICAgTlNFbnVtZXJhdG9yICplID0gW3Mgb2JqZWN0RW51bWVyYXRvcl07CisgICAg
V2ViUmVzb3VyY2UgKnI7CisgICAgd2hpbGUgKChyID0gW2UgbmV4dE9iamVjdF0pKSB7CisgICAg
ICAgIFJlZlB0cjxBcmNoaXZlUmVzb3VyY2U+ICBhciA9IFtyIF9jb3JlUmVzb3VyY2VdOworICAg
ICAgICByZXNvdXJjZXMuYXBwZW5kKGFyLmdldCgpKTsKKyAgICB9CisgICAgW2RpY3Rpb25hcnkg
cmVsZWFzZV07CisgICAgcmV0dXJuIGNvcmUoZnJhZ21lbnQpOworfQorCit2b2lkIFdlYkVkaXRv
ckNsaWVudDo6c2V0SW5zZXJ0aW9uUGFzdGVib2FyZChOU1Bhc3RlYm9hcmQqIHBhc3RlYm9hcmQp
Cit7CisgICAgW21fd2ViVmlldyBfc2V0SW5zZXJ0aW9uUGFzdGVib2FyZDpwYXN0ZWJvYXJkXTsK
K30KKwogI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCiBOU0FycmF5KiBXZWJFZGl0b3JDbGllbnQ6
OnBhc3RlYm9hcmRUeXBlc0ZvclNlbGVjdGlvbihGcmFtZSogc2VsZWN0ZWRGcmFtZSkKIHsKSW5k
ZXg6IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50
LmgJKHJldmlzaW9uIDY3MTE2KQorKysgV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFt
ZUxvYWRlckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzcsNiArMTc3LDcgQEAgcHJpdmF0
ZToKIAogICAgIHZpcnR1YWwgYm9vbCBjYW5IYW5kbGVSZXF1ZXN0KGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBjYW5TaG93TUlNRVR5cGUo
Y29uc3QgV1RGOjpTdHJpbmcmIE1JTUVUeXBlKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgY2Fu
U2hvd01JTUVUeXBlQXNIVE1MKGNvbnN0IFdURjo6U3RyaW5nJiBNSU1FVHlwZSkgY29uc3Q7CiAg
ICAgdmlydHVhbCBib29sIHJlcHJlc2VudGF0aW9uRXhpc3RzRm9yVVJMU2NoZW1lKGNvbnN0IFdU
Rjo6U3RyaW5nJiBVUkxTY2hlbWUpIGNvbnN0OwogICAgIHZpcnR1YWwgV1RGOjpTdHJpbmcgZ2Vu
ZXJhdGVkTUlNRVR5cGVGb3JVUkxTY2hlbWUoY29uc3QgV1RGOjpTdHJpbmcmIFVSTFNjaGVtZSkg
Y29uc3Q7CiAKSW5kZXg6IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJD
bGllbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFt
ZUxvYWRlckNsaWVudC5tbQkocmV2aXNpb24gNjcxMTYpCisrKyBXZWJLaXQvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDE4LDYg
KzEwMTgsMTEgQEAgYm9vbCBXZWJGcmFtZUxvYWRlckNsaWVudDo6Y2FuU2hvd01JTUVUeQogICAg
IHJldHVybiBbZ2V0V2ViVmlldyhtX3dlYkZyYW1lLmdldCgpKSBfY2FuU2hvd01JTUVUeXBlOk1J
TUVUeXBlXTsKIH0KIAorYm9vbCBXZWJGcmFtZUxvYWRlckNsaWVudDo6Y2FuU2hvd01JTUVUeXBl
QXNIVE1MKGNvbnN0IFN0cmluZyYgTUlNRVR5cGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIFtXZWJW
aWV3IGNhblNob3dNSU1FVHlwZUFzSFRNTDpNSU1FVHlwZV07Cit9CisKIGJvb2wgV2ViRnJhbWVM
b2FkZXJDbGllbnQ6OnJlcHJlc2VudGF0aW9uRXhpc3RzRm9yVVJMU2NoZW1lKGNvbnN0IFN0cmlu
ZyYgVVJMU2NoZW1lKSBjb25zdAogewogICAgIHJldHVybiBbV2ViVmlldyBfcmVwcmVzZW50YXRp
b25FeGlzdHNGb3JVUkxTY2hlbWU6VVJMU2NoZW1lXTsKSW5kZXg6IFdlYktpdC9tYWMvV2ViVmll
dy9XZWJIVE1MVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRN
TFZpZXcubW0JKHJldmlzaW9uIDY3MTE2KQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxW
aWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNTI5LDYgKzI1MjksNyBAQCBXRUJDT1JFX0NPTU1B
TkQoYWxpZ25MZWZ0KQogV0VCQ09SRV9DT01NQU5EKGFsaWduUmlnaHQpCiBXRUJDT1JFX0NPTU1B
TkQoY29weSkKIFdFQkNPUkVfQ09NTUFORChjdXQpCitXRUJDT1JFX0NPTU1BTkQocGFzdGUpCiBX
RUJDT1JFX0NPTU1BTkQoZGVsZXRlKQogV0VCQ09SRV9DT01NQU5EKGRlbGV0ZUJhY2t3YXJkKQog
V0VCQ09SRV9DT01NQU5EKGRlbGV0ZUJhY2t3YXJkQnlEZWNvbXBvc2luZ1ByZXZpb3VzQ2hhcmFj
dGVyKQpAQCAtNTE2MywyNCArNTE2NCw2IEBAIC0gKFdlYkZyYW1lICopX2ZyYW1lCiAgICAgcmV0
dXJuIFtfcHJpdmF0ZS0+ZGF0YVNvdXJjZSB3ZWJGcmFtZV07CiB9CiAKLS0gKHZvaWQpcGFzdGU6
KGlkKXNlbmRlcgotewotICAgIENPTU1BTkRfUFJPTE9HVUUKLQotICAgIFJldGFpblB0cjxXZWJI
VE1MVmlldz4gc2VsZlByb3RlY3RvciA9IHNlbGY7Ci0gICAgUmVmUHRyPEZyYW1lPiBjb3JlRnJh
bWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIGlmICghY29yZUZyYW1lKQotICAgICAgICBy
ZXR1cm47Ci0gICAgaWYgKGNvcmVGcmFtZS0+ZWRpdG9yKCktPnRyeURIVE1MUGFzdGUoKSkKLSAg
ICAgICAgcmV0dXJuOyAvLyBESFRNTCBkaWQgdGhlIHdob2xlIG9wZXJhdGlvbgotICAgIGlmICgh
Y29yZUZyYW1lLT5lZGl0b3IoKS0+Y2FuUGFzdGUoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlm
IChjb3JlRnJhbWUtPnNlbGVjdGlvbigpLT5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKQotICAg
ICAgICBbc2VsZiBfcGFzdGVXaXRoUGFzdGVib2FyZDpbTlNQYXN0ZWJvYXJkIGdlbmVyYWxQYXN0
ZWJvYXJkXSBhbGxvd1BsYWluVGV4dDpZRVNdOwotICAgIGVsc2UKLSAgICAgICAgY29yZUZyYW1l
LT5lZGl0b3IoKS0+cGFzdGVBc1BsYWluVGV4dEJ5cGFzc2luZ0RIVE1MKCk7Ci19Ci0KIC0gKHZv
aWQpY2xvc2VJZk5vdEN1cnJlbnRWaWV3CiB7CiAgICAgaWYgKFtbW3NlbGYgX2ZyYW1lXSBmcmFt
ZVZpZXddIGRvY3VtZW50Vmlld10gIT0gc2VsZikK
</data>
<flag name="review"
          id="56326"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>