<?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>175639</bug_id>
          
          <creation_ts>2017-08-16 14:08:32 -0700</creation_ts>
          <short_desc>Add the support for mutating clipboard data via DataTransferItemList</short_desc>
          <delta_ts>2017-08-16 23:26:55 -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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>170449</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>dbates</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1339290</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-08-16 14:08:32 -0700</bug_when>
    <thetext>Add make dataTransfer.items.add, dataTransfer.items.clear, and dataTransfer.items.remove work.
Also update dataTransfer.items when mutating clipboard data via setData &amp; clearData.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1339296</commentid>
    <comment_count>1</comment_count>
      <attachid>318291</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-08-16 14:34:27 -0700</bug_when>
    <thetext>Created attachment 318291
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1339317</commentid>
    <comment_count>2</comment_count>
      <attachid>318293</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-08-16 15:29:29 -0700</bug_when>
    <thetext>Created attachment 318293
Fixed builds</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1339422</commentid>
    <comment_count>3</comment_count>
      <attachid>318293</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-08-16 21:01:23 -0700</bug_when>
    <thetext>Comment on attachment 318293
Fixed builds

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

This looks reasonable to be, but I&apos;m a bit confused about one part. For instance, if you call items.add(&quot;WebKit1&quot;, &quot;text/plain&quot;) and then items.add(&quot;WebKit2&quot;, &quot;text/plain&quot;), it is expected that the item list contains two items, and dataTransfer.getData(&quot;text/plain&quot;) would return &quot;WebKit2&quot; since the second add() call overwrote the first? Maybe we should include the case where we add more than one item at a time in the new test case.

&gt; Source/WebCore/ChangeLog:16
&gt; +        Because the identify and the order of DataTransferItem&apos;s need to be preserved, we can&apos;t simply

I don&apos;t think there should be an apostrophe after DataTransferItem.

&gt; Source/WebCore/ChangeLog:17
&gt; +        re-popluate m_itemList in DataTransferItemList. Instead, whenever the clipboard content is mutated,

Just to make sure -- it doesn&apos;t seem like this handles something modifying the NSPasteboard independently of the page, correct?

&gt; Source/WebCore/dom/DataTransferItem.cpp:81
&gt; +    bool isInDisabledMode = !m_list;

IMO, this would look clearer if we folded the places where we check !m_list into a helper method on DataTransferItem called isDisabled() or isInDisabledMode().

&gt; LayoutTests/editing/pasteboard/datatransfer-items-copy-plaintext.html:7
&gt; +description(&apos;This tests copying plain text using dataTransfer.items. To manually test, click on &quot;Copy text&quot; and paste (Command+V on Mac Control+V elsewhere).&apos;);

