<?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>132362</bug_id>
          
          <creation_ts>2014-04-29 15:59:06 -0700</creation_ts>
          <short_desc>Handle selection services menu</short_desc>
          <delta_ts>2014-04-29 18:04:47 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1005178</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-04-29 15:59:06 -0700</bug_when>
    <thetext>Handle selection service menu (click on selection overlays)

This also combines the concepts of the &quot;image services&quot; and &quot;selection services&quot; as far as the menu and what to do after the menu returns.

&lt;rdar://problem/16727798&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005183</commentid>
    <comment_count>1</comment_count>
      <attachid>230430</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-04-29 16:05:32 -0700</bug_when>
    <thetext>Created attachment 230430
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005190</commentid>
    <comment_count>2</comment_count>
      <attachid>230430</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-04-29 16:12:42 -0700</bug_when>
    <thetext>Comment on attachment 230430
Patch v1

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

&gt; Source/WebKit2/UIProcess/WebPageProxy.h:816
&gt; +    void replaceSelectionWithPasteboardData(const Vector&lt;String&gt;&amp; types, const IPC::DataReference&amp;);

multiple types, one blob? I don&apos;t get it.

&gt; Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.mm:381
&gt; +        picker = adoptNS([[NSSharingServicePicker alloc] initWithItems:@[ nsImage.get() ]]);

could share this line and have items be what this if() decides

&gt; Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.mm:384
&gt; +        NSAttributedString *selection = [[NSAttributedString alloc] initWithRTFD:selectionData documentAttributes:nil];

is this not a leak? does initWithItems: adopt? doesn&apos;t seem so above...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005208</commentid>
    <comment_count>3</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-04-29 16:48:34 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 230430 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=230430&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/WebPageProxy.h:816
&gt; &gt; +    void replaceSelectionWithPasteboardData(const Vector&lt;String&gt;&amp; types, const IPC::DataReference&amp;);
&gt; 
&gt; multiple types, one blob? I don&apos;t get it.

Because WebCore is stupid, and somethings looks at one type, and other times looks at the other type.

I originally coded it with multiple blobs, but each blob was the same...  and there&apos;s not an IPC:: friendly way to have the same blob represented multiple times in a collection without duplicating the memory.

It does seem less than ideal, but I don&apos;t want to fight any design battles until they&apos;re needed.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.mm:381
&gt; &gt; +        picker = adoptNS([[NSSharingServicePicker alloc] initWithItems:@[ nsImage.get() ]]);
&gt; 
&gt; could share this line and have items be what this if() decides

Okay!

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.mm:384
&gt; &gt; +        NSAttributedString *selection = [[NSAttributedString alloc] initWithRTFD:selectionData documentAttributes:nil];
&gt; 
&gt; is this not a leak? does initWithItems: adopt? doesn&apos;t seem so above...

Good catch.  Last minute change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005215</commentid>
    <comment_count>4</comment_count>
      <attachid>230441</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-04-29 16:56:13 -0700</bug_when>
    <thetext>Created attachment 230441
Patch v2 - Review feedback and hopefully more building</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005218</commentid>
    <comment_count>5</comment_count>
      <attachid>230441</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-04-29 16:59:59 -0700</bug_when>
    <thetext>Comment on attachment 230441
Patch v2 - Review feedback and hopefully more building

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

&gt; Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.mm:253
&gt; +        RetainPtr&lt;CGImageSourceRef&gt; source = adoptCF(CGImageSourceCreateWithData((CFDataRef)data, NULL));
&gt; +        RetainPtr&lt;CGImageRef&gt; image = adoptCF(CGImageSourceCreateImageAtIndex(source.get(), 0, NULL));

nullptr</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005219</commentid>
    <comment_count>6</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-04-29 17:07:50 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 230441 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=230441&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.mm:253
&gt; &gt; +        RetainPtr&lt;CGImageSourceRef&gt; source = adoptCF(CGImageSourceCreateWithData((CFDataRef)data, NULL));
&gt; &gt; +        RetainPtr&lt;CGImageRef&gt; image = adoptCF(CGImageSourceCreateImageAtIndex(source.get(), 0, NULL));
&gt; 
&gt; nullptr

Coding style says NULL for C.  While this is a C++ file, the API is C, and I think it&apos;s much more standard to use NULL with the CF apis.

If that&apos;s no longer our thinking, coding style should be updated :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005240</commentid>
    <comment_count>7</comment_count>
      <attachid>230441</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-04-29 18:04:44 -0700</bug_when>
    <thetext>Comment on attachment 230441
Patch v2 - Review feedback and hopefully more building

Clearing flags on attachment: 230441

Committed r167974: &lt;http://trac.webkit.org/changeset/167974&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005241</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-04-29 18:04:47 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>230430</attachid>
            <date>2014-04-29 16:05:32 -0700</date>
            <delta_ts>2014-04-29 16:56:13 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>23198</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA1YjA5MTc5Li41NTU4Mjc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTQg
QEAKIDIwMTQtMDQtMjkgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCisgICAg
ICAgIEhhbmRsZSBzZWxlY3Rpb24gc2VydmljZXMgbWVudS4KKyAgICAgICAgPHJkYXI6Ly9wcm9i
bGVtLzE2NzI3Nzk4PiBhbmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEzMjM2MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogV2ViQ29yZS5leHAuaW46CisKKzIwMTQtMDQtMjkgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25A
YXBwbGUuY29tPgorCiAgICAgICAgIENoYW5nZSBJbWFnZSBDb250cm9scyByZXBsYWNlbWVudCB0
byB1c2Ugc2VsZWN0aW9uIGFuZCBwYXN0ZQogICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTYzMDI3
MjI+IGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxOTkyCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5leHAuaW4KaW5kZXggMTg5MGM2NC4uMjRhMDk1ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5l
eHAuaW4KQEAgLTMyNTEsNiArMzI1MSwxMSBAQCBfX1pOSzdXZWJDb3JlOUZyYW1lVmlldzMxc2V0
V2FudHNMYXllckZvclRvcE92ZXJIYW5nQXJlYUViCiBfX1pOSzdXZWJDb3JlOUZyYW1lVmlldzM0
c2V0V2FudHNMYXllckZvckJvdHRvbU92ZXJIYW5nQXJlYUViCiAjZW5kaWYKIAorI2lmIEVOQUJM
RShTRVJWSUNFX0NPTlRST0xTKQorX19aTjdXZWJDb3JlMjVhdHRyaWJ1dGVkU3RyaW5nRnJvbVJh
bmdlRVJOU181UmFuZ2VFCitfX1pOSzdXZWJDb3JlMTZWaXNpYmxlU2VsZWN0aW9uMTBmaXJzdFJh
bmdlRXYKKyNlbmRpZgorCiAjaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCiBfX1pON1dlYkNv
cmUxNVNwZWVjaFN5bnRoZXNpczIyc2V0UGxhdGZvcm1TeW50aGVzaXplckVOU3QzX18xMTB1bmlx
dWVfcHRySU5TXzI1UGxhdGZvcm1TcGVlY2hTeW50aGVzaXplckVOUzFfMTRkZWZhdWx0X2RlbGV0
ZUlTM19FRUVFCiBfX1pON1dlYkNvcmUyNERPTVdpbmRvd1NwZWVjaFN5bnRoZXNpczE1c3BlZWNo
U3ludGhlc2lzRVBOU185RE9NV2luZG93RQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDIwYWIzNTEuLjQ5MThmMDYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKQEAgLTEsNSArMSw1MyBAQAogMjAxNC0wNC0yOSAgQnJhZHkgRWlkc29uICA8
YmVpZHNvbkBhcHBsZS5jb20+CiAKKyAgICAgICAgSGFuZGxlIHNlbGVjdGlvbiBzZXJ2aWNlcyBt
ZW51LgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTY3Mjc3OTg+IGFuZCBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMyMzYyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIG1lbWJlcnMgZm9yIHRoZSByZWxldmFudCBp
bmZvIGZvciBzaG93aW5nIGEgc2VydmljZSBtZW51IGZvciBhIHNlbGVjdGlvbjoKKyAgICAgICAg
KiBTaGFyZWQvQ29udGV4dE1lbnVDb250ZXh0RGF0YS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNv
bnRleHRNZW51Q29udGV4dERhdGE6OkNvbnRleHRNZW51Q29udGV4dERhdGEpOgorICAgICAgICAo
V2ViS2l0OjpDb250ZXh0TWVudUNvbnRleHREYXRhOjpjb250cm9sbGVkRGF0YUlzRWRpdGFibGUp
OgorICAgICAgICAqIFNoYXJlZC9Db250ZXh0TWVudUNvbnRleHREYXRhLmg6CisgICAgICAgIChX
ZWJLaXQ6OkNvbnRleHRNZW51Q29udGV4dERhdGE6OkNvbnRleHRNZW51Q29udGV4dERhdGEpOgor
ICAgICAgICAoV2ViS2l0OjpDb250ZXh0TWVudUNvbnRleHREYXRhOjpjb250cm9sbGVkU2VsZWN0
aW9uRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OkNvbnRleHRNZW51Q29udGV4dERhdGE6Om5lZWRz
U2VydmljZXNNZW51KToKKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OnJlcGxhY2VTZWxlY3Rpb25XaXRoUGFzdGVib2FyZERhdGEpOiBDaGFuZ2VkIHRvIGFs
bG93IGZvciBtdWx0aXBsZSB0eXBlcyBvbiB0aGUgb3ZlcnJpZGRlbiBwYXN0ZWJvYXJkLgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNob3dTZWxlY3Rpb25TZXJ2aWNlTWVudSk6CisK
KyAgICAgICAgVXBkYXRlIHRoZSBzZXJ2aWNlcyBtZW51IGNvZGUgdG8ga25vdyB0aGUgZGlmZmVy
ZW5jZSBiZXR3ZWVuIGFuIGltYWdlIHNlcnZpY2UgYW5kIGEgc2VsZWN0aW9uIHNlcnZpY2U6Cisg
ICAgICAgICogVUlQcm9jZXNzL21hYy9XZWJDb250ZXh0TWVudVByb3h5TWFjLmg6CisgICAgICAg
ICogVUlQcm9jZXNzL21hYy9XZWJDb250ZXh0TWVudVByb3h5TWFjLm1tOgorICAgICAgICAoLVtX
S1NoYXJpbmdTZXJ2aWNlUGlja2VyRGVsZWdhdGUgc2hhcmluZ1NlcnZpY2VQaWNrZXI6c2hhcmlu
Z1NlcnZpY2VzRm9ySXRlbXM6bWFzazpwcm9wb3NlZFNoYXJpbmdTZXJ2aWNlczpdKToKKyAgICAg
ICAgKC1bV0tTaGFyaW5nU2VydmljZVBpY2tlckRlbGVnYXRlIHNoYXJpbmdTZXJ2aWNlOndpbGxT
aGFyZUl0ZW1zOl0pOgorICAgICAgICAoLVtXS1NoYXJpbmdTZXJ2aWNlUGlja2VyRGVsZWdhdGUg
c2hhcmluZ1NlcnZpY2U6ZGlkU2hhcmVJdGVtczpdKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29u
dGV4dE1lbnVQcm94eU1hYzo6Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJDb250ZXh0TWVudVByb3h5TWFjOjpzZXR1cFNlcnZpY2VzTWVudSk6CisgICAgICAg
IChXZWJLaXQ6OldlYkNvbnRleHRNZW51UHJveHlNYWM6OmNsZWFyU2VydmljZXNNZW51KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViQ29udGV4dE1lbnVQcm94eU1hYzo6cG9wdWxhdGUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJDb250ZXh0TWVudVByb3h5TWFjOjpzaG93Q29udGV4dE1lbnUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJDb250ZXh0TWVudVByb3h5TWFjOjpzZXR1cEltYWdlU2VydmljZXNN
ZW51KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dE1lbnVQcm94eU1hYzo6
Y2xlYXJJbWFnZVNlcnZpY2VzTWVudSk6IERlbGV0ZWQuCisKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYlBhc3RlYm9hcmRPdmVycmlkZXMuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzOjpnZXREYXRhRm9yT3ZlcnJpZGUpOgorCisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvbWFjL1dlYlBhZ2VNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnJlcGxhY2VT
ZWxlY3Rpb25XaXRoUGFzdGVib2FyZERhdGEpOiBDaGFuZ2VkIHRvIGFsbG93IGZvciBtdWx0aXBs
ZSB0eXBlcyBvbiB0aGUgb3ZlcnJpZGRlbiBwYXN0ZWJvYXJkLgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlOjpoYW5kbGVTZWxlY3Rpb25TZXJ2aWNlQ2xpY2spOiBQYXNzIHRoZSByZWxldmFudCBz
ZWxlY3Rpb24gZGF0YSB0aHJvdWdoIHRvIHRoZSBVSVByb2Nlc3MgYXMgUlRGRCBkYXRhLgorCisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9TZWxlY3Rpb25PdmVybGF5Q29udHJvbGxl
ck1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6U2VsZWN0aW9uT3ZlcmxheUNvbnRyb2xsZXI6Omhh
bmRsZUNsaWNrKTogTm90aWZ5IHRoZSBXZWJQYWdlIG9mIHRoZSBjbGljay4KKworMjAxNC0wNC0y
OSAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisKICAgICAgICAgQ2hhbmdlIElt
YWdlIENvbnRyb2xzIHJlcGxhY2VtZW50IHRvIHVzZSBzZWxlY3Rpb24gYW5kIHBhc3RlCiAgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS8xNjMwMjcyMj4gYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzE5OTIKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL0NvbnRleHRNZW51Q29udGV4dERhdGEuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nv
bnRleHRNZW51Q29udGV4dERhdGEuY3BwCmluZGV4IDgyYWEzMDguLmM4NDc3MzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db250ZXh0TWVudUNvbnRleHREYXRhLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29udGV4dE1lbnVDb250ZXh0RGF0YS5jcHAKQEAgLTM4
LDExICszOCwxMyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIG5hbWVzcGFjZSBXZWJLaXQg
ewogCiBDb250ZXh0TWVudUNvbnRleHREYXRhOjpDb250ZXh0TWVudUNvbnRleHREYXRhKCkKKyAg
ICA6IG1fc2VsZWN0aW9uSXNFZGl0YWJsZShmYWxzZSkKIHsKIH0KIAogQ29udGV4dE1lbnVDb250
ZXh0RGF0YTo6Q29udGV4dE1lbnVDb250ZXh0RGF0YShjb25zdCBDb250ZXh0TWVudUNvbnRleHQm
IGNvbnRleHQpCiAgICAgOiBtX3dlYkhpdFRlc3RSZXN1bHREYXRhKFdlYkhpdFRlc3RSZXN1bHQ6
OkRhdGEoY29udGV4dC5oaXRUZXN0UmVzdWx0KCkpKQorICAgICwgbV9zZWxlY3Rpb25Jc0VkaXRh
YmxlKGZhbHNlKQogewogI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQogICAgIEltYWdlKiBp
bWFnZSA9IGNvbnRleHQuY29udHJvbGxlZEltYWdlKCk7CkBAIC05Niw2ICs5OCwxOSBAQCBib29s
IENvbnRleHRNZW51Q29udGV4dERhdGE6OmRlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYgZGVj
b2RlciwgQ29udGV4dE1lbnVDbwogICAgIHJldHVybiB0cnVlOwogfQogCisjaWYgRU5BQkxFKFNF
UlZJQ0VfQ09OVFJPTFMpCitib29sIENvbnRleHRNZW51Q29udGV4dERhdGE6OmNvbnRyb2xsZWRE
YXRhSXNFZGl0YWJsZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2NvbnRyb2xsZWRTZWxlY3Rpb25E
YXRhLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG1fc2VsZWN0aW9uSXNFZGl0YWJsZTsKKwor
ICAgIGlmICghbV9jb250cm9sbGVkSW1hZ2VIYW5kbGUuaXNOdWxsKCkpCisgICAgICAgIHJldHVy
biBtX3dlYkhpdFRlc3RSZXN1bHREYXRhLmlzQ29udGVudEVkaXRhYmxlOworCisgICAgcmV0dXJu
IGZhbHNlOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8g
RU5BQkxFKENPTlRFWFRfTUVOVVMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
Q29udGV4dE1lbnVDb250ZXh0RGF0YS5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0NvbnRleHRN
ZW51Q29udGV4dERhdGEuaAppbmRleCA5YjM2MjczLi4wZDc5Yzk1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvQ29udGV4dE1lbnVDb250ZXh0RGF0YS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9Db250ZXh0TWVudUNvbnRleHREYXRhLmgKQEAgLTQ3LDYgKzQ3LDEwIEBA
IGNsYXNzIENvbnRleHRNZW51Q29udGV4dERhdGEgewogcHVibGljOgogICAgIENvbnRleHRNZW51
Q29udGV4dERhdGEoKTsKICAgICBDb250ZXh0TWVudUNvbnRleHREYXRhKGNvbnN0IFdlYkNvcmU6
OkNvbnRleHRNZW51Q29udGV4dCYpOworICAgIENvbnRleHRNZW51Q29udGV4dERhdGEoY29uc3Qg
VmVjdG9yPHVpbnQ4X3Q+JiBzZWxlY3Rpb25EYXRhLCBib29sIGlzRWRpdGFibGUpCisgICAgICAg
IDogbV9jb250cm9sbGVkU2VsZWN0aW9uRGF0YShzZWxlY3Rpb25EYXRhKQorICAgICAgICAsIG1f
c2VsZWN0aW9uSXNFZGl0YWJsZShpc0VkaXRhYmxlKQorICAgIHsgfQogCiAgICAgQ29udGV4dE1l
bnVDb250ZXh0RGF0YShjb25zdCBDb250ZXh0TWVudUNvbnRleHREYXRhJik7CiAgICAgQ29udGV4
dE1lbnVDb250ZXh0RGF0YSYgb3BlcmF0b3I9KGNvbnN0IENvbnRleHRNZW51Q29udGV4dERhdGEm
KTsKQEAgLTU1LDYgKzU5LDEwIEBAIHB1YmxpYzoKIAogI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRS
T0xTKQogICAgIGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiBjb250cm9sbGVkSW1hZ2VI
YW5kbGUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRyb2xsZWRJbWFnZUhhbmRsZTsgfQorICAgIGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYgY29udHJvbGxlZFNlbGVjdGlvbkRhdGEoKSBjb25zdCB7IHJl
dHVybiBtX2NvbnRyb2xsZWRTZWxlY3Rpb25EYXRhOyB9CisKKyAgICBib29sIGNvbnRyb2xsZWRE
YXRhSXNFZGl0YWJsZSgpIGNvbnN0OworICAgIGJvb2wgbmVlZHNTZXJ2aWNlc01lbnUoKSBjb25z
dCB7IHJldHVybiAhbV9jb250cm9sbGVkSW1hZ2VIYW5kbGUuaXNOdWxsKCkgfHwgIW1fY29udHJv
bGxlZFNlbGVjdGlvbkRhdGEuaXNFbXB0eSgpOyB9CiAjZW5kaWYKIAogICAgIHZvaWQgZW5jb2Rl
KElQQzo6QXJndW1lbnRFbmNvZGVyJikgY29uc3Q7CkBAIC02Niw2ICs3NCw4IEBAIHByaXZhdGU6
CiAKICNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKICAgICBTaGFyZWFibGVCaXRtYXA6Okhh
bmRsZSBtX2NvbnRyb2xsZWRJbWFnZUhhbmRsZTsKKyAgICBWZWN0b3I8dWludDhfdD4gbV9jb250
cm9sbGVkU2VsZWN0aW9uRGF0YTsKKyAgICBib29sIG1fc2VsZWN0aW9uSXNFZGl0YWJsZTsKICNl
bmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IGM3
ODczMTUuLjM4ZWZlZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgK
QEAgLTgxMyw3ICs4MTMsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIEVOQUJMRShTRVJWSUNF
X0NPTlRST0xTKQotICAgIHZvaWQgcmVwbGFjZVNlbGVjdGlvbldpdGhQYXN0ZWJvYXJkRGF0YShj
b25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYpOworICAgIHZvaWQg
cmVwbGFjZVNlbGVjdGlvbldpdGhQYXN0ZWJvYXJkRGF0YShjb25zdCBWZWN0b3I8U3RyaW5nPiYg
dHlwZXMsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYpOwogI2VuZGlmCiAKICAgICB2b2lkIHBh
Z2VTY2FsZUZhY3RvckRpZENoYW5nZShkb3VibGUpOwpAQCAtMTI1NSw2ICsxMjU1LDEwIEBAIHBy
aXZhdGU6CiAjZW5kaWYKICNlbmRpZgogCisjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCisg
ICAgdm9pZCBzaG93U2VsZWN0aW9uU2VydmljZU1lbnUoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNl
JiBzZWxlY3Rpb25Bc1JURkQsIGJvb2wgaXNFZGl0YWJsZSwgY29uc3QgV2ViQ29yZTo6SW50UG9p
bnQmKTsKKyNlbmRpZgorCiAgICAgLy8gU2VhcmNoIHBvcHVwIHJlc3VsdHMKICAgICB2b2lkIHNh
dmVSZWNlbnRTZWFyY2hlcyhjb25zdCBTdHJpbmcmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYpOwog
ICAgIHZvaWQgbG9hZFJlY2VudFNlYXJjaGVzKGNvbnN0IFN0cmluZyYsIFZlY3RvcjxTdHJpbmc+
Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1l
c3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdl
cy5pbgppbmRleCBhYTZlMzk5Li5kOTkwOTI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KQEAgLTM2OSw2ICszNjksMTAgQEAgbWVz
c2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICNlbmRpZgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoU0VS
VklDRV9DT05UUk9MUykKKyAgICBTaG93U2VsZWN0aW9uU2VydmljZU1lbnUoSVBDOjpEYXRhUmVm
ZXJlbmNlIHNlbGVjdGlvbkFzUlRGRCwgYm9vbCBpc0VkaXRhYmxlLCBXZWJDb3JlOjpJbnRQb2lu
dCBwb2ludCkKKyNlbmRpZgorCiAjaWYgVVNFKFFVSUNLX0xPT0spCiAgICAgRGlkU3RhcnRMb2Fk
Rm9yUXVpY2tMb29rRG9jdW1lbnRJbk1haW5GcmFtZShTdHJpbmcgZmlsZU5hbWUsIFN0cmluZyB1
dGkpCiAgICAgRGlkRmluaXNoTG9hZEZvclF1aWNrTG9va0RvY3VtZW50SW5NYWluRnJhbWUoV2Vi
S2l0OjpRdWlja0xvb2tEb2N1bWVudERhdGEgZGF0YSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9tYWMvV2ViQ29udGV4dE1lbnVQcm94eU1hYy5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL21hYy9XZWJDb250ZXh0TWVudVByb3h5TWFjLmgKaW5kZXggMTU1N2M3ZC4u
MTI2NmFjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJDb250
ZXh0TWVudVByb3h5TWFjLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJD
b250ZXh0TWVudVByb3h5TWFjLmgKQEAgLTU0LDcgKzU0LDcgQEAgcHVibGljOgogICAgIHZvaWQg
Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQoY29uc3QgV2ViQ29udGV4dE1lbnVJdGVtRGF0YSYpOwog
CiAjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCi0gICAgdm9pZCBjbGVhckltYWdlU2Vydmlj
ZXNNZW51KCk7CisgICAgdm9pZCBjbGVhclNlcnZpY2VzTWVudSgpOwogI2VuZGlmCiAKICAgICBX
ZWJQYWdlUHJveHkmIHBhZ2UoKSBjb25zdCB7IHJldHVybiAqbV9wYWdlOyB9CkBAIC02Niw3ICs2
Niw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwb3B1bGF0ZShjb25zdCBWZWN0b3I8V2ViQ29udGV4
dE1lbnVJdGVtRGF0YT4mLCBjb25zdCBDb250ZXh0TWVudUNvbnRleHREYXRhJik7CiAKICNpZiBF
TkFCTEUoU0VSVklDRV9DT05UUk9MUykKLSAgICB2b2lkIHNldHVwSW1hZ2VTZXJ2aWNlc01lbnUo
U2hhcmVhYmxlQml0bWFwJiwgYm9vbCBpbmNsdWRlRWRpdG9yU2VydmljZXMpOworICAgIHZvaWQg
c2V0dXBTZXJ2aWNlc01lbnUoY29uc3QgQ29udGV4dE1lbnVDb250ZXh0RGF0YSYpOwogI2VuZGlm
CiAKICAgICBSZXRhaW5QdHI8TlNQb3BVcEJ1dHRvbkNlbGw+IG1fcG9wdXA7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYkNvbnRleHRNZW51UHJveHlNYWMubW0g
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYkNvbnRleHRNZW51UHJveHlNYWMubW0K
aW5kZXggNjdhNTZkYy4uOTZiNDk3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL21hYy9XZWJDb250ZXh0TWVudVByb3h5TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9tYWMvV2ViQ29udGV4dE1lbnVQcm94eU1hYy5tbQpAQCAtMjA4LDcgKzIwOCw3IEBA
IC0gKE5TQXJyYXkgKilzaGFyaW5nU2VydmljZVBpY2tlcjooTlNTaGFyaW5nU2VydmljZVBpY2tl
ciAqKXNoYXJpbmdTZXJ2aWNlUGlja2VyCiB7CiAgICAgaWYgKF9pbmNsdWRlRWRpdG9yU2Vydmlj
ZXMpCiAgICAgICAgIHJldHVybiBwcm9wb3NlZFNlcnZpY2VzOwotICAgICAgICAKKwogICAgIE5T
TXV0YWJsZUFycmF5ICpzZXJ2aWNlcyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRo
Q2FwYWNpdHk6W3Byb3Bvc2VkU2VydmljZXMgY291bnRdXTsKICAgICAKICAgICBmb3IgKE5TU2hh
cmluZ1NlcnZpY2UgKnNlcnZpY2UgaW4gcHJvcG9zZWRTZXJ2aWNlcykgewpAQCAtMjI2LDIwICsy
MjYsNDMgQEAgLSAoaWQgPE5TU2hhcmluZ1NlcnZpY2VEZWxlZ2F0ZT4pc2hhcmluZ1NlcnZpY2VQ
aWNrZXI6KE5TU2hhcmluZ1NlcnZpY2VQaWNrZXIgKikKIAogLSAodm9pZClzaGFyaW5nU2Vydmlj
ZTooTlNTaGFyaW5nU2VydmljZSAqKXNoYXJpbmdTZXJ2aWNlIHdpbGxTaGFyZUl0ZW1zOihOU0Fy
cmF5ICopaXRlbXMKIHsKLSAgICBfbWVudVByb3h5LT5jbGVhckltYWdlU2VydmljZXNNZW51KCk7
CisgICAgX21lbnVQcm94eS0+Y2xlYXJTZXJ2aWNlc01lbnUoKTsKIH0KIAogLSAodm9pZClzaGFy
aW5nU2VydmljZTooTlNTaGFyaW5nU2VydmljZSAqKXNoYXJpbmdTZXJ2aWNlIGRpZFNoYXJlSXRl
bXM6KE5TQXJyYXkgKilpdGVtcwogewotICAgIE5TRGF0YSAqZGF0YSA9IFtpdGVtcyBvYmplY3RB
dEluZGV4OjBdOwotICAgIFJldGFpblB0cjxDR0ltYWdlU291cmNlUmVmPiBzb3VyY2UgPSBhZG9w
dENGKENHSW1hZ2VTb3VyY2VDcmVhdGVXaXRoRGF0YSgoQ0ZEYXRhUmVmKWRhdGEsIE5VTEwpKTsK
LSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VD
cmVhdGVJbWFnZUF0SW5kZXgoc291cmNlLmdldCgpLCAwLCBOVUxMKSk7CisgICAgLy8gV2Ugb25s
eSBjYXJlIGFib3V0IHdoYXQgaXRlbSB3YXMgc2hhcmVkIGlmIHdlIHdlcmUgaW50ZXJlc3RlZCBp
biBlZGl0b3Igc2VydmljZXMKKyAgICAvLyAoaS5lLiwgaWYgd2UgcGxhbiBvbiByZXBsYWNpbmcg
dGhlIHNlbGVjdGlvbiB3aXRoIHRoZSByZXR1cm5lZCBpdGVtKQorICAgIGlmICghX2luY2x1ZGVF
ZGl0b3JTZXJ2aWNlcykKKyAgICAgICAgcmV0dXJuOworCisgICAgVmVjdG9yPFN0cmluZz4gdHlw
ZXM7CisgICAgSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGFSZWZlcmVuY2U7CisKKyAgICBpZCBpdGVt
ID0gW2l0ZW1zIG9iamVjdEF0SW5kZXg6MF07CisKKyAgICBpZiAoW2l0ZW0gaXNLaW5kT2ZDbGFz
czpbTlNBdHRyaWJ1dGVkU3RyaW5nIGNsYXNzXV0pIHsKKyAgICAgICAgTlNEYXRhICpkYXRhID0g
W2l0ZW0gUlRGREZyb21SYW5nZTpOU01ha2VSYW5nZSgwLCBbaXRlbSBsZW5ndGhdKSBkb2N1bWVu
dEF0dHJpYnV0ZXM6bmlsXTsKKyAgICAgICAgZGF0YVJlZmVyZW5jZSA9IElQQzo6RGF0YVJlZmVy
ZW5jZShzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oW2RhdGEgYnl0ZXNdKSwgW2RhdGEgbGVu
Z3RoXSk7CisKKyAgICAgICAgdHlwZXMuYXBwZW5kKE5TUGFzdGVib2FyZFR5cGVSVEZEKTsKKyAg
ICAgICAgdHlwZXMuYXBwZW5kKE5TUlRGRFBib2FyZFR5cGUpOworICAgIH0gZWxzZSBpZiAoW2l0
ZW0gaXNLaW5kT2ZDbGFzczpbTlNEYXRhIGNsYXNzXV0pIHsKKyAgICAgICAgTlNEYXRhICpkYXRh
ID0gKE5TRGF0YSAqKWl0ZW07CisgICAgICAgIFJldGFpblB0cjxDR0ltYWdlU291cmNlUmVmPiBz
b3VyY2UgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDcmVhdGVXaXRoRGF0YSgoQ0ZEYXRhUmVmKWRh
dGEsIE5VTEwpKTsKKyAgICAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlID0gYWRvcHRD
RihDR0ltYWdlU291cmNlQ3JlYXRlSW1hZ2VBdEluZGV4KHNvdXJjZS5nZXQoKSwgMCwgTlVMTCkp
OwogCi0gICAgaWYgKCFpbWFnZSkKKyAgICAgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBkYXRhUmVmZXJlbmNlID0gSVBDOjpEYXRhUmVmZXJlbmNlKHN0YXRp
Y19jYXN0PGNvbnN0IHVpbnQ4X3QqPihbZGF0YSBieXRlc10pLCBbZGF0YSBsZW5ndGhdKTsKKyAg
ICAgICAgdHlwZXMuYXBwZW5kKE5TUGFzdGVib2FyZFR5cGVUSUZGKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBMT0dfRVJST1IoInNoYXJpbmdTZXJ2aWNlOmRpZFNoYXJlSXRlbXM6IC0gVW5rbm93
biBpdGVtIHR5cGUgcmV0dXJuZWRcbiIpOwogICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAg
SVBDOjpEYXRhUmVmZXJlbmNlIGRhdGFSZWZlcmVuY2Uoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhf
dCo+KFtkYXRhIGJ5dGVzXSksIFtkYXRhIGxlbmd0aF0pOwotICAgIF9tZW51UHJveHktPnBhZ2Uo
KS5yZXBsYWNlU2VsZWN0aW9uV2l0aFBhc3RlYm9hcmREYXRhKE5TUGFzdGVib2FyZFR5cGVUSUZG
LCBkYXRhUmVmZXJlbmNlKTsKKyAgICBfbWVudVByb3h5LT5wYWdlKCkucmVwbGFjZVNlbGVjdGlv
bldpdGhQYXN0ZWJvYXJkRGF0YSh0eXBlcywgZGF0YVJlZmVyZW5jZSk7CiB9CiAKIC0gKE5TV2lu
ZG93ICopc2hhcmluZ1NlcnZpY2U6KE5TU2hhcmluZ1NlcnZpY2UgKilzaGFyaW5nU2VydmljZSBz
b3VyY2VXaW5kb3dGb3JTaGFyZUl0ZW1zOihOU0FycmF5ICopaXRlbXMgc2hhcmluZ0NvbnRlbnRT
Y29wZTooTlNTaGFyaW5nQ29udGVudFNjb3BlICopc2hhcmluZ0NvbnRlbnRTY29wZQpAQCAtMjY5
LDcgKzI5Miw3IEBAIFdlYkNvbnRleHRNZW51UHJveHlNYWM6On5XZWJDb250ZXh0TWVudVByb3h5
TWFjKCkKIHZvaWQgV2ViQ29udGV4dE1lbnVQcm94eU1hYzo6Y29udGV4dE1lbnVJdGVtU2VsZWN0
ZWQoY29uc3QgV2ViQ29udGV4dE1lbnVJdGVtRGF0YSYgaXRlbSkKIHsKICNpZiBFTkFCTEUoU0VS
VklDRV9DT05UUk9MUykKLSAgICBjbGVhckltYWdlU2VydmljZXNNZW51KCk7CisgICAgY2xlYXJT
ZXJ2aWNlc01lbnUoKTsKICNlbmRpZgogCiAgICAgbV9wYWdlLT5jb250ZXh0TWVudUl0ZW1TZWxl
Y3RlZChpdGVtKTsKQEAgLTM0MiwxMiArMzY1LDMyIEBAIHN0YXRpYyBWZWN0b3I8UmV0YWluUHRy
PE5TTWVudUl0ZW0+PiBuc01lbnVJdGVtVmVjdG9yKGNvbnN0IFZlY3RvcjxXZWJDb250ZXh0TWVu
CiB9CiAKICNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKLXZvaWQgV2ViQ29udGV4dE1lbnVQ
cm94eU1hYzo6c2V0dXBJbWFnZVNlcnZpY2VzTWVudShTaGFyZWFibGVCaXRtYXAmIGltYWdlLCBi
b29sIGluY2x1ZGVFZGl0b3JTZXJ2aWNlcykKKwordm9pZCBXZWJDb250ZXh0TWVudVByb3h5TWFj
OjpzZXR1cFNlcnZpY2VzTWVudShjb25zdCBDb250ZXh0TWVudUNvbnRleHREYXRhJiBjb250ZXh0
KQogewotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjZ0ltYWdlID0gaW1hZ2UubWFrZUNHSW1h
Z2UoKTsKLSAgICBSZXRhaW5QdHI8TlNJbWFnZT4gbnNJbWFnZSA9IGFkb3B0TlMoW1tOU0ltYWdl
IGFsbG9jXSBpbml0V2l0aENHSW1hZ2U6Y2dJbWFnZS5nZXQoKSBzaXplOmltYWdlLnNpemUoKV0p
OworICAgIFJldGFpblB0cjxOU1NoYXJpbmdTZXJ2aWNlUGlja2VyPiBwaWNrZXI7CisgICAgYm9v
bCBpbmNsdWRlRWRpdG9yU2VydmljZXMgPSBjb250ZXh0LmNvbnRyb2xsZWREYXRhSXNFZGl0YWJs
ZSgpOworCisgICAgaWYgKCFjb250ZXh0LmNvbnRyb2xsZWRJbWFnZUhhbmRsZSgpLmlzTnVsbCgp
KSB7CisgICAgICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGltYWdlID0gU2hhcmVhYmxlQml0
bWFwOjpjcmVhdGUoY29udGV4dC5jb250cm9sbGVkSW1hZ2VIYW5kbGUoKSk7CisgICAgICAgIGlm
ICghaW1hZ2UpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgUmV0YWluUHRyPENHSW1h
Z2VSZWY+IGNnSW1hZ2UgPSBpbWFnZS0+bWFrZUNHSW1hZ2UoKTsKKyAgICAgICAgUmV0YWluUHRy
PE5TSW1hZ2U+IG5zSW1hZ2UgPSBhZG9wdE5TKFtbTlNJbWFnZSBhbGxvY10gaW5pdFdpdGhDR0lt
YWdlOmNnSW1hZ2UuZ2V0KCkgc2l6ZTppbWFnZS0+c2l6ZSgpXSk7CisgICAgICAgIHBpY2tlciA9
IGFkb3B0TlMoW1tOU1NoYXJpbmdTZXJ2aWNlUGlja2VyIGFsbG9jXSBpbml0V2l0aEl0ZW1zOkBb
IG5zSW1hZ2UuZ2V0KCkgXV0pOworICAgIH0gZWxzZSBpZiAoIWNvbnRleHQuY29udHJvbGxlZFNl
bGVjdGlvbkRhdGEoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgTlNEYXRhICpzZWxlY3Rpb25EYXRh
ID0gW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6KHZvaWQqKWNvbnRleHQuY29udHJvbGxl
ZFNlbGVjdGlvbkRhdGEoKS5kYXRhKCkgbGVuZ3RoOmNvbnRleHQuY29udHJvbGxlZFNlbGVjdGlv
bkRhdGEoKS5zaXplKCldOworICAgICAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKnNlbGVjdGlvbiA9
IFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFJURkQ6c2VsZWN0aW9uRGF0YSBk
b2N1bWVudEF0dHJpYnV0ZXM6bmlsXTsKKworICAgICAgICBwaWNrZXIgPSBhZG9wdE5TKFtbTlNT
aGFyaW5nU2VydmljZVBpY2tlciBhbGxvY10gaW5pdFdpdGhJdGVtczpAWyBzZWxlY3Rpb24gXV0p
OworICAgIH0gZWxzZSB7CisgICAgICAgIExPR19FUlJPUigiTm8gc2VydmljZSBjb250cm9sbGVk
IGl0ZW0gcmVwcmVzZW50ZWQgaW4gdGhlIGNvbnRleHQiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIEFTU0VSVChwaWNrZXIpOwogCi0gICAgUmV0YWluUHRyPE5TU2hhcmluZ1NlcnZp
Y2VQaWNrZXI+IHBpY2tlciA9IGFkb3B0TlMoW1tOU1NoYXJpbmdTZXJ2aWNlUGlja2VyIGFsbG9j
XSBpbml0V2l0aEl0ZW1zOkBbIG5zSW1hZ2UuZ2V0KCkgXV0pOwogICAgIFtwaWNrZXIgc2V0U3R5
bGU6TlNTaGFyaW5nU2VydmljZVBpY2tlclN0eWxlUm9sbG92ZXJdOwogICAgIFtwaWNrZXIgc2V0
RGVsZWdhdGU6W1dLU2hhcmluZ1NlcnZpY2VQaWNrZXJEZWxlZ2F0ZSBzaGFyZWRTaGFyaW5nU2Vy
dmljZVBpY2tlckRlbGVnYXRlXV07CiAgICAgW1tXS1NoYXJpbmdTZXJ2aWNlUGlja2VyRGVsZWdh
dGUgc2hhcmVkU2hhcmluZ1NlcnZpY2VQaWNrZXJEZWxlZ2F0ZV0gc2V0UGlja2VyOnBpY2tlci5n
ZXQoKV07CkBAIC0zNTYsNyArMzk5LDcgQEAgdm9pZCBXZWJDb250ZXh0TWVudVByb3h5TWFjOjpz
ZXR1cEltYWdlU2VydmljZXNNZW51KFNoYXJlYWJsZUJpdG1hcCYgaW1hZ2UsIGJvb2wKICAgICBt
X3NlcnZpY2VzTWVudSA9IFtwaWNrZXIgbWVudV07CiB9CiAKLXZvaWQgV2ViQ29udGV4dE1lbnVQ
cm94eU1hYzo6Y2xlYXJJbWFnZVNlcnZpY2VzTWVudSgpCit2b2lkIFdlYkNvbnRleHRNZW51UHJv
eHlNYWM6OmNsZWFyU2VydmljZXNNZW51KCkKIHsKICAgICBbW1dLU2hhcmluZ1NlcnZpY2VQaWNr
ZXJEZWxlZ2F0ZSBzaGFyZWRTaGFyaW5nU2VydmljZVBpY2tlckRlbGVnYXRlXSBzZXRQaWNrZXI6
bnVsbHB0cl07CiAgICAgbV9zZXJ2aWNlc01lbnUgPSBudWxscHRyOwpAQCAtMzY2LDggKzQwOSw4
IEBAIHZvaWQgV2ViQ29udGV4dE1lbnVQcm94eU1hYzo6Y2xlYXJJbWFnZVNlcnZpY2VzTWVudSgp
CiB2b2lkIFdlYkNvbnRleHRNZW51UHJveHlNYWM6OnBvcHVsYXRlKGNvbnN0IFZlY3RvcjxXZWJD
b250ZXh0TWVudUl0ZW1EYXRhPiYgaXRlbXMsIGNvbnN0IENvbnRleHRNZW51Q29udGV4dERhdGEm
IGNvbnRleHQpCiB7CiAjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCi0gICAgaWYgKFJlZlB0
cjxTaGFyZWFibGVCaXRtYXA+IGltYWdlID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoY29udGV4
dC5jb250cm9sbGVkSW1hZ2VIYW5kbGUoKSkpIHsKLSAgICAgICAgc2V0dXBJbWFnZVNlcnZpY2Vz
TWVudSgqaW1hZ2UsIGNvbnRleHQud2ViSGl0VGVzdFJlc3VsdERhdGEoKS5pc0NvbnRlbnRFZGl0
YWJsZSk7CisgICAgaWYgKGNvbnRleHQubmVlZHNTZXJ2aWNlc01lbnUoKSkgeworICAgICAgICBz
ZXR1cFNlcnZpY2VzTWVudShjb250ZXh0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRp
ZgpAQCAtMzg3LDcgKzQzMCw3IEBAIHZvaWQgV2ViQ29udGV4dE1lbnVQcm94eU1hYzo6cG9wdWxh
dGUoY29uc3QgVmVjdG9yPFdlYkNvbnRleHRNZW51SXRlbURhdGE+JiBpdGVtCiB2b2lkIFdlYkNv
bnRleHRNZW51UHJveHlNYWM6OnNob3dDb250ZXh0TWVudShjb25zdCBJbnRQb2ludCYgbWVudUxv
Y2F0aW9uLCBjb25zdCBWZWN0b3I8V2ViQ29udGV4dE1lbnVJdGVtRGF0YT4mIGl0ZW1zLCBjb25z
dCBDb250ZXh0TWVudUNvbnRleHREYXRhJiBjb250ZXh0KQogewogI2lmIEVOQUJMRShTRVJWSUNF
X0NPTlRST0xTKQotICAgIGlmIChpdGVtcy5pc0VtcHR5KCkgJiYgY29udGV4dC5jb250cm9sbGVk
SW1hZ2VIYW5kbGUoKS5pc051bGwoKSkKKyAgICBpZiAoaXRlbXMuaXNFbXB0eSgpICYmICFjb250
ZXh0Lm5lZWRzU2VydmljZXNNZW51KCkpCiAgICAgICAgIHJldHVybjsKICNlbHNlCiAgICAgaWYg
KGl0ZW1zLmlzRW1wdHkoKSkKQEAgLTQwMSw3ICs0NDQsNyBAQCB2b2lkIFdlYkNvbnRleHRNZW51
UHJveHlNYWM6OnNob3dDb250ZXh0TWVudShjb25zdCBJbnRQb2ludCYgbWVudUxvY2F0aW9uLCBj
b25zdAogICAgIE5TUmVjdCBtZW51UmVjdCA9IE5TTWFrZVJlY3QobWVudUxvY2F0aW9uLngoKSwg
bWVudUxvY2F0aW9uLnkoKSwgMCwgMCk7CiAKICNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykK
LSAgICBpZiAoIWNvbnRleHQuY29udHJvbGxlZEltYWdlSGFuZGxlKCkuaXNOdWxsKCkpCisgICAg
aWYgKGNvbnRleHQubmVlZHNTZXJ2aWNlc01lbnUoKSkKICAgICAgICAgW1tXS1NoYXJpbmdTZXJ2
aWNlUGlja2VyRGVsZWdhdGUgc2hhcmVkU2hhcmluZ1NlcnZpY2VQaWNrZXJEZWxlZ2F0ZV0gc2V0
TWVudVByb3h5OnRoaXNdOwogCiAgICAgaWYgKCFtX3NlcnZpY2VzTWVudSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0KaW5kZXggMjE0OWJmNi4u
MzVkODBkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJQYWdl
UHJveHlNYWMubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJv
eHlNYWMubW0KQEAgLTM5Niw5ICszOTYsOSBAQCBib29sIFdlYlBhZ2VQcm94eTo6cmVhZFNlbGVj
dGlvbkZyb21QYXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCiB9CiAKICNp
ZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKLXZvaWQgV2ViUGFnZVByb3h5OjpyZXBsYWNlU2Vs
ZWN0aW9uV2l0aFBhc3RlYm9hcmREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgSVBDOjpE
YXRhUmVmZXJlbmNlJiBkYXRhKQordm9pZCBXZWJQYWdlUHJveHk6OnJlcGxhY2VTZWxlY3Rpb25X
aXRoUGFzdGVib2FyZERhdGEoY29uc3QgVmVjdG9yPFN0cmluZz4mIHR5cGVzLCBjb25zdCBJUEM6
OkRhdGFSZWZlcmVuY2UmIGRhdGEpCiB7Ci0gICAgcHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2U6OlJlcGxhY2VTZWxlY3Rpb25XaXRoUGFzdGVib2FyZERhdGEodHlwZSwgZGF0YSksIG1f
cGFnZUlEKTsKKyAgICBwcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UmVwbGFjZVNl
bGVjdGlvbldpdGhQYXN0ZWJvYXJkRGF0YSh0eXBlcywgZGF0YSksIG1fcGFnZUlEKTsKIH0KICNl
bmRpZgogCkBAIC02OTYsNiArNjk2LDE2IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzaG93VGVsZXBo
b25lTnVtYmVyTWVudShjb25zdCBTdHJpbmcmIHRlbGVwaG9uZU51bWJlciwgY29uc3QKIH0KICNl
bmRpZgogCisjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCit2b2lkIFdlYlBhZ2VQcm94eTo6
c2hvd1NlbGVjdGlvblNlcnZpY2VNZW51KGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgc2VsZWN0
aW9uQXNSVEZELCBib29sIGlzRWRpdGFibGUsIGNvbnN0IEludFBvaW50JiBwb2ludCkKK3sKKyAg
ICBWZWN0b3I8V2ViQ29udGV4dE1lbnVJdGVtRGF0YT4gaXRlbXM7CisgICAgQ29udGV4dE1lbnVD
b250ZXh0RGF0YSBjb250ZXh0RGF0YShzZWxlY3Rpb25Bc1JURkQudmVjdG9yKCksIGlzRWRpdGFi
bGUpOworCisgICAgaW50ZXJuYWxTaG93Q29udGV4dE1lbnUocG9pbnQsIGNvbnRleHREYXRhLCBp
dGVtcywgQ29udGV4dE1lbnVDbGllbnRFbGlnaWJpbGl0eTo6Tm90RWxpZ2libGVGb3JDbGllbnQs
IG51bGxwdHIpOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYg
Ly8gUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGFzdGVib2FyZE92ZXJyaWRlcy5jcHAKaW5k
ZXggNGEzNTEzMS4uNzZiMDA0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBhc3RlYm9hcmRPdmVycmlkZXMu
Y3BwCkBAIC0xMDIsNyArMTAyLDcgQEAgYm9vbCBXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzOjpnZXRE
YXRhRm9yT3ZlcnJpZGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY28KICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgZGF0YS5jbGVhcigpOwotICAgIGRhdGEucmVzZXJ2ZUNhcGFj
aXR5KGZvdW5kQnVmZmVyLnNpemUoKSk7CisgICAgZGF0YS5yZXNpemUoZm91bmRCdWZmZXIuc2l6
ZSgpKTsKICAgICBtZW1jcHkoZGF0YS5kYXRhKCksIGZvdW5kQnVmZmVyLmRhdGEoKSwgZm91bmRC
dWZmZXIuc2l6ZSgpKTsKIAogICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5kZXggMzMyYjM0MC4uMDkxM2EzMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCkBAIC01ODksNyArNTg5LDcg
QEAgcHVibGljOgogICAgIGJvb2wgcGVyZm9ybU5vbkVkaXRpbmdCZWhhdmlvckZvclNlbGVjdG9y
KGNvbnN0IFN0cmluZyYsIFdlYkNvcmU6OktleWJvYXJkRXZlbnQqKTsKIAogI2lmIEVOQUJMRShT
RVJWSUNFX0NPTlRST0xTKQotICAgIHZvaWQgcmVwbGFjZVNlbGVjdGlvbldpdGhQYXN0ZWJvYXJk
RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYpOworICAg
IHZvaWQgcmVwbGFjZVNlbGVjdGlvbldpdGhQYXN0ZWJvYXJkRGF0YShjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgdHlwZXMsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYpOwogI2VuZGlmCiAKICNlbGlm
IFBMQVRGT1JNKEVGTCkKQEAgLTc4OSw2ICs3ODksNyBAQCBwdWJsaWM6CiAjZW5kaWYKICNpZiBF
TkFCTEUoU0VSVklDRV9DT05UUk9MUykKICAgICBTZWxlY3Rpb25PdmVybGF5Q29udHJvbGxlciYg
c2VsZWN0aW9uT3ZlcmxheUNvbnRyb2xsZXIoKTsKKyAgICB2b2lkIGhhbmRsZVNlbGVjdGlvblNl
cnZpY2VDbGljayhXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbiYsIGNvbnN0IFdlYkNvcmU6OkludFBv
aW50Jik7CiAgICAgYm9vbCBzZXJ2aWNlQ29udHJvbHNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4g
bV9zZXJ2aWNlQ29udHJvbHNFbmFibGVkOyB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4gYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgppbmRleCAzMjNh
ZDNmLi4yZTBjZDJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgpAQCAtMzA0LDcgKzMwNCw3IEBAIG1lc3NhZ2VzIC0+
IFdlYlBhZ2UgTGVnYWN5UmVjZWl2ZXIgewogICAgIFJlYWRTZWxlY3Rpb25Gcm9tUGFzdGVib2Fy
ZChTdHJpbmcgcGFzdGVib2FyZE5hbWUpIC0+IChib29sIHJlc3VsdCkKIAogI2lmIEVOQUJMRShT
RVJWSUNFX0NPTlRST0xTKQotICAgIFJlcGxhY2VTZWxlY3Rpb25XaXRoUGFzdGVib2FyZERhdGEo
U3RyaW5nIHR5cGUsIElQQzo6RGF0YVJlZmVyZW5jZSBkYXRhKQorICAgIFJlcGxhY2VTZWxlY3Rp
b25XaXRoUGFzdGVib2FyZERhdGEoVmVjdG9yPFN0cmluZz4gdHlwZXMsIElQQzo6RGF0YVJlZmVy
ZW5jZSBkYXRhKQogI2VuZGlmCiAKICAgICBTaG91bGREZWxheVdpbmRvd09yZGVyaW5nRXZlbnQo
V2ViS2l0OjpXZWJNb3VzZUV2ZW50IGV2ZW50KSAtPiAoYm9vbCByZXN1bHQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1NlbGVjdGlvbk92ZXJsYXlD
b250cm9sbGVyTWFjLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9T
ZWxlY3Rpb25PdmVybGF5Q29udHJvbGxlck1hYy5tbQppbmRleCA0OTk3NTMyLi5kMmQ4OTc2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1NlbGVjdGlv
bk92ZXJsYXlDb250cm9sbGVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9tYWMvU2VsZWN0aW9uT3ZlcmxheUNvbnRyb2xsZXJNYWMubW0KQEAgLTE1OSw3ICsx
NTksNyBAQCBib29sIFNlbGVjdGlvbk92ZXJsYXlDb250cm9sbGVyOjptb3VzZUV2ZW50KFBhZ2VP
dmVybGF5KiwgY29uc3QgV2ViTW91c2VFdmVudCYgZQogCiB2b2lkIFNlbGVjdGlvbk92ZXJsYXlD
b250cm9sbGVyOjpoYW5kbGVDbGljayhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQpCiB7
Ci0gICAgLy8gRklYTUU6IEhhbmRsZSB0aGUgY2xpY2sgaGVyZS4KKyAgICBtX3dlYlBhZ2UtPmhh
bmRsZVNlbGVjdGlvblNlcnZpY2VDbGljayhtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPm1haW5GcmFt
ZSgpLnNlbGVjdGlvbigpLCBwb2ludCk7CiB9CiAgICAgCiB2b2lkIFNlbGVjdGlvbk92ZXJsYXlD
b250cm9sbGVyOjpjbGVhckhpZ2hsaWdodCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KaW5kZXggYzdjNjJlNy4uNDZmNjU1ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdl
TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFn
ZU1hYy5tbQpAQCAtNjc4LDE0ICs2NzgsMTYgQEAgc3RhdGljIFN0cmluZyYgcmVwbGFjZVNlbGVj
dGlvblBhc3RlYm9hcmROYW1lKCkKICAgICByZXR1cm4gc3RyaW5nOwogfQogCi12b2lkIFdlYlBh
Z2U6OnJlcGxhY2VTZWxlY3Rpb25XaXRoUGFzdGVib2FyZERhdGEoY29uc3QgU3RyaW5nJiB0eXBl
LCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIGRhdGEpCit2b2lkIFdlYlBhZ2U6OnJlcGxhY2VT
ZWxlY3Rpb25XaXRoUGFzdGVib2FyZERhdGEoY29uc3QgVmVjdG9yPFN0cmluZz4mIHR5cGVzLCBj
b25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIGRhdGEpCiB7Ci0gICAgV2ViUGFzdGVib2FyZE92ZXJy
aWRlczo6c2hhcmVkUGFzdGVib2FyZE92ZXJyaWRlcygpLmFkZE92ZXJyaWRlKHJlcGxhY2VTZWxl
Y3Rpb25QYXN0ZWJvYXJkTmFtZSgpLCB0eXBlLCBkYXRhLnZlY3RvcigpKTsKKyAgICBmb3IgKGF1
dG8mIHR5cGUgOiB0eXBlcykKKyAgICAgICAgV2ViUGFzdGVib2FyZE92ZXJyaWRlczo6c2hhcmVk
UGFzdGVib2FyZE92ZXJyaWRlcygpLmFkZE92ZXJyaWRlKHJlcGxhY2VTZWxlY3Rpb25QYXN0ZWJv
YXJkTmFtZSgpLCB0eXBlLCBkYXRhLnZlY3RvcigpKTsKIAogICAgIGJvb2wgcmVzdWx0OwogICAg
IHJlYWRTZWxlY3Rpb25Gcm9tUGFzdGVib2FyZChyZXBsYWNlU2VsZWN0aW9uUGFzdGVib2FyZE5h
bWUoKSwgcmVzdWx0KTsKIAotICAgIFdlYlBhc3RlYm9hcmRPdmVycmlkZXM6OnNoYXJlZFBhc3Rl
Ym9hcmRPdmVycmlkZXMoKS5yZW1vdmVPdmVycmlkZShyZXBsYWNlU2VsZWN0aW9uUGFzdGVib2Fy
ZE5hbWUoKSwgdHlwZSk7CisgICAgZm9yIChhdXRvJiB0eXBlIDogdHlwZXMpCisgICAgICAgIFdl
YlBhc3RlYm9hcmRPdmVycmlkZXM6OnNoYXJlZFBhc3RlYm9hcmRPdmVycmlkZXMoKS5yZW1vdmVP
dmVycmlkZShyZXBsYWNlU2VsZWN0aW9uUGFzdGVib2FyZE5hbWUoKSwgdHlwZSk7CiB9CiAjZW5k
aWYKIApAQCAtMTAyMiw2ICsxMDI0LDI1IEBAIHZvaWQgV2ViUGFnZTo6aGFuZGxlVGVsZXBob25l
TnVtYmVyQ2xpY2soY29uc3QgU3RyaW5nJiBudW1iZXIsIGNvbnN0IEludFBvaW50JiBwCiB9CiAj
ZW5kaWYKIAorI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQordm9pZCBXZWJQYWdlOjpoYW5k
bGVTZWxlY3Rpb25TZXJ2aWNlQ2xpY2soRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgY29uc3Qg
SW50UG9pbnQmIHBvaW50KQoreworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBzZWxlY3Rpb24u
c2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOworICAgIGlmICghcmFuZ2UpCisgICAgICAgIHJldHVy
bjsKKworICAgIE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFNlbGVjdGlvbiA9IGF0dHJp
YnV0ZWRTdHJpbmdGcm9tUmFuZ2UoKnJhbmdlKTsKKyAgICBpZiAoIWF0dHJpYnV0ZWRTZWxlY3Rp
b24pCisgICAgICAgIHJldHVybjsKKworICAgIE5TRGF0YSAqc2VsZWN0aW9uRGF0YSA9IFthdHRy
aWJ1dGVkU2VsZWN0aW9uIFJURkRGcm9tUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW2F0dHJpYnV0ZWRT
ZWxlY3Rpb24gbGVuZ3RoXSkgZG9jdW1lbnRBdHRyaWJ1dGVzOm5pbF07CisgICAgSVBDOjpEYXRh
UmVmZXJlbmNlIGRhdGEgPSBJUEM6OkRhdGFSZWZlcmVuY2UocmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1aW50OF90Kj4oW3NlbGVjdGlvbkRhdGEgYnl0ZXNdKSwgW3NlbGVjdGlvbkRhdGEgbGVuZ3Ro
XSk7CisgICAgYm9vbCBpc0VkaXRhYmxlID0gc2VsZWN0aW9uLnNlbGVjdGlvbigpLmlzQ29udGVu
dFJpY2hseUVkaXRhYmxlKCk7CisKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNo
b3dTZWxlY3Rpb25TZXJ2aWNlTWVudShkYXRhLCBpc0VkaXRhYmxlLCBwb2ludCkpOworfQorI2Vu
ZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>230441</attachid>
            <date>2014-04-29 16:56:13 -0700</date>
            <delta_ts>2014-04-29 18:04:44 -0700</delta_ts>
            <desc>Patch v2 - Review feedback and hopefully more building</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>23126</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA1YjA5MTc5Li41NTU4Mjc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTQg
QEAKIDIwMTQtMDQtMjkgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCisgICAg
ICAgIEhhbmRsZSBzZWxlY3Rpb24gc2VydmljZXMgbWVudS4KKyAgICAgICAgPHJkYXI6Ly9wcm9i
bGVtLzE2NzI3Nzk4PiBhbmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEzMjM2MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogV2ViQ29yZS5leHAuaW46CisKKzIwMTQtMDQtMjkgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25A
YXBwbGUuY29tPgorCiAgICAgICAgIENoYW5nZSBJbWFnZSBDb250cm9scyByZXBsYWNlbWVudCB0
byB1c2Ugc2VsZWN0aW9uIGFuZCBwYXN0ZQogICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTYzMDI3
MjI+IGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxOTkyCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5leHAuaW4KaW5kZXggMTg5MGM2NC4uMjRhMDk1ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5l
eHAuaW4KQEAgLTMyNTEsNiArMzI1MSwxMSBAQCBfX1pOSzdXZWJDb3JlOUZyYW1lVmlldzMxc2V0
V2FudHNMYXllckZvclRvcE92ZXJIYW5nQXJlYUViCiBfX1pOSzdXZWJDb3JlOUZyYW1lVmlldzM0
c2V0V2FudHNMYXllckZvckJvdHRvbU92ZXJIYW5nQXJlYUViCiAjZW5kaWYKIAorI2lmIEVOQUJM
RShTRVJWSUNFX0NPTlRST0xTKQorX19aTjdXZWJDb3JlMjVhdHRyaWJ1dGVkU3RyaW5nRnJvbVJh
bmdlRVJOU181UmFuZ2VFCitfX1pOSzdXZWJDb3JlMTZWaXNpYmxlU2VsZWN0aW9uMTBmaXJzdFJh
bmdlRXYKKyNlbmRpZgorCiAjaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCiBfX1pON1dlYkNv
cmUxNVNwZWVjaFN5bnRoZXNpczIyc2V0UGxhdGZvcm1TeW50aGVzaXplckVOU3QzX18xMTB1bmlx
dWVfcHRySU5TXzI1UGxhdGZvcm1TcGVlY2hTeW50aGVzaXplckVOUzFfMTRkZWZhdWx0X2RlbGV0
ZUlTM19FRUVFCiBfX1pON1dlYkNvcmUyNERPTVdpbmRvd1NwZWVjaFN5bnRoZXNpczE1c3BlZWNo
U3ludGhlc2lzRVBOU185RE9NV2luZG93RQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDIwYWIzNTEuLjQ5MThmMDYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKQEAgLTEsNSArMSw1MyBAQAogMjAxNC0wNC0yOSAgQnJhZHkgRWlkc29uICA8
YmVpZHNvbkBhcHBsZS5jb20+CiAKKyAgICAgICAgSGFuZGxlIHNlbGVjdGlvbiBzZXJ2aWNlcyBt
ZW51LgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTY3Mjc3OTg+IGFuZCBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMyMzYyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIG1lbWJlcnMgZm9yIHRoZSByZWxldmFudCBp
bmZvIGZvciBzaG93aW5nIGEgc2VydmljZSBtZW51IGZvciBhIHNlbGVjdGlvbjoKKyAgICAgICAg
KiBTaGFyZWQvQ29udGV4dE1lbnVDb250ZXh0RGF0YS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNv
bnRleHRNZW51Q29udGV4dERhdGE6OkNvbnRleHRNZW51Q29udGV4dERhdGEpOgorICAgICAgICAo
V2ViS2l0OjpDb250ZXh0TWVudUNvbnRleHREYXRhOjpjb250cm9sbGVkRGF0YUlzRWRpdGFibGUp
OgorICAgICAgICAqIFNoYXJlZC9Db250ZXh0TWVudUNvbnRleHREYXRhLmg6CisgICAgICAgIChX
ZWJLaXQ6OkNvbnRleHRNZW51Q29udGV4dERhdGE6OkNvbnRleHRNZW51Q29udGV4dERhdGEpOgor
ICAgICAgICAoV2ViS2l0OjpDb250ZXh0TWVudUNvbnRleHREYXRhOjpjb250cm9sbGVkU2VsZWN0
aW9uRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OkNvbnRleHRNZW51Q29udGV4dERhdGE6Om5lZWRz
U2VydmljZXNNZW51KToKKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OnJlcGxhY2VTZWxlY3Rpb25XaXRoUGFzdGVib2FyZERhdGEpOiBDaGFuZ2VkIHRvIGFs
bG93IGZvciBtdWx0aXBsZSB0eXBlcyBvbiB0aGUgb3ZlcnJpZGRlbiBwYXN0ZWJvYXJkLgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNob3dTZWxlY3Rpb25TZXJ2aWNlTWVudSk6CisK
KyAgICAgICAgVXBkYXRlIHRoZSBzZXJ2aWNlcyBtZW51IGNvZGUgdG8ga25vdyB0aGUgZGlmZmVy
ZW5jZSBiZXR3ZWVuIGFuIGltYWdlIHNlcnZpY2UgYW5kIGEgc2VsZWN0aW9uIHNlcnZpY2U6Cisg
ICAgICAgICogVUlQcm9jZXNzL21hYy9XZWJDb250ZXh0TWVudVByb3h5TWFjLmg6CisgICAgICAg
ICogVUlQcm9jZXNzL21hYy9XZWJDb250ZXh0TWVudVByb3h5TWFjLm1tOgorICAgICAgICAoLVtX
S1NoYXJpbmdTZXJ2aWNlUGlja2VyRGVsZWdhdGUgc2hhcmluZ1NlcnZpY2VQaWNrZXI6c2hhcmlu
Z1NlcnZpY2VzRm9ySXRlbXM6bWFzazpwcm9wb3NlZFNoYXJpbmdTZXJ2aWNlczpdKToKKyAgICAg
ICAgKC1bV0tTaGFyaW5nU2VydmljZVBpY2tlckRlbGVnYXRlIHNoYXJpbmdTZXJ2aWNlOndpbGxT
aGFyZUl0ZW1zOl0pOgorICAgICAgICAoLVtXS1NoYXJpbmdTZXJ2aWNlUGlja2VyRGVsZWdhdGUg
c2hhcmluZ1NlcnZpY2U6ZGlkU2hhcmVJdGVtczpdKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29u
dGV4dE1lbnVQcm94eU1hYzo6Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJDb250ZXh0TWVudVByb3h5TWFjOjpzZXR1cFNlcnZpY2VzTWVudSk6CisgICAgICAg
IChXZWJLaXQ6OldlYkNvbnRleHRNZW51UHJveHlNYWM6OmNsZWFyU2VydmljZXNNZW51KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViQ29udGV4dE1lbnVQcm94eU1hYzo6cG9wdWxhdGUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJDb250ZXh0TWVudVByb3h5TWFjOjpzaG93Q29udGV4dE1lbnUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJDb250ZXh0TWVudVByb3h5TWFjOjpzZXR1cEltYWdlU2VydmljZXNN
ZW51KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dE1lbnVQcm94eU1hYzo6
Y2xlYXJJbWFnZVNlcnZpY2VzTWVudSk6IERlbGV0ZWQuCisKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYlBhc3RlYm9hcmRPdmVycmlkZXMuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzOjpnZXREYXRhRm9yT3ZlcnJpZGUpOgorCisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvbWFjL1dlYlBhZ2VNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnJlcGxhY2VT
ZWxlY3Rpb25XaXRoUGFzdGVib2FyZERhdGEpOiBDaGFuZ2VkIHRvIGFsbG93IGZvciBtdWx0aXBs
ZSB0eXBlcyBvbiB0aGUgb3ZlcnJpZGRlbiBwYXN0ZWJvYXJkLgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlOjpoYW5kbGVTZWxlY3Rpb25TZXJ2aWNlQ2xpY2spOiBQYXNzIHRoZSByZWxldmFudCBz
ZWxlY3Rpb24gZGF0YSB0aHJvdWdoIHRvIHRoZSBVSVByb2Nlc3MgYXMgUlRGRCBkYXRhLgorCisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9TZWxlY3Rpb25PdmVybGF5Q29udHJvbGxl
ck1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6U2VsZWN0aW9uT3ZlcmxheUNvbnRyb2xsZXI6Omhh
bmRsZUNsaWNrKTogTm90aWZ5IHRoZSBXZWJQYWdlIG9mIHRoZSBjbGljay4KKworMjAxNC0wNC0y
OSAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisKICAgICAgICAgQ2hhbmdlIElt
YWdlIENvbnRyb2xzIHJlcGxhY2VtZW50IHRvIHVzZSBzZWxlY3Rpb24gYW5kIHBhc3RlCiAgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS8xNjMwMjcyMj4gYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzE5OTIKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL0NvbnRleHRNZW51Q29udGV4dERhdGEuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nv
bnRleHRNZW51Q29udGV4dERhdGEuY3BwCmluZGV4IDgyYWEzMDguLjIwMjA3NTkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db250ZXh0TWVudUNvbnRleHREYXRhLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29udGV4dE1lbnVDb250ZXh0RGF0YS5jcHAKQEAgLTM4
LDExICszOCwxNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIG5hbWVzcGFjZSBXZWJLaXQg
ewogCiBDb250ZXh0TWVudUNvbnRleHREYXRhOjpDb250ZXh0TWVudUNvbnRleHREYXRhKCkKKyNp
ZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKKyAgICA6IG1fc2VsZWN0aW9uSXNFZGl0YWJsZShm
YWxzZSkKKyNlbmRpZgogewogfQogCiBDb250ZXh0TWVudUNvbnRleHREYXRhOjpDb250ZXh0TWVu
dUNvbnRleHREYXRhKGNvbnN0IENvbnRleHRNZW51Q29udGV4dCYgY29udGV4dCkKICAgICA6IG1f
d2ViSGl0VGVzdFJlc3VsdERhdGEoV2ViSGl0VGVzdFJlc3VsdDo6RGF0YShjb250ZXh0LmhpdFRl
c3RSZXN1bHQoKSkpCisjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCisgICAgLCBtX3NlbGVj
dGlvbklzRWRpdGFibGUoZmFsc2UpCisjZW5kaWYKIHsKICNpZiBFTkFCTEUoU0VSVklDRV9DT05U
Uk9MUykKICAgICBJbWFnZSogaW1hZ2UgPSBjb250ZXh0LmNvbnRyb2xsZWRJbWFnZSgpOwpAQCAt
OTYsNiArMTAyLDE5IEBAIGJvb2wgQ29udGV4dE1lbnVDb250ZXh0RGF0YTo6ZGVjb2RlKElQQzo6
QXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBDb250ZXh0TWVudUNvCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKKyNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKK2Jvb2wgQ29udGV4dE1lbnVDb250
ZXh0RGF0YTo6Y29udHJvbGxlZERhdGFJc0VkaXRhYmxlKCkgY29uc3QKK3sKKyAgICBpZiAoIW1f
Y29udHJvbGxlZFNlbGVjdGlvbkRhdGEuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbV9zZWxl
Y3Rpb25Jc0VkaXRhYmxlOworCisgICAgaWYgKCFtX2NvbnRyb2xsZWRJbWFnZUhhbmRsZS5pc051
bGwoKSkKKyAgICAgICAgcmV0dXJuIG1fd2ViSGl0VGVzdFJlc3VsdERhdGEuaXNDb250ZW50RWRp
dGFibGU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CiAKICNlbmRpZiAvLyBFTkFCTEUoQ09OVEVYVF9NRU5VUykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9Db250ZXh0TWVudUNvbnRleHREYXRhLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvQ29udGV4dE1lbnVDb250ZXh0RGF0YS5oCmluZGV4IDliMzYyNzMuLjZmNjM1
ZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db250ZXh0TWVudUNvbnRleHRE
YXRhLmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0NvbnRleHRNZW51Q29udGV4dERhdGEu
aApAQCAtNTQsNyArNTQsMTYgQEAgcHVibGljOgogICAgIGNvbnN0IFdlYkhpdFRlc3RSZXN1bHQ6
OkRhdGEmIHdlYkhpdFRlc3RSZXN1bHREYXRhKCkgY29uc3QgeyByZXR1cm4gbV93ZWJIaXRUZXN0
UmVzdWx0RGF0YTsgfQogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCisgICAgQ29udGV4
dE1lbnVDb250ZXh0RGF0YShjb25zdCBWZWN0b3I8dWludDhfdD4mIHNlbGVjdGlvbkRhdGEsIGJv
b2wgaXNFZGl0YWJsZSkKKyAgICAgICAgOiBtX2NvbnRyb2xsZWRTZWxlY3Rpb25EYXRhKHNlbGVj
dGlvbkRhdGEpCisgICAgICAgICwgbV9zZWxlY3Rpb25Jc0VkaXRhYmxlKGlzRWRpdGFibGUpCisg
ICAgeyB9CisKICAgICBjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgY29udHJvbGxlZElt
YWdlSGFuZGxlKCkgY29uc3QgeyByZXR1cm4gbV9jb250cm9sbGVkSW1hZ2VIYW5kbGU7IH0KKyAg
ICBjb25zdCBWZWN0b3I8dWludDhfdD4mIGNvbnRyb2xsZWRTZWxlY3Rpb25EYXRhKCkgY29uc3Qg
eyByZXR1cm4gbV9jb250cm9sbGVkU2VsZWN0aW9uRGF0YTsgfQorCisgICAgYm9vbCBjb250cm9s
bGVkRGF0YUlzRWRpdGFibGUoKSBjb25zdDsKKyAgICBib29sIG5lZWRzU2VydmljZXNNZW51KCkg
Y29uc3QgeyByZXR1cm4gIW1fY29udHJvbGxlZEltYWdlSGFuZGxlLmlzTnVsbCgpIHx8ICFtX2Nv
bnRyb2xsZWRTZWxlY3Rpb25EYXRhLmlzRW1wdHkoKTsgfQogI2VuZGlmCiAKICAgICB2b2lkIGVu
Y29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYpIGNvbnN0OwpAQCAtNjYsNiArNzUsOCBAQCBwcml2
YXRlOgogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCiAgICAgU2hhcmVhYmxlQml0bWFw
OjpIYW5kbGUgbV9jb250cm9sbGVkSW1hZ2VIYW5kbGU7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IG1f
Y29udHJvbGxlZFNlbGVjdGlvbkRhdGE7CisgICAgYm9vbCBtX3NlbGVjdGlvbklzRWRpdGFibGU7
CiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRl
eCBjNzg3MzE1Li4zOGVmZWQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5oCkBAIC04MTMsNyArODEzLDcgQEAgcHVibGljOgogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0VS
VklDRV9DT05UUk9MUykKLSAgICB2b2lkIHJlcGxhY2VTZWxlY3Rpb25XaXRoUGFzdGVib2FyZERh
dGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKTsKKyAgICB2
b2lkIHJlcGxhY2VTZWxlY3Rpb25XaXRoUGFzdGVib2FyZERhdGEoY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIHR5cGVzLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKTsKICNlbmRpZgogCiAgICAgdm9p
ZCBwYWdlU2NhbGVGYWN0b3JEaWRDaGFuZ2UoZG91YmxlKTsKQEAgLTEyNTUsNiArMTI1NSwxMCBA
QCBwcml2YXRlOgogI2VuZGlmCiAjZW5kaWYKIAorI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xT
KQorICAgIHZvaWQgc2hvd1NlbGVjdGlvblNlcnZpY2VNZW51KGNvbnN0IElQQzo6RGF0YVJlZmVy
ZW5jZSYgc2VsZWN0aW9uQXNSVEZELCBib29sIGlzRWRpdGFibGUsIGNvbnN0IFdlYkNvcmU6Oklu
dFBvaW50Jik7CisjZW5kaWYKKwogICAgIC8vIFNlYXJjaCBwb3B1cCByZXN1bHRzCiAgICAgdm9p
ZCBzYXZlUmVjZW50U2VhcmNoZXMoY29uc3QgU3RyaW5nJiwgY29uc3QgVmVjdG9yPFN0cmluZz4m
KTsKICAgICB2b2lkIGxvYWRSZWNlbnRTZWFyY2hlcyhjb25zdCBTdHJpbmcmLCBWZWN0b3I8U3Ry
aW5nPiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVz
c2FnZXMuaW4KaW5kZXggYWE2ZTM5OS4uZDk5MDkyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCkBAIC0zNjksNiArMzY5LDEwIEBA
IG1lc3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAjZW5kaWYKICNlbmRpZgogCisjaWYgRU5BQkxF
KFNFUlZJQ0VfQ09OVFJPTFMpCisgICAgU2hvd1NlbGVjdGlvblNlcnZpY2VNZW51KElQQzo6RGF0
YVJlZmVyZW5jZSBzZWxlY3Rpb25Bc1JURkQsIGJvb2wgaXNFZGl0YWJsZSwgV2ViQ29yZTo6SW50
UG9pbnQgcG9pbnQpCisjZW5kaWYKKwogI2lmIFVTRShRVUlDS19MT09LKQogICAgIERpZFN0YXJ0
TG9hZEZvclF1aWNrTG9va0RvY3VtZW50SW5NYWluRnJhbWUoU3RyaW5nIGZpbGVOYW1lLCBTdHJp
bmcgdXRpKQogICAgIERpZEZpbmlzaExvYWRGb3JRdWlja0xvb2tEb2N1bWVudEluTWFpbkZyYW1l
KFdlYktpdDo6UXVpY2tMb29rRG9jdW1lbnREYXRhIGRhdGEpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYkNvbnRleHRNZW51UHJveHlNYWMuaCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViQ29udGV4dE1lbnVQcm94eU1hYy5oCmluZGV4IDE1NTdj
N2QuLjEyNjZhY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2Vi
Q29udGV4dE1lbnVQcm94eU1hYy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMv
V2ViQ29udGV4dE1lbnVQcm94eU1hYy5oCkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIGNvbnRleHRNZW51SXRlbVNlbGVjdGVkKGNvbnN0IFdlYkNvbnRleHRNZW51SXRlbURhdGEm
KTsKIAogI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQotICAgIHZvaWQgY2xlYXJJbWFnZVNl
cnZpY2VzTWVudSgpOworICAgIHZvaWQgY2xlYXJTZXJ2aWNlc01lbnUoKTsKICNlbmRpZgogCiAg
ICAgV2ViUGFnZVByb3h5JiBwYWdlKCkgY29uc3QgeyByZXR1cm4gKm1fcGFnZTsgfQpAQCAtNjYs
NyArNjYsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcG9wdWxhdGUoY29uc3QgVmVjdG9yPFdlYkNv
bnRleHRNZW51SXRlbURhdGE+JiwgY29uc3QgQ29udGV4dE1lbnVDb250ZXh0RGF0YSYpOwogCiAj
aWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCi0gICAgdm9pZCBzZXR1cEltYWdlU2VydmljZXNN
ZW51KFNoYXJlYWJsZUJpdG1hcCYsIGJvb2wgaW5jbHVkZUVkaXRvclNlcnZpY2VzKTsKKyAgICB2
b2lkIHNldHVwU2VydmljZXNNZW51KGNvbnN0IENvbnRleHRNZW51Q29udGV4dERhdGEmKTsKICNl
bmRpZgogCiAgICAgUmV0YWluUHRyPE5TUG9wVXBCdXR0b25DZWxsPiBtX3BvcHVwOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJDb250ZXh0TWVudVByb3h5TWFj
Lm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJDb250ZXh0TWVudVByb3h5TWFj
Lm1tCmluZGV4IDY3YTU2ZGMuLjIxMzgwZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9tYWMvV2ViQ29udGV4dE1lbnVQcm94eU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvbWFjL1dlYkNvbnRleHRNZW51UHJveHlNYWMubW0KQEAgLTIwOCw3ICsyMDgs
NyBAQCAtIChOU0FycmF5ICopc2hhcmluZ1NlcnZpY2VQaWNrZXI6KE5TU2hhcmluZ1NlcnZpY2VQ
aWNrZXIgKilzaGFyaW5nU2VydmljZVBpY2tlcgogewogICAgIGlmIChfaW5jbHVkZUVkaXRvclNl
cnZpY2VzKQogICAgICAgICByZXR1cm4gcHJvcG9zZWRTZXJ2aWNlczsKLSAgICAgICAgCisKICAg
ICBOU011dGFibGVBcnJheSAqc2VydmljZXMgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0
V2l0aENhcGFjaXR5Oltwcm9wb3NlZFNlcnZpY2VzIGNvdW50XV07CiAgICAgCiAgICAgZm9yIChO
U1NoYXJpbmdTZXJ2aWNlICpzZXJ2aWNlIGluIHByb3Bvc2VkU2VydmljZXMpIHsKQEAgLTIyNiwy
MCArMjI2LDQzIEBAIC0gKGlkIDxOU1NoYXJpbmdTZXJ2aWNlRGVsZWdhdGU+KXNoYXJpbmdTZXJ2
aWNlUGlja2VyOihOU1NoYXJpbmdTZXJ2aWNlUGlja2VyICopCiAKIC0gKHZvaWQpc2hhcmluZ1Nl
cnZpY2U6KE5TU2hhcmluZ1NlcnZpY2UgKilzaGFyaW5nU2VydmljZSB3aWxsU2hhcmVJdGVtczoo
TlNBcnJheSAqKWl0ZW1zCiB7Ci0gICAgX21lbnVQcm94eS0+Y2xlYXJJbWFnZVNlcnZpY2VzTWVu
dSgpOworICAgIF9tZW51UHJveHktPmNsZWFyU2VydmljZXNNZW51KCk7CiB9CiAKIC0gKHZvaWQp
c2hhcmluZ1NlcnZpY2U6KE5TU2hhcmluZ1NlcnZpY2UgKilzaGFyaW5nU2VydmljZSBkaWRTaGFy
ZUl0ZW1zOihOU0FycmF5ICopaXRlbXMKIHsKLSAgICBOU0RhdGEgKmRhdGEgPSBbaXRlbXMgb2Jq
ZWN0QXRJbmRleDowXTsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVNvdXJjZVJlZj4gc291cmNlID0g
YWRvcHRDRihDR0ltYWdlU291cmNlQ3JlYXRlV2l0aERhdGEoKENGRGF0YVJlZilkYXRhLCBOVUxM
KSk7Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlID0gYWRvcHRDRihDR0ltYWdlU291
cmNlQ3JlYXRlSW1hZ2VBdEluZGV4KHNvdXJjZS5nZXQoKSwgMCwgTlVMTCkpOworICAgIC8vIFdl
IG9ubHkgY2FyZSBhYm91dCB3aGF0IGl0ZW0gd2FzIHNoYXJlZCBpZiB3ZSB3ZXJlIGludGVyZXN0
ZWQgaW4gZWRpdG9yIHNlcnZpY2VzCisgICAgLy8gKGkuZS4sIGlmIHdlIHBsYW4gb24gcmVwbGFj
aW5nIHRoZSBzZWxlY3Rpb24gd2l0aCB0aGUgcmV0dXJuZWQgaXRlbSkKKyAgICBpZiAoIV9pbmNs
dWRlRWRpdG9yU2VydmljZXMpCisgICAgICAgIHJldHVybjsKKworICAgIFZlY3RvcjxTdHJpbmc+
IHR5cGVzOworICAgIElQQzo6RGF0YVJlZmVyZW5jZSBkYXRhUmVmZXJlbmNlOworCisgICAgaWQg
aXRlbSA9IFtpdGVtcyBvYmplY3RBdEluZGV4OjBdOworCisgICAgaWYgKFtpdGVtIGlzS2luZE9m
Q2xhc3M6W05TQXR0cmlidXRlZFN0cmluZyBjbGFzc11dKSB7CisgICAgICAgIE5TRGF0YSAqZGF0
YSA9IFtpdGVtIFJURkRGcm9tUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW2l0ZW0gbGVuZ3RoXSkgZG9j
dW1lbnRBdHRyaWJ1dGVzOm5pbF07CisgICAgICAgIGRhdGFSZWZlcmVuY2UgPSBJUEM6OkRhdGFS
ZWZlcmVuY2Uoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KFtkYXRhIGJ5dGVzXSksIFtkYXRh
IGxlbmd0aF0pOworCisgICAgICAgIHR5cGVzLmFwcGVuZChOU1Bhc3RlYm9hcmRUeXBlUlRGRCk7
CisgICAgICAgIHR5cGVzLmFwcGVuZChOU1JURkRQYm9hcmRUeXBlKTsKKyAgICB9IGVsc2UgaWYg
KFtpdGVtIGlzS2luZE9mQ2xhc3M6W05TRGF0YSBjbGFzc11dKSB7CisgICAgICAgIE5TRGF0YSAq
ZGF0YSA9IChOU0RhdGEgKilpdGVtOworICAgICAgICBSZXRhaW5QdHI8Q0dJbWFnZVNvdXJjZVJl
Zj4gc291cmNlID0gYWRvcHRDRihDR0ltYWdlU291cmNlQ3JlYXRlV2l0aERhdGEoKENGRGF0YVJl
ZilkYXRhLCBOVUxMKSk7CisgICAgICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZSA9IGFk
b3B0Q0YoQ0dJbWFnZVNvdXJjZUNyZWF0ZUltYWdlQXRJbmRleChzb3VyY2UuZ2V0KCksIDAsIE5V
TEwpKTsKIAotICAgIGlmICghaW1hZ2UpCisgICAgICAgIGlmICghaW1hZ2UpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgZGF0YVJlZmVyZW5jZSA9IElQQzo6RGF0YVJlZmVyZW5jZShz
dGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oW2RhdGEgYnl0ZXNdKSwgW2RhdGEgbGVuZ3RoXSk7
CisgICAgICAgIHR5cGVzLmFwcGVuZChOU1Bhc3RlYm9hcmRUeXBlVElGRik7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgTE9HX0VSUk9SKCJzaGFyaW5nU2VydmljZTpkaWRTaGFyZUl0ZW1zOiAtIFVu
a25vd24gaXRlbSB0eXBlIHJldHVybmVkXG4iKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KIAot
ICAgIElQQzo6RGF0YVJlZmVyZW5jZSBkYXRhUmVmZXJlbmNlKHN0YXRpY19jYXN0PGNvbnN0IHVp
bnQ4X3QqPihbZGF0YSBieXRlc10pLCBbZGF0YSBsZW5ndGhdKTsKLSAgICBfbWVudVByb3h5LT5w
YWdlKCkucmVwbGFjZVNlbGVjdGlvbldpdGhQYXN0ZWJvYXJkRGF0YShOU1Bhc3RlYm9hcmRUeXBl
VElGRiwgZGF0YVJlZmVyZW5jZSk7CisgICAgX21lbnVQcm94eS0+cGFnZSgpLnJlcGxhY2VTZWxl
Y3Rpb25XaXRoUGFzdGVib2FyZERhdGEodHlwZXMsIGRhdGFSZWZlcmVuY2UpOwogfQogCiAtIChO
U1dpbmRvdyAqKXNoYXJpbmdTZXJ2aWNlOihOU1NoYXJpbmdTZXJ2aWNlICopc2hhcmluZ1NlcnZp
Y2Ugc291cmNlV2luZG93Rm9yU2hhcmVJdGVtczooTlNBcnJheSAqKWl0ZW1zIHNoYXJpbmdDb250
ZW50U2NvcGU6KE5TU2hhcmluZ0NvbnRlbnRTY29wZSAqKXNoYXJpbmdDb250ZW50U2NvcGUKQEAg
LTI2OSw3ICsyOTIsNyBAQCBXZWJDb250ZXh0TWVudVByb3h5TWFjOjp+V2ViQ29udGV4dE1lbnVQ
cm94eU1hYygpCiB2b2lkIFdlYkNvbnRleHRNZW51UHJveHlNYWM6OmNvbnRleHRNZW51SXRlbVNl
bGVjdGVkKGNvbnN0IFdlYkNvbnRleHRNZW51SXRlbURhdGEmIGl0ZW0pCiB7CiAjaWYgRU5BQkxF
KFNFUlZJQ0VfQ09OVFJPTFMpCi0gICAgY2xlYXJJbWFnZVNlcnZpY2VzTWVudSgpOworICAgIGNs
ZWFyU2VydmljZXNNZW51KCk7CiAjZW5kaWYKIAogICAgIG1fcGFnZS0+Y29udGV4dE1lbnVJdGVt
U2VsZWN0ZWQoaXRlbSk7CkBAIC0zNDIsMTIgKzM2NSwzMyBAQCBzdGF0aWMgVmVjdG9yPFJldGFp
blB0cjxOU01lbnVJdGVtPj4gbnNNZW51SXRlbVZlY3Rvcihjb25zdCBWZWN0b3I8V2ViQ29udGV4
dE1lbgogfQogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCi12b2lkIFdlYkNvbnRleHRN
ZW51UHJveHlNYWM6OnNldHVwSW1hZ2VTZXJ2aWNlc01lbnUoU2hhcmVhYmxlQml0bWFwJiBpbWFn
ZSwgYm9vbCBpbmNsdWRlRWRpdG9yU2VydmljZXMpCisKK3ZvaWQgV2ViQ29udGV4dE1lbnVQcm94
eU1hYzo6c2V0dXBTZXJ2aWNlc01lbnUoY29uc3QgQ29udGV4dE1lbnVDb250ZXh0RGF0YSYgY29u
dGV4dCkKIHsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY2dJbWFnZSA9IGltYWdlLm1ha2VD
R0ltYWdlKCk7Ci0gICAgUmV0YWluUHRyPE5TSW1hZ2U+IG5zSW1hZ2UgPSBhZG9wdE5TKFtbTlNJ
bWFnZSBhbGxvY10gaW5pdFdpdGhDR0ltYWdlOmNnSW1hZ2UuZ2V0KCkgc2l6ZTppbWFnZS5zaXpl
KCldKTsKKyAgICBSZXRhaW5QdHI8TlNTaGFyaW5nU2VydmljZVBpY2tlcj4gcGlja2VyOworICAg
IGJvb2wgaW5jbHVkZUVkaXRvclNlcnZpY2VzID0gY29udGV4dC5jb250cm9sbGVkRGF0YUlzRWRp
dGFibGUoKTsKKyAgICBOU0FycmF5ICppdGVtcyA9IG5pbDsKKyAgICBpZiAoIWNvbnRleHQuY29u
dHJvbGxlZEltYWdlSGFuZGxlKCkuaXNOdWxsKCkpIHsKKyAgICAgICAgUmVmUHRyPFNoYXJlYWJs
ZUJpdG1hcD4gaW1hZ2UgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShjb250ZXh0LmNvbnRyb2xs
ZWRJbWFnZUhhbmRsZSgpKTsKKyAgICAgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY2dJbWFnZSA9IGltYWdlLT5tYWtl
Q0dJbWFnZSgpOworICAgICAgICBSZXRhaW5QdHI8TlNJbWFnZT4gbnNJbWFnZSA9IGFkb3B0TlMo
W1tOU0ltYWdlIGFsbG9jXSBpbml0V2l0aENHSW1hZ2U6Y2dJbWFnZS5nZXQoKSBzaXplOmltYWdl
LT5zaXplKCldKTsKKyAgICAgICAgaXRlbXMgPSBAWyBuc0ltYWdlLmdldCgpIF07CisgICAgfSBl
bHNlIGlmICghY29udGV4dC5jb250cm9sbGVkU2VsZWN0aW9uRGF0YSgpLmlzRW1wdHkoKSkgewor
ICAgICAgICBSZXRhaW5QdHI8TlNEYXRhPiBzZWxlY3Rpb25EYXRhID0gYWRvcHROUyhbW05TRGF0
YSBhbGxvY10gaW5pdFdpdGhCeXRlczoodm9pZCopY29udGV4dC5jb250cm9sbGVkU2VsZWN0aW9u
RGF0YSgpLmRhdGEoKSBsZW5ndGg6Y29udGV4dC5jb250cm9sbGVkU2VsZWN0aW9uRGF0YSgpLnNp
emUoKV0pOworICAgICAgICBSZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiBzZWxlY3Rpb24g
PSBhZG9wdE5TKFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFJURkQ6c2VsZWN0
aW9uRGF0YS5nZXQoKSBkb2N1bWVudEF0dHJpYnV0ZXM6bmlsXSk7CisKKyAgICAgICAgaXRlbXMg
PSBAWyBzZWxlY3Rpb24uZ2V0KCkgXTsKKyAgICB9IGVsc2UgeworICAgICAgICBMT0dfRVJST1Io
Ik5vIHNlcnZpY2UgY29udHJvbGxlZCBpdGVtIHJlcHJlc2VudGVkIGluIHRoZSBjb250ZXh0Iik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQocGlja2VyKTsKIAotICAgIFJl
dGFpblB0cjxOU1NoYXJpbmdTZXJ2aWNlUGlja2VyPiBwaWNrZXIgPSBhZG9wdE5TKFtbTlNTaGFy
aW5nU2VydmljZVBpY2tlciBhbGxvY10gaW5pdFdpdGhJdGVtczpAWyBuc0ltYWdlLmdldCgpIF1d
KTsKKyAgICBwaWNrZXIgPSBhZG9wdE5TKFtbTlNTaGFyaW5nU2VydmljZVBpY2tlciBhbGxvY10g
aW5pdFdpdGhJdGVtczppdGVtc10pOwogICAgIFtwaWNrZXIgc2V0U3R5bGU6TlNTaGFyaW5nU2Vy
dmljZVBpY2tlclN0eWxlUm9sbG92ZXJdOwogICAgIFtwaWNrZXIgc2V0RGVsZWdhdGU6W1dLU2hh
cmluZ1NlcnZpY2VQaWNrZXJEZWxlZ2F0ZSBzaGFyZWRTaGFyaW5nU2VydmljZVBpY2tlckRlbGVn
YXRlXV07CiAgICAgW1tXS1NoYXJpbmdTZXJ2aWNlUGlja2VyRGVsZWdhdGUgc2hhcmVkU2hhcmlu
Z1NlcnZpY2VQaWNrZXJEZWxlZ2F0ZV0gc2V0UGlja2VyOnBpY2tlci5nZXQoKV07CkBAIC0zNTYs
NyArNDAwLDcgQEAgdm9pZCBXZWJDb250ZXh0TWVudVByb3h5TWFjOjpzZXR1cEltYWdlU2Vydmlj
ZXNNZW51KFNoYXJlYWJsZUJpdG1hcCYgaW1hZ2UsIGJvb2wKICAgICBtX3NlcnZpY2VzTWVudSA9
IFtwaWNrZXIgbWVudV07CiB9CiAKLXZvaWQgV2ViQ29udGV4dE1lbnVQcm94eU1hYzo6Y2xlYXJJ
bWFnZVNlcnZpY2VzTWVudSgpCit2b2lkIFdlYkNvbnRleHRNZW51UHJveHlNYWM6OmNsZWFyU2Vy
dmljZXNNZW51KCkKIHsKICAgICBbW1dLU2hhcmluZ1NlcnZpY2VQaWNrZXJEZWxlZ2F0ZSBzaGFy
ZWRTaGFyaW5nU2VydmljZVBpY2tlckRlbGVnYXRlXSBzZXRQaWNrZXI6bnVsbHB0cl07CiAgICAg
bV9zZXJ2aWNlc01lbnUgPSBudWxscHRyOwpAQCAtMzY2LDggKzQxMCw4IEBAIHZvaWQgV2ViQ29u
dGV4dE1lbnVQcm94eU1hYzo6Y2xlYXJJbWFnZVNlcnZpY2VzTWVudSgpCiB2b2lkIFdlYkNvbnRl
eHRNZW51UHJveHlNYWM6OnBvcHVsYXRlKGNvbnN0IFZlY3RvcjxXZWJDb250ZXh0TWVudUl0ZW1E
YXRhPiYgaXRlbXMsIGNvbnN0IENvbnRleHRNZW51Q29udGV4dERhdGEmIGNvbnRleHQpCiB7CiAj
aWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCi0gICAgaWYgKFJlZlB0cjxTaGFyZWFibGVCaXRt
YXA+IGltYWdlID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoY29udGV4dC5jb250cm9sbGVkSW1h
Z2VIYW5kbGUoKSkpIHsKLSAgICAgICAgc2V0dXBJbWFnZVNlcnZpY2VzTWVudSgqaW1hZ2UsIGNv
bnRleHQud2ViSGl0VGVzdFJlc3VsdERhdGEoKS5pc0NvbnRlbnRFZGl0YWJsZSk7CisgICAgaWYg
KGNvbnRleHQubmVlZHNTZXJ2aWNlc01lbnUoKSkgeworICAgICAgICBzZXR1cFNlcnZpY2VzTWVu
dShjb250ZXh0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgpAQCAtMzg3LDcgKzQz
MSw3IEBAIHZvaWQgV2ViQ29udGV4dE1lbnVQcm94eU1hYzo6cG9wdWxhdGUoY29uc3QgVmVjdG9y
PFdlYkNvbnRleHRNZW51SXRlbURhdGE+JiBpdGVtCiB2b2lkIFdlYkNvbnRleHRNZW51UHJveHlN
YWM6OnNob3dDb250ZXh0TWVudShjb25zdCBJbnRQb2ludCYgbWVudUxvY2F0aW9uLCBjb25zdCBW
ZWN0b3I8V2ViQ29udGV4dE1lbnVJdGVtRGF0YT4mIGl0ZW1zLCBjb25zdCBDb250ZXh0TWVudUNv
bnRleHREYXRhJiBjb250ZXh0KQogewogI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQotICAg
IGlmIChpdGVtcy5pc0VtcHR5KCkgJiYgY29udGV4dC5jb250cm9sbGVkSW1hZ2VIYW5kbGUoKS5p
c051bGwoKSkKKyAgICBpZiAoaXRlbXMuaXNFbXB0eSgpICYmICFjb250ZXh0Lm5lZWRzU2Vydmlj
ZXNNZW51KCkpCiAgICAgICAgIHJldHVybjsKICNlbHNlCiAgICAgaWYgKGl0ZW1zLmlzRW1wdHko
KSkKQEAgLTQwMSw3ICs0NDUsNyBAQCB2b2lkIFdlYkNvbnRleHRNZW51UHJveHlNYWM6OnNob3dD
b250ZXh0TWVudShjb25zdCBJbnRQb2ludCYgbWVudUxvY2F0aW9uLCBjb25zdAogICAgIE5TUmVj
dCBtZW51UmVjdCA9IE5TTWFrZVJlY3QobWVudUxvY2F0aW9uLngoKSwgbWVudUxvY2F0aW9uLnko
KSwgMCwgMCk7CiAKICNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKLSAgICBpZiAoIWNvbnRl
eHQuY29udHJvbGxlZEltYWdlSGFuZGxlKCkuaXNOdWxsKCkpCisgICAgaWYgKGNvbnRleHQubmVl
ZHNTZXJ2aWNlc01lbnUoKSkKICAgICAgICAgW1tXS1NoYXJpbmdTZXJ2aWNlUGlja2VyRGVsZWdh
dGUgc2hhcmVkU2hhcmluZ1NlcnZpY2VQaWNrZXJEZWxlZ2F0ZV0gc2V0TWVudVByb3h5OnRoaXNd
OwogCiAgICAgaWYgKCFtX3NlcnZpY2VzTWVudSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0KaW5kZXggMjE0OWJmNi4uMzVkODBkMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0KKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0KQEAgLTM5
Niw5ICszOTYsOSBAQCBib29sIFdlYlBhZ2VQcm94eTo6cmVhZFNlbGVjdGlvbkZyb21QYXN0ZWJv
YXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCiB9CiAKICNpZiBFTkFCTEUoU0VSVklD
RV9DT05UUk9MUykKLXZvaWQgV2ViUGFnZVByb3h5OjpyZXBsYWNlU2VsZWN0aW9uV2l0aFBhc3Rl
Ym9hcmREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiBk
YXRhKQordm9pZCBXZWJQYWdlUHJveHk6OnJlcGxhY2VTZWxlY3Rpb25XaXRoUGFzdGVib2FyZERh
dGEoY29uc3QgVmVjdG9yPFN0cmluZz4mIHR5cGVzLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2Um
IGRhdGEpCiB7Ci0gICAgcHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlJlcGxhY2VT
ZWxlY3Rpb25XaXRoUGFzdGVib2FyZERhdGEodHlwZSwgZGF0YSksIG1fcGFnZUlEKTsKKyAgICBw
cm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UmVwbGFjZVNlbGVjdGlvbldpdGhQYXN0
ZWJvYXJkRGF0YSh0eXBlcywgZGF0YSksIG1fcGFnZUlEKTsKIH0KICNlbmRpZgogCkBAIC02OTYs
NiArNjk2LDE2IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzaG93VGVsZXBob25lTnVtYmVyTWVudShj
b25zdCBTdHJpbmcmIHRlbGVwaG9uZU51bWJlciwgY29uc3QKIH0KICNlbmRpZgogCisjaWYgRU5B
QkxFKFNFUlZJQ0VfQ09OVFJPTFMpCit2b2lkIFdlYlBhZ2VQcm94eTo6c2hvd1NlbGVjdGlvblNl
cnZpY2VNZW51KGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgc2VsZWN0aW9uQXNSVEZELCBib29s
IGlzRWRpdGFibGUsIGNvbnN0IEludFBvaW50JiBwb2ludCkKK3sKKyAgICBWZWN0b3I8V2ViQ29u
dGV4dE1lbnVJdGVtRGF0YT4gaXRlbXM7CisgICAgQ29udGV4dE1lbnVDb250ZXh0RGF0YSBjb250
ZXh0RGF0YShzZWxlY3Rpb25Bc1JURkQudmVjdG9yKCksIGlzRWRpdGFibGUpOworCisgICAgaW50
ZXJuYWxTaG93Q29udGV4dE1lbnUocG9pbnQsIGNvbnRleHREYXRhLCBpdGVtcywgQ29udGV4dE1l
bnVDbGllbnRFbGlnaWJpbGl0eTo6Tm90RWxpZ2libGVGb3JDbGllbnQsIG51bGxwdHIpOworfQor
I2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gUExBVEZPUk0oTUFD
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViUGFzdGVib2FyZE92ZXJyaWRlcy5jcHAKaW5kZXggNGEzNTEzMS4uNzZi
MDA0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBhc3RlYm9hcmRPdmVycmlkZXMuY3BwCkBAIC0xMDIsNyAr
MTAyLDcgQEAgYm9vbCBXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzOjpnZXREYXRhRm9yT3ZlcnJpZGUo
Y29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY28KICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgZGF0YS5jbGVhcigpOwotICAgIGRhdGEucmVzZXJ2ZUNhcGFjaXR5KGZvdW5kQnVmZmVy
LnNpemUoKSk7CisgICAgZGF0YS5yZXNpemUoZm91bmRCdWZmZXIuc2l6ZSgpKTsKICAgICBtZW1j
cHkoZGF0YS5kYXRhKCksIGZvdW5kQnVmZmVyLmRhdGEoKSwgZm91bmRCdWZmZXIuc2l6ZSgpKTsK
IAogICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmgKaW5kZXggMzMyYjM0MC4uMDkxM2EzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCkBAIC01ODksNyArNTg5LDcgQEAgcHVibGljOgogICAg
IGJvb2wgcGVyZm9ybU5vbkVkaXRpbmdCZWhhdmlvckZvclNlbGVjdG9yKGNvbnN0IFN0cmluZyYs
IFdlYkNvcmU6OktleWJvYXJkRXZlbnQqKTsKIAogI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xT
KQotICAgIHZvaWQgcmVwbGFjZVNlbGVjdGlvbldpdGhQYXN0ZWJvYXJkRGF0YShjb25zdCBTdHJp
bmcmIHR5cGUsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYpOworICAgIHZvaWQgcmVwbGFjZVNl
bGVjdGlvbldpdGhQYXN0ZWJvYXJkRGF0YShjb25zdCBWZWN0b3I8U3RyaW5nPiYgdHlwZXMsIGNv
bnN0IElQQzo6RGF0YVJlZmVyZW5jZSYpOwogI2VuZGlmCiAKICNlbGlmIFBMQVRGT1JNKEVGTCkK
QEAgLTc4OSw2ICs3ODksNyBAQCBwdWJsaWM6CiAjZW5kaWYKICNpZiBFTkFCTEUoU0VSVklDRV9D
T05UUk9MUykKICAgICBTZWxlY3Rpb25PdmVybGF5Q29udHJvbGxlciYgc2VsZWN0aW9uT3Zlcmxh
eUNvbnRyb2xsZXIoKTsKKyAgICB2b2lkIGhhbmRsZVNlbGVjdGlvblNlcnZpY2VDbGljayhXZWJD
b3JlOjpGcmFtZVNlbGVjdGlvbiYsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7CiAgICAgYm9v
bCBzZXJ2aWNlQ29udHJvbHNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9zZXJ2aWNlQ29udHJv
bHNFbmFibGVkOyB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgppbmRleCAzMjNhZDNmLi4yZTBjZDJjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNz
YWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5t
ZXNzYWdlcy5pbgpAQCAtMzA0LDcgKzMwNCw3IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2UgTGVnYWN5
UmVjZWl2ZXIgewogICAgIFJlYWRTZWxlY3Rpb25Gcm9tUGFzdGVib2FyZChTdHJpbmcgcGFzdGVi
b2FyZE5hbWUpIC0+IChib29sIHJlc3VsdCkKIAogI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xT
KQotICAgIFJlcGxhY2VTZWxlY3Rpb25XaXRoUGFzdGVib2FyZERhdGEoU3RyaW5nIHR5cGUsIElQ
Qzo6RGF0YVJlZmVyZW5jZSBkYXRhKQorICAgIFJlcGxhY2VTZWxlY3Rpb25XaXRoUGFzdGVib2Fy
ZERhdGEoVmVjdG9yPFN0cmluZz4gdHlwZXMsIElQQzo6RGF0YVJlZmVyZW5jZSBkYXRhKQogI2Vu
ZGlmCiAKICAgICBTaG91bGREZWxheVdpbmRvd09yZGVyaW5nRXZlbnQoV2ViS2l0OjpXZWJNb3Vz
ZUV2ZW50IGV2ZW50KSAtPiAoYm9vbCByZXN1bHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1NlbGVjdGlvbk92ZXJsYXlDb250cm9sbGVyTWFjLm1t
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9TZWxlY3Rpb25PdmVybGF5
Q29udHJvbGxlck1hYy5tbQppbmRleCA0OTk3NTMyLi5kMmQ4OTc2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1NlbGVjdGlvbk92ZXJsYXlDb250cm9s
bGVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvU2Vs
ZWN0aW9uT3ZlcmxheUNvbnRyb2xsZXJNYWMubW0KQEAgLTE1OSw3ICsxNTksNyBAQCBib29sIFNl
bGVjdGlvbk92ZXJsYXlDb250cm9sbGVyOjptb3VzZUV2ZW50KFBhZ2VPdmVybGF5KiwgY29uc3Qg
V2ViTW91c2VFdmVudCYgZQogCiB2b2lkIFNlbGVjdGlvbk92ZXJsYXlDb250cm9sbGVyOjpoYW5k
bGVDbGljayhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQpCiB7Ci0gICAgLy8gRklYTUU6
IEhhbmRsZSB0aGUgY2xpY2sgaGVyZS4KKyAgICBtX3dlYlBhZ2UtPmhhbmRsZVNlbGVjdGlvblNl
cnZpY2VDbGljayhtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLnNlbGVjdGlvbigp
LCBwb2ludCk7CiB9CiAgICAgCiB2b2lkIFNlbGVjdGlvbk92ZXJsYXlDb250cm9sbGVyOjpjbGVh
ckhpZ2hsaWdodCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvbWFjL1dlYlBhZ2VNYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
bWFjL1dlYlBhZ2VNYWMubW0KaW5kZXggYzdjNjJlNy4uNDZmNjU1ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQpAQCAtNjc4
LDE0ICs2NzgsMTYgQEAgc3RhdGljIFN0cmluZyYgcmVwbGFjZVNlbGVjdGlvblBhc3RlYm9hcmRO
YW1lKCkKICAgICByZXR1cm4gc3RyaW5nOwogfQogCi12b2lkIFdlYlBhZ2U6OnJlcGxhY2VTZWxl
Y3Rpb25XaXRoUGFzdGVib2FyZERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBJUEM6OkRh
dGFSZWZlcmVuY2UmIGRhdGEpCit2b2lkIFdlYlBhZ2U6OnJlcGxhY2VTZWxlY3Rpb25XaXRoUGFz
dGVib2FyZERhdGEoY29uc3QgVmVjdG9yPFN0cmluZz4mIHR5cGVzLCBjb25zdCBJUEM6OkRhdGFS
ZWZlcmVuY2UmIGRhdGEpCiB7Ci0gICAgV2ViUGFzdGVib2FyZE92ZXJyaWRlczo6c2hhcmVkUGFz
dGVib2FyZE92ZXJyaWRlcygpLmFkZE92ZXJyaWRlKHJlcGxhY2VTZWxlY3Rpb25QYXN0ZWJvYXJk
TmFtZSgpLCB0eXBlLCBkYXRhLnZlY3RvcigpKTsKKyAgICBmb3IgKGF1dG8mIHR5cGUgOiB0eXBl
cykKKyAgICAgICAgV2ViUGFzdGVib2FyZE92ZXJyaWRlczo6c2hhcmVkUGFzdGVib2FyZE92ZXJy
aWRlcygpLmFkZE92ZXJyaWRlKHJlcGxhY2VTZWxlY3Rpb25QYXN0ZWJvYXJkTmFtZSgpLCB0eXBl
LCBkYXRhLnZlY3RvcigpKTsKIAogICAgIGJvb2wgcmVzdWx0OwogICAgIHJlYWRTZWxlY3Rpb25G
cm9tUGFzdGVib2FyZChyZXBsYWNlU2VsZWN0aW9uUGFzdGVib2FyZE5hbWUoKSwgcmVzdWx0KTsK
IAotICAgIFdlYlBhc3RlYm9hcmRPdmVycmlkZXM6OnNoYXJlZFBhc3RlYm9hcmRPdmVycmlkZXMo
KS5yZW1vdmVPdmVycmlkZShyZXBsYWNlU2VsZWN0aW9uUGFzdGVib2FyZE5hbWUoKSwgdHlwZSk7
CisgICAgZm9yIChhdXRvJiB0eXBlIDogdHlwZXMpCisgICAgICAgIFdlYlBhc3RlYm9hcmRPdmVy
cmlkZXM6OnNoYXJlZFBhc3RlYm9hcmRPdmVycmlkZXMoKS5yZW1vdmVPdmVycmlkZShyZXBsYWNl
U2VsZWN0aW9uUGFzdGVib2FyZE5hbWUoKSwgdHlwZSk7CiB9CiAjZW5kaWYKIApAQCAtMTAyMiw2
ICsxMDI0LDI1IEBAIHZvaWQgV2ViUGFnZTo6aGFuZGxlVGVsZXBob25lTnVtYmVyQ2xpY2soY29u
c3QgU3RyaW5nJiBudW1iZXIsIGNvbnN0IEludFBvaW50JiBwCiB9CiAjZW5kaWYKIAorI2lmIEVO
QUJMRShTRVJWSUNFX0NPTlRST0xTKQordm9pZCBXZWJQYWdlOjpoYW5kbGVTZWxlY3Rpb25TZXJ2
aWNlQ2xpY2soRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgY29uc3QgSW50UG9pbnQmIHBvaW50
KQoreworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBzZWxlY3Rpb24uc2VsZWN0aW9uKCkuZmly
c3RSYW5nZSgpOworICAgIGlmICghcmFuZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIE5TQXR0
cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFNlbGVjdGlvbiA9IGF0dHJpYnV0ZWRTdHJpbmdGcm9t
UmFuZ2UoKnJhbmdlKTsKKyAgICBpZiAoIWF0dHJpYnV0ZWRTZWxlY3Rpb24pCisgICAgICAgIHJl
dHVybjsKKworICAgIE5TRGF0YSAqc2VsZWN0aW9uRGF0YSA9IFthdHRyaWJ1dGVkU2VsZWN0aW9u
IFJURkRGcm9tUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW2F0dHJpYnV0ZWRTZWxlY3Rpb24gbGVuZ3Ro
XSkgZG9jdW1lbnRBdHRyaWJ1dGVzOm5pbF07CisgICAgSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGEg
PSBJUEM6OkRhdGFSZWZlcmVuY2UocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oW3Nl
bGVjdGlvbkRhdGEgYnl0ZXNdKSwgW3NlbGVjdGlvbkRhdGEgbGVuZ3RoXSk7CisgICAgYm9vbCBp
c0VkaXRhYmxlID0gc2VsZWN0aW9uLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxl
KCk7CisKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNob3dTZWxlY3Rpb25TZXJ2
aWNlTWVudShkYXRhLCBpc0VkaXRhYmxlLCBwb2ludCkpOworfQorI2VuZGlmCisKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>