<?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>31276</bug_id>
          
          <creation_ts>2009-11-09 15:55:47 -0800</creation_ts>
          <short_desc>Upstreaming Chromium API src files</short_desc>
          <delta_ts>2009-11-10 12:49:53 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit API</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>28394</blocked>
    
    <blocked>28395</blocked>
    
    <blocked>28396</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Yaar Schnitman">yaar</reporter>
          <assigned_to name="Yaar Schnitman">yaar</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>japhet</cc>
    
    <cc>levin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>161820</commentid>
    <comment_count>0</comment_count>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2009-11-09 15:55:47 -0800</bug_when>
    <thetext>We are done with upstreaming the public files. Now we need to upstream the src files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161880</commentid>
    <comment_count>1</comment_count>
      <attachid>42818</attachid>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2009-11-09 18:01:08 -0800</bug_when>
    <thetext>Created attachment 42818
Up-streaming Chromium API src files: WebAccessibilty</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161883</commentid>
    <comment_count>2</comment_count>
      <attachid>42820</attachid>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2009-11-09 18:06:06 -0800</bug_when>
    <thetext>Created attachment 42820
Up-streaming Chromium API src files: WebBindging ... WebCursorInfo</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161887</commentid>
    <comment_count>3</comment_count>
      <attachid>42821</attachid>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2009-11-09 18:11:11 -0800</bug_when>
    <thetext>Created attachment 42821
Up-streaming Chromium API src files: WebData...WebElement</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161889</commentid>
    <comment_count>4</comment_count>
      <attachid>42822</attachid>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2009-11-09 18:13:37 -0800</bug_when>
    <thetext>Created attachment 42822
Up-streaming Chromium API src files: WebFileChooser...WebImageSkia</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161890</commentid>
    <comment_count>5</comment_count>
      <attachid>42823</attachid>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2009-11-09 18:17:34 -0800</bug_when>
    <thetext>Created attachment 42823
Up-streaming Chromium API src files: WebFileInputElement...WebNotifications</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161891</commentid>
    <comment_count>6</comment_count>
      <attachid>42824</attachid>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2009-11-09 18:19:00 -0800</bug_when>
    <thetext>Created attachment 42824
Up-streaming Chromium API src files: WebPasswordFormData...WebRuntimeFeatures</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161893</commentid>
    <comment_count>7</comment_count>
      <attachid>42825</attachid>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2009-11-09 18:20:45 -0800</bug_when>
    <thetext>Created attachment 42825
Up-streaming Chromium API src files: WebScriptController...WebStorageNamespaceImpl</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161895</commentid>
    <comment_count>8</comment_count>
      <attachid>42826</attachid>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2009-11-09 18:22:49 -0800</bug_when>
    <thetext>Created attachment 42826
Up-streaming Chromium API src files: WebString...WebViewImpl</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161906</commentid>
    <comment_count>9</comment_count>
      <attachid>42831</attachid>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2009-11-09 18:37:15 -0800</bug_when>
    <thetext>Created attachment 42831
Up-streaming Chromium API src files: WebWorker and friends.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161909</commentid>
    <comment_count>10</comment_count>
      <attachid>42832</attachid>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2009-11-09 18:56:25 -0800</bug_when>
    <thetext>Created attachment 42832
Up-streaming Chromium API src files: AppCach...BackForwardListClientImpl</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161910</commentid>
    <comment_count>11</comment_count>
      <attachid>42833</attachid>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2009-11-09 18:58:05 -0800</bug_when>
    <thetext>Created attachment 42833
Up-streaming Chromium API src files: ChromeClientImpl...ContextMenuClientImpl</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161912</commentid>
    <comment_count>12</comment_count>
      <attachid>42835</attachid>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2009-11-09 18:59:31 -0800</bug_when>
    <thetext>Created attachment 42835
Up-streaming Chromium API src files: DOMUtilities...FrameLoaderClientImpl</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161913</commentid>
    <comment_count>13</comment_count>
      <attachid>42836</attachid>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2009-11-09 19:00:41 -0800</bug_when>
    <thetext>Created attachment 42836
Up-streaming Chromium API src files: GraphicContext3D...MediaPlaterPrivateChromium</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161914</commentid>
    <comment_count>14</comment_count>
      <attachid>42837</attachid>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2009-11-09 19:01:50 -0800</bug_when>
    <thetext>Created attachment 42837
Up-streaming Chromium API src files: NotificationPresenterImpl...SharedWorkerRepository</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161916</commentid>
    <comment_count>15</comment_count>
      <attachid>42838</attachid>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2009-11-09 19:03:44 -0800</bug_when>
    <thetext>Created attachment 42838
Up-streaming Chromium API src files: StorageStreamHandlers...StorageNamespaceProxy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161917</commentid>
    <comment_count>16</comment_count>
      <attachid>42839</attachid>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2009-11-09 19:05:47 -0800</bug_when>
    <thetext>Created attachment 42839
Up-streaming Chromium API src files: WrapperResourceRequest and Response</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161918</commentid>
    <comment_count>17</comment_count>
      <attachid>42840</attachid>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2009-11-09 19:07:23 -0800</bug_when>
    <thetext>Created attachment 42840
Up-streaming Chromium API src files: Platform specific files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161942</commentid>
    <comment_count>18</comment_count>
      <attachid>42818</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-11-09 20:30:13 -0800</bug_when>
    <thetext>Comment on attachment 42818
Up-streaming Chromium API src files: WebAccessibilty

r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161944</commentid>
    <comment_count>19</comment_count>
      <attachid>42824</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-11-09 20:37:59 -0800</bug_when>
    <thetext>Comment on attachment 42824
Up-streaming Chromium API src files: WebPasswordFormData...WebRuntimeFeatures

r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161945</commentid>
    <comment_count>20</comment_count>
      <attachid>42818</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-11-09 20:43:16 -0800</bug_when>
    <thetext>Comment on attachment 42818
Up-streaming Chromium API src files: WebAccessibilty

Clearing flags on attachment: 42818

Committed r50714: &lt;http://trac.webkit.org/changeset/50714&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161946</commentid>
    <comment_count>21</comment_count>
      <attachid>42820</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-11-09 20:50:46 -0800</bug_when>
    <thetext>Comment on attachment 42820
Up-streaming Chromium API src files: WebBindging ... WebCursorInfo

Clearing flags on attachment: 42820

Committed r50715: &lt;http://trac.webkit.org/changeset/50715&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161947</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-11-09 20:50:52 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161952</commentid>
    <comment_count>23</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-11-09 22:15:32 -0800</bug_when>
    <thetext>Reopening because not all patches are checked in yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161960</commentid>
    <comment_count>24</comment_count>
      <attachid>42839</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-11-09 23:23:39 -0800</bug_when>
    <thetext>Comment on attachment 42839
Up-streaming Chromium API src files: WrapperResourceRequest and Response

I don&apos;t understand what these are for.  It would be nice to describe the use of these classes in the ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161964</commentid>
    <comment_count>25</comment_count>
      <attachid>42821</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-11-09 23:46:48 -0800</bug_when>
    <thetext>Comment on attachment 42821
Up-streaming Chromium API src files: WebData...WebElement

Clearing flags on attachment: 42821

Committed r50719: &lt;http://trac.webkit.org/changeset/50719&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161966</commentid>
    <comment_count>26</comment_count>
      <attachid>42822</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-11-09 23:54:14 -0800</bug_when>
    <thetext>Comment on attachment 42822
Up-streaming Chromium API src files: WebFileChooser...WebImageSkia

Clearing flags on attachment: 42822

Committed r50720: &lt;http://trac.webkit.org/changeset/50720&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161967</commentid>
    <comment_count>27</comment_count>
      <attachid>42823</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-11-10 00:01:43 -0800</bug_when>
    <thetext>Comment on attachment 42823
Up-streaming Chromium API src files: WebFileInputElement...WebNotifications

Clearing flags on attachment: 42823

Committed r50721: &lt;http://trac.webkit.org/changeset/50721&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161970</commentid>
    <comment_count>28</comment_count>
      <attachid>42824</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-11-10 00:09:14 -0800</bug_when>
    <thetext>Comment on attachment 42824
Up-streaming Chromium API src files: WebPasswordFormData...WebRuntimeFeatures

Clearing flags on attachment: 42824

Committed r50722: &lt;http://trac.webkit.org/changeset/50722&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161972</commentid>
    <comment_count>29</comment_count>
      <attachid>42825</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-11-10 00:16:56 -0800</bug_when>
    <thetext>Comment on attachment 42825
Up-streaming Chromium API src files: WebScriptController...WebStorageNamespaceImpl

Clearing flags on attachment: 42825

Committed r50723: &lt;http://trac.webkit.org/changeset/50723&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161973</commentid>
    <comment_count>30</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-11-10 00:17:04 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162076</commentid>
    <comment_count>31</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-11-10 09:45:51 -0800</bug_when>
    <thetext>cq is it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162077</commentid>
    <comment_count>32</comment_count>
      <attachid>42831</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-11-10 09:47:19 -0800</bug_when>
    <thetext>Comment on attachment 42831
Up-streaming Chromium API src files: WebWorker and friends.

Two entries in the ChangeLog?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162080</commentid>
    <comment_count>33</comment_count>
      <attachid>42826</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-11-10 10:04:51 -0800</bug_when>
    <thetext>Comment on attachment 42826
Up-streaming Chromium API src files: WebString...WebViewImpl

Clearing flags on attachment: 42826

Committed r50739: &lt;http://trac.webkit.org/changeset/50739&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162082</commentid>
    <comment_count>34</comment_count>
      <attachid>42832</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-11-10 10:12:22 -0800</bug_when>
    <thetext>Comment on attachment 42832
Up-streaming Chromium API src files: AppCach...BackForwardListClientImpl

Clearing flags on attachment: 42832

Committed r50740: &lt;http://trac.webkit.org/changeset/50740&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162085</commentid>
    <comment_count>35</comment_count>
      <attachid>42873</attachid>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2009-11-10 10:18:06 -0800</bug_when>
    <thetext>Created attachment 42873
Up-streaming Chromium API src files: WebWorker and friends.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162087</commentid>
    <comment_count>36</comment_count>
      <attachid>42833</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-11-10 10:19:50 -0800</bug_when>
    <thetext>Comment on attachment 42833
Up-streaming Chromium API src files: ChromeClientImpl...ContextMenuClientImpl

Clearing flags on attachment: 42833

Committed r50741: &lt;http://trac.webkit.org/changeset/50741&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162092</commentid>
    <comment_count>37</comment_count>
      <attachid>42835</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-11-10 10:27:28 -0800</bug_when>
    <thetext>Comment on attachment 42835
Up-streaming Chromium API src files: DOMUtilities...FrameLoaderClientImpl

Clearing flags on attachment: 42835

Committed r50742: &lt;http://trac.webkit.org/changeset/50742&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162099</commentid>
    <comment_count>38</comment_count>
      <attachid>42836</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-11-10 10:35:06 -0800</bug_when>
    <thetext>Comment on attachment 42836
Up-streaming Chromium API src files: GraphicContext3D...MediaPlaterPrivateChromium

Clearing flags on attachment: 42836

Committed r50743: &lt;http://trac.webkit.org/changeset/50743&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162105</commentid>
    <comment_count>39</comment_count>
      <attachid>42837</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-11-10 10:49:16 -0800</bug_when>
    <thetext>Comment on attachment 42837
Up-streaming Chromium API src files: NotificationPresenterImpl...SharedWorkerRepository

Clearing flags on attachment: 42837

Committed r50744: &lt;http://trac.webkit.org/changeset/50744&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162111</commentid>
    <comment_count>40</comment_count>
      <attachid>42838</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-11-10 10:56:44 -0800</bug_when>
    <thetext>Comment on attachment 42838
Up-streaming Chromium API src files: StorageStreamHandlers...StorageNamespaceProxy

Clearing flags on attachment: 42838

Committed r50746: &lt;http://trac.webkit.org/changeset/50746&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162140</commentid>
    <comment_count>41</comment_count>
      <attachid>42839</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-11-10 11:37:48 -0800</bug_when>
    <thetext>Comment on attachment 42839
Up-streaming Chromium API src files: WrapperResourceRequest and Response

Clearing flags on attachment: 42839

Committed r50749: &lt;http://trac.webkit.org/changeset/50749&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162145</commentid>
    <comment_count>42</comment_count>
      <attachid>42840</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-11-10 11:45:21 -0800</bug_when>
    <thetext>Comment on attachment 42840
Up-streaming Chromium API src files: Platform specific files.

Clearing flags on attachment: 42840

Committed r50750: &lt;http://trac.webkit.org/changeset/50750&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162146</commentid>
    <comment_count>43</comment_count>
      <attachid>42882</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2009-11-10 11:46:57 -0800</bug_when>
    <thetext>Created attachment 42882
Upstream GraphicsContext3D.cpp fixes and remove a spurious ChangeLog entry</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162151</commentid>
    <comment_count>44</comment_count>
      <attachid>42873</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-11-10 11:52:53 -0800</bug_when>
    <thetext>Comment on attachment 42873
Up-streaming Chromium API src files: WebWorker and friends.

Clearing flags on attachment: 42873

Committed r50751: &lt;http://trac.webkit.org/changeset/50751&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162152</commentid>
    <comment_count>45</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-11-10 11:53:05 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162174</commentid>
    <comment_count>46</comment_count>
      <attachid>42882</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-11-10 12:49:27 -0800</bug_when>
    <thetext>Comment on attachment 42882
Upstream GraphicsContext3D.cpp fixes and remove a spurious ChangeLog entry

This really should have been on a new bug, but OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162175</commentid>
    <comment_count>47</comment_count>
      <attachid>42882</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-11-10 12:49:53 -0800</bug_when>
    <thetext>Comment on attachment 42882
Upstream GraphicsContext3D.cpp fixes and remove a spurious ChangeLog entry

The ChangeLog should also mention which revision caused this renaming need.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42818</attachid>
            <date>2009-11-09 18:01:08 -0800</date>
            <delta_ts>2009-11-09 20:43:16 -0800</delta_ts>
            <desc>Up-streaming Chromium API src files: WebAccessibilty</desc>
            <filename>bug-31276-20091109180107.patch</filename>
            <type>text/plain</type>
            <size>26280</size>
            <attacher name="Yaar Schnitman">yaar</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IDA2MDkxMDYuLmY4ZmJlMzggMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDY3IEBACisyMDA5LTExLTA5ICBZYWFyIFNjaG5pdG1hbiAgPHlhYXJAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwLXN0cmVh
bWluZyBDaHJvbWl1bSBBUEkgc3JjIGZpbGVzOiBXZWJBY2Nlc3NpYmlsdHkKKworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzEyNzYKKworICAgICAgICAq
IHNyYy9XZWJBY2Nlc3NpYmlsaXR5Q2FjaGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6
V2ViQWNjZXNzaWJpbGl0eUNhY2hlOjplbmFibGVBY2Nlc3NpYmlsaXR5KToKKyAgICAgICAgKiBz
cmMvV2ViQWNjZXNzaWJpbGl0eUNhY2hlSW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0
Ojp0b0FjY2Vzc2liaWxpdHlPYmplY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJBY2Nlc3NpYmls
aXR5Q2FjaGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlDYWNo
ZUltcGw6OldlYWtIYW5kbGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkFjY2Vzc2li
aWxpdHlDYWNoZUltcGw6OldlYWtIYW5kbGU6OldlYWtIYW5kbGUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJBY2Nlc3NpYmlsaXR5Q2FjaGVJbXBsOjpXZWFrSGFuZGxlOjpkZXRhY2gpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJBY2Nlc3NpYmlsaXR5Q2FjaGVJbXBsOjpXZWJBY2Nlc3NpYmlsaXR5Q2Fj
aGVJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViQWNjZXNzaWJpbGl0eUNhY2hlSW1wbDo6fldl
YkFjY2Vzc2liaWxpdHlDYWNoZUltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJBY2Nlc3NpYmls
aXR5Q2FjaGVJbXBsOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViQWNjZXNzaWJp
bGl0eUNhY2hlSW1wbDo6Z2V0T2JqZWN0QnlJZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkFjY2Vz
c2liaWxpdHlDYWNoZUltcGw6OmlzVmFsaWRJZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkFjY2Vz
c2liaWxpdHlDYWNoZUltcGw6OnJlbW92ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkFjY2Vzc2li
aWxpdHlDYWNoZUltcGw6OmNsZWFyKToKKyAgICAgICAgKFdlYktpdDo6V2ViQWNjZXNzaWJpbGl0
eUNhY2hlSW1wbDo6YWRkT3JHZXRJZCk6CisgICAgICAgICogc3JjL1dlYkFjY2Vzc2liaWxpdHlD
YWNoZUltcGwuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlDYWNo
ZUltcGw6OmlzSW5pdGlhbGl6ZWQpOgorICAgICAgICAqIHNyYy9XZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlPYmplY3Q6
OnJlc2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViQWNjZXNzaWJpbGl0eU9iamVjdDo6YXNzaWdu
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQWNjZXNzaWJpbGl0eU9iamVjdDo6YWNjZXNzaWJpbGl0
eURlc2NyaXB0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViQWNjZXNzaWJpbGl0eU9iamVjdDo6
YWN0aW9uVmVyYik6CisgICAgICAgIChXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlPYmplY3Q6OmNh
blNldEZvY3VzQXR0cmlidXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViQWNjZXNzaWJpbGl0eU9i
amVjdDo6Y2hpbGRDb3VudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OmNoaWxkQXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpm
aXJzdENoaWxkKToKKyAgICAgICAgKFdlYktpdDo6V2ViQWNjZXNzaWJpbGl0eU9iamVjdDo6Zm9j
dXNlZENoaWxkKToKKyAgICAgICAgKFdlYktpdDo6V2ViQWNjZXNzaWJpbGl0eU9iamVjdDo6bGFz
dENoaWxkKToKKyAgICAgICAgKFdlYktpdDo6V2ViQWNjZXNzaWJpbGl0eU9iamVjdDo6bmV4dFNp
YmxpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0OjpwYXJlbnRP
YmplY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0OjpwcmV2aW91
c1NpYmxpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0Ojppc0Fu
Y2hvcik6CisgICAgICAgIChXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlPYmplY3Q6OmlzQ2hlY2tl
ZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlPYmplY3Q6OmlzRm9jdXNlZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlPYmplY3Q6OmlzRW5hYmxlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlPYmplY3Q6OmlzSG92ZXJlZCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlPYmplY3Q6OmlzSW5kZXRlcm1pbmF0ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlPYmplY3Q6OmlzTXVsdGlTZWxlY3QpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0Ojppc09mZlNjcmVlbik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlPYmplY3Q6OmlzUGFzc3dvcmRGaWVsZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlPYmplY3Q6OmlzUHJlc3NlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlPYmplY3Q6OmlzUmVhZE9ubHkpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0Ojppc1Zpc2l0ZWQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpib3VuZGluZ0JveFJlY3QpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0OjpoZWxwVGV4dCk6CisgICAgICAg
IChXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlPYmplY3Q6OmhpdFRlc3QpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0OjprZXlib2FyZFNob3J0Y3V0KToKKyAgICAgICAg
KFdlYktpdDo6V2ViQWNjZXNzaWJpbGl0eU9iamVjdDo6cGVyZm9ybURlZmF1bHRBY3Rpb24pOgor
ICAgICAgICAoV2ViS2l0OjpXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpyb2xlVmFsdWUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzdHJpbmdWYWx1ZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlPYmplY3Q6OnRpdGxlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViQWNjZXNzaWJpbGl0eU9iamVjdDo6V2ViQWNjZXNzaWJpbGl0eU9iamVjdCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlPYmplY3Q6Om9wZXJhdG9yPSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlPYmplY3Q6Om9wZXJhdG9yIFdURjo6UGFzc1Jl
ZlB0cjxXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Pik6CisKIDIwMDktMTEtMDkgIERhdmlk
IExldmluICA8bGV2aW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERtaXRy
eSBUaXRvdi4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQWNjZXNzaWJpbGl0
eUNhY2hlLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQWNjZXNzaWJpbGl0eUNhY2hlLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44YTNmNjk3Ci0tLSAvZGV2L251
bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJBY2Nlc3NpYmlsaXR5Q2FjaGUuY3BwCkBA
IC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViQWNjZXNzaWJp
bGl0eUNhY2hlLmgiCisKKyNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCisKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9pZCBXZWJBY2Nlc3NpYmls
aXR5Q2FjaGU6OmVuYWJsZUFjY2Vzc2liaWxpdHkoKQoreworICAgIEFYT2JqZWN0Q2FjaGU6OmVu
YWJsZUFjY2Vzc2liaWxpdHkoKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJBY2Nlc3NpYmlsaXR5Q2FjaGVJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViQWNjZXNzaWJpbGl0eUNhY2hlSW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uMDNlNWY0NgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViQWNjZXNzaWJpbGl0eUNhY2hlSW1wbC5jcHAKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV2ViQWNjZXNzaWJpbGl0eUNhY2hlSW1wbC5oIgorCisjaW5j
bHVkZSAiQWNjZXNzaWJpbGl0eU9iamVjdC5oIgorI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIK
KyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisKKyNpbmNsdWRlICJX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0LmgiCisjaW5jbHVkZSAiV2ViRnJhbWVJbXBsLmgiCisjaW5j
bHVkZSAiV2ViVmlld0ltcGwuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitjb25zdCBpbnQgaW52YWxpZE9iamVjdElkID0gLTE7Citjb25zdCBp
bnQgZmlyc3RPYmplY3RJZCA9IDEwMDA7CisKK3N0YXRpYyBQYXNzUmVmUHRyPEFjY2Vzc2liaWxp
dHlPYmplY3Q+IHRvQWNjZXNzaWJpbGl0eU9iamVjdChjb25zdCBXZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0JiBvYmplY3QpCit7CisgICAgcmV0dXJuIG9iamVjdDsKK30KKworLy8gV2ViVmlldyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKK1dlYkFjY2Vzc2liaWxpdHlDYWNoZSogV2ViQWNjZXNzaWJpbGl0eUNhY2hlOjpjcmVh
dGUoKQoreworICAgIHJldHVybiBuZXcgV2ViQWNjZXNzaWJpbGl0eUNhY2hlSW1wbCgpOworfQor
CisvLyBXZWFrSGFuZGxlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUGFzc1JlZlB0cjxXZWJBY2Nlc3NpYmlsaXR5Q2FjaGVJ
bXBsOjpXZWFrSGFuZGxlPiBXZWJBY2Nlc3NpYmlsaXR5Q2FjaGVJbXBsOjpXZWFrSGFuZGxlOjpj
cmVhdGUoQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0KQoreworICAgIC8vIEZJWE1FOiBSZW1v
dmUgcmVzZXR0aW5nIHJlZi1jb3VudCBmcm9tIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyCisg
ICAgLy8gYW5kIGNvbnZlcnQgdG8gdXNlIGFkb3B0UmVmLgorICAgIHJldHVybiBuZXcgV2ViQWNj
ZXNzaWJpbGl0eUNhY2hlSW1wbDo6V2Vha0hhbmRsZShvYmplY3QpOworfQorCitXZWJBY2Nlc3Np
YmlsaXR5Q2FjaGVJbXBsOjpXZWFrSGFuZGxlOjpXZWFrSGFuZGxlKEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIG9iamVjdCkKKyAgICA6IEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKG9iamVjdCkKK3sK
KyAgICBtX29iamVjdC0+c2V0V3JhcHBlcih0aGlzKTsKK30KKworLy8gV2ViQWNjZXNzaWJpbGl0
eUNhY2hlSW1wbCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3Zv
aWQgV2ViQWNjZXNzaWJpbGl0eUNhY2hlSW1wbDo6V2Vha0hhbmRsZTo6ZGV0YWNoKCkKK3sKKyAg
ICBpZiAobV9vYmplY3QpCisgICAgICAgIG1fb2JqZWN0ID0gMDsKK30KKworV2ViQWNjZXNzaWJp
bGl0eUNhY2hlSW1wbDo6V2ViQWNjZXNzaWJpbGl0eUNhY2hlSW1wbCgpCisgICAgOiBtX25leHRO
ZXdJZChmaXJzdE9iamVjdElkKQorICAgICwgbV9pbml0aWFsaXplZChmYWxzZSkKK3sKK30KKwor
V2ViQWNjZXNzaWJpbGl0eUNhY2hlSW1wbDo6fldlYkFjY2Vzc2liaWxpdHlDYWNoZUltcGwoKQor
eworfQorCit2b2lkIFdlYkFjY2Vzc2liaWxpdHlDYWNoZUltcGw6OmluaXRpYWxpemUoV2ViVmll
dyogdmlldykKK3sKKyAgICBBWE9iamVjdENhY2hlOjplbmFibGVBY2Nlc3NpYmlsaXR5KCk7Cisg
ICAgV2ViQWNjZXNzaWJpbGl0eU9iamVjdCByb290ID0gdmlldy0+YWNjZXNzaWJpbGl0eU9iamVj
dCgpOworICAgIGlmIChyb290LmlzTnVsbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQ
dHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gcm9vdE9iamVjdCA9IHRvQWNjZXNzaWJpbGl0eU9iamVj
dChyb290KTsKKworICAgIC8vIEluc2VydCByb290IGluIGhhc2htYXBzLgorICAgIG1fb2JqZWN0
TWFwLnNldChtX25leHROZXdJZCwgV2Vha0hhbmRsZTo6Y3JlYXRlKHJvb3RPYmplY3QuZ2V0KCkp
KTsKKyAgICBtX2lkTWFwLnNldChyb290T2JqZWN0LmdldCgpLCBtX25leHROZXdJZCsrKTsKKwor
ICAgIG1faW5pdGlhbGl6ZWQgPSB0cnVlOworfQorCitXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0IFdl
YkFjY2Vzc2liaWxpdHlDYWNoZUltcGw6OmdldE9iamVjdEJ5SWQoaW50IGlkKQoreworICAgIE9i
amVjdE1hcDo6aXRlcmF0b3IgaXQgPSBtX29iamVjdE1hcC5maW5kKGlkKTsKKworICAgIGlmIChp
dCA9PSBtX29iamVjdE1hcC5lbmQoKSB8fCAhaXQtPnNlY29uZCkKKyAgICAgICAgcmV0dXJuIFdl
YkFjY2Vzc2liaWxpdHlPYmplY3QoKTsKKworICAgIHJldHVybiBXZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KGl0LT5zZWNvbmQtPmFjY2Vzc2liaWxpdHlPYmplY3QoKSk7Cit9CisKK2Jvb2wgV2ViQWNj
ZXNzaWJpbGl0eUNhY2hlSW1wbDo6aXNWYWxpZElkKGludCBpZCkgY29uc3QKK3sKKyAgICByZXR1
cm4gaWQgPj0gZmlyc3RPYmplY3RJZDsKK30KKwordm9pZCBXZWJBY2Nlc3NpYmlsaXR5Q2FjaGVJ
bXBsOjpyZW1vdmUoaW50IGlkKQoreworICAgIE9iamVjdE1hcDo6aXRlcmF0b3IgaXQgPSBtX29i
amVjdE1hcC5maW5kKGlkKTsKKworICAgIGlmIChpdCA9PSBtX29iamVjdE1hcC5lbmQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKGl0LT5zZWNvbmQpIHsKKyAgICAgICAgLy8gRXJhc2Ug
ZWxlbWVudCBmcm9tIHJldmVyc2UgaGFzaG1hcC4KKyAgICAgICAgSWRNYXA6Oml0ZXJhdG9yIGl0
MiA9IG1faWRNYXAuZmluZChpdC0+c2Vjb25kLT5hY2Nlc3NpYmlsaXR5T2JqZWN0KCkpOworICAg
ICAgICBpZiAoaXQyICE9IG1faWRNYXAuZW5kKCkpCisgICAgICAgICAgICBtX2lkTWFwLnJlbW92
ZShpdDIpOworICAgIH0KKworICAgIG1fb2JqZWN0TWFwLnJlbW92ZShpdCk7Cit9CisKK3ZvaWQg
V2ViQWNjZXNzaWJpbGl0eUNhY2hlSW1wbDo6Y2xlYXIoKQoreworICAgIG1fb2JqZWN0TWFwLmNs
ZWFyKCk7CisgICAgbV9pZE1hcC5jbGVhcigpOworfQorCitpbnQgV2ViQWNjZXNzaWJpbGl0eUNh
Y2hlSW1wbDo6YWRkT3JHZXRJZChjb25zdCBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0JiBvYmplY3Qp
Cit7CisgICAgaWYgKG9iamVjdC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGludmFsaWRPYmpl
Y3RJZDsKKworICAgIFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBvID0gdG9BY2Nlc3NpYmls
aXR5T2JqZWN0KG9iamVjdCk7CisKKyAgICBJZE1hcDo6aXRlcmF0b3IgaXQgPSBtX2lkTWFwLmZp
bmQoby5nZXQoKSk7CisKKyAgICBpZiAoaXQgIT0gbV9pZE1hcC5lbmQoKSkKKyAgICAgICAgcmV0
dXJuIGl0LT5zZWNvbmQ7CisKKyAgICAvLyBJbnNlcnQgbmV3IGFjY2Vzc2liaWxpdHkgb2JqZWN0
IGluIGhhc2htYXBzIGFuZCByZXR1cm4gaXRzIG5ld2x5CisgICAgLy8gYXNzaWduZWQgYWNjZXNz
aWJpbGl0eSBvYmplY3QgaWQuCisgICAgbV9vYmplY3RNYXAuc2V0KG1fbmV4dE5ld0lkLCBXZWFr
SGFuZGxlOjpjcmVhdGUoby5nZXQoKSkpOworICAgIG1faWRNYXAuc2V0KG8uZ2V0KCksIG1fbmV4
dE5ld0lkKTsKKworICAgIHJldHVybiBtX25leHROZXdJZCsrOworfQorCit9CmRpZmYgLS1naXQg
YS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkFjY2Vzc2liaWxpdHlDYWNoZUltcGwuaCBiL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViQWNjZXNzaWJpbGl0eUNhY2hlSW1wbC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhOWJmOGYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkFjY2Vzc2liaWxpdHlDYWNoZUltcGwuaApAQCAtMCwwICsxLDk2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBXZWJBY2Nlc3NpYmlsaXR5Q2FjaGVJbXBsX2gKKyNkZWZpbmUgV2ViQWNjZXNzaWJp
bGl0eUNhY2hlSW1wbF9oCisKKy8vIEZJWE1FOiBNb3ZlIHd0Zi9SZWZDb3VudGVkLmggaW5jbHVk
ZSB0byBBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5oCisvLyBvbmNlIHRoaXMgZmlsZSBpcyB1
cHN0cmVhbS4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCisjaW5jbHVkZSAiQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXIuaCIKKyNpbmNsdWRlICJXZWJBY2Nlc3NpYmlsaXR5Q2FjaGUu
aCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCisvLyBGSVhNRTogU2hvdWxkIGJlIGVsaW1pbmF0ZWQg
dG8gdXNlIEFYT2JqZWN0Q2FjaGUgaW5zdGVhZC4KK2NsYXNzIFdlYkFjY2Vzc2liaWxpdHlDYWNo
ZUltcGwgOiBwdWJsaWMgV2ViS2l0OjpXZWJBY2Nlc3NpYmlsaXR5Q2FjaGUgeworcHVibGljOgor
ICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplKFdlYlZpZXcqIHZpZXcpOworICAgIHZpcnR1YWwg
Ym9vbCBpc0luaXRpYWxpemVkKCkgY29uc3QgeyByZXR1cm4gbV9pbml0aWFsaXplZDsgfQorCisg
ICAgdmlydHVhbCBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0IGdldE9iamVjdEJ5SWQoaW50KTsKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNWYWxpZElkKGludCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgYWRk
T3JHZXRJZChjb25zdCBXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlPYmplY3QmKTsKKworICAgIHZp
cnR1YWwgdm9pZCByZW1vdmUoaW50KTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoKTsKKworcHJv
dGVjdGVkOgorICAgIGZyaWVuZCBjbGFzcyBXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlDYWNoZTsK
KworICAgIFdlYkFjY2Vzc2liaWxpdHlDYWNoZUltcGwoKTsKKyAgICB+V2ViQWNjZXNzaWJpbGl0
eUNhY2hlSW1wbCgpOworCitwcml2YXRlOgorICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBiZSBqdXN0
IHBhcnQgb2YgQ2hyb21pdW0ncyBBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci4KKyAgICBjbGFz
cyBXZWFrSGFuZGxlIDogcHVibGljIFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYWtIYW5kbGU+IGNy
ZWF0ZShXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Kik7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBkZXRhY2goKTsKKyAgICBwcml2YXRlOgorICAgICAgICBXZWFrSGFuZGxlKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlPYmplY3QqKTsKKyAgICB9OworCisgICAgdHlwZWRlZiBIYXNoTWFwPGludCwg
UmVmUHRyPFdlYWtIYW5kbGU+ID4gT2JqZWN0TWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0KiwgaW50PiBJZE1hcDsKKworICAgIC8vIEhhc2htYXAg
Zm9yIGNhY2hpbmcgb2YgZWxlbWVudHMgaW4gdXNlIGJ5IHRoZSBBVCwgbWFwcGluZyBpZCAoaW50
KSB0bworICAgIC8vIFdlYkFjY2Vzc2liaWxpdHlPYmplY3QuCisgICAgT2JqZWN0TWFwIG1fb2Jq
ZWN0TWFwOworICAgIC8vIEhhc2htYXAgZm9yIGNhY2hpbmcgb2YgZWxlbWVudHMgaW4gdXNlIGJ5
IHRoZSBBVCwgbWFwcGluZyBhCisgICAgLy8gQWNjZXNzaWJpbGl0eU9iamVjdCBwb2ludGVyIHRv
IGl0cyBpZCAoaW50KS4gTmVlZGVkIGZvciByZXZlcnNlIGxvb2t1cCwKKyAgICAvLyB0byBlbnN1
cmUgdW5uZWNlc3NhcnkgZHVwbGljYXRlIGVudHJpZXMgYXJlIG5vdCBjcmVhdGVkIGluIHRoZQor
ICAgIC8vIE9iamVjdE1hcCBhbmQgZm9yIGZvY3VzIGNoYW5nZXMgaW4gV2ViS2l0LgorICAgIElk
TWFwIG1faWRNYXA7CisKKyAgICAvLyBVbmlxdWUgaWRlbnRpZmllciBmb3IgcmV0cmlldmluZyBh
biBhY2Nlc3NpYmlsaXR5IG9iamVjdCBmcm9tIHRoZSBwYWdlJ3MKKyAgICAvLyBoYXNobWFwcy4g
SWQgaXMgYWx3YXlzIDAgZm9yIHRoZSByb290IG9mIHRoZSBhY2Nlc3NpYmlsaXR5IG9iamVjdAor
ICAgIC8vIGhpZXJhcmNoeSAob24gYSBwZXItcmVuZGVyZXIgcHJvY2VzcyBiYXNpcykuCisgICAg
aW50IG1fbmV4dE5ld0lkOworCisgICAgYm9vbCBtX2luaXRpYWxpemVkOworfTsKKworfQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3QuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ5ZmVkMDMKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3QuY3BwCkBA
IC0wLDAgKzEsNDA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkFjY2Vzc2li
aWxpdHlPYmplY3QuaCIKKworI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3QuaCIKKyNpbmNs
dWRlICJFdmVudEhhbmRsZXIuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJQ
bGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJXZWJQb2ludC5oIgorI2luY2x1ZGUg
IldlYlJlY3QuaCIKKyNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0UHJpdmF0ZSA6IHB1YmxpYyBXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0IHsKK307CisK
K3ZvaWQgV2ViQWNjZXNzaWJpbGl0eU9iamVjdDo6cmVzZXQoKQoreworICAgIGFzc2lnbigwKTsK
K30KKwordm9pZCBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0Ojphc3NpZ24oY29uc3QgV2ViS2l0OjpX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0JiBvdGhlcikKK3sKKyAgICBXZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0UHJpdmF0ZSogcCA9IGNvbnN0X2Nhc3Q8V2ViQWNjZXNzaWJpbGl0eU9iamVjdFByaXZhdGUq
PihvdGhlci5tX3ByaXZhdGUpOworICAgIGlmIChwKQorICAgICAgICBwLT5yZWYoKTsKKyAgICBh
c3NpZ24ocCk7Cit9CisKK1dlYlN0cmluZyBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0OjphY2Nlc3Np
YmlsaXR5RGVzY3JpcHRpb24oKSBjb25zdAoreworICAgIGlmICghbV9wcml2YXRlKQorICAgICAg
ICByZXR1cm4gV2ViU3RyaW5nKCk7CisKKyAgICBtX3ByaXZhdGUtPnVwZGF0ZUJhY2tpbmdTdG9y
ZSgpOworICAgIHJldHVybiBtX3ByaXZhdGUtPmFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbigpOwor
fQorCitXZWJTdHJpbmcgV2ViQWNjZXNzaWJpbGl0eU9iamVjdDo6YWN0aW9uVmVyYigpIGNvbnN0
Cit7CisgICAgaWYgKCFtX3ByaXZhdGUpCisgICAgICAgIHJldHVybiBXZWJTdHJpbmcoKTsKKwor
ICAgIG1fcHJpdmF0ZS0+dXBkYXRlQmFja2luZ1N0b3JlKCk7CisgICAgcmV0dXJuIG1fcHJpdmF0
ZS0+YWN0aW9uVmVyYigpOworfQorCitib29sIFdlYkFjY2Vzc2liaWxpdHlPYmplY3Q6OmNhblNl
dEZvY3VzQXR0cmlidXRlKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcHJpdmF0ZSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgbV9wcml2YXRlLT51cGRhdGVCYWNraW5nU3RvcmUoKTsKKyAg
ICByZXR1cm4gbV9wcml2YXRlLT5jYW5TZXRGb2N1c0F0dHJpYnV0ZSgpOworfQorCit1bnNpZ25l
ZCBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0OjpjaGlsZENvdW50KCkgY29uc3QKK3sKKyAgICBpZiAo
IW1fcHJpdmF0ZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBtX3ByaXZhdGUtPnVwZGF0ZUJh
Y2tpbmdTdG9yZSgpOworICAgIHJldHVybiBtX3ByaXZhdGUtPmNoaWxkcmVuKCkuc2l6ZSgpOwor
fQorCitXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0IFdlYkFjY2Vzc2liaWxpdHlPYmplY3Q6OmNoaWxk
QXQodW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3ByaXZhdGUpCisgICAgICAg
IHJldHVybiBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0KCk7CisKKyAgICBtX3ByaXZhdGUtPnVwZGF0
ZUJhY2tpbmdTdG9yZSgpOworICAgIGlmIChtX3ByaXZhdGUtPmNoaWxkcmVuKCkuc2l6ZSgpIDw9
IGluZGV4KQorICAgICAgICByZXR1cm4gV2ViQWNjZXNzaWJpbGl0eU9iamVjdCgpOworCisgICAg
cmV0dXJuIFdlYkFjY2Vzc2liaWxpdHlPYmplY3QobV9wcml2YXRlLT5jaGlsZHJlbigpW2luZGV4
XSk7Cit9CisKK1dlYkFjY2Vzc2liaWxpdHlPYmplY3QgV2ViQWNjZXNzaWJpbGl0eU9iamVjdDo6
Zmlyc3RDaGlsZCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3ByaXZhdGUpCisgICAgICAgIHJldHVy
biBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0KCk7CisKKyAgICBtX3ByaXZhdGUtPnVwZGF0ZUJhY2tp
bmdTdG9yZSgpOworICAgIHJldHVybiBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0KG1fcHJpdmF0ZS0+
Zmlyc3RDaGlsZCgpKTsKK30KKworV2ViQWNjZXNzaWJpbGl0eU9iamVjdCBXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0Ojpmb2N1c2VkQ2hpbGQoKSBjb25zdAoreworICAgIGlmICghbV9wcml2YXRlKQor
ICAgICAgICByZXR1cm4gV2ViQWNjZXNzaWJpbGl0eU9iamVjdCgpOworCisgICAgbV9wcml2YXRl
LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKKyAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4g
Zm9jdXNlZCA9IG1fcHJpdmF0ZS0+Zm9jdXNlZFVJRWxlbWVudCgpOworICAgIGlmIChtX3ByaXZh
dGUgPT0gZm9jdXNlZC5nZXQoKSB8fCBmb2N1c2VkLT5wYXJlbnRPYmplY3QoKSA9PSBtX3ByaXZh
dGUpCisgICAgICAgIHJldHVybiBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0KGZvY3VzZWQpOworCisg
ICAgcmV0dXJuIFdlYkFjY2Vzc2liaWxpdHlPYmplY3QoKTsKK30KKworV2ViQWNjZXNzaWJpbGl0
eU9iamVjdCBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0OjpsYXN0Q2hpbGQoKSBjb25zdAoreworICAg
IGlmICghbV9wcml2YXRlKQorICAgICAgICByZXR1cm4gV2ViQWNjZXNzaWJpbGl0eU9iamVjdCgp
OworCisgICAgbV9wcml2YXRlLT51cGRhdGVCYWNraW5nU3RvcmUoKTsKKyAgICByZXR1cm4gV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdChtX3ByaXZhdGUtPmxhc3RDaGlsZCgpKTsKK30KKworCitXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0IFdlYkFjY2Vzc2liaWxpdHlPYmplY3Q6Om5leHRTaWJsaW5nKCkg
Y29uc3QKK3sKKyAgICBpZiAoIW1fcHJpdmF0ZSkKKyAgICAgICAgcmV0dXJuIFdlYkFjY2Vzc2li
aWxpdHlPYmplY3QoKTsKKworICAgIG1fcHJpdmF0ZS0+dXBkYXRlQmFja2luZ1N0b3JlKCk7Cisg
ICAgcmV0dXJuIFdlYkFjY2Vzc2liaWxpdHlPYmplY3QobV9wcml2YXRlLT5uZXh0U2libGluZygp
KTsKK30KKworV2ViQWNjZXNzaWJpbGl0eU9iamVjdCBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpw
YXJlbnRPYmplY3QoKSBjb25zdAoreworICAgIGlmICghbV9wcml2YXRlKQorICAgICAgICByZXR1
cm4gV2ViQWNjZXNzaWJpbGl0eU9iamVjdCgpOworCisgICAgbV9wcml2YXRlLT51cGRhdGVCYWNr
aW5nU3RvcmUoKTsKKyAgICByZXR1cm4gV2ViQWNjZXNzaWJpbGl0eU9iamVjdChtX3ByaXZhdGUt
PnBhcmVudE9iamVjdCgpKTsKK30KKworCitXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0IFdlYkFjY2Vz
c2liaWxpdHlPYmplY3Q6OnByZXZpb3VzU2libGluZygpIGNvbnN0Cit7CisgICAgaWYgKCFtX3By
aXZhdGUpCisgICAgICAgIHJldHVybiBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0KCk7CisKKyAgICBt
X3ByaXZhdGUtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOworICAgIHJldHVybiBXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0KG1fcHJpdmF0ZS0+cHJldmlvdXNTaWJsaW5nKCkpOworfQorCitib29sIFdlYkFj
Y2Vzc2liaWxpdHlPYmplY3Q6OmlzQW5jaG9yKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcHJpdmF0
ZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBtX3ByaXZhdGUtPnVwZGF0ZUJhY2tpbmdTdG9y
ZSgpOworICAgIHJldHVybiBtX3ByaXZhdGUtPmlzQW5jaG9yKCk7Cit9CisKK2Jvb2wgV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdDo6aXNDaGVja2VkKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcHJpdmF0
ZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBtX3ByaXZhdGUtPnVwZGF0ZUJhY2tpbmdTdG9y
ZSgpOworICAgIHJldHVybiBtX3ByaXZhdGUtPmlzQ2hlY2tlZCgpOworfQorCisKK2Jvb2wgV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdDo6aXNGb2N1c2VkKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcHJp
dmF0ZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBtX3ByaXZhdGUtPnVwZGF0ZUJhY2tpbmdT
dG9yZSgpOworICAgIHJldHVybiBtX3ByaXZhdGUtPmlzRm9jdXNlZCgpOworfQorCitib29sIFdl
YkFjY2Vzc2liaWxpdHlPYmplY3Q6OmlzRW5hYmxlZCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3By
aXZhdGUpCisgICAgICAgIHJldHVybiAwOworCisgICAgbV9wcml2YXRlLT51cGRhdGVCYWNraW5n
U3RvcmUoKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5pc0VuYWJsZWQoKTsKK30KKworYm9vbCBX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0Ojppc0hvdmVyZWQoKSBjb25zdAoreworICAgIGlmICghbV9w
cml2YXRlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIG1fcHJpdmF0ZS0+dXBkYXRlQmFja2lu
Z1N0b3JlKCk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNIb3ZlcmVkKCk7Cit9CisKK2Jvb2wg
V2ViQWNjZXNzaWJpbGl0eU9iamVjdDo6aXNJbmRldGVybWluYXRlKCkgY29uc3QKK3sKKyAgICBp
ZiAoIW1fcHJpdmF0ZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBtX3ByaXZhdGUtPnVwZGF0
ZUJhY2tpbmdTdG9yZSgpOworICAgIHJldHVybiBtX3ByaXZhdGUtPmlzSW5kZXRlcm1pbmF0ZSgp
OworfQorCitib29sIFdlYkFjY2Vzc2liaWxpdHlPYmplY3Q6OmlzTXVsdGlTZWxlY3QoKSBjb25z
dAoreworICAgIGlmICghbV9wcml2YXRlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIG1fcHJp
dmF0ZS0+dXBkYXRlQmFja2luZ1N0b3JlKCk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNNdWx0
aVNlbGVjdCgpOworfQorCitib29sIFdlYkFjY2Vzc2liaWxpdHlPYmplY3Q6OmlzT2ZmU2NyZWVu
KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcHJpdmF0ZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBtX3ByaXZhdGUtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOworICAgIHJldHVybiBtX3ByaXZhdGUt
PmlzT2ZmU2NyZWVuKCk7Cit9CisKK2Jvb2wgV2ViQWNjZXNzaWJpbGl0eU9iamVjdDo6aXNQYXNz
d29yZEZpZWxkKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcHJpdmF0ZSkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICBtX3ByaXZhdGUtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOworICAgIHJldHVybiBt
X3ByaXZhdGUtPmlzUGFzc3dvcmRGaWVsZCgpOworfQorCitib29sIFdlYkFjY2Vzc2liaWxpdHlP
YmplY3Q6OmlzUHJlc3NlZCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3ByaXZhdGUpCisgICAgICAg
IHJldHVybiAwOworCisgICAgbV9wcml2YXRlLT51cGRhdGVCYWNraW5nU3RvcmUoKTsKKyAgICBy
ZXR1cm4gbV9wcml2YXRlLT5pc1ByZXNzZWQoKTsKK30KKworYm9vbCBXZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0Ojppc1JlYWRPbmx5KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcHJpdmF0ZSkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBtX3ByaXZhdGUtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOworICAg
IHJldHVybiBtX3ByaXZhdGUtPmlzUmVhZE9ubHkoKTsKK30KKworYm9vbCBXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0Ojppc1Zpc2l0ZWQoKSBjb25zdAoreworICAgIGlmICghbV9wcml2YXRlKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIG1fcHJpdmF0ZS0+dXBkYXRlQmFja2luZ1N0b3JlKCk7Cisg
ICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNWaXNpdGVkKCk7Cit9CisKK1dlYlJlY3QgV2ViQWNjZXNz
aWJpbGl0eU9iamVjdDo6Ym91bmRpbmdCb3hSZWN0KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcHJp
dmF0ZSkKKyAgICAgICAgcmV0dXJuIFdlYlJlY3QoKTsKKworICAgIG1fcHJpdmF0ZS0+dXBkYXRl
QmFja2luZ1N0b3JlKCk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+ZG9jdW1lbnRGcmFtZVZpZXco
KS0+Y29udGVudHNUb1dpbmRvdyhtX3ByaXZhdGUtPmJvdW5kaW5nQm94UmVjdCgpKTsKK30KKwor
V2ViU3RyaW5nIFdlYkFjY2Vzc2liaWxpdHlPYmplY3Q6OmhlbHBUZXh0KCkgY29uc3QKK3sKKyAg
ICBpZiAoIW1fcHJpdmF0ZSkKKyAgICAgICAgcmV0dXJuIFdlYlN0cmluZygpOworCisgICAgbV9w
cml2YXRlLT51cGRhdGVCYWNraW5nU3RvcmUoKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5oZWxw
VGV4dCgpOworfQorCitXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0IFdlYkFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OmhpdFRlc3QoY29uc3QgV2ViUG9pbnQmIHBvaW50KSBjb25zdAoreworICAgIGlmICghbV9w
cml2YXRlKQorICAgICAgICByZXR1cm4gV2ViQWNjZXNzaWJpbGl0eU9iamVjdCgpOworCisgICAg
bV9wcml2YXRlLT51cGRhdGVCYWNraW5nU3RvcmUoKTsKKyAgICBJbnRQb2ludCBjb250ZW50c1Bv
aW50ID0gbV9wcml2YXRlLT5kb2N1bWVudEZyYW1lVmlldygpLT53aW5kb3dUb0NvbnRlbnRzKHBv
aW50KTsKKyAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gaGl0ID0gbV9wcml2YXRlLT5k
b0FjY2Vzc2liaWxpdHlIaXRUZXN0KGNvbnRlbnRzUG9pbnQpOworCisgICAgaWYgKGhpdC5nZXQo
KSkKKyAgICAgICAgcmV0dXJuIFdlYkFjY2Vzc2liaWxpdHlPYmplY3QoaGl0KTsKKworICAgIGlm
IChtX3ByaXZhdGUtPmJvdW5kaW5nQm94UmVjdCgpLmNvbnRhaW5zKGNvbnRlbnRzUG9pbnQpKQor
ICAgICAgICByZXR1cm4gKnRoaXM7CisKKyAgICByZXR1cm4gV2ViQWNjZXNzaWJpbGl0eU9iamVj
dCgpOworfQorCitXZWJTdHJpbmcgV2ViQWNjZXNzaWJpbGl0eU9iamVjdDo6a2V5Ym9hcmRTaG9y
dGN1dCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3ByaXZhdGUpCisgICAgICAgIHJldHVybiBXZWJT
dHJpbmcoKTsKKworICAgIG1fcHJpdmF0ZS0+dXBkYXRlQmFja2luZ1N0b3JlKCk7CisgICAgU3Ry
aW5nIGFjY2Vzc0tleSA9IG1fcHJpdmF0ZS0+YWNjZXNzS2V5KCk7CisgICAgaWYgKGFjY2Vzc0tl
eS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIFdlYlN0cmluZygpOworCisgICAgc3RhdGljIFN0
cmluZyBtb2RpZmllclN0cmluZzsKKyAgICBpZiAobW9kaWZpZXJTdHJpbmcuaXNOdWxsKCkpIHsK
KyAgICAgICAgdW5zaWduZWQgbW9kaWZpZXJzID0gRXZlbnRIYW5kbGVyOjphY2Nlc3NLZXlNb2Rp
ZmllcnMoKTsKKyAgICAgICAgLy8gRm9sbG93IHRoZSBzYW1lIG9yZGVyIGFzIE1vemlsbGEgTVNB
QSBpbXBsZW1lbnRhdGlvbjoKKyAgICAgICAgLy8gQ3RybCtBbHQrU2hpZnQrTWV0YStrZXkuIE1T
RE4gc3RhdGVzIHRoYXQga2V5Ym9hcmQgc2hvcnRjdXQgc3RyaW5ncworICAgICAgICAvLyBzaG91
bGQgbm90IGJlIGxvY2FsaXplZCBhbmQgZGVmaW5lcyB0aGUgc2VwYXJhdG9yIGFzICIrIi4KKyAg
ICAgICAgaWYgKG1vZGlmaWVycyAmIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6Q3RybEtleSkKKyAg
ICAgICAgICAgIG1vZGlmaWVyU3RyaW5nICs9ICJDdHJsKyI7CisgICAgICAgIGlmIChtb2RpZmll
cnMgJiBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OkFsdEtleSkKKyAgICAgICAgICAgIG1vZGlmaWVy
U3RyaW5nICs9ICJBbHQrIjsKKyAgICAgICAgaWYgKG1vZGlmaWVycyAmIFBsYXRmb3JtS2V5Ym9h
cmRFdmVudDo6U2hpZnRLZXkpCisgICAgICAgICAgICBtb2RpZmllclN0cmluZyArPSAiU2hpZnQr
IjsKKyAgICAgICAgaWYgKG1vZGlmaWVycyAmIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6TWV0YUtl
eSkKKyAgICAgICAgICAgIG1vZGlmaWVyU3RyaW5nICs9ICJXaW4rIjsKKyAgICB9CisKKyAgICBy
ZXR1cm4gbW9kaWZpZXJTdHJpbmcgKyBhY2Nlc3NLZXk7Cit9CisKK2Jvb2wgV2ViQWNjZXNzaWJp
bGl0eU9iamVjdDo6cGVyZm9ybURlZmF1bHRBY3Rpb24oKSBjb25zdAoreworICAgIGlmICghbV9w
cml2YXRlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX3ByaXZhdGUtPnVwZGF0ZUJh
Y2tpbmdTdG9yZSgpOworICAgIHJldHVybiBtX3ByaXZhdGUtPnBlcmZvcm1EZWZhdWx0QWN0aW9u
KCk7Cit9CisKK1dlYkFjY2Vzc2liaWxpdHlSb2xlIFdlYkFjY2Vzc2liaWxpdHlPYmplY3Q6OnJv
bGVWYWx1ZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3ByaXZhdGUpCisgICAgICAgIHJldHVybiBX
ZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlSb2xlVW5rbm93bjsKKworICAgIG1fcHJpdmF0ZS0+dXBk
YXRlQmFja2luZ1N0b3JlKCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkFjY2Vzc2liaWxp
dHlSb2xlPihtX3ByaXZhdGUtPnJvbGVWYWx1ZSgpKTsKK30KKworV2ViU3RyaW5nIFdlYkFjY2Vz
c2liaWxpdHlPYmplY3Q6OnN0cmluZ1ZhbHVlKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcHJpdmF0
ZSkKKyAgICAgICAgcmV0dXJuIFdlYlN0cmluZygpOworCisgICAgbV9wcml2YXRlLT51cGRhdGVC
YWNraW5nU3RvcmUoKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5zdHJpbmdWYWx1ZSgpOworfQor
CitXZWJTdHJpbmcgV2ViQWNjZXNzaWJpbGl0eU9iamVjdDo6dGl0bGUoKSBjb25zdAoreworICAg
IGlmICghbV9wcml2YXRlKQorICAgICAgICByZXR1cm4gV2ViU3RyaW5nKCk7CisKKyAgICBtX3By
aXZhdGUtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOworICAgIHJldHVybiBtX3ByaXZhdGUtPnRpdGxl
KCk7Cit9CisKK1dlYkFjY2Vzc2liaWxpdHlPYmplY3Q6OldlYkFjY2Vzc2liaWxpdHlPYmplY3Qo
Y29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q+JiBvYmpl
Y3QpCisgICAgOiBtX3ByaXZhdGUoc3RhdGljX2Nhc3Q8V2ViQWNjZXNzaWJpbGl0eU9iamVjdFBy
aXZhdGUqPihvYmplY3QucmVsZWFzZVJlZigpKSkKK3sKK30KKworV2ViQWNjZXNzaWJpbGl0eU9i
amVjdCYgV2ViQWNjZXNzaWJpbGl0eU9iamVjdDo6b3BlcmF0b3I9KGNvbnN0IFdURjo6UGFzc1Jl
ZlB0cjxXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0PiYgb2JqZWN0KQoreworICAgIGFzc2ln
bihzdGF0aWNfY2FzdDxXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0UHJpdmF0ZSo+KG9iamVjdC5yZWxl
YXNlUmVmKCkpKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3Q6Om9wZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0
PigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFBhc3NSZWZQdHI8V2ViQ29yZTo6QWNjZXNzaWJpbGl0
eU9iamVjdD4oY29uc3RfY2FzdDxXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0UHJpdmF0ZSo+KG1fcHJp
dmF0ZSkpOworfQorCit2b2lkIFdlYkFjY2Vzc2liaWxpdHlPYmplY3Q6OmFzc2lnbihXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0UHJpdmF0ZSogcCkKK3sKKyAgICAvLyBwIGlzIGFscmVhZHkgcmVmJ2Qg
Zm9yIHVzIGJ5IHRoZSBjYWxsZXIKKyAgICBpZiAobV9wcml2YXRlKQorICAgICAgICBtX3ByaXZh
dGUtPmRlcmVmKCk7CisgICAgbV9wcml2YXRlID0gcDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42820</attachid>
            <date>2009-11-09 18:06:06 -0800</date>
            <delta_ts>2009-11-09 20:50:45 -0800</delta_ts>
            <desc>Up-streaming Chromium API src files: WebBindging ... WebCursorInfo</desc>
            <filename>bug-31276-20091109180605.patch</filename>
            <type>text/plain</type>
            <size>31329</size>
            <attacher name="Yaar Schnitman">yaar</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IGY4ZmJlMzguLmEyZTAxYzUgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMiw2ICsy
LDcwIEBACiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAKKyAgICAgICAg
VXAtc3RyZWFtaW5nIENocm9taXVtIEFQSSBzcmMgZmlsZXM6IFdlYkJpbmRnaW5nIC4uLiBXZWJD
dXJzb3JJbmZvCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTMxMjc2CisKKyAgICAgICAgKiBzcmMvV2ViQmluZGluZ3MuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6V2ViQmluZGluZ3M6OmNvbnN0cnVjdCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkJpbmRpbmdzOjpjcmVhdGVPYmplY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJCaW5kaW5nczo6
ZW51bWVyYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViQmluZGluZ3M6OmV2YWx1YXRlKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViQmluZGluZ3M6OmV2YWx1YXRlSGVscGVyKToKKyAgICAgICAgKFdl
YktpdDo6V2ViQmluZGluZ3M6OmdldEludElkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJCaW5kaW5nczo6Z2V0UHJvcGVydHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJCaW5kaW5nczo6
Z2V0U3RyaW5nSWRlbnRpZmllcik6CisgICAgICAgIChXZWJLaXQ6OldlYkJpbmRpbmdzOjpnZXRT
dHJpbmdJZGVudGlmaWVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYkJpbmRpbmdzOjpoYXNNZXRo
b2QpOgorICAgICAgICAoV2ViS2l0OjpXZWJCaW5kaW5nczo6aGFzUHJvcGVydHkpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJCaW5kaW5nczo6aWRlbnRpZmllcklzU3RyaW5nKToKKyAgICAgICAgKFdl
YktpdDo6V2ViQmluZGluZ3M6OmludEZyb21JZGVudGlmaWVyKToKKyAgICAgICAgKFdlYktpdDo6
V2ViQmluZGluZ3M6OmluaXRpYWxpemVWYXJpYW50V2l0aFN0cmluZ0NvcHkpOgorICAgICAgICAo
V2ViS2l0OjpXZWJCaW5kaW5nczo6aW52b2tlKToKKyAgICAgICAgKFdlYktpdDo6V2ViQmluZGlu
Z3M6Omludm9rZURlZmF1bHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJCaW5kaW5nczo6cmVsZWFz
ZU9iamVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkJpbmRpbmdzOjpyZWxlYXNlVmFyaWFudFZh
bHVlKToKKyAgICAgICAgKFdlYktpdDo6V2ViQmluZGluZ3M6OnJlbW92ZVByb3BlcnR5KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViQmluZGluZ3M6OnJldGFpbk9iamVjdCk6CisgICAgICAgIChXZWJL
aXQ6OldlYkJpbmRpbmdzOjpzZXRFeGNlcHRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJCaW5k
aW5nczo6c2V0UHJvcGVydHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJCaW5kaW5nczo6dW5yZWdp
c3Rlck9iamVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkJpbmRpbmdzOjp1dGY4RnJvbUlkZW50
aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJCaW5kaW5nczo6ZXh0cmFjdElkZW50aWZpZXJE
YXRhKToKKyAgICAgICAgKFdlYktpdDo6Z2V0RXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpnZXRE
cmFnRGF0YUltcGwpOgorICAgICAgICAoV2ViS2l0OjpnZXRSYW5nZUltcGwpOgorICAgICAgICAo
V2ViS2l0OjpXZWJCaW5kaW5nczo6Z2V0RHJhZ0RhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJC
aW5kaW5nczo6aXNEcmFnRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJCaW5kaW5nczo6Z2V0
UmFuZ2UpOgorICAgICAgICAqIHNyYy9XZWJDU3RyaW5nLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJLaXQ6OldlYkNTdHJpbmc6OnJlc2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ1N0cmluZzo6
YXNzaWduKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ1N0cmluZzo6bGVuZ3RoKToKKyAgICAgICAg
KFdlYktpdDo6V2ViQ1N0cmluZzo6ZGF0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNTdHJpbmc6
OnV0ZjE2KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ1N0cmluZzo6ZnJvbVVURjE2KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViQ1N0cmluZzo6V2ViQ1N0cmluZyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkNTdHJpbmc6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNTdHJpbmc6Om9wZXJh
dG9yIFdlYkNvcmU6OkNTdHJpbmcpOgorICAgICAgICAqIHNyYy9XZWJDYWNoZS5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViS2l0OjpUb1Jlc291cmNlVHlwZVN0YXQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJDYWNoZTo6c2V0Q2FwYWNpdGllcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNhY2hlOjpj
bGVhcik6CisgICAgICAgIChXZWJLaXQ6OldlYkNhY2hlOjpnZXRVc2FnZVN0YXRzKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViQ2FjaGU6OmdldFJlc291cmNlVHlwZVN0YXRzKToKKyAgICAgICAgKiBz
cmMvV2ViQ29sb3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6dG9DU1NWYWx1ZUtleXdv
cmQpOgorICAgICAgICAoV2ViS2l0OjpzZXROYW1lZENvbG9ycyk6CisgICAgICAgICogc3JjL1dl
YkNyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YktpdDo6V2ViQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZTo6Y2xlYXIpOgorICAgICAg
ICAqIHNyYy9XZWJDdXJzb3JJbmZvLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkN1
cnNvckluZm86OldlYkN1cnNvckluZm8pOgorCisyMDA5LTExLTA5ICBZYWFyIFNjaG5pdG1hbiAg
PHlhYXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCiAgICAgICAgIFVwLXN0cmVhbWluZyBDaHJvbWl1bSBBUEkgc3JjIGZpbGVzOiBXZWJBY2Nl
c3NpYmlsdHkKIAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MzEyNzYKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQmluZGluZ3MuY3Bw
IGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJCaW5kaW5ncy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNzM5OTNiNgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViQmluZGluZ3MuY3BwCkBAIC0wLDAgKzEsMzIyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIldlYkJpbmRpbmdzLmgiCisKKyNpbmNsdWRlICJucHJ1bnRpbWVfaW1w
bC5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9wcml2LmgiCisjaW5jbHVkZSAid2Via2l0L2FwaS9w
dWJsaWMvV2ViRHJhZ0RhdGEuaCIKKyNpbmNsdWRlICJ3ZWJraXQvYXBpL3B1YmxpYy9XZWJSYW5n
ZS5oIgorCisjaWYgVVNFKFY4KQorI2luY2x1ZGUgIkNocm9taXVtRGF0YU9iamVjdC5oIgorI2lu
Y2x1ZGUgIkNsaXBib2FyZENocm9taXVtLmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2lu
Y2x1ZGUgIk1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJOUFY4T2JqZWN0LmgiICAvLyBmb3IgUHJp
dmF0ZUlkZW50aWZpZXIKKyNpbmNsdWRlICJSYW5nZS5oIgorI2luY2x1ZGUgIlY4RE9NV3JhcHBl
ci5oIgorI2luY2x1ZGUgIlY4SGVscGVycy5oIgorI2luY2x1ZGUgIlY4UHJveHkuaCIKKyNlbGlm
IFVTRShKU0MpCisjaW5jbHVkZSAiYnJpZGdlL2MvY191dGlsaXR5LmgiCisjZW5kaWYKKworI2lm
IFVTRShKQVZBU0NSSVBUQ09SRV9CSU5ESU5HUykKK3VzaW5nIEpTQzo6QmluZGluZ3M6OlByaXZh
dGVJZGVudGlmaWVyOworI2VuZGlmCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1l
c3BhY2UgV2ViS2l0IHsKKworYm9vbCBXZWJCaW5kaW5nczo6Y29uc3RydWN0KE5QUCBucHAsIE5Q
T2JqZWN0ICpucG9iaiwgY29uc3QgTlBWYXJpYW50ICphcmdzLCB1aW50MzJfdCBhcmdDb3VudCwg
TlBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmV0dXJuIF9OUE5fQ29uc3RydWN0KG5wcCwgbnBv
YmosIGFyZ3MsIGFyZ0NvdW50LCByZXN1bHQpOworfQorCitOUE9iamVjdCogV2ViQmluZGluZ3M6
OmNyZWF0ZU9iamVjdChOUFAgbnBwLCBOUENsYXNzKiBucENsYXNzKQoreworICAgIHJldHVybiBf
TlBOX0NyZWF0ZU9iamVjdChucHAsIG5wQ2xhc3MpOworfQorCitib29sIFdlYkJpbmRpbmdzOjpl
bnVtZXJhdGUoTlBQIGlkLCBOUE9iamVjdCogb2JqLCBOUElkZW50aWZpZXIqKiBpZGVudGlmaWVy
LCB1aW50MzJfdCogdmFsKQoreworICAgIHJldHVybiBfTlBOX0VudW1lcmF0ZShpZCwgb2JqLCBp
ZGVudGlmaWVyLCB2YWwpOworfQorCitib29sIFdlYkJpbmRpbmdzOjpldmFsdWF0ZShOUFAgbnBw
LCBOUE9iamVjdCogbnBPYmplY3QsIE5QU3RyaW5nKiBucFNjcmlwdCwgTlBWYXJpYW50KiByZXN1
bHQpCit7CisgICAgcmV0dXJuIF9OUE5fRXZhbHVhdGUobnBwLCBucE9iamVjdCwgbnBTY3JpcHQs
IHJlc3VsdCk7Cit9CisKK2Jvb2wgV2ViQmluZGluZ3M6OmV2YWx1YXRlSGVscGVyKE5QUCBucHAs
IGJvb2wgcG9wdXBzX2FsbG93ZWQsIE5QT2JqZWN0KiBucG9iaiwgTlBTdHJpbmcqIG5wc2NyaXB0
LCBOUFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXR1cm4gX05QTl9FdmFsdWF0ZUhlbHBlcihu
cHAsIHBvcHVwc19hbGxvd2VkLCBucG9iaiwgbnBzY3JpcHQsIHJlc3VsdCk7Cit9CisKK05QSWRl
bnRpZmllciBXZWJCaW5kaW5nczo6Z2V0SW50SWRlbnRpZmllcihpbnQzMl90IG51bWJlcikKK3sK
KyAgICByZXR1cm4gX05QTl9HZXRJbnRJZGVudGlmaWVyKG51bWJlcik7Cit9CisKK2Jvb2wgV2Vi
QmluZGluZ3M6OmdldFByb3BlcnR5KE5QUCBucHAsIE5QT2JqZWN0KiBvYmosIE5QSWRlbnRpZmll
ciBwcm9wZXJ0eU5hbWUsIE5QVmFyaWFudCAqcmVzdWx0KQoreworICAgIHJldHVybiBfTlBOX0dl
dFByb3BlcnR5KG5wcCwgb2JqLCBwcm9wZXJ0eU5hbWUsIHJlc3VsdCk7Cit9CisKK05QSWRlbnRp
ZmllciBXZWJCaW5kaW5nczo6Z2V0U3RyaW5nSWRlbnRpZmllcihjb25zdCBOUFVURjgqIHN0cmlu
ZykKK3sKKyAgICByZXR1cm4gX05QTl9HZXRTdHJpbmdJZGVudGlmaWVyKHN0cmluZyk7Cit9CisK
K3ZvaWQgV2ViQmluZGluZ3M6OmdldFN0cmluZ0lkZW50aWZpZXJzKGNvbnN0IE5QVVRGOCoqIG5h
bWVzLCBpbnQzMl90IG5hbWVDb3VudCwgTlBJZGVudGlmaWVyKiBpZGVudGlmaWVycykKK3sKKyAg
ICBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXJzKG5hbWVzLCBuYW1lQ291bnQsIGlkZW50aWZpZXJz
KTsKK30KKworYm9vbCBXZWJCaW5kaW5nczo6aGFzTWV0aG9kKE5QUCBucHAsIE5QT2JqZWN0KiBu
cE9iamVjdCwgTlBJZGVudGlmaWVyIG1ldGhvZE5hbWUpCit7CisgICAgcmV0dXJuIF9OUE5fSGFz
TWV0aG9kKG5wcCwgbnBPYmplY3QsIG1ldGhvZE5hbWUpOworfQorCitib29sIFdlYkJpbmRpbmdz
OjpoYXNQcm9wZXJ0eShOUFAgbnBwLCBOUE9iamVjdCogbnBPYmplY3QsIE5QSWRlbnRpZmllciBw
cm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIF9OUE5fSGFzUHJvcGVydHkobnBwLCBucE9iamVj
dCwgcHJvcGVydHlOYW1lKTsKK30KKworYm9vbCBXZWJCaW5kaW5nczo6aWRlbnRpZmllcklzU3Ry
aW5nKE5QSWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAgIHJldHVybiBfTlBOX0lkZW50aWZp
ZXJJc1N0cmluZyhpZGVudGlmaWVyKTsKK30KKworaW50MzJfdCBXZWJCaW5kaW5nczo6aW50RnJv
bUlkZW50aWZpZXIoTlBJZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgcmV0dXJuIF9OUE5f
SW50RnJvbUlkZW50aWZpZXIoaWRlbnRpZmllcik7Cit9CisKK3ZvaWQgV2ViQmluZGluZ3M6Omlu
aXRpYWxpemVWYXJpYW50V2l0aFN0cmluZ0NvcHkoTlBWYXJpYW50KiB2YXJpYW50LCBjb25zdCBO
UFN0cmluZyogdmFsdWUpCit7CisjaWYgVVNFKFY4KQorICAgIF9OUE5fSW5pdGlhbGl6ZVZhcmlh
bnRXaXRoU3RyaW5nQ29weSh2YXJpYW50LCB2YWx1ZSk7CisjZWxzZQorICAgIE5QTl9Jbml0aWFs
aXplVmFyaWFudFdpdGhTdHJpbmdDb3B5KHZhcmlhbnQsIHZhbHVlKTsKKyNlbmRpZgorfQorCiti
b29sIFdlYkJpbmRpbmdzOjppbnZva2UoTlBQIG5wcCwgTlBPYmplY3QqIG5wT2JqZWN0LCBOUElk
ZW50aWZpZXIgbWV0aG9kTmFtZSwgY29uc3QgTlBWYXJpYW50KiBhcmd1bWVudHMsIHVpbnQzMl90
IGFyZ3VtZW50Q291bnQsIE5QVmFyaWFudCogcmVzdWx0KQoreworICAgIHJldHVybiBfTlBOX0lu
dm9rZShucHAsIG5wT2JqZWN0LCBtZXRob2ROYW1lLCBhcmd1bWVudHMsIGFyZ3VtZW50Q291bnQs
IHJlc3VsdCk7Cit9CisKK2Jvb2wgV2ViQmluZGluZ3M6Omludm9rZURlZmF1bHQoTlBQIGlkLCBO
UE9iamVjdCogb2JqLCBjb25zdCBOUFZhcmlhbnQqIGFyZ3MsIHVpbnQzMl90IGNvdW50LCBOUFZh
cmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXR1cm4gX05QTl9JbnZva2VEZWZhdWx0KGlkLCBvYmos
IGFyZ3MsIGNvdW50LCByZXN1bHQpOworfQorCit2b2lkIFdlYkJpbmRpbmdzOjpyZWxlYXNlT2Jq
ZWN0KE5QT2JqZWN0KiBucE9iamVjdCkKK3sKKyAgICByZXR1cm4gX05QTl9SZWxlYXNlT2JqZWN0
KG5wT2JqZWN0KTsKK30KKwordm9pZCBXZWJCaW5kaW5nczo6cmVsZWFzZVZhcmlhbnRWYWx1ZShO
UFZhcmlhbnQqIHZhcmlhbnQpCit7CisgICAgX05QTl9SZWxlYXNlVmFyaWFudFZhbHVlKHZhcmlh
bnQpOworfQorCitib29sIFdlYkJpbmRpbmdzOjpyZW1vdmVQcm9wZXJ0eShOUFAgaWQsIE5QT2Jq
ZWN0KiBvYmplY3QsIE5QSWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAgIHJldHVybiAgX05Q
Tl9SZW1vdmVQcm9wZXJ0eShpZCwgb2JqZWN0LCBpZGVudGlmaWVyKTsKK30KKworTlBPYmplY3Qq
IFdlYkJpbmRpbmdzOjpyZXRhaW5PYmplY3QoTlBPYmplY3QqIG5wT2JqZWN0KQoreworICAgIHJl
dHVybiBfTlBOX1JldGFpbk9iamVjdChucE9iamVjdCk7Cit9CisKK3ZvaWQgV2ViQmluZGluZ3M6
OnNldEV4Y2VwdGlvbihOUE9iamVjdCogb2JqLCBjb25zdCBOUFVURjgqIG1lc3NhZ2UpCit7Cisg
ICAgX05QTl9TZXRFeGNlcHRpb24ob2JqLCBtZXNzYWdlKTsKK30KKworYm9vbCBXZWJCaW5kaW5n
czo6c2V0UHJvcGVydHkoTlBQIGlkLCBOUE9iamVjdCogb2JqLCBOUElkZW50aWZpZXIgaWRlbnRp
ZmllciwgY29uc3QgTlBWYXJpYW50KiB2YXJpYW50KQoreworICAgIHJldHVybiBfTlBOX1NldFBy
b3BlcnR5KGlkLCBvYmosIGlkZW50aWZpZXIsIHZhcmlhbnQpOworfQorCit2b2lkIFdlYkJpbmRp
bmdzOjp1bnJlZ2lzdGVyT2JqZWN0KE5QT2JqZWN0KiBucE9iamVjdCkKK3sKKyNpZiBVU0UoVjgp
CisgICAgX05QTl9VbnJlZ2lzdGVyT2JqZWN0KG5wT2JqZWN0KTsKKyNlbmRpZgorfQorCitOUFVU
RjgqIFdlYkJpbmRpbmdzOjp1dGY4RnJvbUlkZW50aWZpZXIoTlBJZGVudGlmaWVyIGlkZW50aWZp
ZXIpCit7CisgICAgcmV0dXJuIF9OUE5fVVRGOEZyb21JZGVudGlmaWVyKGlkZW50aWZpZXIpOwor
fQorCit2b2lkIFdlYkJpbmRpbmdzOjpleHRyYWN0SWRlbnRpZmllckRhdGEoY29uc3QgTlBJZGVu
dGlmaWVyJiBpZGVudGlmaWVyLCBjb25zdCBOUFVURjgqJiBzdHJpbmcsIGludDMyX3QmIG51bWJl
ciwgYm9vbCYgaXNTdHJpbmcpCit7CisgICAgUHJpdmF0ZUlkZW50aWZpZXIqIHByaXYgPSBzdGF0
aWNfY2FzdDxQcml2YXRlSWRlbnRpZmllcio+KGlkZW50aWZpZXIpOworICAgIGlmICghcHJpdikg
eworICAgICAgICBpc1N0cmluZyA9IGZhbHNlOworICAgICAgICBudW1iZXIgPSAwOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaXNTdHJpbmcgPSBwcml2LT5pc1N0cmluZzsKKyAgICBp
ZiAoaXNTdHJpbmcpCisgICAgICAgIHN0cmluZyA9IHByaXYtPnZhbHVlLnN0cmluZzsKKyAgICBl
bHNlCisgICAgICAgIG51bWJlciA9IHByaXYtPnZhbHVlLm51bWJlcjsKK30KKworI2lmIFVTRShW
OCkKKworc3RhdGljIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGdldEV2ZW50KGNvbnN0IHY4OjpIYW5k
bGU8djg6OkNvbnRleHQ+JiBjb250ZXh0KQoreworICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2
ODo6U3RyaW5nPiBldmVudFN5bWJvbCh2ODo6UGVyc2lzdGVudDx2ODo6U3RyaW5nPjo6TmV3KHY4
OjpTdHJpbmc6Ok5ld1N5bWJvbCgiZXZlbnQiKSkpOworICAgIHJldHVybiBjb250ZXh0LT5HbG9i
YWwoKS0+R2V0SGlkZGVuVmFsdWUoZXZlbnRTeW1ib2wpOworfQorCitzdGF0aWMgYm9vbCBnZXRE
cmFnRGF0YUltcGwoTlBPYmplY3QqIG5wb2JqLCBpbnQqIGV2ZW50SWQsIFdlYkRyYWdEYXRhKiBk
YXRhKQoreworICAgIGlmICghbnBvYmopCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
bnBvYmotPl9jbGFzcyAhPSBucFNjcmlwdE9iamVjdENsYXNzKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CisgICAgdjg6OkhhbmRsZTx2
ODo6Q29udGV4dD4gY29udGV4dCA9IHY4OjpDb250ZXh0OjpHZXRFbnRlcmVkKCk7CisgICAgaWYg
KGNvbnRleHQuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBHZXQg
dGhlIGN1cnJlbnQgV2ViQ29yZSBldmVudC4KKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY3Vy
cmVudEV2ZW50KGdldEV2ZW50KGNvbnRleHQpKTsKKyAgICBFdmVudCogZXZlbnQgPSBWOERPTVdy
YXBwZXI6OmNvbnZlcnRUb05hdGl2ZUV2ZW50KGN1cnJlbnRFdmVudCk7CisgICAgaWYgKCFldmVu
dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gQ2hlY2sgdGhhdCB0aGUgZ2l2ZW4g
bnBvYmogaXMgdGhhdCBldmVudC4KKyAgICBWOE5QT2JqZWN0KiBvYmplY3QgPSByZWludGVycHJl
dF9jYXN0PFY4TlBPYmplY3QqPihucG9iaik7CisgICAgRXZlbnQqIGdpdmVuID0gVjhET01XcmFw
cGVyOjpjb252ZXJ0VG9OYXRpdmVFdmVudChvYmplY3QtPnY4T2JqZWN0KTsKKyAgICBpZiAoZ2l2
ZW4gIT0gZXZlbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIENoZWNrIHRoZSBl
eGVjdXRpb24gZnJhbWVzIGFyZSBzYW1lIG9yaWdpbi4KKyAgICBWOFByb3h5KiBjdXJyZW50ID0g
VjhQcm94eTo6cmV0cmlldmUoVjhQcm94eTo6cmV0cmlldmVGcmFtZUZvckN1cnJlbnRDb250ZXh0
KCkpOworICAgIEZyYW1lKiBmcmFtZSA9IFY4UHJveHk6OnJldHJpZXZlRnJhbWUoY29udGV4dCk7
CisgICAgaWYgKCFjdXJyZW50IHx8ICFjdXJyZW50LT5jYW5BY2Nlc3NGcmFtZShmcmFtZSwgZmFs
c2UpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBFdmVudE5hbWVzJiBuYW1l
cyhldmVudE5hbWVzKCkpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKGV2ZW50
LT50eXBlKCkpOworCisgICAgZW51bSBEcmFnVGFyZ2V0TW91c2VFdmVudElkIHsKKyAgICAgICAg
RHJhZ0VudGVySWQgPSAxLCBEcmFnT3ZlcklkID0gMiwgRHJhZ0xlYXZlSWQgPSAzLCBEcm9wSWQg
PSA0CisgICAgfTsKKworICAgIC8vIFRoZSBldmVudCB0eXBlIHNob3VsZCBiZSBhIGRyYWcgZXZl
bnQuCisgICAgaWYgKGV2ZW50VHlwZSA9PSBuYW1lcy5kcmFnZW50ZXJFdmVudCkKKyAgICAgICAg
KmV2ZW50SWQgPSBEcmFnRW50ZXJJZDsKKyAgICBlbHNlIGlmIChldmVudFR5cGUgPT0gbmFtZXMu
ZHJhZ292ZXJFdmVudCkKKyAgICAgICAgKmV2ZW50SWQgPSBEcmFnT3ZlcklkOworICAgIGVsc2Ug
aWYgKGV2ZW50VHlwZSA9PSBuYW1lcy5kcmFnbGVhdmVFdmVudCkKKyAgICAgICAgKmV2ZW50SWQg
PSBEcmFnTGVhdmVJZDsKKyAgICBlbHNlIGlmIChldmVudFR5cGUgPT0gbmFtZXMuZHJvcEV2ZW50
KQorICAgICAgICAqZXZlbnRJZCA9IERyb3BJZDsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIC8vIERyYWcgZXZlbnRzIGFyZSBtb3VzZSBldmVudHMgYW5kIHNob3VsZCBo
YXZlIGEgY2xpcGJvYXJkLgorICAgIE1vdXNlRXZlbnQqIG1lID0gc3RhdGljX2Nhc3Q8TW91c2VF
dmVudCo+KGV2ZW50KTsKKyAgICBDbGlwYm9hcmQqIGNsaXBib2FyZCA9IG1lLT5jbGlwYm9hcmQo
KTsKKyAgICBpZiAoIWNsaXBib2FyZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8g
QW5kIHRoYXQgY2xpcGJvYXJkIHNob3VsZCBiZSBhY2Nlc3NpYmxlIGJ5IFdlYktpdCBwb2xpY3ku
CisgICAgQ2xpcGJvYXJkQ2hyb21pdW0qIGNocm9tZSA9IHN0YXRpY19jYXN0PENsaXBib2FyZENo
cm9taXVtKj4oY2xpcGJvYXJkKTsKKyAgICBIYXNoU2V0PFN0cmluZz4gYWNjZXNzaWJsZShjaHJv
bWUtPnR5cGVzKCkpOworICAgIGlmIChhY2Nlc3NpYmxlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgUmVmUHRyPENocm9taXVtRGF0YU9iamVjdD4gZGF0YU9iamVjdChj
aHJvbWUtPmRhdGFPYmplY3QoKSk7CisgICAgaWYgKGRhdGFPYmplY3QgJiYgZGF0YSkKKyAgICAg
ICAgKmRhdGEgPSBXZWJEcmFnRGF0YShkYXRhT2JqZWN0KTsKKworICAgIHJldHVybiBkYXRhT2Jq
ZWN0OworfQorCitzdGF0aWMgYm9vbCBnZXRSYW5nZUltcGwoTlBPYmplY3QqIG5wb2JqLCBXZWJS
YW5nZSogcmFuZ2UpCit7CisgICAgVjhOUE9iamVjdCogdjhucG9iamVjdCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8VjhOUE9iamVjdCo+KG5wb2JqKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHY4
b2JqZWN0KHY4bnBvYmplY3QtPnY4T2JqZWN0KTsKKyAgICBpZiAoVjhDbGFzc0luZGV4OjpSQU5H
RSAhPSBWOERPTVdyYXBwZXI6OmRvbVdyYXBwZXJUeXBlKHY4b2JqZWN0KSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgUmFuZ2UqIG5hdGl2ZSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRv
TmF0aXZlT2JqZWN0PFdlYkNvcmU6OlJhbmdlPihWOENsYXNzSW5kZXg6OlJBTkdFLCB2OG9iamVj
dCk7CisgICAgaWYgKCFuYXRpdmUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICpyYW5n
ZSA9IFdlYlJhbmdlKG5hdGl2ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKyNlbmRpZgorCiti
b29sIFdlYkJpbmRpbmdzOjpnZXREcmFnRGF0YShOUE9iamVjdCogZXZlbnQsIGludCogZXZlbnRJ
ZCwgV2ViRHJhZ0RhdGEqIGRhdGEpCit7CisjaWYgVVNFKFY4KQorICAgIHJldHVybiBnZXREcmFn
RGF0YUltcGwoZXZlbnQsIGV2ZW50SWQsIGRhdGEpOworI2Vsc2UKKyAgICAvLyBOb3Qgc3VwcG9y
dGVkIG9uIG90aGVyIHBvcnRzIChKU0MsIGV0YykuCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlm
Cit9CisKK2Jvb2wgV2ViQmluZGluZ3M6OmlzRHJhZ0V2ZW50KE5QT2JqZWN0KiBldmVudCkKK3sK
KyAgICBpbnQgZXZlbnRJZDsKKyAgICByZXR1cm4gZ2V0RHJhZ0RhdGEoZXZlbnQsICZldmVudElk
LCAwKTsKK30KKworYm9vbCBXZWJCaW5kaW5nczo6Z2V0UmFuZ2UoTlBPYmplY3QqIHJhbmdlLCBX
ZWJSYW5nZSogd2VicmFuZ2UpCit7CisjaWYgVVNFKFY4KQorICAgIHJldHVybiBnZXRSYW5nZUlt
cGwocmFuZ2UsIHdlYnJhbmdlKTsKKyNlbHNlCisgICAgLy8gTm90IHN1cHBvcnRlZCBvbiBvdGhl
ciBwb3J0cyAoSlNDLCBldGMpLgorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ1N0
cmluZy5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNTdHJpbmcuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyZmJhYzAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkNTdHJpbmcuY3BwCkBAIC0wLDAgKzEsMTI4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkNTdHJpbmcuaCIKKworI2luY2x1ZGUgIkNTdHJpbmcu
aCIKKyNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKKworI2luY2x1ZGUgIldlYlN0cmluZy5oIgor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViQ1N0cmluZ1ByaXZhdGUgOiBwdWJsaWMg
V2ViQ29yZTo6Q1N0cmluZ0J1ZmZlciB7Cit9OworCit2b2lkIFdlYkNTdHJpbmc6OnJlc2V0KCkK
K3sKKyAgICBpZiAobV9wcml2YXRlKSB7CisgICAgICAgIG1fcHJpdmF0ZS0+ZGVyZWYoKTsKKyAg
ICAgICAgbV9wcml2YXRlID0gMDsKKyAgICB9Cit9CisKK3ZvaWQgV2ViQ1N0cmluZzo6YXNzaWdu
KGNvbnN0IFdlYkNTdHJpbmcmIG90aGVyKQoreworICAgIGFzc2lnbihjb25zdF9jYXN0PFdlYkNT
dHJpbmdQcml2YXRlKj4ob3RoZXIubV9wcml2YXRlKSk7Cit9CisKK3ZvaWQgV2ViQ1N0cmluZzo6
YXNzaWduKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpCit7CisgICAgY2hhciogbmV3
RGF0YTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Q1N0cmluZ0J1ZmZlcj4gYnVmZmVyID0KKyAgICAg
ICAgV2ViQ29yZTo6Q1N0cmluZzo6bmV3VW5pbml0aWFsaXplZChsZW5ndGgsIG5ld0RhdGEpLmJ1
ZmZlcigpOworICAgIG1lbWNweShuZXdEYXRhLCBkYXRhLCBsZW5ndGgpOworICAgIGFzc2lnbihz
dGF0aWNfY2FzdDxXZWJDU3RyaW5nUHJpdmF0ZSo+KGJ1ZmZlci5nZXQoKSkpOworfQorCitzaXpl
X3QgV2ViQ1N0cmluZzo6bGVuZ3RoKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcHJpdmF0ZSkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgLy8gTk9URTogVGhlIGJ1ZmZlcidzIGxlbmd0aCBpbmNsdWRl
cyB0aGUgbnVsbCBieXRlLgorICAgIHJldHVybiBjb25zdF9jYXN0PFdlYkNTdHJpbmdQcml2YXRl
Kj4obV9wcml2YXRlKS0+bGVuZ3RoKCkgLSAxOworfQorCitjb25zdCBjaGFyKiBXZWJDU3RyaW5n
OjpkYXRhKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcHJpdmF0ZSkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8V2ViQ1N0cmluZ1ByaXZhdGUqPihtX3ByaXZhdGUpLT5k
YXRhKCk7Cit9CisKK1dlYlN0cmluZyBXZWJDU3RyaW5nOjp1dGYxNigpIGNvbnN0Cit7CisgICAg
cmV0dXJuIFdlYkNvcmU6OlVURjhFbmNvZGluZygpLmRlY29kZShkYXRhKCksIGxlbmd0aCgpKTsK
K30KKworV2ViQ1N0cmluZyBXZWJDU3RyaW5nOjpmcm9tVVRGMTYoY29uc3QgV2ViVUNoYXIqIGRh
dGEsIHNpemVfdCBsZW5ndGgpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6OlVURjhFbmNvZGluZygp
LmVuY29kZSgKKyAgICAgICAgZGF0YSwgbGVuZ3RoLCBXZWJDb3JlOjpRdWVzdGlvbk1hcmtzRm9y
VW5lbmNvZGFibGVzKTsKK30KKworV2ViQ1N0cmluZyBXZWJDU3RyaW5nOjpmcm9tVVRGMTYoY29u
c3QgV2ViVUNoYXIqIGRhdGEpCit7CisgICAgc2l6ZV90IGxlbiA9IDA7CisgICAgd2hpbGUgKGRh
dGFbbGVuXSAhPSBXZWJVQ2hhcigwKSkKKyAgICAgICAgbGVuKys7CisgICAgcmV0dXJuIGZyb21V
VEYxNihkYXRhLCBsZW4pOworfQorCitXZWJDU3RyaW5nOjpXZWJDU3RyaW5nKGNvbnN0IFdlYkNv
cmU6OkNTdHJpbmcmIHMpCisgICAgOiBtX3ByaXZhdGUoc3RhdGljX2Nhc3Q8V2ViQ1N0cmluZ1By
aXZhdGUqPihzLmJ1ZmZlcigpKSkKK3sKKyAgICBpZiAobV9wcml2YXRlKQorICAgICAgICBtX3By
aXZhdGUtPnJlZigpOworfQorCitXZWJDU3RyaW5nJiBXZWJDU3RyaW5nOjpvcGVyYXRvcj0oY29u
c3QgV2ViQ29yZTo6Q1N0cmluZyYgcykKK3sKKyAgICBhc3NpZ24oc3RhdGljX2Nhc3Q8V2ViQ1N0
cmluZ1ByaXZhdGUqPihzLmJ1ZmZlcigpKSk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitXZWJD
U3RyaW5nOjpvcGVyYXRvciBXZWJDb3JlOjpDU3RyaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9wcml2YXRlOworfQorCit2b2lkIFdlYkNTdHJpbmc6OmFzc2lnbihXZWJDU3RyaW5nUHJpdmF0
ZSogcCkKK3sKKyAgICAvLyBUYWtlIGNhcmUgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIG1fcHJp
dmF0ZSA9PSBwCisgICAgaWYgKHApCisgICAgICAgIHAtPnJlZigpOworICAgIGlmIChtX3ByaXZh
dGUpCisgICAgICAgIG1fcHJpdmF0ZS0+ZGVyZWYoKTsKKyAgICBtX3ByaXZhdGUgPSBwOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViQ2FjaGUuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDYWNoZS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQwM2E0ZAotLS0gL2Rldi9udWxsCisrKyBiL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViQ2FjaGUuY3BwCkBAIC0wLDAgKzEsMTE1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkNhY2hlLmgiCisKKy8vIEluc3RlYWQgb2YgcHJvdmlk
aW5nIGFjY2Vzc29ycywgd2UgbWFrZSBhbGwgbWVtYmVycyBvZiBDYWNoZSBwdWJsaWMuCisvLyBU
aGlzIHdpbGwgbWFrZSBpdCBlYXNpZXIgdG8gdHJhY2sgV2ViQ29yZSBjaGFuZ2VzIHRvIHRoZSBD
YWNoZSBjbGFzcy4KKy8vIEZJWE1FOiBXZSBzaG91bGQgaW50cm9kdWNlIHB1YmxpYyBnZXR0ZXJz
IG9uIHRoZSBDYWNoZSBjbGFzcy4KKyNkZWZpbmUgcHJpdmF0ZSBwdWJsaWMKKyNpbmNsdWRlICJD
YWNoZS5oIgorI3VuZGVmIHByaXZhdGUKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCisvLyBBIGhlbHBlciBtZXRob2QgZm9yIGNvdmVydGluZyBhIENh
Y2hlOjpUeXBlU3RhdGlzdGljIHRvIGEKKy8vIFdlYkNhY2hlOjpSZXNvdXJjZVR5cGVTdGF0Lgor
c3RhdGljIHZvaWQgVG9SZXNvdXJjZVR5cGVTdGF0KGNvbnN0IENhY2hlOjpUeXBlU3RhdGlzdGlj
JiBmcm9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYkNhY2hlOjpSZXNvdXJj
ZVR5cGVTdGF0JiB0bykKK3sKKyAgICB0by5jb3VudCA9IHN0YXRpY19jYXN0PHNpemVfdD4oZnJv
bS5jb3VudCk7CisgICAgdG8uc2l6ZSA9IHN0YXRpY19jYXN0PHNpemVfdD4oZnJvbS5zaXplKTsK
KyAgICB0by5saXZlU2l6ZSA9IHN0YXRpY19jYXN0PHNpemVfdD4oZnJvbS5saXZlU2l6ZSk7Cisg
ICAgdG8uZGVjb2RlZFNpemUgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGZyb20uZGVjb2RlZFNpemUp
OworfQorCit2b2lkIFdlYkNhY2hlOjpzZXRDYXBhY2l0aWVzKAorICAgIHNpemVfdCBtaW5EZWFk
Q2FwYWNpdHksIHNpemVfdCBtYXhEZWFkQ2FwYWNpdHksIHNpemVfdCBjYXBhY2l0eSkKK3sKKyAg
ICBDYWNoZSogY2FjaGUgPSBXZWJDb3JlOjpjYWNoZSgpOworICAgIGlmIChjYWNoZSkKKyAgICAg
ICAgY2FjaGUtPnNldENhcGFjaXRpZXMoc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihtaW5EZWFk
Q2FwYWNpdHkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBpbnQ+KG1heERlYWRDYXBhY2l0eSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oY2FwYWNpdHkpKTsKK30KKwordm9pZCBXZWJDYWNo
ZTo6Y2xlYXIoKQoreworICAgIENhY2hlKiBjYWNoZSA9IFdlYkNvcmU6OmNhY2hlKCk7CisgICAg
aWYgKGNhY2hlICYmICFjYWNoZS0+ZGlzYWJsZWQoKSkgeworICAgICAgICAvLyBOT1RFOiBJIHRo
aW5rIHVzaW5nIHNldERpc2FibGVkKCkgaW5zdGVhZCBvZiBzZXRDYXBhY2l0aWVzKCkgd2lsbAor
ICAgICAgICAvLyByZW1vdmUgZnJvbSB0aGUgY2FjaGUgaXRlbXMgdGhhdCB3b24ndCBhY3R1YWxs
eSBiZSBmcmVlZCBmcm9tIG1lbW9yeQorICAgICAgICAvLyAoZHVlIHRvIG90aGVyIGxpdmUgcmVm
ZXJlbmNlcyB0byB0aGVtKSwgc28gaXQganVzdCByZXN1bHRzIGluIHdhc3RpbmcKKyAgICAgICAg
Ly8gdGltZSBsYXRlciBhbmQgbm90IHNhdmluZyBtZW1vcnkgY29tcGFyZWQgdG8gdGhlIGJlbG93
IHRlY2huaXF1ZS4KKyAgICAgICAgdW5zaWduZWQgbWluRGVhZENhcGFjaXR5ID0gY2FjaGUtPm1f
bWluRGVhZENhcGFjaXR5OworICAgICAgICB1bnNpZ25lZCBtYXhEZWFkQ2FwYWNpdHkgPSBjYWNo
ZS0+bV9tYXhEZWFkQ2FwYWNpdHk7CisgICAgICAgIHVuc2lnbmVkIGNhcGFjaXR5ID0gY2FjaGUt
Pm1fY2FwYWNpdHk7CisgICAgICAgIGNhY2hlLT5zZXRDYXBhY2l0aWVzKDAsIDAsIDApOyAgLy8g
V2lsbCBwcnVuZSB0aGUgY2FjaGUuCisgICAgICAgIGNhY2hlLT5zZXRDYXBhY2l0aWVzKG1pbkRl
YWRDYXBhY2l0eSwgbWF4RGVhZENhcGFjaXR5LCBjYXBhY2l0eSk7CisgICAgfQorfQorCit2b2lk
IFdlYkNhY2hlOjpnZXRVc2FnZVN0YXRzKFVzYWdlU3RhdHMqIHJlc3VsdCkKK3sKKyAgICBBU1NF
UlQocmVzdWx0KTsKKworICAgIENhY2hlKiBjYWNoZSA9IFdlYkNvcmU6OmNhY2hlKCk7CisgICAg
aWYgKGNhY2hlKSB7CisgICAgICAgIHJlc3VsdC0+bWluRGVhZENhcGFjaXR5ID0gY2FjaGUtPm1f
bWluRGVhZENhcGFjaXR5OworICAgICAgICByZXN1bHQtPm1heERlYWRDYXBhY2l0eSA9IGNhY2hl
LT5tX21heERlYWRDYXBhY2l0eTsKKyAgICAgICAgcmVzdWx0LT5jYXBhY2l0eSA9IGNhY2hlLT5t
X2NhcGFjaXR5OworICAgICAgICByZXN1bHQtPmxpdmVTaXplID0gY2FjaGUtPm1fbGl2ZVNpemU7
CisgICAgICAgIHJlc3VsdC0+ZGVhZFNpemUgPSBjYWNoZS0+bV9kZWFkU2l6ZTsKKyAgICB9IGVs
c2UKKyAgICAgICAgbWVtc2V0KHJlc3VsdCwgMCwgc2l6ZW9mKFVzYWdlU3RhdHMpKTsKK30KKwor
dm9pZCBXZWJDYWNoZTo6Z2V0UmVzb3VyY2VUeXBlU3RhdHMoUmVzb3VyY2VUeXBlU3RhdHMqIHJl
c3VsdCkKK3sKKyAgICBDYWNoZSogY2FjaGUgPSBXZWJDb3JlOjpjYWNoZSgpOworICAgIGlmIChj
YWNoZSkgeworICAgICAgICBDYWNoZTo6U3RhdGlzdGljcyBzdGF0cyA9IGNhY2hlLT5nZXRTdGF0
aXN0aWNzKCk7CisgICAgICAgIFRvUmVzb3VyY2VUeXBlU3RhdChzdGF0cy5pbWFnZXMsIHJlc3Vs
dC0+aW1hZ2VzKTsKKyAgICAgICAgVG9SZXNvdXJjZVR5cGVTdGF0KHN0YXRzLmNzc1N0eWxlU2hl
ZXRzLCByZXN1bHQtPmNzc1N0eWxlU2hlZXRzKTsKKyAgICAgICAgVG9SZXNvdXJjZVR5cGVTdGF0
KHN0YXRzLnNjcmlwdHMsIHJlc3VsdC0+c2NyaXB0cyk7CisjaWYgRU5BQkxFKFhTTFQpCisgICAg
ICAgIFRvUmVzb3VyY2VUeXBlU3RhdChzdGF0cy54c2xTdHlsZVNoZWV0cywgcmVzdWx0LT54c2xT
dHlsZVNoZWV0cyk7CisjZWxzZQorICAgICAgICBtZW1zZXQoJnJlc3VsdC0+eHNsU3R5bGVTaGVl
dHMsIDAsIHNpemVvZihyZXN1bHQtPnhzbFN0eWxlU2hlZXRzKSk7CisjZW5kaWYKKyAgICAgICAg
VG9SZXNvdXJjZVR5cGVTdGF0KHN0YXRzLmZvbnRzLCByZXN1bHQtPmZvbnRzKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgbWVtc2V0KHJlc3VsdCwgMCwgc2l6ZW9mKFdlYkNhY2hlOjpSZXNvdXJjZVR5
cGVTdGF0cykpOworfQorCit9ICAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkNvbG9yLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29s
b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMjM0MzMKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbG9yLmNwcApAQCAtMCwwICsx
LDEyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0Ogor
ICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisg
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJDb2xvci5oIgorCisjaW5j
bHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCisjaW5jbHVkZSAi
UmVuZGVyVGhlbWUuaCIKKyNpbmNsdWRlICJVbnVzZWRQYXJhbS5oIgorI2luY2x1ZGUgIldlYkNv
bG9yTmFtZS5oIgorCit1c2luZyBuYW1lc3BhY2U6OldlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitzdGF0aWMgaW50IHRvQ1NTVmFsdWVLZXl3b3JkKFdlYkNvbG9yTmFtZSBpbl92YWx1
ZSkKK3sKKyAgICBzd2l0Y2ggKGluX3ZhbHVlKSB7CisgICAgY2FzZSBXZWJDb2xvckFjdGl2ZUJv
cmRlcjoKKyAgICAgICAgcmV0dXJuIENTU1ZhbHVlQWN0aXZlYm9yZGVyOworICAgIGNhc2UgV2Vi
Q29sb3JBY3RpdmVDYXB0aW9uOgorICAgICAgICByZXR1cm4gQ1NTVmFsdWVBY3RpdmVjYXB0aW9u
OworICAgIGNhc2UgV2ViQ29sb3JBcHB3b3Jrc3BhY2U6CisgICAgICAgIHJldHVybiBDU1NWYWx1
ZUFwcHdvcmtzcGFjZTsKKyAgICBjYXNlIFdlYkNvbG9yQmFja2dyb3VuZDoKKyAgICAgICAgcmV0
dXJuIENTU1ZhbHVlQmFja2dyb3VuZDsKKyAgICBjYXNlIFdlYkNvbG9yQnV0dG9uRmFjZToKKyAg
ICAgICAgcmV0dXJuIENTU1ZhbHVlQnV0dG9uZmFjZTsKKyAgICBjYXNlIFdlYkNvbG9yQnV0dG9u
SGlnaGxpZ2h0OgorICAgICAgICByZXR1cm4gQ1NTVmFsdWVCdXR0b25oaWdobGlnaHQ7CisgICAg
Y2FzZSBXZWJDb2xvckJ1dHRvblNoYWRvdzoKKyAgICAgICAgcmV0dXJuIENTU1ZhbHVlQnV0dG9u
c2hhZG93OworICAgIGNhc2UgV2ViQ29sb3JCdXR0b25UZXh0OgorICAgICAgICByZXR1cm4gQ1NT
VmFsdWVCdXR0b250ZXh0OworICAgIGNhc2UgV2ViQ29sb3JDYXB0aW9uVGV4dDoKKyAgICAgICAg
cmV0dXJuIENTU1ZhbHVlQ2FwdGlvbnRleHQ7CisgICAgY2FzZSBXZWJDb2xvckdyYXlUZXh0Ogor
ICAgICAgICByZXR1cm4gQ1NTVmFsdWVHcmF5dGV4dDsKKyAgICBjYXNlIFdlYkNvbG9ySGlnaGxp
Z2h0OgorICAgICAgICByZXR1cm4gQ1NTVmFsdWVIaWdobGlnaHQ7CisgICAgY2FzZSBXZWJDb2xv
ckhpZ2hsaWdodFRleHQ6CisgICAgICAgIHJldHVybiBDU1NWYWx1ZUhpZ2hsaWdodHRleHQ7Cisg
ICAgY2FzZSBXZWJDb2xvckluYWN0aXZlQm9yZGVyOgorICAgICAgICByZXR1cm4gQ1NTVmFsdWVJ
bmFjdGl2ZWJvcmRlcjsKKyAgICBjYXNlIFdlYkNvbG9ySW5hY3RpdmVDYXB0aW9uOgorICAgICAg
ICByZXR1cm4gQ1NTVmFsdWVJbmFjdGl2ZWNhcHRpb247CisgICAgY2FzZSBXZWJDb2xvckluYWN0
aXZlQ2FwdGlvblRleHQ6CisgICAgICAgIHJldHVybiBDU1NWYWx1ZUluYWN0aXZlY2FwdGlvbnRl
eHQ7CisgICAgY2FzZSBXZWJDb2xvckluZm9CYWNrZ3JvdW5kOgorICAgICAgICByZXR1cm4gQ1NT
VmFsdWVJbmZvYmFja2dyb3VuZDsKKyAgICBjYXNlIFdlYkNvbG9ySW5mb1RleHQ6CisgICAgICAg
IHJldHVybiBDU1NWYWx1ZUluZm90ZXh0OworICAgIGNhc2UgV2ViQ29sb3JNZW51OgorICAgICAg
ICByZXR1cm4gQ1NTVmFsdWVNZW51OworICAgIGNhc2UgV2ViQ29sb3JNZW51VGV4dDoKKyAgICAg
ICAgcmV0dXJuIENTU1ZhbHVlTWVudXRleHQ7CisgICAgY2FzZSBXZWJDb2xvclNjcm9sbGJhcjoK
KyAgICAgICAgcmV0dXJuIENTU1ZhbHVlU2Nyb2xsYmFyOworICAgIGNhc2UgV2ViQ29sb3JUZXh0
OgorICAgICAgICByZXR1cm4gQ1NTVmFsdWVUZXh0OworICAgIGNhc2UgV2ViQ29sb3JUaHJlZWRE
YXJrU2hhZG93OgorICAgICAgICByZXR1cm4gQ1NTVmFsdWVUaHJlZWRkYXJrc2hhZG93OworICAg
IGNhc2UgV2ViQ29sb3JUaHJlZWRTaGFkb3c6CisgICAgICAgIHJldHVybiBDU1NWYWx1ZVRocmVl
ZHNoYWRvdzsKKyAgICBjYXNlIFdlYkNvbG9yVGhyZWVkRmFjZToKKyAgICAgICAgcmV0dXJuIENT
U1ZhbHVlVGhyZWVkZmFjZTsKKyAgICBjYXNlIFdlYkNvbG9yVGhyZWVkSGlnaGxpZ2h0OgorICAg
ICAgICByZXR1cm4gQ1NTVmFsdWVUaHJlZWRoaWdobGlnaHQ7CisgICAgY2FzZSBXZWJDb2xvclRo
cmVlZExpZ2h0U2hhZG93OgorICAgICAgICByZXR1cm4gQ1NTVmFsdWVUaHJlZWRsaWdodHNoYWRv
dzsKKyAgICBjYXNlIFdlYkNvbG9yV2Via2l0Rm9jdXNSaW5nQ29sb3I6CisgICAgICAgIHJldHVy
biBDU1NWYWx1ZVdlYmtpdEZvY3VzUmluZ0NvbG9yOworICAgIGNhc2UgV2ViQ29sb3JXaW5kb3c6
CisgICAgICAgIHJldHVybiBDU1NWYWx1ZVdpbmRvdzsKKyAgICBjYXNlIFdlYkNvbG9yV2luZG93
RnJhbWU6CisgICAgICAgIHJldHVybiBDU1NWYWx1ZVdpbmRvd2ZyYW1lOworICAgIGNhc2UgV2Vi
Q29sb3JXaW5kb3dUZXh0OgorICAgICAgICByZXR1cm4gQ1NTVmFsdWVXaW5kb3d0ZXh0OworICAg
IGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBDU1NWYWx1ZUludmFsaWQ7CisgICAgfQorfQorCit2
b2lkIHNldE5hbWVkQ29sb3JzKGNvbnN0IFdlYkNvbG9yTmFtZSogY29sb3JOYW1lcywgY29uc3Qg
V2ViQ29sb3IqIGNvbG9ycywgc2l6ZV90IGxlbmd0aCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIFdlYkNvbG9yTmFtZSBjb2xvck5hbWUgPSBj
b2xvck5hbWVzW2ldOworICAgICAgICBXZWJDb2xvciBjb2xvciA9IGNvbG9yc1tpXTsKKworICAg
ICAgICAvLyBDb252ZXJ0IGNvbG9yIHRvIGludGVybmFsIHZhbHVlIGlkZW50aWZpZXIuCisgICAg
ICAgIGludCBpbnRlcm5hbENvbG9yTmFtZSA9IHRvQ1NTVmFsdWVLZXl3b3JkKGNvbG9yTmFtZSk7
CisgICAgICAgIGlmIChpbnRlcm5hbENvbG9yTmFtZSA9PSBDU1NWYWx1ZVdlYmtpdEZvY3VzUmlu
Z0NvbG9yKSB7CisgICAgICAgICAgICBSZW5kZXJUaGVtZTo6c2V0Q3VzdG9tRm9jdXNSaW5nQ29s
b3IoY29sb3IpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICAvLyBUT0RPKGplcmVteSk6IFRlbGwgUmVuZGVyVGhlbWUgdG8gdXBkYXRlIGNvbG9ycy4KK30K
KworfSAvLyBXZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ3Jvc3NP
cmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNy
b3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjcxOTMxNmQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkNyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuY3BwCkBAIC0wLDAgKzEsNDMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViQ3Jvc3NPcmlnaW5QcmVmbGlnaHRS
ZXN1bHRDYWNoZS5oIgorCisjaW5jbHVkZSAiQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNo
ZS5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9pZCBXZWJDcm9zc09yaWdpblByZWZsaWdo
dFJlc3VsdENhY2hlOjpjbGVhcigpCit7CisgICAgV2ViQ29yZTo6Q3Jvc3NPcmlnaW5QcmVmbGln
aHRSZXN1bHRDYWNoZTo6c2hhcmVkKCkuZW1wdHkoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkN1cnNvckluZm8uY3BwIGIv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDdXJzb3JJbmZvLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5kNGIwZjgxCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJDdXJzb3JJbmZvLmNwcApAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIldlYkN1cnNvckluZm8uaCIKKworI2luY2x1ZGUgIkN1cnNvci5oIgor
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYkN1
cnNvckluZm86OldlYkN1cnNvckluZm8oY29uc3QgQ3Vyc29yJiBjdXJzb3IpCit7CisgICAgdHlw
ZSA9IHN0YXRpY19jYXN0PFR5cGU+KGN1cnNvci5pbXBsKCkudHlwZSgpKTsKKyAgICBob3RTcG90
ID0gY3Vyc29yLmltcGwoKS5ob3RTcG90KCk7CisgICAgY3VzdG9tSW1hZ2UgPSBjdXJzb3IuaW1w
bCgpLmN1c3RvbUltYWdlKCk7CisjaWZkZWYgV0lOMzIKKyAgICBleHRlcm5hbEhhbmRsZSA9IDA7
CisjZW5kaWYKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42821</attachid>
            <date>2009-11-09 18:11:11 -0800</date>
            <delta_ts>2009-11-09 23:46:48 -0800</delta_ts>
            <desc>Up-streaming Chromium API src files: WebData...WebElement</desc>
            <filename>bug-31276-20091109181110.patch</filename>
            <type>text/plain</type>
            <size>33547</size>
            <attacher name="Yaar Schnitman">yaar</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IGEyZTAxYzUuLjgxZmYyODAgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDkwIEBACisyMDA5LTExLTA5ICBZYWFyIFNjaG5pdG1hbiAgPHlhYXJAY2hyb21pdW0uc3JjPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwLXN0cmVh
bWluZyBDaHJvbWl1bSBBUEkgc3JjIGZpbGVzOiBXZWJEYXRhLi4uV2ViRWxlbWVudAorCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTI3NgorCisgICAg
ICAgICogc3JjL1dlYkRhdGEuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViRGF0YTo6
cmVzZXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJEYXRhOjphc3NpZ24pOgorICAgICAgICAoV2Vi
S2l0OjpXZWJEYXRhOjpzaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViRGF0YTo6ZGF0YSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkRhdGE6OldlYkRhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJE
YXRhOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViS2l0OjpXZWJEYXRhOjpvcGVyYXRvciBQYXNz
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4pOgorICAgICAgICAqIHNyYy9XZWJEYXRhU291cmNlSW1wbC5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJEYXRhU291cmNlSW1wbDo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViRGF0YVNvdXJjZUltcGw6Om9yaWdpbmFsUmVxdWVzdCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkRhdGFTb3VyY2VJbXBsOjpyZXF1ZXN0KToKKyAgICAgICAgKFdl
YktpdDo6V2ViRGF0YVNvdXJjZUltcGw6OnJlc3BvbnNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
RGF0YVNvdXJjZUltcGw6Omhhc1VucmVhY2hhYmxlVVJMKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
RGF0YVNvdXJjZUltcGw6OnVucmVhY2hhYmxlVVJMKToKKyAgICAgICAgKFdlYktpdDo6V2ViRGF0
YVNvdXJjZUltcGw6OnJlZGlyZWN0Q2hhaW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJEYXRhU291
cmNlSW1wbDo6cGFnZVRpdGxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViRGF0YVNvdXJjZUltcGw6
Om5hdmlnYXRpb25UeXBlKToKKyAgICAgICAgKFdlYktpdDo6V2ViRGF0YVNvdXJjZUltcGw6OnRy
aWdnZXJpbmdFdmVudFRpbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJEYXRhU291cmNlSW1wbDo6
ZXh0cmFEYXRhKToKKyAgICAgICAgKFdlYktpdDo6V2ViRGF0YVNvdXJjZUltcGw6OnNldEV4dHJh
RGF0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYkRhdGFTb3VyY2VJbXBsOjp0b1dlYk5hdmlnYXRp
b25UeXBlKToKKyAgICAgICAgKFdlYktpdDo6V2ViRGF0YVNvdXJjZUltcGw6OmVuZE9mUmVkaXJl
Y3RDaGFpbik6CisgICAgICAgIChXZWJLaXQ6OldlYkRhdGFTb3VyY2VJbXBsOjpjbGVhclJlZGly
ZWN0Q2hhaW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJEYXRhU291cmNlSW1wbDo6YXBwZW5kUmVk
aXJlY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJEYXRhU291cmNlSW1wbDo6c2V0TmV4dFBsdWdp
bkxvYWRPYnNlcnZlcik6CisgICAgICAgIChXZWJLaXQ6OldlYkRhdGFTb3VyY2VJbXBsOjpXZWJE
YXRhU291cmNlSW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRhdGFTb3VyY2VJbXBsOjp+V2Vi
RGF0YVNvdXJjZUltcGwpOgorICAgICAgICAqIHNyYy9XZWJEYXRhU291cmNlSW1wbC5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYktpdDo6V2ViRGF0YVNvdXJjZUltcGw6OmZyb21Eb2N1bWVudExvYWRl
cik6CisgICAgICAgIChXZWJLaXQ6OldlYkRhdGFTb3VyY2VJbXBsOjpoYXNSZWRpcmVjdENoYWlu
KToKKyAgICAgICAgKFdlYktpdDo6V2ViRGF0YVNvdXJjZUltcGw6OnJlbGVhc2VQbHVnaW5Mb2Fk
T2JzZXJ2ZXIpOgorICAgICAgICAqIHNyYy9XZWJEYXRhYmFzZS5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJEYXRhYmFzZTo6cmVzZXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJEYXRh
YmFzZTo6YXNzaWduKToKKyAgICAgICAgKFdlYktpdDo6V2ViRGF0YWJhc2U6Om5hbWUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJEYXRhYmFzZTo6ZGlzcGxheU5hbWUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJEYXRhYmFzZTo6ZXN0aW1hdGVkU2l6ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkRhdGFi
YXNlOjpzZWN1cml0eU9yaWdpbik6CisgICAgICAgIChXZWJLaXQ6OldlYkRhdGFiYXNlOjpzZXRP
YnNlcnZlcik6CisgICAgICAgIChXZWJLaXQ6OldlYkRhdGFiYXNlOjpvYnNlcnZlcik6CisgICAg
ICAgIChXZWJLaXQ6OldlYkRhdGFiYXNlOjp1cGRhdGVEYXRhYmFzZVNpemUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJEYXRhYmFzZTo6V2ViRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJE
YXRhYmFzZTo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYktpdDo6V2ViRGF0YWJhc2U6Om9wZXJh
dG9yIFdURjo6UGFzc1JlZlB0cjxEYXRhYmFzZT4pOgorICAgICAgICAqIHNyYy9XZWJEZXZUb29s
c0FnZW50UHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvV2ViRHJhZ0RhdGEuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6OmluaXRpYWxpemUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6cmVzZXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFn
RGF0YTo6YXNzaWduKToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6OnVybCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkRyYWdEYXRhOjpzZXRVUkwpOgorICAgICAgICAoV2ViS2l0OjpXZWJE
cmFnRGF0YTo6dXJsVGl0bGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6c2V0VVJM
VGl0bGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6ZmlsZUV4dGVuc2lvbik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkRyYWdEYXRhOjpzZXRGaWxlRXh0ZW5zaW9uKToKKyAgICAgICAg
KFdlYktpdDo6V2ViRHJhZ0RhdGE6Omhhc0ZpbGVOYW1lcyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkRyYWdEYXRhOjpmaWxlTmFtZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6c2V0
RmlsZU5hbWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6OmFwcGVuZFRvRmlsZU5h
bWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6OnBsYWluVGV4dCk6CisgICAgICAg
IChXZWJLaXQ6OldlYkRyYWdEYXRhOjpzZXRQbGFpblRleHQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJEcmFnRGF0YTo6aHRtbFRleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6c2V0
SFRNTFRleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6aHRtbEJhc2VVUkwpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6c2V0SFRNTEJhc2VVUkwpOgorICAgICAgICAo
V2ViS2l0OjpXZWJEcmFnRGF0YTo6ZmlsZUNvbnRlbnRGaWxlTmFtZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYkRyYWdEYXRhOjpzZXRGaWxlQ29udGVudEZpbGVOYW1lKToKKyAgICAgICAgKFdlYktp
dDo6V2ViRHJhZ0RhdGE6OmZpbGVDb250ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0Rh
dGE6OnNldEZpbGVDb250ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6OldlYkRy
YWdEYXRhKToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6Om9wZXJhdG9yPSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkRyYWdEYXRhOjpvcGVyYXRvciBXVEY6OlBhc3NSZWZQdHI8V2ViQ29y
ZTo6Q2hyb21pdW1EYXRhT2JqZWN0Pik6CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdEYXRhOjpl
bnN1cmVNdXRhYmxlKToKKyAgICAgICAgKiBzcmMvV2ViRWxlbWVudC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViS2l0OjpXZWJFbGVtZW50OjpXZWJFbGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6
V2ViRWxlbWVudDo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYktpdDo6V2ViRWxlbWVudDo6b3Bl
cmF0b3IgV1RGOjpQYXNzUmVmUHRyPEVsZW1lbnQ+KToKKwogMjAwOS0xMS0wOSAgWWFhciBTY2hu
aXRtYW4gIDx5YWFyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGF0YS5jcHAgYi9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRhdGEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjZhYWZlNzkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkRhdGEuY3BwCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIldlYkRhdGEuaCIKKworI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorCit1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkRhdGFQ
cml2YXRlIDogcHVibGljIFNoYXJlZEJ1ZmZlciB7Cit9OworCit2b2lkIFdlYkRhdGE6OnJlc2V0
KCkKK3sKKyAgICBpZiAobV9wcml2YXRlKSB7CisgICAgICAgIG1fcHJpdmF0ZS0+ZGVyZWYoKTsK
KyAgICAgICAgbV9wcml2YXRlID0gMDsKKyAgICB9Cit9CisKK3ZvaWQgV2ViRGF0YTo6YXNzaWdu
KGNvbnN0IFdlYkRhdGEmIG90aGVyKQoreworICAgIFdlYkRhdGFQcml2YXRlKiBwID0gY29uc3Rf
Y2FzdDxXZWJEYXRhUHJpdmF0ZSo+KG90aGVyLm1fcHJpdmF0ZSk7CisgICAgaWYgKHApCisgICAg
ICAgIHAtPnJlZigpOworICAgIGFzc2lnbihwKTsKK30KKwordm9pZCBXZWJEYXRhOjphc3NpZ24o
Y29uc3QgY2hhciogZGF0YSwgc2l6ZV90IHNpemUpCit7CisgICAgYXNzaWduKHN0YXRpY19jYXN0
PFdlYkRhdGFQcml2YXRlKj4oCisgICAgICAgIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGRhdGEsIHNp
emUpLnJlbGVhc2VSZWYoKSkpOworfQorCitzaXplX3QgV2ViRGF0YTo6c2l6ZSgpIGNvbnN0Cit7
CisgICAgaWYgKCFtX3ByaXZhdGUpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBjb25z
dF9jYXN0PFdlYkRhdGFQcml2YXRlKj4obV9wcml2YXRlKS0+c2l6ZSgpOworfQorCitjb25zdCBj
aGFyKiBXZWJEYXRhOjpkYXRhKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcHJpdmF0ZSkKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8V2ViRGF0YVByaXZhdGUqPihtX3By
aXZhdGUpLT5kYXRhKCk7Cit9CisKK1dlYkRhdGE6OldlYkRhdGEoY29uc3QgUGFzc1JlZlB0cjxT
aGFyZWRCdWZmZXI+JiBidWZmZXIpCisgICAgOiBtX3ByaXZhdGUoc3RhdGljX2Nhc3Q8V2ViRGF0
YVByaXZhdGUqPihidWZmZXIucmVsZWFzZVJlZigpKSkKK3sKK30KKworV2ViRGF0YSYgV2ViRGF0
YTo6b3BlcmF0b3I9KGNvbnN0IFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiYgYnVmZmVyKQorewor
ICAgIGFzc2lnbihzdGF0aWNfY2FzdDxXZWJEYXRhUHJpdmF0ZSo+KGJ1ZmZlci5yZWxlYXNlUmVm
KCkpKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1dlYkRhdGE6Om9wZXJhdG9yIFBhc3NSZWZQ
dHI8U2hhcmVkQnVmZmVyPigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFBhc3NSZWZQdHI8U2hhcmVk
QnVmZmVyPihjb25zdF9jYXN0PFdlYkRhdGFQcml2YXRlKj4obV9wcml2YXRlKSk7Cit9CisKK3Zv
aWQgV2ViRGF0YTo6YXNzaWduKFdlYkRhdGFQcml2YXRlKiBwKQoreworICAgIC8vIHAgaXMgYWxy
ZWFkeSByZWYnZCBmb3IgdXMgYnkgdGhlIGNhbGxlcgorICAgIGlmIChtX3ByaXZhdGUpCisgICAg
ICAgIG1fcHJpdmF0ZS0+ZGVyZWYoKTsKKyAgICBtX3ByaXZhdGUgPSBwOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGF0YVNv
dXJjZUltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEYXRhU291cmNlSW1wbC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU2NzA2YQotLS0gL2Rldi9udWxs
CisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGF0YVNvdXJjZUltcGwuY3BwCkBAIC0wLDAg
KzEsMTczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkRhdGFTb3VyY2VJbXBs
LmgiCisKKyNpbmNsdWRlICJXZWJVUkwuaCIKKyNpbmNsdWRlICJXZWJVUkxFcnJvci5oIgorI2lu
Y2x1ZGUgIldlYlZlY3Rvci5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK1dlYlBsdWdpbkxvYWRPYnNlcnZlciogV2ViRGF0YVNvdXJjZUltcGw6
Om1fbmV4dFBsdWdpbkxvYWRPYnNlcnZlciA9IDA7CisKK1Bhc3NSZWZQdHI8V2ViRGF0YVNvdXJj
ZUltcGw+IFdlYkRhdGFTb3VyY2VJbXBsOjpjcmVhdGUoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBy
ZXF1ZXN0LCBjb25zdCBTdWJzdGl0dXRlRGF0YSYgZGF0YSkKK3sKKyAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFdlYkRhdGFTb3VyY2VJbXBsKHJlcXVlc3QsIGRhdGEpKTsKK30KKworY29uc3QgV2Vi
VVJMUmVxdWVzdCYgV2ViRGF0YVNvdXJjZUltcGw6Om9yaWdpbmFsUmVxdWVzdCgpIGNvbnN0Cit7
CisgICAgbV9vcmlnaW5hbFJlcXVlc3RXcmFwcGVyLmJpbmQoRG9jdW1lbnRMb2FkZXI6Om9yaWdp
bmFsUmVxdWVzdCgpKTsKKyAgICByZXR1cm4gbV9vcmlnaW5hbFJlcXVlc3RXcmFwcGVyOworfQor
Citjb25zdCBXZWJVUkxSZXF1ZXN0JiBXZWJEYXRhU291cmNlSW1wbDo6cmVxdWVzdCgpIGNvbnN0
Cit7CisgICAgbV9yZXF1ZXN0V3JhcHBlci5iaW5kKERvY3VtZW50TG9hZGVyOjpyZXF1ZXN0KCkp
OworICAgIHJldHVybiBtX3JlcXVlc3RXcmFwcGVyOworfQorCitjb25zdCBXZWJVUkxSZXNwb25z
ZSYgV2ViRGF0YVNvdXJjZUltcGw6OnJlc3BvbnNlKCkgY29uc3QKK3sKKyAgICBtX3Jlc3BvbnNl
V3JhcHBlci5iaW5kKERvY3VtZW50TG9hZGVyOjpyZXNwb25zZSgpKTsKKyAgICByZXR1cm4gbV9y
ZXNwb25zZVdyYXBwZXI7Cit9CisKK2Jvb2wgV2ViRGF0YVNvdXJjZUltcGw6Omhhc1VucmVhY2hh
YmxlVVJMKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIURvY3VtZW50TG9hZGVyOjp1bnJlYWNoYWJs
ZVVSTCgpLmlzRW1wdHkoKTsKK30KKworV2ViVVJMIFdlYkRhdGFTb3VyY2VJbXBsOjp1bnJlYWNo
YWJsZVVSTCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIERvY3VtZW50TG9hZGVyOjp1bnJlYWNoYWJs
ZVVSTCgpOworfQorCit2b2lkIFdlYkRhdGFTb3VyY2VJbXBsOjpyZWRpcmVjdENoYWluKFdlYlZl
Y3RvcjxXZWJVUkw+JiByZXN1bHQpIGNvbnN0Cit7CisgICAgcmVzdWx0LmFzc2lnbihtX3JlZGly
ZWN0Q2hhaW4pOworfQorCitXZWJTdHJpbmcgV2ViRGF0YVNvdXJjZUltcGw6OnBhZ2VUaXRsZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIHRpdGxlKCk7Cit9CisKK1dlYk5hdmlnYXRpb25UeXBlIFdl
YkRhdGFTb3VyY2VJbXBsOjpuYXZpZ2F0aW9uVHlwZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRv
V2ViTmF2aWdhdGlvblR5cGUodHJpZ2dlcmluZ0FjdGlvbigpLnR5cGUoKSk7Cit9CisKK2RvdWJs
ZSBXZWJEYXRhU291cmNlSW1wbDo6dHJpZ2dlcmluZ0V2ZW50VGltZSgpIGNvbnN0Cit7CisgICAg
aWYgKCF0cmlnZ2VyaW5nQWN0aW9uKCkuZXZlbnQoKSkKKyAgICAgICAgcmV0dXJuIDAuMDsKKwor
ICAgIC8vIERPTVRpbWVTdGFtcCB1c2VzIHVuaXRzIG9mIG1pbGxpc2Vjb25kcy4KKyAgICByZXR1
cm4gdHJpZ2dlcmluZ0FjdGlvbigpLmV2ZW50KCktPnRpbWVTdGFtcCgpIC8gMTAwMC4wOworfQor
CitXZWJEYXRhU291cmNlOjpFeHRyYURhdGEqIFdlYkRhdGFTb3VyY2VJbXBsOjpleHRyYURhdGEo
KSBjb25zdAoreworICAgIHJldHVybiBtX2V4dHJhRGF0YS5nZXQoKTsKK30KKwordm9pZCBXZWJE
YXRhU291cmNlSW1wbDo6c2V0RXh0cmFEYXRhKEV4dHJhRGF0YSogZXh0cmFEYXRhKQoreworICAg
IG1fZXh0cmFEYXRhLnNldChleHRyYURhdGEpOworfQorCitXZWJOYXZpZ2F0aW9uVHlwZSBXZWJE
YXRhU291cmNlSW1wbDo6dG9XZWJOYXZpZ2F0aW9uVHlwZShOYXZpZ2F0aW9uVHlwZSB0eXBlKQor
eworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgTmF2aWdhdGlvblR5cGVMaW5rQ2xpY2tl
ZDoKKyAgICAgICAgcmV0dXJuIFdlYk5hdmlnYXRpb25UeXBlTGlua0NsaWNrZWQ7CisgICAgY2Fz
ZSBOYXZpZ2F0aW9uVHlwZUZvcm1TdWJtaXR0ZWQ6CisgICAgICAgIHJldHVybiBXZWJOYXZpZ2F0
aW9uVHlwZUZvcm1TdWJtaXR0ZWQ7CisgICAgY2FzZSBOYXZpZ2F0aW9uVHlwZUJhY2tGb3J3YXJk
OgorICAgICAgICByZXR1cm4gV2ViTmF2aWdhdGlvblR5cGVCYWNrRm9yd2FyZDsKKyAgICBjYXNl
IE5hdmlnYXRpb25UeXBlUmVsb2FkOgorICAgICAgICByZXR1cm4gV2ViTmF2aWdhdGlvblR5cGVS
ZWxvYWQ7CisgICAgY2FzZSBOYXZpZ2F0aW9uVHlwZUZvcm1SZXN1Ym1pdHRlZDoKKyAgICAgICAg
cmV0dXJuIFdlYk5hdmlnYXRpb25UeXBlRm9ybVJlc3VibWl0dGVkOworICAgIGNhc2UgTmF2aWdh
dGlvblR5cGVPdGhlcjoKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gV2ViTmF2aWdhdGlv
blR5cGVPdGhlcjsKKyAgICB9Cit9CisKK2NvbnN0IEtVUkwmIFdlYkRhdGFTb3VyY2VJbXBsOjpl
bmRPZlJlZGlyZWN0Q2hhaW4oKSBjb25zdAoreworICAgIEFTU0VSVCghbV9yZWRpcmVjdENoYWlu
LmlzRW1wdHkoKSk7CisgICAgcmV0dXJuIG1fcmVkaXJlY3RDaGFpbi5sYXN0KCk7Cit9CisKK3Zv
aWQgV2ViRGF0YVNvdXJjZUltcGw6OmNsZWFyUmVkaXJlY3RDaGFpbigpCit7CisgICAgbV9yZWRp
cmVjdENoYWluLmNsZWFyKCk7Cit9CisKK3ZvaWQgV2ViRGF0YVNvdXJjZUltcGw6OmFwcGVuZFJl
ZGlyZWN0KGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICBtX3JlZGlyZWN0Q2hhaW4uYXBwZW5kKHVy
bCk7Cit9CisKK3ZvaWQgV2ViRGF0YVNvdXJjZUltcGw6OnNldE5leHRQbHVnaW5Mb2FkT2JzZXJ2
ZXIoUGFzc093blB0cjxXZWJQbHVnaW5Mb2FkT2JzZXJ2ZXI+IG9ic2VydmVyKQoreworICAgIC8v
IFRoaXMgY2FsbCBzaG91bGQgYWx3YXlzIGJlIGZvbGxvd2VkIHVwIHdpdGggdGhlIGNyZWF0aW9u
IG9mIGEKKyAgICAvLyBXZWJEYXRhU291cmNlSW1wbCwgc28gd2Ugc2hvdWxkIG5ldmVyIGxlYWsg
dGhpcyBvYmplY3QuCisgICAgbV9uZXh0UGx1Z2luTG9hZE9ic2VydmVyID0gb2JzZXJ2ZXIucmVs
ZWFzZSgpOworfQorCitXZWJEYXRhU291cmNlSW1wbDo6V2ViRGF0YVNvdXJjZUltcGwoY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBTdWJzdGl0dXRlRGF0YSYgZGF0YSkKKyAg
ICA6IERvY3VtZW50TG9hZGVyKHJlcXVlc3QsIGRhdGEpCit7CisgICAgaWYgKG1fbmV4dFBsdWdp
bkxvYWRPYnNlcnZlcikgeworICAgICAgICAvLyBXaGVuIGEgbmV3IGZyYW1lIGlzIGNyZWF0ZWQs
IGl0IGluaXRpYWxseSBnZXRzIGEgZGF0YSBzb3VyY2UgZm9yIGFuCisgICAgICAgIC8vIGVtcHR5
IGRvY3VtZW50LiAgVGhlbiBpdCBpcyBuYXZpZ2F0ZWQgdG8gdGhlIHNvdXJjZSBVUkwgb2YgdGhl
CisgICAgICAgIC8vIGZyYW1lLCB3aGljaCByZXN1bHRzIGluIGEgc2Vjb25kIGRhdGEgc291cmNl
IGJlaW5nIGNyZWF0ZWQuICBXZSB3YW50CisgICAgICAgIC8vIHRvIHdhaXQgdG8gYXR0YWNoIHRo
ZSBXZWJQbHVnaW5Mb2FkT2JzZXJ2ZXIgdG8gdGhhdCBkYXRhIHNvdXJjZS4KKyAgICAgICAgaWYg
KCFyZXF1ZXN0LnVybCgpLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgQVNTRVJUKG1fbmV4dFBs
dWdpbkxvYWRPYnNlcnZlci0+dXJsKCkgPT0gcmVxdWVzdC51cmwoKSk7CisgICAgICAgICAgICBt
X3BsdWdpbkxvYWRPYnNlcnZlci5zZXQobV9uZXh0UGx1Z2luTG9hZE9ic2VydmVyKTsKKyAgICAg
ICAgICAgIG1fbmV4dFBsdWdpbkxvYWRPYnNlcnZlciA9IDA7CisgICAgICAgIH0KKyAgICB9Cit9
CisKK1dlYkRhdGFTb3VyY2VJbXBsOjp+V2ViRGF0YVNvdXJjZUltcGwoKQoreworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGF0
YVNvdXJjZUltcGwuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGF0YVNvdXJjZUltcGwuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODYwZmU0Ci0tLSAvZGV2L251bGwK
KysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEYXRhU291cmNlSW1wbC5oCkBAIC0wLDAgKzEs
MTEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBXZWJEYXRhU291cmNlSW1wbF9oCisjZGVmaW5lIFdlYkRhdGFTb3VyY2VJ
bXBsX2gKKworLy8gRklYTUU6IFRoaXMgcmVsYXRpdmUgcGF0aCBpcyBhIHRlbXBvcmFyeSBoYWNr
IHRvIHN1cHBvcnQgdXNpbmcgdGhpcworLy8gaGVhZGVyIGZyb20gd2Via2l0L2dsdWUuCisjaW5j
bHVkZSAiLi4vcHVibGljL1dlYkRhdGFTb3VyY2UuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50TG9h
ZGVyLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorCisjaW5jbHVkZSAiV2ViUGx1Z2luTG9hZE9ic2Vy
dmVyLmgiCisjaW5jbHVkZSAiV3JhcHBlZFJlc291cmNlUmVxdWVzdC5oIgorI2luY2x1ZGUgIldy
YXBwZWRSZXNvdXJjZVJlc3BvbnNlLmgiCisKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlBsdWdpbkxvYWRPYnNlcnZlcjsKKworY2xhc3Mg
V2ViRGF0YVNvdXJjZUltcGwgOiBwdWJsaWMgV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIsIHB1Ymxp
YyBXZWJEYXRhU291cmNlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJEYXRh
U291cmNlSW1wbD4gY3JlYXRlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJDb3Jl
OjpTdWJzdGl0dXRlRGF0YSYpOworCisgICAgc3RhdGljIFdlYkRhdGFTb3VyY2VJbXBsKiBmcm9t
RG9jdW1lbnRMb2FkZXIoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJEYXRhU291cmNlSW1wbCo+KGxvYWRlcik7Cisg
ICAgfQorCisgICAgLy8gV2ViRGF0YVNvdXJjZSBtZXRob2RzOgorICAgIHZpcnR1YWwgY29uc3Qg
V2ViVVJMUmVxdWVzdCYgb3JpZ2luYWxSZXF1ZXN0KCkgY29uc3Q7CisgICAgdmlydHVhbCBjb25z
dCBXZWJVUkxSZXF1ZXN0JiByZXF1ZXN0KCkgY29uc3Q7CisgICAgdmlydHVhbCBjb25zdCBXZWJV
UkxSZXNwb25zZSYgcmVzcG9uc2UoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaGFzVW5yZWFj
aGFibGVVUkwoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFdlYlVSTCB1bnJlYWNoYWJsZVVSTCgpIGNv
bnN0OworICAgIHZpcnR1YWwgdm9pZCByZWRpcmVjdENoYWluKFdlYlZlY3RvcjxXZWJVUkw+Jikg
Y29uc3Q7CisgICAgdmlydHVhbCBXZWJTdHJpbmcgcGFnZVRpdGxlKCkgY29uc3Q7CisgICAgdmly
dHVhbCBXZWJOYXZpZ2F0aW9uVHlwZSBuYXZpZ2F0aW9uVHlwZSgpIGNvbnN0OworICAgIHZpcnR1
YWwgZG91YmxlIHRyaWdnZXJpbmdFdmVudFRpbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEV4dHJh
RGF0YSogZXh0cmFEYXRhKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldEV4dHJhRGF0YShF
eHRyYURhdGEqKTsKKworICAgIHN0YXRpYyBXZWJOYXZpZ2F0aW9uVHlwZSB0b1dlYk5hdmlnYXRp
b25UeXBlKFdlYkNvcmU6Ok5hdmlnYXRpb25UeXBlIHR5cGUpOworCisgICAgYm9vbCBoYXNSZWRp
cmVjdENoYWluKCkgY29uc3QgeyByZXR1cm4gIW1fcmVkaXJlY3RDaGFpbi5pc0VtcHR5KCk7IH0K
KyAgICBjb25zdCBXZWJDb3JlOjpLVVJMJiBlbmRPZlJlZGlyZWN0Q2hhaW4oKSBjb25zdDsKKyAg
ICB2b2lkIGNsZWFyUmVkaXJlY3RDaGFpbigpOworICAgIHZvaWQgYXBwZW5kUmVkaXJlY3QoY29u
c3QgV2ViQ29yZTo6S1VSTCYgdXJsKTsKKworICAgIFBhc3NPd25QdHI8V2ViUGx1Z2luTG9hZE9i
c2VydmVyPiByZWxlYXNlUGx1Z2luTG9hZE9ic2VydmVyKCkgeyByZXR1cm4gbV9wbHVnaW5Mb2Fk
T2JzZXJ2ZXIucmVsZWFzZSgpOyB9CisgICAgc3RhdGljIHZvaWQgc2V0TmV4dFBsdWdpbkxvYWRP
YnNlcnZlcihQYXNzT3duUHRyPFdlYlBsdWdpbkxvYWRPYnNlcnZlcj4pOworCitwcml2YXRlOgor
ICAgIFdlYkRhdGFTb3VyY2VJbXBsKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNv
bnN0IFdlYkNvcmU6OlN1YnN0aXR1dGVEYXRhJik7CisgICAgfldlYkRhdGFTb3VyY2VJbXBsKCk7
CisKKyAgICAvLyBNdXRhYmxlIGJlY2F1c2UgdGhlIGNvbnN0IGdldHRlcnMgd2lsbCBtYWdpY2Fs
bHkgc3luYyB0aGVzZSB0byB0aGUKKyAgICAvLyBsYXRlc3QgdmVyc2lvbiBmcm9tIFdlYktpdC4K
KyAgICBtdXRhYmxlIFdyYXBwZWRSZXNvdXJjZVJlcXVlc3QgbV9vcmlnaW5hbFJlcXVlc3RXcmFw
cGVyOworICAgIG11dGFibGUgV3JhcHBlZFJlc291cmNlUmVxdWVzdCBtX3JlcXVlc3RXcmFwcGVy
OworICAgIG11dGFibGUgV3JhcHBlZFJlc291cmNlUmVzcG9uc2UgbV9yZXNwb25zZVdyYXBwZXI7
CisKKyAgICAvLyBMaXN0cyBhbGwgaW50ZXJtZWRpYXRlIFVSTHMgdGhhdCBoYXZlIHJlZGlyZWN0
ZWQgZm9yIHRoZSBjdXJyZW50IHByb3Zpc2lvbmFsIGxvYWQuCisgICAgLy8gU2VlIFdlYkZyYW1l
TG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lv
bmFsTG9hZCBmb3IgYQorICAgIC8vIGRlc2NyaXB0aW9uIG9mIHdobyBtb2RpZmllcyB0aGlzIHdo
ZW4gdG8ga2VlcCBpdCB1cCB0byBkYXRlLgorICAgIFZlY3RvcjxXZWJDb3JlOjpLVVJMPiBtX3Jl
ZGlyZWN0Q2hhaW47CisKKyAgICBPd25QdHI8RXh0cmFEYXRhPiBtX2V4dHJhRGF0YTsKKyAgICBP
d25QdHI8V2ViUGx1Z2luTG9hZE9ic2VydmVyPiBtX3BsdWdpbkxvYWRPYnNlcnZlcjsKKworICAg
IHN0YXRpYyBXZWJQbHVnaW5Mb2FkT2JzZXJ2ZXIqIG1fbmV4dFBsdWdpbkxvYWRPYnNlcnZlcjsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgIC8vIFdlYkRhdGFTb3VyY2VJ
bXBsX2gKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGF0YWJhc2UuY3BwIGIv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEYXRhYmFzZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uZDcwMmVhZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViRGF0YWJhc2UuY3BwCkBAIC0wLDAgKzEsMTQ0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIldlYkRhdGFiYXNlLmgiCisKKyNpbmNsdWRlICJEYXRhYmFzZS5oIgorI2lu
Y2x1ZGUgIkRhdGFiYXNlVGhyZWFkLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRl
ICJLVVJMLmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJXZWJEYXRh
YmFzZU9ic2VydmVyLmgiCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGljIFdlYkRhdGFiYXNlT2JzZXJ2
ZXIqIGRhdGFiYXNlT2JzZXJ2ZXIgPSAwOworCitjbGFzcyBXZWJEYXRhYmFzZVByaXZhdGUgOiBw
dWJsaWMgRGF0YWJhc2UgeworfTsKKwordm9pZCBXZWJEYXRhYmFzZTo6cmVzZXQoKQoreworICAg
IGFzc2lnbigwKTsKK30KKwordm9pZCBXZWJEYXRhYmFzZTo6YXNzaWduKGNvbnN0IFdlYkRhdGFi
YXNlJiBvdGhlcikKK3sKKyAgICBXZWJEYXRhYmFzZVByaXZhdGUqIGQgPSBjb25zdF9jYXN0PFdl
YkRhdGFiYXNlUHJpdmF0ZSo+KG90aGVyLm1fcHJpdmF0ZSk7CisgICAgaWYgKGQpCisgICAgICAg
IGQtPnJlZigpOworICAgIGFzc2lnbihkKTsKK30KKworV2ViU3RyaW5nIFdlYkRhdGFiYXNlOjpu
YW1lKCkgY29uc3QKK3sKKyAgICBpZiAobV9wcml2YXRlKQorICAgICAgICByZXR1cm4gbV9wcml2
YXRlLT5zdHJpbmdJZGVudGlmaWVyKCk7CisKKyAgICByZXR1cm4gV2ViU3RyaW5nOjpmcm9tVVRG
OCgibnVsbCIpOworfQorCitXZWJTdHJpbmcgV2ViRGF0YWJhc2U6OmRpc3BsYXlOYW1lKCkgY29u
c3QKK3sKKy8vIEZJWE1FOiBhZGQgdGhlIERhdGFiYXNlOjpkaXNwbGF5TmFtZSgpIG1ldGhvZC4K
Ky8vICAgICBpZiAobV9wcml2YXRlKQorLy8gICAgICAgICByZXR1cm4gbV9wcml2YXRlLT5kaXNw
bGF5TmFtZSgpOworCisgICAgcmV0dXJuIFdlYlN0cmluZzo6ZnJvbVVURjgoIm51bGwiKTsKK30K
KwordW5zaWduZWQgbG9uZyBXZWJEYXRhYmFzZTo6ZXN0aW1hdGVkU2l6ZSgpIGNvbnN0Cit7Cisv
LyBGSVhNRTogYWRkIHRoZSBEYXRhYmFzZTo6ZXN0aW1hdGVkU2l6ZSgpIG1ldGhvZC4KKy8vICAg
IGlmIChtX3ByaXZhdGUpCisvLyAgICAgICAgcmV0dXJuIG1fcHJpdmF0ZS0+ZXN0aW1hdGVkU2l6
ZSgpOworCisgICAgcmV0dXJuIC0xOworfQorCitXZWJTZWN1cml0eU9yaWdpbiBXZWJEYXRhYmFz
ZTo6c2VjdXJpdHlPcmlnaW4oKSBjb25zdAoreworLy8gRklYTUU6IGFkZCB0aGUgRGF0YWJhc2U6
OnRocmVhZFNhZmVTZWN1cml0eU9yaWdpbigpIG1ldGhvZC4KKy8vICAgICBpZiAobV9wcml2YXRl
KQorLy8gICAgICAgICByZXR1cm4gV2ViU2VjdXJpdHlPcmlnaW4obV9wcml2YXRlLT50aHJlYWRT
YWZlU2VjdXJpdHlPcmlnaW4oKSk7CisKKyAgICByZXR1cm4gV2ViU2VjdXJpdHlPcmlnaW4oKTsK
K30KKwordm9pZCBXZWJEYXRhYmFzZTo6c2V0T2JzZXJ2ZXIoV2ViRGF0YWJhc2VPYnNlcnZlciog
b2JzZXJ2ZXIpCit7CisgICAgZGF0YWJhc2VPYnNlcnZlciA9IG9ic2VydmVyOworfQorCitXZWJE
YXRhYmFzZU9ic2VydmVyKiBXZWJEYXRhYmFzZTo6b2JzZXJ2ZXIoKQoreworICAgIHJldHVybiBk
YXRhYmFzZU9ic2VydmVyOworfQorCit2b2lkIFdlYkRhdGFiYXNlOjp1cGRhdGVEYXRhYmFzZVNp
emUoCisgICAgY29uc3QgV2ViU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdCBXZWJTdHJp
bmcmIGRhdGFiYXNlTmFtZSwKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgZGF0YWJhc2VTaXplLCB1
bnNpZ25lZCBsb25nIGxvbmcgc3BhY2VBdmFpbGFibGUpCit7CisvLyBGSVhNRTogYWRkIHRoZSBR
dW90YVRyYWNrZXIgY2xhc3MuCisvLyAgICAgV2ViQ29yZTo6UXVvdGFUcmFja2VyOjppbnN0YW5j
ZSgpLnVwZGF0ZURhdGFiYXNlU2l6ZSgKKy8vICAgICAgICAgb3JpZ2luSWRlbnRpZmllciwgZGF0
YWJhc2VOYW1lLCBkYXRhYmFzZVNpemUsIHNwYWNlQXZhaWxhYmxlKTsKK30KKworV2ViRGF0YWJh
c2U6OldlYkRhdGFiYXNlKGNvbnN0IFdURjo6UGFzc1JlZlB0cjxEYXRhYmFzZT4mIGRhdGFiYXNl
KQorICAgIDogbV9wcml2YXRlKHN0YXRpY19jYXN0PFdlYkRhdGFiYXNlUHJpdmF0ZSo+KGRhdGFi
YXNlLnJlbGVhc2VSZWYoKSkpCit7Cit9CisKK1dlYkRhdGFiYXNlJiBXZWJEYXRhYmFzZTo6b3Bl
cmF0b3I9KGNvbnN0IFdURjo6UGFzc1JlZlB0cjxEYXRhYmFzZT4mIGRhdGFiYXNlKQoreworICAg
IGFzc2lnbihzdGF0aWNfY2FzdDxXZWJEYXRhYmFzZVByaXZhdGUqPihkYXRhYmFzZS5yZWxlYXNl
UmVmKCkpKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1dlYkRhdGFiYXNlOjpvcGVyYXRvciBX
VEY6OlBhc3NSZWZQdHI8RGF0YWJhc2U+KCkgY29uc3QKK3sKKyAgICByZXR1cm4gUGFzc1JlZlB0
cjxEYXRhYmFzZT4oY29uc3RfY2FzdDxXZWJEYXRhYmFzZVByaXZhdGUqPihtX3ByaXZhdGUpKTsK
K30KKwordm9pZCBXZWJEYXRhYmFzZTo6YXNzaWduKFdlYkRhdGFiYXNlUHJpdmF0ZSogZCkKK3sK
KyAgICAvLyBkIGlzIGFscmVhZHkgcmVmJ2QgZm9yIHVzIGJ5IHRoZSBjYWxsZXIKKyAgICBpZiAo
bV9wcml2YXRlKQorICAgICAgICBtX3ByaXZhdGUtPmRlcmVmKCk7CisgICAgbV9wcml2YXRlID0g
ZDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkRldlRvb2xzQWdlbnRQcml2YXRlLmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkRldlRvb2xzQWdlbnRQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMGMxYzY3ZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2
VG9vbHNBZ2VudFByaXZhdGUuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJEZXZUb29sc0Fn
ZW50UHJpdmF0ZV9oCisjZGVmaW5lIFdlYkRldlRvb2xzQWdlbnRQcml2YXRlX2gKKworLy8gRklY
TUU6IFRoaXMgcmVsYXRpdmUgcGF0aCBpcyBhIHRlbXBvcmFyeSBoYWNrIHRvIHN1cHBvcnQgdXNp
bmcgdGhpcworLy8gaGVhZGVyIGZyb20gd2Via2l0L2dsdWUuCisjaW5jbHVkZSAiLi4vcHVibGlj
L1dlYkRldlRvb2xzQWdlbnQuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJGcmFt
ZUltcGw7CisKK2NsYXNzIFdlYkRldlRvb2xzQWdlbnRQcml2YXRlIDogcHVibGljIFdlYkRldlRv
b2xzQWdlbnQgeworcHVibGljOgorICAgIC8vIE5vdGlmaWNhdGlvbnMgZnJvbSBGcmFtZUxvYWRl
ckNsaWVudEltcGw6CisKKyAgICAvLyBUaGUgd2luZG93IG9iamVjdCBmb3IgdGhlIGZyYW1lIGhh
cyBiZWVuIGNsZWFyZWQgb2YgYW55IGV4dHJhIHByb3BlcnRpZXMKKyAgICAvLyB0aGF0IG1heSBo
YXZlIGJlZW4gc2V0IGJ5IHNjcmlwdCBmcm9tIHRoZSBwcmV2aW91c2x5IGxvYWRlZCBkb2N1bWVu
dC4KKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2xlYXJXaW5kb3dPYmplY3QoV2ViRnJhbWVJbXBsKikg
PSAwOworCisgICAgLy8gVGhlIHByb3Zpc2lvbmFsIGRhdGFzb3VyY2UgaXMgbm93IGNvbW1pdHRl
ZC4gIFRoZSBmaXJzdCBwYXJ0IG9mIHRoZQorICAgIC8vIHJlc3BvbnNlIGJvZHkgaGFzIGJlZW4g
cmVjZWl2ZWQsIGFuZCB0aGUgZW5jb2Rpbmcgb2YgdGhlIHJlc3BvbnNlIGJvZHkKKyAgICAvLyBp
cyBrbm93bi4KKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0UHJvdmlzaW9uYWxMb2FkKFdlYkZy
YW1lSW1wbCosIGJvb2wgaXNOZXdOYXZpZ2F0aW9uKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRy
YWdEYXRhLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRHJhZ0RhdGEuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhZjExMTkKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRyYWdEYXRhLmNwcApAQCAtMCwwICsxLDIxOSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJEcmFnRGF0YS5oIgorCisjaW5jbHVkZSAiQ2hy
b21pdW1EYXRhT2JqZWN0LmgiCisjaW5jbHVkZSAiV2ViRGF0YS5oIgorI2luY2x1ZGUgIldlYlN0
cmluZy5oIgorI2luY2x1ZGUgIldlYlVSTC5oIgorI2luY2x1ZGUgIldlYlZlY3Rvci5oIgorCisj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJEcmFnRGF0YVByaXZhdGUgOiBwdWJsaWMg
Q2hyb21pdW1EYXRhT2JqZWN0IHsKK307CisKK3ZvaWQgV2ViRHJhZ0RhdGE6OmluaXRpYWxpemUo
KQoreworICAgIGFzc2lnbihzdGF0aWNfY2FzdDxXZWJEcmFnRGF0YVByaXZhdGUqPihDaHJvbWl1
bURhdGFPYmplY3Q6OmNyZWF0ZSgpLnJlbGVhc2VSZWYoKSkpOworfQorCit2b2lkIFdlYkRyYWdE
YXRhOjpyZXNldCgpCit7CisgICAgYXNzaWduKDApOworfQorCit2b2lkIFdlYkRyYWdEYXRhOjph
c3NpZ24oY29uc3QgV2ViRHJhZ0RhdGEmIG90aGVyKQoreworICAgIFdlYkRyYWdEYXRhUHJpdmF0
ZSogcCA9IGNvbnN0X2Nhc3Q8V2ViRHJhZ0RhdGFQcml2YXRlKj4ob3RoZXIubV9wcml2YXRlKTsK
KyAgICBpZiAocCkKKyAgICAgICAgcC0+cmVmKCk7CisgICAgYXNzaWduKHApOworfQorCitXZWJV
UkwgV2ViRHJhZ0RhdGE6OnVybCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFpc051bGwoKSk7Cisg
ICAgcmV0dXJuIG1fcHJpdmF0ZS0+dXJsOworfQorCit2b2lkIFdlYkRyYWdEYXRhOjpzZXRVUkwo
Y29uc3QgV2ViVVJMJiB1cmwpCit7CisgICAgZW5zdXJlTXV0YWJsZSgpOworICAgIG1fcHJpdmF0
ZS0+dXJsID0gdXJsOworfQorCitXZWJTdHJpbmcgV2ViRHJhZ0RhdGE6OnVybFRpdGxlKCkgY29u
c3QKK3sKKyAgICBBU1NFUlQoIWlzTnVsbCgpKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT51cmxU
aXRsZTsKK30KKwordm9pZCBXZWJEcmFnRGF0YTo6c2V0VVJMVGl0bGUoY29uc3QgV2ViU3RyaW5n
JiB1cmxUaXRsZSkKK3sKKyAgICBlbnN1cmVNdXRhYmxlKCk7CisgICAgbV9wcml2YXRlLT51cmxU
aXRsZSA9IHVybFRpdGxlOworfQorCitXZWJTdHJpbmcgV2ViRHJhZ0RhdGE6OmZpbGVFeHRlbnNp
b24oKSBjb25zdAoreworICAgIEFTU0VSVCghaXNOdWxsKCkpOworICAgIHJldHVybiBtX3ByaXZh
dGUtPmZpbGVFeHRlbnNpb247Cit9CisKK3ZvaWQgV2ViRHJhZ0RhdGE6OnNldEZpbGVFeHRlbnNp
b24oY29uc3QgV2ViU3RyaW5nJiBmaWxlRXh0ZW5zaW9uKQoreworICAgIGVuc3VyZU11dGFibGUo
KTsKKyAgICBtX3ByaXZhdGUtPmZpbGVFeHRlbnNpb24gPSBmaWxlRXh0ZW5zaW9uOworfQorCiti
b29sIFdlYkRyYWdEYXRhOjpoYXNGaWxlTmFtZXMoKSBjb25zdAoreworICAgIEFTU0VSVCghaXNO
dWxsKCkpOworICAgIHJldHVybiAhbV9wcml2YXRlLT5maWxlbmFtZXMuaXNFbXB0eSgpOworfQor
Cit2b2lkIFdlYkRyYWdEYXRhOjpmaWxlTmFtZXMoV2ViVmVjdG9yPFdlYlN0cmluZz4mIGZpbGVO
YW1lcykgY29uc3QKK3sKKyAgICBBU1NFUlQoIWlzTnVsbCgpKTsKKyAgICBmaWxlTmFtZXMgPSBt
X3ByaXZhdGUtPmZpbGVuYW1lczsKK30KKwordm9pZCBXZWJEcmFnRGF0YTo6c2V0RmlsZU5hbWVz
KGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBmaWxlTmFtZXMpCit7CisgICAgZW5zdXJlTXV0
YWJsZSgpOworICAgIG1fcHJpdmF0ZS0+ZmlsZW5hbWVzLmNsZWFyKCk7CisgICAgbV9wcml2YXRl
LT5maWxlbmFtZXMuYXBwZW5kKGZpbGVOYW1lcy5kYXRhKCksIGZpbGVOYW1lcy5zaXplKCkpOwor
fQorCit2b2lkIFdlYkRyYWdEYXRhOjphcHBlbmRUb0ZpbGVOYW1lcyhjb25zdCBXZWJTdHJpbmcm
IGZpbGVOYW1lKQoreworICAgIGVuc3VyZU11dGFibGUoKTsKKyAgICBtX3ByaXZhdGUtPmZpbGVu
YW1lcy5hcHBlbmQoZmlsZU5hbWUpOworfQorCitXZWJTdHJpbmcgV2ViRHJhZ0RhdGE6OnBsYWlu
VGV4dCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFpc051bGwoKSk7CisgICAgcmV0dXJuIG1fcHJp
dmF0ZS0+cGxhaW5UZXh0OworfQorCit2b2lkIFdlYkRyYWdEYXRhOjpzZXRQbGFpblRleHQoY29u
c3QgV2ViU3RyaW5nJiBwbGFpblRleHQpCit7CisgICAgZW5zdXJlTXV0YWJsZSgpOworICAgIG1f
cHJpdmF0ZS0+cGxhaW5UZXh0ID0gcGxhaW5UZXh0OworfQorCitXZWJTdHJpbmcgV2ViRHJhZ0Rh
dGE6Omh0bWxUZXh0KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIWlzTnVsbCgpKTsKKyAgICByZXR1
cm4gbV9wcml2YXRlLT50ZXh0SHRtbDsKK30KKwordm9pZCBXZWJEcmFnRGF0YTo6c2V0SFRNTFRl
eHQoY29uc3QgV2ViU3RyaW5nJiBodG1sVGV4dCkKK3sKKyAgICBlbnN1cmVNdXRhYmxlKCk7Cisg
ICAgbV9wcml2YXRlLT50ZXh0SHRtbCA9IGh0bWxUZXh0OworfQorCitXZWJVUkwgV2ViRHJhZ0Rh
dGE6Omh0bWxCYXNlVVJMKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIWlzTnVsbCgpKTsKKyAgICBy
ZXR1cm4gbV9wcml2YXRlLT5odG1sQmFzZVVybDsKK30KKwordm9pZCBXZWJEcmFnRGF0YTo6c2V0
SFRNTEJhc2VVUkwoY29uc3QgV2ViVVJMJiBodG1sQmFzZVVSTCkKK3sKKyAgICBlbnN1cmVNdXRh
YmxlKCk7CisgICAgbV9wcml2YXRlLT5odG1sQmFzZVVybCA9IGh0bWxCYXNlVVJMOworfQorCitX
ZWJTdHJpbmcgV2ViRHJhZ0RhdGE6OmZpbGVDb250ZW50RmlsZU5hbWUoKSBjb25zdAoreworICAg
IEFTU0VSVCghaXNOdWxsKCkpOworICAgIHJldHVybiBtX3ByaXZhdGUtPmZpbGVDb250ZW50Rmls
ZW5hbWU7Cit9CisKK3ZvaWQgV2ViRHJhZ0RhdGE6OnNldEZpbGVDb250ZW50RmlsZU5hbWUoY29u
c3QgV2ViU3RyaW5nJiBmaWxlTmFtZSkKK3sKKyAgICBlbnN1cmVNdXRhYmxlKCk7CisgICAgbV9w
cml2YXRlLT5maWxlQ29udGVudEZpbGVuYW1lID0gZmlsZU5hbWU7Cit9CisKK1dlYkRhdGEgV2Vi
RHJhZ0RhdGE6OmZpbGVDb250ZW50KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIWlzTnVsbCgpKTsK
KyAgICByZXR1cm4gV2ViRGF0YShtX3ByaXZhdGUtPmZpbGVDb250ZW50KTsKK30KKwordm9pZCBX
ZWJEcmFnRGF0YTo6c2V0RmlsZUNvbnRlbnQoY29uc3QgV2ViRGF0YSYgZmlsZUNvbnRlbnQpCit7
CisgICAgZW5zdXJlTXV0YWJsZSgpOworICAgIG1fcHJpdmF0ZS0+ZmlsZUNvbnRlbnQgPSBmaWxl
Q29udGVudDsKK30KKworV2ViRHJhZ0RhdGE6OldlYkRyYWdEYXRhKGNvbnN0IFdURjo6UGFzc1Jl
ZlB0cjxXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q+JiBkYXRhKQorICAgIDogbV9wcml2YXRl
KHN0YXRpY19jYXN0PFdlYkRyYWdEYXRhUHJpdmF0ZSo+KGRhdGEucmVsZWFzZVJlZigpKSkKK3sK
K30KKworV2ViRHJhZ0RhdGEmIFdlYkRyYWdEYXRhOjpvcGVyYXRvcj0oY29uc3QgV1RGOjpQYXNz
UmVmUHRyPFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdD4mIGRhdGEpCit7CisgICAgYXNzaWdu
KHN0YXRpY19jYXN0PFdlYkRyYWdEYXRhUHJpdmF0ZSo+KGRhdGEucmVsZWFzZVJlZigpKSk7Cisg
ICAgcmV0dXJuICp0aGlzOworfQorCitXZWJEcmFnRGF0YTo6b3BlcmF0b3IgV1RGOjpQYXNzUmVm
UHRyPFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdD4oKSBjb25zdAoreworICAgIHJldHVybiBQ
YXNzUmVmUHRyPENocm9taXVtRGF0YU9iamVjdD4oY29uc3RfY2FzdDxXZWJEcmFnRGF0YVByaXZh
dGUqPihtX3ByaXZhdGUpKTsKK30KKwordm9pZCBXZWJEcmFnRGF0YTo6YXNzaWduKFdlYkRyYWdE
YXRhUHJpdmF0ZSogcCkKK3sKKyAgICAvLyBwIGlzIGFscmVhZHkgcmVmJ2QgZm9yIHVzIGJ5IHRo
ZSBjYWxsZXIKKyAgICBpZiAobV9wcml2YXRlKQorICAgICAgICBtX3ByaXZhdGUtPmRlcmVmKCk7
CisgICAgbV9wcml2YXRlID0gcDsKK30KKwordm9pZCBXZWJEcmFnRGF0YTo6ZW5zdXJlTXV0YWJs
ZSgpCit7CisgICAgQVNTRVJUKCFpc051bGwoKSk7CisgICAgaWYgKCFtX3ByaXZhdGUtPmhhc09u
ZVJlZigpKQorICAgICAgICBhc3NpZ24oc3RhdGljX2Nhc3Q8V2ViRHJhZ0RhdGFQcml2YXRlKj4o
bV9wcml2YXRlLT5jb3B5KCkucmVsZWFzZVJlZigpKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJFbGVtZW50LmNwcCBiL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViRWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uM2YxM2VlMQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViRWxlbWVudC5jcHAKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXZWJFbGVtZW50LmgiCisKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitXZWJFbGVtZW50OjpXZWJFbGVtZW50KGNvbnN0IFdURjo6UGFzc1JlZlB0
cjxXZWJDb3JlOjpFbGVtZW50PiYgZWxlbSkKKyAgICA6IFdlYk5vZGUoZWxlbS5yZWxlYXNlUmVm
KCkpCit7Cit9CisKK1dlYkVsZW1lbnQmIFdlYkVsZW1lbnQ6Om9wZXJhdG9yPShjb25zdCBXVEY6
OlBhc3NSZWZQdHI8V2ViQ29yZTo6RWxlbWVudD4mIGVsZW0pCit7CisgICAgV2ViTm9kZTo6YXNz
aWduKGVsZW0ucmVsZWFzZVJlZigpKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1dlYkVsZW1l
bnQ6Om9wZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxFbGVtZW50PigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIFBhc3NSZWZQdHI8RWxlbWVudD4oc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG1fcHJpdmF0ZSkp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKw==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42822</attachid>
            <date>2009-11-09 18:13:37 -0800</date>
            <delta_ts>2009-11-09 23:54:14 -0800</delta_ts>
            <desc>Up-streaming Chromium API src files: WebFileChooser...WebImageSkia</desc>
            <filename>bug-31276-20091109181335.patch</filename>
            <type>text/plain</type>
            <size>123704</size>
            <attacher name="Yaar Schnitman">yaar</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IDgxZmYyODAuLmFiMzQyN2QgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDIyOCBAQAorMjAwOS0xMS0wOSAgWWFhciBTY2huaXRtYW4gIDx5YWFyQGNocm9taXVtLm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcC1zdHJl
YW1pbmcgQ2hyb21pdW0gQVBJIHNyYyBmaWxlczogV2ViRmlsZUNob29zZXIuLi5XZWJJbWFnZVNr
aWEKKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzEy
NzYKKworICAgICAgICAqIHNyYy9XZWJGaWxlQ2hvb3NlckNvbXBsZXRpb25JbXBsLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkZpbGVDaG9vc2VyQ29tcGxldGlvbkltcGw6OldlYkZp
bGVDaG9vc2VyQ29tcGxldGlvbkltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJGaWxlQ2hvb3Nl
ckNvbXBsZXRpb25JbXBsOjp+V2ViRmlsZUNob29zZXJDb21wbGV0aW9uSW1wbCk6CisgICAgICAg
IChXZWJLaXQ6OldlYkZpbGVDaG9vc2VyQ29tcGxldGlvbkltcGw6OmRpZENob29zZUZpbGUpOgor
ICAgICAgICAqIHNyYy9XZWJGaWxlQ2hvb3NlckNvbXBsZXRpb25JbXBsLmg6IEFkZGVkLgorICAg
ICAgICAqIHNyYy9XZWJGb250Q2FjaGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vi
Rm9udENhY2hlOjpmb250RGF0YUNvdW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViRm9udENhY2hl
OjppbmFjdGl2ZUZvbnREYXRhQ291bnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJGb250Q2FjaGU6
OmNsZWFyKToKKyAgICAgICAgKiBzcmMvV2ViRm9ybUVsZW1lbnQuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6V2ViRm9ybUVsZW1lbnQ6OldlYkZvcm1FbGVtZW50KToKKyAgICAgICAgKFdl
YktpdDo6V2ViRm9ybUVsZW1lbnQ6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJLaXQ6OldlYkZv
cm1FbGVtZW50OjpvcGVyYXRvciBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6SFRNTEZvcm1FbGVt
ZW50Pik6CisgICAgICAgIChXZWJLaXQ6OldlYkZvcm1FbGVtZW50OjphdXRvQ29tcGxldGUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJGb3JtRWxlbWVudDo6YWN0aW9uKToKKyAgICAgICAgKFdlYktp
dDo6V2ViRm9ybUVsZW1lbnQ6OnN1Ym1pdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZvcm1FbGVt
ZW50OjpnZXROYW1lZEVsZW1lbnRzKToKKyAgICAgICAgKiBzcmMvV2ViRnJhbWVJbXBsLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJLaXQ6OmZyYW1lQ29udGVudEFzUGxhaW5UZXh0KToKKyAgICAg
ICAgKFdlYktpdDo6Q2hyb21lUHJpbnRDb250ZXh0OjpDaHJvbWVQcmludENvbnRleHQpOgorICAg
ICAgICAoV2ViS2l0OjpDaHJvbWVQcmludENvbnRleHQ6OmJlZ2luKToKKyAgICAgICAgKFdlYktp
dDo6Q2hyb21lUHJpbnRDb250ZXh0OjpnZXRQYWdlU2hyaW5rKToKKyAgICAgICAgKFdlYktpdDo6
Q2hyb21lUHJpbnRDb250ZXh0OjpzcG9vbFBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpEYXRhU291
cmNlRm9yRG9jTG9hZGVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpEZWZlcnJl
ZFNjb3BlU3RyaW5nTWF0Y2hlczo6RGVmZXJyZWRTY29wZVN0cmluZ01hdGNoZXMpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OkRlZmVycmVkU2NvcGVTdHJpbmdNYXRjaGVzOjpkb1Rp
bWVvdXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZTo6ZnJhbWVGb3JFbnRlcmVkQ29udGV4
dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lOjpmcmFtZUZvckN1cnJlbnRDb250ZXh0KToK
KyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpuYW1lKToKKyAgICAgICAgKFdlYktpdDo6
V2ViRnJhbWVJbXBsOjp1cmwpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmZhdklj
b25VUkwpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6Om9wZW5TZWFyY2hEZXNjcmlw
dGlvblVSTCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6c2Nyb2xsT2Zmc2V0KToK
KyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpjb250ZW50c1NpemUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJGcmFtZUltcGw6OmNvbnRlbnRzUHJlZmVycmVkV2lkdGgpOgorICAgICAgICAo
V2ViS2l0OjpXZWJGcmFtZUltcGw6Omhhc1Zpc2libGVDb250ZW50KToKKyAgICAgICAgKFdlYktp
dDo6V2ViRnJhbWVJbXBsOjp2aWV3KToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpv
cGVuZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OnBhcmVudCk6CisgICAgICAg
IChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6dG9wKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJ
bXBsOjpmaXJzdENoaWxkKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpsYXN0Q2hp
bGQpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6Om5leHRTaWJsaW5nKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpwcmV2aW91c1NpYmxpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJGcmFtZUltcGw6OnRyYXZlcnNlTmV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZy
YW1lSW1wbDo6dHJhdmVyc2VQcmV2aW91cyk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1w
bDo6ZmluZENoaWxkQnlOYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpmaW5k
Q2hpbGRCeUV4cHJlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmZvcm1z
KToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpzZWN1cml0eU9yaWdpbik6CisgICAg
ICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6Z3JhbnRVbml2ZXJzYWxBY2Nlc3MpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OndpbmRvd09iamVjdCk6CisgICAgICAgIChXZWJLaXQ6
OldlYkZyYW1lSW1wbDo6YmluZFRvV2luZG93T2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
RnJhbWVJbXBsOjpleGVjdXRlU2NyaXB0KToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBs
OjpleGVjdXRlU2NyaXB0SW5OZXdDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJ
bXBsOjpleGVjdXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
RnJhbWVJbXBsOjphZGRNZXNzYWdlVG9Db25zb2xlKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJh
bWVJbXBsOjpjb2xsZWN0R2FyYmFnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6
bWFpbldvcmxkU2NyaXB0Q29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6
aW5zZXJ0U3R5bGVUZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpyZWxvYWQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmxvYWRSZXF1ZXN0KToKKyAgICAgICAg
KFdlYktpdDo6V2ViRnJhbWVJbXBsOjpsb2FkSGlzdG9yeUl0ZW0pOgorICAgICAgICAoV2ViS2l0
OjpXZWJGcmFtZUltcGw6OmxvYWREYXRhKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBs
Ojpsb2FkSFRNTFN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6aXNMb2Fk
aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpzdG9wTG9hZGluZyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6cHJvdmlzaW9uYWxEYXRhU291cmNlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpkYXRhU291cmNlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViRnJhbWVJbXBsOjpwcmV2aW91c0hpc3RvcnlJdGVtKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
RnJhbWVJbXBsOjpjdXJyZW50SGlzdG9yeUl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFt
ZUltcGw6OmVuYWJsZVZpZXdTb3VyY2VNb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJ
bXBsOjppc1ZpZXdTb3VyY2VNb2RlRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1l
SW1wbDo6c2V0UmVmZXJyZXJGb3JSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJ
bXBsOjpkaXNwYXRjaFdpbGxTZW5kUmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1l
SW1wbDo6Y29tbWl0RG9jdW1lbnREYXRhKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBs
Ojp1bmxvYWRMaXN0ZW5lckNvdW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpp
c1Byb2Nlc3NpbmdVc2VyR2VzdHVyZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6
d2lsbFN1cHByZXNzT3BlbmVySW5OZXdGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1l
SW1wbDo6cmVwbGFjZVNlbGVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6
aW5zZXJ0VGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6c2V0TWFya2VkVGV4
dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6dW5tYXJrVGV4dCk6CisgICAgICAg
IChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6aGFzTWFya2VkVGV4dCk6CisgICAgICAgIChXZWJLaXQ6
OldlYkZyYW1lSW1wbDo6bWFya2VkUmFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUlt
cGw6OmV4ZWN1dGVDb21tYW5kKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjppc0Nv
bW1hbmRFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjplbmFibGVDb250
aW51b3VzU3BlbGxDaGVja2luZyk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6aXND
b250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFt
ZUltcGw6Omhhc1NlbGVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6c2Vs
ZWN0aW9uUmFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OnNlbGVjdGlvbkFz
VGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6c2VsZWN0aW9uQXNNYXJrdXAp
OgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OnByaW50QmVnaW4pOgorICAgICAgICAo
V2ViS2l0OjpXZWJGcmFtZUltcGw6OmdldFByaW50UGFnZVNocmluayk6CisgICAgICAgIChXZWJL
aXQ6OldlYkZyYW1lSW1wbDo6cHJpbnRQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJ
bXBsOjpwcmludEVuZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6ZmluZCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6c3RvcEZpbmRpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJGcmFtZUltcGw6OnNjb3BlU3RyaW5nTWF0Y2hlcyk6CisgICAgICAgIChXZWJLaXQ6
OldlYkZyYW1lSW1wbDo6Y2FuY2VsUGVuZGluZ1Njb3BpbmdFZmZvcnQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJGcmFtZUltcGw6OmluY3JlYXNlTWF0Y2hDb3VudCk6CisgICAgICAgIChXZWJLaXQ6
OldlYkZyYW1lSW1wbDo6cmVwb3J0RmluZEluUGFnZVNlbGVjdGlvbik6CisgICAgICAgIChXZWJL
aXQ6OldlYkZyYW1lSW1wbDo6cmVzZXRNYXRjaENvdW50KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
RnJhbWVJbXBsOjpjb21wbGV0ZVVSTCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6
Y29udGVudEFzVGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6Y29udGVudEFz
TWFya3VwKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OldlYkZyYW1lSW1wbCk6CisgICAgICAgIChXZWJLaXQ6
OldlYkZyYW1lSW1wbDo6fldlYkZyYW1lSW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1l
SW1wbDo6aW5pdGlhbGl6ZUFzTWFpbkZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJ
bXBsOjpjcmVhdGVDaGlsZEZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjps
YXlvdXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OnBhaW50KToKKyAgICAgICAg
KFdlYktpdDo6V2ViRnJhbWVJbXBsOjpjcmVhdGVGcmFtZVZpZXcpOgorICAgICAgICAoV2ViS2l0
OjpXZWJGcmFtZUltcGw6OmZyb21GcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1w
bDo6dmlld0ltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmRhdGFTb3VyY2VJ
bXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpwcm92aXNpb25hbERhdGFTb3Vy
Y2VJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpzZXRGaW5kRW5kc3RhdGVG
b2N1c0FuZFNlbGVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6ZGlkRmFp
bCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6c2V0QWxsb3dzU2Nyb2xsaW5nKToK
KyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpyZWdpc3RlclBhc3N3b3JkTGlzdGVuZXIp
OgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmdldFBhc3N3b3JkTGlzdGVuZXIpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmNsb3NpbmcpOgorICAgICAgICAoV2ViS2l0
OjpXZWJGcmFtZUltcGw6OmludmFsaWRhdGVBcmVhKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJh
bWVJbXBsOjphZGRNYXJrZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OnNldE1h
cmtlckFjdGl2ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6b3JkaW5hbE9mRmly
c3RNYXRjaEZvckZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpzaG91bGRT
Y29wZU1hdGNoZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OnNjb3BlU3RyaW5n
TWF0Y2hlc1Nvb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmNhbGxTY29wZVN0
cmluZ01hdGNoZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmludmFsaWRhdGVJ
Zk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6Y2xlYXJQYXNzd29y
ZExpc3RlbmVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6bG9hZEphdmFTY3Jp
cHRVUkwpOgorICAgICAgICAqIHNyYy9XZWJGcmFtZUltcGwuaDogQWRkZWQuCisgICAgICAgIChX
ZWJLaXQ6OldlYkZyYW1lSW1wbDo6bGl2ZU9iamVjdENvdW50KToKKyAgICAgICAgKFdlYktpdDo6
V2ViRnJhbWVJbXBsOjpmcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6ZnJh
bWVWaWV3KToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjphY3RpdmVNYXRjaEZyYW1l
KToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpjbGllbnQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJGcmFtZUltcGw6OmRyb3BDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFt
ZUltcGw6OkNsaWVudEhhbmRsZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJ
bXBsOjpDbGllbnRIYW5kbGU6OmNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1w
bDo6Q2xpZW50SGFuZGxlOjpkcm9wQ2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJ
bXBsOjpDbGllbnRIYW5kbGU6OkNsaWVudEhhbmRsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkZy
YW1lSW1wbDo6KToKKyAgICAgICAgKiBzcmMvV2ViSFRUUEJvZHkuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6V2ViSFRUUEJvZHk6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJIVFRQQm9keTo6cmVzZXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJIVFRQQm9keTo6YXNzaWdu
KToKKyAgICAgICAgKFdlYktpdDo6V2ViSFRUUEJvZHk6OmVsZW1lbnRDb3VudCk6CisgICAgICAg
IChXZWJLaXQ6OldlYkhUVFBCb2R5OjplbGVtZW50QXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJI
VFRQQm9keTo6YXBwZW5kRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYkhUVFBCb2R5OjphcHBl
bmRGaWxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSFRUUEJvZHk6OmlkZW50aWZpZXIpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJIVFRQQm9keTo6c2V0SWRlbnRpZmllcik6CisgICAgICAgIChXZWJL
aXQ6OldlYkhUVFBCb2R5OjpXZWJIVFRQQm9keSk6CisgICAgICAgIChXZWJLaXQ6OldlYkhUVFBC
b2R5OjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViS2l0OjpXZWJIVFRQQm9keTo6b3BlcmF0b3Ig
UGFzc1JlZlB0cjxGb3JtRGF0YT4pOgorICAgICAgICAoV2ViS2l0OjpXZWJIVFRQQm9keTo6ZW5z
dXJlTXV0YWJsZSk6CisgICAgICAgICogc3JjL1dlYkhpc3RvcnlJdGVtLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYkhpc3RvcnlJdGVtOjppbml0aWFsaXplKToKKyAgICAgICAgKFdl
YktpdDo6V2ViSGlzdG9yeUl0ZW06OnJlc2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViSGlzdG9y
eUl0ZW06OmFzc2lnbik6CisgICAgICAgIChXZWJLaXQ6OldlYkhpc3RvcnlJdGVtOjp1cmxTdHJp
bmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJIaXN0b3J5SXRlbTo6c2V0VVJMU3RyaW5nKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViSGlzdG9yeUl0ZW06Om9yaWdpbmFsVVJMU3RyaW5nKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViSGlzdG9yeUl0ZW06OnNldE9yaWdpbmFsVVJMU3RyaW5nKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViSGlzdG9yeUl0ZW06OnJlZmVycmVyKToKKyAgICAgICAgKFdlYktpdDo6
V2ViSGlzdG9yeUl0ZW06OnNldFJlZmVycmVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViSGlzdG9y
eUl0ZW06OnRhcmdldCk6CisgICAgICAgIChXZWJLaXQ6OldlYkhpc3RvcnlJdGVtOjpzZXRUYXJn
ZXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJIaXN0b3J5SXRlbTo6cGFyZW50KToKKyAgICAgICAg
KFdlYktpdDo6V2ViSGlzdG9yeUl0ZW06OnNldFBhcmVudCk6CisgICAgICAgIChXZWJLaXQ6Oldl
Ykhpc3RvcnlJdGVtOjp0aXRsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkhpc3RvcnlJdGVtOjpz
ZXRUaXRsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkhpc3RvcnlJdGVtOjphbHRlcm5hdGVUaXRs
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkhpc3RvcnlJdGVtOjpzZXRBbHRlcm5hdGVUaXRsZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkhpc3RvcnlJdGVtOjpsYXN0VmlzaXRlZFRpbWUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJIaXN0b3J5SXRlbTo6c2V0TGFzdFZpc2l0ZWRUaW1lKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViSGlzdG9yeUl0ZW06OnNjcm9sbE9mZnNldCk6CisgICAgICAgIChXZWJL
aXQ6OldlYkhpc3RvcnlJdGVtOjpzZXRTY3JvbGxPZmZzZXQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJIaXN0b3J5SXRlbTo6aXNUYXJnZXRJdGVtKToKKyAgICAgICAgKFdlYktpdDo6V2ViSGlzdG9y
eUl0ZW06OnNldElzVGFyZ2V0SXRlbSk6CisgICAgICAgIChXZWJLaXQ6OldlYkhpc3RvcnlJdGVt
Ojp2aXNpdENvdW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViSGlzdG9yeUl0ZW06OnNldFZpc2l0
Q291bnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJIaXN0b3J5SXRlbTo6ZG9jdW1lbnRTdGF0ZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkhpc3RvcnlJdGVtOjpzZXREb2N1bWVudFN0YXRlKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViSGlzdG9yeUl0ZW06Omh0dHBDb250ZW50VHlwZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYkhpc3RvcnlJdGVtOjpzZXRIVFRQQ29udGVudFR5cGUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJIaXN0b3J5SXRlbTo6aHR0cEJvZHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJI
aXN0b3J5SXRlbTo6c2V0SFRUUEJvZHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJIaXN0b3J5SXRl
bTo6Y2hpbGRyZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJIaXN0b3J5SXRlbTo6c2V0Q2hpbGRy
ZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJIaXN0b3J5SXRlbTo6YXBwZW5kVG9DaGlsZHJlbik6
CisgICAgICAgIChXZWJLaXQ6OldlYkhpc3RvcnlJdGVtOjpXZWJIaXN0b3J5SXRlbSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkhpc3RvcnlJdGVtOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViS2l0
OjpXZWJIaXN0b3J5SXRlbTo6b3BlcmF0b3IgUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJIaXN0b3J5SXRlbTo6ZW5zdXJlTXV0YWJsZSk6CisgICAgICAgICog
c3JjL1dlYkltYWdlQ0cuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViSW1hZ2U6OmZy
b21EYXRhKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW1hZ2U6OnJlc2V0KToKKyAgICAgICAgKFdl
YktpdDo6V2ViSW1hZ2U6OmFzc2lnbik6CisgICAgICAgIChXZWJLaXQ6OldlYkltYWdlOjppc051
bGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbWFnZTo6c2l6ZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYkltYWdlOjpXZWJJbWFnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkltYWdlOjpvcGVyYXRv
cj0pOgorICAgICAgICAqIHNyYy9XZWJJbWFnZVNraWEuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YktpdDo6V2ViSW1hZ2U6OmZyb21EYXRhKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW1hZ2U6OnJl
c2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW1hZ2U6OmFzc2lnbik6CisgICAgICAgIChXZWJL
aXQ6OldlYkltYWdlOjppc051bGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbWFnZTo6c2l6ZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkltYWdlOjpXZWJJbWFnZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYkltYWdlOjpvcGVyYXRvcj0pOgorCiAyMDA5LTExLTA5ICBZYWFyIFNjaG5pdG1hbiAgPHlh
YXJAY2hyb21pdW0uc3JjPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgpk
aWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGaWxlQ2hvb3NlckNvbXBsZXRpb25J
bXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRmlsZUNob29zZXJDb21wbGV0aW9uSW1w
bC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE1MmRjNQotLS0gL2Rl
di9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRmlsZUNob29zZXJDb21wbGV0aW9u
SW1wbC5jcHAKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
ZWJGaWxlQ2hvb3NlckNvbXBsZXRpb25JbXBsLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitX
ZWJGaWxlQ2hvb3NlckNvbXBsZXRpb25JbXBsOjpXZWJGaWxlQ2hvb3NlckNvbXBsZXRpb25JbXBs
KFBhc3NSZWZQdHI8V2ViQ29yZTo6RmlsZUNob29zZXI+IGNob29zZXIpCisgICAgOiBtX2ZpbGVD
aG9vc2VyKGNob29zZXIpCit7Cit9CisKK1dlYkZpbGVDaG9vc2VyQ29tcGxldGlvbkltcGw6On5X
ZWJGaWxlQ2hvb3NlckNvbXBsZXRpb25JbXBsKCkKK3sKK30KKwordm9pZCBXZWJGaWxlQ2hvb3Nl
ckNvbXBsZXRpb25JbXBsOjpkaWRDaG9vc2VGaWxlKGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+
JiBmaWxlTmFtZXMpCit7CisgICAgaWYgKGZpbGVOYW1lcy5zaXplKCkgPT0gMSkKKyAgICAgICAg
bV9maWxlQ2hvb3Nlci0+Y2hvb3NlRmlsZShmaWxlTmFtZXNbMF0pOworICAgIGVsc2UgeworICAg
ICAgICAvLyBUaGlzIGNsYXVzZSBoYW5kbGVzIGEgY2FzZSBvZiBmaWxlX25hbWVzLnNpemUoKT09
MCB0b28uCisgICAgICAgIFZlY3RvcjxXZWJDb3JlOjpTdHJpbmc+IHBhdGhzOworICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGZpbGVOYW1lcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAg
IHBhdGhzLmFwcGVuZChmaWxlTmFtZXNbaV0pOworICAgICAgICBtX2ZpbGVDaG9vc2VyLT5jaG9v
c2VGaWxlcyhwYXRocyk7CisgICAgfQorICAgIC8vIFRoaXMgb2JqZWN0IGlzIG5vIGxvbmdlciBu
ZWVkZWQuCisgICAgZGVsZXRlIHRoaXM7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGaWxlQ2hvb3NlckNvbXBsZXRpb25JbXBs
LmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZpbGVDaG9vc2VyQ29tcGxldGlvbkltcGwuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTc1OWUwCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGaWxlQ2hvb3NlckNvbXBsZXRpb25JbXBsLmgK
QEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViRmlsZUNob29zZXJDb21wbGV0aW9uSW1wbF9oCisj
ZGVmaW5lIFdlYkZpbGVDaG9vc2VyQ29tcGxldGlvbkltcGxfaAorCisvLyBGSVhNRTogVGhlc2Ug
cmVsYXRpdmUgcGF0aHMgYXJlIGEgdGVtcG9yYXJ5IGhhY2sgdG8gc3VwcG9ydCB1c2luZyB0aGlz
CisvLyBoZWFkZXIgZnJvbSB3ZWJraXQvZ2x1ZS4KKyNpbmNsdWRlICIuLi9wdWJsaWMvV2ViRmls
ZUNob29zZXJDb21wbGV0aW9uLmgiCisjaW5jbHVkZSAiLi4vcHVibGljL1dlYlN0cmluZy5oIgor
I2luY2x1ZGUgIi4uL3B1YmxpYy9XZWJWZWN0b3IuaCIKKworI2luY2x1ZGUgIkZpbGVDaG9vc2Vy
LmgiCisKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCit1c2luZyBXZWJLaXQ6OldlYkZp
bGVDaG9vc2VyQ29tcGxldGlvbjsKK3VzaW5nIFdlYktpdDo6V2ViU3RyaW5nOwordXNpbmcgV2Vi
S2l0OjpXZWJWZWN0b3I7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJGaWxlQ2hv
b3NlckNvbXBsZXRpb25JbXBsIDogcHVibGljIFdlYkZpbGVDaG9vc2VyQ29tcGxldGlvbiB7Citw
dWJsaWM6CisgICAgV2ViRmlsZUNob29zZXJDb21wbGV0aW9uSW1wbChQYXNzUmVmUHRyPFdlYkNv
cmU6OkZpbGVDaG9vc2VyPiBjaG9vc2VyKTsKKyAgICB+V2ViRmlsZUNob29zZXJDb21wbGV0aW9u
SW1wbCgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRDaG9vc2VGaWxlKGNvbnN0IFdlYlZlY3RvcjxX
ZWJTdHJpbmc+JiBmaWxlTmFtZXMpOworcHJpdmF0ZToKKyAgICBSZWZQdHI8V2ViQ29yZTo6Rmls
ZUNob29zZXI+IG1fZmlsZUNob29zZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZvbnRDYWNoZS5jcHAg
Yi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZvbnRDYWNoZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNTIzNThlYwotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViRm9udENhY2hlLmNwcApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIldlYkZvbnRDYWNoZS5oIgorCisjaW5jbHVkZSAiRm9udENhY2hlLmgi
CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworLy8g
c3RhdGljCitzaXplX3QgV2ViRm9udENhY2hlOjpmb250RGF0YUNvdW50KCkKK3sKKyAgICByZXR1
cm4gZm9udENhY2hlKCktPmZvbnREYXRhQ291bnQoKTsKK30KKworLy8gc3RhdGljCitzaXplX3Qg
V2ViRm9udENhY2hlOjppbmFjdGl2ZUZvbnREYXRhQ291bnQoKQoreworICAgIHJldHVybiBmb250
Q2FjaGUoKS0+aW5hY3RpdmVGb250RGF0YUNvdW50KCk7Cit9CisKKy8vIHN0YXRpYwordm9pZCBX
ZWJGb250Q2FjaGU6OmNsZWFyKCkKK3sKKyAgICBmb250Q2FjaGUoKS0+aW52YWxpZGF0ZSgpOwor
fQorCit9ICAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkZvcm1FbGVtZW50LmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRm9ybUVsZW1l
bnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlY2QwNWMKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZvcm1FbGVtZW50LmNwcApAQCAt
MCwwICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkZvcm1FbGVtZW50
LmgiCisKKyNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKKyNpbmNsdWRlICJXZWJTdHJpbmcu
aCIKKyNpbmNsdWRlICJXZWJVUkwuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdl
YkZvcm1Qcml2YXRlIDogcHVibGljIEhUTUxGb3JtRWxlbWVudCB7Cit9OworCitXZWJGb3JtRWxl
bWVudDo6V2ViRm9ybUVsZW1lbnQoY29uc3QgV1RGOjpQYXNzUmVmUHRyPEhUTUxGb3JtRWxlbWVu
dD4mIGUpCisgICAgOiBXZWJFbGVtZW50KGUucmVsZWFzZVJlZigpKQoreworfQorCitXZWJGb3Jt
RWxlbWVudCYgV2ViRm9ybUVsZW1lbnQ6Om9wZXJhdG9yPShjb25zdCBXVEY6OlBhc3NSZWZQdHI8
SFRNTEZvcm1FbGVtZW50PiYgZSkKK3sKKyAgICBXZWJOb2RlOjphc3NpZ24oZS5yZWxlYXNlUmVm
KCkpOworICAgIHJldHVybiAqdGhpczsKK30KKworV2ViRm9ybUVsZW1lbnQ6Om9wZXJhdG9yIFdU
Rjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ+KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gUGFzc1JlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+KHN0YXRpY19jYXN0PEhUTUxGb3JtRWxl
bWVudCo+KG1fcHJpdmF0ZSkpOworfQorCitib29sIFdlYkZvcm1FbGVtZW50OjphdXRvQ29tcGxl
dGUoKSBjb25zdAoreworICAgIHJldHVybiBjb25zdFVud3JhcDxIVE1MRm9ybUVsZW1lbnQ+KCkt
PmF1dG9Db21wbGV0ZSgpOworfQorCitXZWJTdHJpbmcgV2ViRm9ybUVsZW1lbnQ6OmFjdGlvbigp
Cit7CisgICAgcmV0dXJuIHVud3JhcDxIVE1MRm9ybUVsZW1lbnQ+KCktPmFjdGlvbigpOworfQor
Cit2b2lkIFdlYkZvcm1FbGVtZW50OjpzdWJtaXQoKQoreworICAgIHVud3JhcDxIVE1MRm9ybUVs
ZW1lbnQ+KCktPnN1Ym1pdCgpOworfQorCit2b2lkIFdlYkZvcm1FbGVtZW50OjpnZXROYW1lZEVs
ZW1lbnRzKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgV2ViVmVjdG9yPFdlYk5vZGU+JiByZXN1bHQpCit7CisgICAgVmVjdG9yPFJl
ZlB0cjxOb2RlPiA+IHRlbXBfdmVjdG9yOworICAgIHVud3JhcDxIVE1MRm9ybUVsZW1lbnQ+KCkt
PmdldE5hbWVkRWxlbWVudHMobmFtZSwgdGVtcF92ZWN0b3IpOworICAgIHJlc3VsdC5hc3NpZ24o
dGVtcF92ZWN0b3IpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViRnJhbWVJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWY3
ZDQyCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwu
Y3BwCkBAIC0wLDAgKzEsMTg4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIEhvdyBvd25lcnNoaXAgd29ya3MKKy8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0KKy8vCisvLyBCaWcgb2ggcmVwcmVzZW50cyBhIHJlZmNvdW50ZWQgcmVsYXRp
b25zaGlwOiBvd25lciBPLS0tIG93bmVlCisvLworLy8gV2ViVmlldyAoZm9yIHRoZSB0b3BsZXZl
bCBmcmFtZSBvbmx5KQorLy8gICAgTworLy8gICAgfAorLy8gICBQYWdlIE8tLS0tLS0tIEZyYW1l
IChtX21haW5GcmFtZSkgTy0tLS0tLS1PIEZyYW1lVmlldworLy8gICAgICAgICAgICAgICAgICAg
fHwKKy8vICAgICAgICAgICAgICAgICAgIHx8CisvLyAgICAgICAgICAgICAgIEZyYW1lTG9hZGVy
IE8tLS0tLS0tLSBXZWJGcmFtZSAodmlhIEZyYW1lTG9hZGVyQ2xpZW50KQorLy8KKy8vIEZyYW1l
TG9hZGVyIGFuZCBGcmFtZSBhcmUgZm9ybWVybHkgb25lIG9iamVjdCB0aGF0IHdhcyBzcGxpdCBh
cGFydCBiZWNhdXNlCisvLyBpdCBnb3QgdG9vIGJpZy4gVGhleSBiYXNpY2FsbHkgaGF2ZSB0aGUg
c2FtZSBsaWZldGltZSwgaGVuY2UgdGhlIGRvdWJsZSBsaW5lLgorLy8KKy8vIFdlYkZyYW1lIGlz
IHJlZmNvdW50ZWQgYW5kIGhhcyBvbmUgcmVmIG9uIGJlaGFsZiBvZiB0aGUgRnJhbWVMb2FkZXIv
RnJhbWUuCisvLyBUaGlzIGlzIG5vdCBhIG5vcm1hbCByZWZlcmVuY2UgY291bnRlZCBwb2ludGVy
IGJlY2F1c2UgdGhhdCB3b3VsZCByZXF1aXJlCisvLyBjaGFuZ2luZyBXZWJLaXQgY29kZSB0aGF0
IHdlIGRvbid0IGNvbnRyb2wuIEluc3RlYWQsIGl0IGlzIGNyZWF0ZWQgd2l0aCB0aGlzCisvLyBy
ZWYgaW5pdGlhbGx5IGFuZCBpdCBpcyByZW1vdmVkIHdoZW4gdGhlIEZyYW1lTG9hZGVyIGlzIGdl
dHRpbmcgZGVzdHJveWVkLgorLy8KKy8vIFdlYkZyYW1lcyBhcmUgY3JlYXRlZCBpbiB0d28gcGxh
Y2VzLCBmaXJzdCBpbiBXZWJWaWV3SW1wbCB3aGVuIHRoZSByb290CisvLyBmcmFtZSBpcyBjcmVh
dGVkLCBhbmQgc2Vjb25kIGluIFdlYkZyYW1lOjpDcmVhdGVDaGlsZEZyYW1lIHdoZW4gc3ViLWZy
YW1lcworLy8gYXJlIGNyZWF0ZWQuIFdlYktpdCB3aWxsIGhvb2sgdXAgdGhpcyBvYmplY3QgdG8g
dGhlIEZyYW1lTG9hZGVyL0ZyYW1lCisvLyBhbmQgdGhlIHJlZmNvdW50IHdpbGwgYmUgY29ycmVj
dC4KKy8vCisvLyBIb3cgZnJhbWVzIGFyZSBkZXN0cm95ZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorLy8KKy8vIFRoZSBtYWluIGZyYW1lIGlzIG5ldmVyIGRlc3Ryb3llZCBhbmQgaXMg
cmUtdXNlZC4gVGhlIEZyYW1lTG9hZGVyIGlzIHJlLXVzZWQKKy8vIGFuZCBhIHJlZmVyZW5jZSB0
byB0aGUgbWFpbiBmcmFtZSBpcyBrZXB0IGJ5IHRoZSBQYWdlLgorLy8KKy8vIFdoZW4gZnJhbWUg
Y29udGVudCBpcyByZXBsYWNlZCwgYWxsIHN1YmZyYW1lcyBhcmUgZGVzdHJveWVkLiBUaGlzIGhh
cHBlbnMKKy8vIGluIEZyYW1lTG9hZGVyOjpkZXRhY2hGcm9tUGFyZW50IGZvciBlYWNoIHN1YmZy
YW1lLgorLy8KKy8vIEZyYW1lIGdvaW5nIGF3YXkgY2F1c2VzIHRoZSBGcmFtZUxvYWRlciB0byBn
ZXQgZGVsZXRlZC4gSW4gRnJhbWVMb2FkZXIncworLy8gZGVzdHJ1Y3RvciwgaXQgbm90aWZpZXMg
aXRzIGNsaWVudCB3aXRoIGZyYW1lTG9hZGVyRGVzdHJveWVkLiBUaGlzIGNhbGxzCisvLyBXZWJG
cmFtZTo6Q2xvc2luZyBhbmQgdGhlbiBkZXJlZnMgdGhlIFdlYkZyYW1lIGFuZCB3aWxsIGNhdXNl
IGl0IHRvIGJlCisvLyBkZWxldGVkICh1bmxlc3MgYW4gZXh0ZXJuYWwgc29tZW9uZSBpcyBhbHNv
IGhvbGRpbmcgYSByZWZlcmVuY2UpLgorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
V2ViRnJhbWVJbXBsLmgiCisKKyNpbmNsdWRlICJDaHJvbWUuaCIKKyNpbmNsdWRlICJDaHJvbWl1
bUJyaWRnZS5oIgorI2luY2x1ZGUgIkNsaXBib2FyZFV0aWxpdGllc0Nocm9taXVtLmgiCisjaW5j
bHVkZSAiQ29uc29sZS5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1l
bnRGcmFnbWVudC5oIiAvLyBPbmx5IG5lZWRlZCBmb3IgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQu
aCA6KAorI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisjaW5jbHVkZSAiRG9jdW1lbnRNYXJr
ZXIuaCIKKyNpbmNsdWRlICJET01VdGlsaXRpZXNQcml2YXRlLmgiCisjaW5jbHVkZSAiRE9NV2lu
ZG93LmgiCisjaW5jbHVkZSAiRWRpdG9yLmgiCisjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCisj
aW5jbHVkZSAiRm9ybVN0YXRlLmgiCisjaW5jbHVkZSAiRnJhbWVDaHJvbWl1bS5oIgorI2luY2x1
ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgorI2luY2x1
ZGUgIkZyYW1lVHJlZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhpc3RvcnlJdGVtLmgiCisjaW5jbHVkZSAiSFRNTENv
bGxlY3Rpb24uaCIKKyNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1M
RnJhbWVPd25lckVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSGVhZEVsZW1lbnQuaCIKKyNpbmNs
dWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTExpbmtFbGVtZW50LmgiCisj
aW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgor
I2luY2x1ZGUgIm1hcmt1cC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9y
bUNvbnRleHRTa2lhLmgiCisjaW5jbHVkZSAiUHJpbnRDb250ZXh0LmgiCisjaW5jbHVkZSAiUmVu
ZGVyRnJhbWUuaCIKKyNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSAiUmVuZGVyV2lk
Z2V0LmgiCisjaW5jbHVkZSAiUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaCIKKyNpbmNsdWRlICJS
ZXNvdXJjZUhhbmRsZS5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgorI2luY2x1ZGUg
IlNjcmlwdENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJTY3JpcHRTb3VyY2VDb2RlLmgiCisjaW5j
bHVkZSAiU2NyaXB0VmFsdWUuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgorI2luY2x1
ZGUgIlNjcm9sbFR5cGVzLmgiCisjaW5jbHVkZSAiU2VsZWN0aW9uQ29udHJvbGxlci5oIgorI2lu
Y2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiU2tpYVV0aWxzLmgiCisjaW5jbHVkZSAiU3Vi
c3RpdHV0ZURhdGEuaCIKKyNpbmNsdWRlICJUZXh0QWZmaW5pdHkuaCIKKyNpbmNsdWRlICJUZXh0
SXRlcmF0b3IuaCIKKyNpbmNsdWRlICJXZWJDb25zb2xlTWVzc2FnZS5oIgorI2luY2x1ZGUgIldl
YkRhdGFTb3VyY2VJbXBsLmgiCisjaW5jbHVkZSAiV2ViRmluZE9wdGlvbnMuaCIKKyNpbmNsdWRl
ICJXZWJGb3JtRWxlbWVudC5oIgorI2luY2x1ZGUgIldlYkZyYW1lQ2xpZW50LmgiCisjaW5jbHVk
ZSAiV2ViSGlzdG9yeUl0ZW0uaCIKKyNpbmNsdWRlICJXZWJJbnB1dEVsZW1lbnQuaCIKKyNpbmNs
dWRlICJXZWJQYXNzd29yZEF1dG9jb21wbGV0ZUxpc3RlbmVyLmgiCisjaW5jbHVkZSAiV2ViUmFu
Z2UuaCIKKyNpbmNsdWRlICJXZWJSZWN0LmgiCisjaW5jbHVkZSAiV2ViU2NyaXB0U291cmNlLmgi
CisjaW5jbHVkZSAiV2ViU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJXZWJTaXplLmgiCisj
aW5jbHVkZSAiV2ViVVJMRXJyb3IuaCIKKyNpbmNsdWRlICJXZWJWZWN0b3IuaCIKKyNpbmNsdWRl
ICJXZWJWaWV3SW1wbC5oIgorI2luY2x1ZGUgIlhQYXRoUmVzdWx0LmgiCisKKyNpbmNsdWRlIDxh
bGdvcml0aG0+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisKKworI2lmIFBMQVRGT1JN
KERBUldJTikKKyNpbmNsdWRlICJMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQuaCIKKyNlbmRp
ZgorCisjaWYgUExBVEZPUk0oTElOVVgpCisjaW5jbHVkZSA8Z2RrL2dkay5oPgorI2VuZGlmCisK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworLy8gS2V5
IGZvciBhIFN0YXRzQ291bnRlciB0cmFja2luZyBob3cgbWFueSBXZWJGcmFtZXMgYXJlIGFjdGl2
ZS4KK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCB3ZWJGcmFtZUFjdGl2ZUNvdW50ID0gIldlYkZy
YW1lQWN0aXZlQ291bnQiOworCitzdGF0aWMgY29uc3QgY2hhciogY29uc3Qgb3NkVHlwZSA9ICJh
cHBsaWNhdGlvbi9vcGVuc2VhcmNoZGVzY3JpcHRpb24reG1sIjsKK3N0YXRpYyBjb25zdCBjaGFy
KiBjb25zdCBvc2RSZWwgPSAic2VhcmNoIjsKKworLy8gQmFja2VuZCBmb3IgY29udGVudEFzUGxh
aW5UZXh0LCB0aGlzIGlzIGEgcmVjdXJzaXZlIGZ1bmN0aW9uIHRoYXQgZ2V0cworLy8gdGhlIHRl
eHQgZm9yIHRoZSBjdXJyZW50IGZyYW1lIGFuZCBhbGwgb2YgaXRzIHN1YmZyYW1lcy4gSXQgd2ls
bCBhcHBlbmQKKy8vIHRoZSB0ZXh0IG9mIGVhY2ggZnJhbWUgaW4gdHVybiB0byB0aGUgfG91dHB1
dHwgdXAgdG8gfG1heENoYXJzfCBsZW5ndGguCisvLworLy8gVGhlIHxmcmFtZXwgbXVzdCBiZSBu
b24tbnVsbC4KK3N0YXRpYyB2b2lkIGZyYW1lQ29udGVudEFzUGxhaW5UZXh0KHNpemVfdCBtYXhD
aGFycywgRnJhbWUqIGZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VmVjdG9yPFVDaGFyPiogb3V0cHV0KQoreworICAgIERvY3VtZW50KiBkb2MgPSBmcmFtZS0+ZG9j
dW1lbnQoKTsKKyAgICBpZiAoIWRvYykKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFmcmFt
ZS0+dmlldygpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBUZXh0SXRlcmF0b3IgaXRlcmF0
ZXMgb3ZlciB0aGUgdmlzdWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBET00uIEFzIHN1Y2gsCisg
ICAgLy8gaXQgcmVxdWlyZXMgeW91IHRvIGRvIGEgbGF5b3V0IGJlZm9yZSB1c2luZyBpdCAob3Ro
ZXJ3aXNlIGl0J2xsIGNyYXNoKS4KKyAgICBpZiAoZnJhbWUtPnZpZXcoKS0+bmVlZHNMYXlvdXQo
KSkKKyAgICAgICAgZnJhbWUtPnZpZXcoKS0+bGF5b3V0KCk7CisKKyAgICAvLyBTZWxlY3QgdGhl
IGRvY3VtZW50IGJvZHkuCisgICAgUmVmUHRyPFJhbmdlPiByYW5nZShkb2MtPmNyZWF0ZVJhbmdl
KCkpOworICAgIEV4Y2VwdGlvbkNvZGUgZXhjZXB0aW9uID0gMDsKKyAgICByYW5nZS0+c2VsZWN0
Tm9kZUNvbnRlbnRzKGRvYy0+Ym9keSgpLCBleGNlcHRpb24pOworCisgICAgaWYgKCFleGNlcHRp
b24pIHsKKyAgICAgICAgLy8gVGhlIHRleHQgaXRlcmF0b3Igd2lsbCB3YWxrIG5vZGVzIGdpdmlu
ZyB1cyB0ZXh0LiBUaGlzIGlzIHNpbWlsYXIgdG8KKyAgICAgICAgLy8gdGhlIHBsYWluVGV4dCgp
IGZ1bmN0aW9uIGluIFRleHRJdGVyYXRvci5oLCBidXQgd2UgaW1wbGVtZW50IHRoZSBtYXhpbXVt
CisgICAgICAgIC8vIHNpemUgYW5kIGFsc28gY29weSB0aGUgcmVzdWx0cyBkaXJlY3RseSBpbnRv
IGEgd3N0cmluZywgYXZvaWRpbmcgdGhlCisgICAgICAgIC8vIHN0cmluZyBjb252ZXJzaW9uLgor
ICAgICAgICBmb3IgKFRleHRJdGVyYXRvciBpdChyYW5nZS5nZXQoKSk7ICFpdC5hdEVuZCgpOyBp
dC5hZHZhbmNlKCkpIHsKKyAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBjaGFycyA9IGl0LmNoYXJh
Y3RlcnMoKTsKKyAgICAgICAgICAgIGlmICghY2hhcnMpIHsKKyAgICAgICAgICAgICAgICBpZiAo
aXQubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSXQgYXBwZWFycyBmcm9tIGNy
YXNoIHJlcG9ydHMgdGhhdCBhbiBpdGVyYXRvciBjYW4gZ2V0IGludG8gYSBzdGF0ZQorICAgICAg
ICAgICAgICAgICAgICAvLyB3aGVyZSB0aGUgY2hhcmFjdGVyIGNvdW50IGlzIG5vbmVtcHR5IGJ1
dCB0aGUgY2hhcmFjdGVyIHBvaW50ZXIgaXMKKyAgICAgICAgICAgICAgICAgICAgLy8gbnVsbC4g
YWR2YW5jZSgpaW5nIGl0IHdpbGwgdGhlbiBqdXN0IGFkZCB0aGF0IG1hbnkgdG8gdGhlIG51bGwK
KyAgICAgICAgICAgICAgICAgICAgLy8gcG9pbnRlciB3aGljaCB3b24ndCBiZSBjYXVnaHQgaW4g
YSBudWxsIGNoZWNrIGJ1dCB3aWxsIGNyYXNoLgorICAgICAgICAgICAgICAgICAgICAvLworICAg
ICAgICAgICAgICAgICAgICAvLyBBIG51bGwgcG9pbnRlciBhbmQgMCBsZW5ndGggaXMgY29tbW9u
IGZvciBzb21lIG5vZGVzLgorICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAg
ICAgICAvLyBJRiBZT1UgQ0FUQ0ggVEhJUyBJTiBBIERFQlVHR0VSIHBsZWFzZSBsZXQgYnJldHR3
IGtub3cuIFdlIGRvbid0CisgICAgICAgICAgICAgICAgICAgIC8vIGN1cnJlbnRseSB1bmRlcnN0
YW5kIHRoZSBjb25kaXRpb25zIGZvciB0aGlzIHRvIG9jY3VyLiBJZGVhbGx5LCB0aGUKKyAgICAg
ICAgICAgICAgICAgICAgLy8gaXRlcmF0b3JzIHdvdWxkIG5ldmVyIGdldCBpbnRvIHRoZSBjb25k
aXRpb24gc28gd2Ugc2hvdWxkIGZpeCB0aGVtCisgICAgICAgICAgICAgICAgICAgIC8vIGlmIHdl
IGNhbi4KKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IC8vIEp1c3QgZ290IGEgbnVsbCBub2RlLCB3ZSBjYW4gZm9yZ2UgYWhlYWQhCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzaXplX3QgdG9BcHBl
bmQgPQorICAgICAgICAgICAgICAgIHN0ZDo6bWluKHN0YXRpY19jYXN0PHNpemVfdD4oaXQubGVu
Z3RoKCkpLCBtYXhDaGFycyAtIG91dHB1dC0+c2l6ZSgpKTsKKyAgICAgICAgICAgIG91dHB1dC0+
YXBwZW5kKGNoYXJzLCB0b0FwcGVuZCk7CisgICAgICAgICAgICBpZiAob3V0cHV0LT5zaXplKCkg
Pj0gbWF4Q2hhcnMpCisgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBGaWxsZWQgdXAgdGhlIGJ1
ZmZlci4KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFRoZSBzZXBhcmF0b3IgYmV0d2VlbiBm
cmFtZXMgd2hlbiB0aGUgZnJhbWVzIGFyZSBjb252ZXJ0ZWQgdG8gcGxhaW4gdGV4dC4KKyAgICBj
b25zdCBVQ2hhciBmcmFtZVNlcGFyYXRvcltdID0geyAnXG4nLCAnXG4nIH07CisgICAgY29uc3Qg
c2l6ZV90IGZyYW1lU2VwYXJhdG9yTGVuID0gMjsKKworICAgIC8vIFJlY3Vyc2l2ZWx5IHdhbGsg
dGhlIGNoaWxkcmVuLgorICAgIEZyYW1lVHJlZSogZnJhbWVUcmVlID0gZnJhbWUtPnRyZWUoKTsK
KyAgICBmb3IgKEZyYW1lKiBjdXJDaGlsZCA9IGZyYW1lVHJlZS0+Zmlyc3RDaGlsZCgpOyBjdXJD
aGlsZDsgY3VyQ2hpbGQgPSBjdXJDaGlsZC0+dHJlZSgpLT5uZXh0U2libGluZygpKSB7CisgICAg
ICAgIC8vIE1ha2Ugc3VyZSB0aGUgZnJhbWUgc2VwYXJhdG9yIHdvbid0IGZpbGwgdXAgdGhlIGJ1
ZmZlciwgYW5kIGdpdmUgdXAgaWYKKyAgICAgICAgLy8gaXQgd2lsbC4gVGhlIGRhbmdlciBpcyBp
ZiB0aGUgc2VwYXJhdG9yIHdpbGwgbWFrZSB0aGUgYnVmZmVyIGxvbmdlciB0aGFuCisgICAgICAg
IC8vIG1heENoYXJzLiBUaGlzIHdpbGwgY2F1c2UgdGhlIGNvbXB1dGF0aW9uIGFib3ZlOgorICAg
ICAgICAvLyAgIG1heENoYXJzIC0gb3V0cHV0LT5zaXplKCkKKyAgICAgICAgLy8gdG8gYmUgYSBu
ZWdhdGl2ZSBudW1iZXIgd2hpY2ggd2lsbCBjcmFzaCB3aGVuIHRoZSBzdWJmcmFtZSBpcyBhZGRl
ZC4KKyAgICAgICAgaWYgKG91dHB1dC0+c2l6ZSgpID49IG1heENoYXJzIC0gZnJhbWVTZXBhcmF0
b3JMZW4pCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgb3V0cHV0LT5hcHBlbmQoZnJh
bWVTZXBhcmF0b3IsIGZyYW1lU2VwYXJhdG9yTGVuKTsKKyAgICAgICAgZnJhbWVDb250ZW50QXNQ
bGFpblRleHQobWF4Q2hhcnMsIGN1ckNoaWxkLCBvdXRwdXQpOworICAgICAgICBpZiAob3V0cHV0
LT5zaXplKCkgPj0gbWF4Q2hhcnMpCisgICAgICAgICAgICByZXR1cm47IC8vIEZpbGxlZCB1cCB0
aGUgYnVmZmVyLgorICAgIH0KK30KKworLy8gU2ltcGxlIGNsYXNzIHRvIG92ZXJyaWRlIHNvbWUg
b2YgUHJpbnRDb250ZXh0IGJlaGF2aW9yLgorY2xhc3MgQ2hyb21lUHJpbnRDb250ZXh0IDogcHVi
bGljIFByaW50Q29udGV4dCwgcHVibGljIE5vbmNvcHlhYmxlIHsKK3B1YmxpYzoKKyAgICBDaHJv
bWVQcmludENvbnRleHQoRnJhbWUqIGZyYW1lKQorICAgICAgICA6IFByaW50Q29udGV4dChmcmFt
ZSkKKyAgICAgICAgLCBtX3ByaW50ZWRQYWdlV2lkdGgoMCkKKyAgICB7CisgICAgfQorCisgICAg
dm9pZCBiZWdpbihmbG9hdCB3aWR0aCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9wcmludGVk
UGFnZVdpZHRoKTsKKyAgICAgICAgbV9wcmludGVkUGFnZVdpZHRoID0gd2lkdGg7CisgICAgICAg
IFByaW50Q29udGV4dDo6YmVnaW4obV9wcmludGVkUGFnZVdpZHRoKTsKKyAgICB9CisKKyAgICBm
bG9hdCBnZXRQYWdlU2hyaW5rKGludCBwYWdlTnVtYmVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
SW50UmVjdCBwYWdlUmVjdCA9IG1fcGFnZVJlY3RzW3BhZ2VOdW1iZXJdOworICAgICAgICByZXR1
cm4gbV9wcmludGVkUGFnZVdpZHRoIC8gcGFnZVJlY3Qud2lkdGgoKTsKKyAgICB9CisKKyAgICAv
LyBTcG9vbHMgdGhlIHByaW50ZWQgcGFnZSwgYSBzdWJyZWN0IG9mIG1fZnJhbWUuICBTa2lwIHRo
ZSBzY2FsZSBzdGVwLgorICAgIC8vIE5hdGl2ZVRoZW1lIGRvZXNuJ3QgcGxheSB3ZWxsIHdpdGgg
c2NhbGluZy4gU2NhbGluZyBpcyBkb25lIGJyb3dzZXIgc2lkZQorICAgIC8vIGluc3RlYWQuICBS
ZXR1cm5zIHRoZSBzY2FsZSB0byBiZSBhcHBsaWVkLgorICAgIGZsb2F0IHNwb29sUGFnZShHcmFw
aGljc0NvbnRleHQmIGN0eCwgaW50IHBhZ2VOdW1iZXIpCisgICAgeworICAgICAgICBJbnRSZWN0
IHBhZ2VSZWN0ID0gbV9wYWdlUmVjdHNbcGFnZU51bWJlcl07CisgICAgICAgIGZsb2F0IHNjYWxl
ID0gbV9wcmludGVkUGFnZVdpZHRoIC8gcGFnZVJlY3Qud2lkdGgoKTsKKworICAgICAgICBjdHgu
c2F2ZSgpOworICAgICAgICBjdHgudHJhbnNsYXRlKHN0YXRpY19jYXN0PGZsb2F0PigtcGFnZVJl
Y3QueCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4oLXBhZ2VS
ZWN0LnkoKSkpOworICAgICAgICBjdHguY2xpcChwYWdlUmVjdCk7CisgICAgICAgIG1fZnJhbWUt
PnZpZXcoKS0+cGFpbnRDb250ZW50cygmY3R4LCBwYWdlUmVjdCk7CisgICAgICAgIGN0eC5yZXN0
b3JlKCk7CisgICAgICAgIHJldHVybiBzY2FsZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgLy8g
U2V0IHdoZW4gcHJpbnRpbmcuCisgICAgZmxvYXQgbV9wcmludGVkUGFnZVdpZHRoOworfTsKKwor
c3RhdGljIFdlYkRhdGFTb3VyY2UqIERhdGFTb3VyY2VGb3JEb2NMb2FkZXIoRG9jdW1lbnRMb2Fk
ZXIqIGxvYWRlcikKK3sKKyAgICByZXR1cm4gbG9hZGVyID8gV2ViRGF0YVNvdXJjZUltcGw6OmZy
b21Eb2N1bWVudExvYWRlcihsb2FkZXIpIDogMDsKK30KKworCisvLyBXZWJGcmFtZSAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKK2NsYXNzIFdlYkZyYW1lSW1wbDo6RGVmZXJyZWRTY29wZVN0cmluZ01hdGNoZXMgewor
cHVibGljOgorICAgIERlZmVycmVkU2NvcGVTdHJpbmdNYXRjaGVzKFdlYkZyYW1lSW1wbCogd2Vi
RnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlkZW50aWZpZXIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBzZWFyY2hUZXh0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYkZpbmRPcHRpb25zJiBv
cHRpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVzZXQpCisgICAg
ICAgIDogbV90aW1lcih0aGlzLCAmRGVmZXJyZWRTY29wZVN0cmluZ01hdGNoZXM6OmRvVGltZW91
dCkKKyAgICAgICAgLCBtX3dlYkZyYW1lKHdlYkZyYW1lKQorICAgICAgICAsIG1faWRlbnRpZmll
cihpZGVudGlmaWVyKQorICAgICAgICAsIG1fc2VhcmNoVGV4dChzZWFyY2hUZXh0KQorICAgICAg
ICAsIG1fb3B0aW9ucyhvcHRpb25zKQorICAgICAgICAsIG1fcmVzZXQocmVzZXQpCisgICAgewor
ICAgICAgICBtX3RpbWVyLnN0YXJ0T25lU2hvdCgwLjApOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICB2b2lkIGRvVGltZW91dChUaW1lcjxEZWZlcnJlZFNjb3BlU3RyaW5nTWF0Y2hlcz4qKQorICAg
IHsKKyAgICAgICAgbV93ZWJGcmFtZS0+Y2FsbFNjb3BlU3RyaW5nTWF0Y2hlcygKKyAgICAgICAg
ICAgIHRoaXMsIG1faWRlbnRpZmllciwgbV9zZWFyY2hUZXh0LCBtX29wdGlvbnMsIG1fcmVzZXQp
OworICAgIH0KKworICAgIFRpbWVyPERlZmVycmVkU2NvcGVTdHJpbmdNYXRjaGVzPiBtX3RpbWVy
OworICAgIFJlZlB0cjxXZWJGcmFtZUltcGw+IG1fd2ViRnJhbWU7CisgICAgaW50IG1faWRlbnRp
ZmllcjsKKyAgICBXZWJTdHJpbmcgbV9zZWFyY2hUZXh0OworICAgIFdlYkZpbmRPcHRpb25zIG1f
b3B0aW9uczsKKyAgICBib29sIG1fcmVzZXQ7Cit9OworCisKKy8vIFdlYkZyYW1lIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworV2ViRnJhbWUqIFdlYkZyYW1lOjpmcmFtZUZvckVudGVyZWRDb250ZXh0KCkKK3sKKyAg
ICBGcmFtZSogZnJhbWUgPQorICAgICAgICBTY3JpcHRDb250cm9sbGVyOjpyZXRyaWV2ZUZyYW1l
Rm9yRW50ZXJlZENvbnRleHQoKTsKKyAgICByZXR1cm4gV2ViRnJhbWVJbXBsOjpmcm9tRnJhbWUo
ZnJhbWUpOworfQorCitXZWJGcmFtZSogV2ViRnJhbWU6OmZyYW1lRm9yQ3VycmVudENvbnRleHQo
KQoreworICAgIEZyYW1lKiBmcmFtZSA9CisgICAgICAgIFNjcmlwdENvbnRyb2xsZXI6OnJldHJp
ZXZlRnJhbWVGb3JDdXJyZW50Q29udGV4dCgpOworICAgIHJldHVybiBXZWJGcmFtZUltcGw6OmZy
b21GcmFtZShmcmFtZSk7Cit9CisKK1dlYlN0cmluZyBXZWJGcmFtZUltcGw6Om5hbWUoKSBjb25z
dAoreworICAgIHJldHVybiBtX2ZyYW1lLT50cmVlKCktPm5hbWUoKTsKK30KKworV2ViVVJMIFdl
YkZyYW1lSW1wbDo6dXJsKCkgY29uc3QKK3sKKyAgICBjb25zdCBXZWJEYXRhU291cmNlKiBkcyA9
IGRhdGFTb3VyY2UoKTsKKyAgICBpZiAoIWRzKQorICAgICAgICByZXR1cm4gV2ViVVJMKCk7Cisg
ICAgcmV0dXJuIGRzLT5yZXF1ZXN0KCkudXJsKCk7Cit9CisKK1dlYlVSTCBXZWJGcmFtZUltcGw6
OmZhdkljb25VUkwoKSBjb25zdAoreworICAgIEZyYW1lTG9hZGVyKiBmcmFtZUxvYWRlciA9IG1f
ZnJhbWUtPmxvYWRlcigpOworICAgIC8vIFRoZSBVUkwgdG8gdGhlIGZhdmljb24gbWF5IGJlIGlu
IHRoZSBoZWFkZXIuIEFzIHN1Y2gsIG9ubHkKKyAgICAvLyBhc2sgdGhlIGxvYWRlciBmb3IgdGhl
IGZhdmljb24gaWYgaXQncyBmaW5pc2hlZCBsb2FkaW5nLgorICAgIGlmIChmcmFtZUxvYWRlci0+
c3RhdGUoKSA9PSBGcmFtZVN0YXRlQ29tcGxldGUpIHsKKyAgICAgICAgY29uc3QgS1VSTCYgdXJs
ID0gZnJhbWVMb2FkZXItPmljb25VUkwoKTsKKyAgICAgICAgaWYgKCF1cmwuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgcmV0dXJuIHVybDsKKyAgICB9CisgICAgcmV0dXJuIFdlYlVSTCgpOworfQor
CitXZWJVUkwgV2ViRnJhbWVJbXBsOjpvcGVuU2VhcmNoRGVzY3JpcHRpb25VUkwoKSBjb25zdAor
eworICAgIEZyYW1lTG9hZGVyKiBmcmFtZUxvYWRlciA9IG1fZnJhbWUtPmxvYWRlcigpOworICAg
IGlmIChmcmFtZUxvYWRlci0+c3RhdGUoKSA9PSBGcmFtZVN0YXRlQ29tcGxldGUKKyAgICAgICAg
JiYgbV9mcmFtZS0+ZG9jdW1lbnQoKSAmJiBtX2ZyYW1lLT5kb2N1bWVudCgpLT5oZWFkKCkKKyAg
ICAgICAgJiYgIW1fZnJhbWUtPnRyZWUoKS0+cGFyZW50KCkpIHsKKyAgICAgICAgSFRNTEhlYWRF
bGVtZW50KiBoZWFkID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+aGVhZCgpOworICAgICAgICBpZiAo
aGVhZCkgeworICAgICAgICAgICAgUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBjaGlsZHJlbiA9IGhl
YWQtPmNoaWxkcmVuKCk7CisgICAgICAgICAgICBmb3IgKE5vZGUqIGNoaWxkID0gY2hpbGRyZW4t
PmZpcnN0SXRlbSgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZHJlbi0+bmV4dEl0ZW0oKSkgeworICAg
ICAgICAgICAgICAgIEhUTUxMaW5rRWxlbWVudCogbGlua0VsZW1lbnQgPSB0b0hUTUxMaW5rRWxl
bWVudChjaGlsZCk7CisgICAgICAgICAgICAgICAgaWYgKGxpbmtFbGVtZW50CisgICAgICAgICAg
ICAgICAgICAgICYmIGxpbmtFbGVtZW50LT50eXBlKCkgPT0gb3NkVHlwZQorICAgICAgICAgICAg
ICAgICAgICAmJiBsaW5rRWxlbWVudC0+cmVsKCkgPT0gb3NkUmVsCisgICAgICAgICAgICAgICAg
ICAgICYmICFsaW5rRWxlbWVudC0+aHJlZigpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGxpbmtFbGVtZW50LT5ocmVmKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisgICAgcmV0dXJuIFdlYlVSTCgpOworfQorCitXZWJTaXplIFdlYkZyYW1lSW1wbDo6
c2Nyb2xsT2Zmc2V0KCkgY29uc3QKK3sKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBmcmFtZVZpZXco
KTsKKyAgICBpZiAodmlldykKKyAgICAgICAgcmV0dXJuIHZpZXctPnNjcm9sbE9mZnNldCgpOwor
CisgICAgcmV0dXJuIFdlYlNpemUoKTsKK30KKworV2ViU2l6ZSBXZWJGcmFtZUltcGw6OmNvbnRl
bnRzU2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZyYW1lKCktPnZpZXcoKS0+Y29udGVudHNT
aXplKCk7Cit9CisKK2ludCBXZWJGcmFtZUltcGw6OmNvbnRlbnRzUHJlZmVycmVkV2lkdGgoKSBj
b25zdAoreworICAgIGlmIChtX2ZyYW1lLT5kb2N1bWVudCgpICYmIG1fZnJhbWUtPmRvY3VtZW50
KCktPnJlbmRlclZpZXcoKSkKKyAgICAgICAgcmV0dXJuIG1fZnJhbWUtPmRvY3VtZW50KCktPnJl
bmRlclZpZXcoKS0+bWluUHJlZldpZHRoKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgV2Vi
RnJhbWVJbXBsOjpoYXNWaXNpYmxlQ29udGVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZyYW1l
KCktPnZpZXcoKS0+dmlzaWJsZVdpZHRoKCkgPiAwICYmIGZyYW1lKCktPnZpZXcoKS0+dmlzaWJs
ZUhlaWdodCgpID4gMDsKK30KKworV2ViVmlldyogV2ViRnJhbWVJbXBsOjp2aWV3KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gdmlld0ltcGwoKTsKK30KKworV2ViRnJhbWUqIFdlYkZyYW1lSW1wbDo6
b3BlbmVyKCkgY29uc3QKK3sKKyAgICBGcmFtZSogb3BlbmVyID0gMDsKKyAgICBpZiAobV9mcmFt
ZSkKKyAgICAgICAgb3BlbmVyID0gbV9mcmFtZS0+bG9hZGVyKCktPm9wZW5lcigpOworICAgIHJl
dHVybiBmcm9tRnJhbWUob3BlbmVyKTsKK30KKworV2ViRnJhbWUqIFdlYkZyYW1lSW1wbDo6cGFy
ZW50KCkgY29uc3QKK3sKKyAgICBGcmFtZSogcGFyZW50ID0gMDsKKyAgICBpZiAobV9mcmFtZSkK
KyAgICAgICAgcGFyZW50ID0gbV9mcmFtZS0+dHJlZSgpLT5wYXJlbnQoKTsKKyAgICByZXR1cm4g
ZnJvbUZyYW1lKHBhcmVudCk7Cit9CisKK1dlYkZyYW1lKiBXZWJGcmFtZUltcGw6OnRvcCgpIGNv
bnN0Cit7CisgICAgaWYgKG1fZnJhbWUpCisgICAgICAgIHJldHVybiBmcm9tRnJhbWUobV9mcmFt
ZS0+dHJlZSgpLT50b3AoKSk7CisKKyAgICByZXR1cm4gMDsKK30KKworV2ViRnJhbWUqIFdlYkZy
YW1lSW1wbDo6Zmlyc3RDaGlsZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZyb21GcmFtZShmcmFt
ZSgpLT50cmVlKCktPmZpcnN0Q2hpbGQoKSk7Cit9CisKK1dlYkZyYW1lKiBXZWJGcmFtZUltcGw6
Omxhc3RDaGlsZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZyb21GcmFtZShmcmFtZSgpLT50cmVl
KCktPmxhc3RDaGlsZCgpKTsKK30KKworV2ViRnJhbWUqIFdlYkZyYW1lSW1wbDo6bmV4dFNpYmxp
bmcoKSBjb25zdAoreworICAgIHJldHVybiBmcm9tRnJhbWUoZnJhbWUoKS0+dHJlZSgpLT5uZXh0
U2libGluZygpKTsKK30KKworV2ViRnJhbWUqIFdlYkZyYW1lSW1wbDo6cHJldmlvdXNTaWJsaW5n
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZnJvbUZyYW1lKGZyYW1lKCktPnRyZWUoKS0+cHJldmlv
dXNTaWJsaW5nKCkpOworfQorCitXZWJGcmFtZSogV2ViRnJhbWVJbXBsOjp0cmF2ZXJzZU5leHQo
Ym9vbCB3cmFwKSBjb25zdAoreworICAgIHJldHVybiBmcm9tRnJhbWUoZnJhbWUoKS0+dHJlZSgp
LT50cmF2ZXJzZU5leHRXaXRoV3JhcCh3cmFwKSk7Cit9CisKK1dlYkZyYW1lKiBXZWJGcmFtZUlt
cGw6OnRyYXZlcnNlUHJldmlvdXMoYm9vbCB3cmFwKSBjb25zdAoreworICAgIHJldHVybiBmcm9t
RnJhbWUoZnJhbWUoKS0+dHJlZSgpLT50cmF2ZXJzZVByZXZpb3VzV2l0aFdyYXAod3JhcCkpOwor
fQorCitXZWJGcmFtZSogV2ViRnJhbWVJbXBsOjpmaW5kQ2hpbGRCeU5hbWUoY29uc3QgV2ViU3Ry
aW5nJiBuYW1lKSBjb25zdAoreworICAgIHJldHVybiBmcm9tRnJhbWUoZnJhbWUoKS0+dHJlZSgp
LT5jaGlsZChuYW1lKSk7Cit9CisKK1dlYkZyYW1lKiBXZWJGcmFtZUltcGw6OmZpbmRDaGlsZEJ5
RXhwcmVzc2lvbihjb25zdCBXZWJTdHJpbmcmIHhwYXRoKSBjb25zdAoreworICAgIGlmICh4cGF0
aC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgRG9jdW1lbnQqIGRvY3VtZW50
ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAg
IFBhc3NSZWZQdHI8WFBhdGhSZXN1bHQ+IHhwYXRoUmVzdWx0ID0KKyAgICAgICAgZG9jdW1lbnQt
PmV2YWx1YXRlKHhwYXRoLAorICAgICAgICBkb2N1bWVudCwKKyAgICAgICAgMCwgLy8gbmFtZXNw
YWNlCisgICAgICAgIFhQYXRoUmVzdWx0OjpPUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSwKKyAg
ICAgICAgMCwgLy8gWFBhdGhSZXN1bHQgb2JqZWN0CisgICAgICAgIGVjKTsKKyAgICBpZiAoIXhw
YXRoUmVzdWx0LmdldCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIE5vZGUqIG5vZGUgPSB4
cGF0aFJlc3VsdC0+aXRlcmF0ZU5leHQoZWMpOworCisgICAgaWYgKCFub2RlIHx8ICFub2RlLT5p
c0ZyYW1lT3duZXJFbGVtZW50KCkpCisgICAgICAgIHJldHVybiAwOworICAgIEhUTUxGcmFtZU93
bmVyRWxlbWVudCogZnJhbWVFbGVtZW50ID0KKyAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTEZyYW1l
T3duZXJFbGVtZW50Kj4obm9kZSk7CisgICAgcmV0dXJuIGZyb21GcmFtZShmcmFtZUVsZW1lbnQt
PmNvbnRlbnRGcmFtZSgpKTsKK30KKwordm9pZCBXZWJGcmFtZUltcGw6OmZvcm1zKFdlYlZlY3Rv
cjxXZWJGb3JtRWxlbWVudD4mIHJlc3VsdHMpIGNvbnN0Cit7CisgICAgaWYgKCFtX2ZyYW1lKQor
ICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8SFRNTENvbGxlY3Rpb24+IGZvcm1zID0gbV9m
cmFtZS0+ZG9jdW1lbnQoKS0+Zm9ybXMoKTsKKyAgICBzaXplX3QgZm9ybUNvdW50ID0gZm9ybXMt
Pmxlbmd0aCgpOworCisgICAgV2ViVmVjdG9yPFdlYkZvcm1FbGVtZW50PiB0ZW1wKGZvcm1Db3Vu
dCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmb3JtQ291bnQ7ICsraSkgeworICAgICAg
ICBOb2RlKiBub2RlID0gZm9ybXMtPml0ZW0oaSk7CisgICAgICAgIC8vIFN0cmFuZ2UgYnV0IHRy
dWUsIHNvbWV0aW1lcyBpdGVtIGNhbiBiZSAwLgorICAgICAgICBpZiAobm9kZSkKKyAgICAgICAg
ICAgIHRlbXBbaV0gPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnQqPihub2RlKTsKKyAgICB9
CisgICAgcmVzdWx0cy5zd2FwKHRlbXApOworfQorCitXZWJTZWN1cml0eU9yaWdpbiBXZWJGcmFt
ZUltcGw6OnNlY3VyaXR5T3JpZ2luKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fZnJhbWUgfHwgIW1f
ZnJhbWUtPmRvY3VtZW50KCkpCisgICAgICAgIHJldHVybiBXZWJTZWN1cml0eU9yaWdpbigpOwor
CisgICAgcmV0dXJuIFdlYlNlY3VyaXR5T3JpZ2luKG1fZnJhbWUtPmRvY3VtZW50KCktPnNlY3Vy
aXR5T3JpZ2luKCkpOworfQorCit2b2lkIFdlYkZyYW1lSW1wbDo6Z3JhbnRVbml2ZXJzYWxBY2Nl
c3MoKQoreworICAgIEFTU0VSVChtX2ZyYW1lICYmIG1fZnJhbWUtPmRvY3VtZW50KCkpOworICAg
IGlmIChtX2ZyYW1lICYmIG1fZnJhbWUtPmRvY3VtZW50KCkpCisgICAgICAgIG1fZnJhbWUtPmRv
Y3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmdyYW50VW5pdmVyc2FsQWNjZXNzKCk7Cit9CisK
K05QT2JqZWN0KiBXZWJGcmFtZUltcGw6OndpbmRvd09iamVjdCgpIGNvbnN0Cit7CisgICAgaWYg
KCFtX2ZyYW1lKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBtX2ZyYW1lLT5zY3Jp
cHQoKS0+d2luZG93U2NyaXB0TlBPYmplY3QoKTsKK30KKwordm9pZCBXZWJGcmFtZUltcGw6OmJp
bmRUb1dpbmRvd09iamVjdChjb25zdCBXZWJTdHJpbmcmIG5hbWUsIE5QT2JqZWN0KiBvYmplY3Qp
Cit7CisgICAgQVNTRVJUKG1fZnJhbWUpOworICAgIGlmICghbV9mcmFtZSB8fCAhbV9mcmFtZS0+
c2NyaXB0KCktPmlzRW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBTdHJpbmcga2V5
ID0gbmFtZTsKKyNpZiBVU0UoVjgpCisgICAgbV9mcmFtZS0+c2NyaXB0KCktPmJpbmRUb1dpbmRv
d09iamVjdChtX2ZyYW1lLCBrZXksIG9iamVjdCk7CisjZWxzZQorICAgIG5vdEltcGxlbWVudGVk
KCk7CisjZW5kaWYKK30KKwordm9pZCBXZWJGcmFtZUltcGw6OmV4ZWN1dGVTY3JpcHQoY29uc3Qg
V2ViU2NyaXB0U291cmNlJiBzb3VyY2UpCit7CisgICAgbV9mcmFtZS0+c2NyaXB0KCktPmV4ZWN1
dGVTY3JpcHQoCisgICAgICAgIFNjcmlwdFNvdXJjZUNvZGUoc291cmNlLmNvZGUsIHNvdXJjZS51
cmwsIHNvdXJjZS5zdGFydExpbmUpKTsKK30KKwordm9pZCBXZWJGcmFtZUltcGw6OmV4ZWN1dGVT
Y3JpcHRJbk5ld0NvbnRleHQoCisgICAgY29uc3QgV2ViU2NyaXB0U291cmNlKiBzb3VyY2VzSW4s
IHVuc2lnbmVkIG51bVNvdXJjZXMsIGludCBleHRlbnNpb25Hcm91cCkKK3sKKyAgICBWZWN0b3I8
U2NyaXB0U291cmNlQ29kZT4gc291cmNlczsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBudW1Tb3VyY2VzOyArK2kpIHsKKyAgICAgICAgc291cmNlcy5hcHBlbmQoU2NyaXB0U291cmNl
Q29kZSgKKyAgICAgICAgICAgIHNvdXJjZXNJbltpXS5jb2RlLCBzb3VyY2VzSW5baV0udXJsLCBz
b3VyY2VzSW5baV0uc3RhcnRMaW5lKSk7CisgICAgfQorCisgICAgbV9mcmFtZS0+c2NyaXB0KCkt
PmV2YWx1YXRlSW5OZXdDb250ZXh0KHNvdXJjZXMsIGV4dGVuc2lvbkdyb3VwKTsKK30KKwordm9p
ZCBXZWJGcmFtZUltcGw6OmV4ZWN1dGVTY3JpcHRJbklzb2xhdGVkV29ybGQoCisgICAgaW50IHdv
cmxkSWQsIGNvbnN0IFdlYlNjcmlwdFNvdXJjZSogc291cmNlc0luLCB1bnNpZ25lZCBudW1Tb3Vy
Y2VzLAorICAgIGludCBleHRlbnNpb25Hcm91cCkKK3sKKyAgICBWZWN0b3I8U2NyaXB0U291cmNl
Q29kZT4gc291cmNlczsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1Tb3VyY2Vz
OyArK2kpIHsKKyAgICAgICAgc291cmNlcy5hcHBlbmQoU2NyaXB0U291cmNlQ29kZSgKKyAgICAg
ICAgICAgIHNvdXJjZXNJbltpXS5jb2RlLCBzb3VyY2VzSW5baV0udXJsLCBzb3VyY2VzSW5baV0u
c3RhcnRMaW5lKSk7CisgICAgfQorCisgICAgbV9mcmFtZS0+c2NyaXB0KCktPmV2YWx1YXRlSW5J
c29sYXRlZFdvcmxkKHdvcmxkSWQsIHNvdXJjZXMsIGV4dGVuc2lvbkdyb3VwKTsKK30KKwordm9p
ZCBXZWJGcmFtZUltcGw6OmFkZE1lc3NhZ2VUb0NvbnNvbGUoY29uc3QgV2ViQ29uc29sZU1lc3Nh
Z2UmIG1lc3NhZ2UpCit7CisgICAgQVNTRVJUKGZyYW1lKCkpOworCisgICAgTWVzc2FnZUxldmVs
IHdlYkNvcmVNZXNzYWdlTGV2ZWw7CisgICAgc3dpdGNoIChtZXNzYWdlLmxldmVsKSB7CisgICAg
Y2FzZSBXZWJDb25zb2xlTWVzc2FnZTo6TGV2ZWxUaXA6CisgICAgICAgIHdlYkNvcmVNZXNzYWdl
TGV2ZWwgPSBUaXBNZXNzYWdlTGV2ZWw7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2ViQ29u
c29sZU1lc3NhZ2U6OkxldmVsTG9nOgorICAgICAgICB3ZWJDb3JlTWVzc2FnZUxldmVsID0gTG9n
TWVzc2FnZUxldmVsOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdlYkNvbnNvbGVNZXNzYWdl
OjpMZXZlbFdhcm5pbmc6CisgICAgICAgIHdlYkNvcmVNZXNzYWdlTGV2ZWwgPSBXYXJuaW5nTWVz
c2FnZUxldmVsOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdlYkNvbnNvbGVNZXNzYWdlOjpM
ZXZlbEVycm9yOgorICAgICAgICB3ZWJDb3JlTWVzc2FnZUxldmVsID0gRXJyb3JNZXNzYWdlTGV2
ZWw7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZnJhbWUoKS0+ZG9tV2luZG93
KCktPmNvbnNvbGUoKS0+YWRkTWVzc2FnZSgKKyAgICAgICAgT3RoZXJNZXNzYWdlU291cmNlLCBM
b2dNZXNzYWdlVHlwZSwgd2ViQ29yZU1lc3NhZ2VMZXZlbCwgbWVzc2FnZS50ZXh0LAorICAgICAg
ICAxLCBTdHJpbmcoKSk7Cit9CisKK3ZvaWQgV2ViRnJhbWVJbXBsOjpjb2xsZWN0R2FyYmFnZSgp
Cit7CisgICAgaWYgKCFtX2ZyYW1lKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFtX2ZyYW1l
LT5zZXR0aW5ncygpLT5pc0phdmFTY3JpcHRFbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICAvLyBGSVhNRTogTW92ZSB0aGlzIHRvIHRoZSBTY3JpcHRDb250cm9sbGVyIGFuZCBtYWtlIGl0
IEpTIG5ldXRyYWwuCisjaWYgVVNFKFY4KQorICAgIG1fZnJhbWUtPnNjcmlwdCgpLT5jb2xsZWN0
R2FyYmFnZSgpOworI2Vsc2UKKyAgICBub3RJbXBsZW1lbnRlZCgpOworI2VuZGlmCit9CisKKyNp
ZiBVU0UoVjgpCisvLyBSZXR1cm5zIHRoZSBWOCBjb250ZXh0IGZvciB0aGlzIGZyYW1lLCBvciBh
biBlbXB0eSBoYW5kbGUgaWYgdGhlcmUgaXMgbm9uZS4KK3Y4OjpMb2NhbDx2ODo6Q29udGV4dD4g
V2ViRnJhbWVJbXBsOjptYWluV29ybGRTY3JpcHRDb250ZXh0KCkgY29uc3QKK3sKKyAgICBpZiAo
IW1fZnJhbWUpCisgICAgICAgIHJldHVybiB2ODo6TG9jYWw8djg6OkNvbnRleHQ+KCk7CisKKyAg
ICByZXR1cm4gVjhQcm94eTo6bWFpbldvcmxkQ29udGV4dChtX2ZyYW1lKTsKK30KKyNlbmRpZgor
Citib29sIFdlYkZyYW1lSW1wbDo6aW5zZXJ0U3R5bGVUZXh0KAorICAgIGNvbnN0IFdlYlN0cmlu
ZyYgY3NzLCBjb25zdCBXZWJTdHJpbmcmIGlkKSB7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0g
ZnJhbWUoKS0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgRWxlbWVudCogZG9jdW1lbnRFbGVtZW50ID0gZG9jdW1lbnQtPmRvY3VtZW50
RWxlbWVudCgpOworICAgIGlmICghZG9jdW1lbnRFbGVtZW50KQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBFeGNlcHRpb25Db2RlIGVyciA9IDA7CisKKyAgICBpZiAoIWlkLmlzRW1wdHko
KSkgeworICAgICAgICBFbGVtZW50KiBvbGRFbGVtZW50ID0gZG9jdW1lbnQtPmdldEVsZW1lbnRC
eUlkKGlkKTsKKyAgICAgICAgaWYgKG9sZEVsZW1lbnQpIHsKKyAgICAgICAgICAgIE5vZGUqIHBh
cmVudCA9IG9sZEVsZW1lbnQtPnBhcmVudCgpOworICAgICAgICAgICAgaWYgKCFwYXJlbnQpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcGFyZW50LT5yZW1vdmVD
aGlsZChvbGRFbGVtZW50LCBlcnIpOworICAgICAgICB9CisgICAgfQorCisgICAgUmVmUHRyPEVs
ZW1lbnQ+IHN0eWxlc2hlZXQgPSBkb2N1bWVudC0+Y3JlYXRlRWxlbWVudCgKKyAgICAgICAgSFRN
TE5hbWVzOjpzdHlsZVRhZywgZmFsc2UpOworICAgIGlmICghaWQuaXNFbXB0eSgpKQorICAgICAg
ICBzdHlsZXNoZWV0LT5zZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjppZEF0dHIsIGlkKTsKKyAgICBz
dHlsZXNoZWV0LT5zZXRUZXh0Q29udGVudChjc3MsIGVycik7CisgICAgQVNTRVJUKCFlcnIpOwor
ICAgIE5vZGUqIGZpcnN0ID0gZG9jdW1lbnRFbGVtZW50LT5maXJzdENoaWxkKCk7CisgICAgYm9v
bCBzdWNjZXNzID0gZG9jdW1lbnRFbGVtZW50LT5pbnNlcnRCZWZvcmUoc3R5bGVzaGVldCwgZmly
c3QsIGVycik7CisgICAgQVNTRVJUKHN1Y2Nlc3MpOworICAgIHJldHVybiBzdWNjZXNzOworfQor
Cit2b2lkIFdlYkZyYW1lSW1wbDo6cmVsb2FkKCkKK3sKKyAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+
aGlzdG9yeSgpLT5zYXZlRG9jdW1lbnRBbmRTY3JvbGxTdGF0ZSgpOworCisgICAgc3RvcExvYWRp
bmcoKTsgIC8vIE1ha2Ugc3VyZSBleGlzdGluZyBhY3Rpdml0eSBzdG9wcy4KKyAgICBtX2ZyYW1l
LT5sb2FkZXIoKS0+cmVsb2FkKCk7Cit9CisKK3ZvaWQgV2ViRnJhbWVJbXBsOjpsb2FkUmVxdWVz
dChjb25zdCBXZWJVUkxSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIEFTU0VSVCghcmVxdWVzdC5p
c051bGwoKSk7CisgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QgPSBy
ZXF1ZXN0LnRvUmVzb3VyY2VSZXF1ZXN0KCk7CisKKyAgICBpZiAocmVzb3VyY2VSZXF1ZXN0LnVy
bCgpLnByb3RvY29sSXMoImphdmFzY3JpcHQiKSkgeworICAgICAgICBsb2FkSmF2YVNjcmlwdFVS
TChyZXNvdXJjZVJlcXVlc3QudXJsKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
c3RvcExvYWRpbmcoKTsgIC8vIE1ha2Ugc3VyZSBleGlzdGluZyBhY3Rpdml0eSBzdG9wcy4KKyAg
ICBtX2ZyYW1lLT5sb2FkZXIoKS0+bG9hZChyZXNvdXJjZVJlcXVlc3QsIGZhbHNlKTsKK30KKwor
dm9pZCBXZWJGcmFtZUltcGw6OmxvYWRIaXN0b3J5SXRlbShjb25zdCBXZWJIaXN0b3J5SXRlbSYg
aXRlbSkKK3sKKyAgICBSZWZQdHI8SGlzdG9yeUl0ZW0+IGhpc3RvcnlJdGVtID0gUGFzc1JlZlB0
cjxIaXN0b3J5SXRlbT4oaXRlbSk7CisgICAgQVNTRVJUKGhpc3RvcnlJdGVtLmdldCgpKTsKKwor
ICAgIHN0b3BMb2FkaW5nKCk7ICAvLyBNYWtlIHN1cmUgZXhpc3RpbmcgYWN0aXZpdHkgc3RvcHMu
CisKKyAgICAvLyBJZiB0aGVyZSBpcyBubyBjdXJyZW50SXRlbSwgd2hpY2ggaGFwcGVucyB3aGVu
IHdlIGFyZSBuYXZpZ2F0aW5nIGluCisgICAgLy8gc2Vzc2lvbiBoaXN0b3J5IGFmdGVyIGEgY3Jh
c2gsIHdlIG5lZWQgdG8gbWFudWZhY3R1cmUgb25lIG90aGVyd2lzZSBXZWJLaXQKKyAgICAvLyBo
b2Fya3MuIFRoaXMgaXMgcHJvYmFibHkgdGhlIHdyb25nIHRoaW5nIHRvIGRvLCBidXQgaXQgc2Vl
bXMgdG8gd29yay4KKyAgICBSZWZQdHI8SGlzdG9yeUl0ZW0+IGN1cnJlbnRJdGVtID0gbV9mcmFt
ZS0+bG9hZGVyKCktPmhpc3RvcnkoKS0+Y3VycmVudEl0ZW0oKTsKKyAgICBpZiAoIWN1cnJlbnRJ
dGVtKSB7CisgICAgICAgIGN1cnJlbnRJdGVtID0gSGlzdG9yeUl0ZW06OmNyZWF0ZSgpOworICAg
ICAgICBjdXJyZW50SXRlbS0+c2V0TGFzdFZpc2l0V2FzRmFpbHVyZSh0cnVlKTsKKyAgICAgICAg
bV9mcmFtZS0+bG9hZGVyKCktPmhpc3RvcnkoKS0+c2V0Q3VycmVudEl0ZW0oY3VycmVudEl0ZW0u
Z2V0KCkpOworICAgICAgICB2aWV3SW1wbCgpLT5zZXRDdXJyZW50SGlzdG9yeUl0ZW0oY3VycmVu
dEl0ZW0uZ2V0KCkpOworICAgIH0KKworICAgIG1fZnJhbWUtPmxvYWRlcigpLT5oaXN0b3J5KCkt
PmdvVG9JdGVtKAorICAgICAgICBoaXN0b3J5SXRlbS5nZXQoKSwgRnJhbWVMb2FkVHlwZUluZGV4
ZWRCYWNrRm9yd2FyZCk7Cit9CisKK3ZvaWQgV2ViRnJhbWVJbXBsOjpsb2FkRGF0YShjb25zdCBX
ZWJEYXRhJiBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlN0cmlu
ZyYgbWltZVR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViU3RyaW5n
JiB0ZXh0RW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViVVJM
JiBiYXNlVVJMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlVSTCYgdW5y
ZWFjaGFibGVVUkwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZXBsYWNlKQor
eworICAgIFN1YnN0aXR1dGVEYXRhIHN1YnN0RGF0YShkYXRhLCBtaW1lVHlwZSwgdGV4dEVuY29k
aW5nLCB1bnJlYWNoYWJsZVVSTCk7CisgICAgQVNTRVJUKHN1YnN0RGF0YS5pc1ZhbGlkKCkpOwor
CisgICAgc3RvcExvYWRpbmcoKTsgIC8vIE1ha2Ugc3VyZSBleGlzdGluZyBhY3Rpdml0eSBzdG9w
cy4KKyAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+bG9hZChSZXNvdXJjZVJlcXVlc3QoYmFzZVVSTCks
IHN1YnN0RGF0YSwgZmFsc2UpOworICAgIGlmIChyZXBsYWNlKSB7CisgICAgICAgIC8vIERvIHRo
aXMgdG8gZm9yY2UgV2ViS2l0IHRvIHRyZWF0IHRoZSBsb2FkIGFzIHJlcGxhY2luZyB0aGUgY3Vy
cmVudGx5CisgICAgICAgIC8vIGxvYWRlZCBwYWdlLgorICAgICAgICBtX2ZyYW1lLT5sb2FkZXIo
KS0+c2V0UmVwbGFjaW5nKCk7CisgICAgfQorfQorCit2b2lkIFdlYkZyYW1lSW1wbDo6bG9hZEhU
TUxTdHJpbmcoY29uc3QgV2ViRGF0YSYgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBXZWJVUkwmIGJhc2VVUkwsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgV2ViVVJMJiB1bnJlYWNoYWJsZVVSTCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIHJlcGxhY2UpCit7CisgICAgbG9hZERhdGEoZGF0YSwKKyAg
ICAgICAgICAgICBXZWJTdHJpbmc6OmZyb21VVEY4KCJ0ZXh0L2h0bWwiKSwKKyAgICAgICAgICAg
ICBXZWJTdHJpbmc6OmZyb21VVEY4KCJVVEYtOCIpLAorICAgICAgICAgICAgIGJhc2VVUkwsCisg
ICAgICAgICAgICAgdW5yZWFjaGFibGVVUkwsCisgICAgICAgICAgICAgcmVwbGFjZSk7Cit9CisK
K2Jvb2wgV2ViRnJhbWVJbXBsOjppc0xvYWRpbmcoKSBjb25zdAoreworICAgIGlmICghbV9mcmFt
ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtX2ZyYW1lLT5sb2FkZXIoKS0+
aXNMb2FkaW5nKCk7Cit9CisKK3ZvaWQgV2ViRnJhbWVJbXBsOjpzdG9wTG9hZGluZygpCit7Cisg
ICAgaWYgKCFtX2ZyYW1lKQorICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6IEZpZ3VyZSBv
dXQgd2hhdCB3ZSBzaG91bGQgcmVhbGx5IGRvIGhlcmUuICBJdCBzZWVtcyBsaWtlIGEgYnVnCisg
ICAgLy8gdGhhdCBGcmFtZUxvYWRlcjo6c3RvcExvYWRpbmcgZG9lc24ndCBjYWxsIHN0b3BBbGxM
b2FkZXJzLgorICAgIG1fZnJhbWUtPmxvYWRlcigpLT5zdG9wQWxsTG9hZGVycygpOworICAgIG1f
ZnJhbWUtPmxvYWRlcigpLT5zdG9wTG9hZGluZyhVbmxvYWRFdmVudFBvbGljeU5vbmUpOworfQor
CitXZWJEYXRhU291cmNlKiBXZWJGcmFtZUltcGw6OnByb3Zpc2lvbmFsRGF0YVNvdXJjZSgpIGNv
bnN0Cit7CisgICAgRnJhbWVMb2FkZXIqIGZyYW1lTG9hZGVyID0gbV9mcmFtZS0+bG9hZGVyKCk7
CisKKyAgICAvLyBXZSByZWdhcmQgdGhlIHBvbGljeSBkb2N1bWVudCBsb2FkZXIgYXMgc3RpbGwg
cHJvdmlzaW9uYWwuCisgICAgRG9jdW1lbnRMb2FkZXIqIGRvY0xvYWRlciA9IGZyYW1lTG9hZGVy
LT5wcm92aXNpb25hbERvY3VtZW50TG9hZGVyKCk7CisgICAgaWYgKCFkb2NMb2FkZXIpCisgICAg
ICAgIGRvY0xvYWRlciA9IGZyYW1lTG9hZGVyLT5wb2xpY3lEb2N1bWVudExvYWRlcigpOworCisg
ICAgcmV0dXJuIERhdGFTb3VyY2VGb3JEb2NMb2FkZXIoZG9jTG9hZGVyKTsKK30KKworV2ViRGF0
YVNvdXJjZSogV2ViRnJhbWVJbXBsOjpkYXRhU291cmNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
RGF0YVNvdXJjZUZvckRvY0xvYWRlcihtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIo
KSk7Cit9CisKK1dlYkhpc3RvcnlJdGVtIFdlYkZyYW1lSW1wbDo6cHJldmlvdXNIaXN0b3J5SXRl
bSgpIGNvbnN0Cit7CisgICAgLy8gV2UgdXNlIHRoZSBwcmV2aW91cyBpdGVtIGhlcmUgYmVjYXVz
ZSBkb2N1bWVudFN0YXRlIChmaWxsZWQtb3V0IGZvcm1zKQorICAgIC8vIG9ubHkgZ2V0IHNhdmVk
IHRvIGhpc3Rvcnkgd2hlbiBpdCBiZWNvbWVzIHRoZSBwcmV2aW91cyBpdGVtLiAgVGhlIGNhbGxl
cgorICAgIC8vIGlzIGV4cGVjdGVkIHRvIHF1ZXJ5IHRoZSBoaXN0b3J5IGl0ZW0gYWZ0ZXIgYSBu
YXZpZ2F0aW9uIG9jY3VycywgYWZ0ZXIKKyAgICAvLyB0aGUgZGVzaXJlZCBoaXN0b3J5IGl0ZW0g
aGFzIGJlY29tZSB0aGUgcHJldmlvdXMgZW50cnkuCisgICAgcmV0dXJuIFdlYkhpc3RvcnlJdGVt
KHZpZXdJbXBsKCktPnByZXZpb3VzSGlzdG9yeUl0ZW0oKSk7Cit9CisKK1dlYkhpc3RvcnlJdGVt
IFdlYkZyYW1lSW1wbDo6Y3VycmVudEhpc3RvcnlJdGVtKCkgY29uc3QKK3sKKyAgICBtX2ZyYW1l
LT5sb2FkZXIoKS0+aGlzdG9yeSgpLT5zYXZlRG9jdW1lbnRBbmRTY3JvbGxTdGF0ZSgpOworCisg
ICAgcmV0dXJuIFdlYkhpc3RvcnlJdGVtKG1fZnJhbWUtPnBhZ2UoKS0+YmFja0ZvcndhcmRMaXN0
KCktPmN1cnJlbnRJdGVtKCkpOworfQorCit2b2lkIFdlYkZyYW1lSW1wbDo6ZW5hYmxlVmlld1Nv
dXJjZU1vZGUoYm9vbCBlbmFibGUpCit7CisgICAgaWYgKG1fZnJhbWUpCisgICAgICAgIG1fZnJh
bWUtPnNldEluVmlld1NvdXJjZU1vZGUoZW5hYmxlKTsKK30KKworYm9vbCBXZWJGcmFtZUltcGw6
OmlzVmlld1NvdXJjZU1vZGVFbmFibGVkKCkgY29uc3QKK3sKKyAgICBpZiAobV9mcmFtZSkKKyAg
ICAgICAgcmV0dXJuIG1fZnJhbWUtPmluVmlld1NvdXJjZU1vZGUoKTsKKworICAgIHJldHVybiBm
YWxzZTsKK30KKwordm9pZCBXZWJGcmFtZUltcGw6OnNldFJlZmVycmVyRm9yUmVxdWVzdCgKKyAg
ICBXZWJVUkxSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXZWJVUkwmIHJlZmVycmVyVVJMKSB7Cisg
ICAgU3RyaW5nIHJlZmVycmVyOworICAgIGlmIChyZWZlcnJlclVSTC5pc0VtcHR5KCkpCisgICAg
ICAgIHJlZmVycmVyID0gbV9mcmFtZS0+bG9hZGVyKCktPm91dGdvaW5nUmVmZXJyZXIoKTsKKyAg
ICBlbHNlCisgICAgICAgIHJlZmVycmVyID0gcmVmZXJyZXJVUkwuc3BlYygpLnV0ZjE2KCk7Cisg
ICAgaWYgKFNlY3VyaXR5T3JpZ2luOjpzaG91bGRIaWRlUmVmZXJyZXIocmVxdWVzdC51cmwoKSwg
cmVmZXJyZXIpKQorICAgICAgICByZXR1cm47CisgICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmll
bGQoV2ViU3RyaW5nOjpmcm9tVVRGOCgiUmVmZXJlciIpLCByZWZlcnJlcik7Cit9CisKK3ZvaWQg
V2ViRnJhbWVJbXBsOjpkaXNwYXRjaFdpbGxTZW5kUmVxdWVzdChXZWJVUkxSZXF1ZXN0JiByZXF1
ZXN0KQoreworICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2U7CisgICAgbV9mcmFtZS0+bG9h
ZGVyKCktPmNsaWVudCgpLT5kaXNwYXRjaFdpbGxTZW5kUmVxdWVzdCgKKyAgICAgICAgMCwgMCwg
cmVxdWVzdC50b011dGFibGVSZXNvdXJjZVJlcXVlc3QoKSwgcmVzcG9uc2UpOworfQorCit2b2lk
IFdlYkZyYW1lSW1wbDo6Y29tbWl0RG9jdW1lbnREYXRhKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVf
dCBkYXRhTGVuKQoreworICAgIERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciA9IG1fZnJh
bWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpOworCisgICAgLy8gU2V0IHRoZSB0ZXh0IGVu
Y29kaW5nLiAgVGhpcyBjYWxscyBiZWdpbigpIGZvciB1cy4gIEl0IGlzIHNhZmUgdG8gY2FsbAor
ICAgIC8vIHRoaXMgbXVsdGlwbGUgdGltZXMgKE1hYyBkb2VzOiBwYWdlL21hYy9XZWJDb3JlRnJh
bWVCcmlkZ2UubW0pLgorICAgIGJvb2wgdXNlckNob3NlbiA9IHRydWU7CisgICAgU3RyaW5nIGVu
Y29kaW5nID0gZG9jdW1lbnRMb2FkZXItPm92ZXJyaWRlRW5jb2RpbmcoKTsKKyAgICBpZiAoZW5j
b2RpbmcuaXNOdWxsKCkpIHsKKyAgICAgICAgdXNlckNob3NlbiA9IGZhbHNlOworICAgICAgICBl
bmNvZGluZyA9IGRvY3VtZW50TG9hZGVyLT5yZXNwb25zZSgpLnRleHRFbmNvZGluZ05hbWUoKTsK
KyAgICB9CisgICAgbV9mcmFtZS0+bG9hZGVyKCktPnNldEVuY29kaW5nKGVuY29kaW5nLCB1c2Vy
Q2hvc2VuKTsKKworICAgIC8vIE5PVEU6IG1hYyBvbmx5IGRvZXMgdGhpcyBpZiB0aGVyZSBpcyBh
IGRvY3VtZW50CisgICAgbV9mcmFtZS0+bG9hZGVyKCktPmFkZERhdGEoZGF0YSwgZGF0YUxlbik7
Cit9CisKK3Vuc2lnbmVkIFdlYkZyYW1lSW1wbDo6dW5sb2FkTGlzdGVuZXJDb3VudCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGZyYW1lKCktPmRvbVdpbmRvdygpLT5wZW5kaW5nVW5sb2FkRXZlbnRM
aXN0ZW5lcnMoKTsKK30KKworYm9vbCBXZWJGcmFtZUltcGw6OmlzUHJvY2Vzc2luZ1VzZXJHZXN0
dXJlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZnJhbWUoKS0+bG9hZGVyKCktPmlzUHJvY2Vzc2lu
Z1VzZXJHZXN0dXJlKCk7Cit9CisKK2Jvb2wgV2ViRnJhbWVJbXBsOjp3aWxsU3VwcHJlc3NPcGVu
ZXJJbk5ld0ZyYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZnJhbWUoKS0+bG9hZGVyKCktPnN1
cHByZXNzT3BlbmVySW5OZXdGcmFtZSgpOworfQorCit2b2lkIFdlYkZyYW1lSW1wbDo6cmVwbGFj
ZVNlbGVjdGlvbihjb25zdCBXZWJTdHJpbmcmIHRleHQpCit7CisgICAgUmVmUHRyPERvY3VtZW50
RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dCgKKyAgICAgICAgZnJh
bWUoKS0+c2VsZWN0aW9uKCktPnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIHRleHQpOworICAg
IGFwcGx5Q29tbWFuZChSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKAorICAgICAgICBm
cmFtZSgpLT5kb2N1bWVudCgpLCBmcmFnbWVudC5nZXQoKSwgZmFsc2UsIHRydWUsIHRydWUpKTsK
K30KKwordm9pZCBXZWJGcmFtZUltcGw6Omluc2VydFRleHQoY29uc3QgV2ViU3RyaW5nJiB0ZXh0
KQoreworICAgIGZyYW1lKCktPmVkaXRvcigpLT5pbnNlcnRUZXh0KHRleHQsIDApOworfQorCit2
b2lkIFdlYkZyYW1lSW1wbDo6c2V0TWFya2VkVGV4dCgKKyAgICBjb25zdCBXZWJTdHJpbmcmIHRl
eHQsIHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgRWRpdG9yKiBl
ZGl0b3IgPSBmcmFtZSgpLT5lZGl0b3IoKTsKKworICAgIGVkaXRvci0+Y29uZmlybUNvbXBvc2l0
aW9uKHRleHQpOworCisgICAgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW5lPiBkZWNvcmF0aW9u
czsKKyAgICBlZGl0b3ItPnNldENvbXBvc2l0aW9uKHRleHQsIGRlY29yYXRpb25zLCBsb2NhdGlv
biwgbGVuZ3RoKTsKK30KKwordm9pZCBXZWJGcmFtZUltcGw6OnVubWFya1RleHQoKQoreworICAg
IGZyYW1lKCktPmVkaXRvcigpLT5jb25maXJtQ29tcG9zaXRpb25XaXRob3V0RGlzdHVyYmluZ1Nl
bGVjdGlvbigpOworfQorCitib29sIFdlYkZyYW1lSW1wbDo6aGFzTWFya2VkVGV4dCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGZyYW1lKCktPmVkaXRvcigpLT5oYXNDb21wb3NpdGlvbigpOworfQor
CitXZWJSYW5nZSBXZWJGcmFtZUltcGw6Om1hcmtlZFJhbmdlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gZnJhbWUoKS0+ZWRpdG9yKCktPmNvbXBvc2l0aW9uUmFuZ2UoKTsKK30KKworYm9vbCBXZWJG
cmFtZUltcGw6OmV4ZWN1dGVDb21tYW5kKGNvbnN0IFdlYlN0cmluZyYgbmFtZSkKK3sKKyAgICBB
U1NFUlQoZnJhbWUoKSk7CisKKyAgICBpZiAobmFtZS5sZW5ndGgoKSA8PSAyKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAvLyBTaW5jZSB3ZSBkb24ndCBoYXZlIE5TQ29udHJvbCwgd2Ug
d2lsbCBjb252ZXJ0IHRoZSBmb3JtYXQgb2YgY29tbWFuZAorICAgIC8vIHN0cmluZyBhbmQgY2Fs
bCB0aGUgZnVuY3Rpb24gb24gRWRpdG9yIGRpcmVjdGx5LgorICAgIFN0cmluZyBjb21tYW5kID0g
bmFtZTsKKworICAgIC8vIE1ha2Ugc3VyZSB0aGUgZmlyc3QgbGV0dGVyIGlzIHVwcGVyIGNhc2Uu
CisgICAgY29tbWFuZC5yZXBsYWNlKDAsIDEsIGNvbW1hbmQuc3Vic3RyaW5nKDAsIDEpLnVwcGVy
KCkpOworCisgICAgLy8gUmVtb3ZlIHRoZSB0cmFpbGluZyAnOicgaWYgZXhpc3RpbmcuCisgICAg
aWYgKGNvbW1hbmRbY29tbWFuZC5sZW5ndGgoKSAtIDFdID09IFVDaGFyKCc6JykpCisgICAgICAg
IGNvbW1hbmQgPSBjb21tYW5kLnN1YnN0cmluZygwLCBjb21tYW5kLmxlbmd0aCgpIC0gMSk7CisK
KyAgICBib29sIHJ2ID0gdHJ1ZTsKKworICAgIC8vIFNwZWNpYWxseSBoYW5kbGluZyBjb21tYW5k
cyB0aGF0IEVkaXRvcjo6ZXhlY0NvbW1hbmQgZG9lcyBub3QgZGlyZWN0bHkKKyAgICAvLyBzdXBw
b3J0LgorICAgIGlmIChjb21tYW5kID09ICJEZWxldGVUb0VuZE9mUGFyYWdyYXBoIikgeworICAg
ICAgICBFZGl0b3IqIGVkaXRvciA9IGZyYW1lKCktPmVkaXRvcigpOworICAgICAgICBpZiAoIWVk
aXRvci0+ZGVsZXRlV2l0aERpcmVjdGlvbihTZWxlY3Rpb25Db250cm9sbGVyOjpGT1JXQVJELAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJhZ3JhcGhCb3VuZGFy
eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UpKSB7CisgICAgICAgICAg
ICBlZGl0b3ItPmRlbGV0ZVdpdGhEaXJlY3Rpb24oU2VsZWN0aW9uQ29udHJvbGxlcjo6Rk9SV0FS
RCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFyYWN0ZXJHcmFu
dWxhcml0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKKyAgICAgICAg
fQorICAgIH0gZWxzZSBpZiAoY29tbWFuZCA9PSAiSW5kZW50IikKKyAgICAgICAgZnJhbWUoKS0+
ZWRpdG9yKCktPmluZGVudCgpOworICAgIGVsc2UgaWYgKGNvbW1hbmQgPT0gIk91dGRlbnQiKQor
ICAgICAgICBmcmFtZSgpLT5lZGl0b3IoKS0+b3V0ZGVudCgpOworICAgIGVsc2UgaWYgKGNvbW1h
bmQgPT0gIkRlbGV0ZUJhY2t3YXJkIikKKyAgICAgICAgcnYgPSBmcmFtZSgpLT5lZGl0b3IoKS0+
Y29tbWFuZChBdG9taWNTdHJpbmcoIkJhY2t3YXJkRGVsZXRlIikpLmV4ZWN1dGUoKTsKKyAgICBl
bHNlIGlmIChjb21tYW5kID09ICJEZWxldGVGb3J3YXJkIikKKyAgICAgICAgcnYgPSBmcmFtZSgp
LT5lZGl0b3IoKS0+Y29tbWFuZChBdG9taWNTdHJpbmcoIkZvcndhcmREZWxldGUiKSkuZXhlY3V0
ZSgpOworICAgIGVsc2UgaWYgKGNvbW1hbmQgPT0gIkFkdmFuY2VUb05leHRNaXNzcGVsbGluZyIp
IHsKKyAgICAgICAgLy8gRmFsc2UgbXVzdCBiZSBwYXNzZWQgaGVyZSwgb3IgdGhlIGN1cnJlbnRs
eSBzZWxlY3RlZCB3b3JkIHdpbGwgbmV2ZXIgYmUKKyAgICAgICAgLy8gc2tpcHBlZC4KKyAgICAg
ICAgZnJhbWUoKS0+ZWRpdG9yKCktPmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhmYWxzZSk7Cisg
ICAgfSBlbHNlIGlmIChjb21tYW5kID09ICJUb2dnbGVTcGVsbFBhbmVsIikKKyAgICAgICAgZnJh
bWUoKS0+ZWRpdG9yKCktPnNob3dTcGVsbGluZ0d1ZXNzUGFuZWwoKTsKKyAgICBlbHNlCisgICAg
ICAgIHJ2ID0gZnJhbWUoKS0+ZWRpdG9yKCktPmNvbW1hbmQoY29tbWFuZCkuZXhlY3V0ZSgpOwor
ICAgIHJldHVybiBydjsKK30KKworYm9vbCBXZWJGcmFtZUltcGw6OmV4ZWN1dGVDb21tYW5kKGNv
bnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBBU1NF
UlQoZnJhbWUoKSk7CisgICAgU3RyaW5nIHdlYk5hbWUgPSBuYW1lOworCisgICAgLy8gbW92ZVRv
QmVnaW5uaW5nT2ZEb2N1bWVudCBhbmQgbW92ZVRvRW5kZkRvY3VtZW50IGFyZSBvbmx5IGhhbmRs
ZWQgYnkgV2ViS2l0CisgICAgLy8gZm9yIGVkaXRhYmxlIG5vZGVzLgorICAgIGlmICghZnJhbWUo
KS0+ZWRpdG9yKCktPmNhbkVkaXQoKSAmJiB3ZWJOYW1lID09ICJtb3ZlVG9CZWdpbm5pbmdPZkRv
Y3VtZW50IikKKyAgICAgICAgcmV0dXJuIHZpZXdJbXBsKCktPnByb3BhZ2F0ZVNjcm9sbChTY3Jv
bGxVcCwgU2Nyb2xsQnlEb2N1bWVudCk7CisKKyAgICBpZiAoIWZyYW1lKCktPmVkaXRvcigpLT5j
YW5FZGl0KCkgJiYgd2ViTmFtZSA9PSAibW92ZVRvRW5kT2ZEb2N1bWVudCIpCisgICAgICAgIHJl
dHVybiB2aWV3SW1wbCgpLT5wcm9wYWdhdGVTY3JvbGwoU2Nyb2xsRG93biwgU2Nyb2xsQnlEb2N1
bWVudCk7CisKKyAgICByZXR1cm4gZnJhbWUoKS0+ZWRpdG9yKCktPmNvbW1hbmQod2ViTmFtZSku
ZXhlY3V0ZSh2YWx1ZSk7Cit9CisKK2Jvb2wgV2ViRnJhbWVJbXBsOjppc0NvbW1hbmRFbmFibGVk
KGNvbnN0IFdlYlN0cmluZyYgbmFtZSkgY29uc3QKK3sKKyAgICBBU1NFUlQoZnJhbWUoKSk7Cisg
ICAgcmV0dXJuIGZyYW1lKCktPmVkaXRvcigpLT5jb21tYW5kKG5hbWUpLmlzRW5hYmxlZCgpOwor
fQorCit2b2lkIFdlYkZyYW1lSW1wbDo6ZW5hYmxlQ29udGludW91c1NwZWxsQ2hlY2tpbmcoYm9v
bCBlbmFibGUpCit7CisgICAgaWYgKGVuYWJsZSA9PSBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5n
RW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CisgICAgZnJhbWUoKS0+ZWRpdG9yKCktPnRvZ2ds
ZUNvbnRpbnVvdXNTcGVsbENoZWNraW5nKCk7Cit9CisKK2Jvb2wgV2ViRnJhbWVJbXBsOjppc0Nv
bnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZyYW1l
KCktPmVkaXRvcigpLT5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpOworfQorCiti
b29sIFdlYkZyYW1lSW1wbDo6aGFzU2VsZWN0aW9uKCkgY29uc3QKK3sKKyAgICAvLyBmcmFtZSgp
LT5zZWxlY3Rpb24oKS0+aXNOb25lKCkgbmV2ZXIgcmV0dXJucyB0cnVlLgorICAgIHJldHVybiAo
ZnJhbWUoKS0+c2VsZWN0aW9uKCktPnN0YXJ0KCkgIT0gZnJhbWUoKS0+c2VsZWN0aW9uKCktPmVu
ZCgpKTsKK30KKworV2ViUmFuZ2UgV2ViRnJhbWVJbXBsOjpzZWxlY3Rpb25SYW5nZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGZyYW1lKCktPnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgp
OworfQorCitXZWJTdHJpbmcgV2ViRnJhbWVJbXBsOjpzZWxlY3Rpb25Bc1RleHQoKSBjb25zdAor
eworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBmcmFtZSgpLT5zZWxlY3Rpb24oKS0+dG9Ob3Jt
YWxpemVkUmFuZ2UoKTsKKyAgICBpZiAoIXJhbmdlLmdldCgpKQorICAgICAgICByZXR1cm4gV2Vi
U3RyaW5nKCk7CisKKyAgICBTdHJpbmcgdGV4dCA9IHJhbmdlLT50ZXh0KCk7CisjaWYgUExBVEZP
Uk0oV0lOX09TKQorICAgIHJlcGxhY2VOZXdsaW5lc1dpdGhXaW5kb3dzU3R5bGVOZXdsaW5lcyh0
ZXh0KTsKKyNlbmRpZgorICAgIHJlcGxhY2VOQlNQV2l0aFNwYWNlKHRleHQpOworICAgIHJldHVy
biB0ZXh0OworfQorCitXZWJTdHJpbmcgV2ViRnJhbWVJbXBsOjpzZWxlY3Rpb25Bc01hcmt1cCgp
IGNvbnN0Cit7CisgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGZyYW1lKCktPnNlbGVjdGlvbigp
LT50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGlmICghcmFuZ2UuZ2V0KCkpCisgICAgICAgIHJl
dHVybiBXZWJTdHJpbmcoKTsKKworICAgIHJldHVybiBjcmVhdGVNYXJrdXAocmFuZ2UuZ2V0KCks
IDApOworfQorCitpbnQgV2ViRnJhbWVJbXBsOjpwcmludEJlZ2luKGNvbnN0IFdlYlNpemUmIHBh
Z2VTaXplKQoreworICAgIEFTU0VSVCghZnJhbWUoKS0+ZG9jdW1lbnQoKS0+aXNGcmFtZVNldCgp
KTsKKworICAgIG1fcHJpbnRDb250ZXh0LnNldChuZXcgQ2hyb21lUHJpbnRDb250ZXh0KGZyYW1l
KCkpKTsKKyAgICBGbG9hdFJlY3QgcmVjdCgwLCAwLCBzdGF0aWNfY2FzdDxmbG9hdD4ocGFnZVNp
emUud2lkdGgpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGZsb2F0Pihw
YWdlU2l6ZS5oZWlnaHQpKTsKKyAgICBtX3ByaW50Q29udGV4dC0+YmVnaW4ocmVjdC53aWR0aCgp
KTsKKyAgICBmbG9hdCBwYWdlSGVpZ2h0OworICAgIC8vIFdlIGlnbm9yZSB0aGUgb3ZlcmxheXMg
Y2FsY3VsYXRpb24gZm9yIG5vdyBzaW5jZSB0aGV5IGFyZSBnZW5lcmF0ZWQgaW4gdGhlCisgICAg
Ly8gYnJvd3Nlci4gcGFnZUhlaWdodCBpcyBhY3R1YWxseSBhbiBvdXRwdXQgcGFyYW1ldGVyLgor
ICAgIG1fcHJpbnRDb250ZXh0LT5jb21wdXRlUGFnZVJlY3RzKHJlY3QsIDAsIDAsIDEuMCwgcGFn
ZUhlaWdodCk7CisgICAgcmV0dXJuIG1fcHJpbnRDb250ZXh0LT5wYWdlQ291bnQoKTsKK30KKwor
ZmxvYXQgV2ViRnJhbWVJbXBsOjpnZXRQcmludFBhZ2VTaHJpbmsoaW50IHBhZ2UpCit7CisgICAg
Ly8gRW5zdXJlIGNvcnJlY3Qgc3RhdGUuCisgICAgaWYgKCFtX3ByaW50Q29udGV4dC5nZXQoKSB8
fCBwYWdlIDwgMCkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIG1fcHJpbnRDb250ZXh0LT5nZXRQYWdlU2hyaW5r
KHBhZ2UpOworfQorCitmbG9hdCBXZWJGcmFtZUltcGw6OnByaW50UGFnZShpbnQgcGFnZSwgV2Vi
Q2FudmFzKiBjYW52YXMpCit7CisgICAgLy8gRW5zdXJlIGNvcnJlY3Qgc3RhdGUuCisgICAgaWYg
KCFtX3ByaW50Q29udGV4dC5nZXQoKSB8fCBwYWdlIDwgMCB8fCAhZnJhbWUoKSB8fCAhZnJhbWUo
KS0+ZG9jdW1lbnQoKSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorCisjaWYgUExBVEZPUk0oV0lOX09TKSB8fCBQTEFURk9STShMSU5V
WCkgfHwgUExBVEZPUk0oRlJFRUJTRCkKKyAgICBQbGF0Zm9ybUNvbnRleHRTa2lhIGNvbnRleHQo
Y2FudmFzKTsKKyAgICBHcmFwaGljc0NvbnRleHQgc3Bvb2woJmNvbnRleHQpOworI2VsaWYgUExB
VEZPUk0oREFSV0lOKQorICAgIEdyYXBoaWNzQ29udGV4dCBzcG9vbChjYW52YXMpOworICAgIExv
Y2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQoJnNwb29sKTsKKyNlbmRpZgor
CisgICAgcmV0dXJuIG1fcHJpbnRDb250ZXh0LT5zcG9vbFBhZ2Uoc3Bvb2wsIHBhZ2UpOworfQor
Cit2b2lkIFdlYkZyYW1lSW1wbDo6cHJpbnRFbmQoKQoreworICAgIEFTU0VSVChtX3ByaW50Q29u
dGV4dC5nZXQoKSk7CisgICAgaWYgKG1fcHJpbnRDb250ZXh0LmdldCgpKQorICAgICAgICBtX3By
aW50Q29udGV4dC0+ZW5kKCk7CisgICAgbV9wcmludENvbnRleHQuY2xlYXIoKTsKK30KKworYm9v
bCBXZWJGcmFtZUltcGw6OmZpbmQoaW50IGlkZW50aWZpZXIsCisgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBXZWJTdHJpbmcmIHNlYXJjaFRleHQsCisgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBXZWJGaW5kT3B0aW9ucyYgb3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgd3JhcFdpdGhpbkZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgV2ViUmVjdCog
c2VsZWN0aW9uUmVjdCkKK3sKKyAgICBXZWJGcmFtZUltcGwqIG1haW5GcmFtZUltcGwgPSB2aWV3
SW1wbCgpLT5tYWluRnJhbWVJbXBsKCk7CisKKyAgICBpZiAoIW9wdGlvbnMuZmluZE5leHQpCisg
ICAgICAgIGZyYW1lKCktPnBhZ2UoKS0+dW5tYXJrQWxsVGV4dE1hdGNoZXMoKTsKKyAgICBlbHNl
CisgICAgICAgIHNldE1hcmtlckFjdGl2ZShtX2FjdGl2ZU1hdGNoLmdldCgpLCBmYWxzZSk7ICAv
LyBBY3RpdmUgbWF0Y2ggaXMgY2hhbmdpbmcuCisKKyAgICAvLyBTdGFydHMgdGhlIHNlYXJjaCBm
cm9tIHRoZSBjdXJyZW50IHNlbGVjdGlvbi4KKyAgICBib29sIHN0YXJ0SW5TZWxlY3Rpb24gPSB0
cnVlOworCisgICAgLy8gSWYgdGhlIHVzZXIgaGFzIHNlbGVjdGVkIHNvbWV0aGluZyBzaW5jZSB0
aGUgbGFzdCBGaW5kIG9wZXJhdGlvbiB3ZSB3YW50CisgICAgLy8gdG8gc3RhcnQgZnJvbSB0aGVy
ZS4gT3RoZXJ3aXNlLCB3ZSBzdGFydCBzZWFyY2hpbmcgZnJvbSB3aGVyZSB0aGUgbGFzdCBGaW5k
CisgICAgLy8gb3BlcmF0aW9uIGxlZnQgb2ZmIChlaXRoZXIgYSBGaW5kIG9yIGEgRmluZE5leHQg
b3BlcmF0aW9uKS4KKyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbihmcmFtZSgpLT5zZWxl
Y3Rpb24oKS0+c2VsZWN0aW9uKCkpOworICAgIGJvb2wgYWN0aXZlU2VsZWN0aW9uID0gIXNlbGVj
dGlvbi5pc05vbmUoKTsKKyAgICBpZiAoIWFjdGl2ZVNlbGVjdGlvbiAmJiBtX2FjdGl2ZU1hdGNo
KSB7CisgICAgICAgIHNlbGVjdGlvbiA9IFZpc2libGVTZWxlY3Rpb24obV9hY3RpdmVNYXRjaC5n
ZXQoKSk7CisgICAgICAgIGZyYW1lKCktPnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb24oc2VsZWN0
aW9uKTsKKyAgICB9CisKKyAgICBBU1NFUlQoZnJhbWUoKSAmJiBmcmFtZSgpLT52aWV3KCkpOwor
ICAgIGJvb2wgZm91bmQgPSBmcmFtZSgpLT5maW5kU3RyaW5nKAorICAgICAgICBzZWFyY2hUZXh0
LCBvcHRpb25zLmZvcndhcmQsIG9wdGlvbnMubWF0Y2hDYXNlLCB3cmFwV2l0aGluRnJhbWUsCisg
ICAgICAgIHN0YXJ0SW5TZWxlY3Rpb24pOworICAgIGlmIChmb3VuZCkgeworICAgICAgICAvLyBT
dG9yZSB3aGljaCBmcmFtZSB3YXMgYWN0aXZlLiBUaGlzIHdpbGwgY29tZSBpbiBoYW5keSBsYXRl
ciB3aGVuIHdlCisgICAgICAgIC8vIGNoYW5nZSB0aGUgYWN0aXZlIG1hdGNoIG9yZGluYWwgYmVs
b3cuCisgICAgICAgIFdlYkZyYW1lSW1wbCogb2xkQWN0aXZlRnJhbWUgPSBtYWluRnJhbWVJbXBs
LT5tX2FjdGl2ZU1hdGNoRnJhbWU7CisgICAgICAgIC8vIFNldCB0aGlzIGZyYW1lIGFzIHRoZSBh
Y3RpdmUgZnJhbWUgKHRoZSBvbmUgd2l0aCB0aGUgYWN0aXZlIGhpZ2hsaWdodCkuCisgICAgICAg
IG1haW5GcmFtZUltcGwtPm1fYWN0aXZlTWF0Y2hGcmFtZSA9IHRoaXM7CisKKyAgICAgICAgLy8g
V2UgZm91bmQgc29tZXRoaW5nLCBzbyB3ZSBjYW4gbm93IHF1ZXJ5IHRoZSBzZWxlY3Rpb24gZm9y
IGl0cyBwb3NpdGlvbi4KKyAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24oZnJh
bWUoKS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpKTsKKyAgICAgICAgSW50UmVjdCBjdXJyU2Vs
ZWN0aW9uUmVjdDsKKworICAgICAgICAvLyBJZiB3ZSB0aG91Z2h0IHdlIGZvdW5kIHNvbWV0aGlu
ZywgYnV0IGl0IGNvdWxkbid0IGJlIHNlbGVjdGVkIChwZXJoYXBzCisgICAgICAgIC8vIGJlY2F1
c2UgaXQgd2FzIG1hcmtlZCAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lKSwgd2UgY2FuJ3Qgc2V0
IGl0IHRvCisgICAgICAgIC8vIGJlIGFjdGl2ZSBidXQgd2Ugc3RpbGwgY29udGludWUgc2VhcmNo
aW5nLiBUaGlzIG1hdGNoZXMgU2FmYXJpJ3MKKyAgICAgICAgLy8gYmVoYXZpb3IsIGluY2x1ZGlu
ZyBzb21lIG9kZGl0aWVzIHdoZW4gc2VsZWN0YWJsZSBhbmQgdW4tc2VsZWN0YWJsZSB0ZXh0Cisg
ICAgICAgIC8vIGFyZSBtaXhlZCBvbiBhIHBhZ2U6IHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTkxMjcuCisgICAgICAgIGlmIChuZXdTZWxlY3Rpb24uaXNOb25l
KCkgfHwgKG5ld1NlbGVjdGlvbi5zdGFydCgpID09IG5ld1NlbGVjdGlvbi5lbmQoKSkpCisgICAg
ICAgICAgICBtX2FjdGl2ZU1hdGNoID0gMDsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBt
X2FjdGl2ZU1hdGNoID0gbmV3U2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgICAg
ICAgICBjdXJyU2VsZWN0aW9uUmVjdCA9IG1fYWN0aXZlTWF0Y2gtPmJvdW5kaW5nQm94KCk7Cisg
ICAgICAgICAgICBzZXRNYXJrZXJBY3RpdmUobV9hY3RpdmVNYXRjaC5nZXQoKSwgdHJ1ZSk7ICAv
LyBBY3RpdmUuCisgICAgICAgICAgICAvLyBXZWJLaXQgZHJhd3MgdGhlIGhpZ2hsaWdodGluZyBm
b3IgYWxsIG1hdGNoZXMuCisgICAgICAgICAgICBleGVjdXRlQ29tbWFuZChXZWJTdHJpbmc6OmZy
b21VVEY4KCJVbnNlbGVjdCIpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghb3B0aW9ucy5m
aW5kTmV4dCB8fCBhY3RpdmVTZWxlY3Rpb24pIHsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgZWl0
aGVyIGEgRmluZCBvcGVyYXRpb24gb3IgYSBGaW5kLW5leHQgZnJvbSBhIG5ldyBzdGFydCBwb2lu
dAorICAgICAgICAgICAgLy8gZHVlIHRvIGEgc2VsZWN0aW9uLCBzbyB3ZSBzZXQgdGhlIGZsYWcg
dG8gYXNrIHRoZSBzY29waW5nIGVmZm9ydAorICAgICAgICAgICAgLy8gdG8gZmluZCB0aGUgYWN0
aXZlIHJlY3QgZm9yIHVzIHNvIHdlIGNhbiB1cGRhdGUgdGhlIG9yZGluYWwgKG4gb2YgbSkuCisg
ICAgICAgICAgICBtX2xvY2F0aW5nQWN0aXZlUmVjdCA9IHRydWU7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBpZiAob2xkQWN0aXZlRnJhbWUgIT0gdGhpcykgeworICAgICAgICAgICAg
ICAgIC8vIElmIHRoZSBhY3RpdmUgZnJhbWUgaGFzIGNoYW5nZWQgaXQgbWVhbnMgdGhhdCB3ZSBo
YXZlIGEgbXVsdGktZnJhbWUKKyAgICAgICAgICAgICAgICAvLyBwYWdlIGFuZCB3ZSBqdXN0IHN3
aXRjaCB0byBzZWFyY2hpbmcgaW4gYSBuZXcgZnJhbWUuIFRoZW4gd2UganVzdAorICAgICAgICAg
ICAgICAgIC8vIHdhbnQgdG8gcmVzZXQgdGhlIGluZGV4LgorICAgICAgICAgICAgICAgIGlmIChv
cHRpb25zLmZvcndhcmQpCisgICAgICAgICAgICAgICAgICAgIG1fYWN0aXZlTWF0Y2hJbmRleCA9
IDA7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBtX2FjdGl2ZU1h
dGNoSW5kZXggPSBtX2xhc3RNYXRjaENvdW50IC0gMTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgLy8gV2UgYXJlIHN0aWxsIHRoZSBhY3RpdmUgZnJhbWUsIHNvIGluY3Jl
bWVudCAob3IgZGVjcmVtZW50KSB0aGUKKyAgICAgICAgICAgICAgICAvLyB8bV9hY3RpdmVNYXRj
aEluZGV4fCwgd3JhcHBpbmcgaWYgbmVlZGVkIChvbiBzaW5nbGUgZnJhbWUgcGFnZXMpLgorICAg
ICAgICAgICAgICAgIG9wdGlvbnMuZm9yd2FyZCA/ICsrbV9hY3RpdmVNYXRjaEluZGV4IDogLS1t
X2FjdGl2ZU1hdGNoSW5kZXg7CisgICAgICAgICAgICAgICAgaWYgKG1fYWN0aXZlTWF0Y2hJbmRl
eCArIDEgPiBtX2xhc3RNYXRjaENvdW50KQorICAgICAgICAgICAgICAgICAgICBtX2FjdGl2ZU1h
dGNoSW5kZXggPSAwOworICAgICAgICAgICAgICAgIGlmIChtX2FjdGl2ZU1hdGNoSW5kZXggPT0g
LTEpCisgICAgICAgICAgICAgICAgICAgIG1fYWN0aXZlTWF0Y2hJbmRleCA9IG1fbGFzdE1hdGNo
Q291bnQgLSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHNlbGVjdGlvblJlY3Qp
IHsKKyAgICAgICAgICAgICAgICBXZWJSZWN0IHJlY3QgPSBmcmFtZSgpLT52aWV3KCktPmNvbnZl
cnRUb0NvbnRhaW5pbmdXaW5kb3coY3VyclNlbGVjdGlvblJlY3QpOworICAgICAgICAgICAgICAg
IHJlY3QueCAtPSBmcmFtZVZpZXcoKS0+c2Nyb2xsT2Zmc2V0KCkud2lkdGgoKTsKKyAgICAgICAg
ICAgICAgICByZWN0LnkgLT0gZnJhbWVWaWV3KCktPnNjcm9sbE9mZnNldCgpLmhlaWdodCgpOwor
ICAgICAgICAgICAgICAgICpzZWxlY3Rpb25SZWN0ID0gcmVjdDsKKworICAgICAgICAgICAgICAg
IHJlcG9ydEZpbmRJblBhZ2VTZWxlY3Rpb24ocmVjdCwgbV9hY3RpdmVNYXRjaEluZGV4ICsgMSwg
aWRlbnRpZmllcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAg
ICAgICAvLyBOb3RoaW5nIHdhcyBmb3VuZCBpbiB0aGlzIGZyYW1lLgorICAgICAgICBtX2FjdGl2
ZU1hdGNoID0gMDsKKworICAgICAgICAvLyBFcmFzZSBhbGwgcHJldmlvdXMgdGlja21hcmtzIGFu
ZCBoaWdobGlnaHRpbmcuCisgICAgICAgIGludmFsaWRhdGVBcmVhKEludmFsaWRhdGVBbGwpOwor
ICAgIH0KKworICAgIHJldHVybiBmb3VuZDsKK30KKwordm9pZCBXZWJGcmFtZUltcGw6OnN0b3BG
aW5kaW5nKGJvb2wgY2xlYXJTZWxlY3Rpb24pCit7CisgICAgaWYgKCFjbGVhclNlbGVjdGlvbikK
KyAgICAgICAgc2V0RmluZEVuZHN0YXRlRm9jdXNBbmRTZWxlY3Rpb24oKTsKKyAgICBjYW5jZWxQ
ZW5kaW5nU2NvcGluZ0VmZm9ydCgpOworCisgICAgLy8gUmVtb3ZlIGFsbCBtYXJrZXJzIGZvciBt
YXRjaGVzIGZvdW5kIGFuZCB0dXJuIG9mZiB0aGUgaGlnaGxpZ2h0aW5nLgorICAgIGlmICghcGFy
ZW50KCkpCisgICAgICAgIGZyYW1lKCktPmRvY3VtZW50KCktPnJlbW92ZU1hcmtlcnMoRG9jdW1l
bnRNYXJrZXI6OlRleHRNYXRjaCk7CisgICAgZnJhbWUoKS0+c2V0TWFya2VkVGV4dE1hdGNoZXNB
cmVIaWdobGlnaHRlZChmYWxzZSk7CisKKyAgICAvLyBMZXQgdGhlIGZyYW1lIGtub3cgdGhhdCB3
ZSBkb24ndCB3YW50IHRpY2ttYXJrcyBvciBoaWdobGlnaHRpbmcgYW55bW9yZS4KKyAgICBpbnZh
bGlkYXRlQXJlYShJbnZhbGlkYXRlQWxsKTsKK30KKwordm9pZCBXZWJGcmFtZUltcGw6OnNjb3Bl
U3RyaW5nTWF0Y2hlcyhpbnQgaWRlbnRpZmllciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBzZWFyY2hUZXh0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJGaW5kT3B0aW9ucyYgb3B0aW9ucywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZXNldCkKK3sKKyAgICBp
ZiAoIXNob3VsZFNjb3BlTWF0Y2hlcyhzZWFyY2hUZXh0KSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgV2ViRnJhbWVJbXBsKiBtYWluRnJhbWVJbXBsID0gdmlld0ltcGwoKS0+bWFpbkZyYW1lSW1w
bCgpOworCisgICAgaWYgKHJlc2V0KSB7CisgICAgICAgIC8vIFRoaXMgaXMgYSBicmFuZCBuZXcg
c2VhcmNoLCBzbyB3ZSBuZWVkIHRvIHJlc2V0IGV2ZXJ5dGhpbmcuCisgICAgICAgIC8vIFNjb3Bp
bmcgaXMganVzdCBhYm91dCB0byBiZWdpbi4KKyAgICAgICAgbV9zY29waW5nQ29tcGxldGUgPSBm
YWxzZTsKKyAgICAgICAgLy8gQ2xlYXIgaGlnaGxpZ2h0aW5nIGZvciB0aGlzIGZyYW1lLgorICAg
ICAgICBpZiAoZnJhbWUoKS0+bWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZCgpKQorICAg
ICAgICAgICAgZnJhbWUoKS0+cGFnZSgpLT51bm1hcmtBbGxUZXh0TWF0Y2hlcygpOworICAgICAg
ICAvLyBDbGVhciB0aGUgY291bnRlcnMgZnJvbSBsYXN0IG9wZXJhdGlvbi4KKyAgICAgICAgbV9s
YXN0TWF0Y2hDb3VudCA9IDA7CisgICAgICAgIG1fbmV4dEludmFsaWRhdGVBZnRlciA9IDA7CisK
KyAgICAgICAgbV9yZXN1bWVTY29waW5nRnJvbVJhbmdlID0gMDsKKworICAgICAgICBtYWluRnJh
bWVJbXBsLT5tX2ZyYW1lc1Njb3BpbmdDb3VudCsrOworCisgICAgICAgIC8vIE5vdywgZGVmZXIg
c2NvcGluZyB1bnRpbCBsYXRlciB0byBhbGxvdyBmaW5kIG9wZXJhdGlvbiB0byBmaW5pc2ggcXVp
Y2tseS4KKyAgICAgICAgc2NvcGVTdHJpbmdNYXRjaGVzU29vbigKKyAgICAgICAgICAgIGlkZW50
aWZpZXIsCisgICAgICAgICAgICBzZWFyY2hUZXh0LAorICAgICAgICAgICAgb3B0aW9ucywKKyAg
ICAgICAgICAgIGZhbHNlKTsgIC8vIGZhbHNlPXdlIGp1c3QgcmVzZXQsIHNvIGRvbid0IGRvIGl0
IGFnYWluLgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVmUHRyPFJhbmdlPiBzZWFy
Y2hSYW5nZShyYW5nZU9mQ29udGVudHMoZnJhbWUoKS0+ZG9jdW1lbnQoKSkpOworCisgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDAsIGVjMiA9IDA7CisgICAgaWYgKG1fcmVzdW1lU2NvcGluZ0Zyb21S
YW5nZS5nZXQoKSkgeworICAgICAgICAvLyBUaGlzIGlzIGEgY29udGludWF0aW9uIG9mIGEgc2Nv
cGluZyBvcGVyYXRpb24gdGhhdCB0aW1lZCBvdXQgYW5kIGRpZG4ndAorICAgICAgICAvLyBjb21w
bGV0ZSBsYXN0IHRpbWUgYXJvdW5kLCBzbyB3ZSBzaG91bGQgc3RhcnQgZnJvbSB3aGVyZSB3ZSBs
ZWZ0IG9mZi4KKyAgICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KG1fcmVzdW1lU2NvcGluZ0Zy
b21SYW5nZS0+c3RhcnRDb250YWluZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fcmVzdW1lU2NvcGluZ0Zyb21SYW5nZS0+c3RhcnRPZmZzZXQoZWMyKSArIDEsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlYyk7CisgICAgICAgIGlmIChlYyB8fCBlYzIpIHsKKyAg
ICAgICAgICAgIGlmIChlYzIpICAvLyBBIG5vbi16ZXJvIHxlY3wgaGFwcGVucyB3aGVuIG5hdmln
YXRpbmcgZHVyaW5nIHNlYXJjaC4KKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFRoaXMg
dGltZW91dCBjb250cm9scyBob3cgbG9uZyB3ZSBzY29wZSBiZWZvcmUgcmVsZWFzaW5nIGNvbnRy
b2wuICBUaGlzCisgICAgLy8gdmFsdWUgZG9lcyBub3QgcHJldmVudCB1cyBmcm9tIHJ1bm5pbmcg
Zm9yIGxvbmdlciB0aGFuIHRoaXMsIGJ1dCBpdCBpcworICAgIC8vIHBlcmlvZGljYWxseSBjaGVj
a2VkIHRvIHNlZSBpZiB3ZSBoYXZlIGV4Y2VlZGVkIG91ciBhbGxvY2F0ZWQgdGltZS4KKyAgICBj
b25zdCBkb3VibGUgbWF4U2NvcGluZ0R1cmF0aW9uID0gMC4xOyAgLy8gc2Vjb25kcworCisgICAg
aW50IG1hdGNoQ291bnQgPSAwOworICAgIGJvb2wgdGltZWRPdXQgPSBmYWxzZTsKKyAgICBkb3Vi
bGUgc3RhcnRUaW1lID0gY3VycmVudFRpbWUoKTsKKyAgICBkbyB7CisgICAgICAgIC8vIEZpbmQg
bmV4dCBvY2N1cnJlbmNlIG9mIHRoZSBzZWFyY2ggc3RyaW5nLgorICAgICAgICAvLyBGSVhNRTog
KGh0dHA6Ly9iLzEwODgyNDUpIFRoaXMgV2ViS2l0IG9wZXJhdGlvbiBtYXkgcnVuIGZvciBsb25n
ZXIKKyAgICAgICAgLy8gdGhhbiB0aGUgdGltZW91dCB2YWx1ZSwgYW5kIGlzIG5vdCBpbnRlcnJ1
cHRpYmxlIGFzIGl0IGlzIGN1cnJlbnRseQorICAgICAgICAvLyB3cml0dGVuLiBXZSBtYXkgbmVl
ZCB0byByZXdyaXRlIGl0IHdpdGggaW50ZXJydXB0aWJpbGl0eSBpbiBtaW5kLCBvcgorICAgICAg
ICAvLyBmaW5kIGFuIGFsdGVybmF0aXZlLgorICAgICAgICBSZWZQdHI8UmFuZ2U+IHJlc3VsdFJh
bmdlKGZpbmRQbGFpblRleHQoc2VhcmNoUmFuZ2UuZ2V0KCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hUZXh0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMubWF0Y2hDYXNlKSk7CisgICAg
ICAgIGlmIChyZXN1bHRSYW5nZS0+Y29sbGFwc2VkKGVjKSkgeworICAgICAgICAgICAgaWYgKCFy
ZXN1bHRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+aXNJblNoYWRvd1RyZWUoKSkKKyAgICAgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICAgICAgc2VhcmNoUmFuZ2UgPSByYW5nZU9mQ29udGVu
dHMoZnJhbWUoKS0+ZG9jdW1lbnQoKSk7CisgICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0U3Rh
cnRBZnRlcigKKyAgICAgICAgICAgICAgICByZXN1bHRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+
c2hhZG93QW5jZXN0b3JOb2RlKCksIGVjKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gQSBub24tY29sbGFwc2VkIHJlc3VsdCByYW5nZSBjYW4gaW4gc29t
ZSBmdW5reSB3aGl0ZXNwYWNlIGNhc2VzIHN0aWxsIG5vdAorICAgICAgICAvLyBhZHZhbmNlIHRo
ZSByYW5nZSdzIHN0YXJ0IHBvc2l0aW9uICg0NTA5MzI4KS4gQnJlYWsgdG8gYXZvaWQgaW5maW5p
dGUKKyAgICAgICAgLy8gbG9vcC4gKFRoaXMgZnVuY3Rpb24gaXMgYmFzZWQgb24gdGhlIGltcGxl
bWVudGF0aW9uIG9mCisgICAgICAgIC8vIEZyYW1lOjptYXJrQWxsTWF0Y2hlc0ZvclRleHQsIHdo
aWNoIGlzIHdoZXJlIHRoaXMgc2FmZWd1YXJkIGNvbWVzIGZyb20pLgorICAgICAgICBWaXNpYmxl
UG9zaXRpb24gbmV3U3RhcnQgPSBlbmRWaXNpYmxlUG9zaXRpb24ocmVzdWx0UmFuZ2UuZ2V0KCks
IERPV05TVFJFQU0pOworICAgICAgICBpZiAobmV3U3RhcnQgPT0gc3RhcnRWaXNpYmxlUG9zaXRp
b24oc2VhcmNoUmFuZ2UuZ2V0KCksIERPV05TVFJFQU0pKQorICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgLy8gT25seSB0cmVhdCB0aGUgcmVzdWx0IGFzIGEgbWF0Y2ggaWYgaXQgaXMgdmlz
aWJsZQorICAgICAgICBpZiAoZnJhbWUoKS0+ZWRpdG9yKCktPmluc2lkZVZpc2libGVBcmVhKHJl
c3VsdFJhbmdlLmdldCgpKSkgeworICAgICAgICAgICAgKyttYXRjaENvdW50OworCisgICAgICAg
ICAgICBzZXRTdGFydChzZWFyY2hSYW5nZS5nZXQoKSwgbmV3U3RhcnQpOworICAgICAgICAgICAg
Tm9kZSogc2hhZG93VHJlZVJvb3QgPSBzZWFyY2hSYW5nZS0+c2hhZG93VHJlZVJvb3ROb2RlKCk7
CisgICAgICAgICAgICBpZiAoc2VhcmNoUmFuZ2UtPmNvbGxhcHNlZChlYykgJiYgc2hhZG93VHJl
ZVJvb3QpCisgICAgICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldEVuZChzaGFkb3dUcmVlUm9v
dCwgc2hhZG93VHJlZVJvb3QtPmNoaWxkTm9kZUNvdW50KCksIGVjKTsKKworICAgICAgICAgICAg
Ly8gQ2F0Y2ggYSBzcGVjaWFsIGNhc2Ugd2hlcmUgRmluZCBmb3VuZCBzb21ldGhpbmcgYnV0IGRv
ZXNuJ3Qga25vdyB3aGF0CisgICAgICAgICAgICAvLyB0aGUgYm91bmRpbmcgYm94IGZvciBpdCBp
cy4gSW4gdGhpcyBjYXNlIHdlIHNldCB0aGUgZmlyc3QgbWF0Y2ggd2UgZmluZAorICAgICAgICAg
ICAgLy8gYXMgdGhlIGFjdGl2ZSByZWN0LgorICAgICAgICAgICAgSW50UmVjdCByZXN1bHRCb3Vu
ZHMgPSByZXN1bHRSYW5nZS0+Ym91bmRpbmdCb3goKTsKKyAgICAgICAgICAgIEludFJlY3QgYWN0
aXZlU2VsZWN0aW9uUmVjdDsKKyAgICAgICAgICAgIGlmIChtX2xvY2F0aW5nQWN0aXZlUmVjdCkg
eworICAgICAgICAgICAgICAgIGFjdGl2ZVNlbGVjdGlvblJlY3QgPSBtX2FjdGl2ZU1hdGNoLmdl
dCgpID8KKyAgICAgICAgICAgICAgICAgICAgbV9hY3RpdmVNYXRjaC0+Ym91bmRpbmdCb3goKSA6
IHJlc3VsdEJvdW5kczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gSWYgdGhlIEZp
bmQgZnVuY3Rpb24gZm91bmQgYSBtYXRjaCBpdCB3aWxsIGhhdmUgc3RvcmVkIHdoZXJlIHRoZQor
ICAgICAgICAgICAgLy8gbWF0Y2ggd2FzIGZvdW5kIGluIG1fYWN0aXZlU2VsZWN0aW9uUmVjdCBv
biB0aGUgY3VycmVudCBmcmFtZS4gSWYgd2UKKyAgICAgICAgICAgIC8vIGZpbmQgdGhpcyByZWN0
IGR1cmluZyBzY29waW5nIGl0IG1lYW5zIHdlIGhhdmUgZm91bmQgdGhlIGFjdGl2ZQorICAgICAg
ICAgICAgLy8gdGlja21hcmsuCisgICAgICAgICAgICBib29sIGZvdW5kQWN0aXZlTWF0Y2ggPSBm
YWxzZTsKKyAgICAgICAgICAgIGlmIChtX2xvY2F0aW5nQWN0aXZlUmVjdCAmJiAoYWN0aXZlU2Vs
ZWN0aW9uUmVjdCA9PSByZXN1bHRCb3VuZHMpKSB7CisgICAgICAgICAgICAgICAgLy8gV2UgaGF2
ZSBmb3VuZCB0aGUgYWN0aXZlIHRpY2ttYXJrIGZyYW1lLgorICAgICAgICAgICAgICAgIG1haW5G
cmFtZUltcGwtPm1fYWN0aXZlTWF0Y2hGcmFtZSA9IHRoaXM7CisgICAgICAgICAgICAgICAgZm91
bmRBY3RpdmVNYXRjaCA9IHRydWU7CisgICAgICAgICAgICAgICAgLy8gV2UgYWxzbyBrbm93IHdo
aWNoIHRpY2ttYXJrIGlzIGFjdGl2ZSBub3cuCisgICAgICAgICAgICAgICAgbV9hY3RpdmVNYXRj
aEluZGV4ID0gbWF0Y2hDb3VudCAtIDE7CisgICAgICAgICAgICAgICAgLy8gVG8gc3RvcCBsb29r
aW5nIGZvciB0aGUgYWN0aXZlIHRpY2ttYXJrLCB3ZSBzZXQgdGhpcyBmbGFnLgorICAgICAgICAg
ICAgICAgIG1fbG9jYXRpbmdBY3RpdmVSZWN0ID0gZmFsc2U7CisKKyAgICAgICAgICAgICAgICAv
LyBOb3RpZnkgYnJvd3NlciBvZiBuZXcgbG9jYXRpb24gZm9yIHRoZSBzZWxlY3RlZCByZWN0YW5n
bGUuCisgICAgICAgICAgICAgICAgcmVzdWx0Qm91bmRzLm1vdmUoLWZyYW1lVmlldygpLT5zY3Jv
bGxPZmZzZXQoKS53aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1m
cmFtZVZpZXcoKS0+c2Nyb2xsT2Zmc2V0KCkuaGVpZ2h0KCkpOworICAgICAgICAgICAgICAgIHJl
cG9ydEZpbmRJblBhZ2VTZWxlY3Rpb24oCisgICAgICAgICAgICAgICAgICAgIGZyYW1lKCktPnZp
ZXcoKS0+Y29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhyZXN1bHRCb3VuZHMpLAorICAgICAgICAg
ICAgICAgICAgICBtX2FjdGl2ZU1hdGNoSW5kZXggKyAxLAorICAgICAgICAgICAgICAgICAgICBp
ZGVudGlmaWVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYWRkTWFya2VyKHJlc3Vs
dFJhbmdlLmdldCgpLCBmb3VuZEFjdGl2ZU1hdGNoKTsKKyAgICAgICAgfQorCisgICAgICAgIG1f
cmVzdW1lU2NvcGluZ0Zyb21SYW5nZSA9IHJlc3VsdFJhbmdlOworICAgICAgICB0aW1lZE91dCA9
IChjdXJyZW50VGltZSgpIC0gc3RhcnRUaW1lKSA+PSBtYXhTY29waW5nRHVyYXRpb247CisgICAg
fSB3aGlsZSAoIXRpbWVkT3V0KTsKKworICAgIC8vIFJlbWVtYmVyIHdoYXQgd2Ugc2VhcmNoIGZv
ciBsYXN0IHRpbWUsIHNvIHdlIGNhbiBza2lwIHNlYXJjaGluZyBpZiBtb3JlCisgICAgLy8gbGV0
dGVycyBhcmUgYWRkZWQgdG8gdGhlIHNlYXJjaCBzdHJpbmcgKGFuZCBsYXN0IG91dGNvbWUgd2Fz
IDApLgorICAgIG1fbGFzdFNlYXJjaFN0cmluZyA9IHNlYXJjaFRleHQ7CisKKyAgICBpZiAobWF0
Y2hDb3VudCA+IDApIHsKKyAgICAgICAgZnJhbWUoKS0+c2V0TWFya2VkVGV4dE1hdGNoZXNBcmVI
aWdobGlnaHRlZCh0cnVlKTsKKworICAgICAgICBtX2xhc3RNYXRjaENvdW50ICs9IG1hdGNoQ291
bnQ7CisKKyAgICAgICAgLy8gTGV0IHRoZSBtYWluZnJhbWUga25vdyBob3cgbXVjaCB3ZSBmb3Vu
ZCBkdXJpbmcgdGhpcyBwYXNzLgorICAgICAgICBtYWluRnJhbWVJbXBsLT5pbmNyZWFzZU1hdGNo
Q291bnQobWF0Y2hDb3VudCwgaWRlbnRpZmllcik7CisgICAgfQorCisgICAgaWYgKHRpbWVkT3V0
KSB7CisgICAgICAgIC8vIElmIHdlIGZvdW5kIGFueXRoaW5nIGR1cmluZyB0aGlzIHBhc3MsIHdl
IHNob3VsZCByZWRyYXcuIEhvd2V2ZXIsIHdlCisgICAgICAgIC8vIGRvbid0IHdhbnQgdG8gc3Bh
bSB0b28gbXVjaCBpZiB0aGUgcGFnZSBpcyBleHRyZW1lbHkgbG9uZywgc28gaWYgd2UKKyAgICAg
ICAgLy8gcmVhY2ggYSBjZXJ0YWluIHBvaW50IHdlIHN0YXJ0IHRocm90dGxpbmcgdGhlIHJlZHJh
dyByZXF1ZXN0cy4KKyAgICAgICAgaWYgKG1hdGNoQ291bnQgPiAwKQorICAgICAgICAgICAgaW52
YWxpZGF0ZUlmTmVjZXNzYXJ5KCk7CisKKyAgICAgICAgLy8gU2NvcGluZyBlZmZvcnQgcmFuIG91
dCBvZiB0aW1lLCBsZXRzIGFzayBmb3IgYW5vdGhlciB0aW1lLXNsaWNlLgorICAgICAgICBzY29w
ZVN0cmluZ01hdGNoZXNTb29uKAorICAgICAgICAgICAgaWRlbnRpZmllciwKKyAgICAgICAgICAg
IHNlYXJjaFRleHQsCisgICAgICAgICAgICBvcHRpb25zLAorICAgICAgICAgICAgZmFsc2UpOyAg
Ly8gZG9uJ3QgcmVzZXQuCisgICAgICAgIHJldHVybjsgIC8vIERvbmUgZm9yIG5vdywgcmVzdW1l
IHdvcmsgbGF0ZXIuCisgICAgfQorCisgICAgLy8gVGhpcyBmcmFtZSBoYXMgbm8gZnVydGhlciBz
Y29waW5nIGxlZnQsIHNvIGl0IGlzIGRvbmUuIE90aGVyIGZyYW1lcyBtaWdodCwKKyAgICAvLyBv
ZiBjb3Vyc2UsIGNvbnRpbnVlIHRvIHNjb3BlIG1hdGNoZXMuCisgICAgbV9zY29waW5nQ29tcGxl
dGUgPSB0cnVlOworICAgIG1haW5GcmFtZUltcGwtPm1fZnJhbWVzU2NvcGluZ0NvdW50LS07CisK
KyAgICAvLyBJZiB0aGlzIGlzIHRoZSBsYXN0IGZyYW1lIHRvIGZpbmlzaCBzY29waW5nIHdlIG5l
ZWQgdG8gdHJpZ2dlciB0aGUgZmluYWwKKyAgICAvLyB1cGRhdGUgdG8gYmUgc2VudC4KKyAgICBp
ZiAoIW1haW5GcmFtZUltcGwtPm1fZnJhbWVzU2NvcGluZ0NvdW50KQorICAgICAgICBtYWluRnJh
bWVJbXBsLT5pbmNyZWFzZU1hdGNoQ291bnQoMCwgaWRlbnRpZmllcik7CisKKyAgICAvLyBUaGlz
IGZyYW1lIGlzIGRvbmUsIHNvIHNob3cgYW55IHNjcm9sbGJhciB0aWNrbWFya3Mgd2UgaGF2ZW4n
dCBkcmF3biB5ZXQuCisgICAgaW52YWxpZGF0ZUFyZWEoSW52YWxpZGF0ZVNjcm9sbGJhcik7Cit9
CisKK3ZvaWQgV2ViRnJhbWVJbXBsOjpjYW5jZWxQZW5kaW5nU2NvcGluZ0VmZm9ydCgpCit7Cisg
ICAgZGVsZXRlQWxsVmFsdWVzKG1fZGVmZXJyZWRTY29waW5nV29yayk7CisgICAgbV9kZWZlcnJl
ZFNjb3BpbmdXb3JrLmNsZWFyKCk7CisKKyAgICBtX2FjdGl2ZU1hdGNoSW5kZXggPSAtMTsKK30K
Kwordm9pZCBXZWJGcmFtZUltcGw6OmluY3JlYXNlTWF0Y2hDb3VudChpbnQgY291bnQsIGludCBp
ZGVudGlmaWVyKQoreworICAgIC8vIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVk
IG9uIHRoZSBtYWluZnJhbWUuCisgICAgQVNTRVJUKCFwYXJlbnQoKSk7CisKKyAgICBtX3RvdGFs
TWF0Y2hDb3VudCArPSBjb3VudDsKKworICAgIC8vIFVwZGF0ZSB0aGUgVUkgd2l0aCB0aGUgbGF0
ZXN0IGZpbmRpbmdzLgorICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgY2xpZW50KCktPnJlcG9y
dEZpbmRJblBhZ2VNYXRjaENvdW50KGlkZW50aWZpZXIsIG1fdG90YWxNYXRjaENvdW50LCAhbV9m
cmFtZXNTY29waW5nQ291bnQpOworfQorCit2b2lkIFdlYkZyYW1lSW1wbDo6cmVwb3J0RmluZElu
UGFnZVNlbGVjdGlvbihjb25zdCBXZWJSZWN0JiBzZWxlY3Rpb25SZWN0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFjdGl2ZU1hdGNoT3JkaW5hbCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpZGVudGlm
aWVyKQoreworICAgIC8vIFVwZGF0ZSB0aGUgVUkgd2l0aCB0aGUgbGF0ZXN0IHNlbGVjdGlvbiBy
ZWN0LgorICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgY2xpZW50KCktPnJlcG9ydEZpbmRJblBh
Z2VTZWxlY3Rpb24oaWRlbnRpZmllciwgb3JkaW5hbE9mRmlyc3RNYXRjaEZvckZyYW1lKHRoaXMp
ICsgYWN0aXZlTWF0Y2hPcmRpbmFsLCBzZWxlY3Rpb25SZWN0KTsKK30KKwordm9pZCBXZWJGcmFt
ZUltcGw6OnJlc2V0TWF0Y2hDb3VudCgpCit7CisgICAgbV90b3RhbE1hdGNoQ291bnQgPSAwOwor
ICAgIG1fZnJhbWVzU2NvcGluZ0NvdW50ID0gMDsKK30KKworV2ViVVJMIFdlYkZyYW1lSW1wbDo6
Y29tcGxldGVVUkwoY29uc3QgV2ViU3RyaW5nJiB1cmwpIGNvbnN0Cit7CisgICAgaWYgKCFtX2Zy
YW1lIHx8ICFtX2ZyYW1lLT5kb2N1bWVudCgpKQorICAgICAgICByZXR1cm4gV2ViVVJMKCk7CisK
KyAgICByZXR1cm4gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwodXJsKTsKK30KKwor
V2ViU3RyaW5nIFdlYkZyYW1lSW1wbDo6Y29udGVudEFzVGV4dChzaXplX3QgbWF4Q2hhcnMpIGNv
bnN0Cit7CisgICAgaWYgKCFtX2ZyYW1lKQorICAgICAgICByZXR1cm4gV2ViU3RyaW5nKCk7CisK
KyAgICBWZWN0b3I8VUNoYXI+IHRleHQ7CisgICAgZnJhbWVDb250ZW50QXNQbGFpblRleHQobWF4
Q2hhcnMsIG1fZnJhbWUsICZ0ZXh0KTsKKyAgICByZXR1cm4gU3RyaW5nOjphZG9wdCh0ZXh0KTsK
K30KKworV2ViU3RyaW5nIFdlYkZyYW1lSW1wbDo6Y29udGVudEFzTWFya3VwKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gY3JlYXRlRnVsbE1hcmt1cChtX2ZyYW1lLT5kb2N1bWVudCgpKTsKK30KKwor
Ly8gV2ViRnJhbWVJbXBsIHB1YmxpYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworaW50IFdlYkZyYW1lSW1wbDo6bV9saXZlT2JqZWN0
Q291bnQgPSAwOworCitQYXNzUmVmUHRyPFdlYkZyYW1lSW1wbD4gV2ViRnJhbWVJbXBsOjpjcmVh
dGUoV2ViRnJhbWVDbGllbnQqIGNsaWVudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdl
YkZyYW1lSW1wbChDbGllbnRIYW5kbGU6OmNyZWF0ZShjbGllbnQpKSk7Cit9CisKK1dlYkZyYW1l
SW1wbDo6V2ViRnJhbWVJbXBsKFBhc3NSZWZQdHI8Q2xpZW50SGFuZGxlPiBjbGllbnRIYW5kbGUp
CisgICAgOiBtX2ZyYW1lTG9hZGVyQ2xpZW50KHRoaXMpCisgICAgLCBtX2NsaWVudEhhbmRsZShj
bGllbnRIYW5kbGUpCisgICAgLCBtX2FjdGl2ZU1hdGNoRnJhbWUoMCkKKyAgICAsIG1fYWN0aXZl
TWF0Y2hJbmRleCgtMSkKKyAgICAsIG1fbG9jYXRpbmdBY3RpdmVSZWN0KGZhbHNlKQorICAgICwg
bV9yZXN1bWVTY29waW5nRnJvbVJhbmdlKDApCisgICAgLCBtX2xhc3RNYXRjaENvdW50KC0xKQor
ICAgICwgbV90b3RhbE1hdGNoQ291bnQoLTEpCisgICAgLCBtX2ZyYW1lc1Njb3BpbmdDb3VudCgt
MSkKKyAgICAsIG1fc2NvcGluZ0NvbXBsZXRlKGZhbHNlKQorICAgICwgbV9uZXh0SW52YWxpZGF0
ZUFmdGVyKDApCit7CisgICAgQ2hyb21pdW1CcmlkZ2U6OmluY3JlbWVudFN0YXRzQ291bnRlcih3
ZWJGcmFtZUFjdGl2ZUNvdW50KTsKKyAgICBtX2xpdmVPYmplY3RDb3VudCsrOworfQorCitXZWJG
cmFtZUltcGw6On5XZWJGcmFtZUltcGwoKQoreworICAgIENocm9taXVtQnJpZGdlOjpkZWNyZW1l
bnRTdGF0c0NvdW50ZXIod2ViRnJhbWVBY3RpdmVDb3VudCk7CisgICAgbV9saXZlT2JqZWN0Q291
bnQtLTsKKworICAgIGNhbmNlbFBlbmRpbmdTY29waW5nRWZmb3J0KCk7CisgICAgY2xlYXJQYXNz
d29yZExpc3RlbmVycygpOworfQorCit2b2lkIFdlYkZyYW1lSW1wbDo6aW5pdGlhbGl6ZUFzTWFp
bkZyYW1lKFdlYlZpZXdJbXBsKiB3ZWJWaWV3SW1wbCkKK3sKKyAgICBSZWZQdHI8RnJhbWU+IGZy
YW1lID0gRnJhbWU6OmNyZWF0ZSh3ZWJWaWV3SW1wbC0+cGFnZSgpLCAwLCAmbV9mcmFtZUxvYWRl
ckNsaWVudCk7CisgICAgbV9mcmFtZSA9IGZyYW1lLmdldCgpOworCisgICAgLy8gQWRkIHJlZmVy
ZW5jZSBvbiBiZWhhbGYgb2YgRnJhbWVMb2FkZXIuICBTZWUgY29tbWVudHMgaW4KKyAgICAvLyBX
ZWJGcmFtZUxvYWRlckNsaWVudDo6ZnJhbWVMb2FkZXJEZXN0cm95ZWQgZm9yIG1vcmUgaW5mby4K
KyAgICByZWYoKTsKKworICAgIC8vIFdlIG11c3QgY2FsbCBpbml0KCkgYWZ0ZXIgbV9mcmFtZSBp
cyBhc3NpZ25lZCBiZWNhdXNlIGl0IGlzIHJlZmVyZW5jZWQKKyAgICAvLyBkdXJpbmcgaW5pdCgp
LgorICAgIG1fZnJhbWUtPmluaXQoKTsKK30KKworUGFzc1JlZlB0cjxGcmFtZT4gV2ViRnJhbWVJ
bXBsOjpjcmVhdGVDaGlsZEZyYW1lKAorICAgIGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmIHJlcXVl
c3QsIEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50KQoreworICAgIFJlZlB0cjxX
ZWJGcmFtZUltcGw+IHdlYmZyYW1lKGFkb3B0UmVmKG5ldyBXZWJGcmFtZUltcGwobV9jbGllbnRI
YW5kbGUpKSk7CisKKyAgICAvLyBBZGQgYW4gZXh0cmEgcmVmIG9uIGJlaGFsZiBvZiB0aGUgRnJh
bWUvRnJhbWVMb2FkZXIsIHdoaWNoIHJlZmVyZW5jZXMgdGhlCisgICAgLy8gV2ViRnJhbWUgdmlh
IHRoZSBGcmFtZUxvYWRlckNsaWVudCBpbnRlcmZhY2UuIFNlZSB0aGUgY29tbWVudCBhdCB0aGUg
dG9wCisgICAgLy8gb2YgdGhpcyBmaWxlIGZvciBtb3JlIGluZm8uCisgICAgd2ViZnJhbWUtPnJl
ZigpOworCisgICAgUmVmUHRyPEZyYW1lPiBjaGlsZEZyYW1lID0gRnJhbWU6OmNyZWF0ZSgKKyAg
ICAgICAgbV9mcmFtZS0+cGFnZSgpLCBvd25lckVsZW1lbnQsICZ3ZWJmcmFtZS0+bV9mcmFtZUxv
YWRlckNsaWVudCk7CisgICAgd2ViZnJhbWUtPm1fZnJhbWUgPSBjaGlsZEZyYW1lLmdldCgpOwor
CisgICAgY2hpbGRGcmFtZS0+dHJlZSgpLT5zZXROYW1lKHJlcXVlc3QuZnJhbWVOYW1lKCkpOwor
CisgICAgbV9mcmFtZS0+dHJlZSgpLT5hcHBlbmRDaGlsZChjaGlsZEZyYW1lKTsKKworICAgIC8v
IEZyYW1lOjppbml0KCkgY2FuIHRyaWdnZXIgb25sb2FkIGV2ZW50IGluIHRoZSBwYXJlbnQgZnJh
bWUsCisgICAgLy8gd2hpY2ggbWF5IGRldGFjaCB0aGlzIGZyYW1lIGFuZCB0cmlnZ2VyIGEgbnVs
bC1wb2ludGVyIGFjY2VzcworICAgIC8vIGluIEZyYW1lVHJlZTo6cmVtb3ZlQ2hpbGQuIE1vdmUg
aW5pdCgpIGFmdGVyIGFwcGVuZENoaWxkIGNhbGwKKyAgICAvLyBzbyB0aGF0IHdlYmZyYW1lLT5t
RnJhbWUgaXMgaW4gdGhlIHRyZWUgYmVmb3JlIHRyaWdnZXJpbmcKKyAgICAvLyBvbmxvYWQgZXZl
bnQgaGFuZGxlci4KKyAgICAvLyBCZWNhdXNlIHRoZSBldmVudCBoYW5kbGVyIG1heSBzZXQgd2Vi
ZnJhbWUtPm1GcmFtZSB0byBudWxsLAorICAgIC8vIGl0IGlzIG5lY2Vzc2FyeSB0byBjaGVjayB0
aGUgdmFsdWUgYWZ0ZXIgY2FsbGluZyBpbml0KCkgYW5kCisgICAgLy8gcmV0dXJuIHdpdGhvdXQg
bG9hZGluZyBVUkwuCisgICAgLy8gKGI6NzkxNjEyKQorICAgIGNoaWxkRnJhbWUtPmluaXQoKTsg
ICAgICAvLyBjcmVhdGUgYW4gZW1wdHkgZG9jdW1lbnQKKyAgICBpZiAoIWNoaWxkRnJhbWUtPnRy
ZWUoKS0+cGFyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgbV9mcmFtZS0+bG9hZGVy
KCktPmxvYWRVUkxJbnRvQ2hpbGRGcmFtZSgKKyAgICAgICAgcmVxdWVzdC5yZXNvdXJjZVJlcXVl
c3QoKS51cmwoKSwKKyAgICAgICAgcmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5odHRwUmVmZXJy
ZXIoKSwKKyAgICAgICAgY2hpbGRGcmFtZS5nZXQoKSk7CisKKyAgICAvLyBBIHN5bmNocm9ub3Vz
IG5hdmlnYXRpb24gKGFib3V0OmJsYW5rKSB3b3VsZCBoYXZlIGFscmVhZHkgcHJvY2Vzc2VkCisg
ICAgLy8gb25sb2FkLCBzbyBpdCBpcyBwb3NzaWJsZSBmb3IgdGhlIGZyYW1lIHRvIGhhdmUgYWxy
ZWFkeSBiZWVuIGRlc3Ryb3llZCBieQorICAgIC8vIHNjcmlwdCBpbiB0aGUgcGFnZS4KKyAgICBp
ZiAoIWNoaWxkRnJhbWUtPnRyZWUoKS0+cGFyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgcmV0dXJuIGNoaWxkRnJhbWUucmVsZWFzZSgpOworfQorCit2b2lkIFdlYkZyYW1lSW1wbDo6
bGF5b3V0KCkKK3sKKyAgICAvLyBsYXlvdXQgdGhpcyBmcmFtZQorICAgIEZyYW1lVmlldyogdmll
dyA9IG1fZnJhbWUtPnZpZXcoKTsKKyAgICBpZiAodmlldykKKyAgICAgICAgdmlldy0+bGF5b3V0
SWZOZWVkZWRSZWN1cnNpdmUoKTsKK30KKwordm9pZCBXZWJGcmFtZUltcGw6OnBhaW50KFdlYkNh
bnZhcyogY2FudmFzLCBjb25zdCBXZWJSZWN0JiByZWN0KQoreworICAgIGlmIChyZWN0LmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIEludFJlY3QgZGlydHlSZWN0KHJlY3QpOworI2lm
IFdFQktJVF9VU0lOR19DRworICAgIEdyYXBoaWNzQ29udGV4dCBnYyhjYW52YXMpOworICAgIExv
Y2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQoJmdjKTsKKyNlbGlmIFdFQktJ
VF9VU0lOR19TS0lBCisgICAgUGxhdGZvcm1Db250ZXh0U2tpYSBjb250ZXh0KGNhbnZhcyk7CisK
KyAgICAvLyBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCBpcyBhY3R1YWxseSBhIHBvaW50ZXIgdG8g
UGxhdGZvcm1Db250ZXh0U2tpYQorICAgIEdyYXBoaWNzQ29udGV4dCBnYyhyZWludGVycHJldF9j
YXN0PFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Kj4oJmNvbnRleHQpKTsKKyNlbHNlCisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyNlbmRpZgorICAgIGdjLnNhdmUoKTsKKyAgICBpZiAobV9mcmFtZS0+
ZG9jdW1lbnQoKSAmJiBmcmFtZVZpZXcoKSkgeworICAgICAgICBnYy5jbGlwKGRpcnR5UmVjdCk7
CisgICAgICAgIGZyYW1lVmlldygpLT5wYWludCgmZ2MsIGRpcnR5UmVjdCk7CisgICAgICAgIG1f
ZnJhbWUtPnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5kcmF3Tm9kZUhpZ2hsaWdodChn
Yyk7CisgICAgfSBlbHNlCisgICAgICAgIGdjLmZpbGxSZWN0KGRpcnR5UmVjdCwgQ29sb3I6Ondo
aXRlKTsKKyAgICBnYy5yZXN0b3JlKCk7Cit9CisKK3ZvaWQgV2ViRnJhbWVJbXBsOjpjcmVhdGVG
cmFtZVZpZXcoKQoreworICAgIEFTU0VSVChtX2ZyYW1lKTsgLy8gSWYgbV9mcmFtZSBkb2Vzbid0
IGV4aXN0LCB3ZSBwcm9iYWJseSBkaWRuJ3QgaW5pdCBwcm9wZXJseS4KKworICAgIFBhZ2UqIHBh
Z2UgPSBtX2ZyYW1lLT5wYWdlKCk7CisgICAgQVNTRVJUKHBhZ2UpOworICAgIEFTU0VSVChwYWdl
LT5tYWluRnJhbWUoKSk7CisKKyAgICBib29sIGlzTWFpbkZyYW1lID0gbV9mcmFtZSA9PSBwYWdl
LT5tYWluRnJhbWUoKTsKKyAgICBpZiAoaXNNYWluRnJhbWUgJiYgbV9mcmFtZS0+dmlldygpKQor
ICAgICAgICBtX2ZyYW1lLT52aWV3KCktPnNldFBhcmVudFZpc2libGUoZmFsc2UpOworCisgICAg
bV9mcmFtZS0+c2V0VmlldygwKTsKKworICAgIFdlYlZpZXdJbXBsKiB3ZWJWaWV3ID0gdmlld0lt
cGwoKTsKKworICAgIFJlZlB0cjxGcmFtZVZpZXc+IHZpZXc7CisgICAgaWYgKGlzTWFpbkZyYW1l
KQorICAgICAgICB2aWV3ID0gRnJhbWVWaWV3OjpjcmVhdGUobV9mcmFtZSwgd2ViVmlldy0+c2l6
ZSgpKTsKKyAgICBlbHNlCisgICAgICAgIHZpZXcgPSBGcmFtZVZpZXc6OmNyZWF0ZShtX2ZyYW1l
KTsKKworICAgIG1fZnJhbWUtPnNldFZpZXcodmlldyk7CisKKyAgICBpZiAod2ViVmlldy0+aXNU
cmFuc3BhcmVudCgpKQorICAgICAgICB2aWV3LT5zZXRUcmFuc3BhcmVudCh0cnVlKTsKKworICAg
IC8vIEZJWE1FOiBUaGUgTWFjIGNvZGUgaGFzIGEgY29tbWVudCBhYm91dCB0aGlzIHBvc3NpYmx5
IGJlaW5nIHVubmVjZXNzYXJ5LgorICAgIC8vIFNlZSBpbnN0YWxsSW5GcmFtZSBpbiBXZWJDb3Jl
RnJhbWVCcmlkZ2UubW0KKyAgICBpZiAobV9mcmFtZS0+b3duZXJSZW5kZXJlcigpKQorICAgICAg
ICBtX2ZyYW1lLT5vd25lclJlbmRlcmVyKCktPnNldFdpZGdldCh2aWV3LmdldCgpKTsKKworICAg
IGlmIChIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyID0gbV9mcmFtZS0+b3duZXJFbGVtZW50
KCkpCisgICAgICAgIHZpZXctPnNldENhbkhhdmVTY3JvbGxiYXJzKG93bmVyLT5zY3JvbGxpbmdN
b2RlKCkgIT0gU2Nyb2xsYmFyQWx3YXlzT2ZmKTsKKworICAgIGlmIChpc01haW5GcmFtZSkKKyAg
ICAgICAgdmlldy0+c2V0UGFyZW50VmlzaWJsZSh0cnVlKTsKK30KKworV2ViRnJhbWVJbXBsKiBX
ZWJGcmFtZUltcGw6OmZyb21GcmFtZShGcmFtZSogZnJhbWUpCit7CisgICAgaWYgKCFmcmFtZSkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnJhbWVMb2FkZXJD
bGllbnRJbXBsKj4oZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKSktPndlYkZyYW1lKCk7Cit9CisK
K1dlYlZpZXdJbXBsKiBXZWJGcmFtZUltcGw6OnZpZXdJbXBsKCkgY29uc3QKK3sKKyAgICBpZiAo
IW1fZnJhbWUpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIFdlYlZpZXdJbXBsOjpm
cm9tUGFnZShtX2ZyYW1lLT5wYWdlKCkpOworfQorCitXZWJEYXRhU291cmNlSW1wbCogV2ViRnJh
bWVJbXBsOjpkYXRhU291cmNlSW1wbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFdlYkRhdGFTb3VyY2VJbXBsKj4oZGF0YVNvdXJjZSgpKTsKK30KKworV2ViRGF0YVNvdXJjZUlt
cGwqIFdlYkZyYW1lSW1wbDo6cHJvdmlzaW9uYWxEYXRhU291cmNlSW1wbCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkRhdGFTb3VyY2VJbXBsKj4ocHJvdmlzaW9uYWxEYXRh
U291cmNlKCkpOworfQorCit2b2lkIFdlYkZyYW1lSW1wbDo6c2V0RmluZEVuZHN0YXRlRm9jdXNB
bmRTZWxlY3Rpb24oKQoreworICAgIFdlYkZyYW1lSW1wbCogbWFpbkZyYW1lSW1wbCA9IHZpZXdJ
bXBsKCktPm1haW5GcmFtZUltcGwoKTsKKworICAgIGlmICh0aGlzID09IG1haW5GcmFtZUltcGwt
PmFjdGl2ZU1hdGNoRnJhbWUoKSAmJiBtX2FjdGl2ZU1hdGNoLmdldCgpKSB7CisgICAgICAgIC8v
IElmIHRoZSB1c2VyIGhhcyBzZXQgdGhlIHNlbGVjdGlvbiBzaW5jZSB0aGUgbWF0Y2ggd2FzIGZv
dW5kLCB3ZQorICAgICAgICAvLyBkb24ndCBmb2N1cyBhbnl0aGluZy4KKyAgICAgICAgVmlzaWJs
ZVNlbGVjdGlvbiBzZWxlY3Rpb24oZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpKTsK
KyAgICAgICAgaWYgKCFzZWxlY3Rpb24uaXNOb25lKCkpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgLy8gVHJ5IHRvIGZpbmQgdGhlIGZpcnN0IGZvY3VzYWJsZSBub2RlIHVwIHRoZSBj
aGFpbiwgd2hpY2ggd2lsbCwgZm9yCisgICAgICAgIC8vIGV4YW1wbGUsIGZvY3VzIGxpbmtzIGlm
IHdlIGhhdmUgZm91bmQgdGV4dCB3aXRoaW4gdGhlIGxpbmsuCisgICAgICAgIE5vZGUqIG5vZGUg
PSBtX2FjdGl2ZU1hdGNoLT5maXJzdE5vZGUoKTsKKyAgICAgICAgd2hpbGUgKG5vZGUgJiYgIW5v
ZGUtPmlzRm9jdXNhYmxlKCkgJiYgbm9kZSAhPSBmcmFtZSgpLT5kb2N1bWVudCgpKQorICAgICAg
ICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudCgpOworCisgICAgICAgIGlmIChub2RlICYmIG5vZGUg
IT0gZnJhbWUoKS0+ZG9jdW1lbnQoKSkgeworICAgICAgICAgICAgLy8gRm91bmQgYSBmb2N1c2Fi
bGUgcGFyZW50IG5vZGUuIFNldCBmb2N1cyB0byBpdC4KKyAgICAgICAgICAgIGZyYW1lKCktPmRv
Y3VtZW50KCktPnNldEZvY3VzZWROb2RlKG5vZGUpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgLy8gSXRlcmF0ZSBvdmVyIGFsbCB0aGUgbm9kZXMgaW4gdGhlIHJhbmdlIHVudGlsIHdl
IGZpbmQgYSBmb2N1c2FibGUgbm9kZS4KKyAgICAgICAgICAgIC8vIFRoaXMsIGZvciBleGFtcGxl
LCBzZXRzIGZvY3VzIHRvIHRoZSBmaXJzdCBsaW5rIGlmIHlvdSBzZWFyY2ggZm9yCisgICAgICAg
ICAgICAvLyB0ZXh0IGFuZCB0ZXh0IHRoYXQgaXMgd2l0aGluIG9uZSBvciBtb3JlIGxpbmtzLgor
ICAgICAgICAgICAgbm9kZSA9IG1fYWN0aXZlTWF0Y2gtPmZpcnN0Tm9kZSgpOworICAgICAgICAg
ICAgd2hpbGUgKG5vZGUgJiYgbm9kZSAhPSBtX2FjdGl2ZU1hdGNoLT5wYXN0TGFzdE5vZGUoKSkg
eworICAgICAgICAgICAgICAgIGlmIChub2RlLT5pc0ZvY3VzYWJsZSgpKSB7CisgICAgICAgICAg
ICAgICAgICAgIGZyYW1lKCktPmRvY3VtZW50KCktPnNldEZvY3VzZWROb2RlKG5vZGUpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KK30KKwordm9pZCBXZWJGcmFtZUltcGw6OmRpZEZhaWwoY29uc3QgUmVzb3Vy
Y2VFcnJvciYgZXJyb3IsIGJvb2wgd2FzUHJvdmlzaW9uYWwpCit7CisgICAgaWYgKCFjbGllbnQo
KSkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYlVSTEVycm9yIHdlYkVycm9yID0gZXJyb3I7Cisg
ICAgaWYgKHdhc1Byb3Zpc2lvbmFsKQorICAgICAgICBjbGllbnQoKS0+ZGlkRmFpbFByb3Zpc2lv
bmFsTG9hZCh0aGlzLCB3ZWJFcnJvcik7CisgICAgZWxzZQorICAgICAgICBjbGllbnQoKS0+ZGlk
RmFpbExvYWQodGhpcywgd2ViRXJyb3IpOworfQorCit2b2lkIFdlYkZyYW1lSW1wbDo6c2V0QWxs
b3dzU2Nyb2xsaW5nKGJvb2wgZmxhZykKK3sKKyAgICBtX2ZyYW1lLT52aWV3KCktPnNldENhbkhh
dmVTY3JvbGxiYXJzKGZsYWcpOworfQorCit2b2lkIFdlYkZyYW1lSW1wbDo6cmVnaXN0ZXJQYXNz
d29yZExpc3RlbmVyKAorICAgIFdlYklucHV0RWxlbWVudCBpbnB1dEVsZW1lbnQsCisgICAgV2Vi
UGFzc3dvcmRBdXRvY29tcGxldGVMaXN0ZW5lciogbGlzdGVuZXIpCit7CisgICAgUmVmUHRyPEhU
TUxJbnB1dEVsZW1lbnQ+IGVsZW1lbnQgPSBpbnB1dEVsZW1lbnQub3BlcmF0b3IgUGFzc1JlZlB0
cjxIVE1MSW5wdXRFbGVtZW50PigpOworICAgIEFTU0VSVChtX3Bhc3N3b3JkTGlzdGVuZXJzLmZp
bmQoZWxlbWVudCkgPT0gbV9wYXNzd29yZExpc3RlbmVycy5lbmQoKSk7CisgICAgbV9wYXNzd29y
ZExpc3RlbmVycy5zZXQoZWxlbWVudCwgbGlzdGVuZXIpOworfQorCitXZWJQYXNzd29yZEF1dG9j
b21wbGV0ZUxpc3RlbmVyKiBXZWJGcmFtZUltcGw6OmdldFBhc3N3b3JkTGlzdGVuZXIoCisgICAg
SFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50KQoreworICAgIHJldHVybiBtX3Bhc3N3b3Jk
TGlzdGVuZXJzLmdldChSZWZQdHI8SFRNTElucHV0RWxlbWVudD4oaW5wdXRFbGVtZW50KSk7Cit9
CisKKy8vIFdlYkZyYW1lSW1wbCBwcml2YXRlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3ZvaWQgV2ViRnJhbWVJbXBsOjpjbG9zaW5n
KCkKK3sKKyAgICBtX2ZyYW1lID0gMDsKK30KKwordm9pZCBXZWJGcmFtZUltcGw6OmludmFsaWRh
dGVBcmVhKEFyZWFUb0ludmFsaWRhdGUgYXJlYSkKK3sKKyAgICBBU1NFUlQoZnJhbWUoKSAmJiBm
cmFtZSgpLT52aWV3KCkpOworICAgIEZyYW1lVmlldyogdmlldyA9IGZyYW1lKCktPnZpZXcoKTsK
KworICAgIGlmICgoYXJlYSAmIEludmFsaWRhdGVBbGwpID09IEludmFsaWRhdGVBbGwpCisgICAg
ICAgIHZpZXctPmludmFsaWRhdGVSZWN0KHZpZXctPmZyYW1lUmVjdCgpKTsKKyAgICBlbHNlIHsK
KyAgICAgICAgaWYgKChhcmVhICYgSW52YWxpZGF0ZUNvbnRlbnRBcmVhKSA9PSBJbnZhbGlkYXRl
Q29udGVudEFyZWEpIHsKKyAgICAgICAgICAgIEludFJlY3QgY29udGVudEFyZWEoCisgICAgICAg
ICAgICAgICAgdmlldy0+eCgpLCB2aWV3LT55KCksIHZpZXctPnZpc2libGVXaWR0aCgpLCB2aWV3
LT52aXNpYmxlSGVpZ2h0KCkpOworICAgICAgICAgICAgdmlldy0+aW52YWxpZGF0ZVJlY3QoY29u
dGVudEFyZWEpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKChhcmVhICYgSW52YWxpZGF0ZVNj
cm9sbGJhcikgPT0gSW52YWxpZGF0ZVNjcm9sbGJhcikgeworICAgICAgICAgICAgLy8gSW52YWxp
ZGF0ZSB0aGUgdmVydGljYWwgc2Nyb2xsIGJhciByZWdpb24gZm9yIHRoZSB2aWV3LgorICAgICAg
ICAgICAgSW50UmVjdCBzY3JvbGxCYXJWZXJ0KAorICAgICAgICAgICAgICAgIHZpZXctPngoKSAr
IHZpZXctPnZpc2libGVXaWR0aCgpLCB2aWV3LT55KCksCisgICAgICAgICAgICAgICAgU2Nyb2xs
YmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCktPnNjcm9sbGJhclRoaWNrbmVzcygpLAorICAgICAgICAg
ICAgICAgIHZpZXctPnZpc2libGVIZWlnaHQoKSk7CisgICAgICAgICAgICB2aWV3LT5pbnZhbGlk
YXRlUmVjdChzY3JvbGxCYXJWZXJ0KTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBXZWJG
cmFtZUltcGw6OmFkZE1hcmtlcihSYW5nZSogcmFuZ2UsIGJvb2wgYWN0aXZlTWF0Y2gpCit7Cisg
ICAgLy8gVXNlIGEgVGV4dEl0ZXJhdG9yIHRvIHZpc2l0IHRoZSBwb3RlbnRpYWxseSBtdWx0aXBs
ZSBub2RlcyB0aGUgcmFuZ2UKKyAgICAvLyBjb3ZlcnMuCisgICAgVGV4dEl0ZXJhdG9yIG1hcmtl
ZFRleHQocmFuZ2UpOworICAgIGZvciAoOyAhbWFya2VkVGV4dC5hdEVuZCgpOyBtYXJrZWRUZXh0
LmFkdmFuY2UoKSkgeworICAgICAgICBSZWZQdHI8UmFuZ2U+IHRleHRQaWVjZSA9IG1hcmtlZFRl
eHQucmFuZ2UoKTsKKyAgICAgICAgaW50IGV4Y2VwdGlvbiA9IDA7CisKKyAgICAgICAgRG9jdW1l
bnRNYXJrZXIgbWFya2VyID0geworICAgICAgICAgICAgRG9jdW1lbnRNYXJrZXI6OlRleHRNYXRj
aCwKKyAgICAgICAgICAgIHRleHRQaWVjZS0+c3RhcnRPZmZzZXQoZXhjZXB0aW9uKSwKKyAgICAg
ICAgICAgIHRleHRQaWVjZS0+ZW5kT2Zmc2V0KGV4Y2VwdGlvbiksCisgICAgICAgICAgICAiIiwK
KyAgICAgICAgICAgIGFjdGl2ZU1hdGNoCisgICAgICAgIH07CisKKyAgICAgICAgaWYgKG1hcmtl
ci5lbmRPZmZzZXQgPiBtYXJrZXIuc3RhcnRPZmZzZXQpIHsKKyAgICAgICAgICAgIC8vIEZpbmQg
dGhlIG5vZGUgdG8gYWRkIGEgbWFya2VyIHRvIGFuZCBhZGQgaXQuCisgICAgICAgICAgICBOb2Rl
KiBub2RlID0gdGV4dFBpZWNlLT5zdGFydENvbnRhaW5lcihleGNlcHRpb24pOworICAgICAgICAg
ICAgZnJhbWUoKS0+ZG9jdW1lbnQoKS0+YWRkTWFya2VyKG5vZGUsIG1hcmtlcik7CisKKyAgICAg
ICAgICAgIC8vIFJlbmRlcmVkIHJlY3RzIGZvciBtYXJrZXJzIGluIFdlYktpdCBhcmUgbm90IHBv
cHVsYXRlZCB1bnRpbCBlYWNoIHRpbWUKKyAgICAgICAgICAgIC8vIHRoZSBtYXJrZXJzIGFyZSBw
YWludGVkLiBIb3dldmVyLCB3ZSBuZWVkIGl0IHRvIGhhcHBlbiBzb29uZXIsIGJlY2F1c2UKKyAg
ICAgICAgICAgIC8vIHRoZSB3aG9sZSBwdXJwb3NlIG9mIHRpY2ttYXJrcyBvbiB0aGUgc2Nyb2xs
YmFyIGlzIHRvIHNob3cgd2hlcmUKKyAgICAgICAgICAgIC8vIG1hdGNoZXMgb2ZmLXNjcmVlbiBh
cmUgKHRoYXQgaGF2ZW4ndCBiZWVuIHBhaW50ZWQgeWV0KS4KKyAgICAgICAgICAgIFZlY3RvcjxE
b2N1bWVudE1hcmtlcj4gbWFya2VycyA9IGZyYW1lKCktPmRvY3VtZW50KCktPm1hcmtlcnNGb3JO
b2RlKG5vZGUpOworICAgICAgICAgICAgZnJhbWUoKS0+ZG9jdW1lbnQoKS0+c2V0UmVuZGVyZWRS
ZWN0Rm9yTWFya2VyKAorICAgICAgICAgICAgICAgIHRleHRQaWVjZS0+c3RhcnRDb250YWluZXIo
ZXhjZXB0aW9uKSwKKyAgICAgICAgICAgICAgICBtYXJrZXJzW21hcmtlcnMuc2l6ZSgpIC0gMV0s
CisgICAgICAgICAgICAgICAgcmFuZ2UtPmJvdW5kaW5nQm94KCkpOworICAgICAgICB9CisgICAg
fQorfQorCit2b2lkIFdlYkZyYW1lSW1wbDo6c2V0TWFya2VyQWN0aXZlKFJhbmdlKiByYW5nZSwg
Ym9vbCBhY3RpdmUpCit7CisgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
ZnJhbWUoKS0+ZG9jdW1lbnQoKS0+c2V0TWFya2Vyc0FjdGl2ZShyYW5nZSwgYWN0aXZlKTsKK30K
KworaW50IFdlYkZyYW1lSW1wbDo6b3JkaW5hbE9mRmlyc3RNYXRjaEZvckZyYW1lKFdlYkZyYW1l
SW1wbCogZnJhbWUpIGNvbnN0Cit7CisgICAgaW50IG9yZGluYWwgPSAwOworICAgIFdlYkZyYW1l
SW1wbCogbWFpbkZyYW1lSW1wbCA9IHZpZXdJbXBsKCktPm1haW5GcmFtZUltcGwoKTsKKyAgICAv
LyBJdGVyYXRlIGZyb20gdGhlIG1haW4gZnJhbWUgdXAgdG8gKGJ1dCBub3QgaW5jbHVkaW5nKSB8
ZnJhbWV8IGFuZAorICAgIC8vIGFkZCB1cCB0aGUgbnVtYmVyIG9mIG1hdGNoZXMgZm91bmQgc28g
ZmFyLgorICAgIGZvciAoV2ViRnJhbWVJbXBsKiBpdCA9IG1haW5GcmFtZUltcGw7CisgICAgICAg
ICBpdCAhPSBmcmFtZTsKKyAgICAgICAgIGl0ID0gc3RhdGljX2Nhc3Q8V2ViRnJhbWVJbXBsKj4o
aXQtPnRyYXZlcnNlTmV4dCh0cnVlKSkpIHsKKyAgICAgICAgaWYgKGl0LT5tX2xhc3RNYXRjaENv
dW50ID4gMCkKKyAgICAgICAgICAgIG9yZGluYWwgKz0gaXQtPm1fbGFzdE1hdGNoQ291bnQ7Cisg
ICAgfQorICAgIHJldHVybiBvcmRpbmFsOworfQorCitib29sIFdlYkZyYW1lSW1wbDo6c2hvdWxk
U2NvcGVNYXRjaGVzKGNvbnN0IFN0cmluZyYgc2VhcmNoVGV4dCkKK3sKKyAgICAvLyBEb24ndCBz
Y29wZSBpZiB3ZSBjYW4ndCBmaW5kIGEgZnJhbWUgb3IgaWYgdGhlIGZyYW1lIGlzIG5vdCB2aXNp
YmxlLgorICAgIC8vIFRoZSB1c2VyIG1heSBoYXZlIGNsb3NlZCB0aGUgdGFiL2FwcGxpY2F0aW9u
LCBzbyBhYm9ydC4KKyAgICBpZiAoIWZyYW1lKCkgfHwgIWhhc1Zpc2libGVDb250ZW50KCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEFTU0VSVChmcmFtZSgpLT5kb2N1bWVudCgpICYm
IGZyYW1lKCktPnZpZXcoKSk7CisKKyAgICAvLyBJZiB0aGUgZnJhbWUgY29tcGxldGVkIHRoZSBz
Y29waW5nIG9wZXJhdGlvbiBhbmQgZm91bmQgMCBtYXRjaGVzIHRoZSBsYXN0CisgICAgLy8gdGlt
ZSBpdCB3YXMgc2VhcmNoZWQsIHRoZW4gd2UgZG9uJ3QgaGF2ZSB0byBzZWFyY2ggaXQgYWdhaW4g
aWYgdGhlIHVzZXIgaXMKKyAgICAvLyBqdXN0IGFkZGluZyB0byB0aGUgc2VhcmNoIHN0cmluZyBv
ciBzZW5kaW5nIHRoZSBzYW1lIHNlYXJjaCBzdHJpbmcgYWdhaW4uCisgICAgaWYgKG1fc2NvcGlu
Z0NvbXBsZXRlICYmICFtX2xhc3RTZWFyY2hTdHJpbmcuaXNFbXB0eSgpICYmICFtX2xhc3RNYXRj
aENvdW50KSB7CisgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgc2VhcmNoIHN0cmluZyBw
cmVmaXhlcyBtYXRjaC4KKyAgICAgICAgU3RyaW5nIHByZXZpb3VzU2VhcmNoUHJlZml4ID0KKyAg
ICAgICAgICAgIHNlYXJjaFRleHQuc3Vic3RyaW5nKDAsIG1fbGFzdFNlYXJjaFN0cmluZy5sZW5n
dGgoKSk7CisKKyAgICAgICAgaWYgKHByZXZpb3VzU2VhcmNoUHJlZml4ID09IG1fbGFzdFNlYXJj
aFN0cmluZykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgIC8vIERvbid0IHNlYXJjaCB0aGlz
IGZyYW1lLCBpdCB3aWxsIGJlIGZydWl0bGVzcy4KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwordm9pZCBXZWJGcmFtZUltcGw6OnNjb3BlU3RyaW5nTWF0Y2hlc1Nvb24oaW50IGlkZW50
aWZpZXIsIGNvbnN0IFdlYlN0cmluZyYgc2VhcmNoVGV4dCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYkZpbmRPcHRpb25zJiBvcHRpb25zLCBib29s
IHJlc2V0KQoreworICAgIG1fZGVmZXJyZWRTY29waW5nV29yay5hcHBlbmQobmV3IERlZmVycmVk
U2NvcGVTdHJpbmdNYXRjaGVzKAorICAgICAgICB0aGlzLCBpZGVudGlmaWVyLCBzZWFyY2hUZXh0
LCBvcHRpb25zLCByZXNldCkpOworfQorCit2b2lkIFdlYkZyYW1lSW1wbDo6Y2FsbFNjb3BlU3Ry
aW5nTWF0Y2hlcyhEZWZlcnJlZFNjb3BlU3RyaW5nTWF0Y2hlcyogY2FsbGVyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlkZW50aWZpZXIsIGNvbnN0IFdl
YlN0cmluZyYgc2VhcmNoVGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFdlYkZpbmRPcHRpb25zJiBvcHRpb25zLCBib29sIHJlc2V0KQoreworICAg
IG1fZGVmZXJyZWRTY29waW5nV29yay5yZW1vdmUobV9kZWZlcnJlZFNjb3BpbmdXb3JrLmZpbmQo
Y2FsbGVyKSk7CisKKyAgICBzY29wZVN0cmluZ01hdGNoZXMoaWRlbnRpZmllciwgc2VhcmNoVGV4
dCwgb3B0aW9ucywgcmVzZXQpOworCisgICAgLy8gVGhpcyBuZWVkcyB0byBoYXBwZW4gbGFzdCBz
aW5jZSBzZWFyY2hUZXh0IGlzIHBhc3NlZCBieSByZWZlcmVuY2UuCisgICAgZGVsZXRlIGNhbGxl
cjsKK30KKwordm9pZCBXZWJGcmFtZUltcGw6OmludmFsaWRhdGVJZk5lY2Vzc2FyeSgpCit7Cisg
ICAgaWYgKG1fbGFzdE1hdGNoQ291bnQgPiBtX25leHRJbnZhbGlkYXRlQWZ0ZXIpIHsKKyAgICAg
ICAgLy8gRklYTUU6IChodHRwOi8vYi8xMDg4MTY1KSBPcHRpbWl6ZSB0aGUgZHJhd2luZyBvZiB0
aGUgdGlja21hcmtzIGFuZAorICAgICAgICAvLyByZW1vdmUgdGhpcy4gVGhpcyBjYWxjdWxhdGlv
biBzZXRzIGEgbWlsZXN0b25lIGZvciB3aGVuIG5leHQgdG8KKyAgICAgICAgLy8gaW52YWxpZGF0
ZSB0aGUgc2Nyb2xsYmFyIGFuZCB0aGUgY29udGVudCBhcmVhLiBXZSBkbyB0aGlzIHNvIHRoYXQg
d2UKKyAgICAgICAgLy8gZG9uJ3Qgc3BlbmQgdG9vIG11Y2ggdGltZSBkcmF3aW5nIHRoZSBzY3Jv
bGxiYXIgb3ZlciBhbmQgb3ZlciBhZ2Fpbi4KKyAgICAgICAgLy8gQmFzaWNhbGx5LCB1cCB1bnRp
bCB0aGUgZmlyc3QgNTAwIG1hdGNoZXMgdGhlcmUgaXMgbm8gdGhyb3R0bGUuCisgICAgICAgIC8v
IEFmdGVyIHRoZSBmaXJzdCA1MDAgbWF0Y2hlcywgd2Ugc2V0IHNldCB0aGUgbWlsZXN0b25lIGZ1
cnRoZXIgYW5kCisgICAgICAgIC8vIGZ1cnRoZXIgb3V0ICg3NTAsIDExMjUsIDE2ODgsIDJLLCAz
SykuCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgc3RhcnRTbG93aW5nRG93bkFmdGVyID0gNTAw
OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHNsb3dkb3duID0gNzUwOworICAgICAgICBpbnQg
aSA9IChtX2xhc3RNYXRjaENvdW50IC8gc3RhcnRTbG93aW5nRG93bkFmdGVyKTsKKyAgICAgICAg
bV9uZXh0SW52YWxpZGF0ZUFmdGVyICs9IGkgKiBzbG93ZG93bjsKKworICAgICAgICBpbnZhbGlk
YXRlQXJlYShJbnZhbGlkYXRlU2Nyb2xsYmFyKTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViRnJhbWVJ
bXBsOjpjbGVhclBhc3N3b3JkTGlzdGVuZXJzKCkKK3sKKyAgICBkZWxldGVBbGxWYWx1ZXMobV9w
YXNzd29yZExpc3RlbmVycyk7CisgICAgbV9wYXNzd29yZExpc3RlbmVycy5jbGVhcigpOworfQor
Cit2b2lkIFdlYkZyYW1lSW1wbDo6bG9hZEphdmFTY3JpcHRVUkwoY29uc3QgS1VSTCYgdXJsKQor
eworICAgIC8vIFRoaXMgaXMgY29waWVkIGZyb20gRnJhbWVMb2FkZXI6OmV4ZWN1dGVJZkphdmFT
Y3JpcHRVUkwuICBVbmZvcnR1bmF0ZWx5LAorICAgIC8vIHdlIGNhbm5vdCBqdXN0IHVzZSB0aGF0
IG1ldGhvZCBzaW5jZSBpdCBpcyBwcml2YXRlLCBhbmQgaXQgYWxzbyBkb2Vzbid0CisgICAgLy8g
cXVpdGUgYmVoYXZlIGFzIHdlIHJlcXVpcmUgaXQgdG8gZm9yIGJvb2ttYXJrbGV0cy4gIFRoZSBr
ZXkgZGlmZmVyZW5jZSBpcworICAgIC8vIHRoYXQgd2UgbmVlZCB0byBzdXBwcmVzcyBsb2FkaW5n
IHRoZSBzdHJpbmcgcmVzdWx0IGZyb20gZXZhbHVhdGluZyB0aGUgSlMKKyAgICAvLyBVUkwgaWYg
ZXhlY3V0aW5nIHRoZSBKUyBVUkwgcmVzdWx0ZWQgaW4gYSBsb2NhdGlvbiBjaGFuZ2UuICBXZSBh
bHNvIGFsbG93CisgICAgLy8gYSBKUyBVUkwgdG8gYmUgbG9hZGVkIGV2ZW4gaWYgc2NyaXB0cyBv
biB0aGUgcGFnZSBhcmUgb3RoZXJ3aXNlIGRpc2FibGVkLgorCisgICAgaWYgKCFtX2ZyYW1lLT5k
b2N1bWVudCgpIHx8ICFtX2ZyYW1lLT5wYWdlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFN0
cmluZyBzY3JpcHQgPSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXModXJsLnN0cmluZygpLnN1YnN0
cmluZyhzdHJsZW4oImphdmFzY3JpcHQ6IikpKTsKKyAgICBTY3JpcHRWYWx1ZSByZXN1bHQgPSBt
X2ZyYW1lLT5zY3JpcHQoKS0+ZXhlY3V0ZVNjcmlwdChzY3JpcHQsIHRydWUpOworCisgICAgU3Ry
aW5nIHNjcmlwdFJlc3VsdDsKKyAgICBpZiAoIXJlc3VsdC5nZXRTdHJpbmcoc2NyaXB0UmVzdWx0
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2lu
ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKTsKKworICAgIGlmICghbV9m
cmFtZS0+cmVkaXJlY3RTY2hlZHVsZXIoKS0+bG9jYXRpb25DaGFuZ2VQZW5kaW5nKCkpIHsKKyAg
ICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPnN0b3BBbGxMb2FkZXJzKCk7CisgICAgICAgIG1fZnJh
bWUtPmxvYWRlcigpLT5iZWdpbihtX2ZyYW1lLT5sb2FkZXIoKS0+dXJsKCksIHRydWUsIHNlY3Vy
aXR5T3JpZ2luKTsKKyAgICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPndyaXRlKHNjcmlwdFJlc3Vs
dCk7CisgICAgICAgIG1fZnJhbWUtPmxvYWRlcigpLT5lbmQoKTsKKyAgICB9Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFt
ZUltcGwuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMwN2VlOAotLS0gL2Rldi9udWxsCisrKyBiL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmgKQEAgLTAsMCArMSwzNzAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdl
YkZyYW1lSW1wbF9oCisjZGVmaW5lIFdlYkZyYW1lSW1wbF9oCisKKy8vIEZJWE1FOiByZW1vdmUg
dGhpcyByZWxhdGl2ZSBwYXRoIG9uY2UgY29uc3VtZXJzIGZyb20gZ2x1ZSBhcmUgcmVtb3ZlZC4K
KyNpbmNsdWRlICIuLi9wdWJsaWMvV2ViRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2lu
Y2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50SW1wbC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5n
LmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEhpc3RvcnlJdGVtOworY2xhc3MgS1VSTDsK
K2NsYXNzIE5vZGU7CitjbGFzcyBSYW5nZTsKK2NsYXNzIFN1YnN0aXR1dGVEYXRhOworc3RydWN0
IFdpbmRvd0ZlYXR1cmVzOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIENocm9tZVBy
aW50Q29udGV4dDsKK2NsYXNzIFdlYkRhdGFTb3VyY2VJbXBsOworY2xhc3MgV2ViSW5wdXRFbGVt
ZW50OworY2xhc3MgV2ViRnJhbWVDbGllbnQ7CitjbGFzcyBXZWJQYXNzd29yZEF1dG9jb21wbGV0
ZUxpc3RlbmVyOworY2xhc3MgV2ViVmlldzsKK2NsYXNzIFdlYlZpZXdJbXBsOworCisvLyBJbXBs
ZW1lbnRhdGlvbiBvZiBXZWJGcmFtZSwgbm90ZSB0aGF0IHRoaXMgaXMgYSByZWZlcmVuY2UgY291
bnRlZCBvYmplY3QuCitjbGFzcyBXZWJGcmFtZUltcGwgOiBwdWJsaWMgV2ViRnJhbWUsIHB1Ymxp
YyBSZWZDb3VudGVkPFdlYkZyYW1lSW1wbD4geworcHVibGljOgorICAgIC8vIFdlYkZyYW1lIG1l
dGhvZHM6CisgICAgdmlydHVhbCBXZWJTdHJpbmcgbmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwg
V2ViVVJMIHVybCgpIGNvbnN0OworICAgIHZpcnR1YWwgV2ViVVJMIGZhdkljb25VUkwoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIFdlYlVSTCBvcGVuU2VhcmNoRGVzY3JpcHRpb25VUkwoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIFdlYlNpemUgc2Nyb2xsT2Zmc2V0KCkgY29uc3Q7CisgICAgdmlydHVhbCBX
ZWJTaXplIGNvbnRlbnRzU2l6ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGNvbnRlbnRzUHJl
ZmVycmVkV2lkdGgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaGFzVmlzaWJsZUNvbnRlbnQo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIFdlYlZpZXcqIHZpZXcoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IFdlYkZyYW1lKiBvcGVuZXIoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFdlYkZyYW1lKiBwYXJlbnQo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIFdlYkZyYW1lKiB0b3AoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IFdlYkZyYW1lKiBmaXJzdENoaWxkKCkgY29uc3Q7CisgICAgdmlydHVhbCBXZWJGcmFtZSogbGFz
dENoaWxkKCkgY29uc3Q7CisgICAgdmlydHVhbCBXZWJGcmFtZSogbmV4dFNpYmxpbmcoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIFdlYkZyYW1lKiBwcmV2aW91c1NpYmxpbmcoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIFdlYkZyYW1lKiB0cmF2ZXJzZU5leHQoYm9vbCB3cmFwKSBjb25zdDsKKyAgICB2aXJ0
dWFsIFdlYkZyYW1lKiB0cmF2ZXJzZVByZXZpb3VzKGJvb2wgd3JhcCkgY29uc3Q7CisgICAgdmly
dHVhbCBXZWJGcmFtZSogZmluZENoaWxkQnlOYW1lKGNvbnN0IFdlYlN0cmluZyYpIGNvbnN0Owor
ICAgIHZpcnR1YWwgV2ViRnJhbWUqIGZpbmRDaGlsZEJ5RXhwcmVzc2lvbihjb25zdCBXZWJTdHJp
bmcmKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZm9ybXMoV2ViVmVjdG9yPFdlYkZvcm1FbGVt
ZW50PiYpIGNvbnN0OworICAgIHZpcnR1YWwgV2ViU2VjdXJpdHlPcmlnaW4gc2VjdXJpdHlPcmln
aW4oKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZ3JhbnRVbml2ZXJzYWxBY2Nlc3MoKTsKKyAg
ICB2aXJ0dWFsIE5QT2JqZWN0KiB3aW5kb3dPYmplY3QoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZv
aWQgYmluZFRvV2luZG93T2JqZWN0KGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgTlBPYmplY3QqKTsK
KyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNjcmlwdChjb25zdCBXZWJTY3JpcHRTb3VyY2UmKTsK
KyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNjcmlwdEluTmV3Q29udGV4dCgKKyAgICAgICAgY29u
c3QgV2ViU2NyaXB0U291cmNlKiBzb3VyY2VzLCB1bnNpZ25lZCBudW1Tb3VyY2VzLCBpbnQgZXh0
ZW5zaW9uR3JvdXApOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU2NyaXB0SW5Jc29sYXRlZFdv
cmxkKAorICAgICAgICBpbnQgd29ybGRJZCwgY29uc3QgV2ViU2NyaXB0U291cmNlKiBzb3VyY2Vz
LCB1bnNpZ25lZCBudW1Tb3VyY2VzLAorICAgICAgICBpbnQgZXh0ZW5zaW9uR3JvdXApOworICAg
IHZpcnR1YWwgdm9pZCBhZGRNZXNzYWdlVG9Db25zb2xlKGNvbnN0IFdlYkNvbnNvbGVNZXNzYWdl
Jik7CisgICAgdmlydHVhbCB2b2lkIGNvbGxlY3RHYXJiYWdlKCk7CisjaWYgV0VCS0lUX1VTSU5H
X1Y4CisgICAgdmlydHVhbCB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IG1haW5Xb3JsZFNjcmlwdENv
bnRleHQoKSBjb25zdDsKKyNlbmRpZgorICAgIHZpcnR1YWwgYm9vbCBpbnNlcnRTdHlsZVRleHQo
Y29uc3QgV2ViU3RyaW5nJiBjc3MsIGNvbnN0IFdlYlN0cmluZyYgaWQpOworICAgIHZpcnR1YWwg
dm9pZCByZWxvYWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlcXVlc3QoY29uc3QgV2ViVVJM
UmVxdWVzdCYpOworICAgIHZpcnR1YWwgdm9pZCBsb2FkSGlzdG9yeUl0ZW0oY29uc3QgV2ViSGlz
dG9yeUl0ZW0mKTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZERhdGEoCisgICAgICAgIGNvbnN0IFdl
YkRhdGEmLCBjb25zdCBXZWJTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBXZWJTdHJpbmcmIHRleHRF
bmNvZGluZywKKyAgICAgICAgY29uc3QgV2ViVVJMJiBiYXNlVVJMLCBjb25zdCBXZWJVUkwmIHVu
cmVhY2hhYmxlVVJMLCBib29sIHJlcGxhY2UpOworICAgIHZpcnR1YWwgdm9pZCBsb2FkSFRNTFN0
cmluZygKKyAgICAgICAgY29uc3QgV2ViRGF0YSYgaHRtbCwgY29uc3QgV2ViVVJMJiBiYXNlVVJM
LCBjb25zdCBXZWJVUkwmIHVucmVhY2hhYmxlVVJMLAorICAgICAgICBib29sIHJlcGxhY2UpOwor
ICAgIHZpcnR1YWwgYm9vbCBpc0xvYWRpbmcoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc3Rv
cExvYWRpbmcoKTsKKyAgICB2aXJ0dWFsIFdlYkRhdGFTb3VyY2UqIHByb3Zpc2lvbmFsRGF0YVNv
dXJjZSgpIGNvbnN0OworICAgIHZpcnR1YWwgV2ViRGF0YVNvdXJjZSogZGF0YVNvdXJjZSgpIGNv
bnN0OworICAgIHZpcnR1YWwgV2ViSGlzdG9yeUl0ZW0gcHJldmlvdXNIaXN0b3J5SXRlbSgpIGNv
bnN0OworICAgIHZpcnR1YWwgV2ViSGlzdG9yeUl0ZW0gY3VycmVudEhpc3RvcnlJdGVtKCkgY29u
c3Q7CisgICAgdmlydHVhbCB2b2lkIGVuYWJsZVZpZXdTb3VyY2VNb2RlKGJvb2wgZW5hYmxlKTsK
KyAgICB2aXJ0dWFsIGJvb2wgaXNWaWV3U291cmNlTW9kZUVuYWJsZWQoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0UmVmZXJyZXJGb3JSZXF1ZXN0KFdlYlVSTFJlcXVlc3QmLCBjb25zdCBX
ZWJVUkwmIHJlZmVycmVyKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hXaWxsU2VuZFJlcXVl
c3QoV2ViVVJMUmVxdWVzdCYpOworICAgIHZpcnR1YWwgdm9pZCBjb21taXREb2N1bWVudERhdGEo
Y29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCk7CisgICAgdmlydHVhbCB1bnNpZ25lZCB1
bmxvYWRMaXN0ZW5lckNvdW50KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzUHJvY2Vzc2lu
Z1VzZXJHZXN0dXJlKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHdpbGxTdXBwcmVzc09wZW5l
ckluTmV3RnJhbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVwbGFjZVNlbGVjdGlvbihj
b25zdCBXZWJTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0VGV4dChjb25zdCBXZWJT
dHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TWFya2VkVGV4dChjb25zdCBXZWJTdHJpbmcm
LCB1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICB2aXJ0dWFsIHZvaWQg
dW5tYXJrVGV4dCgpOworICAgIHZpcnR1YWwgYm9vbCBoYXNNYXJrZWRUZXh0KCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBXZWJSYW5nZSBtYXJrZWRSYW5nZSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9v
bCBleGVjdXRlQ29tbWFuZChjb25zdCBXZWJTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIGJvb2wgZXhl
Y3V0ZUNvbW1hbmQoY29uc3QgV2ViU3RyaW5nJiwgY29uc3QgV2ViU3RyaW5nJiB2YWx1ZSk7Cisg
ICAgdmlydHVhbCBib29sIGlzQ29tbWFuZEVuYWJsZWQoY29uc3QgV2ViU3RyaW5nJikgY29uc3Q7
CisgICAgdmlydHVhbCB2b2lkIGVuYWJsZUNvbnRpbnVvdXNTcGVsbENoZWNraW5nKGJvb2wpOwor
ICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpIGNvbnN0
OworICAgIHZpcnR1YWwgYm9vbCBoYXNTZWxlY3Rpb24oKSBjb25zdDsKKyAgICB2aXJ0dWFsIFdl
YlJhbmdlIHNlbGVjdGlvblJhbmdlKCkgY29uc3Q7CisgICAgdmlydHVhbCBXZWJTdHJpbmcgc2Vs
ZWN0aW9uQXNUZXh0KCkgY29uc3Q7CisgICAgdmlydHVhbCBXZWJTdHJpbmcgc2VsZWN0aW9uQXNN
YXJrdXAoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBwcmludEJlZ2luKGNvbnN0IFdlYlNpemUm
IHBhZ2VTaXplKTsKKyAgICB2aXJ0dWFsIGZsb2F0IHByaW50UGFnZShpbnQgcGFnZVRvUHJpbnQs
IFdlYkNhbnZhcyopOworICAgIHZpcnR1YWwgZmxvYXQgZ2V0UHJpbnRQYWdlU2hyaW5rKGludCBw
YWdlKTsKKyAgICB2aXJ0dWFsIHZvaWQgcHJpbnRFbmQoKTsKKyAgICB2aXJ0dWFsIGJvb2wgZmlu
ZCgKKyAgICAgICAgaW50IGlkZW50aWZpZXIsIGNvbnN0IFdlYlN0cmluZyYgc2VhcmNoVGV4dCwg
Y29uc3QgV2ViRmluZE9wdGlvbnMmLAorICAgICAgICBib29sIHdyYXBXaXRoaW5GcmFtZSwgV2Vi
UmVjdCogc2VsZWN0aW9uUmVjdCk7CisgICAgdmlydHVhbCB2b2lkIHN0b3BGaW5kaW5nKGJvb2wg
Y2xlYXJTZWxlY3Rpb24pOworICAgIHZpcnR1YWwgdm9pZCBzY29wZVN0cmluZ01hdGNoZXMoCisg
ICAgICAgIGludCBpZGVudGlmaWVyLCBjb25zdCBXZWJTdHJpbmcmIHNlYXJjaFRleHQsIGNvbnN0
IFdlYkZpbmRPcHRpb25zJiwKKyAgICAgICAgYm9vbCByZXNldCk7CisgICAgdmlydHVhbCB2b2lk
IGNhbmNlbFBlbmRpbmdTY29waW5nRWZmb3J0KCk7CisgICAgdmlydHVhbCB2b2lkIGluY3JlYXNl
TWF0Y2hDb3VudChpbnQgY291bnQsIGludCBpZGVudGlmaWVyKTsKKyAgICB2aXJ0dWFsIHZvaWQg
cmVzZXRNYXRjaENvdW50KCk7CisgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyUGFzc3dvcmRMaXN0
ZW5lcigKKyAgICAgICAgV2ViSW5wdXRFbGVtZW50LCBXZWJQYXNzd29yZEF1dG9jb21wbGV0ZUxp
c3RlbmVyKik7CisKKyAgICB2aXJ0dWFsIFdlYlVSTCBjb21wbGV0ZVVSTChjb25zdCBXZWJTdHJp
bmcmIHVybCkgY29uc3Q7CisgICAgdmlydHVhbCBXZWJTdHJpbmcgY29udGVudEFzVGV4dChzaXpl
X3QgbWF4Q2hhcnMpIGNvbnN0OworICAgIHZpcnR1YWwgV2ViU3RyaW5nIGNvbnRlbnRBc01hcmt1
cCgpIGNvbnN0OworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViRnJhbWVJbXBsPiBjcmVhdGUo
V2ViRnJhbWVDbGllbnQqIGNsaWVudCk7CisgICAgfldlYkZyYW1lSW1wbCgpOworCisgICAgc3Rh
dGljIGludCBsaXZlT2JqZWN0Q291bnQoKSB7IHJldHVybiBtX2xpdmVPYmplY3RDb3VudDsgfQor
CisgICAgLy8gQ2FsbGVkIGJ5IHRoZSBXZWJWaWV3SW1wbCB0byBpbml0aWFsaXplIGl0cyBtYWlu
IGZyYW1lOgorICAgIHZvaWQgaW5pdGlhbGl6ZUFzTWFpbkZyYW1lKFdlYlZpZXdJbXBsKik7CisK
KyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OkZyYW1lPiBjcmVhdGVDaGlsZEZyYW1lKAorICAgICAg
ICBjb25zdCBXZWJDb3JlOjpGcmFtZUxvYWRSZXF1ZXN0JiwgV2ViQ29yZTo6SFRNTEZyYW1lT3du
ZXJFbGVtZW50Kik7CisKKyAgICB2b2lkIGxheW91dCgpOworICAgIHZvaWQgcGFpbnQoV2ViQ2Fu
dmFzKiwgY29uc3QgV2ViUmVjdCYpOworICAgIHZvaWQgY3JlYXRlRnJhbWVWaWV3KCk7CisKKyAg
ICBzdGF0aWMgV2ViRnJhbWVJbXBsKiBmcm9tRnJhbWUoV2ViQ29yZTo6RnJhbWUqIGZyYW1lKTsK
KworICAgIFdlYlZpZXdJbXBsKiB2aWV3SW1wbCgpIGNvbnN0OworCisgICAgV2ViQ29yZTo6RnJh
bWUqIGZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZTsgfQorICAgIFdlYkNvcmU6OkZyYW1l
VmlldyogZnJhbWVWaWV3KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZSA/IG1fZnJhbWUtPnZpZXco
KSA6IDA7IH0KKworICAgIC8vIEdldHRlcnMgZm9yIHRoZSBpbXBscyBjb3JyZXNwb25kaW5nIHRv
IEdldChQcm92aXNpb25hbClEYXRhU291cmNlLiBUaGV5CisgICAgLy8gbWF5IHJldHVybiAwIGlm
IHRoZXJlIGlzIG5vIGNvcnJlc3BvbmRpbmcgZGF0YSBzb3VyY2UuCisgICAgV2ViRGF0YVNvdXJj
ZUltcGwqIGRhdGFTb3VyY2VJbXBsKCkgY29uc3Q7CisgICAgV2ViRGF0YVNvdXJjZUltcGwqIHBy
b3Zpc2lvbmFsRGF0YVNvdXJjZUltcGwoKSBjb25zdDsKKworICAgIC8vIFJldHVybnMgd2hpY2gg
ZnJhbWUgaGFzIGFuIGFjdGl2ZSBtYXRjaC4gVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZQor
ICAgIC8vIGNhbGxlZCBvbiB0aGUgbWFpbiBmcmFtZSwgYXMgaXQgaXMgdGhlIG9ubHkgZnJhbWUg
a2VlcGluZyB0cmFjay4gUmV0dXJuZWQKKyAgICAvLyB2YWx1ZSBjYW4gYmUgMCBpZiBubyBmcmFt
ZSBoYXMgYW4gYWN0aXZlIG1hdGNoLgorICAgIGNvbnN0IFdlYkZyYW1lSW1wbCogYWN0aXZlTWF0
Y2hGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlTWF0Y2hGcmFtZTsgfQorCisgICAgLy8g
V2hlbiBhIEZpbmQgb3BlcmF0aW9uIGVuZHMsIHdlIHdhbnQgdG8gc2V0IHRoZSBzZWxlY3Rpb24g
dG8gd2hhdCB3YXMgYWN0aXZlCisgICAgLy8gYW5kIHNldCBmb2N1cyB0byB0aGUgZmlyc3QgZm9j
dXNhYmxlIG5vZGUgd2UgZmluZCAoc3RhcnRpbmcgd2l0aCB0aGUgZmlyc3QKKyAgICAvLyBub2Rl
IGluIHRoZSBtYXRjaGVkIHJhbmdlIGFuZCBnb2luZyB1cCB0aGUgaW5oZXJpdGFuY2UgY2hhaW4p
LiBJZiB3ZSBmaW5kCisgICAgLy8gbm90aGluZyB0byBmb2N1cyB3ZSBmb2N1cyB0aGUgZmlyc3Qg
Zm9jdXNhYmxlIG5vZGUgaW4gdGhlIHJhbmdlLiBUaGlzCisgICAgLy8gYWxsb3dzIHVzIHRvIHNl
dCBmb2N1cyB0byBhIGxpbmsgKHdoZW4gd2UgZmluZCB0ZXh0IGluc2lkZSBhIGxpbmspLCB3aGlj
aAorICAgIC8vIGFsbG93cyB1cyB0byBuYXZpZ2F0ZSBieSBwcmVzc2luZyBFbnRlciBhZnRlciBj
bG9zaW5nIHRoZSBGaW5kIGJveC4KKyAgICB2b2lkIHNldEZpbmRFbmRzdGF0ZUZvY3VzQW5kU2Vs
ZWN0aW9uKCk7CisKKyAgICB2b2lkIGRpZEZhaWwoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJv
ciYsIGJvb2wgd2FzUHJvdmlzaW9uYWwpOworCisgICAgLy8gU2V0cyB3aGV0aGVyIHRoZSBXZWJG
cmFtZUltcGwgYWxsb3dzIGl0cyBkb2N1bWVudCB0byBiZSBzY3JvbGxlZC4KKyAgICAvLyBJZiB0
aGUgcGFyYW1ldGVyIGlzIHRydWUsIGFsbG93IHRoZSBkb2N1bWVudCB0byBiZSBzY3JvbGxlZC4K
KyAgICAvLyBPdGhlcndpc2UsIGRpc2FsbG93IHNjcm9sbGluZy4KKyAgICB2b2lkIHNldEFsbG93
c1Njcm9sbGluZyhib29sKTsKKworICAgIC8vIFJldHVybnMgdGhlIHBhc3N3b3JkIGF1dG9jb21w
bGV0ZSBsaXN0ZW5lciBhc3NvY2lhdGVkIHdpdGggdGhlIHBhc3NlZAorICAgIC8vIHVzZXIgbmFt
ZSBpbnB1dCBlbGVtZW50LCBvciAwIGlmIG5vbmUgYXZhaWxhYmxlLgorICAgIC8vIE5vdGUgdGhh
dCB0aGUgcmV0dXJuZWQgbGlzdGVuZXIgaXMgb3duZXIgYnkgdGhlIFdlYkZyYW1lSW1wbCBhbmQg
c2hvdWxkIG5vdAorICAgIC8vIGJlIGtlcHQgYXJvdW5kIGFzIGl0IGlzIGRlbGV0ZWQgd2hlbiB0
aGUgcGFnZSBnb2VzIGF3YXkuCisgICAgV2ViUGFzc3dvcmRBdXRvY29tcGxldGVMaXN0ZW5lciog
Z2V0UGFzc3dvcmRMaXN0ZW5lcihXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Kik7CisKKyAgICBX
ZWJGcmFtZUNsaWVudCogY2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnRIYW5kbGUtPmNs
aWVudCgpOyB9CisgICAgdm9pZCBkcm9wQ2xpZW50KCkgeyBtX2NsaWVudEhhbmRsZS0+ZHJvcENs
aWVudCgpOyB9CisKK3ByaXZhdGU6CisgICAgY2xhc3MgRGVmZXJyZWRTY29wZVN0cmluZ01hdGNo
ZXM7CisgICAgZnJpZW5kIGNsYXNzIERlZmVycmVkU2NvcGVTdHJpbmdNYXRjaGVzOworICAgIGZy
aWVuZCBjbGFzcyBGcmFtZUxvYWRlckNsaWVudEltcGw7CisKKyAgICAvLyBBIHdlYWsgcmVmZXJl
bmNlIHRvIHRoZSBXZWJGcmFtZUNsaWVudC4gIEVhY2ggV2ViRnJhbWUgaW4gdGhlIGhpZXJhcmNo
eQorICAgIC8vIG93bnMgYSByZWZlcmVuY2UgdG8gYSBDbGllbnRIYW5kbGUuICBXaGVuIHRoZSBt
YWluIGZyYW1lIGlzIGRlc3Ryb3llZCwgaXQKKyAgICAvLyBjbGVhcnMgdGhlIFdlYkZyYW1lQ2xp
ZW50LgorICAgIGNsYXNzIENsaWVudEhhbmRsZSA6IHB1YmxpYyBSZWZDb3VudGVkPENsaWVudEhh
bmRsZT4geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2xpZW50SGFu
ZGxlPiBjcmVhdGUoV2ViRnJhbWVDbGllbnQqIGNsaWVudCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDbGllbnRIYW5kbGUoY2xpZW50KSk7CisgICAgICAgIH0K
KyAgICAgICAgV2ViRnJhbWVDbGllbnQqIGNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9Cisg
ICAgICAgIHZvaWQgZHJvcENsaWVudCgpIHsgbV9jbGllbnQgPSAwOyB9CisgICAgcHJpdmF0ZToK
KyAgICAgICAgQ2xpZW50SGFuZGxlKFdlYkZyYW1lQ2xpZW50KiBjbGllbnQpIDogbV9jbGllbnQo
Y2xpZW50KSB7fQorICAgICAgICBXZWJGcmFtZUNsaWVudCogbV9jbGllbnQ7CisgICAgfTsKKwor
ICAgIC8vIEEgYml0IG1hc2sgc3BlY2lmeWluZyBhcmVhIG9mIHRoZSBmcmFtZSB0byBpbnZhbGlk
YXRlLgorICAgIGVudW0gQXJlYVRvSW52YWxpZGF0ZSB7CisgICAgICBJbnZhbGlkYXRlTm90aGlu
ZywKKyAgICAgIEludmFsaWRhdGVDb250ZW50QXJlYSwKKyAgICAgIEludmFsaWRhdGVTY3JvbGxi
YXIsICAgLy8gVmVydGljYWwgc2Nyb2xsYmFyIG9ubHkuCisgICAgICBJbnZhbGlkYXRlQWxsICAg
ICAgICAgIC8vIEJvdGggY29udGVudCBhcmVhIGFuZCB0aGUgc2Nyb2xsYmFyLgorICAgIH07CisK
KyAgICBXZWJGcmFtZUltcGwoUGFzc1JlZlB0cjxDbGllbnRIYW5kbGU+KTsKKworICAgIC8vIElu
Zm9ybXMgdGhlIFdlYkZyYW1lIHRoYXQgdGhlIEZyYW1lIGlzIGJlaW5nIGNsb3NlZCwgY2FsbGVk
IGJ5IHRoZQorICAgIC8vIFdlYkZyYW1lTG9hZGVyQ2xpZW50CisgICAgdm9pZCBjbG9zaW5nKCk7
CisKKyAgICAvLyBOb3RpZmllcyB0aGUgZGVsZWdhdGUgYWJvdXQgYSBuZXcgc2VsZWN0aW9uIHJl
Y3QuCisgICAgdm9pZCByZXBvcnRGaW5kSW5QYWdlU2VsZWN0aW9uKAorICAgICAgICBjb25zdCBX
ZWJSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQgYWN0aXZlTWF0Y2hPcmRpbmFsLCBpbnQgaWRlbnRp
Zmllcik7CisKKyAgICAvLyBJbnZhbGlkYXRlcyBhIGNlcnRhaW4gYXJlYSB3aXRoaW4gdGhlIGZy
YW1lLgorICAgIHZvaWQgaW52YWxpZGF0ZUFyZWEoQXJlYVRvSW52YWxpZGF0ZSk7CisKKyAgICAv
LyBBZGQgYSBXZWJLaXQgVGV4dE1hdGNoLWhpZ2hsaWdodCBtYXJrZXIgdG8gbm9kZXMgaW4gYSBy
YW5nZS4KKyAgICB2b2lkIGFkZE1hcmtlcihXZWJDb3JlOjpSYW5nZSosIGJvb2wgYWN0aXZlTWF0
Y2gpOworCisgICAgLy8gU2V0cyB0aGUgbWFya2VycyB3aXRoaW4gYSByYW5nZSBhcyBhY3RpdmUg
b3IgaW5hY3RpdmUuCisgICAgdm9pZCBzZXRNYXJrZXJBY3RpdmUoV2ViQ29yZTo6UmFuZ2UqLCBi
b29sIGFjdGl2ZSk7CisKKyAgICAvLyBSZXR1cm5zIHRoZSBvcmRpbmFsIG9mIHRoZSBmaXJzdCBt
YXRjaCBpbiB0aGUgZnJhbWUgc3BlY2lmaWVkLiBUaGlzCisgICAgLy8gZnVuY3Rpb24gZW51bWVy
YXRlcyB0aGUgZnJhbWVzLCBzdGFydGluZyB3aXRoIHRoZSBtYWluIGZyYW1lIGFuZCB1cCB0byAo
YnV0CisgICAgLy8gbm90IGluY2x1ZGluZykgdGhlIGZyYW1lIHBhc3NlZCBpbiBhcyBhIHBhcmFt
ZXRlciBhbmQgY291bnRzIGhvdyBtYW55CisgICAgLy8gbWF0Y2hlcyBoYXZlIGJlZW4gZm91bmQu
CisgICAgaW50IG9yZGluYWxPZkZpcnN0TWF0Y2hGb3JGcmFtZShXZWJGcmFtZUltcGwqKSBjb25z
dDsKKworICAgIC8vIERldGVybWluZXMgd2hldGhlciB0aGUgc2NvcGluZyBlZmZvcnQgaXMgcmVx
dWlyZWQgZm9yIGEgcGFydGljdWxhciBmcmFtZS4KKyAgICAvLyBJdCBpcyBub3QgbmVjZXNzYXJ5
IGlmIHRoZSBmcmFtZSBpcyBpbnZpc2libGUsIGZvciBleGFtcGxlLCBvciBpZiB0aGlzCisgICAg
Ly8gaXMgYSByZXBlYXQgc2VhcmNoIHRoYXQgYWxyZWFkeSByZXR1cm5lZCBub3RoaW5nIGxhc3Qg
dGltZSB0aGUgc2FtZSBwcmVmaXgKKyAgICAvLyB3YXMgc2VhcmNoZWQuCisgICAgYm9vbCBzaG91
bGRTY29wZU1hdGNoZXMoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBzZWFyY2hUZXh0KTsKKworICAg
IC8vIFF1ZXVlIHVwIGEgZGVmZXJyZWQgY2FsbCB0byBzY29wZVN0cmluZ01hdGNoZXMuCisgICAg
dm9pZCBzY29wZVN0cmluZ01hdGNoZXNTb29uKAorICAgICAgICBpbnQgaWRlbnRpZmllciwgY29u
c3QgV2ViU3RyaW5nJiBzZWFyY2hUZXh0LCBjb25zdCBXZWJGaW5kT3B0aW9ucyYsCisgICAgICAg
IGJvb2wgcmVzZXQpOworCisgICAgLy8gQ2FsbGVkIGJ5IGEgRGVmZXJyZWRTY29wZVN0cmluZ01h
dGNoZXMgaW5zdGFuY2UuCisgICAgdm9pZCBjYWxsU2NvcGVTdHJpbmdNYXRjaGVzKAorICAgICAg
ICBEZWZlcnJlZFNjb3BlU3RyaW5nTWF0Y2hlcyosIGludCBpZGVudGlmaWVyLCBjb25zdCBXZWJT
dHJpbmcmIHNlYXJjaFRleHQsCisgICAgICAgIGNvbnN0IFdlYkZpbmRPcHRpb25zJiwgYm9vbCBy
ZXNldCk7CisKKyAgICAvLyBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gaW52YWxpZGF0ZSB0aGUgY29u
dGVudCBhcmVhIGFuZCBzY3JvbGxiYXIuCisgICAgdm9pZCBpbnZhbGlkYXRlSWZOZWNlc3Nhcnko
KTsKKworICAgIC8vIENsZWFycyB0aGUgbWFwIG9mIHBhc3N3b3JkIGxpc3RlbmVycy4KKyAgICB2
b2lkIGNsZWFyUGFzc3dvcmRMaXN0ZW5lcnMoKTsKKworICAgIHZvaWQgbG9hZEphdmFTY3JpcHRV
UkwoY29uc3QgV2ViQ29yZTo6S1VSTCYpOworCisgICAgLy8gVXNlZCB0byBjaGVjayBmb3IgbGVh
a3Mgb2YgdGhpcyBvYmplY3QuCisgICAgc3RhdGljIGludCBtX2xpdmVPYmplY3RDb3VudDsKKwor
ICAgIEZyYW1lTG9hZGVyQ2xpZW50SW1wbCBtX2ZyYW1lTG9hZGVyQ2xpZW50OworCisgICAgUmVm
UHRyPENsaWVudEhhbmRsZT4gbV9jbGllbnRIYW5kbGU7CisKKyAgICAvLyBUaGlzIGlzIGEgd2Vh
ayBwb2ludGVyIHRvIG91ciBjb3JyZXNwb25kaW5nIFdlYkNvcmUgZnJhbWUuICBBIHJlZmVyZW5j
ZSB0bworICAgIC8vIG91cnNlbHZlcyBpcyBoZWxkIHdoaWxlIGZyYW1lXyBpcyB2YWxpZC4gIFNl
ZSBvdXIgQ2xvc2luZyBtZXRob2QuCisgICAgV2ViQ29yZTo6RnJhbWUqIG1fZnJhbWU7CisKKyAg
ICAvLyBBIHdheSBmb3IgdGhlIG1haW4gZnJhbWUgdG8ga2VlcCB0cmFjayBvZiB3aGljaCBmcmFt
ZSBoYXMgYW4gYWN0aXZlCisgICAgLy8gbWF0Y2guIFNob3VsZCBiZSAwIGZvciBhbGwgb3RoZXIg
ZnJhbWVzLgorICAgIFdlYkZyYW1lSW1wbCogbV9hY3RpdmVNYXRjaEZyYW1lOworCisgICAgLy8g
VGhlIHJhbmdlIG9mIHRoZSBhY3RpdmUgbWF0Y2ggZm9yIHRoZSBjdXJyZW50IGZyYW1lLgorICAg
IFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gbV9hY3RpdmVNYXRjaDsKKworICAgIC8vIFRoZSBpbmRl
eCBvZiB0aGUgYWN0aXZlIG1hdGNoLgorICAgIGludCBtX2FjdGl2ZU1hdGNoSW5kZXg7CisKKyAg
ICAvLyBUaGlzIGZsYWcgaXMgdXNlZCBieSB0aGUgc2NvcGluZyBlZmZvcnQgdG8gZGV0ZXJtaW5l
IGlmIHdlIG5lZWQgdG8gZmlndXJlCisgICAgLy8gb3V0IHdoaWNoIHJlY3RhbmdsZSBpcyB0aGUg
YWN0aXZlIG1hdGNoLiBPbmNlIHdlIGZpbmQgdGhlIGFjdGl2ZQorICAgIC8vIHJlY3RhbmdsZSB3
ZSBjbGVhciB0aGlzIGZsYWcuCisgICAgYm9vbCBtX2xvY2F0aW5nQWN0aXZlUmVjdDsKKworICAg
IC8vIFRoZSBzY29waW5nIGVmZm9ydCBjYW4gdGltZSBvdXQgYW5kIHdlIG5lZWQgdG8ga2VlcCB0
cmFjayBvZiB3aGVyZSB3ZQorICAgIC8vIGVuZGVkIG91ciBsYXN0IHNlYXJjaCBzbyB3ZSBjYW4g
Y29udGludWUgZnJvbSB3aGVyZSB3ZSBsZWZ0IG9mLgorICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5n
ZT4gbV9yZXN1bWVTY29waW5nRnJvbVJhbmdlOworCisgICAgLy8gS2VlcHMgdHJhY2sgb2YgdGhl
IGxhc3Qgc3RyaW5nIHRoaXMgZnJhbWUgc2VhcmNoZWQgZm9yLiBUaGlzIGlzIHVzZWQgZm9yCisg
ICAgLy8gc2hvcnQtY2lyY3VpdGluZyBzZWFyY2hlcyBpbiB0aGUgZm9sbG93aW5nIHNjZW5hcmlv
czogV2hlbiBhIGZyYW1lIGhhcworICAgIC8vIGJlZW4gc2VhcmNoZWQgYW5kIHJldHVybmVkIDAg
cmVzdWx0cywgd2UgZG9uJ3QgbmVlZCB0byBzZWFyY2ggdGhhdCBmcmFtZQorICAgIC8vIGFnYWlu
IGlmIHRoZSB1c2VyIGlzIGp1c3QgYWRkaW5nIHRvIHRoZSBzZWFyY2ggKG1ha2luZyBpdCBtb3Jl
IHNwZWNpZmljKS4KKyAgICBXZWJDb3JlOjpTdHJpbmcgbV9sYXN0U2VhcmNoU3RyaW5nOworCisg
ICAgLy8gS2VlcHMgdHJhY2sgb2YgaG93IG1hbnkgbWF0Y2hlcyB0aGlzIGZyYW1lIGhhcyBmb3Vu
ZCBzbyBmYXIsIHNvIHRoYXQgd2UKKyAgICAvLyBkb24ndCBsb29zZSBjb3VudCBiZXR3ZWVuIHNj
b3BpbmcgZWZmb3J0cywgYW5kIGlzIGFsc28gdXNlZCAoaW4gY29uanVuY3Rpb24KKyAgICAvLyB3
aXRoIG1fbGFzdFNlYXJjaFN0cmluZyBhbmQgbV9zY29waW5nQ29tcGxldGUpIHRvIGZpZ3VyZSBv
dXQgaWYgd2UgbmVlZCB0bworICAgIC8vIHNlYXJjaCB0aGUgZnJhbWUgYWdhaW4uCisgICAgaW50
IG1fbGFzdE1hdGNoQ291bnQ7CisKKyAgICAvLyBUaGlzIHZhcmlhYmxlIGtlZXBzIGEgY3VtdWxh
dGl2ZSB0b3RhbCBvZiBtYXRjaGVzIGZvdW5kIHNvIGZhciBmb3IgQUxMIHRoZQorICAgIC8vIGZy
YW1lcyBvbiB0aGUgcGFnZSwgYW5kIGlzIG9ubHkgaW5jcmVtZW50ZWQgYnkgY2FsbGluZyBJbmNy
ZWFzZU1hdGNoQ291bnQKKyAgICAvLyAob24gdGhlIG1haW4gZnJhbWUgb25seSkuIEl0IHNob3Vs
ZCBiZSAtMSBmb3IgYWxsIG90aGVyIGZyYW1lcy4KKyAgICBzaXplX3QgbV90b3RhbE1hdGNoQ291
bnQ7CisKKyAgICAvLyBUaGlzIHZhcmlhYmxlIGtlZXBzIGEgY3VtdWxhdGl2ZSB0b3RhbCBvZiBo
b3cgbWFueSBmcmFtZXMgYXJlIGN1cnJlbnRseQorICAgIC8vIHNjb3BpbmcsIGFuZCBpcyBpbmNy
ZW1lbnRlZC9kZWNyZW1lbnRlZCBvbiB0aGUgbWFpbiBmcmFtZSBvbmx5LgorICAgIC8vIEl0IHNo
b3VsZCBiZSAtMSBmb3IgYWxsIG90aGVyIGZyYW1lcy4KKyAgICBpbnQgbV9mcmFtZXNTY29waW5n
Q291bnQ7CisKKyAgICAvLyBLZWVwcyB0cmFjayBvZiB3aGV0aGVyIHRoZSBzY29waW5nIGVmZm9y
dCB3YXMgY29tcGxldGVkICh0aGUgdXNlciBtYXkKKyAgICAvLyBpbnRlcnJ1cHQgaXQgYmVmb3Jl
IGl0IGNvbXBsZXRlcyBieSBzdWJtaXR0aW5nIGEgbmV3IHNlYXJjaCkuCisgICAgYm9vbCBtX3Nj
b3BpbmdDb21wbGV0ZTsKKworICAgIC8vIEtlZXBzIHRyYWNrIG9mIHdoZW4gdGhlIHNjb3Bpbmcg
ZWZmb3J0IHNob3VsZCBuZXh0IGludmFsaWRhdGUgdGhlIHNjcm9sbGJhcgorICAgIC8vIGFuZCB0
aGUgZnJhbWUgYXJlYS4KKyAgICBpbnQgbV9uZXh0SW52YWxpZGF0ZUFmdGVyOworCisgICAgLy8g
QSBsaXN0IG9mIGFsbCBvZiB0aGUgcGVuZGluZyBjYWxscyB0byBzY29wZVN0cmluZ01hdGNoZXMu
CisgICAgVmVjdG9yPERlZmVycmVkU2NvcGVTdHJpbmdNYXRjaGVzKj4gbV9kZWZlcnJlZFNjb3Bp
bmdXb3JrOworCisgICAgLy8gVmFsaWQgYmV0d2VlbiBjYWxscyB0byBCZWdpblByaW50KCkgYW5k
IEVuZFByaW50KCkuIENvbnRhaW50cyB0aGUgcHJpbnQKKyAgICAvLyBpbmZvcm1hdGlvbi4gSXMg
dXNlZCBieSBQcmludFBhZ2UoKS4KKyAgICBPd25QdHI8Q2hyb21lUHJpbnRDb250ZXh0PiBtX3By
aW50Q29udGV4dDsKKworICAgIC8vIFRoZSBpbnB1dCBmaWVsZHMgdGhhdCBhcmUgaW50ZXJlc3Rl
ZCBpbiBlZGl0IGV2ZW50cyBhbmQgdGhlaXIgYXNzb2NpYXRlZAorICAgIC8vIGxpc3RlbmVycy4K
KyAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ+LAor
ICAgICAgICAgICAgICAgICAgICBXZWJQYXNzd29yZEF1dG9jb21wbGV0ZUxpc3RlbmVyKj4gUGFz
c3dvcmRMaXN0ZW5lck1hcDsKKyAgICBQYXNzd29yZExpc3RlbmVyTWFwIG1fcGFzc3dvcmRMaXN0
ZW5lcnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQg
YS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkhUVFBCb2R5LmNwcCBiL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViSFRUUEJvZHkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMz
NWVkNWMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkhUVFBCb2R5
LmNwcApAQCAtMCwwICsxLDE1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJI
VFRQQm9keS5oIgorCisjaW5jbHVkZSAiRm9ybURhdGEuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJIVFRQQm9keVByaXZhdGUg
OiBwdWJsaWMgRm9ybURhdGEgeworfTsKKwordm9pZCBXZWJIVFRQQm9keTo6aW5pdGlhbGl6ZSgp
Cit7CisgICAgYXNzaWduKHN0YXRpY19jYXN0PFdlYkhUVFBCb2R5UHJpdmF0ZSo+KEZvcm1EYXRh
OjpjcmVhdGUoKS5yZWxlYXNlUmVmKCkpKTsKK30KKwordm9pZCBXZWJIVFRQQm9keTo6cmVzZXQo
KQoreworICAgIGFzc2lnbigwKTsKK30KKwordm9pZCBXZWJIVFRQQm9keTo6YXNzaWduKGNvbnN0
IFdlYkhUVFBCb2R5JiBvdGhlcikKK3sKKyAgICBXZWJIVFRQQm9keVByaXZhdGUqIHAgPSBjb25z
dF9jYXN0PFdlYkhUVFBCb2R5UHJpdmF0ZSo+KG90aGVyLm1fcHJpdmF0ZSk7CisgICAgaWYgKHAp
CisgICAgICAgIHAtPnJlZigpOworICAgIGFzc2lnbihwKTsKK30KKworc2l6ZV90IFdlYkhUVFBC
b2R5OjplbGVtZW50Q291bnQoKSBjb25zdAoreworICAgIEFTU0VSVCghaXNOdWxsKCkpOworICAg
IHJldHVybiBtX3ByaXZhdGUtPmVsZW1lbnRzKCkuc2l6ZSgpOworfQorCitib29sIFdlYkhUVFBC
b2R5OjplbGVtZW50QXQoc2l6ZV90IGluZGV4LCBFbGVtZW50JiByZXN1bHQpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKCFpc051bGwoKSk7CisKKyAgICBpZiAoaW5kZXggPj0gbV9wcml2YXRlLT5lbGVt
ZW50cygpLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgRm9ybURh
dGFFbGVtZW50JiBlbGVtZW50ID0gbV9wcml2YXRlLT5lbGVtZW50cygpW2luZGV4XTsKKworICAg
IHN3aXRjaCAoZWxlbWVudC5tX3R5cGUpIHsKKyAgICBjYXNlIEZvcm1EYXRhRWxlbWVudDo6ZGF0
YToKKyAgICAgICAgcmVzdWx0LnR5cGUgPSBFbGVtZW50OjpUeXBlRGF0YTsKKyAgICAgICAgcmVz
dWx0LmRhdGEuYXNzaWduKGVsZW1lbnQubV9kYXRhLmRhdGEoKSwgZWxlbWVudC5tX2RhdGEuc2l6
ZSgpKTsKKyAgICAgICAgcmVzdWx0LmZpbGVQYXRoLnJlc2V0KCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgRm9ybURhdGFFbGVtZW50OjplbmNvZGVkRmlsZToKKyAgICAgICAgcmVzdWx0LnR5
cGUgPSBFbGVtZW50OjpUeXBlRmlsZTsKKyAgICAgICAgcmVzdWx0LmRhdGEucmVzZXQoKTsKKyAg
ICAgICAgcmVzdWx0LmZpbGVQYXRoID0gZWxlbWVudC5tX2ZpbGVuYW1lOworICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFdlYkhU
VFBCb2R5OjphcHBlbmREYXRhKGNvbnN0IFdlYkRhdGEmIGRhdGEpCit7CisgICAgZW5zdXJlTXV0
YWJsZSgpOworICAgIC8vIEZJWE1FOiBGb3JtRGF0YUVsZW1lbnQ6Om1fZGF0YSBzaG91bGQgYmUg
YSBTaGFyZWRCdWZmZXI8Y2hhcj4uICBUaGVuIHdlCisgICAgLy8gY291bGQgYXZvaWQgdGhpcyBi
dWZmZXIgY29weS4KKyAgICBtX3ByaXZhdGUtPmFwcGVuZERhdGEoZGF0YS5kYXRhKCksIGRhdGEu
c2l6ZSgpKTsKK30KKwordm9pZCBXZWJIVFRQQm9keTo6YXBwZW5kRmlsZShjb25zdCBXZWJTdHJp
bmcmIGZpbGVQYXRoKQoreworICAgIGVuc3VyZU11dGFibGUoKTsKKyAgICBtX3ByaXZhdGUtPmFw
cGVuZEZpbGUoZmlsZVBhdGgpOworfQorCitsb25nIGxvbmcgV2ViSFRUUEJvZHk6OmlkZW50aWZp
ZXIoKSBjb25zdAoreworICAgIEFTU0VSVCghaXNOdWxsKCkpOworICAgIHJldHVybiBtX3ByaXZh
dGUtPmlkZW50aWZpZXIoKTsKK30KKwordm9pZCBXZWJIVFRQQm9keTo6c2V0SWRlbnRpZmllcihs
b25nIGxvbmcgaWRlbnRpZmllcikKK3sKKyAgICBlbnN1cmVNdXRhYmxlKCk7CisgICAgcmV0dXJu
IG1fcHJpdmF0ZS0+c2V0SWRlbnRpZmllcihpZGVudGlmaWVyKTsKK30KKworV2ViSFRUUEJvZHk6
OldlYkhUVFBCb2R5KGNvbnN0IFBhc3NSZWZQdHI8Rm9ybURhdGE+JiBkYXRhKQorICAgIDogbV9w
cml2YXRlKHN0YXRpY19jYXN0PFdlYkhUVFBCb2R5UHJpdmF0ZSo+KGRhdGEucmVsZWFzZVJlZigp
KSkKK3sKK30KKworV2ViSFRUUEJvZHkmIFdlYkhUVFBCb2R5OjpvcGVyYXRvcj0oY29uc3QgUGFz
c1JlZlB0cjxGb3JtRGF0YT4mIGRhdGEpCit7CisgICAgYXNzaWduKHN0YXRpY19jYXN0PFdlYkhU
VFBCb2R5UHJpdmF0ZSo+KGRhdGEucmVsZWFzZVJlZigpKSk7CisgICAgcmV0dXJuICp0aGlzOwor
fQorCitXZWJIVFRQQm9keTo6b3BlcmF0b3IgUGFzc1JlZlB0cjxGb3JtRGF0YT4oKSBjb25zdAor
eworICAgIHJldHVybiBtX3ByaXZhdGU7Cit9CisKK3ZvaWQgV2ViSFRUUEJvZHk6OmFzc2lnbihX
ZWJIVFRQQm9keVByaXZhdGUqIHApCit7CisgICAgLy8gcCBpcyBhbHJlYWR5IHJlZidkIGZvciB1
cyBieSB0aGUgY2FsbGVyCisgICAgaWYgKG1fcHJpdmF0ZSkKKyAgICAgICAgbV9wcml2YXRlLT5k
ZXJlZigpOworICAgIG1fcHJpdmF0ZSA9IHA7Cit9CisKK3ZvaWQgV2ViSFRUUEJvZHk6OmVuc3Vy
ZU11dGFibGUoKQoreworICAgIEFTU0VSVCghaXNOdWxsKCkpOworICAgIGlmICghbV9wcml2YXRl
LT5oYXNPbmVSZWYoKSkKKyAgICAgICAgYXNzaWduKHN0YXRpY19jYXN0PFdlYkhUVFBCb2R5UHJp
dmF0ZSo+KG1fcHJpdmF0ZS0+Y29weSgpLnJlbGVhc2VSZWYoKSkpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSGlzdG9yeUl0
ZW0uY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJIaXN0b3J5SXRlbS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRlZTUwYQotLS0gL2Rldi9udWxsCisrKyBiL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViSGlzdG9yeUl0ZW0uY3BwCkBAIC0wLDAgKzEsMjk2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkhpc3RvcnlJdGVtLmgiCisKKyNpbmNsdWRl
ICJGb3JtRGF0YS5oIgorI2luY2x1ZGUgIkhpc3RvcnlJdGVtLmgiCisjaW5jbHVkZSAiS1VSTC5o
IgorCisjaW5jbHVkZSAiV2ViSFRUUEJvZHkuaCIKKyNpbmNsdWRlICJXZWJQb2ludC5oIgorI2lu
Y2x1ZGUgIldlYlN0cmluZy5oIgorI2luY2x1ZGUgIldlYlZlY3Rvci5oIgorCit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkhpc3RvcnlJ
dGVtUHJpdmF0ZSA6IHB1YmxpYyBIaXN0b3J5SXRlbSB7Cit9OworCit2b2lkIFdlYkhpc3RvcnlJ
dGVtOjppbml0aWFsaXplKCkKK3sKKyAgICBhc3NpZ24oc3RhdGljX2Nhc3Q8V2ViSGlzdG9yeUl0
ZW1Qcml2YXRlKj4oSGlzdG9yeUl0ZW06OmNyZWF0ZSgpLnJlbGVhc2VSZWYoKSkpOworfQorCit2
b2lkIFdlYkhpc3RvcnlJdGVtOjpyZXNldCgpCit7CisgICAgYXNzaWduKDApOworfQorCit2b2lk
IFdlYkhpc3RvcnlJdGVtOjphc3NpZ24oY29uc3QgV2ViSGlzdG9yeUl0ZW0mIG90aGVyKQorewor
ICAgIFdlYkhpc3RvcnlJdGVtUHJpdmF0ZSogcCA9IGNvbnN0X2Nhc3Q8V2ViSGlzdG9yeUl0ZW1Q
cml2YXRlKj4ob3RoZXIubV9wcml2YXRlKTsKKyAgICBpZiAocCkKKyAgICAgICAgcC0+cmVmKCk7
CisgICAgYXNzaWduKHApOworfQorCitXZWJTdHJpbmcgV2ViSGlzdG9yeUl0ZW06OnVybFN0cmlu
ZygpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFpc051bGwoKSk7CisgICAgcmV0dXJuIG1fcHJpdmF0
ZS0+dXJsU3RyaW5nKCk7Cit9CisKK3ZvaWQgV2ViSGlzdG9yeUl0ZW06OnNldFVSTFN0cmluZyhj
b25zdCBXZWJTdHJpbmcmIHVybCkKK3sKKyAgICBlbnN1cmVNdXRhYmxlKCk7CisgICAgbV9wcml2
YXRlLT5zZXRVUkxTdHJpbmcoS1VSTChQYXJzZWRVUkxTdHJpbmcsIHVybCkuc3RyaW5nKCkpOwor
fQorCitXZWJTdHJpbmcgV2ViSGlzdG9yeUl0ZW06Om9yaWdpbmFsVVJMU3RyaW5nKCkgY29uc3QK
K3sKKyAgICBBU1NFUlQoIWlzTnVsbCgpKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5vcmlnaW5h
bFVSTFN0cmluZygpOworfQorCit2b2lkIFdlYkhpc3RvcnlJdGVtOjpzZXRPcmlnaW5hbFVSTFN0
cmluZyhjb25zdCBXZWJTdHJpbmcmIG9yaWdpbmFsVVJMU3RyaW5nKQoreworICAgIGVuc3VyZU11
dGFibGUoKTsKKyAgICBtX3ByaXZhdGUtPnNldE9yaWdpbmFsVVJMU3RyaW5nKG9yaWdpbmFsVVJM
U3RyaW5nKTsKK30KKworV2ViU3RyaW5nIFdlYkhpc3RvcnlJdGVtOjpyZWZlcnJlcigpIGNvbnN0
Cit7CisgICAgQVNTRVJUKCFpc051bGwoKSk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+cmVmZXJy
ZXIoKTsKK30KKwordm9pZCBXZWJIaXN0b3J5SXRlbTo6c2V0UmVmZXJyZXIoY29uc3QgV2ViU3Ry
aW5nJiByZWZlcnJlcikKK3sKKyAgICBlbnN1cmVNdXRhYmxlKCk7CisgICAgbV9wcml2YXRlLT5z
ZXRSZWZlcnJlcihyZWZlcnJlcik7Cit9CisKK1dlYlN0cmluZyBXZWJIaXN0b3J5SXRlbTo6dGFy
Z2V0KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIWlzTnVsbCgpKTsKKyAgICByZXR1cm4gbV9wcml2
YXRlLT50YXJnZXQoKTsKK30KKwordm9pZCBXZWJIaXN0b3J5SXRlbTo6c2V0VGFyZ2V0KGNvbnN0
IFdlYlN0cmluZyYgdGFyZ2V0KQoreworICAgIGVuc3VyZU11dGFibGUoKTsKKyAgICBtX3ByaXZh
dGUtPnNldFRhcmdldCh0YXJnZXQpOworfQorCitXZWJTdHJpbmcgV2ViSGlzdG9yeUl0ZW06OnBh
cmVudCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFpc051bGwoKSk7CisgICAgcmV0dXJuIG1fcHJp
dmF0ZS0+cGFyZW50KCk7Cit9CisKK3ZvaWQgV2ViSGlzdG9yeUl0ZW06OnNldFBhcmVudChjb25z
dCBXZWJTdHJpbmcmIHBhcmVudCkKK3sKKyAgICBlbnN1cmVNdXRhYmxlKCk7CisgICAgbV9wcml2
YXRlLT5zZXRQYXJlbnQocGFyZW50KTsKK30KKworV2ViU3RyaW5nIFdlYkhpc3RvcnlJdGVtOjp0
aXRsZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFpc051bGwoKSk7CisgICAgcmV0dXJuIG1fcHJp
dmF0ZS0+dGl0bGUoKTsKK30KKwordm9pZCBXZWJIaXN0b3J5SXRlbTo6c2V0VGl0bGUoY29uc3Qg
V2ViU3RyaW5nJiB0aXRsZSkKK3sKKyAgICBlbnN1cmVNdXRhYmxlKCk7CisgICAgbV9wcml2YXRl
LT5zZXRUaXRsZSh0aXRsZSk7Cit9CisKK1dlYlN0cmluZyBXZWJIaXN0b3J5SXRlbTo6YWx0ZXJu
YXRlVGl0bGUoKSBjb25zdAoreworICAgIEFTU0VSVCghaXNOdWxsKCkpOworICAgIHJldHVybiBt
X3ByaXZhdGUtPmFsdGVybmF0ZVRpdGxlKCk7Cit9CisKK3ZvaWQgV2ViSGlzdG9yeUl0ZW06OnNl
dEFsdGVybmF0ZVRpdGxlKGNvbnN0IFdlYlN0cmluZyYgYWx0ZXJuYXRlVGl0bGUpCit7CisgICAg
ZW5zdXJlTXV0YWJsZSgpOworICAgIG1fcHJpdmF0ZS0+c2V0QWx0ZXJuYXRlVGl0bGUoYWx0ZXJu
YXRlVGl0bGUpOworfQorCitkb3VibGUgV2ViSGlzdG9yeUl0ZW06Omxhc3RWaXNpdGVkVGltZSgp
IGNvbnN0Cit7CisgICAgQVNTRVJUKCFpc051bGwoKSk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+
bGFzdFZpc2l0ZWRUaW1lKCk7Cit9CisKK3ZvaWQgV2ViSGlzdG9yeUl0ZW06OnNldExhc3RWaXNp
dGVkVGltZShkb3VibGUgbGFzdFZpc2l0ZWRUaW1lKQoreworICAgIGVuc3VyZU11dGFibGUoKTsK
KyAgICAvLyBGSVhNRTogc2V0TGFzdFZpc2l0ZWRUaW1lIGluY3JlbWVudHMgdGhlIHZpc2l0IGNv
dW50LCBzbyB3ZSBoYXZlIHRvCisgICAgLy8gY29ycmVjdCBmb3IgdGhhdC4gIEluc3RlYWQsIHdl
IHNob3VsZCBoYXZlIGEgYmFjay1kb29yIHRvIGp1c3QgbXV0YXRlCisgICAgLy8gdGhlIGxhc3Qg
dmlzaXRlZCB0aW1lIGRpcmVjdGx5LgorICAgIGludCBjb3VudCA9IG1fcHJpdmF0ZS0+dmlzaXRD
b3VudCgpOworICAgIG1fcHJpdmF0ZS0+c2V0TGFzdFZpc2l0ZWRUaW1lKGxhc3RWaXNpdGVkVGlt
ZSk7CisgICAgbV9wcml2YXRlLT5zZXRWaXNpdENvdW50KGNvdW50KTsKK30KKworV2ViUG9pbnQg
V2ViSGlzdG9yeUl0ZW06OnNjcm9sbE9mZnNldCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFpc051
bGwoKSk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+c2Nyb2xsUG9pbnQoKTsKK30KKwordm9pZCBX
ZWJIaXN0b3J5SXRlbTo6c2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IFdlYlBvaW50JiBzY3JvbGxPZmZz
ZXQpCit7CisgICAgZW5zdXJlTXV0YWJsZSgpOworICAgIG1fcHJpdmF0ZS0+c2V0U2Nyb2xsUG9p
bnQoc2Nyb2xsT2Zmc2V0KTsKK30KKworYm9vbCBXZWJIaXN0b3J5SXRlbTo6aXNUYXJnZXRJdGVt
KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIWlzTnVsbCgpKTsKKyAgICByZXR1cm4gbV9wcml2YXRl
LT5pc1RhcmdldEl0ZW0oKTsKK30KKwordm9pZCBXZWJIaXN0b3J5SXRlbTo6c2V0SXNUYXJnZXRJ
dGVtKGJvb2wgaXNUYXJnZXRJdGVtKQoreworICAgIGVuc3VyZU11dGFibGUoKTsKKyAgICBtX3By
aXZhdGUtPnNldElzVGFyZ2V0SXRlbShpc1RhcmdldEl0ZW0pOworfQorCitpbnQgV2ViSGlzdG9y
eUl0ZW06OnZpc2l0Q291bnQoKSBjb25zdAoreworICAgIEFTU0VSVCghaXNOdWxsKCkpOworICAg
IHJldHVybiBtX3ByaXZhdGUtPnZpc2l0Q291bnQoKTsKK30KKwordm9pZCBXZWJIaXN0b3J5SXRl
bTo6c2V0VmlzaXRDb3VudChpbnQgY291bnQpCit7CisgICAgZW5zdXJlTXV0YWJsZSgpOworICAg
IG1fcHJpdmF0ZS0+c2V0VmlzaXRDb3VudChjb3VudCk7Cit9CisKK1dlYlZlY3RvcjxXZWJTdHJp
bmc+IFdlYkhpc3RvcnlJdGVtOjpkb2N1bWVudFN0YXRlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQo
IWlzTnVsbCgpKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5kb2N1bWVudFN0YXRlKCk7Cit9CisK
K3ZvaWQgV2ViSGlzdG9yeUl0ZW06OnNldERvY3VtZW50U3RhdGUoY29uc3QgV2ViVmVjdG9yPFdl
YlN0cmluZz4mIHN0YXRlKQoreworICAgIGVuc3VyZU11dGFibGUoKTsKKyAgICAvLyBGSVhNRTog
d291bGQgYmUgbmljZSB0byBhdm9pZCB0aGUgaW50ZXJtZWRpYXRlIGNvcHkKKyAgICBWZWN0b3I8
U3RyaW5nPiBkczsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0YXRlLnNpemUoKTsgKytp
KQorICAgICAgICBkcy5hcHBlbmQoc3RhdGVbaV0pOworICAgIG1fcHJpdmF0ZS0+c2V0RG9jdW1l
bnRTdGF0ZShkcyk7Cit9CisKK1dlYlN0cmluZyBXZWJIaXN0b3J5SXRlbTo6aHR0cENvbnRlbnRU
eXBlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIWlzTnVsbCgpKTsKKyAgICByZXR1cm4gbV9wcml2
YXRlLT5mb3JtQ29udGVudFR5cGUoKTsKK30KKwordm9pZCBXZWJIaXN0b3J5SXRlbTo6c2V0SFRU
UENvbnRlbnRUeXBlKGNvbnN0IFdlYlN0cmluZyYgaHR0cENvbnRlbnRUeXBlKQoreworICAgIGVu
c3VyZU11dGFibGUoKTsKKyAgICBtX3ByaXZhdGUtPnNldEZvcm1Db250ZW50VHlwZShodHRwQ29u
dGVudFR5cGUpOworfQorCitXZWJIVFRQQm9keSBXZWJIaXN0b3J5SXRlbTo6aHR0cEJvZHkoKSBj
b25zdAoreworICAgIEFTU0VSVCghaXNOdWxsKCkpOworICAgIHJldHVybiBXZWJIVFRQQm9keSht
X3ByaXZhdGUtPmZvcm1EYXRhKCkpOworfQorCit2b2lkIFdlYkhpc3RvcnlJdGVtOjpzZXRIVFRQ
Qm9keShjb25zdCBXZWJIVFRQQm9keSYgaHR0cEJvZHkpCit7CisgICAgZW5zdXJlTXV0YWJsZSgp
OworICAgIG1fcHJpdmF0ZS0+c2V0Rm9ybURhdGEoaHR0cEJvZHkpOworfQorCitXZWJWZWN0b3I8
V2ViSGlzdG9yeUl0ZW0+IFdlYkhpc3RvcnlJdGVtOjpjaGlsZHJlbigpIGNvbnN0Cit7CisgICAg
QVNTRVJUKCFpc051bGwoKSk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Y2hpbGRyZW4oKTsKK30K
Kwordm9pZCBXZWJIaXN0b3J5SXRlbTo6c2V0Q2hpbGRyZW4oY29uc3QgV2ViVmVjdG9yPFdlYkhp
c3RvcnlJdGVtPiYgaXRlbXMpCit7CisgICAgZW5zdXJlTXV0YWJsZSgpOworICAgIG1fcHJpdmF0
ZS0+Y2xlYXJDaGlsZHJlbigpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaXRlbXMuc2l6
ZSgpOyArK2kpCisgICAgICAgIG1fcHJpdmF0ZS0+YWRkQ2hpbGRJdGVtKGl0ZW1zW2ldKTsKK30K
Kwordm9pZCBXZWJIaXN0b3J5SXRlbTo6YXBwZW5kVG9DaGlsZHJlbihjb25zdCBXZWJIaXN0b3J5
SXRlbSYgaXRlbSkKK3sKKyAgICBlbnN1cmVNdXRhYmxlKCk7CisgICAgbV9wcml2YXRlLT5hZGRD
aGlsZEl0ZW0oaXRlbSk7Cit9CisKK1dlYkhpc3RvcnlJdGVtOjpXZWJIaXN0b3J5SXRlbShjb25z
dCBQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPiYgaXRlbSkKKyAgICA6IG1fcHJpdmF0ZShzdGF0aWNf
Y2FzdDxXZWJIaXN0b3J5SXRlbVByaXZhdGUqPihpdGVtLnJlbGVhc2VSZWYoKSkpCit7Cit9CisK
K1dlYkhpc3RvcnlJdGVtJiBXZWJIaXN0b3J5SXRlbTo6b3BlcmF0b3I9KGNvbnN0IFBhc3NSZWZQ
dHI8SGlzdG9yeUl0ZW0+JiBpdGVtKQoreworICAgIGFzc2lnbihzdGF0aWNfY2FzdDxXZWJIaXN0
b3J5SXRlbVByaXZhdGUqPihpdGVtLnJlbGVhc2VSZWYoKSkpOworICAgIHJldHVybiAqdGhpczsK
K30KKworV2ViSGlzdG9yeUl0ZW06Om9wZXJhdG9yIFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlOworfQorCit2b2lkIFdlYkhpc3RvcnlJdGVt
Ojphc3NpZ24oV2ViSGlzdG9yeUl0ZW1Qcml2YXRlKiBwKQoreworICAgIC8vIHAgaXMgYWxyZWFk
eSByZWYnZCBmb3IgdXMgYnkgdGhlIGNhbGxlcgorICAgIGlmIChtX3ByaXZhdGUpCisgICAgICAg
IG1fcHJpdmF0ZS0+ZGVyZWYoKTsKKyAgICBtX3ByaXZhdGUgPSBwOworfQorCit2b2lkIFdlYkhp
c3RvcnlJdGVtOjplbnN1cmVNdXRhYmxlKCkKK3sKKyAgICBBU1NFUlQoIWlzTnVsbCgpKTsKKyAg
ICBpZiAoIW1fcHJpdmF0ZS0+aGFzT25lUmVmKCkpCisgICAgICAgIGFzc2lnbihzdGF0aWNfY2Fz
dDxXZWJIaXN0b3J5SXRlbVByaXZhdGUqPihtX3ByaXZhdGUtPmNvcHkoKS5yZWxlYXNlUmVmKCkp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkltYWdlQ0cuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbWFnZUNHLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGIyNDQ5Ci0tLSAvZGV2L251
bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbWFnZUNHLmNwcApAQCAtMCwwICsxLDEx
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJJbWFnZS5oIgorCisjaW5jbHVk
ZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1
ZmZlci5oIgorCisjaW5jbHVkZSAiV2ViRGF0YS5oIgorI2luY2x1ZGUgIldlYlNpemUuaCIKKwor
I2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0ltYWdlLmg+CisKKyNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJJbWFnZSBXZWJJbWFnZTo6ZnJvbURh
dGEoY29uc3QgV2ViRGF0YSYgZGF0YSwgY29uc3QgV2ViU2l6ZSYgZGVzaXJlZFNpemUpCit7Cisg
ICAgLy8gRklYTUU6IERvIHNvbWV0aGluZyBsaWtlIHdoYXQgV2ViSW1hZ2VTa2lhLmNwcCBkb2Vz
IHRvIGVudW1lcmF0ZSBmcmFtZXMuCisgICAgLy8gTm90IHN1cmUgd2hldGhlciB0aGUgQ0cgZGVj
b2RlciB1c2VzIHRoZSBzYW1lIGZyYW1lIG9yZGVyaW5nIHJ1bGVzIChpZiBzbworICAgIC8vIHdl
IGNhbiBqdXN0IHVzZSB0aGUgc2FtZSBsb2dpYykuCisKKyAgICBJbWFnZVNvdXJjZSBzb3VyY2U7
CisgICAgc291cmNlLnNldERhdGEoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+KGRhdGEpLmdldCgp
LCB0cnVlKTsKKyAgICBpZiAoIXNvdXJjZS5pc1NpemVBdmFpbGFibGUoKSkKKyAgICAgICAgcmV0
dXJuIFdlYkltYWdlKCk7CisKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gZnJhbWUwKEFkb3B0
Q0YsIHNvdXJjZS5jcmVhdGVGcmFtZUF0SW5kZXgoMCkpOworICAgIGlmICghZnJhbWUwKQorICAg
ICAgICByZXR1cm4gV2ViSW1hZ2UoKTsKKworICAgIHJldHVybiBXZWJJbWFnZShmcmFtZTAuZ2V0
KCkpOworfQorCit2b2lkIFdlYkltYWdlOjpyZXNldCgpCit7CisgICAgQ0dJbWFnZVJlbGVhc2Uo
bV9pbWFnZVJlZik7CisgICAgbV9pbWFnZVJlZiA9IDA7Cit9CisKK3ZvaWQgV2ViSW1hZ2U6OmFz
c2lnbihjb25zdCBXZWJJbWFnZSYgaW1hZ2UpCit7CisgICAgYXNzaWduKGltYWdlLm1faW1hZ2VS
ZWYpOworfQorCitib29sIFdlYkltYWdlOjppc051bGwoKSBjb25zdAoreworICAgIHJldHVybiAh
bV9pbWFnZVJlZjsKK30KKworV2ViU2l6ZSBXZWJJbWFnZTo6c2l6ZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIFdlYlNpemUoQ0dJbWFnZUdldFdpZHRoKG1faW1hZ2VSZWYpLCBDR0ltYWdlR2V0SGVp
Z2h0KG1faW1hZ2VSZWYpKTsKK30KKworV2ViSW1hZ2U6OldlYkltYWdlKGNvbnN0IFBhc3NSZWZQ
dHI8SW1hZ2U+JiBpbWFnZSkKKyAgICA6IG1faW1hZ2VSZWYoMCkKK3sKKyAgICBpZiAoaW1hZ2Uu
Z2V0KCkpCisgICAgICAgIGFzc2lnbihpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUo
KSk7Cit9CisKK1dlYkltYWdlJiBXZWJJbWFnZTo6b3BlcmF0b3I9KGNvbnN0IFBhc3NSZWZQdHI8
SW1hZ2U+JiBpbWFnZSkKK3sKKyAgICBpZiAoaW1hZ2UuZ2V0KCkpCisgICAgICAgIGFzc2lnbihp
bWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSk7CisgICAgZWxzZQorICAgICAgICBy
ZXNldCgpOworICAgIHJldHVybiAqdGhpczsKK30KKwordm9pZCBXZWJJbWFnZTo6YXNzaWduKENH
SW1hZ2VSZWYgaW1hZ2VSZWYpCit7CisgICAgLy8gTWFrZSBzdXJlIHRvIHJldGFpbiB0aGUgaW1h
Z2VSZWYgZmlyc3QgaW5jYXNlIG1faW1hZ2VSZWYgPT0gaW1hZ2VSZWYuCisgICAgQ0dJbWFnZVJl
dGFpbihpbWFnZVJlZik7CisgICAgQ0dJbWFnZVJlbGVhc2UobV9pbWFnZVJlZik7CisgICAgbV9p
bWFnZVJlZiA9IGltYWdlUmVmOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW1hZ2VTa2lhLmNwcCBiL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViSW1hZ2VTa2lhLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4wNjg0YjU4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbWFn
ZVNraWEuY3BwCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldlYkltYWdlLmgiCisKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIkltYWdlU291cmNl
LmgiCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2VTa2lhLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVy
LmgiCisKKyNpbmNsdWRlICJXZWJEYXRhLmgiCisjaW5jbHVkZSAiV2ViU2l6ZS5oIgorCisjaW5j
bHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViSW1hZ2UgV2Vi
SW1hZ2U6OmZyb21EYXRhKGNvbnN0IFdlYkRhdGEmIGRhdGEsIGNvbnN0IFdlYlNpemUmIGRlc2ly
ZWRTaXplKQoreworICAgIEltYWdlU291cmNlIHNvdXJjZTsKKyAgICBzb3VyY2Uuc2V0RGF0YShQ
YXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4oZGF0YSkuZ2V0KCksIHRydWUpOworICAgIGlmICghc291
cmNlLmlzU2l6ZUF2YWlsYWJsZSgpKQorICAgICAgICByZXR1cm4gV2ViSW1hZ2UoKTsKKworICAg
IC8vIEZyYW1lcyBhcmUgYXJyYW5nZWQgYnkgZGVjcmVhc2luZyBzaXplLCB0aGVuIGRlY3JlYXNp
bmcgYml0IGRlcHRoLgorICAgIC8vIFBpY2sgdGhlIGZyYW1lIGNsb3Nlc3QgdG8gfGRlc2lyZWRT
aXplfCdzIGFyZWEgd2l0aG91dCBiZWluZyBzbWFsbGVyLAorICAgIC8vIHdoaWNoIGhhcyB0aGUg
aGlnaGVzdCBiaXQgZGVwdGguCisgICAgY29uc3Qgc2l6ZV90IGZyYW1lQ291bnQgPSBzb3VyY2Uu
ZnJhbWVDb3VudCgpOworICAgIHNpemVfdCBpbmRleCA9IDA7ICAvLyBEZWZhdWx0IHRvIGZpcnN0
IGZyYW1lIGlmIG5vbmUgYXJlIGxhcmdlIGVub3VnaC4KKyAgICBpbnQgZnJhbWVBcmVhQXRJbmRl
eCA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmcmFtZUNvdW50OyArK2kpIHsKKyAg
ICAgICAgY29uc3QgSW50U2l6ZSBmcmFtZVNpemUgPSBzb3VyY2UuZnJhbWVTaXplQXRJbmRleChp
KTsKKyAgICAgICAgaWYgKFdlYlNpemUoZnJhbWVTaXplKSA9PSBkZXNpcmVkU2l6ZSkgeworICAg
ICAgICAgICAgaW5kZXggPSBpOworICAgICAgICAgICAgYnJlYWs7ICAvLyBQZXJmZWN0IG1hdGNo
LgorICAgICAgICB9CisKKyAgICAgICAgY29uc3QgaW50IGZyYW1lQXJlYSA9IGZyYW1lU2l6ZS53
aWR0aCgpICogZnJhbWVTaXplLmhlaWdodCgpOworICAgICAgICBpZiAoZnJhbWVBcmVhIDwgKGRl
c2lyZWRTaXplLndpZHRoICogZGVzaXJlZFNpemUuaGVpZ2h0KSkKKyAgICAgICAgICAgIGJyZWFr
OyAgLy8gTm8gbW9yZSBmcmFtZXMgdGhhdCBhcmUgbGFyZ2UgZW5vdWdoLgorCisgICAgICAgIGlm
ICghaSB8fCAoZnJhbWVBcmVhIDwgZnJhbWVBcmVhQXRJbmRleCkpIHsKKyAgICAgICAgICAgIGlu
ZGV4ID0gaTsgIC8vIENsb3NlciB0byBkZXNpcmVkIGFyZWEgdGhhbiBwcmV2aW91cyBiZXN0IG1h
dGNoLgorICAgICAgICAgICAgZnJhbWVBcmVhQXRJbmRleCA9IGZyYW1lQXJlYTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIE93blB0cjxOYXRpdmVJbWFnZVNraWE+IGZyYW1lKHNvdXJjZS5jcmVh
dGVGcmFtZUF0SW5kZXgoaW5kZXgpKTsKKyAgICBpZiAoIWZyYW1lLmdldCgpKQorICAgICAgICBy
ZXR1cm4gV2ViSW1hZ2UoKTsKKworICAgIHJldHVybiBXZWJJbWFnZSgqZnJhbWUpOworfQorCit2
b2lkIFdlYkltYWdlOjpyZXNldCgpCit7CisgICAgbV9iaXRtYXAucmVzZXQoKTsKK30KKwordm9p
ZCBXZWJJbWFnZTo6YXNzaWduKGNvbnN0IFdlYkltYWdlJiBpbWFnZSkKK3sKKyAgICBtX2JpdG1h
cCA9IGltYWdlLm1fYml0bWFwOworfQorCitib29sIFdlYkltYWdlOjppc051bGwoKSBjb25zdAor
eworICAgIHJldHVybiBtX2JpdG1hcC5pc051bGwoKTsKK30KKworV2ViU2l6ZSBXZWJJbWFnZTo6
c2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYlNpemUobV9iaXRtYXAud2lkdGgoKSwgbV9i
aXRtYXAuaGVpZ2h0KCkpOworfQorCitXZWJJbWFnZTo6V2ViSW1hZ2UoY29uc3QgUGFzc1JlZlB0
cjxJbWFnZT4mIGltYWdlKQoreworICAgIG9wZXJhdG9yPShpbWFnZSk7Cit9CisKK1dlYkltYWdl
JiBXZWJJbWFnZTo6b3BlcmF0b3I9KGNvbnN0IFBhc3NSZWZQdHI8SW1hZ2U+JiBpbWFnZSkKK3sK
KyAgICBOYXRpdmVJbWFnZVB0ciBwOworICAgIGlmIChpbWFnZS5nZXQoKSAmJiAocCA9IGltYWdl
LT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpKSkKKyAgICAgICAgYXNzaWduKCpwKTsKKyAg
ICBlbHNlCisgICAgICAgIHJlc2V0KCk7CisgICAgcmV0dXJuICp0aGlzOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQ=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42823</attachid>
            <date>2009-11-09 18:17:34 -0800</date>
            <delta_ts>2009-11-10 00:01:42 -0800</delta_ts>
            <desc>Up-streaming Chromium API src files: WebFileInputElement...WebNotifications</desc>
            <filename>bug-31276-20091109181733.patch</filename>
            <type>text/plain</type>
            <size>54838</size>
            <attacher name="Yaar Schnitman">yaar</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IGFiMzQyN2QuLmU4YWJiNmIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMiw2ICsy
LDEyMCBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgogCisgICAgICAg
IFVwLXN0cmVhbWluZyBDaHJvbWl1bSBBUEkgc3JjIGZpbGVzOiBXZWJGaWxlSW5wdXRFbGVtZW50
Li4uV2ViTm90aWZpY2F0aW9ucworCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0zMTI3NgorCisgICAgICAgICogc3JjL1dlYklucHV0RWxlbWVudC5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJJbnB1dEVsZW1lbnQ6OldlYklucHV0RWxlbWVu
dCk6CisgICAgICAgIChXZWJLaXQ6OldlYklucHV0RWxlbWVudDo6b3BlcmF0b3I9KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViSW5wdXRFbGVtZW50OjpvcGVyYXRvciBXVEY6OlBhc3NSZWZQdHI8SFRN
TElucHV0RWxlbWVudD4pOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnB1dEVsZW1lbnQ6OnNldEFj
dGl2YXRlZFN1Ym1pdCk6CisgICAgICAgIChXZWJLaXQ6OldlYklucHV0RWxlbWVudDo6c2V0VmFs
dWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnB1dEVsZW1lbnQ6OnZhbHVlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViSW5wdXRFbGVtZW50OjpzZXRBdXRvZmlsbGVkKToKKyAgICAgICAgKFdlYktp
dDo6V2ViSW5wdXRFbGVtZW50OjpkaXNwYXRjaEZvcm1Db250cm9sQ2hhbmdlRXZlbnQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJJbnB1dEVsZW1lbnQ6OnNldFNlbGVjdGlvblJhbmdlKToKKyAgICAg
ICAgKiBzcmMvV2ViSW5wdXRFdmVudC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpzdGF0
aWNLZXlJZGVudGlmaWVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYktleWJvYXJkRXZlbnQ6OnNl
dEtleUlkZW50aWZpZXJGcm9tV2luZG93c0tleUNvZGUpOgorICAgICAgICAqIHNyYy9XZWJJbnB1
dEV2ZW50Q29udmVyc2lvbi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpQbGF0Zm9ybU1v
dXNlRXZlbnRCdWlsZGVyOjpQbGF0Zm9ybU1vdXNlRXZlbnRCdWlsZGVyKToKKyAgICAgICAgKFdl
YktpdDo6UGxhdGZvcm1XaGVlbEV2ZW50QnVpbGRlcjo6UGxhdGZvcm1XaGVlbEV2ZW50QnVpbGRl
cik6CisgICAgICAgIChXZWJLaXQ6OnRvUGxhdGZvcm1LZXlib2FyZEV2ZW50VHlwZSk6CisgICAg
ICAgIChXZWJLaXQ6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudEJ1aWxkZXI6OlBsYXRmb3JtS2V5Ym9h
cmRFdmVudEJ1aWxkZXIpOgorICAgICAgICAoV2ViS2l0OjpQbGF0Zm9ybUtleWJvYXJkRXZlbnRC
dWlsZGVyOjpzZXRLZXlUeXBlKToKKyAgICAgICAgKFdlYktpdDo6UGxhdGZvcm1LZXlib2FyZEV2
ZW50QnVpbGRlcjo6aXNDaGFyYWN0ZXJLZXkpOgorICAgICAgICAoV2ViS2l0OjpnZXRXZWJJbnB1
dE1vZGlmaWVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYk1vdXNlRXZlbnRCdWlsZGVyOjpXZWJN
b3VzZUV2ZW50QnVpbGRlcik6CisgICAgICAgIChXZWJLaXQ6OldlYktleWJvYXJkRXZlbnRCdWls
ZGVyOjpXZWJLZXlib2FyZEV2ZW50QnVpbGRlcik6CisgICAgICAgICogc3JjL1dlYklucHV0RXZl
bnRDb252ZXJzaW9uLmg6IEFkZGVkLgorICAgICAgICAqIHNyYy9XZWJLaXQuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYktpdDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJLaXQ6OnNodXRkb3du
KToKKyAgICAgICAgKFdlYktpdDo6d2ViS2l0Q2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6c2V0
TGF5b3V0VGVzdE1vZGUpOgorICAgICAgICAoV2ViS2l0OjpsYXlvdXRUZXN0TW9kZSk6CisgICAg
ICAgIChXZWJLaXQ6OnJlc2V0UGx1Z2luQ2FjaGUpOgorICAgICAgICAqIHNyYy9XZWJNZWRpYVBs
YXllckNsaWVudEltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6Y3JlYXRlV2ViTWVk
aWFQbGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVBsYXllckNsaWVudEltcGw6Omlz
RW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6c2V0
SXNFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpy
ZWdpc3RlclNlbGYpOgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVBsYXllckNsaWVudEltcGw6
Om5ldHdvcmtTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVBsYXllckNs
aWVudEltcGw6OnJlYWR5U3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFQ
bGF5ZXJDbGllbnRJbXBsOjp2b2x1bWVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVk
aWFQbGF5ZXJDbGllbnRJbXBsOjp0aW1lQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYk1l
ZGlhUGxheWVyQ2xpZW50SW1wbDo6cmVwYWludCk6CisgICAgICAgIChXZWJLaXQ6OldlYk1lZGlh
UGxheWVyQ2xpZW50SW1wbDo6ZHVyYXRpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
TWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpyYXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6Oldl
Yk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6c2l6ZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJNZWRpYVBsYXllckNsaWVudEltcGw6OnNhd1Vuc3VwcG9ydGVkVHJhY2tzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpsb2FkKToKKyAgICAgICAgKFdlYktp
dDo6V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpjYW5jZWxMb2FkKToKKyAgICAgICAgKFdlYktp
dDo6V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpwbGF5KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
TWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpwYXVzZSk6CisgICAgICAgIChXZWJLaXQ6OldlYk1lZGlh
UGxheWVyQ2xpZW50SW1wbDo6bmF0dXJhbFNpemUpOgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRp
YVBsYXllckNsaWVudEltcGw6Omhhc1ZpZGVvKToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFQ
bGF5ZXJDbGllbnRJbXBsOjpoYXNBdWRpbyk6CisgICAgICAgIChXZWJLaXQ6OldlYk1lZGlhUGxh
eWVyQ2xpZW50SW1wbDo6c2V0VmlzaWJsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYk1lZGlhUGxh
eWVyQ2xpZW50SW1wbDo6ZHVyYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVBsYXll
ckNsaWVudEltcGw6OmN1cnJlbnRUaW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFQbGF5
ZXJDbGllbnRJbXBsOjpzZWVrKToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFQbGF5ZXJDbGll
bnRJbXBsOjpzZWVraW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFQbGF5ZXJDbGllbnRJ
bXBsOjpzZXRFbmRUaW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFQbGF5ZXJDbGllbnRJ
bXBsOjpzZXRSYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBs
OjpwYXVzZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OnN1
cHBvcnRzRnVsbHNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6OldlYk1lZGlhUGxheWVyQ2xpZW50
SW1wbDo6c3VwcG9ydHNTYXZlKToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFQbGF5ZXJDbGll
bnRJbXBsOjpzZXRWb2x1bWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVBsYXllckNsaWVu
dEltcGw6Om5ldHdvcmtTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYk1lZGlhUGxheWVyQ2xp
ZW50SW1wbDo6cmVhZHlTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYk1lZGlhUGxheWVyQ2xp
ZW50SW1wbDo6bWF4VGltZVNlZWthYmxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFQbGF5
ZXJDbGllbnRJbXBsOjpidWZmZXJlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYk1lZGlhUGxheWVy
Q2xpZW50SW1wbDo6ZGF0YVJhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVBsYXllckNs
aWVudEltcGw6OnRvdGFsQnl0ZXNLbm93bik6CisgICAgICAgIChXZWJLaXQ6OldlYk1lZGlhUGxh
eWVyQ2xpZW50SW1wbDo6dG90YWxCeXRlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYk1lZGlhUGxh
eWVyQ2xpZW50SW1wbDo6Ynl0ZXNMb2FkZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVBs
YXllckNsaWVudEltcGw6OnNldFNpemUpOgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVBsYXll
ckNsaWVudEltcGw6OnBhaW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFQbGF5ZXJDbGll
bnRJbXBsOjpzZXRBdXRvYnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFQbGF5ZXJD
bGllbnRJbXBsOjpoYXNTaW5nbGVTZWN1cml0eU9yaWdpbik6CisgICAgICAgIChXZWJLaXQ6Oldl
Yk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6bW92aWVMb2FkVHlwZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
TWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpnZXRTdXBwb3J0ZWRUeXBlcyk6CisgICAgICAgIChXZWJL
aXQ6OldlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6c3VwcG9ydHNUeXBlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpXZWJNZWRpYVBsYXllckNsaWVudEltcGwp
OgorICAgICAgICAqIHNyYy9XZWJNZWRpYVBsYXllckNsaWVudEltcGwuaDogQWRkZWQuCisgICAg
ICAgICogc3JjL1dlYk5vZGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViTm9kZTo6
cmVzZXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJOb2RlOjphc3NpZ24pOgorICAgICAgICAoV2Vi
S2l0OjpXZWJOb2RlOjpwYXJlbnROb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2ViTm9kZTo6bm9k
ZU5hbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJOb2RlOjpXZWJOb2RlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViTm9kZTo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYktpdDo6V2ViTm9kZTo6b3Bl
cmF0b3IgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6Ok5vZGU+KToKKyAgICAgICAgKFdlYktpdDo6
V2ViTm9kZTo6ZnJhbWUpOgorICAgICAgICAqIHNyYy9XZWJOb3RpZmljYXRpb24uY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYktpdDo6V2ViTm90aWZpY2F0aW9uOjpyZXNldCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYk5vdGlmaWNhdGlvbjo6YXNzaWduKToKKyAgICAgICAgKFdlYktpdDo6V2ViTm90
aWZpY2F0aW9uOjpsZXNzVGhhbik6CisgICAgICAgIChXZWJLaXQ6OldlYk5vdGlmaWNhdGlvbjo6
aXNIVE1MKToKKyAgICAgICAgKFdlYktpdDo6V2ViTm90aWZpY2F0aW9uOjp1cmwpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJOb3RpZmljYXRpb246Omljb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJO
b3RpZmljYXRpb246OnRpdGxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViTm90aWZpY2F0aW9uOjpi
b2R5KToKKyAgICAgICAgKFdlYktpdDo6V2ViTm90aWZpY2F0aW9uOjpkaXNwYXRjaERpc3BsYXlF
dmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYk5vdGlmaWNhdGlvbjo6ZGlzcGF0Y2hFcnJvckV2
ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViTm90aWZpY2F0aW9uOjpkaXNwYXRjaENsb3NlRXZl
bnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJOb3RpZmljYXRpb246OldlYk5vdGlmaWNhdGlvbik6
CisgICAgICAgIChXZWJLaXQ6OldlYk5vdGlmaWNhdGlvbjo6b3BlcmF0b3I9KToKKyAgICAgICAg
KFdlYktpdDo6V2ViTm90aWZpY2F0aW9uOjpvcGVyYXRvciBXVEY6OlBhc3NSZWZQdHI8Tm90aWZp
Y2F0aW9uPik6CisKKzIwMDktMTEtMDkgIFlhYXIgU2Nobml0bWFuICA8eWFhckBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKICAgICAgICAgVXAt
c3RyZWFtaW5nIENocm9taXVtIEFQSSBzcmMgZmlsZXM6IFdlYkZpbGVDaG9vc2VyLi4uV2ViSW1h
Z2VTa2lhCiAKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTMxMjc2CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklucHV0RWxlbWVudC5j
cHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklucHV0RWxlbWVudC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ3ZTRjYwotLS0gL2Rldi9udWxsCisrKyBiL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViSW5wdXRFbGVtZW50LmNwcApAQCAtMCwwICsxLDg5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYklucHV0RWxlbWVudC5oIgorCisjaW5jbHVkZSAi
SFRNTElucHV0RWxlbWVudC5oIgorI2luY2x1ZGUgIldlYlN0cmluZy5oIgorI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworV2ViSW5wdXRFbGVtZW50OjpXZWJJbnB1dEVsZW1lbnQoY29uc3QgV1RGOjpQ
YXNzUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+JiBlbGVtKQorICAgIDogV2ViRWxlbWVudChlbGVt
LnJlbGVhc2VSZWYoKSkKK3sKK30KKworV2ViSW5wdXRFbGVtZW50JiBXZWJJbnB1dEVsZW1lbnQ6
Om9wZXJhdG9yPShjb25zdCBXVEY6OlBhc3NSZWZQdHI8SFRNTElucHV0RWxlbWVudD4mIGVsZW0p
Cit7CisgICAgV2ViTm9kZTo6YXNzaWduKGVsZW0ucmVsZWFzZVJlZigpKTsKKyAgICByZXR1cm4g
KnRoaXM7Cit9CisKK1dlYklucHV0RWxlbWVudDo6b3BlcmF0b3IgV1RGOjpQYXNzUmVmUHRyPEhU
TUxJbnB1dEVsZW1lbnQ+KCkgY29uc3QKK3sKKyAgICByZXR1cm4gUGFzc1JlZlB0cjxIVE1MSW5w
dXRFbGVtZW50PihzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obV9wcml2YXRlKSk7Cit9
CisKK3ZvaWQgV2ViSW5wdXRFbGVtZW50OjpzZXRBY3RpdmF0ZWRTdWJtaXQoYm9vbCBhY3RpdmF0
ZWQpCit7CisgICAgdW53cmFwPEhUTUxJbnB1dEVsZW1lbnQ+KCktPnNldEFjdGl2YXRlZFN1Ym1p
dChhY3RpdmF0ZWQpOworfQorCisKK3ZvaWQgV2ViSW5wdXRFbGVtZW50OjpzZXRWYWx1ZShjb25z
dCBXZWJTdHJpbmcmIHZhbHVlKQoreworICAgIHVud3JhcDxIVE1MSW5wdXRFbGVtZW50PigpLT5z
ZXRWYWx1ZSh2YWx1ZSk7Cit9CisKK1dlYlN0cmluZyBXZWJJbnB1dEVsZW1lbnQ6OnZhbHVlKCkK
K3sKKyAgICByZXR1cm4gdW53cmFwPEhUTUxJbnB1dEVsZW1lbnQ+KCktPnZhbHVlKCk7Cit9CisK
Kwordm9pZCBXZWJJbnB1dEVsZW1lbnQ6OnNldEF1dG9maWxsZWQoYm9vbCBhdXRvRmlsbGVkKQor
eworICAgIHVud3JhcDxIVE1MSW5wdXRFbGVtZW50PigpLT5zZXRBdXRvZmlsbGVkKGF1dG9GaWxs
ZWQpOworfQorCit2b2lkIFdlYklucHV0RWxlbWVudDo6ZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5n
ZUV2ZW50KCkKK3sKKyAgICB1bndyYXA8SFRNTElucHV0RWxlbWVudD4oKS0+ZGlzcGF0Y2hGb3Jt
Q29udHJvbENoYW5nZUV2ZW50KCk7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwordm9pZCBXZWJJ
bnB1dEVsZW1lbnQ6OnNldFNlbGVjdGlvblJhbmdlKHNpemVfdCBzdGFydCwgc2l6ZV90IGVuZCkK
K3sKKyAgICB1bndyYXA8SFRNTElucHV0RWxlbWVudD4oKS0+c2V0U2VsZWN0aW9uUmFuZ2Uoc3Rh
cnQsIGVuZCk7Cit9Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViSW5wdXRFdmVudC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklu
cHV0RXZlbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1YzU2ZmEK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklucHV0RXZlbnQuY3Bw
CkBAIC0wLDAgKzEsMTU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYklu
cHV0RXZlbnQuaCIKKworI2luY2x1ZGUgIktleWJvYXJkQ29kZXMuaCIKKworI2luY2x1ZGUgPGN0
eXBlLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
CisjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBzdGF0aWNLZXlJ
ZGVudGlmaWVycyh1bnNpZ25lZCBzaG9ydCBrZXlDb2RlKQoreworICAgIHN3aXRjaCAoa2V5Q29k
ZSkgeworICAgIGNhc2UgVktFWV9NRU5VOgorICAgICAgICByZXR1cm4gIkFsdCI7CisgICAgY2Fz
ZSBWS0VZX0NPTlRST0w6CisgICAgICAgIHJldHVybiAiQ29udHJvbCI7CisgICAgY2FzZSBWS0VZ
X1NISUZUOgorICAgICAgICByZXR1cm4gIlNoaWZ0IjsKKyAgICBjYXNlIFZLRVlfQ0FQSVRBTDoK
KyAgICAgICAgcmV0dXJuICJDYXBzTG9jayI7CisgICAgY2FzZSBWS0VZX0xXSU46CisgICAgY2Fz
ZSBWS0VZX1JXSU46CisgICAgICAgIHJldHVybiAiV2luIjsKKyAgICBjYXNlIFZLRVlfQ0xFQVI6
CisgICAgICAgIHJldHVybiAiQ2xlYXIiOworICAgIGNhc2UgVktFWV9ET1dOOgorICAgICAgICBy
ZXR1cm4gIkRvd24iOworICAgIGNhc2UgVktFWV9FTkQ6CisgICAgICAgIHJldHVybiAiRW5kIjsK
KyAgICBjYXNlIFZLRVlfUkVUVVJOOgorICAgICAgICByZXR1cm4gIkVudGVyIjsKKyAgICBjYXNl
IFZLRVlfRVhFQ1VURToKKyAgICAgICAgcmV0dXJuICJFeGVjdXRlIjsKKyAgICBjYXNlIFZLRVlf
RjE6CisgICAgICAgIHJldHVybiAiRjEiOworICAgIGNhc2UgVktFWV9GMjoKKyAgICAgICAgcmV0
dXJuICJGMiI7CisgICAgY2FzZSBWS0VZX0YzOgorICAgICAgICByZXR1cm4gIkYzIjsKKyAgICBj
YXNlIFZLRVlfRjQ6CisgICAgICAgIHJldHVybiAiRjQiOworICAgIGNhc2UgVktFWV9GNToKKyAg
ICAgICAgcmV0dXJuICJGNSI7CisgICAgY2FzZSBWS0VZX0Y2OgorICAgICAgICByZXR1cm4gIkY2
IjsKKyAgICBjYXNlIFZLRVlfRjc6CisgICAgICAgIHJldHVybiAiRjciOworICAgIGNhc2UgVktF
WV9GODoKKyAgICAgICAgcmV0dXJuICJGOCI7CisgICAgY2FzZSBWS0VZX0Y5OgorICAgICAgICBy
ZXR1cm4gIkY5IjsKKyAgICBjYXNlIFZLRVlfRjEwOgorICAgICAgICByZXR1cm4gIkYxMSI7Cisg
ICAgY2FzZSBWS0VZX0YxMjoKKyAgICAgICAgcmV0dXJuICJGMTIiOworICAgIGNhc2UgVktFWV9G
MTM6CisgICAgICAgIHJldHVybiAiRjEzIjsKKyAgICBjYXNlIFZLRVlfRjE0OgorICAgICAgICBy
ZXR1cm4gIkYxNCI7CisgICAgY2FzZSBWS0VZX0YxNToKKyAgICAgICAgcmV0dXJuICJGMTUiOwor
ICAgIGNhc2UgVktFWV9GMTY6CisgICAgICAgIHJldHVybiAiRjE2IjsKKyAgICBjYXNlIFZLRVlf
RjE3OgorICAgICAgICByZXR1cm4gIkYxNyI7CisgICAgY2FzZSBWS0VZX0YxODoKKyAgICAgICAg
cmV0dXJuICJGMTgiOworICAgIGNhc2UgVktFWV9GMTk6CisgICAgICAgIHJldHVybiAiRjE5IjsK
KyAgICBjYXNlIFZLRVlfRjIwOgorICAgICAgICByZXR1cm4gIkYyMCI7CisgICAgY2FzZSBWS0VZ
X0YyMToKKyAgICAgICAgcmV0dXJuICJGMjEiOworICAgIGNhc2UgVktFWV9GMjI6CisgICAgICAg
IHJldHVybiAiRjIyIjsKKyAgICBjYXNlIFZLRVlfRjIzOgorICAgICAgICByZXR1cm4gIkYyMyI7
CisgICAgY2FzZSBWS0VZX0YyNDoKKyAgICAgICAgcmV0dXJuICJGMjQiOworICAgIGNhc2UgVktF
WV9IRUxQOgorICAgICAgICByZXR1cm4gIkhlbHAiOworICAgIGNhc2UgVktFWV9IT01FOgorICAg
ICAgICByZXR1cm4gIkhvbWUiOworICAgIGNhc2UgVktFWV9JTlNFUlQ6CisgICAgICAgIHJldHVy
biAiSW5zZXJ0IjsKKyAgICBjYXNlIFZLRVlfTEVGVDoKKyAgICAgICAgcmV0dXJuICJMZWZ0IjsK
KyAgICBjYXNlIFZLRVlfTkVYVDoKKyAgICAgICAgcmV0dXJuICJQYWdlRG93biI7CisgICAgY2Fz
ZSBWS0VZX1BSSU9SOgorICAgICAgICByZXR1cm4gIlBhZ2VVcCI7CisgICAgY2FzZSBWS0VZX1BB
VVNFOgorICAgICAgICByZXR1cm4gIlBhdXNlIjsKKyAgICBjYXNlIFZLRVlfU05BUFNIT1Q6Cisg
ICAgICAgIHJldHVybiAiUHJpbnRTY3JlZW4iOworICAgIGNhc2UgVktFWV9SSUdIVDoKKyAgICAg
ICAgcmV0dXJuICJSaWdodCI7CisgICAgY2FzZSBWS0VZX1NDUk9MTDoKKyAgICAgICAgcmV0dXJu
ICJTY3JvbGwiOworICAgIGNhc2UgVktFWV9TRUxFQ1Q6CisgICAgICAgIHJldHVybiAiU2VsZWN0
IjsKKyAgICBjYXNlIFZLRVlfVVA6CisgICAgICAgIHJldHVybiAiVXAiOworICAgIGNhc2UgVktF
WV9ERUxFVEU6CisgICAgICAgIHJldHVybiAiVSswMDdGIjsgLy8gU3RhbmRhcmQgc2F5cyB0aGF0
IERFTCBiZWNvbWVzIFUrMDA3Ri4KKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gMDsKKyAg
ICB9Cit9CisKK3ZvaWQgV2ViS2V5Ym9hcmRFdmVudDo6c2V0S2V5SWRlbnRpZmllckZyb21XaW5k
b3dzS2V5Q29kZSgpCit7CisgICAgY29uc3QgY2hhciogaWQgPSBzdGF0aWNLZXlJZGVudGlmaWVy
cyh3aW5kb3dzS2V5Q29kZSk7CisgICAgaWYgKGlkKSB7CisgICAgICAgIHN0cm5jcHkoa2V5SWRl
bnRpZmllciwgaWQsIHNpemVvZihrZXlJZGVudGlmaWVyKSAtIDEpOworICAgICAgICBrZXlJZGVu
dGlmaWVyW3NpemVvZihrZXlJZGVudGlmaWVyKSAtIDFdID0gJ1wwJzsKKyAgICB9IGVsc2UKKyAg
ICAgICAgc25wcmludGYoa2V5SWRlbnRpZmllciwgc2l6ZW9mKGtleUlkZW50aWZpZXIpLCAiVSsl
MDRYIiwgdG91cHBlcih3aW5kb3dzS2V5Q29kZSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW5wdXRFdmVudENvbnZlcnNp
b24uY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbnB1dEV2ZW50Q29udmVyc2lvbi5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUwMDEyOQotLS0gL2Rldi9udWxs
CisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW5wdXRFdmVudENvbnZlcnNpb24uY3BwCkBA
IC0wLDAgKzEsMjU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYklucHV0RXZl
bnRDb252ZXJzaW9uLmgiCisKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiS2V5
Ym9hcmRDb2Rlcy5oIgorI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJNb3Vz
ZUV2ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSAi
UGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCisj
aW5jbHVkZSAiU2Nyb2xsVmlldy5oIgorI2luY2x1ZGUgIldlYklucHV0RXZlbnQuaCIKKyNpbmNs
dWRlICJXaWRnZXQuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCisvLyBNYWtlUGxhdGZvcm1Nb3VzZUV2ZW50IC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1BsYXRmb3JtTW91c2VFdmVudEJ1
aWxkZXI6OlBsYXRmb3JtTW91c2VFdmVudEJ1aWxkZXIoV2lkZ2V0KiB3aWRnZXQsIGNvbnN0IFdl
Yk1vdXNlRXZlbnQmIGUpCit7CisgICAgLy8gRklYTUU6IHdpZGdldCBpcyBhbHdheXMgdG9wbGV2
ZWwsIHVubGVzcyBpdCdzIGEgcG9wdXAuICBXZSBtYXkgYmUgYWJsZQorICAgIC8vIHRvIGdldCBy
aWQgb2YgdGhpcyBvbmNlIHdlIGFic3RyYWN0IHBvcHVwcyBpbnRvIGEgV2ViS2l0IEFQSS4KKyAg
ICBtX3Bvc2l0aW9uID0gd2lkZ2V0LT5jb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3coSW50UG9p
bnQoZS54LCBlLnkpKTsKKyAgICBtX2dsb2JhbFBvc2l0aW9uID0gSW50UG9pbnQoZS5nbG9iYWxY
LCBlLmdsb2JhbFkpOworICAgIG1fYnV0dG9uID0gc3RhdGljX2Nhc3Q8TW91c2VCdXR0b24+KGUu
YnV0dG9uKTsKKyAgICBtX3NoaWZ0S2V5ID0gKGUubW9kaWZpZXJzICYgV2ViSW5wdXRFdmVudDo6
U2hpZnRLZXkpOworICAgIG1fY3RybEtleSA9IChlLm1vZGlmaWVycyAmIFdlYklucHV0RXZlbnQ6
OkNvbnRyb2xLZXkpOworICAgIG1fYWx0S2V5ID0gKGUubW9kaWZpZXJzICYgV2ViSW5wdXRFdmVu
dDo6QWx0S2V5KTsKKyAgICBtX21ldGFLZXkgPSAoZS5tb2RpZmllcnMgJiBXZWJJbnB1dEV2ZW50
OjpNZXRhS2V5KTsKKyAgICBtX21vZGlmaWVyRmxhZ3MgPSBlLm1vZGlmaWVyczsKKyAgICBtX3Rp
bWVzdGFtcCA9IGUudGltZVN0YW1wU2Vjb25kczsKKyAgICBtX2NsaWNrQ291bnQgPSBlLmNsaWNr
Q291bnQ7CisKKyAgICBzd2l0Y2ggKGUudHlwZSkgeworICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6
TW91c2VNb3ZlOgorICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6TW91c2VMZWF2ZTogIC8vIHN5bnRo
ZXNpemUgYSBtb3ZlIGV2ZW50CisgICAgICAgIG1fZXZlbnRUeXBlID0gTW91c2VFdmVudE1vdmVk
OworICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6TW91c2VEb3duOgor
ICAgICAgICBtX2V2ZW50VHlwZSA9IE1vdXNlRXZlbnRQcmVzc2VkOworICAgICAgICBicmVhazsK
KworICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6TW91c2VVcDoKKyAgICAgICAgbV9ldmVudFR5cGUg
PSBNb3VzZUV2ZW50UmVsZWFzZWQ7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCisvLyBQbGF0Zm9ybVdoZWVs
RXZlbnRCdWlsZGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKK1BsYXRmb3JtV2hlZWxFdmVudEJ1aWxkZXI6OlBsYXRmb3JtV2hlZWxFdmVudEJ1
aWxkZXIoV2lkZ2V0KiB3aWRnZXQsIGNvbnN0IFdlYk1vdXNlV2hlZWxFdmVudCYgZSkKK3sKKyAg
ICBtX3Bvc2l0aW9uID0gd2lkZ2V0LT5jb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3coSW50UG9p
bnQoZS54LCBlLnkpKTsKKyAgICBtX2dsb2JhbFBvc2l0aW9uID0gSW50UG9pbnQoZS5nbG9iYWxY
LCBlLmdsb2JhbFkpOworICAgIG1fZGVsdGFYID0gZS5kZWx0YVg7CisgICAgbV9kZWx0YVkgPSBl
LmRlbHRhWTsKKyAgICBtX3doZWVsVGlja3NYID0gZS53aGVlbFRpY2tzWDsKKyAgICBtX3doZWVs
VGlja3NZID0gZS53aGVlbFRpY2tzWTsKKyAgICBtX2lzQWNjZXB0ZWQgPSBmYWxzZTsKKyAgICBt
X2dyYW51bGFyaXR5ID0gZS5zY3JvbGxCeVBhZ2UgPworICAgICAgICBTY3JvbGxCeVBhZ2VXaGVl
bEV2ZW50IDogU2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQ7CisgICAgbV9zaGlmdEtleSA9IChlLm1v
ZGlmaWVycyAmIFdlYklucHV0RXZlbnQ6OlNoaWZ0S2V5KTsKKyAgICBtX2N0cmxLZXkgPSAoZS5t
b2RpZmllcnMgJiBXZWJJbnB1dEV2ZW50OjpDb250cm9sS2V5KTsKKyAgICBtX2FsdEtleSA9IChl
Lm1vZGlmaWVycyAmIFdlYklucHV0RXZlbnQ6OkFsdEtleSk7CisgICAgbV9tZXRhS2V5ID0gKGUu
bW9kaWZpZXJzICYgV2ViSW5wdXRFdmVudDo6TWV0YUtleSk7Cit9CisKKy8vIE1ha2VQbGF0Zm9y
bUtleWJvYXJkRXZlbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKworc3RhdGljIGlubGluZSBjb25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OlR5
cGUgdG9QbGF0Zm9ybUtleWJvYXJkRXZlbnRUeXBlKFdlYklucHV0RXZlbnQ6OlR5cGUgdHlwZSkK
K3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFdlYklucHV0RXZlbnQ6OktleVVwOgor
ICAgICAgICByZXR1cm4gUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpLZXlVcDsKKyAgICBjYXNlIFdl
YklucHV0RXZlbnQ6OktleURvd246CisgICAgICAgIHJldHVybiBQbGF0Zm9ybUtleWJvYXJkRXZl
bnQ6OktleURvd247CisgICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpSYXdLZXlEb3duOgorICAgICAg
ICByZXR1cm4gUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpSYXdLZXlEb3duOworICAgIGNhc2UgV2Vi
SW5wdXRFdmVudDo6Q2hhcjoKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6
Q2hhcjsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9
CisgICAgcmV0dXJuIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6S2V5RG93bjsKK30KKworUGxhdGZv
cm1LZXlib2FyZEV2ZW50QnVpbGRlcjo6UGxhdGZvcm1LZXlib2FyZEV2ZW50QnVpbGRlcihjb25z
dCBXZWJLZXlib2FyZEV2ZW50JiBlKQoreworICAgIG1fdHlwZSA9IHRvUGxhdGZvcm1LZXlib2Fy
ZEV2ZW50VHlwZShlLnR5cGUpOworICAgIG1fdGV4dCA9IFN0cmluZyhlLnRleHQpOworICAgIG1f
dW5tb2RpZmllZFRleHQgPSBTdHJpbmcoZS51bm1vZGlmaWVkVGV4dCk7CisgICAgbV9rZXlJZGVu
dGlmaWVyID0gU3RyaW5nKGUua2V5SWRlbnRpZmllcik7CisgICAgbV9hdXRvUmVwZWF0ID0gKGUu
bW9kaWZpZXJzICYgV2ViSW5wdXRFdmVudDo6SXNBdXRvUmVwZWF0KTsKKyAgICBtX3dpbmRvd3NW
aXJ0dWFsS2V5Q29kZSA9IGUud2luZG93c0tleUNvZGU7CisgICAgbV9uYXRpdmVWaXJ0dWFsS2V5
Q29kZSA9IGUubmF0aXZlS2V5Q29kZTsKKyAgICBtX2lzS2V5cGFkID0gKGUubW9kaWZpZXJzICYg
V2ViSW5wdXRFdmVudDo6SXNLZXlQYWQpOworICAgIG1fc2hpZnRLZXkgPSAoZS5tb2RpZmllcnMg
JiBXZWJJbnB1dEV2ZW50OjpTaGlmdEtleSk7CisgICAgbV9jdHJsS2V5ID0gKGUubW9kaWZpZXJz
ICYgV2ViSW5wdXRFdmVudDo6Q29udHJvbEtleSk7CisgICAgbV9hbHRLZXkgPSAoZS5tb2RpZmll
cnMgJiBXZWJJbnB1dEV2ZW50OjpBbHRLZXkpOworICAgIG1fbWV0YUtleSA9IChlLm1vZGlmaWVy
cyAmIFdlYklucHV0RXZlbnQ6Ok1ldGFLZXkpOworICAgIG1faXNTeXN0ZW1LZXkgPSBlLmlzU3lz
dGVtS2V5OworfQorCit2b2lkIFBsYXRmb3JtS2V5Ym9hcmRFdmVudEJ1aWxkZXI6OnNldEtleVR5
cGUoVHlwZSB0eXBlKQoreworICAgIC8vIEFjY29yZGluZyB0byB0aGUgYmVoYXZpb3Igb2YgV2Vi
a2l0IGluIFdpbmRvd3MgcGxhdGZvcm0sCisgICAgLy8gd2UgbmVlZCB0byBjb252ZXJ0IEtleURv
d24gdG8gUmF3S2V5ZG93biBhbmQgQ2hhciBldmVudHMKKyAgICAvLyBTZWUgV2ViS2l0L1dlYktp
dC9XaW4vV2ViVmlldy5jcHAKKyAgICBBU1NFUlQobV90eXBlID09IEtleURvd24pOworICAgIEFT
U0VSVCh0eXBlID09IFJhd0tleURvd24gfHwgdHlwZSA9PSBDaGFyKTsKKyAgICBtX3R5cGUgPSB0
eXBlOworCisgICAgaWYgKHR5cGUgPT0gUmF3S2V5RG93bikgeworICAgICAgICBtX3RleHQgPSBT
dHJpbmcoKTsKKyAgICAgICAgbV91bm1vZGlmaWVkVGV4dCA9IFN0cmluZygpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIG1fa2V5SWRlbnRpZmllciA9IFN0cmluZygpOworICAgICAgICBtX3dpbmRv
d3NWaXJ0dWFsS2V5Q29kZSA9IDA7CisgICAgfQorfQorCisvLyBQbGVhc2UgcmVmZXIgdG8gYnVn
IGh0dHA6Ly9iL2lzc3VlP2lkPTk2MTE5Miwgd2hpY2ggdGFsa3MgYWJvdXQgV2Via2l0CisvLyBr
ZXlib2FyZCBldmVudCBoYW5kbGluZyBjaGFuZ2VzLiBJdCBhbHNvIG1lbnRpb25zIHRoZSBsaXN0
IG9mIGtleXMKKy8vIHdoaWNoIGRvbid0IGhhdmUgYXNzb2NpYXRlZCBjaGFyYWN0ZXIgZXZlbnRz
LgorYm9vbCBQbGF0Zm9ybUtleWJvYXJkRXZlbnRCdWlsZGVyOjppc0NoYXJhY3RlcktleSgpIGNv
bnN0Cit7CisgICAgc3dpdGNoICh3aW5kb3dzVmlydHVhbEtleUNvZGUoKSkgeworICAgIGNhc2Ug
VktFWV9CQUNLOgorICAgIGNhc2UgVktFWV9FU0NBUEU6CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbnQgZ2V0V2ViSW5wdXRNb2Rp
ZmllcnMoY29uc3QgVUlFdmVudFdpdGhLZXlTdGF0ZSYgZXZlbnQpCit7CisgICAgaW50IG1vZGlm
aWVycyA9IDA7CisgICAgaWYgKGV2ZW50LmN0cmxLZXkoKSkKKyAgICAgICAgbW9kaWZpZXJzIHw9
IFdlYklucHV0RXZlbnQ6OkNvbnRyb2xLZXk7CisgICAgaWYgKGV2ZW50LnNoaWZ0S2V5KCkpCisg
ICAgICAgIG1vZGlmaWVycyB8PSBXZWJJbnB1dEV2ZW50OjpTaGlmdEtleTsKKyAgICBpZiAoZXZl
bnQuYWx0S2V5KCkpCisgICAgICAgIG1vZGlmaWVycyB8PSBXZWJJbnB1dEV2ZW50OjpBbHRLZXk7
CisgICAgaWYgKGV2ZW50Lm1ldGFLZXkoKSkKKyAgICAgICAgbW9kaWZpZXJzIHw9IFdlYklucHV0
RXZlbnQ6Ok1ldGFLZXk7CisgICAgcmV0dXJuIG1vZGlmaWVyczsKK30KKworV2ViTW91c2VFdmVu
dEJ1aWxkZXI6OldlYk1vdXNlRXZlbnRCdWlsZGVyKGNvbnN0IFNjcm9sbFZpZXcqIHZpZXcsIGNv
bnN0IE1vdXNlRXZlbnQmIGV2ZW50KQoreworICAgIGlmIChldmVudC50eXBlKCkgPT0gZXZlbnRO
YW1lcygpLm1vdXNlbW92ZUV2ZW50KQorICAgICAgICB0eXBlID0gV2ViSW5wdXRFdmVudDo6TW91
c2VNb3ZlOworICAgIGVsc2UgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vv
dXRFdmVudCkKKyAgICAgICAgdHlwZSA9IFdlYklucHV0RXZlbnQ6Ok1vdXNlTGVhdmU7CisgICAg
ZWxzZSBpZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW92ZXJFdmVudCkKKyAg
ICAgICAgdHlwZSA9IFdlYklucHV0RXZlbnQ6Ok1vdXNlRW50ZXI7CisgICAgZWxzZSBpZiAoZXZl
bnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCkKKyAgICAgICAgdHlwZSA9
IFdlYklucHV0RXZlbnQ6Ok1vdXNlRG93bjsKKyAgICBlbHNlIGlmIChldmVudC50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCkKKyAgICAgICAgdHlwZSA9IFdlYklucHV0RXZlbnQ6
Ok1vdXNlVXA7CisgICAgZWxzZQorICAgICAgICByZXR1cm47IC8vIFNraXAgYWxsIG90aGVyIG1v
dXNlIGV2ZW50cy4KKyAgICB0aW1lU3RhbXBTZWNvbmRzID0gZXZlbnQudGltZVN0YW1wKCkgKiAx
LjBlLTM7CisgICAgc3dpdGNoIChldmVudC5idXR0b24oKSkgeworICAgIGNhc2UgTGVmdEJ1dHRv
bjoKKyAgICAgICAgYnV0dG9uID0gV2ViTW91c2VFdmVudDo6QnV0dG9uTGVmdDsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBNaWRkbGVCdXR0b246CisgICAgICAgIGJ1dHRvbiA9IFdlYk1vdXNl
RXZlbnQ6OkJ1dHRvbk1pZGRsZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSaWdodEJ1dHRv
bjoKKyAgICAgICAgYnV0dG9uID0gV2ViTW91c2VFdmVudDo6QnV0dG9uUmlnaHQ7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBtb2RpZmllcnMgPSBnZXRXZWJJbnB1dE1vZGlmaWVycyhldmVu
dCk7CisgICAgaWYgKGV2ZW50LmJ1dHRvbkRvd24oKSkgeworICAgICAgICBzd2l0Y2ggKGV2ZW50
LmJ1dHRvbigpKSB7CisgICAgICAgIGNhc2UgTGVmdEJ1dHRvbjoKKyAgICAgICAgICAgIG1vZGlm
aWVycyB8PSBXZWJJbnB1dEV2ZW50OjpMZWZ0QnV0dG9uRG93bjsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIE1pZGRsZUJ1dHRvbjoKKyAgICAgICAgICAgIG1vZGlmaWVycyB8PSBX
ZWJJbnB1dEV2ZW50OjpNaWRkbGVCdXR0b25Eb3duOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgUmlnaHRCdXR0b246CisgICAgICAgICAgICBtb2RpZmllcnMgfD0gV2ViSW5wdXRF
dmVudDo6UmlnaHRCdXR0b25Eb3duOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICB9CisgICAgSW50UG9pbnQgcCA9IHZpZXctPmNvbnRlbnRzVG9XaW5kb3coSW50UG9pbnQoZXZl
bnQucGFnZVgoKSwgZXZlbnQucGFnZVkoKSkpOworICAgIGdsb2JhbFggPSBldmVudC5zY3JlZW5Y
KCk7CisgICAgZ2xvYmFsWSA9IGV2ZW50LnNjcmVlblkoKTsKKyAgICB3aW5kb3dYID0gcC54KCk7
CisgICAgd2luZG93WSA9IHAueSgpOworICAgIHggPSBldmVudC5vZmZzZXRYKCk7CisgICAgeSA9
IGV2ZW50Lm9mZnNldFkoKTsKK30KKworV2ViS2V5Ym9hcmRFdmVudEJ1aWxkZXI6OldlYktleWJv
YXJkRXZlbnRCdWlsZGVyKGNvbnN0IEtleWJvYXJkRXZlbnQmIGV2ZW50KQoreworICAgIGlmIChl
dmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCkKKyAgICAgICAgdHlwZSA9
IEtleURvd247CisgICAgZWxzZSBpZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXl1
cEV2ZW50KQorICAgICAgICB0eXBlID0gV2ViSW5wdXRFdmVudDo6S2V5VXA7CisgICAgZWxzZSBp
ZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50KQorICAgICAgICB0
eXBlID0gV2ViSW5wdXRFdmVudDo6Q2hhcjsKKyAgICBlbHNlCisgICAgICAgIHJldHVybjsgLy8g
U2tpcCBhbGwgb3RoZXIga2V5Ym9hcmQgZXZlbnRzLgorICAgIG1vZGlmaWVycyA9IGdldFdlYklu
cHV0TW9kaWZpZXJzKGV2ZW50KTsKKyAgICB0aW1lU3RhbXBTZWNvbmRzID0gZXZlbnQudGltZVN0
YW1wKCkgKiAxLjBlLTM7CisgICAgd2luZG93c0tleUNvZGUgPSBldmVudC5rZXlDb2RlKCk7Cisg
ICAgbmF0aXZlS2V5Q29kZSA9IGV2ZW50LmtleUV2ZW50KCktPm5hdGl2ZVZpcnR1YWxLZXlDb2Rl
KCk7CisgICAgdW5zaWduZWQgaW50IG51bUNoYXJzID0gc3RkOjptaW4oZXZlbnQua2V5RXZlbnQo
KS0+dGV4dCgpLmxlbmd0aCgpLAorICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KFdl
YktleWJvYXJkRXZlbnQ6OnRleHRMZW5ndGhDYXApKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBp
ID0gMDsgaSA8IG51bUNoYXJzOyBpKyspIHsKKyAgICAgICAgdGV4dFtpXSA9IGV2ZW50LmtleUV2
ZW50KCktPnRleHQoKVtpXTsKKyAgICAgICAgdW5tb2RpZmllZFRleHRbaV0gPSBldmVudC5rZXlF
dmVudCgpLT51bm1vZGlmaWVkVGV4dCgpW2ldOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklucHV0RXZlbnRDb252
ZXJzaW9uLmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklucHV0RXZlbnRDb252ZXJzaW9uLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM5Y2Y4MgotLS0gL2Rldi9udWxs
CisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW5wdXRFdmVudENvbnZlcnNpb24uaApAQCAt
MCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBXZWJJbnB1dEV2ZW50Q29udmVyc2lvbl9oCisjZGVmaW5lIFdl
YklucHV0RXZlbnRDb252ZXJzaW9uX2gKKworLy8gRklYTUU6IFRoaXMgcmVsYXRpdmUgcGF0aCBp
cyBhIHRlbXBvcmFyeSBoYWNrIHRvIHN1cHBvcnQgdXNpbmcgdGhpcworLy8gaGVhZGVyIGZyb20g
d2Via2l0L2dsdWUuCisjaW5jbHVkZSAiLi4vcHVibGljL1dlYklucHV0RXZlbnQuaCIKKworI2lu
Y2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VF
dmVudC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CitjbGFzcyBLZXlib2FyZEV2ZW50OworY2xhc3MgTW91c2VFdmVudDsKK2NsYXNzIFNj
cm9sbFZpZXc7CitjbGFzcyBXaWRnZXQ7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFz
cyBXZWJNb3VzZUV2ZW50OworY2xhc3MgV2ViTW91c2VXaGVlbEV2ZW50OworY2xhc3MgV2ViS2V5
Ym9hcmRFdmVudDsKKworLy8gVGhlc2UgY2xhc3NlcyBhcmUgdXNlZCB0byBjb252ZXJ0IGZyb20g
V2ViSW5wdXRFdmVudCBzdWJjbGFzc2VzIHRvCisvLyBjb3JyZXNwb25kaW5nIFdlYkNvcmUgZXZl
bnRzLgorCitjbGFzcyBQbGF0Zm9ybU1vdXNlRXZlbnRCdWlsZGVyIDogcHVibGljIFdlYkNvcmU6
OlBsYXRmb3JtTW91c2VFdmVudCB7CitwdWJsaWM6CisgICAgUGxhdGZvcm1Nb3VzZUV2ZW50QnVp
bGRlcihXZWJDb3JlOjpXaWRnZXQqLCBjb25zdCBXZWJNb3VzZUV2ZW50Jik7Cit9OworCitjbGFz
cyBQbGF0Zm9ybVdoZWVsRXZlbnRCdWlsZGVyIDogcHVibGljIFdlYkNvcmU6OlBsYXRmb3JtV2hl
ZWxFdmVudCB7CitwdWJsaWM6CisgICAgUGxhdGZvcm1XaGVlbEV2ZW50QnVpbGRlcihXZWJDb3Jl
OjpXaWRnZXQqLCBjb25zdCBXZWJNb3VzZVdoZWVsRXZlbnQmKTsKK307CisKK2NsYXNzIFBsYXRm
b3JtS2V5Ym9hcmRFdmVudEJ1aWxkZXIgOiBwdWJsaWMgV2ViQ29yZTo6UGxhdGZvcm1LZXlib2Fy
ZEV2ZW50IHsKK3B1YmxpYzoKKyAgICBQbGF0Zm9ybUtleWJvYXJkRXZlbnRCdWlsZGVyKGNvbnN0
IFdlYktleWJvYXJkRXZlbnQmKTsKKyAgICB2b2lkIHNldEtleVR5cGUoVHlwZSk7CisgICAgYm9v
bCBpc0NoYXJhY3RlcktleSgpIGNvbnN0OworfTsKKworLy8gQ29udmVydHMgYSBXZWJDb3JlOjpN
b3VzZUV2ZW50IHRvIGEgY29ycmVzcG9uZGluZyBXZWJNb3VzZUV2ZW50LiB2aWV3IGlzCisvLyB0
aGUgU2Nyb2xsVmlldyBjb3JyZXNwb25kaW5nIHRvIHRoZSBldmVudC4gIFJldHVybnMgdHJ1ZSBp
ZiBzdWNjZXNzZnVsLgorLy8gTk9URTogVGhpcyBpcyBvbmx5IGltcGxlbWVudGVkIGZvciBtb3Vz
ZW1vdmUsIG1vdXNlb3ZlciwgbW91c2VvdXQsCisvLyBtb3VzZWRvd24gYW5kIG1vdXNldXAuICBJ
ZiB0aGUgZXZlbnQgbWFwcGluZyBmYWlscywgdGhlIGV2ZW50IHR5cGUgd2lsbAorLy8gYmUgc2V0
IHRvIFVuZGVmaW5lZC4KK2NsYXNzIFdlYk1vdXNlRXZlbnRCdWlsZGVyIDogcHVibGljIFdlYk1v
dXNlRXZlbnQgeworcHVibGljOgorICAgIFdlYk1vdXNlRXZlbnRCdWlsZGVyKGNvbnN0IFdlYkNv
cmU6OlNjcm9sbFZpZXcqLCBjb25zdCBXZWJDb3JlOjpNb3VzZUV2ZW50Jik7Cit9OworCisvLyBD
b252ZXJ0cyBhIFdlYkNvcmU6OktleWJvYXJkRXZlbnQgdG8gYSBjb3JyZXNwb25kaW5nIFdlYktl
eWJvYXJkRXZlbnQuCisvLyBSZXR1cm5zIHRydWUgaWYgc3VjY2Vzc2Z1bC4gIE5PVEU6IFRoaXMg
aXMgb25seSBpbXBsZW1lbnRlZCBmb3Iga2V5ZG93bgorLy8gYW5kIGtleXVwLiAgSWYgdGhlIGV2
ZW50IG1hcHBpbmcgZmFpbHMsIHRoZSBldmVudCB0eXBlIHdpbGwgYmUgc2V0IHRvCisvLyBVbmRl
ZmluZWQuCitjbGFzcyBXZWJLZXlib2FyZEV2ZW50QnVpbGRlciA6IHB1YmxpYyBXZWJLZXlib2Fy
ZEV2ZW50IHsKK3B1YmxpYzoKKyAgICBXZWJLZXlib2FyZEV2ZW50QnVpbGRlcihjb25zdCBXZWJD
b3JlOjpLZXlib2FyZEV2ZW50Jik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYktpdC5jcHAgYi9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYktpdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uYTEyOWY4NQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViS2l0
LmNwcApAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJL
aXQuaCIKKworI2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgorI2luY2x1ZGUgIkRPTVRpbWVyLmgi
CisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIK
KyNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKKyNpbmNsdWRlICJXZWJNZWRpYVBsYXllckNsaWVu
dEltcGwuaCIKKyNpbmNsdWRlICJXZWJTb2NrZXQuaCIKKyNpbmNsdWRlICJXb3JrZXJDb250ZXh0
RXhlY3V0aW9uUHJveHkuaCIKKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVk
ZSA8d3RmL1RocmVhZGluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGljIFdlYktp
dENsaWVudCogc193ZWJLaXRDbGllbnQgPSAwOworc3RhdGljIGJvb2wgc19sYXlvdXRUZXN0TW9k
ZSA9IGZhbHNlOworCit2b2lkIGluaXRpYWxpemUoV2ViS2l0Q2xpZW50KiB3ZWJLaXRDbGllbnQp
Cit7CisgICAgQVNTRVJUKHdlYktpdENsaWVudCk7CisgICAgQVNTRVJUKCFzX3dlYktpdENsaWVu
dCk7CisgICAgc193ZWJLaXRDbGllbnQgPSB3ZWJLaXRDbGllbnQ7CisKKyAgICBXVEY6OmluaXRp
YWxpemVUaHJlYWRpbmcoKTsKKyAgICBXZWJDb3JlOjpBdG9taWNTdHJpbmc6OmluaXQoKTsKKwor
ICAgIC8vIENocm9taXVtIHNldHMgdGhlIG1pbmltdW0gaW50ZXJ2YWwgdGltZW91dCB0byA0bXMs
IG92ZXJyaWRpbmcgdGhlCisgICAgLy8gZGVmYXVsdCBvZiAxMG1zLiAgV2UnZCBsaWtlIHRvIGdv
IGxvd2VyLCBob3dldmVyIHRoZXJlIGFyZSBwb29ybHkKKyAgICAvLyBjb2RlZCB3ZWJzaXRlcyBv
dXQgdGhlcmUgd2hpY2ggZG8gY3JlYXRlIENQVS1zcGlubmluZyBsb29wcy4gIFVzaW5nCisgICAg
Ly8gNG1zIHByZXZlbnRzIHRoZSBDUFUgZnJvbSBzcGlubmluZyB0b28gYnVzaWx5IGFuZCBwcm92
aWRlcyBhIGJhbGFuY2UKKyAgICAvLyBiZXR3ZWVuIENQVSBzcGlubmluZyBhbmQgdGhlIHNtYWxs
ZXN0IHBvc3NpYmxlIGludGVydmFsIHRpbWVyLgorICAgIFdlYkNvcmU6OkRPTVRpbWVyOjpzZXRN
aW5UaW1lckludGVydmFsKDAuMDA0KTsKKworICAgIC8vIFRoZXJlIGFyZSBzb21lIGNvZGUgcGF0
aHMgKGZvciBleGFtcGxlLCBydW5uaW5nIFdlYktpdCBpbiB0aGUgYnJvd3NlcgorICAgIC8vIHBy
b2Nlc3MgYW5kIGNhbGxpbmcgaW50byBMb2NhbFN0b3JhZ2UgYmVmb3JlIGFueXRoaW5nIGVsc2Up
IHdoZXJlIHRoZQorICAgIC8vIFVURjggc3RyaW5nIGVuY29kaW5nIHRhYmxlcyBhcmUgdXNlZCBv
biBhIGJhY2tncm91bmQgdGhyZWFkIGJlZm9yZQorICAgIC8vIHRoZXkncmUgc2V0IHVwLiAgVGhp
cyBpcyBhIHByb2JsZW0gYmVjYXVzZSB0aGVpciBzZXQgdXAgcm91dGluZXMgYXNzZXJ0CisgICAg
Ly8gdGhleSdyZSBydW5uaW5nIG9uIHRoZSBtYWluIFdlYktpdFRocmVhZC4gIEl0IG1pZ2h0IGJl
IHBvc3NpYmxlIHRvIG1ha2UKKyAgICAvLyB0aGUgaW5pdGlhbGl6YXRpb24gdGhyZWFkLXNhZmUs
IGJ1dCBnaXZlbiB0aGF0IHNvIG1hbnkgY29kZSBwYXRocyB1c2UKKyAgICAvLyB0aGlzLCBpbml0
aWFsaXppbmcgdGhpcyBsYXppbHkgcHJvYmFibHkgZG9lc24ndCBidXkgdXMgbXVjaC4KKyAgICBX
ZWJDb3JlOjpVVEY4RW5jb2RpbmcoKTsKK30KKwordm9pZCBzaHV0ZG93bigpCit7CisgICAgc193
ZWJLaXRDbGllbnQgPSAwOworfQorCitXZWJLaXRDbGllbnQqIHdlYktpdENsaWVudCgpCit7Cisg
ICAgcmV0dXJuIHNfd2ViS2l0Q2xpZW50OworfQorCit2b2lkIHNldExheW91dFRlc3RNb2RlKGJv
b2wgdmFsdWUpCit7CisgICAgc19sYXlvdXRUZXN0TW9kZSA9IHZhbHVlOworfQorCitib29sIGxh
eW91dFRlc3RNb2RlKCkKK3sKKyAgICByZXR1cm4gc19sYXlvdXRUZXN0TW9kZTsKK30KKwordm9p
ZCByZXNldFBsdWdpbkNhY2hlKGJvb2wgcmVsb2FkUGFnZXMpCit7CisgICAgV2ViQ29yZTo6UGFn
ZTo6cmVmcmVzaFBsdWdpbnMocmVsb2FkUGFnZXMpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTWVkaWFQbGF5ZXJDbGllbnRJ
bXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmEzNTM1Ci0tLSAvZGV2L251
bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJNZWRpYVBsYXllckNsaWVudEltcGwuY3Bw
CkBAIC0wLDAgKzEsMzk3IEBACisvLyBDb3B5cmlnaHQgKGMpIDIwMDkgVGhlIENocm9taXVtIEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2Vi
TWVkaWFQbGF5ZXJDbGllbnRJbXBsLmgiCisKKyNpZiBFTkFCTEUoVklERU8pCisKKyNpbmNsdWRl
ICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKKyNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5o
IgorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJNZWRpYVBsYXllci5oIgorI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiVGltZVJhbmdlcy5oIgorCisjaW5jbHVkZSAi
V2ViQ2FudmFzLmgiCisjaW5jbHVkZSAiV2ViQ1N0cmluZy5oIgorI2luY2x1ZGUgIldlYkZyYW1l
Q2xpZW50LmgiCisjaW5jbHVkZSAiV2ViRnJhbWVJbXBsLmgiCisjaW5jbHVkZSAiV2ViS2l0Lmgi
CisjaW5jbHVkZSAiV2ViS2l0Q2xpZW50LmgiCisjaW5jbHVkZSAiV2ViTWVkaWFQbGF5ZXIuaCIK
KyNpbmNsdWRlICJXZWJNaW1lUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJXZWJSZWN0LmgiCisjaW5j
bHVkZSAiV2ViU2l6ZS5oIgorI2luY2x1ZGUgIldlYlN0cmluZy5oIgorI2luY2x1ZGUgIldlYlVS
TC5oIgorCisvLyBXZWJDb21tb24uaCBkZWZpbmVzIFdFQktJVF9VU0lOR19TS0lBIHNvIHRoaXMg
aGFzIHRvIGJlIGluY2x1ZGVkIGxhc3QuCisjaWYgV0VCS0lUX1VTSU5HX1NLSUEKKyNpbmNsdWRl
ICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCisjZW5kaWYKKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsK
Kworc3RhdGljIFdlYk1lZGlhUGxheWVyKiBjcmVhdGVXZWJNZWRpYVBsYXllcigKKyAgICBXZWJN
ZWRpYVBsYXllckNsaWVudCogY2xpZW50LCBGcmFtZSogZnJhbWUpCit7CisgICAgV2ViRnJhbWVJ
bXBsKiB3ZWJGcmFtZSA9IFdlYkZyYW1lSW1wbDo6ZnJvbUZyYW1lKGZyYW1lKTsKKyAgICBpZiAo
IXdlYkZyYW1lLT5jbGllbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHdlYkZy
YW1lLT5jbGllbnQoKS0+Y3JlYXRlTWVkaWFQbGF5ZXIod2ViRnJhbWUsIGNsaWVudCk7Cit9CisK
K2Jvb2wgV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjptX2lzRW5hYmxlZCA9IGZhbHNlOworCiti
b29sIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6aXNFbmFibGVkKCkKK3sKKyAgICByZXR1cm4g
bV9pc0VuYWJsZWQ7Cit9CisKK3ZvaWQgV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpzZXRJc0Vu
YWJsZWQoYm9vbCBpc0VuYWJsZWQpCit7CisgICAgbV9pc0VuYWJsZWQgPSBpc0VuYWJsZWQ7Cit9
CisKK3ZvaWQgV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpyZWdpc3RlclNlbGYoTWVkaWFFbmdp
bmVSZWdpc3RyYXIgcmVnaXN0cmFyKQoreworICAgIGlmIChtX2lzRW5hYmxlZCkgeworICAgICAg
ICByZWdpc3RyYXIoV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpjcmVhdGUsCisgICAgICAgICAg
ICAgICAgICBXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OmdldFN1cHBvcnRlZFR5cGVzLAorICAg
ICAgICAgICAgICAgICAgV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpzdXBwb3J0c1R5cGUpOwor
ICAgIH0KK30KKworLy8gV2ViTWVkaWFQbGF5ZXJDbGllbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordm9pZCBXZWJNZWRpYVBsYXll
ckNsaWVudEltcGw6Om5ldHdvcmtTdGF0ZUNoYW5nZWQoKQoreworICAgIEFTU0VSVChtX21lZGlh
UGxheWVyKTsKKyAgICBtX21lZGlhUGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7Cit9CisK
K3ZvaWQgV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpyZWFkeVN0YXRlQ2hhbmdlZCgpCit7Cisg
ICAgQVNTRVJUKG1fbWVkaWFQbGF5ZXIpOworICAgIG1fbWVkaWFQbGF5ZXItPnJlYWR5U3RhdGVD
aGFuZ2VkKCk7Cit9CisKK3ZvaWQgV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjp2b2x1bWVDaGFu
Z2VkKCkKK3sKKyAgICBBU1NFUlQobV9tZWRpYVBsYXllcik7CisgICAgbV9tZWRpYVBsYXllci0+
dm9sdW1lQ2hhbmdlZCgpOworfQorCit2b2lkIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6dGlt
ZUNoYW5nZWQoKQoreworICAgIEFTU0VSVChtX21lZGlhUGxheWVyKTsKKyAgICBtX21lZGlhUGxh
eWVyLT50aW1lQ2hhbmdlZCgpOworfQorCit2b2lkIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6
cmVwYWludCgpCit7CisgICAgQVNTRVJUKG1fbWVkaWFQbGF5ZXIpOworICAgIG1fbWVkaWFQbGF5
ZXItPnJlcGFpbnQoKTsKK30KKwordm9pZCBXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OmR1cmF0
aW9uQ2hhbmdlZCgpCit7CisgICAgQVNTRVJUKG1fbWVkaWFQbGF5ZXIpOworICAgIG1fbWVkaWFQ
bGF5ZXItPmR1cmF0aW9uQ2hhbmdlZCgpOworfQorCit2b2lkIFdlYk1lZGlhUGxheWVyQ2xpZW50
SW1wbDo6cmF0ZUNoYW5nZWQoKQoreworICAgIEFTU0VSVChtX21lZGlhUGxheWVyKTsKKyAgICBt
X21lZGlhUGxheWVyLT5yYXRlQ2hhbmdlZCgpOworfQorCit2b2lkIFdlYk1lZGlhUGxheWVyQ2xp
ZW50SW1wbDo6c2l6ZUNoYW5nZWQoKQoreworICAgIEFTU0VSVChtX21lZGlhUGxheWVyKTsKKyAg
ICBtX21lZGlhUGxheWVyLT5zaXplQ2hhbmdlZCgpOworfQorCit2b2lkIFdlYk1lZGlhUGxheWVy
Q2xpZW50SW1wbDo6c2F3VW5zdXBwb3J0ZWRUcmFja3MoKQoreworICAgIEFTU0VSVChtX21lZGlh
UGxheWVyKTsKKyAgICBtX21lZGlhUGxheWVyLT5tZWRpYVBsYXllckNsaWVudCgpLT5tZWRpYVBs
YXllclNhd1Vuc3VwcG9ydGVkVHJhY2tzKG1fbWVkaWFQbGF5ZXIpOworfQorCisvLyBNZWRpYVBs
YXllclByaXZhdGVJbnRlcmZhY2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCit2b2lkIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6bG9hZChjb25z
dCBTdHJpbmcmIHVybCkKK3sKKyAgICBGcmFtZSogZnJhbWUgPSBzdGF0aWNfY2FzdDxIVE1MTWVk
aWFFbGVtZW50Kj4oCisgICAgICAgIG1fbWVkaWFQbGF5ZXItPm1lZGlhUGxheWVyQ2xpZW50KCkp
LT5kb2N1bWVudCgpLT5mcmFtZSgpOworICAgIG1fd2ViTWVkaWFQbGF5ZXIuc2V0KGNyZWF0ZVdl
Yk1lZGlhUGxheWVyKHRoaXMsIGZyYW1lKSk7CisgICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIuZ2V0
KCkpCisgICAgICAgIG1fd2ViTWVkaWFQbGF5ZXItPmxvYWQoS1VSTChQYXJzZWRVUkxTdHJpbmcs
IHVybCkpOworfQorCit2b2lkIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6Y2FuY2VsTG9hZCgp
Cit7CisgICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIuZ2V0KCkpCisgICAgICAgIG1fd2ViTWVkaWFQ
bGF5ZXItPmNhbmNlbExvYWQoKTsKK30KKwordm9pZCBXZWJNZWRpYVBsYXllckNsaWVudEltcGw6
OnBsYXkoKQoreworICAgIGlmIChtX3dlYk1lZGlhUGxheWVyLmdldCgpKQorICAgICAgICBtX3dl
Yk1lZGlhUGxheWVyLT5wbGF5KCk7Cit9CisKK3ZvaWQgV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBs
OjpwYXVzZSgpCit7CisgICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIuZ2V0KCkpCisgICAgICAgIG1f
d2ViTWVkaWFQbGF5ZXItPnBhdXNlKCk7Cit9CisKK0ludFNpemUgV2ViTWVkaWFQbGF5ZXJDbGll
bnRJbXBsOjpuYXR1cmFsU2l6ZSgpIGNvbnN0Cit7CisgICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIu
Z2V0KCkpCisgICAgICAgIHJldHVybiBtX3dlYk1lZGlhUGxheWVyLT5uYXR1cmFsU2l6ZSgpOwor
ICAgIHJldHVybiBJbnRTaXplKCk7Cit9CisKK2Jvb2wgV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBs
OjpoYXNWaWRlbygpIGNvbnN0Cit7CisgICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIuZ2V0KCkpCisg
ICAgICAgIHJldHVybiBtX3dlYk1lZGlhUGxheWVyLT5oYXNWaWRlbygpOworICAgIHJldHVybiBm
YWxzZTsKK30KKworYm9vbCBXZWJNZWRpYVBsYXllckNsaWVudEltcGw6Omhhc0F1ZGlvKCkgY29u
c3QKK3sKKyAgICBpZiAobV93ZWJNZWRpYVBsYXllci5nZXQoKSkKKyAgICAgICAgcmV0dXJuIG1f
d2ViTWVkaWFQbGF5ZXItPmhhc0F1ZGlvKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lk
IFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6c2V0VmlzaWJsZShib29sIHZpc2libGUpCit7Cisg
ICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIuZ2V0KCkpCisgICAgICAgIG1fd2ViTWVkaWFQbGF5ZXIt
PnNldFZpc2libGUodmlzaWJsZSk7Cit9CisKK2Zsb2F0IFdlYk1lZGlhUGxheWVyQ2xpZW50SW1w
bDo6ZHVyYXRpb24oKSBjb25zdAoreworICAgIGlmIChtX3dlYk1lZGlhUGxheWVyLmdldCgpKQor
ICAgICAgICByZXR1cm4gbV93ZWJNZWRpYVBsYXllci0+ZHVyYXRpb24oKTsKKyAgICByZXR1cm4g
MC4wZjsKK30KKworZmxvYXQgV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpjdXJyZW50VGltZSgp
IGNvbnN0Cit7CisgICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIuZ2V0KCkpCisgICAgICAgIHJldHVy
biBtX3dlYk1lZGlhUGxheWVyLT5jdXJyZW50VGltZSgpOworICAgIHJldHVybiAwLjBmOworfQor
Cit2b2lkIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6c2VlayhmbG9hdCB0aW1lKQoreworICAg
IGlmIChtX3dlYk1lZGlhUGxheWVyLmdldCgpKQorICAgICAgICBtX3dlYk1lZGlhUGxheWVyLT5z
ZWVrKHRpbWUpOworfQorCitib29sIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6c2Vla2luZygp
IGNvbnN0Cit7CisgICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIuZ2V0KCkpCisgICAgICAgIHJldHVy
biBtX3dlYk1lZGlhUGxheWVyLT5zZWVraW5nKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2
b2lkIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6c2V0RW5kVGltZShmbG9hdCB0aW1lKQorewor
ICAgIGlmIChtX3dlYk1lZGlhUGxheWVyLmdldCgpKQorICAgICAgICBtX3dlYk1lZGlhUGxheWVy
LT5zZXRFbmRUaW1lKHRpbWUpOworfQorCit2b2lkIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6
c2V0UmF0ZShmbG9hdCByYXRlKQoreworICAgIGlmIChtX3dlYk1lZGlhUGxheWVyLmdldCgpKQor
ICAgICAgICBtX3dlYk1lZGlhUGxheWVyLT5zZXRSYXRlKHJhdGUpOworfQorCitib29sIFdlYk1l
ZGlhUGxheWVyQ2xpZW50SW1wbDo6cGF1c2VkKCkgY29uc3QKK3sKKyAgICBpZiAobV93ZWJNZWRp
YVBsYXllci5nZXQoKSkKKyAgICAgICAgcmV0dXJuIG1fd2ViTWVkaWFQbGF5ZXItPnBhdXNlZCgp
OworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBXZWJNZWRpYVBsYXllckNsaWVudEltcGw6
OnN1cHBvcnRzRnVsbHNjcmVlbigpIGNvbnN0Cit7CisgICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIu
Z2V0KCkpCisgICAgICAgIHJldHVybiBtX3dlYk1lZGlhUGxheWVyLT5zdXBwb3J0c0Z1bGxzY3Jl
ZW4oKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgV2ViTWVkaWFQbGF5ZXJDbGllbnRJ
bXBsOjpzdXBwb3J0c1NhdmUoKSBjb25zdAoreworICAgIGlmIChtX3dlYk1lZGlhUGxheWVyLmdl
dCgpKQorICAgICAgICByZXR1cm4gbV93ZWJNZWRpYVBsYXllci0+c3VwcG9ydHNTYXZlKCk7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6c2V0
Vm9sdW1lKGZsb2F0IHZvbHVtZSkKK3sKKyAgICBpZiAobV93ZWJNZWRpYVBsYXllci5nZXQoKSkK
KyAgICAgICAgbV93ZWJNZWRpYVBsYXllci0+c2V0Vm9sdW1lKHZvbHVtZSk7Cit9CisKK01lZGlh
UGxheWVyOjpOZXR3b3JrU3RhdGUgV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpuZXR3b3JrU3Rh
dGUoKSBjb25zdAoreworICAgIGlmIChtX3dlYk1lZGlhUGxheWVyLmdldCgpKQorICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8TWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZT4obV93ZWJNZWRpYVBs
YXllci0+bmV0d29ya1N0YXRlKCkpOworICAgIHJldHVybiBNZWRpYVBsYXllcjo6RW1wdHk7Cit9
CisKK01lZGlhUGxheWVyOjpSZWFkeVN0YXRlIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6cmVh
ZHlTdGF0ZSgpIGNvbnN0Cit7CisgICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIuZ2V0KCkpCisgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZT4obV93ZWJNZWRp
YVBsYXllci0+cmVhZHlTdGF0ZSgpKTsKKyAgICByZXR1cm4gTWVkaWFQbGF5ZXI6OkhhdmVOb3Ro
aW5nOworfQorCitmbG9hdCBXZWJNZWRpYVBsYXllckNsaWVudEltcGw6Om1heFRpbWVTZWVrYWJs
ZSgpIGNvbnN0Cit7CisgICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIuZ2V0KCkpCisgICAgICAgIHJl
dHVybiBtX3dlYk1lZGlhUGxheWVyLT5tYXhUaW1lU2Vla2FibGUoKTsKKyAgICByZXR1cm4gMC4w
ZjsKK30KKworUGFzc1JlZlB0cjxUaW1lUmFuZ2VzPiBXZWJNZWRpYVBsYXllckNsaWVudEltcGw6
OmJ1ZmZlcmVkKCkgY29uc3QKK3sKKyAgICBpZiAobV93ZWJNZWRpYVBsYXllci5nZXQoKSkgewor
ICAgICAgICBjb25zdCBXZWJUaW1lUmFuZ2VzJiB3ZWJSYW5nZXMgPSBtX3dlYk1lZGlhUGxheWVy
LT5idWZmZXJlZCgpOworCisgICAgICAgIC8vIEZJWE1FOiBTYXZlIHRoZSB0aW1lIHJhbmdlcyBp
biBhIG1lbWJlciB2YXJpYWJsZSBhbmQgdXBkYXRlIGl0IHdoZW4gbmVlZGVkLgorICAgICAgICBS
ZWZQdHI8VGltZVJhbmdlcz4gcmFuZ2VzID0gVGltZVJhbmdlczo6Y3JlYXRlKCk7CisgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2ViUmFuZ2VzLnNpemUoKTsgKytpKQorICAgICAgICAg
ICAgcmFuZ2VzLT5hZGQod2ViUmFuZ2VzW2ldLnN0YXJ0LCB3ZWJSYW5nZXNbaV0uZW5kKTsKKyAg
ICAgICAgcmV0dXJuIHJhbmdlcy5yZWxlYXNlKCk7CisgICAgfQorICAgIHJldHVybiBUaW1lUmFu
Z2VzOjpjcmVhdGUoKTsKK30KKworaW50IFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6ZGF0YVJh
dGUoKSBjb25zdAoreworICAgIGlmIChtX3dlYk1lZGlhUGxheWVyLmdldCgpKQorICAgICAgICBy
ZXR1cm4gbV93ZWJNZWRpYVBsYXllci0+ZGF0YVJhdGUoKTsKKyAgICByZXR1cm4gMDsKK30KKwor
Ym9vbCBXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OnRvdGFsQnl0ZXNLbm93bigpIGNvbnN0Cit7
CisgICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIuZ2V0KCkpCisgICAgICAgIHJldHVybiBtX3dlYk1l
ZGlhUGxheWVyLT50b3RhbEJ5dGVzS25vd24oKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Vu
c2lnbmVkIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6dG90YWxCeXRlcygpIGNvbnN0Cit7Cisg
ICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIuZ2V0KCkpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4obV93ZWJNZWRpYVBsYXllci0+dG90YWxCeXRlcygpKTsKKyAgICByZXR1cm4g
MDsKK30KKwordW5zaWduZWQgV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpieXRlc0xvYWRlZCgp
IGNvbnN0Cit7CisgICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIuZ2V0KCkpCisgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV93ZWJNZWRpYVBsYXllci0+Ynl0ZXNMb2FkZWQoKSk7
CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpzZXRT
aXplKGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIuZ2V0
KCkpCisgICAgICAgIG1fd2ViTWVkaWFQbGF5ZXItPnNldFNpemUoV2ViU2l6ZShzaXplLndpZHRo
KCksIHNpemUuaGVpZ2h0KCkpKTsKK30KKwordm9pZCBXZWJNZWRpYVBsYXllckNsaWVudEltcGw6
OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sK
KyAgICAvLyBOb3JtYWxseSBHcmFwaGljc0NvbnRleHQgb3BlcmF0aW9ucyBkbyBub3RoaW5nIHdo
ZW4gcGFpbnRpbmcgaXMgZGlzYWJsZWQuCisgICAgLy8gU2luY2Ugd2UncmUgYWNjZXNzaW5nIHBs
YXRmb3JtQ29udGV4dCgpIGRpcmVjdGx5IHdlIGhhdmUgdG8gbWFudWFsbHkKKyAgICAvLyBjaGVj
ay4KKyAgICBpZiAobV93ZWJNZWRpYVBsYXllci5nZXQoKSAmJiAhY29udGV4dC0+cGFpbnRpbmdE
aXNhYmxlZCgpKSB7CisjaWYgV0VCS0lUX1VTSU5HX1NLSUEKKyAgICAgICAgbV93ZWJNZWRpYVBs
YXllci0+cGFpbnQoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLCByZWN0KTsK
KyNlbGlmIFdFQktJVF9VU0lOR19DRworICAgICAgICBtX3dlYk1lZGlhUGxheWVyLT5wYWludChj
b250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7CisjZWxzZQorICAgICAgICBub3RJbXBs
ZW1lbnRlZCgpOworI2VuZGlmCisgICAgfQorfQorCit2b2lkIFdlYk1lZGlhUGxheWVyQ2xpZW50
SW1wbDo6c2V0QXV0b2J1ZmZlcihib29sIGF1dG9CdWZmZXIpCit7CisgICAgaWYgKG1fd2ViTWVk
aWFQbGF5ZXIuZ2V0KCkpCisgICAgICAgIG1fd2ViTWVkaWFQbGF5ZXItPnNldEF1dG9CdWZmZXIo
YXV0b0J1ZmZlcik7Cit9CisKK2Jvb2wgV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpoYXNTaW5n
bGVTZWN1cml0eU9yaWdpbigpIGNvbnN0Cit7CisgICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIuZ2V0
KCkpCisgICAgICAgIHJldHVybiBtX3dlYk1lZGlhUGxheWVyLT5oYXNTaW5nbGVTZWN1cml0eU9y
aWdpbigpOworICAgIHJldHVybiBmYWxzZTsKK30KKworTWVkaWFQbGF5ZXI6Ok1vdmllTG9hZFR5
cGUgV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjptb3ZpZUxvYWRUeXBlKCkgY29uc3QKK3sKKyAg
ICBpZiAobV93ZWJNZWRpYVBsYXllci5nZXQoKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PE1lZGlhUGxheWVyOjpNb3ZpZUxvYWRUeXBlPigKKyAgICAgICAgICAgIG1fd2ViTWVkaWFQbGF5
ZXItPm1vdmllTG9hZFR5cGUoKSk7CisgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpVbmtub3duOwor
fQorCitNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UqIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1w
bDo6Y3JlYXRlKE1lZGlhUGxheWVyKiBwbGF5ZXIpCit7CisgICAgV2ViTWVkaWFQbGF5ZXJDbGll
bnRJbXBsKiBjbGllbnQgPSBuZXcgV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsKCk7CisgICAgY2xp
ZW50LT5tX21lZGlhUGxheWVyID0gcGxheWVyOworICAgIHJldHVybiBjbGllbnQ7Cit9CisKK3Zv
aWQgV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0
cmluZz4mIHN1cHBvcnRlZFR5cGVzKQoreworICAgIC8vIEZJWE1FOiBpbnRlZ3JhdGUgdGhpcyBs
aXN0IHdpdGggV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpzdXBwb3J0c1R5cGUuCisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKworTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBXZWJNZWRpYVBs
YXllckNsaWVudEltcGw6OnN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcmIHR5cGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFN0cmluZyYgY29kZWNzKQoreworICAgIFdlYk1pbWVSZWdpc3RyeTo6U3VwcG9ydHNU
eXBlIHN1cHBvcnRzVHlwZSA9CisgICAgICAgIHdlYktpdENsaWVudCgpLT5taW1lUmVnaXN0cnko
KS0+c3VwcG9ydHNNZWRpYU1JTUVUeXBlKHR5cGUsIGNvZGVjcyk7CisKKyAgICBzd2l0Y2ggKHN1
cHBvcnRzVHlwZSkgeworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIGNhc2UgV2ViTWltZVJlZ2lzdHJ5OjpJc05vdFN1cHBvcnRlZDoKKyAgICAgICAgcmV0
dXJuIE1lZGlhUGxheWVyOjpJc05vdFN1cHBvcnRlZDsKKyAgICBjYXNlIFdlYk1pbWVSZWdpc3Ry
eTo6SXNTdXBwb3J0ZWQ6CisgICAgICAgIHJldHVybiBNZWRpYVBsYXllcjo6SXNTdXBwb3J0ZWQ7
CisgICAgY2FzZSBXZWJNaW1lUmVnaXN0cnk6Ok1heUJlU3VwcG9ydGVkOgorICAgICAgICByZXR1
cm4gTWVkaWFQbGF5ZXI6Ok1heUJlU3VwcG9ydGVkOworICAgIH0KKyAgICByZXR1cm4gTWVkaWFQ
bGF5ZXI6OklzTm90U3VwcG9ydGVkOworfQorCitXZWJNZWRpYVBsYXllckNsaWVudEltcGw6Oldl
Yk1lZGlhUGxheWVyQ2xpZW50SW1wbCgpCisgICAgOiBtX21lZGlhUGxheWVyKDApCit7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgIC8vIEVOQUJMRShWSURFTykKZGlmZiAt
LWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsLmggYi9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYk1lZGlhUGxheWVyQ2xpZW50SW1wbC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmMDg3ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYk1lZGlhUGxheWVyQ2xpZW50SW1wbC5oCkBAIC0wLDAgKzEsMTE0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBXZWJNZWRpYVBsYXllckNsaWVudEltcGxfaAorI2RlZmluZSBXZWJNZWRpYVBs
YXllckNsaWVudEltcGxfaAorCisjaWYgRU5BQkxFKFZJREVPKQorCisjaW5jbHVkZSAiTWVkaWFQ
bGF5ZXJQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViTWVkaWFQbGF5ZXJDbGllbnQuaCIKKyNpbmNs
dWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJNZWRp
YVBsYXllcjsKKworLy8gVGhpcyBjbGFzcyBzZXJ2ZXMgYXMgYSBicmlkZ2UgYmV0d2VlbiBXZWJD
b3JlOjpNZWRpYVBsYXllciBhbmQKKy8vIFdlYktpdDo6V2ViTWVkaWFQbGF5ZXIuCitjbGFzcyBX
ZWJNZWRpYVBsYXllckNsaWVudEltcGwgOiBwdWJsaWMgV2ViTWVkaWFQbGF5ZXJDbGllbnQKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVJbnRlcmZhY2UgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGlzRW5hYmxlZCgp
OworICAgIHN0YXRpYyB2b2lkIHNldElzRW5hYmxlZChib29sKTsKKyAgICBzdGF0aWMgdm9pZCBy
ZWdpc3RlclNlbGYoV2ViQ29yZTo6TWVkaWFFbmdpbmVSZWdpc3RyYXIpOworCisgICAgLy8gV2Vi
TWVkaWFQbGF5ZXJDbGllbnQgbWV0aG9kczoKKyAgICB2aXJ0dWFsIHZvaWQgbmV0d29ya1N0YXRl
Q2hhbmdlZCgpOworICAgIHZpcnR1YWwgdm9pZCByZWFkeVN0YXRlQ2hhbmdlZCgpOworICAgIHZp
cnR1YWwgdm9pZCB2b2x1bWVDaGFuZ2VkKCk7CisgICAgdmlydHVhbCB2b2lkIHRpbWVDaGFuZ2Vk
KCk7CisgICAgdmlydHVhbCB2b2lkIHJlcGFpbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHVyYXRp
b25DaGFuZ2VkKCk7CisgICAgdmlydHVhbCB2b2lkIHJhdGVDaGFuZ2VkKCk7CisgICAgdmlydHVh
bCB2b2lkIHNpemVDaGFuZ2VkKCk7CisgICAgdmlydHVhbCB2b2lkIHNhd1Vuc3VwcG9ydGVkVHJh
Y2tzKCk7CisKKyAgICAvLyBNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UgbWV0aG9kczoKKyAg
ICB2aXJ0dWFsIHZvaWQgbG9hZChjb25zdCBXZWJDb3JlOjpTdHJpbmcmIHVybCk7CisgICAgdmly
dHVhbCB2b2lkIGNhbmNlbExvYWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGxheSgpOworICAgIHZp
cnR1YWwgdm9pZCBwYXVzZSgpOworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Z1bGxzY3JlZW4o
KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNTYXZlKCkgY29uc3Q7CisgICAgdmly
dHVhbCBXZWJDb3JlOjpJbnRTaXplIG5hdHVyYWxTaXplKCkgY29uc3Q7CisgICAgdmlydHVhbCBi
b29sIGhhc1ZpZGVvKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGhhc0F1ZGlvKCkgY29uc3Q7
CisgICAgdmlydHVhbCB2b2lkIHNldFZpc2libGUoYm9vbCk7CisgICAgdmlydHVhbCBmbG9hdCBk
dXJhdGlvbigpIGNvbnN0OworICAgIHZpcnR1YWwgZmxvYXQgY3VycmVudFRpbWUoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIHZvaWQgc2VlayhmbG9hdCB0aW1lKTsKKyAgICB2aXJ0dWFsIGJvb2wgc2Vl
a2luZygpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRFbmRUaW1lKGZsb2F0IHRpbWUpOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRSYXRlKGZsb2F0KTsKKyAgICB2aXJ0dWFsIGJvb2wgcGF1c2Vk
KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFZvbHVtZShmbG9hdCk7CisgICAgdmlydHVh
bCBXZWJDb3JlOjpNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG5ldHdvcmtTdGF0ZSgpIGNvbnN0
OworICAgIHZpcnR1YWwgV2ViQ29yZTo6TWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0
ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgZmxvYXQgbWF4VGltZVNlZWthYmxlKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6VGltZVJhbmdlcz4gYnVmZmVyZWQo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBkYXRhUmF0ZSgpIGNvbnN0OworICAgIHZpcnR1YWwg
dm9pZCBzZXRBdXRvYnVmZmVyKGJvb2wpOworICAgIHZpcnR1YWwgYm9vbCB0b3RhbEJ5dGVzS25v
d24oKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIHRvdGFsQnl0ZXMoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGJ5dGVzTG9hZGVkKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lk
IHNldFNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOworICAgIHZpcnR1YWwgdm9pZCBwYWlu
dChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Cisg
ICAgdmlydHVhbCBib29sIGhhc1NpbmdsZVNlY3VyaXR5T3JpZ2luKCkgY29uc3Q7CisgICAgdmly
dHVhbCBXZWJDb3JlOjpNZWRpYVBsYXllcjo6TW92aWVMb2FkVHlwZSBtb3ZpZUxvYWRUeXBlKCkg
Y29uc3Q7CisKK3ByaXZhdGU6CisgICAgV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsKCk7CisKKyAg
ICBzdGF0aWMgV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlKiBjcmVhdGUoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXIqKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRTdXBwb3J0ZWRUeXBlcyhX
VEY6Okhhc2hTZXQ8V2ViQ29yZTo6U3RyaW5nPiYpOworICAgIHN0YXRpYyBXZWJDb3JlOjpNZWRp
YVBsYXllcjo6U3VwcG9ydHNUeXBlIHN1cHBvcnRzVHlwZSgKKyAgICAgICAgY29uc3QgV2ViQ29y
ZTo6U3RyaW5nJiB0eXBlLCBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIGNvZGVjcyk7CisKKyAgICBX
ZWJDb3JlOjpNZWRpYVBsYXllciogbV9tZWRpYVBsYXllcjsKKyAgICBPd25QdHI8V2ViTWVkaWFQ
bGF5ZXI+IG1fd2ViTWVkaWFQbGF5ZXI7CisgICAgc3RhdGljIGJvb2wgbV9pc0VuYWJsZWQ7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJOb2RlLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViTm9kZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU2NzZjMwot
LS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTm9kZS5jcHAKQEAgLTAs
MCArMSwxMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViTm9kZS5oIgorCisj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1l
TG9hZGVyQ2xpZW50SW1wbC5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKworI2luY2x1ZGUgIldlYkZy
YW1lSW1wbC5oIgorI2luY2x1ZGUgIldlYlN0cmluZy5oIgorCisjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitjbGFzcyBXZWJOb2RlUHJpdmF0ZSA6IHB1YmxpYyBOb2RlIHsKK307CisKK3ZvaWQgV2Vi
Tm9kZTo6cmVzZXQoKQoreworICAgIGFzc2lnbigwKTsKK30KKwordm9pZCBXZWJOb2RlOjphc3Np
Z24oY29uc3QgV2ViTm9kZSYgb3RoZXIpCit7CisgICAgV2ViTm9kZVByaXZhdGUqIHAgPSBjb25z
dF9jYXN0PFdlYk5vZGVQcml2YXRlKj4ob3RoZXIubV9wcml2YXRlKTsKKyAgICBpZiAocCkKKyAg
ICAgICAgcC0+cmVmKCk7CisgICAgYXNzaWduKHApOworfQorCitXZWJOb2RlIFdlYk5vZGU6OnBh
cmVudE5vZGUoKSBjb25zdAoreworICAgIHJldHVybiBQYXNzUmVmUHRyPE5vZGU+KGNvbnN0X2Nh
c3Q8Tm9kZSo+KG1fcHJpdmF0ZS0+cGFyZW50Tm9kZSgpKSk7Cit9CisKK1dlYlN0cmluZyBXZWJO
b2RlOjpub2RlTmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bm9kZU5hbWUo
KTsKK30KKworV2ViTm9kZTo6V2ViTm9kZShjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6
Tm9kZT4mIG5vZGUpCisgICAgOiBtX3ByaXZhdGUoc3RhdGljX2Nhc3Q8V2ViTm9kZVByaXZhdGUq
Pihub2RlLnJlbGVhc2VSZWYoKSkpCit7Cit9CisKK1dlYk5vZGUmIFdlYk5vZGU6Om9wZXJhdG9y
PShjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6Tm9kZT4mIG5vZGUpCit7CisgICAgYXNz
aWduKHN0YXRpY19jYXN0PFdlYk5vZGVQcml2YXRlKj4obm9kZS5yZWxlYXNlUmVmKCkpKTsKKyAg
ICByZXR1cm4gKnRoaXM7Cit9CisKK1dlYk5vZGU6Om9wZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxX
ZWJDb3JlOjpOb2RlPigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFBhc3NSZWZQdHI8Tm9kZT4oY29u
c3RfY2FzdDxXZWJOb2RlUHJpdmF0ZSo+KG1fcHJpdmF0ZSkpOworfQorCit2b2lkIFdlYk5vZGU6
OmFzc2lnbihXZWJOb2RlUHJpdmF0ZSogcCkKK3sKKyAgICAvLyBwIGlzIGFscmVhZHkgcmVmJ2Qg
Zm9yIHVzIGJ5IHRoZSBjYWxsZXIKKyAgICBpZiAobV9wcml2YXRlKQorICAgICAgICBtX3ByaXZh
dGUtPmRlcmVmKCk7CisgICAgbV9wcml2YXRlID0gcDsKK30KKworV2ViRnJhbWUqIFdlYk5vZGU6
OmZyYW1lKCkKK3sKKyAgICBGcmFtZUxvYWRlckNsaWVudEltcGwqIGZyYW1lX2xvYWRlcl9jbGll
bnQgPQorICAgICAgICBzdGF0aWNfY2FzdDxGcmFtZUxvYWRlckNsaWVudEltcGwqPihtX3ByaXZh
dGUtPmRvY3VtZW50KCktPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmcmFtZSgpLT5sb2FkZXIoKS0+Y2xpZW50KCkpOworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxXZWJGcmFtZSo+KGZyYW1lX2xvYWRlcl9jbGllbnQtPndlYkZyYW1lKCkpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTm90
aWZpY2F0aW9uLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTm90aWZpY2F0aW9uLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjY5MTZlCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJOb3RpZmljYXRpb24uY3BwCkBAIC0wLDAgKzEs
MTQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYk5vdGlmaWNhdGlvbi5oIgor
CisjaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpCisKKyNpbmNsdWRlICJOb3RpZmljYXRpb24uaCIK
KworI2luY2x1ZGUgIldlYlN0cmluZy5oIgorI2luY2x1ZGUgIldlYlVSTC5oIgorCisjaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJOb3RpZmljYXRpb25Qcml2YXRlIDogcHVibGljIE5v
dGlmaWNhdGlvbiB7Cit9OworCit2b2lkIFdlYk5vdGlmaWNhdGlvbjo6cmVzZXQoKQoreworICAg
IGFzc2lnbigwKTsKK30KKwordm9pZCBXZWJOb3RpZmljYXRpb246OmFzc2lnbihjb25zdCBXZWJO
b3RpZmljYXRpb24mIG90aGVyKQoreworICAgIFdlYk5vdGlmaWNhdGlvblByaXZhdGUqIHAgPSBj
b25zdF9jYXN0PFdlYk5vdGlmaWNhdGlvblByaXZhdGUqPihvdGhlci5tX3ByaXZhdGUpOworICAg
IGlmIChwKQorICAgICAgICBwLT5yZWYoKTsKKyAgICBhc3NpZ24ocCk7Cit9CisKK2Jvb2wgV2Vi
Tm90aWZpY2F0aW9uOjpsZXNzVGhhbihjb25zdCBXZWJOb3RpZmljYXRpb24mIG90aGVyKSBjb25z
dAoreworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obV9wcml2YXRlKSA8
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihvdGhlci5tX3ByaXZhdGUpOworfQorCitib29s
IFdlYk5vdGlmaWNhdGlvbjo6aXNIVE1MKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRl
LT5pc0hUTUwoKTsKK30KKworV2ViVVJMIFdlYk5vdGlmaWNhdGlvbjo6dXJsKCkgY29uc3QKK3sK
KyAgICBBU1NFUlQoaXNIVE1MKCkpOworICAgIHJldHVybiBtX3ByaXZhdGUtPnVybCgpOworfQor
CitXZWJTdHJpbmcgV2ViTm90aWZpY2F0aW9uOjppY29uKCkgY29uc3QKK3sKKyAgICBBU1NFUlQo
IWlzSFRNTCgpKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5jb250ZW50cygpLmljb24oKTsKK30K
KworV2ViU3RyaW5nIFdlYk5vdGlmaWNhdGlvbjo6dGl0bGUoKSBjb25zdAoreworICAgIEFTU0VS
VCghaXNIVE1MKCkpOworICAgIHJldHVybiBtX3ByaXZhdGUtPmNvbnRlbnRzKCkudGl0bGUoKTsK
K30KKworV2ViU3RyaW5nIFdlYk5vdGlmaWNhdGlvbjo6Ym9keSgpIGNvbnN0Cit7CisgICAgQVNT
RVJUKCFpc0hUTUwoKSk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Y29udGVudHMoKS5ib2R5KCk7
Cit9CisKK3ZvaWQgV2ViTm90aWZpY2F0aW9uOjpkaXNwYXRjaERpc3BsYXlFdmVudCgpCit7Cisg
ICAgUmVmUHRyPEV2ZW50PiBldmVudCA9IEV2ZW50OjpjcmVhdGUoImRpc3BsYXkiLCBmYWxzZSwg
dHJ1ZSk7CisgICAgbV9wcml2YXRlLT5kaXNwYXRjaEV2ZW50KGV2ZW50LnJlbGVhc2UoKSk7Cit9
CisKK3ZvaWQgV2ViTm90aWZpY2F0aW9uOjpkaXNwYXRjaEVycm9yRXZlbnQoY29uc3QgV2ViS2l0
OjpXZWJTdHJpbmcmIC8qIGVycm9yTWVzc2FnZSAqLykKK3sKKyAgICAvLyBGSVhNRTogZXJyb3JN
ZXNzYWdlIG5vdCBzdXBwb3J0ZWQgYnkgV2ViQ29yZSB5ZXQKKyAgICBSZWZQdHI8RXZlbnQ+IGV2
ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZXJyb3JFdmVudCwgZmFsc2UsIHRydWUp
OworICAgIG1fcHJpdmF0ZS0+ZGlzcGF0Y2hFdmVudChldmVudC5yZWxlYXNlKCkpOworfQorCit2
b2lkIFdlYk5vdGlmaWNhdGlvbjo6ZGlzcGF0Y2hDbG9zZUV2ZW50KGJvb2wgLyogYnlVc2VyICov
KQoreworICAgIC8vIEZJWE1FOiBieVVzZXIgZmxhZyBub3Qgc3VwcG9ydGVkIGJ5IFdlYkNvcmUg
eWV0CisgICAgUmVmUHRyPEV2ZW50PiBldmVudCA9IEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygp
LmNsb3NlRXZlbnQsIGZhbHNlLCB0cnVlKTsKKyAgICBtX3ByaXZhdGUtPmRpc3BhdGNoRXZlbnQo
ZXZlbnQucmVsZWFzZSgpKTsKK30KKworV2ViTm90aWZpY2F0aW9uOjpXZWJOb3RpZmljYXRpb24o
Y29uc3QgV1RGOjpQYXNzUmVmUHRyPE5vdGlmaWNhdGlvbj4mIG5vdGlmaWNhdGlvbikKKyAgICA6
IG1fcHJpdmF0ZShzdGF0aWNfY2FzdDxXZWJOb3RpZmljYXRpb25Qcml2YXRlKj4obm90aWZpY2F0
aW9uLnJlbGVhc2VSZWYoKSkpCit7Cit9CisKK1dlYk5vdGlmaWNhdGlvbiYgV2ViTm90aWZpY2F0
aW9uOjpvcGVyYXRvcj0oY29uc3QgV1RGOjpQYXNzUmVmUHRyPE5vdGlmaWNhdGlvbj4mIG5vdGlm
aWNhdGlvbikKK3sKKyAgICBhc3NpZ24oc3RhdGljX2Nhc3Q8V2ViTm90aWZpY2F0aW9uUHJpdmF0
ZSo+KG5vdGlmaWNhdGlvbi5yZWxlYXNlUmVmKCkpKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisK
K1dlYk5vdGlmaWNhdGlvbjo6b3BlcmF0b3IgV1RGOjpQYXNzUmVmUHRyPE5vdGlmaWNhdGlvbj4o
KSBjb25zdAoreworICAgIHJldHVybiBXVEY6OlBhc3NSZWZQdHI8Tm90aWZpY2F0aW9uPihjb25z
dF9jYXN0PFdlYk5vdGlmaWNhdGlvblByaXZhdGUqPihtX3ByaXZhdGUpKTsKK30KKwordm9pZCBX
ZWJOb3RpZmljYXRpb246OmFzc2lnbihXZWJOb3RpZmljYXRpb25Qcml2YXRlKiBwKQoreworICAg
IC8vIHAgaXMgYWxyZWFkeSByZWYnZCBmb3IgdXMgYnkgdGhlIGNhbGxlcgorICAgIGlmIChtX3By
aXZhdGUpCisgICAgICAgIG1fcHJpdmF0ZS0+ZGVyZWYoKTsKKyAgICBtX3ByaXZhdGUgPSBwOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShOT1RJRklDQVRJ
T05TKQ==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42824</attachid>
            <date>2009-11-09 18:19:00 -0800</date>
            <delta_ts>2009-11-10 00:09:14 -0800</delta_ts>
            <desc>Up-streaming Chromium API src files: WebPasswordFormData...WebRuntimeFeatures</desc>
            <filename>bug-31276-20091109181859.patch</filename>
            <type>text/plain</type>
            <size>78840</size>
            <attacher name="Yaar Schnitman">yaar</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IGU4YWJiNmIuLmY3MmJjODIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMiw2ICsy
LDEzMCBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgogCisgICAgICAg
IFVwLXN0cmVhbWluZyBDaHJvbWl1bSBBUEkgc3JjIGZpbGVzOiBXZWJQYXNzd29yZEZvcm1EYXRh
Li4uV2ViUnVudGltZUZlYXR1cmVzCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTMxMjc2CisKKyAgICAgICAgKiBzcmMvV2ViUGFzc3dvcmRGb3JtRGF0
YS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjopOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YXNzd29yZEZvcm1EYXRhOjpXZWJQYXNzd29yZEZvcm1EYXRhKToKKyAgICAgICAgKiBzcmMvV2Vi
UGFzc3dvcmRGb3JtVXRpbHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6ZmluZFBhc3N3
b3JkRm9ybUZpZWxkcyk6CisgICAgICAgICogc3JjL1dlYlBhc3N3b3JkRm9ybVV0aWxzLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0OjpQYXNzd29yZEZvcm1GaWVsZHM6OlBhc3N3b3JkRm9ybUZp
ZWxkcyk6CisgICAgICAgICogc3JjL1dlYlBsdWdpbkNvbnRhaW5lckltcGwuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViUGx1Z2luQ29udGFpbmVySW1wbDo6c2V0RnJhbWVSZWN0KToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGx1Z2luQ29udGFpbmVySW1wbDo6cGFpbnQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQbHVnaW5Db250YWluZXJJbXBsOjppbnZhbGlkYXRlUmVjdCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBsdWdpbkNvbnRhaW5lckltcGw6OnNldEZvY3VzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGx1Z2luQ29udGFpbmVySW1wbDo6c2hvdyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlBsdWdpbkNvbnRhaW5lckltcGw6OmhpZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbHVn
aW5Db250YWluZXJJbXBsOjpoYW5kbGVFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsdWdp
bkNvbnRhaW5lckltcGw6OmZyYW1lUmVjdHNDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGx1Z2luQ29udGFpbmVySW1wbDo6c2V0UGFyZW50VmlzaWJsZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYlBsdWdpbkNvbnRhaW5lckltcGw6OnNldFBhcmVudCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBsdWdpbkNvbnRhaW5lckltcGw6OmludmFsaWRhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
bHVnaW5Db250YWluZXJJbXBsOjpyZXBvcnRHZW9tZXRyeSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBsdWdpbkNvbnRhaW5lckltcGw6OmNsZWFyU2NyaXB0T2JqZWN0cyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBsdWdpbkNvbnRhaW5lckltcGw6OnNjcmlwdGFibGVPYmplY3RGb3JFbGVtZW50KToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGx1Z2luQ29udGFpbmVySW1wbDo6ZXhlY3V0ZVNjcmlwdFVS
TCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsdWdpbkNvbnRhaW5lckltcGw6OmxvYWRGcmFtZVJl
cXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW5Db250YWluZXJJbXBsOjpkaWRSZWNl
aXZlUmVzcG9uc2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW5Db250YWluZXJJbXBsOjpk
aWRSZWNlaXZlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsdWdpbkNvbnRhaW5lckltcGw6
OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW5Db250YWluZXJJ
bXBsOjpkaWRGYWlsTG9hZGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsdWdpbkNvbnRhaW5l
ckltcGw6OnNjcmlwdGFibGVPYmplY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW5Db250
YWluZXJJbXBsOjp3aWxsRGVzdHJveVBsdWdpbkxvYWRPYnNlcnZlcik6CisgICAgICAgIChXZWJL
aXQ6OldlYlBsdWdpbkNvbnRhaW5lckltcGw6On5XZWJQbHVnaW5Db250YWluZXJJbXBsKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGx1Z2luQ29udGFpbmVySW1wbDo6aGFuZGxlTW91c2VFdmVudCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBsdWdpbkNvbnRhaW5lckltcGw6OmhhbmRsZUtleWJvYXJk
RXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW5Db250YWluZXJJbXBsOjpjYWxjdWxh
dGVHZW9tZXRyeSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsdWdpbkNvbnRhaW5lckltcGw6Ondp
bmRvd0NsaXBSZWN0KToKKyAgICAgICAgKFdlYktpdDo6Z2V0T2JqZWN0U3RhY2spOgorICAgICAg
ICAoV2ViS2l0OjpjaGVja1N0YWNrT25Ub3ApOgorICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW5D
b250YWluZXJJbXBsOjp3aW5kb3dDdXRPdXRSZWN0cyk6CisgICAgICAgICogc3JjL1dlYlBsdWdp
bkNvbnRhaW5lckltcGwuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBsdWdpbkNvbnRh
aW5lckltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsdWdpbkNvbnRhaW5lcklt
cGw6OnBsdWdpbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBsdWdpbkNvbnRhaW5lckltcGw6Oldl
YlBsdWdpbkNvbnRhaW5lckltcGwpOgorICAgICAgICAqIHNyYy9XZWJQbHVnaW5MaXN0QnVpbGRl
ckltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGx1Z2luTGlzdEJ1aWxkZXJJ
bXBsOjphZGRQbHVnaW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW5MaXN0QnVpbGRlcklt
cGw6OmFkZE1lZGlhVHlwZVRvTGFzdFBsdWdpbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBsdWdp
bkxpc3RCdWlsZGVySW1wbDo6YWRkRmlsZUV4dGVuc2lvblRvTGFzdE1lZGlhVHlwZSk6CisgICAg
ICAgICogc3JjL1dlYlBsdWdpbkxpc3RCdWlsZGVySW1wbC5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YktpdDo6V2ViUGx1Z2luTGlzdEJ1aWxkZXJJbXBsOjpXZWJQbHVnaW5MaXN0QnVpbGRlckltcGwp
OgorICAgICAgICAqIHNyYy9XZWJQbHVnaW5Mb2FkT2JzZXJ2ZXIuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6V2ViUGx1Z2luTG9hZE9ic2VydmVyOjp+V2ViUGx1Z2luTG9hZE9ic2VydmVy
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGx1Z2luTG9hZE9ic2VydmVyOjpkaWRGaW5pc2hMb2Fk
aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGx1Z2luTG9hZE9ic2VydmVyOjpkaWRGYWlsTG9h
ZGluZyk6CisgICAgICAgICogc3JjL1dlYlBsdWdpbkxvYWRPYnNlcnZlci5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYktpdDo6V2ViUGx1Z2luTG9hZE9ic2VydmVyOjpXZWJQbHVnaW5Mb2FkT2JzZXJ2
ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW5Mb2FkT2JzZXJ2ZXI6OnVybCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBsdWdpbkxvYWRPYnNlcnZlcjo6Y2xlYXJQbHVnaW5Db250YWluZXIp
OgorICAgICAgICAqIHNyYy9XZWJQb3B1cE1lbnVJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJLaXQ6OldlYlBvcHVwTWVudTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBN
ZW51SW1wbDo6V2ViUG9wdXBNZW51SW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVu
dUltcGw6On5XZWJQb3B1cE1lbnVJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51
SW1wbDo6SW5pdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudUltcGw6Ok1vdXNlTW92
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudUltcGw6Ok1vdXNlTGVhdmUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVJbXBsOjpNb3VzZURvd24pOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQb3B1cE1lbnVJbXBsOjpNb3VzZVVwKToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9w
dXBNZW51SW1wbDo6TW91c2VXaGVlbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudUlt
cGw6OktleUV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51SW1wbDo6Y2xvc2Up
OgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVJbXBsOjpyZXNpemUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQb3B1cE1lbnVJbXBsOjpsYXlvdXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
b3B1cE1lbnVJbXBsOjpwYWludCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudUltcGw6
OmhhbmRsZUlucHV0RXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVJbXBsOjpt
b3VzZUNhcHR1cmVMb3N0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51SW1wbDo6c2V0
Rm9jdXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVJbXBsOjpoYW5kbGVDb21wb3Np
dGlvbkV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51SW1wbDo6cXVlcnlDb21w
b3NpdGlvblN0YXR1cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudUltcGw6OnNldFRl
eHREaXJlY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVJbXBsOjpyZXBhaW50
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51SW1wbDo6c2Nyb2xsKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUG9wdXBNZW51SW1wbDo6c2NyZWVuVG9XaW5kb3cpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQb3B1cE1lbnVJbXBsOjp3aW5kb3dUb1NjcmVlbik6CisgICAgICAgIChXZWJLaXQ6
OldlYlBvcHVwTWVudUltcGw6OnNjcm9sbFJlY3RJbnRvVmlldyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlBvcHVwTWVudUltcGw6OnNjcm9sbGJhcnNNb2RlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUG9wdXBNZW51SW1wbDo6cG9wdXBDbG9zZWQpOgorICAgICAgICAqIHNyYy9XZWJQ
b3B1cE1lbnVJbXBsLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVJbXBs
OjpzaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51SW1wbDo6Y2xpZW50KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51SW1wbDo6cGxhdGZvcm1QYWdlQ2xpZW50KToKKyAg
ICAgICAgKiBzcmMvV2ViUmFuZ2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUmFu
Z2U6OnJlc2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUmFuZ2U6OmFzc2lnbik6CisgICAgICAg
IChXZWJLaXQ6OldlYlJhbmdlOjpzdGFydE9mZnNldCk6CisgICAgICAgIChXZWJLaXQ6OldlYlJh
bmdlOjplbmRPZmZzZXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJSYW5nZTo6c3RhcnRDb250YWlu
ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJSYW5nZTo6ZW5kQ29udGFpbmVyKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUmFuZ2U6OnRvSFRNTFRleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJSYW5n
ZTo6dG9QbGFpblRleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJSYW5nZTo6V2ViUmFuZ2UpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJSYW5nZTo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYktpdDo6
V2ViUmFuZ2U6Om9wZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpSYW5nZT4pOgorICAg
ICAgICAqIHNyYy9XZWJSdW50aW1lRmVhdHVyZXMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dDo6V2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVEYXRhYmFzZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYlJ1bnRpbWVGZWF0dXJlczo6aXNEYXRhYmFzZUVuYWJsZWQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZUxvY2FsU3RvcmFnZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlJ1bnRpbWVGZWF0dXJlczo6aXNMb2NhbFN0b3JhZ2VFbmFibGVkKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVTZXNzaW9uU3RvcmFnZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlJ1bnRpbWVGZWF0dXJlczo6aXNTZXNzaW9uU3RvcmFnZUVuYWJsZWQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZU1lZGlhUGxheWVy
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUnVudGltZUZlYXR1cmVzOjppc01lZGlhUGxheWVyRW5h
YmxlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlJ1bnRpbWVGZWF0dXJlczo6ZW5hYmxlU29ja2V0
cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlJ1bnRpbWVGZWF0dXJlczo6aXNTb2NrZXRzRW5hYmxl
ZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlJ1bnRpbWVGZWF0dXJlczo6ZW5hYmxlTm90aWZpY2F0
aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlJ1bnRpbWVGZWF0dXJlczo6aXNOb3RpZmljYXRp
b25zRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlJ1bnRpbWVGZWF0dXJlczo6ZW5hYmxl
QXBwbGljYXRpb25DYWNoZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlJ1bnRpbWVGZWF0dXJlczo6
aXNBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZCk6CisKKzIwMDktMTEtMDkgIFlhYXIgU2Nobml0bWFu
ICA8eWFhckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKICAgICAgICAgVXAtc3RyZWFtaW5nIENocm9taXVtIEFQSSBzcmMgZmlsZXM6IFdlYkZp
bGVJbnB1dEVsZW1lbnQuLi5XZWJOb3RpZmljYXRpb25zCiAKICAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMxMjc2CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlBhc3N3b3JkRm9ybURhdGEuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJQYXNzd29yZEZvcm1EYXRhLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li42NGIxNzU0Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYXNz
d29yZEZvcm1EYXRhLmNwcApAQCAtMCwwICsxLDE4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXZWJQYXNzd29yZEZvcm1EYXRhLmgiCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgor
I2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRl
ICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgorI2luY2x1ZGUg
IkhUTUxJbnB1dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJL
VVJMLmgiCisKKyNpbmNsdWRlICJET01VdGlsaXRpZXNQcml2YXRlLmgiCisjaW5jbHVkZSAiV2Vi
UGFzc3dvcmRGb3JtVXRpbHMuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCituYW1lc3BhY2UgeworCisvLyBIZWxwZXIgdG8gZGV0ZXJtaW5lIHdo
aWNoIHBhc3N3b3JkIGlzIHRoZSBtYWluIG9uZSwgYW5kIHdoaWNoIGlzCisvLyBhbiBvbGQgcGFz
c3dvcmQgKGUuZyBvbiBhICJtYWtlIG5ldyBwYXNzd29yZCIgZm9ybSksIGlmIGFueS4KK2Jvb2wg
bG9jYXRlU3BlY2lmaWNQYXNzd29yZHMoUGFzc3dvcmRGb3JtRmllbGRzKiBmaWVsZHMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqKiBwYXNzd29yZCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgSFRNTElucHV0RWxlbWVudCoqIG9sZFBhc3N3b3Jk
KQoreworICAgIEFTU0VSVChmaWVsZHMpOworICAgIEFTU0VSVChwYXNzd29yZCk7CisgICAgQVNT
RVJUKG9sZFBhc3N3b3JkKTsKKyAgICBzd2l0Y2ggKGZpZWxkcy0+cGFzc3dvcmRzLnNpemUoKSkg
eworICAgIGNhc2UgMToKKyAgICAgICAgLy8gU2luZ2xlIHBhc3N3b3JkLCBlYXN5LgorICAgICAg
ICAqcGFzc3dvcmQgPSBmaWVsZHMtPnBhc3N3b3Jkc1swXTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSAyOgorICAgICAgICBpZiAoZmllbGRzLT5wYXNzd29yZHNbMF0tPnZhbHVlKCkgPT0gZmll
bGRzLT5wYXNzd29yZHNbMV0tPnZhbHVlKCkpCisgICAgICAgICAgICAvLyBUcmVhdCB0d28gaWRl
bnRpY2FsIHBhc3N3b3JkcyBhcyBhIHNpbmdsZSBwYXNzd29yZC4KKyAgICAgICAgICAgICpwYXNz
d29yZCA9IGZpZWxkcy0+cGFzc3dvcmRzWzBdOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IC8vIEFzc3VtZSBmaXJzdCBpcyBvbGQgcGFzc3dvcmQsIHNlY29uZCBpcyBuZXcgKG5vIGNob2lj
ZSBidXQgdG8gZ3Vlc3MpLgorICAgICAgICAgICAgKm9sZFBhc3N3b3JkID0gZmllbGRzLT5wYXNz
d29yZHNbMF07CisgICAgICAgICAgICAqcGFzc3dvcmQgPSBmaWVsZHMtPnBhc3N3b3Jkc1sxXTsK
KyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIDM6CisgICAgICAgIGlmIChmaWVs
ZHMtPnBhc3N3b3Jkc1swXS0+dmFsdWUoKSA9PSBmaWVsZHMtPnBhc3N3b3Jkc1sxXS0+dmFsdWUo
KQorICAgICAgICAgICAgJiYgZmllbGRzLT5wYXNzd29yZHNbMF0tPnZhbHVlKCkgPT0gZmllbGRz
LT5wYXNzd29yZHNbMl0tPnZhbHVlKCkpIHsKKyAgICAgICAgICAgIC8vIEFsbCB0aHJlZSBwYXNz
d29yZHMgdGhlIHNhbWU/IEp1c3QgdHJlYXQgYXMgb25lIGFuZCBob3BlLgorICAgICAgICAgICAg
KnBhc3N3b3JkID0gZmllbGRzLT5wYXNzd29yZHNbMF07CisgICAgICAgIH0gZWxzZSBpZiAoZmll
bGRzLT5wYXNzd29yZHNbMF0tPnZhbHVlKCkgPT0gZmllbGRzLT5wYXNzd29yZHNbMV0tPnZhbHVl
KCkpIHsKKyAgICAgICAgICAgIC8vIFR3byB0aGUgc2FtZSBhbmQgb25lIGRpZmZlcmVudCAtPiBv
bGQgcGFzc3dvcmQgaXMgZHVwbGljYXRlZCBvbmUuCisgICAgICAgICAgICAqb2xkUGFzc3dvcmQg
PSBmaWVsZHMtPnBhc3N3b3Jkc1swXTsKKyAgICAgICAgICAgICpwYXNzd29yZCA9IGZpZWxkcy0+
cGFzc3dvcmRzWzJdOworICAgICAgICB9IGVsc2UgaWYgKGZpZWxkcy0+cGFzc3dvcmRzWzFdLT52
YWx1ZSgpID09IGZpZWxkcy0+cGFzc3dvcmRzWzJdLT52YWx1ZSgpKSB7CisgICAgICAgICAgICAq
b2xkUGFzc3dvcmQgPSBmaWVsZHMtPnBhc3N3b3Jkc1swXTsKKyAgICAgICAgICAgICpwYXNzd29y
ZCA9IGZpZWxkcy0+cGFzc3dvcmRzWzFdOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
Ly8gVGhyZWUgZGlmZmVyZW50IHBhc3N3b3Jkcywgb3IgZmlyc3QgYW5kIGxhc3QgbWF0Y2ggd2l0
aCBtaWRkbGUKKyAgICAgICAgICAgIC8vIGRpZmZlcmVudC4gTm8gaWRlYSB3aGljaCBpcyB3aGlj
aCwgc28gbm8gbHVjay4KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIHJldHVybiB0cnVlOworfQorCisvLyBIZWxwZWQgbWV0aG9kIHRvIGNsZWFyIHVybCBvZiB1
bm5lZWRlZCBwYXJ0cy4KK0tVUkwgc3RyaXBVUkwoY29uc3QgS1VSTCYgdXJsKQoreworICAgIEtV
Ukwgc3RyaXBwZWRVUkwgPSB1cmw7CisgICAgc3RyaXBwZWRVUkwuc2V0VXNlcihTdHJpbmcoKSk7
CisgICAgc3RyaXBwZWRVUkwuc2V0UGFzcyhTdHJpbmcoKSk7CisgICAgc3RyaXBwZWRVUkwuc2V0
UXVlcnkoU3RyaW5nKCkpOworICAgIHN0cmlwcGVkVVJMLnNldEZyYWdtZW50SWRlbnRpZmllcihT
dHJpbmcoKSk7CisgICAgcmV0dXJuIHN0cmlwcGVkVVJMOworfQorCisvLyBIZWxwZXIgdG8gZ2F0
aGVyIHVwIHRoZSBmaW5hbCBmb3JtIGRhdGEgYW5kIGNyZWF0ZSBhIFBhc3N3b3JkRm9ybS4KK3Zv
aWQgYXNzZW1ibGVQYXNzd29yZEZvcm1SZXN1bHQoY29uc3QgS1VSTCYgZnVsbE9yaWdpbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgS1VSTCYgZnVsbEFjdGlvbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogc3Vi
bWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiB1
c2VyTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFRNTElucHV0RWxlbWVu
dCogb2xkUGFzc3dvcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhUTUxJbnB1
dEVsZW1lbnQqIHBhc3N3b3JkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJQ
YXNzd29yZEZvcm1EYXRhKiByZXN1bHQpCit7CisgICAgLy8gV2Ugd2FudCB0byBrZWVwIHRoZSBw
YXRoIGJ1dCBzdHJpcCBhbnkgYXV0aGVudGljYXRpb24gZGF0YSwgYXMgd2VsbCBhcworICAgIC8v
IHF1ZXJ5IGFuZCByZWYgcG9ydGlvbnMgb2YgVVJMLCBmb3IgdGhlIGZvcm0gYWN0aW9uIGFuZCBm
b3JtIG9yaWdpbi4KKyAgICByZXN1bHQtPmFjdGlvbiA9IHN0cmlwVVJMKGZ1bGxBY3Rpb24pOwor
ICAgIHJlc3VsdC0+b3JpZ2luID0gc3RyaXBVUkwoZnVsbE9yaWdpbik7CisKKyAgICAvLyBOYW1p
bmcgaXMgY29uZnVzaW5nIGhlcmUgYmVjYXVzZSB3ZSBoYXZlIGJvdGggdGhlIEhUTUwgZm9ybSBv
cmlnaW4gVVJMCisgICAgLy8gdGhlIHBhZ2Ugd2hlcmUgdGhlIGZvcm0gd2FzIHNlZW4pLCBhbmQg
dGhlICJvcmlnaW4iIGNvbXBvbmVudHMgb2YgdGhlIHVybAorICAgIC8vIChzY2hlbWUsIGhvc3Qs
IGFuZCBwb3J0KS4KKyAgICBLVVJMIHNpZ25vblJlYWxtVVJMID0gc3RyaXBVUkwoZnVsbE9yaWdp
bik7CisgICAgc2lnbm9uUmVhbG1VUkwuc2V0UGF0aCgiIik7CisgICAgcmVzdWx0LT5zaWdub25S
ZWFsbSA9IHNpZ25vblJlYWxtVVJMOworCisgICAgaWYgKHN1Ym1pdCkKKyAgICAgICAgcmVzdWx0
LT5zdWJtaXRFbGVtZW50ID0gc3VibWl0LT5uYW1lKCk7CisgICAgaWYgKHVzZXJOYW1lKSB7Cisg
ICAgICAgIHJlc3VsdC0+dXNlck5hbWVFbGVtZW50ID0gdXNlck5hbWUtPm5hbWUoKTsKKyAgICAg
ICAgcmVzdWx0LT51c2VyTmFtZVZhbHVlID0gdXNlck5hbWUtPnZhbHVlKCk7CisgICAgfQorICAg
IGlmIChwYXNzd29yZCkgeworICAgICAgICByZXN1bHQtPnBhc3N3b3JkRWxlbWVudCA9IHBhc3N3
b3JkLT5uYW1lKCk7CisgICAgICAgIHJlc3VsdC0+cGFzc3dvcmRWYWx1ZSA9IHBhc3N3b3JkLT52
YWx1ZSgpOworICAgIH0KKyAgICBpZiAob2xkUGFzc3dvcmQpIHsKKyAgICAgICAgcmVzdWx0LT5v
bGRQYXNzd29yZEVsZW1lbnQgPSBvbGRQYXNzd29yZC0+bmFtZSgpOworICAgICAgICByZXN1bHQt
Pm9sZFBhc3N3b3JkVmFsdWUgPSBvbGRQYXNzd29yZC0+dmFsdWUoKTsKKyAgICB9Cit9CisKK30g
Ly8gbmFtZXNwYWNlCisKK1dlYlBhc3N3b3JkRm9ybURhdGE6OldlYlBhc3N3b3JkRm9ybURhdGEo
Y29uc3QgV2ViRm9ybUVsZW1lbnQmIHdlYkZvcm0pCit7CisgICAgUmVmUHRyPEhUTUxGb3JtRWxl
bWVudD4gZm9ybSA9IHdlYkZvcm0ub3BlcmF0b3IgUGFzc1JlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+
KCk7CisKKyAgICBGcmFtZSogZnJhbWUgPSBmb3JtLT5kb2N1bWVudCgpLT5mcmFtZSgpOworICAg
IGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIFBhc3N3b3JkRm9ybUZpZWxkcyBm
aWVsZHM7CisgICAgZmluZFBhc3N3b3JkRm9ybUZpZWxkcyhmb3JtLmdldCgpLCAmZmllbGRzKTsK
KworICAgIC8vIEdldCB0aGUgZG9jdW1lbnQgVVJMCisgICAgS1VSTCBmdWxsT3JpZ2luKFBhcnNl
ZFVSTFN0cmluZywgZm9ybS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRVUkkoKSk7CisKKyAgICAvLyBD
YWxjdWxhdGUgdGhlIGNhbm9uaWNhbCBhY3Rpb24gVVJMCisgICAgS1VSTCBmdWxsQWN0aW9uID0g
ZnJhbWUtPmxvYWRlcigpLT5jb21wbGV0ZVVSTChmb3JtLT5hY3Rpb24oKSk7CisgICAgaWYgKCFm
dWxsQWN0aW9uLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRGV0ZXJtaW5l
IHRoZSB0eXBlcyBvZiB0aGUgcGFzc3dvcmQgZmllbGRzCisgICAgSFRNTElucHV0RWxlbWVudCog
cGFzc3dvcmQgPSAwOworICAgIEhUTUxJbnB1dEVsZW1lbnQqIG9sZFBhc3N3b3JkID0gMDsKKyAg
ICBpZiAoIWxvY2F0ZVNwZWNpZmljUGFzc3dvcmRzKCZmaWVsZHMsICZwYXNzd29yZCwgJm9sZFBh
c3N3b3JkKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXNzZW1ibGVQYXNzd29yZEZvcm1SZXN1
bHQoZnVsbE9yaWdpbiwgZnVsbEFjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmaWVsZHMuc3VibWl0LCBmaWVsZHMudXNlck5hbWUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb2xkUGFzc3dvcmQsIHBhc3N3b3JkLCB0aGlzKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhc3N3b3JkRm9y
bVV0aWxzLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGFzc3dvcmRGb3JtVXRpbHMuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NmRjNjMKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhc3N3b3JkRm9ybVV0aWxzLmNwcApAQCAt
MCwwICsxLDExMCBAQAorLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgorKiBWZXJz
aW9uOiBNUEwgMS4xL0dQTCAyLjAvTEdQTCAyLjEKKyoKKyogVGhlIGNvbnRlbnRzIG9mIHRoaXMg
ZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uCisq
IDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGlu
IGNvbXBsaWFuY2Ugd2l0aAorKiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9m
IHRoZSBMaWNlbnNlIGF0CisqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworKgorKiBTb2Z0
d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAi
QVMgSVMiIGJhc2lzLAorKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhw
cmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKKyogZm9yIHRoZSBzcGVjaWZpYyBsYW5n
dWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUKKyogTGljZW5z
ZS4KKyoKKyogVGhlIE9yaWdpbmFsIENvZGUgaXMgTW96aWxsYSBQYXNzd29yZCBNYW5hZ2VyLgor
KgorKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMKKyogQnJp
YW4gUnluZXIuCisqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFy
ZSBDb3B5cmlnaHQgKEMpIDIwMDMKKyogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgorKgorKiBDb250cmlidXRvcihzKToKKyogIEJyaWFuIFJ5bmVyIDxicnluZXJA
YnJpYW5yeW5lci5jb20+CisqCisqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlz
IGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisqIGVpdGhlciB0aGUgR05VIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLCBvcgor
KiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xIG9yIGxh
dGVyICh0aGUgIkxHUEwiKSwKKyogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUg
R1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKKyogb2YgdGhvc2UgYWJvdmUu
IElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9u
bHkKKyogdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQg
bm90IHRvIGFsbG93IG90aGVycyB0bworKiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgorKiBkZWNpc2lvbiBieSBk
ZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5v
dGljZQorKiBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBM
R1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQorKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNp
cGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCisqIHRoZSB0ZXJt
cyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCisqCisqICoqKioq
IEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCisKKy8vIEhlbHBlciB0byBXZWJQYXNzd29yZEZv
cm1EYXRhIHRvIGRvIHRoZSBsb2NhdGluZyBvZiB1c2VybmFtZS9wYXNzd29yZAorLy8gZmllbGRz
LgorLy8gVGhpcyBtZXRob2QgYmFzZWQgb24gRmlyZWZveDIgY29kZSBpbgorLy8gICB0b29sa2l0
L2NvbXBvbmVudHMvcGFzc3dvcmRtZ3IvYmFzZS9uc1Bhc3N3b3JkTWFuYWdlci5jcHAKKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlBhc3N3b3JkRm9ybVV0aWxzLmgiCisKKyNp
bmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50Lmgi
CisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorCisjaW5jbHVkZSAi
RE9NVXRpbGl0aWVzUHJpdmF0ZS5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKKy8vIE1heGltdW0gbnVtYmVyIG9mIHBhc3N3b3JkIGZpZWxkcyB3
ZSB3aWxsIG9ic2VydmUgYmVmb3JlIHRocm93aW5nIG91cgorLy8gaGFuZHMgaW4gdGhlIGFpciBh
bmQgZ2l2aW5nIHVwIHdpdGggYSBnaXZlbiBmb3JtLgorc3RhdGljIGNvbnN0IHNpemVfdCBtYXhQ
YXNzd29yZHMgPSAzOworCit2b2lkIGZpbmRQYXNzd29yZEZvcm1GaWVsZHMoSFRNTEZvcm1FbGVt
ZW50KiBmb3JtLCBQYXNzd29yZEZvcm1GaWVsZHMqIGZpZWxkcykKK3sKKyAgICBBU1NFUlQoZm9y
bSk7CisgICAgQVNTRVJUKGZpZWxkcyk7CisKKyAgICBpbnQgZmlyc3RQYXNzd29yZEluZGV4ID0g
MDsKKyAgICAvLyBGaXJzdCwgZmluZCB0aGUgcGFzc3dvcmQgZmllbGRzIGFuZCBhY3RpdmF0ZWQg
c3VibWl0IGJ1dHRvbgorICAgIGNvbnN0IFZlY3RvcjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4m
IGZvcm1FbGVtZW50cyA9IGZvcm0tPmZvcm1FbGVtZW50czsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGZvcm1FbGVtZW50cy5zaXplKCk7IGkrKykgeworICAgICAgICBIVE1MRm9ybUNvbnRy
b2xFbGVtZW50KiBmb3JtRWxlbWVudCA9IGZvcm1FbGVtZW50c1tpXTsKKyAgICAgICAgaWYgKGZv
cm1FbGVtZW50LT5pc0FjdGl2YXRlZFN1Ym1pdCgpKQorICAgICAgICAgICAgZmllbGRzLT5zdWJt
aXQgPSBmb3JtRWxlbWVudDsKKworICAgICAgICBpZiAoIWZvcm1FbGVtZW50LT5oYXNMb2NhbE5h
bWUoSFRNTE5hbWVzOjppbnB1dFRhZykpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSB0b0hUTUxJbnB1dEVsZW1lbnQoZm9y
bUVsZW1lbnQpOworICAgICAgICBpZiAoIWlucHV0RWxlbWVudC0+aXNFbmFibGVkRm9ybUNvbnRy
b2woKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICgoZmllbGRzLT5wYXNz
d29yZHMuc2l6ZSgpIDwgbWF4UGFzc3dvcmRzKQorICAgICAgICAgICAgJiYgKGlucHV0RWxlbWVu
dC0+aW5wdXRUeXBlKCkgPT0gSFRNTElucHV0RWxlbWVudDo6UEFTU1dPUkQpCisgICAgICAgICAg
ICAmJiAoaW5wdXRFbGVtZW50LT5hdXRvQ29tcGxldGUoKSkpIHsKKyAgICAgICAgICAgIGlmIChm
aWVsZHMtPnBhc3N3b3Jkcy5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgZmlyc3RQYXNzd29y
ZEluZGV4ID0gaTsKKyAgICAgICAgICAgIGZpZWxkcy0+cGFzc3dvcmRzLmFwcGVuZChpbnB1dEVs
ZW1lbnQpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFmaWVsZHMtPnBhc3N3b3Jkcy5p
c0VtcHR5KCkpIHsKKyAgICAgICAgLy8gVGhlbiwgc2VhcmNoIGJhY2t3YXJkcyBmb3IgdGhlIHVz
ZXJuYW1lIGZpZWxkCisgICAgICAgIGZvciAoaW50IGkgPSBmaXJzdFBhc3N3b3JkSW5kZXggLSAx
OyBpID49IDA7IGktLSkgeworICAgICAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogZm9y
bUVsZW1lbnQgPSBmb3JtRWxlbWVudHNbaV07CisgICAgICAgICAgICBpZiAoIWZvcm1FbGVtZW50
LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjppbnB1dFRhZykpCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IHRv
SFRNTElucHV0RWxlbWVudChmb3JtRWxlbWVudCk7CisgICAgICAgICAgICBpZiAoIWlucHV0RWxl
bWVudC0+aXNFbmFibGVkRm9ybUNvbnRyb2woKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICAgICAgaWYgKChpbnB1dEVsZW1lbnQtPmlucHV0VHlwZSgpID09IEhUTUxJbnB1
dEVsZW1lbnQ6OlRFWFQpCisgICAgICAgICAgICAgICAgJiYgKGlucHV0RWxlbWVudC0+YXV0b0Nv
bXBsZXRlKCkpKSB7CisgICAgICAgICAgICAgICAgZmllbGRzLT51c2VyTmFtZSA9IGlucHV0RWxl
bWVudDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlBhc3N3b3JkRm9ybVV0aWxzLmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlBhc3N3b3JkRm9ybVV0aWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
ZmQ1MDNiNAotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGFzc3dv
cmRGb3JtVXRpbHMuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJQYXNzd29yZEZvcm1VdGls
c19oCisjZGVmaW5lIFdlYlBhc3N3b3JkRm9ybVV0aWxzX2gKKworI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgSFRNTElucHV0RWxlbWVudDsKK2Ns
YXNzIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ7CitjbGFzcyBIVE1MRm9ybUVsZW1lbnQ7Cit9CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCisvLyBIZWxwZXIgc3RydWN0dXJlIHRvIGxvY2F0ZSB1c2Vy
bmFtZSwgcGFzc3dvcmRzIGFuZCBzdWJtaXQgZmllbGRzLgorc3RydWN0IFBhc3N3b3JkRm9ybUZp
ZWxkcyB7CisgICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogdXNlck5hbWU7CisgICAgVmVj
dG9yPFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqPiBwYXNzd29yZHM7CisgICAgV2ViQ29yZTo6
SFRNTEZvcm1Db250cm9sRWxlbWVudCogc3VibWl0OworICAgIFBhc3N3b3JkRm9ybUZpZWxkcygp
IDogdXNlck5hbWUoMCksIHN1Ym1pdCgwKSB7IH0KK307CisKK3ZvaWQgZmluZFBhc3N3b3JkRm9y
bUZpZWxkcyhXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQqIGZvcm0sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUGFzc3dvcmRGb3JtRmllbGRzKiBmaWVsZHMpOworCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBs
dWdpbkNvbnRhaW5lckltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQbHVnaW5Db250
YWluZXJJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2YzY2Vm
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQbHVnaW5Db250YWlu
ZXJJbXBsLmNwcApAQCAtMCwwICsxLDU1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJXZWJQbHVnaW5Db250YWluZXJJbXBsLmgiCisKKyNpbmNsdWRlICJDaHJvbWVDbGllbnRJbXBs
LmgiCisjaW5jbHVkZSAiV2ViQ3Vyc29ySW5mby5oIgorI2luY2x1ZGUgIldlYkRhdGFTb3VyY2VJ
bXBsLmgiCisjaW5jbHVkZSAiV2ViSW5wdXRFdmVudC5oIgorI2luY2x1ZGUgIldlYklucHV0RXZl
bnRDb252ZXJzaW9uLmgiCisjaW5jbHVkZSAiV2ViS2l0LmgiCisjaW5jbHVkZSAiV2ViUGx1Z2lu
LmgiCisjaW5jbHVkZSAiV2ViUmVjdC5oIgorI2luY2x1ZGUgIldlYlVSTEVycm9yLmgiCisjaW5j
bHVkZSAiV2ViVVJMUmVxdWVzdC5oIgorI2luY2x1ZGUgIldlYlZlY3Rvci5oIgorI2luY2x1ZGUg
IldyYXBwZWRSZXNvdXJjZVJlc3BvbnNlLmgiCisKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisj
aW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiRm9ybVN0YXRlLmgiCisjaW5j
bHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRSZXF1ZXN0LmgiCisjaW5jbHVkZSAi
RnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSG9z
dFdpbmRvdy5oIgorI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgorI2luY2x1ZGUgIkhUTUxQbHVnSW5FbGVtZW50LmgiCisjaW5jbHVkZSAiS2V5Ym9h
cmRFdmVudC5oIgorI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisj
aW5jbHVkZSAiU2Nyb2xsVmlldy5oIgorCisjaWYgV0VCS0lUX1VTSU5HX1NLSUEKKyNpbmNsdWRl
ICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCisjZW5kaWYKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCisvLyBQdWJsaWMgbWV0aG9kcyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit2
b2lkIFdlYlBsdWdpbkNvbnRhaW5lckltcGw6OnNldEZyYW1lUmVjdChjb25zdCBJbnRSZWN0JiBm
cmFtZVJlY3QpCit7CisgICAgV2lkZ2V0OjpzZXRGcmFtZVJlY3QoZnJhbWVSZWN0KTsKKyAgICBy
ZXBvcnRHZW9tZXRyeSgpOworfQorCit2b2lkIFdlYlBsdWdpbkNvbnRhaW5lckltcGw6OnBhaW50
KEdyYXBoaWNzQ29udGV4dCogZ2MsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpCit7CisgICAg
aWYgKGdjLT5wYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICgh
cGFyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIERvbid0IHBhaW50IGFueXRoaW5n
IGlmIHRoZSBwbHVnaW4gZG9lc24ndCBpbnRlcnNlY3QgdGhlIGRhbWFnZSByZWN0LgorICAgIGlm
ICghZnJhbWVSZWN0KCkuaW50ZXJzZWN0cyhkYW1hZ2VSZWN0KSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgZ2MtPnNhdmUoKTsKKworICAgIEFTU0VSVChwYXJlbnQoKS0+aXNGcmFtZVZpZXcoKSk7
CisgICAgU2Nyb2xsVmlldyogdmlldyA9IHBhcmVudCgpOworCisgICAgLy8gVGhlIHBsdWdpbiBp
cyBwb3NpdGlvbmVkIGluIHdpbmRvdyBjb29yZGluYXRlcywgc28gaXQgbmVlZHMgdG8gYmUgcGFp
bnRlZAorICAgIC8vIGluIHdpbmRvdyBjb29yZGluYXRlcy4KKyAgICBJbnRQb2ludCBvcmlnaW4g
PSB2aWV3LT53aW5kb3dUb0NvbnRlbnRzKEludFBvaW50KDAsIDApKTsKKyAgICBnYy0+dHJhbnNs
YXRlKHN0YXRpY19jYXN0PGZsb2F0PihvcmlnaW4ueCgpKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG9y
aWdpbi55KCkpKTsKKworI2lmIFdFQktJVF9VU0lOR19TS0lBCisgICAgV2ViQ2FudmFzKiBjYW52
YXMgPSBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpOworI2VsaWYgV0VCS0lUX1VTSU5H
X0NHCisgICAgV2ViQ2FudmFzKiBjYW52YXMgPSBnYy0+cGxhdGZvcm1Db250ZXh0KCk7CisjZW5k
aWYKKworICAgIEludFJlY3Qgd2luZG93UmVjdCA9CisgICAgICAgIEludFJlY3Qodmlldy0+Y29u
dGVudHNUb1dpbmRvdyhkYW1hZ2VSZWN0LmxvY2F0aW9uKCkpLCBkYW1hZ2VSZWN0LnNpemUoKSk7
CisgICAgbV93ZWJQbHVnaW4tPnBhaW50KGNhbnZhcywgd2luZG93UmVjdCk7CisKKyAgICBnYy0+
cmVzdG9yZSgpOworfQorCit2b2lkIFdlYlBsdWdpbkNvbnRhaW5lckltcGw6OmludmFsaWRhdGVS
ZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFwYXJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgSW50UmVjdCBkYW1hZ2VSZWN0ID0gY29udmVydFRvQ29udGFpbmluZ1dp
bmRvdyhyZWN0KTsKKworICAgIC8vIEdldCBvdXIgY2xpcCByZWN0IGFuZCBpbnRlcnNlY3Qgd2l0
aCBpdCB0byBlbnN1cmUgd2UgZG9uJ3QgaW52YWxpZGF0ZQorICAgIC8vIHRvbyBtdWNoLgorICAg
IEludFJlY3QgY2xpcFJlY3QgPSBwYXJlbnQoKS0+d2luZG93Q2xpcFJlY3QoKTsKKyAgICBkYW1h
Z2VSZWN0LmludGVyc2VjdChjbGlwUmVjdCk7CisKKyAgICBwYXJlbnQoKS0+aG9zdFdpbmRvdygp
LT5yZXBhaW50KGRhbWFnZVJlY3QsIHRydWUpOworfQorCit2b2lkIFdlYlBsdWdpbkNvbnRhaW5l
ckltcGw6OnNldEZvY3VzKCkKK3sKKyAgICBXaWRnZXQ6OnNldEZvY3VzKCk7CisgICAgbV93ZWJQ
bHVnaW4tPnVwZGF0ZUZvY3VzKHRydWUpOworfQorCit2b2lkIFdlYlBsdWdpbkNvbnRhaW5lcklt
cGw6OnNob3coKQoreworICAgIHNldFNlbGZWaXNpYmxlKHRydWUpOworICAgIG1fd2ViUGx1Z2lu
LT51cGRhdGVWaXNpYmlsaXR5KHRydWUpOworCisgICAgV2lkZ2V0OjpzaG93KCk7Cit9CisKK3Zv
aWQgV2ViUGx1Z2luQ29udGFpbmVySW1wbDo6aGlkZSgpCit7CisgICAgc2V0U2VsZlZpc2libGUo
ZmFsc2UpOworICAgIG1fd2ViUGx1Z2luLT51cGRhdGVWaXNpYmlsaXR5KGZhbHNlKTsKKworICAg
IFdpZGdldDo6aGlkZSgpOworfQorCit2b2lkIFdlYlBsdWdpbkNvbnRhaW5lckltcGw6OmhhbmRs
ZUV2ZW50KEV2ZW50KiBldmVudCkKK3sKKyAgICBpZiAoIW1fd2ViUGx1Z2luLT5hY2NlcHRzSW5w
dXRFdmVudHMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVGhlIGV2ZW50cyB3ZSBwYXNz
IGFyZSBkZWZpbmVkIGF0OgorICAgIC8vICAgIGh0dHA6Ly9kZXZlZGdlLXRlbXAubW96aWxsYS5v
cmcvbGlicmFyeS9tYW51YWxzLzIwMDIvcGx1Z2luLzEuMC9zdHJ1Y3R1cmVzNS5odG1sIzEwMDAw
MDAKKyAgICAvLyBEb24ndCB0YWtlIHRoZSBkb2N1bWVudGF0aW9uIGFzIHRydXRoLCBob3dldmVy
LiAgVGhlcmUgYXJlIG1hbnkgY2FzZXMKKyAgICAvLyB3aGVyZSBtb3ppbGxhIGJlaGF2ZXMgZGlm
ZmVyZW50bHkgdGhhbiB0aGUgc3BlYy4KKyAgICBpZiAoZXZlbnQtPmlzTW91c2VFdmVudCgpKQor
ICAgICAgICBoYW5kbGVNb3VzZUV2ZW50KHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCkp
OworICAgIGVsc2UgaWYgKGV2ZW50LT5pc0tleWJvYXJkRXZlbnQoKSkKKyAgICAgICAgaGFuZGxl
S2V5Ym9hcmRFdmVudChzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZlbnQpKTsKK30KKwor
dm9pZCBXZWJQbHVnaW5Db250YWluZXJJbXBsOjpmcmFtZVJlY3RzQ2hhbmdlZCgpCit7CisgICAg
V2lkZ2V0OjpmcmFtZVJlY3RzQ2hhbmdlZCgpOworICAgIHJlcG9ydEdlb21ldHJ5KCk7Cit9CisK
K3ZvaWQgV2ViUGx1Z2luQ29udGFpbmVySW1wbDo6c2V0UGFyZW50VmlzaWJsZShib29sIHBhcmVu
dFZpc2libGUpCit7CisgICAgLy8gV2Ugb3ZlcnJpZGUgdGhpcyBmdW5jdGlvbiB0byBtYWtlIHN1
cmUgdGhhdCBnZW9tZXRyeSB1cGRhdGVzIGFyZSBzZW50CisgICAgLy8gb3ZlciB0byB0aGUgcGx1
Z2luLiBGb3IgZS5nLiB3aGVuIGEgcGx1Z2luIGlzIGluc3RhbnRpYXRlZCBpdCBkb2VzIG5vdAor
ICAgIC8vIGhhdmUgYSB2YWxpZCBwYXJlbnQuIEFzIGEgcmVzdWx0IHRoZSBmaXJzdCBnZW9tZXRy
eSB1cGRhdGUgZnJvbSB3ZWJraXQKKyAgICAvLyBpcyBpZ25vcmVkLiBUaGlzIGZ1bmN0aW9uIGlz
IGNhbGxlZCB3aGVuIHRoZSBwbHVnaW4gZXZlbnR1YWxseSBnZXRzIGEKKyAgICAvLyBwYXJlbnQu
CisKKyAgICBpZiAoaXNQYXJlbnRWaXNpYmxlKCkgPT0gcGFyZW50VmlzaWJsZSkKKyAgICAgICAg
cmV0dXJuOyAgLy8gTm8gY2hhbmdlLgorCisgICAgV2lkZ2V0OjpzZXRQYXJlbnRWaXNpYmxlKHBh
cmVudFZpc2libGUpOworICAgIGlmICghaXNTZWxmVmlzaWJsZSgpKQorICAgICAgICByZXR1cm47
ICAvLyBUaGlzIHdpZGdldCBoYXMgZXhwbGljaXRlbHkgYmVlbiBtYXJrZWQgYXMgbm90IHZpc2li
bGUuCisKKyAgICBtX3dlYlBsdWdpbi0+dXBkYXRlVmlzaWJpbGl0eShpc1Zpc2libGUoKSk7Cit9
CisKK3ZvaWQgV2ViUGx1Z2luQ29udGFpbmVySW1wbDo6c2V0UGFyZW50KFNjcm9sbFZpZXcqIHZp
ZXcpCit7CisgICAgLy8gV2Ugb3ZlcnJpZGUgdGhpcyBmdW5jdGlvbiBzbyB0aGF0IGlmIHRoZSBw
bHVnaW4gaXMgd2luZG93ZWQsIHdlIGNhbiBjYWxsCisgICAgLy8gTlBQX1NldFdpbmRvdyBhdCB0
aGUgZmlyc3QgcG9zc2libGUgbW9tZW50LiAgVGhpcyBlbnN1cmVzIHRoYXQKKyAgICAvLyBOUFBf
U2V0V2luZG93IGlzIGNhbGxlZCBiZWZvcmUgdGhlIG1hbnVhbCBsb2FkIGRhdGEgaXMgc2VudCB0
byBhIHBsdWdpbi4KKyAgICAvLyBJZiB0aGlzIG9yZGVyIGlzIHJldmVyc2VkLCBGbGFzaCB3b24n
dCBsb2FkIHZpZGVvcy4KKworICAgIFdpZGdldDo6c2V0UGFyZW50KHZpZXcpOworICAgIGlmICh2
aWV3KQorICAgICAgICByZXBvcnRHZW9tZXRyeSgpOworfQorCit2b2lkIFdlYlBsdWdpbkNvbnRh
aW5lckltcGw6OmludmFsaWRhdGUoKQoreworICAgIFdpZGdldDo6aW52YWxpZGF0ZSgpOworfQor
Cit2b2lkIFdlYlBsdWdpbkNvbnRhaW5lckltcGw6OmludmFsaWRhdGVSZWN0KGNvbnN0IFdlYlJl
Y3QmIHJlY3QpCit7CisgICAgaW52YWxpZGF0ZVJlY3Qoc3RhdGljX2Nhc3Q8SW50UmVjdD4ocmVj
dCkpOworfQorCit2b2lkIFdlYlBsdWdpbkNvbnRhaW5lckltcGw6OnJlcG9ydEdlb21ldHJ5KCkK
K3sKKyAgICBpZiAoIXBhcmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBJbnRSZWN0IHdp
bmRvd1JlY3QsIGNsaXBSZWN0OworICAgIFZlY3RvcjxJbnRSZWN0PiBjdXRPdXRSZWN0czsKKyAg
ICBjYWxjdWxhdGVHZW9tZXRyeShmcmFtZVJlY3QoKSwgd2luZG93UmVjdCwgY2xpcFJlY3QsIGN1
dE91dFJlY3RzKTsKKworICAgIG1fd2ViUGx1Z2luLT51cGRhdGVHZW9tZXRyeSh3aW5kb3dSZWN0
LCBjbGlwUmVjdCwgY3V0T3V0UmVjdHMsIGlzVmlzaWJsZSgpKTsKK30KKwordm9pZCBXZWJQbHVn
aW5Db250YWluZXJJbXBsOjpjbGVhclNjcmlwdE9iamVjdHMoKQoreworICAgIEZyYW1lKiBmcmFt
ZSA9IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAg
ICAgICByZXR1cm47CisgICAgZnJhbWUtPnNjcmlwdCgpLT5jbGVhbnVwU2NyaXB0T2JqZWN0c0Zv
clBsdWdpbih0aGlzKTsKK30KKworTlBPYmplY3QqIFdlYlBsdWdpbkNvbnRhaW5lckltcGw6OnNj
cmlwdGFibGVPYmplY3RGb3JFbGVtZW50KCkKK3sKKyAgICByZXR1cm4gbV9lbGVtZW50LT5nZXRO
UE9iamVjdCgpOworfQorCitXZWJTdHJpbmcgV2ViUGx1Z2luQ29udGFpbmVySW1wbDo6ZXhlY3V0
ZVNjcmlwdFVSTChjb25zdCBXZWJVUkwmIHVybCwgYm9vbCBwb3B1cHNBbGxvd2VkKQoreworICAg
IEZyYW1lKiBmcmFtZSA9IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKKyAgICBpZiAo
IWZyYW1lKQorICAgICAgICByZXR1cm4gV2ViU3RyaW5nKCk7CisKKyAgICBjb25zdCBLVVJMJiBr
dXJsID0gdXJsOworICAgIEFTU0VSVChrdXJsLnByb3RvY29sSXMoImphdmFzY3JpcHQiKSk7CisK
KyAgICBTdHJpbmcgc2NyaXB0ID0gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKAorICAgICAgICBr
dXJsLnN0cmluZygpLnN1YnN0cmluZyhzdHJsZW4oImphdmFzY3JpcHQ6IikpKTsKKworICAgIFNj
cmlwdFZhbHVlIHJlc3VsdCA9IGZyYW1lLT5zY3JpcHQoKS0+ZXhlY3V0ZVNjcmlwdChzY3JpcHQs
IHBvcHVwc0FsbG93ZWQpOworCisgICAgLy8gRmFpbHVyZSBpcyByZXBvcnRlZCBhcyBhIG51bGwg
c3RyaW5nLgorICAgIFN0cmluZyByZXN1bHRTdHI7CisgICAgcmVzdWx0LmdldFN0cmluZyhyZXN1
bHRTdHIpOworICAgIHJldHVybiByZXN1bHRTdHI7Cit9CisKK3ZvaWQgV2ViUGx1Z2luQ29udGFp
bmVySW1wbDo6bG9hZEZyYW1lUmVxdWVzdCgKKyAgICBjb25zdCBXZWJVUkxSZXF1ZXN0JiByZXF1
ZXN0LCBjb25zdCBXZWJTdHJpbmcmIHRhcmdldCwgYm9vbCBub3RpZnlOZWVkZWQsIHZvaWQqIG5v
dGlmeURhdGEpCit7CisgICAgRnJhbWUqIGZyYW1lID0gbV9lbGVtZW50LT5kb2N1bWVudCgpLT5m
cmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsgIC8vIEZJWE1FOiBzZW5k
IGEgbm90aWZpY2F0aW9uIGluIHRoaXMgY2FzZT8KKworICAgIGlmIChub3RpZnlOZWVkZWQpIHsK
KyAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgYSBiaXQgb2YgaGFjayB0byBhbGxvdyB1cyB0byBv
YnNlcnZlIGNvbXBsZXRpb24gb2YKKyAgICAgICAgLy8gb3VyIGZyYW1lIHJlcXVlc3QuICBJdCB3
b3VsZCBiZSBiZXR0ZXIgdG8gZXZvbHZlIEZyYW1lTG9hZGVyIHRvCisgICAgICAgIC8vIHN1cHBv
cnQgYSBjb21wbGV0aW9uIGNhbGxiYWNrIGluc3RlYWQuCisgICAgICAgIFdlYlBsdWdpbkxvYWRP
YnNlcnZlciogb2JzZXJ2ZXIgPQorICAgICAgICAgICAgbmV3IFdlYlBsdWdpbkxvYWRPYnNlcnZl
cih0aGlzLCByZXF1ZXN0LnVybCgpLCBub3RpZnlEYXRhKTsKKyAgICAgICAgbV9wbHVnaW5Mb2Fk
T2JzZXJ2ZXJzLmFwcGVuZChvYnNlcnZlcik7CisgICAgICAgIFdlYkRhdGFTb3VyY2VJbXBsOjpz
ZXROZXh0UGx1Z2luTG9hZE9ic2VydmVyKG9ic2VydmVyKTsKKyAgICB9CisKKyAgICBGcmFtZUxv
YWRSZXF1ZXN0IGZyYW1lUmVxdWVzdChyZXF1ZXN0LnRvUmVzb3VyY2VSZXF1ZXN0KCkpOworICAg
IGZyYW1lUmVxdWVzdC5zZXRGcmFtZU5hbWUodGFyZ2V0KTsKKworICAgIGZyYW1lLT5sb2FkZXIo
KS0+bG9hZEZyYW1lUmVxdWVzdCgKKyAgICAgICAgZnJhbWVSZXF1ZXN0LAorICAgICAgICBmYWxz
ZSwgIC8vIGxvY2sgaGlzdG9yeQorICAgICAgICBmYWxzZSwgIC8vIGxvY2sgYmFjayBmb3J3YXJk
IGxpc3QKKyAgICAgICAgMCwgICAgICAvLyBldmVudAorICAgICAgICAwLCAgICAgLy8gZm9ybSBz
dGF0ZQorICAgICAgICBTZW5kUmVmZXJyZXIpOworfQorCit2b2lkIFdlYlBsdWdpbkNvbnRhaW5l
ckltcGw6OmRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25z
ZSkKK3sKKyAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgcGx1Z2luIHJlY2VpdmVzIHdpbmRvdyBn
ZW9tZXRyeSBiZWZvcmUgZGF0YSwgb3IgZWxzZQorICAgIC8vIHBsdWdpbnMgbWlzYmVoYXZlLgor
ICAgIGZyYW1lUmVjdHNDaGFuZ2VkKCk7CisKKyAgICBXcmFwcGVkUmVzb3VyY2VSZXNwb25zZSB1
cmxSZXNwb25zZShyZXNwb25zZSk7CisgICAgbV93ZWJQbHVnaW4tPmRpZFJlY2VpdmVSZXNwb25z
ZSh1cmxSZXNwb25zZSk7Cit9CisKK3ZvaWQgV2ViUGx1Z2luQ29udGFpbmVySW1wbDo6ZGlkUmVj
ZWl2ZURhdGEoY29uc3QgY2hhciAqZGF0YSwgaW50IGRhdGFMZW5ndGgpCit7CisgICAgbV93ZWJQ
bHVnaW4tPmRpZFJlY2VpdmVEYXRhKGRhdGEsIGRhdGFMZW5ndGgpOworfQorCit2b2lkIFdlYlBs
dWdpbkNvbnRhaW5lckltcGw6OmRpZEZpbmlzaExvYWRpbmcoKQoreworICAgIG1fd2ViUGx1Z2lu
LT5kaWRGaW5pc2hMb2FkaW5nKCk7Cit9CisKK3ZvaWQgV2ViUGx1Z2luQ29udGFpbmVySW1wbDo6
ZGlkRmFpbExvYWRpbmcoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCit7CisgICAgbV93ZWJQ
bHVnaW4tPmRpZEZhaWxMb2FkaW5nKGVycm9yKTsKK30KKworTlBPYmplY3QqIFdlYlBsdWdpbkNv
bnRhaW5lckltcGw6OnNjcmlwdGFibGVPYmplY3QoKQoreworICAgIHJldHVybiBtX3dlYlBsdWdp
bi0+c2NyaXB0YWJsZU9iamVjdCgpOworfQorCit2b2lkIFdlYlBsdWdpbkNvbnRhaW5lckltcGw6
OndpbGxEZXN0cm95UGx1Z2luTG9hZE9ic2VydmVyKFdlYlBsdWdpbkxvYWRPYnNlcnZlciogb2Jz
ZXJ2ZXIpCit7CisgICAgc2l6ZV90IHBvcyA9IG1fcGx1Z2luTG9hZE9ic2VydmVycy5maW5kKG9i
c2VydmVyKTsKKyAgICBpZiAocG9zID09IG5vdEZvdW5kKQorICAgICAgICByZXR1cm47CisgICAg
bV9wbHVnaW5Mb2FkT2JzZXJ2ZXJzLnJlbW92ZShwb3MpOworfQorCisvLyBQcml2YXRlIG1ldGhv
ZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCitXZWJQbHVnaW5Db250YWluZXJJbXBsOjp+V2ViUGx1Z2luQ29udGFpbmVySW1w
bCgpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3BsdWdpbkxvYWRPYnNlcnZlcnMu
c2l6ZSgpOyArK2kpCisgICAgICAgIG1fcGx1Z2luTG9hZE9ic2VydmVyc1tpXS0+Y2xlYXJQbHVn
aW5Db250YWluZXIoKTsKKyAgICBtX3dlYlBsdWdpbi0+ZGVzdHJveSgpOworfQorCit2b2lkIFdl
YlBsdWdpbkNvbnRhaW5lckltcGw6OmhhbmRsZU1vdXNlRXZlbnQoTW91c2VFdmVudCogZXZlbnQp
Cit7CisgICAgQVNTRVJUKHBhcmVudCgpLT5pc0ZyYW1lVmlldygpKTsKKworICAgIC8vIFdlIGNh
Y2hlIHRoZSBwYXJlbnQgRnJhbWVWaWV3IGhlcmUgYXMgdGhlIHBsdWdpbiB3aWRnZXQgY291bGQg
YmUgZGVsZXRlZAorICAgIC8vIGluIHRoZSBjYWxsIHRvIEhhbmRsZUV2ZW50LiBTZWUgaHR0cDov
L2IvaXNzdWU/aWQ9MTM2Mjk0OAorICAgIEZyYW1lVmlldyogcGFyZW50VmlldyA9IHN0YXRpY19j
YXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKTsKKworICAgIFdlYk1vdXNlRXZlbnRCdWlsZGVyIHdl
YkV2ZW50KHBhcmVudFZpZXcsICpldmVudCk7CisgICAgaWYgKHdlYkV2ZW50LnR5cGUgPT0gV2Vi
SW5wdXRFdmVudDo6VW5kZWZpbmVkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoZXZlbnQt
PnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQpIHsKKyAgICAgICAgLy8gRW5z
dXJlIHRoYXQgdGhlIGZyYW1lIGNvbnRhaW5pbmcgdGhlIHBsdWdpbiBoYXMgZm9jdXMuCisgICAg
ICAgIEZyYW1lKiBjb250YWluaW5nRnJhbWUgPSBwYXJlbnRWaWV3LT5mcmFtZSgpOworICAgICAg
ICBpZiAoUGFnZSogY3VycmVudFBhZ2UgPSBjb250YWluaW5nRnJhbWUtPnBhZ2UoKSkKKyAgICAg
ICAgICAgIGN1cnJlbnRQYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+c2V0Rm9jdXNlZEZyYW1lKGNv
bnRhaW5pbmdGcmFtZSk7CisgICAgICAgIC8vIEdpdmUgZm9jdXMgdG8gb3VyIGNvbnRhaW5pbmcg
SFRNTFBsdWdpbkVsZW1lbnQuCisgICAgICAgIGNvbnRhaW5pbmdGcmFtZS0+ZG9jdW1lbnQoKS0+
c2V0Rm9jdXNlZE5vZGUobV9lbGVtZW50KTsKKyAgICB9CisKKyAgICBXZWJDdXJzb3JJbmZvIGN1
cnNvckluZm87CisgICAgYm9vbCBoYW5kbGVkID0gbV93ZWJQbHVnaW4tPmhhbmRsZUlucHV0RXZl
bnQod2ViRXZlbnQsIGN1cnNvckluZm8pOworI2lmICFQTEFURk9STShEQVJXSU4pCisgICAgLy8g
VE9ETyhwa2FzdGluZyk6IGh0dHA6Ly9iLzExMTk2OTEgVGhpcyBjb25kaXRpb25hbCBzZWVtcyBl
eGFjdGx5CisgICAgLy8gYmFja3dhcmRzLCBidXQgaWYgSSByZXZlcnNlIGl0LCBnaXZpbmcgZm9j
dXMgdG8gYSB0cmFuc3BhcmVudAorICAgIC8vICh3aW5kb3dsZXNzKSBwbHVnaW4gZmFpbHMuCisg
ICAgaGFuZGxlZCA9ICFoYW5kbGVkOworICAgIC8vIFRPRE8oYXdhbGtlcik6IG9kZGx5LCB0aGUg
YWJvdmUgaXMgbm90IHRydWUgaW4gTWFjIGJ1aWxkcy4gIExvb2tpbmcKKyAgICAvLyBhdCBBcHBs
ZSdzIGNvcnJlc3BvbmRpbmcgY29kZSBmb3IgTWFjIGFuZCBXaW5kb3dzIChQbHVnaW5WaWV3TWFj
IGFuZAorICAgIC8vIFBsdWdpblZpZXdXaW4pLCBzZXREZWZhdWx0SGFuZGxlZCgpIGdldHMgY2Fs
bGVkIHdoZW4gaGFuZGxlSW5wdXRFdmVudCgpCisgICAgLy8gcmV0dXJucyB0cnVlLCB3aGljaCB0
aGVuIGluZGljYXRlcyB0byBXZWJDb3JlIHRoYXQgdGhlIHBsdWdpbiB3YW50cyB0bworICAgIC8v
IHN3YWxsb3cgdGhlIGV2ZW50LS13aGljaCBpcyB3aGF0IHdlIHdhbnQuICBDYWxsaW5nIHNldERl
ZmF1bHRIYW5kbGVkKCkKKyAgICAvLyBmaXhlcyBzZXZlcmFsIE1hYyBDaHJvbWl1bSBidWdzLCBi
dXQgZG9lcyBpbmRlZWQgcHJldmVudCB3aW5kb3dsZXNzIHBsdWdpbnMKKyAgICAvLyBmcm9tIGdl
dHRpbmcgZm9jdXMgaW4gV2luZG93cyBidWlsZHMsIGFzIHBrYXN0aW5nIG5vdGVzIGFib3ZlLiAg
U28gZm9yCisgICAgLy8gbm93LCB3ZSBvbmx5IGRvIHNvIGluIE1hYyBidWlsZHMuCisjZW5kaWYK
KyAgICBpZiAoaGFuZGxlZCkKKyAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisK
KyAgICAvLyBBIHdpbmRvd2xlc3MgcGx1Z2luIGNhbiBjaGFuZ2UgdGhlIGN1cnNvciBpbiByZXNw
b25zZSB0byBhIG1vdXNlIG1vdmUKKyAgICAvLyBldmVudC4gIFdlIG5lZWQgdG8gcmVmbGVjdCB0
aGUgY2hhbmdlZCBjdXJzb3IgaW4gdGhlIGZyYW1lIHZpZXcgYXMgdGhlCisgICAgLy8gbW91c2Ug
aXMgbW92ZWQgaW4gdGhlIGJvdW5kYXJpZXMgb2YgdGhlIHdpbmRvd2xlc3MgcGx1Z2luLgorICAg
IFBhZ2UqIHBhZ2UgPSBwYXJlbnRWaWV3LT5mcmFtZSgpLT5wYWdlKCk7CisgICAgaWYgKCFwYWdl
KQorICAgICAgICByZXR1cm47CisgICAgQ2hyb21lQ2xpZW50SW1wbCogY2hyb21lQ2xpZW50ID0K
KyAgICAgICAgc3RhdGljX2Nhc3Q8Q2hyb21lQ2xpZW50SW1wbCo+KHBhZ2UtPmNocm9tZSgpLT5j
bGllbnQoKSk7CisgICAgY2hyb21lQ2xpZW50LT5zZXRDdXJzb3JGb3JQbHVnaW4oY3Vyc29ySW5m
byk7Cit9CisKK3ZvaWQgV2ViUGx1Z2luQ29udGFpbmVySW1wbDo6aGFuZGxlS2V5Ym9hcmRFdmVu
dChLZXlib2FyZEV2ZW50KiBldmVudCkKK3sKKyAgICBXZWJLZXlib2FyZEV2ZW50QnVpbGRlciB3
ZWJFdmVudCgqZXZlbnQpOworICAgIGlmICh3ZWJFdmVudC50eXBlID09IFdlYklucHV0RXZlbnQ6
OlVuZGVmaW5lZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViQ3Vyc29ySW5mbyBjdXJzb3Jf
aW5mbzsKKyAgICBib29sIGhhbmRsZWQgPSBtX3dlYlBsdWdpbi0+aGFuZGxlSW5wdXRFdmVudCh3
ZWJFdmVudCwgY3Vyc29yX2luZm8pOworI2lmICFQTEFURk9STShEQVJXSU4pCisgICAgLy8gVE9E
Tyhwa2FzdGluZyk6IGh0dHA6Ly9iLzExMTk2OTEgU2VlIGFib3ZlLgorICAgIGhhbmRsZWQgPSAh
aGFuZGxlZDsKKyNlbmRpZgorICAgIGlmIChoYW5kbGVkKQorICAgICAgICBldmVudC0+c2V0RGVm
YXVsdEhhbmRsZWQoKTsKK30KKwordm9pZCBXZWJQbHVnaW5Db250YWluZXJJbXBsOjpjYWxjdWxh
dGVHZW9tZXRyeShjb25zdCBJbnRSZWN0JiBmcmFtZVJlY3QsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFJlY3QmIHdpbmRvd1JlY3QsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFJlY3QmIGNsaXBSZWN0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8
SW50UmVjdD4mIGN1dE91dFJlY3RzKQoreworICAgIHdpbmRvd1JlY3QgPSBJbnRSZWN0KAorICAg
ICAgICBwYXJlbnQoKS0+Y29udGVudHNUb1dpbmRvdyhmcmFtZVJlY3QubG9jYXRpb24oKSksIGZy
YW1lUmVjdC5zaXplKCkpOworCisgICAgLy8gQ2FsY3VsYXRlIGEgY2xpcC1yZWN0IHNvIHRoYXQg
d2UgZG9uJ3Qgb3ZlcmxhcCB0aGUgc2Nyb2xsYmFycywgZXRjLgorICAgIGNsaXBSZWN0ID0gd2lu
ZG93Q2xpcFJlY3QoKTsKKyAgICBjbGlwUmVjdC5tb3ZlKC13aW5kb3dSZWN0LngoKSwgLXdpbmRv
d1JlY3QueSgpKTsKKworICAgIHdpbmRvd0N1dE91dFJlY3RzKGZyYW1lUmVjdCwgY3V0T3V0UmVj
dHMpOworICAgIC8vIENvbnZlcnQgdG8gdGhlIHBsdWdpbiBwb3NpdGlvbi4KKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGN1dE91dFJlY3RzLnNpemUoKTsgaSsrKQorICAgICAgICBjdXRPdXRS
ZWN0c1tpXS5tb3ZlKC1mcmFtZVJlY3QueCgpLCAtZnJhbWVSZWN0LnkoKSk7Cit9CisKK1dlYkNv
cmU6OkludFJlY3QgV2ViUGx1Z2luQ29udGFpbmVySW1wbDo6d2luZG93Q2xpcFJlY3QoKSBjb25z
dAoreworICAgIC8vIFN0YXJ0IGJ5IGNsaXBwaW5nIHRvIG91ciBib3VuZHMuCisgICAgSW50UmVj
dCBjbGlwUmVjdCA9CisgICAgICAgIGNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3coSW50UmVjdCgw
LCAwLCB3aWR0aCgpLCBoZWlnaHQoKSkpOworCisgICAgLy8gZG9jdW1lbnQoKS0+cmVuZGVyZXIo
KSBjYW4gYmUgMCB3aGVuIHdlIHJlY2VpdmUgbWVzc2FnZXMgZnJvbSB0aGUKKyAgICAvLyBwbHVn
aW5zIHdoaWxlIHdlIGFyZSBkZXN0cm95aW5nIGEgZnJhbWUuCisgICAgaWYgKG1fZWxlbWVudC0+
cmVuZGVyZXIoKS0+ZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSkgeworICAgICAgICAvLyBUYWtlIG91
ciBlbGVtZW50IGFuZCBnZXQgdGhlIGNsaXAgcmVjdCBmcm9tIHRoZSBlbmNsb3NpbmcgbGF5ZXIg
YW5kCisgICAgICAgIC8vIGZyYW1lIHZpZXcuCisgICAgICAgIFJlbmRlckxheWVyKiBsYXllciA9
IG1fZWxlbWVudC0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKTsKKyAgICAgICAgY2xpcFJl
Y3QuaW50ZXJzZWN0KAorICAgICAgICAgICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLT52aWV3KCkt
PndpbmRvd0NsaXBSZWN0Rm9yTGF5ZXIobGF5ZXIsIHRydWUpKTsKKyAgICB9CisKKyAgICByZXR1
cm4gY2xpcFJlY3Q7Cit9CisKK3N0YXRpYyB2b2lkIGdldE9iamVjdFN0YWNrKGNvbnN0IFJlbmRl
ck9iamVjdCogcm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8Y29uc3QgUmVu
ZGVyT2JqZWN0Kj4qIHJvU3RhY2spCit7CisgICAgcm9TdGFjay0+Y2xlYXIoKTsKKyAgICB3aGls
ZSAocm8pIHsKKyAgICAgICAgcm9TdGFjay0+YXBwZW5kKHJvKTsKKyAgICAgICAgcm8gPSByby0+
cGFyZW50KCk7CisgICAgfQorfQorCisvLyBSZXR1cm5zIHRydWUgaWYgc3RhY2sxIGlzIGF0IG9y
IGFib3ZlIHN0YWNrMgorc3RhdGljIGJvb2wgY2hlY2tTdGFja09uVG9wKAorICAgICAgICBjb25z
dCBWZWN0b3I8Y29uc3QgUmVuZGVyT2JqZWN0Kj4mIGlmcmFtZVpzdGFjaywKKyAgICAgICAgY29u
c3QgVmVjdG9yPGNvbnN0IFJlbmRlck9iamVjdCo+JiBwbHVnaW5ac3RhY2spCit7CisgICAgZm9y
IChzaXplX3QgaTEgPSAwLCBpMiA9IDA7CisgICAgICAgICBpMSA8IGlmcmFtZVpzdGFjay5zaXpl
KCkgJiYgaTIgPCBwbHVnaW5ac3RhY2suc2l6ZSgpOworICAgICAgICAgaTErKywgaTIrKykgewor
ICAgICAgICAvLyBUaGUgcm9vdCBpcyBhdCB0aGUgZW5kIG9mIHRoZXNlIHN0YWNrcy4gIFdlIHdh
bnQgdG8gaXRlcmF0ZQorICAgICAgICAvLyByb290LWRvd253YXJkcyBzbyB3ZSBpbmRleCBiYWNr
d2FyZHMgZnJvbSB0aGUgZW5kLgorICAgICAgICBjb25zdCBSZW5kZXJPYmplY3QqIHJvMSA9IGlm
cmFtZVpzdGFja1tpZnJhbWVac3RhY2suc2l6ZSgpIC0gMSAtIGkxXTsKKyAgICAgICAgY29uc3Qg
UmVuZGVyT2JqZWN0KiBybzIgPSBwbHVnaW5ac3RhY2tbcGx1Z2luWnN0YWNrLnNpemUoKSAtIDEg
LSBpMl07CisKKyAgICAgICAgaWYgKHJvMSAhPSBybzIpIHsKKyAgICAgICAgICAgIC8vIFdoZW4g
d2UgZmluZCBub2RlcyBpbiB0aGUgc3RhY2sgdGhhdCBhcmUgbm90IHRoZSBzYW1lLCB0aGVuCisg
ICAgICAgICAgICAvLyB3ZSd2ZSBmb3VuZCB0aGUgbm9kZXMganVzdCBiZWxvdyB0aGUgbG93ZXN0
IGNvbW1lbnQgYW5jZXN0b3IuCisgICAgICAgICAgICAvLyBEZXRlcm1pbmUgd2hpY2ggc2hvdWxk
IGJlIG9uIHRvcC4KKworICAgICAgICAgICAgLy8gU2VlIGlmIHotaW5kZXggZGV0ZXJtaW5lcyBh
biBvcmRlci4KKyAgICAgICAgICAgIGlmIChybzEtPnN0eWxlKCkgJiYgcm8yLT5zdHlsZSgpKSB7
CisgICAgICAgICAgICAgICAgaW50IHoxID0gcm8xLT5zdHlsZSgpLT56SW5kZXgoKTsKKyAgICAg
ICAgICAgICAgICBpbnQgejIgPSBybzItPnN0eWxlKCktPnpJbmRleCgpOworICAgICAgICAgICAg
ICAgIGlmICh6MSA+IHoyKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICBpZiAoejEgPCB6MikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBGb3IgY29tcGF0aWJpbGl0eSB3aXRo
IElFOiB3aGVuIHRoZSBwbHVnaW4gaXMgbm90IHBvc2l0aW9uZWQsCisgICAgICAgICAgICAvLyBp
dCBzdGFja3MgYmVoaW5kIHRoZSBpZnJhbWUsIGV2ZW4gaWYgaXQncyBsYXRlciBpbiB0aGUKKyAg
ICAgICAgICAgIC8vIGRvY3VtZW50IG9yZGVyLgorICAgICAgICAgICAgaWYgKHJvMi0+c3R5bGUo
KS0+cG9zaXRpb24oKSA9PSBTdGF0aWNQb3NpdGlvbikKKyAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgICAgICAgICAgLy8gSW5zcGVjdCB0aGUgZG9jdW1lbnQgb3JkZXIuICBMYXRl
ciBvcmRlciBtZWFucyBoaWdoZXIKKyAgICAgICAgICAgIC8vIHN0YWNraW5nLgorICAgICAgICAg
ICAgY29uc3QgUmVuZGVyT2JqZWN0KiBwYXJlbnQgPSBybzEtPnBhcmVudCgpOworICAgICAgICAg
ICAgaWYgKCFwYXJlbnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgQVNTRVJUKHBhcmVudCA9PSBybzItPnBhcmVudCgpKTsKKworICAgICAgICAgICAgZm9yIChj
b25zdCBSZW5kZXJPYmplY3QqIHJvID0gcGFyZW50LT5maXJzdENoaWxkKCk7IHJvOyBybyA9IHJv
LT5uZXh0U2libGluZygpKSB7CisgICAgICAgICAgICAgICAgaWYgKHJvID09IHJvMSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGlmIChybyA9PSBy
bzIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgQVNTRVJUKGZhbHNlKTsgIC8vIFdlIHNob3VsZCBoYXZlIHNlZW4gcm8xIGFuZCBy
bzIgYnkgbm93LgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQor
ICAgIHJldHVybiB0cnVlOworfQorCisvLyBSZXR1cm4gYSBzZXQgb2YgcmVjdGFuZ2xlcyB0aGF0
IHNob3VsZCBub3QgYmUgb3ZlcmRyYXduIGJ5IHRoZQorLy8gcGx1Z2luICgiY3V0b3V0cyIpLiAg
VGhpcyBoZWxwcyBpbXBsZW1lbnQgdGhlICJpZnJhbWUgc2hpbSIKKy8vIHRlY2huaXF1ZSBvZiBv
dmVybGF5aW5nIGEgd2luZG93ZWQgcGx1Z2luIHdpdGggY29udGVudCBmcm9tIHRoZQorLy8gcGFn
ZS4gIEluIGEgbnV0c2hlbGwsIGlmcmFtZSBlbGVtZW50cyBzaG91bGQgb2NjbHVkZSBwbHVnaW5z
IHdoZW4KKy8vIHRoZXkgb2NjdXIgaGlnaGVyIGluIHRoZSBzdGFja2luZyBvcmRlci4KK3ZvaWQg
V2ViUGx1Z2luQ29udGFpbmVySW1wbDo6d2luZG93Q3V0T3V0UmVjdHMoY29uc3QgSW50UmVjdCYg
ZnJhbWVSZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBWZWN0b3I8SW50UmVjdD4mIGN1dE91dFJlY3RzKQoreworICAgIFJlbmRlck9iamVjdCogcGx1
Z2luTm9kZSA9IG1fZWxlbWVudC0+cmVuZGVyZXIoKTsKKyAgICBBU1NFUlQocGx1Z2luTm9kZSk7
CisgICAgaWYgKCFwbHVnaW5Ob2RlLT5zdHlsZSgpKQorICAgICAgICByZXR1cm47CisgICAgVmVj
dG9yPGNvbnN0IFJlbmRlck9iamVjdCo+IHBsdWdpblpzdGFjazsKKyAgICBWZWN0b3I8Y29uc3Qg
UmVuZGVyT2JqZWN0Kj4gaWZyYW1lWnN0YWNrOworICAgIGdldE9iamVjdFN0YWNrKHBsdWdpbk5v
ZGUsICZwbHVnaW5ac3RhY2spOworCisgICAgLy8gR2V0IHRoZSBwYXJlbnQgd2lkZ2V0CisgICAg
V2lkZ2V0KiBwYXJlbnRXaWRnZXQgPSB0aGlzLT5wYXJlbnQoKTsKKyAgICBpZiAoIXBhcmVudFdp
ZGdldC0+aXNGcmFtZVZpZXcoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRnJhbWVWaWV3KiBw
YXJlbnRGcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnRXaWRnZXQpOwor
CisgICAgY29uc3QgSGFzaFNldDxSZWZQdHI8V2lkZ2V0PiA+KiBjaGlsZHJlbiA9IHBhcmVudEZy
YW1lVmlldy0+Y2hpbGRyZW4oKTsKKyAgICBmb3IgKEhhc2hTZXQ8UmVmUHRyPFdpZGdldD4gPjo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBjaGlsZHJlbi0+YmVnaW4oKTsgaXQgIT0gY2hpbGRyZW4tPmVu
ZCgpOyArK2l0KSB7CisgICAgICAgIC8vIFdlIG9ubHkgY2FyZSBhYm91dCBGcmFtZVZpZXcncyBi
ZWNhdXNlIGlmcmFtZXMgc2hvdyB1cCBhcyBGcmFtZVZpZXdzLgorICAgICAgICBpZiAoISgqaXQp
LT5pc0ZyYW1lVmlldygpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgY29uc3Qg
RnJhbWVWaWV3KiBmcmFtZVZpZXcgPQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgRnJh
bWVWaWV3Kj4oKCppdCkuZ2V0KCkpOworICAgICAgICAvLyBDaGVjayB0byBtYWtlIHN1cmUgd2Ug
Y2FuIGdldCBib3RoIHRoZSBlbGVtZW50IGFuZCB0aGUgUmVuZGVyT2JqZWN0CisgICAgICAgIC8v
IGZvciB0aGlzIEZyYW1lVmlldywgaWYgd2UgY2FuJ3QganVzdCBtb3ZlIG9uIHRvIHRoZSBuZXh0
IG9iamVjdC4KKyAgICAgICAgaWYgKCFmcmFtZVZpZXctPmZyYW1lKCkgfHwgIWZyYW1lVmlldy0+
ZnJhbWUoKS0+b3duZXJFbGVtZW50KCkKKyAgICAgICAgICAgIHx8ICFmcmFtZVZpZXctPmZyYW1l
KCktPm93bmVyRWxlbWVudCgpLT5yZW5kZXJlcigpKQorICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBmcmFtZVZpZXctPmZyYW1lKCktPm93bmVy
RWxlbWVudCgpOworICAgICAgICBSZW5kZXJPYmplY3QqIGlmcmFtZVJlbmRlcmVyID0gZWxlbWVu
dC0+cmVuZGVyZXIoKTsKKworICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmlmcmFtZVRhZykKKyAgICAgICAgICAgICYmIGlmcmFtZVJlbmRlcmVyLT5hYnNvbHV0ZUJv
dW5kaW5nQm94UmVjdCgpLmludGVyc2VjdHMoZnJhbWVSZWN0KQorICAgICAgICAgICAgJiYgKCFp
ZnJhbWVSZW5kZXJlci0+c3R5bGUoKSB8fCBpZnJhbWVSZW5kZXJlci0+c3R5bGUoKS0+dmlzaWJp
bGl0eSgpID09IFZJU0lCTEUpKSB7CisgICAgICAgICAgICBnZXRPYmplY3RTdGFjayhpZnJhbWVS
ZW5kZXJlciwgJmlmcmFtZVpzdGFjayk7CisgICAgICAgICAgICBpZiAoY2hlY2tTdGFja09uVG9w
KGlmcmFtZVpzdGFjaywgcGx1Z2luWnN0YWNrKSkgeworICAgICAgICAgICAgICAgIEludFBvaW50
IHBvaW50ID0KKyAgICAgICAgICAgICAgICAgICAgcm91bmRlZEludFBvaW50KGlmcmFtZVJlbmRl
cmVyLT5sb2NhbFRvQWJzb2x1dGUoKSk7CisgICAgICAgICAgICAgICAgUmVuZGVyQm94KiByYm94
ID0gdG9SZW5kZXJCb3goaWZyYW1lUmVuZGVyZXIpOworICAgICAgICAgICAgICAgIEludFNpemUg
c2l6ZShyYm94LT53aWR0aCgpLCByYm94LT5oZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgY3V0
T3V0UmVjdHMuYXBwZW5kKEludFJlY3QocG9pbnQsIHNpemUpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBsdWdpbkNvbnRhaW5lckltcGwuaCBiL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViUGx1Z2luQ29udGFpbmVySW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjAwNDUwYmIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlBsdWdpbkNvbnRhaW5lckltcGwuaApAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmli
dXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2Vi
UGx1Z2luQ29udGFpbmVySW1wbF9oCisjZGVmaW5lIFdlYlBsdWdpbkNvbnRhaW5lckltcGxfaAor
CisvLyBGSVhNRTogVGhpcyByZWxhdGl2ZSBwYXRoIGlzIGEgdGVtcG9yYXJ5IGhhY2sgdG8gc3Vw
cG9ydCB1c2luZyB0aGlzCisvLyBoZWFkZXIgZnJvbSB3ZWJraXQvZ2x1ZS4KKyNpbmNsdWRlICIu
Li9wdWJsaWMvV2ViUGx1Z2luQ29udGFpbmVyLmgiCisKKyNpbmNsdWRlICJXaWRnZXQuaCIKKyNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworc3Ry
dWN0IE5QT2JqZWN0OworCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBIVE1MUGx1Z0luRWxl
bWVudDsKK2NsYXNzIEludFJlY3Q7CitjbGFzcyBLZXlib2FyZEV2ZW50OworY2xhc3MgTW91c2VF
dmVudDsKK2NsYXNzIFJlc291cmNlRXJyb3I7CitjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOworfQor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGx1Z2luOworY2xhc3MgV2ViUGx1Z2lu
TG9hZE9ic2VydmVyOworCitjbGFzcyBXZWJQbHVnaW5Db250YWluZXJJbXBsIDogcHVibGljIFdl
YkNvcmU6OldpZGdldCwgcHVibGljIFdlYlBsdWdpbkNvbnRhaW5lciB7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8V2ViUGx1Z2luQ29udGFpbmVySW1wbD4gY3JlYXRlKFdlYkNvcmU6
OkhUTUxQbHVnSW5FbGVtZW50KiBlbGVtZW50LCBXZWJQbHVnaW4qIHdlYlBsdWdpbikKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViUGx1Z2luQ29udGFpbmVySW1wbChlbGVt
ZW50LCB3ZWJQbHVnaW4pKTsKKyAgICB9CisKKyAgICAvLyBXaWRnZXQgbWV0aG9kcworICAgIHZp
cnR1YWwgdm9pZCBzZXRGcmFtZVJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZp
cnR1YWwgdm9pZCBwYWludChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVSZWN0KGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMoKTsKKyAgICB2aXJ0dWFs
IHZvaWQgc2hvdygpOworICAgIHZpcnR1YWwgdm9pZCBoaWRlKCk7CisgICAgdmlydHVhbCB2b2lk
IGhhbmRsZUV2ZW50KFdlYkNvcmU6OkV2ZW50Kik7CisgICAgdmlydHVhbCB2b2lkIGZyYW1lUmVj
dHNDaGFuZ2VkKCk7CisgICAgdmlydHVhbCB2b2lkIHNldFBhcmVudFZpc2libGUoYm9vbCk7Cisg
ICAgdmlydHVhbCB2b2lkIHNldFBhcmVudChXZWJDb3JlOjpTY3JvbGxWaWV3Kik7CisKKyAgICAv
LyBXZWJQbHVnaW5Db250YWluZXIgbWV0aG9kcworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRl
KCk7CisgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVSZWN0KGNvbnN0IFdlYlJlY3QmKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcmVwb3J0R2VvbWV0cnkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJT
Y3JpcHRPYmplY3RzKCk7CisgICAgdmlydHVhbCBOUE9iamVjdCogc2NyaXB0YWJsZU9iamVjdEZv
ckVsZW1lbnQoKTsKKyAgICB2aXJ0dWFsIFdlYlN0cmluZyBleGVjdXRlU2NyaXB0VVJMKGNvbnN0
IFdlYlVSTCYsIGJvb2wgcG9wdXBzQWxsb3dlZCk7CisgICAgdmlydHVhbCB2b2lkIGxvYWRGcmFt
ZVJlcXVlc3QoY29uc3QgV2ViVVJMUmVxdWVzdCYsIGNvbnN0IFdlYlN0cmluZyYgdGFyZ2V0LCBi
b29sIG5vdGlmeU5lZWRlZCwgdm9pZCogbm90aWZ5RGF0YSk7CisKKyAgICAvLyBSZXNvdXJjZSBs
b2FkIGV2ZW50cyBmb3IgdGhlIHBsdWdpbidzIHNvdXJjZSBkYXRhOgorICAgIHZvaWQgZGlkUmVj
ZWl2ZVJlc3BvbnNlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKTsKKyAgICB2b2lk
IGRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIgKmRhdGEsIGludCBkYXRhTGVuZ3RoKTsKKyAgICB2
b2lkIGRpZEZpbmlzaExvYWRpbmcoKTsKKyAgICB2b2lkIGRpZEZhaWxMb2FkaW5nKGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlRXJyb3ImKTsKKworICAgIE5QT2JqZWN0KiBzY3JpcHRhYmxlT2JqZWN0
KCk7CisKKyAgICAvLyBUaGlzIGNhbm5vdCBiZSBudWxsLgorICAgIFdlYlBsdWdpbiogcGx1Z2lu
KCkgeyByZXR1cm4gbV93ZWJQbHVnaW47IH0KKworICAgIHZvaWQgd2lsbERlc3Ryb3lQbHVnaW5M
b2FkT2JzZXJ2ZXIoV2ViUGx1Z2luTG9hZE9ic2VydmVyKik7CisKK3ByaXZhdGU6CisgICAgV2Vi
UGx1Z2luQ29udGFpbmVySW1wbChXZWJDb3JlOjpIVE1MUGx1Z0luRWxlbWVudCogZWxlbWVudCwg
V2ViUGx1Z2luKiB3ZWJQbHVnaW4pCisgICAgICAgIDogbV9lbGVtZW50KGVsZW1lbnQpCisgICAg
ICAgICwgbV93ZWJQbHVnaW4od2ViUGx1Z2luKSB7IH0KKyAgICB+V2ViUGx1Z2luQ29udGFpbmVy
SW1wbCgpOworCisgICAgdm9pZCBoYW5kbGVNb3VzZUV2ZW50KFdlYkNvcmU6Ok1vdXNlRXZlbnQq
KTsKKyAgICB2b2lkIGhhbmRsZUtleWJvYXJkRXZlbnQoV2ViQ29yZTo6S2V5Ym9hcmRFdmVudCop
OworCisgICAgdm9pZCBjYWxjdWxhdGVHZW9tZXRyeShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBm
cmFtZVJlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJDb3JlOjpJbnRSZWN0JiB3
aW5kb3dSZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ29yZTo6SW50UmVjdCYg
Y2xpcFJlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8V2ViQ29yZTo6SW50
UmVjdD4mIGN1dE91dFJlY3RzKTsKKyAgICBXZWJDb3JlOjpJbnRSZWN0IHdpbmRvd0NsaXBSZWN0
KCkgY29uc3Q7CisgICAgdm9pZCB3aW5kb3dDdXRPdXRSZWN0cyhjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiBmcmFtZVJlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8V2ViQ29y
ZTo6SW50UmVjdD4mIGN1dE91dFJlY3RzKTsKKworICAgIFdlYkNvcmU6OkhUTUxQbHVnSW5FbGVt
ZW50KiBtX2VsZW1lbnQ7CisgICAgV2ViUGx1Z2luKiBtX3dlYlBsdWdpbjsKKyAgICBWZWN0b3I8
V2ViUGx1Z2luTG9hZE9ic2VydmVyKj4gbV9wbHVnaW5Mb2FkT2JzZXJ2ZXJzOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJQbHVnaW5MaXN0QnVpbGRlckltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJQbHVnaW5MaXN0QnVpbGRlckltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjY5MjZhMmQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlBsdWdpbkxpc3RCdWlsZGVySW1wbC5jcHAKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXZWJQbHVnaW5MaXN0QnVpbGRlckltcGwuaCIKKworI2luY2x1
ZGUgIlBsdWdpbkRhdGEuaCIKKyNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0
IHsKKwordm9pZCBXZWJQbHVnaW5MaXN0QnVpbGRlckltcGw6OmFkZFBsdWdpbihjb25zdCBXZWJT
dHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0cmluZyYgZGVzY3JpcHRpb24sIGNvbnN0IFdlYlN0cmlu
ZyYgZmlsZU5hbWUpCit7CisgICAgUGx1Z2luSW5mbyogaW5mbyA9IG5ldyBQbHVnaW5JbmZvKCk7
CisgICAgaW5mby0+bmFtZSA9IG5hbWU7CisgICAgaW5mby0+ZGVzYyA9IGRlc2NyaXB0aW9uOwor
ICAgIGluZm8tPmZpbGUgPSBmaWxlTmFtZTsKKyAgICBtX3Jlc3VsdHMtPmFwcGVuZChpbmZvKTsK
K30KKwordm9pZCBXZWJQbHVnaW5MaXN0QnVpbGRlckltcGw6OmFkZE1lZGlhVHlwZVRvTGFzdFBs
dWdpbihjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0cmluZyYgZGVzY3JpcHRpb24p
Cit7CisgICAgTWltZUNsYXNzSW5mbyogaW5mbyA9IG5ldyBNaW1lQ2xhc3NJbmZvKCk7CisgICAg
aW5mby0+dHlwZSA9IG5hbWU7CisgICAgaW5mby0+ZGVzYyA9IGRlc2NyaXB0aW9uOworICAgIG1f
cmVzdWx0cy0+bGFzdCgpLT5taW1lcy5hcHBlbmQoaW5mbyk7Cit9CisKK3ZvaWQgV2ViUGx1Z2lu
TGlzdEJ1aWxkZXJJbXBsOjphZGRGaWxlRXh0ZW5zaW9uVG9MYXN0TWVkaWFUeXBlKGNvbnN0IFdl
YlN0cmluZyYgZXh0ZW5zaW9uKQoreworICAgIE1pbWVDbGFzc0luZm8qIGluZm8gPSBtX3Jlc3Vs
dHMtPmxhc3QoKS0+bWltZXMubGFzdCgpOworICAgIGlmICghaW5mby0+c3VmZml4ZXMuaXNFbXB0
eSgpKQorICAgICAgICBpbmZvLT5zdWZmaXhlcy5hcHBlbmQoJywnKTsKKyAgICBpbmZvLT5zdWZm
aXhlcy5hcHBlbmQoZXh0ZW5zaW9uKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBsdWdpbkxpc3RCdWlsZGVySW1wbC5oIGIv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQbHVnaW5MaXN0QnVpbGRlckltcGwuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YThhNDk3Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJQbHVnaW5MaXN0QnVpbGRlckltcGwuaApAQCAtMCwwICsxLDU2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICog
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBXZWJQbHVnaW5MaXN0QnVpbGRlckltcGxfaAorI2RlZmluZSBXZWJQbHVn
aW5MaXN0QnVpbGRlckltcGxfaAorCisjaW5jbHVkZSAiV2ViUGx1Z2luTGlzdEJ1aWxkZXIuaCIK
KworI2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQbHVnaW5MaXN0QnVpbGRlckltcGwgOiBwdWJs
aWMgV2ViUGx1Z2luTGlzdEJ1aWxkZXIgeworcHVibGljOgorICAgIFdlYlBsdWdpbkxpc3RCdWls
ZGVySW1wbChWZWN0b3I8V2ViQ29yZTo6UGx1Z2luSW5mbyo+KiByZXN1bHRzKSA6IG1fcmVzdWx0
cyhyZXN1bHRzKSB7IH0KKworICAgIC8vIFdlYlBsdWdpbkxpc3RCdWlsZGVyIG1ldGhvZHM6Cisg
ICAgdmlydHVhbCB2b2lkIGFkZFBsdWdpbihjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdl
YlN0cmluZyYgZGVzY3JpcHRpb24sIGNvbnN0IFdlYlN0cmluZyYgZmlsZU5hbWUpOworICAgIHZp
cnR1YWwgdm9pZCBhZGRNZWRpYVR5cGVUb0xhc3RQbHVnaW4oY29uc3QgV2ViU3RyaW5nJiBuYW1l
LCBjb25zdCBXZWJTdHJpbmcmIGRlc2NyaXB0aW9uKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkRmls
ZUV4dGVuc2lvblRvTGFzdE1lZGlhVHlwZShjb25zdCBXZWJTdHJpbmcmIGV4dGVuc2lvbik7CisK
K3ByaXZhdGU6CisgICAgVmVjdG9yPFdlYkNvcmU6OlBsdWdpbkluZm8qPiogbV9yZXN1bHRzOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJQbHVnaW5Mb2FkT2JzZXJ2ZXIuY3BwIGIvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJQbHVnaW5Mb2FkT2JzZXJ2ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjVlYzU5YTYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlBsdWdpbkxvYWRPYnNlcnZlci5jcHAKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXZWJQbHVnaW5Mb2FkT2JzZXJ2ZXIuaCIKKworI2luY2x1ZGUgIldl
YlBsdWdpbi5oIgorI2luY2x1ZGUgIldlYlBsdWdpbkNvbnRhaW5lckltcGwuaCIKKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK1dlYlBsdWdpbkxvYWRPYnNlcnZlcjo6fldlYlBsdWdpbkxvYWRPYnNl
cnZlcigpCit7CisgICAgaWYgKG1fcGx1Z2luQ29udGFpbmVyKQorICAgICAgICBtX3BsdWdpbkNv
bnRhaW5lci0+d2lsbERlc3Ryb3lQbHVnaW5Mb2FkT2JzZXJ2ZXIodGhpcyk7Cit9CisKK3ZvaWQg
V2ViUGx1Z2luTG9hZE9ic2VydmVyOjpkaWRGaW5pc2hMb2FkaW5nKCkKK3sKKyAgICBpZiAobV9w
bHVnaW5Db250YWluZXIpCisgICAgICAgIG1fcGx1Z2luQ29udGFpbmVyLT5wbHVnaW4oKS0+ZGlk
RmluaXNoTG9hZGluZ0ZyYW1lUmVxdWVzdChtX25vdGlmeVVSTCwgbV9ub3RpZnlEYXRhKTsKK30K
Kwordm9pZCBXZWJQbHVnaW5Mb2FkT2JzZXJ2ZXI6OmRpZEZhaWxMb2FkaW5nKGNvbnN0IFdlYlVS
TEVycm9yJiBlcnJvcikKK3sKKyAgICBpZiAobV9wbHVnaW5Db250YWluZXIpCisgICAgICAgIG1f
cGx1Z2luQ29udGFpbmVyLT5wbHVnaW4oKS0+ZGlkRmFpbExvYWRpbmdGcmFtZVJlcXVlc3QobV9u
b3RpZnlVUkwsIG1fbm90aWZ5RGF0YSwgZXJyb3IpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGx1Z2luTG9hZE9ic2VydmVy
LmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBsdWdpbkxvYWRPYnNlcnZlci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5N2QwOGQKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBsdWdpbkxvYWRPYnNlcnZlci5oCkBAIC0wLDAgKzEsNjcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIFdlYlBsdWdpbkxvYWRPYnNlcnZlcl9oCisjZGVmaW5lIFdlYlBsdWdpbkxvYWRP
YnNlcnZlcl9oCisKKyNpbmNsdWRlICIuLi9wdWJsaWMvV2ViVVJMLmgiCisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitjbGFzcyBXZWJQbHVnaW5Db250YWluZXJJbXBsOworc3RydWN0IFdlYlVSTEVy
cm9yOworCitjbGFzcyBXZWJQbHVnaW5Mb2FkT2JzZXJ2ZXIgeworcHVibGljOgorICAgIFdlYlBs
dWdpbkxvYWRPYnNlcnZlcihXZWJQbHVnaW5Db250YWluZXJJbXBsKiBwbHVnaW5Db250YWluZXIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlVSTCYgbm90aWZ5VVJMLCB2b2lk
KiBub3RpZnlEYXRhKQorICAgICAgICA6IG1fcGx1Z2luQ29udGFpbmVyKHBsdWdpbkNvbnRhaW5l
cikKKyAgICAgICAgLCBtX25vdGlmeVVSTChub3RpZnlVUkwpCisgICAgICAgICwgbV9ub3RpZnlE
YXRhKG5vdGlmeURhdGEpCisgICAgeworICAgIH0KKworICAgIH5XZWJQbHVnaW5Mb2FkT2JzZXJ2
ZXIoKTsKKworICAgIGNvbnN0IFdlYlVSTCYgdXJsKCkgY29uc3QgeyByZXR1cm4gbV9ub3RpZnlV
Ukw7IH0KKworICAgIHZvaWQgY2xlYXJQbHVnaW5Db250YWluZXIoKSB7IG1fcGx1Z2luQ29udGFp
bmVyID0gMDsgfQorICAgIHZvaWQgZGlkRmluaXNoTG9hZGluZygpOworICAgIHZvaWQgZGlkRmFp
bExvYWRpbmcoY29uc3QgV2ViVVJMRXJyb3ImKTsKKworcHJpdmF0ZToKKyAgICBXZWJQbHVnaW5D
b250YWluZXJJbXBsKiBtX3BsdWdpbkNvbnRhaW5lcjsKKyAgICBXZWJVUkwgbV9ub3RpZnlVUkw7
CisgICAgdm9pZCogbV9ub3RpZnlEYXRhOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBs
LmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZkMzYwZQotLS0gL2Rldi9udWxsCisrKyBiL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5jcHAKQEAgLTAsMCArMSwzMTIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViUG9wdXBNZW51SW1wbC5oIgorCisjaW5j
bHVkZSAiQ3Vyc29yLmgiCisjaW5jbHVkZSAiRnJhbWVsZXNzU2Nyb2xsVmlldy5oIgorI2luY2x1
ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJQbGF0Zm9y
bUNvbnRleHRTa2lhLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50
LmgiCisjaW5jbHVkZSAiU2tpYVV0aWxzLmgiCisKKyNpbmNsdWRlICJXZWJJbnB1dEV2ZW50Lmgi
CisjaW5jbHVkZSAiV2ViSW5wdXRFdmVudENvbnZlcnNpb24uaCIKKyNpbmNsdWRlICJXZWJSZWN0
LmgiCisjaW5jbHVkZSAiV2ViV2lkZ2V0Q2xpZW50LmgiCisKKyNpbmNsdWRlIDxza2lhL2V4dC9w
bGF0Zm9ybV9jYW52YXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCisvLyBXZWJQb3B1cE1lbnUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1dlYlBvcHVwTWVudSogV2Vi
UG9wdXBNZW51OjpjcmVhdGUoV2ViV2lkZ2V0Q2xpZW50KiBjbGllbnQpCit7CisgICAgcmV0dXJu
IG5ldyBXZWJQb3B1cE1lbnVJbXBsKGNsaWVudCk7Cit9CisKKy8vIFdlYldpZGdldCAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworV2ViUG9wdXBNZW51SW1wbDo6V2ViUG9wdXBNZW51SW1wbChXZWJXaWRnZXRDbGllbnQq
IGNsaWVudCkKKyAgICA6IG1fY2xpZW50KGNsaWVudCkKKyAgICAsIG1fd2lkZ2V0KDApCit7Cisg
ICAgLy8gc2V0IHRvIGltcG9zc2libGUgcG9pbnQgc28gd2UgYWx3YXlzIGdldCB0aGUgZmlyc3Qg
bW91c2UgcG9zCisgICAgbV9sYXN0TW91c2VQb3NpdGlvbiA9IFdlYlBvaW50KC0xLCAtMSk7Cit9
CisKK1dlYlBvcHVwTWVudUltcGw6On5XZWJQb3B1cE1lbnVJbXBsKCkKK3sKKyAgICBpZiAobV93
aWRnZXQpCisgICAgICAgIG1fd2lkZ2V0LT5zZXRDbGllbnQoMCk7Cit9CisKK3ZvaWQgV2ViUG9w
dXBNZW51SW1wbDo6SW5pdChGcmFtZWxlc3NTY3JvbGxWaWV3KiB3aWRnZXQsIGNvbnN0IFdlYlJl
Y3QmIGJvdW5kcykKK3sKKyAgICBtX3dpZGdldCA9IHdpZGdldDsKKyAgICBtX3dpZGdldC0+c2V0
Q2xpZW50KHRoaXMpOworCisgICAgaWYgKG1fY2xpZW50KSB7CisgICAgICAgIG1fY2xpZW50LT5z
ZXRXaW5kb3dSZWN0KGJvdW5kcyk7CisgICAgICAgIG1fY2xpZW50LT5zaG93KFdlYk5hdmlnYXRp
b25Qb2xpY3koKSk7ICAvLyBQb2xpY3kgaXMgaWdub3JlZAorICAgIH0KK30KKwordm9pZCBXZWJQ
b3B1cE1lbnVJbXBsOjpNb3VzZU1vdmUoY29uc3QgV2ViTW91c2VFdmVudCYgZXZlbnQpCit7Cisg
ICAgLy8gZG9uJ3Qgc2VuZCBtb3VzZSBtb3ZlIG1lc3NhZ2VzIGlmIHRoZSBtb3VzZSBoYXNuJ3Qg
bW92ZWQuCisgICAgaWYgKGV2ZW50LnggIT0gbV9sYXN0TW91c2VQb3NpdGlvbi54IHx8IGV2ZW50
LnkgIT0gbV9sYXN0TW91c2VQb3NpdGlvbi55KSB7CisgICAgICAgIG1fbGFzdE1vdXNlUG9zaXRp
b24gPSBXZWJQb2ludChldmVudC54LCBldmVudC55KTsKKyAgICAgICAgbV93aWRnZXQtPmhhbmRs
ZU1vdXNlTW92ZUV2ZW50KFBsYXRmb3JtTW91c2VFdmVudEJ1aWxkZXIobV93aWRnZXQsIGV2ZW50
KSk7CisgICAgfQorfQorCit2b2lkIFdlYlBvcHVwTWVudUltcGw6Ok1vdXNlTGVhdmUoY29uc3Qg
V2ViTW91c2VFdmVudCYgZXZlbnQpCit7CisgICAgbV93aWRnZXQtPmhhbmRsZU1vdXNlTW92ZUV2
ZW50KFBsYXRmb3JtTW91c2VFdmVudEJ1aWxkZXIobV93aWRnZXQsIGV2ZW50KSk7Cit9CisKK3Zv
aWQgV2ViUG9wdXBNZW51SW1wbDo6TW91c2VEb3duKGNvbnN0IFdlYk1vdXNlRXZlbnQmIGV2ZW50
KQoreworICAgIG1fd2lkZ2V0LT5oYW5kbGVNb3VzZURvd25FdmVudChQbGF0Zm9ybU1vdXNlRXZl
bnRCdWlsZGVyKG1fd2lkZ2V0LCBldmVudCkpOworfQorCit2b2lkIFdlYlBvcHVwTWVudUltcGw6
Ok1vdXNlVXAoY29uc3QgV2ViTW91c2VFdmVudCYgZXZlbnQpCit7CisgICAgbW91c2VDYXB0dXJl
TG9zdCgpOworICAgIG1fd2lkZ2V0LT5oYW5kbGVNb3VzZVJlbGVhc2VFdmVudChQbGF0Zm9ybU1v
dXNlRXZlbnRCdWlsZGVyKG1fd2lkZ2V0LCBldmVudCkpOworfQorCit2b2lkIFdlYlBvcHVwTWVu
dUltcGw6Ok1vdXNlV2hlZWwoY29uc3QgV2ViTW91c2VXaGVlbEV2ZW50JiBldmVudCkKK3sKKyAg
ICBtX3dpZGdldC0+aGFuZGxlV2hlZWxFdmVudChQbGF0Zm9ybVdoZWVsRXZlbnRCdWlsZGVyKG1f
d2lkZ2V0LCBldmVudCkpOworfQorCitib29sIFdlYlBvcHVwTWVudUltcGw6OktleUV2ZW50KGNv
bnN0IFdlYktleWJvYXJkRXZlbnQmIGV2ZW50KQoreworICAgIHJldHVybiBtX3dpZGdldC0+aGFu
ZGxlS2V5RXZlbnQoUGxhdGZvcm1LZXlib2FyZEV2ZW50QnVpbGRlcihldmVudCkpOworfQorCisv
LyBXZWJXaWRnZXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit2b2lkIFdlYlBvcHVwTWVudUltcGw6OmNsb3NlKCkK
K3sKKyAgICBpZiAobV93aWRnZXQpCisgICAgICAgIG1fd2lkZ2V0LT5oaWRlKCk7CisKKyAgICBt
X2NsaWVudCA9IDA7CisKKyAgICBkZXJlZigpOyAgLy8gQmFsYW5jZXMgcmVmKCkgZnJvbSBXZWJX
aWRnZXQ6OkNyZWF0ZQorfQorCit2b2lkIFdlYlBvcHVwTWVudUltcGw6OnJlc2l6ZShjb25zdCBX
ZWJTaXplJiBuZXdTaXplKQoreworICAgIGlmIChtX3NpemUgPT0gbmV3U2l6ZSkKKyAgICAgICAg
cmV0dXJuOworICAgIG1fc2l6ZSA9IG5ld1NpemU7CisKKyAgICBpZiAobV93aWRnZXQpIHsKKyAg
ICAgIEludFJlY3QgbmV3R2VvbWV0cnkoMCwgMCwgbV9zaXplLndpZHRoLCBtX3NpemUuaGVpZ2h0
KTsKKyAgICAgIG1fd2lkZ2V0LT5zZXRGcmFtZVJlY3QobmV3R2VvbWV0cnkpOworICAgIH0KKwor
ICAgIGlmIChtX2NsaWVudCkgeworICAgICAgV2ViUmVjdCBkYW1hZ2VkUmVjdCgwLCAwLCBtX3Np
emUud2lkdGgsIG1fc2l6ZS5oZWlnaHQpOworICAgICAgbV9jbGllbnQtPmRpZEludmFsaWRhdGVS
ZWN0KGRhbWFnZWRSZWN0KTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViUG9wdXBNZW51SW1wbDo6bGF5
b3V0KCkKK3sKK30KKwordm9pZCBXZWJQb3B1cE1lbnVJbXBsOjpwYWludChXZWJDYW52YXMqIGNh
bnZhcywgY29uc3QgV2ViUmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIW1fd2lkZ2V0KQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoIXJlY3QuaXNFbXB0eSgpKSB7CisjaWYgV0VCS0lUX1VTSU5H
X0NHCisgICAgICAgIEdyYXBoaWNzQ29udGV4dCBnYyhjYW52YXMpOworI2VsaWYgV0VCS0lUX1VT
SU5HX1NLSUEKKyAgICAgICAgUGxhdGZvcm1Db250ZXh0U2tpYSBjb250ZXh0KGNhbnZhcyk7Cisg
ICAgICAgIC8vIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0IGlzIGFjdHVhbGx5IGEgcG9pbnRlciB0
byBQbGF0Zm9ybUNvbnRleHRTa2lhLgorICAgICAgICBHcmFwaGljc0NvbnRleHQgZ2MocmVpbnRl
cnByZXRfY2FzdDxQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCo+KCZjb250ZXh0KSk7CisjZWxzZQor
ICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworI2VuZGlmCisgICAgICAgIG1fd2lkZ2V0LT5wYWlu
dCgmZ2MsIHJlY3QpOworICAgIH0KK30KKworYm9vbCBXZWJQb3B1cE1lbnVJbXBsOjpoYW5kbGVJ
bnB1dEV2ZW50KGNvbnN0IFdlYklucHV0RXZlbnQmIGlucHV0RXZlbnQpCit7CisgICAgaWYgKCFt
X3dpZGdldCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gVE9ETyAoamNhbXBhbik6
IFdlYktpdCBzZWVtcyB0byBhbHdheXMgcmV0dXJuIGZhbHNlIG9uIG1vdXNlIGV2ZW50cworICAg
IC8vIG1ldGhvZHMuIEZvciBub3cgd2UnbGwgYXNzdW1lIGl0IGhhcyBwcm9jZXNzZWQgdGhlbSAo
YXMgd2UgYXJlIG9ubHkKKyAgICAvLyBpbnRlcmVzdGVkIGluIHdoZXRoZXIga2V5Ym9hcmQgZXZl
bnRzIGFyZSBwcm9jZXNzZWQpLgorICAgIHN3aXRjaCAoaW5wdXRFdmVudC50eXBlKSB7CisgICAg
Y2FzZSBXZWJJbnB1dEV2ZW50OjpNb3VzZU1vdmU6CisgICAgICAgIE1vdXNlTW92ZSgqc3RhdGlj
X2Nhc3Q8Y29uc3QgV2ViTW91c2VFdmVudCo+KCZpbnB1dEV2ZW50KSk7CisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpNb3VzZUxlYXZlOgorICAgICAgICBN
b3VzZUxlYXZlKCpzdGF0aWNfY2FzdDxjb25zdCBXZWJNb3VzZUV2ZW50Kj4oJmlucHV0RXZlbnQp
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjYXNlIFdlYklucHV0RXZlbnQ6Ok1vdXNl
V2hlZWw6CisgICAgICAgIE1vdXNlV2hlZWwoKnN0YXRpY19jYXN0PGNvbnN0IFdlYk1vdXNlV2hl
ZWxFdmVudCo+KCZpbnB1dEV2ZW50KSk7CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgY2Fz
ZSBXZWJJbnB1dEV2ZW50OjpNb3VzZURvd246CisgICAgICAgIE1vdXNlRG93bigqc3RhdGljX2Nh
c3Q8Y29uc3QgV2ViTW91c2VFdmVudCo+KCZpbnB1dEV2ZW50KSk7CisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpNb3VzZVVwOgorICAgICAgICBNb3VzZVVw
KCpzdGF0aWNfY2FzdDxjb25zdCBXZWJNb3VzZUV2ZW50Kj4oJmlucHV0RXZlbnQpKTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBJbiBXaW5kb3dzLCBSYXdLZXlEb3duIG9ubHkgaGFz
IGluZm9ybWF0aW9uIGFib3V0IHRoZSBwaHlzaWNhbCBrZXksIGJ1dAorICAgIC8vIGZvciAic2Vs
ZWN0aW9uIiwgd2UgbmVlZCB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNoYXJhY3RlciB0aGUg
a2V5CisgICAgLy8gdHJhbnNsYXRlZCBpbnRvLiBGb3IgRW5nbGlzaCwgdGhlIHBoeXNpY2FsIGtl
eSB2YWx1ZSBhbmQgdGhlIGNoYXJhY3RlcgorICAgIC8vIHZhbHVlIGFyZSB0aGUgc2FtZSwgaGVu
Y2UsICJzZWxlY3Rpb24iIHdvcmtzIGZvciBFbmdsaXNoLiBCdXQgZm9yIG90aGVyCisgICAgLy8g
bGFuZ3VhZ2VzLCBzdWNoIGFzIEhlYnJldywgdGhlIGNoYXJhY3RlciB2YWx1ZSBpcyBkaWZmZXJl
bnQgZnJvbSB0aGUKKyAgICAvLyBwaHlzaWNhbCBrZXkgdmFsdWUuIFRodXMsIHdpdGhvdXQgYWNj
ZXB0aW5nIENoYXIgZXZlbnQgdHlwZSB3aGljaAorICAgIC8vIGNvbnRhaW5zIHRoZSBrZXkncyBj
aGFyYWN0ZXIgdmFsdWUsIHRoZSAic2VsZWN0aW9uIiB3b24ndCB3b3JrIGZvcgorICAgIC8vIG5v
bi1FbmdsaXNoIGxhbmd1YWdlcywgc3VjaCBhcyBIZWJyZXcuCisgICAgY2FzZSBXZWJJbnB1dEV2
ZW50OjpSYXdLZXlEb3duOgorICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6S2V5RG93bjoKKyAgICBj
YXNlIFdlYklucHV0RXZlbnQ6OktleVVwOgorICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6Q2hhcjoK
KyAgICAgICAgcmV0dXJuIEtleUV2ZW50KCpzdGF0aWNfY2FzdDxjb25zdCBXZWJLZXlib2FyZEV2
ZW50Kj4oJmlucHV0RXZlbnQpKTsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgV2ViUG9wdXBNZW51SW1wbDo6bW91c2VD
YXB0dXJlTG9zdCgpCit7Cit9CisKK3ZvaWQgV2ViUG9wdXBNZW51SW1wbDo6c2V0Rm9jdXMoYm9v
bCBlbmFibGUpCit7Cit9CisKK2Jvb2wgV2ViUG9wdXBNZW51SW1wbDo6aGFuZGxlQ29tcG9zaXRp
b25FdmVudCgKKyAgICBXZWJDb21wb3NpdGlvbkNvbW1hbmQgY29tbWFuZCwgaW50IGN1cnNvclBv
c2l0aW9uLCBpbnQgdGFyZ2V0U3RhcnQsCisgICAgaW50IHRhcmdldEVuZCwgY29uc3QgV2ViU3Ry
aW5nJiBpbWVTdHJpbmcpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFdlYlBvcHVw
TWVudUltcGw6OnF1ZXJ5Q29tcG9zaXRpb25TdGF0dXMoYm9vbCogZW5hYmxlZCwgV2ViUmVjdCog
Y2FyZXRSZWN0KQoreworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBXZWJQb3B1cE1lbnVJ
bXBsOjpzZXRUZXh0RGlyZWN0aW9uKFdlYlRleHREaXJlY3Rpb24gZGlyZWN0aW9uKQoreworfQor
CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFdlYkNvcmU6Okhvc3RXaW5kb3cKKwordm9p
ZCBXZWJQb3B1cE1lbnVJbXBsOjpyZXBhaW50KGNvbnN0IEludFJlY3QmIHBhaW50UmVjdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNvbnRlbnRDaGFuZ2VkLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaW1tZWRpYXRlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgcmVwYWludENvbnRlbnRPbmx5KQoreworICAgIC8vIElnbm9y
ZSBzcHVyaW91cyBjYWxscy4KKyAgICBpZiAoIWNvbnRlbnRDaGFuZ2VkIHx8IHBhaW50UmVjdC5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1f
Y2xpZW50LT5kaWRJbnZhbGlkYXRlUmVjdChwYWludFJlY3QpOworfQorCit2b2lkIFdlYlBvcHVw
TWVudUltcGw6OnNjcm9sbChjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHNjcm9sbFJlY3QsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKK3sKKyAgICBpZiAo
bV9jbGllbnQpIHsKKyAgICAgICAgaW50IGR4ID0gc2Nyb2xsRGVsdGEud2lkdGgoKTsKKyAgICAg
ICAgaW50IGR5ID0gc2Nyb2xsRGVsdGEuaGVpZ2h0KCk7CisgICAgICAgIG1fY2xpZW50LT5kaWRT
Y3JvbGxSZWN0KGR4LCBkeSwgY2xpcFJlY3QpOworICAgIH0KK30KKworSW50UG9pbnQgV2ViUG9w
dXBNZW51SW1wbDo6c2NyZWVuVG9XaW5kb3coY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIEludFBvaW50KCk7Cit9CisKK0lu
dFJlY3QgV2ViUG9wdXBNZW51SW1wbDo6d2luZG93VG9TY3JlZW4oY29uc3QgSW50UmVjdCYgcmVj
dCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBJbnRSZWN0KCk7
Cit9CisKK3ZvaWQgV2ViUG9wdXBNZW51SW1wbDo6c2Nyb2xsUmVjdEludG9WaWV3KGNvbnN0IElu
dFJlY3QmLCBjb25zdCBTY3JvbGxWaWV3KikgY29uc3QKK3sKKyAgICAvLyBOb3RoaW5nIHRvIGJl
IGRvbmUgaGVyZSBzaW5jZSB3ZSBkbyBub3QgaGF2ZSB0aGUgY29uY2VwdCBvZiBhIGNvbnRhaW5l
cgorICAgIC8vIHRoYXQgaW1wbGVtZW50cyBpdHMgb3duIHNjcm9sbGluZy4KK30KKwordm9pZCBX
ZWJQb3B1cE1lbnVJbXBsOjpzY3JvbGxiYXJzTW9kZURpZENoYW5nZSgpIGNvbnN0Cit7CisgICAg
Ly8gTm90aGluZyB0byBiZSBkb25lIHNpbmNlIHdlIGhhdmUgbm8gY29uY2VwdCBvZiBkaWZmZXJl
bnQgc2Nyb2xsYmFyIG1vZGVzLgorfQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBXZWJD
b3JlOjpGcmFtZWxlc3NTY3JvbGxWaWV3Q2xpZW50CisKK3ZvaWQgV2ViUG9wdXBNZW51SW1wbDo6
cG9wdXBDbG9zZWQoRnJhbWVsZXNzU2Nyb2xsVmlldyogd2lkZ2V0KQoreworICAgIEFTU0VSVCh3
aWRnZXQgPT0gbV93aWRnZXQpOworICAgIGlmIChtX3dpZGdldCkgeworICAgICAgICBtX3dpZGdl
dC0+c2V0Q2xpZW50KDApOworICAgICAgICBtX3dpZGdldCA9IDA7CisgICAgfQorICAgIG1fY2xp
ZW50LT5jbG9zZVdpZGdldFNvb24oKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuaCBiL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjEzZWI2NzQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlBvcHVwTWVudUltcGwuaApAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViUG9wdXBNZW51
SW1wbF9oCisjZGVmaW5lIFdlYlBvcHVwTWVudUltcGxfaAorCisvLyBGSVhNRTogQWRkIHRoaXMg
dG8gRnJhbWVsZXNzU2Nyb2xsVmlld0NsaWVudC5oCituYW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNz
IEZyYW1lbGVzc1Njcm9sbFZpZXc7IH0KKworI2luY2x1ZGUgIkZyYW1lbGVzc1Njcm9sbFZpZXdD
bGllbnQuaCIKKy8vIEZJWE1FOiByZW1vdmUgdGhlIHJlbGF0aXZlIHBhdGhzIG9uY2UgZ2x1ZS8g
Y29uc3VtZXJzIGFyZSByZW1vdmVkLgorI2luY2x1ZGUgIi4uL3B1YmxpYy9XZWJQb2ludC5oIgor
I2luY2x1ZGUgIi4uL3B1YmxpYy9XZWJQb3B1cE1lbnUuaCIKKyNpbmNsdWRlICIuLi9wdWJsaWMv
V2ViU2l6ZS5oIgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKK2NsYXNzIEZyYW1lOworY2xhc3MgRnJhbWVsZXNzU2Nyb2xsVmlldzsKK2NsYXNzIEtl
eWJvYXJkRXZlbnQ7CitjbGFzcyBQYWdlOworY2xhc3MgUGxhdGZvcm1LZXlib2FyZEV2ZW50Owor
Y2xhc3MgUmFuZ2U7CitjbGFzcyBXaWRnZXQ7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xh
c3MgV2ViS2V5Ym9hcmRFdmVudDsKK2NsYXNzIFdlYk1vdXNlRXZlbnQ7CitjbGFzcyBXZWJNb3Vz
ZVdoZWVsRXZlbnQ7CitzdHJ1Y3QgV2ViUmVjdDsKKworY2xhc3MgV2ViUG9wdXBNZW51SW1wbCA6
IHB1YmxpYyBXZWJQb3B1cE1lbnUsCisgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFdl
YkNvcmU6OkZyYW1lbGVzc1Njcm9sbFZpZXdDbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgcHVibGljIFJlZkNvdW50ZWQ8V2ViUG9wdXBNZW51SW1wbD4geworcHVibGljOgorICAgIC8v
IFdlYldpZGdldAorICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpOworICAgIHZpcnR1YWwgV2ViU2l6
ZSBzaXplKCkgeyByZXR1cm4gbV9zaXplOyB9CisgICAgdmlydHVhbCB2b2lkIHJlc2l6ZShjb25z
dCBXZWJTaXplJik7CisgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOworICAgIHZpcnR1YWwgdm9p
ZCBwYWludChXZWJDYW52YXMqIGNhbnZhcywgY29uc3QgV2ViUmVjdCYgcmVjdCk7CisgICAgdmly
dHVhbCBib29sIGhhbmRsZUlucHV0RXZlbnQoY29uc3QgV2ViSW5wdXRFdmVudCYpOworICAgIHZp
cnR1YWwgdm9pZCBtb3VzZUNhcHR1cmVMb3N0KCk7CisgICAgdmlydHVhbCB2b2lkIHNldEZvY3Vz
KGJvb2wgZW5hYmxlKTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlQ29tcG9zaXRpb25FdmVudCgK
KyAgICAgICAgV2ViQ29tcG9zaXRpb25Db21tYW5kIGNvbW1hbmQsIGludCBjdXJzb3JQb3NpdGlv
biwKKyAgICAgICAgaW50IHRhcmdldFN0YXJ0LCBpbnQgdGFyZ2V0RW5kLCBjb25zdCBXZWJTdHJp
bmcmIHRleHQpOworICAgIHZpcnR1YWwgYm9vbCBxdWVyeUNvbXBvc2l0aW9uU3RhdHVzKGJvb2wq
IGVuYWJsZWQsIFdlYlJlY3QqIGNhcmV0UmVjdCk7CisgICAgdmlydHVhbCB2b2lkIHNldFRleHRE
aXJlY3Rpb24oV2ViVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pOworCisgICAgLy8gV2ViUG9wdXBN
ZW51SW1wbAorICAgIHZvaWQgSW5pdChXZWJDb3JlOjpGcmFtZWxlc3NTY3JvbGxWaWV3KiB3aWRn
ZXQsCisgICAgICAgICAgICAgIGNvbnN0IFdlYlJlY3QmIGJvdW5kcyk7CisKKyAgICBXZWJXaWRn
ZXRDbGllbnQqIGNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9CisKKyAgICB2b2lkIE1vdXNl
TW92ZShjb25zdCBXZWJNb3VzZUV2ZW50Jik7CisgICAgdm9pZCBNb3VzZUxlYXZlKGNvbnN0IFdl
Yk1vdXNlRXZlbnQmKTsKKyAgICB2b2lkIE1vdXNlRG93bihjb25zdCBXZWJNb3VzZUV2ZW50Jik7
CisgICAgdm9pZCBNb3VzZVVwKGNvbnN0IFdlYk1vdXNlRXZlbnQmKTsKKyAgICB2b2lkIE1vdXNl
RG91YmxlQ2xpY2soY29uc3QgV2ViTW91c2VFdmVudCYpOworICAgIHZvaWQgTW91c2VXaGVlbChj
b25zdCBXZWJNb3VzZVdoZWVsRXZlbnQmKTsKKyAgICBib29sIEtleUV2ZW50KGNvbnN0IFdlYktl
eWJvYXJkRXZlbnQmKTsKKworICAgcHJvdGVjdGVkOgorICAgIGZyaWVuZCBjbGFzcyBXZWJQb3B1
cE1lbnU7ICAvLyBGb3IgV2ViUG9wdXBNZW51OjpjcmVhdGUKKyAgICBmcmllbmQgY2xhc3MgV1RG
OjpSZWZDb3VudGVkPFdlYlBvcHVwTWVudUltcGw+OworCisgICAgV2ViUG9wdXBNZW51SW1wbChX
ZWJXaWRnZXRDbGllbnQqIGNsaWVudCk7CisgICAgfldlYlBvcHVwTWVudUltcGwoKTsKKworICAg
IC8vIFdlYkNvcmU6Okhvc3RXaW5kb3cgbWV0aG9kczoKKyAgICB2aXJ0dWFsIHZvaWQgcmVwYWlu
dCgKKyAgICAgICAgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGJvb2wgY29udGVudENoYW5nZWQs
IGJvb2wgaW1tZWRpYXRlID0gZmFsc2UsCisgICAgICAgIGJvb2wgcmVwYWludENvbnRlbnRPbmx5
ID0gZmFsc2UpOworICAgIHZpcnR1YWwgdm9pZCBzY3JvbGwoCisgICAgICAgIGNvbnN0IFdlYkNv
cmU6OkludFNpemUmIHNjcm9sbERlbHRhLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzY3JvbGxS
ZWN0LAorICAgICAgICBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCk7CisgICAgdmly
dHVhbCBXZWJDb3JlOjpJbnRQb2ludCBzY3JlZW5Ub1dpbmRvdyhjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCYpIGNvbnN0OworICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCB3aW5kb3dUb1NjcmVl
bihjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3Q7CisgICAgdmlydHVhbCBQbGF0Zm9ybVBh
Z2VDbGllbnQgcGxhdGZvcm1QYWdlQ2xpZW50KCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZp
cnR1YWwgdm9pZCBzY3JvbGxSZWN0SW50b1ZpZXcoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNv
bnN0IFdlYkNvcmU6OlNjcm9sbFZpZXcqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xs
YmFyc01vZGVEaWRDaGFuZ2UoKSBjb25zdDsKKworICAgIC8vIFdlYkNvcmU6OkZyYW1lbGVzc1Nj
cm9sbFZpZXdDbGllbnQgbWV0aG9kczoKKyAgICB2aXJ0dWFsIHZvaWQgcG9wdXBDbG9zZWQoV2Vi
Q29yZTo6RnJhbWVsZXNzU2Nyb2xsVmlldyopOworCisgICAgV2ViV2lkZ2V0Q2xpZW50KiBtX2Ns
aWVudDsKKyAgICBXZWJTaXplIG1fc2l6ZTsKKworICAgIFdlYlBvaW50IG1fbGFzdE1vdXNlUG9z
aXRpb247CisKKyAgICAvLyBUaGlzIGlzIGEgbm9uLW93bmluZyByZWYuICBUaGUgcG9wdXAgd2ls
bCBub3RpZnkgdXMgdmlhIHBvcHVwQ2xvc2VkKCkKKyAgICAvLyBiZWZvcmUgaXQgaXMgZGVzdHJv
eWVkLgorICAgIFdlYkNvcmU6OkZyYW1lbGVzc1Njcm9sbFZpZXcqIG1fd2lkZ2V0OworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJSYW5nZS5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlJhbmdlLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGQwMDBkCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJSYW5nZS5jcHAKQEAgLTAsMCArMSwxMTMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViUmFuZ2UuaCIKKworI2luY2x1ZGUgIlJh
bmdlLmgiCisjaW5jbHVkZSAiV2ViTm9kZS5oIgorI2luY2x1ZGUgIldlYlN0cmluZy5oIgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUmFuZ2VQcml2YXRlIDogcHVibGljIFJhbmdl
IHsKK307CisKK3ZvaWQgV2ViUmFuZ2U6OnJlc2V0KCkKK3sKKyAgICBhc3NpZ24oMCk7Cit9CisK
K3ZvaWQgV2ViUmFuZ2U6OmFzc2lnbihjb25zdCBXZWJSYW5nZSYgb3RoZXIpCit7CisgICAgV2Vi
UmFuZ2VQcml2YXRlKiBwID0gY29uc3RfY2FzdDxXZWJSYW5nZVByaXZhdGUqPihvdGhlci5tX3By
aXZhdGUpOworICAgIGlmIChwKQorICAgICAgICBwLT5yZWYoKTsKKyAgICBhc3NpZ24ocCk7Cit9
CisKK2ludCBXZWJSYW5nZTo6c3RhcnRPZmZzZXQoKSBjb25zdAoreworICAgIHJldHVybiBtX3By
aXZhdGUtPnN0YXJ0T2Zmc2V0KCk7Cit9CisKK2ludCBXZWJSYW5nZTo6ZW5kT2Zmc2V0KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5lbmRPZmZzZXQoKTsKK30KKworV2ViTm9kZSBX
ZWJSYW5nZTo6c3RhcnRDb250YWluZXIoaW50JiBleGNlcHRpb25Db2RlKSBjb25zdAoreworICAg
IHJldHVybiBQYXNzUmVmUHRyPE5vZGU+KG1fcHJpdmF0ZS0+c3RhcnRDb250YWluZXIoZXhjZXB0
aW9uQ29kZSkpOworfQorCitXZWJOb2RlIFdlYlJhbmdlOjplbmRDb250YWluZXIoaW50JiBleGNl
cHRpb25Db2RlKSBjb25zdAoreworICAgIHJldHVybiBQYXNzUmVmUHRyPE5vZGU+KG1fcHJpdmF0
ZS0+ZW5kQ29udGFpbmVyKGV4Y2VwdGlvbkNvZGUpKTsKK30KKworV2ViU3RyaW5nIFdlYlJhbmdl
Ojp0b0hUTUxUZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT50b0hUTUwoKTsK
K30KKworV2ViU3RyaW5nIFdlYlJhbmdlOjp0b1BsYWluVGV4dCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fcHJpdmF0ZS0+dGV4dCgpOworfQorCitXZWJSYW5nZTo6V2ViUmFuZ2UoY29uc3QgV1RG
OjpQYXNzUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiYgcmFuZ2UpCisgICAgOiBtX3ByaXZhdGUoc3Rh
dGljX2Nhc3Q8V2ViUmFuZ2VQcml2YXRlKj4ocmFuZ2UucmVsZWFzZVJlZigpKSkKK3sKK30KKwor
V2ViUmFuZ2UmIFdlYlJhbmdlOjpvcGVyYXRvcj0oY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNv
cmU6OlJhbmdlPiYgcmFuZ2UpCit7CisgICAgYXNzaWduKHN0YXRpY19jYXN0PFdlYlJhbmdlUHJp
dmF0ZSo+KHJhbmdlLnJlbGVhc2VSZWYoKSkpOworICAgIHJldHVybiAqdGhpczsKK30KKworV2Vi
UmFuZ2U6Om9wZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpSYW5nZT4oKSBjb25zdAor
eworICAgIHJldHVybiBQYXNzUmVmUHRyPFJhbmdlPihjb25zdF9jYXN0PFdlYlJhbmdlUHJpdmF0
ZSo+KG1fcHJpdmF0ZSkpOworfQorCit2b2lkIFdlYlJhbmdlOjphc3NpZ24oV2ViUmFuZ2VQcml2
YXRlKiBwKQoreworICAgIC8vIHAgaXMgYWxyZWFkeSByZWYnZCBmb3IgdXMgYnkgdGhlIGNhbGxl
cgorICAgIGlmIChtX3ByaXZhdGUpCisgICAgICAgIG1fcHJpdmF0ZS0+ZGVyZWYoKTsKKyAgICBt
X3ByaXZhdGUgPSBwOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViUnVudGltZUZlYXR1cmVzLmNwcCBiL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViUnVudGltZUZlYXR1cmVzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5iNjMwYTA5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJSdW50aW1lRmVhdHVyZXMuY3BwCkBAIC0wLDAgKzEsMTU0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIldlYlJ1bnRpbWVGZWF0dXJlcy5oIgorCisjaW5jbHVkZSAiUnVudGltZUVu
YWJsZWRGZWF0dXJlcy5oIgorI2luY2x1ZGUgIldlYk1lZGlhUGxheWVyQ2xpZW50SW1wbC5oIgor
I2luY2x1ZGUgIldlYlNvY2tldC5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgV2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVEYXRhYmFz
ZShib29sIGVuYWJsZSkKK3sKKyNpZiBFTkFCTEUoREFUQUJBU0UpCisgICAgUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2V0RGF0YWJhc2VFbmFibGVkKGVuYWJsZSk7CisjZW5kaWYKK30KKworYm9v
bCBXZWJSdW50aW1lRmVhdHVyZXM6OmlzRGF0YWJhc2VFbmFibGVkKCkKK3sKKyNpZiBFTkFCTEUo
REFUQUJBU0UpCisgICAgcmV0dXJuIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OmRhdGFiYXNlRW5h
YmxlZCgpOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwordm9pZCBXZWJS
dW50aW1lRmVhdHVyZXM6OmVuYWJsZUxvY2FsU3RvcmFnZShib29sIGVuYWJsZSkKK3sKKyNpZiBF
TkFCTEUoRE9NX1NUT1JBR0UpCisgICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2V0TG9jYWxT
dG9yYWdlRW5hYmxlZChlbmFibGUpOworI2VuZGlmCit9CisKK2Jvb2wgV2ViUnVudGltZUZlYXR1
cmVzOjppc0xvY2FsU3RvcmFnZUVuYWJsZWQoKQoreworI2lmIEVOQUJMRShET01fU1RPUkFHRSkK
KyAgICByZXR1cm4gUnVudGltZUVuYWJsZWRGZWF0dXJlczo6bG9jYWxTdG9yYWdlRW5hYmxlZCgp
OworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwordm9pZCBXZWJSdW50aW1l
RmVhdHVyZXM6OmVuYWJsZVNlc3Npb25TdG9yYWdlKGJvb2wgZW5hYmxlKQoreworI2lmIEVOQUJM
RShET01fU1RPUkFHRSkKKyAgICBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzZXRTZXNzaW9uU3Rv
cmFnZUVuYWJsZWQoZW5hYmxlKTsKKyNlbmRpZgorfQorCitib29sIFdlYlJ1bnRpbWVGZWF0dXJl
czo6aXNTZXNzaW9uU3RvcmFnZUVuYWJsZWQoKQoreworI2lmIEVOQUJMRShET01fU1RPUkFHRSkK
KyAgICByZXR1cm4gUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2Vzc2lvblN0b3JhZ2VFbmFibGVk
KCk7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCit2b2lkIFdlYlJ1bnRp
bWVGZWF0dXJlczo6ZW5hYmxlTWVkaWFQbGF5ZXIoYm9vbCBlbmFibGUpCit7CisjaWYgRU5BQkxF
KFZJREVPKQorICAgIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6c2V0SXNFbmFibGVkKGVuYWJs
ZSk7CisjZW5kaWYKK30KKworYm9vbCBXZWJSdW50aW1lRmVhdHVyZXM6OmlzTWVkaWFQbGF5ZXJF
bmFibGVkKCkKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgcmV0dXJuIFdlYk1lZGlhUGxheWVy
Q2xpZW50SW1wbDo6aXNFbmFibGVkKCk7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRp
ZgorfQorCit2b2lkIFdlYlJ1bnRpbWVGZWF0dXJlczo6ZW5hYmxlU29ja2V0cyhib29sIGVuYWJs
ZSkKK3sKKyNpZiBFTkFCTEUoV0VCX1NPQ0tFVFMpCisgICAgV2ViU29ja2V0OjpzZXRJc0F2YWls
YWJsZShlbmFibGUpOworI2VuZGlmCit9CisKK2Jvb2wgV2ViUnVudGltZUZlYXR1cmVzOjppc1Nv
Y2tldHNFbmFibGVkKCkKK3sKKyNpZiBFTkFCTEUoV0VCX1NPQ0tFVFMpCisgICAgcmV0dXJuIFdl
YlNvY2tldDo6aXNBdmFpbGFibGUoKTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlm
Cit9CisKK3ZvaWQgV2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVOb3RpZmljYXRpb25zKGJvb2wg
ZW5hYmxlKQoreworI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKQorICAgIFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNldE5vdGlmaWNhdGlvbnNFbmFibGVkKGVuYWJsZSk7CisjZW5kaWYKK30KKwor
Ym9vbCBXZWJSdW50aW1lRmVhdHVyZXM6OmlzTm90aWZpY2F0aW9uc0VuYWJsZWQoKQoreworI2lm
IEVOQUJMRShOT1RJRklDQVRJT05TKQorICAgIHJldHVybiBSdW50aW1lRW5hYmxlZEZlYXR1cmVz
Ojpub3RpZmljYXRpb25zRW5hYmxlZCgpOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5k
aWYKK30KKwordm9pZCBXZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZUFwcGxpY2F0aW9uQ2FjaGUo
Ym9vbCBlbmFibGUpCit7CisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKyAg
ICBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzZXRBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZChlbmFi
bGUpOworI2VuZGlmCit9CisKK2Jvb2wgV2ViUnVudGltZUZlYXR1cmVzOjppc0FwcGxpY2F0aW9u
Q2FjaGVFbmFibGVkKCkKK3sKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQor
ICAgIHJldHVybiBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjphcHBsaWNhdGlvbkNhY2hlRW5hYmxl
ZCgpOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42825</attachid>
            <date>2009-11-09 18:20:45 -0800</date>
            <delta_ts>2009-11-10 00:16:55 -0800</delta_ts>
            <desc>Up-streaming Chromium API src files: WebScriptController...WebStorageNamespaceImpl</desc>
            <filename>bug-31276-20091109182043.patch</filename>
            <type>text/plain</type>
            <size>66258</size>
            <attacher name="Yaar Schnitman">yaar</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IGY3MmJjODIuLmQ4Y2U1NzggMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMiw2ICsy
LDEyNCBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgogCisgICAgICAg
IFVwLXN0cmVhbWluZyBDaHJvbWl1bSBBUEkgc3JjIGZpbGVzOiBXZWJTY3JpcHRDb250cm9sbGVy
Li4uV2ViU3RvcmFnZU5hbWVzcGFjZUltcGwKKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzEyNzYKKworICAgICAgICAqIHNyYy9XZWJTY3JpcHRDb250
cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlNjcmlwdENvbnRyb2xsZXI6
OnJlZ2lzdGVyRXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2NyaXB0Q29udHJvbGxl
cjo6ZW5hYmxlVjhTaW5nbGVUaHJlYWRNb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2NyaXB0
Q29udHJvbGxlcjo6Zmx1c2hDb25zb2xlTWVzc2FnZXMpOgorICAgICAgICAqIHNyYy9XZWJTZWFy
Y2hhYmxlRm9ybURhdGEuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdldEZvcm1FbmNv
ZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpJc0hUVFBGb3JtU3VibWl0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdldEJ1dHRvblRvQWN0aXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SXNTZWxlY3RJ
bkRlZmF1bHRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJc0luRGVmYXVsdFN0YXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6Okhhc1N1aXRhYmxlVGV4dEVsZW1lbnQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJTZWFyY2hhYmxlRm9ybURhdGE6OldlYlNlYXJjaGFibGVGb3JtRGF0YSk6CisgICAgICAg
ICogc3JjL1dlYlNlY3VyaXR5T3JpZ2luLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YlNlY3VyaXR5T3JpZ2luOjpyZXNldCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNlY3VyaXR5T3Jp
Z2luOjphc3NpZ24pOgorICAgICAgICAoV2ViS2l0OjpXZWJTZWN1cml0eU9yaWdpbjo6cHJvdG9j
b2wpOgorICAgICAgICAoV2ViS2l0OjpXZWJTZWN1cml0eU9yaWdpbjo6aG9zdCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlNlY3VyaXR5T3JpZ2luOjpwb3J0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
U2VjdXJpdHlPcmlnaW46OmlzRW1wdHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJTZWN1cml0eU9y
aWdpbjo6dG9TdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJTZWN1cml0eU9yaWdpbjo6ZGF0
YWJhc2VJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2VjdXJpdHlPcmlnaW46Oldl
YlNlY3VyaXR5T3JpZ2luKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2VjdXJpdHlPcmlnaW46Om9w
ZXJhdG9yPSk6CisgICAgICAgIChXZWJLaXQ6OldlYlNlY3VyaXR5T3JpZ2luOjpvcGVyYXRvciBX
VEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+KToKKyAgICAgICAgKiBzcmMv
V2ViU2VjdXJpdHlQb2xpY3kuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViU2VjdXJp
dHlQb2xpY3k6OnJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlNlY3VyaXR5UG9saWN5OjpyZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3MpOgorICAgICAgICAo
V2ViS2l0OjpXZWJTZWN1cml0eVBvbGljeTo6d2hpdGVMaXN0QWNjZXNzRnJvbU9yaWdpbik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlNlY3VyaXR5UG9saWN5OjpyZXNldE9yaWdpbkFjY2Vzc1doaXRl
TGlzdHMpOgorICAgICAgICAqIHNyYy9XZWJTZXR0aW5nc0ltcGwuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6V2ViU2V0dGluZ3NJbXBsOjpXZWJTZXR0aW5nc0ltcGwpOgorICAgICAgICAo
V2ViS2l0OjpXZWJTZXR0aW5nc0ltcGw6OnNldFN0YW5kYXJkRm9udEZhbWlseSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlNldHRpbmdzSW1wbDo6c2V0Rml4ZWRGb250RmFtaWx5KToKKyAgICAgICAg
KFdlYktpdDo6V2ViU2V0dGluZ3NJbXBsOjpzZXRTZXJpZkZvbnRGYW1pbHkpOgorICAgICAgICAo
V2ViS2l0OjpXZWJTZXR0aW5nc0ltcGw6OnNldFNhbnNTZXJpZkZvbnRGYW1pbHkpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJTZXR0aW5nc0ltcGw6OnNldEN1cnNpdmVGb250RmFtaWx5KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViU2V0dGluZ3NJbXBsOjpzZXRGYW50YXN5Rm9udEZhbWlseSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlNldHRpbmdzSW1wbDo6c2V0RGVmYXVsdEZvbnRTaXplKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViU2V0dGluZ3NJbXBsOjpzZXREZWZhdWx0Rml4ZWRGb250U2l6ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlNldHRpbmdzSW1wbDo6c2V0TWluaW11bUZvbnRTaXplKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViU2V0dGluZ3NJbXBsOjpzZXRNaW5pbXVtTG9naWNhbEZvbnRTaXpl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViU2V0dGluZ3NJbXBsOjpzZXREZWZhdWx0VGV4dEVuY29k
aW5nTmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlNldHRpbmdzSW1wbDo6c2V0SmF2YVNjcmlw
dEVuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJTZXR0aW5nc0ltcGw6OnNldFdlYlNlY3Vy
aXR5RW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNldHRpbmdzSW1wbDo6c2V0SmF2YVNj
cmlwdENhbk9wZW5XaW5kb3dzQXV0b21hdGljYWxseSk6CisgICAgICAgIChXZWJLaXQ6OldlYlNl
dHRpbmdzSW1wbDo6c2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KToKKyAgICAgICAgKFdlYktp
dDo6V2ViU2V0dGluZ3NJbXBsOjpzZXRQbHVnaW5zRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlNldHRpbmdzSW1wbDo6c2V0RE9NUGFzdGVBbGxvd2VkKToKKyAgICAgICAgKFdlYktpdDo6
V2ViU2V0dGluZ3NJbXBsOjpzZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKToKKyAgICAgICAgKFdl
YktpdDo6V2ViU2V0dGluZ3NJbXBsOjpzZXRTaHJpbmtzU3RhbmRhbG9uZUltYWdlc1RvRml0KToK
KyAgICAgICAgKFdlYktpdDo6V2ViU2V0dGluZ3NJbXBsOjpzZXRVc2VzRW5jb2RpbmdEZXRlY3Rv
cik6CisgICAgICAgIChXZWJLaXQ6OldlYlNldHRpbmdzSW1wbDo6c2V0VGV4dEFyZWFzQXJlUmVz
aXphYmxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2V0dGluZ3NJbXBsOjpzZXRKYXZhRW5hYmxl
ZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNldHRpbmdzSW1wbDo6c2V0QWxsb3dTY3JpcHRzVG9D
bG9zZVdpbmRvd3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJTZXR0aW5nc0ltcGw6OnNldFVzZXJT
dHlsZVNoZWV0TG9jYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJTZXR0aW5nc0ltcGw6OnNl
dFVzZXNQYWdlQ2FjaGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJTZXR0aW5nc0ltcGw6OnNldERv
d25sb2FkYWJsZUJpbmFyeUZvbnRzRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNldHRp
bmdzSW1wbDo6c2V0WFNTQXVkaXRvckVuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJTZXR0
aW5nc0ltcGw6OnNldExvY2FsU3RvcmFnZUVuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJT
ZXR0aW5nc0ltcGw6OnNldEVkaXRhYmxlTGlua0JlaGF2aW9yTmV2ZXJMaXZlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViU2V0dGluZ3NJbXBsOjpzZXRGb250UmVuZGVyaW5nTW9kZU5vcm1hbCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlNldHRpbmdzSW1wbDo6c2V0U2hvdWxkUGFpbnRDdXN0b21TY3Jv
bGxiYXJzKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2V0dGluZ3NJbXBsOjpzZXREYXRhYmFzZXNF
bmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2V0dGluZ3NJbXBsOjpzZXRBbGxvd1VuaXZl
cnNhbEFjY2Vzc0Zyb21GaWxlVVJMcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlNldHRpbmdzSW1w
bDo6c2V0VGV4dERpcmVjdGlvblN1Ym1lbnVJbmNsdXNpb25CZWhhdmlvck5ldmVySW5jbHVkZWQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJTZXR0aW5nc0ltcGw6OnNldE9mZmxpbmVXZWJBcHBsaWNh
dGlvbkNhY2hlRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNldHRpbmdzSW1wbDo6c2V0
RXhwZXJpbWVudGFsV2ViR0xFbmFibGVkKToKKyAgICAgICAgKiBzcmMvV2ViU2V0dGluZ3NJbXBs
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJTZXR0aW5nc0ltcGw6On5XZWJTZXR0aW5n
c0ltcGwpOgorICAgICAgICAqIHNyYy9XZWJTaGFyZWRXb3JrZXJJbXBsLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYlNoYXJlZFdvcmtlckltcGw6OldlYlNoYXJlZFdvcmtlckltcGwp
OgorICAgICAgICAoV2ViS2l0OjpXZWJTaGFyZWRXb3JrZXJJbXBsOjp+V2ViU2hhcmVkV29ya2Vy
SW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNoYXJlZFdvcmtlckltcGw6OmlzU3RhcnRlZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlNoYXJlZFdvcmtlckltcGw6OmNvbm5lY3QpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJTaGFyZWRXb3JrZXJJbXBsOjpjb25uZWN0VGFzayk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlNoYXJlZFdvcmtlckltcGw6OnN0YXJ0V29ya2VyQ29udGV4dCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlNoYXJlZFdvcmtlckltcGw6OnRlcm1pbmF0ZVdvcmtlckNvbnRleHQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJTaGFyZWRXb3JrZXJJbXBsOjpjbGllbnREZXN0cm95ZWQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJTaGFyZWRXb3JrZXJJbXBsOjpjbGllbnQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJTaGFyZWRXb3JrZXI6OmNyZWF0ZSk6CisgICAgICAgICogc3JjL1dlYlNoYXJl
ZFdvcmtlckltcGwuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlNoYXJlZFdvcmtlcklt
cGw6OmNvbW1vbkNsaWVudCk6CisgICAgICAgICogc3JjL1dlYlN0b3JhZ2VBcmVhSW1wbC5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJTdG9yYWdlQXJlYUltcGw6OldlYlN0b3JhZ2VB
cmVhSW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlN0b3JhZ2VBcmVhSW1wbDo6fldlYlN0b3Jh
Z2VBcmVhSW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlN0b3JhZ2VBcmVhSW1wbDo6bGVuZ3Ro
KToKKyAgICAgICAgKFdlYktpdDo6V2ViU3RvcmFnZUFyZWFJbXBsOjprZXkpOgorICAgICAgICAo
V2ViS2l0OjpXZWJTdG9yYWdlQXJlYUltcGw6OmdldEl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpX
ZWJTdG9yYWdlQXJlYUltcGw6OnNldEl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpXZWJTdG9yYWdl
QXJlYUltcGw6OnJlbW92ZUl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpXZWJTdG9yYWdlQXJlYUlt
cGw6OmNsZWFyKToKKyAgICAgICAgKiBzcmMvV2ViU3RvcmFnZUFyZWFJbXBsLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViS2l0OjpXZWJTdG9yYWdlQXJlYUltcGw6OmN1cnJlbnRTdG9yYWdlRXZlbnRV
UkwpOgorICAgICAgICAoV2ViS2l0OjpXZWJTdG9yYWdlQXJlYUltcGw6OlNjb3BlZFN0b3JhZ2VF
dmVudFVSTDo6U2NvcGVkU3RvcmFnZUV2ZW50VVJMKToKKyAgICAgICAgKFdlYktpdDo6V2ViU3Rv
cmFnZUFyZWFJbXBsOjpTY29wZWRTdG9yYWdlRXZlbnRVUkw6On5TY29wZWRTdG9yYWdlRXZlbnRV
UkwpOgorICAgICAgICAqIHNyYy9XZWJTdG9yYWdlRXZlbnREaXNwYXRjaGVySW1wbC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJTdG9yYWdlRXZlbnREaXNwYXRjaGVyOjpjcmVhdGUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJTdG9yYWdlRXZlbnREaXNwYXRjaGVySW1wbDo6V2ViU3Rv
cmFnZUV2ZW50RGlzcGF0Y2hlckltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJTdG9yYWdlRXZl
bnREaXNwYXRjaGVySW1wbDo6ZGlzcGF0Y2hTdG9yYWdlRXZlbnQpOgorICAgICAgICAqIHNyYy9X
ZWJTdG9yYWdlRXZlbnREaXNwYXRjaGVySW1wbC5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvV2Vi
U3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViU3Rv
cmFnZU5hbWVzcGFjZTo6Y3JlYXRlTG9jYWxTdG9yYWdlTmFtZXNwYWNlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViU3RvcmFnZU5hbWVzcGFjZTo6Y3JlYXRlU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2Up
OgorICAgICAgICAoV2ViS2l0OjpXZWJTdG9yYWdlTmFtZXNwYWNlSW1wbDo6V2ViU3RvcmFnZU5h
bWVzcGFjZUltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJTdG9yYWdlTmFtZXNwYWNlSW1wbDo6
fldlYlN0b3JhZ2VOYW1lc3BhY2VJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViU3RvcmFnZU5h
bWVzcGFjZUltcGw6OmNyZWF0ZVN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdlYktpdDo6V2ViU3Rv
cmFnZU5hbWVzcGFjZUltcGw6OmNvcHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJTdG9yYWdlTmFt
ZXNwYWNlSW1wbDo6Y2xvc2UpOgorICAgICAgICAqIHNyYy9XZWJTdG9yYWdlTmFtZXNwYWNlSW1w
bC5oOiBBZGRlZC4KKworMjAwOS0xMS0wOSAgWWFhciBTY2huaXRtYW4gIDx5YWFyQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwogICAgICAgICBV
cC1zdHJlYW1pbmcgQ2hyb21pdW0gQVBJIHNyYyBmaWxlczogV2ViUGFzc3dvcmRGb3JtRGF0YS4u
LldlYlJ1bnRpbWVGZWF0dXJlcwogCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0zMTI3NgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJT
Y3JpcHRDb250cm9sbGVyLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2NyaXB0Q29udHJv
bGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZmNDdlNgotLS0g
L2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2NyaXB0Q29udHJvbGxlci5j
cHAKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJTY3Jp
cHRDb250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOFBy
b3h5LmgiCisKKyNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit2b2lkIFdlYlNjcmlwdENvbnRyb2xsZXI6OnJl
Z2lzdGVyRXh0ZW5zaW9uKHY4OjpFeHRlbnNpb24qIGV4dGVuc2lvbikKK3sKKyAgICBWOFByb3h5
OjpyZWdpc3RlckV4dGVuc2lvbihleHRlbnNpb24sIFdlYlN0cmluZygpKTsKK30KKwordm9pZCBX
ZWJTY3JpcHRDb250cm9sbGVyOjpyZWdpc3RlckV4dGVuc2lvbih2ODo6RXh0ZW5zaW9uKiBleHRl
bnNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFdlYlN0cmluZyYgc2NoZW1lUmVzdHJpY3Rpb24pCit7CisgICAgVjhQcm94eTo6cmVnaXN0ZXJF
eHRlbnNpb24oZXh0ZW5zaW9uLCBzY2hlbWVSZXN0cmljdGlvbik7Cit9CisKK3ZvaWQgV2ViU2Ny
aXB0Q29udHJvbGxlcjo6cmVnaXN0ZXJFeHRlbnNpb24odjg6OkV4dGVuc2lvbiogZXh0ZW5zaW9u
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZXh0ZW5z
aW9uR3JvdXApCit7CisgICAgVjhQcm94eTo6cmVnaXN0ZXJFeHRlbnNpb24oZXh0ZW5zaW9uLCBl
eHRlbnNpb25Hcm91cCk7Cit9CisKK3ZvaWQgV2ViU2NyaXB0Q29udHJvbGxlcjo6ZW5hYmxlVjhT
aW5nbGVUaHJlYWRNb2RlKCkKK3sKKyAgICBlbmFibGVTdHJpbmdJbXBsQ2FjaGUoKTsKK30KKwor
dm9pZCBXZWJTY3JpcHRDb250cm9sbGVyOjpmbHVzaENvbnNvbGVNZXNzYWdlcygpCit7CisgICAg
V2ViQ29yZTo6VjhQcm94eTo6cHJvY2Vzc0NvbnNvbGVNZXNzYWdlcygpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2VhcmNo
YWJsZUZvcm1EYXRhLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2VhcmNoYWJsZUZvcm1E
YXRhLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGRhZmZlCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEu
Y3BwCkBAIC0wLDAgKzEsMjU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlNl
YXJjaGFibGVGb3JtRGF0YS5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJG
b3JtRGF0YUJ1aWxkZXIuaCIKKyNpbmNsdWRlICJGb3JtRGF0YUxpc3QuaCIKKyNpbmNsdWRlICJG
cmFtZS5oIgorI2luY2x1ZGUgIkhUTUxGb3JtQ29udHJvbEVsZW1lbnQuaCIKKyNpbmNsdWRlICJI
VE1MRm9ybUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCisjaW5jbHVk
ZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTE9wdGlvbkVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJIVE1MT3B0aW9uc0NvbGxlY3Rpb24uaCIKKyNpbmNsdWRlICJIVE1MU2VsZWN0RWxlbWVudC5o
IgorI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgorI2luY2x1ZGUgIldlYkZvcm1FbGVtZW50Lmgi
CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgeworCisvLyBHZXRzIHRo
ZSBlbmNvZGluZyBmb3IgdGhlIGZvcm0uCit2b2lkIEdldEZvcm1FbmNvZGluZyhjb25zdCBIVE1M
Rm9ybUVsZW1lbnQqIGZvcm0sIFRleHRFbmNvZGluZyogZW5jb2RpbmcpCit7CisgICAgU3RyaW5n
IHN0cihmb3JtLT5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjphY2NlcHRfY2hhcnNldEF0dHIpKTsK
KyAgICBzdHIucmVwbGFjZSgnLCcsICcgJyk7CisgICAgVmVjdG9yPFN0cmluZz4gY2hhcnNldHM7
CisgICAgc3RyLnNwbGl0KCcgJywgY2hhcnNldHMpOworICAgIGZvciAoVmVjdG9yPFN0cmluZz46
OmNvbnN0X2l0ZXJhdG9yIGkoY2hhcnNldHMuYmVnaW4oKSk7IGkgIT0gY2hhcnNldHMuZW5kKCk7
ICsraSkgeworICAgICAgICAqZW5jb2RpbmcgPSBUZXh0RW5jb2RpbmcoKmkpOworICAgICAgICBp
ZiAoZW5jb2RpbmctPmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
Y29uc3QgRnJhbWUqIGZyYW1lID0gZm9ybS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKKyAgICAqZW5j
b2RpbmcgPSBmcmFtZSA/IFRleHRFbmNvZGluZyhmcmFtZS0+bG9hZGVyKCktPmVuY29kaW5nKCkp
IDogTGF0aW4xRW5jb2RpbmcoKTsKK30KKworLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBzdWJtaXQg
cmVxdWVzdCByZXN1bHRzIGluIGFuIEhUVFAgVVJMLgorYm9vbCBJc0hUVFBGb3JtU3VibWl0KGNv
bnN0IEhUTUxGb3JtRWxlbWVudCogZm9ybSkKK3sKKyAgICBTdHJpbmcgYWN0aW9uKGZvcm0tPmFj
dGlvbigpKTsKKyAgICByZXR1cm4gZm9ybS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+bG9hZGVyKCkt
PmNvbXBsZXRlVVJMKGFjdGlvbi5pc051bGwoKSA/ICIiIDogYWN0aW9uKS5wcm90b2NvbCgpID09
ICJodHRwIjsKK30KKworLy8gSWYgdGhlIGZvcm0gZG9lcyBub3QgaGF2ZSBhbiBhY3RpdmF0ZWQg
c3VibWl0IGJ1dHRvbiwgdGhlIGZpcnN0IHN1Ym1pdAorLy8gYnV0dG9uIGlzIHJldHVybmVkLgor
SFRNTEZvcm1Db250cm9sRWxlbWVudCogR2V0QnV0dG9uVG9BY3RpdmF0ZShIVE1MRm9ybUVsZW1l
bnQqIGZvcm0pCit7CisgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogZmlyc3RTdWJtaXRCdXR0
b24gPSAwOworICAgIGZvciAoVmVjdG9yPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPjo6Y29uc3Rf
aXRlcmF0b3IgaShmb3JtLT5mb3JtRWxlbWVudHMuYmVnaW4oKSk7IGkgIT0gZm9ybS0+Zm9ybUVs
ZW1lbnRzLmVuZCgpOyArK2kpIHsKKyAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGZvcm1F
bGVtZW50ID0gKmk7CisgICAgICBpZiAoZm9ybUVsZW1lbnQtPmlzQWN0aXZhdGVkU3VibWl0KCkp
CisgICAgICAgICAgLy8gVGhlcmUncyBhIGJ1dHRvbiB0aGF0IGlzIGFscmVhZHkgYWN0aXZhdGVk
IGZvciBzdWJtaXQsIHJldHVybiAwLgorICAgICAgICAgIHJldHVybiAwOworICAgICAgaWYgKCFm
aXJzdFN1Ym1pdEJ1dHRvbiAmJiBmb3JtRWxlbWVudC0+aXNTdWNjZXNzZnVsU3VibWl0QnV0dG9u
KCkpCisgICAgICAgICAgZmlyc3RTdWJtaXRCdXR0b24gPSBmb3JtRWxlbWVudDsKKyAgICB9Cisg
ICAgcmV0dXJuIGZpcnN0U3VibWl0QnV0dG9uOworfQorCisvLyBSZXR1cm5zIHRydWUgaWYgdGhl
IHNlbGVjdGVkIHN0YXRlIG9mIGFsbCB0aGUgb3B0aW9ucyBtYXRjaGVzIHRoZSBkZWZhdWx0Cisv
LyBzZWxlY3RlZCBzdGF0ZS4KK2Jvb2wgSXNTZWxlY3RJbkRlZmF1bHRTdGF0ZShjb25zdCBIVE1M
U2VsZWN0RWxlbWVudCogc2VsZWN0KQoreworICAgIGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4mIGxp
c3RJdGVtcyA9IHNlbGVjdC0+bGlzdEl0ZW1zKCk7CisgICAgaWYgKHNlbGVjdC0+bXVsdGlwbGUo
KSB8fCBzZWxlY3QtPnNpemUoKSA+IDEpIHsKKyAgICAgICAgZm9yIChWZWN0b3I8RWxlbWVudCo+
Ojpjb25zdF9pdGVyYXRvciBpKGxpc3RJdGVtcy5iZWdpbigpKTsgaSAhPSBsaXN0SXRlbXMuZW5k
KCk7ICsraSkgeworICAgICAgICAgICAgaWYgKCEoKmkpLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
OjpvcHRpb25UYWcpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgY29u
c3QgSFRNTE9wdGlvbkVsZW1lbnQqIG9wdGlvbkVsZW1lbnQgPSBzdGF0aWNfY2FzdDxjb25zdCBI
VE1MT3B0aW9uRWxlbWVudCo+KCppKTsKKyAgICAgICAgICAgIGlmIChvcHRpb25FbGVtZW50LT5z
ZWxlY3RlZCgpICE9IG9wdGlvbkVsZW1lbnQtPmRlZmF1bHRTZWxlY3RlZCgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICAvLyBUaGUgc2VsZWN0IGlzIHJlbmRlcmVkIGFzIGEgY29tYm9ib3ggKGNhbGxl
ZCBtZW51bGlzdCBpbiBXZWJLaXQpLiBBdAorICAgIC8vIGxlYXN0IG9uZSBpdGVtIGlzIHNlbGVj
dGVkLCBkZXRlcm1pbmUgd2hpY2ggb25lLgorICAgIGNvbnN0IEhUTUxPcHRpb25FbGVtZW50KiBp
bml0aWFsU2VsZWN0ZWQgPSAwOworICAgIGZvciAoVmVjdG9yPEVsZW1lbnQqPjo6Y29uc3RfaXRl
cmF0b3IgaShsaXN0SXRlbXMuYmVnaW4oKSk7IGkgIT0gbGlzdEl0ZW1zLmVuZCgpOyArK2kpIHsK
KyAgICAgICAgaWYgKCEoKmkpLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRpb25UYWcpKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNvbnN0IEhUTUxPcHRpb25FbGVtZW50KiBv
cHRpb25FbGVtZW50ID0gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTE9wdGlvbkVsZW1lbnQqPigqaSk7
CisgICAgICAgIGlmIChvcHRpb25FbGVtZW50LT5kZWZhdWx0U2VsZWN0ZWQoKSkgeworICAgICAg
ICAgICAgLy8gVGhlIHBhZ2Ugc3BlY2lmaWVkIHRoZSBvcHRpb24gdG8gc2VsZWN0LgorICAgICAg
ICAgICAgaW5pdGlhbFNlbGVjdGVkID0gb3B0aW9uRWxlbWVudDsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGlmICghaW5pdGlhbFNlbGVjdGVkKQorICAgICAgICAgICAg
aW5pdGlhbFNlbGVjdGVkID0gb3B0aW9uRWxlbWVudDsKKyAgICB9CisgICAgcmV0dXJuIGluaXRp
YWxTZWxlY3RlZCA/IGluaXRpYWxTZWxlY3RlZC0+c2VsZWN0ZWQoKSA6IHRydWU7Cit9CisKKy8v
IFJldHVybnMgdHJ1ZSBpZiB0aGUgZm9ybSBlbGVtZW50IGlzIGluIGl0cyBkZWZhdWx0IHN0YXRl
LCBmYWxzZSBvdGhlcndpc2UuCisvLyBUaGUgZGVmYXVsdCBzdGF0ZSBpcyB0aGUgc3RhdGUgb2Yg
dGhlIGZvcm0gZWxlbWVudCBvbiBpbml0aWFsIGxvYWQgb2YgdGhlCisvLyBwYWdlLCBhbmQgdmFy
aWVzIGRlcGVuZGluZyB1cG9uIHRoZSBmb3JtIGVsZW1lbnQuIEZvciBleGFtcGxlLCBhIGNoZWNr
Ym94IGlzCisvLyBpbiBpdHMgZGVmYXVsdCBzdGF0ZSBpZiB0aGUgY2hlY2tlZCBzdGF0ZSBtYXRj
aGVzIHRoZSBkZWZhdWx0Q2hlY2tlZCBzdGF0ZS4KK2Jvb2wgSXNJbkRlZmF1bHRTdGF0ZShjb25z
dCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBmb3JtRWxlbWVudCkKK3sKKyAgICBpZiAoZm9ybUVs
ZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbnB1dFRhZykpIHsKKyAgICAgICAgY29uc3Qg
SFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTElu
cHV0RWxlbWVudCo+KGZvcm1FbGVtZW50KTsKKyAgICAgICAgaWYgKGlucHV0RWxlbWVudC0+aW5w
dXRUeXBlKCkgPT0gSFRNTElucHV0RWxlbWVudDo6Q0hFQ0tCT1ggfHwgaW5wdXRFbGVtZW50LT5p
bnB1dFR5cGUoKSA9PSBIVE1MSW5wdXRFbGVtZW50OjpSQURJTykKKyAgICAgICAgICAgIHJldHVy
biBpbnB1dEVsZW1lbnQtPmNoZWNrZWQoKSA9PSBpbnB1dEVsZW1lbnQtPmRlZmF1bHRDaGVja2Vk
KCk7CisgICAgfSBlbHNlIGlmIChmb3JtRWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNl
bGVjdFRhZykpCisgICAgICAgIHJldHVybiBJc1NlbGVjdEluRGVmYXVsdFN0YXRlKHN0YXRpY19j
YXN0PGNvbnN0IEhUTUxTZWxlY3RFbGVtZW50Kj4oZm9ybUVsZW1lbnQpKTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworLy8gSWYgZm9ybSBoYXMgb25seSBvbmUgdGV4dCBpbnB1dCBlbGVtZW50LCBy
ZXR1cm4gdHJ1ZS4gSWYgYSB2YWxpZCBpbnB1dAorLy8gZWxlbWVudCBpcyBub3QgZm91bmQsIHJl
dHVybiBmYWxzZS4gQWRkaXRpb25hbGx5LCB0aGUgZm9ybSBkYXRhIGZvciBhbGwKKy8vIGVsZW1l
bnRzIGlzIGFkZGVkIHRvIGVuY19zdHJpbmcgYW5kIHRoZSBlbmNvZGluZyB1c2VkIGlzIHNldCBp
bgorLy8gZW5jb2RpbmdfbmFtZS4KK2Jvb2wgSGFzU3VpdGFibGVUZXh0RWxlbWVudChjb25zdCBI
VE1MRm9ybUVsZW1lbnQqIGZvcm0sIFZlY3RvcjxjaGFyPiogZW5jb2RlZFN0cmluZywgU3RyaW5n
KiBlbmNvZGluZ05hbWUpCit7CisgICAgVGV4dEVuY29kaW5nIGVuY29kaW5nOworICAgIEdldEZv
cm1FbmNvZGluZyhmb3JtLCAmZW5jb2RpbmcpOworICAgIGlmICghZW5jb2RpbmcuaXNWYWxpZCgp
KSB7CisgICAgICAgIC8vIE5lZWQgYSB2YWxpZCBlbmNvZGluZyB0byBlbmNvZGUgdGhlIGZvcm0g
ZWxlbWVudHMuCisgICAgICAgIC8vIElmIHRoZSBlbmNvZGluZyBpc24ndCBmb3VuZCB3ZWJraXQg
ZW5kcyB1cCByZXBsYWNpbmcgdGhlIHBhcmFtcyB3aXRoCisgICAgICAgIC8vIGVtcHR5IHN0cmlu
Z3MuIFNvLCB3ZSBkb24ndCB0cnkgdG8gZG8gYW55dGhpbmcgaGVyZS4KKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorICAgICplbmNvZGluZ05hbWUgPSBlbmNvZGluZy5uYW1lKCk7CisKKyAgICBI
VE1MSW5wdXRFbGVtZW50KiB0ZXh0RWxlbWVudCA9IDA7CisgICAgZm9yIChWZWN0b3I8SFRNTEZv
cm1Db250cm9sRWxlbWVudCo+Ojpjb25zdF9pdGVyYXRvciBpKGZvcm0tPmZvcm1FbGVtZW50cy5i
ZWdpbigpKTsgaSAhPSBmb3JtLT5mb3JtRWxlbWVudHMuZW5kKCk7ICsraSkgeworICAgICAgICBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50KiBmb3JtRWxlbWVudCA9ICppOworICAgICAgICBpZiAoZm9y
bUVsZW1lbnQtPmRpc2FibGVkKCkgfHwgZm9ybUVsZW1lbnQtPm5hbWUoKS5pc051bGwoKSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICghSXNJbkRlZmF1bHRTdGF0ZShmb3Jt
RWxlbWVudCkgfHwgZm9ybUVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0ZXh0YXJlYVRh
ZykpCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBib29sIGlzVGV4dEVsZW1lbnQg
PSBmYWxzZTsKKyAgICAgICAgaWYgKGZvcm1FbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
aW5wdXRUYWcpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PGNvbnN0IEhUTUxJ
bnB1dEVsZW1lbnQqPihmb3JtRWxlbWVudCktPmlucHV0VHlwZSgpKSB7CisgICAgICAgICAgICBj
YXNlIEhUTUxJbnB1dEVsZW1lbnQ6OlRFWFQ6CisgICAgICAgICAgICBjYXNlIEhUTUxJbnB1dEVs
ZW1lbnQ6OklTSU5ERVg6CisgICAgICAgICAgICAgICAgaXNUZXh0RWxlbWVudCA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEhUTUxJbnB1dEVsZW1lbnQ6
OlBBU1NXT1JEOgorICAgICAgICAgICAgICAgIC8vIERvbid0IHN0b3JlIHBhc3N3b3JkcyEgVGhp
cyBpcyBtb3N0IGxpa2VseSBhbiBodHRwcyBhbnl3YXkuCisgICAgICAgICAgICAgICAgLy8gRmFs
bCB0aHJvdWdoLgorICAgICAgICAgICAgY2FzZSBIVE1MSW5wdXRFbGVtZW50OjpGSUxFOgorICAg
ICAgICAgICAgICAgIC8vIFRvbyBiaWcsIGRvbid0IHRyeSB0byBpbmRleCB0aGlzLgorICAgICAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICAvLyBBbGwgb3RoZXIgaW5wdXQgdHlwZXMgYXJlIGluZGV4YWJsZS4KKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgRm9ybURhdGFMaXN0IGRh
dGFMaXN0KGVuY29kaW5nKTsKKyAgICAgIGlmICghZm9ybUVsZW1lbnQtPmFwcGVuZEZvcm1EYXRh
KGRhdGFMaXN0LCBmYWxzZSkpCisgICAgICAgICAgY29udGludWU7CisKKyAgICAgIGNvbnN0IFZl
Y3RvcjxGb3JtRGF0YUxpc3Q6Okl0ZW0+JiBpdGVtTGlzdCA9IGRhdGFMaXN0Lmxpc3QoKTsKKyAg
ICAgIGlmIChpc1RleHRFbGVtZW50ICYmICFpdGVtTGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAg
ICBpZiAodGV4dEVsZW1lbnQpIHsKKyAgICAgICAgICAgICAgLy8gVGhlIGF1dG8tY29tcGxldGUg
YmFyIG9ubHkga25vd3MgaG93IHRvIGZpbGwgaW4gb25lIHZhbHVlLgorICAgICAgICAgICAgICAv
LyBUaGlzIGZvcm0gaGFzIG11bHRpcGxlIGZpZWxkczsgZG9uJ3QgdHJlYXQgaXQgYXMgc2VhcmNo
YWJsZS4KKyAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgIH0KKyAgICAgICAg
ICB0ZXh0RWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihmb3JtRWxlbWVu
dCk7CisgICAgICB9CisgICAgICBmb3IgKFZlY3RvcjxGb3JtRGF0YUxpc3Q6Okl0ZW0+Ojpjb25z
dF9pdGVyYXRvciBqKGl0ZW1MaXN0LmJlZ2luKCkpOyBqICE9IGl0ZW1MaXN0LmVuZCgpOyArK2op
IHsKKyAgICAgICAgICAvLyBIYW5kbGUgSVNJTkRFWCAvIDxpbnB1dCBuYW1lPWlzaW5kZXg+IHNw
ZWNpYWxseSwgYnV0IG9ubHkgaWYgaXQncworICAgICAgICAgIC8vIHRoZSBmaXJzdCBlbnRyeS4K
KyAgICAgICAgICBpZiAoIWVuY29kZWRTdHJpbmctPmlzRW1wdHkoKSB8fCBqLT5kYXRhKCkgIT0g
ImlzaW5kZXgiKSB7CisgICAgICAgICAgICAgIGlmICghZW5jb2RlZFN0cmluZy0+aXNFbXB0eSgp
KQorICAgICAgICAgICAgICAgICAgZW5jb2RlZFN0cmluZy0+YXBwZW5kKCcmJyk7CisgICAgICAg
ICAgICAgIEZvcm1EYXRhQnVpbGRlcjo6ZW5jb2RlU3RyaW5nQXNGb3JtRGF0YSgqZW5jb2RlZFN0
cmluZywgai0+ZGF0YSgpKTsKKyAgICAgICAgICAgICAgZW5jb2RlZFN0cmluZy0+YXBwZW5kKCc9
Jyk7CisgICAgICAgICAgfQorICAgICAgICAgICsrajsKKyAgICAgICAgICBpZiAoZm9ybUVsZW1l
bnQgPT0gdGV4dEVsZW1lbnQpCisgICAgICAgICAgICAgIGVuY29kZWRTdHJpbmctPmFwcGVuZCgi
e3NlYXJjaFRlcm1zfSIsIDEzKTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIEZvcm1E
YXRhQnVpbGRlcjo6ZW5jb2RlU3RyaW5nQXNGb3JtRGF0YSgqZW5jb2RlZFN0cmluZywgai0+ZGF0
YSgpKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdGV4dEVsZW1lbnQ7Cit9CisKK30g
Ly8gbmFtZXNwYWNlCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJTZWFyY2hhYmxlRm9ybURh
dGE6OldlYlNlYXJjaGFibGVGb3JtRGF0YShjb25zdCBXZWJGb3JtRWxlbWVudCYgZm9ybSkKK3sK
KyAgICBSZWZQdHI8SFRNTEZvcm1FbGVtZW50PiBmb3JtRWxlbWVudCA9IGZvcm0ub3BlcmF0b3Ig
UGFzc1JlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+KCk7CisgICAgY29uc3QgRnJhbWUqIGZyYW1lID0g
Zm9ybUVsZW1lbnQtPmRvY3VtZW50KCktPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgLy8gT25seSBjb25zaWRlciBmb3JtcyB0aGF0IEdFVCBkYXRhIGFu
ZCB0aGUgYWN0aW9uIHRhcmdldHMgYW4gaHR0cCBwYWdlLgorICAgIGlmIChlcXVhbElnbm9yaW5n
Q2FzZShmb3JtRWxlbWVudC0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6bWV0aG9kQXR0ciksICJw
b3N0IikgfHwgIUlzSFRUUEZvcm1TdWJtaXQoZm9ybUVsZW1lbnQuZ2V0KCkpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBmaXJzdFN1Ym1pdEJ1dHRvbiA9
IEdldEJ1dHRvblRvQWN0aXZhdGUoZm9ybUVsZW1lbnQuZ2V0KCkpOworICAgIGlmIChmaXJzdFN1
Ym1pdEJ1dHRvbikgeworICAgICAgICAvLyBUaGUgZm9ybSBkb2VzIG5vdCBoYXZlIGFuIGFjdGl2
ZSBzdWJtaXQgYnV0dG9uLCBtYWtlIHRoZSBmaXJzdCBidXR0b24KKyAgICAgICAgLy8gYWN0aXZl
LiBXZSBuZWVkIHRvIGRvIHRoaXMsIG90aGVyd2lzZSB0aGUgVVJMIHdpbGwgbm90IGNvbnRhaW4g
dGhlCisgICAgICAgIC8vIG5hbWUgb2YgdGhlIHN1Ym1pdCBidXR0b24uCisgICAgICAgIGZpcnN0
U3VibWl0QnV0dG9uLT5zZXRBY3RpdmF0ZWRTdWJtaXQodHJ1ZSk7CisgICAgfQorICAgIFZlY3Rv
cjxjaGFyPiBlbmNvZGVkU3RyaW5nOworICAgIFN0cmluZyBlbmNvZGluZzsKKyAgICBib29sIGhh
c0VsZW1lbnQgPSBIYXNTdWl0YWJsZVRleHRFbGVtZW50KGZvcm1FbGVtZW50LmdldCgpLCAmZW5j
b2RlZFN0cmluZywgJmVuY29kaW5nKTsKKyAgICBpZiAoZmlyc3RTdWJtaXRCdXR0b24pCisgICAg
ICAgIGZpcnN0U3VibWl0QnV0dG9uLT5zZXRBY3RpdmF0ZWRTdWJtaXQoZmFsc2UpOworICAgIGlm
ICghaGFzRWxlbWVudCkgeworICAgICAgICAvLyBOb3QgYSBzZWFyY2hhYmxlIGZvcm0uCisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBTdHJpbmcgYWN0aW9uKGZvcm1FbGVtZW50LT5hY3Rp
b24oKSk7CisgICAgS1VSTCB1cmwoZnJhbWUtPmxvYWRlcigpLT5jb21wbGV0ZVVSTChhY3Rpb24u
aXNOdWxsKCkgPyAiIiA6IGFjdGlvbikpOworICAgIFJlZlB0cjxGb3JtRGF0YT4gZm9ybURhdGEg
PSBGb3JtRGF0YTo6Y3JlYXRlKGVuY29kZWRTdHJpbmcpOworICAgIHVybC5zZXRRdWVyeShmb3Jt
RGF0YS0+ZmxhdHRlblRvU3RyaW5nKCkpOworICAgIG1fdXJsID0gdXJsOworICAgIG1fZW5jb2Rp
bmcgPSBlbmNvZGluZzsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNlY3VyaXR5T3JpZ2luLmNwcCBiL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViU2VjdXJpdHlPcmlnaW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjJhZGYzZGIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlNlY3VyaXR5T3JpZ2luLmNwcApAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJXZWJTZWN1cml0eU9yaWdpbi5oIgorCisjaW5jbHVkZSAiU2VjdXJpdHlPcmln
aW4uaCIKKyNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2Ns
YXNzIFdlYlNlY3VyaXR5T3JpZ2luUHJpdmF0ZSA6IHB1YmxpYyBTZWN1cml0eU9yaWdpbiB7Cit9
OworCit2b2lkIFdlYlNlY3VyaXR5T3JpZ2luOjpyZXNldCgpCit7CisgICAgYXNzaWduKDApOwor
fQorCit2b2lkIFdlYlNlY3VyaXR5T3JpZ2luOjphc3NpZ24oY29uc3QgV2ViU2VjdXJpdHlPcmln
aW4mIG90aGVyKQoreworICAgIFdlYlNlY3VyaXR5T3JpZ2luUHJpdmF0ZSogcCA9IGNvbnN0X2Nh
c3Q8V2ViU2VjdXJpdHlPcmlnaW5Qcml2YXRlKj4ob3RoZXIubV9wcml2YXRlKTsKKyAgICBpZiAo
cCkKKyAgICAgICAgcC0+cmVmKCk7CisgICAgYXNzaWduKHApOworfQorCitXZWJTdHJpbmcgV2Vi
U2VjdXJpdHlPcmlnaW46OnByb3RvY29sKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9wcml2YXRl
KTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5wcm90b2NvbCgpOworfQorCitXZWJTdHJpbmcgV2Vi
U2VjdXJpdHlPcmlnaW46Omhvc3QoKSBjb25zdAoreworICAgIEFTU0VSVChtX3ByaXZhdGUpOwor
ICAgIHJldHVybiBtX3ByaXZhdGUtPmhvc3QoKTsKK30KKwordW5zaWduZWQgc2hvcnQgV2ViU2Vj
dXJpdHlPcmlnaW46OnBvcnQoKSBjb25zdAoreworICAgIEFTU0VSVChtX3ByaXZhdGUpOworICAg
IHJldHVybiBtX3ByaXZhdGUtPnBvcnQoKTsKK30KKworYm9vbCBXZWJTZWN1cml0eU9yaWdpbjo6
aXNFbXB0eSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fcHJpdmF0ZSk7CisgICAgcmV0dXJuIG1f
cHJpdmF0ZS0+aXNFbXB0eSgpOworfQorCitXZWJTdHJpbmcgV2ViU2VjdXJpdHlPcmlnaW46OnRv
U3RyaW5nKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG5vdCBzdXBwb3J0IGNh
bGxpbmcgdGhpcyBtZXRob2Qgd2hlbiBtX3ByaXZhdGUgaXMgbnVsbC4KKyAgICBpZiAobV9wcml2
YXRlKQorICAgICAgICByZXR1cm4gbV9wcml2YXRlLT50b1N0cmluZygpOworCisgICAgcmV0dXJu
IFdlYlN0cmluZzo6ZnJvbVVURjgoIm51bGwiKTsKK30KKworV2ViU3RyaW5nIFdlYlNlY3VyaXR5
T3JpZ2luOjpkYXRhYmFzZUlkZW50aWZpZXIoKQoreworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
bm90IHN1cHBvcnQgY2FsbGluZyB0aGlzIG1ldGhvZCB3aGVuIG1fcHJpdmF0ZSBpcyBudWxsLgor
ICAgIGlmIChtX3ByaXZhdGUpCisgICAgICAgIHJldHVybiBtX3ByaXZhdGUtPmRhdGFiYXNlSWRl
bnRpZmllcigpOworCisgICAgcmV0dXJuIFdlYlN0cmluZzo6ZnJvbVVURjgoIm51bGwiKTsKK30K
KworV2ViU2VjdXJpdHlPcmlnaW46OldlYlNlY3VyaXR5T3JpZ2luKGNvbnN0IFdURjo6UGFzc1Jl
ZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4mIG9yaWdpbikKKyAgICA6IG1fcHJpdmF0ZShz
dGF0aWNfY2FzdDxXZWJTZWN1cml0eU9yaWdpblByaXZhdGUqPihvcmlnaW4ucmVsZWFzZVJlZigp
KSkKK3sKK30KKworV2ViU2VjdXJpdHlPcmlnaW4mIFdlYlNlY3VyaXR5T3JpZ2luOjpvcGVyYXRv
cj0oY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luPiYgb3JpZ2lu
KQoreworICAgIGFzc2lnbihzdGF0aWNfY2FzdDxXZWJTZWN1cml0eU9yaWdpblByaXZhdGUqPihv
cmlnaW4ucmVsZWFzZVJlZigpKSk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitXZWJTZWN1cml0
eU9yaWdpbjo6b3BlcmF0b3IgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2lu
PigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+KGNvbnN0
X2Nhc3Q8V2ViU2VjdXJpdHlPcmlnaW5Qcml2YXRlKj4obV9wcml2YXRlKSk7Cit9CisKK3ZvaWQg
V2ViU2VjdXJpdHlPcmlnaW46OmFzc2lnbihXZWJTZWN1cml0eU9yaWdpblByaXZhdGUqIHApCit7
CisgICAgLy8gcCBpcyBhbHJlYWR5IHJlZidkIGZvciB1cyBieSB0aGUgY2FsbGVyCisgICAgaWYg
KG1fcHJpdmF0ZSkKKyAgICAgICAgbV9wcml2YXRlLT5kZXJlZigpOworICAgIG1fcHJpdmF0ZSA9
IHA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJTZWN1cml0eVBvbGljeS5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNl
Y3VyaXR5UG9saWN5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jNjZj
ODA1Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZWN1cml0eVBv
bGljeS5jcHAKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
ZWJTZWN1cml0eVBvbGljeS5oIgorCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRl
ICJTZWN1cml0eU9yaWdpbi5oIgorCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisjaW5jbHVkZSAi
V2ViVVJMLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0
IHsKKwordm9pZCBXZWJTZWN1cml0eVBvbGljeTo6cmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsKGNv
bnN0IFdlYlN0cmluZyYgc2NoZW1lKQoreworICAgIFNlY3VyaXR5T3JpZ2luOjpyZWdpc3RlclVS
TFNjaGVtZUFzTG9jYWwoc2NoZW1lKTsKK30KKwordm9pZCBXZWJTZWN1cml0eVBvbGljeTo6cmVn
aXN0ZXJVUkxTY2hlbWVBc05vQWNjZXNzKGNvbnN0IFdlYlN0cmluZyYgc2NoZW1lKQoreworICAg
IFNlY3VyaXR5T3JpZ2luOjpyZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3Moc2NoZW1lKTsKK30K
Kwordm9pZCBXZWJTZWN1cml0eVBvbGljeTo6d2hpdGVMaXN0QWNjZXNzRnJvbU9yaWdpbihjb25z
dCBXZWJVUkwmIHNvdXJjZU9yaWdpbiwKKyAgICBjb25zdCBXZWJTdHJpbmcmIGRlc3RpbmF0aW9u
UHJvdG9jb2wsCisgICAgY29uc3QgV2ViU3RyaW5nJiBkZXN0aW5hdGlvbkhvc3QsCisgICAgYm9v
bCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucykKK3sKKyAgICBTZWN1cml0eU9yaWdpbjo6d2hp
dGVMaXN0QWNjZXNzRnJvbU9yaWdpbigKKyAgICAgICAgKlNlY3VyaXR5T3JpZ2luOjpjcmVhdGUo
c291cmNlT3JpZ2luKSwgZGVzdGluYXRpb25Qcm90b2NvbCwKKyAgICAgICAgZGVzdGluYXRpb25I
b3N0LCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucyk7Cit9CisKK3ZvaWQgV2ViU2VjdXJpdHlQ
b2xpY3k6OnJlc2V0T3JpZ2luQWNjZXNzV2hpdGVMaXN0cygpCit7CisgICAgU2VjdXJpdHlPcmln
aW46OnJlc2V0T3JpZ2luQWNjZXNzV2hpdGVMaXN0cygpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmNw
cCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzVjNTY3Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuY3BwCkBAIC0wLDAgKzEsMjQ3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlNldHRpbmdzSW1wbC5oIgorCisjaW5jbHVkZSAi
Rm9udFJlbmRlcmluZ01vZGUuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIldl
YlN0cmluZy5oIgorI2luY2x1ZGUgIldlYlVSTC5oIgorCisjaWYgZGVmaW5lZChPU19XSU4pCisj
aW5jbHVkZSAiUmVuZGVyVGhlbWVDaHJvbWl1bVdpbi5oIgorI2VuZGlmCisKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViU2V0dGluZ3NJbXBsOjpX
ZWJTZXR0aW5nc0ltcGwoU2V0dGluZ3MqIHNldHRpbmdzKQorICAgIDogbV9zZXR0aW5ncyhzZXR0
aW5ncykKK3sKKyAgICBBU1NFUlQoc2V0dGluZ3MpOworfQorCit2b2lkIFdlYlNldHRpbmdzSW1w
bDo6c2V0U3RhbmRhcmRGb250RmFtaWx5KGNvbnN0IFdlYlN0cmluZyYgZm9udCkKK3sKKyAgICBt
X3NldHRpbmdzLT5zZXRTdGFuZGFyZEZvbnRGYW1pbHkoZm9udCk7Cit9CisKK3ZvaWQgV2ViU2V0
dGluZ3NJbXBsOjpzZXRGaXhlZEZvbnRGYW1pbHkoY29uc3QgV2ViU3RyaW5nJiBmb250KQorewor
ICAgIG1fc2V0dGluZ3MtPnNldEZpeGVkRm9udEZhbWlseSgoU3RyaW5nKWZvbnQpOworfQorCit2
b2lkIFdlYlNldHRpbmdzSW1wbDo6c2V0U2VyaWZGb250RmFtaWx5KGNvbnN0IFdlYlN0cmluZyYg
Zm9udCkKK3sKKyAgICBtX3NldHRpbmdzLT5zZXRTZXJpZkZvbnRGYW1pbHkoKFN0cmluZylmb250
KTsKK30KKwordm9pZCBXZWJTZXR0aW5nc0ltcGw6OnNldFNhbnNTZXJpZkZvbnRGYW1pbHkoY29u
c3QgV2ViU3RyaW5nJiBmb250KQoreworICAgIG1fc2V0dGluZ3MtPnNldFNhbnNTZXJpZkZvbnRG
YW1pbHkoKFN0cmluZylmb250KTsKK30KKwordm9pZCBXZWJTZXR0aW5nc0ltcGw6OnNldEN1cnNp
dmVGb250RmFtaWx5KGNvbnN0IFdlYlN0cmluZyYgZm9udCkKK3sKKyAgICBtX3NldHRpbmdzLT5z
ZXRDdXJzaXZlRm9udEZhbWlseSgoU3RyaW5nKWZvbnQpOworfQorCit2b2lkIFdlYlNldHRpbmdz
SW1wbDo6c2V0RmFudGFzeUZvbnRGYW1pbHkoY29uc3QgV2ViU3RyaW5nJiBmb250KQoreworICAg
IG1fc2V0dGluZ3MtPnNldEZhbnRhc3lGb250RmFtaWx5KChTdHJpbmcpZm9udCk7Cit9CisKK3Zv
aWQgV2ViU2V0dGluZ3NJbXBsOjpzZXREZWZhdWx0Rm9udFNpemUoaW50IHNpemUpCit7CisgICAg
bV9zZXR0aW5ncy0+c2V0RGVmYXVsdEZvbnRTaXplKHNpemUpOworI2lmIGRlZmluZWQoT1NfV0lO
KQorICAgIC8vIFJlbmRlclRoZW1lIGlzIGEgc2luZ2xldG9uIHRoYXQgbmVlZHMgdG8ga25vdyB0
aGUgZGVmYXVsdCBmb250IHNpemUgdG8KKyAgICAvLyBkcmF3IHNvbWUgZm9ybSBjb250cm9scy4g
IFdlIGxldCBpdCBrbm93IGVhY2ggdGltZSB0aGUgc2l6ZSBjaGFuZ2VzLgorICAgIFdlYkNvcmU6
OlJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnNldERlZmF1bHRGb250U2l6ZShzaXplKTsKKyNlbmRp
ZgorfQorCit2b2lkIFdlYlNldHRpbmdzSW1wbDo6c2V0RGVmYXVsdEZpeGVkRm9udFNpemUoaW50
IHNpemUpCit7CisgICAgbV9zZXR0aW5ncy0+c2V0RGVmYXVsdEZpeGVkRm9udFNpemUoc2l6ZSk7
Cit9CisKK3ZvaWQgV2ViU2V0dGluZ3NJbXBsOjpzZXRNaW5pbXVtRm9udFNpemUoaW50IHNpemUp
Cit7CisgICAgbV9zZXR0aW5ncy0+c2V0TWluaW11bUZvbnRTaXplKHNpemUpOworfQorCit2b2lk
IFdlYlNldHRpbmdzSW1wbDo6c2V0TWluaW11bUxvZ2ljYWxGb250U2l6ZShpbnQgc2l6ZSkKK3sK
KyAgICBtX3NldHRpbmdzLT5zZXRNaW5pbXVtTG9naWNhbEZvbnRTaXplKHNpemUpOworfQorCit2
b2lkIFdlYlNldHRpbmdzSW1wbDo6c2V0RGVmYXVsdFRleHRFbmNvZGluZ05hbWUoY29uc3QgV2Vi
U3RyaW5nJiBlbmNvZGluZykKK3sKKyAgICBtX3NldHRpbmdzLT5zZXREZWZhdWx0VGV4dEVuY29k
aW5nTmFtZSgoU3RyaW5nKWVuY29kaW5nKTsKK30KKwordm9pZCBXZWJTZXR0aW5nc0ltcGw6OnNl
dEphdmFTY3JpcHRFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBtX3NldHRpbmdzLT5zZXRK
YXZhU2NyaXB0RW5hYmxlZChlbmFibGVkKTsKK30KKwordm9pZCBXZWJTZXR0aW5nc0ltcGw6OnNl
dFdlYlNlY3VyaXR5RW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAgbV9zZXR0aW5ncy0+c2V0
V2ViU2VjdXJpdHlFbmFibGVkKGVuYWJsZWQpOworfQorCit2b2lkIFdlYlNldHRpbmdzSW1wbDo6
c2V0SmF2YVNjcmlwdENhbk9wZW5XaW5kb3dzQXV0b21hdGljYWxseShib29sIGNhbk9wZW5XaW5k
b3dzKQoreworICAgIG1fc2V0dGluZ3MtPnNldEphdmFTY3JpcHRDYW5PcGVuV2luZG93c0F1dG9t
YXRpY2FsbHkoY2FuT3BlbldpbmRvd3MpOworfQorCit2b2lkIFdlYlNldHRpbmdzSW1wbDo6c2V0
TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KGJvb2wgbG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KQor
eworICAgIG1fc2V0dGluZ3MtPnNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseShsb2Fkc0ltYWdl
c0F1dG9tYXRpY2FsbHkpOworfQorCit2b2lkIFdlYlNldHRpbmdzSW1wbDo6c2V0UGx1Z2luc0Vu
YWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIG1fc2V0dGluZ3MtPnNldFBsdWdpbnNFbmFibGVk
KGVuYWJsZWQpOworfQorCit2b2lkIFdlYlNldHRpbmdzSW1wbDo6c2V0RE9NUGFzdGVBbGxvd2Vk
KGJvb2wgZW5hYmxlZCkKK3sKKyAgICBtX3NldHRpbmdzLT5zZXRET01QYXN0ZUFsbG93ZWQoZW5h
YmxlZCk7Cit9CisKK3ZvaWQgV2ViU2V0dGluZ3NJbXBsOjpzZXREZXZlbG9wZXJFeHRyYXNFbmFi
bGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBtX3NldHRpbmdzLT5zZXREZXZlbG9wZXJFeHRyYXNF
bmFibGVkKGVuYWJsZWQpOworfQorCit2b2lkIFdlYlNldHRpbmdzSW1wbDo6c2V0U2hyaW5rc1N0
YW5kYWxvbmVJbWFnZXNUb0ZpdChib29sIHNocmlua0ltYWdlcykKK3sKKyAgICBtX3NldHRpbmdz
LT5zZXRTaHJpbmtzU3RhbmRhbG9uZUltYWdlc1RvRml0KHNocmlua0ltYWdlcyk7Cit9CisKK3Zv
aWQgV2ViU2V0dGluZ3NJbXBsOjpzZXRVc2VzRW5jb2RpbmdEZXRlY3Rvcihib29sIHVzZXNEZXRl
Y3RvcikKK3sKKyAgICBtX3NldHRpbmdzLT5zZXRVc2VzRW5jb2RpbmdEZXRlY3Rvcih1c2VzRGV0
ZWN0b3IpOworfQorCit2b2lkIFdlYlNldHRpbmdzSW1wbDo6c2V0VGV4dEFyZWFzQXJlUmVzaXph
YmxlKGJvb2wgYXJlUmVzaXphYmxlKQoreworICAgIG1fc2V0dGluZ3MtPnNldFRleHRBcmVhc0Fy
ZVJlc2l6YWJsZShhcmVSZXNpemFibGUpOworfQorCit2b2lkIFdlYlNldHRpbmdzSW1wbDo6c2V0
SmF2YUVuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIG1fc2V0dGluZ3MtPnNldEphdmFFbmFi
bGVkKGVuYWJsZWQpOworfQorCit2b2lkIFdlYlNldHRpbmdzSW1wbDo6c2V0QWxsb3dTY3JpcHRz
VG9DbG9zZVdpbmRvd3MoYm9vbCBhbGxvdykKK3sKKyAgICBtX3NldHRpbmdzLT5zZXRBbGxvd1Nj
cmlwdHNUb0Nsb3NlV2luZG93cyhhbGxvdyk7Cit9CisKK3ZvaWQgV2ViU2V0dGluZ3NJbXBsOjpz
ZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKGNvbnN0IFdlYlVSTCYgbG9jYXRpb24pCit7CisgICAg
bV9zZXR0aW5ncy0+c2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbihsb2NhdGlvbik7Cit9CisKK3Zv
aWQgV2ViU2V0dGluZ3NJbXBsOjpzZXRVc2VzUGFnZUNhY2hlKGJvb2wgdXNlc1BhZ2VDYWNoZSkK
K3sKKyAgICBtX3NldHRpbmdzLT5zZXRVc2VzUGFnZUNhY2hlKHVzZXNQYWdlQ2FjaGUpOworfQor
Cit2b2lkIFdlYlNldHRpbmdzSW1wbDo6c2V0RG93bmxvYWRhYmxlQmluYXJ5Rm9udHNFbmFibGVk
KGJvb2wgZW5hYmxlZCkKK3sKKyAgICBtX3NldHRpbmdzLT5zZXREb3dubG9hZGFibGVCaW5hcnlG
b250c0VuYWJsZWQoZW5hYmxlZCk7Cit9CisKK3ZvaWQgV2ViU2V0dGluZ3NJbXBsOjpzZXRYU1NB
dWRpdG9yRW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAgbV9zZXR0aW5ncy0+c2V0WFNTQXVk
aXRvckVuYWJsZWQoZW5hYmxlZCk7Cit9CisKK3ZvaWQgV2ViU2V0dGluZ3NJbXBsOjpzZXRMb2Nh
bFN0b3JhZ2VFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBtX3NldHRpbmdzLT5zZXRMb2Nh
bFN0b3JhZ2VFbmFibGVkKGVuYWJsZWQpOworfQorCit2b2lkIFdlYlNldHRpbmdzSW1wbDo6c2V0
RWRpdGFibGVMaW5rQmVoYXZpb3JOZXZlckxpdmUoKQoreworICAgIC8vIEZJWE1FOiBJZiB5b3Ug
ZXZlciBuZWVkIG1vcmUgYmVoYXZpb3JzIHRoYW4gdGhpcywgdGhlbiB3ZSBzaG91bGQgcHJvYmFi
bHkKKyAgICAvLyAgICAgICAgZGVmaW5lIGFuIGVudW0gaW4gV2ViU2V0dGluZ3MuaCBhbmQgaGF2
ZSBhIHN3aXRjaCBzdGF0ZW1lbnQgdGhhdAorICAgIC8vICAgICAgICB0cmFuc2xhdGVzLiAgVW50
aWwgdGhlbiwgdGhpcyBpcyBwcm9iYWJseSBmaW5lLCB0aG91Z2guCisgICAgbV9zZXR0aW5ncy0+
c2V0RWRpdGFibGVMaW5rQmVoYXZpb3IoV2ViQ29yZTo6RWRpdGFibGVMaW5rTmV2ZXJMaXZlKTsK
K30KKwordm9pZCBXZWJTZXR0aW5nc0ltcGw6OnNldEZvbnRSZW5kZXJpbmdNb2RlTm9ybWFsKCkK
K3sKKyAgICAvLyBGSVhNRTogSWYgeW91IGV2ZXIgbmVlZCBtb3JlIGJlaGF2aW9ycyB0aGFuIHRo
aXMsIHRoZW4gd2Ugc2hvdWxkIHByb2JhYmx5CisgICAgLy8gICAgICAgIGRlZmluZSBhbiBlbnVt
IGluIFdlYlNldHRpbmdzLmggYW5kIGhhdmUgYSBzd2l0Y2ggc3RhdGVtZW50IHRoYXQKKyAgICAv
LyAgICAgICAgdHJhbnNsYXRlcy4gIFVudGlsIHRoZW4sIHRoaXMgaXMgcHJvYmFibHkgZmluZSwg
dGhvdWdoLgorICAgIG1fc2V0dGluZ3MtPnNldEZvbnRSZW5kZXJpbmdNb2RlKFdlYkNvcmU6Ok5v
cm1hbFJlbmRlcmluZ01vZGUpOworfQorCit2b2lkIFdlYlNldHRpbmdzSW1wbDo6c2V0U2hvdWxk
UGFpbnRDdXN0b21TY3JvbGxiYXJzKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBtX3NldHRpbmdzLT5z
ZXRTaG91bGRQYWludEN1c3RvbVNjcm9sbGJhcnMoZW5hYmxlZCk7Cit9CisKK3ZvaWQgV2ViU2V0
dGluZ3NJbXBsOjpzZXREYXRhYmFzZXNFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBtX3Nl
dHRpbmdzLT5zZXREYXRhYmFzZXNFbmFibGVkKGVuYWJsZWQpOworfQorCit2b2lkIFdlYlNldHRp
bmdzSW1wbDo6c2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHMoYm9vbCBhbGxvdykK
K3sKKyAgICBtX3NldHRpbmdzLT5zZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMcyhh
bGxvdyk7Cit9CisKK3ZvaWQgV2ViU2V0dGluZ3NJbXBsOjpzZXRUZXh0RGlyZWN0aW9uU3VibWVu
dUluY2x1c2lvbkJlaGF2aW9yTmV2ZXJJbmNsdWRlZCgpCit7CisgICAgLy8gRklYTUU6IElmIHlv
dSBldmVyIG5lZWQgbW9yZSBiZWhhdmlvcnMgdGhhbiB0aGlzLCB0aGVuIHdlIHNob3VsZCBwcm9i
YWJseQorICAgIC8vICAgICAgICBkZWZpbmUgYW4gZW51bSBpbiBXZWJTZXR0aW5ncy5oIGFuZCBo
YXZlIGEgc3dpdGNoIHN0YXRlbWVudCB0aGF0CisgICAgLy8gICAgICAgIHRyYW5zbGF0ZXMuICBV
bnRpbCB0aGVuLCB0aGlzIGlzIHByb2JhYmx5IGZpbmUsIHRob3VnaC4KKyAgICBtX3NldHRpbmdz
LT5zZXRUZXh0RGlyZWN0aW9uU3VibWVudUluY2x1c2lvbkJlaGF2aW9yKFdlYkNvcmU6OlRleHRE
aXJlY3Rpb25TdWJtZW51TmV2ZXJJbmNsdWRlZCk7Cit9CisKK3ZvaWQgV2ViU2V0dGluZ3NJbXBs
OjpzZXRPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQoYm9vbCBlbmFibGVkKQorewor
ICAgIG1fc2V0dGluZ3MtPnNldE9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZChlbmFi
bGVkKTsKK30KKwordm9pZCBXZWJTZXR0aW5nc0ltcGw6OnNldEV4cGVyaW1lbnRhbFdlYkdMRW5h
YmxlZChib29sIGVuYWJsZWQpCit7CisgICAgbV9zZXR0aW5ncy0+c2V0V2ViR0xFbmFibGVkKGVu
YWJsZWQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNl
dHRpbmdzSW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxZWI2MzEK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5o
CkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlNldHRpbmdzSW1wbF9oCisjZGVmaW5lIFdlYlNl
dHRpbmdzSW1wbF9oCisKKy8vIFRPRE8oam9ybG93KTogUmVtb3ZlIHRoaXMgaGFjayBvbmNlIFdl
YlZpZXcgaXMgZnJlZSBvZiBnbHVlLgorI2luY2x1ZGUgIi4uL3B1YmxpYy9XZWJTZXR0aW5ncy5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBTZXR0aW5nczsKK30KKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK2NsYXNzIFdlYlNldHRpbmdzSW1wbCA6IHB1YmxpYyBXZWJTZXR0aW5ncyB7
CitwdWJsaWM6CisgICAgZXhwbGljaXQgV2ViU2V0dGluZ3NJbXBsKFdlYkNvcmU6OlNldHRpbmdz
Kik7CisgICAgdmlydHVhbCB+V2ViU2V0dGluZ3NJbXBsKCkgeyB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0U3RhbmRhcmRGb250RmFtaWx5KGNvbnN0IFdlYlN0cmluZyYpOworICAgIHZpcnR1YWwg
dm9pZCBzZXRGaXhlZEZvbnRGYW1pbHkoY29uc3QgV2ViU3RyaW5nJik7CisgICAgdmlydHVhbCB2
b2lkIHNldFNlcmlmRm9udEZhbWlseShjb25zdCBXZWJTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0U2Fuc1NlcmlmRm9udEZhbWlseShjb25zdCBXZWJTdHJpbmcmKTsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0Q3Vyc2l2ZUZvbnRGYW1pbHkoY29uc3QgV2ViU3RyaW5nJik7CisgICAgdmlydHVh
bCB2b2lkIHNldEZhbnRhc3lGb250RmFtaWx5KGNvbnN0IFdlYlN0cmluZyYpOworICAgIHZpcnR1
YWwgdm9pZCBzZXREZWZhdWx0Rm9udFNpemUoaW50KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RGVm
YXVsdEZpeGVkRm9udFNpemUoaW50KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TWluaW11bUZvbnRT
aXplKGludCk7CisgICAgdmlydHVhbCB2b2lkIHNldE1pbmltdW1Mb2dpY2FsRm9udFNpemUoaW50
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmYXVsdFRleHRFbmNvZGluZ05hbWUoY29uc3QgV2Vi
U3RyaW5nJik7CisgICAgdmlydHVhbCB2b2lkIHNldEphdmFTY3JpcHRFbmFibGVkKGJvb2wpOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRXZWJTZWN1cml0eUVuYWJsZWQoYm9vbCk7CisgICAgdmlydHVh
bCB2b2lkIHNldEphdmFTY3JpcHRDYW5PcGVuV2luZG93c0F1dG9tYXRpY2FsbHkoYm9vbCk7Cisg
ICAgdmlydHVhbCB2b2lkIHNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseShib29sKTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0UGx1Z2luc0VuYWJsZWQoYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHNl
dERPTVBhc3RlQWxsb3dlZChib29sKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RGV2ZWxvcGVyRXh0
cmFzRW5hYmxlZChib29sKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2hyaW5rc1N0YW5kYWxvbmVJ
bWFnZXNUb0ZpdChib29sKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VXNlc0VuY29kaW5nRGV0ZWN0
b3IoYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHNldFRleHRBcmVhc0FyZVJlc2l6YWJsZShib29s
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SmF2YUVuYWJsZWQoYm9vbCk7CisgICAgdmlydHVhbCB2
b2lkIHNldEFsbG93U2NyaXB0c1RvQ2xvc2VXaW5kb3dzKGJvb2wpOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKGNvbnN0IFdlYlVSTCYpOworICAgIHZpcnR1YWwg
dm9pZCBzZXRVc2VzUGFnZUNhY2hlKGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCBzZXREb3dubG9h
ZGFibGVCaW5hcnlGb250c0VuYWJsZWQoYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHNldFhTU0F1
ZGl0b3JFbmFibGVkKGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCBzZXRMb2NhbFN0b3JhZ2VFbmFi
bGVkKGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCBzZXRFZGl0YWJsZUxpbmtCZWhhdmlvck5ldmVy
TGl2ZSgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRGb250UmVuZGVyaW5nTW9kZU5vcm1hbCgpOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRTaG91bGRQYWludEN1c3RvbVNjcm9sbGJhcnMoYm9vbCk7Cisg
ICAgdmlydHVhbCB2b2lkIHNldERhdGFiYXNlc0VuYWJsZWQoYm9vbCk7CisgICAgdmlydHVhbCB2
b2lkIHNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKGJvb2wpOworICAgIHZpcnR1
YWwgdm9pZCBzZXRUZXh0RGlyZWN0aW9uU3VibWVudUluY2x1c2lvbkJlaGF2aW9yTmV2ZXJJbmNs
dWRlZCgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVu
YWJsZWQoYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHNldEV4cGVyaW1lbnRhbFdlYkdMRW5hYmxl
ZChib29sKTsKKworcHJpdmF0ZToKKyAgICBXZWJDb3JlOjpTZXR0aW5ncyogbV9zZXR0aW5nczsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViU2hhcmVkV29ya2VySW1wbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlNoYXJlZFdvcmtlckltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjQ1NDczMzYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlNoYXJlZFdvcmtlckltcGwuY3BwCkBAIC0wLDAgKzEsMTI3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIldlYlNoYXJlZFdvcmtlckltcGwuaCIKKworI2luY2x1ZGUgIkdlbmVyaWNX
b3JrZXJUYXNrLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIk1lc3NhZ2VFdmVudC5o
IgorI2luY2x1ZGUgIk1lc3NhZ2VQb3J0Q2hhbm5lbC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTWVz
c2FnZVBvcnRDaGFubmVsLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgor
I2luY2x1ZGUgIlNoYXJlZFdvcmtlckNvbnRleHQuaCIKKyNpbmNsdWRlICJTaGFyZWRXb3JrZXJU
aHJlYWQuaCIKKworI2luY2x1ZGUgIldlYk1lc3NhZ2VQb3J0Q2hhbm5lbC5oIgorI2luY2x1ZGUg
IldlYlN0cmluZy5oIgorI2luY2x1ZGUgIldlYlVSTC5oIgorCit1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKKyNpZiBFTkFCTEUoU0hBUkVEX1dPUktFUlMp
CisKK1dlYlNoYXJlZFdvcmtlckltcGw6OldlYlNoYXJlZFdvcmtlckltcGwoV2ViQ29tbW9uV29y
a2VyQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX2NsaWVudChjbGllbnQpCit7Cit9CisKK1dlYlNo
YXJlZFdvcmtlckltcGw6On5XZWJTaGFyZWRXb3JrZXJJbXBsKCkKK3sKK30KKworYm9vbCBXZWJT
aGFyZWRXb3JrZXJJbXBsOjppc1N0YXJ0ZWQoKQoreworICAgIC8vIFNob3VsZCBub3QgZXZlciBi
ZSBjYWxsZWQgZnJvbSB0aGUgd29ya2VyIHRocmVhZCAodGhpcyBBUEkgaXMgb25seSBjYWxsZWQg
b24gV2ViU2hhcmVkV29ya2VyUHJveHkgb24gdGhlIHJlbmRlcmVyIHRocmVhZCkuCisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHdvcmtlclRocmVhZCgpOworfQorCit2b2lk
IFdlYlNoYXJlZFdvcmtlckltcGw6OmNvbm5lY3QoV2ViTWVzc2FnZVBvcnRDaGFubmVsKiB3ZWJD
aGFubmVsLCBDb25uZWN0TGlzdGVuZXIqIGxpc3RlbmVyKQoreworICAgIC8vIENvbnZlcnQgdGhl
IFdlYk1lc3NhZ2VQb3J0Q2hhbmVsIHRvIGEgV2ViQ29yZTo6TWVzc2FnZVBvcnRDaGFubmVsLgor
ICAgIFJlZlB0cjxQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbD4gcGxhdGZvcm1fY2hhbm5lbCA9
CisgICAgICAgIFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsOjpjcmVhdGUod2ViQ2hhbm5lbCk7
CisgICAgd2ViQ2hhbm5lbC0+c2V0Q2xpZW50KHBsYXRmb3JtX2NoYW5uZWwuZ2V0KCkpOworICAg
IE93blB0cjxNZXNzYWdlUG9ydENoYW5uZWw+IGNoYW5uZWwgPQorICAgICAgICBNZXNzYWdlUG9y
dENoYW5uZWw6OmNyZWF0ZShwbGF0Zm9ybV9jaGFubmVsKTsKKworICAgIHdvcmtlclRocmVhZCgp
LT5ydW5Mb29wKCkucG9zdFRhc2soCisgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmY29ubmVj
dFRhc2ssIHRoaXMsIGNoYW5uZWwucmVsZWFzZSgpKSk7CisgICAgaWYgKGxpc3RlbmVyKQorICAg
ICAgICBsaXN0ZW5lci0+Y29ubmVjdGVkKCk7Cit9CisKK3ZvaWQgV2ViU2hhcmVkV29ya2VySW1w
bDo6Y29ubmVjdFRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgV2ViU2hhcmVk
V29ya2VySW1wbCogd29ya2VyLCBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbD4gY2hhbm5l
bCkKK3sKKyAgICAvLyBXcmFwIHRoZSBwYXNzZWQtaW4gY2hhbm5lbCBpbiBhIE1lc3NhZ2VQb3J0
LCBhbmQgc2VuZCBpdCBvZmYgdmlhIGEgY29ubmVjdCBldmVudC4KKyAgICBSZWZQdHI8TWVzc2Fn
ZVBvcnQ+IHBvcnQgPSBNZXNzYWdlUG9ydDo6Y3JlYXRlKCpjb250ZXh0KTsKKyAgICBwb3J0LT5l
bnRhbmdsZShjaGFubmVsLnJlbGVhc2UoKSk7CisgICAgQVNTRVJUKGNvbnRleHQtPmlzV29ya2Vy
Q29udGV4dCgpKTsKKyAgICBXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0ID0gc3RhdGljX2Nh
c3Q8V29ya2VyQ29udGV4dCo+KGNvbnRleHQpOworICAgIEFTU0VSVCh3b3JrZXJDb250ZXh0LT5p
c1NoYXJlZFdvcmtlckNvbnRleHQoKSk7CisgICAgd29ya2VyQ29udGV4dC0+dG9TaGFyZWRXb3Jr
ZXJDb250ZXh0KCktPmRpc3BhdGNoRXZlbnQoY3JlYXRlQ29ubmVjdEV2ZW50KHBvcnQpKTsKK30K
Kwordm9pZCBXZWJTaGFyZWRXb3JrZXJJbXBsOjpzdGFydFdvcmtlckNvbnRleHQoY29uc3QgV2Vi
VVJMJiB1cmwsIGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViU3RyaW5nJiB1c2VyQWdl
bnQsIGNvbnN0IFdlYlN0cmluZyYgc291cmNlQ29kZSkKK3sKKyAgICBpbml0aWFsaXplTG9hZGVy
KHVybCk7CisgICAgc2V0V29ya2VyVGhyZWFkKFNoYXJlZFdvcmtlclRocmVhZDo6Y3JlYXRlKG5h
bWUsIHVybCwgdXNlckFnZW50LCBzb3VyY2VDb2RlLCAqdGhpcywgKnRoaXMpKTsKKyAgICB3b3Jr
ZXJUaHJlYWQoKS0+c3RhcnQoKTsKK30KKwordm9pZCBXZWJTaGFyZWRXb3JrZXJJbXBsOjp0ZXJt
aW5hdGVXb3JrZXJDb250ZXh0KCkKK3sKKyAgICBzdG9wV29ya2VyVGhyZWFkKCk7Cit9CisKK3Zv
aWQgV2ViU2hhcmVkV29ya2VySW1wbDo6Y2xpZW50RGVzdHJveWVkKCkKK3sKKyAgICBtX2NsaWVu
dCA9IDA7Cit9CisKK1dlYldvcmtlckNsaWVudCogV2ViU2hhcmVkV29ya2VySW1wbDo6Y2xpZW50
KCkKK3sKKyAgICAvLyBXZSBzaG91bGQgbmV2ZXIgYmUgYXNrZWQgZm9yIGEgV2ViV29ya2VyQ2xp
ZW50IChvbmx5IGRlZGljYXRlZCB3b3JrZXJzIGhhdmUgYW4gYXNzb2NpYXRlZCBXZWJXb3JrZXJD
bGllbnQpLgorICAgIC8vIEl0IHNob3VsZCBub3QgYmUgcG9zc2libGUgZm9yIFNoYXJlZFdvcmtl
ckNvbnRleHQgdG8gZ2VuZXJhdGUgYW4gQVBJIGNhbGwgb3V0c2lkZSB0aG9zZSBzdXBwb3J0ZWQg
YnkgV2ViQ29tbW9uV29ya2VyQ2xpZW50LgorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiAwOworfQorCitXZWJTaGFyZWRXb3JrZXIqIFdlYlNoYXJlZFdvcmtlcjo6Y3JlYXRl
KFdlYkNvbW1vbldvcmtlckNsaWVudCogY2xpZW50KQoreworICAgIHJldHVybiBuZXcgV2ViU2hh
cmVkV29ya2VySW1wbChjbGllbnQpOworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNIQVJFRF9XT1JL
RVJTKQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViU2hhcmVkV29ya2VySW1wbC5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTaGFy
ZWRXb3JrZXJJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2MxMGQ3
NgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2hhcmVkV29ya2Vy
SW1wbC5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlNoYXJlZFdvcmtlckltcGxfaAorI2Rl
ZmluZSBXZWJTaGFyZWRXb3JrZXJJbXBsX2gKKworI2luY2x1ZGUgIldlYlNoYXJlZFdvcmtlci5o
IgorCisjaWYgRU5BQkxFKFNIQVJFRF9XT1JLRVJTKQorCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0
aW9uQ29udGV4dC5oIgorCisjaW5jbHVkZSAiV2ViV29ya2VyQmFzZS5oIgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworLy8gVGhpcyBjbGFzcyBpcyB1c2VkIGJ5IHRoZSB3b3JrZXIgcHJvY2VzcyBj
b2RlIHRvIHRhbGsgdG8gdGhlIFdlYkNvcmU6OlNoYXJlZFdvcmtlciBpbXBsZW1lbnRhdGlvbi4K
Ky8vIEl0IGNhbid0IHVzZSBpdCBkaXJlY3RseSBzaW5jZSBpdCB1c2VzIFdlYktpdCB0eXBlcywg
c28gdGhpcyBjbGFzcyBjb252ZXJ0cyB0aGUgZGF0YSB0eXBlcy4KKy8vIFdoZW4gdGhlIFdlYkNv
cmU6OlNoYXJlZFdvcmtlciBvYmplY3Qgd2FudHMgdG8gY2FsbCBXZWJDb3JlOjpXb3JrZXJSZXBv
cnRpbmdQcm94eSwgdGhpcyBjbGFzcyB3aWxsCisvLyBjb252ZXJ0IHRvIENocm9tZSBkYXRhIHR5
cGVzIGZpcnN0IGFuZCB0aGVuIGNhbGwgdGhlIHN1cHBsaWVkIFdlYkNvbW1vbldvcmtlckNsaWVu
dC4KK2NsYXNzIFdlYlNoYXJlZFdvcmtlckltcGwgOiBwdWJsaWMgV2ViV29ya2VyQmFzZSwgcHVi
bGljIFdlYlNoYXJlZFdvcmtlciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgV2ViU2hhcmVkV29y
a2VySW1wbChXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNsaWVudCk7CisKKyAgICAvLyBXZWJTaGFy
ZWRXb3JrZXIgbWV0aG9kczoKKyAgICB2aXJ0dWFsIGJvb2wgaXNTdGFydGVkKCk7CisgICAgdmly
dHVhbCB2b2lkIHN0YXJ0V29ya2VyQ29udGV4dChjb25zdCBXZWJVUkwmLCBjb25zdCBXZWJTdHJp
bmcmIG5hbWUsIGNvbnN0IFdlYlN0cmluZyYgdXNlckFnZW50LCBjb25zdCBXZWJTdHJpbmcmIHNv
dXJjZUNvZGUpOworICAgIHZpcnR1YWwgdm9pZCBjb25uZWN0KFdlYk1lc3NhZ2VQb3J0Q2hhbm5l
bCosIENvbm5lY3RMaXN0ZW5lciopOworICAgIHZpcnR1YWwgdm9pZCB0ZXJtaW5hdGVXb3JrZXJD
b250ZXh0KCk7CisgICAgdmlydHVhbCB2b2lkIGNsaWVudERlc3Ryb3llZCgpOworCisgICAgLy8g
V2ViV29ya2VyQmFzZSBtZXRob2RzOgorICAgIFdlYldvcmtlckNsaWVudCogY2xpZW50KCk7Cisg
ICAgV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQoKSB7IHJldHVybiBtX2NsaWVu
dDsgfQorCitwcml2YXRlOgorICAgIHZpcnR1YWwgfldlYlNoYXJlZFdvcmtlckltcGwoKTsKKwor
ICAgIHN0YXRpYyB2b2lkIGNvbm5lY3RUYXNrKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBXZWJTaGFyZWRXb3JrZXJJbXBsKiwgUGFzc093blB0cjxXZWJDb3JlOjpNZXNzYWdlUG9y
dENoYW5uZWw+KTsKKworICAgIFdlYkNvbW1vbldvcmtlckNsaWVudCogbV9jbGllbnQ7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShTSEFSRURfV09SS0VS
UykKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlN0b3JhZ2VB
cmVhSW1wbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlN0b3JhZ2VBcmVhSW1wbC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI0YmVlMwotLS0gL2Rldi9udWxs
CisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU3RvcmFnZUFyZWFJbXBsLmNwcApAQCAtMCww
ICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlN0b3JhZ2VBcmVhSW1w
bC5oIgorCisjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQorCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29k
ZS5oIgorCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisjaW5jbHVkZSAiV2ViVVJMLmgiCisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitjb25zdCBXZWJVUkwqIFdlYlN0b3JhZ2VBcmVhSW1wbDo6c3Rv
cmFnZUV2ZW50VVJMID0gMDsKKworV2ViU3RvcmFnZUFyZWFJbXBsOjpXZWJTdG9yYWdlQXJlYUlt
cGwoUGFzc1JlZlB0cjxXZWJDb3JlOjpTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWEpCisgICAgOiBt
X3N0b3JhZ2VBcmVhKHN0b3JhZ2VBcmVhKQoreworfQorCitXZWJTdG9yYWdlQXJlYUltcGw6On5X
ZWJTdG9yYWdlQXJlYUltcGwoKQoreworfQorCit1bnNpZ25lZCBXZWJTdG9yYWdlQXJlYUltcGw6
Omxlbmd0aCgpCit7CisgICAgcmV0dXJuIG1fc3RvcmFnZUFyZWEtPmxlbmd0aCgpOworfQorCitX
ZWJTdHJpbmcgV2ViU3RvcmFnZUFyZWFJbXBsOjprZXkodW5zaWduZWQgaW5kZXgpCit7CisgICAg
cmV0dXJuIG1fc3RvcmFnZUFyZWEtPmtleShpbmRleCk7Cit9CisKK1dlYlN0cmluZyBXZWJTdG9y
YWdlQXJlYUltcGw6OmdldEl0ZW0oY29uc3QgV2ViU3RyaW5nJiBrZXkpCit7CisgICAgcmV0dXJu
IG1fc3RvcmFnZUFyZWEtPmdldEl0ZW0oa2V5KTsKK30KKwordm9pZCBXZWJTdG9yYWdlQXJlYUlt
cGw6OnNldEl0ZW0oY29uc3QgV2ViU3RyaW5nJiBrZXksIGNvbnN0IFdlYlN0cmluZyYgdmFsdWUs
IGNvbnN0IFdlYlVSTCYgdXJsLCBib29sJiBxdW90YUV4Y2VwdGlvbikKK3sKKyAgICBpbnQgZXhj
ZXB0aW9uQ29kZSA9IDA7CisKKyAgICBTY29wZWRTdG9yYWdlRXZlbnRVUkwgc2NvcGUodXJsKTsK
KyAgICBtX3N0b3JhZ2VBcmVhLT5zZXRJdGVtKGtleSwgdmFsdWUsIGV4Y2VwdGlvbkNvZGUsIDAp
OworCisgICAgaWYgKGV4Y2VwdGlvbkNvZGUpIHsKKyAgICAgICAgQVNTRVJUKGV4Y2VwdGlvbkNv
ZGUgPT0gV2ViQ29yZTo6UVVPVEFfRVhDRUVERURfRVJSKTsKKyAgICAgICAgcXVvdGFFeGNlcHRp
b24gPSB0cnVlOworICAgIH0gZWxzZQorICAgICAgICBxdW90YUV4Y2VwdGlvbiA9IGZhbHNlOwor
fQorCit2b2lkIFdlYlN0b3JhZ2VBcmVhSW1wbDo6cmVtb3ZlSXRlbShjb25zdCBXZWJTdHJpbmcm
IGtleSwgY29uc3QgV2ViVVJMJiB1cmwpCit7CisgICAgU2NvcGVkU3RvcmFnZUV2ZW50VVJMIHNj
b3BlKHVybCk7CisgICAgbV9zdG9yYWdlQXJlYS0+cmVtb3ZlSXRlbShrZXksIDApOworfQorCit2
b2lkIFdlYlN0b3JhZ2VBcmVhSW1wbDo6Y2xlYXIoY29uc3QgV2ViVVJMJiB1cmwpCit7CisgICAg
U2NvcGVkU3RvcmFnZUV2ZW50VVJMIHNjb3BlKHVybCk7CisgICAgbV9zdG9yYWdlQXJlYS0+Y2xl
YXIoMCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKERP
TV9TVE9SQUdFKQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTdG9yYWdlQXJl
YUltcGwuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU3RvcmFnZUFyZWFJbXBsLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFmNzRlMAotLS0gL2Rldi9udWxsCisrKyBi
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU3RvcmFnZUFyZWFJbXBsLmgKQEAgLTAsMCArMSw4MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgV2ViU3RvcmFnZUFyZWFJbXBsX2gKKyNkZWZpbmUgV2ViU3RvcmFnZUFyZWFJbXBs
X2gKKworI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKworI2luY2x1ZGUgIlN0b3JhZ2VBcmVhSW1w
bC5oIgorI2luY2x1ZGUgIldlYlN0b3JhZ2VBcmVhLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitjbGFzcyBXZWJTdG9yYWdlQXJlYUltcGwgOiBwdWJsaWMgV2ViU3RvcmFnZUFyZWEgeworcHVi
bGljOgorICAgIFdlYlN0b3JhZ2VBcmVhSW1wbChQYXNzUmVmUHRyPFdlYkNvcmU6OlN0b3JhZ2VB
cmVhPiBzdG9yYWdlQXJlYSk7CisgICAgdmlydHVhbCB+V2ViU3RvcmFnZUFyZWFJbXBsKCk7Cisg
ICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKTsKKyAgICB2aXJ0dWFsIFdlYlN0cmluZyBrZXko
dW5zaWduZWQgaW5kZXgpOworICAgIHZpcnR1YWwgV2ViU3RyaW5nIGdldEl0ZW0oY29uc3QgV2Vi
U3RyaW5nJiBrZXkpOworICAgIHZpcnR1YWwgdm9pZCBzZXRJdGVtKGNvbnN0IFdlYlN0cmluZyYg
a2V5LCBjb25zdCBXZWJTdHJpbmcmIHZhbHVlLCBjb25zdCBXZWJVUkwmIHVybCwgYm9vbCYgcXVv
dGFFeGNlcHRpb24pOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVJdGVtKGNvbnN0IFdlYlN0cmlu
ZyYga2V5LCBjb25zdCBXZWJVUkwmIHVybCk7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyKGNvbnN0
IFdlYlVSTCYgdXJsKTsKKworICAgIC8vIEZvciBzdG9yYWdlIGV2ZW50cyBpbiBzaW5nbGUtcHJv
Y2VzcyBtb2RlIGFuZCB0ZXN0IHNoZWxsLgorICAgIHN0YXRpYyBjb25zdCBXZWJVUkwqIGN1cnJl
bnRTdG9yYWdlRXZlbnRVUkwoKSB7IHJldHVybiBzdG9yYWdlRXZlbnRVUkw7IH0KKworcHJpdmF0
ZToKKyAgICBjbGFzcyBTY29wZWRTdG9yYWdlRXZlbnRVUkwgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgU2NvcGVkU3RvcmFnZUV2ZW50VVJMKGNvbnN0IFdlYlVSTCYgdXJsKQorICAgICAgICB7Cisg
ICAgICAgICAgICAvLyBGSVhNRTogT25jZSBzdG9yYWdlIGV2ZW50cyBhcmUgZmlyZWQgYXN5bmMg
aW4gV2ViS2l0IChhcyB0aGV5IHNob3VsZAorICAgICAgICAgICAgLy8gICAgICAgIGJlKSB0aGlz
IGNhbiBiZSBBU1NFUlRlZCB0byBiZSAwIHJhdGhlciB0aGFuIHNhdmVkLgorICAgICAgICAgICAg
bV9leGlzdGluZ1N0b3JhZ2VFdmVudFVSTCA9IHN0b3JhZ2VFdmVudFVSTDsKKyAgICAgICAgICAg
IHN0b3JhZ2VFdmVudFVSTCA9ICZ1cmw7CisgICAgICAgIH0KKyAgICAgICAgflNjb3BlZFN0b3Jh
Z2VFdmVudFVSTCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0b3JhZ2VFdmVudFVSTCA9IG1f
ZXhpc3RpbmdTdG9yYWdlRXZlbnRVUkw7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAg
ICAgIGNvbnN0IFdlYlVSTCogbV9leGlzdGluZ1N0b3JhZ2VFdmVudFVSTDsKKyAgICB9OworCisg
ICAgc3RhdGljIGNvbnN0IFdlYlVSTCogc3RvcmFnZUV2ZW50VVJMOworCisgICAgUmVmUHRyPFdl
YkNvcmU6OlN0b3JhZ2VBcmVhPiBtX3N0b3JhZ2VBcmVhOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoRE9NX1NUT1JBR0UpCisKKyNlbmRpZiAvLyBXZWJT
dG9yYWdlQXJlYUltcGxfaApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTdG9y
YWdlRXZlbnREaXNwYXRjaGVySW1wbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlN0b3Jh
Z2VFdmVudERpc3BhdGNoZXJJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi41MTVhNDIzCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJT
dG9yYWdlRXZlbnREaXNwYXRjaGVySW1wbC5jcHAKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmli
dXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXZWJTdG9yYWdlRXZlbnREaXNwYXRjaGVySW1wbC5oIgorCisj
aWYgRU5BQkxFKERPTV9TVE9SQUdFKQorCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlNl
Y3VyaXR5T3JpZ2luLmgiCisKKyNpbmNsdWRlICJXZWJTdG9yYWdlQXJlYUltcGwuaCIKKyNpbmNs
dWRlICJXZWJVUkwuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2V4dGVybiBjb25zdCBjaGFy
KiBwYWdlR3JvdXBOYW1lOworCitXZWJTdG9yYWdlRXZlbnREaXNwYXRjaGVyKiBXZWJTdG9yYWdl
RXZlbnREaXNwYXRjaGVyOjpjcmVhdGUoKQoreworICAgIHJldHVybiBuZXcgV2ViU3RvcmFnZUV2
ZW50RGlzcGF0Y2hlckltcGwoKTsKK30KKworV2ViU3RvcmFnZUV2ZW50RGlzcGF0Y2hlckltcGw6
OldlYlN0b3JhZ2VFdmVudERpc3BhdGNoZXJJbXBsKCkKKyAgICA6IG1fZXZlbnREaXNwYXRjaGVy
KG5ldyBXZWJDb3JlOjpTdG9yYWdlRXZlbnREaXNwYXRjaGVySW1wbChwYWdlR3JvdXBOYW1lKSkK
K3sKKyAgICBBU1NFUlQobV9ldmVudERpc3BhdGNoZXIpOworfQorCit2b2lkIFdlYlN0b3JhZ2VF
dmVudERpc3BhdGNoZXJJbXBsOjpkaXNwYXRjaFN0b3JhZ2VFdmVudChjb25zdCBXZWJTdHJpbmcm
IGtleSwgY29uc3QgV2ViU3RyaW5nJiBvbGRWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgbmV3VmFs
dWUsIGNvbnN0IFdlYlN0cmluZyYgb3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViVVJMJiBwYXNzZWRJblVSTCwg
Ym9vbCBpc0xvY2FsU3RvcmFnZSkKK3sKKyAgICAvLyBIYWNrIGZvciBzaW5nbGUtcHJvY2VzcyBt
b2RlIGFuZCB0ZXN0IHNoZWxsLgorICAgIGNvbnN0IFdlYlVSTCogc3RvcmFnZUFyZWFJbXBsVVJM
ID0gV2ViU3RvcmFnZUFyZWFJbXBsOjpjdXJyZW50U3RvcmFnZUV2ZW50VVJMKCk7CisgICAgY29u
c3QgV2ViVVJMJiB1cmwgPSBzdG9yYWdlQXJlYUltcGxVUkwgPyAqc3RvcmFnZUFyZWFJbXBsVVJM
IDogcGFzc2VkSW5VUkw7CisKKyAgICBXZWJDb3JlOjpTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSA9
IGlzTG9jYWxTdG9yYWdlID8gV2ViQ29yZTo6TG9jYWxTdG9yYWdlIDogV2ViQ29yZTo6U2Vzc2lv
blN0b3JhZ2U7CisgICAgUmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9y
aWdpbiA9IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tU3RyaW5nKG9yaWdpbik7
CisgICAgbV9ldmVudERpc3BhdGNoZXItPmRpc3BhdGNoU3RvcmFnZUV2ZW50KGtleSwgb2xkVmFs
dWUsIG5ld1ZhbHVlLCBzZWN1cml0eU9yaWdpbi5nZXQoKSwgdXJsLCBzdG9yYWdlVHlwZSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKERPTV9TVE9SQUdF
KQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTdG9yYWdlRXZlbnREaXNwYXRj
aGVySW1wbC5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTdG9yYWdlRXZlbnREaXNwYXRjaGVy
SW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4NDhiOTkKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlN0b3JhZ2VFdmVudERpc3BhdGNo
ZXJJbXBsLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViU3RvcmFnZUV2ZW50RGlzcGF0Y2hl
ckltcGxfaAorI2RlZmluZSBXZWJTdG9yYWdlRXZlbnREaXNwYXRjaGVySW1wbF9oCisKKyNpZiBF
TkFCTEUoRE9NX1NUT1JBR0UpCisKKyNpbmNsdWRlICJTdG9yYWdlRXZlbnREaXNwYXRjaGVySW1w
bC5oIgorI2luY2x1ZGUgIldlYlN0b3JhZ2VFdmVudERpc3BhdGNoZXIuaCIKKyNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJTdG9yYWdlRXZl
bnREaXNwYXRjaGVySW1wbCA6IHB1YmxpYyBXZWJTdG9yYWdlRXZlbnREaXNwYXRjaGVyIHsKK3B1
YmxpYzoKKyAgICBXZWJTdG9yYWdlRXZlbnREaXNwYXRjaGVySW1wbCgpOworCisgICAgdmlydHVh
bCB2b2lkIGRpc3BhdGNoU3RvcmFnZUV2ZW50KGNvbnN0IFdlYlN0cmluZyYga2V5LCBjb25zdCBX
ZWJTdHJpbmcmIG9sZFZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBXZWJTdHJpbmcmIG5ld1ZhbHVlLCBjb25zdCBXZWJTdHJpbmcmIG9yaWdpbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViVVJMJiwgYm9vbCBp
c0xvY2FsU3RvcmFnZSk7CisKK3ByaXZhdGU6CisgICAgT3duUHRyPFdlYkNvcmU6OlN0b3JhZ2VF
dmVudERpc3BhdGNoZXJJbXBsPiBtX2V2ZW50RGlzcGF0Y2hlcjsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKERPTV9TVE9SQUdFKQorCisjZW5kaWYgLy8g
V2ViU3RvcmFnZUV2ZW50RGlzcGF0Y2hlckltcGxfaApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJTdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlN0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi45NGNiOWI1Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJTdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXZWJTdG9yYWdlTmFtZXNwYWNlSW1wbC5oIgorCisjaWYgRU5BQkxF
KERPTV9TVE9SQUdFKQorCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKworI2luY2x1ZGUg
IldlYlN0b3JhZ2VBcmVhSW1wbC5oIgorI2luY2x1ZGUgIldlYlN0cmluZy5oIgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworV2ViU3RvcmFnZU5hbWVzcGFjZSogV2ViU3RvcmFnZU5hbWVzcGFjZTo6
Y3JlYXRlTG9jYWxTdG9yYWdlTmFtZXNwYWNlKGNvbnN0IFdlYlN0cmluZyYgcGF0aCwgdW5zaWdu
ZWQgcXVvdGEpCit7CisgICAgcmV0dXJuIG5ldyBXZWJTdG9yYWdlTmFtZXNwYWNlSW1wbChXZWJD
b3JlOjpTdG9yYWdlTmFtZXNwYWNlSW1wbDo6bG9jYWxTdG9yYWdlTmFtZXNwYWNlKHBhdGgsIHF1
b3RhKSk7Cit9CisKK1dlYlN0b3JhZ2VOYW1lc3BhY2UqIFdlYlN0b3JhZ2VOYW1lc3BhY2U6OmNy
ZWF0ZVNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKCkKK3sKKyAgICByZXR1cm4gbmV3IFdlYlN0b3Jh
Z2VOYW1lc3BhY2VJbXBsKFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpzZXNzaW9uU3Rv
cmFnZU5hbWVzcGFjZSgpKTsKK30KKworV2ViU3RvcmFnZU5hbWVzcGFjZUltcGw6OldlYlN0b3Jh
Z2VOYW1lc3BhY2VJbXBsKFBhc3NSZWZQdHI8V2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZT4gc3Rv
cmFnZU5hbWVzcGFjZSkKKyAgICA6IG1fc3RvcmFnZU5hbWVzcGFjZShzdG9yYWdlTmFtZXNwYWNl
KQoreworfQorCitXZWJTdG9yYWdlTmFtZXNwYWNlSW1wbDo6fldlYlN0b3JhZ2VOYW1lc3BhY2VJ
bXBsKCkKK3sKK30KKworV2ViU3RvcmFnZUFyZWEqIFdlYlN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpj
cmVhdGVTdG9yYWdlQXJlYShjb25zdCBXZWJTdHJpbmcmIG9yaWdpblN0cmluZykKK3sKKyAgICBS
ZWZQdHI8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+IG9yaWdpbiA9IFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luOjpjcmVhdGVGcm9tU3RyaW5nKG9yaWdpblN0cmluZyk7CisgICAgcmV0dXJuIG5ldyBX
ZWJTdG9yYWdlQXJlYUltcGwobV9zdG9yYWdlTmFtZXNwYWNlLT5zdG9yYWdlQXJlYShvcmlnaW4u
cmVsZWFzZSgpKSk7Cit9CisKK1dlYlN0b3JhZ2VOYW1lc3BhY2UqIFdlYlN0b3JhZ2VOYW1lc3Bh
Y2VJbXBsOjpjb3B5KCkKK3sKKyAgICByZXR1cm4gbmV3IFdlYlN0b3JhZ2VOYW1lc3BhY2VJbXBs
KG1fc3RvcmFnZU5hbWVzcGFjZS0+Y29weSgpKTsKK30KKwordm9pZCBXZWJTdG9yYWdlTmFtZXNw
YWNlSW1wbDo6Y2xvc2UoKQoreworICAgIG1fc3RvcmFnZU5hbWVzcGFjZS0+Y2xvc2UoKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoRE9NX1NUT1JBR0Up
CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlN0b3JhZ2VOYW1lc3BhY2VJbXBs
LmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlN0b3JhZ2VOYW1lc3BhY2VJbXBsLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU4MmMyMQotLS0gL2Rldi9udWxsCisrKyBi
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU3RvcmFnZU5hbWVzcGFjZUltcGwuaApAQCAtMCwwICsx
LDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBXZWJTdG9yYWdlTmFtZXNwYWNlSW1wbF9oCisjZGVmaW5lIFdlYlN0b3Jh
Z2VOYW1lc3BhY2VJbXBsX2gKKworI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKworI2luY2x1ZGUg
IlN0b3JhZ2VOYW1lc3BhY2VJbXBsLmgiCisjaW5jbHVkZSAiV2ViU3RvcmFnZU5hbWVzcGFjZS5o
IgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViU3RvcmFnZU5hbWVzcGFjZUltcGwg
OiBwdWJsaWMgV2ViU3RvcmFnZU5hbWVzcGFjZSB7CitwdWJsaWM6CisgICAgV2ViU3RvcmFnZU5h
bWVzcGFjZUltcGwoUGFzc1JlZlB0cjxXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlPiBzdG9yYWdl
TmFtZXNwYWNlKTsKKyAgICB2aXJ0dWFsIH5XZWJTdG9yYWdlTmFtZXNwYWNlSW1wbCgpOworICAg
IHZpcnR1YWwgV2ViU3RvcmFnZUFyZWEqIGNyZWF0ZVN0b3JhZ2VBcmVhKGNvbnN0IFdlYlN0cmlu
ZyYgb3JpZ2luKTsKKyAgICB2aXJ0dWFsIFdlYlN0b3JhZ2VOYW1lc3BhY2UqIGNvcHkoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgY2xvc2UoKTsKKworcHJpdmF0ZToKKyAgICBSZWZQdHI8V2ViQ29yZTo6
U3RvcmFnZU5hbWVzcGFjZT4gbV9zdG9yYWdlTmFtZXNwYWNlOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoRE9NX1NUT1JBR0UpCisKKyNlbmRpZiAvLyBX
ZWJTdG9yYWdlTmFtZXNwYWNlSW1wbF9o
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42826</attachid>
            <date>2009-11-09 18:22:49 -0800</date>
            <delta_ts>2009-11-10 10:04:51 -0800</delta_ts>
            <desc>Up-streaming Chromium API src files: WebString...WebViewImpl</desc>
            <filename>bug-31276-20091109182247.patch</filename>
            <type>text/plain</type>
            <size>119492</size>
            <attacher name="Yaar Schnitman">yaar</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IGQ4Y2U1NzguLjg4Y2VhMDcgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMiw2ICsy
LDIxNCBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgogCisgICAgICAg
IFVwLXN0cmVhbWluZyBDaHJvbWl1bSBBUEkgc3JjIGZpbGVzOiBXZWJTdHJpbmcuLi5XZWJWaWV3
SW1wbAorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0z
MTI3NgorCisgICAgICAgICogc3JjL1dlYlN0cmluZy5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
S2l0OjpXZWJTdHJpbmc6OnJlc2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViU3RyaW5nOjphc3Np
Z24pOgorICAgICAgICAoV2ViS2l0OjpXZWJTdHJpbmc6Omxlbmd0aCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlN0cmluZzo6ZGF0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYlN0cmluZzo6dXRmOCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlN0cmluZzo6ZnJvbVVURjgpOgorICAgICAgICAoV2ViS2l0
OjpXZWJTdHJpbmc6OldlYlN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlN0cmluZzo6b3Bl
cmF0b3I9KToKKyAgICAgICAgKFdlYktpdDo6V2ViU3RyaW5nOjpvcGVyYXRvciBXZWJDb3JlOjpT
dHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJTdHJpbmc6Om9wZXJhdG9yIFdlYkNvcmU6OkF0
b21pY1N0cmluZyk6CisgICAgICAgICogc3JjL1dlYlVSTC5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViS2l0OjpXZWJVUkw6OldlYlVSTCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTDo6b3BlcmF0
b3I9KToKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMOjpvcGVyYXRvciBXZWJDb3JlOjpLVVJMKToK
KyAgICAgICAgKiBzcmMvV2ViVVJMRXJyb3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6
V2ViVVJMRXJyb3I6OldlYlVSTEVycm9yKToKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMRXJyb3I6
Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTEVycm9yOjpvcGVyYXRvciBSZXNv
dXJjZUVycm9yKToKKyAgICAgICAgKiBzcmMvV2ViVVJMUmVxdWVzdC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViS2l0OjpXZWJVUkxSZXF1ZXN0UHJpdmF0ZUltcGw6OldlYlVSTFJlcXVlc3RQcml2
YXRlSW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJlcXVlc3RQcml2YXRlSW1wbDo6ZGlz
cG9zZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJlcXVlc3Q6OmluaXRpYWxpemUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJVUkxSZXF1ZXN0OjpyZXNldCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlVSTFJlcXVlc3Q6OmFzc2lnbik6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJlcXVlc3Q6Omlz
TnVsbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJlcXVlc3Q6OnVybCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlVSTFJlcXVlc3Q6OnNldFVSTCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJl
cXVlc3Q6OmZpcnN0UGFydHlGb3JDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVx
dWVzdDo6c2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxS
ZXF1ZXN0OjphbGxvd0Nvb2tpZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXF1ZXN0Ojpz
ZXRBbGxvd0Nvb2tpZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXF1ZXN0OjphbGxvd1N0
b3JlZENyZWRlbnRpYWxzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVxdWVzdDo6c2V0QWxs
b3dTdG9yZWRDcmVkZW50aWFscyk6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJlcXVlc3Q6OmNh
Y2hlUG9saWN5KToKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVxdWVzdDo6c2V0Q2FjaGVQb2xp
Y3kpOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXF1ZXN0OjpodHRwTWV0aG9kKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVVJMUmVxdWVzdDo6c2V0SFRUUE1ldGhvZCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlVSTFJlcXVlc3Q6Omh0dHBIZWFkZXJGaWVsZCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlVSTFJlcXVlc3Q6OnNldEhUVFBIZWFkZXJGaWVsZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVS
TFJlcXVlc3Q6OmFkZEhUVFBIZWFkZXJGaWVsZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJl
cXVlc3Q6OmNsZWFySFRUUEhlYWRlckZpZWxkKToKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVx
dWVzdDo6dmlzaXRIVFRQSGVhZGVyRmllbGRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVx
dWVzdDo6aHR0cEJvZHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXF1ZXN0OjpzZXRIVFRQ
Qm9keSk6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJlcXVlc3Q6OnJlcG9ydFVwbG9hZFByb2dy
ZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVxdWVzdDo6c2V0UmVwb3J0VXBsb2FkUHJv
Z3Jlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXF1ZXN0Ojp0YXJnZXRUeXBlKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVVJMUmVxdWVzdDo6c2V0VGFyZ2V0VHlwZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlVSTFJlcXVlc3Q6OnJlcXVlc3RvcklEKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
VVJMUmVxdWVzdDo6c2V0UmVxdWVzdG9ySUQpOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXF1
ZXN0OjpyZXF1ZXN0b3JQcm9jZXNzSUQpOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXF1ZXN0
OjpzZXRSZXF1ZXN0b3JQcm9jZXNzSUQpOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXF1ZXN0
OjphcHBDYWNoZUhvc3RJRCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJlcXVlc3Q6OnNldEFw
cENhY2hlSG9zdElEKToKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVxdWVzdDo6dG9NdXRhYmxl
UmVzb3VyY2VSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVxdWVzdDo6dG9SZXNv
dXJjZVJlcXVlc3QpOgorICAgICAgICAqIHNyYy9XZWJVUkxSZXF1ZXN0UHJpdmF0ZS5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVxdWVzdFByaXZhdGU6OldlYlVSTFJlcXVlc3RQ
cml2YXRlKToKKyAgICAgICAgKiBzcmMvV2ViVVJMUmVzcG9uc2UuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6V2ViVVJMUmVzcG9uc2VQcml2YXRlSW1wbDo6V2ViVVJMUmVzcG9uc2VQcml2
YXRlSW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJlc3BvbnNlUHJpdmF0ZUltcGw6OmRp
c3Bvc2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXNwb25zZTo6aW5pdGlhbGl6ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlVSTFJlc3BvbnNlOjpyZXNldCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlVSTFJlc3BvbnNlOjphc3NpZ24pOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXNwb25z
ZTo6aXNOdWxsKToKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVzcG9uc2U6OnVybCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlVSTFJlc3BvbnNlOjpzZXRVUkwpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJVUkxSZXNwb25zZTo6bWltZVR5cGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXNwb25z
ZTo6c2V0TUlNRVR5cGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXNwb25zZTo6ZXhwZWN0
ZWRDb250ZW50TGVuZ3RoKToKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVzcG9uc2U6OnNldEV4
cGVjdGVkQ29udGVudExlbmd0aCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJlc3BvbnNlOjp0
ZXh0RW5jb2RpbmdOYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVzcG9uc2U6OnNldFRl
eHRFbmNvZGluZ05hbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXNwb25zZTo6c3VnZ2Vz
dGVkRmlsZU5hbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXNwb25zZTo6c2V0U3VnZ2Vz
dGVkRmlsZU5hbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXNwb25zZTo6aHR0cFN0YXR1
c0NvZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXNwb25zZTo6c2V0SFRUUFN0YXR1c0Nv
ZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXNwb25zZTo6aHR0cFN0YXR1c1RleHQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXNwb25zZTo6c2V0SFRUUFN0YXR1c1RleHQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJVUkxSZXNwb25zZTo6aHR0cEhlYWRlckZpZWxkKToKKyAgICAgICAg
KFdlYktpdDo6V2ViVVJMUmVzcG9uc2U6OnNldEhUVFBIZWFkZXJGaWVsZCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlVSTFJlc3BvbnNlOjphZGRIVFRQSGVhZGVyRmllbGQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJVUkxSZXNwb25zZTo6Y2xlYXJIVFRQSGVhZGVyRmllbGQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJVUkxSZXNwb25zZTo6dmlzaXRIVFRQSGVhZGVyRmllbGRzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVVJMUmVzcG9uc2U6Omxhc3RNb2RpZmllZERhdGUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJVUkxSZXNwb25zZTo6c2V0TGFzdE1vZGlmaWVkRGF0ZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYlVSTFJlc3BvbnNlOjppc0NvbnRlbnRGaWx0ZXJlZCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlVSTFJlc3BvbnNlOjpzZXRJc0NvbnRlbnRGaWx0ZXJlZCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlVSTFJlc3BvbnNlOjphcHBDYWNoZUlEKToKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVzcG9u
c2U6OnNldEFwcENhY2hlSUQpOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXNwb25zZTo6YXBw
Q2FjaGVNYW5pZmVzdFVSTCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJlc3BvbnNlOjpzZXRB
cHBDYWNoZU1hbmlmZXN0VVJMKToKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVzcG9uc2U6OnNl
Y3VyaXR5SW5mbyk6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJlc3BvbnNlOjpzZXRTZWN1cml0
eUluZm8pOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXNwb25zZTo6dG9NdXRhYmxlUmVzb3Vy
Y2VSZXNwb25zZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJlc3BvbnNlOjp0b1Jlc291cmNl
UmVzcG9uc2UpOgorICAgICAgICAqIHNyYy9XZWJVUkxSZXNwb25zZVByaXZhdGUuaDogQWRkZWQu
CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJlc3BvbnNlUHJpdmF0ZTo6V2ViVVJMUmVzcG9uc2VQ
cml2YXRlKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYktpdDo6KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlldzo6dXBkYXRlVmlzaXRlZExpbmtTdGF0ZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZXc6OnJlc2V0VmlzaXRlZExpbmtTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXdJbXBsOjppbml0aWFsaXplTWFpbkZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmll
d0ltcGw6OldlYlZpZXdJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6On5XZWJW
aWV3SW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjp0aGVtZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZXdJbXBsOjptYWluRnJhbWVJbXBsKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlld0ltcGw6OnRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZXdJbXBsOjpzZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6bW91c2VNb3ZlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlld0ltcGw6Om1vdXNlTGVhdmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6bW91
c2VEb3duKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6Om1vdXNlQ29udGV4dE1lbnUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6bW91c2VVcCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZXdJbXBsOjptb3VzZVdoZWVsKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0lt
cGw6OmtleUV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmF1dG9jb21wbGV0
ZUhhbmRsZUtleUV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNoYXJFdmVu
dCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZW5kQ29udGV4dE1lbnVFdmVudCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjprZXlFdmVudERlZmF1bHQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2Nyb2xsVmlld1dpdGhLZXlib2FyZCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZXdJbXBsOjpwcm9wYWdhdGVTY3JvbGwpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWV3SW1wbDo6Zm9jdXNlZFdlYkNvcmVGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXdJbXBsOjpmcm9tUGFnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpjbG9z
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpyZXNpemUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3SW1wbDo6bGF5b3V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6
OnBhaW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmhhbmRsZUlucHV0RXZlbnQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6bW91c2VDYXB0dXJlTG9zdCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRGb2N1cyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXdJbXBsOjpoYW5kbGVDb21wb3NpdGlvbkV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlld0ltcGw6OnF1ZXJ5Q29tcG9zaXRpb25TdGF0dXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3SW1wbDo6c2V0VGV4dERpcmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBs
OjpzZXR0aW5ncyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpwYWdlRW5jb2Rpbmcp
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0UGFnZUVuY29kaW5nKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmRpc3BhdGNoQmVmb3JlVW5sb2FkRXZlbnQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6ZGlzcGF0Y2hVbmxvYWRFdmVudCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZXdJbXBsOjptYWluRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3SW1wbDo6ZmluZEZyYW1lQnlOYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6
OmZvY3VzZWRGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRGb2N1c2Vk
RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0SW5pdGlhbEZvY3VzKToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNsZWFyRm9jdXNlZE5vZGUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6em9vbUluKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmll
d0ltcGw6Onpvb21PdXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6em9vbURlZmF1
bHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6cGVyZm9ybU1lZGlhUGxheWVyQWN0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNvcHlJbWFnZUF0KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmRyYWdTb3VyY2VFbmRlZEF0KToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlld0ltcGw6OmRyYWdTb3VyY2VNb3ZlZFRvKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlld0ltcGw6OmRyYWdTb3VyY2VTeXN0ZW1EcmFnRW5kZWQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWV3SW1wbDo6ZHJhZ1RhcmdldERyYWdFbnRlcik6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXdJbXBsOjpkcmFnVGFyZ2V0RHJhZ092ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
SW1wbDo6ZHJhZ1RhcmdldERyYWdMZWF2ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBs
OjpkcmFnVGFyZ2V0RHJvcCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpkcmFnSWRl
bnRpdHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6aW5zcGVjdEVsZW1lbnRBdCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjppbnNwZWN0b3JTZXR0aW5ncyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRJbnNwZWN0b3JTZXR0aW5ncyk6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZXdJbXBsOjpkZXZUb29sc0FnZW50KToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlld0ltcGw6OnNldERldlRvb2xzQWdlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
SW1wbDo6YWNjZXNzaWJpbGl0eU9iamVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBs
OjphcHBseUF1dG9maWxsU3VnZ2VzdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1w
bDo6aGlkZUF1dG9maWxsUG9wdXApOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0
RHJvcEVmZmVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRJc1RyYW5zcGFy
ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmlzVHJhbnNwYXJlbnQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0SXNBY3RpdmUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWV3SW1wbDo6aXNBY3RpdmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6
ZGlkQ29tbWl0TG9hZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpuYXZpZ2F0aW9u
UG9saWN5RnJvbU1vdXNlRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c3Rh
cnREcmFnZ2luZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRDdXJyZW50SGlz
dG9yeUl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6cHJldmlvdXNIaXN0b3J5
SXRlbSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpvYnNlcnZlTmV3TmF2aWdhdGlv
bik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpoaWRlQXV0b0NvbXBsZXRlUG9wdXAp
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6YXV0b0NvbXBsZXRlUG9wdXBEaWRIaWRl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldElnbm9yZUlucHV0RXZlbnRzKToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6Om5vdGlmaWNhdGlvblByZXNlbnRlckltcGwp
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6cmVmcmVzaEF1dG9maWxsUG9wdXApOgor
ICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Zm9jdXNlZFdlYkNvcmVOb2RlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmhpdFRlc3RSZXN1bHRGb3JXaW5kb3dQb3MpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0VGFic1RvTGlua3MpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3SW1wbDo6dGFic1RvTGlua3MpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1w
bC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNpemUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6ZGV2VG9vbHNBZ2VudFByaXZhdGUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3SW1wbDo6bGFzdE1vdXNlRG93blBvaW50KToKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlld0ltcGw6OmNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpw
YWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNvbnRleHRNZW51QWxsb3dlZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRJbml0aWFsTmF2aWdhdGlvblBvbGlj
eSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjppbml0aWFsTmF2aWdhdGlvblBvbGlj
eSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpjdXJyZW50SW5wdXRFdmVudCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjopOgorCisyMDA5LTExLTA5ICBZYWFyIFNjaG5p
dG1hbiAgPHlhYXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCiAgICAgICAgIFVwLXN0cmVhbWluZyBDaHJvbWl1bSBBUEkgc3JjIGZpbGVzOiBX
ZWJTY3JpcHRDb250cm9sbGVyLi4uV2ViU3RvcmFnZU5hbWVzcGFjZUltcGwKIAogICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzEyNzYKZGlmZiAtLWdpdCBh
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU3RyaW5nLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViU3RyaW5nLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDVlMDVm
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTdHJpbmcuY3BwCkBA
IC0wLDAgKzEsMTM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlN0cmluZy5o
IgorCisjaW5jbHVkZSAiQXRvbWljU3RyaW5nLmgiCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKKyNpbmNsdWRlICJXZWJDU3RyaW5nLmgiCisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJTdHJpbmdQcml2YXRlIDogcHVibGljIFdlYkNv
cmU6OlN0cmluZ0ltcGwgeworfTsKKwordm9pZCBXZWJTdHJpbmc6OnJlc2V0KCkKK3sKKyAgICBp
ZiAobV9wcml2YXRlKSB7CisgICAgICAgIG1fcHJpdmF0ZS0+ZGVyZWYoKTsKKyAgICAgICAgbV9w
cml2YXRlID0gMDsKKyAgICB9Cit9CisKK3ZvaWQgV2ViU3RyaW5nOjphc3NpZ24oY29uc3QgV2Vi
U3RyaW5nJiBvdGhlcikKK3sKKyAgICBhc3NpZ24oY29uc3RfY2FzdDxXZWJTdHJpbmdQcml2YXRl
Kj4ob3RoZXIubV9wcml2YXRlKSk7Cit9CisKK3ZvaWQgV2ViU3RyaW5nOjphc3NpZ24oY29uc3Qg
V2ViVUNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpCit7CisgICAgYXNzaWduKHN0YXRpY19jYXN0
PFdlYlN0cmluZ1ByaXZhdGUqPigKKyAgICAgICAgV2ViQ29yZTo6U3RyaW5nSW1wbDo6Y3JlYXRl
KGRhdGEsIGxlbmd0aCkuZ2V0KCkpKTsKK30KKworc2l6ZV90IFdlYlN0cmluZzo6bGVuZ3RoKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlID8gY29uc3RfY2FzdDxXZWJTdHJpbmdQcml2
YXRlKj4obV9wcml2YXRlKS0+bGVuZ3RoKCkgOiAwOworfQorCitjb25zdCBXZWJVQ2hhciogV2Vi
U3RyaW5nOjpkYXRhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlID8gY29uc3RfY2Fz
dDxXZWJTdHJpbmdQcml2YXRlKj4obV9wcml2YXRlKS0+Y2hhcmFjdGVycygpIDogMDsKK30KKwor
V2ViQ1N0cmluZyBXZWJTdHJpbmc6OnV0ZjgoKSBjb25zdAoreworICAgIHJldHVybiBXZWJDb3Jl
OjpTdHJpbmcobV9wcml2YXRlKS51dGY4KCk7Cit9CisKK1dlYlN0cmluZyBXZWJTdHJpbmc6OmZy
b21VVEY4KGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpCit7CisgICAgcmV0dXJuIFdl
YkNvcmU6OlN0cmluZzo6ZnJvbVVURjgoZGF0YSwgbGVuZ3RoKTsKK30KKworV2ViU3RyaW5nIFdl
YlN0cmluZzo6ZnJvbVVURjgoY29uc3QgY2hhciogZGF0YSkKK3sKKyAgICByZXR1cm4gV2ViQ29y
ZTo6U3RyaW5nOjpmcm9tVVRGOChkYXRhKTsKK30KKworV2ViU3RyaW5nOjpXZWJTdHJpbmcoY29u
c3QgV2ViQ29yZTo6U3RyaW5nJiBzKQorICAgIDogbV9wcml2YXRlKHN0YXRpY19jYXN0PFdlYlN0
cmluZ1ByaXZhdGUqPihzLmltcGwoKSkpCit7CisgICAgaWYgKG1fcHJpdmF0ZSkKKyAgICAgICAg
bV9wcml2YXRlLT5yZWYoKTsKK30KKworV2ViU3RyaW5nJiBXZWJTdHJpbmc6Om9wZXJhdG9yPShj
b25zdCBXZWJDb3JlOjpTdHJpbmcmIHMpCit7CisgICAgYXNzaWduKHN0YXRpY19jYXN0PFdlYlN0
cmluZ1ByaXZhdGUqPihzLmltcGwoKSkpOworICAgIHJldHVybiAqdGhpczsKK30KKworV2ViU3Ry
aW5nOjpvcGVyYXRvciBXZWJDb3JlOjpTdHJpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX3By
aXZhdGU7Cit9CisKK1dlYlN0cmluZzo6V2ViU3RyaW5nKGNvbnN0IFdlYkNvcmU6OkF0b21pY1N0
cmluZyYgcykKKyAgICA6IG1fcHJpdmF0ZSgwKQoreworICAgIGFzc2lnbihzLnN0cmluZygpKTsK
K30KKworV2ViU3RyaW5nJiBXZWJTdHJpbmc6Om9wZXJhdG9yPShjb25zdCBXZWJDb3JlOjpBdG9t
aWNTdHJpbmcmIHMpCit7CisgICAgYXNzaWduKHMuc3RyaW5nKCkpOworICAgIHJldHVybiAqdGhp
czsKK30KKworV2ViU3RyaW5nOjpvcGVyYXRvciBXZWJDb3JlOjpBdG9taWNTdHJpbmcoKSBjb25z
dAoreworICAgIHJldHVybiBXZWJDb3JlOjpBdG9taWNTdHJpbmcoc3RhdGljX2Nhc3Q8V2ViQ29y
ZTo6U3RyaW5nSW1wbCAqPihtX3ByaXZhdGUpKTsKK30KKwordm9pZCBXZWJTdHJpbmc6OmFzc2ln
bihXZWJTdHJpbmdQcml2YXRlKiBwKQoreworICAgIC8vIFRha2UgY2FyZSB0byBoYW5kbGUgdGhl
IGNhc2Ugd2hlcmUgbV9wcml2YXRlID09IHAKKyAgICBpZiAocCkKKyAgICAgICAgcC0+cmVmKCk7
CisgICAgaWYgKG1fcHJpdmF0ZSkKKyAgICAgICAgbV9wcml2YXRlLT5kZXJlZigpOworICAgIG1f
cHJpdmF0ZSA9IHA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJVUkwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkwu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlYjkyYzEKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlVSTC5jcHAKQEAgLTAsMCArMSw1OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAor
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJVUkwuaCIKKworI2luY2x1ZGUg
IktVUkwuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYlVSTDo6V2ViVVJMKGNvbnN0IFdl
YkNvcmU6OktVUkwmIHVybCkKKyAgICA6IG1fc3BlYyh1cmwudXRmOFN0cmluZygpKQorICAgICwg
bV9wYXJzZWQodXJsLnBhcnNlZCgpKQorICAgICwgbV9pc1ZhbGlkKHVybC5pc1ZhbGlkKCkpCit7
Cit9CisKK1dlYlVSTCYgV2ViVVJMOjpvcGVyYXRvcj0oY29uc3QgV2ViQ29yZTo6S1VSTCYgdXJs
KQoreworICAgIG1fc3BlYyA9IHVybC51dGY4U3RyaW5nKCk7CisgICAgbV9wYXJzZWQgPSB1cmwu
cGFyc2VkKCk7CisgICAgbV9pc1ZhbGlkID0gdXJsLmlzVmFsaWQoKTsKKyAgICByZXR1cm4gKnRo
aXM7Cit9CisKK1dlYlVSTDo6b3BlcmF0b3IgV2ViQ29yZTo6S1VSTCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIFdlYkNvcmU6OktVUkwobV9zcGVjLCBtX3BhcnNlZCwgbV9pc1ZhbGlkKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlVSTEVycm9yLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVVJMRXJyb3IuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMzhhZWUKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlVSTEVycm9yLmNwcApAQCAtMCwwICsxLDY5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlVSTEVycm9yLmgiCisKKyNpbmNsdWRlICJD
U3RyaW5nLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIK
KwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJV
UkxFcnJvcjo6V2ViVVJMRXJyb3IoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCit7CisgICAg
KnRoaXMgPSBlcnJvcjsKK30KKworV2ViVVJMRXJyb3ImIFdlYlVSTEVycm9yOjpvcGVyYXRvcj0o
Y29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCit7CisgICAgaWYgKGVycm9yLmlzTnVsbCgpKQor
ICAgICAgICAqdGhpcyA9IFdlYlVSTEVycm9yKCk7CisgICAgZWxzZSB7CisgICAgICAgIGRvbWFp
biA9IGVycm9yLmRvbWFpbigpOworICAgICAgICByZWFzb24gPSBlcnJvci5lcnJvckNvZGUoKTsK
KyAgICAgICAgdW5yZWFjaGFibGVVUkwgPSBLVVJMKFBhcnNlZFVSTFN0cmluZywgZXJyb3IuZmFp
bGluZ1VSTCgpKTsKKyAgICB9CisgICAgcmV0dXJuICp0aGlzOworfQorCitXZWJVUkxFcnJvcjo6
b3BlcmF0b3IgUmVzb3VyY2VFcnJvcigpIGNvbnN0Cit7CisgICAgaWYgKCFyZWFzb24pCisgICAg
ICAgIHJldHVybiBSZXNvdXJjZUVycm9yKCk7CisgICAgQ1N0cmluZyBzcGVjID0gdW5yZWFjaGFi
bGVVUkwuc3BlYygpOworICAgIHJldHVybiBSZXNvdXJjZUVycm9yKGRvbWFpbiwgcmVhc29uLAor
ICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzo6ZnJvbVVURjgoc3BlYy5kYXRhKCksIHNw
ZWMubGVuZ3RoKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZygpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlVSTFJlcXVlc3QuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXF1ZXN0LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmZhODQyCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXF1ZXN0LmNwcApAQCAtMCwwICsxLDI2
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJVUkxSZXF1ZXN0LmgiCisKKyNp
bmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKworI2luY2x1ZGUgIldlYkhUVFBCb2R5LmgiCisj
aW5jbHVkZSAiV2ViSFRUUEhlYWRlclZpc2l0b3IuaCIKKyNpbmNsdWRlICJXZWJVUkwuaCIKKyNp
bmNsdWRlICJXZWJVUkxSZXF1ZXN0UHJpdmF0ZS5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKKy8vIFRoZSBzdGFuZGFyZCBpbXBsZW1lbnRhdGlv
biBvZiBXZWJVUkxSZXF1ZXN0UHJpdmF0ZSwgd2hpY2ggbWFpbnRhaW5zCisvLyBvd25lcnNoaXAg
b2YgYSBSZXNvdXJjZVJlcXVlc3QgaW5zdGFuY2UuCitjbGFzcyBXZWJVUkxSZXF1ZXN0UHJpdmF0
ZUltcGwgOiBwdWJsaWMgV2ViVVJMUmVxdWVzdFByaXZhdGUgeworcHVibGljOgorICAgIFdlYlVS
TFJlcXVlc3RQcml2YXRlSW1wbCgpCisgICAgeworICAgICAgICBtX3Jlc291cmNlUmVxdWVzdCA9
ICZtX3Jlc291cmNlUmVxdWVzdEFsbG9jYXRpb247CisgICAgfQorCisgICAgV2ViVVJMUmVxdWVz
dFByaXZhdGVJbXBsKGNvbnN0IFdlYlVSTFJlcXVlc3RQcml2YXRlKiBwKQorICAgICAgICA6IG1f
cmVzb3VyY2VSZXF1ZXN0QWxsb2NhdGlvbigqcC0+bV9yZXNvdXJjZVJlcXVlc3QpCisgICAgewor
ICAgICAgICBtX3Jlc291cmNlUmVxdWVzdCA9ICZtX3Jlc291cmNlUmVxdWVzdEFsbG9jYXRpb247
CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGRpc3Bvc2UoKSB7IGRlbGV0ZSB0aGlzOyB9CisK
KyAgICBSZXNvdXJjZVJlcXVlc3QgbV9yZXNvdXJjZVJlcXVlc3RBbGxvY2F0aW9uOworfTsKKwor
dm9pZCBXZWJVUkxSZXF1ZXN0Ojppbml0aWFsaXplKCkKK3sKKyAgICBhc3NpZ24obmV3IFdlYlVS
TFJlcXVlc3RQcml2YXRlSW1wbCgpKTsKK30KKwordm9pZCBXZWJVUkxSZXF1ZXN0OjpyZXNldCgp
Cit7CisgICAgYXNzaWduKDApOworfQorCit2b2lkIFdlYlVSTFJlcXVlc3Q6OmFzc2lnbihjb25z
dCBXZWJVUkxSZXF1ZXN0JiByKQoreworICAgIGlmICgmciAhPSB0aGlzKQorICAgICAgICBhc3Np
Z24oci5tX3ByaXZhdGUgPyBuZXcgV2ViVVJMUmVxdWVzdFByaXZhdGVJbXBsKHIubV9wcml2YXRl
KSA6IDApOworfQorCitib29sIFdlYlVSTFJlcXVlc3Q6OmlzTnVsbCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuICFtX3ByaXZhdGUgfHwgbV9wcml2YXRlLT5tX3Jlc291cmNlUmVxdWVzdC0+aXNOdWxs
KCk7Cit9CisKK1dlYlVSTCBXZWJVUkxSZXF1ZXN0Ojp1cmwoKSBjb25zdAoreworICAgIHJldHVy
biBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXF1ZXN0LT51cmwoKTsKK30KKwordm9pZCBXZWJVUkxS
ZXF1ZXN0OjpzZXRVUkwoY29uc3QgV2ViVVJMJiB1cmwpCit7CisgICAgbV9wcml2YXRlLT5tX3Jl
c291cmNlUmVxdWVzdC0+c2V0VVJMKHVybCk7Cit9CisKK1dlYlVSTCBXZWJVUkxSZXF1ZXN0Ojpm
aXJzdFBhcnR5Rm9yQ29va2llcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9y
ZXNvdXJjZVJlcXVlc3QtPmZpcnN0UGFydHlGb3JDb29raWVzKCk7Cit9CisKK3ZvaWQgV2ViVVJM
UmVxdWVzdDo6c2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMoY29uc3QgV2ViVVJMJiBmaXJzdFBhcnR5
Rm9yQ29va2llcykKK3sKKyAgICBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXF1ZXN0LT5zZXRGaXJz
dFBhcnR5Rm9yQ29va2llcyhmaXJzdFBhcnR5Rm9yQ29va2llcyk7Cit9CisKK2Jvb2wgV2ViVVJM
UmVxdWVzdDo6YWxsb3dDb29raWVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5t
X3Jlc291cmNlUmVxdWVzdC0+YWxsb3dDb29raWVzKCk7Cit9CisKK3ZvaWQgV2ViVVJMUmVxdWVz
dDo6c2V0QWxsb3dDb29raWVzKGJvb2wgYWxsb3dDb29raWVzKQoreworICAgIG1fcHJpdmF0ZS0+
bV9yZXNvdXJjZVJlcXVlc3QtPnNldEFsbG93Q29va2llcyhhbGxvd0Nvb2tpZXMpOworfQorCiti
b29sIFdlYlVSTFJlcXVlc3Q6OmFsbG93U3RvcmVkQ3JlZGVudGlhbHMoKSBjb25zdAoreworICAg
IHJldHVybiBtX3ByaXZhdGUtPm1fYWxsb3dTdG9yZWRDcmVkZW50aWFsczsKK30KKwordm9pZCBX
ZWJVUkxSZXF1ZXN0OjpzZXRBbGxvd1N0b3JlZENyZWRlbnRpYWxzKGJvb2wgYWxsb3dTdG9yZWRD
cmVkZW50aWFscykKK3sKKyAgICBtX3ByaXZhdGUtPm1fYWxsb3dTdG9yZWRDcmVkZW50aWFscyA9
IGFsbG93U3RvcmVkQ3JlZGVudGlhbHM7Cit9CisKK1dlYlVSTFJlcXVlc3Q6OkNhY2hlUG9saWN5
IFdlYlVSTFJlcXVlc3Q6OmNhY2hlUG9saWN5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8V2ViVVJMUmVxdWVzdDo6Q2FjaGVQb2xpY3k+KAorICAgICAgICBtX3ByaXZhdGUtPm1f
cmVzb3VyY2VSZXF1ZXN0LT5jYWNoZVBvbGljeSgpKTsKK30KKwordm9pZCBXZWJVUkxSZXF1ZXN0
OjpzZXRDYWNoZVBvbGljeShDYWNoZVBvbGljeSBjYWNoZVBvbGljeSkKK3sKKyAgICBtX3ByaXZh
dGUtPm1fcmVzb3VyY2VSZXF1ZXN0LT5zZXRDYWNoZVBvbGljeSgKKyAgICAgICAgc3RhdGljX2Nh
c3Q8UmVzb3VyY2VSZXF1ZXN0Q2FjaGVQb2xpY3k+KGNhY2hlUG9saWN5KSk7Cit9CisKK1dlYlN0
cmluZyBXZWJVUkxSZXF1ZXN0OjpodHRwTWV0aG9kKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9w
cml2YXRlLT5tX3Jlc291cmNlUmVxdWVzdC0+aHR0cE1ldGhvZCgpOworfQorCit2b2lkIFdlYlVS
TFJlcXVlc3Q6OnNldEhUVFBNZXRob2QoY29uc3QgV2ViU3RyaW5nJiBodHRwTWV0aG9kKQorewor
ICAgIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlcXVlc3QtPnNldEhUVFBNZXRob2QoaHR0cE1ldGhv
ZCk7Cit9CisKK1dlYlN0cmluZyBXZWJVUkxSZXF1ZXN0OjpodHRwSGVhZGVyRmllbGQoY29uc3Qg
V2ViU3RyaW5nJiBuYW1lKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPm1fcmVzb3Vy
Y2VSZXF1ZXN0LT5odHRwSGVhZGVyRmllbGQobmFtZSk7Cit9CisKK3ZvaWQgV2ViVVJMUmVxdWVz
dDo6c2V0SFRUUEhlYWRlckZpZWxkKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViU3Ry
aW5nJiB2YWx1ZSkKK3sKKyAgICBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXF1ZXN0LT5zZXRIVFRQ
SGVhZGVyRmllbGQobmFtZSwgdmFsdWUpOworfQorCit2b2lkIFdlYlVSTFJlcXVlc3Q6OmFkZEhU
VFBIZWFkZXJGaWVsZChjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0cmluZyYgdmFs
dWUpCit7CisgICAgbV9wcml2YXRlLT5tX3Jlc291cmNlUmVxdWVzdC0+YWRkSFRUUEhlYWRlckZp
ZWxkKG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBXZWJVUkxSZXF1ZXN0OjpjbGVhckhUVFBIZWFk
ZXJGaWVsZChjb25zdCBXZWJTdHJpbmcmIG5hbWUpCit7CisgICAgLy8gRklYTUU6IEFkZCBhIGNs
ZWFySFRUUEhlYWRlckZpZWxkIG1ldGhvZCB0byBSZXNvdXJjZVJlcXVlc3QuCisgICAgY29uc3Qg
SFRUUEhlYWRlck1hcCYgbWFwID0gbV9wcml2YXRlLT5tX3Jlc291cmNlUmVxdWVzdC0+aHR0cEhl
YWRlckZpZWxkcygpOworICAgIGNvbnN0X2Nhc3Q8SFRUUEhlYWRlck1hcCo+KCZtYXApLT5yZW1v
dmUobmFtZSk7Cit9CisKK3ZvaWQgV2ViVVJMUmVxdWVzdDo6dmlzaXRIVFRQSGVhZGVyRmllbGRz
KFdlYkhUVFBIZWFkZXJWaXNpdG9yKiB2aXNpdG9yKSBjb25zdAoreworICAgIGNvbnN0IEhUVFBI
ZWFkZXJNYXAmIG1hcCA9IG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlcXVlc3QtPmh0dHBIZWFkZXJG
aWVsZHMoKTsKKyAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFw
LmJlZ2luKCk7IGl0ICE9IG1hcC5lbmQoKTsgKytpdCkKKyAgICAgICAgdmlzaXRvci0+dmlzaXRI
ZWFkZXIoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKK30KKworV2ViSFRUUEJvZHkgV2ViVVJMUmVx
dWVzdDo6aHR0cEJvZHkoKSBjb25zdAoreworICAgIHJldHVybiBXZWJIVFRQQm9keShtX3ByaXZh
dGUtPm1fcmVzb3VyY2VSZXF1ZXN0LT5odHRwQm9keSgpKTsKK30KKwordm9pZCBXZWJVUkxSZXF1
ZXN0OjpzZXRIVFRQQm9keShjb25zdCBXZWJIVFRQQm9keSYgaHR0cEJvZHkpCit7CisgICAgbV9w
cml2YXRlLT5tX3Jlc291cmNlUmVxdWVzdC0+c2V0SFRUUEJvZHkoaHR0cEJvZHkpOworfQorCiti
b29sIFdlYlVSTFJlcXVlc3Q6OnJlcG9ydFVwbG9hZFByb2dyZXNzKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9wcml2YXRlLT5tX3Jlc291cmNlUmVxdWVzdC0+cmVwb3J0VXBsb2FkUHJvZ3Jlc3Mo
KTsKK30KKwordm9pZCBXZWJVUkxSZXF1ZXN0OjpzZXRSZXBvcnRVcGxvYWRQcm9ncmVzcyhib29s
IHJlcG9ydFVwbG9hZFByb2dyZXNzKQoreworICAgIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlcXVl
c3QtPnNldFJlcG9ydFVwbG9hZFByb2dyZXNzKHJlcG9ydFVwbG9hZFByb2dyZXNzKTsKK30KKwor
V2ViVVJMUmVxdWVzdDo6VGFyZ2V0VHlwZSBXZWJVUkxSZXF1ZXN0Ojp0YXJnZXRUeXBlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGFyZ2V0VHlwZT4obV9wcml2YXRlLT5tX3Jl
c291cmNlUmVxdWVzdC0+dGFyZ2V0VHlwZSgpKTsKK30KKwordm9pZCBXZWJVUkxSZXF1ZXN0Ojpz
ZXRUYXJnZXRUeXBlKFRhcmdldFR5cGUgdGFyZ2V0VHlwZSkKK3sKKyAgICBtX3ByaXZhdGUtPm1f
cmVzb3VyY2VSZXF1ZXN0LT5zZXRUYXJnZXRUeXBlKAorICAgICAgICBzdGF0aWNfY2FzdDxSZXNv
dXJjZVJlcXVlc3Q6OlRhcmdldFR5cGU+KHRhcmdldFR5cGUpKTsKK30KKworaW50IFdlYlVSTFJl
cXVlc3Q6OnJlcXVlc3RvcklEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5tX3Jl
c291cmNlUmVxdWVzdC0+cmVxdWVzdG9ySUQoKTsKK30KKwordm9pZCBXZWJVUkxSZXF1ZXN0Ojpz
ZXRSZXF1ZXN0b3JJRChpbnQgcmVxdWVzdG9ySUQpCit7CisgICAgbV9wcml2YXRlLT5tX3Jlc291
cmNlUmVxdWVzdC0+c2V0UmVxdWVzdG9ySUQocmVxdWVzdG9ySUQpOworfQorCitpbnQgV2ViVVJM
UmVxdWVzdDo6cmVxdWVzdG9yUHJvY2Vzc0lEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2
YXRlLT5tX3Jlc291cmNlUmVxdWVzdC0+cmVxdWVzdG9yUHJvY2Vzc0lEKCk7Cit9CisKK3ZvaWQg
V2ViVVJMUmVxdWVzdDo6c2V0UmVxdWVzdG9yUHJvY2Vzc0lEKGludCByZXF1ZXN0b3JQcm9jZXNz
SUQpCit7CisgICAgbV9wcml2YXRlLT5tX3Jlc291cmNlUmVxdWVzdC0+c2V0UmVxdWVzdG9yUHJv
Y2Vzc0lEKHJlcXVlc3RvclByb2Nlc3NJRCk7Cit9CisKK2ludCBXZWJVUkxSZXF1ZXN0OjphcHBD
YWNoZUhvc3RJRCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJl
cXVlc3QtPmFwcENhY2hlSG9zdElEKCk7Cit9CisKK3ZvaWQgV2ViVVJMUmVxdWVzdDo6c2V0QXBw
Q2FjaGVIb3N0SUQoaW50IGFwcENhY2hlSG9zdElEKQoreworICAgIG1fcHJpdmF0ZS0+bV9yZXNv
dXJjZVJlcXVlc3QtPnNldEFwcENhY2hlSG9zdElEKGFwcENhY2hlSG9zdElEKTsKK30KKworUmVz
b3VyY2VSZXF1ZXN0JiBXZWJVUkxSZXF1ZXN0Ojp0b011dGFibGVSZXNvdXJjZVJlcXVlc3QoKQor
eworICAgIEFTU0VSVChtX3ByaXZhdGUpOworICAgIEFTU0VSVChtX3ByaXZhdGUtPm1fcmVzb3Vy
Y2VSZXF1ZXN0KTsKKworICAgIHJldHVybiAqbV9wcml2YXRlLT5tX3Jlc291cmNlUmVxdWVzdDsK
K30KKworY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBXZWJVUkxSZXF1ZXN0Ojp0b1Jlc291cmNlUmVx
dWVzdCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fcHJpdmF0ZSk7CisgICAgQVNTRVJUKG1fcHJp
dmF0ZS0+bV9yZXNvdXJjZVJlcXVlc3QpOworCisgICAgcmV0dXJuICptX3ByaXZhdGUtPm1fcmVz
b3VyY2VSZXF1ZXN0OworfQorCit2b2lkIFdlYlVSTFJlcXVlc3Q6OmFzc2lnbihXZWJVUkxSZXF1
ZXN0UHJpdmF0ZSogcCkKK3sKKyAgICAvLyBTdWJjbGFzc2VzIG1heSBjYWxsIHRoaXMgZGlyZWN0
bHkgc28gYSBzZWxmLWFzc2lnbm1lbnQgY2hlY2sgaXMgbmVlZGVkCisgICAgLy8gaGVyZSBhcyB3
ZWxsIGFzIGluIHRoZSBwdWJsaWMgYXNzaWduIG1ldGhvZC4KKyAgICBpZiAobV9wcml2YXRlID09
IHApCisgICAgICAgIHJldHVybjsKKyAgICBpZiAobV9wcml2YXRlKQorICAgICAgICBtX3ByaXZh
dGUtPmRpc3Bvc2UoKTsKKyAgICBtX3ByaXZhdGUgPSBwOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVVJMUmVxdWVzdFByaXZh
dGUuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVVJMUmVxdWVzdFByaXZhdGUuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjdjMjVmCi0tLSAvZGV2L251bGwKKysrIGIv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXF1ZXN0UHJpdmF0ZS5oCkBAIC0wLDAgKzEsNTEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIFdlYlVSTFJlcXVlc3RQcml2YXRlX2gKKyNkZWZpbmUgV2ViVVJMUmVxdWVzdFBy
aXZhdGVfaAorCituYW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIFJlc291cmNlUmVxdWVzdDsgfQor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViVVJMUmVxdWVzdFByaXZhdGUgeworcHVi
bGljOgorICAgIFdlYlVSTFJlcXVlc3RQcml2YXRlKCkgOiBtX3Jlc291cmNlUmVxdWVzdCgwKSwg
bV9hbGxvd1N0b3JlZENyZWRlbnRpYWxzKHRydWUpIHsgfQorCisgICAgLy8gQ2FsbGVkIGJ5IFdl
YlVSTFJlcXVlc3Qgd2hlbiBpdCBubyBsb25nZXIgbmVlZHMgdGhpcyBvYmplY3QuCisgICAgdmly
dHVhbCB2b2lkIGRpc3Bvc2UoKSA9IDA7CisKKyAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qq
IG1fcmVzb3VyY2VSZXF1ZXN0OworICAgIGJvb2wgbV9hbGxvd1N0b3JlZENyZWRlbnRpYWxzOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJVUkxSZXNwb25zZS5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlVSTFJlc3BvbnNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWYw
N2Y5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXNwb25z
ZS5jcHAKQEAgLTAsMCArMSwyNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2Vi
VVJMUmVzcG9uc2UuaCIKKworI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKKworI2luY2x1
ZGUgIldlYkhUVFBIZWFkZXJWaXNpdG9yLmgiCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisjaW5j
bHVkZSAiV2ViVVJMLmgiCisjaW5jbHVkZSAiV2ViVVJMUmVzcG9uc2VQcml2YXRlLmgiCisKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworLy8gVGhlIHN0
YW5kYXJkIGltcGxlbWVudGF0aW9uIG9mIFdlYlVSTFJlc3BvbnNlUHJpdmF0ZSwgd2hpY2ggbWFp
bnRhaW5zCisvLyBvd25lcnNoaXAgb2YgYSBSZXNvdXJjZVJlc3BvbnNlIGluc3RhbmNlLgorY2xh
c3MgV2ViVVJMUmVzcG9uc2VQcml2YXRlSW1wbCA6IHB1YmxpYyBXZWJVUkxSZXNwb25zZVByaXZh
dGUgeworcHVibGljOgorICAgIFdlYlVSTFJlc3BvbnNlUHJpdmF0ZUltcGwoKQorICAgIHsKKyAg
ICAgICAgbV9yZXNvdXJjZVJlc3BvbnNlID0gJm1fcmVzb3VyY2VSZXNwb25zZUFsbG9jYXRpb247
CisgICAgfQorCisgICAgV2ViVVJMUmVzcG9uc2VQcml2YXRlSW1wbChjb25zdCBXZWJVUkxSZXNw
b25zZVByaXZhdGUqIHApCisgICAgICAgIDogbV9yZXNvdXJjZVJlc3BvbnNlQWxsb2NhdGlvbigq
cC0+bV9yZXNvdXJjZVJlc3BvbnNlKQorICAgIHsKKyAgICAgICAgbV9yZXNvdXJjZVJlc3BvbnNl
ID0gJm1fcmVzb3VyY2VSZXNwb25zZUFsbG9jYXRpb247CisgICAgfQorCisgICAgdmlydHVhbCB2
b2lkIGRpc3Bvc2UoKSB7IGRlbGV0ZSB0aGlzOyB9CisKKyAgICBSZXNvdXJjZVJlc3BvbnNlIG1f
cmVzb3VyY2VSZXNwb25zZUFsbG9jYXRpb247Cit9OworCit2b2lkIFdlYlVSTFJlc3BvbnNlOjpp
bml0aWFsaXplKCkKK3sKKyAgICBhc3NpZ24obmV3IFdlYlVSTFJlc3BvbnNlUHJpdmF0ZUltcGwo
KSk7Cit9CisKK3ZvaWQgV2ViVVJMUmVzcG9uc2U6OnJlc2V0KCkKK3sKKyAgICBhc3NpZ24oMCk7
Cit9CisKK3ZvaWQgV2ViVVJMUmVzcG9uc2U6OmFzc2lnbihjb25zdCBXZWJVUkxSZXNwb25zZSYg
cikKK3sKKyAgICBpZiAoJnIgIT0gdGhpcykKKyAgICAgICAgYXNzaWduKHIubV9wcml2YXRlID8g
bmV3IFdlYlVSTFJlc3BvbnNlUHJpdmF0ZUltcGwoci5tX3ByaXZhdGUpIDogMCk7Cit9CisKK2Jv
b2wgV2ViVVJMUmVzcG9uc2U6OmlzTnVsbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX3ByaXZh
dGUgfHwgbV9wcml2YXRlLT5tX3Jlc291cmNlUmVzcG9uc2UtPmlzTnVsbCgpOworfQorCitXZWJV
UkwgV2ViVVJMUmVzcG9uc2U6OnVybCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+
bV9yZXNvdXJjZVJlc3BvbnNlLT51cmwoKTsKK30KKwordm9pZCBXZWJVUkxSZXNwb25zZTo6c2V0
VVJMKGNvbnN0IFdlYlVSTCYgdXJsKQoreworICAgIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlc3Bv
bnNlLT5zZXRVUkwodXJsKTsKK30KKworV2ViU3RyaW5nIFdlYlVSTFJlc3BvbnNlOjptaW1lVHlw
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlc3BvbnNlLT5t
aW1lVHlwZSgpOworfQorCit2b2lkIFdlYlVSTFJlc3BvbnNlOjpzZXRNSU1FVHlwZShjb25zdCBX
ZWJTdHJpbmcmIG1pbWVUeXBlKQoreworICAgIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlc3BvbnNl
LT5zZXRNaW1lVHlwZShtaW1lVHlwZSk7Cit9CisKK2xvbmcgbG9uZyBXZWJVUkxSZXNwb25zZTo6
ZXhwZWN0ZWRDb250ZW50TGVuZ3RoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5t
X3Jlc291cmNlUmVzcG9uc2UtPmV4cGVjdGVkQ29udGVudExlbmd0aCgpOworfQorCit2b2lkIFdl
YlVSTFJlc3BvbnNlOjpzZXRFeHBlY3RlZENvbnRlbnRMZW5ndGgobG9uZyBsb25nIGV4cGVjdGVk
Q29udGVudExlbmd0aCkKK3sKKyAgICBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXNwb25zZS0+c2V0
RXhwZWN0ZWRDb250ZW50TGVuZ3RoKGV4cGVjdGVkQ29udGVudExlbmd0aCk7Cit9CisKK1dlYlN0
cmluZyBXZWJVUkxSZXNwb25zZTo6dGV4dEVuY29kaW5nTmFtZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlc3BvbnNlLT50ZXh0RW5jb2RpbmdOYW1lKCk7Cit9
CisKK3ZvaWQgV2ViVVJMUmVzcG9uc2U6OnNldFRleHRFbmNvZGluZ05hbWUoY29uc3QgV2ViU3Ry
aW5nJiB0ZXh0RW5jb2RpbmdOYW1lKQoreworICAgIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlc3Bv
bnNlLT5zZXRUZXh0RW5jb2RpbmdOYW1lKHRleHRFbmNvZGluZ05hbWUpOworfQorCitXZWJTdHJp
bmcgV2ViVVJMUmVzcG9uc2U6OnN1Z2dlc3RlZEZpbGVOYW1lKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9wcml2YXRlLT5tX3Jlc291cmNlUmVzcG9uc2UtPnN1Z2dlc3RlZEZpbGVuYW1lKCk7Cit9
CisKK3ZvaWQgV2ViVVJMUmVzcG9uc2U6OnNldFN1Z2dlc3RlZEZpbGVOYW1lKGNvbnN0IFdlYlN0
cmluZyYgc3VnZ2VzdGVkRmlsZU5hbWUpCit7CisgICAgbV9wcml2YXRlLT5tX3Jlc291cmNlUmVz
cG9uc2UtPnNldFN1Z2dlc3RlZEZpbGVuYW1lKHN1Z2dlc3RlZEZpbGVOYW1lKTsKK30KKworaW50
IFdlYlVSTFJlc3BvbnNlOjpodHRwU3RhdHVzQ29kZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
cHJpdmF0ZS0+bV9yZXNvdXJjZVJlc3BvbnNlLT5odHRwU3RhdHVzQ29kZSgpOworfQorCit2b2lk
IFdlYlVSTFJlc3BvbnNlOjpzZXRIVFRQU3RhdHVzQ29kZShpbnQgaHR0cFN0YXR1c0NvZGUpCit7
CisgICAgbV9wcml2YXRlLT5tX3Jlc291cmNlUmVzcG9uc2UtPnNldEhUVFBTdGF0dXNDb2RlKGh0
dHBTdGF0dXNDb2RlKTsKK30KKworV2ViU3RyaW5nIFdlYlVSTFJlc3BvbnNlOjpodHRwU3RhdHVz
VGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlc3BvbnNl
LT5odHRwU3RhdHVzVGV4dCgpOworfQorCit2b2lkIFdlYlVSTFJlc3BvbnNlOjpzZXRIVFRQU3Rh
dHVzVGV4dChjb25zdCBXZWJTdHJpbmcmIGh0dHBTdGF0dXNUZXh0KQoreworICAgIG1fcHJpdmF0
ZS0+bV9yZXNvdXJjZVJlc3BvbnNlLT5zZXRIVFRQU3RhdHVzVGV4dChodHRwU3RhdHVzVGV4dCk7
Cit9CisKK1dlYlN0cmluZyBXZWJVUkxSZXNwb25zZTo6aHR0cEhlYWRlckZpZWxkKGNvbnN0IFdl
YlN0cmluZyYgbmFtZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5tX3Jlc291cmNl
UmVzcG9uc2UtPmh0dHBIZWFkZXJGaWVsZChuYW1lKTsKK30KKwordm9pZCBXZWJVUkxSZXNwb25z
ZTo6c2V0SFRUUEhlYWRlckZpZWxkKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViU3Ry
aW5nJiB2YWx1ZSkKK3sKKyAgICBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXNwb25zZS0+c2V0SFRU
UEhlYWRlckZpZWxkKG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBXZWJVUkxSZXNwb25zZTo6YWRk
SFRUUEhlYWRlckZpZWxkKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViU3RyaW5nJiB2
YWx1ZSkKK3sKKyAgICAvLyBGSVhNRTogQWRkIGFuIGFkZEhUVFBIZWFkZXJGaWVsZCBtZXRob2Qg
dG8gUmVzb3VyY2VSZXNwb25zZS4KKyAgICBjb25zdCBIVFRQSGVhZGVyTWFwJiBtYXAgPSBtX3By
aXZhdGUtPm1fcmVzb3VyY2VSZXNwb25zZS0+aHR0cEhlYWRlckZpZWxkcygpOworICAgIFN0cmlu
ZyB2YWx1ZVN0cih2YWx1ZSk7CisgICAgcGFpcjxIVFRQSGVhZGVyTWFwOjppdGVyYXRvciwgYm9v
bD4gcmVzdWx0ID0KKyAgICAgICAgY29uc3RfY2FzdDxIVFRQSGVhZGVyTWFwKj4oJm1hcCktPmFk
ZChuYW1lLCB2YWx1ZVN0cik7CisgICAgaWYgKCFyZXN1bHQuc2Vjb25kKQorICAgICAgICByZXN1
bHQuZmlyc3QtPnNlY29uZCArPSAiLCAiICsgdmFsdWVTdHI7Cit9CisKK3ZvaWQgV2ViVVJMUmVz
cG9uc2U6OmNsZWFySFRUUEhlYWRlckZpZWxkKGNvbnN0IFdlYlN0cmluZyYgbmFtZSkKK3sKKyAg
ICAvLyBGSVhNRTogQWRkIGEgY2xlYXJIVFRQSGVhZGVyRmllbGQgbWV0aG9kIHRvIFJlc291cmNl
UmVzcG9uc2UuCisgICAgY29uc3QgSFRUUEhlYWRlck1hcCYgbWFwID0gbV9wcml2YXRlLT5tX3Jl
c291cmNlUmVzcG9uc2UtPmh0dHBIZWFkZXJGaWVsZHMoKTsKKyAgICBjb25zdF9jYXN0PEhUVFBI
ZWFkZXJNYXAqPigmbWFwKS0+cmVtb3ZlKG5hbWUpOworfQorCit2b2lkIFdlYlVSTFJlc3BvbnNl
Ojp2aXNpdEhUVFBIZWFkZXJGaWVsZHMoV2ViSFRUUEhlYWRlclZpc2l0b3IqIHZpc2l0b3IpIGNv
bnN0Cit7CisgICAgY29uc3QgSFRUUEhlYWRlck1hcCYgbWFwID0gbV9wcml2YXRlLT5tX3Jlc291
cmNlUmVzcG9uc2UtPmh0dHBIZWFkZXJGaWVsZHMoKTsKKyAgICBmb3IgKEhUVFBIZWFkZXJNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLmJlZ2luKCk7IGl0ICE9IG1hcC5lbmQoKTsgKytpdCkK
KyAgICAgICAgdmlzaXRvci0+dmlzaXRIZWFkZXIoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKK30K
KworZG91YmxlIFdlYlVSTFJlc3BvbnNlOjpsYXN0TW9kaWZpZWREYXRlKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPihtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXNwb25z
ZS0+bGFzdE1vZGlmaWVkRGF0ZSgpKTsKK30KKwordm9pZCBXZWJVUkxSZXNwb25zZTo6c2V0TGFz
dE1vZGlmaWVkRGF0ZShkb3VibGUgbGFzdE1vZGlmaWVkRGF0ZSkKK3sKKyAgICBtX3ByaXZhdGUt
Pm1fcmVzb3VyY2VSZXNwb25zZS0+c2V0TGFzdE1vZGlmaWVkRGF0ZShzdGF0aWNfY2FzdDx0aW1l
X3Q+KGxhc3RNb2RpZmllZERhdGUpKTsKK30KKworYm9vbCBXZWJVUkxSZXNwb25zZTo6aXNDb250
ZW50RmlsdGVyZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPm1fcmVzb3VyY2VS
ZXNwb25zZS0+aXNDb250ZW50RmlsdGVyZWQoKTsKK30KKwordm9pZCBXZWJVUkxSZXNwb25zZTo6
c2V0SXNDb250ZW50RmlsdGVyZWQoYm9vbCBpc0NvbnRlbnRGaWx0ZXJlZCkKK3sKKyAgICBtX3By
aXZhdGUtPm1fcmVzb3VyY2VSZXNwb25zZS0+c2V0SXNDb250ZW50RmlsdGVyZWQoaXNDb250ZW50
RmlsdGVyZWQpOworfQorCitsb25nIGxvbmcgV2ViVVJMUmVzcG9uc2U6OmFwcENhY2hlSUQoKSBj
b25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXNwb25zZS0+YXBwQ2Fj
aGVJRCgpOworfQorCit2b2lkIFdlYlVSTFJlc3BvbnNlOjpzZXRBcHBDYWNoZUlEKGxvbmcgbG9u
ZyBhcHBDYWNoZUlEKQoreworICAgIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlc3BvbnNlLT5zZXRB
cHBDYWNoZUlEKGFwcENhY2hlSUQpOworfQorCitXZWJVUkwgV2ViVVJMUmVzcG9uc2U6OmFwcENh
Y2hlTWFuaWZlc3RVUkwoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPm1fcmVzb3Vy
Y2VSZXNwb25zZS0+YXBwQ2FjaGVNYW5pZmVzdFVSTCgpOworfQorCit2b2lkIFdlYlVSTFJlc3Bv
bnNlOjpzZXRBcHBDYWNoZU1hbmlmZXN0VVJMKGNvbnN0IFdlYlVSTCYgdXJsKQoreworICAgIG1f
cHJpdmF0ZS0+bV9yZXNvdXJjZVJlc3BvbnNlLT5zZXRBcHBDYWNoZU1hbmlmZXN0VVJMKHVybCk7
Cit9CisKK1dlYkNTdHJpbmcgV2ViVVJMUmVzcG9uc2U6OnNlY3VyaXR5SW5mbygpIGNvbnN0Cit7
CisgICAgLy8gRklYTUU6IGdldFNlY3VyaXR5SW5mbyBpcyBtaXNuYW1lZC4KKyAgICByZXR1cm4g
bV9wcml2YXRlLT5tX3Jlc291cmNlUmVzcG9uc2UtPmdldFNlY3VyaXR5SW5mbygpOworfQorCit2
b2lkIFdlYlVSTFJlc3BvbnNlOjpzZXRTZWN1cml0eUluZm8oY29uc3QgV2ViQ1N0cmluZyYgc2Vj
dXJpdHlJbmZvKQoreworICAgIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlc3BvbnNlLT5zZXRTZWN1
cml0eUluZm8oc2VjdXJpdHlJbmZvKTsKK30KKworUmVzb3VyY2VSZXNwb25zZSYgV2ViVVJMUmVz
cG9uc2U6OnRvTXV0YWJsZVJlc291cmNlUmVzcG9uc2UoKQoreworICAgIEFTU0VSVChtX3ByaXZh
dGUpOworICAgIEFTU0VSVChtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXNwb25zZSk7CisKKyAgICBy
ZXR1cm4gKm1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlc3BvbnNlOworfQorCitjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJiBXZWJVUkxSZXNwb25zZTo6dG9SZXNvdXJjZVJlc3BvbnNlKCkgY29uc3QKK3sK
KyAgICBBU1NFUlQobV9wcml2YXRlKTsKKyAgICBBU1NFUlQobV9wcml2YXRlLT5tX3Jlc291cmNl
UmVzcG9uc2UpOworCisgICAgcmV0dXJuICptX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXNwb25zZTsK
K30KKwordm9pZCBXZWJVUkxSZXNwb25zZTo6YXNzaWduKFdlYlVSTFJlc3BvbnNlUHJpdmF0ZSog
cCkKK3sKKyAgICAvLyBTdWJjbGFzc2VzIG1heSBjYWxsIHRoaXMgZGlyZWN0bHkgc28gYSBzZWxm
LWFzc2lnbm1lbnQgY2hlY2sgaXMgbmVlZGVkCisgICAgLy8gaGVyZSBhcyB3ZWxsIGFzIGluIHRo
ZSBwdWJsaWMgYXNzaWduIG1ldGhvZC4KKyAgICBpZiAobV9wcml2YXRlID09IHApCisgICAgICAg
IHJldHVybjsKKyAgICBpZiAobV9wcml2YXRlKQorICAgICAgICBtX3ByaXZhdGUtPmRpc3Bvc2Uo
KTsKKyAgICBtX3ByaXZhdGUgPSBwOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVVJMUmVzcG9uc2VQcml2YXRlLmggYi9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlVSTFJlc3BvbnNlUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjcxNmM4ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlVSTFJlc3BvbnNlUHJpdmF0ZS5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IFdlYlVSTFJlc3BvbnNlUHJpdmF0ZV9oCisjZGVmaW5lIFdlYlVSTFJlc3BvbnNlUHJpdmF0ZV9o
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsgY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsgfQorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViVVJMUmVzcG9uc2VQcml2YXRlIHsKK3B1YmxpYzoK
KyAgICBXZWJVUkxSZXNwb25zZVByaXZhdGUoKSA6IG1fcmVzb3VyY2VSZXNwb25zZSgwKSB7IH0K
KworICAgIC8vIENhbGxlZCBieSBXZWJVUkxSZXNwb25zZSB3aGVuIGl0IG5vIGxvbmdlciBuZWVk
cyB0aGlzIG9iamVjdC4KKyAgICB2aXJ0dWFsIHZvaWQgZGlzcG9zZSgpID0gMDsKKworICAgIFdl
YkNvcmU6OlJlc291cmNlUmVzcG9uc2UqIG1fcmVzb3VyY2VSZXNwb25zZTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViVmlld0ltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE5MmM1ZAotLS0gL2Rldi9udWxs
CisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCkBAIC0wLDAgKzEsMTc4
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgorCisjaW5j
bHVkZSAiQXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50LmgiCisjaW5jbHVkZSAiQVhPYmplY3RD
YWNoZS5oIgorI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKKyNpbmNsdWRlICJDU1NWYWx1
ZUtleXdvcmRzLmgiCisjaW5jbHVkZSAiQ3Vyc29yLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
KyNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgorI2luY2x1ZGUgIkRPTVV0aWxpdGllc1ByaXZh
dGUuaCIKKyNpbmNsdWRlICJEcmFnQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkRyYWdEYXRhLmgi
CisjaW5jbHVkZSAiRWRpdG9yLmgiCisjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCisjaW5jbHVk
ZSAiRm9jdXNDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCisjaW5j
bHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZVRyZWUuaCIKKyNpbmNsdWRlICJG
cmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIaXRU
ZXN0UmVzdWx0LmgiCisjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgorI2luY2x1ZGUgIkhU
TUxNZWRpYUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJJbWFn
ZS5oIgorI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJJbnRSZWN0
LmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRDb2Rlcy5oIgorI2luY2x1ZGUgIktleWJvYXJkRXZlbnQu
aCIKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiTm9kZVJlbmRlclN0
eWxlLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgorI2luY2x1
ZGUgIlBhc3RlYm9hcmQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2
ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCisjaW5jbHVkZSAiUGx1Z2lu
SW5mb1N0b3JlLmgiCisjaW5jbHVkZSAiUG9wdXBNZW51Q2hyb21pdW0uaCIKKyNpbmNsdWRlICJQ
b3B1cE1lbnVDbGllbnQuaCIKKyNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSAiUmVz
b3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgIlNl
bGVjdGlvbkNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlR5
cGluZ0NvbW1hbmQuaCIKKyNpbmNsdWRlICJXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0LmgiCisjaW5j
bHVkZSAiV2ViRGV2VG9vbHNBZ2VudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJEcmFnRGF0YS5o
IgorI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5oIgorI2luY2x1ZGUgIldlYklucHV0RXZlbnQuaCIK
KyNpbmNsdWRlICJXZWJJbnB1dEV2ZW50Q29udmVyc2lvbi5oIgorI2luY2x1ZGUgIldlYk1lZGlh
UGxheWVyQWN0aW9uLmgiCisjaW5jbHVkZSAiV2ViTm9kZS5oIgorI2luY2x1ZGUgIldlYlBvaW50
LmgiCisjaW5jbHVkZSAiV2ViUG9wdXBNZW51SW1wbC5oIgorI2luY2x1ZGUgIldlYlJlY3QuaCIK
KyNpbmNsdWRlICJXZWJTZXR0aW5nc0ltcGwuaCIKKyNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKyNp
bmNsdWRlICJXZWJWZWN0b3IuaCIKKyNpbmNsdWRlICJXZWJWaWV3Q2xpZW50LmgiCisKKyNpZiBQ
TEFURk9STShXSU5fT1MpCisjaW5jbHVkZSAiS2V5Ym9hcmRDb2Rlc1dpbi5oIgorI2luY2x1ZGUg
IlJlbmRlclRoZW1lQ2hyb21pdW1XaW4uaCIKKyNlbHNlCisjaW5jbHVkZSAiS2V5Ym9hcmRDb2Rl
c1Bvc2l4LmgiCisjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKKyNlbmRpZgorCisvLyBHZXQgcmlk
IG9mIFdURidzIHBvdyBkZWZpbmUgc28gd2UgY2FuIHVzZSBzdGQ6OnBvdy4KKyN1bmRlZiBwb3cK
KyNpbmNsdWRlIDxjbWF0aD4gLy8gZm9yIHN0ZDo6cG93CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworLy8gQ2hhbmdlIHRoZSB0ZXh0IHpvb20gbGV2
ZWwgYnkga1RleHRTaXplTXVsdGlwbGllclJhdGlvIGVhY2ggdGltZSB0aGUgdXNlcgorLy8gem9v
bXMgdGV4dCBpbiBvciBvdXQgKGllLiwgY2hhbmdlIGJ5IDIwJSkuICBUaGUgbWluIGFuZCBtYXgg
dmFsdWVzIGxpbWl0CisvLyB0ZXh0IHpvb20gdG8gaGFsZiBhbmQgM3ggdGhlIG9yaWdpbmFsIHRl
eHQgc2l6ZS4gIFRoZXNlIHRocmVlIHZhbHVlcyBtYXRjaAorLy8gdGhvc2UgaW4gQXBwbGUncyBw
b3J0IGluIFdlYktpdC9XZWJLaXQvV2ViVmlldy9XZWJWaWV3Lm1tCitzdGF0aWMgY29uc3QgZG91
YmxlIHRleHRTaXplTXVsdGlwbGllclJhdGlvID0gMS4yOworc3RhdGljIGNvbnN0IGRvdWJsZSBt
aW5UZXh0U2l6ZU11bHRpcGxpZXIgPSAwLjU7CitzdGF0aWMgY29uc3QgZG91YmxlIG1heFRleHRT
aXplTXVsdGlwbGllciA9IDMuMDsKKworLy8gVGhlIGdyb3VwIG5hbWUgaWRlbnRpZmllcyBhIG5h
bWVzcGFjZSBvZiBwYWdlcy4gIFBhZ2UgZ3JvdXAgaXMgdXNlZCBvbiBPU1gKKy8vIGZvciBzb21l
IHByb2dyYW1zIHRoYXQgdXNlIEhUTUwgdmlld3MgdG8gZGlzcGxheSB0aGluZ3MgdGhhdCBkb24n
dCBzZWVtIGxpa2UKKy8vIHdlYiBwYWdlcyB0byB0aGUgdXNlciAoc28gc2hvdWxkbid0IGhhdmUg
dmlzaXRlZCBsaW5rIGNvbG9yaW5nKS4gIFdlIG9ubHkgdXNlCisvLyBvbmUgcGFnZSBncm91cC4K
K2NvbnN0IGNoYXIqIHBhZ2VHcm91cE5hbWUgPSAiZGVmYXVsdCI7CisKKy8vIEVuc3VyZSB0aGF0
IHRoZSBXZWJEcmFnT3BlcmF0aW9uIGVudW0gdmFsdWVzIHN0YXkgaW4gc3luYyB3aXRoIHRoZSBv
cmlnaW5hbAorLy8gRHJhZ09wZXJhdGlvbiBjb25zdGFudHMuCisjZGVmaW5lIENPTVBJTEVfQVNT
RVJUX01BVENISU5HX0VOVU0oY29yZU5hbWUpIFwKKyAgICBDT01QSUxFX0FTU0VSVChpbnQoY29y
ZU5hbWUpID09IGludChXZWIjI2NvcmVOYW1lKSwgZHVtbXkjI2NvcmVOYW1lKQorQ09NUElMRV9B
U1NFUlRfTUFUQ0hJTkdfRU5VTShEcmFnT3BlcmF0aW9uTm9uZSk7CitDT01QSUxFX0FTU0VSVF9N
QVRDSElOR19FTlVNKERyYWdPcGVyYXRpb25Db3B5KTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5H
X0VOVU0oRHJhZ09wZXJhdGlvbkxpbmspOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShE
cmFnT3BlcmF0aW9uR2VuZXJpYyk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKERyYWdP
cGVyYXRpb25Qcml2YXRlKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oRHJhZ09wZXJh
dGlvbk1vdmUpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShEcmFnT3BlcmF0aW9uRGVs
ZXRlKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oRHJhZ09wZXJhdGlvbkV2ZXJ5KTsK
KworLy8gTm90ZSB0aGF0IGZvY3VzT25TaG93IGlzIGZhbHNlIHNvIHRoYXQgdGhlIGF1dG9jb21w
bGV0ZSBwb3B1cCBpcyBzaG93biBub3QKKy8vIGFjdGl2YXRlZC4gIFdlIG5lZWQgdGhlIHBhZ2Ug
dG8gc3RpbGwgaGF2ZSBmb2N1cyBzbyB0aGUgdXNlciBjYW4ga2VlcCB0eXBpbmcKKy8vIHdoaWxl
IHRoZSBwb3B1cCBpcyBzaG93aW5nLgorc3RhdGljIGNvbnN0IFBvcHVwQ29udGFpbmVyU2V0dGlu
Z3MgYXV0b2NvbXBsZXRlUG9wdXBTZXR0aW5ncyA9IHsKKyAgICBmYWxzZSwgIC8vIGZvY3VzT25T
aG93CisgICAgZmFsc2UsICAvLyBzZXRUZXh0T25JbmRleENoYW5nZQorICAgIGZhbHNlLCAgLy8g
YWNjZXB0T25BYmFuZG9uCisgICAgdHJ1ZSwgICAvLyBsb29wU2VsZWN0aW9uTmF2aWdhdGlvbgor
ICAgIHRydWUsICAgLy8gcmVzdHJpY3RXaWR0aE9mTGlzdEJveC4gU2FtZSBhcyBvdGhlciBicm93
c2VyIChGeCwgSUUsIGFuZCBzYWZhcmkpCisgICAgLy8gRm9yIGF1dG9jb21wbGV0ZSwgd2UgdXNl
IHRoZSBkaXJlY3Rpb24gb2YgdGhlIGlucHV0IGZpZWxkIGFzIHRoZSBkaXJlY3Rpb24KKyAgICAv
LyBvZiB0aGUgcG9wdXAgaXRlbXMuIFRoZSBtYWluIHJlYXNvbiBpcyB0byBrZWVwIHRoZSBkaXNw
bGF5IG9mIGl0ZW1zIGluCisgICAgLy8gZHJvcC1kb3duIHRoZSBzYW1lIGFzIHRoZSBpdGVtcyBp
biB0aGUgaW5wdXQgZmllbGQuCisgICAgUG9wdXBDb250YWluZXJTZXR0aW5nczo6RE9NRWxlbWVu
dERpcmVjdGlvbiwKK307CisKKy8vIFdlYlZpZXcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXZWJWaWV3KiBXZWJWaWV3
OjpjcmVhdGUoV2ViVmlld0NsaWVudCogY2xpZW50KQoreworICAgIHJldHVybiBuZXcgV2ViVmll
d0ltcGwoY2xpZW50KTsKK30KKwordm9pZCBXZWJWaWV3Ojp1cGRhdGVWaXNpdGVkTGlua1N0YXRl
KHVuc2lnbmVkIGxvbmcgbG9uZyBsaW5rSGFzaCkKK3sKKyAgICBQYWdlOjp2aXNpdGVkU3RhdGVD
aGFuZ2VkKFBhZ2VHcm91cDo6cGFnZUdyb3VwKHBhZ2VHcm91cE5hbWUpLCBsaW5rSGFzaCk7Cit9
CisKK3ZvaWQgV2ViVmlldzo6cmVzZXRWaXNpdGVkTGlua1N0YXRlKCkKK3sKKyAgICBQYWdlOjph
bGxWaXNpdGVkU3RhdGVDaGFuZ2VkKFBhZ2VHcm91cDo6cGFnZUdyb3VwKHBhZ2VHcm91cE5hbWUp
KTsKK30KKwordm9pZCBXZWJWaWV3SW1wbDo6aW5pdGlhbGl6ZU1haW5GcmFtZShXZWJGcmFtZUNs
aWVudCogZnJhbWVDbGllbnQpCit7CisgICAgLy8gTk9URTogVGhlIFdlYkZyYW1lSW1wbCB0YWtl
cyBhIHJlZmVyZW5jZSB0byBpdHNlbGYgd2l0aGluIEluaXRNYWluRnJhbWUKKyAgICAvLyBhbmQg
cmVsZWFzZXMgdGhhdCByZWZlcmVuY2Ugb25jZSB0aGUgY29ycmVzcG9uZGluZyBGcmFtZSBpcyBk
ZXN0cm95ZWQuCisgICAgUmVmUHRyPFdlYkZyYW1lSW1wbD4gZnJhbWUgPSBXZWJGcmFtZUltcGw6
OmNyZWF0ZShmcmFtZUNsaWVudCk7CisKKyAgICBmcmFtZS0+aW5pdGlhbGl6ZUFzTWFpbkZyYW1l
KHRoaXMpOworCisgICAgLy8gUmVzdHJpY3QgdGhlIGFjY2VzcyB0byB0aGUgbG9jYWwgZmlsZSBz
eXN0ZW0KKyAgICAvLyAoc2VlIFdlYlZpZXcubW0gV2ViVmlldzo6X2NvbW1vbkluaXRpYWxpemF0
aW9uV2l0aEZyYW1lTmFtZSkuCisgICAgU2VjdXJpdHlPcmlnaW46OnNldExvY2FsTG9hZFBvbGlj
eShTZWN1cml0eU9yaWdpbjo6QWxsb3dMb2NhbExvYWRzRm9yTG9jYWxPbmx5KTsKK30KKworV2Vi
Vmlld0ltcGw6OldlYlZpZXdJbXBsKFdlYlZpZXdDbGllbnQqIGNsaWVudCkKKyAgICA6IG1fY2xp
ZW50KGNsaWVudCkKKyAgICAsIG1fYmFja0ZvcndhcmRMaXN0Q2xpZW50SW1wbCh0aGlzKQorICAg
ICwgbV9jaHJvbWVDbGllbnRJbXBsKHRoaXMpCisgICAgLCBtX2NvbnRleHRNZW51Q2xpZW50SW1w
bCh0aGlzKQorICAgICwgbV9kcmFnQ2xpZW50SW1wbCh0aGlzKQorICAgICwgbV9lZGl0b3JDbGll
bnRJbXBsKHRoaXMpCisgICAgLCBtX2luc3BlY3RvckNsaWVudEltcGwodGhpcykKKyAgICAsIG1f
b2JzZXJ2ZWROZXdOYXZpZ2F0aW9uKGZhbHNlKQorI2lmbmRlZiBOREVCVUcKKyAgICAsIG1fbmV3
TmF2aWdhdGlvbkxvYWRlcigwKQorI2VuZGlmCisgICAgLCBtX3pvb21MZXZlbCgwKQorICAgICwg
bV9jb250ZXh0TWVudUFsbG93ZWQoZmFsc2UpCisgICAgLCBtX2RvaW5nRHJhZ0FuZERyb3AoZmFs
c2UpCisgICAgLCBtX2lnbm9yZUlucHV0RXZlbnRzKGZhbHNlKQorICAgICwgbV9zdXBwcmVzc05l
eHRLZXlwcmVzc0V2ZW50KGZhbHNlKQorICAgICwgbV9pbml0aWFsTmF2aWdhdGlvblBvbGljeShX
ZWJOYXZpZ2F0aW9uUG9saWN5SWdub3JlKQorICAgICwgbV9pbWVBY2NlcHRFdmVudHModHJ1ZSkK
KyAgICAsIG1fZHJhZ1RhcmdldERpc3BhdGNoKGZhbHNlKQorICAgICwgbV9kcmFnSWRlbnRpdHko
MCkKKyAgICAsIG1fZHJvcEVmZmVjdChEcm9wRWZmZWN0RGVmYXVsdCkKKyAgICAsIG1fb3BlcmF0
aW9uc0FsbG93ZWQoV2ViRHJhZ09wZXJhdGlvbk5vbmUpCisgICAgLCBtX2RyYWdPcGVyYXRpb24o
V2ViRHJhZ09wZXJhdGlvbk5vbmUpCisgICAgLCBtX2F1dG9jb21wbGV0ZVBvcHVwU2hvd2luZyhm
YWxzZSkKKyAgICAsIG1faXNUcmFuc3BhcmVudChmYWxzZSkKKyAgICAsIG1fdGFic1RvTGlua3Mo
ZmFsc2UpCit7CisgICAgLy8gV2ViS2l0L3dpbi9XZWJWaWV3LmNwcCBkb2VzIHRoZSBzYW1lIHRo
aW5nLCBleGNlcHQgdGhleSBjYWxsIHRoZQorICAgIC8vIEtKUyBzcGVjaWZpYyB3cmFwcGVyIGFy
b3VuZCB0aGlzIG1ldGhvZC4gV2UgbmVlZCB0byBoYXZlIHRocmVhZGluZworICAgIC8vIGluaXRp
YWxpemVkIGJlY2F1c2UgQ29sbGF0b3JJQ1UgcmVxdWlyZXMgaXQuCisgICAgV1RGOjppbml0aWFs
aXplVGhyZWFkaW5nKCk7CisKKyAgICAvLyBzZXQgdG8gaW1wb3NzaWJsZSBwb2ludCBzbyB3ZSBh
bHdheXMgZ2V0IHRoZSBmaXJzdCBtb3VzZSBwb3MKKyAgICBtX2xhc3RNb3VzZVBvc2l0aW9uID0g
V2ViUG9pbnQoLTEsIC0xKTsKKworICAgIC8vIHRoZSBwYWdlIHdpbGwgdGFrZSBvd25lcnNoaXAg
b2YgdGhlIHZhcmlvdXMgY2xpZW50cworICAgIG1fcGFnZS5zZXQobmV3IFBhZ2UoJm1fY2hyb21l
Q2xpZW50SW1wbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICZtX2NvbnRleHRNZW51Q2xpZW50
SW1wbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICZtX2VkaXRvckNsaWVudEltcGwsCisgICAg
ICAgICAgICAgICAgICAgICAgICAmbV9kcmFnQ2xpZW50SW1wbCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICZtX2luc3BlY3RvckNsaWVudEltcGwsCisgICAgICAgICAgICAgICAgICAgICAgICAw
KSk7CisKKyAgICBtX3BhZ2UtPmJhY2tGb3J3YXJkTGlzdCgpLT5zZXRDbGllbnQoJm1fYmFja0Zv
cndhcmRMaXN0Q2xpZW50SW1wbCk7CisgICAgbV9wYWdlLT5zZXRHcm91cE5hbWUocGFnZUdyb3Vw
TmFtZSk7Cit9CisKK1dlYlZpZXdJbXBsOjp+V2ViVmlld0ltcGwoKQoreworICAgIEFTU0VSVCgh
bV9wYWdlKTsKK30KKworUmVuZGVyVGhlbWUqIFdlYlZpZXdJbXBsOjp0aGVtZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fcGFnZS5nZXQoKSA/IG1fcGFnZS0+dGhlbWUoKSA6IFJlbmRlclRoZW1l
OjpkZWZhdWx0VGhlbWUoKS5nZXQoKTsKK30KKworV2ViRnJhbWVJbXBsKiBXZWJWaWV3SW1wbDo6
bWFpbkZyYW1lSW1wbCgpCit7CisgICAgcmV0dXJuIG1fcGFnZS5nZXQoKSA/IFdlYkZyYW1lSW1w
bDo6ZnJvbUZyYW1lKG1fcGFnZS0+bWFpbkZyYW1lKCkpIDogMDsKK30KKworYm9vbCBXZWJWaWV3
SW1wbDo6dGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKCkgY29uc3QKK3sKKyAgICBBU1NFUlQo
bV9wYWdlLmdldCgpKTsKKyAgICByZXR1cm4gbV9wYWdlLT50YWJLZXlDeWNsZXNUaHJvdWdoRWxl
bWVudHMoKTsKK30KKwordm9pZCBXZWJWaWV3SW1wbDo6c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVs
ZW1lbnRzKGJvb2wgdmFsdWUpCit7CisgICAgaWYgKG1fcGFnZSkKKyAgICAgICAgbV9wYWdlLT5z
ZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHModmFsdWUpOworfQorCit2b2lkIFdlYlZpZXdJ
bXBsOjptb3VzZU1vdmUoY29uc3QgV2ViTW91c2VFdmVudCYgZXZlbnQpCit7CisgICAgaWYgKCFt
YWluRnJhbWVJbXBsKCkgfHwgIW1haW5GcmFtZUltcGwoKS0+ZnJhbWVWaWV3KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fbGFzdE1vdXNlUG9zaXRpb24gPSBXZWJQb2ludChldmVudC54LCBl
dmVudC55KTsKKworICAgIC8vIFdlIGNhbGwgbW91c2VNb3ZlZCBoZXJlIGluc3RlYWQgb2YgaGFu
ZGxlTW91c2VNb3ZlZEV2ZW50IGJlY2F1c2Ugd2UgbmVlZAorICAgIC8vIG91ciBDaHJvbWVDbGll
bnRJbXBsIHRvIHJlY2VpdmUgY2hhbmdlcyB0byB0aGUgbW91c2UgcG9zaXRpb24gYW5kCisgICAg
Ly8gdG9vbHRpcCB0ZXh0LCBhbmQgbW91c2VNb3ZlZCBoYW5kbGVzIGFsbCBvZiB0aGF0LgorICAg
IG1haW5GcmFtZUltcGwoKS0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPm1vdXNlTW92ZWQoCisg
ICAgICAgIFBsYXRmb3JtTW91c2VFdmVudEJ1aWxkZXIobWFpbkZyYW1lSW1wbCgpLT5mcmFtZVZp
ZXcoKSwgZXZlbnQpKTsKK30KKwordm9pZCBXZWJWaWV3SW1wbDo6bW91c2VMZWF2ZShjb25zdCBX
ZWJNb3VzZUV2ZW50JiBldmVudCkKK3sKKyAgICAvLyBUaGlzIGV2ZW50IGdldHMgc2VudCBhcyB0
aGUgbWFpbiBmcmFtZSBpcyBjbG9zaW5nLiAgSW4gdGhhdCBjYXNlLCBqdXN0CisgICAgLy8gaWdu
b3JlIGl0LgorICAgIGlmICghbWFpbkZyYW1lSW1wbCgpIHx8ICFtYWluRnJhbWVJbXBsKCktPmZy
YW1lVmlldygpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NsaWVudC0+c2V0TW91c2VPdmVy
VVJMKFdlYlVSTCgpKTsKKworICAgIG1haW5GcmFtZUltcGwoKS0+ZnJhbWUoKS0+ZXZlbnRIYW5k
bGVyKCktPmhhbmRsZU1vdXNlTW92ZUV2ZW50KAorICAgICAgICBQbGF0Zm9ybU1vdXNlRXZlbnRC
dWlsZGVyKG1haW5GcmFtZUltcGwoKS0+ZnJhbWVWaWV3KCksIGV2ZW50KSk7Cit9CisKK3ZvaWQg
V2ViVmlld0ltcGw6Om1vdXNlRG93bihjb25zdCBXZWJNb3VzZUV2ZW50JiBldmVudCkKK3sKKyAg
ICBpZiAoIW1haW5GcmFtZUltcGwoKSB8fCAhbWFpbkZyYW1lSW1wbCgpLT5mcmFtZVZpZXcoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9sYXN0TW91c2VEb3duUG9pbnQgPSBXZWJQb2ludChl
dmVudC54LCBldmVudC55KTsKKworICAgIC8vIElmIGEgdGV4dCBmaWVsZCB0aGF0IGhhcyBmb2N1
cyBpcyBjbGlja2VkIGFnYWluLCB3ZSBzaG91bGQgZGlzcGxheSB0aGUKKyAgICAvLyBhdXRvY29t
cGxldGUgcG9wdXAuCisgICAgUmVmUHRyPE5vZGU+IGNsaWNrZWROb2RlOworICAgIGlmIChldmVu
dC5idXR0b24gPT0gV2ViTW91c2VFdmVudDo6QnV0dG9uTGVmdCkgeworICAgICAgICBSZWZQdHI8
Tm9kZT4gZm9jdXNlZE5vZGUgPSBmb2N1c2VkV2ViQ29yZU5vZGUoKTsKKyAgICAgICAgaWYgKGZv
Y3VzZWROb2RlLmdldCgpICYmIHRvSFRNTElucHV0RWxlbWVudChmb2N1c2VkTm9kZS5nZXQoKSkp
IHsKKyAgICAgICAgICAgIEludFBvaW50IHBvaW50KGV2ZW50LngsIGV2ZW50LnkpOworICAgICAg
ICAgICAgcG9pbnQgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCktPndpbmRvd1RvQ29udGVu
dHMocG9pbnQpOworICAgICAgICAgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQocG9pbnQpOworICAg
ICAgICAgICAgcmVzdWx0ID0gbV9wYWdlLT5tYWluRnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmhp
dFRlc3RSZXN1bHRBdFBvaW50KHBvaW50LCBmYWxzZSk7CisgICAgICAgICAgICBpZiAocmVzdWx0
LmlubmVyTm9uU2hhcmVkTm9kZSgpID09IGZvY3VzZWROb2RlKSB7CisgICAgICAgICAgICAgICAg
Ly8gQWxyZWFkeSBmb2N1c2VkIHRleHQgZmllbGQgd2FzIGNsaWNrZWQsIGxldCdzIHJlbWVtYmVy
IHRoaXMuICBJZgorICAgICAgICAgICAgICAgIC8vIGZvY3VzIGhhcyBub3QgY2hhbmdlZCBhZnRl
ciB0aGUgbW91c2UgZXZlbnQgaXMgcHJvY2Vzc2VkLCB3ZSdsbAorICAgICAgICAgICAgICAgIC8v
IHRyaWdnZXIgdGhlIGF1dG9jb21wbGV0ZS4KKyAgICAgICAgICAgICAgICBjbGlja2VkTm9kZSA9
IGZvY3VzZWROb2RlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgbWFp
bkZyYW1lSW1wbCgpLT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlTW91c2VQcmVzc0V2
ZW50KAorICAgICAgICBQbGF0Zm9ybU1vdXNlRXZlbnRCdWlsZGVyKG1haW5GcmFtZUltcGwoKS0+
ZnJhbWVWaWV3KCksIGV2ZW50KSk7CisKKyAgICBpZiAoY2xpY2tlZE5vZGUuZ2V0KCkgJiYgY2xp
Y2tlZE5vZGUgPT0gZm9jdXNlZFdlYkNvcmVOb2RlKCkpIHsKKyAgICAgICAgLy8gRm9jdXMgaGFz
IG5vdCBjaGFuZ2VkLCBzaG93IHRoZSBhdXRvY29tcGxldGUgcG9wdXAuCisgICAgICAgIHN0YXRp
Y19jYXN0PEVkaXRvckNsaWVudEltcGwqPihtX3BhZ2UtPmVkaXRvckNsaWVudCgpKS0+CisgICAg
ICAgICAgICBzaG93Rm9ybUF1dG9maWxsRm9yTm9kZShjbGlja2VkTm9kZS5nZXQoKSk7CisgICAg
fQorCisgICAgLy8gRGlzcGF0Y2ggdGhlIGNvbnRleHRtZW51IGV2ZW50IHJlZ2FyZGxlc3Mgb2Yg
aWYgdGhlIGNsaWNrIHdhcyBzd2FsbG93ZWQuCisgICAgLy8gT24gV2luZG93cywgd2UgaGFuZGxl
IGl0IG9uIG1vdXNlIHVwLCBub3QgZG93bi4KKyNpZiBQTEFURk9STShEQVJXSU4pCisgICAgaWYg
KGV2ZW50LmJ1dHRvbiA9PSBXZWJNb3VzZUV2ZW50OjpCdXR0b25SaWdodAorICAgICAgICB8fCAo
ZXZlbnQuYnV0dG9uID09IFdlYk1vdXNlRXZlbnQ6OkJ1dHRvbkxlZnQKKyAgICAgICAgICAgICYm
IGV2ZW50Lm1vZGlmaWVycyAmIFdlYk1vdXNlRXZlbnQ6OkNvbnRyb2xLZXkpKQorICAgICAgICBt
b3VzZUNvbnRleHRNZW51KGV2ZW50KTsKKyNlbGlmIFBMQVRGT1JNKExJTlVYKQorICAgIGlmIChl
dmVudC5idXR0b24gPT0gV2ViTW91c2VFdmVudDo6QnV0dG9uUmlnaHQpCisgICAgICAgIG1vdXNl
Q29udGV4dE1lbnUoZXZlbnQpOworI2VuZGlmCit9CisKK3ZvaWQgV2ViVmlld0ltcGw6Om1vdXNl
Q29udGV4dE1lbnUoY29uc3QgV2ViTW91c2VFdmVudCYgZXZlbnQpCit7CisgICAgaWYgKCFtYWlu
RnJhbWVJbXBsKCkgfHwgIW1haW5GcmFtZUltcGwoKS0+ZnJhbWVWaWV3KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fcGFnZS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCktPmNsZWFyQ29udGV4
dE1lbnUoKTsKKworICAgIFBsYXRmb3JtTW91c2VFdmVudEJ1aWxkZXIgcG1lKG1haW5GcmFtZUlt
cGwoKS0+ZnJhbWVWaWV3KCksIGV2ZW50KTsKKworICAgIC8vIEZpbmQgdGhlIHJpZ2h0IHRhcmdl
dCBmcmFtZS4gU2VlIGlzc3VlIDExODY5MDAuCisgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQgPSBo
aXRUZXN0UmVzdWx0Rm9yV2luZG93UG9zKHBtZS5wb3MoKSk7CisgICAgRnJhbWUqIHRhcmdldEZy
YW1lOworICAgIGlmIChyZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkpCisgICAgICAgIHRhcmdl
dEZyYW1lID0gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpLT5kb2N1bWVudCgpLT5mcmFtZSgp
OworICAgIGVsc2UKKyAgICAgICAgdGFyZ2V0RnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxl
cigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKKworI2lmIFBMQVRGT1JNKFdJTl9PUykKKyAgICB0
YXJnZXRGcmFtZS0+dmlldygpLT5zZXRDdXJzb3IocG9pbnRlckN1cnNvcigpKTsKKyNlbmRpZgor
CisgICAgbV9jb250ZXh0TWVudUFsbG93ZWQgPSB0cnVlOworICAgIHRhcmdldEZyYW1lLT5ldmVu
dEhhbmRsZXIoKS0+c2VuZENvbnRleHRNZW51RXZlbnQocG1lKTsKKyAgICBtX2NvbnRleHRNZW51
QWxsb3dlZCA9IGZhbHNlOworICAgIC8vIEFjdHVhbGx5IHNob3dpbmcgdGhlIGNvbnRleHQgbWVu
dSBpcyBoYW5kbGVkIGJ5IHRoZSBDb250ZXh0TWVudUNsaWVudAorICAgIC8vIGltcGxlbWVudGF0
aW9uLi4uCit9CisKK3ZvaWQgV2ViVmlld0ltcGw6Om1vdXNlVXAoY29uc3QgV2ViTW91c2VFdmVu
dCYgZXZlbnQpCit7CisgICAgaWYgKCFtYWluRnJhbWVJbXBsKCkgfHwgIW1haW5GcmFtZUltcGwo
KS0+ZnJhbWVWaWV3KCkpCisgICAgICAgIHJldHVybjsKKworI2lmIFBMQVRGT1JNKExJTlVYKQor
ICAgIC8vIElmIHRoZSBldmVudCB3YXMgYSBtaWRkbGUgY2xpY2ssIGF0dGVtcHQgdG8gY29weSB0
ZXh0IGludG8gdGhlIGZvY3VzZWQKKyAgICAvLyBmcmFtZS4gV2UgZXhlY3V0ZSB0aGlzIGJlZm9y
ZSB3ZSBsZXQgdGhlIHBhZ2UgaGF2ZSBhIGdvIGF0IHRoZSBldmVudAorICAgIC8vIGJlY2F1c2Ug
dGhlIHBhZ2UgbWF5IGNoYW5nZSB3aGF0IGlzIGZvY3VzZWQgZHVyaW5nIGluIGl0cyBldmVudCBo
YW5kbGVyLgorICAgIC8vCisgICAgLy8gVGhpcyBjb2RlIGlzIGluIHRoZSBtb3VzZSB1cCBoYW5k
bGVyLiBUaGVyZSBpcyBzb21lIGRlYmF0ZSBhYm91dCBwdXR0aW5nCisgICAgLy8gdGhpcyBoZXJl
LCBhcyBvcHBvc2VkIHRvIHRoZSBtb3VzZSBkb3duIGhhbmRsZXIuCisgICAgLy8gICB4dGVybTog
cGFzdGVzIG9uIHVwLgorICAgIC8vICAgR1RLOiBwYXN0ZXMgb24gZG93bi4KKyAgICAvLyAgIEZp
cmVmb3g6IHBhc3RlcyBvbiB1cC4KKyAgICAvLyAgIE1pZG9yaTogY291bGRuJ3QgcGFzdGUgYXQg
YWxsIHdpdGggMC4xLjIKKyAgICAvLworICAgIC8vIFRoZXJlIGlzIHNvbWV0aGluZyBvZiBhIHdl
YmNvbXBhdCBhbmdsZSB0byB0aGlzIHdlbGwsIGFzIGhpZ2hsaWdodGVkIGJ5CisgICAgLy8gY3Ji
dWcuY29tLzE0NjA4LiBQYWdlcyBjYW4gY2xlYXIgdGV4dCBib3hlcyAnb25jbGljaycgYW5kLCBp
ZiB3ZSBwYXN0ZSBvbgorICAgIC8vIGRvd24gdGhlbiB0aGUgdGV4dCBpcyBwYXN0ZWQganVzdCBi
ZWZvcmUgdGhlIG9uY2xpY2sgaGFuZGxlciBydW5zIGFuZAorICAgIC8vIGNsZWFycyB0aGUgdGV4
dCBib3guIFNvIGl0J3MgaW1wb3J0YW50IHRoaXMgaGFwcGVucyBhZnRlciB0aGUKKyAgICAvLyBo
YW5kbGVNb3VzZVJlbGVhc2VFdmVudCgpIGVhcmxpZXIgaW4gdGhpcyBmdW5jdGlvbgorICAgIGlm
IChldmVudC5idXR0b24gPT0gV2ViTW91c2VFdmVudDo6QnV0dG9uTWlkZGxlKSB7CisgICAgICAg
IEZyYW1lKiBmb2N1c2VkID0gZm9jdXNlZFdlYkNvcmVGcmFtZSgpOworICAgICAgICBJbnRQb2lu
dCBjbGlja1BvaW50KG1fbGFzdE1vdXNlRG93blBvaW50LngsIG1fbGFzdE1vdXNlRG93blBvaW50
LnkpOworICAgICAgICBjbGlja1BvaW50ID0gbV9wYWdlLT5tYWluRnJhbWUoKS0+dmlldygpLT53
aW5kb3dUb0NvbnRlbnRzKGNsaWNrUG9pbnQpOworICAgICAgICBIaXRUZXN0UmVzdWx0IGhpdFRl
c3RSZXN1bHQgPQorICAgICAgICAgICAgZm9jdXNlZC0+ZXZlbnRIYW5kbGVyKCktPmhpdFRlc3RS
ZXN1bHRBdFBvaW50KGNsaWNrUG9pbnQsIGZhbHNlLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaG91bGRIaXRUZXN0U2Ny
b2xsYmFycyk7CisgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gc2VuZCBhIHBhc3RlIHdoZW4g
bWlkZGxlIGNsaWNraW5nIGEgc2Nyb2xsIGJhciBvciBhCisgICAgICAgIC8vIGxpbmsgKHdoaWNo
IHdpbGwgbmF2aWdhdGUgbGF0ZXIgaW4gdGhlIGNvZGUpLgorICAgICAgICBpZiAoIWhpdFRlc3RS
ZXN1bHQuc2Nyb2xsYmFyKCkgJiYgIWhpdFRlc3RSZXN1bHQuaXNMaXZlTGluaygpICYmIGZvY3Vz
ZWQpIHsKKyAgICAgICAgICAgIEVkaXRvciogZWRpdG9yID0gZm9jdXNlZC0+ZWRpdG9yKCk7Cisg
ICAgICAgICAgICBQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkID0gUGFzdGVib2FyZDo6Z2VuZXJhbFBh
c3RlYm9hcmQoKTsKKyAgICAgICAgICAgIGJvb2wgb2xkU2VsZWN0aW9uTW9kZSA9IHBhc3RlYm9h
cmQtPmlzU2VsZWN0aW9uTW9kZSgpOworICAgICAgICAgICAgcGFzdGVib2FyZC0+c2V0U2VsZWN0
aW9uTW9kZSh0cnVlKTsKKyAgICAgICAgICAgIGVkaXRvci0+Y29tbWFuZChBdG9taWNTdHJpbmco
IlBhc3RlIikpLmV4ZWN1dGUoKTsKKyAgICAgICAgICAgIHBhc3RlYm9hcmQtPnNldFNlbGVjdGlv
bk1vZGUob2xkU2VsZWN0aW9uTW9kZSk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworICAg
IG1vdXNlQ2FwdHVyZUxvc3QoKTsKKyAgICBtYWluRnJhbWVJbXBsKCktPmZyYW1lKCktPmV2ZW50
SGFuZGxlcigpLT5oYW5kbGVNb3VzZVJlbGVhc2VFdmVudCgKKyAgICAgICAgUGxhdGZvcm1Nb3Vz
ZUV2ZW50QnVpbGRlcihtYWluRnJhbWVJbXBsKCktPmZyYW1lVmlldygpLCBldmVudCkpOworCisj
aWYgUExBVEZPUk0oV0lOX09TKQorICAgIC8vIERpc3BhdGNoIHRoZSBjb250ZXh0bWVudSBldmVu
dCByZWdhcmRsZXNzIG9mIGlmIHRoZSBjbGljayB3YXMgc3dhbGxvd2VkLgorICAgIC8vIE9uIE1h
Yy9MaW51eCwgd2UgaGFuZGxlIGl0IG9uIG1vdXNlIGRvd24sIG5vdCB1cC4KKyAgICBpZiAoZXZl
bnQuYnV0dG9uID09IFdlYk1vdXNlRXZlbnQ6OkJ1dHRvblJpZ2h0KQorICAgICAgICBtb3VzZUNv
bnRleHRNZW51KGV2ZW50KTsKKyNlbmRpZgorfQorCit2b2lkIFdlYlZpZXdJbXBsOjptb3VzZVdo
ZWVsKGNvbnN0IFdlYk1vdXNlV2hlZWxFdmVudCYgZXZlbnQpCit7CisgICAgUGxhdGZvcm1XaGVl
bEV2ZW50QnVpbGRlciBwbGF0Zm9ybUV2ZW50KG1haW5GcmFtZUltcGwoKS0+ZnJhbWVWaWV3KCks
IGV2ZW50KTsKKyAgICBtYWluRnJhbWVJbXBsKCktPmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5o
YW5kbGVXaGVlbEV2ZW50KHBsYXRmb3JtRXZlbnQpOworfQorCitib29sIFdlYlZpZXdJbXBsOjpr
ZXlFdmVudChjb25zdCBXZWJLZXlib2FyZEV2ZW50JiBldmVudCkKK3sKKyAgICBBU1NFUlQoKGV2
ZW50LnR5cGUgPT0gV2ViSW5wdXRFdmVudDo6UmF3S2V5RG93bikKKyAgICAgICAgfHwgKGV2ZW50
LnR5cGUgPT0gV2ViSW5wdXRFdmVudDo6S2V5RG93bikKKyAgICAgICAgfHwgKGV2ZW50LnR5cGUg
PT0gV2ViSW5wdXRFdmVudDo6S2V5VXApKTsKKworICAgIC8vIFBsZWFzZSByZWZlciB0byB0aGUg
Y29tbWVudHMgZXhwbGFpbmluZyB0aGUgbV9zdXBwcmVzc05leHRLZXlwcmVzc0V2ZW50CisgICAg
Ly8gbWVtYmVyLgorICAgIC8vIFRoZSBtX3N1cHByZXNzTmV4dEtleXByZXNzRXZlbnQgaXMgc2V0
IGlmIHRoZSBLZXlEb3duIGlzIGhhbmRsZWQgYnkKKyAgICAvLyBXZWJraXQuIEEga2V5RG93biBl
dmVudCBpcyB0eXBpY2FsbHkgYXNzb2NpYXRlZCB3aXRoIGEga2V5UHJlc3MoY2hhcikKKyAgICAv
LyBldmVudCBhbmQgYSBrZXlVcCBldmVudC4gV2UgcmVzZXQgdGhpcyBmbGFnIGhlcmUgYXMgdGhp
cyBpcyBhIG5ldyBrZXlEb3duCisgICAgLy8gZXZlbnQuCisgICAgbV9zdXBwcmVzc05leHRLZXlw
cmVzc0V2ZW50ID0gZmFsc2U7CisKKyAgICAvLyBHaXZlIGF1dG9jb21wbGV0ZSBhIGNoYW5jZSB0
byBjb25zdW1lIHRoZSBrZXkgZXZlbnRzIGl0IGlzIGludGVyZXN0ZWQgaW4uCisgICAgaWYgKGF1
dG9jb21wbGV0ZUhhbmRsZUtleUV2ZW50KGV2ZW50KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICBGcmFtZSogZnJhbWUgPSBmb2N1c2VkV2ViQ29yZUZyYW1lKCk7CisgICAgaWYgKCFmcmFt
ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgRXZlbnRIYW5kbGVyKiBoYW5kbGVyID0g
ZnJhbWUtPmV2ZW50SGFuZGxlcigpOworICAgIGlmICghaGFuZGxlcikKKyAgICAgICAgcmV0dXJu
IGtleUV2ZW50RGVmYXVsdChldmVudCk7CisKKyNpZiBQTEFURk9STShXSU5fT1MpIHx8IFBMQVRG
T1JNKExJTlVYKQorICAgIGlmICgoIWV2ZW50Lm1vZGlmaWVycyAmJiAoZXZlbnQud2luZG93c0tl
eUNvZGUgPT0gVktFWV9BUFBTKSkKKyAgICAgICAgfHwgKChldmVudC5tb2RpZmllcnMgPT0gV2Vi
SW5wdXRFdmVudDo6U2hpZnRLZXkpICYmIChldmVudC53aW5kb3dzS2V5Q29kZSA9PSBWS0VZX0Yx
MCkpKSB7CisgICAgICAgIHNlbmRDb250ZXh0TWVudUV2ZW50KGV2ZW50KTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorI2VuZGlmCisKKyAgICAvLyBJdCdzIG5vdCBjbGVhciBpZiB3ZSBz
aG91bGQgY29udGludWUgYWZ0ZXIgZGV0ZWN0aW5nIGEgY2Fwc2xvY2sga2V5cHJlc3MuCisgICAg
Ly8gSSdsbCBlcnIgb24gdGhlIHNpZGUgb2YgY29udGludWluZywgd2hpY2ggaXMgdGhlIHByZS1l
eGlzdGluZyBiZWhhdmlvdXIuCisgICAgaWYgKGV2ZW50LndpbmRvd3NLZXlDb2RlID09IFZLRVlf
Q0FQSVRBTCkKKyAgICAgICAgaGFuZGxlci0+Y2Fwc0xvY2tTdGF0ZU1heUhhdmVDaGFuZ2VkKCk7
CisKKyAgICBQbGF0Zm9ybUtleWJvYXJkRXZlbnRCdWlsZGVyIGV2dChldmVudCk7CisKKyAgICBp
ZiAoaGFuZGxlci0+a2V5RXZlbnQoZXZ0KSkgeworICAgICAgICBpZiAoV2ViSW5wdXRFdmVudDo6
UmF3S2V5RG93biA9PSBldmVudC50eXBlICYmICFldnQuaXNTeXN0ZW1LZXkoKSkKKyAgICAgICAg
ICAgIG1fc3VwcHJlc3NOZXh0S2V5cHJlc3NFdmVudCA9IHRydWU7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICAgIHJldHVybiBrZXlFdmVudERlZmF1bHQoZXZlbnQpOworfQorCiti
b29sIFdlYlZpZXdJbXBsOjphdXRvY29tcGxldGVIYW5kbGVLZXlFdmVudChjb25zdCBXZWJLZXli
b2FyZEV2ZW50JiBldmVudCkKK3sKKyAgICBpZiAoIW1fYXV0b2NvbXBsZXRlUG9wdXBTaG93aW5n
CisgICAgICAgIC8vIEhvbWUgYW5kIEVuZCBzaG91bGQgYmUgbGVmdCB0byB0aGUgdGV4dCBmaWVs
ZCB0byBwcm9jZXNzLgorICAgICAgICB8fCBldmVudC53aW5kb3dzS2V5Q29kZSA9PSBWS0VZX0hP
TUUKKyAgICAgICAgfHwgZXZlbnQud2luZG93c0tleUNvZGUgPT0gVktFWV9FTkQpCisgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAvLyBQcmVzc2luZyBkZWxldGUgdHJpZ2dlcnMgdGhlIHJlbW92
YWwgb2YgdGhlIHNlbGVjdGVkIHN1Z2dlc3Rpb24gZnJvbSB0aGUgREIuCisgICAgaWYgKGV2ZW50
LndpbmRvd3NLZXlDb2RlID09IFZLRVlfREVMRVRFCisgICAgICAgICYmIG1fYXV0b2NvbXBsZXRl
UG9wdXAtPnNlbGVjdGVkSW5kZXgoKSAhPSAtMSkgeworICAgICAgICBOb2RlKiBub2RlID0gZm9j
dXNlZFdlYkNvcmVOb2RlKCk7CisgICAgICAgIGlmICghbm9kZSB8fCAobm9kZS0+bm9kZVR5cGUo
KSAhPSBOb2RlOjpFTEVNRU5UX05PREUpKSB7CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBFbGVt
ZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpOworICAgICAgICBpZiAo
IWVsZW1lbnQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmlucHV0VGFnKSkgeworICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKworICAgICAgICBpbnQgc2VsZWN0ZWRJbmRleCA9IG1fYXV0b2NvbXBsZXRlUG9wdXAt
PnNlbGVjdGVkSW5kZXgoKTsKKyAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50
ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KGVsZW1lbnQpOworICAgICAgICBXZWJT
dHJpbmcgbmFtZSA9IGlucHV0RWxlbWVudC0+bmFtZSgpOworICAgICAgICBXZWJTdHJpbmcgdmFs
dWUgPSBtX2F1dG9jb21wbGV0ZVBvcHVwQ2xpZW50LT5pdGVtVGV4dChzZWxlY3RlZEluZGV4KTsK
KyAgICAgICAgbV9jbGllbnQtPnJlbW92ZUF1dG9maWxsU3VnZ2VzdGlvbnMobmFtZSwgdmFsdWUp
OworICAgICAgICAvLyBVcGRhdGUgdGhlIGVudHJpZXMgaW4gdGhlIGN1cnJlbnRseSBzaG93aW5n
IHBvcHVwIHRvIHJlZmxlY3QgdGhlCisgICAgICAgIC8vIGRlbGV0aW9uLgorICAgICAgICBtX2F1
dG9jb21wbGV0ZVBvcHVwQ2xpZW50LT5yZW1vdmVJdGVtQXRJbmRleChzZWxlY3RlZEluZGV4KTsK
KyAgICAgICAgcmVmcmVzaEF1dG9maWxsUG9wdXAoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIGlmICghbV9hdXRvY29tcGxldGVQb3B1cC0+aXNJbnRlcmVzdGVkSW5FdmVu
dEZvcktleShldmVudC53aW5kb3dzS2V5Q29kZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGlmIChtX2F1dG9jb21wbGV0ZVBvcHVwLT5oYW5kbGVLZXlFdmVudChQbGF0Zm9ybUtleWJv
YXJkRXZlbnRCdWlsZGVyKGV2ZW50KSkpIHsKKyAgICAgICAgLy8gV2UgbmVlZCB0byBpZ25vcmUg
dGhlIG5leHQgQ2hhciBldmVudCBhZnRlciB0aGlzIG90aGVyd2lzZSBwcmVzc2luZworICAgICAg
ICAvLyBlbnRlciB3aGVuIHNlbGVjdGluZyBhbiBpdGVtIGluIHRoZSBtZW51IHdpbGwgZ28gdG8g
dGhlIHBhZ2UuCisgICAgICAgIGlmIChXZWJJbnB1dEV2ZW50OjpSYXdLZXlEb3duID09IGV2ZW50
LnR5cGUpCisgICAgICAgICAgICBtX3N1cHByZXNzTmV4dEtleXByZXNzRXZlbnQgPSB0cnVlOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jv
b2wgV2ViVmlld0ltcGw6OmNoYXJFdmVudChjb25zdCBXZWJLZXlib2FyZEV2ZW50JiBldmVudCkK
K3sKKyAgICBBU1NFUlQoZXZlbnQudHlwZSA9PSBXZWJJbnB1dEV2ZW50OjpDaGFyKTsKKworICAg
IC8vIFBsZWFzZSByZWZlciB0byB0aGUgY29tbWVudHMgZXhwbGFpbmluZyB0aGUgbV9zdXBwcmVz
c05leHRLZXlwcmVzc0V2ZW50CisgICAgLy8gbWVtYmVyLiAgVGhlIG1fc3VwcHJlc3NOZXh0S2V5
cHJlc3NFdmVudCBpcyBzZXQgaWYgdGhlIEtleURvd24gaXMKKyAgICAvLyBoYW5kbGVkIGJ5IFdl
YmtpdC4gQSBrZXlEb3duIGV2ZW50IGlzIHR5cGljYWxseSBhc3NvY2lhdGVkIHdpdGggYQorICAg
IC8vIGtleVByZXNzKGNoYXIpIGV2ZW50IGFuZCBhIGtleVVwIGV2ZW50LiBXZSByZXNldCB0aGlz
IGZsYWcgaGVyZSBhcyBpdAorICAgIC8vIG9ubHkgYXBwbGllcyB0byB0aGUgY3VycmVudCBrZXlQ
cmVzcyBldmVudC4KKyAgICBpZiAobV9zdXBwcmVzc05leHRLZXlwcmVzc0V2ZW50KSB7CisgICAg
ICAgIG1fc3VwcHJlc3NOZXh0S2V5cHJlc3NFdmVudCA9IGZhbHNlOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICBGcmFtZSogZnJhbWUgPSBmb2N1c2VkV2ViQ29yZUZyYW1lKCk7
CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgRXZlbnRIYW5k
bGVyKiBoYW5kbGVyID0gZnJhbWUtPmV2ZW50SGFuZGxlcigpOworICAgIGlmICghaGFuZGxlcikK
KyAgICAgICAgcmV0dXJuIGtleUV2ZW50RGVmYXVsdChldmVudCk7CisKKyAgICBQbGF0Zm9ybUtl
eWJvYXJkRXZlbnRCdWlsZGVyIGV2dChldmVudCk7CisgICAgaWYgKCFldnQuaXNDaGFyYWN0ZXJL
ZXkoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBTYWZhcmkgMy4xIGRvZXMgbm90
IHBhc3Mgb2ZmIHdpbmRvd3Mgc3lzdGVtIGtleSBtZXNzYWdlcyAoV01fU1lTQ0hBUikgdG8KKyAg
ICAvLyB0aGUgZXZlbnRIYW5kbGVyOjprZXlFdmVudC4gV2UgbWltaWMgdGhpcyBiZWhhdmlvciBv
biBhbGwgcGxhdGZvcm1zIHNpbmNlCisgICAgLy8gZm9yIG5vdyB3ZSBhcmUgY29udmVydGluZyBv
dGhlciBwbGF0Zm9ybSdzIGtleSBldmVudHMgdG8gd2luZG93cyBrZXkKKyAgICAvLyBldmVudHMu
CisgICAgaWYgKGV2dC5pc1N5c3RlbUtleSgpKQorICAgICAgICByZXR1cm4gaGFuZGxlci0+aGFu
ZGxlQWNjZXNzS2V5KGV2dCk7CisKKyAgICBpZiAoIWhhbmRsZXItPmtleUV2ZW50KGV2dCkpCisg
ICAgICAgIHJldHVybiBrZXlFdmVudERlZmF1bHQoZXZlbnQpOworCisgICAgcmV0dXJuIHRydWU7
Cit9CisKKy8vIFRoZSBXZWJWaWV3SW1wbDo6U2VuZENvbnRleHRNZW51RXZlbnQgZnVuY3Rpb24g
aXMgYmFzZWQgb24gdGhlIFdlYmtpdAorLy8gZnVuY3Rpb24KKy8vIGJvb2wgV2ViVmlldzo6aGFu
ZGxlQ29udGV4dE1lbnVFdmVudChXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKSBpbgorLy8g
d2Via2l0XHdlYmtpdFx3aW5cV2ViVmlldy5jcHAuIFRoZSBvbmx5IHNpZ25pZmljYW50IGNoYW5n
ZSBpbiB0aGlzCisvLyBmdW5jdGlvbiBpcyB0aGUgY29kZSB0byBjb252ZXJ0IGZyb20gYSBLZXli
b2FyZCBldmVudCB0byB0aGUgUmlnaHQKKy8vIE1vdXNlIGJ1dHRvbiB1cCBldmVudC4KKy8vCisv
LyBUaGlzIGZ1bmN0aW9uIGlzIGFuIHVnbHkgY29weS9wYXN0ZSBhbmQgc2hvdWxkIGJlIGNsZWFu
ZWQgdXAgd2hlbiB0aGUKKy8vIFdlYktpdFdpbiB2ZXJzaW9uIGlzIGNsZWFuZWQ6IGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQzOAorI2lmIFBMQVRGT1JNKFdJTl9P
UykgfHwgUExBVEZPUk0oTElOVVgpCisvLyBGSVhNRTogaW1wbGVtZW50IG9uIE1hYworYm9vbCBX
ZWJWaWV3SW1wbDo6c2VuZENvbnRleHRNZW51RXZlbnQoY29uc3QgV2ViS2V5Ym9hcmRFdmVudCYg
ZXZlbnQpCit7CisgICAgc3RhdGljIGNvbnN0IGludCBrQ29udGV4dE1lbnVNYXJnaW4gPSAxOwor
ICAgIEZyYW1lKiBtYWluRnJhbWVJbXBsID0gcGFnZSgpLT5tYWluRnJhbWUoKTsKKyAgICBGcmFt
ZVZpZXcqIHZpZXcgPSBtYWluRnJhbWVJbXBsLT52aWV3KCk7CisgICAgaWYgKCF2aWV3KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBJbnRQb2ludCBjb29yZHMoLTEsIC0xKTsKKyNpZiBQ
TEFURk9STShXSU5fT1MpCisgICAgaW50IHJpZ2h0QWxpZ25lZCA9IDo6R2V0U3lzdGVtTWV0cmlj
cyhTTV9NRU5VRFJPUEFMSUdOTUVOVCk7CisjZWxzZQorICAgIGludCByaWdodEFsaWduZWQgPSAw
OworI2VuZGlmCisgICAgSW50UG9pbnQgbG9jYXRpb247CisKKyAgICAvLyBUaGUgY29udGV4dCBt
ZW51IGV2ZW50IHdhcyBnZW5lcmF0ZWQgZnJvbSB0aGUga2V5Ym9hcmQsIHNvIHNob3cgdGhlCisg
ICAgLy8gY29udGV4dCBtZW51IGJ5IHRoZSBjdXJyZW50IHNlbGVjdGlvbi4KKyAgICBQb3NpdGlv
biBzdGFydCA9IG1haW5GcmFtZUltcGwtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS5zdGFydCgp
OworICAgIFBvc2l0aW9uIGVuZCA9IG1haW5GcmFtZUltcGwtPnNlbGVjdGlvbigpLT5zZWxlY3Rp
b24oKS5lbmQoKTsKKworICAgIGlmICghc3RhcnQubm9kZSgpIHx8ICFlbmQubm9kZSgpKSB7Cisg
ICAgICAgIGxvY2F0aW9uID0gSW50UG9pbnQoCisgICAgICAgICAgICByaWdodEFsaWduZWQgPyB2
aWV3LT5jb250ZW50c1dpZHRoKCkgLSBrQ29udGV4dE1lbnVNYXJnaW4gOiBrQ29udGV4dE1lbnVN
YXJnaW4sCisgICAgICAgICAgICBrQ29udGV4dE1lbnVNYXJnaW4pOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBzdGFydC5ub2RlKCktPnJlbmRlcmVyKCk7
CisgICAgICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb24gPSBtYWluRnJhbWVJbXBsLT5zZWxlY3Rpb24o
KS0+dG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICAgICAgSW50UmVjdCBmaXJzdFJlY3QgPSBtYWlu
RnJhbWVJbXBsLT5maXJzdFJlY3RGb3JSYW5nZShzZWxlY3Rpb24uZ2V0KCkpOworCisgICAgICAg
IGludCB4ID0gcmlnaHRBbGlnbmVkID8gZmlyc3RSZWN0LnJpZ2h0KCkgOiBmaXJzdFJlY3QueCgp
OworICAgICAgICBsb2NhdGlvbiA9IEludFBvaW50KHgsIGZpcnN0UmVjdC5ib3R0b20oKSk7Cisg
ICAgfQorCisgICAgbG9jYXRpb24gPSB2aWV3LT5jb250ZW50c1RvV2luZG93KGxvY2F0aW9uKTsK
KyAgICAvLyBGSVhNRTogVGhlIEludFNpemUoMCwgLTEpIGlzIGEgaGFjayB0byBnZXQgdGhlIGhp
dC10ZXN0aW5nIHRvIHJlc3VsdCBpbgorICAgIC8vIHRoZSBzZWxlY3RlZCBlbGVtZW50LiBJZGVh
bGx5IHdlJ2QgaGF2ZSB0aGUgcG9zaXRpb24gb2YgYSBjb250ZXh0IG1lbnUKKyAgICAvLyBldmVu
dCBiZSBzZXBhcmF0ZSBmcm9tIGl0cyB0YXJnZXQgbm9kZS4KKyAgICBjb29yZHMgPSBsb2NhdGlv
biArIEludFNpemUoMCwgLTEpOworCisgICAgLy8gVGhlIGNvbnRleHRNZW51Q29udHJvbGxlcigp
IGhvbGRzIG9udG8gdGhlIGxhc3QgY29udGV4dCBtZW51IHRoYXQgd2FzCisgICAgLy8gcG9wcGVk
IHVwIG9uIHRoZSBwYWdlIHVudGlsIGEgbmV3IG9uZSBpcyBjcmVhdGVkLiBXZSBuZWVkIHRvIGNs
ZWFyCisgICAgLy8gdGhpcyBtZW51IGJlZm9yZSBwcm9wYWdhdGluZyB0aGUgZXZlbnQgdGhyb3Vn
aCB0aGUgRE9NIHNvIHRoYXQgd2UgY2FuCisgICAgLy8gZGV0ZWN0IGlmIHdlIGNyZWF0ZSBhIG5l
dyBtZW51IGZvciB0aGlzIGV2ZW50LCBzaW5jZSB3ZSB3b24ndCBjcmVhdGUKKyAgICAvLyBhIG5l
dyBtZW51IGlmIHRoZSBET00gc3dhbGxvd3MgdGhlIGV2ZW50IGFuZCB0aGUgZGVmYXVsdEV2ZW50
SGFuZGxlciBkb2VzCisgICAgLy8gbm90IHJ1bi4KKyAgICBwYWdlKCktPmNvbnRleHRNZW51Q29u
dHJvbGxlcigpLT5jbGVhckNvbnRleHRNZW51KCk7CisKKyAgICBGcmFtZSogZm9jdXNlZEZyYW1l
ID0gcGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CisgICAg
Zm9jdXNlZEZyYW1lLT52aWV3KCktPnNldEN1cnNvcihwb2ludGVyQ3Vyc29yKCkpOworICAgIFdl
Yk1vdXNlRXZlbnQgbW91c2VFdmVudDsKKyAgICBtb3VzZUV2ZW50LmJ1dHRvbiA9IFdlYk1vdXNl
RXZlbnQ6OkJ1dHRvblJpZ2h0OworICAgIG1vdXNlRXZlbnQueCA9IGNvb3Jkcy54KCk7CisgICAg
bW91c2VFdmVudC55ID0gY29vcmRzLnkoKTsKKyAgICBtb3VzZUV2ZW50LnR5cGUgPSBXZWJJbnB1
dEV2ZW50OjpNb3VzZVVwOworCisgICAgUGxhdGZvcm1Nb3VzZUV2ZW50QnVpbGRlciBwbGF0Zm9y
bUV2ZW50KHZpZXcsIG1vdXNlRXZlbnQpOworCisgICAgbV9jb250ZXh0TWVudUFsbG93ZWQgPSB0
cnVlOworICAgIGJvb2wgaGFuZGxlZCA9IGZvY3VzZWRGcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNl
bmRDb250ZXh0TWVudUV2ZW50KHBsYXRmb3JtRXZlbnQpOworICAgIG1fY29udGV4dE1lbnVBbGxv
d2VkID0gZmFsc2U7CisgICAgcmV0dXJuIGhhbmRsZWQ7Cit9CisjZW5kaWYKKworYm9vbCBXZWJW
aWV3SW1wbDo6a2V5RXZlbnREZWZhdWx0KGNvbnN0IFdlYktleWJvYXJkRXZlbnQmIGV2ZW50KQor
eworICAgIEZyYW1lKiBmcmFtZSA9IGZvY3VzZWRXZWJDb3JlRnJhbWUoKTsKKyAgICBpZiAoIWZy
YW1lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHsK
KyAgICBjYXNlIFdlYklucHV0RXZlbnQ6OkNoYXI6CisgICAgICAgIGlmIChldmVudC53aW5kb3dz
S2V5Q29kZSA9PSBWS0VZX1NQQUNFKSB7CisgICAgICAgICAgICBpbnQga2V5Q29kZSA9ICgoZXZl
bnQubW9kaWZpZXJzICYgV2ViSW5wdXRFdmVudDo6U2hpZnRLZXkpID8gVktFWV9QUklPUiA6IFZL
RVlfTkVYVCk7CisgICAgICAgICAgICByZXR1cm4gc2Nyb2xsVmlld1dpdGhLZXlib2FyZChrZXlD
b2RlLCBldmVudC5tb2RpZmllcnMpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgV2ViSW5wdXRFdmVudDo6UmF3S2V5RG93bjoKKyAgICAgICAgaWYgKGV2ZW50Lm1vZGlmaWVy
cyA9PSBXZWJJbnB1dEV2ZW50OjpDb250cm9sS2V5KSB7CisgICAgICAgICAgICBzd2l0Y2ggKGV2
ZW50LndpbmRvd3NLZXlDb2RlKSB7CisgICAgICAgICAgICBjYXNlICdBJzoKKyAgICAgICAgICAg
ICAgICBmb2N1c2VkRnJhbWUoKS0+ZXhlY3V0ZUNvbW1hbmQoV2ViU3RyaW5nOjpmcm9tVVRGOCgi
U2VsZWN0QWxsIikpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
Y2FzZSBWS0VZX0lOU0VSVDoKKyAgICAgICAgICAgIGNhc2UgJ0MnOgorICAgICAgICAgICAgICAg
IGZvY3VzZWRGcmFtZSgpLT5leGVjdXRlQ29tbWFuZChXZWJTdHJpbmc6OmZyb21VVEY4KCJDb3B5
IikpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgLy8gTWF0Y2gg
RkYgYmVoYXZpb3IgaW4gdGhlIHNlbnNlIHRoYXQgQ3RybCtob21lL2VuZCBhcmUgdGhlIG9ubHkg
Q3RybAorICAgICAgICAgICAgLy8ga2V5IGNvbWJpbmF0aW9ucyB3aGljaCBhZmZlY3Qgc2Nyb2xs
aW5nLiBTYWZhcmkgaXMgYnVnZ3kgaW4gdGhlCisgICAgICAgICAgICAvLyBzZW5zZSB0aGF0IGl0
IHNjcm9sbHMgdGhlIHBhZ2UgZm9yIGFsbCBDdHJsK3Njcm9sbGluZyBrZXkKKyAgICAgICAgICAg
IC8vIGNvbWJpbmF0aW9ucy4gRm9yIGUuZy4gQ3RybCtwZ3VwL3BnZG4vdXAvZG93biwgZXRjLgor
ICAgICAgICAgICAgY2FzZSBWS0VZX0hPTUU6CisgICAgICAgICAgICBjYXNlIFZLRVlfRU5EOgor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYg
KCFldmVudC5pc1N5c3RlbUtleSAmJiAhKGV2ZW50Lm1vZGlmaWVycyAmIFdlYklucHV0RXZlbnQ6
OlNoaWZ0S2V5KSkKKyAgICAgICAgICAgIHJldHVybiBzY3JvbGxWaWV3V2l0aEtleWJvYXJkKGV2
ZW50LndpbmRvd3NLZXlDb2RlLCBldmVudC5tb2RpZmllcnMpOworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQor
Citib29sIFdlYlZpZXdJbXBsOjpzY3JvbGxWaWV3V2l0aEtleWJvYXJkKGludCBrZXlDb2RlLCBp
bnQgbW9kaWZpZXJzKQoreworICAgIFNjcm9sbERpcmVjdGlvbiBzY3JvbGxEaXJlY3Rpb247Cisg
ICAgU2Nyb2xsR3JhbnVsYXJpdHkgc2Nyb2xsR3JhbnVsYXJpdHk7CisKKyAgICBzd2l0Y2ggKGtl
eUNvZGUpIHsKKyAgICBjYXNlIFZLRVlfTEVGVDoKKyAgICAgICAgc2Nyb2xsRGlyZWN0aW9uID0g
U2Nyb2xsTGVmdDsKKyAgICAgICAgc2Nyb2xsR3JhbnVsYXJpdHkgPSBTY3JvbGxCeUxpbmU7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgVktFWV9SSUdIVDoKKyAgICAgICAgc2Nyb2xsRGlyZWN0
aW9uID0gU2Nyb2xsUmlnaHQ7CisgICAgICAgIHNjcm9sbEdyYW51bGFyaXR5ID0gU2Nyb2xsQnlM
aW5lOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFZLRVlfVVA6CisgICAgICAgIHNjcm9sbERp
cmVjdGlvbiA9IFNjcm9sbFVwOworICAgICAgICBzY3JvbGxHcmFudWxhcml0eSA9IFNjcm9sbEJ5
TGluZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBWS0VZX0RPV046CisgICAgICAgIHNjcm9s
bERpcmVjdGlvbiA9IFNjcm9sbERvd247CisgICAgICAgIHNjcm9sbEdyYW51bGFyaXR5ID0gU2Ny
b2xsQnlMaW5lOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFZLRVlfSE9NRToKKyAgICAgICAg
c2Nyb2xsRGlyZWN0aW9uID0gU2Nyb2xsVXA7CisgICAgICAgIHNjcm9sbEdyYW51bGFyaXR5ID0g
U2Nyb2xsQnlEb2N1bWVudDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBWS0VZX0VORDoKKyAg
ICAgICAgc2Nyb2xsRGlyZWN0aW9uID0gU2Nyb2xsRG93bjsKKyAgICAgICAgc2Nyb2xsR3JhbnVs
YXJpdHkgPSBTY3JvbGxCeURvY3VtZW50OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFZLRVlf
UFJJT1I6ICAvLyBwYWdlIHVwCisgICAgICAgIHNjcm9sbERpcmVjdGlvbiA9IFNjcm9sbFVwOwor
ICAgICAgICBzY3JvbGxHcmFudWxhcml0eSA9IFNjcm9sbEJ5UGFnZTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBWS0VZX05FWFQ6ICAvLyBwYWdlIGRvd24KKyAgICAgICAgc2Nyb2xsRGlyZWN0
aW9uID0gU2Nyb2xsRG93bjsKKyAgICAgICAgc2Nyb2xsR3JhbnVsYXJpdHkgPSBTY3JvbGxCeVBh
Z2U7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICByZXR1cm4gcHJvcGFnYXRlU2Nyb2xsKHNjcm9sbERpcmVjdGlvbiwgc2Ny
b2xsR3JhbnVsYXJpdHkpOworfQorCitib29sIFdlYlZpZXdJbXBsOjpwcm9wYWdhdGVTY3JvbGwo
U2Nyb2xsRGlyZWN0aW9uIHNjcm9sbERpcmVjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTY3JvbGxHcmFudWxhcml0eSBzY3JvbGxHcmFudWxhcml0eSkKK3sKKyAgICBG
cmFtZSogZnJhbWUgPSBmb2N1c2VkV2ViQ29yZUZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYm9vbCBzY3JvbGxIYW5kbGVkID0KKyAgICAgICAg
ZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zY3JvbGxPdmVyZmxvdyhzY3JvbGxEaXJlY3Rpb24sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsR3JhbnVs
YXJpdHkpOworICAgIEZyYW1lKiBjdXJyZW50RnJhbWUgPSBmcmFtZTsKKyAgICB3aGlsZSAoIXNj
cm9sbEhhbmRsZWQgJiYgY3VycmVudEZyYW1lKSB7CisgICAgICAgIHNjcm9sbEhhbmRsZWQgPSBj
dXJyZW50RnJhbWUtPnZpZXcoKS0+c2Nyb2xsKHNjcm9sbERpcmVjdGlvbiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsR3JhbnVsYXJp
dHkpOworICAgICAgICBjdXJyZW50RnJhbWUgPSBjdXJyZW50RnJhbWUtPnRyZWUoKS0+cGFyZW50
KCk7CisgICAgfQorICAgIHJldHVybiBzY3JvbGxIYW5kbGVkOworfQorCitGcmFtZSogV2ViVmll
d0ltcGw6OmZvY3VzZWRXZWJDb3JlRnJhbWUoKQoreworICAgIHJldHVybiBtX3BhZ2UuZ2V0KCkg
PyBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKSA6IDA7Cit9
CisKK1dlYlZpZXdJbXBsKiBXZWJWaWV3SW1wbDo6ZnJvbVBhZ2UoUGFnZSogcGFnZSkKK3sKKyAg
ICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PENocm9tZUNsaWVudEltcGwqPihwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCkpLT53ZWJWaWV3KCk7
Cit9CisKKy8vIFdlYldpZGdldCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordm9pZCBXZWJWaWV3SW1wbDo6Y2xvc2Uo
KQoreworICAgIFJlZlB0cjxXZWJGcmFtZUltcGw+IG1haW5GcmFtZUltcGw7CisKKyAgICBpZiAo
bV9wYWdlLmdldCgpKSB7CisgICAgICAgIC8vIEluaXRpYXRlIHNodXRkb3duIGZvciB0aGUgZW50
aXJlIGZyYW1lc2V0LiAgVGhpcyB3aWxsIGNhdXNlIGEgbG90IG9mCisgICAgICAgIC8vIG5vdGlm
aWNhdGlvbnMgdG8gYmUgc2VudC4KKyAgICAgICAgaWYgKG1fcGFnZS0+bWFpbkZyYW1lKCkpIHsK
KyAgICAgICAgICAgIG1haW5GcmFtZUltcGwgPSBXZWJGcmFtZUltcGw6OmZyb21GcmFtZShtX3Bh
Z2UtPm1haW5GcmFtZSgpKTsKKyAgICAgICAgICAgIG1fcGFnZS0+bWFpbkZyYW1lKCktPmxvYWRl
cigpLT5mcmFtZURldGFjaGVkKCk7CisgICAgICAgIH0KKyAgICAgICAgbV9wYWdlLmNsZWFyKCk7
CisgICAgfQorCisgICAgLy8gU2hvdWxkIGhhcHBlbiBhZnRlciBtX3BhZ2UuY2xlYXIoKS4KKyAg
ICBpZiAobV9kZXZUb29sc0FnZW50LmdldCgpKQorICAgICAgICBtX2RldlRvb2xzQWdlbnQuY2xl
YXIoKTsKKworICAgIC8vIFdlIGRyb3AgdGhlIGNsaWVudCBhZnRlciB0aGUgcGFnZSBoYXMgYmVl
biBkZXN0cm95ZWQgdG8gc3VwcG9ydCB0aGUKKyAgICAvLyBXZWJGcmFtZUNsaWVudDo6ZGlkRGVz
dHJveVNjcmlwdENvbnRleHQgbWV0aG9kLgorICAgIGlmIChtYWluRnJhbWVJbXBsKQorICAgICAg
ICBtYWluRnJhbWVJbXBsLT5kcm9wQ2xpZW50KCk7CisKKyAgICAvLyBSZXNldCB0aGUgZGVsZWdh
dGUgdG8gcHJldmVudCBub3RpZmljYXRpb25zIGJlaW5nIHNlbnQgYXMgd2UncmUgYmVpbmcKKyAg
ICAvLyBkZWxldGVkLgorICAgIG1fY2xpZW50ID0gMDsKKworICAgIGRlcmVmKCk7ICAvLyBCYWxh
bmNlcyByZWYoKSBhY3F1aXJlZCBpbiBXZWJWaWV3OjpjcmVhdGUKK30KKwordm9pZCBXZWJWaWV3
SW1wbDo6cmVzaXplKGNvbnN0IFdlYlNpemUmIG5ld1NpemUpCit7CisgICAgaWYgKG1fc2l6ZSA9
PSBuZXdTaXplKQorICAgICAgICByZXR1cm47CisgICAgbV9zaXplID0gbmV3U2l6ZTsKKworICAg
IGlmIChtYWluRnJhbWVJbXBsKCktPmZyYW1lVmlldygpKSB7CisgICAgICAgIG1haW5GcmFtZUlt
cGwoKS0+ZnJhbWVWaWV3KCktPnJlc2l6ZShtX3NpemUud2lkdGgsIG1fc2l6ZS5oZWlnaHQpOwor
ICAgICAgICBtYWluRnJhbWVJbXBsKCktPmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5zZW5kUmVz
aXplRXZlbnQoKTsKKyAgICB9CisKKyAgICBpZiAobV9jbGllbnQpIHsKKyAgICAgICAgV2ViUmVj
dCBkYW1hZ2VkUmVjdCgwLCAwLCBtX3NpemUud2lkdGgsIG1fc2l6ZS5oZWlnaHQpOworICAgICAg
ICBtX2NsaWVudC0+ZGlkSW52YWxpZGF0ZVJlY3QoZGFtYWdlZFJlY3QpOworICAgIH0KK30KKwor
dm9pZCBXZWJWaWV3SW1wbDo6bGF5b3V0KCkKK3sKKyAgICBXZWJGcmFtZUltcGwqIHdlYmZyYW1l
ID0gbWFpbkZyYW1lSW1wbCgpOworICAgIGlmICh3ZWJmcmFtZSkgeworICAgICAgICAvLyBJbiBv
cmRlciBmb3Igb3VyIGNoaWxkIEhXTkRzIChOYXRpdmVXaW5kb3dXaWRnZXRzKSB0byB1cGRhdGUg
cHJvcGVybHksCisgICAgICAgIC8vIHRoZXkgbmVlZCB0byBiZSB0b2xkIHRoYXQgd2UgYXJlIHVw
ZGF0aW5nIHRoZSBzY3JlZW4uICBUaGUgcHJvYmxlbSBpcworICAgICAgICAvLyB0aGF0IHRoZSBu
YXRpdmUgd2lkZ2V0cyBuZWVkIHRvIHJlY2FsY3VsYXRlIHRoZWlyIGNsaXAgcmVnaW9uIGFuZCBu
b3QKKyAgICAgICAgLy8gb3ZlcmxhcCBhbnkgb2Ygb3VyIG5vbi1uYXRpdmUgd2lkZ2V0cy4gIFRv
IGZvcmNlIHRoZSByZXNpemluZywgY2FsbAorICAgICAgICAvLyBzZXRGcmFtZVJlY3QoKS4gIFRo
aXMgd2lsbCBiZSBhIHF1aWNrIG9wZXJhdGlvbiBmb3IgbW9zdCBmcmFtZXMsIGJ1dAorICAgICAg
ICAvLyB0aGUgTmF0aXZlV2luZG93V2lkZ2V0cyB3aWxsIHVwZGF0ZSBhIHByb3BlciBjbGlwcGlu
ZyByZWdpb24uCisgICAgICAgIEZyYW1lVmlldyogdmlldyA9IHdlYmZyYW1lLT5mcmFtZVZpZXco
KTsKKyAgICAgICAgaWYgKHZpZXcpCisgICAgICAgICAgICB2aWV3LT5zZXRGcmFtZVJlY3Qodmll
dy0+ZnJhbWVSZWN0KCkpOworCisgICAgICAgIC8vIHNldEZyYW1lUmVjdCBtYXkgaGF2ZSB0aGUg
c2lkZS1lZmZlY3Qgb2YgY2F1c2luZyBleGlzdGluZyBwYWdlCisgICAgICAgIC8vIGxheW91dCB0
byBiZSBpbnZhbGlkYXRlZCwgc28gbGF5b3V0IG5lZWRzIHRvIGJlIGNhbGxlZCBsYXN0LgorCisg
ICAgICAgIHdlYmZyYW1lLT5sYXlvdXQoKTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6
OnBhaW50KFdlYkNhbnZhcyogY2FudmFzLCBjb25zdCBXZWJSZWN0JiByZWN0KQoreworICAgIFdl
YkZyYW1lSW1wbCogd2ViZnJhbWUgPSBtYWluRnJhbWVJbXBsKCk7CisgICAgaWYgKHdlYmZyYW1l
KQorICAgICAgICB3ZWJmcmFtZS0+cGFpbnQoY2FudmFzLCByZWN0KTsKK30KKworLy8gRklYTUU6
IG1fY3VycmVudElucHV0RXZlbnQgc2hvdWxkIGJlIHJlbW92ZWQgb25jZSBDaHJvbWVDbGllbnQ6
OnNob3coKSBjYW4KKy8vIGdldCB0aGUgY3VycmVudC1ldmVudCBpbmZvcm1hdGlvbiBmcm9tIFdl
YkNvcmUuCitjb25zdCBXZWJJbnB1dEV2ZW50KiBXZWJWaWV3SW1wbDo6bV9jdXJyZW50SW5wdXRF
dmVudCA9IDA7CisKK2Jvb2wgV2ViVmlld0ltcGw6OmhhbmRsZUlucHV0RXZlbnQoY29uc3QgV2Vi
SW5wdXRFdmVudCYgaW5wdXRFdmVudCkKK3sKKyAgICAvLyBJZiB3ZSd2ZSBzdGFydGVkIGEgZHJh
ZyBhbmQgZHJvcCBvcGVyYXRpb24sIGlnbm9yZSBpbnB1dCBldmVudHMgdW50aWwKKyAgICAvLyB3
ZSdyZSBkb25lLgorICAgIGlmIChtX2RvaW5nRHJhZ0FuZERyb3ApCisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgaWYgKG1faWdub3JlSW5wdXRFdmVudHMpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgLy8gRklYTUU6IFJlbW92ZSBtX2N1cnJlbnRJbnB1dEV2ZW50LgorICAgIC8vIFRo
aXMgb25seSBleGlzdHMgdG8gYWxsb3cgQ2hyb21lQ2xpZW50OjpzaG93KCkgdG8ga25vdyB3aGlj
aCBtb3VzZSBidXR0b24KKyAgICAvLyB0cmlnZ2VyZWQgYSB3aW5kb3cub3BlbiBldmVudC4KKyAg
ICAvLyBTYWZhcmkgbXVzdCBwZXJmb3JtIGEgc2ltaWxhciBoYWNrLCBvdXJzIGlzIGluIG91ciBX
ZWJLaXQgZ2x1ZSBsYXllcgorICAgIC8vIHRoZWlycyBpcyBpbiB0aGUgYXBwbGljYXRpb24uICBU
aGlzIHNob3VsZCBnbyB3aGVuIFdlYkNvcmUgY2FuIGJlIGZpeGVkCisgICAgLy8gdG8gcGFzcyBt
b3JlIGV2ZW50IGluZm9ybWF0aW9uIHRvIENocm9tZUNsaWVudDo6c2hvdygpCisgICAgbV9jdXJy
ZW50SW5wdXRFdmVudCA9ICZpbnB1dEV2ZW50OworCisgICAgYm9vbCBoYW5kbGVkID0gdHJ1ZTsK
KworICAgIC8vIEZJWE1FOiBXZWJLaXQgc2VlbXMgdG8gYWx3YXlzIHJldHVybiBmYWxzZSBvbiBt
b3VzZSBldmVudHMgcHJvY2Vzc2luZworICAgIC8vIG1ldGhvZHMuIEZvciBub3cgd2UnbGwgYXNz
dW1lIGl0IGhhcyBwcm9jZXNzZWQgdGhlbSAoYXMgd2UgYXJlIG9ubHkKKyAgICAvLyBpbnRlcmVz
dGVkIGluIHdoZXRoZXIga2V5Ym9hcmQgZXZlbnRzIGFyZSBwcm9jZXNzZWQpLgorICAgIHN3aXRj
aCAoaW5wdXRFdmVudC50eXBlKSB7CisgICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpNb3VzZU1vdmU6
CisgICAgICAgIG1vdXNlTW92ZSgqc3RhdGljX2Nhc3Q8Y29uc3QgV2ViTW91c2VFdmVudCo+KCZp
bnB1dEV2ZW50KSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpN
b3VzZUxlYXZlOgorICAgICAgICBtb3VzZUxlYXZlKCpzdGF0aWNfY2FzdDxjb25zdCBXZWJNb3Vz
ZUV2ZW50Kj4oJmlucHV0RXZlbnQpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdlYklu
cHV0RXZlbnQ6Ok1vdXNlV2hlZWw6CisgICAgICAgIG1vdXNlV2hlZWwoKnN0YXRpY19jYXN0PGNv
bnN0IFdlYk1vdXNlV2hlZWxFdmVudCo+KCZpbnB1dEV2ZW50KSk7CisgICAgICAgIGJyZWFrOwor
CisgICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpNb3VzZURvd246CisgICAgICAgIG1vdXNlRG93bigq
c3RhdGljX2Nhc3Q8Y29uc3QgV2ViTW91c2VFdmVudCo+KCZpbnB1dEV2ZW50KSk7CisgICAgICAg
IGJyZWFrOworCisgICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpNb3VzZVVwOgorICAgICAgICBtb3Vz
ZVVwKCpzdGF0aWNfY2FzdDxjb25zdCBXZWJNb3VzZUV2ZW50Kj4oJmlucHV0RXZlbnQpKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdlYklucHV0RXZlbnQ6OlJhd0tleURvd246CisgICAg
Y2FzZSBXZWJJbnB1dEV2ZW50OjpLZXlEb3duOgorICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6S2V5
VXA6CisgICAgICAgIGhhbmRsZWQgPSBrZXlFdmVudCgqc3RhdGljX2Nhc3Q8Y29uc3QgV2ViS2V5
Ym9hcmRFdmVudCo+KCZpbnB1dEV2ZW50KSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBX
ZWJJbnB1dEV2ZW50OjpDaGFyOgorICAgICAgICBoYW5kbGVkID0gY2hhckV2ZW50KCpzdGF0aWNf
Y2FzdDxjb25zdCBXZWJLZXlib2FyZEV2ZW50Kj4oJmlucHV0RXZlbnQpKTsKKyAgICAgICAgYnJl
YWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBoYW5kbGVkID0gZmFsc2U7CisgICAgfQorCisg
ICAgbV9jdXJyZW50SW5wdXRFdmVudCA9IDA7CisKKyAgICByZXR1cm4gaGFuZGxlZDsKK30KKwor
dm9pZCBXZWJWaWV3SW1wbDo6bW91c2VDYXB0dXJlTG9zdCgpCit7Cit9CisKK3ZvaWQgV2ViVmll
d0ltcGw6OnNldEZvY3VzKGJvb2wgZW5hYmxlKQoreworICAgIG1fcGFnZS0+Zm9jdXNDb250cm9s
bGVyKCktPnNldEZvY3VzZWQoZW5hYmxlKTsKKyAgICBpZiAoZW5hYmxlKSB7CisgICAgICAgIC8v
IE5vdGUgdGhhdCB3ZSBkb24ndCBjYWxsIHNldEFjdGl2ZSgpIHdoZW4gZGlzYWJsZWQgYXMgdGhp
cyBjYXVzZSBleHRyYQorICAgICAgICAvLyBmb2N1cy9ibHVyIGV2ZW50cyB0byBiZSBkaXNwYXRj
aGVkLgorICAgICAgICBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5zZXRBY3RpdmUodHJ1ZSk7
CisgICAgICAgIFJlZlB0cjxGcmFtZT4gZm9jdXNlZEZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRy
b2xsZXIoKS0+Zm9jdXNlZEZyYW1lKCk7CisgICAgICAgIGlmIChmb2N1c2VkRnJhbWUpIHsKKyAg
ICAgICAgICAgIE5vZGUqIGZvY3VzZWROb2RlID0gZm9jdXNlZEZyYW1lLT5kb2N1bWVudCgpLT5m
b2N1c2VkTm9kZSgpOworICAgICAgICAgICAgaWYgKGZvY3VzZWROb2RlICYmIGZvY3VzZWROb2Rl
LT5pc0VsZW1lbnROb2RlKCkKKyAgICAgICAgICAgICAgICAmJiBmb2N1c2VkRnJhbWUtPnNlbGVj
dGlvbigpLT5zZWxlY3Rpb24oKS5pc05vbmUoKSkgeworICAgICAgICAgICAgICAgIC8vIElmIHRo
ZSBzZWxlY3Rpb24gd2FzIGNsZWFyZWQgd2hpbGUgdGhlIFdlYlZpZXcgd2FzIG5vdAorICAgICAg
ICAgICAgICAgIC8vIGZvY3VzZWQsIHRoZW4gdGhlIGZvY3VzIGVsZW1lbnQgc2hvd3Mgd2l0aCBh
IGZvY3VzIHJpbmcgYnV0CisgICAgICAgICAgICAgICAgLy8gbm8gY2FyZXQgYW5kIGRvZXMgcmVz
cG9uZCB0byBrZXlib2FyZCBpbnB1dHMuCisgICAgICAgICAgICAgICAgRWxlbWVudCogZWxlbWVu
dCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihmb2N1c2VkTm9kZSk7CisgICAgICAgICAgICAgICAg
aWYgKGVsZW1lbnQtPmlzVGV4dEZvcm1Db250cm9sKCkpCisgICAgICAgICAgICAgICAgICAgIGVs
ZW1lbnQtPnVwZGF0ZUZvY3VzQXBwZWFyYW5jZSh0cnVlKTsKKyAgICAgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gdXBkYXRlRm9jdXNBcHBlYXJhbmNlKCkgc2VsZWN0
cyBhbGwgdGhlIHRleHQgb2YKKyAgICAgICAgICAgICAgICAgICAgLy8gY29udGVudHNlZGl0YWJs
ZSBESVZzLiBTbyB3ZSBzZXQgdGhlIHNlbGVjdGlvbiBleHBsaWNpdGx5CisgICAgICAgICAgICAg
ICAgICAgIC8vIGluc3RlYWQuIE5vdGUgdGhhdCB0aGlzIGhhcyB0aGUgc2lkZSBlZmZlY3Qgb2Yg
bW92aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAvLyBjYXJldCBiYWNrIHRvIHRoZSBiZWdp
bmluZyBvZiB0aGUgdGV4dC4KKyAgICAgICAgICAgICAgICAgICAgUG9zaXRpb24gcG9zaXRpb24o
Zm9jdXNlZE5vZGUsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBv
c2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpOworICAgICAgICAgICAgICAgICAgICBm
b2N1c2VkRnJhbWUtPnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb24oCisgICAgICAgICAgICAgICAg
ICAgICAgICBWaXNpYmxlU2VsZWN0aW9uKHBvc2l0aW9uLCBTRUxfREVGQVVMVF9BRkZJTklUWSkp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBt
X2ltZUFjY2VwdEV2ZW50cyA9IHRydWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaGlkZUF1dG9D
b21wbGV0ZVBvcHVwKCk7CisKKyAgICAgICAgLy8gQ2xlYXIgZm9jdXMgb24gdGhlIGN1cnJlbnRs
eSBmb2N1c2VkIGZyYW1lIGlmIGFueS4KKyAgICAgICAgaWYgKCFtX3BhZ2UuZ2V0KCkpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgRnJhbWUqIGZyYW1lID0gbV9wYWdlLT5tYWluRnJh
bWUoKTsKKyAgICAgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICBSZWZQdHI8RnJhbWU+IGZvY3VzZWRGcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkt
PmZvY3VzZWRGcmFtZSgpOworICAgICAgICBpZiAoZm9jdXNlZEZyYW1lLmdldCgpKSB7CisgICAg
ICAgICAgICAvLyBGaW5pc2ggYW4gb25nb2luZyBjb21wb3NpdGlvbiB0byBkZWxldGUgdGhlIGNv
bXBvc2l0aW9uIG5vZGUuCisgICAgICAgICAgICBFZGl0b3IqIGVkaXRvciA9IGZvY3VzZWRGcmFt
ZS0+ZWRpdG9yKCk7CisgICAgICAgICAgICBpZiAoZWRpdG9yICYmIGVkaXRvci0+aGFzQ29tcG9z
aXRpb24oKSkKKyAgICAgICAgICAgICAgICBlZGl0b3ItPmNvbmZpcm1Db21wb3NpdGlvbigpOwor
ICAgICAgICAgICAgbV9pbWVBY2NlcHRFdmVudHMgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
K30KKworYm9vbCBXZWJWaWV3SW1wbDo6aGFuZGxlQ29tcG9zaXRpb25FdmVudChXZWJDb21wb3Np
dGlvbkNvbW1hbmQgY29tbWFuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGN1cnNvclBvc2l0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgdGFyZ2V0U3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCB0YXJnZXRFbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgaW1lU3RyaW5nKQoreworICAgIEZyYW1lKiBm
b2N1c2VkID0gZm9jdXNlZFdlYkNvcmVGcmFtZSgpOworICAgIGlmICghZm9jdXNlZCB8fCAhbV9p
bWVBY2NlcHRFdmVudHMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBFZGl0b3IqIGVkaXRv
ciA9IGZvY3VzZWQtPmVkaXRvcigpOworICAgIGlmICghZWRpdG9yKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKCFlZGl0b3ItPmNhbkVkaXQoKSkgeworICAgICAgICAvLyBUaGUgaW5w
dXQgZm9jdXMgaGFzIGJlZW4gbW92ZWQgdG8gYW5vdGhlciBXZWJXaWRnZXQgb2JqZWN0LgorICAg
ICAgICAvLyBXZSBzaG91bGQgdXNlIHRoaXMgfGVkaXRvcnwgb2JqZWN0IG9ubHkgdG8gY29tcGxl
dGUgdGhlIG9uZ29pbmcKKyAgICAgICAgLy8gY29tcG9zaXRpb24uCisgICAgICAgIGlmICghZWRp
dG9yLT5oYXNDb21wb3NpdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIC8vIFdlIHNob3VsZCB2ZXJpZnkgdGhlIHBhcmVudCBub2RlIG9mIHRoaXMgSU1FIGNv
bXBvc2l0aW9uIG5vZGUgYXJlCisgICAgLy8gZWRpdGFibGUgYmVjYXVzZSBKYXZhU2NyaXB0IG1h
eSBkZWxldGUgYSBwYXJlbnQgbm9kZSBvZiB0aGUgY29tcG9zaXRpb24KKyAgICAvLyBub2RlLiBJ
biB0aGlzIGNhc2UsIFdlYktpdCBjcmFzaGVzIHdoaWxlIGRlbGV0aW5nIHRleHRzIGZyb20gdGhl
IHBhcmVudAorICAgIC8vIG5vZGUsIHdoaWNoIGRvZXNuJ3QgZXhpc3QgYW55IGxvbmdlci4KKyAg
ICBQYXNzUmVmUHRyPFJhbmdlPiByYW5nZSA9IGVkaXRvci0+Y29tcG9zaXRpb25SYW5nZSgpOwor
ICAgIGlmIChyYW5nZSkgeworICAgICAgICBjb25zdCBOb2RlKiBub2RlID0gcmFuZ2UtPnN0YXJ0
UG9zaXRpb24oKS5ub2RlKCk7CisgICAgICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aXNDb250ZW50
RWRpdGFibGUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAo
Y29tbWFuZCA9PSBXZWJDb21wb3NpdGlvbkNvbW1hbmREaXNjYXJkKSB7CisgICAgICAgIC8vIEEg
YnJvd3NlciBwcm9jZXNzIHNlbnQgYW4gSVBDIG1lc3NhZ2Ugd2hpY2ggZG9lcyBub3QgY29udGFp
biBhIHZhbGlkCisgICAgICAgIC8vIHN0cmluZywgd2hpY2ggbWVhbnMgYW4gb25nb2luZyBjb21w
b3NpdGlvbiBoYXMgYmVlbiBjYW5jZWxlZC4KKyAgICAgICAgLy8gSWYgdGhlIG9uZ29pbmcgY29t
cG9zaXRpb24gaGFzIGJlZW4gY2FuY2VsZWQsIHJlcGxhY2UgdGhlIG9uZ29pbmcKKyAgICAgICAg
Ly8gY29tcG9zaXRpb24gc3RyaW5nIHdpdGggYW4gZW1wdHkgc3RyaW5nIGFuZCBjb21wbGV0ZSBp
dC4KKyAgICAgICAgU3RyaW5nIGVtcHR5U3RyaW5nOworICAgICAgICBWZWN0b3I8Q29tcG9zaXRp
b25VbmRlcmxpbmU+IGVtcHR5VW5kZXJsaW5lczsKKyAgICAgICAgZWRpdG9yLT5zZXRDb21wb3Np
dGlvbihlbXB0eVN0cmluZywgZW1wdHlVbmRlcmxpbmVzLCAwLCAwKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICAvLyBBIGJyb3dzZXIgcHJvY2VzcyBzZW50IGFuIElQQyBtZXNzYWdlIHdoaWNoIGNv
bnRhaW5zIGEgc3RyaW5nIHRvIGJlCisgICAgICAgIC8vIGRpc3BsYXllZCBpbiB0aGlzIEVkaXRv
ciBvYmplY3QuCisgICAgICAgIC8vIFRvIGRpc3BsYXkgdGhlIGdpdmVuIHN0cmluZywgc2V0IHRo
ZSBnaXZlbiBzdHJpbmcgdG8gdGhlCisgICAgICAgIC8vIG1fY29tcG9zaXRpb25Ob2RlIG1lbWJl
ciBvZiB0aGlzIEVkaXRvciBvYmplY3QgYW5kIGRpc3BsYXkgaXQuCisgICAgICAgIGlmICh0YXJn
ZXRTdGFydCA8IDApCisgICAgICAgICAgICB0YXJnZXRTdGFydCA9IDA7CisgICAgICAgIGlmICh0
YXJnZXRFbmQgPCAwKQorICAgICAgICAgICAgdGFyZ2V0RW5kID0gc3RhdGljX2Nhc3Q8aW50Pihp
bWVTdHJpbmcubGVuZ3RoKCkpOworICAgICAgICBTdHJpbmcgY29tcG9zaXRpb25TdHJpbmcoaW1l
U3RyaW5nKTsKKyAgICAgICAgLy8gQ3JlYXRlIGN1c3RvbSB1bmRlcmxpbmVzLgorICAgICAgICAv
LyBUbyBlbXBoYXNpemUgdGhlIHNlbGVjdGlvbiwgdGhlIHNlbGVjdGVkIHJlZ2lvbiB1c2VzIGEg
c29saWQgYmxhY2sKKyAgICAgICAgLy8gZm9yIGl0cyB1bmRlcmxpbmUgd2hpbGUgb3RoZXIgcmVn
aW9ucyB1c2VzIGEgcGFsZSBncmF5IGZvciB0aGVpcnMuCisgICAgICAgIFZlY3RvcjxDb21wb3Np
dGlvblVuZGVybGluZT4gdW5kZXJsaW5lcygzKTsKKyAgICAgICAgdW5kZXJsaW5lc1swXS5zdGFy
dE9mZnNldCA9IDA7CisgICAgICAgIHVuZGVybGluZXNbMF0uZW5kT2Zmc2V0ID0gdGFyZ2V0U3Rh
cnQ7CisgICAgICAgIHVuZGVybGluZXNbMF0udGhpY2sgPSB0cnVlOworICAgICAgICB1bmRlcmxp
bmVzWzBdLmNvbG9yLnNldFJHQigweGQzLCAweGQzLCAweGQzKTsKKyAgICAgICAgdW5kZXJsaW5l
c1sxXS5zdGFydE9mZnNldCA9IHRhcmdldFN0YXJ0OworICAgICAgICB1bmRlcmxpbmVzWzFdLmVu
ZE9mZnNldCA9IHRhcmdldEVuZDsKKyAgICAgICAgdW5kZXJsaW5lc1sxXS50aGljayA9IHRydWU7
CisgICAgICAgIHVuZGVybGluZXNbMV0uY29sb3Iuc2V0UkdCKDB4MDAsIDB4MDAsIDB4MDApOwor
ICAgICAgICB1bmRlcmxpbmVzWzJdLnN0YXJ0T2Zmc2V0ID0gdGFyZ2V0RW5kOworICAgICAgICB1
bmRlcmxpbmVzWzJdLmVuZE9mZnNldCA9IHN0YXRpY19jYXN0PGludD4oaW1lU3RyaW5nLmxlbmd0
aCgpKTsKKyAgICAgICAgdW5kZXJsaW5lc1syXS50aGljayA9IHRydWU7CisgICAgICAgIHVuZGVy
bGluZXNbMl0uY29sb3Iuc2V0UkdCKDB4ZDMsIDB4ZDMsIDB4ZDMpOworICAgICAgICAvLyBXaGVu
IHdlIHVzZSBjdXN0b20gdW5kZXJsaW5lcywgV2ViS2l0ICgiSW5saW5lVGV4dEJveC5jcHAiIExp
bmUgMjgyKQorICAgICAgICAvLyBwcmV2ZW50cyBmcm9tIHdyaXRpbmcgYSB0ZXh0IGluIGJldHdl
ZW4gJ3NlbGVjdGlvblN0YXJ0JyBhbmQKKyAgICAgICAgLy8gJ3NlbGVjdGlvbkVuZCcgc29tZWhv
dy4KKyAgICAgICAgLy8gVGhlcmVmb3JlLCB3ZSB1c2UgdGhlICdjdXJzb3JQb3NpdGlvbicgZm9y
IHRoZXNlIGFyZ3VtZW50cyBzbyB0aGF0CisgICAgICAgIC8vIHRoZXJlIGFyZSBub3QgYW55IGNo
YXJhY3RlcnMgaW4gdGhlIGFib3ZlIHJlZ2lvbi4KKyAgICAgICAgZWRpdG9yLT5zZXRDb21wb3Np
dGlvbihjb21wb3NpdGlvblN0cmluZywgdW5kZXJsaW5lcywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjdXJzb3JQb3NpdGlvbiwgY3Vyc29yUG9zaXRpb24pOworICAgICAgICAvLyBU
aGUgZ2l2ZW4gc3RyaW5nIGlzIGEgcmVzdWx0IHN0cmluZywgd2hpY2ggbWVhbnMgdGhlIG9uZ29p
bmcKKyAgICAgICAgLy8gY29tcG9zaXRpb24gaGFzIGJlZW4gY29tcGxldGVkLiBJIGhhdmUgdG8g
Y2FsbCB0aGUKKyAgICAgICAgLy8gRWRpdG9yOjpjb25maXJtQ29tcGxldGlvbigpIGFuZCBjb21w
bGV0ZSB0aGlzIGNvbXBvc2l0aW9uLgorICAgICAgICBpZiAoY29tbWFuZCA9PSBXZWJDb21wb3Np
dGlvbkNvbW1hbmRDb25maXJtKQorICAgICAgICAgICAgZWRpdG9yLT5jb25maXJtQ29tcG9zaXRp
b24oKTsKKyAgICB9CisKKyAgICByZXR1cm4gZWRpdG9yLT5oYXNDb21wb3NpdGlvbigpOworfQor
Citib29sIFdlYlZpZXdJbXBsOjpxdWVyeUNvbXBvc2l0aW9uU3RhdHVzKGJvb2wqIGVuYWJsZUlN
RSwgV2ViUmVjdCogY2FyZXRSZWN0KQoreworICAgIC8vIFN0b3JlIHdoZXRoZXIgdGhlIHNlbGVj
dGVkIG5vZGUgbmVlZHMgSU1FIGFuZCB0aGUgY2FyZXQgcmVjdGFuZ2xlLgorICAgIC8vIFRoaXMg
cHJvY2VzcyBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nIGZvdXIgc3RlcHM6CisgICAgLy8gIDEu
IFJldHJpZXZlIHRoZSBzZWxlY3Rpb24gY29udHJvbGxlciBvZiB0aGUgZm9jdXNlZCBmcmFtZTsK
KyAgICAvLyAgMi4gUmV0cmlldmUgdGhlIGNhcmV0IHJlY3RhbmdsZSBmcm9tIHRoZSBjb250cm9s
bGVyOworICAgIC8vICAzLiBDb252ZXJ0IHRoZSByZWN0YW5nbGUsIHdoaWNoIGlzIHJlbGF0aXZl
IHRvIHRoZSBwYXJlbnQgdmlldywgdG8gdGhlCisgICAgLy8gICAgIG9uZSByZWxhdGl2ZSB0byB0
aGUgY2xpZW50IHdpbmRvdywgYW5kOworICAgIC8vICA0LiBTdG9yZSB0aGUgY29udmVydGVkIHJl
Y3RhbmdsZS4KKyAgICBjb25zdCBGcmFtZSogZm9jdXNlZCA9IGZvY3VzZWRXZWJDb3JlRnJhbWUo
KTsKKyAgICBpZiAoIWZvY3VzZWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNvbnN0
IEVkaXRvciogZWRpdG9yID0gZm9jdXNlZC0+ZWRpdG9yKCk7CisgICAgaWYgKCFlZGl0b3IgfHwg
IWVkaXRvci0+Y2FuRWRpdCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTZWxlY3Rp
b25Db250cm9sbGVyKiBjb250cm9sbGVyID0gZm9jdXNlZC0+c2VsZWN0aW9uKCk7CisgICAgaWYg
KCFjb250cm9sbGVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBOb2RlKiBu
b2RlID0gY29udHJvbGxlci0+c3RhcnQoKS5ub2RlKCk7CisgICAgaWYgKCFub2RlKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAqZW5hYmxlSU1FID0gbm9kZS0+c2hvdWxkVXNlSW5wdXRN
ZXRob2QoKSAmJiAhY29udHJvbGxlci0+aXNJblBhc3N3b3JkRmllbGQoKTsKKyAgICBjb25zdCBG
cmFtZVZpZXcqIHZpZXcgPSBub2RlLT5kb2N1bWVudCgpLT52aWV3KCk7CisgICAgaWYgKCF2aWV3
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAqY2FyZXRSZWN0ID0gdmlldy0+Y29udGVu
dHNUb1dpbmRvdyhjb250cm9sbGVyLT5hYnNvbHV0ZUNhcmV0Qm91bmRzKCkpOworICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIFdlYlZpZXdJbXBsOjpzZXRUZXh0RGlyZWN0aW9uKFdlYlRleHRE
aXJlY3Rpb24gZGlyZWN0aW9uKQoreworICAgIC8vIFRoZSBFZGl0b3I6OnNldEJhc2VXcml0aW5n
RGlyZWN0aW9uKCkgZnVuY3Rpb24gY2hlY2tzIGlmIHdlIGNhbiBjaGFuZ2UKKyAgICAvLyB0aGUg
dGV4dCBkaXJlY3Rpb24gb2YgdGhlIHNlbGVjdGVkIG5vZGUgYW5kIHVwZGF0ZXMgaXRzIERPTSAi
ZGlyIgorICAgIC8vIGF0dHJpYnV0ZSBhbmQgaXRzIENTUyAiZGlyZWN0aW9uIiBwcm9wZXJ0eS4K
KyAgICAvLyBTbywgd2UganVzdCBjYWxsIHRoZSBmdW5jdGlvbiBhcyBTYWZhcmkgZG9lcy4KKyAg
ICBjb25zdCBGcmFtZSogZm9jdXNlZCA9IGZvY3VzZWRXZWJDb3JlRnJhbWUoKTsKKyAgICBpZiAo
IWZvY3VzZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEVkaXRvciogZWRpdG9yID0gZm9jdXNl
ZC0+ZWRpdG9yKCk7CisgICAgaWYgKCFlZGl0b3IgfHwgIWVkaXRvci0+Y2FuRWRpdCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgIGNhc2UgV2ViVGV4
dERpcmVjdGlvbkRlZmF1bHQ6CisgICAgICAgIGVkaXRvci0+c2V0QmFzZVdyaXRpbmdEaXJlY3Rp
b24oTmF0dXJhbFdyaXRpbmdEaXJlY3Rpb24pOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ug
V2ViVGV4dERpcmVjdGlvbkxlZnRUb1JpZ2h0OgorICAgICAgICBlZGl0b3ItPnNldEJhc2VXcml0
aW5nRGlyZWN0aW9uKExlZnRUb1JpZ2h0V3JpdGluZ0RpcmVjdGlvbik7CisgICAgICAgIGJyZWFr
OworCisgICAgY2FzZSBXZWJUZXh0RGlyZWN0aW9uUmlnaHRUb0xlZnQ6CisgICAgICAgIGVkaXRv
ci0+c2V0QmFzZVdyaXRpbmdEaXJlY3Rpb24oUmlnaHRUb0xlZnRXcml0aW5nRGlyZWN0aW9uKTsK
KyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKKy8vIFdlYlZpZXcgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
V2ViU2V0dGluZ3MqIFdlYlZpZXdJbXBsOjpzZXR0aW5ncygpCit7CisgICAgaWYgKCFtX3dlYlNl
dHRpbmdzLmdldCgpKQorICAgICAgICBtX3dlYlNldHRpbmdzLnNldChuZXcgV2ViU2V0dGluZ3NJ
bXBsKG1fcGFnZS0+c2V0dGluZ3MoKSkpOworICAgIEFTU0VSVChtX3dlYlNldHRpbmdzLmdldCgp
KTsKKyAgICByZXR1cm4gbV93ZWJTZXR0aW5ncy5nZXQoKTsKK30KKworV2ViU3RyaW5nIFdlYlZp
ZXdJbXBsOjpwYWdlRW5jb2RpbmcoKSBjb25zdAoreworICAgIGlmICghbV9wYWdlLmdldCgpKQor
ICAgICAgICByZXR1cm4gV2ViU3RyaW5nKCk7CisKKyAgICByZXR1cm4gbV9wYWdlLT5tYWluRnJh
bWUoKS0+bG9hZGVyKCktPmVuY29kaW5nKCk7Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OnNldFBh
Z2VFbmNvZGluZyhjb25zdCBXZWJTdHJpbmcmIGVuY29kaW5nTmFtZSkKK3sKKyAgICBpZiAoIW1f
cGFnZS5nZXQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gT25seSBjaGFuZ2Ugb3ZlcnJp
ZGUgZW5jb2RpbmcsIGRvbid0IGNoYW5nZSBkZWZhdWx0IGVuY29kaW5nLgorICAgIC8vIE5vdGUg
dGhhdCB0aGUgbmV3IGVuY29kaW5nIG11c3QgYmUgMCBpZiBpdCBpc24ndCBzdXBwb3NlZCB0byBi
ZSBzZXQuCisgICAgU3RyaW5nIG5ld0VuY29kaW5nTmFtZTsKKyAgICBpZiAoIWVuY29kaW5nTmFt
ZS5pc0VtcHR5KCkpCisgICAgICAgIG5ld0VuY29kaW5nTmFtZSA9IGVuY29kaW5nTmFtZTsKKyAg
ICBtX3BhZ2UtPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+cmVsb2FkV2l0aE92ZXJyaWRlRW5jb2Rp
bmcobmV3RW5jb2RpbmdOYW1lKTsKK30KKworYm9vbCBXZWJWaWV3SW1wbDo6ZGlzcGF0Y2hCZWZv
cmVVbmxvYWRFdmVudCgpCit7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHJlYWxseSBjYXVz
ZSBhIHJlY3Vyc2l2ZSBkZXB0aC1maXJzdCB3YWxrIG9mIGFsbAorICAgIC8vIGZyYW1lcyBpbiB0
aGUgdHJlZSwgY2FsbGluZyBlYWNoIGZyYW1lJ3Mgb25iZWZvcmV1bmxvYWQuICBBdCB0aGUgbW9t
ZW50LAorICAgIC8vIHdlJ3JlIGNvbnNpc3RlbnQgd2l0aCBTYWZhcmkgMy4xLCBub3QgSUUvRkYu
CisgICAgRnJhbWUqIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9y
TWFpbkZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICByZXR1cm4gZnJhbWUtPnNob3VsZENsb3NlKCk7Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OmRp
c3BhdGNoVW5sb2FkRXZlbnQoKQoreworICAgIC8vIFJ1biB1bmxvYWQgaGFuZGxlcnMuCisgICAg
bV9wYWdlLT5tYWluRnJhbWUoKS0+bG9hZGVyKCktPmNsb3NlVVJMKCk7Cit9CisKK1dlYkZyYW1l
KiBXZWJWaWV3SW1wbDo6bWFpbkZyYW1lKCkKK3sKKyAgICByZXR1cm4gbWFpbkZyYW1lSW1wbCgp
OworfQorCitXZWJGcmFtZSogV2ViVmlld0ltcGw6OmZpbmRGcmFtZUJ5TmFtZSgKKyAgICBjb25z
dCBXZWJTdHJpbmcmIG5hbWUsIFdlYkZyYW1lKiByZWxhdGl2ZVRvRnJhbWUpCit7CisgICAgaWYg
KCFyZWxhdGl2ZVRvRnJhbWUpCisgICAgICAgIHJlbGF0aXZlVG9GcmFtZSA9IG1haW5GcmFtZSgp
OworICAgIEZyYW1lKiBmcmFtZSA9IHN0YXRpY19jYXN0PFdlYkZyYW1lSW1wbCo+KHJlbGF0aXZl
VG9GcmFtZSktPmZyYW1lKCk7CisgICAgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT5maW5kKG5hbWUp
OworICAgIHJldHVybiBXZWJGcmFtZUltcGw6OmZyb21GcmFtZShmcmFtZSk7Cit9CisKK1dlYkZy
YW1lKiBXZWJWaWV3SW1wbDo6Zm9jdXNlZEZyYW1lKCkKK3sKKyAgICByZXR1cm4gV2ViRnJhbWVJ
bXBsOjpmcm9tRnJhbWUoZm9jdXNlZFdlYkNvcmVGcmFtZSgpKTsKK30KKwordm9pZCBXZWJWaWV3
SW1wbDo6c2V0Rm9jdXNlZEZyYW1lKFdlYkZyYW1lKiBmcmFtZSkKK3sKKyAgICBpZiAoIWZyYW1l
KSB7CisgICAgICAgIC8vIENsZWFycyB0aGUgZm9jdXNlZCBmcmFtZSBpZiBhbnkuCisgICAgICAg
IEZyYW1lKiBmcmFtZSA9IGZvY3VzZWRXZWJDb3JlRnJhbWUoKTsKKyAgICAgICAgaWYgKGZyYW1l
KQorICAgICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLT5zZXRGb2N1c2VkKGZhbHNlKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBXZWJGcmFtZUltcGwqIGZyYW1lSW1wbCA9IHN0YXRp
Y19jYXN0PFdlYkZyYW1lSW1wbCo+KGZyYW1lKTsKKyAgICBGcmFtZSogd2ViY29yZUZyYW1lID0g
ZnJhbWVJbXBsLT5mcmFtZSgpOworICAgIHdlYmNvcmVGcmFtZS0+cGFnZSgpLT5mb2N1c0NvbnRy
b2xsZXIoKS0+c2V0Rm9jdXNlZEZyYW1lKHdlYmNvcmVGcmFtZSk7Cit9CisKK3ZvaWQgV2ViVmll
d0ltcGw6OnNldEluaXRpYWxGb2N1cyhib29sIHJldmVyc2UpCit7CisgICAgaWYgKCFtX3BhZ2Uu
Z2V0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFNpbmNlIHdlIGRvbid0IGhhdmUgYSBr
ZXlib2FyZCBldmVudCwgd2UnbGwgY3JlYXRlIG9uZS4KKyAgICBXZWJLZXlib2FyZEV2ZW50IGtl
eWJvYXJkRXZlbnQ7CisgICAga2V5Ym9hcmRFdmVudC50eXBlID0gV2ViSW5wdXRFdmVudDo6UmF3
S2V5RG93bjsKKyAgICBpZiAocmV2ZXJzZSkKKyAgICAgICAga2V5Ym9hcmRFdmVudC5tb2RpZmll
cnMgPSBXZWJJbnB1dEV2ZW50OjpTaGlmdEtleTsKKworICAgIC8vIFZLX1RBQiB3aGljaCBpcyBv
bmx5IGRlZmluZWQgb24gV2luZG93cy4KKyAgICBrZXlib2FyZEV2ZW50LndpbmRvd3NLZXlDb2Rl
ID0gMHgwOTsKKyAgICBQbGF0Zm9ybUtleWJvYXJkRXZlbnRCdWlsZGVyIHBsYXRmb3JtRXZlbnQo
a2V5Ym9hcmRFdmVudCk7CisgICAgUmVmUHRyPEtleWJvYXJkRXZlbnQ+IHdlYmtpdEV2ZW50ID0g
S2V5Ym9hcmRFdmVudDo6Y3JlYXRlKHBsYXRmb3JtRXZlbnQsIDApOworICAgIHBhZ2UoKS0+Zm9j
dXNDb250cm9sbGVyKCktPnNldEluaXRpYWxGb2N1cygKKyAgICAgICAgcmV2ZXJzZSA/IEZvY3Vz
RGlyZWN0aW9uQmFja3dhcmQgOiBGb2N1c0RpcmVjdGlvbkZvcndhcmQsCisgICAgICAgIHdlYmtp
dEV2ZW50LmdldCgpKTsKK30KKwordm9pZCBXZWJWaWV3SW1wbDo6Y2xlYXJGb2N1c2VkTm9kZSgp
Cit7CisgICAgaWYgKCFtX3BhZ2UuZ2V0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0
cjxGcmFtZT4gZnJhbWUgPSBtX3BhZ2UtPm1haW5GcmFtZSgpOworICAgIGlmICghZnJhbWUuZ2V0
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQgPSBm
cmFtZS0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50LmdldCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBSZWZQdHI8Tm9kZT4gb2xkRm9jdXNlZE5vZGUgPSBkb2N1bWVudC0+Zm9jdXNl
ZE5vZGUoKTsKKworICAgIC8vIENsZWFyIHRoZSBmb2N1c2VkIG5vZGUuCisgICAgZG9jdW1lbnQt
PnNldEZvY3VzZWROb2RlKDApOworCisgICAgaWYgKCFvbGRGb2N1c2VkTm9kZS5nZXQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gSWYgYSB0ZXh0IGZpZWxkIGhhcyBmb2N1cywgd2UgbmVl
ZCB0byBtYWtlIHN1cmUgdGhlIHNlbGVjdGlvbiBjb250cm9sbGVyCisgICAgLy8ga25vd3MgdG8g
cmVtb3ZlIHNlbGVjdGlvbiBmcm9tIGl0LiBPdGhlcndpc2UsIHRoZSB0ZXh0IGZpZWxkIGlzIHN0
aWxsCisgICAgLy8gcHJvY2Vzc2luZyBrZXlib2FyZCBldmVudHMgZXZlbiB0aG91Z2ggZm9jdXMg
aGFzIGJlZW4gbW92ZWQgdG8gdGhlIHBhZ2UgYW5kCisgICAgLy8ga2V5c3Ryb2tlcyBnZXQgZWF0
ZW4gYXMgYSByZXN1bHQuCisgICAgaWYgKG9sZEZvY3VzZWROb2RlLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6dGV4dGFyZWFUYWcpCisgICAgICAgIHx8IChvbGRGb2N1c2VkTm9kZS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmlucHV0VGFnKQorICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8SFRNTElu
cHV0RWxlbWVudCo+KG9sZEZvY3VzZWROb2RlLmdldCgpKS0+aXNUZXh0RmllbGQoKSkpIHsKKyAg
ICAgICAgLy8gQ2xlYXIgdGhlIHNlbGVjdGlvbi4KKyAgICAgICAgU2VsZWN0aW9uQ29udHJvbGxl
ciogc2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpOworICAgICAgICBzZWxlY3Rpb24tPmNs
ZWFyKCk7CisgICAgfQorfQorCit2b2lkIFdlYlZpZXdJbXBsOjp6b29tSW4oYm9vbCB0ZXh0T25s
eSkKK3sKKyAgICBGcmFtZSogZnJhbWUgPSBtYWluRnJhbWVJbXBsKCktPmZyYW1lKCk7CisgICAg
ZG91YmxlIG11bHRpcGxpZXIgPSBzdGQ6Om1pbihzdGQ6OnBvdyh0ZXh0U2l6ZU11bHRpcGxpZXJS
YXRpbywgbV96b29tTGV2ZWwgKyAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1heFRleHRTaXplTXVsdGlwbGllcik7CisgICAgZmxvYXQgem9vbUZhY3RvciA9IHN0YXRpY19j
YXN0PGZsb2F0PihtdWx0aXBsaWVyKTsKKyAgICBpZiAoem9vbUZhY3RvciAhPSBmcmFtZS0+em9v
bUZhY3RvcigpKSB7CisgICAgICAgICsrbV96b29tTGV2ZWw7CisgICAgICAgIGZyYW1lLT5zZXRa
b29tRmFjdG9yKHpvb21GYWN0b3IsIHRleHRPbmx5KTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViVmll
d0ltcGw6Onpvb21PdXQoYm9vbCB0ZXh0T25seSkKK3sKKyAgICBGcmFtZSogZnJhbWUgPSBtYWlu
RnJhbWVJbXBsKCktPmZyYW1lKCk7CisgICAgZG91YmxlIG11bHRpcGxpZXIgPSBzdGQ6Om1heChz
dGQ6OnBvdyh0ZXh0U2l6ZU11bHRpcGxpZXJSYXRpbywgbV96b29tTGV2ZWwgLSAxKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pblRleHRTaXplTXVsdGlwbGllcik7CisgICAg
ZmxvYXQgem9vbUZhY3RvciA9IHN0YXRpY19jYXN0PGZsb2F0PihtdWx0aXBsaWVyKTsKKyAgICBp
ZiAoem9vbUZhY3RvciAhPSBmcmFtZS0+em9vbUZhY3RvcigpKSB7CisgICAgICAgIC0tbV96b29t
TGV2ZWw7CisgICAgICAgIGZyYW1lLT5zZXRab29tRmFjdG9yKHpvb21GYWN0b3IsIHRleHRPbmx5
KTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6Onpvb21EZWZhdWx0KCkKK3sKKyAgICAv
LyBXZSBkb24ndCBjaGFuZ2UgdGhlIHpvb20gbW9kZSAodGV4dCBvbmx5IHZzLiBmdWxsIHBhZ2Up
IGhlcmUuIFdlIGp1c3Qgd2FudAorICAgIC8vIHRvIHJlc2V0IHdoYXRldmVyIGlzIGFscmVhZHkg
c2V0LgorICAgIG1fem9vbUxldmVsID0gMDsKKyAgICBtYWluRnJhbWVJbXBsKCktPmZyYW1lKCkt
PnNldFpvb21GYWN0b3IoCisgICAgICAgIDEuMGYsIG1haW5GcmFtZUltcGwoKS0+ZnJhbWUoKS0+
aXNab29tRmFjdG9yVGV4dE9ubHkoKSk7Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OnBlcmZvcm1N
ZWRpYVBsYXllckFjdGlvbihjb25zdCBXZWJNZWRpYVBsYXllckFjdGlvbiYgYWN0aW9uLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlBvaW50JiBs
b2NhdGlvbikKK3sKKyAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9CisgICAgICAgIGhpdFRlc3RS
ZXN1bHRGb3JXaW5kb3dQb3MobG9jYXRpb24pOworICAgIFJlZlB0cjxOb2RlPiBub2RlID0gcmVz
dWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpOworICAgIGlmICghbm9kZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OnZpZGVvVGFnKSAmJiAhbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmF1ZGlvVGFn
KSkKKyAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxIVE1MTWVkaWFFbGVtZW50PiBtZWRpYUVs
ZW1lbnQgPQorICAgICAgICBzdGF0aWNfcG9pbnRlcl9jYXN0PEhUTUxNZWRpYUVsZW1lbnQ+KG5v
ZGUpOworICAgIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHsKKyAgICBjYXNlIFdlYk1lZGlhUGxheWVy
QWN0aW9uOjpQbGF5OgorICAgICAgICBpZiAoYWN0aW9uLmVuYWJsZSkKKyAgICAgICAgICAgIG1l
ZGlhRWxlbWVudC0+cGxheSgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtZWRpYUVsZW1l
bnQtPnBhdXNlKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2ViTWVkaWFQbGF5ZXJBY3Rp
b246Ok11dGU6CisgICAgICAgIG1lZGlhRWxlbWVudC0+c2V0TXV0ZWQoYWN0aW9uLmVuYWJsZSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2ViTWVkaWFQbGF5ZXJBY3Rpb246Okxvb3A6Cisg
ICAgICAgIG1lZGlhRWxlbWVudC0+c2V0TG9vcChhY3Rpb24uZW5hYmxlKTsKKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQor
fQorCit2b2lkIFdlYlZpZXdJbXBsOjpjb3B5SW1hZ2VBdChjb25zdCBXZWJQb2ludCYgcG9pbnQp
Cit7CisgICAgaWYgKCFtX3BhZ2UuZ2V0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEhpdFRl
c3RSZXN1bHQgcmVzdWx0ID0gaGl0VGVzdFJlc3VsdEZvcldpbmRvd1Bvcyhwb2ludCk7CisKKyAg
ICBpZiAocmVzdWx0LmFic29sdXRlSW1hZ2VVUkwoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8g
VGhlcmUgaXNuJ3QgYWN0dWFsbHkgYW4gaW1hZ2UgYXQgdGhlc2UgY29vcmRpbmF0ZXMuICBNaWdo
dCBiZSBiZWNhdXNlCisgICAgICAgIC8vIHRoZSB3aW5kb3cgc2Nyb2xsZWQgd2hpbGUgdGhlIGNv
bnRleHQgbWVudSB3YXMgb3BlbiBvciBiZWNhdXNlIHRoZSBwYWdlCisgICAgICAgIC8vIGNoYW5n
ZWQgaXRzZWxmIGJldHdlZW4gd2hlbiB3ZSB0aG91Z2h0IHRoZXJlIHdhcyBhbiBpbWFnZSBoZXJl
IGFuZCB3aGVuCisgICAgICAgIC8vIHdlIGFjdHVhbGx5IHRyaWVkIHRvIHJldHJlaXZlIHRoZSBp
bWFnZS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gRklYTUU6IGltcGxlbWVudCBhIGNhY2hlIG9m
IHRoZSBtb3N0IHJlY2VudCBIaXRUZXN0UmVzdWx0IHRvIGF2b2lkIGhhdmluZworICAgICAgICAv
LyAgICAgICAgdG8gZG8gdHdvIGhpdCB0ZXN0cy4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIG1fcGFnZS0+bWFpbkZyYW1lKCktPmVkaXRvcigpLT5jb3B5SW1hZ2UocmVzdWx0KTsKK30K
Kwordm9pZCBXZWJWaWV3SW1wbDo6ZHJhZ1NvdXJjZUVuZGVkQXQoCisgICAgY29uc3QgV2ViUG9p
bnQmIGNsaWVudFBvaW50LAorICAgIGNvbnN0IFdlYlBvaW50JiBzY3JlZW5Qb2ludCwKKyAgICBX
ZWJEcmFnT3BlcmF0aW9uIG9wZXJhdGlvbikKK3sKKyAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgcG1l
KGNsaWVudFBvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyZWVuUG9pbnQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICBMZWZ0QnV0dG9uLCBNb3VzZUV2ZW50TW92ZWQsIDAs
IGZhbHNlLCBmYWxzZSwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwg
MCk7CisgICAgbV9wYWdlLT5tYWluRnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmRyYWdTb3VyY2VF
bmRlZEF0KHBtZSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8RHJhZ09wZXJhdGlvbj4ob3BlcmF0aW9u
KSk7Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OmRyYWdTb3VyY2VNb3ZlZFRvKAorICAgIGNvbnN0
IFdlYlBvaW50JiBjbGllbnRQb2ludCwKKyAgICBjb25zdCBXZWJQb2ludCYgc2NyZWVuUG9pbnQp
Cit7CisgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IHBtZShjbGllbnRQb2ludCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNjcmVlblBvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
TGVmdEJ1dHRvbiwgTW91c2VFdmVudE1vdmVkLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIDApOworICAgIG1fcGFnZS0+bWFpbkZyYW1l
KCktPmV2ZW50SGFuZGxlcigpLT5kcmFnU291cmNlTW92ZWRUbyhwbWUpOworfQorCit2b2lkIFdl
YlZpZXdJbXBsOjpkcmFnU291cmNlU3lzdGVtRHJhZ0VuZGVkKCkKK3sKKyAgICAvLyBJdCdzIHBv
c3NpYmxlIGZvciB1cyB0byBnZXQgdGhpcyBjYWxsYmFjayB3aGlsZSBub3QgZG9pbmcgYSBkcmFn
IGlmCisgICAgLy8gaXQncyBmcm9tIGEgcHJldmlvdXMgcGFnZSB0aGF0IGdvdCB1bmxvYWRlZC4K
KyAgICBpZiAobV9kb2luZ0RyYWdBbmREcm9wKSB7CisgICAgICAgIG1fcGFnZS0+ZHJhZ0NvbnRy
b2xsZXIoKS0+ZHJhZ0VuZGVkKCk7CisgICAgICAgIG1fZG9pbmdEcmFnQW5kRHJvcCA9IGZhbHNl
OworICAgIH0KK30KKworV2ViRHJhZ09wZXJhdGlvbiBXZWJWaWV3SW1wbDo6ZHJhZ1RhcmdldERy
YWdFbnRlcigKKyAgICBjb25zdCBXZWJEcmFnRGF0YSYgd2ViRHJhZ0RhdGEsIGludCBpZGVudGl0
eSwKKyAgICBjb25zdCBXZWJQb2ludCYgY2xpZW50UG9pbnQsCisgICAgY29uc3QgV2ViUG9pbnQm
IHNjcmVlblBvaW50LAorICAgIFdlYkRyYWdPcGVyYXRpb25zTWFzayBvcGVyYXRpb25zQWxsb3dl
ZCkKK3sKKyAgICBBU1NFUlQoIW1fY3VycmVudERyYWdEYXRhLmdldCgpKTsKKworICAgIG1fY3Vy
cmVudERyYWdEYXRhID0gd2ViRHJhZ0RhdGE7CisgICAgbV9kcmFnSWRlbnRpdHkgPSBpZGVudGl0
eTsKKyAgICBtX29wZXJhdGlvbnNBbGxvd2VkID0gb3BlcmF0aW9uc0FsbG93ZWQ7CisKKyAgICBE
cmFnRGF0YSBkcmFnRGF0YSgKKyAgICAgICAgbV9jdXJyZW50RHJhZ0RhdGEuZ2V0KCksCisgICAg
ICAgIGNsaWVudFBvaW50LAorICAgICAgICBzY3JlZW5Qb2ludCwKKyAgICAgICAgc3RhdGljX2Nh
c3Q8RHJhZ09wZXJhdGlvbj4ob3BlcmF0aW9uc0FsbG93ZWQpKTsKKworICAgIG1fZHJvcEVmZmVj
dCA9IERyb3BFZmZlY3REZWZhdWx0OworICAgIG1fZHJhZ1RhcmdldERpc3BhdGNoID0gdHJ1ZTsK
KyAgICBEcmFnT3BlcmF0aW9uIGVmZmVjdCA9IG1fcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS0+ZHJh
Z0VudGVyZWQoJmRyYWdEYXRhKTsKKyAgICAvLyBNYXNrIHRoZSBvcGVyYXRpb24gYWdhaW5zdCB0
aGUgZHJhZyBzb3VyY2UncyBhbGxvd2VkIG9wZXJhdGlvbnMuCisgICAgaWYgKChlZmZlY3QgJiBk
cmFnRGF0YS5kcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2soKSkgIT0gZWZmZWN0KQorICAgICAg
ICBlZmZlY3QgPSBEcmFnT3BlcmF0aW9uTm9uZTsKKyAgICBtX2RyYWdUYXJnZXREaXNwYXRjaCA9
IGZhbHNlOworCisgICAgaWYgKG1fZHJvcEVmZmVjdCAhPSBEcm9wRWZmZWN0RGVmYXVsdCkgewor
ICAgICAgICBtX2RyYWdPcGVyYXRpb24gPSAobV9kcm9wRWZmZWN0ICE9IERyb3BFZmZlY3ROb25l
KSA/IFdlYkRyYWdPcGVyYXRpb25Db3B5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogV2ViRHJhZ09wZXJhdGlvbk5vbmU7CisgICAg
fSBlbHNlCisgICAgICAgIG1fZHJhZ09wZXJhdGlvbiA9IHN0YXRpY19jYXN0PFdlYkRyYWdPcGVy
YXRpb24+KGVmZmVjdCk7CisgICAgcmV0dXJuIG1fZHJhZ09wZXJhdGlvbjsKK30KKworV2ViRHJh
Z09wZXJhdGlvbiBXZWJWaWV3SW1wbDo6ZHJhZ1RhcmdldERyYWdPdmVyKAorICAgIGNvbnN0IFdl
YlBvaW50JiBjbGllbnRQb2ludCwKKyAgICBjb25zdCBXZWJQb2ludCYgc2NyZWVuUG9pbnQsCisg
ICAgV2ViRHJhZ09wZXJhdGlvbnNNYXNrIG9wZXJhdGlvbnNBbGxvd2VkKQoreworICAgIEFTU0VS
VChtX2N1cnJlbnREcmFnRGF0YS5nZXQoKSk7CisKKyAgICBtX29wZXJhdGlvbnNBbGxvd2VkID0g
b3BlcmF0aW9uc0FsbG93ZWQ7CisgICAgRHJhZ0RhdGEgZHJhZ0RhdGEoCisgICAgICAgIG1fY3Vy
cmVudERyYWdEYXRhLmdldCgpLAorICAgICAgICBjbGllbnRQb2ludCwKKyAgICAgICAgc2NyZWVu
UG9pbnQsCisgICAgICAgIHN0YXRpY19jYXN0PERyYWdPcGVyYXRpb24+KG9wZXJhdGlvbnNBbGxv
d2VkKSk7CisKKyAgICBtX2Ryb3BFZmZlY3QgPSBEcm9wRWZmZWN0RGVmYXVsdDsKKyAgICBtX2Ry
YWdUYXJnZXREaXNwYXRjaCA9IHRydWU7CisgICAgRHJhZ09wZXJhdGlvbiBlZmZlY3QgPSBtX3Bh
Z2UtPmRyYWdDb250cm9sbGVyKCktPmRyYWdVcGRhdGVkKCZkcmFnRGF0YSk7CisgICAgLy8gTWFz
ayB0aGUgb3BlcmF0aW9uIGFnYWluc3QgdGhlIGRyYWcgc291cmNlJ3MgYWxsb3dlZCBvcGVyYXRp
b25zLgorICAgIGlmICgoZWZmZWN0ICYgZHJhZ0RhdGEuZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25N
YXNrKCkpICE9IGVmZmVjdCkKKyAgICAgICAgZWZmZWN0ID0gRHJhZ09wZXJhdGlvbk5vbmU7Cisg
ICAgbV9kcmFnVGFyZ2V0RGlzcGF0Y2ggPSBmYWxzZTsKKworICAgIGlmIChtX2Ryb3BFZmZlY3Qg
IT0gRHJvcEVmZmVjdERlZmF1bHQpIHsKKyAgICAgICAgbV9kcmFnT3BlcmF0aW9uID0gKG1fZHJv
cEVmZmVjdCAhPSBEcm9wRWZmZWN0Tm9uZSkgPyBXZWJEcmFnT3BlcmF0aW9uQ29weQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFdl
YkRyYWdPcGVyYXRpb25Ob25lOworICAgIH0gZWxzZQorICAgICAgICBtX2RyYWdPcGVyYXRpb24g
PSBzdGF0aWNfY2FzdDxXZWJEcmFnT3BlcmF0aW9uPihlZmZlY3QpOworICAgIHJldHVybiBtX2Ry
YWdPcGVyYXRpb247Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OmRyYWdUYXJnZXREcmFnTGVhdmUo
KQoreworICAgIEFTU0VSVChtX2N1cnJlbnREcmFnRGF0YS5nZXQoKSk7CisKKyAgICBEcmFnRGF0
YSBkcmFnRGF0YSgKKyAgICAgICAgbV9jdXJyZW50RHJhZ0RhdGEuZ2V0KCksCisgICAgICAgIElu
dFBvaW50KCksCisgICAgICAgIEludFBvaW50KCksCisgICAgICAgIHN0YXRpY19jYXN0PERyYWdP
cGVyYXRpb24+KG1fb3BlcmF0aW9uc0FsbG93ZWQpKTsKKworICAgIG1fZHJhZ1RhcmdldERpc3Bh
dGNoID0gdHJ1ZTsKKyAgICBtX3BhZ2UtPmRyYWdDb250cm9sbGVyKCktPmRyYWdFeGl0ZWQoJmRy
YWdEYXRhKTsKKyAgICBtX2RyYWdUYXJnZXREaXNwYXRjaCA9IGZhbHNlOworCisgICAgbV9jdXJy
ZW50RHJhZ0RhdGEgPSAwOworICAgIG1fZHJvcEVmZmVjdCA9IERyb3BFZmZlY3REZWZhdWx0Owor
ICAgIG1fZHJhZ09wZXJhdGlvbiA9IFdlYkRyYWdPcGVyYXRpb25Ob25lOworICAgIG1fZHJhZ0lk
ZW50aXR5ID0gMDsKK30KKwordm9pZCBXZWJWaWV3SW1wbDo6ZHJhZ1RhcmdldERyb3AoY29uc3Qg
V2ViUG9pbnQmIGNsaWVudFBvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgV2ViUG9pbnQmIHNjcmVlblBvaW50KQoreworICAgIEFTU0VSVChtX2N1cnJlbnREcmFn
RGF0YS5nZXQoKSk7CisKKyAgICAvLyBJZiB0aGlzIHdlYnZpZXcgdHJhbnNpdGlvbnMgZnJvbSB0
aGUgImRyb3AgYWNjZXB0aW5nIiBzdGF0ZSB0byB0aGUgIm5vdAorICAgIC8vIGFjY2VwdGluZyIg
c3RhdGUsIHRoZW4gb3VyIElQQyBtZXNzYWdlIHJlcGx5IGluZGljYXRpbmcgdGhhdCBtYXkgYmUg
aW4tCisgICAgLy8gZmxpZ2h0LCBvciBlbHNlIGRlbGF5ZWQgYnkgamF2YXNjcmlwdCBwcm9jZXNz
aW5nIGluIHRoaXMgd2Vidmlldy4gIElmIGEKKyAgICAvLyBkcm9wIGhhcHBlbnMgYmVmb3JlIG91
ciBJUEMgcmVwbHkgaGFzIHJlYWNoZWQgdGhlIGJyb3dzZXIgcHJvY2VzcywgdGhlbgorICAgIC8v
IHRoZSBicm93c2VyIGZvcndhcmRzIHRoZSBkcm9wIHRvIHRoaXMgd2Vidmlldy4gIFNvIG9ubHkg
YWxsb3cgYSBkcm9wIHRvCisgICAgLy8gcHJvY2VlZCBpZiBvdXIgd2VidmlldyBtX2RyYWdPcGVy
YXRpb24gc3RhdGUgaXMgbm90IERyYWdPcGVyYXRpb25Ob25lLgorCisgICAgaWYgKG1fZHJhZ09w
ZXJhdGlvbiA9PSBXZWJEcmFnT3BlcmF0aW9uTm9uZSkgeyAvLyBJUEMgUkFDRSBDT05ESVRJT046
IGRvIG5vdCBhbGxvdyB0aGlzIGRyb3AuCisgICAgICAgIGRyYWdUYXJnZXREcmFnTGVhdmUoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIERyYWdEYXRhIGRyYWdEYXRhKAorICAgICAg
ICBtX2N1cnJlbnREcmFnRGF0YS5nZXQoKSwKKyAgICAgICAgY2xpZW50UG9pbnQsCisgICAgICAg
IHNjcmVlblBvaW50LAorICAgICAgICBzdGF0aWNfY2FzdDxEcmFnT3BlcmF0aW9uPihtX29wZXJh
dGlvbnNBbGxvd2VkKSk7CisKKyAgICBtX2RyYWdUYXJnZXREaXNwYXRjaCA9IHRydWU7CisgICAg
bV9wYWdlLT5kcmFnQ29udHJvbGxlcigpLT5wZXJmb3JtRHJhZygmZHJhZ0RhdGEpOworICAgIG1f
ZHJhZ1RhcmdldERpc3BhdGNoID0gZmFsc2U7CisKKyAgICBtX2N1cnJlbnREcmFnRGF0YSA9IDA7
CisgICAgbV9kcm9wRWZmZWN0ID0gRHJvcEVmZmVjdERlZmF1bHQ7CisgICAgbV9kcmFnT3BlcmF0
aW9uID0gV2ViRHJhZ09wZXJhdGlvbk5vbmU7CisgICAgbV9kcmFnSWRlbnRpdHkgPSAwOworfQor
CitpbnQgV2ViVmlld0ltcGw6OmRyYWdJZGVudGl0eSgpCit7CisgICAgaWYgKG1fZHJhZ1Rhcmdl
dERpc3BhdGNoKQorICAgICAgICByZXR1cm4gbV9kcmFnSWRlbnRpdHk7CisgICAgcmV0dXJuIDA7
Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6Omluc3BlY3RFbGVtZW50QXQoY29uc3QgV2ViUG9pbnQm
IHBvaW50KQoreworICAgIGlmICghbV9wYWdlLmdldCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAocG9pbnQueCA9PSAtMSB8fCBwb2ludC55ID09IC0xKQorICAgICAgICBtX3BhZ2UtPmlu
c3BlY3RvckNvbnRyb2xsZXIoKS0+aW5zcGVjdCgwKTsKKyAgICBlbHNlIHsKKyAgICAgICAgSGl0
VGVzdFJlc3VsdCByZXN1bHQgPSBoaXRUZXN0UmVzdWx0Rm9yV2luZG93UG9zKHBvaW50KTsKKwor
ICAgICAgICBpZiAoIXJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBtX3BhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+aW5zcGVjdChy
ZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkpOworICAgIH0KK30KKworV2ViU3RyaW5nIFdlYlZp
ZXdJbXBsOjppbnNwZWN0b3JTZXR0aW5ncygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW5zcGVj
dG9yU2V0dGluZ3M7Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OnNldEluc3BlY3RvclNldHRpbmdz
KGNvbnN0IFdlYlN0cmluZyYgc2V0dGluZ3MpCit7CisgICAgbV9pbnNwZWN0b3JTZXR0aW5ncyA9
IHNldHRpbmdzOworfQorCitXZWJEZXZUb29sc0FnZW50KiBXZWJWaWV3SW1wbDo6ZGV2VG9vbHNB
Z2VudCgpCit7CisgICAgcmV0dXJuIG1fZGV2VG9vbHNBZ2VudC5nZXQoKTsKK30KKwordm9pZCBX
ZWJWaWV3SW1wbDo6c2V0RGV2VG9vbHNBZ2VudChXZWJEZXZUb29sc0FnZW50KiBkZXZUb29sc0Fn
ZW50KQoreworICAgIEFTU0VSVCghbV9kZXZUb29sc0FnZW50LmdldCgpKTsgLy8gTWF5IG9ubHkg
c2V0IG9uY2UhCisgICAgbV9kZXZUb29sc0FnZW50LnNldChzdGF0aWNfY2FzdDxXZWJEZXZUb29s
c0FnZW50UHJpdmF0ZSo+KGRldlRvb2xzQWdlbnQpKTsKK30KKworV2ViQWNjZXNzaWJpbGl0eU9i
amVjdCBXZWJWaWV3SW1wbDo6YWNjZXNzaWJpbGl0eU9iamVjdCgpCit7CisgICAgaWYgKCFtYWlu
RnJhbWVJbXBsKCkpCisgICAgICAgIHJldHVybiBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0KCk7CisK
KyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtYWluRnJhbWVJbXBsKCktPmZyYW1lKCktPmRvY3Vt
ZW50KCk7CisgICAgcmV0dXJuIFdlYkFjY2Vzc2liaWxpdHlPYmplY3QoCisgICAgICAgIGRvY3Vt
ZW50LT5heE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKGRvY3VtZW50LT5yZW5kZXJlcigpKSk7
Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OmFwcGx5QXV0b2ZpbGxTdWdnZXN0aW9ucygKKyAgICBj
b25zdCBXZWJOb2RlJiBub2RlLAorICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBzdWdn
ZXN0aW9ucywKKyAgICBpbnQgZGVmYXVsdFN1Z2dlc3Rpb25JbmRleCkKK3sKKyAgICBpZiAoIW1f
cGFnZS5nZXQoKSB8fCBzdWdnZXN0aW9ucy5pc0VtcHR5KCkpIHsKKyAgICAgICAgaGlkZUF1dG9D
b21wbGV0ZVBvcHVwKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQoZGVm
YXVsdFN1Z2dlc3Rpb25JbmRleCA8IHN0YXRpY19jYXN0PGludD4oc3VnZ2VzdGlvbnMuc2l6ZSgp
KSk7CisKKyAgICBpZiAoUmVmUHRyPEZyYW1lPiBmb2N1c2VkID0gbV9wYWdlLT5mb2N1c0NvbnRy
b2xsZXIoKS0+Zm9jdXNlZEZyYW1lKCkpIHsKKyAgICAgICAgUmVmUHRyPERvY3VtZW50PiBkb2N1
bWVudCA9IGZvY3VzZWQtPmRvY3VtZW50KCk7CisgICAgICAgIGlmICghZG9jdW1lbnQuZ2V0KCkp
IHsKKyAgICAgICAgICAgIGhpZGVBdXRvQ29tcGxldGVQb3B1cCgpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgUmVmUHRyPE5vZGU+IGZvY3VzZWROb2RlID0gZG9j
dW1lbnQtPmZvY3VzZWROb2RlKCk7CisgICAgICAgIC8vIElmIHRoZSBub2RlIGZvciB3aGljaCB3
ZSBxdWVyaWVkIHRoZSBhdXRvZmlsbCBzdWdnZXN0aW9ucyBpcyBub3QgdGhlCisgICAgICAgIC8v
IGZvY3VzZWQgbm9kZSwgdGhlbiB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uICBGSVhNRTogYWxzbyBj
aGVjayB0aGUKKyAgICAgICAgLy8gY2FycmV0IGlzIGF0IHRoZSBlbmQgYW5kIHRoYXQgdGhlIHRl
eHQgaGFzIG5vdCBjaGFuZ2VkLgorICAgICAgICBpZiAoIWZvY3VzZWROb2RlLmdldCgpIHx8IGZv
Y3VzZWROb2RlICE9IFBhc3NSZWZQdHI8Tm9kZT4obm9kZSkpIHsKKyAgICAgICAgICAgIGhpZGVB
dXRvQ29tcGxldGVQb3B1cCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKCFmb2N1c2VkTm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlucHV0VGFnKSkg
eworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW0gPQorICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KGZvY3VzZWROb2RlLmdldCgp
KTsKKworICAgICAgICAvLyBUaGUgZmlyc3QgdGltZSB0aGUgYXV0b2NvbXBsZXRlIGlzIHNob3du
IHdlJ2xsIGNyZWF0ZSB0aGUgY2xpZW50IGFuZCB0aGUKKyAgICAgICAgLy8gcG9wdXAuCisgICAg
ICAgIGlmICghbV9hdXRvY29tcGxldGVQb3B1cENsaWVudC5nZXQoKSkKKyAgICAgICAgICAgIG1f
YXV0b2NvbXBsZXRlUG9wdXBDbGllbnQuc2V0KG5ldyBBdXRvY29tcGxldGVQb3B1cE1lbnVDbGll
bnQodGhpcykpOworICAgICAgICBtX2F1dG9jb21wbGV0ZVBvcHVwQ2xpZW50LT5pbml0aWFsaXpl
KGlucHV0RWxlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdWdnZXN0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWZhdWx0U3VnZ2VzdGlvbkluZGV4KTsKKyAgICAgICAgaWYgKCFtX2F1dG9jb21wbGV0
ZVBvcHVwLmdldCgpKSB7CisgICAgICAgICAgICBtX2F1dG9jb21wbGV0ZVBvcHVwID0KKyAgICAg
ICAgICAgICAgICBQb3B1cENvbnRhaW5lcjo6Y3JlYXRlKG1fYXV0b2NvbXBsZXRlUG9wdXBDbGll
bnQuZ2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29t
cGxldGVQb3B1cFNldHRpbmdzKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX2F1dG9jb21w
bGV0ZVBvcHVwU2hvd2luZykgeworICAgICAgICAgICAgbV9hdXRvY29tcGxldGVQb3B1cENsaWVu
dC0+c2V0U3VnZ2VzdGlvbnMoc3VnZ2VzdGlvbnMpOworICAgICAgICAgICAgcmVmcmVzaEF1dG9m
aWxsUG9wdXAoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fYXV0b2NvbXBsZXRl
UG9wdXAtPnNob3coZm9jdXNlZE5vZGUtPmdldFJlY3QoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZm9jdXNlZE5vZGUtPm93bmVyRG9jdW1lbnQoKS0+dmlldygpLCAw
KTsKKyAgICAgICAgICAgIG1fYXV0b2NvbXBsZXRlUG9wdXBTaG93aW5nID0gdHJ1ZTsKKyAgICAg
ICAgfQorICAgIH0KK30KKwordm9pZCBXZWJWaWV3SW1wbDo6aGlkZUF1dG9maWxsUG9wdXAoKQor
eworICAgIGhpZGVBdXRvQ29tcGxldGVQb3B1cCgpOworfQorCisvLyBXZWJWaWV3IC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKK2Jvb2wgV2ViVmlld0ltcGw6OnNldERyb3BFZmZlY3QoYm9vbCBhY2NlcHQpCit7Cisg
ICAgaWYgKG1fZHJhZ1RhcmdldERpc3BhdGNoKSB7CisgICAgICAgIG1fZHJvcEVmZmVjdCA9IGFj
Y2VwdCA/IERyb3BFZmZlY3RDb3B5IDogRHJvcEVmZmVjdE5vbmU7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OnNl
dElzVHJhbnNwYXJlbnQoYm9vbCBpc1RyYW5zcGFyZW50KQoreworICAgIC8vIFNldCBhbnkgZXhp
c3RpbmcgZnJhbWVzIHRvIGJlIHRyYW5zcGFyZW50LgorICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFn
ZS0+bWFpbkZyYW1lKCk7CisgICAgd2hpbGUgKGZyYW1lKSB7CisgICAgICAgIGZyYW1lLT52aWV3
KCktPnNldFRyYW5zcGFyZW50KGlzVHJhbnNwYXJlbnQpOworICAgICAgICBmcmFtZSA9IGZyYW1l
LT50cmVlKCktPnRyYXZlcnNlTmV4dCgpOworICAgIH0KKworICAgIC8vIEZ1dHVyZSBmcmFtZXMg
Y2hlY2sgdGhpcyB0byBrbm93IHdoZXRoZXIgdG8gYmUgdHJhbnNwYXJlbnQuCisgICAgbV9pc1Ry
YW5zcGFyZW50ID0gaXNUcmFuc3BhcmVudDsKK30KKworYm9vbCBXZWJWaWV3SW1wbDo6aXNUcmFu
c3BhcmVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faXNUcmFuc3BhcmVudDsKK30KKwordm9p
ZCBXZWJWaWV3SW1wbDo6c2V0SXNBY3RpdmUoYm9vbCBhY3RpdmUpCit7CisgICAgaWYgKHBhZ2Uo
KSAmJiBwYWdlKCktPmZvY3VzQ29udHJvbGxlcigpKQorICAgICAgICBwYWdlKCktPmZvY3VzQ29u
dHJvbGxlcigpLT5zZXRBY3RpdmUoYWN0aXZlKTsKK30KKworYm9vbCBXZWJWaWV3SW1wbDo6aXNB
Y3RpdmUoKSBjb25zdAoreworICAgIHJldHVybiAocGFnZSgpICYmIHBhZ2UoKS0+Zm9jdXNDb250
cm9sbGVyKCkpID8gcGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS0+aXNBY3RpdmUoKSA6IGZhbHNl
OworfQorCit2b2lkIFdlYlZpZXdJbXBsOjpkaWRDb21taXRMb2FkKGJvb2wqIGlzTmV3TmF2aWdh
dGlvbikKK3sKKyAgICBpZiAoaXNOZXdOYXZpZ2F0aW9uKQorICAgICAgICAqaXNOZXdOYXZpZ2F0
aW9uID0gbV9vYnNlcnZlZE5ld05hdmlnYXRpb247CisKKyNpZm5kZWYgTkRFQlVHCisgICAgQVNT
RVJUKCFtX29ic2VydmVkTmV3TmF2aWdhdGlvbgorICAgICAgICB8fCBtX3BhZ2UtPm1haW5GcmFt
ZSgpLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSA9PSBtX25ld05hdmlnYXRpb25Mb2FkZXIp
OworICAgIG1fbmV3TmF2aWdhdGlvbkxvYWRlciA9IDA7CisjZW5kaWYKKyAgICBtX29ic2VydmVk
TmV3TmF2aWdhdGlvbiA9IGZhbHNlOworfQorCitib29sIFdlYlZpZXdJbXBsOjpuYXZpZ2F0aW9u
UG9saWN5RnJvbU1vdXNlRXZlbnQodW5zaWduZWQgc2hvcnQgYnV0dG9uLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY3RybCwgYm9vbCBzaGlm
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IGFsdCwgYm9vbCBtZXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFdlYk5hdmlnYXRpb25Qb2xpY3kqIHBvbGljeSkKK3sKKyNpZiBQTEFURk9STShX
SU5fT1MpIHx8IFBMQVRGT1JNKExJTlVYKSB8fCBQTEFURk9STShGUkVFQlNEKQorICAgIGNvbnN0
IGJvb2wgbmV3VGFiTW9kaWZpZXIgPSAoYnV0dG9uID09IDEpIHx8IGN0cmw7CisjZWxpZiBQTEFU
Rk9STShEQVJXSU4pCisgICAgY29uc3QgYm9vbCBuZXdUYWJNb2RpZmllciA9IChidXR0b24gPT0g
MSkgfHwgbWV0YTsKKyNlbmRpZgorICAgIGlmICghbmV3VGFiTW9kaWZpZXIgJiYgIXNoaWZ0ICYm
ICFhbHQpCisgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBBU1NFUlQocG9saWN5KTsKKyAgICBp
ZiAobmV3VGFiTW9kaWZpZXIpIHsKKyAgICAgICAgaWYgKHNoaWZ0KQorICAgICAgICAgICpwb2xp
Y3kgPSBXZWJOYXZpZ2F0aW9uUG9saWN5TmV3Rm9yZWdyb3VuZFRhYjsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICpwb2xpY3kgPSBXZWJOYXZpZ2F0aW9uUG9saWN5TmV3QmFja2dyb3VuZFRhYjsK
KyAgICB9IGVsc2UgeworICAgICAgICBpZiAoc2hpZnQpCisgICAgICAgICAgKnBvbGljeSA9IFdl
Yk5hdmlnYXRpb25Qb2xpY3lOZXdXaW5kb3c7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAqcG9s
aWN5ID0gV2ViTmF2aWdhdGlvblBvbGljeURvd25sb2FkOworICAgIH0KKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwordm9pZCBXZWJWaWV3SW1wbDo6c3RhcnREcmFnZ2luZyhjb25zdCBXZWJQb2ludCYg
ZXZlbnRQb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYkRyYWdE
YXRhJiBkcmFnRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViRHJhZ09w
ZXJhdGlvbnNNYXNrIG1hc2spCit7CisgICAgaWYgKCFtX2NsaWVudCkKKyAgICAgICAgcmV0dXJu
OworICAgIEFTU0VSVCghbV9kb2luZ0RyYWdBbmREcm9wKTsKKyAgICBtX2RvaW5nRHJhZ0FuZERy
b3AgPSB0cnVlOworICAgIG1fY2xpZW50LT5zdGFydERyYWdnaW5nKGV2ZW50UG9zLCBkcmFnRGF0
YSwgbWFzayk7Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OnNldEN1cnJlbnRIaXN0b3J5SXRlbShI
aXN0b3J5SXRlbSogaXRlbSkKK3sKKyAgICBtX2JhY2tGb3J3YXJkTGlzdENsaWVudEltcGwuc2V0
Q3VycmVudEhpc3RvcnlJdGVtKGl0ZW0pOworfQorCitIaXN0b3J5SXRlbSogV2ViVmlld0ltcGw6
OnByZXZpb3VzSGlzdG9yeUl0ZW0oKQoreworICAgIHJldHVybiBtX2JhY2tGb3J3YXJkTGlzdENs
aWVudEltcGwucHJldmlvdXNIaXN0b3J5SXRlbSgpOworfQorCit2b2lkIFdlYlZpZXdJbXBsOjpv
YnNlcnZlTmV3TmF2aWdhdGlvbigpCit7CisgICAgbV9vYnNlcnZlZE5ld05hdmlnYXRpb24gPSB0
cnVlOworI2lmbmRlZiBOREVCVUcKKyAgICBtX25ld05hdmlnYXRpb25Mb2FkZXIgPSBtX3BhZ2Ut
Pm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKTsKKyNlbmRpZgorfQorCit2
b2lkIFdlYlZpZXdJbXBsOjpoaWRlQXV0b0NvbXBsZXRlUG9wdXAoKQoreworICAgIGlmIChtX2F1
dG9jb21wbGV0ZVBvcHVwU2hvd2luZykgeworICAgICAgICBtX2F1dG9jb21wbGV0ZVBvcHVwLT5o
aWRlUG9wdXAoKTsKKyAgICAgICAgYXV0b0NvbXBsZXRlUG9wdXBEaWRIaWRlKCk7CisgICAgfQor
fQorCit2b2lkIFdlYlZpZXdJbXBsOjphdXRvQ29tcGxldGVQb3B1cERpZEhpZGUoKQoreworICAg
IG1fYXV0b2NvbXBsZXRlUG9wdXBTaG93aW5nID0gZmFsc2U7Cit9CisKK3ZvaWQgV2ViVmlld0lt
cGw6OnNldElnbm9yZUlucHV0RXZlbnRzKGJvb2wgbmV3VmFsdWUpCit7CisgICAgQVNTRVJUKG1f
aWdub3JlSW5wdXRFdmVudHMgIT0gbmV3VmFsdWUpOworICAgIG1faWdub3JlSW5wdXRFdmVudHMg
PSBuZXdWYWx1ZTsKK30KKworI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKQorTm90aWZpY2F0aW9u
UHJlc2VudGVySW1wbCogV2ViVmlld0ltcGw6Om5vdGlmaWNhdGlvblByZXNlbnRlckltcGwoKQor
eworICAgIGlmICghbV9ub3RpZmljYXRpb25QcmVzZW50ZXIuaXNJbml0aWFsaXplZCgpICYmIG1f
Y2xpZW50KQorICAgICAgICBtX25vdGlmaWNhdGlvblByZXNlbnRlci5pbml0aWFsaXplKG1fY2xp
ZW50LT5ub3RpZmljYXRpb25QcmVzZW50ZXIoKSk7CisgICAgcmV0dXJuICZtX25vdGlmaWNhdGlv
blByZXNlbnRlcjsKK30KKyNlbmRpZgorCit2b2lkIFdlYlZpZXdJbXBsOjpyZWZyZXNoQXV0b2Zp
bGxQb3B1cCgpCit7CisgICAgQVNTRVJUKG1fYXV0b2NvbXBsZXRlUG9wdXBTaG93aW5nKTsKKwor
ICAgIC8vIEhpZGUgdGhlIHBvcHVwIGlmIGl0IGhhcyBiZWNvbWUgZW1wdHkuCisgICAgaWYgKCFt
X2F1dG9jb21wbGV0ZVBvcHVwQ2xpZW50LT5saXN0U2l6ZSgpKSB7CisgICAgICAgIGhpZGVBdXRv
Q29tcGxldGVQb3B1cCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSW50UmVjdCBv
bGRCb3VuZHMgPSBtX2F1dG9jb21wbGV0ZVBvcHVwLT5ib3VuZHNSZWN0KCk7CisgICAgbV9hdXRv
Y29tcGxldGVQb3B1cC0+cmVmcmVzaCgpOworICAgIEludFJlY3QgbmV3Qm91bmRzID0gbV9hdXRv
Y29tcGxldGVQb3B1cC0+Ym91bmRzUmVjdCgpOworICAgIC8vIExldCdzIHJlc2l6ZSB0aGUgYmFj
a2luZyB3aW5kb3cgaWYgbmVjZXNzYXJ5LgorICAgIGlmIChvbGRCb3VuZHMgIT0gbmV3Qm91bmRz
KSB7CisgICAgICAgIFdlYlBvcHVwTWVudUltcGwqIHBvcHVwTWVudSA9CisgICAgICAgICAgICBz
dGF0aWNfY2FzdDxXZWJQb3B1cE1lbnVJbXBsKj4obV9hdXRvY29tcGxldGVQb3B1cC0+Y2xpZW50
KCkpOworICAgICAgICBwb3B1cE1lbnUtPmNsaWVudCgpLT5zZXRXaW5kb3dSZWN0KG5ld0JvdW5k
cyk7CisgICAgfQorfQorCitOb2RlKiBXZWJWaWV3SW1wbDo6Zm9jdXNlZFdlYkNvcmVOb2RlKCkK
K3sKKyAgICBGcmFtZSogZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2Vk
RnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gMDsKKworICAgIERvY3Vt
ZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpOworICAgIGlmICghZG9jdW1lbnQpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGRvY3VtZW50LT5mb2N1c2VkTm9kZSgpOwor
fQorCitIaXRUZXN0UmVzdWx0IFdlYlZpZXdJbXBsOjpoaXRUZXN0UmVzdWx0Rm9yV2luZG93UG9z
KGNvbnN0IEludFBvaW50JiBwb3MpCit7CisgICAgSW50UG9pbnQgZG9jUG9pbnQobV9wYWdlLT5t
YWluRnJhbWUoKS0+dmlldygpLT53aW5kb3dUb0NvbnRlbnRzKHBvcykpOworICAgIHJldHVybiBt
X3BhZ2UtPm1haW5GcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+aGl0VGVzdFJlc3VsdEF0UG9pbnQo
ZG9jUG9pbnQsIGZhbHNlKTsKK30KKwordm9pZCBXZWJWaWV3SW1wbDo6c2V0VGFic1RvTGlua3Mo
Ym9vbCBlbmFibGUpCit7CisgICAgbV90YWJzVG9MaW5rcyA9IGVuYWJsZTsKK30KKworYm9vbCBX
ZWJWaWV3SW1wbDo6dGFic1RvTGlua3MoKSBjb25zdAoreworICAgIHJldHVybiBtX3RhYnNUb0xp
bmtzOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViVmlld0ltcGwuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjY4OTA0Ci0tLSAvZGV2L251
bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCkBAIC0wLDAgKzEsNDE5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBXZWJWaWV3SW1wbF9oCisjZGVmaW5lIFdlYlZpZXdJbXBsX2gKKworLy8gRklY
TUU6IFJlbW92ZSB0aGVzZSByZWxhdGl2ZSBwYXRocyBvbmNlIGNvbnN1bWVycyBmcm9tIGdsdWUg
YXJlIHJlbW92ZWQuCisjaW5jbHVkZSAiLi4vcHVibGljL1dlYk5hdmlnYXRpb25Qb2xpY3kuaCIK
KyNpbmNsdWRlICIuLi9wdWJsaWMvV2ViUG9pbnQuaCIKKyNpbmNsdWRlICIuLi9wdWJsaWMvV2Vi
U2l6ZS5oIgorI2luY2x1ZGUgIi4uL3B1YmxpYy9XZWJTdHJpbmcuaCIKKyNpbmNsdWRlICIuLi9w
dWJsaWMvV2ViVmlldy5oIgorCisjaW5jbHVkZSAiQmFja0ZvcndhcmRMaXN0Q2xpZW50SW1wbC5o
IgorI2luY2x1ZGUgIkNocm9tZUNsaWVudEltcGwuaCIKKyNpbmNsdWRlICJDb250ZXh0TWVudUNs
aWVudEltcGwuaCIKKyNpbmNsdWRlICJEcmFnQ2xpZW50SW1wbC5oIgorI2luY2x1ZGUgIkVkaXRv
ckNsaWVudEltcGwuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnRJbXBsLmgiCisjaW5jbHVk
ZSAiTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbC5oIgorCisjaW5jbHVkZSA8d3RmL093blB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2Ns
YXNzIENocm9taXVtRGF0YU9iamVjdDsKK2NsYXNzIEZyYW1lOworY2xhc3MgSGlzdG9yeUl0ZW07
CitjbGFzcyBIaXRUZXN0UmVzdWx0OworY2xhc3MgS2V5Ym9hcmRFdmVudDsKK2NsYXNzIFBhZ2U7
CitjbGFzcyBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ7CitjbGFzcyBQb3B1cENvbnRhaW5lcjsKK2Ns
YXNzIFJhbmdlOworY2xhc3MgUmVuZGVyVGhlbWU7CitjbGFzcyBXaWRnZXQ7Cit9CisKK25hbWVz
cGFjZSBXZWJLaXQgeworY2xhc3MgQXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50OworY2xhc3Mg
Q29udGV4dE1lbnVDbGllbnRJbXBsOworY2xhc3MgV2ViQWNjZXNzaWJpbGl0eU9iamVjdDsKK2Ns
YXNzIFdlYkRldlRvb2xzQWdlbnRQcml2YXRlOworY2xhc3MgV2ViRnJhbWVJbXBsOworY2xhc3Mg
V2ViS2V5Ym9hcmRFdmVudDsKK2NsYXNzIFdlYk1vdXNlRXZlbnQ7CitjbGFzcyBXZWJNb3VzZVdo
ZWVsRXZlbnQ7CitjbGFzcyBXZWJTZXR0aW5nc0ltcGw7CisKK2NsYXNzIFdlYlZpZXdJbXBsIDog
cHVibGljIFdlYlZpZXcsIHB1YmxpYyBSZWZDb3VudGVkPFdlYlZpZXdJbXBsPiB7CitwdWJsaWM6
CisgICAgLy8gV2ViV2lkZ2V0IG1ldGhvZHM6CisgICAgdmlydHVhbCB2b2lkIGNsb3NlKCk7Cisg
ICAgdmlydHVhbCBXZWJTaXplIHNpemUoKSB7IHJldHVybiBtX3NpemU7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgcmVzaXplKGNvbnN0IFdlYlNpemUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7
CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFdlYkNhbnZhcyosIGNvbnN0IFdlYlJlY3QmKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgaGFuZGxlSW5wdXRFdmVudChjb25zdCBXZWJJbnB1dEV2ZW50Jik7Cisg
ICAgdmlydHVhbCB2b2lkIG1vdXNlQ2FwdHVyZUxvc3QoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
Rm9jdXMoYm9vbCBlbmFibGUpOworICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVDb21wb3NpdGlvbkV2
ZW50KFdlYkNvbXBvc2l0aW9uQ29tbWFuZCBjb21tYW5kLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBjdXJzb3JQb3NpdGlvbiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGFyZ2V0U3RhcnQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRhcmdldEVuZCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJTdHJpbmcmIHRleHQpOworICAgIHZpcnR1
YWwgYm9vbCBxdWVyeUNvbXBvc2l0aW9uU3RhdHVzKGJvb2wqIGVuYWJsZWQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViUmVjdCogY2FyZXRSZWN0KTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0VGV4dERpcmVjdGlvbihXZWJUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbik7
CisKKyAgICAvLyBXZWJWaWV3IG1ldGhvZHM6CisgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVN
YWluRnJhbWUoV2ViRnJhbWVDbGllbnQqKTsKKyAgICB2aXJ0dWFsIFdlYlNldHRpbmdzKiBzZXR0
aW5ncygpOworICAgIHZpcnR1YWwgV2ViU3RyaW5nIHBhZ2VFbmNvZGluZygpIGNvbnN0OworICAg
IHZpcnR1YWwgdm9pZCBzZXRQYWdlRW5jb2RpbmcoY29uc3QgV2ViU3RyaW5nJiBlbmNvZGluZyk7
CisgICAgdmlydHVhbCBib29sIGlzVHJhbnNwYXJlbnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0SXNUcmFuc3BhcmVudChib29sIHZhbHVlKTsKKyAgICB2aXJ0dWFsIGJvb2wgdGFic1Rv
TGlua3MoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VGFic1RvTGlua3MoYm9vbCB2YWx1
ZSk7CisgICAgdmlydHVhbCBib29sIHRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cygpIGNvbnN0
OworICAgIHZpcnR1YWwgdm9pZCBzZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoYm9vbCB2
YWx1ZSk7CisgICAgdmlydHVhbCBib29sIGlzQWN0aXZlKCkgY29uc3Q7CisgICAgdmlydHVhbCB2
b2lkIHNldElzQWN0aXZlKGJvb2wgdmFsdWUpOworICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEJl
Zm9yZVVubG9hZEV2ZW50KCk7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoVW5sb2FkRXZlbnQo
KTsKKyAgICB2aXJ0dWFsIFdlYkZyYW1lKiBtYWluRnJhbWUoKTsKKyAgICB2aXJ0dWFsIFdlYkZy
YW1lKiBmaW5kRnJhbWVCeU5hbWUoCisgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgV2Vi
RnJhbWUqIHJlbGF0aXZlVG9GcmFtZSk7CisgICAgdmlydHVhbCBXZWJGcmFtZSogZm9jdXNlZEZy
YW1lKCk7CisgICAgdmlydHVhbCB2b2lkIHNldEZvY3VzZWRGcmFtZShXZWJGcmFtZSogZnJhbWUp
OworICAgIHZpcnR1YWwgdm9pZCBzZXRJbml0aWFsRm9jdXMoYm9vbCByZXZlcnNlKTsKKyAgICB2
aXJ0dWFsIHZvaWQgY2xlYXJGb2N1c2VkTm9kZSgpOworICAgIHZpcnR1YWwgdm9pZCB6b29tSW4o
Ym9vbCB0ZXh0T25seSk7CisgICAgdmlydHVhbCB2b2lkIHpvb21PdXQoYm9vbCB0ZXh0T25seSk7
CisgICAgdmlydHVhbCB2b2lkIHpvb21EZWZhdWx0KCk7CisgICAgdmlydHVhbCB2b2lkIHBlcmZv
cm1NZWRpYVBsYXllckFjdGlvbigKKyAgICAgICAgY29uc3QgV2ViTWVkaWFQbGF5ZXJBY3Rpb24m
IGFjdGlvbiwKKyAgICAgICAgY29uc3QgV2ViUG9pbnQmIGxvY2F0aW9uKTsKKyAgICB2aXJ0dWFs
IHZvaWQgY29weUltYWdlQXQoY29uc3QgV2ViUG9pbnQmIHBvaW50KTsKKyAgICB2aXJ0dWFsIHZv
aWQgZHJhZ1NvdXJjZUVuZGVkQXQoCisgICAgICAgIGNvbnN0IFdlYlBvaW50JiBjbGllbnRQb2lu
dCwKKyAgICAgICAgY29uc3QgV2ViUG9pbnQmIHNjcmVlblBvaW50LAorICAgICAgICBXZWJEcmFn
T3BlcmF0aW9uIG9wZXJhdGlvbik7CisgICAgdmlydHVhbCB2b2lkIGRyYWdTb3VyY2VNb3ZlZFRv
KAorICAgICAgICBjb25zdCBXZWJQb2ludCYgY2xpZW50UG9pbnQsCisgICAgICAgIGNvbnN0IFdl
YlBvaW50JiBzY3JlZW5Qb2ludCk7CisgICAgdmlydHVhbCB2b2lkIGRyYWdTb3VyY2VTeXN0ZW1E
cmFnRW5kZWQoKTsKKyAgICB2aXJ0dWFsIFdlYkRyYWdPcGVyYXRpb24gZHJhZ1RhcmdldERyYWdF
bnRlcigKKyAgICAgICAgY29uc3QgV2ViRHJhZ0RhdGEmIGRyYWdEYXRhLCBpbnQgaWRlbnRpdHks
CisgICAgICAgIGNvbnN0IFdlYlBvaW50JiBjbGllbnRQb2ludCwKKyAgICAgICAgY29uc3QgV2Vi
UG9pbnQmIHNjcmVlblBvaW50LAorICAgICAgICBXZWJEcmFnT3BlcmF0aW9uc01hc2sgb3BlcmF0
aW9uc0FsbG93ZWQpOworICAgIHZpcnR1YWwgV2ViRHJhZ09wZXJhdGlvbiBkcmFnVGFyZ2V0RHJh
Z092ZXIoCisgICAgICAgIGNvbnN0IFdlYlBvaW50JiBjbGllbnRQb2ludCwKKyAgICAgICAgY29u
c3QgV2ViUG9pbnQmIHNjcmVlblBvaW50LAorICAgICAgICBXZWJEcmFnT3BlcmF0aW9uc01hc2sg
b3BlcmF0aW9uc0FsbG93ZWQpOworICAgIHZpcnR1YWwgdm9pZCBkcmFnVGFyZ2V0RHJhZ0xlYXZl
KCk7CisgICAgdmlydHVhbCB2b2lkIGRyYWdUYXJnZXREcm9wKAorICAgICAgICBjb25zdCBXZWJQ
b2ludCYgY2xpZW50UG9pbnQsCisgICAgICAgIGNvbnN0IFdlYlBvaW50JiBzY3JlZW5Qb2ludCk7
CisgICAgdmlydHVhbCBpbnQgZHJhZ0lkZW50aXR5KCk7CisgICAgdmlydHVhbCBib29sIHNldERy
b3BFZmZlY3QoYm9vbCBhY2NlcHQpOworICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0RWxlbWVudEF0
KGNvbnN0IFdlYlBvaW50JiBwb2ludCk7CisgICAgdmlydHVhbCBXZWJTdHJpbmcgaW5zcGVjdG9y
U2V0dGluZ3MoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SW5zcGVjdG9yU2V0dGluZ3Mo
Y29uc3QgV2ViU3RyaW5nJiBzZXR0aW5ncyk7CisgICAgdmlydHVhbCBXZWJEZXZUb29sc0FnZW50
KiBkZXZUb29sc0FnZW50KCk7CisgICAgdmlydHVhbCB2b2lkIHNldERldlRvb2xzQWdlbnQoV2Vi
RGV2VG9vbHNBZ2VudCopOworICAgIHZpcnR1YWwgV2ViQWNjZXNzaWJpbGl0eU9iamVjdCBhY2Nl
c3NpYmlsaXR5T2JqZWN0KCk7CisgICAgdmlydHVhbCB2b2lkIGFwcGx5QXV0b2ZpbGxTdWdnZXN0
aW9ucygKKyAgICAgICAgY29uc3QgV2ViTm9kZSYsCisgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxX
ZWJTdHJpbmc+JiBzdWdnZXN0aW9ucywKKyAgICAgICAgaW50IGRlZmF1bHRTdWdnZXN0aW9uSW5k
ZXgpOworICAgIHZpcnR1YWwgdm9pZCBoaWRlQXV0b2ZpbGxQb3B1cCgpOworCisgICAgLy8gV2Vi
Vmlld0ltcGwKKworICAgIHZvaWQgc2V0SWdub3JlSW5wdXRFdmVudHMoYm9vbCBuZXdWYWx1ZSk7
CisgICAgV2ViRGV2VG9vbHNBZ2VudFByaXZhdGUqIGRldlRvb2xzQWdlbnRQcml2YXRlKCkgeyBy
ZXR1cm4gbV9kZXZUb29sc0FnZW50LmdldCgpOyB9CisKKyAgICBjb25zdCBXZWJQb2ludCYgbGFz
dE1vdXNlRG93blBvaW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2xhc3RNb3Vz
ZURvd25Qb2ludDsKKyAgICB9CisKKyAgICBXZWJDb3JlOjpGcmFtZSogZm9jdXNlZFdlYkNvcmVG
cmFtZSgpOworCisgICAgLy8gUmV0dXJucyB0aGUgY3VycmVudGx5IGZvY3VzZWQgTm9kZSBvciBu
dWxsIGlmIG5vIG5vZGUgaGFzIGZvY3VzLgorICAgIFdlYkNvcmU6Ok5vZGUqIGZvY3VzZWRXZWJD
b3JlTm9kZSgpOworCisgICAgc3RhdGljIFdlYlZpZXdJbXBsKiBmcm9tUGFnZShXZWJDb3JlOjpQ
YWdlKik7CisKKyAgICBXZWJWaWV3Q2xpZW50KiBjbGllbnQoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fY2xpZW50OworICAgIH0KKworICAgIC8vIFJldHVybnMgdGhlIHBhZ2Ugb2JqZWN0IGFz
c29jaWF0ZWQgd2l0aCB0aGlzIHZpZXcuICBUaGlzIG1heSBiZSBudWxsIHdoZW4KKyAgICAvLyB0
aGUgcGFnZSBpcyBzaHV0dGluZyBkb3duLCBidXQgd2lsbCBiZSB2YWxpZCBhdCBhbGwgb3RoZXIg
dGltZXMuCisgICAgV2ViQ29yZTo6UGFnZSogcGFnZSgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV9wYWdlLmdldCgpOworICAgIH0KKworICAgIFdlYkNvcmU6OlJlbmRlclRoZW1lKiB0
aGVtZSgpIGNvbnN0OworCisgICAgLy8gUmV0dXJucyB0aGUgbWFpbiBmcmFtZSBhc3NvY2lhdGVk
IHdpdGggdGhpcyB2aWV3LiAgVGhpcyBtYXkgYmUgbnVsbCB3aGVuCisgICAgLy8gdGhlIHBhZ2Ug
aXMgc2h1dHRpbmcgZG93biwgYnV0IHdpbGwgYmUgdmFsaWQgYXQgYWxsIG90aGVyIHRpbWVzLgor
ICAgIFdlYkZyYW1lSW1wbCogbWFpbkZyYW1lSW1wbCgpOworCisgICAgLy8gSGlzdG9yeSByZWxh
dGVkIG1ldGhvZHM6CisgICAgdm9pZCBzZXRDdXJyZW50SGlzdG9yeUl0ZW0oV2ViQ29yZTo6SGlz
dG9yeUl0ZW0qKTsKKyAgICBXZWJDb3JlOjpIaXN0b3J5SXRlbSogcHJldmlvdXNIaXN0b3J5SXRl
bSgpOworICAgIHZvaWQgb2JzZXJ2ZU5ld05hdmlnYXRpb24oKTsKKworICAgIC8vIEV2ZW50IHJl
bGF0ZWQgbWV0aG9kczoKKyAgICB2b2lkIG1vdXNlTW92ZShjb25zdCBXZWJNb3VzZUV2ZW50Jik7
CisgICAgdm9pZCBtb3VzZUxlYXZlKGNvbnN0IFdlYk1vdXNlRXZlbnQmKTsKKyAgICB2b2lkIG1v
dXNlRG93bihjb25zdCBXZWJNb3VzZUV2ZW50Jik7CisgICAgdm9pZCBtb3VzZVVwKGNvbnN0IFdl
Yk1vdXNlRXZlbnQmKTsKKyAgICB2b2lkIG1vdXNlQ29udGV4dE1lbnUoY29uc3QgV2ViTW91c2VF
dmVudCYpOworICAgIHZvaWQgbW91c2VEb3VibGVDbGljayhjb25zdCBXZWJNb3VzZUV2ZW50Jik7
CisgICAgdm9pZCBtb3VzZVdoZWVsKGNvbnN0IFdlYk1vdXNlV2hlZWxFdmVudCYpOworICAgIGJv
b2wga2V5RXZlbnQoY29uc3QgV2ViS2V5Ym9hcmRFdmVudCYpOworICAgIGJvb2wgY2hhckV2ZW50
KGNvbnN0IFdlYktleWJvYXJkRXZlbnQmKTsKKworICAgIC8vIEhhbmRsZXMgY29udGV4dCBtZW51
IGV2ZW50cyBvcmlnbmF0ZWQgdmlhIHRoZSB0aGUga2V5Ym9hcmQuIFRoZXNlCisgICAgLy8gaW5j
bHVkZSB0aGUgVktfQVBQUyB2aXJ0dWFsIGtleSBhbmQgdGhlIFNoaWZ0K0YxMCBjb21iaW5lLiAg
Q29kZSBpcworICAgIC8vIGJhc2VkIG9uIHRoZSBXZWJraXQgZnVuY3Rpb24gYm9vbCBXZWJWaWV3
OjpoYW5kbGVDb250ZXh0TWVudUV2ZW50KFdQQVJBTQorICAgIC8vIHdQYXJhbSwgTFBBUkFNIGxQ
YXJhbSkgaW4gd2Via2l0XHdlYmtpdFx3aW5cV2ViVmlldy5jcHAuIFRoZSBvbmx5CisgICAgLy8g
c2lnbmlmaWNhbnQgY2hhbmdlIGluIHRoaXMgZnVuY3Rpb24gaXMgdGhlIGNvZGUgdG8gY29udmVy
dCBmcm9tIGEKKyAgICAvLyBLZXlib2FyZCBldmVudCB0byB0aGUgUmlnaHQgTW91c2UgYnV0dG9u
IGRvd24gZXZlbnQuCisgICAgYm9vbCBzZW5kQ29udGV4dE1lbnVFdmVudChjb25zdCBXZWJLZXli
b2FyZEV2ZW50Jik7CisKKyAgICAvLyBOb3RpZmllcyB0aGUgV2ViVmlldyB0aGF0IGEgbG9hZCBo
YXMgYmVlbiBjb21taXR0ZWQuICBpc05ld05hdmlnYXRpb24KKyAgICAvLyB3aWxsIGJlIHRydWUg
aWYgYSBuZXcgc2Vzc2lvbiBoaXN0b3J5IGl0ZW0gc2hvdWxkIGJlIGNyZWF0ZWQgZm9yIHRoYXQK
KyAgICAvLyBsb2FkLgorICAgIHZvaWQgZGlkQ29tbWl0TG9hZChib29sKiBpc05ld05hdmlnYXRp
b24pOworCisgICAgYm9vbCBjb250ZXh0TWVudUFsbG93ZWQoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fY29udGV4dE1lbnVBbGxvd2VkOworICAgIH0KKworICAgIC8vIFNldCB0aGUg
ZGlzcG9zaXRpb24gZm9yIGhvdyB0aGlzIHdlYnZpZXcgaXMgdG8gYmUgaW5pdGlhbGx5IHNob3du
LgorICAgIHZvaWQgc2V0SW5pdGlhbE5hdmlnYXRpb25Qb2xpY3koV2ViTmF2aWdhdGlvblBvbGlj
eSBwb2xpY3kpCisgICAgeworICAgICAgICBtX2luaXRpYWxOYXZpZ2F0aW9uUG9saWN5ID0gcG9s
aWN5OworICAgIH0KKyAgICBXZWJOYXZpZ2F0aW9uUG9saWN5IGluaXRpYWxOYXZpZ2F0aW9uUG9s
aWN5KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2luaXRpYWxOYXZpZ2F0aW9uUG9s
aWN5OworICAgIH0KKworICAgIC8vIERldGVybWluZXMgd2hldGhlciBhIHBhZ2Ugc2hvdWxkIGUu
Zy4gYmUgb3BlbmVkIGluIGEgYmFja2dyb3VuZCB0YWIuCisgICAgLy8gUmV0dXJucyBmYWxzZSBp
ZiBpdCBoYXMgbm8gb3BpbmlvbiwgaW4gd2hpY2ggY2FzZSBpdCBkb2Vzbid0IHNldCAqcG9saWN5
LgorICAgIHN0YXRpYyBib29sIG5hdmlnYXRpb25Qb2xpY3lGcm9tTW91c2VFdmVudCgKKyAgICAg
ICAgdW5zaWduZWQgc2hvcnQgYnV0dG9uLAorICAgICAgICBib29sIGN0cmwsCisgICAgICAgIGJv
b2wgc2hpZnQsCisgICAgICAgIGJvb2wgYWx0LAorICAgICAgICBib29sIG1ldGEsCisgICAgICAg
IFdlYk5hdmlnYXRpb25Qb2xpY3kqKTsKKworICAgIC8vIFN0YXJ0IGEgc3lzdGVtIGRyYWcgYW5k
IGRyb3Agb3BlcmF0aW9uLgorICAgIHZvaWQgc3RhcnREcmFnZ2luZygKKyAgICAgICAgY29uc3Qg
V2ViUG9pbnQmIGV2ZW50UG9zLAorICAgICAgICBjb25zdCBXZWJEcmFnRGF0YSYgZHJhZ0RhdGEs
CisgICAgICAgIFdlYkRyYWdPcGVyYXRpb25zTWFzayBkcmFnU291cmNlT3BlcmF0aW9uTWFzayk7
CisKKyAgICAvLyBIaWRlcyB0aGUgYXV0b2NvbXBsZXRlIHBvcHVwIGlmIGl0IGlzIHNob3dpbmcu
CisgICAgdm9pZCBoaWRlQXV0b0NvbXBsZXRlUG9wdXAoKTsKKyAgICB2b2lkIGF1dG9Db21wbGV0
ZVBvcHVwRGlkSGlkZSgpOworCisjaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpCisgICAgLy8gUmV0
dXJucyB0aGUgcHJvdmlkZXIgb2YgZGVza3RvcCBub3RpZmljYXRpb25zLgorICAgIE5vdGlmaWNh
dGlvblByZXNlbnRlckltcGwqIG5vdGlmaWNhdGlvblByZXNlbnRlckltcGwoKTsKKyNlbmRpZgor
CisgICAgLy8gVHJpZXMgdG8gc2Nyb2xsIGEgZnJhbWUgb3IgYW55IHBhcmVudCBvZiBhIGZyYW1l
LiBSZXR1cm5zIHRydWUgaWYgdGhlIHZpZXcKKyAgICAvLyB3YXMgc2Nyb2xsZWQuCisgICAgYm9v
bCBwcm9wYWdhdGVTY3JvbGwoV2ViQ29yZTo6U2Nyb2xsRGlyZWN0aW9uLCBXZWJDb3JlOjpTY3Jv
bGxHcmFudWxhcml0eSk7CisKKyAgICAvLyBIQUNLOiBjdXJyZW50SW5wdXRFdmVudCgpIGlzIGZv
ciBDaHJvbWVDbGllbnRJbXBsOjpzaG93KCksIHVudGlsIHdlIGNhbgorICAgIC8vIGZpeCBXZWJL
aXQgdG8gcGFzcyBlbm91Z2ggaW5mb3JtYXRpb24gdXAgaW50byBDaHJvbWVDbGllbnQ6OnNob3co
KSBzbyB3ZQorICAgIC8vIGNhbiBkZWNpZGUgaWYgdGhlIHdpbmRvdy5vcGVuIGV2ZW50IHdhcyBj
YXVzZWQgYnkgYSBtaWRkbGUtbW91c2UgY2xpY2sKKyAgICBzdGF0aWMgY29uc3QgV2ViSW5wdXRF
dmVudCogY3VycmVudElucHV0RXZlbnQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVu
dElucHV0RXZlbnQ7CisgICAgfQorCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBXZWJWaWV3
OyAgLy8gU28gV2ViVmlldzo6Q3JlYXRlIGNhbiBjYWxsIG91ciBjb25zdHJ1Y3RvcgorICAgIGZy
aWVuZCBjbGFzcyBXVEY6OlJlZkNvdW50ZWQ8V2ViVmlld0ltcGw+OworCisgICAgV2ViVmlld0lt
cGwoV2ViVmlld0NsaWVudCogY2xpZW50KTsKKyAgICB+V2ViVmlld0ltcGwoKTsKKworICAgIC8v
IFJldHVybnMgdHJ1ZSBpZiB0aGUgZXZlbnQgd2FzIGFjdHVhbGx5IHByb2Nlc3NlZC4KKyAgICBi
b29sIGtleUV2ZW50RGVmYXVsdChjb25zdCBXZWJLZXlib2FyZEV2ZW50Jik7CisKKyAgICAvLyBS
ZXR1cm5zIHRydWUgaWYgdGhlIGF1dG9jb21wbGUgaGFzIGNvbnN1bWVkIHRoZSBldmVudC4KKyAg
ICBib29sIGF1dG9jb21wbGV0ZUhhbmRsZUtleUV2ZW50KGNvbnN0IFdlYktleWJvYXJkRXZlbnQm
KTsKKworICAgIC8vIFJlcGFpbnRzIHRoZSBhdXRvZmlsbCBwb3B1cC4gIFNob3VsZCBiZSBjYWxs
ZWQgd2hlbiB0aGUgc3VnZ2VzdGlvbnMgaGF2ZQorICAgIC8vIGNoYW5nZWQuICBOb3RlIHRoYXQg
dGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiB0aGUgYXV0b2ZpbGwgcG9wdXAgaXMKKyAg
ICAvLyBzaG93aW5nLgorICAgIHZvaWQgcmVmcmVzaEF1dG9maWxsUG9wdXAoKTsKKworICAgIC8v
IFJldHVybnMgdHJ1ZSBpZiB0aGUgdmlldyB3YXMgc2Nyb2xsZWQuCisgICAgYm9vbCBzY3JvbGxW
aWV3V2l0aEtleWJvYXJkKGludCBrZXlDb2RlLCBpbnQgbW9kaWZpZXJzKTsKKworICAgIC8vIENv
bnZlcnRzIHxwb3N8IGZyb20gd2luZG93IGNvb3JkaW5hdGVzIHRvIGNvbnRlbnRzIGNvb3JkaW5h
dGVzIGFuZCBnZXRzCisgICAgLy8gdGhlIEhpdFRlc3RSZXN1bHQgZm9yIGl0LgorICAgIFdlYkNv
cmU6OkhpdFRlc3RSZXN1bHQgaGl0VGVzdFJlc3VsdEZvcldpbmRvd1Bvcyhjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYpOworCisgICAgV2ViVmlld0NsaWVudCogbV9jbGllbnQ7CisKKyAgICBCYWNr
Rm9yd2FyZExpc3RDbGllbnRJbXBsIG1fYmFja0ZvcndhcmRMaXN0Q2xpZW50SW1wbDsKKyAgICBD
aHJvbWVDbGllbnRJbXBsIG1fY2hyb21lQ2xpZW50SW1wbDsKKyAgICBDb250ZXh0TWVudUNsaWVu
dEltcGwgbV9jb250ZXh0TWVudUNsaWVudEltcGw7CisgICAgRHJhZ0NsaWVudEltcGwgbV9kcmFn
Q2xpZW50SW1wbDsKKyAgICBFZGl0b3JDbGllbnRJbXBsIG1fZWRpdG9yQ2xpZW50SW1wbDsKKyAg
ICBJbnNwZWN0b3JDbGllbnRJbXBsIG1faW5zcGVjdG9yQ2xpZW50SW1wbDsKKworICAgIFdlYlNp
emUgbV9zaXplOworCisgICAgV2ViUG9pbnQgbV9sYXN0TW91c2VQb3NpdGlvbjsKKyAgICBPd25Q
dHI8V2ViQ29yZTo6UGFnZT4gbV9wYWdlOworCisgICAgLy8gVGhpcyBmbGFnIGlzIHNldCB3aGVu
IGEgbmV3IG5hdmlnYXRpb24gaXMgZGV0ZWN0ZWQuICBJdCBpcyB1c2VkIHRvIHNhdGlzZnkKKyAg
ICAvLyB0aGUgY29ycmVzcG9uZGluZyBhcmd1bWVudCB0byBXZWJGcmFtZUNsaWVudDo6ZGlkQ29t
bWl0UHJvdmlzaW9uYWxMb2FkLgorICAgIGJvb2wgbV9vYnNlcnZlZE5ld05hdmlnYXRpb247Cisj
aWZuZGVmIE5ERUJVRworICAgIC8vIFVzZWQgdG8gYXNzZXJ0IHRoYXQgdGhlIG5ldyBuYXZpZ2F0
aW9uIHdlIG9ic2VydmVkIGlzIHRoZSBzYW1lIG5hdmlnYXRpb24KKyAgICAvLyB3aGVuIHdlIG1h
a2UgdXNlIG9mIG1fb2JzZXJ2ZWROZXdOYXZpZ2F0aW9uLgorICAgIGNvbnN0IFdlYkNvcmU6OkRv
Y3VtZW50TG9hZGVyKiBtX25ld05hdmlnYXRpb25Mb2FkZXI7CisjZW5kaWYKKworICAgIC8vIEFu
IG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIG1hbmlwdWxhdGUgbV9wYWdlLT5zZXR0aW5ncygp
IHdpdGhvdXQgbGlua2luZworICAgIC8vIGFnYWluc3QgV2ViQ29yZS4gIFRoaXMgaXMgbGF6aWx5
IGFsbG9jYXRlZCB0aGUgZmlyc3QgdGltZSBHZXRXZWJTZXR0aW5ncygpCisgICAgLy8gaXMgY2Fs
bGVkLgorICAgIE93blB0cjxXZWJTZXR0aW5nc0ltcGw+IG1fd2ViU2V0dGluZ3M7CisKKyAgICAv
LyBBIGNvcHkgb2YgdGhlIHdlYiBkcm9wIGRhdGEgb2JqZWN0IHdlIHJlY2VpdmVkIGZyb20gdGhl
IGJyb3dzZXIuCisgICAgUmVmUHRyPFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdD4gbV9jdXJy
ZW50RHJhZ0RhdGE7CisKKyAgICAvLyBUaGUgcG9pbnQgcmVsYXRpdmUgdG8gdGhlIGNsaWVudCBh
cmVhIHdoZXJlIHRoZSBtb3VzZSB3YXMgbGFzdCBwcmVzc2VkCisgICAgLy8gZG93bi4gVGhpcyBp
cyB1c2VkIGJ5IHRoZSBkcmFnIGNsaWVudCB0byBkZXRlcm1pbmUgd2hhdCB3YXMgdW5kZXIgdGhl
CisgICAgLy8gbW91c2Ugd2hlbiB0aGUgZHJhZyB3YXMgaW5pdGlhdGVkLiBXZSBuZWVkIHRvIHRy
YWNrIHRoaXMgaGVyZSBpbgorICAgIC8vIFdlYlZpZXdJbXBsIHNpbmNlIERyYWdDbGllbnQ6OnN0
YXJ0RHJhZyBkb2VzIG5vdCBwYXNzIHRoZSBwb3NpdGlvbiB0aGUKKyAgICAvLyBtb3VzZSB3YXMg
YXQgd2hlbiB0aGUgZHJhZyB3YXMgaW5pdGlhdGVkLCBvbmx5IHRoZSBjdXJyZW50IHBvaW50LCB3
aGljaAorICAgIC8vIGNhbiBiZSBtaXNsZWFkaW5nIGFzIGl0IGlzIHVzdWFsbHkgbm90IG92ZXIg
dGhlIGVsZW1lbnQgdGhlIHVzZXIgYWN0dWFsbHkKKyAgICAvLyBkcmFnZ2VkIGJ5IHRoZSB0aW1l
IGEgZHJhZyBpcyBpbml0aWF0ZWQuCisgICAgV2ViUG9pbnQgbV9sYXN0TW91c2VEb3duUG9pbnQ7
CisKKyAgICAvLyBLZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCB0ZXh0IHpvb20gbGV2ZWwuICAw
IG1lYW5zIG5vIHpvb20sIHBvc2l0aXZlCisgICAgLy8gdmFsdWVzIG1lYW4gbGFyZ2VyIHRleHQs
IG5lZ2F0aXZlIG51bWJlcnMgbWVhbiBzbWFsbGVyLgorICAgIGludCBtX3pvb21MZXZlbDsKKwor
ICAgIGJvb2wgbV9jb250ZXh0TWVudUFsbG93ZWQ7CisKKyAgICBib29sIG1fZG9pbmdEcmFnQW5k
RHJvcDsKKworICAgIGJvb2wgbV9pZ25vcmVJbnB1dEV2ZW50czsKKworICAgIC8vIFdlYmtpdCBl
eHBlY3RzIGtleVByZXNzIGV2ZW50cyB0byBiZSBzdXBwcmVzc2VkIGlmIHRoZSBhc3NvY2lhdGVk
IGtleURvd24KKyAgICAvLyBldmVudCB3YXMgaGFuZGxlZC4gU2FmYXJpIGltcGxlbWVudHMgdGhp
cyBiZWhhdmlvciBieSBwZWVraW5nIG91dCB0aGUKKyAgICAvLyBhc3NvY2lhdGVkIFdNX0NIQVIg
ZXZlbnQgaWYgdGhlIGtleWRvd24gd2FzIGhhbmRsZWQuIFdlIGVtdWxhdGUKKyAgICAvLyB0aGlz
IGJlaGF2aW9yIGJ5IHNldHRpbmcgdGhpcyBmbGFnIGlmIHRoZSBrZXlEb3duIHdhcyBoYW5kbGVk
LgorICAgIGJvb2wgbV9zdXBwcmVzc05leHRLZXlwcmVzc0V2ZW50OworCisgICAgLy8gVGhlIHBv
bGljeSBmb3IgaG93IHRoaXMgd2VidmlldyBpcyB0byBiZSBpbml0aWFsbHkgc2hvd24uCisgICAg
V2ViTmF2aWdhdGlvblBvbGljeSBtX2luaXRpYWxOYXZpZ2F0aW9uUG9saWN5OworCisgICAgLy8g
UmVwcmVzZW50cyB3aGV0aGVyIG9yIG5vdCB0aGlzIG9iamVjdCBzaG91bGQgcHJvY2VzcyBpbmNv
bWluZyBJTUUgZXZlbnRzLgorICAgIGJvb2wgbV9pbWVBY2NlcHRFdmVudHM7CisKKyAgICAvLyBU
cnVlIHdoaWxlIGRpc3BhdGNoaW5nIHN5c3RlbSBkcmFnIGFuZCBkcm9wIGV2ZW50cyB0byBkcmFn
L2Ryb3AgdGFyZ2V0cworICAgIC8vIHdpdGhpbiB0aGlzIFdlYlZpZXcuCisgICAgYm9vbCBtX2Ry
YWdUYXJnZXREaXNwYXRjaDsKKworICAgIC8vIFZhbGlkIHdoZW4gbV9kcmFnVGFyZ2V0RGlzcGF0
Y2ggaXMgdHJ1ZTsgdGhlIGlkZW50aXR5IG9mIHRoZSBkcmFnIGRhdGEKKyAgICAvLyBjb3BpZWQg
ZnJvbSB0aGUgV2ViRHJvcERhdGEgb2JqZWN0IHNlbnQgZnJvbSB0aGUgYnJvd3NlciBwcm9jZXNz
LgorICAgIGludCBtX2RyYWdJZGVudGl0eTsKKworICAgIC8vIFZhbGlkIHdoZW4gbV9kcmFnVGFy
Z2V0RGlzcGF0Y2ggaXMgdHJ1ZS4gIFVzZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQKKyAgICAv
LyBicm93c2VyIGRyb3AgZWZmZWN0IHdpdGggdGhlIGVmZmVjdHMgIm5vbmUiIG9yICJjb3B5Ii4K
KyAgICBlbnVtIERyYWdUYXJnZXREcm9wRWZmZWN0IHsKKyAgICAgICAgRHJvcEVmZmVjdERlZmF1
bHQgPSAtMSwKKyAgICAgICAgRHJvcEVmZmVjdE5vbmUsCisgICAgICAgIERyb3BFZmZlY3RDb3B5
CisgICAgfSBtX2Ryb3BFZmZlY3Q7CisKKyAgICAvLyBUaGUgYXZhaWxhYmxlIGRyYWcgb3BlcmF0
aW9ucyAoY29weSwgbW92ZSBsaW5rLi4uKSBhbGxvd2VkIGJ5IHRoZSBzb3VyY2UuCisgICAgV2Vi
RHJhZ09wZXJhdGlvbiBtX29wZXJhdGlvbnNBbGxvd2VkOworCisgICAgLy8gVGhlIGN1cnJlbnQg
ZHJhZyBvcGVyYXRpb24gYXMgbmVnb3RpYXRlZCBieSB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlv
bi4KKyAgICAvLyBXaGVuIG5vdCBlcXVhbCB0byBEcmFnT3BlcmF0aW9uTm9uZSwgdGhlIGRyYWcg
ZGF0YSBjYW4gYmUgZHJvcHBlZCBvbnRvIHRoZQorICAgIC8vIGN1cnJlbnQgZHJvcCB0YXJnZXQg
aW4gdGhpcyBXZWJWaWV3ICh0aGUgZHJvcCB0YXJnZXQgY2FuIGFjY2VwdCB0aGUgZHJvcCkuCisg
ICAgV2ViRHJhZ09wZXJhdGlvbiBtX2RyYWdPcGVyYXRpb247CisKKyAgICAvLyBUaGUgYXV0b2Nv
bXBsZXRlIHBvcHVwLiAgS2VwdCBhcm91bmQgYW5kIHJldXNlZCBldmVyeS10aW1lIG5ldyBzdWdn
ZXN0aW9ucworICAgIC8vIHNob3VsZCBiZSBzaG93bi4KKyAgICBSZWZQdHI8V2ViQ29yZTo6UG9w
dXBDb250YWluZXI+IG1fYXV0b2NvbXBsZXRlUG9wdXA7CisKKyAgICAvLyBXaGV0aGVyIHRoZSBh
dXRvY29tcGxldGUgcG9wdXAgaXMgY3VycmVudGx5IHNob3dpbmcuCisgICAgYm9vbCBtX2F1dG9j
b21wbGV0ZVBvcHVwU2hvd2luZzsKKworICAgIC8vIFRoZSBhdXRvY29tcGxldGUgY2xpZW50Lgor
ICAgIE93blB0cjxBdXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQ+IG1fYXV0b2NvbXBsZXRlUG9w
dXBDbGllbnQ7CisKKyAgICBPd25QdHI8V2ViRGV2VG9vbHNBZ2VudFByaXZhdGU+IG1fZGV2VG9v
bHNBZ2VudDsKKworICAgIC8vIFdoZXRoZXIgdGhlIHdlYnZpZXcgaXMgcmVuZGVyaW5nIHRyYW5z
cGFyZW50bHkuCisgICAgYm9vbCBtX2lzVHJhbnNwYXJlbnQ7CisKKyAgICAvLyBXaGV0aGVyIHRo
ZSB1c2VyIGNhbiBwcmVzcyB0YWIgdG8gZm9jdXMgbGlua3MuCisgICAgYm9vbCBtX3RhYnNUb0xp
bmtzOworCisgICAgLy8gSW5zcGVjdG9yIHNldHRpbmdzLgorICAgIFdlYlN0cmluZyBtX2luc3Bl
Y3RvclNldHRpbmdzOworCisjaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpCisgICAgLy8gVGhlIHBy
b3ZpZGVyIG9mIGRlc2t0b3Agbm90aWZpY2F0aW9uczsKKyAgICBOb3RpZmljYXRpb25QcmVzZW50
ZXJJbXBsIG1fbm90aWZpY2F0aW9uUHJlc2VudGVyOworI2VuZGlmCisKKyAgICBzdGF0aWMgY29u
c3QgV2ViSW5wdXRFdmVudCogbV9jdXJyZW50SW5wdXRFdmVudDsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWY=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42831</attachid>
            <date>2009-11-09 18:37:15 -0800</date>
            <delta_ts>2009-11-10 09:47:19 -0800</delta_ts>
            <desc>Up-streaming Chromium API src files: WebWorker and friends.</desc>
            <filename>bug-31276-20091109183713.patch</filename>
            <type>text/plain</type>
            <size>69058</size>
            <attacher name="Yaar Schnitman">yaar</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IDg4Y2VhMDcuLjQ3YzMzNTEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMiw2ICsy
LDI5NiBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgogCisgICAgICAg
IFVwLXN0cmVhbWluZyBDaHJvbWl1bSBBUEkgc3JjIGZpbGVzOiBXZWJXb3JrZXIgYW5kIGZyaWVu
ZHMuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMx
Mjc2CisKKyAgICAgICAgKiBzcmMvV2ViV29ya2VyQmFzZS5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViS2l0OjpXb3JrZXJXZWJGcmFtZUNsaWVudDo6ZGlkQ3JlYXRlRGF0YVNvdXJjZSk6CisgICAg
ICAgIChXZWJLaXQ6OldvcmtlcldlYkZyYW1lQ2xpZW50OjpzaGFyZWRJbnN0YW5jZSk6CisgICAg
ICAgIChXZWJLaXQ6OldvcmtlcldlYkZyYW1lQ2xpZW50OjpXb3JrZXJXZWJGcmFtZUNsaWVudCk6
CisgICAgICAgIChXZWJLaXQ6OmluaXRpYWxpemVXZWJLaXRTdGF0aWNWYWx1ZXMpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJXb3JrZXJCYXNlOjpXZWJXb3JrZXJCYXNlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViV29ya2VyQmFzZTo6fldlYldvcmtlckJhc2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJX
b3JrZXJCYXNlOjpzdG9wV29ya2VyVGhyZWFkKToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2Vy
QmFzZTo6aW5pdGlhbGl6ZUxvYWRlcik6CisgICAgICAgIChXZWJLaXQ6OldlYldvcmtlckJhc2U6
OmRpc3BhdGNoVGFza1RvTWFpblRocmVhZCk6CisgICAgICAgIChXZWJLaXQ6OldlYldvcmtlckJh
c2U6Omludm9rZVRhc2tNZXRob2QpOgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJCYXNlOjpw
b3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyQmFz
ZTo6cG9zdE1lc3NhZ2VUYXNrKToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyQmFzZTo6cG9z
dEV4Y2VwdGlvblRvV29ya2VyT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyQmFz
ZTo6cG9zdEV4Y2VwdGlvblRhc2spOgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJCYXNlOjpw
b3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYldv
cmtlckJhc2U6OnBvc3RDb25zb2xlTWVzc2FnZVRhc2spOgorICAgICAgICAoV2ViS2l0OjpXZWJX
b3JrZXJCYXNlOjpjb25maXJtTWVzc2FnZUZyb21Xb3JrZXJPYmplY3QpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJXb3JrZXJCYXNlOjpjb25maXJtTWVzc2FnZVRhc2spOgorICAgICAgICAoV2ViS2l0
OjpXZWJXb3JrZXJCYXNlOjpyZXBvcnRQZW5kaW5nQWN0aXZpdHkpOgorICAgICAgICAoV2ViS2l0
OjpXZWJXb3JrZXJCYXNlOjpyZXBvcnRQZW5kaW5nQWN0aXZpdHlUYXNrKToKKyAgICAgICAgKFdl
YktpdDo6V2ViV29ya2VyQmFzZTo6d29ya2VyQ29udGV4dENsb3NlZCk6CisgICAgICAgIChXZWJL
aXQ6OldlYldvcmtlckJhc2U6OndvcmtlckNvbnRleHRDbG9zZWRUYXNrKToKKyAgICAgICAgKFdl
YktpdDo6V2ViV29ya2VyQmFzZTo6d29ya2VyQ29udGV4dERlc3Ryb3llZCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYldvcmtlckJhc2U6OndvcmtlckNvbnRleHREZXN0cm95ZWRUYXNrKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViV29ya2VyQmFzZTo6cG9zdFRhc2tUb0xvYWRlcik6CisgICAgICAgIChX
ZWJLaXQ6OldlYldvcmtlckJhc2U6OnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyQ29udGV4dCk6Cisg
ICAgICAgICogc3JjL1dlYldvcmtlckJhc2UuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YldvcmtlckJhc2U6OnNldFdvcmtlclRocmVhZCk6CisgICAgICAgIChXZWJLaXQ6OldlYldvcmtl
ckJhc2U6OndvcmtlclRocmVhZCk6CisgICAgICAgICogc3JjL1dlYldvcmtlckNsaWVudEltcGwu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyQ2xpZW50SW1wbDo6Y3JlYXRl
V29ya2VyQ29udGV4dFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyQ2xpZW50SW1w
bDo6V2ViV29ya2VyQ2xpZW50SW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYldvcmtlckNsaWVu
dEltcGw6On5XZWJXb3JrZXJDbGllbnRJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2Vy
Q2xpZW50SW1wbDo6c2V0V2ViV29ya2VyKToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyQ2xp
ZW50SW1wbDo6c3RhcnRXb3JrZXJDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2Vy
Q2xpZW50SW1wbDo6dGVybWluYXRlV29ya2VyQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YldvcmtlckNsaWVudEltcGw6OnBvc3RNZXNzYWdlVG9Xb3JrZXJDb250ZXh0KToKKyAgICAgICAg
KFdlYktpdDo6V2ViV29ya2VyQ2xpZW50SW1wbDo6aGFzUGVuZGluZ0FjdGl2aXR5KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViV29ya2VyQ2xpZW50SW1wbDo6d29ya2VyT2JqZWN0RGVzdHJveWVkKToK
KyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyQ2xpZW50SW1wbDo6cG9zdE1lc3NhZ2VUb1dvcmtl
ck9iamVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYldvcmtlckNsaWVudEltcGw6OnBvc3RFeGNl
cHRpb25Ub1dvcmtlck9iamVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYldvcmtlckNsaWVudElt
cGw6OnBvc3RDb25zb2xlTWVzc2FnZVRvV29ya2VyT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6
V2ViV29ya2VyQ2xpZW50SW1wbDo6Y29uZmlybU1lc3NhZ2VGcm9tV29ya2VyT2JqZWN0KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViV29ya2VyQ2xpZW50SW1wbDo6cmVwb3J0UGVuZGluZ0FjdGl2aXR5
KToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyQ2xpZW50SW1wbDo6d29ya2VyQ29udGV4dERl
c3Ryb3llZCk6CisgICAgICAgIChXZWJLaXQ6OldlYldvcmtlckNsaWVudEltcGw6OndvcmtlckNv
bnRleHRDbG9zZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJDbGllbnRJbXBsOjpzdGFy
dFdvcmtlckNvbnRleHRUYXNrKToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyQ2xpZW50SW1w
bDo6dGVybWluYXRlV29ya2VyQ29udGV4dFRhc2spOgorICAgICAgICAoV2ViS2l0OjpXZWJXb3Jr
ZXJDbGllbnRJbXBsOjpwb3N0TWVzc2FnZVRvV29ya2VyQ29udGV4dFRhc2spOgorICAgICAgICAo
V2ViS2l0OjpXZWJXb3JrZXJDbGllbnRJbXBsOjp3b3JrZXJPYmplY3REZXN0cm95ZWRUYXNrKToK
KyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyQ2xpZW50SW1wbDo6cG9zdE1lc3NhZ2VUb1dvcmtl
ck9iamVjdFRhc2spOgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJDbGllbnRJbXBsOjpwb3N0
RXhjZXB0aW9uVG9Xb3JrZXJPYmplY3RUYXNrKToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2Vy
Q2xpZW50SW1wbDo6cG9zdENvbnNvbGVNZXNzYWdlVG9Xb3JrZXJPYmplY3RUYXNrKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViV29ya2VyQ2xpZW50SW1wbDo6Y29uZmlybU1lc3NhZ2VGcm9tV29ya2Vy
T2JqZWN0VGFzayk6CisgICAgICAgIChXZWJLaXQ6OldlYldvcmtlckNsaWVudEltcGw6OnJlcG9y
dFBlbmRpbmdBY3Rpdml0eVRhc2spOgorICAgICAgICAqIHNyYy9XZWJXb3JrZXJDbGllbnRJbXBs
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJDbGllbnRJbXBsOjpjcmVhdGVX
b3JrZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJDbGllbnRJbXBsOjpub3RpZmljYXRp
b25QcmVzZW50ZXIpOgorICAgICAgICAqIHNyYy9XZWJXb3JrZXJJbXBsLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYldvcmtlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
V29ya2VySW1wbDo6V2ViV29ya2VySW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYldvcmtlcklt
cGw6On5XZWJXb3JrZXJJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VySW1wbDo6Y29t
bW9uQ2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VySW1wbDo6cG9zdE1lc3NhZ2VU
b1dvcmtlckNvbnRleHRUYXNrKToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VySW1wbDo6c3Rh
cnRXb3JrZXJDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VySW1wbDo6dGVybWlu
YXRlV29ya2VyQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYldvcmtlckltcGw6OnBvc3RN
ZXNzYWdlVG9Xb3JrZXJDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VySW1wbDo6
d29ya2VyT2JqZWN0RGVzdHJveWVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VySW1wbDo6
Y2xpZW50RGVzdHJveWVkKToKKyAgICAgICAgKiBzcmMvV2ViV29ya2VySW1wbC5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VySW1wbDo6Y2xpZW50KToKKworMjAwOS0xMS0wOSAg
WWFhciBTY2huaXRtYW4gIDx5YWFyQGRoY3AtMTcyLTIyLTcxLTIzLm10di5jb3JwLmdvb2dsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXAt
c3RyZWFtaW5nIENocm9taXVtIEFQSSBzcmMgZmlsZXM6IFdlYlN0cmluZy4uLldlYlZpZXdJbXBs
CisKKyAgICAgICAgVXBzdHJlYW1pbmcgQ2hyb21pdW0gQVBJIHNyYyBmaWxlcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzEyNzYKKworICAgICAgICAq
IHNyYy9XZWJTdHJpbmcuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViU3RyaW5nOjpy
ZXNldCk6CisgICAgICAgIChXZWJLaXQ6OldlYlN0cmluZzo6YXNzaWduKToKKyAgICAgICAgKFdl
YktpdDo6V2ViU3RyaW5nOjpsZW5ndGgpOgorICAgICAgICAoV2ViS2l0OjpXZWJTdHJpbmc6OmRh
dGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJTdHJpbmc6OnV0ZjgpOgorICAgICAgICAoV2ViS2l0
OjpXZWJTdHJpbmc6OmZyb21VVEY4KToKKyAgICAgICAgKFdlYktpdDo6V2ViU3RyaW5nOjpXZWJT
dHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJTdHJpbmc6Om9wZXJhdG9yPSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlN0cmluZzo6b3BlcmF0b3IgV2ViQ29yZTo6U3RyaW5nKToKKyAgICAgICAg
KFdlYktpdDo6V2ViU3RyaW5nOjpvcGVyYXRvciBXZWJDb3JlOjpBdG9taWNTdHJpbmcpOgorICAg
ICAgICAqIHNyYy9XZWJVUkwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViVVJMOjpX
ZWJVUkwpOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkw6Om9wZXJhdG9yPSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlVSTDo6b3BlcmF0b3IgV2ViQ29yZTo6S1VSTCk6CisgICAgICAgICogc3JjL1dl
YlVSTEVycm9yLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlVSTEVycm9yOjpXZWJV
UkxFcnJvcik6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTEVycm9yOjpvcGVyYXRvcj0pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJVUkxFcnJvcjo6b3BlcmF0b3IgUmVzb3VyY2VFcnJvcik6CisgICAg
ICAgICogc3JjL1dlYlVSTFJlcXVlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vi
VVJMUmVxdWVzdFByaXZhdGVJbXBsOjpXZWJVUkxSZXF1ZXN0UHJpdmF0ZUltcGwpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJVUkxSZXF1ZXN0UHJpdmF0ZUltcGw6OmRpc3Bvc2UpOgorICAgICAgICAo
V2ViS2l0OjpXZWJVUkxSZXF1ZXN0Ojppbml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
VVJMUmVxdWVzdDo6cmVzZXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXF1ZXN0Ojphc3Np
Z24pOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXF1ZXN0Ojppc051bGwpOgorICAgICAgICAo
V2ViS2l0OjpXZWJVUkxSZXF1ZXN0Ojp1cmwpOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXF1
ZXN0OjpzZXRVUkwpOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXF1ZXN0OjpmaXJzdFBhcnR5
Rm9yQ29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJlcXVlc3Q6OnNldEZpcnN0UGFy
dHlGb3JDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVxdWVzdDo6YWxsb3dDb29r
aWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVxdWVzdDo6c2V0QWxsb3dDb29raWVzKToK
KyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVxdWVzdDo6YWxsb3dTdG9yZWRDcmVkZW50aWFscyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJlcXVlc3Q6OnNldEFsbG93U3RvcmVkQ3JlZGVudGlh
bHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXF1ZXN0OjpjYWNoZVBvbGljeSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlVSTFJlcXVlc3Q6OnNldENhY2hlUG9saWN5KToKKyAgICAgICAgKFdl
YktpdDo6V2ViVVJMUmVxdWVzdDo6aHR0cE1ldGhvZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVS
TFJlcXVlc3Q6OnNldEhUVFBNZXRob2QpOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXF1ZXN0
OjpodHRwSGVhZGVyRmllbGQpOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXF1ZXN0OjpzZXRI
VFRQSGVhZGVyRmllbGQpOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXF1ZXN0OjphZGRIVFRQ
SGVhZGVyRmllbGQpOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXF1ZXN0OjpjbGVhckhUVFBI
ZWFkZXJGaWVsZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJlcXVlc3Q6OnZpc2l0SFRUUEhl
YWRlckZpZWxkcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJlcXVlc3Q6Omh0dHBCb2R5KToK
KyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVxdWVzdDo6c2V0SFRUUEJvZHkpOgorICAgICAgICAo
V2ViS2l0OjpXZWJVUkxSZXF1ZXN0OjpyZXBvcnRVcGxvYWRQcm9ncmVzcyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlVSTFJlcXVlc3Q6OnNldFJlcG9ydFVwbG9hZFByb2dyZXNzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViVVJMUmVxdWVzdDo6dGFyZ2V0VHlwZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlVSTFJlcXVlc3Q6OnNldFRhcmdldFR5cGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXF1
ZXN0OjpyZXF1ZXN0b3JJRCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJlcXVlc3Q6OnNldFJl
cXVlc3RvcklEKToKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVxdWVzdDo6cmVxdWVzdG9yUHJv
Y2Vzc0lEKToKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVxdWVzdDo6c2V0UmVxdWVzdG9yUHJv
Y2Vzc0lEKToKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVxdWVzdDo6YXBwQ2FjaGVIb3N0SUQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXF1ZXN0OjpzZXRBcHBDYWNoZUhvc3RJRCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlVSTFJlcXVlc3Q6OnRvTXV0YWJsZVJlc291cmNlUmVxdWVzdCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJlcXVlc3Q6OnRvUmVzb3VyY2VSZXF1ZXN0KToKKyAg
ICAgICAgKiBzcmMvV2ViVVJMUmVxdWVzdFByaXZhdGUuaDogQWRkZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYlVSTFJlcXVlc3RQcml2YXRlOjpXZWJVUkxSZXF1ZXN0UHJpdmF0ZSk6CisgICAgICAg
ICogc3JjL1dlYlVSTFJlc3BvbnNlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlVS
TFJlc3BvbnNlUHJpdmF0ZUltcGw6OldlYlVSTFJlc3BvbnNlUHJpdmF0ZUltcGwpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJVUkxSZXNwb25zZVByaXZhdGVJbXBsOjpkaXNwb3NlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViVVJMUmVzcG9uc2U6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJVUkxSZXNwb25zZTo6cmVzZXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXNwb25zZTo6
YXNzaWduKToKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVzcG9uc2U6OmlzTnVsbCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlVSTFJlc3BvbnNlOjp1cmwpOgorICAgICAgICAoV2ViS2l0OjpXZWJV
UkxSZXNwb25zZTo6c2V0VVJMKToKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVzcG9uc2U6Om1p
bWVUeXBlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVzcG9uc2U6OnNldE1JTUVUeXBlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVzcG9uc2U6OmV4cGVjdGVkQ29udGVudExlbmd0aCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJlc3BvbnNlOjpzZXRFeHBlY3RlZENvbnRlbnRMZW5n
dGgpOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXNwb25zZTo6dGV4dEVuY29kaW5nTmFtZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJlc3BvbnNlOjpzZXRUZXh0RW5jb2RpbmdOYW1lKToK
KyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVzcG9uc2U6OnN1Z2dlc3RlZEZpbGVOYW1lKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVVJMUmVzcG9uc2U6OnNldFN1Z2dlc3RlZEZpbGVOYW1lKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVVJMUmVzcG9uc2U6Omh0dHBTdGF0dXNDb2RlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViVVJMUmVzcG9uc2U6OnNldEhUVFBTdGF0dXNDb2RlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVVJMUmVzcG9uc2U6Omh0dHBTdGF0dXNUZXh0KToKKyAgICAgICAgKFdlYktpdDo6
V2ViVVJMUmVzcG9uc2U6OnNldEhUVFBTdGF0dXNUZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
VVJMUmVzcG9uc2U6Omh0dHBIZWFkZXJGaWVsZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJl
c3BvbnNlOjpzZXRIVFRQSGVhZGVyRmllbGQpOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXNw
b25zZTo6YWRkSFRUUEhlYWRlckZpZWxkKToKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVzcG9u
c2U6OmNsZWFySFRUUEhlYWRlckZpZWxkKToKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVzcG9u
c2U6OnZpc2l0SFRUUEhlYWRlckZpZWxkcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJlc3Bv
bnNlOjpsYXN0TW9kaWZpZWREYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVzcG9uc2U6
OnNldExhc3RNb2RpZmllZERhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXNwb25zZTo6
aXNDb250ZW50RmlsdGVyZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXNwb25zZTo6c2V0
SXNDb250ZW50RmlsdGVyZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXNwb25zZTo6YXBw
Q2FjaGVJRCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJlc3BvbnNlOjpzZXRBcHBDYWNoZUlE
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVzcG9uc2U6OmFwcENhY2hlTWFuaWZlc3RVUkwp
OgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXNwb25zZTo6c2V0QXBwQ2FjaGVNYW5pZmVzdFVS
TCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJlc3BvbnNlOjpzZWN1cml0eUluZm8pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJVUkxSZXNwb25zZTo6c2V0U2VjdXJpdHlJbmZvKToKKyAgICAgICAg
KFdlYktpdDo6V2ViVVJMUmVzcG9uc2U6OnRvTXV0YWJsZVJlc291cmNlUmVzcG9uc2UpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJVUkxSZXNwb25zZTo6dG9SZXNvdXJjZVJlc3BvbnNlKToKKyAgICAg
ICAgKiBzcmMvV2ViVVJMUmVzcG9uc2VQcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJVUkxSZXNwb25zZVByaXZhdGU6OldlYlVSTFJlc3BvbnNlUHJpdmF0ZSk6CisgICAgICAg
ICogc3JjL1dlYlZpZXdJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6Oik6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXc6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6
OnVwZGF0ZVZpc2l0ZWRMaW5rU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpyZXNl
dFZpc2l0ZWRMaW5rU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6aW5pdGlh
bGl6ZU1haW5GcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpXZWJWaWV3SW1w
bCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjp+V2ViVmlld0ltcGwpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6dGhlbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
SW1wbDo6bWFpbkZyYW1lSW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjp0YWJL
ZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6
c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmll
d0ltcGw6Om1vdXNlTW92ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjptb3VzZUxl
YXZlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6Om1vdXNlRG93bik6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZXdJbXBsOjptb3VzZUNvbnRleHRNZW51KToKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlld0ltcGw6Om1vdXNlVXApOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6
bW91c2VXaGVlbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjprZXlFdmVudCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjphdXRvY29tcGxldGVIYW5kbGVLZXlFdmVudCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpjaGFyRXZlbnQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3SW1wbDo6c2VuZENvbnRleHRNZW51RXZlbnQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWV3SW1wbDo6a2V5RXZlbnREZWZhdWx0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmll
d0ltcGw6OnNjcm9sbFZpZXdXaXRoS2V5Ym9hcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
SW1wbDo6cHJvcGFnYXRlU2Nyb2xsKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmZv
Y3VzZWRXZWJDb3JlRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6ZnJvbVBh
Z2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Y2xvc2UpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3SW1wbDo6cmVzaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6
OmxheW91dCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpwYWludCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZXdJbXBsOjpoYW5kbGVJbnB1dEV2ZW50KToKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlld0ltcGw6Om1vdXNlQ2FwdHVyZUxvc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3SW1wbDo6c2V0Rm9jdXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6aGFuZGxl
Q29tcG9zaXRpb25FdmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpxdWVyeUNv
bXBvc2l0aW9uU3RhdHVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldFRleHRE
aXJlY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0dGluZ3MpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6cGFnZUVuY29kaW5nKToKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlld0ltcGw6OnNldFBhZ2VFbmNvZGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXdJbXBsOjpkaXNwYXRjaEJlZm9yZVVubG9hZEV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlld0ltcGw6OmRpc3BhdGNoVW5sb2FkRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
SW1wbDo6bWFpbkZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmZpbmRGcmFt
ZUJ5TmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpmb2N1c2VkRnJhbWUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0Rm9jdXNlZEZyYW1lKToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlld0ltcGw6OnNldEluaXRpYWxGb2N1cyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZXdJbXBsOjpjbGVhckZvY3VzZWROb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmll
d0ltcGw6Onpvb21Jbik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjp6b29tT3V0KToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6Onpvb21EZWZhdWx0KToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlld0ltcGw6OnBlcmZvcm1NZWRpYVBsYXllckFjdGlvbik6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXdJbXBsOjpjb3B5SW1hZ2VBdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXdJbXBsOjpkcmFnU291cmNlRW5kZWRBdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBs
OjpkcmFnU291cmNlTW92ZWRUbyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpkcmFn
U291cmNlU3lzdGVtRHJhZ0VuZGVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmRy
YWdUYXJnZXREcmFnRW50ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6ZHJhZ1Rh
cmdldERyYWdPdmVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmRyYWdUYXJnZXRE
cmFnTGVhdmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6ZHJhZ1RhcmdldERyb3Ap
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6ZHJhZ0lkZW50aXR5KToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlld0ltcGw6Omluc3BlY3RFbGVtZW50QXQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWV3SW1wbDo6aW5zcGVjdG9yU2V0dGluZ3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3SW1wbDo6c2V0SW5zcGVjdG9yU2V0dGluZ3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
SW1wbDo6ZGV2VG9vbHNBZ2VudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRE
ZXZUb29sc0FnZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmFjY2Vzc2liaWxp
dHlPYmplY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6YXBwbHlBdXRvZmlsbFN1
Z2dlc3Rpb25zKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmhpZGVBdXRvZmlsbFBv
cHVwKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldERyb3BFZmZlY3QpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0SXNUcmFuc3BhcmVudCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXdJbXBsOjppc1RyYW5zcGFyZW50KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlld0ltcGw6OnNldElzQWN0aXZlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6Omlz
QWN0aXZlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmRpZENvbW1pdExvYWQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6bmF2aWdhdGlvblBvbGljeUZyb21Nb3VzZUV2
ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnN0YXJ0RHJhZ2dpbmcpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0Q3VycmVudEhpc3RvcnlJdGVtKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnByZXZpb3VzSGlzdG9yeUl0ZW0pOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3SW1wbDo6b2JzZXJ2ZU5ld05hdmlnYXRpb24pOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3SW1wbDo6aGlkZUF1dG9Db21wbGV0ZVBvcHVwKToKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlld0ltcGw6OmF1dG9Db21wbGV0ZVBvcHVwRGlkSGlkZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZXdJbXBsOjpzZXRJZ25vcmVJbnB1dEV2ZW50cyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZXdJbXBsOjpub3RpZmljYXRpb25QcmVzZW50ZXJJbXBsKToKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlld0ltcGw6OnJlZnJlc2hBdXRvZmlsbFBvcHVwKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlld0ltcGw6OmZvY3VzZWRXZWJDb3JlTm9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXdJbXBsOjpoaXRUZXN0UmVzdWx0Rm9yV2luZG93UG9zKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlld0ltcGw6OnNldFRhYnNUb0xpbmtzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6
OnRhYnNUb0xpbmtzKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuaDogQWRkZWQuCisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmll
d0ltcGw6OmRldlRvb2xzQWdlbnRQcml2YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0lt
cGw6Omxhc3RNb3VzZURvd25Qb2ludCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpj
bGllbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6cGFnZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXdJbXBsOjpjb250ZXh0TWVudUFsbG93ZWQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWV3SW1wbDo6c2V0SW5pdGlhbE5hdmlnYXRpb25Qb2xpY3kpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3SW1wbDo6aW5pdGlhbE5hdmlnYXRpb25Qb2xpY3kpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3SW1wbDo6Y3VycmVudElucHV0RXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWV3SW1wbDo6KToKKworMjAwOS0xMS0wOSAgWWFhciBTY2huaXRtYW4gIDx5YWFyQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwogICAgICAg
ICBVcC1zdHJlYW1pbmcgQ2hyb21pdW0gQVBJIHNyYyBmaWxlczogV2ViU3RyaW5nLi4uV2ViVmll
d0ltcGwKIAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MzEyNzYKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQmFzZS5jcHAg
Yi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckJhc2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjg1YTI2M2IKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYldvcmtlckJhc2UuY3BwCkBAIC0wLDAgKzEsMzA4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIldlYldvcmtlckJhc2UuaCIKKworI2luY2x1ZGUgIkdlbmVyaWNX
b3JrZXJUYXNrLmgiCisjaW5jbHVkZSAiTWVzc2FnZVBvcnRDaGFubmVsLmgiCisjaW5jbHVkZSAi
UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuaCIKKworI2luY2x1ZGUgIldlYkRhdGFTb3VyY2VJ
bXBsLmgiCisjaW5jbHVkZSAiV2ViRnJhbWVDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJGcmFtZUlt
cGwuaCIKKyNpbmNsdWRlICJXZWJNZXNzYWdlUG9ydENoYW5uZWwuaCIKKyNpbmNsdWRlICJXZWJW
aWV3LmgiCisjaW5jbHVkZSAiV2ViV29ya2VyQ2xpZW50LmgiCisKKyNpbmNsdWRlICJXb3JrZXJU
aHJlYWQuaCIKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCit1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKKyNpZiBFTkFCTEUoV09SS0VSUykKKwor
Ly8gRHVtbXkgV2ViVmlld0RlbGVnYXRlIC0gd2Ugb25seSBuZWVkIGl0IGluIFdvcmtlciBwcm9j
ZXNzIHRvIGxvYWQgYQorLy8gJ3NoYWRvdyBwYWdlJyB3aGljaCB3aWxsIGluaXRpYWxpemUgV2Vi
Q29yZSBsb2FkZXIuCitjbGFzcyBXb3JrZXJXZWJGcmFtZUNsaWVudCA6IHB1YmxpYyBXZWJGcmFt
ZUNsaWVudCB7CitwdWJsaWM6CisgICAgLy8gVGVsbCB0aGUgbG9hZGVyIHRvIGxvYWQgdGhlIGRh
dGEgaW50byB0aGUgJ3NoYWRvdyBwYWdlJyBzeW5jaHJvbm91c2x5LAorICAgIC8vIHNvIHdlIGNh
biBncmFiIHRoZSByZXN1bHRpbmcgRG9jdW1lbnQgcmlnaHQgYWZ0ZXIgbG9hZC4KKyAgICB2aXJ0
dWFsIHZvaWQgZGlkQ3JlYXRlRGF0YVNvdXJjZShXZWJGcmFtZSogZnJhbWUsIFdlYkRhdGFTb3Vy
Y2UqIGRzKQorICAgIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8V2ViRGF0YVNvdXJjZUltcGwqPihk
cyktPnNldERlZmVyTWFpblJlc291cmNlRGF0YUxvYWQoZmFsc2UpOworICAgIH0KKworICAgIC8v
IExhenkgYWxsb2NhdGUgYW5kIGxlYWsgdGhpcyBpbnN0YW5jZS4KKyAgICBzdGF0aWMgV29ya2Vy
V2ViRnJhbWVDbGllbnQqIHNoYXJlZEluc3RhbmNlKCkKKyAgICB7CisgICAgICAgIHN0YXRpYyBX
b3JrZXJXZWJGcmFtZUNsaWVudCBjbGllbnQ7CisgICAgICAgIHJldHVybiAmY2xpZW50OworICAg
IH0KKworcHJpdmF0ZToKKyAgICBXb3JrZXJXZWJGcmFtZUNsaWVudCgpCisgICAgeworICAgIH0K
K307CisKKy8vIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIHRoZSBtYWluIHRocmVhZCB0byBm
b3JjZSB0byBpbml0aWFsaXplIHNvbWUgc3RhdGljCisvLyB2YWx1ZXMgdXNlZCBpbiBXZWJLaXQg
YmVmb3JlIGFueSB3b3JrZXIgdGhyZWFkIGlzIHN0YXJ0ZWQuIFRoaXMgaXMgYmVjYXVzZSBpbgor
Ly8gb3VyIHdvcmtlciBwcm9jZXNzcywgd2UgZG8gbm90IHJ1biBhbnkgV2ViS2l0IGNvZGUgaW4g
bWFpbiB0aHJlYWQgYW5kIHRodXMKKy8vIHdoZW4gbXVsdGlwbGUgd29ya2VycyB0cnkgdG8gc3Rh
cnQgYXQgdGhlIHNhbWUgdGltZSwgd2UgbWlnaHQgaGl0IGNyYXNoIGR1ZQorLy8gdG8gY29udGVu
dGlvbiBmb3IgaW5pdGlhbGl6aW5nIHN0YXRpYyB2YWx1ZXMuCitzdGF0aWMgdm9pZCBpbml0aWFs
aXplV2ViS2l0U3RhdGljVmFsdWVzKCkKK3sKKyAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9
IGZhbHNlOworICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgaW5pdGlhbGl6ZWQgPSB0
cnVlOworICAgICAgICAvLyBOb3RlIHRoYXQgd2UgaGF2ZSB0byBwYXNzIGEgVVJMIHdpdGggdmFs
aWQgcHJvdG9jb2wgaW4gb3JkZXIgdG8gZm9sbG93CisgICAgICAgIC8vIHRoZSBwYXRoIHRvIGRv
IHN0YXRpYyB2YWx1ZSBpbml0aWFsaXphdGlvbnMuCisgICAgICAgIFJlZlB0cjxTZWN1cml0eU9y
aWdpbj4gb3JpZ2luID0KKyAgICAgICAgICAgIFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUoS1VSTChQ
YXJzZWRVUkxTdHJpbmcsICJodHRwOi8vbG9jYWxob3N0IikpOworICAgICAgICBvcmlnaW4ucmVs
ZWFzZSgpOworICAgIH0KK30KKworV2ViV29ya2VyQmFzZTo6V2ViV29ya2VyQmFzZSgpCisgICAg
OiBtX3dlYlZpZXcoMCkKKyAgICAsIG1fYXNrZWRUb1Rlcm1pbmF0ZShmYWxzZSkKK3sKKyAgICBp
bml0aWFsaXplV2ViS2l0U3RhdGljVmFsdWVzKCk7Cit9CisKK1dlYldvcmtlckJhc2U6On5XZWJX
b3JrZXJCYXNlKCkKK3sKKyAgICBBU1NFUlQobV93ZWJWaWV3KTsKKyAgICBtX3dlYlZpZXctPmNs
b3NlKCk7Cit9CisKK3ZvaWQgV2ViV29ya2VyQmFzZTo6c3RvcFdvcmtlclRocmVhZCgpCit7Cisg
ICAgaWYgKG1fYXNrZWRUb1Rlcm1pbmF0ZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fYXNrZWRU
b1Rlcm1pbmF0ZSA9IHRydWU7CisgICAgaWYgKG1fd29ya2VyVGhyZWFkKQorICAgICAgICBtX3dv
cmtlclRocmVhZC0+c3RvcCgpOworfQorCit2b2lkIFdlYldvcmtlckJhc2U6OmluaXRpYWxpemVM
b2FkZXIoY29uc3QgV2ViVVJMJiB1cmwpCit7CisgICAgLy8gQ3JlYXRlICdzaGFkb3cgcGFnZScu
IFRoaXMgcGFnZSBpcyBuZXZlciBkaXNwbGF5ZWQsIGl0IGlzIHVzZWQgdG8gcHJveHkgdGhlCisg
ICAgLy8gbG9hZGluZyByZXF1ZXN0cyBmcm9tIHRoZSB3b3JrZXIgY29udGV4dCB0byB0aGUgcmVz
dCBvZiBXZWJLaXQgYW5kIENocm9taXVtCisgICAgLy8gaW5mcmFzdHJ1Y3R1cmUuCisgICAgQVNT
RVJUKCFtX3dlYlZpZXcpOworICAgIG1fd2ViVmlldyA9IFdlYlZpZXc6OmNyZWF0ZSgwKTsKKyAg
ICBtX3dlYlZpZXctPmluaXRpYWxpemVNYWluRnJhbWUoV29ya2VyV2ViRnJhbWVDbGllbnQ6OnNo
YXJlZEluc3RhbmNlKCkpOworCisgICAgV2ViRnJhbWVJbXBsKiB3ZWJGcmFtZSA9IHN0YXRpY19j
YXN0PFdlYkZyYW1lSW1wbCo+KG1fd2ViVmlldy0+bWFpbkZyYW1lKCkpOworCisgICAgLy8gQ29u
c3RydWN0IHN1YnN0aXR1dGUgZGF0YSBzb3VyY2UgZm9yIHRoZSAnc2hhZG93IHBhZ2UnLiBXZSBv
bmx5IG5lZWQgaXQKKyAgICAvLyB0byBoYXZlIHNhbWUgb3JpZ2luIGFzIHRoZSB3b3JrZXIgc28g
dGhlIGxvYWRpbmcgY2hlY2tzIHdvcmsgY29ycmVjdGx5LgorICAgIENTdHJpbmcgY29udGVudCgi
Iik7CisgICAgaW50IGxlbiA9IHN0YXRpY19jYXN0PGludD4oY29udGVudC5sZW5ndGgoKSk7Cisg
ICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmKFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGNvbnRlbnQu
ZGF0YSgpLCBsZW4pKTsKKyAgICBTdWJzdGl0dXRlRGF0YSBzdWJzdERhdGEoYnVmLCBTdHJpbmco
InRleHQvaHRtbCIpLCBTdHJpbmcoIlVURi04IiksIEtVUkwoKSk7CisgICAgUmVzb3VyY2VSZXF1
ZXN0IHJlcXVlc3QodXJsLCBDU3RyaW5nKCkpOworICAgIHdlYkZyYW1lLT5mcmFtZSgpLT5sb2Fk
ZXIoKS0+bG9hZChyZXF1ZXN0LCBzdWJzdERhdGEsIGZhbHNlKTsKKworICAgIC8vIFRoaXMgZG9j
dW1lbnQgd2lsbCBiZSB1c2VkIGFzICdsb2FkaW5nIGNvbnRleHQnIGZvciB0aGUgd29ya2VyLgor
ICAgIG1fbG9hZGluZ0RvY3VtZW50ID0gd2ViRnJhbWUtPmZyYW1lKCktPmRvY3VtZW50KCk7Cit9
CisKK3ZvaWQgV2ViV29ya2VyQmFzZTo6ZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFkKFBhc3NPd25Q
dHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFzaykKK3sKKyAgICByZXR1cm4gY2Fs
bE9uTWFpblRocmVhZChpbnZva2VUYXNrTWV0aG9kLCB0YXNrLnJlbGVhc2UoKSk7Cit9CisKK3Zv
aWQgV2ViV29ya2VyQmFzZTo6aW52b2tlVGFza01ldGhvZCh2b2lkKiBwYXJhbSkKK3sKKyAgICBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrKiB0YXNrID0KKyAgICAgICAgc3RhdGljX2Nhc3Q8
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayo+KHBhcmFtKTsKKyAgICB0YXNrLT5wZXJmb3Jt
VGFzaygwKTsKKyAgICBkZWxldGUgdGFzazsKK30KKworLy8gV29ya2VyT2JqZWN0UHJveHkgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
Kwordm9pZCBXZWJXb3JrZXJCYXNlOjpwb3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0KFBhc3NSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBtZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJy
YXk+IGNoYW5uZWxzKQoreworICAgIGRpc3BhdGNoVGFza1RvTWFpblRocmVhZChjcmVhdGVDYWxs
YmFja1Rhc2soJnBvc3RNZXNzYWdlVGFzaywgdGhpcywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UtPnRvU3RyaW5nKCksIGNoYW5uZWxzKSk7
Cit9CisKK3ZvaWQgV2ViV29ya2VyQmFzZTo6cG9zdE1lc3NhZ2VUYXNrKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBX
ZWJXb3JrZXJCYXNlKiB0aGlzUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgU3RyaW5nIG1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ
YXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBjaGFubmVscykKK3sKKyAgICBpZiAo
IXRoaXNQdHItPmNsaWVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJNZXNzYWdlUG9y
dENoYW5uZWxBcnJheSB3ZWJDaGFubmVscyhjaGFubmVscy5nZXQoKSA/IGNoYW5uZWxzLT5zaXpl
KCkgOiAwKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdlYkNoYW5uZWxzLnNpemUoKTsg
KytpKSB7CisgICAgICAgIHdlYkNoYW5uZWxzW2ldID0gKCpjaGFubmVscylbaV0tPmNoYW5uZWwo
KS0+d2ViQ2hhbm5lbFJlbGVhc2UoKTsKKyAgICAgICAgd2ViQ2hhbm5lbHNbaV0tPnNldENsaWVu
dCgwKTsKKyAgICB9CisKKyAgICB0aGlzUHRyLT5jbGllbnQoKS0+cG9zdE1lc3NhZ2VUb1dvcmtl
ck9iamVjdChtZXNzYWdlLCB3ZWJDaGFubmVscyk7Cit9CisKK3ZvaWQgV2ViV29ya2VyQmFzZTo6
cG9zdEV4Y2VwdGlvblRvV29ya2VyT2JqZWN0KGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmVO
dW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKK3sKKyAgICBkaXNwYXRjaFRhc2tUb01haW5UaHJlYWQo
Y3JlYXRlQ2FsbGJhY2tUYXNrKCZwb3N0RXhjZXB0aW9uVGFzaywgdGhpcywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSwgbGluZU51
bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNv
dXJjZVVSTCkpOworfQorCit2b2lkIFdlYldvcmtlckJhc2U6OnBvc3RFeGNlcHRpb25UYXNrKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFdlYldvcmtlckJhc2UqIHRoaXNQdHIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5n
JiBzb3VyY2VVUkwpCit7CisgICAgaWYgKCF0aGlzUHRyLT5jb21tb25DbGllbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgdGhpc1B0ci0+Y29tbW9uQ2xpZW50KCktPnBvc3RFeGNlcHRpb25U
b1dvcmtlck9iamVjdChlcnJvck1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlVVJMKTsKK30K
Kwordm9pZCBXZWJXb3JrZXJCYXNlOjpwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdChN
ZXNzYWdlRGVzdGluYXRpb24gZGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VTb3VyY2Ugc291cmNlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlVHlw
ZSB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBNZXNzYWdlTGV2ZWwgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmVOdW1iZXIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFN0cmluZyYgc291cmNlVVJMKQoreworICAgIGRpc3BhdGNoVGFza1RvTWFpblRocmVhZChj
cmVhdGVDYWxsYmFja1Rhc2soJnBvc3RDb25zb2xlTWVzc2FnZVRhc2ssIHRoaXMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+
KGRlc3RpbmF0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXRpY19jYXN0PGludD4oc291cmNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4odHlwZSksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+
KGxldmVsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZVVSTCkpOworfQorCit2b2lkIFdlYldvcmtlckJh
c2U6OnBvc3RDb25zb2xlTWVzc2FnZVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJXb3JrZXJC
YXNlKiB0aGlzUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBkZXN0aW5hdGlvbiwgaW50IHNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgdHlwZSwgaW50IGxldmVsLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZU51bWJlciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHNvdXJj
ZVVSTCkKK3sKKyAgICBpZiAoIXRoaXNQdHItPmNvbW1vbkNsaWVudCgpKQorICAgICAgICByZXR1
cm47CisgICAgdGhpc1B0ci0+Y29tbW9uQ2xpZW50KCktPnBvc3RDb25zb2xlTWVzc2FnZVRvV29y
a2VyT2JqZWN0KGRlc3RpbmF0aW9uLCBzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsIGxldmVsLCBtZXNzYWdl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsaW5lTnVtYmVyLCBzb3VyY2VVUkwpOworfQorCit2b2lkIFdlYldvcmtlckJhc2U6
OmNvbmZpcm1NZXNzYWdlRnJvbVdvcmtlck9iamVjdChib29sIGhhc1BlbmRpbmdBY3Rpdml0eSkK
K3sKKyAgICBkaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZjb25m
aXJtTWVzc2FnZVRhc2ssIHRoaXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBoYXNQZW5kaW5nQWN0aXZpdHkpKTsKK30KKwordm9pZCBXZWJXb3JrZXJC
YXNlOjpjb25maXJtTWVzc2FnZVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYldvcmtlckJhc2UqIHRo
aXNQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGhhc1Bl
bmRpbmdBY3Rpdml0eSkKK3sKKyAgICBpZiAoIXRoaXNQdHItPmNsaWVudCgpKQorICAgICAgICBy
ZXR1cm47CisgICAgdGhpc1B0ci0+Y2xpZW50KCktPmNvbmZpcm1NZXNzYWdlRnJvbVdvcmtlck9i
amVjdChoYXNQZW5kaW5nQWN0aXZpdHkpOworfQorCit2b2lkIFdlYldvcmtlckJhc2U6OnJlcG9y
dFBlbmRpbmdBY3Rpdml0eShib29sIGhhc1BlbmRpbmdBY3Rpdml0eSkKK3sKKyAgICBkaXNwYXRj
aFRhc2tUb01haW5UaHJlYWQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZyZXBvcnRQZW5kaW5nQWN0aXZp
dHlUYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcywgaGFzUGVuZGluZ0FjdGl2aXR5KSk7Cit9CisKK3ZvaWQgV2ViV29ya2VyQmFzZTo6cmVw
b3J0UGVuZGluZ0FjdGl2aXR5VGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYldvcmtlckJh
c2UqIHRoaXNQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkpCit7CisgICAgaWYgKCF0aGlzUHRyLT5jbGllbnQo
KSkKKyAgICAgICAgcmV0dXJuOworICAgIHRoaXNQdHItPmNsaWVudCgpLT5yZXBvcnRQZW5kaW5n
QWN0aXZpdHkoaGFzUGVuZGluZ0FjdGl2aXR5KTsKK30KKwordm9pZCBXZWJXb3JrZXJCYXNlOjp3
b3JrZXJDb250ZXh0Q2xvc2VkKCkKK3sKKyAgICBkaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoY3Jl
YXRlQ2FsbGJhY2tUYXNrKCZ3b3JrZXJDb250ZXh0Q2xvc2VkVGFzaywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMpKTsKK30KKwordm9pZCBXZWJX
b3JrZXJCYXNlOjp3b3JrZXJDb250ZXh0Q2xvc2VkVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBX
ZWJXb3JrZXJCYXNlKiB0aGlzUHRyKQoreworICAgIGlmICh0aGlzUHRyLT5jb21tb25DbGllbnQo
KSkKKyAgICAgICAgdGhpc1B0ci0+Y29tbW9uQ2xpZW50KCktPndvcmtlckNvbnRleHRDbG9zZWQo
KTsKK30KKwordm9pZCBXZWJXb3JrZXJCYXNlOjp3b3JrZXJDb250ZXh0RGVzdHJveWVkKCkKK3sK
KyAgICBkaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZ3b3JrZXJD
b250ZXh0RGVzdHJveWVkVGFzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMpKTsKK30KKwordm9pZCBXZWJXb3JrZXJCYXNlOjp3b3JrZXJDb250
ZXh0RGVzdHJveWVkVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJXb3JrZXJCYXNlKiB0
aGlzUHRyKQoreworICAgIGlmICh0aGlzUHRyLT5jb21tb25DbGllbnQoKSkKKyAgICAgICAgdGhp
c1B0ci0+Y29tbW9uQ2xpZW50KCktPndvcmtlckNvbnRleHREZXN0cm95ZWQoKTsKKyAgICAvLyBU
aGUgbGlmZXRpbWUgb2YgdGhpcyBwcm94eSBpcyBjb250cm9sbGVkIGJ5IHRoZSB3b3JrZXIgY29u
dGV4dC4KKyAgICBkZWxldGUgdGhpc1B0cjsKK30KKworLy8gV29ya2VyTG9hZGVyUHJveHkgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
Kwordm9pZCBXZWJXb3JrZXJCYXNlOjpwb3N0VGFza1RvTG9hZGVyKFBhc3NPd25QdHI8U2NyaXB0
RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFzaykKK3sKKyAgICBBU1NFUlQobV9sb2FkaW5nRG9j
dW1lbnQtPmlzRG9jdW1lbnQoKSk7CisgICAgbV9sb2FkaW5nRG9jdW1lbnQtPnBvc3RUYXNrKHRh
c2spOworfQorCit2b2lkIFdlYldvcmtlckJhc2U6OnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyQ29u
dGV4dCgKKyAgICBQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2ss
IGNvbnN0IFN0cmluZyYgbW9kZSkKK3sKKyAgICBtX3dvcmtlclRocmVhZC0+cnVuTG9vcCgpLnBv
c3RUYXNrRm9yTW9kZSh0YXNrLCBtb2RlKTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJT
KQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViV29ya2VyQmFzZS5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJCYXNlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIxNzQwMQotLS0gL2Rldi9udWxs
CisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQmFzZS5oCkBAIC0wLDAgKzEsMTQ5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBXZWJXb3JrZXJCYXNlX2gKKyNkZWZpbmUgV2ViV29ya2VyQmFzZV9oCisKKyNp
ZiBFTkFCTEUoV09SS0VSUykKKworI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIK
KyNpbmNsdWRlICJXb3JrZXJMb2FkZXJQcm94eS5oIgorI2luY2x1ZGUgIldvcmtlck9iamVjdFBy
b3h5LmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFdvcmtlclRocmVhZDsKK30KKworbmFt
ZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJDb21tb25Xb3JrZXJDbGllbnQ7CitjbGFzcyBXZWJV
Ukw7CitjbGFzcyBXZWJWaWV3OworY2xhc3MgV2ViV29ya2VyQ2xpZW50OworCisvLyBCYXNlIGNs
YXNzIGZvciBXZWJTaGFyZWRXb3JrZXJJbXBsIGFuZCBXZWJXb3JrZXJJbXBsLiBJdCBjb250YWlu
cyBjb21tb24KKy8vIGNvZGUgdXNlZCBieSBib3RoIGltcGxlbWVudGF0aW9uIGNsYXNzZXMsIGlu
Y2x1ZGluZyBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlCisvLyBXb3JrZXJPYmplY3RQcm94eSBhbmQg
V29ya2VyTG9hZGVyUHJveHkgaW50ZXJmYWNlcy4KK2NsYXNzIFdlYldvcmtlckJhc2UgOiBwdWJs
aWMgV2ViQ29yZTo6V29ya2VyT2JqZWN0UHJveHkKKyAgICAgICAgICAgICAgICAgICAgLCBwdWJs
aWMgV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkgeworcHVibGljOgorICAgIFdlYldvcmtlckJh
c2UoKTsKKyAgICB2aXJ0dWFsIH5XZWJXb3JrZXJCYXNlKCk7CisKKyAgICAvLyBXZWJDb3JlOjpX
b3JrZXJPYmplY3RQcm94eSBtZXRob2RzOgorICAgIHZpcnR1YWwgdm9pZCBwb3N0TWVzc2FnZVRv
V29ya2VyT2JqZWN0KAorICAgICAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4sCisgICAgICAgIFBhc3NPd25QdHI8V2ViQ29yZTo6TWVzc2FnZVBvcnRDaGFubmVs
QXJyYXk+KTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9zdEV4Y2VwdGlvblRvV29ya2VyT2JqZWN0KAor
ICAgICAgICBjb25zdCBXZWJDb3JlOjpTdHJpbmcmLCBpbnQsIGNvbnN0IFdlYkNvcmU6OlN0cmlu
ZyYpOworICAgIHZpcnR1YWwgdm9pZCBwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdCgK
KyAgICAgICAgV2ViQ29yZTo6TWVzc2FnZURlc3RpbmF0aW9uLCBXZWJDb3JlOjpNZXNzYWdlU291
cmNlLCBXZWJDb3JlOjpNZXNzYWdlVHlwZSwKKyAgICAgICAgV2ViQ29yZTo6TWVzc2FnZUxldmVs
LCBjb25zdCBXZWJDb3JlOjpTdHJpbmcmLCBpbnQsIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYpOwor
ICAgIHZpcnR1YWwgdm9pZCBjb25maXJtTWVzc2FnZUZyb21Xb3JrZXJPYmplY3QoYm9vbCk7Cisg
ICAgdmlydHVhbCB2b2lkIHJlcG9ydFBlbmRpbmdBY3Rpdml0eShib29sKTsKKyAgICB2aXJ0dWFs
IHZvaWQgd29ya2VyQ29udGV4dENsb3NlZCgpOworICAgIHZpcnR1YWwgdm9pZCB3b3JrZXJDb250
ZXh0RGVzdHJveWVkKCk7CisKKyAgICAvLyBXZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94eSBtZXRo
b2RzOgorICAgIHZpcnR1YWwgdm9pZCBwb3N0VGFza1RvTG9hZGVyKFBhc3NPd25QdHI8V2ViQ29y
ZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4pOworICAgIHZpcnR1YWwgdm9pZCBwb3N0
VGFza0Zvck1vZGVUb1dvcmtlckNvbnRleHQoCisgICAgICAgIFBhc3NPd25QdHI8V2ViQ29yZTo6
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4sIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgbW9k
ZSk7CisKKyAgICAvLyBFeGVjdXRlcyB0aGUgZ2l2ZW4gdGFzayBvbiB0aGUgbWFpbiB0aHJlYWQu
CisgICAgc3RhdGljIHZvaWQgZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFkKFBhc3NPd25QdHI8V2Vi
Q29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4pOworCitwcm90ZWN0ZWQ6CisgICAg
dmlydHVhbCBXZWJXb3JrZXJDbGllbnQqIGNsaWVudCgpID0gMDsKKyAgICB2aXJ0dWFsIFdlYkNv
bW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50KCkgPSAwOworCisgICAgdm9pZCBzZXRXb3Jr
ZXJUaHJlYWQoUGFzc1JlZlB0cjxXZWJDb3JlOjpXb3JrZXJUaHJlYWQ+IHRocmVhZCkgeyBtX3dv
cmtlclRocmVhZCA9IHRocmVhZDsgfQorICAgIFdlYkNvcmU6OldvcmtlclRocmVhZCogd29ya2Vy
VGhyZWFkKCkgeyByZXR1cm4gbV93b3JrZXJUaHJlYWQuZ2V0KCk7IH0KKworICAgIC8vIFNodXRz
IGRvd24gdGhlIHdvcmtlciB0aHJlYWQuCisgICAgdm9pZCBzdG9wV29ya2VyVGhyZWFkKCk7CisK
KyAgICAvLyBDcmVhdGVzIHRoZSBzaGFkb3cgbG9hZGVyIHVzZWQgZm9yIHdvcmtlciBuZXR3b3Jr
IHJlcXVlc3RzLgorICAgIHZvaWQgaW5pdGlhbGl6ZUxvYWRlcihjb25zdCBXZWJVUkwmKTsKKwor
cHJpdmF0ZToKKyAgICAvLyBGdW5jdGlvbiB1c2VkIHRvIGludm9rZSB0YXNrcyBvbiB0aGUgbWFp
biB0aHJlYWQuCisgICAgc3RhdGljIHZvaWQgaW52b2tlVGFza01ldGhvZCh2b2lkKik7CisKKyAg
ICAvLyBUYXNrcyB0aGF0IGFyZSBydW4gb24gdGhlIG1haW4gdGhyZWFkLgorICAgIHN0YXRpYyB2
b2lkIHBvc3RNZXNzYWdlVGFzaygKKyAgICAgICAgV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwKKyAgICAgICAgV2ViV29ya2VyQmFzZSogdGhpc1B0ciwKKyAgICAgICAg
V2ViQ29yZTo6U3RyaW5nIG1lc3NhZ2UsCisgICAgICAgIFBhc3NPd25QdHI8V2ViQ29yZTo6TWVz
c2FnZVBvcnRDaGFubmVsQXJyYXk+IGNoYW5uZWxzKTsKKyAgICBzdGF0aWMgdm9pZCBwb3N0RXhj
ZXB0aW9uVGFzaygKKyAgICAgICAgV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwKKyAgICAgICAgV2ViV29ya2VyQmFzZSogdGhpc1B0ciwKKyAgICAgICAgY29uc3QgV2Vi
Q29yZTo6U3RyaW5nJiBtZXNzYWdlLAorICAgICAgICBpbnQgbGluZU51bWJlciwKKyAgICAgICAg
Y29uc3QgV2ViQ29yZTo6U3RyaW5nJiBzb3VyY2VVUkwpOworICAgIHN0YXRpYyB2b2lkIHBvc3RD
b25zb2xlTWVzc2FnZVRhc2soCisgICAgICAgIFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQsCisgICAgICAgIFdlYldvcmtlckJhc2UqIHRoaXNQdHIsCisgICAgICAgIGlu
dCBkZXN0aW5hdGlvbiwKKyAgICAgICAgaW50IHNvdXJjZSwKKyAgICAgICAgaW50IHR5cGUsCisg
ICAgICAgIGludCBsZXZlbCwKKyAgICAgICAgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBtZXNzYWdl
LAorICAgICAgICBpbnQgbGluZU51bWJlciwKKyAgICAgICAgY29uc3QgV2ViQ29yZTo6U3RyaW5n
JiBzb3VyY2VVUkwpOworICAgIHN0YXRpYyB2b2lkIGNvbmZpcm1NZXNzYWdlVGFzaygKKyAgICAg
ICAgV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKKyAgICAgICAgV2Vi
V29ya2VyQmFzZSogdGhpc1B0ciwKKyAgICAgICAgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkpOwor
ICAgIHN0YXRpYyB2b2lkIHJlcG9ydFBlbmRpbmdBY3Rpdml0eVRhc2soCisgICAgICAgIFdlYkNv
cmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCisgICAgICAgIFdlYldvcmtlckJh
c2UqIHRoaXNQdHIsCisgICAgICAgIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KTsKKyAgICBzdGF0
aWMgdm9pZCB3b3JrZXJDb250ZXh0Q2xvc2VkVGFzaygKKyAgICAgICAgV2ViQ29yZTo6U2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKKyAgICAgICAgV2ViV29ya2VyQmFzZSogdGhpc1B0
cik7CisgICAgc3RhdGljIHZvaWQgd29ya2VyQ29udGV4dERlc3Ryb3llZFRhc2soCisgICAgICAg
IFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCisgICAgICAgIFdlYldv
cmtlckJhc2UqIHRoaXNQdHIpOworCisgICAgLy8gJ3NoYWRvdyBwYWdlJyAtIGNyZWF0ZWQgdG8g
cHJveHkgbG9hZGluZyByZXF1ZXN0cyBmcm9tIHRoZSB3b3JrZXIuCisgICAgUmVmUHRyPFdlYkNv
cmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IG1fbG9hZGluZ0RvY3VtZW50OworICAgIFdlYlZp
ZXcqIG1fd2ViVmlldzsKKyAgICBib29sIG1fYXNrZWRUb1Rlcm1pbmF0ZTsKKworICAgIFJlZlB0
cjxXZWJDb3JlOjpXb3JrZXJUaHJlYWQ+IG1fd29ya2VyVGhyZWFkOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKKworI2VuZGlmCmRpZmYg
LS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckNsaWVudEltcGwuY3BwIGIvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJDbGllbnRJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi42YmUwM2E3Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJXb3JrZXJDbGllbnRJbXBsLmNwcApAQCAtMCwwICsxLDQxNiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJXb3JrZXJDbGllbnRJbXBsLmgiCisKKyNpZiBF
TkFCTEUoV09SS0VSUykKKworI2luY2x1ZGUgIkRlZGljYXRlZFdvcmtlclRocmVhZC5oIgorI2lu
Y2x1ZGUgIkVycm9yRXZlbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1l
TG9hZGVyQ2xpZW50LmgiCisjaW5jbHVkZSAiR2VuZXJpY1dvcmtlclRhc2suaCIKKyNpbmNsdWRl
ICJNZXNzYWdlRXZlbnQuaCIKKyNpbmNsdWRlICJNZXNzYWdlUG9ydC5oIgorI2luY2x1ZGUgIk1l
c3NhZ2VQb3J0Q2hhbm5lbC5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIK
KyNpbmNsdWRlICJXb3JrZXIuaCIKKyNpbmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCisjaW5jbHVk
ZSAiV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmgiCisjaW5jbHVkZSAiV29ya2VyTWVzc2Fn
aW5nUHJveHkuaCIKKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKKyNpbmNsdWRlICJGcmFt
ZUxvYWRlckNsaWVudEltcGwuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5l
bC5oIgorI2luY2x1ZGUgIldlYkZyYW1lQ2xpZW50LmgiCisjaW5jbHVkZSAiV2ViRnJhbWVJbXBs
LmgiCisjaW5jbHVkZSAiV2ViS2l0LmgiCisjaW5jbHVkZSAiV2ViS2l0Q2xpZW50LmgiCisjaW5j
bHVkZSAiV2ViTWVzc2FnZVBvcnRDaGFubmVsLmgiCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisj
aW5jbHVkZSAiV2ViVVJMLmgiCisjaW5jbHVkZSAiV2ViVmlld0ltcGwuaCIKKyNpbmNsdWRlICJX
ZWJXb3JrZXIuaCIKKyNpbmNsdWRlICJXZWJXb3JrZXJJbXBsLmgiCisKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworLy8gV2hlbiBXZWJLaXQgY3JlYXRl
cyBhIFdvcmtlckNvbnRleHRQcm94eSBvYmplY3QsIHdlIGNoZWNrIGlmIHdlJ3JlIGluIHRoZQor
Ly8gcmVuZGVyZXIgb3Igd29ya2VyIHByb2Nlc3MuICBJZiB0aGUgbGF0dGVyLCB0aGVuIHdlIGp1
c3QgdXNlCisvLyBXb3JrZXJNZXNzYWdpbmdQcm94eS4KKy8vCisvLyBJZiB3ZSdyZSBpbiB0aGUg
cmVuZGVyZXIgcHJvY2VzcywgdGhlbiB3ZSBuZWVkIHVzZSB0aGUgZ2x1ZSBwcm92aWRlZAorLy8g
V2ViV29ya2VyIG9iamVjdCB0byB0YWxrIHRvIHRoZSB3b3JrZXIgcHJvY2VzcyBvdmVyIElQQy4g
IFRoZSB3b3JrZXIgcHJvY2VzcworLy8gdGFsa3MgdG8gV29ya2VyKiB1c2luZyBXb3JrZXJPYmpl
Y3RQcm94eSwgd2hpY2ggd2UgaW1wbGVtZW50IG9uCisvLyBXZWJXb3JrZXJDbGllbnRJbXBsLgor
Ly8KKy8vIE5vdGUgdGhhdCBpZiB3ZSdyZSBydW5uaW5nIGVhY2ggd29ya2VyIGluIGEgc2VwYXJh
dGUgcHJvY2VzcywgdGhlbiBuZXN0ZWQKKy8vIHdvcmtlcnMgZW5kIHVwIHVzaW5nIHRoZSBzYW1l
IGNvZGVwYXRoIGFzIHRoZSByZW5kZXJlciBwcm9jZXNzLgorCisvLyBzdGF0aWMKK1dvcmtlckNv
bnRleHRQcm94eSogV2ViV29ya2VyQ2xpZW50SW1wbDo6Y3JlYXRlV29ya2VyQ29udGV4dFByb3h5
KFdvcmtlciogd29ya2VyKQoreworICAgIC8vIFNwZWNpYWwgYmVoYXZpb3IgZm9yIG11bHRpcGxl
IHdvcmtlcnMgcGVyIHByb2Nlc3MuCisgICAgLy8gRklYTUU6IHY4IGRvZXNuJ3Qgc3VwcG9ydCBt
b3JlIHRoYW4gb25lIHdvcmtlcnMgcGVyIHByb2Nlc3MuCisgICAgLy8gaWYgKCF3b3JrZXItPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNEb2N1bWVudCgpKQorICAgIC8vICAgICByZXR1cm4g
bmV3IFdvcmtlck1lc3NhZ2luZ1Byb3h5KHdvcmtlcik7CisKKyAgICBXZWJXb3JrZXIqIHdlYldv
cmtlciA9IDA7CisgICAgV2ViV29ya2VyQ2xpZW50SW1wbCogcHJveHkgPSBuZXcgV2ViV29ya2Vy
Q2xpZW50SW1wbCh3b3JrZXIpOworCisgICAgaWYgKHdvcmtlci0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpLT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3Rh
dGljX2Nhc3Q8RG9jdW1lbnQqPigKKyAgICAgICAgICAgIHdvcmtlci0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpKTsKKyAgICAgICAgV2ViRnJhbWVJbXBsKiB3ZWJGcmFtZSA9IFdlYkZyYW1lSW1w
bDo6ZnJvbUZyYW1lKGRvY3VtZW50LT5mcmFtZSgpKTsKKyAgICAgICAgd2ViV29ya2VyID0gd2Vi
RnJhbWUtPmNsaWVudCgpLT5jcmVhdGVXb3JrZXIod2ViRnJhbWUsIHByb3h5KTsKKyAgICB9IGVs
c2UgeworICAgICAgICBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkqIGN1cnJlbnRDb250ZXh0
ID0KKyAgICAgICAgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpyZXRyaWV2ZSgpOworICAg
ICAgICBpZiAoIWN1cnJlbnRDb250ZXh0KSB7CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgRGVkaWNh
dGVkV29ya2VyVGhyZWFkKiB0aHJlYWQgPQorICAgICAgICBzdGF0aWNfY2FzdDxEZWRpY2F0ZWRX
b3JrZXJUaHJlYWQqPihjdXJyZW50Q29udGV4dC0+d29ya2VyQ29udGV4dCgpLT50aHJlYWQoKSk7
CisgICAgICAgIFdvcmtlck9iamVjdFByb3h5KiB3b3JrZXJPYmplY3RQcm94eSA9ICZ0aHJlYWQt
Pndvcmtlck9iamVjdFByb3h5KCk7CisgICAgICAgIFdlYldvcmtlckltcGwqIGltcGwgPSByZWlu
dGVycHJldF9jYXN0PFdlYldvcmtlckltcGwqPih3b3JrZXJPYmplY3RQcm94eSk7CisgICAgICAg
IHdlYldvcmtlciA9IGltcGwtPmNsaWVudCgpLT5jcmVhdGVXb3JrZXIocHJveHkpOworICAgIH0K
KworICAgIHByb3h5LT5zZXRXZWJXb3JrZXIod2ViV29ya2VyKTsKKyAgICByZXR1cm4gcHJveHk7
Cit9CisKK1dlYldvcmtlckNsaWVudEltcGw6OldlYldvcmtlckNsaWVudEltcGwoV29ya2VyKiB3
b3JrZXIpCisgICAgOiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQod29ya2VyLT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkpCisgICAgLCBtX3dvcmtlcih3b3JrZXIpCisgICAgLCBtX2Fza2VkVG9U
ZXJtaW5hdGUoZmFsc2UpCisgICAgLCBtX3VuY29uZmlybWVkTWVzc2FnZUNvdW50KDApCisgICAg
LCBtX3dvcmtlckNvbnRleHRIYWRQZW5kaW5nQWN0aXZpdHkoZmFsc2UpCisgICAgLCBtX3dvcmtl
clRocmVhZElkKGN1cnJlbnRUaHJlYWQoKSkKK3sKK30KKworV2ViV29ya2VyQ2xpZW50SW1wbDo6
fldlYldvcmtlckNsaWVudEltcGwoKQoreworfQorCit2b2lkIFdlYldvcmtlckNsaWVudEltcGw6
OnNldFdlYldvcmtlcihXZWJXb3JrZXIqIHdlYldvcmtlcikKK3sKKyAgICBtX3dlYldvcmtlciA9
IHdlYldvcmtlcjsKK30KKwordm9pZCBXZWJXb3JrZXJDbGllbnRJbXBsOjpzdGFydFdvcmtlckNv
bnRleHQoY29uc3QgS1VSTCYgc2NyaXB0VVJMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUp
Cit7CisgICAgLy8gV29ya2VyLnRlcm1pbmF0ZSgpIGNvdWxkIGJlIGNhbGxlZCBmcm9tIEpTIGJl
Zm9yZSB0aGUgY29udGV4dCBpcyBzdGFydGVkLgorICAgIGlmIChtX2Fza2VkVG9UZXJtaW5hdGUp
CisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIWlzTWFpblRocmVhZCgpKSB7CisgICAgICAgIFdl
YldvcmtlckJhc2U6OmRpc3BhdGNoVGFza1RvTWFpblRocmVhZChjcmVhdGVDYWxsYmFja1Rhc2so
CisgICAgICAgICAgICAmc3RhcnRXb3JrZXJDb250ZXh0VGFzaywKKyAgICAgICAgICAgIHRoaXMs
CisgICAgICAgICAgICBzY3JpcHRVUkwuc3RyaW5nKCksCisgICAgICAgICAgICB1c2VyQWdlbnQs
CisgICAgICAgICAgICBzb3VyY2VDb2RlKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
bV93ZWJXb3JrZXItPnN0YXJ0V29ya2VyQ29udGV4dChzY3JpcHRVUkwsIHVzZXJBZ2VudCwgc291
cmNlQ29kZSk7Cit9CisKK3ZvaWQgV2ViV29ya2VyQ2xpZW50SW1wbDo6dGVybWluYXRlV29ya2Vy
Q29udGV4dCgpCit7CisgICAgaWYgKG1fYXNrZWRUb1Rlcm1pbmF0ZSkKKyAgICAgICAgcmV0dXJu
OworICAgIG1fYXNrZWRUb1Rlcm1pbmF0ZSA9IHRydWU7CisgICAgaWYgKCFpc01haW5UaHJlYWQo
KSkgeworICAgICAgICBXZWJXb3JrZXJCYXNlOjpkaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoY3Jl
YXRlQ2FsbGJhY2tUYXNrKCZ0ZXJtaW5hdGVXb3JrZXJDb250ZXh0VGFzaywgdGhpcykpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIG1fd2ViV29ya2VyLT50ZXJtaW5hdGVXb3JrZXJDb250
ZXh0KCk7Cit9CisKK3ZvaWQgV2ViV29ya2VyQ2xpZW50SW1wbDo6cG9zdE1lc3NhZ2VUb1dvcmtl
ckNvbnRleHQoCisgICAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1lc3NhZ2Us
CisgICAgUGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gY2hhbm5lbHMpCit7Cisg
ICAgLy8gV29ya2VyLnRlcm1pbmF0ZSgpIGNvdWxkIGJlIGNhbGxlZCBmcm9tIEpTIGJlZm9yZSB0
aGUgY29udGV4dCBpcyBzdGFydGVkLgorICAgIGlmIChtX2Fza2VkVG9UZXJtaW5hdGUpCisgICAg
ICAgIHJldHVybjsKKyAgICArK21fdW5jb25maXJtZWRNZXNzYWdlQ291bnQ7CisgICAgaWYgKCFp
c01haW5UaHJlYWQoKSkgeworICAgICAgICBXZWJXb3JrZXJCYXNlOjpkaXNwYXRjaFRhc2tUb01h
aW5UaHJlYWQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZwb3N0TWVzc2FnZVRvV29ya2VyQ29udGV4dFRh
c2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLT50b1N0cmluZygpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNoYW5uZWxzKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgV2ViTWVzc2Fn
ZVBvcnRDaGFubmVsQXJyYXkgd2ViQ2hhbm5lbHMoY2hhbm5lbHMuZ2V0KCkgPyBjaGFubmVscy0+
c2l6ZSgpIDogMCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3ZWJDaGFubmVscy5zaXpl
KCk7ICsraSkgeworICAgICAgICBXZWJNZXNzYWdlUG9ydENoYW5uZWwqIHdlYmNoYW5uZWwgPQor
ICAgICAgICAgICAgICAgICAgICAgICAgKCpjaGFubmVscylbaV0tPmNoYW5uZWwoKS0+d2ViQ2hh
bm5lbFJlbGVhc2UoKTsKKyAgICAgICAgd2ViY2hhbm5lbC0+c2V0Q2xpZW50KDApOworICAgICAg
ICB3ZWJDaGFubmVsc1tpXSA9IHdlYmNoYW5uZWw7CisgICAgfQorICAgIG1fd2ViV29ya2VyLT5w
b3N0TWVzc2FnZVRvV29ya2VyQ29udGV4dChtZXNzYWdlLT50b1N0cmluZygpLCB3ZWJDaGFubmVs
cyk7Cit9CisKK2Jvb2wgV2ViV29ya2VyQ2xpZW50SW1wbDo6aGFzUGVuZGluZ0FjdGl2aXR5KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gIW1fYXNrZWRUb1Rlcm1pbmF0ZQorICAgICAgICAgICAmJiAo
bV91bmNvbmZpcm1lZE1lc3NhZ2VDb3VudCB8fCBtX3dvcmtlckNvbnRleHRIYWRQZW5kaW5nQWN0
aXZpdHkpOworfQorCit2b2lkIFdlYldvcmtlckNsaWVudEltcGw6Ondvcmtlck9iamVjdERlc3Ry
b3llZCgpCit7CisgICAgaWYgKGlzTWFpblRocmVhZCgpKSB7CisgICAgICAgIG1fd2ViV29ya2Vy
LT53b3JrZXJPYmplY3REZXN0cm95ZWQoKTsKKyAgICAgICAgbV93b3JrZXIgPSAwOworICAgIH0K
KyAgICAvLyBFdmVuIGlmIHRoaXMgaXMgY2FsbGVkIG9uIHRoZSBtYWluIHRocmVhZCwgdGhlcmUg
Y291bGQgYmUgYSBxdWV1ZWQgdGFzayBmb3IKKyAgICAvLyB0aGlzIG9iamVjdCwgc28gZG9uJ3Qg
ZGVsZXRlIGl0IHJpZ2h0IGF3YXkuCisgICAgV2ViV29ya2VyQmFzZTo6ZGlzcGF0Y2hUYXNrVG9N
YWluVGhyZWFkKGNyZWF0ZUNhbGxiYWNrVGFzaygmd29ya2VyT2JqZWN0RGVzdHJveWVkVGFzaywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMpKTsKK30KKwordm9pZCBXZWJXb3JrZXJDbGllbnRJbXBsOjpwb3N0TWVzc2Fn
ZVRvV29ya2VyT2JqZWN0KGNvbnN0IFdlYlN0cmluZyYgbWVzc2FnZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJNZXNzYWdlUG9y
dENoYW5uZWxBcnJheSYgY2hhbm5lbHMpCit7CisgICAgT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5l
bEFycmF5PiBjaGFubmVsczI7CisgICAgaWYgKGNoYW5uZWxzLnNpemUoKSkgeworICAgICAgICBj
aGFubmVsczIgPSBuZXcgTWVzc2FnZVBvcnRDaGFubmVsQXJyYXkoY2hhbm5lbHMuc2l6ZSgpKTsK
KyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGFubmVscy5zaXplKCk7ICsraSkgewor
ICAgICAgICAgICAgUmVmUHRyPFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsPiBwbGF0Zm9ybV9j
aGFubmVsID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGF0Zm9ybU1lc3NhZ2VQb3J0
Q2hhbm5lbDo6Y3JlYXRlKGNoYW5uZWxzW2ldKTsKKyAgICAgICAgICAgIGNoYW5uZWxzW2ldLT5z
ZXRDbGllbnQocGxhdGZvcm1fY2hhbm5lbC5nZXQoKSk7CisgICAgICAgICAgICAoKmNoYW5uZWxz
MilbaV0gPSBNZXNzYWdlUG9ydENoYW5uZWw6OmNyZWF0ZShwbGF0Zm9ybV9jaGFubmVsKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIGlmIChjdXJyZW50VGhyZWFkKCkgIT0gbV93b3JrZXJUaHJl
YWRJZCkgeworICAgICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNrKGNyZWF0
ZUNhbGxiYWNrVGFzaygmcG9zdE1lc3NhZ2VUb1dvcmtlck9iamVjdFRhc2ssCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFN0cmluZyhtZXNzYWdlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbHMyLnJlbGVhc2UoKSkpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgcG9zdE1lc3NhZ2VUb1dvcmtlck9iamVjdFRhc2so
bV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LmdldCgpLCB0aGlzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1lc3NhZ2UsIGNoYW5uZWxzMi5yZWxlYXNlKCkpOworfQorCit2b2lk
IFdlYldvcmtlckNsaWVudEltcGw6OnBvc3RFeGNlcHRpb25Ub1dvcmtlck9iamVjdChjb25zdCBX
ZWJTdHJpbmcmIGVycm9yTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBzb3Vy
Y2VVUkwpCit7CisgICAgaWYgKGN1cnJlbnRUaHJlYWQoKSAhPSBtX3dvcmtlclRocmVhZElkKSB7
CisgICAgICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2soY3JlYXRlQ2FsbGJh
Y2tUYXNrKCZwb3N0RXhjZXB0aW9uVG9Xb3JrZXJPYmplY3RUYXNrLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTdHJpbmcoZXJyb3JNZXNzYWdlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nKHNv
dXJjZVVSTCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGJvb2wgaGFuZGxlZCA9
IGZhbHNlOworICAgIGhhbmRsZWQgPSBtX3dvcmtlci0+ZGlzcGF0Y2hFdmVudChFcnJvckV2ZW50
OjpjcmVhdGUoZXJyb3JNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlVVJMLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcikpOworICAgIGlm
ICghaGFuZGxlZCkKKyAgICAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5yZXBvcnRFeGNl
cHRpb24oZXJyb3JNZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwpOworfQorCit2b2lkIFdl
YldvcmtlckNsaWVudEltcGw6OnBvc3RDb25zb2xlTWVzc2FnZVRvV29ya2VyT2JqZWN0KGludCBk
ZXN0aW5hdGlvbklkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgc291cmNlSWQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtZXNzYWdlVHlwZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IG1lc3NhZ2VMZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBtZXNzYWdlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZU51
bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBzb3VyY2VVUkwpCit7CisgICAgaWYgKGN1cnJlbnRU
aHJlYWQoKSAhPSBtX3dvcmtlclRocmVhZElkKSB7CisgICAgICAgIG1fc2NyaXB0RXhlY3V0aW9u
Q29udGV4dC0+cG9zdFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZwb3N0Q29uc29sZU1lc3NhZ2VU
b1dvcmtlck9iamVjdFRhc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uSWQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNvdXJjZUlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtZXNzYWdlVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZUxldmVsLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT
dHJpbmcobWVzc2FnZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyhzb3VyY2VVUkwp
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQtPmFkZE1lc3NhZ2Uoc3RhdGljX2Nhc3Q8TWVzc2FnZURlc3RpbmF0aW9uPihkZXN0aW5hdGlv
bklkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8TWVzc2FnZVNvdXJjZT4oc291cmNlSWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxNZXNzYWdlVHlwZT4obWVzc2FnZVR5cGUpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxNZXNzYWdl
TGV2ZWw+KG1lc3NhZ2VMZXZlbCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFN0cmluZyhtZXNzYWdlKSwgbGluZU51bWJlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU3RyaW5nKHNvdXJjZVVSTCkpOworfQorCit2b2lkIFdlYldv
cmtlckNsaWVudEltcGw6OmNvbmZpcm1NZXNzYWdlRnJvbVdvcmtlck9iamVjdChib29sIGhhc1Bl
bmRpbmdBY3Rpdml0eSkKK3sKKyAgICAvLyB1bmNvbmZpcm1lZF9tZXNzYWdlX2NvdW50XyBjYW4g
b25seSBiZSB1cGRhdGVkIG9uIHRoZSB0aHJlYWQgd2hlcmUgaXQncworICAgIC8vIGFjY2Vzc2Vk
LiAgT3RoZXJ3aXNlIHRoZXJlIGFyZSByYWNlIGNvbmRpdGlvbnMgd2l0aCB2OCdzIGdhcmJhZ2UK
KyAgICAvLyBjb2xsZWN0aW9uLgorICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRh
c2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZjb25maXJtTWVzc2FnZUZyb21Xb3JrZXJPYmplY3RUYXNr
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMpKTsKK30KKwordm9pZCBXZWJXb3JrZXJDbGllbnRJbXBsOjpyZXBvcnRQZW5kaW5n
QWN0aXZpdHkoYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkpCit7CisgICAgLy8gU2VlIGFib3ZlIGNv
bW1lbnQgaW4gY29uZmlybU1lc3NhZ2VGcm9tV29ya2VyT2JqZWN0LgorICAgIG1fc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC0+cG9zdFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZyZXBvcnRQZW5kaW5n
QWN0aXZpdHlUYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRoaXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaGFzUGVuZGluZ0FjdGl2aXR5KSk7Cit9CisKK3ZvaWQg
V2ViV29ya2VyQ2xpZW50SW1wbDo6d29ya2VyQ29udGV4dERlc3Ryb3llZCgpCit7Cit9CisKK3Zv
aWQgV2ViV29ya2VyQ2xpZW50SW1wbDo6d29ya2VyQ29udGV4dENsb3NlZCgpCit7Cit9CisKK3Zv
aWQgV2ViV29ya2VyQ2xpZW50SW1wbDo6c3RhcnRXb3JrZXJDb250ZXh0VGFzayhTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFdlYldvcmtlckNsaWVudEltcGwqIHRoaXNQdHIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBzY3Jp
cHRVUkwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBzb3VyY2VDb2RlKQoreworICAgIHRoaXNQ
dHItPm1fd2ViV29ya2VyLT5zdGFydFdvcmtlckNvbnRleHQoS1VSTChQYXJzZWRVUkxTdHJpbmcs
IHNjcmlwdFVSTCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1c2VyQWdlbnQsIHNvdXJjZUNvZGUpOworfQorCit2b2lkIFdlYldvcmtlckNsaWVudEltcGw6
OnRlcm1pbmF0ZVdvcmtlckNvbnRleHRUYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFdlYldvcmtlckNsaWVudEltcGwqIHRoaXNQdHIpCit7CisgICAgdGhpc1B0ci0+bV93ZWJXb3Jr
ZXItPnRlcm1pbmF0ZVdvcmtlckNvbnRleHQoKTsKK30KKwordm9pZCBXZWJXb3JrZXJDbGllbnRJ
bXBsOjpwb3N0TWVzc2FnZVRvV29ya2VyQ29udGV4dFRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFdlYldvcmtlckNsaWVudEltcGwqIHRoaXNQdHIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcm
IG1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBjaGFubmVscykK
K3sKKyAgICBXZWJNZXNzYWdlUG9ydENoYW5uZWxBcnJheSB3ZWJDaGFubmVscyhjaGFubmVscy5n
ZXQoKSA/IGNoYW5uZWxzLT5zaXplKCkgOiAwKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgd2ViQ2hhbm5lbHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgd2ViQ2hhbm5lbHNbaV0gPSAo
KmNoYW5uZWxzKVtpXS0+Y2hhbm5lbCgpLT53ZWJDaGFubmVsUmVsZWFzZSgpOworICAgICAgICB3
ZWJDaGFubmVsc1tpXS0+c2V0Q2xpZW50KDApOworICAgIH0KKworICAgIHRoaXNQdHItPm1fd2Vi
V29ya2VyLT5wb3N0TWVzc2FnZVRvV29ya2VyQ29udGV4dChtZXNzYWdlLCB3ZWJDaGFubmVscyk7
Cit9CisKK3ZvaWQgV2ViV29ya2VyQ2xpZW50SW1wbDo6d29ya2VyT2JqZWN0RGVzdHJveWVkVGFz
ayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYldvcmtlckNsaWVudEltcGwqIHRoaXNQ
dHIpCit7CisgICAgaWYgKHRoaXNQdHItPm1fd29ya2VyKSAvLyBDaGVjayB3ZSBoYXZlbid0IGFs
cmVhZCBjYWxsZWQgdGhpcy4KKyAgICAgICAgdGhpc1B0ci0+bV93ZWJXb3JrZXItPndvcmtlck9i
amVjdERlc3Ryb3llZCgpOworICAgIGRlbGV0ZSB0aGlzUHRyOworfQorCit2b2lkIFdlYldvcmtl
ckNsaWVudEltcGw6OnBvc3RNZXNzYWdlVG9Xb3JrZXJPYmplY3RUYXNrKAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBXZWJXb3JrZXJDbGllbnRJbXBsKiB0aGlzUHRyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBT
dHJpbmcmIG1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IGNoYW5u
ZWxzKQoreworCisgICAgaWYgKHRoaXNQdHItPm1fd29ya2VyKSB7CisgICAgICAgIE93blB0cjxN
ZXNzYWdlUG9ydEFycmF5PiBwb3J0cyA9CisgICAgICAgICAgICBNZXNzYWdlUG9ydDo6ZW50YW5n
bGVQb3J0cygqY29udGV4dCwgY2hhbm5lbHMucmVsZWFzZSgpKTsKKyAgICAgICAgUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZE1lc3NhZ2UgPQorICAgICAgICAgICAgU2Vy
aWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUobWVzc2FnZSk7CisgICAgICAgIHRoaXNQdHItPm1f
d29ya2VyLT5kaXNwYXRjaEV2ZW50KE1lc3NhZ2VFdmVudDo6Y3JlYXRlKHBvcnRzLnJlbGVhc2Uo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2VyaWFsaXplZE1lc3NhZ2UucmVsZWFzZSgpKSk7CisgICAgfQorfQorCit2b2lk
IFdlYldvcmtlckNsaWVudEltcGw6OnBvc3RFeGNlcHRpb25Ub1dvcmtlck9iamVjdFRhc2soCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJXb3JrZXJDbGllbnRJbXBsKiB0
aGlzUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsaW5lTnVtYmVyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFN0cmluZyYgc291cmNlVVJMKQoreworICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNlOwor
ICAgIGlmICh0aGlzUHRyLT5tX3dvcmtlcikKKyAgICAgICAgaGFuZGxlZCA9IHRoaXNQdHItPm1f
d29ya2VyLT5kaXNwYXRjaEV2ZW50KEVycm9yRXZlbnQ6OmNyZWF0ZShlcnJvck1lc3NhZ2UsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc291cmNlVVJMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIpKTsKKyAgICBp
ZiAoIWhhbmRsZWQpCisgICAgICAgIHRoaXNQdHItPm1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+
cmVwb3J0RXhjZXB0aW9uKGVycm9yTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlVVJM
KTsKK30KKwordm9pZCBXZWJXb3JrZXJDbGllbnRJbXBsOjpwb3N0Q29uc29sZU1lc3NhZ2VUb1dv
cmtlck9iamVjdFRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdl
YldvcmtlckNsaWVudEltcGwqIHRoaXNQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVzdGluYXRpb25JZCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBzb3VyY2VJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtZXNzYWdlVHlwZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtZXNz
YWdlTGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZU51
bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKQoreworICAgIHRoaXNQdHItPm1f
c2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+YWRkTWVzc2FnZShzdGF0aWNfY2FzdDxNZXNzYWdlRGVz
dGluYXRpb24+KGRlc3RpbmF0aW9uSWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxNZXNzYWdlU291cmNlPihzb3VyY2VJZCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PE1lc3NhZ2VUeXBlPihtZXNzYWdlVHlwZSksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PE1lc3NhZ2VMZXZlbD4obWVz
c2FnZUxldmVsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbWVzc2FnZSwgbGluZU51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc291cmNlVVJMKTsKK30KKwordm9pZCBXZWJXb3JrZXJDbGll
bnRJbXBsOjpjb25maXJtTWVzc2FnZUZyb21Xb3JrZXJPYmplY3RUYXNrKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgV2ViV29ya2VyQ2xpZW50SW1wbCogdGhpc1B0cikKK3sK
KyAgICB0aGlzUHRyLT5tX3VuY29uZmlybWVkTWVzc2FnZUNvdW50LS07Cit9CisKK3ZvaWQgV2Vi
V29ya2VyQ2xpZW50SW1wbDo6cmVwb3J0UGVuZGluZ0FjdGl2aXR5VGFzayhTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFdlYldvcmtlckNsaWVudEltcGwqIHRoaXNQdHIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNQZW5kaW5n
QWN0aXZpdHkpCit7CisgICAgdGhpc1B0ci0+bV93b3JrZXJDb250ZXh0SGFkUGVuZGluZ0FjdGl2
aXR5ID0gaGFzUGVuZGluZ0FjdGl2aXR5OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckNsaWVudElt
cGwuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQ2xpZW50SW1wbC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzYWNlYmMKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckNsaWVudEltcGwuaApAQCAtMCwwICsxLDE1NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgV2ViV29ya2VyQ2xpZW50SW1wbF9oCisjZGVmaW5lIFdlYldvcmtlckNsaWVudElt
cGxfaAorCisjaWYgRU5BQkxFKFdPUktFUlMpCisKKy8vIEZJWE1FOiBmaXggdG8ganVzdCAiV2Vi
V29ya2VyQ2xpZW50LmgiIG9uY2Ugbm9ib2R5IGluIGdsdWUgZGVwZW5kcyBvbiB1cy4KKyNpbmNs
dWRlICIuLi9wdWJsaWMvV2ViV29ya2VyQ2xpZW50LmgiCisKKyNpbmNsdWRlICJXb3JrZXJDb250
ZXh0UHJveHkuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJXb3JrZXI7CisKKy8vIFRo
ZSBwdXJwb3NlIG9mIHRoaXMgY2xhc3MgaXMgdG8gcHJvdmlkZSBhIFdvcmtlckNvbnRleHRQcm94
eQorLy8gaW1wbGVtZW50YXRpb24gdGhhdCB3ZSBjYW4gZ2l2ZSB0byBXZWJLaXQuICBJbnRlcm5h
bGx5LCBpdCBjb252ZXJ0cyB0aGUKKy8vIGRhdGEgdHlwZXMgdG8gQ2hyb21lIGNvbXBhdGlibGUg
b25lcyBzbyB0aGF0IHJlbmRlcmVyIGNvZGUgY2FuIHVzZSBpdCBvdmVyCisvLyBJUEMuCitjbGFz
cyBXZWJXb3JrZXJDbGllbnRJbXBsIDogcHVibGljIFdlYkNvcmU6OldvcmtlckNvbnRleHRQcm94
eQorICAgICAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBXZWJXb3JrZXJDbGllbnQgewor
cHVibGljOgorICAgIFdlYldvcmtlckNsaWVudEltcGwoV2ViQ29yZTo6V29ya2VyKik7CisKKyAg
ICAvLyBXZWJDb3JlOjpXb3JrZXJDb250ZXh0UHJveHkgRmFjdG9yeS4KKyAgICBzdGF0aWMgV2Vi
Q29yZTo6V29ya2VyQ29udGV4dFByb3h5KiBjcmVhdGVXb3JrZXJDb250ZXh0UHJveHkoV2ViQ29y
ZTo6V29ya2VyKik7CisgICAgdm9pZCBzZXRXZWJXb3JrZXIoV2ViV29ya2VyKik7CisKKyAgICAv
LyBXZWJDb3JlOjpXb3JrZXJDb250ZXh0UHJveHkgbWV0aG9kczoKKyAgICAvLyBUaGVzZSBhcmUg
Y2FsbGVkIG9uIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSB3b3JrZXIuICBJbiB0aGUgcmVu
ZGVyZXIKKyAgICAvLyBwcm9jZXNzLCB0aGlzIHdpbGwgYmUgdGhlIG1haW4gV2ViS2l0IHRocmVh
ZC4gIEluIHRoZSB3b3JrZXIgcHJvY2VzcywgdGhpcworICAgIC8vIHdpbGwgYmUgdGhlIHRocmVh
ZCBvZiB0aGUgZXhlY3V0aW5nIHdvcmtlciAobm90IHRoZSBtYWluIFdlYktpdCB0aHJlYWQpLgor
ICAgIHZpcnR1YWwgdm9pZCBzdGFydFdvcmtlckNvbnRleHQoY29uc3QgV2ViQ29yZTo6S1VSTCYs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJDb3JlOjpTdHJp
bmcmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViQ29yZTo6
U3RyaW5nJik7CisgICAgdmlydHVhbCB2b2lkIHRlcm1pbmF0ZVdvcmtlckNvbnRleHQoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcG9zdE1lc3NhZ2VUb1dvcmtlckNvbnRleHQoCisgICAgICAgIFBhc3NS
ZWZQdHI8V2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBtZXNzYWdlLAorICAgICAgICBQ
YXNzT3duUHRyPFdlYkNvcmU6Ok1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBjaGFubmVscyk7Cisg
ICAgdmlydHVhbCBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0OworICAgIHZpcnR1YWwg
dm9pZCB3b3JrZXJPYmplY3REZXN0cm95ZWQoKTsKKworICAgIC8vIFdlYldvcmtlckNsaWVudCBt
ZXRob2RzOgorICAgIC8vIFRoZXNlIGFyZSBjYWxsZWQgb24gdGhlIG1haW4gV2ViS2l0IHRocmVh
ZC4KKyAgICB2aXJ0dWFsIHZvaWQgcG9zdE1lc3NhZ2VUb1dvcmtlck9iamVjdChjb25zdCBXZWJT
dHJpbmcmLCBjb25zdCBXZWJNZXNzYWdlUG9ydENoYW5uZWxBcnJheSYpOworICAgIHZpcnR1YWwg
dm9pZCBwb3N0RXhjZXB0aW9uVG9Xb3JrZXJPYmplY3QoY29uc3QgV2ViU3RyaW5nJiwgaW50LCBj
b25zdCBXZWJTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9zdENvbnNvbGVNZXNzYWdlVG9X
b3JrZXJPYmplY3QoaW50LCBpbnQsIGludCwgaW50LCBjb25zdCBXZWJTdHJpbmcmLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQsIGNvbnN0IFdl
YlN0cmluZyYpOworICAgIHZpcnR1YWwgdm9pZCBjb25maXJtTWVzc2FnZUZyb21Xb3JrZXJPYmpl
Y3QoYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHJlcG9ydFBlbmRpbmdBY3Rpdml0eShib29sKTsK
KyAgICB2aXJ0dWFsIHZvaWQgd29ya2VyQ29udGV4dENsb3NlZCgpOworICAgIHZpcnR1YWwgdm9p
ZCB3b3JrZXJDb250ZXh0RGVzdHJveWVkKCk7CisgICAgdmlydHVhbCBXZWJXb3JrZXIqIGNyZWF0
ZVdvcmtlcihXZWJXb3JrZXJDbGllbnQqKSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBXZWJO
b3RpZmljYXRpb25QcmVzZW50ZXIqIG5vdGlmaWNhdGlvblByZXNlbnRlcigpCisgICAgeworICAg
ICAgICAvLyBGSVhNRTogTm90aWZpY2F0aW9ucyBub3QgeWV0IHN1cHBvcnRlZCBpbiB3b3JrZXJz
LgorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCB+V2Vi
V29ya2VyQ2xpZW50SW1wbCgpOworCisgICAgLy8gTWV0aG9kcyB1c2VkIHRvIHN1cHBvcnQgV2Vi
V29ya2VyQ2xpZW50SW1wbCBiZWluZyBjb25zdHJ1Y3RlZCBvbiB3b3JrZXIKKyAgICAvLyB0aHJl
YWRzLgorICAgIC8vIFRoZXNlIHRhc2tzIGFyZSBkaXNwYXRjaGVkIG9uIHRoZSBXZWJLaXQgdGhy
ZWFkLgorICAgIHN0YXRpYyB2b2lkIHN0YXJ0V29ya2VyQ29udGV4dFRhc2soV2ViQ29yZTo6U2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFdlYldvcmtlckNsaWVudEltcGwqIHRoaXNQdHIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIHNjcmlwdFVS
TCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYkNvcmU6
OlN0cmluZyYgdXNlckFnZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBzb3VyY2VDb2RlKTsKKyAgICBzdGF0aWMgdm9pZCB0
ZXJtaW5hdGVXb3JrZXJDb250ZXh0VGFzayhXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdl
YldvcmtlckNsaWVudEltcGwqIHRoaXNQdHIpOworICAgIHN0YXRpYyB2b2lkIHBvc3RNZXNzYWdl
VG9Xb3JrZXJDb250ZXh0VGFzayhXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJX
b3JrZXJDbGllbnRJbXBsKiB0aGlzUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIG1lc3NhZ2UsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NPd25QdHI8V2ViQ29y
ZTo6TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IGNoYW5uZWxzKTsKKyAgICBzdGF0aWMgdm9pZCB3
b3JrZXJPYmplY3REZXN0cm95ZWRUYXNrKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJX
b3JrZXJDbGllbnRJbXBsKiB0aGlzUHRyKTsKKworICAgIC8vIFRoZXNlIHRhc2tzIGFyZSBkaXNw
YXRjaGVkIG9uIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSB3b3JrZXIgKGkuZS4KKyAgICAv
LyBtYWluIFdlYktpdCB0aHJlYWQgaW4gcmVuZGVyZXIgcHJvY2VzcywgYW5kIHRoZSB3b3JrZXIg
dGhyZWFkIGluIHRoZQorICAgIC8vIHdvcmtlciBwcm9jZXNzKS4KKyAgICBzdGF0aWMgdm9pZCBw
b3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0VGFzayhXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFdlYldvcmtlckNsaWVudEltcGwqIHRoaXNQdHIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBtZXNzYWdlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NPd25QdHI8
V2ViQ29yZTo6TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IGNoYW5uZWxzKTsKKyAgICBzdGF0aWMg
dm9pZCBwb3N0RXhjZXB0aW9uVG9Xb3JrZXJPYmplY3RUYXNrKFdlYkNvcmU6OlNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXZWJXb3JrZXJDbGllbnRJbXBsKiB0aGlzUHRyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViQ29yZTo6U3RyaW5n
JiBtZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIHNvdXJjZVVSTCk7CisgICAgc3RhdGlj
IHZvaWQgcG9zdENvbnNvbGVNZXNzYWdlVG9Xb3JrZXJPYmplY3RUYXNrKFdlYkNvcmU6OlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFdlYldvcmtlckNsaWVudEltcGwqIHRoaXNQdHIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBk
ZXN0aW5hdGlvbklkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgc291cmNlSWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBtZXNzYWdlVHlwZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1lc3NhZ2VMZXZlbCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
V2ViQ29yZTo6U3RyaW5nJiBtZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZU51bWJlciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViQ29yZTo6U3RyaW5n
JiBzb3VyY2VVUkwpOworICAgIHN0YXRpYyB2b2lkIGNvbmZpcm1NZXNzYWdlRnJvbVdvcmtlck9i
amVjdFRhc2soV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYldvcmtlckNs
aWVudEltcGwqIHRoaXNQdHIpOworICAgIHN0YXRpYyB2b2lkIHJlcG9ydFBlbmRpbmdBY3Rpdml0
eVRhc2soV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYldvcmtlckNsaWVudEltcGwqIHRo
aXNQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGhh
c1BlbmRpbmdBY3Rpdml0eSk7CisKKyAgICAvLyBHdWFyZCBhZ2FpbnN0IGNvbnRleHQgZnJvbSBi
ZWluZyBkZXN0cm95ZWQgYmVmb3JlIGEgd29ya2VyIGV4aXRzLgorICAgIFJlZlB0cjxXZWJDb3Jl
OjpTY3JpcHRFeGVjdXRpb25Db250ZXh0PiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CisKKyAg
ICBXZWJDb3JlOjpXb3JrZXIqIG1fd29ya2VyOworICAgIFdlYldvcmtlciogbV93ZWJXb3JrZXI7
CisgICAgYm9vbCBtX2Fza2VkVG9UZXJtaW5hdGU7CisgICAgdW5zaWduZWQgbV91bmNvbmZpcm1l
ZE1lc3NhZ2VDb3VudDsKKyAgICBib29sIG1fd29ya2VyQ29udGV4dEhhZFBlbmRpbmdBY3Rpdml0
eTsKKyAgICBUaHJlYWRJZGVudGlmaWVyIG1fd29ya2VyVGhyZWFkSWQ7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQ7CisKKyNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckltcGwuY3BwIGIvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi43NDRiZTMwCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJXb3JrZXJJbXBsLmNwcApAQCAtMCwwICsxLDE1OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJXZWJXb3JrZXJJbXBsLmgiCisKKyNpbmNsdWRlICJEZWRpY2F0ZWRXb3JrZXJD
b250ZXh0LmgiCisjaW5jbHVkZSAiRGVkaWNhdGVkV29ya2VyVGhyZWFkLmgiCisjaW5jbHVkZSAi
R2VuZXJpY1dvcmtlclRhc2suaCIKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiTWVzc2Fn
ZUV2ZW50LmgiCisjaW5jbHVkZSAiTWVzc2FnZVBvcnQuaCIKKyNpbmNsdWRlICJNZXNzYWdlUG9y
dENoYW5uZWwuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5jbHVk
ZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIK
KyNpbmNsdWRlICJTdWJzdGl0dXRlRGF0YS5oIgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4K
KworI2luY2x1ZGUgIlBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmgiCisjaW5jbHVkZSAiV2Vi
TWVzc2FnZVBvcnRDaGFubmVsLmgiCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisjaW5jbHVkZSAi
V2ViVVJMLmgiCisjaW5jbHVkZSAiV2ViV29ya2VyQ2xpZW50LmgiCisKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworI2lmIEVOQUJMRShXT1JLRVJTKQor
CitXZWJXb3JrZXIqIFdlYldvcmtlcjo6Y3JlYXRlKFdlYldvcmtlckNsaWVudCogY2xpZW50KQor
eworICAgIHJldHVybiBuZXcgV2ViV29ya2VySW1wbChjbGllbnQpOworfQorCisKK1dlYldvcmtl
ckltcGw6OldlYldvcmtlckltcGwoV2ViV29ya2VyQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX2Ns
aWVudChjbGllbnQpCit7Cit9CisKK1dlYldvcmtlckltcGw6On5XZWJXb3JrZXJJbXBsKCkKK3sK
K30KKworV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBXZWJXb3JrZXJJbXBsOjpjb21tb25DbGllbnQo
KQoreworICAgIHJldHVybiBtX2NsaWVudDsKK30KKwordm9pZCBXZWJXb3JrZXJJbXBsOjpwb3N0
TWVzc2FnZVRvV29ya2VyQ29udGV4dFRhc2soV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFdlYldvcmtlckltcGwqIHRoaXNQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzT3duUHRyPE1l
c3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBjaGFubmVscykKK3sKKyAgICBBU1NFUlQoY29udGV4dC0+
aXNXb3JrZXJDb250ZXh0KCkpOworICAgIERlZGljYXRlZFdvcmtlckNvbnRleHQqIHdvcmtlckNv
bnRleHQgPQorICAgICAgICBzdGF0aWNfY2FzdDxEZWRpY2F0ZWRXb3JrZXJDb250ZXh0Kj4oY29u
dGV4dCk7CisKKyAgICBPd25QdHI8TWVzc2FnZVBvcnRBcnJheT4gcG9ydHMgPQorICAgICAgICBN
ZXNzYWdlUG9ydDo6ZW50YW5nbGVQb3J0cygqY29udGV4dCwgY2hhbm5lbHMucmVsZWFzZSgpKTsK
KyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkTWVzc2FnZSA9Cisg
ICAgICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKG1lc3NhZ2UpOworICAgIHdvcmtl
ckNvbnRleHQtPmRpc3BhdGNoRXZlbnQoTWVzc2FnZUV2ZW50OjpjcmVhdGUoCisgICAgICAgIHBv
cnRzLnJlbGVhc2UoKSwgc2VyaWFsaXplZE1lc3NhZ2UucmVsZWFzZSgpKSk7CisgICAgdGhpc1B0
ci0+Y29uZmlybU1lc3NhZ2VGcm9tV29ya2VyT2JqZWN0KHdvcmtlckNvbnRleHQtPmhhc1BlbmRp
bmdBY3Rpdml0eSgpKTsKK30KKworLy8gV2ViV29ya2VyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordm9pZCBXZWJX
b3JrZXJJbXBsOjpzdGFydFdvcmtlckNvbnRleHQoY29uc3QgV2ViVVJMJiBzY3JpcHRVcmwsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJTdHJpbmcmIHVz
ZXJBZ2VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdl
YlN0cmluZyYgc291cmNlQ29kZSkKK3sKKyAgICBpbml0aWFsaXplTG9hZGVyKHNjcmlwdFVybCk7
CisgICAgc2V0V29ya2VyVGhyZWFkKERlZGljYXRlZFdvcmtlclRocmVhZDo6Y3JlYXRlKHNjcmlw
dFVybCwgdXNlckFnZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzb3VyY2VDb2RlLCAqdGhpcywgKnRoaXMpKTsKKyAgICAvLyBXb3JrZXIgaW5p
dGlhbGl6YXRpb24gbWVhbnMgYSBwZW5kaW5nIGFjdGl2aXR5LgorICAgIHJlcG9ydFBlbmRpbmdB
Y3Rpdml0eSh0cnVlKTsKKyAgICB3b3JrZXJUaHJlYWQoKS0+c3RhcnQoKTsKK30KKwordm9pZCBX
ZWJXb3JrZXJJbXBsOjp0ZXJtaW5hdGVXb3JrZXJDb250ZXh0KCkKK3sKKyAgICBzdG9wV29ya2Vy
VGhyZWFkKCk7Cit9CisKK3ZvaWQgV2ViV29ya2VySW1wbDo6cG9zdE1lc3NhZ2VUb1dvcmtlckNv
bnRleHQoY29uc3QgV2ViU3RyaW5nJiBtZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJNZXNzYWdlUG9ydENoYW5uZWxBcnJheSYg
d2ViQ2hhbm5lbHMpCit7CisgICAgT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBjaGFu
bmVsczsKKyAgICBpZiAod2ViQ2hhbm5lbHMuc2l6ZSgpKSB7CisgICAgICAgIGNoYW5uZWxzID0g
bmV3IE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5KHdlYkNoYW5uZWxzLnNpemUoKSk7CisgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2ViQ2hhbm5lbHMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgICAgIFJlZlB0cjxQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbD4gcGxhdGZvcm1fY2hhbm5l
bCA9CisgICAgICAgICAgICAgICAgUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw6OmNyZWF0ZSh3
ZWJDaGFubmVsc1tpXSk7CisgICAgICAgICAgICB3ZWJDaGFubmVsc1tpXS0+c2V0Q2xpZW50KHBs
YXRmb3JtX2NoYW5uZWwuZ2V0KCkpOworICAgICAgICAgICAgKCpjaGFubmVscylbaV0gPSBNZXNz
YWdlUG9ydENoYW5uZWw6OmNyZWF0ZShwbGF0Zm9ybV9jaGFubmVsKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHdvcmtlclRocmVhZCgpLT5ydW5Mb29wKCkucG9zdFRhc2soCisgICAgICAgIGNy
ZWF0ZUNhbGxiYWNrVGFzaygmcG9zdE1lc3NhZ2VUb1dvcmtlckNvbnRleHRUYXNrLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcywgU3RyaW5nKG1lc3NhZ2UpLCBjaGFubmVscy5yZWxl
YXNlKCkpKTsKK30KKwordm9pZCBXZWJXb3JrZXJJbXBsOjp3b3JrZXJPYmplY3REZXN0cm95ZWQo
KQoreworICAgIC8vIFdvcmtlciBvYmplY3QgaW4gdGhlIHJlbmRlcmVyIHdhcyBkZXN0cm95ZWQs
IHBlcmhhcHMgYSByZXN1bHQgb2YgR0MuCisgICAgLy8gRm9yIHVzLCBpdCdzIGEgc2lnbmFsIHRv
IHN0YXJ0IHRlcm1pbmF0aW5nIHRoZSBXb3JrZXJDb250ZXh0IHRvby4KKyAgICAvLyBGSVhNRTog
d2hlbiAna2lsbCBhIHdvcmtlcicgaHRtbDUgc3BlYyBhbGdvcml0aG0gaXMgaW1wbGVtZW50ZWQs
IGl0CisgICAgLy8gc2hvdWxkIGJlIHVzZWQgaGVyZSBpbnN0ZWFkIG9mICd0ZXJtaW5hdGUgYSB3
b3JrZXInLgorICAgIHRlcm1pbmF0ZVdvcmtlckNvbnRleHQoKTsKK30KKwordm9pZCBXZWJXb3Jr
ZXJJbXBsOjpjbGllbnREZXN0cm95ZWQoKQoreworICAgIG1fY2xpZW50ID0gMDsKK30KKworI2Vs
c2UKKworV2ViV29ya2VyKiBXZWJXb3JrZXI6OmNyZWF0ZShXZWJXb3JrZXJDbGllbnQqIGNsaWVu
dCkKK3sKKyAgICByZXR1cm4gMDsKK30KKworI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
V29ya2VySW1wbC5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJJbXBsLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVjOTZjZAotLS0gL2Rldi9udWxsCisrKyBi
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VySW1wbC5oCkBAIC0wLDAgKzEsODMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIFdlYldvcmtlckltcGxfaAorI2RlZmluZSBXZWJXb3JrZXJJbXBsX2gKKworI2luY2x1ZGUg
IldlYldvcmtlci5oIgorCisjaWYgRU5BQkxFKFdPUktFUlMpCisKKyNpbmNsdWRlICJTY3JpcHRF
eGVjdXRpb25Db250ZXh0LmgiCisKKyNpbmNsdWRlICJXZWJXb3JrZXJCYXNlLmgiCisKK25hbWVz
cGFjZSBXZWJLaXQgeworY2xhc3MgV2ViVmlldzsKKworLy8gVGhpcyBjbGFzcyBpcyB1c2VkIGJ5
IHRoZSB3b3JrZXIgcHJvY2VzcyBjb2RlIHRvIHRhbGsgdG8gdGhlIFdlYkNvcmU6Oldvcmtlcgor
Ly8gaW1wbGVtZW50YXRpb24uICBJdCBjYW4ndCB1c2UgaXQgZGlyZWN0bHkgc2luY2UgaXQgdXNl
cyBXZWJLaXQgdHlwZXMsIHNvIHRoaXMKKy8vIGNsYXNzIGNvbnZlcnRzIHRoZSBkYXRhIHR5cGVz
LiAgV2hlbiB0aGUgV2ViQ29yZTo6V29ya2VyIG9iamVjdCB3YW50cyB0byBjYWxsCisvLyBXZWJD
b3JlOjpXb3JrZXJPYmplY3RQcm94eSwgdGhpcyBjbGFzcyB3aWxsIGNvbnZlciB0byBDaHJvbWUg
ZGF0YSB0eXBlcyBmaXJzdAorLy8gYW5kIHRoZW4gY2FsbCB0aGUgc3VwcGxpZWQgV2ViV29ya2Vy
Q2xpZW50LgorY2xhc3MgV2ViV29ya2VySW1wbCA6IHB1YmxpYyBXZWJXb3JrZXJCYXNlLCBwdWJs
aWMgV2ViV29ya2VyIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBXZWJXb3JrZXJJbXBsKFdlYldv
cmtlckNsaWVudCogY2xpZW50KTsKKworICAgIC8vIFdlYldvcmtlciBtZXRob2RzOgorICAgIHZp
cnR1YWwgdm9pZCBzdGFydFdvcmtlckNvbnRleHQoY29uc3QgV2ViVVJMJiwgY29uc3QgV2ViU3Ry
aW5nJiwgY29uc3QgV2ViU3RyaW5nJik7CisgICAgdmlydHVhbCB2b2lkIHRlcm1pbmF0ZVdvcmtl
ckNvbnRleHQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9zdE1lc3NhZ2VUb1dvcmtlckNvbnRleHQo
Y29uc3QgV2ViU3RyaW5nJiwgY29uc3QgV2ViTWVzc2FnZVBvcnRDaGFubmVsQXJyYXkmKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgd29ya2VyT2JqZWN0RGVzdHJveWVkKCk7CisgICAgdmlydHVhbCB2b2lk
IGNsaWVudERlc3Ryb3llZCgpOworCisgICAgLy8gV2ViV29ya2VyQmFzZSBtZXRob2RzOgorICAg
IHZpcnR1YWwgV2ViV29ya2VyQ2xpZW50KiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQor
ICAgIHZpcnR1YWwgV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQoKTsKKworcHJp
dmF0ZToKKyAgICB2aXJ0dWFsIH5XZWJXb3JrZXJJbXBsKCk7CisKKyAgICAvLyBUYXNrcyB0aGF0
IGFyZSBydW4gb24gdGhlIHdvcmtlciB0aHJlYWQuCisgICAgc3RhdGljIHZvaWQgcG9zdE1lc3Nh
Z2VUb1dvcmtlckNvbnRleHRUYXNrKAorICAgICAgICBXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LAorICAgICAgICBXZWJXb3JrZXJJbXBsKiB0aGlzUHRyLAorICAgICAg
ICBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIG1lc3NhZ2UsCisgICAgICAgIFBhc3NPd25QdHI8V2Vi
Q29yZTo6TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IGNoYW5uZWxzKTsKKworICAgIFdlYldvcmtl
ckNsaWVudCogbV9jbGllbnQ7CisKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLy8gRU5BQkxFKFdPUktFUlMpCisKKyNlbmRpZg==
</data>
<flag name="review"
          id="24429"
          type_id="1"
          status="-"
          setter="dglazkov"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42832</attachid>
            <date>2009-11-09 18:56:25 -0800</date>
            <delta_ts>2009-11-10 10:12:21 -0800</delta_ts>
            <desc>Up-streaming Chromium API src files: AppCach...BackForwardListClientImpl</desc>
            <filename>bug-31276-20091109185623.patch</filename>
            <type>text/plain</type>
            <size>50417</size>
            <attacher name="Yaar Schnitman">yaar</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IDQ3YzMzNTEuLmIwMWVlNzEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMiw2ICsy
LDg2IEBACiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAKKyAgICAgICAg
VXAtc3RyZWFtaW5nIENocm9taXVtIEFQSSBzcmMgZmlsZXM6IEFwcENhY2guLi5CYWNrRm9yd2Fy
ZExpc3RDbGllbnRJbXBsCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTMxMjc2CisKKyAgICAgICAgKiBzcmMvQXBwbGljYXRpb25DYWNoZUhvc3QuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVIb3N0SW50ZXJuYWw6
OkFwcGxpY2F0aW9uQ2FjaGVIb3N0SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGlj
YXRpb25DYWNoZUhvc3RJbnRlcm5hbDo6bm90aWZ5RXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlSG9zdDo6QXBwbGljYXRpb25DYWNoZUhvc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUhvc3Q6On5BcHBsaWNhdGlvbkNhY2hlSG9z
dCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlSG9zdDo6bWF5YmVMb2FkTWFp
blJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpzZWxl
Y3RDYWNoZVdpdGhvdXRNYW5pZmVzdCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNh
Y2hlSG9zdDo6c2VsZWN0Q2FjaGVXaXRoTWFuaWZlc3QpOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bGljYXRpb25DYWNoZUhvc3Q6Om1heWJlTG9hZEZhbGxiYWNrRm9yTWFpblJlc3BvbnNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVIb3N0OjptYXliZUxvYWRGYWxsYmFja0Zv
ck1haW5FcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlSG9zdDo6bWFp
blJlc291cmNlRGF0YVJlY2VpdmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2Fj
aGVIb3N0OjpmYWlsZWRMb2FkaW5nTWFpblJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGxpY2F0aW9uQ2FjaGVIb3N0OjpmaW5pc2hlZExvYWRpbmdNYWluUmVzb3VyY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUhvc3Q6Om1heWJlTG9hZFJlc291cmNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVIb3N0OjptYXliZUxvYWRGYWxsYmFja0Zv
clJlZGlyZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVIb3N0OjptYXli
ZUxvYWRGYWxsYmFja0ZvclJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9u
Q2FjaGVIb3N0OjptYXliZUxvYWRGYWxsYmFja0ZvckVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGxpY2F0aW9uQ2FjaGVIb3N0OjptYXliZUxvYWRTeW5jaHJvbm91c2x5KToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVIb3N0OjptYXliZUxvYWRGYWxsYmFja1N5bmNocm9u
b3VzbHkpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUhvc3Q6OmNhbkNhY2hl
SW5QYWdlQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUhvc3Q6OnNl
dERPTUFwcGxpY2F0aW9uQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNo
ZUhvc3Q6Om5vdGlmeURPTUFwcGxpY2F0aW9uQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bGljYXRpb25DYWNoZUhvc3Q6OnN0YXR1cyk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlv
bkNhY2hlSG9zdDo6dXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVI
b3N0Ojpzd2FwQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUhvc3Q6
OmlzQXBwbGljYXRpb25DYWNoZUVuYWJsZWQpOgorICAgICAgICAqIHNyYy9Bc3NlcnRNYXRjaGlu
Z0VudW1zLmNwcDogQWRkZWQuCisgICAgICAgICogc3JjL0F1dG9jb21wbGV0ZVBvcHVwTWVudUNs
aWVudC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpBdXRvY29tcGxldGVQb3B1cE1lbnVD
bGllbnQ6OkF1dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OkF1
dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudDo6fkF1dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudCk6
CisgICAgICAgIChXZWJLaXQ6OkF1dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudDo6aW5pdGlhbGl6
ZSk6CisgICAgICAgIChXZWJLaXQ6OkF1dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudDo6dmFsdWVD
aGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6QXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50Ojpp
dGVtVGV4dCk6CisgICAgICAgIChXZWJLaXQ6OkF1dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudDo6
aXRlbVN0eWxlKToKKyAgICAgICAgKFdlYktpdDo6QXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50
OjptZW51U3R5bGUpOgorICAgICAgICAoV2ViS2l0OjpBdXRvY29tcGxldGVQb3B1cE1lbnVDbGll
bnQ6OmNsaWVudFBhZGRpbmdMZWZ0KToKKyAgICAgICAgKFdlYktpdDo6QXV0b2NvbXBsZXRlUG9w
dXBNZW51Q2xpZW50OjpjbGllbnRQYWRkaW5nUmlnaHQpOgorICAgICAgICAoV2ViS2l0OjpBdXRv
Y29tcGxldGVQb3B1cE1lbnVDbGllbnQ6OnBvcHVwRGlkSGlkZSk6CisgICAgICAgIChXZWJLaXQ6
OkF1dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudDo6c2V0VGV4dEZyb21JdGVtKToKKyAgICAgICAg
KFdlYktpdDo6QXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50Ojpmb250U2VsZWN0b3IpOgorICAg
ICAgICAoV2ViS2l0OjpBdXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQ6Omhvc3RXaW5kb3cpOgor
ICAgICAgICAoV2ViS2l0OjpBdXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQ6OmNyZWF0ZVNjcm9s
bGJhcik6CisgICAgICAgIChXZWJLaXQ6OkF1dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudDo6c2V0
U3VnZ2VzdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpBdXRvY29tcGxldGVQb3B1cE1lbnVDbGll
bnQ6OnJlbW92ZUl0ZW1BdEluZGV4KToKKyAgICAgICAgKFdlYktpdDo6QXV0b2NvbXBsZXRlUG9w
dXBNZW51Q2xpZW50Ojp0ZXh0RmllbGRTdHlsZSk6CisgICAgICAgICogc3JjL0F1dG9jb21wbGV0
ZVBvcHVwTWVudUNsaWVudC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6QXV0b2NvbXBsZXRl
UG9wdXBNZW51Q2xpZW50Ojp0ZXh0RmllbGQpOgorICAgICAgICAoV2ViS2l0OjpBdXRvY29tcGxl
dGVQb3B1cE1lbnVDbGllbnQ6Oml0ZW1Ub29sVGlwKToKKyAgICAgICAgKFdlYktpdDo6QXV0b2Nv
bXBsZXRlUG9wdXBNZW51Q2xpZW50OjppdGVtSXNFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6
QXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50OjpjbGllbnRJbnNldExlZnQpOgorICAgICAgICAo
V2ViS2l0OjpBdXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQ6OmNsaWVudEluc2V0UmlnaHQpOgor
ICAgICAgICAoV2ViS2l0OjpBdXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQ6Omxpc3RTaXplKToK
KyAgICAgICAgKFdlYktpdDo6QXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50OjpzZWxlY3RlZElu
ZGV4KToKKyAgICAgICAgKFdlYktpdDo6QXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50OjppdGVt
SXNTZXBhcmF0b3IpOgorICAgICAgICAoV2ViS2l0OjpBdXRvY29tcGxldGVQb3B1cE1lbnVDbGll
bnQ6Oml0ZW1Jc0xhYmVsKToKKyAgICAgICAgKFdlYktpdDo6QXV0b2NvbXBsZXRlUG9wdXBNZW51
Q2xpZW50OjppdGVtSXNTZWxlY3RlZCk6CisgICAgICAgIChXZWJLaXQ6OkF1dG9jb21wbGV0ZVBv
cHVwTWVudUNsaWVudDo6c2hvdWxkUG9wT3Zlcik6CisgICAgICAgIChXZWJLaXQ6OkF1dG9jb21w
bGV0ZVBvcHVwTWVudUNsaWVudDo6dmFsdWVTaG91bGRDaGFuZ2VPbkhvdFRyYWNrKToKKyAgICAg
ICAgKiBzcmMvQmFja0ZvcndhcmRMaXN0Q2xpZW50SW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViS2l0OjpCYWNrRm9yd2FyZExpc3RDbGllbnRJbXBsOjpCYWNrRm9yd2FyZExpc3RDbGllbnRJ
bXBsKToKKyAgICAgICAgKFdlYktpdDo6QmFja0ZvcndhcmRMaXN0Q2xpZW50SW1wbDo6fkJhY2tG
b3J3YXJkTGlzdENsaWVudEltcGwpOgorICAgICAgICAoV2ViS2l0OjpCYWNrRm9yd2FyZExpc3RD
bGllbnRJbXBsOjpzZXRDdXJyZW50SGlzdG9yeUl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpCYWNr
Rm9yd2FyZExpc3RDbGllbnRJbXBsOjpwcmV2aW91c0hpc3RvcnlJdGVtKToKKyAgICAgICAgKFdl
YktpdDo6QmFja0ZvcndhcmRMaXN0Q2xpZW50SW1wbDo6YWRkSXRlbSk6CisgICAgICAgIChXZWJL
aXQ6OkJhY2tGb3J3YXJkTGlzdENsaWVudEltcGw6OmdvVG9JdGVtKToKKyAgICAgICAgKFdlYktp
dDo6QmFja0ZvcndhcmRMaXN0Q2xpZW50SW1wbDo6Y3VycmVudEl0ZW0pOgorICAgICAgICAoV2Vi
S2l0OjpCYWNrRm9yd2FyZExpc3RDbGllbnRJbXBsOjppdGVtQXRJbmRleCk6CisgICAgICAgIChX
ZWJLaXQ6OkJhY2tGb3J3YXJkTGlzdENsaWVudEltcGw6OmJhY2tMaXN0Q291bnQpOgorICAgICAg
ICAoV2ViS2l0OjpCYWNrRm9yd2FyZExpc3RDbGllbnRJbXBsOjpmb3J3YXJkTGlzdENvdW50KToK
KyAgICAgICAgKFdlYktpdDo6QmFja0ZvcndhcmRMaXN0Q2xpZW50SW1wbDo6Y2xvc2UpOgorICAg
ICAgICAqIHNyYy9CYWNrRm9yd2FyZExpc3RDbGllbnRJbXBsLmg6IEFkZGVkLgorCisyMDA5LTEx
LTA5ICBZYWFyIFNjaG5pdG1hbiAgPHlhYXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCiAgICAgICAgIFVwLXN0cmVhbWluZyBDaHJvbWl1bSBB
UEkgc3JjIGZpbGVzOiBXZWJXb3JrZXIgYW5kIGZyaWVuZHMuCiAKICAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMxMjc2CmRpZmYgLS1naXQgYS9XZWJLaXQv
Y2hyb21pdW0vc3JjL0FwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcCBiL1dlYktpdC9jaHJvbWl1bS9z
cmMvQXBwbGljYXRpb25DYWNoZUhvc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmVmOGY4NjAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0Fw
cGxpY2F0aW9uQ2FjaGVIb3N0LmNwcApAQCAtMCwwICsxLDI1NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlSG9zdC5oIgorCisjaWYgRU5BQkxFKE9GRkxJ
TkVfV0VCX0FQUExJQ0FUSU9OUykKKworI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisjaW5j
bHVkZSAiRE9NQXBwbGljYXRpb25DYWNoZS5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVk
ZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJXZWJBcHBsaWNhdGlvbkNhY2hlSG9zdC5oIgorI2lu
Y2x1ZGUgIldlYkFwcGxpY2F0aW9uQ2FjaGVIb3N0Q2xpZW50LmgiCisjaW5jbHVkZSAiV2ViS2l0
LmgiCisjaW5jbHVkZSAiV2ViS2l0Q2xpZW50LmgiCisjaW5jbHVkZSAiV2ViVVJMLmgiCisjaW5j
bHVkZSAiV2ViVVJMRXJyb3IuaCIKKyNpbmNsdWRlICJXZWJVUkxSZXNwb25zZS5oIgorI2luY2x1
ZGUgIldyYXBwZWRSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJXcmFwcGVkUmVzb3VyY2VS
ZXNwb25zZS5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKKy8vIEFwcGxpY2F0aW9uQ2FjaGVIb3N0SW50ZXJuYWwgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgQXBwbGljYXRpb25DYWNoZUhv
c3RJbnRlcm5hbCA6IHB1YmxpYyBXZWJBcHBsaWNhdGlvbkNhY2hlSG9zdENsaWVudCB7CitwdWJs
aWM6CisgICAgQXBwbGljYXRpb25DYWNoZUhvc3RJbnRlcm5hbChBcHBsaWNhdGlvbkNhY2hlSG9z
dCogaG9zdCkKKyAgICAgICAgOiBtX2lubmVySG9zdChob3N0KQorICAgIHsKKyAgICAgICAgbV9v
dXRlckhvc3Quc2V0KFdlYktpdDo6d2ViS2l0Q2xpZW50KCktPmNyZWF0ZUFwcGxpY2F0aW9uQ2Fj
aGVIb3N0KHRoaXMpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RXZlbnRMaXN0
ZW5lcihXZWJBcHBsaWNhdGlvbkNhY2hlSG9zdDo6RXZlbnRJRCBldmVudElEKQorICAgIHsKKyAg
ICAgICAgbV9pbm5lckhvc3QtPm5vdGlmeURPTUFwcGxpY2F0aW9uQ2FjaGUoCisgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxBcHBsaWNhdGlvbkNhY2hlSG9zdDo6RXZlbnRJRD4oZXZlbnRJRCkpOwor
ICAgIH0KKworICAgIEFwcGxpY2F0aW9uQ2FjaGVIb3N0KiBtX2lubmVySG9zdDsKKyAgICBPd25Q
dHI8V2ViQXBwbGljYXRpb25DYWNoZUhvc3Q+IG1fb3V0ZXJIb3N0OworfTsKKworLy8gQXBwbGlj
YXRpb25DYWNoZUhvc3QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorLy8gV2UgcHJvdmlkZSBhIGN1c3RvbSBpbXBsZW1lbnRhdGlvbiBvZiB0
aGlzIGNsYXNzIHRoYXQgY2FsbHMgb3V0IHRvIHRoZQorLy8gZW1iZWRkaW5nIGFwcGxpY2F0aW9u
IGluc3RlYWQgb2YgdXNpbmcgV2ViQ29yZSdzIGJ1aWx0IGluIGFwcGNhY2hlIHN5c3RlbS4KKy8v
IFRoaXMgZmlsZSByZXBsYWNlcyB3ZWJjb3JlL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVIb3N0
LmNwcCBpbiBvdXIgYnVpbGQuCisKK0FwcGxpY2F0aW9uQ2FjaGVIb3N0OjpBcHBsaWNhdGlvbkNh
Y2hlSG9zdChEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIpCisgICAgOiBtX2RvbUFwcGxp
Y2F0aW9uQ2FjaGUoMCkKKyAgICAsIG1fZG9jdW1lbnRMb2FkZXIoZG9jdW1lbnRMb2FkZXIpCit7
CisgICAgQVNTRVJUKG1fZG9jdW1lbnRMb2FkZXIpOworfQorCitBcHBsaWNhdGlvbkNhY2hlSG9z
dDo6fkFwcGxpY2F0aW9uQ2FjaGVIb3N0KCkKK3sKK30KKwordm9pZCBBcHBsaWNhdGlvbkNhY2hl
SG9zdDo6bWF5YmVMb2FkTWFpblJlc291cmNlKFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3Vi
c3RpdHV0ZURhdGEmKQoreworICAgIC8vIFdlIGRlZmVyIGNyZWF0aW5nIHRoZSBvdXRlciBob3N0
IG9iamVjdCB0byBhdm9pZCBzcHVyaW91cyBjcmVhdGlvbi9kZXN0cnVjdGlvbgorICAgIC8vIGFy
b3VuZCBjcmVhdGluZyBlbXB0eSBkb2N1bWVudHMuIEF0IHRoaXMgcG9pbnQsIHdlJ3JlIGluaXRp
YXRpbmcgYSBtYWluIHJlc291cmNlCisgICAgLy8gbG9hZCBmb3IgdGhlIGRvY3VtZW50LCBzbyBp
dHMgZm9yIHJlYWwuCisKKyAgICBpZiAoIWlzQXBwbGljYXRpb25DYWNoZUVuYWJsZWQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9pbnRlcm5hbC5zZXQobmV3IEFwcGxpY2F0aW9uQ2FjaGVI
b3N0SW50ZXJuYWwodGhpcykpOworICAgIGlmIChtX2ludGVybmFsLT5tX291dGVySG9zdCkgewor
ICAgICAgICBXcmFwcGVkUmVzb3VyY2VSZXF1ZXN0IHdyYXBwZWQocmVxdWVzdCk7CisgICAgICAg
IG1faW50ZXJuYWwtPm1fb3V0ZXJIb3N0LT53aWxsU3RhcnRNYWluUmVzb3VyY2VSZXF1ZXN0KHdy
YXBwZWQpOworICAgIH0gZWxzZQorICAgICAgICBtX2ludGVybmFsLmNsZWFyKCk7CisKKyAgICAv
LyBOT1RFOiBUaGUgc2VtYW50aWNzIG9mIHRoaXMgbWV0aG9kLCBhbmQgb3RoZXJzIGluIHRoaXMg
aW50ZXJmYWNlLCBhcmUgc3VidGx5IGRpZmZlcmVudAorICAgIC8vIHRoYW4gdGhlIG1ldGhvZCBu
YW1lcyB3b3VsZCBzdWdnZXN0LiBGb3IgZXhhbXBsZSwgaW4gdGhpcyBtZXRob2QgbmV2ZXIgcmV0
dXJucyBhbiBhcHBjYWNoZWQKKyAgICAvLyByZXNwb25zZSBpbiB0aGUgU3Vic3RpdHV0ZURhdGEg
b3V0IGFyZ3VtZW50LCBpbnN0ZWFkIHdlIHJldHVybiB0aGUgYXBwY2FjaGVkIHJlc3BvbnNlIHRo
cnUKKyAgICAvLyB0aGUgdXN1YWwgcmVzb3VyY2UgbG9hZGluZyBwaXBlbGluZS4KK30KKwordm9p
ZCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6c2VsZWN0Q2FjaGVXaXRob3V0TWFuaWZlc3QoKQorewor
ICAgIGlmIChtX2ludGVybmFsKQorICAgICAgICBtX2ludGVybmFsLT5tX291dGVySG9zdC0+c2Vs
ZWN0Q2FjaGVXaXRob3V0TWFuaWZlc3QoKTsKK30KKwordm9pZCBBcHBsaWNhdGlvbkNhY2hlSG9z
dDo6c2VsZWN0Q2FjaGVXaXRoTWFuaWZlc3QoY29uc3QgS1VSTCYgbWFuaWZlc3RVUkwpCit7Cisg
ICAgaWYgKG1faW50ZXJuYWwpIHsKKyAgICAgICAgaWYgKCFtX2ludGVybmFsLT5tX291dGVySG9z
dC0+c2VsZWN0Q2FjaGVXaXRoTWFuaWZlc3QobWFuaWZlc3RVUkwpKSB7CisgICAgICAgICAgICAv
LyBJdCdzIGEgZm9yZWlnbiBlbnRyeSwgcmVzdGFydCB0aGUgY3VycmVudCBuYXZpZ2F0aW9uIGZy
b20gdGhlIHRvcAorICAgICAgICAgICAgLy8gb2YgdGhlIG5hdmlnYXRpb24gYWxnb3JpdGhtLiBU
aGUgbmF2aWdhdGlvbiB3aWxsIG5vdCByZXN1bHQgaW4gdGhlCisgICAgICAgICAgICAvLyBzYW1l
IHJlc291cmNlIGJlaW5nIGxvYWRlZCwgYmVjYXVzZSAiZm9yZWlnbiIgZW50cmllcyBhcmUgbmV2
ZXIgcGlja2VkCisgICAgICAgICAgICAvLyBkdXJpbmcgbmF2aWdhdGlvbi4KKyAgICAgICAgICAg
IC8vIHNlZSBXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OnNlbGVjdENhY2hlKCkKKyAg
ICAgICAgICAgIGNvbnN0IEtVUkwmIGRvY1VSTCA9IG1fZG9jdW1lbnRMb2FkZXItPmZyYW1lKCkt
PmRvY3VtZW50KCktPnVybCgpOworICAgICAgICAgICAgU3RyaW5nIHJlZmVycmVyID0gbV9kb2N1
bWVudExvYWRlci0+ZnJhbWVMb2FkZXIoKS0+cmVmZXJyZXIoKTsKKyAgICAgICAgICAgIG1fZG9j
dW1lbnRMb2FkZXItPmZyYW1lKCktPnJlZGlyZWN0U2NoZWR1bGVyKCktPnNjaGVkdWxlTG9jYXRp
b25DaGFuZ2UoZG9jVVJMLCByZWZlcnJlcik7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wg
QXBwbGljYXRpb25DYWNoZUhvc3Q6Om1heWJlTG9hZEZhbGxiYWNrRm9yTWFpblJlc3BvbnNlKGNv
bnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQor
eworICAgIGlmIChtX2ludGVybmFsKSB7CisgICAgICAgIFdyYXBwZWRSZXNvdXJjZVJlc3BvbnNl
IHdyYXBwZWQocmVzcG9uc2UpOworICAgICAgICBtX2ludGVybmFsLT5tX291dGVySG9zdC0+ZGlk
UmVjZWl2ZVJlc3BvbnNlRm9yTWFpblJlc291cmNlKHdyYXBwZWQpOworICAgIH0KKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK2Jvb2wgQXBwbGljYXRpb25DYWNoZUhvc3Q6Om1heWJlTG9hZEZhbGxi
YWNrRm9yTWFpbkVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlRXJy
b3ImIGVycm9yKQoreworICAgIC8vIE4vQSB0byB0aGUgY2hyb21pdW0gcG9ydAorICAgIHJldHVy
biBmYWxzZTsKK30KKwordm9pZCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6bWFpblJlc291cmNlRGF0
YVJlY2VpdmVkKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgsIGxvbmcgbG9uZywgYm9vbCkK
K3sKKyAgICBpZiAobV9pbnRlcm5hbCkKKyAgICAgICAgbV9pbnRlcm5hbC0+bV9vdXRlckhvc3Qt
PmRpZFJlY2VpdmVEYXRhRm9yTWFpblJlc291cmNlKGRhdGEsIGxlbmd0aCk7Cit9CisKK3ZvaWQg
QXBwbGljYXRpb25DYWNoZUhvc3Q6OmZhaWxlZExvYWRpbmdNYWluUmVzb3VyY2UoKQoreworICAg
IGlmIChtX2ludGVybmFsKQorICAgICAgICBtX2ludGVybmFsLT5tX291dGVySG9zdC0+ZGlkRmlu
aXNoTG9hZGluZ01haW5SZXNvdXJjZShmYWxzZSk7Cit9CisKK3ZvaWQgQXBwbGljYXRpb25DYWNo
ZUhvc3Q6OmZpbmlzaGVkTG9hZGluZ01haW5SZXNvdXJjZSgpCit7CisgICAgaWYgKG1faW50ZXJu
YWwpCisgICAgICAgIG1faW50ZXJuYWwtPm1fb3V0ZXJIb3N0LT5kaWRGaW5pc2hMb2FkaW5nTWFp
blJlc291cmNlKHRydWUpOworfQorCitib29sIEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjptYXliZUxv
YWRSZXNvdXJjZShSZXNvdXJjZUxvYWRlciosIFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29u
c3QgS1VSTCYpCit7CisgICAgLy8gRklYTUU6IGxvb2sgaW50byB0aGUgcHVycG9zZSBvZiB0aGUg
dW51c2VkIEtVUkwmIG9yaWdpbmFsVVJMIHBhcmFtZXRlcgorICAgIGlmIChtX2ludGVybmFsKSB7
CisgICAgICAgIFdyYXBwZWRSZXNvdXJjZVJlcXVlc3Qgd3JhcHBlZChyZXF1ZXN0KTsKKyAgICAg
ICAgbV9pbnRlcm5hbC0+bV9vdXRlckhvc3QtPndpbGxTdGFydFN1YlJlc291cmNlUmVxdWVzdCh3
cmFwcGVkKTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEFwcGxpY2F0aW9u
Q2FjaGVIb3N0OjptYXliZUxvYWRGYWxsYmFja0ZvclJlZGlyZWN0KFJlc291cmNlTG9hZGVyKiwg
UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpCit7CisgICAgLy8gTi9B
IHRvIHRoZSBjaHJvbWl1bSBwb3J0CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEFwcGxp
Y2F0aW9uQ2FjaGVIb3N0OjptYXliZUxvYWRGYWxsYmFja0ZvclJlc3BvbnNlKFJlc291cmNlTG9h
ZGVyKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpCit7CisgICAgLy8gTi9BIHRvIHRoZSBjaHJv
bWl1bSBwb3J0CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEFwcGxpY2F0aW9uQ2FjaGVI
b3N0OjptYXliZUxvYWRGYWxsYmFja0ZvckVycm9yKFJlc291cmNlTG9hZGVyKiwgY29uc3QgUmVz
b3VyY2VFcnJvciYpCit7CisgICAgLy8gTi9BIHRvIHRoZSBjaHJvbWl1bSBwb3J0CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjptYXliZUxvYWRTeW5j
aHJvbm91c2x5KFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VFcnJvciYsIFJlc291
cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mKQoreworICAgIGlmIChtX2ludGVybmFsKSB7Cisg
ICAgICAgIFdyYXBwZWRSZXNvdXJjZVJlcXVlc3Qgd3JhcHBlZChyZXF1ZXN0KTsKKyAgICAgICAg
bV9pbnRlcm5hbC0+bV9vdXRlckhvc3QtPndpbGxTdGFydFN1YlJlc291cmNlUmVxdWVzdCh3cmFw
cGVkKTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEFwcGxpY2F0aW9uQ2Fj
aGVIb3N0OjptYXliZUxvYWRGYWxsYmFja1N5bmNocm9ub3VzbHkoY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiwgUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mKQor
eworICAgIC8vIE4vQSB0byB0aGUgY2hyb21pdW0gcG9ydAorfQorCitib29sIEFwcGxpY2F0aW9u
Q2FjaGVIb3N0OjpjYW5DYWNoZUluUGFnZUNhY2hlKCkgY29uc3QKK3sKKyAgICAvLyBOL0EgdG8g
dGhlIGNocm9taXVtIHBvcnQgd2hpY2ggZG9lc24ndCB1c2UgdGhlIHBhZ2UgY2FjaGUuCisgICAg
cmV0dXJuIGZhbHNlOworfQorCit2b2lkIEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpzZXRET01BcHBs
aWNhdGlvbkNhY2hlKERPTUFwcGxpY2F0aW9uQ2FjaGUqIGRvbUFwcGxpY2F0aW9uQ2FjaGUpCit7
CisgICAgQVNTRVJUKCFtX2RvbUFwcGxpY2F0aW9uQ2FjaGUgfHwgIWRvbUFwcGxpY2F0aW9uQ2Fj
aGUpOworICAgIG1fZG9tQXBwbGljYXRpb25DYWNoZSA9IGRvbUFwcGxpY2F0aW9uQ2FjaGU7Cit9
CisKK3ZvaWQgQXBwbGljYXRpb25DYWNoZUhvc3Q6Om5vdGlmeURPTUFwcGxpY2F0aW9uQ2FjaGUo
RXZlbnRJRCBpZCkKK3sKKyAgICBpZiAobV9kb21BcHBsaWNhdGlvbkNhY2hlKSB7CisgICAgICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgICAgICBtX2RvbUFwcGxpY2F0aW9uQ2FjaGUtPmRp
c3BhdGNoRXZlbnQoCisgICAgICAgICAgICBFdmVudDo6Y3JlYXRlKERPTUFwcGxpY2F0aW9uQ2Fj
aGU6OnRvRXZlbnRUeXBlKGlkKSwgZmFsc2UsIGZhbHNlKSwKKyAgICAgICAgICAgIGVjKTsKKyAg
ICAgICAgQVNTRVJUKCFlYyk7CisgICAgfQorfQorCitBcHBsaWNhdGlvbkNhY2hlSG9zdDo6U3Rh
dHVzIEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpzdGF0dXMoKSBjb25zdAoreworICAgIHJldHVybiBt
X2ludGVybmFsID8gc3RhdGljX2Nhc3Q8U3RhdHVzPihtX2ludGVybmFsLT5tX291dGVySG9zdC0+
c3RhdHVzKCkpIDogVU5DQUNIRUQ7Cit9CisKK2Jvb2wgQXBwbGljYXRpb25DYWNoZUhvc3Q6OnVw
ZGF0ZSgpCit7CisgICAgcmV0dXJuIG1faW50ZXJuYWwgPyBtX2ludGVybmFsLT5tX291dGVySG9z
dC0+c3RhcnRVcGRhdGUoKSA6IGZhbHNlOworfQorCitib29sIEFwcGxpY2F0aW9uQ2FjaGVIb3N0
Ojpzd2FwQ2FjaGUoKQoreworICAgIHJldHVybiBtX2ludGVybmFsID8gbV9pbnRlcm5hbC0+bV9v
dXRlckhvc3QtPnN3YXBDYWNoZSgpIDogZmFsc2U7Cit9CisKK2Jvb2wgQXBwbGljYXRpb25DYWNo
ZUhvc3Q6OmlzQXBwbGljYXRpb25DYWNoZUVuYWJsZWQoKQoreworICAgIEFTU0VSVChtX2RvY3Vt
ZW50TG9hZGVyLT5mcmFtZSgpKTsKKyAgICByZXR1cm4gbV9kb2N1bWVudExvYWRlci0+ZnJhbWUo
KS0+c2V0dGluZ3MoKQorICAgICAgICAgICAmJiBtX2RvY3VtZW50TG9hZGVyLT5mcmFtZSgpLT5z
ZXR0aW5ncygpLT5vZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQoKTsKK30KKworfSAg
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmICAvLyBFTkFCTEUoT0ZGTElORV9XRUJfQVBQ
TElDQVRJT05TKQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NlcnRNYXRjaGlu
Z0VudW1zLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA4YmQ1NgotLS0gL2Rldi9udWxs
CisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5jcHAKQEAgLTAs
MCArMSwyNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBVc2UgdGhpcyBmaWxlIHRvIGFzc2VydCB0aGF0IHZhcmlvdXMgV2ViS2l0
IEFQSSBlbnVtIHZhbHVlcyBjb250aW51ZQorLy8gbWF0Y2hpbmcgV2ViQ29yZSBkZWZpbmVkIGVu
dW0gdmFsdWVzLgorCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJBY2Nlc3NpYmls
aXR5T2JqZWN0LmgiCisjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZUhvc3QuaCIKKyNpbmNsdWRl
ICJFZGl0b3JJbnNlcnRBY3Rpb24uaCIKKyNpbmNsdWRlICJNZWRpYVBsYXllci5oIgorI2luY2x1
ZGUgIk5vdGlmaWNhdGlvblByZXNlbnRlci5oIgorI2luY2x1ZGUgIlBhc3RlYm9hcmRQcml2YXRl
LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1DdXJzb3IuaCIKKyNpbmNsdWRlICJUZXh0QWZmaW5pdHku
aCIKKyNpbmNsdWRlICJXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0LmgiCisjaW5jbHVkZSAiV2ViQXBw
bGljYXRpb25DYWNoZUhvc3QuaCIKKyNpbmNsdWRlICJXZWJDbGlwYm9hcmQuaCIKKyNpbmNsdWRl
ICJXZWJDdXJzb3JJbmZvLmgiCisjaW5jbHVkZSAiV2ViRWRpdGluZ0FjdGlvbi5oIgorI2luY2x1
ZGUgIldlYk1lZGlhUGxheWVyLmgiCisjaW5jbHVkZSAiV2ViTm90aWZpY2F0aW9uUHJlc2VudGVy
LmgiCisjaW5jbHVkZSAiV2ViVGV4dEFmZmluaXR5LmgiCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KKworI2RlZmluZSBDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKHdlYmtpdF9uYW1l
LCB3ZWJjb3JlX25hbWUpIFwKKyAgICBDT01QSUxFX0FTU0VSVChpbnQoV2ViS2l0Ojp3ZWJraXRf
bmFtZSkgPT0gaW50KFdlYkNvcmU6OndlYmNvcmVfbmFtZSksIG1pc21hdGNoaW5nX2VudW1zKQor
CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkFjY2Vzc2liaWxpdHlSb2xlVW5rbm93
biwgVW5rbm93blJvbGUpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJBY2Nlc3Np
YmlsaXR5Um9sZUJ1dHRvbiwgQnV0dG9uUm9sZSk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19F
TlVNKFdlYkFjY2Vzc2liaWxpdHlSb2xlUmFkaW9CdXR0b24sIFJhZGlvQnV0dG9uUm9sZSk7CitD
T01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkFjY2Vzc2liaWxpdHlSb2xlQ2hlY2tCb3gs
IENoZWNrQm94Um9sZSk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkFjY2Vzc2li
aWxpdHlSb2xlU2xpZGVyLCBTbGlkZXJSb2xlKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VO
VU0oV2ViQWNjZXNzaWJpbGl0eVJvbGVUYWJHcm91cCwgVGFiR3JvdXBSb2xlKTsKK0NPTVBJTEVf
QVNTRVJUX01BVENISU5HX0VOVU0oV2ViQWNjZXNzaWJpbGl0eVJvbGVUZXh0RmllbGQsIFRleHRG
aWVsZFJvbGUpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJBY2Nlc3NpYmlsaXR5
Um9sZVN0YXRpY1RleHQsIFN0YXRpY1RleHRSb2xlKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5H
X0VOVU0oV2ViQWNjZXNzaWJpbGl0eVJvbGVUZXh0QXJlYSwgVGV4dEFyZWFSb2xlKTsKK0NPTVBJ
TEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViQWNjZXNzaWJpbGl0eVJvbGVTY3JvbGxBcmVhLCBT
Y3JvbGxBcmVhUm9sZSk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkFjY2Vzc2li
aWxpdHlSb2xlUG9wVXBCdXR0b24sIFBvcFVwQnV0dG9uUm9sZSk7CitDT01QSUxFX0FTU0VSVF9N
QVRDSElOR19FTlVNKFdlYkFjY2Vzc2liaWxpdHlSb2xlTWVudUJ1dHRvbiwgTWVudUJ1dHRvblJv
bGUpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJBY2Nlc3NpYmlsaXR5Um9sZVRh
YmxlLCBUYWJsZVJvbGUpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJBY2Nlc3Np
YmlsaXR5Um9sZUFwcGxpY2F0aW9uLCBBcHBsaWNhdGlvblJvbGUpOworQ09NUElMRV9BU1NFUlRf
TUFUQ0hJTkdfRU5VTShXZWJBY2Nlc3NpYmlsaXR5Um9sZUdyb3VwLCBHcm91cFJvbGUpOworQ09N
UElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJBY2Nlc3NpYmlsaXR5Um9sZVJhZGlvR3JvdXAs
IFJhZGlvR3JvdXBSb2xlKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViQWNjZXNz
aWJpbGl0eVJvbGVMaXN0LCBMaXN0Um9sZSk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVN
KFdlYkFjY2Vzc2liaWxpdHlSb2xlU2Nyb2xsQmFyLCBTY3JvbGxCYXJSb2xlKTsKK0NPTVBJTEVf
QVNTRVJUX01BVENISU5HX0VOVU0oV2ViQWNjZXNzaWJpbGl0eVJvbGVWYWx1ZUluZGljYXRvciwg
VmFsdWVJbmRpY2F0b3JSb2xlKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViQWNj
ZXNzaWJpbGl0eVJvbGVJbWFnZSwgSW1hZ2VSb2xlKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5H
X0VOVU0oV2ViQWNjZXNzaWJpbGl0eVJvbGVNZW51QmFyLCBNZW51QmFyUm9sZSk7CitDT01QSUxF
X0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkFjY2Vzc2liaWxpdHlSb2xlTWVudSwgTWVudVJvbGUp
OworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJBY2Nlc3NpYmlsaXR5Um9sZU1lbnVJ
dGVtLCBNZW51SXRlbVJvbGUpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJBY2Nl
c3NpYmlsaXR5Um9sZUNvbHVtbiwgQ29sdW1uUm9sZSk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElO
R19FTlVNKFdlYkFjY2Vzc2liaWxpdHlSb2xlUm93LCBSb3dSb2xlKTsKK0NPTVBJTEVfQVNTRVJU
X01BVENISU5HX0VOVU0oV2ViQWNjZXNzaWJpbGl0eVJvbGVUb29sYmFyLCBUb29sYmFyUm9sZSk7
CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkFjY2Vzc2liaWxpdHlSb2xlQnVzeUlu
ZGljYXRvciwgQnVzeUluZGljYXRvclJvbGUpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5V
TShXZWJBY2Nlc3NpYmlsaXR5Um9sZVByb2dyZXNzSW5kaWNhdG9yLCBQcm9ncmVzc0luZGljYXRv
clJvbGUpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJBY2Nlc3NpYmlsaXR5Um9s
ZVdpbmRvdywgV2luZG93Um9sZSk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkFj
Y2Vzc2liaWxpdHlSb2xlRHJhd2VyLCBEcmF3ZXJSb2xlKTsKK0NPTVBJTEVfQVNTRVJUX01BVENI
SU5HX0VOVU0oV2ViQWNjZXNzaWJpbGl0eVJvbGVTeXN0ZW1XaWRlLCBTeXN0ZW1XaWRlUm9sZSk7
CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkFjY2Vzc2liaWxpdHlSb2xlT3V0bGlu
ZSwgT3V0bGluZVJvbGUpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJBY2Nlc3Np
YmlsaXR5Um9sZUluY3JlbWVudG9yLCBJbmNyZW1lbnRvclJvbGUpOworQ09NUElMRV9BU1NFUlRf
TUFUQ0hJTkdfRU5VTShXZWJBY2Nlc3NpYmlsaXR5Um9sZUJyb3dzZXIsIEJyb3dzZXJSb2xlKTsK
K0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViQWNjZXNzaWJpbGl0eVJvbGVDb21ib0Jv
eCwgQ29tYm9Cb3hSb2xlKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViQWNjZXNz
aWJpbGl0eVJvbGVTcGxpdEdyb3VwLCBTcGxpdEdyb3VwUm9sZSk7CitDT01QSUxFX0FTU0VSVF9N
QVRDSElOR19FTlVNKFdlYkFjY2Vzc2liaWxpdHlSb2xlU3BsaXR0ZXIsIFNwbGl0dGVyUm9sZSk7
CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkFjY2Vzc2liaWxpdHlSb2xlQ29sb3JX
ZWxsLCBDb2xvcldlbGxSb2xlKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViQWNj
ZXNzaWJpbGl0eVJvbGVHcm93QXJlYSwgR3Jvd0FyZWFSb2xlKTsKK0NPTVBJTEVfQVNTRVJUX01B
VENISU5HX0VOVU0oV2ViQWNjZXNzaWJpbGl0eVJvbGVTaGVldCwgU2hlZXRSb2xlKTsKK0NPTVBJ
TEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViQWNjZXNzaWJpbGl0eVJvbGVIZWxwVGFnLCBIZWxw
VGFnUm9sZSk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkFjY2Vzc2liaWxpdHlS
b2xlTWF0dGUsIE1hdHRlUm9sZSk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkFj
Y2Vzc2liaWxpdHlSb2xlUnVsZXIsIFJ1bGVyUm9sZSk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElO
R19FTlVNKFdlYkFjY2Vzc2liaWxpdHlSb2xlUnVsZXJNYXJrZXIsIFJ1bGVyTWFya2VyUm9sZSk7
CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkFjY2Vzc2liaWxpdHlSb2xlTGluaywg
TGlua1JvbGUpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJBY2Nlc3NpYmlsaXR5
Um9sZURpc2Nsb3N1cmVUcmlhbmdsZSwgRGlzY2xvc3VyZVRyaWFuZ2xlUm9sZSk7CitDT01QSUxF
X0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkFjY2Vzc2liaWxpdHlSb2xlR3JpZCwgR3JpZFJvbGUp
OworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJBY2Nlc3NpYmlsaXR5Um9sZUNlbGws
IENlbGxSb2xlKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViQWNjZXNzaWJpbGl0
eVJvbGVDb2x1bW5IZWFkZXIsIENvbHVtbkhlYWRlclJvbGUpOworQ09NUElMRV9BU1NFUlRfTUFU
Q0hJTkdfRU5VTShXZWJBY2Nlc3NpYmlsaXR5Um9sZVJvd0hlYWRlciwgUm93SGVhZGVyUm9sZSk7
CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkFjY2Vzc2liaWxpdHlSb2xlV2ViQ29y
ZUxpbmssIFdlYkNvcmVMaW5rUm9sZSk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdl
YkFjY2Vzc2liaWxpdHlSb2xlSW1hZ2VNYXBMaW5rLCBJbWFnZU1hcExpbmtSb2xlKTsKK0NPTVBJ
TEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViQWNjZXNzaWJpbGl0eVJvbGVJbWFnZU1hcCwgSW1h
Z2VNYXBSb2xlKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViQWNjZXNzaWJpbGl0
eVJvbGVMaXN0TWFya2VyLCBMaXN0TWFya2VyUm9sZSk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElO
R19FTlVNKFdlYkFjY2Vzc2liaWxpdHlSb2xlV2ViQXJlYSwgV2ViQXJlYVJvbGUpOworQ09NUElM
RV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJBY2Nlc3NpYmlsaXR5Um9sZUhlYWRpbmcsIEhlYWRp
bmdSb2xlKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViQWNjZXNzaWJpbGl0eVJv
bGVMaXN0Qm94LCBMaXN0Qm94Um9sZSk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdl
YkFjY2Vzc2liaWxpdHlSb2xlTGlzdEJveE9wdGlvbiwgTGlzdEJveE9wdGlvblJvbGUpOworQ09N
UElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJBY2Nlc3NpYmlsaXR5Um9sZVRhYmxlSGVhZGVy
Q29udGFpbmVyLCBUYWJsZUhlYWRlckNvbnRhaW5lclJvbGUpOworQ09NUElMRV9BU1NFUlRfTUFU
Q0hJTkdfRU5VTShXZWJBY2Nlc3NpYmlsaXR5Um9sZURlZmluaXRpb25MaXN0VGVybSwgRGVmaW5p
dGlvbkxpc3RUZXJtUm9sZSk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkFjY2Vz
c2liaWxpdHlSb2xlRGVmaW5pdGlvbkxpc3REZWZpbml0aW9uLCBEZWZpbml0aW9uTGlzdERlZmlu
aXRpb25Sb2xlKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViQWNjZXNzaWJpbGl0
eVJvbGVBbm5vdGF0aW9uLCBBbm5vdGF0aW9uUm9sZSk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElO
R19FTlVNKFdlYkFjY2Vzc2liaWxpdHlSb2xlU2xpZGVyVGh1bWIsIFNsaWRlclRodW1iUm9sZSk7
CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkFjY2Vzc2liaWxpdHlSb2xlSWdub3Jl
ZCwgSWdub3JlZFJvbGUpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJBY2Nlc3Np
YmlsaXR5Um9sZVRhYiwgVGFiUm9sZSk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdl
YkFjY2Vzc2liaWxpdHlSb2xlVGFiTGlzdCwgVGFiTGlzdFJvbGUpOworQ09NUElMRV9BU1NFUlRf
TUFUQ0hJTkdfRU5VTShXZWJBY2Nlc3NpYmlsaXR5Um9sZVRhYlBhbmVsLCBUYWJQYW5lbFJvbGUp
OworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJBY2Nlc3NpYmlsaXR5Um9sZUxhbmRt
YXJrQXBwbGljYXRpb24sIExhbmRtYXJrQXBwbGljYXRpb25Sb2xlKTsKK0NPTVBJTEVfQVNTRVJU
X01BVENISU5HX0VOVU0oV2ViQWNjZXNzaWJpbGl0eVJvbGVMYW5kbWFya0Jhbm5lciwgTGFuZG1h
cmtCYW5uZXJSb2xlKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViQWNjZXNzaWJp
bGl0eVJvbGVMYW5kbWFya0NvbXBsZW1lbnRhcnksIExhbmRtYXJrQ29tcGxlbWVudGFyeVJvbGUp
OworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJBY2Nlc3NpYmlsaXR5Um9sZUxhbmRt
YXJrQ29udGVudEluZm8sIExhbmRtYXJrQ29udGVudEluZm9Sb2xlKTsKK0NPTVBJTEVfQVNTRVJU
X01BVENISU5HX0VOVU0oV2ViQWNjZXNzaWJpbGl0eVJvbGVMYW5kbWFya01haW4sIExhbmRtYXJr
TWFpblJvbGUpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJBY2Nlc3NpYmlsaXR5
Um9sZUxhbmRtYXJrTmF2aWdhdGlvbiwgTGFuZG1hcmtOYXZpZ2F0aW9uUm9sZSk7CitDT01QSUxF
X0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkFjY2Vzc2liaWxpdHlSb2xlTGFuZG1hcmtTZWFyY2gs
IExhbmRtYXJrU2VhcmNoUm9sZSk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkFj
Y2Vzc2liaWxpdHlSb2xlQXBwbGljYXRpb25Mb2csIEFwcGxpY2F0aW9uTG9nUm9sZSk7CitDT01Q
SUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkFjY2Vzc2liaWxpdHlSb2xlQXBwbGljYXRpb25N
YXJxdWVlLCBBcHBsaWNhdGlvbk1hcnF1ZWVSb2xlKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5H
X0VOVU0oV2ViQWNjZXNzaWJpbGl0eVJvbGVBcHBsaWNhdGlvblN0YXR1cywgQXBwbGljYXRpb25T
dGF0dXNSb2xlKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViQWNjZXNzaWJpbGl0
eVJvbGVBcHBsaWNhdGlvblRpbWVyLCBBcHBsaWNhdGlvblRpbWVyUm9sZSk7CitDT01QSUxFX0FT
U0VSVF9NQVRDSElOR19FTlVNKFdlYkFjY2Vzc2liaWxpdHlSb2xlRG9jdW1lbnQsIERvY3VtZW50
Um9sZSk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkFjY2Vzc2liaWxpdHlSb2xl
RG9jdW1lbnRBcnRpY2xlLCBEb2N1bWVudEFydGljbGVSb2xlKTsKK0NPTVBJTEVfQVNTRVJUX01B
VENISU5HX0VOVU0oV2ViQWNjZXNzaWJpbGl0eVJvbGVEb2N1bWVudE5vdGUsIERvY3VtZW50Tm90
ZVJvbGUpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJBY2Nlc3NpYmlsaXR5Um9s
ZURvY3VtZW50UmVnaW9uLCBEb2N1bWVudFJlZ2lvblJvbGUpOworQ09NUElMRV9BU1NFUlRfTUFU
Q0hJTkdfRU5VTShXZWJBY2Nlc3NpYmlsaXR5Um9sZVVzZXJJbnRlcmZhY2VUb29sdGlwLCBVc2Vy
SW50ZXJmYWNlVG9vbHRpcFJvbGUpOworCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FU
SU9OUykKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViQXBwbGljYXRpb25DYWNoZUhv
c3Q6OlVuY2FjaGVkLCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6VU5DQUNIRUQpOworQ09NUElMRV9B
U1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJBcHBsaWNhdGlvbkNhY2hlSG9zdDo6SWRsZSwgQXBwbGlj
YXRpb25DYWNoZUhvc3Q6OklETEUpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJB
cHBsaWNhdGlvbkNhY2hlSG9zdDo6Q2hlY2tpbmcsIEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpDSEVD
S0lORyk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkFwcGxpY2F0aW9uQ2FjaGVI
b3N0OjpEb3dubG9hZGluZywgQXBwbGljYXRpb25DYWNoZUhvc3Q6OkRPV05MT0FESU5HKTsKK0NP
TVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViQXBwbGljYXRpb25DYWNoZUhvc3Q6OlVwZGF0
ZVJlYWR5LCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6VVBEQVRFUkVBRFkpOworQ09NUElMRV9BU1NF
UlRfTUFUQ0hJTkdfRU5VTShXZWJBcHBsaWNhdGlvbkNhY2hlSG9zdDo6T2Jzb2xldGUsIEFwcGxp
Y2F0aW9uQ2FjaGVIb3N0OjpPQlNPTEVURSk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVN
KFdlYkFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpDaGVja2luZ0V2ZW50LCBBcHBsaWNhdGlvbkNhY2hl
SG9zdDo6Q0hFQ0tJTkdfRVZFTlQpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJB
cHBsaWNhdGlvbkNhY2hlSG9zdDo6RXJyb3JFdmVudCwgQXBwbGljYXRpb25DYWNoZUhvc3Q6OkVS
Uk9SX0VWRU5UKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViQXBwbGljYXRpb25D
YWNoZUhvc3Q6Ok5vVXBkYXRlRXZlbnQsIEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpOT1VQREFURV9F
VkVOVCk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkFwcGxpY2F0aW9uQ2FjaGVI
b3N0OjpEb3dubG9hZGluZ0V2ZW50LCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6RE9XTkxPQURJTkdf
RVZFTlQpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJBcHBsaWNhdGlvbkNhY2hl
SG9zdDo6UHJvZ3Jlc3NFdmVudCwgQXBwbGljYXRpb25DYWNoZUhvc3Q6OlBST0dSRVNTX0VWRU5U
KTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViQXBwbGljYXRpb25DYWNoZUhvc3Q6
OlVwZGF0ZVJlYWR5RXZlbnQsIEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpVUERBVEVSRUFEWV9FVkVO
VCk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkFwcGxpY2F0aW9uQ2FjaGVIb3N0
OjpDYWNoZWRFdmVudCwgQXBwbGljYXRpb25DYWNoZUhvc3Q6OkNBQ0hFRF9FVkVOVCk7CitDT01Q
SUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpPYnNvbGV0
ZUV2ZW50LCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6T0JTT0xFVEVfRVZFTlQpOworI2VuZGlmCisK
K0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViQ2xpcGJvYXJkOjpGb3JtYXRIVE1MLCBQ
YXN0ZWJvYXJkUHJpdmF0ZTo6SFRNTEZvcm1hdCk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19F
TlVNKFdlYkNsaXBib2FyZDo6Rm9ybWF0Qm9va21hcmssIFBhc3RlYm9hcmRQcml2YXRlOjpCb29r
bWFya0Zvcm1hdCk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkNsaXBib2FyZDo6
Rm9ybWF0U21hcnRQYXN0ZSwgUGFzdGVib2FyZFByaXZhdGU6OldlYlNtYXJ0UGFzdGVGb3JtYXQp
OworCitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkNsaXBib2FyZDo6QnVmZmVyU3Rh
bmRhcmQsIFBhc3RlYm9hcmRQcml2YXRlOjpTdGFuZGFyZEJ1ZmZlcik7CitDT01QSUxFX0FTU0VS
VF9NQVRDSElOR19FTlVNKFdlYkNsaXBib2FyZDo6QnVmZmVyU2VsZWN0aW9uLCBQYXN0ZWJvYXJk
UHJpdmF0ZTo6U2VsZWN0aW9uQnVmZmVyKTsKKworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5V
TShXZWJDdXJzb3JJbmZvOjpUeXBlUG9pbnRlciwgUGxhdGZvcm1DdXJzb3I6OlR5cGVQb2ludGVy
KTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViQ3Vyc29ySW5mbzo6VHlwZUNyb3Nz
LCBQbGF0Zm9ybUN1cnNvcjo6VHlwZUNyb3NzKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VO
VU0oV2ViQ3Vyc29ySW5mbzo6VHlwZUhhbmQsIFBsYXRmb3JtQ3Vyc29yOjpUeXBlSGFuZCk7CitD
T01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkN1cnNvckluZm86OlR5cGVJQmVhbSwgUGxh
dGZvcm1DdXJzb3I6OlR5cGVJQmVhbSk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdl
YkN1cnNvckluZm86OlR5cGVXYWl0LCBQbGF0Zm9ybUN1cnNvcjo6VHlwZVdhaXQpOworQ09NUElM
RV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJDdXJzb3JJbmZvOjpUeXBlSGVscCwgUGxhdGZvcm1D
dXJzb3I6OlR5cGVIZWxwKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViQ3Vyc29y
SW5mbzo6VHlwZUVhc3RSZXNpemUsIFBsYXRmb3JtQ3Vyc29yOjpUeXBlRWFzdFJlc2l6ZSk7CitD
T01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkN1cnNvckluZm86OlR5cGVOb3J0aFJlc2l6
ZSwgUGxhdGZvcm1DdXJzb3I6OlR5cGVOb3J0aFJlc2l6ZSk7CitDT01QSUxFX0FTU0VSVF9NQVRD
SElOR19FTlVNKFdlYkN1cnNvckluZm86OlR5cGVOb3J0aEVhc3RSZXNpemUsIFBsYXRmb3JtQ3Vy
c29yOjpUeXBlTm9ydGhFYXN0UmVzaXplKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0o
V2ViQ3Vyc29ySW5mbzo6VHlwZU5vcnRoV2VzdFJlc2l6ZSwgUGxhdGZvcm1DdXJzb3I6OlR5cGVO
b3J0aFdlc3RSZXNpemUpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJDdXJzb3JJ
bmZvOjpUeXBlU291dGhSZXNpemUsIFBsYXRmb3JtQ3Vyc29yOjpUeXBlU291dGhSZXNpemUpOwor
Q09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJDdXJzb3JJbmZvOjpUeXBlU291dGhFYXN0
UmVzaXplLCBQbGF0Zm9ybUN1cnNvcjo6VHlwZVNvdXRoRWFzdFJlc2l6ZSk7CitDT01QSUxFX0FT
U0VSVF9NQVRDSElOR19FTlVNKFdlYkN1cnNvckluZm86OlR5cGVTb3V0aFdlc3RSZXNpemUsIFBs
YXRmb3JtQ3Vyc29yOjpUeXBlU291dGhXZXN0UmVzaXplKTsKK0NPTVBJTEVfQVNTRVJUX01BVENI
SU5HX0VOVU0oV2ViQ3Vyc29ySW5mbzo6VHlwZVdlc3RSZXNpemUsIFBsYXRmb3JtQ3Vyc29yOjpU
eXBlV2VzdFJlc2l6ZSk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkN1cnNvcklu
Zm86OlR5cGVOb3J0aFNvdXRoUmVzaXplLCBQbGF0Zm9ybUN1cnNvcjo6VHlwZU5vcnRoU291dGhS
ZXNpemUpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJDdXJzb3JJbmZvOjpUeXBl
RWFzdFdlc3RSZXNpemUsIFBsYXRmb3JtQ3Vyc29yOjpUeXBlRWFzdFdlc3RSZXNpemUpOworQ09N
UElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJDdXJzb3JJbmZvOjpUeXBlTm9ydGhFYXN0U291
dGhXZXN0UmVzaXplLCBQbGF0Zm9ybUN1cnNvcjo6VHlwZU5vcnRoRWFzdFNvdXRoV2VzdFJlc2l6
ZSk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkN1cnNvckluZm86OlR5cGVOb3J0
aFdlc3RTb3V0aEVhc3RSZXNpemUsIFBsYXRmb3JtQ3Vyc29yOjpUeXBlTm9ydGhXZXN0U291dGhF
YXN0UmVzaXplKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViQ3Vyc29ySW5mbzo6
VHlwZUNvbHVtblJlc2l6ZSwgUGxhdGZvcm1DdXJzb3I6OlR5cGVDb2x1bW5SZXNpemUpOworQ09N
UElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJDdXJzb3JJbmZvOjpUeXBlUm93UmVzaXplLCBQ
bGF0Zm9ybUN1cnNvcjo6VHlwZVJvd1Jlc2l6ZSk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19F
TlVNKFdlYkN1cnNvckluZm86OlR5cGVNaWRkbGVQYW5uaW5nLCBQbGF0Zm9ybUN1cnNvcjo6VHlw
ZU1pZGRsZVBhbm5pbmcpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJDdXJzb3JJ
bmZvOjpUeXBlRWFzdFBhbm5pbmcsIFBsYXRmb3JtQ3Vyc29yOjpUeXBlRWFzdFBhbm5pbmcpOwor
Q09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJDdXJzb3JJbmZvOjpUeXBlTm9ydGhQYW5u
aW5nLCBQbGF0Zm9ybUN1cnNvcjo6VHlwZU5vcnRoUGFubmluZyk7CitDT01QSUxFX0FTU0VSVF9N
QVRDSElOR19FTlVNKFdlYkN1cnNvckluZm86OlR5cGVOb3J0aEVhc3RQYW5uaW5nLCBQbGF0Zm9y
bUN1cnNvcjo6VHlwZU5vcnRoRWFzdFBhbm5pbmcpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdf
RU5VTShXZWJDdXJzb3JJbmZvOjpUeXBlTm9ydGhXZXN0UGFubmluZywgUGxhdGZvcm1DdXJzb3I6
OlR5cGVOb3J0aFdlc3RQYW5uaW5nKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2Vi
Q3Vyc29ySW5mbzo6VHlwZVNvdXRoUGFubmluZywgUGxhdGZvcm1DdXJzb3I6OlR5cGVTb3V0aFBh
bm5pbmcpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJDdXJzb3JJbmZvOjpUeXBl
U291dGhFYXN0UGFubmluZywgUGxhdGZvcm1DdXJzb3I6OlR5cGVTb3V0aEVhc3RQYW5uaW5nKTsK
K0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViQ3Vyc29ySW5mbzo6VHlwZVNvdXRoV2Vz
dFBhbm5pbmcsIFBsYXRmb3JtQ3Vyc29yOjpUeXBlU291dGhXZXN0UGFubmluZyk7CitDT01QSUxF
X0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkN1cnNvckluZm86OlR5cGVXZXN0UGFubmluZywgUGxh
dGZvcm1DdXJzb3I6OlR5cGVXZXN0UGFubmluZyk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19F
TlVNKFdlYkN1cnNvckluZm86OlR5cGVNb3ZlLCBQbGF0Zm9ybUN1cnNvcjo6VHlwZU1vdmUpOwor
Q09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJDdXJzb3JJbmZvOjpUeXBlVmVydGljYWxU
ZXh0LCBQbGF0Zm9ybUN1cnNvcjo6VHlwZVZlcnRpY2FsVGV4dCk7CitDT01QSUxFX0FTU0VSVF9N
QVRDSElOR19FTlVNKFdlYkN1cnNvckluZm86OlR5cGVDZWxsLCBQbGF0Zm9ybUN1cnNvcjo6VHlw
ZUNlbGwpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJDdXJzb3JJbmZvOjpUeXBl
Q29udGV4dE1lbnUsIFBsYXRmb3JtQ3Vyc29yOjpUeXBlQ29udGV4dE1lbnUpOworQ09NUElMRV9B
U1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJDdXJzb3JJbmZvOjpUeXBlQWxpYXMsIFBsYXRmb3JtQ3Vy
c29yOjpUeXBlQWxpYXMpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJDdXJzb3JJ
bmZvOjpUeXBlUHJvZ3Jlc3MsIFBsYXRmb3JtQ3Vyc29yOjpUeXBlUHJvZ3Jlc3MpOworQ09NUElM
RV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJDdXJzb3JJbmZvOjpUeXBlTm9Ecm9wLCBQbGF0Zm9y
bUN1cnNvcjo6VHlwZU5vRHJvcCk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkN1
cnNvckluZm86OlR5cGVDb3B5LCBQbGF0Zm9ybUN1cnNvcjo6VHlwZUNvcHkpOworQ09NUElMRV9B
U1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJDdXJzb3JJbmZvOjpUeXBlTm9uZSwgUGxhdGZvcm1DdXJz
b3I6OlR5cGVOb25lKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViQ3Vyc29ySW5m
bzo6VHlwZU5vdEFsbG93ZWQsIFBsYXRmb3JtQ3Vyc29yOjpUeXBlTm90QWxsb3dlZCk7CitDT01Q
SUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkN1cnNvckluZm86OlR5cGVab29tSW4sIFBsYXRm
b3JtQ3Vyc29yOjpUeXBlWm9vbUluKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2Vi
Q3Vyc29ySW5mbzo6VHlwZVpvb21PdXQsIFBsYXRmb3JtQ3Vyc29yOjpUeXBlWm9vbU91dCk7CitD
T01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkN1cnNvckluZm86OlR5cGVDdXN0b20sIFBs
YXRmb3JtQ3Vyc29yOjpUeXBlQ3VzdG9tKTsKKworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5V
TShXZWJFZGl0aW5nQWN0aW9uVHlwZWQsIEVkaXRvckluc2VydEFjdGlvblR5cGVkKTsKK0NPTVBJ
TEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViRWRpdGluZ0FjdGlvblBhc3RlZCwgRWRpdG9ySW5z
ZXJ0QWN0aW9uUGFzdGVkKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViRWRpdGlu
Z0FjdGlvbkRyb3BwZWQsIEVkaXRvckluc2VydEFjdGlvbkRyb3BwZWQpOworCisjaWYgRU5BQkxF
KFZJREVPKQorQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJNZWRpYVBsYXllcjo6RW1w
dHksIE1lZGlhUGxheWVyOjpFbXB0eSk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdl
Yk1lZGlhUGxheWVyOjpJZGxlLCBNZWRpYVBsYXllcjo6SWRsZSk7CitDT01QSUxFX0FTU0VSVF9N
QVRDSElOR19FTlVNKFdlYk1lZGlhUGxheWVyOjpMb2FkaW5nLCBNZWRpYVBsYXllcjo6TG9hZGlu
Zyk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYk1lZGlhUGxheWVyOjpMb2FkZWQs
IE1lZGlhUGxheWVyOjpMb2FkZWQpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJN
ZWRpYVBsYXllcjo6Rm9ybWF0RXJyb3IsIE1lZGlhUGxheWVyOjpGb3JtYXRFcnJvcik7CitDT01Q
SUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYk1lZGlhUGxheWVyOjpOZXR3b3JrRXJyb3IsIE1l
ZGlhUGxheWVyOjpOZXR3b3JrRXJyb3IpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShX
ZWJNZWRpYVBsYXllcjo6RGVjb2RlRXJyb3IsIE1lZGlhUGxheWVyOjpEZWNvZGVFcnJvcik7CisK
K0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5n
LCBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmcpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5V
TShXZWJNZWRpYVBsYXllcjo6SGF2ZU1ldGFkYXRhLCBNZWRpYVBsYXllcjo6SGF2ZU1ldGFkYXRh
KTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViTWVkaWFQbGF5ZXI6OkhhdmVDdXJy
ZW50RGF0YSwgTWVkaWFQbGF5ZXI6OkhhdmVDdXJyZW50RGF0YSk7CitDT01QSUxFX0FTU0VSVF9N
QVRDSElOR19FTlVNKFdlYk1lZGlhUGxheWVyOjpIYXZlRnV0dXJlRGF0YSwgTWVkaWFQbGF5ZXI6
OkhhdmVGdXR1cmVEYXRhKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViTWVkaWFQ
bGF5ZXI6OkhhdmVFbm91Z2hEYXRhLCBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGEpOworCitD
T01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYk1lZGlhUGxheWVyOjpVbmtub3duLCBNZWRp
YVBsYXllcjo6VW5rbm93bik7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYk1lZGlh
UGxheWVyOjpEb3dubG9hZCwgTWVkaWFQbGF5ZXI6OkRvd25sb2FkKTsKK0NPTVBJTEVfQVNTRVJU
X01BVENISU5HX0VOVU0oV2ViTWVkaWFQbGF5ZXI6OlN0b3JlZFN0cmVhbSwgTWVkaWFQbGF5ZXI6
OlN0b3JlZFN0cmVhbSk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYk1lZGlhUGxh
eWVyOjpMaXZlU3RyZWFtLCBNZWRpYVBsYXllcjo6TGl2ZVN0cmVhbSk7CisjZW5kaWYKKworI2lm
IEVOQUJMRShOT1RJRklDQVRJT05TKQorQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJO
b3RpZmljYXRpb25QcmVzZW50ZXI6OlBlcm1pc3Npb25BbGxvd2VkLCBOb3RpZmljYXRpb25QcmVz
ZW50ZXI6OlBlcm1pc3Npb25BbGxvd2VkKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0o
V2ViTm90aWZpY2F0aW9uUHJlc2VudGVyOjpQZXJtaXNzaW9uTm90QWxsb3dlZCwgTm90aWZpY2F0
aW9uUHJlc2VudGVyOjpQZXJtaXNzaW9uTm90QWxsb3dlZCk7CitDT01QSUxFX0FTU0VSVF9NQVRD
SElOR19FTlVNKFdlYk5vdGlmaWNhdGlvblByZXNlbnRlcjo6UGVybWlzc2lvbkRlbmllZCwgTm90
aWZpY2F0aW9uUHJlc2VudGVyOjpQZXJtaXNzaW9uRGVuaWVkKTsKKyNlbmRpZgorCitDT01QSUxF
X0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYlRleHRBZmZpbml0eVVwc3RyZWFtLCBVUFNUUkVBTSk7
CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYlRleHRBZmZpbml0eURvd25zdHJlYW0s
IERPV05TVFJFQU0pOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9BdXRvY29tcGxl
dGVQb3B1cE1lbnVDbGllbnQuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9BdXRvY29tcGxldGVQ
b3B1cE1lbnVDbGllbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYy
ZDRkZmYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0F1dG9jb21wbGV0
ZVBvcHVwTWVudUNsaWVudC5jcHAKQEAgLTAsMCArMSwxNzggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50LmgiCisKKyNpbmNsdWRlICJD
U1NTdHlsZVNlbGVjdG9yLmgiCisjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgorI2luY2x1
ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJSZW5kZXJUaGVtZS5oIgorI2luY2x1ZGUgIldlYlZlY3Rvci5oIgorI2luY2x1ZGUgIldlYlZp
ZXdJbXBsLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0
IHsKKworQXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50OjpBdXRvY29tcGxldGVQb3B1cE1lbnVD
bGllbnQoV2ViVmlld0ltcGwqIHdlYlZpZXcpCisgICAgOiBtX3RleHRGaWVsZCgwKQorICAgICwg
bV9zZWxlY3RlZEluZGV4KDApCisgICAgLCBtX3dlYlZpZXcod2ViVmlldykKK3sKK30KKworQXV0
b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50Ojp+QXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50KCkK
K3sKK30KKwordm9pZCBBdXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQ6OmluaXRpYWxpemUoCisg
ICAgSFRNTElucHV0RWxlbWVudCogdGV4dEZpZWxkLAorICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJT
dHJpbmc+JiBzdWdnZXN0aW9ucywKKyAgICBpbnQgZGVmYXVsdFN1Z2dlc3Rpb25JbmRleCkKK3sK
KyAgICBBU1NFUlQoZGVmYXVsdFN1Z2dlc3Rpb25JbmRleCA8IHN0YXRpY19jYXN0PGludD4oc3Vn
Z2VzdGlvbnMuc2l6ZSgpKSk7CisgICAgbV90ZXh0RmllbGQgPSB0ZXh0RmllbGQ7CisgICAgbV9z
ZWxlY3RlZEluZGV4ID0gZGVmYXVsdFN1Z2dlc3Rpb25JbmRleDsKKyAgICBzZXRTdWdnZXN0aW9u
cyhzdWdnZXN0aW9ucyk7CisKKyAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOwor
ICAgIG1fd2ViVmlldy0+dGhlbWUoKS0+c3lzdGVtRm9udChDU1NWYWx1ZVdlYmtpdENvbnRyb2ws
IGZvbnREZXNjcmlwdGlvbik7CisgICAgLy8gVXNlIGEgc21hbGxlciBmb250IHNpemUgdG8gbWF0
Y2ggSUUvRmlyZWZveC4KKyAgICAvLyBGSVhNRTogaHR0cDovL2NyYnVnLmNvbS83Mzc2IHVzZSB0
aGUgc3lzdGVtIHNpemUgaW5zdGVhZCBvZiBhCisgICAgLy8gICAgICAgIGZpeGVkIGZvbnQgc2l6
ZSB2YWx1ZS4KKyAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKDEyLjApOworICAg
IEZvbnQgZm9udChmb250RGVzY3JpcHRpb24sIDAsIDApOworICAgIGZvbnQudXBkYXRlKHRleHRG
aWVsZC0+ZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpLT5mb250U2VsZWN0b3IoKSk7CisgICAg
Ly8gVGhlIGRpcmVjdGlvbiBvZiB0ZXh0IGluIHBvcHVwIG1lbnUgaXMgc2V0IHRoZSBzYW1lIGFz
IHRoZSBkaXJlY3Rpb24gb2YKKyAgICAvLyB0aGUgaW5wdXQgZWxlbWVudDogdGV4dEZpZWxkLgor
ICAgIG1fc3R5bGUuc2V0KG5ldyBQb3B1cE1lbnVTdHlsZShDb2xvcjo6YmxhY2ssIENvbG9yOjp3
aGl0ZSwgZm9udCwgdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGVu
Z3RoKFdlYkNvcmU6OkZpeGVkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGV4dEZpZWxkLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5kaXJlY3Rpb24oKSkpOworfQorCit2b2lk
IEF1dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudDo6dmFsdWVDaGFuZ2VkKHVuc2lnbmVkIGxpc3RJ
bmRleCwgYm9vbCBmaXJlRXZlbnRzKQoreworICAgIG1fdGV4dEZpZWxkLT5zZXRWYWx1ZShtX3N1
Z2dlc3Rpb25zW2xpc3RJbmRleF0pOworICAgIEVkaXRvckNsaWVudEltcGwqIGVkaXRvciA9Cisg
ICAgICAgIHN0YXRpY19jYXN0PEVkaXRvckNsaWVudEltcGwqPihtX3dlYlZpZXctPnBhZ2UoKS0+
ZWRpdG9yQ2xpZW50KCkpOworICAgIEFTU0VSVChlZGl0b3IpOworICAgIGVkaXRvci0+b25BdXRv
ZmlsbFN1Z2dlc3Rpb25BY2NlcHRlZCgKKyAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxl
bWVudCo+KG1fdGV4dEZpZWxkLmdldCgpKSk7Cit9CisKK1N0cmluZyBBdXRvY29tcGxldGVQb3B1
cE1lbnVDbGllbnQ6Oml0ZW1UZXh0KHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9zdWdnZXN0aW9uc1tsaXN0SW5kZXhdOworfQorCitQb3B1cE1lbnVTdHlsZSBBdXRv
Y29tcGxldGVQb3B1cE1lbnVDbGllbnQ6Oml0ZW1TdHlsZSh1bnNpZ25lZCBsaXN0SW5kZXgpIGNv
bnN0Cit7CisgICAgcmV0dXJuICptX3N0eWxlOworfQorCitQb3B1cE1lbnVTdHlsZSBBdXRvY29t
cGxldGVQb3B1cE1lbnVDbGllbnQ6Om1lbnVTdHlsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICpt
X3N0eWxlOworfQorCitpbnQgQXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50OjpjbGllbnRQYWRk
aW5nTGVmdCgpIGNvbnN0Cit7CisgICAgLy8gQnVnIGh0dHA6Ly9jcmJ1Zy5jb20vNzcwOCBzZWVt
cyB0byBpbmRpY2F0ZSB0aGUgc3R5bGUgY2FuIGJlIDAuCisgICAgUmVuZGVyU3R5bGUqIHN0eWxl
ID0gdGV4dEZpZWxkU3R5bGUoKTsKKyAgICByZXR1cm4gc3R5bGUgPyBtX3dlYlZpZXctPnRoZW1l
KCktPnBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChzdHlsZSkgOiAwOworfQorCitpbnQgQXV0b2Nv
bXBsZXRlUG9wdXBNZW51Q2xpZW50OjpjbGllbnRQYWRkaW5nUmlnaHQoKSBjb25zdAoreworICAg
IC8vIEJ1ZyBodHRwOi8vY3JidWcuY29tLzc3MDggc2VlbXMgdG8gaW5kaWNhdGUgdGhlIHN0eWxl
IGNhbiBiZSAwLgorICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHRleHRGaWVsZFN0eWxlKCk7Cisg
ICAgcmV0dXJuIHN0eWxlID8gbV93ZWJWaWV3LT50aGVtZSgpLT5wb3B1cEludGVybmFsUGFkZGlu
Z1JpZ2h0KHN0eWxlKSA6IDA7Cit9CisKK3ZvaWQgQXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50
Ojpwb3B1cERpZEhpZGUoKQoreworICAgIG1fd2ViVmlldy0+YXV0b0NvbXBsZXRlUG9wdXBEaWRI
aWRlKCk7Cit9CisKK3ZvaWQgQXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50OjpzZXRUZXh0RnJv
bUl0ZW0odW5zaWduZWQgbGlzdEluZGV4KQoreworICAgIG1fdGV4dEZpZWxkLT5zZXRWYWx1ZSht
X3N1Z2dlc3Rpb25zW2xpc3RJbmRleF0pOworfQorCitGb250U2VsZWN0b3IqIEF1dG9jb21wbGV0
ZVBvcHVwTWVudUNsaWVudDo6Zm9udFNlbGVjdG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90
ZXh0RmllbGQtPmRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKS0+Zm9udFNlbGVjdG9yKCk7Cit9
CisKK0hvc3RXaW5kb3cqIEF1dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudDo6aG9zdFdpbmRvdygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdGV4dEZpZWxkLT5kb2N1bWVudCgpLT52aWV3KCktPmhv
c3RXaW5kb3coKTsKK30KKworUGFzc1JlZlB0cjxTY3JvbGxiYXI+IEF1dG9jb21wbGV0ZVBvcHVw
TWVudUNsaWVudDo6Y3JlYXRlU2Nyb2xsYmFyKAorICAgIFNjcm9sbGJhckNsaWVudCogY2xpZW50
LAorICAgIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLAorICAgIFNjcm9sbGJhckNv
bnRyb2xTaXplIHNpemUpCit7CisgICAgcmV0dXJuIFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Ny
b2xsYmFyKGNsaWVudCwgb3JpZW50YXRpb24sIHNpemUpOworfQorCit2b2lkIEF1dG9jb21wbGV0
ZVBvcHVwTWVudUNsaWVudDo6c2V0U3VnZ2VzdGlvbnMoY29uc3QgV2ViVmVjdG9yPFdlYlN0cmlu
Zz4mIHN1Z2dlc3Rpb25zKQoreworICAgIG1fc3VnZ2VzdGlvbnMuY2xlYXIoKTsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHN1Z2dlc3Rpb25zLnNpemUoKTsgKytpKQorICAgICAgICBtX3N1
Z2dlc3Rpb25zLmFwcGVuZChzdWdnZXN0aW9uc1tpXSk7CisgICAgLy8gVHJ5IHRvIHByZXNlcnZl
IHNlbGVjdGlvbiBpZiBwb3NzaWJsZS4KKyAgICBpZiAobV9zZWxlY3RlZEluZGV4ID49IHN0YXRp
Y19jYXN0PGludD4oc3VnZ2VzdGlvbnMuc2l6ZSgpKSkKKyAgICAgICAgbV9zZWxlY3RlZEluZGV4
ID0gLTE7Cit9CisKK3ZvaWQgQXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50OjpyZW1vdmVJdGVt
QXRJbmRleChpbnQgaW5kZXgpCit7CisgICAgQVNTRVJUKGluZGV4ID49IDAgJiYgaW5kZXggPCBz
dGF0aWNfY2FzdDxpbnQ+KG1fc3VnZ2VzdGlvbnMuc2l6ZSgpKSk7CisgICAgbV9zdWdnZXN0aW9u
cy5yZW1vdmUoaW5kZXgpOworfQorCitSZW5kZXJTdHlsZSogQXV0b2NvbXBsZXRlUG9wdXBNZW51
Q2xpZW50Ojp0ZXh0RmllbGRTdHlsZSgpIGNvbnN0Cit7CisgICAgUmVuZGVyU3R5bGUqIHN0eWxl
ID0gbV90ZXh0RmllbGQtPmNvbXB1dGVkU3R5bGUoKTsKKyAgICBpZiAoIXN0eWxlKSB7CisgICAg
ICAgIC8vIEl0IHNlZW1zIHdlIGNhbiBvbmx5IGhhdmUgYSAwIHN0eWxlIGluIGEgVGV4dEZpZWxk
IGlmIHRoZQorICAgICAgICAvLyBub2RlIGlzIGRldGFjaGVkLCBpbiB3aGljaCBjYXNlIHdlIHRo
ZSBwb3B1cCBzaG91ZCBub3QgYmUKKyAgICAgICAgLy8gc2hvd2luZy4gIFBsZWFzZSByZXBvcnQg
dGhpcyBpbiBodHRwOi8vY3JidWcuY29tLzc3MDggYW5kCisgICAgICAgIC8vIGluY2x1ZGUgdGhl
IHBhZ2UgeW91IHdlcmUgdmlzaXRpbmcuCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIH0KKyAgICByZXR1cm4gc3R5bGU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9BdXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQu
aCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvQXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQyNGU1NAotLS0gL2Rldi9udWxsCisr
KyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvQXV0b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50LmgKQEAg
LTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJQb3B1cE1lbnVDbGllbnQuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworY2xhc3MgSFRNTElucHV0RWxlbWVudDsKK2NsYXNzIFBvcHVwTWVudVN0eWxlOwor
Y2xhc3MgUmVuZGVyU3R5bGU7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViU3Ry
aW5nOworY2xhc3MgV2ViVmlld0ltcGw7Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgV2Vi
VmVjdG9yOworCisvLyBBdXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQKK2NsYXNzIEF1dG9jb21w
bGV0ZVBvcHVwTWVudUNsaWVudCA6IHB1YmxpYyBXZWJDb3JlOjpQb3B1cE1lbnVDbGllbnQgewor
cHVibGljOgorICAgIEF1dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudChXZWJWaWV3SW1wbCogd2Vi
dmlldyk7CisgICAgfkF1dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudCgpOworCisgICAgdm9pZCBp
bml0aWFsaXplKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqLAorICAgICAgICAgICAgICAgICAg
ICBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgc3VnZ2VzdGlvbnMsCisgICAgICAgICAgICAg
ICAgICAgIGludCBkZWZhdWx0U3VnZ2VzdGlvbkluZGV4KTsKKworICAgIFdlYkNvcmU6OkhUTUxJ
bnB1dEVsZW1lbnQqIHRleHRGaWVsZCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dEZpZWxkLmdldCgp
OyB9CisKKyAgICB2b2lkIHNldFN1Z2dlc3Rpb25zKGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+
Jik7CisgICAgdm9pZCByZW1vdmVJdGVtQXRJbmRleChpbnQgaW5kZXgpOworCisgICAgLy8gV2Vi
Q29yZTo6UG9wdXBNZW51Q2xpZW50IG1ldGhvZHM6CisgICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hh
bmdlZCh1bnNpZ25lZCBsaXN0SW5kZXgsIGJvb2wgZmlyZUV2ZW50cyA9IHRydWUpOworICAgIHZp
cnR1YWwgV2ViQ29yZTo6U3RyaW5nIGl0ZW1UZXh0KHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3Q7
CisgICAgdmlydHVhbCBXZWJDb3JlOjpTdHJpbmcgaXRlbVRvb2xUaXAodW5zaWduZWQgbGFzdElu
ZGV4KSBjb25zdCB7IHJldHVybiBXZWJDb3JlOjpTdHJpbmcoKTsgfQorICAgIHZpcnR1YWwgYm9v
bCBpdGVtSXNFbmFibGVkKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQorICAgIHZpcnR1YWwgV2ViQ29yZTo6UG9wdXBNZW51U3R5bGUgaXRlbVN0eWxlKHVuc2lnbmVk
IGxpc3RJbmRleCkgY29uc3Q7CisgICAgdmlydHVhbCBXZWJDb3JlOjpQb3B1cE1lbnVTdHlsZSBt
ZW51U3R5bGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBjbGllbnRJbnNldExlZnQoKSBjb25z
dCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBpbnQgY2xpZW50SW5zZXRSaWdodCgpIGNvbnN0
IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGludCBjbGllbnRQYWRkaW5nTGVmdCgpIGNvbnN0
OworICAgIHZpcnR1YWwgaW50IGNsaWVudFBhZGRpbmdSaWdodCgpIGNvbnN0OworICAgIHZpcnR1
YWwgaW50IGxpc3RTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zdWdnZXN0aW9ucy5zaXplKCk7IH0K
KyAgICB2aXJ0dWFsIGludCBzZWxlY3RlZEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rl
ZEluZGV4OyB9CisgICAgdmlydHVhbCB2b2lkIHBvcHVwRGlkSGlkZSgpOworICAgIHZpcnR1YWwg
Ym9vbCBpdGVtSXNTZXBhcmF0b3IodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpdGVtSXNMYWJlbCh1bnNpZ25lZCBsaXN0SW5kZXgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGl0ZW1Jc1NlbGVjdGVk
KHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgc2hvdWxkUG9wT3ZlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVh
bCBib29sIHZhbHVlU2hvdWxkQ2hhbmdlT25Ib3RUcmFjaygpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgdmlydHVhbCB2b2lkIHNldFRleHRGcm9tSXRlbSh1bnNpZ25lZCBsaXN0SW5kZXgp
OworICAgIHZpcnR1YWwgV2ViQ29yZTo6Rm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6Okhvc3RXaW5kb3cqIGhvc3RXaW5kb3coKSBjb25zdDsK
KyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2Nyb2xsYmFyPiBjcmVhdGVTY3JvbGxi
YXIoCisgICAgICAgIFdlYkNvcmU6OlNjcm9sbGJhckNsaWVudCogY2xpZW50LAorICAgICAgICBX
ZWJDb3JlOjpTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwKKyAgICAgICAgV2ViQ29y
ZTo6U2Nyb2xsYmFyQ29udHJvbFNpemUgc2l6ZSk7CisKK3ByaXZhdGU6CisgICAgV2ViQ29yZTo6
UmVuZGVyU3R5bGUqIHRleHRGaWVsZFN0eWxlKCkgY29uc3Q7CisKKyAgICBSZWZQdHI8V2ViQ29y
ZTo6SFRNTElucHV0RWxlbWVudD4gbV90ZXh0RmllbGQ7CisgICAgVmVjdG9yPFdlYkNvcmU6OlN0
cmluZz4gbV9zdWdnZXN0aW9uczsKKyAgICBpbnQgbV9zZWxlY3RlZEluZGV4OworICAgIFdlYlZp
ZXdJbXBsKiBtX3dlYlZpZXc7CisgICAgT3duUHRyPFdlYkNvcmU6OlBvcHVwTWVudVN0eWxlPiBt
X3N0eWxlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9XZWJLaXQv
Y2hyb21pdW0vc3JjL0JhY2tGb3J3YXJkTGlzdENsaWVudEltcGwuY3BwIGIvV2ViS2l0L2Nocm9t
aXVtL3NyYy9CYWNrRm9yd2FyZExpc3RDbGllbnRJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi44ZmVhZTMyCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9t
aXVtL3NyYy9CYWNrRm9yd2FyZExpc3RDbGllbnRJbXBsLmNwcApAQCAtMCwwICsxLDEzNiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCYWNrRm9yd2FyZExpc3RDbGllbnRJbXBsLmgi
CisKKyNpbmNsdWRlICJIaXN0b3J5SXRlbS5oIgorI2luY2x1ZGUgIldlYlZpZXdDbGllbnQuaCIK
KyNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK2NvbnN0IGNoYXIgYmFja0ZvcndhcmROYXZpZ2F0aW9uU2No
ZW1lW10gPSAiY2hyb21lLWJhY2stZm9yd2FyZCI7CisKK0JhY2tGb3J3YXJkTGlzdENsaWVudElt
cGw6OkJhY2tGb3J3YXJkTGlzdENsaWVudEltcGwoV2ViVmlld0ltcGwqIHdlYlZpZXcpCisgICAg
OiBtX3dlYlZpZXcod2ViVmlldykKK3sKK30KKworQmFja0ZvcndhcmRMaXN0Q2xpZW50SW1wbDo6
fkJhY2tGb3J3YXJkTGlzdENsaWVudEltcGwoKQoreworfQorCit2b2lkIEJhY2tGb3J3YXJkTGlz
dENsaWVudEltcGw6OnNldEN1cnJlbnRIaXN0b3J5SXRlbShIaXN0b3J5SXRlbSogaXRlbSkKK3sK
KyAgICBtX3ByZXZpb3VzSXRlbSA9IG1fY3VycmVudEl0ZW07CisgICAgbV9jdXJyZW50SXRlbSA9
IGl0ZW07Cit9CisKK0hpc3RvcnlJdGVtKiBCYWNrRm9yd2FyZExpc3RDbGllbnRJbXBsOjpwcmV2
aW91c0hpc3RvcnlJdGVtKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcmV2aW91c0l0ZW0uZ2V0
KCk7Cit9CisKK3ZvaWQgQmFja0ZvcndhcmRMaXN0Q2xpZW50SW1wbDo6YWRkSXRlbShQYXNzUmVm
UHRyPEhpc3RvcnlJdGVtPiBpdGVtKQoreworICAgIG1fcHJldmlvdXNJdGVtID0gbV9jdXJyZW50
SXRlbTsKKyAgICBtX2N1cnJlbnRJdGVtID0gaXRlbTsKKworICAgIC8vIElmIFdlYkNvcmUgYWRk
cyBhIG5ldyBIaXN0b3J5SXRlbSwgaXQgbWVhbnMgdGhpcyBpcyBhIG5ldyBuYXZpZ2F0aW9uIChp
ZSwKKyAgICAvLyBub3QgYSByZWxvYWQgb3IgYmFjay9mb3J3YXJkKS4KKyAgICBtX3dlYlZpZXct
Pm9ic2VydmVOZXdOYXZpZ2F0aW9uKCk7CisKKyAgICBpZiAobV93ZWJWaWV3LT5jbGllbnQoKSkK
KyAgICAgICAgbV93ZWJWaWV3LT5jbGllbnQoKS0+ZGlkQWRkSGlzdG9yeUl0ZW0oKTsKK30KKwor
dm9pZCBCYWNrRm9yd2FyZExpc3RDbGllbnRJbXBsOjpnb1RvSXRlbShIaXN0b3J5SXRlbSogaXRl
bSkKK3sKKyAgICBtX3ByZXZpb3VzSXRlbSA9IG1fY3VycmVudEl0ZW07CisgICAgbV9jdXJyZW50
SXRlbSA9IGl0ZW07CisKKyAgICBpZiAobV9wZW5kaW5nSGlzdG9yeUl0ZW0gPT0gaXRlbSkKKyAg
ICAgICAgbV9wZW5kaW5nSGlzdG9yeUl0ZW0gPSAwOworfQorCitIaXN0b3J5SXRlbSogQmFja0Zv
cndhcmRMaXN0Q2xpZW50SW1wbDo6Y3VycmVudEl0ZW0oKQoreworICAgIHJldHVybiBtX2N1cnJl
bnRJdGVtLmdldCgpOworfQorCitIaXN0b3J5SXRlbSogQmFja0ZvcndhcmRMaXN0Q2xpZW50SW1w
bDo6aXRlbUF0SW5kZXgoaW50IGluZGV4KQoreworICAgIGlmICghbV93ZWJWaWV3LT5jbGllbnQo
KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBTaW5jZSB3ZSBkb24ndCBrZWVwIHRoZSBl
bnRpcmUgYmFjay9mb3J3YXJkIGxpc3QsIHdlIGhhdmUgbm8gd2F5IHRvCisgICAgLy8gcHJvcGVy
bHkgaW1wbGVtZW50IHRoaXMgbWV0aG9kLiAgV2UgcmV0dXJuIGEgZHVtbXkgZW50cnkgaW5zdGVh
ZCB0aGF0IHdlCisgICAgLy8gaW50ZXJjZXB0IGluIG91ciBGcmFtZUxvYWRlckNsaWVudCBpbXBs
ZW1lbnRhdGlvbiBpbiBjYXNlIFdlYkNvcmUgYXNrcworICAgIC8vIHRvIG5hdmlnYXRlIHRvIHRo
aXMgSGlzdG9yeUl0ZW0uCisKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGNoYW5nZSBXZWJDb3Jl
IHRvIGhhbmRsZSBoaXN0b3J5LntiYWNrLGZvcndhcmQsZ299CisgICAgLy8gZGlmZmVyZW50bHku
ICBJdCBzaG91bGQgcGVyaGFwcyBqdXN0IGFzayB0aGUgRnJhbWVMb2FkZXJDbGllbnQgdG8KKyAg
ICAvLyBwZXJmb3JtIHRob3NlIG5hdmlnYXRpb25zLgorCisgICAgU3RyaW5nIHVybF9zdHJpbmcg
PSBTdHJpbmc6OmZvcm1hdCgKKyAgICAgICAgIiVzOi8vZ28vJWQiLCBiYWNrRm9yd2FyZE5hdmln
YXRpb25TY2hlbWUsIGluZGV4KTsKKworICAgIG1fcGVuZGluZ0hpc3RvcnlJdGVtID0KKyAgICAg
ICAgSGlzdG9yeUl0ZW06OmNyZWF0ZSh1cmxfc3RyaW5nLCBTdHJpbmcoKSwgMC4wKTsKKyAgICBy
ZXR1cm4gbV9wZW5kaW5nSGlzdG9yeUl0ZW0uZ2V0KCk7Cit9CisKK2ludCBCYWNrRm9yd2FyZExp
c3RDbGllbnRJbXBsOjpiYWNrTGlzdENvdW50KCkKK3sKKyAgICBpZiAoIW1fd2ViVmlldy0+Y2xp
ZW50KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIG1fd2ViVmlldy0+Y2xpZW50
KCktPmhpc3RvcnlCYWNrTGlzdENvdW50KCk7Cit9CisKK2ludCBCYWNrRm9yd2FyZExpc3RDbGll
bnRJbXBsOjpmb3J3YXJkTGlzdENvdW50KCkKK3sKKyAgICBpZiAoIW1fd2ViVmlldy0+Y2xpZW50
KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIG1fd2ViVmlldy0+Y2xpZW50KCkt
Pmhpc3RvcnlGb3J3YXJkTGlzdENvdW50KCk7Cit9CisKK3ZvaWQgQmFja0ZvcndhcmRMaXN0Q2xp
ZW50SW1wbDo6Y2xvc2UoKQoreworICAgIG1fY3VycmVudEl0ZW0gPSAwOworICAgIG1fcHJldmlv
dXNJdGVtID0gMDsKKyAgICBtX3BlbmRpbmdIaXN0b3J5SXRlbSA9IDA7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9CYWNrRm9yd2Fy
ZExpc3RDbGllbnRJbXBsLmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL0JhY2tGb3J3YXJkTGlzdENs
aWVudEltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDhiZWIwCi0t
LSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9CYWNrRm9yd2FyZExpc3RDbGll
bnRJbXBsLmgKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQmFja0ZvcndhcmRMaXN0Q2xpZW50SW1w
bF9oCisjZGVmaW5lIEJhY2tGb3J3YXJkTGlzdENsaWVudEltcGxfaAorCisjaW5jbHVkZSAiQmFj
a0ZvcndhcmRMaXN0LmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViVmlld0ltcGw7
CisKK2V4dGVybiBjb25zdCBjaGFyIGJhY2tGb3J3YXJkTmF2aWdhdGlvblNjaGVtZVtdOworCitj
bGFzcyBCYWNrRm9yd2FyZExpc3RDbGllbnRJbXBsIDogcHVibGljIFdlYkNvcmU6OkJhY2tGb3J3
YXJkTGlzdENsaWVudCB7CitwdWJsaWM6CisgICAgQmFja0ZvcndhcmRMaXN0Q2xpZW50SW1wbChX
ZWJWaWV3SW1wbCogd2Vidmlldyk7CisgICAgfkJhY2tGb3J3YXJkTGlzdENsaWVudEltcGwoKTsK
KworICAgIHZvaWQgc2V0Q3VycmVudEhpc3RvcnlJdGVtKFdlYkNvcmU6Okhpc3RvcnlJdGVtKiBp
dGVtKTsKKyAgICBXZWJDb3JlOjpIaXN0b3J5SXRlbSogcHJldmlvdXNIaXN0b3J5SXRlbSgpIGNv
bnN0OworCitwcml2YXRlOgorICAgIC8vIFdlYkNvcmU6OkJhY2tGb3J3YXJkTGlzdENsaWVudCBt
ZXRob2RzOgorICAgIHZpcnR1YWwgdm9pZCBhZGRJdGVtKFBhc3NSZWZQdHI8V2ViQ29yZTo6SGlz
dG9yeUl0ZW0+KTsKKyAgICB2aXJ0dWFsIHZvaWQgZ29Ub0l0ZW0oV2ViQ29yZTo6SGlzdG9yeUl0
ZW0qKTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6Okhpc3RvcnlJdGVtKiBjdXJyZW50SXRlbSgpOwor
ICAgIHZpcnR1YWwgV2ViQ29yZTo6SGlzdG9yeUl0ZW0qIGl0ZW1BdEluZGV4KGludCBpbmRleCk7
CisgICAgdmlydHVhbCBpbnQgYmFja0xpc3RDb3VudCgpOworICAgIHZpcnR1YWwgaW50IGZvcndh
cmRMaXN0Q291bnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKTsKKworICAgIFdlYlZpZXdJ
bXBsKiBtX3dlYlZpZXc7CisKKyAgICBSZWZQdHI8V2ViQ29yZTo6SGlzdG9yeUl0ZW0+IG1fcHJl
dmlvdXNJdGVtOworICAgIFJlZlB0cjxXZWJDb3JlOjpIaXN0b3J5SXRlbT4gbV9jdXJyZW50SXRl
bTsKKworICAgIC8vIFRoZSBsYXN0IGhpc3RvcnkgaXRlbSB0aGF0IHdhcyBhY2Nlc3NlZCB2aWEg
aXRlbUF0SW5kZXgoKS4gIFdlIGtlZXAgdHJhY2sKKyAgICAvLyBvZiB0aGlzIHVudGlsIGdvVG9J
dGVtKCkgaXMgY2FsbGVkLCBzbyB3ZSBjYW4gdHJhY2sgdGhlIG5hdmlnYXRpb24uCisgICAgUmVm
UHRyPFdlYkNvcmU6Okhpc3RvcnlJdGVtPiBtX3BlbmRpbmdIaXN0b3J5SXRlbTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWY=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42833</attachid>
            <date>2009-11-09 18:58:05 -0800</date>
            <delta_ts>2009-11-10 10:19:50 -0800</delta_ts>
            <desc>Up-streaming Chromium API src files: ChromeClientImpl...ContextMenuClientImpl</desc>
            <filename>bug-31276-20091109185804.patch</filename>
            <type>text/plain</type>
            <size>76979</size>
            <attacher name="Yaar Schnitman">yaar</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IGIwMWVlNzEuLjcwY2VhYjAgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMiw2ICsy
LDE3NSBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgogCisgICAgICAg
IFVwLXN0cmVhbWluZyBDaHJvbWl1bSBBUEkgc3JjIGZpbGVzOiBDaHJvbWVDbGllbnRJbXBsLi4u
Q29udGV4dE1lbnVDbGllbnRJbXBsCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTMxMjc2CisKKyAgICAgICAgKiBzcmMvQ2hyb21lQ2xpZW50SW1wbC5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRJbXBsOjpDaHJvbWVDbGll
bnRJbXBsKToKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50SW1wbDo6fkNocm9tZUNsaWVu
dEltcGwpOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRJbXBsOjpjaHJvbWVEZXN0cm95
ZWQpOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRJbXBsOjpzZXRXaW5kb3dSZWN0KToK
KyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50SW1wbDo6d2luZG93UmVjdCk6CisgICAgICAg
IChXZWJLaXQ6OkNocm9tZUNsaWVudEltcGw6OnBhZ2VSZWN0KToKKyAgICAgICAgKFdlYktpdDo6
Q2hyb21lQ2xpZW50SW1wbDo6c2NhbGVGYWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVD
bGllbnRJbXBsOjpmb2N1cyk6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudEltcGw6OnVu
Zm9jdXMpOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRJbXBsOjpjYW5UYWtlRm9jdXMp
OgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRJbXBsOjp0YWtlRm9jdXMpOgorICAgICAg
ICAoV2ViS2l0OjpDaHJvbWVDbGllbnRJbXBsOjpmb2N1c2VkTm9kZUNoYW5nZWQpOgorICAgICAg
ICAoV2ViS2l0OjpDaHJvbWVDbGllbnRJbXBsOjpjcmVhdGVXaW5kb3cpOgorICAgICAgICAoV2Vi
S2l0OjpjdXJyZW50RXZlbnRTaG91bGRDYXVzZUJhY2tncm91bmRUYWIpOgorICAgICAgICAoV2Vi
S2l0OjpDaHJvbWVDbGllbnRJbXBsOjpzaG93KToKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xp
ZW50SW1wbDo6Y2FuUnVuTW9kYWwpOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRJbXBs
OjpydW5Nb2RhbCk6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudEltcGw6OnNldFRvb2xi
YXJzVmlzaWJsZSk6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudEltcGw6OnRvb2xiYXJz
VmlzaWJsZSk6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudEltcGw6OnNldFN0YXR1c2Jh
clZpc2libGUpOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRJbXBsOjpzdGF0dXNiYXJW
aXNpYmxlKToKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50SW1wbDo6c2V0U2Nyb2xsYmFy
c1Zpc2libGUpOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRJbXBsOjpzY3JvbGxiYXJz
VmlzaWJsZSk6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudEltcGw6OnNldE1lbnViYXJW
aXNpYmxlKToKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50SW1wbDo6bWVudWJhclZpc2li
bGUpOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRJbXBsOjpzZXRSZXNpemFibGUpOgor
ICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRJbXBsOjphZGRNZXNzYWdlVG9Db25zb2xlKToK
KyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50SW1wbDo6Y2FuUnVuQmVmb3JlVW5sb2FkQ29u
ZmlybVBhbmVsKToKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50SW1wbDo6cnVuQmVmb3Jl
VW5sb2FkQ29uZmlybVBhbmVsKToKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50SW1wbDo6
Y2xvc2VXaW5kb3dTb29uKToKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50SW1wbDo6cnVu
SmF2YVNjcmlwdEFsZXJ0KToKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50SW1wbDo6cnVu
SmF2YVNjcmlwdENvbmZpcm0pOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRJbXBsOjpy
dW5KYXZhU2NyaXB0UHJvbXB0KToKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50SW1wbDo6
c2V0U3RhdHVzYmFyVGV4dCk6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudEltcGw6OnNo
b3VsZEludGVycnVwdEphdmFTY3JpcHQpOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRJ
bXBsOjp0YWJzVG9MaW5rcyk6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudEltcGw6Ondp
bmRvd1Jlc2l6ZXJSZWN0KToKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50SW1wbDo6cmVw
YWludCk6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudEltcGw6OnNjcm9sbCk6CisgICAg
ICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudEltcGw6OnNjcmVlblRvV2luZG93KToKKyAgICAgICAg
KFdlYktpdDo6Q2hyb21lQ2xpZW50SW1wbDo6d2luZG93VG9TY3JlZW4pOgorICAgICAgICAoV2Vi
S2l0OjpDaHJvbWVDbGllbnRJbXBsOjpjb250ZW50c1NpemVDaGFuZ2VkKToKKyAgICAgICAgKFdl
YktpdDo6Q2hyb21lQ2xpZW50SW1wbDo6c2Nyb2xsYmFyc01vZGVEaWRDaGFuZ2UpOgorICAgICAg
ICAoV2ViS2l0OjpDaHJvbWVDbGllbnRJbXBsOjptb3VzZURpZE1vdmVPdmVyRWxlbWVudCk6Cisg
ICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudEltcGw6OnNldFRvb2xUaXApOgorICAgICAgICAo
V2ViS2l0OjpDaHJvbWVDbGllbnRJbXBsOjpwcmludCk6CisgICAgICAgIChXZWJLaXQ6OkNocm9t
ZUNsaWVudEltcGw6OmV4Y2VlZGVkRGF0YWJhc2VRdW90YSk6CisgICAgICAgIChXZWJLaXQ6OkNo
cm9tZUNsaWVudEltcGw6OnJlYWNoZWRNYXhBcHBDYWNoZVNpemUpOgorICAgICAgICAoV2ViS2l0
OjpDaHJvbWVDbGllbnRJbXBsOjpydW5PcGVuUGFuZWwpOgorICAgICAgICAoV2ViS2l0OjpDaHJv
bWVDbGllbnRJbXBsOjpwb3B1cE9wZW5lZCk6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVu
dEltcGw6OnNldEN1cnNvcik6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudEltcGw6OnNl
dEN1cnNvckZvclBsdWdpbik6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudEltcGw6OmZv
cm1TdGF0ZURpZENoYW5nZSk6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudEltcGw6Omdl
dFBvcHVwTWVudUluZm8pOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRJbXBsOjpub3Rp
ZmljYXRpb25QcmVzZW50ZXIpOgorICAgICAgICAqIHNyYy9DaHJvbWVDbGllbnRJbXBsLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRJbXBsOjp3ZWJWaWV3KToKKyAgICAg
ICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50SW1wbDo6cGxhdGZvcm1QYWdlQ2xpZW50KToKKyAgICAg
ICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50SW1wbDo6c2Nyb2xsUmVjdEludG9WaWV3KToKKyAgICAg
ICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50SW1wbDo6cmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lv
bkZvckZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50SW1wbDo6c2V0Q3Vyc29y
KToKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50SW1wbDo6Y3JlYXRlSFRNTFBhcnNlclF1
aXJrcyk6CisgICAgICAgICogc3JjL0Nocm9taXVtQnJpZGdlLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjp0b0Nocm9tZUNsaWVudEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6dG9XZWJX
aWRnZXRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1CcmlkZ2U6OmNsaXBib2Fy
ZElzRm9ybWF0QXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtQnJpZGdlOjpj
bGlwYm9hcmRSZWFkUGxhaW5UZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtQnJpZGdl
OjpjbGlwYm9hcmRSZWFkSFRNTCk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bUJyaWRnZTo6
Y2xpcGJvYXJkV3JpdGVTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1Ccmlk
Z2U6OmNsaXBib2FyZFdyaXRlUGxhaW5UZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVt
QnJpZGdlOjpjbGlwYm9hcmRXcml0ZVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bUJy
aWRnZTo6Y2xpcGJvYXJkV3JpdGVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bUJy
aWRnZTo6c2V0Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bUJyaWRnZTo6Y29v
a2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bUJyaWRnZTo6cmF3Q29va2llcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bUJyaWRnZTo6ZGVsZXRlQ29va2llKToKKyAgICAgICAg
KFdlYkNvcmU6OkNocm9taXVtQnJpZGdlOjpwcmVmZXRjaEROUyk6CisgICAgICAgIChXZWJDb3Jl
OjpDaHJvbWl1bUJyaWRnZTo6ZmlsZUV4aXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1
bUJyaWRnZTo6ZGVsZXRlRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bUJyaWRnZTo6
ZGVsZXRlRW1wdHlEaXJlY3RvcnkpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1CcmlkZ2U6
OmdldEZpbGVTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtQnJpZGdlOjpnZXRGaWxl
TW9kaWZpY2F0aW9uVGltZSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bUJyaWRnZTo6ZGly
ZWN0b3J5TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bUJyaWRnZTo6cGF0aEJ5QXBw
ZW5kaW5nQ29tcG9uZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtQnJpZGdlOjptYWtl
QWxsRGlyZWN0b3JpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1CcmlkZ2U6OmdldEFi
c29sdXRlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bUJyaWRnZTo6aXNEaXJlY3Rv
cnkpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1CcmlkZ2U6OmZpbGVQYXRoVG9VUkwpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1CcmlkZ2U6OmVuc3VyZUZvbnRMb2FkZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2hyb21pdW1CcmlkZ2U6OmdldEZvbnRGYW1pbHlGb3JDaGFyYWN0ZXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtQnJpZGdlOjpkYXRhYmFzZU9wZW5GaWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtQnJpZGdlOjpkYXRhYmFzZURlbGV0ZUZpbGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1CcmlkZ2U6OmRhdGFiYXNlR2V0RmlsZUF0dHJpYnV0
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1CcmlkZ2U6OmRhdGFiYXNlR2V0RmlsZVNp
emUpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1CcmlkZ2U6OnNpZ25lZFB1YmxpY0tleUFu
ZENoYWxsZW5nZVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bUJyaWRnZTo6Y29t
cHV0ZWREZWZhdWx0TGFuZ3VhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1CcmlkZ2U6
OmxheW91dFRlc3RNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtQnJpZGdlOjppc1N1
cHBvcnRlZEltYWdlTUlNRVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1CcmlkZ2U6
OmlzU3VwcG9ydGVkSmF2YVNjcmlwdE1JTUVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9t
aXVtQnJpZGdlOjppc1N1cHBvcnRlZE5vbkltYWdlTUlNRVR5cGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2hyb21pdW1CcmlkZ2U6Om1pbWVUeXBlRm9yRXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkNocm9taXVtQnJpZGdlOjptaW1lVHlwZUZyb21GaWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNocm9taXVtQnJpZGdlOjpwcmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlwZSk6CisgICAgICAg
IChXZWJDb3JlOjpDaHJvbWl1bUJyaWRnZTo6cGx1Z2lucyk6CisgICAgICAgIChXZWJDb3JlOjpD
aHJvbWl1bUJyaWRnZTo6cGx1Z2luU2NyaXB0YWJsZU9iamVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDaHJvbWl1bUJyaWRnZTo6bG9hZFBsYXRmb3JtSW1hZ2VSZXNvdXJjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDaHJvbWl1bUJyaWRnZTo6c2FuZGJveEVuYWJsZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2hyb21pdW1CcmlkZ2U6OnNldFNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpDaHJvbWl1bUJyaWRnZTo6c2V0U2hhcmVkVGltZXJGaXJlVGltZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDaHJvbWl1bUJyaWRnZTo6c3RvcFNoYXJlZFRpbWVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkNocm9taXVtQnJpZGdlOjpkZWNyZW1lbnRTdGF0c0NvdW50ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2hyb21pdW1CcmlkZ2U6OmluY3JlbWVudFN0YXRzQ291bnRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpDaHJvbWl1bUJyaWRnZTo6c3VkZGVuVGVybWluYXRpb25DaGFuZ2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtQnJpZGdlOjpjdXJyZW50VGltZSk6CisgICAgICAg
IChXZWJDb3JlOjpDaHJvbWl1bUJyaWRnZTo6cGFpbnRCdXR0b24pOgorICAgICAgICAoV2ViQ29y
ZTo6Q2hyb21pdW1CcmlkZ2U6OnBhaW50TWVudUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2hy
b21pdW1CcmlkZ2U6OnBhaW50U2Nyb2xsYmFyQXJyb3cpOgorICAgICAgICAoV2ViQ29yZTo6Q2hy
b21pdW1CcmlkZ2U6OnBhaW50U2Nyb2xsYmFyVGh1bWIpOgorICAgICAgICAoV2ViQ29yZTo6Q2hy
b21pdW1CcmlkZ2U6OnBhaW50U2Nyb2xsYmFyVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Q2hy
b21pdW1CcmlkZ2U6OnBhaW50VGV4dEZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVt
QnJpZGdlOjpwYWludFRyYWNrYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtQnJpZGdl
Ojp0cmFjZUV2ZW50QmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1CcmlkZ2U6OnRy
YWNlRXZlbnRFbmQpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1CcmlkZ2U6OnZpc2l0ZWRM
aW5rSGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bUJyaWRnZTo6aXNMaW5rVmlzaXRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bUJyaWRnZTo6bm90aWZ5SlNPdXRPZk1lbW9y
eSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bUJyaWRnZTo6bWVtb3J5VXNhZ2VNQik6Cisg
ICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bUJyaWRnZTo6c2NyZWVuRGVwdGgpOgorICAgICAgICAo
V2ViQ29yZTo6Q2hyb21pdW1CcmlkZ2U6OnNjcmVlbkRlcHRoUGVyQ29tcG9uZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNocm9taXVtQnJpZGdlOjpzY3JlZW5Jc01vbm9jaHJvbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2hyb21pdW1CcmlkZ2U6OnNjcmVlblJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2hyb21pdW1CcmlkZ2U6OnNjcmVlbkF2YWlsYWJsZVJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2hyb21pdW1CcmlkZ2U6OnBvcHVwc0FsbG93ZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q2hy
b21pdW1CcmlkZ2U6OndpZGdldFNldEN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1
bUJyaWRnZTo6d2lkZ2V0U2V0Rm9jdXMpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4
dFByb3h5OjpjcmVhdGUpOgorICAgICAgICAqIHNyYy9DaHJvbWl1bUN1cnJlbnRUaW1lLmNwcDog
QWRkZWQuCisgICAgICAgIChXVEY6OmN1cnJlbnRUaW1lKToKKyAgICAgICAgKiBzcmMvQ2hyb21p
dW1UaHJlYWRpbmcuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6Q2hyb21pdW1UaHJlYWRpbmc6
OmluaXRpYWxpemVNYWluVGhyZWFkKToKKyAgICAgICAgKFdURjo6Q2hyb21pdW1UaHJlYWRpbmc6
OnNjaGVkdWxlRGlzcGF0Y2hGdW5jdGlvbnNPbk1haW5UaHJlYWQpOgorICAgICAgICAqIHNyYy9D
b250ZXh0TWVudUNsaWVudEltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6dXJsRnJv
bUZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6aXNBU2luZ2xlV29yZCk6CisgICAgICAgIChXZWJL
aXQ6OnNlbGVjdE1pc3NwZWxsZWRXb3JkKToKKyAgICAgICAgKFdlYktpdDo6Q29udGV4dE1lbnVD
bGllbnRJbXBsOjpnZXRDdXN0b21NZW51RnJvbURlZmF1bHRJdGVtcyk6CisgICAgICAgICogc3Jj
L0NvbnRleHRNZW51Q2xpZW50SW1wbC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6Q29udGV4
dE1lbnVDbGllbnRJbXBsOjpDb250ZXh0TWVudUNsaWVudEltcGwpOgorICAgICAgICAoV2ViS2l0
OjpDb250ZXh0TWVudUNsaWVudEltcGw6On5Db250ZXh0TWVudUNsaWVudEltcGwpOgorICAgICAg
ICAoV2ViS2l0OjpDb250ZXh0TWVudUNsaWVudEltcGw6OmNvcHlJbWFnZVRvQ2xpcGJvYXJkKToK
KyAgICAgICAgKFdlYktpdDo6Q29udGV4dE1lbnVDbGllbnRJbXBsOjpjb250ZXh0TWVudURlc3Ry
b3llZCk6CisgICAgICAgIChXZWJLaXQ6OkNvbnRleHRNZW51Q2xpZW50SW1wbDo6Y29udGV4dE1l
bnVJdGVtU2VsZWN0ZWQpOgorICAgICAgICAoV2ViS2l0OjpDb250ZXh0TWVudUNsaWVudEltcGw6
OmRvd25sb2FkVVJMKToKKyAgICAgICAgKFdlYktpdDo6Q29udGV4dE1lbnVDbGllbnRJbXBsOjpp
c1NwZWFraW5nKToKKyAgICAgICAgKFdlYktpdDo6Q29udGV4dE1lbnVDbGllbnRJbXBsOjpsb29r
VXBJbkRpY3Rpb25hcnkpOgorICAgICAgICAoV2ViS2l0OjpDb250ZXh0TWVudUNsaWVudEltcGw6
OnNlYXJjaFdpdGhHb29nbGUpOgorICAgICAgICAoV2ViS2l0OjpDb250ZXh0TWVudUNsaWVudElt
cGw6OnNob3VsZEluY2x1ZGVJbnNwZWN0RWxlbWVudEl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpD
b250ZXh0TWVudUNsaWVudEltcGw6OnNwZWFrKToKKyAgICAgICAgKFdlYktpdDo6Q29udGV4dE1l
bnVDbGllbnRJbXBsOjpzdG9wU3BlYWtpbmcpOgorCisyMDA5LTExLTA5ICBZYWFyIFNjaG5pdG1h
biAgPHlhYXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCiAgICAgICAgIFVwLXN0cmVhbWluZyBDaHJvbWl1bSBBUEkgc3JjIGZpbGVzOiBBcHBD
YWNoLi4uQmFja0ZvcndhcmRMaXN0Q2xpZW50SW1wbAogCiAgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTI3NgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9t
aXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21l
Q2xpZW50SW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgxNjMx
NQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1w
bC5jcHAKQEAgLTAsMCArMSw2NzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2hy
b21lQ2xpZW50SW1wbC5oIgorCisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU9iamVjdC5oIgorI2lu
Y2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlICJDaGFyYWN0ZXJOYW1lcy5oIgorI2lu
Y2x1ZGUgIkNvbnNvbGUuaCIKKyNpbmNsdWRlICJDdXJzb3IuaCIKKyNpbmNsdWRlICJEYXRhYmFz
ZVRyYWNrZXIuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50TG9h
ZGVyLmgiCisjaW5jbHVkZSAiRmlsZUNob29zZXIuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
KyNpbmNsdWRlICJGcmFtZUxvYWRSZXF1ZXN0LmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisj
aW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRl
ICJOb2RlLmgiCisjaW5jbHVkZSAiTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbC5oIgorI2luY2x1
ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQb3B1cE1lbnVDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlNj
cmlwdENvbnRyb2xsZXIuaCIKKyNpZiBVU0UoVjgpCisjaW5jbHVkZSAiVjhQcm94eS5oIgorI2Vu
ZGlmCisjaW5jbHVkZSAiV2ViQWNjZXNzaWJpbGl0eU9iamVjdC5oIgorI2luY2x1ZGUgIldlYkNv
bnNvbGVNZXNzYWdlLmgiCisjaW5jbHVkZSAiV2ViQ3Vyc29ySW5mby5oIgorI2luY2x1ZGUgIldl
YkZpbGVDaG9vc2VyQ29tcGxldGlvbkltcGwuaCIKKyNpbmNsdWRlICJXZWJGcmFtZUNsaWVudC5o
IgorI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5oIgorI2luY2x1ZGUgIldlYklucHV0RXZlbnQuaCIK
KyNpbmNsdWRlICJXZWJLaXQuaCIKKyNpbmNsdWRlICJXZWJQb3B1cE1lbnVJbXBsLmgiCisjaW5j
bHVkZSAiV2ViUG9wdXBNZW51SW5mby5oIgorI2luY2x1ZGUgIldlYlJlY3QuaCIKKyNpbmNsdWRl
ICJXZWJUZXh0RGlyZWN0aW9uLmgiCisjaW5jbHVkZSAiV2ViVVJMUmVxdWVzdC5oIgorI2luY2x1
ZGUgIldlYlZpZXdDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgorI2luY2x1ZGUg
IldpbmRvd0ZlYXR1cmVzLmgiCisjaW5jbHVkZSAiV3JhcHBlZFJlc291cmNlUmVxdWVzdC5oIgor
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK0Nocm9t
ZUNsaWVudEltcGw6OkNocm9tZUNsaWVudEltcGwoV2ViVmlld0ltcGwqIHdlYlZpZXcpCisgICAg
OiBtX3dlYlZpZXcod2ViVmlldykKKyAgICAsIG1fdG9vbGJhcnNWaXNpYmxlKHRydWUpCisgICAg
LCBtX3N0YXR1c2JhclZpc2libGUodHJ1ZSkKKyAgICAsIG1fc2Nyb2xsYmFyc1Zpc2libGUodHJ1
ZSkKKyAgICAsIG1fbWVudWJhclZpc2libGUodHJ1ZSkKKyAgICAsIG1fcmVzaXphYmxlKHRydWUp
CisgICAgLCBtX2lnbm9yZU5leHRTZXRDdXJzb3IoZmFsc2UpCit7Cit9CisKK0Nocm9tZUNsaWVu
dEltcGw6On5DaHJvbWVDbGllbnRJbXBsKCkKK3sKK30KKwordm9pZCBDaHJvbWVDbGllbnRJbXBs
OjpjaHJvbWVEZXN0cm95ZWQoKQoreworICAgIC8vIE91ciBsaWZldGltZSBpcyBib3VuZCB0byB0
aGUgV2ViVmlld0ltcGwuCit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50SW1wbDo6c2V0V2luZG93UmVj
dChjb25zdCBGbG9hdFJlY3QmIHIpCit7CisgICAgaWYgKG1fd2ViVmlldy0+Y2xpZW50KCkpCisg
ICAgICAgIG1fd2ViVmlldy0+Y2xpZW50KCktPnNldFdpbmRvd1JlY3QoSW50UmVjdChyKSk7Cit9
CisKK0Zsb2F0UmVjdCBDaHJvbWVDbGllbnRJbXBsOjp3aW5kb3dSZWN0KCkKK3sKKyAgICBXZWJS
ZWN0IHJlY3Q7CisgICAgaWYgKG1fd2ViVmlldy0+Y2xpZW50KCkpCisgICAgICAgIHJlY3QgPSBt
X3dlYlZpZXctPmNsaWVudCgpLT5yb290V2luZG93UmVjdCgpOworICAgIGVsc2UgeworICAgICAg
ICAvLyBUaGVzZSBudW1iZXJzIHdpbGwgYmUgZmFpcmx5IHdyb25nLiBUaGUgd2luZG93J3MgeC95
IGNvb3JkaW5hdGVzIHdpbGwKKyAgICAgICAgLy8gYmUgdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0
aGUgc2NyZWVuIGFuZCB0aGUgc2l6ZSB3aWxsIGJlIHRoZSBjb250ZW50CisgICAgICAgIC8vIHNp
emUgaW5zdGVhZCBvZiB0aGUgd2luZG93IHNpemUuCisgICAgICAgIHJlY3Qud2lkdGggPSBtX3dl
YlZpZXctPnNpemUoKS53aWR0aDsKKyAgICAgICAgcmVjdC5oZWlnaHQgPSBtX3dlYlZpZXctPnNp
emUoKS5oZWlnaHQ7CisgICAgfQorICAgIHJldHVybiBGbG9hdFJlY3QocmVjdCk7Cit9CisKK0Zs
b2F0UmVjdCBDaHJvbWVDbGllbnRJbXBsOjpwYWdlUmVjdCgpCit7CisgICAgLy8gV2UgaGlkZSB0
aGUgZGV0YWlscyBvZiB0aGUgd2luZG93J3MgYm9yZGVyIHRoaWNrbmVzcyBmcm9tIHRoZSB3ZWIg
cGFnZSBieQorICAgIC8vIHNpbXBsZSByZS11c2luZyB0aGUgd2luZG93IHBvc2l0aW9uIGhlcmUu
ICBTbywgZnJvbSB0aGUgcG9pbnQtb2YtdmlldyBvZgorICAgIC8vIHRoZSB3ZWIgcGFnZSwgdGhl
IHdpbmRvdyBoYXMgbm8gYm9yZGVyLgorICAgIHJldHVybiB3aW5kb3dSZWN0KCk7Cit9CisKK2Zs
b2F0IENocm9tZUNsaWVudEltcGw6OnNjYWxlRmFjdG9yKCkKK3sKKyAgICAvLyBUaGlzIGlzIHN1
cHBvc2VkIHRvIHJldHVybiB0aGUgc2NhbGUgZmFjdG9yIG9mIHRoZSB3ZWIgcGFnZS4gSXQgbG9v
a3MgbGlrZQorICAgIC8vIHRoZSBpbXBsZW1lbnRvciBvZiB0aGUgZ3JhcGhpY3MgbGF5ZXIgaXMg
cmVzcG9uc2libGUgZm9yIGRvaW5nIG1vc3Qgb2YgdGhlCisgICAgLy8gb3BlcmF0aW9ucyBhc3Nv
Y2lhdGVkIHdpdGggc2NhbGluZy4gSG93ZXZlciwgdGhpcyB2YWx1ZSBpcyB1c2VkIGlucyBzb21l
CisgICAgLy8gY2FzZXMgYnkgV2ViQ29yZS4gRm9yIGV4YW1wbGUsIHRoaXMgaXMgdXNlZCBhcyBh
IHNjYWxpbmcgZmFjdG9yIGluIGNhbnZhcworICAgIC8vIHNvIHRoYXQgdGhpbmdzIGRyYXduIGlu
IGl0IGFyZSBzY2FsZWQganVzdCBsaWtlIHRoZSB3ZWIgcGFnZSBpcy4KKyAgICAvLworICAgIC8v
IFdlIGRvbid0IGN1cnJlbnRseSBpbXBsZW1lbnQgc2NhbGluZywgc28ganVzdCByZXR1cm4gMS4w
IChubyBzY2FsaW5nKS4KKyAgICByZXR1cm4gMS4wOworfQorCit2b2lkIENocm9tZUNsaWVudElt
cGw6OmZvY3VzKCkKK3sKKyAgICBpZiAoIW1fd2ViVmlldy0+Y2xpZW50KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fd2ViVmlldy0+Y2xpZW50KCktPmRpZEZvY3VzKCk7CisKKyAgICAvLyBJ
ZiBhY2Nlc3NpYmlsaXR5IGlzIGVuYWJsZWQsIHdlIHNob3VsZCBub3RpZnkgYXNzaXN0aXZlIHRl
Y2hub2xvZ3kgdGhhdAorICAgIC8vIHRoZSBhY3RpdmUgQWNjZXNzaWJpbGl0eU9iamVjdCBjaGFu
Z2VkLgorICAgIGNvbnN0IEZyYW1lKiBmcmFtZSA9IG1fd2ViVmlldy0+Zm9jdXNlZFdlYkNvcmVG
cmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIERvY3VtZW50
KiBkb2MgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKKworICAgIGlmIChkb2MgJiYgZG9jLT5heE9iamVj
dENhY2hlKCktPmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpIHsKKyAgICAgICAgTm9kZSogZm9jdXNl
ZE5vZGUgPSBtX3dlYlZpZXctPmZvY3VzZWRXZWJDb3JlTm9kZSgpOworCisgICAgICAgIGlmICgh
Zm9jdXNlZE5vZGUpIHsKKyAgICAgICAgICAgIC8vIENvdWxkIG5vdCByZXRyaWV2ZSBmb2N1c2Vk
IE5vZGUuCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBSZXRy
aWV2ZSB0aGUgZm9jdXNlZCBBY2Nlc3NpYmlsaXR5T2JqZWN0LgorICAgICAgICBBY2Nlc3NpYmls
aXR5T2JqZWN0KiBmb2N1c2VkQWNjT2JqID0KKyAgICAgICAgICAgIGRvYy0+YXhPYmplY3RDYWNo
ZSgpLT5nZXRPckNyZWF0ZShmb2N1c2VkTm9kZS0+cmVuZGVyZXIoKSk7CisKKyAgICAgICAgLy8g
QWxlcnQgYXNzaXN0aXZlIHRlY2hub2xvZ3kgdGhhdCBmb2N1cyBjaGFuZ2VkLgorICAgICAgICBp
ZiAoZm9jdXNlZEFjY09iaikKKyAgICAgICAgICAgIG1fd2ViVmlldy0+Y2xpZW50KCktPmZvY3Vz
QWNjZXNzaWJpbGl0eU9iamVjdChXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0KGZvY3VzZWRBY2NPYmop
KTsKKyAgICB9Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50SW1wbDo6dW5mb2N1cygpCit7CisgICAg
aWYgKG1fd2ViVmlldy0+Y2xpZW50KCkpCisgICAgICAgIG1fd2ViVmlldy0+Y2xpZW50KCktPmRp
ZEJsdXIoKTsKK30KKworYm9vbCBDaHJvbWVDbGllbnRJbXBsOjpjYW5UYWtlRm9jdXMoRm9jdXNE
aXJlY3Rpb24pCit7CisgICAgLy8gRm9yIG5vdyB0aGUgYnJvd3NlciBjYW4gYWx3YXlzIHRha2Ug
Zm9jdXMgaWYgd2UncmUgbm90IHJ1bm5pbmcgbGF5b3V0CisgICAgLy8gdGVzdHMuCisgICAgcmV0
dXJuICFsYXlvdXRUZXN0TW9kZSgpOworfQorCit2b2lkIENocm9tZUNsaWVudEltcGw6OnRha2VG
b2N1cyhGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisgICAgaWYgKCFtX3dlYlZpZXctPmNs
aWVudCgpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGRpcmVjdGlvbiA9PSBGb2N1c0RpcmVj
dGlvbkJhY2t3YXJkKQorICAgICAgICBtX3dlYlZpZXctPmNsaWVudCgpLT5mb2N1c1ByZXZpb3Vz
KCk7CisgICAgZWxzZQorICAgICAgICBtX3dlYlZpZXctPmNsaWVudCgpLT5mb2N1c05leHQoKTsK
K30KKwordm9pZCBDaHJvbWVDbGllbnRJbXBsOjpmb2N1c2VkTm9kZUNoYW5nZWQoTm9kZSogbm9k
ZSkKK3sKKyAgICBXZWJVUkwgZm9jdXNfdXJsOworICAgIGlmIChub2RlICYmIG5vZGUtPmlzTGlu
aygpKSB7CisgICAgICAgIC8vIFRoaXMgSGl0VGVzdFJlc3VsdCBoYWNrIGlzIHRoZSBlYXNpZXN0
IHdheSB0byBnZXQgYSBsaW5rIFVSTCBvdXQgb2YgYQorICAgICAgICAvLyBXZWJDb3JlOjpOb2Rl
LgorICAgICAgICBIaXRUZXN0UmVzdWx0IGhpdF90ZXN0KEludFBvaW50KDAsIDApKTsKKyAgICAg
ICAgLy8gVGhpcyBjYXN0IG11c3QgYmUgdmFsaWQgYmVjYXVzZSBvZiB0aGUgaXNMaW5rKCkgY2hl
Y2suCisgICAgICAgIGhpdF90ZXN0LnNldFVSTEVsZW1lbnQocmVpbnRlcnByZXRfY2FzdDxFbGVt
ZW50Kj4obm9kZSkpOworICAgICAgICBpZiAoaGl0X3Rlc3QuaXNMaXZlTGluaygpKQorICAgICAg
ICAgICAgZm9jdXNfdXJsID0gaGl0X3Rlc3QuYWJzb2x1dGVMaW5rVVJMKCk7CisgICAgfQorICAg
IG1fd2ViVmlldy0+Y2xpZW50KCktPnNldEtleWJvYXJkRm9jdXNVUkwoZm9jdXNfdXJsKTsKK30K
KworUGFnZSogQ2hyb21lQ2xpZW50SW1wbDo6Y3JlYXRlV2luZG93KAorICAgIEZyYW1lKiBmcmFt
ZSwgY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYgciwgY29uc3QgV2luZG93RmVhdHVyZXMmIGZlYXR1
cmVzKQoreworICAgIGlmICghbV93ZWJWaWV3LT5jbGllbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICBXZWJWaWV3SW1wbCogbmV3VmlldyA9IHN0YXRpY19jYXN0PFdlYlZpZXdJbXBsKj4o
CisgICAgICAgIG1fd2ViVmlldy0+Y2xpZW50KCktPmNyZWF0ZVZpZXcoV2ViRnJhbWVJbXBsOjpm
cm9tRnJhbWUoZnJhbWUpKSk7CisgICAgaWYgKCFuZXdWaWV3KQorICAgICAgICByZXR1cm4gMDsK
KworICAgIC8vIFRoZSByZXF1ZXN0IGlzIGVtcHR5IHdoZW4gd2UgYXJlIGp1c3QgYmVpbmcgYXNr
ZWQgdG8gb3BlbiBhIGJsYW5rIHdpbmRvdy4KKyAgICAvLyBUaGlzIGNvcnJlc3BvbmRzIHRvIHdp
bmRvdy5vcGVuKCIiKSwgZm9yIGV4YW1wbGUuCisgICAgaWYgKCFyLnJlc291cmNlUmVxdWVzdCgp
LmlzRW1wdHkoKSkgeworICAgICAgICBXcmFwcGVkUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3Qoci5y
ZXNvdXJjZVJlcXVlc3QoKSk7CisgICAgICAgIG5ld1ZpZXctPm1haW5GcmFtZSgpLT5sb2FkUmVx
dWVzdChyZXF1ZXN0KTsKKyAgICB9CisKKyAgICByZXR1cm4gbmV3Vmlldy0+cGFnZSgpOworfQor
CitzdGF0aWMgaW5saW5lIGJvb2wgY3VycmVudEV2ZW50U2hvdWxkQ2F1c2VCYWNrZ3JvdW5kVGFi
KGNvbnN0IFdlYklucHV0RXZlbnQqIGlucHV0RXZlbnQpCit7CisgICAgaWYgKCFpbnB1dEV2ZW50
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoaW5wdXRFdmVudC0+dHlwZSAhPSBX
ZWJJbnB1dEV2ZW50OjpNb3VzZVVwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjb25z
dCBXZWJNb3VzZUV2ZW50KiBtb3VzZUV2ZW50ID0gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViTW91c2VF
dmVudCo+KGlucHV0RXZlbnQpOworCisgICAgV2ViTmF2aWdhdGlvblBvbGljeSBwb2xpY3k7Cisg
ICAgdW5zaWduZWQgc2hvcnQgYnV0dG9uTnVtYmVyOworICAgIHN3aXRjaCAobW91c2VFdmVudC0+
YnV0dG9uKSB7CisgICAgY2FzZSBXZWJNb3VzZUV2ZW50OjpCdXR0b25MZWZ0OgorICAgICAgICBi
dXR0b25OdW1iZXIgPSAwOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdlYk1vdXNlRXZlbnQ6
OkJ1dHRvbk1pZGRsZToKKyAgICAgICAgYnV0dG9uTnVtYmVyID0gMTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBXZWJNb3VzZUV2ZW50OjpCdXR0b25SaWdodDoKKyAgICAgICAgYnV0dG9uTnVt
YmVyID0gMjsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICBib29sIGN0cmwgPSBtb3VzZUV2ZW50LT5tb2RpZmllcnMgJiBXZWJN
b3VzZUV2ZW50OjpDb250cm9sS2V5OworICAgIGJvb2wgc2hpZnQgPSBtb3VzZUV2ZW50LT5tb2Rp
ZmllcnMgJiBXZWJNb3VzZUV2ZW50OjpTaGlmdEtleTsKKyAgICBib29sIGFsdCA9IG1vdXNlRXZl
bnQtPm1vZGlmaWVycyAmIFdlYk1vdXNlRXZlbnQ6OkFsdEtleTsKKyAgICBib29sIG1ldGEgPSBt
b3VzZUV2ZW50LT5tb2RpZmllcnMgJiBXZWJNb3VzZUV2ZW50OjpNZXRhS2V5OworCisgICAgaWYg
KCFXZWJWaWV3SW1wbDo6bmF2aWdhdGlvblBvbGljeUZyb21Nb3VzZUV2ZW50KGJ1dHRvbk51bWJl
ciwgY3RybCwgc2hpZnQsIGFsdCwgbWV0YSwgJnBvbGljeSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIHJldHVybiBwb2xpY3kgPT0gV2ViTmF2aWdhdGlvblBvbGljeU5ld0JhY2tncm91
bmRUYWI7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50SW1wbDo6c2hvdygpCit7CisgICAgaWYgKCFt
X3dlYlZpZXctPmNsaWVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJZiBvdXIgZGVm
YXVsdCBjb25maWd1cmF0aW9uIHdhcyBtb2RpZmllZCBieSBhIHNjcmlwdCBvciB3YXNuJ3QKKyAg
ICAvLyBjcmVhdGVkIGJ5IGEgdXNlciBnZXN0dXJlLCB0aGVuIHNob3cgYXMgYSBwb3B1cC4gRWxz
ZSwgbGV0IHRoaXMKKyAgICAvLyBuZXcgd2luZG93IGJlIG9wZW5lZCBhcyBhIHRvcGxldmVsIHdp
bmRvdy4KKyAgICBib29sIGFzUG9wdXAgPSAhbV90b29sYmFyc1Zpc2libGUKKyAgICAgICAgfHwg
IW1fc3RhdHVzYmFyVmlzaWJsZQorICAgICAgICB8fCAhbV9zY3JvbGxiYXJzVmlzaWJsZQorICAg
ICAgICB8fCAhbV9tZW51YmFyVmlzaWJsZQorICAgICAgICB8fCAhbV9yZXNpemFibGU7CisKKyAg
ICBXZWJOYXZpZ2F0aW9uUG9saWN5IHBvbGljeSA9IFdlYk5hdmlnYXRpb25Qb2xpY3lOZXdGb3Jl
Z3JvdW5kVGFiOworICAgIGlmIChhc1BvcHVwKQorICAgICAgICBwb2xpY3kgPSBXZWJOYXZpZ2F0
aW9uUG9saWN5TmV3UG9wdXA7CisgICAgaWYgKGN1cnJlbnRFdmVudFNob3VsZENhdXNlQmFja2dy
b3VuZFRhYihXZWJWaWV3SW1wbDo6Y3VycmVudElucHV0RXZlbnQoKSkpCisgICAgICAgIHBvbGlj
eSA9IFdlYk5hdmlnYXRpb25Qb2xpY3lOZXdCYWNrZ3JvdW5kVGFiOworCisgICAgbV93ZWJWaWV3
LT5jbGllbnQoKS0+c2hvdyhwb2xpY3kpOworfQorCitib29sIENocm9tZUNsaWVudEltcGw6OmNh
blJ1bk1vZGFsKCkKK3sKKyAgICByZXR1cm4gISFtX3dlYlZpZXctPmNsaWVudCgpOworfQorCit2
b2lkIENocm9tZUNsaWVudEltcGw6OnJ1bk1vZGFsKCkKK3sKKyAgICBpZiAobV93ZWJWaWV3LT5j
bGllbnQoKSkKKyAgICAgICAgbV93ZWJWaWV3LT5jbGllbnQoKS0+cnVuTW9kYWwoKTsKK30KKwor
dm9pZCBDaHJvbWVDbGllbnRJbXBsOjpzZXRUb29sYmFyc1Zpc2libGUoYm9vbCB2YWx1ZSkKK3sK
KyAgICBtX3Rvb2xiYXJzVmlzaWJsZSA9IHZhbHVlOworfQorCitib29sIENocm9tZUNsaWVudElt
cGw6OnRvb2xiYXJzVmlzaWJsZSgpCit7CisgICAgcmV0dXJuIG1fdG9vbGJhcnNWaXNpYmxlOwor
fQorCit2b2lkIENocm9tZUNsaWVudEltcGw6OnNldFN0YXR1c2JhclZpc2libGUoYm9vbCB2YWx1
ZSkKK3sKKyAgICBtX3N0YXR1c2JhclZpc2libGUgPSB2YWx1ZTsKK30KKworYm9vbCBDaHJvbWVD
bGllbnRJbXBsOjpzdGF0dXNiYXJWaXNpYmxlKCkKK3sKKyAgICByZXR1cm4gbV9zdGF0dXNiYXJW
aXNpYmxlOworfQorCit2b2lkIENocm9tZUNsaWVudEltcGw6OnNldFNjcm9sbGJhcnNWaXNpYmxl
KGJvb2wgdmFsdWUpCit7CisgICAgbV9zY3JvbGxiYXJzVmlzaWJsZSA9IHZhbHVlOworICAgIFdl
YkZyYW1lSW1wbCogd2ViX2ZyYW1lID0gc3RhdGljX2Nhc3Q8V2ViRnJhbWVJbXBsKj4obV93ZWJW
aWV3LT5tYWluRnJhbWUoKSk7CisgICAgaWYgKHdlYl9mcmFtZSkKKyAgICAgICAgd2ViX2ZyYW1l
LT5zZXRBbGxvd3NTY3JvbGxpbmcodmFsdWUpOworfQorCitib29sIENocm9tZUNsaWVudEltcGw6
OnNjcm9sbGJhcnNWaXNpYmxlKCkKK3sKKyAgICByZXR1cm4gbV9zY3JvbGxiYXJzVmlzaWJsZTsK
K30KKwordm9pZCBDaHJvbWVDbGllbnRJbXBsOjpzZXRNZW51YmFyVmlzaWJsZShib29sIHZhbHVl
KQoreworICAgIG1fbWVudWJhclZpc2libGUgPSB2YWx1ZTsKK30KKworYm9vbCBDaHJvbWVDbGll
bnRJbXBsOjptZW51YmFyVmlzaWJsZSgpCit7CisgICAgcmV0dXJuIG1fbWVudWJhclZpc2libGU7
Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50SW1wbDo6c2V0UmVzaXphYmxlKGJvb2wgdmFsdWUpCit7
CisgICAgbV9yZXNpemFibGUgPSB2YWx1ZTsKK30KKwordm9pZCBDaHJvbWVDbGllbnRJbXBsOjph
ZGRNZXNzYWdlVG9Db25zb2xlKE1lc3NhZ2VTb3VyY2Ugc291cmNlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VUeXBlIHR5cGUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZUxldmVsIGxldmVsLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgbWVz
c2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFN0cmluZyYgc291cmNlSUQpCit7CisgICAgaWYgKG1fd2ViVmlldy0+Y2xpZW50KCkp
IHsKKyAgICAgICAgbV93ZWJWaWV3LT5jbGllbnQoKS0+ZGlkQWRkTWVzc2FnZVRvQ29uc29sZSgK
KyAgICAgICAgICAgIFdlYkNvbnNvbGVNZXNzYWdlKHN0YXRpY19jYXN0PFdlYkNvbnNvbGVNZXNz
YWdlOjpMZXZlbD4obGV2ZWwpLCBtZXNzYWdlKSwKKyAgICAgICAgICAgIHNvdXJjZUlELAorICAg
ICAgICAgICAgbGluZU51bWJlcik7CisgICAgfQorfQorCitib29sIENocm9tZUNsaWVudEltcGw6
OmNhblJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbCgpCit7CisgICAgcmV0dXJuICEhbV93ZWJW
aWV3LT5jbGllbnQoKTsKK30KKworYm9vbCBDaHJvbWVDbGllbnRJbXBsOjpydW5CZWZvcmVVbmxv
YWRDb25maXJtUGFuZWwoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBGcmFtZSogZnJhbWUpCit7Cisg
ICAgaWYgKG1fd2ViVmlldy0+Y2xpZW50KCkpIHsKKyAgICAgICAgcmV0dXJuIG1fd2ViVmlldy0+
Y2xpZW50KCktPnJ1bk1vZGFsQmVmb3JlVW5sb2FkRGlhbG9nKAorICAgICAgICAgICAgV2ViRnJh
bWVJbXBsOjpmcm9tRnJhbWUoZnJhbWUpLCBtZXNzYWdlKTsKKyAgICB9CisgICAgcmV0dXJuIGZh
bHNlOworfQorCit2b2lkIENocm9tZUNsaWVudEltcGw6OmNsb3NlV2luZG93U29vbigpCit7Cisg
ICAgLy8gTWFrZSBzdXJlIHRoaXMgUGFnZSBjYW4gbm8gbG9uZ2VyIGJlIGZvdW5kIGJ5IEpTLgor
ICAgIG1fd2ViVmlldy0+cGFnZSgpLT5zZXRHcm91cE5hbWUoU3RyaW5nKCkpOworCisgICAgLy8g
TWFrZSBzdXJlIHRoYXQgYWxsIGxvYWRpbmcgaXMgc3RvcHBlZC4gIEVuc3VyZXMgdGhhdCBKUyBz
dG9wcyBleGVjdXRpbmchCisgICAgbV93ZWJWaWV3LT5tYWluRnJhbWUoKS0+c3RvcExvYWRpbmco
KTsKKworICAgIGlmIChtX3dlYlZpZXctPmNsaWVudCgpKQorICAgICAgICBtX3dlYlZpZXctPmNs
aWVudCgpLT5jbG9zZVdpZGdldFNvb24oKTsKK30KKworLy8gQWx0aG91Z2ggYSBGcmFtZSBpcyBw
YXNzZWQgaW4sIHdlIGRvbid0IGFjdHVhbGx5IHVzZSBpdCwgc2luY2Ugd2UKKy8vIGFscmVhZHkg
a25vdyBvdXIgb3duIG1fd2ViVmlldy4KK3ZvaWQgQ2hyb21lQ2xpZW50SW1wbDo6cnVuSmF2YVNj
cmlwdEFsZXJ0KEZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIGlm
IChtX3dlYlZpZXctPmNsaWVudCgpKSB7CisjaWYgVVNFKFY4KQorICAgICAgICAvLyBCZWZvcmUg
c2hvd2luZyB0aGUgSmF2YVNjcmlwdCBkaWFsb2csIHdlIGdpdmUgdGhlIHByb3h5IGltcGxlbWVu
dGF0aW9uCisgICAgICAgIC8vIGEgY2hhbmNlIHRvIHByb2Nlc3MgYW55IHBlbmRpbmcgY29uc29s
ZSBtZXNzYWdlcy4KKyAgICAgICAgVjhQcm94eTo6cHJvY2Vzc0NvbnNvbGVNZXNzYWdlcygpOwor
I2VuZGlmCisgICAgICAgIG1fd2ViVmlldy0+Y2xpZW50KCktPnJ1bk1vZGFsQWxlcnREaWFsb2co
CisgICAgICAgICAgICBXZWJGcmFtZUltcGw6OmZyb21GcmFtZShmcmFtZSksIG1lc3NhZ2UpOwor
ICAgIH0KK30KKworLy8gU2VlIGNvbW1lbnRzIGZvciBydW5KYXZhU2NyaXB0QWxlcnQoKS4KK2Jv
b2wgQ2hyb21lQ2xpZW50SW1wbDo6cnVuSmF2YVNjcmlwdENvbmZpcm0oRnJhbWUqIGZyYW1lLCBj
b25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgaWYgKG1fd2ViVmlldy0+Y2xpZW50KCkpIHsK
KyAgICAgICAgcmV0dXJuIG1fd2ViVmlldy0+Y2xpZW50KCktPnJ1bk1vZGFsQ29uZmlybURpYWxv
ZygKKyAgICAgICAgICAgIFdlYkZyYW1lSW1wbDo6ZnJvbUZyYW1lKGZyYW1lKSwgbWVzc2FnZSk7
CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworLy8gU2VlIGNvbW1lbnRzIGZvciBydW5K
YXZhU2NyaXB0QWxlcnQoKS4KK2Jvb2wgQ2hyb21lQ2xpZW50SW1wbDo6cnVuSmF2YVNjcmlwdFBy
b21wdChGcmFtZSogZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgU3RyaW5nJiBtZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgZGVmYXVsdFZhbHVlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyYgcmVzdWx0KQoreworICAgIGlm
IChtX3dlYlZpZXctPmNsaWVudCgpKSB7CisgICAgICAgIFdlYlN0cmluZyBhY3R1YWxWYWx1ZTsK
KyAgICAgICAgYm9vbCBvayA9IG1fd2ViVmlldy0+Y2xpZW50KCktPnJ1bk1vZGFsUHJvbXB0RGlh
bG9nKAorICAgICAgICAgICAgV2ViRnJhbWVJbXBsOjpmcm9tRnJhbWUoZnJhbWUpLAorICAgICAg
ICAgICAgbWVzc2FnZSwKKyAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSwKKyAgICAgICAgICAgICZh
Y3R1YWxWYWx1ZSk7CisgICAgICAgIGlmIChvaykKKyAgICAgICAgICAgIHJlc3VsdCA9IGFjdHVh
bFZhbHVlOworICAgICAgICByZXR1cm4gb2s7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30K
Kwordm9pZCBDaHJvbWVDbGllbnRJbXBsOjpzZXRTdGF0dXNiYXJUZXh0KGNvbnN0IFN0cmluZyYg
bWVzc2FnZSkKK3sKKyAgICBpZiAobV93ZWJWaWV3LT5jbGllbnQoKSkKKyAgICAgICAgbV93ZWJW
aWV3LT5jbGllbnQoKS0+c2V0U3RhdHVzVGV4dChtZXNzYWdlKTsKK30KKworYm9vbCBDaHJvbWVD
bGllbnRJbXBsOjpzaG91bGRJbnRlcnJ1cHRKYXZhU2NyaXB0KCkKK3sKKyAgICAvLyBGSVhNRTog
aW1wbGVtZW50IG1lCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIENocm9tZUNsaWVudElt
cGw6OnRhYnNUb0xpbmtzKCkgY29uc3QKK3sKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgYW5jaG9y
cyBzaG91bGQgYWNjZXB0IGtleWJvYXJkIGZvY3VzIHdpdGggdGhlIHRhYiBrZXkuCisgICAgLy8g
VGhpcyBtZXRob2QgaXMgdXNlZCBpbiBhIGNvbnZvbHV0ZWQgZmFzaGlvbiBieSBFdmVudEhhbmRs
ZXI6OnRhYnNUb0xpbmtzLgorICAgIC8vIEl0J3MgYSB0d2lzdGVkIHBhdGggKHNlbGYtZXZpZGVu
dCwgYnV0IG1vcmUgY29tcGxpY2F0ZWQgdGhhbiBzZWVtcworICAgIC8vIG5lY2Vzc2FyeSksIGJ1
dCB0aGUgbmV0IHJlc3VsdCBpcyB0aGF0IHJldHVybmluZyB0cnVlIGZyb20gaGVyZSwgb24gYQor
ICAgIC8vIHBsYXRmb3JtIG90aGVyIHRoYW4gTUFDIG9yIFFULCBsZXRzIGFuY2hvcnMgZ2V0IGtl
eWJvYXJkIGZvY3VzLgorICAgIHJldHVybiBtX3dlYlZpZXctPnRhYnNUb0xpbmtzKCk7Cit9CisK
K0ludFJlY3QgQ2hyb21lQ2xpZW50SW1wbDo6d2luZG93UmVzaXplclJlY3QoKSBjb25zdAorewor
ICAgIEludFJlY3QgcmVzdWx0OworICAgIGlmIChtX3dlYlZpZXctPmNsaWVudCgpKQorICAgICAg
ICByZXN1bHQgPSBtX3dlYlZpZXctPmNsaWVudCgpLT53aW5kb3dSZXNpemVyUmVjdCgpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50SW1wbDo6cmVwYWludCgKKyAg
ICBjb25zdCBJbnRSZWN0JiBwYWludFJlY3QsIGJvb2wgY29udGVudENoYW5nZWQsIGJvb2wgaW1t
ZWRpYXRlLAorICAgIGJvb2wgcmVwYWludENvbnRlbnRPbmx5KQoreworICAgIC8vIElnbm9yZSBz
cHVyaW91cyBjYWxscy4KKyAgICBpZiAoIWNvbnRlbnRDaGFuZ2VkIHx8IHBhaW50UmVjdC5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAobV93ZWJWaWV3LT5jbGllbnQoKSkKKyAg
ICAgICAgbV93ZWJWaWV3LT5jbGllbnQoKS0+ZGlkSW52YWxpZGF0ZVJlY3QocGFpbnRSZWN0KTsK
K30KKwordm9pZCBDaHJvbWVDbGllbnRJbXBsOjpzY3JvbGwoCisgICAgY29uc3QgSW50U2l6ZSYg
c2Nyb2xsRGVsdGEsIGNvbnN0IEludFJlY3QmIHNjcm9sbFJlY3QsCisgICAgY29uc3QgSW50UmVj
dCYgY2xpcFJlY3QpCit7CisgICAgaWYgKG1fd2ViVmlldy0+Y2xpZW50KCkpIHsKKyAgICAgICAg
aW50IGR4ID0gc2Nyb2xsRGVsdGEud2lkdGgoKTsKKyAgICAgICAgaW50IGR5ID0gc2Nyb2xsRGVs
dGEuaGVpZ2h0KCk7CisgICAgICAgIG1fd2ViVmlldy0+Y2xpZW50KCktPmRpZFNjcm9sbFJlY3Qo
ZHgsIGR5LCBjbGlwUmVjdCk7CisgICAgfQorfQorCitJbnRQb2ludCBDaHJvbWVDbGllbnRJbXBs
OjpzY3JlZW5Ub1dpbmRvdyhjb25zdCBJbnRQb2ludCYpIGNvbnN0Cit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gSW50UG9pbnQoKTsKK30KKworSW50UmVjdCBDaHJvbWVDbGll
bnRJbXBsOjp3aW5kb3dUb1NjcmVlbihjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAoreworICAg
IEludFJlY3Qgc2NyZWVuUmVjdChyZWN0KTsKKworICAgIGlmIChtX3dlYlZpZXctPmNsaWVudCgp
KSB7CisgICAgICAgIFdlYlJlY3Qgd2luZG93UmVjdCA9IG1fd2ViVmlldy0+Y2xpZW50KCktPndp
bmRvd1JlY3QoKTsKKyAgICAgICAgc2NyZWVuUmVjdC5tb3ZlKHdpbmRvd1JlY3QueCwgd2luZG93
UmVjdC55KTsKKyAgICB9CisKKyAgICByZXR1cm4gc2NyZWVuUmVjdDsKK30KKwordm9pZCBDaHJv
bWVDbGllbnRJbXBsOjpjb250ZW50c1NpemVDaGFuZ2VkKEZyYW1lKiBmcmFtZSwgY29uc3QgSW50
U2l6ZSYgc2l6ZSkgY29uc3QKK3sKKyAgICBXZWJGcmFtZUltcGwqIHdlYmZyYW1lID0gV2ViRnJh
bWVJbXBsOjpmcm9tRnJhbWUoZnJhbWUpOworICAgIGlmICh3ZWJmcmFtZS0+Y2xpZW50KCkpCisg
ICAgICAgIHdlYmZyYW1lLT5jbGllbnQoKS0+ZGlkQ2hhbmdlQ29udGVudHNTaXplKHdlYmZyYW1l
LCBzaXplKTsKK30KKwordm9pZCBDaHJvbWVDbGllbnRJbXBsOjpzY3JvbGxiYXJzTW9kZURpZENo
YW5nZSgpIGNvbnN0Cit7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50SW1wbDo6bW91c2VEaWRNb3Zl
T3ZlckVsZW1lbnQoCisgICAgY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCB1bnNpZ25lZCBt
b2RpZmllckZsYWdzKQoreworICAgIGlmICghbV93ZWJWaWV3LT5jbGllbnQoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIC8vIEZpbmQgb3V0IGlmIHRoZSBtb3VzZSBpcyBvdmVyIGEgbGluaywgYW5k
IGlmIHNvLCBsZXQgb3VyIFVJIGtub3cuLi4KKyAgICBpZiAocmVzdWx0LmlzTGl2ZUxpbmsoKSAm
JiAhcmVzdWx0LmFic29sdXRlTGlua1VSTCgpLnN0cmluZygpLmlzRW1wdHkoKSkKKyAgICAgICAg
bV93ZWJWaWV3LT5jbGllbnQoKS0+c2V0TW91c2VPdmVyVVJMKHJlc3VsdC5hYnNvbHV0ZUxpbmtV
UkwoKSk7CisgICAgZWxzZQorICAgICAgICBtX3dlYlZpZXctPmNsaWVudCgpLT5zZXRNb3VzZU92
ZXJVUkwoV2ViVVJMKCkpOworfQorCit2b2lkIENocm9tZUNsaWVudEltcGw6OnNldFRvb2xUaXAo
Y29uc3QgU3RyaW5nJiB0b29sdGlwVGV4dCwgVGV4dERpcmVjdGlvbiBkaXIpCit7CisgICAgaWYg
KCFtX3dlYlZpZXctPmNsaWVudCgpKQorICAgICAgICByZXR1cm47CisgICAgV2ViVGV4dERpcmVj
dGlvbiB0ZXh0RGlyZWN0aW9uID0gKGRpciA9PSBSVEwpID8KKyAgICAgICAgV2ViVGV4dERpcmVj
dGlvblJpZ2h0VG9MZWZ0IDoKKyAgICAgICAgV2ViVGV4dERpcmVjdGlvbkxlZnRUb1JpZ2h0Owor
ICAgIG1fd2ViVmlldy0+Y2xpZW50KCktPnNldFRvb2xUaXBUZXh0KAorICAgICAgICB0b29sdGlw
VGV4dCwgdGV4dERpcmVjdGlvbik7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50SW1wbDo6cHJpbnQo
RnJhbWUqIGZyYW1lKQoreworICAgIGlmIChtX3dlYlZpZXctPmNsaWVudCgpKQorICAgICAgICBt
X3dlYlZpZXctPmNsaWVudCgpLT5wcmludFBhZ2UoV2ViRnJhbWVJbXBsOjpmcm9tRnJhbWUoZnJh
bWUpKTsKK30KKwordm9pZCBDaHJvbWVDbGllbnRJbXBsOjpleGNlZWRlZERhdGFiYXNlUXVvdGEo
RnJhbWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSkKK3sKKyAgICAvLyBzZXQg
YSByZWFzb25hYmxlIHF1b3RhIGZvciBub3cgLS0gNU1iIHNob3VsZCBiZSBlbm91Z2ggZm9yIGFu
eWJvZHkKKyAgICAvLyBUT0RPKGRnbGF6a292KTogdGhpcyBzaG91bGQgYmUgY29uZmlndXJhYmxl
CisgICAgU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiA9IGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0
eU9yaWdpbigpOworICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnNldFF1b3RhKG9yaWdp
biwgMTAyNCAqIDEwMjQgKiA1KTsKK30KKworI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNB
VElPTlMpCit2b2lkIENocm9tZUNsaWVudEltcGw6OnJlYWNoZWRNYXhBcHBDYWNoZVNpemUoaW50
NjRfdCBzcGFjZU5lZWRlZCkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKyNlbmRp
ZgorCit2b2lkIENocm9tZUNsaWVudEltcGw6OnJ1bk9wZW5QYW5lbChGcmFtZSogZnJhbWUsIFBh
c3NSZWZQdHI8RmlsZUNob29zZXI+IGZpbGVDaG9vc2VyKQoreworICAgIFdlYlZpZXdDbGllbnQq
IGNsaWVudCA9IG1fd2ViVmlldy0+Y2xpZW50KCk7CisgICAgaWYgKCFjbGllbnQpCisgICAgICAg
IHJldHVybjsKKworICAgIGJvb2wgbXVsdGlwbGVGaWxlcyA9IGZpbGVDaG9vc2VyLT5hbGxvd3NN
dWx0aXBsZUZpbGVzKCk7CisKKyAgICBXZWJTdHJpbmcgc3VnZ2VzdGlvbjsKKyAgICBpZiAoZmls
ZUNob29zZXItPmZpbGVuYW1lcygpLnNpemUoKSA+IDApCisgICAgICAgIHN1Z2dlc3Rpb24gPSBm
aWxlQ2hvb3Nlci0+ZmlsZW5hbWVzKClbMF07CisKKyAgICBXZWJGaWxlQ2hvb3NlckNvbXBsZXRp
b25JbXBsKiBjaG9vc2VyQ29tcGxldGlvbiA9CisgICAgICAgIG5ldyBXZWJGaWxlQ2hvb3NlckNv
bXBsZXRpb25JbXBsKGZpbGVDaG9vc2VyKTsKKyAgICBib29sIG9rID0gY2xpZW50LT5ydW5GaWxl
Q2hvb3NlcihtdWx0aXBsZUZpbGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFdlYlN0cmluZygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1
Z2dlc3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvb3NlckNv
bXBsZXRpb24pOworICAgIGlmICghb2spIHsKKyAgICAgICAgLy8gQ2hvb3NpbmcgZmFpbGVkLCBz
byBkbyBjYWxsYmFjayB3aXRoIGFuIGVtcHR5IGxpc3QuCisgICAgICAgIGNob29zZXJDb21wbGV0
aW9uLT5kaWRDaG9vc2VGaWxlKFdlYlZlY3RvcjxXZWJTdHJpbmc+KCkpOworICAgIH0KK30KKwor
dm9pZCBDaHJvbWVDbGllbnRJbXBsOjpwb3B1cE9wZW5lZChQb3B1cENvbnRhaW5lciogcG9wdXBD
b250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFJl
Y3QmIGJvdW5kcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhY3Rp
dmF0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYW5kbGVF
eHRlcm5hbGx5KQoreworICAgIGlmICghbV93ZWJWaWV3LT5jbGllbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgV2ViV2lkZ2V0KiB3ZWJ3aWRnZXQ7CisgICAgaWYgKGhhbmRsZUV4dGVybmFs
bHkpIHsKKyAgICAgICAgV2ViUG9wdXBNZW51SW5mbyBwb3B1cEluZm87CisgICAgICAgIGdldFBv
cHVwTWVudUluZm8ocG9wdXBDb250YWluZXIsICZwb3B1cEluZm8pOworICAgICAgICB3ZWJ3aWRn
ZXQgPSBtX3dlYlZpZXctPmNsaWVudCgpLT5jcmVhdGVQb3B1cE1lbnUocG9wdXBJbmZvKTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgd2Vid2lkZ2V0ID0gbV93ZWJWaWV3LT5jbGllbnQoKS0+Y3JlYXRl
UG9wdXBNZW51KGFjdGl2YXRhYmxlKTsKKworICAgIHN0YXRpY19jYXN0PFdlYlBvcHVwTWVudUlt
cGwqPih3ZWJ3aWRnZXQpLT5Jbml0KHBvcHVwQ29udGFpbmVyLCBib3VuZHMpOworfQorCit2b2lk
IENocm9tZUNsaWVudEltcGw6OnNldEN1cnNvcihjb25zdCBXZWJDdXJzb3JJbmZvJiBjdXJzb3Ip
Cit7CisgICAgaWYgKG1faWdub3JlTmV4dFNldEN1cnNvcikgeworICAgICAgICBtX2lnbm9yZU5l
eHRTZXRDdXJzb3IgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICht
X3dlYlZpZXctPmNsaWVudCgpKQorICAgICAgICBtX3dlYlZpZXctPmNsaWVudCgpLT5kaWRDaGFu
Z2VDdXJzb3IoY3Vyc29yKTsKK30KKwordm9pZCBDaHJvbWVDbGllbnRJbXBsOjpzZXRDdXJzb3JG
b3JQbHVnaW4oY29uc3QgV2ViQ3Vyc29ySW5mbyYgY3Vyc29yKQoreworICAgIHNldEN1cnNvcihj
dXJzb3IpOworCisgICAgLy8gQ3VycmVudGx5LCBXaWRnZXQ6OnNldEN1cnNvciBpcyBhbHdheXMg
Y2FsbGVkIGFmdGVyIHRoaXMgZnVuY3Rpb24gaW4KKyAgICAvLyBFdmVudEhhbmRsZXIuY3BwIGFu
ZCBzaW5jZSB3ZSBkb24ndCB3YW50IHRoYXQgd2Ugc2V0IGEgZmxhZyBpbmRpY2F0aW5nCisgICAg
Ly8gdGhhdCB0aGUgbmV4dCBTZXRDdXJzb3IgY2FsbCBpcyB0byBiZSBpZ25vcmVkLgorICAgIG1f
aWdub3JlTmV4dFNldEN1cnNvciA9IHRydWU7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50SW1wbDo6
Zm9ybVN0YXRlRGlkQ2hhbmdlKGNvbnN0IE5vZGUqIG5vZGUpCit7CisgICAgLy8gVGhlIGN1cnJl
bnQgaGlzdG9yeSBpdGVtIGlzIG5vdCB1cGRhdGVkIHlldC4gIFRoYXQgaGFwcGVucyBsYXppbHkg
d2hlbgorICAgIC8vIFdlYkZyYW1lOjpjdXJyZW50SGlzdG9yeUl0ZW0gaXMgcmVxdWVzdGVkLgor
ICAgIFdlYkZyYW1lSW1wbCogd2ViZnJhbWUgPSBXZWJGcmFtZUltcGw6OmZyb21GcmFtZShub2Rl
LT5kb2N1bWVudCgpLT5mcmFtZSgpKTsKKyAgICBpZiAod2ViZnJhbWUtPmNsaWVudCgpKQorICAg
ICAgICB3ZWJmcmFtZS0+Y2xpZW50KCktPmRpZFVwZGF0ZUN1cnJlbnRIaXN0b3J5SXRlbSh3ZWJm
cmFtZSk7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50SW1wbDo6Z2V0UG9wdXBNZW51SW5mbyhQb3B1
cENvbnRhaW5lciogcG9wdXBDb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgV2ViUG9wdXBNZW51SW5mbyogaW5mbykKK3sKKyAgICBjb25zdCBWZWN0b3I8
UG9wdXBJdGVtKj4mIGlucHV0SXRlbXMgPSBwb3B1cENvbnRhaW5lci0+cG9wdXBEYXRhKCk7CisK
KyAgICBXZWJWZWN0b3I8V2ViUG9wdXBNZW51SW5mbzo6SXRlbT4gb3V0cHV0SXRlbXMoaW5wdXRJ
dGVtcy5zaXplKCkpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbnB1dEl0ZW1zLnNp
emUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IFBvcHVwSXRlbSYgaW5wdXRJdGVtID0gKmlucHV0
SXRlbXNbaV07CisgICAgICAgIFdlYlBvcHVwTWVudUluZm86Okl0ZW0mIG91dHB1dEl0ZW0gPSBv
dXRwdXRJdGVtc1tpXTsKKworICAgICAgICBvdXRwdXRJdGVtLmxhYmVsID0gaW5wdXRJdGVtLmxh
YmVsOworICAgICAgICBvdXRwdXRJdGVtLmVuYWJsZWQgPSBpbnB1dEl0ZW0uZW5hYmxlZDsKKwor
ICAgICAgICBzd2l0Y2ggKGlucHV0SXRlbS50eXBlKSB7CisgICAgICAgIGNhc2UgUG9wdXBJdGVt
OjpUeXBlT3B0aW9uOgorICAgICAgICAgICAgb3V0cHV0SXRlbS50eXBlID0gV2ViUG9wdXBNZW51
SW5mbzo6SXRlbTo6T3B0aW9uOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUG9w
dXBJdGVtOjpUeXBlR3JvdXA6CisgICAgICAgICAgICBvdXRwdXRJdGVtLnR5cGUgPSBXZWJQb3B1
cE1lbnVJbmZvOjpJdGVtOjpHcm91cDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFBvcHVwSXRlbTo6VHlwZVNlcGFyYXRvcjoKKyAgICAgICAgICAgIG91dHB1dEl0ZW0udHlwZSA9
IFdlYlBvcHVwTWVudUluZm86Okl0ZW06OlNlcGFyYXRvcjsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBpbmZvLT5pdGVtSGVpZ2h0ID0gcG9wdXBDb250YWluZXItPm1l
bnVJdGVtSGVpZ2h0KCk7CisgICAgaW5mby0+c2VsZWN0ZWRJbmRleCA9IHBvcHVwQ29udGFpbmVy
LT5zZWxlY3RlZEluZGV4KCk7CisgICAgaW5mby0+aXRlbXMuc3dhcChvdXRwdXRJdGVtcyk7Cit9
CisKKyNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykKK05vdGlmaWNhdGlvblByZXNlbnRlciogQ2hy
b21lQ2xpZW50SW1wbDo6bm90aWZpY2F0aW9uUHJlc2VudGVyKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV93ZWJWaWV3LT5ub3RpZmljYXRpb25QcmVzZW50ZXJJbXBsKCk7Cit9CisjZW5kaWYKKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL0No
cm9tZUNsaWVudEltcGwuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhMWU5Y2MKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuaApAQCAtMCwwICsx
LDE1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0Ogor
ICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisg
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgQ2hyb21lQ2xpZW50SW1wbF9oCisjZGVmaW5lIENocm9tZUNsaWVudElt
cGxfaAorCisjaW5jbHVkZSAiQ2hyb21lQ2xpZW50Q2hyb21pdW0uaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworY2xhc3MgSFRNTFBhcnNlclF1aXJrczsKK2NsYXNzIFBvcHVwQ29udGFpbmVyOwor
Y2xhc3MgU2VjdXJpdHlPcmlnaW47CitzdHJ1Y3QgV2luZG93RmVhdHVyZXM7Cit9CisKK25hbWVz
cGFjZSBXZWJLaXQgeworY2xhc3MgV2ViVmlld0ltcGw7CitzdHJ1Y3QgV2ViQ3Vyc29ySW5mbzsK
K3N0cnVjdCBXZWJQb3B1cE1lbnVJbmZvOworCisvLyBIYW5kbGVzIHdpbmRvdy1sZXZlbCBub3Rp
ZmljYXRpb25zIGZyb20gV2ViQ29yZSBvbiBiZWhhbGYgb2YgYSBXZWJWaWV3LgorY2xhc3MgQ2hy
b21lQ2xpZW50SW1wbCA6IHB1YmxpYyBXZWJDb3JlOjpDaHJvbWVDbGllbnRDaHJvbWl1bSB7Citw
dWJsaWM6CisgICAgZXhwbGljaXQgQ2hyb21lQ2xpZW50SW1wbChXZWJWaWV3SW1wbCogd2ViVmll
dyk7CisgICAgdmlydHVhbCB+Q2hyb21lQ2xpZW50SW1wbCgpOworCisgICAgV2ViVmlld0ltcGwq
IHdlYlZpZXcoKSBjb25zdCB7IHJldHVybiBtX3dlYlZpZXc7IH0KKworICAgIC8vIENocm9tZUNs
aWVudCBtZXRob2RzOgorICAgIHZpcnR1YWwgdm9pZCBjaHJvbWVEZXN0cm95ZWQoKTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0V2luZG93UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKKyAg
ICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCB3aW5kb3dSZWN0KCk7CisgICAgdmlydHVhbCBX
ZWJDb3JlOjpGbG9hdFJlY3QgcGFnZVJlY3QoKTsKKyAgICB2aXJ0dWFsIGZsb2F0IHNjYWxlRmFj
dG9yKCk7CisgICAgdmlydHVhbCB2b2lkIGZvY3VzKCk7CisgICAgdmlydHVhbCB2b2lkIHVuZm9j
dXMoKTsKKyAgICB2aXJ0dWFsIGJvb2wgY2FuVGFrZUZvY3VzKFdlYkNvcmU6OkZvY3VzRGlyZWN0
aW9uKTsKKyAgICB2aXJ0dWFsIHZvaWQgdGFrZUZvY3VzKFdlYkNvcmU6OkZvY3VzRGlyZWN0aW9u
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZm9jdXNlZE5vZGVDaGFuZ2VkKFdlYkNvcmU6Ok5vZGUqKTsK
KyAgICB2aXJ0dWFsIFdlYkNvcmU6OlBhZ2UqIGNyZWF0ZVdpbmRvdygKKyAgICAgICAgV2ViQ29y
ZTo6RnJhbWUqLCBjb25zdCBXZWJDb3JlOjpGcmFtZUxvYWRSZXF1ZXN0JiwgY29uc3QgV2ViQ29y
ZTo6V2luZG93RmVhdHVyZXMmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2hvdygpOworICAgIHZpcnR1
YWwgYm9vbCBjYW5SdW5Nb2RhbCgpOworICAgIHZpcnR1YWwgdm9pZCBydW5Nb2RhbCgpOworICAg
IHZpcnR1YWwgdm9pZCBzZXRUb29sYmFyc1Zpc2libGUoYm9vbCk7CisgICAgdmlydHVhbCBib29s
IHRvb2xiYXJzVmlzaWJsZSgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRTdGF0dXNiYXJWaXNpYmxl
KGJvb2wpOworICAgIHZpcnR1YWwgYm9vbCBzdGF0dXNiYXJWaXNpYmxlKCk7CisgICAgdmlydHVh
bCB2b2lkIHNldFNjcm9sbGJhcnNWaXNpYmxlKGJvb2wpOworICAgIHZpcnR1YWwgYm9vbCBzY3Jv
bGxiYXJzVmlzaWJsZSgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRNZW51YmFyVmlzaWJsZShib29s
KTsKKyAgICB2aXJ0dWFsIGJvb2wgbWVudWJhclZpc2libGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0UmVzaXphYmxlKGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCBhZGRNZXNzYWdlVG9Db25zb2xl
KAorICAgICAgICBXZWJDb3JlOjpNZXNzYWdlU291cmNlLCBXZWJDb3JlOjpNZXNzYWdlVHlwZSwg
V2ViQ29yZTo6TWVzc2FnZUxldmVsLAorICAgICAgICBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIG1l
c3NhZ2UsIHVuc2lnbmVkIGxpbmVOdW1iZXIsCisgICAgICAgIGNvbnN0IFdlYkNvcmU6OlN0cmlu
ZyYgc291cmNlSUQpOworICAgIHZpcnR1YWwgYm9vbCBjYW5SdW5CZWZvcmVVbmxvYWRDb25maXJt
UGFuZWwoKTsKKyAgICB2aXJ0dWFsIGJvb2wgcnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKAor
ICAgICAgICBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIG1lc3NhZ2UsIFdlYkNvcmU6OkZyYW1lKik7
CisgICAgdmlydHVhbCB2b2lkIGNsb3NlV2luZG93U29vbigpOworICAgIHZpcnR1YWwgdm9pZCBy
dW5KYXZhU2NyaXB0QWxlcnQoV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBXZWJDb3JlOjpTdHJpbmcm
KTsKKyAgICB2aXJ0dWFsIGJvb2wgcnVuSmF2YVNjcmlwdENvbmZpcm0oV2ViQ29yZTo6RnJhbWUq
LCBjb25zdCBXZWJDb3JlOjpTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcnVuSmF2YVNjcmlw
dFByb21wdCgKKyAgICAgICAgV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBXZWJDb3JlOjpTdHJpbmcm
IG1lc3NhZ2UsCisgICAgICAgIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgZGVmYXVsdFZhbHVlLCBX
ZWJDb3JlOjpTdHJpbmcmIHJlc3VsdCk7CisgICAgdmlydHVhbCB2b2lkIHNldFN0YXR1c2JhclRl
eHQoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBtZXNzYWdlKTsKKyAgICB2aXJ0dWFsIGJvb2wgc2hv
dWxkSW50ZXJydXB0SmF2YVNjcmlwdCgpOworICAgIHZpcnR1YWwgYm9vbCB0YWJzVG9MaW5rcygp
IGNvbnN0OworICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCB3aW5kb3dSZXNpemVyUmVjdCgp
IGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCByZXBhaW50KAorICAgICAgICBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiwgYm9vbCBjb250ZW50Q2hhbmdlZCwgYm9vbCBpbW1lZGlhdGUgPSBmYWxzZSwK
KyAgICAgICAgYm9vbCByZXBhaW50Q29udGVudE9ubHkgPSBmYWxzZSk7CisgICAgdmlydHVhbCB2
b2lkIHNjcm9sbCgKKyAgICAgICAgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsRGVsdGEs
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3RUb1Njcm9sbCwKKyAgICAgICAgY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYgY2xpcFJlY3QpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UG9pbnQg
c2NyZWVuVG9XaW5kb3coY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBjb25zdDsKKyAgICB2aXJ0
dWFsIFdlYkNvcmU6OkludFJlY3Qgd2luZG93VG9TY3JlZW4oY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYpIGNvbnN0OworICAgIHZpcnR1YWwgUGxhdGZvcm1QYWdlQ2xpZW50IHBsYXRmb3JtUGFnZUNs
aWVudCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY29udGVudHNTaXpl
Q2hhbmdlZChXZWJDb3JlOjpGcmFtZSosIGNvbnN0IFdlYkNvcmU6OkludFNpemUmKSBjb25zdDsK
KyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsUmVjdEludG9WaWV3KAorICAgICAgICBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiwgY29uc3QgV2ViQ29yZTo6U2Nyb2xsVmlldyopIGNvbnN0IHsgfQorICAg
IHZpcnR1YWwgdm9pZCBzY3JvbGxiYXJzTW9kZURpZENoYW5nZSgpIGNvbnN0OworICAgIHZpcnR1
YWwgdm9pZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVudCgKKyAgICAgICAgY29uc3QgV2ViQ29yZTo6
SGl0VGVzdFJlc3VsdCYgcmVzdWx0LCB1bnNpZ25lZCBtb2RpZmllckZsYWdzKTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0VG9vbFRpcChjb25zdCBXZWJDb3JlOjpTdHJpbmcmIHRvb2x0aXBUZXh0LCBX
ZWJDb3JlOjpUZXh0RGlyZWN0aW9uKTsKKyAgICB2aXJ0dWFsIHZvaWQgcHJpbnQoV2ViQ29yZTo6
RnJhbWUqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZXhjZWVkZWREYXRhYmFzZVF1b3RhKAorICAgICAg
ICBXZWJDb3JlOjpGcmFtZSosIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgZGF0YWJhc2VOYW1lKTsK
KyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorICAgIHZpcnR1YWwgdm9pZCBy
ZWFjaGVkTWF4QXBwQ2FjaGVTaXplKGludDY0X3Qgc3BhY2VOZWVkZWQpOworI2VuZGlmCisjaWYg
RU5BQkxFKE5PVElGSUNBVElPTlMpCisgICAgdmlydHVhbCBXZWJDb3JlOjpOb3RpZmljYXRpb25Q
cmVzZW50ZXIqIG5vdGlmaWNhdGlvblByZXNlbnRlcigpIGNvbnN0OworI2VuZGlmCisgICAgdmly
dHVhbCB2b2lkIHJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZSgKKyAgICAgICAg
V2ViQ29yZTo6RnJhbWUqLCBXZWJDb3JlOjpHZW9sb2NhdGlvbiopIHsgfQorICAgIHZpcnR1YWwg
dm9pZCBydW5PcGVuUGFuZWwoV2ViQ29yZTo6RnJhbWUqLCBQYXNzUmVmUHRyPFdlYkNvcmU6OkZp
bGVDaG9vc2VyPik7CisgICAgdmlydHVhbCBib29sIHNldEN1cnNvcihXZWJDb3JlOjpQbGF0Zm9y
bUN1cnNvckhhbmRsZSkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZm9ybVN0
YXRlRGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6Ok5vZGUqKTsKKyAgICB2aXJ0dWFsIFBhc3NPd25Q
dHI8V2ViQ29yZTo6SFRNTFBhcnNlclF1aXJrcz4gY3JlYXRlSFRNTFBhcnNlclF1aXJrcygpIHsg
cmV0dXJuIDA7IH0KKworICAgIC8vIENocm9tZUNsaWVudENocm9taXVtIG1ldGhvZHM6CisgICAg
dmlydHVhbCB2b2lkIHBvcHVwT3BlbmVkKFdlYkNvcmU6OlBvcHVwQ29udGFpbmVyKiBwb3B1cENv
bnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgYm91bmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFjdGl2YXRh
YmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGhhbmRsZUV4dGVybmFsbHkp
OworCisgICAgLy8gQ2hyb21lQ2xpZW50SW1wbDoKKyAgICB2b2lkIHNldEN1cnNvcihjb25zdCBX
ZWJDdXJzb3JJbmZvJiBjdXJzb3IpOworICAgIHZvaWQgc2V0Q3Vyc29yRm9yUGx1Z2luKGNvbnN0
IFdlYkN1cnNvckluZm8mIGN1cnNvcik7CisKK3ByaXZhdGU6CisgICAgdm9pZCBnZXRQb3B1cE1l
bnVJbmZvKFdlYkNvcmU6OlBvcHVwQ29udGFpbmVyKiwgV2ViUG9wdXBNZW51SW5mbyopOworCisg
ICAgV2ViVmlld0ltcGwqIG1fd2ViVmlldzsgIC8vIHdlYWsgcG9pbnRlcgorICAgIGJvb2wgbV90
b29sYmFyc1Zpc2libGU7CisgICAgYm9vbCBtX3N0YXR1c2JhclZpc2libGU7CisgICAgYm9vbCBt
X3Njcm9sbGJhcnNWaXNpYmxlOworICAgIGJvb2wgbV9tZW51YmFyVmlzaWJsZTsKKyAgICBib29s
IG1fcmVzaXphYmxlOworICAgIC8vIFNldCB0byB0cnVlIGlmIHRoZSBuZXh0IFNldEN1cnNvciBp
cyB0byBiZSBpZ25vcmVkLgorICAgIGJvb2wgbV9pZ25vcmVOZXh0U2V0Q3Vyc29yOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9t
aXVtL3NyYy9DaHJvbWl1bUJyaWRnZS5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9taXVt
QnJpZGdlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDYzYzVmCi0t
LSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWl1bUJyaWRnZS5jcHAK
QEAgLTAsMCArMSw2ODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2hyb21pdW1C
cmlkZ2UuaCIKKworI2luY2x1ZGUgPGdvb2dsZXVybC9zcmMvdXJsX3V0aWwuaD4KKworI2luY2x1
ZGUgIkNocm9tZUNsaWVudEltcGwuaCIKKyNpbmNsdWRlICJXZWJDbGlwYm9hcmQuaCIKKyNpbmNs
dWRlICJXZWJDb29raWUuaCIKKyNpbmNsdWRlICJXZWJDdXJzb3JJbmZvLmgiCisjaW5jbHVkZSAi
V2ViRGF0YS5oIgorI2luY2x1ZGUgIldlYkZyYW1lQ2xpZW50LmgiCisjaW5jbHVkZSAiV2ViRnJh
bWVJbXBsLmgiCisjaW5jbHVkZSAiV2ViSW1hZ2UuaCIKKyNpbmNsdWRlICJXZWJLaXQuaCIKKyNp
bmNsdWRlICJXZWJLaXRDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJNaW1lUmVnaXN0cnkuaCIKKyNp
bmNsdWRlICJXZWJQbHVnaW5Db250YWluZXJJbXBsLmgiCisjaW5jbHVkZSAiV2ViUGx1Z2luTGlz
dEJ1aWxkZXJJbXBsLmgiCisjaW5jbHVkZSAiV2ViU2NyZWVuSW5mby5oIgorI2luY2x1ZGUgIldl
YlN0cmluZy5oIgorI2luY2x1ZGUgIldlYlVSTC5oIgorI2luY2x1ZGUgIldlYlZlY3Rvci5oIgor
I2luY2x1ZGUgIldlYlZpZXdDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgorI2lu
Y2x1ZGUgIldlYldvcmtlckNsaWVudEltcGwuaCIKKworI2lmIFBMQVRGT1JNKFdJTl9PUykKKyNp
bmNsdWRlICJXZWJSZWN0LmgiCisjaW5jbHVkZSAiV2ViU2FuZGJveFN1cHBvcnQuaCIKKyNpbmNs
dWRlICJXZWJUaGVtZUVuZ2luZS5oIgorI2VuZGlmCisKKyNpZiBQTEFURk9STShMSU5VWCkKKyNp
bmNsdWRlICJXZWJTYW5kYm94U3VwcG9ydC5oIgorI2luY2x1ZGUgIldlYkZvbnRJbmZvLmgiCisj
ZW5kaWYKKworI2lmIFdFQktJVF9VU0lOR19TS0lBCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2VTa2lh
LmgiCisjZW5kaWYKKworI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCisjaW5jbHVkZSAiQ29va2ll
LmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVk
ZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIKKyNpbmNs
dWRlICJXb3JrZXIuaCIKKyNpbmNsdWRlICJXb3JrZXJDb250ZXh0UHJveHkuaCIKKyNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgorCisvLyBXZSBhcmUgcGFydCBvZiB0aGUgV2ViS2l0IGltcGxl
bWVudGF0aW9uLgordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitzdGF0aWMgQ2hyb21lQ2xpZW50SW1wbCogdG9DaHJvbWVDbGllbnRJbXBsKFdpZGdldCog
d2lkZ2V0KQoreworICAgIEZyYW1lVmlldyogdmlldzsKKyAgICBpZiAod2lkZ2V0LT5pc0ZyYW1l
VmlldygpKQorICAgICAgICB2aWV3ID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4od2lkZ2V0KTsK
KyAgICBlbHNlIGlmICh3aWRnZXQtPnBhcmVudCgpICYmIHdpZGdldC0+cGFyZW50KCktPmlzRnJh
bWVWaWV3KCkpCisgICAgICAgIHZpZXcgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPih3aWRnZXQt
PnBhcmVudCgpKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiAwOworCisgICAgUGFnZSogcGFn
ZSA9IHZpZXctPmZyYW1lKCkgPyB2aWV3LT5mcmFtZSgpLT5wYWdlKCkgOiAwOworICAgIGlmICgh
cGFnZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2hyb21l
Q2xpZW50SW1wbCo+KHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKSk7Cit9CisKK3N0YXRpYyBXZWJX
aWRnZXRDbGllbnQqIHRvV2ViV2lkZ2V0Q2xpZW50KFdpZGdldCogd2lkZ2V0KQoreworICAgIENo
cm9tZUNsaWVudEltcGwqIGNocm9tZUNsaWVudEltcGwgPSB0b0Nocm9tZUNsaWVudEltcGwod2lk
Z2V0KTsKKyAgICBpZiAoIWNocm9tZUNsaWVudEltcGwgfHwgIWNocm9tZUNsaWVudEltcGwtPndl
YlZpZXcoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGNocm9tZUNsaWVudEltcGwt
PndlYlZpZXcoKS0+Y2xpZW50KCk7Cit9CisKKy8vIENsaXBib2FyZCAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYm9v
bCBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkSXNGb3JtYXRBdmFpbGFibGUoCisgICAgUGFzdGVi
b2FyZFByaXZhdGU6OkNsaXBib2FyZEZvcm1hdCBmb3JtYXQsCisgICAgUGFzdGVib2FyZFByaXZh
dGU6OkNsaXBib2FyZEJ1ZmZlciBidWZmZXIpCit7CisgICAgcmV0dXJuIHdlYktpdENsaWVudCgp
LT5jbGlwYm9hcmQoKS0+aXNGb3JtYXRBdmFpbGFibGUoCisgICAgICAgIHN0YXRpY19jYXN0PFdl
YkNsaXBib2FyZDo6Rm9ybWF0Pihmb3JtYXQpLAorICAgICAgICBzdGF0aWNfY2FzdDxXZWJDbGlw
Ym9hcmQ6OkJ1ZmZlcj4oYnVmZmVyKSk7Cit9CisKK1N0cmluZyBDaHJvbWl1bUJyaWRnZTo6Y2xp
cGJvYXJkUmVhZFBsYWluVGV4dCgKKyAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVm
ZmVyIGJ1ZmZlcikKK3sKKyAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmNsaXBib2FyZCgpLT5y
ZWFkUGxhaW5UZXh0KAorICAgICAgICBzdGF0aWNfY2FzdDxXZWJDbGlwYm9hcmQ6OkJ1ZmZlcj4o
YnVmZmVyKSk7Cit9CisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJlYWRIVE1MKAor
ICAgIFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIgYnVmZmVyLAorICAgIFN0cmlu
ZyogaHRtbFRleHQsIEtVUkwqIHNvdXJjZVVSTCkKK3sKKyAgICBXZWJVUkwgdXJsOworICAgICpo
dG1sVGV4dCA9IHdlYktpdENsaWVudCgpLT5jbGlwYm9hcmQoKS0+cmVhZEhUTUwoCisgICAgICAg
IHN0YXRpY19jYXN0PFdlYkNsaXBib2FyZDo6QnVmZmVyPihidWZmZXIpLCAmdXJsKTsKKyAgICAq
c291cmNlVVJMID0gdXJsOworfQorCit2b2lkIENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRXcml0
ZVNlbGVjdGlvbihjb25zdCBTdHJpbmcmIGh0bWxUZXh0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgS1VSTCYgc291cmNlVVJMLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBwbGFpblRl
eHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHdy
aXRlU21hcnRQYXN0ZSkKK3sKKyAgICB3ZWJLaXRDbGllbnQoKS0+Y2xpcGJvYXJkKCktPndyaXRl
SFRNTCgKKyAgICAgICAgaHRtbFRleHQsIHNvdXJjZVVSTCwgcGxhaW5UZXh0LCB3cml0ZVNtYXJ0
UGFzdGUpOworfQorCit2b2lkIENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRXcml0ZVBsYWluVGV4
dChjb25zdCBTdHJpbmcmIHBsYWluVGV4dCkKK3sKKyAgICB3ZWJLaXRDbGllbnQoKS0+Y2xpcGJv
YXJkKCktPndyaXRlUGxhaW5UZXh0KHBsYWluVGV4dCk7Cit9CisKK3ZvaWQgQ2hyb21pdW1Ccmlk
Z2U6OmNsaXBib2FyZFdyaXRlVVJMKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRs
ZSkKK3sKKyAgICB3ZWJLaXRDbGllbnQoKS0+Y2xpcGJvYXJkKCktPndyaXRlVVJMKHVybCwgdGl0
bGUpOworfQorCit2b2lkIENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRXcml0ZUltYWdlKE5hdGl2
ZUltYWdlUHRyIGltYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBLVVJMJiBzb3VyY2VVUkwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFN0cmluZyYgdGl0bGUpCit7CisjaWYgV0VCS0lUX1VTSU5HX1NLSUEK
KyAgICBXZWJJbWFnZSB3ZWJJbWFnZSgqaW1hZ2UpOworI2Vsc2UKKyAgICBXZWJJbWFnZSB3ZWJJ
bWFnZShpbWFnZSk7CisjZW5kaWYKKyAgICB3ZWJLaXRDbGllbnQoKS0+Y2xpcGJvYXJkKCktPndy
aXRlSW1hZ2Uod2ViSW1hZ2UsIHNvdXJjZVVSTCwgdGl0bGUpOworfQorCisvLyBDb29raWVzIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6OnNldENvb2tpZXMoY29uc3QgS1VSTCYg
dXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBLVVJMJiBmaXJzdFBh
cnR5Rm9yQ29va2llcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3Ry
aW5nJiBjb29raWUpCit7CisgICAgd2ViS2l0Q2xpZW50KCktPnNldENvb2tpZXModXJsLCBmaXJz
dFBhcnR5Rm9yQ29va2llcywgY29va2llKTsKK30KKworU3RyaW5nIENocm9taXVtQnJpZGdlOjpj
b29raWVzKGNvbnN0IEtVUkwmIHVybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcykKK3sKKyAgICByZXR1cm4gd2ViS2l0Q2xp
ZW50KCktPmNvb2tpZXModXJsLCBmaXJzdFBhcnR5Rm9yQ29va2llcyk7Cit9CisKK2Jvb2wgQ2hy
b21pdW1CcmlkZ2U6OnJhd0Nvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBmaXJz
dFBhcnR5Rm9yQ29va2llcywgVmVjdG9yPENvb2tpZT4qIHJhd0Nvb2tpZXMpCit7CisgICAgcmF3
Q29va2llcy0+Y2xlYXIoKTsKKyAgICBXZWJWZWN0b3I8V2ViQ29va2llPiB3ZWJDb29raWVzOwor
ICAgIGlmICghd2ViS2l0Q2xpZW50KCktPnJhd0Nvb2tpZXModXJsLCBmaXJzdFBhcnR5Rm9yQ29v
a2llcywgJndlYkNvb2tpZXMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgd2ViQ29va2llcy5zaXplKCk7ICsraSkgeworICAgICAgICBjb25z
dCBXZWJDb29raWUmIHdlYkNvb2tpZSA9IHdlYkNvb2tpZXNbaV07CisgICAgICAgIENvb2tpZSBj
b29raWUod2ViQ29va2llLm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgd2ViQ29va2llLnZh
bHVlLAorICAgICAgICAgICAgICAgICAgICAgIHdlYkNvb2tpZS5kb21haW4sCisgICAgICAgICAg
ICAgICAgICAgICAgd2ViQ29va2llLnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgd2ViQ29v
a2llLmV4cGlyZXMsCisgICAgICAgICAgICAgICAgICAgICAgd2ViQ29va2llLmh0dHBPbmx5LAor
ICAgICAgICAgICAgICAgICAgICAgIHdlYkNvb2tpZS5zZWN1cmUsCisgICAgICAgICAgICAgICAg
ICAgICAgd2ViQ29va2llLnNlc3Npb24pOworICAgICAgICByYXdDb29raWVzLT5hcHBlbmQoY29v
a2llKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6
OmRlbGV0ZUNvb2tpZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSkK
K3sKKyAgICB3ZWJLaXRDbGllbnQoKS0+ZGVsZXRlQ29va2llKHVybCwgY29va2llTmFtZSk7Cit9
CisKKy8vIEROUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordm9pZCBDaHJvbWl1bUJyaWRnZTo6cHJlZmV0
Y2hETlMoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3sKKyAgICB3ZWJLaXRDbGllbnQoKS0+cHJl
ZmV0Y2hIb3N0TmFtZShob3N0bmFtZSk7Cit9CisKKy8vIEZpbGUgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisK
K2Jvb2wgQ2hyb21pdW1CcmlkZ2U6OmZpbGVFeGlzdHMoY29uc3QgU3RyaW5nJiBwYXRoKQorewor
ICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZmlsZUV4aXN0cyhwYXRoKTsKK30KKworYm9vbCBD
aHJvbWl1bUJyaWRnZTo6ZGVsZXRlRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgcmV0
dXJuIHdlYktpdENsaWVudCgpLT5kZWxldGVGaWxlKHBhdGgpOworfQorCitib29sIENocm9taXVt
QnJpZGdlOjpkZWxldGVFbXB0eURpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAg
cmV0dXJuIHdlYktpdENsaWVudCgpLT5kZWxldGVFbXB0eURpcmVjdG9yeShwYXRoKTsKK30KKwor
Ym9vbCBDaHJvbWl1bUJyaWRnZTo6Z2V0RmlsZVNpemUoY29uc3QgU3RyaW5nJiBwYXRoLCBsb25n
IGxvbmcmIHJlc3VsdCkKK3sKKyAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmdldEZpbGVTaXpl
KHBhdGgsIHJlc3VsdCk7Cit9CisKK2Jvb2wgQ2hyb21pdW1CcmlkZ2U6OmdldEZpbGVNb2RpZmlj
YXRpb25UaW1lKGNvbnN0IFN0cmluZyYgcGF0aCwgdGltZV90JiByZXN1bHQpCit7CisgICAgcmV0
dXJuIHdlYktpdENsaWVudCgpLT5nZXRGaWxlTW9kaWZpY2F0aW9uVGltZShwYXRoLCByZXN1bHQp
OworfQorCitTdHJpbmcgQ2hyb21pdW1CcmlkZ2U6OmRpcmVjdG9yeU5hbWUoY29uc3QgU3RyaW5n
JiBwYXRoKQoreworICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZGlyZWN0b3J5TmFtZShwYXRo
KTsKK30KKworU3RyaW5nIENocm9taXVtQnJpZGdlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQo
Y29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGNvbXBvbmVudCkKK3sKKyAgICByZXR1
cm4gd2ViS2l0Q2xpZW50KCktPnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChwYXRoLCBjb21wb25l
bnQpOworfQorCitib29sIENocm9taXVtQnJpZGdlOjptYWtlQWxsRGlyZWN0b3JpZXMoY29uc3Qg
U3RyaW5nJiBwYXRoKQoreworICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+bWFrZUFsbERpcmVj
dG9yaWVzKHBhdGgpOworfQorCitTdHJpbmcgQ2hyb21pdW1CcmlkZ2U6OmdldEFic29sdXRlUGF0
aChjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5nZXRB
YnNvbHV0ZVBhdGgocGF0aCk7Cit9CisKK2Jvb2wgQ2hyb21pdW1CcmlkZ2U6OmlzRGlyZWN0b3J5
KGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmlzRGly
ZWN0b3J5KHBhdGgpOworfQorCitLVVJMIENocm9taXVtQnJpZGdlOjpmaWxlUGF0aFRvVVJMKGNv
bnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmZpbGVQYXRo
VG9VUkwocGF0aCk7Cit9CisKKy8vIEZvbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2lmIFBMQVRGT1JN
KFdJTl9PUykKK2Jvb2wgQ2hyb21pdW1CcmlkZ2U6OmVuc3VyZUZvbnRMb2FkZWQoSEZPTlQgZm9u
dCkKK3sKKyAgICBXZWJTYW5kYm94U3VwcG9ydCogc3MgPSB3ZWJLaXRDbGllbnQoKS0+c2FuZGJv
eFN1cHBvcnQoKTsKKworICAgIC8vIGlmIHRoZXJlIGlzIG5vIHNhbmRib3gsIHRoZW4gd2UgY2Fu
IGFzc3VtZSB0aGUgZm9udAorICAgIC8vIHdhcyBhYmxlIHRvIGJlIGxvYWRlZCBzdWNjZXNzZnVs
bHkgYWxyZWFkeQorICAgIHJldHVybiBzcyA/IHNzLT5lbnN1cmVGb250TG9hZGVkKGZvbnQpIDog
dHJ1ZTsKK30KKyNlbmRpZgorCisjaWYgUExBVEZPUk0oTElOVVgpCitTdHJpbmcgQ2hyb21pdW1C
cmlkZ2U6OmdldEZvbnRGYW1pbHlGb3JDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCBzaXplX3QgbnVtQ2hhcmFjdGVycykKK3sKKyAgICBpZiAod2ViS2l0Q2xpZW50KCktPnNhbmRi
b3hTdXBwb3J0KCkpCisgICAgICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+c2FuZGJveFN1cHBv
cnQoKS0+Z2V0Rm9udEZhbWlseUZvckNoYXJhY3RlcnMoY2hhcmFjdGVycywgbnVtQ2hhcmFjdGVy
cyk7CisKKyAgICBXZWJDU3RyaW5nIGZhbWlseSA9IFdlYkZvbnRJbmZvOjpmYW1pbHlGb3JDaGFy
cyhjaGFyYWN0ZXJzLCBudW1DaGFyYWN0ZXJzKTsKKyAgICBpZiAoZmFtaWx5LmRhdGEoKSkKKyAg
ICAgICAgcmV0dXJuIFdlYlN0cmluZzo6ZnJvbVVURjgoZmFtaWx5LmRhdGEoKSk7CisKKyAgICBy
ZXR1cm4gV2ViU3RyaW5nKCk7Cit9CisjZW5kaWYKKworLy8gSFRNTDUgREIgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
CisjaWYgRU5BQkxFKERBVEFCQVNFKQorUGxhdGZvcm1GaWxlSGFuZGxlIENocm9taXVtQnJpZGdl
OjpkYXRhYmFzZU9wZW5GaWxlKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGludCBkZXNpcmVkRmxh
Z3MsIFBsYXRmb3JtRmlsZUhhbmRsZSogZGlySGFuZGxlKQoreworICAgIHJldHVybiB3ZWJLaXRD
bGllbnQoKS0+ZGF0YWJhc2VPcGVuRmlsZShXZWJTdHJpbmcoZmlsZU5hbWUpLCBkZXNpcmVkRmxh
Z3MsIGRpckhhbmRsZSk7Cit9CisKK2ludCBDaHJvbWl1bUJyaWRnZTo6ZGF0YWJhc2VEZWxldGVG
aWxlKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGJvb2wgc3luY0RpcikKK3sKKyAgICByZXR1cm4g
d2ViS2l0Q2xpZW50KCktPmRhdGFiYXNlRGVsZXRlRmlsZShXZWJTdHJpbmcoZmlsZU5hbWUpLCBz
eW5jRGlyKTsKK30KKworbG9uZyBDaHJvbWl1bUJyaWRnZTo6ZGF0YWJhc2VHZXRGaWxlQXR0cmli
dXRlcyhjb25zdCBTdHJpbmcmIGZpbGVOYW1lKQoreworICAgIHJldHVybiB3ZWJLaXRDbGllbnQo
KS0+ZGF0YWJhc2VHZXRGaWxlQXR0cmlidXRlcyhXZWJTdHJpbmcoZmlsZU5hbWUpKTsKK30KKwor
bG9uZyBsb25nIENocm9taXVtQnJpZGdlOjpkYXRhYmFzZUdldEZpbGVTaXplKGNvbnN0IFN0cmlu
ZyYgZmlsZU5hbWUpCit7CisgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5kYXRhYmFzZUdldEZp
bGVTaXplKFdlYlN0cmluZyhmaWxlTmFtZSkpOworfQorI2VuZGlmCisKKy8vIEtleWdlbiAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKworU3RyaW5nIENocm9taXVtQnJpZGdlOjpzaWduZWRQdWJsaWNLZXlBbmRDaGFs
bGVuZ2VTdHJpbmcoCisgICAgdW5zaWduZWQga2V5U2l6ZUluZGV4LCBjb25zdCBTdHJpbmcmIGNo
YWxsZW5nZSwgY29uc3QgS1VSTCYgdXJsKQoreworICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+
c2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKGtleVNpemVJbmRleCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJT
dHJpbmcoY2hhbGxlbmdlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBXZWJVUkwodXJsKSk7Cit9CisKKy8vIExhbmd1YWdlIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKworU3RyaW5nIENocm9taXVtQnJpZGdlOjpjb21wdXRlZERlZmF1bHRMYW5ndWFn
ZSgpCit7CisgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5kZWZhdWx0TG9jYWxlKCk7Cit9CisK
Ky8vIExheW91dFRlc3RNb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYm9vbCBDaHJvbWl1bUJyaWRnZTo6bGF5b3V0VGVz
dE1vZGUoKQoreworICAgIHJldHVybiBXZWJLaXQ6OmxheW91dFRlc3RNb2RlKCk7Cit9CisKKy8v
IE1pbWVUeXBlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYm9vbCBDaHJvbWl1bUJyaWRnZTo6aXNTdXBwb3J0ZWRJ
bWFnZU1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgcmV0dXJuIHdlYktp
dENsaWVudCgpLT5taW1lUmVnaXN0cnkoKS0+c3VwcG9ydHNJbWFnZU1JTUVUeXBlKG1pbWVUeXBl
KQorICAgICAgICAhPSBXZWJNaW1lUmVnaXN0cnk6OklzTm90U3VwcG9ydGVkOworfQorCitib29s
IENocm9taXVtQnJpZGdlOjppc1N1cHBvcnRlZEphdmFTY3JpcHRNSU1FVHlwZShjb25zdCBTdHJp
bmcmIG1pbWVUeXBlKQoreworICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+bWltZVJlZ2lzdHJ5
KCktPnN1cHBvcnRzSmF2YVNjcmlwdE1JTUVUeXBlKG1pbWVUeXBlKQorICAgICAgICAhPSBXZWJN
aW1lUmVnaXN0cnk6OklzTm90U3VwcG9ydGVkOworfQorCitib29sIENocm9taXVtQnJpZGdlOjpp
c1N1cHBvcnRlZE5vbkltYWdlTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAg
ICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPm1pbWVSZWdpc3RyeSgpLT5zdXBwb3J0c05vbkltYWdl
TUlNRVR5cGUobWltZVR5cGUpCisgICAgICAgICE9IFdlYk1pbWVSZWdpc3RyeTo6SXNOb3RTdXBw
b3J0ZWQ7Cit9CisKK1N0cmluZyBDaHJvbWl1bUJyaWRnZTo6bWltZVR5cGVGb3JFeHRlbnNpb24o
Y29uc3QgU3RyaW5nJiBleHRlbnNpb24pCit7CisgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5t
aW1lUmVnaXN0cnkoKS0+bWltZVR5cGVGb3JFeHRlbnNpb24oZXh0ZW5zaW9uKTsKK30KKworU3Ry
aW5nIENocm9taXVtQnJpZGdlOjptaW1lVHlwZUZyb21GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkK
K3sKKyAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPm1pbWVSZWdpc3RyeSgpLT5taW1lVHlwZUZy
b21GaWxlKHBhdGgpOworfQorCitTdHJpbmcgQ2hyb21pdW1CcmlkZ2U6OnByZWZlcnJlZEV4dGVu
c2lvbkZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgcmV0dXJuIHdl
YktpdENsaWVudCgpLT5taW1lUmVnaXN0cnkoKS0+cHJlZmVycmVkRXh0ZW5zaW9uRm9yTUlNRVR5
cGUobWltZVR5cGUpOworfQorCisvLyBQbHVnaW4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Jvb2wgQ2hyb21p
dW1CcmlkZ2U6OnBsdWdpbnMoYm9vbCByZWZyZXNoLCBWZWN0b3I8UGx1Z2luSW5mbyo+KiByZXN1
bHRzKQoreworICAgIFdlYlBsdWdpbkxpc3RCdWlsZGVySW1wbCBidWlsZGVyKHJlc3VsdHMpOwor
ICAgIHdlYktpdENsaWVudCgpLT5nZXRQbHVnaW5MaXN0KHJlZnJlc2gsICZidWlsZGVyKTsKKyAg
ICByZXR1cm4gdHJ1ZTsgIC8vIEZJWE1FOiBUaGVyZSBpcyBubyBuZWVkIGZvciB0aGlzIGZ1bmN0
aW9uIHRvIHJldHVybiBhIHZhbHVlLgorfQorCitOUE9iamVjdCogQ2hyb21pdW1CcmlkZ2U6OnBs
dWdpblNjcmlwdGFibGVPYmplY3QoV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgaWYgKCF3aWRnZXQp
CisgICAgICAgIHJldHVybiAwOworCisgICAgQVNTRVJUKCF3aWRnZXQtPmlzRnJhbWVWaWV3KCkp
OworCisgICAgLy8gTk9URTogIFdlIGhhdmUgdG8gdHJ1c3QgdGhhdCB0aGUgd2lkZ2V0IHBhc3Nl
ZCB0byB1cyBoZXJlIGlzIGEKKyAgICAvLyBXZWJQbHVnaW5Db250YWluZXJJbXBsLiAgVGhlcmUg
aXNuJ3QgYSB3YXkgdG8gZHluYW1pY2FsbHkgdmVyaWZ5IGl0LAorICAgIC8vIHNpbmNlIHRoZSBk
ZXJpdmVkIGNsYXNzIChXaWRnZXQpIGhhcyBubyBpZGVudGlmaWVyLgorICAgIHJldHVybiBzdGF0
aWNfY2FzdDxXZWJQbHVnaW5Db250YWluZXJJbXBsKj4od2lkZ2V0KS0+c2NyaXB0YWJsZU9iamVj
dCgpOworfQorCisvLyBSZXNvdXJjZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1Bhc3NSZWZQdHI8SW1hZ2U+IENo
cm9taXVtQnJpZGdlOjpsb2FkUGxhdGZvcm1JbWFnZVJlc291cmNlKGNvbnN0IGNoYXIqIG5hbWUp
Cit7CisgICAgY29uc3QgV2ViRGF0YSYgcmVzb3VyY2UgPSB3ZWJLaXRDbGllbnQoKS0+bG9hZFJl
c291cmNlKG5hbWUpOworICAgIGlmIChyZXNvdXJjZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biBJbWFnZTo6bnVsbEltYWdlKCk7CisKKyAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gQml0bWFw
SW1hZ2U6OmNyZWF0ZSgpOworICAgIGltYWdlLT5zZXREYXRhKHJlc291cmNlLCB0cnVlKTsKKyAg
ICByZXR1cm4gaW1hZ2U7Cit9CisKKy8vIFNhbmRib3ggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYm9vbCBDaHJv
bWl1bUJyaWRnZTo6c2FuZGJveEVuYWJsZWQoKQoreworICAgIHJldHVybiB3ZWJLaXRDbGllbnQo
KS0+c2FuZGJveEVuYWJsZWQoKTsKK30KKworLy8gU2hhcmVkVGltZXJzIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit2b2lk
IENocm9taXVtQnJpZGdlOjpzZXRTaGFyZWRUaW1lckZpcmVkRnVuY3Rpb24odm9pZCAoKmZ1bmMp
KCkpCit7CisgICAgd2ViS2l0Q2xpZW50KCktPnNldFNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbihm
dW5jKTsKK30KKwordm9pZCBDaHJvbWl1bUJyaWRnZTo6c2V0U2hhcmVkVGltZXJGaXJlVGltZShk
b3VibGUgZmlyZVRpbWUpCit7CisgICAgd2ViS2l0Q2xpZW50KCktPnNldFNoYXJlZFRpbWVyRmly
ZVRpbWUoZmlyZVRpbWUpOworfQorCit2b2lkIENocm9taXVtQnJpZGdlOjpzdG9wU2hhcmVkVGlt
ZXIoKQoreworICAgIHdlYktpdENsaWVudCgpLT5zdG9wU2hhcmVkVGltZXIoKTsKK30KKworLy8g
U3RhdHNDb3VudGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorCit2b2lkIENocm9taXVtQnJpZGdlOjpkZWNyZW1lbnRTdGF0
c0NvdW50ZXIoY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICB3ZWJLaXRDbGllbnQoKS0+ZGVjcmVt
ZW50U3RhdHNDb3VudGVyKG5hbWUpOworfQorCit2b2lkIENocm9taXVtQnJpZGdlOjppbmNyZW1l
bnRTdGF0c0NvdW50ZXIoY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICB3ZWJLaXRDbGllbnQoKS0+
aW5jcmVtZW50U3RhdHNDb3VudGVyKG5hbWUpOworfQorCisvLyBTdWRkZW4gVGVybWluYXRpb24g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6OnN1ZGRlblRlcm1pbmF0aW9uQ2hhbmdlZChib29sIGVu
YWJsZWQpCit7CisgICAgd2ViS2l0Q2xpZW50KCktPnN1ZGRlblRlcm1pbmF0aW9uQ2hhbmdlZChl
bmFibGVkKTsKK30KKworLy8gU3lzdGVtVGltZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitkb3VibGUgQ2hyb21pdW1C
cmlkZ2U6OmN1cnJlbnRUaW1lKCkKK3sKKyAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmN1cnJl
bnRUaW1lKCk7Cit9CisKKy8vIFRoZW1pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2lmIFBMQVRGT1JNKFdJ
Tl9PUykKKwordm9pZCBDaHJvbWl1bUJyaWRnZTo6cGFpbnRCdXR0b24oCisgICAgR3JhcGhpY3ND
b250ZXh0KiBnYywgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwKKyAgICBj
b25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIHdlYktpdENsaWVudCgpLT50aGVtZUVuZ2luZSgp
LT5wYWludEJ1dHRvbigKKyAgICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKSwg
cGFydCwgc3RhdGUsIGNsYXNzaWNTdGF0ZSwgcmVjdCk7Cit9CisKK3ZvaWQgQ2hyb21pdW1Ccmlk
Z2U6OnBhaW50TWVudUxpc3QoCisgICAgR3JhcGhpY3NDb250ZXh0KiBnYywgaW50IHBhcnQsIGlu
dCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwKKyAgICBjb25zdCBJbnRSZWN0JiByZWN0KQorewor
ICAgIHdlYktpdENsaWVudCgpLT50aGVtZUVuZ2luZSgpLT5wYWludE1lbnVMaXN0KAorICAgICAg
ICBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLCBwYXJ0LCBzdGF0ZSwgY2xhc3NpY1N0
YXRlLCByZWN0KTsKK30KKwordm9pZCBDaHJvbWl1bUJyaWRnZTo6cGFpbnRTY3JvbGxiYXJBcnJv
dygKKyAgICBHcmFwaGljc0NvbnRleHQqIGdjLCBpbnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUs
CisgICAgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICB3ZWJLaXRDbGllbnQoKS0+dGhlbWVF
bmdpbmUoKS0+cGFpbnRTY3JvbGxiYXJBcnJvdygKKyAgICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4
dCgpLT5jYW52YXMoKSwgc3RhdGUsIGNsYXNzaWNTdGF0ZSwgcmVjdCk7Cit9CisKK3ZvaWQgQ2hy
b21pdW1CcmlkZ2U6OnBhaW50U2Nyb2xsYmFyVGh1bWIoCisgICAgR3JhcGhpY3NDb250ZXh0KiBn
YywgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwKKyAgICBjb25zdCBJbnRS
ZWN0JiByZWN0KQoreworICAgIHdlYktpdENsaWVudCgpLT50aGVtZUVuZ2luZSgpLT5wYWludFNj
cm9sbGJhclRodW1iKAorICAgICAgICBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLCBw
YXJ0LCBzdGF0ZSwgY2xhc3NpY1N0YXRlLCByZWN0KTsKK30KKwordm9pZCBDaHJvbWl1bUJyaWRn
ZTo6cGFpbnRTY3JvbGxiYXJUcmFjaygKKyAgICBHcmFwaGljc0NvbnRleHQqIGdjLCBpbnQgcGFy
dCwgaW50IHN0YXRlLCBpbnQgY2xhc3NpY1N0YXRlLAorICAgIGNvbnN0IEludFJlY3QmIHJlY3Qs
IGNvbnN0IEludFJlY3QmIGFsaWduUmVjdCkKK3sKKyAgICB3ZWJLaXRDbGllbnQoKS0+dGhlbWVF
bmdpbmUoKS0+cGFpbnRTY3JvbGxiYXJUcmFjaygKKyAgICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4
dCgpLT5jYW52YXMoKSwgcGFydCwgc3RhdGUsIGNsYXNzaWNTdGF0ZSwgcmVjdCwKKyAgICAgICAg
YWxpZ25SZWN0KTsKK30KKwordm9pZCBDaHJvbWl1bUJyaWRnZTo6cGFpbnRUZXh0RmllbGQoCisg
ICAgR3JhcGhpY3NDb250ZXh0KiBnYywgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNT
dGF0ZSwKKyAgICBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIGJvb2wg
ZmlsbENvbnRlbnRBcmVhLAorICAgIGJvb2wgZHJhd0VkZ2VzKQoreworICAgIC8vIEZhbGxiYWNr
IHRvIHdoaXRlIHdoZW4gfGNvbG9yfCBpcyBpbnZhbGlkLgorICAgIFJHQkEzMiBiYWNrZ3JvdW5k
Q29sb3IgPSBjb2xvci5pc1ZhbGlkKCkgPyBjb2xvci5yZ2IoKSA6IENvbG9yOjp3aGl0ZTsKKwor
ICAgIHdlYktpdENsaWVudCgpLT50aGVtZUVuZ2luZSgpLT5wYWludFRleHRGaWVsZCgKKyAgICAg
ICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKSwgcGFydCwgc3RhdGUsIGNsYXNzaWNT
dGF0ZSwgcmVjdCwKKyAgICAgICAgYmFja2dyb3VuZENvbG9yLCBmaWxsQ29udGVudEFyZWEsIGRy
YXdFZGdlcyk7Cit9CisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6OnBhaW50VHJhY2tiYXIoCisgICAg
R3JhcGhpY3NDb250ZXh0KiBnYywgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0
ZSwKKyAgICBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIHdlYktpdENsaWVudCgpLT50aGVt
ZUVuZ2luZSgpLT5wYWludFRyYWNrYmFyKAorICAgICAgICBnYy0+cGxhdGZvcm1Db250ZXh0KCkt
PmNhbnZhcygpLCBwYXJ0LCBzdGF0ZSwgY2xhc3NpY1N0YXRlLCByZWN0KTsKK30KKworI2VuZGlm
CisKKy8vIFRyYWNlIEV2ZW50IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordm9pZCBDaHJvbWl1bUJyaWRnZTo6dHJhY2VF
dmVudEJlZ2luKGNvbnN0IGNoYXIqIG5hbWUsIHZvaWQqIGlkLCBjb25zdCBjaGFyKiBleHRyYSkK
K3sKKyAgICB3ZWJLaXRDbGllbnQoKS0+dHJhY2VFdmVudEJlZ2luKG5hbWUsIGlkLCBleHRyYSk7
Cit9CisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6OnRyYWNlRXZlbnRFbmQoY29uc3QgY2hhciogbmFt
ZSwgdm9pZCogaWQsIGNvbnN0IGNoYXIqIGV4dHJhKQoreworICAgIHdlYktpdENsaWVudCgpLT50
cmFjZUV2ZW50RW5kKG5hbWUsIGlkLCBleHRyYSk7Cit9CisKKy8vIFZpc2l0ZWQgTGlua3MgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworTGlua0hhc2ggQ2hyb21pdW1CcmlkZ2U6OnZpc2l0ZWRMaW5rSGFzaChjb25zdCBVQ2hh
ciogdXJsLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgdXJsX2Nhbm9uOjpSYXdDYW5vbk91dHB1
dDwyMDQ4PiBidWZmZXI7CisgICAgdXJsX3BhcnNlOjpQYXJzZWQgcGFyc2VkOworICAgIGlmICgh
dXJsX3V0aWw6OkNhbm9uaWNhbGl6ZSh1cmwsIGxlbmd0aCwgMCwgJmJ1ZmZlciwgJnBhcnNlZCkp
CisgICAgICAgIHJldHVybiAwOyAgLy8gSW52YWxpZCBVUkxzIGFyZSB1bnZpc2l0ZWQuCisgICAg
cmV0dXJuIHdlYktpdENsaWVudCgpLT52aXNpdGVkTGlua0hhc2goYnVmZmVyLmRhdGEoKSwgYnVm
ZmVyLmxlbmd0aCgpKTsKK30KKworTGlua0hhc2ggQ2hyb21pdW1CcmlkZ2U6OnZpc2l0ZWRMaW5r
SGFzaChjb25zdCBLVVJMJiBiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCkKK3sKKyAgICAvLyBSZXNv
bHZlIHRoZSByZWxhdGl2ZSBVUkwgdXNpbmcgZ29vZ2xldXJsIGFuZCBwYXNzIHRoZSBhYnNvbHV0
ZSBVUkwgdXAgdG8KKyAgICAvLyB0aGUgZW1iZWRkZXIuIFdlIGNvdWxkIGNyZWF0ZSBhIEdVUkwg
b2JqZWN0IGZyb20gdGhlIGJhc2UgYW5kIHJlc29sdmUKKyAgICAvLyB0aGUgcmVsYXRpdmUgVVJM
IHRoYXQgd2F5LCBidXQgY2FsbGluZyB0aGUgbG93ZXItbGV2ZWwgZnVuY3Rpb25zCisgICAgLy8g
ZGlyZWN0bHkgc2F2ZXMgdXMgdGhlIHN0cmluZyBhbGxvY2F0aW9uIGluIG1vc3QgY2FzZXMuCisg
ICAgdXJsX2Nhbm9uOjpSYXdDYW5vbk91dHB1dDwyMDQ4PiBidWZmZXI7CisgICAgdXJsX3BhcnNl
OjpQYXJzZWQgcGFyc2VkOworCisjaWYgVVNFKEdPT0dMRVVSTCkKKyAgICBjb25zdCBDU3RyaW5n
JiBjc3RyID0gYmFzZS51dGY4U3RyaW5nKCk7CisgICAgY29uc3QgY2hhciogZGF0YSA9IGNzdHIu
ZGF0YSgpOworICAgIGludCBsZW5ndGggPSBjc3RyLmxlbmd0aCgpOworICAgIGNvbnN0IHVybF9w
YXJzZTo6UGFyc2VkJiBzcmNQYXJzZWQgPSBiYXNlLnBhcnNlZCgpOworI2Vsc2UKKyAgICAvLyBX
aGVuIHdlJ3JlIG5vdCB1c2luZyBHb29nbGVVUkwsIGZpcnN0IGNhbm9uaWNhbGl6ZSBpdCBzbyB3
ZSBjYW4gcmVzb2x2ZSBpdAorICAgIC8vIGJlbG93LgorICAgIHVybF9jYW5vbjo6UmF3Q2Fub25P
dXRwdXQ8MjA0OD4gc3JjQ2Fub247CisgICAgdXJsX3BhcnNlOjpQYXJzZWQgc3JjUGFyc2VkOwor
ICAgIFN0cmluZyBzdHIgPSBiYXNlLnN0cmluZygpOworICAgIGlmICghdXJsX3V0aWw6OkNhbm9u
aWNhbGl6ZShzdHIuY2hhcmFjdGVycygpLCBzdHIubGVuZ3RoKCksIDAsICZzcmNDYW5vbiwgJnNy
Y1BhcnNlZCkpCisgICAgICAgIHJldHVybiAwOworICAgIGNvbnN0IGNoYXIqIGRhdGEgPSBzcmND
YW5vbi5kYXRhKCk7CisgICAgaW50IGxlbmd0aCA9IHNyY0Nhbm9uLmxlbmd0aCgpOworI2VuZGlm
CisKKyAgICBpZiAoIXVybF91dGlsOjpSZXNvbHZlUmVsYXRpdmUoZGF0YSwgbGVuZ3RoLCBzcmNQ
YXJzZWQsIGF0dHJpYnV0ZVVSTC5jaGFyYWN0ZXJzKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGF0dHJpYnV0ZVVSTC5sZW5ndGgoKSwgMCwgJmJ1ZmZlciwgJnBhcnNlZCkp
CisgICAgICAgIHJldHVybiAwOyAgLy8gSW52YWxpZCByZXNvbHZlZCBVUkwuCisKKyAgICByZXR1
cm4gd2ViS2l0Q2xpZW50KCktPnZpc2l0ZWRMaW5rSGFzaChidWZmZXIuZGF0YSgpLCBidWZmZXIu
bGVuZ3RoKCkpOworfQorCitib29sIENocm9taXVtQnJpZGdlOjppc0xpbmtWaXNpdGVkKExpbmtI
YXNoIHZpc2l0ZWRMaW5rSGFzaCkKK3sKKyAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmlzTGlu
a1Zpc2l0ZWQodmlzaXRlZExpbmtIYXNoKTsKK30KKworLy8gVGhlc2UgYXJlIHRlbXBvcmFyeSBt
ZXRob2RzIHRoYXQgdGhlIFdlYktpdCBsYXllciBjYW4gdXNlIHRvIGNhbGwgdG8gdGhlCisvLyBH
bHVlIGxheWVyLiBPbmNlIHRoZSBHbHVlIGxheWVyIG1vdmVzIGVudGlyZWx5IGludG8gdGhlIFdl
YktpdCBsYXllciwgdGhlc2UKKy8vIG1ldGhvZHMgd2lsbCBiZSBkZWxldGVkLgorCit2b2lkIENo
cm9taXVtQnJpZGdlOjpub3RpZnlKU091dE9mTWVtb3J5KEZyYW1lKiBmcmFtZSkKK3sKKyAgICBp
ZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJGcmFtZUltcGwqIHdlYkZyYW1l
ID0gV2ViRnJhbWVJbXBsOjpmcm9tRnJhbWUoZnJhbWUpOworICAgIGlmICghd2ViRnJhbWUtPmNs
aWVudCgpKQorICAgICAgICByZXR1cm47CisgICAgd2ViRnJhbWUtPmNsaWVudCgpLT5kaWRFeGhh
dXN0TWVtb3J5QXZhaWxhYmxlRm9yU2NyaXB0KHdlYkZyYW1lKTsKK30KKworaW50IENocm9taXVt
QnJpZGdlOjptZW1vcnlVc2FnZU1CKCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pih3
ZWJLaXRDbGllbnQoKS0+bWVtb3J5VXNhZ2VNQigpKTsKK30KKworaW50IENocm9taXVtQnJpZGdl
OjpzY3JlZW5EZXB0aChXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBXZWJXaWRnZXRDbGllbnQqIGNs
aWVudCA9IHRvV2ViV2lkZ2V0Q2xpZW50KHdpZGdldCk7CisgICAgaWYgKCFjbGllbnQpCisgICAg
ICAgIHJldHVybiAwOworICAgIHJldHVybiBjbGllbnQtPnNjcmVlbkluZm8oKS5kZXB0aDsKK30K
KworaW50IENocm9taXVtQnJpZGdlOjpzY3JlZW5EZXB0aFBlckNvbXBvbmVudChXaWRnZXQqIHdp
ZGdldCkKK3sKKyAgICBXZWJXaWRnZXRDbGllbnQqIGNsaWVudCA9IHRvV2ViV2lkZ2V0Q2xpZW50
KHdpZGdldCk7CisgICAgaWYgKCFjbGllbnQpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVy
biBjbGllbnQtPnNjcmVlbkluZm8oKS5kZXB0aFBlckNvbXBvbmVudDsKK30KKworYm9vbCBDaHJv
bWl1bUJyaWRnZTo6c2NyZWVuSXNNb25vY2hyb21lKFdpZGdldCogd2lkZ2V0KQoreworICAgIFdl
YldpZGdldENsaWVudCogY2xpZW50ID0gdG9XZWJXaWRnZXRDbGllbnQod2lkZ2V0KTsKKyAgICBp
ZiAoIWNsaWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGNsaWVudC0+c2NyZWVu
SW5mbygpLmlzTW9ub2Nocm9tZTsKK30KKworSW50UmVjdCBDaHJvbWl1bUJyaWRnZTo6c2NyZWVu
UmVjdChXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBXZWJXaWRnZXRDbGllbnQqIGNsaWVudCA9IHRv
V2ViV2lkZ2V0Q2xpZW50KHdpZGdldCk7CisgICAgaWYgKCFjbGllbnQpCisgICAgICAgIHJldHVy
biBJbnRSZWN0KCk7CisgICAgcmV0dXJuIGNsaWVudC0+c2NyZWVuSW5mbygpLnJlY3Q7Cit9CisK
K0ludFJlY3QgQ2hyb21pdW1CcmlkZ2U6OnNjcmVlbkF2YWlsYWJsZVJlY3QoV2lkZ2V0KiB3aWRn
ZXQpCit7CisgICAgV2ViV2lkZ2V0Q2xpZW50KiBjbGllbnQgPSB0b1dlYldpZGdldENsaWVudCh3
aWRnZXQpOworICAgIGlmICghY2xpZW50KQorICAgICAgICByZXR1cm4gSW50UmVjdCgpOworICAg
IHJldHVybiBjbGllbnQtPnNjcmVlbkluZm8oKS5hdmFpbGFibGVSZWN0OworfQorCitib29sIENo
cm9taXVtQnJpZGdlOjpwb3B1cHNBbGxvd2VkKE5QUCBucHApCit7CisgICAgLy8gRklYTUU6IEdp
dmUgdGhlIGVtYmVkZGVyIGEgd2F5IHRvIGNvbnRyb2wgdGhpcy4KKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6OndpZGdldFNldEN1cnNvcihXaWRnZXQqIHdpZGdl
dCwgY29uc3QgQ3Vyc29yJiBjdXJzb3IpCit7CisgICAgQ2hyb21lQ2xpZW50SW1wbCogY2xpZW50
ID0gdG9DaHJvbWVDbGllbnRJbXBsKHdpZGdldCk7CisgICAgaWYgKGNsaWVudCkKKyAgICAgICAg
Y2xpZW50LT5zZXRDdXJzb3IoV2ViQ3Vyc29ySW5mbyhjdXJzb3IpKTsKK30KKwordm9pZCBDaHJv
bWl1bUJyaWRnZTo6d2lkZ2V0U2V0Rm9jdXMoV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgQ2hyb21l
Q2xpZW50SW1wbCogY2xpZW50ID0gdG9DaHJvbWVDbGllbnRJbXBsKHdpZGdldCk7CisgICAgaWYg
KGNsaWVudCkKKyAgICAgICAgY2xpZW50LT5mb2N1cygpOworfQorCitXb3JrZXJDb250ZXh0UHJv
eHkqIFdvcmtlckNvbnRleHRQcm94eTo6Y3JlYXRlKFdvcmtlciogd29ya2VyKQoreworICAgIHJl
dHVybiBXZWJXb3JrZXJDbGllbnRJbXBsOjpjcmVhdGVXb3JrZXJDb250ZXh0UHJveHkod29ya2Vy
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9t
aXVtL3NyYy9DaHJvbWl1bUN1cnJlbnRUaW1lLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hy
b21pdW1DdXJyZW50VGltZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MWVjY2M0MQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21pdW1D
dXJyZW50VGltZS5jcHAKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKworI2luY2x1ZGUgIldlYktpdC5oIgorI2luY2x1
ZGUgIldlYktpdENsaWVudC5oIgorCituYW1lc3BhY2UgV1RGIHsKKworZG91YmxlIGN1cnJlbnRU
aW1lKCkKK3sKKyAgICByZXR1cm4gV2ViS2l0Ojp3ZWJLaXRDbGllbnQoKS0+Y3VycmVudFRpbWUo
KTsKK30KKworfSAgLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVt
L3NyYy9DaHJvbWl1bVRocmVhZGluZy5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9taXVt
VGhyZWFkaW5nLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDJhNDMz
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWl1bVRocmVhZGlu
Zy5jcHAKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDx3
dGYvY2hyb21pdW0vQ2hyb21pdW1UaHJlYWRpbmcuaD4KKworI2luY2x1ZGUgIldlYktpdC5oIgor
I2luY2x1ZGUgIldlYktpdENsaWVudC5oIgorCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4K
KworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgQ2hyb21pdW1UaHJlYWRpbmc6OmluaXRpYWxpemVN
YWluVGhyZWFkKCkKK3sKK30KKwordm9pZCBDaHJvbWl1bVRocmVhZGluZzo6c2NoZWR1bGVEaXNw
YXRjaEZ1bmN0aW9uc09uTWFpblRocmVhZCgpCit7CisgICAgV2ViS2l0Ojp3ZWJLaXRDbGllbnQo
KS0+Y2FsbE9uTWFpblRocmVhZCgmV1RGOjpkaXNwYXRjaEZ1bmN0aW9uc0Zyb21NYWluVGhyZWFk
KTsKK30KKworfSAgLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVt
L3NyYy9Db250ZXh0TWVudUNsaWVudEltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9Db250
ZXh0TWVudUNsaWVudEltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmYzMmM3MmYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0NvbnRleHRN
ZW51Q2xpZW50SW1wbC5jcHAKQEAgLTAsMCArMSwyMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQ29udGV4dE1lbnVDbGllbnRJbXBsLmgiCisKKyNpbmNsdWRlICJDb250ZXh0TWVu
dS5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIK
KyNpbmNsdWRlICJFZGl0b3IuaCIKKyNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKKyNpbmNsdWRl
ICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkhpdFRl
c3RSZXN1bHQuaCIKKyNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRN
TE5hbWVzLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIk1lZGlhRXJyb3IuaCIKKyNp
bmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlRleHRCcmVha0l0ZXJhdG9yLmgi
CisjaW5jbHVkZSAiV2lkZ2V0LmgiCisKKyNpbmNsdWRlICJXZWJDb250ZXh0TWVudURhdGEuaCIK
KyNpbmNsdWRlICJXZWJEYXRhU291cmNlSW1wbC5oIgorI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5o
IgorI2luY2x1ZGUgIldlYlBvaW50LmgiCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisjaW5jbHVk
ZSAiV2ViVVJMLmgiCisjaW5jbHVkZSAiV2ViVVJMUmVzcG9uc2UuaCIKKyNpbmNsdWRlICJXZWJW
aWV3Q2xpZW50LmgiCisjaW5jbHVkZSAiV2ViVmlld0ltcGwuaCIKKwordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCisvLyBGaWd1cmUgb3V0IHRoZSBVUkwg
b2YgYSBwYWdlIG9yIHN1YmZyYW1lLiBSZXR1cm5zIHxwYWdlX3R5cGV8IGFzIHRoZSB0eXBlLAor
Ly8gd2hpY2ggaW5kaWNhdGVzIHBhZ2Ugb3Igc3ViZnJhbWUsIG9yIENvbnRleHROb2RlVHlwZTo6
Tk9ORSBpZiB0aGUgVVJMIGNvdWxkIG5vdAorLy8gYmUgZGV0ZXJtaW5lZCBmb3Igc29tZSByZWFz
b24uCitzdGF0aWMgV2ViVVJMIHVybEZyb21GcmFtZShGcmFtZSogZnJhbWUpCit7CisgICAgaWYg
KGZyYW1lKSB7CisgICAgICAgIERvY3VtZW50TG9hZGVyKiBkbCA9IGZyYW1lLT5sb2FkZXIoKS0+
ZG9jdW1lbnRMb2FkZXIoKTsKKyAgICAgICAgaWYgKGRsKSB7CisgICAgICAgICAgICBXZWJEYXRh
U291cmNlKiBkcyA9IFdlYkRhdGFTb3VyY2VJbXBsOjpmcm9tRG9jdW1lbnRMb2FkZXIoZGwpOwor
ICAgICAgICAgICAgaWYgKGRzKQorICAgICAgICAgICAgICAgIHJldHVybiBkcy0+aGFzVW5yZWFj
aGFibGVVUkwoKSA/IGRzLT51bnJlYWNoYWJsZVVSTCgpIDogZHMtPnJlcXVlc3QoKS51cmwoKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gV2ViVVJMKCk7Cit9CisKKy8vIEhlbHBlciBm
dW5jdGlvbiB0byBkZXRlcm1pbmUgd2hldGhlciB0ZXh0IGlzIGEgc2luZ2xlIHdvcmQgb3IgYSBz
ZW50ZW5jZS4KK3N0YXRpYyBib29sIGlzQVNpbmdsZVdvcmQoY29uc3QgU3RyaW5nJiB0ZXh0KQor
eworICAgIFRleHRCcmVha0l0ZXJhdG9yKiBpdCA9IGNoYXJhY3RlckJyZWFrSXRlcmF0b3IodGV4
dC5jaGFyYWN0ZXJzKCksIHRleHQubGVuZ3RoKCkpOworICAgIHJldHVybiBpdCAmJiB0ZXh0QnJl
YWtOZXh0KGl0KSA9PSBUZXh0QnJlYWtEb25lOworfQorCisvLyBIZWxwZXIgZnVuY3Rpb24gdG8g
Z2V0IG1pc3NwZWxsZWQgd29yZCBvbiB3aGljaCBjb250ZXh0IG1lbnUKKy8vIGlzIHRvIGJlIGV2
b2xrZWQuIFRoaXMgZnVuY3Rpb24gYWxzbyBzZXRzIHRoZSB3b3JkIG9uIHdoaWNoIGNvbnRleHQg
bWVudQorLy8gaGFzIGJlZW4gZXZva2VkIHRvIGJlIHRoZSBzZWxlY3RlZCB3b3JkLCBhcyByZXF1
aXJlZC4gVGhpcyBmdW5jdGlvbiBjaGFuZ2VzCisvLyB0aGUgc2VsZWN0aW9uIG9ubHkgd2hlbiB0
aGVyZSB3ZXJlIG5vIHNlbGVjdGVkIGNoYXJhY3RlcnMuCitzdGF0aWMgU3RyaW5nIHNlbGVjdE1p
c3NwZWxsZWRXb3JkKGNvbnN0IENvbnRleHRNZW51KiBkZWZhdWx0TWVudSwgRnJhbWUqIHNlbGVj
dGVkRnJhbWUpCit7CisgICAgLy8gRmlyc3Qgc2VsZWN0IGZyb20gc2VsZWN0ZWRUZXh0IHRvIGNo
ZWNrIGZvciBtdWx0aXBsZSB3b3JkIHNlbGVjdGlvbi4KKyAgICBTdHJpbmcgbWlzc3BlbGxlZFdv
cmQgPSBzZWxlY3RlZEZyYW1lLT5zZWxlY3RlZFRleHQoKS5zdHJpcFdoaXRlU3BhY2UoKTsKKwor
ICAgIC8vIElmIHNvbWUgdGV4dHMgd2VyZSBhbHJlYWR5IHNlbGVjdGVkLCB3ZSBkb24ndCBjaGFu
Z2UgdGhlIHNlbGVjdGlvbi4KKyAgICBpZiAoIW1pc3NwZWxsZWRXb3JkLmlzRW1wdHkoKSkgewor
ICAgICAgICAvLyBEb24ndCBwcm92aWRlIHN1Z2dlc3Rpb25zIGZvciBtdWx0aXBsZSB3b3Jkcy4K
KyAgICAgICAgaWYgKCFpc0FTaW5nbGVXb3JkKG1pc3NwZWxsZWRXb3JkKSkKKyAgICAgICAgICAg
IHJldHVybiBTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIG1pc3NwZWxsZWRXb3JkOworICAgIH0K
KworICAgIC8vIFNlbGVjdGlvbiBpcyBlbXB0eSwgc28gY2hhbmdlIHRoZSBzZWxlY3Rpb24gdG8g
dGhlIHdvcmQgdW5kZXIgdGhlIGN1cnNvci4KKyAgICBIaXRUZXN0UmVzdWx0IGhpdFRlc3RSZXN1
bHQgPSBzZWxlY3RlZEZyYW1lLT5ldmVudEhhbmRsZXIoKS0+CisgICAgICAgIGhpdFRlc3RSZXN1
bHRBdFBvaW50KGRlZmF1bHRNZW51LT5oaXRUZXN0UmVzdWx0KCkucG9pbnQoKSwgdHJ1ZSk7Cisg
ICAgTm9kZSogaW5uZXJOb2RlID0gaGl0VGVzdFJlc3VsdC5pbm5lck5vZGUoKTsKKyAgICBWaXNp
YmxlUG9zaXRpb24gcG9zKGlubmVyTm9kZS0+cmVuZGVyZXIoKS0+cG9zaXRpb25Gb3JQb2ludCgK
KyAgICAgICAgaGl0VGVzdFJlc3VsdC5sb2NhbFBvaW50KCkpKTsKKworICAgIFZpc2libGVTZWxl
Y3Rpb24gc2VsZWN0aW9uOworICAgIGlmIChwb3MuaXNOb3ROdWxsKCkpIHsKKyAgICAgICAgc2Vs
ZWN0aW9uID0gVmlzaWJsZVNlbGVjdGlvbihwb3MpOworICAgICAgICBzZWxlY3Rpb24uZXhwYW5k
VXNpbmdHcmFudWxhcml0eShXb3JkR3JhbnVsYXJpdHkpOworICAgIH0KKworICAgIGlmIChzZWxl
Y3Rpb24uaXNSYW5nZSgpKQorICAgICAgICBzZWxlY3RlZEZyYW1lLT5zZXRTZWxlY3Rpb25HcmFu
dWxhcml0eShXb3JkR3JhbnVsYXJpdHkpOworCisgICAgaWYgKHNlbGVjdGVkRnJhbWUtPnNob3Vs
ZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rpb24pKQorICAgICAgICBzZWxlY3RlZEZyYW1lLT5zZWxl
Y3Rpb24oKS0+c2V0U2VsZWN0aW9uKHNlbGVjdGlvbik7CisKKyAgICBtaXNzcGVsbGVkV29yZCA9
IHNlbGVjdGVkRnJhbWUtPnNlbGVjdGVkVGV4dCgpLnN0cmlwV2hpdGVTcGFjZSgpOworCisgICAg
Ly8gSWYgbWlzc3BlbGxlZCB3b3JkIGlzIHN0aWxsIGVtcHR5LCB0aGVuIHRoYXQgcG9ydGlvbiBz
aG91bGQgbm90IGJlCisgICAgLy8gc2VsZWN0ZWQuIFNldCB0aGUgc2VsZWN0aW9uIHRvIHRoYXQg
cG9zaXRpb24gb25seSwgYW5kIGRvIG5vdCBleHBhbmQuCisgICAgaWYgKG1pc3NwZWxsZWRXb3Jk
LmlzRW1wdHkoKSkgeworICAgICAgICBzZWxlY3Rpb24gPSBWaXNpYmxlU2VsZWN0aW9uKHBvcyk7
CisgICAgICAgIHNlbGVjdGVkRnJhbWUtPnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb24oc2VsZWN0
aW9uKTsKKyAgICB9CisKKyAgICByZXR1cm4gbWlzc3BlbGxlZFdvcmQ7Cit9CisKK1BsYXRmb3Jt
TWVudURlc2NyaXB0aW9uIENvbnRleHRNZW51Q2xpZW50SW1wbDo6Z2V0Q3VzdG9tTWVudUZyb21E
ZWZhdWx0SXRlbXMoCisgICAgQ29udGV4dE1lbnUqIGRlZmF1bHRNZW51KQoreworICAgIC8vIERp
c3BsYXlpbmcgdGhlIGNvbnRleHQgbWVudSBpbiB0aGlzIGZ1bmN0aW9uIGlzIGEgYmlnIGhhY2sg
YXMgd2UgZG9uJ3QKKyAgICAvLyBoYXZlIGNvbnRleHQsIGkuZS4gd2hldGhlciB0aGlzIGlzIGJl
aW5nIGludm9rZWQgdmlhIGEgc2NyaXB0IG9yIGluCisgICAgLy8gcmVzcG9uc2UgdG8gdXNlciBp
bnB1dCAoTW91c2UgZXZlbnQgV01fUkJVVFRPTkRPV04sCisgICAgLy8gS2V5Ym9hcmQgZXZlbnRz
IEtleVZLX0FQUFMsIFNoaWZ0K0YxMCkuIENoZWNrIGlmIHRoaXMgaXMgYmVpbmcgaW52b2tlZAor
ICAgIC8vIGluIHJlc3BvbnNlIHRvIHRoZSBhYm92ZSBpbnB1dCBldmVudHMgYmVmb3JlIHBvcHBp
bmcgdXAgdGhlIGNvbnRleHQgbWVudS4KKyAgICBpZiAoIW1fd2ViVmlldy0+Y29udGV4dE1lbnVB
bGxvd2VkKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgSGl0VGVzdFJlc3VsdCByID0gZGVm
YXVsdE1lbnUtPmhpdFRlc3RSZXN1bHQoKTsKKyAgICBGcmFtZSogc2VsZWN0ZWRGcmFtZSA9IHIu
aW5uZXJOb25TaGFyZWROb2RlKCktPmRvY3VtZW50KCktPmZyYW1lKCk7CisKKyAgICBXZWJDb250
ZXh0TWVudURhdGEgZGF0YTsKKyAgICBkYXRhLm1vdXNlUG9zaXRpb24gPSBzZWxlY3RlZEZyYW1l
LT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3coci5wb2ludCgpKTsKKworICAgIC8vIExpbmtzLCBJ
bWFnZXMsIE1lZGlhIHRhZ3MsIGFuZCBJbWFnZS9NZWRpYS1MaW5rcyB0YWtlIHByZWZlcmVuY2Ug
b3ZlcgorICAgIC8vIGFsbCBlbHNlLgorICAgIGRhdGEubGlua1VSTCA9IHIuYWJzb2x1dGVMaW5r
VVJMKCk7CisKKyAgICBkYXRhLm1lZGlhVHlwZSA9IFdlYkNvbnRleHRNZW51RGF0YTo6TWVkaWFU
eXBlTm9uZTsKKyAgICBkYXRhLm1lZGlhRmxhZ3MgPSBXZWJDb250ZXh0TWVudURhdGE6Ok1lZGlh
Tm9uZTsKKworICAgIGlmICghci5hYnNvbHV0ZUltYWdlVVJMKCkuaXNFbXB0eSgpKSB7CisgICAg
ICAgIGRhdGEuc3JjVVJMID0gci5hYnNvbHV0ZUltYWdlVVJMKCk7CisgICAgICAgIGRhdGEubWVk
aWFUeXBlID0gV2ViQ29udGV4dE1lbnVEYXRhOjpNZWRpYVR5cGVJbWFnZTsKKyAgICB9IGVsc2Ug
aWYgKCFyLmFic29sdXRlTWVkaWFVUkwoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgZGF0YS5zcmNV
UkwgPSByLmFic29sdXRlTWVkaWFVUkwoKTsKKworICAgICAgICAvLyBXZSBrbm93IHRoYXQgaWYg
YWJzb2x1dGVNZWRpYVVSTCgpIGlzIG5vdCBlbXB0eSwgdGhlbiB0aGlzCisgICAgICAgIC8vIGlz
IGEgbWVkaWEgZWxlbWVudC4KKyAgICAgICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50
ID0KKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxNZWRpYUVsZW1lbnQqPihyLmlubmVyTm9u
U2hhcmVkTm9kZSgpKTsKKyAgICAgICAgaWYgKG1lZGlhRWxlbWVudC0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OnZpZGVvVGFnKSkKKyAgICAgICAgICAgIGRhdGEubWVkaWFUeXBlID0gV2ViQ29udGV4
dE1lbnVEYXRhOjpNZWRpYVR5cGVWaWRlbzsKKyAgICAgICAgZWxzZSBpZiAobWVkaWFFbGVtZW50
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YXVkaW9UYWcpKQorICAgICAgICAgICAgZGF0YS5tZWRp
YVR5cGUgPSBXZWJDb250ZXh0TWVudURhdGE6Ok1lZGlhVHlwZUF1ZGlvOworCisgICAgICAgIGlm
IChtZWRpYUVsZW1lbnQtPmVycm9yKCkpCisgICAgICAgICAgICBkYXRhLm1lZGlhRmxhZ3MgfD0g
V2ViQ29udGV4dE1lbnVEYXRhOjpNZWRpYUluRXJyb3I7CisgICAgICAgIGlmIChtZWRpYUVsZW1l
bnQtPnBhdXNlZCgpKQorICAgICAgICAgICAgZGF0YS5tZWRpYUZsYWdzIHw9IFdlYkNvbnRleHRN
ZW51RGF0YTo6TWVkaWFQYXVzZWQ7CisgICAgICAgIGlmIChtZWRpYUVsZW1lbnQtPm11dGVkKCkp
CisgICAgICAgICAgICBkYXRhLm1lZGlhRmxhZ3MgfD0gV2ViQ29udGV4dE1lbnVEYXRhOjpNZWRp
YU11dGVkOworICAgICAgICBpZiAobWVkaWFFbGVtZW50LT5sb29wKCkpCisgICAgICAgICAgICBk
YXRhLm1lZGlhRmxhZ3MgfD0gV2ViQ29udGV4dE1lbnVEYXRhOjpNZWRpYUxvb3A7CisgICAgICAg
IGlmIChtZWRpYUVsZW1lbnQtPnN1cHBvcnRzU2F2ZSgpKQorICAgICAgICAgICAgZGF0YS5tZWRp
YUZsYWdzIHw9IFdlYkNvbnRleHRNZW51RGF0YTo6TWVkaWFDYW5TYXZlOworICAgICAgICBpZiAo
bWVkaWFFbGVtZW50LT5oYXNBdWRpbygpKQorICAgICAgICAgICAgZGF0YS5tZWRpYUZsYWdzIHw9
IFdlYkNvbnRleHRNZW51RGF0YTo6TWVkaWFIYXNBdWRpbzsKKyAgICB9CisgICAgLy8gSWYgaXQn
cyBub3QgYSBsaW5rLCBhbiBpbWFnZSwgYSBtZWRpYSBlbGVtZW50LCBvciBhbiBpbWFnZS9tZWRp
YSBsaW5rLAorICAgIC8vIHNob3cgYSBzZWxlY3Rpb24gbWVudSBvciBhIG1vcmUgZ2VuZXJpYyBw
YWdlIG1lbnUuCisgICAgZGF0YS5mcmFtZUVuY29kaW5nID0gc2VsZWN0ZWRGcmFtZS0+bG9hZGVy
KCktPmVuY29kaW5nKCk7CisKKyAgICAvLyBTZW5kIHRoZSBmcmFtZSBhbmQgcGFnZSBVUkxzIGlu
IGFueSBjYXNlLgorICAgIGRhdGEucGFnZVVSTCA9IHVybEZyb21GcmFtZShtX3dlYlZpZXctPm1h
aW5GcmFtZUltcGwoKS0+ZnJhbWUoKSk7CisgICAgaWYgKHNlbGVjdGVkRnJhbWUgIT0gbV93ZWJW
aWV3LT5tYWluRnJhbWVJbXBsKCktPmZyYW1lKCkpCisgICAgICAgIGRhdGEuZnJhbWVVUkwgPSB1
cmxGcm9tRnJhbWUoc2VsZWN0ZWRGcmFtZSk7CisKKyAgICBpZiAoci5pc1NlbGVjdGVkKCkpCisg
ICAgICAgIGRhdGEuc2VsZWN0ZWRUZXh0ID0gc2VsZWN0ZWRGcmFtZS0+c2VsZWN0ZWRUZXh0KCku
c3RyaXBXaGl0ZVNwYWNlKCk7CisKKyAgICBkYXRhLmlzRWRpdGFibGUgPSBmYWxzZTsKKyAgICBp
ZiAoci5pc0NvbnRlbnRFZGl0YWJsZSgpKSB7CisgICAgICAgIGRhdGEuaXNFZGl0YWJsZSA9IHRy
dWU7CisgICAgICAgIGlmIChtX3dlYlZpZXctPmZvY3VzZWRXZWJDb3JlRnJhbWUoKS0+ZWRpdG9y
KCktPmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkpIHsKKyAgICAgICAgICAgIGRh
dGEuaXNTcGVsbENoZWNraW5nRW5hYmxlZCA9IHRydWU7CisgICAgICAgICAgICBkYXRhLm1pc3Nw
ZWxsZWRXb3JkID0gc2VsZWN0TWlzc3BlbGxlZFdvcmQoZGVmYXVsdE1lbnUsIHNlbGVjdGVkRnJh
bWUpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gTm93IHJldHJpZXZlIHRoZSBzZWN1cml0
eSBpbmZvLgorICAgIERvY3VtZW50TG9hZGVyKiBkbCA9IHNlbGVjdGVkRnJhbWUtPmxvYWRlcigp
LT5kb2N1bWVudExvYWRlcigpOworICAgIFdlYkRhdGFTb3VyY2UqIGRzID0gV2ViRGF0YVNvdXJj
ZUltcGw6OmZyb21Eb2N1bWVudExvYWRlcihkbCk7CisgICAgaWYgKGRzKQorICAgICAgICBkYXRh
LnNlY3VyaXR5SW5mbyA9IGRzLT5yZXNwb25zZSgpLnNlY3VyaXR5SW5mbygpOworCisgICAgLy8g
Q29tcHV0ZSBlZGl0IGZsYWdzLgorICAgIGRhdGEuZWRpdEZsYWdzID0gV2ViQ29udGV4dE1lbnVE
YXRhOjpDYW5Eb05vbmU7CisgICAgaWYgKG1fd2ViVmlldy0+Zm9jdXNlZFdlYkNvcmVGcmFtZSgp
LT5lZGl0b3IoKS0+Y2FuVW5kbygpKQorICAgICAgICBkYXRhLmVkaXRGbGFncyB8PSBXZWJDb250
ZXh0TWVudURhdGE6OkNhblVuZG87CisgICAgaWYgKG1fd2ViVmlldy0+Zm9jdXNlZFdlYkNvcmVG
cmFtZSgpLT5lZGl0b3IoKS0+Y2FuUmVkbygpKQorICAgICAgICBkYXRhLmVkaXRGbGFncyB8PSBX
ZWJDb250ZXh0TWVudURhdGE6OkNhblJlZG87CisgICAgaWYgKG1fd2ViVmlldy0+Zm9jdXNlZFdl
YkNvcmVGcmFtZSgpLT5lZGl0b3IoKS0+Y2FuQ3V0KCkpCisgICAgICAgIGRhdGEuZWRpdEZsYWdz
IHw9IFdlYkNvbnRleHRNZW51RGF0YTo6Q2FuQ3V0OworICAgIGlmIChtX3dlYlZpZXctPmZvY3Vz
ZWRXZWJDb3JlRnJhbWUoKS0+ZWRpdG9yKCktPmNhbkNvcHkoKSkKKyAgICAgICAgZGF0YS5lZGl0
RmxhZ3MgfD0gV2ViQ29udGV4dE1lbnVEYXRhOjpDYW5Db3B5OworICAgIGlmIChtX3dlYlZpZXct
PmZvY3VzZWRXZWJDb3JlRnJhbWUoKS0+ZWRpdG9yKCktPmNhblBhc3RlKCkpCisgICAgICAgIGRh
dGEuZWRpdEZsYWdzIHw9IFdlYkNvbnRleHRNZW51RGF0YTo6Q2FuUGFzdGU7CisgICAgaWYgKG1f
d2ViVmlldy0+Zm9jdXNlZFdlYkNvcmVGcmFtZSgpLT5lZGl0b3IoKS0+Y2FuRGVsZXRlKCkpCisg
ICAgICAgIGRhdGEuZWRpdEZsYWdzIHw9IFdlYkNvbnRleHRNZW51RGF0YTo6Q2FuRGVsZXRlOwor
ICAgIC8vIFdlIGNhbiBhbHdheXMgc2VsZWN0IGFsbC4uLgorICAgIGRhdGEuZWRpdEZsYWdzIHw9
IFdlYkNvbnRleHRNZW51RGF0YTo6Q2FuU2VsZWN0QWxsOworCisgICAgV2ViRnJhbWUqIHNlbGVj
dGVkX3dlYl9mcmFtZSA9IFdlYkZyYW1lSW1wbDo6ZnJvbUZyYW1lKHNlbGVjdGVkRnJhbWUpOwor
ICAgIGlmIChtX3dlYlZpZXctPmNsaWVudCgpKQorICAgICAgICBtX3dlYlZpZXctPmNsaWVudCgp
LT5zaG93Q29udGV4dE1lbnUoc2VsZWN0ZWRfd2ViX2ZyYW1lLCBkYXRhKTsKKworICAgIHJldHVy
biAwOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJv
bWl1bS9zcmMvQ29udGV4dE1lbnVDbGllbnRJbXBsLmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL0Nv
bnRleHRNZW51Q2xpZW50SW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjhiNWJhYjYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0NvbnRleHRN
ZW51Q2xpZW50SW1wbC5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENvbnRleHRNZW51Q2xpZW50
SW1wbF9oCisjZGVmaW5lIENvbnRleHRNZW51Q2xpZW50SW1wbF9oCisKKyNpbmNsdWRlICJDb250
ZXh0TWVudUNsaWVudC5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViVmlld0lt
cGw7CisKK2NsYXNzIENvbnRleHRNZW51Q2xpZW50SW1wbCA6IHB1YmxpYyAgV2ViQ29yZTo6Q29u
dGV4dE1lbnVDbGllbnQgeworcHVibGljOgorICAgIENvbnRleHRNZW51Q2xpZW50SW1wbChXZWJW
aWV3SW1wbCogd2ViVmlldykgOiBtX3dlYlZpZXcod2ViVmlldykge30KKyAgICB2aXJ0dWFsIH5D
b250ZXh0TWVudUNsaWVudEltcGwoKSB7fQorICAgIHZpcnR1YWwgdm9pZCBjb3B5SW1hZ2VUb0Ns
aXBib2FyZChjb25zdCBXZWJDb3JlOjpIaXRUZXN0UmVzdWx0Jikge30KKyAgICB2aXJ0dWFsIHZv
aWQgY29udGV4dE1lbnVEZXN0cm95ZWQoKSB7fQorICAgIHZpcnR1YWwgdm9pZCBjb250ZXh0TWVu
dUl0ZW1TZWxlY3RlZChXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW0qLCBjb25zdCBXZWJDb3JlOjpD
b250ZXh0TWVudSopIHt9CisgICAgdmlydHVhbCB2b2lkIGRvd25sb2FkVVJMKGNvbnN0IFdlYkNv
cmU6OktVUkwmKSB7fQorICAgIHZpcnR1YWwgV2ViQ29yZTo6UGxhdGZvcm1NZW51RGVzY3JpcHRp
b24gZ2V0Q3VzdG9tTWVudUZyb21EZWZhdWx0SXRlbXMoV2ViQ29yZTo6Q29udGV4dE1lbnUqKTsK
KyAgICB2aXJ0dWFsIGJvb2wgaXNTcGVha2luZygpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmly
dHVhbCB2b2lkIGxvb2tVcEluRGljdGlvbmFyeShXZWJDb3JlOjpGcmFtZSopIHt9CisgICAgdmly
dHVhbCB2b2lkIHNlYXJjaFdpdGhHb29nbGUoY29uc3QgV2ViQ29yZTo6RnJhbWUqKSB7fQorICAg
IHZpcnR1YWwgYm9vbCBzaG91bGRJbmNsdWRlSW5zcGVjdEVsZW1lbnRJdGVtKCkgeyByZXR1cm4g
ZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc3BlYWsoY29uc3QgV2ViQ29yZTo6U3RyaW5nJikg
e30KKyAgICB2aXJ0dWFsIHZvaWQgc3RvcFNwZWFraW5nKCkge30KK3ByaXZhdGU6CisgICAgV2Vi
Vmlld0ltcGwqIG1fd2ViVmlldzsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLy8gQ29udGV4dE1lbnVDbGllbnRJbXBsX2g=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42835</attachid>
            <date>2009-11-09 18:59:31 -0800</date>
            <delta_ts>2009-11-10 10:27:27 -0800</delta_ts>
            <desc>Up-streaming Chromium API src files: DOMUtilities...FrameLoaderClientImpl</desc>
            <filename>bug-31276-20091109185930.patch</filename>
            <type>text/plain</type>
            <size>135597</size>
            <attacher name="Yaar Schnitman">yaar</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IDcwY2VhYjAuLjE4NjZmODUgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMiw2ICsy
LDIxMyBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgogCisgICAgICAg
IFVwLXN0cmVhbWluZyBDaHJvbWl1bSBBUEkgc3JjIGZpbGVzOiBET01VdGlsaXRpZXMuLi5GcmFt
ZUxvYWRlckNsaWVudEltcGwKKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MzEyNzYKKworICAgICAgICAqIHNyYy9ET01VdGlsaXRpZXNQcml2YXRlLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjp0b0hUTUxFbGVtZW50KToKKyAgICAgICAgKFdl
YktpdDo6dG9IVE1MSW5wdXRFbGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6dG9IVE1MTGlua0Vs
ZW1lbnQpOgorICAgICAgICAoV2ViS2l0Ojp0b0hUTUxNZXRhRWxlbWVudCk6CisgICAgICAgIChX
ZWJLaXQ6OnRvSFRNTE9wdGlvbkVsZW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpuYW1lT2ZJbnB1
dEVsZW1lbnQpOgorICAgICAgICAqIHNyYy9ET01VdGlsaXRpZXNQcml2YXRlLmg6IEFkZGVkLgor
ICAgICAgICAqIHNyYy9EcmFnQ2xpZW50SW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0
OjpEcmFnQ2xpZW50SW1wbDo6d2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24pOgorICAg
ICAgICAoV2ViS2l0OjpEcmFnQ2xpZW50SW1wbDo6d2lsbFBlcmZvcm1EcmFnU291cmNlQWN0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6RHJhZ0NsaWVudEltcGw6OmFjdGlvbk1hc2tGb3JEcmFnKToK
KyAgICAgICAgKFdlYktpdDo6RHJhZ0NsaWVudEltcGw6OmRyYWdTb3VyY2VBY3Rpb25NYXNrRm9y
UG9pbnQpOgorICAgICAgICAoV2ViS2l0OjpEcmFnQ2xpZW50SW1wbDo6c3RhcnREcmFnKToKKyAg
ICAgICAgKFdlYktpdDo6RHJhZ0NsaWVudEltcGw6OmNyZWF0ZURyYWdJbWFnZUZvckxpbmspOgor
ICAgICAgICAoV2ViS2l0OjpEcmFnQ2xpZW50SW1wbDo6ZHJhZ0NvbnRyb2xsZXJEZXN0cm95ZWQp
OgorICAgICAgICAqIHNyYy9EcmFnQ2xpZW50SW1wbC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dDo6RHJhZ0NsaWVudEltcGw6OkRyYWdDbGllbnRJbXBsKToKKyAgICAgICAgKiBzcmMvRWRpdG9y
Q2xpZW50SW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnRJbXBs
OjpFZGl0b3JDbGllbnRJbXBsKToKKyAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50SW1wbDo6
fkVkaXRvckNsaWVudEltcGwpOgorICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnRJbXBsOjpw
YWdlRGVzdHJveWVkKToKKyAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50SW1wbDo6c2hvdWxk
U2hvd0RlbGV0ZUludGVyZmFjZSk6CisgICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudEltcGw6
OnNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVu
dEltcGw6OmlzU2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZCk6CisgICAgICAgIChXZWJL
aXQ6OkVkaXRvckNsaWVudEltcGw6OnNob3VsZFNwZWxsY2hlY2tCeURlZmF1bHQpOgorICAgICAg
ICAoV2ViS2l0OjpFZGl0b3JDbGllbnRJbXBsOjppc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5h
YmxlZCk6CisgICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudEltcGw6OnRvZ2dsZUNvbnRpbnVv
dXNTcGVsbENoZWNraW5nKToKKyAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50SW1wbDo6aXNH
cmFtbWFyQ2hlY2tpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50SW1w
bDo6dG9nZ2xlR3JhbW1hckNoZWNraW5nKToKKyAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50
SW1wbDo6c3BlbGxDaGVja2VyRG9jdW1lbnRUYWcpOgorICAgICAgICAoV2ViS2l0OjpFZGl0b3JD
bGllbnRJbXBsOjppc0VkaXRhYmxlKToKKyAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50SW1w
bDo6c2hvdWxkQmVnaW5FZGl0aW5nKToKKyAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50SW1w
bDo6c2hvdWxkRW5kRWRpdGluZyk6CisgICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudEltcGw6
OnNob3VsZEluc2VydE5vZGUpOgorICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnRJbXBsOjpz
aG91bGRJbnNlcnRUZXh0KToKKyAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50SW1wbDo6c2hv
dWxkRGVsZXRlUmFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnRJbXBsOjpzaG91
bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKToKKyAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50SW1w
bDo6c2hvdWxkQXBwbHlTdHlsZSk6CisgICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudEltcGw6
OnNob3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRlKToKKyAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xp
ZW50SW1wbDo6ZGlkQmVnaW5FZGl0aW5nKToKKyAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50
SW1wbDo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OkVkaXRv
ckNsaWVudEltcGw6OnJlc3BvbmRUb0NoYW5nZWRDb250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6
OkVkaXRvckNsaWVudEltcGw6OmRpZEVuZEVkaXRpbmcpOgorICAgICAgICAoV2ViS2l0OjpFZGl0
b3JDbGllbnRJbXBsOjpkaWRXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCk6CisgICAgICAgIChX
ZWJLaXQ6OkVkaXRvckNsaWVudEltcGw6OmRpZFNldFNlbGVjdGlvblR5cGVzRm9yUGFzdGVib2Fy
ZCk6CisgICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudEltcGw6OnJlZ2lzdGVyQ29tbWFuZEZv
clVuZG8pOgorICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnRJbXBsOjpyZWdpc3RlckNvbW1h
bmRGb3JSZWRvKToKKyAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50SW1wbDo6Y2xlYXJVbmRv
UmVkb09wZXJhdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnRJbXBsOjpjYW5V
bmRvKToKKyAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50SW1wbDo6Y2FuUmVkbyk6CisgICAg
ICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudEltcGw6OnVuZG8pOgorICAgICAgICAoV2ViS2l0OjpF
ZGl0b3JDbGllbnRJbXBsOjpyZWRvKToKKyAgICAgICAgKFdlYktpdDo6KToKKyAgICAgICAgKFdl
YktpdDo6RWRpdG9yQ2xpZW50SW1wbDo6aW50ZXJwcmV0S2V5RXZlbnQpOgorICAgICAgICAoV2Vi
S2l0OjpFZGl0b3JDbGllbnRJbXBsOjpoYW5kbGVFZGl0aW5nS2V5Ym9hcmRFdmVudCk6CisgICAg
ICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudEltcGw6OmhhbmRsZUtleWJvYXJkRXZlbnQpOgorICAg
ICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnRJbXBsOjpoYW5kbGVJbnB1dE1ldGhvZEtleWRvd24p
OgorICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnRJbXBsOjp0ZXh0RmllbGREaWRCZWdpbkVk
aXRpbmcpOgorICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnRJbXBsOjp0ZXh0RmllbGREaWRF
bmRFZGl0aW5nKToKKyAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50SW1wbDo6dGV4dERpZENo
YW5nZUluVGV4dEZpZWxkKToKKyAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50SW1wbDo6c2hv
d0Zvcm1BdXRvZmlsbEZvck5vZGUpOgorICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnRJbXBs
OjphdXRvZmlsbCk6CisgICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudEltcGw6OmRvQXV0b2Zp
bGwpOgorICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnRJbXBsOjpjYW5jZWxQZW5kaW5nQXV0
b2ZpbGwpOgorICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnRJbXBsOjpvbkF1dG9maWxsU3Vn
Z2VzdGlvbkFjY2VwdGVkKToKKyAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50SW1wbDo6ZG9U
ZXh0RmllbGRDb21tYW5kRnJvbUV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50
SW1wbDo6dGV4dFdpbGxCZURlbGV0ZWRJblRleHRGaWVsZCk6CisgICAgICAgIChXZWJLaXQ6OkVk
aXRvckNsaWVudEltcGw6OnRleHREaWRDaGFuZ2VJblRleHRBcmVhKToKKyAgICAgICAgKFdlYktp
dDo6RWRpdG9yQ2xpZW50SW1wbDo6aWdub3JlV29yZEluU3BlbGxEb2N1bWVudCk6CisgICAgICAg
IChXZWJLaXQ6OkVkaXRvckNsaWVudEltcGw6OmxlYXJuV29yZCk6CisgICAgICAgIChXZWJLaXQ6
OkVkaXRvckNsaWVudEltcGw6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyk6CisgICAgICAgIChXZWJL
aXQ6OkVkaXRvckNsaWVudEltcGw6OmdldEF1dG9Db3JyZWN0U3VnZ2VzdGlvbkZvck1pc3NwZWxs
ZWRXb3JkKToKKyAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50SW1wbDo6Y2hlY2tHcmFtbWFy
T2ZTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnRJbXBsOjp1cGRhdGVTcGVs
bGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnRJ
bXBsOjp1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKToKKyAgICAgICAgKFdlYktp
dDo6RWRpdG9yQ2xpZW50SW1wbDo6c2hvd1NwZWxsaW5nVUkpOgorICAgICAgICAoV2ViS2l0OjpF
ZGl0b3JDbGllbnRJbXBsOjpzcGVsbGluZ1VJSXNTaG93aW5nKToKKyAgICAgICAgKFdlYktpdDo6
RWRpdG9yQ2xpZW50SW1wbDo6Z2V0R3Vlc3Nlc0ZvcldvcmQpOgorICAgICAgICAoV2ViS2l0OjpF
ZGl0b3JDbGllbnRJbXBsOjpzZXRJbnB1dE1ldGhvZFN0YXRlKToKKyAgICAgICAgKiBzcmMvRWRp
dG9yQ2xpZW50SW1wbC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50SW1w
bDo6KToKKyAgICAgICAgKiBzcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJLaXQ6Oik6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50SW1w
bDo6RnJhbWVMb2FkZXJDbGllbnRJbXBsKToKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJD
bGllbnRJbXBsOjp+RnJhbWVMb2FkZXJDbGllbnRJbXBsKToKKyAgICAgICAgKFdlYktpdDo6RnJh
bWVMb2FkZXJDbGllbnRJbXBsOjpmcmFtZUxvYWRlckRlc3Ryb3llZCk6CisgICAgICAgIChXZWJL
aXQ6OkZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6d2luZG93T2JqZWN0Q2xlYXJlZCk6CisgICAgICAg
IChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6ZG9jdW1lbnRFbGVtZW50QXZhaWxhYmxl
KToKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRJbXBsOjpkaWRDcmVhdGVTY3Jp
cHRDb250ZXh0Rm9yRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudElt
cGw6OmRpZERlc3Ryb3lTY3JpcHRDb250ZXh0Rm9yRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpG
cmFtZUxvYWRlckNsaWVudEltcGw6OmRpZENyZWF0ZUlzb2xhdGVkU2NyaXB0Q29udGV4dCk6Cisg
ICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6ZGlkUGVyZm9ybUZpcnN0TmF2
aWdhdGlvbik6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6cmVnaXN0
ZXJGb3JJY29uTm90aWZpY2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGll
bnRJbXBsOjpkaWRDaGFuZ2VTY3JvbGxPZmZzZXQpOgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxv
YWRlckNsaWVudEltcGw6OmFsbG93SmF2YVNjcmlwdCk6CisgICAgICAgIChXZWJLaXQ6OkZyYW1l
TG9hZGVyQ2xpZW50SW1wbDo6aGFzV2ViVmlldyk6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9h
ZGVyQ2xpZW50SW1wbDo6aGFzRnJhbWVWaWV3KToKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2Fk
ZXJDbGllbnRJbXBsOjptYWtlRG9jdW1lbnRWaWV3KToKKyAgICAgICAgKFdlYktpdDo6RnJhbWVM
b2FkZXJDbGllbnRJbXBsOjptYWtlUmVwcmVzZW50YXRpb24pOgorICAgICAgICAoV2ViS2l0OjpG
cmFtZUxvYWRlckNsaWVudEltcGw6OmZvcmNlTGF5b3V0KToKKyAgICAgICAgKFdlYktpdDo6RnJh
bWVMb2FkZXJDbGllbnRJbXBsOjpmb3JjZUxheW91dEZvck5vbkhUTUwpOgorICAgICAgICAoV2Vi
S2l0OjpGcmFtZUxvYWRlckNsaWVudEltcGw6OnNldENvcGllc09uU2Nyb2xsKToKKyAgICAgICAg
KFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRJbXBsOjpkZXRhY2hlZEZyb21QYXJlbnQyKToKKyAg
ICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRJbXBsOjpkZXRhY2hlZEZyb21QYXJlbnQz
KToKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRJbXBsOjphc3NpZ25JZGVudGlm
aWVyVG9Jbml0aWFsUmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6OmRldGVybWluZVRhcmdldFR5
cGVGcm9tTG9hZGVyKToKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRJbXBsOjpk
aXNwYXRjaFdpbGxTZW5kUmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xp
ZW50SW1wbDo6c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViS2l0OjpG
cmFtZUxvYWRlckNsaWVudEltcGw6OmRpc3BhdGNoRGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlKToKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRJbXBsOjpkaXNwYXRj
aERpZENhbmNlbEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKToKKyAgICAgICAgKFdlYktpdDo6RnJh
bWVMb2FkZXJDbGllbnRJbXBsOjpkaXNwYXRjaERpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAg
IChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6ZGlzcGF0Y2hEaWRSZWNlaXZlQ29udGVu
dExlbmd0aCk6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6ZGlzcGF0
Y2hEaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRJ
bXBsOjpkaXNwYXRjaERpZEZhaWxMb2FkaW5nKToKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2Fk
ZXJDbGllbnRJbXBsOjpkaXNwYXRjaERpZEZpbmlzaERvY3VtZW50TG9hZCk6CisgICAgICAgIChX
ZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6ZGlzcGF0Y2hEaWRMb2FkUmVzb3VyY2VGcm9t
TWVtb3J5Q2FjaGUpOgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudEltcGw6OmRp
c3BhdGNoRGlkTG9hZFJlc291cmNlQnlYTUxIdHRwUmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6
OkZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6ZGlzcGF0Y2hEaWRIYW5kbGVPbmxvYWRFdmVudHMpOgor
ICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudEltcGw6OmRpc3BhdGNoRGlkUmVjZWl2
ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkKToKKyAgICAgICAgKFdlYktpdDo6RnJh
bWVMb2FkZXJDbGllbnRJbXBsOjpkaXNwYXRjaERpZENhbmNlbENsaWVudFJlZGlyZWN0KToKKyAg
ICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRJbXBsOjpkaXNwYXRjaFdpbGxQZXJmb3Jt
Q2xpZW50UmVkaXJlY3QpOgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudEltcGw6
OmRpc3BhdGNoRGlkQ2hhbmdlTG9jYXRpb25XaXRoaW5QYWdlKToKKyAgICAgICAgKFdlYktpdDo6
RnJhbWVMb2FkZXJDbGllbnRJbXBsOjpkaXNwYXRjaFdpbGxDbG9zZSk6CisgICAgICAgIChXZWJL
aXQ6OkZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6ZGlzcGF0Y2hEaWRSZWNlaXZlSWNvbik6CisgICAg
ICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6ZGlzcGF0Y2hEaWRTdGFydFByb3Zp
c2lvbmFsTG9hZCk6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6ZGlz
cGF0Y2hEaWRSZWNlaXZlVGl0bGUpOgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVu
dEltcGw6OmRpc3BhdGNoRGlkQ29tbWl0TG9hZCk6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9h
ZGVyQ2xpZW50SW1wbDo6ZGlzcGF0Y2hEaWRGYWlsUHJvdmlzaW9uYWxMb2FkKToKKyAgICAgICAg
KFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRJbXBsOjpkaXNwYXRjaERpZEZhaWxMb2FkKToKKyAg
ICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRJbXBsOjpkaXNwYXRjaERpZEZpbmlzaExv
YWQpOgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudEltcGw6OmRpc3BhdGNoRGlk
Rmlyc3RMYXlvdXQpOgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudEltcGw6OmRp
c3BhdGNoRGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0KToKKyAgICAgICAgKFdlYktpdDo6
RnJhbWVMb2FkZXJDbGllbnRJbXBsOjpkaXNwYXRjaENyZWF0ZVBhZ2UpOgorICAgICAgICAoV2Vi
S2l0OjpGcmFtZUxvYWRlckNsaWVudEltcGw6OmRpc3BhdGNoU2hvdyk6CisgICAgICAgIChXZWJL
aXQ6OnNob3VsZFRyZWF0QXNBdHRhY2htZW50KToKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2Fk
ZXJDbGllbnRJbXBsOjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck1JTUVUeXBlKToKKyAgICAgICAg
KFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRJbXBsOjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck5l
d1dpbmRvd0FjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6
ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKToKKyAgICAgICAgKFdlYktp
dDo6RnJhbWVMb2FkZXJDbGllbnRJbXBsOjpjYW5jZWxQb2xpY3lDaGVjayk6CisgICAgICAgIChX
ZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6ZGlzcGF0Y2hVbmFibGVUb0ltcGxlbWVudFBv
bGljeSk6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6ZGlzcGF0Y2hX
aWxsU3VibWl0Rm9ybSk6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6
ZGlzcGF0Y2hEaWRMb2FkTWFpblJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2Fk
ZXJDbGllbnRJbXBsOjpyZXZlcnRUb1Byb3Zpc2lvbmFsU3RhdGUpOgorICAgICAgICAoV2ViS2l0
OjpGcmFtZUxvYWRlckNsaWVudEltcGw6OnNldE1haW5Eb2N1bWVudEVycm9yKToKKyAgICAgICAg
KFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRJbXBsOjpwb3N0UHJvZ3Jlc3NTdGFydGVkTm90aWZp
Y2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRJbXBsOjpwb3N0UHJv
Z3Jlc3NFc3RpbWF0ZUNoYW5nZWROb3RpZmljYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpGcmFt
ZUxvYWRlckNsaWVudEltcGw6OnBvc3RQcm9ncmVzc0ZpbmlzaGVkTm90aWZpY2F0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRJbXBsOjpzZXRNYWluRnJhbWVEb2N1bWVu
dFJlYWR5KToKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRJbXBsOjpzdGFydERv
d25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRJbXBsOjp3aWxsQ2hh
bmdlVGl0bGUpOgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudEltcGw6OmRpZENo
YW5nZVRpdGxlKToKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRJbXBsOjpjb21t
aXR0ZWRMb2FkKToKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRJbXBsOjpmaW5p
c2hlZExvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudEltcGw6OnVw
ZGF0ZUdsb2JhbEhpc3RvcnkpOgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudElt
cGw6OnVwZGF0ZUdsb2JhbEhpc3RvcnlSZWRpcmVjdExpbmtzKToKKyAgICAgICAgKFdlYktpdDo6
RnJhbWVMb2FkZXJDbGllbnRJbXBsOjpzaG91bGRHb1RvSGlzdG9yeUl0ZW0pOgorICAgICAgICAo
V2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudEltcGw6OmRpZERpc3BsYXlJbnNlY3VyZUNvbnRlbnQp
OgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudEltcGw6OmRpZFJ1bkluc2VjdXJl
Q29udGVudCk6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6YmxvY2tl
ZEVycm9yKToKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRJbXBsOjpjYW5jZWxs
ZWRFcnJvcik6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6Y2Fubm90
U2hvd1VSTEVycm9yKToKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRJbXBsOjpp
bnRlcnJ1cHRGb3JQb2xpY3lDaGFuZ2VFcnJvcik6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9h
ZGVyQ2xpZW50SW1wbDo6Y2Fubm90U2hvd01JTUVUeXBlRXJyb3IpOgorICAgICAgICAoV2ViS2l0
OjpGcmFtZUxvYWRlckNsaWVudEltcGw6OmZpbGVEb2VzTm90RXhpc3RFcnJvcik6CisgICAgICAg
IChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6cGx1Z2luV2lsbEhhbmRsZUxvYWRFcnJv
cik6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6c2hvdWxkRmFsbEJh
Y2spOgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudEltcGw6OmNhbkhhbmRsZVJl
cXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudEltcGw6OmNhblNob3dN
SU1FVHlwZSk6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6cmVwcmVz
ZW50YXRpb25FeGlzdHNGb3JVUkxTY2hlbWUpOgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRl
ckNsaWVudEltcGw6OmdlbmVyYXRlZE1JTUVUeXBlRm9yVVJMU2NoZW1lKToKKyAgICAgICAgKFdl
YktpdDo6RnJhbWVMb2FkZXJDbGllbnRJbXBsOjpmcmFtZUxvYWRDb21wbGV0ZWQpOgorICAgICAg
ICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudEltcGw6OnNhdmVWaWV3U3RhdGVUb0l0ZW0pOgor
ICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudEltcGw6OnJlc3RvcmVWaWV3U3RhdGUp
OgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudEltcGw6OnByb3Zpc2lvbmFsTG9h
ZFN0YXJ0ZWQpOgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudEltcGw6OmRpZEZp
bmlzaExvYWQpOgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudEltcGw6OnByZXBh
cmVGb3JEYXRhU291cmNlUmVwbGFjZW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRl
ckNsaWVudEltcGw6OmNyZWF0ZURvY3VtZW50TG9hZGVyKToKKyAgICAgICAgKFdlYktpdDo6RnJh
bWVMb2FkZXJDbGllbnRJbXBsOjpzZXRUaXRsZSk6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9h
ZGVyQ2xpZW50SW1wbDo6dXNlckFnZW50KToKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJD
bGllbnRJbXBsOjpzYXZlUGxhdGZvcm1EYXRhVG9DYWNoZWRGcmFtZSk6CisgICAgICAgIChXZWJL
aXQ6OkZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6dHJhbnNpdGlvblRvQ29tbWl0dGVkRnJvbUNhY2hl
ZEZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRJbXBsOjp0cmFuc2l0
aW9uVG9Db21taXR0ZWRGb3JOZXdQYWdlKToKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJD
bGllbnRJbXBsOjpjYW5DYWNoZVBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNs
aWVudEltcGw6OmRvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRJ
bXBsOjpjcmVhdGVGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50SW1w
bDo6Y3JlYXRlUGx1Z2luKToKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRJbXBs
OjpyZWRpcmVjdERhdGFUb1BsdWdpbik6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xp
ZW50SW1wbDo6Y3JlYXRlSmF2YUFwcGxldFdpZGdldCk6CisgICAgICAgIChXZWJLaXQ6OkZyYW1l
TG9hZGVyQ2xpZW50SW1wbDo6b2JqZWN0Q29udGVudFR5cGUpOgorICAgICAgICAoV2ViS2l0OjpG
cmFtZUxvYWRlckNsaWVudEltcGw6Om92ZXJyaWRlTWVkaWFUeXBlKToKKyAgICAgICAgKFdlYktp
dDo6RnJhbWVMb2FkZXJDbGllbnRJbXBsOjphY3Rpb25TcGVjaWZpZXNOYXZpZ2F0aW9uUG9saWN5
KToKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRJbXBsOjpoYW5kbGVCYWNrRm9y
d2FyZE5hdmlnYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudEltcGw6
OnBsdWdpbkxvYWRPYnNlcnZlcik6CisgICAgICAgICogc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1w
bC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRJbXBsOjp3ZWJG
cmFtZSk6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6d2lsbENoYW5n
ZUVzdGltYXRlZFByb2dyZXNzKToKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRJ
bXBsOjpkaWRDaGFuZ2VFc3RpbWF0ZWRQcm9ncmVzcyk6CisKKzIwMDktMTEtMDkgIFlhYXIgU2No
bml0bWFuICA8eWFhckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKICAgICAgICAgVXAtc3RyZWFtaW5nIENocm9taXVtIEFQSSBzcmMgZmlsZXM6
IENocm9tZUNsaWVudEltcGwuLi5Db250ZXh0TWVudUNsaWVudEltcGwKIAogICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzEyNzYKZGlmZiAtLWdpdCBhL1dl
YktpdC9jaHJvbWl1bS9zcmMvRE9NVXRpbGl0aWVzUHJpdmF0ZS5jcHAgYi9XZWJLaXQvY2hyb21p
dW0vc3JjL0RPTVV0aWxpdGllc1ByaXZhdGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmU4NGQ0ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3Jj
L0RPTVV0aWxpdGllc1ByaXZhdGUuY3BwCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiRE9NVXRpbGl0aWVzUHJpdmF0ZS5oIgorCisjaW5jbHVkZSAiRWxlbWVu
dC5oIgorI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTGlua0Vs
ZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTWV0YUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFt
ZXMuaCIKKyNpbmNsdWRlICJIVE1MT3B0aW9uRWxlbWVudC5oIgorI2luY2x1ZGUgIk5vZGUuaCIK
KwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSB7CisKK3RlbXBsYXRlIDxj
bGFzcyBIVE1MTm9kZVR5cGU+CitIVE1MTm9kZVR5cGUqIHRvSFRNTEVsZW1lbnQoTm9kZSogbm9k
ZSwgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkKK3sKKyAgICBpZiAobm9kZS0+aXNIVE1MRWxl
bWVudCgpCisgICAgICAgICYmIHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obm9kZSktPmhhc1Rh
Z05hbWUobmFtZSkpIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxOb2RlVHlwZSo+
KG5vZGUpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworfSAvLyBuYW1lc3BhY2UKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK0hUTUxJbnB1dEVsZW1lbnQqIHRvSFRNTElucHV0RWxlbWVudChO
b2RlKiBub2RlKQoreworICAgIHJldHVybiB0b0hUTUxFbGVtZW50PEhUTUxJbnB1dEVsZW1lbnQ+
KG5vZGUsIEhUTUxOYW1lczo6aW5wdXRUYWcpOworfQorCitIVE1MTGlua0VsZW1lbnQqIHRvSFRN
TExpbmtFbGVtZW50KE5vZGUqIG5vZGUpCit7CisgICAgcmV0dXJuIHRvSFRNTEVsZW1lbnQ8SFRN
TExpbmtFbGVtZW50Pihub2RlLCBIVE1MTmFtZXM6OmxpbmtUYWcpOworfQorCitIVE1MTWV0YUVs
ZW1lbnQqIHRvSFRNTE1ldGFFbGVtZW50KE5vZGUqIG5vZGUpCit7CisgICAgcmV0dXJuIHRvSFRN
TEVsZW1lbnQ8SFRNTE1ldGFFbGVtZW50Pihub2RlLCBIVE1MTmFtZXM6Om1ldGFUYWcpOworfQor
CitIVE1MT3B0aW9uRWxlbWVudCogdG9IVE1MT3B0aW9uRWxlbWVudChOb2RlKiBub2RlKQorewor
ICAgIHJldHVybiB0b0hUTUxFbGVtZW50PEhUTUxPcHRpb25FbGVtZW50Pihub2RlLCBIVE1MTmFt
ZXM6Om9wdGlvblRhZyk7Cit9CisKK1N0cmluZyBuYW1lT2ZJbnB1dEVsZW1lbnQoSFRNTElucHV0
RWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBTdHJpbmcgbmFtZSA9IGVsZW1lbnQtPm5hbWUoKTsK
KyAgICBTdHJpbmcgdHJpbW1lZE5hbWUgPSBuYW1lLnN0cmlwV2hpdGVTcGFjZSgpOworICAgIGlm
ICghdHJpbW1lZE5hbWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdHJpbW1lZE5hbWU7CisK
KyAgICBuYW1lID0gZWxlbWVudC0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6aWRBdHRyKTsKKyAg
ICB0cmltbWVkTmFtZSA9IG5hbWUuc3RyaXBXaGl0ZVNwYWNlKCk7CisgICAgaWYgKCF0cmltbWVk
TmFtZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB0cmltbWVkTmFtZTsKKworICAgIHJldHVy
biBTdHJpbmcoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9XZWJL
aXQvY2hyb21pdW0vc3JjL0RPTVV0aWxpdGllc1ByaXZhdGUuaCBiL1dlYktpdC9jaHJvbWl1bS9z
cmMvRE9NVXRpbGl0aWVzUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmM3MDFkMGEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0RPTVV0
aWxpdGllc1ByaXZhdGUuaApAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBET01VdGlsaXRpZXNQcml2
YXRlX2gKKyNkZWZpbmUgRE9NVXRpbGl0aWVzUHJpdmF0ZV9oCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKK2NsYXNzIEhUTUxJbnB1dEVsZW1lbnQ7CitjbGFzcyBIVE1MTGlua0VsZW1lbnQ7CitjbGFz
cyBIVE1MTWV0YUVsZW1lbnQ7CitjbGFzcyBIVE1MT3B0aW9uRWxlbWVudDsKK2NsYXNzIE5vZGU7
CitjbGFzcyBTdHJpbmc7Cit9CisKKy8vIFRoaXMgZmlsZSBpcyBhbiBhZ2dyZWdhdGUgb2YgdXNl
ZnVsIFdlYkNvcmUgb3BlcmF0aW9ucy4KK25hbWVzcGFjZSBXZWJLaXQgeworCisvLyBJZiBub2Rl
IGlzIGFuIEhUTUwgbm9kZSB3aXRoIGEgdGFnIG5hbWUgb2YgbmFtZSBpdCBpcyBjYXN0ZWQgYW5k
IHJldHVybmVkLgorLy8gSWYgbm9kZSBpcyBub3QgYW4gSFRNTCBub2RlIG9yIHRoZSB0YWcgbmFt
ZSBpcyBub3QgbmFtZSwgMCBpcyByZXR1cm5lZC4KK1dlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQq
IHRvSFRNTElucHV0RWxlbWVudChXZWJDb3JlOjpOb2RlKik7CitXZWJDb3JlOjpIVE1MTGlua0Vs
ZW1lbnQqIHRvSFRNTExpbmtFbGVtZW50KFdlYkNvcmU6Ok5vZGUqKTsKK1dlYkNvcmU6OkhUTUxN
ZXRhRWxlbWVudCogdG9IVE1MTWV0YUVsZW1lbnQoV2ViQ29yZTo6Tm9kZSopOworV2ViQ29yZTo6
SFRNTE9wdGlvbkVsZW1lbnQqIHRvSFRNTE9wdGlvbkVsZW1lbnQoV2ViQ29yZTo6Tm9kZSopOwor
CisvLyBSZXR1cm5zIHRoZSBuYW1lIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIHRoZSBzcGVjaWZp
ZWQgfGVsZW1lbnR8IHdoZW4KKy8vIHN0b3JpbmcgYXV0b2ZpbGwgZGF0YS4gIFRoaXMgaXMgZWl0
aGVyIHRoZSBmaWVsZCBuYW1lIG9yIGl0cyBpZCwgYW4gZW1wdHkKKy8vIHN0cmluZyBpZiBpdCBo
YXMgbm8gbmFtZSBhbmQgbm8gaWQuCitXZWJDb3JlOjpTdHJpbmcgbmFtZU9mSW5wdXRFbGVtZW50
KFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9EcmFnQ2xpZW50SW1wbC5j
cHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0RyYWdDbGllbnRJbXBsLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDhhOWMzCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0
L2Nocm9taXVtL3NyYy9EcmFnQ2xpZW50SW1wbC5jcHAKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRHJhZ0NsaWVudEltcGwuaCIKKworI2luY2x1ZGUgIkNo
cm9taXVtRGF0YU9iamVjdC5oIgorI2luY2x1ZGUgIkNsaXBib2FyZENocm9taXVtLmgiCisjaW5j
bHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJXZWJEcmFnRGF0YS5oIgorI2luY2x1ZGUgIldlYlZp
ZXdDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgorCit1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgRHJhZ0NsaWVudEltcGw6Ondp
bGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbiwgRHJh
Z0RhdGEqKQoreworICAgIC8vIEZJWE1FCit9CisKK3ZvaWQgRHJhZ0NsaWVudEltcGw6OndpbGxQ
ZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbihEcmFnU291cmNlQWN0aW9uLCBjb25zdCBJbnRQb2ludCYs
IENsaXBib2FyZCopCit7CisgICAgLy8gRklYTUUKK30KKworRHJhZ0Rlc3RpbmF0aW9uQWN0aW9u
IERyYWdDbGllbnRJbXBsOjphY3Rpb25NYXNrRm9yRHJhZyhEcmFnRGF0YSopCit7CisgICAgaWYg
KG1fd2ViVmlldy0+Y2xpZW50KCkgJiYgbV93ZWJWaWV3LT5jbGllbnQoKS0+YWNjZXB0c0xvYWRE
cm9wcygpKQorICAgICAgICByZXR1cm4gRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uQW55OworCisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PERyYWdEZXN0aW5hdGlvbkFjdGlvbj4oCisgICAgICAgIERyYWdE
ZXN0aW5hdGlvbkFjdGlvbkRIVE1MIHwgRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uRWRpdCk7Cit9CisK
K0RyYWdTb3VyY2VBY3Rpb24gRHJhZ0NsaWVudEltcGw6OmRyYWdTb3VyY2VBY3Rpb25NYXNrRm9y
UG9pbnQoY29uc3QgSW50UG9pbnQmIHdpbmRvd1BvaW50KQoreworICAgIC8vIFdlIHdhbnQgdG8g
aGFuZGxlIGRyYWcgb3BlcmF0aW9ucyBmb3IgYWxsIHNvdXJjZSB0eXBlcy4KKyAgICByZXR1cm4g
RHJhZ1NvdXJjZUFjdGlvbkFueTsKK30KKwordm9pZCBEcmFnQ2xpZW50SW1wbDo6c3RhcnREcmFn
KERyYWdJbWFnZVJlZiBkcmFnSW1hZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgSW50UG9pbnQmIGRyYWdJbWFnZU9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBJbnRQb2ludCYgZXZlbnRQb3MsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ2xpcGJvYXJkKiBjbGlwYm9hcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRnJhbWUqIGZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
aXNMaW5rRHJhZykKK3sKKyAgICAvLyBBZGQgYSByZWYgdG8gdGhlIGZyYW1lIGp1c3QgaW4gY2Fz
ZSBhIGxvYWQgb2NjdXJzIG1pZC1kcmFnLgorICAgIFJlZlB0cjxGcmFtZT4gZnJhbWVQcm90ZWN0
b3IgPSBmcmFtZTsKKworICAgIFdlYkRyYWdEYXRhIGRyYWdEYXRhID0gc3RhdGljX2Nhc3Q8Q2xp
cGJvYXJkQ2hyb21pdW0qPihjbGlwYm9hcmQpLT5kYXRhT2JqZWN0KCk7CisKKyAgICBEcmFnT3Bl
cmF0aW9uIGRyYWdPcGVyYXRpb25NYXNrOworICAgIGlmICghY2xpcGJvYXJkLT5zb3VyY2VPcGVy
YXRpb24oZHJhZ09wZXJhdGlvbk1hc2spKQorICAgICAgICBkcmFnT3BlcmF0aW9uTWFzayA9IERy
YWdPcGVyYXRpb25FdmVyeTsKKworICAgIG1fd2ViVmlldy0+c3RhcnREcmFnZ2luZygKKyAgICAg
ICAgZXZlbnRQb3MsIGRyYWdEYXRhLCBzdGF0aWNfY2FzdDxXZWJEcmFnT3BlcmF0aW9uc01hc2s+
KGRyYWdPcGVyYXRpb25NYXNrKSk7Cit9CisKK0RyYWdJbWFnZVJlZiBEcmFnQ2xpZW50SW1wbDo6
Y3JlYXRlRHJhZ0ltYWdlRm9yTGluayhLVVJMJiwgY29uc3QgU3RyaW5nJiBsYWJlbCwgRnJhbWUq
KQoreworICAgIC8vIEZJWE1FCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgRHJhZ0NsaWVudElt
cGw6OmRyYWdDb250cm9sbGVyRGVzdHJveWVkKCkKK3sKKyAgICAvLyBPdXIgbGlmZXRpbWUgaXMg
Ym91bmQgdG8gdGhlIFdlYlZpZXdJbXBsLgorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvRHJhZ0NsaWVudEltcGwuaCBiL1dlYktpdC9j
aHJvbWl1bS9zcmMvRHJhZ0NsaWVudEltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5mYzRjNjA4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9E
cmFnQ2xpZW50SW1wbC5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERyYWdDbGllbnRJbXBsX2gK
KyNkZWZpbmUgRHJhZ0NsaWVudEltcGxfaAorCisjaW5jbHVkZSAiRHJhZ0FjdGlvbnMuaCIKKyNp
bmNsdWRlICJEcmFnQ2xpZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIENsaXBC
b2FyZDsKK2NsYXNzIERyYWdEYXRhOworY2xhc3MgSW50UG9pbnQ7CitjbGFzcyBLVVJMOworfQor
CituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYlZpZXdJbXBsOworCitjbGFzcyBEcmFnQ2xp
ZW50SW1wbCA6IHB1YmxpYyBXZWJDb3JlOjpEcmFnQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBEcmFn
Q2xpZW50SW1wbChXZWJWaWV3SW1wbCogd2ViVmlldykgOiBtX3dlYlZpZXcod2ViVmlldykgeyB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oCisg
ICAgICAgIFdlYkNvcmU6OkRyYWdEZXN0aW5hdGlvbkFjdGlvbiwgV2ViQ29yZTo6RHJhZ0RhdGEq
KTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFBlcmZvcm1EcmFnU291cmNlQWN0aW9uKAorICAgICAg
ICBXZWJDb3JlOjpEcmFnU291cmNlQWN0aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIFdl
YkNvcmU6OkNsaXBib2FyZCopOworICAgIHZpcnR1YWwgV2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9u
QWN0aW9uIGFjdGlvbk1hc2tGb3JEcmFnKFdlYkNvcmU6OkRyYWdEYXRhKik7CisgICAgdmlydHVh
bCBXZWJDb3JlOjpEcmFnU291cmNlQWN0aW9uIGRyYWdTb3VyY2VBY3Rpb25NYXNrRm9yUG9pbnQo
CisgICAgICAgIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiB3aW5kb3dQb2ludCk7CisgICAgdmly
dHVhbCB2b2lkIHN0YXJ0RHJhZygKKyAgICAgICAgV2ViQ29yZTo6RHJhZ0ltYWdlUmVmIGRyYWdJ
bWFnZSwKKyAgICAgICAgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGRyYWdJbWFnZU9yaWdpbiwK
KyAgICAgICAgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGV2ZW50UG9zLAorICAgICAgICBXZWJD
b3JlOjpDbGlwYm9hcmQqIGNsaXBib2FyZCwKKyAgICAgICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1l
LAorICAgICAgICBib29sIGlzTGlua0RyYWcgPSBmYWxzZSk7CisgICAgdmlydHVhbCBXZWJDb3Jl
OjpEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9yTGluaygKKyAgICAgICAgV2ViQ29yZTo6
S1VSTCYsIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgbGFiZWwsIFdlYkNvcmU6OkZyYW1lKik7Cisg
ICAgdmlydHVhbCB2b2lkIGRyYWdDb250cm9sbGVyRGVzdHJveWVkKCk7CisKK3ByaXZhdGU6Cisg
ICAgV2ViVmlld0ltcGwqIG1fd2ViVmlldzsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvRWRpdG9yQ2xpZW50SW1w
bC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0VkaXRvckNsaWVudEltcGwuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4NGNlMTIKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJLaXQvY2hyb21pdW0vc3JjL0VkaXRvckNsaWVudEltcGwuY3BwCkBAIC0wLDAgKzEsOTIxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlLCBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSwgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRWRpdG9y
Q2xpZW50SW1wbC5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFZGl0Q29t
bWFuZC5oIgorI2luY2x1ZGUgIkVkaXRvci5oIgorI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgor
I2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkhU
TUxJbnB1dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJLZXli
b2FyZENvZGVzLmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVk
ZSAiUmVuZGVyT2JqZWN0LmgiCisKKyNpbmNsdWRlICJET01VdGlsaXRpZXNQcml2YXRlLmgiCisj
aW5jbHVkZSAiV2ViRWRpdGluZ0FjdGlvbi5oIgorI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5oIgor
I2luY2x1ZGUgIldlYktpdC5oIgorI2luY2x1ZGUgIldlYk5vZGUuaCIKKyNpbmNsdWRlICJXZWJQ
YXNzd29yZEF1dG9jb21wbGV0ZUxpc3RlbmVyLmgiCisjaW5jbHVkZSAiV2ViUmFuZ2UuaCIKKyNp
bmNsdWRlICJXZWJUZXh0QWZmaW5pdHkuaCIKKyNpbmNsdWRlICJXZWJWaWV3Q2xpZW50LmgiCisj
aW5jbHVkZSAiV2ViVmlld0ltcGwuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCisvLyBBcmJpdHJhcnkgZGVwdGggbGltaXQgZm9yIHRoZSB1bmRv
IHN0YWNrLCB0byBrZWVwIGl0IGZyb20gdXNpbmcKKy8vIHVuYm91bmRlZCBtZW1vcnkuICBUaGlz
IGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBkaXN0aW5jdCB1bmRvYWJsZQorLy8gYWN0aW9ucyAt
LSB1bmJyb2tlbiBzdHJldGNoZXMgb2YgdHlwZWQgY2hhcmFjdGVycyBhcmUgY29hbGVzY2VkCisv
LyBpbnRvIGEgc2luZ2xlIGFjdGlvbi4KK3N0YXRpYyBjb25zdCBzaXplX3QgbWF4aW11bVVuZG9T
dGFja0RlcHRoID0gMTAwMDsKKworLy8gVGhlIHNpemUgYWJvdmUgd2hpY2ggd2Ugc3RvcCB0cmln
Z2VyaW5nIGF1dG9maWxsIGZvciBhbiBpbnB1dCB0ZXh0IGZpZWxkCisvLyAoc28gdG8gYXZvaWQg
c2VuZGluZyBsb25nIHN0cmluZ3MgdGhyb3VnaCBJUEMpLgorc3RhdGljIGNvbnN0IHNpemVfdCBt
YXhpbXVtVGV4dFNpemVGb3JBdXRvZmlsbCA9IDEwMDA7CisKK0VkaXRvckNsaWVudEltcGw6OkVk
aXRvckNsaWVudEltcGwoV2ViVmlld0ltcGwqIHdlYnZpZXcpCisgICAgOiBtX3dlYlZpZXcod2Vi
dmlldykKKyAgICAsIG1faW5SZWRvKGZhbHNlKQorICAgICwgbV9iYWNrc3BhY2VPckRlbGV0ZVBy
ZXNzZWQoZmFsc2UpCisgICAgLCBtX3NwZWxsQ2hlY2tUaGlzRmllbGRTdGF0dXMoU3BlbGxDaGVj
a0F1dG9tYXRpYykKKyAgICAsIG1fYXV0b2ZpbGxUaW1lcih0aGlzLCAmRWRpdG9yQ2xpZW50SW1w
bDo6ZG9BdXRvZmlsbCkKK3sKK30KKworRWRpdG9yQ2xpZW50SW1wbDo6fkVkaXRvckNsaWVudElt
cGwoKQoreworfQorCit2b2lkIEVkaXRvckNsaWVudEltcGw6OnBhZ2VEZXN0cm95ZWQoKQorewor
ICAgIC8vIE91ciBsaWZldGltZSBpcyBib3VuZCB0byB0aGUgV2ViVmlld0ltcGwuCit9CisKK2Jv
b2wgRWRpdG9yQ2xpZW50SW1wbDo6c2hvdWxkU2hvd0RlbGV0ZUludGVyZmFjZShIVE1MRWxlbWVu
dCogZWxlbSkKK3sKKyAgICAvLyBOb3JtYWxseSwgd2UgZG9uJ3QgY2FyZSB0byBzaG93IFdlYkNv
cmUncyBkZWxldGlvbiBVSSwgc28gd2Ugb25seSBlbmFibGUKKyAgICAvLyBpdCBpZiBpbiB0ZXN0
aW5nIG1vZGUgYW5kIHRoZSB0ZXN0IHNwZWNpZmljYWxseSByZXF1ZXN0cyBpdCBieSB1c2luZyB0
aGlzCisgICAgLy8gbWFnaWMgY2xhc3MgbmFtZS4KKyAgICByZXR1cm4gV2ViS2l0OjpsYXlvdXRU
ZXN0TW9kZSgpCisgICAgICAgICAgICYmIGVsZW0tPmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OmNs
YXNzQXR0cikgPT0gIm5lZWRzRGVsZXRpb25VSSI7Cit9CisKK2Jvb2wgRWRpdG9yQ2xpZW50SW1w
bDo6c21hcnRJbnNlcnREZWxldGVFbmFibGVkKCkKK3sKKyAgICBpZiAobV93ZWJWaWV3LT5jbGll
bnQoKSkKKyAgICAgICAgcmV0dXJuIG1fd2ViVmlldy0+Y2xpZW50KCktPmlzU21hcnRJbnNlcnRE
ZWxldGVFbmFibGVkKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRWRpdG9yQ2xpZW50
SW1wbDo6aXNTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKCkKK3sKKyAgICBpZiAobV93
ZWJWaWV3LT5jbGllbnQoKSkKKyAgICAgICAgcmV0dXJuIG1fd2ViVmlldy0+Y2xpZW50KCktPmlz
U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZCgpOworI2lmIFBMQVRGT1JNKFdJTl9PUykK
KyAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisK
K2Jvb2wgRWRpdG9yQ2xpZW50SW1wbDo6c2hvdWxkU3BlbGxjaGVja0J5RGVmYXVsdCgpCit7Cisg
ICAgLy8gU3BlbGxjaGVjayBzaG91bGQgYmUgZW5hYmxlZCBmb3IgYWxsIGVkaXRhYmxlIGFyZWFz
IChzdWNoIGFzIHRleHRhcmVhcywKKyAgICAvLyBjb250ZW50RWRpdGFibGUgcmVnaW9ucywgYW5k
IGRlc2lnbk1vZGUgZG9jcyksIGV4Y2VwdCB0ZXh0IGlucHV0cy4KKyAgICBjb25zdCBGcmFtZSog
ZnJhbWUgPSBtX3dlYlZpZXctPmZvY3VzZWRXZWJDb3JlRnJhbWUoKTsKKyAgICBpZiAoIWZyYW1l
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY29uc3QgRWRpdG9yKiBlZGl0b3IgPSBmcmFt
ZS0+ZWRpdG9yKCk7CisgICAgaWYgKCFlZGl0b3IpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoZWRpdG9yLT5zcGVsbENoZWNraW5nRW5hYmxlZEluRm9jdXNlZE5vZGUoKSkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRv
Y3VtZW50KCk7CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGNvbnN0IE5vZGUqIG5vZGUgPSBkb2N1bWVudC0+Zm9jdXNlZE5vZGUoKTsKKyAgICAvLyBJZiB8
bm9kZXwgaXMgbnVsbCwgd2UgZGVmYXVsdCB0byBhbGxvd2luZyBzcGVsbGNoZWNraW5nLiBUaGlz
IGlzIGRvbmUgaW4KKyAgICAvLyBvcmRlciB0byBtaXRpZ2F0ZSB0aGUgaXNzdWUgd2hlbiB0aGUg
dXNlciBjbGlja3Mgb3V0c2lkZSB0aGUgdGV4dGJveCwgYXMgYQorICAgIC8vIHJlc3VsdCBvZiB3
aGljaCB8bm9kZXwgYmVjb21lcyBudWxsLCByZXN1bHRpbmcgaW4gYWxsIHRoZSBzcGVsbCBjaGVj
aworICAgIC8vIG1hcmtlcnMgYmVpbmcgZGVsZXRlZC4gQWxzbywgdGhlIEZyYW1lIHdpbGwgZGVj
aWRlIG5vdCB0byBkbyBzcGVsbGNoZWNraW5nCisgICAgLy8gaWYgdGhlIHVzZXIgY2FuJ3QgZWRp
dCAtIHNvIHJldHVybmluZyB0cnVlIGhlcmUgd2lsbCBub3QgY2F1c2UgYW55IHByb2JsZW1zCisg
ICAgLy8gdG8gdGhlIEZyYW1lJ3MgYmVoYXZpb3IuCisgICAgaWYgKCFub2RlKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICBjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVu
ZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICByZXR1cm4gIXJlbmRlcmVyLT5pc1RleHRGaWVsZCgpOworfQorCitib29sIEVkaXRvckNsaWVu
dEltcGw6OmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkKK3sKKyAgICBpZiAobV9z
cGVsbENoZWNrVGhpc0ZpZWxkU3RhdHVzID09IFNwZWxsQ2hlY2tGb3JjZWRPZmYpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9zcGVsbENoZWNrVGhpc0ZpZWxkU3RhdHVzID09IFNw
ZWxsQ2hlY2tGb3JjZWRPbikKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHNob3Vs
ZFNwZWxsY2hlY2tCeURlZmF1bHQoKTsKK30KKwordm9pZCBFZGl0b3JDbGllbnRJbXBsOjp0b2dn
bGVDb250aW51b3VzU3BlbGxDaGVja2luZygpCit7CisgICAgaWYgKGlzQ29udGludW91c1NwZWxs
Q2hlY2tpbmdFbmFibGVkKCkpCisgICAgICAgIG1fc3BlbGxDaGVja1RoaXNGaWVsZFN0YXR1cyA9
IFNwZWxsQ2hlY2tGb3JjZWRPZmY7CisgICAgZWxzZQorICAgICAgICBtX3NwZWxsQ2hlY2tUaGlz
RmllbGRTdGF0dXMgPSBTcGVsbENoZWNrRm9yY2VkT247Cit9CisKK2Jvb2wgRWRpdG9yQ2xpZW50
SW1wbDo6aXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK3ZvaWQgRWRpdG9yQ2xpZW50SW1wbDo6dG9nZ2xlR3JhbW1hckNoZWNraW5nKCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCitpbnQgRWRpdG9yQ2xpZW50SW1wbDo6c3BlbGxDaGVj
a2VyRG9jdW1lbnRUYWcoKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biAwOworfQorCitib29sIEVkaXRvckNsaWVudEltcGw6OmlzRWRpdGFibGUoKQoreworICAgIHJl
dHVybiBmYWxzZTsKK30KKworYm9vbCBFZGl0b3JDbGllbnRJbXBsOjpzaG91bGRCZWdpbkVkaXRp
bmcoUmFuZ2UqIHJhbmdlKQoreworICAgIGlmIChtX3dlYlZpZXctPmNsaWVudCgpKQorICAgICAg
ICByZXR1cm4gbV93ZWJWaWV3LT5jbGllbnQoKS0+c2hvdWxkQmVnaW5FZGl0aW5nKFdlYlJhbmdl
KHJhbmdlKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRWRpdG9yQ2xpZW50SW1wbDo6
c2hvdWxkRW5kRWRpdGluZyhSYW5nZSogcmFuZ2UpCit7CisgICAgaWYgKG1fd2ViVmlldy0+Y2xp
ZW50KCkpCisgICAgICAgIHJldHVybiBtX3dlYlZpZXctPmNsaWVudCgpLT5zaG91bGRFbmRFZGl0
aW5nKFdlYlJhbmdlKHJhbmdlKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRWRpdG9y
Q2xpZW50SW1wbDo6c2hvdWxkSW5zZXJ0Tm9kZShOb2RlKiBub2RlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFJhbmdlKiByYW5nZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBFZGl0b3JJbnNlcnRBY3Rpb24gYWN0aW9uKQoreworICAg
IGlmIChtX3dlYlZpZXctPmNsaWVudCgpKSB7CisgICAgICAgIHJldHVybiBtX3dlYlZpZXctPmNs
aWVudCgpLT5zaG91bGRJbnNlcnROb2RlKFdlYk5vZGUobm9kZSksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlJhbmdlKHJhbmdlKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8V2ViRWRpdGluZ0FjdGlvbj4oYWN0aW9uKSk7CisgICAgfQorICAgIHJldHVybiB0cnVl
OworfQorCitib29sIEVkaXRvckNsaWVudEltcGw6OnNob3VsZEluc2VydFRleHQoY29uc3QgU3Ry
aW5nJiB0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJhbmdl
KiByYW5nZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGl0b3JJ
bnNlcnRBY3Rpb24gYWN0aW9uKQoreworICAgIGlmIChtX3dlYlZpZXctPmNsaWVudCgpKSB7Cisg
ICAgICAgIHJldHVybiBtX3dlYlZpZXctPmNsaWVudCgpLT5zaG91bGRJbnNlcnRUZXh0KFdlYlN0
cmluZyh0ZXh0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgV2ViUmFuZ2UocmFuZ2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxXZWJFZGl0aW5nQWN0aW9uPihhY3Rp
b24pKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKKworYm9vbCBFZGl0b3JDbGllbnRJ
bXBsOjpzaG91bGREZWxldGVSYW5nZShSYW5nZSogcmFuZ2UpCit7CisgICAgaWYgKG1fd2ViVmll
dy0+Y2xpZW50KCkpCisgICAgICAgIHJldHVybiBtX3dlYlZpZXctPmNsaWVudCgpLT5zaG91bGRE
ZWxldGVSYW5nZShXZWJSYW5nZShyYW5nZSkpOworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IEVkaXRvckNsaWVudEltcGw6OnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoUmFuZ2UqIGZyb21S
YW5nZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBS
YW5nZSogdG9SYW5nZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBFQWZmaW5pdHkgYWZmaW5pdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBzdGlsbFNlbGVjdGluZykKK3sKKyAgICBpZiAobV93
ZWJWaWV3LT5jbGllbnQoKSkgeworICAgICAgICByZXR1cm4gbV93ZWJWaWV3LT5jbGllbnQoKS0+
c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShXZWJSYW5nZShmcm9tUmFuZ2UpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJS
YW5nZSh0b1JhbmdlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8V2ViVGV4dEFmZmluaXR5PihhZmZpbml0
eSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0aWxsU2VsZWN0aW5nKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgRWRpdG9yQ2xpZW50SW1wbDo6c2hvdWxkQXBwbHlTdHlsZShDU1NTdHlsZURlY2xhcmF0
aW9uKiBzdHlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSYW5n
ZSogcmFuZ2UpCit7CisgICAgaWYgKG1fd2ViVmlldy0+Y2xpZW50KCkpIHsKKyAgICAgICAgLy8g
RklYTUU6IFBhc3MgYSByZWZlcmVuY2UgdG8gdGhlIENTU1N0eWxlRGVjbGFyYXRpb24gc29tZWhv
dy4KKyAgICAgICAgcmV0dXJuIG1fd2ViVmlldy0+Y2xpZW50KCktPnNob3VsZEFwcGx5U3R5bGUo
V2ViU3RyaW5nKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFdlYlJhbmdlKHJhbmdlKSk7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQor
Citib29sIEVkaXRvckNsaWVudEltcGw6OnNob3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRlKFJhbmdl
KiByYW5nZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUmFuZ2UqIHJhbmdlVG9CZVJlcGxhY2VkKQoreworICAgIHJldHVybiB0cnVlOworfQorCit2
b2lkIEVkaXRvckNsaWVudEltcGw6OmRpZEJlZ2luRWRpdGluZygpCit7CisgICAgaWYgKG1fd2Vi
Vmlldy0+Y2xpZW50KCkpCisgICAgICAgIG1fd2ViVmlldy0+Y2xpZW50KCktPmRpZEJlZ2luRWRp
dGluZygpOworfQorCit2b2lkIEVkaXRvckNsaWVudEltcGw6OnJlc3BvbmRUb0NoYW5nZWRTZWxl
Y3Rpb24oKQoreworICAgIGlmIChtX3dlYlZpZXctPmNsaWVudCgpKSB7CisgICAgICAgIEZyYW1l
KiBmcmFtZSA9IG1fd2ViVmlldy0+Zm9jdXNlZFdlYkNvcmVGcmFtZSgpOworICAgICAgICBpZiAo
ZnJhbWUpCisgICAgICAgICAgICBtX3dlYlZpZXctPmNsaWVudCgpLT5kaWRDaGFuZ2VTZWxlY3Rp
b24oIWZyYW1lLT5zZWxlY3Rpb24oKS0+aXNSYW5nZSgpKTsKKyAgICB9Cit9CisKK3ZvaWQgRWRp
dG9yQ2xpZW50SW1wbDo6cmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKCkKK3sKKyAgICBpZiAobV93
ZWJWaWV3LT5jbGllbnQoKSkKKyAgICAgICAgbV93ZWJWaWV3LT5jbGllbnQoKS0+ZGlkQ2hhbmdl
Q29udGVudHMoKTsKK30KKwordm9pZCBFZGl0b3JDbGllbnRJbXBsOjpkaWRFbmRFZGl0aW5nKCkK
K3sKKyAgICBpZiAobV93ZWJWaWV3LT5jbGllbnQoKSkKKyAgICAgICAgbV93ZWJWaWV3LT5jbGll
bnQoKS0+ZGlkRW5kRWRpdGluZygpOworfQorCit2b2lkIEVkaXRvckNsaWVudEltcGw6OmRpZFdy
aXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKCkKK3sKK30KKwordm9pZCBFZGl0b3JDbGllbnRJbXBs
OjpkaWRTZXRTZWxlY3Rpb25UeXBlc0ZvclBhc3RlYm9hcmQoKQoreworfQorCit2b2lkIEVkaXRv
ckNsaWVudEltcGw6OnJlZ2lzdGVyQ29tbWFuZEZvclVuZG8oUGFzc1JlZlB0cjxFZGl0Q29tbWFu
ZD4gY29tbWFuZCkKK3sKKyAgICBpZiAobV91bmRvU3RhY2suc2l6ZSgpID09IG1heGltdW1VbmRv
U3RhY2tEZXB0aCkKKyAgICAgICAgbV91bmRvU3RhY2sucmVtb3ZlRmlyc3QoKTsgLy8gZHJvcCBv
bGRlc3QgaXRlbSBvZmYgdGhlIGZhciBlbmQKKyAgICBpZiAoIW1faW5SZWRvKQorICAgICAgICBt
X3JlZG9TdGFjay5jbGVhcigpOworICAgIG1fdW5kb1N0YWNrLmFwcGVuZChjb21tYW5kKTsKK30K
Kwordm9pZCBFZGl0b3JDbGllbnRJbXBsOjpyZWdpc3RlckNvbW1hbmRGb3JSZWRvKFBhc3NSZWZQ
dHI8RWRpdENvbW1hbmQ+IGNvbW1hbmQpCit7CisgICAgbV9yZWRvU3RhY2suYXBwZW5kKGNvbW1h
bmQpOworfQorCit2b2lkIEVkaXRvckNsaWVudEltcGw6OmNsZWFyVW5kb1JlZG9PcGVyYXRpb25z
KCkKK3sKKyAgICBtX3VuZG9TdGFjay5jbGVhcigpOworICAgIG1fcmVkb1N0YWNrLmNsZWFyKCk7
Cit9CisKK2Jvb2wgRWRpdG9yQ2xpZW50SW1wbDo6Y2FuVW5kbygpIGNvbnN0Cit7CisgICAgcmV0
dXJuICFtX3VuZG9TdGFjay5pc0VtcHR5KCk7Cit9CisKK2Jvb2wgRWRpdG9yQ2xpZW50SW1wbDo6
Y2FuUmVkbygpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX3JlZG9TdGFjay5pc0VtcHR5KCk7Cit9
CisKK3ZvaWQgRWRpdG9yQ2xpZW50SW1wbDo6dW5kbygpCit7CisgICAgaWYgKGNhblVuZG8oKSkg
eworICAgICAgICBFZGl0Q29tbWFuZFN0YWNrOjppdGVyYXRvciBiYWNrID0gLS1tX3VuZG9TdGFj
ay5lbmQoKTsKKyAgICAgICAgUmVmUHRyPEVkaXRDb21tYW5kPiBjb21tYW5kKCpiYWNrKTsKKyAg
ICAgICAgbV91bmRvU3RhY2sucmVtb3ZlKGJhY2spOworICAgICAgICBjb21tYW5kLT51bmFwcGx5
KCk7CisgICAgICAgIC8vIHVuYXBwbHkgd2lsbCBjYWxsIHVzIGJhY2sgdG8gcHVzaCB0aGlzIGNv
bW1hbmQgb250byB0aGUgcmVkbyBzdGFjay4KKyAgICB9Cit9CisKK3ZvaWQgRWRpdG9yQ2xpZW50
SW1wbDo6cmVkbygpCit7CisgICAgaWYgKGNhblJlZG8oKSkgeworICAgICAgICBFZGl0Q29tbWFu
ZFN0YWNrOjppdGVyYXRvciBiYWNrID0gLS1tX3JlZG9TdGFjay5lbmQoKTsKKyAgICAgICAgUmVm
UHRyPEVkaXRDb21tYW5kPiBjb21tYW5kKCpiYWNrKTsKKyAgICAgICAgbV9yZWRvU3RhY2sucmVt
b3ZlKGJhY2spOworCisgICAgICAgIEFTU0VSVCghbV9pblJlZG8pOworICAgICAgICBtX2luUmVk
byA9IHRydWU7CisgICAgICAgIGNvbW1hbmQtPnJlYXBwbHkoKTsKKyAgICAgICAgLy8gcmVhcHBs
eSB3aWxsIGNhbGwgdXMgYmFjayB0byBwdXNoIHRoaXMgY29tbWFuZCBvbnRvIHRoZSB1bmRvIHN0
YWNrLgorICAgICAgICBtX2luUmVkbyA9IGZhbHNlOworICAgIH0KK30KKworLy8KKy8vIFRoZSBi
ZWxvdyBjb2RlIHdhcyBhZGFwdGVkIGZyb20gdGhlIFdlYktpdCBmaWxlIHdlYnZpZXcuY3BwCisv
LworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgQ3RybEtleSA9IDEgPDwgMDsKK3N0YXRpYyBjb25z
dCB1bnNpZ25lZCBBbHRLZXkgPSAxIDw8IDE7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgU2hpZnRL
ZXkgPSAxIDw8IDI7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgTWV0YUtleSA9IDEgPDwgMzsKKyNp
ZiBQTEFURk9STShEQVJXSU4pCisvLyBBbGlhc2VzIGZvciB0aGUgZ2VuZXJpYyBrZXkgZGVmaW50
aW9ucyB0byBtYWtlIGtiZCBzaG9ydGN1dHMgZGVmaW5pdGlvbnMgbW9yZQorLy8gcmVhZGFibGUg
b24gT1MgWC4KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBPcHRpb25LZXkgID0gQWx0S2V5OworCisv
LyBEbyBub3QgdXNlIHRoaXMgY29uc3RhbnQgZm9yIGFueXRoaW5nIGJ1dCBjdXJzb3IgbW92ZW1l
bnQgY29tbWFuZHMuIEtleXMKKy8vIHdpdGggY21kIHNldCBoYXZlIHRoZWlyIHxpc1N5c3RlbUtl
eXwgYml0IHNldCwgc28gY2hhbmNlcyBhcmUgdGhlIHNob3J0Y3V0CisvLyB3aWxsIG5vdCBiZSBl
eGVjdXRlZC4gQW5vdGhlciwgbGVzcyBpbXBvcnRhbnQsIHJlYXNvbiBpcyB0aGF0IHNob3J0Y3V0
cworLy8gZGVmaW5lZCBpbiB0aGUgcmVuZGVyZXIgZG8gbm90IGJsaW5rIHRoZSBtZW51IGl0ZW0g
dGhhdCB0aGV5IHRyaWdnZXJlZC4gIFNlZQorLy8gaHR0cDovL2NyYnVnLmNvbS8yNTg1NiBhbmQg
dGhlIGJ1Z3MgbGlua2VkIGZyb20gdGhlcmUgZm9yIGRldGFpbHMuCitzdGF0aWMgY29uc3QgdW5z
aWduZWQgQ29tbWFuZEtleSA9IE1ldGFLZXk7CisjZW5kaWYKKworLy8gS2V5cyB3aXRoIHNwZWNp
YWwgbWVhbmluZy4gVGhlc2Ugd2lsbCBiZSBkZWxlZ2F0ZWQgdG8gdGhlIGVkaXRvciB1c2luZwor
Ly8gdGhlIGV4ZWNDb21tYW5kKCkgbWV0aG9kCitzdHJ1Y3QgS2V5RG93bkVudHJ5IHsKKyAgICB1
bnNpZ25lZCB2aXJ0dWFsS2V5OworICAgIHVuc2lnbmVkIG1vZGlmaWVyczsKKyAgICBjb25zdCBj
aGFyKiBuYW1lOworfTsKKworc3RydWN0IEtleVByZXNzRW50cnkgeworICAgIHVuc2lnbmVkIGNo
YXJDb2RlOworICAgIHVuc2lnbmVkIG1vZGlmaWVyczsKKyAgICBjb25zdCBjaGFyKiBuYW1lOwor
fTsKKworc3RhdGljIGNvbnN0IEtleURvd25FbnRyeSBrZXlEb3duRW50cmllc1tdID0geworICAg
IHsgVktFWV9MRUZULCAgIDAsICAgICAgICAgICAgICAgICAgIk1vdmVMZWZ0IiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IFZLRVlfTEVGVCwgICBTaGlmdEtleSwgICAgICAg
ICAgICJNb3ZlTGVmdEFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICAgIH0sCisjaWYgUExBVEZP
Uk0oREFSV0lOKQorICAgIHsgVktFWV9MRUZULCAgIE9wdGlvbktleSwgICAgICAgICAgIk1vdmVX
b3JkTGVmdCIgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IFZLRVlfTEVGVCwgICBP
cHRpb25LZXkgfCBTaGlmdEtleSwKKyAgICAgICAgIk1vdmVXb3JkTGVmdEFuZE1vZGlmeVNlbGVj
dGlvbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisjZWxzZQorICAg
IHsgVktFWV9MRUZULCAgIEN0cmxLZXksICAgICAgICAgICAgIk1vdmVXb3JkTGVmdCIgICAgICAg
ICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IFZLRVlfTEVGVCwgICBDdHJsS2V5IHwgU2hpZnRL
ZXksCisgICAgICAgICJNb3ZlV29yZExlZnRBbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorI2VuZGlmCisgICAgeyBWS0VZX1JJR0hULCAg
MCwgICAgICAgICAgICAgICAgICAiTW92ZVJpZ2h0IiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9LAorICAgIHsgVktFWV9SSUdIVCwgIFNoaWZ0S2V5LCAgICAgICAgICAgIk1vdmVSaWdodEFu
ZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICAgfSwKKyNpZiBQTEFURk9STShEQVJXSU4pCisgICAg
eyBWS0VZX1JJR0hULCAgT3B0aW9uS2V5LCAgICAgICAgICAiTW92ZVdvcmRSaWdodCIgICAgICAg
ICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktFWV9SSUdIVCwgIE9wdGlvbktleSB8IFNoaWZ0
S2V5LAorICAgICAgIk1vdmVXb3JkUmlnaHRBbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyNlbHNlCisgICAgeyBWS0VZX1JJR0hULCAg
Q3RybEtleSwgICAgICAgICAgICAiTW92ZVdvcmRSaWdodCIgICAgICAgICAgICAgICAgICAgICAg
ICB9LAorICAgIHsgVktFWV9SSUdIVCwgIEN0cmxLZXkgfCBTaGlmdEtleSwKKyAgICAgICJNb3Zl
V29yZFJpZ2h0QW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0sCisjZW5kaWYKKyAgICB7IFZLRVlfVVAsICAgICAwLCAgICAgICAgICAgICAg
ICAgICJNb3ZlVXAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBWS0VZ
X1VQLCAgICAgU2hpZnRLZXksICAgICAgICAgICAiTW92ZVVwQW5kTW9kaWZ5U2VsZWN0aW9uIiAg
ICAgICAgICAgICB9LAorICAgIHsgVktFWV9QUklPUiwgIFNoaWZ0S2V5LCAgICAgICAgICAgIk1v
dmVQYWdlVXBBbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgfSwKKyAgICB7IFZLRVlfRE9XTiwg
ICAwLCAgICAgICAgICAgICAgICAgICJNb3ZlRG93biIgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0sCisgICAgeyBWS0VZX0RPV04sICAgU2hpZnRLZXksICAgICAgICAgICAiTW92ZURvd25B
bmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgICB9LAorICAgIHsgVktFWV9ORVhULCAgIFNoaWZ0
S2V5LCAgICAgICAgICAgIk1vdmVQYWdlRG93bkFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgfSwK
KyAgICB7IFZLRVlfUFJJT1IsICAwLCAgICAgICAgICAgICAgICAgICJNb3ZlUGFnZVVwIiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBWS0VZX05FWFQsICAgMCwgICAgICAgICAg
ICAgICAgICAiTW92ZVBhZ2VEb3duIiAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsg
VktFWV9IT01FLCAgIDAsICAgICAgICAgICAgICAgICAgIk1vdmVUb0JlZ2lubmluZ09mTGluZSIg
ICAgICAgICAgICAgICAgfSwKKyAgICB7IFZLRVlfSE9NRSwgICBTaGlmdEtleSwKKyAgICAgICAg
Ik1vdmVUb0JlZ2lubmluZ09mTGluZUFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0sCisjaWYgUExBVEZPUk0oREFSV0lOKQorICAgIHsgVktFWV9MRUZULCAg
IENvbW1hbmRLZXksICAgICAgICAgIk1vdmVUb0JlZ2lubmluZ09mTGluZSIgICAgICAgICAgICAg
ICAgfSwKKyAgICB7IFZLRVlfTEVGVCwgICBDb21tYW5kS2V5IHwgU2hpZnRLZXksCisgICAgICAi
TW92ZVRvQmVnaW5uaW5nT2ZMaW5lQW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9LAorI2VuZGlmCisjaWYgUExBVEZPUk0oREFSV0lOKQorICAgIHsgVktF
WV9VUCwgICAgIENvbW1hbmRLZXksICAgICAgICAgIk1vdmVUb0JlZ2lubmluZ09mRG9jdW1lbnQi
ICAgICAgICAgICAgfSwKKyAgICB7IFZLRVlfVVAsICAgICBDb21tYW5kS2V5IHwgU2hpZnRLZXks
CisgICAgICAgICJNb3ZlVG9CZWdpbm5pbmdPZkRvY3VtZW50QW5kTW9kaWZ5U2VsZWN0aW9uIiAg
ICAgICAgICAgICAgICAgICAgICAgICB9LAorI2Vsc2UKKyAgICB7IFZLRVlfSE9NRSwgICBDdHJs
S2V5LCAgICAgICAgICAgICJNb3ZlVG9CZWdpbm5pbmdPZkRvY3VtZW50IiAgICAgICAgICAgIH0s
CisgICAgeyBWS0VZX0hPTUUsICAgQ3RybEtleSB8IFNoaWZ0S2V5LAorICAgICAgICAiTW92ZVRv
QmVnaW5uaW5nT2ZEb2N1bWVudEFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICAgICAgICAgICAg
ICAgICAgfSwKKyNlbmRpZgorICAgIHsgVktFWV9FTkQsICAgIDAsICAgICAgICAgICAgICAgICAg
Ik1vdmVUb0VuZE9mTGluZSIgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IFZLRVlfRU5E
LCAgICBTaGlmdEtleSwgICAgICAgICAgICJNb3ZlVG9FbmRPZkxpbmVBbmRNb2RpZnlTZWxlY3Rp
b24iICAgIH0sCisjaWYgUExBVEZPUk0oREFSV0lOKQorICAgIHsgVktFWV9ET1dOLCAgIENvbW1h
bmRLZXksICAgICAgICAgIk1vdmVUb0VuZE9mRG9jdW1lbnQiICAgICAgICAgICAgICAgICAgfSwK
KyAgICB7IFZLRVlfRE9XTiwgICBDb21tYW5kS2V5IHwgU2hpZnRLZXksCisgICAgICAgICJNb3Zl
VG9FbmRPZkRvY3VtZW50QW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9LAorI2Vsc2UKKyAgICB7IFZLRVlfRU5ELCAgICBDdHJsS2V5LCAgICAgICAgICAg
ICJNb3ZlVG9FbmRPZkRvY3VtZW50IiAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBWS0VZX0VO
RCwgICAgQ3RybEtleSB8IFNoaWZ0S2V5LAorICAgICAgICAiTW92ZVRvRW5kT2ZEb2N1bWVudEFu
ZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyNlbmRp
ZgorI2lmIFBMQVRGT1JNKERBUldJTikKKyAgICB7IFZLRVlfUklHSFQsICBDb21tYW5kS2V5LCAg
ICAgICAgICJNb3ZlVG9FbmRPZkxpbmUiICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBW
S0VZX1JJR0hULCAgQ29tbWFuZEtleSB8IFNoaWZ0S2V5LAorICAgICAgICAiTW92ZVRvRW5kT2ZM
aW5lQW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSwKKyNlbmRpZgorICAgIHsgVktFWV9CQUNLLCAgIDAsICAgICAgICAgICAgICAgICAgIkRlbGV0
ZUJhY2t3YXJkIiAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IFZLRVlfQkFDSywgICBT
aGlmdEtleSwgICAgICAgICAgICJEZWxldGVCYWNrd2FyZCIgICAgICAgICAgICAgICAgICAgICAg
IH0sCisgICAgeyBWS0VZX0RFTEVURSwgMCwgICAgICAgICAgICAgICAgICAiRGVsZXRlRm9yd2Fy
ZCIgICAgICAgICAgICAgICAgICAgICAgICB9LAorI2lmIFBMQVRGT1JNKERBUldJTikKKyAgICB7
IFZLRVlfQkFDSywgICBPcHRpb25LZXksICAgICAgICAgICJEZWxldGVXb3JkQmFja3dhcmQiICAg
ICAgICAgICAgICAgICAgIH0sCisgICAgeyBWS0VZX0RFTEVURSwgT3B0aW9uS2V5LCAgICAgICAg
ICAiRGVsZXRlV29yZEZvcndhcmQiICAgICAgICAgICAgICAgICAgICB9LAorI2Vsc2UKKyAgICB7
IFZLRVlfQkFDSywgICBDdHJsS2V5LCAgICAgICAgICAgICJEZWxldGVXb3JkQmFja3dhcmQiICAg
ICAgICAgICAgICAgICAgIH0sCisgICAgeyBWS0VZX0RFTEVURSwgQ3RybEtleSwgICAgICAgICAg
ICAiRGVsZXRlV29yZEZvcndhcmQiICAgICAgICAgICAgICAgICAgICB9LAorI2VuZGlmCisgICAg
eyAnQicsICAgICAgICAgQ3RybEtleSwgICAgICAgICAgICAiVG9nZ2xlQm9sZCIgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9LAorICAgIHsgJ0knLCAgICAgICAgIEN0cmxLZXksICAgICAgICAg
ICAgIlRvZ2dsZUl0YWxpYyIgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7ICdVJywg
ICAgICAgICBDdHJsS2V5LCAgICAgICAgICAgICJUb2dnbGVVbmRlcmxpbmUiICAgICAgICAgICAg
ICAgICAgICAgIH0sCisgICAgeyBWS0VZX0VTQ0FQRSwgMCwgICAgICAgICAgICAgICAgICAiQ2Fu
Y2VsIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktFWV9PRU1fUEVS
SU9ELCBDdHJsS2V5LCAgICAgICAgIkNhbmNlbCIgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSwKKyAgICB7IFZLRVlfVEFCLCAgICAwLCAgICAgICAgICAgICAgICAgICJJbnNlcnRUYWIi
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBWS0VZX1RBQiwgICAgU2hpZnRL
ZXksICAgICAgICAgICAiSW5zZXJ0QmFja3RhYiIgICAgICAgICAgICAgICAgICAgICAgICB9LAor
ICAgIHsgVktFWV9SRVRVUk4sIDAsICAgICAgICAgICAgICAgICAgIkluc2VydE5ld2xpbmUiICAg
ICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IFZLRVlfUkVUVVJOLCBDdHJsS2V5LCAgICAg
ICAgICAgICJJbnNlcnROZXdsaW5lIiAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBW
S0VZX1JFVFVSTiwgQWx0S2V5LCAgICAgICAgICAgICAiSW5zZXJ0TmV3bGluZSIgICAgICAgICAg
ICAgICAgICAgICAgICB9LAorICAgIHsgVktFWV9SRVRVUk4sIEFsdEtleSB8IFNoaWZ0S2V5LCAg
Ikluc2VydE5ld2xpbmUiICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IFZLRVlfUkVU
VVJOLCBTaGlmdEtleSwgICAgICAgICAgICJJbnNlcnRMaW5lQnJlYWsiICAgICAgICAgICAgICAg
ICAgICAgIH0sCisgICAgeyBWS0VZX0lOU0VSVCwgQ3RybEtleSwgICAgICAgICAgICAiQ29weSIg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktFWV9JTlNFUlQsIFNo
aWZ0S2V5LCAgICAgICAgICAgIlBhc3RlIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSwKKyAgICB7IFZLRVlfREVMRVRFLCBTaGlmdEtleSwgICAgICAgICAgICJDdXQiICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisjaWYgIVBMQVRGT1JNKERBUldJTikKKyAgICAv
LyBPbiBPUyBYLCB3ZSBwaXBlIHRoZXNlIGJhY2sgdG8gdGhlIGJyb3dzZXIsIHNvIHRoYXQgaXQg
Y2FuIGRvIG1lbnUgaXRlbQorICAgIC8vIGJsaW5raW5nLgorICAgIHsgJ0MnLCAgICAgICAgIEN0
cmxLZXksICAgICAgICAgICAgIkNvcHkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSwKKyAgICB7ICdWJywgICAgICAgICBDdHJsS2V5LCAgICAgICAgICAgICJQYXN0ZSIgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyAnVicsICAgICAgICAgQ3RybEtleSB8
IFNoaWZ0S2V5LCAiUGFzdGVBbmRNYXRjaFN0eWxlIiAgICAgICAgICAgICAgICAgICB9LAorICAg
IHsgJ1gnLCAgICAgICAgIEN0cmxLZXksICAgICAgICAgICAgIkN1dCIgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSwKKyAgICB7ICdBJywgICAgICAgICBDdHJsS2V5LCAgICAgICAg
ICAgICJTZWxlY3RBbGwiICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyAnWics
ICAgICAgICAgQ3RybEtleSwgICAgICAgICAgICAiVW5kbyIgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9LAorICAgIHsgJ1onLCAgICAgICAgIEN0cmxLZXkgfCBTaGlmdEtleSwgIlJl
ZG8iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7ICdZJywgICAgICAg
ICBDdHJsS2V5LCAgICAgICAgICAgICJSZWRvIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0sCisjZW5kaWYKK307CisKK3N0YXRpYyBjb25zdCBLZXlQcmVzc0VudHJ5IGtleVByZXNz
RW50cmllc1tdID0geworICAgIHsgJ1x0JywgICAwLCAgICAgICAgICAgICAgICAgICJJbnNlcnRU
YWIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7ICdcdCcsICAgU2hp
ZnRLZXksICAgICAgICAgICAiSW5zZXJ0QmFja3RhYiIgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0sCisgICAgeyAnXHInLCAgIDAsICAgICAgICAgICAgICAgICAgIkluc2VydE5ld2xpbmUi
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgJ1xyJywgICBDdHJsS2V5LCAg
ICAgICAgICAgICJJbnNlcnROZXdsaW5lIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwK
KyAgICB7ICdccicsICAgU2hpZnRLZXksICAgICAgICAgICAiSW5zZXJ0TGluZUJyZWFrIiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyAnXHInLCAgIEFsdEtleSwgICAgICAgICAg
ICAgIkluc2VydE5ld2xpbmUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsg
J1xyJywgICBBbHRLZXkgfCBTaGlmdEtleSwgICJJbnNlcnROZXdsaW5lIiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSwKK307CisKK2NvbnN0IGNoYXIqIEVkaXRvckNsaWVudEltcGw6Omlu
dGVycHJldEtleUV2ZW50KGNvbnN0IEtleWJvYXJkRXZlbnQqIGV2dCkKK3sKKyAgICBjb25zdCBQ
bGF0Zm9ybUtleWJvYXJkRXZlbnQqIGtleUV2ZW50ID0gZXZ0LT5rZXlFdmVudCgpOworICAgIGlm
ICgha2V5RXZlbnQpCisgICAgICAgIHJldHVybiAiIjsKKworICAgIHN0YXRpYyBIYXNoTWFwPGlu
dCwgY29uc3QgY2hhcio+KiBrZXlEb3duQ29tbWFuZHNNYXAgPSAwOworICAgIHN0YXRpYyBIYXNo
TWFwPGludCwgY29uc3QgY2hhcio+KiBrZXlQcmVzc0NvbW1hbmRzTWFwID0gMDsKKworICAgIGlm
ICgha2V5RG93bkNvbW1hbmRzTWFwKSB7CisgICAgICAgIGtleURvd25Db21tYW5kc01hcCA9IG5l
dyBIYXNoTWFwPGludCwgY29uc3QgY2hhcio+OworICAgICAgICBrZXlQcmVzc0NvbW1hbmRzTWFw
ID0gbmV3IEhhc2hNYXA8aW50LCBjb25zdCBjaGFyKj47CisKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGFycmF5c2l6ZShrZXlEb3duRW50cmllcyk7IGkrKykgeworICAgICAgICAg
ICAga2V5RG93bkNvbW1hbmRzTWFwLT5zZXQoa2V5RG93bkVudHJpZXNbaV0ubW9kaWZpZXJzIDw8
IDE2IHwga2V5RG93bkVudHJpZXNbaV0udmlydHVhbEtleSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGtleURvd25FbnRyaWVzW2ldLm5hbWUpOworICAgICAgICB9CisKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFycmF5c2l6ZShrZXlQcmVzc0VudHJpZXMp
OyBpKyspIHsKKyAgICAgICAgICAgIGtleVByZXNzQ29tbWFuZHNNYXAtPnNldChrZXlQcmVzc0Vu
dHJpZXNbaV0ubW9kaWZpZXJzIDw8IDE2IHwga2V5UHJlc3NFbnRyaWVzW2ldLmNoYXJDb2RlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleVByZXNzRW50cmllc1tpXS5u
YW1lKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHVuc2lnbmVkIG1vZGlmaWVycyA9IDA7Cisg
ICAgaWYgKGtleUV2ZW50LT5zaGlmdEtleSgpKQorICAgICAgICBtb2RpZmllcnMgfD0gU2hpZnRL
ZXk7CisgICAgaWYgKGtleUV2ZW50LT5hbHRLZXkoKSkKKyAgICAgICAgbW9kaWZpZXJzIHw9IEFs
dEtleTsKKyAgICBpZiAoa2V5RXZlbnQtPmN0cmxLZXkoKSkKKyAgICAgICAgbW9kaWZpZXJzIHw9
IEN0cmxLZXk7CisgICAgaWYgKGtleUV2ZW50LT5tZXRhS2V5KCkpCisgICAgICAgIG1vZGlmaWVy
cyB8PSBNZXRhS2V5OworCisgICAgaWYgKGtleUV2ZW50LT50eXBlKCkgPT0gUGxhdGZvcm1LZXli
b2FyZEV2ZW50OjpSYXdLZXlEb3duKSB7CisgICAgICAgIGludCBtYXBLZXkgPSBtb2RpZmllcnMg
PDwgMTYgfCBldnQtPmtleUNvZGUoKTsKKyAgICAgICAgcmV0dXJuIG1hcEtleSA/IGtleURvd25D
b21tYW5kc01hcC0+Z2V0KG1hcEtleSkgOiAwOworICAgIH0KKworICAgIGludCBtYXBLZXkgPSBt
b2RpZmllcnMgPDwgMTYgfCBldnQtPmNoYXJDb2RlKCk7CisgICAgcmV0dXJuIG1hcEtleSA/IGtl
eVByZXNzQ29tbWFuZHNNYXAtPmdldChtYXBLZXkpIDogMDsKK30KKworYm9vbCBFZGl0b3JDbGll
bnRJbXBsOjpoYW5kbGVFZGl0aW5nS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBldnQpCit7
CisgICAgY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50KiBrZXlFdmVudCA9IGV2dC0+a2V5RXZl
bnQoKTsKKyAgICAvLyBkbyBub3QgdHJlYXQgdGhpcyBhcyB0ZXh0IGlucHV0IGlmIGl0J3MgYSBz
eXN0ZW0ga2V5IGV2ZW50CisgICAgaWYgKCFrZXlFdmVudCB8fCBrZXlFdmVudC0+aXNTeXN0ZW1L
ZXkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgRnJhbWUqIGZyYW1lID0gZXZ0LT50
YXJnZXQoKS0+dG9Ob2RlKCktPmRvY3VtZW50KCktPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU3RyaW5nIGNvbW1hbmROYW1lID0gaW50ZXJw
cmV0S2V5RXZlbnQoZXZ0KTsKKyAgICBFZGl0b3I6OkNvbW1hbmQgY29tbWFuZCA9IGZyYW1lLT5l
ZGl0b3IoKS0+Y29tbWFuZChjb21tYW5kTmFtZSk7CisKKyAgICBpZiAoa2V5RXZlbnQtPnR5cGUo
KSA9PSBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OlJhd0tleURvd24pIHsKKyAgICAgICAgLy8gV2Vi
S2l0IGRvZXNuJ3QgaGF2ZSBlbm91Z2ggaW5mb3JtYXRpb24gYWJvdXQgbW9kZSB0byBkZWNpZGUg
aG93CisgICAgICAgIC8vIGNvbW1hbmRzIHRoYXQganVzdCBpbnNlcnQgdGV4dCBpZiBleGVjdXRl
ZCB2aWEgRWRpdG9yIHNob3VsZCBiZSB0cmVhdGVkLAorICAgICAgICAvLyBzbyB3ZSBsZWF2ZSBp
dCB1cG9uIFdlYkNvcmUgdG8gZWl0aGVyIGhhbmRsZSB0aGVtIGltbWVkaWF0ZWx5CisgICAgICAg
IC8vIChlLmcuIFRhYiB0aGF0IGNoYW5nZXMgZm9jdXMpIG9yIGxldCBhIGtleXByZXNzIGV2ZW50
IGJlIGdlbmVyYXRlZAorICAgICAgICAvLyAoZS5nLiBUYWIgdGhhdCBpbnNlcnRzIGEgVGFiIGNo
YXJhY3Rlciwgb3IgRW50ZXIpLgorICAgICAgICBpZiAoY29tbWFuZC5pc1RleHRJbnNlcnRpb24o
KSB8fCBjb21tYW5kTmFtZS5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIGlmIChjb21tYW5kLmV4ZWN1dGUoZXZ0KSkgeworICAgICAgICAgICAgaWYgKG1fd2Vi
Vmlldy0+Y2xpZW50KCkpCisgICAgICAgICAgICAgICAgbV93ZWJWaWV3LT5jbGllbnQoKS0+ZGlk
RXhlY3V0ZUNvbW1hbmQoV2ViU3RyaW5nKGNvbW1hbmROYW1lKSk7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
aWYgKGNvbW1hbmQuZXhlY3V0ZShldnQpKSB7CisgICAgICAgIGlmIChtX3dlYlZpZXctPmNsaWVu
dCgpKQorICAgICAgICAgICAgbV93ZWJWaWV3LT5jbGllbnQoKS0+ZGlkRXhlY3V0ZUNvbW1hbmQo
V2ViU3RyaW5nKGNvbW1hbmROYW1lKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIC8vIEhlcmUgd2UgbmVlZCB0byBmaWx0ZXIga2V5IGV2ZW50cy4KKyAgICAvLyBPbiBHdGsv
TGludXgsIGl0IGVtaXRzIGtleSBldmVudHMgd2l0aCBBU0NJSSB0ZXh0IGFuZCBjdHJsIG9uIGZv
ciBjdHJsLTx4Pi4KKyAgICAvLyBJbiBXZWJraXQsIEVkaXRvckNsaWVudDo6aGFuZGxlS2V5Ym9h
cmRFdmVudCBpbgorICAgIC8vIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50
R3RrLmNwcCBkcm9wIHN1Y2ggZXZlbnRzLgorICAgIC8vIE9uIE1hYywgaXQgZW1pdHMga2V5IGV2
ZW50cyB3aXRoIEFTQ0lJIHRleHQgYW5kIG1ldGEgb24gZm9yIENvbW1hbmQtPHg+LgorICAgIC8v
IFRoZXNlIGtleSBldmVudHMgc2hvdWxkIG5vdCBlbWl0IHRleHQgaW5zZXJ0IGV2ZW50LgorICAg
IC8vIEFsdCBrZXkgd291bGQgYmUgdXNlZCB0byBpbnNlcnQgYWx0ZXJuYXRpdmUgY2hhcmFjdGVy
LCBzbyB3ZSBzaG91bGQgbGV0CisgICAgLy8gdGhyb3VnaC4gQWxzbyBub3RlIHRoYXQgQ3RybC1B
bHQgY29tYmluYXRpb24gZXF1YWxzIHRvIEFsdEdyIGtleSB3aGljaCBpcworICAgIC8vIGFsc28g
dXNlZCB0byBpbnNlcnQgYWx0ZXJuYXRpdmUgY2hhcmFjdGVyLgorICAgIC8vIGh0dHA6Ly9jb2Rl
Lmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTEwODQ2CisgICAgLy8gV2lu
ZG93cyBzZXRzIGJvdGggYWx0IGFuZCBtZXRhIGFyZSBvbiB3aGVuICJBbHQiIGtleSBwcmVzc2Vk
LgorICAgIC8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWls
P2lkPTIyMTUKKyAgICAvLyBBbHNvLCB3ZSBzaG91bGQgbm90IHJlbHkgb24gYW4gYXNzdW1wdGlv
biB0aGF0IGtleWJvYXJkcyBkb24ndAorICAgIC8vIHNlbmQgQVNDSUkgY2hhcmFjdGVycyB3aGVu
IHByZXNzaW5nIGEgY29udHJvbCBrZXkgb24gV2luZG93cywKKyAgICAvLyB3aGljaCBtYXkgYmUg
Y29uZmlndXJlZCB0byBkbyBpdCBzbyBieSB1c2VyLgorICAgIC8vIFNlZSBhbHNvIGh0dHA6Ly9l
bi53aWtpcGVkaWEub3JnL3dpa2kvS2V5Ym9hcmRfTGF5b3V0CisgICAgLy8gRklYTUUodWthaSk6
IGludmVzdGlnYXRlIG1vcmUgZGV0YWlsIGZvciB2YXJpb3VzIGtleWJvYXJkIGxheW91dC4KKyAg
ICBpZiAoZXZ0LT5rZXlFdmVudCgpLT50ZXh0KCkubGVuZ3RoKCkgPT0gMSkgeworICAgICAgICBV
Q2hhciBjaCA9IGV2dC0+a2V5RXZlbnQoKS0+dGV4dCgpWzBVXTsKKworICAgICAgICAvLyBEb24n
dCBpbnNlcnQgbnVsbCBvciBjb250cm9sIGNoYXJhY3RlcnMgYXMgdGhleSBjYW4gcmVzdWx0IGlu
CisgICAgICAgIC8vIHVuZXhwZWN0ZWQgYmVoYXZpb3VyCisgICAgICAgIGlmIChjaCA8ICcgJykK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyNpZiAhUExBVEZPUk0oV0lOX09TKQorICAgICAg
ICAvLyBEb24ndCBpbnNlcnQgQVNDSUkgY2hhcmFjdGVyIGlmIGN0cmwgdy9vIGFsdCBvciBtZXRh
IGlzIG9uLgorICAgICAgICAvLyBPbiBNYWMsIHdlIHNob3VsZCBpZ25vcmUgZXZlbnRzIHdoZW4g
bWV0YSBpcyBvbiAoQ29tbWFuZC08eD4pLgorICAgICAgICBpZiAoY2ggPCAweDgwKSB7CisgICAg
ICAgICAgICBpZiAoZXZ0LT5rZXlFdmVudCgpLT5jdHJsS2V5KCkgJiYgIWV2dC0+a2V5RXZlbnQo
KS0+YWx0S2V5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworI2lmIFBMQVRGT1JN
KERBUldJTikKKyAgICAgICAgICAgIGlmIChldnQtPmtleUV2ZW50KCktPm1ldGFLZXkoKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorICAgICAgICB9CisjZW5kaWYKKyAgICB9
CisKKyAgICBpZiAoIWZyYW1lLT5lZGl0b3IoKS0+Y2FuRWRpdCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICByZXR1cm4gZnJhbWUtPmVkaXRvcigpLT5pbnNlcnRUZXh0KGV2dC0+a2V5
RXZlbnQoKS0+dGV4dCgpLCBldnQpOworfQorCit2b2lkIEVkaXRvckNsaWVudEltcGw6OmhhbmRs
ZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCogZXZ0KQoreworICAgIGlmIChldnQtPmtleUNv
ZGUoKSA9PSBWS0VZX0RPV04KKyAgICAgICAgfHwgZXZ0LT5rZXlDb2RlKCkgPT0gVktFWV9VUCkg
eworICAgICAgICBBU1NFUlQoZXZ0LT50YXJnZXQoKS0+dG9Ob2RlKCkpOworICAgICAgICBzaG93
Rm9ybUF1dG9maWxsRm9yTm9kZShldnQtPnRhcmdldCgpLT50b05vZGUoKSk7CisgICAgfQorCisg
ICAgLy8gR2l2ZSB0aGUgZW1iZWRkZXIgYSBjaGFuY2UgdG8gaGFuZGxlIHRoZSBrZXlib2FyZCBl
dmVudC4KKyAgICBpZiAoKG1fd2ViVmlldy0+Y2xpZW50KCkKKyAgICAgICAgICYmIG1fd2ViVmll
dy0+Y2xpZW50KCktPmhhbmRsZUN1cnJlbnRLZXlib2FyZEV2ZW50KCkpCisgICAgICAgIHx8IGhh
bmRsZUVkaXRpbmdLZXlib2FyZEV2ZW50KGV2dCkpCisgICAgICAgIGV2dC0+c2V0RGVmYXVsdEhh
bmRsZWQoKTsKK30KKwordm9pZCBFZGl0b3JDbGllbnRJbXBsOjpoYW5kbGVJbnB1dE1ldGhvZEtl
eWRvd24oS2V5Ym9hcmRFdmVudCoga2V5RXZlbnQpCit7CisgICAgLy8gV2UgaGFuZGxlIElNRSB3
aXRoaW4gY2hyb21lLgorfQorCit2b2lkIEVkaXRvckNsaWVudEltcGw6OnRleHRGaWVsZERpZEJl
Z2luRWRpdGluZyhFbGVtZW50KikKK3sKK30KKwordm9pZCBFZGl0b3JDbGllbnRJbXBsOjp0ZXh0
RmllbGREaWRFbmRFZGl0aW5nKEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgLy8gTm90aWZpY2F0
aW9uIHRoYXQgZm9jdXMgd2FzIGxvc3QuICBCZSBjYXJlZnVsIHdpdGggdGhpcywgaXQncyBhbHNv
IHNlbnQKKyAgICAvLyB3aGVuIHRoZSBwYWdlIGlzIGJlaW5nIGNsb3NlZC4KKworICAgIC8vIENh
bmNlbCBhbnkgcGVuZGluZyBEb0F1dG9maWxsIGNhbGwuCisgICAgbV9hdXRvZmlsbEFyZ3MuY2xl
YXIoKTsKKyAgICBtX2F1dG9maWxsVGltZXIuc3RvcCgpOworCisgICAgLy8gSGlkZSBhbnkgc2hv
d2luZyBwb3B1cC4KKyAgICBtX3dlYlZpZXctPmhpZGVBdXRvQ29tcGxldGVQb3B1cCgpOworCisg
ICAgaWYgKCFtX3dlYlZpZXctPmNsaWVudCgpKQorICAgICAgICByZXR1cm47IC8vIFRoZSBwYWdl
IGlzIGdldHRpbmcgY2xvc2VkLCBkb24ndCBmaWxsIHRoZSBwYXNzd29yZC4KKworICAgIC8vIE5v
dGlmeSBhbnkgcGFzc3dvcmQtbGlzdGVuZXIgb2YgdGhlIGZvY3VzIGNoYW5nZS4KKyAgICBIVE1M
SW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBXZWJLaXQ6OnRvSFRNTElucHV0RWxlbWVudChl
bGVtZW50KTsKKyAgICBpZiAoIWlucHV0RWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
V2ViRnJhbWVJbXBsKiB3ZWJmcmFtZSA9IFdlYkZyYW1lSW1wbDo6ZnJvbUZyYW1lKGlucHV0RWxl
bWVudC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSk7CisgICAgaWYgKCF3ZWJmcmFtZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgV2ViUGFzc3dvcmRBdXRvY29tcGxldGVMaXN0ZW5lciogbGlzdGVuZXIg
PSB3ZWJmcmFtZS0+Z2V0UGFzc3dvcmRMaXN0ZW5lcihpbnB1dEVsZW1lbnQpOworICAgIGlmICgh
bGlzdGVuZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGxpc3RlbmVyLT5kaWRCbHVySW5wdXRF
bGVtZW50KGlucHV0RWxlbWVudC0+dmFsdWUoKSk7Cit9CisKK3ZvaWQgRWRpdG9yQ2xpZW50SW1w
bDo6dGV4dERpZENoYW5nZUluVGV4dEZpZWxkKEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgQVNT
RVJUKGVsZW1lbnQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmlucHV0VGFnKSk7CisgICAgLy8g
Tm90ZSB0aGF0IHdlIG9ubHkgc2hvdyB0aGUgYXV0b2ZpbGwgcG9wdXAgaW4gdGhpcyBjYXNlIGlm
IHRoZSBjYXJldCBpcyBhdAorICAgIC8vIHRoZSBlbmQuICBUaGlzIG1hdGNoZXMgRmlyZUZveCBh
bmQgU2FmYXJpIGJ1dCBub3QgSUUuCisgICAgYXV0b2ZpbGwoc3RhdGljX2Nhc3Q8SFRNTElucHV0
RWxlbWVudCo+KGVsZW1lbnQpLCBmYWxzZSwgZmFsc2UsCisgICAgICAgICAgICAgdHJ1ZSk7Cit9
CisKK2Jvb2wgRWRpdG9yQ2xpZW50SW1wbDo6c2hvd0Zvcm1BdXRvZmlsbEZvck5vZGUoTm9kZSog
bm9kZSkKK3sKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBXZWJLaXQ6OnRv
SFRNTElucHV0RWxlbWVudChub2RlKTsKKyAgICBpZiAoaW5wdXRFbGVtZW50KQorICAgICAgICBy
ZXR1cm4gYXV0b2ZpbGwoaW5wdXRFbGVtZW50LCB0cnVlLCB0cnVlLCBmYWxzZSk7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIEVkaXRvckNsaWVudEltcGw6OmF1dG9maWxsKEhUTUxJbnB1
dEVsZW1lbnQqIGlucHV0RWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBhdXRvZmlsbEZvcm1Pbmx5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGF1dG9maWxsT25FbXB0eVZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIHJlcXVpcmVDYXJldEF0RW5kKQoreworICAgIC8vIENhbmNlbCBhbnkgcGVuZGluZyBE
b0F1dG9maWxsIGNhbGwuCisgICAgbV9hdXRvZmlsbEFyZ3MuY2xlYXIoKTsKKyAgICBtX2F1dG9m
aWxsVGltZXIuc3RvcCgpOworCisgICAgLy8gTGV0J3MgdHJ5IHRvIHRyaWdnZXIgYXV0b2ZpbGwg
Zm9yIHRoYXQgZmllbGQsIGlmIGFwcGxpY2FibGUuCisgICAgaWYgKCFpbnB1dEVsZW1lbnQtPmlz
RW5hYmxlZEZvcm1Db250cm9sKCkgfHwgIWlucHV0RWxlbWVudC0+aXNUZXh0RmllbGQoKQorICAg
ICAgICB8fCBpbnB1dEVsZW1lbnQtPmlzUGFzc3dvcmRGaWVsZCgpCisgICAgICAgIHx8ICFpbnB1
dEVsZW1lbnQtPmF1dG9Db21wbGV0ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBX
ZWJTdHJpbmcgbmFtZSA9IFdlYktpdDo6bmFtZU9mSW5wdXRFbGVtZW50KGlucHV0RWxlbWVudCk7
CisgICAgaWYgKG5hbWUuaXNFbXB0eSgpKSAvLyBJZiB0aGUgZmllbGQgaGFzIG5vIG5hbWUsIHRo
ZW4gd2Ugd29uJ3QgaGF2ZSB2YWx1ZXMuCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8v
IERvbid0IGF0dGVtcHQgdG8gYXV0b2ZpbGwgd2l0aCB2YWx1ZXMgdGhhdCBhcmUgdG9vIGxhcmdl
LgorICAgIGlmIChpbnB1dEVsZW1lbnQtPnZhbHVlKCkubGVuZ3RoKCkgPiBtYXhpbXVtVGV4dFNp
emVGb3JBdXRvZmlsbCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9hdXRvZmlsbEFy
Z3MgPSBuZXcgQXV0b2ZpbGxBcmdzKCk7CisgICAgbV9hdXRvZmlsbEFyZ3MtPmlucHV0RWxlbWVu
dCA9IGlucHV0RWxlbWVudDsKKyAgICBtX2F1dG9maWxsQXJncy0+YXV0b2ZpbGxGb3JtT25seSA9
IGF1dG9maWxsRm9ybU9ubHk7CisgICAgbV9hdXRvZmlsbEFyZ3MtPmF1dG9maWxsT25FbXB0eVZh
bHVlID0gYXV0b2ZpbGxPbkVtcHR5VmFsdWU7CisgICAgbV9hdXRvZmlsbEFyZ3MtPnJlcXVpcmVD
YXJldEF0RW5kID0gcmVxdWlyZUNhcmV0QXRFbmQ7CisgICAgbV9hdXRvZmlsbEFyZ3MtPmJhY2tz
cGFjZU9yRGVsZXRlUHJlc3NlZCA9IG1fYmFja3NwYWNlT3JEZWxldGVQcmVzc2VkOworCisgICAg
aWYgKCFyZXF1aXJlQ2FyZXRBdEVuZCkKKyAgICAgICAgZG9BdXRvZmlsbCgwKTsKKyAgICBlbHNl
IHsKKyAgICAgICAgLy8gV2UgcG9zdCBhIHRhc2sgZm9yIGRvaW5nIHRoZSBhdXRvZmlsbCBhcyB0
aGUgY2FyZXQgcG9zaXRpb24gaXMgbm90IHNldAorICAgICAgICAvLyBwcm9wZXJseSBhdCB0aGlz
IHBvaW50IChodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjk3NikKKyAg
ICAgICAgLy8gYW5kIHdlIG5lZWQgaXQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHRvIHRy
aWdnZXIgYXV0b2ZpbGwuCisgICAgICAgIG1fYXV0b2ZpbGxUaW1lci5zdGFydE9uZVNob3QoMC4w
KTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgRWRpdG9yQ2xpZW50SW1wbDo6
ZG9BdXRvZmlsbChUaW1lcjxFZGl0b3JDbGllbnRJbXBsPiogdGltZXIpCit7CisgICAgT3duUHRy
PEF1dG9maWxsQXJncz4gYXJncyhtX2F1dG9maWxsQXJncy5yZWxlYXNlKCkpOworICAgIEhUTUxJ
bnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGFyZ3MtPmlucHV0RWxlbWVudC5nZXQoKTsKKwor
ICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBpbnB1dEVsZW1lbnQtPnZhbHVlKCk7CisKKyAgICAv
LyBFbmZvcmNlIGF1dG9maWxsX29uX2VtcHR5X3ZhbHVlIGFuZCBjYXJldF9hdF9lbmQuCisKKyAg
ICBib29sIGlzQ2FyZXRBdEVuZCA9IHRydWU7CisgICAgaWYgKGFyZ3MtPnJlcXVpcmVDYXJldEF0
RW5kKQorICAgICAgICBpc0NhcmV0QXRFbmQgPSBpbnB1dEVsZW1lbnQtPnNlbGVjdGlvblN0YXJ0
KCkgPT0gaW5wdXRFbGVtZW50LT5zZWxlY3Rpb25FbmQoKQorICAgICAgICAgICAgICAgICAgICAg
ICAmJiBpbnB1dEVsZW1lbnQtPnNlbGVjdGlvbkVuZCgpID09IHN0YXRpY19jYXN0PGludD4odmFs
dWUubGVuZ3RoKCkpOworCisgICAgaWYgKCghYXJncy0+YXV0b2ZpbGxPbkVtcHR5VmFsdWUgJiYg
dmFsdWUuaXNFbXB0eSgpKSB8fCAhaXNDYXJldEF0RW5kKSB7CisgICAgICAgIG1fd2ViVmlldy0+
aGlkZUF1dG9Db21wbGV0ZVBvcHVwKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAv
LyBGaXJzdCBsZXQncyBzZWUgaWYgdGhlcmUgaXMgYSBwYXNzd29yZCBsaXN0ZW5lciBmb3IgdGhh
dCBlbGVtZW50LgorICAgIC8vIFdlIHdvbid0IHRyaWdnZXIgZm9ybSBhdXRvZmlsbCBpbiB0aGF0
IGNhc2UsIGFzIGhhdmluZyBib3RoIGJlaGF2aW9yIG9uCisgICAgLy8gYSBub2RlIHdvdWxkIGJl
IGNvbmZ1c2luZy4KKyAgICBXZWJGcmFtZUltcGwqIHdlYmZyYW1lID0gV2ViRnJhbWVJbXBsOjpm
cm9tRnJhbWUoaW5wdXRFbGVtZW50LT5kb2N1bWVudCgpLT5mcmFtZSgpKTsKKyAgICBpZiAoIXdl
YmZyYW1lKQorICAgICAgICByZXR1cm47CisgICAgV2ViUGFzc3dvcmRBdXRvY29tcGxldGVMaXN0
ZW5lciogbGlzdGVuZXIgPSB3ZWJmcmFtZS0+Z2V0UGFzc3dvcmRMaXN0ZW5lcihpbnB1dEVsZW1l
bnQpOworICAgIGlmIChsaXN0ZW5lcikgeworICAgICAgICBpZiAoYXJncy0+YXV0b2ZpbGxGb3Jt
T25seSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBsaXN0ZW5lci0+cGVyZm9ybUlu
bGluZUF1dG9jb21wbGV0ZSh2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYXJncy0+YmFja3NwYWNlT3JEZWxldGVQcmVzc2VkLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIC8vIFRoZW4gdHJpZ2dlciBmb3JtIGF1dG9maWxsLgorICAgIFdlYlN0cmlu
ZyBuYW1lID0gV2ViS2l0OjpuYW1lT2ZJbnB1dEVsZW1lbnQoaW5wdXRFbGVtZW50KTsKKyAgICBB
U1NFUlQoc3RhdGljX2Nhc3Q8aW50PihuYW1lLmxlbmd0aCgpKSA+IDApOworCisgICAgaWYgKG1f
d2ViVmlldy0+Y2xpZW50KCkpCisgICAgICAgIG1fd2ViVmlldy0+Y2xpZW50KCktPnF1ZXJ5QXV0
b2ZpbGxTdWdnZXN0aW9ucyhXZWJOb2RlKGlucHV0RWxlbWVudCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLCBXZWJTdHJpbmcodmFs
dWUpKTsKK30KKwordm9pZCBFZGl0b3JDbGllbnRJbXBsOjpjYW5jZWxQZW5kaW5nQXV0b2ZpbGwo
KQoreworICAgIG1fYXV0b2ZpbGxBcmdzLmNsZWFyKCk7CisgICAgbV9hdXRvZmlsbFRpbWVyLnN0
b3AoKTsKK30KKwordm9pZCBFZGl0b3JDbGllbnRJbXBsOjpvbkF1dG9maWxsU3VnZ2VzdGlvbkFj
Y2VwdGVkKEhUTUxJbnB1dEVsZW1lbnQqIHRleHRGaWVsZCkKK3sKKyAgICBXZWJGcmFtZUltcGwq
IHdlYmZyYW1lID0gV2ViRnJhbWVJbXBsOjpmcm9tRnJhbWUodGV4dEZpZWxkLT5kb2N1bWVudCgp
LT5mcmFtZSgpKTsKKyAgICBpZiAoIXdlYmZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBX
ZWJQYXNzd29yZEF1dG9jb21wbGV0ZUxpc3RlbmVyKiBsaXN0ZW5lciA9IHdlYmZyYW1lLT5nZXRQ
YXNzd29yZExpc3RlbmVyKHRleHRGaWVsZCk7CisgICAgLy8gUGFzc3dvcmQgbGlzdGVuZXJzIG5l
ZWQgdG8gYXV0b2NvbXBsZXRlIG90aGVyIGZpZWxkcyB0aGF0IGRlcGVuZCBvbiB0aGUKKyAgICAv
LyBpbnB1dCBlbGVtZW50IHdpdGggYXV0b2ZpbGwgc3VnZ2VzdGlvbnMuCisgICAgaWYgKGxpc3Rl
bmVyKQorICAgICAgICBsaXN0ZW5lci0+cGVyZm9ybUlubGluZUF1dG9jb21wbGV0ZSh0ZXh0Rmll
bGQtPnZhbHVlKCksIGZhbHNlLCBmYWxzZSk7Cit9CisKK2Jvb2wgRWRpdG9yQ2xpZW50SW1wbDo6
ZG9UZXh0RmllbGRDb21tYW5kRnJvbUV2ZW50KEVsZW1lbnQqIGVsZW1lbnQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLZXlib2FyZEV2ZW50KiBl
dmVudCkKK3sKKyAgICAvLyBSZW1lbWJlciBpZiBiYWNrc3BhY2Ugd2FzIHByZXNzZWQgZm9yIHRo
ZSBhdXRvZmlsbC4gIEl0IGlzIG5vdCBjbGVhciBob3cgdG8KKyAgICAvLyBmaW5kIGlmIGJhY2tz
cGFjZSB3YXMgcHJlc3NlZCBmcm9tIHRleHRGaWVsZERpZEJlZ2luRWRpdGluZyBhbmQKKyAgICAv
LyB0ZXh0RGlkQ2hhbmdlSW5UZXh0RmllbGQgYXMgd2hlbiB0aGVzZSBtZXRob2RzIGFyZSBjYWxs
ZWQgdGhlIHZhbHVlIG9mIHRoZQorICAgIC8vIGlucHV0IGVsZW1lbnQgYWxyZWFkeSBjb250YWlu
cyB0aGUgdHlwZSBjaGFyYWN0ZXIuCisgICAgbV9iYWNrc3BhY2VPckRlbGV0ZVByZXNzZWQgPSBl
dmVudC0+a2V5Q29kZSgpID09IFZLRVlfQkFDSyB8fCBldmVudC0+a2V5Q29kZSgpID09IFZLRVlf
REVMRVRFOworCisgICAgLy8gVGhlIE1hYyBjb2RlIGFwcGVhcnMgdG8gdXNlIHRoaXMgbWV0aG9k
IGFzIGEgaG9vayB0byBpbXBsZW1lbnQgc3BlY2lhbAorICAgIC8vIGtleWJvYXJkIGNvbW1hbmRz
IHNwZWNpZmljIHRvIFNhZmFyaSdzIGF1dG8tZmlsbCBpbXBsZW1lbnRhdGlvbi4gIFdlCisgICAg
Ly8ganVzdCByZXR1cm4gZmFsc2UgdG8gYWxsb3cgdGhlIGRlZmF1bHQgYWN0aW9uLgorICAgIHJl
dHVybiBmYWxzZTsKK30KKwordm9pZCBFZGl0b3JDbGllbnRJbXBsOjp0ZXh0V2lsbEJlRGVsZXRl
ZEluVGV4dEZpZWxkKEVsZW1lbnQqKQoreworfQorCit2b2lkIEVkaXRvckNsaWVudEltcGw6OnRl
eHREaWRDaGFuZ2VJblRleHRBcmVhKEVsZW1lbnQqKQoreworfQorCit2b2lkIEVkaXRvckNsaWVu
dEltcGw6Omlnbm9yZVdvcmRJblNwZWxsRG9jdW1lbnQoY29uc3QgU3RyaW5nJikKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEVkaXRvckNsaWVudEltcGw6OmxlYXJuV29yZChj
b25zdCBTdHJpbmcmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRWRpdG9y
Q2xpZW50SW1wbDo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFVDaGFyKiB0ZXh0LCBpbnQg
bGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
KiBtaXNzcGVsbGluZ0xvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50KiBtaXNzcGVsbGluZ0xlbmd0aCkKK3sKKyAgICAvLyBTcGVsbENoZWNr
V29yZCB3aWxsIHdyaXRlICgwLCAwKSBpbnRvIHRoZSBvdXRwdXQgdmFycywgd2hpY2ggaXMgd2hh
dCBvdXIKKyAgICAvLyBjYWxsZXIgZXhwZWN0cyBpZiB0aGUgd29yZCBpcyBzcGVsbGVkIGNvcnJl
Y3RseS4KKyAgICBpbnQgc3BlbGxMb2NhdGlvbiA9IC0xOworICAgIGludCBzcGVsbExlbmd0aCA9
IDA7CisKKyAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIHByb3ZpZGVkIHRleHQgaXMgc3BlbGxl
ZCBjb3JyZWN0bHkuCisgICAgaWYgKGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkg
JiYgbV93ZWJWaWV3LT5jbGllbnQoKSkKKyAgICAgICAgbV93ZWJWaWV3LT5jbGllbnQoKS0+c3Bl
bGxDaGVjayhXZWJTdHJpbmcodGV4dCwgbGVuZ3RoKSwgc3BlbGxMb2NhdGlvbiwgc3BlbGxMZW5n
dGgpOworICAgIGVsc2UgeworICAgICAgICBzcGVsbExvY2F0aW9uID0gMDsKKyAgICAgICAgc3Bl
bGxMZW5ndGggPSAwOworICAgIH0KKworICAgIC8vIE5vdGU6IHRoZSBNYWMgY29kZSBjaGVja3Mg
aWYgdGhlIHBvaW50ZXJzIGFyZSBudWxsIGJlZm9yZSB3cml0aW5nIHRvIHRoZW0sCisgICAgLy8g
c28gd2UgZG8gdG9vLgorICAgIGlmIChtaXNzcGVsbGluZ0xvY2F0aW9uKQorICAgICAgICAqbWlz
c3BlbGxpbmdMb2NhdGlvbiA9IHNwZWxsTG9jYXRpb247CisgICAgaWYgKG1pc3NwZWxsaW5nTGVu
Z3RoKQorICAgICAgICAqbWlzc3BlbGxpbmdMZW5ndGggPSBzcGVsbExlbmd0aDsKK30KKworU3Ry
aW5nIEVkaXRvckNsaWVudEltcGw6OmdldEF1dG9Db3JyZWN0U3VnZ2VzdGlvbkZvck1pc3NwZWxs
ZWRXb3JkKGNvbnN0IFN0cmluZyYgbWlzc3BlbGxlZFdvcmQpCit7CisgICAgaWYgKCEoaXNDb250
aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSAmJiBtX3dlYlZpZXctPmNsaWVudCgpKSkKKyAg
ICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgLy8gRG8gbm90IGF1dG9jb3JyZWN0IHdvcmRz
IHdpdGggY2FwaXRhbCBsZXR0ZXJzIGluIGl0IGV4Y2VwdCB0aGUKKyAgICAvLyBmaXJzdCBsZXR0
ZXIuIFRoaXMgd2lsbCByZW1vdmUgY2FzZXMgY2hhbmdpbmcgIklNQiIgdG8gIklCTSIuCisgICAg
Zm9yIChzaXplX3QgaSA9IDE7IGkgPCBtaXNzcGVsbGVkV29yZC5sZW5ndGgoKTsgaSsrKSB7Cisg
ICAgICAgIGlmICh1X2lzdXBwZXIoc3RhdGljX2Nhc3Q8VUNoYXIzMj4obWlzc3BlbGxlZFdvcmRb
aV0pKSkKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICB9CisKKyAgICByZXR1cm4g
bV93ZWJWaWV3LT5jbGllbnQoKS0+YXV0b0NvcnJlY3RXb3JkKFdlYlN0cmluZyhtaXNzcGVsbGVk
V29yZCkpOworfQorCit2b2lkIEVkaXRvckNsaWVudEltcGw6OmNoZWNrR3JhbW1hck9mU3RyaW5n
KGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgV1RGOjpWZWN0b3I8R3JhbW1hckRldGFpbD4mLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIGJhZEdyYW1tYXJMb2NhdGlvbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBiYWRHcmFt
bWFyTGVuZ3RoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgaWYgKGJhZEdyYW1tYXJM
b2NhdGlvbikKKyAgICAgICAgKmJhZEdyYW1tYXJMb2NhdGlvbiA9IDA7CisgICAgaWYgKGJhZEdy
YW1tYXJMZW5ndGgpCisgICAgICAgICpiYWRHcmFtbWFyTGVuZ3RoID0gMDsKK30KKwordm9pZCBF
ZGl0b3JDbGllbnRJbXBsOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoY29uc3Qg
U3RyaW5nJiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEdyYW1tYXJEZXRhaWwmIGRldGFpbCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCit2b2lkIEVkaXRvckNsaWVudEltcGw6OnVwZGF0ZVNwZWxsaW5nVUlXaXRo
TWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiBtaXNzcGVsbGVkV29yZCkKK3sKKyAgICBpZiAo
bV93ZWJWaWV3LT5jbGllbnQoKSkKKyAgICAgICAgbV93ZWJWaWV3LT5jbGllbnQoKS0+dXBkYXRl
U3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChXZWJTdHJpbmcobWlzc3BlbGxlZFdvcmQpKTsK
K30KKwordm9pZCBFZGl0b3JDbGllbnRJbXBsOjpzaG93U3BlbGxpbmdVSShib29sIHNob3cpCit7
CisgICAgaWYgKG1fd2ViVmlldy0+Y2xpZW50KCkpCisgICAgICAgIG1fd2ViVmlldy0+Y2xpZW50
KCktPnNob3dTcGVsbGluZ1VJKHNob3cpOworfQorCitib29sIEVkaXRvckNsaWVudEltcGw6OnNw
ZWxsaW5nVUlJc1Nob3dpbmcoKQoreworICAgIGlmIChtX3dlYlZpZXctPmNsaWVudCgpKQorICAg
ICAgICByZXR1cm4gbV93ZWJWaWV3LT5jbGllbnQoKS0+aXNTaG93aW5nU3BlbGxpbmdVSSgpOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBFZGl0b3JDbGllbnRJbXBsOjpnZXRHdWVzc2Vz
Rm9yV29yZChjb25zdCBTdHJpbmcmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBXVEY6OlZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgRWRpdG9yQ2xpZW50SW1wbDo6c2V0SW5wdXRNZXRob2RTdGF0ZShi
b29sIGVuYWJsZWQpCit7CisgICAgaWYgKG1fd2ViVmlldy0+Y2xpZW50KCkpCisgICAgICAgIG1f
d2ViVmlldy0+Y2xpZW50KCktPnNldElucHV0TWV0aG9kRW5hYmxlZChlbmFibGVkKTsKK30KKwor
fSAvLyBuYW1lc2FjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvRWRp
dG9yQ2xpZW50SW1wbC5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9FZGl0b3JDbGllbnRJbXBsLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQwOGI0ZAotLS0gL2Rldi9udWxs
CisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvRWRpdG9yQ2xpZW50SW1wbC5oCkBAIC0wLDAgKzEs
MTk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBFZGl0b3JDbGllbnRJbXBsX2gKKyNkZWZpbmUgRWRpdG9yQ2xpZW50SW1w
bF9oCisKKyNpbmNsdWRlICJFZGl0b3JDbGllbnQuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2lu
Y2x1ZGUgPHd0Zi9EZXF1ZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBIVE1MSW5w
dXRFbGVtZW50OworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYlZpZXdJbXBsOwor
CitjbGFzcyBFZGl0b3JDbGllbnRJbXBsIDogcHVibGljIFdlYkNvcmU6OkVkaXRvckNsaWVudCB7
CitwdWJsaWM6CisgICAgRWRpdG9yQ2xpZW50SW1wbChXZWJWaWV3SW1wbCogd2ViVmlldyk7CisK
KyAgICB2aXJ0dWFsIH5FZGl0b3JDbGllbnRJbXBsKCk7CisgICAgdmlydHVhbCB2b2lkIHBhZ2VE
ZXN0cm95ZWQoKTsKKworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTaG93RGVsZXRlSW50ZXJmYWNl
KFdlYkNvcmU6OkhUTUxFbGVtZW50Kik7CisgICAgdmlydHVhbCBib29sIHNtYXJ0SW5zZXJ0RGVs
ZXRlRW5hYmxlZCgpOworICAgIHZpcnR1YWwgYm9vbCBpc1NlbGVjdFRyYWlsaW5nV2hpdGVzcGFj
ZUVuYWJsZWQoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0Vu
YWJsZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdG9nZ2xlQ29udGludW91c1NwZWxsQ2hlY2tpbmco
KTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCk7CisgICAgdmly
dHVhbCB2b2lkIHRvZ2dsZUdyYW1tYXJDaGVja2luZygpOworICAgIHZpcnR1YWwgaW50IHNwZWxs
Q2hlY2tlckRvY3VtZW50VGFnKCk7CisgICAgdmlydHVhbCBib29sIGlzRWRpdGFibGUoKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgc2hvdWxkQmVnaW5FZGl0aW5nKFdlYkNvcmU6OlJhbmdlKik7CisgICAg
dmlydHVhbCBib29sIHNob3VsZEVuZEVkaXRpbmcoV2ViQ29yZTo6UmFuZ2UqKTsKKyAgICB2aXJ0
dWFsIGJvb2wgc2hvdWxkSW5zZXJ0Tm9kZShXZWJDb3JlOjpOb2RlKiwgV2ViQ29yZTo6UmFuZ2Uq
LCBXZWJDb3JlOjpFZGl0b3JJbnNlcnRBY3Rpb24pOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRJ
bnNlcnRUZXh0KGNvbnN0IFdlYkNvcmU6OlN0cmluZyYsIFdlYkNvcmU6OlJhbmdlKiwgV2ViQ29y
ZTo6RWRpdG9ySW5zZXJ0QWN0aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRGVsZXRlUmFu
Z2UoV2ViQ29yZTo6UmFuZ2UqKTsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0
ZWRSYW5nZShXZWJDb3JlOjpSYW5nZSogZnJvbVJhbmdlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFdlYkNvcmU6OlJhbmdlKiB0b1JhbmdlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYkNvcmU6OkVBZmZpbml0eSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHN0aWxsU2VsZWN0
aW5nKTsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQXBwbHlTdHlsZShXZWJDb3JlOjpDU1NTdHls
ZURlY2xhcmF0aW9uKiwgV2ViQ29yZTo6UmFuZ2UqKTsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxk
TW92ZVJhbmdlQWZ0ZXJEZWxldGUoV2ViQ29yZTo6UmFuZ2UqLCBXZWJDb3JlOjpSYW5nZSopOwor
ICAgIHZpcnR1YWwgdm9pZCBkaWRCZWdpbkVkaXRpbmcoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVz
cG9uZFRvQ2hhbmdlZENvbnRlbnRzKCk7CisgICAgdmlydHVhbCB2b2lkIHJlc3BvbmRUb0NoYW5n
ZWRTZWxlY3Rpb24oKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRW5kRWRpdGluZygpOworICAgIHZp
cnR1YWwgdm9pZCBkaWRXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCgpOworICAgIHZpcnR1YWwg
dm9pZCBkaWRTZXRTZWxlY3Rpb25UeXBlc0ZvclBhc3RlYm9hcmQoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgcmVnaXN0ZXJDb21tYW5kRm9yVW5kbyhQYXNzUmVmUHRyPFdlYkNvcmU6OkVkaXRDb21tYW5k
Pik7CisgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQ29tbWFuZEZvclJlZG8oUGFzc1JlZlB0cjxX
ZWJDb3JlOjpFZGl0Q29tbWFuZD4pOworICAgIHZpcnR1YWwgdm9pZCBjbGVhclVuZG9SZWRvT3Bl
cmF0aW9ucygpOworICAgIHZpcnR1YWwgYm9vbCBjYW5VbmRvKCkgY29uc3Q7CisgICAgdmlydHVh
bCBib29sIGNhblJlZG8oKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgdW5kbygpOworICAgIHZp
cnR1YWwgdm9pZCByZWRvKCk7CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBpbnRlcnByZXRLZXlF
dmVudChjb25zdCBXZWJDb3JlOjpLZXlib2FyZEV2ZW50Kik7CisgICAgdmlydHVhbCBib29sIGhh
bmRsZUVkaXRpbmdLZXlib2FyZEV2ZW50KFdlYkNvcmU6OktleWJvYXJkRXZlbnQqKTsKKyAgICB2
aXJ0dWFsIHZvaWQgaGFuZGxlS2V5Ym9hcmRFdmVudChXZWJDb3JlOjpLZXlib2FyZEV2ZW50Kik7
CisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUlucHV0TWV0aG9kS2V5ZG93bihXZWJDb3JlOjpLZXli
b2FyZEV2ZW50Kik7CisgICAgdmlydHVhbCB2b2lkIHRleHRGaWVsZERpZEJlZ2luRWRpdGluZyhX
ZWJDb3JlOjpFbGVtZW50Kik7CisgICAgdmlydHVhbCB2b2lkIHRleHRGaWVsZERpZEVuZEVkaXRp
bmcoV2ViQ29yZTo6RWxlbWVudCopOworICAgIHZpcnR1YWwgdm9pZCB0ZXh0RGlkQ2hhbmdlSW5U
ZXh0RmllbGQoV2ViQ29yZTo6RWxlbWVudCopOworICAgIHZpcnR1YWwgYm9vbCBkb1RleHRGaWVs
ZENvbW1hbmRGcm9tRXZlbnQoV2ViQ29yZTo6RWxlbWVudCosIFdlYkNvcmU6OktleWJvYXJkRXZl
bnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgdGV4dFdpbGxCZURlbGV0ZWRJblRleHRGaWVsZChXZWJD
b3JlOjpFbGVtZW50Kik7CisgICAgdmlydHVhbCB2b2lkIHRleHREaWRDaGFuZ2VJblRleHRBcmVh
KFdlYkNvcmU6OkVsZW1lbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgaWdub3JlV29yZEluU3BlbGxE
b2N1bWVudChjb25zdCBXZWJDb3JlOjpTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgbGVhcm5X
b3JkKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYpOworICAgIHZpcnR1YWwgdm9pZCBjaGVja1NwZWxs
aW5nT2ZTdHJpbmcoY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50KiBtaXNzcGVsbGluZ0xvY2F0aW9uLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBtaXNzcGVsbGluZ0xlbmd0aCk7Cisg
ICAgdmlydHVhbCB2b2lkIGNoZWNrR3JhbW1hck9mU3RyaW5nKGNvbnN0IFVDaGFyKiwgaW50IGxl
bmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV1RGOjpWZWN0b3I8
V2ViQ29yZTo6R3JhbW1hckRldGFpbD4mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQqIGJhZEdyYW1tYXJMb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50KiBiYWRHcmFtbWFyTGVuZ3RoKTsKKyAgICB2aXJ0dWFsIFdlYkNv
cmU6OlN0cmluZyBnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChjb25z
dCBXZWJDb3JlOjpTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdp
dGhHcmFtbWFyU3RyaW5nKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYsIGNvbnN0IFdlYkNvcmU6Okdy
YW1tYXJEZXRhaWwmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNz
cGVsbGVkV29yZChjb25zdCBXZWJDb3JlOjpTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2hv
d1NwZWxsaW5nVUkoYm9vbCBzaG93KTsKKyAgICB2aXJ0dWFsIGJvb2wgc3BlbGxpbmdVSUlzU2hv
d2luZygpOworICAgIHZpcnR1YWwgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBXZWJDb3Jl
OjpTdHJpbmcmIHdvcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdURjo6
VmVjdG9yPFdlYkNvcmU6OlN0cmluZz4mIGd1ZXNzZXMpOworICAgIHZpcnR1YWwgdm9pZCBzZXRJ
bnB1dE1ldGhvZFN0YXRlKGJvb2wgZW5hYmxlZCk7CisKKyAgICAvLyBTaG93cyB0aGUgZm9ybSBh
dXRvZmlsbCBwb3B1cCBmb3IgfG5vZGV8IGlmIGl0IGlzIGFuIEhUTUxJbnB1dEVsZW1lbnQgYW5k
CisgICAgLy8gaXQgaXMgZW1wdHkuICBUaGlzIGlzIGNhbGxlZCB3aGVuIHlvdSBwcmVzcyB0aGUg
dXAgb3IgZG93biBhcnJvdyBpbiBhCisgICAgLy8gdGV4dC1maWVsZCBvciB3aGVuIGNsaWNraW5n
IGFuIGFscmVhZHkgZm9jdXNlZCB0ZXh0LWZpZWxkLgorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0
aGUgYXV0b2ZpbGwgcG9wdXAgaGFzIGJlZW4gc2NoZWR1bGVkIHRvIGJlIHNob3duLCBmYWxzZQor
ICAgIC8vIG90aGVyd2lzZS4KKyAgICB2aXJ0dWFsIGJvb2wgc2hvd0Zvcm1BdXRvZmlsbEZvck5v
ZGUoV2ViQ29yZTo6Tm9kZSopOworCisgICAgLy8gTm90aWZpY2F0aW9uIHRoYXQgdGhlIHRleHQg
Y2hhbmdlZCBkdWUgdG8gYWNjZXB0YW5jZSBvZiBhIHN1Z2dlc3Rpb24KKyAgICAvLyBwcm92aWRl
ZCBieSBhbiBhdXRvZmlsbCBwb3B1cC4gIEhhdmluZyBhIHNlcGFyYXRlIGNhbGxiYWNrIGluIHRo
aXMgY2FzZQorICAgIC8vIGlzIGEgc2ltcGxlIHdheSB0byBicmVhayB0aGUgY3ljbGUgdGhhdCB3
b3VsZCBvdGhlcndpc2Ugb2NjdXIgaWYKKyAgICAvLyB0ZXh0RGlkQ2hhbmdlSW5UZXh0RmllbGQg
d2FzIGNhbGxlZC4KKyAgICB2aXJ0dWFsIHZvaWQgb25BdXRvZmlsbFN1Z2dlc3Rpb25BY2NlcHRl
ZChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Kik7CisKK3ByaXZhdGU6CisgICAgdm9pZCBtb2Rp
ZnlTZWxlY3Rpb24oV2ViQ29yZTo6RnJhbWUqLCBXZWJDb3JlOjpLZXlib2FyZEV2ZW50Kik7CisK
KyAgICAvLyBUcmlnZ2VycyBhdXRvZmlsbCBmb3IgYW4gaW5wdXQgZWxlbWVudCBpZiBhcHBsaWNh
YmxlLiAgVGhpcyBjYW4gYmUgZm9ybQorICAgIC8vIGF1dG9maWxsICh2aWEgYSBwb3B1cC1tZW51
KSBvciBwYXNzd29yZCBhdXRvZmlsbCBkZXBlbmRpbmcgb24gdGhlCisgICAgLy8gaW5wdXQgZWxl
bWVudC4gIElmIHxmb3JtQXV0b2ZpbGxPbmx5fCBpcyB0cnVlLCBwYXNzd29yZCBhdXRvZmlsbCBp
cyBub3QKKyAgICAvLyB0cmlnZ2VyZWQuCisgICAgLy8gfGF1dG9maWxsT25FbXB0eVZhbHVlfCBp
bmRpY2F0ZXMgd2hldGhlciB0aGUgYXV0b2ZpbGwgc2hvdWxkIGJlIHNob3duCisgICAgLy8gd2hl
biB0aGUgdGV4dC1maWVsZCBpcyBlbXB0eS4KKyAgICAvLyBJZiB8cmVxdWlyZXNDYXJldEF0RW5k
fCBpcyB0cnVlLCB0aGUgYXV0b2ZpbGwgcG9wdXAgaXMgb25seSBzaG93biBpZiB0aGUKKyAgICAv
LyBjYXJldCBpcyBsb2NhdGVkIGF0IHRoZSBlbmQgb2YgdGhlIGVudGVyZWQgdGV4dC4KKyAgICAv
LyBSZXR1cm5zIHRydWUgaWYgdGhlIGF1dG9maWxsIHBvcHVwIGhhcyBiZWVuIHNjaGVkdWxlZCB0
byBiZSBzaG93biwgZmFsc2UKKyAgICAvLyBvdGhlcndpc2UuCisgICAgYm9vbCBhdXRvZmlsbChX
ZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiwKKyAgICAgICAgICAgICAgICAgIGJvb2wgZm9ybUF1
dG9maWxsT25seSwgYm9vbCBhdXRvZmlsbE9uRW1wdHlWYWx1ZSwKKyAgICAgICAgICAgICAgICAg
IGJvb2wgcmVxdWlyZXNDYXJldEF0RW5kKTsKKworICAgIC8vIENhbGxlZCB0byBwcm9jZXNzIHRo
ZSBhdXRvZmlsbCBkZXNjcmliZWQgYnkgbV9hdXRvZmlsbEFyZ3MuCisgICAgLy8gVGhpcyBtZXRo
b2QgaXMgaW52b2tlZCBhc3luY2hyb25vdXNseSBpZiB0aGUgY2FyZXQgcG9zaXRpb24gaXMgbm90
CisgICAgLy8gcmVmbGVjdGluZyB0aGUgbGFzdCB0ZXh0IGNoYW5nZSB5ZXQsIGFuZCB3ZSBuZWVk
IGl0IHRvIGRlY2lkZSB3aGV0aGVyIG9yCisgICAgLy8gbm90IHRvIHNob3cgdGhlIGF1dG9maWxs
IHBvcHVwLgorICAgIHZvaWQgZG9BdXRvZmlsbChXZWJDb3JlOjpUaW1lcjxFZGl0b3JDbGllbnRJ
bXBsPiopOworCisgICAgdm9pZCBjYW5jZWxQZW5kaW5nQXV0b2ZpbGwoKTsKKworICAgIC8vIFJl
dHVybnMgd2hldGhlciBvciBub3QgdGhlIGZvY3VzZWQgY29udHJvbCBuZWVkcyBzcGVsbC1jaGVj
a2luZy4KKyAgICAvLyBDdXJyZW50bHksIHRoaXMgZnVuY3Rpb24ganVzdCByZXRyaWV2ZXMgdGhl
IGZvY3VzZWQgbm9kZSBhbmQgZGV0ZXJtaW5lcworICAgIC8vIHdoZXRoZXIgb3Igbm90IGl0IGlz
IGEgPHRleHRhcmVhPiBlbGVtZW50IG9yIGFuIGVsZW1lbnQgd2hvc2UKKyAgICAvLyBjb250ZW50
ZWRpdGFibGUgYXR0cmlidXRlIGlzIHRydWUuCisgICAgLy8gRklYTUU6IEJ1ZyA3NDA1NDA6IFRo
aXMgY29kZSBqdXN0IGltcGxlbWVudHMgdGhlIGRlZmF1bHQgYmVoYXZpb3IKKyAgICAvLyBwcm9w
b3NlZCBpbiB0aGlzIGlzc3VlLiBXZSBzaG91bGQgYWxzbyByZXRyaWV2ZSAic3BlbGxjaGVjayIg
YXR0cmlidXRlcworICAgIC8vIGZvciB0ZXh0IGZpZWxkcyBhbmQgY3JlYXRlIGEgZmxhZyB0byBv
dmVyLXdyaXRlIHRoZSBkZWZhdWx0IGJlaGF2aW9yLgorICAgIGJvb2wgc2hvdWxkU3BlbGxjaGVj
a0J5RGVmYXVsdCgpOworCisgICAgV2ViVmlld0ltcGwqIG1fd2ViVmlldzsKKyAgICBib29sIG1f
aW5SZWRvOworCisgICAgdHlwZWRlZiBEZXF1ZTxSZWZQdHI8V2ViQ29yZTo6RWRpdENvbW1hbmQ+
ID4gRWRpdENvbW1hbmRTdGFjazsKKyAgICBFZGl0Q29tbWFuZFN0YWNrIG1fdW5kb1N0YWNrOwor
ICAgIEVkaXRDb21tYW5kU3RhY2sgbV9yZWRvU3RhY2s7CisKKyAgICAvLyBXaGV0aGVyIHRoZSBs
YXN0IGVudGVyZWQga2V5IHdhcyBhIGJhY2tzcGFjZS4KKyAgICBib29sIG1fYmFja3NwYWNlT3JE
ZWxldGVQcmVzc2VkOworCisgICAgLy8gVGhpcyBmbGFnIGlzIHNldCB0byBmYWxzZSBpZiBzcGVs
bCBjaGVjayBmb3IgdGhpcyBlZGl0b3IgaXMgbWFudWFsbHkKKyAgICAvLyB0dXJuZWQgb2ZmLiBU
aGUgZGVmYXVsdCBzZXR0aW5nIGlzIFNwZWxsQ2hlY2tBdXRvbWF0aWMuCisgICAgZW51bSB7Cisg
ICAgICAgIFNwZWxsQ2hlY2tBdXRvbWF0aWMsCisgICAgICAgIFNwZWxsQ2hlY2tGb3JjZWRPbiwK
KyAgICAgICAgU3BlbGxDaGVja0ZvcmNlZE9mZgorICAgIH07CisgICAgaW50IG1fc3BlbGxDaGVj
a1RoaXNGaWVsZFN0YXR1czsKKworICAgIC8vIFVzZWQgdG8gZGVsYXkgYXV0b2ZpbGwgcHJvY2Vz
c2luZy4KKyAgICBXZWJDb3JlOjpUaW1lcjxFZGl0b3JDbGllbnRJbXBsPiBtX2F1dG9maWxsVGlt
ZXI7CisKKyAgICBzdHJ1Y3QgQXV0b2ZpbGxBcmdzIHsKKyAgICAgICAgUmVmUHRyPFdlYkNvcmU6
OkhUTUxJbnB1dEVsZW1lbnQ+IGlucHV0RWxlbWVudDsKKyAgICAgICAgYm9vbCBhdXRvZmlsbEZv
cm1Pbmx5OworICAgICAgICBib29sIGF1dG9maWxsT25FbXB0eVZhbHVlOworICAgICAgICBib29s
IHJlcXVpcmVDYXJldEF0RW5kOworICAgICAgICBib29sIGJhY2tzcGFjZU9yRGVsZXRlUHJlc3Nl
ZDsKKyAgICB9OworICAgIE93blB0cjxBdXRvZmlsbEFyZ3M+IG1fYXV0b2ZpbGxBcmdzOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2No
cm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9GcmFtZUxvYWRlckNsaWVudEltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjJiNGIxYmMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0Zy
YW1lTG9hZGVyQ2xpZW50SW1wbC5jcHAKQEAgLTAsMCArMSwxNDEyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50SW1wbC5oIgorCisjaW5jbHVkZSAiQ2hy
b21lLmgiCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5j
bHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKKyNpbmNsdWRlICJGb3JtU3RhdGUuaCIKKyNpbmNsdWRl
ICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKKyNpbmNsdWRl
ICJIaXRUZXN0UmVzdWx0LmgiCisjaW5jbHVkZSAiSFRNTEFwcGxldEVsZW1lbnQuaCIKKyNpbmNs
dWRlICJIVE1MRm9ybUVsZW1lbnQuaCIgIC8vIG5lZWRlZCBieSBGb3JtU3RhdGUuaAorI2luY2x1
ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRl
ICJNb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgorI2luY2x1ZGUgIlN0cmluZ0V4dHJhcy5o
IgorI2luY2x1ZGUgIldlYkRhdGFTb3VyY2VJbXBsLmgiCisjaW5jbHVkZSAiV2ViRGV2VG9vbHNB
Z2VudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJGb3JtRWxlbWVudC5oIgorI2luY2x1ZGUgIldl
YkZyYW1lQ2xpZW50LmgiCisjaW5jbHVkZSAiV2ViRnJhbWVJbXBsLmgiCisjaW5jbHVkZSAiV2Vi
S2l0LmgiCisjaW5jbHVkZSAiV2ViS2l0Q2xpZW50LmgiCisjaW5jbHVkZSAiV2ViTWltZVJlZ2lz
dHJ5LmgiCisjaW5jbHVkZSAiV2ViTm9kZS5oIgorI2luY2x1ZGUgIldlYlBsdWdpbi5oIgorI2lu
Y2x1ZGUgIldlYlBsdWdpbkNvbnRhaW5lckltcGwuaCIKKyNpbmNsdWRlICJXZWJQbHVnaW5Mb2Fk
T2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJXZWJQbHVnaW5QYXJhbXMuaCIKKyNpbmNsdWRlICJXZWJT
ZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgIldlYlVSTC5oIgorI2luY2x1ZGUgIldlYlVSTEVy
cm9yLmgiCisjaW5jbHVkZSAiV2ViVmVjdG9yLmgiCisjaW5jbHVkZSAiV2ViVmlld0NsaWVudC5o
IgorI2luY2x1ZGUgIldlYlZpZXdJbXBsLmgiCisjaW5jbHVkZSAiV2luZG93RmVhdHVyZXMuaCIK
KyNpbmNsdWRlICJXcmFwcGVkUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiV3JhcHBlZFJl
c291cmNlUmVzcG9uc2UuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCisvLyBEb21haW4gZm9yIGludGVybmFsIGVycm9yIGNvZGVzLgorc3RhdGlj
IGNvbnN0IGNoYXIgaW50ZXJuYWxFcnJvckRvbWFpbltdID0gIldlYktpdCI7CisKKy8vIEFuIGlu
dGVybmFsIGVycm9yIGNvZGUuICBVc2VkIHRvIG5vdGUgYSBwb2xpY3kgY2hhbmdlIGVycm9yIHJl
c3VsdGluZyBmcm9tCisvLyBkaXNwYXRjaERlY2lkZVBvbGljeUZvck1JTUVUeXBlIG5vdCBwYXNz
aW5nIHRoZSBQb2xpY3lVc2Ugb3B0aW9uLgorZW51bSB7CisgICAgUG9saWN5Q2hhbmdlRXJyb3Ig
PSAtMTAwMDAsCit9OworCitGcmFtZUxvYWRlckNsaWVudEltcGw6OkZyYW1lTG9hZGVyQ2xpZW50
SW1wbChXZWJGcmFtZUltcGwqIGZyYW1lKQorICAgIDogbV93ZWJGcmFtZShmcmFtZSkKKyAgICAs
IG1faGFzUmVwcmVzZW50YXRpb24oZmFsc2UpCisgICAgLCBtX3NlbnRJbml0aWFsUmVzcG9uc2VU
b1BsdWdpbihmYWxzZSkKKyAgICAsIG1fbmV4dE5hdmlnYXRpb25Qb2xpY3koV2ViTmF2aWdhdGlv
blBvbGljeUlnbm9yZSkKK3sKK30KKworRnJhbWVMb2FkZXJDbGllbnRJbXBsOjp+RnJhbWVMb2Fk
ZXJDbGllbnRJbXBsKCkKK3sKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEltcGw6OmZyYW1l
TG9hZGVyRGVzdHJveWVkKCkKK3sKKyAgICAvLyBXaGVuIHRoZSBXZWJGcmFtZSB3YXMgY3JlYXRl
ZCwgaXQgaGFkIGFuIGV4dHJhIHJlZmVyZW5jZSBnaXZlbiB0byBpdCBvbgorICAgIC8vIGJlaGFs
ZiBvZiB0aGUgRnJhbWUuICBTaW5jZSB0aGUgV2ViRnJhbWUgb3ducyB1cywgdGhpcyBleHRyYSBy
ZWYgYWxzbworICAgIC8vIHNlcnZlcyB0byBrZWVwIHVzIGFsaXZlIHVudGlsIHRoZSBGcmFtZUxv
YWRlciBpcyBkb25lIHdpdGggdXMuICBUaGUKKyAgICAvLyBGcmFtZUxvYWRlciBjYWxscyB0aGlz
IG1ldGhvZCB3aGVuIGl0J3MgZ29pbmcgYXdheS4gIFRoZXJlZm9yZSwgd2UgYmFsYW5jZQorICAg
IC8vIG91dCB0aGF0IGV4dHJhIHJlZmVyZW5jZSwgd2hpY2ggbWF5IGNhdXNlICd0aGlzJyB0byBi
ZSBkZWxldGVkLgorICAgIG1fd2ViRnJhbWUtPmNsb3NpbmcoKTsKKyAgICBtX3dlYkZyYW1lLT5k
ZXJlZigpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6d2luZG93T2JqZWN0Q2xl
YXJlZCgpCit7CisgICAgaWYgKG1fd2ViRnJhbWUtPmNsaWVudCgpKQorICAgICAgICBtX3dlYkZy
YW1lLT5jbGllbnQoKS0+ZGlkQ2xlYXJXaW5kb3dPYmplY3QobV93ZWJGcmFtZSk7CisKKyAgICBX
ZWJWaWV3SW1wbCogd2VidmlldyA9IG1fd2ViRnJhbWUtPnZpZXdJbXBsKCk7CisgICAgaWYgKHdl
YnZpZXctPmRldlRvb2xzQWdlbnRQcml2YXRlKCkpCisgICAgICAgIHdlYnZpZXctPmRldlRvb2xz
QWdlbnRQcml2YXRlKCktPmRpZENsZWFyV2luZG93T2JqZWN0KG1fd2ViRnJhbWUpOworfQorCit2
b2lkIEZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6ZG9jdW1lbnRFbGVtZW50QXZhaWxhYmxlKCkKK3sK
KyAgICBpZiAobV93ZWJGcmFtZS0+Y2xpZW50KCkpCisgICAgICAgIG1fd2ViRnJhbWUtPmNsaWVu
dCgpLT5kaWRDcmVhdGVEb2N1bWVudEVsZW1lbnQobV93ZWJGcmFtZSk7Cit9CisKK3ZvaWQgRnJh
bWVMb2FkZXJDbGllbnRJbXBsOjpkaWRDcmVhdGVTY3JpcHRDb250ZXh0Rm9yRnJhbWUoKQorewor
ICAgIGlmIChtX3dlYkZyYW1lLT5jbGllbnQoKSkKKyAgICAgICAgbV93ZWJGcmFtZS0+Y2xpZW50
KCktPmRpZENyZWF0ZVNjcmlwdENvbnRleHQobV93ZWJGcmFtZSk7Cit9CisKK3ZvaWQgRnJhbWVM
b2FkZXJDbGllbnRJbXBsOjpkaWREZXN0cm95U2NyaXB0Q29udGV4dEZvckZyYW1lKCkKK3sKKyAg
ICBpZiAobV93ZWJGcmFtZS0+Y2xpZW50KCkpCisgICAgICAgIG1fd2ViRnJhbWUtPmNsaWVudCgp
LT5kaWREZXN0cm95U2NyaXB0Q29udGV4dChtX3dlYkZyYW1lKTsKK30KKwordm9pZCBGcmFtZUxv
YWRlckNsaWVudEltcGw6OmRpZENyZWF0ZUlzb2xhdGVkU2NyaXB0Q29udGV4dCgpCit7CisgICAg
aWYgKG1fd2ViRnJhbWUtPmNsaWVudCgpKQorICAgICAgICBtX3dlYkZyYW1lLT5jbGllbnQoKS0+
ZGlkQ3JlYXRlSXNvbGF0ZWRTY3JpcHRDb250ZXh0KG1fd2ViRnJhbWUpOworfQorCit2b2lkIEZy
YW1lTG9hZGVyQ2xpZW50SW1wbDo6ZGlkUGVyZm9ybUZpcnN0TmF2aWdhdGlvbigpIGNvbnN0Cit7
Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRJbXBsOjpyZWdpc3RlckZvckljb25Ob3RpZmlj
YXRpb24oYm9vbCkKK3sKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEltcGw6OmRpZENoYW5n
ZVNjcm9sbE9mZnNldCgpCit7CisgICAgaWYgKG1fd2ViRnJhbWUtPmNsaWVudCgpKQorICAgICAg
ICBtX3dlYkZyYW1lLT5jbGllbnQoKS0+ZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0KG1fd2ViRnJhbWUp
OworfQorCitib29sIEZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6YWxsb3dKYXZhU2NyaXB0KGJvb2wg
ZW5hYmxlZFBlclNldHRpbmdzKQoreworICAgIGlmIChtX3dlYkZyYW1lLT5jbGllbnQoKSkKKyAg
ICAgICAgcmV0dXJuIG1fd2ViRnJhbWUtPmNsaWVudCgpLT5hbGxvd1NjcmlwdChtX3dlYkZyYW1l
LCBlbmFibGVkUGVyU2V0dGluZ3MpOworCisgICAgcmV0dXJuIGVuYWJsZWRQZXJTZXR0aW5nczsK
K30KKworYm9vbCBGcmFtZUxvYWRlckNsaWVudEltcGw6Omhhc1dlYlZpZXcoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3dlYkZyYW1lLT52aWV3SW1wbCgpOworfQorCitib29sIEZyYW1lTG9hZGVy
Q2xpZW50SW1wbDo6aGFzRnJhbWVWaWV3KCkgY29uc3QKK3sKKyAgICAvLyBUaGUgTWFjIHBvcnQg
aGFzIHRoaXMgbm90aW9uIG9mIGEgV2ViRnJhbWVWaWV3LCB3aGljaCBzZWVtcyB0byBiZQorICAg
IC8vIHNvbWUgd3JhcHBlciBhcm91bmQgYW4gTlNWaWV3LiAgU2luY2Ugb3VyIGVxdWl2YWxlbnQg
aXMgSFdORCwgSSBndWVzcworICAgIC8vIHdlIGhhdmUgYSAiZnJhbWV2aWV3IiB3aGVuZXZlciB3
ZSBoYXZlIHRoZSB0b3BsZXZlbCBIV05ELgorICAgIHJldHVybiBtX3dlYkZyYW1lLT52aWV3SW1w
bCgpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6bWFrZURvY3VtZW50Vmlldygp
Cit7CisgICAgbV93ZWJGcmFtZS0+Y3JlYXRlRnJhbWVWaWV3KCk7Cit9CisKK3ZvaWQgRnJhbWVM
b2FkZXJDbGllbnRJbXBsOjptYWtlUmVwcmVzZW50YXRpb24oRG9jdW1lbnRMb2FkZXIqKQorewor
ICAgIG1faGFzUmVwcmVzZW50YXRpb24gPSB0cnVlOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xp
ZW50SW1wbDo6Zm9yY2VMYXlvdXQoKQoreworICAgIC8vIEZJWE1FCit9CisKK3ZvaWQgRnJhbWVM
b2FkZXJDbGllbnRJbXBsOjpmb3JjZUxheW91dEZvck5vbkhUTUwoKQoreworICAgIC8vIEZJWE1F
Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRJbXBsOjpzZXRDb3BpZXNPblNjcm9sbCgpCit7
CisgICAgLy8gRklYTUUKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEltcGw6OmRldGFjaGVk
RnJvbVBhcmVudDIoKQoreworICAgIC8vIE5vdGhpbmcgdG8gZG8gaGVyZS4KK30KKwordm9pZCBG
cmFtZUxvYWRlckNsaWVudEltcGw6OmRldGFjaGVkRnJvbVBhcmVudDMoKQoreworICAgIC8vIENs
b3NlIGRvd24gdGhlIHByb3h5LiAgVGhlIHB1cnBvc2Ugb2YgdGhpcyBjaGFuZ2UgaXMgdG8gbWFr
ZSB0aGUKKyAgICAvLyBjYWxsIHRvIFNjcmlwdENvbnRyb2xsZXI6OmNsZWFyV2luZG93U2hlbGwg
YSBuby1vcCB3aGVuIGNhbGxlZCBmcm9tCisgICAgLy8gRnJhbWU6OnBhZ2VEZXN0cm95ZWQuICBX
aXRob3V0IHRoaXMgY2hhbmdlLCB0aGlzIGNhbGwgdG8gY2xlYXJXaW5kb3dTaGVsbAorICAgIC8v
IHdpbGwgY2F1c2UgYSBjcmFzaC4gIElmIHlvdSByZW1vdmUvbW9kaWZ5IHRoaXMsIGp1c3QgZW5z
dXJlIHRoYXQgeW91IGNhbgorICAgIC8vIGdvIHRvIGEgcGFnZSBhbmQgdGhlbiBuYXZpZ2F0ZSB0
byBhIG5ldyBwYWdlIHdpdGhvdXQgZ2V0dGluZyBhbnkgYXNzZXJ0cworICAgIC8vIG9yIGNyYXNo
ZXMuCisgICAgbV93ZWJGcmFtZS0+ZnJhbWUoKS0+c2NyaXB0KCktPnByb3h5KCktPmNsZWFyRm9y
Q2xvc2UoKTsKK30KKworLy8gVGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgYXNzb2Np
YXRpbmcgdGhlIHxpZGVudGlmaWVyfCB3aXRoIGEgZ2l2ZW4KKy8vIHN1YnJlc291cmNlIGxvYWQu
ICBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyB0aGF0IGFjY2VwdCBhbiB8aWRlbnRpZmllcnwgYXJl
CisvLyBjYWxsZWQgZm9yIGVhY2ggc3VicmVzb3VyY2UsIHNvIHRoZXkgc2hvdWxkIG5vdCBiZSBk
aXNwYXRjaGVkIHRvIHRoZQorLy8gV2ViRnJhbWUuCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SW1w
bDo6YXNzaWduSWRlbnRpZmllclRvSW5pdGlhbFJlcXVlc3QoCisgICAgdW5zaWduZWQgbG9uZyBp
ZGVudGlmaWVyLCBEb2N1bWVudExvYWRlciogbG9hZGVyLAorICAgIGNvbnN0IFJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCkKK3sKKyAgICBpZiAobV93ZWJGcmFtZS0+Y2xpZW50KCkpIHsKKyAgICAg
ICAgV3JhcHBlZFJlc291cmNlUmVxdWVzdCB3ZWJyZXEocmVxdWVzdCk7CisgICAgICAgIG1fd2Vi
RnJhbWUtPmNsaWVudCgpLT5hc3NpZ25JZGVudGlmaWVyVG9SZXF1ZXN0KAorICAgICAgICAgICAg
bV93ZWJGcmFtZSwgaWRlbnRpZmllciwgd2VicmVxKTsKKyAgICB9Cit9CisKKy8vIERldGVybWlu
ZXMgd2hldGhlciB0aGUgcmVxdWVzdCBiZWluZyBsb2FkZWQgYnkgfGxvYWRlcnwgaXMgYSBmcmFt
ZSBvciBhCisvLyBzdWJyZXNvdXJjZS4gQSBzdWJyZXNvdXJjZSBpbiB0aGlzIGNvbnRleHQgaXMg
YW55dGhpbmcgb3RoZXIgdGhhbiBhIGZyYW1lIC0tCisvLyB0aGlzIGluY2x1ZGVzIGltYWdlcyBh
bmQgeG1saHR0cCByZXF1ZXN0cy4gIEl0IGlzIGltcG9ydGFudCB0byBub3RlIHRoYXQgYQorLy8g
c3VicmVzb3VyY2UgaXMgTk9UIGxpbWl0ZWQgdG8gc3R1ZmYgbG9hZGVkIHRocm91Z2ggdGhlIGZy
YW1lJ3Mgc3VicmVzb3VyY2UKKy8vIGxvYWRlci4gU3luY2hyb25vdXMgeG1saHR0cCByZXF1ZXN0
cyBmb3IgZXhhbXBsZSwgZG8gbm90IGdvIHRocm91Z2ggdGhlCisvLyBzdWJyZXNvdXJjZSBsb2Fk
ZXIsIGJ1dCB3ZSBzdGlsbCBsYWJlbCB0aGVtIGFzIFRhcmdldElzU3ViUmVzb3VyY2UuCisvLwor
Ly8gVGhlIGltcG9ydGFudCBlZGdlIGNhc2VzIHRvIGNvbnNpZGVyIHdoZW4gbW9kaWZ5aW5nIHRo
aXMgZnVuY3Rpb24gYXJlCisvLyBob3cgc3luY2hyb25vdXMgcmVzb3VyY2UgbG9hZHMgYXJlIHRy
ZWF0ZWQgZHVyaW5nIGxvYWQvdW5sb2FkIHRocmVzaG9sZC4KK3N0YXRpYyBSZXNvdXJjZVJlcXVl
c3Q6OlRhcmdldFR5cGUgZGV0ZXJtaW5lVGFyZ2V0VHlwZUZyb21Mb2FkZXIoRG9jdW1lbnRMb2Fk
ZXIqIGxvYWRlcikKK3sKKyAgICBpZiAobG9hZGVyID09IGxvYWRlci0+ZnJhbWVMb2FkZXIoKS0+
cHJvdmlzaW9uYWxEb2N1bWVudExvYWRlcigpKSB7CisgICAgICAgIGlmIChsb2FkZXItPmZyYW1l
TG9hZGVyKCktPmlzTG9hZGluZ01haW5GcmFtZSgpKQorICAgICAgICAgICAgcmV0dXJuIFJlc291
cmNlUmVxdWVzdDo6VGFyZ2V0SXNNYWluRnJhbWU7CisgICAgICAgIHJldHVybiBSZXNvdXJjZVJl
cXVlc3Q6OlRhcmdldElzU3ViRnJhbWU7CisgICAgfQorICAgIHJldHVybiBSZXNvdXJjZVJlcXVl
c3Q6OlRhcmdldElzU3ViUmVzb3VyY2U7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRJbXBs
OjpkaXNwYXRjaFdpbGxTZW5kUmVxdWVzdCgKKyAgICBEb2N1bWVudExvYWRlciogbG9hZGVyLCB1
bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwKKyAgICBj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQoreworICAgIGlmIChsb2Fk
ZXIpIHsKKyAgICAgICAgLy8gV2Ugd2FudCB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIGEgcmVxdWVz
dCBmb3IgYSBkb2N1bWVudCB0byBiZSBsb2FkZWQgaW50bworICAgICAgICAvLyB0aGUgbWFpbiBm
cmFtZSwgYSBzdWItZnJhbWUsIG9yIHRoZSBzdWItb2JqZWN0cyBpbiB0aGF0IGRvY3VtZW50Lgor
ICAgICAgICByZXF1ZXN0LnNldFRhcmdldFR5cGUoZGV0ZXJtaW5lVGFyZ2V0VHlwZUZyb21Mb2Fk
ZXIobG9hZGVyKSk7CisgICAgfQorCisgICAgLy8gRnJhbWVMb2FkZXI6OmxvYWRFbXB0eURvY3Vt
ZW50U3luY2hyb25vdXNseSgpIGNyZWF0ZXMgYW4gZW1wdHkgZG9jdW1lbnQKKyAgICAvLyB3aXRo
IG5vIFVSTC4gIFdlIGRvbid0IGxpa2UgdGhhdCwgc28gd2UnbGwgcmVuYW1lIGl0IHRvIGFib3V0
OmJsYW5rLgorICAgIGlmIChyZXF1ZXN0LnVybCgpLmlzRW1wdHkoKSkKKyAgICAgICAgcmVxdWVz
dC5zZXRVUkwoS1VSTChQYXJzZWRVUkxTdHJpbmcsICJhYm91dDpibGFuayIpKTsKKyAgICBpZiAo
cmVxdWVzdC5maXJzdFBhcnR5Rm9yQ29va2llcygpLmlzRW1wdHkoKSkKKyAgICAgICAgcmVxdWVz
dC5zZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhLVVJMKFBhcnNlZFVSTFN0cmluZywgImFib3V0OmJs
YW5rIikpOworCisgICAgLy8gR2l2ZSB0aGUgV2ViRnJhbWVDbGllbnQgYSBjcmFjayBhdCB0aGUg
cmVxdWVzdC4KKyAgICBpZiAobV93ZWJGcmFtZS0+Y2xpZW50KCkpIHsKKyAgICAgICAgV3JhcHBl
ZFJlc291cmNlUmVxdWVzdCB3ZWJyZXEocmVxdWVzdCk7CisgICAgICAgIFdyYXBwZWRSZXNvdXJj
ZVJlc3BvbnNlIHdlYnJlc3AocmVkaXJlY3RSZXNwb25zZSk7CisgICAgICAgIG1fd2ViRnJhbWUt
PmNsaWVudCgpLT53aWxsU2VuZFJlcXVlc3QoCisgICAgICAgICAgICBtX3dlYkZyYW1lLCBpZGVu
dGlmaWVyLCB3ZWJyZXEsIHdlYnJlc3ApOworICAgIH0KK30KKworYm9vbCBGcmFtZUxvYWRlckNs
aWVudEltcGw6OnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKAorICAgIERvY3VtZW50TG9hZGVy
KiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKQoreworICAgIC8vIEZJWE1FCisgICAgLy8gSW50
ZW5kZWQgdG8gcGFzcyB0aHJvdWdoIHRvIGEgbWV0aG9kIG9uIHRoZSByZXNvdXJjZSBsb2FkIGRl
bGVnYXRlLgorICAgIC8vIElmIGltcGxlbWVudGVkLCB0aGF0IG1ldGhvZCBjb250cm9scyB3aGV0
aGVyIHRoZSBicm93c2VyIHNob3VsZCBhc2sgdGhlCisgICAgLy8gbmV0d29ya2luZyBsYXllciBm
b3IgYSBzdG9yZWQgZGVmYXVsdCBjcmVkZW50aWFsIGZvciB0aGUgcGFnZSAoc2F5IGZyb20KKyAg
ICAvLyB0aGUgTWFjIE9TIGtleWNoYWluKS4gSWYgdGhlIG1ldGhvZCByZXR1cm5zIGZhbHNlLCB0
aGUgdXNlciBzaG91bGQgYmUKKyAgICAvLyBwcmVzZW50ZWQgd2l0aCBhbiBhdXRoZW50aWNhdGlv
biBjaGFsbGVuZ2Ugd2hldGhlciBvciBub3QgdGhlIG5ldHdvcmtpbmcKKyAgICAvLyBsYXllciBo
YXMgYSBjcmVkZW50aWFsIHN0b3JlZC4KKyAgICAvLyBUaGlzIHJldHVybnMgdHJ1ZSBmb3IgYmFj
a3dhcmQgY29tcGF0aWJpbGl0eTogdGhlIGFiaWxpdHkgdG8gb3ZlcnJpZGUgdGhlCisgICAgLy8g
c3lzdGVtIGNyZWRlbnRpYWwgc3RvcmUgaXMgbmV3LiAoQWN0dWFsbHksIG5vdCB5ZXQgZnVsbHkg
aW1wbGVtZW50ZWQgaW4KKyAgICAvLyBXZWJLaXQsIGFzIG9mIHRoaXMgd3JpdGluZy4pCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRJbXBsOjpkaXNwYXRjaERp
ZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSgKKyAgICBEb2N1bWVudExvYWRlciosIHVu
c2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKQor
eworICAgIC8vIEZJWE1FCit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRJbXBsOjpkaXNwYXRj
aERpZENhbmNlbEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKAorICAgIERvY3VtZW50TG9hZGVyKiwg
dW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYp
Cit7CisgICAgLy8gRklYTUUKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEltcGw6OmRpc3Bh
dGNoRGlkUmVjZWl2ZVJlc3BvbnNlKERvY3VtZW50TG9hZGVyKiBsb2FkZXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9u
ZyBpZGVudGlmaWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIGlm
IChtX3dlYkZyYW1lLT5jbGllbnQoKSkgeworICAgICAgICBXcmFwcGVkUmVzb3VyY2VSZXNwb25z
ZSB3ZWJyZXNwKHJlc3BvbnNlKTsKKyAgICAgICAgbV93ZWJGcmFtZS0+Y2xpZW50KCktPmRpZFJl
Y2VpdmVSZXNwb25zZShtX3dlYkZyYW1lLCBpZGVudGlmaWVyLCB3ZWJyZXNwKTsKKyAgICB9Cit9
CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRJbXBsOjpkaXNwYXRjaERpZFJlY2VpdmVDb250ZW50
TGVuZ3RoKAorICAgIERvY3VtZW50TG9hZGVyKiBsb2FkZXIsCisgICAgdW5zaWduZWQgbG9uZyBp
ZGVudGlmaWVyLAorICAgIGludCBsZW5ndGhSZWNlaXZlZCkKK3sKK30KKworLy8gQ2FsbGVkIHdo
ZW4gYSBwYXJ0aWN1bGFyIHJlc291cmNlIGxvYWQgY29tcGxldGVzCit2b2lkIEZyYW1lTG9hZGVy
Q2xpZW50SW1wbDo6ZGlzcGF0Y2hEaWRGaW5pc2hMb2FkaW5nKERvY3VtZW50TG9hZGVyKiBsb2Fk
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKQoreworICAgIGlmIChtX3dlYkZyYW1lLT5jbGllbnQo
KSkKKyAgICAgICAgbV93ZWJGcmFtZS0+Y2xpZW50KCktPmRpZEZpbmlzaFJlc291cmNlTG9hZCht
X3dlYkZyYW1lLCBpZGVudGlmaWVyKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEltcGw6
OmRpc3BhdGNoRGlkRmFpbExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBp
ZGVudGlmaWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKK3sKKyAgICBpZiAobV93ZWJGcmFtZS0+
Y2xpZW50KCkpCisgICAgICAgIG1fd2ViRnJhbWUtPmNsaWVudCgpLT5kaWRGYWlsUmVzb3VyY2VM
b2FkKG1fd2ViRnJhbWUsIGlkZW50aWZpZXIsIGVycm9yKTsKK30KKwordm9pZCBGcmFtZUxvYWRl
ckNsaWVudEltcGw6OmRpc3BhdGNoRGlkRmluaXNoRG9jdW1lbnRMb2FkKCkKK3sKKyAgICAvLyBB
IGZyYW1lIG1heSBiZSByZXVzZWQuICBUaGlzIGNhbGwgZW5zdXJlcyB3ZSBkb24ndCBob2xkIG9u
IHRvIG91ciBwYXNzd29yZAorICAgIC8vIGxpc3RlbmVycyBhbmQgdGhlaXIgYXNzb2NpYXRlZCBI
VE1MSW5wdXRFbGVtZW50cy4KKyAgICBtX3dlYkZyYW1lLT5jbGVhclBhc3N3b3JkTGlzdGVuZXJz
KCk7CisKKyAgICBpZiAobV93ZWJGcmFtZS0+Y2xpZW50KCkpCisgICAgICAgIG1fd2ViRnJhbWUt
PmNsaWVudCgpLT5kaWRGaW5pc2hEb2N1bWVudExvYWQobV93ZWJGcmFtZSk7Cit9CisKK2Jvb2wg
RnJhbWVMb2FkZXJDbGllbnRJbXBsOjpkaXNwYXRjaERpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlD
YWNoZSgKKyAgICBEb2N1bWVudExvYWRlciogbG9hZGVyLAorICAgIGNvbnN0IFJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCwKKyAgICBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwKKyAg
ICBpbnQgbGVuZ3RoKQoreworICAgIGlmIChtX3dlYkZyYW1lLT5jbGllbnQoKSkgeworICAgICAg
ICBXcmFwcGVkUmVzb3VyY2VSZXF1ZXN0IHdlYnJlcShyZXF1ZXN0KTsKKyAgICAgICAgV3JhcHBl
ZFJlc291cmNlUmVzcG9uc2Ugd2VicmVzcChyZXNwb25zZSk7CisgICAgICAgIG1fd2ViRnJhbWUt
PmNsaWVudCgpLT5kaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGUoCisgICAgICAgICAgICBt
X3dlYkZyYW1lLCB3ZWJyZXEsIHdlYnJlc3ApOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7ICAv
LyBEbyBub3Qgc3VwcHJlc3MgcmVtYWluaW5nIG5vdGlmaWNhdGlvbnMKK30KKwordm9pZCBGcmFt
ZUxvYWRlckNsaWVudEltcGw6OmRpc3BhdGNoRGlkTG9hZFJlc291cmNlQnlYTUxIdHRwUmVxdWVz
dCgKKyAgICB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsCisgICAgY29uc3QgU2NyaXB0U3RyaW5n
JiBzb3VyY2UpCit7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRJbXBsOjpkaXNwYXRjaERp
ZEhhbmRsZU9ubG9hZEV2ZW50cygpCit7CisgICAgaWYgKG1fd2ViRnJhbWUtPmNsaWVudCgpKQor
ICAgICAgICBtX3dlYkZyYW1lLT5jbGllbnQoKS0+ZGlkSGFuZGxlT25sb2FkRXZlbnRzKG1fd2Vi
RnJhbWUpOworfQorCisvLyBSZWRpcmVjdCBUcmFja2luZworLy8gPT09PT09PT09PT09PT09PT0K
Ky8vIFdlIHdhbnQgdG8ga2VlcCB0cmFjayBvZiB0aGUgY2hhaW4gb2YgcmVkaXJlY3RzIHRoYXQg
b2NjdXIgZHVyaW5nIHBhZ2UKKy8vIGxvYWRpbmcuIFRoZXJlIGFyZSB0d28gdHlwZXMgb2YgcmVk
aXJlY3RzLCBzZXJ2ZXIgcmVkaXJlY3RzIHdoaWNoIGFyZSBIVFRQCisvLyByZXNwb25zZSBjb2Rl
cywgYW5kIGNsaWVudCByZWRpcmVjdHMgd2hpY2ggYXJlIGRvY3VtZW50LmxvY2F0aW9uPSBhbmQg
bWV0YQorLy8gcmVmcmVzaGVzLgorLy8KKy8vIFRoaXMgb3V0bGluZXMgdGhlIGNhbGxiYWNrcyB0
aGF0IHdlIGdldCBpbiBkaWZmZXJlbnQgcmVkaXJlY3Qgc2l0dWF0aW9ucywKKy8vIGFuZCBob3cg
ZWFjaCBjYWxsIG1vZGlmaWVzIHRoZSByZWRpcmVjdCBjaGFpbi4KKy8vCisvLyBOb3JtYWwgcGFn
ZSBsb2FkCisvLyAtLS0tLS0tLS0tLS0tLS0tCisvLyAgIGRpc3BhdGNoRGlkU3RhcnRQcm92aXNp
b25hbExvYWQoKSAtPiBhZGRzIFVSTCB0byB0aGUgcmVkaXJlY3QgbGlzdAorLy8gICBkaXNwYXRj
aERpZENvbW1pdExvYWQoKSAgICAgICAgICAgLT4gRElTUEFUQ0hFUyAmIGNsZWFycyBsaXN0Cisv
LworLy8gU2VydmVyIHJlZGlyZWN0IChzdWNjZXNzKQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorLy8gICBkaXNwYXRjaERpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkKCkgICAgICAgICAgICAg
ICAgICAgIC0+IGFkZHMgc291cmNlIFVSTAorLy8gICBkaXNwYXRjaERpZFJlY2VpdmVTZXJ2ZXJS
ZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZCgpIC0+IGFkZHMgZGVzdCBVUkwKKy8vICAgZGlzcGF0
Y2hEaWRDb21taXRMb2FkKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiBESVNQQVRD
SEVTCisvLworLy8gQ2xpZW50IHJlZGlyZWN0IChzdWNjZXNzKQorLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorLy8gICAob24gcGFnZSkKKy8vICAgZGlzcGF0Y2hXaWxsUGVyZm9ybUNsaWVu
dFJlZGlyZWN0KCkgLT4gc2F2ZXMgZXhwZWN0ZWQgcmVkaXJlY3QKKy8vICAgZGlzcGF0Y2hEaWRT
dGFydFByb3Zpc2lvbmFsTG9hZCgpICAgLT4gYXBwZW5kcyByZWRpcmVjdCBzb3VyY2UgKHNpbmNl
CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0IG1hdGNoZXMg
dGhlIGV4cGVjdGVkIHJlZGlyZWN0KQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhbmQgdGhlIGN1cnJlbnQgcGFnZSBhcyB0aGUgZGVzdCkKKy8vICAgZGlzcGF0
Y2hEaWRDYW5jZWxDbGllbnRSZWRpcmVjdCgpICAgLT4gY2xlYXJzIGV4cGVjdGVkIHJlZGlyZWN0
CisvLyAgIGRpc3BhdGNoRGlkQ29tbWl0TG9hZCgpICAgICAgICAgICAgIC0+IERJU1BBVENIRVMK
Ky8vCisvLyBDbGllbnQgcmVkaXJlY3QgKGNhbmNlbGxlZCkKKy8vIChlLmcgbWV0YS1yZWZyZXNo
IHRydW1wZWQgYnkgbWFudWFsIGRvYy5sb2NhdGlvbiBjaGFuZ2UsIG9yIGp1c3QgY2FuY2VsbGVk
CisvLyBiZWNhdXNlIGEgbGluayB3YXMgY2xpY2tlZCB0aGF0IHJlcXVpcmVzIHRoZSBtZXRhIHJl
ZnJlc2ggdG8gYmUgcmVzY2hlZHVsZWQKKy8vICh0aGUgU09VUkNFIFVSTCBtYXkgaGF2ZSBjaGFu
Z2VkKS4KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gICBkaXNwYXRjaERpZENh
bmNlbENsaWVudFJlZGlyZWN0KCkgICAgICAgICAgICAgICAgIC0+IGNsZWFycyBleHBlY3RlZCBy
ZWRpcmVjdAorLy8gICBkaXNwYXRjaERpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkKCkgICAgICAgICAg
ICAgICAgIC0+IGFkZHMgb25seSBVUkwgdG8gcmVkaXJlY3QgbGlzdAorLy8gICBkaXNwYXRjaERp
ZENvbW1pdExvYWQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IERJU1BBVENIRVMgJiBj
bGVhcnMgbGlzdAorLy8gICByZXNjaGVkdWxlZCA/IGRpc3BhdGNoV2lsbFBlcmZvcm1DbGllbnRS
ZWRpcmVjdCgpIC0+IHNhdmVzIGV4cGVjdGVkIHJlZGlyZWN0CisvLyAgICAgICAgICAgICAgIDog
bm90aGluZworCisvLyBDbGllbnQgcmVkaXJlY3QgKGZhaWx1cmUpCisvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisvLyAgIChvbiBwYWdlKQorLy8gICBkaXNwYXRjaFdpbGxQZXJmb3JtQ2xp
ZW50UmVkaXJlY3QoKSAtPiBzYXZlcyBleHBlY3RlZCByZWRpcmVjdAorLy8gICBkaXNwYXRjaERp
ZFN0YXJ0UHJvdmlzaW9uYWxMb2FkKCkgICAtPiBhcHBlbmRzIHJlZGlyZWN0IHNvdXJjZSAoc2lu
Y2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQgbWF0Y2hl
cyB0aGUgZXhwZWN0ZWQgcmVkaXJlY3QpCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFuZCB0aGUgY3VycmVudCBwYWdlIGFzIHRoZSBkZXN0KQorLy8gICBkaXNw
YXRjaERpZENhbmNlbENsaWVudFJlZGlyZWN0KCkKKy8vICAgZGlzcGF0Y2hEaWRGYWlsUHJvdmlz
aW9uYWxMb2FkKCkKKy8vCisvLyBMb2FkIDEgLT4gU2VydmVyIHJlZGlyZWN0IHRvIDIgLT4gY2xp
ZW50IHJlZGlyZWN0IHRvIDMgLT4gc2VydmVyIHJlZGlyZWN0IHRvIDQKKy8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorLy8gICBkaXNwYXRjaERpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkKCkgICAgICAg
ICAgICAgICAgICAgIC0+IGFkZHMgc291cmNlIFVSTCAxCisvLyAgIGRpc3BhdGNoRGlkUmVjZWl2
ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkKCkgLT4gYWRkcyBkZXN0IFVSTCAyCisv
LyAgIGRpc3BhdGNoRGlkQ29tbWl0TG9hZCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LT4gRElTUEFUQ0hFUyAxKzIKKy8vICAgIC0tIGJlZ2luIGNsaWVudCByZWRpcmVjdCBhbmQgTkVX
IERBVEEgU09VUkNFCisvLyAgIGRpc3BhdGNoV2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdCgpICAg
ICAgICAgICAgICAgICAgLT4gc2F2ZXMgZXhwZWN0ZWQgcmVkaXJlY3QKKy8vICAgZGlzcGF0Y2hE
aWRTdGFydFByb3Zpc2lvbmFsTG9hZCgpICAgICAgICAgICAgICAgICAgICAtPiBhcHBlbmRzIFVS
TCAyIGFuZCBVUkwgMworLy8gICBkaXNwYXRjaERpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclBy
b3Zpc2lvbmFsTG9hZCgpIC0+IGFwcGVuZHMgZGVzdGluYXRpb24gVVJMIDQKKy8vICAgZGlzcGF0
Y2hEaWRDYW5jZWxDbGllbnRSZWRpcmVjdCgpICAgICAgICAgICAgICAgICAgICAtPiBjbGVhcnMg
ZXhwZWN0ZWQgcmVkaXJlY3QKKy8vICAgZGlzcGF0Y2hEaWRDb21taXRMb2FkKCkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAtPiBESVNQQVRDSEVTCisvLworLy8gSW50ZXJlc3RpbmcgY2Fz
ZSB3aXRoIG11bHRpcGxlIGxvY2F0aW9uIGNoYW5nZXMgaW52b2x2aW5nIGFuY2hvcnMuCisvLyBM
b2FkIHBhZ2UgMSBjb250YWluaW5nIGZ1dHVyZSBjbGllbnQtcmVkaXJlY3QgKGJhY2sgdG8gMSwg
ZS5nIG1ldGEgcmVmcmVzaCkgPiBDbGljaworLy8gb24gYSBsaW5rIGJhY2sgdG8gdGhlIHNhbWUg
cGFnZSAoaS5lIGFuIGFuY2hvciBocmVmKSA+CisvLyBjbGllbnQtcmVkaXJlY3QgZmluYWxseSBm
aXJlcyAod2l0aCBuZXcgc291cmNlLCBzZXQgdG8gMSNhbmNob3IpCisvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorLy8gICBkaXNwYXRjaFdpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3Qobm9uLXplcm8g
J2ludGVydmFsJyBwYXJhbSkgLT4gc2F2ZXMgZXhwZWN0ZWQgcmVkaXJlY3QKKy8vICAgLS0gY2xp
Y2sgb24gYW5jaG9yIGhyZWYKKy8vICAgZGlzcGF0Y2hEaWRDYW5jZWxDbGllbnRSZWRpcmVjdCgp
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IGNsZWFycyBleHBlY3RlZCByZWRpcmVjdAor
Ly8gICBkaXNwYXRjaERpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkKCkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLT4gYWRkcyAxI2FuY2hvciBzb3VyY2UKKy8vICAgZGlzcGF0Y2hEaWRDb21taXRM
b2FkKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IERJU1BBVENIRVMg
MSNhbmNob3IKKy8vICAgZGlzcGF0Y2hXaWxsUGVyZm9ybUNsaWVudFJlZGlyZWN0KCkgICAgICAg
ICAgICAgICAgICAgICAgICAgIC0+IHNhdmVzIGV4cC4gc291cmNlICgxI2FuY2hvcikKKy8vICAg
LS0gcmVkaXJlY3QgdGltZXIgZmlyZXMKKy8vICAgZGlzcGF0Y2hEaWRTdGFydFByb3Zpc2lvbmFs
TG9hZCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IGFwcGVuZHMgMSNhbmNob3IgKHNy
YykgYW5kIDEgKGRlc3QpCisvLyAgIGRpc3BhdGNoRGlkQ2FuY2VsQ2xpZW50UmVkaXJlY3QoKSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAtPiBjbGVhcnMgZXhwZWN0ZWQgcmVkaXJlY3QKKy8v
ICAgZGlzcGF0Y2hEaWRDb21taXRMb2FkKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC0+IERJU1BBVENIRVMgMSNhbmNob3IgKyAxCisvLwordm9pZCBGcmFtZUxvYWRlckNs
aWVudEltcGw6OmRpc3BhdGNoRGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxM
b2FkKCkKK3sKKyAgICBXZWJEYXRhU291cmNlSW1wbCogZHMgPSBtX3dlYkZyYW1lLT5wcm92aXNp
b25hbERhdGFTb3VyY2VJbXBsKCk7CisgICAgaWYgKCFkcykgeworICAgICAgICAvLyBHb3QgYSBz
ZXJ2ZXIgcmVkaXJlY3Qgd2hlbiB0aGVyZSBpcyBubyBwcm92aXNpb25hbCBEUyEKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBU
aGUgc2VydmVyIHJlZGlyZWN0IG1heSBoYXZlIGJlZW4gYmxvY2tlZC4KKyAgICBpZiAoZHMtPnJl
cXVlc3QoKS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gQSBwcm92aXNpb25h
bCBsb2FkIHNob3VsZCBoYXZlIHN0YXJ0ZWQgYWxyZWFkeSwgd2hpY2ggc2hvdWxkIGhhdmUgcHV0
IGFuCisgICAgLy8gZW50cnkgaW4gb3VyIHJlZGlyZWN0IGNoYWluLgorICAgIEFTU0VSVChkcy0+
aGFzUmVkaXJlY3RDaGFpbigpKTsKKworICAgIC8vIFRoZSBVUkwgb2YgdGhlIGRlc3RpbmF0aW9u
IGlzIG9uIHRoZSBwcm92aXNpb25hbCBkYXRhIHNvdXJjZS4gV2UgYWxzbyBuZWVkCisgICAgLy8g
dG8gdXBkYXRlIHRoZSByZWRpcmVjdCBjaGFpbiB0byBhY2NvdW50IGZvciB0aGlzIGFkZGl0aW9u
ICh3ZSBkbyB0aGlzCisgICAgLy8gYmVmb3JlIHRoZSBjYWxsYmFjayBzbyB0aGUgY2FsbGJhY2sg
Y2FuIGxvb2sgYXQgdGhlIHJlZGlyZWN0IGNoYWluIHRvIHNlZQorICAgIC8vIHdoYXQgaGFwcGVu
ZWQpLgorICAgIGRzLT5hcHBlbmRSZWRpcmVjdChkcy0+cmVxdWVzdCgpLnVybCgpKTsKKworICAg
IGlmIChtX3dlYkZyYW1lLT5jbGllbnQoKSkKKyAgICAgICAgbV93ZWJGcmFtZS0+Y2xpZW50KCkt
PmRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZChtX3dlYkZyYW1lKTsK
K30KKworLy8gQ2FsbGVkIG9uIGJvdGggc3VjY2VzcyBhbmQgZmFpbHVyZSBvZiBhIGNsaWVudCBy
ZWRpcmVjdC4KK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRJbXBsOjpkaXNwYXRjaERpZENhbmNlbENs
aWVudFJlZGlyZWN0KCkKK3sKKyAgICAvLyBObyBsb25nZXIgZXhwZWN0aW5nIGEgY2xpZW50IHJl
ZGlyZWN0LgorICAgIGlmIChtX3dlYkZyYW1lLT5jbGllbnQoKSkgeworICAgICAgICBtX2V4cGVj
dGVkQ2xpZW50UmVkaXJlY3RTcmMgPSBLVVJMKCk7CisgICAgICAgIG1fZXhwZWN0ZWRDbGllbnRS
ZWRpcmVjdERlc3QgPSBLVVJMKCk7CisgICAgICAgIG1fd2ViRnJhbWUtPmNsaWVudCgpLT5kaWRD
YW5jZWxDbGllbnRSZWRpcmVjdChtX3dlYkZyYW1lKTsKKyAgICB9CisKKyAgICAvLyBObyBuZWVk
IHRvIGNsZWFyIHRoZSByZWRpcmVjdCBjaGFpbiwgc2luY2UgdGhhdCBkYXRhIHNvdXJjZSBoYXMg
YWxyZWFkeQorICAgIC8vIGJlZW4gZGVsZXRlZCBieSB0aGUgdGltZSB0aGlzIGZ1bmN0aW9uIGlz
IGNhbGxlZC4KK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEltcGw6OmRpc3BhdGNoV2lsbFBl
cmZvcm1DbGllbnRSZWRpcmVjdCgKKyAgICBjb25zdCBLVVJMJiB1cmwsCisgICAgZG91YmxlIGlu
dGVydmFsLAorICAgIGRvdWJsZSBmaXJlRGF0ZSkKK3sKKyAgICAvLyBUZWxscyBkaXNwYXRjaERp
ZFN0YXJ0UHJvdmlzaW9uYWxMb2FkIHRoYXQgaWYgaXQgc2VlcyB0aGlzIGl0ZW0gaXQgaXMgYQor
ICAgIC8vIHJlZGlyZWN0IGFuZCB0aGUgc291cmNlIGl0ZW0gc2hvdWxkIGJlIGFkZGVkIGFzIHRo
ZSBzdGFydCBvZiB0aGUgY2hhaW4uCisgICAgbV9leHBlY3RlZENsaWVudFJlZGlyZWN0U3JjID0g
bV93ZWJGcmFtZS0+dXJsKCk7CisgICAgbV9leHBlY3RlZENsaWVudFJlZGlyZWN0RGVzdCA9IHVy
bDsKKworICAgIC8vIEZJWE1FOiBidWcgMTEzNTUxMi4gV2Via2l0IGRvZXMgbm90IHByb3Blcmx5
IG5vdGlmeSB1cyBvZiBjYW5jZWxsaW5nCisgICAgLy8gaHR0cCA+IGZpbGUgY2xpZW50IHJlZGly
ZWN0cy4gU2luY2UgdGhlIEZyYW1lTG9hZGVyJ3MgcG9saWN5IGlzIHRvIG5ldmVyCisgICAgLy8g
Y2Fycnkgb3V0IHN1Y2ggYSBuYXZpZ2F0aW9uIGFueXdheSwgdGhlIGJlc3QgdGhpbmcgd2UgY2Fu
IGRvIGZvciBub3cgdG8KKyAgICAvLyBub3QgZ2V0IGNvbmZ1c2VkIGlzIGlnbm9yZSB0aGlzIG5v
dGlmaWNhdGlvbi4KKyAgICBpZiAobV9leHBlY3RlZENsaWVudFJlZGlyZWN0RGVzdC5pc0xvY2Fs
RmlsZSgpCisgICAgICAgICYmIG1fZXhwZWN0ZWRDbGllbnRSZWRpcmVjdFNyYy5wcm90b2NvbElu
SFRUUEZhbWlseSgpKSB7CisgICAgICAgIG1fZXhwZWN0ZWRDbGllbnRSZWRpcmVjdFNyYyA9IEtV
UkwoKTsKKyAgICAgICAgbV9leHBlY3RlZENsaWVudFJlZGlyZWN0RGVzdCA9IEtVUkwoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX3dlYkZyYW1lLT5jbGllbnQoKSkgewor
ICAgICAgICBtX3dlYkZyYW1lLT5jbGllbnQoKS0+d2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdCgK
KyAgICAgICAgICAgIG1fd2ViRnJhbWUsCisgICAgICAgICAgICBtX2V4cGVjdGVkQ2xpZW50UmVk
aXJlY3RTcmMsCisgICAgICAgICAgICBtX2V4cGVjdGVkQ2xpZW50UmVkaXJlY3REZXN0LAorICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihpbnRlcnZhbCksCisgICAgICAgICAg
ICBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGZpcmVEYXRlKSk7CisgICAgfQorfQorCit2b2lk
IEZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6ZGlzcGF0Y2hEaWRDaGFuZ2VMb2NhdGlvbldpdGhpblBh
Z2UoKQoreworICAgIC8vIEFuY2hvciBmcmFnbWVudCBuYXZpZ2F0aW9ucyBhcmUgbm90IG5vcm1h
bCBsb2Fkcywgc28gd2UgbmVlZCB0byBzeW50aGVzaXplCisgICAgLy8gc29tZSBldmVudHMgZm9y
IG91ciBkZWxlZ2F0ZS4KKyAgICBXZWJWaWV3SW1wbCogd2ViVmlldyA9IG1fd2ViRnJhbWUtPnZp
ZXdJbXBsKCk7CisgICAgaWYgKHdlYlZpZXctPmNsaWVudCgpKQorICAgICAgICB3ZWJWaWV3LT5j
bGllbnQoKS0+ZGlkU3RhcnRMb2FkaW5nKCk7CisKKyAgICBXZWJEYXRhU291cmNlSW1wbCogZHMg
PSBtX3dlYkZyYW1lLT5kYXRhU291cmNlSW1wbCgpOworICAgIEFTU0VSVChkcyk7ICAvLyBTaG91
bGQgbm90IGJlIG51bGwgd2hlbiBuYXZpZ2F0aW5nIHRvIGEgcmVmZXJlbmNlIGZyYWdtZW50IQor
ICAgIGlmIChkcykgeworICAgICAgICBLVVJMIHVybCA9IGRzLT5yZXF1ZXN0KCkudXJsKCk7Cisg
ICAgICAgIEtVUkwgY2hhaW5FbmQ7CisgICAgICAgIGlmIChkcy0+aGFzUmVkaXJlY3RDaGFpbigp
KSB7CisgICAgICAgICAgICBjaGFpbkVuZCA9IGRzLT5lbmRPZlJlZGlyZWN0Q2hhaW4oKTsKKyAg
ICAgICAgICAgIGRzLT5jbGVhclJlZGlyZWN0Q2hhaW4oKTsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIEZpZ3VyZSBvdXQgaWYgdGhpcyBsb2NhdGlvbiBjaGFuZ2UgaXMgYmVjYXVzZSBvZiBhIEpT
LWluaXRpYXRlZAorICAgICAgICAvLyBjbGllbnQgcmVkaXJlY3QgKGUuZyBvbmxvYWQvc2V0VGlt
ZW91dCBkb2N1bWVudC5sb2NhdGlvbi5ocmVmPSkuCisgICAgICAgIC8vIEZJWE1FOiAoYnVncyAx
MDg1MzI1LCAxMDQ2ODQxKSBXZSBkb24ndCBnZXQgcHJvcGVyIHJlZGlyZWN0CisgICAgICAgIC8v
IHBlcmZvcm1lZC9jYW5jZWxsZWQgbm90aWZpY2F0aW9ucyBhY3Jvc3MgYW5jaG9yIG5hdmlnYXRp
b25zLCBzbyB0aGUKKyAgICAgICAgLy8gb3RoZXIgcmVkaXJlY3QtdHJhY2tpbmcgY29kZSBpbiB0
aGlzIGNsYXNzIChzZWUKKyAgICAgICAgLy8gZGlzcGF0Y2gqQ2xpZW50UmVkaXJlY3QoKSBhbmQg
ZGlzcGF0Y2hEaWRTdGFydFByb3Zpc2lvbmFsTG9hZCkgaXMKKyAgICAgICAgLy8gaW5zdWZmaWNp
ZW50IHRvIGNhdGNoIGFuZCBwcm9wZXJseSBmbGFnIHRoZXNlIHRyYW5zaXRpb25zLiBPbmNlIGEK
KyAgICAgICAgLy8gcHJvcGVyIGZpeCBmb3IgdGhpcyBidWcgaXMgaWRlbnRpZmllZCBhbmQgYXBw
bGllZCB0aGUgZm9sbG93aW5nCisgICAgICAgIC8vIGJsb2NrIG1heSBubyBsb25nZXIgYmUgcmVx
dWlyZWQuCisgICAgICAgIGJvb2wgd2FzQ2xpZW50UmVkaXJlY3QgPQorICAgICAgICAgICAgKHVy
bCA9PSBtX2V4cGVjdGVkQ2xpZW50UmVkaXJlY3REZXN0ICYmIGNoYWluRW5kID09IG1fZXhwZWN0
ZWRDbGllbnRSZWRpcmVjdFNyYykKKyAgICAgICAgICAgIHx8ICFtX3dlYkZyYW1lLT5pc1Byb2Nl
c3NpbmdVc2VyR2VzdHVyZSgpOworCisgICAgICAgIGlmICh3YXNDbGllbnRSZWRpcmVjdCkgewor
ICAgICAgICAgICAgaWYgKG1fd2ViRnJhbWUtPmNsaWVudCgpKQorICAgICAgICAgICAgICAgIG1f
d2ViRnJhbWUtPmNsaWVudCgpLT5kaWRDb21wbGV0ZUNsaWVudFJlZGlyZWN0KG1fd2ViRnJhbWUs
IGNoYWluRW5kKTsKKyAgICAgICAgICAgIGRzLT5hcHBlbmRSZWRpcmVjdChjaGFpbkVuZCk7Cisg
ICAgICAgICAgICAvLyBNYWtlIHN1cmUgd2UgY2xlYXIgdGhlIGV4cGVjdGVkIHJlZGlyZWN0IHNp
bmNlIHdlIGp1c3QgZWZmZWN0aXZlbHkKKyAgICAgICAgICAgIC8vIGNvbXBsZXRlZCBpdC4KKyAg
ICAgICAgICAgIG1fZXhwZWN0ZWRDbGllbnRSZWRpcmVjdFNyYyA9IEtVUkwoKTsKKyAgICAgICAg
ICAgIG1fZXhwZWN0ZWRDbGllbnRSZWRpcmVjdERlc3QgPSBLVVJMKCk7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBSZWdhcmRsZXNzIG9mIGhvdyB3ZSBnb3QgaGVyZSwgd2UgYXJlIG5hdmlnYXRp
bmcgdG8gYSBVUkwgc28gd2UgbmVlZCB0bworICAgICAgICAvLyBhZGQgaXQgdG8gdGhlIHJlZGly
ZWN0IGNoYWluLgorICAgICAgICBkcy0+YXBwZW5kUmVkaXJlY3QodXJsKTsKKyAgICB9CisKKyAg
ICBib29sIGlzTmV3TmF2aWdhdGlvbjsKKyAgICB3ZWJWaWV3LT5kaWRDb21taXRMb2FkKCZpc05l
d05hdmlnYXRpb24pOworICAgIGlmIChtX3dlYkZyYW1lLT5jbGllbnQoKSkKKyAgICAgICAgbV93
ZWJGcmFtZS0+Y2xpZW50KCktPmRpZENoYW5nZUxvY2F0aW9uV2l0aGluUGFnZShtX3dlYkZyYW1l
LCBpc05ld05hdmlnYXRpb24pOworCisgICAgaWYgKHdlYlZpZXctPmNsaWVudCgpKQorICAgICAg
ICB3ZWJWaWV3LT5jbGllbnQoKS0+ZGlkU3RvcExvYWRpbmcoKTsKK30KKwordm9pZCBGcmFtZUxv
YWRlckNsaWVudEltcGw6OmRpc3BhdGNoV2lsbENsb3NlKCkKK3sKKyAgICBpZiAobV93ZWJGcmFt
ZS0+Y2xpZW50KCkpCisgICAgICAgIG1fd2ViRnJhbWUtPmNsaWVudCgpLT53aWxsQ2xvc2UobV93
ZWJGcmFtZSk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRJbXBsOjpkaXNwYXRjaERpZFJl
Y2VpdmVJY29uKCkKK3sKKyAgICAvLyBUaGUgaWNvbiBkYXRhYmFzZSBpcyBkaXNhYmxlZCwgc28g
dGhpcyBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkLgorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
fQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6ZGlzcGF0Y2hEaWRTdGFydFByb3Zpc2lv
bmFsTG9hZCgpCit7CisgICAgLy8gSW4gY2FzZSBhIHJlZGlyZWN0IG9jY3Vycywgd2UgbmVlZCB0
aGlzIHRvIGJlIHNldCBzbyB0aGF0IHRoZSByZWRpcmVjdAorICAgIC8vIGhhbmRsaW5nIGNvZGUg
Y2FuIHRlbGwgd2hlcmUgdGhlIHJlZGlyZWN0IGNhbWUgZnJvbS4gU2VydmVyIHJlZGlyZWN0cwor
ICAgIC8vIHdpbGwgb2NjdXIgb24gdGhlIHByb3Zpc2lvbmFsIGxvYWQsIHNvIHdlIG5lZWQgdG8g
a2VlcCB0cmFjayBvZiB0aGUgbW9zdAorICAgIC8vIHJlY2VudCBwcm92aXNpb25hbCBsb2FkIFVS
TC4KKyAgICAvLyBTZWUgZGlzcGF0Y2hEaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNp
b25hbExvYWQuCisgICAgV2ViRGF0YVNvdXJjZUltcGwqIGRzID0gbV93ZWJGcmFtZS0+cHJvdmlz
aW9uYWxEYXRhU291cmNlSW1wbCgpOworICAgIGlmICghZHMpIHsKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgS1VSTCB1cmwgPSBkcy0+
cmVxdWVzdCgpLnVybCgpOworCisgICAgLy8gU2luY2UgdGhlIHByb3Zpc2lvbmFsIGxvYWQganVz
dCBzdGFydGVkLCB3ZSBzaG91bGQgaGF2ZSBub3QgZ290dGVuCisgICAgLy8gYW55IHJlZGlyZWN0
cyB5ZXQuCisgICAgQVNTRVJUKCFkcy0+aGFzUmVkaXJlY3RDaGFpbigpKTsKKworICAgIC8vIElm
IHRoaXMgbG9hZCBpcyB3aGF0IHdlIGV4cGVjdGVkIGZyb20gYSBjbGllbnQgcmVkaXJlY3QsIHRy
ZWF0IGl0IGFzIGEKKyAgICAvLyByZWRpcmVjdCBmcm9tIHRoYXQgb3JpZ2luYWwgcGFnZS4gVGhl
IGV4cGVjdGVkIHJlZGlyZWN0IHVybHMgd2lsbCBiZQorICAgIC8vIGNsZWFyZWQgYnkgRGlkQ2Fu
Y2VsQ2xpZW50UmVkaXJlY3QuCisgICAgYm9vbCBjb21wbGV0aW5nQ2xpZW50UmVkaXJlY3QgPSBm
YWxzZTsKKyAgICBpZiAobV9leHBlY3RlZENsaWVudFJlZGlyZWN0U3JjLmlzVmFsaWQoKSkgewor
ICAgICAgICAvLyBtX2V4cGVjdGVkQ2xpZW50UmVkaXJlY3REZXN0IGNvdWxkIGJlIHNvbWV0aGlu
ZyBsaWtlCisgICAgICAgIC8vICJqYXZhc2NyaXB0Omhpc3RvcnkuZ28oLTEpIiB0aHVzIHdlIG5l
ZWQgdG8gZXhjbHVkZSB1cmwgc3RhcnRzIHdpdGgKKyAgICAgICAgLy8gImphdmFzY3JpcHQ6Ii4g
U2VlIGJ1ZzogMTA4MDg3MworICAgICAgICBBU1NFUlQobV9leHBlY3RlZENsaWVudFJlZGlyZWN0
RGVzdC5wcm90b2NvbElzKCJqYXZhc2NyaXB0IikKKyAgICAgICAgICAgIHx8IG1fZXhwZWN0ZWRD
bGllbnRSZWRpcmVjdERlc3QgPT0gdXJsKTsKKyAgICAgICAgZHMtPmFwcGVuZFJlZGlyZWN0KG1f
ZXhwZWN0ZWRDbGllbnRSZWRpcmVjdFNyYyk7CisgICAgICAgIGNvbXBsZXRpbmdDbGllbnRSZWRp
cmVjdCA9IHRydWU7CisgICAgfQorICAgIGRzLT5hcHBlbmRSZWRpcmVjdCh1cmwpOworCisgICAg
aWYgKG1fd2ViRnJhbWUtPmNsaWVudCgpKSB7CisgICAgICAgIC8vIFdoYXRldmVyIGluZm9ybWF0
aW9uIGRpZENvbXBsZXRlQ2xpZW50UmVkaXJlY3QgY29udGFpbnMgc2hvdWxkIG9ubHkKKyAgICAg
ICAgLy8gYmUgY29uc2lkZXJlZCByZWxldmFudCB1bnRpbCB0aGUgbmV4dCBwcm92aXNpb25hbCBs
b2FkIGhhcyBzdGFydGVkLgorICAgICAgICAvLyBTbyB3ZSBmaXJzdCB0ZWxsIHRoZSBjbGllbnQg
dGhhdCB0aGUgbG9hZCBzdGFydGVkLCBhbmQgdGhlbiB0ZWxsIGl0CisgICAgICAgIC8vIGFib3V0
IHRoZSBjbGllbnQgcmVkaXJlY3QgdGhlIGxvYWQgaXMgcmVzcG9uc2libGUgZm9yIGNvbXBsZXRp
bmcuCisgICAgICAgIG1fd2ViRnJhbWUtPmNsaWVudCgpLT5kaWRTdGFydFByb3Zpc2lvbmFsTG9h
ZChtX3dlYkZyYW1lKTsKKyAgICAgICAgaWYgKGNvbXBsZXRpbmdDbGllbnRSZWRpcmVjdCkgewor
ICAgICAgICAgICAgbV93ZWJGcmFtZS0+Y2xpZW50KCktPmRpZENvbXBsZXRlQ2xpZW50UmVkaXJl
Y3QoCisgICAgICAgICAgICAgICAgbV93ZWJGcmFtZSwgbV9leHBlY3RlZENsaWVudFJlZGlyZWN0
U3JjKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEltcGw6
OmRpc3BhdGNoRGlkUmVjZWl2ZVRpdGxlKGNvbnN0IFN0cmluZyYgdGl0bGUpCit7CisgICAgaWYg
KG1fd2ViRnJhbWUtPmNsaWVudCgpKQorICAgICAgICBtX3dlYkZyYW1lLT5jbGllbnQoKS0+ZGlk
UmVjZWl2ZVRpdGxlKG1fd2ViRnJhbWUsIHRpdGxlKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNs
aWVudEltcGw6OmRpc3BhdGNoRGlkQ29tbWl0TG9hZCgpCit7CisgICAgV2ViVmlld0ltcGwqIHdl
YnZpZXcgPSBtX3dlYkZyYW1lLT52aWV3SW1wbCgpOworICAgIGJvb2wgaXNOZXdOYXZpZ2F0aW9u
OworICAgIHdlYnZpZXctPmRpZENvbW1pdExvYWQoJmlzTmV3TmF2aWdhdGlvbik7CisKKyAgICBp
ZiAobV93ZWJGcmFtZS0+Y2xpZW50KCkpCisgICAgICAgIG1fd2ViRnJhbWUtPmNsaWVudCgpLT5k
aWRDb21taXRQcm92aXNpb25hbExvYWQobV93ZWJGcmFtZSwgaXNOZXdOYXZpZ2F0aW9uKTsKKwor
ICAgIGlmICh3ZWJ2aWV3LT5kZXZUb29sc0FnZW50UHJpdmF0ZSgpKQorICAgICAgICB3ZWJ2aWV3
LT5kZXZUb29sc0FnZW50UHJpdmF0ZSgpLT5kaWRDb21taXRQcm92aXNpb25hbExvYWQobV93ZWJG
cmFtZSwgaXNOZXdOYXZpZ2F0aW9uKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEltcGw6
OmRpc3BhdGNoRGlkRmFpbFByb3Zpc2lvbmFsTG9hZCgKKyAgICBjb25zdCBSZXNvdXJjZUVycm9y
JiBlcnJvcikKK3sKKworICAgIC8vIElmIGEgcG9saWN5IGNoYW5nZSBvY2N1cmVkLCB0aGVuIHdl
IGRvIG5vdCB3YW50IHRvIGluZm9ybSB0aGUgcGx1Z2luCisgICAgLy8gZGVsZWdhdGUuICBTZWUg
aHR0cDovL2IvOTA3Nzg5IGZvciBkZXRhaWxzLiAgRklYTUU6IFRoaXMgbWVhbnMgdGhlCisgICAg
Ly8gcGx1Z2luIHdvbid0IHJlY2VpdmUgTlBQX1VSTE5vdGlmeSwgd2hpY2ggc2VlbXMgbGlrZSBp
dCBjb3VsZCByZXN1bHQgaW4KKyAgICAvLyBhIG1lbW9yeSBsZWFrIGluIHRoZSBwbHVnaW4hIQor
ICAgIGlmIChlcnJvci5kb21haW4oKSA9PSBpbnRlcm5hbEVycm9yRG9tYWluCisgICAgICAgICYm
IGVycm9yLmVycm9yQ29kZSgpID09IFBvbGljeUNoYW5nZUVycm9yKSB7CisgICAgICAgIG1fd2Vi
RnJhbWUtPmRpZEZhaWwoY2FuY2VsbGVkRXJyb3IoZXJyb3IuZmFpbGluZ1VSTCgpKSwgdHJ1ZSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBPd25QdHI8V2ViUGx1Z2luTG9hZE9ic2Vy
dmVyPiBvYnNlcnZlciA9IHBsdWdpbkxvYWRPYnNlcnZlcigpOworICAgIG1fd2ViRnJhbWUtPmRp
ZEZhaWwoZXJyb3IsIHRydWUpOworICAgIGlmIChvYnNlcnZlcikKKyAgICAgICAgb2JzZXJ2ZXIt
PmRpZEZhaWxMb2FkaW5nKGVycm9yKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEltcGw6
OmRpc3BhdGNoRGlkRmFpbExvYWQoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCit7CisgICAg
T3duUHRyPFdlYlBsdWdpbkxvYWRPYnNlcnZlcj4gb2JzZXJ2ZXIgPSBwbHVnaW5Mb2FkT2JzZXJ2
ZXIoKTsKKyAgICBtX3dlYkZyYW1lLT5kaWRGYWlsKGVycm9yLCBmYWxzZSk7CisgICAgaWYgKG9i
c2VydmVyKQorICAgICAgICBvYnNlcnZlci0+ZGlkRmFpbExvYWRpbmcoZXJyb3IpOworCisgICAg
Ly8gRG9uJ3QgY2xlYXIgdGhlIHJlZGlyZWN0IGNoYWluLCB0aGlzIHdpbGwgaGFwcGVuIGluIHRo
ZSBtaWRkbGUgb2YgY2xpZW50CisgICAgLy8gcmVkaXJlY3RzLCBhbmQgd2UgbmVlZCB0aGUgY29u
dGV4dC4gVGhlIGNoYWluIHdpbGwgYmUgY2xlYXJlZCB3aGVuIHRoZQorICAgIC8vIHByb3Zpc2lv
bmFsIGxvYWQgc3VjY2VlZHMgb3IgZmFpbHMsIG5vdCB0aGUgInJlYWwiIG9uZS4KK30KKwordm9p
ZCBGcmFtZUxvYWRlckNsaWVudEltcGw6OmRpc3BhdGNoRGlkRmluaXNoTG9hZCgpCit7CisgICAg
T3duUHRyPFdlYlBsdWdpbkxvYWRPYnNlcnZlcj4gb2JzZXJ2ZXIgPSBwbHVnaW5Mb2FkT2JzZXJ2
ZXIoKTsKKworICAgIGlmIChtX3dlYkZyYW1lLT5jbGllbnQoKSkKKyAgICAgICAgbV93ZWJGcmFt
ZS0+Y2xpZW50KCktPmRpZEZpbmlzaExvYWQobV93ZWJGcmFtZSk7CisKKyAgICBpZiAob2JzZXJ2
ZXIpCisgICAgICAgIG9ic2VydmVyLT5kaWRGaW5pc2hMb2FkaW5nKCk7CisKKyAgICAvLyBEb24n
dCBjbGVhciB0aGUgcmVkaXJlY3QgY2hhaW4sIHRoaXMgd2lsbCBoYXBwZW4gaW4gdGhlIG1pZGRs
ZSBvZiBjbGllbnQKKyAgICAvLyByZWRpcmVjdHMsIGFuZCB3ZSBuZWVkIHRoZSBjb250ZXh0LiBU
aGUgY2hhaW4gd2lsbCBiZSBjbGVhcmVkIHdoZW4gdGhlCisgICAgLy8gcHJvdmlzaW9uYWwgbG9h
ZCBzdWNjZWVkcyBvciBmYWlscywgbm90IHRoZSAicmVhbCIgb25lLgorfQorCit2b2lkIEZyYW1l
TG9hZGVyQ2xpZW50SW1wbDo6ZGlzcGF0Y2hEaWRGaXJzdExheW91dCgpCit7Cit9CisKK3ZvaWQg
RnJhbWVMb2FkZXJDbGllbnRJbXBsOjpkaXNwYXRjaERpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxh
eW91dCgpCit7CisgICAgLy8gRklYTUU6IGNhbGxlZCB3aGVuIHdlYmtpdCBmaW5pc2hlZCBsYXlv
dXQgb2YgYSBwYWdlIHRoYXQgd2FzIHZpc3VhbGx5IG5vbi1lbXB0eS4KKyAgICAvLyBBbGwgcmVz
b3VyY2VzIGhhdmUgbm90IG5lY2Vzc2FyaWx5IGZpbmlzaGVkIGxvYWRpbmcuCit9CisKK0ZyYW1l
KiBGcmFtZUxvYWRlckNsaWVudEltcGw6OmRpc3BhdGNoQ3JlYXRlUGFnZSgpCit7CisgICAgc3Ry
dWN0IFdpbmRvd0ZlYXR1cmVzIGZlYXR1cmVzOworICAgIFBhZ2UqIG5ld1BhZ2UgPSBtX3dlYkZy
YW1lLT5mcmFtZSgpLT5wYWdlKCktPmNocm9tZSgpLT5jcmVhdGVXaW5kb3coCisgICAgICAgIG1f
d2ViRnJhbWUtPmZyYW1lKCksIEZyYW1lTG9hZFJlcXVlc3QoKSwgZmVhdHVyZXMpOworCisgICAg
Ly8gTWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBhIHZhbGlkIGRpc3Bvc2l0aW9uLiAgVGhpcyBzaG91
bGQgaGF2ZSBiZWVuIHNldCBpbgorICAgIC8vIHRoZSBwcmVjZWVkaW5nIGNhbGwgdG8gZGlzcGF0
Y2hEZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24uCisgICAgQVNTRVJUKG1fbmV4dE5hdmln
YXRpb25Qb2xpY3kgIT0gV2ViTmF2aWdhdGlvblBvbGljeUlnbm9yZSk7CisgICAgV2ViTmF2aWdh
dGlvblBvbGljeSBwb2xpY3kgPSBtX25leHROYXZpZ2F0aW9uUG9saWN5OworICAgIG1fbmV4dE5h
dmlnYXRpb25Qb2xpY3kgPSBXZWJOYXZpZ2F0aW9uUG9saWN5SWdub3JlOworCisgICAgLy8gY3Jl
YXRlV2luZG93IGNhbiByZXR1cm4gbnVsbCAoZS5nLiwgcG9wdXAgYmxvY2tlciBkZW5pZXMgdGhl
IHdpbmRvdykuCisgICAgaWYgKCFuZXdQYWdlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFdl
YlZpZXdJbXBsOjpmcm9tUGFnZShuZXdQYWdlKS0+c2V0SW5pdGlhbE5hdmlnYXRpb25Qb2xpY3ko
cG9saWN5KTsKKyAgICByZXR1cm4gbmV3UGFnZS0+bWFpbkZyYW1lKCk7Cit9CisKK3ZvaWQgRnJh
bWVMb2FkZXJDbGllbnRJbXBsOjpkaXNwYXRjaFNob3coKQoreworICAgIFdlYlZpZXdJbXBsKiB3
ZWJWaWV3ID0gbV93ZWJGcmFtZS0+dmlld0ltcGwoKTsKKyAgICBpZiAod2ViVmlldyAmJiB3ZWJW
aWV3LT5jbGllbnQoKSkKKyAgICAgICAgd2ViVmlldy0+Y2xpZW50KCktPnNob3cod2ViVmlldy0+
aW5pdGlhbE5hdmlnYXRpb25Qb2xpY3koKSk7Cit9CisKK3N0YXRpYyBib29sIHNob3VsZFRyZWF0
QXNBdHRhY2htZW50KGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIGNv
bnN0IFN0cmluZyYgY29udGVudERpc3Bvc2l0aW9uID0KKyAgICAgICAgcmVzcG9uc2UuaHR0cEhl
YWRlckZpZWxkKCJDb250ZW50LURpc3Bvc2l0aW9uIik7CisgICAgaWYgKGNvbnRlbnREaXNwb3Np
dGlvbi5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFNvbWUgYnJv
a2VuIHNpdGVzIGp1c3Qgc2VuZAorICAgIC8vIENvbnRlbnQtRGlzcG9zaXRpb246IDsgZmlsZW5h
bWU9ImZpbGUiCisgICAgLy8gc2NyZWVuIHRob3NlIG91dCBoZXJlLgorICAgIGlmIChjb250ZW50
RGlzcG9zaXRpb24uc3RhcnRzV2l0aCgiOyIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAoY29udGVudERpc3Bvc2l0aW9uLnN0YXJ0c1dpdGgoImlubGluZSIsIGZhbHNlKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gU29tZSBicm9rZW4gc2l0ZXMganVzdCBzZW5k
CisgICAgLy8gQ29udGVudC1EaXNwb3NpdGlvbjogZmlsZW5hbWU9ImZpbGUiCisgICAgLy8gd2l0
aG91dCBhIGRpc3Bvc2l0aW9uIHRva2VuLi4uIHNjcmVlbiB0aG9zZSBvdXQuCisgICAgaWYgKGNv
bnRlbnREaXNwb3NpdGlvbi5zdGFydHNXaXRoKCJmaWxlbmFtZSIsIGZhbHNlKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgLy8gQWxzbyBpbiB1c2UgaXMgQ29udGVudC1EaXNwb3NpdGlv
bjogbmFtZT0iZmlsZSIKKyAgICBpZiAoY29udGVudERpc3Bvc2l0aW9uLnN0YXJ0c1dpdGgoIm5h
bWUiLCBmYWxzZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFdlIGhhdmUgYSBj
b250ZW50LWRpc3Bvc2l0aW9uIG9mICJhdHRhY2htZW50IiBvciB1bmtub3duLgorICAgIC8vIFJG
QyAyMTgzLCBzZWN0aW9uIDIuOCBzYXlzIHRoYXQgYW4gdW5rbm93biBkaXNwb3NpdGlvbgorICAg
IC8vIHZhbHVlIHNob3VsZCBiZSB0cmVhdGVkIGFzICJhdHRhY2htZW50IgorICAgIHJldHVybiB0
cnVlOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6ZGlzcGF0Y2hEZWNpZGVQb2xp
Y3lGb3JNSU1FVHlwZSgKKyAgICAgRnJhbWVQb2xpY3lGdW5jdGlvbiBmdW5jdGlvbiwKKyAgICAg
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwKKyAgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikKK3sK
KyAgICBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSA9CisgICAgICAgIG1fd2ViRnJh
bWUtPmZyYW1lKCktPmxvYWRlcigpLT5hY3RpdmVEb2N1bWVudExvYWRlcigpLT5yZXNwb25zZSgp
OworCisgICAgUG9saWN5QWN0aW9uIGFjdGlvbjsKKworICAgIGludCBzdGF0dXNDb2RlID0gcmVz
cG9uc2UuaHR0cFN0YXR1c0NvZGUoKTsKKyAgICBpZiAoc3RhdHVzQ29kZSA9PSAyMDQgfHwgc3Rh
dHVzQ29kZSA9PSAyMDUpIHsKKyAgICAgICAgLy8gVGhlIHNlcnZlciBkb2VzIG5vdCB3YW50IHVz
IHRvIHJlcGxhY2UgdGhlIHBhZ2UgY29udGVudHMuCisgICAgICAgIGFjdGlvbiA9IFBvbGljeUln
bm9yZTsKKyAgICB9IGVsc2UgaWYgKHNob3VsZFRyZWF0QXNBdHRhY2htZW50KHJlc3BvbnNlKSkg
eworICAgICAgICAvLyBUaGUgc2VydmVyIHdhbnRzIHVzIHRvIGRvd25sb2FkIGluc3RlYWQgb2Yg
cmVwbGFjaW5nIHRoZSBwYWdlIGNvbnRlbnRzLgorICAgICAgICAvLyBEb3dubG9hZGluZyBpcyBo
YW5kbGVkIGJ5IHRoZSBlbWJlZGRlciwgYnV0IHdlIHN0aWxsIGdldCB0aGUgaW5pdGlhbAorICAg
ICAgICAvLyByZXNwb25zZSBzbyB0aGF0IHdlIGNhbiBpZ25vcmUgaXQgYW5kIGNsZWFuIHVwIHBy
b3Blcmx5LgorICAgICAgICBhY3Rpb24gPSBQb2xpY3lJZ25vcmU7CisgICAgfSBlbHNlIGlmICgh
Y2FuU2hvd01JTUVUeXBlKG1pbWVUeXBlKSkgeworICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB3
ZSBjYW4gYWN0dWFsbHkgaGFuZGxlIHRoaXMgdHlwZSBpbnRlcm5hbGx5LgorICAgICAgICBhY3Rp
b24gPSBQb2xpY3lJZ25vcmU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT0ssIHdlIHdpbGwg
cmVuZGVyIHRoaXMgcGFnZS4KKyAgICAgICAgYWN0aW9uID0gUG9saWN5VXNlOworICAgIH0KKwor
ICAgIC8vIE5PVEU6IFBvbGljeUNoYW5nZUVycm9yIHdpbGwgYmUgZ2VuZXJhdGVkIHdoZW4gYWN0
aW9uIGlzIG5vdCBQb2xpY3lVc2UuCisgICAgKG1fd2ViRnJhbWUtPmZyYW1lKCktPmxvYWRlcigp
LT5wb2xpY3lDaGVja2VyKCktPipmdW5jdGlvbikoYWN0aW9uKTsKK30KKwordm9pZCBGcmFtZUxv
YWRlckNsaWVudEltcGw6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9uKAor
ICAgIEZyYW1lUG9saWN5RnVuY3Rpb24gZnVuY3Rpb24sCisgICAgY29uc3QgTmF2aWdhdGlvbkFj
dGlvbiYgYWN0aW9uLAorICAgIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwKKyAgICBQ
YXNzUmVmUHRyPEZvcm1TdGF0ZT4gZm9ybVN0YXRlLAorICAgIGNvbnN0IFN0cmluZyYgZnJhbWVO
YW1lKQoreworICAgIFdlYk5hdmlnYXRpb25Qb2xpY3kgbmF2aWdhdGlvblBvbGljeTsKKyAgICBp
ZiAoIWFjdGlvblNwZWNpZmllc05hdmlnYXRpb25Qb2xpY3koYWN0aW9uLCAmbmF2aWdhdGlvblBv
bGljeSkpCisgICAgICAgIG5hdmlnYXRpb25Qb2xpY3kgPSBXZWJOYXZpZ2F0aW9uUG9saWN5TmV3
Rm9yZWdyb3VuZFRhYjsKKworICAgIFBvbGljeUFjdGlvbiBwb2xpY3lBY3Rpb247CisgICAgaWYg
KG5hdmlnYXRpb25Qb2xpY3kgPT0gV2ViTmF2aWdhdGlvblBvbGljeURvd25sb2FkKQorICAgICAg
ICBwb2xpY3lBY3Rpb24gPSBQb2xpY3lEb3dubG9hZDsKKyAgICBlbHNlIHsKKyAgICAgICAgcG9s
aWN5QWN0aW9uID0gUG9saWN5VXNlOworCisgICAgICAgIC8vIFJlbWVtYmVyIHRoZSBkaXNwb3Np
dGlvbiBmb3Igd2hlbiBkaXNwYXRjaENyZWF0ZVBhZ2UgaXMgY2FsbGVkLiAgSXQgaXMKKyAgICAg
ICAgLy8gdW5mb3J0dW5hdGUgdGhhdCBXZWJDb3JlIGRvZXMgbm90IHByb3ZpZGUgdXMgd2l0aCBh
bnkgY29udGV4dCB3aGVuCisgICAgICAgIC8vIGNyZWF0aW5nIG9yIHNob3dpbmcgdGhlIG5ldyB3
aW5kb3cgdGhhdCB3b3VsZCBhbGxvdyB1cyB0byBhdm9pZCBoYXZpbmcKKyAgICAgICAgLy8gdG8g
a2VlcCB0aGlzIHN0YXRlLgorICAgICAgICBtX25leHROYXZpZ2F0aW9uUG9saWN5ID0gbmF2aWdh
dGlvblBvbGljeTsKKyAgICB9CisgICAgKG1fd2ViRnJhbWUtPmZyYW1lKCktPmxvYWRlcigpLT5w
b2xpY3lDaGVja2VyKCktPipmdW5jdGlvbikocG9saWN5QWN0aW9uKTsKK30KKwordm9pZCBGcmFt
ZUxvYWRlckNsaWVudEltcGw6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlv
bigKKyAgICBGcmFtZVBvbGljeUZ1bmN0aW9uIGZ1bmN0aW9uLAorICAgIGNvbnN0IE5hdmlnYXRp
b25BY3Rpb24mIGFjdGlvbiwKKyAgICBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsCisg
ICAgUGFzc1JlZlB0cjxGb3JtU3RhdGU+IGZvcm1TdGF0ZSkgeworICAgIFBvbGljeUFjdGlvbiBw
b2xpY3lBY3Rpb24gPSBQb2xpY3lJZ25vcmU7CisKKyAgICAvLyBJdCBpcyB2YWxpZCBmb3IgdGhp
cyBmdW5jdGlvbiB0byBiZSBpbnZva2VkIGluIGNvZGUgcGF0aHMgd2hlcmUgdGhlCisgICAgLy8g
dGhlIHdlYnZpZXcgaXMgY2xvc2VkLgorICAgIC8vIFRoZSBudWxsIGNoZWNrIGhlcmUgaXMgdG8g
Zml4IGEgY3Jhc2ggdGhhdCBzZWVtcyBzdHJhbmdlCisgICAgLy8gKHNlZSAtIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzU1NCkuCisgICAgaWYgKG1fd2ViRnJhbWUt
PmNsaWVudCgpICYmICFyZXF1ZXN0LnVybCgpLmlzTnVsbCgpKSB7CisgICAgICBXZWJOYXZpZ2F0
aW9uUG9saWN5IG5hdmlnYXRpb25Qb2xpY3kgPSBXZWJOYXZpZ2F0aW9uUG9saWN5Q3VycmVudFRh
YjsKKyAgICAgIGFjdGlvblNwZWNpZmllc05hdmlnYXRpb25Qb2xpY3koYWN0aW9uLCAmbmF2aWdh
dGlvblBvbGljeSk7CisKKyAgICAgIC8vIEdpdmUgdGhlIGRlbGVnYXRlIGEgY2hhbmNlIHRvIGNo
YW5nZSB0aGUgbmF2aWdhdGlvbiBwb2xpY3kuCisgICAgICBjb25zdCBXZWJEYXRhU291cmNlSW1w
bCogZHMgPSBtX3dlYkZyYW1lLT5wcm92aXNpb25hbERhdGFTb3VyY2VJbXBsKCk7CisgICAgICBp
ZiAoZHMpIHsKKyAgICAgICAgICBLVVJMIHVybCA9IGRzLT5yZXF1ZXN0KCkudXJsKCk7CisgICAg
ICAgICAgaWYgKHVybC5wcm90b2NvbElzKGJhY2tGb3J3YXJkTmF2aWdhdGlvblNjaGVtZSkpIHsK
KyAgICAgICAgICAgICAgaGFuZGxlQmFja0ZvcndhcmROYXZpZ2F0aW9uKHVybCk7CisgICAgICAg
ICAgICAgIG5hdmlnYXRpb25Qb2xpY3kgPSBXZWJOYXZpZ2F0aW9uUG9saWN5SWdub3JlOworICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIGJvb2wgaXNSZWRpcmVjdCA9IGRzLT5oYXNS
ZWRpcmVjdENoYWluKCk7CisKKyAgICAgICAgICAgICAgV2ViTmF2aWdhdGlvblR5cGUgd2VibmF2
VHlwZSA9CisgICAgICAgICAgICAgICAgICBXZWJEYXRhU291cmNlSW1wbDo6dG9XZWJOYXZpZ2F0
aW9uVHlwZShhY3Rpb24udHlwZSgpKTsKKworICAgICAgICAgICAgICBSZWZQdHI8Tm9kZT4gbm9k
ZTsKKyAgICAgICAgICAgICAgZm9yIChjb25zdCBFdmVudCogZXZlbnQgPSBhY3Rpb24uZXZlbnQo
KTsgZXZlbnQ7IGV2ZW50ID0gZXZlbnQtPnVuZGVybHlpbmdFdmVudCgpKSB7CisgICAgICAgICAg
ICAgICAgICBpZiAoZXZlbnQtPmlzTW91c2VFdmVudCgpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgTW91c2VFdmVudCogbW91c2VFdmVudCA9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PGNvbnN0IE1vdXNlRXZlbnQqPihldmVudCk7CisgICAgICAgICAgICAg
ICAgICAgICAgbm9kZSA9IG1fd2ViRnJhbWUtPmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5oaXRU
ZXN0UmVzdWx0QXRQb2ludCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbW91c2VFdmVudC0+
YWJzb2x1dGVMb2NhdGlvbigpLCBmYWxzZSkuaW5uZXJOb25TaGFyZWROb2RlKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgV2ViTm9kZSBvcmlnaW5hdGluZ05vZGUobm9kZSk7CisKKyAgICAg
ICAgICAgICAgbmF2aWdhdGlvblBvbGljeSA9IG1fd2ViRnJhbWUtPmNsaWVudCgpLT5kZWNpZGVQ
b2xpY3lGb3JOYXZpZ2F0aW9uKAorICAgICAgICAgICAgICAgICAgbV93ZWJGcmFtZSwgZHMtPnJl
cXVlc3QoKSwgd2VibmF2VHlwZSwgb3JpZ2luYXRpbmdOb2RlLAorICAgICAgICAgICAgICAgICAg
bmF2aWdhdGlvblBvbGljeSwgaXNSZWRpcmVjdCk7CisgICAgICAgICAgfQorICAgICAgfQorCisg
ICAgICBpZiAobmF2aWdhdGlvblBvbGljeSA9PSBXZWJOYXZpZ2F0aW9uUG9saWN5Q3VycmVudFRh
YikKKyAgICAgICAgICBwb2xpY3lBY3Rpb24gPSBQb2xpY3lVc2U7CisgICAgICBlbHNlIGlmIChu
YXZpZ2F0aW9uUG9saWN5ID09IFdlYk5hdmlnYXRpb25Qb2xpY3lEb3dubG9hZCkKKyAgICAgICAg
ICBwb2xpY3lBY3Rpb24gPSBQb2xpY3lEb3dubG9hZDsKKyAgICAgIGVsc2UgeworICAgICAgICAg
IGlmIChuYXZpZ2F0aW9uUG9saWN5ICE9IFdlYk5hdmlnYXRpb25Qb2xpY3lJZ25vcmUpIHsKKyAg
ICAgICAgICAgICAgV3JhcHBlZFJlc291cmNlUmVxdWVzdCB3ZWJyZXEocmVxdWVzdCk7CisgICAg
ICAgICAgICAgIG1fd2ViRnJhbWUtPmNsaWVudCgpLT5sb2FkVVJMRXh0ZXJuYWxseShtX3dlYkZy
YW1lLCB3ZWJyZXEsIG5hdmlnYXRpb25Qb2xpY3kpOworICAgICAgICAgIH0KKyAgICAgICAgICBw
b2xpY3lBY3Rpb24gPSBQb2xpY3lJZ25vcmU7CisgICAgICB9CisgICAgfQorCisgICAgKG1fd2Vi
RnJhbWUtPmZyYW1lKCktPmxvYWRlcigpLT5wb2xpY3lDaGVja2VyKCktPipmdW5jdGlvbikocG9s
aWN5QWN0aW9uKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEltcGw6OmNhbmNlbFBvbGlj
eUNoZWNrKCkKK3sKKyAgICAvLyBGSVhNRQorfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SW1w
bDo6ZGlzcGF0Y2hVbmFibGVUb0ltcGxlbWVudFBvbGljeShjb25zdCBSZXNvdXJjZUVycm9yJiBl
cnJvcikKK3sKKyAgICBtX3dlYkZyYW1lLT5jbGllbnQoKS0+dW5hYmxlVG9JbXBsZW1lbnRQb2xp
Y3lXaXRoRXJyb3IobV93ZWJGcmFtZSwgZXJyb3IpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xp
ZW50SW1wbDo6ZGlzcGF0Y2hXaWxsU3VibWl0Rm9ybShGcmFtZVBvbGljeUZ1bmN0aW9uIGZ1bmN0
aW9uLAorICAgIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPiBmb3JtU3RhdGUpCit7CisgICAgaWYgKG1f
d2ViRnJhbWUtPmNsaWVudCgpKQorICAgICAgICBtX3dlYkZyYW1lLT5jbGllbnQoKS0+d2lsbFN1
Ym1pdEZvcm0obV93ZWJGcmFtZSwgV2ViRm9ybUVsZW1lbnQoZm9ybVN0YXRlLT5mb3JtKCkpKTsK
KyAgICAobV93ZWJGcmFtZS0+ZnJhbWUoKS0+bG9hZGVyKCktPnBvbGljeUNoZWNrZXIoKS0+KmZ1
bmN0aW9uKShQb2xpY3lVc2UpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6ZGlz
cGF0Y2hEaWRMb2FkTWFpblJlc291cmNlKERvY3VtZW50TG9hZGVyKikKK3sKKyAgICAvLyBGSVhN
RQorfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6cmV2ZXJ0VG9Qcm92aXNpb25hbFN0
YXRlKERvY3VtZW50TG9hZGVyKikKK3sKKyAgICBtX2hhc1JlcHJlc2VudGF0aW9uID0gdHJ1ZTsK
K30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEltcGw6OnNldE1haW5Eb2N1bWVudEVycm9yKERv
Y3VtZW50TG9hZGVyKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKK3sKKyAgICBpZiAobV9wbHVnaW5X
aWRnZXQuZ2V0KCkpIHsKKyAgICAgICAgaWYgKG1fc2VudEluaXRpYWxSZXNwb25zZVRvUGx1Z2lu
KSB7CisgICAgICAgICAgICBtX3BsdWdpbldpZGdldC0+ZGlkRmFpbExvYWRpbmcoZXJyb3IpOwor
ICAgICAgICAgICAgbV9zZW50SW5pdGlhbFJlc3BvbnNlVG9QbHVnaW4gPSBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICBtX3BsdWdpbldpZGdldCA9IDA7CisgICAgfQorfQorCit2b2lkIEZyYW1l
TG9hZGVyQ2xpZW50SW1wbDo6cG9zdFByb2dyZXNzU3RhcnRlZE5vdGlmaWNhdGlvbigpCit7Cisg
ICAgV2ViVmlld0ltcGwqIHdlYnZpZXcgPSBtX3dlYkZyYW1lLT52aWV3SW1wbCgpOworICAgIGlm
ICh3ZWJ2aWV3ICYmIHdlYnZpZXctPmNsaWVudCgpKQorICAgICAgICB3ZWJ2aWV3LT5jbGllbnQo
KS0+ZGlkU3RhcnRMb2FkaW5nKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRJbXBsOjpw
b3N0UHJvZ3Jlc3NFc3RpbWF0ZUNoYW5nZWROb3RpZmljYXRpb24oKQoreworICAgIC8vIEZJWE1F
Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRJbXBsOjpwb3N0UHJvZ3Jlc3NGaW5pc2hlZE5v
dGlmaWNhdGlvbigpCit7CisgICAgLy8gRklYTUU6IHdoeSBtaWdodCB0aGUgd2VidmlldyBiZSBu
dWxsPyAgaHR0cDovL2IvMTIzNDQ2MQorICAgIFdlYlZpZXdJbXBsKiB3ZWJ2aWV3ID0gbV93ZWJG
cmFtZS0+dmlld0ltcGwoKTsKKyAgICBpZiAod2VidmlldyAmJiB3ZWJ2aWV3LT5jbGllbnQoKSkK
KyAgICAgICAgd2Vidmlldy0+Y2xpZW50KCktPmRpZFN0b3BMb2FkaW5nKCk7Cit9CisKK3ZvaWQg
RnJhbWVMb2FkZXJDbGllbnRJbXBsOjpzZXRNYWluRnJhbWVEb2N1bWVudFJlYWR5KGJvb2wgcmVh
ZHkpCit7CisgICAgLy8gRklYTUUKK30KKworLy8gQ3JlYXRlcyBhIG5ldyBjb25uZWN0aW9uIGFu
ZCBiZWdpbnMgZG93bmxvYWRpbmcgZnJvbSB0aGF0IChjb250cmFzdCB0aGlzCisvLyB3aXRoIHxk
b3dubG9hZHwpLgordm9pZCBGcmFtZUxvYWRlckNsaWVudEltcGw6OnN0YXJ0RG93bmxvYWQoY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIGlmIChtX3dlYkZyYW1lLT5jbGll
bnQoKSkgeworICAgICAgICBXcmFwcGVkUmVzb3VyY2VSZXF1ZXN0IHdlYnJlcShyZXF1ZXN0KTsK
KyAgICAgICAgbV93ZWJGcmFtZS0+Y2xpZW50KCktPmxvYWRVUkxFeHRlcm5hbGx5KAorICAgICAg
ICAgICAgbV93ZWJGcmFtZSwgd2VicmVxLCBXZWJOYXZpZ2F0aW9uUG9saWN5RG93bmxvYWQpOwor
ICAgIH0KK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEltcGw6OndpbGxDaGFuZ2VUaXRsZShE
b2N1bWVudExvYWRlciopCit7CisgICAgLy8gRklYTUUKK30KKwordm9pZCBGcmFtZUxvYWRlckNs
aWVudEltcGw6OmRpZENoYW5nZVRpdGxlKERvY3VtZW50TG9hZGVyKikKK3sKKyAgICAvLyBGSVhN
RQorfQorCisvLyBDYWxsZWQgd2hlbmV2ZXIgZGF0YSBpcyByZWNlaXZlZC4KK3ZvaWQgRnJhbWVM
b2FkZXJDbGllbnRJbXBsOjpjb21taXR0ZWRMb2FkKERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIGNv
bnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCit7CisgICAgaWYgKCFtX3BsdWdpbldpZGdldC5n
ZXQoKSkgeworICAgICAgICBpZiAobV93ZWJGcmFtZS0+Y2xpZW50KCkpIHsKKyAgICAgICAgICAg
IGJvb2wgcHJldmVudERlZmF1bHQgPSBmYWxzZTsKKyAgICAgICAgICAgIG1fd2ViRnJhbWUtPmNs
aWVudCgpLT5kaWRSZWNlaXZlRG9jdW1lbnREYXRhKG1fd2ViRnJhbWUsIGRhdGEsIGxlbmd0aCwg
cHJldmVudERlZmF1bHQpOworICAgICAgICAgICAgaWYgKCFwcmV2ZW50RGVmYXVsdCkKKyAgICAg
ICAgICAgICAgICBtX3dlYkZyYW1lLT5jb21taXREb2N1bWVudERhdGEoZGF0YSwgbGVuZ3RoKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIC8vIElmIHdlIGFyZSBzZW5kaW5nIGRhdGEgdG8gTWVk
aWFEb2N1bWVudCwgd2Ugc2hvdWxkIHN0b3AgaGVyZQorICAgIC8vIGFuZCBjYW5jZWwgdGhlIHJl
cXVlc3QuCisgICAgaWYgKG1fd2ViRnJhbWUtPmZyYW1lKCktPmRvY3VtZW50KCkKKyAgICAgICAg
JiYgbV93ZWJGcmFtZS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKS0+aXNNZWRpYURvY3VtZW50KCkpCisg
ICAgICAgIGxvYWRlci0+Y2FuY2VsTWFpblJlc291cmNlTG9hZChwbHVnaW5XaWxsSGFuZGxlTG9h
ZEVycm9yKGxvYWRlci0+cmVzcG9uc2UoKSkpOworCisgICAgLy8gVGhlIHBsdWdpbiB3aWRnZXQg
Y291bGQgaGF2ZSBiZWVuIGNyZWF0ZWQgaW4gdGhlIG1fd2ViRnJhbWUtPkRpZFJlY2VpdmVEYXRh
CisgICAgLy8gZnVuY3Rpb24uCisgICAgaWYgKG1fcGx1Z2luV2lkZ2V0LmdldCgpKSB7CisgICAg
ICAgIGlmICghbV9zZW50SW5pdGlhbFJlc3BvbnNlVG9QbHVnaW4pIHsKKyAgICAgICAgICAgIG1f
c2VudEluaXRpYWxSZXNwb25zZVRvUGx1Z2luID0gdHJ1ZTsKKyAgICAgICAgICAgIG1fcGx1Z2lu
V2lkZ2V0LT5kaWRSZWNlaXZlUmVzcG9uc2UoCisgICAgICAgICAgICAgICAgbV93ZWJGcmFtZS0+
ZnJhbWUoKS0+bG9hZGVyKCktPmFjdGl2ZURvY3VtZW50TG9hZGVyKCktPnJlc3BvbnNlKCkpOwor
ICAgICAgICB9CisgICAgICAgIG1fcGx1Z2luV2lkZ2V0LT5kaWRSZWNlaXZlRGF0YShkYXRhLCBs
ZW5ndGgpOworICAgIH0KK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEltcGw6OmZpbmlzaGVk
TG9hZGluZyhEb2N1bWVudExvYWRlciogZGwpCit7CisgICAgaWYgKG1fcGx1Z2luV2lkZ2V0Lmdl
dCgpKSB7CisgICAgICAgIG1fcGx1Z2luV2lkZ2V0LT5kaWRGaW5pc2hMb2FkaW5nKCk7CisgICAg
ICAgIG1fcGx1Z2luV2lkZ2V0ID0gMDsKKyAgICAgICAgbV9zZW50SW5pdGlhbFJlc3BvbnNlVG9Q
bHVnaW4gPSBmYWxzZTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBUaGlzIGlzIG5lY2Vzc2Fy
eSB0byBjcmVhdGUgYW4gZW1wdHkgZG9jdW1lbnQuIFNlZSBidWcgNjM0MDA0LgorICAgICAgICAv
LyBIb3dldmVyLCB3ZSBvbmx5IHdhbnQgdG8gZG8gdGhpcyBpZiBtYWtlUmVwcmVzZW50YXRpb24g
aGFzIGJlZW4gY2FsbGVkLCB0bworICAgICAgICAvLyBtYXRjaCB0aGUgYmVoYXZpb3Igb24gdGhl
IE1hYy4KKyAgICAgICAgaWYgKG1faGFzUmVwcmVzZW50YXRpb24pCisgICAgICAgICAgICBkbC0+
ZnJhbWVMb2FkZXIoKS0+c2V0RW5jb2RpbmcoIiIsIGZhbHNlKTsKKyAgICB9Cit9CisKK3ZvaWQg
RnJhbWVMb2FkZXJDbGllbnRJbXBsOjp1cGRhdGVHbG9iYWxIaXN0b3J5KCkKK3sKK30KKwordm9p
ZCBGcmFtZUxvYWRlckNsaWVudEltcGw6OnVwZGF0ZUdsb2JhbEhpc3RvcnlSZWRpcmVjdExpbmtz
KCkKK3sKK30KKworYm9vbCBGcmFtZUxvYWRlckNsaWVudEltcGw6OnNob3VsZEdvVG9IaXN0b3J5
SXRlbShIaXN0b3J5SXRlbSopIGNvbnN0Cit7CisgICAgLy8gRklYTUUKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEltcGw6OmRpZERpc3BsYXlJbnNlY3VyZUNv
bnRlbnQoKQoreworICAgIGlmIChtX3dlYkZyYW1lLT5jbGllbnQoKSkKKyAgICAgICAgbV93ZWJG
cmFtZS0+Y2xpZW50KCktPmRpZERpc3BsYXlJbnNlY3VyZUNvbnRlbnQobV93ZWJGcmFtZSk7Cit9
CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRJbXBsOjpkaWRSdW5JbnNlY3VyZUNvbnRlbnQoU2Vj
dXJpdHlPcmlnaW4qIG9yaWdpbikKK3sKKyAgICBpZiAobV93ZWJGcmFtZS0+Y2xpZW50KCkpCisg
ICAgICAgIG1fd2ViRnJhbWUtPmNsaWVudCgpLT5kaWRSdW5JbnNlY3VyZUNvbnRlbnQobV93ZWJG
cmFtZSwgV2ViU2VjdXJpdHlPcmlnaW4ob3JpZ2luKSk7Cit9CisKK1Jlc291cmNlRXJyb3IgRnJh
bWVMb2FkZXJDbGllbnRJbXBsOjpibG9ja2VkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikK
K3sKKyAgICAvLyBGSVhNRQorICAgIHJldHVybiBSZXNvdXJjZUVycm9yKCk7Cit9CisKK1Jlc291
cmNlRXJyb3IgRnJhbWVMb2FkZXJDbGllbnRJbXBsOjpjYW5jZWxsZWRFcnJvcihjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgaWYgKCFtX3dlYkZyYW1lLT5jbGllbnQoKSkK
KyAgICAgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoKTsKKworICAgIHJldHVybiBtX3dlYkZyYW1l
LT5jbGllbnQoKS0+Y2FuY2VsbGVkRXJyb3IoCisgICAgICAgIG1fd2ViRnJhbWUsIFdyYXBwZWRS
ZXNvdXJjZVJlcXVlc3QocmVxdWVzdCkpOworfQorCitSZXNvdXJjZUVycm9yIEZyYW1lTG9hZGVy
Q2xpZW50SW1wbDo6Y2Fubm90U2hvd1VSTEVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCkKK3sKKyAgICBpZiAoIW1fd2ViRnJhbWUtPmNsaWVudCgpKQorICAgICAgICByZXR1cm4g
UmVzb3VyY2VFcnJvcigpOworCisgICAgcmV0dXJuIG1fd2ViRnJhbWUtPmNsaWVudCgpLT5jYW5u
b3RIYW5kbGVSZXF1ZXN0RXJyb3IoCisgICAgICAgIG1fd2ViRnJhbWUsIFdyYXBwZWRSZXNvdXJj
ZVJlcXVlc3QocmVxdWVzdCkpOworfQorCitSZXNvdXJjZUVycm9yIEZyYW1lTG9hZGVyQ2xpZW50
SW1wbDo6aW50ZXJydXB0Rm9yUG9saWN5Q2hhbmdlRXJyb3IoCisgICAgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIHJldHVybiBSZXNvdXJjZUVycm9yKGludGVybmFsRXJy
b3JEb21haW4sIFBvbGljeUNoYW5nZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIHJl
cXVlc3QudXJsKCkuc3RyaW5nKCksIFN0cmluZygpKTsKK30KKworUmVzb3VyY2VFcnJvciBGcmFt
ZUxvYWRlckNsaWVudEltcGw6OmNhbm5vdFNob3dNSU1FVHlwZUVycm9yKGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmKQoreworICAgIC8vIEZJWE1FCisgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoKTsK
K30KKworUmVzb3VyY2VFcnJvciBGcmFtZUxvYWRlckNsaWVudEltcGw6OmZpbGVEb2VzTm90RXhp
c3RFcnJvcihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikKK3sKKyAgICAvLyBGSVhNRQorICAgIHJl
dHVybiBSZXNvdXJjZUVycm9yKCk7Cit9CisKK1Jlc291cmNlRXJyb3IgRnJhbWVMb2FkZXJDbGll
bnRJbXBsOjpwbHVnaW5XaWxsSGFuZGxlTG9hZEVycm9yKGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
KQoreworICAgIC8vIEZJWE1FCisgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoKTsKK30KKworYm9v
bCBGcmFtZUxvYWRlckNsaWVudEltcGw6OnNob3VsZEZhbGxCYWNrKGNvbnN0IFJlc291cmNlRXJy
b3ImIGVycm9yKQoreworICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHdlIGZhaWwg
dG8gbG9hZCB0aGUgVVJMIGZvciBhbiA8b2JqZWN0PiB0YWcKKyAgICAvLyB0aGF0IGhhcyBmYWxs
YmFjayBjb250ZW50IChjaGlsZCBlbGVtZW50cykgYW5kIGlzIGJlaW5nIGxvYWRlZCBhcyBhIGZy
YW1lLgorICAgIC8vIFRoZSBlcnJvciBwYXJhbWV0ZXIgaW5kaWNhdGVzIHRoZSByZWFzb24gZm9y
IHRoZSBsb2FkIGZhaWx1cmUuCisgICAgLy8gV2Ugc2hvdWxkIGxldCB0aGUgZmFsbGJhY2sgY29u
dGVudCBsb2FkIG9ubHkgaWYgdGhpcyB3YXNuJ3QgYSBjYW5jZWxsZWQKKyAgICAvLyByZXF1ZXN0
LgorICAgIC8vIE5vdGU6IFRoZSBtYWMgdmVyc2lvbiBhbHNvIGhhcyBhIGNhc2UgZm9yICJXZWJL
aXRFcnJvclBsdWdpbldpbGxIYW5kbGVMb2FkIgorICAgIFJlc291cmNlRXJyb3IgYyA9IGNhbmNl
bGxlZEVycm9yKFJlc291cmNlUmVxdWVzdCgpKTsKKyAgICByZXR1cm4gZXJyb3IuZXJyb3JDb2Rl
KCkgIT0gYy5lcnJvckNvZGUoKSB8fCBlcnJvci5kb21haW4oKSAhPSBjLmRvbWFpbigpOworfQor
Citib29sIEZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6Y2FuSGFuZGxlUmVxdWVzdChjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fd2ViRnJhbWUtPmNs
aWVudCgpLT5jYW5IYW5kbGVSZXF1ZXN0KAorICAgICAgICBtX3dlYkZyYW1lLCBXcmFwcGVkUmVz
b3VyY2VSZXF1ZXN0KHJlcXVlc3QpKTsKK30KKworYm9vbCBGcmFtZUxvYWRlckNsaWVudEltcGw6
OmNhblNob3dNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKSBjb25zdAoreworICAgIC8v
IFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB0byBkZXRlcm1pbmUgaWYgdGhlIG1lZGlhIHR5cGUgY2Fu
IGJlIHNob3duCisgICAgLy8gImludGVybmFsbHkiIChpLmUuIGluc2lkZSB0aGUgYnJvd3Nlcikg
cmVnYXJkbGVzcyBvZiB3aGV0aGVyIG9yIG5vdCB0aGUKKyAgICAvLyBicm93c2VyIG9yIGEgcGx1
Z2luIGlzIGRvaW5nIHRoZSByZW5kZXJpbmcuCisKKyAgICAvLyBtaW1lVHlwZSBzdHJpbmdzIGFy
ZSBzdXBwb3NlZCB0byBiZSBBU0NJSSwgYnV0IGlmIHRoZXkgYXJlIG5vdCBmb3Igc29tZQorICAg
IC8vIHJlYXNvbiwgdGhlbiBpdCBqdXN0IG1lYW5zIHRoYXQgdGhlIG1pbWUgdHlwZSB3aWxsIGZh
aWwgYWxsIG9mIHRoZXNlICJpcworICAgIC8vIHN1cHBvcnRlZCIgY2hlY2tzIGFuZCBnbyBkb3du
IHRoZSBwYXRoIG9mIGFuIHVuaGFuZGxlZCBtaW1lIHR5cGUuCisgICAgaWYgKHdlYktpdENsaWVu
dCgpLT5taW1lUmVnaXN0cnkoKS0+c3VwcG9ydHNNSU1FVHlwZShtaW1lVHlwZSkgPT0gV2ViTWlt
ZVJlZ2lzdHJ5OjpJc1N1cHBvcnRlZCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBJ
ZiBDaHJvbWUgaXMgc3RhcnRlZCB3aXRoIHRoZSAtLWRpc2FibGUtcGx1Z2lucyBzd2l0Y2gsIHBs
dWdpbkRhdGEgaXMgbnVsbC4KKyAgICBQbHVnaW5EYXRhKiBwbHVnaW5EYXRhID0gbV93ZWJGcmFt
ZS0+ZnJhbWUoKS0+cGFnZSgpLT5wbHVnaW5EYXRhKCk7CisKKyAgICAvLyBTZWUgaWYgdGhlIHR5
cGUgaXMgaGFuZGxlZCBieSBhbiBpbnN0YWxsZWQgcGx1Z2luLCBpZiBzbywgd2UgY2FuIHNob3cg
aXQuCisgICAgLy8gRklYTUU6IChodHRwOi8vYi8xMDg1NTI0KSBUaGlzIGlzIHRoZSBwbGFjZSB0
byBzdGljayBhIHByZWZlcmVuY2UgdG8KKyAgICAvLyAgICAgICAgZGlzYWJsZSBmdWxsIHBhZ2Ug
cGx1Z2lucyAob3B0aW9uYWxseSBmb3IgY2VydGFpbiB0eXBlcyEpCisgICAgcmV0dXJuICFtaW1l
VHlwZS5pc0VtcHR5KCkgJiYgcGx1Z2luRGF0YSAmJiBwbHVnaW5EYXRhLT5zdXBwb3J0c01pbWVU
eXBlKG1pbWVUeXBlKTsKK30KKworYm9vbCBGcmFtZUxvYWRlckNsaWVudEltcGw6OnJlcHJlc2Vu
dGF0aW9uRXhpc3RzRm9yVVJMU2NoZW1lKGNvbnN0IFN0cmluZyYpIGNvbnN0Cit7CisgICAgLy8g
RklYTUUKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1N0cmluZyBGcmFtZUxvYWRlckNsaWVudElt
cGw6OmdlbmVyYXRlZE1JTUVUeXBlRm9yVVJMU2NoZW1lKGNvbnN0IFN0cmluZyYgc2NoZW1lKSBj
b25zdAoreworICAgIC8vIFRoaXMgYXBwZWFycyB0byBnZW5lcmF0ZSBNSU1FIHR5cGVzIGZvciBw
cm90b2NvbCBoYW5kbGVycyB0aGF0IGFyZSBoYW5kbGVkCisgICAgLy8gaW50ZXJuYWxseS4gVGhl
IG9ubHkgcGxhY2UgSSBjYW4gZmluZCBpbiB0aGUgV2ViS2l0IGNvZGUgdGhhdCB1c2VzIHRoaXMK
KyAgICAvLyBmdW5jdGlvbiBpcyBXZWJWaWV3OjpyZWdpc3RlclZpZXdDbGFzcywgd2hlcmUgaXQg
aXMgdXNlZCBhcyBwYXJ0IG9mIHRoZQorICAgIC8vIHByb2Nlc3MgYnkgd2hpY2ggY3VzdG9tIHZp
ZXcgY2xhc3NlcyBmb3IgY2VydGFpbiBkb2N1bWVudCByZXByZXNlbnRhdGlvbnMKKyAgICAvLyBh
cmUgcmVnaXN0ZXJlZC4KKyAgICBTdHJpbmcgbWltZVR5cGUoIngtYXBwbGUtd2ViLWtpdC8iKTsK
KyAgICBtaW1lVHlwZS5hcHBlbmQoc2NoZW1lLmxvd2VyKCkpOworICAgIHJldHVybiBtaW1lVHlw
ZTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEltcGw6OmZyYW1lTG9hZENvbXBsZXRlZCgp
Cit7CisgICAgLy8gRklYTUU6IHRoZSBtYWMgcG9ydCBhbHNvIGNvbmRpdGlvbmFsbHkgY2FsbHMg
c2V0RHJhd3NCYWNrZ3JvdW5kOllFUyBvbgorICAgIC8vIGl0J3MgU2Nyb2xsVmlldyBoZXJlLgor
CisgICAgLy8gVGhpcyBjb21tZW50IGZyb20gdGhlIE1hYyBwb3J0OgorICAgIC8vIE5vdGU6IENh
biBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMuCisgICAgLy8gRXZlbiBpZiBhbHJlYWR5IGNvbXBs
ZXRlLCB3ZSBtaWdodCBoYXZlIHNldCBhIHByZXZpb3VzIGl0ZW0gb24gYSBmcmFtZSB0aGF0Cisg
ICAgLy8gZGlkbid0IGRvIGFueSBkYXRhIGxvYWRpbmcgb24gdGhlIHBhc3QgdHJhbnNhY3Rpb24u
IE1ha2Ugc3VyZSB0byBjbGVhciB0aGVzZSBvdXQuCisKKyAgICAvLyBGSVhNRTogc2V0UHJldmlv
dXNIaXN0b3J5SXRlbSgpIG5vIGxvbmdlciBleGlzdHMuIGh0dHA6Ly9jcmJ1Zy5jb20vODU2Ngor
ICAgIC8vIG1fd2ViRnJhbWUtPmZyYW1lKCktPmxvYWRlcigpLT5zZXRQcmV2aW91c0hpc3RvcnlJ
dGVtKDApOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6c2F2ZVZpZXdTdGF0ZVRv
SXRlbShIaXN0b3J5SXRlbSopCit7CisgICAgLy8gRklYTUUKK30KKwordm9pZCBGcmFtZUxvYWRl
ckNsaWVudEltcGw6OnJlc3RvcmVWaWV3U3RhdGUoKQoreworICAgIC8vIEZJWE1FOiBwcm9iYWJs
eSBzY3JvbGxzIHRvIGxhc3QgcG9zaXRpb24gd2hlbiB5b3UgZ28gYmFjayBvciBmb3J3YXJkCit9
CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRJbXBsOjpwcm92aXNpb25hbExvYWRTdGFydGVkKCkK
K3sKKyAgICAvLyBGSVhNRTogT24gbWFjLCB0aGlzIGRvZXMgdmFyaW91cyBjYWNoaW5nIHN0dWZm
Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRJbXBsOjpkaWRGaW5pc2hMb2FkKCkKK3sKKyAg
ICBPd25QdHI8V2ViUGx1Z2luTG9hZE9ic2VydmVyPiBvYnNlcnZlciA9IHBsdWdpbkxvYWRPYnNl
cnZlcigpOworICAgIGlmIChvYnNlcnZlcikKKyAgICAgICAgb2JzZXJ2ZXItPmRpZEZpbmlzaExv
YWRpbmcoKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEltcGw6OnByZXBhcmVGb3JEYXRh
U291cmNlUmVwbGFjZW1lbnQoKQoreworICAgIC8vIEZJWE1FCit9CisKK1Bhc3NSZWZQdHI8RG9j
dW1lbnRMb2FkZXI+IEZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6Y3JlYXRlRG9jdW1lbnRMb2FkZXIo
CisgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LAorICAgIGNvbnN0IFN1YnN0aXR1
dGVEYXRhJiBkYXRhKQoreworICAgIFJlZlB0cjxXZWJEYXRhU291cmNlSW1wbD4gZHMgPSBXZWJE
YXRhU291cmNlSW1wbDo6Y3JlYXRlKHJlcXVlc3QsIGRhdGEpOworICAgIGlmIChtX3dlYkZyYW1l
LT5jbGllbnQoKSkKKyAgICAgICAgbV93ZWJGcmFtZS0+Y2xpZW50KCktPmRpZENyZWF0ZURhdGFT
b3VyY2UobV93ZWJGcmFtZSwgZHMuZ2V0KCkpOworICAgIHJldHVybiBkcy5yZWxlYXNlKCk7Cit9
CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRJbXBsOjpzZXRUaXRsZShjb25zdCBTdHJpbmcmIHRp
dGxlLCBjb25zdCBLVVJMJiB1cmwpCit7CisgICAgLy8gRklYTUU6IGluZm9ybSBjb25zdW1lciBv
ZiBjaGFuZ2VzIHRvIHRoZSB0aXRsZS4KK30KKworU3RyaW5nIEZyYW1lTG9hZGVyQ2xpZW50SW1w
bDo6dXNlckFnZW50KGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICByZXR1cm4gd2ViS2l0Q2xpZW50
KCktPnVzZXJBZ2VudCh1cmwpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6c2F2
ZVBsYXRmb3JtRGF0YVRvQ2FjaGVkRnJhbWUoQ2FjaGVkRnJhbWUqKQoreworICAgIC8vIFRoZSBw
YWdlIGNhY2hlIHNob3VsZCBiZSBkaXNhYmxlZC4KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEltcGw6OnRyYW5zaXRpb25Ub0NvbW1pdHRlZEZy
b21DYWNoZWRGcmFtZShDYWNoZWRGcmFtZSopCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKKy8vIENhbGxlZCB3aGVuIHRoZSBGcmFtZUxvYWRlciBnb2VzIGludG8gYSBzdGF0ZSBp
biB3aGljaCBhIG5ldyBwYWdlIGxvYWQKKy8vIHdpbGwgb2NjdXIuCit2b2lkIEZyYW1lTG9hZGVy
Q2xpZW50SW1wbDo6dHJhbnNpdGlvblRvQ29tbWl0dGVkRm9yTmV3UGFnZSgpCit7CisgICAgbWFr
ZURvY3VtZW50VmlldygpOworfQorCitib29sIEZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6Y2FuQ2Fj
aGVQYWdlKCkgY29uc3QKK3sKKyAgICAvLyBTaW5jZSB3ZSBtYW5hZ2UgdGhlIGNhY2hlLCBhbHdh
eXMgcmVwb3J0IHRoaXMgcGFnZSBhcyBub24tY2FjaGVhYmxlIHRvCisgICAgLy8gRnJhbWVMb2Fk
ZXIuCisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBEb3dubG9hZGluZyBpcyBoYW5kbGVkIGlu
IHRoZSBicm93c2VyIHByb2Nlc3MsIG5vdCBXZWJLaXQuIElmIHdlIGdldCB0byB0aGlzCisvLyBw
b2ludCwgb3VyIGRvd25sb2FkIGRldGVjdGlvbiBjb2RlIGluIHRoZSBSZXNvdXJjZURpc3BhdGNo
ZXJIb3N0IGlzIGJyb2tlbiEKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRJbXBsOjpkb3dubG9hZChS
ZXNvdXJjZUhhbmRsZSogaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIGluaXRpYWxSZXF1ZXN0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmIHJlc3BvbnNlKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitQYXNzUmVm
UHRyPEZyYW1lPiBGcmFtZUxvYWRlckNsaWVudEltcGw6OmNyZWF0ZUZyYW1lKAorICAgIGNvbnN0
IEtVUkwmIHVybCwKKyAgICBjb25zdCBTdHJpbmcmIG5hbWUsCisgICAgSFRNTEZyYW1lT3duZXJF
bGVtZW50KiBvd25lckVsZW1lbnQsCisgICAgY29uc3QgU3RyaW5nJiByZWZlcnJlciwKKyAgICBi
b29sIGFsbG93c1Njcm9sbGluZywKKyAgICBpbnQgbWFyZ2luV2lkdGgsCisgICAgaW50IG1hcmdp
bkhlaWdodCkKK3sKKyAgICBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1lUmVxdWVzdChSZXNvdXJjZVJl
cXVlc3QodXJsLCByZWZlcnJlciksIG5hbWUpOworICAgIHJldHVybiBtX3dlYkZyYW1lLT5jcmVh
dGVDaGlsZEZyYW1lKGZyYW1lUmVxdWVzdCwgb3duZXJFbGVtZW50KTsKK30KKworUGFzc1JlZlB0
cjxXaWRnZXQ+IEZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6Y3JlYXRlUGx1Z2luKAorICAgIGNvbnN0
IEludFNpemUmIHNpemUsIC8vIEZJWE1FOiBob3cgZG8gd2UgdXNlIHRoaXM/CisgICAgSFRNTFBs
dWdJbkVsZW1lbnQqIGVsZW1lbnQsCisgICAgY29uc3QgS1VSTCYgdXJsLAorICAgIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLAorICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJh
bVZhbHVlcywKKyAgICBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLAorICAgIGJvb2wgbG9hZE1hbnVh
bGx5KQoreworI2lmICFQTEFURk9STShXSU5fT1MpCisgICAgLy8gV2ViQ29yZSBhc2tzIHVzIHRv
IG1ha2UgYSBwbHVnaW4gZXZlbiBpZiB3ZSBkb24ndCBoYXZlIGEKKyAgICAvLyByZWdpc3RlcmVk
IGhhbmRsZXIsIHdpdGggYSBjb21tZW50IHNheWluZyBpdCdzIHNvIHdlIGNhbiBkaXNwbGF5Cisg
ICAgLy8gdGhlIGJyb2tlbiBwbHVnaW4gaWNvbi4gIEluIENocm9taXVtLCB3ZSBub3JtYWxseSBy
ZWdpc3RlciBhCisgICAgLy8gZmFsbGJhY2sgcGx1Z2luIGhhbmRsZXIgdGhhdCBhbGxvd3MgeW91
IHRvIGluc3RhbGwgYSBtaXNzaW5nCisgICAgLy8gcGx1Z2luLiAgU2luY2Ugd2UgZG9uJ3QgeWV0
IGhhdmUgYSBkZWZhdWx0IHBsdWdpbiBoYW5kbGVyLCB3ZQorICAgIC8vIG5lZWQgdG8gcmV0dXJu
IG51bGwgaGVyZSByYXRoZXIgdGhhbiBnb2luZyB0aHJvdWdoIGFsbCB0aGUKKyAgICAvLyBwbHVn
aW4tY3JlYXRpb24gSVBDcyBvbmx5IHRvIGRpc2NvdmVyIHdlIGRvbid0IGhhdmUgYSBwbHVnaW4K
KyAgICAvLyByZWdpc3RlcmVkLCB3aGljaCBjYXVzZXMgYSBjcmFzaC4KKyAgICAvLyBGSVhNRTog
cmVtb3ZlIG1lIG9uY2Ugd2UgaGF2ZSBhIGRlZmF1bHQgcGx1Z2luLgorICAgIGlmIChvYmplY3RD
b250ZW50VHlwZSh1cmwsIG1pbWVUeXBlKSAhPSBPYmplY3RDb250ZW50TmV0c2NhcGVQbHVnaW4p
CisgICAgICAgIHJldHVybiAwOworI2VuZGlmCisKKyAgICBpZiAoIW1fd2ViRnJhbWUtPmNsaWVu
dCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFdlYlBsdWdpblBhcmFtcyBwYXJhbXM7Cisg
ICAgcGFyYW1zLnVybCA9IHVybDsKKyAgICBwYXJhbXMubWltZVR5cGUgPSBtaW1lVHlwZTsKKyAg
ICBwYXJhbXMuYXR0cmlidXRlTmFtZXMgPSBwYXJhbU5hbWVzOworICAgIHBhcmFtcy5hdHRyaWJ1
dGVWYWx1ZXMgPSBwYXJhbVZhbHVlczsKKyAgICBwYXJhbXMubG9hZE1hbnVhbGx5ID0gbG9hZE1h
bnVhbGx5OworCisgICAgV2ViUGx1Z2luKiB3ZWJQbHVnaW4gPSBtX3dlYkZyYW1lLT5jbGllbnQo
KS0+Y3JlYXRlUGx1Z2luKG1fd2ViRnJhbWUsIHBhcmFtcyk7CisgICAgaWYgKCF3ZWJQbHVnaW4p
CisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gVGhlIGNvbnRhaW5lciB0YWtlcyBvd25lcnNo
aXAgb2YgdGhlIFdlYlBsdWdpbi4KKyAgICBSZWZQdHI8V2ViUGx1Z2luQ29udGFpbmVySW1wbD4g
Y29udGFpbmVyID0KKyAgICAgICAgV2ViUGx1Z2luQ29udGFpbmVySW1wbDo6Y3JlYXRlKGVsZW1l
bnQsIHdlYlBsdWdpbik7CisKKyAgICBpZiAoIXdlYlBsdWdpbi0+aW5pdGlhbGl6ZShjb250YWlu
ZXIuZ2V0KCkpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIFRoZSBlbGVtZW50IG1pZ2h0
IGhhdmUgYmVlbiByZW1vdmVkIGR1cmluZyBwbHVnaW4gaW5pdGlhbGl6YXRpb24hCisgICAgaWYg
KCFlbGVtZW50LT5yZW5kZXJlcigpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBj
b250YWluZXI7Cit9CisKKy8vIFRoaXMgbWV0aG9kIGdldHMgY2FsbGVkIHdoZW4gYSBwbHVnaW4g
aXMgcHV0IGluIHBsYWNlIG9mIGh0bWwgY29udGVudAorLy8gKGUuZy4sIGFjcm9iYXQgcmVhZGVy
KS4KK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRJbXBsOjpyZWRpcmVjdERhdGFUb1BsdWdpbihXaWRn
ZXQqIHBsdWdpbldpZGdldCkKK3sKKyAgICBtX3BsdWdpbldpZGdldCA9IHN0YXRpY19jYXN0PFdl
YlBsdWdpbkNvbnRhaW5lckltcGwqPihwbHVnaW5XaWRnZXQpOworICAgIEFTU0VSVChtX3BsdWdp
bldpZGdldC5nZXQoKSk7Cit9CisKK1Bhc3NSZWZQdHI8V2lkZ2V0PiBGcmFtZUxvYWRlckNsaWVu
dEltcGw6OmNyZWF0ZUphdmFBcHBsZXRXaWRnZXQoCisgICAgY29uc3QgSW50U2l6ZSYgc2l6ZSwK
KyAgICBIVE1MQXBwbGV0RWxlbWVudCogZWxlbWVudCwKKyAgICBjb25zdCBLVVJMJiAvKiBiYXNl
VVJMICovLAorICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLAorICAgIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcykKK3sKKyAgICByZXR1cm4gY3JlYXRlUGx1Z2lu
KHNpemUsIGVsZW1lbnQsIEtVUkwoKSwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMsCisgICAgICAg
ICJhcHBsaWNhdGlvbi94LWphdmEtYXBwbGV0IiwgZmFsc2UpOworfQorCitPYmplY3RDb250ZW50
VHlwZSBGcmFtZUxvYWRlckNsaWVudEltcGw6Om9iamVjdENvbnRlbnRUeXBlKAorICAgIGNvbnN0
IEtVUkwmIHVybCwKKyAgICBjb25zdCBTdHJpbmcmIGV4cGxpY2l0TWltZVR5cGUpCit7CisgICAg
Ly8gVGhpcyBjb2RlIGlzIGJhc2VkIG9uIEFwcGxlJ3MgaW1wbGVtZW50YXRpb24gZnJvbQorICAg
IC8vIFdlYkNvcmVTdXBwb3J0L1dlYkZyYW1lQnJpZGdlLm1tLgorCisgICAgU3RyaW5nIG1pbWVU
eXBlID0gZXhwbGljaXRNaW1lVHlwZTsKKyAgICBpZiAobWltZVR5cGUuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIC8vIFRyeSB0byBndWVzcyB0aGUgTUlNRSB0eXBlIGJhc2VkIG9mZiB0aGUgZXh0ZW5z
aW9uLgorICAgICAgICBTdHJpbmcgZmlsZW5hbWUgPSB1cmwubGFzdFBhdGhDb21wb25lbnQoKTsK
KyAgICAgICAgaW50IGV4dGVuc2lvblBvcyA9IGZpbGVuYW1lLnJldmVyc2VGaW5kKCcuJyk7Cisg
ICAgICAgIGlmIChleHRlbnNpb25Qb3MgPj0gMCkKKyAgICAgICAgICAgIG1pbWVUeXBlID0gTUlN
RVR5cGVSZWdpc3RyeTo6Z2V0TUlNRVR5cGVGb3JQYXRoKHVybC5wYXRoKCkpOworCisgICAgICAg
IGlmIChtaW1lVHlwZS5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gT2JqZWN0Q29udGVu
dEZyYW1lOworICAgIH0KKworICAgIGlmIChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZElt
YWdlTUlNRVR5cGUobWltZVR5cGUpKQorICAgICAgICByZXR1cm4gT2JqZWN0Q29udGVudEltYWdl
OworCisgICAgLy8gSWYgQ2hyb21lIGlzIHN0YXJ0ZWQgd2l0aCB0aGUgLS1kaXNhYmxlLXBsdWdp
bnMgc3dpdGNoLCBwbHVnaW5EYXRhIGlzIDAuCisgICAgUGx1Z2luRGF0YSogcGx1Z2luRGF0YSA9
IG1fd2ViRnJhbWUtPmZyYW1lKCktPnBhZ2UoKS0+cGx1Z2luRGF0YSgpOworICAgIGlmIChwbHVn
aW5EYXRhICYmIHBsdWdpbkRhdGEtPnN1cHBvcnRzTWltZVR5cGUobWltZVR5cGUpKQorICAgICAg
ICByZXR1cm4gT2JqZWN0Q29udGVudE5ldHNjYXBlUGx1Z2luOworCisgICAgaWYgKE1JTUVUeXBl
UmVnaXN0cnk6OmlzU3VwcG9ydGVkTm9uSW1hZ2VNSU1FVHlwZShtaW1lVHlwZSkpCisgICAgICAg
IHJldHVybiBPYmplY3RDb250ZW50RnJhbWU7CisKKyAgICByZXR1cm4gT2JqZWN0Q29udGVudE5v
bmU7Cit9CisKK1N0cmluZyBGcmFtZUxvYWRlckNsaWVudEltcGw6Om92ZXJyaWRlTWVkaWFUeXBl
KCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRQorICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworYm9v
bCBGcmFtZUxvYWRlckNsaWVudEltcGw6OmFjdGlvblNwZWNpZmllc05hdmlnYXRpb25Qb2xpY3ko
CisgICAgY29uc3QgTmF2aWdhdGlvbkFjdGlvbiYgYWN0aW9uLAorICAgIFdlYk5hdmlnYXRpb25Q
b2xpY3kqIHBvbGljeSkKK3sKKyAgICBpZiAoKGFjdGlvbi50eXBlKCkgIT0gTmF2aWdhdGlvblR5
cGVMaW5rQ2xpY2tlZCkgfHwgIWFjdGlvbi5ldmVudCgpLT5pc01vdXNlRXZlbnQoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgTW91c2VFdmVudCogZXZlbnQgPSBzdGF0aWNf
Y2FzdDxjb25zdCBNb3VzZUV2ZW50Kj4oYWN0aW9uLmV2ZW50KCkpOworICAgIHJldHVybiBXZWJW
aWV3SW1wbDo6bmF2aWdhdGlvblBvbGljeUZyb21Nb3VzZUV2ZW50KAorICAgICAgICBldmVudC0+
YnV0dG9uKCksIGV2ZW50LT5jdHJsS2V5KCksIGV2ZW50LT5zaGlmdEtleSgpLCBldmVudC0+YWx0
S2V5KCksCisgICAgICAgIGV2ZW50LT5tZXRhS2V5KCksIHBvbGljeSk7Cit9CisKK3ZvaWQgRnJh
bWVMb2FkZXJDbGllbnRJbXBsOjpoYW5kbGVCYWNrRm9yd2FyZE5hdmlnYXRpb24oY29uc3QgS1VS
TCYgdXJsKQoreworICAgIEFTU0VSVCh1cmwucHJvdG9jb2xJcyhiYWNrRm9yd2FyZE5hdmlnYXRp
b25TY2hlbWUpKTsKKworICAgIGJvb2wgb2s7CisgICAgaW50IG9mZnNldCA9IHVybC5sYXN0UGF0
aENvbXBvbmVudCgpLnRvSW50U3RyaWN0KCZvayk7CisgICAgaWYgKCFvaykKKyAgICAgICAgcmV0
dXJuOworCisgICAgV2ViVmlld0ltcGwqIHdlYnZpZXcgPSBtX3dlYkZyYW1lLT52aWV3SW1wbCgp
OworICAgIGlmICh3ZWJ2aWV3LT5jbGllbnQoKSkKKyAgICAgICAgd2Vidmlldy0+Y2xpZW50KCkt
Pm5hdmlnYXRlQmFja0ZvcndhcmRTb29uKG9mZnNldCk7Cit9CisKK1Bhc3NPd25QdHI8V2ViUGx1
Z2luTG9hZE9ic2VydmVyPiBGcmFtZUxvYWRlckNsaWVudEltcGw6OnBsdWdpbkxvYWRPYnNlcnZl
cigpCit7CisgICAgV2ViRGF0YVNvdXJjZUltcGwqIGRzID0gV2ViRGF0YVNvdXJjZUltcGw6OmZy
b21Eb2N1bWVudExvYWRlcigKKyAgICAgICAgbV93ZWJGcmFtZS0+ZnJhbWUoKS0+bG9hZGVyKCkt
PmFjdGl2ZURvY3VtZW50TG9hZGVyKCkpOworICAgIHJldHVybiBkcy0+cmVsZWFzZVBsdWdpbkxv
YWRPYnNlcnZlcigpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dl
YktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmggYi9XZWJLaXQvY2hyb21p
dW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmQ1NTkyZjkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3Jj
L0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5oCkBAIC0wLDAgKzEsMjM0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBGcmFtZUxv
YWRlckNsaWVudEltcGxfaAorI2RlZmluZSBGcmFtZUxvYWRlckNsaWVudEltcGxfaAorCisvLyBG
SVhNRTogcmVtb3ZlIHRoaXMgcmVsYXRpdmUgcGF0aCBvbmNlIGNvbnN1bWVycyBmcm9tIGdsdWUg
YXJlIHJlbW92ZWQuCisjaW5jbHVkZSAiLi4vcHVibGljL1dlYk5hdmlnYXRpb25Qb2xpY3kuaCIK
KyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNs
dWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworCituYW1l
c3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViRnJhbWVJbXBsOworY2xhc3MgV2ViUGx1Z2luQ29u
dGFpbmVySW1wbDsKK2NsYXNzIFdlYlBsdWdpbkxvYWRPYnNlcnZlcjsKKworY2xhc3MgRnJhbWVM
b2FkZXJDbGllbnRJbXBsIDogcHVibGljIFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50IHsKK3B1
YmxpYzoKKyAgICBGcmFtZUxvYWRlckNsaWVudEltcGwoV2ViRnJhbWVJbXBsKiB3ZWJGcmFtZSk7
CisgICAgfkZyYW1lTG9hZGVyQ2xpZW50SW1wbCgpOworCisgICAgV2ViRnJhbWVJbXBsKiB3ZWJG
cmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2ViRnJhbWU7IH0KKworICAgIC8vIFdlYkNvcmU6OkZy
YW1lTG9hZGVyQ2xpZW50IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKworICAgIHZpcnR1YWwgdm9pZCBmcmFtZUxvYWRlckRlc3Ryb3llZCgpOworCisgICAg
Ly8gTm90aWZpZXMgdGhlIFdlYlZpZXcgZGVsZWdhdGUgdGhhdCB0aGUgSlMgd2luZG93IG9iamVj
dCBoYXMgYmVlbiBjbGVhcmVkLAorICAgIC8vIGdpdmluZyBpdCBhIGNoYW5jZSB0byBiaW5kIG5h
dGl2ZSBvYmplY3RzIHRvIHRoZSB3aW5kb3cgYmVmb3JlIHNjcmlwdAorICAgIC8vIHBhcnNpbmcg
YmVnaW5zLgorICAgIHZpcnR1YWwgdm9pZCB3aW5kb3dPYmplY3RDbGVhcmVkKCk7CisgICAgdmly
dHVhbCB2b2lkIGRvY3VtZW50RWxlbWVudEF2YWlsYWJsZSgpOworCisgICAgLy8gQSBmcmFtZSdz
IFY4IGNvbnRleHQgd2FzIGNyZWF0ZWQgb3IgZGVzdHJveWVkLgorICAgIHZpcnR1YWwgdm9pZCBk
aWRDcmVhdGVTY3JpcHRDb250ZXh0Rm9yRnJhbWUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRGVz
dHJveVNjcmlwdENvbnRleHRGb3JGcmFtZSgpOworCisgICAgLy8gQSBjb250ZXh0IHVudGllZCB0
byBhIGZyYW1lIHdhcyBjcmVhdGVkICh0aHJvdWdoIGV2YWx1YXRlSW5OZXdDb250ZXh0KS4KKyAg
ICAvLyBUaGlzIGNvbnRleHQgaXMgbm90IHRpZWQgdG8gdGhlIGxpZmV0aW1lIG9mIGl0cyBmcmFt
ZSwgYW5kIGlzIGRlc3Ryb3llZAorICAgIC8vIGluIGdhcmJhZ2UgY29sbGVjdGlvbi4KKyAgICB2
aXJ0dWFsIHZvaWQgZGlkQ3JlYXRlSXNvbGF0ZWRTY3JpcHRDb250ZXh0KCk7CisKKyAgICB2aXJ0
dWFsIGJvb2wgaGFzV2ViVmlldygpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBoYXNGcmFtZVZp
ZXcoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgbWFrZVJlcHJlc2VudGF0aW9uKFdlYkNvcmU6
OkRvY3VtZW50TG9hZGVyKik7CisgICAgdmlydHVhbCB2b2lkIGZvcmNlTGF5b3V0KCk7CisgICAg
dmlydHVhbCB2b2lkIGZvcmNlTGF5b3V0Rm9yTm9uSFRNTCgpOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRDb3BpZXNPblNjcm9sbCgpOworICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hlZEZyb21QYXJlbnQy
KCk7CisgICAgdmlydHVhbCB2b2lkIGRldGFjaGVkRnJvbVBhcmVudDMoKTsKKyAgICB2aXJ0dWFs
IHZvaWQgYXNzaWduSWRlbnRpZmllclRvSW5pdGlhbFJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVu
dGlmaWVyLCBXZWJDb3JlOjpEb2N1bWVudExvYWRlciosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCYpOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaFdpbGxTZW5kUmVxdWVzdChXZWJD
b3JlOjpEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVkaXJl
Y3RSZXNwb25zZSk7CisgICAgdmlydHVhbCBib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdl
KFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2Uo
V2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0
IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7CisgICAgdmlydHVhbCB2b2lkIGRp
c3BhdGNoRGlkQ2FuY2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoV2ViQ29yZTo6RG9jdW1lbnRM
b2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlJik7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkUmVjZWl2ZVJl
c3BvbnNlKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVy
LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgdmlydHVhbCB2b2lkIGRp
c3BhdGNoRGlkUmVjZWl2ZUNvbnRlbnRMZW5ndGgoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqLCB1
bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGludCBsZW5ndGhSZWNlaXZlZCk7CisgICAgdmlydHVh
bCB2b2lkIGRpc3BhdGNoRGlkRmluaXNoTG9hZGluZyhXZWJDb3JlOjpEb2N1bWVudExvYWRlcios
IHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcik7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlk
RmFpbExvYWRpbmcoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50
aWZpZXIsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKTsKKyAgICB2aXJ0dWFsIGJvb2wg
ZGlzcGF0Y2hEaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGUoV2ViQ29yZTo6RG9jdW1lbnRM
b2FkZXIqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlc3BvbnNlJiwgaW50IGxlbmd0aCk7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNo
RGlkTG9hZFJlc291cmNlQnlYTUxIdHRwUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIs
IGNvbnN0IFdlYkNvcmU6OlNjcmlwdFN0cmluZyYpOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRj
aERpZEhhbmRsZU9ubG9hZEV2ZW50cygpOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFJl
Y2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZCgpOworICAgIHZpcnR1YWwgdm9p
ZCBkaXNwYXRjaERpZENhbmNlbENsaWVudFJlZGlyZWN0KCk7CisgICAgdmlydHVhbCB2b2lkIGRp
c3BhdGNoV2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdChjb25zdCBXZWJDb3JlOjpLVVJMJiwgZG91
YmxlIGludGVydmFsLCBkb3VibGUgZmlyZURhdGUpOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRj
aERpZENoYW5nZUxvY2F0aW9uV2l0aGluUGFnZSgpOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRj
aFdpbGxDbG9zZSgpOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFJlY2VpdmVJY29uKCk7
CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkU3RhcnRQcm92aXNpb25hbExvYWQoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRSZWNlaXZlVGl0bGUoY29uc3QgV2ViQ29yZTo6U3Ry
aW5nJiB0aXRsZSk7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkQ29tbWl0TG9hZCgpOwor
ICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEZhaWxQcm92aXNpb25hbExvYWQoY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VFcnJvciYpOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEZhaWxM
b2FkKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlz
cGF0Y2hEaWRGaW5pc2hEb2N1bWVudExvYWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hE
aWRGaW5pc2hMb2FkKCk7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkRmlyc3RMYXlvdXQo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlv
dXQoKTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkZyYW1lKiBkaXNwYXRjaENyZWF0ZVBhZ2UoKTsK
KyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hTaG93KCk7CisgICAgdmlydHVhbCB2b2lkIGRpc3Bh
dGNoRGVjaWRlUG9saWN5Rm9yTUlNRVR5cGUoV2ViQ29yZTo6RnJhbWVQb2xpY3lGdW5jdGlvbiBm
dW5jdGlvbiwgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBtaW1lX3R5cGUsIGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCYpOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERlY2lkZVBvbGlj
eUZvck5ld1dpbmRvd0FjdGlvbihXZWJDb3JlOjpGcmFtZVBvbGljeUZ1bmN0aW9uIGZ1bmN0aW9u
LCBjb25zdCBXZWJDb3JlOjpOYXZpZ2F0aW9uQWN0aW9uJiBhY3Rpb24sIGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUGFzc1JlZlB0cjxXZWJDb3JlOjpGb3JtU3RhdGU+
IGZvcm1fc3RhdGUsIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgZnJhbWVfbmFtZSk7CisgICAgdmly
dHVhbCB2b2lkIGRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihXZWJDb3Jl
OjpGcmFtZVBvbGljeUZ1bmN0aW9uIGZ1bmN0aW9uLCBjb25zdCBXZWJDb3JlOjpOYXZpZ2F0aW9u
QWN0aW9uJiBhY3Rpb24sIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwg
UGFzc1JlZlB0cjxXZWJDb3JlOjpGb3JtU3RhdGU+IGZvcm1fc3RhdGUpOworICAgIHZpcnR1YWwg
dm9pZCBjYW5jZWxQb2xpY3lDaGVjaygpOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaFVuYWJs
ZVRvSW1wbGVtZW50UG9saWN5KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZGlzcGF0Y2hXaWxsU3VibWl0Rm9ybShXZWJDb3JlOjpGcmFtZVBvbGljeUZ1
bmN0aW9uLCBQYXNzUmVmUHRyPFdlYkNvcmU6OkZvcm1TdGF0ZT4pOworICAgIHZpcnR1YWwgdm9p
ZCBkaXNwYXRjaERpZExvYWRNYWluUmVzb3VyY2UoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqKTsK
KyAgICB2aXJ0dWFsIHZvaWQgcmV2ZXJ0VG9Qcm92aXNpb25hbFN0YXRlKFdlYkNvcmU6OkRvY3Vt
ZW50TG9hZGVyKik7CisgICAgdmlydHVhbCB2b2lkIHNldE1haW5Eb2N1bWVudEVycm9yKFdlYkNv
cmU6OkRvY3VtZW50TG9hZGVyKiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpOworICAg
IHZpcnR1YWwgdm9pZCB3aWxsQ2hhbmdlRXN0aW1hdGVkUHJvZ3Jlc3MoKSB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgZGlkQ2hhbmdlRXN0aW1hdGVkUHJvZ3Jlc3MoKSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgcG9zdFByb2dyZXNzU3RhcnRlZE5vdGlmaWNhdGlvbigpOworICAgIHZpcnR1YWwgdm9pZCBw
b3N0UHJvZ3Jlc3NFc3RpbWF0ZUNoYW5nZWROb3RpZmljYXRpb24oKTsKKyAgICB2aXJ0dWFsIHZv
aWQgcG9zdFByb2dyZXNzRmluaXNoZWROb3RpZmljYXRpb24oKTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0TWFpbkZyYW1lRG9jdW1lbnRSZWFkeShib29sKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnRE
b3dubG9hZChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgd2lsbENoYW5nZVRpdGxlKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKik7CisgICAgdmlydHVh
bCB2b2lkIGRpZENoYW5nZVRpdGxlKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKik7CisgICAgdmly
dHVhbCB2b2lkIGNvbW1pdHRlZExvYWQoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqLCBjb25zdCBj
aGFyKiwgaW50KTsKKyAgICB2aXJ0dWFsIHZvaWQgZmluaXNoZWRMb2FkaW5nKFdlYkNvcmU6OkRv
Y3VtZW50TG9hZGVyKik7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUdsb2JhbEhpc3RvcnkoKTsK
KyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlR2xvYmFsSGlzdG9yeVJlZGlyZWN0TGlua3MoKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgc2hvdWxkR29Ub0hpc3RvcnlJdGVtKFdlYkNvcmU6Okhpc3RvcnlJdGVt
KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGRpZERpc3BsYXlJbnNlY3VyZUNvbnRlbnQoKTsK
KyAgICB2aXJ0dWFsIHZvaWQgZGlkUnVuSW5zZWN1cmVDb250ZW50KFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luKik7CisgICAgdmlydHVhbCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yIGJsb2NrZWRFcnJv
cihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6
OlJlc291cmNlRXJyb3IgY2FuY2VsbGVkRXJyb3IoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0Jik7CisgICAgdmlydHVhbCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yIGNhbm5vdFNob3dVUkxF
cnJvcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICB2aXJ0dWFsIFdlYkNv
cmU6OlJlc291cmNlRXJyb3IgaW50ZXJydXB0Rm9yUG9saWN5Q2hhbmdlRXJyb3IoY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CisgICAgdmlydHVhbCBXZWJDb3JlOjpSZXNvdXJjZUVy
cm9yIGNhbm5vdFNob3dNSU1FVHlwZUVycm9yKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9u
c2UmKTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlJlc291cmNlRXJyb3IgZmlsZURvZXNOb3RFeGlz
dEVycm9yKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKTsKKyAgICB2aXJ0dWFsIFdl
YkNvcmU6OlJlc291cmNlRXJyb3IgcGx1Z2luV2lsbEhhbmRsZUxvYWRFcnJvcihjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgdmlydHVhbCBib29sIHNob3VsZEZhbGxCYWNr
KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKTsKKyAgICB2aXJ0dWFsIGJvb2wgY2FuSGFu
ZGxlUmVxdWVzdChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGJvb2wgY2FuU2hvd01JTUVUeXBlKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgTUlNRVR5
cGUpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCByZXByZXNlbnRhdGlvbkV4aXN0c0ZvclVSTFNj
aGVtZShjb25zdCBXZWJDb3JlOjpTdHJpbmcmIFVSTFNjaGVtZSkgY29uc3Q7CisgICAgdmlydHVh
bCBXZWJDb3JlOjpTdHJpbmcgZ2VuZXJhdGVkTUlNRVR5cGVGb3JVUkxTY2hlbWUoY29uc3QgV2Vi
Q29yZTo6U3RyaW5nJiBVUkxTY2hlbWUpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBmcmFtZUxv
YWRDb21wbGV0ZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2F2ZVZpZXdTdGF0ZVRvSXRlbShXZWJD
b3JlOjpIaXN0b3J5SXRlbSopOworICAgIHZpcnR1YWwgdm9pZCByZXN0b3JlVmlld1N0YXRlKCk7
CisgICAgdmlydHVhbCB2b2lkIHByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQoKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZGlkRmluaXNoTG9hZCgpOworICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlRm9yRGF0YVNv
dXJjZVJlcGxhY2VtZW50KCk7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OkRvY3Vt
ZW50TG9hZGVyPiBjcmVhdGVEb2N1bWVudExvYWRlcigKKyAgICAgICAgY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6U3Vic3RpdHV0ZURhdGEmKTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0VGl0bGUoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiB0aXRsZSwgY29uc3Qg
V2ViQ29yZTo6S1VSTCYpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6U3RyaW5nIHVzZXJBZ2VudChj
b25zdCBXZWJDb3JlOjpLVVJMJik7CisgICAgdmlydHVhbCB2b2lkIHNhdmVQbGF0Zm9ybURhdGFU
b0NhY2hlZEZyYW1lKFdlYkNvcmU6OkNhY2hlZEZyYW1lKik7CisgICAgdmlydHVhbCB2b2lkIHRy
YW5zaXRpb25Ub0NvbW1pdHRlZEZyb21DYWNoZWRGcmFtZShXZWJDb3JlOjpDYWNoZWRGcmFtZSop
OworICAgIHZpcnR1YWwgdm9pZCB0cmFuc2l0aW9uVG9Db21taXR0ZWRGb3JOZXdQYWdlKCk7Cisg
ICAgdmlydHVhbCBib29sIGNhbkNhY2hlUGFnZSgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBk
b3dubG9hZCgKKyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqLCBjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmLAorICAgICAgICBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmIGluaXRpYWxSZXF1ZXN0LAorICAgICAgICBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3Bv
bnNlJik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OkZyYW1lPiBjcmVhdGVGcmFt
ZSgKKyAgICAgICAgY29uc3QgV2ViQ29yZTo6S1VSTCYgdXJsLCBjb25zdCBXZWJDb3JlOjpTdHJp
bmcmIG5hbWUsCisgICAgICAgIFdlYkNvcmU6OkhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJF
bGVtZW50LAorICAgICAgICBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIHJlZmVycmVyLCBib29sIGFs
bG93c1Njcm9sbGluZywKKyAgICAgICAgaW50IG1hcmdpbldpZHRoLCBpbnQgbWFyZ2luSGVpZ2h0
KTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6V2lkZ2V0PiBjcmVhdGVQbHVnaW4o
CisgICAgICAgIGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBXZWJDb3JlOjpIVE1MUGx1Z0luRWxl
bWVudCosIGNvbnN0IFdlYkNvcmU6OktVUkwmLAorICAgICAgICBjb25zdCBWZWN0b3I8V2ViQ29y
ZTo6U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpTdHJpbmc+JiwKKyAgICAgICAgY29u
c3QgV2ViQ29yZTo6U3RyaW5nJiwgYm9vbCBsb2FkTWFudWFsbHkpOworICAgIHZpcnR1YWwgdm9p
ZCByZWRpcmVjdERhdGFUb1BsdWdpbihXZWJDb3JlOjpXaWRnZXQqIHBsdWdpbldpZGdldCk7Cisg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OldpZGdldD4gY3JlYXRlSmF2YUFwcGxldFdp
ZGdldCgKKyAgICAgICAgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsCisgICAgICAgIFdlYkNvcmU6
OkhUTUxBcHBsZXRFbGVtZW50KiwKKyAgICAgICAgY29uc3QgV2ViQ29yZTo6S1VSTCYgLyogYmFz
ZV91cmwgKi8sCisgICAgICAgIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpTdHJpbmc+JiBwYXJhbU5h
bWVzLAorICAgICAgICBjb25zdCBWZWN0b3I8V2ViQ29yZTo6U3RyaW5nPiYgcGFyYW1WYWx1ZXMp
OworICAgIHZpcnR1YWwgV2ViQ29yZTo6T2JqZWN0Q29udGVudFR5cGUgb2JqZWN0Q29udGVudFR5
cGUoCisgICAgICAgIGNvbnN0IFdlYkNvcmU6OktVUkwmIHVybCwgY29uc3QgV2ViQ29yZTo6U3Ry
aW5nJiBtaW1lVHlwZSk7CisgICAgdmlydHVhbCBXZWJDb3JlOjpTdHJpbmcgb3ZlcnJpZGVNZWRp
YVR5cGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUGVyZm9ybUZpcnN0TmF2aWdhdGlv
bigpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckZvckljb25Ob3RpZmljYXRpb24o
Ym9vbCBsaXN0ZW4gPSB0cnVlKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlU2Nyb2xsT2Zm
c2V0KCk7CisgICAgdmlydHVhbCBib29sIGFsbG93SmF2YVNjcmlwdChib29sIGVuYWJsZWRQZXJT
ZXR0aW5ncyk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBtYWtlRG9jdW1lbnRWaWV3KCk7CisKKyAg
ICAvLyBHaXZlbiBhIE5hdmlnYXRpb25BY3Rpb24sIGRldGVybWluZSB0aGUgYXNzb2NpYXRlZCBX
ZWJOYXZpZ2F0aW9uUG9saWN5LgorICAgIC8vIEZvciBleGFtcGxlLCBhIG1pZGRsZSBjbGljayBt
ZWFucyAib3BlbiBpbiBiYWNrZ3JvdW5kIHRhYiIuCisgICAgc3RhdGljIGJvb2wgYWN0aW9uU3Bl
Y2lmaWVzTmF2aWdhdGlvblBvbGljeSgKKyAgICAgICAgY29uc3QgV2ViQ29yZTo6TmF2aWdhdGlv
bkFjdGlvbiYgYWN0aW9uLCBXZWJOYXZpZ2F0aW9uUG9saWN5KiBwb2xpY3kpOworCisgICAgLy8g
Q2FsbGVkIHdoZW4gYSBkdW1teSBiYWNrLWZvcndhcmQgbmF2aWdhdGlvbiBpcyBpbnRlcmNlcHRl
ZC4KKyAgICB2b2lkIGhhbmRsZUJhY2tGb3J3YXJkTmF2aWdhdGlvbihjb25zdCBXZWJDb3JlOjpL
VVJMJik7CisKKyAgICBQYXNzT3duUHRyPFdlYlBsdWdpbkxvYWRPYnNlcnZlcj4gcGx1Z2luTG9h
ZE9ic2VydmVyKCk7CisKKyAgICAvLyBUaGUgV2ViRnJhbWUgdGhhdCBvd25zIHRoaXMgb2JqZWN0
IGFuZCBtYW5hZ2VzIGl0cyBsaWZldGltZS4gVGhlcmVmb3JlLAorICAgIC8vIHRoZSB3ZWIgZnJh
bWUgb2JqZWN0IGlzIGd1YXJhbnRlZWQgdG8gZXhpc3QuCisgICAgV2ViRnJhbWVJbXBsKiBtX3dl
YkZyYW1lOworCisgICAgLy8gVHJ1ZSBpZiBtYWtlUmVwcmVzZW50YXRpb24gd2FzIGNhbGxlZC4g
IFdlIGRvbid0IGFjdHVhbGx5IGhhdmUgYSBjb25jZXB0CisgICAgLy8gb2YgYSAicmVwcmVzZW50
YXRpb24iLCBidXQgd2UgbmVlZCB0byBrbm93IHdoZW4gd2UncmUgZXhwZWN0ZWQgdG8gaGF2ZSBv
bmUuCisgICAgLy8gU2VlIGZpbmlzaGVkTG9hZGluZygpLgorICAgIGJvb2wgbV9oYXNSZXByZXNl
bnRhdGlvbjsKKworICAgIC8vIFVzZWQgdG8gaGVscCB0cmFjayBjbGllbnQgcmVkaXJlY3RzLiBX
aGVuIGEgcHJvdmlzaW9uYWwgbG9hZCBzdGFydHMsIGl0CisgICAgLy8gaGFzIG5vIHJlZGlyZWN0
cyBpbiBpdHMgY2hhaW4uIEJ1dCBpbiB0aGUgY2FzZSBvZiBjbGllbnQgcmVkaXJlY3RzLCB3ZSB3
YW50CisgICAgLy8gdG8gYWRkIHRoYXQgaW5pdGlhbCBsb2FkIGFzIGEgcmVkaXJlY3QuIFdoZW4g
d2UgZ2V0IGEgbmV3IHByb3Zpc2lvbmFsIGxvYWQKKyAgICAvLyBhbmQgdGhlIGRlc3QgVVJMIG1h
dGNoZXMgdGhhdCBsb2FkLCB3ZSBrbm93IHRoYXQgaXQgd2FzIHRoZSByZXN1bHQgb2YgYQorICAg
IC8vIHByZXZpb3VzIGNsaWVudCByZWRpcmVjdCBhbmQgdGhlIHNvdXJjZSBzaG91bGQgYmUgYWRk
ZWQgYXMgYSByZWRpcmVjdC4KKyAgICAvLyBCb3RoIHNob3VsZCBiZSBlbXB0eSBpZiB1bnVzZWQu
CisgICAgV2ViQ29yZTo6S1VSTCBtX2V4cGVjdGVkQ2xpZW50UmVkaXJlY3RTcmM7CisgICAgV2Vi
Q29yZTo6S1VSTCBtX2V4cGVjdGVkQ2xpZW50UmVkaXJlY3REZXN0OworCisgICAgLy8gQ29udGFp
bnMgYSBwb2ludGVyIHRvIHRoZSBwbHVnaW4gd2lkZ2V0LgorICAgIFJlZlB0cjxXZWJQbHVnaW5D
b250YWluZXJJbXBsPiBtX3BsdWdpbldpZGdldDsKKworICAgIC8vIEluZGljYXRlcyBpZiB3ZSBu
ZWVkIHRvIHNlbmQgb3ZlciB0aGUgaW5pdGlhbCBub3RpZmljYXRpb24gdG8gdGhlIHBsdWdpbgor
ICAgIC8vIHdoaWNoIHNwZWNpZmllcyB0aGF0IHRoZSBwbHVnaW4gc2hvdWxkIGJlIHJlYWR5IHRv
IGFjY2VwdCBkYXRhLgorICAgIGJvb2wgbV9zZW50SW5pdGlhbFJlc3BvbnNlVG9QbHVnaW47CisK
KyAgICAvLyBUaGUgbmF2aWdhdGlvbiBwb2xpY3kgdG8gdXNlIGZvciB0aGUgbmV4dCBjYWxsIHRv
IGRpc3BhdGNoQ3JlYXRlUGFnZS4KKyAgICBXZWJOYXZpZ2F0aW9uUG9saWN5IG1fbmV4dE5hdmln
YXRpb25Qb2xpY3k7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42836</attachid>
            <date>2009-11-09 19:00:41 -0800</date>
            <delta_ts>2009-11-10 10:35:06 -0800</delta_ts>
            <desc>Up-streaming Chromium API src files: GraphicContext3D...MediaPlaterPrivateChromium</desc>
            <filename>bug-31276-20091109190039.patch</filename>
            <type>text/plain</type>
            <size>112591</size>
            <attacher name="Yaar Schnitman">yaar</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IDE4NjZmODUuLjkyZDIxMzggMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMiw2ICsy
LDI0MiBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgogCisgICAgICAg
IFVwLXN0cmVhbWluZyBDaHJvbWl1bSBBUEkgc3JjIGZpbGVzOiBHcmFwaGljQ29udGV4dDNELi4u
TWVkaWFQbGF0ZXJQcml2YXRlQ2hyb21pdW0KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzEyNzYKKworICAgICAgICAqIHNyYy9HcmFwaGljc0NvbnRl
eHQzRC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbDo6KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OlZl
cnRleEF0dHJpYlBvaW50ZXJTdGF0ZTo6VmVydGV4QXR0cmliUG9pbnRlclN0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OnRyeUxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0RJbnRlcm5hbDo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp+R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpjaGVja0Vycm9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6Om1ha2VDb250
ZXh0Q3VycmVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFs
OjpwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNESW50ZXJuYWw6OnBsYXRmb3JtVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpj
cmVhdGVUZXh0dXJlT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWw6OnJlc2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJ
bnRlcm5hbDo6ZmxpcFZlcnRpY2FsbHkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbDo6YmVnaW5QYWludCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzREludGVybmFsOjp2YWxpZGF0ZVRleHR1cmVUYXJnZXQpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6dmFsaWRhdGVUZXh0dXJlUGFyYW1ldGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmFjdGl2ZVRleHR1
cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YmluZEJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpiaW5k
VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpi
dWZmZXJEYXRhSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVy
bmFsOjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6dmVydGV4QXR0cmliUG9pbnRlcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp2aWV3cG9ydElt
cGwpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1HcmFwaGljc0NvbnRl
eHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1UZXh0
dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjaGVja0Vycm9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjptYWtlQ29udGV4dEN1cnJlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGUpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJlZ2luUGFpbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmVuZFBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpzaXplSW5CeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6Y3JlYXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpjcmVhdGVGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6Y3JlYXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6Y3JlYXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpjcmVhdGVTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OmRlbGV0ZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGVs
ZXRlRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRl
bGV0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0
ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGVs
ZXRlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVU
ZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjphY3RpdmVUZXh0
dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5kQXR0cmliTG9j
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRCdWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRUZXh0dXJlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJTdWJEYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZXRhY2hTaGFkZXIpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZHJhd0FycmF5cyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZHJhd0VsZW1lbnRzKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2VuZXJhdGVNaXBtYXApOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZUF0dHJpYik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlVW5pZm9ybSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0cmliTG9jYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEJvb2xlYW4pOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEJvb2xlYW52KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRCdWZmZXJQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRCdWZmZXJQYXJhbWV0ZXJpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0RXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmdldEZsb2F0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpnZXRGbG9hdHYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcmkpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlZ2VyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlZ2Vydik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbWkpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW1pdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbUluZm9Mb2cpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcmkpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJpKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJpdik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVySW5mb0xvZyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyU291cmNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRTdHJpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcmYpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcmZ2KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJpdik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybWYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1mdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybWkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmdldFVuaWZvcm1pdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0VmVydGV4QXR0cmliaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0VmVydGV4QXR0cmliaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYk9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6aXNCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OmlzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
aXNGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNQ
cm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc1JlbmRlcmJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNTaGFkZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmlzVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGl4ZWxTdG9yZWkpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxlcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OnVubXVs
dGlwbHlBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjp0ZXhJbWFnZTJESGVscGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp0ZXhTdWJJbWFnZTJEKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWZ2KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWl2KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjp1bmlmb3JtMml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjp1bmlmb3JtM2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1
bmlmb3JtM2l2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3Jt
NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGl2KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4MmZ2KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4M2Z2KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4NGZ2KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIxZnYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjJmdik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliM2Z2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0ZnYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYlBvaW50ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZpZXdwb3J0KToKKyAgICAgICAg
KiBzcmMvSW5zcGVjdG9yQ2xpZW50SW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpJ
bnNwZWN0b3JDbGllbnRJbXBsOjpJbnNwZWN0b3JDbGllbnRJbXBsKToKKyAgICAgICAgKFdlYktp
dDo6SW5zcGVjdG9yQ2xpZW50SW1wbDo6fkluc3BlY3RvckNsaWVudEltcGwpOgorICAgICAgICAo
V2ViS2l0OjpJbnNwZWN0b3JDbGllbnRJbXBsOjppbnNwZWN0b3JEZXN0cm95ZWQpOgorICAgICAg
ICAoV2ViS2l0OjpJbnNwZWN0b3JDbGllbnRJbXBsOjpjcmVhdGVQYWdlKToKKyAgICAgICAgKFdl
YktpdDo6SW5zcGVjdG9yQ2xpZW50SW1wbDo6c2hvd1dpbmRvdyk6CisgICAgICAgIChXZWJLaXQ6
Okluc3BlY3RvckNsaWVudEltcGw6OmNsb3NlV2luZG93KToKKyAgICAgICAgKFdlYktpdDo6SW5z
cGVjdG9yQ2xpZW50SW1wbDo6d2luZG93VmlzaWJsZSk6CisgICAgICAgIChXZWJLaXQ6Okluc3Bl
Y3RvckNsaWVudEltcGw6OmF0dGFjaFdpbmRvdyk6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3Rv
ckNsaWVudEltcGw6OmRldGFjaFdpbmRvdyk6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckNs
aWVudEltcGw6OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KToKKyAgICAgICAgKFdlYktpdDo6aW52
YWxpZGF0ZU5vZGVCb3VuZGluZ1JlY3QpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JDbGll
bnRJbXBsOjpoaWdobGlnaHQpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JDbGllbnRJbXBs
OjpoaWRlSGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yQ2xpZW50SW1wbDo6
aW5zcGVjdGVkVVJMQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckNsaWVudElt
cGw6OmxvY2FsaXplZFN0cmluZ3NVUkwpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JDbGll
bnRJbXBsOjpoaWRkZW5QYW5lbHMpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JDbGllbnRJ
bXBsOjpwb3B1bGF0ZVNldHRpbmcpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JDbGllbnRJ
bXBsOjpzdG9yZVNldHRpbmcpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JDbGllbnRJbXBs
OjpyZW1vdmVTZXR0aW5nKToKKyAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yQ2xpZW50SW1wbDo6
aW5zcGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCk6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3Rv
ckNsaWVudEltcGw6OmxvYWRTZXR0aW5ncyk6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckNs
aWVudEltcGw6OnNhdmVTZXR0aW5ncyk6CisgICAgICAgICogc3JjL0luc3BlY3RvckNsaWVudElt
cGwuaDogQWRkZWQuCisgICAgICAgICogc3JjL0xvY2FsaXplZFN0cmluZ3MuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OnF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OnNlYXJjaGFibGVJ
bmRleEludHJvZHVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpzdWJtaXRCdXR0b25EZWZhdWx0
TGFiZWwpOgorICAgICAgICAoV2ViQ29yZTo6aW5wdXRFbGVtZW50QWx0VGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpyZXNldEJ1dHRvbkRlZmF1bHRMYWJlbCk6CisgICAgICAgIChXZWJDb3JlOjpm
aWxlQnV0dG9uQ2hvb3NlRmlsZUxhYmVsKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbGVCdXR0b25O
b0ZpbGVTZWxlY3RlZExhYmVsKToKKyAgICAgICAgKFdlYkNvcmU6OnNlYXJjaE1lbnVOb1JlY2Vu
dFNlYXJjaGVzVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpzZWFyY2hNZW51UmVjZW50U2VhcmNo
ZXNUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OnNlYXJjaE1lbnVDbGVhclJlY2VudFNlYXJjaGVz
VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpBWFdlYkFyZWFUZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OkFYTGlua1RleHQpOgorICAgICAgICAoV2ViQ29yZTo6QVhMaXN0TWFya2VyVGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBWEltYWdlTWFwVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpBWEhl
YWRpbmdUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkFYRGVmaW5pdGlvbkxpc3RUZXJtVGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpBWERlZmluaXRpb25MaXN0RGVmaW5pdGlvblRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6QVhCdXR0b25BY3Rpb25WZXJiKToKKyAgICAgICAgKFdlYkNvcmU6OkFY
UmFkaW9CdXR0b25BY3Rpb25WZXJiKToKKyAgICAgICAgKFdlYkNvcmU6OkFYVGV4dEZpZWxkQWN0
aW9uVmVyYik6CisgICAgICAgIChXZWJDb3JlOjpBWENoZWNrZWRDaGVja0JveEFjdGlvblZlcmIp
OgorICAgICAgICAoV2ViQ29yZTo6QVhVbmNoZWNrZWRDaGVja0JveEFjdGlvblZlcmIpOgorICAg
ICAgICAoV2ViQ29yZTo6QVhMaW5rQWN0aW9uVmVyYik6CisgICAgICAgIChXZWJDb3JlOjptdWx0
aXBsZUZpbGVVcGxvYWRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OnVua25vd25GaWxlU2l6ZVRl
eHQpOgorICAgICAgICAoV2ViQ29yZTo6a2V5Z2VuTWVudUhpZ2hHcmFkZUtleVNpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6a2V5Z2VuTWVudU1lZGl1bUdyYWRlS2V5U2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjppbWFnZVRpdGxlKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRh
Z09wZW5MaW5rSW5OZXdXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVt
VGFnRG93bmxvYWRMaW5rVG9EaXNrKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRl
bVRhZ0NvcHlMaW5rVG9DbGlwYm9hcmQpOgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJ
dGVtVGFnT3BlbkltYWdlSW5OZXdXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1l
bnVJdGVtVGFnRG93bmxvYWRJbWFnZVRvRGlzayk6CisgICAgICAgIChXZWJDb3JlOjpjb250ZXh0
TWVudUl0ZW1UYWdDb3B5SW1hZ2VUb0NsaXBib2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpjb250
ZXh0TWVudUl0ZW1UYWdPcGVuRnJhbWVJbk5ld1dpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpj
b250ZXh0TWVudUl0ZW1UYWdDb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRl
bVRhZ0dvQmFjayk6CisgICAgICAgIChXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdHb0Zvcndh
cmQpOgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnU3RvcCk6CisgICAgICAg
IChXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdSZWxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6
Y29udGV4dE1lbnVJdGVtVGFnQ3V0KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRl
bVRhZ1Bhc3RlKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ05vR3Vlc3Nl
c0ZvdW5kKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0lnbm9yZVNwZWxs
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0xlYXJuU3BlbGxpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnU2VhcmNoV2ViKToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0xvb2tVcEluRGljdGlvbmFyeSk6CisgICAg
ICAgIChXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdPcGVuTGluayk6CisgICAgICAgIChXZWJD
b3JlOjpjb250ZXh0TWVudUl0ZW1UYWdJZ25vcmVHcmFtbWFyKToKKyAgICAgICAgKFdlYkNvcmU6
OmNvbnRleHRNZW51SXRlbVRhZ1NwZWxsaW5nTWVudSk6CisgICAgICAgIChXZWJDb3JlOjpjb250
ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRN
ZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmdXaGlsZVR5cGluZyk6CisgICAgICAgIChXZWJDb3JlOjpj
b250ZXh0TWVudUl0ZW1UYWdDaGVja0dyYW1tYXJXaXRoU3BlbGxpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6Y29udGV4dE1lbnVJdGVtVGFnRm9udE1lbnUpOgorICAgICAgICAoV2ViQ29yZTo6Y29u
dGV4dE1lbnVJdGVtVGFnQm9sZCk6CisgICAgICAgIChXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1U
YWdJdGFsaWMpOgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnVW5kZXJsaW5l
KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ091dGxpbmUpOgorICAgICAg
ICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnV3JpdGluZ0RpcmVjdGlvbk1lbnUpOgorICAg
ICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnVGV4dERpcmVjdGlvbk1lbnUpOgorICAg
ICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnRGVmYXVsdERpcmVjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdMZWZ0VG9SaWdodCk6CisgICAgICAgIChX
ZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdSaWdodFRvTGVmdCk6CisgICAgICAgIChXZWJDb3Jl
Ojpjb250ZXh0TWVudUl0ZW1UYWdJbnNwZWN0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpj
b250ZXh0TWVudUl0ZW1UYWdTaG93U3BlbGxpbmdQYW5lbCk6CisgICAgICAgIChXZWJDb3JlOjpt
ZWRpYUVsZW1lbnRMaXZlQnJvYWRjYXN0U3RhdGVUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Om1l
ZGlhRWxlbWVudExvYWRpbmdTdGF0ZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6bG9jYWxpemVk
TWVkaWFDb250cm9sRWxlbWVudFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpsb2NhbGl6ZWRN
ZWRpYUNvbnRyb2xFbGVtZW50SGVscFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6bG9jYWxpemVk
TWVkaWFUaW1lRGVzY3JpcHRpb24pOgorICAgICAgICAqIHNyYy9NZWRpYVBsYXllclByaXZhdGVD
aHJvbWl1bS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
OjpyZWdpc3Rlck1lZGlhRW5naW5lKToKKworMjAwOS0xMS0wOSAgWWFhciBTY2huaXRtYW4gIDx5
YWFyQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KwogICAgICAgICBVcC1zdHJlYW1pbmcgQ2hyb21pdW0gQVBJIHNyYyBmaWxlczogRE9NVXRpbGl0
aWVzLi4uRnJhbWVMb2FkZXJDbGllbnRJbXBsCiAKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTMxMjc2CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0v
c3JjL0dyYXBoaWNzQ29udGV4dDNELmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3ND
b250ZXh0M0QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhOTMyODUK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNE
LmNwcApAQCAtMCwwICsxLDIyODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUo
M0RfQ0FOVkFTKQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKworI2luY2x1ZGUg
IkNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiQ2FudmFzQnVmZmVyLmgiCisjaW5jbHVkZSAiQ2Fu
dmFzQnl0ZUFycmF5LmgiCisjaW5jbHVkZSAiQ2FudmFzRmxvYXRBcnJheS5oIgorI2luY2x1ZGUg
IkNhbnZhc0ZyYW1lYnVmZmVyLmgiCisjaW5jbHVkZSAiQ2FudmFzSW50QXJyYXkuaCIKKyNpbmNs
dWRlICJDYW52YXNPYmplY3QuaCIKKyNpbmNsdWRlICJDYW52YXNQcm9ncmFtLmgiCisjaW5jbHVk
ZSAiQ2FudmFzUmVuZGVyYnVmZmVyLmgiCisjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNELmgiCisjaW5jbHVkZSAiQ2FudmFzU2hhZGVyLmgiCisjaW5jbHVkZSAiQ2FudmFzVGV4dHVy
ZS5oIgorI2luY2x1ZGUgIkNhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5LmgiCisjaW5jbHVkZSAiQ1N0
cmluZy5oIgorI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTElt
YWdlRWxlbWVudC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiSW1hZ2VE
YXRhLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+
CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKworI2lmIFBMQVRGT1JNKFdJTl9PUykKKyNp
bmNsdWRlIDx3aW5kb3dzLmg+CisjZW5kaWYKKworI2luY2x1ZGUgIkdML2dsZXcuaCIKKworI2lm
IFBMQVRGT1JNKENHKQorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgPENv
cmVHcmFwaGljcy9DR0NvbnRleHQuaD4KKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dCaXRtYXBD
b250ZXh0Lmg+CisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHSW1hZ2UuaD4KKyNpbmNsdWRlIDxP
cGVuR0wvT3BlbkdMLmg+CisjZWxzZQorI2RlZmluZSBGTElQX0ZSQU1FQlVGRkVSX1ZFUlRJQ0FM
TFkKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oU0tJQSkKKyNpbmNsdWRlICJOYXRpdmVJbWFnZVNr
aWEuaCIKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oREFSV0lOKQorI2RlZmluZSBVU0VfVEVYVFVS
RV9SRUNUQU5HTEVfRk9SX0ZSQU1FQlVGRkVSCisjZW5kaWYKKworI2lmIFBMQVRGT1JNKExJTlVY
KQorI2luY2x1ZGUgPGRsZmNuLmg+CisjaW5jbHVkZSAiR0wvZ2x4ZXcuaCIKKyNlbmRpZgorCit1
c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEdyYXBoaWNz
Q29udGV4dDNESW50ZXJuYWwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKworLy8gVW5jb21tZW50IHRoaXMgdG8gcmVuZGVyIHRvIGEgc2VwYXJh
dGUgd2luZG93IGZvciBkZWJ1Z2dpbmcKKy8vICNkZWZpbmUgUkVOREVSX1RPX0RFQlVHR0lOR19X
SU5ET1cKKworI2RlZmluZSBFWFRSQUNUKHZhbCkgKCF2YWwgPyAwIDogdmFsLT5vYmplY3QoKSkK
KworY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCB7CitwdWJsaWM6CisgICAgR3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbCgpOworICAgIH5HcmFwaGljc0NvbnRleHQzREludGVybmFsKCk7
CisKKyAgICB2b2lkIGNoZWNrRXJyb3IoKSBjb25zdDsKKyAgICBib29sIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworCisgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBwbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dDNEKCkgY29uc3Q7CisgICAgUGxhdGZvcm0zRE9iamVjdCBwbGF0Zm9ybVRleHR1cmUo
KSBjb25zdDsKKworICAgIHZvaWQgcmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpOworCisg
ICAgdm9pZCBiZWdpblBhaW50KENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCogY29udGV4dCk7CisK
KyAgICBib29sIHZhbGlkYXRlVGV4dHVyZVRhcmdldChpbnQgdGFyZ2V0KTsKKyAgICBib29sIHZh
bGlkYXRlVGV4dHVyZVBhcmFtZXRlcihpbnQgcGFyYW0pOworCisgICAgdm9pZCBhY3RpdmVUZXh0
dXJlKHVuc2lnbmVkIGxvbmcgdGV4dHVyZSk7CisgICAgdm9pZCBiaW5kQnVmZmVyKHVuc2lnbmVk
IGxvbmcgdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICBDYW52YXNCdWZmZXIqIGJ1ZmZlcik7
CisgICAgdm9pZCBiaW5kVGV4dHVyZSh1bnNpZ25lZCBsb25nIHRhcmdldCwKKyAgICAgICAgICAg
ICAgICAgICAgIENhbnZhc1RleHR1cmUqIHRleHR1cmUpOworICAgIHZvaWQgYnVmZmVyRGF0YUlt
cGwodW5zaWduZWQgbG9uZyB0YXJnZXQsIGludCBzaXplLCBjb25zdCB2b2lkKiBkYXRhLCB1bnNp
Z25lZCBsb25nIHVzYWdlKTsKKyAgICB2b2lkIGRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSh1bnNp
Z25lZCBsb25nIGluZGV4KTsKKyAgICB2b2lkIGVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHVuc2ln
bmVkIGxvbmcgaW5kZXgpOworICAgIHZvaWQgdmVydGV4QXR0cmliUG9pbnRlcih1bnNpZ25lZCBs
b25nIGluZHgsIGludCBzaXplLCBpbnQgdHlwZSwgYm9vbCBub3JtYWxpemVkLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHN0cmlkZSwgdW5zaWduZWQgbG9uZyBv
ZmZzZXQpOworICAgIHZvaWQgdmlld3BvcnRJbXBsKGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBs
b25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCk7CisKK3ByaXZhdGU6CisgICAgdW5zaWdu
ZWQgaW50IG1fdGV4dHVyZTsKKyAgICB1bnNpZ25lZCBpbnQgbV9mYm87CisgICAgdW5zaWduZWQg
aW50IG1fZGVwdGhCdWZmZXI7CisgICAgdW5zaWduZWQgaW50IG1fY2FjaGVkV2lkdGgsIG1fY2Fj
aGVkSGVpZ2h0OworCisjaWZkZWYgRkxJUF9GUkFNRUJVRkZFUl9WRVJUSUNBTExZCisgICAgdW5z
aWduZWQgY2hhciogbV9zY2FubGluZTsKKyAgICB2b2lkIGZsaXBWZXJ0aWNhbGx5KHVuc2lnbmVk
IGNoYXIqIGZyYW1lYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50
IHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGhlaWdodCk7Cisj
ZW5kaWYKKworICAgIC8vIE5vdGU6IHdlIGFyZW4ndCBjdXJyZW50bHkgdXNpbmcgdGhpcyBpbmZv
cm1hdGlvbiwgYnV0IHdlIHdpbGwKKyAgICAvLyBuZWVkIHRvIGluIG9yZGVyIHRvIHZlcmlmeSB0
aGF0IGFsbCBlbmFibGVkIHZlcnRleCBhcnJheXMgaGF2ZQorICAgIC8vIGEgdmFsaWQgYnVmZmVy
IGJvdW5kIC0tIHRvIGF2b2lkIGNyYXNoZXMgb24gY2VydGFpbiBjYXJkcy4KKyAgICB1bnNpZ25l
ZCBpbnQgbV9ib3VuZEFycmF5QnVmZmVyOworICAgIGNsYXNzIFZlcnRleEF0dHJpYlBvaW50ZXJT
dGF0ZSB7CisgICAgcHVibGljOgorICAgICAgICBWZXJ0ZXhBdHRyaWJQb2ludGVyU3RhdGUoKTsK
KworICAgICAgICBib29sIGVuYWJsZWQ7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgYnVmZmVyOwor
ICAgICAgICB1bnNpZ25lZCBsb25nIGluZHg7CisgICAgICAgIGludCBzaXplOworICAgICAgICBp
bnQgdHlwZTsKKyAgICAgICAgYm9vbCBub3JtYWxpemVkOworICAgICAgICB1bnNpZ25lZCBsb25n
IHN0cmlkZTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQ7CisgICAgfTsKKworICAgIGVu
dW0geworICAgICAgICBOdW1UcmFja2VkUG9pbnRlclN0YXRlcyA9IDIKKyAgICB9OworICAgIFZl
cnRleEF0dHJpYlBvaW50ZXJTdGF0ZSBtX3ZlcnRleEF0dHJpYlBvaW50ZXJTdGF0ZVtOdW1UcmFj
a2VkUG9pbnRlclN0YXRlc107CisKKyNpZiBQTEFURk9STShTS0lBKQorICAgIC8vIElmIHRoZSB3
aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBDYW52YXMncyBiYWNraW5nIHN0b3JlIGRvbid0CisgICAg
Ly8gbWF0Y2ggdGhvc2UgdGhhdCB3ZSB3ZXJlIGdpdmVuIGluIHRoZSBtb3N0IHJlY2VudCBjYWxs
IHRvCisgICAgLy8gcmVzaGFwZSgpLCB0aGVuIHdlIG5lZWQgYW4gaW50ZXJtZWRpYXRlIGJpdG1h
cCB0byByZWFkIGJhY2sgdGhlCisgICAgLy8gZnJhbWUgYnVmZmVyIGludG8uIFRoaXMgc2VlbXMg
dG8gaGFwcGVuIHdoZW4gQ1NTIHN0eWxlcyBhcmUKKyAgICAvLyB1c2VkIHRvIHJlc2l6ZSB0aGUg
Q2FudmFzLgorICAgIFNrQml0bWFwKiBtX3Jlc2l6aW5nQml0bWFwOworI2VuZGlmCisKKyNpZiBQ
TEFURk9STShXSU5fT1MpCisgICAgSFdORCAgbV9jYW52YXNXaW5kb3c7CisgICAgSERDICAgbV9j
YW52YXNEQzsKKyAgICBIR0xSQyBtX2NvbnRleHRPYmo7CisjZWxpZiBQTEFURk9STShDRykKKyAg
ICBDR0xQQnVmZmVyT2JqIG1fcGJ1ZmZlcjsKKyAgICBDR0xDb250ZXh0T2JqIG1fY29udGV4dE9i
ajsKKyAgICB1bnNpZ25lZCBjaGFyKiBtX3JlbmRlck91dHB1dDsKKyAgICBDR0NvbnRleHRSZWYg
bV9jZ0NvbnRleHQ7CisjZWxpZiBQTEFURk9STShMSU5VWCkKKyAgICBEaXNwbGF5KiBtX2Rpc3Bs
YXk7CisgICAgR0xYQ29udGV4dCBtX2NvbnRleHRPYmo7CisgICAgR0xYUGJ1ZmZlciBtX3BidWZm
ZXI7CisgICAgLy8gSW4gb3JkZXIgdG8gYXZvaWQgcHJvYmxlbXMgY2F1c2VkIGJ5IGxpbmtpbmcg
YWdhaW5zdCBsaWJHTCwgd2UKKyAgICAvLyBkeW5hbWljYWxseSBsb29rIHVwIGFsbCB0aGUgc3lt
Ym9scyB3ZSBuZWVkLgorICAgIC8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9p
c3N1ZXMvZGV0YWlsP2lkPTE2ODAwCisgICAgdm9pZCogbV9saWJHTDsKKyAgICBQRk5HTFhDSE9P
U0VGQkNPTkZJR1BST0MgbV9nbFhDaG9vc2VGQkNvbmZpZzsKKyAgICBQRk5HTFhDUkVBVEVORVdD
T05URVhUUFJPQyBtX2dsWENyZWF0ZU5ld0NvbnRleHQ7CisgICAgUEZOR0xYQ1JFQVRFUEJVRkZF
UlBST0MgbV9nbFhDcmVhdGVQYnVmZmVyOworICAgIFBGTkdMWERFU1RST1lQQlVGRkVSUFJPQyBt
X2dsWERlc3Ryb3lQYnVmZmVyOworICAgIHR5cGVkZWYgQm9vbCAoKiBQRk5HTFhNQUtFQ1VSUkVO
VFBST0MpKERpc3BsYXkqIGRweSwgR0xYRHJhd2FibGUgZHJhd2FibGUsIEdMWENvbnRleHQgY3R4
KTsKKyAgICBQRk5HTFhNQUtFQ1VSUkVOVFBST0MgbV9nbFhNYWtlQ3VycmVudDsKKyAgICB0eXBl
ZGVmIHZvaWQgKCogUEZOR0xYREVTVFJPWUNPTlRFWFRQUk9DKShEaXNwbGF5KiBkcHksIEdMWENv
bnRleHQgY3R4KTsKKyAgICBQRk5HTFhERVNUUk9ZQ09OVEVYVFBST0MgbV9nbFhEZXN0cm95Q29u
dGV4dDsKKyAgICB0eXBlZGVmIEdMWENvbnRleHQgKCogUEZOR0xYR0VUQ1VSUkVOVENPTlRFWFRQ
Uk9DKSh2b2lkKTsKKyAgICBQRk5HTFhHRVRDVVJSRU5UQ09OVEVYVFBST0MgbV9nbFhHZXRDdXJy
ZW50Q29udGV4dDsKKyNlbHNlCisgICAgI2Vycm9yIE11c3QgcG9ydCBHcmFwaGljc0NvbnRleHQz
RCB0byB5b3VyIHBsYXRmb3JtCisjZW5kaWYKK307CisKK0dyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWw6OlZlcnRleEF0dHJpYlBvaW50ZXJTdGF0ZTo6VmVydGV4QXR0cmliUG9pbnRlclN0YXRlKCkK
KyAgICA6IGVuYWJsZWQoZmFsc2UpCisgICAgLCBidWZmZXIoMCkKKyAgICAsIGluZHgoMCkKKyAg
ICAsIHNpemUoMCkKKyAgICAsIHR5cGUoMCkKKyAgICAsIG5vcm1hbGl6ZWQoZmFsc2UpCisgICAg
LCBzdHJpZGUoMCkKKyAgICAsIG9mZnNldCgwKQoreworfQorCisjaWYgUExBVEZPUk0oTElOVVgp
CitzdGF0aWMgdm9pZCogdHJ5TG9hZChjb25zdCBjaGFyKiBsaWJOYW1lKQoreworICAgIC8vIFdl
IHVzZSBSVExEX0dMT0JBTCBzZW1hbnRpY3Mgc28gdGhhdCBHTEVXIGluaXRpYWxpemF0aW9uIHdv
cmtzOworICAgIC8vIEdMRVcgZXhwZWN0cyB0byBiZSBhYmxlIHRvIG9wZW4gdGhlIGN1cnJlbnQg
cHJvY2VzcydzIGhhbmRsZQorICAgIC8vIGFuZCBkbyBkbHN5bSdzIG9mIEdMIGVudHJ5IHBvaW50
cyBmcm9tIHRoZXJlLgorICAgIHJldHVybiBkbG9wZW4obGliTmFtZSwgUlRMRF9MQVpZIHwgUlRM
RF9HTE9CQUwpOworfQorI2VuZGlmCisKK0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OkdyYXBo
aWNzQ29udGV4dDNESW50ZXJuYWwoKQorICAgIDogbV90ZXh0dXJlKDApCisgICAgLCBtX2Zibygw
KQorICAgICwgbV9kZXB0aEJ1ZmZlcigwKQorI2lmZGVmIEZMSVBfRlJBTUVCVUZGRVJfVkVSVElD
QUxMWQorICAgICwgbV9zY2FubGluZSgwKQorI2VuZGlmCisgICAgLCBtX2JvdW5kQXJyYXlCdWZm
ZXIoMCkKKyNpZiBQTEFURk9STShTS0lBKQorICAgICwgbV9yZXNpemluZ0JpdG1hcCgwKQorI2Vu
ZGlmCisjaWYgUExBVEZPUk0oV0lOX09TKQorICAgICwgbV9jYW52YXNXaW5kb3coMCkKKyAgICAs
IG1fY2FudmFzREMoMCkKKyAgICAsIG1fY29udGV4dE9iaigwKQorI2VsaWYgUExBVEZPUk0oQ0cp
CisgICAgLCBtX3BidWZmZXIoMCkKKyAgICAsIG1fY29udGV4dE9iaigwKQorICAgICwgbV9yZW5k
ZXJPdXRwdXQoMCkKKyAgICAsIG1fY2dDb250ZXh0KDApCisjZWxpZiBQTEFURk9STShMSU5VWCkK
KyAgICAsIG1fZGlzcGxheSgwKQorICAgICwgbV9jb250ZXh0T2JqKDApCisgICAgLCBtX3BidWZm
ZXIoMCkKKyAgICAsIG1fZ2xYQ2hvb3NlRkJDb25maWcoMCkKKyAgICAsIG1fZ2xYQ3JlYXRlTmV3
Q29udGV4dCgwKQorICAgICwgbV9nbFhDcmVhdGVQYnVmZmVyKDApCisgICAgLCBtX2dsWERlc3Ry
b3lQYnVmZmVyKDApCisgICAgLCBtX2dsWE1ha2VDdXJyZW50KDApCisgICAgLCBtX2dsWERlc3Ry
b3lDb250ZXh0KDApCisgICAgLCBtX2dsWEdldEN1cnJlbnRDb250ZXh0KDApCisjZWxzZQorI2Vy
cm9yIE11c3QgcG9ydCB0byB5b3VyIHBsYXRmb3JtCisjZW5kaWYKK3sKKyNpZiBQTEFURk9STShX
SU5fT1MpCisgICAgV05EQ0xBU1Mgd2M7CisgICAgaWYgKCFHZXRDbGFzc0luZm8oR2V0TW9kdWxl
SGFuZGxlKDApLCBMIkNBTlZBU0dMIiwgJndjKSkgeworICAgICAgICBaZXJvTWVtb3J5KCZ3Yywg
c2l6ZW9mKFdORENMQVNTKSk7CisgICAgICAgIHdjLnN0eWxlID0gQ1NfT1dOREM7CisgICAgICAg
IHdjLmhJbnN0YW5jZSA9IEdldE1vZHVsZUhhbmRsZSgwKTsKKyAgICAgICAgd2MubHBmblduZFBy
b2MgPSBEZWZXaW5kb3dQcm9jOworICAgICAgICB3Yy5scHN6Q2xhc3NOYW1lID0gTCJDQU5WQVNH
TCI7CisKKyAgICAgICAgaWYgKCFSZWdpc3RlckNsYXNzKCZ3YykpIHsKKyAgICAgICAgICAgIHBy
aW50ZigiR3JhcGhpY3NDb250ZXh0M0Q6IFJlZ2lzdGVyQ2xhc3MgZmFpbGVkXG4iKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1fY2FudmFzV2luZG93ID0g
Q3JlYXRlV2luZG93KEwiQ0FOVkFTR0wiLCBMIkNBTlZBU0dMIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBXU19DQVBUSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENXX1VTRURFRkFVTFQsIENXX1VTRURFRkFVTFQsIENXX1VTRURFRkFVTFQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1dfVVNFREVGQVVMVCwgMCwgMCwgR2V0TW9k
dWxlSGFuZGxlKDApLCAwKTsKKyAgICBpZiAoIW1fY2FudmFzV2luZG93KSB7CisgICAgICAgIHBy
aW50ZigiR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDogQ3JlYXRlV2luZG93IGZhaWxlZFxuIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBnZXQgdGhlIGRldmljZSBjb250ZXh0
CisgICAgbV9jYW52YXNEQyA9IEdldERDKG1fY2FudmFzV2luZG93KTsKKyAgICBpZiAoIW1fY2Fu
dmFzREMpIHsKKyAgICAgICAgcHJpbnRmKCJHcmFwaGljc0NvbnRleHQzREludGVybmFsOiBHZXRE
QyBmYWlsZWRcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gZmluZCBkZWZh
dWx0IHBpeGVsIGZvcm1hdAorICAgIFBJWEVMRk9STUFUREVTQ1JJUFRPUiBwZmQ7CisgICAgWmVy
b01lbW9yeSgmcGZkLCBzaXplb2YoUElYRUxGT1JNQVRERVNDUklQVE9SKSk7CisgICAgcGZkLm5T
aXplID0gc2l6ZW9mKFBJWEVMRk9STUFUREVTQ1JJUFRPUik7CisgICAgcGZkLm5WZXJzaW9uID0g
MTsKKyAgICBwZmQuZHdGbGFncyA9IFBGRF9EUkFXX1RPX1dJTkRPVyB8IFBGRF9TVVBQT1JUX09Q
RU5HTAorI2lmZGVmIFJFTkRFUl9UT19ERUJVR0dJTkdfV0lORE9XCisgICAgICAgIHwgUEZEX0RP
VUJMRUJVRkZFUgorI2VuZGlmIC8vIFJFTkRFUl9UT19ERUJVR0dJTkdfV0lORE9XCisgICAgICAg
IDsKKyAgICBpbnQgcGl4ZWxmb3JtYXQgPSBDaG9vc2VQaXhlbEZvcm1hdChtX2NhbnZhc0RDLCAm
cGZkKTsKKworICAgIC8vIHNldCB0aGUgcGl4ZWwgZm9ybWF0IGZvciB0aGUgZGMKKyAgICBpZiAo
IVNldFBpeGVsRm9ybWF0KG1fY2FudmFzREMsIHBpeGVsZm9ybWF0LCAmcGZkKSkgeworICAgICAg
ICBwcmludGYoIkdyYXBoaWNzQ29udGV4dDNEOiBTZXRQaXhlbEZvcm1hdCBmYWlsZWRcbiIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gY3JlYXRlIHJlbmRlcmluZyBjb250ZXh0
CisgICAgbV9jb250ZXh0T2JqID0gd2dsQ3JlYXRlQ29udGV4dChtX2NhbnZhc0RDKTsKKyAgICBp
ZiAoIW1fY29udGV4dE9iaikgeworICAgICAgICBwcmludGYoIkdyYXBoaWNzQ29udGV4dDNEOiB3
Z2xDcmVhdGVDb250ZXh0IGZhaWxlZFxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoIXdnbE1ha2VDdXJyZW50KG1fY2FudmFzREMsIG1fY29udGV4dE9iaikpIHsKKyAgICAg
ICAgcHJpbnRmKCJHcmFwaGljc0NvbnRleHQzRDogd2dsTWFrZUN1cnJlbnQgZmFpbGVkXG4iKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2lmZGVmIFJFTkRFUl9UT19ERUJVR0dJTkdfV0lO
RE9XCisgICAgdHlwZWRlZiBCT09MIChXSU5BUEkgKiBQRk5XR0xTV0FQSU5URVJWQUxFWFRQUk9D
KSAoaW50IGludGVydmFsKTsKKyAgICBQRk5XR0xTV0FQSU5URVJWQUxFWFRQUk9DIHNldFN3YXBJ
bnRlcnZhbCA9IDA7CisgICAgc2V0U3dhcEludGVydmFsID0gKFBGTldHTFNXQVBJTlRFUlZBTEVY
VFBST0MpIHdnbEdldFByb2NBZGRyZXNzKCJ3Z2xTd2FwSW50ZXJ2YWxFWFQiKTsKKyAgICBpZiAo
c2V0U3dhcEludGVydmFsKQorICAgICAgICBzZXRTd2FwSW50ZXJ2YWwoMSk7CisjZW5kaWYgLy8g
UkVOREVSX1RPX0RFQlVHR0lOR19XSU5ET1cKKworI2VsaWYgUExBVEZPUk0oQ0cpCisgICAgLy8g
Q3JlYXRlIGEgMXgxIHBidWZmZXIgYW5kIGFzc29jaWF0ZWQgY29udGV4dCB0byBib290c3RyYXAg
dGhpbmdzCisgICAgQ0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGUgYXR0cmlic1tdID0geworICAgICAg
ICAoQ0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGUpIGtDR0xQRkFQQnVmZmVyLAorICAgICAgICAoQ0dM
UGl4ZWxGb3JtYXRBdHRyaWJ1dGUpIDAKKyAgICB9OworICAgIENHTFBpeGVsRm9ybWF0T2JqIHBp
eGVsRm9ybWF0OworICAgIEdMaW50IG51bVBpeGVsRm9ybWF0czsKKyAgICBpZiAoQ0dMQ2hvb3Nl
UGl4ZWxGb3JtYXQoYXR0cmlicywgJnBpeGVsRm9ybWF0LCAmbnVtUGl4ZWxGb3JtYXRzKSAhPSBr
Q0dMTm9FcnJvcikgeworICAgICAgICBwcmludGYoIkdyYXBoaWNzQ29udGV4dDNEOiBlcnJvciBj
aG9vc2luZyBwaXhlbCBmb3JtYXRcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlm
ICghcGl4ZWxGb3JtYXQpIHsKKyAgICAgICAgcHJpbnRmKCJHcmFwaGljc0NvbnRleHQzRDogbm8g
cGl4ZWwgZm9ybWF0IHNlbGVjdGVkXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBD
R0xDb250ZXh0T2JqIGNvbnRleHQ7CisgICAgQ0dMRXJyb3IgcmVzID0gQ0dMQ3JlYXRlQ29udGV4
dChwaXhlbEZvcm1hdCwgMCwgJmNvbnRleHQpOworICAgIENHTERlc3Ryb3lQaXhlbEZvcm1hdChw
aXhlbEZvcm1hdCk7CisgICAgaWYgKHJlcyAhPSBrQ0dMTm9FcnJvcikgeworICAgICAgICBwcmlu
dGYoIkdyYXBoaWNzQ29udGV4dDNEOiBlcnJvciBjcmVhdGluZyBjb250ZXh0XG4iKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBDR0xQQnVmZmVyT2JqIHBidWZmZXI7CisgICAgaWYgKENH
TENyZWF0ZVBCdWZmZXIoMSwgMSwgR0xfVEVYVFVSRV8yRCwgR0xfUkdCQSwgMCwgJnBidWZmZXIp
ICE9IGtDR0xOb0Vycm9yKSB7CisgICAgICAgIENHTERlc3Ryb3lDb250ZXh0KGNvbnRleHQpOwor
ICAgICAgICBwcmludGYoIkdyYXBoaWNzQ29udGV4dDNEOiBlcnJvciBjcmVhdGluZyBwYnVmZmVy
XG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoQ0dMU2V0UEJ1ZmZlcihjb250
ZXh0LCBwYnVmZmVyLCAwLCAwLCAwKSAhPSBrQ0dMTm9FcnJvcikgeworICAgICAgICBDR0xEZXN0
cm95Q29udGV4dChjb250ZXh0KTsKKyAgICAgICAgQ0dMRGVzdHJveVBCdWZmZXIocGJ1ZmZlcik7
CisgICAgICAgIHByaW50ZigiR3JhcGhpY3NDb250ZXh0M0Q6IGVycm9yIGF0dGFjaGluZyBwYnVm
ZmVyIHRvIGNvbnRleHRcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChDR0xT
ZXRDdXJyZW50Q29udGV4dChjb250ZXh0KSAhPSBrQ0dMTm9FcnJvcikgeworICAgICAgICBDR0xE
ZXN0cm95Q29udGV4dChjb250ZXh0KTsKKyAgICAgICAgQ0dMRGVzdHJveVBCdWZmZXIocGJ1ZmZl
cik7CisgICAgICAgIHByaW50ZigiR3JhcGhpY3NDb250ZXh0M0Q6IGVycm9yIG1ha2luZyBjb250
ZXh0IGN1cnJlbnRcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fcGJ1ZmZlciA9
IHBidWZmZXI7CisgICAgbV9jb250ZXh0T2JqID0gY29udGV4dDsKKyNlbGlmIFBMQVRGT1JNKExJ
TlVYKQorICAgIG1fZGlzcGxheSA9IFhPcGVuRGlzcGxheSgwKTsKKyAgICBpZiAoIW1fZGlzcGxh
eSkgeworICAgICAgICBwcmludGYoIkdyYXBoaWNzQ29udGV4dDNEOiBlcnJvciBvcGVuaW5nIFgg
ZGlzcGxheVxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb25zdCBjaGFyKiBs
aWJOYW1lc1tdID0geworICAgICAgICAiL3Vzci9saWIvbGliR0wuc28uMSIsCisgICAgICAgICIv
dXNyL2xpYjMyL2xpYkdMLnNvLjEiLAorICAgICAgICAiL3Vzci9saWI2NC9saWJHTC5zby4xIiwK
KyAgICB9OworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZW9mKGxpYk5hbWVzKSAvIHNpemVv
Zihjb25zdCBjaGFyKik7IGkrKykgeworICAgICAgICBtX2xpYkdMID0gdHJ5TG9hZChsaWJOYW1l
c1tpXSk7CisgICAgICAgIGlmIChtX2xpYkdMKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIGlmICghbV9saWJHTCkgeworICAgICAgICBwcmludGYoIkdyYXBoaWNzQ29udGV4dDNEOiBl
cnJvciBvcGVuaW5nIGxpYkdMLnNvLjFcbiIpOworICAgICAgICBwcmludGYoIkdyYXBoaWNzQ29u
dGV4dDNEOiB0cmllZDoiKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplb2YobGli
TmFtZXMpIC8gc2l6ZW9mKGNvbnN0IGNoYXIqKTsgaSsrKQorICAgICAgICAgICAgcHJpbnRmKCIg
JXMiLCBsaWJOYW1lc1tpXSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9nbFhDaG9v
c2VGQkNvbmZpZyA9IChQRk5HTFhDSE9PU0VGQkNPTkZJR1BST0MpIGRsc3ltKG1fbGliR0wsICJn
bFhDaG9vc2VGQkNvbmZpZyIpOworICAgIG1fZ2xYQ3JlYXRlTmV3Q29udGV4dCA9IChQRk5HTFhD
UkVBVEVORVdDT05URVhUUFJPQykgZGxzeW0obV9saWJHTCwgImdsWENyZWF0ZU5ld0NvbnRleHQi
KTsKKyAgICBtX2dsWENyZWF0ZVBidWZmZXIgPSAoUEZOR0xYQ1JFQVRFUEJVRkZFUlBST0MpIGRs
c3ltKG1fbGliR0wsICJnbFhDcmVhdGVQYnVmZmVyIik7CisgICAgbV9nbFhEZXN0cm95UGJ1ZmZl
ciA9IChQRk5HTFhERVNUUk9ZUEJVRkZFUlBST0MpIGRsc3ltKG1fbGliR0wsICJnbFhEZXN0cm95
UGJ1ZmZlciIpOworICAgIG1fZ2xYTWFrZUN1cnJlbnQgPSAoUEZOR0xYTUFLRUNVUlJFTlRQUk9D
KSBkbHN5bShtX2xpYkdMLCAiZ2xYTWFrZUN1cnJlbnQiKTsKKyAgICBtX2dsWERlc3Ryb3lDb250
ZXh0ID0gKFBGTkdMWERFU1RST1lDT05URVhUUFJPQykgZGxzeW0obV9saWJHTCwgImdsWERlc3Ry
b3lDb250ZXh0Iik7CisgICAgbV9nbFhHZXRDdXJyZW50Q29udGV4dCA9IChQRk5HTFhHRVRDVVJS
RU5UQ09OVEVYVFBST0MpIGRsc3ltKG1fbGliR0wsICJnbFhHZXRDdXJyZW50Q29udGV4dCIpOwor
ICAgIGlmICghbV9nbFhDaG9vc2VGQkNvbmZpZyB8fCAhbV9nbFhDcmVhdGVOZXdDb250ZXh0IHx8
ICFtX2dsWENyZWF0ZVBidWZmZXIKKyAgICAgICAgfHwgIW1fZ2xYRGVzdHJveVBidWZmZXIgfHwg
IW1fZ2xYTWFrZUN1cnJlbnQgfHwgIW1fZ2xYRGVzdHJveUNvbnRleHQKKyAgICAgICAgfHwgIW1f
Z2xYR2V0Q3VycmVudENvbnRleHQpIHsKKyAgICAgICAgcHJpbnRmKCJHcmFwaGljc0NvbnRleHQz
RDogZXJyb3IgbG9va2luZyB1cCBib290c3RyYXBwaW5nIGVudHJ5IHBvaW50c1xuIik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgaW50IGNvbmZpZ0F0dHJzW10gPSB7CisgICAgICAgIEdM
WF9EUkFXQUJMRV9UWVBFLAorICAgICAgICBHTFhfUEJVRkZFUl9CSVQsCisgICAgICAgIEdMWF9S
RU5ERVJfVFlQRSwKKyAgICAgICAgR0xYX1JHQkFfQklULAorICAgICAgICBHTFhfRE9VQkxFQlVG
RkVSLAorICAgICAgICAwLAorICAgICAgICAwCisgICAgfTsKKyAgICBpbnQgbmVsZW1lbnRzID0g
MDsKKyAgICBHTFhGQkNvbmZpZyogY29uZmlnID0gbV9nbFhDaG9vc2VGQkNvbmZpZyhtX2Rpc3Bs
YXksIDAsIGNvbmZpZ0F0dHJzLCAmbmVsZW1lbnRzKTsKKyAgICBpZiAoIWNvbmZpZykgeworICAg
ICAgICBwcmludGYoIkdyYXBoaWNzQ29udGV4dDNEOiBnbFhDaG9vc2VGQkNvbmZpZyBmYWlsZWRc
biIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghbmVsZW1lbnRzKSB7CisgICAg
ICAgIHByaW50ZigiR3JhcGhpY3NDb250ZXh0M0Q6IGdsWENob29zZUZCQ29uZmlnIHJldHVybmVk
IDAgZWxlbWVudHNcbiIpOworICAgICAgICBYRnJlZShjb25maWcpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIEdMWENvbnRleHQgY29udGV4dCA9IG1fZ2xYQ3JlYXRlTmV3Q29udGV4dCht
X2Rpc3BsYXksIGNvbmZpZ1swXSwgR0xYX1JHQkFfVFlQRSwgMCwgVHJ1ZSk7CisgICAgaWYgKCFj
b250ZXh0KSB7CisgICAgICAgIHByaW50ZigiR3JhcGhpY3NDb250ZXh0M0Q6IGdsWENyZWF0ZU5l
d0NvbnRleHQgZmFpbGVkXG4iKTsKKyAgICAgICAgWEZyZWUoY29uZmlnKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBpbnQgcGJ1ZmZlckF0dHJzW10gPSB7CisgICAgICAgIEdMWF9QQlVG
RkVSX1dJRFRILAorICAgICAgICAxLAorICAgICAgICBHTFhfUEJVRkZFUl9IRUlHSFQsCisgICAg
ICAgIDEsCisgICAgICAgIDAKKyAgICB9OworICAgIEdMWFBidWZmZXIgcGJ1ZmZlciA9IG1fZ2xY
Q3JlYXRlUGJ1ZmZlcihtX2Rpc3BsYXksIGNvbmZpZ1swXSwgcGJ1ZmZlckF0dHJzKTsKKyAgICBY
RnJlZShjb25maWcpOworICAgIGlmICghcGJ1ZmZlcikgeworICAgICAgICBwcmludGYoIkdyYXBo
aWNzQ29udGV4dDNEOiBnbHhDcmVhdGVQYnVmZmVyIGZhaWxlZFxuIik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgaWYgKCFtX2dsWE1ha2VDdXJyZW50KG1fZGlzcGxheSwgcGJ1ZmZlciwg
Y29udGV4dCkpIHsKKyAgICAgICAgcHJpbnRmKCJHcmFwaGljc0NvbnRleHQzRDogZ2xYTWFrZUN1
cnJlbnQgZmFpbGVkXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2NvbnRleHRP
YmogPSBjb250ZXh0OworICAgIG1fcGJ1ZmZlciA9IHBidWZmZXI7CisjZWxzZQorI2Vycm9yIE11
c3QgcG9ydCB0byB5b3VyIHBsYXRmb3JtCisjZW5kaWYKKworICAgIHN0YXRpYyBib29sIGluaXRp
YWxpemVkR0xFVyA9IGZhbHNlOworICAgIGlmICghaW5pdGlhbGl6ZWRHTEVXKSB7CisgICAgICAg
IC8vIEluaXRpYWxpemUgR0xFVyBhbmQgY2hlY2sgZm9yIEdMIDIuMCBzdXBwb3J0IGJ5IHRoZSBk
cml2ZXJzLgorICAgICAgICBHTGVudW0gZ2xld0luaXRSZXN1bHQgPSBnbGV3SW5pdCgpOworICAg
ICAgICBpZiAoZ2xld0luaXRSZXN1bHQgIT0gR0xFV19PSykgeworICAgICAgICAgICAgcHJpbnRm
KCJHcmFwaGljc0NvbnRleHQzRDogR0xFVyBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICghZ2xld0lzU3VwcG9ydGVk
KCJHTF9WRVJTSU9OXzJfMCIpKSB7CisgICAgICAgICAgICBwcmludGYoIkdyYXBoaWNzQ29udGV4
dDNEOiBPcGVuR0wgMi4wIG5vdCBzdXBwb3J0ZWRcbiIpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIGluaXRpYWxpemVkR0xFVyA9IHRydWU7CisgICAgfQorfQorCitH
cmFwaGljc0NvbnRleHQzREludGVybmFsOjp+R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCgpCit7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisjaWZuZGVmIFJFTkRFUl9UT19ERUJVR0dJTkdf
V0lORE9XCisgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICZtX2RlcHRoQnVmZmVyKTsK
KyAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1cmUpOworI2lmZGVmIEZMSVBfRlJBTUVC
VUZGRVJfVkVSVElDQUxMWQorICAgIGlmIChtX3NjYW5saW5lKQorICAgICAgICBkZWxldGVbXSBt
X3NjYW5saW5lOworI2VuZGlmCisgICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQoMSwgJm1fZmJv
KTsKKyNlbmRpZiAvLyAhUkVOREVSX1RPX0RFQlVHR0lOR19XSU5ET1cKKyNpZiBQTEFURk9STShT
S0lBKQorICAgIGlmIChtX3Jlc2l6aW5nQml0bWFwKQorICAgICAgICBkZWxldGUgbV9yZXNpemlu
Z0JpdG1hcDsKKyNlbmRpZgorI2lmIFBMQVRGT1JNKFdJTl9PUykKKyAgICB3Z2xNYWtlQ3VycmVu
dCgwLCAwKTsKKyAgICB3Z2xEZWxldGVDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAgUmVsZWFz
ZURDKG1fY2FudmFzV2luZG93LCBtX2NhbnZhc0RDKTsKKyAgICBEZXN0cm95V2luZG93KG1fY2Fu
dmFzV2luZG93KTsKKyNlbGlmIFBMQVRGT1JNKENHKQorICAgIENHTFNldEN1cnJlbnRDb250ZXh0
KDApOworICAgIENHTERlc3Ryb3lDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAgQ0dMRGVzdHJv
eVBCdWZmZXIobV9wYnVmZmVyKTsKKyAgICBpZiAobV9jZ0NvbnRleHQpCisgICAgICAgIENHQ29u
dGV4dFJlbGVhc2UobV9jZ0NvbnRleHQpOworICAgIGlmIChtX3JlbmRlck91dHB1dCkKKyAgICAg
ICAgZGVsZXRlW10gbV9yZW5kZXJPdXRwdXQ7CisjZWxpZiBQTEFURk9STShMSU5VWCkKKyAgICBt
X2dsWE1ha2VDdXJyZW50KG1fZGlzcGxheSwgMCwgMCk7CisgICAgbV9nbFhEZXN0cm95Q29udGV4
dChtX2Rpc3BsYXksIG1fY29udGV4dE9iaik7CisgICAgbV9nbFhEZXN0cm95UGJ1ZmZlcihtX2Rp
c3BsYXksIG1fcGJ1ZmZlcik7CisgICAgWENsb3NlRGlzcGxheShtX2Rpc3BsYXkpOworICAgIGRs
Y2xvc2UobV9saWJHTCk7CisjZWxzZQorI2Vycm9yIE11c3QgcG9ydCB0byB5b3VyIHBsYXRmb3Jt
CisjZW5kaWYKKyAgICBtX2NvbnRleHRPYmogPSAwOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWw6OmNoZWNrRXJyb3IoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBUaGlzIG5l
ZWRzIHRvIG9ubHkgYmUgZG9uZSBpbiB0aGUgZGVidWcgY29udGV4dC4gSXQKKyAgICAvLyB3aWxs
IG5lZWQgdG8gdGhyb3cgYW4gZXhjZXB0aW9uIG9uIGVycm9yLgorICAgIEdMZW51bSBlcnJvciA9
IGdsR2V0RXJyb3IoKTsKKyAgICBpZiAoZXJyb3IgIT0gR0xfTk9fRVJST1IpIHsKKyAgICAgICAg
cHJpbnRmKCJHcmFwaGljc0NvbnRleHQzREludGVybmFsOiBHTCBFcnJvciA6ICV4XG4iLCBlcnJv
cik7CisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgfQorfQorCitib29sIEdyYXBoaWNz
Q29udGV4dDNESW50ZXJuYWw6Om1ha2VDb250ZXh0Q3VycmVudCgpCit7CisjaWYgUExBVEZPUk0o
V0lOX09TKQorICAgIGlmICh3Z2xHZXRDdXJyZW50Q29udGV4dCgpICE9IG1fY29udGV4dE9iaikK
KyAgICAgICAgaWYgKHdnbE1ha2VDdXJyZW50KG1fY2FudmFzREMsIG1fY29udGV4dE9iaikpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyNlbGlmIFBMQVRGT1JNKENHKQorICAgIGlmIChDR0xH
ZXRDdXJyZW50Q29udGV4dCgpICE9IG1fY29udGV4dE9iaikKKyAgICAgICAgaWYgKENHTFNldEN1
cnJlbnRDb250ZXh0KG1fY29udGV4dE9iaikgPT0ga0NHTE5vRXJyb3IpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyNlbGlmIFBMQVRGT1JNKExJTlVYKQorICAgIGlmIChtX2dsWEdldEN1cnJl
bnRDb250ZXh0KCkgIT0gbV9jb250ZXh0T2JqKQorICAgICAgICBpZiAobV9nbFhNYWtlQ3VycmVu
dChtX2Rpc3BsYXksIG1fcGJ1ZmZlciwgbV9jb250ZXh0T2JqKSkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworI2Vsc2UKKyNlcnJvciBNdXN0IHBvcnQgdG8geW91ciBwbGF0Zm9ybQorI2VuZGlm
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIEdyYXBo
aWNzQ29udGV4dDNESW50ZXJuYWw6OnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdAor
eworICAgIHJldHVybiBtX2NvbnRleHRPYmo7Cit9CisKK1BsYXRmb3JtM0RPYmplY3QgR3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDo6cGxhdGZvcm1UZXh0dXJlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV90ZXh0dXJlOworfQorCitzdGF0aWMgaW50IGNyZWF0ZVRleHR1cmVPYmplY3QoR0xlbnVt
IHRhcmdldCkKK3sKKyAgICBHTHVpbnQgdGV4dHVyZSA9IDA7CisgICAgZ2xHZW5UZXh0dXJlcygx
LCAmdGV4dHVyZSk7CisgICAgZ2xCaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOworICAgIGds
VGV4UGFyYW1ldGVyZih0YXJnZXQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTkVBUkVTVCk7
CisgICAgZ2xUZXhQYXJhbWV0ZXJmKHRhcmdldCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9O
RUFSRVNUKTsKKyAgICByZXR1cm4gdGV4dHVyZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
REludGVybmFsOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyNpZmRlZiBSRU5E
RVJfVE9fREVCVUdHSU5HX1dJTkRPVworICAgIFNldFdpbmRvd1BvcyhtX2NhbnZhc1dpbmRvdywg
SFdORF9UT1AsIDAsIDAsIHdpZHRoLCBoZWlnaHQsCisgICAgICAgICAgICAgICAgIFNXUF9OT01P
VkUpOworICAgIFNob3dXaW5kb3cobV9jYW52YXNXaW5kb3csIFNXX1NIT1cpOworI2VuZGlmCisK
KyAgICBtX2NhY2hlZFdpZHRoID0gd2lkdGg7CisgICAgbV9jYWNoZWRIZWlnaHQgPSBoZWlnaHQ7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyNpZm5kZWYgUkVOREVSX1RPX0RFQlVHR0lO
R19XSU5ET1cKKyNpZmRlZiBVU0VfVEVYVFVSRV9SRUNUQU5HTEVfRk9SX0ZSQU1FQlVGRkVSCisg
ICAgLy8gR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCIGlzIHRoZSBiZXN0IHN1cHBvcnRlZCByZW5k
ZXIgdGFyZ2V0IG9uIE1hYyBPUyBYCisgICAgR0xlbnVtIHRhcmdldCA9IEdMX1RFWFRVUkVfUkVD
VEFOR0xFX0FSQjsKKyNlbHNlCisgICAgR0xlbnVtIHRhcmdldCA9IEdMX1RFWFRVUkVfMkQ7Cisj
ZW5kaWYKKyAgICBpZiAoIW1fdGV4dHVyZSkgeworICAgICAgICAvLyBHZW5lcmF0ZSB0aGUgdGV4
dHVyZSBvYmplY3QKKyAgICAgICAgbV90ZXh0dXJlID0gY3JlYXRlVGV4dHVyZU9iamVjdCh0YXJn
ZXQpOworICAgICAgICAvLyBHZW5lcmF0ZSB0aGUgZnJhbWVidWZmZXIgb2JqZWN0CisgICAgICAg
IGdsR2VuRnJhbWVidWZmZXJzRVhUKDEsICZtX2Zibyk7CisgICAgICAgIC8vIEdlbmVyYXRlIHRo
ZSBkZXB0aCBidWZmZXIKKyAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZtX2RlcHRo
QnVmZmVyKTsKKyAgICAgICAgY2hlY2tFcnJvcigpOworICAgIH0KKworICAgIC8vIFJlYWxsb2Nh
dGUgdGhlIGNvbG9yIGFuZCBkZXB0aCBidWZmZXJzCisgICAgZ2xCaW5kVGV4dHVyZSh0YXJnZXQs
IG1fdGV4dHVyZSk7CisgICAgZ2xUZXhJbWFnZTJEKHRhcmdldCwgMCwgR0xfUkdCQTgsIHdpZHRo
LCBoZWlnaHQsIDAsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDApOworICAgIGdsQmluZFRl
eHR1cmUodGFyZ2V0LCAwKTsKKworICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVG
RkVSX0VYVCwgbV9mYm8pOworICAgIGdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZG
RVJfRVhULCBtX2RlcHRoQnVmZmVyKTsKKyAgICBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VFWFQoR0xf
UkVOREVSQlVGRkVSX0VYVCwgR0xfREVQVEhfQ09NUE9ORU5ULCB3aWR0aCwgaGVpZ2h0KTsKKyAg
ICBnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgMCk7CisKKyAgICBn
bEZyYW1lYnVmZmVyVGV4dHVyZTJERVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfQ09MT1JfQVRU
QUNITUVOVDBfRVhULCB0YXJnZXQsIG1fdGV4dHVyZSwgMCk7CisgICAgZ2xGcmFtZWJ1ZmZlclJl
bmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0RFUFRIX0FUVEFDSE1FTlRfRVhU
LCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX2RlcHRoQnVmZmVyKTsKKyAgICBHTGVudW0gc3RhdHVz
ID0gZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCk7CisgICAg
aWYgKHN0YXR1cyAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURV9FWFQpIHsKKyAgICAgICAgcHJp
bnRmKCJHcmFwaGljc0NvbnRleHQzRDogZnJhbWVidWZmZXIgd2FzIGluY29tcGxldGVcbiIpOwor
CisgICAgICAgIC8vIEZJWE1FOiBjbGVhbnVwLgorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIH0KKyNlbmRpZiAgLy8gUkVOREVSX1RPX0RFQlVHR0lOR19XSU5ET1cKKworI2lmZGVmIEZM
SVBfRlJBTUVCVUZGRVJfVkVSVElDQUxMWQorICAgIGlmIChtX3NjYW5saW5lKSB7CisgICAgICAg
IGRlbGV0ZVtdIG1fc2NhbmxpbmU7CisgICAgICAgIG1fc2NhbmxpbmUgPSAwOworICAgIH0KKyAg
ICBtX3NjYW5saW5lID0gbmV3IHVuc2lnbmVkIGNoYXJbd2lkdGggKiA0XTsKKyNlbmRpZiAgLy8g
RkxJUF9GUkFNRUJVRkZFUl9WRVJUSUNBTExZCisKKyAgICBnbENsZWFyKEdMX0NPTE9SX0JVRkZF
Ul9CSVQpOworICAgIHZpZXdwb3J0SW1wbCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKKworI2lmIFBM
QVRGT1JNKENHKQorICAgIC8vIE5lZWQgdG8gcmVhbGxvY2F0ZSB0aGUgY2xpZW50LXNpZGUgYmFj
a2luZyBzdG9yZS4KKyAgICAvLyBGSVhNRTogbWFrZSB0aGlzIG1vcmUgZWZmaWNpZW50LgorICAg
IGlmIChtX2NnQ29udGV4dCkgeworICAgICAgICBDR0NvbnRleHRSZWxlYXNlKG1fY2dDb250ZXh0
KTsKKyAgICAgICAgbV9jZ0NvbnRleHQgPSAwOworICAgIH0KKyAgICBpZiAobV9yZW5kZXJPdXRw
dXQpIHsKKyAgICAgICAgZGVsZXRlW10gbV9yZW5kZXJPdXRwdXQ7CisgICAgICAgIG1fcmVuZGVy
T3V0cHV0ID0gMDsKKyAgICB9CisgICAgaW50IHJvd0J5dGVzID0gd2lkdGggKiA0OworICAgIG1f
cmVuZGVyT3V0cHV0ID0gbmV3IHVuc2lnbmVkIGNoYXJbaGVpZ2h0ICogcm93Qnl0ZXNdOworICAg
IENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNlID0gQ0dDb2xvclNwYWNlQ3JlYXRlV2l0aE5hbWUo
a0NHQ29sb3JTcGFjZUdlbmVyaWNSR0IpOworICAgIG1fY2dDb250ZXh0ID0gQ0dCaXRtYXBDb250
ZXh0Q3JlYXRlKG1fcmVuZGVyT3V0cHV0LCB3aWR0aCwgaGVpZ2h0LCA4LCByb3dCeXRlcywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvclNwYWNlLCBrQ0dJbWFn
ZUFscGhhUHJlbXVsdGlwbGllZExhc3QpOworICAgIENHQ29sb3JTcGFjZVJlbGVhc2UoY29sb3JT
cGFjZSk7CisjZW5kaWYgIC8vIFBMQVRGT1JNKENHKQorfQorCisjaWZkZWYgRkxJUF9GUkFNRUJV
RkZFUl9WRVJUSUNBTExZCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmZsaXBWZXJ0
aWNhbGx5KHVuc2lnbmVkIGNoYXIqIGZyYW1lYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgd2lkdGgsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBoZWlnaHQp
Cit7CisgICAgdW5zaWduZWQgY2hhciogc2NhbmxpbmUgPSBtX3NjYW5saW5lOworICAgIGlmICgh
c2NhbmxpbmUpCisgICAgICAgIHJldHVybjsKKyAgICB1bnNpZ25lZCBpbnQgcm93Qnl0ZXMgPSB3
aWR0aCAqIDQ7CisgICAgdW5zaWduZWQgaW50IGNvdW50ID0gaGVpZ2h0IC8gMjsKKyAgICBmb3Ig
KHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgdW5zaWduZWQg
Y2hhciogcm93QSA9IGZyYW1lYnVmZmVyICsgaSAqIHJvd0J5dGVzOworICAgICAgICB1bnNpZ25l
ZCBjaGFyKiByb3dCID0gZnJhbWVidWZmZXIgKyAoaGVpZ2h0IC0gaSAtIDEpICogcm93Qnl0ZXM7
CisgICAgICAgIC8vIEZJWE1FOiB0aGlzIGlzIHdoZXJlIHRoZSBtdWx0aXBsaWNhdGlvbiBvZiB0
aGUgYWxwaGEKKyAgICAgICAgLy8gY2hhbm5lbCBpbnRvIHRoZSBjb2xvciBidWZmZXIgd2lsbCBu
ZWVkIHRvIG9jY3VyIGlmIHRoZQorICAgICAgICAvLyB1c2VyIHNwZWNpZmllcyB0aGUgInByZW11
bHRpcGx5QWxwaGEiIGZsYWcgaW4gdGhlIGNvbnRleHQKKyAgICAgICAgLy8gY3JlYXRpb24gYXR0
cmlidXRlcy4KKyAgICAgICAgbWVtY3B5KHNjYW5saW5lLCByb3dCLCByb3dCeXRlcyk7CisgICAg
ICAgIG1lbWNweShyb3dCLCByb3dBLCByb3dCeXRlcyk7CisgICAgICAgIG1lbWNweShyb3dBLCBz
Y2FubGluZSwgcm93Qnl0ZXMpOworICAgIH0KK30KKyNlbmRpZgorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWw6OmJlZ2luUGFpbnQoQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKiBjb250
ZXh0KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworCisjaWZkZWYgUkVOREVSX1RPX0RF
QlVHR0lOR19XSU5ET1cKKyAgICBTd2FwQnVmZmVycyhtX2NhbnZhc0RDKTsKKyNlbHNlCisgICAg
Ly8gRWFybGllciB2ZXJzaW9ucyBvZiB0aGlzIGNvZGUgdXNlZCB0aGUgR1BVIHRvIGZsaXAgdGhl
CisgICAgLy8gZnJhbWVidWZmZXIgdmVydGljYWxseSBiZWZvcmUgcmVhZGluZyBpdCBiYWNrIGZv
ciBjb21wb3NpdGluZworICAgIC8vIHZpYSBzb2Z0d2FyZS4gVGhpcyBjb2RlIHdhcyBxdWl0ZSBj
b21wbGljYXRlZCwgdXNlZCBhIGxvdCBvZgorICAgIC8vIEdQVSBtZW1vcnksIGFuZCBkaWRuJ3Qg
cHJvdmlkZSBhbiBvYnZpb3VzIHNwZWVkdXAuIFNpbmNlIHRoaXMKKyAgICAvLyB2ZXJ0aWNhbCBm
bGlwIGlzIG9ubHkgYSB0ZW1wb3Jhcnkgc29sdXRpb24gYW55d2F5IHVudGlsIENocm9tZQorICAg
IC8vIGlzIGZ1bGx5IEdQVSBjb21wb3NpdGVkLCBpdCB3YXNuJ3Qgd29ydGggdGhlIGNvbXBsZXhp
dHkuCisKKyAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzID0gY29udGV4dC0+Y2FudmFzKCk7
CisgICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gY2FudmFzLT5idWZmZXIoKTsKKyAgICB1
bnNpZ25lZCBjaGFyKiBwaXhlbHMgPSAwOworI2lmIFBMQVRGT1JNKFNLSUEpCisgICAgY29uc3Qg
U2tCaXRtYXAqIGNhbnZhc0JpdG1hcCA9IGltYWdlQnVmZmVyLT5jb250ZXh0KCktPnBsYXRmb3Jt
Q29udGV4dCgpLT5iaXRtYXAoKTsKKyAgICBjb25zdCBTa0JpdG1hcCogcmVhZGJhY2tCaXRtYXAg
PSAwOworICAgIEFTU0VSVChjYW52YXNCaXRtYXAtPmNvbmZpZygpID09IFNrQml0bWFwOjprQVJH
Ql84ODg4X0NvbmZpZyk7CisgICAgaWYgKGNhbnZhc0JpdG1hcC0+d2lkdGgoKSA9PSBtX2NhY2hl
ZFdpZHRoICYmIGNhbnZhc0JpdG1hcC0+aGVpZ2h0KCkgPT0gbV9jYWNoZWRIZWlnaHQpIHsKKyAg
ICAgICAgLy8gVGhpcyBpcyB0aGUgZmFzdGVzdCBhbmQgbW9zdCBjb21tb24gY2FzZS4gV2UgcmVh
ZCBiYWNrCisgICAgICAgIC8vIGRpcmVjdGx5IGludG8gdGhlIGNhbnZhcydzIGJhY2tpbmcgc3Rv
cmUuCisgICAgICAgIHJlYWRiYWNrQml0bWFwID0gY2FudmFzQml0bWFwOworICAgICAgICBpZiAo
bV9yZXNpemluZ0JpdG1hcCkgeworICAgICAgICAgICAgZGVsZXRlIG1fcmVzaXppbmdCaXRtYXA7
CisgICAgICAgICAgICBtX3Jlc2l6aW5nQml0bWFwID0gMDsKKyAgICAgICAgfQorICAgIH0gZWxz
ZSB7CisgICAgICAgIC8vIFdlIG5lZWQgdG8gYWxsb2NhdGUgYSB0ZW1wb3JhcnkgYml0bWFwIGZv
ciByZWFkaW5nIGJhY2sgdGhlCisgICAgICAgIC8vIHBpeGVsIGRhdGEuIFdlIHdpbGwgdGhlbiB1
c2UgU2tpYSB0byByZXNjYWxlIHRoaXMgYml0bWFwIHRvCisgICAgICAgIC8vIHRoZSBzaXplIG9m
IHRoZSBjYW52YXMncyBiYWNraW5nIHN0b3JlLgorICAgICAgICBpZiAobV9yZXNpemluZ0JpdG1h
cCAmJiAobV9yZXNpemluZ0JpdG1hcC0+d2lkdGgoKSAhPSBtX2NhY2hlZFdpZHRoIHx8IG1fcmVz
aXppbmdCaXRtYXAtPmhlaWdodCgpICE9IG1fY2FjaGVkSGVpZ2h0KSkgeworICAgICAgICAgICAg
ZGVsZXRlIG1fcmVzaXppbmdCaXRtYXA7CisgICAgICAgICAgICBtX3Jlc2l6aW5nQml0bWFwID0g
MDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW1fcmVzaXppbmdCaXRtYXApIHsKKyAgICAgICAg
ICAgIG1fcmVzaXppbmdCaXRtYXAgPSBuZXcgU2tCaXRtYXAoKTsKKyAgICAgICAgICAgIG1fcmVz
aXppbmdCaXRtYXAtPnNldENvbmZpZyhTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jYWNoZWRXaWR0aCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2NhY2hlZEhlaWdodCk7CisgICAg
ICAgICAgICBpZiAoIW1fcmVzaXppbmdCaXRtYXAtPmFsbG9jUGl4ZWxzKCkpIHsKKyAgICAgICAg
ICAgICAgICBkZWxldGUgbV9yZXNpemluZ0JpdG1hcDsKKyAgICAgICAgICAgICAgICBtX3Jlc2l6
aW5nQml0bWFwID0gMDsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgcmVhZGJhY2tCaXRtYXAgPSBtX3Jlc2l6aW5nQml0bWFwOworICAg
IH0KKworICAgIC8vIFJlYWQgYmFjayB0aGUgZnJhbWUgYnVmZmVyLgorICAgIFNrQXV0b0xvY2tQ
aXhlbHMgYml0bWFwTG9jaygqcmVhZGJhY2tCaXRtYXApOworICAgIHBpeGVscyA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXIqPihyZWFkYmFja0JpdG1hcC0+Z2V0UGl4ZWxzKCkpOworICAgIGds
UmVhZFBpeGVscygwLCAwLCBtX2NhY2hlZFdpZHRoLCBtX2NhY2hlZEhlaWdodCwgR0xfQkdSQSwg
R0xfVU5TSUdORURfQllURSwgcGl4ZWxzKTsKKyNlbGlmIFBMQVRGT1JNKENHKQorICAgIGlmICht
X3JlbmRlck91dHB1dCkgeworICAgICAgICBBU1NFUlQoQ0dCaXRtYXBDb250ZXh0R2V0V2lkdGgo
bV9jZ0NvbnRleHQpID09IG1fY2FjaGVkV2lkdGgpOworICAgICAgICBBU1NFUlQoQ0dCaXRtYXBD
b250ZXh0R2V0SGVpZ2h0KG1fY2dDb250ZXh0KSA9PSBtX2NhY2hlZEhlaWdodCk7CisgICAgICAg
IHBpeGVscyA9IG1fcmVuZGVyT3V0cHV0OworICAgICAgICBnbFJlYWRQaXhlbHMoMCwgMCwgbV9j
YWNoZWRXaWR0aCwgbV9jYWNoZWRIZWlnaHQsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIHBp
eGVscyk7CisgICAgfQorI2Vsc2UKKyNlcnJvciBNdXN0IHBvcnQgdG8geW91ciBwbGF0Zm9ybQor
I2VuZGlmCisKKyNpZmRlZiBGTElQX0ZSQU1FQlVGRkVSX1ZFUlRJQ0FMTFkKKyAgICBpZiAocGl4
ZWxzKQorICAgICAgICBmbGlwVmVydGljYWxseShwaXhlbHMsIG1fY2FjaGVkV2lkdGgsIG1fY2Fj
aGVkSGVpZ2h0KTsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oU0tJQSkKKyAgICBpZiAobV9yZXNp
emluZ0JpdG1hcCkgeworICAgICAgICAvLyBXZSBuZWVkIHRvIGRyYXcgdGhlIHJlc2l6aW5nIGJp
dG1hcCBpbnRvIHRoZSBjYW52YXMncyBiYWNraW5nIHN0b3JlLgorICAgICAgICBTa0NhbnZhcyBj
YW52YXMoKmNhbnZhc0JpdG1hcCk7CisgICAgICAgIFNrUmVjdCBkc3Q7CisgICAgICAgIGRzdC5z
ZXQoMCwgMCwgY2FudmFzQml0bWFwLT53aWR0aCgpLCBjYW52YXNCaXRtYXAtPmhlaWdodCgpKTsK
KyAgICAgICAgY2FudmFzLmRyYXdCaXRtYXBSZWN0KCptX3Jlc2l6aW5nQml0bWFwLCAwLCBkc3Qp
OworICAgIH0KKyNlbGlmIFBMQVRGT1JNKENHKQorICAgIGlmIChtX3JlbmRlck91dHB1dCkgewor
ICAgICAgICBDR0ltYWdlUmVmIGNnSW1hZ2UgPSBDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZSht
X2NnQ29udGV4dCk7CisgICAgICAgIC8vIENTUyBzdHlsaW5nIG1heSBjYXVzZSB0aGUgY2FudmFz
J3MgY29udGVudCB0byBiZSByZXNpemVkIG9uCisgICAgICAgIC8vIHRoZSBwYWdlLiBHbyBiYWNr
IHRvIHRoZSBDYW52YXMgdG8gZmlndXJlIG91dCB0aGUgY29ycmVjdAorICAgICAgICAvLyB3aWR0
aCBhbmQgaGVpZ2h0IHRvIGRyYXcuCisgICAgICAgIENHUmVjdCByZWN0ID0gQ0dSZWN0TWFrZSgw
LCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+Y2FudmFzKCkt
PndpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5jYW52
YXMoKS0+aGVpZ2h0KCkpOworICAgICAgICAvLyBXZSB3YW50IHRvIGNvbXBsZXRlbHkgb3Zlcndy
aXRlIHRoZSBwcmV2aW91cyBmcmFtZSdzCisgICAgICAgIC8vIHJlbmRlcmluZyByZXN1bHRzLgor
ICAgICAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoaW1hZ2VCdWZmZXItPmNvbnRleHQoKS0+cGxh
dGZvcm1Db250ZXh0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrQ0dCbGVuZE1v
ZGVDb3B5KTsKKyAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGltYWdlQnVmZmVyLT5jb250ZXh0
KCktPnBsYXRmb3JtQ29udGV4dCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdCwg
Y2dJbWFnZSk7CisgICAgICAgIENHSW1hZ2VSZWxlYXNlKGNnSW1hZ2UpOworICAgIH0KKyNlbHNl
CisjZXJyb3IgTXVzdCBwb3J0IHRvIHlvdXIgcGxhdGZvcm0KKyNlbmRpZgorCisjZW5kaWYgIC8v
IFJFTkRFUl9UT19ERUJVR0dJTkdfV0lORE9XCit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0RJ
bnRlcm5hbDo6dmFsaWRhdGVUZXh0dXJlVGFyZ2V0KGludCB0YXJnZXQpCit7CisgICAgcmV0dXJu
ICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCB8fCB0YXJnZXQgPT0gR0xfVEVYVFVSRV9DVUJFX01B
UCk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6dmFsaWRhdGVUZXh0dXJl
UGFyYW1ldGVyKGludCBwYXJhbSkKK3sKKyAgICByZXR1cm4gKHBhcmFtID09IEdMX1RFWFRVUkVf
TUFHX0ZJTFRFUgorICAgICAgICAgfHwgcGFyYW0gPT0gR0xfVEVYVFVSRV9NSU5fRklMVEVSCisg
ICAgICAgICB8fCBwYXJhbSA9PSBHTF9URVhUVVJFX1dSQVBfUworICAgICAgICAgfHwgcGFyYW0g
PT0gR0xfVEVYVFVSRV9XUkFQX1QpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWw6OmFjdGl2ZVRleHR1cmUodW5zaWduZWQgbG9uZyB0ZXh0dXJlKQoreworICAgIC8vIEZJWE1F
OiBxdWVyeSBudW1iZXIgb2YgdGV4dHVyZXMgYXZhaWxhYmxlLgorICAgIGlmICh0ZXh0dXJlIDwg
R0xfVEVYVFVSRTAgfHwgdGV4dHVyZSA+IEdMX1RFWFRVUkUwKzMyKQorICAgICAgICAvLyBGSVhN
RTogcmFpc2UgZXhjZXB0aW9uLgorICAgICAgICByZXR1cm47CisKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBnbEFjdGl2ZVRleHR1cmUodGV4dHVyZSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDo6YmluZEJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYW52YXNCdWZmZXIqIGJ1
ZmZlcikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBHTHVpbnQgYnVmSUQgPSBF
WFRSQUNUKGJ1ZmZlcik7CisgICAgaWYgKHRhcmdldCA9PSBHTF9BUlJBWV9CVUZGRVIpCisgICAg
ICAgIG1fYm91bmRBcnJheUJ1ZmZlciA9IGJ1ZklEOworICAgIGdsQmluZEJ1ZmZlcih0YXJnZXQs
IGJ1ZklEKTsKK30KKworLy8gSWYgd2UgZGlkbid0IGhhdmUgdG8gaGFjayBHTF9URVhUVVJFX1dS
QVBfUiBmb3IgY3ViZSBtYXBzLAorLy8gd2UgY291bGQganVzdCB1c2U6CisvLyBHTF9TQU1FX01F
VEhPRF8yX1gyKEJpbmRUZXh0dXJlLCBiaW5kVGV4dHVyZSwgdW5zaWduZWQgbG9uZywgQ2FudmFz
VGV4dHVyZSopCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmJpbmRUZXh0dXJlKHVu
c2lnbmVkIGxvbmcgdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDYW52YXNUZXh0dXJlKiB0ZXh0dXJlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIHVuc2lnbmVkIGludCB0ZXh0dXJlT2JqZWN0ID0gRVhUUkFDVCh0ZXh0dXJlKTsK
KworICAgIGdsQmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlT2JqZWN0KTsKKworICAgIC8vIEZJ
WE1FOiBHTF9URVhUVVJFX1dSQVBfUiBpc24ndCBleHBvc2VkIGluIHRoZSBPcGVuR0wgRVMgMi4w
CisgICAgLy8gQVBJLiBPbiBkZXNrdG9wIE9wZW5HTCBpbXBsZW1lbnRhdGlvbnMgaXQgc2VlbXMg
bmVjZXNzYXJ5IHRvCisgICAgLy8gc2V0IHRoaXMgd3JhcCBtb2RlIHRvIEdMX0NMQU1QX1RPX0VE
R0UgdG8gZ2V0IGNvcnJlY3QgYmVoYXZpb3IKKyAgICAvLyBvZiBjdWJlIG1hcHMuCisgICAgaWYg
KHRleHR1cmUpIHsKKyAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9URVhUVVJFX0NVQkVfTUFQKSB7
CisgICAgICAgICAgICBpZiAoIXRleHR1cmUtPmlzQ3ViZU1hcFJXcmFwTW9kZUluaXRpYWxpemVk
KCkpIHsKKyAgICAgICAgICAgICAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV9DVUJFX01B
UCwgR0xfVEVYVFVSRV9XUkFQX1IsIEdMX0NMQU1QX1RPX0VER0UpOworICAgICAgICAgICAgICAg
IHRleHR1cmUtPnNldEN1YmVNYXBSV3JhcE1vZGVJbml0aWFsaXplZCh0cnVlKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICB0ZXh0dXJlLT5zZXRDdWJlTWFwUldy
YXBNb2RlSW5pdGlhbGl6ZWQoZmFsc2UpOworICAgIH0KK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzREludGVybmFsOjpidWZmZXJEYXRhSW1wbCh1bnNpZ25lZCBsb25nIHRhcmdldCwgaW50IHNp
emUsIGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGxvbmcgdXNhZ2UpCit7CisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgLy8gRklYTUU6IG1ha2UgdGhpcyB2ZXJpZmljYXRpb24gbW9y
ZSBlZmZpY2llbnQuCisgICAgR0xpbnQgYmluZGluZyA9IDA7CisgICAgR0xlbnVtIGJpbmRpbmdf
dGFyZ2V0ID0gR0xfQVJSQVlfQlVGRkVSX0JJTkRJTkc7CisgICAgaWYgKHRhcmdldCA9PSBHTF9F
TEVNRU5UX0FSUkFZX0JVRkZFUikKKyAgICAgICAgYmluZGluZ190YXJnZXQgPSBHTF9FTEVNRU5U
X0FSUkFZX0JVRkZFUl9CSU5ESU5HOworICAgIGdsR2V0SW50ZWdlcnYoYmluZGluZ190YXJnZXQs
ICZiaW5kaW5nKTsKKyAgICBpZiAoYmluZGluZyA8PSAwKSB7CisgICAgICAgIC8vIEZJWE1FOiBy
YWlzZSBleGNlcHRpb24uCisgICAgICAgIC8vIExvZ01lc3NhZ2VmKCgiYnVmZmVyRGF0YTogbm8g
YnVmZmVyIGJvdW5kIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZ2xCdWZmZXJE
YXRhKHRhcmdldCwKKyAgICAgICAgICAgICAgICAgICBzaXplLAorICAgICAgICAgICAgICAgICAg
IGRhdGEsCisgICAgICAgICAgICAgICAgICAgdXNhZ2UpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWw6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSh1bnNpZ25lZCBsb25nIGlu
ZGV4KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmIChpbmRleCA8IE51bVRy
YWNrZWRQb2ludGVyU3RhdGVzKQorICAgICAgICBtX3ZlcnRleEF0dHJpYlBvaW50ZXJTdGF0ZVtp
bmRleF0uZW5hYmxlZCA9IGZhbHNlOworICAgIGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGlu
ZGV4KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjplbmFibGVWZXJ0ZXhB
dHRyaWJBcnJheSh1bnNpZ25lZCBsb25nIGluZGV4KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmIChpbmRleCA8IE51bVRyYWNrZWRQb2ludGVyU3RhdGVzKQorICAgICAgICBt
X3ZlcnRleEF0dHJpYlBvaW50ZXJTdGF0ZVtpbmRleF0uZW5hYmxlZCA9IHRydWU7CisgICAgZ2xF
bmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0RJbnRlcm5hbDo6dmVydGV4QXR0cmliUG9pbnRlcih1bnNpZ25lZCBsb25nIGluZHgsIGludCBz
aXplLCBpbnQgdHlwZSwgYm9vbCBub3JtYWxpemVkLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc3RyaWRlLCB1bnNpZ25l
ZCBsb25nIG9mZnNldCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIGlmICht
X2JvdW5kQXJyYXlCdWZmZXIgPD0gMCkgeworICAgICAgICAvLyBGSVhNRTogcmFpc2UgZXhjZXB0
aW9uLgorICAgICAgICAvLyBMb2dNZXNzYWdlZigoImJ1ZmZlckRhdGE6IG5vIGJ1ZmZlciBib3Vu
ZCIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChpbmR4IDwgTnVtVHJhY2tl
ZFBvaW50ZXJTdGF0ZXMpIHsKKyAgICAgICAgVmVydGV4QXR0cmliUG9pbnRlclN0YXRlJiBzdGF0
ZSA9IG1fdmVydGV4QXR0cmliUG9pbnRlclN0YXRlW2luZHhdOworICAgICAgICBzdGF0ZS5idWZm
ZXIgPSBtX2JvdW5kQXJyYXlCdWZmZXI7CisgICAgICAgIHN0YXRlLmluZHggPSBpbmR4OworICAg
ICAgICBzdGF0ZS5zaXplID0gc2l6ZTsKKyAgICAgICAgc3RhdGUudHlwZSA9IHR5cGU7CisgICAg
ICAgIHN0YXRlLm5vcm1hbGl6ZWQgPSBub3JtYWxpemVkOworICAgICAgICBzdGF0ZS5zdHJpZGUg
PSBzdHJpZGU7CisgICAgICAgIHN0YXRlLm9mZnNldCA9IG9mZnNldDsKKyAgICB9CisKKyAgICBn
bFZlcnRleEF0dHJpYlBvaW50ZXIoaW5keCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihzdGF0
aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWw6OnZpZXdwb3J0SW1wbChsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0
aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpCit7CisgICAgZ2xWaWV3cG9ydCh4LCB5LCB3aWR0aCwg
aGVpZ2h0KTsKK30KKworLy8gR3JhcGhpY3NDb250ZXh0M0QgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyogSGVscGVyIG1hY3JvcyBmb3Ig
d2hlbiB3ZSdyZSBqdXN0IHdyYXBwaW5nIGEgZ2wgbWV0aG9kLCBzbyB0aGF0CisgKiB3ZSBjYW4g
YXZvaWQgaGF2aW5nIHRvIHR5cGUgdGhpcyA1MDAgdGltZXMuICBOb3RlIHRoYXQgdGhlc2UgTVVT
VAorICogTk9UIEJFIFVTRUQgaWYgd2UgbmVlZCB0byBjaGVjayBhbnkgb2YgdGhlIHBhcmFtZXRl
cnMuCisgKi8KKworI2RlZmluZSBHTF9TQU1FX01FVEhPRF8wKGdsbmFtZSwgbmFtZSkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6Om5hbWUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICBnbCMjZ2xuYW1lKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgR0xfU0FNRV9NRVRIT0RfMShnbG5h
bWUsIG5hbWUsIHQxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExKSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgZ2wjI2dsbmFtZShhMSk7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIEdMX1NB
TUVfTUVUSE9EXzFfWChnbG5hbWUsIG5hbWUsIHQxKSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGdsIyNnbG5hbWUoRVhUUkFDVChhMSkp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30K
KworI2RlZmluZSBHTF9TQU1FX01FVEhPRF8yKGdsbmFtZSwgbmFtZSwgdDEsIHQyKSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUo
dDEgYTEsIHQyIGEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBnbCMjZ2xu
YW1lKGExLCBhMik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgR0xfU0FNRV9NRVRIT0RfMl9YMTIoZ2xuYW1lLCBu
YW1lLCB0MSwgdDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpuYW1lKHQxIGExLCB0MiBhMikgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgZ2wjI2dsbmFtZShFWFRSQUNUKGExKSwgRVhUUkFDVChhMikpOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIEdMX1NBTUVfTUVUSE9E
XzJfWDIoZ2xuYW1lLCBuYW1lLCB0MSwgdDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIpICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIGdsIyNnbG5hbWUoYTEsIEVYVFJBQ1QoYTIpKTsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworI2RlZmlu
ZSBHTF9TQU1FX01FVEhPRF8zKGdsbmFtZSwgbmFtZSwgdDEsIHQyLCB0MykgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQy
IGEyLCB0MyBhMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBnbCMjZ2xuYW1lKGExLCBh
MiwgYTMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCit9CisKKyNkZWZpbmUgR0xfU0FNRV9NRVRIT0RfM19YMTIoZ2xuYW1lLCBuYW1lLCB0MSwg
dDIsIHQzKSAgICAgICAgICAgICAgICAgICAgICAgICBcCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
Z2wjI2dsbmFtZShFWFRSQUNUKGExKSwgRVhUUkFDVChhMiksIGEzKTsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIEdMX1NBTUVfTUVUSE9EXzNfWDIoZ2xu
YW1lLCBuYW1lLCB0MSwgdDIsIHQzKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzKSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIGdsIyNnbG5hbWUoYTEsIEVYVFJBQ1QoYTIpLCBhMyk7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworI2RlZmluZSBHTF9TQU1F
X01FVEhPRF80KGdsbmFtZSwgbmFtZSwgdDEsIHQyLCB0MywgdDQpICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBh
MywgdDQgYTQpICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBnbCMjZ2xuYW1lKGExLCBhMiwgYTMsIGE0
KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisK
KyNkZWZpbmUgR0xfU0FNRV9NRVRIT0RfNF9YNChnbG5hbWUsIG5hbWUsIHQxLCB0MiwgdDMsIHQ0
KSAgICAgICAgICAgICAgICAgICAgICBcCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQx
IGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0KSAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZ2wjI2dsbmFt
ZShhMSwgYTIsIGEzLCBFWFRSQUNUKGE0KSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorfQorCisjZGVmaW5lIEdMX1NBTUVfTUVUSE9EXzUoZ2xuYW1lLCBuYW1lLCB0
MSwgdDIsIHQzLCB0NCwgdDUpICAgICAgICAgICAgICAgICAgICAgXAordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUpICAgICAgICAg
ICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgIGdsIyNnbG5hbWUoYTEsIGEyLCBhMywgYTQsIGE1KTsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworI2RlZmluZSBHTF9TQU1FX01FVEhPRF81
X1g0KGdsbmFtZSwgbmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1KSAgICAgICAgICAgICAgICAgIFwK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQs
IHQ1IGE1KSAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICBnbCMjZ2xuYW1lKGExLCBhMiwgYTMsIEVYVFJBQ1QoYTQp
LCBhNSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUg
R0xfU0FNRV9NRVRIT0RfNihnbG5hbWUsIG5hbWUsIHQxLCB0MiwgdDMsIHQ0LCB0NSwgdDYpICAg
ICAgICAgICAgICAgICBcCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExLCB0MiBh
MiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSwgdDYgYTYpICAgICAgICAgXAoreyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZ2wjI2dsbmFtZShhMSwgYTIs
IGEzLCBhNCwgYTUsIGE2KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorfQorCisjZGVmaW5lIEdMX1NBTUVfTUVUSE9EXzgoZ2xuYW1lLCBuYW1lLCB0MSwgdDIsIHQz
LCB0NCwgdDUsIHQ2LCB0NywgdDgpICAgICAgICAgXAordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUsIHQ2IGE2LCB0NyBhNywgdDgg
YTgpICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgZ2wjI2dsbmFtZShhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgpOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCitQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4
dDNEPiBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKCkKK3sKKyAgICBQYXNzT3duUHRyPEdyYXBo
aWNzQ29udGV4dDNEPiBjb250ZXh0ID0gbmV3IEdyYXBoaWNzQ29udGV4dDNEKCk7CisgICAgLy8g
RklYTUU6IGFkZCBlcnJvciBjaGVja2luZworICAgIHJldHVybiBjb250ZXh0OworfQorCitHcmFw
aGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoKQorICAgIDogbV9jdXJyZW50V2lkdGgo
MCkKKyAgICAsIG1fY3VycmVudEhlaWdodCgwKQorICAgICwgbV9pbnRlcm5hbChuZXcgR3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbCgpKQoreworfQorCitHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBo
aWNzQ29udGV4dDNEKCkKK3sKK30KKworUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBHcmFwaGlj
c0NvbnRleHQzRDo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1faW50ZXJuYWwtPnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKTsKK30KKworUGxhdGZv
cm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1UZXh0dXJlKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9pbnRlcm5hbC0+cGxhdGZvcm1UZXh0dXJlKCk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmNoZWNrRXJyb3IoKSBjb25zdAoreworICAgIG1faW50ZXJuYWwtPmNo
ZWNrRXJyb3IoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bWFrZUNvbnRleHRDdXJy
ZW50KCkKK3sKKyAgICBtX2ludGVybmFsLT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCit7Cisg
ICAgaWYgKHdpZHRoID09IG1fY3VycmVudFdpZHRoICYmIGhlaWdodCA9PSBtX2N1cnJlbnRIZWln
aHQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY3VycmVudFdpZHRoID0gd2lkdGg7CisgICAg
bV9jdXJyZW50SGVpZ2h0ID0gaGVpZ2h0OworCisgICAgbV9pbnRlcm5hbC0+cmVzaGFwZSh3aWR0
aCwgaGVpZ2h0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmVnaW5QYWludChDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0QqIGNvbnRleHQpCit7CisgICAgbV9pbnRlcm5hbC0+YmVnaW5Q
YWludChjb250ZXh0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZW5kUGFpbnQoKQor
eworfQorCitpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OnNpemVJbkJ5dGVzKGludCB0eXBlKQorewor
ICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgR0xfQllURToKKyAgICAgICAgcmV0dXJuIHNp
emVvZihHTGJ5dGUpOworICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgcmV0dXJu
IHNpemVvZihHTHVieXRlKTsKKyAgICBjYXNlIEdMX1NIT1JUOgorICAgICAgICByZXR1cm4gc2l6
ZW9mKEdMc2hvcnQpOworICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6CisgICAgICAgIHJldHVy
biBzaXplb2YoR0x1c2hvcnQpOworICAgIGNhc2UgR0xfSU5UOgorICAgICAgICByZXR1cm4gc2l6
ZW9mKEdMaW50KTsKKyAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgICAgcmV0dXJuIHNp
emVvZihHTHVpbnQpOworICAgIGNhc2UgR0xfRkxPQVQ6CisgICAgICAgIHJldHVybiBzaXplb2Yo
R0xmbG9hdCk7CisgICAgZGVmYXVsdDogLy8gRklYTUU6IGRlZmF1bHQgY2FzZXMgYXJlIGRpc2Nv
dXJhZ2VkIGluIFdlYktpdC4KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCit1bnNpZ25l
ZCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlQnVmZmVyKCkKK3sKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBHTHVpbnQgbzsKKyAgICBnbEdlbkJ1ZmZlcnMoMSwgJm8pOworICAgIHJl
dHVybiBvOworfQorCit1bnNpZ25lZCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlRnJhbWVidWZm
ZXIoKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMdWludCBvOworICAgIGds
R2VuRnJhbWVidWZmZXJzKDEsICZvKTsKKyAgICByZXR1cm4gbzsKK30KKwordW5zaWduZWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVByb2dyYW0oKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIHJldHVybiBnbENyZWF0ZVByb2dyYW0oKTsKK30KKwordW5zaWduZWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCit7CisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgR0x1aW50IG87CisgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZvKTsKKyAg
ICByZXR1cm4gbzsKK30KKwordW5zaWduZWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVNoYWRl
cihTaGFkZXJUeXBlIHR5cGUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0
dXJuIGdsQ3JlYXRlU2hhZGVyKCh0eXBlID09IEZSQUdNRU5UX1NIQURFUikgPyBHTF9GUkFHTUVO
VF9TSEFERVIgOiBHTF9WRVJURVhfU0hBREVSKTsKK30KKwordW5zaWduZWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmNyZWF0ZVRleHR1cmUoKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IEdMdWludCBvOworICAgIGdsR2VuVGV4dHVyZXMoMSwgJm8pOworICAgIHJldHVybiBvOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVCdWZmZXIodW5zaWduZWQgYnVmZmVyKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsRGVsZXRlQnVmZmVycygxLCAmYnVm
ZmVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlRnJhbWVidWZmZXIodW5z
aWduZWQgZnJhbWVidWZmZXIpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2xE
ZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJmZyYW1lYnVmZmVyKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6ZGVsZXRlUHJvZ3JhbSh1bnNpZ25lZCBwcm9ncmFtKQoreworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGdsRGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlUmVuZGVyYnVmZmVyKHVuc2lnbmVkIHJlbmRlcmJ1ZmZl
cikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZl
cnMoMSwgJnJlbmRlcmJ1ZmZlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0
ZVNoYWRlcih1bnNpZ25lZCBzaGFkZXIpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgZ2xEZWxldGVTaGFkZXIoc2hhZGVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
ZGVsZXRlVGV4dHVyZSh1bnNpZ25lZCB0ZXh0dXJlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJnRleHR1cmUpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjphY3RpdmVUZXh0dXJlKHVuc2lnbmVkIGxvbmcgdGV4dHVyZSkKK3sKKyAg
ICBtX2ludGVybmFsLT5hY3RpdmVUZXh0dXJlKHRleHR1cmUpOworfQorCitHTF9TQU1FX01FVEhP
RF8yX1gxMihBdHRhY2hTaGFkZXIsIGF0dGFjaFNoYWRlciwgQ2FudmFzUHJvZ3JhbSosIENhbnZh
c1NoYWRlciopCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRBdHRyaWJMb2NhdGlvbihD
YW52YXNQcm9ncmFtKiBwcm9ncmFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGxvbmcgaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmICghcHJvZ3Jh
bSkKKyAgICAgICAgcmV0dXJuOworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsQmlu
ZEF0dHJpYkxvY2F0aW9uKEVYVFJBQ1QocHJvZ3JhbSksIGluZGV4LCBuYW1lLnV0ZjgoKS5kYXRh
KCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kQnVmZmVyKHVuc2lnbmVkIGxv
bmcgdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYW52YXNCdWZm
ZXIqIGJ1ZmZlcikKK3sKKyAgICBtX2ludGVybmFsLT5iaW5kQnVmZmVyKHRhcmdldCwgYnVmZmVy
KTsKK30KKworR0xfU0FNRV9NRVRIT0RfMl9YMihCaW5kRnJhbWVidWZmZXIsIGJpbmRGcmFtZWJ1
ZmZlciwgdW5zaWduZWQgbG9uZywgQ2FudmFzRnJhbWVidWZmZXIqKQorCitHTF9TQU1FX01FVEhP
RF8yX1gyKEJpbmRSZW5kZXJidWZmZXIsIGJpbmRSZW5kZXJidWZmZXIsIHVuc2lnbmVkIGxvbmcs
IENhbnZhc1JlbmRlcmJ1ZmZlciopCisKKy8vIElmIHdlIGRpZG4ndCBoYXZlIHRvIGhhY2sgR0xf
VEVYVFVSRV9XUkFQX1IgZm9yIGN1YmUgbWFwcywKKy8vIHdlIGNvdWxkIGp1c3QgdXNlOgorLy8g
R0xfU0FNRV9NRVRIT0RfMl9YMihCaW5kVGV4dHVyZSwgYmluZFRleHR1cmUsIHVuc2lnbmVkIGxv
bmcsIENhbnZhc1RleHR1cmUqKQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZFRleHR1cmUo
dW5zaWduZWQgbG9uZyB0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDYW52YXNUZXh0dXJlKiB0ZXh0dXJlKQoreworICAgIG1faW50ZXJuYWwtPmJpbmRUZXh0dXJl
KHRhcmdldCwgdGV4dHVyZSk7Cit9CisKK0dMX1NBTUVfTUVUSE9EXzQoQmxlbmRDb2xvciwgYmxl
bmRDb2xvciwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlKQorCitHTF9TQU1FX01FVEhP
RF8xKEJsZW5kRXF1YXRpb24sIGJsZW5kRXF1YXRpb24sIHVuc2lnbmVkIGxvbmcpCisKK0dMX1NB
TUVfTUVUSE9EXzIoQmxlbmRFcXVhdGlvblNlcGFyYXRlLCBibGVuZEVxdWF0aW9uU2VwYXJhdGUs
IHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCisKK0dMX1NBTUVfTUVUSE9EXzIoQmxlbmRG
dW5jLCBibGVuZEZ1bmMsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCisKK0dMX1NBTUVf
TUVUSE9EXzQoQmxlbmRGdW5jU2VwYXJhdGUsIGJsZW5kRnVuY1NlcGFyYXRlLCB1bnNpZ25lZCBs
b25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbnQg
c2l6ZSwgdW5zaWduZWQgbG9uZyB1c2FnZSkKK3sKKyAgICBtX2ludGVybmFsLT5idWZmZXJEYXRh
SW1wbCh0YXJnZXQsIHNpemUsIDAsIHVzYWdlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6YnVmZmVyRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgQ2FudmFzQXJyYXkqIGFycmF5LCB1
bnNpZ25lZCBsb25nIHVzYWdlKQoreworICAgIG1faW50ZXJuYWwtPmJ1ZmZlckRhdGFJbXBsKHRh
cmdldCwgYXJyYXktPnNpemVJbkJ5dGVzKCksIGFycmF5LT5iYXNlQWRkcmVzcygpLCB1c2FnZSk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZlclN1YkRhdGEodW5zaWduZWQgbG9u
ZyB0YXJnZXQsIGxvbmcgb2Zmc2V0LCBDYW52YXNBcnJheSogYXJyYXkpCit7CisgICAgaWYgKCFh
cnJheSB8fCAhYXJyYXktPmxlbmd0aCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICAvLyBGSVhNRTogbWFrZSB0aGlzIHZlcmlmaWNhdGlvbiBtb3Jl
IGVmZmljaWVudC4KKyAgICBHTGludCBiaW5kaW5nID0gMDsKKyAgICBHTGVudW0gYmluZGluZ190
YXJnZXQgPSBHTF9BUlJBWV9CVUZGRVJfQklORElORzsKKyAgICBpZiAodGFyZ2V0ID09IEdMX0VM
RU1FTlRfQVJSQVlfQlVGRkVSKQorICAgICAgICBiaW5kaW5nX3RhcmdldCA9IEdMX0VMRU1FTlRf
QVJSQVlfQlVGRkVSX0JJTkRJTkc7CisgICAgZ2xHZXRJbnRlZ2VydihiaW5kaW5nX3RhcmdldCwg
JmJpbmRpbmcpOworICAgIGlmIChiaW5kaW5nIDw9IDApIHsKKyAgICAgICAgLy8gRklYTUU6IHJh
aXNlIGV4Y2VwdGlvbi4KKyAgICAgICAgLy8gTG9nTWVzc2FnZWYoKCJidWZmZXJTdWJEYXRhOiBu
byBidWZmZXIgYm91bmQiKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZ2xCdWZmZXJT
dWJEYXRhKHRhcmdldCwgb2Zmc2V0LCBhcnJheS0+c2l6ZUluQnl0ZXMoKSwgYXJyYXktPmJhc2VB
ZGRyZXNzKCkpOworfQorCit1bnNpZ25lZCBsb25nIEdyYXBoaWNzQ29udGV4dDNEOjpjaGVja0Zy
YW1lYnVmZmVyU3RhdHVzKHVuc2lnbmVkIGxvbmcgdGFyZ2V0KQoreworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIHJldHVybiBnbENoZWNrRnJhbWVidWZmZXJTdGF0dXModGFyZ2V0KTsK
K30KKworR0xfU0FNRV9NRVRIT0RfMShDbGVhciwgY2xlYXIsIHVuc2lnbmVkIGxvbmcpCisKK0dM
X1NBTUVfTUVUSE9EXzQoQ2xlYXJDb2xvciwgY2xlYXJDb2xvciwgZG91YmxlLCBkb3VibGUsIGRv
dWJsZSwgZG91YmxlKQorCitHTF9TQU1FX01FVEhPRF8xKENsZWFyRGVwdGgsIGNsZWFyRGVwdGgs
IGRvdWJsZSkKKworR0xfU0FNRV9NRVRIT0RfMShDbGVhclN0ZW5jaWwsIGNsZWFyU3RlbmNpbCwg
bG9uZykKKworR0xfU0FNRV9NRVRIT0RfNChDb2xvck1hc2ssIGNvbG9yTWFzaywgYm9vbCwgYm9v
bCwgYm9vbCwgYm9vbCkKKworR0xfU0FNRV9NRVRIT0RfMV9YKENvbXBpbGVTaGFkZXIsIGNvbXBp
bGVTaGFkZXIsIENhbnZhc1NoYWRlciopCisKK0dMX1NBTUVfTUVUSE9EXzgoQ29weVRleEltYWdl
MkQsIGNvcHlUZXhJbWFnZTJELCB1bnNpZ25lZCBsb25nLCBsb25nLCB1bnNpZ25lZCBsb25nLCBs
b25nLCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBsb25nKQorCitHTF9TQU1F
X01FVEhPRF84KENvcHlUZXhTdWJJbWFnZTJELCBjb3B5VGV4U3ViSW1hZ2UyRCwgdW5zaWduZWQg
bG9uZywgbG9uZywgbG9uZywgbG9uZywgbG9uZywgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWdu
ZWQgbG9uZykKKworR0xfU0FNRV9NRVRIT0RfMShDdWxsRmFjZSwgY3VsbEZhY2UsIHVuc2lnbmVk
IGxvbmcpCisKK0dMX1NBTUVfTUVUSE9EXzEoRGVwdGhGdW5jLCBkZXB0aEZ1bmMsIHVuc2lnbmVk
IGxvbmcpCisKK0dMX1NBTUVfTUVUSE9EXzEoRGVwdGhNYXNrLCBkZXB0aE1hc2ssIGJvb2wpCisK
K0dMX1NBTUVfTUVUSE9EXzIoRGVwdGhSYW5nZSwgZGVwdGhSYW5nZSwgZG91YmxlLCBkb3VibGUp
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRldGFjaFNoYWRlcihDYW52YXNQcm9ncmFtKiBw
cm9ncmFtLCBDYW52YXNTaGFkZXIqIHNoYWRlcikKK3sKKyAgICBpZiAoIXByb2dyYW0gfHwgIXNo
YWRlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
Z2xEZXRhY2hTaGFkZXIoRVhUUkFDVChwcm9ncmFtKSwgRVhUUkFDVChzaGFkZXIpKTsKK30KKwor
R0xfU0FNRV9NRVRIT0RfMShEaXNhYmxlLCBkaXNhYmxlLCB1bnNpZ25lZCBsb25nKQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgbG9u
ZyBpbmRleCkKK3sKKyAgICBtX2ludGVybmFsLT5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaW5k
ZXgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkcmF3QXJyYXlzKHVuc2lnbmVkIGxv
bmcgbW9kZSwgbG9uZyBmaXJzdCwgbG9uZyBjb3VudCkKK3sKKyAgICBzd2l0Y2ggKG1vZGUpIHsK
KyAgICBjYXNlIEdMX1RSSUFOR0xFUzoKKyAgICBjYXNlIEdMX1RSSUFOR0xFX1NUUklQOgorICAg
IGNhc2UgR0xfVFJJQU5HTEVfRkFOOgorICAgIGNhc2UgR0xfUE9JTlRTOgorICAgIGNhc2UgR0xf
TElORV9TVFJJUDoKKyAgICBjYXNlIEdMX0xJTkVfTE9PUDoKKyAgICBjYXNlIEdMX0xJTkVTOgor
ICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OiAvLyBGSVhNRTogZGVmYXVsdCBjYXNlcyBhcmUg
ZGlzY291cmFnZWQgaW4gV2ViS2l0LgorICAgICAgICAvLyBGSVhNRTogb3V0cHV0IGxvZyBtZXNz
YWdlLCByYWlzZSBleGNlcHRpb24uCisgICAgICAgIC8vIExvZ01lc3NhZ2UoTlNfTElURVJBTF9D
U1RSSU5HKCJkcmF3QXJyYXlzOiBpbnZhbGlkIG1vZGUiKSk7CisgICAgICAgIC8vIHJldHVybiBO
U19FUlJPUl9ET01fU1lOVEFYX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChmaXJzdCtjb3VudCA8IGZpcnN0IHx8IGZpcnN0K2NvdW50IDwgY291bnQpIHsKKyAgICAgICAg
Ly8gRklYTUU6IG91dHB1dCBsb2cgbWVzc2FnZSwgcmFpc2UgZXhjZXB0aW9uLgorICAgICAgICAv
LyBMb2dNZXNzYWdlKE5TX0xJVEVSQUxfQ1NUUklORygiZHJhd0FycmF5czogb3ZlcmZsb3cgaW4g
Zmlyc3QrY291bnQiKSk7CisgICAgICAgIC8vIHJldHVybiBOU19FUlJPUl9JTlZBTElEX0FSRzsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiB2YWxpZGF0ZSBhZ2FpbnN0
IGN1cnJlbnRseSBib3VuZCBidWZmZXIuCisgICAgLy8gaWYgKCFWYWxpZGF0ZUJ1ZmZlcnMoZmly
c3QrY291bnQpKQorICAgIC8vICAgICByZXR1cm4gTlNfRVJST1JfSU5WQUxJRF9BUkc7CisKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbERyYXdBcnJheXMobW9kZSwgZmlyc3QsIGNv
dW50KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZHJhd0VsZW1lbnRzKHVuc2lnbmVk
IGxvbmcgbW9kZSwgdW5zaWduZWQgbG9uZyBjb3VudCwgdW5zaWduZWQgbG9uZyB0eXBlLCBsb25n
IG9mZnNldCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICAvLyBGSVhNRTogbWFr
ZSB0aGlzIHZlcmlmaWNhdGlvbiBtb3JlIGVmZmljaWVudC4KKyAgICBHTGludCBiaW5kaW5nID0g
MDsKKyAgICBHTGVudW0gYmluZGluZ190YXJnZXQgPSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUl9C
SU5ESU5HOworICAgIGdsR2V0SW50ZWdlcnYoYmluZGluZ190YXJnZXQsICZiaW5kaW5nKTsKKyAg
ICBpZiAoYmluZGluZyA8PSAwKSB7CisgICAgICAgIC8vIEZJWE1FOiByYWlzZSBleGNlcHRpb24u
CisgICAgICAgIC8vIExvZ01lc3NhZ2VmKCgiYnVmZmVyRGF0YTogbm8gYnVmZmVyIGJvdW5kIikp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGdsRHJhd0VsZW1lbnRzKG1vZGUsIGNvdW50
LCB0eXBlLAorICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0YXRp
Y19jYXN0PGludHB0cl90PihvZmZzZXQpKSk7Cit9CisKK0dMX1NBTUVfTUVUSE9EXzEoRW5hYmxl
LCBlbmFibGUsIHVuc2lnbmVkIGxvbmcpCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmVuYWJs
ZVZlcnRleEF0dHJpYkFycmF5KHVuc2lnbmVkIGxvbmcgaW5kZXgpCit7CisgICAgbV9pbnRlcm5h
bC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOworfQorCitHTF9TQU1FX01FVEhPRF8w
KEZpbmlzaCwgZmluaXNoKQorCitHTF9TQU1FX01FVEhPRF8wKEZsdXNoLCBmbHVzaCkKKworR0xf
U0FNRV9NRVRIT0RfNF9YNChGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciwgZnJhbWVidWZmZXJSZW5k
ZXJidWZmZXIsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIENh
bnZhc1JlbmRlcmJ1ZmZlciopCisKK0dMX1NBTUVfTUVUSE9EXzVfWDQoRnJhbWVidWZmZXJUZXh0
dXJlMkQsIGZyYW1lYnVmZmVyVGV4dHVyZTJELCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25n
LCB1bnNpZ25lZCBsb25nLCBDYW52YXNUZXh0dXJlKiwgbG9uZykKKworR0xfU0FNRV9NRVRIT0Rf
MShGcm9udEZhY2UsIGZyb250RmFjZSwgdW5zaWduZWQgbG9uZykKKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6Z2VuZXJhdGVNaXBtYXAodW5zaWduZWQgbG9uZyB0YXJnZXQpCit7CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKGdsR2VuZXJhdGVNaXBtYXBFWFQpCisgICAgICAg
IGdsR2VuZXJhdGVNaXBtYXBFWFQodGFyZ2V0KTsKKyAgICAvLyBGSVhNRTogcHJvdmlkZSBhbHRl
cm5hdGl2ZSBjb2RlIHBhdGg/IFRoaXMgd2lsbCBiZSB1bnBsZWFzYW50CisgICAgLy8gdG8gaW1w
bGVtZW50IGlmIGdsR2VuZXJhdGVNaXBtYXBFWFQgaXMgbm90IGF2YWlsYWJsZSAtLSBpdCB3aWxs
CisgICAgLy8gcmVxdWlyZSBhIHRleHR1cmUgcmVhZGJhY2sgYW5kIHJlLXVwbG9hZC4KK30KKwor
Ym9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlQXR0cmliKENhbnZhc1Byb2dyYW0qIHBy
b2dyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCit7CisgICAgaWYg
KCFwcm9ncmFtKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgR0xpbnQgbWF4TmFtZUxlbmd0
aCA9IC0xOworICAgIGdsR2V0UHJvZ3JhbWl2KEVYVFJBQ1QocHJvZ3JhbSksIEdMX0FDVElWRV9B
VFRSSUJVVEVfTUFYX0xFTkdUSCwgJm1heE5hbWVMZW5ndGgpOworICAgIGlmIChtYXhOYW1lTGVu
Z3RoIDwgMCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEdMY2hhciogbmFtZSA9IDA7Cisg
ICAgaWYgKCF0cnlGYXN0TWFsbG9jKG1heE5hbWVMZW5ndGggKiBzaXplb2YoR0xjaGFyKSkuZ2V0
VmFsdWUobmFtZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBHTHNpemVpIGxlbmd0aCA9
IDA7CisgICAgR0xpbnQgc2l6ZSA9IC0xOworICAgIEdMZW51bSB0eXBlID0gMDsKKyAgICBnbEdl
dEFjdGl2ZUF0dHJpYihFWFRSQUNUKHByb2dyYW0pLCBpbmRleCwgbWF4TmFtZUxlbmd0aCwKKyAg
ICAgICAgICAgICAgICAgICAgICAmbGVuZ3RoLCAmc2l6ZSwgJnR5cGUsIG5hbWUpOworICAgIGlm
IChzaXplIDwgMCkgeworICAgICAgICBmYXN0RnJlZShuYW1lKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICBpbmZvLm5hbWUgPSBTdHJpbmcobmFtZSwgbGVuZ3RoKTsKKyAgICBp
bmZvLnR5cGUgPSB0eXBlOworICAgIGluZm8uc2l6ZSA9IHNpemU7CisgICAgZmFzdEZyZWUobmFt
ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEFj
dGl2ZVVuaWZvcm0oQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwg
QWN0aXZlSW5mbyYgaW5mbykKK3sKKyAgICBpZiAoIXByb2dyYW0pCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBHTGludCBtYXhOYW1lTGVuZ3RoID0gLTE7CisgICAgZ2xHZXRQcm9ncmFtaXYo
RVhUUkFDVChwcm9ncmFtKSwgR0xfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCwgJm1heE5hbWVM
ZW5ndGgpOworICAgIGlmIChtYXhOYW1lTGVuZ3RoIDwgMCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIEdMY2hhciogbmFtZSA9IDA7CisgICAgaWYgKCF0cnlGYXN0TWFsbG9jKG1heE5hbWVM
ZW5ndGggKiBzaXplb2YoR0xjaGFyKSkuZ2V0VmFsdWUobmFtZSkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBHTHNpemVpIGxlbmd0aCA9IDA7CisgICAgR0xpbnQgc2l6ZSA9IC0xOworICAg
IEdMZW51bSB0eXBlID0gMDsKKyAgICBnbEdldEFjdGl2ZVVuaWZvcm0oRVhUUkFDVChwcm9ncmFt
KSwgaW5kZXgsIG1heE5hbWVMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICZsZW5ndGgs
ICZzaXplLCAmdHlwZSwgbmFtZSk7CisgICAgaWYgKHNpemUgPCAwKSB7CisgICAgICAgIGZhc3RG
cmVlKG5hbWUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGluZm8ubmFtZSA9
IFN0cmluZyhuYW1lLCBsZW5ndGgpOworICAgIGluZm8udHlwZSA9IHR5cGU7CisgICAgaW5mby5z
aXplID0gc2l6ZTsKKyAgICBmYXN0RnJlZShuYW1lKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
aW50IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBdHRyaWJMb2NhdGlvbihDYW52YXNQcm9ncmFtKiBw
cm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgaWYgKCFwcm9ncmFtKQorICAgICAg
ICByZXR1cm4gLTE7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gZ2xH
ZXRBdHRyaWJMb2NhdGlvbihFWFRSQUNUKHByb2dyYW0pLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwor
fQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRCb29sZWFuKHVuc2lnbmVkIGxvbmcgcG5h
bWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgR0xib29sZWFuIHZhbDsKKyAg
ICAvLyBGSVhNRTogdmFsaWRhdGUgcG5hbWUgdG8gZW5zdXJlIGl0IHJldHVybnMgb25seSBhIHNp
bmdsZSB2YWx1ZS4KKyAgICBnbEdldEJvb2xlYW52KHBuYW1lLCAmdmFsKTsKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Ym9vbD4odmFsKTsKK30KKworUGFzc1JlZlB0cjxDYW52YXNVbnNpZ25lZEJ5
dGVBcnJheT4gR3JhcGhpY3NDb250ZXh0M0Q6OmdldEJvb2xlYW52KHVuc2lnbmVkIGxvbmcgcG5h
bWUpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudC4KKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIHJldHVybiAwOworfQorCitpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEJ1ZmZlclBhcmFt
ZXRlcmkodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUpCit7CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgR0xpbnQgZGF0YTsKKyAgICBnbEdldEJ1ZmZlclBh
cmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZkYXRhKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
aW50PihkYXRhKTsKK30KKworUGFzc1JlZlB0cjxDYW52YXNJbnRBcnJheT4gR3JhcGhpY3NDb250
ZXh0M0Q6OmdldEJ1ZmZlclBhcmFtZXRlcml2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25l
ZCBsb25nIHBuYW1lKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQuCisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordW5zaWduZWQgbG9uZyBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0RXJyb3IoKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVy
biBnbEdldEVycm9yKCk7Cit9CisKK2Zsb2F0IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRGbG9hdCh1
bnNpZ25lZCBsb25nIHBuYW1lKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEdM
ZmxvYXQgdmFsOworICAgIC8vIEZJWE1FOiB2YWxpZGF0ZSBwbmFtZSB0byBlbnN1cmUgaXQgcmV0
dXJucyBvbmx5IGEgc2luZ2xlIHZhbHVlLgorICAgIGdsR2V0RmxvYXR2KHBuYW1lLCAmdmFsKTsK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbCk7Cit9CisKK1Bhc3NSZWZQdHI8Q2Fu
dmFzRmxvYXRBcnJheT4gR3JhcGhpY3NDb250ZXh0M0Q6OmdldEZsb2F0dih1bnNpZ25lZCBsb25n
IHBuYW1lKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQuCisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gMDsKK30KKworaW50IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRGcmFtZWJ1
ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGxvbmcgYXR0YWNobWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHBuYW1lKQoreworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIEdMaW50IGRhdGE7CisgICAgZ2xHZXRGcmFtZWJ1ZmZlckF0dGFj
aG1lbnRQYXJhbWV0ZXJpdih0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lLCAmZGF0YSk7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGludD4oZGF0YSk7Cit9CisKK1Bhc3NSZWZQdHI8Q2FudmFzSW50
QXJyYXk+IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0
ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBsb25nIGF0dGFjaG1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
bG9uZyBwbmFtZSkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50LgorICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50
ZWdlcih1bnNpZ25lZCBsb25nIHBuYW1lKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIEdMaW50IHZhbDsKKyAgICAvLyBGSVhNRTogdmFsaWRhdGUgcG5hbWUgdG8gZW5zdXJlIGl0
IHJldHVybnMgb25seSBhIHNpbmdsZSB2YWx1ZS4KKyAgICBnbEdldEludGVnZXJ2KHBuYW1lLCAm
dmFsKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pih2YWwpOworfQorCitQYXNzUmVmUHRy
PENhbnZhc0ludEFycmF5PiBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50ZWdlcnYodW5zaWduZWQg
bG9uZyBwbmFtZSkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50LgorICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJv
Z3JhbWkoQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgbG9uZyBwbmFtZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBHTGludCBwYXJhbTsKKyAgICBnbEdldFByb2dyYW1pdihFWFRSQUNUKHByb2dyYW0p
LCBwbmFtZSwgJnBhcmFtKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihwYXJhbSk7Cit9
CisKK1Bhc3NSZWZQdHI8Q2FudmFzSW50QXJyYXk+IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRQcm9n
cmFtaXYoQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBwbmFtZSkKK3sK
KyAgICAvLyBGSVhNRTogaW1wbGVtZW50LgorICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0
dXJuIDA7Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbUluZm9Mb2co
Q2FudmFzUHJvZ3JhbSogcHJvZ3JhbSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBHTHVpbnQgcHJvZ3JhbUlEID0gRVhUUkFDVChwcm9ncmFtKTsKKyAgICBHTGludCBsb2dMZW5n
dGg7CisgICAgZ2xHZXRQcm9ncmFtaXYocHJvZ3JhbUlELCBHTF9JTkZPX0xPR19MRU5HVEgsICZs
b2dMZW5ndGgpOworICAgIGlmICghbG9nTGVuZ3RoKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CisgICAgR0xjaGFyKiBsb2cgPSAwOworICAgIGlmICghdHJ5RmFzdE1hbGxvYyhsb2dMZW5ndGgg
KiBzaXplb2YoR0xjaGFyKSkuZ2V0VmFsdWUobG9nKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygp
OworICAgIEdMc2l6ZWkgcmV0dXJuZWRMb2dMZW5ndGg7CisgICAgZ2xHZXRQcm9ncmFtSW5mb0xv
Zyhwcm9ncmFtSUQsIGxvZ0xlbmd0aCwgJnJldHVybmVkTG9nTGVuZ3RoLCBsb2cpOworICAgIEFT
U0VSVChsb2dMZW5ndGggPT0gcmV0dXJuZWRMb2dMZW5ndGggKyAxKTsKKyAgICBTdHJpbmcgcmVz
ID0gU3RyaW5nKGxvZywgcmV0dXJuZWRMb2dMZW5ndGgpOworICAgIGZhc3RGcmVlKGxvZyk7Cisg
ICAgcmV0dXJuIHJlczsKK30KKworaW50IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRSZW5kZXJidWZm
ZXJQYXJhbWV0ZXJpKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcG5hbWUpCit7CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgR0xpbnQgcGFyYW07CisgICAgZ2xHZXRSZW5kZXJi
dWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCAmcGFyYW0pOworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxpbnQ+KHBhcmFtKTsKK30KKworUGFzc1JlZlB0cjxDYW52YXNJbnRBcnJheT4gR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KHVuc2lnbmVkIGxvbmcg
dGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcG5hbWUpCit7CisgICAgLy8g
RklYTUU6IGltcGxlbWVudC4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOwor
fQorCitpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlcmkoQ2FudmFzU2hhZGVyKiBzaGFk
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBwbmFt
ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBHTGludCBwYXJhbTsKKyAgICBn
bEdldFNoYWRlcml2KEVYVFJBQ1Qoc2hhZGVyKSwgcG5hbWUsICZwYXJhbSk7CisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGludD4ocGFyYW0pOworfQorCitQYXNzUmVmUHRyPENhbnZhc0ludEFycmF5
PiBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyaXYoQ2FudmFzU2hhZGVyKiBzaGFkZXIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgbG9uZyBwbmFtZSkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50LgorICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0U2hhZGVySW5mb0xvZyhDYW52YXNTaGFkZXIqIHNoYWRlcikKK3sKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBHTHVpbnQgc2hhZGVySUQgPSBFWFRSQUNUKHNoYWRlcik7
CisgICAgR0xpbnQgbG9nTGVuZ3RoOworICAgIGdsR2V0U2hhZGVyaXYoc2hhZGVySUQsIEdMX0lO
Rk9fTE9HX0xFTkdUSCwgJmxvZ0xlbmd0aCk7CisgICAgaWYgKCFsb2dMZW5ndGgpCisgICAgICAg
IHJldHVybiBTdHJpbmcoKTsKKyAgICBHTGNoYXIqIGxvZyA9IDA7CisgICAgaWYgKCF0cnlGYXN0
TWFsbG9jKGxvZ0xlbmd0aCAqIHNpemVvZihHTGNoYXIpKS5nZXRWYWx1ZShsb2cpKQorICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CisgICAgR0xzaXplaSByZXR1cm5lZExvZ0xlbmd0aDsKKyAgICBn
bEdldFNoYWRlckluZm9Mb2coc2hhZGVySUQsIGxvZ0xlbmd0aCwgJnJldHVybmVkTG9nTGVuZ3Ro
LCBsb2cpOworICAgIEFTU0VSVChsb2dMZW5ndGggPT0gcmV0dXJuZWRMb2dMZW5ndGggKyAxKTsK
KyAgICBTdHJpbmcgcmVzID0gU3RyaW5nKGxvZywgcmV0dXJuZWRMb2dMZW5ndGgpOworICAgIGZh
c3RGcmVlKGxvZyk7CisgICAgcmV0dXJuIHJlczsKK30KKworU3RyaW5nIEdyYXBoaWNzQ29udGV4
dDNEOjpnZXRTaGFkZXJTb3VyY2UoQ2FudmFzU2hhZGVyKiBzaGFkZXIpCit7CisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgR0x1aW50IHNoYWRlcklEID0gRVhUUkFDVChzaGFkZXIpOwor
ICAgIEdMaW50IGxvZ0xlbmd0aDsKKyAgICBnbEdldFNoYWRlcml2KHNoYWRlcklELCBHTF9TSEFE
RVJfU09VUkNFX0xFTkdUSCwgJmxvZ0xlbmd0aCk7CisgICAgaWYgKCFsb2dMZW5ndGgpCisgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBHTGNoYXIqIGxvZyA9IDA7CisgICAgaWYgKCF0cnlG
YXN0TWFsbG9jKGxvZ0xlbmd0aCAqIHNpemVvZihHTGNoYXIpKS5nZXRWYWx1ZShsb2cpKQorICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgR0xzaXplaSByZXR1cm5lZExvZ0xlbmd0aDsKKyAg
ICBnbEdldFNoYWRlclNvdXJjZShzaGFkZXJJRCwgbG9nTGVuZ3RoLCAmcmV0dXJuZWRMb2dMZW5n
dGgsIGxvZyk7CisgICAgQVNTRVJUKGxvZ0xlbmd0aCA9PSByZXR1cm5lZExvZ0xlbmd0aCArIDEp
OworICAgIFN0cmluZyByZXMgPSBTdHJpbmcobG9nLCByZXR1cm5lZExvZ0xlbmd0aCk7CisgICAg
ZmFzdEZyZWUobG9nKTsKKyAgICByZXR1cm4gcmVzOworfQorCitTdHJpbmcgR3JhcGhpY3NDb250
ZXh0M0Q6OmdldFN0cmluZyh1bnNpZ25lZCBsb25nIG5hbWUpCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgcmV0dXJuIFN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIq
PihnbEdldFN0cmluZyhuYW1lKSkpOworfQorCitmbG9hdCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0
VGV4UGFyYW1ldGVyZih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSkK
K3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1faW50ZXJuYWwtPnZhbGlk
YXRlVGV4dHVyZVRhcmdldCh0YXJnZXQpKSB7CisgICAgICAgIC8vIEZJWE1FOiB0aHJvdyBleGNl
cHRpb24uCisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmICghbV9pbnRlcm5hbC0+
dmFsaWRhdGVUZXh0dXJlUGFyYW1ldGVyKHBuYW1lKSkgeworICAgICAgICAvLyBGSVhNRTogdGhy
b3cgZXhjZXB0aW9uLgorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBHTGZsb2F0IHBh
cmFtOworICAgIGdsR2V0VGV4UGFyYW1ldGVyZnYodGFyZ2V0LCBwbmFtZSwgJnBhcmFtKTsKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhcmFtKTsKK30KKworUGFzc1JlZlB0cjxDYW52
YXNGbG9hdEFycmF5PiBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VGV4UGFyYW1ldGVyZnYodW5zaWdu
ZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUpCit7CisgICAgLy8gRklYTUU6IGlt
cGxlbWVudC4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCitpbnQg
R3JhcGhpY3NDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcmkodW5zaWduZWQgbG9uZyB0YXJnZXQs
IHVuc2lnbmVkIGxvbmcgcG5hbWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtX2ludGVybmFsLT52YWxpZGF0ZVRleHR1cmVUYXJnZXQodGFyZ2V0KSkgeworICAgICAg
ICAvLyBGSVhNRTogdGhyb3cgZXhjZXB0aW9uLgorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisK
KyAgICBpZiAoIW1faW50ZXJuYWwtPnZhbGlkYXRlVGV4dHVyZVBhcmFtZXRlcihwbmFtZSkpIHsK
KyAgICAgICAgLy8gRklYTUU6IHRocm93IGV4Y2VwdGlvbi4KKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQorCisgICAgR0xpbnQgcGFyYW07CisgICAgZ2xHZXRUZXhQYXJhbWV0ZXJpdih0YXJnZXQs
IHBuYW1lLCAmcGFyYW0pOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHBhcmFtKTsKK30K
KworUGFzc1JlZlB0cjxDYW52YXNJbnRBcnJheT4gR3JhcGhpY3NDb250ZXh0M0Q6OmdldFRleFBh
cmFtZXRlcml2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lKQorewor
ICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQuCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gMDsKK30KKworZmxvYXQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1mKENhbnZhc1By
b2dyYW0qIHByb2dyYW0sIGxvbmcgbG9jYXRpb24pCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVu
dC4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCitQYXNzUmVmUHRy
PENhbnZhc0Zsb2F0QXJyYXk+IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtZnYoQ2FudmFz
UHJvZ3JhbSogcHJvZ3JhbSwgbG9uZyBsb2NhdGlvbikKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVt
ZW50LgorICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBHcmFw
aGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybWkoQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwgbG9uZyBs
b2NhdGlvbikKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50LgorICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK1Bhc3NSZWZQdHI8Q2FudmFzSW50QXJyYXk+IEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtaXYoQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwgbG9uZyBs
b2NhdGlvbikKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50LgorICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2xvbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZv
cm1Mb2NhdGlvbihDYW52YXNQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7
CisgICAgaWYgKCFwcm9ncmFtKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gZ2xHZXRVbmlmb3JtTG9jYXRpb24oRVhUUkFDVChwcm9n
cmFtKSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKK30KKworZmxvYXQgR3JhcGhpY3NDb250ZXh0M0Q6
OmdldFZlcnRleEF0dHJpYmYodW5zaWduZWQgbG9uZyBpbmRleCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcG5hbWUpCit7CisgICAgLy8g
RklYTUU6IGltcGxlbWVudC4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOwor
fQorCitQYXNzUmVmUHRyPENhbnZhc0Zsb2F0QXJyYXk+IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRW
ZXJ0ZXhBdHRyaWJmdih1bnNpZ25lZCBsb25nIGluZGV4LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9u
ZyBwbmFtZSkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50LgorICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4
QXR0cmliaSh1bnNpZ25lZCBsb25nIGluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcG5hbWUpCit7CisgICAgLy8gRklYTUU6IGltcGxl
bWVudC4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCitQYXNzUmVm
UHRyPENhbnZhc0ludEFycmF5PiBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliaXYo
dW5zaWduZWQgbG9uZyBpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHBuYW1lKQoreworICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQuCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4g
MDsKK30KKworbG9uZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KHVu
c2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUpCit7CisgICAgLy8gRklYTUU6
IGltcGxlbWVudC4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCitH
TF9TQU1FX01FVEhPRF8yKEhpbnQsIGhpbnQsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcp
OworCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc0J1ZmZlcihDYW52YXNCdWZmZXIqIGJ1ZmZl
cikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gZ2xJc0J1ZmZlcihF
WFRSQUNUKGJ1ZmZlcikpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc0VuYWJsZWQo
dW5zaWduZWQgbG9uZyBjYXApCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0
dXJuIGdsSXNFbmFibGVkKGNhcCk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzRnJh
bWVidWZmZXIoQ2FudmFzRnJhbWVidWZmZXIqIGZyYW1lYnVmZmVyKQoreworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIHJldHVybiBnbElzRnJhbWVidWZmZXIoRVhUUkFDVChmcmFtZWJ1
ZmZlcikpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc1Byb2dyYW0oQ2FudmFzUHJv
Z3JhbSogcHJvZ3JhbSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4g
Z2xJc1Byb2dyYW0oRVhUUkFDVChwcm9ncmFtKSk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0
M0Q6OmlzUmVuZGVyYnVmZmVyKENhbnZhc1JlbmRlcmJ1ZmZlciogcmVuZGVyYnVmZmVyKQorewor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiBnbElzUmVuZGVyYnVmZmVyKEVY
VFJBQ1QocmVuZGVyYnVmZmVyKSk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzU2hh
ZGVyKENhbnZhc1NoYWRlciogc2hhZGVyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIHJldHVybiBnbElzU2hhZGVyKEVYVFJBQ1Qoc2hhZGVyKSk7Cit9CisKK2Jvb2wgR3JhcGhp
Y3NDb250ZXh0M0Q6OmlzVGV4dHVyZShDYW52YXNUZXh0dXJlKiB0ZXh0dXJlKQoreworICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiBnbElzVGV4dHVyZShFWFRSQUNUKHRleHR1
cmUpKTsKK30KKworR0xfU0FNRV9NRVRIT0RfMShMaW5lV2lkdGgsIGxpbmVXaWR0aCwgZG91Ymxl
KQorCitHTF9TQU1FX01FVEhPRF8xX1goTGlua1Byb2dyYW0sIGxpbmtQcm9ncmFtLCBDYW52YXNQ
cm9ncmFtKikKKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGl4ZWxTdG9yZWkodW5zaWduZWQg
bG9uZyBwbmFtZSwgbG9uZyBwYXJhbSkKK3sKKyAgICBpZiAocG5hbWUgIT0gR0xfUEFDS19BTElH
Tk1FTlQgJiYgcG5hbWUgIT0gR0xfVU5QQUNLX0FMSUdOTUVOVCkgeworICAgICAgICAvLyBGSVhN
RTogQ3JlYXRlIGEgZmFrZSBHTCBlcnJvciBhbmQgdGhyb3cgYW4gZXhjZXB0aW9uLgorICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2xQaXhl
bFN0b3JlaShwbmFtZSwgcGFyYW0pOworfQorCitHTF9TQU1FX01FVEhPRF8yKFBvbHlnb25PZmZz
ZXQsIHBvbHlnb25PZmZzZXQsIGRvdWJsZSwgZG91YmxlKQorCitQYXNzUmVmUHRyPENhbnZhc0Fy
cmF5PiBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVscyhsb25nIHgsIGxvbmcgeSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBmb3JtYXQsIHVu
c2lnbmVkIGxvbmcgdHlwZSkgeworICAgIC8vIEZJWE1FOiBzdXBwb3J0IG1vcmUgcGl4ZWwgZm9y
bWF0cyBhbmQgdHlwZXMuCisgICAgaWYgKCEoKGZvcm1hdCA9PSBHTF9SR0JBKSAmJiAodHlwZSA9
PSBHTF9VTlNJR05FRF9CWVRFKSkpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gRklYTUU6
IHRha2UgaW50byBhY2NvdW50IHBhY2sgYWxpZ25tZW50LgorICAgIFJlZlB0cjxDYW52YXNVbnNp
Z25lZEJ5dGVBcnJheT4gYXJyYXkgPSBDYW52YXNVbnNpZ25lZEJ5dGVBcnJheTo6Y3JlYXRlKHdp
ZHRoICogaGVpZ2h0ICogNCk7CisgICAgZ2xSZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQs
IGZvcm1hdCwgdHlwZSwgYXJyYXktPmJhc2VBZGRyZXNzKCkpOworICAgIHJldHVybiBhcnJheTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKCkKK3sK
K30KKworR0xfU0FNRV9NRVRIT0RfNChSZW5kZXJidWZmZXJTdG9yYWdlLCByZW5kZXJidWZmZXJT
dG9yYWdlLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNp
Z25lZCBsb25nKQorCitHTF9TQU1FX01FVEhPRF8yKFNhbXBsZUNvdmVyYWdlLCBzYW1wbGVDb3Zl
cmFnZSwgZG91YmxlLCBib29sKQorCitHTF9TQU1FX01FVEhPRF80KFNjaXNzb3IsIHNjaXNzb3Is
IGxvbmcsIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnNoYWRlclNvdXJjZShDYW52YXNTaGFkZXIqIHNoYWRlciwgY29uc3QgU3Ry
aW5nJiBzb3VyY2UpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgQ1N0cmluZyBz
dHIgPSBzb3VyY2UudXRmOCgpOworICAgIGNvbnN0IGNoYXIqIGRhdGEgPSBzdHIuZGF0YSgpOwor
ICAgIEdMaW50IGxlbmd0aCA9IHN0ci5sZW5ndGgoKTsKKyAgICBnbFNoYWRlclNvdXJjZShFWFRS
QUNUKHNoYWRlciksIDEsICZkYXRhLCAmbGVuZ3RoKTsKK30KKworR0xfU0FNRV9NRVRIT0RfMyhT
dGVuY2lsRnVuYywgc3RlbmNpbEZ1bmMsIHVuc2lnbmVkIGxvbmcsIGxvbmcsIHVuc2lnbmVkIGxv
bmcpCisKK0dMX1NBTUVfTUVUSE9EXzQoU3RlbmNpbEZ1bmNTZXBhcmF0ZSwgc3RlbmNpbEZ1bmNT
ZXBhcmF0ZSwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgbG9uZywgdW5zaWduZWQgbG9u
ZykKKworR0xfU0FNRV9NRVRIT0RfMShTdGVuY2lsTWFzaywgc3RlbmNpbE1hc2ssIHVuc2lnbmVk
IGxvbmcpCisKK0dMX1NBTUVfTUVUSE9EXzIoU3RlbmNpbE1hc2tTZXBhcmF0ZSwgc3RlbmNpbE1h
c2tTZXBhcmF0ZSwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKKworR0xfU0FNRV9NRVRI
T0RfMyhTdGVuY2lsT3AsIHN0ZW5jaWxPcCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywg
dW5zaWduZWQgbG9uZykKKworR0xfU0FNRV9NRVRIT0RfNChTdGVuY2lsT3BTZXBhcmF0ZSwgc3Rl
bmNpbE9wU2VwYXJhdGUsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxv
bmcsIHVuc2lnbmVkIGxvbmcpCisKK2ludCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRCh1
bnNpZ25lZCB0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50
ZXJuYWxmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
d2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaGVpZ2h0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJvcmRlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmb3JtYXQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgdHlwZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDYW52YXNBcnJheSogcGl4ZWxzKQoreworICAgIC8vIEZJWE1F
OiBtdXN0IGRvIHZhbGlkYXRpb24gc2ltaWxhciB0byBKT0dMJ3MgdG8gZW5zdXJlIHRoYXQKKyAg
ICAvLyB0aGUgaW5jb21pbmcgYXJyYXkgaXMgb2YgdGhlIGFwcHJvcHJpYXRlIGxlbmd0aC4KKyAg
ICBnbFRleEltYWdlMkQodGFyZ2V0LAorICAgICAgICAgICAgICAgICBsZXZlbCwKKyAgICAgICAg
ICAgICAgICAgaW50ZXJuYWxmb3JtYXQsCisgICAgICAgICAgICAgICAgIHdpZHRoLAorICAgICAg
ICAgICAgICAgICBoZWlnaHQsCisgICAgICAgICAgICAgICAgIGJvcmRlciwKKyAgICAgICAgICAg
ICAgICAgZm9ybWF0LAorICAgICAgICAgICAgICAgICB0eXBlLAorICAgICAgICAgICAgICAgICBw
aXhlbHMtPmJhc2VBZGRyZXNzKCkpOworICAgIHJldHVybiAwOworfQorCitpbnQgR3JhcGhpY3ND
b250ZXh0M0Q6OnRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGludGVybmFsZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBib3JkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2VEYXRhKiBwaXhl
bHMpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudC4KKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIHJldHVybiAtMTsKK30KKworLy8gUmVtb3ZlIHByZW11bHRpcGxpZWQgYWxwaGEgZnJvbSBj
b2xvciBjaGFubmVscy4KKy8vIEZJWE1FOiB0aGlzIGlzIGxvc3N5LiBNdXN0IHJldHJpZXZlIG9y
aWdpbmFsIHZhbHVlcyBmcm9tIEhUTUxJbWFnZUVsZW1lbnQuCitzdGF0aWMgdm9pZCB1bm11bHRp
cGx5QWxwaGEodW5zaWduZWQgY2hhciogcmdiYURhdGEsIGludCBudW1QaXhlbHMpCit7CisgICAg
Zm9yIChpbnQgaiA9IDA7IGogPCBudW1QaXhlbHM7IGorKykgeworICAgICAgICBmbG9hdCBiID0g
cmdiYURhdGFbNCpqKzBdIC8gMjU1LjBmOworICAgICAgICBmbG9hdCBnID0gcmdiYURhdGFbNCpq
KzFdIC8gMjU1LjBmOworICAgICAgICBmbG9hdCByID0gcmdiYURhdGFbNCpqKzJdIC8gMjU1LjBm
OworICAgICAgICBmbG9hdCBhID0gcmdiYURhdGFbNCpqKzNdIC8gMjU1LjBmOworICAgICAgICBp
ZiAoYSA+IDAuMGYpIHsKKyAgICAgICAgICAgIGIgLz0gYTsKKyAgICAgICAgICAgIGcgLz0gYTsK
KyAgICAgICAgICAgIHIgLz0gYTsKKyAgICAgICAgICAgIGIgPSAoYiA+IDEuMGYpID8gMS4wZiA6
IGI7CisgICAgICAgICAgICBnID0gKGcgPiAxLjBmKSA/IDEuMGYgOiBnOworICAgICAgICAgICAg
ciA9IChyID4gMS4wZikgPyAxLjBmIDogcjsKKyAgICAgICAgICAgIHJnYmFEYXRhWzQqaiswXSA9
ICh1bnNpZ25lZCBjaGFyKSAoYiAqIDI1NS4wZik7CisgICAgICAgICAgICByZ2JhRGF0YVs0Kmor
MV0gPSAodW5zaWduZWQgY2hhcikgKGcgKiAyNTUuMGYpOworICAgICAgICAgICAgcmdiYURhdGFb
NCpqKzJdID0gKHVuc2lnbmVkIGNoYXIpIChyICogMjU1LjBmKTsKKyAgICAgICAgfQorICAgIH0K
K30KKworLy8gRklYTUU6IHRoaXMgbXVzdCBiZSBjaGFuZ2VkIHRvIHJlZmVyIHRvIHRoZSBvcmln
aW5hbCBpbWFnZSBkYXRhCisvLyByYXRoZXIgdGhhbiB1bm11bHRpcGx5aW5nIHRoZSBhbHBoYSBj
aGFubmVsLgorc3RhdGljIGludCB0ZXhJbWFnZTJESGVscGVyKHVuc2lnbmVkIHRhcmdldCwgdW5z
aWduZWQgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoLCBpbnQg
aGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByb3dCeXRlcywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIGZsaXBZLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHTGVudW0gZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2tpcEFs
cGhhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIHBpeGVscykK
K3sKKyAgICBBU1NFUlQoZm9ybWF0ID09IEdMX1JHQkEgfHwgZm9ybWF0ID09IEdMX0JHUkEpOwor
ICAgIEdMaW50IGludGVybmFsRm9ybWF0ID0gR0xfUkdCQTg7CisgICAgaWYgKHNraXBBbHBoYSkg
eworICAgICAgICBpbnRlcm5hbEZvcm1hdCA9IEdMX1JHQjg7CisgICAgICAgIC8vIElnbm9yZSB0
aGUgYWxwaGEgY2hhbm5lbAorICAgICAgICBwcmVtdWx0aXBseUFscGhhID0gdHJ1ZTsKKyAgICB9
CisgICAgaWYgKGZsaXBZKSB7CisgICAgICAgIC8vIE5lZWQgdG8gZmxpcCBpbWFnZXMgdmVydGlj
YWxseS4gVG8gYXZvaWQgbWFraW5nIGEgY29weSBvZgorICAgICAgICAvLyB0aGUgZW50aXJlIGlt
YWdlLCB3ZSBwZXJmb3JtIGEgdG9uIG9mIGdsVGV4U3ViSW1hZ2UyRAorICAgICAgICAvLyBjYWxs
cy4gRklYTUU6IHNob3VsZCByZXRoaW5rIHRoaXMgc3RyYXRlZ3kgZm9yIGVmZmljaWVuY3kuCisg
ICAgICAgIGdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwKKyAgICAg
ICAgICAgICAgICAgICAgIHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0LAorICAg
ICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwKKyAgICAg
ICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsCisgICAgICAgICAgICAgICAgICAgICAw
KTsKKyAgICAgICAgdW5zaWduZWQgY2hhciogcm93ID0gMDsKKyAgICAgICAgYm9vbCBhbGxvY2F0
ZWRSb3cgPSBmYWxzZTsKKyAgICAgICAgaWYgKCFwcmVtdWx0aXBseUFscGhhKSB7CisgICAgICAg
ICAgICByb3cgPSBuZXcgdW5zaWduZWQgY2hhcltyb3dCeXRlc107CisgICAgICAgICAgICBhbGxv
Y2F0ZWRSb3cgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
aGVpZ2h0OyBpKyspIHsKKyAgICAgICAgICAgIGlmIChwcmVtdWx0aXBseUFscGhhKQorICAgICAg
ICAgICAgICAgIHJvdyA9IHBpeGVscyArIChyb3dCeXRlcyAqIGkpOworICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgbWVtY3B5KHJvdywgcGl4ZWxzICsgKHJvd0J5dGVzICogaSks
IHJvd0J5dGVzKTsKKyAgICAgICAgICAgICAgICB1bm11bHRpcGx5QWxwaGEocm93LCB3aWR0aCk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBnbFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZl
bCwgMCwgaGVpZ2h0IC0gaSAtIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgs
IDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcm93KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYWxsb2NhdGVkUm93KQorICAgICAgICAg
ICAgZGVsZXRlW10gcm93OworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFRoZSBwaXhlbHMgb2Yg
Y3ViZSBtYXBzJyBmYWNlcyBhcmUgZGVmaW5lZCB3aXRoIGEgdG9wLWRvd24KKyAgICAgICAgLy8g
c2NhbmxpbmUgb3JkZXJpbmcsIHVubGlrZSBHTF9URVhUVVJFXzJELCBzbyB3aGVuIHVwbG9hZGlu
ZworICAgICAgICAvLyB0aGVzZSwgdGhlIGFib3ZlIHZlcnRpY2FsIGZsaXAgaXMgdGhlIHdyb25n
IHRoaW5nIHRvIGRvLgorICAgICAgICBpZiAocHJlbXVsdGlwbHlBbHBoYSkKKyAgICAgICAgICAg
IGdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmb3Jt
YXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBwaXhlbHMpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGds
VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAwKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIHJvdyA9IG5ldyB1
bnNpZ25lZCBjaGFyW3Jvd0J5dGVzXTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
aGVpZ2h0OyBpKyspIHsKKyAgICAgICAgICAgICAgICBtZW1jcHkocm93LCBwaXhlbHMgKyAocm93
Qnl0ZXMgKiBpKSwgcm93Qnl0ZXMpOworICAgICAgICAgICAgICAgIHVubXVsdGlwbHlBbHBoYShy
b3csIHdpZHRoKTsKKyAgICAgICAgICAgICAgICBnbFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZl
bCwgMCwgaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIDEsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcm93KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlbGV0ZVtdIHJvdzsKKyAg
ICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworaW50IEdyYXBoaWNzQ29udGV4dDNE
Ojp0ZXhJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIEltYWdlKiBpbWFn
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZsaXBZLCBib29sIHBy
ZW11bHRpcGx5QWxwaGEpCit7CisgICAgQVNTRVJUKGltYWdlKTsKKworICAgIGludCByZXMgPSAt
MTsKKyNpZiBQTEFURk9STShTS0lBKQorICAgIE5hdGl2ZUltYWdlU2tpYSogc2tpYUltYWdlID0g
aW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgaWYgKCFza2lhSW1hZ2Up
IHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAtMTsKKyAg
ICB9CisgICAgU2tCaXRtYXA6OkNvbmZpZyBza2lhQ29uZmlnID0gc2tpYUltYWdlLT5jb25maWco
KTsKKyAgICAvLyBGSVhNRTogbXVzdCBzdXBwb3J0IG1vcmUgaW1hZ2UgY29uZmlndXJhdGlvbnMu
CisgICAgaWYgKHNraWFDb25maWcgIT0gU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnKSB7Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQor
ICAgIFNrQml0bWFwJiBza2lhSW1hZ2VSZWYgPSAqc2tpYUltYWdlOworICAgIFNrQXV0b0xvY2tQ
aXhlbHMgbG9jayhza2lhSW1hZ2VSZWYpOworICAgIGludCB3aWR0aCA9IHNraWFJbWFnZS0+d2lk
dGgoKTsKKyAgICBpbnQgaGVpZ2h0ID0gc2tpYUltYWdlLT5oZWlnaHQoKTsKKyAgICB1bnNpZ25l
ZCBjaGFyKiBwaXhlbHMgPQorICAgICAgICByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIq
Pihza2lhSW1hZ2UtPmdldFBpeGVscygpKTsKKyAgICBpbnQgcm93Qnl0ZXMgPSBza2lhSW1hZ2Ut
PnJvd0J5dGVzKCk7CisgICAgcmVzID0gdGV4SW1hZ2UyREhlbHBlcih0YXJnZXQsIGxldmVsLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJvd0J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxpcFks
IHByZW11bHRpcGx5QWxwaGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9CR1JBLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwaXhlbHMpOworI2VsaWYgUExBVEZPUk0oQ0cpCisgICAgQ0dJbWFnZVJlZiBjZ0ltYWdl
ID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgaWYgKCFjZ0ltYWdl
KSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gLTE7Cisg
ICAgfQorICAgIGludCB3aWR0aCA9IENHSW1hZ2VHZXRXaWR0aChjZ0ltYWdlKTsKKyAgICBpbnQg
aGVpZ2h0ID0gQ0dJbWFnZUdldEhlaWdodChjZ0ltYWdlKTsKKyAgICBpbnQgcm93Qnl0ZXMgPSB3
aWR0aCAqIDQ7CisgICAgQ0dJbWFnZUFscGhhSW5mbyBpbmZvID0gQ0dJbWFnZUdldEFscGhhSW5m
byhjZ0ltYWdlKTsKKyAgICBib29sIHNraXBBbHBoYSA9IChpbmZvID09IGtDR0ltYWdlQWxwaGFO
b25lCisgICAgICAgICAgICAgICAgICAgfHwgaW5mbyA9PSBrQ0dJbWFnZUFscGhhTm9uZVNraXBM
YXN0CisgICAgICAgICAgICAgICAgICAgfHwgaW5mbyA9PSBrQ0dJbWFnZUFscGhhTm9uZVNraXBG
aXJzdCk7CisgICAgdW5zaWduZWQgY2hhciogaW1hZ2VEYXRhID0gbmV3IHVuc2lnbmVkIGNoYXJb
aGVpZ2h0ICogcm93Qnl0ZXNdOworICAgIENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNlID0gQ0dD
b2xvclNwYWNlQ3JlYXRlV2l0aE5hbWUoa0NHQ29sb3JTcGFjZUdlbmVyaWNSR0IpOworICAgIENH
Q29udGV4dFJlZiB0bXBDb250ZXh0ID0gQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKGltYWdlRGF0YSwg
d2lkdGgsIGhlaWdodCwgOCwgcm93Qnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JTcGFjZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGll
ZExhc3QpOworICAgIENHQ29sb3JTcGFjZVJlbGVhc2UoY29sb3JTcGFjZSk7CisgICAgQ0dDb250
ZXh0RHJhd0ltYWdlKHRtcENvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgIENHUmVjdE1h
a2UoMCwgMCwgc3RhdGljX2Nhc3Q8Q0dGbG9hdD4od2lkdGgpLCBzdGF0aWNfY2FzdDxDR0Zsb2F0
PihoZWlnaHQpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgY2dJbWFnZSk7CisgICAgQ0dDb250
ZXh0UmVsZWFzZSh0bXBDb250ZXh0KTsKKyAgICByZXMgPSB0ZXhJbWFnZTJESGVscGVyKHRhcmdl
dCwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIHJvd0J5dGVzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmxpcFksIHByZW11bHRpcGx5QWxwaGEsIEdMX1JHQkEsIHNraXBBbHBoYSwgaW1hZ2VE
YXRhKTsKKyAgICBkZWxldGVbXSBpbWFnZURhdGE7CisjZWxzZQorI2Vycm9yIE11c3QgcG9ydCB0
byB5b3VyIHBsYXRmb3JtCisjZW5kaWYKKyAgICByZXR1cm4gcmVzOworfQorCitpbnQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwg
SFRNTFZpZGVvRWxlbWVudCogdmlkZW8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhKQoreworICAgIC8vIEZJWE1FOiBp
bXBsZW1lbnQuCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gLTE7Cit9CisKK0dM
X1NBTUVfTUVUSE9EXzMoVGV4UGFyYW1ldGVyZiwgdGV4UGFyYW1ldGVyZiwgdW5zaWduZWQsIHVu
c2lnbmVkLCBmbG9hdCk7CisKK0dMX1NBTUVfTUVUSE9EXzMoVGV4UGFyYW1ldGVyaSwgdGV4UGFy
YW1ldGVyaSwgdW5zaWduZWQsIHVuc2lnbmVkLCBpbnQpOworCitpbnQgR3JhcGhpY3NDb250ZXh0
M0Q6OnRleFN1YkltYWdlMkQodW5zaWduZWQgdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIHhvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgeW9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q2FudmFzQXJyYXkqIHBpeGVscykKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50LgorICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIC0xOworfQorCitpbnQgR3JhcGhpY3NDb250ZXh0
M0Q6OnRleFN1YkltYWdlMkQodW5zaWduZWQgdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIHhvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgeW9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
SW1hZ2VEYXRhKiBwaXhlbHMpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudC4KKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiAtMTsKK30KKworaW50IEdyYXBoaWNzQ29udGV4dDNE
Ojp0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCB4b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEltYWdlKiBpbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGZsaXBZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJl
bXVsdGlwbHlBbHBoYSkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50LgorICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIC0xOworfQorCitpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OnRl
eFN1YkltYWdlMkQodW5zaWduZWQgdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIHhvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgeW9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
SFRNTFZpZGVvRWxlbWVudCogdmlkZW8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBmbGlwWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIHByZW11bHRpcGx5QWxwaGEpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudC4KKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAtMTsKK30KKworR0xfU0FNRV9NRVRIT0RfMihV
bmlmb3JtMWYsIHVuaWZvcm0xZiwgbG9uZywgZmxvYXQpCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnVuaWZvcm0xZnYobG9uZyBsb2NhdGlvbiwgZmxvYXQqIHYsIGludCBzaXplKQoreworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsVW5pZm9ybTFmdihsb2NhdGlvbiwgc2l6ZSwg
dik7Cit9CisKK0dMX1NBTUVfTUVUSE9EXzIoVW5pZm9ybTFpLCB1bmlmb3JtMWksIGxvbmcsIGlu
dCkKKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFpdihsb25nIGxvY2F0aW9uLCBp
bnQqIHYsIGludCBzaXplKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsVW5p
Zm9ybTFpdihsb2NhdGlvbiwgc2l6ZSwgdik7Cit9CisKK0dMX1NBTUVfTUVUSE9EXzMoVW5pZm9y
bTJmLCB1bmlmb3JtMmYsIGxvbmcsIGZsb2F0LCBmbG9hdCkKKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6dW5pZm9ybTJmdihsb25nIGxvY2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUpCit7Cisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2xVbmlmb3JtMmZ2KGxvY2F0aW9uLCBzaXpl
LCB2KTsKK30KKworR0xfU0FNRV9NRVRIT0RfMyhVbmlmb3JtMmksIHVuaWZvcm0yaSwgbG9uZywg
aW50LCBpbnQpCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yaXYobG9uZyBsb2Nh
dGlvbiwgaW50KiB2LCBpbnQgc2l6ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBnbFVuaWZvcm0yaXYobG9jYXRpb24sIHNpemUsIHYpOworfQorCitHTF9TQU1FX01FVEhPRF80
KFVuaWZvcm0zZiwgdW5pZm9ybTNmLCBsb25nLCBmbG9hdCwgZmxvYXQsIGZsb2F0KQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2Z2KGxvbmcgbG9jYXRpb24sIGZsb2F0KiB2LCBp
bnQgc2l6ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbFVuaWZvcm0zZnYo
bG9jYXRpb24sIHNpemUsIHYpOworfQorCitHTF9TQU1FX01FVEhPRF80KFVuaWZvcm0zaSwgdW5p
Zm9ybTNpLCBsb25nLCBpbnQsIGludCwgaW50KQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1
bmlmb3JtM2l2KGxvbmcgbG9jYXRpb24sIGludCogdiwgaW50IHNpemUpCit7CisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgZ2xVbmlmb3JtM2l2KGxvY2F0aW9uLCBzaXplLCB2KTsKK30K
KworR0xfU0FNRV9NRVRIT0RfNShVbmlmb3JtNGYsIHVuaWZvcm00ZiwgbG9uZywgZmxvYXQsIGZs
b2F0LCBmbG9hdCwgZmxvYXQpCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00ZnYo
bG9uZyBsb2NhdGlvbiwgZmxvYXQqIHYsIGludCBzaXplKQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGdsVW5pZm9ybTRmdihsb2NhdGlvbiwgc2l6ZSwgdik7Cit9CisKK0dMX1NB
TUVfTUVUSE9EXzUoVW5pZm9ybTRpLCB1bmlmb3JtNGksIGxvbmcsIGludCwgaW50LCBpbnQsIGlu
dCkKKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRpdihsb25nIGxvY2F0aW9uLCBp
bnQqIHYsIGludCBzaXplKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsVW5p
Zm9ybTRpdihsb2NhdGlvbiwgc2l6ZSwgdik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnVuaWZvcm1NYXRyaXgyZnYobG9uZyBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGZsb2F0KiB2
YWx1ZSwgaW50IHNpemUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2xVbmlm
b3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIHZhbHVlKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDNmdihsb25nIGxvY2F0aW9uLCBib29s
IHRyYW5zcG9zZSwgZmxvYXQqIHZhbHVlLCBpbnQgc2l6ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBnbFVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9z
ZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4NGZ2
KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9hdCogdmFsdWUsIGludCBzaXplKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsVW5pZm9ybU1hdHJpeDRmdihsb2Nh
dGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCB2YWx1ZSk7Cit9CisKK0dMX1NBTUVfTUVUSE9EXzFfWChV
c2VQcm9ncmFtLCB1c2VQcm9ncmFtLCBDYW52YXNQcm9ncmFtKikKKworR0xfU0FNRV9NRVRIT0Rf
MV9YKFZhbGlkYXRlUHJvZ3JhbSwgdmFsaWRhdGVQcm9ncmFtLCBDYW52YXNQcm9ncmFtKikKKwor
R0xfU0FNRV9NRVRIT0RfMihWZXJ0ZXhBdHRyaWIxZiwgdmVydGV4QXR0cmliMWYsIHVuc2lnbmVk
IGxvbmcsIGZsb2F0KQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIxZnYo
dW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCogdmFsdWVzKQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGdsVmVydGV4QXR0cmliMWZ2KGluZHgsIHZhbHVlcyk7Cit9CisKK0dMX1NB
TUVfTUVUSE9EXzMoVmVydGV4QXR0cmliMmYsIHZlcnRleEF0dHJpYjJmLCB1bnNpZ25lZCBsb25n
LCBmbG9hdCwgZmxvYXQpCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjJm
dih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0KiB2YWx1ZXMpCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgZ2xWZXJ0ZXhBdHRyaWIyZnYoaW5keCwgdmFsdWVzKTsKK30KKworR0xf
U0FNRV9NRVRIT0RfNChWZXJ0ZXhBdHRyaWIzZiwgdmVydGV4QXR0cmliM2YsIHVuc2lnbmVkIGxv
bmcsIGZsb2F0LCBmbG9hdCwgZmxvYXQpCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRl
eEF0dHJpYjNmdih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0KiB2YWx1ZXMpCit7CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2xWZXJ0ZXhBdHRyaWIzZnYoaW5keCwgdmFsdWVzKTsK
K30KKworR0xfU0FNRV9NRVRIT0RfNShWZXJ0ZXhBdHRyaWI0ZiwgdmVydGV4QXR0cmliNGYsIHVu
c2lnbmVkIGxvbmcsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0KQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0ZnYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCogdmFs
dWVzKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsVmVydGV4QXR0cmliNGZ2
KGluZHgsIHZhbHVlcyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJp
YlBvaW50ZXIodW5zaWduZWQgbG9uZyBpbmR4LCBpbnQgc2l6ZSwgaW50IHR5cGUsIGJvb2wgbm9y
bWFsaXplZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgbG9uZyBzdHJpZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQoreworICAgIG1faW50ZXJu
YWwtPnZlcnRleEF0dHJpYlBvaW50ZXIoaW5keCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3Ry
aWRlLCBvZmZzZXQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2aWV3cG9ydChsb25n
IHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpCit7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgbV9pbnRlcm5hbC0+dmlld3BvcnRJbXBs
KHgsIHksIHdpZHRoLCBoZWlnaHQpOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FO
VkFTKQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JDbGllbnRJbXBs
LmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvSW5zcGVjdG9yQ2xpZW50SW1wbC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ0MzI5YQotLS0gL2Rldi9udWxsCisrKyBi
L1dlYktpdC9jaHJvbWl1bS9zcmMvSW5zcGVjdG9yQ2xpZW50SW1wbC5jcHAKQEAgLTAsMCArMSwy
NjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50SW1wbC5o
IgorCisjaW5jbHVkZSAiRE9NV2luZG93LmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5j
bHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
CisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiV2Vi
UmVjdC5oIgorI2luY2x1ZGUgIldlYlVSTC5oIgorI2luY2x1ZGUgIldlYlVSTFJlcXVlc3QuaCIK
KyNpbmNsdWRlICJXZWJWaWV3Q2xpZW50LmgiCisjaW5jbHVkZSAiV2ViVmlld0ltcGwuaCIKKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1l
c3BhY2UgV2ViS2l0IHsKKworSW5zcGVjdG9yQ2xpZW50SW1wbDo6SW5zcGVjdG9yQ2xpZW50SW1w
bChXZWJWaWV3SW1wbCogd2ViVmlldykKKyAgICA6IG1faW5zcGVjdGVkV2ViVmlldyh3ZWJWaWV3
KQoreworICAgIEFTU0VSVChtX2luc3BlY3RlZFdlYlZpZXcpOworfQorCitJbnNwZWN0b3JDbGll
bnRJbXBsOjp+SW5zcGVjdG9yQ2xpZW50SW1wbCgpCit7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ2xp
ZW50SW1wbDo6aW5zcGVjdG9yRGVzdHJveWVkKCkKK3sKKyAgICAvLyBPdXIgbGlmZXRpbWUgaXMg
Ym91bmQgdG8gdGhlIFdlYlZpZXdJbXBsLgorfQorCitQYWdlKiBJbnNwZWN0b3JDbGllbnRJbXBs
OjpjcmVhdGVQYWdlKCkKK3sKKyAgICAvLyBUaGlzIG1ldGhvZCBzaG91bGQgbmV2ZXIgYmUgY2Fs
bGVkIGluIENocm9tZSBhcyBpbnNwZWN0b3IgZnJvbnQtZW5kIGxpdmVzCisgICAgLy8gaW4gYSBz
ZXBhcmF0ZSBwcm9jZXNzLgorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAw
OworfQorCit2b2lkIEluc3BlY3RvckNsaWVudEltcGw6OnNob3dXaW5kb3coKQoreworICAgIEFT
U0VSVChtX2luc3BlY3RlZFdlYlZpZXctPmRldlRvb2xzQWdlbnRQcml2YXRlKCkpOworICAgIG1f
aW5zcGVjdGVkV2ViVmlldy0+cGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldFdpbmRv
d1Zpc2libGUodHJ1ZSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ2xpZW50SW1wbDo6Y2xvc2VXaW5k
b3coKQoreworICAgIGlmIChtX2luc3BlY3RlZFdlYlZpZXctPnBhZ2UoKSkKKyAgICAgICAgbV9p
bnNwZWN0ZWRXZWJWaWV3LT5wYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0V2luZG93
VmlzaWJsZShmYWxzZSk7Cit9CisKK2Jvb2wgSW5zcGVjdG9yQ2xpZW50SW1wbDo6d2luZG93Vmlz
aWJsZSgpCit7CisgICAgQVNTRVJUKG1faW5zcGVjdGVkV2ViVmlldy0+ZGV2VG9vbHNBZ2VudFBy
aXZhdGUoKSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEluc3BlY3RvckNsaWVudElt
cGw6OmF0dGFjaFdpbmRvdygpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzCit9CisK
K3ZvaWQgSW5zcGVjdG9yQ2xpZW50SW1wbDo6ZGV0YWNoV2luZG93KCkKK3sKKyAgICAvLyBGSVhN
RTogSW1wbGVtZW50IHRoaXMKK30KKwordm9pZCBJbnNwZWN0b3JDbGllbnRJbXBsOjpzZXRBdHRh
Y2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBpbnQgaGVpZ2h0KQoreworICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgdGhpcworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3N0YXRpYyB2b2lkIGlu
dmFsaWRhdGVOb2RlQm91bmRpbmdSZWN0KFdlYlZpZXdJbXBsKiB3ZWJWaWV3KQoreworICAgIC8v
IEZJWE1FOiBJcyBpdCBpbXBvcnRhbnQgdG8ganVzdCBpbnZhbGlkYXRlIHRoZSByZWN0IG9mIHRo
ZSBub2RlIHJlZ2lvbgorICAgIC8vIGdpdmVuIHRoYXQgdGhpcyBpcyBub3Qgb24gYSBjcml0aWNh
bCBjb2RlcGF0aD8gIEluIG9yZGVyIHRvIGRvIHNvLCB3ZSdkCisgICAgLy8gaGF2ZSB0byB0YWtl
IHNjcm9sbGluZyBpbnRvIGFjY291bnQuCisgICAgY29uc3QgV2ViU2l6ZSYgc2l6ZSA9IHdlYlZp
ZXctPnNpemUoKTsKKyAgICBXZWJSZWN0IGRhbWFnZWRSZWN0KDAsIDAsIHNpemUud2lkdGgsIHNp
emUuaGVpZ2h0KTsKKyAgICBpZiAod2ViVmlldy0+Y2xpZW50KCkpCisgICAgICAgIHdlYlZpZXct
PmNsaWVudCgpLT5kaWRJbnZhbGlkYXRlUmVjdChkYW1hZ2VkUmVjdCk7Cit9CisKK3ZvaWQgSW5z
cGVjdG9yQ2xpZW50SW1wbDo6aGlnaGxpZ2h0KE5vZGUqIG5vZGUpCit7CisgICAgLy8gSW5zcGVj
dG9yQ29udHJvbGxlciBkb2VzIHRoZSBhY3R1YWxseSB0cmFja2luZyBvZiB0aGUgaGlnaGxpZ2h0
ZWQgbm9kZQorICAgIC8vIGFuZCB0aGUgZHJhd2luZyBvZiB0aGUgaGlnaGxpZ2h0LiBIZXJlIHdl
IGp1c3QgbWFrZSBzdXJlIHRvIGludmFsaWRhdGUKKyAgICAvLyB0aGUgcmVjdHMgb2YgdGhlIG9s
ZCBhbmQgbmV3IG5vZGVzLgorICAgIGhpZGVIaWdobGlnaHQoKTsKK30KKwordm9pZCBJbnNwZWN0
b3JDbGllbnRJbXBsOjpoaWRlSGlnaGxpZ2h0KCkKK3sKKyAgICAvLyBGSVhNRTogYWJsZSB0byBp
bnZhbGlkYXRlIGEgc21hbGxlciByZWN0LgorICAgIGludmFsaWRhdGVOb2RlQm91bmRpbmdSZWN0
KG1faW5zcGVjdGVkV2ViVmlldyk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ2xpZW50SW1wbDo6aW5z
cGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIG5ld1VSTCkKK3sKKyAgICAvLyBGSVhNRTog
SW1wbGVtZW50IHRoaXMKK30KKworU3RyaW5nIEluc3BlY3RvckNsaWVudEltcGw6OmxvY2FsaXpl
ZFN0cmluZ3NVUkwoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFN0cmlu
ZygpOworfQorCitTdHJpbmcgSW5zcGVjdG9yQ2xpZW50SW1wbDo6aGlkZGVuUGFuZWxzKCkKK3sK
KyAgICAvLyBFbnVtZXJhdGUgdGFicyB0aGF0IGFyZSBjdXJyZW50bHkgZGlzYWJsZWQuCisgICAg
cmV0dXJuICJzY3JpcHRzLHByb2ZpbGVzLGRhdGFiYXNlcyI7Cit9CisKK3ZvaWQgSW5zcGVjdG9y
Q2xpZW50SW1wbDo6cG9wdWxhdGVTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBJbnNwZWN0b3JD
b250cm9sbGVyOjpTZXR0aW5nJiBzZXR0aW5nKQoreworICAgIGxvYWRTZXR0aW5ncygpOworICAg
IGlmIChtX3NldHRpbmdzLT5jb250YWlucyhrZXkpKQorICAgICAgICBzZXR0aW5nID0gbV9zZXR0
aW5ncy0+Z2V0KGtleSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ2xpZW50SW1wbDo6c3RvcmVTZXR0
aW5nKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBJbnNwZWN0b3JDb250cm9sbGVyOjpTZXR0aW5n
JiBzZXR0aW5nKQoreworICAgIGxvYWRTZXR0aW5ncygpOworICAgIG1fc2V0dGluZ3MtPnNldChr
ZXksIHNldHRpbmcpOworICAgIHNhdmVTZXR0aW5ncygpOworfQorCit2b2lkIEluc3BlY3RvckNs
aWVudEltcGw6OnJlbW92ZVNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXkpCit7CisgICAgbG9hZFNl
dHRpbmdzKCk7CisgICAgbV9zZXR0aW5ncy0+cmVtb3ZlKGtleSk7CisgICAgc2F2ZVNldHRpbmdz
KCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ2xpZW50SW1wbDo6aW5zcGVjdG9yV2luZG93T2JqZWN0
Q2xlYXJlZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBJbnNwZWN0b3JD
bGllbnRJbXBsOjpsb2FkU2V0dGluZ3MoKQoreworICAgIGlmIChtX3NldHRpbmdzKQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX3NldHRpbmdzLnNldChuZXcgU2V0dGluZ3NNYXApOworICAgIFN0
cmluZyBkYXRhID0gbV9pbnNwZWN0ZWRXZWJWaWV3LT5pbnNwZWN0b3JTZXR0aW5ncygpOworICAg
IGlmIChkYXRhLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmVjdG9yPFN0cmlu
Zz4gZW50cmllczsKKyAgICBkYXRhLnNwbGl0KCJcbiIsIGVudHJpZXMpOworICAgIGZvciAoVmVj
dG9yPFN0cmluZz46Oml0ZXJhdG9yIGl0ID0gZW50cmllcy5iZWdpbigpOyBpdCAhPSBlbnRyaWVz
LmVuZCgpOyArK2l0KSB7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IHRva2VuczsKKyAgICAgICAg
aXQtPnNwbGl0KCI6IiwgdG9rZW5zKTsKKyAgICAgICAgaWYgKHRva2Vucy5zaXplKCkgIT0gMykK
KyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIFN0cmluZyBuYW1lID0gZGVjb2RlVVJM
RXNjYXBlU2VxdWVuY2VzKHRva2Vuc1swXSk7CisgICAgICAgIFN0cmluZyB0eXBlID0gdG9rZW5z
WzFdOworICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVyOjpTZXR0aW5nIHNldHRpbmc7CisgICAg
ICAgIGJvb2wgb2sgPSB0cnVlOworICAgICAgICBpZiAodHlwZSA9PSAic3RyaW5nIikKKyAgICAg
ICAgICAgIHNldHRpbmcuc2V0KGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyh0b2tlbnNbMl0pKTsK
KyAgICAgICAgZWxzZSBpZiAodHlwZSA9PSAiZG91YmxlIikKKyAgICAgICAgICAgIHNldHRpbmcu
c2V0KHRva2Vuc1syXS50b0RvdWJsZSgmb2spKTsKKyAgICAgICAgZWxzZSBpZiAodHlwZSA9PSAi
aW50ZWdlciIpCisgICAgICAgICAgICBzZXR0aW5nLnNldChzdGF0aWNfY2FzdDxsb25nPih0b2tl
bnNbMl0udG9JbnQoJm9rKSkpOworICAgICAgICBlbHNlIGlmICh0eXBlID09ICJib29sZWFuIikK
KyAgICAgICAgICAgIHNldHRpbmcuc2V0KHRva2Vuc1syXSA9PSAidHJ1ZSIpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAob2spCisgICAgICAgICAg
ICBtX3NldHRpbmdzLT5zZXQobmFtZSwgc2V0dGluZyk7CisgICAgfQorfQorCit2b2lkIEluc3Bl
Y3RvckNsaWVudEltcGw6OnNhdmVTZXR0aW5ncygpCit7CisgICAgU3RyaW5nIGRhdGE7CisgICAg
Zm9yIChTZXR0aW5nc01hcDo6aXRlcmF0b3IgaXQgPSBtX3NldHRpbmdzLT5iZWdpbigpOyBpdCAh
PSBtX3NldHRpbmdzLT5lbmQoKTsgKytpdCkgeworICAgICAgICBTdHJpbmcgZW50cnk7CisgICAg
ICAgIEluc3BlY3RvckNvbnRyb2xsZXI6OlNldHRpbmcgdmFsdWUgPSBpdC0+c2Vjb25kOworICAg
ICAgICBTdHJpbmcgbmFtZSA9IGVuY29kZVdpdGhVUkxFc2NhcGVTZXF1ZW5jZXMoaXQtPmZpcnN0
KTsKKyAgICAgICAgc3dpdGNoICh2YWx1ZS50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBJbnNwZWN0
b3JDb250cm9sbGVyOjpTZXR0aW5nOjpTdHJpbmdUeXBlOgorICAgICAgICAgICAgZW50cnkgPSBT
dHJpbmc6OmZvcm1hdCgKKyAgICAgICAgICAgICAgICAiJXM6c3RyaW5nOiVzIiwKKyAgICAgICAg
ICAgICAgICBuYW1lLnV0ZjgoKS5kYXRhKCksCisgICAgICAgICAgICAgICAgZW5jb2RlV2l0aFVS
TEVzY2FwZVNlcXVlbmNlcyh2YWx1ZS5zdHJpbmcoKSkudXRmOCgpLmRhdGEoKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnNwZWN0b3JDb250cm9sbGVyOjpTZXR0aW5nOjpE
b3VibGVUeXBlOgorICAgICAgICAgICAgZW50cnkgPSBTdHJpbmc6OmZvcm1hdCgKKyAgICAgICAg
ICAgICAgICAiJXM6ZG91YmxlOiVmIiwKKyAgICAgICAgICAgICAgICBuYW1lLnV0ZjgoKS5kYXRh
KCksCisgICAgICAgICAgICAgICAgdmFsdWUuZG91YmxlVmFsdWUoKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBJbnNwZWN0b3JDb250cm9sbGVyOjpTZXR0aW5nOjpJbnRlZ2Vy
VHlwZToKKyAgICAgICAgICAgIGVudHJ5ID0gU3RyaW5nOjpmb3JtYXQoCisgICAgICAgICAgICAg
ICAgIiVzOmludGVnZXI6JWxkIiwKKyAgICAgICAgICAgICAgICBuYW1lLnV0ZjgoKS5kYXRhKCks
CisgICAgICAgICAgICAgICAgdmFsdWUuaW50ZWdlclZhbHVlKCkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgSW5zcGVjdG9yQ29udHJvbGxlcjo6U2V0dGluZzo6Qm9vbGVhblR5
cGU6CisgICAgICAgICAgICBlbnRyeSA9IFN0cmluZzo6Zm9ybWF0KCIlczpib29sZWFuOiVzIiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZS51dGY4KCkuZGF0YSgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5ib29sZWFuVmFsdWUoKSA/
ICJ0cnVlIiA6ICJmYWxzZSIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW5z
cGVjdG9yQ29udHJvbGxlcjo6U2V0dGluZzo6U3RyaW5nVmVjdG9yVHlwZToKKyAgICAgICAgICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgZGF0YS5hcHBlbmQoZW50cnkpOworICAgICAgICBkYXRhLmFwcGVu
ZCgiXG4iKTsKKyAgICB9CisgICAgbV9pbnNwZWN0ZWRXZWJWaWV3LT5zZXRJbnNwZWN0b3JTZXR0
aW5ncyhkYXRhKTsKKyAgICBpZiAobV9pbnNwZWN0ZWRXZWJWaWV3LT5jbGllbnQoKSkKKyAgICAg
ICAgbV9pbnNwZWN0ZWRXZWJWaWV3LT5jbGllbnQoKS0+ZGlkVXBkYXRlSW5zcGVjdG9yU2V0dGlu
Z3MoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hy
b21pdW0vc3JjL0luc3BlY3RvckNsaWVudEltcGwuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvSW5z
cGVjdG9yQ2xpZW50SW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYy
MjE2YjIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckNs
aWVudEltcGwuaApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJbnNwZWN0b3JDbGllbnRJbXBsX2gK
KyNkZWZpbmUgSW5zcGVjdG9yQ2xpZW50SW1wbF9oCisKKyNpbmNsdWRlICJJbnNwZWN0b3JDbGll
bnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCisjaW5jbHVkZSA8d3RmL093
blB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYlZpZXdJbXBsOworCitjbGFz
cyBJbnNwZWN0b3JDbGllbnRJbXBsIDogcHVibGljIFdlYkNvcmU6Okluc3BlY3RvckNsaWVudCB7
CitwdWJsaWM6CisgICAgSW5zcGVjdG9yQ2xpZW50SW1wbChXZWJWaWV3SW1wbCopOworICAgIH5J
bnNwZWN0b3JDbGllbnRJbXBsKCk7CisKKyAgICAvLyBJbnNwZWN0b3JDbGllbnQgbWV0aG9kczoK
KyAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdG9yRGVzdHJveWVkKCk7CisgICAgdmlydHVhbCBXZWJD
b3JlOjpQYWdlKiBjcmVhdGVQYWdlKCk7CisgICAgdmlydHVhbCBXZWJDb3JlOjpTdHJpbmcgbG9j
YWxpemVkU3RyaW5nc1VSTCgpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6U3RyaW5nIGhpZGRlblBh
bmVscygpOworICAgIHZpcnR1YWwgdm9pZCBzaG93V2luZG93KCk7CisgICAgdmlydHVhbCB2b2lk
IGNsb3NlV2luZG93KCk7CisgICAgdmlydHVhbCBib29sIHdpbmRvd1Zpc2libGUoKTsKKyAgICB2
aXJ0dWFsIHZvaWQgYXR0YWNoV2luZG93KCk7CisgICAgdmlydHVhbCB2b2lkIGRldGFjaFdpbmRv
dygpOworICAgIHZpcnR1YWwgdm9pZCBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBo
ZWlnaHQpOworICAgIHZpcnR1YWwgdm9pZCBoaWdobGlnaHQoV2ViQ29yZTo6Tm9kZSopOworICAg
IHZpcnR1YWwgdm9pZCBoaWRlSGlnaGxpZ2h0KCk7CisgICAgdmlydHVhbCB2b2lkIGluc3BlY3Rl
ZFVSTENoYW5nZWQoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBuZXdVUkwpOworICAgIHZpcnR1YWwg
dm9pZCBwb3B1bGF0ZVNldHRpbmcoCisgICAgICAgIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYga2V5
LAorICAgICAgICBXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpTZXR0aW5nJik7CisgICAg
dmlydHVhbCB2b2lkIHN0b3JlU2V0dGluZygKKyAgICAgICAgY29uc3QgV2ViQ29yZTo6U3RyaW5n
JiBrZXksCisgICAgICAgIGNvbnN0IFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OlNldHRp
bmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlU2V0dGluZyhjb25zdCBXZWJDb3JlOjpTdHJp
bmcmIGtleSk7CisgICAgdmlydHVhbCB2b2lkIGluc3BlY3RvcldpbmRvd09iamVjdENsZWFyZWQo
KTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGxvYWRTZXR0aW5ncygpOworICAgIHZvaWQgc2F2ZVNl
dHRpbmdzKCk7CisKKyAgICAvLyBUaGUgV2ViVmlld0ltcGwgb2YgdGhlIHBhZ2UgYmVpbmcgaW5z
cGVjdGVkOyBnZXRzIHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3IKKyAgICBXZWJWaWV3SW1wbCog
bV9pbnNwZWN0ZWRXZWJWaWV3OworCisgICAgdHlwZWRlZiBIYXNoTWFwPFdlYkNvcmU6OlN0cmlu
ZywgV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6U2V0dGluZz4gU2V0dGluZ3NNYXA7Cisg
ICAgT3duUHRyPFNldHRpbmdzTWFwPiBtX3NldHRpbmdzOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9Mb2NhbGl6
ZWRTdHJpbmdzLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvTG9jYWxpemVkU3RyaW5ncy5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZiMjMxZQotLS0gL2Rldi9udWxs
CisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvTG9jYWxpemVkU3RyaW5ncy5jcHAKQEAgLTAsMCAr
MSwyNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5o
IgorCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisj
aW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTdHJpbmdCdWlsZGVyLmgiCisK
KyNpbmNsdWRlICJXZWJLaXQuaCIKKyNpbmNsdWRlICJXZWJLaXRDbGllbnQuaCIKKyNpbmNsdWRl
ICJXZWJMb2NhbGl6ZWRTdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKwordXNpbmcg
V2ViS2l0OjpXZWJMb2NhbGl6ZWRTdHJpbmc7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3Rh
dGljIFN0cmluZyBxdWVyeShXZWJMb2NhbGl6ZWRTdHJpbmc6Ok5hbWUgbmFtZSkKK3sKKyAgICBy
ZXR1cm4gV2ViS2l0Ojp3ZWJLaXRDbGllbnQoKS0+cXVlcnlMb2NhbGl6ZWRTdHJpbmcobmFtZSk7
Cit9CisKK3N0YXRpYyBTdHJpbmcgcXVlcnkoV2ViTG9jYWxpemVkU3RyaW5nOjpOYW1lIG5hbWUs
IGludCBudW1lcmljVmFsdWUpCit7CisgICAgcmV0dXJuIFdlYktpdDo6d2ViS2l0Q2xpZW50KCkt
PnF1ZXJ5TG9jYWxpemVkU3RyaW5nKG5hbWUsIG51bWVyaWNWYWx1ZSk7Cit9CisKK1N0cmluZyBz
ZWFyY2hhYmxlSW5kZXhJbnRyb2R1Y3Rpb24oKQoreworICAgIHJldHVybiBxdWVyeShXZWJMb2Nh
bGl6ZWRTdHJpbmc6OlNlYXJjaGFibGVJbmRleEludHJvZHVjdGlvbik7Cit9CisKK1N0cmluZyBz
dWJtaXRCdXR0b25EZWZhdWx0TGFiZWwoKQoreworICAgIHJldHVybiBxdWVyeShXZWJMb2NhbGl6
ZWRTdHJpbmc6OlN1Ym1pdEJ1dHRvbkRlZmF1bHRMYWJlbCk7Cit9CisKK1N0cmluZyBpbnB1dEVs
ZW1lbnRBbHRUZXh0KCkKK3sKKyAgICByZXR1cm4gcXVlcnkoV2ViTG9jYWxpemVkU3RyaW5nOjpJ
bnB1dEVsZW1lbnRBbHRUZXh0KTsKK30KKworU3RyaW5nIHJlc2V0QnV0dG9uRGVmYXVsdExhYmVs
KCkKK3sKKyAgICByZXR1cm4gcXVlcnkoV2ViTG9jYWxpemVkU3RyaW5nOjpSZXNldEJ1dHRvbkRl
ZmF1bHRMYWJlbCk7Cit9CisKK1N0cmluZyBmaWxlQnV0dG9uQ2hvb3NlRmlsZUxhYmVsKCkKK3sK
KyAgICByZXR1cm4gcXVlcnkoV2ViTG9jYWxpemVkU3RyaW5nOjpGaWxlQnV0dG9uQ2hvb3NlRmls
ZUxhYmVsKTsKK30KKworU3RyaW5nIGZpbGVCdXR0b25Ob0ZpbGVTZWxlY3RlZExhYmVsKCkKK3sK
KyAgICByZXR1cm4gcXVlcnkoV2ViTG9jYWxpemVkU3RyaW5nOjpGaWxlQnV0dG9uTm9GaWxlU2Vs
ZWN0ZWRMYWJlbCk7Cit9CisKK1N0cmluZyBzZWFyY2hNZW51Tm9SZWNlbnRTZWFyY2hlc1RleHQo
KQoreworICAgIHJldHVybiBxdWVyeShXZWJMb2NhbGl6ZWRTdHJpbmc6OlNlYXJjaE1lbnVOb1Jl
Y2VudFNlYXJjaGVzVGV4dCk7Cit9CitTdHJpbmcgc2VhcmNoTWVudVJlY2VudFNlYXJjaGVzVGV4
dCgpCit7CisgICAgcmV0dXJuIHF1ZXJ5KFdlYkxvY2FsaXplZFN0cmluZzo6U2VhcmNoTWVudVJl
Y2VudFNlYXJjaGVzVGV4dCk7Cit9CitTdHJpbmcgc2VhcmNoTWVudUNsZWFyUmVjZW50U2VhcmNo
ZXNUZXh0KCkKK3sKKyAgICByZXR1cm4gcXVlcnkoV2ViTG9jYWxpemVkU3RyaW5nOjpTZWFyY2hN
ZW51Q2xlYXJSZWNlbnRTZWFyY2hlc1RleHQpOworfQorCitTdHJpbmcgQVhXZWJBcmVhVGV4dCgp
Cit7CisgICAgcmV0dXJuIHF1ZXJ5KFdlYkxvY2FsaXplZFN0cmluZzo6QVhXZWJBcmVhVGV4dCk7
Cit9CisKK1N0cmluZyBBWExpbmtUZXh0KCkKK3sKKyAgICByZXR1cm4gcXVlcnkoV2ViTG9jYWxp
emVkU3RyaW5nOjpBWExpbmtUZXh0KTsKK30KKworU3RyaW5nIEFYTGlzdE1hcmtlclRleHQoKQor
eworICAgIHJldHVybiBxdWVyeShXZWJMb2NhbGl6ZWRTdHJpbmc6OkFYTGlzdE1hcmtlclRleHQp
OworfQorCitTdHJpbmcgQVhJbWFnZU1hcFRleHQoKQoreworICAgIHJldHVybiBxdWVyeShXZWJM
b2NhbGl6ZWRTdHJpbmc6OkFYSW1hZ2VNYXBUZXh0KTsKK30KKworU3RyaW5nIEFYSGVhZGluZ1Rl
eHQoKQoreworICAgIHJldHVybiBxdWVyeShXZWJMb2NhbGl6ZWRTdHJpbmc6OkFYSGVhZGluZ1Rl
eHQpOworfQorCitTdHJpbmcgQVhEZWZpbml0aW9uTGlzdFRlcm1UZXh0KCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJpbmcoInRlcm0iKTsKK30KKworU3RyaW5nIEFY
RGVmaW5pdGlvbkxpc3REZWZpbml0aW9uVGV4dCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4gU3RyaW5nKCJkZWZpbml0aW9uIik7Cit9CisKK1N0cmluZyBBWEJ1dHRvbkFj
dGlvblZlcmIoKQoreworICAgIHJldHVybiBxdWVyeShXZWJMb2NhbGl6ZWRTdHJpbmc6OkFYQnV0
dG9uQWN0aW9uVmVyYik7Cit9CisKK1N0cmluZyBBWFJhZGlvQnV0dG9uQWN0aW9uVmVyYigpCit7
CisgICAgcmV0dXJuIHF1ZXJ5KFdlYkxvY2FsaXplZFN0cmluZzo6QVhSYWRpb0J1dHRvbkFjdGlv
blZlcmIpOworfQorCitTdHJpbmcgQVhUZXh0RmllbGRBY3Rpb25WZXJiKCkKK3sKKyAgICByZXR1
cm4gcXVlcnkoV2ViTG9jYWxpemVkU3RyaW5nOjpBWFRleHRGaWVsZEFjdGlvblZlcmIpOworfQor
CitTdHJpbmcgQVhDaGVja2VkQ2hlY2tCb3hBY3Rpb25WZXJiKCkKK3sKKyAgICByZXR1cm4gcXVl
cnkoV2ViTG9jYWxpemVkU3RyaW5nOjpBWENoZWNrZWRDaGVja0JveEFjdGlvblZlcmIpOworfQor
CitTdHJpbmcgQVhVbmNoZWNrZWRDaGVja0JveEFjdGlvblZlcmIoKQoreworICAgIHJldHVybiBx
dWVyeShXZWJMb2NhbGl6ZWRTdHJpbmc6OkFYVW5jaGVja2VkQ2hlY2tCb3hBY3Rpb25WZXJiKTsK
K30KKworU3RyaW5nIEFYTGlua0FjdGlvblZlcmIoKQoreworICAgIHJldHVybiBxdWVyeShXZWJM
b2NhbGl6ZWRTdHJpbmc6OkFYTGlua0FjdGlvblZlcmIpOworfQorCitTdHJpbmcgbXVsdGlwbGVG
aWxlVXBsb2FkVGV4dCh1bnNpZ25lZCBudW1iZXJPZkZpbGVzKQoreworICAgIHJldHVybiBxdWVy
eShXZWJMb2NhbGl6ZWRTdHJpbmc6Ok11bHRpcGxlRmlsZVVwbG9hZFRleHQsIG51bWJlck9mRmls
ZXMpOworfQorCisvLyBVc2VkIGluIEZUUERpcmVjdG9yeURvY3VtZW50LmNwcAorU3RyaW5nIHVu
a25vd25GaWxlU2l6ZVRleHQoKQoreworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworLy8gVGhl
IGZvbGxvd2luZyB0d28gZnVuY3Rpb25zIGFyZSBub3QgZGVjbGFyZWQgaW4gTG9jYWxpemVkU3Ry
aW5ncy5oLgorLy8gVGhleSBhcmUgdXNlZCBieSB0aGUgbWVudSBmb3IgdGhlIEhUTUwga2V5Z2Vu
IHRhZy4KK1N0cmluZyBrZXlnZW5NZW51SGlnaEdyYWRlS2V5U2l6ZSgpCit7CisgICAgcmV0dXJu
IHF1ZXJ5KFdlYkxvY2FsaXplZFN0cmluZzo6S2V5Z2VuTWVudUhpZ2hHcmFkZUtleVNpemUpOwor
fQorCitTdHJpbmcga2V5Z2VuTWVudU1lZGl1bUdyYWRlS2V5U2l6ZSgpCit7CisgICAgcmV0dXJu
IHF1ZXJ5KFdlYkxvY2FsaXplZFN0cmluZzo6S2V5Z2VuTWVudU1lZGl1bUdyYWRlS2V5U2l6ZSk7
Cit9CisKKy8vIFVzZWQgaW4gSW1hZ2VEb2N1bWVudC5jcHAgYXMgdGhlIHRpdGxlIGZvciBwYWdl
cyB3aGVuIHRoYXQgcGFnZSBpcyBhbiBpbWFnZS4KK1N0cmluZyBpbWFnZVRpdGxlKGNvbnN0IFN0
cmluZyYgZmlsZW5hbWUsIGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgLy8gTm90ZSB0aGF0
IHdlIGNhbm5vdCB1c2UgU3RyaW5nOjpmb3JtYXQgYmVjYXVzZSBpdCB3b3JrcyBmb3IgQVNDSUkg
b25seS4KKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKKyAgICByZXN1bHQuYXBwZW5kKGZpbGVu
YW1lKTsKKyAgICByZXN1bHQuYXBwZW5kKCIgKCIpOworICAgIHJlc3VsdC5hcHBlbmQoU3RyaW5n
OjpudW1iZXIoc2l6ZS53aWR0aCgpKSk7CisgICAgcmVzdWx0LmFwcGVuZChzdGF0aWNfY2FzdDxV
Q2hhcj4oMHhENykpOyAgLy8gVSswMEQ3IChtdWx0aXBsaWNhdGlvbiBzaWduKQorICAgIHJlc3Vs
dC5hcHBlbmQoU3RyaW5nOjpudW1iZXIoc2l6ZS5oZWlnaHQoKSkpOworICAgIHJlc3VsdC5hcHBl
bmQoIikiKTsKKyAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Cit9CisKKy8vIFdlIGRvbid0
IHVzZSB0aGVzZSBzdHJpbmdzLCBzbyB0aGV5IHJldHVybiBhbiBlbXB0eSBTdHJpbmcuIFdlIGNh
bid0IGp1c3QKKy8vIG1ha2UgdGhlbSBhc3NlcnRzIGJlY2F1c2Ugd2ViY29yZSBzdGlsbCBjYWxs
cyB0aGVtLgorU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rSW5OZXdXaW5kb3coKSB7
IHJldHVybiBTdHJpbmcoKTsgfQorU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkTGlu
a1RvRGlzaygpIHsgcmV0dXJuIFN0cmluZygpOyB9CitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFn
Q29weUxpbmtUb0NsaXBib2FyZCgpIHsgcmV0dXJuIFN0cmluZygpOyB9CitTdHJpbmcgY29udGV4
dE1lbnVJdGVtVGFnT3BlbkltYWdlSW5OZXdXaW5kb3coKSB7IHJldHVybiBTdHJpbmcoKTsgfQor
U3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkSW1hZ2VUb0Rpc2soKSB7IHJldHVybiBT
dHJpbmcoKTsgfQorU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0NvcHlJbWFnZVRvQ2xpcGJvYXJk
KCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdPcGVuRnJh
bWVJbk5ld1dpbmRvdygpIHsgcmV0dXJuIFN0cmluZygpOyB9CitTdHJpbmcgY29udGV4dE1lbnVJ
dGVtVGFnQ29weSgpIHsgcmV0dXJuIFN0cmluZygpOyB9CitTdHJpbmcgY29udGV4dE1lbnVJdGVt
VGFnR29CYWNrKCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KK1N0cmluZyBjb250ZXh0TWVudUl0ZW1U
YWdHb0ZvcndhcmQoKSB7IHJldHVybiBTdHJpbmcoKTsgfQorU3RyaW5nIGNvbnRleHRNZW51SXRl
bVRhZ1N0b3AoKSB7IHJldHVybiBTdHJpbmcoKTsgfQorU3RyaW5nIGNvbnRleHRNZW51SXRlbVRh
Z1JlbG9hZCgpIHsgcmV0dXJuIFN0cmluZygpOyB9CitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFn
Q3V0KCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdQYXN0
ZSgpIHsgcmV0dXJuIFN0cmluZygpOyB9CitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnTm9HdWVz
c2VzRm91bmQoKSB7IHJldHVybiBTdHJpbmcoKTsgfQorU3RyaW5nIGNvbnRleHRNZW51SXRlbVRh
Z0lnbm9yZVNwZWxsaW5nKCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KK1N0cmluZyBjb250ZXh0TWVu
dUl0ZW1UYWdMZWFyblNwZWxsaW5nKCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KK1N0cmluZyBjb250
ZXh0TWVudUl0ZW1UYWdTZWFyY2hXZWIoKSB7IHJldHVybiBTdHJpbmcoKTsgfQorU3RyaW5nIGNv
bnRleHRNZW51SXRlbVRhZ0xvb2tVcEluRGljdGlvbmFyeSgpIHsgcmV0dXJuIFN0cmluZygpOyB9
CitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnT3BlbkxpbmsoKSB7IHJldHVybiBTdHJpbmcoKTsg
fQorU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0lnbm9yZUdyYW1tYXIoKSB7IHJldHVybiBTdHJp
bmcoKTsgfQorU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1NwZWxsaW5nTWVudSgpIHsgcmV0dXJu
IFN0cmluZygpOyB9CitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnQ2hlY2tTcGVsbGluZygpIHsg
cmV0dXJuIFN0cmluZygpOyB9CitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnQ2hlY2tTcGVsbGlu
Z1doaWxlVHlwaW5nKCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KK1N0cmluZyBjb250ZXh0TWVudUl0
ZW1UYWdDaGVja0dyYW1tYXJXaXRoU3BlbGxpbmcoKSB7IHJldHVybiBTdHJpbmcoKTsgfQorU3Ry
aW5nIGNvbnRleHRNZW51SXRlbVRhZ0ZvbnRNZW51KCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KK1N0
cmluZyBjb250ZXh0TWVudUl0ZW1UYWdCb2xkKCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KK1N0cmlu
ZyBjb250ZXh0TWVudUl0ZW1UYWdJdGFsaWMoKSB7IHJldHVybiBTdHJpbmcoKTsgfQorU3RyaW5n
IGNvbnRleHRNZW51SXRlbVRhZ1VuZGVybGluZSgpIHsgcmV0dXJuIFN0cmluZygpOyB9CitTdHJp
bmcgY29udGV4dE1lbnVJdGVtVGFnT3V0bGluZSgpIHsgcmV0dXJuIFN0cmluZygpOyB9CitTdHJp
bmcgY29udGV4dE1lbnVJdGVtVGFnV3JpdGluZ0RpcmVjdGlvbk1lbnUoKSB7IHJldHVybiBTdHJp
bmcoKTsgfQorU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1RleHREaXJlY3Rpb25NZW51KCkgeyBy
ZXR1cm4gU3RyaW5nKCk7IH0KK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdEZWZhdWx0RGlyZWN0
aW9uKCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdMZWZ0
VG9SaWdodCgpIHsgcmV0dXJuIFN0cmluZygpOyB9CitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFn
UmlnaHRUb0xlZnQoKSB7IHJldHVybiBTdHJpbmcoKTsgfQorU3RyaW5nIGNvbnRleHRNZW51SXRl
bVRhZ0luc3BlY3RFbGVtZW50KCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KK1N0cmluZyBjb250ZXh0
TWVudUl0ZW1UYWdTaG93U3BlbGxpbmdQYW5lbChib29sIHNob3cpIHsgcmV0dXJuIFN0cmluZygp
OyB9CitTdHJpbmcgbWVkaWFFbGVtZW50TGl2ZUJyb2FkY2FzdFN0YXRlVGV4dCgpIHsgcmV0dXJu
IFN0cmluZygpOyB9CitTdHJpbmcgbWVkaWFFbGVtZW50TG9hZGluZ1N0YXRlVGV4dCgpIHsgcmV0
dXJuIFN0cmluZygpOyB9CisKK1N0cmluZyBsb2NhbGl6ZWRNZWRpYUNvbnRyb2xFbGVtZW50U3Ry
aW5nKGNvbnN0IFN0cmluZyYgLypuYW1lKi8pCit7CisgICAgLy8gRklYTUU6IHRvIGJlIGZpeGVk
LgorICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5nIGxvY2FsaXplZE1lZGlhQ29udHJv
bEVsZW1lbnRIZWxwVGV4dChjb25zdCBTdHJpbmcmIC8qbmFtZSovKQoreworICAgIC8vIEZJWE1F
OiB0byBiZSBmaXhlZC4KKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBsb2NhbGl6
ZWRNZWRpYVRpbWVEZXNjcmlwdGlvbihmbG9hdCAvKnRpbWUqLykKK3sKKyAgICAvLyBGSVhNRTog
dG8gYmUgZml4ZWQuCisgICAgcmV0dXJuIFN0cmluZygpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL01lZGlhUGxheWVyUHJpdmF0
ZUNocm9taXVtLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvTWVkaWFQbGF5ZXJQcml2YXRlQ2hy
b21pdW0uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5ZDMzZDQKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL01lZGlhUGxheWVyUHJpdmF0ZUNo
cm9taXVtLmNwcApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
Ik1lZGlhUGxheWVyUHJpdmF0ZUNocm9taXVtLmgiCisKKyNpZiBFTkFCTEUoVklERU8pCisKKyNp
bmNsdWRlICJXZWJNZWRpYVBsYXllckNsaWVudEltcGwuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cmVnaXN0ZXJNZWRpYUVuZ2luZShNZWRpYUVu
Z2luZVJlZ2lzdHJhciByZWdpc3RyYXIpCit7CisgICAgV2ViS2l0OjpXZWJNZWRpYVBsYXllckNs
aWVudEltcGw6OnJlZ2lzdGVyU2VsZihyZWdpc3RyYXIpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42837</attachid>
            <date>2009-11-09 19:01:50 -0800</date>
            <delta_ts>2009-11-10 10:49:15 -0800</delta_ts>
            <desc>Up-streaming Chromium API src files: NotificationPresenterImpl...SharedWorkerRepository</desc>
            <filename>bug-31276-20091109190149.patch</filename>
            <type>text/plain</type>
            <size>41861</size>
            <attacher name="Yaar Schnitman">yaar</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IDkyZDIxMzguLjMzYjk4ZGEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMiw2ICsy
LDk1IEBACiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAKKyAgICAgICAg
VXAtc3RyZWFtaW5nIENocm9taXVtIEFQSSBzcmMgZmlsZXM6IE5vdGlmaWNhdGlvblByZXNlbnRl
ckltcGwuLi5TaGFyZWRXb3JrZXJSZXBvc2l0b3J5CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMxMjc2CisKKyAgICAgICAgKiBzcmMvTm90aWZpY2F0
aW9uUHJlc2VudGVySW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpWb2lkQ2FsbGJh
Y2tDbGllbnQ6OlZvaWRDYWxsYmFja0NsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OlZvaWRDYWxs
YmFja0NsaWVudDo6cGVybWlzc2lvblJlcXVlc3RDb21wbGV0ZSk6CisgICAgICAgIChXZWJLaXQ6
Ok5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViS2l0
OjpOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjppc0luaXRpYWxpemVkKToKKyAgICAgICAgKFdl
YktpdDo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6c2hvdyk6CisgICAgICAgIChXZWJLaXQ6
Ok5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6OmNhbmNlbCk6CisgICAgICAgIChXZWJLaXQ6Ok5v
dGlmaWNhdGlvblByZXNlbnRlckltcGw6Om5vdGlmaWNhdGlvbk9iamVjdERlc3Ryb3llZCk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6OmNoZWNrUGVybWlzc2lv
bik6CisgICAgICAgIChXZWJLaXQ6Ok5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6OnJlcXVlc3RQ
ZXJtaXNzaW9uKToKKyAgICAgICAgKiBzcmMvTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbC5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYktpdDo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6Tm90aWZp
Y2F0aW9uUHJlc2VudGVySW1wbCk6CisgICAgICAgICogc3JjL1BsYXRmb3JtTWVzc2FnZVBvcnRD
aGFubmVsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydENoYW5uZWw6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydENoYW5uZWw6OmNyZWF0ZUNo
YW5uZWwpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnRDaGFubmVsOjpNZXNzYWdlUG9y
dENoYW5uZWwpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnRDaGFubmVsOjp+TWVzc2Fn
ZVBvcnRDaGFubmVsKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0Q2hhbm5lbDo6ZW50
YW5nbGVJZk9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnRDaGFubmVsOjpkaXNl
bnRhbmdsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydENoYW5uZWw6OnBvc3RNZXNz
YWdlVG9SZW1vdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnRDaGFubmVsOjp0cnlH
ZXRNZXNzYWdlRnJvbVJlbW90ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydENoYW5u
ZWw6OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0Q2hhbm5lbDo6aXNDb25u
ZWN0ZWRUbyk6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydENoYW5uZWw6Omhhc1BlbmRp
bmdBY3Rpdml0eSk6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydENoYW5uZWw6OmxvY2Fs
bHlFbnRhbmdsZWRQb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtTWVzc2FnZVBvcnRD
aGFubmVsOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1NZXNzYWdlUG9ydENo
YW5uZWw6OlBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsOjp+UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwpOgor
ICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw6OmNyZWF0ZUNoYW5u
ZWwpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw6Om1lc3Nh
Z2VBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5u
ZWw6OmVudGFuZ2xlSWZPcGVuKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtTWVzc2FnZVBv
cnRDaGFubmVsOjpkaXNlbnRhbmdsZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybU1lc3Nh
Z2VQb3J0Q2hhbm5lbDo6cG9zdE1lc3NhZ2VUb1JlbW90ZSk6CisgICAgICAgIChXZWJDb3JlOjpQ
bGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbDo6dHJ5R2V0TWVzc2FnZUZyb21SZW1vdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw6OmNsb3NlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsOjppc0Nvbm5lY3RlZFRvKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsOjpoYXNQZW5kaW5n
QWN0aXZpdHkpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw6
OnNldEVudGFuZ2xlZENoYW5uZWwpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1NZXNzYWdl
UG9ydENoYW5uZWw6OndlYkNoYW5uZWxSZWxlYXNlKToKKyAgICAgICAgKiBzcmMvUGxhdGZvcm1N
ZXNzYWdlUG9ydENoYW5uZWwuaDogQWRkZWQuCisgICAgICAgICogc3JjL1Jlc291cmNlSGFuZGxl
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUludGVybmFsOjpS
ZXNvdXJjZUhhbmRsZUludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxl
SW50ZXJuYWw6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlSW50ZXJu
YWw6OmNhbmNlbCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUludGVybmFsOjpz
ZXREZWZlcnNMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlSW50ZXJu
YWw6OmFsbG93U3RvcmVkQ3JlZGVudGlhbHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VI
YW5kbGVJbnRlcm5hbDo6d2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlSGFuZGxlSW50ZXJuYWw6OmRpZFNlbmREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlSGFuZGxlSW50ZXJuYWw6OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZXNvdXJjZUhhbmRsZUludGVybmFsOjpkaWRSZWNlaXZlRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUhhbmRsZUludGVybmFsOjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlSGFuZGxlSW50ZXJuYWw6OmRpZEZhaWwpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VIYW5kbGU6OlJlc291cmNlSGFuZGxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlSGFuZGxlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5k
bGU6OnJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmNsaWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6c2V0Q2xpZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpzZXREZWZlcnNMb2FkaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlSGFuZGxlOjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZTo6Y2xlYXJBdXRoZW50aWNhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZTo6Y2FuY2VsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjp+UmVz
b3VyY2VIYW5kbGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmJ1ZmZlcmVk
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6bG9hZHNCbG9ja2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpzdXBwb3J0c0J1ZmZlcmVkRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25v
dXNseSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6d2lsbExvYWRGcm9tQ2Fj
aGUpOgorICAgICAgICAqIHNyYy9TaGFyZWRXb3JrZXJSZXBvc2l0b3J5LmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTaGFyZWRXb3JrZXJTY3JpcHRMb2FkZXI6OlNoYXJlZFdvcmtlclNj
cmlwdExvYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRXb3JrZXJTY3JpcHRMb2FkZXI6
OmxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0V2ViUG9ydCk6CisgICAgICAgIChXZWJDb3Jl
OjpTaGFyZWRXb3JrZXJTY3JpcHRMb2FkZXI6Om5vdGlmeUZpbmlzaGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OlNoYXJlZFdvcmtlclNjcmlwdExvYWRlcjo6c2VuZENvbm5lY3QpOgorICAgICAgICAo
V2ViQ29yZTo6U2hhcmVkV29ya2VyU2NyaXB0TG9hZGVyOjpjb250ZXh0RGVzdHJveWVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNoYXJlZFdvcmtlclNjcmlwdExvYWRlcjo6Y29ubmVjdGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNoYXJlZFdvcmtlclJlcG9zaXRvcnk6OmlzQXZhaWxhYmxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmdldElkKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFdvcmtlclJl
cG9zaXRvcnk6OmNvbm5lY3QpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkV29ya2VyUmVwb3Np
dG9yeTo6ZG9jdW1lbnREZXRhY2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRXb3JrZXJS
ZXBvc2l0b3J5OjpoYXNTaGFyZWRXb3JrZXJzKToKKworMjAwOS0xMS0wOSAgWWFhciBTY2huaXRt
YW4gIDx5YWFyQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKwogICAgICAgICBVcC1zdHJlYW1pbmcgQ2hyb21pdW0gQVBJIHNyYyBmaWxlczogR3Jh
cGhpY0NvbnRleHQzRC4uLk1lZGlhUGxhdGVyUHJpdmF0ZUNocm9taXVtCiAKICAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMxMjc2CmRpZmYgLS1naXQgYS9X
ZWJLaXQvY2hyb21pdW0vc3JjL05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuY3BwIGIvV2ViS2l0
L2Nocm9taXVtL3NyYy9Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjIyMzE5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0
L2Nocm9taXVtL3NyYy9Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmNwcApAQCAtMCwwICsxLDEw
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJOb3RpZmljYXRpb25QcmVzZW50ZXJJ
bXBsLmgiCisKKyNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykKKworI2luY2x1ZGUgIk5vdGlmaWNh
dGlvbi5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisKKyNpbmNsdWRlICJXZWJOb3Rp
ZmljYXRpb24uaCIKKyNpbmNsdWRlICJXZWJOb3RpZmljYXRpb25QZXJtaXNzaW9uQ2FsbGJhY2su
aCIKKyNpbmNsdWRlICJXZWJOb3RpZmljYXRpb25QcmVzZW50ZXIuaCIKKworI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworY2xhc3MgVm9pZENhbGxiYWNrQ2xpZW50IDogcHVibGljIFdlYk5vdGlmaWNh
dGlvblBlcm1pc3Npb25DYWxsYmFjayB7CitwdWJsaWM6CisgICAgVm9pZENhbGxiYWNrQ2xpZW50
KFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBjYWxsYmFjaykKKyAgICAgICAgOiBtX2NhbGxiYWNr
KGNhbGxiYWNrKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVybWlzc2lvblJl
cXVlc3RDb21wbGV0ZSgpCisgICAgeworICAgICAgICBpZiAobV9jYWxsYmFjaykKKyAgICAgICAg
ICAgIG1fY2FsbGJhY2stPmhhbmRsZUV2ZW50KCk7CisgICAgICAgIGRlbGV0ZSB0aGlzOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBSZWZQdHI8Vm9pZENhbGxiYWNrPiBtX2NhbGxiYWNrOworfTsK
Kwordm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjppbml0aWFsaXplKFdlYk5vdGlmaWNh
dGlvblByZXNlbnRlciogcHJlc2VudGVyKQoreworICAgIG1fcHJlc2VudGVyID0gcHJlc2VudGVy
OworfQorCitib29sIE5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6OmlzSW5pdGlhbGl6ZWQoKQor
eworICAgIHJldHVybiAhIW1fcHJlc2VudGVyOworfQorCitib29sIE5vdGlmaWNhdGlvblByZXNl
bnRlckltcGw6OnNob3coTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24pCit7CisgICAgcmV0dXJu
IG1fcHJlc2VudGVyLT5zaG93KFBhc3NSZWZQdHI8Tm90aWZpY2F0aW9uPihub3RpZmljYXRpb24p
KTsKK30KKwordm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpjYW5jZWwoTm90aWZpY2F0
aW9uKiBub3RpZmljYXRpb24pCit7CisgICAgbV9wcmVzZW50ZXItPmNhbmNlbChQYXNzUmVmUHRy
PE5vdGlmaWNhdGlvbj4obm90aWZpY2F0aW9uKSk7Cit9CisKK3ZvaWQgTm90aWZpY2F0aW9uUHJl
c2VudGVySW1wbDo6bm90aWZpY2F0aW9uT2JqZWN0RGVzdHJveWVkKE5vdGlmaWNhdGlvbiogbm90
aWZpY2F0aW9uKQoreworICAgIG1fcHJlc2VudGVyLT5vYmplY3REZXN0cm95ZWQoUGFzc1JlZlB0
cjxOb3RpZmljYXRpb24+KG5vdGlmaWNhdGlvbikpOworfQorCitOb3RpZmljYXRpb25QcmVzZW50
ZXI6OlBlcm1pc3Npb24gTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6Y2hlY2tQZXJtaXNzaW9u
KFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCit7CisgICAgaW50IHJlc3VsdCA9IG1fcHJlc2VudGVy
LT5jaGVja1Blcm1pc3Npb24ob3JpZ2luLT50b1N0cmluZygpKTsKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8Tm90aWZpY2F0aW9uUHJlc2VudGVyOjpQZXJtaXNzaW9uPihyZXN1bHQpOworfQorCit2
b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6OnJlcXVlc3RQZXJtaXNzaW9uKFNlY3VyaXR5
T3JpZ2luKiBvcmlnaW4sIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBjYWxsYmFjaykKK3sKKyAg
ICBtX3ByZXNlbnRlci0+cmVxdWVzdFBlcm1pc3Npb24ob3JpZ2luLT50b1N0cmluZygpLCBuZXcg
Vm9pZENhbGxiYWNrQ2xpZW50KGNhbGxiYWNrKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYgLy8gRU5BQkxFKE5PVElGSUNBVElPTlMpCmRpZmYgLS1naXQgYS9XZWJLaXQv
Y2hyb21pdW0vc3JjL05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuaCBiL1dlYktpdC9jaHJvbWl1
bS9zcmMvTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjRhZmU5ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0v
c3JjL05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuaApAQCAtMCwwICsxLDY5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBO
b3RpZmljYXRpb25QcmVzZW50ZXJJbXBsX2gKKyNkZWZpbmUgTm90aWZpY2F0aW9uUHJlc2VudGVy
SW1wbF9oCisKKyNpbmNsdWRlICJOb3RpZmljYXRpb25QcmVzZW50ZXIuaCIKKyNpbmNsdWRlICJW
b2lkQ2FsbGJhY2suaCIKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KKworI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKQorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworY2xhc3MgV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyOworCitjbGFzcyBOb3Rp
ZmljYXRpb25QcmVzZW50ZXJJbXBsIDogcHVibGljIFdlYkNvcmU6Ok5vdGlmaWNhdGlvblByZXNl
bnRlciB7CitwdWJsaWM6CisgICAgTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbCgpIDogbV9wcmVz
ZW50ZXIoMCkgeyB9CisKKyAgICB2b2lkIGluaXRpYWxpemUoV2ViTm90aWZpY2F0aW9uUHJlc2Vu
dGVyKiBwcmVzZW50ZXIpOworICAgIGJvb2wgaXNJbml0aWFsaXplZCgpOworCisgICAgLy8gV2Vi
Q29yZTo6Tm90aWZpY2F0aW9uUHJlc2VudGVyIGltcGxlbWVudGF0aW9uLgorICAgIHZpcnR1YWwg
Ym9vbCBzaG93KFdlYkNvcmU6Ok5vdGlmaWNhdGlvbiogb2JqZWN0KTsKKyAgICB2aXJ0dWFsIHZv
aWQgY2FuY2VsKFdlYkNvcmU6Ok5vdGlmaWNhdGlvbiogb2JqZWN0KTsKKyAgICB2aXJ0dWFsIHZv
aWQgbm90aWZpY2F0aW9uT2JqZWN0RGVzdHJveWVkKFdlYkNvcmU6Ok5vdGlmaWNhdGlvbiogb2Jq
ZWN0KTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6Ok5vdGlmaWNhdGlvblByZXNlbnRlcjo6UGVybWlz
c2lvbiBjaGVja1Blcm1pc3Npb24oV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4qIG9yaWdpbik7Cisg
ICAgdmlydHVhbCB2b2lkIHJlcXVlc3RQZXJtaXNzaW9uKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2lu
KiBvcmlnaW4sIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpWb2lkQ2FsbGJhY2s+IGNhbGxiYWNr
KTsKKworcHJpdmF0ZToKKyAgICAvLyBXZWJOb3RpZmljYXRpb25QcmVzZW50ZXIgdGhhdCB0aGlz
IG9iamVjdCBkZWxlZ2F0ZXMgdG8uCisgICAgV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyKiBtX3By
ZXNlbnRlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxF
KE5PVElGSUNBVElPTlMpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1Bs
YXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5mOGM0MWQzCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9Q
bGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5jcHAKQEAgLTAsMCArMSwyNTggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuaCIKKworI2lu
Y2x1ZGUgIk1lc3NhZ2VQb3J0LmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5o
IgorI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgorCisjaW5jbHVkZSAiV2ViS2l0
LmgiCisjaW5jbHVkZSAiV2ViS2l0Q2xpZW50LmgiCisjaW5jbHVkZSAiV2ViTWVzc2FnZVBvcnRD
aGFubmVsLmgiCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJL
aXQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5u
ZWw+IE1lc3NhZ2VQb3J0Q2hhbm5lbDo6Y3JlYXRlKFBhc3NSZWZQdHI8UGxhdGZvcm1NZXNzYWdl
UG9ydENoYW5uZWw+IGNoYW5uZWwpCit7CisgICAgcmV0dXJuIG5ldyBNZXNzYWdlUG9ydENoYW5u
ZWwoY2hhbm5lbCk7Cit9CisKK3ZvaWQgTWVzc2FnZVBvcnRDaGFubmVsOjpjcmVhdGVDaGFubmVs
KFBhc3NSZWZQdHI8TWVzc2FnZVBvcnQ+IHBvcnQxLCBQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0PiBw
b3J0MikKK3sKKyAgICBQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbDo6Y3JlYXRlQ2hhbm5lbChw
b3J0MSwgcG9ydDIpOworfQorCitNZXNzYWdlUG9ydENoYW5uZWw6Ok1lc3NhZ2VQb3J0Q2hhbm5l
bChQYXNzUmVmUHRyPFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsPiBjaGFubmVsKQorICAgIDog
bV9jaGFubmVsKGNoYW5uZWwpCit7Cit9CisKK01lc3NhZ2VQb3J0Q2hhbm5lbDo6fk1lc3NhZ2VQ
b3J0Q2hhbm5lbCgpCit7CisgICAgLy8gTWFrZSBzdXJlIHdlIGNsb3NlIG91ciBwbGF0Zm9ybSBj
aGFubmVsIHdoZW4gdGhlIGJhc2UgaXMgZnJlZWQsIHRvIGtlZXAgdGhlIGNoYW5uZWwgb2JqZWN0
cyBmcm9tIGxlYWtpbmcuCisgICAgbV9jaGFubmVsLT5jbG9zZSgpOworfQorCitib29sIE1lc3Nh
Z2VQb3J0Q2hhbm5lbDo6ZW50YW5nbGVJZk9wZW4oTWVzc2FnZVBvcnQqIHBvcnQpCit7CisgICAg
cmV0dXJuIG1fY2hhbm5lbC0+ZW50YW5nbGVJZk9wZW4ocG9ydCk7Cit9CisKK3ZvaWQgTWVzc2Fn
ZVBvcnRDaGFubmVsOjpkaXNlbnRhbmdsZSgpCit7CisgICAgbV9jaGFubmVsLT5kaXNlbnRhbmds
ZSgpOworfQorCit2b2lkIE1lc3NhZ2VQb3J0Q2hhbm5lbDo6cG9zdE1lc3NhZ2VUb1JlbW90ZShQ
YXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbDo6RXZlbnREYXRhPiBtZXNzYWdlKQoreworICAg
IG1fY2hhbm5lbC0+cG9zdE1lc3NhZ2VUb1JlbW90ZShtZXNzYWdlKTsKK30KKworYm9vbCBNZXNz
YWdlUG9ydENoYW5uZWw6OnRyeUdldE1lc3NhZ2VGcm9tUmVtb3RlKE93blB0cjxNZXNzYWdlUG9y
dENoYW5uZWw6OkV2ZW50RGF0YT4mIHJlc3VsdCkKK3sKKyAgICByZXR1cm4gbV9jaGFubmVsLT50
cnlHZXRNZXNzYWdlRnJvbVJlbW90ZShyZXN1bHQpOworfQorCit2b2lkIE1lc3NhZ2VQb3J0Q2hh
bm5lbDo6Y2xvc2UoKQoreworICAgIG1fY2hhbm5lbC0+Y2xvc2UoKTsKK30KKworYm9vbCBNZXNz
YWdlUG9ydENoYW5uZWw6OmlzQ29ubmVjdGVkVG8oTWVzc2FnZVBvcnQqIHBvcnQpCit7CisgICAg
cmV0dXJuIG1fY2hhbm5lbC0+aXNDb25uZWN0ZWRUbyhwb3J0KTsKK30KKworYm9vbCBNZXNzYWdl
UG9ydENoYW5uZWw6Omhhc1BlbmRpbmdBY3Rpdml0eSgpCit7CisgICAgcmV0dXJuIG1fY2hhbm5l
bC0+aGFzUGVuZGluZ0FjdGl2aXR5KCk7Cit9CisKK01lc3NhZ2VQb3J0KiBNZXNzYWdlUG9ydENo
YW5uZWw6OmxvY2FsbHlFbnRhbmdsZWRQb3J0KGNvbnN0IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQpCit7CisgICAgLy8gVGhpcyBpcyBqdXN0IGFuIG9wdGltaXphdGlvbiwgc28gcmV0
dXJuIDAgYWx3YXlzLgorICAgIHJldHVybiAwOworfQorCisKK1Bhc3NSZWZQdHI8UGxhdGZvcm1N
ZXNzYWdlUG9ydENoYW5uZWw+IFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsOjpjcmVhdGUoKQor
eworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwoKSk7
Cit9CisKK1Bhc3NSZWZQdHI8UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw+IFBsYXRmb3JtTWVz
c2FnZVBvcnRDaGFubmVsOjpjcmVhdGUoCisgICAgV2ViTWVzc2FnZVBvcnRDaGFubmVsKiBjaGFu
bmVsKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5u
ZWwoY2hhbm5lbCkpOworfQorCisKK1BsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsOjpQbGF0Zm9y
bU1lc3NhZ2VQb3J0Q2hhbm5lbCgpCisgICAgOiBtX2xvY2FsUG9ydCgwKQoreworICAgIG1fd2Vi
Q2hhbm5lbCA9IHdlYktpdENsaWVudCgpLT5jcmVhdGVNZXNzYWdlUG9ydENoYW5uZWwoKTsKKyAg
ICBpZiAobV93ZWJDaGFubmVsKQorICAgICAgICBtX3dlYkNoYW5uZWwtPnNldENsaWVudCh0aGlz
KTsKK30KKworUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw6OlBsYXRmb3JtTWVzc2FnZVBvcnRD
aGFubmVsKFdlYk1lc3NhZ2VQb3J0Q2hhbm5lbCogY2hhbm5lbCkKKyAgICA6IG1fbG9jYWxQb3J0
KDApCisgICAgLCBtX3dlYkNoYW5uZWwoY2hhbm5lbCkKK3sKK30KKworUGxhdGZvcm1NZXNzYWdl
UG9ydENoYW5uZWw6On5QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbCgpCit7CisgICAgaWYgKG1f
d2ViQ2hhbm5lbCkKKyAgICAgICAgbV93ZWJDaGFubmVsLT5kZXN0cm95KCk7Cit9CisKK3ZvaWQg
UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw6OmNyZWF0ZUNoYW5uZWwoUGFzc1JlZlB0cjxNZXNz
YWdlUG9ydD4gcG9ydDEsIFBhc3NSZWZQdHI8TWVzc2FnZVBvcnQ+IHBvcnQyKQoreworICAgIC8v
IENyZWF0ZSBwcm94aWVzIGZvciBlYWNoIGVuZHBvaW50LgorICAgIFJlZlB0cjxQbGF0Zm9ybU1l
c3NhZ2VQb3J0Q2hhbm5lbD4gY2hhbm5lbDEgPSBQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbDo6
Y3JlYXRlKCk7CisgICAgUmVmUHRyPFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsPiBjaGFubmVs
MiA9IFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsOjpjcmVhdGUoKTsKKworICAgIC8vIEVudGFu
Z2xlIHRoZSB0d28gZW5kcG9pbnRzLgorICAgIGNoYW5uZWwxLT5zZXRFbnRhbmdsZWRDaGFubmVs
KGNoYW5uZWwyKTsKKyAgICBjaGFubmVsMi0+c2V0RW50YW5nbGVkQ2hhbm5lbChjaGFubmVsMSk7
CisKKyAgICAvLyBOb3cgZW50YW5nbGUgdGhlIHByb3hpZXMgd2l0aCB0aGUgYXBwcm9wcmlhdGUg
bG9jYWwgcG9ydHMuCisgICAgcG9ydDEtPmVudGFuZ2xlKE1lc3NhZ2VQb3J0Q2hhbm5lbDo6Y3Jl
YXRlKGNoYW5uZWwyKSk7CisgICAgcG9ydDItPmVudGFuZ2xlKE1lc3NhZ2VQb3J0Q2hhbm5lbDo6
Y3JlYXRlKGNoYW5uZWwxKSk7Cit9CisKK3ZvaWQgUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw6
Om1lc3NhZ2VBdmFpbGFibGUoKQoreworICAgIE11dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7Cisg
ICAgaWYgKG1fbG9jYWxQb3J0KQorICAgICAgICBtX2xvY2FsUG9ydC0+bWVzc2FnZUF2YWlsYWJs
ZSgpOworfQorCitib29sIFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsOjplbnRhbmdsZUlmT3Bl
bihNZXNzYWdlUG9ydCogcG9ydCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrKG1fbXV0ZXgpOwor
ICAgIG1fbG9jYWxQb3J0ID0gcG9ydDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQbGF0
Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbDo6ZGlzZW50YW5nbGUoKQoreworICAgIE11dGV4TG9ja2Vy
IGxvY2sobV9tdXRleCk7CisgICAgbV9sb2NhbFBvcnQgPSAwOworfQorCit2b2lkIFBsYXRmb3Jt
TWVzc2FnZVBvcnRDaGFubmVsOjpwb3N0TWVzc2FnZVRvUmVtb3RlKFBhc3NPd25QdHI8TWVzc2Fn
ZVBvcnRDaGFubmVsOjpFdmVudERhdGE+IG1lc3NhZ2UpCit7CisgICAgaWYgKCFtX2xvY2FsUG9y
dCB8fCAhbV93ZWJDaGFubmVsKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJTdHJpbmcgbWVz
c2FnZVN0cmluZyA9IG1lc3NhZ2UtPm1lc3NhZ2UoKS0+dG9TdHJpbmcoKTsKKyAgICBPd25QdHI8
V2ViQ29yZTo6TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IGNoYW5uZWxzID0gbWVzc2FnZS0+Y2hh
bm5lbHMoKTsKKyAgICBXZWJNZXNzYWdlUG9ydENoYW5uZWxBcnJheSogd2ViQ2hhbm5lbHMgPSAw
OworICAgIGlmIChjaGFubmVscy5nZXQoKSAmJiBjaGFubmVscy0+c2l6ZSgpKSB7CisgICAgICAg
IHdlYkNoYW5uZWxzID0gbmV3IFdlYk1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5KGNoYW5uZWxzLT5z
aXplKCkpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoYW5uZWxzLT5zaXplKCk7
ICsraSkgeworICAgICAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwq
IHBsYXRmb3JtQ2hhbm5lbCA9ICgqY2hhbm5lbHMpW2ldLT5jaGFubmVsKCk7CisgICAgICAgICAg
ICAoKndlYkNoYW5uZWxzKVtpXSA9IHBsYXRmb3JtQ2hhbm5lbC0+d2ViQ2hhbm5lbFJlbGVhc2Uo
KTsKKyAgICAgICAgICAgICgqd2ViQ2hhbm5lbHMpW2ldLT5zZXRDbGllbnQoMCk7CisgICAgICAg
IH0KKyAgICB9CisgICAgbV93ZWJDaGFubmVsLT5wb3N0TWVzc2FnZShtZXNzYWdlU3RyaW5nLCB3
ZWJDaGFubmVscyk7Cit9CisKK2Jvb2wgUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw6OnRyeUdl
dE1lc3NhZ2VGcm9tUmVtb3RlKE93blB0cjxNZXNzYWdlUG9ydENoYW5uZWw6OkV2ZW50RGF0YT4m
IHJlc3VsdCkKK3sKKyAgICBpZiAoIW1fd2ViQ2hhbm5lbCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgV2ViU3RyaW5nIG1lc3NhZ2U7CisgICAgV2ViTWVzc2FnZVBvcnRDaGFubmVsQXJy
YXkgd2ViQ2hhbm5lbHM7CisgICAgYm9vbCBydiA9IG1fd2ViQ2hhbm5lbC0+dHJ5R2V0TWVzc2Fn
ZSgmbWVzc2FnZSwgd2ViQ2hhbm5lbHMpOworICAgIGlmIChydikgeworICAgICAgICBPd25QdHI8
TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IGNoYW5uZWxzOworICAgICAgICBpZiAod2ViQ2hhbm5l
bHMuc2l6ZSgpKSB7CisgICAgICAgICAgICBjaGFubmVscyA9IG5ldyBNZXNzYWdlUG9ydENoYW5u
ZWxBcnJheSh3ZWJDaGFubmVscy5zaXplKCkpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCB3ZWJDaGFubmVscy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIFJlZlB0
cjxQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbD4gcGxhdGZvcm1DaGFubmVsID0gY3JlYXRlKHdl
YkNoYW5uZWxzW2ldKTsKKyAgICAgICAgICAgICAgICB3ZWJDaGFubmVsc1tpXS0+c2V0Q2xpZW50
KHBsYXRmb3JtQ2hhbm5lbC5nZXQoKSk7CisgICAgICAgICAgICAgICAgKCpjaGFubmVscylbaV0g
PSBNZXNzYWdlUG9ydENoYW5uZWw6OmNyZWF0ZShwbGF0Zm9ybUNoYW5uZWwpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNl
cmlhbGl6ZWRNZXNzYWdlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUobWVzc2FnZSk7
CisgICAgICAgIHJlc3VsdCA9IE1lc3NhZ2VQb3J0Q2hhbm5lbDo6RXZlbnREYXRhOjpjcmVhdGUo
c2VyaWFsaXplZE1lc3NhZ2UucmVsZWFzZSgpLCBjaGFubmVscy5yZWxlYXNlKCkpOworICAgIH0K
KworICAgIHJldHVybiBydjsKK30KKwordm9pZCBQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbDo6
Y2xvc2UoKQoreworICAgIE11dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7CisgICAgLy8gRGlzZW50
YW5nbGUgb3Vyc2VsdmVzIGZyb20gdGhlIG90aGVyIGVuZC4gIFdlIHN0aWxsIG1haW50YWluIGEg
cmVmZXJlbmNlIHRvIG1fd2ViQ2hhbm5lbCwKKyAgICAvLyBzaW5jZSBwcmV2aW91c2x5LWV4aXN0
aW5nIG1lc3NhZ2VzIHNob3VsZCBzdGlsbCBiZSBkZWxpdmVyZWQuCisgICAgbV9sb2NhbFBvcnQg
PSAwOworICAgIG1fZW50YW5nbGVkQ2hhbm5lbCA9IDA7Cit9CisKK2Jvb2wgUGxhdGZvcm1NZXNz
YWdlUG9ydENoYW5uZWw6OmlzQ29ubmVjdGVkVG8oTWVzc2FnZVBvcnQqIHBvcnQpCit7CisgICAg
TXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKKyAgICByZXR1cm4gbV9lbnRhbmdsZWRDaGFubmVs
ICYmIG1fZW50YW5nbGVkQ2hhbm5lbC0+bV9sb2NhbFBvcnQgPT0gcG9ydDsKK30KKworYm9vbCBQ
bGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbDo6aGFzUGVuZGluZ0FjdGl2aXR5KCkKK3sKKyAgICBN
dXRleExvY2tlciBsb2NrKG1fbXV0ZXgpOworICAgIHJldHVybiBtX2xvY2FsUG9ydDsKK30KKwor
dm9pZCBQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbDo6c2V0RW50YW5nbGVkQ2hhbm5lbChQYXNz
UmVmUHRyPFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsPiByZW1vdGUpCit7CisgICAgaWYgKG1f
d2ViQ2hhbm5lbCkKKyAgICAgICAgbV93ZWJDaGFubmVsLT5lbnRhbmdsZShyZW1vdGUtPm1fd2Vi
Q2hhbm5lbCk7CisKKyAgICBNdXRleExvY2tlciBsb2NrKG1fbXV0ZXgpOworICAgIG1fZW50YW5n
bGVkQ2hhbm5lbCA9IHJlbW90ZTsKK30KKworV2ViTWVzc2FnZVBvcnRDaGFubmVsKiBQbGF0Zm9y
bU1lc3NhZ2VQb3J0Q2hhbm5lbDo6d2ViQ2hhbm5lbFJlbGVhc2UoKQoreworICAgIFdlYk1lc3Nh
Z2VQb3J0Q2hhbm5lbCogcnYgPSBtX3dlYkNoYW5uZWw7CisgICAgbV93ZWJDaGFubmVsID0gMDsK
KyAgICByZXR1cm4gcnY7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1dlYktpdC9jaHJvbWl1bS9zcmMvUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuaCBiL1dlYktp
dC9jaHJvbWl1bS9zcmMvUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWU4Mzk3Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0
L2Nocm9taXVtL3NyYy9QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5oCkBAIC0wLDAgKzEsOTYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsX2gKKyNkZWZpbmUgUGxhdGZvcm1N
ZXNzYWdlUG9ydENoYW5uZWxfaAorCisvLyBGSVhNRTogVGhpcyByZWxhdGl2ZSBwYXRoIGlzIGEg
dGVtcG9yYXJ5IGhhY2sgdG8gc3VwcG9ydCB1c2luZyB0aGlzCisvLyBoZWFkZXIgZnJvbSB3ZWJr
aXQvZ2x1ZS4KKyNpbmNsdWRlICIuLi9wdWJsaWMvV2ViTWVzc2FnZVBvcnRDaGFubmVsQ2xpZW50
LmgiCisKKyNpbmNsdWRlICJNZXNzYWdlUG9ydENoYW5uZWwuaCIKKworI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKK2NsYXNzIFdlYk1lc3NhZ2VQb3J0Q2hhbm5lbDsKK30KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBNZXNzYWdlUG9ydDsKKworLy8gUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5u
ZWwgaXMgYSBwbGF0Zm9ybS1kZXBlbmRlbnQgaW50ZXJmYWNlIHRvIHRoZSByZW1vdGUgc2lkZSBv
ZiBhIG1lc3NhZ2UgY2hhbm5lbC4KK2NsYXNzIFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsIDog
cHVibGljIFRocmVhZFNhZmVTaGFyZWQ8UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw+LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgV2ViS2l0OjpXZWJNZXNzYWdl
UG9ydENoYW5uZWxDbGllbnQgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIGNyZWF0ZUNoYW5u
ZWwoUGFzc1JlZlB0cjxNZXNzYWdlUG9ydD4sIFBhc3NSZWZQdHI8TWVzc2FnZVBvcnQ+KTsKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbD4gY3JlYXRlKCk7
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw+IGNyZWF0
ZShXZWJLaXQ6OldlYk1lc3NhZ2VQb3J0Q2hhbm5lbCopOworCisgICAgLy8gQVBJcyBkZWxlZ2F0
ZWQgZnJvbSBNZXNzYWdlUG9ydENoYW5uZWwuaAorICAgIGJvb2wgZW50YW5nbGVJZk9wZW4oTWVz
c2FnZVBvcnQqKTsKKyAgICB2b2lkIGRpc2VudGFuZ2xlKCk7CisgICAgdm9pZCBwb3N0TWVzc2Fn
ZVRvUmVtb3RlKFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsOjpFdmVudERhdGE+KTsKKyAg
ICBib29sIHRyeUdldE1lc3NhZ2VGcm9tUmVtb3RlKE93blB0cjxNZXNzYWdlUG9ydENoYW5uZWw6
OkV2ZW50RGF0YT4mKTsKKyAgICB2b2lkIGNsb3NlKCk7CisgICAgYm9vbCBpc0Nvbm5lY3RlZFRv
KE1lc3NhZ2VQb3J0KiBwb3J0KTsKKyAgICBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpOworCisg
ICAgLy8gUmVsZWFzZXMgb3duZXJzaGlwIG9mIHRoZSBjb250YWluZWQgd2ViIGNoYW5uZWwuCisg
ICAgV2ViS2l0OjpXZWJNZXNzYWdlUG9ydENoYW5uZWwqIHdlYkNoYW5uZWxSZWxlYXNlKCk7CisK
KyAgICB+UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwoKTsKKworcHJpdmF0ZToKKyAgICBQbGF0
Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbCgpOworICAgIFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVs
KFdlYktpdDo6V2ViTWVzc2FnZVBvcnRDaGFubmVsKik7CisKKyAgICB2b2lkIHNldEVudGFuZ2xl
ZENoYW5uZWwoUGFzc1JlZlB0cjxQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbD4pOworCisgICAg
Ly8gV2ViS2l0OjpXZWJNZXNzYWdlUG9ydENoYW5uZWxDbGllbnQgaW1wbGVtZW50YXRpb24KKyAg
ICB2aXJ0dWFsIHZvaWQgbWVzc2FnZUF2YWlsYWJsZSgpOworCisgICAgLy8gTXV0ZXggdXNlZCB0
byBlbnN1cmUgZXhjbHVzaXZlIGFjY2VzcyB0byB0aGUgb2JqZWN0IGludGVybmFscy4KKyAgICBN
dXRleCBtX211dGV4OworCisgICAgLy8gUG9pbnRlciB0byBvdXIgZW50YW5nbGVkIHBhaXIgLSBj
bGVhcmVkIHdoZW4gY2xvc2UoKSBpcyBjYWxsZWQuCisgICAgUmVmUHRyPFBsYXRmb3JtTWVzc2Fn
ZVBvcnRDaGFubmVsPiBtX2VudGFuZ2xlZENoYW5uZWw7CisKKyAgICAvLyBUaGUgcG9ydCB3ZSBh
cmUgY29ubmVjdGVkIHRvIC0gdGhpcyBpcyB0aGUgcG9ydCB0aGF0IGlzIG5vdGlmaWVkIHdoZW4g
bmV3IG1lc3NhZ2VzIGFycml2ZS4KKyAgICBNZXNzYWdlUG9ydCogbV9sb2NhbFBvcnQ7CisKKyAg
ICBXZWJLaXQ6OldlYk1lc3NhZ2VQb3J0Q2hhbm5lbCogbV93ZWJDaGFubmVsOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5u
ZWxfaApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9SZXNvdXJjZUhhbmRsZS5jcHAg
Yi9XZWJLaXQvY2hyb21pdW0vc3JjL1Jlc291cmNlSGFuZGxlLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi42Y2VjZDFkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2No
cm9taXVtL3NyYy9SZXNvdXJjZUhhbmRsZS5jcHAKQEAgLTAsMCArMSwyODQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKKworI2luY2x1ZGUgIlJlc291
cmNlSGFuZGxlQ2xpZW50LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisKKyNpbmNs
dWRlICJXZWJLaXQuaCIKKyNpbmNsdWRlICJXZWJLaXRDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJV
UkxFcnJvci5oIgorI2luY2x1ZGUgIldlYlVSTExvYWRlci5oIgorI2luY2x1ZGUgIldlYlVSTExv
YWRlckNsaWVudC5oIgorI2luY2x1ZGUgIldlYlVSTFJlcXVlc3QuaCIKKyNpbmNsdWRlICJXZWJV
UkxSZXNwb25zZS5oIgorI2luY2x1ZGUgIldyYXBwZWRSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNs
dWRlICJXcmFwcGVkUmVzb3VyY2VSZXNwb25zZS5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0
OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFJlc291cmNlSGFuZGxlSW50ZXJuYWwgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xh
c3MgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCA6IHB1YmxpYyBXZWJVUkxMb2FkZXJDbGllbnQgewor
cHVibGljOgorICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwoY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0LCBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50KQorICAgICAgICA6IG1fcmVx
dWVzdChyZXF1ZXN0KQorICAgICAgICAsIG1fb3duZXIoMCkKKyAgICAgICAgLCBtX2NsaWVudChj
bGllbnQpCisgICAgeworICAgIH0KKworICAgIHZvaWQgc3RhcnQoKTsKKyAgICB2b2lkIGNhbmNl
bCgpOworICAgIHZvaWQgc2V0RGVmZXJzTG9hZGluZyhib29sKTsKKyAgICBib29sIGFsbG93U3Rv
cmVkQ3JlZGVudGlhbHMoKSBjb25zdDsKKworICAgIC8vIFdlYlVSTExvYWRlckNsaWVudCBtZXRo
b2RzOgorICAgIHZpcnR1YWwgdm9pZCB3aWxsU2VuZFJlcXVlc3QoV2ViVVJMTG9hZGVyKiwgV2Vi
VVJMUmVxdWVzdCYsIGNvbnN0IFdlYlVSTFJlc3BvbnNlJik7CisgICAgdmlydHVhbCB2b2lkIGRp
ZFNlbmREYXRhKAorICAgICAgICBXZWJVUkxMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGxvbmcgYnl0
ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KTsKKyAgICB2aXJ0
dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFdlYlVSTExvYWRlciosIGNvbnN0IFdlYlVSTFJl
c3BvbnNlJik7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKFdlYlVSTExvYWRlcios
IGNvbnN0IGNoYXIqIGRhdGEsIGludCBkYXRhTGVuZ3RoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlk
RmluaXNoTG9hZGluZyhXZWJVUkxMb2FkZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChX
ZWJVUkxMb2FkZXIqLCBjb25zdCBXZWJVUkxFcnJvciYpOworCisgICAgUmVzb3VyY2VSZXF1ZXN0
IG1fcmVxdWVzdDsKKyAgICBSZXNvdXJjZUhhbmRsZSogbV9vd25lcjsKKyAgICBSZXNvdXJjZUhh
bmRsZUNsaWVudCogbV9jbGllbnQ7CisgICAgT3duUHRyPFdlYlVSTExvYWRlcj4gbV9sb2FkZXI7
Cit9OworCit2b2lkIFJlc291cmNlSGFuZGxlSW50ZXJuYWw6OnN0YXJ0KCkKK3sKKyAgICBtX2xv
YWRlci5zZXQod2ViS2l0Q2xpZW50KCktPmNyZWF0ZVVSTExvYWRlcigpKTsKKyAgICBBU1NFUlQo
bV9sb2FkZXIuZ2V0KCkpOworCisgICAgV3JhcHBlZFJlc291cmNlUmVxdWVzdCB3cmFwcGVkUmVx
dWVzdChtX3JlcXVlc3QpOworICAgIHdyYXBwZWRSZXF1ZXN0LnNldEFsbG93U3RvcmVkQ3JlZGVu
dGlhbHMoYWxsb3dTdG9yZWRDcmVkZW50aWFscygpKTsKKyAgICBtX2xvYWRlci0+bG9hZEFzeW5j
aHJvbm91c2x5KHdyYXBwZWRSZXF1ZXN0LCB0aGlzKTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRs
ZUludGVybmFsOjpjYW5jZWwoKQoreworICAgIG1fbG9hZGVyLT5jYW5jZWwoKTsKKworICAgIC8v
IERvIG5vdCBtYWtlIGFueSBmdXJ0aGVyIGNhbGxzIHRvIHRoZSBjbGllbnQuCisgICAgbV9jbGll
bnQgPSAwOworfQorCit2b2lkIFJlc291cmNlSGFuZGxlSW50ZXJuYWw6OnNldERlZmVyc0xvYWRp
bmcoYm9vbCB2YWx1ZSkKK3sKKyAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9hZGluZyh2YWx1ZSk7
Cit9CisKK2Jvb2wgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6YWxsb3dTdG9yZWRDcmVkZW50aWFs
cygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY2xpZW50ICYmIG1fY2xpZW50LT5zaG91bGRVc2VD
cmVkZW50aWFsU3RvcmFnZShtX293bmVyKTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZUludGVy
bmFsOjp3aWxsU2VuZFJlcXVlc3QoCisgICAgV2ViVVJMTG9hZGVyKiwgV2ViVVJMUmVxdWVzdCYg
cmVxdWVzdCwgY29uc3QgV2ViVVJMUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIEFTU0VSVCht
X2NsaWVudCk7CisgICAgQVNTRVJUKCFyZXF1ZXN0LmlzTnVsbCgpKTsKKyAgICBBU1NFUlQoIXJl
c3BvbnNlLmlzTnVsbCgpKTsKKyAgICBtX2NsaWVudC0+d2lsbFNlbmRSZXF1ZXN0KG1fb3duZXIs
IHJlcXVlc3QudG9NdXRhYmxlUmVzb3VyY2VSZXF1ZXN0KCksIHJlc3BvbnNlLnRvUmVzb3VyY2VS
ZXNwb25zZSgpKTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZUludGVybmFsOjpkaWRTZW5kRGF0
YSgKKyAgICBXZWJVUkxMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNp
Z25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KQoreworICAgIEFTU0VSVChtX2NsaWVu
dCk7CisgICAgbV9jbGllbnQtPmRpZFNlbmREYXRhKG1fb3duZXIsIGJ5dGVzU2VudCwgdG90YWxC
eXRlc1RvQmVTZW50KTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZUludGVybmFsOjpkaWRSZWNl
aXZlUmVzcG9uc2UoV2ViVVJMTG9hZGVyKiwgY29uc3QgV2ViVVJMUmVzcG9uc2UmIHJlc3BvbnNl
KQoreworICAgIEFTU0VSVChtX2NsaWVudCk7CisgICAgQVNTRVJUKCFyZXNwb25zZS5pc051bGwo
KSk7CisgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVSZXNwb25zZShtX293bmVyLCByZXNwb25zZS50
b1Jlc291cmNlUmVzcG9uc2UoKSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6
ZGlkUmVjZWl2ZURhdGEoCisgICAgV2ViVVJMTG9hZGVyKiwgY29uc3QgY2hhciogZGF0YSwgaW50
IGRhdGFMZW5ndGgpCit7CisgICAgQVNTRVJUKG1fY2xpZW50KTsKKworICAgIC8vIEZJWE1FKHl1
cnlzKTogaXQgbG9va3MgbGlrZSBsZW5ndGhSZWNlaXZlZCBpcyBhbHdheXMgdGhlIHNhbWUgYXMK
KyAgICAvLyBkYXRhTGVuZ3RoIGFuZCB0aGF0IHRoZSBsYXR0ZXIgcGFyYW1ldGVyIGNhbiBiZSBl
bGltaW5hdGVkLgorICAgIC8vIFNlZSBXZWJLaXQgYnVnOiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MzEwMTkKKyAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZURhdGEobV9v
d25lciwgZGF0YSwgZGF0YUxlbmd0aCwgZGF0YUxlbmd0aCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VI
YW5kbGVJbnRlcm5hbDo6ZGlkRmluaXNoTG9hZGluZyhXZWJVUkxMb2FkZXIqKQoreworICAgIEFT
U0VSVChtX2NsaWVudCk7CisgICAgbV9jbGllbnQtPmRpZEZpbmlzaExvYWRpbmcobV9vd25lcik7
Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6ZGlkRmFpbChXZWJVUkxMb2FkZXIq
LCBjb25zdCBXZWJVUkxFcnJvciYgZXJyb3IpCit7CisgICAgQVNTRVJUKG1fY2xpZW50KTsKKyAg
ICBtX2NsaWVudC0+ZGlkRmFpbChtX293bmVyLCBlcnJvcik7Cit9CisKKy8vIFJlc291cmNlSGFu
ZGxlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKworUmVzb3VyY2VIYW5kbGU6OlJlc291cmNlSGFuZGxlKGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJj
ZUhhbmRsZUNsaWVudCogY2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgZGVmZXJzTG9hZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNo
b3VsZENvbnRlbnRTbmlmZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG1p
Z2h0RG93bmxvYWRGcm9tSGFuZGxlKQorICAgIDogZChuZXcgUmVzb3VyY2VIYW5kbGVJbnRlcm5h
bChyZXF1ZXN0LCBjbGllbnQpKQoreworICAgIGQtPm1fb3duZXIgPSB0aGlzOworCisgICAgLy8g
RklYTUU6IEZpZ3VyZSBvdXQgd2hhdCB0byBkbyB3aXRoIHRoZSBib29sIHBhcmFtcy4KK30KKwor
UGFzc1JlZlB0cjxSZXNvdXJjZUhhbmRsZT4gUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZShjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyYW1lKiBkZXByZWNh
dGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGRlZmVyc0xvYWRpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgc2hvdWxkQ29udGVudFNuaWZmLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG1pZ2h0RG93bmxvYWRGcm9tSGFu
ZGxlKQoreworICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gbmV3SGFuZGxlID0gYWRvcHRSZWYo
bmV3IFJlc291cmNlSGFuZGxlKAorICAgICAgICByZXF1ZXN0LCBjbGllbnQsIGRlZmVyc0xvYWRp
bmcsIHNob3VsZENvbnRlbnRTbmlmZiwgbWlnaHREb3dubG9hZEZyb21IYW5kbGUpKTsKKworICAg
IGlmIChuZXdIYW5kbGUtPnN0YXJ0KGRlcHJlY2F0ZWQpKQorICAgICAgICByZXR1cm4gbmV3SGFu
ZGxlLnJlbGVhc2UoKTsKKworICAgIHJldHVybiAwOworfQorCitjb25zdCBSZXNvdXJjZVJlcXVl
c3QmIFJlc291cmNlSGFuZGxlOjpyZXF1ZXN0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZC0+bV9y
ZXF1ZXN0OworfQorCitSZXNvdXJjZUhhbmRsZUNsaWVudCogUmVzb3VyY2VIYW5kbGU6OmNsaWVu
dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGQtPm1fY2xpZW50OworfQorCit2b2lkIFJlc291cmNl
SGFuZGxlOjpzZXRDbGllbnQoUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCkKK3sKKyAgICBk
LT5tX2NsaWVudCA9IGNsaWVudDsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6c2V0RGVmZXJz
TG9hZGluZyhib29sIHZhbHVlKQoreworICAgIGQtPnNldERlZmVyc0xvYWRpbmcodmFsdWUpOwor
fQorCitib29sIFJlc291cmNlSGFuZGxlOjpzdGFydChGcmFtZSogZGVwcmVjYXRlZCkKK3sKKyAg
ICBkLT5zdGFydCgpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFJlc291cmNlSGFuZGxl
OjpjbGVhckF1dGhlbnRpY2F0aW9uKCkKK3sKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6Y2Fu
Y2VsKCkKK3sKKyAgICBkLT5jYW5jZWwoKTsKK30KKworUmVzb3VyY2VIYW5kbGU6On5SZXNvdXJj
ZUhhbmRsZSgpCit7CisgICAgZC0+bV9vd25lciA9IDA7Cit9CisKK1Bhc3NSZWZQdHI8U2hhcmVk
QnVmZmVyPiBSZXNvdXJjZUhhbmRsZTo6YnVmZmVyZWREYXRhKCkKK3sKKyAgICByZXR1cm4gMDsK
K30KKworYm9vbCBSZXNvdXJjZUhhbmRsZTo6bG9hZHNCbG9ja2VkKCkKK3sKKyAgICByZXR1cm4g
ZmFsc2U7ICAvLyBUaGlzIHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gc3luYyBYTUxIdHRwUmVxdWVz
dC4uLgorfQorCisvLyBzdGF0aWMKK2Jvb2wgUmVzb3VyY2VIYW5kbGU6OnN1cHBvcnRzQnVmZmVy
ZWREYXRhKCkKK3sKKyAgICByZXR1cm4gZmFsc2U7ICAvLyBUaGUgbG9hZGVyIHdpbGwgYnVmZmVy
IG1hbnVhbGx5IGlmIGl0IG5lZWRzIHRvLgorfQorCisvLyBzdGF0aWMKK3ZvaWQgUmVzb3VyY2VI
YW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBy
ZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT
dG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFscywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VFcnJvciYgZXJyb3IsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlUmVzcG9uc2Um
IHJlc3BvbnNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBWZWN0b3I8Y2hhcj4mIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEZyYW1lKiBkZXByZWNhdGVkKQoreworICAgIE93blB0cjxXZWJVUkxMb2Fk
ZXI+IGxvYWRlcih3ZWJLaXRDbGllbnQoKS0+Y3JlYXRlVVJMTG9hZGVyKCkpOworICAgIEFTU0VS
VChsb2FkZXIuZ2V0KCkpOworCisgICAgV3JhcHBlZFJlc291cmNlUmVxdWVzdCByZXF1ZXN0SW4o
cmVxdWVzdCk7CisgICAgcmVxdWVzdEluLnNldEFsbG93U3RvcmVkQ3JlZGVudGlhbHMoc3RvcmVk
Q3JlZGVudGlhbHMgPT0gQWxsb3dTdG9yZWRDcmVkZW50aWFscyk7CisgICAgV3JhcHBlZFJlc291
cmNlUmVzcG9uc2UgcmVzcG9uc2VPdXQocmVzcG9uc2UpOworICAgIFdlYlVSTEVycm9yIGVycm9y
T3V0OworICAgIFdlYkRhdGEgZGF0YU91dDsKKworICAgIGxvYWRlci0+bG9hZFN5bmNocm9ub3Vz
bHkocmVxdWVzdEluLCByZXNwb25zZU91dCwgZXJyb3JPdXQsIGRhdGFPdXQpOworCisgICAgZXJy
b3IgPSBlcnJvck91dDsKKyAgICBkYXRhLmNsZWFyKCk7CisgICAgZGF0YS5hcHBlbmQoZGF0YU91
dC5kYXRhKCksIGRhdGFPdXQuc2l6ZSgpKTsKK30KKworLy8gc3RhdGljCitib29sIFJlc291cmNl
SGFuZGxlOjp3aWxsTG9hZEZyb21DYWNoZShSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIEZyYW1l
KikKK3sKKyAgICAvLyBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGRldGVybWluZSBpZiBhIFBPU1Qg
cmVxdWVzdCBjYW4gYmUgcmVwZWF0ZWQgZnJvbQorICAgIC8vIGNhY2hlLCBidXQgeW91IGNhbm5v
dCByZWFsbHkga25vdyB1bnRpbCB5b3UgYWN0dWFsbHkgdHJ5IHRvIHJlYWQgZnJvbSB0aGUKKyAg
ICAvLyBjYWNoZS4gIEV2ZW4gaWYgd2UgY2hlY2tlZCBub3csIHNvbWV0aGluZyBlbHNlIGNvdWxk
IGNvbWUgYWxvbmcgYW5kIHdpcGUKKyAgICAvLyBvdXQgdGhlIGNhY2hlIGVudHJ5IGJ5IHRoZSB0
aW1lIHdlIGZldGNoIGl0LgorICAgIC8vCisgICAgLy8gU28sIHdlIGFsd2F5cyBzYXkgeWVzIGhl
cmUsIHdoaWNoIGFsbG93cyB1cyB0byBnZW5lcmF0ZSBhbiBFUlJfQ0FDSEVfTUlTUworICAgIC8v
IGlmIHRoZSByZXF1ZXN0IGNhbm5vdCBiZSBzZXJ2aWNlZCBmcm9tIGNhY2hlLiAgV2UgZm9yY2Ug
dGhlICdEb250TG9hZCcKKyAgICAvLyBjYWNoZSBwb2xpY3kgYXQgdGhpcyBwb2ludCB0byBlbnN1
cmUgdGhhdCB3ZSBuZXZlciBoaXQgdGhlIG5ldHdvcmsgZm9yCisgICAgLy8gdGhpcyByZXF1ZXN0
LgorICAgIC8vCisgICAgQVNTRVJUKHJlcXVlc3QuaHR0cE1ldGhvZCgpID09ICJQT1NUIik7Cisg
ICAgcmVxdWVzdC5zZXRDYWNoZVBvbGljeShSZXR1cm5DYWNoZURhdGFEb250TG9hZCk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dl
YktpdC9jaHJvbWl1bS9zcmMvU2hhcmVkV29ya2VyUmVwb3NpdG9yeS5jcHAgYi9XZWJLaXQvY2hy
b21pdW0vc3JjL1NoYXJlZFdvcmtlclJlcG9zaXRvcnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmY2N2E3ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21p
dW0vc3JjL1NoYXJlZFdvcmtlclJlcG9zaXRvcnkuY3BwCkBAIC0wLDAgKzEsMTk3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFNIQVJFRF9XT1JLRVJTKQorCisjaW5jbHVkZSAi
U2hhcmVkV29ya2VyUmVwb3NpdG9yeS5oIgorCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRl
ICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiTWVzc2FnZVBvcnRDaGFubmVsLmgiCisjaW5jbHVk
ZSAiUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRp
b25Db250ZXh0LmgiCisjaW5jbHVkZSAiU2hhcmVkV29ya2VyLmgiCisjaW5jbHVkZSAiV2ViRnJh
bWVDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJGcmFtZUltcGwuaCIKKyNpbmNsdWRlICJXZWJLaXQu
aCIKKyNpbmNsdWRlICJXZWJLaXRDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJNZXNzYWdlUG9ydENo
YW5uZWwuaCIKKyNpbmNsdWRlICJXZWJTaGFyZWRXb3JrZXIuaCIKKyNpbmNsdWRlICJXZWJTaGFy
ZWRXb3JrZXJSZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisjaW5jbHVkZSAi
V2ViVVJMLmgiCisjaW5jbHVkZSAiV29ya2VyU2NyaXB0TG9hZGVyLmgiCisjaW5jbHVkZSAiV29y
a2VyU2NyaXB0TG9hZGVyQ2xpZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
RG9jdW1lbnQ7Cit1c2luZyBXZWJLaXQ6OldlYkZyYW1lSW1wbDsKK3VzaW5nIFdlYktpdDo6V2Vi
TWVzc2FnZVBvcnRDaGFubmVsOwordXNpbmcgV2ViS2l0OjpXZWJTaGFyZWRXb3JrZXI7Cit1c2lu
ZyBXZWJLaXQ6OldlYlNoYXJlZFdvcmtlclJlcG9zaXRvcnk7CisKKy8vIENhbGxiYWNrIGNsYXNz
IHRoYXQga2VlcHMgdGhlIFNoYXJlZFdvcmtlciBhbmQgV2ViU2hhcmVkV29ya2VyIG9iamVjdHMg
YWxpdmUgd2hpbGUgbG9hZHMgYXJlIHBvdGVudGlhbGx5IGhhcHBlbmluZywgYW5kIGFsc28gdHJh
bnNsYXRlcyBsb2FkIGVycm9ycyBpbnRvIGVycm9yIGV2ZW50cyBvbiB0aGUgd29ya2VyLgorY2xh
c3MgU2hhcmVkV29ya2VyU2NyaXB0TG9hZGVyIDogcHJpdmF0ZSBXb3JrZXJTY3JpcHRMb2FkZXJD
bGllbnQsIHByaXZhdGUgV2ViU2hhcmVkV29ya2VyOjpDb25uZWN0TGlzdGVuZXIsIHByaXZhdGUg
QWN0aXZlRE9NT2JqZWN0IHsKK3B1YmxpYzoKKyAgICBTaGFyZWRXb3JrZXJTY3JpcHRMb2FkZXIo
UGFzc1JlZlB0cjxTaGFyZWRXb3JrZXI+IHdvcmtlciwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBT
dHJpbmcmIG5hbWUsIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsPiBwb3J0LCBQYXNzT3du
UHRyPFdlYlNoYXJlZFdvcmtlcj4gd2ViV29ya2VyKQorICAgICAgICA6IEFjdGl2ZURPTU9iamVj
dCh3b3JrZXItPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgdGhpcykKKyAgICAgICAgLCBtX3dv
cmtlcih3b3JrZXIpCisgICAgICAgICwgbV91cmwodXJsKQorICAgICAgICAsIG1fbmFtZShuYW1l
KQorICAgICAgICAsIG1fd2ViV29ya2VyKHdlYldvcmtlcikKKyAgICAgICAgLCBtX3BvcnQocG9y
dCkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBsb2FkKCk7CisgICAgdmlydHVhbCB2b2lkIGNv
bnRleHREZXN0cm95ZWQoKTsKK3ByaXZhdGU6CisgICAgLy8gV29ya2VyU2NyaXB0TG9hZGVyQ2xp
ZW50IGNhbGxiYWNrCisgICAgdmlydHVhbCB2b2lkIG5vdGlmeUZpbmlzaGVkKCk7CisKKyAgICB2
aXJ0dWFsIHZvaWQgY29ubmVjdGVkKCk7CisKKyAgICB2b2lkIHNlbmRDb25uZWN0KCk7CisKKyAg
ICBSZWZQdHI8U2hhcmVkV29ya2VyPiBtX3dvcmtlcjsKKyAgICBLVVJMIG1fdXJsOworICAgIFN0
cmluZyBtX25hbWU7CisgICAgT3duUHRyPFdlYlNoYXJlZFdvcmtlcj4gbV93ZWJXb3JrZXI7Cisg
ICAgT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbD4gbV9wb3J0OworICAgIFdvcmtlclNjcmlwdExv
YWRlciBtX3NjcmlwdExvYWRlcjsKK307CisKK3ZvaWQgU2hhcmVkV29ya2VyU2NyaXB0TG9hZGVy
Ojpsb2FkKCkKK3sKKyAgICAvLyBJZiB0aGUgc2hhcmVkIHdvcmtlciBpcyBub3QgeWV0IHJ1bm5p
bmcsIGxvYWQgdGhlIHNjcmlwdCByZXNvdXJjZSBmb3IgaXQsIG90aGVyd2lzZSBqdXN0IHNlbmQg
aXQgYSBjb25uZWN0IGV2ZW50LgorICAgIGlmIChtX3dlYldvcmtlci0+aXNTdGFydGVkKCkpCisg
ICAgICAgIHNlbmRDb25uZWN0KCk7CisgICAgZWxzZQorICAgICAgICBtX3NjcmlwdExvYWRlci5s
b2FkQXN5bmNocm9ub3VzbHkobV93b3JrZXItPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgbV91
cmwsIERlbnlDcm9zc09yaWdpblJlcXVlc3RzLCB0aGlzKTsKK30KKworLy8gRXh0cmFjdHMgYSBX
ZWJNZXNzYWdlUG9ydENoYW5uZWwgZnJvbSBhIE1lc3NhZ2VQb3J0Q2hhbm5lbC4KK3N0YXRpYyBX
ZWJNZXNzYWdlUG9ydENoYW5uZWwqIGdldFdlYlBvcnQoUGFzc093blB0cjxNZXNzYWdlUG9ydENo
YW5uZWw+IHBvcnQpCit7CisgICAgLy8gRXh0cmFjdCB0aGUgV2ViTWVzc2FnZVBvcnRDaGFubmVs
IHRvIHNlbmQgdG8gdGhlIHdvcmtlci4KKyAgICBQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbCog
cGxhdGZvcm1DaGFubmVsID0gcG9ydC0+Y2hhbm5lbCgpOworICAgIFdlYk1lc3NhZ2VQb3J0Q2hh
bm5lbCogd2ViUG9ydCA9IHBsYXRmb3JtQ2hhbm5lbC0+d2ViQ2hhbm5lbFJlbGVhc2UoKTsKKyAg
ICB3ZWJQb3J0LT5zZXRDbGllbnQoMCk7CisgICAgcmV0dXJuIHdlYlBvcnQ7Cit9CisKK3ZvaWQg
U2hhcmVkV29ya2VyU2NyaXB0TG9hZGVyOjpub3RpZnlGaW5pc2hlZCgpCit7CisgICAgaWYgKG1f
c2NyaXB0TG9hZGVyLmZhaWxlZCgpKSB7CisgICAgICAgIG1fd29ya2VyLT5kaXNwYXRjaEV2ZW50
KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmVycm9yRXZlbnQsIGZhbHNlLCB0cnVlKSk7Cisg
ICAgICAgIGRlbGV0ZSB0aGlzOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFBhc3MgdGhlIHNj
cmlwdCBvZmYgdG8gdGhlIHdvcmtlciwgdGhlbiBzZW5kIGEgY29ubmVjdCBldmVudC4KKyAgICAg
ICAgbV93ZWJXb3JrZXItPnN0YXJ0V29ya2VyQ29udGV4dChtX3VybCwgbV9uYW1lLCBtX3dvcmtl
ci0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT51c2VyQWdlbnQobV91cmwpLCBtX3NjcmlwdExv
YWRlci5zY3JpcHQoKSk7CisgICAgICAgIHNlbmRDb25uZWN0KCk7CisgICAgfQorfQorCit2b2lk
IFNoYXJlZFdvcmtlclNjcmlwdExvYWRlcjo6c2VuZENvbm5lY3QoKQoreworICAgIC8vIFNlbmQg
dGhlIGNvbm5lY3QgZXZlbnQgb2ZmLCBhbmQgbGluZ2VyIHVudGlsIGl0IGlzIGRvbmUgc2VuZGlu
Zy4KKyAgICBtX3dlYldvcmtlci0+Y29ubmVjdChnZXRXZWJQb3J0KG1fcG9ydC5yZWxlYXNlKCkp
LCB0aGlzKTsKK30KKwordm9pZCBTaGFyZWRXb3JrZXJTY3JpcHRMb2FkZXI6OmNvbnRleHREZXN0
cm95ZWQoKQoreworICAgIEFjdGl2ZURPTU9iamVjdDo6Y29udGV4dERlc3Ryb3llZCgpOworICAg
IGRlbGV0ZSB0aGlzOworfQorCit2b2lkIFNoYXJlZFdvcmtlclNjcmlwdExvYWRlcjo6Y29ubmVj
dGVkKCkKK3sKKyAgICAvLyBDb25uZWN0IGV2ZW50IGhhcyBiZWVuIHNlbnQsIHNvIGZyZWUgb3Vy
c2VsdmVzICh0aGlzIHJlbGVhc2VzIHRoZSBTaGFyZWRXb3JrZXIgc28gaXQgY2FuIGJlIGZyZWVk
IGFzIHdlbGwgaWYgdW5yZWZlcmVuY2VkKS4KKyAgICBkZWxldGUgdGhpczsKK30KKworYm9vbCBT
aGFyZWRXb3JrZXJSZXBvc2l0b3J5Ojppc0F2YWlsYWJsZSgpCit7CisgICAgLy8gQWxsb3cgdGhl
IFdlYktpdENsaWVudCB0byBkZXRlcm1pbmUgaWYgU2hhcmVkV29ya2VycyBhcmUgYXZhaWxhYmxl
LgorICAgIHJldHVybiBXZWJLaXQ6OndlYktpdENsaWVudCgpLT5zaGFyZWRXb3JrZXJSZXBvc2l0
b3J5KCk7Cit9CisKK3N0YXRpYyBXZWJTaGFyZWRXb3JrZXJSZXBvc2l0b3J5OjpEb2N1bWVudElE
IGdldElkKHZvaWQqIGRvY3VtZW50KQoreworICAgIEFTU0VSVChkb2N1bWVudCk7CisgICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8V2ViU2hhcmVkV29ya2VyUmVwb3NpdG9yeTo6RG9jdW1lbnRJ
RD4oZG9jdW1lbnQpOworfQorCit2b2lkIFNoYXJlZFdvcmtlclJlcG9zaXRvcnk6OmNvbm5lY3Qo
UGFzc1JlZlB0cjxTaGFyZWRXb3JrZXI+IHdvcmtlciwgUGFzc093blB0cjxNZXNzYWdlUG9ydENo
YW5uZWw+IHBvcnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRp
b25Db2RlJiBlYykKK3sKKyAgICAvLyBUaGlzIHNob3VsZCBub3QgYmUgY2FsbGFibGUgdW5sZXNz
IHRoZXJlJ3MgYSBTaGFyZWRXb3JrZXJSZXBvc2l0b3J5IGZvcgorICAgIC8vIHRoaXMgY29udGV4
dCAoc2luY2UgaXNBdmFpbGFibGUoKSBzaG91bGQgaGF2ZSByZXR1cm5lZCBudWxsKS4KKyAgICBB
U1NFUlQoV2ViS2l0Ojp3ZWJLaXRDbGllbnQoKS0+c2hhcmVkV29ya2VyUmVwb3NpdG9yeSgpKTsK
KworICAgIC8vIE5vIG5lc3RlZCB3b3JrZXJzIChmb3Igbm93KSAtIGNvbm5lY3QoKSBzaG91bGQg
b25seSBiZSBjYWxsZWQgZnJvbSBkb2N1bWVudCBjb250ZXh0LgorICAgIEFTU0VSVCh3b3JrZXIt
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNEb2N1bWVudCgpKTsKKyAgICBEb2N1bWVudCog
ZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KHdvcmtlci0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpKTsKKyAgICBXZWJGcmFtZUltcGwqIHdlYkZyYW1lID0gV2ViRnJhbWVJbXBsOjpm
cm9tRnJhbWUoZG9jdW1lbnQtPmZyYW1lKCkpOworICAgIE93blB0cjxXZWJTaGFyZWRXb3JrZXI+
IHdlYldvcmtlcjsKKyAgICB3ZWJXb3JrZXIgPSB3ZWJGcmFtZS0+Y2xpZW50KCktPmNyZWF0ZVNo
YXJlZFdvcmtlcih3ZWJGcmFtZSwgdXJsLCBuYW1lLCBnZXRJZChkb2N1bWVudCkpOworCisgICAg
aWYgKCF3ZWJXb3JrZXIpIHsKKyAgICAgICAgLy8gRXhpc3Rpbmcgd29ya2VyIGRvZXMgbm90IG1h
dGNoIHRoaXMgdXJsLCBzbyByZXR1cm4gYW4gZXJyb3IgYmFjayB0byB0aGUgY2FsbGVyLgorICAg
ICAgICBlYyA9IFVSTF9NSVNNQVRDSF9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICAvLyBUaGUgbG9hZGVyIG9iamVjdCBtYW5hZ2VzIGl0cyBvd24gbGlmZWN5Y2xlIChhbmQgdGhl
IGxpZmVjeWNsZXMgb2YgdGhlIHR3byB3b3JrZXIgb2JqZWN0cykuCisgICAgLy8gSXQgd2lsbCBm
cmVlIGl0c2VsZiBvbmNlIGxvYWRpbmcgaXMgY29tcGxldGVkLgorICAgIFNoYXJlZFdvcmtlclNj
cmlwdExvYWRlciogbG9hZGVyID0gbmV3IFNoYXJlZFdvcmtlclNjcmlwdExvYWRlcih3b3JrZXIs
IHVybCwgbmFtZSwgcG9ydC5yZWxlYXNlKCksIHdlYldvcmtlci5yZWxlYXNlKCkpOworICAgIGxv
YWRlci0+bG9hZCgpOworfQorCit2b2lkIFNoYXJlZFdvcmtlclJlcG9zaXRvcnk6OmRvY3VtZW50
RGV0YWNoZWQoRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIFdlYlNoYXJlZFdvcmtlclJlcG9z
aXRvcnkqIHJlcG8gPSBXZWJLaXQ6OndlYktpdENsaWVudCgpLT5zaGFyZWRXb3JrZXJSZXBvc2l0
b3J5KCk7CisgICAgaWYgKHJlcG8pCisgICAgICAgIHJlcG8tPmRvY3VtZW50RGV0YWNoZWQoZ2V0
SWQoZG9jdW1lbnQpKTsKK30KKworYm9vbCBTaGFyZWRXb3JrZXJSZXBvc2l0b3J5OjpoYXNTaGFy
ZWRXb3JrZXJzKERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICBXZWJTaGFyZWRXb3JrZXJSZXBv
c2l0b3J5KiByZXBvID0gV2ViS2l0Ojp3ZWJLaXRDbGllbnQoKS0+c2hhcmVkV29ya2VyUmVwb3Np
dG9yeSgpOworICAgIHJldHVybiByZXBvICYmIHJlcG8tPmhhc1NoYXJlZFdvcmtlcnMoZ2V0SWQo
ZG9jdW1lbnQpKTsKK30KKworCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShTSEFSRURfV09SS0VSUyk=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42838</attachid>
            <date>2009-11-09 19:03:44 -0800</date>
            <delta_ts>2009-11-10 10:56:44 -0800</delta_ts>
            <desc>Up-streaming Chromium API src files: StorageStreamHandlers...StorageNamespaceProxy</desc>
            <filename>bug-31276-20091109190343.patch</filename>
            <type>text/plain</type>
            <size>31707</size>
            <attacher name="Yaar Schnitman">yaar</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IDMzYjk4ZGEuLjg1Yjk4YzEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMiw2ICsy
LDYzIEBACiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAKKyAgICAgICAg
VXAtc3RyZWFtaW5nIENocm9taXVtIEFQSSBzcmMgZmlsZXM6IFN0b3JhZ2VTdHJlYW1IYW5kbGVy
cy4uLlN0b3JhZ2VOYW1lc3BhY2VQcm94eQorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0zMTI3NgorCisgICAgICAgICogc3JjL1NvY2tldFN0cmVhbUhh
bmRsZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW50
ZXJuYWw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbnRl
cm5hbDo6U29ja2V0U3RyZWFtSGFuZGxlSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6U29j
a2V0U3RyZWFtSGFuZGxlSW50ZXJuYWw6On5Tb2NrZXRTdHJlYW1IYW5kbGVJbnRlcm5hbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbnRlcm5hbDo6Y29ubmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbnRlcm5hbDo6c2VuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbnRlcm5hbDo6Y2xvc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW50ZXJuYWw6OndpbGxPcGVuU3RyZWFtKToK
KyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUludGVybmFsOjpkaWRPcGVuU3Ry
ZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUludGVybmFsOjpkaWRT
ZW5kRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbnRlcm5hbDo6
ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW50
ZXJuYWw6OmRpZENsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUlu
dGVybmFsOjpkaWRGYWlsKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6
U29ja2V0U3RyZWFtSGFuZGxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRs
ZTo6flNvY2tldFN0cmVhbUhhbmRsZSk6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1I
YW5kbGU6OnBsYXRmb3JtU2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5k
bGU6OnBsYXRmb3JtQ2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxl
OjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
U29ja2V0U3RyZWFtSGFuZGxlOjpyZWNlaXZlZENyZWRlbnRpYWwpOgorICAgICAgICAoV2ViQ29y
ZTo6U29ja2V0U3RyZWFtSGFuZGxlOjpyZWNlaXZlZFJlcXVlc3RUb0NvbnRpbnVlV2l0aG91dENy
ZWRlbnRpYWwpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjpyZWNlaXZl
ZENhbmNlbGxhdGlvbik6CisgICAgICAgICogc3JjL1N0b3JhZ2VBcmVhUHJveHkuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhUHJveHk6OlN0b3JhZ2VBcmVhUHJveHkp
OgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFQcm94eTo6flN0b3JhZ2VBcmVhUHJveHkp
OgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFQcm94eTo6bGVuZ3RoKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0b3JhZ2VBcmVhUHJveHk6OmtleSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9y
YWdlQXJlYVByb3h5OjpnZXRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhUHJv
eHk6OnNldEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFQcm94eTo6cmVtb3Zl
SXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYVByb3h5OjpjbGVhcik6CisgICAg
ICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYVByb3h5Ojpjb250YWlucyk6CisgICAgICAgICogc3Jj
L1N0b3JhZ2VBcmVhUHJveHkuaDogQWRkZWQuCisgICAgICAgICogc3JjL1N0b3JhZ2VFdmVudERp
c3BhdGNoZXJDaHJvbWl1bS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUV2
ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2gpOgorICAgICAgICAqIHNyYy9TdG9yYWdlRXZlbnREaXNw
YXRjaGVySW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUV2ZW50RGlz
cGF0Y2hlckltcGw6OlN0b3JhZ2VFdmVudERpc3BhdGNoZXJJbXBsKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0b3JhZ2VFdmVudERpc3BhdGNoZXJJbXBsOjpkaXNwYXRjaFN0b3JhZ2VFdmVudCk6Cisg
ICAgICAgICogc3JjL1N0b3JhZ2VFdmVudERpc3BhdGNoZXJJbXBsLmg6IEFkZGVkLgorICAgICAg
ICAqIHNyYy9TdG9yYWdlTmFtZXNwYWNlUHJveHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlN0b3JhZ2VOYW1lc3BhY2U6OmxvY2FsU3RvcmFnZU5hbWVzcGFjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlOjpzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlUHJveHk6OlN0b3JhZ2VOYW1lc3BhY2VQcm94
eSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlUHJveHk6On5TdG9yYWdlTmFt
ZXNwYWNlUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZVByb3h5Ojpj
b3B5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2VQcm94eTo6c3RvcmFnZUFy
ZWEpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZVByb3h5OjpjbG9zZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlUHJveHk6OnVubG9jayk6CisgICAgICAg
ICogc3JjL1N0b3JhZ2VOYW1lc3BhY2VQcm94eS5oOiBBZGRlZC4KKworMjAwOS0xMS0wOSAgWWFh
ciBTY2huaXRtYW4gIDx5YWFyQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKwogICAgICAgICBVcC1zdHJlYW1pbmcgQ2hyb21pdW0gQVBJIHNyYyBm
aWxlczogTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbC4uLlNoYXJlZFdvcmtlclJlcG9zaXRvcnkK
IAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzEyNzYK
ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvU29ja2V0U3RyZWFtSGFuZGxlLmNwcCBi
L1dlYktpdC9jaHJvbWl1bS9zcmMvU29ja2V0U3RyZWFtSGFuZGxlLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTY3MzNjCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0
L2Nocm9taXVtL3NyYy9Tb2NrZXRTdHJlYW1IYW5kbGUuY3BwCkBAIC0wLDAgKzEsMjU2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZS5oIgorCisjaWYg
RU5BQkxFKFdFQl9TT0NLRVRTKQorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50LmgiCisj
aW5jbHVkZSAiV2ViRGF0YS5oIgorI2luY2x1ZGUgIldlYktpdC5oIgorI2luY2x1ZGUgIldlYktp
dENsaWVudC5oIgorI2luY2x1ZGUgIldlYlNvY2tldFN0cmVhbUhhbmRsZS5oIgorI2luY2x1ZGUg
IldlYlNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5oIgorI2luY2x1ZGUgIldlYlVSTC5oIgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU29ja2V0U3RyZWFtSGFuZGxlSW50ZXJuYWwgOiBw
dWJsaWMgV2ViU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc093blB0cjxTb2NrZXRTdHJlYW1IYW5kbGVJbnRlcm5hbD4gY3JlYXRlKFNvY2tldFN0cmVh
bUhhbmRsZSogaGFuZGxlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBTb2NrZXRTdHJlYW1I
YW5kbGVJbnRlcm5hbChoYW5kbGUpOworICAgIH0KKyAgICB2aXJ0dWFsIH5Tb2NrZXRTdHJlYW1I
YW5kbGVJbnRlcm5hbCgpOworCisgICAgdm9pZCBjb25uZWN0KGNvbnN0IEtVUkwmKTsKKyAgICBp
bnQgc2VuZChjb25zdCBjaGFyKiwgaW50KTsKKyAgICB2b2lkIGNsb3NlKCk7CisKKyAgICB2aXJ0
dWFsIHZvaWQgd2lsbE9wZW5TdHJlYW0oV2ViU29ja2V0U3RyZWFtSGFuZGxlKiwgY29uc3QgV2Vi
VVJMJik7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlkT3BlblN0cmVhbShXZWJTb2NrZXRTdHJlYW1I
YW5kbGUqLCBpbnQpOworICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YShXZWJTb2NrZXRTdHJl
YW1IYW5kbGUqLCBpbnQpOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShXZWJTb2Nr
ZXRTdHJlYW1IYW5kbGUqLCBjb25zdCBXZWJEYXRhJik7CisgICAgdmlydHVhbCB2b2lkIGRpZENs
b3NlKFdlYlNvY2tldFN0cmVhbUhhbmRsZSopOworICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKFdl
YlNvY2tldFN0cmVhbUhhbmRsZSosIGNvbnN0IFdlYlNvY2tldFN0cmVhbUVycm9yJik7CisKK3By
aXZhdGU6CisgICAgZXhwbGljaXQgU29ja2V0U3RyZWFtSGFuZGxlSW50ZXJuYWwoU29ja2V0U3Ry
ZWFtSGFuZGxlKik7CisKKyAgICBTb2NrZXRTdHJlYW1IYW5kbGUqIG1faGFuZGxlOworICAgIE93
blB0cjxXZWJTb2NrZXRTdHJlYW1IYW5kbGU+IG1fc29ja2V0OworICAgIGludCBtX21heFBlbmRp
bmdTZW5kQWxsb3dlZDsKKyAgICBpbnQgbV9wZW5kaW5nQW1vdW50U2VudDsKK307CisKK1NvY2tl
dFN0cmVhbUhhbmRsZUludGVybmFsOjpTb2NrZXRTdHJlYW1IYW5kbGVJbnRlcm5hbChTb2NrZXRT
dHJlYW1IYW5kbGUqIGhhbmRsZSkKKyAgICA6IG1faGFuZGxlKGhhbmRsZSkKKyAgICAsIG1fbWF4
UGVuZGluZ1NlbmRBbGxvd2VkKDApCisgICAgLCBtX3BlbmRpbmdBbW91bnRTZW50KDApCit7Cit9
CisKK1NvY2tldFN0cmVhbUhhbmRsZUludGVybmFsOjp+U29ja2V0U3RyZWFtSGFuZGxlSW50ZXJu
YWwoKQoreworICAgIG1faGFuZGxlID0gMDsKK30KKwordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVJ
bnRlcm5hbDo6Y29ubmVjdChjb25zdCBLVVJMJiB1cmwpCit7CisgICAgbV9zb2NrZXQuc2V0KHdl
YktpdENsaWVudCgpLT5jcmVhdGVTb2NrZXRTdHJlYW1IYW5kbGUoKSk7CisgICAgTE9HKE5ldHdv
cmssICJjb25uZWN0Iik7CisgICAgQVNTRVJUKG1fc29ja2V0LmdldCgpKTsKKyAgICBtX3NvY2tl
dC0+Y29ubmVjdCh1cmwsIHRoaXMpOworfQorCitpbnQgU29ja2V0U3RyZWFtSGFuZGxlSW50ZXJu
YWw6OnNlbmQoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbikKK3sKKyAgICBMT0coTmV0d29yaywg
InNlbmQgbGVuPSVkIiwgbGVuKTsKKyAgICBBU1NFUlQobV9zb2NrZXQuZ2V0KCkpOworICAgIGlm
IChtX3BlbmRpbmdBbW91bnRTZW50ICsgbGVuID49IG1fbWF4UGVuZGluZ1NlbmRBbGxvd2VkKQor
ICAgICAgICBsZW4gPSBtX21heFBlbmRpbmdTZW5kQWxsb3dlZCAtIG1fcGVuZGluZ0Ftb3VudFNl
bnQgLSAxOworCisgICAgaWYgKGxlbiA8PSAwKQorICAgICAgICByZXR1cm4gbGVuOworICAgIFdl
YkRhdGEgd2ViZGF0YShkYXRhLCBsZW4pOworICAgIGlmIChtX3NvY2tldC0+c2VuZCh3ZWJkYXRh
KSkgeworICAgICAgICBtX3BlbmRpbmdBbW91bnRTZW50ICs9IGxlbjsKKyAgICAgICAgTE9HKE5l
dHdvcmssICJzZW50Iik7CisgICAgICAgIGlmIChtX2hhbmRsZSAmJiBtX2hhbmRsZS0+bV9jbGll
bnQpCisgICAgICAgICAgICBtX2hhbmRsZS0+bV9jbGllbnQtPndpbGxTZW5kRGF0YShtX2hhbmRs
ZSwgd2ViZGF0YS5kYXRhKCksIHdlYmRhdGEuc2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuIGxlbjsK
KyAgICB9CisgICAgTE9HKE5ldHdvcmssICJidXN5LiBidWZmZXJpbmciKTsKKyAgICByZXR1cm4g
MDsKK30KKwordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVJbnRlcm5hbDo6Y2xvc2UoKQoreworICAg
IExPRyhOZXR3b3JrLCAiY2xvc2UiKTsKKyAgICBtX3NvY2tldC0+Y2xvc2UoKTsKK30KKwordm9p
ZCBTb2NrZXRTdHJlYW1IYW5kbGVJbnRlcm5hbDo6d2lsbE9wZW5TdHJlYW0oV2ViU29ja2V0U3Ry
ZWFtSGFuZGxlKiBzb2NrZXRIYW5kbGUsIGNvbnN0IFdlYlVSTCYgdXJsKQoreworICAgIExPRyhO
ZXR3b3JrLCAid2lsbE9wZW5TdHJlYW0iKTsKKyAgICBpZiAobV9oYW5kbGUgJiYgbV9zb2NrZXQu
Z2V0KCkpIHsKKyAgICAgICAgQVNTRVJUKHNvY2tldEhhbmRsZSA9PSBtX3NvY2tldC5nZXQoKSk7
CisgICAgICAgIGlmIChtX2hhbmRsZS0+bV9jbGllbnQpCisgICAgICAgICAgICBtX2hhbmRsZS0+
bV9jbGllbnQtPndpbGxPcGVuU3RyZWFtKG1faGFuZGxlLCB1cmwpOworICAgIH0KK30KKwordm9p
ZCBTb2NrZXRTdHJlYW1IYW5kbGVJbnRlcm5hbDo6ZGlkT3BlblN0cmVhbShXZWJTb2NrZXRTdHJl
YW1IYW5kbGUqIHNvY2tldEhhbmRsZSwgaW50IG1heFBlbmRpbmdTZW5kQWxsb3dlZCkKK3sKKyAg
ICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhhbmRsZUludGVybmFsOjpkaWRPcGVuICVkIiwK
KyAgICAgICAgbWF4UGVuZGluZ1NlbmRBbGxvd2VkKTsKKyAgICBBU1NFUlQobWF4UGVuZGluZ1Nl
bmRBbGxvd2VkID4gMCk7CisgICAgaWYgKG1faGFuZGxlICYmIG1fc29ja2V0LmdldCgpKSB7Cisg
ICAgICAgIEFTU0VSVChzb2NrZXRIYW5kbGUgPT0gbV9zb2NrZXQuZ2V0KCkpOworICAgICAgICBt
X21heFBlbmRpbmdTZW5kQWxsb3dlZCA9IG1heFBlbmRpbmdTZW5kQWxsb3dlZDsKKyAgICAgICAg
bV9oYW5kbGUtPm1fc3RhdGUgPSBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlOjpPcGVuOworICAgICAg
ICBpZiAobV9oYW5kbGUtPm1fY2xpZW50KSB7CisgICAgICAgICAgICBtX2hhbmRsZS0+bV9jbGll
bnQtPmRpZE9wZW4obV9oYW5kbGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgfQorICAgIExPRyhOZXR3b3JrLCAibm8gbV9oYW5kbGUgb3IgbV9zb2NrZXQ/Iik7Cit9CisK
K3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlSW50ZXJuYWw6OmRpZFNlbmREYXRhKFdlYlNvY2tldFN0
cmVhbUhhbmRsZSogc29ja2V0SGFuZGxlLCBpbnQgYW1vdW50U2VudCkKK3sKKyAgICBMT0coTmV0
d29yaywgIlNvY2tldFN0cmVhbUhhbmRsZUludGVybmFsOjpkaWRTZW5kRGF0YSAlZCIsIGFtb3Vu
dFNlbnQpOworICAgIEFTU0VSVChhbW91bnRTZW50ID4gMCk7CisgICAgaWYgKG1faGFuZGxlICYm
IG1fc29ja2V0LmdldCgpKSB7CisgICAgICAgIEFTU0VSVChzb2NrZXRIYW5kbGUgPT0gbV9zb2Nr
ZXQuZ2V0KCkpOworICAgICAgICBtX3BlbmRpbmdBbW91bnRTZW50IC09IGFtb3VudFNlbnQ7Cisg
ICAgICAgIEFTU0VSVChtX3BlbmRpbmdBbW91bnRTZW50ID49IDApOworICAgICAgICBtX2hhbmRs
ZS0+c2VuZFBlbmRpbmdEYXRhKCk7CisgICAgfQorfQorCit2b2lkIFNvY2tldFN0cmVhbUhhbmRs
ZUludGVybmFsOjpkaWRSZWNlaXZlRGF0YShXZWJTb2NrZXRTdHJlYW1IYW5kbGUqIHNvY2tldEhh
bmRsZSwgY29uc3QgV2ViRGF0YSYgZGF0YSkKK3sKKyAgICBMT0coTmV0d29yaywgImRpZFJlY2Vp
dmVEYXRhIik7CisgICAgaWYgKG1faGFuZGxlICYmIG1fc29ja2V0LmdldCgpKSB7CisgICAgICAg
IEFTU0VSVChzb2NrZXRIYW5kbGUgPT0gbV9zb2NrZXQuZ2V0KCkpOworICAgICAgICBpZiAobV9o
YW5kbGUtPm1fY2xpZW50KQorICAgICAgICAgICAgbV9oYW5kbGUtPm1fY2xpZW50LT5kaWRSZWNl
aXZlRGF0YShtX2hhbmRsZSwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKKyAgICB9Cit9CisK
K3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlSW50ZXJuYWw6OmRpZENsb3NlKFdlYlNvY2tldFN0cmVh
bUhhbmRsZSogc29ja2V0SGFuZGxlKQoreworICAgIExPRyhOZXR3b3JrLCAiZGlkQ2xvc2UiKTsK
KyAgICBpZiAobV9oYW5kbGUgJiYgbV9zb2NrZXQuZ2V0KCkpIHsKKyAgICAgICAgQVNTRVJUKHNv
Y2tldEhhbmRsZSA9PSBtX3NvY2tldC5nZXQoKSk7CisgICAgICAgIG1fc29ja2V0LmNsZWFyKCk7
CisgICAgICAgIFNvY2tldFN0cmVhbUhhbmRsZSogaCA9IG1faGFuZGxlOworICAgICAgICBtX2hh
bmRsZSA9IDA7CisgICAgICAgIGlmIChoLT5tX2NsaWVudCkKKyAgICAgICAgICAgIGgtPm1fY2xp
ZW50LT5kaWRDbG9zZShoKTsKKyAgICB9Cit9CisKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlSW50
ZXJuYWw6OmRpZEZhaWwoV2ViU29ja2V0U3RyZWFtSGFuZGxlKiBzb2NrZXRIYW5kbGUsIGNvbnN0
IFdlYlNvY2tldFN0cmVhbUVycm9yJiBlcnIpCit7CisgICAgTE9HKE5ldHdvcmssICJkaWRGYWls
Iik7CisgICAgaWYgKG1faGFuZGxlICYmIG1fc29ja2V0LmdldCgpKSB7CisgICAgICAgIEFTU0VS
VChzb2NrZXRIYW5kbGUgPT0gbV9zb2NrZXQuZ2V0KCkpOworICAgICAgICBtX3NvY2tldC5jbGVh
cigpOworICAgICAgICBTb2NrZXRTdHJlYW1IYW5kbGUqIGggPSBtX2hhbmRsZTsKKyAgICAgICAg
bV9oYW5kbGUgPSAwOworICAgICAgICBpZiAoaC0+bV9jbGllbnQpCisgICAgICAgICAgICBoLT5t
X2NsaWVudC0+ZGlkQ2xvc2UoaCk7ICAvLyBkaWRGYWlsKGgsIGVycik7CisgICAgfQorfQorCisv
LyBGSVhNRTogYXV0aAorCisvLyBTb2NrZXRTdHJlYW1IYW5kbGUgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTb2NrZXRTdHJlYW1I
YW5kbGU6OlNvY2tldFN0cmVhbUhhbmRsZShjb25zdCBLVVJMJiB1cmwsIFNvY2tldFN0cmVhbUhh
bmRsZUNsaWVudCogY2xpZW50KQorICAgIDogU29ja2V0U3RyZWFtSGFuZGxlQmFzZSh1cmwsIGNs
aWVudCkKK3sKKyAgICBtX2ludGVybmFsID0gU29ja2V0U3RyZWFtSGFuZGxlSW50ZXJuYWw6OmNy
ZWF0ZSh0aGlzKTsKKyAgICBtX2ludGVybmFsLT5jb25uZWN0KG1fdXJsKTsKK30KKworU29ja2V0
U3RyZWFtSGFuZGxlOjp+U29ja2V0U3RyZWFtSGFuZGxlKCkKK3sKKyAgICBzZXRDbGllbnQoMCk7
CisgICAgbV9pbnRlcm5hbC5jbGVhcigpOworfQorCitpbnQgU29ja2V0U3RyZWFtSGFuZGxlOjpw
bGF0Zm9ybVNlbmQoY29uc3QgY2hhciogYnVmLCBpbnQgbGVuKQoreworICAgIGlmICghbV9pbnRl
cm5hbC5nZXQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPnNl
bmQoYnVmLCBsZW4pOworfQorCit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6cGxhdGZvcm1DbG9z
ZSgpCit7CisgICAgaWYgKG1faW50ZXJuYWwuZ2V0KCkpCisgICAgICAgIG1faW50ZXJuYWwtPmNs
b3NlKCk7Cit9CisKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpkaWRSZWNlaXZlQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSkK
K3sKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UodGhpcywgY2hhbGxlbmdlKTsKK30KKwordm9pZCBTb2NrZXRTdHJl
YW1IYW5kbGU6OnJlY2VpdmVkQ3JlZGVudGlhbChjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSYgY2hhbGxlbmdlLCBjb25zdCBDcmVkZW50aWFsJiBjcmVkZW50aWFsKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpyZWNlaXZlZFJlcXVl
c3RUb0NvbnRpbnVlV2l0aG91dENyZWRlbnRpYWwoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UmIGNoYWxsZW5nZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFNvY2tl
dFN0cmVhbUhhbmRsZTo6cmVjZWl2ZWRDYW5jZWxsYXRpb24oY29uc3QgQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UmIGNoYWxsZW5nZSkKK3sKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xp
ZW50LT5yZWNlaXZlZENhbmNlbGxhdGlvbih0aGlzLCBjaGFsbGVuZ2UpOworfQorCit9ICAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgIC8vIEVOQUJMRShXRUJfU09DS0VUUykKZGlmZiAt
LWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvU3RvcmFnZUFyZWFQcm94eS5jcHAgYi9XZWJLaXQv
Y2hyb21pdW0vc3JjL1N0b3JhZ2VBcmVhUHJveHkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjU1MTUwN2YKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0v
c3JjL1N0b3JhZ2VBcmVhUHJveHkuY3BwCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdPT0dMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgR09PR0xFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiU3RvcmFnZUFyZWFQcm94eS5oIgorCisjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQor
CisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5j
bHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgIlN0
b3JhZ2VBcmVhSW1wbC5oIgorCisjaW5jbHVkZSAiV2ViU3RvcmFnZUFyZWEuaCIKKyNpbmNsdWRl
ICJXZWJTdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJVUkwuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitTdG9yYWdlQXJlYVByb3h5OjpTdG9yYWdlQXJlYVByb3h5KFdlYktpdDo6V2ViU3RvcmFn
ZUFyZWEqIHN0b3JhZ2VBcmVhKQorICAgIDogbV9zdG9yYWdlQXJlYShzdG9yYWdlQXJlYSkKK3sK
K30KKworU3RvcmFnZUFyZWFQcm94eTo6flN0b3JhZ2VBcmVhUHJveHkoKQoreworfQorCit1bnNp
Z25lZCBTdG9yYWdlQXJlYVByb3h5OjpsZW5ndGgoKSBjb25zdAoreworICAgIHJldHVybiBtX3N0
b3JhZ2VBcmVhLT5sZW5ndGgoKTsKK30KKworU3RyaW5nIFN0b3JhZ2VBcmVhUHJveHk6OmtleSh1
bnNpZ25lZCBpbmRleCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdG9yYWdlQXJlYS0+a2V5KGlu
ZGV4KTsKK30KKworU3RyaW5nIFN0b3JhZ2VBcmVhUHJveHk6OmdldEl0ZW0oY29uc3QgU3RyaW5n
JiBrZXkpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3RvcmFnZUFyZWEtPmdldEl0ZW0oa2V5KTsK
K30KKwordm9pZCBTdG9yYWdlQXJlYVByb3h5OjpzZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBj
b25zdCBTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYywgRnJhbWUqIGZyYW1lKQorewor
ICAgIGJvb2wgcXVvdGFFeGNlcHRpb24gPSBmYWxzZTsKKyAgICBtX3N0b3JhZ2VBcmVhLT5zZXRJ
dGVtKGtleSwgdmFsdWUsIGZyYW1lLT5kb2N1bWVudCgpLT51cmwoKSwgcXVvdGFFeGNlcHRpb24p
OworICAgIGVjID0gcXVvdGFFeGNlcHRpb24gPyBRVU9UQV9FWENFRURFRF9FUlIgOiAwOworfQor
Cit2b2lkIFN0b3JhZ2VBcmVhUHJveHk6OnJlbW92ZUl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIEZy
YW1lKiBmcmFtZSkKK3sKKyAgICBtX3N0b3JhZ2VBcmVhLT5yZW1vdmVJdGVtKGtleSwgZnJhbWUt
PmRvY3VtZW50KCktPnVybCgpKTsKK30KKwordm9pZCBTdG9yYWdlQXJlYVByb3h5OjpjbGVhcihG
cmFtZSogZnJhbWUpCit7CisgICAgbV9zdG9yYWdlQXJlYS0+Y2xlYXIoZnJhbWUtPmRvY3VtZW50
KCktPnVybCgpKTsKK30KKworYm9vbCBTdG9yYWdlQXJlYVByb3h5Ojpjb250YWlucyhjb25zdCBT
dHJpbmcmIGtleSkgY29uc3QKK3sKKyAgICByZXR1cm4gIWdldEl0ZW0oa2V5KS5pc051bGwoKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKERPTV9TVE9S
QUdFKQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9TdG9yYWdlQXJlYVByb3h5Lmgg
Yi9XZWJLaXQvY2hyb21pdW0vc3JjL1N0b3JhZ2VBcmVhUHJveHkuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi41ZDA5ZDgyCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2No
cm9taXVtL3NyYy9TdG9yYWdlQXJlYVByb3h5LmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR09PR0xFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBHT09HTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU3RvcmFnZUFy
ZWFQcm94eV9oCisjZGVmaW5lIFN0b3JhZ2VBcmVhUHJveHlfaAorCisjaWYgRU5BQkxFKERPTV9T
VE9SQUdFKQorCisjaW5jbHVkZSAiU3RvcmFnZUFyZWEuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7
IGNsYXNzIFdlYlN0b3JhZ2VBcmVhOyB9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
U3RvcmFnZUFyZWFQcm94eSA6IHB1YmxpYyBTdG9yYWdlQXJlYSB7CitwdWJsaWM6CisgICAgU3Rv
cmFnZUFyZWFQcm94eShXZWJLaXQ6OldlYlN0b3JhZ2VBcmVhKiBzdG9yYWdlQXJlYSk7CisgICAg
dmlydHVhbCB+U3RvcmFnZUFyZWFQcm94eSgpOworCisgICAgLy8gVGhlIEhUTUw1IERPTSBTdG9y
YWdlIEFQSQorICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CisgICAgdmlydHVh
bCBTdHJpbmcga2V5KHVuc2lnbmVkIGluZGV4KSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyBn
ZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SXRl
bShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYg
ZWMsIEZyYW1lKiBzb3VyY2VGcmFtZSk7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUl0ZW0oY29u
c3QgU3RyaW5nJiBrZXksIEZyYW1lKiBzb3VyY2VGcmFtZSk7CisgICAgdmlydHVhbCB2b2lkIGNs
ZWFyKEZyYW1lKiBzb3VyY2VGcmFtZSk7CisgICAgdmlydHVhbCBib29sIGNvbnRhaW5zKGNvbnN0
IFN0cmluZyYga2V5KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBPd25QdHI8V2ViS2l0OjpXZWJT
dG9yYWdlQXJlYT4gbV9zdG9yYWdlQXJlYTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIEVOQUJMRShET01fU1RPUkFHRSkKKworI2VuZGlmIC8vIFN0b3JhZ2VBcmVh
UHJveHlfaApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9TdG9yYWdlRXZlbnREaXNw
YXRjaGVyQ2hyb21pdW0uY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9TdG9yYWdlRXZlbnREaXNw
YXRjaGVyQ2hyb21pdW0uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMy
ODY5MjkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1N0b3JhZ2VFdmVu
dERpc3BhdGNoZXJDaHJvbWl1bS5jcHAKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJTdG9yYWdlRXZlbnREaXNwYXRjaGVyLmgiCisKKyNpZiBFTkFCTEUoRE9N
X1NUT1JBR0UpCisKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgIlN0b3Jh
Z2VBcmVhLmgiCisKKyNpbmNsdWRlICJXZWJLaXQuaCIKKyNpbmNsdWRlICJXZWJLaXRDbGllbnQu
aCIKKyNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJVUkwuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCit2b2lkIFN0b3JhZ2VFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoKGNv
bnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBTdG9yYWdlVHlw
ZSBzdG9yYWdlVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2Vj
dXJpdHlPcmlnaW4qIG9yaWdpbiwgRnJhbWUqIHNvdXJjZUZyYW1lKQoreworICAgIEFTU0VSVCgh
c291cmNlRnJhbWUpOyAgLy8gU2FkLCBidXQgdHJ1ZS4KKyAgICBXZWJLaXQ6OndlYktpdENsaWVu
dCgpLT5kaXNwYXRjaFN0b3JhZ2VFdmVudChrZXksIG9sZFZhbHVlLCBuZXdWYWx1ZSwgb3JpZ2lu
LT50b1N0cmluZygpLCBXZWJLaXQ6OldlYlVSTCgpLCBzdG9yYWdlVHlwZSA9PSBMb2NhbFN0b3Jh
Z2UpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRE9N
X1NUT1JBR0UpCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1N0b3JhZ2VFdmVudERp
c3BhdGNoZXJJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvU3RvcmFnZUV2ZW50RGlzcGF0
Y2hlckltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1MTg3OTYK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1N0b3JhZ2VFdmVudERpc3Bh
dGNoZXJJbXBsLmNwcApAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlN0b3JhZ2VFdmVudERpc3BhdGNoZXJJbXBsLmgiCisKKyNpZiBFTkFCTEUoRE9NX1NUT1JB
R0UpCisKKyNpbmNsdWRlICJET01XaW5kb3cuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisj
aW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiUGFnZS5oIgor
I2luY2x1ZGUgIlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5j
bHVkZSAiU3RvcmFnZUV2ZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU3RvcmFnZUV2
ZW50RGlzcGF0Y2hlckltcGw6OlN0b3JhZ2VFdmVudERpc3BhdGNoZXJJbXBsKGNvbnN0IFN0cmlu
ZyYgZ3JvdXBOYW1lKQorICAgIDogbV9wYWdlR3JvdXAoUGFnZUdyb3VwOjpwYWdlR3JvdXAoZ3Jv
dXBOYW1lKSkKK3sKKyAgICBBU1NFUlQobV9wYWdlR3JvdXApOworfQorCit2b2lkIFN0b3JhZ2VF
dmVudERpc3BhdGNoZXJJbXBsOjpkaXNwYXRjaFN0b3JhZ2VFdmVudChjb25zdCBTdHJpbmcmIGtl
eSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIFNlY3VyaXR5
T3JpZ2luKiBzZWN1cml0eU9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEtVUkwmIHVybCwgU3RvcmFnZVR5cGUgc3RvcmFn
ZVR5cGUpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudAorICAgIGlmIChzdG9yYWdlVHlwZSA9
PSBTZXNzaW9uU3RvcmFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gV2UgbmVlZCB0byBj
b3B5IGFsbCByZWxldmFudCBmcmFtZXMgZnJvbSBldmVyeSBwYWdlIHRvIGEgdmVjdG9yIHNpbmNl
IHNlbmRpbmcgdGhlIGV2ZW50IHRvIG9uZSBmcmFtZSBtaWdodCBtdXRhdGUgdGhlIGZyYW1lIHRy
ZWUKKyAgICAvLyBvZiBhbnkgZ2l2ZW4gcGFnZSBpbiB0aGUgZ3JvdXAgb3IgbXV0YXRlIHRoZSBw
YWdlIGdyb3VwIGl0c2VsZi4KKyAgICBWZWN0b3I8UmVmUHRyPEZyYW1lPiA+IGZyYW1lczsKKwor
ICAgIGNvbnN0IEhhc2hTZXQ8UGFnZSo+JiBwYWdlcyA9IG1fcGFnZUdyb3VwLT5wYWdlcygpOwor
ICAgIEhhc2hTZXQ8UGFnZSo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwYWdlcy5lbmQoKTsKKyAg
ICBmb3IgKEhhc2hTZXQ8UGFnZSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHBhZ2VzLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICgqaXQpLT5t
YWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KCkp
IHsKKyAgICAgICAgICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+
ZXF1YWwoc2VjdXJpdHlPcmlnaW4pKQorICAgICAgICAgICAgICAgIGZyYW1lcy5hcHBlbmQoZnJh
bWUpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gRklYTUU6IEZpZ3VyZSBvdXQgaG93IHRv
IHBhc3MgaW4gdGhlIGRvY3VtZW50IFVSSS4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZnJhbWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGZyYW1lc1tpXS0+ZG9jdW1lbnQoKS0+ZGlz
cGF0Y2hXaW5kb3dFdmVudChTdG9yYWdlRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc3RvcmFn
ZUV2ZW50LCBrZXksIG9sZFZhbHVlLCBuZXdWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybCwgZnJh
bWVzW2ldLT5kb21XaW5kb3coKS0+bG9jYWxTdG9yYWdlKCkpKTsKKyAgICB9Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShET01fU1RPUkFHRSkKZGlmZiAt
LWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvU3RvcmFnZUV2ZW50RGlzcGF0Y2hlckltcGwuaCBi
L1dlYktpdC9jaHJvbWl1bS9zcmMvU3RvcmFnZUV2ZW50RGlzcGF0Y2hlckltcGwuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzJkYjdjCi0tLSAvZGV2L251bGwKKysrIGIv
V2ViS2l0L2Nocm9taXVtL3NyYy9TdG9yYWdlRXZlbnREaXNwYXRjaGVySW1wbC5oCkBAIC0wLDAg
KzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIFN0b3JhZ2VFdmVudERpc3BhdGNoZXJJbXBsX2gKKyNkZWZpbmUgU3Rv
cmFnZUV2ZW50RGlzcGF0Y2hlckltcGxfaAorCisjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQorCisj
aW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTdG9yYWdlQXJlYS5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEtVUkw7CitjbGFzcyBQYWdlR3JvdXA7CitjbGFz
cyBTZWN1cml0eU9yaWdpbjsKKworY2xhc3MgU3RvcmFnZUV2ZW50RGlzcGF0Y2hlckltcGwgewor
cHVibGljOgorICAgIFN0b3JhZ2VFdmVudERpc3BhdGNoZXJJbXBsKGNvbnN0IFN0cmluZyYgZ3Jv
dXBOYW1lKTsKKworICAgIHZvaWQgZGlzcGF0Y2hTdG9yYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBr
ZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBTZWN1cml0eU9yaWdpbiosCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBLVVJMJiwgU3RvcmFnZVR5cGUpOworCitwcml2YXRlOgor
ICAgIFBhZ2VHcm91cCogbV9wYWdlR3JvdXA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoRE9NX1NUT1JBR0UpCisKKyNlbmRpZiAvLyBTdG9yYWdlRXZl
bnREaXNwYXRjaGVySW1wbF9oCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1N0b3Jh
Z2VOYW1lc3BhY2VQcm94eS5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1N0b3JhZ2VOYW1lc3Bh
Y2VQcm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIyYmJlZgot
LS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvU3RvcmFnZU5hbWVzcGFjZVBy
b3h5LmNwcApAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2ds
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBHT09HTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEdPT0dMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlN0b3JhZ2VO
YW1lc3BhY2VQcm94eS5oIgorCisjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQorCisjaW5jbHVkZSAi
U2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJTdG9yYWdlQXJlYVByb3h5LmgiCisjaW5jbHVk
ZSAiV2ViS2l0LmgiCisjaW5jbHVkZSAiV2ViS2l0Q2xpZW50LmgiCisjaW5jbHVkZSAiV2ViU3Rv
cmFnZU5hbWVzcGFjZS5oIgorI2luY2x1ZGUgIldlYlN0cmluZy5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK1Bhc3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gU3RvcmFnZU5hbWVzcGFjZTo6
bG9jYWxTdG9yYWdlTmFtZXNwYWNlKGNvbnN0IFN0cmluZyYgcGF0aCwgdW5zaWduZWQgcXVvdGEp
Cit7CisgICAgcmV0dXJuIG5ldyBTdG9yYWdlTmFtZXNwYWNlUHJveHkoV2ViS2l0Ojp3ZWJLaXRD
bGllbnQoKS0+Y3JlYXRlTG9jYWxTdG9yYWdlTmFtZXNwYWNlKHBhdGgsIHF1b3RhKSk7Cit9CisK
K1Bhc3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gU3RvcmFnZU5hbWVzcGFjZTo6c2Vzc2lvblN0
b3JhZ2VOYW1lc3BhY2UoKQoreworICAgIHJldHVybiBuZXcgU3RvcmFnZU5hbWVzcGFjZVByb3h5
KFdlYktpdDo6d2ViS2l0Q2xpZW50KCktPmNyZWF0ZVNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKCkp
OworfQorCitTdG9yYWdlTmFtZXNwYWNlUHJveHk6OlN0b3JhZ2VOYW1lc3BhY2VQcm94eShXZWJL
aXQ6OldlYlN0b3JhZ2VOYW1lc3BhY2UqIHN0b3JhZ2VOYW1lc3BhY2UpCisgICAgOiBtX3N0b3Jh
Z2VOYW1lc3BhY2Uoc3RvcmFnZU5hbWVzcGFjZSkKK3sKK30KKworU3RvcmFnZU5hbWVzcGFjZVBy
b3h5Ojp+U3RvcmFnZU5hbWVzcGFjZVByb3h5KCkKK3sKK30KKworUGFzc1JlZlB0cjxTdG9yYWdl
TmFtZXNwYWNlPiBTdG9yYWdlTmFtZXNwYWNlUHJveHk6OmNvcHkoKQoreworICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgU3RvcmFnZU5hbWVzcGFjZVByb3h5KG1fc3RvcmFnZU5hbWVzcGFjZS0+Y29w
eSgpKSk7Cit9CisKK1Bhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IFN0b3JhZ2VOYW1lc3BhY2VQcm94
eTo6c3RvcmFnZUFyZWEoUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gb3JpZ2luKQoreworICAg
IHJldHVybiBhZG9wdFJlZihuZXcgU3RvcmFnZUFyZWFQcm94eShtX3N0b3JhZ2VOYW1lc3BhY2Ut
PmNyZWF0ZVN0b3JhZ2VBcmVhKG9yaWdpbi0+dG9TdHJpbmcoKSkpKTsKK30KKwordm9pZCBTdG9y
YWdlTmFtZXNwYWNlUHJveHk6OmNsb3NlKCkKK3sKKyAgICBtX3N0b3JhZ2VOYW1lc3BhY2UtPmNs
b3NlKCk7Cit9CisKK3ZvaWQgU3RvcmFnZU5hbWVzcGFjZVByb3h5Ojp1bmxvY2soKQoreworICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShET01fU1RPUkFHRSkKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9z
cmMvU3RvcmFnZU5hbWVzcGFjZVByb3h5LmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL1N0b3JhZ2VO
YW1lc3BhY2VQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmZjYy
NGIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1N0b3JhZ2VOYW1lc3Bh
Y2VQcm94eS5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29v
Z2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEdPT0dMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgR09PR0xFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFN0b3JhZ2VOYW1lc3BhY2VQcm94eV9oCisjZGVm
aW5lIFN0b3JhZ2VOYW1lc3BhY2VQcm94eV9oCisKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisK
KyNpbmNsdWRlICJTdG9yYWdlTmFtZXNwYWNlLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeyBjbGFz
cyBXZWJTdG9yYWdlTmFtZXNwYWNlOyB9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
U3RvcmFnZU5hbWVzcGFjZVByb3h5IDogcHVibGljIFN0b3JhZ2VOYW1lc3BhY2UgeworcHVibGlj
OgorICAgIFN0b3JhZ2VOYW1lc3BhY2VQcm94eShXZWJLaXQ6OldlYlN0b3JhZ2VOYW1lc3BhY2Uq
IHN0b3JhZ2VOYW1lc3BhY2UpOworICAgIHZpcnR1YWwgflN0b3JhZ2VOYW1lc3BhY2VQcm94eSgp
OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWEoUGFzc1Jl
ZlB0cjxTZWN1cml0eU9yaWdpbj4pOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTdG9yYWdlTmFt
ZXNwYWNlPiBjb3B5KCk7CisgICAgdmlydHVhbCB2b2lkIGNsb3NlKCk7CisgICAgdmlydHVhbCB2
b2lkIHVubG9jaygpOworCitwcml2YXRlOgorICAgIE93blB0cjxXZWJLaXQ6OldlYlN0b3JhZ2VO
YW1lc3BhY2U+IG1fc3RvcmFnZU5hbWVzcGFjZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShET01fU1RPUkFHRSkKKworI2VuZGlmIC8vIFN0b3JhZ2VO
YW1lc3BhY2VQcm94eV9o
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42839</attachid>
            <date>2009-11-09 19:05:47 -0800</date>
            <delta_ts>2009-11-10 11:37:48 -0800</delta_ts>
            <desc>Up-streaming Chromium API src files: WrapperResourceRequest and Response</desc>
            <filename>bug-31276-20091109190546.patch</filename>
            <type>text/plain</type>
            <size>7328</size>
            <attacher name="Yaar Schnitman">yaar</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IDg1Yjk4YzEuLmYxNzczMWEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMiw2ICsy
LDI1IEBACiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAKKyAgICAgICAg
VXAtc3RyZWFtaW5nIENocm9taXVtIEFQSSBzcmMgZmlsZXM6IFdyYXBwZXJSZXNvdXJjZVJlcXVl
c3QgYW5kIFJlc3BvbnNlCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTMxMjc2CisKKyAgICAgICAgKiBzcmMvV3JhcHBlZFJlc291cmNlUmVxdWVzdC5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V3JhcHBlZFJlc291cmNlUmVxdWVzdDo6fldyYXBw
ZWRSZXNvdXJjZVJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpXcmFwcGVkUmVzb3VyY2VSZXF1
ZXN0OjpXcmFwcGVkUmVzb3VyY2VSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6V3JhcHBlZFJl
c291cmNlUmVxdWVzdDo6YmluZCk6CisgICAgICAgIChXZWJLaXQ6OldyYXBwZWRSZXNvdXJjZVJl
cXVlc3Q6OkhhbmRsZTo6ZGlzcG9zZSk6CisgICAgICAgICogc3JjL1dyYXBwZWRSZXNvdXJjZVJl
c3BvbnNlLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXcmFwcGVkUmVzb3VyY2VSZXNwb25z
ZTo6fldyYXBwZWRSZXNvdXJjZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYktpdDo6V3JhcHBlZFJl
c291cmNlUmVzcG9uc2U6OldyYXBwZWRSZXNvdXJjZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYktp
dDo6V3JhcHBlZFJlc291cmNlUmVzcG9uc2U6OmJpbmQpOgorICAgICAgICAoV2ViS2l0OjpXcmFw
cGVkUmVzb3VyY2VSZXNwb25zZTo6SGFuZGxlOjpkaXNwb3NlKToKKworMjAwOS0xMS0wOSAgWWFh
ciBTY2huaXRtYW4gIDx5YWFyQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKwogICAgICAgICBVcC1zdHJlYW1pbmcgQ2hyb21pdW0gQVBJIHNyYyBm
aWxlczogU3RvcmFnZVN0cmVhbUhhbmRsZXJzLi4uU3RvcmFnZU5hbWVzcGFjZVByb3h5CiAKICAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMxMjc2CmRpZmYg
LS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dyYXBwZWRSZXNvdXJjZVJlcXVlc3QuaCBiL1dl
YktpdC9jaHJvbWl1bS9zcmMvV3JhcHBlZFJlc291cmNlUmVxdWVzdC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3MzExZGIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dyYXBwZWRSZXNvdXJjZVJlcXVlc3QuaApAQCAtMCwwICsxLDgyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBXcmFwcGVkUmVzb3VyY2VSZXF1ZXN0X2gKKyNkZWZpbmUgV3JhcHBlZFJlc291cmNlUmVx
dWVzdF9oCisKKy8vIEZJWE1FOiBUaGlzIHJlbGF0aXZlIHBhdGggaXMgYSB0ZW1wb3JhcnkgaGFj
ayB0byBzdXBwb3J0IHVzaW5nIHRoaXMKKy8vIGhlYWRlciBmcm9tIHdlYmtpdC9nbHVlLgorI2lu
Y2x1ZGUgIi4uL3B1YmxpYy9XZWJVUkxSZXF1ZXN0LmgiCisjaW5jbHVkZSAiV2ViVVJMUmVxdWVz
dFByaXZhdGUuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdyYXBwZWRSZXNvdXJj
ZVJlcXVlc3QgOiBwdWJsaWMgV2ViVVJMUmVxdWVzdCB7CitwdWJsaWM6CisgICAgfldyYXBwZWRS
ZXNvdXJjZVJlcXVlc3QoKQorICAgIHsKKyAgICAgICAgcmVzZXQoKTsgLy8gTmVlZCB0byBkcm9w
IHJlZmVyZW5jZSB0byBtX2hhbmRsZQorICAgIH0KKworICAgIFdyYXBwZWRSZXNvdXJjZVJlcXVl
c3QoKSB7IH0KKworICAgIFdyYXBwZWRSZXNvdXJjZVJlcXVlc3QoV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QpCisgICAgeworICAgICAgICBiaW5kKHJlc291cmNlUmVx
dWVzdCk7CisgICAgfQorCisgICAgV3JhcHBlZFJlc291cmNlUmVxdWVzdChjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCkKKyAgICB7CisgICAgICAgIGJpbmQo
cmVzb3VyY2VSZXF1ZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGJpbmQoV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QpCisgICAgeworICAgICAgICBtX2hhbmRsZS5tX3Jl
c291cmNlUmVxdWVzdCA9ICZyZXNvdXJjZVJlcXVlc3Q7CisgICAgICAgIGFzc2lnbigmbV9oYW5k
bGUpOworICAgIH0KKworICAgIHZvaWQgYmluZChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmIHJlc291cmNlUmVxdWVzdCkKKyAgICB7CisgICAgICAgIGJpbmQoKmNvbnN0X2Nhc3Q8V2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0Kj4oJnJlc291cmNlUmVxdWVzdCkpOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBjbGFzcyBIYW5kbGUgOiBwdWJsaWMgV2ViVVJMUmVxdWVzdFByaXZhdGUgewor
ICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpc3Bvc2UoKSB7IG1fcmVzb3VyY2VS
ZXF1ZXN0ID0gMDsgfQorICAgIH07CisKKyAgICBIYW5kbGUgbV9oYW5kbGU7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dyYXBwZWRSZXNvdXJjZVJlc3BvbnNlLmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dyYXBw
ZWRSZXNvdXJjZVJlc3BvbnNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
YWY0Zjg4ZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV3JhcHBlZFJl
c291cmNlUmVzcG9uc2UuaApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXcmFwcGVkUmVzb3VyY2VS
ZXNwb25zZV9oCisjZGVmaW5lIFdyYXBwZWRSZXNvdXJjZVJlc3BvbnNlX2gKKworLy8gRklYTUU6
IFRoaXMgcmVsYXRpdmUgcGF0aCBpcyBhIHRlbXBvcmFyeSBoYWNrIHRvIHN1cHBvcnQgdXNpbmcg
dGhpcworLy8gaGVhZGVyIGZyb20gd2Via2l0L2dsdWUuCisjaW5jbHVkZSAiLi4vcHVibGljL1dl
YlVSTFJlc3BvbnNlLmgiCisjaW5jbHVkZSAiV2ViVVJMUmVzcG9uc2VQcml2YXRlLmgiCisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXcmFwcGVkUmVzb3VyY2VSZXNwb25zZSA6IHB1Ymxp
YyBXZWJVUkxSZXNwb25zZSB7CitwdWJsaWM6CisgICAgfldyYXBwZWRSZXNvdXJjZVJlc3BvbnNl
KCkKKyAgICB7CisgICAgICAgIHJlc2V0KCk7IC8vIE5lZWQgdG8gZHJvcCByZWZlcmVuY2UgdG8g
bV9oYW5kbGUKKyAgICB9CisKKyAgICBXcmFwcGVkUmVzb3VyY2VSZXNwb25zZSgpIHsgfQorCisg
ICAgV3JhcHBlZFJlc291cmNlUmVzcG9uc2UoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVz
b3VyY2VSZXNwb25zZSkKKyAgICB7CisgICAgICAgIGJpbmQocmVzb3VyY2VSZXNwb25zZSk7Cisg
ICAgfQorCisgICAgV3JhcHBlZFJlc291cmNlUmVzcG9uc2UoY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXNwb25zZSYgcmVzb3VyY2VSZXNwb25zZSkKKyAgICB7CisgICAgICAgIGJpbmQocmVzb3Vy
Y2VSZXNwb25zZSk7CisgICAgfQorCisgICAgdm9pZCBiaW5kKFdlYkNvcmU6OlJlc291cmNlUmVz
cG9uc2UmIHJlc291cmNlUmVzcG9uc2UpCisgICAgeworICAgICAgICBtX2hhbmRsZS5tX3Jlc291
cmNlUmVzcG9uc2UgPSAmcmVzb3VyY2VSZXNwb25zZTsKKyAgICAgICAgYXNzaWduKCZtX2hhbmRs
ZSk7CisgICAgfQorCisgICAgdm9pZCBiaW5kKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9u
c2UmIHJlc291cmNlUmVzcG9uc2UpCisgICAgeworICAgICAgICBiaW5kKCpjb25zdF9jYXN0PFdl
YkNvcmU6OlJlc291cmNlUmVzcG9uc2UqPigmcmVzb3VyY2VSZXNwb25zZSkpOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBjbGFzcyBIYW5kbGUgOiBwdWJsaWMgV2ViVVJMUmVzcG9uc2VQcml2YXRl
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwb3NlKCkgeyBtX3Jlc291
cmNlUmVzcG9uc2UgPSAwOyB9CisgICAgfTsKKworICAgIEhhbmRsZSBtX2hhbmRsZTsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWY=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42840</attachid>
            <date>2009-11-09 19:07:23 -0800</date>
            <delta_ts>2009-11-10 11:45:20 -0800</delta_ts>
            <desc>Up-streaming Chromium API src files: Platform specific files.</desc>
            <filename>bug-31276-20091109190721.patch</filename>
            <type>text/plain</type>
            <size>98615</size>
            <attacher name="Yaar Schnitman">yaar</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IGYxNzczMWEuLjZlZDEwMzAgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMiw2ICsy
LDYwIEBACiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAKKyAgICAgICAg
VXAtc3RyZWFtaW5nIENocm9taXVtIEFQSSBzcmMgZmlsZXM6IFBsYXRmb3JtIHNwZWNpZmljIGZp
bGVzLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0z
MTI3NgorCisgICAgICAgICogc3JjL2d0ay9XZWJGb250SW5mby5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJGb250SW5mbzo6ZmFtaWx5Rm9yQ2hhcnMpOgorICAgICAgICAqIHNyYy9n
dGsvV2ViSW5wdXRFdmVudEZhY3RvcnkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6Z2Rr
RXZlbnRUaW1lVG9XZWJFdmVudFRpbWUpOgorICAgICAgICAoV2ViS2l0OjpnZGtTdGF0ZVRvV2Vi
RXZlbnRNb2RpZmllcnMpOgorICAgICAgICAoV2ViS2l0OjpnZGtFdmVudFRvV2luZG93c0tleUNv
ZGUpOgorICAgICAgICAoV2ViS2l0OjpnZXRDb250cm9sQ2hhcmFjdGVyKToKKyAgICAgICAgKFdl
YktpdDo6V2ViSW5wdXRFdmVudEZhY3Rvcnk6OmtleWJvYXJkRXZlbnQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJJbnB1dEV2ZW50RmFjdG9yeTo6bW91c2VFdmVudCk6CisgICAgICAgIChXZWJLaXQ6
OldlYklucHV0RXZlbnRGYWN0b3J5Ojptb3VzZVdoZWVsRXZlbnQpOgorICAgICAgICAqIHNyYy9n
dGsvV2ViU2NyZWVuSW5mb0ZhY3RvcnkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vi
U2NyZWVuSW5mb0ZhY3Rvcnk6OnNjcmVlbkluZm8pOgorICAgICAgICAqIHNyYy9saW51eC9XZWJG
b250UmVuZGVyaW5nLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkZvbnRSZW5kZXJp
bmc6OnNldEhpbnRpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJGb250UmVuZGVyaW5nOjpzZXRB
bnRpQWxpYXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJGb250UmVuZGVyaW5nOjpzZXRTdWJwaXhl
bEdseXBocyk6CisgICAgICAgIChXZWJLaXQ6OldlYkZvbnRSZW5kZXJpbmc6OnNldExDRE9yZGVy
KToKKyAgICAgICAgKFdlYktpdDo6V2ViRm9udFJlbmRlcmluZzo6c2V0TENET3JpZW50YXRpb24p
OgorICAgICAgICAqIHNyYy9tYWMvV2ViSW5wdXRFdmVudEZhY3RvcnkubW06IEFkZGVkLgorICAg
ICAgICAoV2ViS2l0Ojppc0tleVVwRXZlbnQpOgorICAgICAgICAoV2ViS2l0Ojppc0tleXBhZEV2
ZW50KToKKyAgICAgICAgKFdlYktpdDo6d2luZG93c0tleUNvZGVGb3JLZXlFdmVudCk6CisgICAg
ICAgIChXZWJLaXQ6OnRleHRGcm9tRXZlbnQpOgorICAgICAgICAoV2ViS2l0Ojp1bm1vZGlmaWVk
VGV4dEZyb21FdmVudCk6CisgICAgICAgIChXZWJLaXQ6OmtleUlkZW50aWZpZXJGb3JLZXlFdmVu
dCk6CisgICAgICAgIChXZWJLaXQ6Om1vZGlmaWVyc0Zyb21FdmVudCk6CisgICAgICAgIChXZWJL
aXQ6OldlYklucHV0RXZlbnRGYWN0b3J5OjprZXlib2FyZEV2ZW50KToKKyAgICAgICAgKFdlYktp
dDo6V2ViSW5wdXRFdmVudEZhY3Rvcnk6Om1vdXNlRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJJbnB1dEV2ZW50RmFjdG9yeTo6bW91c2VXaGVlbEV2ZW50KToKKyAgICAgICAgKiBzcmMvbWFj
L1dlYlNjcmVlbkluZm9GYWN0b3J5Lm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6c2NyZWVu
Rm9yV2luZG93KToKKyAgICAgICAgKFdlYktpdDo6dG9Vc2VyU3BhY2UpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJTY3JlZW5JbmZvRmFjdG9yeTo6c2NyZWVuSW5mbyk6CisgICAgICAgICogc3JjL3dp
bi9XZWJJbnB1dEV2ZW50RmFjdG9yeS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0Ojppc0tl
eVBhZCk6CisgICAgICAgIChXZWJLaXQ6OldlYklucHV0RXZlbnRGYWN0b3J5OjprZXlib2FyZEV2
ZW50KToKKyAgICAgICAgKFdlYktpdDo6R2V0UmVsYXRpdmVDdXJzb3JQb3MpOgorICAgICAgICAo
V2ViS2l0OjpXZWJJbnB1dEV2ZW50RmFjdG9yeTo6cmVzZXRMYXN0Q2xpY2tTdGF0ZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYklucHV0RXZlbnRGYWN0b3J5Ojptb3VzZUV2ZW50KToKKyAgICAgICAg
KFdlYktpdDo6V2ViSW5wdXRFdmVudEZhY3Rvcnk6Om1vdXNlV2hlZWxFdmVudCk6CisgICAgICAg
ICogc3JjL3dpbi9XZWJTY3JlZW5JbmZvRmFjdG9yeS5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
S2l0Ojp0b1dlYlJlY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JlZW5JbmZvRmFjdG9yeTo6
c2NyZWVuSW5mbyk6CisgICAgICAgICogc3JjL3gxMS9XZWJTY3JlZW5JbmZvRmFjdG9yeS5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JlZW5JbmZvRmFjdG9yeTo6c2NyZWVuSW5m
byk6CisKKzIwMDktMTEtMDkgIFlhYXIgU2Nobml0bWFuICA8eWFhckBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKICAgICAgICAgVXAtc3RyZWFt
aW5nIENocm9taXVtIEFQSSBzcmMgZmlsZXM6IFdyYXBwZXJSZXNvdXJjZVJlcXVlc3QgYW5kIFJl
c3BvbnNlCiAKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTMxMjc2CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL2d0ay9XZWJGb250SW5mby5j
cHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL2d0ay9XZWJGb250SW5mby5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZlZDYxOAotLS0gL2Rldi9udWxsCisrKyBiL1dlYktp
dC9jaHJvbWl1bS9zcmMvZ3RrL1dlYkZvbnRJbmZvLmNwcApAQCAtMCwwICsxLDEwNyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJGb250SW5mby5oIgorCisjaW5jbHVkZSA8Zm9u
dGNvbmZpZy9mb250Y29uZmlnLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5p
Y29kZS91dGYxNi5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViQ1N0cmluZyBXZWJGb250
SW5mbzo6ZmFtaWx5Rm9yQ2hhcnMoY29uc3QgV2ViVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBu
dW1DaGFyYWN0ZXJzKQoreworICAgIEZjQ2hhclNldCogY3NldCA9IEZjQ2hhclNldENyZWF0ZSgp
OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtQ2hhcmFjdGVyczsgKytpKSB7CisgICAg
ICAgIGlmIChVMTZfSVNfU1VSUk9HQVRFKGNoYXJhY3RlcnNbaV0pCisgICAgICAgICAmJiBVMTZf
SVNfU1VSUk9HQVRFX0xFQUQoY2hhcmFjdGVyc1tpXSkKKyAgICAgICAgICYmIGkgIT0gbnVtQ2hh
cmFjdGVycyAtIDEKKyAgICAgICAgICYmIFUxNl9JU19UUkFJTChjaGFyYWN0ZXJzW2kgKyAxXSkp
IHsKKyAgICAgICAgICAgICAgRmNDaGFyU2V0QWRkQ2hhcihjc2V0LCBVMTZfR0VUX1NVUFBMRU1F
TlRBUlkoY2hhcmFjdGVyc1tpXSwgY2hhcmFjdGVyc1tpKzFdKSk7CisgICAgICAgICAgaSsrOwor
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgRmNDaGFyU2V0QWRkQ2hhcihjc2V0LCBjaGFy
YWN0ZXJzW2ldKTsKKyAgICB9CisgICAgRmNQYXR0ZXJuKiBwYXR0ZXJuID0gRmNQYXR0ZXJuQ3Jl
YXRlKCk7CisKKyAgICBGY1ZhbHVlIGZjdmFsdWU7CisgICAgZmN2YWx1ZS50eXBlID0gRmNUeXBl
Q2hhclNldDsKKyAgICBmY3ZhbHVlLnUuYyA9IGNzZXQ7CisgICAgRmNQYXR0ZXJuQWRkKHBhdHRl
cm4sIEZDX0NIQVJTRVQsIGZjdmFsdWUsIDApOworCisgICAgZmN2YWx1ZS50eXBlID0gRmNUeXBl
Qm9vbDsKKyAgICBmY3ZhbHVlLnUuYiA9IEZjVHJ1ZTsKKyAgICBGY1BhdHRlcm5BZGQocGF0dGVy
biwgRkNfU0NBTEFCTEUsIGZjdmFsdWUsIDApOworCisgICAgRmNDb25maWdTdWJzdGl0dXRlKDAs
IHBhdHRlcm4sIEZjTWF0Y2hQYXR0ZXJuKTsKKyAgICBGY0RlZmF1bHRTdWJzdGl0dXRlKHBhdHRl
cm4pOworCisgICAgRmNSZXN1bHQgcmVzdWx0OworICAgIEZjRm9udFNldCogZm9udFNldCA9IEZj
Rm9udFNvcnQoMCwgcGF0dGVybiwgMCwgMCwgJnJlc3VsdCk7CisgICAgRmNQYXR0ZXJuRGVzdHJv
eShwYXR0ZXJuKTsKKyAgICBGY0NoYXJTZXREZXN0cm95KGNzZXQpOworCisgICAgaWYgKCFmb250
U2V0KQorICAgICAgICByZXR1cm4gV2ViQ1N0cmluZygpOworCisgICAgLy8gT2xkZXIgdmVyc2lv
bnMgb2YgZm9udGNvbmZpZyBoYXZlIGEgYnVnIHdoZXJlIHRoZXkgY2Fubm90IHNlbGVjdAorICAg
IC8vIG9ubHkgc2NhbGFibGUgZm9udHMgc28gd2UgaGF2ZSB0byBtYW51YWxseSBmaWx0ZXIgdGhl
IHJlc3VsdHMuCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmb250U2V0LT5uZm9udDsgKytpKSB7
CisgICAgICAgIEZjUGF0dGVybiogY3VycmVudCA9IGZvbnRTZXQtPmZvbnRzW2ldOworICAgICAg
ICBGY0Jvb2wgaXNTY2FsYWJsZTsKKworICAgICAgICBpZiAoRmNQYXR0ZXJuR2V0Qm9vbChjdXJy
ZW50LCBGQ19TQ0FMQUJMRSwgMCwgJmlzU2NhbGFibGUpICE9IEZjUmVzdWx0TWF0Y2gKKyAgICAg
ICAgICAgIHx8ICFpc1NjYWxhYmxlKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
Ly8gZm9udGNvbmZpZyBjYW4gYWxzbyByZXR1cm4gZm9udHMgd2hpY2ggYXJlIHVucmVhZGFibGUK
KyAgICAgICAgRmNDaGFyOCogY0ZpbGVuYW1lOworICAgICAgICBpZiAoRmNQYXR0ZXJuR2V0U3Ry
aW5nKGN1cnJlbnQsIEZDX0ZJTEUsIDAsICZjRmlsZW5hbWUpICE9IEZjUmVzdWx0TWF0Y2gpCisg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoYWNjZXNzKHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KGNGaWxlbmFtZSksIFJfT0spKQorICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgRmNDaGFyOCogZmFtaWx5OworICAgICAgICBXZWJDU3RyaW5nIHJlc3VsdDsKKyAgICAg
ICAgaWYgKEZjUGF0dGVybkdldFN0cmluZyhjdXJyZW50LCBGQ19GQU1JTFksIDAsICZmYW1pbHkp
ID09IEZjUmVzdWx0TWF0Y2gpIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNoYXJGYW1pbHkg
PSByZWludGVycHJldF9jYXN0PGNoYXIqPihmYW1pbHkpOworICAgICAgICAgICAgcmVzdWx0ID0g
V2ViQ1N0cmluZyhjaGFyRmFtaWx5LCBzdHJsZW4oY2hhckZhbWlseSkpOworICAgICAgICB9Cisg
ICAgICAgIEZjRm9udFNldERlc3Ryb3koZm9udFNldCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorCisgICAgRmNGb250U2V0RGVzdHJveShmb250U2V0KTsKKyAgICByZXR1cm4gV2Vi
Q1N0cmluZygpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktp
dC9jaHJvbWl1bS9zcmMvZ3RrL1dlYklucHV0RXZlbnRGYWN0b3J5LmNwcCBiL1dlYktpdC9jaHJv
bWl1bS9zcmMvZ3RrL1dlYklucHV0RXZlbnRGYWN0b3J5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi44OTA3NjdjCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9t
aXVtL3NyYy9ndGsvV2ViSW5wdXRFdmVudEZhY3RvcnkuY3BwCkBAIC0wLDAgKzEsNDczIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViSW5wdXRFdmVudEZhY3RvcnkuaCIK
KworI2luY2x1ZGUgIktleWJvYXJkQ29kZXMuaCIKKyNpbmNsdWRlICJLZXlDb2RlQ29udmVyc2lv
bi5oIgorCisjaW5jbHVkZSAiV2ViSW5wdXRFdmVudC5oIgorCisjaW5jbHVkZSA8Z2RrL2dkay5o
PgorI2luY2x1ZGUgPGdkay9nZGtrZXlzeW1zLmg+CisjaW5jbHVkZSA8Z3RrL2d0a3ZlcnNpb24u
aD4KKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitzdGF0aWMgZG91YmxlIGdka0V2ZW50VGltZVRvV2ViRXZlbnRUaW1lKGd1aW50MzIgdGltZSkK
K3sKKyAgICAvLyBDb252ZXJ0IGZyb20gdGltZSBpbiBtcyB0byB0aW1lIGluIHNlYy4KKyAgICBy
ZXR1cm4gdGltZSAvIDEwMDAuMDsKK30KKworc3RhdGljIGludCBnZGtTdGF0ZVRvV2ViRXZlbnRN
b2RpZmllcnMoZ3VpbnQgc3RhdGUpCit7CisgICAgaW50IG1vZGlmaWVycyA9IDA7CisgICAgaWYg
KHN0YXRlICYgR0RLX1NISUZUX01BU0spCisgICAgICAgIG1vZGlmaWVycyB8PSBXZWJJbnB1dEV2
ZW50OjpTaGlmdEtleTsKKyAgICBpZiAoc3RhdGUgJiBHREtfQ09OVFJPTF9NQVNLKQorICAgICAg
ICBtb2RpZmllcnMgfD0gV2ViSW5wdXRFdmVudDo6Q29udHJvbEtleTsKKyAgICBpZiAoc3RhdGUg
JiBHREtfTU9EMV9NQVNLKQorICAgICAgICBtb2RpZmllcnMgfD0gV2ViSW5wdXRFdmVudDo6QWx0
S2V5OworI2lmIEdUS19DSEVDS19WRVJTSU9OKDIsIDEwLCAwKQorICAgIGlmIChzdGF0ZSAmIEdE
S19NRVRBX01BU0spCisgICAgICAgIG1vZGlmaWVycyB8PSBXZWJJbnB1dEV2ZW50OjpNZXRhS2V5
OworI2VuZGlmCisgICAgaWYgKHN0YXRlICYgR0RLX0JVVFRPTjFfTUFTSykKKyAgICAgICAgbW9k
aWZpZXJzIHw9IFdlYklucHV0RXZlbnQ6OkxlZnRCdXR0b25Eb3duOworICAgIGlmIChzdGF0ZSAm
IEdES19CVVRUT04yX01BU0spCisgICAgICAgIG1vZGlmaWVycyB8PSBXZWJJbnB1dEV2ZW50OjpN
aWRkbGVCdXR0b25Eb3duOworICAgIGlmIChzdGF0ZSAmIEdES19CVVRUT04zX01BU0spCisgICAg
ICAgIG1vZGlmaWVycyB8PSBXZWJJbnB1dEV2ZW50OjpSaWdodEJ1dHRvbkRvd247CisgICAgcmV0
dXJuIG1vZGlmaWVyczsKK30KKworc3RhdGljIGludCBnZGtFdmVudFRvV2luZG93c0tleUNvZGUo
Y29uc3QgR2RrRXZlbnRLZXkqIGV2ZW50KQoreworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBp
bnQgaGFyZHdhcmVDb2RlVG9HREtLZXl2YWxbXSA9IHsKKyAgICAgICAgMCwgICAgICAgICAgICAg
ICAgIC8vIDB4MDA6CisgICAgICAgIDAsICAgICAgICAgICAgICAgICAvLyAweDAxOgorICAgICAg
ICAwLCAgICAgICAgICAgICAgICAgLy8gMHgwMjoKKyAgICAgICAgMCwgICAgICAgICAgICAgICAg
IC8vIDB4MDM6CisgICAgICAgIDAsICAgICAgICAgICAgICAgICAvLyAweDA0OgorICAgICAgICAw
LCAgICAgICAgICAgICAgICAgLy8gMHgwNToKKyAgICAgICAgMCwgICAgICAgICAgICAgICAgIC8v
IDB4MDY6CisgICAgICAgIDAsICAgICAgICAgICAgICAgICAvLyAweDA3OgorICAgICAgICAwLCAg
ICAgICAgICAgICAgICAgLy8gMHgwODoKKyAgICAgICAgMCwgICAgICAgICAgICAgICAgIC8vIDB4
MDk6IEdES19Fc2NhcGUKKyAgICAgICAgR0RLXzEsICAgICAgICAgICAgIC8vIDB4MEE6IEdES18x
CisgICAgICAgIEdES18yLCAgICAgICAgICAgICAvLyAweDBCOiBHREtfMgorICAgICAgICBHREtf
MywgICAgICAgICAgICAgLy8gMHgwQzogR0RLXzMKKyAgICAgICAgR0RLXzQsICAgICAgICAgICAg
IC8vIDB4MEQ6IEdES180CisgICAgICAgIEdES181LCAgICAgICAgICAgICAvLyAweDBFOiBHREtf
NQorICAgICAgICBHREtfNiwgICAgICAgICAgICAgLy8gMHgwRjogR0RLXzYKKyAgICAgICAgR0RL
XzcsICAgICAgICAgICAgIC8vIDB4MTA6IEdES183CisgICAgICAgIEdES184LCAgICAgICAgICAg
ICAvLyAweDExOiBHREtfOAorICAgICAgICBHREtfOSwgICAgICAgICAgICAgLy8gMHgxMjogR0RL
XzkKKyAgICAgICAgR0RLXzAsICAgICAgICAgICAgIC8vIDB4MTM6IEdES18wCisgICAgICAgIEdE
S19taW51cywgICAgICAgICAvLyAweDE0OiBHREtfbWludXMKKyAgICAgICAgR0RLX2VxdWFsLCAg
ICAgICAgIC8vIDB4MTU6IEdES19lcXVhbAorICAgICAgICAwLCAgICAgICAgICAgICAgICAgLy8g
MHgxNjogR0RLX0JhY2tTcGFjZQorICAgICAgICAwLCAgICAgICAgICAgICAgICAgLy8gMHgxNzog
R0RLX1RhYgorICAgICAgICBHREtfcSwgICAgICAgICAgICAgLy8gMHgxODogR0RLX3EKKyAgICAg
ICAgR0RLX3csICAgICAgICAgICAgIC8vIDB4MTk6IEdES193CisgICAgICAgIEdES19lLCAgICAg
ICAgICAgICAvLyAweDFBOiBHREtfZQorICAgICAgICBHREtfciwgICAgICAgICAgICAgLy8gMHgx
QjogR0RLX3IKKyAgICAgICAgR0RLX3QsICAgICAgICAgICAgIC8vIDB4MUM6IEdES190CisgICAg
ICAgIEdES195LCAgICAgICAgICAgICAvLyAweDFEOiBHREtfeQorICAgICAgICBHREtfdSwgICAg
ICAgICAgICAgLy8gMHgxRTogR0RLX3UKKyAgICAgICAgR0RLX2ksICAgICAgICAgICAgIC8vIDB4
MUY6IEdES19pCisgICAgICAgIEdES19vLCAgICAgICAgICAgICAvLyAweDIwOiBHREtfbworICAg
ICAgICBHREtfcCwgICAgICAgICAgICAgLy8gMHgyMTogR0RLX3AKKyAgICAgICAgR0RLX2JyYWNr
ZXRsZWZ0LCAgIC8vIDB4MjI6IEdES19icmFja2V0bGVmdAorICAgICAgICBHREtfYnJhY2tldHJp
Z2h0LCAgLy8gMHgyMzogR0RLX2JyYWNrZXRyaWdodAorICAgICAgICAwLCAgICAgICAgICAgICAg
ICAgLy8gMHgyNDogR0RLX1JldHVybgorICAgICAgICAwLCAgICAgICAgICAgICAgICAgLy8gMHgy
NTogR0RLX0NvbnRyb2xfTAorICAgICAgICBHREtfYSwgICAgICAgICAgICAgLy8gMHgyNjogR0RL
X2EKKyAgICAgICAgR0RLX3MsICAgICAgICAgICAgIC8vIDB4Mjc6IEdES19zCisgICAgICAgIEdE
S19kLCAgICAgICAgICAgICAvLyAweDI4OiBHREtfZAorICAgICAgICBHREtfZiwgICAgICAgICAg
ICAgLy8gMHgyOTogR0RLX2YKKyAgICAgICAgR0RLX2csICAgICAgICAgICAgIC8vIDB4MkE6IEdE
S19nCisgICAgICAgIEdES19oLCAgICAgICAgICAgICAvLyAweDJCOiBHREtfaAorICAgICAgICBH
REtfaiwgICAgICAgICAgICAgLy8gMHgyQzogR0RLX2oKKyAgICAgICAgR0RLX2ssICAgICAgICAg
ICAgIC8vIDB4MkQ6IEdES19rCisgICAgICAgIEdES19sLCAgICAgICAgICAgICAvLyAweDJFOiBH
REtfbAorICAgICAgICBHREtfc2VtaWNvbG9uLCAgICAgLy8gMHgyRjogR0RLX3NlbWljb2xvbgor
ICAgICAgICBHREtfYXBvc3Ryb3BoZSwgICAgLy8gMHgzMDogR0RLX2Fwb3N0cm9waGUKKyAgICAg
ICAgR0RLX2dyYXZlLCAgICAgICAgIC8vIDB4MzE6IEdES19ncmF2ZQorICAgICAgICAwLCAgICAg
ICAgICAgICAgICAgLy8gMHgzMjogR0RLX1NoaWZ0X0wKKyAgICAgICAgR0RLX2JhY2tzbGFzaCwg
ICAgIC8vIDB4MzM6IEdES19iYWNrc2xhc2gKKyAgICAgICAgR0RLX3osICAgICAgICAgICAgIC8v
IDB4MzQ6IEdES196CisgICAgICAgIEdES194LCAgICAgICAgICAgICAvLyAweDM1OiBHREtfeAor
ICAgICAgICBHREtfYywgICAgICAgICAgICAgLy8gMHgzNjogR0RLX2MKKyAgICAgICAgR0RLX3Ys
ICAgICAgICAgICAgIC8vIDB4Mzc6IEdES192CisgICAgICAgIEdES19iLCAgICAgICAgICAgICAv
LyAweDM4OiBHREtfYgorICAgICAgICBHREtfbiwgICAgICAgICAgICAgLy8gMHgzOTogR0RLX24K
KyAgICAgICAgR0RLX20sICAgICAgICAgICAgIC8vIDB4M0E6IEdES19tCisgICAgICAgIEdES19j
b21tYSwgICAgICAgICAvLyAweDNCOiBHREtfY29tbWEKKyAgICAgICAgR0RLX3BlcmlvZCwgICAg
ICAgIC8vIDB4M0M6IEdES19wZXJpb2QKKyAgICAgICAgR0RLX3NsYXNoLCAgICAgICAgIC8vIDB4
M0Q6IEdES19zbGFzaAorICAgICAgICAwLCAgICAgICAgICAgICAgICAgLy8gMHgzRTogR0RLX1No
aWZ0X1IKKyAgICB9OworCisgICAgLy8gfHdpbmRvd3NLZXlDb2RlfCBoYXMgdG8gaW5jbHVkZSBh
IHZhbGlkIHZpcnR1YWwta2V5IGNvZGUgZXZlbiB3aGVuIHdlCisgICAgLy8gdXNlIG5vbi1VUyBs
YXlvdXRzLCBlLmcuIGV2ZW4gd2hlbiB3ZSB0eXBlIGFuICdBJyBrZXkgb2YgYSBVUyBrZXlib2Fy
ZAorICAgIC8vIG9uIHRoZSBIZWJyZXcgbGF5b3V0LCB8d2luZG93c0tleUNvZGV8IHNob3VsZCBi
ZSBWS19BLgorICAgIC8vIE9uIHRoZSBvdGhlciBoYW5kLCB8ZXZlbnQtPmtleXZhbHwgdmFsdWUg
ZGVwZW5kcyBvbiB0aGUgY3VycmVudAorICAgIC8vIEdka0tleW1hcCBvYmplY3QsIGkuZS4gd2hl
biB3ZSB0eXBlIGFuICdBJyBrZXkgb2YgYSBVUyBrZXlib2FyZCBvbgorICAgIC8vIHRoZSBIZWJy
ZXcgbGF5b3V0LCB8ZXZlbnQtPmtleXZhbHwgYmVjb21lcyBHREtfaGVicmV3X3NoaW4gYW5kIHRo
aXMKKyAgICAvLyBXZWJDb3JlOjp3aW5kb3dzS2V5Q29kZUZvcktleUV2ZW50KCkgY2FsbCByZXR1
cm5zIDAuCisgICAgLy8gVG8gaW1wcm92ZSBjb21wYXRpYmlsdHkgd2l0aCBXaW5kb3dzLCB3ZSB1
c2UgfGV2ZW50LT5oYXJkd2FyZV9rZXljb2RlfAorICAgIC8vIGZvciByZXRyaWV2aW5nIGl0cyBX
aW5kb3dzIGtleS1jb2RlIGZvciB0aGUga2V5cyB3aGVuIHRoZQorICAgIC8vIFdlYkNvcmU6Ondp
bmRvd3NLZXlDb2RlRm9yRXZlbnQoKSBjYWxsIHJldHVybnMgMC4KKyAgICAvLyBXZSBzaG91bGRu
J3QgdXNlIHxldmVudC0+aGFyZHdhcmVfa2V5Y29kZXwgZm9yIGtleXMgdGhhdCBHZGtLZXltYXAK
KyAgICAvLyBvYmplY3RzIGNhbm5vdCBjaGFuZ2UgYmVjYXVzZSB8ZXZlbnQtPmhhcmR3YXJlX2tl
eWNvZGV8IGRvZXNuJ3QgY2hhbmdlCisgICAgLy8gZXZlbiB3aGVuIHdlIGNoYW5nZSB0aGUgbGF5
b3V0IG9wdGlvbnMsIGUuZy4gd2hlbiB3ZSBzd2FwIGEgY29udHJvbAorICAgIC8vIGtleSBhbmQg
YSBjYXBzLWxvY2sga2V5LCBHVEsgZG9lc24ndCBzd2FwIHRoZWlyCisgICAgLy8gfGV2ZW50LT5o
YXJkd2FyZV9rZXljb2RlfCB2YWx1ZXMgYnV0IHN3YXAgdGhlaXIgfGV2ZW50LT5rZXl2YWx8IHZh
bHVlcy4KKyAgICBpbnQgd2luZG93c0tleUNvZGUgPSBXZWJDb3JlOjp3aW5kb3dzS2V5Q29kZUZv
cktleUV2ZW50KGV2ZW50LT5rZXl2YWwpOworICAgIGlmICh3aW5kb3dzS2V5Q29kZSkKKyAgICAg
ICAgcmV0dXJuIHdpbmRvd3NLZXlDb2RlOworCisgICAgY29uc3QgaW50IHRhYmxlU2l6ZSA9IHNp
emVvZihoYXJkd2FyZUNvZGVUb0dES0tleXZhbCkgLyBzaXplb2YoaGFyZHdhcmVDb2RlVG9HREtL
ZXl2YWxbMF0pOworICAgIGlmIChldmVudC0+aGFyZHdhcmVfa2V5Y29kZSA8IHRhYmxlU2l6ZSkg
eworICAgICAgICBpbnQga2V5dmFsID0gaGFyZHdhcmVDb2RlVG9HREtLZXl2YWxbZXZlbnQtPmhh
cmR3YXJlX2tleWNvZGVdOworICAgICAgICBpZiAoa2V5dmFsKQorICAgICAgICAgICAgcmV0dXJu
IFdlYkNvcmU6OndpbmRvd3NLZXlDb2RlRm9yS2V5RXZlbnQoa2V5dmFsKTsKKyAgICB9CisKKyAg
ICAvLyBUaGlzIGtleSBpcyBvbmUgdGhhdCBrZXlib2FyZC1sYXlvdXQgZHJpdmVycyBjYW5ub3Qg
Y2hhbmdlLgorICAgIC8vIFVzZSB8ZXZlbnQtPmtleXZhbHwgdG8gcmV0cmlldmUgaXRzIHx3aW5k
b3dzS2V5Q29kZXwgdmFsdWUuCisgICAgcmV0dXJuIFdlYkNvcmU6OndpbmRvd3NLZXlDb2RlRm9y
S2V5RXZlbnQoZXZlbnQtPmtleXZhbCk7Cit9CisKKy8vIEdldHMgdGhlIGNvcnJlc3BvbmRpbmcg
Y29udHJvbCBjaGFyYWN0ZXIgb2YgYSBzcGVjaWZpZWQga2V5IGNvZGUuIFNlZToKKy8vIGh0dHA6
Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ29udHJvbF9jaGFyYWN0ZXJzCisvLyBXZSBlbXVsYXRl
IFdpbmRvd3MgYmVoYXZpb3IgaGVyZS4KK3N0YXRpYyBXZWJVQ2hhciBnZXRDb250cm9sQ2hhcmFj
dGVyKGludCB3aW5kb3dzS2V5Q29kZSwgYm9vbCBzaGlmdCkKK3sKKyAgICBpZiAod2luZG93c0tl
eUNvZGUgPj0gV2ViQ29yZTo6VktFWV9BICYmIHdpbmRvd3NLZXlDb2RlIDw9IFdlYkNvcmU6OlZL
RVlfWikgeworICAgICAgICAvLyBjdHJsLUEgfiBjdHJsLVogbWFwIHRvIFx4MDEgfiBceDFBCisg
ICAgICAgIHJldHVybiB3aW5kb3dzS2V5Q29kZSAtIFdlYkNvcmU6OlZLRVlfQSArIDE7CisgICAg
fQorICAgIGlmIChzaGlmdCkgeworICAgICAgICAvLyBmb2xsb3dpbmcgZ3JhcGhpY3MgY2hhcnMg
cmVxdWlyZSBzaGlmdCBrZXkgdG8gaW5wdXQuCisgICAgICAgIHN3aXRjaCAod2luZG93c0tleUNv
ZGUpIHsKKyAgICAgICAgLy8gY3RybC1AIG1hcHMgdG8gXHgwMCAoTnVsbCBieXRlKQorICAgICAg
ICBjYXNlIFdlYkNvcmU6OlZLRVlfMjoKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAv
LyBjdHJsLV4gbWFwcyB0byBceDFFIChSZWNvcmQgc2VwYXJhdG9yLCBJbmZvcm1hdGlvbiBzZXBh
cmF0b3IgdHdvKQorICAgICAgICBjYXNlIFdlYkNvcmU6OlZLRVlfNjoKKyAgICAgICAgICAgIHJl
dHVybiAweDFFOworICAgICAgICAvLyBjdHJsLV8gbWFwcyB0byBceDFGIChVbml0IHNlcGFyYXRv
ciwgSW5mb3JtYXRpb24gc2VwYXJhdG9yIG9uZSkKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpWS0VZ
X09FTV9NSU5VUzoKKyAgICAgICAgICAgIHJldHVybiAweDFGOworICAgICAgICAvLyBSZXR1cm5z
IDAgZm9yIGFsbCBvdGhlciBrZXlzIHRvIGF2b2lkIGlucHV0dGluZyB1bmV4cGVjdGVkIGNoYXJz
LgorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgeworICAgICAgICBzd2l0Y2ggKHdpbmRvd3NLZXlDb2RlKSB7CisgICAgICAgIC8v
IGN0cmwtWyBtYXBzIHRvIFx4MUIgKEVzY2FwZSkKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpWS0VZ
X09FTV80OgorICAgICAgICAgICAgcmV0dXJuIDB4MUI7CisgICAgICAgIC8vIGN0cmwtXCBtYXBz
IHRvIFx4MUMgKEZpbGUgc2VwYXJhdG9yLCBJbmZvcm1hdGlvbiBzZXBhcmF0b3IgZm91cikKKyAg
ICAgICAgY2FzZSBXZWJDb3JlOjpWS0VZX09FTV81OgorICAgICAgICAgICAgcmV0dXJuIDB4MUM7
CisgICAgICAgIC8vIGN0cmwtXSBtYXBzIHRvIFx4MUQgKEdyb3VwIHNlcGFyYXRvciwgSW5mb3Jt
YXRpb24gc2VwYXJhdG9yIHRocmVlKQorICAgICAgICBjYXNlIFdlYkNvcmU6OlZLRVlfT0VNXzY6
CisgICAgICAgICAgICByZXR1cm4gMHgxRDsKKyAgICAgICAgLy8gY3RybC1FbnRlciBtYXBzIHRv
IFx4MEEgKExpbmUgZmVlZCkKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpWS0VZX1JFVFVSTjoKKyAg
ICAgICAgICAgIHJldHVybiAweDBBOworICAgICAgICAvLyBSZXR1cm5zIDAgZm9yIGFsbCBvdGhl
ciBrZXlzIHRvIGF2b2lkIGlucHV0dGluZyB1bmV4cGVjdGVkIGNoYXJzLgorICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8vIFdl
YktleWJvYXJkRXZlbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKworV2ViS2V5Ym9hcmRFdmVudCBXZWJJbnB1dEV2ZW50RmFjdG9y
eTo6a2V5Ym9hcmRFdmVudChjb25zdCBHZGtFdmVudEtleSogZXZlbnQpCit7CisgICAgV2ViS2V5
Ym9hcmRFdmVudCByZXN1bHQ7CisKKyAgICByZXN1bHQudGltZVN0YW1wU2Vjb25kcyA9IGdka0V2
ZW50VGltZVRvV2ViRXZlbnRUaW1lKGV2ZW50LT50aW1lKTsKKyAgICByZXN1bHQubW9kaWZpZXJz
ID0gZ2RrU3RhdGVUb1dlYkV2ZW50TW9kaWZpZXJzKGV2ZW50LT5zdGF0ZSk7CisKKyAgICBzd2l0
Y2ggKGV2ZW50LT50eXBlKSB7CisgICAgY2FzZSBHREtfS0VZX1JFTEVBU0U6CisgICAgICAgIHJl
c3VsdC50eXBlID0gV2ViSW5wdXRFdmVudDo6S2V5VXA7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgR0RLX0tFWV9QUkVTUzoKKyAgICAgICAgcmVzdWx0LnR5cGUgPSBXZWJJbnB1dEV2ZW50OjpS
YXdLZXlEb3duOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICAvLyBBY2NvcmRpbmcgdG8gTVNETjoKKyAgICAv
LyBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM2NDYyODYoVlMuODUp
LmFzcHgKKyAgICAvLyBLZXkgZXZlbnRzIHdpdGggQWx0IG1vZGlmaWVyIGFuZCBGMTAgYXJlIHN5
c3RlbSBrZXkgZXZlbnRzLgorICAgIC8vIFdlIGp1c3QgZW11bGF0ZSB0aGlzIGJlaGF2aW9yLiBJ
dCdzIG5lY2Vzc2FyeSB0byBwcmV2ZW50IHdlYmtpdCBmcm9tCisgICAgLy8gcHJvY2Vzc2luZyBr
ZXlwcmVzcyBldmVudCBnZW5lcmF0ZWQgYnkgYWx0LWQsIGV0Yy4KKyAgICAvLyBGMTAgaXMgbm90
IHNwZWNpYWwgb24gTGludXgsIHNvIGRvbid0IHRyZWF0IGl0IGFzIHN5c3RlbSBrZXkuCisgICAg
aWYgKHJlc3VsdC5tb2RpZmllcnMgJiBXZWJJbnB1dEV2ZW50OjpBbHRLZXkpCisgICAgICAgIHJl
c3VsdC5pc1N5c3RlbUtleSA9IHRydWU7CisKKyAgICAvLyBUaGUga2V5IGNvZGUgdGVsbHMgdXMg
d2hpY2ggcGh5c2ljYWwga2V5IHdhcyBwcmVzc2VkIChmb3IgZXhhbXBsZSwgdGhlCisgICAgLy8g
QSBrZXkgd2VudCBkb3duIG9yIHVwKS4gIEl0IGRvZXMgbm90IGRldGVybWluZSB3aGV0aGVyIEEg
c2hvdWxkIGJlIGxvd2VyCisgICAgLy8gb3IgdXBwZXIgY2FzZS4gIFRoaXMgaXMgd2hhdCB0ZXh0
IGRvZXMsIHdoaWNoIHNob3VsZCBiZSB0aGUga2V5dmFsLgorICAgIHJlc3VsdC53aW5kb3dzS2V5
Q29kZSA9IGdka0V2ZW50VG9XaW5kb3dzS2V5Q29kZShldmVudCk7CisgICAgcmVzdWx0Lm5hdGl2
ZUtleUNvZGUgPSBldmVudC0+aGFyZHdhcmVfa2V5Y29kZTsKKworICAgIGlmIChyZXN1bHQud2lu
ZG93c0tleUNvZGUgPT0gV2ViQ29yZTo6VktFWV9SRVRVUk4pCisgICAgICAgIC8vIFdlIG5lZWQg
dG8gdHJlYXQgdGhlIGVudGVyIGtleSBhcyBhIGtleSBwcmVzcyBvZiBjaGFyYWN0ZXIgXHIuICBU
aGlzCisgICAgICAgIC8vIGlzIGFwcGFyZW50bHkganVzdCBob3cgd2Via2l0IGhhbmRsZXMgaXQg
YW5kIHdoYXQgaXQgZXhwZWN0cy4KKyAgICAgICAgcmVzdWx0LnVubW9kaWZpZWRUZXh0WzBdID0g
J1xyJzsKKyAgICBlbHNlCisgICAgICAgIC8vIEZJWE1FOiBmaXggZm9yIG5vbiBCTVAgY2hhcnMK
KyAgICAgICAgcmVzdWx0LnVubW9kaWZpZWRUZXh0WzBdID0KKyAgICAgICAgICAgIHN0YXRpY19j
YXN0PFdlYlVDaGFyPihnZGtfa2V5dmFsX3RvX3VuaWNvZGUoZXZlbnQtPmtleXZhbCkpOworCisg
ICAgLy8gSWYgY3RybCBrZXkgaXMgcHJlc3NlZCBkb3duLCB0aGVuIGNvbnRyb2wgY2hhcmFjdGVy
IHNoYWxsIGJlIGlucHV0LgorICAgIGlmIChyZXN1bHQubW9kaWZpZXJzICYgV2ViSW5wdXRFdmVu
dDo6Q29udHJvbEtleSkKKyAgICAgICAgcmVzdWx0LnRleHRbMF0gPSBnZXRDb250cm9sQ2hhcmFj
dGVyKAorICAgICAgICAgICAgcmVzdWx0LndpbmRvd3NLZXlDb2RlLCByZXN1bHQubW9kaWZpZXJz
ICYgV2ViSW5wdXRFdmVudDo6U2hpZnRLZXkpOworICAgIGVsc2UKKyAgICAgICAgcmVzdWx0LnRl
eHRbMF0gPSByZXN1bHQudW5tb2RpZmllZFRleHRbMF07CisKKyAgICByZXN1bHQuc2V0S2V5SWRl
bnRpZmllckZyb21XaW5kb3dzS2V5Q29kZSgpOworCisgICAgLy8gRklYTUU6IERvIHdlIG5lZWQg
dG8gc2V0IElzQXV0b1JlcGVhdCBvciBJc0tleVBhZD8KKworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK1dlYktleWJvYXJkRXZlbnQgV2ViSW5wdXRFdmVudEZhY3Rvcnk6OmtleWJvYXJkRXZlbnQo
d2NoYXJfdCBjaGFyYWN0ZXIsIGludCBzdGF0ZSwgZG91YmxlIHRpbWVTdGFtcFNlY29uZHMpCit7
CisgICAgLy8ga2V5Ym9hcmRFdmVudChjb25zdCBHZGtFdmVudEtleSopIGRlcGVuZHMgb24gdGhl
IEdka0V2ZW50S2V5IG9iamVjdCBhbmQKKyAgICAvLyBpdCBpcyBoYXJkIHRvIHVzZS8gaXQgZnJv
bSBzaWduYWwgaGFuZGxlcnMgd2hpY2ggZG9uJ3QgdXNlIEdka0V2ZW50S2V5CisgICAgLy8gb2Jq
ZWN0cyAoZS5nLiBHdGtJTUNvbnRleHQgc2lnbmFsIGhhbmRsZXJzLikgRm9yIHN1Y2ggaGFuZGxl
cnMsIHRoaXMKKyAgICAvLyBmdW5jdGlvbiBjcmVhdGVzIGEgV2ViSW5wdXRFdmVudDo6Q2hhciBl
dmVudCB3aXRob3V0IHVzaW5nIGEKKyAgICAvLyBHZGtFdmVudEtleSBvYmplY3QuCisgICAgV2Vi
S2V5Ym9hcmRFdmVudCByZXN1bHQ7CisgICAgcmVzdWx0LnR5cGUgPSBXZWJLaXQ6OldlYklucHV0
RXZlbnQ6OkNoYXI7CisgICAgcmVzdWx0LnRpbWVTdGFtcFNlY29uZHMgPSB0aW1lU3RhbXBTZWNv
bmRzOworICAgIHJlc3VsdC5tb2RpZmllcnMgPSBnZGtTdGF0ZVRvV2ViRXZlbnRNb2RpZmllcnMo
c3RhdGUpOworICAgIHJlc3VsdC53aW5kb3dzS2V5Q29kZSA9IGNoYXJhY3RlcjsKKyAgICByZXN1
bHQubmF0aXZlS2V5Q29kZSA9IGNoYXJhY3RlcjsKKyAgICByZXN1bHQudGV4dFswXSA9IGNoYXJh
Y3RlcjsKKyAgICByZXN1bHQudW5tb2RpZmllZFRleHRbMF0gPSBjaGFyYWN0ZXI7CisKKyAgICAv
LyBBY2NvcmRpbmcgdG8gTVNETjoKKyAgICAvLyBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2Vu
LXVzL2xpYnJhcnkvbXM2NDYyODYoVlMuODUpLmFzcHgKKyAgICAvLyBLZXkgZXZlbnRzIHdpdGgg
QWx0IG1vZGlmaWVyIGFuZCBGMTAgYXJlIHN5c3RlbSBrZXkgZXZlbnRzLgorICAgIC8vIFdlIGp1
c3QgZW11bGF0ZSB0aGlzIGJlaGF2aW9yLiBJdCdzIG5lY2Vzc2FyeSB0byBwcmV2ZW50IHdlYmtp
dCBmcm9tCisgICAgLy8gcHJvY2Vzc2luZyBrZXlwcmVzcyBldmVudCBnZW5lcmF0ZWQgYnkgYWx0
LWQsIGV0Yy4KKyAgICAvLyBGMTAgaXMgbm90IHNwZWNpYWwgb24gTGludXgsIHNvIGRvbid0IHRy
ZWF0IGl0IGFzIHN5c3RlbSBrZXkuCisgICAgaWYgKHJlc3VsdC5tb2RpZmllcnMgJiBXZWJJbnB1
dEV2ZW50OjpBbHRLZXkpCisgICAgICAgIHJlc3VsdC5pc1N5c3RlbUtleSA9IHRydWU7CisKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCisvLyBXZWJNb3VzZUV2ZW50IC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1dlYk1vdXNl
RXZlbnQgV2ViSW5wdXRFdmVudEZhY3Rvcnk6Om1vdXNlRXZlbnQoY29uc3QgR2RrRXZlbnRCdXR0
b24qIGV2ZW50KQoreworICAgIFdlYk1vdXNlRXZlbnQgcmVzdWx0OworCisgICAgcmVzdWx0LnRp
bWVTdGFtcFNlY29uZHMgPSBnZGtFdmVudFRpbWVUb1dlYkV2ZW50VGltZShldmVudC0+dGltZSk7
CisKKyAgICByZXN1bHQubW9kaWZpZXJzID0gZ2RrU3RhdGVUb1dlYkV2ZW50TW9kaWZpZXJzKGV2
ZW50LT5zdGF0ZSk7CisgICAgcmVzdWx0LnggPSBzdGF0aWNfY2FzdDxpbnQ+KGV2ZW50LT54KTsK
KyAgICByZXN1bHQueSA9IHN0YXRpY19jYXN0PGludD4oZXZlbnQtPnkpOworICAgIHJlc3VsdC53
aW5kb3dYID0gcmVzdWx0Lng7CisgICAgcmVzdWx0LndpbmRvd1kgPSByZXN1bHQueTsKKyAgICBy
ZXN1bHQuZ2xvYmFsWCA9IHN0YXRpY19jYXN0PGludD4oZXZlbnQtPnhfcm9vdCk7CisgICAgcmVz
dWx0Lmdsb2JhbFkgPSBzdGF0aWNfY2FzdDxpbnQ+KGV2ZW50LT55X3Jvb3QpOworICAgIHJlc3Vs
dC5jbGlja0NvdW50ID0gMDsKKworICAgIHN3aXRjaCAoZXZlbnQtPnR5cGUpIHsKKyAgICBjYXNl
IEdES18zQlVUVE9OX1BSRVNTOgorICAgICAgICArK3Jlc3VsdC5jbGlja0NvdW50OworICAgICAg
ICAvLyBmYWxsdGhyb3VnaAorICAgIGNhc2UgR0RLXzJCVVRUT05fUFJFU1M6CisgICAgICAgICsr
cmVzdWx0LmNsaWNrQ291bnQ7CisgICAgICAgIC8vIGZhbGx0aHJvdWdoCisgICAgY2FzZSBHREtf
QlVUVE9OX1BSRVNTOgorICAgICAgICByZXN1bHQudHlwZSA9IFdlYklucHV0RXZlbnQ6Ok1vdXNl
RG93bjsKKyAgICAgICAgKytyZXN1bHQuY2xpY2tDb3VudDsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBHREtfQlVUVE9OX1JFTEVBU0U6CisgICAgICAgIHJlc3VsdC50eXBlID0gV2ViSW5wdXRF
dmVudDo6TW91c2VVcDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9OworCisgICAgcmVzdWx0LmJ1dHRvbiA9IFdlYk1v
dXNlRXZlbnQ6OkJ1dHRvbk5vbmU7CisgICAgaWYgKGV2ZW50LT5idXR0b24gPT0gMSkKKyAgICAg
ICAgcmVzdWx0LmJ1dHRvbiA9IFdlYk1vdXNlRXZlbnQ6OkJ1dHRvbkxlZnQ7CisgICAgZWxzZSBp
ZiAoZXZlbnQtPmJ1dHRvbiA9PSAyKQorICAgICAgICByZXN1bHQuYnV0dG9uID0gV2ViTW91c2VF
dmVudDo6QnV0dG9uTWlkZGxlOworICAgIGVsc2UgaWYgKGV2ZW50LT5idXR0b24gPT0gMykKKyAg
ICAgICAgcmVzdWx0LmJ1dHRvbiA9IFdlYk1vdXNlRXZlbnQ6OkJ1dHRvblJpZ2h0OworCisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworV2ViTW91c2VFdmVudCBXZWJJbnB1dEV2ZW50RmFjdG9yeTo6
bW91c2VFdmVudChjb25zdCBHZGtFdmVudE1vdGlvbiogZXZlbnQpCit7CisgICAgV2ViTW91c2VF
dmVudCByZXN1bHQ7CisKKyAgICByZXN1bHQudGltZVN0YW1wU2Vjb25kcyA9IGdka0V2ZW50VGlt
ZVRvV2ViRXZlbnRUaW1lKGV2ZW50LT50aW1lKTsKKyAgICByZXN1bHQubW9kaWZpZXJzID0gZ2Rr
U3RhdGVUb1dlYkV2ZW50TW9kaWZpZXJzKGV2ZW50LT5zdGF0ZSk7CisgICAgcmVzdWx0LnggPSBz
dGF0aWNfY2FzdDxpbnQ+KGV2ZW50LT54KTsKKyAgICByZXN1bHQueSA9IHN0YXRpY19jYXN0PGlu
dD4oZXZlbnQtPnkpOworICAgIHJlc3VsdC53aW5kb3dYID0gcmVzdWx0Lng7CisgICAgcmVzdWx0
LndpbmRvd1kgPSByZXN1bHQueTsKKyAgICByZXN1bHQuZ2xvYmFsWCA9IHN0YXRpY19jYXN0PGlu
dD4oZXZlbnQtPnhfcm9vdCk7CisgICAgcmVzdWx0Lmdsb2JhbFkgPSBzdGF0aWNfY2FzdDxpbnQ+
KGV2ZW50LT55X3Jvb3QpOworCisgICAgc3dpdGNoIChldmVudC0+dHlwZSkgeworICAgIGNhc2Ug
R0RLX01PVElPTl9OT1RJRlk6CisgICAgICAgIHJlc3VsdC50eXBlID0gV2ViSW5wdXRFdmVudDo6
TW91c2VNb3ZlOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICByZXN1bHQuYnV0dG9uID0gV2ViTW91c2VFdmVu
dDo6QnV0dG9uTm9uZTsKKyAgICBpZiAoZXZlbnQtPnN0YXRlICYgR0RLX0JVVFRPTjFfTUFTSykK
KyAgICAgICAgcmVzdWx0LmJ1dHRvbiA9IFdlYk1vdXNlRXZlbnQ6OkJ1dHRvbkxlZnQ7CisgICAg
ZWxzZSBpZiAoZXZlbnQtPnN0YXRlICYgR0RLX0JVVFRPTjJfTUFTSykKKyAgICAgICAgcmVzdWx0
LmJ1dHRvbiA9IFdlYk1vdXNlRXZlbnQ6OkJ1dHRvbk1pZGRsZTsKKyAgICBlbHNlIGlmIChldmVu
dC0+c3RhdGUgJiBHREtfQlVUVE9OM19NQVNLKQorICAgICAgICByZXN1bHQuYnV0dG9uID0gV2Vi
TW91c2VFdmVudDo6QnV0dG9uUmlnaHQ7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitXZWJN
b3VzZUV2ZW50IFdlYklucHV0RXZlbnRGYWN0b3J5Ojptb3VzZUV2ZW50KGNvbnN0IEdka0V2ZW50
Q3Jvc3NpbmcqIGV2ZW50KQoreworICAgIFdlYk1vdXNlRXZlbnQgcmVzdWx0OworCisgICAgcmVz
dWx0LnRpbWVTdGFtcFNlY29uZHMgPSBnZGtFdmVudFRpbWVUb1dlYkV2ZW50VGltZShldmVudC0+
dGltZSk7CisgICAgcmVzdWx0Lm1vZGlmaWVycyA9IGdka1N0YXRlVG9XZWJFdmVudE1vZGlmaWVy
cyhldmVudC0+c3RhdGUpOworICAgIHJlc3VsdC54ID0gc3RhdGljX2Nhc3Q8aW50PihldmVudC0+
eCk7CisgICAgcmVzdWx0LnkgPSBzdGF0aWNfY2FzdDxpbnQ+KGV2ZW50LT55KTsKKyAgICByZXN1
bHQud2luZG93WCA9IHJlc3VsdC54OworICAgIHJlc3VsdC53aW5kb3dZID0gcmVzdWx0Lnk7Cisg
ICAgcmVzdWx0Lmdsb2JhbFggPSBzdGF0aWNfY2FzdDxpbnQ+KGV2ZW50LT54X3Jvb3QpOworICAg
IHJlc3VsdC5nbG9iYWxZID0gc3RhdGljX2Nhc3Q8aW50PihldmVudC0+eV9yb290KTsKKworICAg
IHN3aXRjaCAoZXZlbnQtPnR5cGUpIHsKKyAgICBjYXNlIEdES19FTlRFUl9OT1RJRlk6CisgICAg
Y2FzZSBHREtfTEVBVkVfTk9USUZZOgorICAgICAgICAvLyBOb3RlIHRoYXQgaWYgd2Ugc2VudCBN
b3VzZUVudGVyIG9yIE1vdXNlTGVhdmUgdG8gV2ViS2l0LCBpdAorICAgICAgICAvLyB3b3VsZG4n
dCB3b3JrIC0gdGhleSBkb24ndCByZXN1bHQgaW4gdGhlIHByb3BlciBKYXZhU2NyaXB0IGV2ZW50
cy4KKyAgICAgICAgLy8gTW91c2VNb3ZlIGRvZXMgdGhlIHJpZ2h0IHRoaW5nLgorICAgICAgICBy
ZXN1bHQudHlwZSA9IFdlYklucHV0RXZlbnQ6Ok1vdXNlTW92ZTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAg
cmVzdWx0LmJ1dHRvbiA9IFdlYk1vdXNlRXZlbnQ6OkJ1dHRvbk5vbmU7CisgICAgaWYgKGV2ZW50
LT5zdGF0ZSAmIEdES19CVVRUT04xX01BU0spCisgICAgICAgIHJlc3VsdC5idXR0b24gPSBXZWJN
b3VzZUV2ZW50OjpCdXR0b25MZWZ0OworICAgIGVsc2UgaWYgKGV2ZW50LT5zdGF0ZSAmIEdES19C
VVRUT04yX01BU0spCisgICAgICAgIHJlc3VsdC5idXR0b24gPSBXZWJNb3VzZUV2ZW50OjpCdXR0
b25NaWRkbGU7CisgICAgZWxzZSBpZiAoZXZlbnQtPnN0YXRlICYgR0RLX0JVVFRPTjNfTUFTSykK
KyAgICAgICAgcmVzdWx0LmJ1dHRvbiA9IFdlYk1vdXNlRXZlbnQ6OkJ1dHRvblJpZ2h0OworCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworLy8gV2ViTW91c2VXaGVlbEV2ZW50IC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXZWJNb3Vz
ZVdoZWVsRXZlbnQgV2ViSW5wdXRFdmVudEZhY3Rvcnk6Om1vdXNlV2hlZWxFdmVudChjb25zdCBH
ZGtFdmVudFNjcm9sbCogZXZlbnQpCit7CisgICAgV2ViTW91c2VXaGVlbEV2ZW50IHJlc3VsdDsK
KworICAgIHJlc3VsdC50eXBlID0gV2ViSW5wdXRFdmVudDo6TW91c2VXaGVlbDsKKyAgICByZXN1
bHQuYnV0dG9uID0gV2ViTW91c2VFdmVudDo6QnV0dG9uTm9uZTsKKworICAgIHJlc3VsdC50aW1l
U3RhbXBTZWNvbmRzID0gZ2RrRXZlbnRUaW1lVG9XZWJFdmVudFRpbWUoZXZlbnQtPnRpbWUpOwor
ICAgIHJlc3VsdC5tb2RpZmllcnMgPSBnZGtTdGF0ZVRvV2ViRXZlbnRNb2RpZmllcnMoZXZlbnQt
PnN0YXRlKTsKKyAgICByZXN1bHQueCA9IHN0YXRpY19jYXN0PGludD4oZXZlbnQtPngpOworICAg
IHJlc3VsdC55ID0gc3RhdGljX2Nhc3Q8aW50PihldmVudC0+eSk7CisgICAgcmVzdWx0LndpbmRv
d1ggPSByZXN1bHQueDsKKyAgICByZXN1bHQud2luZG93WSA9IHJlc3VsdC55OworICAgIHJlc3Vs
dC5nbG9iYWxYID0gc3RhdGljX2Nhc3Q8aW50PihldmVudC0+eF9yb290KTsKKyAgICByZXN1bHQu
Z2xvYmFsWSA9IHN0YXRpY19jYXN0PGludD4oZXZlbnQtPnlfcm9vdCk7CisKKyAgICAvLyBIb3cg
bXVjaCBzaG91bGQgd2Ugc2Nyb2xsIHBlciBtb3VzZSB3aGVlbCBldmVudD8KKyAgICAvLyAtIFdp
bmRvd3MgdXNlcyAzIGxpbmVzIGJ5IGRlZmF1bHQgYW5kIG9iZXlzIGEgc3lzdGVtIHNldHRpbmcu
CisgICAgLy8gLSBNb3ppbGxhIGhhcyBhIHByZWYgdGhhdCBsZXRzIHlvdSBlaXRoZXIgdXNlIHRo
ZSAic3lzdGVtIiBudW1iZXIgb2YgbGluZXMKKyAgICAvLyAgIHRvIHNjcm9sbCwgb3IgbGV0cyB0
aGUgdXNlciBvdmVycmlkZSBpdC4KKyAgICAvLyAgIEZvciB0aGUgInN5c3RlbSIgbnVtYmVyIG9m
IGxpbmVzLCBpdCBhcHBlYXJzIHRoZXkndmUgaGFyZGNvZGVkIDMuCisgICAgLy8gICBTZWUgY2Fz
ZSBOU19NT1VTRV9TQ1JPTEwgaW4gY29udGVudC9ldmVudHMvc3JjL25zRXZlbnRTdGF0ZU1hbmFn
ZXIuY3BwCisgICAgLy8gICBhbmQgSW5pdE1vdXNlU2Nyb2xsRXZlbnQgaW4gd2lkZ2V0L3NyYy9n
dGsyL25zQ29tbW9uV2lkZ2V0LmNwcCAuCisgICAgLy8gLSBHdGsgbWFrZXMgdGhlIHNjcm9sbCBh
bW91bnQgYSBmdW5jdGlvbiBvZiB0aGUgc2l6ZSBvZiB0aGUgc2Nyb2xsIGJhciwKKyAgICAvLyAg
IHdoaWNoIGlzIG5vdCBhdmFpbGFibGUgdG8gdXMgaGVyZS4KKyAgICAvLyBJbnN0ZWFkLCB3ZSBw
aWNrIGEgbnVtYmVyIHRoYXQgZW1waXJpY2FsbHkgbWF0Y2hlcyBGaXJlZm94J3MgYmVoYXZpb3Iu
CisgICAgc3RhdGljIGNvbnN0IGZsb2F0IHNjcm9sbGJhclBpeGVsc1BlclRpY2sgPSAxNjAuMGYg
LyAzLjBmOworCisgICAgc3dpdGNoIChldmVudC0+ZGlyZWN0aW9uKSB7CisgICAgY2FzZSBHREtf
U0NST0xMX1VQOgorICAgICAgICByZXN1bHQuZGVsdGFZID0gc2Nyb2xsYmFyUGl4ZWxzUGVyVGlj
azsKKyAgICAgICAgcmVzdWx0LndoZWVsVGlja3NZID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBHREtfU0NST0xMX0RPV046CisgICAgICAgIHJlc3VsdC5kZWx0YVkgPSAtc2Nyb2xsYmFy
UGl4ZWxzUGVyVGljazsKKyAgICAgICAgcmVzdWx0LndoZWVsVGlja3NZID0gLTE7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgR0RLX1NDUk9MTF9MRUZUOgorICAgICAgICByZXN1bHQuZGVsdGFY
ID0gc2Nyb2xsYmFyUGl4ZWxzUGVyVGljazsKKyAgICAgICAgcmVzdWx0LndoZWVsVGlja3NYID0g
LTE7ICAvLyBNYXRjaCBXaW5kb3dzIHBvc2l0aXZlL25lZ2F0aXZlIG9yaWVudGF0aW9uCisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgR0RLX1NDUk9MTF9SSUdIVDoKKyAgICAgICAgcmVzdWx0LmRl
bHRhWCA9IC1zY3JvbGxiYXJQaXhlbHNQZXJUaWNrOworICAgICAgICByZXN1bHQud2hlZWxUaWNr
c1ggPSAxOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMv
Z3RrL1dlYlNjcmVlbkluZm9GYWN0b3J5LmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvZ3RrL1dl
YlNjcmVlbkluZm9GYWN0b3J5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4wODFkYWEyCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9ndGsvV2Vi
U2NyZWVuSW5mb0ZhY3RvcnkuY3BwCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV2ViU2NyZWVuSW5mb0ZhY3RvcnkuaCIKKworI2luY2x1ZGUgIldlYlNj
cmVlbkluZm8uaCIKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitXZWJTY3JlZW5JbmZvIFdlYlNjcmVlbkluZm9GYWN0b3J5OjpzY3JlZW5JbmZvKEd0a1dpZGdl
dCogd2lkZ2V0KQoreworICAgIFdlYlNjcmVlbkluZm8gcmVzdWx0czsKKyAgICByZXN1bHRzLmRl
cHRoID0gMzI7CisgICAgcmVzdWx0cy5kZXB0aFBlckNvbXBvbmVudCA9IDg7CisgICAgcmVzdWx0
cy5pc01vbm9jaHJvbWUgPSBmYWxzZTsKKworICAgIGlmICghd2lkZ2V0KQorICAgICAgICByZXR1
cm4gcmVzdWx0czsKKworICAgIEdka1NjcmVlbiogc2NyZWVuID0gZ3RrX3dpZGdldF9nZXRfc2Ny
ZWVuKHdpZGdldCk7CisKKyAgICByZXN1bHRzLnJlY3QgPSBXZWJSZWN0KAorICAgICAgICAwLCAw
LCBnZGtfc2NyZWVuX2dldF93aWR0aChzY3JlZW4pLCBnZGtfc2NyZWVuX2dldF9oZWlnaHQoc2Ny
ZWVuKSk7CisKKyAgICAvLyBJIGRvbid0IGtub3cgb2YgYSB3YXkgdG8gcXVlcnkgdGhlICJtYXhp
bWl6ZSIgc2l6ZSBvZiB0aGUgd2luZG93IChlLmcuCisgICAgLy8gc2NyZWVuIHNpemUgbGVzcyBz
aWRlYmFycyBldGMpIHNpbmNlIHRoaXMgaXMgc29tZXRoaW5nIHdoaWNoIG9ubHkgdGhlCisgICAg
Ly8gd2luZG93IG1hbmFnZXIga25vd3MuCisgICAgcmVzdWx0cy5hdmFpbGFibGVSZWN0ID0gcmVz
dWx0cy5yZWN0OworCisgICAgcmV0dXJuIHJlc3VsdHM7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9saW51eC9XZWJGb250UmVuZGVy
aW5nLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvbGludXgvV2ViRm9udFJlbmRlcmluZy5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk4NjJmNQotLS0gL2Rldi9udWxs
CisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvbGludXgvV2ViRm9udFJlbmRlcmluZy5jcHAKQEAg
LTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJGb250UmVuZGVy
aW5nLmgiCisKKyNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCisKK3VzaW5nIFdlYkNvcmU6
OkZvbnRQbGF0Zm9ybURhdGE7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCisvLyBzdGF0aWMKK3Zv
aWQgV2ViRm9udFJlbmRlcmluZzo6c2V0SGludGluZyhTa1BhaW50OjpIaW50aW5nIGhpbnRpbmcp
Cit7CisgICAgRm9udFBsYXRmb3JtRGF0YTo6c2V0SGludGluZyhoaW50aW5nKTsKK30KKworLy8g
c3RhdGljCit2b2lkIFdlYkZvbnRSZW5kZXJpbmc6OnNldEFudGlBbGlhcyhib29sIGlzQW50aUFs
aWFzKQoreworICAgIEZvbnRQbGF0Zm9ybURhdGE6OnNldEFudGlBbGlhcyhpc0FudGlBbGlhcyk7
Cit9CisKKy8vIHN0YXRpYwordm9pZCBXZWJGb250UmVuZGVyaW5nOjpzZXRTdWJwaXhlbEdseXBo
cyhib29sIGlzU3VicGl4ZWxHbHlwaHMpCit7CisgICAgRm9udFBsYXRmb3JtRGF0YTo6c2V0U3Vi
cGl4ZWxHbHlwaHMoaXNTdWJwaXhlbEdseXBocyk7Cit9CisKKy8vIHN0YXRpYwordm9pZCBXZWJG
b250UmVuZGVyaW5nOjpzZXRMQ0RPcmRlcihTa0ZvbnRIb3N0OjpMQ0RPcmRlciBvcmRlcikKK3sK
KyAgICBTa0ZvbnRIb3N0OjpTZXRTdWJwaXhlbE9yZGVyKG9yZGVyKTsKK30KKworLy8gc3RhdGlj
Cit2b2lkIFdlYkZvbnRSZW5kZXJpbmc6OnNldExDRE9yaWVudGF0aW9uKFNrRm9udEhvc3Q6OkxD
RE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQoreworICAgIFNrRm9udEhvc3Q6OlNldFN1YnBpeGVs
T3JpZW50YXRpb24ob3JpZW50YXRpb24pOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvbWFjL1dlYklucHV0RXZlbnRGYWN0b3J5Lm1t
IGIvV2ViS2l0L2Nocm9taXVtL3NyYy9tYWMvV2ViSW5wdXRFdmVudEZhY3RvcnkubW0KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYxODIyOAotLS0gL2Rldi9udWxsCisrKyBi
L1dlYktpdC9jaHJvbWl1bS9zcmMvbWFjL1dlYklucHV0RXZlbnRGYWN0b3J5Lm1tCkBAIC0wLDAg
KzEsMTE5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOSBHb29n
bGUgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJJbnB1dEV2
ZW50RmFjdG9yeS5oIgorCisjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlv
blNlcnZpY2VzLmg+CisjaW1wb3J0IDxDb2NvYS9Db2NvYS5oPgorCisjaW5jbHVkZSAiV2ViSW5w
dXRFdmVudC5oIgorI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCisvLyBXZWJLZXlib2FyZEV2ZW50IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
Ky8vIEJlZ2luIEFwcGxlIGNvZGUsIGNvcGllZCBmcm9tIEtleUV2ZW50TWFjLm1tCisvLworLy8g
V2UgY2FuIHNoYXJlIHNvbWUgb2YgdGhpcyBjb2RlIGlmIHdlIGZhY3RvcmVkIGl0IG91dCBvZiBL
ZXlFdmVudE1hYywgYnV0CisvLyB0aGUgbWFpbiBwcm9ibGVtIGlzIHRoYXQgaXQgcmVsaWVzIG9u
IHRoZSBOU1N0cmluZyBjdG9yIG9uIFN0cmluZyBmb3IKKy8vIGNvbnZlcnNpb25zLCBhbmQgc2lu
Y2Ugd2UncmUgYnVpbGRpbmcgd2l0aG91dCBQTEFURk9STShNQUMpLCB3ZSBkb24ndCBoYXZlCisv
LyB0aGF0LiBBcyBhIHJlc3VsdCB3ZSBoYXZlIHRvIHVzZSBOU1N0cmluZyBoZXJlIGV4Y2x1c2l2
ZWx5IGFuZCB0aHVzIHR3ZWFrCisvLyB0aGUgY29kZSBzbyBpdCdzIG5vdCByZS11c2FibGUgYXMt
aXMuIE9uZSBwb3NzaWJsaXR5IHdvdWxkIGJlIHRvIG1ha2UgdGhlCisvLyB1cHN0cmVhbSBjb2Rl
IG9ubHkgdXNlIE5TU3RyaW5nLCBidXQgSSdtIG5vdCBjZXJ0YWluIGhvdyBmYXIgdGhhdCBjaGFu
Z2UKKy8vIHdvdWxkIHByb3BhZ2F0ZS4KKworc3RhdGljIGlubGluZSBib29sIGlzS2V5VXBFdmVu
dChOU0V2ZW50KiBldmVudCkKK3sKKyAgICBpZiAoW2V2ZW50IHR5cGVdICE9IE5TRmxhZ3NDaGFu
Z2VkKQorICAgICAgICByZXR1cm4gW2V2ZW50IHR5cGVdID09IE5TS2V5VXA7CisgICAgLy8gRklY
TUU6IFRoaXMgbG9naWMgZmFpbHMgaWYgdGhlIHVzZXIgcHJlc3NlcyBib3RoIFNoaWZ0IGtleXMg
YXQgb25jZSwgZm9yIGV4YW1wbGU6CisgICAgLy8gd2UgdHJlYXQgcmVsZWFzaW5nIG9uZSBvZiB0
aGVtIGFzIGtleURvd24uCisgICAgc3dpdGNoIChbZXZlbnQga2V5Q29kZV0pIHsKKyAgICBjYXNl
IDU0OiAvLyBSaWdodCBDb21tYW5kCisgICAgY2FzZSA1NTogLy8gTGVmdCBDb21tYW5kCisgICAg
ICAgIHJldHVybiAoW2V2ZW50IG1vZGlmaWVyRmxhZ3NdICYgTlNDb21tYW5kS2V5TWFzaykgPT0g
MDsKKworICAgIGNhc2UgNTc6IC8vIENhcHNsb2NrCisgICAgICAgIHJldHVybiAoW2V2ZW50IG1v
ZGlmaWVyRmxhZ3NdICYgTlNBbHBoYVNoaWZ0S2V5TWFzaykgPT0gMDsKKworICAgIGNhc2UgNTY6
IC8vIExlZnQgU2hpZnQKKyAgICBjYXNlIDYwOiAvLyBSaWdodCBTaGlmdAorICAgICAgICByZXR1
cm4gKFtldmVudCBtb2RpZmllckZsYWdzXSAmIE5TU2hpZnRLZXlNYXNrKSA9PSAwOworCisgICAg
Y2FzZSA1ODogLy8gTGVmdCBBbHQKKyAgICBjYXNlIDYxOiAvLyBSaWdodCBBbHQKKyAgICAgICAg
cmV0dXJuIChbZXZlbnQgbW9kaWZpZXJGbGFnc10gJiBOU0FsdGVybmF0ZUtleU1hc2spID09IDA7
CisKKyAgICBjYXNlIDU5OiAvLyBMZWZ0IEN0cmwKKyAgICBjYXNlIDYyOiAvLyBSaWdodCBDdHJs
CisgICAgICAgIHJldHVybiAoW2V2ZW50IG1vZGlmaWVyRmxhZ3NdICYgTlNDb250cm9sS2V5TWFz
aykgPT0gMDsKKworICAgIGNhc2UgNjM6IC8vIEZ1bmN0aW9uCisgICAgICAgIHJldHVybiAoW2V2
ZW50IG1vZGlmaWVyRmxhZ3NdICYgTlNGdW5jdGlvbktleU1hc2spID09IDA7CisgICAgfQorICAg
IHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wgaXNLZXlwYWRFdmVudChOU0V2ZW50KiBl
dmVudCkKK3sKKyAgICAvLyBDaGVjayB0aGF0IHRoaXMgaXMgdGhlIHR5cGUgb2YgZXZlbnQgdGhh
dCBoYXMgYSBrZXlDb2RlLgorICAgIHN3aXRjaCAoW2V2ZW50IHR5cGVdKSB7CisgICAgY2FzZSBO
U0tleURvd246CisgICAgY2FzZSBOU0tleVVwOgorICAgIGNhc2UgTlNGbGFnc0NoYW5nZWQ6Cisg
ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBzd2l0Y2ggKFtldmVudCBrZXlDb2RlXSkgeworICAgIGNhc2UgNzE6IC8vIENsZWFy
CisgICAgY2FzZSA4MTogLy8gPQorICAgIGNhc2UgNzU6IC8vIC8KKyAgICBjYXNlIDY3OiAvLyAq
CisgICAgY2FzZSA3ODogLy8gLQorICAgIGNhc2UgNjk6IC8vICsKKyAgICBjYXNlIDc2OiAvLyBF
bnRlcgorICAgIGNhc2UgNjU6IC8vIC4KKyAgICBjYXNlIDgyOiAvLyAwCisgICAgY2FzZSA4Mzog
Ly8gMQorICAgIGNhc2UgODQ6IC8vIDIKKyAgICBjYXNlIDg1OiAvLyAzCisgICAgY2FzZSA4Njog
Ly8gNAorICAgIGNhc2UgODc6IC8vIDUKKyAgICBjYXNlIDg4OiAvLyA2CisgICAgY2FzZSA4OTog
Ly8gNworICAgIGNhc2UgOTE6IC8vIDgKKyAgICBjYXNlIDkyOiAvLyA5CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGludCB3aW5k
b3dzS2V5Q29kZUZvcktleUV2ZW50KE5TRXZlbnQqIGV2ZW50KQoreworICAgIHN3aXRjaCAoW2V2
ZW50IGtleUNvZGVdKSB7CisgICAgLy8gVktfVEFCICgwOSkgVEFCIGtleQorICAgIGNhc2UgNDg6
CisgICAgICAgIHJldHVybiAweDA5OworCisgICAgLy8gVktfQVBQUyAoNUQpIFJpZ2h0IHdpbmRv
d3MvbWV0YSBrZXkKKyAgICBjYXNlIDU0OiAvLyBSaWdodCBDb21tYW5kCisgICAgICAgIHJldHVy
biAweDVEOworCisgICAgLy8gVktfTFdJTiAoNUIpIExlZnQgd2luZG93cy9tZXRhIGtleQorICAg
IGNhc2UgNTU6IC8vIExlZnQgQ29tbWFuZAorICAgICAgICByZXR1cm4gMHg1QjsKKworICAgIC8v
IFZLX0NBUElUQUwgKDE0KSBjYXBzIGxvY2tzIGtleQorICAgIGNhc2UgNTc6IC8vIENhcHNsb2Nr
CisgICAgICAgIHJldHVybiAweDE0OworCisgICAgLy8gVktfU0hJRlQgKDEwKSBlaXRoZXIgc2hp
ZnQga2V5CisgICAgY2FzZSA1NjogLy8gTGVmdCBTaGlmdAorICAgIGNhc2UgNjA6IC8vIFJpZ2h0
IFNoaWZ0CisgICAgICAgIHJldHVybiAweDEwOworCisgICAgLy8gVktfTUVOVSAoMTIpIGVpdGhl
ciBhbHQga2V5CisgICAgY2FzZSA1ODogLy8gTGVmdCBBbHQKKyAgICBjYXNlIDYxOiAvLyBSaWdo
dCBBbHQKKyAgICAgICAgcmV0dXJuIDB4MTI7CisKKyAgICAvLyBWS19DT05UUk9MICgxMSkgZWl0
aGVyIGN0cmwga2V5CisgICAgY2FzZSA1OTogLy8gTGVmdCBDdHJsCisgICAgY2FzZSA2MjogLy8g
UmlnaHQgQ3RybAorICAgICAgICByZXR1cm4gMHgxMTsKKworLy8gQmVnaW4gbm9uLUFwcGxlIGFk
ZGl0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorICAgIGNhc2UgNjM6IC8vIEZ1bmN0aW9uIChubyBXaW5kb3dzIGtleSBjb2RlKQorICAgICAg
ICByZXR1cm4gMDsKKy8vIEVuZCBub24tQXBwbGUgYWRkaXRpb24gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8vIFZLX0NMRUFSICgw
QykgQ0xFQVIga2V5CisgICAgY2FzZSA3MTogcmV0dXJuIDB4MEM7CisKKyAgICAvLyBWS19OVU1Q
QUQwICg2MCkgTnVtZXJpYyBrZXlwYWQgMCBrZXkKKyAgICBjYXNlIDgyOiByZXR1cm4gMHg2MDsK
KyAgICAvLyBWS19OVU1QQUQxICg2MSkgTnVtZXJpYyBrZXlwYWQgMSBrZXkKKyAgICBjYXNlIDgz
OiByZXR1cm4gMHg2MTsKKyAgICAvLyBWS19OVU1QQUQyICg2MikgTnVtZXJpYyBrZXlwYWQgMiBr
ZXkKKyAgICBjYXNlIDg0OiByZXR1cm4gMHg2MjsKKyAgICAvLyBWS19OVU1QQUQzICg2MykgTnVt
ZXJpYyBrZXlwYWQgMyBrZXkKKyAgICBjYXNlIDg1OiByZXR1cm4gMHg2MzsKKyAgICAvLyBWS19O
VU1QQUQ0ICg2NCkgTnVtZXJpYyBrZXlwYWQgNCBrZXkKKyAgICBjYXNlIDg2OiByZXR1cm4gMHg2
NDsKKyAgICAvLyBWS19OVU1QQUQ1ICg2NSkgTnVtZXJpYyBrZXlwYWQgNSBrZXkKKyAgICBjYXNl
IDg3OiByZXR1cm4gMHg2NTsKKyAgICAvLyBWS19OVU1QQUQ2ICg2NikgTnVtZXJpYyBrZXlwYWQg
NiBrZXkKKyAgICBjYXNlIDg4OiByZXR1cm4gMHg2NjsKKyAgICAvLyBWS19OVU1QQUQ3ICg2Nykg
TnVtZXJpYyBrZXlwYWQgNyBrZXkKKyAgICBjYXNlIDg5OiByZXR1cm4gMHg2NzsKKyAgICAvLyBW
S19OVU1QQUQ4ICg2OCkgTnVtZXJpYyBrZXlwYWQgOCBrZXkKKyAgICBjYXNlIDkxOiByZXR1cm4g
MHg2ODsKKyAgICAvLyBWS19OVU1QQUQ5ICg2OSkgTnVtZXJpYyBrZXlwYWQgOSBrZXkKKyAgICBj
YXNlIDkyOiByZXR1cm4gMHg2OTsKKyAgICAvLyBWS19NVUxUSVBMWSAoNkEpIE11bHRpcGx5IGtl
eQorICAgIGNhc2UgNjc6IHJldHVybiAweDZBOworICAgIC8vIFZLX0FERCAoNkIpIEFkZCBrZXkK
KyAgICBjYXNlIDY5OiByZXR1cm4gMHg2QjsKKworICAgIC8vIFZLX1NVQlRSQUNUICg2RCkgU3Vi
dHJhY3Qga2V5CisgICAgY2FzZSA3ODogcmV0dXJuIDB4NkQ7CisgICAgLy8gVktfREVDSU1BTCAo
NkUpIERlY2ltYWwga2V5CisgICAgY2FzZSA2NTogcmV0dXJuIDB4NkU7CisgICAgLy8gVktfRElW
SURFICg2RikgRGl2aWRlIGtleQorICAgIGNhc2UgNzU6IHJldHVybiAweDZGOworICAgIH0KKwor
Ly8gQmVnaW4gbm9uLUFwcGxlIGFkZGl0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIHwtW05TRXZlbnQgY2hhcmFjdGVyc0lnbm9y
aW5nTW9kaWZpZXJzXXwgaXNuJ3QgYWxsb3dlZCBmb3IKKyAgICAvLyBOU0ZsYWdzQ2hhbmdlZCwg
YW5kIGNvbmNlaXZhYmx5IHdlIG1heSBub3QgaGF2ZSBjYXVnaHQgZXZlcnl0aGluZworICAgIC8v
IHdoaWNoIGNhdXNlcyBhbiBOU0ZsYWdzQ2hhbmdlZCBhYm92ZS4KKyAgICBpZiAoW2V2ZW50IHR5
cGVdID09IE5TRmxhZ3NDaGFuZ2VkKQorICAgICAgICByZXR1cm4gMDsKKy8vIEVuZCBub24tQXBw
bGUgYWRkaXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKworICAgIE5TU3RyaW5nKiBzID0gW2V2ZW50IGNoYXJhY3RlcnNJZ25vcmluZ01v
ZGlmaWVyc107CisgICAgaWYgKFtzIGxlbmd0aF0gIT0gMSkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICBzd2l0Y2ggKFtzIGNoYXJhY3RlckF0SW5kZXg6MF0pIHsKKyAgICAvLyBWS19MQlVUVE9O
ICgwMSkgTGVmdCBtb3VzZSBidXR0b24KKyAgICAvLyBWS19SQlVUVE9OICgwMikgUmlnaHQgbW91
c2UgYnV0dG9uCisgICAgLy8gVktfQ0FOQ0VMICgwMykgQ29udHJvbC1icmVhayBwcm9jZXNzaW5n
CisgICAgLy8gVktfTUJVVFRPTiAoMDQpIE1pZGRsZSBtb3VzZSBidXR0b24gKHRocmVlLWJ1dHRv
biBtb3VzZSkKKyAgICAvLyBWS19YQlVUVE9OMSAoMDUpCisgICAgLy8gVktfWEJVVFRPTjIgKDA2
KQorCisgICAgLy8gVktfQkFDSyAoMDgpIEJBQ0tTUEFDRSBrZXkKKyAgICBjYXNlIDg6IGNhc2Ug
MHg3RjogcmV0dXJuIDB4MDg7CisgICAgLy8gVktfVEFCICgwOSkgVEFCIGtleQorICAgIGNhc2Ug
OTogcmV0dXJuIDB4MDk7CisKKyAgICAvLyBWS19DTEVBUiAoMEMpIENMRUFSIGtleQorICAgIC8v
IGhhbmRsZWQgYnkga2V5IGNvZGUgYWJvdmUKKworICAgIC8vIFZLX1JFVFVSTiAoMEQpCisgICAg
Y2FzZSAweEQ6IGNhc2UgMzogcmV0dXJuIDB4MEQ7CisKKyAgICAvLyBWS19TSElGVCAoMTApIFNI
SUZUIGtleQorICAgIC8vIFZLX0NPTlRST0wgKDExKSBDVFJMIGtleQorICAgIC8vIFZLX01FTlUg
KDEyKSBBTFQga2V5CisKKyAgICAvLyBWS19QQVVTRSAoMTMpIFBBVVNFIGtleQorICAgIGNhc2Ug
TlNQYXVzZUZ1bmN0aW9uS2V5OiByZXR1cm4gMHgxMzsKKworICAgIC8vIFZLX0NBUElUQUwgKDE0
KSBDQVBTIExPQ0sga2V5CisgICAgLy8gVktfS0FOQSAoMTUpIElucHV0IE1ldGhvZCBFZGl0b3Ig
KElNRSkgS2FuYSBtb2RlCisgICAgLy8gVktfSEFOR1VFTCAoMTUpIElNRSBIYW5ndWVsIG1vZGUg
KG1haW50YWluZWQgZm9yIGNvbXBhdGliaWxpdHk7IHVzZSBWS19IQU5HVUwpCisgICAgLy8gVktf
SEFOR1VMICgxNSkgSU1FIEhhbmd1bCBtb2RlCisgICAgLy8gVktfSlVOSkEgKDE3KSBJTUUgSnVu
amEgbW9kZQorICAgIC8vIFZLX0ZJTkFMICgxOCkgSU1FIGZpbmFsIG1vZGUKKyAgICAvLyBWS19I
QU5KQSAoMTkpIElNRSBIYW5qYSBtb2RlCisgICAgLy8gVktfS0FOSkkgKDE5KSBJTUUgS2Fuamkg
bW9kZQorCisgICAgLy8gVktfRVNDQVBFICgxQikgRVNDIGtleQorICAgIGNhc2UgMHgxQjogcmV0
dXJuIDB4MUI7CisKKyAgICAvLyBWS19DT05WRVJUICgxQykgSU1FIGNvbnZlcnQKKyAgICAvLyBW
S19OT05DT05WRVJUICgxRCkgSU1FIG5vbmNvbnZlcnQKKyAgICAvLyBWS19BQ0NFUFQgKDFFKSBJ
TUUgYWNjZXB0CisgICAgLy8gVktfTU9ERUNIQU5HRSAoMUYpIElNRSBtb2RlIGNoYW5nZSByZXF1
ZXN0CisKKyAgICAvLyBWS19TUEFDRSAoMjApIFNQQUNFQkFSCisgICAgY2FzZSAnICc6IHJldHVy
biAweDIwOworICAgIC8vIFZLX1BSSU9SICgyMSkgUEFHRSBVUCBrZXkKKyAgICBjYXNlIE5TUGFn
ZVVwRnVuY3Rpb25LZXk6IHJldHVybiAweDIxOworICAgIC8vIFZLX05FWFQgKDIyKSBQQUdFIERP
V04ga2V5CisgICAgY2FzZSBOU1BhZ2VEb3duRnVuY3Rpb25LZXk6IHJldHVybiAweDIyOworICAg
IC8vIFZLX0VORCAoMjMpIEVORCBrZXkKKyAgICBjYXNlIE5TRW5kRnVuY3Rpb25LZXk6IHJldHVy
biAweDIzOworICAgIC8vIFZLX0hPTUUgKDI0KSBIT01FIGtleQorICAgIGNhc2UgTlNIb21lRnVu
Y3Rpb25LZXk6IHJldHVybiAweDI0OworICAgIC8vIFZLX0xFRlQgKDI1KSBMRUZUIEFSUk9XIGtl
eQorICAgIGNhc2UgTlNMZWZ0QXJyb3dGdW5jdGlvbktleTogcmV0dXJuIDB4MjU7CisgICAgLy8g
VktfVVAgKDI2KSBVUCBBUlJPVyBrZXkKKyAgICBjYXNlIE5TVXBBcnJvd0Z1bmN0aW9uS2V5OiBy
ZXR1cm4gMHgyNjsKKyAgICAvLyBWS19SSUdIVCAoMjcpIFJJR0hUIEFSUk9XIGtleQorICAgIGNh
c2UgTlNSaWdodEFycm93RnVuY3Rpb25LZXk6IHJldHVybiAweDI3OworICAgIC8vIFZLX0RPV04g
KDI4KSBET1dOIEFSUk9XIGtleQorICAgIGNhc2UgTlNEb3duQXJyb3dGdW5jdGlvbktleTogcmV0
dXJuIDB4Mjg7CisgICAgLy8gVktfU0VMRUNUICgyOSkgU0VMRUNUIGtleQorICAgIGNhc2UgTlNT
ZWxlY3RGdW5jdGlvbktleTogcmV0dXJuIDB4Mjk7CisgICAgLy8gVktfUFJJTlQgKDJBKSBQUklO
VCBrZXkKKyAgICBjYXNlIE5TUHJpbnRGdW5jdGlvbktleTogcmV0dXJuIDB4MkE7CisgICAgLy8g
VktfRVhFQ1VURSAoMkIpIEVYRUNVVEUga2V5CisgICAgY2FzZSBOU0V4ZWN1dGVGdW5jdGlvbktl
eTogcmV0dXJuIDB4MkI7CisgICAgLy8gVktfU05BUFNIT1QgKDJDKSBQUklOVCBTQ1JFRU4ga2V5
CisgICAgY2FzZSBOU1ByaW50U2NyZWVuRnVuY3Rpb25LZXk6IHJldHVybiAweDJDOworICAgIC8v
IFZLX0lOU0VSVCAoMkQpIElOUyBrZXkKKyAgICBjYXNlIE5TSW5zZXJ0RnVuY3Rpb25LZXk6IGNh
c2UgTlNIZWxwRnVuY3Rpb25LZXk6IHJldHVybiAweDJEOworICAgIC8vIFZLX0RFTEVURSAoMkUp
IERFTCBrZXkKKyAgICBjYXNlIE5TRGVsZXRlRnVuY3Rpb25LZXk6IHJldHVybiAweDJFOworCisg
ICAgLy8gVktfSEVMUCAoMkYpIEhFTFAga2V5CisKKyAgICAvLyAgKDMwKSAwIGtleQorICAgIGNh
c2UgJzAnOiBjYXNlICcpJzogcmV0dXJuIDB4MzA7CisgICAgLy8gICgzMSkgMSBrZXkKKyAgICBj
YXNlICcxJzogY2FzZSAnISc6IHJldHVybiAweDMxOworICAgIC8vICAoMzIpIDIga2V5CisgICAg
Y2FzZSAnMic6IGNhc2UgJ0AnOiByZXR1cm4gMHgzMjsKKyAgICAvLyAgKDMzKSAzIGtleQorICAg
IGNhc2UgJzMnOiBjYXNlICcjJzogcmV0dXJuIDB4MzM7CisgICAgLy8gICgzNCkgNCBrZXkKKyAg
ICBjYXNlICc0JzogY2FzZSAnJCc6IHJldHVybiAweDM0OworICAgIC8vICAoMzUpIDUga2V5Cisg
ICAgY2FzZSAnNSc6IGNhc2UgJyUnOiByZXR1cm4gMHgzNTsKKyAgICAvLyAgKDM2KSA2IGtleQor
ICAgIGNhc2UgJzYnOiBjYXNlICdeJzogcmV0dXJuIDB4MzY7CisgICAgLy8gICgzNykgNyBrZXkK
KyAgICBjYXNlICc3JzogY2FzZSAnJic6IHJldHVybiAweDM3OworICAgIC8vICAoMzgpIDgga2V5
CisgICAgY2FzZSAnOCc6IGNhc2UgJyonOiByZXR1cm4gMHgzODsKKyAgICAvLyAgKDM5KSA5IGtl
eQorICAgIGNhc2UgJzknOiBjYXNlICcoJzogcmV0dXJuIDB4Mzk7CisgICAgLy8gICg0MSkgQSBr
ZXkKKyAgICBjYXNlICdhJzogY2FzZSAnQSc6IHJldHVybiAweDQxOworICAgIC8vICAoNDIpIEIg
a2V5CisgICAgY2FzZSAnYic6IGNhc2UgJ0InOiByZXR1cm4gMHg0MjsKKyAgICAvLyAgKDQzKSBD
IGtleQorICAgIGNhc2UgJ2MnOiBjYXNlICdDJzogcmV0dXJuIDB4NDM7CisgICAgLy8gICg0NCkg
RCBrZXkKKyAgICBjYXNlICdkJzogY2FzZSAnRCc6IHJldHVybiAweDQ0OworICAgIC8vICAoNDUp
IEUga2V5CisgICAgY2FzZSAnZSc6IGNhc2UgJ0UnOiByZXR1cm4gMHg0NTsKKyAgICAvLyAgKDQ2
KSBGIGtleQorICAgIGNhc2UgJ2YnOiBjYXNlICdGJzogcmV0dXJuIDB4NDY7CisgICAgLy8gICg0
NykgRyBrZXkKKyAgICBjYXNlICdnJzogY2FzZSAnRyc6IHJldHVybiAweDQ3OworICAgIC8vICAo
NDgpIEgga2V5CisgICAgY2FzZSAnaCc6IGNhc2UgJ0gnOiByZXR1cm4gMHg0ODsKKyAgICAvLyAg
KDQ5KSBJIGtleQorICAgIGNhc2UgJ2knOiBjYXNlICdJJzogcmV0dXJuIDB4NDk7CisgICAgLy8g
ICg0QSkgSiBrZXkKKyAgICBjYXNlICdqJzogY2FzZSAnSic6IHJldHVybiAweDRBOworICAgIC8v
ICAoNEIpIEsga2V5CisgICAgY2FzZSAnayc6IGNhc2UgJ0snOiByZXR1cm4gMHg0QjsKKyAgICAv
LyAgKDRDKSBMIGtleQorICAgIGNhc2UgJ2wnOiBjYXNlICdMJzogcmV0dXJuIDB4NEM7CisgICAg
Ly8gICg0RCkgTSBrZXkKKyAgICBjYXNlICdtJzogY2FzZSAnTSc6IHJldHVybiAweDREOworICAg
IC8vICAoNEUpIE4ga2V5CisgICAgY2FzZSAnbic6IGNhc2UgJ04nOiByZXR1cm4gMHg0RTsKKyAg
ICAvLyAgKDRGKSBPIGtleQorICAgIGNhc2UgJ28nOiBjYXNlICdPJzogcmV0dXJuIDB4NEY7Cisg
ICAgLy8gICg1MCkgUCBrZXkKKyAgICBjYXNlICdwJzogY2FzZSAnUCc6IHJldHVybiAweDUwOwor
ICAgIC8vICAoNTEpIFEga2V5CisgICAgY2FzZSAncSc6IGNhc2UgJ1EnOiByZXR1cm4gMHg1MTsK
KyAgICAvLyAgKDUyKSBSIGtleQorICAgIGNhc2UgJ3InOiBjYXNlICdSJzogcmV0dXJuIDB4NTI7
CisgICAgLy8gICg1MykgUyBrZXkKKyAgICBjYXNlICdzJzogY2FzZSAnUyc6IHJldHVybiAweDUz
OworICAgIC8vICAoNTQpIFQga2V5CisgICAgY2FzZSAndCc6IGNhc2UgJ1QnOiByZXR1cm4gMHg1
NDsKKyAgICAvLyAgKDU1KSBVIGtleQorICAgIGNhc2UgJ3UnOiBjYXNlICdVJzogcmV0dXJuIDB4
NTU7CisgICAgLy8gICg1NikgViBrZXkKKyAgICBjYXNlICd2JzogY2FzZSAnVic6IHJldHVybiAw
eDU2OworICAgIC8vICAoNTcpIFcga2V5CisgICAgY2FzZSAndyc6IGNhc2UgJ1cnOiByZXR1cm4g
MHg1NzsKKyAgICAvLyAgKDU4KSBYIGtleQorICAgIGNhc2UgJ3gnOiBjYXNlICdYJzogcmV0dXJu
IDB4NTg7CisgICAgLy8gICg1OSkgWSBrZXkKKyAgICBjYXNlICd5JzogY2FzZSAnWSc6IHJldHVy
biAweDU5OworICAgIC8vICAoNUEpIFoga2V5CisgICAgY2FzZSAneic6IGNhc2UgJ1onOiByZXR1
cm4gMHg1QTsKKworICAgIC8vIFZLX0xXSU4gKDVCKSBMZWZ0IFdpbmRvd3Mga2V5IChNaWNyb3Nv
ZnQgTmF0dXJhbCBrZXlib2FyZCkKKyAgICAvLyBWS19SV0lOICg1QykgUmlnaHQgV2luZG93cyBr
ZXkgKE5hdHVyYWwga2V5Ym9hcmQpCisgICAgLy8gVktfQVBQUyAoNUQpIEFwcGxpY2F0aW9ucyBr
ZXkgKE5hdHVyYWwga2V5Ym9hcmQpCisgICAgLy8gVktfU0xFRVAgKDVGKSBDb21wdXRlciBTbGVl
cCBrZXkKKworICAgIC8vIFZLX05VTVBBRDAgKDYwKSBOdW1lcmljIGtleXBhZCAwIGtleQorICAg
IC8vIFZLX05VTVBBRDEgKDYxKSBOdW1lcmljIGtleXBhZCAxIGtleQorICAgIC8vIFZLX05VTVBB
RDIgKDYyKSBOdW1lcmljIGtleXBhZCAyIGtleQorICAgIC8vIFZLX05VTVBBRDMgKDYzKSBOdW1l
cmljIGtleXBhZCAzIGtleQorICAgIC8vIFZLX05VTVBBRDQgKDY0KSBOdW1lcmljIGtleXBhZCA0
IGtleQorICAgIC8vIFZLX05VTVBBRDUgKDY1KSBOdW1lcmljIGtleXBhZCA1IGtleQorICAgIC8v
IFZLX05VTVBBRDYgKDY2KSBOdW1lcmljIGtleXBhZCA2IGtleQorICAgIC8vIFZLX05VTVBBRDcg
KDY3KSBOdW1lcmljIGtleXBhZCA3IGtleQorICAgIC8vIFZLX05VTVBBRDggKDY4KSBOdW1lcmlj
IGtleXBhZCA4IGtleQorICAgIC8vIFZLX05VTVBBRDkgKDY5KSBOdW1lcmljIGtleXBhZCA5IGtl
eQorICAgIC8vIFZLX01VTFRJUExZICg2QSkgTXVsdGlwbHkga2V5CisgICAgLy8gVktfQUREICg2
QikgQWRkIGtleQorICAgIC8vIGhhbmRsZWQgYnkga2V5IGNvZGUgYWJvdmUKKworICAgIC8vIFZL
X1NFUEFSQVRPUiAoNkMpIFNlcGFyYXRvciBrZXkKKworICAgIC8vIFZLX1NVQlRSQUNUICg2RCkg
U3VidHJhY3Qga2V5CisgICAgLy8gVktfREVDSU1BTCAoNkUpIERlY2ltYWwga2V5CisgICAgLy8g
VktfRElWSURFICg2RikgRGl2aWRlIGtleQorICAgIC8vIGhhbmRsZWQgYnkga2V5IGNvZGUgYWJv
dmUKKworICAgIC8vIFZLX0YxICg3MCkgRjEga2V5CisgICAgY2FzZSBOU0YxRnVuY3Rpb25LZXk6
IHJldHVybiAweDcwOworICAgIC8vIFZLX0YyICg3MSkgRjIga2V5CisgICAgY2FzZSBOU0YyRnVu
Y3Rpb25LZXk6IHJldHVybiAweDcxOworICAgIC8vIFZLX0YzICg3MikgRjMga2V5CisgICAgY2Fz
ZSBOU0YzRnVuY3Rpb25LZXk6IHJldHVybiAweDcyOworICAgIC8vIFZLX0Y0ICg3MykgRjQga2V5
CisgICAgY2FzZSBOU0Y0RnVuY3Rpb25LZXk6IHJldHVybiAweDczOworICAgIC8vIFZLX0Y1ICg3
NCkgRjUga2V5CisgICAgY2FzZSBOU0Y1RnVuY3Rpb25LZXk6IHJldHVybiAweDc0OworICAgIC8v
IFZLX0Y2ICg3NSkgRjYga2V5CisgICAgY2FzZSBOU0Y2RnVuY3Rpb25LZXk6IHJldHVybiAweDc1
OworICAgIC8vIFZLX0Y3ICg3NikgRjcga2V5CisgICAgY2FzZSBOU0Y3RnVuY3Rpb25LZXk6IHJl
dHVybiAweDc2OworICAgIC8vIFZLX0Y4ICg3NykgRjgga2V5CisgICAgY2FzZSBOU0Y4RnVuY3Rp
b25LZXk6IHJldHVybiAweDc3OworICAgIC8vIFZLX0Y5ICg3OCkgRjkga2V5CisgICAgY2FzZSBO
U0Y5RnVuY3Rpb25LZXk6IHJldHVybiAweDc4OworICAgIC8vIFZLX0YxMCAoNzkpIEYxMCBrZXkK
KyAgICBjYXNlIE5TRjEwRnVuY3Rpb25LZXk6IHJldHVybiAweDc5OworICAgIC8vIFZLX0YxMSAo
N0EpIEYxMSBrZXkKKyAgICBjYXNlIE5TRjExRnVuY3Rpb25LZXk6IHJldHVybiAweDdBOworICAg
IC8vIFZLX0YxMiAoN0IpIEYxMiBrZXkKKyAgICBjYXNlIE5TRjEyRnVuY3Rpb25LZXk6IHJldHVy
biAweDdCOworICAgIC8vIFZLX0YxMyAoN0MpIEYxMyBrZXkKKyAgICBjYXNlIE5TRjEzRnVuY3Rp
b25LZXk6IHJldHVybiAweDdDOworICAgIC8vIFZLX0YxNCAoN0QpIEYxNCBrZXkKKyAgICBjYXNl
IE5TRjE0RnVuY3Rpb25LZXk6IHJldHVybiAweDdEOworICAgIC8vIFZLX0YxNSAoN0UpIEYxNSBr
ZXkKKyAgICBjYXNlIE5TRjE1RnVuY3Rpb25LZXk6IHJldHVybiAweDdFOworICAgIC8vIFZLX0Yx
NiAoN0YpIEYxNiBrZXkKKyAgICBjYXNlIE5TRjE2RnVuY3Rpb25LZXk6IHJldHVybiAweDdGOwor
ICAgIC8vIFZLX0YxNyAoODBIKSBGMTcga2V5CisgICAgY2FzZSBOU0YxN0Z1bmN0aW9uS2V5OiBy
ZXR1cm4gMHg4MDsKKyAgICAvLyBWS19GMTggKDgxSCkgRjE4IGtleQorICAgIGNhc2UgTlNGMThG
dW5jdGlvbktleTogcmV0dXJuIDB4ODE7CisgICAgLy8gVktfRjE5ICg4MkgpIEYxOSBrZXkKKyAg
ICBjYXNlIE5TRjE5RnVuY3Rpb25LZXk6IHJldHVybiAweDgyOworICAgIC8vIFZLX0YyMCAoODNI
KSBGMjAga2V5CisgICAgY2FzZSBOU0YyMEZ1bmN0aW9uS2V5OiByZXR1cm4gMHg4MzsKKyAgICAv
LyBWS19GMjEgKDg0SCkgRjIxIGtleQorICAgIGNhc2UgTlNGMjFGdW5jdGlvbktleTogcmV0dXJu
IDB4ODQ7CisgICAgLy8gVktfRjIyICg4NUgpIEYyMiBrZXkKKyAgICBjYXNlIE5TRjIyRnVuY3Rp
b25LZXk6IHJldHVybiAweDg1OworICAgIC8vIFZLX0YyMyAoODZIKSBGMjMga2V5CisgICAgY2Fz
ZSBOU0YyM0Z1bmN0aW9uS2V5OiByZXR1cm4gMHg4NjsKKyAgICAvLyBWS19GMjQgKDg3SCkgRjI0
IGtleQorICAgIGNhc2UgTlNGMjRGdW5jdGlvbktleTogcmV0dXJuIDB4ODc7CisKKyAgICAvLyBW
S19OVU1MT0NLICg5MCkgTlVNIExPQ0sga2V5CisKKyAgICAvLyBWS19TQ1JPTEwgKDkxKSBTQ1JP
TEwgTE9DSyBrZXkKKyAgICBjYXNlIE5TU2Nyb2xsTG9ja0Z1bmN0aW9uS2V5OiByZXR1cm4gMHg5
MTsKKworICAgIC8vIFZLX0xTSElGVCAoQTApIExlZnQgU0hJRlQga2V5CisgICAgLy8gVktfUlNI
SUZUIChBMSkgUmlnaHQgU0hJRlQga2V5CisgICAgLy8gVktfTENPTlRST0wgKEEyKSBMZWZ0IENP
TlRST0wga2V5CisgICAgLy8gVktfUkNPTlRST0wgKEEzKSBSaWdodCBDT05UUk9MIGtleQorICAg
IC8vIFZLX0xNRU5VIChBNCkgTGVmdCBNRU5VIGtleQorICAgIC8vIFZLX1JNRU5VIChBNSkgUmln
aHQgTUVOVSBrZXkKKyAgICAvLyBWS19CUk9XU0VSX0JBQ0sgKEE2KSBXaW5kb3dzIDIwMDAvWFA6
IEJyb3dzZXIgQmFjayBrZXkKKyAgICAvLyBWS19CUk9XU0VSX0ZPUldBUkQgKEE3KSBXaW5kb3dz
IDIwMDAvWFA6IEJyb3dzZXIgRm9yd2FyZCBrZXkKKyAgICAvLyBWS19CUk9XU0VSX1JFRlJFU0gg
KEE4KSBXaW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgUmVmcmVzaCBrZXkKKyAgICAvLyBWS19CUk9X
U0VSX1NUT1AgKEE5KSBXaW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgU3RvcCBrZXkKKyAgICAvLyBW
S19CUk9XU0VSX1NFQVJDSCAoQUEpIFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBTZWFyY2gga2V5
CisgICAgLy8gVktfQlJPV1NFUl9GQVZPUklURVMgKEFCKSBXaW5kb3dzIDIwMDAvWFA6IEJyb3dz
ZXIgRmF2b3JpdGVzIGtleQorICAgIC8vIFZLX0JST1dTRVJfSE9NRSAoQUMpIFdpbmRvd3MgMjAw
MC9YUDogQnJvd3NlciBTdGFydCBhbmQgSG9tZSBrZXkKKyAgICAvLyBWS19WT0xVTUVfTVVURSAo
QUQpIFdpbmRvd3MgMjAwMC9YUDogVm9sdW1lIE11dGUga2V5CisgICAgLy8gVktfVk9MVU1FX0RP
V04gKEFFKSBXaW5kb3dzIDIwMDAvWFA6IFZvbHVtZSBEb3duIGtleQorICAgIC8vIFZLX1ZPTFVN
RV9VUCAoQUYpIFdpbmRvd3MgMjAwMC9YUDogVm9sdW1lIFVwIGtleQorICAgIC8vIFZLX01FRElB
X05FWFRfVFJBQ0sgKEIwKSBXaW5kb3dzIDIwMDAvWFA6IE5leHQgVHJhY2sga2V5CisgICAgLy8g
VktfTUVESUFfUFJFVl9UUkFDSyAoQjEpIFdpbmRvd3MgMjAwMC9YUDogUHJldmlvdXMgVHJhY2sg
a2V5CisgICAgLy8gVktfTUVESUFfU1RPUCAoQjIpIFdpbmRvd3MgMjAwMC9YUDogU3RvcCBNZWRp
YSBrZXkKKyAgICAvLyBWS19NRURJQV9QTEFZX1BBVVNFIChCMykgV2luZG93cyAyMDAwL1hQOiBQ
bGF5L1BhdXNlIE1lZGlhIGtleQorICAgIC8vIFZLX0xBVU5DSF9NQUlMIChCNCkgV2luZG93cyAy
MDAwL1hQOiBTdGFydCBNYWlsIGtleQorICAgIC8vIFZLX0xBVU5DSF9NRURJQV9TRUxFQ1QgKEI1
KSBXaW5kb3dzIDIwMDAvWFA6IFNlbGVjdCBNZWRpYSBrZXkKKyAgICAvLyBWS19MQVVOQ0hfQVBQ
MSAoQjYpIFdpbmRvd3MgMjAwMC9YUDogU3RhcnQgQXBwbGljYXRpb24gMSBrZXkKKyAgICAvLyBW
S19MQVVOQ0hfQVBQMiAoQjcpIFdpbmRvd3MgMjAwMC9YUDogU3RhcnQgQXBwbGljYXRpb24gMiBr
ZXkKKworICAgIC8vIFZLX09FTV8xIChCQSkgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0
ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVT
IHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJzs6JyBrZXkKKyAgICBjYXNlICc7JzogY2FzZSAnOic6
IHJldHVybiAweEJBOworICAgIC8vIFZLX09FTV9QTFVTIChCQikgV2luZG93cyAyMDAwL1hQOiBG
b3IgYW55IGNvdW50cnkvcmVnaW9uLCB0aGUgJysnIGtleQorICAgIGNhc2UgJz0nOiBjYXNlICcr
JzogcmV0dXJuIDB4QkI7CisgICAgLy8gVktfT0VNX0NPTU1BIChCQykgV2luZG93cyAyMDAwL1hQ
OiBGb3IgYW55IGNvdW50cnkvcmVnaW9uLCB0aGUgJywnIGtleQorICAgIGNhc2UgJywnOiBjYXNl
ICc8JzogcmV0dXJuIDB4QkM7CisgICAgLy8gVktfT0VNX01JTlVTIChCRCkgV2luZG93cyAyMDAw
L1hQOiBGb3IgYW55IGNvdW50cnkvcmVnaW9uLCB0aGUgJy0nIGtleQorICAgIGNhc2UgJy0nOiBj
YXNlICdfJzogcmV0dXJuIDB4QkQ7CisgICAgLy8gVktfT0VNX1BFUklPRCAoQkUpIFdpbmRvd3Mg
MjAwMC9YUDogRm9yIGFueSBjb3VudHJ5L3JlZ2lvbiwgdGhlICcuJyBrZXkKKyAgICBjYXNlICcu
JzogY2FzZSAnPic6IHJldHVybiAweEJFOworICAgIC8vIFZLX09FTV8yIChCRikgVXNlZCBmb3Ig
bWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93
cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJy8/JyBrZXkKKyAg
ICBjYXNlICcvJzogY2FzZSAnPyc6IHJldHVybiAweEJGOworICAgIC8vIFZLX09FTV8zIChDMCkg
VXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2Fy
ZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJ2B+
JyBrZXkKKyAgICBjYXNlICdgJzogY2FzZSAnfic6IHJldHVybiAweEMwOworICAgIC8vIFZLX09F
TV80IChEQikgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBi
eSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJk
LCB0aGUgJ1t7JyBrZXkKKyAgICBjYXNlICdbJzogY2FzZSAneyc6IHJldHVybiAweERCOworICAg
IC8vIFZLX09FTV81IChEQykgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBj
YW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJk
IGtleWJvYXJkLCB0aGUgJ1x8JyBrZXkKKyAgICBjYXNlICdcXCc6IGNhc2UgJ3wnOiByZXR1cm4g
MHhEQzsKKyAgICAvLyBWS19PRU1fNiAoREQpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFj
dGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBV
UyBzdGFuZGFyZCBrZXlib2FyZCwgdGhlICddfScga2V5CisgICAgY2FzZSAnXSc6IGNhc2UgJ30n
OiByZXR1cm4gMHhERDsKKyAgICAvLyBWS19PRU1fNyAoREUpIFVzZWQgZm9yIG1pc2NlbGxhbmVv
dXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDog
Rm9yIHRoZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwgdGhlICdzaW5nbGUtcXVvdGUvZG91YmxlLXF1
b3RlJyBrZXkKKyAgICBjYXNlICdcJyc6IGNhc2UgJyInOiByZXR1cm4gMHhERTsKKworICAgIC8v
IFZLX09FTV84IChERikgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4g
dmFyeSBieSBrZXlib2FyZC4KKyAgICAvLyBWS19PRU1fMTAyIChFMikgV2luZG93cyAyMDAwL1hQ
OiBFaXRoZXIgdGhlIGFuZ2xlIGJyYWNrZXQga2V5IG9yIHRoZSBiYWNrc2xhc2gga2V5IG9uIHRo
ZSBSVCAxMDIta2V5IGtleWJvYXJkCisgICAgLy8gVktfUFJPQ0VTU0tFWSAoRTUpIFdpbmRvd3Mg
OTUvOTgvTWUsIFdpbmRvd3MgTlQgNC4wLCBXaW5kb3dzIDIwMDAvWFA6IElNRSBQUk9DRVNTIGtl
eQorICAgIC8vIFZLX1BBQ0tFVCAoRTcpIFdpbmRvd3MgMjAwMC9YUDogVXNlZCB0byBwYXNzIFVu
aWNvZGUgY2hhcmFjdGVycyBhcyBpZiB0aGV5IHdlcmUga2V5c3Ryb2tlcy4gVGhlIFZLX1BBQ0tF
VCBrZXkgaXMgdGhlIGxvdyB3b3JkIG9mIGEgMzItYml0IFZpcnR1YWwgS2V5IHZhbHVlIHVzZWQg
Zm9yIG5vbi1rZXlib2FyZCBpbnB1dCBtZXRob2RzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2Vl
IFJlbWFyayBpbiBLRVlCRElOUFVULFNlbmRJbnB1dCwgV01fS0VZRE9XTiwgYW5kIFdNX0tFWVVQ
CisgICAgLy8gVktfQVRUTiAoRjYpIEF0dG4ga2V5CisgICAgLy8gVktfQ1JTRUwgKEY3KSBDclNl
bCBrZXkKKyAgICAvLyBWS19FWFNFTCAoRjgpIEV4U2VsIGtleQorICAgIC8vIFZLX0VSRU9GIChG
OSkgRXJhc2UgRU9GIGtleQorICAgIC8vIFZLX1BMQVkgKEZBKSBQbGF5IGtleQorICAgIC8vIFZL
X1pPT00gKEZCKSBab29tIGtleQorICAgIC8vIFZLX05PTkFNRSAoRkMpIFJlc2VydmVkIGZvciBm
dXR1cmUgdXNlCisgICAgLy8gVktfUEExIChGRCkgUEExIGtleQorICAgIC8vIFZLX09FTV9DTEVB
UiAoRkUpIENsZWFyIGtleQorICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW5s
aW5lIE5TU3RyaW5nKiB0ZXh0RnJvbUV2ZW50KE5TRXZlbnQqIGV2ZW50KQoreworICAgIGlmIChb
ZXZlbnQgdHlwZV0gPT0gTlNGbGFnc0NoYW5nZWQpCisgICAgICAgIHJldHVybiBAIiI7CisgICAg
cmV0dXJuIFtldmVudCBjaGFyYWN0ZXJzXTsKK30KKworc3RhdGljIGlubGluZSBOU1N0cmluZyog
dW5tb2RpZmllZFRleHRGcm9tRXZlbnQoTlNFdmVudCogZXZlbnQpCit7CisgICAgaWYgKFtldmVu
dCB0eXBlXSA9PSBOU0ZsYWdzQ2hhbmdlZCkKKyAgICAgICAgcmV0dXJuIEAiIjsKKyAgICByZXR1
cm4gW2V2ZW50IGNoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVyc107Cit9CisKK3N0YXRpYyBOU1N0
cmluZyoga2V5SWRlbnRpZmllckZvcktleUV2ZW50KE5TRXZlbnQqIGV2ZW50KQoreworICAgIGlm
IChbZXZlbnQgdHlwZV0gPT0gTlNGbGFnc0NoYW5nZWQpIHsKKyAgICAgICAgc3dpdGNoIChbZXZl
bnQga2V5Q29kZV0pIHsKKyAgICAgICAgY2FzZSA1NDogLy8gUmlnaHQgQ29tbWFuZAorICAgICAg
ICBjYXNlIDU1OiAvLyBMZWZ0IENvbW1hbmQKKyAgICAgICAgICAgIHJldHVybiBAIk1ldGEiOwor
CisgICAgICAgIGNhc2UgNTc6IC8vIENhcHNsb2NrCisgICAgICAgICAgICByZXR1cm4gQCJDYXBz
TG9jayI7CisKKyAgICAgICAgY2FzZSA1NjogLy8gTGVmdCBTaGlmdAorICAgICAgICBjYXNlIDYw
OiAvLyBSaWdodCBTaGlmdAorICAgICAgICAgICAgcmV0dXJuIEAiU2hpZnQiOworCisgICAgICAg
IGNhc2UgNTg6IC8vIExlZnQgQWx0CisgICAgICAgIGNhc2UgNjE6IC8vIFJpZ2h0IEFsdAorICAg
ICAgICAgICAgcmV0dXJuIEAiQWx0IjsKKworICAgICAgICBjYXNlIDU5OiAvLyBMZWZ0IEN0cmwK
KyAgICAgICAgY2FzZSA2MjogLy8gUmlnaHQgQ3RybAorICAgICAgICAgICAgcmV0dXJuIEAiQ29u
dHJvbCI7CisKKy8vIEJlZ2luIG5vbi1BcHBsZSBhZGRpdGlvbi9tb2RpZmljYXRpb24gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgY2FzZSA2MzogLy8gRnVu
Y3Rpb24KKyAgICAgICAgICAgIHJldHVybiBAIkZ1bmN0aW9uIjsKKworICAgICAgICBkZWZhdWx0
OiAvLyBVbmtub3duLCBidXQgdGhpcyBtYXkgYmUgYSBzdHJhbmdlL25ldyBrZXlib2FyZC4KKyAg
ICAgICAgICAgIHJldHVybiBAIlVuaWRlbnRpZmllZCI7CisvLyBFbmQgbm9uLUFwcGxlIGFkZGl0
aW9uL21vZGlmaWNhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBOU1N0cmluZyogcyA9IFtldmVudCBjaGFyYWN0ZXJz
SWdub3JpbmdNb2RpZmllcnNdOworICAgIGlmIChbcyBsZW5ndGhdICE9IDEpCisgICAgICAgIHJl
dHVybiBAIlVuaWRlbnRpZmllZCI7CisKKyAgICB1bmljaGFyIGMgPSBbcyBjaGFyYWN0ZXJBdElu
ZGV4OjBdOworICAgIHN3aXRjaCAoYykgeworICAgIC8vIEVhY2ggaWRlbnRpZmllciBsaXN0ZWQg
aW4gdGhlIERPTSBzcGVjIGlzIGxpc3RlZCBoZXJlLgorICAgIC8vIE1hbnkgYXJlIHNpbXBseSBj
b21tZW50ZWQgb3V0IHNpbmNlIHRoZXkgZG8gbm90IGFwcGVhciBvbiBzdGFuZGFyZCBNYWNpbnRv
c2gga2V5Ym9hcmRzCisgICAgLy8gb3IgYXJlIG9uIGEga2V5IHRoYXQgZG9lc24ndCBoYXZlIGEg
Y29ycmVzcG9uZGluZyBjaGFyYWN0ZXIuCisKKyAgICAvLyAiQWNjZXB0IgorICAgIC8vICJBbGxD
YW5kaWRhdGVzIgorCisgICAgLy8gIkFsdCIKKyAgICBjYXNlIE5TTWVudUZ1bmN0aW9uS2V5Ogor
ICAgICAgICByZXR1cm4gQCJBbHQiOworCisgICAgLy8gIkFwcHMiCisgICAgLy8gIkJyb3dzZXJC
YWNrIgorICAgIC8vICJCcm93c2VyRm9yd2FyZCIKKyAgICAvLyAiQnJvd3NlckhvbWUiCisgICAg
Ly8gIkJyb3dzZXJSZWZyZXNoIgorICAgIC8vICJCcm93c2VyU2VhcmNoIgorICAgIC8vICJCcm93
c2VyU3RvcCIKKyAgICAvLyAiQ2Fwc0xvY2siCisKKyAgICAvLyAiQ2xlYXIiCisgICAgY2FzZSBO
U0NsZWFyTGluZUZ1bmN0aW9uS2V5OgorICAgICAgICByZXR1cm4gQCJDbGVhciI7CisKKyAgICAv
LyAiQ29kZUlucHV0IgorICAgIC8vICJDb21wb3NlIgorICAgIC8vICJDb250cm9sIgorICAgIC8v
ICJDcnNlbCIKKyAgICAvLyAiQ29udmVydCIKKyAgICAvLyAiQ29weSIKKyAgICAvLyAiQ3V0Igor
CisgICAgLy8gIkRvd24iCisgICAgY2FzZSBOU0Rvd25BcnJvd0Z1bmN0aW9uS2V5OgorICAgICAg
ICByZXR1cm4gQCJEb3duIjsKKyAgICAvLyAiRW5kIgorICAgIGNhc2UgTlNFbmRGdW5jdGlvbktl
eToKKyAgICAgICAgcmV0dXJuIEAiRW5kIjsKKyAgICAvLyAiRW50ZXIiCisgICAgY2FzZSAweDM6
IGNhc2UgMHhBOiBjYXNlIDB4RDogLy8gTWFjaW50b3NoIGNhbGxzIHRoZSBvbmUgb24gdGhlIG1h
aW4ga2V5Ym9hcmQgUmV0dXJuLCBidXQgV2luZG93cyBjYWxscyBpdCBFbnRlciwgc28gd2UnbGwg
ZG8gdGhlIHNhbWUgZm9yIHRoZSBET00KKyAgICAgICAgcmV0dXJuIEAiRW50ZXIiOworCisgICAg
Ly8gIkVyYXNlRW9mIgorCisgICAgLy8gIkV4ZWN1dGUiCisgICAgY2FzZSBOU0V4ZWN1dGVGdW5j
dGlvbktleToKKyAgICAgICAgcmV0dXJuIEAiRXhlY3V0ZSI7CisKKyAgICAvLyAiRXhzZWwiCisK
KyAgICAvLyAiRjEiCisgICAgY2FzZSBOU0YxRnVuY3Rpb25LZXk6CisgICAgICAgIHJldHVybiBA
IkYxIjsKKyAgICAvLyAiRjIiCisgICAgY2FzZSBOU0YyRnVuY3Rpb25LZXk6CisgICAgICAgIHJl
dHVybiBAIkYyIjsKKyAgICAvLyAiRjMiCisgICAgY2FzZSBOU0YzRnVuY3Rpb25LZXk6CisgICAg
ICAgIHJldHVybiBAIkYzIjsKKyAgICAvLyAiRjQiCisgICAgY2FzZSBOU0Y0RnVuY3Rpb25LZXk6
CisgICAgICAgIHJldHVybiBAIkY0IjsKKyAgICAvLyAiRjUiCisgICAgY2FzZSBOU0Y1RnVuY3Rp
b25LZXk6CisgICAgICAgIHJldHVybiBAIkY1IjsKKyAgICAvLyAiRjYiCisgICAgY2FzZSBOU0Y2
RnVuY3Rpb25LZXk6CisgICAgICAgIHJldHVybiBAIkY2IjsKKyAgICAvLyAiRjciCisgICAgY2Fz
ZSBOU0Y3RnVuY3Rpb25LZXk6CisgICAgICAgIHJldHVybiBAIkY3IjsKKyAgICAvLyAiRjgiCisg
ICAgY2FzZSBOU0Y4RnVuY3Rpb25LZXk6CisgICAgICAgIHJldHVybiBAIkY4IjsKKyAgICAvLyAi
RjkiCisgICAgY2FzZSBOU0Y5RnVuY3Rpb25LZXk6CisgICAgICAgIHJldHVybiBAIkY5IjsKKyAg
ICAvLyAiRjEwIgorICAgIGNhc2UgTlNGMTBGdW5jdGlvbktleToKKyAgICAgICAgcmV0dXJuIEAi
RjEwIjsKKyAgICAvLyAiRjExIgorICAgIGNhc2UgTlNGMTFGdW5jdGlvbktleToKKyAgICAgICAg
cmV0dXJuIEAiRjExIjsKKyAgICAvLyAiRjEyIgorICAgIGNhc2UgTlNGMTJGdW5jdGlvbktleToK
KyAgICAgICAgcmV0dXJuIEAiRjEyIjsKKyAgICAvLyAiRjEzIgorICAgIGNhc2UgTlNGMTNGdW5j
dGlvbktleToKKyAgICAgICAgcmV0dXJuIEAiRjEzIjsKKyAgICAvLyAiRjE0IgorICAgIGNhc2Ug
TlNGMTRGdW5jdGlvbktleToKKyAgICAgICAgcmV0dXJuIEAiRjE0IjsKKyAgICAvLyAiRjE1Igor
ICAgIGNhc2UgTlNGMTVGdW5jdGlvbktleToKKyAgICAgICAgcmV0dXJuIEAiRjE1IjsKKyAgICAv
LyAiRjE2IgorICAgIGNhc2UgTlNGMTZGdW5jdGlvbktleToKKyAgICAgICAgcmV0dXJuIEAiRjE2
IjsKKyAgICAvLyAiRjE3IgorICAgIGNhc2UgTlNGMTdGdW5jdGlvbktleToKKyAgICAgICAgcmV0
dXJuIEAiRjE3IjsKKyAgICAvLyAiRjE4IgorICAgIGNhc2UgTlNGMThGdW5jdGlvbktleToKKyAg
ICAgICAgcmV0dXJuIEAiRjE4IjsKKyAgICAvLyAiRjE5IgorICAgIGNhc2UgTlNGMTlGdW5jdGlv
bktleToKKyAgICAgICAgcmV0dXJuIEAiRjE5IjsKKyAgICAvLyAiRjIwIgorICAgIGNhc2UgTlNG
MjBGdW5jdGlvbktleToKKyAgICAgICAgcmV0dXJuIEAiRjIwIjsKKyAgICAvLyAiRjIxIgorICAg
IGNhc2UgTlNGMjFGdW5jdGlvbktleToKKyAgICAgICAgcmV0dXJuIEAiRjIxIjsKKyAgICAvLyAi
RjIyIgorICAgIGNhc2UgTlNGMjJGdW5jdGlvbktleToKKyAgICAgICAgcmV0dXJuIEAiRjIyIjsK
KyAgICAvLyAiRjIzIgorICAgIGNhc2UgTlNGMjNGdW5jdGlvbktleToKKyAgICAgICAgcmV0dXJu
IEAiRjIzIjsKKyAgICAvLyAiRjI0IgorICAgIGNhc2UgTlNGMjRGdW5jdGlvbktleToKKyAgICAg
ICAgcmV0dXJuIEAiRjI0IjsKKworICAgIC8vICJGaW5hbE1vZGUiCisKKyAgICAvLyAiRmluZCIK
KyAgICBjYXNlIE5TRmluZEZ1bmN0aW9uS2V5OgorICAgICAgICByZXR1cm4gQCJGaW5kIjsKKwor
ICAgIC8vICJGdWxsV2lkdGgiCisgICAgLy8gIkhhbGZXaWR0aCIKKyAgICAvLyAiSGFuZ3VsTW9k
ZSIKKyAgICAvLyAiSGFuamFNb2RlIgorCisgICAgLy8gIkhlbHAiCisgICAgY2FzZSBOU0hlbHBG
dW5jdGlvbktleToKKyAgICAgICAgcmV0dXJuIEAiSGVscCI7CisKKyAgICAvLyAiSGlyYWdhbmEi
CisKKyAgICAvLyAiSG9tZSIKKyAgICBjYXNlIE5TSG9tZUZ1bmN0aW9uS2V5OgorICAgICAgICBy
ZXR1cm4gQCJIb21lIjsKKyAgICAvLyAiSW5zZXJ0IgorICAgIGNhc2UgTlNJbnNlcnRGdW5jdGlv
bktleToKKyAgICAgICAgcmV0dXJuIEAiSW5zZXJ0IjsKKworICAgIC8vICJKYXBhbmVzZUhpcmFn
YW5hIgorICAgIC8vICJKYXBhbmVzZUthdGFrYW5hIgorICAgIC8vICJKYXBhbmVzZVJvbWFqaSIK
KyAgICAvLyAiSnVuamFNb2RlIgorICAgIC8vICJLYW5hTW9kZSIKKyAgICAvLyAiS2FuamlNb2Rl
IgorICAgIC8vICJLYXRha2FuYSIKKyAgICAvLyAiTGF1bmNoQXBwbGljYXRpb24xIgorICAgIC8v
ICJMYXVuY2hBcHBsaWNhdGlvbjIiCisgICAgLy8gIkxhdW5jaE1haWwiCisKKyAgICAvLyAiTGVm
dCIKKyAgICBjYXNlIE5TTGVmdEFycm93RnVuY3Rpb25LZXk6CisgICAgICAgIHJldHVybiBAIkxl
ZnQiOworCisgICAgLy8gIk1ldGEiCisgICAgLy8gIk1lZGlhTmV4dFRyYWNrIgorICAgIC8vICJN
ZWRpYVBsYXlQYXVzZSIKKyAgICAvLyAiTWVkaWFQcmV2aW91c1RyYWNrIgorICAgIC8vICJNZWRp
YVN0b3AiCisKKyAgICAvLyAiTW9kZUNoYW5nZSIKKyAgICBjYXNlIE5TTW9kZVN3aXRjaEZ1bmN0
aW9uS2V5OgorICAgICAgICByZXR1cm4gQCJNb2RlQ2hhbmdlIjsKKworICAgIC8vICJOb25jb252
ZXJ0IgorICAgIC8vICJOdW1Mb2NrIgorCisgICAgLy8gIlBhZ2VEb3duIgorICAgIGNhc2UgTlNQ
YWdlRG93bkZ1bmN0aW9uS2V5OgorICAgICAgICByZXR1cm4gQCJQYWdlRG93biI7CisgICAgLy8g
IlBhZ2VVcCIKKyAgICBjYXNlIE5TUGFnZVVwRnVuY3Rpb25LZXk6CisgICAgICAgIHJldHVybiBA
IlBhZ2VVcCI7CisKKyAgICAvLyAiUGFzdGUiCisKKyAgICAvLyAiUGF1c2UiCisgICAgY2FzZSBO
U1BhdXNlRnVuY3Rpb25LZXk6CisgICAgICAgIHJldHVybiBAIlBhdXNlIjsKKworICAgIC8vICJQ
bGF5IgorICAgIC8vICJQcmV2aW91c0NhbmRpZGF0ZSIKKworICAgIC8vICJQcmludFNjcmVlbiIK
KyAgICBjYXNlIE5TUHJpbnRTY3JlZW5GdW5jdGlvbktleToKKyAgICAgICAgcmV0dXJuIEAiUHJp
bnRTY3JlZW4iOworCisgICAgLy8gIlByb2Nlc3MiCisgICAgLy8gIlByb3BzIgorCisgICAgLy8g
IlJpZ2h0IgorICAgIGNhc2UgTlNSaWdodEFycm93RnVuY3Rpb25LZXk6CisgICAgICAgIHJldHVy
biBAIlJpZ2h0IjsKKworICAgIC8vICJSb21hbkNoYXJhY3RlcnMiCisKKyAgICAvLyAiU2Nyb2xs
IgorICAgIGNhc2UgTlNTY3JvbGxMb2NrRnVuY3Rpb25LZXk6CisgICAgICAgIHJldHVybiBAIlNj
cm9sbCI7CisgICAgLy8gIlNlbGVjdCIKKyAgICBjYXNlIE5TU2VsZWN0RnVuY3Rpb25LZXk6Cisg
ICAgICAgIHJldHVybiBAIlNlbGVjdCI7CisKKyAgICAvLyAiU2VsZWN0TWVkaWEiCisgICAgLy8g
IlNoaWZ0IgorCisgICAgLy8gIlN0b3AiCisgICAgY2FzZSBOU1N0b3BGdW5jdGlvbktleToKKyAg
ICAgICAgcmV0dXJuIEAiU3RvcCI7CisgICAgLy8gIlVwIgorICAgIGNhc2UgTlNVcEFycm93RnVu
Y3Rpb25LZXk6CisgICAgICAgIHJldHVybiBAIlVwIjsKKyAgICAvLyAiVW5kbyIKKyAgICBjYXNl
IE5TVW5kb0Z1bmN0aW9uS2V5OgorICAgICAgICByZXR1cm4gQCJVbmRvIjsKKworICAgIC8vICJW
b2x1bWVEb3duIgorICAgIC8vICJWb2x1bWVNdXRlIgorICAgIC8vICJWb2x1bWVVcCIKKyAgICAv
LyAiV2luIgorICAgIC8vICJab29tIgorCisgICAgLy8gTW9yZSBmdW5jdGlvbiBrZXlzLCBub3Qg
aW4gdGhlIGtleSBpZGVudGlmaWVyIHNwZWNpZmljYXRpb24uCisgICAgY2FzZSBOU0YyNUZ1bmN0
aW9uS2V5OgorICAgICAgICByZXR1cm4gQCJGMjUiOworICAgIGNhc2UgTlNGMjZGdW5jdGlvbktl
eToKKyAgICAgICAgcmV0dXJuIEAiRjI2IjsKKyAgICBjYXNlIE5TRjI3RnVuY3Rpb25LZXk6Cisg
ICAgICAgIHJldHVybiBAIkYyNyI7CisgICAgY2FzZSBOU0YyOEZ1bmN0aW9uS2V5OgorICAgICAg
ICByZXR1cm4gQCJGMjgiOworICAgIGNhc2UgTlNGMjlGdW5jdGlvbktleToKKyAgICAgICAgcmV0
dXJuIEAiRjI5IjsKKyAgICBjYXNlIE5TRjMwRnVuY3Rpb25LZXk6CisgICAgICAgIHJldHVybiBA
IkYzMCI7CisgICAgY2FzZSBOU0YzMUZ1bmN0aW9uS2V5OgorICAgICAgICByZXR1cm4gQCJGMzEi
OworICAgIGNhc2UgTlNGMzJGdW5jdGlvbktleToKKyAgICAgICAgcmV0dXJuIEAiRjMyIjsKKyAg
ICBjYXNlIE5TRjMzRnVuY3Rpb25LZXk6CisgICAgICAgIHJldHVybiBAIkYzMyI7CisgICAgY2Fz
ZSBOU0YzNEZ1bmN0aW9uS2V5OgorICAgICAgICByZXR1cm4gQCJGMzQiOworICAgIGNhc2UgTlNG
MzVGdW5jdGlvbktleToKKyAgICAgICAgcmV0dXJuIEAiRjM1IjsKKworICAgIC8vIFR1cm4gMHg3
RiBpbnRvIDB4MDgsIGJlY2F1c2UgYmFja3NwYWNlIG5lZWRzIHRvIGFsd2F5cyBiZSAweDA4Lgor
ICAgIGNhc2UgMHg3RjoKKyAgICAgICAgcmV0dXJuIEAiVSswMDA4IjsKKyAgICAvLyBTdGFuZGFy
ZCBzYXlzIHRoYXQgREVMIGJlY29tZXMgVSswMDdGLgorICAgIGNhc2UgTlNEZWxldGVGdW5jdGlv
bktleToKKyAgICAgICAgcmV0dXJuIEAiVSswMDdGIjsKKworICAgIC8vIEFsd2F5cyB1c2UgMHgw
OSBmb3IgdGFiIGluc3RlYWQgb2YgQXBwS2l0J3MgYmFja3RhYiBjaGFyYWN0ZXIuCisgICAgY2Fz
ZSBOU0JhY2tUYWJDaGFyYWN0ZXI6CisgICAgICAgIHJldHVybiBAIlUrMDAwOSI7CisKKyAgICBj
YXNlIE5TQmVnaW5GdW5jdGlvbktleToKKyAgICBjYXNlIE5TQnJlYWtGdW5jdGlvbktleToKKyAg
ICBjYXNlIE5TQ2xlYXJEaXNwbGF5RnVuY3Rpb25LZXk6CisgICAgY2FzZSBOU0RlbGV0ZUNoYXJG
dW5jdGlvbktleToKKyAgICBjYXNlIE5TRGVsZXRlTGluZUZ1bmN0aW9uS2V5OgorICAgIGNhc2Ug
TlNJbnNlcnRDaGFyRnVuY3Rpb25LZXk6CisgICAgY2FzZSBOU0luc2VydExpbmVGdW5jdGlvbktl
eToKKyAgICBjYXNlIE5TTmV4dEZ1bmN0aW9uS2V5OgorICAgIGNhc2UgTlNQcmV2RnVuY3Rpb25L
ZXk6CisgICAgY2FzZSBOU1ByaW50RnVuY3Rpb25LZXk6CisgICAgY2FzZSBOU1JlZG9GdW5jdGlv
bktleToKKyAgICBjYXNlIE5TUmVzZXRGdW5jdGlvbktleToKKyAgICBjYXNlIE5TU3lzUmVxRnVu
Y3Rpb25LZXk6CisgICAgY2FzZSBOU1N5c3RlbUZ1bmN0aW9uS2V5OgorICAgIGNhc2UgTlNVc2Vy
RnVuY3Rpb25LZXk6CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgdXNlIHNvbWV0aGluZyBv
dGhlciB0aGFuIHRoZSB2ZW5kb3ItYXJlYSBVbmljb2RlIHZhbHVlcyBmb3IgdGhlIGFib3ZlIGtl
eXMuCisgICAgICAgIC8vIEZvciBub3csIGp1c3QgZmFsbCB0aHJvdWdoIHRvIHRoZSBkZWZhdWx0
LgorICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1h
dDpAIlUrJTA0WCIsIFdURjo6dG9BU0NJSVVwcGVyKGMpXTsKKyAgICB9Cit9CisKKy8vIEVuZCBB
cHBsZSBjb2RlLgorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitzdGF0aWMgaW5saW5lIGludCBt
b2RpZmllcnNGcm9tRXZlbnQoTlNFdmVudCogZXZlbnQpIHsKKyAgICBpbnQgbW9kaWZpZXJzID0g
MDsKKworICAgIGlmIChbZXZlbnQgbW9kaWZpZXJGbGFnc10gJiBOU0NvbnRyb2xLZXlNYXNrKQor
ICAgICAgICBtb2RpZmllcnMgfD0gV2ViSW5wdXRFdmVudDo6Q29udHJvbEtleTsKKyAgICBpZiAo
W2V2ZW50IG1vZGlmaWVyRmxhZ3NdICYgTlNTaGlmdEtleU1hc2spCisgICAgICAgIG1vZGlmaWVy
cyB8PSBXZWJJbnB1dEV2ZW50OjpTaGlmdEtleTsKKyAgICBpZiAoW2V2ZW50IG1vZGlmaWVyRmxh
Z3NdICYgTlNBbHRlcm5hdGVLZXlNYXNrKQorICAgICAgICBtb2RpZmllcnMgfD0gV2ViSW5wdXRF
dmVudDo6QWx0S2V5OworICAgIGlmIChbZXZlbnQgbW9kaWZpZXJGbGFnc10gJiBOU0NvbW1hbmRL
ZXlNYXNrKQorICAgICAgICBtb2RpZmllcnMgfD0gV2ViSW5wdXRFdmVudDo6TWV0YUtleTsKKyAg
ICAvLyBUT0RPKHBvcnQpOiBTZXQgbW91c2UgYnV0dG9uIHN0YXRlcworCisgICAgcmV0dXJuIG1v
ZGlmaWVyczsKK30KKworV2ViS2V5Ym9hcmRFdmVudCBXZWJJbnB1dEV2ZW50RmFjdG9yeTo6a2V5
Ym9hcmRFdmVudChOU0V2ZW50KiBldmVudCkKK3sKKyAgICBXZWJLZXlib2FyZEV2ZW50IHJlc3Vs
dDsKKworICAgIHJlc3VsdC50eXBlID0KKyAgICAgICAgaXNLZXlVcEV2ZW50KGV2ZW50KSA/IFdl
YklucHV0RXZlbnQ6OktleVVwIDogV2ViSW5wdXRFdmVudDo6UmF3S2V5RG93bjsKKworICAgIHJl
c3VsdC5tb2RpZmllcnMgPSBtb2RpZmllcnNGcm9tRXZlbnQoZXZlbnQpOworCisgICAgaWYgKGlz
S2V5cGFkRXZlbnQoZXZlbnQpKQorICAgICAgICByZXN1bHQubW9kaWZpZXJzIHw9IFdlYklucHV0
RXZlbnQ6OklzS2V5UGFkOworCisgICAgaWYgKChbZXZlbnQgdHlwZV0gIT0gTlNGbGFnc0NoYW5n
ZWQpICYmIFtldmVudCBpc0FSZXBlYXRdKQorICAgICAgICByZXN1bHQubW9kaWZpZXJzIHw9IFdl
YklucHV0RXZlbnQ6OklzQXV0b1JlcGVhdDsKKworICAgIHJlc3VsdC53aW5kb3dzS2V5Q29kZSA9
IHdpbmRvd3NLZXlDb2RlRm9yS2V5RXZlbnQoZXZlbnQpOworICAgIHJlc3VsdC5uYXRpdmVLZXlD
b2RlID0gW2V2ZW50IGtleUNvZGVdOworCisgICAgTlNTdHJpbmcqIHRleHRTdHIgPSB0ZXh0RnJv
bUV2ZW50KGV2ZW50KTsKKyAgICBOU1N0cmluZyogdW5tb2RpZmllZFN0ciA9IHVubW9kaWZpZWRU
ZXh0RnJvbUV2ZW50KGV2ZW50KTsKKyAgICBOU1N0cmluZyogaWRlbnRpZmllclN0ciA9IGtleUlk
ZW50aWZpZXJGb3JLZXlFdmVudChldmVudCk7CisKKyAgICAvLyBCZWdpbiBBcHBsZSBjb2RlLCBj
b3BpZWQgZnJvbSBLZXlFdmVudE1hYy5tbQorCisgICAgLy8gQWx3YXlzIHVzZSAxMyBmb3IgRW50
ZXIvUmV0dXJuIC0tIHdlIGRvbid0IHdhbnQgdG8gdXNlIEFwcEtpdCdzCisgICAgLy8gZGlmZmVy
ZW50IGNoYXJhY3RlciBmb3IgRW50ZXIuCisgICAgaWYgKHJlc3VsdC53aW5kb3dzS2V5Q29kZSA9
PSAnXHInKSB7CisgICAgICAgIHRleHRTdHIgPSBAIlxyIjsKKyAgICAgICAgdW5tb2RpZmllZFN0
ciA9IEAiXHIiOworICAgIH0KKworICAgIC8vIFRoZSBhZGp1c3RtZW50cyBiZWxvdyBhcmUgb25s
eSBuZWVkZWQgaW4gYmFja3dhcmQgY29tcGF0aWJpbGl0eSBtb2RlLAorICAgIC8vIGJ1dCB3ZSBj
YW5ub3QgdGVsbCB3aGF0IG1vZGUgd2UgYXJlIGluIGZyb20gaGVyZS4KKworICAgIC8vIFR1cm4g
MHg3RiBpbnRvIDgsIGJlY2F1c2UgYmFja3NwYWNlIG5lZWRzIHRvIGFsd2F5cyBiZSA4LgorICAg
IGlmIChbdGV4dFN0ciBpc0VxdWFsVG9TdHJpbmc6QCJceDdGIl0pCisgICAgICAgIHRleHRTdHIg
PSBAIlx4OCI7CisgICAgaWYgKFt1bm1vZGlmaWVkU3RyIGlzRXF1YWxUb1N0cmluZzpAIlx4N0Yi
XSkKKyAgICAgICAgdW5tb2RpZmllZFN0ciA9IEAiXHg4IjsKKyAgICAvLyBBbHdheXMgdXNlIDkg
Zm9yIHRhYiAtLSB3ZSBkb24ndCB3YW50IHRvIHVzZSBBcHBLaXQncyBkaWZmZXJlbnQgY2hhcmFj
dGVyCisgICAgLy8gZm9yIHNoaWZ0LXRhYi4KKyAgICBpZiAocmVzdWx0LndpbmRvd3NLZXlDb2Rl
ID09IDkpIHsKKyAgICAgICAgdGV4dFN0ciA9IEAiXHg5IjsKKyAgICAgICAgdW5tb2RpZmllZFN0
ciA9IEAiXHg5IjsKKyAgICB9CisKKyAgICAvLyBFbmQgQXBwbGUgY29kZS4KKworICAgIGlmIChb
dGV4dFN0ciBsZW5ndGhdIDwgV2ViS2V5Ym9hcmRFdmVudDo6dGV4dExlbmd0aENhcCAmJgorICAg
ICAgICBbdW5tb2RpZmllZFN0ciBsZW5ndGhdIDwgV2ViS2V5Ym9hcmRFdmVudDo6dGV4dExlbmd0
aENhcCkgeworICAgICAgICBbdGV4dFN0ciBnZXRDaGFyYWN0ZXJzOiZyZXN1bHQudGV4dFswXV07
CisgICAgICAgIFt1bm1vZGlmaWVkU3RyIGdldENoYXJhY3RlcnM6JnJlc3VsdC51bm1vZGlmaWVk
VGV4dFswXV07CisgICAgfSBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisg
ICAgW2lkZW50aWZpZXJTdHIgZ2V0Q1N0cmluZzomcmVzdWx0LmtleUlkZW50aWZpZXJbMF0KKyAg
ICAgICAgICAgICAgICAgICAgbWF4TGVuZ3RoOnNpemVvZihyZXN1bHQua2V5SWRlbnRpZmllcikK
KyAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nOk5TQVNDSUlTdHJpbmdFbmNvZGluZ107CisK
KyAgICByZXN1bHQudGltZVN0YW1wU2Vjb25kcyA9IFtldmVudCB0aW1lc3RhbXBdOworCisgICAg
Ly8gV2luZG93cyBhbmQgTGludXggc2V0IHxpc1N5c3RlbUtleXwgaWYgYWx0IGlzIGRvd24uIFdl
YktpdCBsb29rcyBhdCB0aGlzCisgICAgLy8gZmxhZyB0byBkZWNpZGUgaWYgaXQgc2hvdWxkIGhh
bmRsZSBhIGtleSBvciBub3QuIEUuZy4gYWx0LWxlZnQvcmlnaHQKKyAgICAvLyBzaG91bGRuJ3Qg
YmUgdXNlZCBieSBXZWJLaXQgdG8gc2Nyb2xsIHRoZSBjdXJyZW50IHBhZ2UsIGJlY2F1c2Ugd2Ug
d2FudAorICAgIC8vIHRvIGdldCB0aGF0IGtleSBiYWNrIGZvciBpdCB0byBkbyBoaXN0b3J5IG5h
dmlnYXRpb24uIEhlbmNlLCB0aGUKKyAgICAvLyBjb3JyZXNwb25kaW5nIHNpdHVhdGlvbiBvbiBP
UyBYIGlzIHRvIHNldCB0aGlzIGZvciBjbWQga2V5IHByZXNzZXMuCisgICAgaWYgKHJlc3VsdC5t
b2RpZmllcnMgJiBXZWJJbnB1dEV2ZW50OjpNZXRhS2V5KQorICAgICAgICByZXN1bHQuaXNTeXN0
ZW1LZXkgPSB0cnVlOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworV2ViS2V5Ym9hcmRFdmVu
dCBXZWJJbnB1dEV2ZW50RmFjdG9yeTo6a2V5Ym9hcmRFdmVudCh3Y2hhcl90IGNoYXJhY3RlciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IG1vZGlmaWVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZG91YmxlIHRpbWVTdGFtcFNlY29uZHMpCit7CisgICAgLy8ga2V5Ym9hcmRFdmVu
dChOU0V2ZW50KikgZGVwZW5kcyBvbiB0aGUgTlNFdmVudCBvYmplY3QgYW5kCisgICAgLy8gaXQg
aXMgaGFyZCB0byB1c2UgaXQgZnJvbSBtZXRob2RzIG9mIHRoZSBOU1RleHRJbnB1dCBwcm90b2Nv
bC4gRm9yCisgICAgLy8gc3VjaCBtZXRob2RzLCB0aGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBXZWJJ
bnB1dEV2ZW50OjpDaGFyIGV2ZW50IHdpdGhvdXQKKyAgICAvLyB1c2luZyBhIE5TRXZlbnQgb2Jq
ZWN0LgorICAgIFdlYktleWJvYXJkRXZlbnQgcmVzdWx0OworICAgIHJlc3VsdC50eXBlID0gV2Vi
S2l0OjpXZWJJbnB1dEV2ZW50OjpDaGFyOworICAgIHJlc3VsdC50aW1lU3RhbXBTZWNvbmRzID0g
dGltZVN0YW1wU2Vjb25kczsKKyAgICByZXN1bHQubW9kaWZpZXJzID0gbW9kaWZpZXJzOworICAg
IHJlc3VsdC53aW5kb3dzS2V5Q29kZSA9IGNoYXJhY3RlcjsKKyAgICByZXN1bHQubmF0aXZlS2V5
Q29kZSA9IGNoYXJhY3RlcjsKKyAgICByZXN1bHQudGV4dFswXSA9IGNoYXJhY3RlcjsKKyAgICBy
ZXN1bHQudW5tb2RpZmllZFRleHRbMF0gPSBjaGFyYWN0ZXI7CisKKyAgICAvLyBXaW5kb3dzIGFu
ZCBMaW51eCBzZXQgfGlzU3lzdGVtS2V5fCBpZiBhbHQgaXMgZG93bi4gV2ViS2l0IGxvb2tzIGF0
IHRoaXMKKyAgICAvLyBmbGFnIHRvIGRlY2lkZSBpZiBpdCBzaG91bGQgaGFuZGxlIGEga2V5IG9y
IG5vdC4gRS5nLiBhbHQtbGVmdC9yaWdodAorICAgIC8vIHNob3VsZG4ndCBiZSB1c2VkIGJ5IFdl
YktpdCB0byBzY3JvbGwgdGhlIGN1cnJlbnQgcGFnZSwgYmVjYXVzZSB3ZSB3YW50CisgICAgLy8g
dG8gZ2V0IHRoYXQga2V5IGJhY2sgZm9yIGl0IHRvIGRvIGhpc3RvcnkgbmF2aWdhdGlvbi4gSGVu
Y2UsIHRoZQorICAgIC8vIGNvcnJlc3BvbmRpbmcgc2l0dWF0aW9uIG9uIE9TIFggaXMgdG8gc2V0
IHRoaXMgZm9yIGNtZCBrZXkgcHJlc3Nlcy4KKyAgICBpZiAocmVzdWx0Lm1vZGlmaWVycyAmIFdl
YklucHV0RXZlbnQ6Ok1ldGFLZXkpCisgICAgICAgIHJlc3VsdC5pc1N5c3RlbUtleSA9IHRydWU7
CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvLyBXZWJNb3VzZUV2ZW50IC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1dl
Yk1vdXNlRXZlbnQgV2ViSW5wdXRFdmVudEZhY3Rvcnk6Om1vdXNlRXZlbnQoTlNFdmVudCogZXZl
bnQsIE5TVmlldyogdmlldykKK3sKKyAgICBXZWJNb3VzZUV2ZW50IHJlc3VsdDsKKworICAgIHJl
c3VsdC5jbGlja0NvdW50ID0gMDsKKworICAgIHN3aXRjaCAoW2V2ZW50IHR5cGVdKSB7CisgICAg
Y2FzZSBOU01vdXNlRXhpdGVkOgorICAgICAgICByZXN1bHQudHlwZSA9IFdlYklucHV0RXZlbnQ6
Ok1vdXNlTGVhdmU7CisgICAgICAgIHJlc3VsdC5idXR0b24gPSBXZWJNb3VzZUV2ZW50OjpCdXR0
b25Ob25lOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE5TTGVmdE1vdXNlRG93bjoKKyAgICAg
ICAgcmVzdWx0LnR5cGUgPSBXZWJJbnB1dEV2ZW50OjpNb3VzZURvd247CisgICAgICAgIHJlc3Vs
dC5jbGlja0NvdW50ID0gW2V2ZW50IGNsaWNrQ291bnRdOworICAgICAgICByZXN1bHQuYnV0dG9u
ID0gV2ViTW91c2VFdmVudDo6QnV0dG9uTGVmdDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBO
U090aGVyTW91c2VEb3duOgorICAgICAgICByZXN1bHQudHlwZSA9IFdlYklucHV0RXZlbnQ6Ok1v
dXNlRG93bjsKKyAgICAgICAgcmVzdWx0LmNsaWNrQ291bnQgPSBbZXZlbnQgY2xpY2tDb3VudF07
CisgICAgICAgIHJlc3VsdC5idXR0b24gPSBXZWJNb3VzZUV2ZW50OjpCdXR0b25NaWRkbGU7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgTlNSaWdodE1vdXNlRG93bjoKKyAgICAgICAgcmVzdWx0
LnR5cGUgPSBXZWJJbnB1dEV2ZW50OjpNb3VzZURvd247CisgICAgICAgIHJlc3VsdC5jbGlja0Nv
dW50ID0gW2V2ZW50IGNsaWNrQ291bnRdOworICAgICAgICByZXN1bHQuYnV0dG9uID0gV2ViTW91
c2VFdmVudDo6QnV0dG9uUmlnaHQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTlNMZWZ0TW91
c2VVcDoKKyAgICAgICAgcmVzdWx0LnR5cGUgPSBXZWJJbnB1dEV2ZW50OjpNb3VzZVVwOworICAg
ICAgICByZXN1bHQuYnV0dG9uID0gV2ViTW91c2VFdmVudDo6QnV0dG9uTGVmdDsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBOU090aGVyTW91c2VVcDoKKyAgICAgICAgcmVzdWx0LnR5cGUgPSBX
ZWJJbnB1dEV2ZW50OjpNb3VzZVVwOworICAgICAgICByZXN1bHQuYnV0dG9uID0gV2ViTW91c2VF
dmVudDo6QnV0dG9uTWlkZGxlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE5TUmlnaHRNb3Vz
ZVVwOgorICAgICAgICByZXN1bHQudHlwZSA9IFdlYklucHV0RXZlbnQ6Ok1vdXNlVXA7CisgICAg
ICAgIHJlc3VsdC5idXR0b24gPSBXZWJNb3VzZUV2ZW50OjpCdXR0b25SaWdodDsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBOU01vdXNlTW92ZWQ6CisgICAgY2FzZSBOU01vdXNlRW50ZXJlZDoK
KyAgICAgICAgcmVzdWx0LnR5cGUgPSBXZWJJbnB1dEV2ZW50OjpNb3VzZU1vdmU7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgTlNMZWZ0TW91c2VEcmFnZ2VkOgorICAgICAgICByZXN1bHQudHlw
ZSA9IFdlYklucHV0RXZlbnQ6Ok1vdXNlTW92ZTsKKyAgICAgICAgcmVzdWx0LmJ1dHRvbiA9IFdl
Yk1vdXNlRXZlbnQ6OkJ1dHRvbkxlZnQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTlNPdGhl
ck1vdXNlRHJhZ2dlZDoKKyAgICAgICAgcmVzdWx0LnR5cGUgPSBXZWJJbnB1dEV2ZW50OjpNb3Vz
ZU1vdmU7CisgICAgICAgIHJlc3VsdC5idXR0b24gPSBXZWJNb3VzZUV2ZW50OjpCdXR0b25NaWRk
bGU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTlNSaWdodE1vdXNlRHJhZ2dlZDoKKyAgICAg
ICAgcmVzdWx0LnR5cGUgPSBXZWJJbnB1dEV2ZW50OjpNb3VzZU1vdmU7CisgICAgICAgIHJlc3Vs
dC5idXR0b24gPSBXZWJNb3VzZUV2ZW50OjpCdXR0b25SaWdodDsKKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAg
TlNQb2ludCBsb2NhdGlvbiA9IFtOU0V2ZW50IG1vdXNlTG9jYXRpb25dOyAgLy8gZ2xvYmFsIGNv
b3JkaW5hdGVzCisgICAgcmVzdWx0Lmdsb2JhbFggPSBsb2NhdGlvbi54OworICAgIHJlc3VsdC5n
bG9iYWxZID0gW1tbdmlldyB3aW5kb3ddIHNjcmVlbl0gZnJhbWVdLnNpemUuaGVpZ2h0IC0gbG9j
YXRpb24ueTsKKworICAgIE5TUG9pbnQgd2luZG93TG9jYWwgPSBbZXZlbnQgbG9jYXRpb25Jbldp
bmRvd107CisgICAgbG9jYXRpb24gPSBbdmlldyBjb252ZXJ0UG9pbnQ6d2luZG93TG9jYWwgZnJv
bVZpZXc6bmlsXTsKKyAgICByZXN1bHQueSA9IFt2aWV3IGZyYW1lXS5zaXplLmhlaWdodCAtIGxv
Y2F0aW9uLnk7ICAvLyBmbGlwIHkKKyAgICByZXN1bHQueCA9IGxvY2F0aW9uLng7CisgICAgcmVz
dWx0LndpbmRvd1ggPSByZXN1bHQueDsKKyAgICByZXN1bHQud2luZG93WSA9IHJlc3VsdC55Owor
CisgICAgcmVzdWx0Lm1vZGlmaWVycyA9IG1vZGlmaWVyc0Zyb21FdmVudChldmVudCk7CisKKyAg
ICByZXN1bHQudGltZVN0YW1wU2Vjb25kcyA9IFtldmVudCB0aW1lc3RhbXBdOworCisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworLy8gV2ViTW91c2VXaGVlbEV2ZW50IC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXZWJNb3VzZVdoZWVs
RXZlbnQgV2ViSW5wdXRFdmVudEZhY3Rvcnk6Om1vdXNlV2hlZWxFdmVudChOU0V2ZW50KiBldmVu
dCwgTlNWaWV3KiB2aWV3KQoreworICAgIFdlYk1vdXNlV2hlZWxFdmVudCByZXN1bHQ7CisKKyAg
ICByZXN1bHQudHlwZSA9IFdlYklucHV0RXZlbnQ6Ok1vdXNlV2hlZWw7CisgICAgcmVzdWx0LmJ1
dHRvbiA9IFdlYk1vdXNlRXZlbnQ6OkJ1dHRvbk5vbmU7CisKKyAgICByZXN1bHQubW9kaWZpZXJz
ID0gbW9kaWZpZXJzRnJvbUV2ZW50KGV2ZW50KTsKKworICAgIC8vIFNldCBjb29yZGluYXRlcyBi
eSB0cmFuc2xhdGluZyBldmVudCBjb29yZGluYXRlcyBmcm9tIHNjcmVlbiB0byBjbGllbnQuCisg
ICAgTlNQb2ludCBsb2NhdGlvbiA9IFtOU0V2ZW50IG1vdXNlTG9jYXRpb25dOyAgLy8gZ2xvYmFs
IGNvb3JkaW5hdGVzCisgICAgcmVzdWx0Lmdsb2JhbFggPSBsb2NhdGlvbi54OworICAgIHJlc3Vs
dC5nbG9iYWxZID0gbG9jYXRpb24ueTsKKyAgICBOU1BvaW50IHdpbmRvd0xvY2FsID0gW2V2ZW50
IGxvY2F0aW9uSW5XaW5kb3ddOworICAgIGxvY2F0aW9uID0gW3ZpZXcgY29udmVydFBvaW50Ondp
bmRvd0xvY2FsIGZyb21WaWV3Om5pbF07CisgICAgcmVzdWx0LnggPSBsb2NhdGlvbi54OworICAg
IHJlc3VsdC55ID0gW3ZpZXcgZnJhbWVdLnNpemUuaGVpZ2h0IC0gbG9jYXRpb24ueTsgIC8vIGZs
aXAgeQorICAgIHJlc3VsdC53aW5kb3dYID0gcmVzdWx0Lng7CisgICAgcmVzdWx0LndpbmRvd1kg
PSByZXN1bHQueTsKKworICAgIC8vIE9mIE1pY2UgYW5kIE1lbgorICAgIC8vIC0tLS0tLS0tLS0t
LS0tLQorICAgIC8vCisgICAgLy8gVGhlcmUgYXJlIHRocmVlIHR5cGVzIG9mIHNjcm9sbCBkYXRh
IGF2YWlsYWJsZSBvbiBhIHNjcm9sbCB3aGVlbCBDR0V2ZW50LgorICAgIC8vIEFwcGxlJ3MgZG9j
dW1lbnRhdGlvbiAoWzFdKSBpcyByYXRoZXIgdmFndWUgaW4gdGhlaXIgZGlmZmVyZW5jZXMsIGFu
ZCBub3QKKyAgICAvLyB0ZXJyaWJseSBoZWxwZnVsIGluIGRlY2lkaW5nIHdoaWNoIHRvIHVzZS4g
VGhpcyBpcyB3aGF0J3MgcmVhbGx5IGdvaW5nIG9uLgorICAgIC8vCisgICAgLy8gRmlyc3QsIHRo
ZXNlIGV2ZW50cyBiZWhhdmUgdmVyeSBkaWZmZXJlbnRseSBkZXBlbmRpbmcgb24gd2hldGhlciBh
IHN0YW5kYXJkCisgICAgLy8gd2hlZWwgbW91c2UgaXMgdXNlZCAob25lIHRoYXQgc2Nyb2xscyBp
biBkaXNjcmV0ZSB1bml0cykgb3IgYQorICAgIC8vIHRyYWNrcGFkL01pZ2h0eSBNb3VzZSBpcyB1
c2VkICh3aGljaCBib3RoIHByb3ZpZGUgY29udGludW91cyBzY3JvbGxpbmcpLgorICAgIC8vIFlv
dSBtdXN0IGNoZWNrIHRvIHNlZSB3aGljaCB3YXMgdXNlZCBmb3IgdGhlIGV2ZW50IGJ5IHRlc3Rp
bmcgdGhlCisgICAgLy8ga0NHU2Nyb2xsV2hlZWxFdmVudElzQ29udGludW91cyBmaWVsZC4KKyAg
ICAvLworICAgIC8vIFNlY29uZCwgdGhlc2UgZXZlbnRzIHJlZmVyIHRvICJheGVzIi4gQXhpcyAx
IGlzIHRoZSB5LWF4aXMsIGFuZCBheGlzIDIgaXMKKyAgICAvLyB0aGUgeC1heGlzLgorICAgIC8v
CisgICAgLy8gVGhpcmQsIHRoZXJlIGlzIGEgY29uY2VwdCBvZiBtb3VzZSBhY2NlbGVyYXRpb24u
IFNjcm9sbGluZyB0aGUgc2FtZSBhbW91bnQKKyAgICAvLyBvZiBwaHlzaWNhbCBkaXN0YW5jZSB3
aWxsIGdpdmUgeW91IGRpZmZlcmVudCByZXN1bHRzIGxvZ2ljYWxseSBkZXBlbmRpbmcgb24KKyAg
ICAvLyB3aGV0aGVyIHlvdSBzY3JvbGxlZCBhIGxpdHRsZSBhdCBhIHRpbWUgb3IgaW4gb25lIGNv
bnRpbnVvdXMgbW90aW9uLiBTb21lCisgICAgLy8gZmllbGRzIGFjY291bnQgZm9yIHRoaXMgd2hp
bGUgb3RoZXJzIGRvIG5vdC4KKyAgICAvLworICAgIC8vIEZvdXJ0aCwgZm9yIHRyYWNrcGFkcyB0
aGVyZSBpcyBhIGNvbmNlcHQgb2YgY2h1bmtpbmVzcy4gV2hlbiBzY3JvbGxpbmcKKyAgICAvLyBj
b250aW51b3VzbHksIGV2ZW50cyBjYW4gYmUgZGVsaXZlcmVkIGluIGNodW5rcy4gVGhhdCBpcyB0
byBzYXksIGxvdHMgb2YKKyAgICAvLyBzY3JvbGwgZXZlbnRzIHdpdGggZGVsdGEgMCB3aWxsIGJl
IGRlbGl2ZXJlZCwgYW5kIGV2ZXJ5IHNvIG9mdGVuIGFuIGV2ZW50CisgICAgLy8gd2l0aCBhIG5v
bi16ZXJvIGRlbHRhIHdpbGwgYmUgZGVsaXZlcmVkLCBjb250YWluaW5nIHRoZSBhY2N1bXVsYXRl
ZCBkZWx0YXMKKyAgICAvLyBmcm9tIGFsbCB0aGUgaW50ZXJtZWRpYXRlIG1vdmVzLiBbMl0KKyAg
ICAvLworICAgIC8vIEZvciBub3RjaHkgd2hlZWwgbWljZSAoa0NHU2Nyb2xsV2hlZWxFdmVudElz
Q29udGludW91cyA9PSAwKQorICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vCisgICAgLy8ga0NHU2Nyb2xsV2hl
ZWxFdmVudERlbHRhQXhpcyoKKyAgICAvLyAgIFRoaXMgaXMgdGhlIHJhd2VzdCBvZiByYXcgZXZl
bnRzLiBGb3IgZWFjaCBtb3VzZSBub3RjaCB5b3UgZ2V0IGEgdmFsdWUgb2YKKyAgICAvLyAgICsx
Ly0xLiBUaGlzIGRvZXMgbm90IHRha2UgYWNjZWxlcmF0aW9uIGludG8gYWNjb3VudCBhbmQgdGh1
cyBpcyBsZXNzCisgICAgLy8gICB1c2VmdWwgZm9yIGJ1aWxkaW5nIFVJcy4KKyAgICAvLworICAg
IC8vIGtDR1Njcm9sbFdoZWVsRXZlbnRQb2ludERlbHRhQXhpcyoKKyAgICAvLyAgIFRoaXMgaXMg
c21hcnRlci4gSW4gZ2VuZXJhbCwgZm9yIGVhY2ggbW91c2Ugbm90Y2ggeW91IGdldCBhIHZhbHVl
IG9mCisgICAgLy8gICArMS8tMSwgYnV0IHRoaXMgX2RvZXNfIHRha2UgYWNjZWxlcmF0aW9uIGlu
dG8gYWNjb3VudCwgc28geW91IHdpbGwgZ2V0CisgICAgLy8gICBsYXJnZXIgdmFsdWVzIG9uIGxv
bmdlciBzY3JvbGxzLiBUaGlzIGZpZWxkIHdvdWxkIGJlIGlkZWFsIGZvciBidWlsZGluZworICAg
IC8vICAgVUlzIGV4Y2VwdCBmb3Igb25lIG5hc3R5IGJ1Zzogd2hlbiB0aGUgc2hpZnQga2V5IGlz
IHByZXNzZWQsIHRoaXMgc2V0IG9mCisgICAgLy8gICBmaWVsZHMgZmFpbHMgdG8gbW92ZSB0aGUg
dmFsdWUgaW50byB0aGUgYXhpczIgZmllbGQgKHRoZSBvdGhlciB0d28gdHlwZXMKKyAgICAvLyAg
IG9mIGRhdGEgZG8pLiBUaGlzIHdvdWxkbid0IGJlIHNvIGJhZCBleGNlcHQgZm9yIHRoZSBmYWN0
IHRoYXQgd2hpbGUgdGhlCisgICAgLy8gICBudW1iZXIgb2YgYXhlcyBpcyB1c2VkIGluIHRoZSBj
cmVhdGlvbiBvZiBhIENHU2Nyb2xsV2hlZWxFdmVudCwgdGhlcmUgaXMKKyAgICAvLyAgIG5vIHdh
eSB0byBnZXQgdGhhdCBpbmZvcm1hdGlvbiBvdXQgb2YgdGhlIGV2ZW50IG9uY2UgY3JlYXRlZC4K
KyAgICAvLworICAgIC8vIGtDR1Njcm9sbFdoZWVsRXZlbnRGaXhlZFB0RGVsdGFBeGlzKgorICAg
IC8vICAgVGhpcyBpcyBhIGZpeGVkIHZhbHVlLCBhbmQgZm9yIGVhY2ggbW91c2Ugbm90Y2ggeW91
IGdldCBhIHZhbHVlIG9mCisgICAgLy8gICArMC4xLy0wLjEgKGJ1dCwgbGlrZSBhYm92ZSwgc2Nh
bGVkIGFwcHJvcHJpYXRlbHkgZm9yIGFjY2VsZXJhdGlvbikuIFRoaXMKKyAgICAvLyAgIHZhbHVl
IHRha2VzIGFjY2VsZXJhdGlvbiBpbnRvIGFjY291bnQsIGFuZCBpbiBmYWN0IGlzIGlkZW50aWNh
bCB0byB0aGUKKyAgICAvLyAgIHJlc3VsdHMgeW91IGdldCBmcm9tIC1bTlNFdmVudCBkZWx0YSpd
LiAoVGhhdCBpcywgaWYgeW91IGxpbmtlZCBvbiBUaWdlcgorICAgIC8vICAgb3IgZ3JlYXRlcjsg
c2VlIFsyXSBmb3IgZGV0YWlscy4pCisgICAgLy8KKyAgICAvLyBBIG5vdGUgYWJvdXQgY29udGlu
dW91cyBkZXZpY2VzCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAg
IC8vCisgICAgLy8gVGhlcmUgYXJlIHR3byBkZXZpY2VzIHRoYXQgcHJvdmlkZSBjb250aW51b3Vz
IHNjcm9sbGluZyBldmVudHMgKHRyYWNrcGFkcworICAgIC8vIGFuZCBNaWdodHkgTW91c2VzKSBh
bmQgdGhleSBiZWhhdmUgcmF0aGVyIGRpZmZlcmVudGx5LiBUaGUgTWlnaHR5IE1vdXNlCisgICAg
Ly8gYmVoYXZlcyBhIGxvdCBsaWtlIGEgcmVndWxhciBtb3VzZS4gVGhlcmUgaXMgbm8gY2h1bmtp
bmcsIGFuZCB0aGUKKyAgICAvLyBGaXhlZFB0RGVsdGEgdmFsdWVzIGFyZSB0aGUgUG9pbnREZWx0
YSB2YWx1ZXMgbXVsdGlwbGllZCBieSAwLjEuIFdpdGggdGhlCisgICAgLy8gdHJhY2twYWQsIHRo
b3VnaCwgdGhlcmUgaXMgY2h1bmtpbmcuIFdoaWxlIHRoZSBGaXhlZFB0RGVsdGEgdmFsdWVzIGFy
ZQorICAgIC8vIHJlYXNvbmFibGUgKHRoZXkgb2NjdXIgYWJvdXQgZXZlcnkgZmlmdGggZXZlbnQg
YnV0IGhhdmUgdmFsdWVzIGZpdmUgdGltZXMKKyAgICAvLyBsYXJnZXIgdGhhbiB1c3VhbCkgdGhl
IERlbHRhIHZhbHVlcyBhcmUgdW5yZWFzb25hYmxlLiBUaGV5IGRvbid0IGFwcGVhciB0bworICAg
IC8vIGFjY3VtdWxhdGUgcHJvcGVybHkuCisgICAgLy8KKyAgICAvLyBGb3IgY29udGludW91cyBk
ZXZpY2VzIChrQ0dTY3JvbGxXaGVlbEV2ZW50SXNDb250aW51b3VzICE9IDApCisgICAgLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorICAgIC8vCisgICAgLy8ga0NHU2Nyb2xsV2hlZWxFdmVudERlbHRhQXhpcyoKKyAgICAvLyAg
IFRoaXMgcHJvdmlkZXMgdmFsdWVzIHdpdGggbm8gYWNjZWxlcmF0aW9uLiBXaXRoIGEgdHJhY2tw
YWQsIHRoZXNlIHZhbHVlcworICAgIC8vICAgYXJlIGNodW5rZWQgYnV0IGVhY2ggbm9uLXplcm8g
dmFsdWUgZG9lcyBub3QgYXBwZWFyIHRvIGJlIGN1bXVsYXRpdmUuCisgICAgLy8gICBUaGlzIHNl
ZW1zIHRvIGJlIGEgYnVnLgorICAgIC8vCisgICAgLy8ga0NHU2Nyb2xsV2hlZWxFdmVudFBvaW50
RGVsdGFBeGlzKgorICAgIC8vICAgVGhpcyBwcm92aWRlcyB2YWx1ZXMgd2l0aCBhY2NlbGVyYXRp
b24uIFdpdGggYSB0cmFja3BhZCwgdGhlc2UgdmFsdWVzIGFyZQorICAgIC8vICAgbm90IGNodW5r
ZWQgYW5kIGFyZSBoaWdobHkgYWNjdXJhdGUuCisgICAgLy8KKyAgICAvLyBrQ0dTY3JvbGxXaGVl
bEV2ZW50Rml4ZWRQdERlbHRhQXhpcyoKKyAgICAvLyAgIFRoaXMgcHJvdmlkZXMgdmFsdWVzIHdp
dGggYWNjZWxlcmF0aW9uLiBXaXRoIGEgdHJhY2twYWQsIHRoZXNlIHZhbHVlcyBhcmUKKyAgICAv
LyAgIGNodW5rZWQgYnV0IHVubGlrZSBEZWx0YSBldmVudHMgYXJlIHByb3Blcmx5IGN1bXVsYXRp
dmUuCisgICAgLy8KKyAgICAvLyBTdW1tYXJ5CisgICAgLy8gLS0tLS0tLQorICAgIC8vCisgICAg
Ly8gSW4gZ2VuZXJhbCB0aGUgYmVzdCBhcHByb2FjaCB0byB0YWtlIGlzOiBkZXRlcm1pbmUgaWYg
dGhlIGV2ZW50IGlzCisgICAgLy8gY29udGludW91cy4gSWYgaXQgaXMgbm90LCB0aGVuIHVzZSB0
aGUgRml4ZWRQdERlbHRhIGV2ZW50cyAob3IganVzdCBzdGljaworICAgIC8vIHdpdGggQ29jb2Eg
ZXZlbnRzKS4gVGhleSBwcm92aWRlIGJvdGggYWNjZWxlcmF0aW9uIGFuZCBwcm9wZXIgaG9yaXpv
bnRhbAorICAgIC8vIHNjcm9sbGluZy4gSWYgdGhlIGV2ZW50IGlzIGNvbnRpbnVvdXMsIHRoZW4g
ZG9pbmcgcGl4ZWwgc2Nyb2xsaW5nIHdpdGggdGhlCisgICAgLy8gUG9pbnREZWx0YSBpcyB0aGUg
d2F5IHRvIGdvLiBJbiBnZW5lcmFsLCBhdm9pZCB0aGUgRGVsdGEgZXZlbnRzLiBUaGV5J3JlCisg
ICAgLy8gdGhlIG9sZGVzdCAoZGF0aW5nIGJhY2sgdG8gMTAuNCwgYmVmb3JlIENHRXZlbnRzIHdl
cmUgcHVibGljKSBidXQgdGhleSBsYWNrCisgICAgLy8gYWNjZWxlcmF0aW9uIGFuZCBwcmVjaXNp
b24sIG1ha2luZyB0aGVtIHVzZWZ1bCBvbmx5IGluIHNwZWNpZmljIGVkZ2UgY2FzZXMuCisgICAg
Ly8KKyAgICAvLyBSZWZlcmVuY2VzCisgICAgLy8gLS0tLS0tLS0tLQorICAgIC8vCisgICAgLy8g
WzFdIDxodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL0NhcmJvbi9SZWZl
cmVuY2UvUXVhcnR6RXZlbnRTZXJ2aWNlc1JlZi9SZWZlcmVuY2UvcmVmZXJlbmNlLmh0bWw+Cisg
ICAgLy8gWzJdIDxodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9yZWxlYXNlbm90ZXMvQ29jb2Ev
QXBwS2l0T2xkZXJOb3Rlcy5odG1sPgorICAgIC8vICAgICBTY3JvbGwgdG8gdGhlIHNlY3Rpb24g
aGVhZGVkICJOU1Njcm9sbFdoZWVsIGV2ZW50cyIuCisgICAgLy8KKyAgICAvLyBQLlMuIFRoZSAi
c21vb3RoIHNjcm9sbGluZyIgb3B0aW9uIGluIHRoZSBzeXN0ZW0gcHJlZmVyZW5jZXMgaXMgdXR0
ZXJseQorICAgIC8vIHVucmVsYXRlZCB0byBhbnkgb2YgdGhpcy4KKworICAgIENHRXZlbnRSZWYg
Y2dFdmVudCA9IFtldmVudCBDR0V2ZW50XTsKKyAgICBBU1NFUlQoY2dFdmVudCk7CisKKyAgICAv
LyBXaGVlbCB0aWNrcyBhcmUgc3VwcG9zZWQgdG8gYmUgcmF3LCB1bmFjY2VsZXJhdGVkIHZhbHVl
cywgb25lIHBlciBwaHlzaWNhbAorICAgIC8vIG1vdXNlIHdoZWVsIG5vdGNoLiBUaGUgZGVsdGEg
ZXZlbnQgaXMgcGVyZmVjdCBmb3IgdGhpcyAoYmVpbmcgYSBnb29kCisgICAgLy8gInNwZWNpZmlj
IGVkZ2UgY2FzZSIgYXMgbWVudGlvbmVkIGFib3ZlKS4gVHJhY2twYWRzLCB1bmZvcnR1bmF0ZWx5
LCBkbworICAgIC8vIGV2ZW50IGNodW5raW5nLCBhbmQgc2VuZGluZyBtb3VzZXdoZWVsIGV2ZW50
cyB3aXRoIDAgdGlja3MgY2F1c2VzIHNvbWUKKyAgICAvLyB3ZWJzaXRlcyB0byBtYWxmdW5jdGlv
bi4gVGhlcmVmb3JlLCBmb3IgYWxsIGNvbnRpbnVvdXMgaW5wdXQgZGV2aWNlcyB3ZSB1c2UKKyAg
ICAvLyB0aGUgcG9pbnQgZGVsdGEgZGF0YSBpbnN0ZWFkLCBzaW5jZSB3ZSBjYW5ub3QgZGlzdGlu
Z3Vpc2ggdHJhY2twYWQgZGF0YQorICAgIC8vIGZyb20gZGF0YSBmcm9tIGFueSBvdGhlciBjb250
aW51b3VzIGRldmljZS4KKworICAgIGlmIChDR0V2ZW50R2V0SW50ZWdlclZhbHVlRmllbGQoY2dF
dmVudCwga0NHU2Nyb2xsV2hlZWxFdmVudElzQ29udGludW91cykpIHsKKyAgICAgICAgcmVzdWx0
LndoZWVsVGlja3NZID0gcmVzdWx0LmRlbHRhWSA9CisgICAgICAgICAgICBDR0V2ZW50R2V0SW50
ZWdlclZhbHVlRmllbGQoY2dFdmVudCwga0NHU2Nyb2xsV2hlZWxFdmVudFBvaW50RGVsdGFBeGlz
MSk7CisgICAgICAgIHJlc3VsdC53aGVlbFRpY2tzWCA9IHJlc3VsdC5kZWx0YVggPQorICAgICAg
ICAgICAgQ0dFdmVudEdldEludGVnZXJWYWx1ZUZpZWxkKGNnRXZlbnQsIGtDR1Njcm9sbFdoZWVs
RXZlbnRQb2ludERlbHRhQXhpczIpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJlc3VsdC53aGVl
bFRpY2tzWSA9CisgICAgICAgICAgICBDR0V2ZW50R2V0SW50ZWdlclZhbHVlRmllbGQoY2dFdmVu
dCwga0NHU2Nyb2xsV2hlZWxFdmVudERlbHRhQXhpczEpOworICAgICAgICByZXN1bHQud2hlZWxU
aWNrc1ggPQorICAgICAgICAgICAgQ0dFdmVudEdldEludGVnZXJWYWx1ZUZpZWxkKGNnRXZlbnQs
IGtDR1Njcm9sbFdoZWVsRXZlbnREZWx0YUF4aXMyKTsKKworICAgICAgICAvLyBDb252ZXJ0IHdo
ZWVsIGRlbHRhIGFtb3VudCB0byBhIG51bWJlciBvZiBwaXhlbHMgdG8gc2Nyb2xsLgorICAgICAg
ICBzdGF0aWMgY29uc3QgZG91YmxlIHNjcm9sbGJhclBpeGVsc1BlckNvY29hVGljayA9IDQwLjA7
CisKKyAgICAgICAgcmVzdWx0LmRlbHRhWCA9IFtldmVudCBkZWx0YVhdICogc2Nyb2xsYmFyUGl4
ZWxzUGVyQ29jb2FUaWNrOworICAgICAgICByZXN1bHQuZGVsdGFZID0gW2V2ZW50IGRlbHRhWV0g
KiBzY3JvbGxiYXJQaXhlbHNQZXJDb2NvYVRpY2s7CisgICAgfQorCisgICAgcmVzdWx0LnRpbWVT
dGFtcFNlY29uZHMgPSBbZXZlbnQgdGltZXN0YW1wXTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9tYWMvV2ViU2NyZWVuSW5mb0ZhY3RvcnkubW0gYi9XZWJLaXQvY2hyb21pdW0vc3JjL21hYy9X
ZWJTY3JlZW5JbmZvRmFjdG9yeS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4yODA1ZjdhCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9tYWMvV2Vi
U2NyZWVuSW5mb0ZhY3RvcnkubW0KQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJXZWJTY3JlZW5JbmZvRmFjdG9yeS5oIgorCisjaW1wb3J0IDxBcHBLaXQv
QXBwS2l0Lmg+CisKKyNpbmNsdWRlICJXZWJTY3JlZW5JbmZvLmgiCisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitzdGF0aWMgTlNTY3JlZW4qIHNjcmVlbkZvcldpbmRvdyhOU1dpbmRvdyogd2luZG93
KQoreworICAgIE5TU2NyZWVuKiBzY3JlZW4gPSBbd2luZG93IHNjcmVlbl07ICAvLyBuaWwgaWYg
dGhlIHdpbmRvdyBpcyBvZmYtc2NyZWVuCisgICAgaWYgKHNjcmVlbikKKyAgICAgICAgcmV0dXJu
IHNjcmVlbjsKKworICAgIE5TQXJyYXkqIHNjcmVlbnMgPSBbTlNTY3JlZW4gc2NyZWVuc107Cisg
ICAgaWYgKFtzY3JlZW5zIGNvdW50XSA+IDApCisgICAgICAgIHJldHVybiBbc2NyZWVucyBvYmpl
Y3RBdEluZGV4OjBdOyAgLy8gc2NyZWVuIGNvbnRhaW5pbmcgdGhlIG1lbnViYXIKKworICAgIHJl
dHVybiBuaWw7Cit9CisKK3N0YXRpYyBXZWJSZWN0IHRvVXNlclNwYWNlKGNvbnN0IE5TUmVjdCYg
cmVjdCwgTlNXaW5kb3cqIGRlc3RpbmF0aW9uKQoreworICAgIENHUmVjdCB1c2VyUmVjdCA9IE5T
UmVjdFRvQ0dSZWN0KHJlY3QpOworCisgICAgdXNlclJlY3Qub3JpZ2luLnkgPQorICAgICAgICBO
U01heFkoW3NjcmVlbkZvcldpbmRvdyhkZXN0aW5hdGlvbikgZnJhbWVdKSAtICh1c2VyUmVjdC5v
cmlnaW4ueSArIHVzZXJSZWN0LnNpemUuaGVpZ2h0KTsgLy8gZmxpcAorCisgICAgaWYgKGRlc3Rp
bmF0aW9uKSB7CisgICAgICAgIENHRmxvYXQgc2NhbGUgPSAxIC8gW2Rlc3RpbmF0aW9uIHVzZXJT
cGFjZVNjYWxlRmFjdG9yXTsgIC8vIHNjYWxlIGRvd24KKyAgICAgICAgdXNlclJlY3Qub3JpZ2lu
LnggKj0gc2NhbGU7CisgICAgICAgIHVzZXJSZWN0Lm9yaWdpbi55ICo9IHNjYWxlOworICAgICAg
ICB1c2VyUmVjdC5zaXplLndpZHRoICo9IHNjYWxlOworICAgICAgICB1c2VyUmVjdC5zaXplLmhl
aWdodCAqPSBzY2FsZTsKKyAgICB9CisKKyAgICByZXR1cm4gV2ViUmVjdCh1c2VyUmVjdC5vcmln
aW4ueCwKKyAgICAgICAgICAgICAgICAgICB1c2VyUmVjdC5vcmlnaW4ueSwKKyAgICAgICAgICAg
ICAgICAgICB1c2VyUmVjdC5zaXplLndpZHRoLAorICAgICAgICAgICAgICAgICAgIHVzZXJSZWN0
LnNpemUuaGVpZ2h0KTsKK30KKworV2ViU2NyZWVuSW5mbyBXZWJTY3JlZW5JbmZvRmFjdG9yeTo6
c2NyZWVuSW5mbyhOU1ZpZXcqIHZpZXcpCit7CisgICAgTlNTdHJpbmcgKmNvbG9yU3BhY2UgPSBO
U0NvbG9yU3BhY2VGcm9tRGVwdGgoW1tOU1NjcmVlbiBkZWVwZXN0U2NyZWVuXSBkZXB0aF0pOwor
CisgICAgV2ViU2NyZWVuSW5mbyByZXN1bHRzOworICAgIHJlc3VsdHMuZGVwdGggPQorICAgICAg
ICBOU0JpdHNQZXJQaXhlbEZyb21EZXB0aChbW05TU2NyZWVuIGRlZXBlc3RTY3JlZW5dIGRlcHRo
XSk7CisgICAgcmVzdWx0cy5kZXB0aFBlckNvbXBvbmVudCA9CisgICAgICAgIE5TQml0c1BlclNh
bXBsZUZyb21EZXB0aChbW05TU2NyZWVuIGRlZXBlc3RTY3JlZW5dIGRlcHRoXSk7CisgICAgcmVz
dWx0cy5pc01vbm9jaHJvbWUgPSBjb2xvclNwYWNlID09IE5TQ2FsaWJyYXRlZFdoaXRlQ29sb3JT
cGFjZQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgY29sb3JTcGFjZSA9PSBOU0NhbGlicmF0
ZWRCbGFja0NvbG9yU3BhY2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IGNvbG9yU3BhY2Ug
PT0gTlNEZXZpY2VXaGl0ZUNvbG9yU3BhY2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IGNv
bG9yU3BhY2UgPT0gTlNEZXZpY2VCbGFja0NvbG9yU3BhY2U7CisgICAgcmVzdWx0cy5yZWN0ID0K
KyAgICAgICAgdG9Vc2VyU3BhY2UoW3NjcmVlbkZvcldpbmRvdyhbdmlldyB3aW5kb3ddKSBmcmFt
ZV0sIFt2aWV3IHdpbmRvd10pOworICAgIHJlc3VsdHMuYXZhaWxhYmxlUmVjdCA9CisgICAgICAg
IHRvVXNlclNwYWNlKFtzY3JlZW5Gb3JXaW5kb3coW3ZpZXcgd2luZG93XSkgdmlzaWJsZUZyYW1l
XSwgW3ZpZXcgd2luZG93XSk7CisgICAgcmV0dXJuIHJlc3VsdHM7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy93aW4vV2ViSW5wdXRF
dmVudEZhY3RvcnkuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy93aW4vV2ViSW5wdXRFdmVudEZh
Y3RvcnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1YmQ5MzUKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL3dpbi9XZWJJbnB1dEV2ZW50RmFj
dG9yeS5jcHAKQEAgLTAsMCArMSw0MzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAw
OSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJXZWJJbnB1dEV2ZW50RmFjdG9yeS5oIgorCisjaW5jbHVkZSAiV2ViSW5wdXRFdmVudC5o
IgorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIGRlZmF1bHRTY3JvbGxMaW5lc1BlcldoZWVsRGVs
dGEgPSAzOworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgZGVmYXVsdFNjcm9sbENoYXJzUGVy
V2hlZWxEZWx0YSA9IDE7CisKKy8vIFdlYktleWJvYXJkRXZlbnQgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworc3RhdGljIGJvb2wg
aXNLZXlQYWQoV1BBUkFNIHdwYXJhbSwgTFBBUkFNIGxwYXJhbSkKK3sKKyAgICBib29sIGtleXBh
ZCA9IGZhbHNlOworICAgIHN3aXRjaCAod3BhcmFtKSB7CisgICAgY2FzZSBWS19SRVRVUk46Cisg
ICAgICAgIGtleXBhZCA9IChscGFyYW0gPj4gMTYpICYgS0ZfRVhURU5ERUQ7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgVktfSU5TRVJUOgorICAgIGNhc2UgVktfREVMRVRFOgorICAgIGNhc2Ug
VktfSE9NRToKKyAgICBjYXNlIFZLX0VORDoKKyAgICBjYXNlIFZLX1BSSU9SOgorICAgIGNhc2Ug
VktfTkVYVDoKKyAgICBjYXNlIFZLX1VQOgorICAgIGNhc2UgVktfRE9XTjoKKyAgICBjYXNlIFZL
X0xFRlQ6CisgICAgY2FzZSBWS19SSUdIVDoKKyAgICAgICAga2V5cGFkID0gISgobHBhcmFtID4+
IDE2KSAmIEtGX0VYVEVOREVEKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBWS19OVU1MT0NL
OgorICAgIGNhc2UgVktfTlVNUEFEMDoKKyAgICBjYXNlIFZLX05VTVBBRDE6CisgICAgY2FzZSBW
S19OVU1QQUQyOgorICAgIGNhc2UgVktfTlVNUEFEMzoKKyAgICBjYXNlIFZLX05VTVBBRDQ6Cisg
ICAgY2FzZSBWS19OVU1QQUQ1OgorICAgIGNhc2UgVktfTlVNUEFENjoKKyAgICBjYXNlIFZLX05V
TVBBRDc6CisgICAgY2FzZSBWS19OVU1QQUQ4OgorICAgIGNhc2UgVktfTlVNUEFEOToKKyAgICBj
YXNlIFZLX0RJVklERToKKyAgICBjYXNlIFZLX01VTFRJUExZOgorICAgIGNhc2UgVktfU1VCVFJB
Q1Q6CisgICAgY2FzZSBWS19BREQ6CisgICAgY2FzZSBWS19ERUNJTUFMOgorICAgIGNhc2UgVktf
Q0xFQVI6CisgICAgICAgIGtleXBhZCA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIGtleXBhZCA9IGZhbHNlOworICAgIH0KKyAgICByZXR1cm4ga2V5cGFkOwor
fQorCitXZWJLZXlib2FyZEV2ZW50IFdlYklucHV0RXZlbnRGYWN0b3J5OjprZXlib2FyZEV2ZW50
KEhXTkQgaHduZCwgVUlOVCBtZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBXUEFSQU0gd3BhcmFtLCBMUEFSQU0gbHBhcmFtKQorewor
ICAgIFdlYktleWJvYXJkRXZlbnQgcmVzdWx0OworCisgICAgLy8gVE9ETyhwa2FzdGluZyk6IGh0
dHA6Ly9iLzExMTc5MjYgQXJlIHdlIGd1YXJhbnRlZWQgdGhhdCB0aGUgbWVzc2FnZSB0aGF0Cisg
ICAgLy8gR2V0TWVzc2FnZVRpbWUoKSByZWZlcnMgdG8gaXMgdGhlIHNhbWUgb25lIHRoYXQgd2Un
cmUgcGFzc2VkIGluPyBQZXJoYXBzCisgICAgLy8gb25lIG9mIHRoZSBjb25zdHJ1Y3Rpb24gcGFy
YW1ldGVycyBzaG91bGQgYmUgdGhlIHRpbWUgcGFzc2VkIGJ5IHRoZQorICAgIC8vIGNhbGxlciwg
d2hvIHdvdWxkIGtub3cgZm9yIHN1cmUuCisgICAgcmVzdWx0LnRpbWVTdGFtcFNlY29uZHMgPSBH
ZXRNZXNzYWdlVGltZSgpIC8gMTAwMC4wOworCisgICAgcmVzdWx0LndpbmRvd3NLZXlDb2RlID0g
cmVzdWx0Lm5hdGl2ZUtleUNvZGUgPSBzdGF0aWNfY2FzdDxpbnQ+KHdwYXJhbSk7CisKKyAgICBz
d2l0Y2ggKG1lc3NhZ2UpIHsKKyAgICBjYXNlIFdNX1NZU0tFWURPV046CisgICAgICAgIHJlc3Vs
dC5pc1N5c3RlbUtleSA9IHRydWU7CisgICAgY2FzZSBXTV9LRVlET1dOOgorICAgICAgICByZXN1
bHQudHlwZSA9IFdlYklucHV0RXZlbnQ6OlJhd0tleURvd247CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgV01fU1lTS0VZVVA6CisgICAgICAgIHJlc3VsdC5pc1N5c3RlbUtleSA9IHRydWU7Cisg
ICAgY2FzZSBXTV9LRVlVUDoKKyAgICAgICAgcmVzdWx0LnR5cGUgPSBXZWJJbnB1dEV2ZW50OjpL
ZXlVcDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXTV9JTUVfQ0hBUjoKKyAgICAgICAgcmVz
dWx0LnR5cGUgPSBXZWJJbnB1dEV2ZW50OjpDaGFyOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFdNX1NZU0NIQVI6CisgICAgICAgIHJlc3VsdC5pc1N5c3RlbUtleSA9IHRydWU7CisgICAgICAg
IHJlc3VsdC50eXBlID0gV2ViSW5wdXRFdmVudDo6Q2hhcjsKKyAgICBjYXNlIFdNX0NIQVI6Cisg
ICAgICAgIHJlc3VsdC50eXBlID0gV2ViSW5wdXRFdmVudDo6Q2hhcjsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisg
ICAgaWYgKHJlc3VsdC50eXBlID09IFdlYklucHV0RXZlbnQ6OkNoYXIgfHwgcmVzdWx0LnR5cGUg
PT0gV2ViSW5wdXRFdmVudDo6UmF3S2V5RG93bikgeworICAgICAgICByZXN1bHQudGV4dFswXSA9
IHJlc3VsdC53aW5kb3dzS2V5Q29kZTsKKyAgICAgICAgcmVzdWx0LnVubW9kaWZpZWRUZXh0WzBd
ID0gcmVzdWx0LndpbmRvd3NLZXlDb2RlOworICAgIH0KKyAgICBpZiAocmVzdWx0LnR5cGUgIT0g
V2ViSW5wdXRFdmVudDo6Q2hhcikKKyAgICAgICAgcmVzdWx0LnNldEtleUlkZW50aWZpZXJGcm9t
V2luZG93c0tleUNvZGUoKTsKKworICAgIGlmIChHZXRLZXlTdGF0ZShWS19TSElGVCkgJiAweDgw
MDApCisgICAgICAgIHJlc3VsdC5tb2RpZmllcnMgfD0gV2ViSW5wdXRFdmVudDo6U2hpZnRLZXk7
CisgICAgaWYgKEdldEtleVN0YXRlKFZLX0NPTlRST0wpICYgMHg4MDAwKQorICAgICAgICByZXN1
bHQubW9kaWZpZXJzIHw9IFdlYklucHV0RXZlbnQ6OkNvbnRyb2xLZXk7CisgICAgaWYgKEdldEtl
eVN0YXRlKFZLX01FTlUpICYgMHg4MDAwKQorICAgICAgICByZXN1bHQubW9kaWZpZXJzIHw9IFdl
YklucHV0RXZlbnQ6OkFsdEtleTsKKyAgICAvLyBOT1RFOiBUaGVyZSBkb2Vzbid0IHNlZW0gdG8g
YmUgYSB3YXkgdG8gcXVlcnkgdGhlIG1vdXNlIGJ1dHRvbiBzdGF0ZSBpbgorICAgIC8vIHRoaXMg
Y2FzZS4KKworICAgIGlmIChMT1dPUkQobHBhcmFtKSA+IDEpCisgICAgICAgIHJlc3VsdC5tb2Rp
ZmllcnMgfD0gV2ViSW5wdXRFdmVudDo6SXNBdXRvUmVwZWF0OworICAgIGlmIChpc0tleVBhZCh3
cGFyYW0sIGxwYXJhbSkpCisgICAgICAgIHJlc3VsdC5tb2RpZmllcnMgfD0gV2ViSW5wdXRFdmVu
dDo6SXNLZXlQYWQ7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvLyBXZWJNb3VzZUV2ZW50
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKK3N0YXRpYyBpbnQgZ0xhc3RDbGlja0NvdW50Oworc3RhdGljIGRvdWJsZSBnTGFz
dENsaWNrVGltZTsKKworc3RhdGljIExQQVJBTSBHZXRSZWxhdGl2ZUN1cnNvclBvcyhIV05EIGh3
bmQpCit7CisgICAgUE9JTlQgcG9zID0gey0xLCAtMX07CisgICAgR2V0Q3Vyc29yUG9zKCZwb3Mp
OworICAgIFNjcmVlblRvQ2xpZW50KGh3bmQsICZwb3MpOworICAgIHJldHVybiBNQUtFTFBBUkFN
KHBvcy54LCBwb3MueSk7Cit9CisKK3ZvaWQgV2ViSW5wdXRFdmVudEZhY3Rvcnk6OnJlc2V0TGFz
dENsaWNrU3RhdGUoKQoreworICAgIGdMYXN0Q2xpY2tUaW1lID0gZ0xhc3RDbGlja0NvdW50ID0g
MDsKK30KKworV2ViTW91c2VFdmVudCBXZWJJbnB1dEV2ZW50RmFjdG9yeTo6bW91c2VFdmVudChI
V05EIGh3bmQsIFVJTlQgbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgV1BBUkFNIHdwYXJhbSwgTFBBUkFNIGxwYXJhbSkKK3sKKyAgICBXZWJN
b3VzZUV2ZW50IHJlc3VsdDsgLy8oV2ViSW5wdXRFdmVudDo6VW5pbml0aWFsaXplZCgpKTsKKwor
ICAgIHN3aXRjaCAobWVzc2FnZSkgeworICAgIGNhc2UgV01fTU9VU0VNT1ZFOgorICAgICAgICBy
ZXN1bHQudHlwZSA9IFdlYklucHV0RXZlbnQ6Ok1vdXNlTW92ZTsKKyAgICAgICAgaWYgKHdwYXJh
bSAmIE1LX0xCVVRUT04pCisgICAgICAgICAgICByZXN1bHQuYnV0dG9uID0gV2ViTW91c2VFdmVu
dDo6QnV0dG9uTGVmdDsKKyAgICAgICAgZWxzZSBpZiAod3BhcmFtICYgTUtfTUJVVFRPTikKKyAg
ICAgICAgICAgIHJlc3VsdC5idXR0b24gPSBXZWJNb3VzZUV2ZW50OjpCdXR0b25NaWRkbGU7Cisg
ICAgICAgIGVsc2UgaWYgKHdwYXJhbSAmIE1LX1JCVVRUT04pCisgICAgICAgICAgICByZXN1bHQu
YnV0dG9uID0gV2ViTW91c2VFdmVudDo6QnV0dG9uUmlnaHQ7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHJlc3VsdC5idXR0b24gPSBXZWJNb3VzZUV2ZW50OjpCdXR0b25Ob25lOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFdNX01PVVNFTEVBVkU6CisgICAgICAgIHJlc3VsdC50eXBlID0g
V2ViSW5wdXRFdmVudDo6TW91c2VMZWF2ZTsKKyAgICAgICAgcmVzdWx0LmJ1dHRvbiA9IFdlYk1v
dXNlRXZlbnQ6OkJ1dHRvbk5vbmU7CisgICAgICAgIC8vIHNldCB0aGUgY3VycmVudCBtb3VzZSBw
b3NpdGlvbiAocmVsYXRpdmUgdG8gdGhlIGNsaWVudCBhcmVhIG9mIHRoZQorICAgICAgICAvLyBj
dXJyZW50IHdpbmRvdykgc2luY2Ugbm9uZSBpcyBzcGVjaWZpZWQgZm9yIHRoaXMgZXZlbnQKKyAg
ICAgICAgbHBhcmFtID0gR2V0UmVsYXRpdmVDdXJzb3JQb3MoaHduZCk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgV01fTEJVVFRPTkRPV046CisgICAgY2FzZSBXTV9MQlVUVE9OREJMQ0xLOgor
ICAgICAgICByZXN1bHQudHlwZSA9IFdlYklucHV0RXZlbnQ6Ok1vdXNlRG93bjsKKyAgICAgICAg
cmVzdWx0LmJ1dHRvbiA9IFdlYk1vdXNlRXZlbnQ6OkJ1dHRvbkxlZnQ7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgV01fTUJVVFRPTkRPV046CisgICAgY2FzZSBXTV9NQlVUVE9OREJMQ0xLOgor
ICAgICAgICByZXN1bHQudHlwZSA9IFdlYklucHV0RXZlbnQ6Ok1vdXNlRG93bjsKKyAgICAgICAg
cmVzdWx0LmJ1dHRvbiA9IFdlYk1vdXNlRXZlbnQ6OkJ1dHRvbk1pZGRsZTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBXTV9SQlVUVE9ORE9XTjoKKyAgICBjYXNlIFdNX1JCVVRUT05EQkxDTEs6
CisgICAgICAgIHJlc3VsdC50eXBlID0gV2ViSW5wdXRFdmVudDo6TW91c2VEb3duOworICAgICAg
ICByZXN1bHQuYnV0dG9uID0gV2ViTW91c2VFdmVudDo6QnV0dG9uUmlnaHQ7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgV01fTEJVVFRPTlVQOgorICAgICAgICByZXN1bHQudHlwZSA9IFdlYklu
cHV0RXZlbnQ6Ok1vdXNlVXA7CisgICAgICAgIHJlc3VsdC5idXR0b24gPSBXZWJNb3VzZUV2ZW50
OjpCdXR0b25MZWZ0OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdNX01CVVRUT05VUDoKKyAg
ICAgICAgcmVzdWx0LnR5cGUgPSBXZWJJbnB1dEV2ZW50OjpNb3VzZVVwOworICAgICAgICByZXN1
bHQuYnV0dG9uID0gV2ViTW91c2VFdmVudDo6QnV0dG9uTWlkZGxlOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFdNX1JCVVRUT05VUDoKKyAgICAgICAgcmVzdWx0LnR5cGUgPSBXZWJJbnB1dEV2
ZW50OjpNb3VzZVVwOworICAgICAgICByZXN1bHQuYnV0dG9uID0gV2ViTW91c2VFdmVudDo6QnV0
dG9uUmlnaHQ7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIC8vIFRPRE8ocGthc3RpbmcpOiBodHRwOi8vYi8x
MTE3OTI2IEFyZSB3ZSBndWFyYW50ZWVkIHRoYXQgdGhlIG1lc3NhZ2UgdGhhdAorICAgIC8vIEdl
dE1lc3NhZ2VUaW1lKCkgcmVmZXJzIHRvIGlzIHRoZSBzYW1lIG9uZSB0aGF0IHdlJ3JlIHBhc3Nl
ZCBpbj8gUGVyaGFwcworICAgIC8vIG9uZSBvZiB0aGUgY29uc3RydWN0aW9uIHBhcmFtZXRlcnMg
c2hvdWxkIGJlIHRoZSB0aW1lIHBhc3NlZCBieSB0aGUKKyAgICAvLyBjYWxsZXIsIHdobyB3b3Vs
ZCBrbm93IGZvciBzdXJlLgorICAgIHJlc3VsdC50aW1lU3RhbXBTZWNvbmRzID0gR2V0TWVzc2Fn
ZVRpbWUoKSAvIDEwMDAuMDsKKworICAgIC8vIHNldCBwb3NpdGlvbiBmaWVsZHM6CisKKyAgICBy
ZXN1bHQueCA9IHN0YXRpY19jYXN0PHNob3J0PihMT1dPUkQobHBhcmFtKSk7CisgICAgcmVzdWx0
LnkgPSBzdGF0aWNfY2FzdDxzaG9ydD4oSElXT1JEKGxwYXJhbSkpOworICAgIHJlc3VsdC53aW5k
b3dYID0gcmVzdWx0Lng7CisgICAgcmVzdWx0LndpbmRvd1kgPSByZXN1bHQueTsKKworICAgIFBP
SU5UIGdsb2JhbFBvaW50ID0geyByZXN1bHQueCwgcmVzdWx0LnkgfTsKKyAgICBDbGllbnRUb1Nj
cmVlbihod25kLCAmZ2xvYmFsUG9pbnQpOworCisgICAgcmVzdWx0Lmdsb2JhbFggPSBnbG9iYWxQ
b2ludC54OworICAgIHJlc3VsdC5nbG9iYWxZID0gZ2xvYmFsUG9pbnQueTsKKworICAgIC8vIGNh
bGN1bGF0ZSBudW1iZXIgb2YgY2xpY2tzOgorCisgICAgLy8gVGhpcyBkaWZmZXJzIHNsaWdodGx5
IGZyb20gdGhlIFdlYktpdCBjb2RlIGluIFdlYktpdC93aW4vV2ViVmlldy5jcHAKKyAgICAvLyB3
aGVyZSB0aGVpciBvcmlnaW5hbCBjb2RlIGxvb2tzIGJ1Z2d5LgorICAgIHN0YXRpYyBpbnQgbGFz
dENsaWNrUG9zaXRpb25YOworICAgIHN0YXRpYyBpbnQgbGFzdENsaWNrUG9zaXRpb25ZOworICAg
IHN0YXRpYyBXZWJNb3VzZUV2ZW50OjpCdXR0b24gbGFzdENsaWNrQnV0dG9uID0gV2ViTW91c2VF
dmVudDo6QnV0dG9uTGVmdDsKKworICAgIGRvdWJsZSBjdXJyZW50VGltZSA9IHJlc3VsdC50aW1l
U3RhbXBTZWNvbmRzOworICAgIGJvb2wgY2FuY2VsUHJldmlvdXNDbGljayA9CisgICAgICAgIChh
YnMobGFzdENsaWNrUG9zaXRpb25YIC0gcmVzdWx0LngpID4gKEdldFN5c3RlbU1ldHJpY3MoU01f
Q1hET1VCTEVDTEspIC8gMikpCisgICAgICAgIHx8IChhYnMobGFzdENsaWNrUG9zaXRpb25ZIC0g
cmVzdWx0LnkpID4gKEdldFN5c3RlbU1ldHJpY3MoU01fQ1lET1VCTEVDTEspIC8gMikpCisgICAg
ICAgIHx8ICgoY3VycmVudFRpbWUgLSBnTGFzdENsaWNrVGltZSkgKiAxMDAwLjAgPiBHZXREb3Vi
bGVDbGlja1RpbWUoKSk7CisKKyAgICBpZiAocmVzdWx0LnR5cGUgPT0gV2ViSW5wdXRFdmVudDo6
TW91c2VEb3duKSB7CisgICAgICAgIGlmICghY2FuY2VsUHJldmlvdXNDbGljayAmJiAocmVzdWx0
LmJ1dHRvbiA9PSBsYXN0Q2xpY2tCdXR0b24pKQorICAgICAgICAgICAgKytnTGFzdENsaWNrQ291
bnQ7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZ0xhc3RDbGlja0NvdW50ID0gMTsKKyAg
ICAgICAgICAgIGxhc3RDbGlja1Bvc2l0aW9uWCA9IHJlc3VsdC54OworICAgICAgICAgICAgbGFz
dENsaWNrUG9zaXRpb25ZID0gcmVzdWx0Lnk7CisgICAgICAgIH0KKyAgICAgICAgZ0xhc3RDbGlj
a1RpbWUgPSBjdXJyZW50VGltZTsKKyAgICAgICAgbGFzdENsaWNrQnV0dG9uID0gcmVzdWx0LmJ1
dHRvbjsKKyAgICB9IGVsc2UgaWYgKHJlc3VsdC50eXBlID09IFdlYklucHV0RXZlbnQ6Ok1vdXNl
TW92ZQorICAgICAgICAgICAgICAgfHwgcmVzdWx0LnR5cGUgPT0gV2ViSW5wdXRFdmVudDo6TW91
c2VMZWF2ZSkgeworICAgICAgICBpZiAoY2FuY2VsUHJldmlvdXNDbGljaykgeworICAgICAgICAg
ICAgZ0xhc3RDbGlja0NvdW50ID0gMDsKKyAgICAgICAgICAgIGxhc3RDbGlja1Bvc2l0aW9uWCA9
IDA7CisgICAgICAgICAgICBsYXN0Q2xpY2tQb3NpdGlvblkgPSAwOworICAgICAgICAgICAgZ0xh
c3RDbGlja1RpbWUgPSAwOworICAgICAgICB9CisgICAgfQorICAgIHJlc3VsdC5jbGlja0NvdW50
ID0gZ0xhc3RDbGlja0NvdW50OworCisgICAgLy8gc2V0IG1vZGlmaWVyczoKKworICAgIGlmICh3
cGFyYW0gJiBNS19DT05UUk9MKQorICAgICAgICByZXN1bHQubW9kaWZpZXJzIHw9IFdlYklucHV0
RXZlbnQ6OkNvbnRyb2xLZXk7CisgICAgaWYgKHdwYXJhbSAmIE1LX1NISUZUKQorICAgICAgICBy
ZXN1bHQubW9kaWZpZXJzIHw9IFdlYklucHV0RXZlbnQ6OlNoaWZ0S2V5OworICAgIGlmIChHZXRL
ZXlTdGF0ZShWS19NRU5VKSAmIDB4ODAwMCkKKyAgICAgICAgcmVzdWx0Lm1vZGlmaWVycyB8PSBX
ZWJJbnB1dEV2ZW50OjpBbHRLZXk7CisgICAgaWYgKHdwYXJhbSAmIE1LX0xCVVRUT04pCisgICAg
ICAgIHJlc3VsdC5tb2RpZmllcnMgfD0gV2ViSW5wdXRFdmVudDo6TGVmdEJ1dHRvbkRvd247Cisg
ICAgaWYgKHdwYXJhbSAmIE1LX01CVVRUT04pCisgICAgICAgIHJlc3VsdC5tb2RpZmllcnMgfD0g
V2ViSW5wdXRFdmVudDo6TWlkZGxlQnV0dG9uRG93bjsKKyAgICBpZiAod3BhcmFtICYgTUtfUkJV
VFRPTikKKyAgICAgICAgcmVzdWx0Lm1vZGlmaWVycyB8PSBXZWJJbnB1dEV2ZW50OjpSaWdodEJ1
dHRvbkRvd247CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvLyBXZWJNb3VzZVdoZWVsRXZl
bnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKK1dlYk1vdXNlV2hlZWxFdmVudCBXZWJJbnB1dEV2ZW50RmFjdG9yeTo6bW91c2VXaGVl
bEV2ZW50KEhXTkQgaHduZCwgVUlOVCBtZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV1BBUkFNIHdwYXJhbSwgTFBBUkFNIGxw
YXJhbSkKK3sKKyAgICBXZWJNb3VzZVdoZWVsRXZlbnQgcmVzdWx0OyAvLyhXZWJJbnB1dEV2ZW50
OjpVbmluaXRpYWxpemVkKCkpOworCisgICAgcmVzdWx0LnR5cGUgPSBXZWJJbnB1dEV2ZW50OjpN
b3VzZVdoZWVsOworCisgICAgLy8gVE9ETyhwa2FzdGluZyk6IGh0dHA6Ly9iLzExMTc5MjYgQXJl
IHdlIGd1YXJhbnRlZWQgdGhhdCB0aGUgbWVzc2FnZSB0aGF0CisgICAgLy8gR2V0TWVzc2FnZVRp
bWUoKSByZWZlcnMgdG8gaXMgdGhlIHNhbWUgb25lIHRoYXQgd2UncmUgcGFzc2VkIGluPyBQZXJo
YXBzCisgICAgLy8gb25lIG9mIHRoZSBjb25zdHJ1Y3Rpb24gcGFyYW1ldGVycyBzaG91bGQgYmUg
dGhlIHRpbWUgcGFzc2VkIGJ5IHRoZQorICAgIC8vIGNhbGxlciwgd2hvIHdvdWxkIGtub3cgZm9y
IHN1cmUuCisgICAgcmVzdWx0LnRpbWVTdGFtcFNlY29uZHMgPSBHZXRNZXNzYWdlVGltZSgpIC8g
MTAwMC4wOworCisgICAgcmVzdWx0LmJ1dHRvbiA9IFdlYk1vdXNlRXZlbnQ6OkJ1dHRvbk5vbmU7
CisKKyAgICAvLyBHZXQga2V5IHN0YXRlLCBjb29yZGluYXRlcywgYW5kIHdoZWVsIGRlbHRhIGZy
b20gZXZlbnQuCisgICAgdHlwZWRlZiBTSE9SVCAoV0lOQVBJICpHZXRLZXlTdGF0ZUZ1bmN0aW9u
KShpbnQga2V5KTsKKyAgICBHZXRLZXlTdGF0ZUZ1bmN0aW9uIGdldEtleVN0YXRlOworICAgIFVJ
TlQga2V5U3RhdGU7CisgICAgZmxvYXQgd2hlZWxEZWx0YTsKKyAgICBib29sIGhvcml6b250YWxT
Y3JvbGwgPSBmYWxzZTsKKyAgICBpZiAoKG1lc3NhZ2UgPT0gV01fVlNDUk9MTCkgfHwgKG1lc3Nh
Z2UgPT0gV01fSFNDUk9MTCkpIHsKKyAgICAgICAgLy8gU3ludGhlc2l6ZSBtb3VzZXdoZWVsIGV2
ZW50IGZyb20gYSBzY3JvbGwgZXZlbnQuICBUaGlzIGlzIG5lZWRlZCB0bworICAgICAgICAvLyBz
aW11bGF0ZSBtaWRkbGUgbW91c2Ugc2Nyb2xsaW5nIGluIHNvbWUgbGFwdG9wcy4gIFVzZSBHZXRB
c3luY0tleVN0YXRlCisgICAgICAgIC8vIGZvciBrZXkgc3RhdGUgc2luY2Ugd2UgYXJlIHN5bnRo
ZXNpemluZyB0aGUgaW5wdXQgZXZlbnQuCisgICAgICAgIGdldEtleVN0YXRlID0gR2V0QXN5bmNL
ZXlTdGF0ZTsKKyAgICAgICAga2V5U3RhdGUgPSAwOworICAgICAgICBpZiAoZ2V0S2V5U3RhdGUo
VktfU0hJRlQpKQorICAgICAgICAgICAga2V5U3RhdGUgfD0gTUtfU0hJRlQ7CisgICAgICAgIGlm
IChnZXRLZXlTdGF0ZShWS19DT05UUk9MKSkKKyAgICAgICAgICAgIGtleVN0YXRlIHw9IE1LX0NP
TlRST0w7CisgICAgICAgIC8vIE5PVEU6IFRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIHdheSB0
byBxdWVyeSB0aGUgbW91c2UgYnV0dG9uIHN0YXRlCisgICAgICAgIC8vIGluIHRoaXMgY2FzZS4K
KworICAgICAgICBQT0lOVCBjdXJzb3JQb3NpdGlvbiA9IHswfTsKKyAgICAgICAgR2V0Q3Vyc29y
UG9zKCZjdXJzb3JQb3NpdGlvbik7CisgICAgICAgIHJlc3VsdC5nbG9iYWxYID0gY3Vyc29yUG9z
aXRpb24ueDsKKyAgICAgICAgcmVzdWx0Lmdsb2JhbFkgPSBjdXJzb3JQb3NpdGlvbi55OworCisg
ICAgICAgIHN3aXRjaCAoTE9XT1JEKHdwYXJhbSkpIHsKKyAgICAgICAgY2FzZSBTQl9MSU5FVVA6
ICAgIC8vID09IFNCX0xJTkVMRUZUCisgICAgICAgICAgICB3aGVlbERlbHRhID0gV0hFRUxfREVM
VEE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTQl9MSU5FRE9XTjogIC8vID09
IFNCX0xJTkVSSUdIVAorICAgICAgICAgICAgd2hlZWxEZWx0YSA9IC1XSEVFTF9ERUxUQTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNCX1BBR0VVUDoKKyAgICAgICAgICAgIHdo
ZWVsRGVsdGEgPSAxOworICAgICAgICAgICAgcmVzdWx0LnNjcm9sbEJ5UGFnZSA9IHRydWU7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTQl9QQUdFRE9XTjoKKyAgICAgICAgICAg
IHdoZWVsRGVsdGEgPSAtMTsKKyAgICAgICAgICAgIHJlc3VsdC5zY3JvbGxCeVBhZ2UgPSB0cnVl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6ICAvLyBXZSBkb24ndCBzdXBv
cHJ0IFNCX1RIVU1CUE9TSVRJT04gb3IgU0JfVEhVTUJUUkFDSyBoZXJlLgorICAgICAgICAgICAg
d2hlZWxEZWx0YSA9IDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChtZXNzYWdlID09IFdNX0hTQ1JPTEwpCisgICAgICAgICAgICBob3Jpem9udGFsU2Nyb2xs
ID0gdHJ1ZTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBOb24tc3ludGhlc2l6ZWQgZXZlbnQ7
IHdlIGNhbiBqdXN0IHJlYWQgZGF0YSBvZmYgdGhlIGV2ZW50LgorICAgICAgICBnZXRLZXlTdGF0
ZSA9IEdldEtleVN0YXRlOworICAgICAgICBrZXlTdGF0ZSA9IEdFVF9LRVlTVEFURV9XUEFSQU0o
d3BhcmFtKTsKKworICAgICAgICByZXN1bHQuZ2xvYmFsWCA9IHN0YXRpY19jYXN0PHNob3J0PihM
T1dPUkQobHBhcmFtKSk7CisgICAgICAgIHJlc3VsdC5nbG9iYWxZID0gc3RhdGljX2Nhc3Q8c2hv
cnQ+KEhJV09SRChscGFyYW0pKTsKKworICAgICAgICB3aGVlbERlbHRhID0gc3RhdGljX2Nhc3Q8
ZmxvYXQ+KEdFVF9XSEVFTF9ERUxUQV9XUEFSQU0od3BhcmFtKSk7CisgICAgICAgIGlmIChtZXNz
YWdlID09IFdNX01PVVNFSFdIRUVMKSB7CisgICAgICAgICAgICBob3Jpem9udGFsU2Nyb2xsID0g
dHJ1ZTsKKyAgICAgICAgICAgIHdoZWVsRGVsdGEgPSAtd2hlZWxEZWx0YTsgIC8vIFdpbmRvd3Mg
aXMgPC0gLS8rIC0+LCBXZWJLaXQgPC0gKy8tIC0+LgorICAgICAgICB9CisgICAgfQorICAgIGlm
IChrZXlTdGF0ZSAmIE1LX1NISUZUKQorICAgICAgICBob3Jpem9udGFsU2Nyb2xsID0gdHJ1ZTsK
KworICAgIC8vIFNldCBtb2RpZmllcnMgYmFzZWQgb24ga2V5IHN0YXRlLgorICAgIGlmIChrZXlT
dGF0ZSAmIE1LX1NISUZUKQorICAgICAgICByZXN1bHQubW9kaWZpZXJzIHw9IFdlYklucHV0RXZl
bnQ6OlNoaWZ0S2V5OworICAgIGlmIChrZXlTdGF0ZSAmIE1LX0NPTlRST0wpCisgICAgICAgIHJl
c3VsdC5tb2RpZmllcnMgfD0gV2ViSW5wdXRFdmVudDo6Q29udHJvbEtleTsKKyAgICBpZiAoZ2V0
S2V5U3RhdGUoVktfTUVOVSkgJiAweDgwMDApCisgICAgICAgIHJlc3VsdC5tb2RpZmllcnMgfD0g
V2ViSW5wdXRFdmVudDo6QWx0S2V5OworICAgIGlmIChrZXlTdGF0ZSAmIE1LX0xCVVRUT04pCisg
ICAgICAgIHJlc3VsdC5tb2RpZmllcnMgfD0gV2ViSW5wdXRFdmVudDo6TGVmdEJ1dHRvbkRvd247
CisgICAgaWYgKGtleVN0YXRlICYgTUtfTUJVVFRPTikKKyAgICAgICAgcmVzdWx0Lm1vZGlmaWVy
cyB8PSBXZWJJbnB1dEV2ZW50OjpNaWRkbGVCdXR0b25Eb3duOworICAgIGlmIChrZXlTdGF0ZSAm
IE1LX1JCVVRUT04pCisgICAgICAgIHJlc3VsdC5tb2RpZmllcnMgfD0gV2ViSW5wdXRFdmVudDo6
UmlnaHRCdXR0b25Eb3duOworCisgICAgLy8gU2V0IGNvb3JkaW5hdGVzIGJ5IHRyYW5zbGF0aW5n
IGV2ZW50IGNvb3JkaW5hdGVzIGZyb20gc2NyZWVuIHRvIGNsaWVudC4KKyAgICBQT0lOVCBjbGll
bnRQb2ludCA9IHsgcmVzdWx0Lmdsb2JhbFgsIHJlc3VsdC5nbG9iYWxZIH07CisgICAgTWFwV2lu
ZG93UG9pbnRzKDAsIGh3bmQsICZjbGllbnRQb2ludCwgMSk7CisgICAgcmVzdWx0LnggPSBjbGll
bnRQb2ludC54OworICAgIHJlc3VsdC55ID0gY2xpZW50UG9pbnQueTsKKyAgICByZXN1bHQud2lu
ZG93WCA9IHJlc3VsdC54OworICAgIHJlc3VsdC53aW5kb3dZID0gcmVzdWx0Lnk7CisKKyAgICAv
LyBDb252ZXJ0IHdoZWVsIGRlbHRhIGFtb3VudCB0byBhIG51bWJlciBvZiBwaXhlbHMgdG8gc2Ny
b2xsLgorICAgIC8vCisgICAgLy8gSG93IG1hbnkgcGl4ZWxzIHNob3VsZCB3ZSBzY3JvbGwgcGVy
IGxpbmU/ICBHZWNrbyB1c2VzIHRoZSBoZWlnaHQgb2YgdGhlCisgICAgLy8gY3VycmVudCBsaW5l
LCB3aGljaCBtZWFucyBzY3JvbGwgZGlzdGFuY2UgY2hhbmdlcyBhcyB5b3UgZ28gdGhyb3VnaCB0
aGUKKyAgICAvLyBwYWdlIG9yIGdvIHRvIGRpZmZlcmVudCBwYWdlcy4gIElFIDcgaXMgfjUwIHB4
L2xpbmUsIGFsdGhvdWdoIHRoZSB2YWx1ZQorICAgIC8vIHNlZW1zIHRvIHZhcnkgc2xpZ2h0bHkg
YnkgcGFnZSBhbmQgem9vbSBsZXZlbC4gIFNpbmNlIElFIDcgaGFzIGEgc21vb3RoaW5nCisgICAg
Ly8gYWxnb3JpdGhtIG9uIHNjcm9sbGluZywgaXQgY2FuIGdldCBhd2F5IHdpdGggc2xpZ2h0bHkg
bGFyZ2VyIHNjcm9sbCB2YWx1ZXMKKyAgICAvLyB3aXRob3V0IGZlZWxpbmcgamVya3kuICBIZXJl
IHdlIHVzZSAxMDAgcHggcGVyIHRocmVlIGxpbmVzICh0aGUgZGVmYXVsdAorICAgIC8vIHNjcm9s
bCBhbW91bnQgaXMgdGhyZWUgbGluZXMgcGVyIHdoZWVsIHRpY2spLgorICAgIHN0YXRpYyBjb25z
dCBmbG9hdCBzY3JvbGxiYXJQaXhlbHNQZXJMaW5lID0gMTAwLjBmIC8gMy4wZjsKKyAgICB3aGVl
bERlbHRhIC89IFdIRUVMX0RFTFRBOworICAgIGZsb2F0IHNjcm9sbERlbHRhID0gd2hlZWxEZWx0
YTsKKyAgICBpZiAoaG9yaXpvbnRhbFNjcm9sbCkgeworICAgICAgICB1bnNpZ25lZCBsb25nIHNj
cm9sbENoYXJzID0gZGVmYXVsdFNjcm9sbENoYXJzUGVyV2hlZWxEZWx0YTsKKyAgICAgICAgU3lz
dGVtUGFyYW1ldGVyc0luZm8oU1BJX0dFVFdIRUVMU0NST0xMQ0hBUlMsIDAsICZzY3JvbGxDaGFy
cywgMCk7CisgICAgICAgIC8vIFRPRE8ocGthc3RpbmcpOiBTaG91bGQgcHJvYmFibHkgaGF2ZSBh
IGRpZmZlcmVudCBtdWx0aXBsaWVyCisgICAgICAgIC8vIHNjcm9sbGJhclBpeGVsc1BlckNoYXIg
aGVyZS4KKyAgICAgICAgc2Nyb2xsRGVsdGEgKj0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHNjcm9sbENo
YXJzKSAqIHNjcm9sbGJhclBpeGVsc1BlckxpbmU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdW5z
aWduZWQgbG9uZyBzY3JvbGxMaW5lcyA9IGRlZmF1bHRTY3JvbGxMaW5lc1BlcldoZWVsRGVsdGE7
CisgICAgICAgIFN5c3RlbVBhcmFtZXRlcnNJbmZvKFNQSV9HRVRXSEVFTFNDUk9MTExJTkVTLCAw
LCAmc2Nyb2xsTGluZXMsIDApOworICAgICAgICBpZiAoc2Nyb2xsTGluZXMgPT0gV0hFRUxfUEFH
RVNDUk9MTCkKKyAgICAgICAgICAgIHJlc3VsdC5zY3JvbGxCeVBhZ2UgPSB0cnVlOworICAgICAg
ICBpZiAoIXJlc3VsdC5zY3JvbGxCeVBhZ2UpCisgICAgICAgICAgICBzY3JvbGxEZWx0YSAqPSBz
dGF0aWNfY2FzdDxmbG9hdD4oc2Nyb2xsTGluZXMpICogc2Nyb2xsYmFyUGl4ZWxzUGVyTGluZTsK
KyAgICB9CisKKyAgICAvLyBTZXQgc2Nyb2xsIGFtb3VudCBiYXNlZCBvbiBhYm92ZSBjYWxjdWxh
dGlvbnMuICBXZWJLaXQgZXhwZWN0cyBwb3NpdGl2ZQorICAgIC8vIGRlbHRhWSB0byBtZWFuICJz
Y3JvbGwgdXAiIGFuZCBwb3NpdGl2ZSBkZWx0YVggdG8gbWVhbiAic2Nyb2xsIGxlZnQiLgorICAg
IGlmIChob3Jpem9udGFsU2Nyb2xsKSB7CisgICAgICAgIHJlc3VsdC5kZWx0YVggPSBzY3JvbGxE
ZWx0YTsKKyAgICAgICAgcmVzdWx0LndoZWVsVGlja3NYID0gd2hlZWxEZWx0YTsKKyAgICB9IGVs
c2UgeworICAgICAgICByZXN1bHQuZGVsdGFZID0gc2Nyb2xsRGVsdGE7CisgICAgICAgIHJlc3Vs
dC53aGVlbFRpY2tzWSA9IHdoZWVsRGVsdGE7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0v
c3JjL3dpbi9XZWJTY3JlZW5JbmZvRmFjdG9yeS5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL3dp
bi9XZWJTY3JlZW5JbmZvRmFjdG9yeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uODQxNmFjYwotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvd2lu
L1dlYlNjcmVlbkluZm9GYWN0b3J5LmNwcApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIldlYlNjcmVlbkluZm9GYWN0b3J5LmgiCisKKyNpbmNsdWRlICJX
ZWJTY3JlZW5JbmZvLmgiCisKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitzdGF0aWMgV2ViUmVjdCB0b1dlYlJlY3QoY29uc3QgUkVDVCYgaW5wdXQpCit7Cisg
ICAgV2ViUmVjdCBvdXRwdXQ7CisgICAgb3V0cHV0LnggPSBpbnB1dC5sZWZ0OworICAgIG91dHB1
dC55ID0gaW5wdXQudG9wOworICAgIG91dHB1dC53aWR0aCA9IGlucHV0LnJpZ2h0IC0gaW5wdXQu
bGVmdDsKKyAgICBvdXRwdXQuaGVpZ2h0ID0gaW5wdXQuYm90dG9tIC0gaW5wdXQudG9wOworICAg
IHJldHVybiBvdXRwdXQ7Cit9CisKK1dlYlNjcmVlbkluZm8gV2ViU2NyZWVuSW5mb0ZhY3Rvcnk6
OnNjcmVlbkluZm8oSFdORCB3aW5kb3cpCit7CisgICAgSE1PTklUT1IgbW9uaXRvciA9IE1vbml0
b3JGcm9tV2luZG93KHdpbmRvdywgTU9OSVRPUl9ERUZBVUxUVE9QUklNQVJZKTsKKworICAgIE1P
TklUT1JJTkZPRVggbW9uaXRvckluZm87CisgICAgbW9uaXRvckluZm8uY2JTaXplID0gc2l6ZW9m
KE1PTklUT1JJTkZPRVgpOworICAgIEdldE1vbml0b3JJbmZvKG1vbml0b3IsICZtb25pdG9ySW5m
byk7CisKKyAgICBERVZNT0RFIGRldk1vZGU7CisgICAgZGV2TW9kZS5kbVNpemUgPSBzaXplb2Yo
ZGV2TW9kZSk7CisgICAgZGV2TW9kZS5kbURyaXZlckV4dHJhID0gMDsKKyAgICBFbnVtRGlzcGxh
eVNldHRpbmdzKG1vbml0b3JJbmZvLnN6RGV2aWNlLCBFTlVNX0NVUlJFTlRfU0VUVElOR1MsICZk
ZXZNb2RlKTsKKworICAgIFdlYlNjcmVlbkluZm8gcmVzdWx0czsKKyAgICByZXN1bHRzLmRlcHRo
ID0gZGV2TW9kZS5kbUJpdHNQZXJQZWw7CisgICAgcmVzdWx0cy5kZXB0aFBlckNvbXBvbmVudCA9
IGRldk1vZGUuZG1CaXRzUGVyUGVsIC8gMzsgIC8vIEFzc3VtZXMgUkdCCisgICAgcmVzdWx0cy5p
c01vbm9jaHJvbWUgPSBkZXZNb2RlLmRtQ29sb3IgPT0gRE1DT0xPUl9NT05PQ0hST01FOworICAg
IHJlc3VsdHMucmVjdCA9IHRvV2ViUmVjdChtb25pdG9ySW5mby5yY01vbml0b3IpOworICAgIHJl
c3VsdHMuYXZhaWxhYmxlUmVjdCA9IHRvV2ViUmVjdChtb25pdG9ySW5mby5yY1dvcmspOworICAg
IHJldHVybiByZXN1bHRzOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1dlYktpdC9jaHJvbWl1bS9zcmMveDExL1dlYlNjcmVlbkluZm9GYWN0b3J5LmNwcCBiL1dlYktp
dC9jaHJvbWl1bS9zcmMveDExL1dlYlNjcmVlbkluZm9GYWN0b3J5LmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDg4ODBjCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0
L2Nocm9taXVtL3NyYy94MTEvV2ViU2NyZWVuSW5mb0ZhY3RvcnkuY3BwCkBAIC0wLDAgKzEsNjEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViU2NyZWVuSW5mb0ZhY3RvcnkuaCIK
KworI2luY2x1ZGUgIldlYlNjcmVlbkluZm8uaCIKKworI2luY2x1ZGUgPFgxMS9YbGliLmg+CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJTY3JlZW5JbmZvIFdlYlNjcmVlbkluZm9GYWN0b3J5
OjpzY3JlZW5JbmZvKERpc3BsYXkqIGRpc3BsYXksIGludCBzY3JlZW5OdW1iZXIpCit7CisgICAg
V2ViU2NyZWVuSW5mbyByZXN1bHRzOworICAgIC8vIEZJWE1FOiBub3QgYWxsIHNjcmVlbnMgd2l0
aCB1c2UgOGJwcC4KKyAgICByZXN1bHRzLmRlcHRoUGVyQ29tcG9uZW50ID0gODsKKworICAgIGlu
dCBkaXNwbGF5V2lkdGggPSBYRGlzcGxheVdpZHRoKGRpc3BsYXksIHNjcmVlbk51bWJlcik7Cisg
ICAgaW50IGRpc3BsYXlIZWlnaHQgPSBYRGlzcGxheUhlaWdodChkaXNwbGF5LCBzY3JlZW5OdW1i
ZXIpOworICAgIHJlc3VsdHMuZGVwdGggPSBYRGlzcGxheVBsYW5lcyhkaXNwbGF5LCBzY3JlZW5O
dW1iZXIpOworICAgIHJlc3VsdHMuaXNNb25vY2hyb21lID0gcmVzdWx0cy5kZXB0aCA9PSAxOwor
CisgICAgcmVzdWx0cy5yZWN0ID0gV2ViUmVjdCgwLCAwLCBkaXNwbGF5V2lkdGgsIGRpc3BsYXlI
ZWlnaHQpOworCisgICAgLy8gSSBkb24ndCBrbm93IG9mIGEgd2F5IHRvIHF1ZXJ5IHRoZSAibWF4
aW1pemUiIHNpemUgb2YgdGhlIHdpbmRvdyAoZS5nLgorICAgIC8vIHNjcmVlbiBzaXplIGxlc3Mg
c2lkZWJhcnMgZXRjKSBzaW5jZSB0aGlzIGlzIHNvbWV0aGluZyB3aGljaCBvbmx5IHRoZQorICAg
IC8vIHdpbmRvdyBtYW5hZ2VyIGtub3dzLgorICAgIHJlc3VsdHMuYXZhaWxhYmxlUmVjdCA9IHJl
c3VsdHMucmVjdDsKKworICAgIHJldHVybiByZXN1bHRzOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQ=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42873</attachid>
            <date>2009-11-10 10:18:06 -0800</date>
            <delta_ts>2009-11-10 11:52:53 -0800</delta_ts>
            <desc>Up-streaming Chromium API src files: WebWorker and friends.</desc>
            <filename>bug-31276-20091110101804.patch</filename>
            <type>text/plain</type>
            <size>58938</size>
            <attacher name="Yaar Schnitman">yaar</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IDg4Y2VhMDcuLjExNDdhZmIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMiw2ICsy
LDg3IEBACiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAKKyAgICAgICAg
VXAtc3RyZWFtaW5nIENocm9taXVtIEFQSSBzcmMgZmlsZXM6IFdlYldvcmtlciBhbmQgZnJpZW5k
cy4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzEy
NzYKKworICAgICAgICAqIHNyYy9XZWJXb3JrZXJCYXNlLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJLaXQ6OldvcmtlcldlYkZyYW1lQ2xpZW50OjpkaWRDcmVhdGVEYXRhU291cmNlKToKKyAgICAg
ICAgKFdlYktpdDo6V29ya2VyV2ViRnJhbWVDbGllbnQ6OnNoYXJlZEluc3RhbmNlKToKKyAgICAg
ICAgKFdlYktpdDo6V29ya2VyV2ViRnJhbWVDbGllbnQ6OldvcmtlcldlYkZyYW1lQ2xpZW50KToK
KyAgICAgICAgKFdlYktpdDo6aW5pdGlhbGl6ZVdlYktpdFN0YXRpY1ZhbHVlcyk6CisgICAgICAg
IChXZWJLaXQ6OldlYldvcmtlckJhc2U6OldlYldvcmtlckJhc2UpOgorICAgICAgICAoV2ViS2l0
OjpXZWJXb3JrZXJCYXNlOjp+V2ViV29ya2VyQmFzZSk6CisgICAgICAgIChXZWJLaXQ6OldlYldv
cmtlckJhc2U6OnN0b3BXb3JrZXJUaHJlYWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJC
YXNlOjppbml0aWFsaXplTG9hZGVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyQmFzZTo6
ZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFkKToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyQmFz
ZTo6aW52b2tlVGFza01ldGhvZCk6CisgICAgICAgIChXZWJLaXQ6OldlYldvcmtlckJhc2U6OnBv
c3RNZXNzYWdlVG9Xb3JrZXJPYmplY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJCYXNl
Ojpwb3N0TWVzc2FnZVRhc2spOgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJCYXNlOjpwb3N0
RXhjZXB0aW9uVG9Xb3JrZXJPYmplY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJCYXNl
Ojpwb3N0RXhjZXB0aW9uVGFzayk6CisgICAgICAgIChXZWJLaXQ6OldlYldvcmtlckJhc2U6OnBv
c3RDb25zb2xlTWVzc2FnZVRvV29ya2VyT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViV29y
a2VyQmFzZTo6cG9zdENvbnNvbGVNZXNzYWdlVGFzayk6CisgICAgICAgIChXZWJLaXQ6OldlYldv
cmtlckJhc2U6OmNvbmZpcm1NZXNzYWdlRnJvbVdvcmtlck9iamVjdCk6CisgICAgICAgIChXZWJL
aXQ6OldlYldvcmtlckJhc2U6OmNvbmZpcm1NZXNzYWdlVGFzayk6CisgICAgICAgIChXZWJLaXQ6
OldlYldvcmtlckJhc2U6OnJlcG9ydFBlbmRpbmdBY3Rpdml0eSk6CisgICAgICAgIChXZWJLaXQ6
OldlYldvcmtlckJhc2U6OnJlcG9ydFBlbmRpbmdBY3Rpdml0eVRhc2spOgorICAgICAgICAoV2Vi
S2l0OjpXZWJXb3JrZXJCYXNlOjp3b3JrZXJDb250ZXh0Q2xvc2VkKToKKyAgICAgICAgKFdlYktp
dDo6V2ViV29ya2VyQmFzZTo6d29ya2VyQ29udGV4dENsb3NlZFRhc2spOgorICAgICAgICAoV2Vi
S2l0OjpXZWJXb3JrZXJCYXNlOjp3b3JrZXJDb250ZXh0RGVzdHJveWVkKToKKyAgICAgICAgKFdl
YktpdDo6V2ViV29ya2VyQmFzZTo6d29ya2VyQ29udGV4dERlc3Ryb3llZFRhc2spOgorICAgICAg
ICAoV2ViS2l0OjpXZWJXb3JrZXJCYXNlOjpwb3N0VGFza1RvTG9hZGVyKToKKyAgICAgICAgKFdl
YktpdDo6V2ViV29ya2VyQmFzZTo6cG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0KToKKyAg
ICAgICAgKiBzcmMvV2ViV29ya2VyQmFzZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vi
V29ya2VyQmFzZTo6c2V0V29ya2VyVGhyZWFkKToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2Vy
QmFzZTo6d29ya2VyVGhyZWFkKToKKyAgICAgICAgKiBzcmMvV2ViV29ya2VyQ2xpZW50SW1wbC5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJDbGllbnRJbXBsOjpjcmVhdGVX
b3JrZXJDb250ZXh0UHJveHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJDbGllbnRJbXBs
OjpXZWJXb3JrZXJDbGllbnRJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyQ2xpZW50
SW1wbDo6fldlYldvcmtlckNsaWVudEltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJD
bGllbnRJbXBsOjpzZXRXZWJXb3JrZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJDbGll
bnRJbXBsOjpzdGFydFdvcmtlckNvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJD
bGllbnRJbXBsOjp0ZXJtaW5hdGVXb3JrZXJDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
V29ya2VyQ2xpZW50SW1wbDo6cG9zdE1lc3NhZ2VUb1dvcmtlckNvbnRleHQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJXb3JrZXJDbGllbnRJbXBsOjpoYXNQZW5kaW5nQWN0aXZpdHkpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJXb3JrZXJDbGllbnRJbXBsOjp3b3JrZXJPYmplY3REZXN0cm95ZWQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJDbGllbnRJbXBsOjpwb3N0TWVzc2FnZVRvV29ya2Vy
T2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyQ2xpZW50SW1wbDo6cG9zdEV4Y2Vw
dGlvblRvV29ya2VyT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyQ2xpZW50SW1w
bDo6cG9zdENvbnNvbGVNZXNzYWdlVG9Xb3JrZXJPYmplY3QpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJXb3JrZXJDbGllbnRJbXBsOjpjb25maXJtTWVzc2FnZUZyb21Xb3JrZXJPYmplY3QpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJXb3JrZXJDbGllbnRJbXBsOjpyZXBvcnRQZW5kaW5nQWN0aXZpdHkp
OgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJDbGllbnRJbXBsOjp3b3JrZXJDb250ZXh0RGVz
dHJveWVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyQ2xpZW50SW1wbDo6d29ya2VyQ29u
dGV4dENsb3NlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYldvcmtlckNsaWVudEltcGw6OnN0YXJ0
V29ya2VyQ29udGV4dFRhc2spOgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJDbGllbnRJbXBs
Ojp0ZXJtaW5hdGVXb3JrZXJDb250ZXh0VGFzayk6CisgICAgICAgIChXZWJLaXQ6OldlYldvcmtl
ckNsaWVudEltcGw6OnBvc3RNZXNzYWdlVG9Xb3JrZXJDb250ZXh0VGFzayk6CisgICAgICAgIChX
ZWJLaXQ6OldlYldvcmtlckNsaWVudEltcGw6Ondvcmtlck9iamVjdERlc3Ryb3llZFRhc2spOgor
ICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJDbGllbnRJbXBsOjpwb3N0TWVzc2FnZVRvV29ya2Vy
T2JqZWN0VGFzayk6CisgICAgICAgIChXZWJLaXQ6OldlYldvcmtlckNsaWVudEltcGw6OnBvc3RF
eGNlcHRpb25Ub1dvcmtlck9iamVjdFRhc2spOgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJD
bGllbnRJbXBsOjpwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdFRhc2spOgorICAgICAg
ICAoV2ViS2l0OjpXZWJXb3JrZXJDbGllbnRJbXBsOjpjb25maXJtTWVzc2FnZUZyb21Xb3JrZXJP
YmplY3RUYXNrKToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyQ2xpZW50SW1wbDo6cmVwb3J0
UGVuZGluZ0FjdGl2aXR5VGFzayk6CisgICAgICAgICogc3JjL1dlYldvcmtlckNsaWVudEltcGwu
aDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYldvcmtlckNsaWVudEltcGw6OmNyZWF0ZVdv
cmtlcik6CisgICAgICAgIChXZWJLaXQ6OldlYldvcmtlckNsaWVudEltcGw6Om5vdGlmaWNhdGlv
blByZXNlbnRlcik6CisgICAgICAgICogc3JjL1dlYldvcmtlckltcGwuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYktpdDo6V2ViV29ya2VyOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJX
b3JrZXJJbXBsOjpXZWJXb3JrZXJJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VySW1w
bDo6fldlYldvcmtlckltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJJbXBsOjpjb21t
b25DbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJJbXBsOjpwb3N0TWVzc2FnZVRv
V29ya2VyQ29udGV4dFRhc2spOgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJJbXBsOjpzdGFy
dFdvcmtlckNvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJJbXBsOjp0ZXJtaW5h
dGVXb3JrZXJDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VySW1wbDo6cG9zdE1l
c3NhZ2VUb1dvcmtlckNvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJJbXBsOjp3
b3JrZXJPYmplY3REZXN0cm95ZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJJbXBsOjpj
bGllbnREZXN0cm95ZWQpOgorICAgICAgICAqIHNyYy9XZWJXb3JrZXJJbXBsLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJJbXBsOjpjbGllbnQpOgorCisyMDA5LTExLTA5ICBZ
YWFyIFNjaG5pdG1hbiAgPHlhYXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCiAgICAgICAgIFVwLXN0cmVhbWluZyBDaHJvbWl1bSBBUEkgc3Jj
IGZpbGVzOiBXZWJTdHJpbmcuLi5XZWJWaWV3SW1wbAogCiAgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTI3NgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJXb3JrZXJCYXNlLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2Vy
QmFzZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVhMjYzYgotLS0g
L2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQmFzZS5jcHAKQEAg
LTAsMCArMSwzMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViV29ya2VyQmFz
ZS5oIgorCisjaW5jbHVkZSAiR2VuZXJpY1dvcmtlclRhc2suaCIKKyNpbmNsdWRlICJNZXNzYWdl
UG9ydENoYW5uZWwuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5oIgor
CisjaW5jbHVkZSAiV2ViRGF0YVNvdXJjZUltcGwuaCIKKyNpbmNsdWRlICJXZWJGcmFtZUNsaWVu
dC5oIgorI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5oIgorI2luY2x1ZGUgIldlYk1lc3NhZ2VQb3J0
Q2hhbm5lbC5oIgorI2luY2x1ZGUgIldlYlZpZXcuaCIKKyNpbmNsdWRlICJXZWJXb3JrZXJDbGll
bnQuaCIKKworI2luY2x1ZGUgIldvcmtlclRocmVhZC5oIgorI2luY2x1ZGUgPHd0Zi9NYWluVGhy
ZWFkLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsK
KworI2lmIEVOQUJMRShXT1JLRVJTKQorCisvLyBEdW1teSBXZWJWaWV3RGVsZWdhdGUgLSB3ZSBv
bmx5IG5lZWQgaXQgaW4gV29ya2VyIHByb2Nlc3MgdG8gbG9hZCBhCisvLyAnc2hhZG93IHBhZ2Un
IHdoaWNoIHdpbGwgaW5pdGlhbGl6ZSBXZWJDb3JlIGxvYWRlci4KK2NsYXNzIFdvcmtlcldlYkZy
YW1lQ2xpZW50IDogcHVibGljIFdlYkZyYW1lQ2xpZW50IHsKK3B1YmxpYzoKKyAgICAvLyBUZWxs
IHRoZSBsb2FkZXIgdG8gbG9hZCB0aGUgZGF0YSBpbnRvIHRoZSAnc2hhZG93IHBhZ2UnIHN5bmNo
cm9ub3VzbHksCisgICAgLy8gc28gd2UgY2FuIGdyYWIgdGhlIHJlc3VsdGluZyBEb2N1bWVudCBy
aWdodCBhZnRlciBsb2FkLgorICAgIHZpcnR1YWwgdm9pZCBkaWRDcmVhdGVEYXRhU291cmNlKFdl
YkZyYW1lKiBmcmFtZSwgV2ViRGF0YVNvdXJjZSogZHMpCisgICAgeworICAgICAgICBzdGF0aWNf
Y2FzdDxXZWJEYXRhU291cmNlSW1wbCo+KGRzKS0+c2V0RGVmZXJNYWluUmVzb3VyY2VEYXRhTG9h
ZChmYWxzZSk7CisgICAgfQorCisgICAgLy8gTGF6eSBhbGxvY2F0ZSBhbmQgbGVhayB0aGlzIGlu
c3RhbmNlLgorICAgIHN0YXRpYyBXb3JrZXJXZWJGcmFtZUNsaWVudCogc2hhcmVkSW5zdGFuY2Uo
KQorICAgIHsKKyAgICAgICAgc3RhdGljIFdvcmtlcldlYkZyYW1lQ2xpZW50IGNsaWVudDsKKyAg
ICAgICAgcmV0dXJuICZjbGllbnQ7CisgICAgfQorCitwcml2YXRlOgorICAgIFdvcmtlcldlYkZy
YW1lQ2xpZW50KCkKKyAgICB7CisgICAgfQorfTsKKworLy8gVGhpcyBmdW5jdGlvbiBpcyBjYWxs
ZWQgb24gdGhlIG1haW4gdGhyZWFkIHRvIGZvcmNlIHRvIGluaXRpYWxpemUgc29tZSBzdGF0aWMK
Ky8vIHZhbHVlcyB1c2VkIGluIFdlYktpdCBiZWZvcmUgYW55IHdvcmtlciB0aHJlYWQgaXMgc3Rh
cnRlZC4gVGhpcyBpcyBiZWNhdXNlIGluCisvLyBvdXIgd29ya2VyIHByb2Nlc3NzLCB3ZSBkbyBu
b3QgcnVuIGFueSBXZWJLaXQgY29kZSBpbiBtYWluIHRocmVhZCBhbmQgdGh1cworLy8gd2hlbiBt
dWx0aXBsZSB3b3JrZXJzIHRyeSB0byBzdGFydCBhdCB0aGUgc2FtZSB0aW1lLCB3ZSBtaWdodCBo
aXQgY3Jhc2ggZHVlCisvLyB0byBjb250ZW50aW9uIGZvciBpbml0aWFsaXppbmcgc3RhdGljIHZh
bHVlcy4KK3N0YXRpYyB2b2lkIGluaXRpYWxpemVXZWJLaXRTdGF0aWNWYWx1ZXMoKQoreworICAg
IHN0YXRpYyBib29sIGluaXRpYWxpemVkID0gZmFsc2U7CisgICAgaWYgKCFpbml0aWFsaXplZCkg
eworICAgICAgICBpbml0aWFsaXplZCA9IHRydWU7CisgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBo
YXZlIHRvIHBhc3MgYSBVUkwgd2l0aCB2YWxpZCBwcm90b2NvbCBpbiBvcmRlciB0byBmb2xsb3cK
KyAgICAgICAgLy8gdGhlIHBhdGggdG8gZG8gc3RhdGljIHZhbHVlIGluaXRpYWxpemF0aW9ucy4K
KyAgICAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW4gPQorICAgICAgICAgICAgU2Vj
dXJpdHlPcmlnaW46OmNyZWF0ZShLVVJMKFBhcnNlZFVSTFN0cmluZywgImh0dHA6Ly9sb2NhbGhv
c3QiKSk7CisgICAgICAgIG9yaWdpbi5yZWxlYXNlKCk7CisgICAgfQorfQorCitXZWJXb3JrZXJC
YXNlOjpXZWJXb3JrZXJCYXNlKCkKKyAgICA6IG1fd2ViVmlldygwKQorICAgICwgbV9hc2tlZFRv
VGVybWluYXRlKGZhbHNlKQoreworICAgIGluaXRpYWxpemVXZWJLaXRTdGF0aWNWYWx1ZXMoKTsK
K30KKworV2ViV29ya2VyQmFzZTo6fldlYldvcmtlckJhc2UoKQoreworICAgIEFTU0VSVChtX3dl
YlZpZXcpOworICAgIG1fd2ViVmlldy0+Y2xvc2UoKTsKK30KKwordm9pZCBXZWJXb3JrZXJCYXNl
OjpzdG9wV29ya2VyVGhyZWFkKCkKK3sKKyAgICBpZiAobV9hc2tlZFRvVGVybWluYXRlKQorICAg
ICAgICByZXR1cm47CisgICAgbV9hc2tlZFRvVGVybWluYXRlID0gdHJ1ZTsKKyAgICBpZiAobV93
b3JrZXJUaHJlYWQpCisgICAgICAgIG1fd29ya2VyVGhyZWFkLT5zdG9wKCk7Cit9CisKK3ZvaWQg
V2ViV29ya2VyQmFzZTo6aW5pdGlhbGl6ZUxvYWRlcihjb25zdCBXZWJVUkwmIHVybCkKK3sKKyAg
ICAvLyBDcmVhdGUgJ3NoYWRvdyBwYWdlJy4gVGhpcyBwYWdlIGlzIG5ldmVyIGRpc3BsYXllZCwg
aXQgaXMgdXNlZCB0byBwcm94eSB0aGUKKyAgICAvLyBsb2FkaW5nIHJlcXVlc3RzIGZyb20gdGhl
IHdvcmtlciBjb250ZXh0IHRvIHRoZSByZXN0IG9mIFdlYktpdCBhbmQgQ2hyb21pdW0KKyAgICAv
LyBpbmZyYXN0cnVjdHVyZS4KKyAgICBBU1NFUlQoIW1fd2ViVmlldyk7CisgICAgbV93ZWJWaWV3
ID0gV2ViVmlldzo6Y3JlYXRlKDApOworICAgIG1fd2ViVmlldy0+aW5pdGlhbGl6ZU1haW5GcmFt
ZShXb3JrZXJXZWJGcmFtZUNsaWVudDo6c2hhcmVkSW5zdGFuY2UoKSk7CisKKyAgICBXZWJGcmFt
ZUltcGwqIHdlYkZyYW1lID0gc3RhdGljX2Nhc3Q8V2ViRnJhbWVJbXBsKj4obV93ZWJWaWV3LT5t
YWluRnJhbWUoKSk7CisKKyAgICAvLyBDb25zdHJ1Y3Qgc3Vic3RpdHV0ZSBkYXRhIHNvdXJjZSBm
b3IgdGhlICdzaGFkb3cgcGFnZScuIFdlIG9ubHkgbmVlZCBpdAorICAgIC8vIHRvIGhhdmUgc2Ft
ZSBvcmlnaW4gYXMgdGhlIHdvcmtlciBzbyB0aGUgbG9hZGluZyBjaGVja3Mgd29yayBjb3JyZWN0
bHkuCisgICAgQ1N0cmluZyBjb250ZW50KCIiKTsKKyAgICBpbnQgbGVuID0gc3RhdGljX2Nhc3Q8
aW50Pihjb250ZW50Lmxlbmd0aCgpKTsKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWYoU2hh
cmVkQnVmZmVyOjpjcmVhdGUoY29udGVudC5kYXRhKCksIGxlbikpOworICAgIFN1YnN0aXR1dGVE
YXRhIHN1YnN0RGF0YShidWYsIFN0cmluZygidGV4dC9odG1sIiksIFN0cmluZygiVVRGLTgiKSwg
S1VSTCgpKTsKKyAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCh1cmwsIENTdHJpbmcoKSk7Cisg
ICAgd2ViRnJhbWUtPmZyYW1lKCktPmxvYWRlcigpLT5sb2FkKHJlcXVlc3QsIHN1YnN0RGF0YSwg
ZmFsc2UpOworCisgICAgLy8gVGhpcyBkb2N1bWVudCB3aWxsIGJlIHVzZWQgYXMgJ2xvYWRpbmcg
Y29udGV4dCcgZm9yIHRoZSB3b3JrZXIuCisgICAgbV9sb2FkaW5nRG9jdW1lbnQgPSB3ZWJGcmFt
ZS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKTsKK30KKwordm9pZCBXZWJXb3JrZXJCYXNlOjpkaXNwYXRj
aFRhc2tUb01haW5UaHJlYWQoUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNr
PiB0YXNrKQoreworICAgIHJldHVybiBjYWxsT25NYWluVGhyZWFkKGludm9rZVRhc2tNZXRob2Qs
IHRhc2sucmVsZWFzZSgpKTsKK30KKwordm9pZCBXZWJXb3JrZXJCYXNlOjppbnZva2VUYXNrTWV0
aG9kKHZvaWQqIHBhcmFtKQoreworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sqIHRh
c2sgPQorICAgICAgICBzdGF0aWNfY2FzdDxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrKj4o
cGFyYW0pOworICAgIHRhc2stPnBlcmZvcm1UYXNrKDApOworICAgIGRlbGV0ZSB0YXNrOworfQor
CisvLyBXb3JrZXJPYmplY3RQcm94eSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit2b2lkIFdlYldvcmtlckJhc2U6OnBvc3RNZXNz
YWdlVG9Xb3JrZXJPYmplY3QoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1lc3Nh
Z2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc093
blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gY2hhbm5lbHMpCit7CisgICAgZGlzcGF0Y2hU
YXNrVG9NYWluVGhyZWFkKGNyZWF0ZUNhbGxiYWNrVGFzaygmcG9zdE1lc3NhZ2VUYXNrLCB0aGlz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2Fn
ZS0+dG9TdHJpbmcoKSwgY2hhbm5lbHMpKTsKK30KKwordm9pZCBXZWJXb3JrZXJCYXNlOjpwb3N0
TWVzc2FnZVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFdlYldvcmtlckJhc2UqIHRoaXNQdHIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbWVzc2FnZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJy
YXk+IGNoYW5uZWxzKQoreworICAgIGlmICghdGhpc1B0ci0+Y2xpZW50KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIFdlYk1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5IHdlYkNoYW5uZWxzKGNoYW5u
ZWxzLmdldCgpID8gY2hhbm5lbHMtPnNpemUoKSA6IDApOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgd2ViQ2hhbm5lbHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgd2ViQ2hhbm5lbHNbaV0g
PSAoKmNoYW5uZWxzKVtpXS0+Y2hhbm5lbCgpLT53ZWJDaGFubmVsUmVsZWFzZSgpOworICAgICAg
ICB3ZWJDaGFubmVsc1tpXS0+c2V0Q2xpZW50KDApOworICAgIH0KKworICAgIHRoaXNQdHItPmNs
aWVudCgpLT5wb3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0KG1lc3NhZ2UsIHdlYkNoYW5uZWxzKTsK
K30KKwordm9pZCBXZWJXb3JrZXJCYXNlOjpwb3N0RXhjZXB0aW9uVG9Xb3JrZXJPYmplY3QoY29u
c3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgbGluZU51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKQoreworICAg
IGRpc3BhdGNoVGFza1RvTWFpblRocmVhZChjcmVhdGVDYWxsYmFja1Rhc2soJnBvc3RFeGNlcHRp
b25UYXNrLCB0aGlzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZXJyb3JNZXNzYWdlLCBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlVVJMKSk7Cit9CisKK3ZvaWQgV2ViV29ya2Vy
QmFzZTo6cG9zdEV4Y2VwdGlvblRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViV29ya2VyQmFzZSogdGhp
c1B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5n
JiBlcnJvck1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKK3sKKyAgICBpZiAoIXRoaXNQ
dHItPmNvbW1vbkNsaWVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICB0aGlzUHRyLT5jb21t
b25DbGllbnQoKS0+cG9zdEV4Y2VwdGlvblRvV29ya2VyT2JqZWN0KGVycm9yTWVzc2FnZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxp
bmVOdW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzb3VyY2VVUkwpOworfQorCit2b2lkIFdlYldvcmtlckJhc2U6OnBvc3RDb25z
b2xlTWVzc2FnZVRvV29ya2VyT2JqZWN0KE1lc3NhZ2VEZXN0aW5hdGlvbiBkZXN0aW5hdGlvbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVz
c2FnZVNvdXJjZSBzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE1lc3NhZ2VUeXBlIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VMZXZlbCBsZXZlbCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3Ry
aW5nJiBtZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgbGluZU51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCit7CisgICAg
ZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFkKGNyZWF0ZUNhbGxiYWNrVGFzaygmcG9zdENvbnNvbGVN
ZXNzYWdlVGFzaywgdGhpcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludD4oZGVzdGluYXRpb24pLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2Up
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8aW50Pih0eXBlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludD4obGV2ZWwpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlVVJM
KSk7Cit9CisKK3ZvaWQgV2ViV29ya2VyQmFzZTo6cG9zdENvbnNvbGVNZXNzYWdlVGFzayhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFdlYldvcmtlckJhc2UqIHRoaXNQdHIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlc3RpbmF0aW9uLCBpbnQgc291cmNlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0eXBlLCBpbnQg
bGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKQoreworICAgIGlmICghdGhpc1B0ci0+Y29t
bW9uQ2xpZW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICB0aGlzUHRyLT5jb21tb25DbGllbnQo
KS0+cG9zdENvbnNvbGVNZXNzYWdlVG9Xb3JrZXJPYmplY3QoZGVzdGluYXRpb24sIHNvdXJjZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdHlwZSwgbGV2ZWwsIG1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIsIHNvdXJjZVVSTCk7
Cit9CisKK3ZvaWQgV2ViV29ya2VyQmFzZTo6Y29uZmlybU1lc3NhZ2VGcm9tV29ya2VyT2JqZWN0
KGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KQoreworICAgIGRpc3BhdGNoVGFza1RvTWFpblRocmVh
ZChjcmVhdGVDYWxsYmFja1Rhc2soJmNvbmZpcm1NZXNzYWdlVGFzaywgdGhpcywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc1BlbmRpbmdBY3Rpdml0
eSkpOworfQorCit2b2lkIFdlYldvcmtlckJhc2U6OmNvbmZpcm1NZXNzYWdlVGFzayhTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgV2ViV29ya2VyQmFzZSogdGhpc1B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KQoreworICAgIGlmICghdGhp
c1B0ci0+Y2xpZW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICB0aGlzUHRyLT5jbGllbnQoKS0+
Y29uZmlybU1lc3NhZ2VGcm9tV29ya2VyT2JqZWN0KGhhc1BlbmRpbmdBY3Rpdml0eSk7Cit9CisK
K3ZvaWQgV2ViV29ya2VyQmFzZTo6cmVwb3J0UGVuZGluZ0FjdGl2aXR5KGJvb2wgaGFzUGVuZGlu
Z0FjdGl2aXR5KQoreworICAgIGRpc3BhdGNoVGFza1RvTWFpblRocmVhZChjcmVhdGVDYWxsYmFj
a1Rhc2soJnJlcG9ydFBlbmRpbmdBY3Rpdml0eVRhc2ssCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLCBoYXNQZW5kaW5nQWN0aXZpdHkpKTsKK30K
Kwordm9pZCBXZWJXb3JrZXJCYXNlOjpyZXBvcnRQZW5kaW5nQWN0aXZpdHlUYXNrKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgV2ViV29ya2VyQmFzZSogdGhpc1B0ciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSkKK3sK
KyAgICBpZiAoIXRoaXNQdHItPmNsaWVudCgpKQorICAgICAgICByZXR1cm47CisgICAgdGhpc1B0
ci0+Y2xpZW50KCktPnJlcG9ydFBlbmRpbmdBY3Rpdml0eShoYXNQZW5kaW5nQWN0aXZpdHkpOwor
fQorCit2b2lkIFdlYldvcmtlckJhc2U6OndvcmtlckNvbnRleHRDbG9zZWQoKQoreworICAgIGRp
c3BhdGNoVGFza1RvTWFpblRocmVhZChjcmVhdGVDYWxsYmFja1Rhc2soJndvcmtlckNvbnRleHRD
bG9zZWRUYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpcykpOworfQorCit2b2lkIFdlYldvcmtlckJhc2U6OndvcmtlckNvbnRleHRDbG9zZWRU
YXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFdlYldvcmtlckJhc2UqIHRoaXNQdHIpCit7CisgICAg
aWYgKHRoaXNQdHItPmNvbW1vbkNsaWVudCgpKQorICAgICAgICB0aGlzUHRyLT5jb21tb25DbGll
bnQoKS0+d29ya2VyQ29udGV4dENsb3NlZCgpOworfQorCit2b2lkIFdlYldvcmtlckJhc2U6Ondv
cmtlckNvbnRleHREZXN0cm95ZWQoKQoreworICAgIGRpc3BhdGNoVGFza1RvTWFpblRocmVhZChj
cmVhdGVDYWxsYmFja1Rhc2soJndvcmtlckNvbnRleHREZXN0cm95ZWRUYXNrLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcykpOworfQorCit2b2lk
IFdlYldvcmtlckJhc2U6OndvcmtlckNvbnRleHREZXN0cm95ZWRUYXNrKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFdlYldvcmtlckJhc2UqIHRoaXNQdHIpCit7CisgICAgaWYgKHRoaXNQdHItPmNv
bW1vbkNsaWVudCgpKQorICAgICAgICB0aGlzUHRyLT5jb21tb25DbGllbnQoKS0+d29ya2VyQ29u
dGV4dERlc3Ryb3llZCgpOworICAgIC8vIFRoZSBsaWZldGltZSBvZiB0aGlzIHByb3h5IGlzIGNv
bnRyb2xsZWQgYnkgdGhlIHdvcmtlciBjb250ZXh0LgorICAgIGRlbGV0ZSB0aGlzUHRyOworfQor
CisvLyBXb3JrZXJMb2FkZXJQcm94eSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit2b2lkIFdlYldvcmtlckJhc2U6OnBvc3RUYXNr
VG9Mb2FkZXIoUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrKQor
eworICAgIEFTU0VSVChtX2xvYWRpbmdEb2N1bWVudC0+aXNEb2N1bWVudCgpKTsKKyAgICBtX2xv
YWRpbmdEb2N1bWVudC0+cG9zdFRhc2sodGFzayk7Cit9CisKK3ZvaWQgV2ViV29ya2VyQmFzZTo6
cG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0KAorICAgIFBhc3NPd25QdHI8U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDo6VGFzaz4gdGFzaywgY29uc3QgU3RyaW5nJiBtb2RlKQoreworICAgIG1f
d29ya2VyVGhyZWFkLT5ydW5Mb29wKCkucG9zdFRhc2tGb3JNb2RlKHRhc2ssIG1vZGUpOworfQor
CisjZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJCYXNlLmggYi9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYldvcmtlckJhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4wMjE3NDAxCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJX
b3JrZXJCYXNlLmgKQEAgLTAsMCArMSwxNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYldvcmtlckJhc2VfaAorI2Rl
ZmluZSBXZWJXb3JrZXJCYXNlX2gKKworI2lmIEVOQUJMRShXT1JLRVJTKQorCisjaW5jbHVkZSAi
U2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIldvcmtlckxvYWRlclByb3h5Lmgi
CisjaW5jbHVkZSAiV29ya2VyT2JqZWN0UHJveHkuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xh
c3MgV29ya2VyVGhyZWFkOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYkNvbW1v
bldvcmtlckNsaWVudDsKK2NsYXNzIFdlYlVSTDsKK2NsYXNzIFdlYlZpZXc7CitjbGFzcyBXZWJX
b3JrZXJDbGllbnQ7CisKKy8vIEJhc2UgY2xhc3MgZm9yIFdlYlNoYXJlZFdvcmtlckltcGwgYW5k
IFdlYldvcmtlckltcGwuIEl0IGNvbnRhaW5zIGNvbW1vbgorLy8gY29kZSB1c2VkIGJ5IGJvdGgg
aW1wbGVtZW50YXRpb24gY2xhc3NlcywgaW5jbHVkaW5nIGltcGxlbWVudGF0aW9ucyBvZiB0aGUK
Ky8vIFdvcmtlck9iamVjdFByb3h5IGFuZCBXb3JrZXJMb2FkZXJQcm94eSBpbnRlcmZhY2VzLgor
Y2xhc3MgV2ViV29ya2VyQmFzZSA6IHB1YmxpYyBXZWJDb3JlOjpXb3JrZXJPYmplY3RQcm94eQor
ICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBXZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94eSB7
CitwdWJsaWM6CisgICAgV2ViV29ya2VyQmFzZSgpOworICAgIHZpcnR1YWwgfldlYldvcmtlckJh
c2UoKTsKKworICAgIC8vIFdlYkNvcmU6Oldvcmtlck9iamVjdFByb3h5IG1ldGhvZHM6CisgICAg
dmlydHVhbCB2b2lkIHBvc3RNZXNzYWdlVG9Xb3JrZXJPYmplY3QoCisgICAgICAgIFBhc3NSZWZQ
dHI8V2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwKKyAgICAgICAgUGFzc093blB0cjxX
ZWJDb3JlOjpNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4pOworICAgIHZpcnR1YWwgdm9pZCBwb3N0
RXhjZXB0aW9uVG9Xb3JrZXJPYmplY3QoCisgICAgICAgIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYs
IGludCwgY29uc3QgV2ViQ29yZTo6U3RyaW5nJik7CisgICAgdmlydHVhbCB2b2lkIHBvc3RDb25z
b2xlTWVzc2FnZVRvV29ya2VyT2JqZWN0KAorICAgICAgICBXZWJDb3JlOjpNZXNzYWdlRGVzdGlu
YXRpb24sIFdlYkNvcmU6Ok1lc3NhZ2VTb3VyY2UsIFdlYkNvcmU6Ok1lc3NhZ2VUeXBlLAorICAg
ICAgICBXZWJDb3JlOjpNZXNzYWdlTGV2ZWwsIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYsIGludCwg
Y29uc3QgV2ViQ29yZTo6U3RyaW5nJik7CisgICAgdmlydHVhbCB2b2lkIGNvbmZpcm1NZXNzYWdl
RnJvbVdvcmtlck9iamVjdChib29sKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0UGVuZGluZ0Fj
dGl2aXR5KGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCB3b3JrZXJDb250ZXh0Q2xvc2VkKCk7Cisg
ICAgdmlydHVhbCB2b2lkIHdvcmtlckNvbnRleHREZXN0cm95ZWQoKTsKKworICAgIC8vIFdlYkNv
cmU6OldvcmtlckxvYWRlclByb3h5IG1ldGhvZHM6CisgICAgdmlydHVhbCB2b2lkIHBvc3RUYXNr
VG9Mb2FkZXIoUGFzc093blB0cjxXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNr
Pik7CisgICAgdmlydHVhbCB2b2lkIHBvc3RUYXNrRm9yTW9kZVRvV29ya2VyQ29udGV4dCgKKyAg
ICAgICAgUGFzc093blB0cjxXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiwg
Y29uc3QgV2ViQ29yZTo6U3RyaW5nJiBtb2RlKTsKKworICAgIC8vIEV4ZWN1dGVzIHRoZSBnaXZl
biB0YXNrIG9uIHRoZSBtYWluIHRocmVhZC4KKyAgICBzdGF0aWMgdm9pZCBkaXNwYXRjaFRhc2tU
b01haW5UaHJlYWQoUGFzc093blB0cjxXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpU
YXNrPik7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIFdlYldvcmtlckNsaWVudCogY2xpZW50
KCkgPSAwOworICAgIHZpcnR1YWwgV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQo
KSA9IDA7CisKKyAgICB2b2lkIHNldFdvcmtlclRocmVhZChQYXNzUmVmUHRyPFdlYkNvcmU6Oldv
cmtlclRocmVhZD4gdGhyZWFkKSB7IG1fd29ya2VyVGhyZWFkID0gdGhyZWFkOyB9CisgICAgV2Vi
Q29yZTo6V29ya2VyVGhyZWFkKiB3b3JrZXJUaHJlYWQoKSB7IHJldHVybiBtX3dvcmtlclRocmVh
ZC5nZXQoKTsgfQorCisgICAgLy8gU2h1dHMgZG93biB0aGUgd29ya2VyIHRocmVhZC4KKyAgICB2
b2lkIHN0b3BXb3JrZXJUaHJlYWQoKTsKKworICAgIC8vIENyZWF0ZXMgdGhlIHNoYWRvdyBsb2Fk
ZXIgdXNlZCBmb3Igd29ya2VyIG5ldHdvcmsgcmVxdWVzdHMuCisgICAgdm9pZCBpbml0aWFsaXpl
TG9hZGVyKGNvbnN0IFdlYlVSTCYpOworCitwcml2YXRlOgorICAgIC8vIEZ1bmN0aW9uIHVzZWQg
dG8gaW52b2tlIHRhc2tzIG9uIHRoZSBtYWluIHRocmVhZC4KKyAgICBzdGF0aWMgdm9pZCBpbnZv
a2VUYXNrTWV0aG9kKHZvaWQqKTsKKworICAgIC8vIFRhc2tzIHRoYXQgYXJlIHJ1biBvbiB0aGUg
bWFpbiB0aHJlYWQuCisgICAgc3RhdGljIHZvaWQgcG9zdE1lc3NhZ2VUYXNrKAorICAgICAgICBX
ZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAorICAgICAgICBXZWJXb3Jr
ZXJCYXNlKiB0aGlzUHRyLAorICAgICAgICBXZWJDb3JlOjpTdHJpbmcgbWVzc2FnZSwKKyAgICAg
ICAgUGFzc093blB0cjxXZWJDb3JlOjpNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gY2hhbm5lbHMp
OworICAgIHN0YXRpYyB2b2lkIHBvc3RFeGNlcHRpb25UYXNrKAorICAgICAgICBXZWJDb3JlOjpT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAorICAgICAgICBXZWJXb3JrZXJCYXNlKiB0
aGlzUHRyLAorICAgICAgICBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIG1lc3NhZ2UsCisgICAgICAg
IGludCBsaW5lTnVtYmVyLAorICAgICAgICBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIHNvdXJjZVVS
TCk7CisgICAgc3RhdGljIHZvaWQgcG9zdENvbnNvbGVNZXNzYWdlVGFzaygKKyAgICAgICAgV2Vi
Q29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKKyAgICAgICAgV2ViV29ya2Vy
QmFzZSogdGhpc1B0ciwKKyAgICAgICAgaW50IGRlc3RpbmF0aW9uLAorICAgICAgICBpbnQgc291
cmNlLAorICAgICAgICBpbnQgdHlwZSwKKyAgICAgICAgaW50IGxldmVsLAorICAgICAgICBjb25z
dCBXZWJDb3JlOjpTdHJpbmcmIG1lc3NhZ2UsCisgICAgICAgIGludCBsaW5lTnVtYmVyLAorICAg
ICAgICBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIHNvdXJjZVVSTCk7CisgICAgc3RhdGljIHZvaWQg
Y29uZmlybU1lc3NhZ2VUYXNrKAorICAgICAgICBXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LAorICAgICAgICBXZWJXb3JrZXJCYXNlKiB0aGlzUHRyLAorICAgICAgICBi
b29sIGhhc1BlbmRpbmdBY3Rpdml0eSk7CisgICAgc3RhdGljIHZvaWQgcmVwb3J0UGVuZGluZ0Fj
dGl2aXR5VGFzaygKKyAgICAgICAgV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwKKyAgICAgICAgV2ViV29ya2VyQmFzZSogdGhpc1B0ciwKKyAgICAgICAgYm9vbCBoYXNQ
ZW5kaW5nQWN0aXZpdHkpOworICAgIHN0YXRpYyB2b2lkIHdvcmtlckNvbnRleHRDbG9zZWRUYXNr
KAorICAgICAgICBXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAorICAg
ICAgICBXZWJXb3JrZXJCYXNlKiB0aGlzUHRyKTsKKyAgICBzdGF0aWMgdm9pZCB3b3JrZXJDb250
ZXh0RGVzdHJveWVkVGFzaygKKyAgICAgICAgV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwKKyAgICAgICAgV2ViV29ya2VyQmFzZSogdGhpc1B0cik7CisKKyAgICAvLyAn
c2hhZG93IHBhZ2UnIC0gY3JlYXRlZCB0byBwcm94eSBsb2FkaW5nIHJlcXVlc3RzIGZyb20gdGhl
IHdvcmtlci4KKyAgICBSZWZQdHI8V2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dD4gbV9s
b2FkaW5nRG9jdW1lbnQ7CisgICAgV2ViVmlldyogbV93ZWJWaWV3OworICAgIGJvb2wgbV9hc2tl
ZFRvVGVybWluYXRlOworCisgICAgUmVmUHRyPFdlYkNvcmU6OldvcmtlclRocmVhZD4gbV93b3Jr
ZXJUaHJlYWQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJM
RShXT1JLRVJTKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
V29ya2VyQ2xpZW50SW1wbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckNsaWVu
dEltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiZTAzYTcKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckNsaWVudEltcGwu
Y3BwCkBAIC0wLDAgKzEsNDE2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYldv
cmtlckNsaWVudEltcGwuaCIKKworI2lmIEVOQUJMRShXT1JLRVJTKQorCisjaW5jbHVkZSAiRGVk
aWNhdGVkV29ya2VyVGhyZWFkLmgiCisjaW5jbHVkZSAiRXJyb3JFdmVudC5oIgorI2luY2x1ZGUg
IkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKKyNpbmNsdWRlICJHZW5l
cmljV29ya2VyVGFzay5oIgorI2luY2x1ZGUgIk1lc3NhZ2VFdmVudC5oIgorI2luY2x1ZGUgIk1l
c3NhZ2VQb3J0LmgiCisjaW5jbHVkZSAiTWVzc2FnZVBvcnRDaGFubmVsLmgiCisjaW5jbHVkZSAi
U2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIldvcmtlci5oIgorI2luY2x1ZGUg
IldvcmtlckNvbnRleHQuaCIKKyNpbmNsdWRlICJXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHku
aCIKKyNpbmNsdWRlICJXb3JrZXJNZXNzYWdpbmdQcm94eS5oIgorI2luY2x1ZGUgPHd0Zi9UaHJl
YWRpbmcuaD4KKworI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50SW1wbC5oIgorI2luY2x1ZGUg
IlBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmgiCisjaW5jbHVkZSAiV2ViRnJhbWVDbGllbnQu
aCIKKyNpbmNsdWRlICJXZWJGcmFtZUltcGwuaCIKKyNpbmNsdWRlICJXZWJLaXQuaCIKKyNpbmNs
dWRlICJXZWJLaXRDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJNZXNzYWdlUG9ydENoYW5uZWwuaCIK
KyNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJVUkwuaCIKKyNpbmNsdWRlICJX
ZWJWaWV3SW1wbC5oIgorI2luY2x1ZGUgIldlYldvcmtlci5oIgorI2luY2x1ZGUgIldlYldvcmtl
ckltcGwuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCisvLyBXaGVuIFdlYktpdCBjcmVhdGVzIGEgV29ya2VyQ29udGV4dFByb3h5IG9iamVjdCwg
d2UgY2hlY2sgaWYgd2UncmUgaW4gdGhlCisvLyByZW5kZXJlciBvciB3b3JrZXIgcHJvY2Vzcy4g
IElmIHRoZSBsYXR0ZXIsIHRoZW4gd2UganVzdCB1c2UKKy8vIFdvcmtlck1lc3NhZ2luZ1Byb3h5
LgorLy8KKy8vIElmIHdlJ3JlIGluIHRoZSByZW5kZXJlciBwcm9jZXNzLCB0aGVuIHdlIG5lZWQg
dXNlIHRoZSBnbHVlIHByb3ZpZGVkCisvLyBXZWJXb3JrZXIgb2JqZWN0IHRvIHRhbGsgdG8gdGhl
IHdvcmtlciBwcm9jZXNzIG92ZXIgSVBDLiAgVGhlIHdvcmtlciBwcm9jZXNzCisvLyB0YWxrcyB0
byBXb3JrZXIqIHVzaW5nIFdvcmtlck9iamVjdFByb3h5LCB3aGljaCB3ZSBpbXBsZW1lbnQgb24K
Ky8vIFdlYldvcmtlckNsaWVudEltcGwuCisvLworLy8gTm90ZSB0aGF0IGlmIHdlJ3JlIHJ1bm5p
bmcgZWFjaCB3b3JrZXIgaW4gYSBzZXBhcmF0ZSBwcm9jZXNzLCB0aGVuIG5lc3RlZAorLy8gd29y
a2VycyBlbmQgdXAgdXNpbmcgdGhlIHNhbWUgY29kZXBhdGggYXMgdGhlIHJlbmRlcmVyIHByb2Nl
c3MuCisKKy8vIHN0YXRpYworV29ya2VyQ29udGV4dFByb3h5KiBXZWJXb3JrZXJDbGllbnRJbXBs
OjpjcmVhdGVXb3JrZXJDb250ZXh0UHJveHkoV29ya2VyKiB3b3JrZXIpCit7CisgICAgLy8gU3Bl
Y2lhbCBiZWhhdmlvciBmb3IgbXVsdGlwbGUgd29ya2VycyBwZXIgcHJvY2Vzcy4KKyAgICAvLyBG
SVhNRTogdjggZG9lc24ndCBzdXBwb3J0IG1vcmUgdGhhbiBvbmUgd29ya2VycyBwZXIgcHJvY2Vz
cy4KKyAgICAvLyBpZiAoIXdvcmtlci0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0RvY3Vt
ZW50KCkpCisgICAgLy8gICAgIHJldHVybiBuZXcgV29ya2VyTWVzc2FnaW5nUHJveHkod29ya2Vy
KTsKKworICAgIFdlYldvcmtlciogd2ViV29ya2VyID0gMDsKKyAgICBXZWJXb3JrZXJDbGllbnRJ
bXBsKiBwcm94eSA9IG5ldyBXZWJXb3JrZXJDbGllbnRJbXBsKHdvcmtlcik7CisKKyAgICBpZiAo
d29ya2VyLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzRG9jdW1lbnQoKSkgeworICAgICAg
ICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KAorICAgICAgICAg
ICAgd29ya2VyLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOworICAgICAgICBXZWJGcmFtZUlt
cGwqIHdlYkZyYW1lID0gV2ViRnJhbWVJbXBsOjpmcm9tRnJhbWUoZG9jdW1lbnQtPmZyYW1lKCkp
OworICAgICAgICB3ZWJXb3JrZXIgPSB3ZWJGcmFtZS0+Y2xpZW50KCktPmNyZWF0ZVdvcmtlcih3
ZWJGcmFtZSwgcHJveHkpOworICAgIH0gZWxzZSB7CisgICAgICAgIFdvcmtlckNvbnRleHRFeGVj
dXRpb25Qcm94eSogY3VycmVudENvbnRleHQgPQorICAgICAgICBXb3JrZXJDb250ZXh0RXhlY3V0
aW9uUHJveHk6OnJldHJpZXZlKCk7CisgICAgICAgIGlmICghY3VycmVudENvbnRleHQpIHsKKyAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgIH0KKworICAgICAgICBEZWRpY2F0ZWRXb3JrZXJUaHJlYWQqIHRocmVhZCA9CisgICAg
ICAgIHN0YXRpY19jYXN0PERlZGljYXRlZFdvcmtlclRocmVhZCo+KGN1cnJlbnRDb250ZXh0LT53
b3JrZXJDb250ZXh0KCktPnRocmVhZCgpKTsKKyAgICAgICAgV29ya2VyT2JqZWN0UHJveHkqIHdv
cmtlck9iamVjdFByb3h5ID0gJnRocmVhZC0+d29ya2VyT2JqZWN0UHJveHkoKTsKKyAgICAgICAg
V2ViV29ya2VySW1wbCogaW1wbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViV29ya2VySW1wbCo+KHdv
cmtlck9iamVjdFByb3h5KTsKKyAgICAgICAgd2ViV29ya2VyID0gaW1wbC0+Y2xpZW50KCktPmNy
ZWF0ZVdvcmtlcihwcm94eSk7CisgICAgfQorCisgICAgcHJveHktPnNldFdlYldvcmtlcih3ZWJX
b3JrZXIpOworICAgIHJldHVybiBwcm94eTsKK30KKworV2ViV29ya2VyQ2xpZW50SW1wbDo6V2Vi
V29ya2VyQ2xpZW50SW1wbChXb3JrZXIqIHdvcmtlcikKKyAgICA6IG1fc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCh3b3JrZXItPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAsIG1fd29ya2Vy
KHdvcmtlcikKKyAgICAsIG1fYXNrZWRUb1Rlcm1pbmF0ZShmYWxzZSkKKyAgICAsIG1fdW5jb25m
aXJtZWRNZXNzYWdlQ291bnQoMCkKKyAgICAsIG1fd29ya2VyQ29udGV4dEhhZFBlbmRpbmdBY3Rp
dml0eShmYWxzZSkKKyAgICAsIG1fd29ya2VyVGhyZWFkSWQoY3VycmVudFRocmVhZCgpKQorewor
fQorCitXZWJXb3JrZXJDbGllbnRJbXBsOjp+V2ViV29ya2VyQ2xpZW50SW1wbCgpCit7Cit9CisK
K3ZvaWQgV2ViV29ya2VyQ2xpZW50SW1wbDo6c2V0V2ViV29ya2VyKFdlYldvcmtlciogd2ViV29y
a2VyKQoreworICAgIG1fd2ViV29ya2VyID0gd2ViV29ya2VyOworfQorCit2b2lkIFdlYldvcmtl
ckNsaWVudEltcGw6OnN0YXJ0V29ya2VyQ29udGV4dChjb25zdCBLVVJMJiBzY3JpcHRVUkwsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcm
IHVzZXJBZ2VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFN0cmluZyYgc291cmNlQ29kZSkKK3sKKyAgICAvLyBXb3JrZXIudGVybWluYXRlKCkg
Y291bGQgYmUgY2FsbGVkIGZyb20gSlMgYmVmb3JlIHRoZSBjb250ZXh0IGlzIHN0YXJ0ZWQuCisg
ICAgaWYgKG1fYXNrZWRUb1Rlcm1pbmF0ZSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghaXNN
YWluVGhyZWFkKCkpIHsKKyAgICAgICAgV2ViV29ya2VyQmFzZTo6ZGlzcGF0Y2hUYXNrVG9NYWlu
VGhyZWFkKGNyZWF0ZUNhbGxiYWNrVGFzaygKKyAgICAgICAgICAgICZzdGFydFdvcmtlckNvbnRl
eHRUYXNrLAorICAgICAgICAgICAgdGhpcywKKyAgICAgICAgICAgIHNjcmlwdFVSTC5zdHJpbmco
KSwKKyAgICAgICAgICAgIHVzZXJBZ2VudCwKKyAgICAgICAgICAgIHNvdXJjZUNvZGUpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX3dlYldvcmtlci0+c3RhcnRXb3JrZXJDb250ZXh0
KHNjcmlwdFVSTCwgdXNlckFnZW50LCBzb3VyY2VDb2RlKTsKK30KKwordm9pZCBXZWJXb3JrZXJD
bGllbnRJbXBsOjp0ZXJtaW5hdGVXb3JrZXJDb250ZXh0KCkKK3sKKyAgICBpZiAobV9hc2tlZFRv
VGVybWluYXRlKQorICAgICAgICByZXR1cm47CisgICAgbV9hc2tlZFRvVGVybWluYXRlID0gdHJ1
ZTsKKyAgICBpZiAoIWlzTWFpblRocmVhZCgpKSB7CisgICAgICAgIFdlYldvcmtlckJhc2U6OmRp
c3BhdGNoVGFza1RvTWFpblRocmVhZChjcmVhdGVDYWxsYmFja1Rhc2soJnRlcm1pbmF0ZVdvcmtl
ckNvbnRleHRUYXNrLCB0aGlzKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV93ZWJX
b3JrZXItPnRlcm1pbmF0ZVdvcmtlckNvbnRleHQoKTsKK30KKwordm9pZCBXZWJXb3JrZXJDbGll
bnRJbXBsOjpwb3N0TWVzc2FnZVRvV29ya2VyQ29udGV4dCgKKyAgICBQYXNzUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gbWVzc2FnZSwKKyAgICBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hh
bm5lbEFycmF5PiBjaGFubmVscykKK3sKKyAgICAvLyBXb3JrZXIudGVybWluYXRlKCkgY291bGQg
YmUgY2FsbGVkIGZyb20gSlMgYmVmb3JlIHRoZSBjb250ZXh0IGlzIHN0YXJ0ZWQuCisgICAgaWYg
KG1fYXNrZWRUb1Rlcm1pbmF0ZSkKKyAgICAgICAgcmV0dXJuOworICAgICsrbV91bmNvbmZpcm1l
ZE1lc3NhZ2VDb3VudDsKKyAgICBpZiAoIWlzTWFpblRocmVhZCgpKSB7CisgICAgICAgIFdlYldv
cmtlckJhc2U6OmRpc3BhdGNoVGFza1RvTWFpblRocmVhZChjcmVhdGVDYWxsYmFja1Rhc2soJnBv
c3RNZXNzYWdlVG9Xb3JrZXJDb250ZXh0VGFzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1lc3NhZ2UtPnRvU3RyaW5nKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbHMpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBXZWJNZXNzYWdlUG9ydENoYW5uZWxBcnJheSB3ZWJDaGFubmVscyhj
aGFubmVscy5nZXQoKSA/IGNoYW5uZWxzLT5zaXplKCkgOiAwKTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHdlYkNoYW5uZWxzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFdlYk1lc3NhZ2VQ
b3J0Q2hhbm5lbCogd2ViY2hhbm5lbCA9CisgICAgICAgICAgICAgICAgICAgICAgICAoKmNoYW5u
ZWxzKVtpXS0+Y2hhbm5lbCgpLT53ZWJDaGFubmVsUmVsZWFzZSgpOworICAgICAgICB3ZWJjaGFu
bmVsLT5zZXRDbGllbnQoMCk7CisgICAgICAgIHdlYkNoYW5uZWxzW2ldID0gd2ViY2hhbm5lbDsK
KyAgICB9CisgICAgbV93ZWJXb3JrZXItPnBvc3RNZXNzYWdlVG9Xb3JrZXJDb250ZXh0KG1lc3Nh
Z2UtPnRvU3RyaW5nKCksIHdlYkNoYW5uZWxzKTsKK30KKworYm9vbCBXZWJXb3JrZXJDbGllbnRJ
bXBsOjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAoreworICAgIHJldHVybiAhbV9hc2tlZFRv
VGVybWluYXRlCisgICAgICAgICAgICYmIChtX3VuY29uZmlybWVkTWVzc2FnZUNvdW50IHx8IG1f
d29ya2VyQ29udGV4dEhhZFBlbmRpbmdBY3Rpdml0eSk7Cit9CisKK3ZvaWQgV2ViV29ya2VyQ2xp
ZW50SW1wbDo6d29ya2VyT2JqZWN0RGVzdHJveWVkKCkKK3sKKyAgICBpZiAoaXNNYWluVGhyZWFk
KCkpIHsKKyAgICAgICAgbV93ZWJXb3JrZXItPndvcmtlck9iamVjdERlc3Ryb3llZCgpOworICAg
ICAgICBtX3dvcmtlciA9IDA7CisgICAgfQorICAgIC8vIEV2ZW4gaWYgdGhpcyBpcyBjYWxsZWQg
b24gdGhlIG1haW4gdGhyZWFkLCB0aGVyZSBjb3VsZCBiZSBhIHF1ZXVlZCB0YXNrIGZvcgorICAg
IC8vIHRoaXMgb2JqZWN0LCBzbyBkb24ndCBkZWxldGUgaXQgcmlnaHQgYXdheS4KKyAgICBXZWJX
b3JrZXJCYXNlOjpkaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZ3
b3JrZXJPYmplY3REZXN0cm95ZWRUYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcykpOworfQorCit2b2lkIFdlYldv
cmtlckNsaWVudEltcGw6OnBvc3RNZXNzYWdlVG9Xb3JrZXJPYmplY3QoY29uc3QgV2ViU3RyaW5n
JiBtZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFdlYk1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5JiBjaGFubmVscykKK3sKKyAg
ICBPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IGNoYW5uZWxzMjsKKyAgICBpZiAoY2hh
bm5lbHMuc2l6ZSgpKSB7CisgICAgICAgIGNoYW5uZWxzMiA9IG5ldyBNZXNzYWdlUG9ydENoYW5u
ZWxBcnJheShjaGFubmVscy5zaXplKCkpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGNoYW5uZWxzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBSZWZQdHI8UGxhdGZvcm1NZXNz
YWdlUG9ydENoYW5uZWw+IHBsYXRmb3JtX2NoYW5uZWwgPQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsOjpjcmVhdGUoY2hhbm5lbHNbaV0pOwor
ICAgICAgICAgICAgY2hhbm5lbHNbaV0tPnNldENsaWVudChwbGF0Zm9ybV9jaGFubmVsLmdldCgp
KTsKKyAgICAgICAgICAgICgqY2hhbm5lbHMyKVtpXSA9IE1lc3NhZ2VQb3J0Q2hhbm5lbDo6Y3Jl
YXRlKHBsYXRmb3JtX2NoYW5uZWwpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGN1cnJl
bnRUaHJlYWQoKSAhPSBtX3dvcmtlclRocmVhZElkKSB7CisgICAgICAgIG1fc2NyaXB0RXhlY3V0
aW9uQ29udGV4dC0+cG9zdFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZwb3N0TWVzc2FnZVRvV29y
a2VyT2JqZWN0VGFzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nKG1lc3NhZ2UpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
aGFubmVsczIucmVsZWFzZSgpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBwb3N0
TWVzc2FnZVRvV29ya2VyT2JqZWN0VGFzayhtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuZ2V0KCks
IHRoaXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSwgY2hhbm5l
bHMyLnJlbGVhc2UoKSk7Cit9CisKK3ZvaWQgV2ViV29ya2VyQ2xpZW50SW1wbDo6cG9zdEV4Y2Vw
dGlvblRvV29ya2VyT2JqZWN0KGNvbnN0IFdlYlN0cmluZyYgZXJyb3JNZXNzYWdlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmVO
dW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBXZWJTdHJpbmcmIHNvdXJjZVVSTCkKK3sKKyAgICBpZiAoY3VycmVudFRocmVh
ZCgpICE9IG1fd29ya2VyVGhyZWFkSWQpIHsKKyAgICAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250
ZXh0LT5wb3N0VGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJnBvc3RFeGNlcHRpb25Ub1dvcmtlck9i
amVjdFRhc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRoaXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyhlcnJvck1lc3NhZ2UpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
aW5lTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTdHJpbmcoc291cmNlVVJMKSkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgYm9vbCBoYW5kbGVkID0gZmFsc2U7CisgICAgaGFuZGxlZCA9IG1fd29ya2Vy
LT5kaXNwYXRjaEV2ZW50KEVycm9yRXZlbnQ6OmNyZWF0ZShlcnJvck1lc3NhZ2UsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VV
UkwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsaW5lTnVtYmVyKSk7CisgICAgaWYgKCFoYW5kbGVkKQorICAgICAgICBtX3NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQtPnJlcG9ydEV4Y2VwdGlvbihlcnJvck1lc3NhZ2UsIGxpbmVOdW1iZXIs
IHNvdXJjZVVSTCk7Cit9CisKK3ZvaWQgV2ViV29ya2VyQ2xpZW50SW1wbDo6cG9zdENvbnNvbGVN
ZXNzYWdlVG9Xb3JrZXJPYmplY3QoaW50IGRlc3RpbmF0aW9uSWQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb3VyY2VJZCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IG1lc3NhZ2VUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWVzc2FnZUxldmVsLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJTdHJp
bmcmIG1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJTdHJpbmcmIHNvdXJj
ZVVSTCkKK3sKKyAgICBpZiAoY3VycmVudFRocmVhZCgpICE9IG1fd29ya2VyVGhyZWFkSWQpIHsK
KyAgICAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5wb3N0VGFzayhjcmVhdGVDYWxsYmFj
a1Rhc2soJnBvc3RDb25zb2xlTWVzc2FnZVRvV29ya2VyT2JqZWN0VGFzaywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGVzdGluYXRpb25JZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlSWQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VUeXBlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtZXNzYWdlTGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyhtZXNzYWdlKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgU3RyaW5nKHNvdXJjZVVSTCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+YWRkTWVzc2FnZShzdGF0aWNfY2FzdDxNZXNz
YWdlRGVzdGluYXRpb24+KGRlc3RpbmF0aW9uSWQpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxNZXNzYWdlU291cmNlPihzb3VyY2VJZCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PE1lc3Nh
Z2VUeXBlPihtZXNzYWdlVHlwZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXRpY19jYXN0PE1lc3NhZ2VMZXZlbD4obWVzc2FnZUxldmVsKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nKG1lc3NhZ2UpLCBsaW5lTnVt
YmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcoc291
cmNlVVJMKSk7Cit9CisKK3ZvaWQgV2ViV29ya2VyQ2xpZW50SW1wbDo6Y29uZmlybU1lc3NhZ2VG
cm9tV29ya2VyT2JqZWN0KGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KQoreworICAgIC8vIHVuY29u
ZmlybWVkX21lc3NhZ2VfY291bnRfIGNhbiBvbmx5IGJlIHVwZGF0ZWQgb24gdGhlIHRocmVhZCB3
aGVyZSBpdCdzCisgICAgLy8gYWNjZXNzZWQuICBPdGhlcndpc2UgdGhlcmUgYXJlIHJhY2UgY29u
ZGl0aW9ucyB3aXRoIHY4J3MgZ2FyYmFnZQorICAgIC8vIGNvbGxlY3Rpb24uCisgICAgbV9zY3Jp
cHRFeGVjdXRpb25Db250ZXh0LT5wb3N0VGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJmNvbmZpcm1N
ZXNzYWdlRnJvbVdvcmtlck9iamVjdFRhc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcykpOworfQorCit2b2lkIFdlYldvcmtl
ckNsaWVudEltcGw6OnJlcG9ydFBlbmRpbmdBY3Rpdml0eShib29sIGhhc1BlbmRpbmdBY3Rpdml0
eSkKK3sKKyAgICAvLyBTZWUgYWJvdmUgY29tbWVudCBpbiBjb25maXJtTWVzc2FnZUZyb21Xb3Jr
ZXJPYmplY3QuCisgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5wb3N0VGFzayhjcmVhdGVD
YWxsYmFja1Rhc2soJnJlcG9ydFBlbmRpbmdBY3Rpdml0eVRhc2ssCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNQZW5k
aW5nQWN0aXZpdHkpKTsKK30KKwordm9pZCBXZWJXb3JrZXJDbGllbnRJbXBsOjp3b3JrZXJDb250
ZXh0RGVzdHJveWVkKCkKK3sKK30KKwordm9pZCBXZWJXb3JrZXJDbGllbnRJbXBsOjp3b3JrZXJD
b250ZXh0Q2xvc2VkKCkKK3sKK30KKwordm9pZCBXZWJXb3JrZXJDbGllbnRJbXBsOjpzdGFydFdv
cmtlckNvbnRleHRUYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViV29ya2VyQ2xpZW50
SW1wbCogdGhpc1B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBTdHJpbmcmIHNjcmlwdFVSTCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcm
IHNvdXJjZUNvZGUpCit7CisgICAgdGhpc1B0ci0+bV93ZWJXb3JrZXItPnN0YXJ0V29ya2VyQ29u
dGV4dChLVVJMKFBhcnNlZFVSTFN0cmluZywgc2NyaXB0VVJMKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJBZ2VudCwgc291cmNlQ29kZSk7Cit9CisK
K3ZvaWQgV2ViV29ya2VyQ2xpZW50SW1wbDo6dGVybWluYXRlV29ya2VyQ29udGV4dFRhc2soU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViV29ya2VyQ2xpZW50SW1wbCogdGhpc1B0cikK
K3sKKyAgICB0aGlzUHRyLT5tX3dlYldvcmtlci0+dGVybWluYXRlV29ya2VyQ29udGV4dCgpOwor
fQorCit2b2lkIFdlYldvcmtlckNsaWVudEltcGw6OnBvc3RNZXNzYWdlVG9Xb3JrZXJDb250ZXh0
VGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViV29ya2VyQ2xpZW50SW1w
bCogdGhpc1B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NPd25QdHI8TWVzc2FnZVBv
cnRDaGFubmVsQXJyYXk+IGNoYW5uZWxzKQoreworICAgIFdlYk1lc3NhZ2VQb3J0Q2hhbm5lbEFy
cmF5IHdlYkNoYW5uZWxzKGNoYW5uZWxzLmdldCgpID8gY2hhbm5lbHMtPnNpemUoKSA6IDApOwor
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3ZWJDaGFubmVscy5zaXplKCk7ICsraSkgewor
ICAgICAgICB3ZWJDaGFubmVsc1tpXSA9ICgqY2hhbm5lbHMpW2ldLT5jaGFubmVsKCktPndlYkNo
YW5uZWxSZWxlYXNlKCk7CisgICAgICAgIHdlYkNoYW5uZWxzW2ldLT5zZXRDbGllbnQoMCk7Cisg
ICAgfQorCisgICAgdGhpc1B0ci0+bV93ZWJXb3JrZXItPnBvc3RNZXNzYWdlVG9Xb3JrZXJDb250
ZXh0KG1lc3NhZ2UsIHdlYkNoYW5uZWxzKTsKK30KKwordm9pZCBXZWJXb3JrZXJDbGllbnRJbXBs
Ojp3b3JrZXJPYmplY3REZXN0cm95ZWRUYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
V2ViV29ya2VyQ2xpZW50SW1wbCogdGhpc1B0cikKK3sKKyAgICBpZiAodGhpc1B0ci0+bV93b3Jr
ZXIpIC8vIENoZWNrIHdlIGhhdmVuJ3QgYWxyZWFkIGNhbGxlZCB0aGlzLgorICAgICAgICB0aGlz
UHRyLT5tX3dlYldvcmtlci0+d29ya2VyT2JqZWN0RGVzdHJveWVkKCk7CisgICAgZGVsZXRlIHRo
aXNQdHI7Cit9CisKK3ZvaWQgV2ViV29ya2VyQ2xpZW50SW1wbDo6cG9zdE1lc3NhZ2VUb1dvcmtl
ck9iamVjdFRhc2soCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYldvcmtlckNs
aWVudEltcGwqIHRoaXNQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc093blB0cjxNZXNz
YWdlUG9ydENoYW5uZWxBcnJheT4gY2hhbm5lbHMpCit7CisKKyAgICBpZiAodGhpc1B0ci0+bV93
b3JrZXIpIHsKKyAgICAgICAgT3duUHRyPE1lc3NhZ2VQb3J0QXJyYXk+IHBvcnRzID0KKyAgICAg
ICAgICAgIE1lc3NhZ2VQb3J0OjplbnRhbmdsZVBvcnRzKCpjb250ZXh0LCBjaGFubmVscy5yZWxl
YXNlKCkpOworICAgICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVk
TWVzc2FnZSA9CisgICAgICAgICAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShtZXNz
YWdlKTsKKyAgICAgICAgdGhpc1B0ci0+bV93b3JrZXItPmRpc3BhdGNoRXZlbnQoTWVzc2FnZUV2
ZW50OjpjcmVhdGUocG9ydHMucmVsZWFzZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemVkTWVzc2FnZS5yZWxl
YXNlKCkpKTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViV29ya2VyQ2xpZW50SW1wbDo6cG9zdEV4Y2Vw
dGlvblRvV29ya2VyT2JqZWN0VGFzaygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFdlYldvcmtlckNsaWVudEltcGwqIHRoaXNQdHIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBlcnJvck1l
c3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCit7Cisg
ICAgYm9vbCBoYW5kbGVkID0gZmFsc2U7CisgICAgaWYgKHRoaXNQdHItPm1fd29ya2VyKQorICAg
ICAgICBoYW5kbGVkID0gdGhpc1B0ci0+bV93b3JrZXItPmRpc3BhdGNoRXZlbnQoRXJyb3JFdmVu
dDo6Y3JlYXRlKGVycm9yTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VVUkwsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbGluZU51bWJlcikpOworICAgIGlmICghaGFuZGxlZCkKKyAgICAgICAgdGhpc1B0ci0+
bV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5yZXBvcnRFeGNlcHRpb24oZXJyb3JNZXNzYWdlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzb3VyY2VVUkwpOworfQorCit2b2lkIFdlYldvcmtlckNsaWVudElt
cGw6OnBvc3RDb25zb2xlTWVzc2FnZVRvV29ya2VyT2JqZWN0VGFzayhTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgV2ViV29ya2VyQ2xpZW50SW1wbCogdGhpc1B0ciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBkZXN0aW5hdGlvbklkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvdXJjZUlkLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1l
c3NhZ2VUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IG1lc3NhZ2VMZXZlbCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYg
bWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBzb3Vy
Y2VVUkwpCit7CisgICAgdGhpc1B0ci0+bV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5hZGRNZXNz
YWdlKHN0YXRpY19jYXN0PE1lc3NhZ2VEZXN0aW5hdGlvbj4oZGVzdGluYXRpb25JZCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0
PE1lc3NhZ2VTb3VyY2U+KHNvdXJjZUlkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8TWVzc2FnZVR5cGU+KG1lc3NhZ2VUeXBl
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8TWVzc2FnZUxldmVsPihtZXNzYWdlTGV2ZWwpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLCBsaW5lTnVtYmVyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VVUkwp
OworfQorCit2b2lkIFdlYldvcmtlckNsaWVudEltcGw6OmNvbmZpcm1NZXNzYWdlRnJvbVdvcmtl
ck9iamVjdFRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJXb3Jr
ZXJDbGllbnRJbXBsKiB0aGlzUHRyKQoreworICAgIHRoaXNQdHItPm1fdW5jb25maXJtZWRNZXNz
YWdlQ291bnQtLTsKK30KKwordm9pZCBXZWJXb3JrZXJDbGllbnRJbXBsOjpyZXBvcnRQZW5kaW5n
QWN0aXZpdHlUYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViV29ya2VyQ2xpZW50
SW1wbCogdGhpc1B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSkKK3sKKyAgICB0aGlzUHRyLT5tX3dv
cmtlckNvbnRleHRIYWRQZW5kaW5nQWN0aXZpdHkgPSBoYXNQZW5kaW5nQWN0aXZpdHk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViV29ya2VyQ2xpZW50SW1wbC5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJX
b3JrZXJDbGllbnRJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNh
Y2ViYwotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQ2xp
ZW50SW1wbC5oCkBAIC0wLDAgKzEsMTU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJXb3JrZXJDbGllbnRJbXBsX2gK
KyNkZWZpbmUgV2ViV29ya2VyQ2xpZW50SW1wbF9oCisKKyNpZiBFTkFCTEUoV09SS0VSUykKKwor
Ly8gRklYTUU6IGZpeCB0byBqdXN0ICJXZWJXb3JrZXJDbGllbnQuaCIgb25jZSBub2JvZHkgaW4g
Z2x1ZSBkZXBlbmRzIG9uIHVzLgorI2luY2x1ZGUgIi4uL3B1YmxpYy9XZWJXb3JrZXJDbGllbnQu
aCIKKworI2luY2x1ZGUgIldvcmtlckNvbnRleHRQcm94eS5oIgorI2luY2x1ZGUgPHd0Zi9QYXNz
T3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworfQorCituYW1lc3BhY2UgV2ViS2l0IHsK
K2NsYXNzIFdlYldvcmtlcjsKKworLy8gVGhlIHB1cnBvc2Ugb2YgdGhpcyBjbGFzcyBpcyB0byBw
cm92aWRlIGEgV29ya2VyQ29udGV4dFByb3h5CisvLyBpbXBsZW1lbnRhdGlvbiB0aGF0IHdlIGNh
biBnaXZlIHRvIFdlYktpdC4gIEludGVybmFsbHksIGl0IGNvbnZlcnRzIHRoZQorLy8gZGF0YSB0
eXBlcyB0byBDaHJvbWUgY29tcGF0aWJsZSBvbmVzIHNvIHRoYXQgcmVuZGVyZXIgY29kZSBjYW4g
dXNlIGl0IG92ZXIKKy8vIElQQy4KK2NsYXNzIFdlYldvcmtlckNsaWVudEltcGwgOiBwdWJsaWMg
V2ViQ29yZTo6V29ya2VyQ29udGV4dFByb3h5CisgICAgICAgICAgICAgICAgICAgICAgICAgICwg
cHVibGljIFdlYldvcmtlckNsaWVudCB7CitwdWJsaWM6CisgICAgV2ViV29ya2VyQ2xpZW50SW1w
bChXZWJDb3JlOjpXb3JrZXIqKTsKKworICAgIC8vIFdlYkNvcmU6OldvcmtlckNvbnRleHRQcm94
eSBGYWN0b3J5LgorICAgIHN0YXRpYyBXZWJDb3JlOjpXb3JrZXJDb250ZXh0UHJveHkqIGNyZWF0
ZVdvcmtlckNvbnRleHRQcm94eShXZWJDb3JlOjpXb3JrZXIqKTsKKyAgICB2b2lkIHNldFdlYldv
cmtlcihXZWJXb3JrZXIqKTsKKworICAgIC8vIFdlYkNvcmU6OldvcmtlckNvbnRleHRQcm94eSBt
ZXRob2RzOgorICAgIC8vIFRoZXNlIGFyZSBjYWxsZWQgb24gdGhlIHRocmVhZCB0aGF0IGNyZWF0
ZWQgdGhlIHdvcmtlci4gIEluIHRoZSByZW5kZXJlcgorICAgIC8vIHByb2Nlc3MsIHRoaXMgd2ls
bCBiZSB0aGUgbWFpbiBXZWJLaXQgdGhyZWFkLiAgSW4gdGhlIHdvcmtlciBwcm9jZXNzLCB0aGlz
CisgICAgLy8gd2lsbCBiZSB0aGUgdGhyZWFkIG9mIHRoZSBleGVjdXRpbmcgd29ya2VyIChub3Qg
dGhlIG1haW4gV2ViS2l0IHRocmVhZCkuCisgICAgdmlydHVhbCB2b2lkIHN0YXJ0V29ya2VyQ29u
dGV4dChjb25zdCBXZWJDb3JlOjpLVVJMJiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBXZWJDb3JlOjpTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdGVy
bWluYXRlV29ya2VyQ29udGV4dCgpOworICAgIHZpcnR1YWwgdm9pZCBwb3N0TWVzc2FnZVRvV29y
a2VyQ29udGV4dCgKKyAgICAgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IG1lc3NhZ2UsCisgICAgICAgIFBhc3NPd25QdHI8V2ViQ29yZTo6TWVzc2FnZVBvcnRD
aGFubmVsQXJyYXk+IGNoYW5uZWxzKTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ0FjdGl2
aXR5KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHdvcmtlck9iamVjdERlc3Ryb3llZCgpOwor
CisgICAgLy8gV2ViV29ya2VyQ2xpZW50IG1ldGhvZHM6CisgICAgLy8gVGhlc2UgYXJlIGNhbGxl
ZCBvbiB0aGUgbWFpbiBXZWJLaXQgdGhyZWFkLgorICAgIHZpcnR1YWwgdm9pZCBwb3N0TWVzc2Fn
ZVRvV29ya2VyT2JqZWN0KGNvbnN0IFdlYlN0cmluZyYsIGNvbnN0IFdlYk1lc3NhZ2VQb3J0Q2hh
bm5lbEFycmF5Jik7CisgICAgdmlydHVhbCB2b2lkIHBvc3RFeGNlcHRpb25Ub1dvcmtlck9iamVj
dChjb25zdCBXZWJTdHJpbmcmLCBpbnQsIGNvbnN0IFdlYlN0cmluZyYpOworICAgIHZpcnR1YWwg
dm9pZCBwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdChpbnQsIGludCwgaW50LCBpbnQs
IGNvbnN0IFdlYlN0cmluZyYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCwgY29uc3QgV2ViU3RyaW5nJik7CisgICAgdmlydHVhbCB2b2lkIGNv
bmZpcm1NZXNzYWdlRnJvbVdvcmtlck9iamVjdChib29sKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVw
b3J0UGVuZGluZ0FjdGl2aXR5KGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCB3b3JrZXJDb250ZXh0
Q2xvc2VkKCk7CisgICAgdmlydHVhbCB2b2lkIHdvcmtlckNvbnRleHREZXN0cm95ZWQoKTsKKyAg
ICB2aXJ0dWFsIFdlYldvcmtlciogY3JlYXRlV29ya2VyKFdlYldvcmtlckNsaWVudCopIHsgcmV0
dXJuIDA7IH0KKyAgICB2aXJ0dWFsIFdlYk5vdGlmaWNhdGlvblByZXNlbnRlciogbm90aWZpY2F0
aW9uUHJlc2VudGVyKCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBOb3RpZmljYXRpb25zIG5v
dCB5ZXQgc3VwcG9ydGVkIGluIHdvcmtlcnMuCisgICAgICAgIHJldHVybiAwOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICB2aXJ0dWFsIH5XZWJXb3JrZXJDbGllbnRJbXBsKCk7CisKKyAgICAvLyBN
ZXRob2RzIHVzZWQgdG8gc3VwcG9ydCBXZWJXb3JrZXJDbGllbnRJbXBsIGJlaW5nIGNvbnN0cnVj
dGVkIG9uIHdvcmtlcgorICAgIC8vIHRocmVhZHMuCisgICAgLy8gVGhlc2UgdGFza3MgYXJlIGRp
c3BhdGNoZWQgb24gdGhlIFdlYktpdCB0aHJlYWQuCisgICAgc3RhdGljIHZvaWQgc3RhcnRXb3Jr
ZXJDb250ZXh0VGFzayhXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViV29ya2VyQ2xpZW50SW1w
bCogdGhpc1B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFdlYkNvcmU6OlN0cmluZyYgc2NyaXB0VVJMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiB1c2VyQWdlbnQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIHNvdXJj
ZUNvZGUpOworICAgIHN0YXRpYyB2b2lkIHRlcm1pbmF0ZVdvcmtlckNvbnRleHRUYXNrKFdlYkNv
cmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgV2ViV29ya2VyQ2xpZW50SW1wbCogdGhpc1B0cik7Cisg
ICAgc3RhdGljIHZvaWQgcG9zdE1lc3NhZ2VUb1dvcmtlckNvbnRleHRUYXNrKFdlYkNvcmU6OlNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFdlYldvcmtlckNsaWVudEltcGwqIHRoaXNQdHIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYkNvcmU6
OlN0cmluZyYgbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUGFzc093blB0cjxXZWJDb3JlOjpNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gY2hh
bm5lbHMpOworICAgIHN0YXRpYyB2b2lkIHdvcmtlck9iamVjdERlc3Ryb3llZFRhc2soV2ViQ29y
ZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFdlYldvcmtlckNsaWVudEltcGwqIHRoaXNQdHIpOworCisg
ICAgLy8gVGhlc2UgdGFza3MgYXJlIGRpc3BhdGNoZWQgb24gdGhlIHRocmVhZCB0aGF0IGNyZWF0
ZWQgdGhlIHdvcmtlciAoaS5lLgorICAgIC8vIG1haW4gV2ViS2l0IHRocmVhZCBpbiByZW5kZXJl
ciBwcm9jZXNzLCBhbmQgdGhlIHdvcmtlciB0aHJlYWQgaW4gdGhlCisgICAgLy8gd29ya2VyIHBy
b2Nlc3MpLgorICAgIHN0YXRpYyB2b2lkIHBvc3RNZXNzYWdlVG9Xb3JrZXJPYmplY3RUYXNrKFdl
YkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViV29ya2VyQ2xpZW50SW1wbCogdGhpc1B0
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBX
ZWJDb3JlOjpTdHJpbmcmIG1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUGFzc093blB0cjxXZWJDb3JlOjpNZXNzYWdlUG9ydENoYW5uZWxBcnJh
eT4gY2hhbm5lbHMpOworICAgIHN0YXRpYyB2b2lkIHBvc3RFeGNlcHRpb25Ub1dvcmtlck9iamVj
dFRhc2soV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYldvcmtlckNsaWVudElt
cGwqIHRoaXNQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIG1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZU51bWJlciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYkNvcmU6OlN0cmlu
ZyYgc291cmNlVVJMKTsKKyAgICBzdGF0aWMgdm9pZCBwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtl
ck9iamVjdFRhc2soV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViV29y
a2VyQ2xpZW50SW1wbCogdGhpc1B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGRlc3RpbmF0aW9uSWQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb3VyY2VJZCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1lc3Nh
Z2VUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgbWVzc2FnZUxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIG1lc3NhZ2UsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsaW5l
TnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIHNvdXJjZVVSTCk7CisgICAgc3RhdGljIHZvaWQg
Y29uZmlybU1lc3NhZ2VGcm9tV29ya2VyT2JqZWN0VGFzayhXZWJDb3JlOjpTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgV2ViV29ya2VyQ2xpZW50SW1wbCogdGhpc1B0cik7CisgICAgc3RhdGlj
IHZvaWQgcmVwb3J0UGVuZGluZ0FjdGl2aXR5VGFzayhXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV2ViV29ya2VyQ2xpZW50SW1wbCogdGhpc1B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KTsKKworICAgIC8vIEd1
YXJkIGFnYWluc3QgY29udGV4dCBmcm9tIGJlaW5nIGRlc3Ryb3llZCBiZWZvcmUgYSB3b3JrZXIg
ZXhpdHMuCisgICAgUmVmUHRyPFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IG1fc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDsKKworICAgIFdlYkNvcmU6OldvcmtlciogbV93b3JrZXI7Cisg
ICAgV2ViV29ya2VyKiBtX3dlYldvcmtlcjsKKyAgICBib29sIG1fYXNrZWRUb1Rlcm1pbmF0ZTsK
KyAgICB1bnNpZ25lZCBtX3VuY29uZmlybWVkTWVzc2FnZUNvdW50OworICAgIGJvb2wgbV93b3Jr
ZXJDb250ZXh0SGFkUGVuZGluZ0FjdGl2aXR5OworICAgIFRocmVhZElkZW50aWZpZXIgbV93b3Jr
ZXJUaHJlYWRJZDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdDsKKworI2VuZGlmIC8vIEVO
QUJMRShXT1JLRVJTKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViV29ya2VySW1wbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckltcGwuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0NGJlMzAKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckltcGwuY3BwCkBAIC0wLDAgKzEs
MTU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYldvcmtlckltcGwuaCIKKwor
I2luY2x1ZGUgIkRlZGljYXRlZFdvcmtlckNvbnRleHQuaCIKKyNpbmNsdWRlICJEZWRpY2F0ZWRX
b3JrZXJUaHJlYWQuaCIKKyNpbmNsdWRlICJHZW5lcmljV29ya2VyVGFzay5oIgorI2luY2x1ZGUg
IktVUkwuaCIKKyNpbmNsdWRlICJNZXNzYWdlRXZlbnQuaCIKKyNpbmNsdWRlICJNZXNzYWdlUG9y
dC5oIgorI2luY2x1ZGUgIk1lc3NhZ2VQb3J0Q2hhbm5lbC5oIgorI2luY2x1ZGUgIlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUg
IlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgorI2luY2x1ZGUgIlN1YnN0aXR1dGVEYXRhLmgiCisj
aW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCisjaW5jbHVkZSAiUGxhdGZvcm1NZXNzYWdlUG9y
dENoYW5uZWwuaCIKKyNpbmNsdWRlICJXZWJNZXNzYWdlUG9ydENoYW5uZWwuaCIKKyNpbmNsdWRl
ICJXZWJTdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJVUkwuaCIKKyNpbmNsdWRlICJXZWJXb3JrZXJD
bGllbnQuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCisjaWYgRU5BQkxFKFdPUktFUlMpCisKK1dlYldvcmtlciogV2ViV29ya2VyOjpjcmVhdGUo
V2ViV29ya2VyQ2xpZW50KiBjbGllbnQpCit7CisgICAgcmV0dXJuIG5ldyBXZWJXb3JrZXJJbXBs
KGNsaWVudCk7Cit9CisKKworV2ViV29ya2VySW1wbDo6V2ViV29ya2VySW1wbChXZWJXb3JrZXJD
bGllbnQqIGNsaWVudCkKKyAgICA6IG1fY2xpZW50KGNsaWVudCkKK3sKK30KKworV2ViV29ya2Vy
SW1wbDo6fldlYldvcmtlckltcGwoKQoreworfQorCitXZWJDb21tb25Xb3JrZXJDbGllbnQqIFdl
YldvcmtlckltcGw6OmNvbW1vbkNsaWVudCgpCit7CisgICAgcmV0dXJuIG1fY2xpZW50OworfQor
Cit2b2lkIFdlYldvcmtlckltcGw6OnBvc3RNZXNzYWdlVG9Xb3JrZXJDb250ZXh0VGFzayhXZWJD
b3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViV29ya2VySW1wbCogdGhpc1B0ciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFN0cmluZyYgbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IGNoYW5uZWxz
KQoreworICAgIEFTU0VSVChjb250ZXh0LT5pc1dvcmtlckNvbnRleHQoKSk7CisgICAgRGVkaWNh
dGVkV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9CisgICAgICAgIHN0YXRpY19jYXN0PERl
ZGljYXRlZFdvcmtlckNvbnRleHQqPihjb250ZXh0KTsKKworICAgIE93blB0cjxNZXNzYWdlUG9y
dEFycmF5PiBwb3J0cyA9CisgICAgICAgIE1lc3NhZ2VQb3J0OjplbnRhbmdsZVBvcnRzKCpjb250
ZXh0LCBjaGFubmVscy5yZWxlYXNlKCkpOworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IHNlcmlhbGl6ZWRNZXNzYWdlID0KKyAgICAgICAgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpj
cmVhdGUobWVzc2FnZSk7CisgICAgd29ya2VyQ29udGV4dC0+ZGlzcGF0Y2hFdmVudChNZXNzYWdl
RXZlbnQ6OmNyZWF0ZSgKKyAgICAgICAgcG9ydHMucmVsZWFzZSgpLCBzZXJpYWxpemVkTWVzc2Fn
ZS5yZWxlYXNlKCkpKTsKKyAgICB0aGlzUHRyLT5jb25maXJtTWVzc2FnZUZyb21Xb3JrZXJPYmpl
Y3Qod29ya2VyQ29udGV4dC0+aGFzUGVuZGluZ0FjdGl2aXR5KCkpOworfQorCisvLyBXZWJXb3Jr
ZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCit2b2lkIFdlYldvcmtlckltcGw6OnN0YXJ0V29ya2VyQ29udGV4dChj
b25zdCBXZWJVUkwmIHNjcmlwdFVybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFdlYlN0cmluZyYgdXNlckFnZW50LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBzb3VyY2VDb2RlKQoreworICAgIGlu
aXRpYWxpemVMb2FkZXIoc2NyaXB0VXJsKTsKKyAgICBzZXRXb3JrZXJUaHJlYWQoRGVkaWNhdGVk
V29ya2VyVGhyZWFkOjpjcmVhdGUoc2NyaXB0VXJsLCB1c2VyQWdlbnQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUNvZGUsICp0aGlzLCAq
dGhpcykpOworICAgIC8vIFdvcmtlciBpbml0aWFsaXphdGlvbiBtZWFucyBhIHBlbmRpbmcgYWN0
aXZpdHkuCisgICAgcmVwb3J0UGVuZGluZ0FjdGl2aXR5KHRydWUpOworICAgIHdvcmtlclRocmVh
ZCgpLT5zdGFydCgpOworfQorCit2b2lkIFdlYldvcmtlckltcGw6OnRlcm1pbmF0ZVdvcmtlckNv
bnRleHQoKQoreworICAgIHN0b3BXb3JrZXJUaHJlYWQoKTsKK30KKwordm9pZCBXZWJXb3JrZXJJ
bXBsOjpwb3N0TWVzc2FnZVRvV29ya2VyQ29udGV4dChjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2Us
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdl
Yk1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5JiB3ZWJDaGFubmVscykKK3sKKyAgICBPd25QdHI8TWVz
c2FnZVBvcnRDaGFubmVsQXJyYXk+IGNoYW5uZWxzOworICAgIGlmICh3ZWJDaGFubmVscy5zaXpl
KCkpIHsKKyAgICAgICAgY2hhbm5lbHMgPSBuZXcgTWVzc2FnZVBvcnRDaGFubmVsQXJyYXkod2Vi
Q2hhbm5lbHMuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3ZWJDaGFu
bmVscy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgUmVmUHRyPFBsYXRmb3JtTWVzc2FnZVBv
cnRDaGFubmVsPiBwbGF0Zm9ybV9jaGFubmVsID0KKyAgICAgICAgICAgICAgICBQbGF0Zm9ybU1l
c3NhZ2VQb3J0Q2hhbm5lbDo6Y3JlYXRlKHdlYkNoYW5uZWxzW2ldKTsKKyAgICAgICAgICAgIHdl
YkNoYW5uZWxzW2ldLT5zZXRDbGllbnQocGxhdGZvcm1fY2hhbm5lbC5nZXQoKSk7CisgICAgICAg
ICAgICAoKmNoYW5uZWxzKVtpXSA9IE1lc3NhZ2VQb3J0Q2hhbm5lbDo6Y3JlYXRlKHBsYXRmb3Jt
X2NoYW5uZWwpOworICAgICAgICB9CisgICAgfQorCisgICAgd29ya2VyVGhyZWFkKCktPnJ1bkxv
b3AoKS5wb3N0VGFzaygKKyAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZwb3N0TWVzc2FnZVRv
V29ya2VyQ29udGV4dFRhc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLCBTdHJp
bmcobWVzc2FnZSksIGNoYW5uZWxzLnJlbGVhc2UoKSkpOworfQorCit2b2lkIFdlYldvcmtlcklt
cGw6Ondvcmtlck9iamVjdERlc3Ryb3llZCgpCit7CisgICAgLy8gV29ya2VyIG9iamVjdCBpbiB0
aGUgcmVuZGVyZXIgd2FzIGRlc3Ryb3llZCwgcGVyaGFwcyBhIHJlc3VsdCBvZiBHQy4KKyAgICAv
LyBGb3IgdXMsIGl0J3MgYSBzaWduYWwgdG8gc3RhcnQgdGVybWluYXRpbmcgdGhlIFdvcmtlckNv
bnRleHQgdG9vLgorICAgIC8vIEZJWE1FOiB3aGVuICdraWxsIGEgd29ya2VyJyBodG1sNSBzcGVj
IGFsZ29yaXRobSBpcyBpbXBsZW1lbnRlZCwgaXQKKyAgICAvLyBzaG91bGQgYmUgdXNlZCBoZXJl
IGluc3RlYWQgb2YgJ3Rlcm1pbmF0ZSBhIHdvcmtlcicuCisgICAgdGVybWluYXRlV29ya2VyQ29u
dGV4dCgpOworfQorCit2b2lkIFdlYldvcmtlckltcGw6OmNsaWVudERlc3Ryb3llZCgpCit7Cisg
ICAgbV9jbGllbnQgPSAwOworfQorCisjZWxzZQorCitXZWJXb3JrZXIqIFdlYldvcmtlcjo6Y3Jl
YXRlKFdlYldvcmtlckNsaWVudCogY2xpZW50KQoreworICAgIHJldHVybiAwOworfQorCisjZW5k
aWYgLy8gRU5BQkxFKFdPUktFUlMpCisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJJbXBsLmggYi9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYldvcmtlckltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5i
ZWM5NmNkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJJ
bXBsLmgKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViV29ya2VySW1wbF9oCisjZGVmaW5lIFdl
YldvcmtlckltcGxfaAorCisjaW5jbHVkZSAiV2ViV29ya2VyLmgiCisKKyNpZiBFTkFCTEUoV09S
S0VSUykKKworI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKworI2luY2x1ZGUg
IldlYldvcmtlckJhc2UuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJWaWV3Owor
CisvLyBUaGlzIGNsYXNzIGlzIHVzZWQgYnkgdGhlIHdvcmtlciBwcm9jZXNzIGNvZGUgdG8gdGFs
ayB0byB0aGUgV2ViQ29yZTo6V29ya2VyCisvLyBpbXBsZW1lbnRhdGlvbi4gIEl0IGNhbid0IHVz
ZSBpdCBkaXJlY3RseSBzaW5jZSBpdCB1c2VzIFdlYktpdCB0eXBlcywgc28gdGhpcworLy8gY2xh
c3MgY29udmVydHMgdGhlIGRhdGEgdHlwZXMuICBXaGVuIHRoZSBXZWJDb3JlOjpXb3JrZXIgb2Jq
ZWN0IHdhbnRzIHRvIGNhbGwKKy8vIFdlYkNvcmU6Oldvcmtlck9iamVjdFByb3h5LCB0aGlzIGNs
YXNzIHdpbGwgY29udmVyIHRvIENocm9tZSBkYXRhIHR5cGVzIGZpcnN0CisvLyBhbmQgdGhlbiBj
YWxsIHRoZSBzdXBwbGllZCBXZWJXb3JrZXJDbGllbnQuCitjbGFzcyBXZWJXb3JrZXJJbXBsIDog
cHVibGljIFdlYldvcmtlckJhc2UsIHB1YmxpYyBXZWJXb3JrZXIgeworcHVibGljOgorICAgIGV4
cGxpY2l0IFdlYldvcmtlckltcGwoV2ViV29ya2VyQ2xpZW50KiBjbGllbnQpOworCisgICAgLy8g
V2ViV29ya2VyIG1ldGhvZHM6CisgICAgdmlydHVhbCB2b2lkIHN0YXJ0V29ya2VyQ29udGV4dChj
b25zdCBXZWJVUkwmLCBjb25zdCBXZWJTdHJpbmcmLCBjb25zdCBXZWJTdHJpbmcmKTsKKyAgICB2
aXJ0dWFsIHZvaWQgdGVybWluYXRlV29ya2VyQ29udGV4dCgpOworICAgIHZpcnR1YWwgdm9pZCBw
b3N0TWVzc2FnZVRvV29ya2VyQ29udGV4dChjb25zdCBXZWJTdHJpbmcmLCBjb25zdCBXZWJNZXNz
YWdlUG9ydENoYW5uZWxBcnJheSYpOworICAgIHZpcnR1YWwgdm9pZCB3b3JrZXJPYmplY3REZXN0
cm95ZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xpZW50RGVzdHJveWVkKCk7CisKKyAgICAvLyBX
ZWJXb3JrZXJCYXNlIG1ldGhvZHM6CisgICAgdmlydHVhbCBXZWJXb3JrZXJDbGllbnQqIGNsaWVu
dCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9CisgICAgdmlydHVhbCBXZWJDb21tb25Xb3JrZXJDbGll
bnQqIGNvbW1vbkNsaWVudCgpOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgfldlYldvcmtlcklt
cGwoKTsKKworICAgIC8vIFRhc2tzIHRoYXQgYXJlIHJ1biBvbiB0aGUgd29ya2VyIHRocmVhZC4K
KyAgICBzdGF0aWMgdm9pZCBwb3N0TWVzc2FnZVRvV29ya2VyQ29udGV4dFRhc2soCisgICAgICAg
IFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCisgICAgICAgIFdlYldv
cmtlckltcGwqIHRoaXNQdHIsCisgICAgICAgIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgbWVzc2Fn
ZSwKKyAgICAgICAgUGFzc093blB0cjxXZWJDb3JlOjpNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4g
Y2hhbm5lbHMpOworCisgICAgV2ViV29ya2VyQ2xpZW50KiBtX2NsaWVudDsKKworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKKworI2VuZGlm
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42882</attachid>
            <date>2009-11-10 11:46:57 -0800</date>
            <delta_ts>2009-11-10 12:49:53 -0800</delta_ts>
            <desc>Upstream GraphicsContext3D.cpp fixes and remove a spurious ChangeLog entry</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>22231</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNTA3NDkpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTggQEAKKzIwMDktMTEtMTAgIE5hdGUg
Q2hhcGluICA8amFwaGV0QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgcmVmZXJlbmNlcyB0byBDYW52YXMgM0QgY2xh
c3NlcyB0byB1c2UgdGhlIG5ldyBXZWJHTCBwcmVmaXguCisKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMxMjc2CisKKyAgICAgICAgKiBzcmMvR3JhcGhp
Y3NDb250ZXh0M0QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbDo6YmVnaW5QYWludCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRElu
dGVybmFsOjpiaW5kQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWw6OmJpbmRUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpiZWdpblBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpi
aW5kQXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OmJpbmRCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRU
ZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJTdWJEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZXRhY2hTaGFkZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZUF0dHJpYik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlVW5pZm9ybSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0cmliTG9jYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEJvb2xlYW52KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRCdWZmZXJQYXJhbWV0ZXJpdik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0RmxvYXR2KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0
ZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50ZWdlcnYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW1pKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRQcm9ncmFtaXYpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW1JbmZvTG9nKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJp
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyaSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyaXYpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlckluZm9Mb2cpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlclNvdXJjZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VGV4UGFyYW1ldGVyZnYpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcml2KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtZik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybWZ2KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtaSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybWl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYmZ2KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJpdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6aXNCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmlzRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OmlzUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
aXNSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6Omlz
U2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc1RleHR1cmUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHMpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnNoYWRlclNvdXJjZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dGV4U3ViSW1hZ2UyRCk6CisKIDIwMDktMTEtMTAgIFlh
YXIgU2Nobml0bWFuICA8eWFhckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RXJpYyBTZWlkZWwuCkBAIC0xMDYzLDI1ICsxMTE4LDYgQEAKICAgICAgICAgKFdlYktpdDo6V2Vi
Vmlld0ltcGw6OmN1cnJlbnRJbnB1dEV2ZW50KToKICAgICAgICAgKFdlYktpdDo6V2ViVmlld0lt
cGw6Oik6CiAKLTIwMDktMTEtMDkgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVtLm9yZz4K
LQotICAgICAgICBSZXZpZXdlZCBieSBEaW1pdHJpIEdsYXprb3YuCi0KLSAgICAgICAgV2ViUGEq
LmggYW5kIFdlYlBsKi5oIENocm9taXVtIEFQSSBoZWFkZXJzLgotCi0gICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODM5NAotCi0gICAgICAgICogcHVibGlj
L1dlYlBhc3N3b3JkQXV0b2NvbXBsZXRlTGlzdGVuZXIuaDogQWRkZWQuCi0gICAgICAgIChXZWJL
aXQ6OldlYlBhc3N3b3JkQXV0b2NvbXBsZXRlTGlzdGVuZXI6On5XZWJQYXNzd29yZEF1dG9jb21w
bGV0ZUxpc3RlbmVyKToKLSAgICAgICAgKiBwdWJsaWMvV2ViUGFzc3dvcmRGb3JtRGF0YS5oOiBB
ZGRlZC4KLSAgICAgICAgKFdlYktpdDo6V2ViUGFzc3dvcmRGb3JtRGF0YTo6aXNWYWxpZCk6Ci0g
ICAgICAgICogcHVibGljL1dlYlBsdWdpbi5oOiBBZGRlZC4KLSAgICAgICAgKFdlYktpdDo6V2Vi
UGx1Z2luOjp+V2ViUGx1Z2luKToKLSAgICAgICAgKiBwdWJsaWMvV2ViUGx1Z2luQ29udGFpbmVy
Lmg6IEFkZGVkLgotICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW5Db250YWluZXI6On5XZWJQbHVn
aW5Db250YWluZXIpOgotICAgICAgICAqIHB1YmxpYy9XZWJQbHVnaW5MaXN0QnVpbGRlci5oOiBB
ZGRlZC4KLSAgICAgICAgKiBwdWJsaWMvV2ViUGx1Z2luUGFyYW1zLmg6IEFkZGVkLgotCiAyMDA5
LTExLTEwICBZYWFyIFNjaG5pdG1hbiAgPHlhYXJAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvR3Jh
cGhpY3NDb250ZXh0M0QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvR3Jh
cGhpY3NDb250ZXh0M0QuY3BwCShyZXZpc2lvbiA1MDc0OCkKKysrIFdlYktpdC9jaHJvbWl1bS9z
cmMvR3JhcGhpY3NDb250ZXh0M0QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwyNCArMzUsMjMg
QEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogCiAjaW5jbHVkZSAiQ2FjaGVkSW1h
Z2UuaCIKLSNpbmNsdWRlICJDYW52YXNCdWZmZXIuaCIKLSNpbmNsdWRlICJDYW52YXNCeXRlQXJy
YXkuaCIKLSNpbmNsdWRlICJDYW52YXNGbG9hdEFycmF5LmgiCi0jaW5jbHVkZSAiQ2FudmFzRnJh
bWVidWZmZXIuaCIKLSNpbmNsdWRlICJDYW52YXNJbnRBcnJheS5oIgotI2luY2x1ZGUgIkNhbnZh
c09iamVjdC5oIgotI2luY2x1ZGUgIkNhbnZhc1Byb2dyYW0uaCIKLSNpbmNsdWRlICJDYW52YXNS
ZW5kZXJidWZmZXIuaCIKLSNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaCIKLSNp
bmNsdWRlICJDYW52YXNTaGFkZXIuaCIKLSNpbmNsdWRlICJDYW52YXNUZXh0dXJlLmgiCi0jaW5j
bHVkZSAiQ2FudmFzVW5zaWduZWRCeXRlQXJyYXkuaCIKICNpbmNsdWRlICJDU3RyaW5nLmgiCiAj
aW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSW1hZ2VFbGVtZW50
LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIldlYkdMQnVmZmVyLmgiCisjaW5j
bHVkZSAiV2ViR0xCeXRlQXJyYXkuaCIKKyNpbmNsdWRlICJXZWJHTEZsb2F0QXJyYXkuaCIKKyNp
bmNsdWRlICJXZWJHTEZyYW1lYnVmZmVyLmgiCisjaW5jbHVkZSAiV2ViR0xJbnRBcnJheS5oIgor
I2luY2x1ZGUgIldlYkdMUHJvZ3JhbS5oIgorI2luY2x1ZGUgIldlYkdMUmVuZGVyYnVmZmVyLmgi
CisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xTaGFk
ZXIuaCIKKyNpbmNsdWRlICJXZWJHTFRleHR1cmUuaCIKKyNpbmNsdWRlICJXZWJHTFVuc2lnbmVk
Qnl0ZUFycmF5LmgiCiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFs
bG9jLmg+CkBAIC0xMTAsMTYgKzEwOSwxNiBAQAogCiAgICAgdm9pZCByZXNoYXBlKGludCB3aWR0
aCwgaW50IGhlaWdodCk7CiAKLSAgICB2b2lkIGJlZ2luUGFpbnQoQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDNEKiBjb250ZXh0KTsKKyAgICB2b2lkIGJlZ2luUGFpbnQoV2ViR0xSZW5kZXJpbmdDb250
ZXh0KiBjb250ZXh0KTsKIAogICAgIGJvb2wgdmFsaWRhdGVUZXh0dXJlVGFyZ2V0KGludCB0YXJn
ZXQpOwogICAgIGJvb2wgdmFsaWRhdGVUZXh0dXJlUGFyYW1ldGVyKGludCBwYXJhbSk7CiAKICAg
ICB2b2lkIGFjdGl2ZVRleHR1cmUodW5zaWduZWQgbG9uZyB0ZXh0dXJlKTsKICAgICB2b2lkIGJp
bmRCdWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgIENhbnZh
c0J1ZmZlciogYnVmZmVyKTsKKyAgICAgICAgICAgICAgICAgICAgV2ViR0xCdWZmZXIqIGJ1ZmZl
cik7CiAgICAgdm9pZCBiaW5kVGV4dHVyZSh1bnNpZ25lZCBsb25nIHRhcmdldCwKLSAgICAgICAg
ICAgICAgICAgICAgIENhbnZhc1RleHR1cmUqIHRleHR1cmUpOworICAgICAgICAgICAgICAgICAg
ICAgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlKTsKICAgICB2b2lkIGJ1ZmZlckRhdGFJbXBsKHVuc2ln
bmVkIGxvbmcgdGFyZ2V0LCBpbnQgc2l6ZSwgY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgbG9u
ZyB1c2FnZSk7CiAgICAgdm9pZCBkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgbG9u
ZyBpbmRleCk7CiAgICAgdm9pZCBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSh1bnNpZ25lZCBsb25n
IGluZGV4KTsKQEAgLTY3Miw3ICs2NzEsNyBAQAogfQogI2VuZGlmCiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0RJbnRlcm5hbDo6YmVnaW5QYWludChDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QqIGNv
bnRleHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmJlZ2luUGFpbnQoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwog
CkBAIC04MDAsNyArNzk5LDcgQEAKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFs
OjpiaW5kQnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENhbnZhc0J1ZmZlciogYnVmZmVyKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYkdMQnVmZmVyKiBidWZmZXIpCiB7CiAg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgR0x1aW50IGJ1ZklEID0gRVhUUkFDVChidWZm
ZXIpOwpAQCAtODExLDkgKzgxMCw5IEBACiAKIC8vIElmIHdlIGRpZG4ndCBoYXZlIHRvIGhhY2sg
R0xfVEVYVFVSRV9XUkFQX1IgZm9yIGN1YmUgbWFwcywKIC8vIHdlIGNvdWxkIGp1c3QgdXNlOgot
Ly8gR0xfU0FNRV9NRVRIT0RfMl9YMihCaW5kVGV4dHVyZSwgYmluZFRleHR1cmUsIHVuc2lnbmVk
IGxvbmcsIENhbnZhc1RleHR1cmUqKQorLy8gR0xfU0FNRV9NRVRIT0RfMl9YMihCaW5kVGV4dHVy
ZSwgYmluZFRleHR1cmUsIHVuc2lnbmVkIGxvbmcsIFdlYkdMVGV4dHVyZSopCiB2b2lkIEdyYXBo
aWNzQ29udGV4dDNESW50ZXJuYWw6OmJpbmRUZXh0dXJlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYW52YXNUZXh0dXJl
KiB0ZXh0dXJlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBX
ZWJHTFRleHR1cmUqIHRleHR1cmUpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAg
dW5zaWduZWQgaW50IHRleHR1cmVPYmplY3QgPSBFWFRSQUNUKHRleHR1cmUpOwpAQCAtMTA2NCw3
ICsxMDYzLDcgQEAKICAgICBtX2ludGVybmFsLT5yZXNoYXBlKHdpZHRoLCBoZWlnaHQpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiZWdpblBhaW50KENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRCogY29udGV4dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJlZ2luUGFpbnQoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQogewogICAgIG1faW50ZXJuYWwtPmJlZ2luUGFpbnQo
Y29udGV4dCk7CiB9CkBAIC0xMTgwLDkgKzExNzksOSBAQAogICAgIG1faW50ZXJuYWwtPmFjdGl2
ZVRleHR1cmUodGV4dHVyZSk7CiB9CiAKLUdMX1NBTUVfTUVUSE9EXzJfWDEyKEF0dGFjaFNoYWRl
ciwgYXR0YWNoU2hhZGVyLCBDYW52YXNQcm9ncmFtKiwgQ2FudmFzU2hhZGVyKikKK0dMX1NBTUVf
TUVUSE9EXzJfWDEyKEF0dGFjaFNoYWRlciwgYXR0YWNoU2hhZGVyLCBXZWJHTFByb2dyYW0qLCBX
ZWJHTFNoYWRlciopCiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRBdHRyaWJMb2NhdGlv
bihDYW52YXNQcm9ncmFtKiBwcm9ncmFtLAordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEF0
dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGluZGV4LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKQEAg
LTExOTMsMjAgKzExOTIsMjAgQEAKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEJ1
ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ2FudmFzQnVmZmVyKiBidWZmZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFdlYkdMQnVmZmVyKiBidWZmZXIpCiB7CiAgICAgbV9pbnRlcm5hbC0+YmluZEJ1ZmZl
cih0YXJnZXQsIGJ1ZmZlcik7CiB9CiAKLUdMX1NBTUVfTUVUSE9EXzJfWDIoQmluZEZyYW1lYnVm
ZmVyLCBiaW5kRnJhbWVidWZmZXIsIHVuc2lnbmVkIGxvbmcsIENhbnZhc0ZyYW1lYnVmZmVyKikK
K0dMX1NBTUVfTUVUSE9EXzJfWDIoQmluZEZyYW1lYnVmZmVyLCBiaW5kRnJhbWVidWZmZXIsIHVu
c2lnbmVkIGxvbmcsIFdlYkdMRnJhbWVidWZmZXIqKQogCi1HTF9TQU1FX01FVEhPRF8yX1gyKEJp
bmRSZW5kZXJidWZmZXIsIGJpbmRSZW5kZXJidWZmZXIsIHVuc2lnbmVkIGxvbmcsIENhbnZhc1Jl
bmRlcmJ1ZmZlciopCitHTF9TQU1FX01FVEhPRF8yX1gyKEJpbmRSZW5kZXJidWZmZXIsIGJpbmRS
ZW5kZXJidWZmZXIsIHVuc2lnbmVkIGxvbmcsIFdlYkdMUmVuZGVyYnVmZmVyKikKIAogLy8gSWYg
d2UgZGlkbid0IGhhdmUgdG8gaGFjayBHTF9URVhUVVJFX1dSQVBfUiBmb3IgY3ViZSBtYXBzLAog
Ly8gd2UgY291bGQganVzdCB1c2U6Ci0vLyBHTF9TQU1FX01FVEhPRF8yX1gyKEJpbmRUZXh0dXJl
LCBiaW5kVGV4dHVyZSwgdW5zaWduZWQgbG9uZywgQ2FudmFzVGV4dHVyZSopCisvLyBHTF9TQU1F
X01FVEhPRF8yX1gyKEJpbmRUZXh0dXJlLCBiaW5kVGV4dHVyZSwgdW5zaWduZWQgbG9uZywgV2Vi
R0xUZXh0dXJlKikKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRUZXh0dXJlKHVuc2lnbmVk
IGxvbmcgdGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FudmFz
VGV4dHVyZSogdGV4dHVyZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdl
YkdMVGV4dHVyZSogdGV4dHVyZSkKIHsKICAgICBtX2ludGVybmFsLT5iaW5kVGV4dHVyZSh0YXJn
ZXQsIHRleHR1cmUpOwogfQpAQCAtMTIyNiwxMiArMTIyNSwxMiBAQAogICAgIG1faW50ZXJuYWwt
PmJ1ZmZlckRhdGFJbXBsKHRhcmdldCwgc2l6ZSwgMCwgdXNhZ2UpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpidWZmZXJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBDYW52YXNBcnJh
eSogYXJyYXksIHVuc2lnbmVkIGxvbmcgdXNhZ2UpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpi
dWZmZXJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTEFycmF5KiBhcnJheSwgdW5zaWdu
ZWQgbG9uZyB1c2FnZSkKIHsKICAgICBtX2ludGVybmFsLT5idWZmZXJEYXRhSW1wbCh0YXJnZXQs
IGFycmF5LT5zaXplSW5CeXRlcygpLCBhcnJheS0+YmFzZUFkZHJlc3MoKSwgdXNhZ2UpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJTdWJEYXRhKHVuc2lnbmVkIGxvbmcgdGFy
Z2V0LCBsb25nIG9mZnNldCwgQ2FudmFzQXJyYXkqIGFycmF5KQordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6YnVmZmVyU3ViRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBvZmZzZXQsIFdl
YkdMQXJyYXkqIGFycmF5KQogewogICAgIGlmICghYXJyYXkgfHwgIWFycmF5LT5sZW5ndGgoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMTI2Nyw3ICsxMjY2LDcgQEAKIAogR0xfU0FNRV9NRVRIT0Rf
NChDb2xvck1hc2ssIGNvbG9yTWFzaywgYm9vbCwgYm9vbCwgYm9vbCwgYm9vbCkKIAotR0xfU0FN
RV9NRVRIT0RfMV9YKENvbXBpbGVTaGFkZXIsIGNvbXBpbGVTaGFkZXIsIENhbnZhc1NoYWRlciop
CitHTF9TQU1FX01FVEhPRF8xX1goQ29tcGlsZVNoYWRlciwgY29tcGlsZVNoYWRlciwgV2ViR0xT
aGFkZXIqKQogCiBHTF9TQU1FX01FVEhPRF84KENvcHlUZXhJbWFnZTJELCBjb3B5VGV4SW1hZ2Uy
RCwgdW5zaWduZWQgbG9uZywgbG9uZywgdW5zaWduZWQgbG9uZywgbG9uZywgbG9uZywgdW5zaWdu
ZWQgbG9uZywgdW5zaWduZWQgbG9uZywgbG9uZykKIApAQCAtMTI4MSw3ICsxMjgwLDcgQEAKIAog
R0xfU0FNRV9NRVRIT0RfMihEZXB0aFJhbmdlLCBkZXB0aFJhbmdlLCBkb3VibGUsIGRvdWJsZSkK
IAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGV0YWNoU2hhZGVyKENhbnZhc1Byb2dyYW0qIHBy
b2dyYW0sIENhbnZhc1NoYWRlciogc2hhZGVyKQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGV0
YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgV2ViR0xTaGFkZXIqIHNoYWRlcikKIHsK
ICAgICBpZiAoIXByb2dyYW0gfHwgIXNoYWRlcikKICAgICAgICAgcmV0dXJuOwpAQCAtMTM1Nyw5
ICsxMzU2LDkgQEAKIAogR0xfU0FNRV9NRVRIT0RfMChGbHVzaCwgZmx1c2gpCiAKLUdMX1NBTUVf
TUVUSE9EXzRfWDQoRnJhbWVidWZmZXJSZW5kZXJidWZmZXIsIGZyYW1lYnVmZmVyUmVuZGVyYnVm
ZmVyLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBDYW52YXNS
ZW5kZXJidWZmZXIqKQorR0xfU0FNRV9NRVRIT0RfNF9YNChGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZl
ciwgZnJhbWVidWZmZXJSZW5kZXJidWZmZXIsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcs
IHVuc2lnbmVkIGxvbmcsIFdlYkdMUmVuZGVyYnVmZmVyKikKIAotR0xfU0FNRV9NRVRIT0RfNV9Y
NChGcmFtZWJ1ZmZlclRleHR1cmUyRCwgZnJhbWVidWZmZXJUZXh0dXJlMkQsIHVuc2lnbmVkIGxv
bmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIENhbnZhc1RleHR1cmUqLCBsb25nKQor
R0xfU0FNRV9NRVRIT0RfNV9YNChGcmFtZWJ1ZmZlclRleHR1cmUyRCwgZnJhbWVidWZmZXJUZXh0
dXJlMkQsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIFdlYkdM
VGV4dHVyZSosIGxvbmcpCiAKIEdMX1NBTUVfTUVUSE9EXzEoRnJvbnRGYWNlLCBmcm9udEZhY2Us
IHVuc2lnbmVkIGxvbmcpCiAKQEAgLTEzNzMsNyArMTM3Miw3IEBACiAgICAgLy8gcmVxdWlyZSBh
IHRleHR1cmUgcmVhZGJhY2sgYW5kIHJlLXVwbG9hZC4KIH0KIAotYm9vbCBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0QWN0aXZlQXR0cmliKENhbnZhc1Byb2dyYW0qIHByb2dyYW0sIHVuc2lnbmVkIGxv
bmcgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRB
Y3RpdmVBdHRyaWIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBB
Y3RpdmVJbmZvJiBpbmZvKQogewogICAgIGlmICghcHJvZ3JhbSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtMTQwMCw3ICsxMzk5LDcgQEAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBH
cmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlVW5pZm9ybShDYW52YXNQcm9ncmFtKiBwcm9ncmFt
LCB1bnNpZ25lZCBsb25nIGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQorYm9vbCBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0QWN0aXZlVW5pZm9ybShXZWJHTFByb2dyYW0qIHByb2dyYW0sIHVuc2lnbmVk
IGxvbmcgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCiB7CiAgICAgaWYgKCFwcm9ncmFtKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNDI3LDcgKzE0MjYsNyBAQAogICAgIHJldHVybiB0cnVl
OwogfQogCi1pbnQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEF0dHJpYkxvY2F0aW9uKENhbnZhc1By
b2dyYW0qIHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKK2ludCBHcmFwaGljc0NvbnRleHQz
RDo6Z2V0QXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBTdHJpbmcm
IG5hbWUpCiB7CiAgICAgaWYgKCFwcm9ncmFtKQogICAgICAgICByZXR1cm4gLTE7CkBAIC0xNDQ1
LDcgKzE0NDQsNyBAQAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxib29sPih2YWwpOwogfQogCi1Q
YXNzUmVmUHRyPENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5PiBHcmFwaGljc0NvbnRleHQzRDo6Z2V0
Qm9vbGVhbnYodW5zaWduZWQgbG9uZyBwbmFtZSkKK1Bhc3NSZWZQdHI8V2ViR0xVbnNpZ25lZEJ5
dGVBcnJheT4gR3JhcGhpY3NDb250ZXh0M0Q6OmdldEJvb2xlYW52KHVuc2lnbmVkIGxvbmcgcG5h
bWUpCiB7CiAgICAgLy8gRklYTUU6IGltcGxlbWVudC4KICAgICBub3RJbXBsZW1lbnRlZCgpOwpA
QCAtMTQ2MCw3ICsxNDU5LDcgQEAKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihkYXRhKTsK
IH0KIAotUGFzc1JlZlB0cjxDYW52YXNJbnRBcnJheT4gR3JhcGhpY3NDb250ZXh0M0Q6OmdldEJ1
ZmZlclBhcmFtZXRlcml2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1l
KQorUGFzc1JlZlB0cjxXZWJHTEludEFycmF5PiBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QnVmZmVy
UGFyYW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUpCiB7
CiAgICAgLy8gRklYTUU6IGltcGxlbWVudC4KICAgICBub3RJbXBsZW1lbnRlZCgpOwpAQCAtMTQ4
Miw3ICsxNDgxLDcgQEAKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbCk7CiB9CiAK
LVBhc3NSZWZQdHI8Q2FudmFzRmxvYXRBcnJheT4gR3JhcGhpY3NDb250ZXh0M0Q6OmdldEZsb2F0
dih1bnNpZ25lZCBsb25nIHBuYW1lKQorUGFzc1JlZlB0cjxXZWJHTEZsb2F0QXJyYXk+IEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRGbG9hdHYodW5zaWduZWQgbG9uZyBwbmFtZSkKIHsKICAgICAvLyBG
SVhNRTogaW1wbGVtZW50LgogICAgIG5vdEltcGxlbWVudGVkKCk7CkBAIC0xNDk5LDcgKzE0OTgs
NyBAQAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGRhdGEpOwogfQogCi1QYXNzUmVmUHRy
PENhbnZhc0ludEFycmF5PiBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RnJhbWVidWZmZXJBdHRhY2ht
ZW50UGFyYW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQsCitQYXNzUmVmUHRyPFdlYkdMSW50
QXJyYXk+IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0
ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBsb25nIGF0dGFjaG1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
bG9uZyBwbmFtZSkKIHsKQEAgLTE1MTcsMTQgKzE1MTYsMTQgQEAKICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8aW50Pih2YWwpOwogfQogCi1QYXNzUmVmUHRyPENhbnZhc0ludEFycmF5PiBHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0SW50ZWdlcnYodW5zaWduZWQgbG9uZyBwbmFtZSkKK1Bhc3NSZWZQdHI8
V2ViR0xJbnRBcnJheT4gR3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVnZXJ2KHVuc2lnbmVkIGxv
bmcgcG5hbWUpCiB7CiAgICAgLy8gRklYTUU6IGltcGxlbWVudC4KICAgICBub3RJbXBsZW1lbnRl
ZCgpOwogICAgIHJldHVybiAwOwogfQogCi1pbnQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dy
YW1pKENhbnZhc1Byb2dyYW0qIHByb2dyYW0sCitpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFBy
b2dyYW1pKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgbG9uZyBwbmFtZSkKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKQEAgLTE1MzMsNyArMTUzMiw3IEBACiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4ocGFy
YW0pOwogfQogCi1QYXNzUmVmUHRyPENhbnZhc0ludEFycmF5PiBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0UHJvZ3JhbWl2KENhbnZhc1Byb2dyYW0qIHByb2dyYW0sCitQYXNzUmVmUHRyPFdlYkdMSW50
QXJyYXk+IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRQcm9ncmFtaXYoV2ViR0xQcm9ncmFtKiBwcm9n
cmFtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBsb25nIHBuYW1lKQogewogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQu
CkBAIC0xNTQxLDcgKzE1NDAsNyBAQAogICAgIHJldHVybiAwOwogfQogCi1TdHJpbmcgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFByb2dyYW1JbmZvTG9nKENhbnZhc1Byb2dyYW0qIHByb2dyYW0pCitT
dHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW1JbmZvTG9nKFdlYkdMUHJvZ3JhbSog
cHJvZ3JhbSkKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBHTHVpbnQgcHJvZ3Jh
bUlEID0gRVhUUkFDVChwcm9ncmFtKTsKQEAgLTE1NjksNyArMTU2OCw3IEBACiAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGludD4ocGFyYW0pOwogfQogCi1QYXNzUmVmUHRyPENhbnZhc0ludEFycmF5
PiBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYodW5zaWduZWQg
bG9uZyB0YXJnZXQsCitQYXNzUmVmUHRyPFdlYkdMSW50QXJyYXk+IEdyYXBoaWNzQ29udGV4dDNE
OjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBsb25nIHBuYW1lKQogewogICAgIC8vIEZJWE1FOiBpbXBsZW1l
bnQuCkBAIC0xNTc3LDcgKzE1NzYsNyBAQAogICAgIHJldHVybiAwOwogfQogCi1pbnQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFNoYWRlcmkoQ2FudmFzU2hhZGVyKiBzaGFkZXIsCitpbnQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFNoYWRlcmkoV2ViR0xTaGFkZXIqIHNoYWRlciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHBuYW1lKQogewogICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwpAQCAtMTU4Niw3ICsxNTg1LDcgQEAKICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8aW50PihwYXJhbSk7CiB9CiAKLVBhc3NSZWZQdHI8Q2FudmFzSW50QXJyYXk+IEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRTaGFkZXJpdihDYW52YXNTaGFkZXIqIHNoYWRlciwKK1Bhc3NSZWZQ
dHI8V2ViR0xJbnRBcnJheT4gR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlcml2KFdlYkdMU2hh
ZGVyKiBzaGFkZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBwbmFtZSkKIHsKICAgICAvLyBGSVhNRTogaW1w
bGVtZW50LgpAQCAtMTU5NCw3ICsxNTkzLDcgQEAKICAgICByZXR1cm4gMDsKIH0KIAotU3RyaW5n
IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJJbmZvTG9nKENhbnZhc1NoYWRlciogc2hhZGVy
KQorU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJJbmZvTG9nKFdlYkdMU2hhZGVy
KiBzaGFkZXIpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgR0x1aW50IHNoYWRl
cklEID0gRVhUUkFDVChzaGFkZXIpOwpAQCAtMTYxMyw3ICsxNjEyLDcgQEAKICAgICByZXR1cm4g
cmVzOwogfQogCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlclNvdXJjZShDYW52
YXNTaGFkZXIqIHNoYWRlcikKK1N0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyU291
cmNlKFdlYkdMU2hhZGVyKiBzaGFkZXIpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAg
ICAgR0x1aW50IHNoYWRlcklEID0gRVhUUkFDVChzaGFkZXIpOwpAQCAtMTY1Niw3ICsxNjU1LDcg
QEAKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhcmFtKTsKIH0KIAotUGFzc1JlZlB0
cjxDYW52YXNGbG9hdEFycmF5PiBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VGV4UGFyYW1ldGVyZnYo
dW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUpCitQYXNzUmVmUHRyPFdl
YkdMRmxvYXRBcnJheT4gR3JhcGhpY3NDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcmZ2KHVuc2ln
bmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lKQogewogICAgIC8vIEZJWE1FOiBp
bXBsZW1lbnQuCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKQEAgLTE2ODEsNDIgKzE2ODAsNDIgQEAK
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihwYXJhbSk7CiB9CiAKLVBhc3NSZWZQdHI8Q2Fu
dmFzSW50QXJyYXk+IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJpdih1bnNpZ25l
ZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSkKK1Bhc3NSZWZQdHI8V2ViR0xJbnRB
cnJheT4gR3JhcGhpY3NDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcml2KHVuc2lnbmVkIGxvbmcg
dGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lKQogewogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQu
CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gMDsKIH0KIAotZmxvYXQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFVuaWZvcm1mKENhbnZhc1Byb2dyYW0qIHByb2dyYW0sIGxvbmcgbG9j
YXRpb24pCitmbG9hdCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybWYoV2ViR0xQcm9ncmFt
KiBwcm9ncmFtLCBsb25nIGxvY2F0aW9uKQogewogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQuCiAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gMDsKIH0KIAotUGFzc1JlZlB0cjxDYW52
YXNGbG9hdEFycmF5PiBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybWZ2KENhbnZhc1Byb2dy
YW0qIHByb2dyYW0sIGxvbmcgbG9jYXRpb24pCitQYXNzUmVmUHRyPFdlYkdMRmxvYXRBcnJheT4g
R3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1mdihXZWJHTFByb2dyYW0qIHByb2dyYW0sIGxv
bmcgbG9jYXRpb24pCiB7CiAgICAgLy8gRklYTUU6IGltcGxlbWVudC4KICAgICBub3RJbXBsZW1l
bnRlZCgpOwogICAgIHJldHVybiAwOwogfQogCi1pbnQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVu
aWZvcm1pKENhbnZhc1Byb2dyYW0qIHByb2dyYW0sIGxvbmcgbG9jYXRpb24pCitpbnQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFVuaWZvcm1pKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgbG9uZyBsb2Nh
dGlvbikKIHsKICAgICAvLyBGSVhNRTogaW1wbGVtZW50LgogICAgIG5vdEltcGxlbWVudGVkKCk7
CiAgICAgcmV0dXJuIDA7CiB9CiAKLVBhc3NSZWZQdHI8Q2FudmFzSW50QXJyYXk+IEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRVbmlmb3JtaXYoQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwgbG9uZyBsb2Nh
dGlvbikKK1Bhc3NSZWZQdHI8V2ViR0xJbnRBcnJheT4gR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVu
aWZvcm1pdihXZWJHTFByb2dyYW0qIHByb2dyYW0sIGxvbmcgbG9jYXRpb24pCiB7CiAgICAgLy8g
RklYTUU6IGltcGxlbWVudC4KICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiAwOwog
fQogCi1sb25nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtTG9jYXRpb24oQ2FudmFzUHJv
Z3JhbSogcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQorbG9uZyBHcmFwaGljc0NvbnRleHQz
RDo6Z2V0VW5pZm9ybUxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgU3RyaW5n
JiBuYW1lKQogewogICAgIGlmICghcHJvZ3JhbSkKICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMTcz
Myw3ICsxNzMyLDcgQEAKICAgICByZXR1cm4gMDsKIH0KIAotUGFzc1JlZlB0cjxDYW52YXNGbG9h
dEFycmF5PiBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliZnYodW5zaWduZWQgbG9u
ZyBpbmRleCwKK1Bhc3NSZWZQdHI8V2ViR0xGbG9hdEFycmF5PiBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0VmVydGV4QXR0cmliZnYodW5zaWduZWQgbG9uZyBpbmRleCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGxvbmcgcG5hbWUpCiB7CiAgICAgLy8gRklYTUU6IGltcGxlbWVudC4KQEAgLTE3NDksNyArMTc0
OCw3IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLVBhc3NSZWZQdHI8Q2FudmFzSW50QXJyYXk+IEdy
YXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJpdih1bnNpZ25lZCBsb25nIGluZGV4LAor
UGFzc1JlZlB0cjxXZWJHTEludEFycmF5PiBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0
cmliaXYodW5zaWduZWQgbG9uZyBpbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHBuYW1lKQog
ewogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQuCkBAIC0xNzY2LDcgKzE3NjUsNyBAQAogCiBHTF9T
QU1FX01FVEhPRF8yKEhpbnQsIGhpbnQsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwog
Ci1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc0J1ZmZlcihDYW52YXNCdWZmZXIqIGJ1ZmZlcikK
K2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzQnVmZmVyKFdlYkdMQnVmZmVyKiBidWZmZXIpCiB7
CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgcmV0dXJuIGdsSXNCdWZmZXIoRVhUUkFD
VChidWZmZXIpKTsKQEAgLTE3NzgsMzEgKzE3NzcsMzEgQEAKICAgICByZXR1cm4gZ2xJc0VuYWJs
ZWQoY2FwKTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNGcmFtZWJ1ZmZlcihDYW52
YXNGcmFtZWJ1ZmZlciogZnJhbWVidWZmZXIpCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc0Zy
YW1lYnVmZmVyKFdlYkdMRnJhbWVidWZmZXIqIGZyYW1lYnVmZmVyKQogewogICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwogICAgIHJldHVybiBnbElzRnJhbWVidWZmZXIoRVhUUkFDVChmcmFtZWJ1
ZmZlcikpOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc1Byb2dyYW0oQ2FudmFzUHJv
Z3JhbSogcHJvZ3JhbSkKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzUHJvZ3JhbShXZWJHTFBy
b2dyYW0qIHByb2dyYW0pCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgcmV0dXJu
IGdsSXNQcm9ncmFtKEVYVFJBQ1QocHJvZ3JhbSkpOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4
dDNEOjppc1JlbmRlcmJ1ZmZlcihDYW52YXNSZW5kZXJidWZmZXIqIHJlbmRlcmJ1ZmZlcikKK2Jv
b2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyYnVmZmVyKiBy
ZW5kZXJidWZmZXIpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgcmV0dXJuIGds
SXNSZW5kZXJidWZmZXIoRVhUUkFDVChyZW5kZXJidWZmZXIpKTsKIH0KIAotYm9vbCBHcmFwaGlj
c0NvbnRleHQzRDo6aXNTaGFkZXIoQ2FudmFzU2hhZGVyKiBzaGFkZXIpCitib29sIEdyYXBoaWNz
Q29udGV4dDNEOjppc1NoYWRlcihXZWJHTFNoYWRlciogc2hhZGVyKQogewogICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwogICAgIHJldHVybiBnbElzU2hhZGVyKEVYVFJBQ1Qoc2hhZGVyKSk7CiB9
CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzVGV4dHVyZShDYW52YXNUZXh0dXJlKiB0ZXh0
dXJlKQorYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNUZXh0dXJlKFdlYkdMVGV4dHVyZSogdGV4
dHVyZSkKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICByZXR1cm4gZ2xJc1RleHR1
cmUoRVhUUkFDVCh0ZXh0dXJlKSk7CkBAIC0xODEwLDcgKzE4MDksNyBAQAogCiBHTF9TQU1FX01F
VEhPRF8xKExpbmVXaWR0aCwgbGluZVdpZHRoLCBkb3VibGUpCiAKLUdMX1NBTUVfTUVUSE9EXzFf
WChMaW5rUHJvZ3JhbSwgbGlua1Byb2dyYW0sIENhbnZhc1Byb2dyYW0qKQorR0xfU0FNRV9NRVRI
T0RfMV9YKExpbmtQcm9ncmFtLCBsaW5rUHJvZ3JhbSwgV2ViR0xQcm9ncmFtKikKIAogdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6cGl4ZWxTdG9yZWkodW5zaWduZWQgbG9uZyBwbmFtZSwgbG9uZyBw
YXJhbSkKIHsKQEAgLTE4MjUsNyArMTgyNCw3IEBACiAKIEdMX1NBTUVfTUVUSE9EXzIoUG9seWdv
bk9mZnNldCwgcG9seWdvbk9mZnNldCwgZG91YmxlLCBkb3VibGUpCiAKLVBhc3NSZWZQdHI8Q2Fu
dmFzQXJyYXk+IEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzKGxvbmcgeCwgbG9uZyB5LAor
UGFzc1JlZlB0cjxXZWJHTEFycmF5PiBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVscyhsb25n
IHgsIGxvbmcgeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgbG9uZyBmb3JtYXQsIHVuc2lnbmVkIGxvbmcgdHlwZSkgewogICAgIC8vIEZJWE1FOiBzdXBw
b3J0IG1vcmUgcGl4ZWwgZm9ybWF0cyBhbmQgdHlwZXMuCkBAIC0xODMzLDcgKzE4MzIsNyBAQAog
ICAgICAgICByZXR1cm4gMDsKIAogICAgIC8vIEZJWE1FOiB0YWtlIGludG8gYWNjb3VudCBwYWNr
IGFsaWdubWVudC4KLSAgICBSZWZQdHI8Q2FudmFzVW5zaWduZWRCeXRlQXJyYXk+IGFycmF5ID0g
Q2FudmFzVW5zaWduZWRCeXRlQXJyYXk6OmNyZWF0ZSh3aWR0aCAqIGhlaWdodCAqIDQpOworICAg
IFJlZlB0cjxXZWJHTFVuc2lnbmVkQnl0ZUFycmF5PiBhcnJheSA9IFdlYkdMVW5zaWduZWRCeXRl
QXJyYXk6OmNyZWF0ZSh3aWR0aCAqIGhlaWdodCAqIDQpOwogICAgIGdsUmVhZFBpeGVscyh4LCB5
LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGFycmF5LT5iYXNlQWRkcmVzcygpKTsKICAg
ICByZXR1cm4gYXJyYXk7CiB9CkBAIC0xODQ4LDcgKzE4NDcsNyBAQAogCiBHTF9TQU1FX01FVEhP
RF80KFNjaXNzb3IsIHNjaXNzb3IsIGxvbmcsIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVk
IGxvbmcpCiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNoYWRlclNvdXJjZShDYW52YXNTaGFk
ZXIqIHNoYWRlciwgY29uc3QgU3RyaW5nJiBzb3VyY2UpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpzaGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIqIHNoYWRlciwgY29uc3QgU3RyaW5nJiBzb3VyY2Up
CiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgQ1N0cmluZyBzdHIgPSBzb3VyY2Uu
dXRmOCgpOwpAQCAtMTg3Nyw3ICsxODc2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBib3JkZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FudmFzQXJy
YXkqIHBpeGVscykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJHTEFycmF5
KiBwaXhlbHMpCiB7CiAgICAgLy8gRklYTUU6IG11c3QgZG8gdmFsaWRhdGlvbiBzaW1pbGFyIHRv
IEpPR0wncyB0byBlbnN1cmUgdGhhdAogICAgIC8vIHRoZSBpbmNvbWluZyBhcnJheSBpcyBvZiB0
aGUgYXBwcm9wcmlhdGUgbGVuZ3RoLgpAQCAtMjEwMSw3ICsyMTAwLDcgQEAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBoZWlnaHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZm9ybWF0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHR5cGUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ2FudmFzQXJyYXkqIHBpeGVscykKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBXZWJHTEFycmF5KiBwaXhlbHMpCiB7CiAgICAgLy8gRklYTUU6
IGltcGxlbWVudC4KICAgICBub3RJbXBsZW1lbnRlZCgpOwpAQCAtMjIzNSw5ICsyMjM0LDkgQEAK
ICAgICBnbFVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgdmFsdWUp
OwogfQogCi1HTF9TQU1FX01FVEhPRF8xX1goVXNlUHJvZ3JhbSwgdXNlUHJvZ3JhbSwgQ2FudmFz
UHJvZ3JhbSopCitHTF9TQU1FX01FVEhPRF8xX1goVXNlUHJvZ3JhbSwgdXNlUHJvZ3JhbSwgV2Vi
R0xQcm9ncmFtKikKIAotR0xfU0FNRV9NRVRIT0RfMV9YKFZhbGlkYXRlUHJvZ3JhbSwgdmFsaWRh
dGVQcm9ncmFtLCBDYW52YXNQcm9ncmFtKikKK0dMX1NBTUVfTUVUSE9EXzFfWChWYWxpZGF0ZVBy
b2dyYW0sIHZhbGlkYXRlUHJvZ3JhbSwgV2ViR0xQcm9ncmFtKikKIAogR0xfU0FNRV9NRVRIT0Rf
MihWZXJ0ZXhBdHRyaWIxZiwgdmVydGV4QXR0cmliMWYsIHVuc2lnbmVkIGxvbmcsIGZsb2F0KQog
Cg==
</data>
<flag name="review"
          id="24504"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>