As an aside: this patch should mean we also support adding plain text to the pasteboard when copying an image or link by tapping &quot;Copy&quot; on the share sheet in iOS. Let&apos;s remember to write a LayoutTest or API test for this!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1339437</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-08-16 22:45:37 -0700</bug_when>
    <thetext>(In reply to Wenson Hsieh from comment #3)
&gt; Comment on attachment 318293 [details]
&gt; Fixed builds
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=318293&amp;action=review
&gt; 
&gt; This looks reasonable to be, but I&apos;m a bit confused about one part. For
&gt; instance, if you call items.add(&quot;WebKit1&quot;, &quot;text/plain&quot;) and then
&gt; items.add(&quot;WebKit2&quot;, &quot;text/plain&quot;), it is expected that the item list
&gt; contains two items, and dataTransfer.getData(&quot;text/plain&quot;) would return
&gt; &quot;WebKit2&quot; since the second add() call overwrote the first? Maybe we should
&gt; include the case where we add more than one item at a time in the new test
&gt; case.

add() throws when there is an existing entry of the same type in the pasteboard.

&gt; &gt; Source/WebCore/ChangeLog:16
&gt; &gt; +        Because the identify and the order of DataTransferItem&apos;s need to be preserved, we can&apos;t simply
&gt; 
&gt; I don&apos;t think there should be an apostrophe after DataTransferItem.

Removed.

&gt; &gt; Source/WebCore/ChangeLog:17
&gt; &gt; +        re-popluate m_itemList in DataTransferItemList. Instead, whenever the clipboard content is mutated,
&gt; 
&gt; Just to make sure -- it doesn&apos;t seem like this handles something modifying
&gt; the NSPasteboard independently of the page, correct?

It doesn&apos;t. We should be more vigilant about checking changeCount everywhere. Once we implement the fake pasteboard we talked about in the person, this problem will go away though.

&gt; 
&gt; &gt; Source/WebCore/dom/DataTransferItem.cpp:81
&gt; &gt; +    bool isInDisabledMode = !m_list;
&gt; 
&gt; IMO, this would look clearer if we folded the places where we check !m_list
&gt; into a helper method on DataTransferItem called isDisabled() or
&gt; isInDisabledMode().

I did that earlier, and got rid of it after I realized it&apos;s better to check m_list elsewhere to make it clear m_list can&apos;t be null. I just added it back to be used in just this one place.

&gt; &gt; LayoutTests/editing/pasteboard/datatransfer-items-copy-plaintext.html:7
&gt; &gt; +description(&apos;This tests copying plain text using dataTransfer.items. To manually test, click on &quot;Copy text&quot; and paste (Command+V on Mac Control+V elsewhere).&apos;);
&gt; 
&gt; As an aside: this patch should mean we also support adding plain text to the
&gt; pasteboard when copying an image or link by tapping &quot;Copy&quot; on the share
&gt; sheet in iOS. Let&apos;s remember to write a LayoutTest or API test for this!

Really? We fire copy event on those case? We don&apos;t do that on macOS (neither does Firefox or Chrome).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1339445</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-08-16 23:17:11 -0700</bug_when>
    <thetext>Committed r220829: &lt;http://trac.webkit.org/changeset/220829&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1339446</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-08-16 23:17:47 -0700</bug_when>
    <thetext>&lt;rdar://problem/33934646&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1339449</commentid>
    <comment_count>7</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-08-16 23:26:55 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #4)
&gt; (In reply to Wenson Hsieh from comment #3)
&gt; &gt; Comment on attachment 318293 [details]
&gt; &gt; Fixed builds
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=318293&amp;action=review
&gt; &gt; 
&gt; &gt; This looks reasonable to be, but I&apos;m a bit confused about one part. For
&gt; &gt; instance, if you call items.add(&quot;WebKit1&quot;, &quot;text/plain&quot;) and then
&gt; &gt; items.add(&quot;WebKit2&quot;, &quot;text/plain&quot;), it is expected that the item list
&gt; &gt; contains two items, and dataTransfer.getData(&quot;text/plain&quot;) would return
&gt; &gt; &quot;WebKit2&quot; since the second add() call overwrote the first? Maybe we should
&gt; &gt; include the case where we add more than one item at a time in the new test
&gt; &gt; case.
&gt; 
&gt; add() throws when there is an existing entry of the same type in the
&gt; pasteboard.
&gt; 
&gt; &gt; &gt; Source/WebCore/ChangeLog:16
&gt; &gt; &gt; +        Because the identify and the order of DataTransferItem&apos;s need to be preserved, we can&apos;t simply
&gt; &gt; 
&gt; &gt; I don&apos;t think there should be an apostrophe after DataTransferItem.
&gt; 
&gt; Removed.
&gt; 
&gt; &gt; &gt; Source/WebCore/ChangeLog:17
&gt; &gt; &gt; +        re-popluate m_itemList in DataTransferItemList. Instead, whenever the clipboard content is mutated,
&gt; &gt; 
&gt; &gt; Just to make sure -- it doesn&apos;t seem like this handles something modifying
&gt; &gt; the NSPasteboard independently of the page, correct?
&gt; 
&gt; It doesn&apos;t. We should be more vigilant about checking changeCount
&gt; everywhere. Once we implement the fake pasteboard we talked about in the
&gt; person, this problem will go away though.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/dom/DataTransferItem.cpp:81
&gt; &gt; &gt; +    bool isInDisabledMode = !m_list;
&gt; &gt; 
&gt; &gt; IMO, this would look clearer if we folded the places where we check !m_list
&gt; &gt; into a helper method on DataTransferItem called isDisabled() or
&gt; &gt; isInDisabledMode().
&gt; 
&gt; I did that earlier, and got rid of it after I realized it&apos;s better to check
&gt; m_list elsewhere to make it clear m_list can&apos;t be null. I just added it back
&gt; to be used in just this one place.
&gt; 
&gt; &gt; &gt; LayoutTests/editing/pasteboard/datatransfer-items-copy-plaintext.html:7
&gt; &gt; &gt; +description(&apos;This tests copying plain text using dataTransfer.items. To manually test, click on &quot;Copy text&quot; and paste (Command+V on Mac Control+V elsewhere).&apos;);
&gt; &gt; 
&gt; &gt; As an aside: this patch should mean we also support adding plain text to the
&gt; &gt; pasteboard when copying an image or link by tapping &quot;Copy&quot; on the share
&gt; &gt; sheet in iOS. Let&apos;s remember to write a LayoutTest or API test for this!
&gt; 
&gt; Really? We fire copy event on those case? We don&apos;t do that on macOS (neither
&gt; does Firefox or Chrome).

Oh, interesting...that&apos;s correct, a quick test page like:

&lt;img id=&quot;image&quot; src=&quot;icon.png&quot;&gt;&lt;/img&gt;
&lt;script&gt;image.addEventListener(&quot;copy&quot;, e =&gt; console.log(e))&lt;/script&gt;

...shows that both Mac and iOS don&apos;t fire the `copy` event when using context menu/share sheet, respectively. In that case, this only applies to iOS DnD, when starting a drag. I can add a test for this when working towards &lt;rdar://problem/30291638&gt; (iOS DnD parity with Mac).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>318291</attachid>
            <date>2017-08-16 14:34:27 -0700</date>
            <delta_ts>2017-08-16 15:29:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>fix175639.patch</filename>
            <type>text/plain</type>
            <size>27660</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMDgwOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYyIEBACisyMDE3LTA4LTE2ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCB0aGUgc3VwcG9ydCBmb3Ig
bXV0YXRpbmcgY2xpcGJvYXJkIGRhdGEgdmlhIERhdGFUcmFuc2Zlckl0ZW1MaXN0CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU2MzkKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCB0aGUgc3VwcG9y
dCBmb3IgYWRkaW5nIHBsYWludGV4dCBkYXRhIHZpYSBkYXRhVHJhbnNmZXIuaXRlbXMuYWRkLCBj
bGVhcmluZyBkYXRhIHZpYSBjbGVhciwKKyAgICAgICAgYW5kIHJlbW92aW5nIGFuIGVudHJ5IHZp
YSByZW1vdmUuIFdoZW4gRGF0YVRyYW5zZmVySXRlbSBpcyByZW1vdmVkIGZyb20gRGF0YVRyYW5z
ZmVySXRlbUxpc3QsCisgICAgICAgIHdlIG11c3QgcHV0IGludG8gdGhlIGRpc2FibGVkIG1vZGUu
CisKKyAgICAgICAgVG8gc3VwcG9ydCB0aGUgcmVtb3ZhbCBvZiBEYXRhVHJhbnNmZXJJdGVtLCB0
aGlzIHBhdGNoIHJlcGxhY2VzIGEgcmVmZXJlbmNlIHRvIERhdGFUcmFuc2ZlciBieQorICAgICAg
ICBhIFdlYWtQdHIgdG8gRGF0YVRyYW5zZmVySXRlbUxpc3QsIGFuZCBzdG9wcyBmb3J3YXJkaW5n
IHJlZiBmcm9tIERhdGFUcmFuc2Zlckl0ZW0gdG8gRGF0YVRyYW5zZmVyLgorICAgICAgICBUaGlz
IG1lYW5zIHRoYXQgRGF0YVRyYW5zZmVyIGNhbiBub3cgYmUgR0MnZWQgYmVmb3JlIERhdGFUcmFu
c2Zlckl0ZW0gaXMgR0MnZWQuCisKKyAgICAgICAgQmVjYXVzZSB0aGUgaWRlbnRpZnkgYW5kIHRo
ZSBvcmRlciBvZiBEYXRhVHJhbnNmZXJJdGVtJ3MgbmVlZCB0byBiZSBwcmVzZXJ2ZWQsIHdlIGNh
bid0IHNpbXBseQorICAgICAgICByZS1wb3BsdWF0ZSBtX2l0ZW1MaXN0IGluIERhdGFUcmFuc2Zl
ckl0ZW1MaXN0LiBJbnN0ZWFkLCB3aGVuZXZlciB0aGUgY2xpcGJvYXJkIGNvbnRlbnQgaXMgbXV0
YXRlZCwKKyAgICAgICAgd2UgbWFrZSB0aGUgcGFyYWxsZWwgbW9kaWZpY2F0aW9ucyB0byBtX2l0
ZW1MaXN0LiBUaGlzIGluY2x1ZGVzIGNoYW5nZXMgbWFkZSB2aWEgRGF0YVRyYW5zZmVyCisgICAg
ICAgIG1ldGhvZHMgc3VjaCBhcyBzZXREYXRhIGFuZCBjbGVhckRhdGEuCisKKyAgICAgICAgVGVz
dDogZWRpdGluZy9wYXN0ZWJvYXJkL2RhdGF0cmFuc2Zlci1pdGVtcy1jb3B5LXBsYWludGV4dC5o
dG1sCisKKyAgICAgICAgKiBkb20vRGF0YVRyYW5zZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRhdGFUcmFuc2Zlcjo6Y2xlYXJEYXRhKTogSW52b2tlIGRpZENsZWFyU3RyaW5nRGF0YSB3aGVu
IG1faXRlbUxpc3QgZXhpc3RzLgorICAgICAgICAoV2ViQ29yZTo6RGF0YVRyYW5zZmVyOjpzZXRE
YXRhKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXI6OmNyZWF0ZUZvcklu
cHV0RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YVRyYW5zZmVyOjpjcmVhdGVGb3JEcmFn
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFUcmFuc2Zlcjo6Y3JlYXRlRm9yRHJvcCk6CisgICAg
ICAgICogZG9tL0RhdGFUcmFuc2Zlckl0ZW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YVRy
YW5zZmVySXRlbTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFUcmFuc2Zlckl0ZW06
OkRhdGFUcmFuc2Zlckl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6RGF0YVRyYW5zZmVySXRlbTo6
Y2xlYXJMaXN0QW5kUHV0SW50b0Rpc2FibGVkTW9kZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGF0YVRyYW5zZmVySXRlbTo6dHlwZSBjb25zdCk6IE1vdmVkIGZyb20gdGhlIGhlYWRlci4K
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFUcmFuc2Zlckl0ZW06OmdldEFzU3RyaW5nIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFUcmFuc2Zlckl0ZW06OmdldEFzRmlsZSBjb25zdCk6Cisg
ICAgICAgICogZG9tL0RhdGFUcmFuc2Zlckl0ZW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFU
cmFuc2Zlckl0ZW06OnJlZik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNm
ZXJJdGVtOjpkZXJlZik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXJJ
dGVtOjppc0ZpbGUgY29uc3QpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFUcmFuc2Zl
ckl0ZW06OnR5cGUgY29uc3QpOiBNb3ZlIHRvIHRoZSBjcHAgZmlsZS4KKyAgICAgICAgKiBkb20v
RGF0YVRyYW5zZmVySXRlbUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNTdXBwb3J0ZWRU
eXBlKTogTW92ZWQuCisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXJJdGVtTGlzdDo6RGF0
YVRyYW5zZmVySXRlbUxpc3QpOiBNb3ZlZCBmcm9tIHRoZSBoZWFkZXIuCisgICAgICAgIChXZWJD
b3JlOjpEYXRhVHJhbnNmZXJJdGVtTGlzdDo6fkRhdGFUcmFuc2Zlckl0ZW1MaXN0KTogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXJJdGVtTGlzdDo6aXRlbSk6CisgICAgICAg
IChXZWJDb3JlOjpEYXRhVHJhbnNmZXJJdGVtTGlzdDo6YWRkKTogSW1wbGVtZW50ZWQgdGhlIHZh
cmlhbnQgdG8gYWRkIHN0cmluZyBkYXRhLgorICAgICAgICAoV2ViQ29yZTo6RGF0YVRyYW5zZmVy
SXRlbUxpc3Q6OnJlbW92ZSk6IEltcGxlbWVudGVkLiBGb3Igbm93LCB3ZSBkb24ndCBoYXZlIHRv
IGRlYWwgd2l0aCByZW1vdmluZworICAgICAgICBhIGZpbGUgc2luY2UgYSB3cml0YWJsZSBkYXRh
VHJhbnNmZXIgbmV2ZXIgY29udGFpbnMgYSBGaWxlIG9iamVjdC4KKyAgICAgICAgKFdlYkNvcmU6
OkRhdGFUcmFuc2Zlckl0ZW1MaXN0OjpjbGVhcik6IEltcGxlbWVudGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGF0YVRyYW5zZmVySXRlbUxpc3Q6OmVuc3VyZUl0ZW1zIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OnJlbW92ZVN0cmluZ0l0ZW1PZkxvd2VyY2FzZWRUeXBlKTogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXJJdGVtTGlzdDo6ZGlkQ2xlYXJTdHJpbmdEYXRhKTog
Q2FsbGVkIHdoZW4gZGF0YVRyYW5zZmVyLmNsZWFyIGlzIGNhbGxlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRhdGFUcmFuc2Zlckl0ZW1MaXN0OjpkaWRTZXRTdHJpbmdEYXRhKTogRGl0dG8gZm9yIAor
ICAgICAgICAqIGRvbS9EYXRhVHJhbnNmZXJJdGVtTGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6
RGF0YVRyYW5zZmVySXRlbUxpc3QpOiBBZGRlZCBhIFdlYWtQdHJGYWN0b3J5LiBBbHNvIHVzZSBh
IHZlY3RvciBvZiBSZWY8RGF0YVRyYW5zZmVySXRlbT4KKyAgICAgICAgaW5zdGVhZCBvZiB1bmlx
dWVfcHRyPERhdGFUcmFuc2Zlckl0ZW0+IHNpbmNlIERhdGFUcmFuc2Zlckl0ZW0gY2FuIG91dGxp
dmUgRGF0YVRyYW5zZmVySXRlbUxpc3QuCisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXJJ
dGVtTGlzdDo6ZGF0YVRyYW5zZmVyKTogQWRkZWQuCisgICAgICAgICogZG9tL0RhdGFUcmFuc2Zl
ckl0ZW1MaXN0LmlkbDoKKwogMjAxNy0wOC0xNiAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9u
QGFwcGxlLmNvbT4KIAogICAgICAgICAyLTMlIG9mIG1haW4gdGhyZWFkIHRpbWUgdW5kZXIgVVRU
eXBlQ3JlYXRlUHJlZmVycmVkSWRlbnRpZmllckZvclRhZyBvbiB3dW5kZXJncm91bmQgbWFwCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRGF0YVRyYW5zZmVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vRGF0YVRyYW5zZmVyLmNwcAkocmV2aXNpb24gMjIwNzgxKQorKysg
U291cmNlL1dlYkNvcmUvZG9tL0RhdGFUcmFuc2Zlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
OCw2ICsxMTgsOCBAQAogICAgICAgICBtX3Bhc3RlYm9hcmQtPmNsZWFyKCk7CiAgICAgZWxzZQog
ICAgICAgICBtX3Bhc3RlYm9hcmQtPmNsZWFyKHR5cGUpOworICAgIGlmIChtX2l0ZW1MaXN0KQor
ICAgICAgICBtX2l0ZW1MaXN0LT5kaWRDbGVhclN0cmluZ0RhdGEodHlwZSk7CiB9CiAKIFN0cmlu
ZyBEYXRhVHJhbnNmZXI6OmdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlKSBjb25zdApAQCAtMTQ0
LDYgKzE0Niw4IEBACiAjZW5kaWYKIAogICAgIG1fcGFzdGVib2FyZC0+d3JpdGVTdHJpbmcodHlw
ZSwgZGF0YSk7CisgICAgaWYgKG1faXRlbUxpc3QpCisgICAgICAgIG1faXRlbUxpc3QtPmRpZFNl
dFN0cmluZ0RhdGEodHlwZSk7CiB9CiAKIERhdGFUcmFuc2Zlckl0ZW1MaXN0JiBEYXRhVHJhbnNm
ZXI6Oml0ZW1zKCkKQEAgLTIxMCw3ICsyMTQsNyBAQAogICAgIFR5cGVUb1N0cmluZ01hcCB0eXBl
VG9TdHJpbmdNYXA7CiAgICAgdHlwZVRvU3RyaW5nTWFwLnNldChBU0NJSUxpdGVyYWwoInRleHQv
cGxhaW4iKSwgcGxhaW5UZXh0KTsKICAgICB0eXBlVG9TdHJpbmdNYXAuc2V0KEFTQ0lJTGl0ZXJh
bCgidGV4dC9odG1sIiksIGh0bWxUZXh0KTsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEYXRh
VHJhbnNmZXIoRGF0YVRyYW5zZmVyQWNjZXNzUG9saWN5OjpSZWFkYWJsZSwgU3RhdGljUGFzdGVi
b2FyZDo6Y3JlYXRlKFdURk1vdmUodHlwZVRvU3RyaW5nTWFwKSksIElucHV0RXZlbnQpKTsKKyAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEYXRhVHJhbnNmZXIoRGF0YVRyYW5zZmVyQWNjZXNzUG9s
aWN5OjpSZWFkYWJsZSwgU3RhdGljUGFzdGVib2FyZDo6Y3JlYXRlKFdURk1vdmUodHlwZVRvU3Ry
aW5nTWFwKSksIFR5cGU6OklucHV0RXZlbnQpKTsKIH0KIAogI2lmICFFTkFCTEUoRFJBR19TVVBQ
T1JUKQpAQCAtMjQxLDEyICsyNDUsMTMgQEAKIAogUmVmPERhdGFUcmFuc2Zlcj4gRGF0YVRyYW5z
ZmVyOjpjcmVhdGVGb3JEcmFnKCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEYXRhVHJh
bnNmZXIoRGF0YVRyYW5zZmVyQWNjZXNzUG9saWN5OjpXcml0YWJsZSwgUGFzdGVib2FyZDo6Y3Jl
YXRlRm9yRHJhZ0FuZERyb3AoKSwgRHJhZ0FuZERyb3ApKTsKKyAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBEYXRhVHJhbnNmZXIoRGF0YVRyYW5zZmVyQWNjZXNzUG9saWN5OjpXcml0YWJsZSwgUGFz
dGVib2FyZDo6Y3JlYXRlRm9yRHJhZ0FuZERyb3AoKSwgVHlwZTo6RHJhZ0FuZERyb3BEYXRhKSk7
CiB9CiAKIFJlZjxEYXRhVHJhbnNmZXI+IERhdGFUcmFuc2Zlcjo6Y3JlYXRlRm9yRHJvcChEYXRh
VHJhbnNmZXJBY2Nlc3NQb2xpY3kgcG9saWN5LCBjb25zdCBEcmFnRGF0YSYgZHJhZ0RhdGEpCiB7
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRGF0YVRyYW5zZmVyKHBvbGljeSwgUGFzdGVib2Fy
ZDo6Y3JlYXRlRm9yRHJhZ0FuZERyb3AoZHJhZ0RhdGEpLCBEcmFnQW5kRHJvcCwgZHJhZ0RhdGEu
Y29udGFpbnNGaWxlcygpKSk7CisgICAgYXV0byB0eXBlID0gZHJhZ0RhdGEuY29udGFpbnNGaWxl
cygpID8gVHlwZTo6RHJhZ0FuZERyb3BGaWxlcyA6IFR5cGU6OkRyYWdBbmREcm9wRGF0YTsKKyAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEYXRhVHJhbnNmZXIocG9saWN5LCBQYXN0ZWJvYXJkOjpj
cmVhdGVGb3JEcmFnQW5kRHJvcChkcmFnRGF0YSksIHR5cGUpKTsKIH0KIAogYm9vbCBEYXRhVHJh
bnNmZXI6OmNhblNldERyYWdJbWFnZSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
RGF0YVRyYW5zZmVySXRlbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0Rh
dGFUcmFuc2Zlckl0ZW0uY3BwCShyZXZpc2lvbiAyMjA3ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vRGF0YVRyYW5zZmVySXRlbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJEYXRhVHJhbnNmZXJJdGVtLmgiCiAKKyNp
bmNsdWRlICJEYXRhVHJhbnNmZXJJdGVtTGlzdC5oIgogI2luY2x1ZGUgIkZpbGUuaCIKICNpbmNs
dWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiU3RyaW5nQ2FsbGJhY2su
aCIKQEAgLTM4LDE0ICszOSwyNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLURhdGFUcmFu
c2Zlckl0ZW06OkRhdGFUcmFuc2Zlckl0ZW0oRGF0YVRyYW5zZmVyJiBkYXRhVHJhbnNmZXIsIGNv
bnN0IFN0cmluZyYgdHlwZSkKLSAgICA6IG1fZGF0YVRyYW5zZmVyKGRhdGFUcmFuc2ZlcikKK1Jl
ZjxEYXRhVHJhbnNmZXJJdGVtPiBEYXRhVHJhbnNmZXJJdGVtOjpjcmVhdGUoV2Vha1B0cjxEYXRh
VHJhbnNmZXJJdGVtTGlzdD4mJiBsaXN0LCBjb25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgRGF0YVRyYW5zZmVySXRlbShXVEZNb3ZlKGxpc3QpLCB0eXBlKSk7
Cit9CisKK1JlZjxEYXRhVHJhbnNmZXJJdGVtPiBEYXRhVHJhbnNmZXJJdGVtOjpjcmVhdGUoV2Vh
a1B0cjxEYXRhVHJhbnNmZXJJdGVtTGlzdD4mJiBsaXN0LCBjb25zdCBTdHJpbmcmIHR5cGUsIFJl
ZjxGaWxlPiYmIGZpbGUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRGF0YVRyYW5zZmVy
SXRlbShXVEZNb3ZlKGxpc3QpLCB0eXBlLCBXVEZNb3ZlKGZpbGUpKSk7Cit9CisKK0RhdGFUcmFu
c2Zlckl0ZW06OkRhdGFUcmFuc2Zlckl0ZW0oV2Vha1B0cjxEYXRhVHJhbnNmZXJJdGVtTGlzdD4m
JiBsaXN0LCBjb25zdCBTdHJpbmcmIHR5cGUpCisgICAgOiBtX2xpc3QoV1RGTW92ZShsaXN0KSkK
ICAgICAsIG1fdHlwZSh0eXBlKQogewogfQogCi1EYXRhVHJhbnNmZXJJdGVtOjpEYXRhVHJhbnNm
ZXJJdGVtKERhdGFUcmFuc2ZlciYgZGF0YVRyYW5zZmVyLCBjb25zdCBTdHJpbmcmIHR5cGUsIFJl
ZjxGaWxlPiYmIGZpbGUpCi0gICAgOiBtX2RhdGFUcmFuc2ZlcihkYXRhVHJhbnNmZXIpCitEYXRh
VHJhbnNmZXJJdGVtOjpEYXRhVHJhbnNmZXJJdGVtKFdlYWtQdHI8RGF0YVRyYW5zZmVySXRlbUxp
c3Q+JiYgbGlzdCwgY29uc3QgU3RyaW5nJiB0eXBlLCBSZWY8RmlsZT4mJiBmaWxlKQorICAgIDog
bV9saXN0KFdURk1vdmUobGlzdCkpCiAgICAgLCBtX3R5cGUodHlwZSkKICAgICAsIG1fZmlsZShX
VEZNb3ZlKGZpbGUpKQogewpAQCAtNTUsMjMgKzY2LDM4IEBACiB7CiB9CiAKK3ZvaWQgRGF0YVRy
YW5zZmVySXRlbTo6Y2xlYXJMaXN0QW5kUHV0SW50b0Rpc2FibGVkTW9kZSgpCit7CisgICAgbV9s
aXN0LmNsZWFyKCk7Cit9CisKIFN0cmluZyBEYXRhVHJhbnNmZXJJdGVtOjpraW5kKCkgY29uc3QK
IHsKICAgICByZXR1cm4gbV9maWxlID8gQVNDSUlMaXRlcmFsKCJmaWxlIikgOiBBU0NJSUxpdGVy
YWwoInN0cmluZyIpOwogfQogCitTdHJpbmcgRGF0YVRyYW5zZmVySXRlbTo6dHlwZSgpIGNvbnN0
Cit7CisgICAgYm9vbCBpc0luRGlzYWJsZWRNb2RlID0gIW1fbGlzdDsKKyAgICByZXR1cm4gaXNJ
bkRpc2FibGVkTW9kZSA/IFN0cmluZygpIDogbV90eXBlOworfQorCiB2b2lkIERhdGFUcmFuc2Zl
ckl0ZW06OmdldEFzU3RyaW5nKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFJlZlB0
cjxTdHJpbmdDYWxsYmFjaz4mJiBjYWxsYmFjaykgY29uc3QKIHsKLSAgICBpZiAoIWNhbGxiYWNr
IHx8ICFtX2RhdGFUcmFuc2Zlci5jYW5SZWFkRGF0YSgpIHx8IG1fZmlsZSkKKyAgICBpZiAoIWNh
bGxiYWNrIHx8ICFtX2xpc3QgfHwgbV9maWxlKQogICAgICAgICByZXR1cm47CiAKKyAgICBhdXRv
JiBkYXRhVHJhbnNmZXIgPSBtX2xpc3QtPmRhdGFUcmFuc2ZlcigpOworICAgIGlmICghZGF0YVRy
YW5zZmVyLmNhblJlYWREYXRhKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIC8vIEZJWE1FOiBN
YWtlIHRoaXMgYXN5bmMuCi0gICAgY2FsbGJhY2stPnNjaGVkdWxlQ2FsbGJhY2soY29udGV4dCwg
bV9kYXRhVHJhbnNmZXIuZ2V0RGF0YShtX3R5cGUpKTsKKyAgICBjYWxsYmFjay0+c2NoZWR1bGVD
YWxsYmFjayhjb250ZXh0LCBkYXRhVHJhbnNmZXIuZ2V0RGF0YShtX3R5cGUpKTsKIH0KIAogUmVm
UHRyPEZpbGU+IERhdGFUcmFuc2Zlckl0ZW06OmdldEFzRmlsZSgpIGNvbnN0CiB7Ci0gICAgaWYg
KCFtX2RhdGFUcmFuc2Zlci5jYW5SZWFkRGF0YSgpKQorICAgIGlmICghbV9saXN0IHx8ICFtX2xp
c3QtPmRhdGFUcmFuc2ZlcigpLmNhblJlYWREYXRhKCkpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIHJldHVybiBtX2ZpbGUuY29weVJlZigpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
ZG9tL0RhdGFUcmFuc2Zlckl0ZW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
RGF0YVRyYW5zZmVySXRlbS5oCShyZXZpc2lvbiAyMjA3ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vRGF0YVRyYW5zZmVySXRlbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwzMiArMzUsMzYgQEAK
ICNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGUuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgog
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CitjbGFzcyBEYXRhVHJhbnNmZXJMaXN0SXRlbTsKIGNsYXNzIEZpbGU7CiBjbGFzcyBTY3JpcHRF
eGVjdXRpb25Db250ZXh0OwogY2xhc3MgU3RyaW5nQ2FsbGJhY2s7CiAKLWNsYXNzIERhdGFUcmFu
c2Zlckl0ZW0gOiBwdWJsaWMgU2NyaXB0V3JhcHBhYmxlIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShEYXRhVHJhbnNmZXJJdGVtKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitjbGFzcyBE
YXRhVHJhbnNmZXJJdGVtIDogcHVibGljIFJlZkNvdW50ZWQ8RGF0YVRyYW5zZmVySXRlbT4gewog
cHVibGljOgotICAgIERhdGFUcmFuc2Zlckl0ZW0oRGF0YVRyYW5zZmVyJiwgY29uc3QgU3RyaW5n
Jik7Ci0gICAgRGF0YVRyYW5zZmVySXRlbShEYXRhVHJhbnNmZXImLCBjb25zdCBTdHJpbmcmLCBS
ZWY8RmlsZT4mJik7CisgICAgc3RhdGljIFJlZjxEYXRhVHJhbnNmZXJJdGVtPiBjcmVhdGUoV2Vh
a1B0cjxEYXRhVHJhbnNmZXJJdGVtTGlzdD4mJiwgY29uc3QgU3RyaW5nJik7CisgICAgc3RhdGlj
IFJlZjxEYXRhVHJhbnNmZXJJdGVtPiBjcmVhdGUoV2Vha1B0cjxEYXRhVHJhbnNmZXJJdGVtTGlz
dD4mJiwgY29uc3QgU3RyaW5nJiwgUmVmPEZpbGU+JiYpOworCiAgICAgfkRhdGFUcmFuc2Zlckl0
ZW0oKTsKIAotICAgIC8vIERhdGFUcmFuc2ZlciBvd25zIERhdGFUcmFuc2Zlckl0ZW0sIGFuZCBE
YXRhVHJhbnNmZXIgaXMga2VwdCBhbGl2ZSBhcyBsb25nIGFzIERhdGFUcmFuc2Zlckl0ZW0gaXMg
YWxpdmUuCi0gICAgdm9pZCByZWYoKSB7IG1fZGF0YVRyYW5zZmVyLnJlZigpOyB9Ci0gICAgdm9p
ZCBkZXJlZigpIHsgbV9kYXRhVHJhbnNmZXIuZGVyZWYoKTsgfQorICAgIHZvaWQgY2xlYXJMaXN0
QW5kUHV0SW50b0Rpc2FibGVkTW9kZSgpOwogCisgICAgYm9vbCBpc0ZpbGUoKSBjb25zdCB7IHJl
dHVybiBtX2ZpbGU7IH0KICAgICBTdHJpbmcga2luZCgpIGNvbnN0OwotICAgIGNvbnN0IFN0cmlu
ZyYgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIFN0cmluZyB0eXBlKCkgY29u
c3Q7CiAgICAgdm9pZCBnZXRBc1N0cmluZyhTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgUmVmUHRy
PFN0cmluZ0NhbGxiYWNrPiYmKSBjb25zdDsKICAgICBSZWZQdHI8RmlsZT4gZ2V0QXNGaWxlKCkg
Y29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgRGF0YVRyYW5zZmVyJiBtX2RhdGFUcmFuc2ZlcjsKKyAg
ICBEYXRhVHJhbnNmZXJJdGVtKFdlYWtQdHI8RGF0YVRyYW5zZmVySXRlbUxpc3Q+JiYsIGNvbnN0
IFN0cmluZyYpOworICAgIERhdGFUcmFuc2Zlckl0ZW0oV2Vha1B0cjxEYXRhVHJhbnNmZXJJdGVt
TGlzdD4mJiwgY29uc3QgU3RyaW5nJiwgUmVmPEZpbGU+JiYpOworCisgICAgV2Vha1B0cjxEYXRh
VHJhbnNmZXJJdGVtTGlzdD4gbV9saXN0OwogICAgIGNvbnN0IFN0cmluZyBtX3R5cGU7CiAgICAg
UmVmUHRyPEZpbGU+IG1fZmlsZTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRGF0YVRy
YW5zZmVySXRlbUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9EYXRh
VHJhbnNmZXJJdGVtTGlzdC5jcHAJKHJldmlzaW9uIDIyMDc4MikKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9EYXRhVHJhbnNmZXJJdGVtTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkgKzI4
LDI2IEBACiAKICNpbmNsdWRlICJEYXRhVHJhbnNmZXJJdGVtLmgiCiAjaW5jbHVkZSAiRmlsZUxp
c3QuaCIKKyNpbmNsdWRlICJQYXN0ZWJvYXJkLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAor
Ly8gRklYTUU6IERhdGFUcmFuc2ZlciBzaG91bGQgZmlsdGVyIHR5cGVzIGl0c2VsZi4KK3N0YXRp
YyBib29sIGlzU3VwcG9ydGVkVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAgcmV0dXJu
IHR5cGUgPT0gInRleHQvcGxhaW4iOworfQorCitEYXRhVHJhbnNmZXJJdGVtTGlzdDo6RGF0YVRy
YW5zZmVySXRlbUxpc3QoRGF0YVRyYW5zZmVyJiBkYXRhVHJhbnNmZXIpCisgICAgOiBtX3dlYWtQ
dHJGYWN0b3J5KHRoaXMpCisgICAgLCBtX2RhdGFUcmFuc2ZlcihkYXRhVHJhbnNmZXIpCit7Cit9
CisKK0RhdGFUcmFuc2Zlckl0ZW1MaXN0Ojp+RGF0YVRyYW5zZmVySXRlbUxpc3QoKQoreworfQor
CiB1bnNpZ25lZCBEYXRhVHJhbnNmZXJJdGVtTGlzdDo6bGVuZ3RoKCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gZW5zdXJlSXRlbXMoKS5zaXplKCk7CkBAIC00MSw1NiArNTgsMTMxIEBACiAgICAgYXV0
byYgaXRlbXMgPSBlbnN1cmVJdGVtcygpOwogICAgIGlmIChpdGVtcy5zaXplKCkgPD0gaW5kZXgp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBpdGVtc1tpbmRleF0uZ2V0KCk7
CisgICAgcmV0dXJuIGl0ZW1zW2luZGV4XS5jb3B5UmVmKCk7CiB9CiAKLUV4Y2VwdGlvbk9yPHZv
aWQ+IERhdGFUcmFuc2Zlckl0ZW1MaXN0OjphZGQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5n
JikKK0V4Y2VwdGlvbk9yPFJlZlB0cjxEYXRhVHJhbnNmZXJJdGVtPj4gRGF0YVRyYW5zZmVySXRl
bUxpc3Q6OmFkZChjb25zdCBTdHJpbmcmIGRhdGEsIGNvbnN0IFN0cmluZyYgdHlwZSkKIHsKLSAg
ICByZXR1cm4geyB9OworICAgIGlmICghbV9kYXRhVHJhbnNmZXIuY2FuV3JpdGVEYXRhKCkpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgZm9yIChhdXRvJiBpdGVtIDogZW5zdXJlSXRl
bXMoKSkgeworICAgICAgICBpZiAoIWl0ZW0tPmlzRmlsZSgpICYmIGVxdWFsSWdub3JpbmdBU0NJ
SUNhc2UoaXRlbS0+dHlwZSgpLCB0eXBlKSkKKyAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBOb3RTdXBwb3J0ZWRFcnJvciB9OworICAgIH0KKworICAgIFN0cmluZyBsb3dlcmNhc2VkVHlw
ZSA9IHR5cGUuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKTsKKworICAgIC8vIEZJWE1FOiBBbGxv
dyB3cml0aW5nICYgcmVhZGluZyBvZiBhbnkgdHlwZXMgdG8gY2xpcGJvYXJkIC8gZHJhZyBkYXRh
IHN0b3JlLgorICAgIGlmICghaXNTdXBwb3J0ZWRUeXBlKGxvd2VyY2FzZWRUeXBlKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBtX2RhdGFUcmFuc2Zlci5wYXN0ZWJvYXJkKCkud3Jp
dGVTdHJpbmcobG93ZXJjYXNlZFR5cGUsIGRhdGEpOworICAgIEFTU0VSVChtX2l0ZW1zKTsKKyAg
ICBtX2l0ZW1zLT5hcHBlbmQoRGF0YVRyYW5zZmVySXRlbTo6Y3JlYXRlKG1fd2Vha1B0ckZhY3Rv
cnkuY3JlYXRlV2Vha1B0cigpLCB0eXBlKSk7CisgICAgcmV0dXJuIFJlZlB0cjxEYXRhVHJhbnNm
ZXJJdGVtPiB7IG1faXRlbXMtPmxhc3QoKS5jb3B5UmVmKCkgfTsKIH0KIAotdm9pZCBEYXRhVHJh
bnNmZXJJdGVtTGlzdDo6YWRkKFJlZlB0cjxGaWxlPiYmKQorUmVmUHRyPERhdGFUcmFuc2Zlckl0
ZW0+IERhdGFUcmFuc2Zlckl0ZW1MaXN0OjphZGQoUmVmPEZpbGU+JiYpCiB7CisgICAgcmV0dXJu
IG51bGxwdHI7CiB9CiAKLXZvaWQgRGF0YVRyYW5zZmVySXRlbUxpc3Q6OnJlbW92ZSh1bnNpZ25l
ZCkKK0V4Y2VwdGlvbk9yPHZvaWQ+IERhdGFUcmFuc2Zlckl0ZW1MaXN0OjpyZW1vdmUodW5zaWdu
ZWQgaW5kZXgpCiB7CisgICAgaWYgKCFtX2RhdGFUcmFuc2Zlci5jYW5Xcml0ZURhdGEoKSkKKyAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07CisKKyAgICBhdXRv
JiBpdGVtcyA9IGVuc3VyZUl0ZW1zKCk7CisgICAgaWYgKGl0ZW1zLnNpemUoKSA8PSBpbmRleCkK
KyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9yIH07IC8vIE1hdGNoZXMg
R2Vja28uIFNlZSBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL2h0bWwvaXNzdWVzLzI5MjUKKwor
ICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhlIHJlbW92YWwgb2YgZmlsZXMgb25jZSB3ZSBhZGRlZCB0
aGUgc3VwcG9ydCBmb3Igd3JpdGluZyBhIEZpbGUuCisgICAgQVNTRVJUKCFpdGVtc1tpbmRleF0t
PmlzRmlsZSgpKTsKKworICAgIGF1dG8mIHJlbW92ZWRJdGVtID0gaXRlbXNbaW5kZXhdLmdldCgp
OworICAgIG1fZGF0YVRyYW5zZmVyLnBhc3RlYm9hcmQoKS5jbGVhcihyZW1vdmVkSXRlbS50eXBl
KCkpOworICAgIHJlbW92ZWRJdGVtLmNsZWFyTGlzdEFuZFB1dEludG9EaXNhYmxlZE1vZGUoKTsK
KyAgICBpdGVtcy5yZW1vdmUoaW5kZXgpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogdm9pZCBE
YXRhVHJhbnNmZXJJdGVtTGlzdDo6Y2xlYXIoKQogeworICAgIG1fZGF0YVRyYW5zZmVyLnBhc3Rl
Ym9hcmQoKS5jbGVhcigpOworICAgIGlmIChtX2l0ZW1zKSB7CisgICAgICAgIGZvciAoYXV0byYg
aXRlbSA6ICptX2l0ZW1zKQorICAgICAgICAgICAgaXRlbS0+Y2xlYXJMaXN0QW5kUHV0SW50b0Rp
c2FibGVkTW9kZSgpOworICAgICAgICBtX2l0ZW1zLT5jbGVhcigpOworICAgIH0KIH0KIAotLy8g
RklYTUU6IERhdGFUcmFuc2ZlciBzaG91bGQgZmlsdGVyIHR5cGVzIGl0c2VsZi4KLXN0YXRpYyBi
b29sIGlzU3VwcG9ydGVkVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCitWZWN0b3I8UmVmPERhdGFU
cmFuc2Zlckl0ZW0+PiYgRGF0YVRyYW5zZmVySXRlbUxpc3Q6OmVuc3VyZUl0ZW1zKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZSh0eXBlLCAidGV4dC9wbGFpbiIp
OwotfQotCi1WZWN0b3I8c3RkOjp1bmlxdWVfcHRyPERhdGFUcmFuc2Zlckl0ZW0+PiYgRGF0YVRy
YW5zZmVySXRlbUxpc3Q6OmVuc3VyZUl0ZW1zKCkgY29uc3QKLXsKICAgICBpZiAobV9pdGVtcykK
ICAgICAgICAgcmV0dXJuICptX2l0ZW1zOwogCi0gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxE
YXRhVHJhbnNmZXJJdGVtPj4gaXRlbXM7CisgICAgVmVjdG9yPFJlZjxEYXRhVHJhbnNmZXJJdGVt
Pj4gaXRlbXM7CiAgICAgZm9yIChTdHJpbmcmIHR5cGUgOiBtX2RhdGFUcmFuc2Zlci50eXBlcygp
KSB7Ci0gICAgICAgIGlmIChpc1N1cHBvcnRlZFR5cGUodHlwZSkpCi0gICAgICAgICAgICBpdGVt
cy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxEYXRhVHJhbnNmZXJJdGVtPihtX2RhdGFUcmFuc2Zl
ciwgdHlwZSkpOworICAgICAgICBTdHJpbmcgbG93ZXJjYXNlZFR5cGUgPSB0eXBlLmNvbnZlcnRU
b0FTQ0lJTG93ZXJjYXNlKCk7CisgICAgICAgIGlmIChpc1N1cHBvcnRlZFR5cGUobG93ZXJjYXNl
ZFR5cGUpKQorICAgICAgICAgICAgaXRlbXMuYXBwZW5kKERhdGFUcmFuc2Zlckl0ZW06OmNyZWF0
ZShtX3dlYWtQdHJGYWN0b3J5LmNyZWF0ZVdlYWtQdHIoKSwgbG93ZXJjYXNlZFR5cGUpKTsKICAg
ICB9CiAKICAgICBGaWxlTGlzdCYgZmlsZXMgPSBtX2RhdGFUcmFuc2Zlci5maWxlcygpOwogICAg
IGZvciAodW5zaWduZWQgaSA9IDAsIGxlbmd0aCA9IGZpbGVzLmxlbmd0aCgpOyBpIDwgbGVuZ3Ro
OyArK2kpIHsKICAgICAgICAgRmlsZSYgZmlsZSA9ICpmaWxlcy5pdGVtKGkpOwotICAgICAgICBT
dHJpbmcgdHlwZSA9IEZpbGU6OmNvbnRlbnRUeXBlRm9yRmlsZShmaWxlLnBhdGgoKSk7CisgICAg
ICAgIFN0cmluZyB0eXBlID0gRmlsZTo6Y29udGVudFR5cGVGb3JGaWxlKGZpbGUucGF0aCgpKS5j
b252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpOwogICAgICAgICBpZiAoaXNTdXBwb3J0ZWRUeXBlKHR5
cGUpKQotICAgICAgICAgICAgaXRlbXMuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8RGF0YVRyYW5z
ZmVySXRlbT4obV9kYXRhVHJhbnNmZXIsIHR5cGUsIGZpbGUpKTsKKyAgICAgICAgICAgIGl0ZW1z
LmFwcGVuZChEYXRhVHJhbnNmZXJJdGVtOjpjcmVhdGUobV93ZWFrUHRyRmFjdG9yeS5jcmVhdGVX
ZWFrUHRyKCksIHR5cGUsIGZpbGUpKTsKICAgICB9CiAKLQogICAgIG1faXRlbXMgPSBXVEZNb3Zl
KGl0ZW1zKTsKIAogICAgIHJldHVybiAqbV9pdGVtczsKIH0KIAorc3RhdGljIHZvaWQgcmVtb3Zl
U3RyaW5nSXRlbU9mTG93ZXJjYXNlZFR5cGUoVmVjdG9yPFJlZjxEYXRhVHJhbnNmZXJJdGVtPj4m
IGl0ZW1zLCBjb25zdCBTdHJpbmcmIGxvd2VyY2FzZWRUeXBlKQoreworICAgIGF1dG8gaW5kZXgg
PSBpdGVtcy5maW5kTWF0Y2hpbmcoW2xvd2VyY2FzZWRUeXBlXShhdXRvJiBpdGVtKSB7CisgICAg
ICAgIHJldHVybiAhaXRlbS0+aXNGaWxlKCkgJiYgaXRlbS0+dHlwZSgpID09IGxvd2VyY2FzZWRU
eXBlOworICAgIH0pOworICAgIGlmIChpbmRleCA9PSBub3RGb3VuZCkKKyAgICAgICAgcmV0dXJu
OworICAgIGl0ZW1zW2luZGV4XS0+Y2xlYXJMaXN0QW5kUHV0SW50b0Rpc2FibGVkTW9kZSgpOwor
ICAgIGl0ZW1zLnJlbW92ZShpbmRleCk7CiB9CiAKK3ZvaWQgRGF0YVRyYW5zZmVySXRlbUxpc3Q6
OmRpZENsZWFyU3RyaW5nRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAgaWYgKCFtX2l0
ZW1zKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvJiBpdGVtcyA9ICptX2l0ZW1zOworICAg
IGlmICghdHlwZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIHJlbW92ZVN0cmluZ0l0ZW1PZkxv
d2VyY2FzZWRUeXBlKGl0ZW1zLCB0eXBlLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkpOworCisg
ICAgZm9yIChhdXRvJiBpdGVtIDogaXRlbXMpIHsKKyAgICAgICAgaWYgKCFpdGVtLT5pc0ZpbGUo
KSkKKyAgICAgICAgICAgIGl0ZW0tPmNsZWFyTGlzdEFuZFB1dEludG9EaXNhYmxlZE1vZGUoKTsK
KyAgICB9CisgICAgaXRlbXMucmVtb3ZlQWxsTWF0Y2hpbmcoW10oYXV0byYgaXRlbSkgeworICAg
ICAgICByZXR1cm4gIWl0ZW0tPmlzRmlsZSgpOworICAgIH0pOworfQorCisvLyBodHRwczovL2h0
bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9kbmQuaHRtbCNkb20tZGF0YXRyYW5zZmVyLXNl
dGRhdGEKK3ZvaWQgRGF0YVRyYW5zZmVySXRlbUxpc3Q6OmRpZFNldFN0cmluZ0RhdGEoY29uc3Qg
U3RyaW5nJiB0eXBlKQoreworICAgIGlmICghbV9pdGVtcykKKyAgICAgICAgcmV0dXJuOworCisg
ICAgU3RyaW5nIGxvd2VyY2FzZWRUeXBlID0gdHlwZS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgp
OworICAgIHJlbW92ZVN0cmluZ0l0ZW1PZkxvd2VyY2FzZWRUeXBlKCptX2l0ZW1zLCB0eXBlLmNv
bnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkpOworCisgICAgbV9pdGVtcy0+YXBwZW5kKERhdGFUcmFu
c2Zlckl0ZW06OmNyZWF0ZShtX3dlYWtQdHJGYWN0b3J5LmNyZWF0ZVdlYWtQdHIoKSwgbG93ZXJj
YXNlZFR5cGUpKTsKK30KKworfQorCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRGF0YVRyYW5z
ZmVySXRlbUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRGF0YVRyYW5z
ZmVySXRlbUxpc3QuaAkocmV2aXNpb24gMjIwNzgyKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0Rh
dGFUcmFuc2Zlckl0ZW1MaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDQwICszMiw0NiBAQAog
I3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJEYXRhVHJhbnNmZXIuaCIKLSNpbmNsdWRlICJEYXRh
VHJhbnNmZXJJdGVtLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uT3IuaCIKICNpbmNsdWRlICJTY3Jp
cHRXcmFwcGFibGUuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWYuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRy
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRGF0YVRyYW5zZmVySXRlbTsKIGNs
YXNzIEZpbGU7CiAKIGNsYXNzIERhdGFUcmFuc2Zlckl0ZW1MaXN0IDogcHVibGljIFNjcmlwdFdy
YXBwYWJsZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGF0YVRyYW5zZmVySXRlbUxpc3Qp
OyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBEYXRhVHJhbnNmZXJJdGVt
TGlzdChEYXRhVHJhbnNmZXImIGRhdGFUcmFuc2ZlcikKLSAgICAgICAgOiBtX2RhdGFUcmFuc2Zl
cihkYXRhVHJhbnNmZXIpCi0gICAgewotICAgIH0KKyAgICBEYXRhVHJhbnNmZXJJdGVtTGlzdChE
YXRhVHJhbnNmZXImKTsKKyAgICB+RGF0YVRyYW5zZmVySXRlbUxpc3QoKTsKIAogICAgIC8vIERh
dGFUcmFuc2ZlciBvd25zIERhdGFUcmFuc2Zlckl0ZW1MaXN0LCBhbmQgRGF0YVRyYW5zZmVyIGlz
IGtlcHQgYWxpdmUgYXMgbG9uZyBhcyBEYXRhVHJhbnNmZXJJdGVtTGlzdCBpcyBhbGl2ZS4KICAg
ICB2b2lkIHJlZigpIHsgbV9kYXRhVHJhbnNmZXIucmVmKCk7IH0KICAgICB2b2lkIGRlcmVmKCkg
eyBtX2RhdGFUcmFuc2Zlci5kZXJlZigpOyB9CisgICAgRGF0YVRyYW5zZmVyJiBkYXRhVHJhbnNm
ZXIoKSB7IHJldHVybiBtX2RhdGFUcmFuc2ZlcjsgfQogCisgICAgLy8gRE9NIEFQSQogICAgIHVu
c2lnbmVkIGxlbmd0aCgpIGNvbnN0OwogICAgIFJlZlB0cjxEYXRhVHJhbnNmZXJJdGVtPiBpdGVt
KHVuc2lnbmVkIGluZGV4KTsKLSAgICBFeGNlcHRpb25Pcjx2b2lkPiBhZGQoY29uc3QgU3RyaW5n
JiBkYXRhLCBjb25zdCBTdHJpbmcmIHR5cGUpOwotICAgIHZvaWQgYWRkKFJlZlB0cjxGaWxlPiYm
KTsKLSAgICB2b2lkIHJlbW92ZSh1bnNpZ25lZCBpbmRleCk7CisgICAgRXhjZXB0aW9uT3I8UmVm
UHRyPERhdGFUcmFuc2Zlckl0ZW0+PiBhZGQoY29uc3QgU3RyaW5nJiBkYXRhLCBjb25zdCBTdHJp
bmcmIHR5cGUpOworICAgIFJlZlB0cjxEYXRhVHJhbnNmZXJJdGVtPiBhZGQoUmVmPEZpbGU+JiYp
OworICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHJlbW92ZSh1bnNpZ25lZCBpbmRleCk7CiAgICAgdm9p
ZCBjbGVhcigpOwogCisgICAgdm9pZCBkaWRDbGVhclN0cmluZ0RhdGEoY29uc3QgU3RyaW5nJiB0
eXBlKTsKKyAgICB2b2lkIGRpZFNldFN0cmluZ0RhdGEoY29uc3QgU3RyaW5nJiB0eXBlKTsKKwog
cHJpdmF0ZToKLSAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPERhdGFUcmFuc2Zlckl0ZW0+PiYg
ZW5zdXJlSXRlbXMoKSBjb25zdDsKKyAgICBWZWN0b3I8UmVmPERhdGFUcmFuc2Zlckl0ZW0+PiYg
ZW5zdXJlSXRlbXMoKSBjb25zdDsKIAorICAgIFdlYWtQdHJGYWN0b3J5PERhdGFUcmFuc2Zlckl0
ZW1MaXN0PiBtX3dlYWtQdHJGYWN0b3J5OwogICAgIERhdGFUcmFuc2ZlciYgbV9kYXRhVHJhbnNm
ZXI7Ci0gICAgbXV0YWJsZSBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RGF0
YVRyYW5zZmVySXRlbT4+PiBtX2l0ZW1zOworICAgIG11dGFibGUgc3RkOjpvcHRpb25hbDxWZWN0
b3I8UmVmPERhdGFUcmFuc2Zlckl0ZW0+Pj4gbV9pdGVtczsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9EYXRhVHJhbnNmZXJJdGVtTGlzdC5p
ZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RhdGFUcmFuc2Zlckl0ZW1MaXN0
LmlkbAkocmV2aXNpb24gMjIwNzgyKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RhdGFUcmFuc2Zl
ckl0ZW1MaXN0LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTAgKzM4LDEwIEBACiAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIGxvbmcgbGVuZ3RoOwogICAgIGdldHRlciBEYXRhVHJhbnNmZXJJdGVt
IGl0ZW0odW5zaWduZWQgbG9uZyBpbmRleCk7CiAKLSAgICBbTWF5VGhyb3dFeGNlcHRpb25dIHZv
aWQgYWRkKG9wdGlvbmFsIERPTVN0cmluZyBkYXRhID0gInVuZGVmaW5lZCIsIG9wdGlvbmFsIERP
TVN0cmluZyB0eXBlID0gInVuZGVmaW5lZCIpOwotICAgIHZvaWQgYWRkKEZpbGU/IGZpbGUpOwor
ICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gRGF0YVRyYW5zZmVySXRlbT8gYWRkKERPTVN0cmluZyBk
YXRhLCBET01TdHJpbmcgdHlwZSk7CisgICAgRGF0YVRyYW5zZmVySXRlbT8gYWRkKEZpbGUgZmls
ZSk7CiAKLSAgICB2b2lkIHJlbW92ZSh1bnNpZ25lZCBsb25nIGluZGV4KTsKKyAgICBbTWF5VGhy
b3dFeGNlcHRpb25dIHZvaWQgcmVtb3ZlKHVuc2lnbmVkIGxvbmcgaW5kZXgpOwogCiAgICAgdm9p
ZCBjbGVhcigpOwogfTsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMDc4MikKKysrIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDE3LTA4LTE2ICBS
eW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCB0aGUgc3VwcG9y
dCBmb3IgbXV0YXRpbmcgY2xpcGJvYXJkIGRhdGEgdmlhIERhdGFUcmFuc2Zlckl0ZW1MaXN0Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU2MzkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWJhc2VsaW5l
ZCB0aGUgSURMIHRlc3Qgd2hpY2ggbm93IHBhc3NlcyBhbGwgdGVzdCBjYXNlcywgYW5kIGFkZGVk
IGEgcmVncmVzc2lvbiB0ZXN0IGZvciBtdXRhdGluZyBjbGlwYm9hcmQgZGF0YQorICAgICAgICB2
aWEgZGF0YVRyYW5zZmVyLml0ZW1zIGFuZCBtZXRob2RzIG9uIGRhdGFUcmFuc2ZlciBmb3IgcGxh
aW50ZXh0LgorCisgICAgICAgICogZWRpdGluZy9wYXN0ZWJvYXJkL2RhdGF0cmFuc2Zlci1pZGwt
ZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGVkaXRpbmcvcGFzdGVib2FyZC9kYXRhdHJhbnNmZXIt
aXRlbXMtY29weS1wbGFpbnRleHQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBlZGl0
aW5nL3Bhc3RlYm9hcmQvZGF0YXRyYW5zZmVyLWl0ZW1zLWNvcHktcGxhaW50ZXh0Lmh0bWw6IEFk
ZGVkLgorCiAyMDE3LTA4LTE1ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAg
ICAgICAgIE1ha2UgRGF0YVRyYW5zZmVySXRlbUxpc3Qgd29yayB3aXRoIHBsYWluIHRleHQgZW50
cmllcwpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL2RhdGF0cmFuc2Zlci1p
ZGwtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVi
b2FyZC9kYXRhdHJhbnNmZXItaWRsLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMjIwNzgyKQorKysg
TGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL2RhdGF0cmFuc2Zlci1pZGwtZXhwZWN0ZWQu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yMCw4ICsyMCw4IEBACiBQQVNTIERhdGFUcmFuc2Zlckl0
ZW1MaXN0IGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVyZmFjZSBw
cm90b3R5cGUgb2JqZWN0IAogUEFTUyBEYXRhVHJhbnNmZXJJdGVtTGlzdCBpbnRlcmZhY2U6IGV4
aXN0ZW5jZSBhbmQgcHJvcGVydGllcyBvZiBpbnRlcmZhY2UgcHJvdG90eXBlIG9iamVjdCdzICJj
b25zdHJ1Y3RvciIgcHJvcGVydHkgCiBQQVNTIERhdGFUcmFuc2Zlckl0ZW1MaXN0IGludGVyZmFj
ZTogYXR0cmlidXRlIGxlbmd0aCAKLUZBSUwgRGF0YVRyYW5zZmVySXRlbUxpc3QgaW50ZXJmYWNl
OiBvcGVyYXRpb24gYWRkKERPTVN0cmluZyxET01TdHJpbmcpIGFzc2VydF9lcXVhbHM6IHByb3Bl
cnR5IGhhcyB3cm9uZyAubGVuZ3RoIGV4cGVjdGVkIDEgYnV0IGdvdCAwCi1GQUlMIERhdGFUcmFu
c2Zlckl0ZW1MaXN0IGludGVyZmFjZTogb3BlcmF0aW9uIGFkZChGaWxlKSBhc3NlcnRfZXF1YWxz
OiBwcm9wZXJ0eSBoYXMgd3JvbmcgLmxlbmd0aCBleHBlY3RlZCAxIGJ1dCBnb3QgMAorUEFTUyBE
YXRhVHJhbnNmZXJJdGVtTGlzdCBpbnRlcmZhY2U6IG9wZXJhdGlvbiBhZGQoRE9NU3RyaW5nLERP
TVN0cmluZykgCitQQVNTIERhdGFUcmFuc2Zlckl0ZW1MaXN0IGludGVyZmFjZTogb3BlcmF0aW9u
IGFkZChGaWxlKSAKIFBBU1MgRGF0YVRyYW5zZmVySXRlbUxpc3QgaW50ZXJmYWNlOiBvcGVyYXRp
b24gcmVtb3ZlKHVuc2lnbmVkIGxvbmcpIAogUEFTUyBEYXRhVHJhbnNmZXJJdGVtTGlzdCBpbnRl
cmZhY2U6IG9wZXJhdGlvbiBjbGVhcigpIAogUEFTUyBEYXRhVHJhbnNmZXJJdGVtIGludGVyZmFj
ZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVyZmFjZSBvYmplY3QgCkluZGV4OiBM
YXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvZGF0YXRyYW5zZmVyLWl0ZW1zLWNvcHktcGxh
aW50ZXh0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3Bh
c3RlYm9hcmQvZGF0YXRyYW5zZmVyLWl0ZW1zLWNvcHktcGxhaW50ZXh0LWV4cGVjdGVkLnR4dAko
bm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvZGF0YXRyYW5z
ZmVyLWl0ZW1zLWNvcHktcGxhaW50ZXh0LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQzIEBACitUaGlzIHRlc3RzIGNvcHlpbmcgcGxhaW4gdGV4dCB1c2luZyBkYXRhVHJh
bnNmZXIuaXRlbXMuIFRvIG1hbnVhbGx5IHRlc3QsIGNsaWNrIG9uICJDb3B5IHRleHQiIGFuZCBw
YXN0ZSAoQ29tbWFuZCtWIG9uIE1hYyBDb250cm9sK1YgZWxzZXdoZXJlKS4KKworT24gc3VjY2Vz
cywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkg
IlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgY2xpcGJvYXJkRGF0YS5pdGVtcy5sZW5ndGggaXMg
MAorUEFTUyBjbGlwYm9hcmREYXRhLnNldERhdGEoInRleHQvcGxhaW4iLCAicm9jayIpOyBjbGlw
Ym9hcmREYXRhLml0ZW1zLmxlbmd0aCBpcyAxCitQQVNTIGluaXRpYWxJdGVtID0gY2xpcGJvYXJk
RGF0YS5pdGVtc1swXTsgaW5pdGlhbEl0ZW0ua2luZCBpcyAic3RyaW5nIgorUEFTUyBpbml0aWFs
SXRlbS50eXBlIGlzICJ0ZXh0L3BsYWluIgorUEFTUyBpbml0aWFsSXRlbS5nZXRBc0ZpbGUoKSBp
cyBudWxsCitQQVNTIGluaXRpYWxJdGVtLmdldEFzU3RyaW5nKGNoZWNrQ29udGVudCgxLCAicm9j
ayIpKSBpcyB1bmRlZmluZWQKK1BBU1MgY2xpcGJvYXJkRGF0YS5pdGVtcy5hZGQoInBhcGVyIiwg
InRleHQvcGxhaW4iKSB0aHJldyBleGNlcHRpb24gTm90U3VwcG9ydGVkRXJyb3I6IFRoZSBvcGVy
YXRpb24gaXMgbm90IHN1cHBvcnRlZC4uCitQQVNTIGNsaXBib2FyZERhdGEuaXRlbXNbMF0gaXMg
aW5pdGlhbEl0ZW0KK1BBU1MgY2xpcGJvYXJkRGF0YS5jbGVhckRhdGEoKTsgY2xpcGJvYXJkRGF0
YS5pdGVtcy5sZW5ndGggaXMgMAorUEFTUyBjbGlwYm9hcmREYXRhLml0ZW1zLmFkZCgic2Npc3Nv
cnMiLCAidGV4dC9wbGFpbiIpOyBjbGlwYm9hcmREYXRhLml0ZW1zLmxlbmd0aCBpcyAxCitQQVNT
IGNsaXBib2FyZERhdGEuaXRlbXNbMF0gaXMgbm90IGluaXRpYWxJdGVtCitQQVNTIGluaXRpYWxJ
dGVtLmtpbmQgaXMgInN0cmluZyIKK1BBU1MgaW5pdGlhbEl0ZW0udHlwZSBpcyAiIgorUEFTUyBp
bml0aWFsSXRlbS5nZXRBc0ZpbGUoKSBpcyBudWxsCitQQVNTIGluaXRpYWxJdGVtLmdldEFzU3Ry
aW5nKCgpID0+IHRlc3RGYWlsZWQoImdldEFzU3RyaW5nIHNob3VsZCBleGl0IGltbWVpZGF0ZWx5
IGlmIGl0ZW0gaXMgZGlzYWJsZWQiKSkgaXMgdW5kZWZpbmVkCitQQVNTIGNsaXBib2FyZERhdGEu
Z2V0RGF0YSgidGV4dC9wbGFpbiIpIGlzICJzY2lzc29ycyIKK1BBU1MgY2xpcGJvYXJkRGF0YS5p
dGVtc1swXS5raW5kIGlzICJzdHJpbmciCitQQVNTIGNsaXBib2FyZERhdGEuaXRlbXNbMF0udHlw
ZSBpcyAidGV4dC9wbGFpbiIKK1BBU1MgY2xpcGJvYXJkRGF0YS5pdGVtc1swXS5nZXRBc0ZpbGUo
KSBpcyBudWxsCitQQVNTIGNsaXBib2FyZERhdGEuaXRlbXNbMF0uZ2V0QXNTdHJpbmcoY2hlY2tD
b250ZW50KDIsICJzY2lzc29ycyIpKSBpcyB1bmRlZmluZWQKK1BBU1MgY2xpcGJvYXJkRGF0YS5p
dGVtcy5jbGVhcigpOyBjbGlwYm9hcmREYXRhLml0ZW1zLmxlbmd0aCBpcyAwCitQQVNTIGNsaXBi
b2FyZERhdGEuZ2V0RGF0YSgidGV4dC9wbGFpbiIpIGlzICIiCitQQVNTIGNsaXBib2FyZERhdGEu
aXRlbXMuYWRkKCJXZWJLaXQiLCAidGV4dC9wbGFpbiIpOyBjbGlwYm9hcmREYXRhLml0ZW1zLmxl
bmd0aCBpcyAxCitQQVNTIGNsaXBib2FyZERhdGEuaXRlbXNbMF0ua2luZCBpcyAic3RyaW5nIgor
UEFTUyBjbGlwYm9hcmREYXRhLml0ZW1zWzBdLnR5cGUgaXMgInRleHQvcGxhaW4iCitQQVNTIGNs
aXBib2FyZERhdGEuaXRlbXNbMF0uZ2V0QXNGaWxlKCkgaXMgbnVsbAorUEFTUyBjbGlwYm9hcmRE
YXRhLml0ZW1zWzBdLmdldEFzU3RyaW5nKGNoZWNrQ29udGVudCgzLCAiV2ViS2l0IikpIGlzIHVu
ZGVmaW5lZAorUEFTUyBjbGlwYm9hcmREYXRhLml0ZW1zLnJlbW92ZSgxKSB0aHJldyBleGNlcHRp
b24gSW5kZXhTaXplRXJyb3I6IFRoZSBpbmRleCBpcyBub3QgaW4gdGhlIGFsbG93ZWQgcmFuZ2Uu
LgorUEFTUyBjbGlwYm9hcmREYXRhLml0ZW1zLmxlbmd0aCBpcyAxCitQQVNTIGNsaXBib2FyZERh
dGEuaXRlbXMucmVtb3ZlKDApOyBjbGlwYm9hcmREYXRhLml0ZW1zLmxlbmd0aCBpcyAwCitQQVNT
IGNsaXBib2FyZERhdGEuZ2V0RGF0YSgidGV4dC9wbGFpbiIpIGlzICIiCitQQVNTIGFjdHVhbENv
bnRlbnQxIGlzICJyb2NrIgorUEFTUyBhY3R1YWxDb250ZW50MiBpcyAic2Npc3NvcnMiCitQQVNT
IGFjdHVhbENvbnRlbnQzIGlzICJXZWJLaXQiCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJv
YXJkL2RhdGF0cmFuc2Zlci1pdGVtcy1jb3B5LXBsYWludGV4dC5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9kYXRhdHJhbnNmZXItaXRlbXMtY29weS1w
bGFpbnRleHQuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3Rl
Ym9hcmQvZGF0YXRyYW5zZmVyLWl0ZW1zLWNvcHktcGxhaW50ZXh0Lmh0bWwJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw4NiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5PgorPHNj
cmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0PgorCitkZXNjcmlwdGlvbignVGhpcyB0ZXN0cyBjb3B5aW5nIHBsYWluIHRleHQgdXNpbmcg
ZGF0YVRyYW5zZmVyLml0ZW1zLiBUbyBtYW51YWxseSB0ZXN0LCBjbGljayBvbiAiQ29weSB0ZXh0
IiBhbmQgcGFzdGUgKENvbW1hbmQrViBvbiBNYWMgQ29udHJvbCtWIGVsc2V3aGVyZSkuJyk7CisK
K2Z1bmN0aW9uIGNvcHlUZXh0KCkKK3sKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc291
cmNlJykuZm9jdXMoKTsKKyAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnU2VsZWN0QWxsJywgZmFs
c2UsIG51bGwpOworICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdDb3B5JywgZmFsc2UsIG51bGwp
OworfQorCitmdW5jdGlvbiBjb3B5KGV2ZW50KQoreworICAgIGNsaXBib2FyZERhdGEgPSBldmVu
dC5jbGlwYm9hcmREYXRhOworICAgIHNob3VsZEJlKCdjbGlwYm9hcmREYXRhLml0ZW1zLmxlbmd0
aCcsICcwJyk7CisgICAgc2hvdWxkQmUoJ2NsaXBib2FyZERhdGEuc2V0RGF0YSgidGV4dC9wbGFp
biIsICJyb2NrIik7IGNsaXBib2FyZERhdGEuaXRlbXMubGVuZ3RoJywgJzEnKTsKKyAgICBzaG91
bGRCZUVxdWFsVG9TdHJpbmcoJ2luaXRpYWxJdGVtID0gY2xpcGJvYXJkRGF0YS5pdGVtc1swXTsg
aW5pdGlhbEl0ZW0ua2luZCcsICdzdHJpbmcnKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmco
J2luaXRpYWxJdGVtLnR5cGUnLCAndGV4dC9wbGFpbicpOworICAgIHNob3VsZEJlKCdpbml0aWFs
SXRlbS5nZXRBc0ZpbGUoKScsICdudWxsJyk7CisgICAgc2hvdWxkQmUoJ2luaXRpYWxJdGVtLmdl
dEFzU3RyaW5nKGNoZWNrQ29udGVudCgxLCAicm9jayIpKScsICd1bmRlZmluZWQnKTsKKworICAg
IHNob3VsZFRocm93RXJyb3JOYW1lKCdjbGlwYm9hcmREYXRhLml0ZW1zLmFkZCgicGFwZXIiLCAi
dGV4dC9wbGFpbiIpJywgJ05vdFN1cHBvcnRlZEVycm9yJyk7CisgICAgc2hvdWxkQmUoJ2NsaXBi
b2FyZERhdGEuaXRlbXNbMF0nLCAnaW5pdGlhbEl0ZW0nKTsKKyAgICBzaG91bGRCZSgnY2xpcGJv
YXJkRGF0YS5jbGVhckRhdGEoKTsgY2xpcGJvYXJkRGF0YS5pdGVtcy5sZW5ndGgnLCAnMCcpOwor
CisgICAgc2hvdWxkQmUoJ2NsaXBib2FyZERhdGEuaXRlbXMuYWRkKCJzY2lzc29ycyIsICJ0ZXh0
L3BsYWluIik7IGNsaXBib2FyZERhdGEuaXRlbXMubGVuZ3RoJywgJzEnKTsKKyAgICBzaG91bGRO
b3RCZSgnY2xpcGJvYXJkRGF0YS5pdGVtc1swXScsICdpbml0aWFsSXRlbScpOworICAgIHNob3Vs
ZEJlRXF1YWxUb1N0cmluZygnaW5pdGlhbEl0ZW0ua2luZCcsICdzdHJpbmcnKTsKKyAgICBzaG91
bGRCZUVxdWFsVG9TdHJpbmcoJ2luaXRpYWxJdGVtLnR5cGUnLCAnJyk7CisgICAgc2hvdWxkQmUo
J2luaXRpYWxJdGVtLmdldEFzRmlsZSgpJywgJ251bGwnKTsKKyAgICBzaG91bGRCZSgnaW5pdGlh
bEl0ZW0uZ2V0QXNTdHJpbmcoKCkgPT4gdGVzdEZhaWxlZCgiZ2V0QXNTdHJpbmcgc2hvdWxkIGV4
aXQgaW1tZWlkYXRlbHkgaWYgaXRlbSBpcyBkaXNhYmxlZCIpKScsICd1bmRlZmluZWQnKTsKKwor
ICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnY2xpcGJvYXJkRGF0YS5nZXREYXRhKCJ0ZXh0L3Bs
YWluIiknLCAnc2Npc3NvcnMnKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2NsaXBib2Fy
ZERhdGEuaXRlbXNbMF0ua2luZCcsICdzdHJpbmcnKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJp
bmcoJ2NsaXBib2FyZERhdGEuaXRlbXNbMF0udHlwZScsICd0ZXh0L3BsYWluJyk7CisgICAgc2hv
dWxkQmUoJ2NsaXBib2FyZERhdGEuaXRlbXNbMF0uZ2V0QXNGaWxlKCknLCAnbnVsbCcpOworICAg
IHNob3VsZEJlKCdjbGlwYm9hcmREYXRhLml0ZW1zWzBdLmdldEFzU3RyaW5nKGNoZWNrQ29udGVu
dCgyLCAic2Npc3NvcnMiKSknLCAndW5kZWZpbmVkJyk7CisKKyAgICBzaG91bGRCZSgnY2xpcGJv
YXJkRGF0YS5pdGVtcy5jbGVhcigpOyBjbGlwYm9hcmREYXRhLml0ZW1zLmxlbmd0aCcsICcwJyk7
CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdjbGlwYm9hcmREYXRhLmdldERhdGEoInRleHQv
cGxhaW4iKScsICcnKTsKKworICAgIHNob3VsZEJlKCdjbGlwYm9hcmREYXRhLml0ZW1zLmFkZCgi
V2ViS2l0IiwgInRleHQvcGxhaW4iKTsgY2xpcGJvYXJkRGF0YS5pdGVtcy5sZW5ndGgnLCAnMScp
OworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnY2xpcGJvYXJkRGF0YS5pdGVtc1swXS5raW5k
JywgJ3N0cmluZycpOworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnY2xpcGJvYXJkRGF0YS5p
dGVtc1swXS50eXBlJywgJ3RleHQvcGxhaW4nKTsKKyAgICBzaG91bGRCZSgnY2xpcGJvYXJkRGF0
YS5pdGVtc1swXS5nZXRBc0ZpbGUoKScsICdudWxsJyk7CisgICAgc2hvdWxkQmUoJ2NsaXBib2Fy
ZERhdGEuaXRlbXNbMF0uZ2V0QXNTdHJpbmcoY2hlY2tDb250ZW50KDMsICJXZWJLaXQiKSknLCAn
dW5kZWZpbmVkJyk7CisKKyAgICBzaG91bGRUaHJvd0Vycm9yTmFtZSgnY2xpcGJvYXJkRGF0YS5p
dGVtcy5yZW1vdmUoMSknLCAnSW5kZXhTaXplRXJyb3InKTsKKyAgICBzaG91bGRCZSgnY2xpcGJv
YXJkRGF0YS5pdGVtcy5sZW5ndGgnLCAnMScpOworICAgIHNob3VsZEJlKCdjbGlwYm9hcmREYXRh
Lml0ZW1zLnJlbW92ZSgwKTsgY2xpcGJvYXJkRGF0YS5pdGVtcy5sZW5ndGgnLCAnMCcpOworICAg
IHNob3VsZEJlRXF1YWxUb1N0cmluZygnY2xpcGJvYXJkRGF0YS5nZXREYXRhKCJ0ZXh0L3BsYWlu
IiknLCAnJyk7Cit9CisKK2xldCBjb3VudCA9IDA7CitmdW5jdGlvbiBjaGVja0NvbnRlbnQobnVt
YmVyLCBleHBlY3RlZENvbnRlbnQpCit7CisgICAgY291bnQrKzsKKyAgICByZXR1cm4gKGNvbnRl
bnQpID0+IHsKKyAgICAgICAgY29uc3QgdmFyaWFibGVOYW1lID0gJ2FjdHVhbENvbnRlbnQnICsg
bnVtYmVyOworICAgICAgICB3aW5kb3dbdmFyaWFibGVOYW1lXSA9IGNvbnRlbnQ7CisgICAgICAg
IHNob3VsZEJlRXF1YWxUb1N0cmluZyh2YXJpYWJsZU5hbWUsIGV4cGVjdGVkQ29udGVudCk7Cisg
ICAgICAgIGNvdW50LS07CisgICAgICAgIGlmICghY291bnQpIHsKKyAgICAgICAgICAgIGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCdjb250YWluZXInKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwor
ICAgICAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2lmICh3
aW5kb3cudGVzdFJ1bm5lcikKKyAgICB3aW5kb3cub25sb2FkID0gY29weVRleHQ7Citqc1Rlc3RJ
c0FzeW5jID0gdHJ1ZTsKK3N1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisKKzwvc2NyaXB0Pgor
PGRpdiBpZD0iY29udGFpbmVyIj4KKyAgICA8YnV0dG9uIG9uY2xpY2s9ImNvcHlUZXh0KCk7Ij5D
b3B5IHRleHQ8L2J1dHRvbj4KKyAgICA8ZGl2IGlkPSJzb3VyY2UiIG9uY29weT0iY29weShldmVu
dCkiIGNvbnRlbnRlZGl0YWJsZT0idHJ1ZSI+aGVsbG8sIHdvcmxkPC9kaXY+Cis8L2Rpdj4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwv
Ym9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>318293</attachid>
            <date>2017-08-16 15:29:29 -0700</date>
            <delta_ts>2017-08-16 21:01:23 -0700</delta_ts>
            <desc>Fixed builds</desc>
            <filename>fix175639b.patch</filename>
            <type>text/plain</type>
            <size>26330</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMDgwOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYyIEBACisyMDE3LTA4LTE2ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCB0aGUgc3VwcG9ydCBmb3Ig
bXV0YXRpbmcgY2xpcGJvYXJkIGRhdGEgdmlhIERhdGFUcmFuc2Zlckl0ZW1MaXN0CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU2MzkKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCB0aGUgc3VwcG9y
dCBmb3IgYWRkaW5nIHBsYWludGV4dCBkYXRhIHZpYSBkYXRhVHJhbnNmZXIuaXRlbXMuYWRkLCBj
bGVhcmluZyBkYXRhIHZpYSBjbGVhciwKKyAgICAgICAgYW5kIHJlbW92aW5nIGFuIGVudHJ5IHZp
YSByZW1vdmUuIFdoZW4gRGF0YVRyYW5zZmVySXRlbSBpcyByZW1vdmVkIGZyb20gRGF0YVRyYW5z
ZmVySXRlbUxpc3QsCisgICAgICAgIHdlIG11c3QgcHV0IGludG8gdGhlIGRpc2FibGVkIG1vZGUu
CisKKyAgICAgICAgVG8gc3VwcG9ydCB0aGUgcmVtb3ZhbCBvZiBEYXRhVHJhbnNmZXJJdGVtLCB0
aGlzIHBhdGNoIHJlcGxhY2VzIGEgcmVmZXJlbmNlIHRvIERhdGFUcmFuc2ZlciBieQorICAgICAg
ICBhIFdlYWtQdHIgdG8gRGF0YVRyYW5zZmVySXRlbUxpc3QsIGFuZCBzdG9wcyBmb3J3YXJkaW5n
IHJlZiBmcm9tIERhdGFUcmFuc2Zlckl0ZW0gdG8gRGF0YVRyYW5zZmVyLgorICAgICAgICBUaGlz
IG1lYW5zIHRoYXQgRGF0YVRyYW5zZmVyIGNhbiBub3cgYmUgR0MnZWQgYmVmb3JlIERhdGFUcmFu
c2Zlckl0ZW0gaXMgR0MnZWQuCisKKyAgICAgICAgQmVjYXVzZSB0aGUgaWRlbnRpZnkgYW5kIHRo
ZSBvcmRlciBvZiBEYXRhVHJhbnNmZXJJdGVtJ3MgbmVlZCB0byBiZSBwcmVzZXJ2ZWQsIHdlIGNh
bid0IHNpbXBseQorICAgICAgICByZS1wb3BsdWF0ZSBtX2l0ZW1MaXN0IGluIERhdGFUcmFuc2Zl
ckl0ZW1MaXN0LiBJbnN0ZWFkLCB3aGVuZXZlciB0aGUgY2xpcGJvYXJkIGNvbnRlbnQgaXMgbXV0
YXRlZCwKKyAgICAgICAgd2UgbWFrZSB0aGUgcGFyYWxsZWwgbW9kaWZpY2F0aW9ucyB0byBtX2l0
ZW1MaXN0LiBUaGlzIGluY2x1ZGVzIGNoYW5nZXMgbWFkZSB2aWEgRGF0YVRyYW5zZmVyCisgICAg
ICAgIG1ldGhvZHMgc3VjaCBhcyBzZXREYXRhIGFuZCBjbGVhckRhdGEuCisKKyAgICAgICAgVGVz
dDogZWRpdGluZy9wYXN0ZWJvYXJkL2RhdGF0cmFuc2Zlci1pdGVtcy1jb3B5LXBsYWludGV4dC5o
dG1sCisKKyAgICAgICAgKiBkb20vRGF0YVRyYW5zZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRhdGFUcmFuc2Zlcjo6Y2xlYXJEYXRhKTogSW52b2tlIGRpZENsZWFyU3RyaW5nRGF0YSB3aGVu
IG1faXRlbUxpc3QgZXhpc3RzLgorICAgICAgICAoV2ViQ29yZTo6RGF0YVRyYW5zZmVyOjpzZXRE
YXRhKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXI6OmNyZWF0ZUZvcklu
cHV0RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YVRyYW5zZmVyOjpjcmVhdGVGb3JEcmFn
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFUcmFuc2Zlcjo6Y3JlYXRlRm9yRHJvcCk6CisgICAg
ICAgICogZG9tL0RhdGFUcmFuc2Zlckl0ZW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YVRy
YW5zZmVySXRlbTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFUcmFuc2Zlckl0ZW06
OkRhdGFUcmFuc2Zlckl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6RGF0YVRyYW5zZmVySXRlbTo6
Y2xlYXJMaXN0QW5kUHV0SW50b0Rpc2FibGVkTW9kZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGF0YVRyYW5zZmVySXRlbTo6dHlwZSBjb25zdCk6IE1vdmVkIGZyb20gdGhlIGhlYWRlci4K
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFUcmFuc2Zlckl0ZW06OmdldEFzU3RyaW5nIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFUcmFuc2Zlckl0ZW06OmdldEFzRmlsZSBjb25zdCk6Cisg
ICAgICAgICogZG9tL0RhdGFUcmFuc2Zlckl0ZW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFU
cmFuc2Zlckl0ZW06OnJlZik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNm
ZXJJdGVtOjpkZXJlZik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXJJ
dGVtOjppc0ZpbGUgY29uc3QpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFUcmFuc2Zl
ckl0ZW06OnR5cGUgY29uc3QpOiBNb3ZlIHRvIHRoZSBjcHAgZmlsZS4KKyAgICAgICAgKiBkb20v
RGF0YVRyYW5zZmVySXRlbUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNTdXBwb3J0ZWRU
eXBlKTogTW92ZWQuCisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXJJdGVtTGlzdDo6RGF0
YVRyYW5zZmVySXRlbUxpc3QpOiBNb3ZlZCBmcm9tIHRoZSBoZWFkZXIuCisgICAgICAgIChXZWJD
b3JlOjpEYXRhVHJhbnNmZXJJdGVtTGlzdDo6fkRhdGFUcmFuc2Zlckl0ZW1MaXN0KTogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXJJdGVtTGlzdDo6aXRlbSk6CisgICAgICAg
IChXZWJDb3JlOjpEYXRhVHJhbnNmZXJJdGVtTGlzdDo6YWRkKTogSW1wbGVtZW50ZWQgdGhlIHZh
cmlhbnQgdG8gYWRkIHN0cmluZyBkYXRhLgorICAgICAgICAoV2ViQ29yZTo6RGF0YVRyYW5zZmVy
SXRlbUxpc3Q6OnJlbW92ZSk6IEltcGxlbWVudGVkLiBGb3Igbm93LCB3ZSBkb24ndCBoYXZlIHRv
IGRlYWwgd2l0aCByZW1vdmluZworICAgICAgICBhIGZpbGUgc2luY2UgYSB3cml0YWJsZSBkYXRh
VHJhbnNmZXIgbmV2ZXIgY29udGFpbnMgYSBGaWxlIG9iamVjdC4KKyAgICAgICAgKFdlYkNvcmU6
OkRhdGFUcmFuc2Zlckl0ZW1MaXN0OjpjbGVhcik6IEltcGxlbWVudGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGF0YVRyYW5zZmVySXRlbUxpc3Q6OmVuc3VyZUl0ZW1zIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OnJlbW92ZVN0cmluZ0l0ZW1PZkxvd2VyY2FzZWRUeXBlKTogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXJJdGVtTGlzdDo6ZGlkQ2xlYXJTdHJpbmdEYXRhKTog
Q2FsbGVkIHdoZW4gZGF0YVRyYW5zZmVyLmNsZWFyIGlzIGNhbGxlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRhdGFUcmFuc2Zlckl0ZW1MaXN0OjpkaWRTZXRTdHJpbmdEYXRhKTogRGl0dG8gZm9yIAor
ICAgICAgICAqIGRvbS9EYXRhVHJhbnNmZXJJdGVtTGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6
RGF0YVRyYW5zZmVySXRlbUxpc3QpOiBBZGRlZCBhIFdlYWtQdHJGYWN0b3J5LiBBbHNvIHVzZSBh
IHZlY3RvciBvZiBSZWY8RGF0YVRyYW5zZmVySXRlbT4KKyAgICAgICAgaW5zdGVhZCBvZiB1bmlx
dWVfcHRyPERhdGFUcmFuc2Zlckl0ZW0+IHNpbmNlIERhdGFUcmFuc2Zlckl0ZW0gY2FuIG91dGxp
dmUgRGF0YVRyYW5zZmVySXRlbUxpc3QuCisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXJJ
dGVtTGlzdDo6ZGF0YVRyYW5zZmVyKTogQWRkZWQuCisgICAgICAgICogZG9tL0RhdGFUcmFuc2Zl
ckl0ZW1MaXN0LmlkbDoKKwogMjAxNy0wOC0xNiAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9u
QGFwcGxlLmNvbT4KIAogICAgICAgICAyLTMlIG9mIG1haW4gdGhyZWFkIHRpbWUgdW5kZXIgVVRU
eXBlQ3JlYXRlUHJlZmVycmVkSWRlbnRpZmllckZvclRhZyBvbiB3dW5kZXJncm91bmQgbWFwCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRGF0YVRyYW5zZmVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vRGF0YVRyYW5zZmVyLmNwcAkocmV2aXNpb24gMjIwNzgxKQorKysg
U291cmNlL1dlYkNvcmUvZG9tL0RhdGFUcmFuc2Zlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
OCw2ICsxMTgsOCBAQAogICAgICAgICBtX3Bhc3RlYm9hcmQtPmNsZWFyKCk7CiAgICAgZWxzZQog
ICAgICAgICBtX3Bhc3RlYm9hcmQtPmNsZWFyKHR5cGUpOworICAgIGlmIChtX2l0ZW1MaXN0KQor
ICAgICAgICBtX2l0ZW1MaXN0LT5kaWRDbGVhclN0cmluZ0RhdGEodHlwZSk7CiB9CiAKIFN0cmlu
ZyBEYXRhVHJhbnNmZXI6OmdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlKSBjb25zdApAQCAtMTQ0
LDYgKzE0Niw4IEBACiAjZW5kaWYKIAogICAgIG1fcGFzdGVib2FyZC0+d3JpdGVTdHJpbmcodHlw
ZSwgZGF0YSk7CisgICAgaWYgKG1faXRlbUxpc3QpCisgICAgICAgIG1faXRlbUxpc3QtPmRpZFNl
dFN0cmluZ0RhdGEodHlwZSk7CiB9CiAKIERhdGFUcmFuc2Zlckl0ZW1MaXN0JiBEYXRhVHJhbnNm
ZXI6Oml0ZW1zKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9EYXRhVHJhbnNmZXJJdGVtLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRGF0YVRyYW5zZmVySXRlbS5jcHAJ
KHJldmlzaW9uIDIyMDc4MikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9EYXRhVHJhbnNmZXJJdGVt
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkRhdGFUcmFuc2Zlckl0ZW0uaCIKIAorI2luY2x1ZGUgIkRhdGFUcmFuc2Zl
ckl0ZW1MaXN0LmgiCiAjaW5jbHVkZSAiRmlsZS5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQuaCIKICNpbmNsdWRlICJTdHJpbmdDYWxsYmFjay5oIgpAQCAtMzgsMTQgKzM5LDI0
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRGF0YVRyYW5zZmVySXRlbTo6RGF0YVRyYW5z
ZmVySXRlbShEYXRhVHJhbnNmZXImIGRhdGFUcmFuc2ZlciwgY29uc3QgU3RyaW5nJiB0eXBlKQot
ICAgIDogbV9kYXRhVHJhbnNmZXIoZGF0YVRyYW5zZmVyKQorUmVmPERhdGFUcmFuc2Zlckl0ZW0+
IERhdGFUcmFuc2Zlckl0ZW06OmNyZWF0ZShXZWFrUHRyPERhdGFUcmFuc2Zlckl0ZW1MaXN0PiYm
IGxpc3QsIGNvbnN0IFN0cmluZyYgdHlwZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBE
YXRhVHJhbnNmZXJJdGVtKFdURk1vdmUobGlzdCksIHR5cGUpKTsKK30KKworUmVmPERhdGFUcmFu
c2Zlckl0ZW0+IERhdGFUcmFuc2Zlckl0ZW06OmNyZWF0ZShXZWFrUHRyPERhdGFUcmFuc2Zlckl0
ZW1MaXN0PiYmIGxpc3QsIGNvbnN0IFN0cmluZyYgdHlwZSwgUmVmPEZpbGU+JiYgZmlsZSkKK3sK
KyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEYXRhVHJhbnNmZXJJdGVtKFdURk1vdmUobGlzdCks
IHR5cGUsIFdURk1vdmUoZmlsZSkpKTsKK30KKworRGF0YVRyYW5zZmVySXRlbTo6RGF0YVRyYW5z
ZmVySXRlbShXZWFrUHRyPERhdGFUcmFuc2Zlckl0ZW1MaXN0PiYmIGxpc3QsIGNvbnN0IFN0cmlu
ZyYgdHlwZSkKKyAgICA6IG1fbGlzdChXVEZNb3ZlKGxpc3QpKQogICAgICwgbV90eXBlKHR5cGUp
CiB7CiB9CiAKLURhdGFUcmFuc2Zlckl0ZW06OkRhdGFUcmFuc2Zlckl0ZW0oRGF0YVRyYW5zZmVy
JiBkYXRhVHJhbnNmZXIsIGNvbnN0IFN0cmluZyYgdHlwZSwgUmVmPEZpbGU+JiYgZmlsZSkKLSAg
ICA6IG1fZGF0YVRyYW5zZmVyKGRhdGFUcmFuc2ZlcikKK0RhdGFUcmFuc2Zlckl0ZW06OkRhdGFU
cmFuc2Zlckl0ZW0oV2Vha1B0cjxEYXRhVHJhbnNmZXJJdGVtTGlzdD4mJiBsaXN0LCBjb25zdCBT
dHJpbmcmIHR5cGUsIFJlZjxGaWxlPiYmIGZpbGUpCisgICAgOiBtX2xpc3QoV1RGTW92ZShsaXN0
KSkKICAgICAsIG1fdHlwZSh0eXBlKQogICAgICwgbV9maWxlKFdURk1vdmUoZmlsZSkpCiB7CkBA
IC01NSwyMyArNjYsMzggQEAKIHsKIH0KIAordm9pZCBEYXRhVHJhbnNmZXJJdGVtOjpjbGVhckxp
c3RBbmRQdXRJbnRvRGlzYWJsZWRNb2RlKCkKK3sKKyAgICBtX2xpc3QuY2xlYXIoKTsKK30KKwog
U3RyaW5nIERhdGFUcmFuc2Zlckl0ZW06OmtpbmQoKSBjb25zdAogewogICAgIHJldHVybiBtX2Zp
bGUgPyBBU0NJSUxpdGVyYWwoImZpbGUiKSA6IEFTQ0lJTGl0ZXJhbCgic3RyaW5nIik7CiB9CiAK
K1N0cmluZyBEYXRhVHJhbnNmZXJJdGVtOjp0eXBlKCkgY29uc3QKK3sKKyAgICBib29sIGlzSW5E
aXNhYmxlZE1vZGUgPSAhbV9saXN0OworICAgIHJldHVybiBpc0luRGlzYWJsZWRNb2RlID8gU3Ry
aW5nKCkgOiBtX3R5cGU7Cit9CisKIHZvaWQgRGF0YVRyYW5zZmVySXRlbTo6Z2V0QXNTdHJpbmco
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgUmVmUHRyPFN0cmluZ0NhbGxiYWNrPiYm
IGNhbGxiYWNrKSBjb25zdAogewotICAgIGlmICghY2FsbGJhY2sgfHwgIW1fZGF0YVRyYW5zZmVy
LmNhblJlYWREYXRhKCkgfHwgbV9maWxlKQorICAgIGlmICghY2FsbGJhY2sgfHwgIW1fbGlzdCB8
fCBtX2ZpbGUpCiAgICAgICAgIHJldHVybjsKIAorICAgIGF1dG8mIGRhdGFUcmFuc2ZlciA9IG1f
bGlzdC0+ZGF0YVRyYW5zZmVyKCk7CisgICAgaWYgKCFkYXRhVHJhbnNmZXIuY2FuUmVhZERhdGEo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgLy8gRklYTUU6IE1ha2UgdGhpcyBhc3luYy4KLSAg
ICBjYWxsYmFjay0+c2NoZWR1bGVDYWxsYmFjayhjb250ZXh0LCBtX2RhdGFUcmFuc2Zlci5nZXRE
YXRhKG1fdHlwZSkpOworICAgIGNhbGxiYWNrLT5zY2hlZHVsZUNhbGxiYWNrKGNvbnRleHQsIGRh
dGFUcmFuc2Zlci5nZXREYXRhKG1fdHlwZSkpOwogfQogCiBSZWZQdHI8RmlsZT4gRGF0YVRyYW5z
ZmVySXRlbTo6Z2V0QXNGaWxlKCkgY29uc3QKIHsKLSAgICBpZiAoIW1fZGF0YVRyYW5zZmVyLmNh
blJlYWREYXRhKCkpCisgICAgaWYgKCFtX2xpc3QgfHwgIW1fbGlzdC0+ZGF0YVRyYW5zZmVyKCku
Y2FuUmVhZERhdGEoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIG1fZmls
ZS5jb3B5UmVmKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRGF0YVRyYW5zZmVySXRl
bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9EYXRhVHJhbnNmZXJJdGVtLmgJ
KHJldmlzaW9uIDIyMDc4MikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9EYXRhVHJhbnNmZXJJdGVt
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDMyICszNSwzNiBAQAogI2luY2x1ZGUgIlNjcmlwdFdy
YXBwYWJsZS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0
b21pY1N0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIERhdGFUcmFuc2Zl
ckxpc3RJdGVtOwogY2xhc3MgRmlsZTsKIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiBj
bGFzcyBTdHJpbmdDYWxsYmFjazsKIAotY2xhc3MgRGF0YVRyYW5zZmVySXRlbSA6IHB1YmxpYyBT
Y3JpcHRXcmFwcGFibGUgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERhdGFUcmFuc2Zlckl0
ZW0pOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK2NsYXNzIERhdGFUcmFuc2Zlckl0ZW0gOiBw
dWJsaWMgUmVmQ291bnRlZDxEYXRhVHJhbnNmZXJJdGVtPiB7CiBwdWJsaWM6Ci0gICAgRGF0YVRy
YW5zZmVySXRlbShEYXRhVHJhbnNmZXImLCBjb25zdCBTdHJpbmcmKTsKLSAgICBEYXRhVHJhbnNm
ZXJJdGVtKERhdGFUcmFuc2ZlciYsIGNvbnN0IFN0cmluZyYsIFJlZjxGaWxlPiYmKTsKKyAgICBz
dGF0aWMgUmVmPERhdGFUcmFuc2Zlckl0ZW0+IGNyZWF0ZShXZWFrUHRyPERhdGFUcmFuc2Zlckl0
ZW1MaXN0PiYmLCBjb25zdCBTdHJpbmcmKTsKKyAgICBzdGF0aWMgUmVmPERhdGFUcmFuc2Zlckl0
ZW0+IGNyZWF0ZShXZWFrUHRyPERhdGFUcmFuc2Zlckl0ZW1MaXN0PiYmLCBjb25zdCBTdHJpbmcm
LCBSZWY8RmlsZT4mJik7CisKICAgICB+RGF0YVRyYW5zZmVySXRlbSgpOwogCi0gICAgLy8gRGF0
YVRyYW5zZmVyIG93bnMgRGF0YVRyYW5zZmVySXRlbSwgYW5kIERhdGFUcmFuc2ZlciBpcyBrZXB0
IGFsaXZlIGFzIGxvbmcgYXMgRGF0YVRyYW5zZmVySXRlbSBpcyBhbGl2ZS4KLSAgICB2b2lkIHJl
ZigpIHsgbV9kYXRhVHJhbnNmZXIucmVmKCk7IH0KLSAgICB2b2lkIGRlcmVmKCkgeyBtX2RhdGFU
cmFuc2Zlci5kZXJlZigpOyB9CisgICAgdm9pZCBjbGVhckxpc3RBbmRQdXRJbnRvRGlzYWJsZWRN
b2RlKCk7CiAKKyAgICBib29sIGlzRmlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsZTsgfQogICAg
IFN0cmluZyBraW5kKCkgY29uc3Q7Ci0gICAgY29uc3QgU3RyaW5nJiB0eXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV90eXBlOyB9CisgICAgU3RyaW5nIHR5cGUoKSBjb25zdDsKICAgICB2b2lkIGdldEFz
U3RyaW5nKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBSZWZQdHI8U3RyaW5nQ2FsbGJhY2s+JiYp
IGNvbnN0OwogICAgIFJlZlB0cjxGaWxlPiBnZXRBc0ZpbGUoKSBjb25zdDsKIAogcHJpdmF0ZToK
LSAgICBEYXRhVHJhbnNmZXImIG1fZGF0YVRyYW5zZmVyOworICAgIERhdGFUcmFuc2Zlckl0ZW0o
V2Vha1B0cjxEYXRhVHJhbnNmZXJJdGVtTGlzdD4mJiwgY29uc3QgU3RyaW5nJik7CisgICAgRGF0
YVRyYW5zZmVySXRlbShXZWFrUHRyPERhdGFUcmFuc2Zlckl0ZW1MaXN0PiYmLCBjb25zdCBTdHJp
bmcmLCBSZWY8RmlsZT4mJik7CisKKyAgICBXZWFrUHRyPERhdGFUcmFuc2Zlckl0ZW1MaXN0PiBt
X2xpc3Q7CiAgICAgY29uc3QgU3RyaW5nIG1fdHlwZTsKICAgICBSZWZQdHI8RmlsZT4gbV9maWxl
OwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9EYXRhVHJhbnNmZXJJdGVtTGlzdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RhdGFUcmFuc2Zlckl0ZW1MaXN0LmNw
cAkocmV2aXNpb24gMjIwNzgyKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RhdGFUcmFuc2Zlckl0
ZW1MaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsOSArMjgsMjYgQEAKIAogI2luY2x1ZGUg
IkRhdGFUcmFuc2Zlckl0ZW0uaCIKICNpbmNsdWRlICJGaWxlTGlzdC5oIgorI2luY2x1ZGUgIlBh
c3RlYm9hcmQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisvLyBGSVhNRTogRGF0YVRyYW5z
ZmVyIHNob3VsZCBmaWx0ZXIgdHlwZXMgaXRzZWxmLgorc3RhdGljIGJvb2wgaXNTdXBwb3J0ZWRU
eXBlKGNvbnN0IFN0cmluZyYgdHlwZSkKK3sKKyAgICByZXR1cm4gdHlwZSA9PSAidGV4dC9wbGFp
biI7Cit9CisKK0RhdGFUcmFuc2Zlckl0ZW1MaXN0OjpEYXRhVHJhbnNmZXJJdGVtTGlzdChEYXRh
VHJhbnNmZXImIGRhdGFUcmFuc2ZlcikKKyAgICA6IG1fd2Vha1B0ckZhY3RvcnkodGhpcykKKyAg
ICAsIG1fZGF0YVRyYW5zZmVyKGRhdGFUcmFuc2ZlcikKK3sKK30KKworRGF0YVRyYW5zZmVySXRl
bUxpc3Q6On5EYXRhVHJhbnNmZXJJdGVtTGlzdCgpCit7Cit9CisKIHVuc2lnbmVkIERhdGFUcmFu
c2Zlckl0ZW1MaXN0OjpsZW5ndGgoKSBjb25zdAogewogICAgIHJldHVybiBlbnN1cmVJdGVtcygp
LnNpemUoKTsKQEAgLTQxLDU2ICs1OCwxMzEgQEAKICAgICBhdXRvJiBpdGVtcyA9IGVuc3VyZUl0
ZW1zKCk7CiAgICAgaWYgKGl0ZW1zLnNpemUoKSA8PSBpbmRleCkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgcmV0dXJuIGl0ZW1zW2luZGV4XS5nZXQoKTsKKyAgICByZXR1cm4gaXRlbXNb
aW5kZXhdLmNvcHlSZWYoKTsKIH0KIAotRXhjZXB0aW9uT3I8dm9pZD4gRGF0YVRyYW5zZmVySXRl
bUxpc3Q6OmFkZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKQorRXhjZXB0aW9uT3I8UmVm
UHRyPERhdGFUcmFuc2Zlckl0ZW0+PiBEYXRhVHJhbnNmZXJJdGVtTGlzdDo6YWRkKGNvbnN0IFN0
cmluZyYgZGF0YSwgY29uc3QgU3RyaW5nJiB0eXBlKQogewotICAgIHJldHVybiB7IH07CisgICAg
aWYgKCFtX2RhdGFUcmFuc2Zlci5jYW5Xcml0ZURhdGEoKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBmb3IgKGF1dG8mIGl0ZW0gOiBlbnN1cmVJdGVtcygpKSB7CisgICAgICAgIGlm
ICghaXRlbS0+aXNGaWxlKCkgJiYgZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShpdGVtLT50eXBlKCks
IHR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVycm9y
IH07CisgICAgfQorCisgICAgU3RyaW5nIGxvd2VyY2FzZWRUeXBlID0gdHlwZS5jb252ZXJ0VG9B
U0NJSUxvd2VyY2FzZSgpOworCisgICAgLy8gRklYTUU6IEFsbG93IHdyaXRpbmcgJiByZWFkaW5n
IG9mIGFueSB0eXBlcyB0byBjbGlwYm9hcmQgLyBkcmFnIGRhdGEgc3RvcmUuCisgICAgaWYgKCFp
c1N1cHBvcnRlZFR5cGUobG93ZXJjYXNlZFR5cGUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIG1fZGF0YVRyYW5zZmVyLnBhc3RlYm9hcmQoKS53cml0ZVN0cmluZyhsb3dlcmNhc2Vk
VHlwZSwgZGF0YSk7CisgICAgQVNTRVJUKG1faXRlbXMpOworICAgIG1faXRlbXMtPmFwcGVuZChE
YXRhVHJhbnNmZXJJdGVtOjpjcmVhdGUobV93ZWFrUHRyRmFjdG9yeS5jcmVhdGVXZWFrUHRyKCks
IHR5cGUpKTsKKyAgICByZXR1cm4gUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW0+IHsgbV9pdGVtcy0+
bGFzdCgpLmNvcHlSZWYoKSB9OwogfQogCi12b2lkIERhdGFUcmFuc2Zlckl0ZW1MaXN0OjphZGQo
UmVmUHRyPEZpbGU+JiYpCitSZWZQdHI8RGF0YVRyYW5zZmVySXRlbT4gRGF0YVRyYW5zZmVySXRl
bUxpc3Q6OmFkZChSZWY8RmlsZT4mJikKIHsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotdm9p
ZCBEYXRhVHJhbnNmZXJJdGVtTGlzdDo6cmVtb3ZlKHVuc2lnbmVkKQorRXhjZXB0aW9uT3I8dm9p
ZD4gRGF0YVRyYW5zZmVySXRlbUxpc3Q6OnJlbW92ZSh1bnNpZ25lZCBpbmRleCkKIHsKKyAgICBp
ZiAoIW1fZGF0YVRyYW5zZmVyLmNhbldyaXRlRGF0YSgpKQorICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKKworICAgIGF1dG8mIGl0ZW1zID0gZW5zdXJlSXRl
bXMoKTsKKyAgICBpZiAoaXRlbXMuc2l6ZSgpIDw9IGluZGV4KQorICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSW5kZXhTaXplRXJyb3IgfTsgLy8gTWF0Y2hlcyBHZWNrby4gU2VlIGh0dHBzOi8v
Z2l0aHViLmNvbS93aGF0d2cvaHRtbC9pc3N1ZXMvMjkyNQorCisgICAgLy8gRklYTUU6IEhhbmRs
ZSB0aGUgcmVtb3ZhbCBvZiBmaWxlcyBvbmNlIHdlIGFkZGVkIHRoZSBzdXBwb3J0IGZvciB3cml0
aW5nIGEgRmlsZS4KKyAgICBBU1NFUlQoIWl0ZW1zW2luZGV4XS0+aXNGaWxlKCkpOworCisgICAg
YXV0byYgcmVtb3ZlZEl0ZW0gPSBpdGVtc1tpbmRleF0uZ2V0KCk7CisgICAgbV9kYXRhVHJhbnNm
ZXIucGFzdGVib2FyZCgpLmNsZWFyKHJlbW92ZWRJdGVtLnR5cGUoKSk7CisgICAgcmVtb3ZlZEl0
ZW0uY2xlYXJMaXN0QW5kUHV0SW50b0Rpc2FibGVkTW9kZSgpOworICAgIGl0ZW1zLnJlbW92ZShp
bmRleCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCiB2b2lkIERhdGFUcmFuc2Zlckl0ZW1MaXN0
OjpjbGVhcigpCiB7CisgICAgbV9kYXRhVHJhbnNmZXIucGFzdGVib2FyZCgpLmNsZWFyKCk7Cisg
ICAgaWYgKG1faXRlbXMpIHsKKyAgICAgICAgZm9yIChhdXRvJiBpdGVtIDogKm1faXRlbXMpCisg
ICAgICAgICAgICBpdGVtLT5jbGVhckxpc3RBbmRQdXRJbnRvRGlzYWJsZWRNb2RlKCk7CisgICAg
ICAgIG1faXRlbXMtPmNsZWFyKCk7CisgICAgfQogfQogCi0vLyBGSVhNRTogRGF0YVRyYW5zZmVy
IHNob3VsZCBmaWx0ZXIgdHlwZXMgaXRzZWxmLgotc3RhdGljIGJvb2wgaXNTdXBwb3J0ZWRUeXBl
KGNvbnN0IFN0cmluZyYgdHlwZSkKK1ZlY3RvcjxSZWY8RGF0YVRyYW5zZmVySXRlbT4+JiBEYXRh
VHJhbnNmZXJJdGVtTGlzdDo6ZW5zdXJlSXRlbXMoKSBjb25zdAogewotICAgIHJldHVybiBlcXVh
bElnbm9yaW5nQVNDSUlDYXNlKHR5cGUsICJ0ZXh0L3BsYWluIik7Ci19Ci0KLVZlY3RvcjxzdGQ6
OnVuaXF1ZV9wdHI8RGF0YVRyYW5zZmVySXRlbT4+JiBEYXRhVHJhbnNmZXJJdGVtTGlzdDo6ZW5z
dXJlSXRlbXMoKSBjb25zdAotewogICAgIGlmIChtX2l0ZW1zKQogICAgICAgICByZXR1cm4gKm1f
aXRlbXM7CiAKLSAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPERhdGFUcmFuc2Zlckl0ZW0+PiBp
dGVtczsKKyAgICBWZWN0b3I8UmVmPERhdGFUcmFuc2Zlckl0ZW0+PiBpdGVtczsKICAgICBmb3Ig
KFN0cmluZyYgdHlwZSA6IG1fZGF0YVRyYW5zZmVyLnR5cGVzKCkpIHsKLSAgICAgICAgaWYgKGlz
U3VwcG9ydGVkVHlwZSh0eXBlKSkKLSAgICAgICAgICAgIGl0ZW1zLmFwcGVuZChzdGQ6Om1ha2Vf
dW5pcXVlPERhdGFUcmFuc2Zlckl0ZW0+KG1fZGF0YVRyYW5zZmVyLCB0eXBlKSk7CisgICAgICAg
IFN0cmluZyBsb3dlcmNhc2VkVHlwZSA9IHR5cGUuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKTsK
KyAgICAgICAgaWYgKGlzU3VwcG9ydGVkVHlwZShsb3dlcmNhc2VkVHlwZSkpCisgICAgICAgICAg
ICBpdGVtcy5hcHBlbmQoRGF0YVRyYW5zZmVySXRlbTo6Y3JlYXRlKG1fd2Vha1B0ckZhY3Rvcnku
Y3JlYXRlV2Vha1B0cigpLCBsb3dlcmNhc2VkVHlwZSkpOwogICAgIH0KIAogICAgIEZpbGVMaXN0
JiBmaWxlcyA9IG1fZGF0YVRyYW5zZmVyLmZpbGVzKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MCwgbGVuZ3RoID0gZmlsZXMubGVuZ3RoKCk7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBG
aWxlJiBmaWxlID0gKmZpbGVzLml0ZW0oaSk7Ci0gICAgICAgIFN0cmluZyB0eXBlID0gRmlsZTo6
Y29udGVudFR5cGVGb3JGaWxlKGZpbGUucGF0aCgpKTsKKyAgICAgICAgU3RyaW5nIHR5cGUgPSBG
aWxlOjpjb250ZW50VHlwZUZvckZpbGUoZmlsZS5wYXRoKCkpLmNvbnZlcnRUb0FTQ0lJTG93ZXJj
YXNlKCk7CiAgICAgICAgIGlmIChpc1N1cHBvcnRlZFR5cGUodHlwZSkpCi0gICAgICAgICAgICBp
dGVtcy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxEYXRhVHJhbnNmZXJJdGVtPihtX2RhdGFUcmFu
c2ZlciwgdHlwZSwgZmlsZSkpOworICAgICAgICAgICAgaXRlbXMuYXBwZW5kKERhdGFUcmFuc2Zl
ckl0ZW06OmNyZWF0ZShtX3dlYWtQdHJGYWN0b3J5LmNyZWF0ZVdlYWtQdHIoKSwgdHlwZSwgZmls
ZSkpOwogICAgIH0KIAotCiAgICAgbV9pdGVtcyA9IFdURk1vdmUoaXRlbXMpOwogCiAgICAgcmV0
dXJuICptX2l0ZW1zOwogfQogCitzdGF0aWMgdm9pZCByZW1vdmVTdHJpbmdJdGVtT2ZMb3dlcmNh
c2VkVHlwZShWZWN0b3I8UmVmPERhdGFUcmFuc2Zlckl0ZW0+PiYgaXRlbXMsIGNvbnN0IFN0cmlu
ZyYgbG93ZXJjYXNlZFR5cGUpCit7CisgICAgYXV0byBpbmRleCA9IGl0ZW1zLmZpbmRNYXRjaGlu
ZyhbbG93ZXJjYXNlZFR5cGVdKGF1dG8mIGl0ZW0pIHsKKyAgICAgICAgcmV0dXJuICFpdGVtLT5p
c0ZpbGUoKSAmJiBpdGVtLT50eXBlKCkgPT0gbG93ZXJjYXNlZFR5cGU7CisgICAgfSk7CisgICAg
aWYgKGluZGV4ID09IG5vdEZvdW5kKQorICAgICAgICByZXR1cm47CisgICAgaXRlbXNbaW5kZXhd
LT5jbGVhckxpc3RBbmRQdXRJbnRvRGlzYWJsZWRNb2RlKCk7CisgICAgaXRlbXMucmVtb3ZlKGlu
ZGV4KTsKIH0KIAordm9pZCBEYXRhVHJhbnNmZXJJdGVtTGlzdDo6ZGlkQ2xlYXJTdHJpbmdEYXRh
KGNvbnN0IFN0cmluZyYgdHlwZSkKK3sKKyAgICBpZiAoIW1faXRlbXMpCisgICAgICAgIHJldHVy
bjsKKworICAgIGF1dG8mIGl0ZW1zID0gKm1faXRlbXM7CisgICAgaWYgKCF0eXBlLmlzTnVsbCgp
KQorICAgICAgICByZXR1cm4gcmVtb3ZlU3RyaW5nSXRlbU9mTG93ZXJjYXNlZFR5cGUoaXRlbXMs
IHR5cGUuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSk7CisKKyAgICBmb3IgKGF1dG8mIGl0ZW0g
OiBpdGVtcykgeworICAgICAgICBpZiAoIWl0ZW0tPmlzRmlsZSgpKQorICAgICAgICAgICAgaXRl
bS0+Y2xlYXJMaXN0QW5kUHV0SW50b0Rpc2FibGVkTW9kZSgpOworICAgIH0KKyAgICBpdGVtcy5y
ZW1vdmVBbGxNYXRjaGluZyhbXShhdXRvJiBpdGVtKSB7CisgICAgICAgIHJldHVybiAhaXRlbS0+
aXNGaWxlKCk7CisgICAgfSk7Cit9CisKKy8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcv
bXVsdGlwYWdlL2RuZC5odG1sI2RvbS1kYXRhdHJhbnNmZXItc2V0ZGF0YQordm9pZCBEYXRhVHJh
bnNmZXJJdGVtTGlzdDo6ZGlkU2V0U3RyaW5nRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpCit7Cisg
ICAgaWYgKCFtX2l0ZW1zKQorICAgICAgICByZXR1cm47CisKKyAgICBTdHJpbmcgbG93ZXJjYXNl
ZFR5cGUgPSB0eXBlLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCk7CisgICAgcmVtb3ZlU3RyaW5n
SXRlbU9mTG93ZXJjYXNlZFR5cGUoKm1faXRlbXMsIHR5cGUuY29udmVydFRvQVNDSUlMb3dlcmNh
c2UoKSk7CisKKyAgICBtX2l0ZW1zLT5hcHBlbmQoRGF0YVRyYW5zZmVySXRlbTo6Y3JlYXRlKG1f
d2Vha1B0ckZhY3RvcnkuY3JlYXRlV2Vha1B0cigpLCBsb3dlcmNhc2VkVHlwZSkpOworfQorCit9
CisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9EYXRhVHJhbnNmZXJJdGVtTGlzdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9EYXRhVHJhbnNmZXJJdGVtTGlzdC5oCShyZXZp
c2lvbiAyMjA3ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRGF0YVRyYW5zZmVySXRlbUxpc3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMzIsNDAgKzMyLDQ2IEBACiAjcHJhZ21hIG9uY2UKIAogI2lu
Y2x1ZGUgIkRhdGFUcmFuc2Zlci5oIgotI2luY2x1ZGUgIkRhdGFUcmFuc2Zlckl0ZW0uaCIKICNp
bmNsdWRlICJFeGNlcHRpb25Pci5oIgogI2luY2x1ZGUgIlNjcmlwdFdyYXBwYWJsZS5oIgogI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1JlZi5oPgogI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCitjbGFzcyBEYXRhVHJhbnNmZXJJdGVtOwogY2xhc3MgRmlsZTsKIAogY2xhc3Mg
RGF0YVRyYW5zZmVySXRlbUxpc3QgOiBwdWJsaWMgU2NyaXB0V3JhcHBhYmxlIHsKICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShEYXRhVHJhbnNmZXJJdGVtTGlzdCk7IFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogcHVibGljOgotICAgIERhdGFUcmFuc2Zlckl0ZW1MaXN0KERhdGFUcmFuc2ZlciYg
ZGF0YVRyYW5zZmVyKQotICAgICAgICA6IG1fZGF0YVRyYW5zZmVyKGRhdGFUcmFuc2ZlcikKLSAg
ICB7Ci0gICAgfQorICAgIERhdGFUcmFuc2Zlckl0ZW1MaXN0KERhdGFUcmFuc2ZlciYpOworICAg
IH5EYXRhVHJhbnNmZXJJdGVtTGlzdCgpOwogCiAgICAgLy8gRGF0YVRyYW5zZmVyIG93bnMgRGF0
YVRyYW5zZmVySXRlbUxpc3QsIGFuZCBEYXRhVHJhbnNmZXIgaXMga2VwdCBhbGl2ZSBhcyBsb25n
IGFzIERhdGFUcmFuc2Zlckl0ZW1MaXN0IGlzIGFsaXZlLgogICAgIHZvaWQgcmVmKCkgeyBtX2Rh
dGFUcmFuc2Zlci5yZWYoKTsgfQogICAgIHZvaWQgZGVyZWYoKSB7IG1fZGF0YVRyYW5zZmVyLmRl
cmVmKCk7IH0KKyAgICBEYXRhVHJhbnNmZXImIGRhdGFUcmFuc2ZlcigpIHsgcmV0dXJuIG1fZGF0
YVRyYW5zZmVyOyB9CiAKKyAgICAvLyBET00gQVBJCiAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29u
c3Q7CiAgICAgUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW0+IGl0ZW0odW5zaWduZWQgaW5kZXgpOwot
ICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IGFkZChjb25zdCBTdHJpbmcmIGRhdGEsIGNvbnN0IFN0cmlu
ZyYgdHlwZSk7Ci0gICAgdm9pZCBhZGQoUmVmUHRyPEZpbGU+JiYpOwotICAgIHZvaWQgcmVtb3Zl
KHVuc2lnbmVkIGluZGV4KTsKKyAgICBFeGNlcHRpb25PcjxSZWZQdHI8RGF0YVRyYW5zZmVySXRl
bT4+IGFkZChjb25zdCBTdHJpbmcmIGRhdGEsIGNvbnN0IFN0cmluZyYgdHlwZSk7CisgICAgUmVm
UHRyPERhdGFUcmFuc2Zlckl0ZW0+IGFkZChSZWY8RmlsZT4mJik7CisgICAgRXhjZXB0aW9uT3I8
dm9pZD4gcmVtb3ZlKHVuc2lnbmVkIGluZGV4KTsKICAgICB2b2lkIGNsZWFyKCk7CiAKKyAgICB2
b2lkIGRpZENsZWFyU3RyaW5nRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpOworICAgIHZvaWQgZGlk
U2V0U3RyaW5nRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpOworCiBwcml2YXRlOgotICAgIFZlY3Rv
cjxzdGQ6OnVuaXF1ZV9wdHI8RGF0YVRyYW5zZmVySXRlbT4+JiBlbnN1cmVJdGVtcygpIGNvbnN0
OworICAgIFZlY3RvcjxSZWY8RGF0YVRyYW5zZmVySXRlbT4+JiBlbnN1cmVJdGVtcygpIGNvbnN0
OwogCisgICAgV2Vha1B0ckZhY3Rvcnk8RGF0YVRyYW5zZmVySXRlbUxpc3Q+IG1fd2Vha1B0ckZh
Y3Rvcnk7CiAgICAgRGF0YVRyYW5zZmVyJiBtX2RhdGFUcmFuc2ZlcjsKLSAgICBtdXRhYmxlIHN0
ZDo6b3B0aW9uYWw8VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxEYXRhVHJhbnNmZXJJdGVtPj4+IG1f
aXRlbXM7CisgICAgbXV0YWJsZSBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxSZWY8RGF0YVRyYW5zZmVy
SXRlbT4+PiBtX2l0ZW1zOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL0RhdGFUcmFuc2Zlckl0ZW1MaXN0LmlkbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vRGF0YVRyYW5zZmVySXRlbUxpc3QuaWRsCShyZXZpc2lvbiAyMjA3
ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRGF0YVRyYW5zZmVySXRlbUxpc3QuaWRsCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOCwxMCArMzgsMTAgQEAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgbG9u
ZyBsZW5ndGg7CiAgICAgZ2V0dGVyIERhdGFUcmFuc2Zlckl0ZW0gaXRlbSh1bnNpZ25lZCBsb25n
IGluZGV4KTsKIAotICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gdm9pZCBhZGQob3B0aW9uYWwgRE9N
U3RyaW5nIGRhdGEgPSAidW5kZWZpbmVkIiwgb3B0aW9uYWwgRE9NU3RyaW5nIHR5cGUgPSAidW5k
ZWZpbmVkIik7Ci0gICAgdm9pZCBhZGQoRmlsZT8gZmlsZSk7CisgICAgW01heVRocm93RXhjZXB0
aW9uXSBEYXRhVHJhbnNmZXJJdGVtPyBhZGQoRE9NU3RyaW5nIGRhdGEsIERPTVN0cmluZyB0eXBl
KTsKKyAgICBEYXRhVHJhbnNmZXJJdGVtPyBhZGQoRmlsZSBmaWxlKTsKIAotICAgIHZvaWQgcmVt
b3ZlKHVuc2lnbmVkIGxvbmcgaW5kZXgpOworICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gdm9pZCBy
ZW1vdmUodW5zaWduZWQgbG9uZyBpbmRleCk7CiAKICAgICB2b2lkIGNsZWFyKCk7CiB9OwpJbmRl
eDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5n
ZUxvZwkocmV2aXNpb24gMjIwNzgyKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTctMDgtMTYgIFJ5b3N1a2UgTml3YSAgPHJuaXdh
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRkIHRoZSBzdXBwb3J0IGZvciBtdXRhdGluZyBjbGlw
Ym9hcmQgZGF0YSB2aWEgRGF0YVRyYW5zZmVySXRlbUxpc3QKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTYzOQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlYmFzZWxpbmVkIHRoZSBJREwgdGVzdCB3aGlj
aCBub3cgcGFzc2VzIGFsbCB0ZXN0IGNhc2VzLCBhbmQgYWRkZWQgYSByZWdyZXNzaW9uIHRlc3Qg
Zm9yIG11dGF0aW5nIGNsaXBib2FyZCBkYXRhCisgICAgICAgIHZpYSBkYXRhVHJhbnNmZXIuaXRl
bXMgYW5kIG1ldGhvZHMgb24gZGF0YVRyYW5zZmVyIGZvciBwbGFpbnRleHQuCisKKyAgICAgICAg
KiBlZGl0aW5nL3Bhc3RlYm9hcmQvZGF0YXRyYW5zZmVyLWlkbC1leHBlY3RlZC50eHQ6CisgICAg
ICAgICogZWRpdGluZy9wYXN0ZWJvYXJkL2RhdGF0cmFuc2Zlci1pdGVtcy1jb3B5LXBsYWludGV4
dC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvcGFzdGVib2FyZC9kYXRh
dHJhbnNmZXItaXRlbXMtY29weS1wbGFpbnRleHQuaHRtbDogQWRkZWQuCisKIDIwMTctMDgtMTUg
IFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTWFrZSBEYXRhVHJh
bnNmZXJJdGVtTGlzdCB3b3JrIHdpdGggcGxhaW4gdGV4dCBlbnRyaWVzCkluZGV4OiBMYXlvdXRU
ZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvZGF0YXRyYW5zZmVyLWlkbC1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL2RhdGF0cmFuc2Zlci1p
ZGwtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAyMjA3ODIpCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5n
L3Bhc3RlYm9hcmQvZGF0YXRyYW5zZmVyLWlkbC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTIwLDggKzIwLDggQEAKIFBBU1MgRGF0YVRyYW5zZmVySXRlbUxpc3QgaW50ZXJmYWNlOiBl
eGlzdGVuY2UgYW5kIHByb3BlcnRpZXMgb2YgaW50ZXJmYWNlIHByb3RvdHlwZSBvYmplY3QgCiBQ
QVNTIERhdGFUcmFuc2Zlckl0ZW1MaXN0IGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0
aWVzIG9mIGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0J3MgImNvbnN0cnVjdG9yIiBwcm9wZXJ0
eSAKIFBBU1MgRGF0YVRyYW5zZmVySXRlbUxpc3QgaW50ZXJmYWNlOiBhdHRyaWJ1dGUgbGVuZ3Ro
IAotRkFJTCBEYXRhVHJhbnNmZXJJdGVtTGlzdCBpbnRlcmZhY2U6IG9wZXJhdGlvbiBhZGQoRE9N
U3RyaW5nLERPTVN0cmluZykgYXNzZXJ0X2VxdWFsczogcHJvcGVydHkgaGFzIHdyb25nIC5sZW5n
dGggZXhwZWN0ZWQgMSBidXQgZ290IDAKLUZBSUwgRGF0YVRyYW5zZmVySXRlbUxpc3QgaW50ZXJm
YWNlOiBvcGVyYXRpb24gYWRkKEZpbGUpIGFzc2VydF9lcXVhbHM6IHByb3BlcnR5IGhhcyB3cm9u
ZyAubGVuZ3RoIGV4cGVjdGVkIDEgYnV0IGdvdCAwCitQQVNTIERhdGFUcmFuc2Zlckl0ZW1MaXN0
IGludGVyZmFjZTogb3BlcmF0aW9uIGFkZChET01TdHJpbmcsRE9NU3RyaW5nKSAKK1BBU1MgRGF0
YVRyYW5zZmVySXRlbUxpc3QgaW50ZXJmYWNlOiBvcGVyYXRpb24gYWRkKEZpbGUpIAogUEFTUyBE
YXRhVHJhbnNmZXJJdGVtTGlzdCBpbnRlcmZhY2U6IG9wZXJhdGlvbiByZW1vdmUodW5zaWduZWQg
bG9uZykgCiBQQVNTIERhdGFUcmFuc2Zlckl0ZW1MaXN0IGludGVyZmFjZTogb3BlcmF0aW9uIGNs
ZWFyKCkgCiBQQVNTIERhdGFUcmFuc2Zlckl0ZW0gaW50ZXJmYWNlOiBleGlzdGVuY2UgYW5kIHBy
b3BlcnRpZXMgb2YgaW50ZXJmYWNlIG9iamVjdCAKSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcv
cGFzdGVib2FyZC9kYXRhdHJhbnNmZXItaXRlbXMtY29weS1wbGFpbnRleHQtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9kYXRhdHJhbnNm
ZXItaXRlbXMtY29weS1wbGFpbnRleHQtZXhwZWN0ZWQudHh0CShub25leGlzdGVudCkKKysrIExh
eW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9kYXRhdHJhbnNmZXItaXRlbXMtY29weS1wbGFp
bnRleHQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDMgQEAKK1RoaXMg
dGVzdHMgY29weWluZyBwbGFpbiB0ZXh0IHVzaW5nIGRhdGFUcmFuc2Zlci5pdGVtcy4gVG8gbWFu
dWFsbHkgdGVzdCwgY2xpY2sgb24gIkNvcHkgdGV4dCIgYW5kIHBhc3RlIChDb21tYW5kK1Ygb24g
TWFjIENvbnRyb2wrViBlbHNld2hlcmUpLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBz
ZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisK
KworUEFTUyBjbGlwYm9hcmREYXRhLml0ZW1zLmxlbmd0aCBpcyAwCitQQVNTIGNsaXBib2FyZERh
dGEuc2V0RGF0YSgidGV4dC9wbGFpbiIsICJyb2NrIik7IGNsaXBib2FyZERhdGEuaXRlbXMubGVu
Z3RoIGlzIDEKK1BBU1MgaW5pdGlhbEl0ZW0gPSBjbGlwYm9hcmREYXRhLml0ZW1zWzBdOyBpbml0
aWFsSXRlbS5raW5kIGlzICJzdHJpbmciCitQQVNTIGluaXRpYWxJdGVtLnR5cGUgaXMgInRleHQv
cGxhaW4iCitQQVNTIGluaXRpYWxJdGVtLmdldEFzRmlsZSgpIGlzIG51bGwKK1BBU1MgaW5pdGlh
bEl0ZW0uZ2V0QXNTdHJpbmcoY2hlY2tDb250ZW50KDEsICJyb2NrIikpIGlzIHVuZGVmaW5lZAor
UEFTUyBjbGlwYm9hcmREYXRhLml0ZW1zLmFkZCgicGFwZXIiLCAidGV4dC9wbGFpbiIpIHRocmV3
IGV4Y2VwdGlvbiBOb3RTdXBwb3J0ZWRFcnJvcjogVGhlIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9y
dGVkLi4KK1BBU1MgY2xpcGJvYXJkRGF0YS5pdGVtc1swXSBpcyBpbml0aWFsSXRlbQorUEFTUyBj
bGlwYm9hcmREYXRhLmNsZWFyRGF0YSgpOyBjbGlwYm9hcmREYXRhLml0ZW1zLmxlbmd0aCBpcyAw
CitQQVNTIGNsaXBib2FyZERhdGEuaXRlbXMuYWRkKCJzY2lzc29ycyIsICJ0ZXh0L3BsYWluIik7
IGNsaXBib2FyZERhdGEuaXRlbXMubGVuZ3RoIGlzIDEKK1BBU1MgY2xpcGJvYXJkRGF0YS5pdGVt
c1swXSBpcyBub3QgaW5pdGlhbEl0ZW0KK1BBU1MgaW5pdGlhbEl0ZW0ua2luZCBpcyAic3RyaW5n
IgorUEFTUyBpbml0aWFsSXRlbS50eXBlIGlzICIiCitQQVNTIGluaXRpYWxJdGVtLmdldEFzRmls
ZSgpIGlzIG51bGwKK1BBU1MgaW5pdGlhbEl0ZW0uZ2V0QXNTdHJpbmcoKCkgPT4gdGVzdEZhaWxl
ZCgiZ2V0QXNTdHJpbmcgc2hvdWxkIGV4aXQgaW1tZWlkYXRlbHkgaWYgaXRlbSBpcyBkaXNhYmxl
ZCIpKSBpcyB1bmRlZmluZWQKK1BBU1MgY2xpcGJvYXJkRGF0YS5nZXREYXRhKCJ0ZXh0L3BsYWlu
IikgaXMgInNjaXNzb3JzIgorUEFTUyBjbGlwYm9hcmREYXRhLml0ZW1zWzBdLmtpbmQgaXMgInN0
cmluZyIKK1BBU1MgY2xpcGJvYXJkRGF0YS5pdGVtc1swXS50eXBlIGlzICJ0ZXh0L3BsYWluIgor
UEFTUyBjbGlwYm9hcmREYXRhLml0ZW1zWzBdLmdldEFzRmlsZSgpIGlzIG51bGwKK1BBU1MgY2xp
cGJvYXJkRGF0YS5pdGVtc1swXS5nZXRBc1N0cmluZyhjaGVja0NvbnRlbnQoMiwgInNjaXNzb3Jz
IikpIGlzIHVuZGVmaW5lZAorUEFTUyBjbGlwYm9hcmREYXRhLml0ZW1zLmNsZWFyKCk7IGNsaXBi
b2FyZERhdGEuaXRlbXMubGVuZ3RoIGlzIDAKK1BBU1MgY2xpcGJvYXJkRGF0YS5nZXREYXRhKCJ0
ZXh0L3BsYWluIikgaXMgIiIKK1BBU1MgY2xpcGJvYXJkRGF0YS5pdGVtcy5hZGQoIldlYktpdCIs
ICJ0ZXh0L3BsYWluIik7IGNsaXBib2FyZERhdGEuaXRlbXMubGVuZ3RoIGlzIDEKK1BBU1MgY2xp
cGJvYXJkRGF0YS5pdGVtc1swXS5raW5kIGlzICJzdHJpbmciCitQQVNTIGNsaXBib2FyZERhdGEu
aXRlbXNbMF0udHlwZSBpcyAidGV4dC9wbGFpbiIKK1BBU1MgY2xpcGJvYXJkRGF0YS5pdGVtc1sw
XS5nZXRBc0ZpbGUoKSBpcyBudWxsCitQQVNTIGNsaXBib2FyZERhdGEuaXRlbXNbMF0uZ2V0QXNT
dHJpbmcoY2hlY2tDb250ZW50KDMsICJXZWJLaXQiKSkgaXMgdW5kZWZpbmVkCitQQVNTIGNsaXBi
b2FyZERhdGEuaXRlbXMucmVtb3ZlKDEpIHRocmV3IGV4Y2VwdGlvbiBJbmRleFNpemVFcnJvcjog
VGhlIGluZGV4IGlzIG5vdCBpbiB0aGUgYWxsb3dlZCByYW5nZS4uCitQQVNTIGNsaXBib2FyZERh
dGEuaXRlbXMubGVuZ3RoIGlzIDEKK1BBU1MgY2xpcGJvYXJkRGF0YS5pdGVtcy5yZW1vdmUoMCk7
IGNsaXBib2FyZERhdGEuaXRlbXMubGVuZ3RoIGlzIDAKK1BBU1MgY2xpcGJvYXJkRGF0YS5nZXRE
YXRhKCJ0ZXh0L3BsYWluIikgaXMgIiIKK1BBU1MgYWN0dWFsQ29udGVudDEgaXMgInJvY2siCitQ
QVNTIGFjdHVhbENvbnRlbnQyIGlzICJzY2lzc29ycyIKK1BBU1MgYWN0dWFsQ29udGVudDMgaXMg
IldlYktpdCIKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVU
RQorCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvZGF0YXRyYW5zZmVyLWl0
ZW1zLWNvcHktcGxhaW50ZXh0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGlu
Zy9wYXN0ZWJvYXJkL2RhdGF0cmFuc2Zlci1pdGVtcy1jb3B5LXBsYWludGV4dC5odG1sCShub25l
eGlzdGVudCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9kYXRhdHJhbnNmZXIt
aXRlbXMtY29weS1wbGFpbnRleHQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg2IEBA
Cis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVz
b3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisKK2Rlc2NyaXB0aW9u
KCdUaGlzIHRlc3RzIGNvcHlpbmcgcGxhaW4gdGV4dCB1c2luZyBkYXRhVHJhbnNmZXIuaXRlbXMu
IFRvIG1hbnVhbGx5IHRlc3QsIGNsaWNrIG9uICJDb3B5IHRleHQiIGFuZCBwYXN0ZSAoQ29tbWFu
ZCtWIG9uIE1hYyBDb250cm9sK1YgZWxzZXdoZXJlKS4nKTsKKworZnVuY3Rpb24gY29weVRleHQo
KQoreworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzb3VyY2UnKS5mb2N1cygpOworICAg
IGRvY3VtZW50LmV4ZWNDb21tYW5kKCdTZWxlY3RBbGwnLCBmYWxzZSwgbnVsbCk7CisgICAgZG9j
dW1lbnQuZXhlY0NvbW1hbmQoJ0NvcHknLCBmYWxzZSwgbnVsbCk7Cit9CisKK2Z1bmN0aW9uIGNv
cHkoZXZlbnQpCit7CisgICAgY2xpcGJvYXJkRGF0YSA9IGV2ZW50LmNsaXBib2FyZERhdGE7Cisg
ICAgc2hvdWxkQmUoJ2NsaXBib2FyZERhdGEuaXRlbXMubGVuZ3RoJywgJzAnKTsKKyAgICBzaG91
bGRCZSgnY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJ0ZXh0L3BsYWluIiwgInJvY2siKTsgY2xpcGJv
YXJkRGF0YS5pdGVtcy5sZW5ndGgnLCAnMScpOworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygn
aW5pdGlhbEl0ZW0gPSBjbGlwYm9hcmREYXRhLml0ZW1zWzBdOyBpbml0aWFsSXRlbS5raW5kJywg
J3N0cmluZycpOworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnaW5pdGlhbEl0ZW0udHlwZScs
ICd0ZXh0L3BsYWluJyk7CisgICAgc2hvdWxkQmUoJ2luaXRpYWxJdGVtLmdldEFzRmlsZSgpJywg
J251bGwnKTsKKyAgICBzaG91bGRCZSgnaW5pdGlhbEl0ZW0uZ2V0QXNTdHJpbmcoY2hlY2tDb250
ZW50KDEsICJyb2NrIikpJywgJ3VuZGVmaW5lZCcpOworCisgICAgc2hvdWxkVGhyb3dFcnJvck5h
bWUoJ2NsaXBib2FyZERhdGEuaXRlbXMuYWRkKCJwYXBlciIsICJ0ZXh0L3BsYWluIiknLCAnTm90
U3VwcG9ydGVkRXJyb3InKTsKKyAgICBzaG91bGRCZSgnY2xpcGJvYXJkRGF0YS5pdGVtc1swXScs
ICdpbml0aWFsSXRlbScpOworICAgIHNob3VsZEJlKCdjbGlwYm9hcmREYXRhLmNsZWFyRGF0YSgp
OyBjbGlwYm9hcmREYXRhLml0ZW1zLmxlbmd0aCcsICcwJyk7CisKKyAgICBzaG91bGRCZSgnY2xp
cGJvYXJkRGF0YS5pdGVtcy5hZGQoInNjaXNzb3JzIiwgInRleHQvcGxhaW4iKTsgY2xpcGJvYXJk
RGF0YS5pdGVtcy5sZW5ndGgnLCAnMScpOworICAgIHNob3VsZE5vdEJlKCdjbGlwYm9hcmREYXRh
Lml0ZW1zWzBdJywgJ2luaXRpYWxJdGVtJyk7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdp
bml0aWFsSXRlbS5raW5kJywgJ3N0cmluZycpOworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygn
aW5pdGlhbEl0ZW0udHlwZScsICcnKTsKKyAgICBzaG91bGRCZSgnaW5pdGlhbEl0ZW0uZ2V0QXNG
aWxlKCknLCAnbnVsbCcpOworICAgIHNob3VsZEJlKCdpbml0aWFsSXRlbS5nZXRBc1N0cmluZygo
KSA9PiB0ZXN0RmFpbGVkKCJnZXRBc1N0cmluZyBzaG91bGQgZXhpdCBpbW1laWRhdGVseSBpZiBp
dGVtIGlzIGRpc2FibGVkIikpJywgJ3VuZGVmaW5lZCcpOworCisgICAgc2hvdWxkQmVFcXVhbFRv
U3RyaW5nKCdjbGlwYm9hcmREYXRhLmdldERhdGEoInRleHQvcGxhaW4iKScsICdzY2lzc29ycycp
OworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnY2xpcGJvYXJkRGF0YS5pdGVtc1swXS5raW5k
JywgJ3N0cmluZycpOworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnY2xpcGJvYXJkRGF0YS5p
dGVtc1swXS50eXBlJywgJ3RleHQvcGxhaW4nKTsKKyAgICBzaG91bGRCZSgnY2xpcGJvYXJkRGF0
YS5pdGVtc1swXS5nZXRBc0ZpbGUoKScsICdudWxsJyk7CisgICAgc2hvdWxkQmUoJ2NsaXBib2Fy
ZERhdGEuaXRlbXNbMF0uZ2V0QXNTdHJpbmcoY2hlY2tDb250ZW50KDIsICJzY2lzc29ycyIpKScs
ICd1bmRlZmluZWQnKTsKKworICAgIHNob3VsZEJlKCdjbGlwYm9hcmREYXRhLml0ZW1zLmNsZWFy
KCk7IGNsaXBib2FyZERhdGEuaXRlbXMubGVuZ3RoJywgJzAnKTsKKyAgICBzaG91bGRCZUVxdWFs
VG9TdHJpbmcoJ2NsaXBib2FyZERhdGEuZ2V0RGF0YSgidGV4dC9wbGFpbiIpJywgJycpOworCisg
ICAgc2hvdWxkQmUoJ2NsaXBib2FyZERhdGEuaXRlbXMuYWRkKCJXZWJLaXQiLCAidGV4dC9wbGFp
biIpOyBjbGlwYm9hcmREYXRhLml0ZW1zLmxlbmd0aCcsICcxJyk7CisgICAgc2hvdWxkQmVFcXVh
bFRvU3RyaW5nKCdjbGlwYm9hcmREYXRhLml0ZW1zWzBdLmtpbmQnLCAnc3RyaW5nJyk7CisgICAg
c2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdjbGlwYm9hcmREYXRhLml0ZW1zWzBdLnR5cGUnLCAndGV4
dC9wbGFpbicpOworICAgIHNob3VsZEJlKCdjbGlwYm9hcmREYXRhLml0ZW1zWzBdLmdldEFzRmls
ZSgpJywgJ251bGwnKTsKKyAgICBzaG91bGRCZSgnY2xpcGJvYXJkRGF0YS5pdGVtc1swXS5nZXRB
c1N0cmluZyhjaGVja0NvbnRlbnQoMywgIldlYktpdCIpKScsICd1bmRlZmluZWQnKTsKKworICAg
IHNob3VsZFRocm93RXJyb3JOYW1lKCdjbGlwYm9hcmREYXRhLml0ZW1zLnJlbW92ZSgxKScsICdJ
bmRleFNpemVFcnJvcicpOworICAgIHNob3VsZEJlKCdjbGlwYm9hcmREYXRhLml0ZW1zLmxlbmd0
aCcsICcxJyk7CisgICAgc2hvdWxkQmUoJ2NsaXBib2FyZERhdGEuaXRlbXMucmVtb3ZlKDApOyBj
bGlwYm9hcmREYXRhLml0ZW1zLmxlbmd0aCcsICcwJyk7CisgICAgc2hvdWxkQmVFcXVhbFRvU3Ry
aW5nKCdjbGlwYm9hcmREYXRhLmdldERhdGEoInRleHQvcGxhaW4iKScsICcnKTsKK30KKworbGV0
IGNvdW50ID0gMDsKK2Z1bmN0aW9uIGNoZWNrQ29udGVudChudW1iZXIsIGV4cGVjdGVkQ29udGVu
dCkKK3sKKyAgICBjb3VudCsrOworICAgIHJldHVybiAoY29udGVudCkgPT4geworICAgICAgICBj
b25zdCB2YXJpYWJsZU5hbWUgPSAnYWN0dWFsQ29udGVudCcgKyBudW1iZXI7CisgICAgICAgIHdp
bmRvd1t2YXJpYWJsZU5hbWVdID0gY29udGVudDsKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3Ry
aW5nKHZhcmlhYmxlTmFtZSwgZXhwZWN0ZWRDb250ZW50KTsKKyAgICAgICAgY291bnQtLTsKKyAg
ICAgICAgaWYgKCFjb3VudCkgeworICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J2NvbnRhaW5lcicpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgICAgICAgICAgICBmaW5pc2hK
U1Rlc3QoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworaWYgKHdpbmRvdy50ZXN0UnVubmVyKQor
ICAgIHdpbmRvdy5vbmxvYWQgPSBjb3B5VGV4dDsKK2pzVGVzdElzQXN5bmMgPSB0cnVlOworc3Vj
Y2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKworPC9zY3JpcHQ+Cis8ZGl2IGlkPSJjb250YWluZXIi
PgorICAgIDxidXR0b24gb25jbGljaz0iY29weVRleHQoKTsiPkNvcHkgdGV4dDwvYnV0dG9uPgor
ICAgIDxkaXYgaWQ9InNvdXJjZSIgb25jb3B5PSJjb3B5KGV2ZW50KSIgY29udGVudGVkaXRhYmxl
PSJ0cnVlIj5oZWxsbywgd29ybGQ8L2Rpdj4KKzwvZGl2PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jl
c291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>
<flag name="review"
          id="338715"
          type_id="1"
          status="+"
          setter="wenson_hsieh"
    />
          </attachment>
      

    </bug>

</bugzilla>